diff --git a/.github/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE.md index 92565b83..a94c200e 100644 --- a/.github/ISSUE_TEMPLATE.md +++ b/.github/ISSUE_TEMPLATE.md @@ -1,6 +1,6 @@ **Do you want to request a *feature* or report a *bug*?** diff --git a/AUTHORS b/AUTHORS index 595afd3b..85650759 100644 --- a/AUTHORS +++ b/AUTHORS @@ -1,8 +1,11 @@ -Akash Ghoswami -Mridul Meharia -Ranajit Banerjee -Sushrut Shivaswamy -Rousan Ali -Sandeep Acharya -Subhash Haldar -Ujjal Kumar Dutta +Akash Ghoswami +Mridul Meharia +Ranajit Banerjee +Sushrut Shivaswamy +Rousan Ali +Ujjal Kumar Dutta +Sanjay Kumar Mahto +Adarsh Lilha +Swati Mukherjee +Sandeep Acharya +Subhash Haldar diff --git a/LICENSE b/LICENSE index 5c9a8596..7f5781ff 100644 --- a/LICENSE +++ b/LICENSE @@ -1,8 +1,6 @@ -##MuzeJS License - MIT License -Copyright (c) 2018 Charts.com +Copyright (c) 2018 MuzeJS.org Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/README.md b/README.md index a35004d7..0748cc49 100644 --- a/README.md +++ b/README.md @@ -36,8 +36,8 @@ Muze uses an in-browser [DataModel](https://github.com/chartshq/datamodel) to st Insert the muze build and the required CSS into the ``: ```html - - + + ``` ### NPM @@ -127,21 +127,21 @@ canvas .mount("#chart"); // Specify an element to mount on using a CSS selector ``` -See [charts.com/muze/docs](https://www.charts.com/muze/docs) for more documentation! +See [muzejs.org/docs](https://muzejs.org/docs) for more documentation! You also can checkout our Yeoman Generator [generator-muze](https://github.com/chartshq/generator-muze) to try out the **muze** through a boilerplate app. ## Documentation -You can find detailed tutorials, concepts and API references at [charts.com/muze/docs](https://www.charts.com/muze/docs). +You can find detailed tutorials, concepts and API references at [muzejs.org/docs](https://muzejs.org/docs). ## Support -Please raise a [Github issue](https://github.com/chartshq/muze/issues/new), or contact us at [muze@charts.com](mailto:muze@charts.com). +Please raise a Github issue [here](https://github.com/chartshq/muze/issues/new). ## Roadmap -Please contribute to our public wishlist or upvote an existing feature at [Muze Public Wishlist & Roadmap](https://feedback.muze.charts.com) +Please contribute to our public wishlist or upvote an existing feature at [Muze Public Wishlist & Roadmap](https://feedback.muzejs.org) ## Contributing diff --git a/dist/muze.js b/dist/muze.js index b5814602..dfc68d8d 100644 --- a/dist/muze.js +++ b/dist/muze.js @@ -1,2 +1,2 @@ -!function webpackUniversalModuleDefinition(root,factory){"object"==typeof exports&&"object"==typeof module?module.exports=factory():"function"==typeof define&&define.amd?define("muze",[],factory):"object"==typeof exports?exports.muze=factory():root.muze=factory()}(window,function(){return function(modules){var installedModules={};function __webpack_require__(moduleId){if(installedModules[moduleId])return installedModules[moduleId].exports;var module=installedModules[moduleId]={i:moduleId,l:!1,exports:{}};return modules[moduleId].call(module.exports,module,module.exports,__webpack_require__),module.l=!0,module.exports}return __webpack_require__.m=modules,__webpack_require__.c=installedModules,__webpack_require__.d=function(exports,name,getter){__webpack_require__.o(exports,name)||Object.defineProperty(exports,name,{enumerable:!0,get:getter})},__webpack_require__.r=function(exports){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(exports,"__esModule",{value:!0})},__webpack_require__.t=function(value,mode){if(1&mode&&(value=__webpack_require__(value)),8&mode)return value;if(4&mode&&"object"==typeof value&&value&&value.__esModule)return value;var ns=Object.create(null);if(__webpack_require__.r(ns),Object.defineProperty(ns,"default",{enumerable:!0,value:value}),2&mode&&"string"!=typeof value)for(var key in value)__webpack_require__.d(ns,key,function(key){return value[key]}.bind(null,key));return ns},__webpack_require__.n=function(module){var getter=module&&module.__esModule?function getDefault(){return module.default}:function getModuleExports(){return module};return __webpack_require__.d(getter,"a",getter),getter},__webpack_require__.o=function(object,property){return Object.prototype.hasOwnProperty.call(object,property)},__webpack_require__.p="",__webpack_require__(__webpack_require__.s=7)}([function(module,exports,__webpack_require__){(function(module){var __WEBPACK_AMD_DEFINE_FACTORY__,__WEBPACK_AMD_DEFINE_ARRAY__,__WEBPACK_AMD_DEFINE_RESULT__;function _typeof(obj){return(_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}!function(e,t){"object"==_typeof(exports)&&"object"==_typeof(module)?module.exports=t():(__WEBPACK_AMD_DEFINE_ARRAY__=[],void 0===(__WEBPACK_AMD_DEFINE_RESULT__="function"==typeof(__WEBPACK_AMD_DEFINE_FACTORY__=t)?__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports,__WEBPACK_AMD_DEFINE_ARRAY__):__WEBPACK_AMD_DEFINE_FACTORY__)||(module.exports=__WEBPACK_AMD_DEFINE_RESULT__))}(window,function(){return function(e){var t={};function n(r){if(t[r])return t[r].exports;var a=t[r]={i:r,l:!1,exports:{}};return e[r].call(a.exports,a,a.exports,n),a.l=!0,a.exports}return n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==_typeof(e)&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var a in e)n.d(r,a,function(t){return e[t]}.bind(null,a));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=1)}([function(e){e.exports={name:"datamodel",description:"Relational algebra compliant in-memory tabular data store",homepage:"https://github.com/chartshq/datamodel",version:"2.1.0",license:"MIT",main:"dist/datamodel.js",author:"Charts.com ",keywords:["datamodel","data","relational","algebra","model","muze","fusioncharts","table","tabular","operation"],repository:{type:"git",url:"https://github.com/chartshq/datamodel.git"},contributors:[{name:"Akash Goswami",email:"akash@charts.com"},{name:"Subhash Haldar",email:"subhash@charts.com"},{name:"Rousan Ali",email:"rousan@charts.com",url:"https://rousan.io"},{name:"Ujjal Kumar Dutta",email:"ujjal@charts.com"}],dependencies:{"d3-dsv":"^1.0.8"},devDependencies:{"babel-cli":"6.26.0","babel-core":"^6.26.3","babel-eslint":"6.1.2","babel-loader":"^7.1.4","babel-plugin-transform-runtime":"^6.23.0","babel-preset-env":"^1.7.0","babel-preset-es2015":"^6.24.1","babel-preset-flow":"^6.23.0",chai:"3.5.0","cross-env":"^5.0.5",eslint:"3.19.0","eslint-config-airbnb":"15.1.0","eslint-plugin-import":"2.7.0","eslint-plugin-jsx-a11y":"5.1.1","eslint-plugin-react":"7.3.0","istanbul-instrumenter-loader":"^3.0.0",jsdoc:"3.5.5",json2yaml:"^1.1.0",karma:"1.7.1","karma-chai":"0.1.0","karma-chrome-launcher":"2.1.1","karma-coverage-istanbul-reporter":"^1.3.0","karma-mocha":"1.3.0","karma-spec-reporter":"0.0.31","karma-webpack":"2.0.3",marked:"^0.5.0",mocha:"3.4.2","mocha-webpack":"0.7.0","transform-runtime":"0.0.0",webpack:"^4.12.0","webpack-cli":"^3.0.7","webpack-dev-server":"^3.1.4"},scripts:{test:"npm run lint && npm run ut",ut:"karma start karma.conf.js",utd:"karma start --single-run false --browsers Chrome karma.conf.js ",build:"webpack --mode production",start:"webpack-dev-server --config webpack.config.dev.js --mode development --open",lint:"eslint ./src","lint-errors":"eslint --quiet ./src",docs:"rm -rf yaml && mkdir yaml && jsdoc -c jsdoc.conf.json"}}},function(e,t,n){var r=n(2);e.exports=r.default?r.default:r},function(e,t,n){"use strict";n.r(t);var r={};n.r(r),n.d(r,"DataFormat",function(){return o}),n.d(r,"DimensionSubtype",function(){return u}),n.d(r,"MeasureSubtype",function(){return c}),n.d(r,"FieldType",function(){return f}),n.d(r,"FilteringMode",function(){return l});var a={};n.r(a),n.d(a,"DSVArr",function(){return Ge}),n.d(a,"DSVStr",function(){return tt}),n.d(a,"FlatJSON",function(){return nt}),n.d(a,"Auto",function(){return rt});var i={};n.r(i),n.d(i,"sum",function(){return jt}),n.d(i,"avg",function(){return St}),n.d(i,"min",function(){return Nt}),n.d(i,"max",function(){return kt}),n.d(i,"first",function(){return Ft}),n.d(i,"last",function(){return Dt}),n.d(i,"count",function(){return Tt}),n.d(i,"sd",function(){return Rt});var o={FLAT_JSON:"FlatJSON",DSV_STR:"DSVStr",DSV_ARR:"DSVArr",AUTO:"Auto"},u={CATEGORICAL:"categorical",TEMPORAL:"temporal",GEO:"geo",BINNED:"binned"},c={CONTINUOUS:"continuous"},f={MEASURE:"measure",DIMENSION:"dimension"},l={NORMAL:"normal",INVERSE:"inverse",ALL:"all"};function s(e){return e instanceof Date?e:new Date(e)}function d(e){return e<10?"0"+e:e}function p(e){this.format=e,this.dtParams=void 0,this.nativeDate=void 0}RegExp.escape=function(e){return e.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&")},p.TOKEN_PREFIX="%",p.DATETIME_PARAM_SEQUENCE={YEAR:0,MONTH:1,DAY:2,HOUR:3,MINUTE:4,SECOND:5,MILLISECOND:6},p.defaultNumberParser=function(e){return function(t){var n;return isFinite(n=parseInt(t,10))?n:e}},p.defaultRangeParser=function(e,t){return function(n){var r,a=void 0;if(!n)return t;var i=n.toLowerCase();for(a=0,r=e.length;aa.getFullYear()&&(t=""+(i-1)+r),s(t).getFullYear()},formatter:function formatter(e){var t=s(e).getFullYear().toString(),n=void 0;return t&&(n=t.length,t=t.substring(n-2,n)),t}},Y:{name:"Y",index:0,extract:function extract(){return"(\\d{4})"},parser:p.defaultNumberParser(),formatter:function formatter(e){return s(e).getFullYear().toString()}}}},p.getTokenFormalNames=function(){var e=p.getTokenDefinitions();return{HOUR:e.H,HOUR_12:e.l,AMPM_UPPERCASE:e.p,AMPM_LOWERCASE:e.P,MINUTE:e.M,SECOND:e.S,SHORT_DAY:e.a,LONG_DAY:e.A,DAY_OF_MONTH:e.e,DAY_OF_MONTH_CONSTANT_WIDTH:e.d,SHORT_MONTH:e.b,LONG_MONTH:e.B,MONTH_OF_YEAR:e.m,SHORT_YEAR:e.y,LONG_YEAR:e.Y}},p.tokenResolver=function(){var e=p.getTokenDefinitions(),t=function t(){for(var e=0,t=void 0,n=void 0,r=arguments.length;e=0;)o=e[i+1],-1!==r.indexOf(o)&&a.push({index:i,token:o});return a},p.formatAs=function(e,t){var n,r=s(e),a=p.findTokens(t),i=p.getTokenDefinitions(),o=String(t),u=p.TOKEN_PREFIX,c=void 0,f=void 0,l=void 0;for(l=0,n=a.length;l=0;d--)(f=i[d].index)+1!==s.length-1?(void 0===u&&(u=s.length),l=s.substring(f+2,u),s=s.substring(0,f+2)+RegExp.escape(l)+s.substring(u,s.length),u=f):u=f;for(d=0;d0&&e.split(",").forEach(function(e){var n=e.split("-"),r=+n[0],a=+(n[1]||n[0]);if(a>=r)for(var i=r;i<=a;i+=1)t(i)})}var T=function(){function e(e,t){for(var n=0;n3&&void 0!==arguments[3]&&arguments[3],a=arguments.length>4&&void 0!==arguments[4]?arguments[4]:J.CROSS,i=[],o=[],u=n||K,c=e.getFieldspace(),f=t.getFieldspace(),l=c.name,s=f.name,d=c.name+"."+f.name,p=C(c,f);if(l===s)throw new Error("DataModels must have different alias names");return c.fields.forEach(function(e){var t=_({},e.schema());-1===p.indexOf(t.name)||r||(t.name=c.name+"."+t.name),i.push(t)}),f.fields.forEach(function(e){var t=_({},e.schema());-1!==p.indexOf(t.name)?r||(t.name=f.name+"."+t.name,i.push(t)):i.push(t)}),D(e._rowDiffset,function(n){var d=!1,h=void 0;D(t._rowDiffset,function(v){var m=[],y={};y[l]={},y[s]={},c.fields.forEach(function(e){m.push(e.partialField.data[n]),y[l][e.name()]=e.partialField.data[n]}),f.fields.forEach(function(e){-1!==p.indexOf(e.schema().name)&&r||m.push(e.partialField.data[v]),y[s][e.name()]=e.partialField.data[v]});var g=ot(y[l]),b=ot(y[s]);if(u(g,b,function(){return e.detachedRoot()},function(){return t.detachedRoot()},{})){var w={};m.forEach(function(e,t){w[i[t].name]=e}),d&&J.CROSS!==a?o[h]=w:(o.push(w),d=!0,h=n)}else if((a===J.LEFTOUTER||a===J.RIGHTOUTER)&&!d){var _={},O=c.fields.length-1;m.forEach(function(e,t){_[i[t].name]=t<=O?e:null}),d=!0,h=n,o.push(_)}})}),new At(o,i,{name:d})}function z(e,t){var n=""+e,r=""+t;return nr?1:0}function q(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:z;return e.length>1&&function e(t,n,r,a){if(r===n)return t;var i=n+Math.floor((r-n)/2);return e(t,n,i,a),e(t,i+1,r,a),function(e,t,n,r,a){for(var i=e,o=[],u=t;u<=r;u+=1)o[u]=i[u];for(var c=t,f=n+1,l=t;l<=r;l+=1)c>n?(i[l]=o[f],f+=1):f>r?(i[l]=o[c],c+=1):a(o[c],o[f])<=0?(i[l]=o[c],c+=1):(i[l]=o[f],f+=1)}(t,n,i,r,a),t}(e,0,e.length-1,t),e}function X(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);ti?"desc"===t?-1:1:0}}return r}function Q(e,t){var n=new Map,r=[];return e.forEach(function(e){var a=e[t];n.has(a)?r[n.get(a)][1].push(e):(r.push([a,[e]]),n.set(a,r.length-1))}),r}function Z(e,t,n){var r={label:e[0]};return t.reduce(function(t,r,a){return t[r]=e[1].map(function(e){return e[n[a].index]}),t},r),r}function te(e,t){var n={},r=[],a=[],i=[],o=e.getFieldspace(),u=t.getFieldspace(),c=o.fieldsObj(),f=u.fieldsObj(),l=o.name+" union "+u.name;if(!A(e._colIdentifier.split(",").sort(),t._colIdentifier.split(",").sort()))return null;function s(e,t,r){D(e._rowDiffset,function(e){var o={},u="";a.forEach(function(n){var r=t[n].partialField.data[e];u+="-"+r,o[n]=r}),n[u]||(r&&i.push(o),n[u]=!0)})}return e._colIdentifier.split(",").forEach(function(e){var t=c[e];r.push(_({},t.schema())),a.push(t.schema().name)}),s(t,f,!1),s(e,c,!0),new At(i,r,{name:l})}function ne(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);tn&&(n=a))}),[t,n]}}]),t}(),Te=function(){function e(e,t){for(var n=0;n=i?c=!0:(r=e.charCodeAt(o++))===qe?f=!0:r===Xe&&(f=!0,e.charCodeAt(o)===qe&&++o),e.slice(a+1,t-1).replace(/""/g,'"')}for(;o2&&void 0!==arguments[2]?arguments[2]:{},a=arguments[3],i=void 0;t!==H?(i={op:t,meta:r,criteria:a},e._derivation.push(i)):(i=[].concat(it(a)),e._derivation.length=0,(n=e._derivation).push.apply(n,it(i)))},lt=function lt(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r=n.operation||"and",a=n.filterByMeasure||!1,i=[];i=t.length?t.map(function(e){return n=(t=e).getData(),r=n.schema,i=t.getFieldsConfig(),o=t.getFieldspace().fieldsObj(),u=n.data,c=Object.values(i).reduce(function(e,t){return e[t.def.name]=o[t.def.name].domain(),e},{}),function(e){return!!u.length&&u.some(function(t){return r.every(function(n){if(!(n.name in e))return!0;var r=e[n.name].valueOf();if(a&&n.type===f.MEASURE)return r>=c[n.name][0]&&r<=c[n.name][1];if(n.type!==f.DIMENSION)return!0;var o=i[n.name].index;return t[o]===e[n.name].valueOf()})})};var t,n,r,i,o,u,c}):[function(){return!1}];return"and"===r?e.clone(!1,!1).select(function(e){return i.every(function(t){return t(e)})},{saveChild:!1,mode:l.ALL}):e.clone(!1,!1).select(function(e){return i.some(function(t){return t(e)})},{mode:l.ALL,saveChild:!1})},st=function st(e,t,n,r){var a=e.clone(r.saveChild),i=function ft(e,t,n,r,a){var i=[],o=-1,u=r.mode,c=void 0,f={},s=function s(){return a.detachedRoot()},d=function d(e){return n(function(e,t){var n={},r=!0,a=!1,i=void 0;try{for(var o,u=e[Symbol.iterator]();!(r=(o=u.next()).done);r=!0){var c=o.value;n[c.name()]=new F(c.partialField.data[t],c)}}catch(e){a=!0,i=e}finally{try{!r&&u.return&&u.return()}finally{if(a)throw i}}return n}(t,e),e,s,f)},p=void 0;return p=u===l.INVERSE?function(e){return!d(e)}:function(e){return d(e)},D(e,function(e){p(e)&&(-1!==o&&e===o+1?(c=i.length-1,i[c]=i[c].split("-")[0]+"-"+e):i.push(""+e),o=e)}),i.join(",")}(a._rowDiffset,a.getPartialFieldspace().fields,t,n,e);return a._rowDiffset=i,a.__calculateFieldspace().calculateFieldsConfig(),ct(a,L,{config:n},t),a},dt=function dt(e,t,n,r){var a=e.clone(n.saveChild),i=t;return n.mode===l.INVERSE&&(i=r.filter(function(e){return-1===t.indexOf(e)})),a._colIdentifier=i.join(","),a.__calculateFieldspace().calculateFieldsConfig(),ct(a,U,{projField:t,config:n,actualProjField:i},null),a},pt=function pt(e){if((e=_({},e)).type||(e.type=f.DIMENSION),!e.subtype)switch(e.type){case f.MEASURE:e.subtype=c.CONTINUOUS;break;default:case f.DIMENSION:e.subtype=u.CATEGORICAL}return e},ht=function ht(e,t,n,r){n=n.map(function(e){return pt(e)}),r=Object.assign(Object.assign({},Je),r);var i=a[r.dataFormat];if(!i||"function"!=typeof i)throw new Error("No converter function found for "+r.dataFormat+" format");var u=i(t,r),c=at(u,2),f=c[0],l=c[1],s=Be(l,n,f),d=N.createNamespace(s,r.name);return e._partialFieldspace=d,e._rowDiffset=l.length&&l[0].length?"0-"+(l[0].length-1):"",e._colIdentifier=n.map(function(e){return e.name}).join(),e._dataFormat=r.dataFormat===o.AUTO?S(t):r.dataFormat,e},vt=function vt(e,t){for(var n=0;n2&&void 0!==arguments[2]?arguments[2]:{},a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},i=a.nonTraversingModel,o=a.excludeModels||[];t!==i&&((!o.length||-1===o.indexOf(t))&&t.handlePropagation(n,r),t._children.forEach(function(t){var i=mt(n,t),o=at(i,2),u=o[0],c=o[1];e(t,[u,c],r,a)}))},bt=function bt(e,t,n,r){var a=void 0,i=void 0,o=n.propagationNameSpace,u=n.propagateToSource,c=n.sourceId,f=r.propagateInterpolatedValues,l=[];if(null===e&&!0!==r.persistent)l=[{criteria:[]}];else{var s,d=Object.values(o.mutableActions);!1!==u&&(d=d.filter(function(e){return e.config.sourceId!==c}));var p=d.filter(function(e){return(r.filterFn||function(){return!0})(e,r)}).map(function(e){return e.config.criteria}),h=[];if(!1!==u){var v=Object.values(o.mutableActions);v.forEach(function(e){var t=e.config;!1===t.applyOnSource&&t.action===r.action&&t.sourceId!==c&&(h.push(e.model),(a=v.filter(function(t){return t!==e}).map(function(e){return e.config.criteria})).length&&l.push({criteria:a,models:e.model,path:function gt(e){for(var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];e._parent;)t.push(e),e=e._parent;return t}(e.model)}))})}a=(s=[]).concat.apply(s,[].concat(it(p),[e])).filter(function(e){return null!==e}),l.push({criteria:a,excludeModels:[].concat(h,it(r.excludeModels||[]))})}var m=t.model,y=Object.assign({sourceIdentifiers:e,propagationSourceId:c},r),g=t.groupByModel;f&&g&&(i=lt(g,a,{filterByMeasure:f}),yt(g,i,y)),l.forEach(function(e){var t=lt(m,e.criteria),n=e.path;if(n){var r=function(e,t){for(var n=0,r=t.length;n0&&void 0!==arguments[0])||arguments[0],t=void 0;if(!1===(!(arguments.length>1&&void 0!==arguments[1])||arguments[1])){var n=this.getData({getAllFields:!0}),r=n.data,a=n.schema,i=r.map(function(e){var t={};return a.forEach(function(n,r){t[n.name]=e[r]}),t});t=new this.constructor(i,a)}else t=new this.constructor(this);return e&&this._children.push(t),t}},{key:"project",value:function value(e,t){var n={mode:l.NORMAL,saveChild:!0};t=Object.assign({},n,t);var r=this.getFieldsConfig(),a=Object.keys(r),i=t.mode,o=e.reduce(function(e,t){return"RegExp"===t.constructor.name?e.push.apply(e,function(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t1&&void 0!==arguments[1]?arguments[1]:[];ct(this,H,null,t),this._parent=e,e._children.push(this)}},{key:"getParent",value:function value(){return this._parent}},{key:"getChildren",value:function value(){return this._children}},{key:"getDerivations",value:function value(){return this._derivation}}]),e}(),Ot=function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function(e,t){var n=[],r=!0,a=!1,i=void 0;try{for(var o,u=e[Symbol.iterator]();!(r=(o=u.next()).done)&&(n.push(o.value),!t||n.length!==t);r=!0);}catch(e){a=!0,i=e}finally{try{!r&&u.return&&u.return()}finally{if(a)throw i}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")},Et=function(){function e(e,t){for(var n=0;n0,c=[];if(n.split(",").forEach(function(t){for(var n=0;n=0;u--)a=t[u][0],i=t[u][1],(o=vt(r,a))&&("function"==typeof i?q(n,function(e,t){return i(e[o.index],t[o.index])}):O(i)?function(){var e=Q(n,o.index),t=i[i.length-1],a=i.slice(0,i.length-1),u=a.map(function(e){return vt(r,e)});e.forEach(function(e){e.push(Z(e,a,u))}),q(e,function(e,n){var r=e[2],a=n[2];return t(r,a)}),n.length=0,e.forEach(function(e){n.push.apply(n,X(e[1]))})}():(i="desc"===String(i).toLowerCase()?"desc":"asc",q(n,$(o.type,i,o.index))));e.uids=[],n.forEach(function(t){e.uids.push(t.pop())})}(i,r),a.columnWise){var f=Array.apply(void 0,X(Array(i.schema.length))).map(function(){return[]});i.data.forEach(function(e){e.forEach(function(e,t){f[t].push(e)})}),i.data=f}return i}.call(this,this.getPartialFieldspace().fields,this._rowDiffset,e.getAllFields?t.map(function(e){return e.name()}).join():this._colIdentifier,e.sort,{columnWise:"column"===e.order,addUid:!!e.withUid});if(!e.formatter)return n;var r=e.formatter,a=n.data,i=n.schema,o=n.uids,u=i.map(function(e){return e.name}),c=Object.keys(r).reduce(function(e,t){var n=u.indexOf(t);return-1!==n&&e.push([n,r[t]]),e},[]);return"column"===e.order?c.forEach(function(e){var t=e[0],n=e[1];a[t].forEach(function(e,r){a[t][r]=n.call(void 0,e,o[r],i[t])})}):a.forEach(function(e,t){c.forEach(function(n){var r=n[0],a=n[1];e[r]=a.call(void 0,e[r],o[t],i[r])})}),n}},{key:"groupBy",value:function value(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{saveChild:!0},r=""+e.join(),i=function de(e,t,n,r){var a=function(e,t){var n=[],r=e.getFieldspace().getDimension();return Object.entries(r).forEach(function(e){var r=se(e,1)[0];t&&t.length?-1!==t.indexOf(r)&&n.push(r):n.push(r)}),n}(e,t),i=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n={},r=e.getFieldspace().getMeasure(),a=le.defaultReducer();return Object.keys(r).forEach(function(e){"string"!=typeof t[e]&&(t[e]=r[e].defAggFn());var i=le.resolve(t[e]);i?n[e]=i:(n[e]=a,t[e]=ue)}),n}(e,n),o=e.getFieldspace(),u=o.fieldsObj(),c=o.name,l=[],s=[],d=[],p={},h=[],v=void 0;Object.entries(u).forEach(function(e){var t=se(e,2),n=t[0],r=t[1];if(-1!==a.indexOf(n)||i[n])switch(d.push(_({},r.schema())),r.schema().type){case f.MEASURE:s.push(n);break;default:case f.DIMENSION:l.push(n)}});var m=0;D(e._rowDiffset,function(e){var t="";l.forEach(function(n){t=t+"-"+u[n].partialField.data[e]}),void 0===p[t]?(p[t]=m,h.push({}),l.forEach(function(t){h[m][t]=u[t].partialField.data[e]}),s.forEach(function(t){h[m][t]=[u[t].partialField.data[e]]}),m+=1):s.forEach(function(n){h[p[t]][n].push(u[n].partialField.data[e])})});var y={},g=function g(){return e.detachedRoot()};return h.forEach(function(e){var t=e;s.forEach(function(n){t[n]=i[n](e[n],g,y)})}),r?(r.__calculateFieldspace(),v=r):v=new Mt(h,d,{name:c}),v}.apply(void 0,[this,e,t]);return ct(i,V,{fieldsArr:e,groupByString:r,defaultReducer:le.defaultReducer()},t),n.saveChild&&this._children.push(i),i._parent=this,i}},{key:"sort",value:function value(e){var t=this.getData({order:"row",sort:e}),n=[t.schema.map(function(e){return e.name})].concat(t.data),r=new this.constructor(n,t.schema,{dataFormat:"DSVArr"});return r._sortingDetails=e,r}},{key:"serialize",value:function value(e,t){e=e||this._dataFormat,t=Object.assign({},{fieldSeparator:","},t);var n=this.getFieldspace().fields,r=n.map(function(e){return e.formattedData()}),a=r[0].length,i=void 0,u=void 0,c=void 0;if(e===o.FLAT_JSON)for(i=[],u=0;u=0&&(n.fields[r]=e)}else n.fields.push(e);return n._cachedFieldsObj=null,n._cachedDimension=null,n._cachedMeasure=null,this.__calculateFieldspace().calculateFieldsConfig(),this}},{key:"calculateVariable",value:function value(e,t,n){var r=this;e=pt(e),n=Object.assign({},{saveChild:!0,replaceVar:!1},n);var a=this.getFieldsConfig(),i=t.slice(0,t.length-1),o=t[t.length-1];if(a[e.name]&&!n.replaceVar)throw new Error(e.name+" field already exists in datamodel");var u=i.map(function(e){var t=a[e];if(!t)throw new Error(e+" is not a valid column name.");return t.index}),c=this.clone(),f=c.getFieldspace().fields,l=u.map(function(e){return f[e]}),s={},d=function d(){return r.detachedRoot()},p=[];D(c._rowDiffset,function(e){var t=l.map(function(t){return t.partialField.data[e]});p[e]=o.apply(void 0,function(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t1&&void 0!==arguments[1]?arguments[1]:{},n=arguments[2],r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},a=t.isMutableAction,i=t.sourceId,o=t.payload,u=function(e){for(;e._parent;)e=e._parent;return e}(this),c=u._propagationNameSpace,f={groupByModel:function e(t){return t._parent&&t._derivation.find(function(e){return"group"!==e.op})?e(t._parent):t}(this),model:u};return n&&function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments[2],r=void 0,a=t.isMutableAction,i=t.criteria,o=t.action+"-"+t.sourceId;r=a?e.mutableActions:e.immutableActions,null===i?delete r[o]:r[o]={model:n,config:t}}(c,t,this),bt(e,f,{propagationNameSpace:c,sourceId:i},Object.assign({payload:o},t)),a&&function(e,t,n){var r=e.immutableActions;for(var a in r){var i=r[a].config,o=n.config.sourceId,u=!n.propConfig.filterImmutableAction||n.propConfig.filterImmutableAction(i,n.config);if(i.sourceId!==o&&u){var c=i.criteria;bt(c,t,{propagationNameSpace:e,propagateToSource:!1,sourceId:o},i)}}}(c,f,{config:t,propConfig:r}),this}},{key:"on",value:function value(e,t){switch(e){case"propagation":this._onPropagation.push(t)}return this}},{key:"unsubscribe",value:function value(e){switch(e){case"propagation":this._onPropagation=[]}return this}},{key:"handlePropagation",value:function value(e,t){var n=this;this._onPropagation.forEach(function(r){return r.call(n,e,t)})}},{key:"bin",value:function value(e,t){var n=this.getFieldsConfig();if(!n[e])throw new Error("Field "+e+" doesn't exist");var r=t.name||e+"_binned";if(n[r])throw new Error("Field "+r+" already exists");var a=function(e,t,n){var r=n.buckets,a=n.binsCount,i=n.binSize,o=n.start,u=n.end,c=e.domain(),f=M(c,2),l=f[0],s=f[1];r||(o=0!==o&&(!o||o>l)?l:o,u=0!==u&&(!u||ul&&r.unshift(l),r[r.length-1]<=s&&r.push(s+1);for(var d=[],p=0;p=(i=e[a=n+Math.floor((r-n)/2)]).start&&t=i.end?n=a+1:t1&&void 0!==arguments[1]?arguments[1]:{saveChild:!0}).saveChild;return t.forEach(function(e){r=e(r),i.push.apply(i,function(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t1&&a.dispose(),r}},bin:function bin(){for(var e=arguments.length,t=Array(e),n=0;n2?(i=arguments.length<=0?void 0:arguments[0],n=arguments.length<=1?void 0:arguments[1],o=arguments.length<=2?void 0:arguments[2]):(i=null,n=arguments.length<=0?void 0:arguments[0],o=arguments.length<=1?void 0:arguments[1]),t=o(y),(e=r=new _(t.fn)).addDependencies.apply(e,P(t.dependencies)),this._addPropInModel(i,function(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}({},n,r)),this}},{key:"_addPropInModel",value:function value(e,t){return this._graph.createNodesFrom(t,e),this}},{key:"on",value:function value(e,t,r){var n,i=e instanceof Array?e:[e],o=this._graph.createElectricNodeOf(i,{type:"CurrFrame",fn:t});return r&&(n=this._graph.stopPropagation().setPropagationOverride("nextFrame")).resetNodeValue.apply(n,P(e)),o}},{key:"next",value:function value(e,t,r){var n,i=e instanceof Array?e:[e],o=this._graph.createElectricNodeOf(i,{type:"NextFrame",fn:t});return r&&(n=this._graph.stopPropagation().setPropagationOverride("currentFrame")).resetNodeValue.apply(n,P(e)),o}},{key:"lock",value:function value(){return this._lockFlag=!0,this._reqQ.length=0,this}},{key:"unlock",value:function value(){return this._lockFlag=!1,this.setProp.apply(this,P(this._reqQ)),this._reqQ.length=0,this}},{key:"prop",value:function value(){var e,t=void 0,r=void 0;switch(e=arguments.length){case 1:t=arguments.length<=0?void 0:arguments[0];break;case 2:t=arguments.length<=0?void 0:arguments[0],r=arguments.length<=1?void 0:arguments[1];break;default:return this}return 2===e?(this._lockFlag?this._reqQ.push([t,r]):this.setProp([t,r]),this):this._graph.getNodeValue(t)}},{key:"setProp",value:function value(){for(var e,t=this,r=arguments.length,n=Array(r),i=0;i/gi),smartlabel},SmartLabelManager.store={},SmartLabelManager.prototype._calCharDimWithCache=function(text,calculateDifference,length){if(!this._init)return!1;var size,csArr,tw,twi,cachedStyle,asymmetricDifference,maxAdvancedCacheLimit=this.options.maxCacheLimit,container=this._container,style=this.style||{},cache=this._advancedCache||(this._advancedCache={}),advancedCacheKey=this._advancedCacheKey||(this._advancedCacheKey=[]),cacheName=text+(style.fontSize||"")+(style.fontFamily||"")+(style.fontWeight||"")+(style.fontStyle||""),cacheInitName=text+"init"+(style.fontSize||"")+(style.fontFamily||"")+(style.fontWeight||"")+(style.fontStyle||"");return htmlSplCharSpace[text]&&(text=htmlSplCharSpace[text]),calculateDifference?void 0===(asymmetricDifference=cache[cacheInitName])&&(container.innerHTML=text.repeat?text.repeat(length):Array(length+1).join(text),tw=container.offsetWidth,container.innerHTML=text,twi=container.offsetWidth,asymmetricDifference=cache[cacheInitName]=(tw-length*twi)/(length+1),advancedCacheKey.push(cacheInitName),advancedCacheKey.length>maxAdvancedCacheLimit&&delete cache[advancedCacheKey.shift()]):asymmetricDifference=0,(cachedStyle=cache[cacheName])?(csArr=cachedStyle.split(","),{width:parseFloat(csArr[0],10),height:parseFloat(csArr[1],10)}):(container.innerHTML=text,size={height:container.offsetHeight,width:container.offsetWidth+asymmetricDifference},cache[cacheName]=size.width+","+size.height,advancedCacheKey.push(cacheName),advancedCacheKey.length>maxAdvancedCacheLimit&&delete cache[advancedCacheKey.shift()],size)},SmartLabelManager.prototype._getWidthFn=function(){var contObj=this._containerObj,container=this._container,svgText=contObj.svgText;return svgText?function(str){var bbox,width;return svgText.textContent=str,(width=(bbox=svgText.getBBox()).width-SVG_BBOX_CORRECTION)<1&&(width=bbox.width),width}:function(str){return container.innerHTML=str,container.offsetWidth}},SmartLabelManager.prototype.setStyle=function(style){return this._init?style!==this.style||this._styleNotSet?(style||(style=this.style),slLib.setLineHeight(style),this.style=style,this._containerObj=sCont=this._containerManager.get(style),this._containerObj?(this._container=sCont.node,this._context=sCont.context,this._cache=sCont.charCache,this._lineHeight=sCont.lineHeight,this._styleNotSet=!1):this._styleNotSet=!0,this):void 0:this;var sCont},SmartLabelManager.prototype.useEllipsesOnOverflow=function(useEllipses){return this._init?(this._showNoEllipses=!useEllipses,this):this},SmartLabelManager.prototype.getSmartText=function(text,maxWidth,maxHeight,noWrap){if(!this._init)return!1;void 0===text||null===text?text="":"string"!=typeof text&&(text=text.toString());var len,trimStr,tempArr,tmpText,maxWidthWithEll,toolText,oriWidth,oriHeight,newCharIndex,nearestChar,tempChar,getWidth,initialLeft,initialTop,getOriSizeImproveObj,spanArr,x,y,minWidth,elem,chr,elemRightMostPoint,elemLowestPoint,lastBR,removeFromIndex,removeFromIndexForEllipses,hasHTMLTag=!1,maxStrWidth=0,lastDash=-1,lastSpace=-1,lastIndexBroken=-1,strWidth=0,strHeight=0,oriTextArr=[],i=0,ellipsesStr=this._showNoEllipses?"":"...",lineHeight=this._lineHeight,context=this._context,container=this._container,sCont=this._containerObj,ellipsesWidth=sCont.ellipsesWidth,dotWidth=sCont.dotWidth,characterArr=[],dashIndex=-1,spaceIndex=-1,lastLineBreak=-1,fastTrim=function fastTrim(str){for(var ws=/\s/,i=(str=str.replace(/^\s\s*/,"")).length;ws.test(str.charAt(i-=1)););return str.slice(0,i+1)},smartLabel={text:text,maxWidth:maxWidth,maxHeight:maxHeight,width:null,height:null,oriTextWidth:null,oriTextHeight:null,oriText:text,isTruncated:!1};if(getWidth=this._getWidthFn(),maxHeight===lineHeight&&(maxHeight*=1.2),container){if(!documentSupport.isBrowserLess){if((hasHTMLTag=slLib.xmlTagRegEx.test(text))?(container.innerHTML=text,smartLabel.oriTextWidth=oriWidth=container.offsetWidth,smartLabel.oriTextHeight=oriHeight=container.offsetHeight):(tmpText=text.replace(slLib.ltgtRegex,function(match){return"<"===match?"<":">"}),getOriSizeImproveObj=this.getOriSize(tmpText,!0),smartLabel.oriTextWidth=oriWidth=getOriSizeImproveObj.width,smartLabel.oriTextHeight=oriHeight=getOriSizeImproveObj.height),oriHeight<=maxHeight&&oriWidth<=maxWidth)return smartLabel.width=smartLabel.oriTextWidth=oriWidth,smartLabel.height=smartLabel.oriTextHeight=oriHeight,smartLabel;if(lineHeight>maxHeight)return smartLabel.text="",smartLabel.width=smartLabel.oriTextWidth=0,smartLabel.height=smartLabel.oriTextHeight=0,smartLabel}if(text=fastTrim(text).replace(/(\s+)/g," "),maxWidthWithEll=this._showNoEllipses?maxWidth:maxWidth-ellipsesWidth,!hasHTMLTag){if(len=(oriTextArr=text.split("")).length,trimStr="",tempArr=[],tempChar=oriTextArr[0],this._cache[tempChar]?minWidth=this._cache[tempChar].width:(minWidth=getWidth(tempChar),this._cache[tempChar]={width:minWidth}),maxWidthWithEll>minWidth)i=(tempArr=text.substr(0,slLib.getNearestBreakIndex(text,maxWidthWithEll,this)).split("")).length;else{if(minWidth>maxWidth)return smartLabel.text="",smartLabel.width=smartLabel.oriTextWidth=smartLabel.height=smartLabel.oriTextHeight=0,smartLabel;ellipsesStr&&((maxWidthWithEll=maxWidth-2*dotWidth)>minWidth?ellipsesStr="..":(maxWidthWithEll=maxWidth-dotWidth)>minWidth?ellipsesStr=".":(maxWidthWithEll=0,ellipsesStr=""))}if(strWidth=getWidth(tempArr.join("")),strHeight=this._lineHeight,noWrap){for(;imaxWidthWithEll&&(trimStr||(trimStr=tempArr.slice(0,-1).join("")),strWidth>maxWidth))return smartLabel.text=fastTrim(trimStr)+ellipsesStr,smartLabel.tooltext=smartLabel.oriText,smartLabel.width=getWidth(smartLabel.text),smartLabel.height=this._lineHeight,smartLabel;return smartLabel.text=tempArr.join(""),smartLabel.width=strWidth,smartLabel.height=this._lineHeight,smartLabel}for(;imaxWidthWithEll&&(trimStr||(trimStr=tempArr.slice(0,-1).join("")),strWidth>maxWidth)){if(lastSpace=text.substr(0,tempArr.length).lastIndexOf(" "),lastDash=text.substr(0,tempArr.length).lastIndexOf("-"),lastSpace>lastIndexBroken?(strWidth=getWidth(tempArr.slice(lastIndexBroken+1,lastSpace).join("")),tempArr.splice(lastSpace,1,"
"),lastIndexBroken=lastSpace,newCharIndex=lastSpace+1):lastDash>lastIndexBroken?(lastDash===tempArr.length-1?(strWidth=getWidth(tempArr.slice(lastIndexBroken+1,lastSpace).join("")),tempArr.splice(lastDash,1,"
-")):(strWidth=getWidth(tempArr.slice(lastIndexBroken+1,lastSpace).join("")),tempArr.splice(lastDash,1,"-
")),lastIndexBroken=lastDash,newCharIndex=lastDash+1):(tempArr.splice(tempArr.length-1,1,"
"+oriTextArr[i]),lastLineBreak=tempArr.length-2,strWidth=getWidth(tempArr.slice(lastIndexBroken+1,lastLineBreak+1).join("")),lastIndexBroken=lastLineBreak,newCharIndex=i),(strHeight+=this._lineHeight)>maxHeight)return smartLabel.text=fastTrim(trimStr)+ellipsesStr,smartLabel.tooltext=smartLabel.oriText,smartLabel.width=maxWidth,smartLabel.height=strHeight-this._lineHeight,smartLabel;maxStrWidth=max(maxStrWidth,strWidth),trimStr=null,nearestChar=slLib.getNearestBreakIndex(text.substr(newCharIndex),maxWidthWithEll,this),strWidth=getWidth(text.substr(newCharIndex,nearestChar||1)),tempArr.length)/g,'$1'),container.innerHTML=text,x=0,y=(spanArr=container[documentSupport.childRetriverFn](documentSupport.childRetriverString)).length;xmaxWidth)return smartLabel.text="",smartLabel.width=smartLabel.oriTextWidth=smartLabel.height=smartLabel.oriTextHeight=0,smartLabel;if(minWidth>maxWidthWithEll&&!this._showNoEllipses&&((maxWidthWithEll=maxWidth-2*dotWidth)>minWidth?ellipsesStr="..":(maxWidthWithEll=maxWidth-dotWidth)>minWidth?ellipsesStr=".":(maxWidthWithEll=0,ellipsesStr="")),initialLeft=characterArr[0].elem.offsetLeft,initialTop=characterArr[0].elem.offsetTop,noWrap)for(;imaxWidthWithEll&&(removeFromIndexForEllipses||(removeFromIndexForEllipses=i),container.offsetWidth>maxWidth&&(removeFromIndex=i,i=len));else for(;imaxWidthWithEll?(removeFromIndexForEllipses||(removeFromIndexForEllipses=i),elemRightMostPoint>maxWidth&&(lastSpace=characterArr[i].spaceIdx,lastDash=characterArr[i].dashIdx,lastSpace>lastIndexBroken?(characterArr[lastSpace].elem.innerHTML="
",lastIndexBroken=lastSpace):lastDash>lastIndexBroken?(characterArr[lastDash].elem.innerHTML=lastDash===i?"
-":"-
",lastIndexBroken=lastDash):elem.parentNode.insertBefore(lastBR=doc.createElement("br"),elem),elem.offsetHeight+elem.offsetTop>maxHeight?(lastBR?lastBR.parentNode.removeChild(lastBR):lastIndexBroken===lastDash?characterArr[lastDash].elem.innerHTML="-":characterArr[lastSpace].elem.innerHTML=" ",removeFromIndex=i,i=len):removeFromIndexForEllipses=null)):elemLowestPoint>maxHeight&&(removeFromIndex=i,i=len);if(removeFromIndex=removeFromIndexForEllipses;i-=1)(elem=characterArr[i].elem).parentNode.removeChild(elem);for(;i>=0;i-=1)elem=characterArr[i].elem,slLib.classNameBrReg.test(elem.className)?elem.parentNode.removeChild(elem):i=0}return smartLabel.text=container.innerHTML.replace(slLib.spanRemovalRegx,"$1").replace(/\&\;/g,"&"),smartLabel.isTruncated&&(smartLabel.text+=ellipsesStr,smartLabel.tooltext=toolText),smartLabel.height=container.offsetHeight,smartLabel.width=container.offsetWidth,smartLabel}return smartLabel.error=new Error("Body Tag Missing!"),smartLabel},SmartLabelManager.prototype.getOriSize=function(text,detailedCalculationFlag){if(!this._init)return!1;var textArr,letter,lSize,i,l,cumulativeSize=0,height=0,indiSizeStore={};if(!detailedCalculationFlag)return this._calCharDimWithCache(text);for(i=0,l=(textArr=text.split("")).length;i]+?\>)|(&(?:[a-z]+|#[0-9]+);|.)/gi,spanAdditionReplacer:'$1$2',spanRemovalRegx:new RegExp("\\]+?"+classNameWithTag+"[^\\>]{0,}\\>(.*?)\\<\\/span\\>","ig"),xmlTagRegEx:new RegExp("<[^>][^<]*[^>]+>","i"),ltgtRegex:/<|>/g,brReplaceRegex://gi,testStrAvg:"WgI",parentContainerStyle:{position:"absolute",top:"-9999em",whiteSpace:"nowrap",padding:"0px",width:"1px",height:"1px",overflow:"hidden"},supportedStyle:{font:"font",fontFamily:"font-family","font-family":"font-family",fontWeight:"font-weight","font-weight":"font-weight",fontSize:"font-size","font-size":"font-size",lineHeight:"line-height","line-height":"line-height",fontStyle:"font-style","font-style":"font-style"},getDocumentSupport:function getDocumentSupport(){var childRetriverFn,childRetriverString,noClassTesting;return doc.getElementsByClassName?(childRetriverFn="getElementsByClassName",childRetriverString=classNameWithTag,noClassTesting=!0):(childRetriverFn="getElementsByTagName",childRetriverString="span",noClassTesting=!1),{isIE:/msie/i.test(userAgent)&&!win.opera,hasSVG:Boolean(win.SVGAngle||doc.implementation.hasFeature("http://www.w3.org/TR/SVG11/feature#BasicStructure","1.1")),isHeadLess:new RegExp(" HtmlUnit").test(userAgent),isWebKit:new RegExp(" AppleWebKit/").test(userAgent),childRetriverFn:childRetriverFn,childRetriverString:childRetriverString,noClassTesting:noClassTesting}},createContainer:function createContainer(containerParent){var body,container;if(containerParent&&(containerParent.offsetWidth||containerParent.offsetHeight)){if(containerParent.appendChild)return containerParent.appendChild(container=doc.createElement("DIV")),container.className=containerClass,container.setAttribute("aria-hidden","true"),container.setAttribute("role","presentation"),container}else if((body=doc.getElementsByTagName("body")[0])&&body.appendChild)return(container=doc.createElement("DIV")).className=containerClass,container.setAttribute("aria-hidden","true"),container.setAttribute("role","presentation"),1,body.appendChild(container),container},getNearestBreakIndex:function getNearestBreakIndex(text,maxWidth,sl){if(!text||!text.length)return 0;var difference,getWidth=sl._getWidthFn(),charLen=0,increment=0,oriWidth=getWidth(text),avgWidth=oriWidth/text.length;if(difference=maxWidth,charLen=ceil(maxWidth/avgWidth),oriWidthtext.length&&(difference=maxWidth-oriWidth,charLen=text.length);difference>0;){if(difference=maxWidth-getWidth(text.substr(0,charLen)),!(increment=floor(difference/avgWidth)))return charLen;charLen+=increment}for(;difference<0;){if(difference=maxWidth-getWidth(text.substr(0,charLen)),!(increment=floor(difference/avgWidth)))return charLen;charLen+=increment}return charLen},setLineHeight:function setLineHeight(styleObj){var fSize=styleObj.fontSize=styleObj.fontSize||"12px";return styleObj.lineHeight=styleObj.lineHeight||styleObj["line-height"]||1.2*parseInt(fSize,10)+"px",styleObj}}}};exports.default=lib,module.exports=exports.default},function(module){module.exports={name:"muze",private:!0,version:"1.1.0",description:"Composable visualisation library for web with a data-first approach",homepage:"https://www.charts.com/muze",license:"MIT",author:"Charts.com ",contributors:[{name:"Akash Ghoswami",email:"akash@charts.com"},{name:"Ranajit Banerjee",email:"ranajit.banerjee@charts.com",url:"https://github.com/ranajitbanerjee"},{name:"Mridul Meharia",email:"mridul@charts.com",url:"https://github.com/mridulmeh"},{name:"Subhash Haldar",email:"subhash@charts.com"},{name:"Sandeep Acharya",email:"sandeep@charts.com"},{name:"Rousan Ali",email:"rousan@charts.com",url:"https://rousan.io"},{name:"Ujjal Kumar Dutta",email:"ujjal@charts.com"}],main:"src/index.js",keywords:["muze","svg","vector","graphics","data-visualization","visualization","renderer","fusioncharts","relational","algebra","relation"],repository:{type:"git",url:"https://github.com/chartshq/muze"},dependencies:{"@chartshq/layout":"^1.0.0","@chartshq/muze-firebolt":"^1.0.0","@chartshq/muze-legend":"^1.0.0","muze-utils":"^1.0.0","@chartshq/visual-cell":"^1.0.0","@chartshq/visual-group":"^1.0.0","@chartshq/visual-layer":"^1.0.0","@chartshq/visual-unit":"^1.0.0"}}},function(module,exports,__webpack_require__){var Muze=__webpack_require__(27);module.exports=Muze.default?Muze.default:Muze},function(module,exports,__webpack_require__){"use strict";var slLib=function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj}}(__webpack_require__(5)).default.init("undefined"!=typeof window?window:void 0),doc=slLib.win.document,documentSupport=slLib.getDocumentSupport(),SVG_BBOX_CORRECTION=documentSupport.isWebKit?0:4.5;function ContainerManager(parentContainer,isBrowserLess,maxContainers){var svg;maxContainers=(maxContainers=maxContainers>5?maxContainers:5)<20?maxContainers:20,this.maxContainers=maxContainers,this.first=null,this.last=null,this.containers={},this.length=0,this.rootNode=parentContainer,isBrowserLess&&((svg=doc.createElementNS("http://www.w3.org/2000/svg","svg")).setAttributeNS("http://www.w3.org/2000/svg","xlink","http://www.w3.org/1999/xlink"),svg.setAttributeNS("http://www.w3.org/2000/svg","height","0"),svg.setAttributeNS("http://www.w3.org/2000/svg","width","0"),this.svgRoot=svg,this.rootNode.appendChild(svg))}ContainerManager.prototype.get=function(style){var diff,key,containerObj,containers=this.containers,len=this.length,max=this.maxContainers,keyStr="";for(key in slLib.supportedStyle)void 0!==style[key]&&(keyStr+=slLib.supportedStyle[key]+":"+style[key]+";");if(!keyStr)return!1;if(containerObj=containers[keyStr])this.first!==containerObj&&(containerObj.prev&&(containerObj.prev.next=containerObj.next),containerObj.next&&(containerObj.next.prev=containerObj.prev),containerObj.next=this.first,containerObj.next.prev=containerObj,this.last===containerObj&&(this.last=containerObj.prev),containerObj.prev=null,this.first=containerObj);else{if(len>=max)for(diff=len-max+1;diff--;)this.removeContainer(this.last);containerObj=this.addContainer(keyStr)}return containerObj},ContainerManager.prototype.addContainer=function(keyStr){var node,container;return this.containers[keyStr]=container={next:null,prev:null,node:null,ellipsesWidth:0,lineHeight:0,dotWidth:0,avgCharWidth:4,keyStr:keyStr,charCache:{}},container.next=this.first,container.next&&(container.next.prev=container),this.first=container,this.last||(this.last=container),this.length+=1,node=container.node=doc.createElement("div"),this.rootNode.appendChild(node),documentSupport.isIE&&!documentSupport.hasSVG?node.style.setAttribute("cssText",keyStr):node.setAttribute("style",keyStr),node.setAttribute("aria-hidden","true"),node.setAttribute("role","presentation"),node.style.display="inline-block",node.innerHTML=slLib.testStrAvg,container.lineHeight=node.offsetHeight,container.avgCharWidth=node.offsetWidth/3,documentSupport.isBrowserLess?((node=container.svgText=doc.createElementNS("http://www.w3.org/2000/svg","text")).setAttribute("style",keyStr),this.svgRoot.appendChild(node),node.textContent=slLib.testStrAvg,container.lineHeight=node.getBBox().height,container.avgCharWidth=(node.getBBox().width-SVG_BBOX_CORRECTION)/3,node.textContent="...",container.ellipsesWidth=node.getBBox().width-SVG_BBOX_CORRECTION,node.textContent=".",container.dotWidth=node.getBBox().width-SVG_BBOX_CORRECTION):(node.innerHTML="...",container.ellipsesWidth=node.offsetWidth,node.innerHTML=".",container.dotWidth=node.offsetWidth,node.innerHTML=""),container},ContainerManager.prototype.removeContainer=function(cObj){var keyStr=cObj.keyStr;keyStr&&this.length&&cObj&&(this.length-=1,cObj.prev&&(cObj.prev.next=cObj.next),cObj.next&&(cObj.next.prev=cObj.prev),this.first===cObj&&(this.first=cObj.next),this.last===cObj&&(this.last=cObj.prev),cObj.node.parentNode.removeChild(cObj.node),delete this.containers[keyStr])},ContainerManager.prototype.dispose=function(){var key,containers=this.containers;for(key in this.maxContainers=null,containers)this.removeContainer(containers[key]);this.rootNode.parentNode.removeChild(this.rootNode),this.rootNode=null,this.first=null,this.last=null},module.exports=ContainerManager},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.r(__webpack_exports__);var scales_namespaceObject={};__webpack_require__.r(scales_namespaceObject),__webpack_require__.d(scales_namespaceObject,"scaleLinear",function(){return linear_linear}),__webpack_require__.d(scales_namespaceObject,"scaleThreshold",function(){return threshold_threshold}),__webpack_require__.d(scales_namespaceObject,"scaleLog",function(){return log}),__webpack_require__.d(scales_namespaceObject,"scalePow",function(){return pow}),__webpack_require__.d(scales_namespaceObject,"scaleIdentity",function(){return identity_identity}),__webpack_require__.d(scales_namespaceObject,"scaleOrdinal",function(){return ordinal}),__webpack_require__.d(scales_namespaceObject,"scaleSequential",function(){return sequential}),__webpack_require__.d(scales_namespaceObject,"scaleQuantize",function(){return quantize_quantize}),__webpack_require__.d(scales_namespaceObject,"scaleQuantile",function(){return quantile_quantile}),__webpack_require__.d(scales_namespaceObject,"schemeCategory10",function(){return category10}),__webpack_require__.d(scales_namespaceObject,"schemeCategory20",function(){return category20}),__webpack_require__.d(scales_namespaceObject,"schemeCategory20b",function(){return category20b}),__webpack_require__.d(scales_namespaceObject,"scaleBand",function(){return band}),__webpack_require__.d(scales_namespaceObject,"scaleTime",function(){return src_time});var color_schemes_namespaceObject={};__webpack_require__.r(color_schemes_namespaceObject),__webpack_require__.d(color_schemes_namespaceObject,"schemeDark2",function(){return Dark2}),__webpack_require__.d(color_schemes_namespaceObject,"schemePaired",function(){return Paired}),__webpack_require__.d(color_schemes_namespaceObject,"schemeAccent",function(){return Accent}),__webpack_require__.d(color_schemes_namespaceObject,"schemePastel1",function(){return Pastel1}),__webpack_require__.d(color_schemes_namespaceObject,"schemePastel2",function(){return Pastel2}),__webpack_require__.d(color_schemes_namespaceObject,"schemeSet1",function(){return Set1}),__webpack_require__.d(color_schemes_namespaceObject,"schemeSet2",function(){return Set2}),__webpack_require__.d(color_schemes_namespaceObject,"schemeSet3",function(){return Set3}),__webpack_require__.d(color_schemes_namespaceObject,"schemeBlues",function(){return Blues_scheme}),__webpack_require__.d(color_schemes_namespaceObject,"schemeBrBG",function(){return BrBG_scheme}),__webpack_require__.d(color_schemes_namespaceObject,"schemePRGn",function(){return PRGn_scheme}),__webpack_require__.d(color_schemes_namespaceObject,"schemePiYG",function(){return PiYG_scheme}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateBrBG",function(){return BrBG}),__webpack_require__.d(color_schemes_namespaceObject,"interpolatePRGn",function(){return PRGn}),__webpack_require__.d(color_schemes_namespaceObject,"interpolatePiYG",function(){return PiYG}),__webpack_require__.d(color_schemes_namespaceObject,"interpolatePuOr",function(){return PuOr}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateRdBu",function(){return RdBu}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateRdGy",function(){return RdGy}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateRdYlBu",function(){return RdYlBu}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateRdYlGn",function(){return RdYlGn}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateSpectral",function(){return Spectral}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateBlues",function(){return Blues}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateGreens",function(){return Greens}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateGreys",function(){return Greys}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateOranges",function(){return Oranges}),__webpack_require__.d(color_schemes_namespaceObject,"interpolatePurples",function(){return Purples}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateReds",function(){return Reds}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateViridis",function(){return sequential_multi_viridis}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateInferno",function(){return viridis_inferno}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateMagma",function(){return viridis_magma}),__webpack_require__.d(color_schemes_namespaceObject,"interpolatePlasma",function(){return viridis_plasma}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateWarm",function(){return rainbow_warm}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateCool",function(){return rainbow_cool}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateCubehelixDefault",function(){return sequential_multi_cubehelix}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateBuGn",function(){return BuGn}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateBuPu",function(){return BuPu}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateGnBu",function(){return GnBu}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateOrRd",function(){return OrRd}),__webpack_require__.d(color_schemes_namespaceObject,"interpolatePuBuGn",function(){return PuBuGn}),__webpack_require__.d(color_schemes_namespaceObject,"interpolatePuBu",function(){return PuBu}),__webpack_require__.d(color_schemes_namespaceObject,"interpolatePuRd",function(){return PuRd}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateRdPu",function(){return RdPu}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateYlGnBu",function(){return YlGnBu}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateYlGn",function(){return YlGn}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateYlOrBr",function(){return YlOrBr}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateYlOrRd",function(){return YlOrRd}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateRainbow",function(){return sequential_multi_rainbow});var namespace_namespaceObject={};__webpack_require__.r(namespace_namespaceObject),__webpack_require__.d(namespace_namespaceObject,"UNIT_GLOBAL_NAMESPACE",function(){return UNIT_GLOBAL_NAMESPACE}),__webpack_require__.d(namespace_namespaceObject,"UNIT_LOCAL_NAMESPACE",function(){return UNIT_LOCAL_NAMESPACE}),__webpack_require__.d(namespace_namespaceObject,"LAYER_LOCAL_NAMESPACE",function(){return LAYER_LOCAL_NAMESPACE}),__webpack_require__.d(namespace_namespaceObject,"LAYER_GLOBAL_NAMESPACE",function(){return LAYER_GLOBAL_NAMESPACE}),__webpack_require__.d(namespace_namespaceObject,"GROUP_GLOBAL_NAMESPACE",function(){return GROUP_GLOBAL_NAMESPACE}),__webpack_require__.d(namespace_namespaceObject,"GROUP_LOCAL_NAMESPACE",function(){return GROUP_LOCAL_NAMESPACE}),__webpack_require__.d(namespace_namespaceObject,"CANVAS_LOCAL_NAMESPACE",function(){return CANVAS_LOCAL_NAMESPACE}),__webpack_require__.d(namespace_namespaceObject,"CANVAS_GLOBAL_NAMESPACE",function(){return CANVAS_GLOBAL_NAMESPACE});var actions_namespaceObject={};__webpack_require__.r(actions_namespaceObject),__webpack_require__.d(actions_namespaceObject,"DRAG",function(){return DRAG}),__webpack_require__.d(actions_namespaceObject,"HOVER",function(){return HOVER}),__webpack_require__.d(actions_namespaceObject,"SELECTIONDRAG",function(){return SELECTIONDRAG}),__webpack_require__.d(actions_namespaceObject,"CLICK",function(){return CLICK}),__webpack_require__.d(actions_namespaceObject,"LONGTOUCH",function(){return LONGTOUCH}),__webpack_require__.d(actions_namespaceObject,"TOUCHDRAG",function(){return TOUCHDRAG}),__webpack_require__.d(actions_namespaceObject,"ALL_ACTIONS",function(){return ALL_ACTIONS});var enums_selection_namespaceObject={};__webpack_require__.r(enums_selection_namespaceObject),__webpack_require__.d(enums_selection_namespaceObject,"SELECTION_NEW_ENTRY",function(){return SELECTION_NEW_ENTRY}),__webpack_require__.d(enums_selection_namespaceObject,"SELECTION_NEW_EXIT",function(){return SELECTION_NEW_EXIT}),__webpack_require__.d(enums_selection_namespaceObject,"SELECTION_NULL",function(){return SELECTION_NULL}),__webpack_require__.d(enums_selection_namespaceObject,"SELECTION_OLD_ENTRY",function(){return SELECTION_OLD_ENTRY}),__webpack_require__.d(enums_selection_namespaceObject,"SELECTION_OLD_EXIT",function(){return SELECTION_OLD_EXIT});var behaviours_namespaceObject={};__webpack_require__.r(behaviours_namespaceObject),__webpack_require__.d(behaviours_namespaceObject,"BRUSH",function(){return BRUSH}),__webpack_require__.d(behaviours_namespaceObject,"HIGHLIGHT",function(){return HIGHLIGHT}),__webpack_require__.d(behaviours_namespaceObject,"TOOLTIP",function(){return TOOLTIP}),__webpack_require__.d(behaviours_namespaceObject,"FILTER",function(){return FILTER}),__webpack_require__.d(behaviours_namespaceObject,"SELECT",function(){return SELECT});var behavioural_namespaceObject={};__webpack_require__.r(behavioural_namespaceObject),__webpack_require__.d(behavioural_namespaceObject,"HighlightBeahviour",function(){return highlight_HighlightBehaviour}),__webpack_require__.d(behavioural_namespaceObject,"BrushBehaviour",function(){return brush_BrushBehaviour}),__webpack_require__.d(behavioural_namespaceObject,"FilterBehaviour",function(){return filter_FilterBehaviour}),__webpack_require__.d(behavioural_namespaceObject,"SelectBehaviour",function(){return select_SelectBehaviour});var side_effects_namespaceObject={};__webpack_require__.r(side_effects_namespaceObject),__webpack_require__.d(side_effects_namespaceObject,"SelectionBox",function(){return selection_box}),__webpack_require__.d(side_effects_namespaceObject,"Tooltip",function(){return side_effects_tooltip_Tooltip}),__webpack_require__.d(side_effects_namespaceObject,"Crossline",function(){return crossline_Crossline}),__webpack_require__.d(side_effects_namespaceObject,"PlotHighlighter",function(){return plot_highlighter_PlotHighlighter}),__webpack_require__.d(side_effects_namespaceObject,"FilterEffect",function(){return FilterEffect}),__webpack_require__.d(side_effects_namespaceObject,"PersistentAnchors",function(){return persistent_anchors_PersistentAnchors}),__webpack_require__.d(side_effects_namespaceObject,"BrushAnchors",function(){return brush_anchors_BrushAnchors}),__webpack_require__.d(side_effects_namespaceObject,"AnchorEffect",function(){return anchors_AnchorEffect});var axis_orientation_namespaceObject={};__webpack_require__.r(axis_orientation_namespaceObject),__webpack_require__.d(axis_orientation_namespaceObject,"BOTTOM",function(){return axis_orientation_BOTTOM}),__webpack_require__.d(axis_orientation_namespaceObject,"TOP",function(){return axis_orientation_TOP}),__webpack_require__.d(axis_orientation_namespaceObject,"LEFT",function(){return axis_orientation_LEFT}),__webpack_require__.d(axis_orientation_namespaceObject,"RIGHT",function(){return axis_orientation_RIGHT}),__webpack_require__.d(axis_orientation_namespaceObject,"axisOrientationMap",function(){return axisOrientationMap});var scale_type_namespaceObject={};__webpack_require__.r(scale_type_namespaceObject),__webpack_require__.d(scale_type_namespaceObject,"LINEAR",function(){return LINEAR}),__webpack_require__.d(scale_type_namespaceObject,"BAND",function(){return BAND}),__webpack_require__.d(scale_type_namespaceObject,"TIME",function(){return TIME}),__webpack_require__.d(scale_type_namespaceObject,"COLOR",function(){return scale_type_COLOR}),__webpack_require__.d(scale_type_namespaceObject,"ORDINAL",function(){return ORDINAL}),__webpack_require__.d(scale_type_namespaceObject,"QUANTIZE",function(){return QUANTIZE}),__webpack_require__.d(scale_type_namespaceObject,"QUANTILE",function(){return QUANTILE}),__webpack_require__.d(scale_type_namespaceObject,"LOG",function(){return LOG}),__webpack_require__.d(scale_type_namespaceObject,"POW",function(){return POW}),__webpack_require__.d(scale_type_namespaceObject,"IDENTITY",function(){return scale_type_IDENTITY}),__webpack_require__.d(scale_type_namespaceObject,"SEQUENTIAL",function(){return SEQUENTIAL}),__webpack_require__.d(scale_type_namespaceObject,"THRESHOLD",function(){return THRESHOLD});var layer_types_namespaceObject={};__webpack_require__.r(layer_types_namespaceObject),__webpack_require__.d(layer_types_namespaceObject,"AREA_LAYER",function(){return layer_types_AREA_LAYER}),__webpack_require__.d(layer_types_namespaceObject,"ARC_LAYER",function(){return layer_types_ARC_LAYER}),__webpack_require__.d(layer_types_namespaceObject,"LINE_LAYER",function(){return layer_types_LINE_LAYER}),__webpack_require__.d(layer_types_namespaceObject,"TEXT_LAYER",function(){return layer_types_TEXT_LAYER}),__webpack_require__.d(layer_types_namespaceObject,"POINT_LAYER",function(){return layer_types_POINT_LAYER}),__webpack_require__.d(layer_types_namespaceObject,"BAR_LAYER",function(){return layer_types_BAR_LAYER}),__webpack_require__.d(layer_types_namespaceObject,"TICK_LAYER",function(){return layer_types_TICK_LAYER}),__webpack_require__.d(layer_types_namespaceObject,"SIMPLE_LAYER",function(){return layer_types_SIMPLE_LAYER}),__webpack_require__.d(layer_types_namespaceObject,"BASE_LAYER",function(){return layer_types_BASE_LAYER});var firebolt_behavioural_namespaceObject={};__webpack_require__.r(firebolt_behavioural_namespaceObject),__webpack_require__.d(firebolt_behavioural_namespaceObject,"SelectBehaviour",function(){return behavioural_select_SelectBehaviour});var firebolt_side_effects_namespaceObject={};__webpack_require__.r(firebolt_side_effects_namespaceObject),__webpack_require__.d(firebolt_side_effects_namespaceObject,"SelectionBox",function(){return side_effects_selection_box}),__webpack_require__.d(firebolt_side_effects_namespaceObject,"LegendHighlighter",function(){return legend_highlighter_LegendHighlighter});var operators_namespaceObject={};__webpack_require__.r(operators_namespaceObject),__webpack_require__.d(operators_namespaceObject,"share",function(){return operators_share}),__webpack_require__.d(operators_namespaceObject,"html",function(){return operators_html});var dist_datamodel=__webpack_require__(0),datamodel_default=__webpack_require__.n(dist_datamodel),ascending=function(a,b){return ab?1:a>=b?0:NaN},bisector=function(compare){return 1===compare.length&&(compare=function ascendingComparator(f){return function(d,x){return ascending(f(d),x)}}(compare)),{left:function left(a,x,lo,hi){for(null==lo&&(lo=0),null==hi&&(hi=a.length);lo>>1;compare(a[mid],x)<0?lo=mid+1:hi=mid}return lo},right:function right(a,x,lo,hi){for(null==lo&&(lo=0),null==hi&&(hi=a.length);lo>>1;compare(a[mid],x)>0?hi=mid:lo=mid+1}return lo}}};var ascendingBisect=bisector(ascending),bisectRight=ascendingBisect.right,bisect=(ascendingBisect.left,bisectRight);var number=function(x){return null===x?NaN:+x},array_array=Array.prototype,src_range=(array_array.slice,array_array.map,function(start,stop,step){start=+start,stop=+stop,step=(n=arguments.length)<2?(stop=start,start=0,1):n<3?1:+step;for(var i=-1,n=0|Math.max(0,Math.ceil((stop-start)/step)),range=new Array(n);++i0)return[start];if((reverse=stop0)for(start=Math.ceil(start/step),stop=Math.floor(stop/step),ticks=new Array(n=Math.ceil(stop-start+1));++i=0?(error>=e10?10:error>=e5?5:error>=e2?2:1)*Math.pow(10,power):-Math.pow(10,-power)/(error>=e10?10:error>=e5?5:error>=e2?2:1)}function tickStep(start,stop,count){var step0=Math.abs(stop-start)/Math.max(0,count),step1=Math.pow(10,Math.floor(Math.log(step0)/Math.LN10)),error=step0/step1;return error>=e10?step1*=10:error>=e5?step1*=5:error>=e2&&(step1*=2),stop=1)return+valueof(values[n-1],n-1,values);var n,i=(n-1)*p,i0=Math.floor(i),value0=+valueof(values[i0],i0,values);return value0+(+valueof(values[i0+1],i0+1,values)-value0)*(i-i0)}};function map_Map(){}function map_map(object,f){var map=new map_Map;if(object instanceof map_Map)object.each(function(value,key){map.set(key,value)});else if(Array.isArray(object)){var o,i=-1,n=object.length;if(null==f)for(;++i=keys.length)return null!=_sortValues&&array.sort(_sortValues),null!=_rollup?_rollup(array):array;for(var keyValue,value,values,i=-1,n=array.length,key=keys[depth++],valuesByKey=src_map(),result=createResult();++ikeys.length)return map;var array,sortKey=_sortKeys[depth-1];return null!=_rollup&&depth>=keys.length?array=map.entries():(array=[],map.each(function(v,k){array.push({key:k,values:_entries(v,depth)})})),null!=sortKey?array.sort(function(a,b){return sortKey(a.key,b.key)}):array}(apply(array,0,createMap,setMap),0)},key:function key(d){return keys.push(d),nest},sortKeys:function sortKeys(order){return _sortKeys[keys.length-1]=order,nest},sortValues:function sortValues(order){return _sortValues=order,nest},rollup:function rollup(f){return _rollup=f,nest}}};function createObject(){return{}}function setObject(object,key,value){object[key]=value}function createMap(){return src_map()}function setMap(map,key,value){map.set(key,value)}function set_Set(){}var proto=src_map.prototype;function set_set(object,f){var set=new set_Set;if(object instanceof set_Set)object.each(function(value){set.add(value)});else if(object){var i=-1,n=object.length;if(null==f)for(;++i1?+r1:lo,reverse=range[1]range[1-reverse]))return a=Math.max(0,getClosestIndexOf(values,lo)),hiIndex=getClosestIndexOf(values,hi),b=lo===hi?a:Math.max(a,hiIndex-1),reverse&&(t=a,a=n-b,b=n-t),a>b?void 0:domain().slice(a,b+1)},scale.invert=function(r0,r1){var a,t,lo=+r0,hi=arguments.length>1?+r1:lo,reverse=range[1]range[1-reverse]))return a=Math.max(0,getClosestIndexOf(values,lo,"left")),domain()[reverse?n-a:a]},rescale()}function getClosestIndexOf(arr,value,side){for(var highVal,mid,d1,low=0,high=arr.length-1;lowvalue?0===high?high:"left"===side?high-1:high:high===arr.length-1?high:"left"===side?high:high+1:high}var define=function(constructor,factory,prototype){constructor.prototype=factory.prototype=prototype,prototype.constructor=constructor};function extend(parent,definition){var prototype=Object.create(parent.prototype);for(var key in definition)prototype[key]=definition[key];return prototype}function Color(){}var reI="\\s*([+-]?\\d+)\\s*",reN="\\s*([+-]?\\d*\\.?\\d+(?:[eE][+-]?\\d+)?)\\s*",reP="\\s*([+-]?\\d*\\.?\\d+(?:[eE][+-]?\\d+)?)%\\s*",reHex3=/^#([0-9a-f]{3})$/,reHex6=/^#([0-9a-f]{6})$/,reRgbInteger=new RegExp("^rgb\\("+[reI,reI,reI]+"\\)$"),reRgbPercent=new RegExp("^rgb\\("+[reP,reP,reP]+"\\)$"),reRgbaInteger=new RegExp("^rgba\\("+[reI,reI,reI,reN]+"\\)$"),reRgbaPercent=new RegExp("^rgba\\("+[reP,reP,reP,reN]+"\\)$"),reHslPercent=new RegExp("^hsl\\("+[reN,reP,reP]+"\\)$"),reHslaPercent=new RegExp("^hsla\\("+[reN,reP,reP,reN]+"\\)$"),named={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074};function color_color(format){var m;return format=(format+"").trim().toLowerCase(),(m=reHex3.exec(format))?new Rgb((m=parseInt(m[1],16))>>8&15|m>>4&240,m>>4&15|240&m,(15&m)<<4|15&m,1):(m=reHex6.exec(format))?rgbn(parseInt(m[1],16)):(m=reRgbInteger.exec(format))?new Rgb(m[1],m[2],m[3],1):(m=reRgbPercent.exec(format))?new Rgb(255*m[1]/100,255*m[2]/100,255*m[3]/100,1):(m=reRgbaInteger.exec(format))?rgba(m[1],m[2],m[3],m[4]):(m=reRgbaPercent.exec(format))?rgba(255*m[1]/100,255*m[2]/100,255*m[3]/100,m[4]):(m=reHslPercent.exec(format))?hsla(m[1],m[2]/100,m[3]/100,1):(m=reHslaPercent.exec(format))?hsla(m[1],m[2]/100,m[3]/100,m[4]):named.hasOwnProperty(format)?rgbn(named[format]):"transparent"===format?new Rgb(NaN,NaN,NaN,0):null}function rgbn(n){return new Rgb(n>>16&255,n>>8&255,255&n,1)}function rgba(r,g,b,a){return a<=0&&(r=g=b=NaN),new Rgb(r,g,b,a)}function rgbConvert(o){return o instanceof Color||(o=color_color(o)),o?new Rgb((o=o.rgb()).r,o.g,o.b,o.opacity):new Rgb}function color_rgb(r,g,b,opacity){return 1===arguments.length?rgbConvert(r):new Rgb(r,g,b,null==opacity?1:opacity)}function Rgb(r,g,b,opacity){this.r=+r,this.g=+g,this.b=+b,this.opacity=+opacity}function _hex(value){return((value=Math.max(0,Math.min(255,Math.round(value)||0)))<16?"0":"")+value.toString(16)}function hsla(h,s,l,a){return a<=0?h=s=l=NaN:l<=0||l>=1?h=s=NaN:s<=0&&(h=NaN),new Hsl(h,s,l,a)}function hsl(h,s,l,opacity){return 1===arguments.length?function hslConvert(o){if(o instanceof Hsl)return new Hsl(o.h,o.s,o.l,o.opacity);if(o instanceof Color||(o=color_color(o)),!o)return new Hsl;if(o instanceof Hsl)return o;var r=(o=o.rgb()).r/255,g=o.g/255,b=o.b/255,min=Math.min(r,g,b),max=Math.max(r,g,b),h=NaN,s=max-min,l=(max+min)/2;return s?(h=r===max?(g-b)/s+6*(g0&&l<1?0:h,new Hsl(h,s,l,o.opacity)}(h):new Hsl(h,s,l,null==opacity?1:opacity)}function Hsl(h,s,l,opacity){this.h=+h,this.s=+s,this.l=+l,this.opacity=+opacity}function hsl2rgb(h,m1,m2){return 255*(h<60?m1+(m2-m1)*h/60:h<180?m2:h<240?m1+(m2-m1)*(240-h)/60:m1)}define(Color,color_color,{displayable:function displayable(){return this.rgb().displayable()},hex:function hex(){return this.rgb().hex()},toString:function toString(){return this.rgb()+""}}),define(Rgb,color_rgb,extend(Color,{brighter:function brighter(k){return k=null==k?1/.7:Math.pow(1/.7,k),new Rgb(this.r*k,this.g*k,this.b*k,this.opacity)},darker:function darker(k){return k=null==k?.7:Math.pow(.7,k),new Rgb(this.r*k,this.g*k,this.b*k,this.opacity)},rgb:function rgb(){return this},displayable:function displayable(){return 0<=this.r&&this.r<=255&&0<=this.g&&this.g<=255&&0<=this.b&&this.b<=255&&0<=this.opacity&&this.opacity<=1},hex:function hex(){return"#"+_hex(this.r)+_hex(this.g)+_hex(this.b)},toString:function toString(){var a=this.opacity;return(1===(a=isNaN(a)?1:Math.max(0,Math.min(1,a)))?"rgb(":"rgba(")+Math.max(0,Math.min(255,Math.round(this.r)||0))+", "+Math.max(0,Math.min(255,Math.round(this.g)||0))+", "+Math.max(0,Math.min(255,Math.round(this.b)||0))+(1===a?")":", "+a+")")}})),define(Hsl,hsl,extend(Color,{brighter:function brighter(k){return k=null==k?1/.7:Math.pow(1/.7,k),new Hsl(this.h,this.s,this.l*k,this.opacity)},darker:function darker(k){return k=null==k?.7:Math.pow(.7,k),new Hsl(this.h,this.s,this.l*k,this.opacity)},rgb:function rgb(){var h=this.h%360+360*(this.h<0),s=isNaN(h)||isNaN(this.s)?0:this.s,l=this.l,m2=l+(l<.5?l:1-l)*s,m1=2*l-m2;return new Rgb(hsl2rgb(h>=240?h-240:h+120,m1,m2),hsl2rgb(h,m1,m2),hsl2rgb(h<120?h+240:h-120,m1,m2),this.opacity)},displayable:function displayable(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1}}));var deg2rad=Math.PI/180,rad2deg=180/Math.PI,Xn=.96422,Yn=1,Zn=.82521,lab_t0=4/29,lab_t1=6/29,t2=3*lab_t1*lab_t1,t3=lab_t1*lab_t1*lab_t1;function labConvert(o){if(o instanceof Lab)return new Lab(o.l,o.a,o.b,o.opacity);if(o instanceof Hcl){if(isNaN(o.h))return new Lab(o.l,0,0,o.opacity);var h=o.h*deg2rad;return new Lab(o.l,Math.cos(h)*o.c,Math.sin(h)*o.c,o.opacity)}o instanceof Rgb||(o=rgbConvert(o));var x,z,r=rgb2lrgb(o.r),g=rgb2lrgb(o.g),b=rgb2lrgb(o.b),y=xyz2lab((.2225045*r+.7168786*g+.0606169*b)/Yn);return r===g&&g===b?x=z=y:(x=xyz2lab((.4360747*r+.3850649*g+.1430804*b)/Xn),z=xyz2lab((.0139322*r+.0971045*g+.7141733*b)/Zn)),new Lab(116*y-16,500*(x-y),200*(y-z),o.opacity)}function lab(l,a,b,opacity){return 1===arguments.length?labConvert(l):new Lab(l,a,b,null==opacity?1:opacity)}function Lab(l,a,b,opacity){this.l=+l,this.a=+a,this.b=+b,this.opacity=+opacity}function xyz2lab(t){return t>t3?Math.pow(t,1/3):t/t2+lab_t0}function lab2xyz(t){return t>lab_t1?t*t*t:t2*(t-lab_t0)}function lrgb2rgb(x){return 255*(x<=.0031308?12.92*x:1.055*Math.pow(x,1/2.4)-.055)}function rgb2lrgb(x){return(x/=255)<=.04045?x/12.92:Math.pow((x+.055)/1.055,2.4)}function hclConvert(o){if(o instanceof Hcl)return new Hcl(o.h,o.c,o.l,o.opacity);if(o instanceof Lab||(o=labConvert(o)),0===o.a&&0===o.b)return new Hcl(NaN,0,o.l,o.opacity);var h=Math.atan2(o.b,o.a)*rad2deg;return new Hcl(h<0?h+360:h,Math.sqrt(o.a*o.a+o.b*o.b),o.l,o.opacity)}function hcl(h,c,l,opacity){return 1===arguments.length?hclConvert(h):new Hcl(h,c,l,null==opacity?1:opacity)}function Hcl(h,c,l,opacity){this.h=+h,this.c=+c,this.l=+l,this.opacity=+opacity}define(Lab,lab,extend(Color,{brighter:function brighter(k){return new Lab(this.l+18*(null==k?1:k),this.a,this.b,this.opacity)},darker:function darker(k){return new Lab(this.l-18*(null==k?1:k),this.a,this.b,this.opacity)},rgb:function rgb(){var y=(this.l+16)/116,x=isNaN(this.a)?y:y+this.a/500,z=isNaN(this.b)?y:y-this.b/200;return new Rgb(lrgb2rgb(3.1338561*(x=Xn*lab2xyz(x))-1.6168667*(y=Yn*lab2xyz(y))-.4906146*(z=Zn*lab2xyz(z))),lrgb2rgb(-.9787684*x+1.9161415*y+.033454*z),lrgb2rgb(.0719453*x-.2289914*y+1.4052427*z),this.opacity)}})),define(Hcl,hcl,extend(Color,{brighter:function brighter(k){return new Hcl(this.h,this.c,this.l+18*(null==k?1:k),this.opacity)},darker:function darker(k){return new Hcl(this.h,this.c,this.l-18*(null==k?1:k),this.opacity)},rgb:function rgb(){return labConvert(this).rgb()}}));var A=-.14861,B=1.78277,C=-.29227,cubehelix_D=-.90649,E=1.97294,ED=E*cubehelix_D,EB=E*B,BC_DA=B*C-cubehelix_D*A;function cubehelix_cubehelix(h,s,l,opacity){return 1===arguments.length?function cubehelixConvert(o){if(o instanceof Cubehelix)return new Cubehelix(o.h,o.s,o.l,o.opacity);o instanceof Rgb||(o=rgbConvert(o));var r=o.r/255,g=o.g/255,b=o.b/255,l=(BC_DA*b+ED*r-EB*g)/(BC_DA+ED-EB),bl=b-l,k=(E*(g-l)-C*bl)/cubehelix_D,s=Math.sqrt(k*k+bl*bl)/(E*l*(1-l)),h=s?Math.atan2(k,bl)*rad2deg-120:NaN;return new Cubehelix(h<0?h+360:h,s,l,o.opacity)}(h):new Cubehelix(h,s,l,null==opacity?1:opacity)}function Cubehelix(h,s,l,opacity){this.h=+h,this.s=+s,this.l=+l,this.opacity=+opacity}function basis(t1,v0,v1,v2,v3){var t2=t1*t1,t3=t2*t1;return((1-3*t1+3*t2-t3)*v0+(4-6*t2+3*t3)*v1+(1+3*t1+3*t2-3*t3)*v2+t3*v3)/6}define(Cubehelix,cubehelix_cubehelix,extend(Color,{brighter:function brighter(k){return k=null==k?1/.7:Math.pow(1/.7,k),new Cubehelix(this.h,this.s,this.l*k,this.opacity)},darker:function darker(k){return k=null==k?.7:Math.pow(.7,k),new Cubehelix(this.h,this.s,this.l*k,this.opacity)},rgb:function rgb(){var h=isNaN(this.h)?0:(this.h+120)*deg2rad,l=+this.l,a=isNaN(this.s)?0:this.s*l*(1-l),cosh=Math.cos(h),sinh=Math.sin(h);return new Rgb(255*(l+a*(A*cosh+B*sinh)),255*(l+a*(C*cosh+cubehelix_D*sinh)),255*(l+a*(E*cosh)),this.opacity)}}));var src_constant=function(x){return function(){return x}};function linear(a,d){return function(t){return a+t*d}}function color_hue(a,b){var d=b-a;return d?linear(a,d>180||d<-180?d-360*Math.round(d/360):d):src_constant(isNaN(a)?b:a)}function gamma(y){return 1==(y=+y)?nogamma:function(a,b){return b-a?function exponential(a,b,y){return a=Math.pow(a,y),b=Math.pow(b,y)-a,y=1/y,function(t){return Math.pow(a+t*b,y)}}(a,b,y):src_constant(isNaN(a)?b:a)}}function nogamma(a,b){var d=b-a;return d?linear(a,d):src_constant(isNaN(a)?b:a)}var src_rgb=function rgbGamma(y){var color=gamma(y);function rgb(start,end){var r=color((start=color_rgb(start)).r,(end=color_rgb(end)).r),g=color(start.g,end.g),b=color(start.b,end.b),opacity=nogamma(start.opacity,end.opacity);return function(t){return start.r=r(t),start.g=g(t),start.b=b(t),start.opacity=opacity(t),start+""}}return rgb.gamma=rgbGamma,rgb}(1);function rgbSpline(spline){return function(colors){var i,color,n=colors.length,r=new Array(n),g=new Array(n),b=new Array(n);for(i=0;i=1?(t=1,n-1):Math.floor(t*n),v1=values[i],v2=values[i+1],v0=i>0?values[i-1]:2*v1-v2,v3=ibi&&(bs=b.slice(bi,bs),s[i]?s[i]+=bs:s[++i]=bs),(am=am[0])===(bm=bm[0])?s[i]?s[i]+=bm:s[++i]=bm:(s[++i]=null,q.push({i:i,x:src_number(am,bm)})),bi=reB.lastIndex;return bi180?b+=360:b-a>180&&(a+=360),q.push({i:s.push(pop(s)+"rotate(",null,degParen)-2,x:src_number(a,b)})):b&&s.push(pop(s)+"rotate("+b+degParen)}(a.rotate,b.rotate,s,q),function skewX(a,b,s,q){a!==b?q.push({i:s.push(pop(s)+"skewX(",null,degParen)-2,x:src_number(a,b)}):b&&s.push(pop(s)+"skewX("+b+degParen)}(a.skewX,b.skewX,s,q),function scale(xa,ya,xb,yb,s,q){if(xa!==xb||ya!==yb){var i=s.push(pop(s)+"scale(",null,",",null,")");q.push({i:i-4,x:src_number(xa,xb)},{i:i-2,x:src_number(ya,yb)})}else 1===xb&&1===yb||s.push(pop(s)+"scale("+xb+","+yb+")")}(a.scaleX,a.scaleY,b.scaleX,b.scaleY,s,q),a=b=null,function(t){for(var o,i=-1,n=q.length;++i2?polymap:bimap,output=input=null,scale}function scale(x){return(output||(output=piecewise(domain,range,clamp?function deinterpolateClamp(deinterpolate){return function(a,b){var d=deinterpolate(a=+a,b=+b);return function(x){return x<=a?0:x>=b?1:d(x)}}}(deinterpolate):deinterpolate,interpolate)))(+x)}return scale.invert=function(y){return(input||(input=piecewise(range,domain,deinterpolateLinear,clamp?function reinterpolateClamp(reinterpolate){return function(a,b){var r=reinterpolate(a=+a,b=+b);return function(t){return t<=0?a:t>=1?b:r(t)}}}(reinterpolate):reinterpolate)))(+y)},scale.domain=function(_){return arguments.length?(domain=src_array_map.call(_,d3_scale_src_number),rescale()):domain.slice()},scale.range=function(_){return arguments.length?(range=array_slice.call(_),rescale()):range.slice()},scale.rangeRound=function(_){return range=array_slice.call(_),interpolate=src_round,rescale()},scale.clamp=function(_){return arguments.length?(clamp=!!_,rescale()):clamp},scale.interpolate=function(_){return arguments.length?(interpolate=_,rescale()):interpolate},rescale()}var formatDecimal=function(x,p){if((i=(x=p?x.toExponential(p-1):x.toExponential()).indexOf("e"))<0)return null;var i,coefficient=x.slice(0,i);return[coefficient.length>1?coefficient[0]+coefficient.slice(2):coefficient,+x.slice(i+1)]},src_exponent=function(x){return(x=formatDecimal(Math.abs(x)))?x[1]:NaN},re=/^(?:(.)?([<>=^]))?([+\-( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?(~)?([a-z%])?$/i;function formatSpecifier(specifier){return new FormatSpecifier(specifier)}function FormatSpecifier(specifier){if(!(match=re.exec(specifier)))throw new Error("invalid format: "+specifier);var match;this.fill=match[1]||" ",this.align=match[2]||">",this.sign=match[3]||"-",this.symbol=match[4]||"",this.zero=!!match[5],this.width=match[6]&&+match[6],this.comma=!!match[7],this.precision=match[8]&&+match[8].slice(1),this.trim=!!match[9],this.type=match[10]||""}formatSpecifier.prototype=FormatSpecifier.prototype,FormatSpecifier.prototype.toString=function(){return this.fill+this.align+this.sign+this.symbol+(this.zero?"0":"")+(null==this.width?"":Math.max(1,0|this.width))+(this.comma?",":"")+(null==this.precision?"":"."+Math.max(0,0|this.precision))+(this.trim?"~":"")+this.type};var prefixExponent,defaultLocale_locale,defaultLocale_format,defaultLocale_formatPrefix,formatTrim=function(s){out:for(var i1,n=s.length,i=1,i0=-1;i0){if(!+s[i])break out;i0=0}}return i0>0?s.slice(0,i0)+s.slice(i1+1):s},formatRounded=function(x,p){var d=formatDecimal(x,p);if(!d)return x+"";var coefficient=d[0],exponent=d[1];return exponent<0?"0."+new Array(-exponent).join("0")+coefficient:coefficient.length>exponent+1?coefficient.slice(0,exponent+1)+"."+coefficient.slice(exponent+1):coefficient+new Array(exponent-coefficient.length+2).join("0")},formatTypes={"%":function _(x,p){return(100*x).toFixed(p)},b:function b(x){return Math.round(x).toString(2)},c:function c(x){return x+""},d:function d(x){return Math.round(x).toString(10)},e:function e(x,p){return x.toExponential(p)},f:function f(x,p){return x.toFixed(p)},g:function g(x,p){return x.toPrecision(p)},o:function o(x){return Math.round(x).toString(8)},p:function p(x,_p){return formatRounded(100*x,_p)},r:formatRounded,s:function(x,p){var d=formatDecimal(x,p);if(!d)return x+"";var coefficient=d[0],exponent=d[1],i=exponent-(prefixExponent=3*Math.max(-8,Math.min(8,Math.floor(exponent/3))))+1,n=coefficient.length;return i===n?coefficient:i>n?coefficient+new Array(i-n+1).join("0"):i>0?coefficient.slice(0,i)+"."+coefficient.slice(i):"0."+new Array(1-i).join("0")+formatDecimal(x,Math.max(0,p+i-1))[0]},X:function X(x){return Math.round(x).toString(16).toUpperCase()},x:function x(_x){return Math.round(_x).toString(16)}},src_identity=function(x){return x},prefixes=["y","z","a","f","p","n","µ","m","","k","M","G","T","P","E","Z","Y"],src_locale=function(locale){var group=locale.grouping&&locale.thousands?function(grouping,thousands){return function(value,width){for(var i=value.length,t=[],j=0,g=grouping[0],length=0;i>0&&g>0&&(length+g+1>width&&(g=Math.max(1,width-length)),t.push(value.substring(i-=g,i+g)),!((length+=g+1)>width));)g=grouping[j=(j+1)%grouping.length];return t.reverse().join(thousands)}}(locale.grouping,locale.thousands):src_identity,currency=locale.currency,decimal=locale.decimal,numerals=locale.numerals?function(numerals){return function(value){return value.replace(/[0-9]/g,function(i){return numerals[+i]})}}(locale.numerals):src_identity,percent=locale.percent||"%";function newFormat(specifier){var fill=(specifier=formatSpecifier(specifier)).fill,align=specifier.align,sign=specifier.sign,symbol=specifier.symbol,zero=specifier.zero,width=specifier.width,comma=specifier.comma,precision=specifier.precision,trim=specifier.trim,type=specifier.type;"n"===type?(comma=!0,type="g"):formatTypes[type]||(null==precision&&(precision=12),trim=!0,type="g"),(zero||"0"===fill&&"="===align)&&(zero=!0,fill="0",align="=");var prefix="$"===symbol?currency[0]:"#"===symbol&&/[boxX]/.test(type)?"0"+type.toLowerCase():"",suffix="$"===symbol?currency[1]:/[%p]/.test(type)?percent:"",formatType=formatTypes[type],maybeSuffix=/[defgprs%]/.test(type);function format(value){var i,n,c,valuePrefix=prefix,valueSuffix=suffix;if("c"===type)valueSuffix=formatType(value)+valueSuffix,value="";else{var valueNegative=(value=+value)<0;if(value=formatType(Math.abs(value),precision),trim&&(value=formatTrim(value)),valueNegative&&0==+value&&(valueNegative=!1),valuePrefix=(valueNegative?"("===sign?sign:"-":"-"===sign||"("===sign?"":sign)+valuePrefix,valueSuffix=("s"===type?prefixes[8+prefixExponent/3]:"")+valueSuffix+(valueNegative&&"("===sign?")":""),maybeSuffix)for(i=-1,n=value.length;++i(c=value.charCodeAt(i))||c>57){valueSuffix=(46===c?decimal+value.slice(i+1):value.slice(i))+valueSuffix,value=value.slice(0,i);break}}comma&&!zero&&(value=group(value,1/0));var length=valuePrefix.length+value.length+valueSuffix.length,padding=length>1)+valuePrefix+value+valueSuffix+padding.slice(length);break;default:value=padding+valuePrefix+value+valueSuffix}return numerals(value)}return precision=null==precision?6:/[gprs]/.test(type)?Math.max(1,Math.min(21,precision)):Math.max(0,Math.min(20,precision)),format.toString=function(){return specifier+""},format}return{format:newFormat,formatPrefix:function formatPrefix(specifier,value){var f=newFormat(((specifier=formatSpecifier(specifier)).type="f",specifier)),e=3*Math.max(-8,Math.min(8,Math.floor(src_exponent(value)/3))),k=Math.pow(10,-e),prefix=prefixes[8+e/3];return function(value){return f(k*value)+prefix}}}};!function defaultLocale(definition){return defaultLocale_locale=src_locale(definition),defaultLocale_format=defaultLocale_locale.format,defaultLocale_formatPrefix=defaultLocale_locale.formatPrefix,defaultLocale_locale}({decimal:".",thousands:",",grouping:[3],currency:["$",""]});var src_tickFormat=function(domain,count,specifier){var precision,start=domain[0],stop=domain[domain.length-1],step=tickStep(start,stop,null==count?10:count);switch((specifier=formatSpecifier(null==specifier?",f":specifier)).type){case"s":var value=Math.max(Math.abs(start),Math.abs(stop));return null!=specifier.precision||isNaN(precision=function(step,value){return Math.max(0,3*Math.max(-8,Math.min(8,Math.floor(src_exponent(value)/3)))-src_exponent(Math.abs(step)))}(step,value))||(specifier.precision=precision),defaultLocale_formatPrefix(specifier,value);case"":case"e":case"g":case"p":case"r":null!=specifier.precision||isNaN(precision=function(step,max){return step=Math.abs(step),max=Math.abs(max)-step,Math.max(0,src_exponent(max)-src_exponent(step))+1}(step,Math.max(Math.abs(start),Math.abs(stop))))||(specifier.precision=precision-("e"===specifier.type));break;case"f":case"%":null!=specifier.precision||isNaN(precision=function(step){return Math.max(0,-src_exponent(Math.abs(step)))}(step))||(specifier.precision=precision-2*("%"===specifier.type))}return defaultLocale_format(specifier)};function linearish(scale){var domain=scale.domain;return scale.ticks=function(count){var d=domain();return src_ticks(d[0],d[d.length-1],null==count?10:count)},scale.tickFormat=function(count,specifier){return src_tickFormat(domain(),count,specifier)},scale.nice=function(count){null==count&&(count=10);var step,d=domain(),i0=0,i1=d.length-1,start=d[i0],stop=d[i1];return stop0?step=tickIncrement(start=Math.floor(start/step)*step,stop=Math.ceil(stop/step)*step,count):step<0&&(step=tickIncrement(start=Math.ceil(start*step)/step,stop=Math.floor(stop*step)/step,count)),step>0?(d[i0]=Math.floor(start/step)*step,d[i1]=Math.ceil(stop/step)*step,domain(d)):step<0&&(d[i0]=Math.ceil(start*step)/step,d[i1]=Math.floor(stop*step)/step,domain(d)),scale},scale}function linear_linear(){var scale=continuous(deinterpolateLinear,src_number);return scale.copy=function(){return copy(scale,linear_linear())},linearish(scale)}function identity_identity(){var domain=[0,1];function scale(x){return+x}return scale.invert=scale,scale.domain=scale.range=function(_){return arguments.length?(domain=src_array_map.call(_,d3_scale_src_number),scale):domain.slice()},scale.copy=function(){return identity_identity().domain(domain)},linearish(scale)}var nice=function(domain,interval){var t,i0=0,i1=(domain=domain.slice()).length-1,x0=domain[i0],x1=domain[i1];return x10){for(;iv)break;z.push(t)}}else for(;i=1;--k)if(!((t=p*k)v)break;z.push(t)}}else z=src_ticks(i,j,Math.min(j-i,n)).map(pows);return r?z.reverse():z},scale.tickFormat=function(count,specifier){if(null==specifier&&(specifier=10===base?".0e":","),"function"!=typeof specifier&&(specifier=defaultLocale_format(specifier)),count===1/0)return specifier;null==count&&(count=10);var k=Math.max(1,base*count/scale.ticks().length);return function(d){var i=d/pows(Math.round(logs(d)));return i*base0?thresholds[i-1]:domain[0],i=n?[domain[n-1],x1]:[domain[i-1],domain[i]]},scale.copy=function(){return quantize_quantize().domain([x0,x1]).range(range)},linearish(scale)}function threshold_threshold(){var domain=[.5],range=[0,1],n=1;function scale(x){if(x<=x)return range[bisect(domain,x,0,n)]}return scale.domain=function(_){return arguments.length?(domain=array_slice.call(_),n=Math.min(domain.length,range.length-1),scale):domain.slice()},scale.range=function(_){return arguments.length?(range=array_slice.call(_),n=Math.min(domain.length,range.length-1),scale):range.slice()},scale.invertExtent=function(y){var i=range.indexOf(y);return[domain[i-1],domain[i]]},scale.copy=function(){return threshold_threshold().domain(domain).range(range)},scale}var interval_t0=new Date,interval_t1=new Date;function newInterval(floori,offseti,count,field){function interval(date){return floori(date=new Date(+date)),date}return interval.floor=interval,interval.ceil=function(date){return floori(date=new Date(date-1)),offseti(date,1),floori(date),date},interval.round=function(date){var d0=interval(date),d1=interval.ceil(date);return date-d00))return range;do{range.push(previous=new Date(+start)),offseti(start,step),floori(start)}while(previous=date)for(;floori(date),!test(date);)date.setTime(date-1)},function(date,step){if(date>=date)if(step<0)for(;++step<=0;)for(;offseti(date,-1),!test(date););else for(;--step>=0;)for(;offseti(date,1),!test(date););})},count&&(interval.count=function(start,end){return interval_t0.setTime(+start),interval_t1.setTime(+end),floori(interval_t0),floori(interval_t1),Math.floor(count(interval_t0,interval_t1))},interval.every=function(step){return step=Math.floor(step),isFinite(step)&&step>0?step>1?interval.filter(field?function(d){return field(d)%step==0}:function(d){return interval.count(0,d)%step==0}):interval:null}),interval}var millisecond_millisecond=newInterval(function(){},function(date,step){date.setTime(+date+step)},function(start,end){return end-start});millisecond_millisecond.every=function(k){return k=Math.floor(k),isFinite(k)&&k>0?k>1?newInterval(function(date){date.setTime(Math.floor(date/k)*k)},function(date,step){date.setTime(+date+step*k)},function(start,end){return(end-start)/k}):millisecond_millisecond:null};var src_millisecond=millisecond_millisecond,durationMinute=(millisecond_millisecond.range,6e4),durationWeek=6048e5,second_second=newInterval(function(date){date.setTime(1e3*Math.floor(date/1e3))},function(date,step){date.setTime(+date+1e3*step)},function(start,end){return(end-start)/1e3},function(date){return date.getUTCSeconds()}),src_second=second_second,minute_minute=(second_second.range,newInterval(function(date){date.setTime(Math.floor(date/durationMinute)*durationMinute)},function(date,step){date.setTime(+date+step*durationMinute)},function(start,end){return(end-start)/durationMinute},function(date){return date.getMinutes()})),src_minute=minute_minute,hour_hour=(minute_minute.range,newInterval(function(date){var offset=date.getTimezoneOffset()*durationMinute%36e5;offset<0&&(offset+=36e5),date.setTime(36e5*Math.floor((+date-offset)/36e5)+offset)},function(date,step){date.setTime(+date+36e5*step)},function(start,end){return(end-start)/36e5},function(date){return date.getHours()})),src_hour=hour_hour,day_day=(hour_hour.range,newInterval(function(date){date.setHours(0,0,0,0)},function(date,step){date.setDate(date.getDate()+step)},function(start,end){return(end-start-(end.getTimezoneOffset()-start.getTimezoneOffset())*durationMinute)/864e5},function(date){return date.getDate()-1})),src_day=day_day;day_day.range;function weekday(i){return newInterval(function(date){date.setDate(date.getDate()-(date.getDay()+7-i)%7),date.setHours(0,0,0,0)},function(date,step){date.setDate(date.getDate()+7*step)},function(start,end){return(end-start-(end.getTimezoneOffset()-start.getTimezoneOffset())*durationMinute)/durationWeek})}var sunday=weekday(0),monday=weekday(1),tuesday=weekday(2),wednesday=weekday(3),thursday=weekday(4),friday=weekday(5),saturday=weekday(6),month_month=(sunday.range,monday.range,tuesday.range,wednesday.range,thursday.range,friday.range,saturday.range,newInterval(function(date){date.setDate(1),date.setHours(0,0,0,0)},function(date,step){date.setMonth(date.getMonth()+step)},function(start,end){return end.getMonth()-start.getMonth()+12*(end.getFullYear()-start.getFullYear())},function(date){return date.getMonth()})),src_month=month_month,year_year=(month_month.range,newInterval(function(date){date.setMonth(0,1),date.setHours(0,0,0,0)},function(date,step){date.setFullYear(date.getFullYear()+step)},function(start,end){return end.getFullYear()-start.getFullYear()},function(date){return date.getFullYear()}));year_year.every=function(k){return isFinite(k=Math.floor(k))&&k>0?newInterval(function(date){date.setFullYear(Math.floor(date.getFullYear()/k)*k),date.setMonth(0,1),date.setHours(0,0,0,0)},function(date,step){date.setFullYear(date.getFullYear()+step*k)}):null};var src_year=year_year,utcMinute=(year_year.range,newInterval(function(date){date.setUTCSeconds(0,0)},function(date,step){date.setTime(+date+step*durationMinute)},function(start,end){return(end-start)/durationMinute},function(date){return date.getUTCMinutes()})),utcHour=(utcMinute.range,newInterval(function(date){date.setUTCMinutes(0,0,0)},function(date,step){date.setTime(+date+36e5*step)},function(start,end){return(end-start)/36e5},function(date){return date.getUTCHours()})),utcDay=(utcHour.range,newInterval(function(date){date.setUTCHours(0,0,0,0)},function(date,step){date.setUTCDate(date.getUTCDate()+step)},function(start,end){return(end-start)/864e5},function(date){return date.getUTCDate()-1})),src_utcDay=utcDay;utcDay.range;function utcWeekday(i){return newInterval(function(date){date.setUTCDate(date.getUTCDate()-(date.getUTCDay()+7-i)%7),date.setUTCHours(0,0,0,0)},function(date,step){date.setUTCDate(date.getUTCDate()+7*step)},function(start,end){return(end-start)/durationWeek})}var utcSunday=utcWeekday(0),utcMonday=utcWeekday(1),utcTuesday=utcWeekday(2),utcWednesday=utcWeekday(3),utcThursday=utcWeekday(4),utcFriday=utcWeekday(5),utcSaturday=utcWeekday(6),utcMonth=(utcSunday.range,utcMonday.range,utcTuesday.range,utcWednesday.range,utcThursday.range,utcFriday.range,utcSaturday.range,newInterval(function(date){date.setUTCDate(1),date.setUTCHours(0,0,0,0)},function(date,step){date.setUTCMonth(date.getUTCMonth()+step)},function(start,end){return end.getUTCMonth()-start.getUTCMonth()+12*(end.getUTCFullYear()-start.getUTCFullYear())},function(date){return date.getUTCMonth()})),utcYear=(utcMonth.range,newInterval(function(date){date.setUTCMonth(0,1),date.setUTCHours(0,0,0,0)},function(date,step){date.setUTCFullYear(date.getUTCFullYear()+step)},function(start,end){return end.getUTCFullYear()-start.getUTCFullYear()},function(date){return date.getUTCFullYear()}));utcYear.every=function(k){return isFinite(k=Math.floor(k))&&k>0?newInterval(function(date){date.setUTCFullYear(Math.floor(date.getUTCFullYear()/k)*k),date.setUTCMonth(0,1),date.setUTCHours(0,0,0,0)},function(date,step){date.setUTCFullYear(date.getUTCFullYear()+step*k)}):null};var src_utcYear=utcYear;utcYear.range;function localDate(d){if(0<=d.y&&d.y<100){var date=new Date(-1,d.m,d.d,d.H,d.M,d.S,d.L);return date.setFullYear(d.y),date}return new Date(d.y,d.m,d.d,d.H,d.M,d.S,d.L)}function utcDate(d){if(0<=d.y&&d.y<100){var date=new Date(Date.UTC(-1,d.m,d.d,d.H,d.M,d.S,d.L));return date.setUTCFullYear(d.y),date}return new Date(Date.UTC(d.y,d.m,d.d,d.H,d.M,d.S,d.L))}function newYear(y){return{y:y,m:0,d:1,H:0,M:0,S:0,L:0}}var src_defaultLocale_locale,timeFormat,utcFormat,utcParse,pads={"-":"",_:" ",0:"0"},numberRe=/^\s*\d+/,percentRe=/^%/,requoteRe=/[\\^$*+?|[\]().{}]/g;function locale_pad(value,fill,width){var sign=value<0?"-":"",string=(sign?-value:value)+"",length=string.length;return sign+(length68?1900:2e3),i+n[0].length):-1}function parseZone(d,string,i){var n=/^(Z)|([+-]\d\d)(?::?(\d\d))?/.exec(string.slice(i,i+6));return n?(d.Z=n[1]?0:-(n[2]+(n[3]||"00")),i+n[0].length):-1}function parseMonthNumber(d,string,i){var n=numberRe.exec(string.slice(i,i+2));return n?(d.m=n[0]-1,i+n[0].length):-1}function parseDayOfMonth(d,string,i){var n=numberRe.exec(string.slice(i,i+2));return n?(d.d=+n[0],i+n[0].length):-1}function parseDayOfYear(d,string,i){var n=numberRe.exec(string.slice(i,i+3));return n?(d.m=0,d.d=+n[0],i+n[0].length):-1}function parseHour24(d,string,i){var n=numberRe.exec(string.slice(i,i+2));return n?(d.H=+n[0],i+n[0].length):-1}function parseMinutes(d,string,i){var n=numberRe.exec(string.slice(i,i+2));return n?(d.M=+n[0],i+n[0].length):-1}function parseSeconds(d,string,i){var n=numberRe.exec(string.slice(i,i+2));return n?(d.S=+n[0],i+n[0].length):-1}function parseMilliseconds(d,string,i){var n=numberRe.exec(string.slice(i,i+3));return n?(d.L=+n[0],i+n[0].length):-1}function parseMicroseconds(d,string,i){var n=numberRe.exec(string.slice(i,i+6));return n?(d.L=Math.floor(n[0]/1e3),i+n[0].length):-1}function parseLiteralPercent(d,string,i){var n=percentRe.exec(string.slice(i,i+1));return n?i+n[0].length:-1}function parseUnixTimestamp(d,string,i){var n=numberRe.exec(string.slice(i));return n?(d.Q=+n[0],i+n[0].length):-1}function parseUnixTimestampSeconds(d,string,i){var n=numberRe.exec(string.slice(i));return n?(d.Q=1e3*+n[0],i+n[0].length):-1}function formatDayOfMonth(d,p){return locale_pad(d.getDate(),p,2)}function formatHour24(d,p){return locale_pad(d.getHours(),p,2)}function formatHour12(d,p){return locale_pad(d.getHours()%12||12,p,2)}function formatDayOfYear(d,p){return locale_pad(1+src_day.count(src_year(d),d),p,3)}function formatMilliseconds(d,p){return locale_pad(d.getMilliseconds(),p,3)}function formatMicroseconds(d,p){return formatMilliseconds(d,p)+"000"}function formatMonthNumber(d,p){return locale_pad(d.getMonth()+1,p,2)}function formatMinutes(d,p){return locale_pad(d.getMinutes(),p,2)}function formatSeconds(d,p){return locale_pad(d.getSeconds(),p,2)}function formatWeekdayNumberMonday(d){var day=d.getDay();return 0===day?7:day}function formatWeekNumberSunday(d,p){return locale_pad(sunday.count(src_year(d),d),p,2)}function formatWeekNumberISO(d,p){var day=d.getDay();return d=day>=4||0===day?thursday(d):thursday.ceil(d),locale_pad(thursday.count(src_year(d),d)+(4===src_year(d).getDay()),p,2)}function formatWeekdayNumberSunday(d){return d.getDay()}function formatWeekNumberMonday(d,p){return locale_pad(monday.count(src_year(d),d),p,2)}function locale_formatYear(d,p){return locale_pad(d.getFullYear()%100,p,2)}function formatFullYear(d,p){return locale_pad(d.getFullYear()%1e4,p,4)}function formatZone(d){var z=d.getTimezoneOffset();return(z>0?"-":(z*=-1,"+"))+locale_pad(z/60|0,"0",2)+locale_pad(z%60,"0",2)}function formatUTCDayOfMonth(d,p){return locale_pad(d.getUTCDate(),p,2)}function formatUTCHour24(d,p){return locale_pad(d.getUTCHours(),p,2)}function formatUTCHour12(d,p){return locale_pad(d.getUTCHours()%12||12,p,2)}function formatUTCDayOfYear(d,p){return locale_pad(1+src_utcDay.count(src_utcYear(d),d),p,3)}function formatUTCMilliseconds(d,p){return locale_pad(d.getUTCMilliseconds(),p,3)}function formatUTCMicroseconds(d,p){return formatUTCMilliseconds(d,p)+"000"}function formatUTCMonthNumber(d,p){return locale_pad(d.getUTCMonth()+1,p,2)}function formatUTCMinutes(d,p){return locale_pad(d.getUTCMinutes(),p,2)}function formatUTCSeconds(d,p){return locale_pad(d.getUTCSeconds(),p,2)}function formatUTCWeekdayNumberMonday(d){var dow=d.getUTCDay();return 0===dow?7:dow}function formatUTCWeekNumberSunday(d,p){return locale_pad(utcSunday.count(src_utcYear(d),d),p,2)}function formatUTCWeekNumberISO(d,p){var day=d.getUTCDay();return d=day>=4||0===day?utcThursday(d):utcThursday.ceil(d),locale_pad(utcThursday.count(src_utcYear(d),d)+(4===src_utcYear(d).getUTCDay()),p,2)}function formatUTCWeekdayNumberSunday(d){return d.getUTCDay()}function formatUTCWeekNumberMonday(d,p){return locale_pad(utcMonday.count(src_utcYear(d),d),p,2)}function formatUTCYear(d,p){return locale_pad(d.getUTCFullYear()%100,p,2)}function formatUTCFullYear(d,p){return locale_pad(d.getUTCFullYear()%1e4,p,4)}function formatUTCZone(){return"+0000"}function formatLiteralPercent(){return"%"}function formatUnixTimestamp(d){return+d}function formatUnixTimestampSeconds(d){return Math.floor(+d/1e3)}!function defaultLocale_defaultLocale(definition){return src_defaultLocale_locale=function formatLocale(locale){var locale_dateTime=locale.dateTime,locale_date=locale.date,locale_time=locale.time,locale_periods=locale.periods,locale_weekdays=locale.days,locale_shortWeekdays=locale.shortDays,locale_months=locale.months,locale_shortMonths=locale.shortMonths,periodRe=formatRe(locale_periods),periodLookup=formatLookup(locale_periods),weekdayRe=formatRe(locale_weekdays),weekdayLookup=formatLookup(locale_weekdays),shortWeekdayRe=formatRe(locale_shortWeekdays),shortWeekdayLookup=formatLookup(locale_shortWeekdays),monthRe=formatRe(locale_months),monthLookup=formatLookup(locale_months),shortMonthRe=formatRe(locale_shortMonths),shortMonthLookup=formatLookup(locale_shortMonths),formats={a:function formatShortWeekday(d){return locale_shortWeekdays[d.getDay()]},A:function formatWeekday(d){return locale_weekdays[d.getDay()]},b:function formatShortMonth(d){return locale_shortMonths[d.getMonth()]},B:function formatMonth(d){return locale_months[d.getMonth()]},c:null,d:formatDayOfMonth,e:formatDayOfMonth,f:formatMicroseconds,H:formatHour24,I:formatHour12,j:formatDayOfYear,L:formatMilliseconds,m:formatMonthNumber,M:formatMinutes,p:function formatPeriod(d){return locale_periods[+(d.getHours()>=12)]},Q:formatUnixTimestamp,s:formatUnixTimestampSeconds,S:formatSeconds,u:formatWeekdayNumberMonday,U:formatWeekNumberSunday,V:formatWeekNumberISO,w:formatWeekdayNumberSunday,W:formatWeekNumberMonday,x:null,X:null,y:locale_formatYear,Y:formatFullYear,Z:formatZone,"%":formatLiteralPercent},utcFormats={a:function formatUTCShortWeekday(d){return locale_shortWeekdays[d.getUTCDay()]},A:function formatUTCWeekday(d){return locale_weekdays[d.getUTCDay()]},b:function formatUTCShortMonth(d){return locale_shortMonths[d.getUTCMonth()]},B:function formatUTCMonth(d){return locale_months[d.getUTCMonth()]},c:null,d:formatUTCDayOfMonth,e:formatUTCDayOfMonth,f:formatUTCMicroseconds,H:formatUTCHour24,I:formatUTCHour12,j:formatUTCDayOfYear,L:formatUTCMilliseconds,m:formatUTCMonthNumber,M:formatUTCMinutes,p:function formatUTCPeriod(d){return locale_periods[+(d.getUTCHours()>=12)]},Q:formatUnixTimestamp,s:formatUnixTimestampSeconds,S:formatUTCSeconds,u:formatUTCWeekdayNumberMonday,U:formatUTCWeekNumberSunday,V:formatUTCWeekNumberISO,w:formatUTCWeekdayNumberSunday,W:formatUTCWeekNumberMonday,x:null,X:null,y:formatUTCYear,Y:formatUTCFullYear,Z:formatUTCZone,"%":formatLiteralPercent},parses={a:function parseShortWeekday(d,string,i){var n=shortWeekdayRe.exec(string.slice(i));return n?(d.w=shortWeekdayLookup[n[0].toLowerCase()],i+n[0].length):-1},A:function parseWeekday(d,string,i){var n=weekdayRe.exec(string.slice(i));return n?(d.w=weekdayLookup[n[0].toLowerCase()],i+n[0].length):-1},b:function parseShortMonth(d,string,i){var n=shortMonthRe.exec(string.slice(i));return n?(d.m=shortMonthLookup[n[0].toLowerCase()],i+n[0].length):-1},B:function parseMonth(d,string,i){var n=monthRe.exec(string.slice(i));return n?(d.m=monthLookup[n[0].toLowerCase()],i+n[0].length):-1},c:function parseLocaleDateTime(d,string,i){return parseSpecifier(d,locale_dateTime,string,i)},d:parseDayOfMonth,e:parseDayOfMonth,f:parseMicroseconds,H:parseHour24,I:parseHour24,j:parseDayOfYear,L:parseMilliseconds,m:parseMonthNumber,M:parseMinutes,p:function parsePeriod(d,string,i){var n=periodRe.exec(string.slice(i));return n?(d.p=periodLookup[n[0].toLowerCase()],i+n[0].length):-1},Q:parseUnixTimestamp,s:parseUnixTimestampSeconds,S:parseSeconds,u:parseWeekdayNumberMonday,U:parseWeekNumberSunday,V:parseWeekNumberISO,w:parseWeekdayNumberSunday,W:parseWeekNumberMonday,x:function parseLocaleDate(d,string,i){return parseSpecifier(d,locale_date,string,i)},X:function parseLocaleTime(d,string,i){return parseSpecifier(d,locale_time,string,i)},y:parseYear,Y:parseFullYear,Z:parseZone,"%":parseLiteralPercent};function newFormat(specifier,formats){return function(date){var c,pad,format,string=[],i=-1,j=0,n=specifier.length;for(date instanceof Date||(date=new Date(+date));++i53)return null;"w"in d||(d.w=1),"Z"in d?(week=(day=(week=utcDate(newYear(d.y))).getUTCDay())>4||0===day?utcMonday.ceil(week):utcMonday(week),week=src_utcDay.offset(week,7*(d.V-1)),d.y=week.getUTCFullYear(),d.m=week.getUTCMonth(),d.d=week.getUTCDate()+(d.w+6)%7):(week=(day=(week=newDate(newYear(d.y))).getDay())>4||0===day?monday.ceil(week):monday(week),week=src_day.offset(week,7*(d.V-1)),d.y=week.getFullYear(),d.m=week.getMonth(),d.d=week.getDate()+(d.w+6)%7)}else("W"in d||"U"in d)&&("w"in d||(d.w="u"in d?d.u%7:"W"in d?1:0),day="Z"in d?utcDate(newYear(d.y)).getUTCDay():newDate(newYear(d.y)).getDay(),d.m=0,d.d="W"in d?(d.w+6)%7+7*d.W-(day+5)%7:d.w+7*d.U-(day+6)%7);return"Z"in d?(d.H+=d.Z/100|0,d.M+=d.Z%100,utcDate(d)):newDate(d)}}function parseSpecifier(d,specifier,string,j){for(var c,parse,i=0,n=specifier.length,m=string.length;i=m)return-1;if(37===(c=specifier.charCodeAt(i++))){if(c=specifier.charAt(i++),!(parse=parses[c in pads?specifier.charAt(i++):c])||(j=parse(d,string,j))<0)return-1}else if(c!=string.charCodeAt(j++))return-1}return j}return formats.x=newFormat(locale_date,formats),formats.X=newFormat(locale_time,formats),formats.c=newFormat(locale_dateTime,formats),utcFormats.x=newFormat(locale_date,utcFormats),utcFormats.X=newFormat(locale_time,utcFormats),utcFormats.c=newFormat(locale_dateTime,utcFormats),{format:function format(specifier){var f=newFormat(specifier+="",formats);return f.toString=function(){return specifier},f},parse:function parse(specifier){var p=newParse(specifier+="",localDate);return p.toString=function(){return specifier},p},utcFormat:function utcFormat(specifier){var f=newFormat(specifier+="",utcFormats);return f.toString=function(){return specifier},f},utcParse:function utcParse(specifier){var p=newParse(specifier,utcDate);return p.toString=function(){return specifier},p}}}(definition),timeFormat=src_defaultLocale_locale.format,src_defaultLocale_locale.parse,utcFormat=src_defaultLocale_locale.utcFormat,utcParse=src_defaultLocale_locale.utcParse,src_defaultLocale_locale}({dateTime:"%x, %X",date:"%-m/%-d/%Y",time:"%-I:%M:%S %p",periods:["AM","PM"],days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],shortDays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],shortMonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]});Date.prototype.toISOString||utcFormat("%Y-%m-%dT%H:%M:%S.%LZ");+new Date("2000-01-01T00:00:00.000Z")||utcParse("%Y-%m-%dT%H:%M:%S.%LZ");var time_durationSecond=1e3,time_durationMinute=60*time_durationSecond,time_durationHour=60*time_durationMinute,time_durationDay=24*time_durationHour,time_durationWeek=7*time_durationDay,durationMonth=30*time_durationDay,durationYear=365*time_durationDay;function time_date(t){return new Date(t)}function time_number(t){return t instanceof Date?+t:+new Date(+t)}function calendar(year,month,week,day,hour,minute,second,millisecond,format){var scale=continuous(deinterpolateLinear,src_number),invert=scale.invert,domain=scale.domain,formatMillisecond=format(".%L"),formatSecond=format(":%S"),formatMinute=format("%I:%M"),formatHour=format("%I %p"),formatDay=format("%a %d"),formatWeek=format("%b %d"),formatMonth=format("%B"),formatYear=format("%Y"),tickIntervals=[[second,1,time_durationSecond],[second,5,5*time_durationSecond],[second,15,15*time_durationSecond],[second,30,30*time_durationSecond],[minute,1,time_durationMinute],[minute,5,5*time_durationMinute],[minute,15,15*time_durationMinute],[minute,30,30*time_durationMinute],[hour,1,time_durationHour],[hour,3,3*time_durationHour],[hour,6,6*time_durationHour],[hour,12,12*time_durationHour],[day,1,time_durationDay],[day,2,2*time_durationDay],[week,1,time_durationWeek],[month,1,durationMonth],[month,3,3*durationMonth],[year,1,durationYear]];function tickFormat(date){return(second(date)1)&&(t-=Math.floor(t));var ts=Math.abs(t-.5);return rainbow_c.h=360*t-100,rainbow_c.s=1.5-1.5*ts,rainbow_c.l=.8-.9*ts,rainbow_c+""};color_rgb(),Math.PI,Math.PI;function viridis_ramp(range){var n=range.length;return function(t){return range[Math.max(0,Math.min(n-1,Math.floor(t*n)))]}}var sequential_multi_viridis=viridis_ramp(d3_scale_chromatic_src_colors("44015444025645045745055946075a46085c460a5d460b5e470d60470e6147106347116447136548146748166848176948186a481a6c481b6d481c6e481d6f481f70482071482173482374482475482576482677482878482979472a7a472c7a472d7b472e7c472f7d46307e46327e46337f463480453581453781453882443983443a83443b84433d84433e85423f854240864241864142874144874045884046883f47883f48893e49893e4a893e4c8a3d4d8a3d4e8a3c4f8a3c508b3b518b3b528b3a538b3a548c39558c39568c38588c38598c375a8c375b8d365c8d365d8d355e8d355f8d34608d34618d33628d33638d32648e32658e31668e31678e31688e30698e306a8e2f6b8e2f6c8e2e6d8e2e6e8e2e6f8e2d708e2d718e2c718e2c728e2c738e2b748e2b758e2a768e2a778e2a788e29798e297a8e297b8e287c8e287d8e277e8e277f8e27808e26818e26828e26828e25838e25848e25858e24868e24878e23888e23898e238a8d228b8d228c8d228d8d218e8d218f8d21908d21918c20928c20928c20938c1f948c1f958b1f968b1f978b1f988b1f998a1f9a8a1e9b8a1e9c891e9d891f9e891f9f881fa0881fa1881fa1871fa28720a38620a48621a58521a68522a78522a88423a98324aa8325ab8225ac8226ad8127ad8128ae8029af7f2ab07f2cb17e2db27d2eb37c2fb47c31b57b32b67a34b67935b77937b87838b9773aba763bbb753dbc743fbc7340bd7242be7144bf7046c06f48c16e4ac16d4cc26c4ec36b50c46a52c56954c56856c66758c7655ac8645cc8635ec96260ca6063cb5f65cb5e67cc5c69cd5b6ccd5a6ece5870cf5773d05675d05477d1537ad1517cd2507fd34e81d34d84d44b86d54989d5488bd6468ed64590d74393d74195d84098d83e9bd93c9dd93ba0da39a2da37a5db36a8db34aadc32addc30b0dd2fb2dd2db5de2bb8de29bade28bddf26c0df25c2df23c5e021c8e020cae11fcde11dd0e11cd2e21bd5e21ad8e219dae319dde318dfe318e2e418e5e419e7e419eae51aece51befe51cf1e51df4e61ef6e620f8e621fbe723fde725")),viridis_magma=viridis_ramp(d3_scale_chromatic_src_colors("00000401000501010601010802010902020b02020d03030f03031204041405041606051806051a07061c08071e0907200a08220b09240c09260d0a290e0b2b100b2d110c2f120d31130d34140e36150e38160f3b180f3d19103f1a10421c10441d11471e114920114b21114e22115024125325125527125829115a2a115c2c115f2d11612f116331116533106734106936106b38106c390f6e3b0f703d0f713f0f72400f74420f75440f764510774710784910784a10794c117a4e117b4f127b51127c52137c54137d56147d57157e59157e5a167e5c167f5d177f5f187f601880621980641a80651a80671b80681c816a1c816b1d816d1d816e1e81701f81721f817320817521817621817822817922827b23827c23827e24828025828125818326818426818627818827818928818b29818c29818e2a81902a81912b81932b80942c80962c80982d80992d809b2e7f9c2e7f9e2f7fa02f7fa1307ea3307ea5317ea6317da8327daa337dab337cad347cae347bb0357bb2357bb3367ab5367ab73779b83779ba3878bc3978bd3977bf3a77c03a76c23b75c43c75c53c74c73d73c83e73ca3e72cc3f71cd4071cf4070d0416fd2426fd3436ed5446dd6456cd8456cd9466bdb476adc4869de4968df4a68e04c67e24d66e34e65e44f64e55064e75263e85362e95462ea5661eb5760ec5860ed5a5fee5b5eef5d5ef05f5ef1605df2625df2645cf3655cf4675cf4695cf56b5cf66c5cf66e5cf7705cf7725cf8745cf8765cf9785df9795df97b5dfa7d5efa7f5efa815ffb835ffb8560fb8761fc8961fc8a62fc8c63fc8e64fc9065fd9266fd9467fd9668fd9869fd9a6afd9b6bfe9d6cfe9f6dfea16efea36ffea571fea772fea973feaa74feac76feae77feb078feb27afeb47bfeb67cfeb77efeb97ffebb81febd82febf84fec185fec287fec488fec68afec88cfeca8dfecc8ffecd90fecf92fed194fed395fed597fed799fed89afdda9cfddc9efddea0fde0a1fde2a3fde3a5fde5a7fde7a9fde9aafdebacfcecaefceeb0fcf0b2fcf2b4fcf4b6fcf6b8fcf7b9fcf9bbfcfbbdfcfdbf")),viridis_inferno=viridis_ramp(d3_scale_chromatic_src_colors("00000401000501010601010802010a02020c02020e03021004031204031405041706041907051b08051d09061f0a07220b07240c08260d08290e092b10092d110a30120a32140b34150b37160b39180c3c190c3e1b0c411c0c431e0c451f0c48210c4a230c4c240c4f260c51280b53290b552b0b572d0b592f0a5b310a5c320a5e340a5f3609613809623909633b09643d09653e0966400a67420a68440a68450a69470b6a490b6a4a0c6b4c0c6b4d0d6c4f0d6c510e6c520e6d540f6d550f6d57106e59106e5a116e5c126e5d126e5f136e61136e62146e64156e65156e67166e69166e6a176e6c186e6d186e6f196e71196e721a6e741a6e751b6e771c6d781c6d7a1d6d7c1d6d7d1e6d7f1e6c801f6c82206c84206b85216b87216b88226a8a226a8c23698d23698f24699025689225689326679526679727669827669a28659b29649d29649f2a63a02a63a22b62a32c61a52c60a62d60a82e5fa92e5eab2f5ead305dae305cb0315bb1325ab3325ab43359b63458b73557b93556ba3655bc3754bd3853bf3952c03a51c13a50c33b4fc43c4ec63d4dc73e4cc83f4bca404acb4149cc4248ce4347cf4446d04545d24644d34743d44842d54a41d74b3fd84c3ed94d3dda4e3cdb503bdd513ade5238df5337e05536e15635e25734e35933e45a31e55c30e65d2fe75e2ee8602de9612bea632aeb6429eb6628ec6726ed6925ee6a24ef6c23ef6e21f06f20f1711ff1731df2741cf3761bf37819f47918f57b17f57d15f67e14f68013f78212f78410f8850ff8870ef8890cf98b0bf98c0af98e09fa9008fa9207fa9407fb9606fb9706fb9906fb9b06fb9d07fc9f07fca108fca309fca50afca60cfca80dfcaa0ffcac11fcae12fcb014fcb216fcb418fbb61afbb81dfbba1ffbbc21fbbe23fac026fac228fac42afac62df9c72ff9c932f9cb35f8cd37f8cf3af7d13df7d340f6d543f6d746f5d949f5db4cf4dd4ff4df53f4e156f3e35af3e55df2e661f2e865f2ea69f1ec6df1ed71f1ef75f1f179f2f27df2f482f3f586f3f68af4f88ef5f992f6fa96f8fb9af9fc9dfafda1fcffa4")),viridis_plasma=viridis_ramp(d3_scale_chromatic_src_colors("0d088710078813078916078a19068c1b068d1d068e20068f2206902406912605912805922a05932c05942e05952f059631059733059735049837049938049a3a049a3c049b3e049c3f049c41049d43039e44039e46039f48039f4903a04b03a14c02a14e02a25002a25102a35302a35502a45601a45801a45901a55b01a55c01a65e01a66001a66100a76300a76400a76600a76700a86900a86a00a86c00a86e00a86f00a87100a87201a87401a87501a87701a87801a87a02a87b02a87d03a87e03a88004a88104a78305a78405a78606a68707a68808a68a09a58b0aa58d0ba58e0ca48f0da4910ea3920fa39410a29511a19613a19814a099159f9a169f9c179e9d189d9e199da01a9ca11b9ba21d9aa31e9aa51f99a62098a72197a82296aa2395ab2494ac2694ad2793ae2892b02991b12a90b22b8fb32c8eb42e8db52f8cb6308bb7318ab83289ba3388bb3488bc3587bd3786be3885bf3984c03a83c13b82c23c81c33d80c43e7fc5407ec6417dc7427cc8437bc9447aca457acb4679cc4778cc4977cd4a76ce4b75cf4c74d04d73d14e72d24f71d35171d45270d5536fd5546ed6556dd7566cd8576bd9586ada5a6ada5b69db5c68dc5d67dd5e66de5f65de6164df6263e06363e16462e26561e26660e3685fe4695ee56a5de56b5de66c5ce76e5be76f5ae87059e97158e97257ea7457eb7556eb7655ec7754ed7953ed7a52ee7b51ef7c51ef7e50f07f4ff0804ef1814df1834cf2844bf3854bf3874af48849f48948f58b47f58c46f68d45f68f44f79044f79143f79342f89441f89540f9973ff9983ef99a3efa9b3dfa9c3cfa9e3bfb9f3afba139fba238fca338fca537fca636fca835fca934fdab33fdac33fdae32fdaf31fdb130fdb22ffdb42ffdb52efeb72dfeb82cfeba2cfebb2bfebd2afebe2afec029fdc229fdc328fdc527fdc627fdc827fdca26fdcb26fccd25fcce25fcd025fcd225fbd324fbd524fbd724fad824fada24f9dc24f9dd25f8df25f8e125f7e225f7e425f6e626f6e826f5e926f5eb27f4ed27f3ee27f3f027f2f227f1f426f1f525f0f724f0f921")),UNIT_GLOBAL_NAMESPACE="app.units",UNIT_LOCAL_NAMESPACE="local.units",LAYER_LOCAL_NAMESPACE="local.layers",LAYER_GLOBAL_NAMESPACE="app.layers",GROUP_GLOBAL_NAMESPACE="app.group",GROUP_LOCAL_NAMESPACE="local.group",CANVAS_LOCAL_NAMESPACE="local.canvas",CANVAS_GLOBAL_NAMESPACE="app.canvas",reserved_fields={ROW_ID:"__id__"},common_props={ACTION_INF:"actionInf",ON_LAYER_DRAW:"onLayerDraw",MATRIX_CREATED:"matrixCreated"},src_array_slice=Array.prototype.slice,d3_axis_src_identity=function(x){return x},axis_top=1,axis_right=2,axis_bottom=3,axis_left=4,epsilon=1e-6;function translateX(x){return"translate("+(x+.5)+",0)"}function translateY(y){return"translate(0,"+(y+.5)+")"}function entering(){return!this.__axis}function axis_axis(orient,scale){var tickArguments=[],tickValues=null,tickFormat=null,tickTransform=null,tickSizeInner=6,tickSizeOuter=6,tickPadding=3,k=orient===axis_top||orient===axis_left?-1:1,x=orient===axis_left||orient===axis_right?"x":"y",transform=orient===axis_top||orient===axis_bottom?translateX:translateY;function axis(context){var values=null==tickValues?scale.ticks?scale.ticks.apply(scale,tickArguments):scale.domain():tickValues,format=null==tickFormat?scale.tickFormat?scale.tickFormat.apply(scale,tickArguments):d3_axis_src_identity:tickFormat,spacing=Math.max(tickSizeInner,0)+tickPadding,range=scale.range(),range0=+range[0]+.5,range1=+range[range.length-1]+.5,position=(scale.bandwidth?function axis_center(scale){var offset=Math.max(0,scale.bandwidth()-1)/2;return scale.round()&&(offset=Math.round(offset)),function(d){return+scale(d)+offset}}:function axis_number(scale){return function(d){return+scale(d)}})(scale.copy()),selection=context.selection?context.selection():context,path=selection.selectAll(".domain").data([null]),tick=selection.selectAll(".tick").data(values,scale).order(),tickExit=tick.exit(),tickEnter=tick.enter().append("g").attr("class","tick"),line=tick.select("line"),text=tick.select("text");path=path.merge(path.enter().insert("path",".tick").attr("class","domain").attr("stroke","#000")),tick=tick.merge(tickEnter),line=line.merge(tickEnter.append("line").attr("stroke","#000").attr(x+"2",k*tickSizeInner)),text=text.merge(tickEnter.append("text").attr("fill","#000").attr(x,k*spacing).attr("dy",orient===axis_top?"0em":orient===axis_bottom?"0.71em":"0.32em")).style("transform",tickTransform),context!==selection&&(path=path.transition(context),tick=tick.transition(context),line=line.transition(context),text=text.transition(context),tickExit=tickExit.transition(context).attr("opacity",epsilon).attr("transform",function(d){return isFinite(d=position(d))?transform(d):this.getAttribute("transform")}),tickEnter.attr("opacity",epsilon).attr("transform",function(d){var p=this.parentNode.__axis;return transform(p&&isFinite(p=p(d))?p:position(d))})),tickExit.remove(),path.attr("d",orient===axis_left||orient==axis_right?"M"+k*tickSizeOuter+","+range0+"H0.5V"+range1+"H"+k*tickSizeOuter:"M"+range0+","+k*tickSizeOuter+"V0.5H"+range1+"V"+k*tickSizeOuter),tick.attr("opacity",1).attr("transform",function(d){return transform(position(d))}),line.attr(x+"2",k*tickSizeInner),text.attr(x,k*spacing).text(format),selection.filter(entering).attr("fill","none").attr("font-size",10).attr("font-family","sans-serif").attr("text-anchor",orient===axis_right?"start":orient===axis_left?"end":"middle"),selection.each(function(){this.__axis=position})}return axis.scale=function(_){return arguments.length?(scale=_,axis):scale},axis.tickTransform=function(_){return arguments.length?(tickTransform=_,axis):tickTransform},axis.ticks=function(){return tickArguments=src_array_slice.call(arguments),axis},axis.tickArguments=function(_){return arguments.length?(tickArguments=null==_?[]:src_array_slice.call(_),axis):tickArguments.slice()},axis.tickValues=function(_){return arguments.length?(tickValues=null==_?null:src_array_slice.call(_),axis):tickValues&&tickValues.slice()},axis.tickFormat=function(_){return arguments.length?(tickFormat=_,axis):tickFormat},axis.tickSize=function(_){return arguments.length?(tickSizeInner=tickSizeOuter=+_,axis):tickSizeInner},axis.tickSizeInner=function(_){return arguments.length?(tickSizeInner=+_,axis):tickSizeInner},axis.tickSizeOuter=function(_){return arguments.length?(tickSizeOuter=+_,axis):tickSizeOuter},axis.tickPadding=function(_){return arguments.length?(tickPadding=+_,axis):tickPadding},axis}var pi=Math.PI,tau=2*pi,tauEpsilon=tau-1e-6;function Path(){this._x0=this._y0=this._x1=this._y1=null,this._=""}function path_path(){return new Path}Path.prototype=path_path.prototype={constructor:Path,moveTo:function moveTo(x,y){this._+="M"+(this._x0=this._x1=+x)+","+(this._y0=this._y1=+y)},closePath:function closePath(){null!==this._x1&&(this._x1=this._x0,this._y1=this._y0,this._+="Z")},lineTo:function lineTo(x,y){this._+="L"+(this._x1=+x)+","+(this._y1=+y)},quadraticCurveTo:function quadraticCurveTo(x1,y1,x,y){this._+="Q"+ +x1+","+ +y1+","+(this._x1=+x)+","+(this._y1=+y)},bezierCurveTo:function bezierCurveTo(x1,y1,x2,y2,x,y){this._+="C"+ +x1+","+ +y1+","+ +x2+","+ +y2+","+(this._x1=+x)+","+(this._y1=+y)},arcTo:function arcTo(x1,y1,x2,y2,r){x1=+x1,y1=+y1,x2=+x2,y2=+y2,r=+r;var x0=this._x1,y0=this._y1,x21=x2-x1,y21=y2-y1,x01=x0-x1,y01=y0-y1,l01_2=x01*x01+y01*y01;if(r<0)throw new Error("negative radius: "+r);if(null===this._x1)this._+="M"+(this._x1=x1)+","+(this._y1=y1);else if(l01_2>1e-6)if(Math.abs(y01*x21-y21*x01)>1e-6&&r){var x20=x2-x0,y20=y2-y0,l21_2=x21*x21+y21*y21,l20_2=x20*x20+y20*y20,l21=Math.sqrt(l21_2),l01=Math.sqrt(l01_2),l=r*Math.tan((pi-Math.acos((l21_2+l01_2-l20_2)/(2*l21*l01)))/2),t01=l/l01,t21=l/l21;Math.abs(t01-1)>1e-6&&(this._+="L"+(x1+t01*x01)+","+(y1+t01*y01)),this._+="A"+r+","+r+",0,0,"+ +(y01*x20>x01*y20)+","+(this._x1=x1+t21*x21)+","+(this._y1=y1+t21*y21)}else this._+="L"+(this._x1=x1)+","+(this._y1=y1);else;},arc:function arc(x,y,r,a0,a1,ccw){x=+x,y=+y;var dx=(r=+r)*Math.cos(a0),dy=r*Math.sin(a0),x0=x+dx,y0=y+dy,cw=1^ccw,da=ccw?a0-a1:a1-a0;if(r<0)throw new Error("negative radius: "+r);null===this._x1?this._+="M"+x0+","+y0:(Math.abs(this._x1-x0)>1e-6||Math.abs(this._y1-y0)>1e-6)&&(this._+="L"+x0+","+y0),r&&(da<0&&(da=da%tau+tau),da>tauEpsilon?this._+="A"+r+","+r+",0,1,"+cw+","+(x-dx)+","+(y-dy)+"A"+r+","+r+",0,1,"+cw+","+(this._x1=x0)+","+(this._y1=y0):da>1e-6&&(this._+="A"+r+","+r+",0,"+ +(da>=pi)+","+cw+","+(this._x1=x+r*Math.cos(a1))+","+(this._y1=y+r*Math.sin(a1))))},rect:function rect(x,y,w,h){this._+="M"+(this._x0=this._x1=+x)+","+(this._y0=this._y1=+y)+"h"+ +w+"v"+ +h+"h"+-w+"Z"},toString:function toString(){return this._}};var src_path=path_path,d3_shape_src_constant=function(x){return function constant(){return x}},abs=Math.abs,atan2=Math.atan2,cos=Math.cos,math_max=Math.max,math_min=Math.min,sin=Math.sin,math_sqrt=Math.sqrt,math_epsilon=1e-12,math_pi=Math.PI,halfPi=math_pi/2,math_tau=2*math_pi;function asin(x){return x>=1?halfPi:x<=-1?-halfPi:Math.asin(x)}function arcInnerRadius(d){return d.innerRadius}function arcOuterRadius(d){return d.outerRadius}function arcStartAngle(d){return d.startAngle}function arcEndAngle(d){return d.endAngle}function arcPadAngle(d){return d&&d.padAngle}function cornerTangents(x0,y0,x1,y1,r1,rc,cw){var x01=x0-x1,y01=y0-y1,lo=(cw?rc:-rc)/math_sqrt(x01*x01+y01*y01),ox=lo*y01,oy=-lo*x01,x11=x0+ox,y11=y0+oy,x10=x1+ox,y10=y1+oy,x00=(x11+x10)/2,y00=(y11+y10)/2,dx=x10-x11,dy=y10-y11,d2=dx*dx+dy*dy,r=r1-rc,D=x11*y10-x10*y11,d=(dy<0?-1:1)*math_sqrt(math_max(0,r*r*d2-D*D)),cx0=(D*dy-dx*d)/d2,cy0=(-D*dx-dy*d)/d2,cx1=(D*dy+dx*d)/d2,cy1=(-D*dx+dy*d)/d2,dx0=cx0-x00,dy0=cy0-y00,dx1=cx1-x00,dy1=cy1-y00;return dx0*dx0+dy0*dy0>dx1*dx1+dy1*dy1&&(cx0=cx1,cy0=cy1),{cx:cx0,cy:cy0,x01:-ox,y01:-oy,x11:cx0*(r1/r-1),y11:cy0*(r1/r-1)}}function Linear(context){this._context=context}Linear.prototype={areaStart:function areaStart(){this._line=0},areaEnd:function areaEnd(){this._line=NaN},lineStart:function lineStart(){this._point=0},lineEnd:function lineEnd(){(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function point(x,y){switch(x=+x,y=+y,this._point){case 0:this._point=1,this._line?this._context.lineTo(x,y):this._context.moveTo(x,y);break;case 1:this._point=2;default:this._context.lineTo(x,y)}}};var curve_linear=function(context){return new Linear(context)};function point_x(p){return p[0]}function point_y(p){return p[1]}var src_line=function(){var x=point_x,y=point_y,defined=d3_shape_src_constant(!0),context=null,curve=curve_linear,output=null;function line(data){var i,d,buffer,n=data.length,defined0=!1;for(null==context&&(output=curve(buffer=src_path())),i=0;i<=n;++i)!(i=j;--k)output.point(x0z[k],y0z[k]);output.lineEnd(),output.areaEnd()}defined0&&(x0z[i]=+x0(d,i,data),y0z[i]=+y0(d,i,data),output.point(x1?+x1(d,i,data):x0z[i],y1?+y1(d,i,data):y0z[i]))}if(buffer)return output=null,buffer+""||null}function arealine(){return src_line().defined(defined).curve(curve).context(context)}return area.x=function(_){return arguments.length?(x0="function"==typeof _?_:d3_shape_src_constant(+_),x1=null,area):x0},area.x0=function(_){return arguments.length?(x0="function"==typeof _?_:d3_shape_src_constant(+_),area):x0},area.x1=function(_){return arguments.length?(x1=null==_?null:"function"==typeof _?_:d3_shape_src_constant(+_),area):x1},area.y=function(_){return arguments.length?(y0="function"==typeof _?_:d3_shape_src_constant(+_),y1=null,area):y0},area.y0=function(_){return arguments.length?(y0="function"==typeof _?_:d3_shape_src_constant(+_),area):y0},area.y1=function(_){return arguments.length?(y1=null==_?null:"function"==typeof _?_:d3_shape_src_constant(+_),area):y1},area.lineX0=area.lineY0=function(){return arealine().x(x0).y(y0)},area.lineY1=function(){return arealine().x(x0).y(y1)},area.lineX1=function(){return arealine().x(x1).y(y0)},area.defined=function(_){return arguments.length?(defined="function"==typeof _?_:d3_shape_src_constant(!!_),area):defined},area.curve=function(_){return arguments.length?(curve=_,null!=context&&(output=curve(context)),area):curve},area.context=function(_){return arguments.length?(null==_?context=output=null:output=curve(context=_),area):context},area},src_descending=function(a,b){return ba?1:b>=a?0:NaN},d3_shape_src_identity=function(d){return d};curveRadial(curve_linear);function Radial(curve){this._curve=curve}function curveRadial(curve){function radial(context){return new Radial(curve(context))}return radial._curve=curve,radial}Radial.prototype={areaStart:function areaStart(){this._curve.areaStart()},areaEnd:function areaEnd(){this._curve.areaEnd()},lineStart:function lineStart(){this._curve.lineStart()},lineEnd:function lineEnd(){this._curve.lineEnd()},point:function point(a,r){this._curve.point(r*Math.sin(a),r*-Math.cos(a))}};var d3_shape_src_array_slice=Array.prototype.slice;var symbol_circle={draw:function draw(context,size){var r=Math.sqrt(size/math_pi);context.moveTo(r,0),context.arc(0,0,r,0,math_tau)}},symbol_cross={draw:function draw(context,size){var r=Math.sqrt(size/5)/2;context.moveTo(-3*r,-r),context.lineTo(-r,-r),context.lineTo(-r,-3*r),context.lineTo(r,-3*r),context.lineTo(r,-r),context.lineTo(3*r,-r),context.lineTo(3*r,r),context.lineTo(r,r),context.lineTo(r,3*r),context.lineTo(-r,3*r),context.lineTo(-r,r),context.lineTo(-3*r,r),context.closePath()}},tan30=Math.sqrt(1/3),tan30_2=2*tan30,diamond={draw:function draw(context,size){var y=Math.sqrt(size/tan30_2),x=y*tan30;context.moveTo(0,-y),context.lineTo(x,0),context.lineTo(0,y),context.lineTo(-x,0),context.closePath()}},kr=Math.sin(math_pi/10)/Math.sin(7*math_pi/10),kx=Math.sin(math_tau/10)*kr,ky=-Math.cos(math_tau/10)*kr,star={draw:function draw(context,size){var r=Math.sqrt(.8908130915292852*size),x=kx*r,y=ky*r;context.moveTo(0,-r),context.lineTo(x,y);for(var i=1;i<5;++i){var a=math_tau*i/5,c=Math.cos(a),s=Math.sin(a);context.lineTo(s*r,-c*r),context.lineTo(c*x-s*y,s*x+c*y)}context.closePath()}},square={draw:function draw(context,size){var w=Math.sqrt(size),x=-w/2;context.rect(x,x,w,w)}},sqrt3=Math.sqrt(3),triangle={draw:function draw(context,size){var y=-Math.sqrt(size/(3*sqrt3));context.moveTo(0,2*y),context.lineTo(-sqrt3*y,-y),context.lineTo(sqrt3*y,-y),context.closePath()}},wye_s=Math.sqrt(3)/2,wye_k=1/Math.sqrt(12),wye_a=3*(wye_k/2+1),wye={draw:function draw(context,size){var r=Math.sqrt(size/wye_a),x0=r/2,y0=r*wye_k,x1=x0,y1=r*wye_k+r,x2=-x1,y2=y1;context.moveTo(x0,y0),context.lineTo(x1,y1),context.lineTo(x2,y2),context.lineTo(-.5*x0-wye_s*y0,wye_s*x0+-.5*y0),context.lineTo(-.5*x1-wye_s*y1,wye_s*x1+-.5*y1),context.lineTo(-.5*x2-wye_s*y2,wye_s*x2+-.5*y2),context.lineTo(-.5*x0+wye_s*y0,-.5*y0-wye_s*x0),context.lineTo(-.5*x1+wye_s*y1,-.5*y1-wye_s*x1),context.lineTo(-.5*x2+wye_s*y2,-.5*y2-wye_s*x2),context.closePath()}},noop=function(){};function _point(that,x,y){that._context.bezierCurveTo((2*that._x0+that._x1)/3,(2*that._y0+that._y1)/3,(that._x0+2*that._x1)/3,(that._y0+2*that._y1)/3,(that._x0+4*that._x1+x)/6,(that._y0+4*that._y1+y)/6)}function Basis(context){this._context=context}Basis.prototype={areaStart:function areaStart(){this._line=0},areaEnd:function areaEnd(){this._line=NaN},lineStart:function lineStart(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function lineEnd(){switch(this._point){case 3:_point(this,this._x1,this._y1);case 2:this._context.lineTo(this._x1,this._y1)}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function point(x,y){switch(x=+x,y=+y,this._point){case 0:this._point=1,this._line?this._context.lineTo(x,y):this._context.moveTo(x,y);break;case 1:this._point=2;break;case 2:this._point=3,this._context.lineTo((5*this._x0+this._x1)/6,(5*this._y0+this._y1)/6);default:_point(this,x,y)}this._x0=this._x1,this._x1=x,this._y0=this._y1,this._y1=y}};function BasisClosed(context){this._context=context}BasisClosed.prototype={areaStart:noop,areaEnd:noop,lineStart:function lineStart(){this._x0=this._x1=this._x2=this._x3=this._x4=this._y0=this._y1=this._y2=this._y3=this._y4=NaN,this._point=0},lineEnd:function lineEnd(){switch(this._point){case 1:this._context.moveTo(this._x2,this._y2),this._context.closePath();break;case 2:this._context.moveTo((this._x2+2*this._x3)/3,(this._y2+2*this._y3)/3),this._context.lineTo((this._x3+2*this._x2)/3,(this._y3+2*this._y2)/3),this._context.closePath();break;case 3:this.point(this._x2,this._y2),this.point(this._x3,this._y3),this.point(this._x4,this._y4)}},point:function point(x,y){switch(x=+x,y=+y,this._point){case 0:this._point=1,this._x2=x,this._y2=y;break;case 1:this._point=2,this._x3=x,this._y3=y;break;case 2:this._point=3,this._x4=x,this._y4=y,this._context.moveTo((this._x0+4*this._x1+x)/6,(this._y0+4*this._y1+y)/6);break;default:_point(this,x,y)}this._x0=this._x1,this._x1=x,this._y0=this._y1,this._y1=y}};function BasisOpen(context){this._context=context}BasisOpen.prototype={areaStart:function areaStart(){this._line=0},areaEnd:function areaEnd(){this._line=NaN},lineStart:function lineStart(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function lineEnd(){(this._line||0!==this._line&&3===this._point)&&this._context.closePath(),this._line=1-this._line},point:function point(x,y){switch(x=+x,y=+y,this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3;var x0=(this._x0+4*this._x1+x)/6,y0=(this._y0+4*this._y1+y)/6;this._line?this._context.lineTo(x0,y0):this._context.moveTo(x0,y0);break;case 3:this._point=4;default:_point(this,x,y)}this._x0=this._x1,this._x1=x,this._y0=this._y1,this._y1=y}};function Bundle(context,beta){this._basis=new Basis(context),this._beta=beta}Bundle.prototype={lineStart:function lineStart(){this._x=[],this._y=[],this._basis.lineStart()},lineEnd:function lineEnd(){var x=this._x,y=this._y,j=x.length-1;if(j>0)for(var t,x0=x[0],y0=y[0],dx=x[j]-x0,dy=y[j]-y0,i=-1;++i<=j;)t=i/j,this._basis.point(this._beta*x[i]+(1-this._beta)*(x0+t*dx),this._beta*y[i]+(1-this._beta)*(y0+t*dy));this._x=this._y=null,this._basis.lineEnd()},point:function point(x,y){this._x.push(+x),this._y.push(+y)}};(function custom(beta){function bundle(context){return 1===beta?new Basis(context):new Bundle(context,beta)}return bundle.beta=function(beta){return custom(+beta)},bundle})(.85);function cardinal_point(that,x,y){that._context.bezierCurveTo(that._x1+that._k*(that._x2-that._x0),that._y1+that._k*(that._y2-that._y0),that._x2+that._k*(that._x1-x),that._y2+that._k*(that._y1-y),that._x2,that._y2)}function Cardinal(context,tension){this._context=context,this._k=(1-tension)/6}Cardinal.prototype={areaStart:function areaStart(){this._line=0},areaEnd:function areaEnd(){this._line=NaN},lineStart:function lineStart(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._point=0},lineEnd:function lineEnd(){switch(this._point){case 2:this._context.lineTo(this._x2,this._y2);break;case 3:cardinal_point(this,this._x1,this._y1)}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function point(x,y){switch(x=+x,y=+y,this._point){case 0:this._point=1,this._line?this._context.lineTo(x,y):this._context.moveTo(x,y);break;case 1:this._point=2,this._x1=x,this._y1=y;break;case 2:this._point=3;default:cardinal_point(this,x,y)}this._x0=this._x1,this._x1=this._x2,this._x2=x,this._y0=this._y1,this._y1=this._y2,this._y2=y}};(function custom(tension){function cardinal(context){return new Cardinal(context,tension)}return cardinal.tension=function(tension){return custom(+tension)},cardinal})(0);function CardinalClosed(context,tension){this._context=context,this._k=(1-tension)/6}CardinalClosed.prototype={areaStart:noop,areaEnd:noop,lineStart:function lineStart(){this._x0=this._x1=this._x2=this._x3=this._x4=this._x5=this._y0=this._y1=this._y2=this._y3=this._y4=this._y5=NaN,this._point=0},lineEnd:function lineEnd(){switch(this._point){case 1:this._context.moveTo(this._x3,this._y3),this._context.closePath();break;case 2:this._context.lineTo(this._x3,this._y3),this._context.closePath();break;case 3:this.point(this._x3,this._y3),this.point(this._x4,this._y4),this.point(this._x5,this._y5)}},point:function point(x,y){switch(x=+x,y=+y,this._point){case 0:this._point=1,this._x3=x,this._y3=y;break;case 1:this._point=2,this._context.moveTo(this._x4=x,this._y4=y);break;case 2:this._point=3,this._x5=x,this._y5=y;break;default:cardinal_point(this,x,y)}this._x0=this._x1,this._x1=this._x2,this._x2=x,this._y0=this._y1,this._y1=this._y2,this._y2=y}};(function custom(tension){function cardinal(context){return new CardinalClosed(context,tension)}return cardinal.tension=function(tension){return custom(+tension)},cardinal})(0);function CardinalOpen(context,tension){this._context=context,this._k=(1-tension)/6}CardinalOpen.prototype={areaStart:function areaStart(){this._line=0},areaEnd:function areaEnd(){this._line=NaN},lineStart:function lineStart(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._point=0},lineEnd:function lineEnd(){(this._line||0!==this._line&&3===this._point)&&this._context.closePath(),this._line=1-this._line},point:function point(x,y){switch(x=+x,y=+y,this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3,this._line?this._context.lineTo(this._x2,this._y2):this._context.moveTo(this._x2,this._y2);break;case 3:this._point=4;default:cardinal_point(this,x,y)}this._x0=this._x1,this._x1=this._x2,this._x2=x,this._y0=this._y1,this._y1=this._y2,this._y2=y}};(function custom(tension){function cardinal(context){return new CardinalOpen(context,tension)}return cardinal.tension=function(tension){return custom(+tension)},cardinal})(0);function catmullRom_point(that,x,y){var x1=that._x1,y1=that._y1,x2=that._x2,y2=that._y2;if(that._l01_a>math_epsilon){var a=2*that._l01_2a+3*that._l01_a*that._l12_a+that._l12_2a,n=3*that._l01_a*(that._l01_a+that._l12_a);x1=(x1*a-that._x0*that._l12_2a+that._x2*that._l01_2a)/n,y1=(y1*a-that._y0*that._l12_2a+that._y2*that._l01_2a)/n}if(that._l23_a>math_epsilon){var b=2*that._l23_2a+3*that._l23_a*that._l12_a+that._l12_2a,m=3*that._l23_a*(that._l23_a+that._l12_a);x2=(x2*b+that._x1*that._l23_2a-x*that._l12_2a)/m,y2=(y2*b+that._y1*that._l23_2a-y*that._l12_2a)/m}that._context.bezierCurveTo(x1,y1,x2,y2,that._x2,that._y2)}function CatmullRom(context,alpha){this._context=context,this._alpha=alpha}CatmullRom.prototype={areaStart:function areaStart(){this._line=0},areaEnd:function areaEnd(){this._line=NaN},lineStart:function lineStart(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function lineEnd(){switch(this._point){case 2:this._context.lineTo(this._x2,this._y2);break;case 3:this.point(this._x2,this._y2)}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function point(x,y){if(x=+x,y=+y,this._point){var x23=this._x2-x,y23=this._y2-y;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(x23*x23+y23*y23,this._alpha))}switch(this._point){case 0:this._point=1,this._line?this._context.lineTo(x,y):this._context.moveTo(x,y);break;case 1:this._point=2;break;case 2:this._point=3;default:catmullRom_point(this,x,y)}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=x,this._y0=this._y1,this._y1=this._y2,this._y2=y}};var curve_catmullRom=function custom(alpha){function catmullRom(context){return alpha?new CatmullRom(context,alpha):new Cardinal(context,0)}return catmullRom.alpha=function(alpha){return custom(+alpha)},catmullRom}(.5);function CatmullRomClosed(context,alpha){this._context=context,this._alpha=alpha}CatmullRomClosed.prototype={areaStart:noop,areaEnd:noop,lineStart:function lineStart(){this._x0=this._x1=this._x2=this._x3=this._x4=this._x5=this._y0=this._y1=this._y2=this._y3=this._y4=this._y5=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function lineEnd(){switch(this._point){case 1:this._context.moveTo(this._x3,this._y3),this._context.closePath();break;case 2:this._context.lineTo(this._x3,this._y3),this._context.closePath();break;case 3:this.point(this._x3,this._y3),this.point(this._x4,this._y4),this.point(this._x5,this._y5)}},point:function point(x,y){if(x=+x,y=+y,this._point){var x23=this._x2-x,y23=this._y2-y;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(x23*x23+y23*y23,this._alpha))}switch(this._point){case 0:this._point=1,this._x3=x,this._y3=y;break;case 1:this._point=2,this._context.moveTo(this._x4=x,this._y4=y);break;case 2:this._point=3,this._x5=x,this._y5=y;break;default:catmullRom_point(this,x,y)}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=x,this._y0=this._y1,this._y1=this._y2,this._y2=y}};(function custom(alpha){function catmullRom(context){return alpha?new CatmullRomClosed(context,alpha):new CardinalClosed(context,0)}return catmullRom.alpha=function(alpha){return custom(+alpha)},catmullRom})(.5);function CatmullRomOpen(context,alpha){this._context=context,this._alpha=alpha}CatmullRomOpen.prototype={areaStart:function areaStart(){this._line=0},areaEnd:function areaEnd(){this._line=NaN},lineStart:function lineStart(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function lineEnd(){(this._line||0!==this._line&&3===this._point)&&this._context.closePath(),this._line=1-this._line},point:function point(x,y){if(x=+x,y=+y,this._point){var x23=this._x2-x,y23=this._y2-y;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(x23*x23+y23*y23,this._alpha))}switch(this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3,this._line?this._context.lineTo(this._x2,this._y2):this._context.moveTo(this._x2,this._y2);break;case 3:this._point=4;default:catmullRom_point(this,x,y)}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=x,this._y0=this._y1,this._y1=this._y2,this._y2=y}};(function custom(alpha){function catmullRom(context){return alpha?new CatmullRomOpen(context,alpha):new CardinalOpen(context,0)}return catmullRom.alpha=function(alpha){return custom(+alpha)},catmullRom})(.5);function LinearClosed(context){this._context=context}LinearClosed.prototype={areaStart:noop,areaEnd:noop,lineStart:function lineStart(){this._point=0},lineEnd:function lineEnd(){this._point&&this._context.closePath()},point:function point(x,y){x=+x,y=+y,this._point?this._context.lineTo(x,y):(this._point=1,this._context.moveTo(x,y))}};function monotone_sign(x){return x<0?-1:1}function slope3(that,x2,y2){var h0=that._x1-that._x0,h1=x2-that._x1,s0=(that._y1-that._y0)/(h0||h1<0&&-0),s1=(y2-that._y1)/(h1||h0<0&&-0),p=(s0*h1+s1*h0)/(h0+h1);return(monotone_sign(s0)+monotone_sign(s1))*Math.min(Math.abs(s0),Math.abs(s1),.5*Math.abs(p))||0}function slope2(that,t){var h=that._x1-that._x0;return h?(3*(that._y1-that._y0)/h-t)/2:t}function monotone_point(that,t0,t1){var x0=that._x0,y0=that._y0,x1=that._x1,y1=that._y1,dx=(x1-x0)/3;that._context.bezierCurveTo(x0+dx,y0+dx*t0,x1-dx,y1-dx*t1,x1,y1)}function MonotoneX(context){this._context=context}function MonotoneY(context){this._context=new ReflectContext(context)}function ReflectContext(context){this._context=context}function Natural(context){this._context=context}function controlPoints(x){var i,m,n=x.length-1,a=new Array(n),b=new Array(n),r=new Array(n);for(a[0]=0,b[0]=2,r[0]=x[0]+2*x[1],i=1;i=0;--i)a[i]=(r[i]-a[i+1])/b[i];for(b[n-1]=(x[n]+a[n-1])/2,i=0;i=0&&(this._t=1-this._t,this._line=1-this._line)},point:function point(x,y){switch(x=+x,y=+y,this._point){case 0:this._point=1,this._line?this._context.lineTo(x,y):this._context.moveTo(x,y);break;case 1:this._point=2;default:if(this._t<=0)this._context.lineTo(this._x,y),this._context.lineTo(x,y);else{var x1=this._x*(1-this._t)+x*this._t;this._context.lineTo(x1,this._y),this._context.lineTo(x1,y)}}this._x=x,this._y=y}};var curve_step=function(context){return new Step(context,.5)};function stepBefore(context){return new Step(context,0)}function stepAfter(context){return new Step(context,1)}var none=function(series,order){if((n=series.length)>1)for(var j,s0,n,i=1,s1=series[order[0]],m=s1.length;i=0;)o[n]=n;return o};function stackValue(d,key){return d[key]}var order_ascending=function(series){var sums=series.map(ascending_sum);return order_none(series).sort(function(a,b){return sums[a]-sums[b]})};function ascending_sum(series){for(var v,s=0,i=-1,n=series.length;++i0)){if(r/=dx,dx<0){if(r0){if(r>t1)return;r>t0&&(t0=r)}if(r=x1-ax,dx||!(r<0)){if(r/=dx,dx<0){if(r>t1)return;r>t0&&(t0=r)}else if(dx>0){if(r0)){if(r/=dy,dy<0){if(r0){if(r>t1)return;r>t0&&(t0=r)}if(r=y1-ay,dy||!(r<0)){if(r/=dy,dy<0){if(r>t1)return;r>t0&&(t0=r)}else if(dy>0){if(r0||t1<1)||(t0>0&&(edge[0]=[ax+t0*dx,ay+t0*dy]),t1<1&&(edge[1]=[ax+t1*dx,ay+t1*dy]),!0)}}}}}function connectEdge(edge,x0,y0,x1,y1){var v1=edge[1];if(v1)return!0;var fm,fb,v0=edge[0],left=edge.left,right=edge.right,lx=left[0],ly=left[1],rx=right[0],ry=right[1],fx=(lx+rx)/2,fy=(ly+ry)/2;if(ry===ly){if(fx=x1)return;if(lx>rx){if(v0){if(v0[1]>=y1)return}else v0=[fx,y0];v1=[fx,y1]}else{if(v0){if(v0[1]1)if(lx>rx){if(v0){if(v0[1]>=y1)return}else v0=[(y0-fb)/fm,y0];v1=[(y1-fb)/fm,y1]}else{if(v0){if(v0[1]=x1)return}else v0=[x0,fm*x0+fb];v1=[x1,fm*x1+fb]}else{if(v0){if(v0[0]=-Diagram_epsilon2)){var ha=ax*ax+ay*ay,hc=cx*cx+cy*cy,x=(cy*ha-ay*hc)/d,y=(ax*hc-cx*ha)/d,circle=circlePool.pop()||new function Circle(){RedBlackNode(this),this.x=this.y=this.arc=this.site=this.cy=null};circle.arc=arc,circle.site=cSite,circle.x=x+bx,circle.y=(circle.cy=y+by)+Math.sqrt(x*x+y*y),arc.circle=circle;for(var before=null,node=circles._;node;)if(circle.yDiagram_epsilon)node=node.L;else{if(!((dxr=x-rightBreakPoint(node,directrix))>Diagram_epsilon)){dxl>-Diagram_epsilon?(lArc=node.P,rArc=node):dxr>-Diagram_epsilon?(lArc=node,rArc=node.N):lArc=rArc=node;break}if(!node.R){lArc=node;break}node=node.R}!function createCell(site){return Diagram_cells[site.index]={site:site,halfedges:[]}}(site);var newArc=createBeach(site);if(beaches.insert(lArc,newArc),lArc||rArc){if(lArc===rArc)return detachCircle(lArc),rArc=createBeach(lArc.site),beaches.insert(newArc,rArc),newArc.edge=rArc.edge=createEdge(lArc.site,newArc.site),attachCircle(lArc),void attachCircle(rArc);if(rArc){detachCircle(lArc),detachCircle(rArc);var lSite=lArc.site,ax=lSite[0],ay=lSite[1],bx=site[0]-ax,by=site[1]-ay,rSite=rArc.site,cx=rSite[0]-ax,cy=rSite[1]-ay,d=2*(bx*cy-by*cx),hb=bx*bx+by*by,hc=cx*cx+cy*cy,vertex=[(cy*hb-by*hc)/d+ax,(bx*hc-cx*hb)/d+ay];setEdgeEnd(rArc.edge,lSite,rSite,vertex),newArc.edge=createEdge(lSite,site,null,vertex),rArc.edge=createEdge(site,rSite,null,vertex),attachCircle(lArc),attachCircle(rArc)}else newArc.edge=createEdge(lArc.site,newArc.site)}}function leftBreakPoint(arc,directrix){var site=arc.site,rfocx=site[0],rfocy=site[1],pby2=rfocy-directrix;if(!pby2)return rfocx;var lArc=arc.P;if(!lArc)return-1/0;var lfocx=(site=lArc.site)[0],lfocy=site[1],plby2=lfocy-directrix;if(!plby2)return lfocx;var hl=lfocx-rfocx,aby2=1/pby2-1/plby2,b=hl/plby2;return aby2?(-b+Math.sqrt(b*b-2*aby2*(hl*hl/(-2*plby2)-lfocy+plby2/2+rfocy-pby2/2)))/aby2+rfocx:(rfocx+lfocx)/2}function rightBreakPoint(arc,directrix){var rArc=arc.N;if(rArc)return leftBreakPoint(rArc,directrix);var site=arc.site;return site[1]===directrix?site[0]:1/0}var beaches,Diagram_cells,circles,Diagram_edges,Diagram_epsilon=1e-6,Diagram_epsilon2=1e-12;function triangleArea(a,b,c){return(a[0]-c[0])*(b[1]-a[1])-(a[0]-b[0])*(c[1]-a[1])}function lexicographic(a,b){return b[1]-a[1]||b[0]-a[0]}function Diagram(sites,extent){var x,y,circle,site=sites.sort(lexicographic).pop();for(Diagram_edges=[],Diagram_cells=new Array(sites.length),beaches=new src_RedBlackTree,circles=new src_RedBlackTree;;)if(circle=firstCircle,site&&(!circle||site[1]Diagram_epsilon||Math.abs(edge[0][1]-edge[1][1])>Diagram_epsilon)||delete Diagram_edges[i]}(x0,y0,x1,y1),function clipCells(x0,y0,x1,y1){var iCell,cell,site,iHalfedge,halfedges,nHalfedges,start,startX,startY,end,endX,endY,nCells=Diagram_cells.length,cover=!0;for(iCell=0;iCellDiagram_epsilon||Math.abs(endY-startY)>Diagram_epsilon)&&(halfedges.splice(iHalfedge,0,Diagram_edges.push(createBorderEdge(site,end,Math.abs(endX-x0)Diagram_epsilon?[x0,Math.abs(startX-x0)Diagram_epsilon?[Math.abs(startY-y1)Diagram_epsilon?[x1,Math.abs(startX-x1)Diagram_epsilon?[Math.abs(startY-y0)=n)return null;var dx=x-cell.site[0],dy=y-cell.site[1],d2=dx*dx+dy*dy;do{cell=that.cells[i0=i1],i1=null,cell.halfedges.forEach(function(e){var edge=that.edges[e],v=edge.left;if(v!==cell.site&&v||(v=edge.right)){var vx=x-v[0],vy=y-v[1],v2=vx*vx+vy*vy;v2this._data.length)for(var i=this._data.length;ivalue?0===high?high:"left"===side?high-1:high:high===arr.length-1?high:"left"===side?high:high+1},getNearestValue=function getNearestValue(data,key){var filterData=data.filter(function(d){return"number"==typeof d});return filterData[common_utils_getClosestIndexOf(filterData,key)]},getWindow=function getWindow(){return window},getQualifiedClassName=(requestAnimationFrame,cancelAnimationFrame,function getQualifiedClassName(cls,id,prefix){return cls=cls.replace(/^\.*/,""),["".concat(prefix,"-").concat(cls),"".concat(prefix,"-").concat(cls,"-").concat(id)]}),defaultValue=function defaultValue(param,value){return void 0===param||"object"===common_utils_typeof(param)&&!param?value:param},getDependencyOrder=function getDependencyOrder(graph){for(var dependencyOrder=[],visited={},keys=Object.keys(graph),visit=function visit(name){if(dependencyOrder.length===keys.length)return!0;visited[name]=!0;for(var edges=graph[name],e=0;e0&&void 0!==arguments[0]?arguments[0]:[];common_utils_classCallCheck(this,Voronoi),this._voronoi=src_voronoi().x(function(d){return d.x}).y(function(d){return d.y}),this.data(data)}return common_utils_createClass(Voronoi,[{key:"data",value:function data(_data){return _data&&(this._voronoiFn=this._voronoi(_data)),this}},{key:"find",value:function find(x,y,radius){return this._voronoiFn.find(x,y,radius)}}]),Voronoi}(),addListenerToNamespace=function addListenerToNamespace(namespaceInf,fn,context){var key=namespaceInf.key,namespace=namespaceInf.namespace;namespace?(!context._listeners[namespace]&&(context._listeners[namespace]=[]),key||(key=Object.keys(context._listeners[namespace]).length),context._listeners[namespace][key]=fn):(key=Object.keys(context._listeners).length,context._listeners[key]=fn)},getObjProp=function getObjProp(obj){if(void 0===obj||null===obj)return obj;for(var retObj=obj,_len=arguments.length,fields=new Array(_len>1?_len-1:0),_key=1;_key<_len;_key++)fields[_key-1]=arguments[_key];for(var i=0,len=fields.length;i3&&void 0!==arguments[3]?arguments[3]:{},props=propNames;Array.isArray(propNames)||(props=[propNames]);var fn=this.model.next(props,callBack,instantCall);return addListenerToNamespace(namespaceInf,fn,this),this}},{key:"registerImmediateListener",value:function registerImmediateListener(propNames,callBack,instantCall){var namespaceInf=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},props=propNames;Array.isArray(propNames)||(props=[propNames]);var fn=this.model.on(props,callBack,instantCall);return addListenerToNamespace(namespaceInf,fn,this),this}},{key:"get",value:function get(propName){return this.model.prop(propName)}},{key:"computed",value:function computed(propName,callBack){return this.model.calculatedProp(propName,callBack)}},{key:"append",value:function append(propName,value){return this.model.append(propName,value),this}},{key:"unsubscribeAll",value:function unsubscribeAll(){return Object.values(this._listeners).forEach(function(fn){return fn()}),this}},{key:"unsubscribe",value:function unsubscribe(){var namespaceInf=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},namespace=namespaceInf.namespace,key=namespaceInf.key,listeners=this._listeners[namespace];if(key){var fn=getObjProp(listeners,key);fn&&fn()}else Object.values(listeners).forEach(function(fn){return fn()}),this._listeners[namespace]=[];return this}}]),Store}(),intSanitizer=function intSanitizer(val){var arr=val.toString().match(/(\d+)(px)*/g);return arr?parseInt(arr[0],10):null},common_utils_transactor=function transactor(holder,options,model){var conf,namespaceInf=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},store=model&&model instanceof hyperdis_default.a?model:hyperdis_default.a.create({}),stateProps={};for(var prop in options)if({}.hasOwnProperty.call(options,prop)){var addAsMethod=!(conf=options[prop]).meta||conf.meta.addAsMethod,nameSpaceProp=void 0,namespace=namespaceInf.namespace;nameSpaceProp=namespace?"".concat(namespace,".").concat(prop):prop,store.prop("".concat(nameSpaceProp))||(stateProps[prop]=conf.value),!1!==addAsMethod&&(holder[prop]=function(context,meta,nsProp){return function(){for(var val,compareTo,_len2=arguments.length,params=new Array(_len2),_key2=0;_key2<_len2;_key2++)params[_key2]=arguments[_key2];var paramsLen=params.length,prevVal=store.prop(nsProp);if(paramsLen){var spreadParams=meta&&meta.spreadParams;val=params;var values=[];if(meta){for(var i=0;i=0;i--)if(arr1[i]!==arr2[i])return!1;return!0}(oldVal,newVal):"Object"===type?Object.is(oldVal,newVal):oldVal===newVal}},ERROR_MSG={INTERFACE_IMPL:"Method not implemented"},mergeRecursive=function mergeRecursive(source,sink){for(var prop in sink)isSimpleObject(source[prop])&&isSimpleObject(sink[prop])?mergeRecursive(source[prop],sink[prop]):sink[prop]instanceof Object&&sink[prop].constructor===Object?(source[prop]={},mergeRecursive(source[prop],sink[prop])):source[prop]=sink[prop];return source},common_utils_createSelection=function createSelection(sel,appendObj,data,idFn){var selection=sel||function dataSelect(){var data=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];return new DataSystem_selection(data)}([]),mergedSelection=(selection=selection.data(data,idFn)).enter().append(appendObj).merge(selection);return selection.exit()&&selection.exit().remove(),mergedSelection},common_utils_interpolator=function interpolator(){return src_value},common_utils_numberInterpolator=function numberInterpolator(){return src_number},common_utils_piecewiseInterpolator=function piecewiseInterpolator(){return piecewise_piecewise};var rgbToHsv=function rgbToHsv(r,g,b){var a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:1;r=+r,g=+g,b=+b,a=+a,r/=255,g/=255,b/=255;var h,s,max=Math.max(r,g,b),min=Math.min(r,g,b),l=(max+min)/2;if(max===min)h=s=0;else{var d=max-min;switch(s=l>.5?d/(2-max-min):d/(max+min),max){case r:h=(g-b)/d+(g=range[0]&&val<=range[1]})},{saveChild:!1,mode:mode})},common_utils_getDataModelFromIdentifiers=function getDataModelFromIdentifiers(dataModel,identifiers,mode){var filteredDataModel;if(identifiers instanceof Array){var fieldsConfig=dataModel.getFieldsConfig(),dataArr=identifiers.slice(1,identifiers.length);if(identifiers instanceof Function)filteredDataModel=identifiers(dataModel,{},!1);else if(identifiers instanceof Array&&identifiers[0].length){var filteredSchema=identifiers[0].filter(function(d){return d in fieldsConfig});filteredDataModel=dataModel.select(function(fields){var include=!0;return filteredSchema.forEach(function(propField,idx){var value=fields[propField].valueOf(),index=dataArr.findIndex(function(d){return d[idx]===value});include=include&&-1!==index}),include},{saveChild:!1,mode:mode})}}else filteredDataModel=getDataModelFromRange(dataModel,identifiers,mode);return filteredDataModel},common_utils_registerListeners=function registerListeners(context,listenerMap){for(var _len3=arguments.length,params=new Array(_len3>2?_len3-2:0),_key3=2;_key3<_len3;_key3++)params[_key3-2]=arguments[_key3];var propListenerMap=listenerMap.apply(void 0,[context].concat(params));for(var key in propListenerMap)if({}.hasOwnProperty.call(propListenerMap,key)){var namespace=params[0],ns=null;namespace&&(ns=namespace.local);var mapObj=propListenerMap[key],propType=mapObj.type,props=mapObj.props,listenerFn=mapObj.listener;context.store()[propType](props,listenerFn,!1,{namespace:ns})}},isValidValue=function isValidValue(value){return!isNaN(value)&&value!==-1/0&&value!==1/0},toArray=function toArray(arr){return arr instanceof Array?arr:[arr]},common_utils_getSymbol=function getSymbol(type){return function(){var type=d3_shape_src_constant(symbol_circle),size=d3_shape_src_constant(64),context=null;function symbol(){var buffer;if(context||(context=buffer=src_path()),type.apply(this,arguments).draw(context,+size.apply(this,arguments)),buffer)return context=null,buffer+""||null}return symbol.type=function(_){return arguments.length?(type="function"==typeof _?_:d3_shape_src_constant(_),symbol):type},symbol.size=function(_){return arguments.length?(size="function"==typeof _?_:d3_shape_src_constant(+_),symbol):size},symbol.context=function(_){return arguments.length?(context=null==_?null:_,symbol):context},symbol}().type(symbolFns[type])},stackOrders=(_defineProperty(_stackOrders={},"none",order_none),_defineProperty(_stackOrders,"ascending",order_ascending),_defineProperty(_stackOrders,"descending",function(series){return order_ascending(series).reverse()}),_stackOrders),stackOffsets=(_defineProperty(_stackOffsets={},"diverging",function(series,order){if((n=series.length)>1)for(var i,d,dy,yp,yn,n,j=0,m=series[order[0]].length;j=0?(d[0]=yp,d[1]=yp+=dy):dy<0?(d[1]=yn,d[0]=yn+=dy):d[0]=yp}),_defineProperty(_stackOffsets,"none",none),_defineProperty(_stackOffsets,"expand",function(series,order){if((n=series.length)>0){for(var i,n,y,j=0,m=series[0].length;j0&&(m=(s0=series[order[0]]).length)>0){for(var s0,m,n,y=0,j=1;j0&&(sum+=v);for(null!=sortValues?index.sort(function(i,j){return sortValues(arcs[i],arcs[j])}):null!=sort&&index.sort(function(i,j){return sort(data[i],data[j])}),i=0,k=sum?(da-n*pa)/sum:0;i0?v*k:0)+pa,arcs[j]={data:data[j],index:i,value:v,startAngle:a0,endAngle:a1,padAngle:p};return arcs}return pie.value=function(_){return arguments.length?(value="function"==typeof _?_:d3_shape_src_constant(+_),pie):value},pie.sortValues=function(_){return arguments.length?(sortValues=_,sort=null,pie):sortValues},pie.sort=function(_){return arguments.length?(sort=_,sortValues=null,pie):sort},pie.startAngle=function(_){return arguments.length?(startAngle="function"==typeof _?_:d3_shape_src_constant(+_),pie):startAngle},pie.endAngle=function(_){return arguments.length?(endAngle="function"==typeof _?_:d3_shape_src_constant(+_),pie):endAngle},pie.padAngle=function(_){return arguments.length?(padAngle="function"==typeof _?_:d3_shape_src_constant(+_),pie):padAngle},pie},arc:function(){var innerRadius=arcInnerRadius,outerRadius=arcOuterRadius,cornerRadius=d3_shape_src_constant(0),padRadius=null,startAngle=arcStartAngle,endAngle=arcEndAngle,padAngle=arcPadAngle,context=null;function arc(){var buffer,r,r0=+innerRadius.apply(this,arguments),r1=+outerRadius.apply(this,arguments),a0=startAngle.apply(this,arguments)-halfPi,a1=endAngle.apply(this,arguments)-halfPi,da=abs(a1-a0),cw=a1>a0;if(context||(context=buffer=src_path()),r1math_epsilon)if(da>math_tau-math_epsilon)context.moveTo(r1*cos(a0),r1*sin(a0)),context.arc(0,0,r1,a0,a1,!cw),r0>math_epsilon&&(context.moveTo(r0*cos(a1),r0*sin(a1)),context.arc(0,0,r0,a1,a0,cw));else{var t0,t1,a01=a0,a11=a1,a00=a0,a10=a1,da0=da,da1=da,ap=padAngle.apply(this,arguments)/2,rp=ap>math_epsilon&&(padRadius?+padRadius.apply(this,arguments):math_sqrt(r0*r0+r1*r1)),rc=math_min(abs(r1-r0)/2,+cornerRadius.apply(this,arguments)),rc0=rc,rc1=rc;if(rp>math_epsilon){var p0=asin(rp/r0*sin(ap)),p1=asin(rp/r1*sin(ap));(da0-=2*p0)>math_epsilon?(a00+=p0*=cw?1:-1,a10-=p0):(da0=0,a00=a10=(a0+a1)/2),(da1-=2*p1)>math_epsilon?(a01+=p1*=cw?1:-1,a11-=p1):(da1=0,a01=a11=(a0+a1)/2)}var x01=r1*cos(a01),y01=r1*sin(a01),x10=r0*cos(a10),y10=r0*sin(a10);if(rc>math_epsilon){var oc,x11=r1*cos(a11),y11=r1*sin(a11),x00=r0*cos(a00),y00=r0*sin(a00);if(da<=math_tau-math_epsilon&&(oc=function intersect(x0,y0,x1,y1,x2,y2,x3,y3){var x10=x1-x0,y10=y1-y0,x32=x3-x2,y32=y3-y2,t=y32*x10-x32*y10;if(!(t*t1?0:x<-1?math_pi:Math.acos(x)}((ax*bx+ay*by)/(math_sqrt(ax*ax+ay*ay)*math_sqrt(bx*bx+by*by)))/2),lc=math_sqrt(oc[0]*oc[0]+oc[1]*oc[1]);rc0=math_min(rc,(r0-lc)/(kc-1)),rc1=math_min(rc,(r1-lc)/(kc+1))}}da1>math_epsilon?rc1>math_epsilon?(t0=cornerTangents(x00,y00,x01,y01,r1,rc1,cw),t1=cornerTangents(x11,y11,x10,y10,r1,rc1,cw),context.moveTo(t0.cx+t0.x01,t0.cy+t0.y01),rc1math_epsilon&&da0>math_epsilon?rc0>math_epsilon?(t0=cornerTangents(x10,y10,x11,y11,r0,-rc0,cw),t1=cornerTangents(x01,y01,x00,y00,r0,-rc0,cw),context.lineTo(t0.cx+t0.x01,t0.cy+t0.y01),rc01?_len4-1:0),_key4=1;_key4<_len4;_key4++)measureFieldNames[_key4-1]=arguments[_key4];return measureFieldNames.forEach(function(measureName){if(nearestReducers[measureName])filteredReducers[measureName]=nearestReducers[measureName];else{var measureField=measures[measureName];measureField&&(filteredReducers[measureName]=measureField.defAggFn())}}),filteredReducers},xhtml="http://www.w3.org/1999/xhtml",src_namespaces={svg:"http://www.w3.org/2000/svg",xhtml:xhtml,xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace",xmlns:"http://www.w3.org/2000/xmlns/"},src_namespace=function(name){var prefix=name+="",i=prefix.indexOf(":");return i>=0&&"xmlns"!==(prefix=name.slice(0,i))&&(name=name.slice(i+1)),src_namespaces.hasOwnProperty(prefix)?{space:src_namespaces[prefix],local:name}:name};var creator=function(name){var fullname=src_namespace(name);return(fullname.local?function creatorFixed(fullname){return function(){return this.ownerDocument.createElementNS(fullname.space,fullname.local)}}:function creatorInherit(name){return function(){var document=this.ownerDocument,uri=this.namespaceURI;return uri===xhtml&&document.documentElement.namespaceURI===xhtml?document.createElement(name):document.createElementNS(uri,name)}})(fullname)};function selector_none(){}var src_selector=function(selector){return null==selector?selector_none:function(){return this.querySelector(selector)}};function selectorAll_empty(){return[]}var selectorAll=function(selector){return null==selector?selectorAll_empty:function(){return this.querySelectorAll(selector)}},matcher=function(selector){return function(){return this.matches(selector)}},sparse=function(update){return new Array(update.length)};function EnterNode(parent,datum){this.ownerDocument=parent.ownerDocument,this.namespaceURI=parent.namespaceURI,this._next=null,this._parent=parent,this.__data__=datum}EnterNode.prototype={constructor:EnterNode,appendChild:function appendChild(child){return this._parent.insertBefore(child,this._next)},insertBefore:function insertBefore(child,next){return this._parent.insertBefore(child,next)},querySelector:function querySelector(selector){return this._parent.querySelector(selector)},querySelectorAll:function querySelectorAll(selector){return this._parent.querySelectorAll(selector)}};var keyPrefix="$";function bindIndex(parent,group,enter,update,exit,data){for(var node,i=0,groupLength=group.length,dataLength=data.length;ib?1:a>=b?0:NaN}var src_window=function(node){return node.ownerDocument&&node.ownerDocument.defaultView||node.document&&node||node.defaultView};function styleValue(node,name){return node.style.getPropertyValue(name)||src_window(node).getComputedStyle(node,null).getPropertyValue(name)}function classArray(string){return string.trim().split(/^|\s+/)}function classList(node){return node.classList||new ClassList(node)}function ClassList(node){this._node=node,this._names=classArray(node.getAttribute("class")||"")}function classedAdd(node,names){for(var list=classList(node),i=-1,n=names.length;++i=0&&(this._names.splice(i,1),this._node.setAttribute("class",this._names.join(" ")))},contains:function contains(name){return this._names.indexOf(name)>=0}};function textRemove(){this.textContent=""}function htmlRemove(){this.innerHTML=""}function raise_raise(){this.nextSibling&&this.parentNode.appendChild(this)}function lower(){this.previousSibling&&this.parentNode.insertBefore(this,this.parentNode.firstChild)}function constantNull(){return null}function remove_remove(){var parent=this.parentNode;parent&&parent.removeChild(this)}function selection_cloneShallow(){return this.parentNode.insertBefore(this.cloneNode(!1),this.nextSibling)}function selection_cloneDeep(){return this.parentNode.insertBefore(this.cloneNode(!0),this.nextSibling)}var filterEvents={},on_event=null;"undefined"!=typeof document&&("onmouseenter"in document.documentElement||(filterEvents={mouseenter:"mouseover",mouseleave:"mouseout"}));function filterContextListener(listener,index,group){return listener=contextListener(listener,index,group),function(event){var related=event.relatedTarget;related&&(related===this||8&related.compareDocumentPosition(this))||listener.call(this,event)}}function contextListener(listener,index,group){return function(event1){var event0=on_event;on_event=event1;try{listener.call(this,this.__data__,index,group)}finally{on_event=event0}}}function onRemove(typename){return function(){var on=this.__on;if(on){for(var o,j=0,i=-1,m=on.length;j=i1&&(i1=i0+1);!(next=updateGroup[i1])&&++i1=0;)(node=group[i])&&(next&&4^node.compareDocumentPosition(next)&&next.parentNode.insertBefore(node,next),next=node);return this},sort:function(compare){function compareNode(a,b){return a&&b?compare(a.__data__,b.__data__):!a-!b}compare||(compare=sort_ascending);for(var groups=this._groups,m=groups.length,sortgroups=new Array(m),j=0;j1?this.each((null==value?function styleRemove(name){return function(){this.style.removeProperty(name)}}:"function"==typeof value?function styleFunction(name,value,priority){return function(){var v=value.apply(this,arguments);null==v?this.style.removeProperty(name):this.style.setProperty(name,v,priority)}}:function styleConstant(name,value,priority){return function(){this.style.setProperty(name,value,priority)}})(name,value,null==priority?"":priority)):styleValue(this.node(),name)},property:function(name,value){return arguments.length>1?this.each((null==value?function propertyRemove(name){return function(){delete this[name]}}:"function"==typeof value?function propertyFunction(name,value){return function(){var v=value.apply(this,arguments);null==v?delete this[name]:this[name]=v}}:function propertyConstant(name,value){return function(){this[name]=value}})(name,value)):this.node()[name]},classed:function(name,value){var names=classArray(name+"");if(arguments.length<2){for(var list=classList(this.node()),i=-1,n=names.length;++i=0&&(name=t.slice(i+1),t=t.slice(0,i)),{type:t,name:name}})}(typename+""),n=typenames.length;if(!(arguments.length<2)){for(on=value?onAdd:onRemove,null==capture&&(capture=!1),i=0;i=0&&(name=t.slice(i+1),t=t.slice(0,i)),t&&!types.hasOwnProperty(t))throw new Error("unknown type: "+t);return{type:t,name:name}})}(typename+"",_),i=-1,n=T.length;if(!(arguments.length<2)){if(null!=callback&&"function"!=typeof callback)throw new Error("invalid callback: "+callback);for(;++i0)for(var n,t,args=new Array(n),i=0;iclickDistance2}gestures.mouse("drag")}function mouseupped(){src_select(on_event.view).on("mousemove.drag mouseup.drag",null),function yesdrag(view,noclick){var root=view.document.documentElement,selection=src_select(view).on("dragstart.drag",null);noclick&&(selection.on("click.drag",noevent,!0),setTimeout(function(){selection.on("click.drag",null)},0)),"onselectstart"in root?selection.on("selectstart.drag",null):(root.style.MozUserSelect=root.__noselect,delete root.__noselect)}(on_event.view,mousemoving),noevent(),gestures.mouse("end")}function touchstarted(){if(filter.apply(this,arguments)){var i,gesture,touches=on_event.changedTouches,c=container.apply(this,arguments),n=touches.length;for(i=0;i=0&&t._call.call(null,e),t=t._next;--timer_frame}()}finally{timer_frame=0,function nap(){var t0,t2,t1=taskHead,time=1/0;for(;t1;)t1._call?(time>t1._time&&(time=t1._time),t0=t1,t1=t1._next):(t2=t1._next,t1._next=null,t1=t0?t0._next=t2:taskHead=t2);taskTail=t0,sleep(time)}(),clockNow=0}}function poke(){var now=clock.now(),delay=now-clockLast;delay>pokeDelay&&(clockSkew-=delay,clockLast=now)}function sleep(time){timer_frame||(timeout&&(timeout=clearTimeout(timeout)),time-clockNow>24?(time<1/0&&(timeout=setTimeout(wake,time-clock.now()-clockSkew)),timer_interval&&(timer_interval=clearInterval(timer_interval))):(timer_interval||(clockLast=clock.now(),timer_interval=setInterval(poke,pokeDelay)),timer_frame=1,setFrame(wake)))}Timer.prototype=timer_timer.prototype={constructor:Timer,restart:function restart(callback,delay,time){if("function"!=typeof callback)throw new TypeError("callback is not a function");time=(null==time?now():+time)+(null==delay?0:+delay),this._next||taskTail===this||(taskTail?taskTail._next=this:taskHead=this,taskTail=this),this._call=callback,this._time=time,sleep()},stop:function stop(){this._call&&(this._call=null,this._time=1/0,sleep())}};var src_timeout=function(callback,delay,time){var t=new Timer;return delay=null==delay?0:+delay,t.restart(function(elapsed){t.stop(),callback(elapsed+delay)},delay,time),t},emptyOn=src_dispatch("start","end","cancel","interrupt"),emptyTween=[],CREATED=0,SCHEDULED=1,STARTING=2,STARTED=3,RUNNING=4,ENDING=5,ENDED=6,transition_schedule=function(node,name,id,index,group,timing){var schedules=node.__transition;if(schedules){if(id in schedules)return}else node.__transition={};!function schedule_create(node,id,self){var tween,schedules=node.__transition;function start(elapsed){var i,j,n,o;if(self.state!==SCHEDULED)return stop();for(i in schedules)if((o=schedules[i]).name===self.name){if(o.state===STARTED)return src_timeout(start);o.state===RUNNING?(o.state=ENDED,o.timer.stop(),o.on.call("interrupt",node,node.__data__,o.index,o.group),delete schedules[i]):+iCREATED)throw new Error("too late; already scheduled");return schedule}function schedule_set(node,id){var schedule=schedule_get(node,id);if(schedule.state>STARTED)throw new Error("too late; already running");return schedule}function schedule_get(node,id){var schedule=node.__transition;if(!schedule||!(schedule=schedule[id]))throw new Error("transition not found");return schedule}function tweenValue(transition,name,value){var id=transition._id;return transition.each(function(){var schedule=schedule_set(this,id);(schedule.value||(schedule.value={}))[name]=value.apply(this,arguments)}),function(node){return schedule_get(node,id).value[name]}}var transition_interpolate=function(a,b){var c;return("number"==typeof b?src_number:b instanceof color_color?src_rgb:(c=color_color(b))?(b=c,src_rgb):src_string)(a,b)};var transition_selection_Selection=src_selection.prototype.constructor;function style_styleRemove(name){return function(){this.style.removeProperty(name)}}var transition_id=0;function Transition(groups,parents,name,id){this._groups=groups,this._parents=parents,this._name=name,this._id=id}function newId(){return++transition_id}var selection_prototype=src_selection.prototype;Transition.prototype=function src_transition_transition(name){return src_selection().transition(name)}.prototype={constructor:Transition,select:function(select){var name=this._name,id=this._id;"function"!=typeof select&&(select=src_selector(select));for(var groups=this._groups,m=groups.length,subgroups=new Array(m),j=0;j=0&&(t=t.slice(0,i)),!t||"start"===t})}(name)?init:schedule_set;return function(){var schedule=sit(this,id),on=schedule.on;on!==on0&&(on1=(on0=on).copy()).on(name,listener),schedule.on=on1}}(id,name,listener))},attr:function(name,value){var fullname=src_namespace(name),i="transform"===fullname?interpolateTransformSvg:transition_interpolate;return this.attrTween(name,"function"==typeof value?(fullname.local?function attr_attrFunctionNS(fullname,interpolate,value){var string00,string10,interpolate0;return function(){var string0,string1,value1=value(this);if(null!=value1)return(string0=this.getAttributeNS(fullname.space,fullname.local))===(string1=value1+"")?null:string0===string00&&string1===string10?interpolate0:(string10=string1,interpolate0=interpolate(string00=string0,value1));this.removeAttributeNS(fullname.space,fullname.local)}}:function attr_attrFunction(name,interpolate,value){var string00,string10,interpolate0;return function(){var string0,string1,value1=value(this);if(null!=value1)return(string0=this.getAttribute(name))===(string1=value1+"")?null:string0===string00&&string1===string10?interpolate0:(string10=string1,interpolate0=interpolate(string00=string0,value1));this.removeAttribute(name)}})(fullname,i,tweenValue(this,"attr."+name,value)):null==value?(fullname.local?function attr_attrRemoveNS(fullname){return function(){this.removeAttributeNS(fullname.space,fullname.local)}}:function attr_attrRemove(name){return function(){this.removeAttribute(name)}})(fullname):(fullname.local?function attr_attrConstantNS(fullname,interpolate,value1){var string00,interpolate0,string1=value1+"";return function(){var string0=this.getAttributeNS(fullname.space,fullname.local);return string0===string1?null:string0===string00?interpolate0:interpolate0=interpolate(string00=string0,value1)}}:function attr_attrConstant(name,interpolate,value1){var string00,interpolate0,string1=value1+"";return function(){var string0=this.getAttribute(name);return string0===string1?null:string0===string00?interpolate0:interpolate0=interpolate(string00=string0,value1)}})(fullname,i,value))},attrTween:function(name,value){var key="attr."+name;if(arguments.length<2)return(key=this.tween(key))&&key._value;if(null==value)return this.tween(key,null);if("function"!=typeof value)throw new Error;var fullname=src_namespace(name);return this.tween(key,(fullname.local?function attrTweenNS(fullname,value){var t0,i0;function tween(){var i=value.apply(this,arguments);return i!==i0&&(t0=(i0=i)&&function attrInterpolateNS(fullname,i){return function(t){this.setAttributeNS(fullname.space,fullname.local,i(t))}}(fullname,i)),t0}return tween._value=value,tween}:function attrTween(name,value){var t0,i0;function tween(){var i=value.apply(this,arguments);return i!==i0&&(t0=(i0=i)&&function attrInterpolate(name,i){return function(t){this.setAttribute(name,i(t))}}(name,i)),t0}return tween._value=value,tween})(fullname,value))},style:function(name,value,priority){var i="transform"==(name+="")?interpolateTransformCss:transition_interpolate;return null==value?this.styleTween(name,function styleNull(name,interpolate){var string00,string10,interpolate0;return function(){var string0=styleValue(this,name),string1=(this.style.removeProperty(name),styleValue(this,name));return string0===string1?null:string0===string00&&string1===string10?interpolate0:interpolate0=interpolate(string00=string0,string10=string1)}}(name,i)).on("end.style."+name,style_styleRemove(name)):"function"==typeof value?this.styleTween(name,function style_styleFunction(name,interpolate,value){var string00,string10,interpolate0;return function(){var string0=styleValue(this,name),value1=value(this),string1=value1+"";return null==value1&&(this.style.removeProperty(name),string1=value1=styleValue(this,name)),string0===string1?null:string0===string00&&string1===string10?interpolate0:(string10=string1,interpolate0=interpolate(string00=string0,value1))}}(name,i,tweenValue(this,"style."+name,value))).each(function styleMaybeRemove(id,name){var on0,on1,listener0,remove,key="style."+name,event="end."+key;return function(){var schedule=schedule_set(this,id),on=schedule.on,listener=null==schedule.value[key]?remove||(remove=style_styleRemove(name)):void 0;on===on0&&listener0===listener||(on1=(on0=on).copy()).on(event,listener0=listener),schedule.on=on1}}(this._id,name)):this.styleTween(name,function style_styleConstant(name,interpolate,value1){var string00,interpolate0,string1=value1+"";return function(){var string0=styleValue(this,name);return string0===string1?null:string0===string00?interpolate0:interpolate0=interpolate(string00=string0,value1)}}(name,i,value),priority).on("end.style."+name,null)},styleTween:function(name,value,priority){var key="style."+(name+="");if(arguments.length<2)return(key=this.tween(key))&&key._value;if(null==value)return this.tween(key,null);if("function"!=typeof value)throw new Error;return this.tween(key,function styleTween(name,value,priority){var t,i0;function tween(){var i=value.apply(this,arguments);return i!==i0&&(t=(i0=i)&&function styleInterpolate(name,i,priority){return function(t){this.style.setProperty(name,i(t),priority)}}(name,i,priority)),t}return tween._value=value,tween}(name,value,null==priority?"":priority))},text:function(value){return this.tween("text","function"==typeof value?function text_textFunction(value){return function(){var value1=value(this);this.textContent=null==value1?"":value1}}(tweenValue(this,"text",value)):function text_textConstant(value){return function(){this.textContent=value}}(null==value?"":value+""))},remove:function(){return this.on("end.remove",function removeFunction(id){return function(){var parent=this.parentNode;for(var i in this.__transition)if(+i!==id)return;parent&&parent.removeChild(this)}}(this._id))},tween:function(name,value){var id=this._id;if(name+="",arguments.length<2){for(var t,tween=schedule_get(this.node(),id).tween,i=0,n=tween.length;iSTARTING&&schedule.state4&&void 0!==arguments[4]?arguments[4]:{},keyFn=arguments.length>5?arguments[5]:void 0;(parent instanceof HTMLElement||parent instanceof SVGElement)&&(parent=renderer_utils_selectElement(parent));var filter,selectorVal=selector?selector[0]:null,selectorType=null,actualSelector=null,element=null,enterSel=null,mergeSel=null;selectorVal?"#"===selectorVal?(selectorType="id",actualSelector=selector):(selectorType="class",actualSelector="."===selector[0]?selector:".".concat(selector)):(actualSelector=elemType,filter=!0),element=parent.selectAll(actualSelector),filter&&(element=element.filter(function(){return this.parentNode===parent.node()})),enterSel=(element=element.data(data,keyFn)).enter().append(elemType||"div"),callbacks.enter&&enterSel.each(function(){for(var _len=arguments.length,params=new Array(_len),_key=0;_key<_len;_key++)params[_key]=arguments[_key];callbacks.enter.apply(callbacks,[renderer_utils_selectElement(this)].concat(params))}),mergeSel=enterSel.merge(element),callbacks.update&&mergeSel.each(function(){for(var _len2=arguments.length,params=new Array(_len2),_key2=0;_key2<_len2;_key2++)params[_key2]=arguments[_key2];callbacks.update.apply(callbacks,[renderer_utils_selectElement(this)].concat(params))}),"class"===selectorType?mergeSel.classed("."===selectorVal?selector.substring(1,selector.length):selector,!0):"id"===selectorType&&mergeSel.attr("id",selector.substring(1,selector.length));var exitSel=element.exit();return callbacks.exit?exitSel.each(function(){for(var _len3=arguments.length,params=new Array(_len3),_key3=0;_key3<_len3;_key3++)params[_key3]=arguments[_key3];callbacks.exit.apply(callbacks,[renderer_utils_selectElement(this)].concat(params))}):exitSel.remove(),mergeSel},applyStyle=function applyStyle(elem,styleObj){return Object.entries(styleObj).forEach(function(d){elem.style(d[0],d[1])},void 0),elem},setElementAttrs=function setElementAttrs(element,attrs){for(var key in attrs)({}).hasOwnProperty.call(attrs,key)&&element.attr(key,attrs[key])},renderer_utils_setAttrs=function setAttrs(element,attrs,className){return element instanceof src_selection||(element=renderer_utils_selectElement(element)),void 0!==className?element.selectAll(".".concat(className)).each(function(){setElementAttrs(src_select(this),attrs)}):setElementAttrs(element,attrs),element},renderer_utils_setStyles=function setStyles(element,styles){for(var key in element instanceof src_selection||(element=renderer_utils_selectElement(element)),styles)({}).hasOwnProperty.call(styles,key)&&element.style(key,styles[key]);return element},renderer_utils_createElements=function createElements(params){var data,sel,container=src_select(params.container);"number"==typeof(data=params.data)&&(data=Array(data).fill().map(function(d,i){return i})),sel=container.selectAll(params.selector).data(data),(sel=container.selectAll(params.selector).filter(function(){return this.parentNode===container.node()}).data(params.data)).enter().append(params.append).merge(sel).each(function(d,i){params.each(d,src_select(this),i)}).attr("class",params.className||""),sel.exit().remove()},renderer_utils_getClientPoint=function getClientPoint(){var pos=src_point.apply(void 0,arguments);return{x:pos[0],y:pos[1]}},renderer_utils_getEvent=function getEvent(){return on_event},renderer_utils_getD3Drag=function getD3Drag(){return src_drag},renderer_utils_getSmartComputedStyle=function getSmartComputedStyle(group,css){var textEl,mandatoryStyle={"fill-opacity":0},className="string"==typeof css?css:css instanceof Array?css.join(" "):void 0;textEl=group.node()instanceof HTMLElement?group.append("div").html("W"):group.append("text").text("W"),className?textEl.attr("class",className):"object"===renderer_utils_typeof(css)&&(delete css["fill-opacity"],mergeRecursive(mandatoryStyle,css)),textEl.style(mandatoryStyle);var computedStyle=window.getComputedStyle(textEl.node()),styleForSmartLabel={fontSize:computedStyle.fontSize,fontFamily:computedStyle.fontFamily,fontWeight:computedStyle.fontWeight,fontStyle:computedStyle.fontStyle};return textEl.remove(),styleForSmartLabel},hasTouch=function hasTouch(){return"ontouchstart"in document.documentElement},SmartlabelManager=__webpack_require__(4),SmartlabelManager_default=__webpack_require__.n(SmartlabelManager),events=["initialized","beforeupdate","updated","beforedraw","drawn","beforeremove","removed","animationend"],EVENT_LIST=[];["canvas","unit","layer","axis","facet-headers","legend","caption"].forEach(function(composition){events.forEach(function(event){EVENT_LIST.push("".concat(composition,".").concat(event))})});var event_list=EVENT_LIST;function lifecycle_manager_defineProperties(target,props){for(var i=0;i0&&void 0!==arguments[0]?arguments[0]:{};this._lifeCycles=lifeCycles,this._releasePromisesFromCache()}},{key:"_resetTargetPromise",value:function _resetTargetPromise(eventName){var _this4=this;setTimeout(function(){_this4._notifiers[eventName]=lifecycle_manager_resolver,_this4._promises.set(eventName,_this4._makeNotifierPromise(eventName))},0)}}]),LifeCycleManager}(),src_InvalidAwareTypes=datamodel_default.a.InvalidAwareTypes,DRAG="drag",HOVER="hover",SELECTIONDRAG="selectiondrag",CLICK="click",LONGTOUCH="longtouch",TOUCHDRAG="touchdrag",ALL_ACTIONS="*",SELECTION_NEW_ENTRY=1,SELECTION_NEW_EXIT=-1,SELECTION_NULL=0,SELECTION_OLD_ENTRY=2,SELECTION_OLD_EXIT=-2;function selection_set_defineProperties(target,props){for(var i=0;i0?(set[key]===SELECTION_OLD_ENTRY&&retObj.entrySet[0].push(key),set[key]===SELECTION_NEW_ENTRY&&retObj.entrySet[1].push(key)):set[key]<0&&(set[key]===SELECTION_OLD_EXIT&&retObj.exitSet[0].push(key),set[key]===SELECTION_NEW_EXIT&&retObj.exitSet[1].push(key)),retObj.completeSet.push(key);return["entrySet","exitSet"].forEach(function(type){retObj[type]=retObj[type].map(function(e){return e.map(Number)})}),retObj.completeSet=retObj.completeSet.map(Number),retObj}},{key:"reset",value:function reset(ids){var set=this._set;if(ids)ids.forEach(function(i){set[i]=SELECTION_NULL});else{var lockedSel=this._lockedSelection;for(var key in set)key in lockedSel||(set[key]=SELECTION_NULL)}return this._resetted=!0,this}},{key:"getEntrySet",value:function getEntrySet(){var set=this._set,addSet=[];for(var key in set)set[key]===SELECTION_NEW_ENTRY&&addSet.push(key);return addSet}},{key:"getExistingEntrySet",value:function getExistingEntrySet(addSet){var set=this._set;return addSet.filter(function(d){return set[d]===SELECTION_NEW_ENTRY||set[d]===SELECTION_OLD_ENTRY})}},{key:"getExistingExitSet",value:function getExistingExitSet(removeSet){var set=this._set;return removeSet.filter(function(d){return set[d]===SELECTION_NEW_EXIT||set[d]===SELECTION_OLD_EXIT})}},{key:"getOldEntry",value:function getOldEntry(){var set=this._set,updateSet=[];for(var key in set)set[key]===SELECTION_OLD_ENTRY&&updateSet.push(key);return updateSet}},{key:"getOldExit",value:function getOldExit(){var set=this._set,updateSet=[];for(var key in set)set[key]===SELECTION_OLD_EXIT&&updateSet.push(key);return updateSet}},{key:"getExitSet",value:function getExitSet(){var set=this._set,removeSet=[];for(var key in set)set[key]===SELECTION_NEW_EXIT&&removeSet.push(key);return removeSet}},{key:"getCompleteSet",value:function getCompleteSet(){var set=this._set,completeSet=[];for(var key in set)completeSet.push(key);return completeSet}},{key:"getCompleteSetCount",value:function getCompleteSetCount(){return this._completeSetCount}},{key:"resetted",value:function resetted(){return this._resetted}},{key:"toggle",value:function toggle(){var set=this._set;for(var key in set)set[key]===SELECTION_NEW_ENTRY?set[key]=SELECTION_NEW_EXIT:set[key]===SELECTION_NEW_EXIT?set[key]=SELECTION_NEW_ENTRY:set[key]===SELECTION_OLD_ENTRY?set[key]=SELECTION_OLD_EXIT:set[key]=SELECTION_OLD_ENTRY;return this}}]),SelectionSet}();function helper_toConsumableArray(arr){return function helper_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);i3&&void 0!==arguments[3]?arguments[3]:{},sideEffectStore=this.sideEffects(),sideEffect=sideEffectStore[name],disable=!1;options.filter&&options.filter(sideEffect)&&(disable=!0),!disable&&sideEffectStore[name].apply(selectionSet,payload,options)}},{key:"registerPropagationBehaviourMap",value:function registerPropagationBehaviourMap(map){return this._propagationBehaviourMap=Object.assign(this._propagationBehaviourMap,map||{}),this}},{key:"dispatchBehaviour",value:function dispatchBehaviour(behaviour,payload){var propagationInfo=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},propagate=void 0===propagationInfo.propagate||propagationInfo.propagate,action=this._actions.behavioural[behaviour],sideEffects=function getSideEffects(behaviour,behaviourEffectMap){var sideEffects=[];for(var key in behaviourEffectMap){var behaviours=key.split(",");behaviours.some(function(d){return d===behaviour})&&sideEffects.push({effects:behaviourEffectMap[key],behaviours:behaviours})}return sideEffects}(behaviour,this._behaviourEffectMap);if(this._propagationInf=propagationInfo,action){var selectionSet=action.dispatch(payload),propagationSelectionSet=this.getPropagationSelectionSet(selectionSet);this._entryExitSet[behaviour]=propagationSelectionSet;var shouldApplySideEffects=this.shouldApplySideEffects(propagate);if(propagate&&this.propagate(behaviour,payload,selectionSet.find(function(d){return d.sourceSelectionSet}),sideEffects),shouldApplySideEffects){var applicableSideEffects=this.getApplicableSideEffects(sideEffects,payload,propagationInfo);this.applySideEffects(applicableSideEffects,propagationSelectionSet,payload)}}return this}},{key:"getPropagationSelectionSet",value:function getPropagationSelectionSet(selectionSet){return selectionSet.find(function(d){return!d.sourceSelectionSet})}},{key:"shouldApplySideEffects",value:function shouldApplySideEffects(){return!0}},{key:"changeBehaviourStateOnPropagation",value:function changeBehaviourStateOnPropagation(behaviour,value){return value instanceof Function?this._sourceBehaviours[behaviour]=value:this._sourceBehaviours[behaviour]=function(){return value},this}},{key:"changeSideEffectStateOnPropagation",value:function changeSideEffectStateOnPropagation(sideEffect,value){value instanceof Function?this._sourceSideEffects[sideEffect]=value:this._sourceSideEffects[sideEffect]=function(){return value}}},{key:"propagate",value:function propagate(){return this}},{key:"sideEffects",value:function sideEffects(){return arguments.length?(this._sideEffects=arguments.length<=0?void 0:arguments[0],this):this._sideEffects}},{key:"enableSideEffects",value:function enableSideEffects(fn){return changeSideEffectAvailability(this,fn,!0),this}},{key:"disableSideEffects",value:function disableSideEffects(fn){return changeSideEffectAvailability(this,fn,!1),this}},{key:"dissociateBehaviour",value:function dissociateBehaviour(behaviour,physicalAction){var actionBehaviourMap=this._actionBehaviourMap;for(var key in actionBehaviourMap)if(key===physicalAction){var behaviourMap=actionBehaviourMap[key];behaviourMap.behaviours=behaviourMap.behaviours.filter(function(d){return d!==behaviour}),this.mapActionsAndBehaviour(key)}return this}},{key:"dissociateSideEffect",value:function dissociateSideEffect(sideEffect,behaviour){var behaviourEffectMap=this._behaviourEffectMap;return behaviourEffectMap[behaviour]=behaviourEffectMap[behaviour].filter(function(d){return(d.name||d)!==sideEffect}),this}},{key:"getApplicableSideEffects",value:function getApplicableSideEffects(sideEffects){return sideEffects}},{key:"attachPropagationListener",value:function attachPropagationListener(dataModel){return dataModel.unsubscribe("propagation"),dataModel.on("propagation",this.onDataModelPropagation()),this}},{key:"onDataModelPropagation",value:function onDataModelPropagation(){var _this2=this;return function(propValue){var payload=propValue.payload,action=payload.action;_this2.dispatchBehaviour(action,payload,{propagate:!1})}}},{key:"createSelectionSet",value:function createSelectionSet(uniqueIds,behaviouralActions){var behaviours=behaviouralActions||this._actions.behavioural,selectionSet=this._selectionSet,volatileSelectionSet=this._volatileSelectionSet;for(var key in behaviours)({}).hasOwnProperty.call(behaviours,key)&&(selectionSet[key]=new src_selection_set(uniqueIds),volatileSelectionSet[key]=new src_selection_set(uniqueIds,!0));return this._volatileSelectionSet=volatileSelectionSet,this.selectionSet(selectionSet),this}},{key:"selectionSet",value:function selectionSet(){return arguments.length?(this._selectionSet=arguments.length<=0?void 0:arguments[0],this):this._selectionSet}},{key:"initializeSideEffects",value:function initializeSideEffects(){var sideEffectDefinitions=this._sideEffectDefinitions;return this.sideEffects(function initializeSideEffects(context,sideEffects){var sideEffectsMap=context._sideEffects,config=context.config();return(sideEffects=sideEffects instanceof Array?sideEffects:Object.values(sideEffects)).forEach(function(SideEffect){var formalName=SideEffect.formalName(),sideEffectInstance=sideEffectsMap[formalName];sideEffectsMap[formalName]=sideEffectInstance||new SideEffect(context);var sideEffectConf=config[formalName];sideEffectConf&&sideEffectsMap[formalName].config(sideEffectConf)}),sideEffectsMap}(this,sideEffectDefinitions)),this}},{key:"registerPhysicalActions",value:function registerPhysicalActions(actions){var initedActions=function initializePhysicalActions(context,actions){var physicalActions={};for(var name in actions)({}).hasOwnProperty.call(name,actions)||(physicalActions[name]=actions[name](context));return physicalActions}(this,actions);return Object.assign(this._actions.physical,initedActions),this}},{key:"propagateWith",value:function propagateWith(action,fields){var append=arguments.length>2&&void 0!==arguments[2]&&arguments[2],behaviouralActions=this._actions.behavioural;if(fields.length){if(action===ALL_ACTIONS)for(var key in behaviouralActions)this._propagationFields[key]={fields:fields,append:append};else this._propagationFields[action]={fields:fields,append:append};return this}return this._propagationFields}},{key:"mapActionsAndBehaviour",value:function mapActionsAndBehaviour(phyAction){var initedPhysicalActions=this._actions.physical,map=this._actionBehaviourMap;for(var action in map)if(!{}.hasOwnProperty.call(action,map)&&action===(phyAction||action)){var target=void 0,mapObj=map[action];target=mapObj.target;var touch=mapObj.touch;target||(target=this.context.getDefaultTargetContainer()),(hasTouch()?!0===touch||void 0===touch:!touch)&&this.bindActionWithBehaviour(initedPhysicalActions[action],target,mapObj.behaviours)}return this}},{key:"registerPhysicalBehaviouralMap",value:function registerPhysicalBehaviouralMap(map){return this._actionBehaviourMap=mergeRecursive(this._actionBehaviourMap,map),this}},{key:"bindActionWithBehaviour",value:function bindActionWithBehaviour(action,targets,behaviourList){var _this3=this;return"string"==typeof targets&&(targets=[targets]),targets.forEach(function(target){var mount=_this3.context.mount(),nodes=target.node instanceof Function?target:renderer_utils_selectElement(mount).selectAll(target);nodes.empty()||(nodes instanceof Array?nodes.forEach(function(node){action(renderer_utils_selectElement(node),behaviourList)}):action(nodes,behaviourList))}),this}},{key:"getPropagationInf",value:function getPropagationInf(){return this._propagationInf}},{key:"getAddSetFromCriteria",value:function getAddSetFromCriteria(criteria){var propagationInf=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},context=this.context,filteredDataModel=propagationInf.data?propagationInf.data:context.getDataModelFromIdentifiers(criteria,"all"),xFields=context.fields().x||[],yFields=context.fields().y||[],xMeasures=xFields.every(function(field){return field.type()===dist_datamodel.FieldType.MEASURE}),yMeasures=yFields.every(function(field){return field.type()===dist_datamodel.FieldType.MEASURE});return{model:filteredDataModel,uids:null===criteria?null:propagationInf.data?function filterPropagationModel(model,propModel,measures){var filteredModel,_propModel$getData=propModel.getData(),data=_propModel$getData.data,schema=_propModel$getData.schema;if(schema.length){var fieldMap=model.getFieldsConfig();filteredModel=model.select(function(fields){return data.some(function(row){return schema.every(function(propField,idx){return!(measures||propField.name in fieldMap&&fieldMap[propField.name].def.type!==dist_datamodel.FieldType.MEASURE)||row[idx]===fields[propField.name].valueOf()})})},{saveChild:!1})}else filteredModel=propModel;return filteredModel}(this.getFullData(),propagationInf.data[0],xMeasures&&yMeasures).getData().uids:filteredDataModel[0].getData().uids}}},{key:"getSelectionSets",value:function getSelectionSets(action){var sourceId=this.context.id(),propagationSource=(this._propagationInf||{}).sourceId,applicableSelectionSets=[];return propagationSource!==sourceId&&(applicableSelectionSets=[this._volatileSelectionSet[action]]),propagationSource&&applicableSelectionSets.push(this.selectionSet()[action]),applicableSelectionSets}},{key:"getFullData",value:function getFullData(){return this.context.data()}},{key:"resetted",value:function resetted(){return this._resetted}},{key:"getEntryExitSet",value:function getEntryExitSet(behaviour){return this._entryExitSet[behaviour]}}]),Firebolt}();function generic_defineProperties(target,props){for(var i=0;i1&&void 0!==arguments[1]?arguments[1]:{},sourceIdentifiers=propagationInf.sourceIdentifiers;return sourceIdentifiers?sourceIdentifiers.getSchema().map(function(d){return d.name}):criteria instanceof Array?criteria[0]:Object.keys(criteria||{})}(propagationInf,payload.criteria),sourceSelectionSet:!0===selectionSet._volatile}}},{key:"enable",value:function enable(){this._enabled=!0}},{key:"disable",value:function disable(){this._enabled=!1}},{key:"isEnabled",value:function isEnabled(){return this._enabled}}],[{key:"mutates",value:function mutates(){return!1}}]),GenericBehaviour}();function volatile_typeof(obj){return(volatile_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function volatile_defineProperties(target,props){for(var i=0;iydom[0]?ydom:xdom,max=min===ydom?xdom:ydom;min[1]100&&Math.abs(startPos.x-endPos.x)<=5)){endPos.x=Math.max(0,Math.min(endPos.x,drawingInf.width)),endPos.y=Math.max(0,Math.min(endPos.y,drawingInf.height));var payload=drag_action_config(firebolt.context.getSourceInfo(),{startPos:startPos,endPos:endPos,snap:!0},firebolt.context.data().getFieldsConfig());payload.dragEnd=!0,behaviours.forEach(function(beh){return firebolt.dispatchBehaviour(beh,payload)})}}))},physical_hover=function hover(firebolt){return function(targetEl,behaviours){var dispatchBehaviour=function dispatchBehaviour(args){var event=renderer_utils_getEvent(),context=firebolt.context,mode=context.config().interaction.tooltip.mode,pos=renderer_utils_getClientPoint(context.getDrawingContext().svgContainer,event),nearestPoint=context.getNearestPoint(pos.x,pos.y,{getAllPoints:"consolidated"===mode||"fragmented"===mode,data:args,event:event}),payload={criteria:nearestPoint?nearestPoint.id:null,showInPosition:nearestPoint.showInPosition,target:nearestPoint.target,position:pos,mode:mode};behaviours.forEach(function(beh){return firebolt.dispatchBehaviour(beh,payload)}),event.stopPropagation()};targetEl.on("mouseover",dispatchBehaviour).on("mousemove",dispatchBehaviour).on("mouseout",function(){behaviours.forEach(function(beh){return firebolt.dispatchBehaviour(beh,{criteria:null})})})}},helpers_generatePayloadFromEvent=function generatePayloadFromEvent(args,event,firebolt){var context=firebolt.context,pos=renderer_utils_getClientPoint(context.getDrawingContext().svgContainer,event.touches?event.touches[0]:event),nearestPoint=context.getNearestPoint(pos.x,pos.y,{data:args,event:event});return{criteria:nearestPoint?nearestPoint.id:null,showInPosition:nearestPoint.showInPosition,target:nearestPoint.target,position:pos}},physical_click=function click(firebolt){return function(targetEl,behaviours){targetEl.on("click",function dispatchBehaviour(args){var event=renderer_utils_getEvent(),payload=helpers_generatePayloadFromEvent(args,event,firebolt);behaviours.forEach(function(beh){return firebolt.dispatchBehaviour(beh,payload)}),event.stopPropagation()})}};function physical_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}var physicalActions=(physical_defineProperty(_physicalActions={},DRAG,function drag(firebolt){return function(targetEl,behaviours){drag_event_attachDragEvent(targetEl,behaviours,firebolt)}}),physical_defineProperty(_physicalActions,HOVER,physical_hover),physical_defineProperty(_physicalActions,CLICK,physical_click),physical_defineProperty(_physicalActions,LONGTOUCH,function longtouch(firebolt){return function(targetEl,behaviours){var event,touchEnd;touchEnd=!1,event=renderer_utils_getEvent(),targetEl.on("touchstart",function(args){event=renderer_utils_getEvent(),touchEnd=!1,setTimeout(function(){touchEnd?behaviours.forEach(function(beh){return firebolt.dispatchBehaviour(beh,{criteria:null})}):function dispatchBehaviour(args){var payload=helpers_generatePayloadFromEvent(args,event,firebolt);behaviours.forEach(function(beh){return firebolt.dispatchBehaviour(beh,payload)}),event.stopPropagation()}(args)},100)}).on("touchend",function(){touchEnd=!0})}}),physical_defineProperty(_physicalActions,TOUCHDRAG,function touchdrag(firebolt){return function(targetEl,behaviours){drag_event_attachDragEvent(targetEl,behaviours,firebolt,!0)}}),_physicalActions),PROPS={valueParser:{defaultValue:function defaultValue(val){return val}}};function generic_sideeffect_defineProperties(target,props){for(var i=0;i1&&void 0!==arguments[1]&&arguments[1];var interactionType=arguments.length>2?arguments[2]:void 0,apply=arguments.length>3?arguments[3]:void 0;return this.firebolt.context.layers().forEach(function(layer){return!1!==layer.config().interactive&&layer.applyInteractionStyle(interactionType,set.uids,apply)}),this}}]),SurrogateSideEffect}();function spawnable_typeof(obj){return(spawnable_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function spawnable_defineProperties(target,props){for(var i=0;i=0&&x2<=width&&y>=0&&y2<=height){var payload=drag_action_config(context.getSourceInfo(),{startPos:{x:x,y:y},endPos:{x:x2,y:y2}},context.data().getFieldsConfig());onDrag(payload)}}).on("end",function(){var width=drawingInf.width,height=drawingInf.height,x=Math.min(width-subject.width,Math.max(subject.x,0)),y=Math.min(height-subject.height,Math.max(subject.y,0)),y2=y+subject.height,x2=x+subject.width;if(x>=0&&x2<=width&&y>=0&&y2<=height){var payload=drag_action_config(context.getSourceInfo(),{startPos:{x:x,y:y},endPos:{x:x2,y:y2},snap:!0},context.data().getFieldsConfig());payload.dragEnd=!0,onDrag(payload)}}))}}(firebolt)(renderer_utils_selectElement(this),["brush"],sideEffect)}).merge(selection).each(function(attrs){var element=renderer_utils_selectElement(this);for(var key in transition&&(element=element.transition().duration(transition.duration)),attrs)({}).hasOwnProperty.call(attrs,key)&&isValidValue(attrs[key])&&element.attr(key,attrs[key])}),boxClassName=getQualifiedClassName(boxConf.defClassName,this._id,classPrefix);return selectionBox.classed(boxClassName.join(" "),!0),selectionBox.classed(boxConf.className,!0),this}},{key:"hide",value:function hide(drawingInf){helper_changeVisibility(this,drawingInf.sideEffectGroup,!1)}},{key:"show",value:function show(drawingInf){helper_changeVisibility(this,drawingInf.sideEffectGroup,!0)}}],[{key:"defaultConfig",value:function defaultConfig(){return{defClassName:"selection-box-group",className:"",classPrefix:"muze",box:{defClassName:"selection-box",className:""},transition:{duration:200}}}},{key:"formalName",value:function formalName(){return"selectionBox"}}]),SelectionBox}(),INITIAL_STYLE={position:"absolute",width:0,height:0},default_config_defaultConfig={classPrefix:"muze",defClassName:"tooltip-box",connectorClassName:"tooltip-connectors",className:"",row:{margin:0},content:{spacing:5,iconContainerSize:10,iconScale:1,iconShape:"circle",iconColor:"#ff0000",rowMargin:"0px",margin:10,separator:":",className:"tooltip-content-container",parentClassName:"tooltip-content-parent-container"},arrow:{size:10,disabled:!1,defClassName:"tooltip-arrow",className:"",color:"rgba(195,195,195,0.85)"}},helper_getArrowPos=function getArrowPos(orient,dim,measurement,config){var arrowPos,x=measurement.x,y=measurement.y,boxHeight=measurement.boxHeight,boxWidth=measurement.boxWidth,arrowWidth=config.arrow.disabled?0:config.arrow.size;if("left"===orient||"right"===orient){var start=0,diff=boxHeight/2,plotBottom=dim.y+dim.height,boxBottom=y+boxHeight;dim.y>y?(start=dim.y-y,diff=(plotBottom>=boxBottom?boxBottom-dim.y:dim.height)/2):boxBottom>plotBottom&&(diff=Math.abs(y-(dim.y+dim.height))/2),arrowPos=start+diff-arrowWidth/2}else{var _start=0,_diff=boxWidth/2,plotRight=dim.x+dim.width,boxRight=x+boxWidth;dim.x>x?(_start=dim.x-x,_diff=(plotRight>=boxRight?boxRight-dim.x:dim.width)/2):boxRight>plotRight&&(_diff=Math.abs(x-(dim.x+dim.width))/2),arrowPos=_start+_diff-arrowWidth/2}return arrowPos},helper_placeArrow=function placeArrow(context,position,arrowPos){var tooltipArrow=context._tooltipArrow,tooltipBackground=context._tooltipBackground,config=context._config,classPrefix=config.classPrefix,arrowConf=config.arrow,className=getQualifiedClassName(arrowConf.defClassName,context._id,config.classPrefix);tooltipArrow.style("display","block"),tooltipArrow.attr("class","".concat(className.join(" "))),"left"===position||"right"===position?(tooltipArrow.style("top","".concat(arrowPos,"px")),tooltipArrow.style("left",""),tooltipBackground.style("top","".concat(arrowPos,"px")),tooltipBackground.style("left","")):("bottom"===position?tooltipArrow.style("top","100%"):tooltipArrow.style("top","-".concat(arrowConf.size,"px")),tooltipArrow.style("left","".concat(arrowPos,"px")),"bottom"===position?tooltipBackground.style("top","100%"):tooltipBackground.style("top","-".concat(arrowConf.size+3,"px")),tooltipBackground.style("left","".concat(arrowPos,"px"))),tooltipArrow.classed("".concat(classPrefix,"-tooltip-arrow"),!0),tooltipArrow.classed("".concat(classPrefix,"-tooltip-arrow-").concat(context._arrowOrientation),!1),tooltipArrow.classed("".concat(classPrefix,"-tooltip-arrow-").concat(position),!0),tooltipBackground.classed("".concat(classPrefix,"-tooltip-background-arrow"),!0),tooltipBackground.classed("".concat(classPrefix,"-tooltip-background-arrow-").concat(context._arrowOrientation),!1),tooltipBackground.classed("".concat(classPrefix,"-tooltip-background-arrow-").concat(position),!0)};__webpack_require__(10);function _construct(Parent,args,Class){return(_construct=function isNativeReflectConstruct(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],function(){})),!0}catch(e){return!1}}()?Reflect.construct:function _construct(Parent,args,Class){var a=[null];a.push.apply(a,args);var instance=new(Function.bind.apply(Parent,a));return Class&&strategy_setPrototypeOf(instance,Class.prototype),instance}).apply(null,arguments)}function strategy_setPrototypeOf(o,p){return(strategy_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){return o.__proto__=p,o})(o,p)}function strategy_toConsumableArray(arr){return function strategy_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);i1&&void 0!==arguments[1]?arguments[1]:{},context=arguments.length>2?arguments[2]:void 0,fieldValues=[],dataObj=dataModel.getData(),data=dataObj.data,schema=dataObj.schema,separator=config.separator,fieldsConfig=dataModel.getFieldsConfig(),fieldspace=dataModel.getFieldspace(),detailFields=context.detailFields||[],dimensions=schema.filter(function(d){return d.type===dist_datamodel.FieldType.DIMENSION}),measures=schema.filter(function(d){return d.type===dist_datamodel.FieldType.MEASURE}),containsDetailField=schema.find(function(d){return-1!==detailFields.indexOf(d.name)}),dataLen=data.length,valueParser=context.valueParser,axes=context.axes,dimensionMeasureMap=context.dimensionMeasureMap,timeDiffs=context.timeDiffs,defFormatter=strategy_formatters(null,null,valueParser)[dist_datamodel.DimensionSubtype.CATEGORICAL],getRowContent=function getRowContent(field,type){var value,formattedValue,measureIndex,values=[],index=fieldsConfig[field].index,interval=fieldsConfig[field].def.subtype===dist_datamodel.DimensionSubtype.TEMPORAL?timeDiffs[field]:0,formatterFn=strategy_getDefaultTooltipFormatterFn(strategy_formatters(function(val){return val},interval,valueParser)[type],defFormatter);if(null!==value){var uniqueVals=type===dist_datamodel.MeasureSubtype.CONTINUOUS?data.map(function(d){return d[index]}):strategy_toConsumableArray(new Set(data.map(function(d){return d[index]})));uniqueVals=uniqueVals.filter(function(d){return""!==d});var colorAxis=axes.color[0],shapeAxis=axes.shape[0],sizeAxis=axes.size[0],isRetinalField=(colorAxis||shapeAxis||sizeAxis)&&dataLen>1&&type!==dist_datamodel.MeasureSubtype.CONTINUOUS;uniqueVals.forEach(function(val,i){var key,associatedMeasures=dimensionMeasureMap[field];if(associatedMeasures&&associatedMeasures.length&&dataLen>1){key=val;var icon={value:""};if(isRetinalField&&(icon={type:"icon",color:colorAxis.getColor(val),shape:shapeAxis.getShape(val),size:sizeAxis.getSize(val)*config.iconScale}),associatedMeasures.length>1){var formattedKey=type===dist_datamodel.DimensionSubtype.TEMPORAL?formatterFn(key,interval):key;values.push([icon,"".concat(formattedKey)]),associatedMeasures.forEach(function(measure){measureIndex=fieldsConfig[measure].index,value=data[i][measureIndex];var numberFormat=fieldspace.fields[measureIndex].numberFormat(),measureFormatter=strategy_getDefaultTooltipFormatterFn(strategy_formatters(numberFormat,interval,valueParser)[dist_datamodel.MeasureSubtype.CONTINUOUS]);formattedValue=measureFormatter(value),values.push([{value:"".concat(measure).concat(separator),style:{"margin-left":"".concat(config.margin,"px}")},className:"".concat(config.classPrefix,"-tooltip-key")},{value:"".concat(formattedValue),className:"".concat(config.classPrefix,"-tooltip-value")}])})}else{measureIndex=fieldsConfig[associatedMeasures[0]].index,value=data[i][measureIndex];var numberFormat=fieldspace.fields[measureIndex].numberFormat(),measureFormatter=strategy_getDefaultTooltipFormatterFn(strategy_formatters(numberFormat,interval,valueParser)[dist_datamodel.MeasureSubtype.CONTINUOUS]);formattedValue=measureFormatter(value);var _formattedKey=type===dist_datamodel.DimensionSubtype.TEMPORAL?formatterFn(key,interval):key;values.push([icon,{value:"".concat(_formattedKey),className:"".concat(config.classPrefix,"-tooltip-key")},{value:"".concat(formattedValue),className:"".concat(config.classPrefix,"-tooltip-value")}])}}else key=field,formattedValue=formatterFn(value=val),values.push([{value:"".concat(key).concat(separator),className:"".concat(config.classPrefix,"-tooltip-key")},{value:"".concat(formattedValue),className:"".concat(config.classPrefix,"-tooltip-value")}])})}return values},displayFormat="keyValue";if(dataLen>1&&containsDetailField)fieldValues=function getTabularData(dataObj,context,defaultFormatter){var rows=[],data=dataObj.data,schema=dataObj.schema,fieldspace=dataObj.fieldspace;rows.push(schema.map(function(d){return d.name}));var valueParser=context.valueParser,timeDiffs=context.timeDiffs;return data.forEach(function(d){var row=[];schema.forEach(function(fieldObj,i){var interval=fieldObj.subtype===dist_datamodel.DimensionSubtype.TEMPORAL?timeDiffs[fieldObj.name]:0,numberFormat=fieldObj.type===dist_datamodel.FieldType.MEASURE&&fieldspace.fields[i].numberFormat(),value=strategy_getDefaultTooltipFormatterFn(strategy_formatters(numberFormat,interval,valueParser)[fieldObj.subtype],defaultFormatter)(d[i]);row.push(value)}),rows.push(row)}),rows}({data:data,schema:schema,fieldspace:fieldspace},context,defFormatter),displayFormat="table";else{dimensions.forEach(function(item){var type=item.subtype?item.subtype:item.type;fieldValues=[].concat(strategy_toConsumableArray(fieldValues),strategy_toConsumableArray(getRowContent(item.name,type)))});var allMeasures=strategy_toConsumableArray(_construct(Set,strategy_toConsumableArray(Object.values(dimensionMeasureMap))));(dataLen>1?measures.filter(function(d){return-1===allMeasures.indexOf(d.name)}):measures).forEach(function(item){var type=item.subtype?item.subtype:item.type;fieldValues=[].concat(strategy_toConsumableArray(fieldValues),strategy_toConsumableArray(getRowContent(item.name,type)))})}return{content:fieldValues,displayFormat:displayFormat}},strategy_strategy={keyValue:function keyValue(data,config,context){return strategy_buildTooltipData(data,config,context)}},DEFAULT_STRATEGY="keyValue";function content_defineProperties(target,props){for(var i=0;i0?(this._config=mergeRecursive(this._config,arguments.length<=0?void 0:arguments[0]),this):this._config}},{key:"update",value:function update(item){return this._model=item.model,this._strategy=void 0!==item.strategy?item.strategy:DEFAULT_STRATEGY,this._formatter=item.formatter,this}},{key:"context",value:function context(ctx){return this._context=ctx,this}},{key:"render",value:function render(mount){var data,config=this._config,iconContainerSize=config.iconContainerSize,formatter=this._formatter,rowMargin=config.rowMargin,model=this._model;if(this._mount=mount,(data=model instanceof Array?model:formatter instanceof Function?formatter(this._model,this._context):strategy_strategy[this._strategy](this._model,this.config(),this._context))instanceof Function)mount.html(data());else{var content=data,displayFormat="default";isSimpleObject(data)&&(content=data.content,displayFormat=data.displayFormat);var body=makeElement(mount,"div",[displayFormat],"".concat(config.classPrefix,"-tooltip-content"),{},function(d){return d});if("table"===displayFormat){var table=makeElement(body,"table",[1],"".concat(config.classPrefix,"-tooltip-table")),tbody=makeElement(table,"tbody",[1],"".concat(config.classPrefix,"-tooltip-table-tbody")),rows=makeElement(tbody,"tr",content,"".concat(config.classPrefix,"-tooltip-table-row"));rows.each(function(d,i){renderer_utils_selectElement(this).classed("".concat(config.classPrefix,"-tooltip-table-row-").concat(i),!0)}),makeElement(rows,"td",function(d){return d},"".concat(config.classPrefix,"-tooltip-table-cell")).each(function(d){renderer_utils_selectElement(this).html(d)})}else{var _rows=makeElement(body,"div",content,"".concat(config.classPrefix,"-tooltip-row")),_cells=makeElement(_rows,"span",function(d){return d},"".concat(config.classPrefix,"-tooltip-content"));_cells.attr("class","".concat(config.classPrefix,"-tooltip-content")),renderer_utils_setStyles(_rows,{margin:rowMargin}),renderer_utils_setStyles(_cells,{display:"inline-block","margin-right":"".concat(config.spacing,"px")}),_cells.each(function(d){var el=renderer_utils_selectElement(this);if(el.html(""),d instanceof Object)if("icon"===d.type){var svg=makeElement(el,"svg",[1]),path=makeElement(svg,"path",[1]),shape=d.shape instanceof Function?d.shape:common_utils_getSymbol(d.shape);renderer_utils_setAttrs(svg,{x:0,y:0,width:iconContainerSize,height:iconContainerSize}),renderer_utils_setAttrs(path,{d:shape.size(d.size)(),transform:"translate(".concat(iconContainerSize/2,", ").concat(iconContainerSize/2,")")}),renderer_utils_setStyles(path,{fill:d.color}),renderer_utils_setStyles(svg,{width:"".concat(iconContainerSize,"px"),height:"".concat(iconContainerSize,"px")})}else el.html(d.value),d.className&&el.classed(d.className,!0),renderer_utils_setStyles(el,d.style);else el.html(d)})}}return this}},{key:"clear",value:function clear(){return this._model=null,this}}],[{key:"defaultConfig",value:function defaultConfig(){var config=default_config_defaultConfig.content;return config.classPrefix=default_config_defaultConfig.classPrefix,config}}]),Content}();function tooltip_defineProperties(target,props){for(var i=0;i0){var defConf=mergeRecursive({},this.constructor.defaultConfig());return this._config=mergeRecursive(defConf,arguments.length<=0?void 0:arguments[0]),this}return this._config}},{key:"addClass",value:function addClass(className){return this._tooltipContainer.classed(className,!0),this}},{key:"context",value:function context(){return arguments.length?(this._context=arguments.length<=0?void 0:arguments[0],this):this._context}},{key:"content",value:function content(name,data){var contentConfig=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},config=this.config(),classPrefix=config.classPrefix,contentClass=config.content.className,formatter=config.formatter,className=contentConfig.className||"".concat(classPrefix,"-").concat(contentClass,"-").concat(name),content=this._contents[name]=this._contents[name]||new content_Content,container=makeElement(this._contentContainer,"div",[contentConfig.order],className);container.attr("class","".concat(classPrefix,"-").concat(contentClass," ").concat(className)),function reorderContainers(parentContainer,className){parentContainer.selectAll(className).sort(function(a,b){return a-b})}(this._contentContainer,".".concat(classPrefix,"-").concat(contentClass));var contentConf=config.content;return contentConfig.classPrefix=this._config.classPrefix,content.config(contentConf),null===data?(content.clear(),container.remove(),delete this._contents[name]):(content.update({model:data,formatter:contentConfig.formatter||formatter}),content.context(this._context),content.render(container)),Object.keys(this._contents).length||this.hide(),this}},{key:"getContents",value:function getContents(){return Object.values(this._contents)}},{key:"position",value:function position(x,y){var conf=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(!Object.keys(this._contents).length)return this.hide(),this;this.show();var target=this._target,repositionArrow=conf.repositionArrow;if(target&&repositionArrow){var node=this._tooltipContainer.node(),config=this._config,arrowDisabled=config.arrow.disabled,arrowWidth=arrowDisabled?0:config.arrow.size,arrowOrient=this._arrowOrientation,outsidePlot="left"===arrowOrient||"right"===arrowOrient?y+node.offsetHeight-arrowWidthtarget.y+target.height:x+node.offsetWidth-arrowWidthtarget.x+target.width;if(!arrowDisabled)if(outsidePlot){var path;this._tooltipArrow.style("display","none"),this._tooltipBackground.style("display","none"),this._tooltipConnectorContainer.style("display","block");var connector=this._tooltipConnectorContainer.selectAll("path").data([1]),enter=connector.enter().append("path");"left"===arrowOrient?path="M ".concat(x," ").concat(y+node.offsetHeight/2," L ").concat(target.x+target.width)+" ".concat(target.y+target.height/2):"right"===arrowOrient?path="M ".concat(x+node.offsetWidth," ").concat(y+node.offsetHeight/2)+" L ".concat(target.x," ").concat(target.y+target.height/2):"bottom"===arrowOrient&&(path="M ".concat(x+node.offsetWidth/2," ").concat(y+node.offsetHeight)+" L ".concat(target.x+target.width/2," ").concat(target.y)),enter.merge(connector).attr("d",path).style("display","block")}else{var arrowPos=helper_getArrowPos(arrowOrient,target,{x:x,y:y,boxHeight:node.offsetHeight,boxWidth:node.offsetWidth},this._config);helper_placeArrow(this,this._arrowOrientation,arrowPos),this._tooltipConnectorContainer.style("display","none")}}var offset=this._offset||{x:0,y:0};return this._tooltipContainer.style("left","".concat(offset.x+x,"px")).style("top","".concat(offset.y+y,"px")),this}},{key:"positionRelativeTo",value:function positionRelativeTo(dim){var obj,_this=this,tooltipConf=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},orientation=tooltipConf.orientation;if(this.show(),!dim)return this.hide(),this;var extent=this._extent,node=this._tooltipContainer.node();this._tooltipContainer.style("top","0px").style("left","0px");var offsetWidth=node.offsetWidth+2,offsetHeight=node.offsetHeight+2,config=this._config,offset=this._offset,arrowDisabled=config.arrow.disabled,arrowSize=arrowDisabled?0:config.arrow.size,draw=void 0===tooltipConf.draw||tooltipConf.draw,topSpace=dim.y,dimX=dim.x+dim.width+offset.x,rightSpace=extent.width-dimX,leftSpace=dim.x+offset.x-extent.x,positionTop=topSpace>offsetHeight+arrowSize,positionRight=rightSpace>=offsetWidth+arrowSize,positionLeft=leftSpace>=offsetWidth+arrowSize;return this._target=dim,orientation||(orientation=positionTop?"vertical":positionRight||positionLeft?"horizontal":"vertical"),"horizontal"===orientation?obj=function positionHorizontal(){var position,x=dim.x+dim.width,y=dim.y;return positionRight?(position="left",x+=arrowSize):positionLeft?(x=dim.x-offsetWidth,position="right",x-=arrowSize):(position="left",x+=arrowSize),dim.height2&&void 0!==arguments[2]?arguments[2]:{},totalHeight=0,totalWidth=0,dataModel=selectionSet.mergedEnter.model,context=this.firebolt.context,drawingInf=this.drawingContext();if(dataModel.isEmpty()||null===payload.criteria||!1===selectionSet.isSourceFieldPresent)return this.hide(options,null),this;var tooltips=this._tooltips,config=this.config(),boundBox={width:drawingInf.width,height:drawingInf.height},showInPosition=payload.showInPosition,pad=config.padding,dataModels=[],fragmented="fragmented"===config.mode,sourceInf=context.getSourceInfo(),fields=sourceInf.fields,showVertically=!!(!!fields.x[0]&&fields.x[0].type()===dist_datamodel.FieldType.DIMENSION),tooltipPos=payload.position,boxes=[],enter={},uids=dataModel.getData().uids;fragmented?dataModels.push.apply(dataModels,tooltip_toConsumableArray(uids.map(function(d){return dataModel.select(function(fieldsArr,i){return i===d},{saveChild:!1})}))):dataModels.push(dataModel);var target=payload.target,targetFields=[];if(target){targetFields=target[0]||[];for(var sourceFields=payload.sourceFields,indices=[],i=0,len=targetFields.length;idrawingInf.height:totalWidth>drawingInf.width)break;boxes.push({x:position.x,y:position.y,width:tooltipBoundBox.width,height:tooltipBoundBox.height,tooltip:tooltipInst})}}for(var key in tooltips)if(!enter[key]){var tooltip=tooltips[key];tooltip.content(payload.action,null),tooltip.getContents().length||(tooltip.remove(),delete tooltips[key])}return fragmented&&(!function spaceOutBoxes(boxes,extent,showVertically){var y,height,x,width,i,len=boxes.length,spaceOutIfOverlap=function spaceOutIfOverlap(firstBox,secondBox,opposite){x=firstBox.x,width=firstBox.width,y=firstBox.y,height=firstBox.height;var bottom=y+height,right=x+width;showVertically?(opposite?ysecondBox.y)&&(secondBox.y=opposite?firstBox.y-secondBox.height-5:bottom+5):(opposite?xsecondBox.x)&&(secondBox.x=opposite?firstBox.x-secondBox.width-5:right+5)};for(boxes.sort(function(a,b){return showVertically?a.y-b.y:a.x-b.x}),i=0,i=0;iextent.height||boxes[i].x+boxes[i].width>extent.width)for(showVertically?boxes[i].y-=boxes[i].height+boxes[i].y-extent.height:boxes[i].x-=boxes[i].width+boxes[i].x-extent.width,i=len-1;i>0;i--)spaceOutIfOverlap(boxes[i],boxes[i-1],!0)}(boxes,boundBox,showVertically),boxes.forEach(function(box){return box.tooltip.position(box.x,box.y,{repositionArrow:!0})})),this}},{key:"hide",value:function hide(options){var tooltips=this._tooltips;for(var key in tooltips)if({}.hasOwnProperty.call(tooltips,key)){var strategy=options.strategy||this._strategy;tooltips[key].content(strategy,null),tooltips[key].hide()}}}],[{key:"defaultConfig",value:function defaultConfig(){return{padding:5,offset:{x:0,y:0}}}},{key:"formalName",value:function formalName(){return"tooltip"}}]),Tooltip}();__webpack_require__(12);function crossline_typeof(obj){return(crossline_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function crossline_toConsumableArray(arr){return function crossline_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);i2&&void 0!==arguments[2]?arguments[2]:{},strategy=this._strategies[options.strategy||this._strategy];return!1!==selectionSet.isSourceFieldPresent&&strategy(selectionSet,this,options.strategy||this._strategy),this}}],[{key:"formalName",value:function formalName(){return"highlighter"}},{key:"target",value:function target(){return"visual-unit"}}]),PlotHighlighter}();function side_effects_filter_typeof(obj){return(side_effects_filter_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function side_effects_filter_defineProperties(target,props){for(var i=0;i67.5&&rotationNormalizer<=90||(yShift+=2*height),xShift=width,xShift=90===rotation?height:270===rotation?-height:0,orientation===axis_orientation_TOP?(xShift=fixedBaseline&&ticks[0]===d&&type===constants_LINEAR?xShift+xShift/2:xShift,renderer_utils_selectElement(this).attr("transform","translate(".concat(-xShift+tickSize,"\n ").concat(-yShift-tickSize,") rotate(").concat(rotation,")"))):(xShift=fixedBaseline&&ticks[0]===d&&type===constants_LINEAR?xShift-xShift/2:xShift,renderer_utils_selectElement(this).attr("transform","translate(".concat(xShift-tickSize,"\n ").concat(yShift+tickSize,") rotate(").concat(rotation,")"))),renderer_utils_selectElement(this).transition().duration(1e3).text(datum)}),tickText},axis_renderer_changeTickOrientation=function changeTickOrientation(selectContainer,axisInstance,tickSize){var _smartTicks=axisInstance._smartTicks,config=axisInstance.config(),renderConfig=axisInstance.renderConfig(),labelManager=axisInstance.dependencies().labelManager,orientation=config.orientation,classPrefix=config.classPrefix,labels=renderConfig.labels,rotation=labels.rotation,isSmartTicks=labels.smartTicks,tickText=selectContainer.selectAll(".tick text");if(tickText.selectAll("tspan").remove(),!rotation||"top"!==orientation&&"bottom"!==orientation)if(rotation||isSmartTicks){if(tickText.text(""),"top"===orientation||"bottom"===orientation)tickText.attr("y",0).attr("x",0).attr("transform","").text(""),makeElement(tickText,"tspan",function(d,i){return _smartTicks[i]?_smartTicks[i].lines:[]},"".concat(classPrefix,"-smart-text")).attr("dy","0").style("opacity","0").transition().duration(1e3).on("end",axisInstance.registerAnimationDoneHook()).attr("dy",function(d,i){return"bottom"===orientation||0!==i?_smartTicks[0].oriTextHeight:-_smartTicks[0].oriTextHeight*(_smartTicks[0].lines.length-1)-tickSize}).style("opacity",1).text(function(e){return e}).attr("x",0);else makeElement(tickText,"tspan",function(d,i){return _smartTicks[i].lines},"".concat(classPrefix,"-smart-text")).text(function(e){return e})}else tickText.attr("transform","");else axis_renderer_rotateAxis(axisInstance,tickText,labelManager);return tickText},axis_renderer_setFixedBaseline=function setFixedBaseline(axisInstance){var fixedBaseline=axisInstance.config().fixedBaseline,domain=axisInstance.domain();fixedBaseline&&domain.length&&axisInstance.setFixedBaseline()},axis_renderer_setAxisNamePos=function setAxisNamePos(textNode,orientation,measures){var axisNameHeight=measures.axisNameHeight,yOffset=measures.yOffset,labelOffset=measures.labelOffset,availableSpace=measures.availableSpace;switch(orientation){case axis_orientation_LEFT:textNode.attr("transform","translate(".concat(-(availableSpace.width-axisNameHeight),",").concat(yOffset+labelOffset,")rotate(-90)"));break;case axis_orientation_RIGHT:textNode.attr("transform","translate(".concat(availableSpace.width-axisNameHeight,",").concat(yOffset+labelOffset,")rotate(90)"));break;case axis_orientation_TOP:textNode.attr("transform","translate(".concat(availableSpace.width/2,",").concat(-availableSpace.height+axisNameHeight,")"));break;case axis_orientation_BOTTOM:textNode.attr("transform","translate(".concat(availableSpace.width/2,",").concat(availableSpace.height-axisNameHeight/2,")"))}return textNode};var setAxisRange=function setAxisRange(context,type,rangeBounds,offset){context.range(rangeBounds),offset&&context.config(function space_setter_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}({},"".concat(type,"Offset"),offset))},space_setter_adjustRange=function adjustRange(minDiff,range,domain,orientation){var diff=function getAxisOffset(timeDiff,range,domain){var width=Math.abs(range[1]-range[0])/(domain[1]-domain[0])*timeDiff,avWidth=range[1]-range[0],bars=avWidth/width;return(avWidth-avWidth/(bars+1)*bars)/2}(minDiff,range,domain);return orientation===axis_orientation_TOP||orientation===axis_orientation_BOTTOM?(range[0]+=diff,range[1]-=diff):(range[0]-=diff,range[1]+=diff),range},spaceSetter=function spaceSetter(context,spaceConfig){var tickInterval,heightForTicks,_context$availableSpa=context.availableSpace(),availWidth=_context$availableSpa.width,availHeight=_context$availableSpa.height,padding=_context$availableSpa.padding,top=padding.top,left=padding.left,bottom=padding.bottom,right=padding.right,isOffset=spaceConfig.isOffset,_context$renderConfig=context.renderConfig(),showAxisName=_context$renderConfig.showAxisName,labels=_context$renderConfig.labels,rotation=labels.rotation,_context$config2=context.config(),orientation=_context$config2.orientation,fixedBaseline=_context$config2.fixedBaseline,axisNamePadding=_context$config2.axisNamePadding,tickValues=_context$config2.tickValues,_context$getAxisDimen=context.getAxisDimensions(),tickDimensions=_context$getAxisDimen.tickDimensions,allTickDimensions=_context$getAxisDimen.allTickDimensions,axisNameDimensions=_context$getAxisDimen.axisNameDimensions,tickSize=_context$getAxisDimen.tickSize,tickDimHeight=tickDimensions.height,tickDimWidth=tickDimensions.width,namePadding=showAxisName?axisNamePadding:0,labelConfig={smartTicks:!0,rotation:labels.rotation},minTickDistance=context._minTickDistance,minTickSpace=context._minTickSpace,minDiff=context._minDiff,domain=context.domain(),axisNameHeight=axisNameDimensions.height;return{time:{x:function x(){var tickShifter=tickDimWidth/2;return setAxisRange(context,"y",space_setter_adjustRange(minDiff,[tickShifter,availWidth-left-right-tickShifter],domain,orientation),isOffset?availHeight:null),tickInterval=availWidth/context.getTickValues().length-minTickDistance.width,heightForTicks=availHeight-axisNameDimensions.availHeight-tickSize-namePadding,tickInterval0&&void 0!==arguments[0]?arguments[0]:0,width=arguments.length>1?arguments[1]:void 0,height=arguments.length>2?arguments[2]:void 0,rotatedHeight=height,rotatedWidth=width;if(rotation){var angle=(rotation||0)*Math.PI/180;rotatedWidth=Math.abs(height*Math.sin(angle))+Math.abs(width*Math.cos(angle)),rotatedHeight=Math.abs(width*Math.sin(angle))+Math.abs(height*Math.cos(angle))}return{width:rotatedWidth,height:rotatedHeight}},helper_setOffset=function setOffset(context){var x=0,y=0,logicalSpace=context.logicalSpace(),config=context.config(),orientation=config.orientation,xOffset=config.xOffset,yOffset=config.yOffset;orientation===axis_orientation_LEFT&&(x=void 0===xOffset?logicalSpace.width:xOffset),orientation===axis_orientation_TOP&&(y=void 0===yOffset?logicalSpace.height:yOffset),context.config({xOffset:x,yOffset:y})},getAxisComponentDimensions=function getAxisComponentDimensions(context){var axisTicks,largestTick="",largestTickDimensions={width:0,height:0},smartTick={},allTickDimensions=[],scale=context.scale(),showAxisName=context.renderConfig().showAxisName,_context$config=context.config(),tickValues=_context$config.tickValues,name=_context$config.name,labelManager=context.dependencies().labelManager,labelFunc=scale.ticks||scale.quantile||scale.domain;return labelManager.setStyle(context._tickLabelStyle),axisTicks=(axisTicks=tickValues||labelFunc()).map(function(originalLabel,i){var label=context.getFormattedText(originalLabel,i,axisTicks),tickDimensions=labelManager.getOriSize(label);return allTickDimensions.push(tickDimensions),tickDimensions.width>largestTickDimensions.width&&(largestTick=label,smartTick=context.smartTicks()?context.smartTicks()[i]:{},largestTickDimensions=tickDimensions),label}),labelManager.setStyle(context._axisNameStyle),{axisNameDimensions:showAxisName?labelManager.getOriSize(name):{width:0,height:0},largestTick:largestTick,largestTickDimensions:largestTickDimensions,allTickDimensions:allTickDimensions,axisTicks:axisTicks,smartTick:smartTick,tickSize:context.getTickSize()}},getHorizontalAxisSpace=function getHorizontalAxisSpace(context,axisDimensions,range){var width,height,domain=context.domain(),tickSize=axisDimensions.tickSize,tickDimensions=axisDimensions.tickDimensions,axisNameDimensions=axisDimensions.axisNameDimensions,_context$config2=context.config(),axisNamePadding=_context$config2.axisNamePadding,tickValues=_context$config2.tickValues,showAxisName=context.renderConfig().showAxisName,axisDimHeight=axisNameDimensions.height,tickDimHeight=tickDimensions.height,tickDimWidth=tickDimensions.width;if(width=range&&range.length?range[1]-range[0]:0,height=0,tickValues){var minTickDiff=context.getMinTickDifference(),_ref=[Math.min.apply(Math,cartesian_axis_helper_toConsumableArray(tickValues).concat(cartesian_axis_helper_toConsumableArray(domain))),Math.max.apply(Math,cartesian_axis_helper_toConsumableArray(tickValues).concat(cartesian_axis_helper_toConsumableArray(domain)))];width=(_ref[1]-_ref[0])/Math.abs(minTickDiff)*(tickDimWidth+context._minTickDistance.width)}return height=width&&0!==width?tickDimHeight:Math.max(tickDimWidth,tickDimHeight),{width:width,height:height+=(showAxisName?axisDimHeight+axisNamePadding:0)+tickSize}},getVerticalAxisSpace=function getVerticalAxisSpace(context,axisDimensions){var height,width,domain=context.domain(),tickSize=axisDimensions.tickSize,tickDimensions=axisDimensions.tickDimensions,axisNameDimensions=axisDimensions.axisNameDimensions,_context$config3=context.config(),axisNamePadding=_context$config3.axisNamePadding,tickValues=_context$config3.tickValues,showAxisName=context.renderConfig().showAxisName,axisDimHeight=axisNameDimensions.height,tickDimHeight=tickDimensions.height;if(height=0,width=tickDimensions.width,tickValues){var minTickDiff=context.getMinTickDifference(),_ref2=[Math.min.apply(Math,cartesian_axis_helper_toConsumableArray(tickValues).concat(cartesian_axis_helper_toConsumableArray(domain))),Math.max.apply(Math,cartesian_axis_helper_toConsumableArray(tickValues).concat(cartesian_axis_helper_toConsumableArray(domain)))];height=(_ref2[1]-_ref2[0])/Math.abs(minTickDiff)*tickDimHeight}return{height:height,width:width+=(showAxisName?axisDimHeight:0)+tickSize+axisNamePadding}},helper_calculateBandSpace=function calculateBandSpace(context){var range=context.range(),axisDimensions=context.getAxisDimensions(),orientation=context.config().orientation,show=context.renderConfig().show,largestTickDimensions=axisDimensions.largestTickDimensions,axisTicks=axisDimensions.axisTicks,allTickDimensions=axisDimensions.allTickDimensions,largestDimHeight=largestTickDimensions.height,minTickWidth=context._minTickDistance.width;if(orientation===axis_orientation_TOP||orientation===axis_orientation_BOTTOM){var _getHorizontalAxisSpa=getHorizontalAxisSpace(context,axisDimensions,range),_width=_getHorizontalAxisSpa.width,_height=_getHorizontalAxisSpa.height;return _width&&0!==_width||(_width=allTickDimensions.reduce(function(t,n){return t+Math.min(n.width,n.height)+minTickWidth},0)),!1===show&&(_height=0,_width=0),{width:_width,height:_height}}var _getVerticalAxisSpace=getVerticalAxisSpace(context,axisDimensions),width=_getVerticalAxisSpace.width,height=_getVerticalAxisSpace.height;return height&&0!==height||(height=axisTicks.length*(largestDimHeight+context._minTickDistance.height)+largestDimHeight),!1===show&&(width=0),{width:width,height:height}},helper_getValidDomain=function getValidDomain(context,domain){var userDom=context.config().domain;return userDom&&(domain=userDom),defaultValue(domain,[])},setContinousAxisDomain=function setContinousAxisDomain(context,domain){var nice=context.config().nice,scale=context.scale.bind(context);scale().domain(domain),nice&&scale().nice(),context._domain=scale().domain()},props_PROPS={availableSpace:{},axisDimensions:{},axisComponentDimensions:{},config:{sanitization:function sanitization(context,value){var oldConfig=Object.assign({},context._config||{}),mockedOldConfig=mergeRecursive({},oldConfig);(value=mergeRecursive(mockedOldConfig,value)).axisNamePadding=Math.max(value.axisNamePadding,0);var shouldAxesScaleUpdate=function hasAxesConfigChanged(){var obj=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},obj1=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},properties=arguments.length>2?arguments[2]:void 0;return!(!Object.keys(obj).length||!Object.keys(obj1).length)&&properties.some(function(key){return obj[key]!==obj1[key]})}(value,oldConfig,["interpolator","exponent","base","orientation"]),tickFormatter=context.sanitizeTickFormatter(value);shouldAxesScaleUpdate&&(context._scale=context.createScale(value),context._axis=context.createAxis(value)),context._tickFormatter=function(ticks){return tickFormatter(ticks)};var _value=value,labels=_value.labels,show=_value.show,showInnerTicks=_value.showInnerTicks,showOuterTicks=_value.showOuterTicks,showAxisName=_value.showAxisName;return context.renderConfig({labels:labels,show:show,showInnerTicks:showInnerTicks,showOuterTicks:showOuterTicks,showAxisName:showAxisName}),value}},renderConfig:{sanitization:function sanitization(context,value){var oldConfig=Object.assign({},context._renderConfig||{});return value=mergeRecursive(oldConfig,value)}},logicalSpace:{},mount:{},range:{sanitization:function sanitization(context,value){return context.scale().range(value),context.logicalSpace(null),value}},smartTicks:{},tickSize:{},maxTickSpaces:{},valueParser:{defaultValue:function defaultValue(val){return val}}};function simple_axis_defineProperties(target,props){for(var i=0;i0&&void 0!==arguments[0]?arguments[0]:0,height=arguments.length>1?arguments[1]:void 0,padding=arguments.length>2?arguments[2]:void 0,isOffset=arguments.length>3?arguments[3]:void 0,labelConfig={},orientation=this.config().orientation;return this.availableSpace({width:width,height:height,padding:padding}),labelConfig=orientation===axis_orientation_TOP||orientation===axis_orientation_BOTTOM?spaceSetter(this,{isOffset:isOffset}).continous.x():spaceSetter(this,{isOffset:isOffset}).continous.y(),this.renderConfig({labels:labelConfig}),this.setTickConfig(),this.getTickSize(),this}},{key:"setTickConfig",value:function setTickConfig(){return this}},{key:"getScaleValue",value:function getScaleValue(domainVal){if(null!==domainVal&&void 0!==domainVal)return this.scale()(domainVal)}},{key:"getTickSize",value:function getTickSize(){return this.axis().tickSize()}},{key:"getAxisDimensions",value:function getAxisDimensions(){for(var _len=arguments.length,params=new Array(_len),_key=0;_key<_len;_key++)params[_key]=arguments[_key];return this.axisDimensions(function computeAxisDimensions(context){var tickDimensions={},labels=context.renderConfig().labels,smartTicks=labels.smartTicks,rotation=labels.rotation,_getAxisComponentDime=getAxisComponentDimensions(context),largestTickDimensions=_getAxisComponentDime.largestTickDimensions,axisTicks=_getAxisComponentDime.axisTicks,smartTick=_getAxisComponentDime.smartTick,axisNameDimensions=_getAxisComponentDime.axisNameDimensions,allTickDimensions=_getAxisComponentDime.allTickDimensions,tickSize=_getAxisComponentDime.tickSize,labelHeight=largestTickDimensions.height,labelWidth=largestTickDimensions.width;return 0===context.domain().length?null:(tickDimensions=getRotatedSpaces(rotation,(tickDimensions=smartTicks?smartTick:{width:labelWidth,height:labelHeight}).width,tickDimensions.height),0===tickSize&&(tickDimensions={width:0,height:0}),{allTickDimensions:allTickDimensions,tickSize:tickSize,tickDimensions:tickDimensions,axisNameDimensions:axisNameDimensions,largestTickDimensions:largestTickDimensions,axisTicks:axisTicks})}.apply(void 0,[this].concat(params))),this.axisDimensions()}},{key:"getLogicalSpace",value:function getLogicalSpace(){return this.logicalSpace()||(this.logicalSpace(function calculateContinousSpace(context){var range=context.range(),axisDimensions=context.getAxisDimensions(),orientation=context.config().orientation,_context$renderConfig6=context.renderConfig(),show=_context$renderConfig6.show,showAxisName=_context$renderConfig6.showAxisName,axisNameDimensions=axisDimensions.axisNameDimensions;if(!1===show)return{width:0,height:0};var axisNameWidth=axisNameDimensions.width;if(orientation===axis_orientation_TOP||orientation===axis_orientation_BOTTOM){var _getHorizontalAxisSpa2=getHorizontalAxisSpace(context,axisDimensions,range),_width2=_getHorizontalAxisSpa2.width,_height2=_getHorizontalAxisSpa2.height;return{width:Math.max(_width2,axisNameWidth),height:_height2}}var _getVerticalAxisSpace2=getVerticalAxisSpace(context,axisDimensions),width=_getVerticalAxisSpace2.width,height=_getVerticalAxisSpace2.height;return{width:width,height:Math.max(height,showAxisName?axisNameWidth:0)}}(this)),this.logicalSpace(),helper_setOffset(this)),this.logicalSpace()}},{key:"invert",value:function invert(value){return this.scale().invert(value)}},{key:"getNearestRange",value:function getNearestRange(v1,v2){return[v1,v2]}},{key:"invertExtent",value:function invertExtent(v1,v2){return[this.invert(v1),this.invert(v2)]}},{key:"getMinTickDifference",value:function getMinTickDifference(){return this.domain()}},{key:"getFormattedTickValues",value:function getFormattedTickValues(tickValues){return tickValues}},{key:"getUnitWidth",value:function getUnitWidth(){return 0}},{key:"serialize",value:function serialize(){return{name:this.name,type:this.type,range:this.range(),config:this.config()}}},{key:"render",value:function render(){return this.mount()&&(this.setTickConfig(),function renderAxis(axisInstance){var config=axisInstance.config(),renderConfig=axisInstance.renderConfig(),labelManager=axisInstance.dependencies().labelManager,mount=axisInstance.mount(),range=axisInstance.range(),axis=axisInstance.axis(),scale=axisInstance.scale(),axisNameStyle=axisInstance._axisNameStyle,tickLabelStyle=axisInstance._tickLabelStyle,axisTickFormatter=axisInstance._tickFormatter,tickValues=axisInstance.tickValues,orientation=config.orientation,name=config.name,xOffset=config.xOffset,yOffset=config.yOffset,axisNamePadding=config.axisNamePadding,className=config.className,id=config.id,classPrefix=config.classPrefix,show=renderConfig.show,showAxisName=renderConfig.showAxisName,labels=renderConfig.labels;if(show){var tickSize=axisInstance.getTickSize(),selectContainer=makeElement(renderer_utils_selectElement(mount),"g",[axisInstance],"".concat(className),{},function(key){return key.config().id});labelManager.setStyle(tickLabelStyle);var labelFunc=scale.ticks||scale.quantile||scale.domain;axis.tickFormat(axisTickFormatter(tickValues||axis.tickValues()||labelFunc()));var availableSpace=Math.abs(range[0]-range[1]),labelProps=axisInstance.axisComponentDimensions().largestTickDimensions;selectContainer.attr("transform","translate(".concat(xOffset,",").concat(yOffset,")")),axis_renderer_setFixedBaseline(axisInstance),!1===labels.smartTicks||0===tickSize?selectContainer.transition().duration(1e3).on("end",axisInstance.registerAnimationDoneHook()).call(axis):selectContainer.call(axis),selectContainer.selectAll(".tick").classed("".concat(classPrefix,"-ticks"),!0),selectContainer.selectAll(".tick line").classed("".concat(classPrefix,"-tick-lines"),!0),selectContainer.selectAll(".tick text").classed("".concat(classPrefix,"-ticks"),!0).classed("".concat(classPrefix,"-ticks-").concat(id),!0),axis_renderer_changeTickOrientation(selectContainer,axisInstance,tickSize);var textNode=makeElement(selectContainer,"text",[name],"".concat(classPrefix,"-axis-name")).attr("text-anchor","middle").classed("".concat(classPrefix,"-axis-name-").concat(id),!0).text(function(d){return d});textNode.classed(HIDDEN,!showAxisName);var labelOffset=availableSpace/2;labelManager.setStyle(axisNameStyle);var axisNameSpace=labelManager.getOriSize(name),measures={labelProps:labelProps,tickSize:tickSize,axisNamePadding:axisNamePadding,axisNameHeight:axisNameSpace.height,axisNameWidth:axisNameSpace.width,yOffset:yOffset,xOffset:xOffset,labelOffset:labelOffset,availableSpace:axisInstance.availableSpace()};axis_renderer_setAxisNamePos(textNode,orientation,measures)}}(this)),this}},{key:"remove",value:function remove(){return renderer_utils_selectElement(this.mount()).remove(),this}},{key:"unsubscribe",value:function unsubscribe(){return this}},{key:"isReverse",value:function isReverse(){var range=this.range();return range[0]>range[1]}},{key:"getPixelToValueRatio",value:function getPixelToValueRatio(){var scale=this.scale(),range=scale.range(),domain=scale.domain();return Math.abs(range[1]-range[0])/(domain[1]-domain[0])}},{key:"animationDone",value:function animationDone(){return Promise.all(this._animationDonePromises)}},{key:"registerAnimationDoneHook",value:function registerAnimationDoneHook(){var resolveFn,promise=new Promise(function(resolve){resolveFn=resolve});return this._animationDonePromises.push(promise),function(){resolveFn()}}},{key:"id",get:function get(){return this._id}}],[{key:"defaultConfig",value:function defaultConfig(){return cartesian_axis_default_config_defaultConfig}}]),SimpleAxis}();function linear_defineProperties(target,props){for(var i=0;i0&&void 0!==arguments[0]?arguments[0]:0,height=arguments.length>1?arguments[1]:void 0,padding=arguments.length>2?arguments[2]:void 0,isOffset=arguments.length>3?arguments[3]:void 0,labelConfig={},orientation=this.config().orientation;return this.availableSpace({width:width,height:height,padding:padding}),labelConfig=orientation===axis_orientation_TOP||orientation===axis_orientation_BOTTOM?spaceSetter(this,{isOffset:isOffset}).continous.x():spaceSetter(this,{isOffset:isOffset}).continous.y(),this.renderConfig({labels:labelConfig}),this.setTickConfig(),this.getTickSize(),this}},{key:"setTickConfig",value:function setTickConfig(){var tickValues=this.config().tickValues,showInnerTicks=this.renderConfig().showInnerTicks,axis=this.axis();return showInnerTicks?tickValues?(tickValues instanceof Array&&this.axis().tickValues(tickValues),this):(axis.tickValues(this.getTickValues()),this):(axis.tickValues([]),this)}},{key:"getTickValues",value:function getTickValues(){var _this$config3=this.config(),orientation=_this$config3.orientation,tickValues=_this$config3.tickValues,range=this.range(),axis=this.axis(),availableSpace=Math.abs(range[0]-range[1]),labelProps=this.axisComponentDimensions().largestTickDimensions;return tickValues?axis.scale().ticks(tickValues):function getNumberOfTicks(availableSpace,labelDim,axis,axisInstance){var ticks=axis.scale().ticks(),numberOfTicks=axisInstance.config().numberOfTicks,tickLength=ticks.length,numberOfValues=tickLength;return tickLength*(1.5*labelDim)>availableSpace&&(numberOfValues=Math.floor(availableSpace/(1.5*labelDim))),numberOfValues=Math.min(numberOfTicks,Math.max(2,numberOfValues)),axis.scale().ticks(numberOfValues)}(availableSpace,labelProps[orientation===axis_orientation_BOTTOM||orientation===axis_orientation_TOP?"width":"height"],axis,this)}},{key:"getMinTickDifference",value:function getMinTickDifference(){return getSmallestDiff(this.config().tickValues)}},{key:"setFixedBaseline",value:function setFixedBaseline(tickText){var orientation=this.config().orientation,rotation=this.renderConfig().labels.rotation,axis=this.axis(),ticks=axis.scale().ticks(),_this$axisComponentDi=this.axisComponentDimensions().allTickDimensions[0],width=_this$axisComponentDi.width,height=_this$axisComponentDi.height;return axis.tickTransform(function(d){if(d===ticks[0]){if(orientation===axis_orientation_LEFT||orientation===axis_orientation_RIGHT)return"translate(0, -".concat(height/3,"px)");if((orientation===axis_orientation_TOP||orientation===axis_orientation_BOTTOM)&&!rotation)return"translate(".concat(width/2,"px, ",0,"px)")}return""}),tickText}}],[{key:"type",value:function type(){return LINEAR}}]),ContinousAxis}();function band_axis_typeof(obj){return(band_axis_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function band_axis_defineProperties(target,props){for(var i=0;i0&&void 0!==arguments[0]?arguments[0]:0,height=arguments.length>1?arguments[1]:void 0,padding=arguments.length>2?arguments[2]:void 0,isOffset=arguments.length>3?arguments[3]:void 0,labelConfig={},orientation=this.config().orientation;return this.availableSpace({width:width,height:height,padding:padding}),labelConfig=orientation===axis_orientation_TOP||orientation===axis_orientation_BOTTOM?spaceSetter(this,{isOffset:isOffset}).band.x():spaceSetter(this,{isOffset:isOffset}).band.y(),this.renderConfig({labels:labelConfig}),this.setTickConfig(),this}},{key:"setTickConfig",value:function setTickConfig(){var smartlabel,smartTicks="",domain=this.domain(),labelManager=this._dependencies.labelManager,_this$config2=this.config(),tickValues=_this$config2.tickValues,padding=_this$config2.padding,labels=this.renderConfig().labels,_this$maxTickSpaces=this.maxTickSpaces(),availHeight=_this$maxTickSpaces.height,availWidth=_this$maxTickSpaces.width,noWrap=_this$maxTickSpaces.noWrap,_getRotatedSpaces=getRotatedSpaces(labels.rotation,availWidth,availHeight),width=_getRotatedSpaces.width,height=_getRotatedSpaces.height;if(tickValues&&this.axis().tickValues(tickValues),smartTicks=tickValues||domain,labelManager.setStyle(this._tickLabelStyle),"number"==typeof padding&&padding>=0&&padding<=1&&this.scale().padding(padding),domain&&domain.length){var values=tickValues||domain,tickFormatter=this._tickFormatter(values);smartTicks=values.map(function(d,i){return labelManager.useEllipsesOnOverflow(!0),smartlabel=labelManager.getSmartText(tickFormatter(d,i),width,height,noWrap),labelManager.constructor.textToLines(smartlabel)})}return this.smartTicks(smartTicks),this}},{key:"getLogicalSpace",value:function getLogicalSpace(){return this.logicalSpace()||(this.logicalSpace(helper_calculateBandSpace(this)),helper_setOffset(this),this.logicalSpace()),this.logicalSpace()}},{key:"getTickValues",value:function getTickValues(){return this.axis().scale().domain()}},{key:"sanitizeTickFormatter",value:function sanitizeTickFormatter(value){var _this=this,tickFormat=value.tickFormat;return tickFormat?function(ticks){return function(val,i){return tickFormat(val,val,i,ticks)}}:function(){return function(val){return _this.valueParser()(val)}}}},{key:"getUnitWidth",value:function getUnitWidth(){return this.scale().bandwidth()}},{key:"getTickSize",value:function getTickSize(){var _this$renderConfig2=this.renderConfig(),showInnerTicks=_this$renderConfig2.showInnerTicks,showOuterTicks=_this$renderConfig2.showOuterTicks,axis=this.axis();return axis.tickSizeInner(showInnerTicks?6:0),axis.tickSizeOuter(showOuterTicks?6:0),axis.tickSize()}},{key:"invertExtent",value:function invertExtent(v1,v2){return this.scale().invertExtent(v1,v2)}},{key:"getNearestRange",value:function getNearestRange(v1,v2){var scale=this.scale(),range=scale.range(),reverse=range[0]>range[1],extent=this.invertExtent(v1,v2);return[scale(reverse?extent[extent.length-1]:extent[0]),scale(reverse?extent[0]:extent[extent.length-1])+scale.bandwidth()]}}],[{key:"type",value:function type(){return BAND}}]),BandAxis}();function time_axis_typeof(obj){return(time_axis_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function time_axis_defineProperties(target,props){for(var i=0;i0&&void 0!==arguments[0]?arguments[0]:0,height=arguments.length>1?arguments[1]:void 0,padding=arguments.length>2?arguments[2]:void 0,isOffset=arguments.length>3?arguments[3]:void 0,labelConfig={},orientation=this.config().orientation;return this.availableSpace({width:width,height:height,padding:padding}),labelConfig=orientation===axis_orientation_TOP||orientation===axis_orientation_BOTTOM?spaceSetter(this,{isOffset:isOffset}).time.x():spaceSetter(this,{isOffset:isOffset}).time.y(),this.renderConfig({labels:labelConfig}),this.setTickConfig(),this.getTickSize(),this}},{key:"setTickConfig",value:function setTickConfig(){var smartTicks,smartlabel,tickValues=this.config().tickValues,labels=this.renderConfig().labels,_this$maxTickSpaces=this.maxTickSpaces(),availHeight=_this$maxTickSpaces.height,availWidth=_this$maxTickSpaces.width,noWrap=_this$maxTickSpaces.noWrap,labelManager=this._dependencies.labelManager,domain=this.getTickValues();tickValues&&this.axis().tickValues(tickValues);var _getRotatedSpaces=getRotatedSpaces(labels.rotation,availWidth,availHeight),width=_getRotatedSpaces.width,height=_getRotatedSpaces.height;if(smartTicks=tickValues||domain,labelManager.setStyle(this._tickLabelStyle),domain&&domain.length){var values=tickValues||domain,tickFormatter=this._tickFormatter(values);smartTicks=values.map(function(d,i){return labelManager.useEllipsesOnOverflow(!0),smartlabel=labelManager.getSmartText(tickFormatter(d,i),width,height,noWrap),labelManager.constructor.textToLines(smartlabel)})}return this.smartTicks(smartTicks),this}}],[{key:"type",value:function type(){return TIME}}]),TimeAxis}(),x11Colors={Pink:{hex:"ffc0cb",rgb:"255,192,203"},LightPink:{hex:"ffb6c1",rgb:"255,182,193"},HotPink:{hex:"ff69b4",rgb:"255,105,180"},DeepPink:{hex:"ff1493",rgb:"255,20,147"},PaleVioletRed:{hex:"db7093",rgb:"219,112,147"},MediumVioletRed:{hex:"c71585",rgb:"199,21,133"},LightSalmon:{hex:"ffa07a",rgb:"255,160,122"},Salmon:{hex:"fa8072",rgb:"250,128,114"},DarkSalmon:{hex:"e9967a",rgb:"233,150,122"},LightCoral:{hex:"f08080",rgb:"240,128,128"},IndianRed:{hex:"cd5c5c",rgb:"205,92,92"},Crimson:{hex:"dc143c",rgb:"220,20,60"},FireBrick:{hex:"b22222",rgb:"178,34,34"},DarkRed:{hex:"8b0000",rgb:"139,0,0"},Red:{hex:"ff0000",rgb:"255,0,0"},OrangeRed:{hex:"ff4500",rgb:"255,69,0"},Tomato:{hex:"ff6347",rgb:"255,99,71"},Coral:{hex:"ff7f50",rgb:"255,127,80"},DarkOrange:{hex:"ff8c00",rgb:"255,140,0"},Orange:{hex:"ffa500",rgb:"255,165,0"},Gold:{hex:"ffd700",rgb:"255,215,0"},Yellow:{hex:"ffff00",rgb:"255,255,0"},LightYellow:{hex:"ffffe0",rgb:"255,255,224"},LemonChiffon:{hex:"fffacd",rgb:"255,250,205"},LightGoldenrodYellow:{hex:"fafad2",rgb:"250,250,210"},PapayaWhip:{hex:"ffefd5",rgb:"255,239,213"},Moccasin:{hex:"ffe4b5",rgb:"255,228,181"},PeachPuff:{hex:"ffdab9",rgb:"255,218,185"},PaleGoldenrod:{hex:"eee8aa",rgb:"238,232,170"},Khaki:{hex:"f0e68c",rgb:"240,230,140"},DarkKhaki:{hex:"bdb76b",rgb:"189,183,107"},Cornsilk:{hex:"fff8dc",rgb:"255,248,220"},BlanchedAlmond:{hex:"ffebcd",rgb:"255,235,205"},Bisque:{hex:"ffe4c4",rgb:"255,228,196"},NavajoWhite:{hex:"ffdead",rgb:"255,222,173"},Wheat:{hex:"f5deb3",rgb:"245,222,179"},BurlyWood:{hex:"deb887",rgb:"222,184,135"},Tan:{hex:"d2b48c",rgb:"210,180,140"},RosyBrown:{hex:"bc8f8f",rgb:"188,143,143"},SandyBrown:{hex:"f4a460",rgb:"244,164,96"},Goldenrod:{hex:"daa520",rgb:"218,165,32"},DarkGoldenrod:{hex:"b8860b",rgb:"184,134,11"},Peru:{hex:"cd853f",rgb:"205,133,63"},Chocolate:{hex:"d2691e",rgb:"210,105,30"},SaddleBrown:{hex:"8b4513",rgb:"139,69,19"},Sienna:{hex:"a0522d",rgb:"160,82,45"},Brown:{hex:"a52a2a",rgb:"165,42,42"},Maroon:{hex:"800000",rgb:"128,0,0"},DarkOliveGreen:{hex:"556b2f",rgb:"85,107,47"},Olive:{hex:"808000",rgb:"128,128,0"},OliveDrab:{hex:"6b8e23",rgb:"107,142,35"},YellowGreen:{hex:"9acd32",rgb:"154,205,50"},LimeGreen:{hex:"32cd32",rgb:"50,205,50"},Lime:{hex:"00ff00",rgb:"0,255,0"},LawnGreen:{hex:"7cfc00",rgb:"124,252,0"},Chartreuse:{hex:"7fff00",rgb:"127,255,0"},GreenYellow:{hex:"adff2f",rgb:"173,255,47"},SpringGreen:{hex:"00ff7f",rgb:"0,255,127"},MediumSpringGreen:{hex:"00fa9a",rgb:"0,250,154"},LightGreen:{hex:"90ee90",rgb:"144,238,144"},PaleGreen:{hex:"98fb98",rgb:"152,251,152"},DarkSeaGreen:{hex:"8fbc8f",rgb:"143,188,143"},MediumSeaGreen:{hex:"3cb371",rgb:"60,179,113"},SeaGreen:{hex:"2e8b57",rgb:"46,139,87"},ForestGreen:{hex:"228b22",rgb:"34,139,34"},Green:{hex:"008000",rgb:"0,128,0"},DarkGreen:{hex:"006400",rgb:"0,100,0"},MediumAquamarine:{hex:"66cdaa",rgb:"102,205,170"},Aqua:{hex:"00ffff",rgb:"0,255,255"},Cyan:{hex:"00ffff",rgb:"0,255,255"},LightCyan:{hex:"e0ffff",rgb:"224,255,255"},PaleTurquoise:{hex:"afeeee",rgb:"175,238,238"},Aquamarine:{hex:"7fffd4",rgb:"127,255,212"},Turquoise:{hex:"40e0d0",rgb:"64,224,208"},MediumTurquoise:{hex:"48d1cc",rgb:"72,209,204"},DarkTurquoise:{hex:"00ced1",rgb:"0,206,209"},LightSeaGreen:{hex:"20b2aa",rgb:"32,178,170"},CadetBlue:{hex:"5f9ea0",rgb:"95,158,160"},DarkCyan:{hex:"008b8b",rgb:"0,139,139"},Teal:{hex:"008080",rgb:"0,128,128"},LightSteelBlue:{hex:"b0c4de",rgb:"176,196,222"},PowderBlue:{hex:"b0e0e6",rgb:"176,224,230"},LightBlue:{hex:"add8e6",rgb:"173,216,230"},SkyBlue:{hex:"87ceeb",rgb:"135,206,235"},LightSkyBlue:{hex:"87cefa",rgb:"135,206,250"},DeepSkyBlue:{hex:"00bfff",rgb:"0,191,255"},DodgerBlue:{hex:"1e90ff",rgb:"30,144,255"},CornflowerBlue:{hex:"6495ed",rgb:"100,149,237"},SteelBlue:{hex:"4682b4",rgb:"70,130,180"},RoyalBlue:{hex:"4169e1",rgb:"65,105,225"},Blue:{hex:"0000ff",rgb:"0,0,255"},MediumBlue:{hex:"0000cd",rgb:"0,0,205"},DarkBlue:{hex:"00008b",rgb:"0,0,139"},Navy:{hex:"000080",rgb:"0,0,128"},MidnightBlue:{hex:"191970",rgb:"25,25,112"},Lavender:{hex:"e6e6fa",rgb:"230,230,250"},Thistle:{hex:"d8bfd8",rgb:"216,191,216"},Plum:{hex:"dda0dd",rgb:"221,160,221"},Violet:{hex:"ee82ee",rgb:"238,130,238"},Orchid:{hex:"da70d6",rgb:"218,112,214"},Fuchsia:{hex:"ff00ff",rgb:"255,0,255"},Magenta:{hex:"ff00ff",rgb:"255,0,255"},MediumOrchid:{hex:"ba55d3",rgb:"186,85,211"},MediumPurple:{hex:"9370db",rgb:"147,112,219"},BlueViolet:{hex:"8a2be2",rgb:"138,43,226"},DarkViolet:{hex:"9400d3",rgb:"148,0,211"},DarkOrchid:{hex:"9932cc",rgb:"153,50,204"},DarkMagenta:{hex:"8b008b",rgb:"139,0,139"},Purple:{hex:"800080",rgb:"128,0,128"},Indigo:{hex:"4b0082",rgb:"75,0,130"},DarkSlateBlue:{hex:"483d8b",rgb:"72,61,139"},SlateBlue:{hex:"6a5acd",rgb:"106,90,205"},MediumSlateBlue:{hex:"7b68ee",rgb:"123,104,238"},White:{hex:"ffffff",rgb:"255,255,255"},Snow:{hex:"fffafa",rgb:"255,250,250"},Honeydew:{hex:"f0fff0",rgb:"240,255,240"},MintCream:{hex:"f5fffa",rgb:"245,255,250"},Azure:{hex:"f0ffff",rgb:"240,255,255"},AliceBlue:{hex:"f0f8ff",rgb:"240,248,255"},GhostWhite:{hex:"f8f8ff",rgb:"248,248,255"},WhiteSmoke:{hex:"f5f5f5",rgb:"245,245,245"},Seashell:{hex:"fff5ee",rgb:"255,245,238"},Beige:{hex:"f5f5dc",rgb:"245,245,220"},OldLace:{hex:"fdf5e6",rgb:"253,245,230"},FloralWhite:{hex:"fffaf0",rgb:"255,250,240"},Ivory:{hex:"fffff0",rgb:"255,255,240"},AntiqueWhite:{hex:"faebd7",rgb:"250,235,215"},Linen:{hex:"faf0e6",rgb:"250,240,230"},LavenderBlush:{hex:"fff0f5",rgb:"255,240,245"},MistyRose:{hex:"ffe4e1",rgb:"255,228,225"},Gainsboro:{hex:"dcdcdc",rgb:"220,220,220"},LightGray:{hex:"d3d3d3",rgb:"211,211,211"},Silver:{hex:"c0c0c0",rgb:"192,192,192"},DarkGrey:{hex:"a9a9a9",rgb:"169,169,169"},Grey:{hex:"808080",rgb:"128,128,128"},DimGrey:{hex:"696969",rgb:"105,105,105"},LightSlateGrey:{hex:"778899",rgb:"119,136,153"},SlateGrey:{hex:"708090",rgb:"112,128,144"},DarkSlateGrey:{hex:"2f4f4f",rgb:"47,79,79"},Black:{hex:"000000",rgb:"0,0,0"}},palette=["#086bb6","#f37d45","#f5ce02","#67bda0","#c54e4e","#ae70af"],DEFAULT_GRADIENT_COLOR="#eaeaea",DEFAULT_CONFIG={range:palette,value:palette[0],step:!1,stops:5,type:constants_LINEAR};function props_toConsumableArray(arr){return function props_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);i1?config.range:[DEFAULT_GRADIENT_COLOR].concat(props_toConsumableArray(config.range)));var oldConfig=mergeRecursive(defCon,context.config()),newConfig=mergeRecursive(oldConfig,config);return newConfig.range instanceof Array&&(newConfig.range=newConfig.range.map(function(e,i){return props_getActualHslColor(e,palette[i])}),newConfig.stops=config.stops||newConfig.range.length),newConfig.value=props_getActualHslColor(newConfig.value,newConfig.value),newConfig}},domain:{},scale:{},uniqueValues:{}},helper_treatNullMeasures=function treatNullMeasures(domainVal,scaledVal,minDomainScaledVal){return domainVal instanceof src_InvalidAwareTypes?minDomainScaledVal:scaledVal};function color_strategy_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}function color_strategy_toConsumableArray(arr){return function color_strategy_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);iMath.min(range.length,18))for(var interpolator=common_utils_piecewiseInterpolator()(function hslInterpolator(){return hslLong}(),range.map(function(e){return props_getHslString(e)})),i=0;i0&&void 0!==arguments[0]?arguments[0]:[];if(domain.length){var scale=this.scale(),range=scale.range?scale.range():null,scaleInfo=this._colorStrategy.domainRange()(domain,this.config().stops,range);this.domain(scaleInfo.domain),scaleInfo.range&&this.scale().range(scaleInfo.range),this.uniqueValues(scaleInfo.uniqueVals),this.scale().domain(scaleInfo.scaleDomain||this.domain())}return this}},{key:"serialize",value:function serialize(){return{type:this.constructor.type(),scale:this.scale(),domain:this.domain(),config:this.config()}}},{key:"transformColor",value:function transformColor(color,transformationArr){var h=360*color[0],s=100*color[1],l=100*color[2],a=color[3]||1,newH=h+transformationArr[0],newS=s+transformationArr[1],newL=l+transformationArr[2],newA=a+transformationArr[3]||0;return{color:"hsla(".concat(newH,",").concat(newS,"%,").concat(newL,"%,").concat(newA,")"),hsla:[newH/360,newS/100,newL/100,newA]}}},{key:"id",value:function id(){return this._id}}],[{key:"defaultConfig",value:function defaultConfig(){return DEFAULT_CONFIG}},{key:"type",value:function type(){return"color"}}]),ColorAxis}(),defaults_DEFAULT_CONFIG={value:36,range:[36,1e3]};function size_strategy_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}function size_strategy_toConsumableArray(arr){return function size_strategy_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);i0&&void 0!==arguments[0]?arguments[0]:0,value=this.config().value,scale=this.scale(),domain=this.domain()||[1,1];return scale&&domain[0]!==domain[1]?this._sizeStrategy.range(domainVal,scale,this.domain(),this.uniqueValues()):value}},{key:"updateDomain",value:function updateDomain(domain){if(domain){var domainInfo=(0,this._sizeStrategy.domain)(domain,this.config().intervals);this.domain(domainInfo.domain),this.uniqueValues(domainInfo.uniqueVals),this.scale().domain(domainInfo.scaleDomain||this.domain())}return this}},{key:"serialize",value:function serialize(){return{type:this.constructor.type(),scale:this.scale(),domain:this.domain(),range:this.range(),config:this.config()}}},{key:"id",value:function id(){return this._id}}],[{key:"defaultConfig",value:function defaultConfig(){return defaults_DEFAULT_CONFIG}},{key:"type",value:function type(){return"size"}}]),SizeAxis}(),shape_axis_defaults_DEFAULT_CONFIG={generator:null,value:"circle",range:["circle","diamond","star","cross","square","wye","triangle"]},shape_axis_props_PROPS={config:{},domain:{},scale:{},uniqueValues:{},generator:{}};function shape_axis_defineProperties(target,props){for(var i=0;i0&&void 0!==arguments[0]?arguments[0]:[];return domain.length&&(this.uniqueValues(domain),this.domain(domain),this.scale().domain(domain),this.config().generator&&(this._generatedShapes=function shapeGenerator(domain,generatorFn){var generatedShapes={};return domain.forEach(function(value){generatedShapes[value]=generatorFn(value)}),generatedShapes}(domain,this.config().generator))),this}},{key:"serialize",value:function serialize(){return{type:this.constructor.type(),scale:this.scale(),domain:this.domain(),range:this.config().range,config:this.config()}}},{key:"id",value:function id(){return this._id}}],[{key:"defaultConfig",value:function defaultConfig(){return shape_axis_defaults_DEFAULT_CONFIG}},{key:"type",value:function type(){return"shape"}}]),ShapeAxis}();function data_type_scale_map_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}var DATA_TYPES_MEASURE="measure",DATA_TYPES_TEMPORAL="temporal",group_transform=(data_type_scale_map_defineProperty(_dataTypeScaleMap={},"dimension",BAND),data_type_scale_map_defineProperty(_dataTypeScaleMap,DATA_TYPES_MEASURE,LINEAR),data_type_scale_map_defineProperty(_dataTypeScaleMap,DATA_TYPES_TEMPORAL,TIME),function(schema,data,config){var groupBy=config.groupBy instanceof Array?config.groupBy:[config.groupBy],groupByIndices=groupBy.map(function(fieldName){return schema.findIndex(function(d){return d.name===fieldName})});if(void 0!==groupByIndices.find(function(d){return-1===d}))throw new Error("Groupby field ".concat(groupBy," not found in schema"));var groupedData=function nestCollection(params){var nestFn=src_nest();return params.keys.forEach(function(key){return nestFn.key(function(d){return d[key]})}),nestFn.entries(params.data)}({keys:groupByIndices,data:data});return groupedData.forEach(function(d){var key=d.key;src_InvalidAwareTypes.isInvalid(key)&&(d.key=src_InvalidAwareTypes.getInvalidType(key))}),groupedData});var _transformMap;function transform_factory_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}var transformMap=(transform_factory_defineProperty(_transformMap={},"identity",function identityTransform(schema,data,config){return data}),transform_factory_defineProperty(_transformMap,"group",group_transform),transform_factory_defineProperty(_transformMap,"stack",function(schema,data,config){var uniqueField=config.uniqueField,valueField=config.value,groupBy=config.groupBy,sort=config.sort||"descending",normalizedData=function normalizeData(data,schema,valueField,uniqueField,groupBy){var groupedData=group_transform(schema,data,{groupBy:uniqueField}),uniqueFieldIndex=schema.findIndex(function(d){return d.name===uniqueField}),valueFieldIndex=schema.findIndex(function(d){return d.name===valueField}),seriesKeyIndex=schema.findIndex(function(d){return d.name===groupBy}),seriesKeys=data.map(function(d){return d[seriesKeyIndex]}).filter(function(item,pos,arr){return arr.indexOf(item)===pos}).sort(),fieldNames=schema.reduce(function(acc,obj,i){return acc[i]=obj.name,acc},{});return{data:groupedData.map(function(arr){var tuples={},rowObj=arr.values.reduce(function(acc,row){return acc=row.reduce(function(obj,value,i){return i===seriesKeyIndex?(obj[value]=row[valueFieldIndex],tuples[value]=row):i!==valueFieldIndex&&(obj[fieldNames[i]]=value),obj},acc)},{});return rowObj._tuple=tuples,seriesKeys.forEach(function(seriesKey){if(void 0===rowObj[seriesKey]){rowObj[seriesKey]=0;var newArr=new Array(arr.values[0].length);newArr[uniqueFieldIndex]=arr.key,newArr[seriesKeyIndex]=seriesKey,rowObj._tuple[seriesKey]=newArr}}),rowObj}),keys:seriesKeys}}(data,schema,valueField,uniqueField,groupBy),keys=normalizedData.keys,map={},orderBy=config.orderBy,orderIndex=schema.findIndex(function(d){return d.name===orderBy}),groupByIndex=schema.findIndex(function(d){return d.name===groupBy});-1!==orderIndex&&(keys.forEach(function(key){var name=data.find(function(d){return d[groupByIndex]===key});map[key]=name[orderIndex]}),normalizedData.keys.sort(function(a,b){return map[a].localeCompare(map[b])}));var stackData=common_utils_stack({keys:normalizedData.keys,offset:config.offset||"diverging",order:sort,data:normalizedData.data});return stackData.forEach(function(seriesData){seriesData.forEach(function(dataObj){dataObj.data=dataObj.data._tuple[seriesData.key]})}),stackData}),_transformMap);var transform_factory=function transformFactory(type){var transform=transformMap[type];if("function"!=typeof transform)throw new Error("Invalid transform type supplied.");return transform};function helpers_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}function helpers_toConsumableArray(arr){return function helpers_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);i3&&void 0!==arguments[3]?arguments[3]:{};return function base_layer_classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}(this,BaseLayer),_this=function base_layer_possibleConstructorReturn(self,call){return!call||"object"!==base_layer_typeof(call)&&"function"!=typeof call?base_layer_assertThisInitialized(self):call}(this,base_layer_getPrototypeOf(BaseLayer).call(this)),generateGetterSetters(base_layer_assertThisInitialized(base_layer_assertThisInitialized(_this)),props_props),_this.data(data),_this.axes(axes),_this.config(config),_this.alias(_this.constructor.formalName()+getUniqueId()),_this.dependencies(dependencies),_this._points=[],_this._cachedData=[],_this._id=getUniqueId(),_this._measurement={},_this._animationDonePromises=[],_this._customConfig=null,_this}return function base_layer_inherits(subClass,superClass){if("function"!=typeof superClass&&null!==superClass)throw new TypeError("Super expression must either be null or a function");subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:!0,configurable:!0}}),superClass&&base_layer_setPrototypeOf(subClass,superClass)}(BaseLayer,simple_layer_SimpleLayer),function base_layer_createClass(Constructor,protoProps,staticProps){return protoProps&&base_layer_defineProperties(Constructor.prototype,protoProps),staticProps&&base_layer_defineProperties(Constructor,staticProps),Constructor}(BaseLayer,[{key:"store",value:function store(){if(arguments.length){this._store=arguments.length<=0?void 0:arguments[0];var metaInf=this.metaInf(),localNs="".concat(namespace_namespaceObject.LAYER_LOCAL_NAMESPACE,".").concat(metaInf.namespace);!function initializeGlobalState(context){var store=context.store(),globalState=context.constructor.getState()[0],namespace=context.metaInf().namespace;for(var prop in globalState)store.append("".concat(namespace_namespaceObject.LAYER_GLOBAL_NAMESPACE,".").concat(prop),helpers_defineProperty({},namespace,null))}(this);var store=this.store();return store.append("".concat(namespace_namespaceObject.LAYER_LOCAL_NAMESPACE),function base_layer_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}({},metaInf.namespace,null)),common_utils_transactor(this,defaultOptions,store.model,{namespace:localNs}),common_utils_registerListeners(this,listener_map_listenerMap,{local:localNs,global:namespace_namespaceObject.LAYER_GLOBAL_NAMESPACE},{unitRowIndex:metaInf.unitRowIndex,unitColIndex:metaInf.unitColIndex}),this}return this._store}},{key:"domain",value:function domain(){var prop="".concat(namespace_namespaceObject.LAYER_GLOBAL_NAMESPACE,".").concat("domain",".").concat(this.metaInf().namespace);return arguments.length?(this.store().commit(prop,arguments.length<=0?void 0:arguments[0]),this):this.store().get(prop)}},{key:"encodingFieldsInf",value:function encodingFieldsInf(){return arguments.length?(this._encodingFieldsInf=arguments.length<=0?void 0:arguments[0],this):this._encodingFieldsInf}},{key:"encodingTransform",value:function encodingTransform(){return arguments.length?(this._encodingTransform=arguments.length<=0?void 0:arguments[0],this):this._encodingTransform}},{key:"alias",value:function alias(){return arguments.length?(this._alias=arguments.length<=0?void 0:arguments[0],this):this._alias||this.constructor.formalName()}},{key:"dependencies",value:function dependencies(){return arguments.length?(this._dependencies=arguments.length<=0?void 0:arguments[0],this):this._dependencies}},{key:"enableCaching",value:function enableCaching(){return this._cacheEnabled=!0,this}},{key:"clearCaching",value:function clearCaching(){return this._cacheEnabled=!1,this.data(this._cachedData[0])}},{key:"serialize",value:function serialize(){return this.config()}},{key:"id",value:function id(){return this._id}},{key:"getTransformedData",value:function getTransformedData(dataModel,config,transformType,encodingFieldsInf){return function transformData(dataModel,config,transformType,encodingFieldInf){var data=dataModel.getData({withUid:!0}),schema=data.schema,transform=config.transform,xField=encodingFieldInf.xField,yField=encodingFieldInf.yField,xFieldType=encodingFieldInf.xFieldType,yFieldType=encodingFieldInf.yFieldType,uniqueField=xFieldType===dist_datamodel.FieldType.MEASURE?yField:xField;return transform_factory(transformType)(schema,data.data,{groupBy:transform.groupBy,uniqueField:uniqueField,sort:transform.sort||"none",offset:transform.offset,orderBy:transform.orderBy,value:yFieldType===dist_datamodel.FieldType.MEASURE?yField:xField},data.uids)}(dataModel,config,transformType,encodingFieldsInf)}},{key:"calculateDomainFromData",value:function calculateDomainFromData(data){var domains={};return this.data().isEmpty()||(domains=function calculateDomainFromData(data,encodingFieldInf,transformType){var xFieldSubType=encodingFieldInf.xFieldSubType,yFieldSubType=encodingFieldInf.yFieldSubType,xField=encodingFieldInf.xField,yField=encodingFieldInf.yField,x0Field=encodingFieldInf.x0Field,y0Field=encodingFieldInf.y0Field,domains={},yEnc=ENCODING.Y,xEnc=ENCODING.X;return xField&&(domains.x=common_utils_getDomainFromData(data,x0Field||transformType===STACK?[xEnc,ENCODING.X0]:[xEnc,xEnc],xFieldSubType)),yField&&(domains.y=common_utils_getDomainFromData(data,y0Field||transformType===STACK?[ENCODING.Y0,ENCODING.Y]:[yEnc,yEnc],yFieldSubType)),domains}(data,this.encodingFieldsInf(),this.transformType())),domains}},{key:"getDataDomain",value:function getDataDomain(encodingType){var domains=this.store().get("".concat(namespace_namespaceObject.LAYER_GLOBAL_NAMESPACE,".").concat("domain",".").concat(this.metaInf().namespace));return void 0!==encodingType?domains[encodingType]||[]:domains}},{key:"getNormalizedData",value:function getNormalizedData(transformedData,fieldsConfig){return function getNormalizedData(transformedData,fieldsConfig,encodingFieldInf,transformType){var transformedDataArr="identity"===transformType?[transformedData]:transformedData,xFieldType=encodingFieldInf.xFieldType,xFieldIndex=encodingFieldInf.xFieldIndex,yFieldIndex=encodingFieldInf.yFieldIndex,x0FieldIndex=encodingFieldInf.x0FieldIndex,y0FieldIndex=encodingFieldInf.y0FieldIndex,fieldsLen=Object.keys(fieldsConfig).length;return transformedDataArr.map(function(data){return("group"===transformType?data.values:data).map(function(d){var tuple,y,y0,x,x0,pointObj={};return transformType===STACK?(tuple=d.data||[],d[1]>=d[0]?(y=x0=d[1],x=y0=d[0]):(y=x0=d[0],x=y0=d[1]),(pointObj=xFieldType===dist_datamodel.FieldType.MEASURE?{x:x,x0:x0,y:tuple[yFieldIndex],y0:tuple[yFieldIndex]}:{x:tuple[xFieldIndex],x0:tuple[xFieldIndex],y:y,y0:y0})._data=tuple,pointObj._id=tuple[fieldsLen]):((pointObj={x:d[xFieldIndex],y:d[yFieldIndex],x0:d[x0FieldIndex],y0:d[y0FieldIndex]})._data=d,pointObj._id=d[fieldsLen]),pointObj})}).filter(function(d){return d.length})}(transformedData,fieldsConfig,this.encodingFieldsInf(),this.transformType())}},{key:"getNearestPoint",value:function getNearestPoint(){return null}},{key:"applyInteractionStyle",value:function applyInteractionStyle(interactionType,selectionSet,apply,styles){var interactionStyles=(this.config().interaction||{})[interactionType];(interactionStyles=styles||interactionStyles)&&helpers_applyInteractionStyle(this,selectionSet,interactionStyles,{apply:apply,interactionType:interactionType})}},{key:"disableUpdate",value:function disableUpdate(){return this._updateLock=!0,this}},{key:"enableUpdate",value:function enableUpdate(){return this._updateLock=!1,this}},{key:"resolveTransformType",value:function resolveTransformType(){this._transformType=function getValidTransform(context){return helpers_resolveInvalidTransformType(context)||context.config().transform.type}(this)}},{key:"transformType",value:function transformType(){return this._transformType}},{key:"render",value:function render(){return this}},{key:"elemType",value:function elemType(){return"g"}},{key:"remove",value:function remove(){return this.store().unsubscribe({namespace:"".concat(namespace_namespaceObject.LAYER_LOCAL_NAMESPACE,".").concat(this.metaInf().namespace)}),renderer_utils_selectElement(this.mount()).remove(),this}},{key:"cachePoint",value:function cachePoint(key,data){if(null===key)return this;var pointMap=this._pointMap;return!pointMap[key]&&(pointMap[key]=[]),pointMap[key].push(data),this}},{key:"dataProps",value:function dataProps(){return arguments.length?(this._dataProps=arguments.length<=0?void 0:arguments[0],this):this._dataProps}},{key:"getIdentifiersFromData",value:function getIdentifiersFromData(data){var schema=this.data().getData().schema,fieldsConfig=this.data().getFieldsConfig(),identifiers=[[],[]],_this$encodingFieldsI=this.encodingFieldsInf(),xFieldType=_this$encodingFieldsI.xFieldType,yFieldType=_this$encodingFieldsI.yFieldType,xField=_this$encodingFieldsI.xField,yField=_this$encodingFieldsI.yField,_map2=base_layer_slicedToArray([xFieldType,yFieldType].map(function(type){return type===dist_datamodel.FieldType.MEASURE}),2),xMeasure=_map2[0],yMeasure=_map2[1];if(schema.forEach(function(d,i){var name=d.name;fieldsConfig[name].def.type===dist_datamodel.FieldType.DIMENSION&&(identifiers[0].push(name),identifiers[1].push(data[i]))}),xMeasure&&yMeasure){var _identifiers$,_identifiers$2,xMeasureIndex=fieldsConfig[xField].index,yMeasureIndex=fieldsConfig[yField].index;(_identifiers$=identifiers[0]).push.apply(_identifiers$,[xField,yField]),(_identifiers$2=identifiers[1]).push.apply(_identifiers$2,[data[xMeasureIndex],data[yMeasureIndex]])}return identifiers}},{key:"getPlotSpan",value:function getPlotSpan(){return{x:0,y:0}}},{key:"getPlotPadding",value:function getPlotPadding(){return{x:0,y:0}}},{key:"getPointsFromIdentifiers",value:function getPointsFromIdentifiers(identifiers){var _ref,fieldNames,values,config=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},getAllAttrs=config.getAllAttrs,getBBox=config.getBBox;if(!this.data())return[];if(identifiers instanceof datamodel_default.a){var dataObj=identifiers.getData();fieldNames=dataObj.schema.map(function(d){return d.name}),values=dataObj.data}else fieldNames=identifiers[0],values=identifiers.slice(1,identifiers.length);var points=this._points,fieldsConfig=this.data().getFieldsConfig(),filteredPoints=(_ref=[]).concat.apply(_ref,base_layer_toConsumableArray(points)).filter(function(point){var _data=point._data,_id=point._id;return fieldNames.every(function(field,idx){return field in fieldsConfig&&fieldsConfig[field].def.type===dist_datamodel.FieldType.DIMENSION?-1!==values.findIndex(function(d){return d[idx]===_data[fieldsConfig[field].index]}):field!==reserved_fields.ROW_ID||-1!==values.findIndex(function(d){return d[idx]===_id})})});return getAllAttrs?filteredPoints:filteredPoints.map(function(d){var obj=clone(d);if(getBBox){var update=obj.update||obj;if(void 0!==obj.size){var sizeVal=2*Math.sqrt(obj.size/Math.PI);update.width=sizeVal,update.height=sizeVal,update.x-=sizeVal/2,update.y-=sizeVal/2}else void 0===update.width&&(update.width=2),void 0===update.height&&(update.height=2)}return obj.update||obj}).sort(function(a,b){return a.y-b.y})}},{key:"getTransformedDataFromIdentifiers",value:function getTransformedDataFromIdentifiers(identifiers){var measureIndex,enc,_identifiers$getData=identifiers.getData(),identifierData=_identifiers$getData.data,identifierSchema=_identifiers$getData.schema,normalizedData=this._normalizedData,fieldsConfig=this.data().getFieldsConfig(),_this$encodingFieldsI2=this.encodingFieldsInf(),yField=_this$encodingFieldsI2.yField,xField=_this$encodingFieldsI2.xField,yFieldType=_this$encodingFieldsI2.yFieldType;_this$encodingFieldsI2.xFieldType===dist_datamodel.FieldType.MEASURE?(measureIndex=fieldsConfig[xField].index,enc="x"):yFieldType===dist_datamodel.FieldType.MEASURE&&(measureIndex=fieldsConfig[yField].index,enc="y");var transformedData=[];return normalizedData.forEach(function(dataArr){dataArr.forEach(function(dataObj){var tupleArr=dataObj._data;if(identifierSchema.every(function(obj,i){return-1!==identifierData.findIndex(function(d){return tupleArr[fieldsConfig[obj.name].index]===d[i]})})){var transformedVal=dataObj[enc],row=dataObj._data,tuple={};for(var key in fieldsConfig){var index=fieldsConfig[key].index;tuple[key]=row[index],index===measureIndex&&(tuple[key]=transformedVal)}transformedData.push(tuple)}})}),[transformedData,this.data().getData().schema]}},{key:"getPlotElementsFromSet",value:function getPlotElementsFromSet(set){return renderer_utils_selectElement(this.mount()).selectAll(this.elemType()).filter(function(data){return!!data&&-1!==set.indexOf(data._id)})}},{key:"animationDone",value:function animationDone(){return Promise.all(this._animationDonePromises)}},{key:"registerAnimationDoneHook",value:function registerAnimationDoneHook(){var resolveFn,promise=new Promise(function(resolve){resolveFn=resolve});return this._animationDonePromises.push(promise),function(){resolveFn()}}},{key:"getRenderProps",value:function getRenderProps(){var metaInf=this.metaInf();return["".concat(namespace_namespaceObject.GROUP_GLOBAL_NAMESPACE,".domain.y.").concat(metaInf.unitRowIndex,"0"),"".concat(namespace_namespaceObject.GROUP_GLOBAL_NAMESPACE,".domain.x.").concat(metaInf.unitColIndex,"0")]}}],[{key:"getState",value:function getState(){return[{domain:{}},{config:{},data:{}}]}},{key:"create",value:function create(){for(var _len=arguments.length,params=new Array(_len),_key=0;_key<_len;_key++)params[_key]=arguments[_key];return base_layer_construct(this,params)}},{key:"defaultConfig",value:function defaultConfig(){return{transform:{type:"identity"}}}},{key:"defaultPolicy",value:function defaultPolicy(conf,userConf){return mergeRecursive(conf,userConf)}},{key:"formalName",value:function formalName(){return"base"}},{key:"shouldDrawAnchors",value:function shouldDrawAnchors(){return!1}}]),BaseLayer}(),renderer_line=Symbols.line,renderer_filterFn=function filterFn(d){var update=d.update;return null!==update.y&&null!==update.x},renderer_drawLine=function drawLine(context){var filteredPoints,layer=context.layer,container=context.container,points=context.points,interpolate=context.interpolate,connectNullData=context.connectNullData,className=context.className,style=context.style,transition=context.transition,mount=renderer_utils_selectElement(container).attr("class",className),curveInterpolatorFn=pathInterpolators[interpolate],linepath=renderer_line().curve(curveInterpolatorFn).x(function(d){return d.update.x}).y(function(d){return d.update.y}).defined(renderer_filterFn);filteredPoints=points,connectNullData&&(filteredPoints=points.filter(renderer_filterFn)),helpers_updateStyle(mount,style);var element=makeElement(mount,"path",[1]);return element.classed(points[0].className,!0),transition.disabled||(element=element.transition().duration(transition.duration).on("end",layer.registerAnimationDoneHook())),element.attr("d",linepath(filteredPoints)).style("fill-opacity",0),element},line_default_config_defaultConfig={classPrefix:"muze",defClassName:"layer-line",className:"",interpolate:"linear",transform:{type:"group"},interaction:{highlight:[{type:"stroke",intensity:[0,0,-15,0]}],fade:[{type:"stroke",intensity:[0,0,15,0]}],focus:[{type:"stroke",intensity:[0,0,15,0]}]},nearestPointThreshold:20,encoding:{color:{},x:{},y:{},strokeOpacity:{value:1}},transition:{effect:"cubic",duration:1e3},connectNullData:!1};__webpack_require__(15);function line_typeof(obj){return(line_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function line_defineProperties(target,props){for(var i=0;i2&&void 0!==arguments[2]?arguments[2]:{},dataPoint=renderer_utils_selectElement(config.event.target).data()[0];if(isSimpleObject(dataPoint)){var _dataPoint$datum=dataPoint.datum,data=_dataPoint$datum.data,uid=_dataPoint$datum.uid;return{id:this.getIdentifiersFromData(data,uid),layerId:this.id()}}return null}},{key:"getPlotElementsFromSet",value:function getPlotElementsFromSet(set){return renderer_utils_selectElement(this.mount()).selectAll(this.elemType()).filter(function(d){return-1!==set.indexOf(d.datum.uid)})}},{key:"render",value:function render(container){var _this3=this,_this$measurement=this.measurement(),height=_this$measurement.height,width=_this$measurement.width,_this$config=this.config(),classPrefix=_this$config.classPrefix,defClassName=_this$config.defClassName,minOuterRadius=_this$config.minOuterRadius,innerRadius=_this$config.innerRadius,outerRadius=_this$config.outerRadius,cornerRadius=_this$config.cornerRadius,padAngle=_this$config.padAngle,padRadius=_this$config.padRadius,padding=_this$config.padding,transition=_this$config.transition,innerRadiusFixer=_this$config.innerRadiusFixer,sizeAxis=this.axes().size,transformedData=this._transformedData,chartHeight=height-padding.top-padding.bottom,chartWidth=width-padding.left-padding.right,qualClassName=getQualifiedClassName(defClassName,this.id(),classPrefix),range=function getRadiusRange(width,height,config){var minOuterRadius=config.minOuterRadius,innerRadius=config.innerRadius,outerRadius=config.outerRadius,innerRadiusFixer=config.innerRadiusFixer;return[Math.max(innerRadius+innerRadiusFixer||0,minOuterRadius),outerRadius||Math.min(height,width)/2]}(chartWidth,chartHeight,{minOuterRadius:minOuterRadius,innerRadius:innerRadius,outerRadius:outerRadius,innerRadiusFixer:innerRadiusFixer}),colorAxis=this.axes().color,defaultRadius=outerRadius||Math.min(chartHeight,chartWidth)/2,radiusDomain=this.domain().radius,rangeValueGetter=function rangeValueGetter(d){return function getRangeValue(datum,range,domain,defaultRadius,sizeAxis){var domainMultiplier=1,outerRadiusValue=datum.outerRadiusValue,sizeVal=datum.sizeVal,sizeAxisDomain=sizeAxis.domain(),sizeMultiplier=sizeAxis.getSize(sizeVal)/(sizeAxisDomain?sizeAxis.range()[1]:sizeAxis.config().value);return domainMultiplier*=(range[1]-range[0])/(domain[1]-domain[0]),(range[0]+(outerRadiusValue-domain[0])*domainMultiplier||defaultRadius)*sizeMultiplier}(d,range,radiusDomain,defaultRadius,sizeAxis)},path=arc_arc().innerRadius(innerRadius?Math.min(chartHeight/2,chartWidth/2,innerRadius):0).cornerRadius(cornerRadius).padAngle(padAngle).padRadius(padRadius);this._chartWidth=chartWidth,this._chartHeight=chartHeight;var g=makeElement(renderer_utils_selectElement(container),"g",[1],"".concat(qualClassName[0],"-group")).classed("".concat(qualClassName[1],"-group"),!0).attr("transform","translate(".concat(chartWidth/2,",").concat(chartHeight/2,")")),consecutiveExits=[],exitCounter=0;return makeElement(g,"g",transformedData,"".concat(qualClassName[0]),{update:function tween(elem){makeElement(elem,"path",function(d,i){return[{datum:d,index:i,arcFn:path,meta:{originalColor:colorAxis.getRawColor(d.colorVal),stateColor:{},colorTransform:{}}}]},"".concat(qualClassName[0],"-path")).style("fill",function(d){return colorAxis.getColor(d.datum.colorVal)}).transition().duration(transition.duration).on("end",_this3.registerAnimationDoneHook()).attrTween("d",function(){for(var _len=arguments.length,params=new Array(_len),_key=0;_key<_len;_key++)params[_key]=arguments[_key];return function tweenPie(path,rangeValueGetter,b){var datum=b[0].datum,outerRadius=rangeValueGetter(datum);return datum.outerRadius=outerRadius,datum._previousInfo.outerRadius=datum._previousInfo.outerRadius||outerRadius,function(t){return path(common_utils_interpolator()(datum._previousInfo,datum)(t))}}(path,rangeValueGetter,params)}).attr("class",function(d,i){var individualClass=getIndividualClassName(d,i,transformedData,_this3);return"".concat(qualClassName[0],"-path ").concat(qualClassName[1],"-path-").concat(d.index,"\n ").concat(individualClass)})},exit:function tweenExit(elem,d){var exitArr=consecutiveExits[exitCounter],oldExitCounter=exitCounter;exitArr?exitArr[exitArr.length-1].datum.index===d.index-1?exitArr.push({elem:elem,datum:d}):exitCounter++:exitArr=[{elem:elem,datum:d}],consecutiveExits[oldExitCounter]=exitArr}}).attr("class",function(d,i){return"".concat(qualClassName[0]," ").concat(qualClassName[1],"-").concat(i)}),function tweenExitPie(consecutiveExits,transition,rangeValueGetter,path){consecutiveExits.length>0&&consecutiveExits.forEach(function(consecutiveExitArr){var startAngle=consecutiveExitArr[0].datum.startAngle,endAngle=consecutiveExitArr[consecutiveExitArr.length-1].datum.endAngle,mid=2*Math.PI*startAngle/(2*Math.PI+startAngle-endAngle);consecutiveExitArr.forEach(function(e){var elem=e.elem,datum=e.datum;elem.each(function(){var gElem=renderer_utils_selectElement(this);gElem.selectAll("path").transition().duration(transition.duration).attrTween("d",function(){return function(t){var outerRadius=rangeValueGetter(datum);return datum.outerRadius=outerRadius,path(common_utils_interpolator()(datum,{startAngle:mid,endAngle:mid,outerRadius:outerRadius})(t))}}).remove(),gElem.remove()})})})}(consecutiveExits,transition,rangeValueGetter,path),this}},{key:"getPointsFromIdentifiers",value:function getPointsFromIdentifiers(identifiers){if(!this.data())return[];var fieldNames=identifiers[0],values=identifiers.slice(1,identifiers.length),pieSlices=renderer_utils_selectElement(this.mount()).selectAll("path").data(),fieldsConfig=this.data().getFieldsConfig(),pieSliceInf=pieSlices.filter(function(tData){var data=tData.datum.data,uid=tData.datum.uid;return fieldNames.every(function(field,idx){return field in fieldsConfig&&fieldsConfig[field].def.type===dist_datamodel.FieldType.DIMENSION?-1!==values.findIndex(function(d){return d[idx]===data[fieldsConfig[field].index]}):field!==reserved_fields.ROW_ID||-1!==values.findIndex(function(d){return d[idx]===uid})})})[0];if(pieSliceInf){var centroid=pieSliceInf.arcFn.centroid(pieSliceInf.datum);return[{x:centroid[0]+this._chartWidth/2,y:centroid[1]+this._chartHeight/2,width:2,height:2}]}return[]}},{key:"getRenderProps",value:function getRenderProps(){return["".concat(namespace_namespaceObject.GROUP_GLOBAL_NAMESPACE,".domain.radius")]}}],[{key:"defaultConfig",value:function defaultConfig(){return arc_default_config_defaultConfig}},{key:"formalName",value:function formalName(){return"arc"}}]),ArcLayer}(),text_renderer=function drawText(container,data,config,smartLabel){var selection=renderer_utils_selectElement(container).selectAll("g").data(data),selectionMerge=selection.enter().append("g").each(function(dataObj){renderer_utils_setAttrs(this,dataObj.enter)}).merge(selection),style=renderer_utils_getSmartComputedStyle(renderer_utils_selectElement(container),config.className),fontSize=parseInt(style.fontSize,10);return smartLabel.setStyle(style),selectionMerge.each(function(dataObj){var backgroundVal,element=renderer_utils_selectElement(this),update=dataObj.update,text=dataObj.text,color=dataObj.color,textanchor=dataObj.textanchor,textStyle=dataObj.style,background=dataObj.background;if(backgroundVal=background.value){var diff,backgroundPadding=background.padding,_smartLabel$getOriSiz=smartLabel.getOriSize(dataObj.text),width=_smartLabel$getOriSiz.width,height=_smartLabel$getOriSiz.height,backgroundEl=makeElement(element,"rect",[1]);diff="end"===textanchor?width:"start"===textanchor?0:width/2,renderer_utils_setAttrs(backgroundEl.node(),{x:update.x-diff-backgroundPadding/2,y:update.y-fontSize-backgroundPadding/2,width:width+backgroundPadding,height:height+backgroundPadding}),background&&renderer_utils_setStyles(backgroundEl,{background:backgroundVal})}var textEl=makeElement(element,"text",function(d){return[d]}).text(text),textNode=textEl.node();textStyle&&renderer_utils_setStyles(textNode,textStyle),color&&renderer_utils_setStyles(textNode,{fill:color}),dataObj.className&&textEl.classed(dataObj.className,!0),renderer_utils_setAttrs(textNode,update),textEl.attr("text-anchor",textanchor)}),selection.exit().remove(),selection},text_default_config_defaultConfig={defClassName:"layer-text",classPrefix:"muze",className:"",transform:{type:"identity"},interaction:{highlight:[{type:"fill",intensity:[0,0,-15,0]}],fade:[{type:"fill",intensity:[0,0,15,0]}],focus:[{type:"fill",intensity:[0,0,15,0]}]},transition:{effect:"cubic",duration:1e3},encoding:{color:{},text:{value:"",formatter:function formatter(val,i,data,context){return context.valueParser()(val)},background:{padding:10}}},states:{highlight:{className:"".concat("muze","-layer-text-highlight")},fadeout:{className:"".concat("muze","-layer-text-fadeout")},selected:{className:"".concat("muze","-layer-text-selected")}}};__webpack_require__(18);function text_typeof(obj){return(text_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function text_slicedToArray(arr,i){return function text_arrayWithHoles(arr){if(Array.isArray(arr))return arr}(arr)||function text_iterableToArrayLimit(arr,i){var _arr=[],_n=!0,_d=!1,_e=void 0;try{for(var _s,_i=arr[Symbol.iterator]();!(_n=(_s=_i.next()).done)&&(_arr.push(_s.value),!i||_arr.length!==i);_n=!0);}catch(err){_d=!0,_e=err}finally{try{_n||null==_i.return||_i.return()}finally{if(_d)throw _e}}return _arr}(arr,i)||function text_nonIterableRest(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}()}function text_defineProperties(target,props){for(var i=0;i4)}(shape)?shape:common_utils_getSymbol(shape).size(size)(update),makeElement(groupElement,"path",function(data){return[data]}).attr("d",pathStr)}else d.shape="circle",createShape(d,groupElement)}(d,group);var update=d.update,style=d.style;objectIterator(style,function(key){return group.style(key,style[key])}),group.attr("class",className),group.classed(d.className,!0),disabled||(group=group.transition().duration(transition.duration).on("end",layer.registerAnimationDoneHook())),group.attr("transform","translate(".concat(update.x,",").concat(update.y,")"))},exit:function exit(exitGroup){disabled?exitGroup.remove():exitGroup.transition().ease(easeFns[effect]).duration(duration).on("end",function(){return exitGroup.remove()}).style("fill-opacity",0).style("stroke-opacity",0)}},params.keyFn)},point_default_config_defaultConfig={defClassName:"layer-point",className:"",classPrefix:"muze",defColorStyle:"stroke",interaction:{highlight:[{type:"fill",intensity:[0,0,-20,0]}],fade:[{type:"fill",intensity:[0,0,20,0]}],focus:[{type:"fill",intensity:[0,0,20,0]}]},innerPadding:.1,nearestPointThreshold:10,transform:{type:"identity"},transition:{effect:"cubic",duration:1e3},encoding:{size:{value:30},color:{},shape:{value:"circle"},x:{},y:{},strokeOpacity:{value:.5},fillOpacity:{value:.5}},shapes:["circle","cross","diamond","square","star","wye","triangle"],sizes:[20,30,40,50,60,70]};__webpack_require__(19);function point_typeof(obj){return(point_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function point_toConsumableArray(arr){return function point_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);i3&&void 0!==arguments[3]?arguments[3]:{},points=[],sizeEncoding=encoding.size,shapeEncoding=encoding.shape,colorEncoding=encoding.color,x=encoding.x,y=encoding.y,sizeField=sizeEncoding.field,sizeValue=sizeEncoding.value,shapeField=shapeEncoding.field,xField=x.field,yField=y.field,sizeAxis=axes.size,shapeAxis=axes.shape,fieldsConfig=this.data().getFieldsConfig(),isXDim=fieldsConfig[xField]&&fieldsConfig[xField].def.type===dist_datamodel.FieldType.DIMENSION,isYDim=fieldsConfig[yField]&&fieldsConfig[yField].def.type===dist_datamodel.FieldType.DIMENSION,key=isXDim?ENCODING.X:isYDim?ENCODING.Y:null,colorField=colorEncoding&&colorEncoding.field,colorFieldIndex=fieldsConfig[colorField]&&fieldsConfig[colorField].index,measurement=this.measurement(),shapeFieldIndex=fieldsConfig[shapeField]&&fieldsConfig[shapeField].index,sizeFieldIndex=fieldsConfig[sizeField]&&fieldsConfig[sizeField].index,colorAxis=axes.color,_config$offset=config.offset,offsetX=_config$offset.x,offsetY=_config$offset.y,_loop=function _loop(i,len){var d=data[i],row=d._data,size=sizeValue instanceof Function?sizeValue(d,i):sizeAxis.getSize(row[sizeFieldIndex]),shape=shapeAxis.getShape(row[shapeFieldIndex]),_map2=point_slicedToArray([ENCODING.X,ENCODING.Y].map(function(type){var value=null===d[type]?void 0:d[type],measure=type===ENCODING.X?measurement.width:measurement.height;return encoding[type].field?axes[type].getScaleValue(value):measure/2}),2),xPx=_map2[0],yPx=_map2[1];xPx+=offsetX,yPx+=offsetY;var _getLayerColor=getLayerColor({datum:d,index:i},{colorEncoding:colorEncoding,colorAxis:colorAxis,colorFieldIndex:colorFieldIndex}),color=_getLayerColor.color,rawColor=_getLayerColor.rawColor,style={fill:color,stroke:color};if(!isNaN(xPx)&&!isNaN(yPx)){var point={enter:{x:xPx,y:yPx},update:{x:xPx,y:yPx},shape:shape,size:Math.abs(size),meta:{stateColor:{},originalColor:rawColor,colorTransform:{}},style:style,_data:row,_id:d._id,source:d._data,rowId:d._id};point.className=getIndividualClassName(d,i,data,_this2),points.push(point),_this2.cachePoint(d[key],point)}},i=0,len=data.length;i=0?axisType:zeroPos))):(pos=transformType===STACK||data[type]>=0?axisType:zeroPos,space=Math.abs(pos-(transformType===STACK?axisType0:data[type]>=0?zeroPos:axisType))),enter=zeroPos}else pos=0,space=measurement[spaceType];return{enterSpace:enterSpace,enter:enter,pos:pos,space:space}}),resolveDimensions=function resolveDimensions(data,config,axes){var axesInfo={xAxis:axes.x,yAxis:axes.y},_resolveDimByField=bar_helper_resolveDimByField("x",axesInfo,config,data),enterWidth=_resolveDimByField.enterSpace,enterX=_resolveDimByField.enter,xPos=_resolveDimByField.pos,width=_resolveDimByField.space,_resolveDimByField2=bar_helper_resolveDimByField("y",axesInfo,config,data),enterHeight=_resolveDimByField2.enterSpace;return{enter:{x:enterX,y:_resolveDimByField2.enter,width:enterWidth,height:enterHeight},update:{x:xPos,y:_resolveDimByField2.pos,width:width,height:_resolveDimByField2.space}}};function bar_typeof(obj){return(bar_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function bar_toConsumableArray(arr){return function bar_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);i=update.x&&x<=update.width+update.x&&y>=update.y&&y<=update.height+update.y){pointFound=point;break}pointFound=null}var values=pointFound&&pointFound._data;return values&&(identifiers=this.getIdentifiersFromData(values,pointFound._id)),pointFound?{dimensions:[pointFound.update],id:identifiers,layerId:this.id()}:pointFound}},{key:"getPlotSpan",value:function getPlotSpan(){return this._plotSpan}}],[{key:"formalName",value:function formalName(){return"bar"}},{key:"defaultConfig",value:function defaultConfig(){return bar_default_config_defaultConfig}},{key:"defaultPolicy",value:function defaultPolicy(conf,userConf){var config=base_layer_BaseLayer.defaultPolicy(conf,userConf),colorField=config.encoding.color.field,transform=config.transform;return colorField&&(transform.groupBy=colorField),config}}]),BarLayer}(),tick_default_config_defaultConfig={defClassName:"layer-tick",className:"",classPrefix:"muze",interaction:{highlight:[{type:"stroke",intensity:[0,0,-15,0]}],fade:[{type:"stroke",intensity:[0,0,15,0]}],focus:[{type:"stroke",intensity:[0,0,15,0]}]},innerPadding:.1,transform:{type:"identity"},transition:{effect:"cubic",duration:1e3},encoding:{color:{},x:{},y:{},x0:{},y0:{},strokeOpacity:{value:.5},fillOpacity:{value:.5}},states:{highlight:{className:"".concat("muze","-layer-tick-highlight")},fadeout:{className:"".concat("muze","-layer-tick-fadeout")},selected:{className:"".concat("muze","-layer-tick-selected")}}},tick_renderer=function(params){var points=params.points,container=params.container,keyFn=params.keyFn,className=params.className,mount=renderer_utils_selectElement(container),ticks=mount.selectAll("path").data(points,keyFn),ticksEnter=ticks.enter().append("path");return mount.attr("class",className||""),ticksEnter.each(function(d){var selection=renderer_utils_selectElement(this),enter=d.enter||{};Object.entries(enter).forEach(function(attr){return!isNaN(attr[1])&&selection.attr(attr[0],attr[1])})}),ticks.exit().remove(),ticks.merge(ticksEnter).each(function(d){var selection=renderer_utils_selectElement(this),update=d.update,updateStyle=d.style||{},x0=void 0!==update.x0?update.x0:update.x,y0=void 0!==update.y0?update.y0:update.y,path="M ".concat(update.x," ").concat(update.y," L ").concat(x0," ").concat(y0);d.className&&selection.classed(d.className,!0),selection.attr("d",path),Object.entries(updateStyle).forEach(function(styleObj){return selection.style(styleObj[0],styleObj[1])})})};__webpack_require__(21);function tick_typeof(obj){return(tick_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function tick_defineProperties(target,props){for(var i=0;i3&&void 0!==arguments[3]?arguments[3]:{},points=[],_getAxesScales=helpers_getAxesScales(axes),xAxis=_getAxesScales.xAxis,yAxis=_getAxesScales.yAxis,fieldsConfig=this.data().getFieldsConfig(),_this$encodingFieldsI=this.encodingFieldsInf(),xField=_this$encodingFieldsI.xField,yField=_this$encodingFieldsI.yField,x0Field=_this$encodingFieldsI.x0Field,y0Field=_this$encodingFieldsI.y0Field,xFieldType=_this$encodingFieldsI.xFieldType,yFieldType=_this$encodingFieldsI.yFieldType,isXDim=xFieldType===dist_datamodel.FieldType.DIMENSION,isYDim=yFieldType===dist_datamodel.FieldType.DIMENSION,key=isXDim?ENCODING.X:isYDim?ENCODING.Y:null,colorEncoding=encoding.color,colorField=colorEncoding&&colorEncoding.field,colorFieldIndex=fieldsConfig[colorField]&&fieldsConfig[colorField].index,measurement=this.measurement(),colorAxis=axes.color,_config$offset=config.offset,offsetX=_config$offset.x,offsetY=_config$offset.y,_config$span=config.span,xSpan=_config$span.x,ySpan=_config$span.y,i=0,len=data.length;i1?_len-1:0),_key=1;_key<_len;_key++)params[_key-1]=arguments[_key];var layerRegistry=factoryObj._layerRegistry,instances=(layerDef=layerDef instanceof Array?layerDef:[layerDef]).map(function(layerObj){var layerConstructor=layerRegistry[layerObj.mark];return layerConstructor.create.apply(layerConstructor,params)});return 1===instances.length?instances[0]:instances},getLayerClass:function getLayerClass(mark){return factoryObj._layerRegistry[mark]},composeLayers:function composeLayers(layerType,layerDefs){compositeLayers[layerType]=layerDefs},sanitizeLayerConfig:function sanitizeLayerConfig(layerDef){var newConf=mergeRecursive({},layerDef);return sanitizeEncoding(newConf.encoding),newConf}};return factoryObj}();function defaults_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}var _CONFIG$ROWS$COLUMNS$,DEFAULT_LAYERS=(defaults_defineProperty(_DEFAULT_LAYERS={},layer_types_AREA_LAYER,area_AreaLayer),defaults_defineProperty(_DEFAULT_LAYERS,layer_types_ARC_LAYER,arc_ArcLayer),defaults_defineProperty(_DEFAULT_LAYERS,layer_types_LINE_LAYER,line_LineLayer),defaults_defineProperty(_DEFAULT_LAYERS,layer_types_TEXT_LAYER,text_TextLayer),defaults_defineProperty(_DEFAULT_LAYERS,layer_types_POINT_LAYER,point_PointLayer),defaults_defineProperty(_DEFAULT_LAYERS,layer_types_TICK_LAYER,tick_TickLayer),defaults_defineProperty(_DEFAULT_LAYERS,layer_types_BAR_LAYER,bar_BarLayer),defaults_defineProperty(_DEFAULT_LAYERS,layer_types_BASE_LAYER,base_layer_BaseLayer),_DEFAULT_LAYERS),muze_package=__webpack_require__(6),X="x",Y="y",ROWS="rows",COLUMNS="columns",COL="col",ROW="row",enums_constants_COLOR="color",enums_constants_SHAPE="shape",enums_constants_SIZE="size",constants_LEFT="left",constants_RIGHT="right",CELL="cell",X_AXES="xAxes",Y_AXES="yAxes",ENTRY_CELLS="entryCell",EXIT_CELLS="exitCell",constants_RADIUS="radius",constants_ANGLE="angle",PRIMARY="Primary",SECONDARY="Secondary";function local_options_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}var local_options=(local_options_defineProperty(_CONFIG$ROWS$COLUMNS$={},"config",{}),local_options_defineProperty(_CONFIG$ROWS$COLUMNS$,ROWS,{}),local_options_defineProperty(_CONFIG$ROWS$COLUMNS$,COLUMNS,{}),local_options_defineProperty(_CONFIG$ROWS$COLUMNS$,enums_constants_COLOR,{}),local_options_defineProperty(_CONFIG$ROWS$COLUMNS$,enums_constants_SHAPE,{}),local_options_defineProperty(_CONFIG$ROWS$COLUMNS$,enums_constants_SIZE,{}),local_options_defineProperty(_CONFIG$ROWS$COLUMNS$,"detail",{}),local_options_defineProperty(_CONFIG$ROWS$COLUMNS$,"layers",{}),local_options_defineProperty(_CONFIG$ROWS$COLUMNS$,"transform",{}),_CONFIG$ROWS$COLUMNS$);function simple_group_defineProperties(target,props){for(var i=0;i0&&(dimensionArr[0]=[].concat(field_sanitizer_toConsumableArray(dimensionArr[0]),field_sanitizer_toConsumableArray(dimensionArr[1])),dimensionArr[1]=[]),{fields:dimensionArr.map(function(list,i){return 1===i?measureArr[i].concat(dimensionArr[i]):dimensionArr[i].concat(measureArr[i])}),dimensions:[].concat(field_sanitizer_toConsumableArray(dimensionArr[0]),field_sanitizer_toConsumableArray(dimensionArr[1])),measures:[].concat(field_sanitizer_toConsumableArray(measureArr[0]),field_sanitizer_toConsumableArray(measureArr[1])),temporal:[].concat(field_sanitizer_toConsumableArray(temporalArr[0]),field_sanitizer_toConsumableArray(temporalArr[1])),categorical:[].concat(field_sanitizer_toConsumableArray(categoricalArr[0]),field_sanitizer_toConsumableArray(categoricalArr[1]))}}(norFields,fields)}),2),rowsInfo=_map2[0],columnsInfo=_map2[1],rows=rowsInfo.fields,rowDimensions=rowsInfo.dimensions,rowMeasures=rowsInfo.measures,rowTemporalFields=rowsInfo.temporal,rowCategoricalFields=rowsInfo.categorical,columns=columnsInfo.fields,columnDimensions=columnsInfo.dimensions,columnMeasures=columnsInfo.measures;return{rows:rows,rowDimensions:rowDimensions,rowMeasures:rowMeasures,rowTemporalFields:rowTemporalFields,rowCategoricalFields:rowCategoricalFields,columns:columns,columnTemporalFields:columnsInfo.temporal,columnCategoricalFields:columnsInfo.categorical,columnDimensions:columnDimensions,columnMeasures:columnMeasures}};function visual_encoder_slicedToArray(arr,i){return function visual_encoder_arrayWithHoles(arr){if(Array.isArray(arr))return arr}(arr)||function visual_encoder_iterableToArrayLimit(arr,i){var _arr=[],_n=!0,_d=!1,_e=void 0;try{for(var _s,_i=arr[Symbol.iterator]();!(_n=(_s=_i.next()).done)&&(_arr.push(_s.value),!i||_arr.length!==i);_n=!0);}catch(err){_d=!0,_e=err}finally{try{_n||null==_i.return||_i.return()}finally{if(_d)throw _e}}return _arr}(arr,i)||function visual_encoder_nonIterableRest(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}()}function visual_encoder_defineProperties(target,props){for(var i=0;i0&&void 0!==arguments[0]?arguments[0]:{},fields=arguments.length>1?arguments[1]:void 0,_getHeaderAxisFrom2=visual_encoder_slicedToArray(group_utils_getHeaderAxisFrom(ROW,fields.rows,axisFrom),2),rowHeader=_getHeaderAxisFrom2[0],rowAxis=_getHeaderAxisFrom2[1],_getHeaderAxisFrom4=visual_encoder_slicedToArray(group_utils_getHeaderAxisFrom("column",fields.columns,axisFrom),2),colHeader=_getHeaderAxisFrom4[0],colAxis=_getHeaderAxisFrom4[1];return this.axisFrom({row:rowAxis,column:colAxis}),this.headerFrom({row:rowHeader,column:colHeader}),this}}]),VisualEncoder}(),scaleMaps={linear:continous_axis_ContinousAxis,band:band_axis_BandAxis,temporal:time_axis_TimeAxis,size:size_axis_SizeAxis,color:color_axis_ColorAxis,shape:shape_axis_ShapeAxis},data_type_scale_map_dataTypeScaleMap={dimension:scale_type_namespaceObject.BAND,categorical:scale_type_namespaceObject.BAND,temporal:scale_type_namespaceObject.TIME,measure:scale_type_namespaceObject.LINEAR,continuous:scale_type_namespaceObject.LINEAR};function encoder_helper_toConsumableArray(arr){return function encoder_helper_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);i1?axesCreators.position="both":axesCreators.position=_this.axisFrom()[type],geomCellAxes[axis]=encoder_helper_generateAxisFromMap(axis,axisFields[i],axesCreators,{groupAxes:axis===X?xAxes:yAxes,valueParser:context.resolver.valueParser()})}),geomCellAxes}},{key:"updateDomains",value:function updateDomains(store,axes){var xAxes=axes.x,yAxes=axes.y;store.model.lock();for(var i=0;i1&&"linear"===axes[0].constructor.type()&&axes[0].config().alignZeroLine&&(axes.forEach(function(axis,i){var key=axisType?"".concat(idx,"0").concat(i):"0".concat(idx).concat(i);domain=domains[axisType][key],min[i]=domain[0],max[i]=domain[1]}),adjustedDomain=function getAdjustedDomain(max,min){var y1ratio=max[0]/(max[0]-min[0]),y2ratio=max[1]/(max[1]-min[1]),allSameSign=!1;return min[0]>0&&min[1]>0&&min[1]>0&&max[1]>0&&(allSameSign=!0,min[0]=0,min[1]=0),min[0]<0&&min[1]<0&&min[1]<0&&max[1]<0&&(allSameSign=!0,max[0]=0,max[1]=0),allSameSign||y1ratio===y2ratio||(y1ratiocounter)for(var _i2=counter;_i2-1&&(projections=[[_facet,_facet]],primaryFacets.splice(_existIndex,1)),secondaryFacets.splice(0,1)}else{var axisFromIndex=primaryFacets.length-1,facet=primaryFacets[axisFromIndex];projections=[[facet]];var existIndex=getIndex(secondaryFacets,facet);existIndex>-1&&(projections=[[facet,facet]],secondaryFacets.splice(existIndex,1)),primaryFacets.splice(axisFromIndex,1)}return{facets:facets=(facets=[].concat(primaryFacets,secondaryFacets)).filter(function(el,index,self){return index===self.findIndex(function(t){return t.toString()===el.toString()})}),projections:projections}}},{key:"fieldSanitizer",value:function fieldSanitizer(datamodel,config){return cartesian_encoder_get(cartesian_encoder_getPrototypeOf(CartesianEncoder.prototype),"fieldSanitizer",this).call(this,datamodel,config)}},{key:"getRetinalFieldsDomain",value:function getRetinalFieldsDomain(dataModels,encoding){var groupedModel=dataModels.groupedModel,domains={};for(var key in encoding)if({}.hasOwnProperty.call(encoding,key)){var encodingObj=encoding[key],field=encodingObj.field;if(!encodingObj.domain&&field){var domain=retriveDomainFromData(groupedModel,field);domains[field]=domain}}return domains}},{key:"serializeLayerConfig",value:function serializeLayerConfig(layerArray){var serializedLayers=[];return layerArray.length&&layerArray.forEach(function(layer,i){var def=src_layer_factory.sanitizeLayerConfig(layer);def.order=i,serializedLayers.push(def)}),serializedLayers}},{key:"getLayerConfig",value:function getLayerConfig(fields,userLayerConfig){var layerConfig=[],columnFields=fields.columnFields,rowFields=fields.rowFields;return columnFields.forEach(function(colField){var colFieldName=colField.toString();rowFields.forEach(function(rowField){var configs=[],rowFieldName=rowField.toString(),encoding={x:{field:colFieldName},y:{field:rowFieldName}},rowFieldType=rowField.subtype(),mark=function getDefaultMark(colFieldType,rowFieldType){return"categorical"===colFieldType||"categorical"===rowFieldType?"bar":"temporal"===colFieldType||"temporal"===rowFieldType?"line":"point"}(colField.subtype(),rowFieldType),defConfigs=[{mark:mark,def:{mark:mark,encoding:encoding}}],layerConfigs=function getLayerConfFromFields(colFields,rowFields,userLayerConfig){return userLayerConfig.filter(function(conf){var _ref,_ref2,_ref3,userConf=conf instanceof Array?conf:[conf],encodingArr=(_ref=[]).concat.apply(_ref,encoder_helper_toConsumableArray(userConf.map(function(d){return d.encoding}).filter(function(d){return void 0!==d})));if(!encodingArr.length)return!0;var xFields=(_ref2=[]).concat.apply(_ref2,encoder_helper_toConsumableArray(encodingArr.map(function(d){return[d.x&&d.x.field,d.x0&&d.x0.field]}))).filter(function(d){return void 0!==d&&null!==d}),yFields=(_ref3=[]).concat.apply(_ref3,encoder_helper_toConsumableArray(encodingArr.map(function(d){return[d.y&&d.y.field,d.y0&&d.y0.field]}))).filter(function(d){return void 0!==d&&null!==d});if(!xFields.length&&!yFields.length)return!0;var colFieldExist=!!xFields.length&&xFields.every(function(d){return-1!==colFields.indexOf(d)}),rowFieldExist=!!yFields.length&&yFields.every(function(d){return-1!==rowFields.indexOf(d)});return xFields.length&&yFields.length?colFieldExist&&rowFieldExist:colFieldExist||rowFieldExist})}(colField.getMembers(),rowField.getMembers(),userLayerConfig||[]);configs=layerConfigs.length?layerConfigs.map(function(layerConf){var mergedLayerConf=mergeRecursive(mergeRecursive({},defConfigs[0].def),layerConf),serializedLayerConfig=src_layer_factory.getSerializedConf(mergedLayerConf.mark,mergedLayerConf);return{mark:mergedLayerConf.mark,order:mergedLayerConf.order,def:serializedLayerConfig}}):defConfigs,layerConfig.push.apply(layerConfig,cartesian_encoder_toConsumableArray(configs))})}),layerConfig}}],[{key:"type",value:function type(){return"cartesian"}}]),CartesianEncoder}();function polar_encoder_typeof(obj){return(polar_encoder_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function polar_encoder_toConsumableArray(arr){return function polar_encoder_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);icounter)for(var _i=counter;_i0&&(config=mergeRecursive(config,userLayerConfig[0])),layerConfig.push(config)}),0===layerConfig.length&&(layerConfig=userLayerConfig),this.layers(layerConfig),layerConfig}},{key:"serializeLayerConfig",value:function serializeLayerConfig(layerArray){var serializedLayers=[];return layerArray.length&&layerArray.forEach(function(layer){var def=src_layer_factory.getSerializedConf(layer.mark,layer);serializedLayers.push({mark:layer.mark,def:def})}),serializedLayers}}],[{key:"type",value:function type(){return"polar"}}]),PolarEncoder}();function retinal_encoder_typeof(obj){return(retinal_encoder_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function retinal_encoder_defineProperties(target,props){for(var i=0;i1&&void 0!==arguments[1]?arguments[1]:{},axisType=axesCreators.axisType,fieldsConfig=axesCreators.fieldsConfig,field=fieldProps.field,axis=[],Cls=scaleMaps[axisType];return fieldProps.type=fieldProps.type?fieldProps.type:group_utils_getAxisType(fieldsConfig,field||null),axis.push(new Cls(fieldProps)),axis}({axisType:axisType,fieldsConfig:fieldsConfig},config[axisType])}),newAxes}},{key:"getLayerConfig",value:function getLayerConfig(encodingConfigs,userLayerConfig){var layerConfig=[];return userLayerConfig.forEach(function(e){var config=e;[enums_constants_COLOR,enums_constants_SHAPE,enums_constants_SIZE].forEach(function(axis){if(encodingConfigs[axis]&&encodingConfigs[axis].field){var def=config.def;config.def instanceof Array?def.forEach(function(conf){conf.encoding=conf.encoding||{},!conf.encoding[axis]&&(conf.encoding[axis]={}),conf.encoding[axis].field=encodingConfigs[axis].field}):(def.encoding=def.encoding||{},!def.encoding[axis]&&(def.encoding[axis]={}),def.encoding[axis].field=encodingConfigs[axis].field)}}),layerConfig.push(config)}),layerConfig}},{key:"setCommonDomain",value:function setCommonDomain(context){var domains=context.domains,axes=context.axes,encoding=context.encoding;return Object.entries(encoding).forEach(function(enc){if(enc[1]&&enc[1].field){var encType=enc[0],field=enc[1].field;field&&axes[encType].forEach(function(axis){var domain=domains[field];!enc[1].domain&&axis.updateDomain(domain)})}}),axes}}],[{key:"type",value:function type(){return"retinal"}}]),RetinalEncoder}(),group_utils_this=void 0;function group_utils_slicedToArray(arr,i){return function group_utils_arrayWithHoles(arr){if(Array.isArray(arr))return arr}(arr)||function group_utils_iterableToArrayLimit(arr,i){var _arr=[],_n=!0,_d=!1,_e=void 0;try{for(var _s,_i=arr[Symbol.iterator]();!(_n=(_s=_i.next()).done)&&(_arr.push(_s.value),!i||_arr.length!==i);_n=!0);}catch(err){_d=!0,_e=err}finally{try{_n||null==_i.return||_i.return()}finally{if(_d)throw _e}}return _arr}(arr,i)||function group_utils_nonIterableRest(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}()}function group_utils_toConsumableArray(arr){return function group_utils_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);i1?_len-1:0),_key=1;_key<_len;_key++)params[_key-1]=arguments[_key];return"".concat(axisName,"-axis-").concat(params.join("-"))},group_utils_headerCreator=function headerCreator(fields,fieldHeaders,TextCell,_ref2){var classPrefix=_ref2.classPrefix,labelManager=_ref2.labelManager;return fields.length>0?fields[0].map(function(cell,i){return new TextCell({type:"header",className:"".concat(classPrefix,"-grid-headers")},{labelManager:labelManager}).source(function getHeaderText(headers,index,rowLength){var header="";if(index===rowLength-1&&headers.length>rowLength){for(var i=index;i1||right.length>1)&&(borders.top=!0,borders.bottom=!0),borders}(leftRows,rightRows),showColBorders=function getColumnsBorders(top,bottom){var borders={left:!1,right:!1};return(top.length||bottom.length)&&(top[0]&&top[0].length>1||bottom[0]&&bottom[0].length>1)&&(borders.left=!0,borders.right=!0),borders}(topColumns,bottomColumns),showValueBorders=function getValueBorders(rows,columns){var borders={top:!0,left:!0,bottom:!0,right:!0},borderTypeRow=[constants_LEFT,constants_RIGHT],borderTypeCol=["top","bottom"];return rows.forEach(function(e,i){e[0]&&e[0].length?borders[borderTypeRow[i]]=!0:borders[borderTypeRow[i]]=!1}),columns.forEach(function(e,i){e.length?borders[borderTypeCol[i]]=!0:borders[borderTypeCol[i]]=!1}),borders}([leftRows,rightRows],[topColumns,bottomColumns]),valueMatrix.length>1&&(showValueBorders.top=!0,showValueBorders.bottom=!0),valueMatrix.length&&valueMatrix[0].length>1&&(showValueBorders.left=!0,showValueBorders.right=!0),{showRowBorders:showRowBorders,showColBorders:showColBorders,showValueBorders:showValueBorders}};function action_behaviour_map_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}var actionBehaviourMap=(action_behaviour_map_defineProperty(_actionBehaviourMap={},actions_namespaceObject.DRAG,{behaviours:[behaviours_namespaceObject.BRUSH],touch:!1}),action_behaviour_map_defineProperty(_actionBehaviourMap,actions_namespaceObject.HOVER,{behaviours:[behaviours_namespaceObject.HIGHLIGHT]}),action_behaviour_map_defineProperty(_actionBehaviourMap,actions_namespaceObject.LONGTOUCH,{behaviours:[behaviours_namespaceObject.SELECT],touch:!0}),action_behaviour_map_defineProperty(_actionBehaviourMap,actions_namespaceObject.TOUCHDRAG,{behaviours:[behaviours_namespaceObject.BRUSH],touch:!0}),action_behaviour_map_defineProperty(_actionBehaviourMap,actions_namespaceObject.CLICK,{behaviours:[behaviours_namespaceObject.SELECT],touch:!1}),_actionBehaviourMap);function src_helper_toConsumableArray(arr){return function src_helper_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);i0&&void 0!==arguments[0]?arguments[0]:{},createFn=arguments.length>1?arguments[1]:void 0,definitions=arguments.length>2?arguments[2]:void 0,iteratorFn=arguments.length>3?arguments[3]:void 0,map={};for(var key in definitions.forEach(function(def){var name=def.definition.name,instance=instances[name];instance||(instances[name]=instance=createFn(def)),iteratorFn(instance,def,name),map[name]=1}),instances)key in map||(instances[key].remove(),delete instances[key]);return instances}(context[sel],function(){var inst=src_layer_factory.getLayerInstance({mark:mark});return inst.dependencies(context._layerDeps),inst},definitions,function(layer,atomicDef,key){var definition=atomicDef.definition,sConf=src_layer_factory.getSerializedConf(mark,definition),axesObj=atomicDef.axes;layer.metaInf({unitRowIndex:metaInf.rowIndex,unitColIndex:metaInf.colIndex,namespace:"".concat(metaInf.namespace).concat(type).concat(key)}).store(store).config(sConf).dataProps({timeDiffs:timeDiffs}).axes(axesObj)}),context["_".concat(type)]=Object.values(context[sel])})}(context)}},{type:"registerImmediateListener",props:["".concat(namespace.local,".").concat("data"),"".concat(namespace.local,".").concat("transform")],listener:function listener(_ref11,_ref12){var dataModel=src_listener_map_slicedToArray(_ref11,2)[1],transform=src_listener_map_slicedToArray(_ref12,2)[1];if(dataModel){var dataModels=function transformDataModels(transform,dataModel){var dataModels={};for(var key in transform)if({}.hasOwnProperty.call(transform,key)){var transformVal=transform[key];dataModels[key]=transformVal(dataModel)}return dataModels}(transform,dataModel);context.store().commit("".concat(namespace.local,".").concat("transformedData"),dataModels)}}},{type:"registerImmediateListener",props:["".concat(namespace.local,".").concat("transformedData"),"".concat(namespace.local,".").concat("layers")],listener:function listener(_ref15,_ref16){var transformedData=src_listener_map_slicedToArray(_ref15,2)[1],layers=src_listener_map_slicedToArray(_ref16,2)[1],layerAxisIndexVal=context._layerAxisIndex,axesVal=context.axes(),dataModel=context.data();if(transformedData&&layers&&axesVal&&layerAxisIndexVal){context._lifeCycleManager.notify({client:layers,action:"beforeupdate",formalName:"layer"});var model=context.store().model;layers.forEach(function(lyr){return lyr.disableUpdate()}),function attachDataToLayers(layers,dm,transformedDataModels){layers.forEach(function(layer){var dataSource=layer.config().source,dataModel=dataSource instanceof Function?dataSource(dm):transformedDataModels[dataSource]||dm;layer.data()!==dataModel&&layer.data(dataModel)})}(layers,dataModel,transformedData),model.lock(),layers.forEach(function(lyr){lyr.enableUpdate().domain(lyr._domain)}),model.unlock(),context._dimensionMeasureMap=function getDimensionMeasureMap(layers,fieldsConfig){var retinalEncodingsAndMeasures={};for(var key in layers.forEach(function(layer){var _layer$encodingFields=layer.encodingFieldsInf(),colorField=_layer$encodingFields.colorField,sizeField=_layer$encodingFields.sizeField,shapeField=_layer$encodingFields.shapeField,measures=[_layer$encodingFields.xField,_layer$encodingFields.yField].filter(function(field){return fieldsConfig[field]&&fieldsConfig[field].def.type===dist_datamodel.FieldType.MEASURE});[colorField,sizeField,shapeField].forEach(function(field){var _retinalEncodingsAndM;fieldsConfig[field]&&fieldsConfig[field].def.type===dist_datamodel.FieldType.DIMENSION&&(!retinalEncodingsAndMeasures[field]&&(retinalEncodingsAndMeasures[field]=[]),(_retinalEncodingsAndM=retinalEncodingsAndMeasures[field]).push.apply(_retinalEncodingsAndM,src_helper_toConsumableArray(measures)))})}),retinalEncodingsAndMeasures)({}).hasOwnProperty.call(retinalEncodingsAndMeasures,key)&&(retinalEncodingsAndMeasures[key]=src_helper_toConsumableArray(new Set(retinalEncodingsAndMeasures[key])));return retinalEncodingsAndMeasures}(layers,dataModel.getFieldsConfig(),context.retinalFields()),function attachAxisToLayers(axes,layers,layerAxisIndex){layers.forEach(function(layer){var layerId=layer.id(),axesObj={};objectIterator(axes,function(key){var axisInf=layerAxisIndex[layerId];axisInf&&axes[key]&&(axesObj[key]=axes[key][axisInf[key]||0])}),Object.keys(axesObj).length&&layer.axes(axesObj)})}(axesVal,layers,layerAxisIndexVal),context._lifeCycleManager.notify({client:layers,action:"updated",formalName:"layer"})}}}]};function props_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}var src_props_PROPS=(props_defineProperty(_PROPS={},"facetByFields",{}),props_defineProperty(_PROPS,"retinalFields",{}),props_defineProperty(_PROPS,"parentAlias",{}),props_defineProperty(_PROPS,"layers",{}),props_defineProperty(_PROPS,"cachedData",{}),props_defineProperty(_PROPS,"detailFields",{}),props_defineProperty(_PROPS,"axes",{defaultValue:{x:[],y:[]}}),props_defineProperty(_PROPS,"fields",{}),props_defineProperty(_PROPS,"metaInf",{}),props_defineProperty(_PROPS,"registry",{}),props_defineProperty(_PROPS,"width",{}),props_defineProperty(_PROPS,"height",{}),props_defineProperty(_PROPS,"parentContainerInf",{}),props_defineProperty(_PROPS,"valueParser",{defaultValue:function defaultValue(val){return val}}),_PROPS);function firebolt_helper_slicedToArray(arr,i){return function firebolt_helper_arrayWithHoles(arr){if(Array.isArray(arr))return arr}(arr)||function firebolt_helper_iterableToArrayLimit(arr,i){var _arr=[],_n=!0,_d=!1,_e=void 0;try{for(var _s,_i=arr[Symbol.iterator]();!(_n=(_s=_i.next()).done)&&(_arr.push(_s.value),!i||_arr.length!==i);_n=!0);}catch(err){_d=!0,_e=err}finally{try{_n||null==_i.return||_i.return()}finally{if(_d)throw _e}}return _arr}(arr,i)||function firebolt_helper_nonIterableRest(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}()}function firebolt_helper_toConsumableArray(arr){return function firebolt_helper_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);i2&&void 0!==arguments[2]?arguments[2]:{},payload=config.payload,selectionSet=config.selectionSet,propagationFieldInf=config.propagationFields[action]||{},propagationFields=propagationFieldInf.fields||[],append=propagationFieldInf.append,criteria=payload.criteria,context=instance.context,dataModel=context.cachedData()[0],sourceId=context.id(),sideEfffects=instance.sideEffects(),behaviourEffectMap=instance._behaviourEffectMap,mergedModel=selectionSet.mergedEnter.model,fieldsConfig=dataModel.getFieldsConfig();payload.sourceUnit=sourceId,payload.action=action,payload.sourceCanvas=context.parentAlias();var propagationBehaviour=instance._propagationBehaviourMap[action]||action,propFields=[];null===criteria?propagationData=null:isSimpleObject(criteria)?(propFields=Object.keys(criteria||{}),propagationData=mergedModel?mergedModel.project(propFields):null):(propFields=criteria[0],propagationData=mergedModel?mergedModel.project(propFields):null);var facetByFields=context.facetByFields();if(null!==propagationData&&propagationFields.length){var fields=propagationData.getData().schema.map(function(d){return d.name});propagationData=function getModelWithFacetData(dm,data){var dataObj=dm.getData(),schema1=dataObj.schema,data1=dataObj.data,jsonData=[],schema2=data[0].map(function(d){return{name:"".concat(d),type:dist_datamodel.FieldType.DIMENSION}}),data2=data[1];return data1.forEach(function(d){var tuple={};schema1.forEach(function(obj,i){tuple[obj.name]=d[i]}),schema2.forEach(function(obj,i){tuple[obj.name]=data2[i]}),jsonData.push(tuple)}),new datamodel_default.a(jsonData,[].concat(data_propagator_toConsumableArray(schema1),data_propagator_toConsumableArray(schema2)))}(propagationData,facetByFields),propFields=append?[].concat(data_propagator_toConsumableArray(fields),data_propagator_toConsumableArray(propagationFields)):propagationFields,propagationData=propagationData.project(propFields)}var propagateInterpolatedValues=!1;propFields.length&&propFields.every(function(field){return fieldsConfig[field]&&fieldsConfig[field].def.type===dist_datamodel.FieldType.MEASURE})&&(propagateInterpolatedValues=!0);var groupId=context.parentAlias();payload.action=action;var behaviourInstance=instance._actions.behavioural[propagationBehaviour],isMutableAction=!!behaviourInstance&&behaviourInstance.constructor.mutates(),filterFn=function filterFn(entry,propagationConf){var effects=behaviourEffectMap[entry.config.action],mutates=!entry.config.groupId||effects.some(function(d){return sideEfffects[d.name||d].constructor.mutates()});return entry.config.groupId!==propagationConf.groupId&&mutates},sourceBehaviour=instance._actions.behavioural[action],mutates=!!sourceBehaviour&&sourceBehaviour.constructor.mutates(),propConfig={payload:payload,action:action,criteria:propagationData,isMutableAction:mutates,propagateInterpolatedValues:propagateInterpolatedValues,groupId:groupId,sourceId:mutates?groupId:sourceId,filterFn:filterFn,enabled:function enabled(propConf,firebolt){return action===propagationBehaviour||propConf.payload.sourceCanvas===firebolt.context.parentAlias()}};dataModel.propagate(propagationData,propConfig,!0),action!==propagationBehaviour&&(propConfig={payload:payload,sourceId:isMutableAction?groupId:sourceId,criteria:propagationData,isMutableAction:isMutableAction,propagateInterpolatedValues:propagateInterpolatedValues,action:propagationBehaviour,groupId:groupId,applyOnSource:action===propagationBehaviour,enabled:function enabled(propConf,firebolt){return propConf.payload.sourceCanvas!==firebolt.context.parentAlias()},filterFn:filterFn},dataModel.propagate(propagationData,propConfig,!0,{filterImmutableAction:function filterImmutableAction(actionInf,propInf){return actionInf.groupId!==propInf.groupId}}))};function src_firebolt_typeof(obj){return(src_firebolt_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function src_firebolt_defineProperties(target,props){for(var i=0;i1&&void 0!==arguments[1]?arguments[1]:{},points=[],parsedIdentifiers=identifiers;if(null===identifiers)return[];var layers=this.layers(),len=layers.length;isSimpleObject(identifiers)&&(parsedIdentifiers=[Object.keys(identifiers)],parsedIdentifiers=[].concat(visual_unit_toConsumableArray(parsedIdentifiers),visual_unit_toConsumableArray(function transposeArray(arr){return arr[0].map(function(col,i){return arr.map(function(row){return row[i]})})}(Object.values(identifiers)))));for(var i=0;i1&&void 0!==arguments[1]?arguments[1]:[]].map(function(fields){return fields.reduce(function(acc,d){return acc=[].concat(matrix_model_toConsumableArray(acc),matrix_model_toConsumableArray(d.getMembers()))},[])})},createSelectedDataModel=function createSelectedDataModel(datamodel,fieldNames,fieldValues){return datamodel.select(function(fields){return fieldNames.every(function(field,k){return fields[field].value===fieldValues[k]})})},matrix_model_uniqueKeyGenerator=function uniqueKeyGenerator(keyArray,context){var depth=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0,val=arguments.length>3&&void 0!==arguments[3]?arguments[3]:[],facets=context.facets,dataModel=context.dataModel,uniqueValues=context.uniqueValues;if(facets[depth+1]){var field=facets[depth];uniqueValues.forEach(function(value){var newDm=dataModel.select(function(fields){return fields[field].value===value}),nextDepthUniqueValues=retriveDomainFromData(newDm,facets[depth+1]);uniqueKeyGenerator(keyArray,{facets:facets,dataModel:newDm,uniqueValues:nextDepthUniqueValues},depth+1,[].concat(matrix_model_toConsumableArray(val),[value]))})}else uniqueValues.forEach(function(value){keyArray.push([].concat(matrix_model_toConsumableArray(val),[value]))})},projectRows=function projectRows(datamodel,projections){var allColumnProjections=projections.allColumnProjections,rowProjections=projections.rowProjections,optionalProjections=projections.optionalProjections;return rowProjections.length>0?rowProjections.map(function(projectFields){var _getFieldNames2=matrix_model_slicedToArray(getFieldNames(projectFields,allColumnProjections),2),projFieldNames=_getFieldNames2[0],colProjFieldNames=_getFieldNames2[1];return datamodel.project([].concat(matrix_model_toConsumableArray(projFieldNames),matrix_model_toConsumableArray(colProjFieldNames),matrix_model_toConsumableArray(optionalProjections)))}):[datamodel]},pushToMatrix=function pushToMatrix(context,valueCellCreator){var _matrix$rowIndex,cells=[],matrix=context.matrix,datamodel=context.datamodel,facetInfo=context.facetInfo,fieldInfo=context.fieldInfo,rowProjections=fieldInfo.rowProjections,colProjections=fieldInfo.colProjections,optionalProjections=fieldInfo.optionalProjections,rowIndex=facetInfo.rowIndex,columnIndex=facetInfo.columnIndex,rowProj=rowProjections[rowIndex%rowProjections.length]||[];colProjections.length>0?cells=colProjections.map(function(projectFields,projIdx){var _getFieldNames4=matrix_model_slicedToArray(getFieldNames(projectFields,rowProj),2),colProjFieldNames=_getFieldNames4[0],rowProjFieldNames=_getFieldNames4[1],projectedDm=datamodel.project([].concat(matrix_model_toConsumableArray(colProjFieldNames),matrix_model_toConsumableArray(rowProjFieldNames),matrix_model_toConsumableArray(optionalProjections))),projections={rowFields:rowProj,columnFields:projectFields},indices={rowIndex:rowIndex,columnIndex:columnIndex*colProjections.length+projIdx};return valueCellCreator(projectedDm,{projections:projections,indices:indices},facetInfo)}):cells=[valueCellCreator(datamodel,{projections:{rowFields:rowProj,columnFields:[]},indices:{rowIndex:rowIndex,columnIndex:columnIndex}},facetInfo)];matrix[rowIndex]=matrix[rowIndex]||[],(_matrix$rowIndex=matrix[rowIndex]).push.apply(_matrix$rowIndex,matrix_model_toConsumableArray(cells))};function cell_creator_slicedToArray(arr,i){return function cell_creator_arrayWithHoles(arr){if(Array.isArray(arr))return arr}(arr)||function cell_creator_iterableToArrayLimit(arr,i){var _arr=[],_n=!0,_d=!1,_e=void 0;try{for(var _s,_i=arr[Symbol.iterator]();!(_n=(_s=_i.next()).done)&&(_arr.push(_s.value),!i||_arr.length!==i);_n=!0);}catch(err){_d=!0,_e=err}finally{try{_n||null==_i.return||_i.return()}finally{if(_d)throw _e}}return _arr}(arr,i)||function cell_creator_nonIterableRest(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}()}function cell_creator_toConsumableArray(arr){return function cell_creator_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);i0?rowProjections.length:1):(keys=columnKeys,length=colProjections.length>0?colProjections.length:1),keys=keys.map(function(arr){return arr.map(function(val){return resolver.valueParser()(val)})}),section.length&&headerFrom===type&&axis&&keys.length){var hContext={axis:axis,length:length,type:type},headers=[];index<2?(hContext.keys=keys,hContext.facet=facet.rows,headers=cell_creator_headerPlaceholderGn(hContext,selectionObj,cells,labelManager)):(hContext.facet=facet.columns,hContext.keys=keys[0].map(function(key,i){return keys.map(function(e){return e[i]})}),headers=cell_creator_headerPlaceholderGn(hContext,selectionObj,cells,labelManager)),selectionObj["".concat(type,"Headers")]=headers}else selectionObj["".concat(type,"Headers")]=null}),selectionObj},cell_creator_computeMatrices=function computeMatrices(context,config){var resolver=context.resolver,datamodel=context.datamodel,componentRegistry=context.componentRegistry,encoders=context.encoders,globalConfig=config.globalConfig,selection=config.selection,transform=config.transform,groupBy=globalConfig.autoGroupBy,labelManager=resolver.dependencies().smartlabel,fieldMap=datamodel.getFieldsConfig(),layerConfig=resolver.layerConfig(),registry=resolver.registry(),normalizedRows=resolver.horizontalAxis().fields,normalizedColumns=resolver.verticalAxis().fields,otherEncodings=resolver.optionalProjections(config,layerConfig),facetsAndProjections=resolver.getAllFields(),matrixGnContext={normalizedColumns:normalizedColumns,normalizedRows:normalizedRows,facetsAndProjections:facetsAndProjections,layers:layerConfig,fieldMap:fieldMap,otherEncodings:otherEncodings,encoders:encoders,facet:globalConfig.facet||{},axisFrom:globalConfig.axisFrom||{},selection:selection,resolver:resolver},cells={GeomCell:resolver.getCellDef(registry.GeomCell),AxisCell:resolver.getCellDef(registry.AxisCell),BlankCell:resolver.getCellDef(registry.BlankCell),TextCell:resolver.getCellDef(registry.TextCell)},isRowSizeEqual=group_utils_isDistributionEqual(normalizedRows),isColumnSizeEqual=group_utils_isDistributionEqual(normalizedColumns);resolver.colCells({}),resolver.rowCells({}),resolver.datamodelTransform(transform||{}),resolver.resetSimpleAxes();var newCacheMap={exitCellMap:resolver.cacheMaps().entryCellMap,entryCellMap:new Map};resolver.cacheMaps(newCacheMap);var valueCellContext={config:globalConfig,suppliedLayers:encoders.simpleEncoder.serializeLayerConfig(resolver.layerConfig()),resolver:resolver,cell:cells.GeomCell,encoder:encoders.simpleEncoder,newCacheMap:newCacheMap,detailFields:config.detail},fieldsConfig=datamodel.getFieldsConfig(),groupedModel=datamodel;if(!groupBy.disabled){var allFields=function extractFields(facetsAndProjections,layerFields){var _ref6,fields=Object.values(facetsAndProjections).map(function(arr){var _ref4,_ref5,flattenArray=(_ref4=[]).concat.apply(_ref4,group_utils_toConsumableArray(arr));return(_ref5=[]).concat.apply(_ref5,group_utils_toConsumableArray(flattenArray.map(function(field){return field instanceof variable_Variable?field.getMembers():field})))});return(_ref6=[]).concat.apply(_ref6,group_utils_toConsumableArray(fields).concat(group_utils_toConsumableArray(layerFields)))}(facetsAndProjections,function getFieldsFromSuppliedLayers(suppliedLayerConfig,fieldsConfig){var _ref3,fields=[],encodingArr=suppliedLayerConfig.map(function(conf){return conf.encoding||{}});return fields=(fields=[].concat(group_utils_toConsumableArray(fields),[(_ref3=[]).concat.apply(_ref3,group_utils_toConsumableArray(encodingArr.map(function(enc){return Object.values(enc).map(function(d){return d.field})})))])).filter(function(field){return fieldsConfig[field]&&fieldsConfig[field].def.type===dist_datamodel.FieldType.DIMENSION})}(valueCellContext.suppliedLayers,datamodel.getFieldsConfig())),dimensions=allFields.filter(function(field){return fieldsConfig[field]&&fieldsConfig[field].def.type===dist_datamodel.FieldType.DIMENSION}),aggregationFns=groupBy.measures,measureNames=Object.keys(datamodel.getFieldspace().getMeasure()),nearestAggFns=common_utils_retrieveNearestGroupByReducers.apply(void 0,[datamodel].concat(cell_creator_toConsumableArray(measureNames))),resolvedAggFns=mergeRecursive(nearestAggFns,aggregationFns);groupedModel=datamodel.groupBy(dimensions.length?dimensions:[""],resolvedAggFns).project(allFields)}var valueMatrixInfo=function getMatrixModel(dataModel,facetsAndProjections,valueCellCreator){var rowDataModels=[],rowKeys=[],columnKeys=[],allColumnProjections=[],matrix=[],facetInfo=[],fieldInfo=Object.assign({},facetsAndProjections),rowFacets=fieldInfo.rowFacets,colFacets=fieldInfo.colFacets;if(fieldInfo.colProjections.forEach(function(colProj){allColumnProjections.push.apply(allColumnProjections,matrix_model_toConsumableArray(colProj))}),fieldInfo.allColumnProjections=allColumnProjections,rowFacets.length>0){var field=rowFacets[0].toString(),firstLevelRowKeys=retriveDomainFromData(dataModel,field);matrix_model_uniqueKeyGenerator(rowKeys,{facets:rowFacets,dataModel:dataModel,uniqueValues:firstLevelRowKeys}),rowKeys.forEach(function(val){var _rowDataModels,rowFacetFieldNames=matrix_model_slicedToArray(getFieldNames(rowFacets),1)[0],selectedDataModel=createSelectedDataModel(dataModel,rowFacetFieldNames,val),newProjectedDataModels=projectRows(selectedDataModel,fieldInfo);(_rowDataModels=rowDataModels).push.apply(_rowDataModels,matrix_model_toConsumableArray(newProjectedDataModels)),newProjectedDataModels.forEach(function(){facetInfo.push([rowFacets,val])})})}else{var _rowDataModels2;(_rowDataModels2=rowDataModels).push.apply(_rowDataModels2,matrix_model_toConsumableArray(projectRows(dataModel,fieldInfo)))}if(rowDataModels=rowDataModels.length>0?rowDataModels:[[]],colFacets.length>0){var colFacetNames=colFacets.map(function(d){return"".concat(d)}),_field=colFacetNames[0],firstLevelColumnKeys=retriveDomainFromData(dataModel,_field);matrix_model_uniqueKeyGenerator(columnKeys,{facets:colFacetNames,dataModel:dataModel,uniqueValues:firstLevelColumnKeys}),rowDataModels.forEach(function(dme,rIndex){facetInfo[rIndex]=facetInfo[rIndex]||[[],[]],columnKeys.forEach(function(val,cIndex){matrix[rIndex]=matrix[rIndex]||[];var datamodel=dme instanceof datamodel_default.a?dme:dataModel,selectedDataModel=createSelectedDataModel(datamodel,colFacetNames,val),context={matrix:matrix,datamodel:selectedDataModel,facetInfo:{rowFacets:facetInfo[rIndex],colFacets:[colFacets,val],rowIndex:rIndex,columnIndex:cIndex},fieldInfo:fieldInfo};pushToMatrix(context,valueCellCreator)})})}else rowDataModels.forEach(function(dme,rIndex){facetInfo[rIndex]=facetInfo[rIndex]||[[],[]];var context={matrix:matrix,datamodel:dme||dataModel,facetInfo:{rowFacets:facetInfo[rIndex],colFacets:[[],[]],rowIndex:rIndex,columnIndex:0},fieldInfo:fieldInfo};pushToMatrix(context,valueCellCreator)});var transposedColKeys=columnKeys.length>0?columnKeys[0].map(function(col,i){return columnKeys.map(function(row){return row[i]})}):columnKeys;return{matrix:matrix,rowKeys:rowKeys,columnKeys:transposedColKeys}}(groupedModel,facetsAndProjections,resolver.valueCellsCreator(valueCellContext));resolver.cacheMaps().exitCellMap.forEach(function(placeholder){placeholder.remove()}),resolver.cacheMaps().exitCellMap.clear(),resolver.valueMatrix(valueMatrixInfo.matrix);var _mutateAxesFromMap=function mutateAxesFromMap(cacheMaps,axes){var xAxes=null,yAxes=null,xAxesMap=cacheMaps.xAxesMap,yAxesMap=cacheMaps.yAxesMap,xAxisSet=axes.x,yAxisSet=axes.y;return xAxisSet&&xAxisSet.forEach(function(axisId){var xAxis=xAxesMap.get(axisId);(xAxes=xAxes||[]).push(xAxis)}),yAxisSet&&yAxisSet.forEach(function(axisId){var yAxis=yAxesMap.get(axisId);(yAxes=yAxes||[]).push(yAxis)}),{xAxes:xAxes,yAxes:yAxes}}(resolver.cacheMaps(),resolver.axes()),xAxes=_mutateAxesFromMap.xAxes,yAxes=_mutateAxesFromMap.yAxes;resolver.axes({x:xAxes,y:yAxes});var store=resolver.store();[xAxes,yAxes].forEach(function(axesArr,type){var stateProps={};(axesArr=axesArr||[]).forEach(function(axes,idx){axes.forEach(function(axis,axisIndex){stateProps["".concat(idx).concat(axisIndex)]=null})}),store.append("".concat(namespace_namespaceObject.GROUP_GLOBAL_NAMESPACE,".domain.").concat(type?"y":"x"),stateProps)}),resolver.createUnits(componentRegistry,config);var _generateMatrices=function generateMatrices(context,matrices,cells,labelManager){var unitHeight=context.unitHeight,unitWidth=context.unitWidth,facetsAndProjections=context.facetsAndProjections,normalizedRows=context.normalizedRows,normalizedColumns=context.normalizedColumns,selection=context.selection,axisFrom=context.axisFrom,facet=context.facet,encoders=context.encoders,resolver=context.resolver,selectionObj=cell_creator_generatePlaceholders({fields:{rows:normalizedRows,columns:normalizedColumns},matrices:matrices,facetsAndProjections:facetsAndProjections,selection:selection,axisFrom:axisFrom,facet:facet,encoders:encoders,resolver:resolver},cells,labelManager),columnsPrimary=selectionObj.columnsPrimary,columnsSecondary=selectionObj.columnsSecondary,rowsPrimary=selectionObj.rowsPrimary,rowsSecondary=selectionObj.rowsSecondary,leftHeaders=selectionObj.leftHeaders,topHeaders=selectionObj.topHeaders,bottomHeaders=selectionObj.bottomHeaders,rightHeaders=selectionObj.rightHeaders,_map2=cell_creator_slicedToArray([rowsPrimary,rowsSecondary,columnsPrimary,columnsSecondary].map(function(d){return d?d.getObjects():[]}),4),rowPrime=_map2[0],rowSec=_map2[1],colPrime=_map2[2],colSec=_map2[3],_map4=cell_creator_slicedToArray([leftHeaders,rightHeaders].map(function(e){return e?e.getObjects().map(function(f){return f.getObjects()}):[]}),2),leftFacets=_map4[0],rightFacets=_map4[1],rowPriority=rowSec.length?1:-1;rowPrime.length&&rowPriority++;var colPriority=colSec.length?1:-1;colPrime.length&&colPriority++;var leftMatrix=leftFacets.length?leftFacets.map(function(d,i){return rowPrime[i]=rowPrime[i]?[rowPrime[i]]:[],[].concat(cell_creator_toConsumableArray(d),cell_creator_toConsumableArray(rowPrime[i]))}):rowPrime?rowPrime.map(function(d){return[d]}):[],rightMatrix=rowSec.length?rowSec.map(function(d,i){return[d].concat(cell_creator_toConsumableArray(rightFacets[i]||[]))}):rightFacets.length?rightFacets.map(function(d){return cell_creator_toConsumableArray(d)}):[],topMatrix=[];topHeaders&&topHeaders.getObjects().forEach(function(e){e.getObjects().forEach(function(x,i){topMatrix[i]=topMatrix[i]||[],topMatrix[i].push(x)})});colPrime.length&&topMatrix.push(colPrime);var bottomMatrix=[];colSec.length&&bottomMatrix.push(colSec);var currentBottomLength=bottomMatrix.length;bottomHeaders&&bottomHeaders.getObjects().forEach(function(e){e.getObjects().forEach(function(x,i){bottomMatrix[i+currentBottomLength]=bottomMatrix[i+currentBottomLength]||[],bottomMatrix[i+currentBottomLength].push(x)})});if(!leftMatrix.length&&!rightMatrix.length){var cell=new cells.BlankCell;cell.setAvailableSpace(unitWidth,unitHeight),leftMatrix=[[cell]]}if(!(topMatrix.length||bottomMatrix.length&&bottomMatrix[0].length)){var _cell=new cells.BlankCell;_cell.setAvailableSpace(unitWidth,unitHeight),bottomMatrix=[[_cell]]}return{rows:[leftMatrix,rightMatrix],columns:[topMatrix,bottomMatrix],selectionObj:selectionObj,colPriority:colPriority,rowPriority:rowPriority}}(matrixGnContext,{valuesMatrix:valueMatrixInfo,axesMatrix:resolver.axes()},cells,labelManager),rows=_generateMatrices.rows,columns=_generateMatrices.columns,selectionObj=_generateMatrices.selectionObj,rowPriority=_generateMatrices.rowPriority,colPriority=_generateMatrices.colPriority;return resolver.rowMatrix(rows),resolver.columnMatrix(columns),{rows:resolver.rowMatrix(),columns:resolver.columnMatrix(),values:resolver.valueMatrix(),isColumnSizeEqual:isColumnSizeEqual,isRowSizeEqual:isRowSizeEqual,priority:{row:rowPriority,col:colPriority},selection:selectionObj,dataModels:{groupedModel:groupedModel,parentModel:datamodel}}},RESOLVER_PROPS={dependencies:{},units:{},datamodelTransform:{},layerConfig:{},matrixLayers:{},colCells:{},rowCells:{},rowMatrix:{},columnMatrix:{},valueMatrix:{},encoder:{},valueParser:{}};function matrix_resolver_slicedToArray(arr,i){return function matrix_resolver_arrayWithHoles(arr){if(Array.isArray(arr))return arr}(arr)||function matrix_resolver_iterableToArrayLimit(arr,i){var _arr=[],_n=!0,_d=!1,_e=void 0;try{for(var _s,_i=arr[Symbol.iterator]();!(_n=(_s=_i.next()).done)&&(_arr.push(_s.value),!i||_arr.length!==i);_n=!0);}catch(err){_d=!0,_e=err}finally{try{_n||null==_i.return||_i.return()}finally{if(_d)throw _e}}return _arr}(arr,i)||function matrix_resolver_nonIterableRest(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}()}function matrix_resolver_toConsumableArray(arr){return function matrix_resolver_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);i0?leftRows[0].map(blankCellCreator):[],right:rightRows.length>0?rightRows[0].map(blankCellCreator):[]},_map2=matrix_resolver_slicedToArray([constants_LEFT,constants_RIGHT].map(function(type){return topCols.map(function(col,i){return i===topCols.length-1?headers[type]:footers[type]})}),2),topLeft=_map2[0],topRight=_map2[1];if(0===topCols.length){var _map4=matrix_resolver_slicedToArray([constants_LEFT,constants_RIGHT].map(function(type){return bottomCols.map(function(col,i){return 0===i?headers[type]:footers[type]})}),2);bottomLeft=_map4[0],bottomRight=_map4[1]}else bottomLeft=bottomCols.map(function(){return leftRows.length>0?leftRows[0].map(blankCellCreator):[]}),bottomRight=bottomCols.map(function(){return rightRows.length>0?rightRows[0].map(blankCellCreator):[]});return lifeCycleManager.notify({client:[topLeft,topRight,bottomLeft,bottomRight],action:"initialized",formalName:"facet-headers"}),{topLeft:topLeft,topRight:topRight,bottomLeft:bottomLeft,bottomRight:bottomRight}}},{key:"getMatrices",value:function getMatrices(datamodel,config,componentRegistry,encoders){return cell_creator_computeMatrices({datamodel:datamodel,componentRegistry:componentRegistry,encoders:encoders,resolver:this},config)}},{key:"store",value:function store(){return arguments.length?(this._store=arguments.length<=0?void 0:arguments[0],this):this._store}}]),MatrixResolver}();function value_matrix_defineProperties(target,props){for(var i=0;i3&&void 0!==arguments[3]?arguments[3]:{},type=firebolt.context.constructor.type(),payload=config.payload,data=firebolt.context.data(),metaData=firebolt.context.metaData(),fieldType=metaData.getData().schema[0].type,propPayload={},sourceId=firebolt.context._id;propPayload.action=action_behaviour_map_propagationBehaviourMap[action]||action,propPayload.sideEffects=propagationSideEffects[action],propPayload.sourceCanvas=firebolt.context.canvasAlias();var isMutableAction=firebolt._actions.behavioural[propPayload.action].constructor.mutates();if(null===payload.criteria)propagationData=null;else{var entrySet=selectionSet.mergedEnter,values=data.filter(function(d){return-1!==entrySet.uids.indexOf(d.id)}).map(function(d){return d.rawVal});if("step"===type||"discrete"===type&&"measure"===fieldType){var field=Object.keys(payload.criteria||{})[0];propagationData=(values=data.filter(function(d){return-1!==entrySet.uids.indexOf(d.id)}).map(function(d){return d.range})).length?metaData.select(function(fields){for(var check=!1,i=0;i=values[i][0]&&fields[field].value<=values[i][1]);i++);return check},{saveChild:!1}):null}else"gradient"===type?propagationData=getDataModelFromRange(metaData,payload.criteria):values.length?propagationData=function assembleModelFromIdentifiers(model,identifiers){var data,schema=[],fieldMap=model.getFieldsConfig();return identifiers.length?function(){for(var fields=identifiers[0],len=fields.length,i=0;i=drawingInfMeasure+offset?[axisScale.invert(drawingInfMeasure+offset-selectionBoxMeasure),axisScale.invert(drawingInfMeasure+offset)]:subjectStartPoint-offset1&&void 0!==arguments[1]?arguments[1]:{},classPrefix=context.config().classPrefix;set.mergedEnter.length||set.mergedExit.length?(classed(set.mergedExit,config.className||"".concat(classPrefix,"-legend-brighten"),!1),classed(set.mergedExit,config.className||"".concat(classPrefix,"-legend-fadeout"),!0),classed(set.mergedEnter,config.className||"".concat(classPrefix,"-legend-fadeout"),!1)):classed(set.completeSet,config.className||"".concat(classPrefix,"-legend-fadeout"),!1)},brighten:function brighten(set){var config=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},classPrefix=context.config().classPrefix;set.mergedEnter.length||set.mergedExit.length?(classed(set.mergedEnter,config.className||"".concat(classPrefix,"-legend-brighten"),!0),classed(set.mergedExit,config.className||"".concat(classPrefix,"-legend-brighten"),!1)):classed(set.completeSet,config.className||"".concat(classPrefix,"-legend-brighten"),!1)}}};function legend_highlighter_typeof(obj){return(legend_highlighter_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function legend_highlighter_defineProperties(target,props){for(var i=0;i2&&void 0!==arguments[2]?arguments[2]:{};(0,this._strategies[options.strategy||this._strategy])(selectionSet,this)}}],[{key:"formalName",value:function formalName(){return"highlighter"}}]),LegendHighlighter}(),legend_props_PROPS={config:{sanitization:function sanitization(context,value){return mergeRecursive(context._config||{},value)}},data:{},fieldName:{},legendContainer:{},measurement:{sanitization:function sanitization(context,value){var measurement=mergeRecursive(context._measurement,value);return["padding","border","margin"].forEach(function(space){measurement[space]=Math.min(measurement[space]>0?measurement[space]:0,.1*measurement.maxWidth,.1*measurement.maxHeight)}),measurement}},logicalSpace:{},metaData:{},range:{sanitization:function sanitization(context,value){return context.scale().range(value),context.resetLogicalSpace(),context.store().commit("range",value),value}},scale:{},smartTicks:{},store:{},title:{sanitization:function sanitization(context,value){return mergeRecursive(context._title||{},value)}},valueParser:{defaultValue:function defaultValue(val){return val}}},ALIGN_HORIZONTAL="horizontal",ALIGN_VERTICAL="vertical",DEFAULT_MEASUREMENT={height:30,width:30,maxWidth:1/0,maxHeight:1/0,padding:2,margin:2,border:1},LEGEND_TITLE={text:"",orientation:function orientation(pos){return"left"===pos||"right"===pos?"left":"center"}},legend_defaults_DEFAULT_CONFIG={classPrefix:"muze",borderStyle:"solid",borderColor:"rgba(0,0,0,0)",formatter:{bounds:{lower:"less than",upper:"more than"}},item:{text:{orientation:"right",width:10,formatter:function formatter(val,i,data,context){return context.valueParser()(val)}},icon:{className:"legend-icon",height:20,width:20,color:"rgba(0,0,0,.5)",type:"square"}}},defaults_ICON_MAP=function ICON_MAP(icon){return icon&&"string"==typeof icon?common_utils_getSymbol(icon):icon};function legend_helper_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}var legend_helper_getScaleInfo=function getScaleInfo(scale){var scaleType=scale.constructor.type();return{scaleType:scaleType,domain:scale.uniqueValues(),steps:scale.config().stops||1,scaleFn:SCALE_FUNCTIONS[scaleType]}},legend_helper_getInterpolatedData=function getInterpolatedData(domain,steps){for(var domainForLegend=[],interpolatedFn=common_utils_numberInterpolator()(domain[0],domain[1]),i=0;i<=steps;i++)domainForLegend[i]=interpolatedFn(i/steps);return domainForLegend},getDomainBounds=function getDomainBounds(type,scaleInfo,domainInfo){var _ref,scaleFn=scaleInfo.scaleFn,scaleType=scaleInfo.scaleType,scale=scaleInfo.scale,domain=domainInfo.domain,domainBounds=domainInfo.domainBounds,domainLeg=domainInfo.domainLeg,steps=domainInfo.steps,ele=domain["lower"===type?0:domain.length-1],step=steps["lower"===type?0:steps.length-1];return legend_helper_defineProperty(_ref={},scaleType,"size"===scaleType?scale[scaleFn](ele)*scale.getScaleFactor():scale[scaleFn](ele)),legend_helper_defineProperty(_ref,"value",domainBounds[type]),legend_helper_defineProperty(_ref,"id","lower"===type?0:domainLeg.length+2),legend_helper_defineProperty(_ref,"range",[ele,step]),_ref};function simple_legend_defineProperties(target,props){for(var i=0;i0?titleSpace.height+effPadding:0,titleWidth=titleSpace.width+effPadding,labelSpaces=this.getLabelSpaces(effPadding,align),_computeItemSpaces=function computeItemSpaces(config,measures,data){var totalHeight=0,totalWidth=0,maxItemSpaces={width:0,height:0},effPadding=measures.effPadding,titleWidth=measures.titleWidth,labelSpaces=measures.labelSpaces,titleHeight=measures.titleHeight,maxWidth=measures.maxWidth,item=config.item,align=config.align,icon=item.icon,textOrientation=item.text.orientation,itemSpaces=[],iconSpaces=[],maxIconWidth=0;return labelSpaces.forEach(function(labelSpace,i){var itemSpace={width:0,height:0},iconSpace={width:0,height:0},datum=data[i]||{};"left"===textOrientation||"right"===textOrientation?(labelSpace.width+=effPadding,iconSpace.width=(datum.size?2*Math.sqrt(datum.size/Math.PI):icon.width)+effPadding,maxIconWidth=Math.max(iconSpace.width,maxIconWidth),itemSpace.width=labelSpace.width+maxIconWidth,labelSpace.height=Math.max(labelSpace.height,icon.height)+effPadding,iconSpace.height=labelSpace.height,itemSpace.height=labelSpace.height):(labelSpace.width=Math.max(labelSpace.width,datum.size?2*Math.sqrt(datum.size/Math.PI):icon.width)+effPadding,iconSpace.width=labelSpace.width,itemSpace.width=labelSpace.width,maxIconWidth=Math.max(iconSpace.width,maxIconWidth),labelSpace.height+=effPadding,iconSpace.height=icon.height+effPadding,itemSpace.height=labelSpace.height+iconSpace.height),"horizontal"===align?totalHeight=Math.max(totalHeight,itemSpace.height):(totalHeight+=itemSpace.height,totalWidth=Math.max(totalWidth,itemSpace.width,titleWidth)),maxItemSpaces={width:Math.max(itemSpace.width,maxItemSpaces.width),height:Math.max(itemSpace.height,maxItemSpaces.height)},itemSpaces.push(itemSpace),iconSpaces.push(iconSpace)}),itemSpaces.forEach(function(itemSpace,i){if("horizontal"===align)itemSpace.height=totalHeight,iconSpaces[i].width=maxIconWidth,"left"===textOrientation||"right"===textOrientation?(labelSpaces[i].height=totalHeight,iconSpaces[i].height=totalHeight,itemSpaces[i].width=labelSpaces[i].width+maxIconWidth):(labelSpaces[i].width=maxIconWidth,itemSpaces[i].width=maxIconWidth,labelSpaces[i].width=maxIconWidth),totalWidth=Math.max(totalWidth+itemSpaces[i].width);else if(itemSpace.width=Math.max(totalWidth,maxWidth),"top"===textOrientation||"bottom"===textOrientation)labelSpaces[i].width=totalWidth,iconSpaces[i].width=totalWidth,maxIconWidth=totalWidth;else{var labelWidth=labelSpaces[i].width,newLabelWidth=maxItemSpaces.width-maxIconWidth;iconSpaces[i].width=maxIconWidth,itemSpaces[i].width=labelSpaces[i].width+maxIconWidth,labelSpaces[i].width=Math.max(labelWidth,newLabelWidth),totalWidth=Math.max(totalWidth,itemSpace.width)}}),totalWidth=Math.ceil(Math.max(totalWidth,titleWidth))+effPadding,totalHeight+=titleHeight+effPadding,{totalHeight:totalHeight=Math.ceil(totalHeight),totalWidth:totalWidth,itemSpaces:itemSpaces,iconSpaces:iconSpaces,maxItemSpaces:maxItemSpaces,maxIconWidth:maxIconWidth}}(this.config(),{effPadding:effPadding,titleWidth:titleWidth,labelSpaces:labelSpaces,titleHeight:titleHeight,maxWidth:maxWidth,maxHeight:maxHeight},this.data()),totalHeight=_computeItemSpaces.totalHeight,totalWidth=_computeItemSpaces.totalWidth,itemSpaces=_computeItemSpaces.itemSpaces,iconSpaces=_computeItemSpaces.iconSpaces,maxItemSpaces=_computeItemSpaces.maxItemSpaces,maxIconWidth=_computeItemSpaces.maxIconWidth;return this.measurement({width:Math.max(totalWidth,width)+effMargin+effBorder,height:Math.max(totalHeight,height)+effMargin+effBorder,labelSpaces:labelSpaces,iconSpaces:iconSpaces,itemSpaces:itemSpaces,maxItemSpaces:maxItemSpaces,maxIconWidth:maxIconWidth,titleSpaces:{width:Math.min(maxWidth,this.measurement().width)-effMargin-effBorder,height:titleHeight}}),this}},{key:"getTitleSpace",value:function getTitleSpace(){return this._labelManager.setStyle(renderer_utils_getSmartComputedStyle(renderer_utils_selectElement("body"),"".concat(this.config().classPrefix,"-legend-title"))),this._labelManager.getOriSize(this.title().text?this.title().text:"")}},{key:"renderTitle",value:function renderTitle(container){var _this$measurement2=this.measurement(),titleSpaces=_this$measurement2.titleSpaces,border=_this$measurement2.border,padding=_this$measurement2.padding,width=_this$measurement2.width,maxWidth=_this$measurement2.maxWidth,_this$config3=this.config(),borderStyle=_this$config3.borderStyle,borderColor=_this$config3.borderColor;return function titleCreator(container,title,measurement,config){var titleWidth=Math.min(measurement.maxWidth,measurement.width),titleContainer=makeElement(container,"table",[1],"".concat(config.classPrefix,"-legend-title")).style("width","".concat(titleWidth,"px")).style("height","".concat(measurement.height,"px")).style("border-bottom","".concat(measurement.border,"px ").concat(config.borderStyle," ").concat(config.borderColor)).style("text-align",title.orientation instanceof Function?title.orientation(config.position):title.orientation);return makeElement(titleContainer,"td",[1],"".concat(config.classPrefix,"-legend-title-text")).style("width","".concat(titleWidth,"px")).style("max-width","".concat(titleWidth,"px")).style("height","100%").style("line-height",1).style("padding","".concat(measurement.padding,"px")).text(title.text).style("overflow-x","scroll").node()}(container,this.title(),{height:titleSpaces.height,width:width,maxWidth:maxWidth,border:border,padding:padding,borderStyle:borderStyle,borderColor:borderColor},this.config())}},{key:"render",value:function render(){var marginPosition,firebolt=this.firebolt(),_this$config4=this.config(),classPrefix=_this$config4.classPrefix,borderStyle=_this$config4.borderStyle,borderColor=_this$config4.borderColor,position=_this$config4.position,_this$measurement3=this.measurement(),maxWidth=_this$measurement3.maxWidth,maxHeight=_this$measurement3.maxHeight,width=_this$measurement3.width,height=_this$measurement3.height,margin=_this$measurement3.margin,border=_this$measurement3.border,legendContainer=makeElement(renderer_utils_selectElement(this.mount()),"div",[1],"".concat(classPrefix,"-legend-box"));switch(position){case"top":marginPosition="margin-".concat("bottom");break;case"left":marginPosition="margin-".concat("right");break;case"bottom":marginPosition="margin-".concat("top");break;default:marginPosition="margin-".concat("left")}return legendContainer.classed("".concat(classPrefix,"-legend-box-").concat(this._id),!0),legendContainer.style("float","left"),legendContainer.style("width","".concat(Math.min(maxWidth,width)-2*margin,"px")).style("height","".concat(Math.min(maxHeight,height)-2*margin,"px")).style("".concat(marginPosition),"".concat(margin,"px")).style("border","".concat(border,"px ").concat(borderStyle," ").concat(borderColor)),this.legendContainer(legendContainer.node()),this.renderTitle(legendContainer),firebolt.createSelectionSet(this.data().map(function(d){return d.id})),legendContainer}},{key:"getCriteriaFromData",value:function getCriteriaFromData(data){var fieldName=this.fieldName();return"measure"===this.metaData().getData().schema[0].type?function simple_legend_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}({},fieldName,data.range):[[fieldName],[data.rawVal]]}}],[{key:"create",value:function create(dependencies){return new SimpleLegend(dependencies)}},{key:"defaultConfig",value:function defaultConfig(){return legend_defaults_DEFAULT_CONFIG}},{key:"defaultMeasurement",value:function defaultMeasurement(){return DEFAULT_MEASUREMENT}}]),SimpleLegend}();function position_config_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}var legendOrientation=(position_config_defineProperty(_legendOrientation={},"horizontal",{datasets:function datasets(data){return{row:[1],column:data}},itemContainerMeasures:function itemContainerMeasures(measurement){var itemSpaces=measurement.itemSpaces,width=measurement.width;return{row:{width:"".concat(width,"px"),padding:"".concat(0,"px")},column:{width:function width(d,i){return"".concat(itemSpaces[i].width,"px")},padding:"".concat(0,"px")}}},getStepSpacesInfo:function getStepSpacesInfo(measurement){var maxItemSpaces=measurement.maxItemSpaces;return{iconHeight:measurement.height,iconWidth:maxItemSpaces.width,stepPadding:{horizontal:!0,vertical:!1}}}}),position_config_defineProperty(_legendOrientation,"vertical",{datasets:function datasets(data){return{row:data,column:function column(d){return[d]}}},itemContainerMeasures:function itemContainerMeasures(measurement,config){var width=measurement.width,padding=config.padding;return{row:{width:"".concat(width,"px"),padding:"".concat(padding,"px")},column:{width:"".concat(width,"px"),padding:"".concat(0,"px")}}},getStepSpacesInfo:function getStepSpacesInfo(measurement){var maxItemSpaces=measurement.maxItemSpaces,width=measurement.width;return{iconHeight:maxItemSpaces.height,iconWidth:width,stepPadding:{horizontal:!1,vertical:!0}}}}),_legendOrientation),positionConfig=(position_config_defineProperty(_positionConfig={},"left",legendOrientation.vertical),position_config_defineProperty(_positionConfig,"right",legendOrientation.vertical),position_config_defineProperty(_positionConfig,"top",legendOrientation.horizontal),position_config_defineProperty(_positionConfig,"bottom",legendOrientation.horizontal),_positionConfig),alignmentMap=(position_config_defineProperty(_alignmentMap={},"left","end"),position_config_defineProperty(_alignmentMap,"right","start"),position_config_defineProperty(_alignmentMap,"top","center"),position_config_defineProperty(_alignmentMap,"bottom","center"),_alignmentMap),itemStack=(position_config_defineProperty(_itemStack={},"left",[VALUE,"shape"]),position_config_defineProperty(_itemStack,"right",["shape",VALUE]),position_config_defineProperty(_itemStack,"top",[VALUE,"shape"]),position_config_defineProperty(_itemStack,"bottom",["shape",VALUE]),_itemStack),renderer_createLegendSkeleton=function createLegendSkeleton(context,container,classPrefix,data){var gradWidth,gradHeight,maxGradHeight,maxGradWidth,measurement=context.measurement(),margin=measurement.margin,border=measurement.border,titleSpaces=measurement.titleSpaces,width=measurement.width,height=measurement.height,maxWidth=measurement.maxWidth,maxHeight=measurement.maxHeight;gradHeight=height-(titleSpaces.height+2*margin+2*border),gradWidth=width-(2*margin+2*border),maxGradHeight=maxHeight-(titleSpaces.height+2*margin+2*border),maxGradWidth=maxWidth-(2*margin+2*border);var legendBody=makeElement(container,"div",[1],"".concat(classPrefix,"-legend-body"));return legendBody.select(".".concat(classPrefix,"-legend-overflow")).remove(),maxGradWidth&&maxGradWidth4)}(shape)?shape:defaults_ICON_MAP(shape).size(size)(),makeElement(groupElement,"path",function(data){return[data]}).attr("d",pathStr)}return d[1]="circle",createShape(d,elem,"circle")}(datum,makeElement(svg,"g",[datum[1]],"".concat(classPrefix,"-legend-icon")),datum[3]?"circle":"square",iconWidth,iconHeight).attr("transform","translate(".concat(maxIconWidth/2-padding," ").concat(iconHeight/2,")")).attr("fill",datum[2]||color):makeElement(svg,"rect",[datum[1]],"".concat(classPrefix,"-legend-icon")).attr("x",0).attr("y",0).attr("width",maxIconWidth).attr("height",iconHeight).attr("fill",datum[2]||color)};function discrete_legend_typeof(obj){return(discrete_legend_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function discrete_legend_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}function discrete_legend_toConsumableArray(arr){return function discrete_legend_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);isteps[steps.length-1]&&domainForLegend.push(domain[1])):domainForLegend=legend_helper_getInterpolatedData(domain,steps-1),(domainForLegend=gradient_legend_toConsumableArray(new Set(domainForLegend)).sort(function(a,b){return a-b})).map(function(ele,i){var _ref,value=domainForLegend[i];return gradient_legend_defineProperty(_ref={},scaleType,"size"===scaleType?scale[scaleFn](ele)*scale.getScaleFactor():scale[scaleFn](Math.floor(ele))),gradient_legend_defineProperty(_ref,"value",+value.toFixed(2)),gradient_legend_defineProperty(_ref,"id",i),_ref}).filter(function(d){return null!==d.value})}},{key:"getLabelSpaces",value:function getLabelSpaces(effPadding){this.config({item:{text:{orientation:this.config().position}}});var axis=function createAxis(context){var data=context.data(),align=context.config().align,AxisCell=context._cells.AxisCell,newAxis=new continous_axis_ContinousAxis({id:"legend-".concat(context._id),orientation:align===ALIGN_VERTICAL?"right":"bottom",style:context._computedStyle,nice:!1,showAxisName:!1,tickValues:data.map(function(d){return d.value}),fixedBaseline:!1,labels:{rotation:0}},{labelManager:context._labelManager});return newAxis.domain(getGradientDomain(data)),newAxis.range([1,1]),(new AxisCell).source(newAxis).config({margin:{left:0,bottom:0,top:0,right:0}})}(this),axisSpace=axis.getLogicalSpace(),space={width:axisSpace.width-effPadding,height:axisSpace.height-effPadding},axisDomainLength=axis.source().domain().length,labelSpaces=new Array(axisDomainLength).fill(space);return this.axis(axis),labelSpaces}},{key:"getDrawingContext",value:function getDrawingContext(){return{svgContainer:this._legendGradientSvg}}},{key:"render",value:function render(){var firebolt=this.firebolt(),legendContainer=gradient_legend_get(gradient_legend_getPrototypeOf(GradientLegend.prototype),"render",this).call(this,this.mount());return function renderGradient(context,container){var gradHeight,gradWidth,_context$config2=context.config(),align=_context$config2.align,classPrefix=_context$config2.classPrefix,item=_context$config2.item,data=context.data(),_createLegendSkeleton=gradient_helper_createLegendSkeleton(container,classPrefix,data),legendContainer=_createLegendSkeleton.legendContainer,legendGradSvg=_createLegendSkeleton.legendGradSvg,legendGradCont=_createLegendSkeleton.legendGradCont,linearGradient=_createLegendSkeleton.linearGradient,legendRect=_createLegendSkeleton.legendRect,labelDim=context.axis().source().getAxisDimensions().tickDimensions,_context$measurement=context.measurement(),padding=_context$measurement.padding,margin=_context$measurement.margin,border=_context$measurement.border,titleSpaces=_context$measurement.titleSpaces,maxItemSpaces=_context$measurement.maxItemSpaces,maxHeight=_context$measurement.maxHeight,maxWidth=_context$measurement.maxWidth,height=_context$measurement.height,width=_context$measurement.width,gradientDimensions={};gradHeight=Math.floor(height-(titleSpaces.height+2*margin+2*border)),gradWidth=Math.floor(width-(2*margin+2*border)),align===ALIGN_HORIZONTAL?(gradientDimensions.height=item.icon.height,gradientDimensions.width=gradWidth-2*padding-labelDim.width/2,linearGradient.attr("x2","100%").attr("y1","0%"),legendGradCont.attr("transform","translate( ".concat(labelDim.width/2," 0)")),gradient_helper_renderAxis(context,legendContainer,gradHeight-item.icon.height-padding,gradWidth-2*padding-1),legendContainer.classed("".concat(classPrefix,"-overflow-x"),width>maxWidth),applyStyle(legendContainer,{height:"".concat(maxItemSpaces.height+border+padding,"px"),width:"".concat(Math.min(width,maxWidth),"px"),padding:"".concat(padding,"px")}),legendRect.attr("height",gradientDimensions.height),legendRect.attr("width",gradientDimensions.width-labelDim.width/2)):(gradientDimensions.height=gradHeight-2*padding-labelDim.height/2,gradientDimensions.width=item.icon.width,linearGradient.attr("x2","0%").attr("y1","100%"),legendGradCont.attr("transform","translate(0 ".concat(labelDim.height/2,")")),gradient_helper_renderAxis(context,legendContainer,gradHeight-2*padding-1,gradWidth-item.icon.width-2*padding),legendContainer.classed("".concat(classPrefix,"-overflow-y"),height>maxHeight),applyStyle(legendContainer,{height:"".concat(Math.min(height,maxHeight),"px"),width:"".concat(width,"px"),padding:"".concat(padding,"px")}),legendRect.attr("height",gradientDimensions.height-labelDim.height/2),legendRect.attr("width",gradientDimensions.width)),applyStyle(legendGradSvg,{height:"".concat(gradientDimensions.height,"px"),width:"".concat(gradientDimensions.width,"px")}),applyStyle(legendRect,{fill:"url(#linear-gradient)"}),legendGradSvg.attr("height",gradientDimensions.height),legendGradSvg.attr("width",gradientDimensions.width),context.measurement({gradientDimensions:gradientDimensions}),context._legendGradientSvg=legendGradSvg}(this,legendContainer),legendContainer.selectAll("div").style("float","left"),firebolt.mapActionsAndBehaviour(),firebolt.createSelectionSet(this.data().map(function(d){return d.id})),legendContainer}},{key:"getCriteriaFromData",value:function getCriteriaFromData(data){return[[this.fieldName()],[data.value]]}}],[{key:"create",value:function create(dependencies){return new GradientLegend(dependencies)}},{key:"type",value:function type(){return"gradient"}}]),GradientLegend}();function step_legend_typeof(obj){return(step_legend_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function step_legend_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}function step_legend_toConsumableArray(arr){return function step_legend_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);isteps[steps.length-1]&&(domainBounds.upper=["".concat(formatter.bounds.upper," ").concat(steps[steps.length-1])])):domainLeg=legend_helper_getInterpolatedData(domain,steps),domainLeg=(domainLeg=step_legend_toConsumableArray(new Set(domainLeg)).sort(function(a,b){return a-b})).map(function(ele,i){var _ref,value=null;return i0&&void 0!==arguments[0]?arguments[0]:{},registrableComponents=this._registrableComponents,mergedPolicy=mergeRecursive(mergeRecursive({},function defaultPolicy(registrableComponents){var aliases=registrableComponents.map(function(comp){return comp.alias()});return{behaviours:{"*":function _(propagationPayload){var propagationCanvas=propagationPayload.sourceCanvas;return!propagationCanvas||-1!==aliases.indexOf(propagationCanvas)}}}}(registrableComponents)),policy);return registrableComponents.forEach(function(canvas){canvas.firebolt().crossInteractionPolicy(mergedPolicy)}),this}}]),ActionModel}()),TITLE_CONFIG={position:"top",align:"left",padding:4,className:"".concat("muze","-title-container")},SUB_TITLE_CONFIG={position:"top",align:"left",padding:16,maxLines:2,className:"".concat("muze","-subtitle-container")},LAYOUT_ALIGN_LEFT="left";function canvas_local_options_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}var localOptions=(canvas_local_options_defineProperty(_localOptions={},"rows",{value:null,meta:{typeCheck:"constructor",typeExpected:"Array"}}),canvas_local_options_defineProperty(_localOptions,"columns",{value:null,meta:{typeCheck:"constructor",typeExpected:"Array"}}),canvas_local_options_defineProperty(_localOptions,"color",{value:null,meta:{typeCheck:"constructor",typeExpected:"Object",sanitization:function sanitization(config){return"string"==typeof config||null===config?{field:config}:config}}}),canvas_local_options_defineProperty(_localOptions,"shape",{value:null,meta:{typeCheck:"constructor",typeExpected:"Object",sanitization:function sanitization(config){return"string"==typeof config||null===config?{field:config}:config}}}),canvas_local_options_defineProperty(_localOptions,"size",{value:null,meta:{typeCheck:"constructor",typeExpected:"Object",sanitization:function sanitization(config){return"string"==typeof config||null===config?{field:config}:config}}}),canvas_local_options_defineProperty(_localOptions,"detail",{value:[],meta:{typeCheck:"constructor",typeExpected:"Array"}}),canvas_local_options_defineProperty(_localOptions,"layers",{value:[],meta:{typeCheck:"constructor",typeExpected:"Array"}}),canvas_local_options_defineProperty(_localOptions,"transform",{value:null,meta:{typeCheck:"constructor",typeExpected:"Object"}}),_localOptions),canvasOptions=(canvas_local_options_defineProperty(_canvasOptions={},"title",{value:[null,null],meta:{typeCheck:["constructor","constructor"],typeExpected:["Function","Object"],spreadParams:!0,sanitization:[function(title){if("string"==typeof title){var t=function t(){return title};return t._sanitized=!0,t}return title},function(titleConfig){var defConfig=mergeRecursive({},TITLE_CONFIG);return mergeRecursive(defConfig,titleConfig)}]}}),canvas_local_options_defineProperty(_canvasOptions,"subtitle",{value:[null,null],meta:{typeCheck:["constructor","constructor"],typeExpected:["Function","Object"],spreadParams:!0,sanitization:[function(subtitle){if("string"==typeof subtitle){var sub=function sub(){return subtitle};return sub._sanitized=!0,sub}return subtitle},function(subtitleConfig){var defConfig=mergeRecursive({},SUB_TITLE_CONFIG);return mergeRecursive(defConfig,subtitleConfig)}]}}),_canvasOptions);function layoutComponent_defineProperties(target,props){for(var i=0;i2&&void 0!==arguments[2]&&arguments[2],isGridComponent=arguments.length>3&&void 0!==arguments[3]&&arguments[3],cut="",componentRatioWidth=1,leftHeight=0,leftWidth=0;if(!component)return{first:definitionModel,second:definitionModel};var _component$getLogical=component.getLogicalSpace(),componentHeight=_component$getLogical.height,componentWidth=_component$getLogical.width,position=component.position();"top"===position||"bottom"===position?(cut="h",componentRatioWidth=componentHeight/definitionModel.remainingHeight(),leftHeight=definitionModel.remainingHeight()-componentHeight,leftWidth=definitionModel.remainingWidth()):(cut="v",componentRatioWidth=componentWidth/definitionModel.remainingWidth(),leftWidth=definitionModel.remainingWidth()-componentWidth,leftHeight=definitionModel.remainingHeight()),leftOvercomponentRationWidth=1-componentRatioWidth,definitionModel.cut(cut);var firstLaneConfig={host:component.name(),cut:null,ratioWeight:componentRatioWidth,preferred:!isGridComponent&&isPreferred,lanes:[]},firstLane=new DefinitionModel(firstLaneConfig);firstLane.remainingHeight(componentHeight),firstLane.remainingWidth(componentWidth);var secondLane=new DefinitionModel({host:null,cut:null,ratioWeight:leftOvercomponentRationWidth,preferred:!isGridComponent&&!isPreferred,lanes:[]});return secondLane.remainingHeight(leftHeight),secondLane.remainingWidth(leftWidth),isPreferred?definitionModel.lanes([firstLane]):"top"===position||"left"===position?definitionModel.lanes([firstLane,secondLane]):definitionModel.lanes([secondLane,firstLane]),{first:firstLane,second:secondLane}}function tree_toConsumableArray(arr){return function tree_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);i0?matrix[0]:matrix[1];return isTransposed?(joinedMatrix=matrix[0].length>0?utils_toConsumableArray(matrix[0]):[],joinedMatrix=matrix[1].length>0?[].concat(utils_toConsumableArray(joinedMatrix),utils_toConsumableArray(matrix[1])):joinedMatrix):joinedMatrix=joinedMatrix.map(function(row,rowIndex){var rowData=[];return matrix[0].length>0&&(rowData=utils_toConsumableArray(matrix[0][rowIndex])),matrix[1].length>0&&(rowData=[].concat(utils_toConsumableArray(rowData),utils_toConsumableArray(matrix[1][rowIndex]))),rowData}),joinedMatrix},utils_computeLogicalSpace=function computeLogicalSpace(){var item=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},config=arguments.length>1?arguments[1]:void 0,maxMeasures=arguments.length>2?arguments[2]:void 0,_config$isTransposed=config.isTransposed,isTransposed=void 0!==_config$isTransposed&&_config$isTransposed,unitMeasures=config.unitMeasures,_getMeasureInfo=function getMeasureInfo(isTransposed){return isTransposed?{firstMeasure:enums_constants_HEIGHT,secondMeasure:"width"}:{firstMeasure:"width",secondMeasure:enums_constants_HEIGHT}}(isTransposed),firstMeasure=_getMeasureInfo.firstMeasure,secondMeasure=_getMeasureInfo.secondMeasure,values=item.values,minMeasures=function getMinMeasures(isTransposed,unitMeasures){return isTransposed?{height:0,width:unitMeasures.width}:{height:unitMeasures.height,width:0}}(isTransposed,unitMeasures);if(values[0].key){var _logicalSpace,logicalSpace=(utils_defineProperty(_logicalSpace={},firstMeasure,0),utils_defineProperty(_logicalSpace,secondMeasure,0),_logicalSpace);return values.forEach(function(valueItem){var space=computeLogicalSpace(valueItem,config,maxMeasures);logicalSpace[firstMeasure]=Math.max(logicalSpace[firstMeasure],space[firstMeasure],minMeasures[firstMeasure]),logicalSpace[secondMeasure]+=+space[secondMeasure]}),item.space=logicalSpace,logicalSpace}return function getLogicalSpace(item,measures,minMeasures){var _ref,maxMeasure=arguments.length>3&&void 0!==arguments[3]?arguments[3]:[],firstMeasure=measures.firstMeasure,secondMeasure=measures.secondMeasure,firstMeasureValue=0,secondMeasureValue=0;return item.values.forEach(function(valueArray){var _item$space,fMeasure=0,sMeasure=0;valueArray.forEach(function(placeholder,colIndex){placeholder.setAvailableSpace();var space=placeholder.getLogicalSpace();sMeasure=Math.max(sMeasure,+space[secondMeasure],minMeasures[secondMeasure]),maxMeasure[colIndex]=Math.max(maxMeasure[colIndex]||0,space[firstMeasure]),fMeasure+=+maxMeasure[colIndex]}),secondMeasureValue+=sMeasure,firstMeasureValue=Math.max(firstMeasureValue,fMeasure),item.space=(utils_defineProperty(_item$space={},secondMeasure,Math.ceil(secondMeasureValue)),utils_defineProperty(_item$space,firstMeasure,Math.ceil(firstMeasureValue)),_item$space)}),utils_defineProperty(_ref={},secondMeasure,secondMeasureValue),utils_defineProperty(_ref,firstMeasure,firstMeasureValue),_ref}(item,{firstMeasure:firstMeasure,secondMeasure:secondMeasure},minMeasures,maxMeasures)},createMatrixEachLevel=function createMatrixEachLevel(item,isTransposed){if(item.values[0].key){var arr=[];return item.values.forEach(function(child){isTransposed?createMatrixEachLevel(child,isTransposed).forEach(function(e,i){var _arr$i;arr[i]=arr[i]||[],(_arr$i=arr[i]).push.apply(_arr$i,utils_toConsumableArray(e))}):arr.push.apply(arr,utils_toConsumableArray(createMatrixEachLevel(child,isTransposed)))}),item.matrix=arr,arr}return item.matrix=isTransposed?item.values[0].map(function(col,colIndex){return item.values.map(function(row){return row[colIndex]})}):item.values,item.matrix},extraCellsRemover=function extraCellsRemover(arr,beg,end){return arr.slice(beg,-end)},visual_matrix_props_PROPS={config:{sanitization:function sanitization(context,value){return mergeRecursive(context._config||{},value)}},maxMeasures:{},availableSpace:{},logicalSpace:{}},visual_matrix_default_config_defaultConfig={distribution:[],classPrefix:"muze",isDistributionEqual:!0,unitMeasures:{height:100,width:100,border:1},isTransposed:!1,facet:"primary",extraCellLengths:[]};function visual_matrix_defineProperties(target,props){for(var i=0;i1&&void 0!==arguments[1]?arguments[1]:{};!function visual_matrix_classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}(this,VisualMatrix),this._lastLevelKey=0,this._primaryMatrix=matrix[0]||[],this._secondaryMatrix=matrix[1]||[],this._maxMeasures=[],this._availableSpace={},generateGetterSetters(this,visual_matrix_props_PROPS);var defCon=Object.assign({},this.constructor.defaultConfig());this.config(mergeRecursive(defCon,config)),this._layoutMatrix=combineMatrices([matrix[0]||[],matrix[1]||[]],this.config())}return function visual_matrix_createClass(Constructor,protoProps,staticProps){return protoProps&&visual_matrix_defineProperties(Constructor.prototype,protoProps),staticProps&&visual_matrix_defineProperties(Constructor,staticProps),Constructor}(VisualMatrix,[{key:"computeLogicalSpace",value:function computeLogicalSpace(){throw new Error(ERROR_MSG.INTERFACE_IMPL)}},{key:"computeViewableSpaces",value:function computeViewableSpaces(){throw new Error(ERROR_MSG.INTERFACE_IMPL)}},{key:"removeExtraCells",value:function removeExtraCells(){throw new Error(ERROR_MSG.INTERFACE_IMPL)}},{key:"getPriorityDistribution",value:function getPriorityDistribution(){throw new Error(ERROR_MSG.INTERFACE_IMPL)}},{key:"calculateDepth",value:function calculateDepth(){throw new Error(ERROR_MSG.INTERFACE_IMPL)}},{key:"redistributeSpaces",value:function redistributeSpaces(){throw new Error(ERROR_MSG.INTERFACE_IMPL)}},{key:"redistributeViewSpaces",value:function redistributeViewSpaces(){throw new Error(ERROR_MSG.INTERFACE_IMPL)}},{key:"getCellDimensions",value:function getCellDimensions(){throw new Error(ERROR_MSG.INTERFACE_IMPL)}},{key:"primaryMatrix",value:function primaryMatrix(){return arguments.length?this:this._primaryMatrix}},{key:"secondaryMatrix",value:function secondaryMatrix(){return arguments.length?this:this._secondaryMatrix}},{key:"tree",value:function tree(){return arguments.length?this:this._tree}},{key:"createTree",value:function createTree(){var _createTree2=function createTree(context){var matrixTree={},lastLevelKey=0,facet="primary",nestFn=utils_nest(),keys=[],layoutMatrix=context._layoutMatrix,primaryMatrix=context.primaryMatrix(),secondaryMatrix=context.secondaryMatrix(),_context$config=context.config(),isTransposed=_context$config.isTransposed,breakPage=_context$config.breakPage;if(isTransposed){if(facet=0===primaryMatrix.length?"primary":0===secondaryMatrix.length?"secondary":primaryMatrix.length>=secondaryMatrix.length?"primary":"secondary",primaryMatrix.length>0){for(var _i2=0;_i20){for(var primaryMatrixLength=primaryMatrix.length,_i3=secondaryMatrix.length-1;_i3>0;_i3--)keys.push(_i3+primaryMatrixLength);keys.push(primaryMatrixLength),"primary"===facet&&(lastLevelKey=primaryMatrixLength)}var newMatrix;keys.forEach(function(key){var counter=-1;return nestFn.key(function(d){return counter++,"".concat(d[key].valueOf(),"-").concat(findInPage(counter,breakPage))})}),newMatrix=layoutMatrix[0].map(function(col,colIndex){return layoutMatrix.map(function(row){return row[colIndex]})}),matrixTree=nestFn.entries(newMatrix)}else{if(facet=0===primaryMatrix.length?"primary":0===secondaryMatrix.length?"secondary":primaryMatrix.length>=secondaryMatrix.length?"primary":"secondary",primaryMatrix.length>0){for(var i=0;i0){for(var keyLength=primaryMatrix.length>0?primaryMatrix[0].length:0,_i=secondaryMatrix[0].length-1;_i>0;_i--)keys.push(_i+keyLength);keys.push(keyLength),"primary"===facet&&(lastLevelKey=keyLength)}else lastLevelKey=primaryMatrix.length>0?primaryMatrix[0].length-1:0;keys.forEach(function(key){var counter=-1;return nestFn.key(function(d){return counter++,"".concat(d[key].valueOf(),"-").concat(findInPage(counter,breakPage))})}),matrixTree=nestFn.entries(layoutMatrix)}return{tree:matrixTree,lastLevelKey:lastLevelKey}}(this),tree=_createTree2.tree,lastLevelKey=_createTree2.lastLevelKey;return this._lastLevelKey=lastLevelKey,tree}},{key:"getLogicalSpace",value:function getLogicalSpace(){return this.logicalSpace()}},{key:"setAvailableSpace",value:function setAvailableSpace(width,height){this.availableSpace({width:width,height:height});var tree=this.tree(),heightMeasures=this.populateMaxMeasures(enums_constants_HEIGHT,tree),widthMeasures=this.populateMaxMeasures("width",tree),depth=this.calculateDepth(widthMeasures,heightMeasures);return this.viewableMatrix=this.createViewPortMatrix(depth),this.viewableMeasures=this.redistributeSpaces(width,height),this}},{key:"populateMaxMeasures",value:function populateMaxMeasures(type,matrixTree){var _this=this,depth=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0,measures=arguments.length>3&&void 0!==arguments[3]?arguments[3]:[];if(measures[depth]=Math.max(measures[depth]||0,matrixTree.space[type]),matrixTree.values){var childDepth=depth+1;matrixTree.values.forEach(function(child){child.space&&(measures=_this.populateMaxMeasures(type,child,childDepth,measures))})}return measures}},{key:"getViewableSpaces",value:function getViewableSpaces(){return this.viewableMeasures}},{key:"getViewableMatrices",value:function getViewableMatrices(){return this.viewableMatrix}},{key:"createViewPortMatrix",value:function createViewPortMatrix(depth){var arr=[];return function createMatrixInstances(){var arr=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],depth=arguments.length>1?arguments[1]:void 0,matrixInfo=arguments.length>2?arguments[2]:void 0,layout=arguments.length>3?arguments[3]:void 0,breakPointer=layout._breakPointer,isTransposed=layout.config().isTransposed,tree=matrixInfo.tree,layoutMatrix=matrixInfo.layoutMatrix;if(0===depth){var brokenMatrix=function breakMatrix(matrix,isTransposed,breakPointer){var primaryMatrix=[],secondaryMatrix=[];return isTransposed?matrix.forEach(function(row,rowIndex){rowIndex>=breakPointer?secondaryMatrix.push(row):primaryMatrix.push(row)}):matrix.forEach(function(row,rowIndex){row.forEach(function(column,columnIndex){columnIndex>=breakPointer?(secondaryMatrix[rowIndex]=secondaryMatrix[rowIndex]||[],secondaryMatrix[rowIndex].push(column)):(primaryMatrix[rowIndex]=primaryMatrix[rowIndex]||[],primaryMatrix[rowIndex].push(column))})}),[primaryMatrix,secondaryMatrix]}(tree.matrix,isTransposed,breakPointer);return arr.push({matrix:tree.matrix,primaryMatrix:brokenMatrix[0],secondaryMatrix:brokenMatrix[1],space:tree.space}),arr}var nextLevel=depth-1;return tree.values.forEach(function(e){createMatrixInstances(arr,nextLevel,{tree:e,layoutMatrix:layoutMatrix},layout)}),arr}(arr,depth,this.removeExtraCells(),this),arr}}],[{key:"defaultConfig",value:function defaultConfig(){return visual_matrix_default_config_defaultConfig}}]),VisualMatrix}();function row_matrix_typeof(obj){return(row_matrix_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function row_matrix_defineProperties(target,props){for(var i=0;i1&&void 0!==arguments[1]?arguments[1]:{};return function row_matrix_classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}(this,RowVisualMatrix),(_this=row_matrix_possibleConstructorReturn(this,row_matrix_getPrototypeOf(RowVisualMatrix).call(this,matrix,config)))._breakPointer=matrix[0].length>0?matrix[0][0].length:0,_this._layoutMatrix=combineMatrices([matrix[0]||[],matrix[1]||[]],_this.config()),_this._tree={key:ROW_ROOT,values:_this.createTree()},_this._logicalSpace=_this.computeLogicalSpace(),_this}return function row_matrix_inherits(subClass,superClass){if("function"!=typeof superClass&&null!==superClass)throw new TypeError("Super expression must either be null or a function");subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:!0,configurable:!0}}),superClass&&row_matrix_setPrototypeOf(subClass,superClass)}(RowVisualMatrix,visual_matrix_VisualMatrix),function row_matrix_createClass(Constructor,protoProps,staticProps){return protoProps&&row_matrix_defineProperties(Constructor.prototype,protoProps),staticProps&&row_matrix_defineProperties(Constructor,staticProps),Constructor}(RowVisualMatrix,[{key:"computeLogicalSpace",value:function computeLogicalSpace(){var matrixTree=this.tree();return createMatrixEachLevel(matrixTree,!1),utils_computeLogicalSpace(matrixTree,this.config(),this.maxMeasures())}},{key:"computeViewableSpaces",value:function computeViewableSpaces(measures){var _this2=this,maxHeights=measures.maxHeights,maxWidths=measures.maxWidths,height=measures.height;return this.viewableMatrix.map(function(matrixInst,i){var cellDimOptions={matrixInst:matrixInst,maxWidths:maxWidths,maxHeights:maxHeights,matrixIndex:i},_this2$getCellDimensi=_this2.getCellDimensions(cellDimOptions),widths=_this2$getCellDimensi.widths,rowHeights=_this2$getCellDimensi.rowHeights,columnWidths=_this2$getCellDimensi.columnWidths,heightMeasures=[height,height],columnMeasures=widths;return{rowHeights:{primary:rowHeights[0],secondary:rowHeights[1]},columnWidths:{primary:columnWidths[0],secondary:columnWidths[1]},height:{primary:heightMeasures[0],secondary:heightMeasures[1]},width:{primary:columnMeasures[0],secondary:columnMeasures[1]}}})}},{key:"removeExtraCells",value:function removeExtraCells(){var _this$config=this.config(),isTransposed=_this$config.isTransposed,extraCellLengths=_this$config.extraCellLengths,matrix=this._layoutMatrix,tree=mergeRecursive({},this.tree()),begCellLen=extraCellLengths[0],endCellLen=extraCellLengths[1]||Number.NEGATIVE_INFINITY,layoutMatrix=isTransposed?matrix.slice(0).map(function(e){return extraCellsRemover(e,begCellLen,endCellLen)}):extraCellsRemover(matrix,begCellLen,endCellLen);return tree.values=extraCellsRemover(tree.values,begCellLen,endCellLen),tree.matrix=extraCellsRemover(tree.matrix,begCellLen,endCellLen),{tree:tree,layoutMatrix:layoutMatrix}}},{key:"getPriorityDistribution",value:function getPriorityDistribution(measures){var remainaingAvailWidth,remainaingWidth,cWidths=[],conditions=[],maxPrioritySpace=0,matrix=measures.matrix,availableWidth=measures.width,maxWidths=measures.maxMeasures,currentWidth=measures.maxWidth,height=measures.height,priority=this.config().priority,primaryMatrixLength=this.primaryMatrix().length?this.primaryMatrix()[0].length:0,dist=[];remainaingAvailWidth=availableWidth,remainaingWidth=currentWidth,(conditions=2===priority?[primaryMatrixLength-1,primaryMatrixLength]:0===priority?[primaryMatrixLength-1]:[primaryMatrixLength]).forEach(function(i){dist[i]=maxWidths[i],maxPrioritySpace+=maxWidths[i],remainaingAvailWidth-=dist[i],remainaingWidth-=dist[i]}),matrix[0].forEach(function(e,i){-1===conditions.indexOf(i)&&(dist[i]=remainaingAvailWidth*(maxWidths[i]/remainaingWidth))}),matrix.forEach(function(row){return row.forEach(function(col,cIdx){-1===conditions.indexOf(cIdx)?(col.setAvailableSpace(dist[cIdx],height),cWidths[cIdx]=Math.max(cWidths[cIdx]||0,Math.floor(col.getLogicalSpace().width))):cWidths[cIdx]=0})});var prioritySpace=availableWidth-cWidths.reduce(function(t,n){return t+n});return prioritySpace<0?cWidths=cWidths.map(function(){return 0}):conditions.forEach(function(i){cWidths[i]=Math.floor(prioritySpace*(dist[i]/maxPrioritySpace||1))}),cWidths}},{key:"calculateDepth",value:function calculateDepth(widthMeasures,heightMeasures){var i,height=this.availableSpace().height;for(i=0;i0?logicalWidths:maxMeasures.map(function(){return 0}),rHeights=function getDistributedHeight(context){var heightWithoutGutter,distSum=0,gutterSum=0,isTransposed=context.isTransposed,distribution=context.distribution,availableHeight=context.availableHeight,height=context.height,isDistributionEqual=context.isDistributionEqual,gutter=context.gutter,matrix=context.matrix,cIdx=context.cIdx;distribution&&void 0!==distribution[0]&&(distSum=distribution.reduce(function(t,n){return t+=n})),gutter&&void 0!==gutter[0]&&(gutterSum=gutter.reduce(function(t,n){return t+=n})),heightWithoutGutter=availableHeight-Math.floor(availableHeight*gutterSum);var colLen=matrix.length;return matrix.map(function(row,rIdx){var space=row[cIdx].getLogicalSpace().height,distHeight=space+space/height*(heightWithoutGutter-height);return isTransposed||(distribution.length>0&&colLen===distribution.length?distHeight=heightWithoutGutter*distribution[rIdx]/distSum:(isDistributionEqual||0===context.height)&&(distHeight=heightWithoutGutter/colLen)),Math.floor(distHeight)})}({matrix:matrix,cIdx:this._lastLevelKey,height:mHeight,availableHeight:height,isDistributionEqual:isDistributionEqual,distribution:distribution,isTransposed:isTransposed,gutter:gutter}),maxWidths.length>0&&(cWidths=cWidths.map(function(e,i){return Math.max(e,maxWidths[0][i]||0)})),maxWidths.push(cWidths);for(var x=0;x=breakPointer&&(columnWidths[1][cIdx-breakPointer]=colWidth,widths[1]=(widths[1]||0)+colWidth),cIdx===_this4._lastLevelKey&&(rowHeights[0][rIdx]=colHeight,rowHeights[1][rIdx]=colHeight)})}),{heights:[0,0],widths:widths,rowHeights:rowHeights,columnWidths:columnWidths}}}]),RowVisualMatrix}();function column_matrix_typeof(obj){return(column_matrix_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function column_matrix_defineProperties(target,props){for(var i=0;i1&&void 0!==arguments[1]?arguments[1]:{};return function column_matrix_classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}(this,ColumnVisualMatrix),(_this=column_matrix_possibleConstructorReturn(this,column_matrix_getPrototypeOf(ColumnVisualMatrix).call(this,matrix,config)))._breakPointer=matrix[0].length,_this._tree={key:COLUMN_ROOT,values:_this.createTree()},_this._logicalSpace=_this.computeLogicalSpace(),_this}return function column_matrix_inherits(subClass,superClass){if("function"!=typeof superClass&&null!==superClass)throw new TypeError("Super expression must either be null or a function");subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:!0,configurable:!0}}),superClass&&column_matrix_setPrototypeOf(subClass,superClass)}(ColumnVisualMatrix,visual_matrix_VisualMatrix),function column_matrix_createClass(Constructor,protoProps,staticProps){return protoProps&&column_matrix_defineProperties(Constructor.prototype,protoProps),staticProps&&column_matrix_defineProperties(Constructor,staticProps),Constructor}(ColumnVisualMatrix,[{key:"computeLogicalSpace",value:function computeLogicalSpace(){var matrixTree=this.tree();return createMatrixEachLevel(matrixTree,!0),utils_computeLogicalSpace(matrixTree,this.config(),this.maxMeasures())}},{key:"computeViewableSpaces",value:function computeViewableSpaces(measures){var _this2=this,maxHeights=measures.maxHeights,maxWidths=measures.maxWidths,height=measures.height,width=measures.width;return this.viewableMatrix.map(function(matrixInst,i){var cellDimOptions={matrixInst:matrixInst,maxWidths:maxWidths,maxHeights:maxHeights,matrixIndex:i,height:height},_this2$getCellDimensi=_this2.getCellDimensions(cellDimOptions),heights=_this2$getCellDimensi.heights,rowHeights=_this2$getCellDimensi.rowHeights,columnWidths=_this2$getCellDimensi.columnWidths,heightMeasures=heights,columnMeasures=[width,width];return{rowHeights:{primary:rowHeights[0],secondary:rowHeights[1]},columnWidths:{primary:columnWidths[0],secondary:columnWidths[1]},height:{primary:heightMeasures[0],secondary:heightMeasures[1]},width:{primary:columnMeasures[0],secondary:columnMeasures[1]}}})}},{key:"removeExtraCells",value:function removeExtraCells(){var _this$config=this.config(),isTransposed=_this$config.isTransposed,extraCellLengths=_this$config.extraCellLengths,matrix=this._layoutMatrix,tree=mergeRecursive({},this.tree()),begCellLen=extraCellLengths[0],endCellLen=extraCellLengths[1]||Number.NEGATIVE_INFINITY,layoutMatrix=isTransposed?matrix.slice(0).map(function(e){return extraCellsRemover(e,begCellLen,endCellLen)}):extraCellsRemover(matrix,begCellLen,endCellLen);return tree.values=extraCellsRemover(tree.values,begCellLen,endCellLen),tree.matrix=tree.matrix.map(function(e){return extraCellsRemover(e,begCellLen,endCellLen)}),{tree:tree,layoutMatrix:layoutMatrix}}},{key:"getPriorityDistribution",value:function getPriorityDistribution(measures){var height=measures.height,maxHeights=measures.maxHeights,remainaingHeight=height,heightDist=[],conditions=[],divider=2,priority=this.config().priority,primaryMatrixLength=this.primaryMatrix().length;return 2===priority?(conditions=[primaryMatrixLength-1,primaryMatrixLength],divider=2):(conditions=0===priority?[primaryMatrixLength-1]:[primaryMatrixLength],divider=1),maxHeights.forEach(function(e,i){-1===conditions.indexOf(i)&&(heightDist[i]=e,remainaingHeight-=e)}),remainaingHeight<0?heightDist=heightDist.map(function(){return 0}):conditions.forEach(function(e){remainaingHeight/divider0)distWidth=availableWidth*distribution[colIndex]/distSum;else if(isDistributionEqual||0===width){var rowLen=row.length;distWidth=availableWidth/rowLen}return Math.floor(distWidth)})}({row:matrix[this._lastLevelKey],width:mWidth,availableWidth:width},this.config());matrix.forEach(function(row,rIdx){return row.forEach(function(col,cIdx){var oldLogicalSpace=col.getLogicalSpace();col.setAvailableSpace(cWidths[cIdx]-borderWidth,oldLogicalSpace.height),rHeights[rIdx]=Math.max(rHeights[rIdx]||0,Math.floor(col.getLogicalSpace().height))})}),maxHeights.length>0&&(rHeights=rHeights.map(function(e,i){return Math.max(e,maxHeights[0][i])})),maxHeights.push(rHeights);for(var x=0;x=breakPointer&&(rowHeights[1][rIdx-breakPointer]=colHeight,heights[1]=(heights[1]||0)+colHeight),rIdx===_this4._lastLevelKey&&(columnWidths[0][cIdx]=colWidth,columnWidths[1][cIdx]=colWidth)})}),{heights:heights,widths:[0,0],rowHeights:rowHeights,columnWidths:columnWidths}}}]),ColumnVisualMatrix}();function layout_helper_toConsumableArray(arr){return function layout_helper_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);imaxMeasure&&layout.scrollInfo(computations_defineProperty({},scrollType,!0)),Math.max(maxMeasure,actualMeasure)}}(layout,paginationDetailsMap[matrixType],relatedMaxMeasure,buffer)},computations_getMatrixHeightDetails=function getMatrixHeightDetails(layout,columnMatrixWidth){var height=layout.measurement().height,buffer=layout.config().buffer,_getHeightRequiredByC=function getHeightRequiredByColMatrix(layout,columnMatrixWidth){var height=layout.measurement().height,columnMatrix=layout.columnMatrix(),maxColumnMatrixHeight=Math.min(columnMatrix.getLogicalSpace().height,height/2);columnMatrix.setAvailableSpace(columnMatrixWidth,maxColumnMatrixHeight);var columnViewSpace=columnMatrix.getViewableSpaces()[layout.config().columnPointer];return{columnMatrixHeight:columnViewSpace.height.primary+columnViewSpace.height.secondary,maxColumnMatrixHeight:maxColumnMatrixHeight}}(layout,columnMatrixWidth),columnMatrixHeight=_getHeightRequiredByC.columnMatrixHeight,maxColumnMatrixHeight=_getHeightRequiredByC.maxColumnMatrixHeight,maxHeightAvailableForRowMatrix=height-Math.min(maxColumnMatrixHeight,columnMatrixHeight);return{columnMatrixHeight:columnMatrixHeight,maxColumnMatrixHeight:maxColumnMatrixHeight,rowMatrixHeight:paginationMeasureGetter(layout,"row",maxHeightAvailableForRowMatrix,buffer),maxHeightAvailableForRowMatrix:maxHeightAvailableForRowMatrix}},bufferCondition={isScroll:!0,pagination:"scroll"},computations_getActualBufferFromConfig=function getActualBufferFromConfig(layout){var buffer=layout.config().buffer,_map2=computations_slicedToArray([enums_constants_HORIZONTAL,enums_constants_VERTICAL].map(function(type){return function getBufferFromCondition(layout,type){var scrollInfo=layout.scrollInfo(),currentBufferType={pagination:layout.config().pagination,isScroll:scrollInfo[type]};return Object.keys(bufferCondition).every(function(e){return bufferCondition[e]===currentBufferType[e]})}(layout,type)?buffer:0}),2);return{horizontalBuffer:_map2[0],verticalBuffer:_map2[1]}},computations_computeLayoutMeasurements=function computeLayoutMeasurements(layout){var rowMatrix=layout.rowMatrix(),columnMatrix=layout.columnMatrix(),_getMatrixWidthDetail=function getMatrixWidthDetails(layout){var rowMatrix=layout.rowMatrix(),width=layout.measurement().width,_layout$config3=layout.config(),border=_layout$config3.border,buffer=_layout$config3.buffer,borderWidth=border.width,rowMatrixWidth=getMatrixMeasurement(rowMatrix,"width"),maxRowMatrixWidth=Math.min(rowMatrixWidth+buffer,width/2),maxWidthAvailableForColumnMatrix=width-maxRowMatrixWidth-borderWidth;return{rowMatrixWidth:rowMatrixWidth,maxRowMatrixWidth:maxRowMatrixWidth,columnMatrixWidth:paginationMeasureGetter(layout,"column",maxWidthAvailableForColumnMatrix,0),maxWidthAvailableForColumnMatrix:maxWidthAvailableForColumnMatrix}}(layout),rowMatrixWidth=_getMatrixWidthDetail.rowMatrixWidth,maxRowMatrixWidth=_getMatrixWidthDetail.maxRowMatrixWidth,maxWidthAvailableForColumnMatrix=_getMatrixWidthDetail.maxWidthAvailableForColumnMatrix,columnMatrixWidth=_getMatrixWidthDetail.columnMatrixWidth,_getMatrixHeightDetai=computations_getMatrixHeightDetails(layout,columnMatrixWidth),columnMatrixHeight=_getMatrixHeightDetai.columnMatrixHeight,rowMatrixHeight=_getMatrixHeightDetai.rowMatrixHeight,maxHeightAvailableForRowMatrix=_getMatrixHeightDetai.maxHeightAvailableForRowMatrix,_getActualBufferFromC=computations_getActualBufferFromConfig(layout),horizontalBuffer=_getActualBufferFromC.horizontalBuffer,verticalBuffer=_getActualBufferFromC.verticalBuffer;rowMatrix.setAvailableSpace(maxRowMatrixWidth-verticalBuffer,rowMatrixHeight-horizontalBuffer);var rowViewableSpaces=rowMatrix.getViewableSpaces(),columnViewableSpaces=columnMatrix.getViewableSpaces();return setViewSpaces(layout,"row",rowViewableSpaces),setViewSpaces(layout,"column",columnViewableSpaces),function setValueMatrixMeasurements(layout,rowViewableSpaces,columnViewableSpaces){var _ref,_ref2,_ref3,_ref4,_ref5,centerMatrix=layout.centerMatrix(),border=layout.config().border,matrices=layout.matrices(),top=matrices.top,bottom=matrices.bottom,borderWidth=border.width,rowHeights=(_ref=[]).concat.apply(_ref,computations_toConsumableArray(rowViewableSpaces.map(function(e){return e.rowHeights.primary}))),rowWidthsPrimary=(_ref2=[]).concat.apply(_ref2,computations_toConsumableArray(rowViewableSpaces.map(function(e){return e.columnWidths.primary}))),rowWidthsSecondary=(_ref3=[]).concat.apply(_ref3,computations_toConsumableArray(rowViewableSpaces.map(function(e){return e.columnWidths.secondary}))),columnWidths=(_ref4=[]).concat.apply(_ref4,computations_toConsumableArray(columnViewableSpaces.map(function(e){return e.columnWidths.primary}))),columnHeightsPrimary=columnViewableSpaces[0].rowHeights.primary,columnHeightsSecondary=(_ref5=[]).concat.apply(_ref5,computations_toConsumableArray(columnViewableSpaces.map(function(e){return e.rowHeights.secondary})));centerMatrix.forEach(function(matrix,rIdx){matrix.forEach(function(placeholder,cIdx){placeholder.setAvailableSpace(columnWidths[cIdx]-borderWidth,rowHeights[rIdx]-borderWidth)})}),computations_setAvailableSpace(top[0],rowWidthsPrimary,columnHeightsPrimary),computations_setAvailableSpace(top[2],rowWidthsSecondary,columnHeightsPrimary),computations_setAvailableSpace(bottom[0],rowWidthsPrimary,columnHeightsSecondary),computations_setAvailableSpace(bottom[2],rowWidthsSecondary,columnHeightsSecondary)}(layout,rowViewableSpaces,columnViewableSpaces),{rowMatrixHeight:rowMatrixHeight-horizontalBuffer,rowMatrixWidth:rowMatrixWidth-verticalBuffer,maxHeightAvailableForRowMatrix:maxHeightAvailableForRowMatrix-horizontalBuffer,columnMatrixHeight:columnMatrixHeight,columnMatrixWidth:columnMatrixWidth,maxWidthAvailableForColumnMatrix:maxWidthAvailableForColumnMatrix}},measureSum=function measureSum(measureArr){return measureArr.reduce(function(total,measure){return total+measure},0)};function layout_typeof(obj){return(layout_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function layout_defineProperties(target,props){for(var i=0;i0&&(leftMatrix=[].concat(layout_helper_toConsumableArray(topLeft),layout_helper_toConsumableArray(leftRows),layout_helper_toConsumableArray(bottomLeft))),rightRows.length>0&&(rightMatrix=[].concat(layout_helper_toConsumableArray(topRight),layout_helper_toConsumableArray(rightRows),layout_helper_toConsumableArray(bottomRight))),topColumns.length>0&&topColumns[0].length>0&&(topMatrix=topColumns.map(function(d,i){return[].concat(layout_helper_toConsumableArray(topLeft[i]),layout_helper_toConsumableArray(d),layout_helper_toConsumableArray(topRight[i]))})),bottomColumns.length>0&&bottomColumns[0].length>0&&(bottomMatrix=bottomColumns.map(function(d,i){return[].concat(layout_helper_toConsumableArray(bottomLeft[i]),layout_helper_toConsumableArray(d),layout_helper_toConsumableArray(bottomRight[i]))})),context.rowMatrix(new row_matrix_RowVisualMatrix([leftMatrix,rightMatrix],{isDistributionEqual:isRowSizeEqual,distribution:distribution.rows,gutter:gutterSpace.rows,unitMeasures:{width:minUnitWidth,height:minUnitHeight,border:border.width},priority:priority.row,breakPage:breakPage.rows.map(function(e){return e+Math.max(topLeft.length,topRight.length)}),extraCellLengths:[topLeft.length,bottomLeft.length]})),begColCells=topLeft.length>0?topLeft[0].length:bottomLeft.length>0?bottomLeft[0].length:0,endColCells=topRight.length>0?topRight[0].length:bottomRight.length>0?bottomRight[0].length:0,context.columnMatrix(new column_matrix_ColumnVisualMatrix([topMatrix,bottomMatrix],{isDistributionEqual:isColumnSizeEqual,distribution:distribution.columns,gutter:gutterSpace.columns,isTransposed:!0,unitMeasures:{width:minUnitWidth,height:minUnitHeight,border:border.width},priority:priority.col,breakPage:breakPage.columns,extraCellLengths:[begColCells,endColCells]})),context.centerMatrix(valueMatrix),matrices}(this,_matrices),this):layout_get(layout_getPrototypeOf(GridLayout.prototype),"matrices",this).call(this,_matrices)}},{key:"triggerReflow",value:function triggerReflow(){this.scrollInfo({horizontal:!1,vertical:!1});var _computeLayoutMeasure=computations_computeLayoutMeasurements(this),maxHeightAvailableForRowMatrix=_computeLayoutMeasure.maxHeightAvailableForRowMatrix,maxWidthAvailableForColumnMatrix=_computeLayoutMeasure.maxWidthAvailableForColumnMatrix;return this.setViewInformation(maxHeightAvailableForRowMatrix,maxWidthAvailableForColumnMatrix),this}},{key:"gotoPage",value:function gotoPage(type,pageNumber){var pageType=type.toLowerCase(),totalPages=this.viewInfo().viewMatricesInfo["".concat(pageType,"Pages")],pointer=Math.min(Math.max(1,pageNumber),totalPages);return this.config(function layout_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}({},"".concat(pageType,"Pointer"),pointer-1)),this.setViewInformation(),this.renderGrid(),this}},{key:"pages",value:function pages(type){var viewMatricesInfo=this.viewInfo().viewMatricesInfo,pageType=type.toLowerCase();return{totalPages:viewMatricesInfo["".concat(pageType,"Pages")],currentPage:this.config()["".concat(pageType,"Pointer")]+1}}},{key:"viewInfo",value:function viewInfo(){return arguments.length?(this._viewInfo=arguments.length<=0?void 0:arguments[0],this):this._viewInfo}},{key:"scrollInfo",value:function scrollInfo(){return arguments.length?(this._scrollInfo=mergeRecursive(this._scrollInfo,arguments.length<=0?void 0:arguments[0]),this):this._scrollInfo}},{key:"setViewInformation",value:function setViewInformation(maxRowHeight,maxColWidth){var _this$config2=this.config(),rowPointer=_this$config2.rowPointer,columnPointer=_this$config2.columnPointer,border=_this$config2.border,viewMatricesInfo=function getViewMatrices(layout,rowPointer,columnPointer){for(var rowMatrix=layout.rowMatrix(),columnMatrix=layout.columnMatrix(),centerMatrix=layout.centerMatrix(),matrices=layout.matrices(),rowMatrices=rowMatrix.getViewableMatrices(),columnMatrices=columnMatrix.getViewableMatrices(),centralMatrixPointer={row:0,column:0},i=rowPointer-1;i>=0;i--){var length=Math.max(rowMatrices[i].primaryMatrix.length,rowMatrices[i].secondaryMatrix.length);centralMatrixPointer.row+=length}for(var _i=columnPointer-1;_i>=0;_i--){var matrix=columnMatrices[_i],primaryMatrix=matrix.primaryMatrix,secondaryMatrix=matrix.secondaryMatrix,_length=Math.max(primaryMatrix[0]?primaryMatrix[0].length:0,secondaryMatrix[0]?secondaryMatrix[0].length:0);centralMatrixPointer.column+=_length}matrices.top[1]=columnMatrices[columnPointer].primaryMatrix,matrices.bottom[1]=columnMatrices[columnPointer].secondaryMatrix,matrices.center[0]=rowMatrices[rowPointer].primaryMatrix,matrices.center[2]=rowMatrices[rowPointer].secondaryMatrix;var rowMatrixLen=Math.max(matrices.center[0].length,matrices.center[2].length),columnMatrixLen=Math.max(matrices.top[1][0]?matrices.top[1][0].length:0,matrices.bottom[1][0]?matrices.bottom[1][0].length:0);return matrices.center[1]=centerMatrix.slice(centralMatrixPointer.row,centralMatrixPointer.row+rowMatrixLen).map(function(matrix){return matrix.slice(centralMatrixPointer.column,centralMatrixPointer.column+columnMatrixLen)}),{matrices:matrices,rowPages:rowMatrices.length,columnPages:columnMatrices.length}}(this,rowPointer,columnPointer),layoutDimensions=function getViewMeasurements(layout,maxRowHeight,maxColWidth){var rowMatrix=layout.rowMatrix(),columnMatrix=layout.columnMatrix(),_layout$config=layout.config(),columnPointer=_layout$config.columnPointer,rowPointer=_layout$config.rowPointer,rowSpaces=rowMatrix.getViewableSpaces()[rowPointer],colSpaces=columnMatrix.getViewableSpaces()[columnPointer],rowHeights=rowSpaces.rowHeights,rowMatrixWidth=rowSpaces.width,columnWidths=colSpaces.columnWidths,columnMatrixHeight=colSpaces.height,leftWidth=rowMatrixWidth.primary,rightWidth=rowMatrixWidth.secondary,topHeight=columnMatrixHeight.primary,bottomHeight=columnMatrixHeight.secondary,centerHeight=measureSum(rowHeights.primary),centerWidth=measureSum(columnWidths.primary),viewWidth=[leftWidth,Math.min(centerWidth,maxColWidth),rightWidth],viewHeight=[topHeight,Math.min(centerHeight,maxRowHeight),bottomHeight];return{viewWidth:viewWidth,viewHeight:viewHeight,actualCenterMeasures:{height:centerHeight,width:centerWidth},totalMeasures:{width:measureSum(viewWidth),height:measureSum(viewHeight)},unitHeights:rowHeights,unitWidths:columnWidths}}(this,maxRowHeight,maxColWidth);return layoutDimensions.border=border,this.viewInfo({viewMatricesInfo:viewMatricesInfo,layoutDimensions:layoutDimensions}),this}}],[{key:"defaultViewInfo",value:function defaultViewInfo(){return Object.assign({},{layoutDimensions:{border:this.defaultConfig().border,viewHeight:[0,0,0],viewWidth:[0,0,0]},viewMatricesInfo:{columnPages:0,rowPages:0,matrices:{top:[],center:[],bottom:[]}}})}},{key:"defaultMeasurement",value:function defaultMeasurement(){return DEFAULT_MEASUREMENTS}},{key:"defaultConfig",value:function defaultConfig(){return DEFAULT_CONFIGURATION}},{key:"create",value:function create(){return new GridLayout(null,null,this.defaultMeasurement(),this.defaultConfig())}}]),GridLayout}();function border_helper_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}var _matrixSpanGeneratorM,_spanApplierMap,borderMap=(border_helper_defineProperty(_borderMap={},"".concat("top","-").concat("left"),null),border_helper_defineProperty(_borderMap,"".concat("top","-").concat("middle"),"column"),border_helper_defineProperty(_borderMap,"".concat("top","-").concat("right"),null),border_helper_defineProperty(_borderMap,"".concat("center","-").concat("left"),"row"),border_helper_defineProperty(_borderMap,"".concat("center","-").concat("middle"),"center"),border_helper_defineProperty(_borderMap,"".concat("center","-").concat("right"),"row"),border_helper_defineProperty(_borderMap,"".concat("bottom","-").concat("left"),null),border_helper_defineProperty(_borderMap,"".concat("bottom","-").concat("middle"),"column"),border_helper_defineProperty(_borderMap,"".concat("bottom","-").concat("right"),null),_borderMap),border_helper_specificBorderApplier=function specificBorderApplier(borderTypes,showBorders,cells,borderInfo){var color=borderInfo.color,width=borderInfo.width,style=borderInfo.style,borderStyle="".concat(width,"px ").concat(style);borderTypes.forEach(function(borderType){!function applySpecificBorder(cells,color,type,style){cells.style("border-".concat(type),"".concat(style," ").concat(color))}(cells,showBorders[borderType]?color:"rgba(0,0,0,0)",borderType,borderStyle)})},border_helper_applyBorders=function applyBorders(cells,border,row,column){var borderApplierFn=function borderApplier(cells,borderInfo){var showRowBorders=borderInfo.showRowBorders,showColBorders=borderInfo.showColBorders,showValueBorders=borderInfo.showValueBorders;return{row:function row(){return border_helper_specificBorderApplier(["top","bottom"],showRowBorders,cells,borderInfo)},column:function column(){return border_helper_specificBorderApplier(["left","right"],showColBorders,cells,borderInfo)},center:function center(){return border_helper_specificBorderApplier(["left","right","top","bottom"],showValueBorders,cells,borderInfo)}}}(cells,border),borderMapVal=borderMap["".concat(ROW_MATRIX_INDEX[VIEW_INDEX[row]],"-").concat(COLUMN_MATRIX_INDEX[column])];borderMapVal&&borderApplierFn[borderMapVal]()};function span_maker_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}var orderMaker=function orderMaker(arr){return Array.from(Array(arr.length).keys())},nestByStack=function nestByStack(stack,updateArr){var optionalParams=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},order=optionalParams.order,keyFn=optionalParams.keyFn,arr=updateArr.slice(),currStack=stack.slice(),prevStack=currStack.slice();if(order=order||Array.from(Array(arr.length).keys()),keyFn=keyFn||function(v){return v},0===currStack.length){var _newArr=[];return order.forEach(function(e){_newArr.push(arr[e])}),{prevStack:prevStack,currStack:arr,arr:_newArr}}for(var arrVal="",stackVal="",newArr=[],i=order.length-1;i>=0;i--){var currElemIndex=order[i];if((arrVal+=keyFn(arr[currElemIndex]))===(stackVal+=keyFn(currStack[currElemIndex])))newArr[currElemIndex]=null;else{stackVal="";for(var j=i;j1&&(renderer_utils_selectElement(this).style("height","".concat(height*span+borderWidth*span,"px")),placeholder.setAvailableSpace(width,height*span))}),span_maker_defineProperty(_ref,"colSpan",function(){span>1&&placeholder.setAvailableSpace(width*span+borderWidth*(span-1),height),renderer_utils_selectElement(this).style("height","".concat(height,"px"))}),_ref}(span,cell.placeholder,borderWidth)[type].bind(this)(),span})},spanApplierMap=(span_maker_defineProperty(_spanApplierMap={},"".concat("top","-0"),null),span_maker_defineProperty(_spanApplierMap,"".concat("top","-1"),function _(){for(var _len=arguments.length,params=new Array(_len),_key=0;_key<_len;_key++)params[_key]=arguments[_key];return spanApplier.apply(void 0,params.concat(["colSpan"]))}),span_maker_defineProperty(_spanApplierMap,"".concat("top","-2"),null),span_maker_defineProperty(_spanApplierMap,"".concat("center","-0"),function _(){for(var _len2=arguments.length,params=new Array(_len2),_key2=0;_key2<_len2;_key2++)params[_key2]=arguments[_key2];return spanApplier.apply(void 0,params.concat(["rowSpan"]))}),span_maker_defineProperty(_spanApplierMap,"".concat("center","-1"),null),span_maker_defineProperty(_spanApplierMap,"".concat("center","-2"),function _(){for(var _len3=arguments.length,params=new Array(_len3),_key3=0;_key3<_len3;_key3++)params[_key3]=arguments[_key3];return spanApplier.apply(void 0,params.concat(["rowSpan"]))}),span_maker_defineProperty(_spanApplierMap,"".concat("bottom","-0"),null),span_maker_defineProperty(_spanApplierMap,"".concat("bottom","-1"),function _(){for(var _len4=arguments.length,params=new Array(_len4),_key4=0;_key4<_len4;_key4++)params[_key4]=arguments[_key4];return spanApplier.apply(void 0,params.concat(["colSpan"]))}),span_maker_defineProperty(_spanApplierMap,"".concat("bottom","-2"),null),_spanApplierMap);function transaction_support_defineProperties(target,props){for(var i=0;i(availWidth||0)&&maxLines&&(space.height=space.oriTextHeight*maxLines),availWidth&&availWidth":">",'"':""","'":"'","/":"/"};return"".concat(str).replace(/[&<>"'/]/g,function(match){return htmlEscapes[match]})}(rawContent()):rawContent()},createHeading=function createHeading(config,type,labelManager,prevCell){return config?function headerCreator(config,cellType,labelManager,prevCell){var margin={},content=config.content,classPrefix=config.classPrefix,maxLines=config.maxLines,cell=prevCell||new src_text_cell({type:"title"===cellType?"header":"text",className:"".concat(classPrefix,"-").concat(cellType,"-cell")},{labelManager:labelManager}).config({maxLines:maxLines}).minSpacing({width:0,height:0});return cell.source(content),cell._minTickDiff={height:0,width:0},margin=config.position===src_constants_TOP?{top:0,bottom:config.padding}:{top:config.padding,bottom:0},cell.config({margin:margin}),{height:cell.getLogicalSpace().height,cell:cell}}(config,type,labelManager,prevCell):""},legend_maker_legendInitializer=function legendInitializer(legendConfig,canvas,measurement,prevLegends){var legends=[],height=measurement.height,width=measurement.width,headerHeight=measurement.headerHeight,position=legendConfig.position,align=legendConfig.align,legendInfo=function legendCreator(canvas){var LegendCls,dataset=[],axes=canvas.getRetinalAxes();return Object.entries(axes).forEach(function(axisInfo){var scale=axisInfo[1][0],scaleType=axisInfo[0],scaleProps=canvas[scaleType]();if(scaleProps.field&&scale){var _scale$config=scale.config(),type=_scale$config.type,step=_scale$config.step,stepMapper="boolean"==typeof step&&step;LegendCls=LEGEND_TYPE_MAP["".concat(type,"-").concat(stepMapper,"-").concat(scaleType)],dataset.push({scale:scale,canvas:canvas,fieldName:scaleProps.field,LegendCls:LegendCls,scaleType:scaleType})}}),dataset}(canvas),invalidValues=canvas.config().invalidValues,parser=getValueParser(invalidValues);return legendInfo.forEach(function(dataInfo,index){var legend={},legendMeasures={},LegendCls=dataInfo.LegendCls,scale=dataInfo.scale,fieldName=dataInfo.fieldName,scaleType=dataInfo.scaleType,config=legendConfig[scaleType]||{},title=config.title||{};title.text=title.text||fieldName,config.show&&(config.position=position,config.align=align,legend=prevLegends[index]?prevLegends[index].legend:LegendCls.create({labelManager:canvas._dependencies.smartlabel,cells:{AxisCell:axis_cell,TextCell:src_text_cell}}),legendMeasures.maxHeight="vertical"===align?height-headerHeight:.2*height,legendMeasures.maxWidth="horizontal"===align?width:.2*width,legendMeasures.width=Math.min(legendMeasures.maxWidth,config.width),legendMeasures.height=Math.min(legendMeasures.maxHeight,config.height),[PADDING,BORDER,MARGIN].forEach(function(e){legendMeasures[e]=config[e]}),legend.scale(scale).valueParser(parser).title(title).fieldName(fieldName).config(config).metaData(canvas.composition().visualGroup.getGroupByData().project([fieldName])).measurement(legendMeasures).canvasAlias(canvas.alias()).setLegendMeasures(),legends.push({canvas:canvas,legend:legend,scaleType:scaleType}))}),legends};function muze_chart_component_typeof(obj){return(muze_chart_component_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function muze_chart_component_defineProperties(target,props){for(var i=0;icurrHeight?(sections++,currWidth=0,currHeight=legHeight):sections<0&§ions++,sectionComponents[sections]=sectionComponents[sections]||[],currHeight-=Math.min(leg.measurement().height,currHeight),currWidth=Math.max(Math.min(leg.measurement().width,leg.measurement().maxWidth),currWidth),sectionComponents[sections].push({legend:leg,legendHeight:legHeight,legendWidth:currWidth})});var mount=makeElement(legendMount,["div"],sectionComponents,"".concat(classPrefix,"-legend-section"));mount.classed("".concat(classPrefix,"-legend-vertical-section"),!0).style("width",function(d){return"".concat(d[0].legendWidth,"px")}),makeElement(mount,["div"],function(d){return d},"".concat(classPrefix,"-legend-components"),{},function(d){return d.legend.id()}).each(function(d){d.legend.mount(this)}).style("width",function(d){return"".concat(d.legendWidth,"px")})}else{var _mount=makeElement(legendMount,"div",[1],"".concat(classPrefix,"-legend-section"));_mount.classed("".concat(classPrefix,"-legend-horizontal-section"),!0),_mount.classed("".concat(classPrefix,"-legend-section-",0),!0).style("width","".concat(legWidth,"px")),makeElement(_mount,"div",this.components,"".concat(classPrefix,"-legend-components"),{},function(d){return d.legend.id()}).each(function(d){d.legend.mount(this)}).style("width",function(d){return"".concat(d.legend.measurement().width,"px")})}}},{key:"draw",value:function draw(container){this.renderLegend(container||document.getElementById(this.renderAt()))}},{key:"updateWrapper",value:function updateWrapper(params){return this.name(params.name),this.boundBox(params.config.measurement.legendSpace),this.setParams(params),this}},{key:"setParams",value:function setParams(params){this.components=params.component,this.params=params,this.target(params.config.target),this.position(params.config.position);var _defaultAlignmentHelp=function defaultAlignmentHelper(position){var alignment=null,alignWith="".concat(ROW_MATRIX_INDEX[1],"-").concat(COLUMN_MATRIX_INDEX[1]);switch(position){case src_constants_TOP:case src_constants_BOTTOM:alignment=HORIZONTAL_CENTER;break;case src_constants_LEFT:case src_constants_RIGHT:alignment=VERTICAL_CENTER;break;default:alignment=VERTICAL_CENTER}return{alignment:alignment,alignWith:alignWith}}(params.config.position),alignWith=_defaultAlignmentHelp.alignWith,alignment=_defaultAlignmentHelp.alignment;this.className(params.config.className),this.alignWith(params.config.alignWith||alignWith),this.alignment(params.config.alignment||alignment)}}]),LegendComponent}(),helper_d3Drag=(__webpack_require__(25),renderer_utils_getD3Drag()),arrowSizeMap={left:"width",right:"width",top:"height",bottom:"height"},getUnitPositions=function getUnitPositions(unitMeasures,totalLength,viewLength){var currentLen=0;return(unitMeasures.primary&&unitMeasures.primary.length?unitMeasures.primary:unitMeasures.secondary).map(function(e){var unitPosition=100*currentLen/(totalLength-viewLength);return currentLen+=e,unitPosition})},helper_createScrollBarArrow=function createScrollBarArrow(mount,type,config){var classPrefix=config.classPrefix,thickness=config.thickness,arrow=makeElement(mount,"div",[type],"".concat(classPrefix,"-scroll-arrow-").concat(type));return arrow.classed("".concat(classPrefix,"-scroll-arrow"),!0),arrow.style(arrowSizeMap[type],"".concat(thickness,"px")),makeElement(arrow,"div",[1],"".concat(classPrefix,"-scroll-arrow-chevron")).attr("id","".concat(classPrefix,"-scroll-arrow-chevron-").concat(type)),arrow},helper_createScrollBarRect=function createScrollBarRect(mount,config){var classPrefix=config.classPrefix,rect=makeElement(mount,"div",[1],"".concat(classPrefix,"-scroll-rect"));return{rect:rect,mover:makeElement(rect,"div",[1],"".concat(classPrefix,"-scroll-mover"))}},applyScrollMouseDownAction=function applyScrollMouseDownAction(moverRect,scrollMaker,speed){var mover=moverRect.mover,rect=moverRect.rect,_mover$node$getBoundi=mover.node().getBoundingClientRect(),x=_mover$node$getBoundi.x,y=_mover$node$getBoundi.y,_rect$node$getBoundin=rect.node().getBoundingClientRect(),rectX=_rect$node$getBoundin.x,rectY=_rect$node$getBoundin.y;scrollMaker.changeMoverPosition({x:x-rectX+speed,y:y-rectY+speed})},helper_registerListenerOnArrow=function registerListenerOnArrow(scrollMaker,moverRect,arrowType,speed){var timer="",arrow=scrollMaker._components[arrowType],isTouchDevice=hasTouch();arrow.on(isTouchDevice?"touchstart":"mousedown",function(){renderer_utils_getEvent().preventDefault(),timer=setInterval(function(){applyScrollMouseDownAction(moverRect,scrollMaker,speed)},100)}).on(isTouchDevice?"touchend":"mouseup",function(){renderer_utils_getEvent().preventDefault(),clearInterval(timer)}).on("click",function(){applyScrollMouseDownAction(moverRect,scrollMaker,speed)})},scroll_bar_maker_helper_registerListeners=function registerListeners(scrollMaker){var moverRect=scrollMaker._components.moverRect,speed=scrollMaker.config().speed;helper_registerListenerOnArrow(scrollMaker,moverRect,"prevArrow",-speed),function applyMoverDrag(scrollMaker,moverRect){var startPos={},moverStartPos=0,endPos={},mover=moverRect.mover,rectStartPos=moverRect.rect.node().getBoundingClientRect();mover.call(helper_d3Drag().on("start",function(){var event=renderer_utils_getEvent();moverStartPos=mover.node().getBoundingClientRect(),startPos={x:event.x,y:event.y}}).on("drag",function(){var event=renderer_utils_getEvent(),window=getWindow(),distanceMoved_x=(endPos={x:event.x,y:event.y}).x-startPos.x,distanceMoved_y=endPos.y-startPos.y,actualPosition={x:moverStartPos.x+distanceMoved_x-rectStartPos.x+window.pageXOffset,y:moverStartPos.y+distanceMoved_y-rectStartPos.y+window.pageYOffset};scrollMaker.changeMoverPosition(actualPosition)}))}(scrollMaker,moverRect),function applyRectClick(scrollMaker,moverRect){moverRect.rect.on("click",function(){var event=renderer_utils_getEvent();scrollMaker.emptyScrollAreaClick(event)})}(scrollMaker,moverRect),helper_registerListenerOnArrow(scrollMaker,moverRect,"nextArrow",speed)},scroll_bar_maker_props_PROPS={config:{sanitization:function sanitization(context,value){return value=mergeRecursive(context._config,value)}},manager:{},unitPositions:{},logicalSpace:{}};function scroll_maker_defineProperties(target,props){for(var i=0;i1&&void 0!==arguments[1]?arguments[1]:this.logicalSpace(),config=this.config(),scrollBarContainer=horizontal_scroll_maker_get(horizontal_scroll_maker_getPrototypeOf(HorizontalScrollMaker.prototype),"createScroll",this).call(this,mountPoint,config,dimensions).scrollBarContainer,prevArrow=helper_createScrollBarArrow(scrollBarContainer,"left",config),moverRect=helper_createScrollBarRect(scrollBarContainer,config),nextArrow=helper_createScrollBarArrow(scrollBarContainer,"right",config),mover=moverRect.mover,rect=moverRect.rect,_this$logicalSpace=this.logicalSpace(),height=_this$logicalSpace.height,width=_this$logicalSpace.width,totalLength=_this$logicalSpace.totalLength,viewLength=_this$logicalSpace.viewLength,unitWidths=_this$logicalSpace.unitWidths,scrollBarWithouArrowLength=width-2*height;rect.style("width","".concat(dimensions.width-2*height,"px")),rect.style("height","".concat(100,"%")),mover.style("width","".concat(viewLength*scrollBarWithouArrowLength/totalLength,"px")),mover.style("height","".concat(100,"%")),mover.style(src_constants_LEFT,"".concat(0,"px")),this._components={prevArrow:prevArrow,nextArrow:nextArrow,moverRect:moverRect,scrollBarContainer:scrollBarContainer},this._scrollBarWithouArrowLength=scrollBarWithouArrowLength,this.unitPositions(getUnitPositions(unitWidths,totalLength,viewLength)),this.registerListeners()}},{key:"emptyScrollAreaClick",value:function emptyScrollAreaClick(event){var _this$_components$mov=this._components.moverRect,mover=_this$_components$mov.mover,rect=_this$_components$mov.rect,speed=this.config().speed,_mover$node$getBoundi=mover.node().getBoundingClientRect(),x=_mover$node$getBoundi.x,y=_mover$node$getBoundi.y,_rect$node$getBoundin=rect.node().getBoundingClientRect(),rectX=_rect$node$getBoundin.x,rectY=_rect$node$getBoundin.y,positionAdjuster=10*speed;event.xrectStartPos.width?rectStartPos.width-moverPos.width:newPosition.x,mover.style(src_constants_LEFT,"".concat(currentPos,"px"));var movedViewLength=currentPos*totalLength/this._scrollBarWithouArrowLength;this.manager().performAttachedScrollFunction(this.constructor.type(),movedViewLength)}},{key:"scrollDeltaTo",value:function scrollDeltaTo(delta){var _this$_components$mov3=this._components.moverRect,mover=_this$_components$mov3.mover,rect=_this$_components$mov3.rect,moverPos=mover.node().getBoundingClientRect(),rectStartPos=rect.node().getBoundingClientRect();return this.changeMoverPosition({y:0,x:moverPos.x-rectStartPos.x-delta}),this}},{key:"scrollTo",value:function scrollTo(scrollPercentage){var moverPos=this._components.moverRect.mover.node().getBoundingClientRect(),movement=scrollPercentage*(this._scrollBarWithouArrowLength-moverPos.width)/100;return this.changeMoverPosition({y:0,x:movement}),this}}],[{key:"type",value:function type(){return"horizontal"}}]),HorizontalScrollMaker}(),vertical:function(_ScrollMaker){function VerticalScrollMaker(){return function vertical_scroll_maker_classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}(this,VerticalScrollMaker),vertical_scroll_maker_possibleConstructorReturn(this,vertical_scroll_maker_getPrototypeOf(VerticalScrollMaker).apply(this,arguments))}return function vertical_scroll_maker_inherits(subClass,superClass){if("function"!=typeof superClass&&null!==superClass)throw new TypeError("Super expression must either be null or a function");subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:!0,configurable:!0}}),superClass&&vertical_scroll_maker_setPrototypeOf(subClass,superClass)}(VerticalScrollMaker,scroll_maker_ScrollMaker),function vertical_scroll_maker_createClass(Constructor,protoProps,staticProps){return protoProps&&vertical_scroll_maker_defineProperties(Constructor.prototype,protoProps),staticProps&&vertical_scroll_maker_defineProperties(Constructor,staticProps),Constructor}(VerticalScrollMaker,[{key:"createScroll",value:function createScroll(mountPoint){var dimensions=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.logicalSpace(),config=this.config(),scrollBarContainer=vertical_scroll_maker_get(vertical_scroll_maker_getPrototypeOf(VerticalScrollMaker.prototype),"createScroll",this).call(this,mountPoint,dimensions).scrollBarContainer,prevArrow=helper_createScrollBarArrow(scrollBarContainer,"top",config),moverRect=helper_createScrollBarRect(scrollBarContainer,config),nextArrow=helper_createScrollBarArrow(scrollBarContainer,"bottom",config),mover=moverRect.mover,rect=moverRect.rect,_this$logicalSpace=this.logicalSpace(),height=_this$logicalSpace.height,width=_this$logicalSpace.width,totalLength=_this$logicalSpace.totalLength,viewLength=_this$logicalSpace.viewLength,unitHeights=_this$logicalSpace.unitHeights,scrollBarWithouArrowLength=height-2*width;rect.style("height","".concat(scrollBarWithouArrowLength,"px")),rect.style("width","".concat(100,"%")),mover.style("width","".concat(100,"%")),mover.style("height","".concat(viewLength*scrollBarWithouArrowLength/totalLength,"px")),mover.style(src_constants_TOP,"".concat(0,"px")),this._components={prevArrow:prevArrow,nextArrow:nextArrow,moverRect:moverRect,scrollBarContainer:scrollBarContainer},this._scrollBarWithouArrowLength=scrollBarWithouArrowLength,this.unitPositions(getUnitPositions(unitHeights,totalLength,viewLength)),this.registerListeners()}},{key:"emptyScrollAreaClick",value:function emptyScrollAreaClick(event){var _this$_components$mov=this._components.moverRect,mover=_this$_components$mov.mover,rect=_this$_components$mov.rect,speed=this.config().speed,_mover$node$getBoundi=mover.node().getBoundingClientRect(),x=_mover$node$getBoundi.x,y=_mover$node$getBoundi.y,_rect$node$getBoundin=rect.node().getBoundingClientRect(),rectX=_rect$node$getBoundin.x,rectY=_rect$node$getBoundin.y,positionAdjuster=10*speed;event.yrectStartPos.height?rectStartPos.height-moverPos.height:newPosition.y,mover.style(src_constants_TOP,"".concat(currentPos,"px"));var movedViewLength=currentPos*totalLength/this._scrollBarWithouArrowLength;this.manager().performAttachedScrollFunction(this.constructor.type(),movedViewLength)}},{key:"scrollDeltaTo",value:function scrollDeltaTo(delta){var _this$_components$mov3=this._components.moverRect,mover=_this$_components$mov3.mover,rect=_this$_components$mov3.rect,moverPos=mover.node().getBoundingClientRect(),rectStartPos=rect.node().getBoundingClientRect();return this.changeMoverPosition({y:moverPos.y-rectStartPos.y-delta,x:0}),this}},{key:"scrollTo",value:function scrollTo(scrollPercentage){var moverPos=this._components.moverRect.mover.node().getBoundingClientRect(),movement=scrollPercentage*(this._scrollBarWithouArrowLength-moverPos.height)/100;return this.changeMoverPosition({x:0,y:movement}),this}}],[{key:"type",value:function type(){return"vertical"}}]),VerticalScrollMaker}()},ScrollComponent=function(_MuzeComponent){function ScrollComponent(params){var _this;!function scroll_component_classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}(this,ScrollComponent);var ScrollMaker=scrollMakerMap[params.config.type];return params.component=new ScrollMaker,params.component.config(params.config.scrollBarComponentConfig),params.component.logicalSpace(params.dimensions),(_this=scroll_component_possibleConstructorReturn(this,scroll_component_getPrototypeOf(ScrollComponent).call(this,params.name,params.component.getLogicalSpace(),0))).setParams(params),_this}return function scroll_component_inherits(subClass,superClass){if("function"!=typeof superClass&&null!==superClass)throw new TypeError("Super expression must either be null or a function");subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:!0,configurable:!0}}),superClass&&scroll_component_setPrototypeOf(subClass,superClass)}(ScrollComponent,MuzeComponent),function scroll_component_createClass(Constructor,protoProps,staticProps){return protoProps&&scroll_component_defineProperties(Constructor.prototype,protoProps),staticProps&&scroll_component_defineProperties(Constructor,staticProps),Constructor}(ScrollComponent,[{key:"manager",value:function manager(){return arguments.length?(this.component.manager(arguments.length<=0?void 0:arguments[0]),this):this.component.manager()}},{key:"scrollDeltaTo",value:function scrollDeltaTo(delta){return this.component.scrollDeltaTo(delta),this}},{key:"scrollTo",value:function scrollTo(scrollPercentage){return this.component.scrollTo(scrollPercentage),this}},{key:"scrollToUnitIndex",value:function scrollToUnitIndex(unitIndex){var unitPositions=this.component.unitPositions(),sanitizedUnitIndex=Math.min(Math.max(0,unitIndex),unitPositions.length-1);return this.component.scrollTo(unitPositions[sanitizedUnitIndex]),this}},{key:"getScrollPositionsForUnits",value:function getScrollPositionsForUnits(){return this.component.unitPositions()}},{key:"draw",value:function draw(container){return this.component.createScroll(container||document.getElementById(this.renderAt())),this}},{key:"attachScrollAction",value:function attachScrollAction(externalAction){return this.component.attachScrollAction(externalAction),this}},{key:"detachScrollAction",value:function detachScrollAction(){return this.component.detachScrollAction(),this}},{key:"updateWrapper",value:function updateWrapper(params){return this.name(params.name),this.component.config(params.config.scrollBarComponentConfig),this.component.logicalSpace(params.dimensions),this.boundBox(this.component.getLogicalSpace()),this.setParams(params),this}},{key:"setParams",value:function setParams(params){this.component=params.component||this.component,this.params=params,this.target(params.config.target),this.position(params.config.position),this.className(params.config.className),this.alignWith(params.config.alignWith),this.alignment(params.config.alignment)}},{key:"remove",value:function remove(){this.component.remove()}}]),ScrollComponent}();function matrix_component_typeof(obj){return(matrix_component_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function matrix_component_defineProperties(target,props){for(var i=0;iMath.abs(wheelDeltaY)&&_this2.scrollBarManager().triggerScrollBarAction("horizontal",wheelDeltaX),0!==wheelDeltaY&&Math.abs(wheelDeltaX)0?heightAttr:height,minHeight),availableWidthForCanvas=Math.max(widthAttr>0?widthAttr:width,minWidth),_createHeaders=function createHeaders(context,canvasHeight,canvasWidth){var headerHeight=0,headers={},subtitle=context.subtitle(),isSubtitle=title_maker_resolveTitleSubTitleContent(subtitle[0]);return canvasHeight>=200&&canvasWidth>=200&&["title","subtitle"].forEach(function(type){var headerOptions=context[type](),content=title_maker_resolveTitleSubTitleContent(headerOptions[0]);if(content.length){var config=headerOptions[1];config.width=context.width(),config.height=context.height(),config.classPrefix=context.config().classPrefix,config.content=content,config.padding="title"!==type||isSubtitle.length?config.padding:subtitle[1].padding;var _createHeading=createHeading(config,type,context.dependencies().smartlabel,context["".concat(type,"Cell")]),height=_createHeading.height,cell=_createHeading.cell;headers["".concat(type,"Cell")]=cell,context._composition[type]=cell,headerHeight+=height}}),{headerHeight:headerHeight,headers:headers}}(context,availableHeightForCanvas,availableWidthForCanvas),headers=_createHeaders.headers,headerHeight=_createHeaders.headerHeight,legends=function createLegend(context,headerHeight,height,width){var measurement={height:height,width:width,headerHeight:headerHeight},legend=context.config().legend,show=legend.show,position=legend.position;legend.classPrefix=context.config().classPrefix;var align=position===src_constants_LEFT||position===src_constants_RIGHT?"vertical":"horizontal";return legend.show=show?"vertical"===align&&width>200||"horizontal"===align&&height>200:show,legend.align=align,legend_maker_legendInitializer(legend,context,measurement,context.legends||[])}(context,headerHeight,availableHeightForCanvas,availableWidthForCanvas);context._composition.legend={},legends.forEach(function(e){context._composition.legend[e.scaleType]=e.legend});var legendSpace=function getLegendSpace(legends,legendConfig,availableHeight,availableWidth){var legendSpace={width:0,height:0};return legends.map(function(legendInfo){return legendInfo.legend.measurement()}).forEach(function(space){var height,width;width=Math.min(space.width,space.maxWidth),height=Math.min(space.height,space.maxHeight),"horizontal"===legendConfig.align?legendSpace.width+width>availableWidth?(legendSpace.width=availableWidth,legendSpace.height+=height):(legendSpace.width+=width,legendSpace.height=Math.max(legendSpace.height,height)):legendSpace.height+height>availableHeight?(legendSpace.height=height,legendSpace.width+=width):(legendSpace.height+=height,legendSpace.width=Math.max(legendSpace.width,width))}),"horizontal"===legendConfig.align&&(legendSpace.width=availableWidth),legendSpace}(legends,legend,availableHeightForCanvas,availableWidthForCanvas),legendWidth=legendPosition===src_constants_LEFT||legendPosition===src_constants_RIGHT?legendSpace.width:0,legendHeight=legendPosition===src_constants_TOP||legendPosition===src_constants_BOTTOM?legendSpace.height:0,components={headers:headers,legends:legends,canvases:[context],rows:rows,columns:columns,values:values,cornerMatrices:visGroup.cornerMatrices()},measurement={mountSpace:{height:height,width:width},headerHeight:headerHeight,legendSpace:legendSpace,canvasWidth:availableWidthForCanvas,canvasHeight:availableHeightForCanvas,width:availableWidthForCanvas-legendWidth,height:availableHeightForCanvas-headerHeight-legendHeight,minUnitHeight:context.minUnitHeight(),minUnitWidth:context.minUnitWidth()};return{layoutConfig:layoutConfig=mergeRecursive(layoutConfig,{classPrefix:classPrefix,showHeaders:showHeaders,border:mergeRecursive(visGroup.metaData().border,context.config().border),layoutArrangement:layoutArrangement,legend:legend,buffer:scrollBar.thickness,pagination:pagination,title:titleConfig,subtitle:subtitleConfig,isColumnSizeEqual:isColumnSizeEqual,isRowSizeEqual:isRowSizeEqual,mount:mount,priority:priority}),components:components,measurement:measurement}},componentIndexes={title:0,subtitle:1,legend:2,verticalScrollBar:3,horizontalScrollBar:4,grid:5},layout_maker_renderLayout=function renderLayout(canvas,renderDetails){var layoutManager=canvas._layoutManager,gridLayout=canvas.layout(),grid=componentIndexes.grid,compWrappers=component_wrapper_maker_componentWrapperMaker(layoutManager,gridLayout,renderDetails),componentWrappers=Object.keys(componentIndexes).map(function(e){return compWrappers[e]}),gridWrapper=componentWrappers[grid];!function createScrollManager(componentWrappers,canvas){var verticalScrollBar=componentIndexes.verticalScrollBar,grid=componentIndexes.grid,horizontalScrollWrapper=componentWrappers[componentIndexes.horizontalScrollBar],verticalScrollWrapper=componentWrappers[verticalScrollBar],gridWrapper=componentWrappers[grid],scrollBarManager=new ScrollManager,scrollBarComponents={};verticalScrollWrapper&&(scrollBarComponents.vertical=verticalScrollWrapper),horizontalScrollWrapper&&(scrollBarComponents.horizontal=horizontalScrollWrapper),scrollBarManager.scrollBarComponents(scrollBarComponents).attachedComponents({grid:gridWrapper}),canvas.composition().hScrollBar=horizontalScrollWrapper,canvas.composition().vScrollBar=verticalScrollWrapper,[horizontalScrollWrapper,verticalScrollWrapper].forEach(function(wrapper){wrapper&&wrapper.manager(scrollBarManager)}),gridWrapper.scrollBarManager(scrollBarManager)}(componentWrappers,canvas),layoutManager.registerComponents(componentWrappers).compute(),gridWrapper.attachScrollListener()};function group_firebolt_typeof(obj){return(group_firebolt_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function group_firebolt_defineProperties(target,props){for(var i=0;ia.getFullYear()&&(t=""+(i-1)+r),d(t).getFullYear()},formatter:function formatter(e){var t=d(e).getFullYear().toString(),n=void 0;return t&&(n=t.length,t=t.substring(n-2,n)),t}},Y:{name:"Y",index:0,extract:function extract(){return"(\\d{4})"},parser:h.defaultNumberParser(),formatter:function formatter(e){return d(e).getFullYear().toString()}}}},h.getTokenFormalNames=function(){var e=h.getTokenDefinitions();return{HOUR:e.H,HOUR_12:e.l,AMPM_UPPERCASE:e.p,AMPM_LOWERCASE:e.P,MINUTE:e.M,SECOND:e.S,SHORT_DAY:e.a,LONG_DAY:e.A,DAY_OF_MONTH:e.e,DAY_OF_MONTH_CONSTANT_WIDTH:e.d,SHORT_MONTH:e.b,LONG_MONTH:e.B,MONTH_OF_YEAR:e.m,SHORT_YEAR:e.y,LONG_YEAR:e.Y}},h.tokenResolver=function(){var e=h.getTokenDefinitions(),t=function t(){for(var e=0,t=void 0,n=void 0,r=arguments.length;e=0;)o=e[i+1],-1!==r.indexOf(o)&&a.push({index:i,token:o});return a},h.formatAs=function(e,t){var n,r=d(e),a=h.findTokens(t),i=h.getTokenDefinitions(),o=String(t),u=h.TOKEN_PREFIX,c=void 0,f=void 0,l=void 0;for(l=0,n=a.length;l=0;d--)(f=i[d].index)+1!==s.length-1?(void 0===u&&(u=s.length),l=s.substring(f+2,u),s=s.substring(0,f+2)+RegExp.escape(l)+s.substring(u,s.length),u=f):u=f;for(d=0;d0&&e.split(",").forEach(function(e){var n=e.split("-"),r=+n[0],a=+(n[1]||n[0]);if(a>=r)for(var i=r;i<=a;i+=1)t(i)})}var R=function(){function e(e,t){for(var n=0;n3&&void 0!==arguments[3]&&arguments[3],a=arguments.length>4&&void 0!==arguments[4]?arguments[4]:U.CROSS,i=[],o=[],u=n||B,c=e.getFieldspace(),f=t.getFieldspace(),l=c.name,s=f.name,d=c.name+"."+f.name,p=H(c,f);if(l===s)throw new Error("DataModels must have different alias names");return c.fields.forEach(function(e){var t=_({},e.schema());-1===p.indexOf(t.name)||r||(t.name=c.name+"."+t.name),i.push(t)}),f.fields.forEach(function(e){var t=_({},e.schema());-1!==p.indexOf(t.name)?r||(t.name=f.name+"."+t.name,i.push(t)):i.push(t)}),D(e._rowDiffset,function(n){var d=!1,h=void 0;D(t._rowDiffset,function(v){var m=[],y={};y[l]={},y[s]={},c.fields.forEach(function(e){m.push(e.partialField.data[n]),y[l][e.name()]=e.partialField.data[n]}),f.fields.forEach(function(e){-1!==p.indexOf(e.schema().name)&&r||m.push(e.partialField.data[v]),y[s][e.name()]=e.partialField.data[v]});var g=vt(y[l]),b=vt(y[s]);if(u(g,b,function(){return e.detachedRoot()},function(){return t.detachedRoot()},{})){var O={};m.forEach(function(e,t){O[i[t].name]=e}),d&&U.CROSS!==a?o[h]=O:(o.push(O),d=!0,h=n)}else if((a===U.LEFTOUTER||a===U.RIGHTOUTER)&&!d){var w={},_=c.fields.length-1;m.forEach(function(e,t){w[i[t].name]=t<=_?e:null}),d=!0,h=n,o.push(w)}})}),new It(o,i,{name:d})}function J(e,t){var n=""+e,r=""+t;return nr?1:0}function z(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:J;return e.length>1&&function e(t,n,r,a){if(r===n)return t;var i=n+Math.floor((r-n)/2);return e(t,n,i,a),e(t,i+1,r,a),function(e,t,n,r,a){for(var i=e,o=[],u=t;u<=r;u+=1)o[u]=i[u];for(var c=t,f=n+1,l=t;l<=r;l+=1)c>n?(i[l]=o[f],f+=1):f>r?(i[l]=o[c],c+=1):a(o[c],o[f])<=0?(i[l]=o[c],c+=1):(i[l]=o[f],f+=1)}(t,n,i,r,a),t}(e,0,e.length-1,t),e}function K(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);ti?"desc"===t?-1:1:0}}return r}function X(e,t){var n=new Map,r=[];return e.forEach(function(e){var a=e[t];n.has(a)?r[n.get(a)][1].push(e):(r.push([a,[e]]),n.set(a,r.length-1))}),r}function q(e,t,n){var r={label:e[0]};return t.reduce(function(t,r,a){return t[r]=e[1].map(function(e){return e[n[a].index]}),t},r),r}function $(e,t){var n={},r=[],a=[],i=[],o=e.getFieldspace(),u=t.getFieldspace(),c=o.fieldsObj(),f=u.fieldsObj(),l=o.name+" union "+u.name;if(!S(e._colIdentifier.split(",").sort(),t._colIdentifier.split(",").sort()))return null;function s(e,t,r){D(e._rowDiffset,function(e){var o={},u="";a.forEach(function(n){var r=t[n].partialField.data[e];u+="-"+r,o[n]=r}),n[u]||(r&&i.push(o),n[u]=!0)})}return e._colIdentifier.split(",").forEach(function(e){var t=c[e];r.push(_({},t.schema())),a.push(t.schema().name)}),s(t,f,!1),s(e,c,!0),new It(i,r,{name:l})}function Q(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function ee(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);tn&&(n=a))}),[t,n]}}]),t}(),xe=function(){function e(e,t){for(var n=0;n=i?c=!0:(r=e.charCodeAt(o++))===tt?f=!0:r===nt&&(f=!0,e.charCodeAt(o)===tt&&++o),e.slice(a+1,t-1).replace(/""/g,'"')}for(;o9999?"+"+it(t,6):it(t,4))+"-"+it(e.getUTCMonth()+1,2)+"-"+it(e.getUTCDate(),2)+(i?"T"+it(n,2)+":"+it(r,2)+":"+it(a,2)+"."+it(i,3)+"Z":a?"T"+it(n,2)+":"+it(r,2)+":"+it(a,2)+"Z":r||n?"T"+it(n,2)+":"+it(r,2)+"Z":"")}(e):t.test(e+="")?'"'+e.replace(/"/g,'""')+'"':e}return{parse:function parse(e,t){var n,a,i=r(e,function(e,r){if(n)return n(e,r-1);a=e,n=t?function(e,t){var n=rt(e);return function(r,a){return t(n(r),a,e)}}(e,t):rt(e)});return i.columns=a||[],i},parseRows:r,format:function format(t,n){return null==n&&(n=at(t)),[n.map(o).join(e)].concat(a(t,n)).join("\n")},formatBody:function formatBody(e,t){return null==t&&(t=at(e)),a(e,t).join("\n")},formatRows:function formatRows(e){return e.map(i).join("\n")}}},ct=ut(","),ft=(ct.parse,ct.parseRows,ct.format,ct.formatBody,ct.formatRows,ut("\t"));ft.parse,ft.parseRows,ft.format,ft.formatBody,ft.formatRows;var lt=function lt(e,t){t=Object.assign({},{firstRowHeader:!0,fieldSeparator:","},t);var n=ut(t.fieldSeparator);return Ze(n.parseRows(e),t)},st=function st(e){var t={},n=0,r=void 0,a=[],i=v(a);return e.forEach(function(e){var a=[];for(var o in e)o in t?r=t[o]:(t[o]=n++,r=n-1),a[r]=e[o];i.apply(void 0,a)}),[Object.keys(t),a]},dt=function dt(e,t){var n={FlatJSON:st,DSVStr:lt,DSVArr:Ze},r=N(e);if(!r)throw new Error("Couldn't detect the data format");return n[r](e,t)},pt=function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function(e,t){var n=[],r=!0,a=!1,i=void 0;try{for(var o,u=e[Symbol.iterator]();!(r=(o=u.next()).done)&&(n.push(o.value),!t||n.length!==t);r=!0);}catch(e){a=!0,i=e}finally{try{!r&&u.return&&u.return()}finally{if(a)throw i}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")};function ht(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t2&&void 0!==arguments[2]?arguments[2]:{},a=arguments[3];t===L.COMPOSE?(e._derivation.length=0,(n=e._derivation).push.apply(n,ht(a))):e._derivation.push({op:t,meta:r,criteria:a})}(t,n,arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},arguments[4]),function(e,t){var n;(n=t._ancestorDerivation).push.apply(n,ht(e._ancestorDerivation).concat(ht(e._derivation)))}(e,t)},bt=function bt(e){var t=e.clone(!1),n=e.getPartialFieldspace();return t._colIdentifier=n.fields.map(function(e){return e.name()}).join(","),n._cachedFieldsObj=null,n._cachedDimension=null,n._cachedMeasure=null,t.__calculateFieldspace().calculateFieldsConfig(),t},Ot=function Ot(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r=n.operation||"and",a=n.filterByMeasure||!1,i=[];return i=t.length?t.map(function(e){return n=(t=e).getData(),r=n.schema,i=t.getFieldsConfig(),o=t.getFieldspace().fieldsObj(),u=n.data,c=Object.values(i).reduce(function(e,t){return e[t.def.name]=o[t.def.name].domain(),e},{}),function(e){return!!u.length&&u.some(function(t){return r.every(function(n){if(!(n.name in e))return!0;var r=e[n.name].valueOf();if(a&&n.type===f.MEASURE)return r>=c[n.name][0]&&r<=c[n.name][1];if(n.type!==f.DIMENSION)return!0;var o=i[n.name].index;return t[o]===e[n.name].valueOf()})})};var t,n,r,i,o,u,c}):[function(){return!1}],"and"===r?bt(e).select(function(e){return i.every(function(t){return t(e)})},{saveChild:!1,mode:l.ALL}):bt(e).select(function(e){return i.some(function(t){return t(e)})},{mode:l.ALL,saveChild:!1})},wt=function wt(e,t,n,r){var a=e.clone(r.saveChild),i=function gt(e,t,n,r,a){var i=[],o=-1,u=r.mode,c=void 0,f={},s=function s(){return a.detachedRoot()},d=function d(e){return n(function(e,t){var n={},r=!0,a=!1,i=void 0;try{for(var o,u=e[Symbol.iterator]();!(r=(o=u.next()).done);r=!0){var c=o.value;n[c.name()]=new k(c.partialField.data[t],c)}}catch(e){a=!0,i=e}finally{try{!r&&u.return&&u.return()}finally{if(a)throw i}}return n}(t,e),e,s,f)},p=void 0;return p=u===l.INVERSE?function(e){return!d(e)}:function(e){return d(e)},D(e,function(e){p(e)&&(-1!==o&&e===o+1?(c=i.length-1,i[c]=i[c].split("-")[0]+"-"+e):i.push(""+e),o=e)}),i.join(",")}(a._rowDiffset,a.getPartialFieldspace().fields,t,n,e);return a._rowDiffset=i,a.__calculateFieldspace().calculateFieldsConfig(),yt(e,a,L.SELECT,{config:n},t),a},_t=function _t(e,t,n,r){var a=e.clone(n.saveChild),i=t;return n.mode===l.INVERSE&&(i=r.filter(function(e){return-1===t.indexOf(e)})),a._colIdentifier=i.join(","),a.__calculateFieldspace().calculateFieldsConfig(),yt(e,a,L.PROJECT,{projField:t,config:n,actualProjField:i},null),a},Et=function Et(e){if((e=_({},e)).type||(e.type=f.DIMENSION),!e.subtype)switch(e.type){case f.MEASURE:e.subtype=c.CONTINUOUS;break;default:case f.DIMENSION:e.subtype=u.CATEGORICAL}return e},At=function At(e){return e.map(function(e){return function(e){var t=[c.CONTINUOUS],n=[u.CATEGORICAL,u.BINNED,u.TEMPORAL,u.GEO],r=e.type,a=e.subtype,i=e.name;switch(r){case f.DIMENSION:if(-1===n.indexOf(a))throw new Error("DataModel doesn't support dimension field subtype "+a+" used for "+i+" field");break;case f.MEASURE:if(-1===t.indexOf(a))throw new Error("DataModel doesn't support measure field subtype "+a+" used for "+i+" field");break;default:throw new Error("DataModel doesn't support field type "+r+" used for "+i+" field")}}(e=Et(e)),e})},St=function St(e,t,n,r){n=At(n),r=Object.assign(Object.assign({},qe),r);var i=a[r.dataFormat];if(!i||"function"!=typeof i)throw new Error("No converter function found for "+r.dataFormat+" format");var u=i(t,r),c=pt(u,2),f=c[0],l=c[1];!function(e,t){n.forEach(function(e){var n=e.as;if(n){var r=t.indexOf(e.name);t[r]=n,e.name=n,delete e.as}})}(0,f);var s=Xe(l,n,f),d=T.createNamespace(s,r.name);return e._partialFieldspace=d,e._rowDiffset=l.length&&l[0].length?"0-"+(l[0].length-1):"",e._colIdentifier=n.map(function(e){return e.name}).join(),e._dataFormat=r.dataFormat===o.AUTO?N(t):r.dataFormat,e},jt=function jt(e,t){for(var n=0;n2&&void 0!==arguments[2]?arguments[2]:{},a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},i=a.nonTraversingModel,o=a.excludeModels||[];t!==i&&((!o.length||-1===o.indexOf(t))&&t.handlePropagation(n,r),t._children.forEach(function(t){var i=Nt(n,t),o=pt(i,2),u=o[0],c=o[1];e(t,[u,c],r,a)}))},kt=function kt(e,t,n,r){var a=void 0,i=void 0,o=n.propagationNameSpace,u=n.propagateToSource,c=n.sourceId,f=r.propagateInterpolatedValues,l=[];if(null===e&&!0!==r.persistent)l=[{criteria:[]}];else{var s,d=Object.values(o.mutableActions);!1!==u&&(d=d.filter(function(e){return e.config.sourceId!==c}));var p=d.filter(function(e){return(r.filterFn||function(){return!0})(e,r)}).map(function(e){return e.config.criteria}),h=[];if(!1!==u){var v=Object.values(o.mutableActions);v.forEach(function(e){var t=e.config;!1===t.applyOnSource&&t.action===r.action&&t.sourceId!==c&&(h.push(e.model),(a=v.filter(function(t){return t!==e}).map(function(e){return e.config.criteria})).length&&l.push({criteria:a,models:e.model,path:function Ft(e){for(var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];e._parent;)t.push(e),e=e._parent;return t}(e.model)}))})}a=(s=[]).concat.apply(s,[].concat(ht(p),[e])).filter(function(e){return null!==e}),l.push({criteria:a,excludeModels:[].concat(h,ht(r.excludeModels||[]))})}var m=t.model,y=Object.assign({sourceIdentifiers:e,propagationSourceId:c},r),g=t.groupByModel;f&&g&&(i=Ot(g,a,{filterByMeasure:f}),Tt(g,i,y)),l.forEach(function(e){var t=Ot(m,e.criteria),n=e.path;if(n){var r=function(e,t){for(var n=0,r=t.length;n0&&void 0!==arguments[0])||arguments[0],t=new this.constructor(this);return e?t.setParent(this):t.setParent(null),t}},{key:"project",value:function value(e,t){var n={mode:l.NORMAL,saveChild:!0};t=Object.assign({},n,t);var r=this.getFieldsConfig(),a=Object.keys(r),i=t.mode,o=e.reduce(function(e,t){return"RegExp"===t.constructor.name?e.push.apply(e,function(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t0,c=[];if(n.split(",").forEach(function(t){for(var n=0;n=0;u--)a=t[u][0],i=t[u][1],(o=jt(r,a))&&("function"==typeof i?z(n,function(e,t){return i(e[o.index],t[o.index])}):E(i)?function(){var e=X(n,o.index),t=i[i.length-1],a=i.slice(0,i.length-1),u=a.map(function(e){return jt(r,e)});e.forEach(function(e){e.push(q(e,a,u))}),z(e,function(e,n){var r=e[2],a=n[2];return t(r,a)}),n.length=0,e.forEach(function(e){n.push.apply(n,K(e[1]))})}():(i="desc"===String(i).toLowerCase()?"desc":"asc",z(n,W(o.type,i,o.index))));e.uids=[],n.forEach(function(t){e.uids.push(t.pop())})}(i,r),a.columnWise){var f=Array.apply(void 0,K(Array(i.schema.length))).map(function(){return[]});i.data.forEach(function(e){e.forEach(function(e,t){f[t].push(e)})}),i.data=f}return i}.call(this,this.getPartialFieldspace().fields,this._rowDiffset,e.getAllFields?t.map(function(e){return e.name()}).join():this._colIdentifier,e.sort,{columnWise:"column"===e.order,addUid:!!e.withUid});if(!e.formatter)return n;var r=e.formatter,a=n.data,i=n.schema,o=n.uids,u=i.map(function(e){return e.name}),c=Object.keys(r).reduce(function(e,t){var n=u.indexOf(t);return-1!==n&&e.push([n,r[t]]),e},[]);return"column"===e.order?c.forEach(function(e){var t=e[0],n=e[1];a[t].forEach(function(e,r){a[t][r]=n.call(void 0,e,o[r],i[t])})}):a.forEach(function(e,t){c.forEach(function(n){var r=n[0],a=n[1];e[r]=a.call(void 0,e[r],o[t],i[r])})}),n}},{key:"groupBy",value:function value(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{saveChild:!0},r=""+e.join(),i=function ge(e,t,n,r){var a=function(e,t){var n=[],r=e.getFieldspace().getDimension();return Object.entries(r).forEach(function(e){var r=ye(e,1)[0];t&&t.length?-1!==t.indexOf(r)&&n.push(r):n.push(r)}),n}(e,t),i=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n={},r=e.getFieldspace().getMeasure(),a=me.defaultReducer();return Object.keys(r).forEach(function(e){"string"!=typeof t[e]&&(t[e]=r[e].defAggFn());var i=me.resolve(t[e]);i?n[e]=i:(n[e]=a,t[e]=pe)}),n}(e,n),o=e.getFieldspace(),u=o.fieldsObj(),c=o.name,l=[],s=[],d=[],p={},h=[],v=void 0;Object.entries(u).forEach(function(e){var t=ye(e,2),n=t[0],r=t[1];if(-1!==a.indexOf(n)||i[n])switch(d.push(_({},r.schema())),r.schema().type){case f.MEASURE:s.push(n);break;default:case f.DIMENSION:l.push(n)}});var m=0;D(e._rowDiffset,function(e){var t="";l.forEach(function(n){t=t+"-"+u[n].partialField.data[e]}),void 0===p[t]?(p[t]=m,h.push({}),l.forEach(function(t){h[m][t]=u[t].partialField.data[e]}),s.forEach(function(t){h[m][t]=[u[t].partialField.data[e]]}),m+=1):s.forEach(function(n){h[p[t]][n].push(u[n].partialField.data[e])})});var y={},g=function g(){return e.detachedRoot()};return h.forEach(function(e){var t=e;s.forEach(function(n){t[n]=i[n](e[n],g,y)})}),r?(r.__calculateFieldspace(),v=r):v=new zt(h,d,{name:c}),v}.apply(void 0,[this,e,t]);return yt(this,i,L.GROUPBY,{fieldsArr:e,groupByString:r,defaultReducer:me.defaultReducer()},t),n.saveChild?i.setParent(this):i.setParent(null),i}},{key:"sort",value:function value(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{saveChild:!1},n=this.getData({order:"row",sort:e}),r=[n.schema.map(function(e){return e.name})].concat(n.data),a=new this.constructor(r,n.schema,{dataFormat:"DSVArr"});return yt(this,a,L.SORT,t,e),t.saveChild?a.setParent(this):a.setParent(null),a}},{key:"serialize",value:function value(e,t){e=e||this._dataFormat,t=Object.assign({},{fieldSeparator:","},t);var n=this.getFieldspace().fields,r=n.map(function(e){return e.formattedData()}),a=r[0].length,i=void 0,u=void 0,c=void 0;if(e===o.FLAT_JSON)for(i=[],u=0;u=0&&(n.fields[r]=e)}else n.fields.push(e);return n._cachedFieldsObj=null,n._cachedDimension=null,n._cachedMeasure=null,this.__calculateFieldspace().calculateFieldsConfig(),this}},{key:"calculateVariable",value:function value(e,t,n){var r=this;e=Et(e),n=Object.assign({},{saveChild:!0,replaceVar:!1},n);var a=this.getFieldsConfig(),i=t.slice(0,t.length-1),o=t[t.length-1];if(a[e.name]&&!n.replaceVar)throw new Error(e.name+" field already exists in datamodel");var u=i.map(function(e){var t=a[e];if(!t)throw new Error(e+" is not a valid column name.");return t.index}),c=this.clone(n.saveChild),f=c.getFieldspace().fields,l=u.map(function(e){return f[e]}),s={},d=function d(){return r.detachedRoot()},p=[];D(c._rowDiffset,function(e){var t=l.map(function(t){return t.partialField.data[e]});p[e]=o.apply(void 0,function(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t1&&void 0!==arguments[1]?arguments[1]:{},n=arguments[2],r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},a=t.isMutableAction,i=t.sourceId,o=t.payload,u=function(e){for(;e._parent;)e=e._parent;return e}(this),c=u._propagationNameSpace,f={groupByModel:function(e){for(;e._parent&&e._derivation.find(function(e){return e.op!==L.GROUPBY});)e=e._parent;return e}(this),model:u};return n&&function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments[2],r=void 0,a=t.isMutableAction,i=t.criteria,o=t.action+"-"+t.sourceId;r=a?e.mutableActions:e.immutableActions,null===i?delete r[o]:r[o]={model:n,config:t}}(c,t,this),kt(e,f,{propagationNameSpace:c,sourceId:i},Object.assign({payload:o},t)),a&&function(e,t,n){var r=e.immutableActions;for(var a in r){var i=r[a].config,o=n.config.sourceId,u=!n.propConfig.filterImmutableAction||n.propConfig.filterImmutableAction(i,n.config);if(i.sourceId!==o&&u){var c=i.criteria;kt(c,t,{propagationNameSpace:e,propagateToSource:!1,sourceId:o},i)}}}(c,f,{config:t,propConfig:r}),this}},{key:"on",value:function value(e,t){switch(e){case"propagation":this._onPropagation.push(t)}return this}},{key:"unsubscribe",value:function value(e){switch(e){case"propagation":this._onPropagation=[]}return this}},{key:"handlePropagation",value:function value(e,t){var n=this;this._onPropagation.forEach(function(r){return r.call(n,e,t)})}},{key:"bin",value:function value(e,t){var n=this.getFieldsConfig();if(!n[e])throw new Error("Field "+e+" doesn't exist");var r=t.name||e+"_binned";if(n[r])throw new Error("Field "+r+" already exists");var a=function(e,t,n){var r=n.buckets,a=n.binsCount,i=n.binSize,o=n.start,u=n.end,c=e.domain(),f=I(c,2),l=f[0],s=f[1];r||(o=0!==o&&(!o||o>l)?l:o,u=0!==u&&(!u||ul&&r.unshift(l),r[r.length-1]<=s&&r.push(s+1);for(var d=[],p=0;p=(i=e[a=n+Math.floor((r-n)/2)]).start&&t=i.end?n=a+1:t1&&void 0!==arguments[1]?arguments[1]:{saveChild:!0},r=e,a=void 0,i=[];return t.forEach(function(e){r=e(r),i.push.apply(i,function(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t2?(i=arguments.length<=0?void 0:arguments[0],n=arguments.length<=1?void 0:arguments[1],o=arguments.length<=2?void 0:arguments[2]):(i=null,n=arguments.length<=0?void 0:arguments[0],o=arguments.length<=1?void 0:arguments[1]),t=o(y),(e=r=new _(t.fn)).addDependencies.apply(e,P(t.dependencies)),this._addPropInModel(i,function(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}({},n,r)),this}},{key:"_addPropInModel",value:function value(e,t){return this._graph.createNodesFrom(t,e),this}},{key:"on",value:function value(e,t,r){var n,i=e instanceof Array?e:[e],o=this._graph.createElectricNodeOf(i,{type:"CurrFrame",fn:t});return r&&(n=this._graph.stopPropagation().setPropagationOverride("nextFrame")).resetNodeValue.apply(n,P(e)),o}},{key:"next",value:function value(e,t,r){var n,i=e instanceof Array?e:[e],o=this._graph.createElectricNodeOf(i,{type:"NextFrame",fn:t});return r&&(n=this._graph.stopPropagation().setPropagationOverride("currentFrame")).resetNodeValue.apply(n,P(e)),o}},{key:"lock",value:function value(){return this._lockFlag=!0,this._reqQ.length=0,this}},{key:"unlock",value:function value(){return this._lockFlag=!1,this.setProp.apply(this,P(this._reqQ)),this._reqQ.length=0,this}},{key:"prop",value:function value(){var e,t=void 0,r=void 0;switch(e=arguments.length){case 1:t=arguments.length<=0?void 0:arguments[0];break;case 2:t=arguments.length<=0?void 0:arguments[0],r=arguments.length<=1?void 0:arguments[1];break;default:return this}return 2===e?(this._lockFlag?this._reqQ.push([t,r]):this.setProp([t,r]),this):this._graph.getNodeValue(t)}},{key:"setProp",value:function value(){for(var e,t=this,r=arguments.length,n=Array(r),i=0;i/gi),smartlabel},SmartLabelManager.store={},SmartLabelManager.prototype._calCharDimWithCache=function(text,calculateDifference,length){if(!this._init)return!1;var size,csArr,tw,twi,cachedStyle,asymmetricDifference,maxAdvancedCacheLimit=this.options.maxCacheLimit,container=this._container,style=this.style||{},cache=this._advancedCache||(this._advancedCache={}),advancedCacheKey=this._advancedCacheKey||(this._advancedCacheKey=[]),cacheName=text+(style.fontSize||"")+(style.fontFamily||"")+(style.fontWeight||"")+(style.fontStyle||""),cacheInitName=text+"init"+(style.fontSize||"")+(style.fontFamily||"")+(style.fontWeight||"")+(style.fontStyle||"");return htmlSplCharSpace[text]&&(text=htmlSplCharSpace[text]),calculateDifference?void 0===(asymmetricDifference=cache[cacheInitName])&&(container.innerHTML=text.repeat?text.repeat(length):Array(length+1).join(text),tw=container.offsetWidth,container.innerHTML=text,twi=container.offsetWidth,asymmetricDifference=cache[cacheInitName]=(tw-length*twi)/(length+1),advancedCacheKey.push(cacheInitName),advancedCacheKey.length>maxAdvancedCacheLimit&&delete cache[advancedCacheKey.shift()]):asymmetricDifference=0,(cachedStyle=cache[cacheName])?(csArr=cachedStyle.split(","),{width:parseFloat(csArr[0],10),height:parseFloat(csArr[1],10)}):(container.innerHTML=text,size={height:container.offsetHeight,width:container.offsetWidth+asymmetricDifference},cache[cacheName]=size.width+","+size.height,advancedCacheKey.push(cacheName),advancedCacheKey.length>maxAdvancedCacheLimit&&delete cache[advancedCacheKey.shift()],size)},SmartLabelManager.prototype._getWidthFn=function(){var contObj=this._containerObj,container=this._container,svgText=contObj.svgText;return svgText?function(str){var bbox,width;return svgText.textContent=str,(width=(bbox=svgText.getBBox()).width-SVG_BBOX_CORRECTION)<1&&(width=bbox.width),width}:function(str){return container.innerHTML=str,container.offsetWidth}},SmartLabelManager.prototype.setStyle=function(style){return this._init?style!==this.style||this._styleNotSet?(style||(style=this.style),slLib.setLineHeight(style),this.style=style,this._containerObj=sCont=this._containerManager.get(style),this._containerObj?(this._container=sCont.node,this._context=sCont.context,this._cache=sCont.charCache,this._lineHeight=sCont.lineHeight,this._styleNotSet=!1):this._styleNotSet=!0,this):void 0:this;var sCont},SmartLabelManager.prototype.useEllipsesOnOverflow=function(useEllipses){return this._init?(this._showNoEllipses=!useEllipses,this):this},SmartLabelManager.prototype.getSmartText=function(text,maxWidth,maxHeight,noWrap){if(!this._init)return!1;void 0===text||null===text?text="":"string"!=typeof text&&(text=text.toString());var len,trimStr,tempArr,tmpText,maxWidthWithEll,toolText,oriWidth,oriHeight,newCharIndex,nearestChar,tempChar,getWidth,initialLeft,initialTop,getOriSizeImproveObj,spanArr,x,y,minWidth,elem,chr,elemRightMostPoint,elemLowestPoint,lastBR,removeFromIndex,removeFromIndexForEllipses,hasHTMLTag=!1,maxStrWidth=0,lastDash=-1,lastSpace=-1,lastIndexBroken=-1,strWidth=0,strHeight=0,oriTextArr=[],i=0,ellipsesStr=this._showNoEllipses?"":"...",lineHeight=this._lineHeight,context=this._context,container=this._container,sCont=this._containerObj,ellipsesWidth=sCont.ellipsesWidth,dotWidth=sCont.dotWidth,characterArr=[],dashIndex=-1,spaceIndex=-1,lastLineBreak=-1,fastTrim=function fastTrim(str){for(var ws=/\s/,i=(str=str.replace(/^\s\s*/,"")).length;ws.test(str.charAt(i-=1)););return str.slice(0,i+1)},smartLabel={text:text,maxWidth:maxWidth,maxHeight:maxHeight,width:null,height:null,oriTextWidth:null,oriTextHeight:null,oriText:text,isTruncated:!1};if(getWidth=this._getWidthFn(),maxHeight===lineHeight&&(maxHeight*=1.2),container){if(!documentSupport.isBrowserLess){if((hasHTMLTag=slLib.xmlTagRegEx.test(text))?(container.innerHTML=text,smartLabel.oriTextWidth=oriWidth=container.offsetWidth,smartLabel.oriTextHeight=oriHeight=container.offsetHeight):(tmpText=text.replace(slLib.ltgtRegex,function(match){return"<"===match?"<":">"}),getOriSizeImproveObj=this.getOriSize(tmpText,!0),smartLabel.oriTextWidth=oriWidth=getOriSizeImproveObj.width,smartLabel.oriTextHeight=oriHeight=getOriSizeImproveObj.height),oriHeight<=maxHeight&&oriWidth<=maxWidth)return smartLabel.width=smartLabel.oriTextWidth=oriWidth,smartLabel.height=smartLabel.oriTextHeight=oriHeight,smartLabel;if(lineHeight>maxHeight)return smartLabel.text="",smartLabel.width=smartLabel.oriTextWidth=0,smartLabel.height=smartLabel.oriTextHeight=0,smartLabel}if(text=fastTrim(text).replace(/(\s+)/g," "),maxWidthWithEll=this._showNoEllipses?maxWidth:maxWidth-ellipsesWidth,!hasHTMLTag){if(len=(oriTextArr=text.split("")).length,trimStr="",tempArr=[],tempChar=oriTextArr[0],this._cache[tempChar]?minWidth=this._cache[tempChar].width:(minWidth=getWidth(tempChar),this._cache[tempChar]={width:minWidth}),maxWidthWithEll>minWidth)i=(tempArr=text.substr(0,slLib.getNearestBreakIndex(text,maxWidthWithEll,this)).split("")).length;else{if(minWidth>maxWidth)return smartLabel.text="",smartLabel.width=smartLabel.oriTextWidth=smartLabel.height=smartLabel.oriTextHeight=0,smartLabel;ellipsesStr&&((maxWidthWithEll=maxWidth-2*dotWidth)>minWidth?ellipsesStr="..":(maxWidthWithEll=maxWidth-dotWidth)>minWidth?ellipsesStr=".":(maxWidthWithEll=0,ellipsesStr=""))}if(strWidth=getWidth(tempArr.join("")),strHeight=this._lineHeight,noWrap){for(;imaxWidthWithEll&&(trimStr||(trimStr=tempArr.slice(0,-1).join("")),strWidth>maxWidth))return smartLabel.text=fastTrim(trimStr)+ellipsesStr,smartLabel.tooltext=smartLabel.oriText,smartLabel.width=getWidth(smartLabel.text),smartLabel.height=this._lineHeight,smartLabel;return smartLabel.text=tempArr.join(""),smartLabel.width=strWidth,smartLabel.height=this._lineHeight,smartLabel}for(;imaxWidthWithEll&&(trimStr||(trimStr=tempArr.slice(0,-1).join("")),strWidth>maxWidth)){if(lastSpace=text.substr(0,tempArr.length).lastIndexOf(" "),lastDash=text.substr(0,tempArr.length).lastIndexOf("-"),lastSpace>lastIndexBroken?(strWidth=getWidth(tempArr.slice(lastIndexBroken+1,lastSpace).join("")),tempArr.splice(lastSpace,1,"
"),lastIndexBroken=lastSpace,newCharIndex=lastSpace+1):lastDash>lastIndexBroken?(lastDash===tempArr.length-1?(strWidth=getWidth(tempArr.slice(lastIndexBroken+1,lastSpace).join("")),tempArr.splice(lastDash,1,"
-")):(strWidth=getWidth(tempArr.slice(lastIndexBroken+1,lastSpace).join("")),tempArr.splice(lastDash,1,"-
")),lastIndexBroken=lastDash,newCharIndex=lastDash+1):(tempArr.splice(tempArr.length-1,1,"
"+oriTextArr[i]),lastLineBreak=tempArr.length-2,strWidth=getWidth(tempArr.slice(lastIndexBroken+1,lastLineBreak+1).join("")),lastIndexBroken=lastLineBreak,newCharIndex=i),(strHeight+=this._lineHeight)>maxHeight)return smartLabel.text=fastTrim(trimStr)+ellipsesStr,smartLabel.tooltext=smartLabel.oriText,smartLabel.width=maxWidth,smartLabel.height=strHeight-this._lineHeight,smartLabel;maxStrWidth=max(maxStrWidth,strWidth),trimStr=null,nearestChar=slLib.getNearestBreakIndex(text.substr(newCharIndex),maxWidthWithEll,this),strWidth=getWidth(text.substr(newCharIndex,nearestChar||1)),tempArr.length)/g,'$1'),container.innerHTML=text,x=0,y=(spanArr=container[documentSupport.childRetriverFn](documentSupport.childRetriverString)).length;xmaxWidth)return smartLabel.text="",smartLabel.width=smartLabel.oriTextWidth=smartLabel.height=smartLabel.oriTextHeight=0,smartLabel;if(minWidth>maxWidthWithEll&&!this._showNoEllipses&&((maxWidthWithEll=maxWidth-2*dotWidth)>minWidth?ellipsesStr="..":(maxWidthWithEll=maxWidth-dotWidth)>minWidth?ellipsesStr=".":(maxWidthWithEll=0,ellipsesStr="")),initialLeft=characterArr[0].elem.offsetLeft,initialTop=characterArr[0].elem.offsetTop,noWrap)for(;imaxWidthWithEll&&(removeFromIndexForEllipses||(removeFromIndexForEllipses=i),container.offsetWidth>maxWidth&&(removeFromIndex=i,i=len));else for(;imaxWidthWithEll?(removeFromIndexForEllipses||(removeFromIndexForEllipses=i),elemRightMostPoint>maxWidth&&(lastSpace=characterArr[i].spaceIdx,lastDash=characterArr[i].dashIdx,lastSpace>lastIndexBroken?(characterArr[lastSpace].elem.innerHTML="
",lastIndexBroken=lastSpace):lastDash>lastIndexBroken?(characterArr[lastDash].elem.innerHTML=lastDash===i?"
-":"-
",lastIndexBroken=lastDash):elem.parentNode.insertBefore(lastBR=doc.createElement("br"),elem),elem.offsetHeight+elem.offsetTop>maxHeight?(lastBR?lastBR.parentNode.removeChild(lastBR):lastIndexBroken===lastDash?characterArr[lastDash].elem.innerHTML="-":characterArr[lastSpace].elem.innerHTML=" ",removeFromIndex=i,i=len):removeFromIndexForEllipses=null)):elemLowestPoint>maxHeight&&(removeFromIndex=i,i=len);if(removeFromIndex=removeFromIndexForEllipses;i-=1)(elem=characterArr[i].elem).parentNode.removeChild(elem);for(;i>=0;i-=1)elem=characterArr[i].elem,slLib.classNameBrReg.test(elem.className)?elem.parentNode.removeChild(elem):i=0}return smartLabel.text=container.innerHTML.replace(slLib.spanRemovalRegx,"$1").replace(/\&\;/g,"&"),smartLabel.isTruncated&&(smartLabel.text+=ellipsesStr,smartLabel.tooltext=toolText),smartLabel.height=container.offsetHeight,smartLabel.width=container.offsetWidth,smartLabel}return smartLabel.error=new Error("Body Tag Missing!"),smartLabel},SmartLabelManager.prototype.getOriSize=function(text,detailedCalculationFlag){if(!this._init)return!1;var textArr,letter,lSize,i,l,cumulativeSize=0,height=0,indiSizeStore={};if(!detailedCalculationFlag)return this._calCharDimWithCache(text);for(i=0,l=(textArr=text.split("")).length;i]+?\>)|(&(?:[a-z]+|#[0-9]+);|.)/gi,spanAdditionReplacer:'$1$2',spanRemovalRegx:new RegExp("\\]+?"+classNameWithTag+"[^\\>]{0,}\\>(.*?)\\<\\/span\\>","ig"),xmlTagRegEx:new RegExp("<[^>][^<]*[^>]+>","i"),ltgtRegex:/<|>/g,brReplaceRegex://gi,testStrAvg:"WgI",parentContainerStyle:{position:"absolute",top:"-9999em",whiteSpace:"nowrap",padding:"0px",width:"1px",height:"1px",overflow:"hidden"},supportedStyle:{font:"font",fontFamily:"font-family","font-family":"font-family",fontWeight:"font-weight","font-weight":"font-weight",fontSize:"font-size","font-size":"font-size",lineHeight:"line-height","line-height":"line-height",fontStyle:"font-style","font-style":"font-style"},getDocumentSupport:function getDocumentSupport(){var childRetriverFn,childRetriverString,noClassTesting;return doc.getElementsByClassName?(childRetriverFn="getElementsByClassName",childRetriverString=classNameWithTag,noClassTesting=!0):(childRetriverFn="getElementsByTagName",childRetriverString="span",noClassTesting=!1),{isIE:/msie/i.test(userAgent)&&!win.opera,hasSVG:Boolean(win.SVGAngle||doc.implementation.hasFeature("http://www.w3.org/TR/SVG11/feature#BasicStructure","1.1")),isHeadLess:new RegExp(" HtmlUnit").test(userAgent),isWebKit:new RegExp(" AppleWebKit/").test(userAgent),childRetriverFn:childRetriverFn,childRetriverString:childRetriverString,noClassTesting:noClassTesting}},createContainer:function createContainer(containerParent){var body,container;if(containerParent&&(containerParent.offsetWidth||containerParent.offsetHeight)){if(containerParent.appendChild)return containerParent.appendChild(container=doc.createElement("DIV")),container.className=containerClass,container.setAttribute("aria-hidden","true"),container.setAttribute("role","presentation"),container}else if((body=doc.getElementsByTagName("body")[0])&&body.appendChild)return(container=doc.createElement("DIV")).className=containerClass,container.setAttribute("aria-hidden","true"),container.setAttribute("role","presentation"),1,body.appendChild(container),container},getNearestBreakIndex:function getNearestBreakIndex(text,maxWidth,sl){if(!text||!text.length)return 0;var difference,getWidth=sl._getWidthFn(),charLen=0,increment=0,oriWidth=getWidth(text),avgWidth=oriWidth/text.length;if(difference=maxWidth,charLen=ceil(maxWidth/avgWidth),oriWidthtext.length&&(difference=maxWidth-oriWidth,charLen=text.length);difference>0;){if(difference=maxWidth-getWidth(text.substr(0,charLen)),!(increment=floor(difference/avgWidth)))return charLen;charLen+=increment}for(;difference<0;){if(difference=maxWidth-getWidth(text.substr(0,charLen)),!(increment=floor(difference/avgWidth)))return charLen;charLen+=increment}return charLen},setLineHeight:function setLineHeight(styleObj){var fSize=styleObj.fontSize=styleObj.fontSize||"12px";return styleObj.lineHeight=styleObj.lineHeight||styleObj["line-height"]||1.2*parseInt(fSize,10)+"px",styleObj}}}};exports.default=lib,module.exports=exports.default},function(module){module.exports={name:"muze",private:!0,version:"1.2.0",description:"Composable visualisation library for web with a data-first approach",homepage:"https://muzejs.org",author:"Muzejs.org (https://muzejs.org/)",license:"MIT",contributors:[{name:"Akash Ghoswami",email:"akashgoswami90s@gmail.com"},{name:"Ranajit Banerjee",email:"ranajit.113124@gmail.com",url:"https://github.com/ranajitbanerjee"},{name:"Mridul Meharia",email:"mehariamridul@gmail.com",url:"https://github.com/mridulmeh"},{name:"Subhash Haldar"},{name:"Sandeep Acharya"},{name:"Rousan Ali",email:"rousanali786@gmail.com",url:"https://rousan.io"},{name:"Ujjal Kumar Dutta",email:"duttaujjalkumar@live.com"}],main:"src/index.js",keywords:["muze","svg","vector","graphics","data-visualization","visualization","renderer","fusioncharts","relational","algebra","relation"],repository:{type:"git",url:"https://github.com/chartshq/muze"},dependencies:{"@chartshq/layout":"^1.0.0","@chartshq/muze-firebolt":"^1.0.0","@chartshq/muze-legend":"^1.0.0","muze-utils":"^1.0.0","@chartshq/visual-cell":"^1.0.0","@chartshq/visual-group":"^1.0.0","@chartshq/visual-layer":"^1.0.0","@chartshq/visual-unit":"^1.0.0"}}},function(module,exports,__webpack_require__){var Muze=__webpack_require__(27);module.exports=Muze.default?Muze.default:Muze},function(module,exports,__webpack_require__){"use strict";var slLib=function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj}}(__webpack_require__(5)).default.init("undefined"!=typeof window?window:void 0),doc=slLib.win.document,documentSupport=slLib.getDocumentSupport(),SVG_BBOX_CORRECTION=documentSupport.isWebKit?0:4.5;function ContainerManager(parentContainer,isBrowserLess,maxContainers){var svg;maxContainers=(maxContainers=maxContainers>5?maxContainers:5)<20?maxContainers:20,this.maxContainers=maxContainers,this.first=null,this.last=null,this.containers={},this.length=0,this.rootNode=parentContainer,isBrowserLess&&((svg=doc.createElementNS("http://www.w3.org/2000/svg","svg")).setAttributeNS("http://www.w3.org/2000/svg","xlink","http://www.w3.org/1999/xlink"),svg.setAttributeNS("http://www.w3.org/2000/svg","height","0"),svg.setAttributeNS("http://www.w3.org/2000/svg","width","0"),this.svgRoot=svg,this.rootNode.appendChild(svg))}ContainerManager.prototype.get=function(style){var diff,key,containerObj,containers=this.containers,len=this.length,max=this.maxContainers,keyStr="";for(key in slLib.supportedStyle)void 0!==style[key]&&(keyStr+=slLib.supportedStyle[key]+":"+style[key]+";");if(!keyStr)return!1;if(containerObj=containers[keyStr])this.first!==containerObj&&(containerObj.prev&&(containerObj.prev.next=containerObj.next),containerObj.next&&(containerObj.next.prev=containerObj.prev),containerObj.next=this.first,containerObj.next.prev=containerObj,this.last===containerObj&&(this.last=containerObj.prev),containerObj.prev=null,this.first=containerObj);else{if(len>=max)for(diff=len-max+1;diff--;)this.removeContainer(this.last);containerObj=this.addContainer(keyStr)}return containerObj},ContainerManager.prototype.addContainer=function(keyStr){var node,container;return this.containers[keyStr]=container={next:null,prev:null,node:null,ellipsesWidth:0,lineHeight:0,dotWidth:0,avgCharWidth:4,keyStr:keyStr,charCache:{}},container.next=this.first,container.next&&(container.next.prev=container),this.first=container,this.last||(this.last=container),this.length+=1,node=container.node=doc.createElement("div"),this.rootNode.appendChild(node),documentSupport.isIE&&!documentSupport.hasSVG?node.style.setAttribute("cssText",keyStr):node.setAttribute("style",keyStr),node.setAttribute("aria-hidden","true"),node.setAttribute("role","presentation"),node.style.display="inline-block",node.innerHTML=slLib.testStrAvg,container.lineHeight=node.offsetHeight,container.avgCharWidth=node.offsetWidth/3,documentSupport.isBrowserLess?((node=container.svgText=doc.createElementNS("http://www.w3.org/2000/svg","text")).setAttribute("style",keyStr),this.svgRoot.appendChild(node),node.textContent=slLib.testStrAvg,container.lineHeight=node.getBBox().height,container.avgCharWidth=(node.getBBox().width-SVG_BBOX_CORRECTION)/3,node.textContent="...",container.ellipsesWidth=node.getBBox().width-SVG_BBOX_CORRECTION,node.textContent=".",container.dotWidth=node.getBBox().width-SVG_BBOX_CORRECTION):(node.innerHTML="...",container.ellipsesWidth=node.offsetWidth,node.innerHTML=".",container.dotWidth=node.offsetWidth,node.innerHTML=""),container},ContainerManager.prototype.removeContainer=function(cObj){var keyStr=cObj.keyStr;keyStr&&this.length&&cObj&&(this.length-=1,cObj.prev&&(cObj.prev.next=cObj.next),cObj.next&&(cObj.next.prev=cObj.prev),this.first===cObj&&(this.first=cObj.next),this.last===cObj&&(this.last=cObj.prev),cObj.node.parentNode.removeChild(cObj.node),delete this.containers[keyStr])},ContainerManager.prototype.dispose=function(){var key,containers=this.containers;for(key in this.maxContainers=null,containers)this.removeContainer(containers[key]);this.rootNode.parentNode.removeChild(this.rootNode),this.rootNode=null,this.first=null,this.last=null},module.exports=ContainerManager},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.r(__webpack_exports__);var scales_namespaceObject={};__webpack_require__.r(scales_namespaceObject),__webpack_require__.d(scales_namespaceObject,"scaleLinear",function(){return linear_linear}),__webpack_require__.d(scales_namespaceObject,"scaleThreshold",function(){return threshold_threshold}),__webpack_require__.d(scales_namespaceObject,"scaleLog",function(){return log}),__webpack_require__.d(scales_namespaceObject,"scalePow",function(){return pow}),__webpack_require__.d(scales_namespaceObject,"scaleIdentity",function(){return identity_identity}),__webpack_require__.d(scales_namespaceObject,"scaleOrdinal",function(){return ordinal}),__webpack_require__.d(scales_namespaceObject,"scaleSequential",function(){return sequential}),__webpack_require__.d(scales_namespaceObject,"scaleQuantize",function(){return quantize_quantize}),__webpack_require__.d(scales_namespaceObject,"scaleQuantile",function(){return quantile_quantile}),__webpack_require__.d(scales_namespaceObject,"schemeCategory10",function(){return category10}),__webpack_require__.d(scales_namespaceObject,"schemeCategory20",function(){return category20}),__webpack_require__.d(scales_namespaceObject,"schemeCategory20b",function(){return category20b}),__webpack_require__.d(scales_namespaceObject,"scaleBand",function(){return band}),__webpack_require__.d(scales_namespaceObject,"scaleTime",function(){return src_time});var color_schemes_namespaceObject={};__webpack_require__.r(color_schemes_namespaceObject),__webpack_require__.d(color_schemes_namespaceObject,"schemeDark2",function(){return Dark2}),__webpack_require__.d(color_schemes_namespaceObject,"schemePaired",function(){return Paired}),__webpack_require__.d(color_schemes_namespaceObject,"schemeAccent",function(){return Accent}),__webpack_require__.d(color_schemes_namespaceObject,"schemePastel1",function(){return Pastel1}),__webpack_require__.d(color_schemes_namespaceObject,"schemePastel2",function(){return Pastel2}),__webpack_require__.d(color_schemes_namespaceObject,"schemeSet1",function(){return Set1}),__webpack_require__.d(color_schemes_namespaceObject,"schemeSet2",function(){return Set2}),__webpack_require__.d(color_schemes_namespaceObject,"schemeSet3",function(){return Set3}),__webpack_require__.d(color_schemes_namespaceObject,"schemeBlues",function(){return Blues_scheme}),__webpack_require__.d(color_schemes_namespaceObject,"schemeBrBG",function(){return BrBG_scheme}),__webpack_require__.d(color_schemes_namespaceObject,"schemePRGn",function(){return PRGn_scheme}),__webpack_require__.d(color_schemes_namespaceObject,"schemePiYG",function(){return PiYG_scheme}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateBrBG",function(){return BrBG}),__webpack_require__.d(color_schemes_namespaceObject,"interpolatePRGn",function(){return PRGn}),__webpack_require__.d(color_schemes_namespaceObject,"interpolatePiYG",function(){return PiYG}),__webpack_require__.d(color_schemes_namespaceObject,"interpolatePuOr",function(){return PuOr}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateRdBu",function(){return RdBu}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateRdGy",function(){return RdGy}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateRdYlBu",function(){return RdYlBu}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateRdYlGn",function(){return RdYlGn}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateSpectral",function(){return Spectral}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateBlues",function(){return Blues}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateGreens",function(){return Greens}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateGreys",function(){return Greys}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateOranges",function(){return Oranges}),__webpack_require__.d(color_schemes_namespaceObject,"interpolatePurples",function(){return Purples}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateReds",function(){return Reds}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateViridis",function(){return sequential_multi_viridis}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateInferno",function(){return viridis_inferno}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateMagma",function(){return viridis_magma}),__webpack_require__.d(color_schemes_namespaceObject,"interpolatePlasma",function(){return viridis_plasma}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateWarm",function(){return rainbow_warm}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateCool",function(){return rainbow_cool}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateCubehelixDefault",function(){return sequential_multi_cubehelix}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateBuGn",function(){return BuGn}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateBuPu",function(){return BuPu}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateGnBu",function(){return GnBu}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateOrRd",function(){return OrRd}),__webpack_require__.d(color_schemes_namespaceObject,"interpolatePuBuGn",function(){return PuBuGn}),__webpack_require__.d(color_schemes_namespaceObject,"interpolatePuBu",function(){return PuBu}),__webpack_require__.d(color_schemes_namespaceObject,"interpolatePuRd",function(){return PuRd}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateRdPu",function(){return RdPu}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateYlGnBu",function(){return YlGnBu}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateYlGn",function(){return YlGn}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateYlOrBr",function(){return YlOrBr}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateYlOrRd",function(){return YlOrRd}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateRainbow",function(){return sequential_multi_rainbow});var namespace_namespaceObject={};__webpack_require__.r(namespace_namespaceObject),__webpack_require__.d(namespace_namespaceObject,"UNIT_GLOBAL_NAMESPACE",function(){return UNIT_GLOBAL_NAMESPACE}),__webpack_require__.d(namespace_namespaceObject,"UNIT_LOCAL_NAMESPACE",function(){return UNIT_LOCAL_NAMESPACE}),__webpack_require__.d(namespace_namespaceObject,"LAYER_LOCAL_NAMESPACE",function(){return LAYER_LOCAL_NAMESPACE}),__webpack_require__.d(namespace_namespaceObject,"LAYER_GLOBAL_NAMESPACE",function(){return LAYER_GLOBAL_NAMESPACE}),__webpack_require__.d(namespace_namespaceObject,"GROUP_GLOBAL_NAMESPACE",function(){return GROUP_GLOBAL_NAMESPACE}),__webpack_require__.d(namespace_namespaceObject,"GROUP_LOCAL_NAMESPACE",function(){return GROUP_LOCAL_NAMESPACE}),__webpack_require__.d(namespace_namespaceObject,"CANVAS_LOCAL_NAMESPACE",function(){return CANVAS_LOCAL_NAMESPACE}),__webpack_require__.d(namespace_namespaceObject,"CANVAS_GLOBAL_NAMESPACE",function(){return CANVAS_GLOBAL_NAMESPACE});var actions_namespaceObject={};__webpack_require__.r(actions_namespaceObject),__webpack_require__.d(actions_namespaceObject,"DRAG",function(){return DRAG}),__webpack_require__.d(actions_namespaceObject,"HOVER",function(){return HOVER}),__webpack_require__.d(actions_namespaceObject,"SELECTIONDRAG",function(){return SELECTIONDRAG}),__webpack_require__.d(actions_namespaceObject,"CLICK",function(){return CLICK}),__webpack_require__.d(actions_namespaceObject,"LONGTOUCH",function(){return LONGTOUCH}),__webpack_require__.d(actions_namespaceObject,"TOUCHDRAG",function(){return TOUCHDRAG}),__webpack_require__.d(actions_namespaceObject,"ALL_ACTIONS",function(){return ALL_ACTIONS});var enums_selection_namespaceObject={};__webpack_require__.r(enums_selection_namespaceObject),__webpack_require__.d(enums_selection_namespaceObject,"SELECTION_NEW_ENTRY",function(){return SELECTION_NEW_ENTRY}),__webpack_require__.d(enums_selection_namespaceObject,"SELECTION_NEW_EXIT",function(){return SELECTION_NEW_EXIT}),__webpack_require__.d(enums_selection_namespaceObject,"SELECTION_NULL",function(){return SELECTION_NULL}),__webpack_require__.d(enums_selection_namespaceObject,"SELECTION_OLD_ENTRY",function(){return SELECTION_OLD_ENTRY}),__webpack_require__.d(enums_selection_namespaceObject,"SELECTION_OLD_EXIT",function(){return SELECTION_OLD_EXIT});var behaviours_namespaceObject={};__webpack_require__.r(behaviours_namespaceObject),__webpack_require__.d(behaviours_namespaceObject,"BRUSH",function(){return BRUSH}),__webpack_require__.d(behaviours_namespaceObject,"HIGHLIGHT",function(){return HIGHLIGHT}),__webpack_require__.d(behaviours_namespaceObject,"TOOLTIP",function(){return TOOLTIP}),__webpack_require__.d(behaviours_namespaceObject,"FILTER",function(){return FILTER}),__webpack_require__.d(behaviours_namespaceObject,"SELECT",function(){return SELECT});var behavioural_namespaceObject={};__webpack_require__.r(behavioural_namespaceObject),__webpack_require__.d(behavioural_namespaceObject,"HighlightBeahviour",function(){return highlight_HighlightBehaviour}),__webpack_require__.d(behavioural_namespaceObject,"BrushBehaviour",function(){return brush_BrushBehaviour}),__webpack_require__.d(behavioural_namespaceObject,"FilterBehaviour",function(){return filter_FilterBehaviour}),__webpack_require__.d(behavioural_namespaceObject,"SelectBehaviour",function(){return select_SelectBehaviour});var side_effects_namespaceObject={};__webpack_require__.r(side_effects_namespaceObject),__webpack_require__.d(side_effects_namespaceObject,"SelectionBox",function(){return selection_box}),__webpack_require__.d(side_effects_namespaceObject,"Tooltip",function(){return side_effects_tooltip_Tooltip}),__webpack_require__.d(side_effects_namespaceObject,"Crossline",function(){return crossline_Crossline}),__webpack_require__.d(side_effects_namespaceObject,"PlotHighlighter",function(){return plot_highlighter_PlotHighlighter}),__webpack_require__.d(side_effects_namespaceObject,"FilterEffect",function(){return FilterEffect}),__webpack_require__.d(side_effects_namespaceObject,"PersistentAnchors",function(){return persistent_anchors_PersistentAnchors}),__webpack_require__.d(side_effects_namespaceObject,"BrushAnchors",function(){return brush_anchors_BrushAnchors}),__webpack_require__.d(side_effects_namespaceObject,"AnchorEffect",function(){return anchors_AnchorEffect});var axis_orientation_namespaceObject={};__webpack_require__.r(axis_orientation_namespaceObject),__webpack_require__.d(axis_orientation_namespaceObject,"BOTTOM",function(){return axis_orientation_BOTTOM}),__webpack_require__.d(axis_orientation_namespaceObject,"TOP",function(){return axis_orientation_TOP}),__webpack_require__.d(axis_orientation_namespaceObject,"LEFT",function(){return axis_orientation_LEFT}),__webpack_require__.d(axis_orientation_namespaceObject,"RIGHT",function(){return axis_orientation_RIGHT}),__webpack_require__.d(axis_orientation_namespaceObject,"axisOrientationMap",function(){return axisOrientationMap});var scale_type_namespaceObject={};__webpack_require__.r(scale_type_namespaceObject),__webpack_require__.d(scale_type_namespaceObject,"LINEAR",function(){return LINEAR}),__webpack_require__.d(scale_type_namespaceObject,"BAND",function(){return BAND}),__webpack_require__.d(scale_type_namespaceObject,"TIME",function(){return TIME}),__webpack_require__.d(scale_type_namespaceObject,"COLOR",function(){return scale_type_COLOR}),__webpack_require__.d(scale_type_namespaceObject,"ORDINAL",function(){return ORDINAL}),__webpack_require__.d(scale_type_namespaceObject,"QUANTIZE",function(){return QUANTIZE}),__webpack_require__.d(scale_type_namespaceObject,"QUANTILE",function(){return QUANTILE}),__webpack_require__.d(scale_type_namespaceObject,"LOG",function(){return LOG}),__webpack_require__.d(scale_type_namespaceObject,"POW",function(){return POW}),__webpack_require__.d(scale_type_namespaceObject,"IDENTITY",function(){return scale_type_IDENTITY}),__webpack_require__.d(scale_type_namespaceObject,"SEQUENTIAL",function(){return SEQUENTIAL}),__webpack_require__.d(scale_type_namespaceObject,"THRESHOLD",function(){return THRESHOLD});var layer_types_namespaceObject={};__webpack_require__.r(layer_types_namespaceObject),__webpack_require__.d(layer_types_namespaceObject,"AREA_LAYER",function(){return layer_types_AREA_LAYER}),__webpack_require__.d(layer_types_namespaceObject,"ARC_LAYER",function(){return layer_types_ARC_LAYER}),__webpack_require__.d(layer_types_namespaceObject,"LINE_LAYER",function(){return layer_types_LINE_LAYER}),__webpack_require__.d(layer_types_namespaceObject,"TEXT_LAYER",function(){return layer_types_TEXT_LAYER}),__webpack_require__.d(layer_types_namespaceObject,"POINT_LAYER",function(){return layer_types_POINT_LAYER}),__webpack_require__.d(layer_types_namespaceObject,"BAR_LAYER",function(){return layer_types_BAR_LAYER}),__webpack_require__.d(layer_types_namespaceObject,"TICK_LAYER",function(){return layer_types_TICK_LAYER}),__webpack_require__.d(layer_types_namespaceObject,"SIMPLE_LAYER",function(){return layer_types_SIMPLE_LAYER}),__webpack_require__.d(layer_types_namespaceObject,"BASE_LAYER",function(){return layer_types_BASE_LAYER});var firebolt_behavioural_namespaceObject={};__webpack_require__.r(firebolt_behavioural_namespaceObject),__webpack_require__.d(firebolt_behavioural_namespaceObject,"SelectBehaviour",function(){return behavioural_select_SelectBehaviour});var firebolt_side_effects_namespaceObject={};__webpack_require__.r(firebolt_side_effects_namespaceObject),__webpack_require__.d(firebolt_side_effects_namespaceObject,"SelectionBox",function(){return side_effects_selection_box}),__webpack_require__.d(firebolt_side_effects_namespaceObject,"LegendHighlighter",function(){return legend_highlighter_LegendHighlighter});var operators_namespaceObject={};__webpack_require__.r(operators_namespaceObject),__webpack_require__.d(operators_namespaceObject,"share",function(){return operators_share}),__webpack_require__.d(operators_namespaceObject,"html",function(){return operators_html});var dist_datamodel=__webpack_require__(0),datamodel_default=__webpack_require__.n(dist_datamodel),ascending=function(a,b){return ab?1:a>=b?0:NaN},bisector=function(compare){return 1===compare.length&&(compare=function ascendingComparator(f){return function(d,x){return ascending(f(d),x)}}(compare)),{left:function left(a,x,lo,hi){for(null==lo&&(lo=0),null==hi&&(hi=a.length);lo>>1;compare(a[mid],x)<0?lo=mid+1:hi=mid}return lo},right:function right(a,x,lo,hi){for(null==lo&&(lo=0),null==hi&&(hi=a.length);lo>>1;compare(a[mid],x)>0?hi=mid:lo=mid+1}return lo}}};var ascendingBisect=bisector(ascending),bisectRight=ascendingBisect.right,bisect=(ascendingBisect.left,bisectRight);var number=function(x){return null===x?NaN:+x},array_array=Array.prototype,src_range=(array_array.slice,array_array.map,function(start,stop,step){start=+start,stop=+stop,step=(n=arguments.length)<2?(stop=start,start=0,1):n<3?1:+step;for(var i=-1,n=0|Math.max(0,Math.ceil((stop-start)/step)),range=new Array(n);++i0)return[start];if((reverse=stop0)for(start=Math.ceil(start/step),stop=Math.floor(stop/step),ticks=new Array(n=Math.ceil(stop-start+1));++i=0?(error>=e10?10:error>=e5?5:error>=e2?2:1)*Math.pow(10,power):-Math.pow(10,-power)/(error>=e10?10:error>=e5?5:error>=e2?2:1)}function tickStep(start,stop,count){var step0=Math.abs(stop-start)/Math.max(0,count),step1=Math.pow(10,Math.floor(Math.log(step0)/Math.LN10)),error=step0/step1;return error>=e10?step1*=10:error>=e5?step1*=5:error>=e2&&(step1*=2),stop=1)return+valueof(values[n-1],n-1,values);var n,i=(n-1)*p,i0=Math.floor(i),value0=+valueof(values[i0],i0,values);return value0+(+valueof(values[i0+1],i0+1,values)-value0)*(i-i0)}};function map_Map(){}function map_map(object,f){var map=new map_Map;if(object instanceof map_Map)object.each(function(value,key){map.set(key,value)});else if(Array.isArray(object)){var o,i=-1,n=object.length;if(null==f)for(;++i=keys.length)return null!=_sortValues&&array.sort(_sortValues),null!=_rollup?_rollup(array):array;for(var keyValue,value,values,i=-1,n=array.length,key=keys[depth++],valuesByKey=src_map(),result=createResult();++ikeys.length)return map;var array,sortKey=_sortKeys[depth-1];return null!=_rollup&&depth>=keys.length?array=map.entries():(array=[],map.each(function(v,k){array.push({key:k,values:_entries(v,depth)})})),null!=sortKey?array.sort(function(a,b){return sortKey(a.key,b.key)}):array}(apply(array,0,createMap,setMap),0)},key:function key(d){return keys.push(d),nest},sortKeys:function sortKeys(order){return _sortKeys[keys.length-1]=order,nest},sortValues:function sortValues(order){return _sortValues=order,nest},rollup:function rollup(f){return _rollup=f,nest}}};function createObject(){return{}}function setObject(object,key,value){object[key]=value}function createMap(){return src_map()}function setMap(map,key,value){map.set(key,value)}function set_Set(){}var proto=src_map.prototype;function set_set(object,f){var set=new set_Set;if(object instanceof set_Set)object.each(function(value){set.add(value)});else if(object){var i=-1,n=object.length;if(null==f)for(;++i1?+r1:lo,reverse=range[1]range[1-reverse]))return a=Math.max(0,getClosestIndexOf(values,lo)),hiIndex=getClosestIndexOf(values,hi),b=lo===hi?a:Math.max(a,hiIndex-1),reverse&&(t=a,a=n-b,b=n-t),a>b?void 0:domain().slice(a,b+1)},scale.invert=function(r0,r1){var a,t,lo=+r0,hi=arguments.length>1?+r1:lo,reverse=range[1]range[1-reverse]))return a=Math.max(0,getClosestIndexOf(values,lo,"left")),domain()[reverse?n-a:a]},rescale()}function getClosestIndexOf(arr,value,side){for(var highVal,mid,d1,low=0,high=arr.length-1;lowvalue?0===high?high:"left"===side?high-1:high:high===arr.length-1?high:"left"===side?high:high+1:high}var define=function(constructor,factory,prototype){constructor.prototype=factory.prototype=prototype,prototype.constructor=constructor};function extend(parent,definition){var prototype=Object.create(parent.prototype);for(var key in definition)prototype[key]=definition[key];return prototype}function Color(){}var reI="\\s*([+-]?\\d+)\\s*",reN="\\s*([+-]?\\d*\\.?\\d+(?:[eE][+-]?\\d+)?)\\s*",reP="\\s*([+-]?\\d*\\.?\\d+(?:[eE][+-]?\\d+)?)%\\s*",reHex3=/^#([0-9a-f]{3})$/,reHex6=/^#([0-9a-f]{6})$/,reRgbInteger=new RegExp("^rgb\\("+[reI,reI,reI]+"\\)$"),reRgbPercent=new RegExp("^rgb\\("+[reP,reP,reP]+"\\)$"),reRgbaInteger=new RegExp("^rgba\\("+[reI,reI,reI,reN]+"\\)$"),reRgbaPercent=new RegExp("^rgba\\("+[reP,reP,reP,reN]+"\\)$"),reHslPercent=new RegExp("^hsl\\("+[reN,reP,reP]+"\\)$"),reHslaPercent=new RegExp("^hsla\\("+[reN,reP,reP,reN]+"\\)$"),named={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074};function color_color(format){var m;return format=(format+"").trim().toLowerCase(),(m=reHex3.exec(format))?new Rgb((m=parseInt(m[1],16))>>8&15|m>>4&240,m>>4&15|240&m,(15&m)<<4|15&m,1):(m=reHex6.exec(format))?rgbn(parseInt(m[1],16)):(m=reRgbInteger.exec(format))?new Rgb(m[1],m[2],m[3],1):(m=reRgbPercent.exec(format))?new Rgb(255*m[1]/100,255*m[2]/100,255*m[3]/100,1):(m=reRgbaInteger.exec(format))?rgba(m[1],m[2],m[3],m[4]):(m=reRgbaPercent.exec(format))?rgba(255*m[1]/100,255*m[2]/100,255*m[3]/100,m[4]):(m=reHslPercent.exec(format))?hsla(m[1],m[2]/100,m[3]/100,1):(m=reHslaPercent.exec(format))?hsla(m[1],m[2]/100,m[3]/100,m[4]):named.hasOwnProperty(format)?rgbn(named[format]):"transparent"===format?new Rgb(NaN,NaN,NaN,0):null}function rgbn(n){return new Rgb(n>>16&255,n>>8&255,255&n,1)}function rgba(r,g,b,a){return a<=0&&(r=g=b=NaN),new Rgb(r,g,b,a)}function rgbConvert(o){return o instanceof Color||(o=color_color(o)),o?new Rgb((o=o.rgb()).r,o.g,o.b,o.opacity):new Rgb}function color_rgb(r,g,b,opacity){return 1===arguments.length?rgbConvert(r):new Rgb(r,g,b,null==opacity?1:opacity)}function Rgb(r,g,b,opacity){this.r=+r,this.g=+g,this.b=+b,this.opacity=+opacity}function _hex(value){return((value=Math.max(0,Math.min(255,Math.round(value)||0)))<16?"0":"")+value.toString(16)}function hsla(h,s,l,a){return a<=0?h=s=l=NaN:l<=0||l>=1?h=s=NaN:s<=0&&(h=NaN),new Hsl(h,s,l,a)}function hsl(h,s,l,opacity){return 1===arguments.length?function hslConvert(o){if(o instanceof Hsl)return new Hsl(o.h,o.s,o.l,o.opacity);if(o instanceof Color||(o=color_color(o)),!o)return new Hsl;if(o instanceof Hsl)return o;var r=(o=o.rgb()).r/255,g=o.g/255,b=o.b/255,min=Math.min(r,g,b),max=Math.max(r,g,b),h=NaN,s=max-min,l=(max+min)/2;return s?(h=r===max?(g-b)/s+6*(g0&&l<1?0:h,new Hsl(h,s,l,o.opacity)}(h):new Hsl(h,s,l,null==opacity?1:opacity)}function Hsl(h,s,l,opacity){this.h=+h,this.s=+s,this.l=+l,this.opacity=+opacity}function hsl2rgb(h,m1,m2){return 255*(h<60?m1+(m2-m1)*h/60:h<180?m2:h<240?m1+(m2-m1)*(240-h)/60:m1)}define(Color,color_color,{displayable:function displayable(){return this.rgb().displayable()},hex:function hex(){return this.rgb().hex()},toString:function toString(){return this.rgb()+""}}),define(Rgb,color_rgb,extend(Color,{brighter:function brighter(k){return k=null==k?1/.7:Math.pow(1/.7,k),new Rgb(this.r*k,this.g*k,this.b*k,this.opacity)},darker:function darker(k){return k=null==k?.7:Math.pow(.7,k),new Rgb(this.r*k,this.g*k,this.b*k,this.opacity)},rgb:function rgb(){return this},displayable:function displayable(){return 0<=this.r&&this.r<=255&&0<=this.g&&this.g<=255&&0<=this.b&&this.b<=255&&0<=this.opacity&&this.opacity<=1},hex:function hex(){return"#"+_hex(this.r)+_hex(this.g)+_hex(this.b)},toString:function toString(){var a=this.opacity;return(1===(a=isNaN(a)?1:Math.max(0,Math.min(1,a)))?"rgb(":"rgba(")+Math.max(0,Math.min(255,Math.round(this.r)||0))+", "+Math.max(0,Math.min(255,Math.round(this.g)||0))+", "+Math.max(0,Math.min(255,Math.round(this.b)||0))+(1===a?")":", "+a+")")}})),define(Hsl,hsl,extend(Color,{brighter:function brighter(k){return k=null==k?1/.7:Math.pow(1/.7,k),new Hsl(this.h,this.s,this.l*k,this.opacity)},darker:function darker(k){return k=null==k?.7:Math.pow(.7,k),new Hsl(this.h,this.s,this.l*k,this.opacity)},rgb:function rgb(){var h=this.h%360+360*(this.h<0),s=isNaN(h)||isNaN(this.s)?0:this.s,l=this.l,m2=l+(l<.5?l:1-l)*s,m1=2*l-m2;return new Rgb(hsl2rgb(h>=240?h-240:h+120,m1,m2),hsl2rgb(h,m1,m2),hsl2rgb(h<120?h+240:h-120,m1,m2),this.opacity)},displayable:function displayable(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1}}));var deg2rad=Math.PI/180,rad2deg=180/Math.PI,Xn=.96422,Yn=1,Zn=.82521,lab_t0=4/29,lab_t1=6/29,t2=3*lab_t1*lab_t1,t3=lab_t1*lab_t1*lab_t1;function labConvert(o){if(o instanceof Lab)return new Lab(o.l,o.a,o.b,o.opacity);if(o instanceof Hcl){if(isNaN(o.h))return new Lab(o.l,0,0,o.opacity);var h=o.h*deg2rad;return new Lab(o.l,Math.cos(h)*o.c,Math.sin(h)*o.c,o.opacity)}o instanceof Rgb||(o=rgbConvert(o));var x,z,r=rgb2lrgb(o.r),g=rgb2lrgb(o.g),b=rgb2lrgb(o.b),y=xyz2lab((.2225045*r+.7168786*g+.0606169*b)/Yn);return r===g&&g===b?x=z=y:(x=xyz2lab((.4360747*r+.3850649*g+.1430804*b)/Xn),z=xyz2lab((.0139322*r+.0971045*g+.7141733*b)/Zn)),new Lab(116*y-16,500*(x-y),200*(y-z),o.opacity)}function lab(l,a,b,opacity){return 1===arguments.length?labConvert(l):new Lab(l,a,b,null==opacity?1:opacity)}function Lab(l,a,b,opacity){this.l=+l,this.a=+a,this.b=+b,this.opacity=+opacity}function xyz2lab(t){return t>t3?Math.pow(t,1/3):t/t2+lab_t0}function lab2xyz(t){return t>lab_t1?t*t*t:t2*(t-lab_t0)}function lrgb2rgb(x){return 255*(x<=.0031308?12.92*x:1.055*Math.pow(x,1/2.4)-.055)}function rgb2lrgb(x){return(x/=255)<=.04045?x/12.92:Math.pow((x+.055)/1.055,2.4)}function hclConvert(o){if(o instanceof Hcl)return new Hcl(o.h,o.c,o.l,o.opacity);if(o instanceof Lab||(o=labConvert(o)),0===o.a&&0===o.b)return new Hcl(NaN,0,o.l,o.opacity);var h=Math.atan2(o.b,o.a)*rad2deg;return new Hcl(h<0?h+360:h,Math.sqrt(o.a*o.a+o.b*o.b),o.l,o.opacity)}function hcl(h,c,l,opacity){return 1===arguments.length?hclConvert(h):new Hcl(h,c,l,null==opacity?1:opacity)}function Hcl(h,c,l,opacity){this.h=+h,this.c=+c,this.l=+l,this.opacity=+opacity}define(Lab,lab,extend(Color,{brighter:function brighter(k){return new Lab(this.l+18*(null==k?1:k),this.a,this.b,this.opacity)},darker:function darker(k){return new Lab(this.l-18*(null==k?1:k),this.a,this.b,this.opacity)},rgb:function rgb(){var y=(this.l+16)/116,x=isNaN(this.a)?y:y+this.a/500,z=isNaN(this.b)?y:y-this.b/200;return new Rgb(lrgb2rgb(3.1338561*(x=Xn*lab2xyz(x))-1.6168667*(y=Yn*lab2xyz(y))-.4906146*(z=Zn*lab2xyz(z))),lrgb2rgb(-.9787684*x+1.9161415*y+.033454*z),lrgb2rgb(.0719453*x-.2289914*y+1.4052427*z),this.opacity)}})),define(Hcl,hcl,extend(Color,{brighter:function brighter(k){return new Hcl(this.h,this.c,this.l+18*(null==k?1:k),this.opacity)},darker:function darker(k){return new Hcl(this.h,this.c,this.l-18*(null==k?1:k),this.opacity)},rgb:function rgb(){return labConvert(this).rgb()}}));var A=-.14861,B=1.78277,C=-.29227,cubehelix_D=-.90649,E=1.97294,ED=E*cubehelix_D,EB=E*B,BC_DA=B*C-cubehelix_D*A;function cubehelix_cubehelix(h,s,l,opacity){return 1===arguments.length?function cubehelixConvert(o){if(o instanceof Cubehelix)return new Cubehelix(o.h,o.s,o.l,o.opacity);o instanceof Rgb||(o=rgbConvert(o));var r=o.r/255,g=o.g/255,b=o.b/255,l=(BC_DA*b+ED*r-EB*g)/(BC_DA+ED-EB),bl=b-l,k=(E*(g-l)-C*bl)/cubehelix_D,s=Math.sqrt(k*k+bl*bl)/(E*l*(1-l)),h=s?Math.atan2(k,bl)*rad2deg-120:NaN;return new Cubehelix(h<0?h+360:h,s,l,o.opacity)}(h):new Cubehelix(h,s,l,null==opacity?1:opacity)}function Cubehelix(h,s,l,opacity){this.h=+h,this.s=+s,this.l=+l,this.opacity=+opacity}function basis(t1,v0,v1,v2,v3){var t2=t1*t1,t3=t2*t1;return((1-3*t1+3*t2-t3)*v0+(4-6*t2+3*t3)*v1+(1+3*t1+3*t2-3*t3)*v2+t3*v3)/6}define(Cubehelix,cubehelix_cubehelix,extend(Color,{brighter:function brighter(k){return k=null==k?1/.7:Math.pow(1/.7,k),new Cubehelix(this.h,this.s,this.l*k,this.opacity)},darker:function darker(k){return k=null==k?.7:Math.pow(.7,k),new Cubehelix(this.h,this.s,this.l*k,this.opacity)},rgb:function rgb(){var h=isNaN(this.h)?0:(this.h+120)*deg2rad,l=+this.l,a=isNaN(this.s)?0:this.s*l*(1-l),cosh=Math.cos(h),sinh=Math.sin(h);return new Rgb(255*(l+a*(A*cosh+B*sinh)),255*(l+a*(C*cosh+cubehelix_D*sinh)),255*(l+a*(E*cosh)),this.opacity)}}));var src_constant=function(x){return function(){return x}};function linear(a,d){return function(t){return a+t*d}}function color_hue(a,b){var d=b-a;return d?linear(a,d>180||d<-180?d-360*Math.round(d/360):d):src_constant(isNaN(a)?b:a)}function gamma(y){return 1==(y=+y)?nogamma:function(a,b){return b-a?function exponential(a,b,y){return a=Math.pow(a,y),b=Math.pow(b,y)-a,y=1/y,function(t){return Math.pow(a+t*b,y)}}(a,b,y):src_constant(isNaN(a)?b:a)}}function nogamma(a,b){var d=b-a;return d?linear(a,d):src_constant(isNaN(a)?b:a)}var src_rgb=function rgbGamma(y){var color=gamma(y);function rgb(start,end){var r=color((start=color_rgb(start)).r,(end=color_rgb(end)).r),g=color(start.g,end.g),b=color(start.b,end.b),opacity=nogamma(start.opacity,end.opacity);return function(t){return start.r=r(t),start.g=g(t),start.b=b(t),start.opacity=opacity(t),start+""}}return rgb.gamma=rgbGamma,rgb}(1);function rgbSpline(spline){return function(colors){var i,color,n=colors.length,r=new Array(n),g=new Array(n),b=new Array(n);for(i=0;i=1?(t=1,n-1):Math.floor(t*n),v1=values[i],v2=values[i+1],v0=i>0?values[i-1]:2*v1-v2,v3=ibi&&(bs=b.slice(bi,bs),s[i]?s[i]+=bs:s[++i]=bs),(am=am[0])===(bm=bm[0])?s[i]?s[i]+=bm:s[++i]=bm:(s[++i]=null,q.push({i:i,x:src_number(am,bm)})),bi=reB.lastIndex;return bi180?b+=360:b-a>180&&(a+=360),q.push({i:s.push(pop(s)+"rotate(",null,degParen)-2,x:src_number(a,b)})):b&&s.push(pop(s)+"rotate("+b+degParen)}(a.rotate,b.rotate,s,q),function skewX(a,b,s,q){a!==b?q.push({i:s.push(pop(s)+"skewX(",null,degParen)-2,x:src_number(a,b)}):b&&s.push(pop(s)+"skewX("+b+degParen)}(a.skewX,b.skewX,s,q),function scale(xa,ya,xb,yb,s,q){if(xa!==xb||ya!==yb){var i=s.push(pop(s)+"scale(",null,",",null,")");q.push({i:i-4,x:src_number(xa,xb)},{i:i-2,x:src_number(ya,yb)})}else 1===xb&&1===yb||s.push(pop(s)+"scale("+xb+","+yb+")")}(a.scaleX,a.scaleY,b.scaleX,b.scaleY,s,q),a=b=null,function(t){for(var o,i=-1,n=q.length;++i2?polymap:bimap,output=input=null,scale}function scale(x){return(output||(output=piecewise(domain,range,clamp?function deinterpolateClamp(deinterpolate){return function(a,b){var d=deinterpolate(a=+a,b=+b);return function(x){return x<=a?0:x>=b?1:d(x)}}}(deinterpolate):deinterpolate,interpolate)))(+x)}return scale.invert=function(y){return(input||(input=piecewise(range,domain,deinterpolateLinear,clamp?function reinterpolateClamp(reinterpolate){return function(a,b){var r=reinterpolate(a=+a,b=+b);return function(t){return t<=0?a:t>=1?b:r(t)}}}(reinterpolate):reinterpolate)))(+y)},scale.domain=function(_){return arguments.length?(domain=src_array_map.call(_,d3_scale_src_number),rescale()):domain.slice()},scale.range=function(_){return arguments.length?(range=array_slice.call(_),rescale()):range.slice()},scale.rangeRound=function(_){return range=array_slice.call(_),interpolate=src_round,rescale()},scale.clamp=function(_){return arguments.length?(clamp=!!_,rescale()):clamp},scale.interpolate=function(_){return arguments.length?(interpolate=_,rescale()):interpolate},rescale()}var formatDecimal=function(x,p){if((i=(x=p?x.toExponential(p-1):x.toExponential()).indexOf("e"))<0)return null;var i,coefficient=x.slice(0,i);return[coefficient.length>1?coefficient[0]+coefficient.slice(2):coefficient,+x.slice(i+1)]},src_exponent=function(x){return(x=formatDecimal(Math.abs(x)))?x[1]:NaN},re=/^(?:(.)?([<>=^]))?([+\-( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?(~)?([a-z%])?$/i;function formatSpecifier(specifier){return new FormatSpecifier(specifier)}function FormatSpecifier(specifier){if(!(match=re.exec(specifier)))throw new Error("invalid format: "+specifier);var match;this.fill=match[1]||" ",this.align=match[2]||">",this.sign=match[3]||"-",this.symbol=match[4]||"",this.zero=!!match[5],this.width=match[6]&&+match[6],this.comma=!!match[7],this.precision=match[8]&&+match[8].slice(1),this.trim=!!match[9],this.type=match[10]||""}formatSpecifier.prototype=FormatSpecifier.prototype,FormatSpecifier.prototype.toString=function(){return this.fill+this.align+this.sign+this.symbol+(this.zero?"0":"")+(null==this.width?"":Math.max(1,0|this.width))+(this.comma?",":"")+(null==this.precision?"":"."+Math.max(0,0|this.precision))+(this.trim?"~":"")+this.type};var prefixExponent,defaultLocale_locale,defaultLocale_format,defaultLocale_formatPrefix,formatTrim=function(s){out:for(var i1,n=s.length,i=1,i0=-1;i0){if(!+s[i])break out;i0=0}}return i0>0?s.slice(0,i0)+s.slice(i1+1):s},formatRounded=function(x,p){var d=formatDecimal(x,p);if(!d)return x+"";var coefficient=d[0],exponent=d[1];return exponent<0?"0."+new Array(-exponent).join("0")+coefficient:coefficient.length>exponent+1?coefficient.slice(0,exponent+1)+"."+coefficient.slice(exponent+1):coefficient+new Array(exponent-coefficient.length+2).join("0")},formatTypes={"%":function _(x,p){return(100*x).toFixed(p)},b:function b(x){return Math.round(x).toString(2)},c:function c(x){return x+""},d:function d(x){return Math.round(x).toString(10)},e:function e(x,p){return x.toExponential(p)},f:function f(x,p){return x.toFixed(p)},g:function g(x,p){return x.toPrecision(p)},o:function o(x){return Math.round(x).toString(8)},p:function p(x,_p){return formatRounded(100*x,_p)},r:formatRounded,s:function(x,p){var d=formatDecimal(x,p);if(!d)return x+"";var coefficient=d[0],exponent=d[1],i=exponent-(prefixExponent=3*Math.max(-8,Math.min(8,Math.floor(exponent/3))))+1,n=coefficient.length;return i===n?coefficient:i>n?coefficient+new Array(i-n+1).join("0"):i>0?coefficient.slice(0,i)+"."+coefficient.slice(i):"0."+new Array(1-i).join("0")+formatDecimal(x,Math.max(0,p+i-1))[0]},X:function X(x){return Math.round(x).toString(16).toUpperCase()},x:function x(_x){return Math.round(_x).toString(16)}},src_identity=function(x){return x},prefixes=["y","z","a","f","p","n","µ","m","","k","M","G","T","P","E","Z","Y"],src_locale=function(locale){var group=locale.grouping&&locale.thousands?function(grouping,thousands){return function(value,width){for(var i=value.length,t=[],j=0,g=grouping[0],length=0;i>0&&g>0&&(length+g+1>width&&(g=Math.max(1,width-length)),t.push(value.substring(i-=g,i+g)),!((length+=g+1)>width));)g=grouping[j=(j+1)%grouping.length];return t.reverse().join(thousands)}}(locale.grouping,locale.thousands):src_identity,currency=locale.currency,decimal=locale.decimal,numerals=locale.numerals?function(numerals){return function(value){return value.replace(/[0-9]/g,function(i){return numerals[+i]})}}(locale.numerals):src_identity,percent=locale.percent||"%";function newFormat(specifier){var fill=(specifier=formatSpecifier(specifier)).fill,align=specifier.align,sign=specifier.sign,symbol=specifier.symbol,zero=specifier.zero,width=specifier.width,comma=specifier.comma,precision=specifier.precision,trim=specifier.trim,type=specifier.type;"n"===type?(comma=!0,type="g"):formatTypes[type]||(null==precision&&(precision=12),trim=!0,type="g"),(zero||"0"===fill&&"="===align)&&(zero=!0,fill="0",align="=");var prefix="$"===symbol?currency[0]:"#"===symbol&&/[boxX]/.test(type)?"0"+type.toLowerCase():"",suffix="$"===symbol?currency[1]:/[%p]/.test(type)?percent:"",formatType=formatTypes[type],maybeSuffix=/[defgprs%]/.test(type);function format(value){var i,n,c,valuePrefix=prefix,valueSuffix=suffix;if("c"===type)valueSuffix=formatType(value)+valueSuffix,value="";else{var valueNegative=(value=+value)<0;if(value=formatType(Math.abs(value),precision),trim&&(value=formatTrim(value)),valueNegative&&0==+value&&(valueNegative=!1),valuePrefix=(valueNegative?"("===sign?sign:"-":"-"===sign||"("===sign?"":sign)+valuePrefix,valueSuffix=("s"===type?prefixes[8+prefixExponent/3]:"")+valueSuffix+(valueNegative&&"("===sign?")":""),maybeSuffix)for(i=-1,n=value.length;++i(c=value.charCodeAt(i))||c>57){valueSuffix=(46===c?decimal+value.slice(i+1):value.slice(i))+valueSuffix,value=value.slice(0,i);break}}comma&&!zero&&(value=group(value,1/0));var length=valuePrefix.length+value.length+valueSuffix.length,padding=length>1)+valuePrefix+value+valueSuffix+padding.slice(length);break;default:value=padding+valuePrefix+value+valueSuffix}return numerals(value)}return precision=null==precision?6:/[gprs]/.test(type)?Math.max(1,Math.min(21,precision)):Math.max(0,Math.min(20,precision)),format.toString=function(){return specifier+""},format}return{format:newFormat,formatPrefix:function formatPrefix(specifier,value){var f=newFormat(((specifier=formatSpecifier(specifier)).type="f",specifier)),e=3*Math.max(-8,Math.min(8,Math.floor(src_exponent(value)/3))),k=Math.pow(10,-e),prefix=prefixes[8+e/3];return function(value){return f(k*value)+prefix}}}};!function defaultLocale(definition){return defaultLocale_locale=src_locale(definition),defaultLocale_format=defaultLocale_locale.format,defaultLocale_formatPrefix=defaultLocale_locale.formatPrefix,defaultLocale_locale}({decimal:".",thousands:",",grouping:[3],currency:["$",""]});var src_tickFormat=function(domain,count,specifier){var precision,start=domain[0],stop=domain[domain.length-1],step=tickStep(start,stop,null==count?10:count);switch((specifier=formatSpecifier(null==specifier?",f":specifier)).type){case"s":var value=Math.max(Math.abs(start),Math.abs(stop));return null!=specifier.precision||isNaN(precision=function(step,value){return Math.max(0,3*Math.max(-8,Math.min(8,Math.floor(src_exponent(value)/3)))-src_exponent(Math.abs(step)))}(step,value))||(specifier.precision=precision),defaultLocale_formatPrefix(specifier,value);case"":case"e":case"g":case"p":case"r":null!=specifier.precision||isNaN(precision=function(step,max){return step=Math.abs(step),max=Math.abs(max)-step,Math.max(0,src_exponent(max)-src_exponent(step))+1}(step,Math.max(Math.abs(start),Math.abs(stop))))||(specifier.precision=precision-("e"===specifier.type));break;case"f":case"%":null!=specifier.precision||isNaN(precision=function(step){return Math.max(0,-src_exponent(Math.abs(step)))}(step))||(specifier.precision=precision-2*("%"===specifier.type))}return defaultLocale_format(specifier)};function linearish(scale){var domain=scale.domain;return scale.ticks=function(count){var d=domain();return src_ticks(d[0],d[d.length-1],null==count?10:count)},scale.tickFormat=function(count,specifier){return src_tickFormat(domain(),count,specifier)},scale.nice=function(count){null==count&&(count=10);var step,d=domain(),i0=0,i1=d.length-1,start=d[i0],stop=d[i1];return stop0?step=tickIncrement(start=Math.floor(start/step)*step,stop=Math.ceil(stop/step)*step,count):step<0&&(step=tickIncrement(start=Math.ceil(start*step)/step,stop=Math.floor(stop*step)/step,count)),step>0?(d[i0]=Math.floor(start/step)*step,d[i1]=Math.ceil(stop/step)*step,domain(d)):step<0&&(d[i0]=Math.ceil(start*step)/step,d[i1]=Math.floor(stop*step)/step,domain(d)),scale},scale}function linear_linear(){var scale=continuous(deinterpolateLinear,src_number);return scale.copy=function(){return copy(scale,linear_linear())},linearish(scale)}function identity_identity(){var domain=[0,1];function scale(x){return+x}return scale.invert=scale,scale.domain=scale.range=function(_){return arguments.length?(domain=src_array_map.call(_,d3_scale_src_number),scale):domain.slice()},scale.copy=function(){return identity_identity().domain(domain)},linearish(scale)}var nice=function(domain,interval){var t,i0=0,i1=(domain=domain.slice()).length-1,x0=domain[i0],x1=domain[i1];return x10){for(;iv)break;z.push(t)}}else for(;i=1;--k)if(!((t=p*k)v)break;z.push(t)}}else z=src_ticks(i,j,Math.min(j-i,n)).map(pows);return r?z.reverse():z},scale.tickFormat=function(count,specifier){if(null==specifier&&(specifier=10===base?".0e":","),"function"!=typeof specifier&&(specifier=defaultLocale_format(specifier)),count===1/0)return specifier;null==count&&(count=10);var k=Math.max(1,base*count/scale.ticks().length);return function(d){var i=d/pows(Math.round(logs(d)));return i*base0?thresholds[i-1]:domain[0],i=n?[domain[n-1],x1]:[domain[i-1],domain[i]]},scale.copy=function(){return quantize_quantize().domain([x0,x1]).range(range)},linearish(scale)}function threshold_threshold(){var domain=[.5],range=[0,1],n=1;function scale(x){if(x<=x)return range[bisect(domain,x,0,n)]}return scale.domain=function(_){return arguments.length?(domain=array_slice.call(_),n=Math.min(domain.length,range.length-1),scale):domain.slice()},scale.range=function(_){return arguments.length?(range=array_slice.call(_),n=Math.min(domain.length,range.length-1),scale):range.slice()},scale.invertExtent=function(y){var i=range.indexOf(y);return[domain[i-1],domain[i]]},scale.copy=function(){return threshold_threshold().domain(domain).range(range)},scale}var interval_t0=new Date,interval_t1=new Date;function newInterval(floori,offseti,count,field){function interval(date){return floori(date=new Date(+date)),date}return interval.floor=interval,interval.ceil=function(date){return floori(date=new Date(date-1)),offseti(date,1),floori(date),date},interval.round=function(date){var d0=interval(date),d1=interval.ceil(date);return date-d00))return range;do{range.push(previous=new Date(+start)),offseti(start,step),floori(start)}while(previous=date)for(;floori(date),!test(date);)date.setTime(date-1)},function(date,step){if(date>=date)if(step<0)for(;++step<=0;)for(;offseti(date,-1),!test(date););else for(;--step>=0;)for(;offseti(date,1),!test(date););})},count&&(interval.count=function(start,end){return interval_t0.setTime(+start),interval_t1.setTime(+end),floori(interval_t0),floori(interval_t1),Math.floor(count(interval_t0,interval_t1))},interval.every=function(step){return step=Math.floor(step),isFinite(step)&&step>0?step>1?interval.filter(field?function(d){return field(d)%step==0}:function(d){return interval.count(0,d)%step==0}):interval:null}),interval}var millisecond_millisecond=newInterval(function(){},function(date,step){date.setTime(+date+step)},function(start,end){return end-start});millisecond_millisecond.every=function(k){return k=Math.floor(k),isFinite(k)&&k>0?k>1?newInterval(function(date){date.setTime(Math.floor(date/k)*k)},function(date,step){date.setTime(+date+step*k)},function(start,end){return(end-start)/k}):millisecond_millisecond:null};var src_millisecond=millisecond_millisecond,durationMinute=(millisecond_millisecond.range,6e4),durationWeek=6048e5,second_second=newInterval(function(date){date.setTime(date-date.getMilliseconds())},function(date,step){date.setTime(+date+1e3*step)},function(start,end){return(end-start)/1e3},function(date){return date.getUTCSeconds()}),src_second=second_second,minute_minute=(second_second.range,newInterval(function(date){date.setTime(date-date.getMilliseconds()-1e3*date.getSeconds())},function(date,step){date.setTime(+date+step*durationMinute)},function(start,end){return(end-start)/durationMinute},function(date){return date.getMinutes()})),src_minute=minute_minute,hour_hour=(minute_minute.range,newInterval(function(date){date.setTime(date-date.getMilliseconds()-1e3*date.getSeconds()-date.getMinutes()*durationMinute)},function(date,step){date.setTime(+date+36e5*step)},function(start,end){return(end-start)/36e5},function(date){return date.getHours()})),src_hour=hour_hour,day_day=(hour_hour.range,newInterval(function(date){date.setHours(0,0,0,0)},function(date,step){date.setDate(date.getDate()+step)},function(start,end){return(end-start-(end.getTimezoneOffset()-start.getTimezoneOffset())*durationMinute)/864e5},function(date){return date.getDate()-1})),src_day=day_day;day_day.range;function weekday(i){return newInterval(function(date){date.setDate(date.getDate()-(date.getDay()+7-i)%7),date.setHours(0,0,0,0)},function(date,step){date.setDate(date.getDate()+7*step)},function(start,end){return(end-start-(end.getTimezoneOffset()-start.getTimezoneOffset())*durationMinute)/durationWeek})}var sunday=weekday(0),monday=weekday(1),tuesday=weekday(2),wednesday=weekday(3),thursday=weekday(4),friday=weekday(5),saturday=weekday(6),month_month=(sunday.range,monday.range,tuesday.range,wednesday.range,thursday.range,friday.range,saturday.range,newInterval(function(date){date.setDate(1),date.setHours(0,0,0,0)},function(date,step){date.setMonth(date.getMonth()+step)},function(start,end){return end.getMonth()-start.getMonth()+12*(end.getFullYear()-start.getFullYear())},function(date){return date.getMonth()})),src_month=month_month,year_year=(month_month.range,newInterval(function(date){date.setMonth(0,1),date.setHours(0,0,0,0)},function(date,step){date.setFullYear(date.getFullYear()+step)},function(start,end){return end.getFullYear()-start.getFullYear()},function(date){return date.getFullYear()}));year_year.every=function(k){return isFinite(k=Math.floor(k))&&k>0?newInterval(function(date){date.setFullYear(Math.floor(date.getFullYear()/k)*k),date.setMonth(0,1),date.setHours(0,0,0,0)},function(date,step){date.setFullYear(date.getFullYear()+step*k)}):null};var src_year=year_year,utcMinute=(year_year.range,newInterval(function(date){date.setUTCSeconds(0,0)},function(date,step){date.setTime(+date+step*durationMinute)},function(start,end){return(end-start)/durationMinute},function(date){return date.getUTCMinutes()})),utcHour=(utcMinute.range,newInterval(function(date){date.setUTCMinutes(0,0,0)},function(date,step){date.setTime(+date+36e5*step)},function(start,end){return(end-start)/36e5},function(date){return date.getUTCHours()})),utcDay=(utcHour.range,newInterval(function(date){date.setUTCHours(0,0,0,0)},function(date,step){date.setUTCDate(date.getUTCDate()+step)},function(start,end){return(end-start)/864e5},function(date){return date.getUTCDate()-1})),src_utcDay=utcDay;utcDay.range;function utcWeekday(i){return newInterval(function(date){date.setUTCDate(date.getUTCDate()-(date.getUTCDay()+7-i)%7),date.setUTCHours(0,0,0,0)},function(date,step){date.setUTCDate(date.getUTCDate()+7*step)},function(start,end){return(end-start)/durationWeek})}var utcSunday=utcWeekday(0),utcMonday=utcWeekday(1),utcTuesday=utcWeekday(2),utcWednesday=utcWeekday(3),utcThursday=utcWeekday(4),utcFriday=utcWeekday(5),utcSaturday=utcWeekday(6),utcMonth=(utcSunday.range,utcMonday.range,utcTuesday.range,utcWednesday.range,utcThursday.range,utcFriday.range,utcSaturday.range,newInterval(function(date){date.setUTCDate(1),date.setUTCHours(0,0,0,0)},function(date,step){date.setUTCMonth(date.getUTCMonth()+step)},function(start,end){return end.getUTCMonth()-start.getUTCMonth()+12*(end.getUTCFullYear()-start.getUTCFullYear())},function(date){return date.getUTCMonth()})),utcYear=(utcMonth.range,newInterval(function(date){date.setUTCMonth(0,1),date.setUTCHours(0,0,0,0)},function(date,step){date.setUTCFullYear(date.getUTCFullYear()+step)},function(start,end){return end.getUTCFullYear()-start.getUTCFullYear()},function(date){return date.getUTCFullYear()}));utcYear.every=function(k){return isFinite(k=Math.floor(k))&&k>0?newInterval(function(date){date.setUTCFullYear(Math.floor(date.getUTCFullYear()/k)*k),date.setUTCMonth(0,1),date.setUTCHours(0,0,0,0)},function(date,step){date.setUTCFullYear(date.getUTCFullYear()+step*k)}):null};var src_utcYear=utcYear;utcYear.range;function localDate(d){if(0<=d.y&&d.y<100){var date=new Date(-1,d.m,d.d,d.H,d.M,d.S,d.L);return date.setFullYear(d.y),date}return new Date(d.y,d.m,d.d,d.H,d.M,d.S,d.L)}function utcDate(d){if(0<=d.y&&d.y<100){var date=new Date(Date.UTC(-1,d.m,d.d,d.H,d.M,d.S,d.L));return date.setUTCFullYear(d.y),date}return new Date(Date.UTC(d.y,d.m,d.d,d.H,d.M,d.S,d.L))}function newYear(y){return{y:y,m:0,d:1,H:0,M:0,S:0,L:0}}var src_defaultLocale_locale,timeFormat,utcFormat,utcParse,pads={"-":"",_:" ",0:"0"},numberRe=/^\s*\d+/,percentRe=/^%/,requoteRe=/[\\^$*+?|[\]().{}]/g;function locale_pad(value,fill,width){var sign=value<0?"-":"",string=(sign?-value:value)+"",length=string.length;return sign+(length68?1900:2e3),i+n[0].length):-1}function parseZone(d,string,i){var n=/^(Z)|([+-]\d\d)(?::?(\d\d))?/.exec(string.slice(i,i+6));return n?(d.Z=n[1]?0:-(n[2]+(n[3]||"00")),i+n[0].length):-1}function parseMonthNumber(d,string,i){var n=numberRe.exec(string.slice(i,i+2));return n?(d.m=n[0]-1,i+n[0].length):-1}function parseDayOfMonth(d,string,i){var n=numberRe.exec(string.slice(i,i+2));return n?(d.d=+n[0],i+n[0].length):-1}function parseDayOfYear(d,string,i){var n=numberRe.exec(string.slice(i,i+3));return n?(d.m=0,d.d=+n[0],i+n[0].length):-1}function parseHour24(d,string,i){var n=numberRe.exec(string.slice(i,i+2));return n?(d.H=+n[0],i+n[0].length):-1}function parseMinutes(d,string,i){var n=numberRe.exec(string.slice(i,i+2));return n?(d.M=+n[0],i+n[0].length):-1}function parseSeconds(d,string,i){var n=numberRe.exec(string.slice(i,i+2));return n?(d.S=+n[0],i+n[0].length):-1}function parseMilliseconds(d,string,i){var n=numberRe.exec(string.slice(i,i+3));return n?(d.L=+n[0],i+n[0].length):-1}function parseMicroseconds(d,string,i){var n=numberRe.exec(string.slice(i,i+6));return n?(d.L=Math.floor(n[0]/1e3),i+n[0].length):-1}function parseLiteralPercent(d,string,i){var n=percentRe.exec(string.slice(i,i+1));return n?i+n[0].length:-1}function parseUnixTimestamp(d,string,i){var n=numberRe.exec(string.slice(i));return n?(d.Q=+n[0],i+n[0].length):-1}function parseUnixTimestampSeconds(d,string,i){var n=numberRe.exec(string.slice(i));return n?(d.Q=1e3*+n[0],i+n[0].length):-1}function formatDayOfMonth(d,p){return locale_pad(d.getDate(),p,2)}function formatHour24(d,p){return locale_pad(d.getHours(),p,2)}function formatHour12(d,p){return locale_pad(d.getHours()%12||12,p,2)}function formatDayOfYear(d,p){return locale_pad(1+src_day.count(src_year(d),d),p,3)}function formatMilliseconds(d,p){return locale_pad(d.getMilliseconds(),p,3)}function formatMicroseconds(d,p){return formatMilliseconds(d,p)+"000"}function formatMonthNumber(d,p){return locale_pad(d.getMonth()+1,p,2)}function formatMinutes(d,p){return locale_pad(d.getMinutes(),p,2)}function formatSeconds(d,p){return locale_pad(d.getSeconds(),p,2)}function formatWeekdayNumberMonday(d){var day=d.getDay();return 0===day?7:day}function formatWeekNumberSunday(d,p){return locale_pad(sunday.count(src_year(d),d),p,2)}function formatWeekNumberISO(d,p){var day=d.getDay();return d=day>=4||0===day?thursday(d):thursday.ceil(d),locale_pad(thursday.count(src_year(d),d)+(4===src_year(d).getDay()),p,2)}function formatWeekdayNumberSunday(d){return d.getDay()}function formatWeekNumberMonday(d,p){return locale_pad(monday.count(src_year(d),d),p,2)}function locale_formatYear(d,p){return locale_pad(d.getFullYear()%100,p,2)}function formatFullYear(d,p){return locale_pad(d.getFullYear()%1e4,p,4)}function formatZone(d){var z=d.getTimezoneOffset();return(z>0?"-":(z*=-1,"+"))+locale_pad(z/60|0,"0",2)+locale_pad(z%60,"0",2)}function formatUTCDayOfMonth(d,p){return locale_pad(d.getUTCDate(),p,2)}function formatUTCHour24(d,p){return locale_pad(d.getUTCHours(),p,2)}function formatUTCHour12(d,p){return locale_pad(d.getUTCHours()%12||12,p,2)}function formatUTCDayOfYear(d,p){return locale_pad(1+src_utcDay.count(src_utcYear(d),d),p,3)}function formatUTCMilliseconds(d,p){return locale_pad(d.getUTCMilliseconds(),p,3)}function formatUTCMicroseconds(d,p){return formatUTCMilliseconds(d,p)+"000"}function formatUTCMonthNumber(d,p){return locale_pad(d.getUTCMonth()+1,p,2)}function formatUTCMinutes(d,p){return locale_pad(d.getUTCMinutes(),p,2)}function formatUTCSeconds(d,p){return locale_pad(d.getUTCSeconds(),p,2)}function formatUTCWeekdayNumberMonday(d){var dow=d.getUTCDay();return 0===dow?7:dow}function formatUTCWeekNumberSunday(d,p){return locale_pad(utcSunday.count(src_utcYear(d),d),p,2)}function formatUTCWeekNumberISO(d,p){var day=d.getUTCDay();return d=day>=4||0===day?utcThursday(d):utcThursday.ceil(d),locale_pad(utcThursday.count(src_utcYear(d),d)+(4===src_utcYear(d).getUTCDay()),p,2)}function formatUTCWeekdayNumberSunday(d){return d.getUTCDay()}function formatUTCWeekNumberMonday(d,p){return locale_pad(utcMonday.count(src_utcYear(d),d),p,2)}function formatUTCYear(d,p){return locale_pad(d.getUTCFullYear()%100,p,2)}function formatUTCFullYear(d,p){return locale_pad(d.getUTCFullYear()%1e4,p,4)}function formatUTCZone(){return"+0000"}function formatLiteralPercent(){return"%"}function formatUnixTimestamp(d){return+d}function formatUnixTimestampSeconds(d){return Math.floor(+d/1e3)}!function defaultLocale_defaultLocale(definition){return src_defaultLocale_locale=function formatLocale(locale){var locale_dateTime=locale.dateTime,locale_date=locale.date,locale_time=locale.time,locale_periods=locale.periods,locale_weekdays=locale.days,locale_shortWeekdays=locale.shortDays,locale_months=locale.months,locale_shortMonths=locale.shortMonths,periodRe=formatRe(locale_periods),periodLookup=formatLookup(locale_periods),weekdayRe=formatRe(locale_weekdays),weekdayLookup=formatLookup(locale_weekdays),shortWeekdayRe=formatRe(locale_shortWeekdays),shortWeekdayLookup=formatLookup(locale_shortWeekdays),monthRe=formatRe(locale_months),monthLookup=formatLookup(locale_months),shortMonthRe=formatRe(locale_shortMonths),shortMonthLookup=formatLookup(locale_shortMonths),formats={a:function formatShortWeekday(d){return locale_shortWeekdays[d.getDay()]},A:function formatWeekday(d){return locale_weekdays[d.getDay()]},b:function formatShortMonth(d){return locale_shortMonths[d.getMonth()]},B:function formatMonth(d){return locale_months[d.getMonth()]},c:null,d:formatDayOfMonth,e:formatDayOfMonth,f:formatMicroseconds,H:formatHour24,I:formatHour12,j:formatDayOfYear,L:formatMilliseconds,m:formatMonthNumber,M:formatMinutes,p:function formatPeriod(d){return locale_periods[+(d.getHours()>=12)]},Q:formatUnixTimestamp,s:formatUnixTimestampSeconds,S:formatSeconds,u:formatWeekdayNumberMonday,U:formatWeekNumberSunday,V:formatWeekNumberISO,w:formatWeekdayNumberSunday,W:formatWeekNumberMonday,x:null,X:null,y:locale_formatYear,Y:formatFullYear,Z:formatZone,"%":formatLiteralPercent},utcFormats={a:function formatUTCShortWeekday(d){return locale_shortWeekdays[d.getUTCDay()]},A:function formatUTCWeekday(d){return locale_weekdays[d.getUTCDay()]},b:function formatUTCShortMonth(d){return locale_shortMonths[d.getUTCMonth()]},B:function formatUTCMonth(d){return locale_months[d.getUTCMonth()]},c:null,d:formatUTCDayOfMonth,e:formatUTCDayOfMonth,f:formatUTCMicroseconds,H:formatUTCHour24,I:formatUTCHour12,j:formatUTCDayOfYear,L:formatUTCMilliseconds,m:formatUTCMonthNumber,M:formatUTCMinutes,p:function formatUTCPeriod(d){return locale_periods[+(d.getUTCHours()>=12)]},Q:formatUnixTimestamp,s:formatUnixTimestampSeconds,S:formatUTCSeconds,u:formatUTCWeekdayNumberMonday,U:formatUTCWeekNumberSunday,V:formatUTCWeekNumberISO,w:formatUTCWeekdayNumberSunday,W:formatUTCWeekNumberMonday,x:null,X:null,y:formatUTCYear,Y:formatUTCFullYear,Z:formatUTCZone,"%":formatLiteralPercent},parses={a:function parseShortWeekday(d,string,i){var n=shortWeekdayRe.exec(string.slice(i));return n?(d.w=shortWeekdayLookup[n[0].toLowerCase()],i+n[0].length):-1},A:function parseWeekday(d,string,i){var n=weekdayRe.exec(string.slice(i));return n?(d.w=weekdayLookup[n[0].toLowerCase()],i+n[0].length):-1},b:function parseShortMonth(d,string,i){var n=shortMonthRe.exec(string.slice(i));return n?(d.m=shortMonthLookup[n[0].toLowerCase()],i+n[0].length):-1},B:function parseMonth(d,string,i){var n=monthRe.exec(string.slice(i));return n?(d.m=monthLookup[n[0].toLowerCase()],i+n[0].length):-1},c:function parseLocaleDateTime(d,string,i){return parseSpecifier(d,locale_dateTime,string,i)},d:parseDayOfMonth,e:parseDayOfMonth,f:parseMicroseconds,H:parseHour24,I:parseHour24,j:parseDayOfYear,L:parseMilliseconds,m:parseMonthNumber,M:parseMinutes,p:function parsePeriod(d,string,i){var n=periodRe.exec(string.slice(i));return n?(d.p=periodLookup[n[0].toLowerCase()],i+n[0].length):-1},Q:parseUnixTimestamp,s:parseUnixTimestampSeconds,S:parseSeconds,u:parseWeekdayNumberMonday,U:parseWeekNumberSunday,V:parseWeekNumberISO,w:parseWeekdayNumberSunday,W:parseWeekNumberMonday,x:function parseLocaleDate(d,string,i){return parseSpecifier(d,locale_date,string,i)},X:function parseLocaleTime(d,string,i){return parseSpecifier(d,locale_time,string,i)},y:parseYear,Y:parseFullYear,Z:parseZone,"%":parseLiteralPercent};function newFormat(specifier,formats){return function(date){var c,pad,format,string=[],i=-1,j=0,n=specifier.length;for(date instanceof Date||(date=new Date(+date));++i53)return null;"w"in d||(d.w=1),"Z"in d?(week=(day=(week=utcDate(newYear(d.y))).getUTCDay())>4||0===day?utcMonday.ceil(week):utcMonday(week),week=src_utcDay.offset(week,7*(d.V-1)),d.y=week.getUTCFullYear(),d.m=week.getUTCMonth(),d.d=week.getUTCDate()+(d.w+6)%7):(week=(day=(week=newDate(newYear(d.y))).getDay())>4||0===day?monday.ceil(week):monday(week),week=src_day.offset(week,7*(d.V-1)),d.y=week.getFullYear(),d.m=week.getMonth(),d.d=week.getDate()+(d.w+6)%7)}else("W"in d||"U"in d)&&("w"in d||(d.w="u"in d?d.u%7:"W"in d?1:0),day="Z"in d?utcDate(newYear(d.y)).getUTCDay():newDate(newYear(d.y)).getDay(),d.m=0,d.d="W"in d?(d.w+6)%7+7*d.W-(day+5)%7:d.w+7*d.U-(day+6)%7);return"Z"in d?(d.H+=d.Z/100|0,d.M+=d.Z%100,utcDate(d)):newDate(d)}}function parseSpecifier(d,specifier,string,j){for(var c,parse,i=0,n=specifier.length,m=string.length;i=m)return-1;if(37===(c=specifier.charCodeAt(i++))){if(c=specifier.charAt(i++),!(parse=parses[c in pads?specifier.charAt(i++):c])||(j=parse(d,string,j))<0)return-1}else if(c!=string.charCodeAt(j++))return-1}return j}return formats.x=newFormat(locale_date,formats),formats.X=newFormat(locale_time,formats),formats.c=newFormat(locale_dateTime,formats),utcFormats.x=newFormat(locale_date,utcFormats),utcFormats.X=newFormat(locale_time,utcFormats),utcFormats.c=newFormat(locale_dateTime,utcFormats),{format:function format(specifier){var f=newFormat(specifier+="",formats);return f.toString=function(){return specifier},f},parse:function parse(specifier){var p=newParse(specifier+="",localDate);return p.toString=function(){return specifier},p},utcFormat:function utcFormat(specifier){var f=newFormat(specifier+="",utcFormats);return f.toString=function(){return specifier},f},utcParse:function utcParse(specifier){var p=newParse(specifier,utcDate);return p.toString=function(){return specifier},p}}}(definition),timeFormat=src_defaultLocale_locale.format,src_defaultLocale_locale.parse,utcFormat=src_defaultLocale_locale.utcFormat,utcParse=src_defaultLocale_locale.utcParse,src_defaultLocale_locale}({dateTime:"%x, %X",date:"%-m/%-d/%Y",time:"%-I:%M:%S %p",periods:["AM","PM"],days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],shortDays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],shortMonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]});Date.prototype.toISOString||utcFormat("%Y-%m-%dT%H:%M:%S.%LZ");+new Date("2000-01-01T00:00:00.000Z")||utcParse("%Y-%m-%dT%H:%M:%S.%LZ");var time_durationSecond=1e3,time_durationMinute=60*time_durationSecond,time_durationHour=60*time_durationMinute,time_durationDay=24*time_durationHour,time_durationWeek=7*time_durationDay,durationMonth=30*time_durationDay,durationYear=365*time_durationDay;function time_date(t){return new Date(t)}function time_number(t){return t instanceof Date?+t:+new Date(+t)}function calendar(year,month,week,day,hour,minute,second,millisecond,format){var scale=continuous(deinterpolateLinear,src_number),invert=scale.invert,domain=scale.domain,formatMillisecond=format(".%L"),formatSecond=format(":%S"),formatMinute=format("%I:%M"),formatHour=format("%I %p"),formatDay=format("%a %d"),formatWeek=format("%b %d"),formatMonth=format("%B"),formatYear=format("%Y"),tickIntervals=[[second,1,time_durationSecond],[second,5,5*time_durationSecond],[second,15,15*time_durationSecond],[second,30,30*time_durationSecond],[minute,1,time_durationMinute],[minute,5,5*time_durationMinute],[minute,15,15*time_durationMinute],[minute,30,30*time_durationMinute],[hour,1,time_durationHour],[hour,3,3*time_durationHour],[hour,6,6*time_durationHour],[hour,12,12*time_durationHour],[day,1,time_durationDay],[day,2,2*time_durationDay],[week,1,time_durationWeek],[month,1,durationMonth],[month,3,3*durationMonth],[year,1,durationYear]];function tickFormat(date){return(second(date)1)&&(t-=Math.floor(t));var ts=Math.abs(t-.5);return rainbow_c.h=360*t-100,rainbow_c.s=1.5-1.5*ts,rainbow_c.l=.8-.9*ts,rainbow_c+""};color_rgb(),Math.PI,Math.PI;function viridis_ramp(range){var n=range.length;return function(t){return range[Math.max(0,Math.min(n-1,Math.floor(t*n)))]}}var sequential_multi_viridis=viridis_ramp(d3_scale_chromatic_src_colors("44015444025645045745055946075a46085c460a5d460b5e470d60470e6147106347116447136548146748166848176948186a481a6c481b6d481c6e481d6f481f70482071482173482374482475482576482677482878482979472a7a472c7a472d7b472e7c472f7d46307e46327e46337f463480453581453781453882443983443a83443b84433d84433e85423f854240864241864142874144874045884046883f47883f48893e49893e4a893e4c8a3d4d8a3d4e8a3c4f8a3c508b3b518b3b528b3a538b3a548c39558c39568c38588c38598c375a8c375b8d365c8d365d8d355e8d355f8d34608d34618d33628d33638d32648e32658e31668e31678e31688e30698e306a8e2f6b8e2f6c8e2e6d8e2e6e8e2e6f8e2d708e2d718e2c718e2c728e2c738e2b748e2b758e2a768e2a778e2a788e29798e297a8e297b8e287c8e287d8e277e8e277f8e27808e26818e26828e26828e25838e25848e25858e24868e24878e23888e23898e238a8d228b8d228c8d228d8d218e8d218f8d21908d21918c20928c20928c20938c1f948c1f958b1f968b1f978b1f988b1f998a1f9a8a1e9b8a1e9c891e9d891f9e891f9f881fa0881fa1881fa1871fa28720a38620a48621a58521a68522a78522a88423a98324aa8325ab8225ac8226ad8127ad8128ae8029af7f2ab07f2cb17e2db27d2eb37c2fb47c31b57b32b67a34b67935b77937b87838b9773aba763bbb753dbc743fbc7340bd7242be7144bf7046c06f48c16e4ac16d4cc26c4ec36b50c46a52c56954c56856c66758c7655ac8645cc8635ec96260ca6063cb5f65cb5e67cc5c69cd5b6ccd5a6ece5870cf5773d05675d05477d1537ad1517cd2507fd34e81d34d84d44b86d54989d5488bd6468ed64590d74393d74195d84098d83e9bd93c9dd93ba0da39a2da37a5db36a8db34aadc32addc30b0dd2fb2dd2db5de2bb8de29bade28bddf26c0df25c2df23c5e021c8e020cae11fcde11dd0e11cd2e21bd5e21ad8e219dae319dde318dfe318e2e418e5e419e7e419eae51aece51befe51cf1e51df4e61ef6e620f8e621fbe723fde725")),viridis_magma=viridis_ramp(d3_scale_chromatic_src_colors("00000401000501010601010802010902020b02020d03030f03031204041405041606051806051a07061c08071e0907200a08220b09240c09260d0a290e0b2b100b2d110c2f120d31130d34140e36150e38160f3b180f3d19103f1a10421c10441d11471e114920114b21114e22115024125325125527125829115a2a115c2c115f2d11612f116331116533106734106936106b38106c390f6e3b0f703d0f713f0f72400f74420f75440f764510774710784910784a10794c117a4e117b4f127b51127c52137c54137d56147d57157e59157e5a167e5c167f5d177f5f187f601880621980641a80651a80671b80681c816a1c816b1d816d1d816e1e81701f81721f817320817521817621817822817922827b23827c23827e24828025828125818326818426818627818827818928818b29818c29818e2a81902a81912b81932b80942c80962c80982d80992d809b2e7f9c2e7f9e2f7fa02f7fa1307ea3307ea5317ea6317da8327daa337dab337cad347cae347bb0357bb2357bb3367ab5367ab73779b83779ba3878bc3978bd3977bf3a77c03a76c23b75c43c75c53c74c73d73c83e73ca3e72cc3f71cd4071cf4070d0416fd2426fd3436ed5446dd6456cd8456cd9466bdb476adc4869de4968df4a68e04c67e24d66e34e65e44f64e55064e75263e85362e95462ea5661eb5760ec5860ed5a5fee5b5eef5d5ef05f5ef1605df2625df2645cf3655cf4675cf4695cf56b5cf66c5cf66e5cf7705cf7725cf8745cf8765cf9785df9795df97b5dfa7d5efa7f5efa815ffb835ffb8560fb8761fc8961fc8a62fc8c63fc8e64fc9065fd9266fd9467fd9668fd9869fd9a6afd9b6bfe9d6cfe9f6dfea16efea36ffea571fea772fea973feaa74feac76feae77feb078feb27afeb47bfeb67cfeb77efeb97ffebb81febd82febf84fec185fec287fec488fec68afec88cfeca8dfecc8ffecd90fecf92fed194fed395fed597fed799fed89afdda9cfddc9efddea0fde0a1fde2a3fde3a5fde5a7fde7a9fde9aafdebacfcecaefceeb0fcf0b2fcf2b4fcf4b6fcf6b8fcf7b9fcf9bbfcfbbdfcfdbf")),viridis_inferno=viridis_ramp(d3_scale_chromatic_src_colors("00000401000501010601010802010a02020c02020e03021004031204031405041706041907051b08051d09061f0a07220b07240c08260d08290e092b10092d110a30120a32140b34150b37160b39180c3c190c3e1b0c411c0c431e0c451f0c48210c4a230c4c240c4f260c51280b53290b552b0b572d0b592f0a5b310a5c320a5e340a5f3609613809623909633b09643d09653e0966400a67420a68440a68450a69470b6a490b6a4a0c6b4c0c6b4d0d6c4f0d6c510e6c520e6d540f6d550f6d57106e59106e5a116e5c126e5d126e5f136e61136e62146e64156e65156e67166e69166e6a176e6c186e6d186e6f196e71196e721a6e741a6e751b6e771c6d781c6d7a1d6d7c1d6d7d1e6d7f1e6c801f6c82206c84206b85216b87216b88226a8a226a8c23698d23698f24699025689225689326679526679727669827669a28659b29649d29649f2a63a02a63a22b62a32c61a52c60a62d60a82e5fa92e5eab2f5ead305dae305cb0315bb1325ab3325ab43359b63458b73557b93556ba3655bc3754bd3853bf3952c03a51c13a50c33b4fc43c4ec63d4dc73e4cc83f4bca404acb4149cc4248ce4347cf4446d04545d24644d34743d44842d54a41d74b3fd84c3ed94d3dda4e3cdb503bdd513ade5238df5337e05536e15635e25734e35933e45a31e55c30e65d2fe75e2ee8602de9612bea632aeb6429eb6628ec6726ed6925ee6a24ef6c23ef6e21f06f20f1711ff1731df2741cf3761bf37819f47918f57b17f57d15f67e14f68013f78212f78410f8850ff8870ef8890cf98b0bf98c0af98e09fa9008fa9207fa9407fb9606fb9706fb9906fb9b06fb9d07fc9f07fca108fca309fca50afca60cfca80dfcaa0ffcac11fcae12fcb014fcb216fcb418fbb61afbb81dfbba1ffbbc21fbbe23fac026fac228fac42afac62df9c72ff9c932f9cb35f8cd37f8cf3af7d13df7d340f6d543f6d746f5d949f5db4cf4dd4ff4df53f4e156f3e35af3e55df2e661f2e865f2ea69f1ec6df1ed71f1ef75f1f179f2f27df2f482f3f586f3f68af4f88ef5f992f6fa96f8fb9af9fc9dfafda1fcffa4")),viridis_plasma=viridis_ramp(d3_scale_chromatic_src_colors("0d088710078813078916078a19068c1b068d1d068e20068f2206902406912605912805922a05932c05942e05952f059631059733059735049837049938049a3a049a3c049b3e049c3f049c41049d43039e44039e46039f48039f4903a04b03a14c02a14e02a25002a25102a35302a35502a45601a45801a45901a55b01a55c01a65e01a66001a66100a76300a76400a76600a76700a86900a86a00a86c00a86e00a86f00a87100a87201a87401a87501a87701a87801a87a02a87b02a87d03a87e03a88004a88104a78305a78405a78606a68707a68808a68a09a58b0aa58d0ba58e0ca48f0da4910ea3920fa39410a29511a19613a19814a099159f9a169f9c179e9d189d9e199da01a9ca11b9ba21d9aa31e9aa51f99a62098a72197a82296aa2395ab2494ac2694ad2793ae2892b02991b12a90b22b8fb32c8eb42e8db52f8cb6308bb7318ab83289ba3388bb3488bc3587bd3786be3885bf3984c03a83c13b82c23c81c33d80c43e7fc5407ec6417dc7427cc8437bc9447aca457acb4679cc4778cc4977cd4a76ce4b75cf4c74d04d73d14e72d24f71d35171d45270d5536fd5546ed6556dd7566cd8576bd9586ada5a6ada5b69db5c68dc5d67dd5e66de5f65de6164df6263e06363e16462e26561e26660e3685fe4695ee56a5de56b5de66c5ce76e5be76f5ae87059e97158e97257ea7457eb7556eb7655ec7754ed7953ed7a52ee7b51ef7c51ef7e50f07f4ff0804ef1814df1834cf2844bf3854bf3874af48849f48948f58b47f58c46f68d45f68f44f79044f79143f79342f89441f89540f9973ff9983ef99a3efa9b3dfa9c3cfa9e3bfb9f3afba139fba238fca338fca537fca636fca835fca934fdab33fdac33fdae32fdaf31fdb130fdb22ffdb42ffdb52efeb72dfeb82cfeba2cfebb2bfebd2afebe2afec029fdc229fdc328fdc527fdc627fdc827fdca26fdcb26fccd25fcce25fcd025fcd225fbd324fbd524fbd724fad824fada24f9dc24f9dd25f8df25f8e125f7e225f7e425f6e626f6e826f5e926f5eb27f4ed27f3ee27f3f027f2f227f1f426f1f525f0f724f0f921")),UNIT_GLOBAL_NAMESPACE="app.units",UNIT_LOCAL_NAMESPACE="local.units",LAYER_LOCAL_NAMESPACE="local.layers",LAYER_GLOBAL_NAMESPACE="app.layers",GROUP_GLOBAL_NAMESPACE="app.group",GROUP_LOCAL_NAMESPACE="local.group",CANVAS_LOCAL_NAMESPACE="local.canvas",CANVAS_GLOBAL_NAMESPACE="app.canvas",reserved_fields={ROW_ID:"__id__"},common_props={ACTION_INF:"actionInf",ON_LAYER_DRAW:"onLayerDraw",MATRIX_CREATED:"matrixCreated"},COORD_TYPES_POLAR="polar",COORD_TYPES_CARTESIAN="cartesian",src_array_slice=Array.prototype.slice,d3_axis_src_identity=function(x){return x},axis_top=1,axis_right=2,axis_bottom=3,axis_left=4,epsilon=1e-6;function translateX(x){return"translate("+(x+.5)+",0)"}function translateY(y){return"translate(0,"+(y+.5)+")"}function entering(){return!this.__axis}function axis_axis(orient,scale){var tickArguments=[],tickValues=null,tickFormat=null,tickTransform=null,tickSizeInner=6,tickSizeOuter=6,tickPadding=3,k=orient===axis_top||orient===axis_left?-1:1,x=orient===axis_left||orient===axis_right?"x":"y",transform=orient===axis_top||orient===axis_bottom?translateX:translateY;function axis(context){var values=null==tickValues?scale.ticks?scale.ticks.apply(scale,tickArguments):scale.domain():tickValues,format=null==tickFormat?scale.tickFormat?scale.tickFormat.apply(scale,tickArguments):d3_axis_src_identity:tickFormat,spacing=Math.max(tickSizeInner,0)+tickPadding,range=scale.range(),range0=+range[0]+.5,range1=+range[range.length-1]+.5,position=(scale.bandwidth?function axis_center(scale){var offset=Math.max(0,scale.bandwidth()-1)/2;return scale.round()&&(offset=Math.round(offset)),function(d){return+scale(d)+offset}}:function axis_number(scale){return function(d){return+scale(d)}})(scale.copy()),selection=context.selection?context.selection():context,path=selection.selectAll(".domain").data([null]),tick=selection.selectAll(".tick").data(values,scale).order(),tickExit=tick.exit(),tickEnter=tick.enter().append("g").attr("class","tick"),line=tick.select("line"),text=tick.select("text");path=path.merge(path.enter().insert("path",".tick").attr("class","domain").attr("stroke","#000")),tick=tick.merge(tickEnter),line=line.merge(tickEnter.append("line").attr("stroke","#000").attr(x+"2",k*tickSizeInner)),text=text.merge(tickEnter.append("text").attr("fill","#000").attr(x,k*spacing).attr("dy",orient===axis_top?"0em":orient===axis_bottom?"0.71em":"0.32em")).style("transform",tickTransform),context!==selection&&(path=path.transition(context),tick=tick.transition(context),line=line.transition(context),text=text.transition(context),tickExit=tickExit.transition(context).attr("opacity",epsilon).attr("transform",function(d){return isFinite(d=position(d))?transform(d):this.getAttribute("transform")}),tickEnter.attr("opacity",epsilon).attr("transform",function(d){var p=this.parentNode.__axis;return transform(p&&isFinite(p=p(d))?p:position(d))})),tickExit.remove(),path.attr("d",orient===axis_left||orient==axis_right?"M"+k*tickSizeOuter+","+range0+"H0.5V"+range1+"H"+k*tickSizeOuter:"M"+range0+","+k*tickSizeOuter+"V0.5H"+range1+"V"+k*tickSizeOuter),tick.attr("opacity",1).attr("transform",function(d){return transform(position(d))}),line.attr(x+"2",k*tickSizeInner),text.attr(x,k*spacing).text(format),selection.filter(entering).attr("fill","none").attr("font-size",10).attr("font-family","sans-serif").attr("text-anchor",orient===axis_right?"start":orient===axis_left?"end":"middle"),selection.each(function(){this.__axis=position})}return axis.scale=function(_){return arguments.length?(scale=_,axis):scale},axis.tickTransform=function(_){return arguments.length?(tickTransform=_,axis):tickTransform},axis.ticks=function(){return tickArguments=src_array_slice.call(arguments),axis},axis.tickArguments=function(_){return arguments.length?(tickArguments=null==_?[]:src_array_slice.call(_),axis):tickArguments.slice()},axis.tickValues=function(_){return arguments.length?(tickValues=null==_?null:src_array_slice.call(_),axis):tickValues&&tickValues.slice()},axis.tickFormat=function(_){return arguments.length?(tickFormat=_,axis):tickFormat},axis.tickSize=function(_){return arguments.length?(tickSizeInner=tickSizeOuter=+_,axis):tickSizeInner},axis.tickSizeInner=function(_){return arguments.length?(tickSizeInner=+_,axis):tickSizeInner},axis.tickSizeOuter=function(_){return arguments.length?(tickSizeOuter=+_,axis):tickSizeOuter},axis.tickPadding=function(_){return arguments.length?(tickPadding=+_,axis):tickPadding},axis}var pi=Math.PI,tau=2*pi,tauEpsilon=tau-1e-6;function Path(){this._x0=this._y0=this._x1=this._y1=null,this._=""}function path_path(){return new Path}Path.prototype=path_path.prototype={constructor:Path,moveTo:function moveTo(x,y){this._+="M"+(this._x0=this._x1=+x)+","+(this._y0=this._y1=+y)},closePath:function closePath(){null!==this._x1&&(this._x1=this._x0,this._y1=this._y0,this._+="Z")},lineTo:function lineTo(x,y){this._+="L"+(this._x1=+x)+","+(this._y1=+y)},quadraticCurveTo:function quadraticCurveTo(x1,y1,x,y){this._+="Q"+ +x1+","+ +y1+","+(this._x1=+x)+","+(this._y1=+y)},bezierCurveTo:function bezierCurveTo(x1,y1,x2,y2,x,y){this._+="C"+ +x1+","+ +y1+","+ +x2+","+ +y2+","+(this._x1=+x)+","+(this._y1=+y)},arcTo:function arcTo(x1,y1,x2,y2,r){x1=+x1,y1=+y1,x2=+x2,y2=+y2,r=+r;var x0=this._x1,y0=this._y1,x21=x2-x1,y21=y2-y1,x01=x0-x1,y01=y0-y1,l01_2=x01*x01+y01*y01;if(r<0)throw new Error("negative radius: "+r);if(null===this._x1)this._+="M"+(this._x1=x1)+","+(this._y1=y1);else if(l01_2>1e-6)if(Math.abs(y01*x21-y21*x01)>1e-6&&r){var x20=x2-x0,y20=y2-y0,l21_2=x21*x21+y21*y21,l20_2=x20*x20+y20*y20,l21=Math.sqrt(l21_2),l01=Math.sqrt(l01_2),l=r*Math.tan((pi-Math.acos((l21_2+l01_2-l20_2)/(2*l21*l01)))/2),t01=l/l01,t21=l/l21;Math.abs(t01-1)>1e-6&&(this._+="L"+(x1+t01*x01)+","+(y1+t01*y01)),this._+="A"+r+","+r+",0,0,"+ +(y01*x20>x01*y20)+","+(this._x1=x1+t21*x21)+","+(this._y1=y1+t21*y21)}else this._+="L"+(this._x1=x1)+","+(this._y1=y1);else;},arc:function arc(x,y,r,a0,a1,ccw){x=+x,y=+y;var dx=(r=+r)*Math.cos(a0),dy=r*Math.sin(a0),x0=x+dx,y0=y+dy,cw=1^ccw,da=ccw?a0-a1:a1-a0;if(r<0)throw new Error("negative radius: "+r);null===this._x1?this._+="M"+x0+","+y0:(Math.abs(this._x1-x0)>1e-6||Math.abs(this._y1-y0)>1e-6)&&(this._+="L"+x0+","+y0),r&&(da<0&&(da=da%tau+tau),da>tauEpsilon?this._+="A"+r+","+r+",0,1,"+cw+","+(x-dx)+","+(y-dy)+"A"+r+","+r+",0,1,"+cw+","+(this._x1=x0)+","+(this._y1=y0):da>1e-6&&(this._+="A"+r+","+r+",0,"+ +(da>=pi)+","+cw+","+(this._x1=x+r*Math.cos(a1))+","+(this._y1=y+r*Math.sin(a1))))},rect:function rect(x,y,w,h){this._+="M"+(this._x0=this._x1=+x)+","+(this._y0=this._y1=+y)+"h"+ +w+"v"+ +h+"h"+-w+"Z"},toString:function toString(){return this._}};var src_path=path_path,d3_shape_src_constant=function(x){return function constant(){return x}},abs=Math.abs,atan2=Math.atan2,cos=Math.cos,math_max=Math.max,math_min=Math.min,sin=Math.sin,math_sqrt=Math.sqrt,math_epsilon=1e-12,math_pi=Math.PI,halfPi=math_pi/2,math_tau=2*math_pi;function asin(x){return x>=1?halfPi:x<=-1?-halfPi:Math.asin(x)}function arcInnerRadius(d){return d.innerRadius}function arcOuterRadius(d){return d.outerRadius}function arcStartAngle(d){return d.startAngle}function arcEndAngle(d){return d.endAngle}function arcPadAngle(d){return d&&d.padAngle}function cornerTangents(x0,y0,x1,y1,r1,rc,cw){var x01=x0-x1,y01=y0-y1,lo=(cw?rc:-rc)/math_sqrt(x01*x01+y01*y01),ox=lo*y01,oy=-lo*x01,x11=x0+ox,y11=y0+oy,x10=x1+ox,y10=y1+oy,x00=(x11+x10)/2,y00=(y11+y10)/2,dx=x10-x11,dy=y10-y11,d2=dx*dx+dy*dy,r=r1-rc,D=x11*y10-x10*y11,d=(dy<0?-1:1)*math_sqrt(math_max(0,r*r*d2-D*D)),cx0=(D*dy-dx*d)/d2,cy0=(-D*dx-dy*d)/d2,cx1=(D*dy+dx*d)/d2,cy1=(-D*dx+dy*d)/d2,dx0=cx0-x00,dy0=cy0-y00,dx1=cx1-x00,dy1=cy1-y00;return dx0*dx0+dy0*dy0>dx1*dx1+dy1*dy1&&(cx0=cx1,cy0=cy1),{cx:cx0,cy:cy0,x01:-ox,y01:-oy,x11:cx0*(r1/r-1),y11:cy0*(r1/r-1)}}function Linear(context){this._context=context}Linear.prototype={areaStart:function areaStart(){this._line=0},areaEnd:function areaEnd(){this._line=NaN},lineStart:function lineStart(){this._point=0},lineEnd:function lineEnd(){(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function point(x,y){switch(x=+x,y=+y,this._point){case 0:this._point=1,this._line?this._context.lineTo(x,y):this._context.moveTo(x,y);break;case 1:this._point=2;default:this._context.lineTo(x,y)}}};var curve_linear=function(context){return new Linear(context)};function point_x(p){return p[0]}function point_y(p){return p[1]}var src_line=function(){var x=point_x,y=point_y,defined=d3_shape_src_constant(!0),context=null,curve=curve_linear,output=null;function line(data){var i,d,buffer,n=data.length,defined0=!1;for(null==context&&(output=curve(buffer=src_path())),i=0;i<=n;++i)!(i=j;--k)output.point(x0z[k],y0z[k]);output.lineEnd(),output.areaEnd()}defined0&&(x0z[i]=+x0(d,i,data),y0z[i]=+y0(d,i,data),output.point(x1?+x1(d,i,data):x0z[i],y1?+y1(d,i,data):y0z[i]))}if(buffer)return output=null,buffer+""||null}function arealine(){return src_line().defined(defined).curve(curve).context(context)}return area.x=function(_){return arguments.length?(x0="function"==typeof _?_:d3_shape_src_constant(+_),x1=null,area):x0},area.x0=function(_){return arguments.length?(x0="function"==typeof _?_:d3_shape_src_constant(+_),area):x0},area.x1=function(_){return arguments.length?(x1=null==_?null:"function"==typeof _?_:d3_shape_src_constant(+_),area):x1},area.y=function(_){return arguments.length?(y0="function"==typeof _?_:d3_shape_src_constant(+_),y1=null,area):y0},area.y0=function(_){return arguments.length?(y0="function"==typeof _?_:d3_shape_src_constant(+_),area):y0},area.y1=function(_){return arguments.length?(y1=null==_?null:"function"==typeof _?_:d3_shape_src_constant(+_),area):y1},area.lineX0=area.lineY0=function(){return arealine().x(x0).y(y0)},area.lineY1=function(){return arealine().x(x0).y(y1)},area.lineX1=function(){return arealine().x(x1).y(y0)},area.defined=function(_){return arguments.length?(defined="function"==typeof _?_:d3_shape_src_constant(!!_),area):defined},area.curve=function(_){return arguments.length?(curve=_,null!=context&&(output=curve(context)),area):curve},area.context=function(_){return arguments.length?(null==_?context=output=null:output=curve(context=_),area):context},area},src_descending=function(a,b){return ba?1:b>=a?0:NaN},d3_shape_src_identity=function(d){return d};curveRadial(curve_linear);function Radial(curve){this._curve=curve}function curveRadial(curve){function radial(context){return new Radial(curve(context))}return radial._curve=curve,radial}Radial.prototype={areaStart:function areaStart(){this._curve.areaStart()},areaEnd:function areaEnd(){this._curve.areaEnd()},lineStart:function lineStart(){this._curve.lineStart()},lineEnd:function lineEnd(){this._curve.lineEnd()},point:function point(a,r){this._curve.point(r*Math.sin(a),r*-Math.cos(a))}};var d3_shape_src_array_slice=Array.prototype.slice;var symbol_circle={draw:function draw(context,size){var r=Math.sqrt(size/math_pi);context.moveTo(r,0),context.arc(0,0,r,0,math_tau)}},symbol_cross={draw:function draw(context,size){var r=Math.sqrt(size/5)/2;context.moveTo(-3*r,-r),context.lineTo(-r,-r),context.lineTo(-r,-3*r),context.lineTo(r,-3*r),context.lineTo(r,-r),context.lineTo(3*r,-r),context.lineTo(3*r,r),context.lineTo(r,r),context.lineTo(r,3*r),context.lineTo(-r,3*r),context.lineTo(-r,r),context.lineTo(-3*r,r),context.closePath()}},tan30=Math.sqrt(1/3),tan30_2=2*tan30,diamond={draw:function draw(context,size){var y=Math.sqrt(size/tan30_2),x=y*tan30;context.moveTo(0,-y),context.lineTo(x,0),context.lineTo(0,y),context.lineTo(-x,0),context.closePath()}},kr=Math.sin(math_pi/10)/Math.sin(7*math_pi/10),kx=Math.sin(math_tau/10)*kr,ky=-Math.cos(math_tau/10)*kr,star={draw:function draw(context,size){var r=Math.sqrt(.8908130915292852*size),x=kx*r,y=ky*r;context.moveTo(0,-r),context.lineTo(x,y);for(var i=1;i<5;++i){var a=math_tau*i/5,c=Math.cos(a),s=Math.sin(a);context.lineTo(s*r,-c*r),context.lineTo(c*x-s*y,s*x+c*y)}context.closePath()}},square={draw:function draw(context,size){var w=Math.sqrt(size),x=-w/2;context.rect(x,x,w,w)}},sqrt3=Math.sqrt(3),triangle={draw:function draw(context,size){var y=-Math.sqrt(size/(3*sqrt3));context.moveTo(0,2*y),context.lineTo(-sqrt3*y,-y),context.lineTo(sqrt3*y,-y),context.closePath()}},wye_s=Math.sqrt(3)/2,wye_k=1/Math.sqrt(12),wye_a=3*(wye_k/2+1),wye={draw:function draw(context,size){var r=Math.sqrt(size/wye_a),x0=r/2,y0=r*wye_k,x1=x0,y1=r*wye_k+r,x2=-x1,y2=y1;context.moveTo(x0,y0),context.lineTo(x1,y1),context.lineTo(x2,y2),context.lineTo(-.5*x0-wye_s*y0,wye_s*x0+-.5*y0),context.lineTo(-.5*x1-wye_s*y1,wye_s*x1+-.5*y1),context.lineTo(-.5*x2-wye_s*y2,wye_s*x2+-.5*y2),context.lineTo(-.5*x0+wye_s*y0,-.5*y0-wye_s*x0),context.lineTo(-.5*x1+wye_s*y1,-.5*y1-wye_s*x1),context.lineTo(-.5*x2+wye_s*y2,-.5*y2-wye_s*x2),context.closePath()}},noop=function(){};function _point(that,x,y){that._context.bezierCurveTo((2*that._x0+that._x1)/3,(2*that._y0+that._y1)/3,(that._x0+2*that._x1)/3,(that._y0+2*that._y1)/3,(that._x0+4*that._x1+x)/6,(that._y0+4*that._y1+y)/6)}function Basis(context){this._context=context}Basis.prototype={areaStart:function areaStart(){this._line=0},areaEnd:function areaEnd(){this._line=NaN},lineStart:function lineStart(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function lineEnd(){switch(this._point){case 3:_point(this,this._x1,this._y1);case 2:this._context.lineTo(this._x1,this._y1)}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function point(x,y){switch(x=+x,y=+y,this._point){case 0:this._point=1,this._line?this._context.lineTo(x,y):this._context.moveTo(x,y);break;case 1:this._point=2;break;case 2:this._point=3,this._context.lineTo((5*this._x0+this._x1)/6,(5*this._y0+this._y1)/6);default:_point(this,x,y)}this._x0=this._x1,this._x1=x,this._y0=this._y1,this._y1=y}};function BasisClosed(context){this._context=context}BasisClosed.prototype={areaStart:noop,areaEnd:noop,lineStart:function lineStart(){this._x0=this._x1=this._x2=this._x3=this._x4=this._y0=this._y1=this._y2=this._y3=this._y4=NaN,this._point=0},lineEnd:function lineEnd(){switch(this._point){case 1:this._context.moveTo(this._x2,this._y2),this._context.closePath();break;case 2:this._context.moveTo((this._x2+2*this._x3)/3,(this._y2+2*this._y3)/3),this._context.lineTo((this._x3+2*this._x2)/3,(this._y3+2*this._y2)/3),this._context.closePath();break;case 3:this.point(this._x2,this._y2),this.point(this._x3,this._y3),this.point(this._x4,this._y4)}},point:function point(x,y){switch(x=+x,y=+y,this._point){case 0:this._point=1,this._x2=x,this._y2=y;break;case 1:this._point=2,this._x3=x,this._y3=y;break;case 2:this._point=3,this._x4=x,this._y4=y,this._context.moveTo((this._x0+4*this._x1+x)/6,(this._y0+4*this._y1+y)/6);break;default:_point(this,x,y)}this._x0=this._x1,this._x1=x,this._y0=this._y1,this._y1=y}};function BasisOpen(context){this._context=context}BasisOpen.prototype={areaStart:function areaStart(){this._line=0},areaEnd:function areaEnd(){this._line=NaN},lineStart:function lineStart(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function lineEnd(){(this._line||0!==this._line&&3===this._point)&&this._context.closePath(),this._line=1-this._line},point:function point(x,y){switch(x=+x,y=+y,this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3;var x0=(this._x0+4*this._x1+x)/6,y0=(this._y0+4*this._y1+y)/6;this._line?this._context.lineTo(x0,y0):this._context.moveTo(x0,y0);break;case 3:this._point=4;default:_point(this,x,y)}this._x0=this._x1,this._x1=x,this._y0=this._y1,this._y1=y}};function Bundle(context,beta){this._basis=new Basis(context),this._beta=beta}Bundle.prototype={lineStart:function lineStart(){this._x=[],this._y=[],this._basis.lineStart()},lineEnd:function lineEnd(){var x=this._x,y=this._y,j=x.length-1;if(j>0)for(var t,x0=x[0],y0=y[0],dx=x[j]-x0,dy=y[j]-y0,i=-1;++i<=j;)t=i/j,this._basis.point(this._beta*x[i]+(1-this._beta)*(x0+t*dx),this._beta*y[i]+(1-this._beta)*(y0+t*dy));this._x=this._y=null,this._basis.lineEnd()},point:function point(x,y){this._x.push(+x),this._y.push(+y)}};(function custom(beta){function bundle(context){return 1===beta?new Basis(context):new Bundle(context,beta)}return bundle.beta=function(beta){return custom(+beta)},bundle})(.85);function cardinal_point(that,x,y){that._context.bezierCurveTo(that._x1+that._k*(that._x2-that._x0),that._y1+that._k*(that._y2-that._y0),that._x2+that._k*(that._x1-x),that._y2+that._k*(that._y1-y),that._x2,that._y2)}function Cardinal(context,tension){this._context=context,this._k=(1-tension)/6}Cardinal.prototype={areaStart:function areaStart(){this._line=0},areaEnd:function areaEnd(){this._line=NaN},lineStart:function lineStart(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._point=0},lineEnd:function lineEnd(){switch(this._point){case 2:this._context.lineTo(this._x2,this._y2);break;case 3:cardinal_point(this,this._x1,this._y1)}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function point(x,y){switch(x=+x,y=+y,this._point){case 0:this._point=1,this._line?this._context.lineTo(x,y):this._context.moveTo(x,y);break;case 1:this._point=2,this._x1=x,this._y1=y;break;case 2:this._point=3;default:cardinal_point(this,x,y)}this._x0=this._x1,this._x1=this._x2,this._x2=x,this._y0=this._y1,this._y1=this._y2,this._y2=y}};(function custom(tension){function cardinal(context){return new Cardinal(context,tension)}return cardinal.tension=function(tension){return custom(+tension)},cardinal})(0);function CardinalClosed(context,tension){this._context=context,this._k=(1-tension)/6}CardinalClosed.prototype={areaStart:noop,areaEnd:noop,lineStart:function lineStart(){this._x0=this._x1=this._x2=this._x3=this._x4=this._x5=this._y0=this._y1=this._y2=this._y3=this._y4=this._y5=NaN,this._point=0},lineEnd:function lineEnd(){switch(this._point){case 1:this._context.moveTo(this._x3,this._y3),this._context.closePath();break;case 2:this._context.lineTo(this._x3,this._y3),this._context.closePath();break;case 3:this.point(this._x3,this._y3),this.point(this._x4,this._y4),this.point(this._x5,this._y5)}},point:function point(x,y){switch(x=+x,y=+y,this._point){case 0:this._point=1,this._x3=x,this._y3=y;break;case 1:this._point=2,this._context.moveTo(this._x4=x,this._y4=y);break;case 2:this._point=3,this._x5=x,this._y5=y;break;default:cardinal_point(this,x,y)}this._x0=this._x1,this._x1=this._x2,this._x2=x,this._y0=this._y1,this._y1=this._y2,this._y2=y}};(function custom(tension){function cardinal(context){return new CardinalClosed(context,tension)}return cardinal.tension=function(tension){return custom(+tension)},cardinal})(0);function CardinalOpen(context,tension){this._context=context,this._k=(1-tension)/6}CardinalOpen.prototype={areaStart:function areaStart(){this._line=0},areaEnd:function areaEnd(){this._line=NaN},lineStart:function lineStart(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._point=0},lineEnd:function lineEnd(){(this._line||0!==this._line&&3===this._point)&&this._context.closePath(),this._line=1-this._line},point:function point(x,y){switch(x=+x,y=+y,this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3,this._line?this._context.lineTo(this._x2,this._y2):this._context.moveTo(this._x2,this._y2);break;case 3:this._point=4;default:cardinal_point(this,x,y)}this._x0=this._x1,this._x1=this._x2,this._x2=x,this._y0=this._y1,this._y1=this._y2,this._y2=y}};(function custom(tension){function cardinal(context){return new CardinalOpen(context,tension)}return cardinal.tension=function(tension){return custom(+tension)},cardinal})(0);function catmullRom_point(that,x,y){var x1=that._x1,y1=that._y1,x2=that._x2,y2=that._y2;if(that._l01_a>math_epsilon){var a=2*that._l01_2a+3*that._l01_a*that._l12_a+that._l12_2a,n=3*that._l01_a*(that._l01_a+that._l12_a);x1=(x1*a-that._x0*that._l12_2a+that._x2*that._l01_2a)/n,y1=(y1*a-that._y0*that._l12_2a+that._y2*that._l01_2a)/n}if(that._l23_a>math_epsilon){var b=2*that._l23_2a+3*that._l23_a*that._l12_a+that._l12_2a,m=3*that._l23_a*(that._l23_a+that._l12_a);x2=(x2*b+that._x1*that._l23_2a-x*that._l12_2a)/m,y2=(y2*b+that._y1*that._l23_2a-y*that._l12_2a)/m}that._context.bezierCurveTo(x1,y1,x2,y2,that._x2,that._y2)}function CatmullRom(context,alpha){this._context=context,this._alpha=alpha}CatmullRom.prototype={areaStart:function areaStart(){this._line=0},areaEnd:function areaEnd(){this._line=NaN},lineStart:function lineStart(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function lineEnd(){switch(this._point){case 2:this._context.lineTo(this._x2,this._y2);break;case 3:this.point(this._x2,this._y2)}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function point(x,y){if(x=+x,y=+y,this._point){var x23=this._x2-x,y23=this._y2-y;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(x23*x23+y23*y23,this._alpha))}switch(this._point){case 0:this._point=1,this._line?this._context.lineTo(x,y):this._context.moveTo(x,y);break;case 1:this._point=2;break;case 2:this._point=3;default:catmullRom_point(this,x,y)}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=x,this._y0=this._y1,this._y1=this._y2,this._y2=y}};var curve_catmullRom=function custom(alpha){function catmullRom(context){return alpha?new CatmullRom(context,alpha):new Cardinal(context,0)}return catmullRom.alpha=function(alpha){return custom(+alpha)},catmullRom}(.5);function CatmullRomClosed(context,alpha){this._context=context,this._alpha=alpha}CatmullRomClosed.prototype={areaStart:noop,areaEnd:noop,lineStart:function lineStart(){this._x0=this._x1=this._x2=this._x3=this._x4=this._x5=this._y0=this._y1=this._y2=this._y3=this._y4=this._y5=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function lineEnd(){switch(this._point){case 1:this._context.moveTo(this._x3,this._y3),this._context.closePath();break;case 2:this._context.lineTo(this._x3,this._y3),this._context.closePath();break;case 3:this.point(this._x3,this._y3),this.point(this._x4,this._y4),this.point(this._x5,this._y5)}},point:function point(x,y){if(x=+x,y=+y,this._point){var x23=this._x2-x,y23=this._y2-y;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(x23*x23+y23*y23,this._alpha))}switch(this._point){case 0:this._point=1,this._x3=x,this._y3=y;break;case 1:this._point=2,this._context.moveTo(this._x4=x,this._y4=y);break;case 2:this._point=3,this._x5=x,this._y5=y;break;default:catmullRom_point(this,x,y)}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=x,this._y0=this._y1,this._y1=this._y2,this._y2=y}};(function custom(alpha){function catmullRom(context){return alpha?new CatmullRomClosed(context,alpha):new CardinalClosed(context,0)}return catmullRom.alpha=function(alpha){return custom(+alpha)},catmullRom})(.5);function CatmullRomOpen(context,alpha){this._context=context,this._alpha=alpha}CatmullRomOpen.prototype={areaStart:function areaStart(){this._line=0},areaEnd:function areaEnd(){this._line=NaN},lineStart:function lineStart(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function lineEnd(){(this._line||0!==this._line&&3===this._point)&&this._context.closePath(),this._line=1-this._line},point:function point(x,y){if(x=+x,y=+y,this._point){var x23=this._x2-x,y23=this._y2-y;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(x23*x23+y23*y23,this._alpha))}switch(this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3,this._line?this._context.lineTo(this._x2,this._y2):this._context.moveTo(this._x2,this._y2);break;case 3:this._point=4;default:catmullRom_point(this,x,y)}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=x,this._y0=this._y1,this._y1=this._y2,this._y2=y}};(function custom(alpha){function catmullRom(context){return alpha?new CatmullRomOpen(context,alpha):new CardinalOpen(context,0)}return catmullRom.alpha=function(alpha){return custom(+alpha)},catmullRom})(.5);function LinearClosed(context){this._context=context}LinearClosed.prototype={areaStart:noop,areaEnd:noop,lineStart:function lineStart(){this._point=0},lineEnd:function lineEnd(){this._point&&this._context.closePath()},point:function point(x,y){x=+x,y=+y,this._point?this._context.lineTo(x,y):(this._point=1,this._context.moveTo(x,y))}};function monotone_sign(x){return x<0?-1:1}function slope3(that,x2,y2){var h0=that._x1-that._x0,h1=x2-that._x1,s0=(that._y1-that._y0)/(h0||h1<0&&-0),s1=(y2-that._y1)/(h1||h0<0&&-0),p=(s0*h1+s1*h0)/(h0+h1);return(monotone_sign(s0)+monotone_sign(s1))*Math.min(Math.abs(s0),Math.abs(s1),.5*Math.abs(p))||0}function slope2(that,t){var h=that._x1-that._x0;return h?(3*(that._y1-that._y0)/h-t)/2:t}function monotone_point(that,t0,t1){var x0=that._x0,y0=that._y0,x1=that._x1,y1=that._y1,dx=(x1-x0)/3;that._context.bezierCurveTo(x0+dx,y0+dx*t0,x1-dx,y1-dx*t1,x1,y1)}function MonotoneX(context){this._context=context}function MonotoneY(context){this._context=new ReflectContext(context)}function ReflectContext(context){this._context=context}function Natural(context){this._context=context}function controlPoints(x){var i,m,n=x.length-1,a=new Array(n),b=new Array(n),r=new Array(n);for(a[0]=0,b[0]=2,r[0]=x[0]+2*x[1],i=1;i=0;--i)a[i]=(r[i]-a[i+1])/b[i];for(b[n-1]=(x[n]+a[n-1])/2,i=0;i=0&&(this._t=1-this._t,this._line=1-this._line)},point:function point(x,y){switch(x=+x,y=+y,this._point){case 0:this._point=1,this._line?this._context.lineTo(x,y):this._context.moveTo(x,y);break;case 1:this._point=2;default:if(this._t<=0)this._context.lineTo(this._x,y),this._context.lineTo(x,y);else{var x1=this._x*(1-this._t)+x*this._t;this._context.lineTo(x1,this._y),this._context.lineTo(x1,y)}}this._x=x,this._y=y}};var curve_step=function(context){return new Step(context,.5)};function stepBefore(context){return new Step(context,0)}function stepAfter(context){return new Step(context,1)}var none=function(series,order){if((n=series.length)>1)for(var j,s0,n,i=1,s1=series[order[0]],m=s1.length;i=0;)o[n]=n;return o};function stackValue(d,key){return d[key]}var order_ascending=function(series){var sums=series.map(ascending_sum);return order_none(series).sort(function(a,b){return sums[a]-sums[b]})};function ascending_sum(series){for(var v,s=0,i=-1,n=series.length;++i0)){if(r/=dx,dx<0){if(r0){if(r>t1)return;r>t0&&(t0=r)}if(r=x1-ax,dx||!(r<0)){if(r/=dx,dx<0){if(r>t1)return;r>t0&&(t0=r)}else if(dx>0){if(r0)){if(r/=dy,dy<0){if(r0){if(r>t1)return;r>t0&&(t0=r)}if(r=y1-ay,dy||!(r<0)){if(r/=dy,dy<0){if(r>t1)return;r>t0&&(t0=r)}else if(dy>0){if(r0||t1<1)||(t0>0&&(edge[0]=[ax+t0*dx,ay+t0*dy]),t1<1&&(edge[1]=[ax+t1*dx,ay+t1*dy]),!0)}}}}}function connectEdge(edge,x0,y0,x1,y1){var v1=edge[1];if(v1)return!0;var fm,fb,v0=edge[0],left=edge.left,right=edge.right,lx=left[0],ly=left[1],rx=right[0],ry=right[1],fx=(lx+rx)/2,fy=(ly+ry)/2;if(ry===ly){if(fx=x1)return;if(lx>rx){if(v0){if(v0[1]>=y1)return}else v0=[fx,y0];v1=[fx,y1]}else{if(v0){if(v0[1]1)if(lx>rx){if(v0){if(v0[1]>=y1)return}else v0=[(y0-fb)/fm,y0];v1=[(y1-fb)/fm,y1]}else{if(v0){if(v0[1]=x1)return}else v0=[x0,fm*x0+fb];v1=[x1,fm*x1+fb]}else{if(v0){if(v0[0]=-Diagram_epsilon2)){var ha=ax*ax+ay*ay,hc=cx*cx+cy*cy,x=(cy*ha-ay*hc)/d,y=(ax*hc-cx*ha)/d,circle=circlePool.pop()||new function Circle(){RedBlackNode(this),this.x=this.y=this.arc=this.site=this.cy=null};circle.arc=arc,circle.site=cSite,circle.x=x+bx,circle.y=(circle.cy=y+by)+Math.sqrt(x*x+y*y),arc.circle=circle;for(var before=null,node=circles._;node;)if(circle.yDiagram_epsilon)node=node.L;else{if(!((dxr=x-rightBreakPoint(node,directrix))>Diagram_epsilon)){dxl>-Diagram_epsilon?(lArc=node.P,rArc=node):dxr>-Diagram_epsilon?(lArc=node,rArc=node.N):lArc=rArc=node;break}if(!node.R){lArc=node;break}node=node.R}!function createCell(site){return Diagram_cells[site.index]={site:site,halfedges:[]}}(site);var newArc=createBeach(site);if(beaches.insert(lArc,newArc),lArc||rArc){if(lArc===rArc)return detachCircle(lArc),rArc=createBeach(lArc.site),beaches.insert(newArc,rArc),newArc.edge=rArc.edge=createEdge(lArc.site,newArc.site),attachCircle(lArc),void attachCircle(rArc);if(rArc){detachCircle(lArc),detachCircle(rArc);var lSite=lArc.site,ax=lSite[0],ay=lSite[1],bx=site[0]-ax,by=site[1]-ay,rSite=rArc.site,cx=rSite[0]-ax,cy=rSite[1]-ay,d=2*(bx*cy-by*cx),hb=bx*bx+by*by,hc=cx*cx+cy*cy,vertex=[(cy*hb-by*hc)/d+ax,(bx*hc-cx*hb)/d+ay];setEdgeEnd(rArc.edge,lSite,rSite,vertex),newArc.edge=createEdge(lSite,site,null,vertex),rArc.edge=createEdge(site,rSite,null,vertex),attachCircle(lArc),attachCircle(rArc)}else newArc.edge=createEdge(lArc.site,newArc.site)}}function leftBreakPoint(arc,directrix){var site=arc.site,rfocx=site[0],rfocy=site[1],pby2=rfocy-directrix;if(!pby2)return rfocx;var lArc=arc.P;if(!lArc)return-1/0;var lfocx=(site=lArc.site)[0],lfocy=site[1],plby2=lfocy-directrix;if(!plby2)return lfocx;var hl=lfocx-rfocx,aby2=1/pby2-1/plby2,b=hl/plby2;return aby2?(-b+Math.sqrt(b*b-2*aby2*(hl*hl/(-2*plby2)-lfocy+plby2/2+rfocy-pby2/2)))/aby2+rfocx:(rfocx+lfocx)/2}function rightBreakPoint(arc,directrix){var rArc=arc.N;if(rArc)return leftBreakPoint(rArc,directrix);var site=arc.site;return site[1]===directrix?site[0]:1/0}var beaches,Diagram_cells,circles,Diagram_edges,Diagram_epsilon=1e-6,Diagram_epsilon2=1e-12;function triangleArea(a,b,c){return(a[0]-c[0])*(b[1]-a[1])-(a[0]-b[0])*(c[1]-a[1])}function lexicographic(a,b){return b[1]-a[1]||b[0]-a[0]}function Diagram(sites,extent){var x,y,circle,site=sites.sort(lexicographic).pop();for(Diagram_edges=[],Diagram_cells=new Array(sites.length),beaches=new src_RedBlackTree,circles=new src_RedBlackTree;;)if(circle=firstCircle,site&&(!circle||site[1]Diagram_epsilon||Math.abs(edge[0][1]-edge[1][1])>Diagram_epsilon)||delete Diagram_edges[i]}(x0,y0,x1,y1),function clipCells(x0,y0,x1,y1){var iCell,cell,site,iHalfedge,halfedges,nHalfedges,start,startX,startY,end,endX,endY,nCells=Diagram_cells.length,cover=!0;for(iCell=0;iCellDiagram_epsilon||Math.abs(endY-startY)>Diagram_epsilon)&&(halfedges.splice(iHalfedge,0,Diagram_edges.push(createBorderEdge(site,end,Math.abs(endX-x0)Diagram_epsilon?[x0,Math.abs(startX-x0)Diagram_epsilon?[Math.abs(startY-y1)Diagram_epsilon?[x1,Math.abs(startX-x1)Diagram_epsilon?[Math.abs(startY-y0)=n)return null;var dx=x-cell.site[0],dy=y-cell.site[1],d2=dx*dx+dy*dy;do{cell=that.cells[i0=i1],i1=null,cell.halfedges.forEach(function(e){var edge=that.edges[e],v=edge.left;if(v!==cell.site&&v||(v=edge.right)){var vx=x-v[0],vy=y-v[1],v2=vx*vx+vy*vy;v20?0:domain[0],domain[1]=domain[1]>0?domain[1]:0),domain},common_utils_unionDomain=function unionDomain(domains,fieldType){var _ref2,domain=[];(domains=domains.filter(function(dom){return dom&&dom.length})).length&&(domain=fieldType===dist_datamodel.DimensionSubtype.CATEGORICAL?(_ref2=[]).concat.apply(_ref2,_toConsumableArray(domains)):[Math.min.apply(Math,_toConsumableArray(domains.map(function(d){return d[0]}))),Math.max.apply(Math,_toConsumableArray(domains.map(function(d){return d[1]})))]);return domain},symbolFns={circle:symbol_circle,cross:symbol_cross,diamond:diamond,square:square,star:star,wye:wye,triangle:triangle},easeFns={cubic:cubicInOut,bounce:bounceOut,linear:function src_linear_linear(t){return+t},elastic:elasticOut,back:backInOut,poly:polyInOut,circle:function circleInOut(t){return((t*=2)<=1?1-Math.sqrt(1-t*t):Math.sqrt(1-(t-=2)*t)+1)/2}},common_utils_getClosestIndexOf=function getClosestIndexOf(arr,value,side){for(var mid,d1,low=0,high=arr.length-1;lowvalue?0===high?high:"left"===side?high-1:high:high===arr.length-1?high:"left"===side?high:high+1},getNearestValue=function getNearestValue(data,key){var filterData=data.filter(function(d){return"number"==typeof d});return filterData[common_utils_getClosestIndexOf(filterData,key)]},getWindow=function getWindow(){return window},getQualifiedClassName=(requestAnimationFrame,cancelAnimationFrame,function getQualifiedClassName(cls,id,prefix){return cls=cls.replace(/^\.*/,""),["".concat(prefix,"-").concat(cls),"".concat(prefix,"-").concat(cls,"-").concat(id)]}),defaultValue=function defaultValue(param,value){return void 0===param||"object"===common_utils_typeof(param)&&!param?value:param},objectIterator=function objectIterator(obj,fn){for(var key in obj)Object.hasOwnProperty.call(obj,key)&&fn(key,obj)},common_utils_Voronoi=function(){function Voronoi(){var data=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];common_utils_classCallCheck(this,Voronoi),this._voronoi=src_voronoi().x(function(d){return d.x}).y(function(d){return d.y}),this.data(data)}return common_utils_createClass(Voronoi,[{key:"data",value:function data(_data){return _data&&(this._voronoiFn=this._voronoi(_data)),this}},{key:"find",value:function find(x,y,radius){return this._voronoiFn.find(x,y,radius)}}]),Voronoi}(),addListenerToNamespace=function addListenerToNamespace(namespaceInf,fn,context){var key=namespaceInf.key,namespace=namespaceInf.namespace;namespace?(!context._listeners[namespace]&&(context._listeners[namespace]=[]),key||(key=Object.keys(context._listeners[namespace]).length),context._listeners[namespace][key]=fn):(key=Object.keys(context._listeners).length,context._listeners[key]=fn)},getObjProp=function getObjProp(obj){if(void 0===obj||null===obj)return obj;for(var retObj=obj,_len=arguments.length,fields=new Array(_len>1?_len-1:0),_key=1;_key<_len;_key++)fields[_key-1]=arguments[_key];for(var i=0,len=fields.length;i3&&void 0!==arguments[3]?arguments[3]:{},props=propNames;Array.isArray(propNames)||(props=[propNames]);var fn=this.model.next(props,callBack,instantCall);return addListenerToNamespace(namespaceInf,fn,this),this}},{key:"registerImmediateListener",value:function registerImmediateListener(propNames,callBack,instantCall){var namespaceInf=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},props=propNames;Array.isArray(propNames)||(props=[propNames]);var fn=this.model.on(props,callBack,instantCall);return addListenerToNamespace(namespaceInf,fn,this),this}},{key:"get",value:function get(propName){return this.model.prop(propName)}},{key:"computed",value:function computed(propName,callBack){return this.model.calculatedProp(propName,callBack)}},{key:"append",value:function append(propName,value){return this.model.append(propName,value),this}},{key:"unsubscribeAll",value:function unsubscribeAll(){return Object.values(this._listeners).forEach(function(fn){return fn()}),this}},{key:"unsubscribe",value:function unsubscribe(){var namespaceInf=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},namespace=namespaceInf.namespace,key=namespaceInf.key,listeners=this._listeners[namespace];if(key){var fn=getObjProp(listeners,key);fn&&fn()}else Object.values(listeners).forEach(function(fn){return fn()}),this._listeners[namespace]=[];return this}}]),Store}(),intSanitizer=function intSanitizer(val){var arr=val.toString().match(/(\d+)(px)*/g);return arr?parseInt(arr[0],10):null},common_utils_transactor=function transactor(holder,options,model){var conf,namespaceInf=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},store=model&&model instanceof hyperdis_default.a?model:hyperdis_default.a.create({}),stateProps={};for(var prop in options)if({}.hasOwnProperty.call(options,prop)){var addAsMethod=!(conf=options[prop]).meta||conf.meta.addAsMethod,nameSpaceProp=void 0,namespace=namespaceInf.namespace;nameSpaceProp=namespace?"".concat(namespace,".").concat(prop):prop,stateProps[prop]=conf.value,!1!==addAsMethod&&(holder[prop]=function(context,meta,nsProp){return function(){for(var val,compareTo,_len2=arguments.length,params=new Array(_len2),_key2=0;_key2<_len2;_key2++)params[_key2]=arguments[_key2];var paramsLen=params.length,prevVal=store.prop(nsProp);if(paramsLen){var spreadParams=meta&&meta.spreadParams;val=params;var values=[];if(meta){for(var i=0;i=0;i--)if(arr1[i]!==arr2[i])return!1;return!0}(oldVal,newVal):"Object"===type?Object.is(oldVal,newVal):oldVal===newVal}},ERROR_MSG={INTERFACE_IMPL:"Method not implemented"},mergeRecursive=function mergeRecursive(source,sink){for(var prop in sink)isSimpleObject(source[prop])&&isSimpleObject(sink[prop])?mergeRecursive(source[prop],sink[prop]):sink[prop]instanceof Object&&sink[prop].constructor===Object?(source[prop]={},mergeRecursive(source[prop],sink[prop])):source[prop]=sink[prop];return source},common_utils_createSelection=function createSelection(sel,appendObj,data,idFn){var selection=sel||function dataSelect(idFn){return new DataSystem_selection(idFn)}(idFn),mergedSelection=(selection=selection.data(data)).enter().append(appendObj).merge(selection),exitSelection=selection.exit();return exitSelection.getObjects().forEach(function(inst){return inst.remove()}),exitSelection.remove(),mergedSelection},common_utils_interpolator=function interpolator(){return src_value},common_utils_numberInterpolator=function numberInterpolator(){return src_number},common_utils_piecewiseInterpolator=function piecewiseInterpolator(){return piecewise_piecewise};var rgbToHsv=function rgbToHsv(r,g,b){var a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:1;r=+r,g=+g,b=+b,a=+a,r/=255,g/=255,b/=255;var h,s,max=Math.max(r,g,b),min=Math.min(r,g,b),l=(max+min)/2;if(max===min)h=s=0;else{var d=max-min;switch(s=l>.5?d/(2-max-min):d/(max+min),max){case r:h=(g-b)/d+(g=range[0]&&val<=range[1]})},{saveChild:!1,mode:mode})},common_utils_getDataModelFromIdentifiers=function getDataModelFromIdentifiers(dataModel,identifiers,mode){var filteredDataModel;if(identifiers instanceof Array){var fieldsConfig=dataModel.getFieldsConfig(),dataArr=identifiers.slice(1,identifiers.length);if(identifiers instanceof Function)filteredDataModel=identifiers(dataModel,{},!1);else if(identifiers instanceof Array&&identifiers[0].length){var filteredSchema=identifiers[0].filter(function(d){return d in fieldsConfig});filteredDataModel=dataModel.select(function(fields){var include=!0;return filteredSchema.forEach(function(propField,idx){var value=fields[propField].valueOf(),index=dataArr.findIndex(function(d){return d[idx]===value});include=include&&-1!==index}),include},{saveChild:!1,mode:mode})}else filteredDataModel=dataModel.select(function(){return!1},{saveChild:!1,mode:mode})}else filteredDataModel=getDataModelFromRange(dataModel,identifiers,mode);return filteredDataModel},common_utils_registerListeners=function registerListeners(context,listenerMap){for(var _len3=arguments.length,params=new Array(_len3>2?_len3-2:0),_key3=2;_key3<_len3;_key3++)params[_key3-2]=arguments[_key3];var propListenerMap=listenerMap.apply(void 0,[context].concat(params));for(var key in propListenerMap)if({}.hasOwnProperty.call(propListenerMap,key)){var namespace=params[0],ns=null;namespace&&(ns=namespace.local);var mapObj=propListenerMap[key],propType=mapObj.type,props=mapObj.props,listenerFn=mapObj.listener;context.store()[propType](props,listenerFn,!1,{namespace:ns})}},isValidValue=function isValidValue(value){return!isNaN(value)&&value!==-1/0&&value!==1/0},toArray=function toArray(arr){return arr instanceof Array?arr:[arr]},common_utils_getSymbol=function getSymbol(type){return function(){var type=d3_shape_src_constant(symbol_circle),size=d3_shape_src_constant(64),context=null;function symbol(){var buffer;if(context||(context=buffer=src_path()),type.apply(this,arguments).draw(context,+size.apply(this,arguments)),buffer)return context=null,buffer+""||null}return symbol.type=function(_){return arguments.length?(type="function"==typeof _?_:d3_shape_src_constant(_),symbol):type},symbol.size=function(_){return arguments.length?(size="function"==typeof _?_:d3_shape_src_constant(+_),symbol):size},symbol.context=function(_){return arguments.length?(context=null==_?null:_,symbol):context},symbol}().type(symbolFns[type])},stackOrders=(_defineProperty(_stackOrders={},"none",order_none),_defineProperty(_stackOrders,"ascending",order_ascending),_defineProperty(_stackOrders,"descending",function(series){return order_ascending(series).reverse()}),_stackOrders),stackOffsets=(_defineProperty(_stackOffsets={},"diverging",function(series,order){if((n=series.length)>0)for(var i,d,dy,yp,yn,n,j=0,m=series[order[0]].length;j=0?(d[0]=yp,d[1]=yp+=dy):dy<0?(d[1]=yn,d[0]=yn+=dy):d[0]=yp}),_defineProperty(_stackOffsets,"none",none),_defineProperty(_stackOffsets,"expand",function(series,order){if((n=series.length)>0){for(var i,n,y,j=0,m=series[0].length;j0&&(m=(s0=series[order[0]]).length)>0){for(var s0,m,n,y=0,j=1;j0&&(sum+=v);for(null!=sortValues?index.sort(function(i,j){return sortValues(arcs[i],arcs[j])}):null!=sort&&index.sort(function(i,j){return sort(data[i],data[j])}),i=0,k=sum?(da-n*pa)/sum:0;i0?v*k:0)+pa,arcs[j]={data:data[j],index:i,value:v,startAngle:a0,endAngle:a1,padAngle:p};return arcs}return pie.value=function(_){return arguments.length?(value="function"==typeof _?_:d3_shape_src_constant(+_),pie):value},pie.sortValues=function(_){return arguments.length?(sortValues=_,sort=null,pie):sortValues},pie.sort=function(_){return arguments.length?(sort=_,sortValues=null,pie):sort},pie.startAngle=function(_){return arguments.length?(startAngle="function"==typeof _?_:d3_shape_src_constant(+_),pie):startAngle},pie.endAngle=function(_){return arguments.length?(endAngle="function"==typeof _?_:d3_shape_src_constant(+_),pie):endAngle},pie.padAngle=function(_){return arguments.length?(padAngle="function"==typeof _?_:d3_shape_src_constant(+_),pie):padAngle},pie},arc:function(){var innerRadius=arcInnerRadius,outerRadius=arcOuterRadius,cornerRadius=d3_shape_src_constant(0),padRadius=null,startAngle=arcStartAngle,endAngle=arcEndAngle,padAngle=arcPadAngle,context=null;function arc(){var buffer,r,r0=+innerRadius.apply(this,arguments),r1=+outerRadius.apply(this,arguments),a0=startAngle.apply(this,arguments)-halfPi,a1=endAngle.apply(this,arguments)-halfPi,da=abs(a1-a0),cw=a1>a0;if(context||(context=buffer=src_path()),r1math_epsilon)if(da>math_tau-math_epsilon)context.moveTo(r1*cos(a0),r1*sin(a0)),context.arc(0,0,r1,a0,a1,!cw),r0>math_epsilon&&(context.moveTo(r0*cos(a1),r0*sin(a1)),context.arc(0,0,r0,a1,a0,cw));else{var t0,t1,a01=a0,a11=a1,a00=a0,a10=a1,da0=da,da1=da,ap=padAngle.apply(this,arguments)/2,rp=ap>math_epsilon&&(padRadius?+padRadius.apply(this,arguments):math_sqrt(r0*r0+r1*r1)),rc=math_min(abs(r1-r0)/2,+cornerRadius.apply(this,arguments)),rc0=rc,rc1=rc;if(rp>math_epsilon){var p0=asin(rp/r0*sin(ap)),p1=asin(rp/r1*sin(ap));(da0-=2*p0)>math_epsilon?(a00+=p0*=cw?1:-1,a10-=p0):(da0=0,a00=a10=(a0+a1)/2),(da1-=2*p1)>math_epsilon?(a01+=p1*=cw?1:-1,a11-=p1):(da1=0,a01=a11=(a0+a1)/2)}var x01=r1*cos(a01),y01=r1*sin(a01),x10=r0*cos(a10),y10=r0*sin(a10);if(rc>math_epsilon){var oc,x11=r1*cos(a11),y11=r1*sin(a11),x00=r0*cos(a00),y00=r0*sin(a00);if(da1?0:x<-1?math_pi:Math.acos(x)}((ax*bx+ay*by)/(math_sqrt(ax*ax+ay*ay)*math_sqrt(bx*bx+by*by)))/2),lc=math_sqrt(oc[0]*oc[0]+oc[1]*oc[1]);rc0=math_min(rc,(r0-lc)/(kc-1)),rc1=math_min(rc,(r1-lc)/(kc+1))}}da1>math_epsilon?rc1>math_epsilon?(t0=cornerTangents(x00,y00,x01,y01,r1,rc1,cw),t1=cornerTangents(x11,y11,x10,y10,r1,rc1,cw),context.moveTo(t0.cx+t0.x01,t0.cy+t0.y01),rc1math_epsilon&&da0>math_epsilon?rc0>math_epsilon?(t0=cornerTangents(x10,y10,x11,y11,r0,-rc0,cw),t1=cornerTangents(x01,y01,x00,y00,r0,-rc0,cw),context.lineTo(t0.cx+t0.x01,t0.cy+t0.y01),rc01?_len4-1:0),_key4=1;_key4<_len4;_key4++)measureFieldNames[_key4-1]=arguments[_key4];var filteredReducers={};if(dataModel instanceof datamodel_default.a){var derivations=[].concat(_toConsumableArray(dataModel.getDerivations().reverse()),_toConsumableArray(dataModel.getAncestorDerivations().reverse())),nearestReducers=defaultValue(getObjProp(derivations.find(function(derv){return derv.op===dist_datamodel.DM_DERIVATIVES.GROUPBY}),"criteria"),{}),measures=dataModel.getFieldspace().getMeasure();(measureFieldNames=measureFieldNames.length?measureFieldNames:Object.keys(measures)).forEach(function(measureName){if(nearestReducers[measureName])filteredReducers[measureName]=nearestReducers[measureName];else{var measureField=measures[measureName];measureField&&(filteredReducers[measureName]=measureField.defAggFn())}})}return filteredReducers},retrieveFieldDisplayName=function retrieveFieldDisplayName(dm,fieldName){return dm.getFieldspace().fieldsObj()[fieldName].displayName()},xhtml="http://www.w3.org/1999/xhtml",src_namespaces={svg:"http://www.w3.org/2000/svg",xhtml:xhtml,xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace",xmlns:"http://www.w3.org/2000/xmlns/"},src_namespace=function(name){var prefix=name+="",i=prefix.indexOf(":");return i>=0&&"xmlns"!==(prefix=name.slice(0,i))&&(name=name.slice(i+1)),src_namespaces.hasOwnProperty(prefix)?{space:src_namespaces[prefix],local:name}:name};var creator=function(name){var fullname=src_namespace(name);return(fullname.local?function creatorFixed(fullname){return function(){return this.ownerDocument.createElementNS(fullname.space,fullname.local)}}:function creatorInherit(name){return function(){var document=this.ownerDocument,uri=this.namespaceURI;return uri===xhtml&&document.documentElement.namespaceURI===xhtml?document.createElement(name):document.createElementNS(uri,name)}})(fullname)};function selector_none(){}var src_selector=function(selector){return null==selector?selector_none:function(){return this.querySelector(selector)}};function selectorAll_empty(){return[]}var selectorAll=function(selector){return null==selector?selectorAll_empty:function(){return this.querySelectorAll(selector)}},matcher=function(selector){return function(){return this.matches(selector)}},sparse=function(update){return new Array(update.length)};function EnterNode(parent,datum){this.ownerDocument=parent.ownerDocument,this.namespaceURI=parent.namespaceURI,this._next=null,this._parent=parent,this.__data__=datum}EnterNode.prototype={constructor:EnterNode,appendChild:function appendChild(child){return this._parent.insertBefore(child,this._next)},insertBefore:function insertBefore(child,next){return this._parent.insertBefore(child,next)},querySelector:function querySelector(selector){return this._parent.querySelector(selector)},querySelectorAll:function querySelectorAll(selector){return this._parent.querySelectorAll(selector)}};var keyPrefix="$";function bindIndex(parent,group,enter,update,exit,data){for(var node,i=0,groupLength=group.length,dataLength=data.length;ib?1:a>=b?0:NaN}var src_window=function(node){return node.ownerDocument&&node.ownerDocument.defaultView||node.document&&node||node.defaultView};function styleValue(node,name){return node.style.getPropertyValue(name)||src_window(node).getComputedStyle(node,null).getPropertyValue(name)}function classArray(string){return string.trim().split(/^|\s+/)}function classList(node){return node.classList||new ClassList(node)}function ClassList(node){this._node=node,this._names=classArray(node.getAttribute("class")||"")}function classedAdd(node,names){for(var list=classList(node),i=-1,n=names.length;++i=0&&(this._names.splice(i,1),this._node.setAttribute("class",this._names.join(" ")))},contains:function contains(name){return this._names.indexOf(name)>=0}};function textRemove(){this.textContent=""}function htmlRemove(){this.innerHTML=""}function raise_raise(){this.nextSibling&&this.parentNode.appendChild(this)}function lower(){this.previousSibling&&this.parentNode.insertBefore(this,this.parentNode.firstChild)}function constantNull(){return null}function remove_remove(){var parent=this.parentNode;parent&&parent.removeChild(this)}function selection_cloneShallow(){return this.parentNode.insertBefore(this.cloneNode(!1),this.nextSibling)}function selection_cloneDeep(){return this.parentNode.insertBefore(this.cloneNode(!0),this.nextSibling)}var filterEvents={},on_event=null;"undefined"!=typeof document&&("onmouseenter"in document.documentElement||(filterEvents={mouseenter:"mouseover",mouseleave:"mouseout"}));function filterContextListener(listener,index,group){return listener=contextListener(listener,index,group),function(event){var related=event.relatedTarget;related&&(related===this||8&related.compareDocumentPosition(this))||listener.call(this,event)}}function contextListener(listener,index,group){return function(event1){var event0=on_event;on_event=event1;try{listener.call(this,this.__data__,index,group)}finally{on_event=event0}}}function onRemove(typename){return function(){var on=this.__on;if(on){for(var o,j=0,i=-1,m=on.length;j=i1&&(i1=i0+1);!(next=updateGroup[i1])&&++i1=0;)(node=group[i])&&(next&&4^node.compareDocumentPosition(next)&&next.parentNode.insertBefore(node,next),next=node);return this},sort:function(compare){function compareNode(a,b){return a&&b?compare(a.__data__,b.__data__):!a-!b}compare||(compare=sort_ascending);for(var groups=this._groups,m=groups.length,sortgroups=new Array(m),j=0;j1?this.each((null==value?function styleRemove(name){return function(){this.style.removeProperty(name)}}:"function"==typeof value?function styleFunction(name,value,priority){return function(){var v=value.apply(this,arguments);null==v?this.style.removeProperty(name):this.style.setProperty(name,v,priority)}}:function styleConstant(name,value,priority){return function(){this.style.setProperty(name,value,priority)}})(name,value,null==priority?"":priority)):styleValue(this.node(),name)},property:function(name,value){return arguments.length>1?this.each((null==value?function propertyRemove(name){return function(){delete this[name]}}:"function"==typeof value?function propertyFunction(name,value){return function(){var v=value.apply(this,arguments);null==v?delete this[name]:this[name]=v}}:function propertyConstant(name,value){return function(){this[name]=value}})(name,value)):this.node()[name]},classed:function(name,value){var names=classArray(name+"");if(arguments.length<2){for(var list=classList(this.node()),i=-1,n=names.length;++i=0&&(name=t.slice(i+1),t=t.slice(0,i)),{type:t,name:name}})}(typename+""),n=typenames.length;if(!(arguments.length<2)){for(on=value?onAdd:onRemove,null==capture&&(capture=!1),i=0;i=0&&(name=t.slice(i+1),t=t.slice(0,i)),t&&!types.hasOwnProperty(t))throw new Error("unknown type: "+t);return{type:t,name:name}})}(typename+"",_),i=-1,n=T.length;if(!(arguments.length<2)){if(null!=callback&&"function"!=typeof callback)throw new Error("invalid callback: "+callback);for(;++i0)for(var n,t,args=new Array(n),i=0;iclickDistance2}gestures.mouse("drag")}function mouseupped(){src_select(on_event.view).on("mousemove.drag mouseup.drag",null),function yesdrag(view,noclick){var root=view.document.documentElement,selection=src_select(view).on("dragstart.drag",null);noclick&&(selection.on("click.drag",noevent,!0),setTimeout(function(){selection.on("click.drag",null)},0)),"onselectstart"in root?selection.on("selectstart.drag",null):(root.style.MozUserSelect=root.__noselect,delete root.__noselect)}(on_event.view,mousemoving),noevent(),gestures.mouse("end")}function touchstarted(){if(filter.apply(this,arguments)){var i,gesture,touches=on_event.changedTouches,c=container.apply(this,arguments),n=touches.length;for(i=0;i=0&&t._call.call(null,e),t=t._next;--timer_frame}()}finally{timer_frame=0,function nap(){var t0,t2,t1=taskHead,time=1/0;for(;t1;)t1._call?(time>t1._time&&(time=t1._time),t0=t1,t1=t1._next):(t2=t1._next,t1._next=null,t1=t0?t0._next=t2:taskHead=t2);taskTail=t0,sleep(time)}(),clockNow=0}}function poke(){var now=clock.now(),delay=now-clockLast;delay>pokeDelay&&(clockSkew-=delay,clockLast=now)}function sleep(time){timer_frame||(timeout&&(timeout=clearTimeout(timeout)),time-clockNow>24?(time<1/0&&(timeout=setTimeout(wake,time-clock.now()-clockSkew)),timer_interval&&(timer_interval=clearInterval(timer_interval))):(timer_interval||(clockLast=clock.now(),timer_interval=setInterval(poke,pokeDelay)),timer_frame=1,setFrame(wake)))}Timer.prototype=timer_timer.prototype={constructor:Timer,restart:function restart(callback,delay,time){if("function"!=typeof callback)throw new TypeError("callback is not a function");time=(null==time?now():+time)+(null==delay?0:+delay),this._next||taskTail===this||(taskTail?taskTail._next=this:taskHead=this,taskTail=this),this._call=callback,this._time=time,sleep()},stop:function stop(){this._call&&(this._call=null,this._time=1/0,sleep())}};var src_timeout=function(callback,delay,time){var t=new Timer;return delay=null==delay?0:+delay,t.restart(function(elapsed){t.stop(),callback(elapsed+delay)},delay,time),t},emptyOn=src_dispatch("start","end","cancel","interrupt"),emptyTween=[],CREATED=0,SCHEDULED=1,STARTING=2,STARTED=3,RUNNING=4,ENDING=5,ENDED=6,transition_schedule=function(node,name,id,index,group,timing){var schedules=node.__transition;if(schedules){if(id in schedules)return}else node.__transition={};!function schedule_create(node,id,self){var tween,schedules=node.__transition;function start(elapsed){var i,j,n,o;if(self.state!==SCHEDULED)return stop();for(i in schedules)if((o=schedules[i]).name===self.name){if(o.state===STARTED)return src_timeout(start);o.state===RUNNING?(o.state=ENDED,o.timer.stop(),o.on.call("interrupt",node,node.__data__,o.index,o.group),delete schedules[i]):+iCREATED)throw new Error("too late; already scheduled");return schedule}function schedule_set(node,id){var schedule=schedule_get(node,id);if(schedule.state>STARTED)throw new Error("too late; already running");return schedule}function schedule_get(node,id){var schedule=node.__transition;if(!schedule||!(schedule=schedule[id]))throw new Error("transition not found");return schedule}function tweenValue(transition,name,value){var id=transition._id;return transition.each(function(){var schedule=schedule_set(this,id);(schedule.value||(schedule.value={}))[name]=value.apply(this,arguments)}),function(node){return schedule_get(node,id).value[name]}}var transition_interpolate=function(a,b){var c;return("number"==typeof b?src_number:b instanceof color_color?src_rgb:(c=color_color(b))?(b=c,src_rgb):src_string)(a,b)};var transition_selection_Selection=src_selection.prototype.constructor;function style_styleRemove(name){return function(){this.style.removeProperty(name)}}var transition_id=0;function Transition(groups,parents,name,id){this._groups=groups,this._parents=parents,this._name=name,this._id=id}function newId(){return++transition_id}var selection_prototype=src_selection.prototype;Transition.prototype=function src_transition_transition(name){return src_selection().transition(name)}.prototype={constructor:Transition,select:function(select){var name=this._name,id=this._id;"function"!=typeof select&&(select=src_selector(select));for(var groups=this._groups,m=groups.length,subgroups=new Array(m),j=0;j=0&&(t=t.slice(0,i)),!t||"start"===t})}(name)?init:schedule_set;return function(){var schedule=sit(this,id),on=schedule.on;on!==on0&&(on1=(on0=on).copy()).on(name,listener),schedule.on=on1}}(id,name,listener))},attr:function(name,value){var fullname=src_namespace(name),i="transform"===fullname?interpolateTransformSvg:transition_interpolate;return this.attrTween(name,"function"==typeof value?(fullname.local?function attr_attrFunctionNS(fullname,interpolate,value){var string00,string10,interpolate0;return function(){var string0,string1,value1=value(this);if(null!=value1)return(string0=this.getAttributeNS(fullname.space,fullname.local))===(string1=value1+"")?null:string0===string00&&string1===string10?interpolate0:(string10=string1,interpolate0=interpolate(string00=string0,value1));this.removeAttributeNS(fullname.space,fullname.local)}}:function attr_attrFunction(name,interpolate,value){var string00,string10,interpolate0;return function(){var string0,string1,value1=value(this);if(null!=value1)return(string0=this.getAttribute(name))===(string1=value1+"")?null:string0===string00&&string1===string10?interpolate0:(string10=string1,interpolate0=interpolate(string00=string0,value1));this.removeAttribute(name)}})(fullname,i,tweenValue(this,"attr."+name,value)):null==value?(fullname.local?function attr_attrRemoveNS(fullname){return function(){this.removeAttributeNS(fullname.space,fullname.local)}}:function attr_attrRemove(name){return function(){this.removeAttribute(name)}})(fullname):(fullname.local?function attr_attrConstantNS(fullname,interpolate,value1){var string00,interpolate0,string1=value1+"";return function(){var string0=this.getAttributeNS(fullname.space,fullname.local);return string0===string1?null:string0===string00?interpolate0:interpolate0=interpolate(string00=string0,value1)}}:function attr_attrConstant(name,interpolate,value1){var string00,interpolate0,string1=value1+"";return function(){var string0=this.getAttribute(name);return string0===string1?null:string0===string00?interpolate0:interpolate0=interpolate(string00=string0,value1)}})(fullname,i,value))},attrTween:function(name,value){var key="attr."+name;if(arguments.length<2)return(key=this.tween(key))&&key._value;if(null==value)return this.tween(key,null);if("function"!=typeof value)throw new Error;var fullname=src_namespace(name);return this.tween(key,(fullname.local?function attrTweenNS(fullname,value){var t0,i0;function tween(){var i=value.apply(this,arguments);return i!==i0&&(t0=(i0=i)&&function attrInterpolateNS(fullname,i){return function(t){this.setAttributeNS(fullname.space,fullname.local,i(t))}}(fullname,i)),t0}return tween._value=value,tween}:function attrTween(name,value){var t0,i0;function tween(){var i=value.apply(this,arguments);return i!==i0&&(t0=(i0=i)&&function attrInterpolate(name,i){return function(t){this.setAttribute(name,i(t))}}(name,i)),t0}return tween._value=value,tween})(fullname,value))},style:function(name,value,priority){var i="transform"==(name+="")?interpolateTransformCss:transition_interpolate;return null==value?this.styleTween(name,function styleNull(name,interpolate){var string00,string10,interpolate0;return function(){var string0=styleValue(this,name),string1=(this.style.removeProperty(name),styleValue(this,name));return string0===string1?null:string0===string00&&string1===string10?interpolate0:interpolate0=interpolate(string00=string0,string10=string1)}}(name,i)).on("end.style."+name,style_styleRemove(name)):"function"==typeof value?this.styleTween(name,function style_styleFunction(name,interpolate,value){var string00,string10,interpolate0;return function(){var string0=styleValue(this,name),value1=value(this),string1=value1+"";return null==value1&&(this.style.removeProperty(name),string1=value1=styleValue(this,name)),string0===string1?null:string0===string00&&string1===string10?interpolate0:(string10=string1,interpolate0=interpolate(string00=string0,value1))}}(name,i,tweenValue(this,"style."+name,value))).each(function styleMaybeRemove(id,name){var on0,on1,listener0,remove,key="style."+name,event="end."+key;return function(){var schedule=schedule_set(this,id),on=schedule.on,listener=null==schedule.value[key]?remove||(remove=style_styleRemove(name)):void 0;on===on0&&listener0===listener||(on1=(on0=on).copy()).on(event,listener0=listener),schedule.on=on1}}(this._id,name)):this.styleTween(name,function style_styleConstant(name,interpolate,value1){var string00,interpolate0,string1=value1+"";return function(){var string0=styleValue(this,name);return string0===string1?null:string0===string00?interpolate0:interpolate0=interpolate(string00=string0,value1)}}(name,i,value),priority).on("end.style."+name,null)},styleTween:function(name,value,priority){var key="style."+(name+="");if(arguments.length<2)return(key=this.tween(key))&&key._value;if(null==value)return this.tween(key,null);if("function"!=typeof value)throw new Error;return this.tween(key,function styleTween(name,value,priority){var t,i0;function tween(){var i=value.apply(this,arguments);return i!==i0&&(t=(i0=i)&&function styleInterpolate(name,i,priority){return function(t){this.style.setProperty(name,i(t),priority)}}(name,i,priority)),t}return tween._value=value,tween}(name,value,null==priority?"":priority))},text:function(value){return this.tween("text","function"==typeof value?function text_textFunction(value){return function(){var value1=value(this);this.textContent=null==value1?"":value1}}(tweenValue(this,"text",value)):function text_textConstant(value){return function(){this.textContent=value}}(null==value?"":value+""))},remove:function(){return this.on("end.remove",function removeFunction(id){return function(){var parent=this.parentNode;for(var i in this.__transition)if(+i!==id)return;parent&&parent.removeChild(this)}}(this._id))},tween:function(name,value){var id=this._id;if(name+="",arguments.length<2){for(var t,tween=schedule_get(this.node(),id).tween,i=0,n=tween.length;iSTARTING&&schedule.state4&&void 0!==arguments[4]?arguments[4]:{},keyFn=arguments.length>5?arguments[5]:void 0;(parent instanceof HTMLElement||parent instanceof SVGElement)&&(parent=renderer_utils_selectElement(parent));var filter,selectorVal=selector?selector[0]:null,selectorType=null,actualSelector=null,element=null,enterSel=null,mergeSel=null;selectorVal?"#"===selectorVal?(selectorType="id",actualSelector=selector):(selectorType="class",actualSelector="."===selector[0]?selector:".".concat(selector)):(actualSelector=elemType,filter=!0),element=parent.selectAll(actualSelector),filter&&(element=element.filter(function(){return this.parentNode===parent.node()})),enterSel=(element=element.data(data,keyFn)).enter().append(elemType||"div"),callbacks.enter&&enterSel.each(function(){for(var _len=arguments.length,params=new Array(_len),_key=0;_key<_len;_key++)params[_key]=arguments[_key];callbacks.enter.apply(callbacks,[renderer_utils_selectElement(this)].concat(params))}),mergeSel=enterSel.merge(element),callbacks.update&&mergeSel.each(function(){for(var _len2=arguments.length,params=new Array(_len2),_key2=0;_key2<_len2;_key2++)params[_key2]=arguments[_key2];callbacks.update.apply(callbacks,[renderer_utils_selectElement(this)].concat(params))}),"class"===selectorType?mergeSel.classed("."===selectorVal?selector.substring(1,selector.length):selector,!0):"id"===selectorType&&mergeSel.attr("id",selector.substring(1,selector.length));var exitSel=element.exit();return callbacks.exit?exitSel.each(function(){for(var _len3=arguments.length,params=new Array(_len3),_key3=0;_key3<_len3;_key3++)params[_key3]=arguments[_key3];callbacks.exit.apply(callbacks,[renderer_utils_selectElement(this)].concat(params))}):exitSel.remove(),mergeSel},applyStyle=function applyStyle(elem,styleObj){return Object.entries(styleObj).forEach(function(d){elem.style(d[0],d[1])},void 0),elem},setElementAttrs=function setElementAttrs(element,attrs){for(var key in attrs)({}).hasOwnProperty.call(attrs,key)&&element.attr(key,attrs[key])},renderer_utils_setAttrs=function setAttrs(element,attrs,className){return element instanceof src_selection||(element=renderer_utils_selectElement(element)),void 0!==className?element.selectAll(".".concat(className)).each(function(){setElementAttrs(src_select(this),attrs)}):setElementAttrs(element,attrs),element},renderer_utils_setStyles=function setStyles(element,styles){for(var key in element instanceof src_selection||(element=renderer_utils_selectElement(element)),styles)({}).hasOwnProperty.call(styles,key)&&element.style(key,styles[key]);return element},renderer_utils_createElements=function createElements(params){var data,sel,container=src_select(params.container);"number"==typeof(data=params.data)&&(data=Array(data).fill().map(function(d,i){return i})),sel=container.selectAll(params.selector).data(data),(sel=container.selectAll(params.selector).filter(function(){return this.parentNode===container.node()}).data(params.data)).enter().append(params.append).merge(sel).each(function(d,i){params.each(d,src_select(this),i)}).attr("class",params.className||""),sel.exit().remove()},renderer_utils_getClientPoint=function getClientPoint(){var pos=src_point.apply(void 0,arguments);return{x:pos[0],y:pos[1]}},renderer_utils_getEvent=function getEvent(){return on_event},renderer_utils_getD3Drag=function getD3Drag(){return src_drag},renderer_utils_getSmartComputedStyle=function getSmartComputedStyle(group,css){var textEl,mandatoryStyle={"fill-opacity":0},className="string"==typeof css?css:css instanceof Array?css.join(" "):void 0;textEl=group.node()instanceof HTMLElement?group.append("div").html("W"):group.append("text").text("W"),className?textEl.attr("class",className):"object"===renderer_utils_typeof(css)&&(delete css["fill-opacity"],mergeRecursive(mandatoryStyle,css)),textEl.style(mandatoryStyle);var computedStyle=window.getComputedStyle(textEl.node()),styleForSmartLabel={fontSize:computedStyle.fontSize,fontFamily:computedStyle.fontFamily,fontWeight:computedStyle.fontWeight,fontStyle:computedStyle.fontStyle};return textEl.remove(),styleForSmartLabel},hasTouch=function hasTouch(){return"ontouchstart"in document.documentElement},SmartlabelManager=__webpack_require__(4),SmartlabelManager_default=__webpack_require__.n(SmartlabelManager),events=["initialized","beforeupdate","updated","beforedraw","drawn","beforeremove","removed","animationend"],EVENT_LIST=[];["canvas","unit","layer","axis","facet-headers","legend","caption"].forEach(function(composition){events.forEach(function(event){EVENT_LIST.push("".concat(composition,".").concat(event))})});var event_list=EVENT_LIST;function lifecycle_manager_defineProperties(target,props){for(var i=0;i0&&void 0!==arguments[0]?arguments[0]:{};this._lifeCycles=lifeCycles,this._releasePromisesFromCache()}},{key:"_resetTargetPromise",value:function _resetTargetPromise(eventName){var _this4=this;setTimeout(function(){_this4._notifiers[eventName]=lifecycle_manager_resolver,_this4._promises.set(eventName,_this4._makeNotifierPromise(eventName))},0)}}]),LifeCycleManager}(),src_InvalidAwareTypes=datamodel_default.a.InvalidAwareTypes,DRAG="drag",HOVER="hover",SELECTIONDRAG="selectiondrag",CLICK="click",LONGTOUCH="longtouch",TOUCHDRAG="touchdrag",ALL_ACTIONS="*",SELECTION_NEW_ENTRY=1,SELECTION_NEW_EXIT=-1,SELECTION_NULL=0,SELECTION_OLD_ENTRY=2,SELECTION_OLD_EXIT=-2;function selection_set_defineProperties(target,props){for(var i=0;i0?(set[key]===SELECTION_OLD_ENTRY&&retObj.entrySet[0].push(key),set[key]===SELECTION_NEW_ENTRY&&retObj.entrySet[1].push(key)):set[key]<0&&(set[key]===SELECTION_OLD_EXIT&&retObj.exitSet[0].push(key),set[key]===SELECTION_NEW_EXIT&&retObj.exitSet[1].push(key)),retObj.completeSet.push(key);return["entrySet","exitSet"].forEach(function(type){retObj[type]=retObj[type].map(function(e){return e.map(Number)})}),retObj.completeSet=retObj.completeSet.map(Number),retObj}},{key:"reset",value:function reset(ids){var set=this._set;if(ids)ids.forEach(function(i){set[i]=SELECTION_NULL});else{var lockedSel=this._lockedSelection;for(var key in set)key in lockedSel||(set[key]=SELECTION_NULL)}return this._resetted=!0,this}},{key:"getEntrySet",value:function getEntrySet(){var set=this._set,addSet=[];for(var key in set)set[key]===SELECTION_NEW_ENTRY&&addSet.push(key);return addSet}},{key:"getExistingEntrySet",value:function getExistingEntrySet(addSet){var set=this._set;return addSet.filter(function(d){return set[d]===SELECTION_NEW_ENTRY||set[d]===SELECTION_OLD_ENTRY})}},{key:"getExistingExitSet",value:function getExistingExitSet(removeSet){var set=this._set;return removeSet.filter(function(d){return set[d]===SELECTION_NEW_EXIT||set[d]===SELECTION_OLD_EXIT})}},{key:"getOldEntry",value:function getOldEntry(){var set=this._set,updateSet=[];for(var key in set)set[key]===SELECTION_OLD_ENTRY&&updateSet.push(key);return updateSet}},{key:"getOldExit",value:function getOldExit(){var set=this._set,updateSet=[];for(var key in set)set[key]===SELECTION_OLD_EXIT&&updateSet.push(key);return updateSet}},{key:"getExitSet",value:function getExitSet(){var set=this._set,removeSet=[];for(var key in set)set[key]===SELECTION_NEW_EXIT&&removeSet.push(key);return removeSet}},{key:"getCompleteSet",value:function getCompleteSet(){var set=this._set,completeSet=[];for(var key in set)completeSet.push(key);return completeSet}},{key:"getCompleteSetCount",value:function getCompleteSetCount(){return this._completeSetCount}},{key:"resetted",value:function resetted(){return this._resetted}},{key:"toggle",value:function toggle(){var set=this._set;for(var key in set)set[key]===SELECTION_NEW_ENTRY?set[key]=SELECTION_NEW_EXIT:set[key]===SELECTION_NEW_EXIT?set[key]=SELECTION_NEW_ENTRY:set[key]===SELECTION_OLD_ENTRY?set[key]=SELECTION_OLD_EXIT:set[key]=SELECTION_OLD_ENTRY;return this}}]),SelectionSet}();function helper_toConsumableArray(arr){return function helper_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);i3&&void 0!==arguments[3]?arguments[3]:{},sideEffectStore=this.sideEffects(),sideEffect=sideEffectStore[name],disable=!1;options.filter&&options.filter(sideEffect)&&(disable=!0),!disable&&sideEffectStore[name].apply(selectionSet,payload,options)}},{key:"registerPropagationBehaviourMap",value:function registerPropagationBehaviourMap(map){return this._propagationBehaviourMap=Object.assign(this._propagationBehaviourMap,map||{}),this}},{key:"dispatchBehaviour",value:function dispatchBehaviour(behaviour,payload){var propagationInfo=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},propagate=void 0===propagationInfo.propagate||propagationInfo.propagate,action=this._actions.behavioural[behaviour],sideEffects=function getSideEffects(behaviour,behaviourEffectMap){var sideEffects=[];for(var key in behaviourEffectMap){var behaviours=key.split(",");behaviours.some(function(d){return d===behaviour})&&sideEffects.push({effects:behaviourEffectMap[key],behaviours:behaviours})}return sideEffects}(behaviour,this._behaviourEffectMap);if(this._propagationInf=propagationInfo,action){var selectionSet=action.dispatch(payload),propagationSelectionSet=this.getPropagationSelectionSet(selectionSet);this._entryExitSet[behaviour]=propagationSelectionSet;var shouldApplySideEffects=this.shouldApplySideEffects(propagate);if(propagate&&this.propagate(behaviour,payload,selectionSet.find(function(d){return d.sourceSelectionSet}),sideEffects),shouldApplySideEffects){var applicableSideEffects=this.getApplicableSideEffects(sideEffects,payload,propagationInfo);this.applySideEffects(applicableSideEffects,propagationSelectionSet,payload)}}return this}},{key:"getPropagationSelectionSet",value:function getPropagationSelectionSet(selectionSet){return selectionSet.find(function(d){return!d.sourceSelectionSet})}},{key:"shouldApplySideEffects",value:function shouldApplySideEffects(){return!0}},{key:"changeBehaviourStateOnPropagation",value:function changeBehaviourStateOnPropagation(behaviour,value){return value instanceof Function?this._sourceBehaviours[behaviour]=value:this._sourceBehaviours[behaviour]=function(){return value},this}},{key:"changeSideEffectStateOnPropagation",value:function changeSideEffectStateOnPropagation(sideEffect,value){value instanceof Function?this._sourceSideEffects[sideEffect]=value:this._sourceSideEffects[sideEffect]=function(){return value}}},{key:"propagate",value:function propagate(){return this}},{key:"sideEffects",value:function sideEffects(){return arguments.length?(this._sideEffects=arguments.length<=0?void 0:arguments[0],this):this._sideEffects}},{key:"enableSideEffects",value:function enableSideEffects(fn){return changeSideEffectAvailability(this,fn,!0),this}},{key:"disableSideEffects",value:function disableSideEffects(fn){return changeSideEffectAvailability(this,fn,!1),this}},{key:"dissociateBehaviour",value:function dissociateBehaviour(behaviour,physicalAction){var actionBehaviourMap=this._actionBehaviourMap;for(var key in actionBehaviourMap)if(key===physicalAction){var behaviourMap=actionBehaviourMap[key];behaviourMap.behaviours=behaviourMap.behaviours.filter(function(d){return d!==behaviour}),this.mapActionsAndBehaviour(key)}return this}},{key:"dissociateSideEffect",value:function dissociateSideEffect(sideEffect,behaviour){var behaviourEffectMap=this._behaviourEffectMap;return behaviourEffectMap[behaviour]=behaviourEffectMap[behaviour].filter(function(d){return(d.name||d)!==sideEffect}),this}},{key:"getApplicableSideEffects",value:function getApplicableSideEffects(sideEffects){return sideEffects}},{key:"attachPropagationListener",value:function attachPropagationListener(dataModel){return dataModel.unsubscribe("propagation"),dataModel.on("propagation",this.onDataModelPropagation()),this}},{key:"onDataModelPropagation",value:function onDataModelPropagation(){var _this2=this;return function(propValue){var payload=propValue.payload,action=payload.action;_this2.dispatchBehaviour(action,payload,{propagate:!1})}}},{key:"createSelectionSet",value:function createSelectionSet(uniqueIds,behaviouralActions){var behaviours=behaviouralActions||this._actions.behavioural,selectionSet=this._selectionSet,volatileSelectionSet=this._volatileSelectionSet;for(var key in behaviours)({}).hasOwnProperty.call(behaviours,key)&&(selectionSet[key]=new src_selection_set(uniqueIds),volatileSelectionSet[key]=new src_selection_set(uniqueIds,!0));return this._volatileSelectionSet=volatileSelectionSet,this.selectionSet(selectionSet),this}},{key:"selectionSet",value:function selectionSet(){return arguments.length?(this._selectionSet=arguments.length<=0?void 0:arguments[0],this):this._selectionSet}},{key:"initializeSideEffects",value:function initializeSideEffects(){var sideEffectDefinitions=this._sideEffectDefinitions;return this.sideEffects(function initializeSideEffects(context,sideEffects){var sideEffectsMap=context._sideEffects,config=context.config();return(sideEffects=sideEffects instanceof Array?sideEffects:Object.values(sideEffects)).forEach(function(SideEffect){var formalName=SideEffect.formalName(),sideEffectInstance=sideEffectsMap[formalName];sideEffectsMap[formalName]=sideEffectInstance||new SideEffect(context);var sideEffectConf=config[formalName];sideEffectConf&&sideEffectsMap[formalName].config(sideEffectConf)}),sideEffectsMap}(this,sideEffectDefinitions)),this}},{key:"registerPhysicalActions",value:function registerPhysicalActions(actions){var initedActions=function initializePhysicalActions(context,actions){var physicalActions={};for(var name in actions)({}).hasOwnProperty.call(name,actions)||(physicalActions[name]=actions[name](context));return physicalActions}(this,actions);return Object.assign(this._actions.physical,initedActions),this}},{key:"propagateWith",value:function propagateWith(action,fields){var append=arguments.length>2&&void 0!==arguments[2]&&arguments[2],behaviouralActions=this._actions.behavioural;if(fields.length){if(action===ALL_ACTIONS)for(var key in behaviouralActions)this._propagationFields[key]={fields:fields,append:append};else this._propagationFields[action]={fields:fields,append:append};return this}return this._propagationFields}},{key:"mapActionsAndBehaviour",value:function mapActionsAndBehaviour(phyAction){var initedPhysicalActions=this._actions.physical,map=this._actionBehaviourMap;for(var action in map)if(!{}.hasOwnProperty.call(action,map)&&action===(phyAction||action)){var target=void 0,mapObj=map[action];target=mapObj.target;var touch=mapObj.touch;target||(target=this.context.getDefaultTargetContainer()),(hasTouch()?!0===touch||void 0===touch:!touch)&&this.bindActionWithBehaviour(initedPhysicalActions[action],target,mapObj.behaviours)}return this}},{key:"registerPhysicalBehaviouralMap",value:function registerPhysicalBehaviouralMap(map){return this._actionBehaviourMap=mergeRecursive(this._actionBehaviourMap,map),this}},{key:"bindActionWithBehaviour",value:function bindActionWithBehaviour(action,targets,behaviourList){var _this3=this;return"string"==typeof targets&&(targets=[targets]),targets.forEach(function(target){var mount=_this3.context.mount(),nodes=target.node instanceof Function?target:renderer_utils_selectElement(mount).selectAll(target);nodes.empty()||(nodes instanceof Array?nodes.forEach(function(node){action(renderer_utils_selectElement(node),behaviourList)}):action(nodes,behaviourList))}),this}},{key:"getPropagationInf",value:function getPropagationInf(){return this._propagationInf}},{key:"getAddSetFromCriteria",value:function getAddSetFromCriteria(criteria){var propagationInf=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},context=this.context,filteredDataModel=propagationInf.data?propagationInf.data:context.getDataModelFromIdentifiers(criteria,"all"),xFields=context.fields().x||[],yFields=context.fields().y||[],xMeasures=xFields.every(function(field){return field.type()===dist_datamodel.FieldType.MEASURE}),yMeasures=yFields.every(function(field){return field.type()===dist_datamodel.FieldType.MEASURE});return{model:filteredDataModel,uids:null===criteria?null:propagationInf.data?function filterPropagationModel(model,propModel,measures){var filteredModel,_propModel$getData=propModel.getData(),data=_propModel$getData.data,schema=_propModel$getData.schema;if(schema.length){var fieldMap=model.getFieldsConfig();filteredModel=model.select(function(fields){return data.some(function(row){return schema.every(function(propField,idx){return!(measures||propField.name in fieldMap&&fieldMap[propField.name].def.type!==dist_datamodel.FieldType.MEASURE)||row[idx]===fields[propField.name].valueOf()})})},{saveChild:!1})}else filteredModel=propModel;return filteredModel}(this.getFullData(),propagationInf.data[0],xMeasures&&yMeasures).getData().uids:filteredDataModel[0].getData().uids}}},{key:"getSelectionSets",value:function getSelectionSets(action){var sourceId=this.context.id(),propagationSource=(this._propagationInf||{}).sourceId,applicableSelectionSets=[];return propagationSource!==sourceId&&(applicableSelectionSets=[this._volatileSelectionSet[action]]),propagationSource&&applicableSelectionSets.push(this.selectionSet()[action]),applicableSelectionSets}},{key:"getFullData",value:function getFullData(){return this.context.data()}},{key:"resetted",value:function resetted(){return this._resetted}},{key:"getEntryExitSet",value:function getEntryExitSet(behaviour){return this._entryExitSet[behaviour]}}]),Firebolt}();function generic_defineProperties(target,props){for(var i=0;i1&&void 0!==arguments[1]?arguments[1]:{},sourceIdentifiers=propagationInf.sourceIdentifiers;return sourceIdentifiers?sourceIdentifiers.getSchema().map(function(d){return d.name}):criteria instanceof Array?criteria[0]:Object.keys(criteria||{})}(propagationInf,payload.criteria),sourceSelectionSet:!0===selectionSet._volatile}}},{key:"enable",value:function enable(){this._enabled=!0}},{key:"disable",value:function disable(){this._enabled=!1}},{key:"isEnabled",value:function isEnabled(){return this._enabled}}],[{key:"mutates",value:function mutates(){return!1}}]),GenericBehaviour}();function volatile_typeof(obj){return(volatile_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function volatile_defineProperties(target,props){for(var i=0;iydom[0]?ydom:xdom,max=min===ydom?xdom:ydom;min[1]100&&Math.abs(startPos.x-endPos.x)<=5)){endPos.x=Math.max(0,Math.min(endPos.x,drawingInf.width)),endPos.y=Math.max(0,Math.min(endPos.y,drawingInf.height));var payload=drag_action_config(firebolt.context.getSourceInfo(),{startPos:startPos,endPos:endPos,snap:!0},firebolt.context.data().getFieldsConfig());payload.dragEnd=!0,behaviours.forEach(function(beh){return firebolt.dispatchBehaviour(beh,payload)})}}))},physical_hover=function hover(firebolt){return function(targetEl,behaviours){var dispatchBehaviour=function dispatchBehaviour(args){var event=renderer_utils_getEvent(),context=firebolt.context,mode=context.config().interaction.tooltip.mode,pos=renderer_utils_getClientPoint(context.getDrawingContext().svgContainer,event),nearestPoint=context.getNearestPoint(pos.x,pos.y,{getAllPoints:"consolidated"===mode||"fragmented"===mode,data:args,event:event}),payload={criteria:nearestPoint?nearestPoint.id:null,showInPosition:nearestPoint.showInPosition,target:nearestPoint.target,position:pos,mode:mode};behaviours.forEach(function(beh){return firebolt.dispatchBehaviour(beh,payload)}),event.stopPropagation()};targetEl.on("mouseover",dispatchBehaviour).on("mousemove",dispatchBehaviour).on("mouseout",function(){behaviours.forEach(function(beh){return firebolt.dispatchBehaviour(beh,{criteria:null})})})}},helpers_generatePayloadFromEvent=function generatePayloadFromEvent(args,event,firebolt){var context=firebolt.context,pos=renderer_utils_getClientPoint(context.getDrawingContext().svgContainer,event.touches?event.touches[0]:event),nearestPoint=context.getNearestPoint(pos.x,pos.y,{data:args,event:event});return{criteria:nearestPoint?nearestPoint.id:null,showInPosition:nearestPoint.showInPosition,target:nearestPoint.target,position:pos}},physical_click=function click(firebolt){return function(targetEl,behaviours){targetEl.on("click",function dispatchBehaviour(args){var event=renderer_utils_getEvent(),payload=helpers_generatePayloadFromEvent(args,event,firebolt);behaviours.forEach(function(beh){return firebolt.dispatchBehaviour(beh,payload)}),event.stopPropagation()})}};function physical_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}var physicalActions=(physical_defineProperty(_physicalActions={},DRAG,function drag(firebolt){return function(targetEl,behaviours){drag_event_attachDragEvent(targetEl,behaviours,firebolt)}}),physical_defineProperty(_physicalActions,HOVER,physical_hover),physical_defineProperty(_physicalActions,CLICK,physical_click),physical_defineProperty(_physicalActions,LONGTOUCH,function longtouch(firebolt){return function(targetEl,behaviours){var event,touchEnd;touchEnd=!1,event=renderer_utils_getEvent(),targetEl.on("touchstart",function(args){event=renderer_utils_getEvent(),touchEnd=!1,setTimeout(function(){touchEnd?behaviours.forEach(function(beh){return firebolt.dispatchBehaviour(beh,{criteria:null})}):function dispatchBehaviour(args){var payload=helpers_generatePayloadFromEvent(args,event,firebolt);behaviours.forEach(function(beh){return firebolt.dispatchBehaviour(beh,payload)}),event.stopPropagation()}(args)},100)}).on("touchend",function(){touchEnd=!0})}}),physical_defineProperty(_physicalActions,TOUCHDRAG,function touchdrag(firebolt){return function(targetEl,behaviours){drag_event_attachDragEvent(targetEl,behaviours,firebolt,!0)}}),_physicalActions),PROPS={valueParser:{defaultValue:function defaultValue(val){return val}}};function generic_sideeffect_defineProperties(target,props){for(var i=0;i1&&void 0!==arguments[1]&&arguments[1];var interactionType=arguments.length>2?arguments[2]:void 0,apply=arguments.length>3?arguments[3]:void 0;return this.firebolt.context.layers().forEach(function(layer){return!1!==layer.config().interactive&&layer.applyInteractionStyle(interactionType,set.uids,apply)}),this}}]),SurrogateSideEffect}();function spawnable_typeof(obj){return(spawnable_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function spawnable_defineProperties(target,props){for(var i=0;i=0&&x2<=width&&y>=0&&y2<=height){var payload=drag_action_config(context.getSourceInfo(),{startPos:{x:x,y:y},endPos:{x:x2,y:y2}},context.data().getFieldsConfig());onDrag(payload)}}).on("end",function(){var width=drawingInf.width,height=drawingInf.height,x=Math.min(width-subject.width,Math.max(subject.x,0)),y=Math.min(height-subject.height,Math.max(subject.y,0)),y2=y+subject.height,x2=x+subject.width;if(x>=0&&x2<=width&&y>=0&&y2<=height){var payload=drag_action_config(context.getSourceInfo(),{startPos:{x:x,y:y},endPos:{x:x2,y:y2},snap:!0},context.data().getFieldsConfig());payload.dragEnd=!0,onDrag(payload)}}))}}(firebolt)(renderer_utils_selectElement(this),["brush"],sideEffect)}).merge(selection).each(function(attrs){var element=renderer_utils_selectElement(this);for(var key in transition&&(element=element.transition().duration(transition.duration)),attrs)({}).hasOwnProperty.call(attrs,key)&&isValidValue(attrs[key])&&element.attr(key,attrs[key])}),boxClassName=getQualifiedClassName(boxConf.defClassName,this._id,classPrefix);return selectionBox.classed(boxClassName.join(" "),!0),selectionBox.classed(boxConf.className,!0),this}},{key:"hide",value:function hide(drawingInf){helper_changeVisibility(this,drawingInf.sideEffectGroup,!1)}},{key:"show",value:function show(drawingInf){helper_changeVisibility(this,drawingInf.sideEffectGroup,!0)}}],[{key:"defaultConfig",value:function defaultConfig(){return{defClassName:"selection-box-group",className:"",classPrefix:"muze",box:{defClassName:"selection-box",className:""},transition:{duration:200}}}},{key:"formalName",value:function formalName(){return"selectionBox"}}]),SelectionBox}(),INITIAL_STYLE={position:"absolute",width:0,height:0},default_config_defaultConfig={classPrefix:"muze",defClassName:"tooltip-box",connectorClassName:"tooltip-connectors",className:"",row:{margin:0},content:{spacing:5,iconContainerSize:10,iconScale:1,iconShape:"circle",iconColor:"#ff0000",rowMargin:"0px",margin:10,separator:":",className:"tooltip-content-container",parentClassName:"tooltip-content-parent-container"},arrow:{size:10,disabled:!1,defClassName:"tooltip-arrow",className:"",color:"rgba(195,195,195,0.85)"}},helper_getArrowPos=function getArrowPos(orient,dim,measurement,config){var arrowPos,x=measurement.x,y=measurement.y,boxHeight=measurement.boxHeight,boxWidth=measurement.boxWidth,arrowWidth=config.arrow.disabled?0:config.arrow.size;if("left"===orient||"right"===orient){var start=0,diff=boxHeight/2,plotBottom=dim.y+dim.height,boxBottom=y+boxHeight;dim.y>y?(start=dim.y-y,diff=(plotBottom>=boxBottom?boxBottom-dim.y:dim.height)/2):boxBottom>plotBottom&&(diff=Math.abs(y-(dim.y+dim.height))/2),arrowPos=start+diff-arrowWidth/2}else{var _start=0,_diff=boxWidth/2,plotRight=dim.x+dim.width,boxRight=x+boxWidth;dim.x>x?(_start=dim.x-x,_diff=(plotRight>=boxRight?boxRight-dim.x:dim.width)/2):boxRight>plotRight&&(_diff=Math.abs(x-(dim.x+dim.width))/2),arrowPos=_start+_diff-arrowWidth/2}return arrowPos},helper_placeArrow=function placeArrow(context,position,arrowPos){var tooltipArrow=context._tooltipArrow,tooltipBackground=context._tooltipBackground,config=context._config,classPrefix=config.classPrefix,arrowConf=config.arrow,className=getQualifiedClassName(arrowConf.defClassName,context._id,config.classPrefix);tooltipArrow.style("display","block"),tooltipArrow.attr("class","".concat(className.join(" "))),"left"===position||"right"===position?(tooltipArrow.style("top","".concat(arrowPos,"px")),tooltipArrow.style("left",""),tooltipBackground.style("top","".concat(arrowPos,"px")),tooltipBackground.style("left","")):("bottom"===position?tooltipArrow.style("top","100%"):tooltipArrow.style("top","-".concat(arrowConf.size,"px")),tooltipArrow.style("left","".concat(arrowPos,"px")),"bottom"===position?tooltipBackground.style("top","100%"):tooltipBackground.style("top","-".concat(arrowConf.size+3,"px")),tooltipBackground.style("left","".concat(arrowPos,"px"))),tooltipArrow.classed("".concat(classPrefix,"-tooltip-arrow"),!0),tooltipArrow.classed("".concat(classPrefix,"-tooltip-arrow-").concat(context._arrowOrientation),!1),tooltipArrow.classed("".concat(classPrefix,"-tooltip-arrow-").concat(position),!0),tooltipBackground.classed("".concat(classPrefix,"-tooltip-background-arrow"),!0),tooltipBackground.classed("".concat(classPrefix,"-tooltip-background-arrow-").concat(context._arrowOrientation),!1),tooltipBackground.classed("".concat(classPrefix,"-tooltip-background-arrow-").concat(position),!0)};__webpack_require__(10);function content_defineProperties(target,props){for(var i=0;i0?(this._config=mergeRecursive(this._config,arguments.length<=0?void 0:arguments[0]),this):this._config}},{key:"update",value:function update(item){return this._model=item.model,this._formatter=item.formatter,this}},{key:"context",value:function context(ctx){return this._context=ctx,this}},{key:"render",value:function render(mount){var data,config=this._config,iconContainerSize=config.iconContainerSize,formatter=this._formatter,rowMargin=config.rowMargin,model=this._model;if(this._mount=mount,(data=model instanceof Array?model:formatter(this._model,this.config(),this._context))instanceof Function)mount.html(data());else{var content=data,displayFormat="default";isSimpleObject(data)&&(content=data.content,displayFormat=data.displayFormat);var body=makeElement(mount,"div",[displayFormat],"".concat(config.classPrefix,"-tooltip-content"),{},function(d){return d});if("table"===displayFormat){var table=makeElement(body,"table",[1],"".concat(config.classPrefix,"-tooltip-table")),tbody=makeElement(table,"tbody",[1],"".concat(config.classPrefix,"-tooltip-table-tbody")),rows=makeElement(tbody,"tr",content,"".concat(config.classPrefix,"-tooltip-table-row"));rows.each(function(d,i){renderer_utils_selectElement(this).classed("".concat(config.classPrefix,"-tooltip-table-row-").concat(i),!0)}),makeElement(rows,"td",function(d){return d},"".concat(config.classPrefix,"-tooltip-table-cell")).each(function(d){renderer_utils_selectElement(this).html(d)})}else{var _rows=makeElement(body,"div",content,"".concat(config.classPrefix,"-tooltip-row")),_cells=makeElement(_rows,"span",function(d){return d},"".concat(config.classPrefix,"-tooltip-content"));_cells.attr("class","".concat(config.classPrefix,"-tooltip-content")),renderer_utils_setStyles(_rows,{margin:rowMargin}),renderer_utils_setStyles(_cells,{display:"inline-block","margin-right":"".concat(config.spacing,"px")}),_cells.each(function(d){var el=renderer_utils_selectElement(this);if(el.html(""),d instanceof Object)if("icon"===d.type){var svg=makeElement(el,"svg",[1]),path=makeElement(svg,"path",[1]),shape=d.shape instanceof Function?d.shape:common_utils_getSymbol(d.shape);renderer_utils_setAttrs(svg,{x:0,y:0,width:iconContainerSize,height:iconContainerSize}),renderer_utils_setAttrs(path,{d:shape.size(d.size)(),transform:"translate(".concat(iconContainerSize/2,", ").concat(iconContainerSize/2,")")}),renderer_utils_setStyles(path,{fill:d.color}),renderer_utils_setStyles(svg,{width:"".concat(iconContainerSize,"px"),height:"".concat(iconContainerSize,"px")})}else el.html(d.value),d.className&&el.classed(d.className,!0),renderer_utils_setStyles(el,d.style);else el.html(d)})}}return this}},{key:"clear",value:function clear(){return this._model=null,this}}],[{key:"defaultConfig",value:function defaultConfig(){var config=default_config_defaultConfig.content;return config.classPrefix=default_config_defaultConfig.classPrefix,config}}]),Content}();function tooltip_defineProperties(target,props){for(var i=0;i0){var defConf=mergeRecursive({},this.constructor.defaultConfig());return this._config=mergeRecursive(defConf,arguments.length<=0?void 0:arguments[0]),this}return this._config}},{key:"addClass",value:function addClass(className){return this._tooltipContainer.classed(className,!0),this}},{key:"context",value:function context(){return arguments.length?(this._context=arguments.length<=0?void 0:arguments[0],this):this._context}},{key:"content",value:function content(name,data){var contentConfig=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},config=this.config(),classPrefix=config.classPrefix,contentClass=config.content.className,formatter=config.formatter,className=contentConfig.className||"".concat(classPrefix,"-").concat(contentClass,"-").concat(name),content=this._contents[name]=this._contents[name]||new content_Content,container=makeElement(this._contentContainer,"div",[contentConfig.order],className);container.attr("class","".concat(classPrefix,"-").concat(contentClass," ").concat(className)),function reorderContainers(parentContainer,className){parentContainer.selectAll(className).sort(function(a,b){return a-b})}(this._contentContainer,".".concat(classPrefix,"-").concat(contentClass));var contentConf=config.content;return contentConfig.classPrefix=this._config.classPrefix,content.config(contentConf),null===data?(content.clear(),container.remove(),delete this._contents[name]):(content.update({model:data,formatter:contentConfig.formatter||formatter}),content.context(this._context),content.render(container)),Object.keys(this._contents).length||this.hide(),this}},{key:"getContents",value:function getContents(){return Object.values(this._contents)}},{key:"position",value:function position(x,y){var conf=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(!Object.keys(this._contents).length)return this.hide(),this;this.show();var target=this._target,repositionArrow=conf.repositionArrow;if(target&&repositionArrow){var node=this._tooltipContainer.node(),config=this._config,arrowDisabled=config.arrow.disabled,arrowWidth=arrowDisabled?0:config.arrow.size,arrowOrient=this._arrowOrientation,outsidePlot="left"===arrowOrient||"right"===arrowOrient?y+node.offsetHeight-arrowWidthtarget.y+target.height:x+node.offsetWidth-arrowWidthtarget.x+target.width;if(!arrowDisabled)if(outsidePlot){var path;this._tooltipArrow.style("display","none"),this._tooltipBackground.style("display","none"),this._tooltipConnectorContainer.style("display","block");var connector=this._tooltipConnectorContainer.selectAll("path").data([1]),enter=connector.enter().append("path");"left"===arrowOrient?path="M ".concat(x," ").concat(y+node.offsetHeight/2," L ").concat(target.x+target.width)+" ".concat(target.y+target.height/2):"right"===arrowOrient?path="M ".concat(x+node.offsetWidth," ").concat(y+node.offsetHeight/2)+" L ".concat(target.x," ").concat(target.y+target.height/2):"bottom"===arrowOrient&&(path="M ".concat(x+node.offsetWidth/2," ").concat(y+node.offsetHeight)+" L ".concat(target.x+target.width/2," ").concat(target.y)),enter.merge(connector).attr("d",path).style("display","block")}else{var arrowPos=helper_getArrowPos(arrowOrient,target,{x:x,y:y,boxHeight:node.offsetHeight,boxWidth:node.offsetWidth},this._config);helper_placeArrow(this,this._arrowOrientation,arrowPos),this._tooltipConnectorContainer.style("display","none")}}var offset=this._offset||{x:0,y:0};return this._tooltipContainer.style("left","".concat(offset.x+x,"px")).style("top","".concat(offset.y+y,"px")),this}},{key:"positionRelativeTo",value:function positionRelativeTo(dim){var obj,_this=this,tooltipConf=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},orientation=tooltipConf.orientation;if(this.show(),!dim)return this.hide(),this;var extent=this._extent,node=this._tooltipContainer.node();this._tooltipContainer.style("top","0px").style("left","0px");var offsetWidth=node.offsetWidth+2,offsetHeight=node.offsetHeight+2,config=this._config,offset=this._offset,arrowDisabled=config.arrow.disabled,arrowSize=arrowDisabled?0:config.arrow.size,draw=void 0===tooltipConf.draw||tooltipConf.draw,topSpace=dim.y,dimX=dim.x+dim.width+offset.x,rightSpace=extent.width-dimX,leftSpace=dim.x+offset.x-extent.x,positionTop=topSpace>offsetHeight+arrowSize,positionRight=rightSpace>=offsetWidth+arrowSize,positionLeft=leftSpace>=offsetWidth+arrowSize;return this._target=dim,orientation||(orientation=positionTop?"vertical":positionRight||positionLeft?"horizontal":"vertical"),"horizontal"===orientation?obj=function positionHorizontal(){var position,x=dim.x+dim.width,y=dim.y;return positionRight?(position="left",x+=arrowSize):positionLeft?(x=dim.x-offsetWidth,position="right",x-=arrowSize):(position="left",x+=arrowSize),dim.height1&&type!==dist_datamodel.MeasureSubtype.CONTINUOUS;return uniqueVals.forEach(function(val,i){var key,associatedMeasures=dimensionMeasureMap[field];if(associatedMeasures instanceof Array&&dataLen>1){associatedMeasures=associatedMeasures.filter(function(d){return d in fieldsConfig}),key=val;var icon={value:""};if(isRetinalField&&(icon={type:"icon",color:colorAxis.getColor(val),shape:shapeAxis.getShape(val),size:sizeAxis.getSize(val)*config.iconScale}),associatedMeasures.length>1){var formattedKey=type===dist_datamodel.DimensionSubtype.TEMPORAL?formatterFn(key,interval):key;values.push([icon,"".concat(formattedKey)]),associatedMeasures.forEach(function(measure){measureIndex=fieldsConfig[measure].index,value=data[i][measureIndex];var numberFormat=fieldspace.fields[measureIndex].numberFormat(),measureFormatter=strategies_getDefaultTooltipFormatterFn(strategies_formatters(numberFormat,interval,valueParser)[dist_datamodel.MeasureSubtype.CONTINUOUS]);formattedValue=measureFormatter(value),values.push([{value:"".concat(retrieveFieldDisplayName(context.data,measure)).concat(separator),style:{"margin-left":"".concat(config.margin,"px}")},className:"".concat(classPrefix,"-tooltip-key")},{value:"".concat(formattedValue),className:"".concat(classPrefix,"-tooltip-value")}])})}else{measureIndex=fieldsConfig[associatedMeasures[0]].index,value=data[i][measureIndex];var numberFormat=fieldspace.fields[measureIndex].numberFormat(),measureFormatter=strategies_getDefaultTooltipFormatterFn(strategies_formatters(numberFormat,interval,valueParser)[dist_datamodel.MeasureSubtype.CONTINUOUS]);formattedValue=measureFormatter(value);var _formattedKey=type===dist_datamodel.DimensionSubtype.TEMPORAL?formatterFn(key,interval):key;values.push([icon,{value:"".concat(_formattedKey),className:"".concat(classPrefix,"-tooltip-key")},{value:"".concat(formattedValue),className:"".concat(classPrefix,"-tooltip-value")}])}}else key=field,formattedValue=formatterFn(value=val),values.push([{value:"".concat(retrieveFieldDisplayName(context.data,key)).concat(separator),className:"".concat(config.classPrefix,"-tooltip-key")},{value:"".concat(formattedValue),className:"".concat(config.classPrefix,"-tooltip-value")}])}),values},strategies_buildTooltipData=function buildTooltipData(dataModel){var config=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},context=arguments.length>2?arguments[2]:void 0,fieldValues=[],dataObj=dataModel.getData(),data=dataObj.data,schema=dataObj.schema,fieldspace=dataModel.getFieldspace(),fieldsConfig=dataModel.getFieldsConfig(),detailFields=context.detailFields||[],dimensions=schema.filter(function(d){return d.type===dist_datamodel.FieldType.DIMENSION}),measures=schema.filter(function(d){return d.type===dist_datamodel.FieldType.MEASURE}),containsDetailField=schema.find(function(d){return-1!==detailFields.indexOf(d.name)}),dataLen=data.length,valueParser=context.valueParser,dimensionMeasureMap=context.dimensionMeasureMap,defFormatter=strategies_formatters(null,null,valueParser)[dist_datamodel.DimensionSubtype.CATEGORICAL];if(dataLen>1&&containsDetailField)fieldValues=function getTabularData(dataObj,context,defaultFormatter){var rows=[],data=dataObj.data,schema=dataObj.schema,fieldspace=dataObj.fieldspace;rows.push(schema.map(function(d){return d.name}));var valueParser=context.valueParser,timeDiffs=context.timeDiffs;return data.forEach(function(d){var row=[];schema.forEach(function(fieldObj,i){var interval=fieldObj.subtype===dist_datamodel.DimensionSubtype.TEMPORAL?timeDiffs[fieldObj.name]:0,numberFormat=fieldObj.type===dist_datamodel.FieldType.MEASURE&&fieldspace.fields[i].numberFormat(),value=strategies_getDefaultTooltipFormatterFn(strategies_formatters(numberFormat,interval,valueParser)[fieldObj.subtype],defaultFormatter)(d[i]);row.push(value)}),rows.push(row)}),rows}({data:data,schema:schema,fieldspace:fieldspace},context,defFormatter);else{dimensions.forEach(function(item){fieldValues=[].concat(strategies_toConsumableArray(fieldValues),strategies_toConsumableArray(strategies_getRowContent(item,context,{fieldsConfig:fieldsConfig,data:data,defFormatter:defFormatter,fieldspace:fieldspace},config)))});var allMeasures=strategies_toConsumableArray(_construct(Set,strategies_toConsumableArray(Object.values(dimensionMeasureMap))));(dataLen>1?measures.filter(function(d){return-1===allMeasures.indexOf(d.name)}):measures).forEach(function(item){fieldValues=[].concat(strategies_toConsumableArray(fieldValues),strategies_toConsumableArray(strategies_getRowContent(item,context,{fieldsConfig:fieldsConfig,data:data,defFormatter:defFormatter,fieldspace:fieldspace},config)))})}return fieldValues},strategies_strategies={selectionSummary:function selectionSummary(dm,config,context){var aggFns=context.selectionSet.mergedEnter.aggFns,dataObj=dm.getData(),measures=dataObj.schema.filter(function(d){return d.type===dist_datamodel.FieldType.MEASURE}),aggregatedModel=dm.groupBy([""],measures.reduce(function(acc,v){return acc[v.name]=aggFns[v.name]===COUNT?SUM:aggFns[v.name],acc},{saveChild:!1})),fieldsConf=aggregatedModel.getFieldsConfig(),values=[[{value:"".concat(dataObj.data.length),style:{"font-weight":"bold"}},"Items Selected"]],measureNames=measures.map(function(d){return d.name});return measureNames.forEach(function(measure){values.push(["(".concat(aggFns[measure].toUpperCase(),")"),"".concat(retrieveFieldDisplayName(dm,measure)),{value:"".concat(aggregatedModel.getData().data[0][fieldsConf[measure].index].toFixed(2)),style:{"font-weight":"bold"}}])}),1===measureNames.length&&(values=[[].concat(strategies_toConsumableArray(values[0]),strategies_toConsumableArray(values[1]))]),values},highlightSummary:function highlightSummary(data,config,context){return strategies_buildTooltipData(data,config,context)}};__webpack_require__(11);function tooltip_typeof(obj){return(tooltip_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function tooltip_toConsumableArray(arr){return function tooltip_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);i2&&void 0!==arguments[2]?arguments[2]:{},totalHeight=0,totalWidth=0,dataModel=selectionSet.mergedEnter.model,context=this.firebolt.context,drawingInf=this.drawingContext();if(dataModel.isEmpty()||null===payload.criteria||!1===selectionSet.isSourceFieldPresent)return this.hide(options,null),this;var tooltips=this._tooltips,config=this.config(),boundBox={width:drawingInf.width,height:drawingInf.height},showInPosition=payload.showInPosition,pad=config.padding,dataModels=[],fragmented="fragmented"===config.mode,sourceInf=context.getSourceInfo(),fields=sourceInf.fields,showVertically=!!(!!fields.x[0]&&fields.x[0].type()===dist_datamodel.FieldType.DIMENSION),tooltipPos=payload.position,boxes=[],enter={},uids=dataModel.getData().uids;fragmented?dataModels.push.apply(dataModels,tooltip_toConsumableArray(uids.map(function(d){return dataModel.select(function(fieldsArr,i){return i===d},{saveChild:!1})}))):dataModels.push(dataModel);var target=payload.target,targetFields=[];if(target){targetFields=target[0]||[];for(var sourceFields=payload.sourceFields,indices=[],i=0,len=targetFields.length;idrawingInf.height:totalWidth>drawingInf.width)break;boxes.push({x:position.x,y:position.y,width:tooltipBoundBox.width,height:tooltipBoundBox.height,tooltip:tooltipInst})}}for(var key in tooltips)if(!enter[key]){var tooltip=tooltips[key];tooltip.content(payload.action,null),tooltip.getContents().length||(tooltip.remove(),delete tooltips[key])}return fragmented&&(!function spaceOutBoxes(boxes,extent,showVertically){var y,height,x,width,i,len=boxes.length,spaceOutIfOverlap=function spaceOutIfOverlap(firstBox,secondBox,opposite){x=firstBox.x,width=firstBox.width,y=firstBox.y,height=firstBox.height;var bottom=y+height,right=x+width;showVertically?(opposite?ysecondBox.y)&&(secondBox.y=opposite?firstBox.y-secondBox.height-5:bottom+5):(opposite?xsecondBox.x)&&(secondBox.x=opposite?firstBox.x-secondBox.width-5:right+5)};for(boxes.sort(function(a,b){return showVertically?a.y-b.y:a.x-b.x}),i=0,i=0;iextent.height||boxes[i].x+boxes[i].width>extent.width)for(showVertically?boxes[i].y-=boxes[i].height+boxes[i].y-extent.height:boxes[i].x-=boxes[i].width+boxes[i].x-extent.width,i=len-1;i>0;i--)spaceOutIfOverlap(boxes[i],boxes[i-1],!0)}(boxes,boundBox,showVertically),boxes.forEach(function(box){return box.tooltip.position(box.x,box.y,{repositionArrow:!0})})),this}},{key:"hide",value:function hide(options){var tooltips=this._tooltips;for(var key in tooltips)if({}.hasOwnProperty.call(tooltips,key)){var strategy=options.strategy||this._strategy;tooltips[key].content(strategy,null),tooltips[key].hide()}}}],[{key:"defaultConfig",value:function defaultConfig(){return{padding:5,offset:{x:0,y:0},highlightSummary:{dataTransform:function dataTransform(dt,fields){return fields?dt.project(fields,{saveChild:!1}):dt}},selectionSummary:{dataTransform:function dataTransform(dt,fields){var fieldspace=dt.getFieldspace(),dimensions=Object.keys(fieldspace.getDimension()),measures=Object.keys(fieldspace.getMeasure()),projectedFields=defaultValue(fields,measures.length?[measures[0]]:[]);return dt.project([].concat(tooltip_toConsumableArray(dimensions),tooltip_toConsumableArray(projectedFields)),{saveChild:!1})}}}}},{key:"formalName",value:function formalName(){return"tooltip"}}]),Tooltip}();__webpack_require__(12);function crossline_typeof(obj){return(crossline_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function crossline_toConsumableArray(arr){return function crossline_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);i2&&void 0!==arguments[2]?arguments[2]:{},strategy=this._strategies[options.strategy||this._strategy];return!1!==selectionSet.isSourceFieldPresent&&strategy(selectionSet,this,options.strategy||this._strategy),this}}],[{key:"formalName",value:function formalName(){return"highlighter"}},{key:"target",value:function target(){return"visual-unit"}}]),PlotHighlighter}();function side_effects_filter_typeof(obj){return(side_effects_filter_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function side_effects_filter_defineProperties(target,props){for(var i=0;i67.5&&rotationNormalizer<=90||(yShift+=2*height),xShift=width,xShift=90===rotation?height:270===rotation?-height:0,orientation===axis_orientation_TOP?(xShift=fixedBaseline&&ticks[0]===d&&type===constants_LINEAR?xShift+xShift/2:xShift,renderer_utils_selectElement(this).attr("transform","translate(".concat(-xShift+tickSize,"\n ").concat(-yShift-tickSize,") rotate(").concat(rotation,")"))):(xShift=fixedBaseline&&ticks[0]===d&&type===constants_LINEAR?xShift-xShift/2:xShift,renderer_utils_selectElement(this).attr("transform","translate(".concat(xShift-tickSize,"\n ").concat(yShift+tickSize,") rotate(").concat(rotation,")"))),renderer_utils_selectElement(this).transition().duration(1e3).text(datum)}),tickText},axis_renderer_changeTickOrientation=function changeTickOrientation(selectContainer,axisInstance,tickSize){var _smartTicks=axisInstance._smartTicks,config=axisInstance.config(),renderConfig=axisInstance.renderConfig(),labelManager=axisInstance.dependencies().labelManager,orientation=config.orientation,classPrefix=config.classPrefix,labels=renderConfig.labels,rotation=labels.rotation,isSmartTicks=labels.smartTicks,tickText=selectContainer.selectAll(".tick text");if(tickText.selectAll("tspan").remove(),!rotation||"top"!==orientation&&"bottom"!==orientation)if(rotation||isSmartTicks){if(tickText.text(""),"top"===orientation||"bottom"===orientation)tickText.attr("y",0).attr("x",0).attr("transform","").text(""),makeElement(tickText,"tspan",function(d,i){return _smartTicks[i]?_smartTicks[i].lines:[]},"".concat(classPrefix,"-smart-text")).attr("dy","0").style("opacity","0").transition().duration(1e3).on("end",axisInstance.registerAnimationDoneHook()).attr("dy",function(d,i){return"bottom"===orientation||0!==i?_smartTicks[0].oriTextHeight:-_smartTicks[0].oriTextHeight*(_smartTicks[0].lines.length-1)-tickSize}).style("opacity",1).text(function(e){return e}).attr("x",0);else makeElement(tickText,"tspan",function(d,i){return _smartTicks[i].lines},"".concat(classPrefix,"-smart-text")).text(function(e){return e})}else tickText.attr("transform","");else axis_renderer_rotateAxis(axisInstance,tickText,labelManager);return tickText},axis_renderer_setFixedBaseline=function setFixedBaseline(axisInstance){var fixedBaseline=axisInstance.config().fixedBaseline,showInnerTicks=axisInstance.renderConfig().showInnerTicks,domain=axisInstance.domain();fixedBaseline&&domain.length&&showInnerTicks&&axisInstance.setFixedBaseline()},axis_renderer_setAxisNamePos=function setAxisNamePos(textNode,orientation,measures){var axisNameHeight=measures.axisNameHeight,yOffset=measures.yOffset,labelOffset=measures.labelOffset,availableSpace=measures.availableSpace;switch(orientation){case axis_orientation_LEFT:textNode.attr("transform","translate(".concat(-(availableSpace.width-axisNameHeight),",").concat(yOffset+labelOffset,")rotate(-90)"));break;case axis_orientation_RIGHT:textNode.attr("transform","translate(".concat(availableSpace.width-axisNameHeight,",").concat(yOffset+labelOffset,")rotate(90)"));break;case axis_orientation_TOP:textNode.attr("transform","translate(".concat(availableSpace.width/2,",").concat(-availableSpace.height+axisNameHeight,")"));break;case axis_orientation_BOTTOM:textNode.attr("transform","translate(".concat(availableSpace.width/2,",").concat(availableSpace.height-axisNameHeight/2,")"))}return textNode};var _rangeAdjustmentMap,longestWord={month:"September",quarter:"October",halfYearly:"July",year:9999,day:"September",hour:"24 AM",mintues:"60:60",seconds:":60",week:"Wed 31"},skip_ticks_tickIntervals=[[1,1,"milliseconds",src_millisecond.every(1),"seconds"],[1,1e3,"seconds",src_second.every(1),"seconds"],[5,5e3,"five seconds",src_second.every(5),"seconds"],[10,1e4,"ten seconds",src_second.every(10),"seconds"],[15,15e3,"fifteen seconds",src_second.every(15),"seconds"],[30,3e4,"thirty seconds",src_second.every(30),"seconds"],[1,6e4,"minute",src_minute.every(1),"minutes"],[5,3e5,"five minutes",src_minute.every(5),"minutes"],[10,6e5,"ten minutes",src_minute.every(10),"minutes"],[15,9e5,"fifteen minutes",src_minute.every(15),"minutes"],[30,18e5,"thirty minutes",src_minute.every(30),"minutes"],[1,36e5,"hour",src_hour.every(1),"hour"],[3,108e5,"three hours",src_hour.every(3),"hour"],[6,216e5,"six hours",src_hour.every(6),"hour"],[12,432e5,"twelve hours",src_hour.every(12),"hour"],[1,864e5,"daily",src_day.every(1),"day"],[1,6048e5,"weekly",sunday.every(1),"week"],[1,2592e6,"monthly",src_month.every(1),"week"],[3,7776e6,"quaterly",src_month.every(3),"quarter"],[6,15552e6,"half yearly",src_month.every(6),"halfYearly"],[1,31536e6,"yearly",src_year.every(1),"year"],[2,63072e6,"2 year",src_year.every(2),"year"],[3,94608e6,"3 year",src_year.every(3),"year"],[5,15768e7,"5 year",src_year.every(5),"year"],[10,31536e7,"decade",src_year.every(10),"year"],[100,31536e8,"century",src_year.every(100),"year"],[1e3,31536e9,"millenium",src_year.every(1e3),"year"]],getTickIntervalFnBasedOnNumberOfTicks=function getTickIntervalFnBasedOnNumberOfTicks(interval,count,context){for(var possibleTickLevelIndex=skip_ticks_tickIntervals.length-1,maxPossibleTicks=1,tickIntervalLevelInfo=null,i=skip_ticks_tickIntervals.length-1;i>=0;i--){var tickIntervalInfo=skip_ticks_tickIntervals[i],numOfPossibleTicks=Math.floor(interval/tickIntervalInfo[1]);numOfPossibleTicks<=count&&(possibleTickLevelIndex=i,maxPossibleTicks=numOfPossibleTicks)}return tickIntervalLevelInfo=skip_ticks_tickIntervals[possibleTickLevelIndex],function getActualTickInterval(context,noOfTicks){var minWidthBetweenTicks=context._minTickDistance.width,width=context.availableSpace().width;return Math.floor((width-(noOfTicks-1)*minWidthBetweenTicks)/noOfTicks)}(context,maxPossibleTicks)=numOfTicksAccordingToMinDiff&&(actualNumberOfTicks=numOfTicksAccordingToMinDiff),getTickIntervalFnBasedOnNumberOfTicks(millisecondInterval,actualNumberOfTicks,context)}(context,maxTicks));context.renderConfig({tickValues:ticks})},adjustHorizontalRange=function adjustHorizontalRange(range,diff){return range[0]+=diff,range[1]-=diff,range},adjustVerticalRange=function adjustVerticalRange(range,diff){return range[0]-=diff,range[1]+=diff,range},rangeAdjustmentMap=(space_setter_defineProperty(_rangeAdjustmentMap={},axis_orientation_TOP,adjustHorizontalRange),space_setter_defineProperty(_rangeAdjustmentMap,axis_orientation_BOTTOM,adjustHorizontalRange),space_setter_defineProperty(_rangeAdjustmentMap,axis_orientation_LEFT,adjustVerticalRange),space_setter_defineProperty(_rangeAdjustmentMap,axis_orientation_RIGHT,adjustVerticalRange),_rangeAdjustmentMap),setAxisRange=function setAxisRange(context,type,rangeBounds,offset){context.range(rangeBounds),offset&&context.renderConfig(space_setter_defineProperty({},"".concat(type,"Offset"),offset))},getAdjustedRange=function getAdjustedRange(minDiff,range,domain,config){var orientation=config.orientation,adjustRange=config.adjustRange,diff=function getAxisOffset(timeDiff,range,domain){var avWidth=Math.abs(range[1]-range[0]),bars=avWidth/(avWidth/(domain[1]-domain[0])*timeDiff);return(avWidth-avWidth/(bars+1)*bars)/2}(minDiff,range,domain);return adjustRange?rangeAdjustmentMap[orientation](range,diff):range},space_setter_spaceSetter=function spaceSetter(context,spaceConfig){var _ref,tickInterval,heightForTicks,config=context.config(),_context$availableSpa2=context.availableSpace(),availWidth=_context$availableSpa2.width,availHeight=_context$availableSpa2.height,padding=_context$availableSpa2.padding,top=padding.top,left=padding.left,bottom=padding.bottom,right=padding.right,isOffset=spaceConfig.isOffset,_context$renderConfig2=context.renderConfig(),showAxisName=_context$renderConfig2.showAxisName,labels=_context$renderConfig2.labels,rotation=labels.rotation,fixedBaseline=config.fixedBaseline,axisNamePadding=config.axisNamePadding,tickValues=config.tickValues,_context$getAxisDimen=context.getAxisDimensions(),tickDimensions=_context$getAxisDimen.tickDimensions,allTickDimensions=_context$getAxisDimen.allTickDimensions,axisNameDimensions=_context$getAxisDimen.axisNameDimensions,tickSize=_context$getAxisDimen.tickSize,tickDimHeight=tickDimensions.height,tickDimWidth=tickDimensions.width,namePadding=showAxisName?axisNamePadding:0,labelConfig={smartTicks:!0,rotation:labels.rotation},minTickDistance=context._minTickDistance,minTickSpace=context._minTickSpace,minDiff=context._minDiff,domain=context.domain(),axisNameHeight=axisNameDimensions.height,minWidthBetweenTicks=minTickDistance.width,minTickWidth=minTickSpace.width,minTickHeight=minTickSpace.height;return space_setter_defineProperty(_ref={},TIME,{x:function x(){!tickValues&&context.applyTickSkipping();var noOfTicks=context.getTickValues().length;heightForTicks=availHeight-axisNameHeight-tickSize-namePadding,(tickInterval=(availWidth-(noOfTicks-1)*minWidthBetweenTicks)/noOfTicks)axisNameHeight?(labelConfig.rotation=null,context.renderConfig({showInnerTicks:!0,showAxisName:!0})):(labelConfig.rotation=-90,context.renderConfig({showInnerTicks:!0,showAxisName:!1}))),availHeight0&&void 0!==arguments[0]?arguments[0]:0,width=arguments.length>1?arguments[1]:void 0,height=arguments.length>2?arguments[2]:void 0,rotatedHeight=height,rotatedWidth=width;if(rotation){var angle=(rotation||0)*Math.PI/180;rotatedWidth=Math.abs(height*Math.sin(angle))+Math.abs(width*Math.cos(angle)),rotatedHeight=Math.abs(width*Math.sin(angle))+Math.abs(height*Math.cos(angle))}return{width:rotatedWidth,height:rotatedHeight}},helper_setOffset=function setOffset(context){var x=0,y=0,logicalSpace=context.logicalSpace(),config=context.config(),orientation=config.orientation,xOffset=config.xOffset,yOffset=config.yOffset;orientation===axis_orientation_LEFT&&(x=void 0===xOffset?logicalSpace.width:xOffset),orientation===axis_orientation_TOP&&(y=void 0===yOffset?logicalSpace.height:yOffset),context.renderConfig({xOffset:x,yOffset:y})},getAxisComponentDimensions=function getAxisComponentDimensions(context){var axisTicks,largestTick="",largestTickDimensions={width:0,height:0},smartTick={},allTickDimensions=[],scale=context.scale(),_context$renderConfig=context.renderConfig(),tickValues=_context$renderConfig.tickValues,showAxisName=_context$renderConfig.showAxisName,name=context.config().name,labelManager=context.dependencies().labelManager,labelFunc=scale.ticks||scale.quantile||scale.domain;return labelManager.setStyle(context._tickLabelStyle),axisTicks=(axisTicks=tickValues||labelFunc()).map(function(originalLabel,i){var label=context.getFormattedText(originalLabel,i,axisTicks),tickDimensions=labelManager.getOriSize(label);return allTickDimensions.push(tickDimensions),tickDimensions.width>largestTickDimensions.width&&(largestTick=label,smartTick=context.smartTicks()?context.smartTicks()[i]:{},largestTickDimensions=tickDimensions,smartTick=smartTick||tickDimensions),label}),labelManager.setStyle(context._axisNameStyle),{axisNameDimensions:showAxisName?labelManager.getOriSize(name):{width:0,height:0},largestTick:largestTick,largestTickDimensions:largestTickDimensions,allTickDimensions:allTickDimensions,axisTicks:axisTicks,smartTick:smartTick,tickSize:context.getTickSize()}},getHorizontalAxisSpace=function getHorizontalAxisSpace(context,axisDimensions,range){var width,height,domain=context.domain(),minTickDistance=context._minTickDistance.width,tickSize=axisDimensions.tickSize,tickDimensions=axisDimensions.tickDimensions,axisNameDimensions=axisDimensions.axisNameDimensions,_context$config2=context.config(),axisNamePadding=_context$config2.axisNamePadding,tickValues=_context$config2.tickValues,showAxisName=context.renderConfig().showAxisName,axisDimHeight=axisNameDimensions.height,tickDimHeight=tickDimensions.height,tickDimWidth=tickDimensions.width;if(width=range&&range.length?range[1]-range[0]:3*(tickDimWidth+minTickDistance),height=0,tickValues){var minTickDiff=context.getMinTickDifference(),_ref=[Math.min.apply(Math,cartesian_axis_helper_toConsumableArray(tickValues).concat(cartesian_axis_helper_toConsumableArray(domain))),Math.max.apply(Math,cartesian_axis_helper_toConsumableArray(tickValues).concat(cartesian_axis_helper_toConsumableArray(domain)))];width=(_ref[1]-_ref[0])/Math.abs(minTickDiff)*(tickDimWidth+context._minTickDistance.width)}return height=width&&0!==width?tickDimHeight:Math.max(tickDimWidth,tickDimHeight),{width:width,height:height+=(showAxisName?axisDimHeight+axisNamePadding:0)+tickSize}},getVerticalAxisSpace=function getVerticalAxisSpace(context,axisDimensions){var height,width,domain=context.domain(),tickSize=axisDimensions.tickSize,tickDimensions=axisDimensions.tickDimensions,axisNameDimensions=axisDimensions.axisNameDimensions,_context$config3=context.config(),axisNamePadding=_context$config3.axisNamePadding,tickValues=_context$config3.tickValues,showAxisName=context.renderConfig().showAxisName,axisDimHeight=axisNameDimensions.height,tickDimHeight=tickDimensions.height;if(height=0,width=tickDimensions.width,tickValues){var minTickDiff=context.getMinTickDifference(),_ref2=[Math.min.apply(Math,cartesian_axis_helper_toConsumableArray(tickValues).concat(cartesian_axis_helper_toConsumableArray(domain))),Math.max.apply(Math,cartesian_axis_helper_toConsumableArray(tickValues).concat(cartesian_axis_helper_toConsumableArray(domain)))];height=(_ref2[1]-_ref2[0])/Math.abs(minTickDiff)*tickDimHeight}return{height:height,width:width+=(showAxisName?axisDimHeight:0)+tickSize+axisNamePadding}},helper_calculateBandSpace=function calculateBandSpace(context){var range=context.range(),axisDimensions=context.getAxisDimensions(),orientation=context.config().orientation,show=context.renderConfig().show,largestTickDimensions=axisDimensions.largestTickDimensions,axisTicks=axisDimensions.axisTicks,allTickDimensions=axisDimensions.allTickDimensions,largestDimHeight=largestTickDimensions.height,minTickWidth=context._minTickDistance.width;if(orientation===axis_orientation_TOP||orientation===axis_orientation_BOTTOM){var _getHorizontalAxisSpa=getHorizontalAxisSpace(context,axisDimensions,range),_width=_getHorizontalAxisSpa.width,_height=_getHorizontalAxisSpa.height;return _width&&0!==_width||(_width=allTickDimensions.reduce(function(t,n){return t+Math.min(n.width,n.height)+minTickWidth},0)),!1===show&&(_height=0,_width=0),{width:_width,height:_height}}var _getVerticalAxisSpace=getVerticalAxisSpace(context,axisDimensions),width=_getVerticalAxisSpace.width,height=_getVerticalAxisSpace.height;return height&&0!==height||(height=axisTicks.length*(largestDimHeight+context._minTickDistance.height)),!1===show&&(width=0),{width:width,height:height}},helper_getValidDomain=function getValidDomain(context,domain){var userDom=context.config().domain;return userDom&&(domain=userDom),defaultValue(domain,[])},setContinousAxisDomain=function setContinousAxisDomain(context,domain){var nice=context.config().nice,scale=context.scale.bind(context);scale().domain(domain),nice&&scale().nice(),context._domain=scale().domain()},props_PROPS={availableSpace:{},axisDimensions:{},axisComponentDimensions:{},config:{sanitization:function sanitization(context,value){var oldConfig=Object.assign({},context._config||{}),mockedOldConfig=mergeRecursive({},oldConfig);(value=mergeRecursive(mockedOldConfig,value)).axisNamePadding=Math.max(value.axisNamePadding,0);var shouldAxesScaleUpdate=function hasAxesConfigChanged(){var obj=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},obj1=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},properties=arguments.length>2?arguments[2]:void 0;return!(!Object.keys(obj).length||!Object.keys(obj1).length)&&properties.some(function(key){return obj[key]!==obj1[key]})}(value,oldConfig,["interpolator","exponent","base","orientation"]),tickFormatter=context.sanitizeTickFormatter(value);return shouldAxesScaleUpdate&&(context._scale=context.createScale(value),context._axis=context.createAxis(value)),context._tickFormatter=function(ticks){return tickFormatter(ticks)},context.resetRenderConfig(value),value}},renderConfig:{sanitization:function sanitization(context,value){var oldConfig=Object.assign({},context._renderConfig||{});return value=mergeRecursive(oldConfig,value)}},logicalSpace:{},mount:{},range:{sanitization:function sanitization(context,value){return context.scale().range(value),context.logicalSpace(null),value}},smartTicks:{},tickSize:{},maxTickSpaces:{sanitization:function sanitization(context,value){var oldConfig=Object.assign({},context._maxTickSpaces||{});return value=mergeRecursive(oldConfig,value)}},valueParser:{defaultValue:function defaultValue(val){return val}}};function simple_axis_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}function simple_axis_defineProperties(target,props){for(var i=0;i0&&void 0!==arguments[0]?arguments[0]:0,height=arguments.length>1?arguments[1]:void 0,padding=arguments.length>2?arguments[2]:void 0,isOffset=arguments.length>3?arguments[3]:void 0,labelConfig={},orientation=this.config().orientation;this.availableSpace({width:width,height:height,padding:padding});var type=this.constructor.type();return labelConfig=orientation===axis_orientation_TOP||orientation===axis_orientation_BOTTOM?space_setter_spaceSetter(this,{isOffset:isOffset})[type].x():space_setter_spaceSetter(this,{isOffset:isOffset})[type].y(),this.renderConfig({labels:labelConfig}),this.setTickConfig(),this.setSmartAxisName(),this}},{key:"setSmartAxisName",value:function setSmartAxisName(){var _this$config2=this.config(),orientation=_this$config2.orientation,name=_this$config2.name,dimType=orientation===axis_orientation_TOP||orientation===axis_orientation_BOTTOM?"width":"height",widthDim=this.availableSpace()[dimType],labelManager=this.dependencies().labelManager;return labelManager.setStyle(this._axisNameStyle),this.renderConfig({smartAxisName:function getSmartAxisName(name,width,labelManager){var oriSize=labelManager.getOriSize(name);return labelManager.useEllipsesOnOverflow(!0),labelManager.getSmartText(name,width,oriSize.height,!0)}(name,widthDim,labelManager)}),this}},{key:"setTickConfig",value:function setTickConfig(){return this}},{key:"getScaleValue",value:function getScaleValue(domainVal){if(null!==domainVal&&void 0!==domainVal)return this.scale()(domainVal)}},{key:"getTickSize",value:function getTickSize(){return this.axis().tickSize()}},{key:"getAxisDimensions",value:function getAxisDimensions(){for(var _len=arguments.length,params=new Array(_len),_key=0;_key<_len;_key++)params[_key]=arguments[_key];return this.axisDimensions(function computeAxisDimensions(context){var tickDimensions={},labels=context.renderConfig().labels,smartTicks=labels.smartTicks,rotation=labels.rotation,_getAxisComponentDime=getAxisComponentDimensions(context),largestTickDimensions=_getAxisComponentDime.largestTickDimensions,axisTicks=_getAxisComponentDime.axisTicks,smartTick=_getAxisComponentDime.smartTick,axisNameDimensions=_getAxisComponentDime.axisNameDimensions,allTickDimensions=_getAxisComponentDime.allTickDimensions,tickSize=_getAxisComponentDime.tickSize,labelHeight=largestTickDimensions.height,labelWidth=largestTickDimensions.width;return 0===context.domain().length?null:(tickDimensions=getRotatedSpaces(rotation,(tickDimensions=smartTicks?smartTick:{width:labelWidth,height:labelHeight}).width,tickDimensions.height),0===tickSize&&(tickDimensions={width:0,height:0}),{allTickDimensions:allTickDimensions,tickSize:tickSize,tickDimensions:tickDimensions,axisNameDimensions:axisNameDimensions,largestTickDimensions:largestTickDimensions,axisTicks:axisTicks})}.apply(void 0,[this].concat(params))),this.axisDimensions()}},{key:"getLogicalSpace",value:function getLogicalSpace(){return this.logicalSpace()||this.logicalSpace(function calculateContinousSpace(context){var range=context.range(),axisDimensions=context.getAxisDimensions(),orientation=context.config().orientation,_context$renderConfig6=context.renderConfig(),show=_context$renderConfig6.show,showAxisName=_context$renderConfig6.showAxisName,axisNameDimensions=axisDimensions.axisNameDimensions;if(!1===show)return{width:0,height:0};var axisNameWidth=axisNameDimensions.width;if(orientation===axis_orientation_TOP||orientation===axis_orientation_BOTTOM){var _getHorizontalAxisSpa2=getHorizontalAxisSpace(context,axisDimensions,range),_width2=_getHorizontalAxisSpa2.width,_height2=_getHorizontalAxisSpa2.height;return{width:Math.max(_width2,axisNameWidth),height:_height2}}var _getVerticalAxisSpace2=getVerticalAxisSpace(context,axisDimensions),width=_getVerticalAxisSpace2.width,height=_getVerticalAxisSpace2.height;return{width:width,height:Math.max(height,showAxisName?axisNameWidth:0)}}(this)),helper_setOffset(this),this.logicalSpace()}},{key:"invert",value:function invert(value){return this.scale().invert(value)}},{key:"getNearestRange",value:function getNearestRange(v1,v2){return[v1,v2]}},{key:"invertExtent",value:function invertExtent(v1,v2){return[this.invert(v1),this.invert(v2)]}},{key:"getMinTickDifference",value:function getMinTickDifference(){return this.domain()}},{key:"getFormattedTickValues",value:function getFormattedTickValues(tickValues){return tickValues}},{key:"getUnitWidth",value:function getUnitWidth(){return 0}},{key:"serialize",value:function serialize(){return{name:this.name,type:this.type,range:this.range(),config:this.config()}}},{key:"render",value:function render(){return this.mount()&&(this.setTickConfig(),function renderAxis(axisInstance){var config=axisInstance.config(),renderConfig=axisInstance.renderConfig(),labelManager=axisInstance.dependencies().labelManager,mount=axisInstance.mount(),range=axisInstance.range(),axis=axisInstance.axis(),scale=axisInstance.scale(),axisNameStyle=axisInstance._axisNameStyle,tickLabelStyle=axisInstance._tickLabelStyle,axisTickFormatter=axisInstance._tickFormatter,orientation=config.orientation,name=config.name,axisNamePadding=config.axisNamePadding,className=config.className,id=config.id,classPrefix=config.classPrefix,show=renderConfig.show,xOffset=renderConfig.xOffset,yOffset=renderConfig.yOffset,showAxisName=renderConfig.showAxisName,labels=renderConfig.labels,smartAxisName=renderConfig.smartAxisName;if(show){var tickSize=axisInstance.getTickSize(),selectContainer=makeElement(renderer_utils_selectElement(mount),"g",[axisInstance],"".concat(className),{},function(key){return key.config().id});labelManager.setStyle(tickLabelStyle);var labelFunc=scale.ticks||scale.quantile||scale.domain,ticks=axis.tickValues()||labelFunc();axis.tickFormat(axisTickFormatter(ticks));var availableSpace=Math.abs(range[0]-range[1]),labelProps=axisInstance.axisComponentDimensions().largestTickDimensions;selectContainer.attr("transform","translate(".concat(xOffset,",").concat(yOffset,")")),axis_renderer_setFixedBaseline(axisInstance),!1===labels.smartTicks||0===tickSize?selectContainer.transition().duration(1e3).on("end",axisInstance.registerAnimationDoneHook()).call(axis):selectContainer.call(axis),selectContainer.selectAll(".tick").classed("".concat(classPrefix,"-ticks"),!0),selectContainer.selectAll(".tick line").classed("".concat(classPrefix,"-tick-lines"),!0),selectContainer.selectAll(".tick text").classed("".concat(classPrefix,"-ticks"),!0).classed("".concat(classPrefix,"-ticks-").concat(id),!0),axis_renderer_changeTickOrientation(selectContainer,axisInstance,tickSize);var textNode=makeElement(selectContainer,"text",[smartAxisName],"".concat(classPrefix,"-axis-name")).attr("text-anchor","middle").classed("".concat(classPrefix,"-axis-name-").concat(id),!0).text(function(d){return d.text});textNode.classed(HIDDEN,!showAxisName);var labelOffset=availableSpace/2;labelManager.setStyle(axisNameStyle);var axisNameSpace=labelManager.getOriSize(name),measures={labelProps:labelProps,tickSize:tickSize,axisNamePadding:axisNamePadding,axisNameHeight:axisNameSpace.height,axisNameWidth:axisNameSpace.width,yOffset:yOffset,xOffset:xOffset,labelOffset:labelOffset,availableSpace:axisInstance.availableSpace()};axis_renderer_setAxisNamePos(textNode,orientation,measures)}}(this)),this}},{key:"remove",value:function remove(){return renderer_utils_selectElement(this.mount()).remove(),this}},{key:"unsubscribe",value:function unsubscribe(){return this}},{key:"isReverse",value:function isReverse(){var range=this.range();return range[0]>range[1]}},{key:"getPixelToValueRatio",value:function getPixelToValueRatio(){var scale=this.scale(),range=scale.range(),domain=scale.domain();return Math.abs(range[1]-range[0])/(domain[1]-domain[0])}},{key:"animationDone",value:function animationDone(){return Promise.all(this._animationDonePromises)}},{key:"registerAnimationDoneHook",value:function registerAnimationDoneHook(){var resolveFn,promise=new Promise(function(resolve){resolveFn=resolve});return this._animationDonePromises.push(promise),function(){resolveFn()}}},{key:"id",get:function get(){return this._id}}],[{key:"defaultConfig",value:function defaultConfig(){return cartesian_axis_default_config_defaultConfig}}]),SimpleAxis}();function linear_defineProperties(target,props){for(var i=0;iavailableSpace&&(numberOfValues=Math.floor(availableSpace/(labelDim+minTickDistance))),numberOfTicks=numberOfTicks||numberOfValues,numberOfValues=Math.min(numberOfTicks,Math.max(2,numberOfValues)),(tickValues=axis.scale().ticks(numberOfValues)).length>numberOfValues&&(tickValues=tickValues.filter(function(e,i){return i%2==0})),2===numberOfValues&&(tickValues=[(tickValues=axis.scale().ticks(10))[0],tickValues[tickValues.length-1]]),tickValues}(availableSpace,labelProps[orientation===axis_orientation_BOTTOM||orientation===axis_orientation_TOP?"width":"height"],axis,this)}},{key:"getMinTickDifference",value:function getMinTickDifference(){return getSmallestDiff(this.renderConfig().tickValues)}},{key:"setFixedBaseline",value:function setFixedBaseline(tickText){var orientation=this.config().orientation,rotation=this.renderConfig().labels.rotation,axis=this.axis(),ticks=axis.tickValues(),smartTicks=this.smartTicks();if(smartTicks&&smartTicks.length){var _this$smartTicks$=this.smartTicks()[0],width=_this$smartTicks$.width,height=_this$smartTicks$.height;axis.tickTransform(function(d){if(d===ticks[0]){if(orientation===axis_orientation_LEFT||orientation===axis_orientation_RIGHT)return"translate(0, -".concat(height/3,"px)");if((orientation===axis_orientation_TOP||orientation===axis_orientation_BOTTOM)&&!rotation)return"translate(".concat(width/2,"px, ",0,"px)")}return""})}return tickText}}],[{key:"type",value:function type(){return LINEAR}}]),ContinousAxis}();function band_axis_typeof(obj){return(band_axis_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function band_axis_defineProperties(target,props){for(var i=0;irange[1],extent=this.invertExtent(v1,v2);return[scale(reverse?extent[extent.length-1]:extent[0]),scale(reverse?extent[0]:extent[extent.length-1])+scale.bandwidth()]}}],[{key:"type",value:function type(){return BAND}}]),BandAxis}();function time_axis_typeof(obj){return(time_axis_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function time_axis_defineProperties(target,props){for(var i=0;i1?config.range:[DEFAULT_GRADIENT_COLOR].concat(props_toConsumableArray(config.range)));var oldConfig=mergeRecursive(defCon,context.config()),newConfig=mergeRecursive(oldConfig,config);return newConfig.range instanceof Array&&(newConfig.range=newConfig.range.map(function(e,i){return props_getActualHslColor(e,palette[i])}),newConfig.stops=config.stops||newConfig.range.length),newConfig.value=props_getActualHslColor(newConfig.value,newConfig.value),newConfig}},domain:{},scale:{},uniqueValues:{}},helper_treatNullMeasures=function treatNullMeasures(domainVal,scaledVal,minDomainScaledVal){return domainVal instanceof src_InvalidAwareTypes?minDomainScaledVal:scaledVal},helper_resolveAxisConfig=function resolveAxisConfig(propVal,defaultVal,context){switch(getObjProp(propVal,"constructor")){case Function:return propVal(defaultVal,context);case Array:return propVal;default:return defaultVal}};function color_strategy_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}function color_strategy_toConsumableArray(arr){return function color_strategy_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);iMath.min(range.length,18))for(var interpolator=common_utils_piecewiseInterpolator()(function hslInterpolator(){return hslLong}(),range.map(function(e){return props_getHslString(e)})),i=0;i0&&void 0!==arguments[0]?arguments[0]:[];if(domain.length){var scale=this.scale(),range=scale.range?scale.range():null,scaleInfo=this._colorStrategy.domainRange()(domain,this.config().stops,range);this.domain(scaleInfo.domain),scaleInfo.range&&this.scale().range(scaleInfo.range),this.uniqueValues(scaleInfo.uniqueVals),this.scale().domain(scaleInfo.scaleDomain||this.domain())}return this}},{key:"serialize",value:function serialize(){return{type:this.constructor.type(),scale:this.scale(),domain:this.domain(),config:this.config()}}},{key:"transformColor",value:function transformColor(color,transformationArr){var h=360*color[0],s=100*color[1],l=100*color[2],a=color[3]||1,newH=h+transformationArr[0],newS=s+transformationArr[1],newL=l+transformationArr[2],newA=a+transformationArr[3]||0;return{color:"hsla(".concat(newH,",").concat(newS,"%,").concat(newL,"%,").concat(newA,")"),hsla:[newH/360,newS/100,newL/100,newA]}}},{key:"id",value:function id(){return this._id}},{key:"getHslArray",value:function getHslArray(color){return props_getActualHslColor(color)}}],[{key:"defaultConfig",value:function defaultConfig(){return DEFAULT_CONFIG}},{key:"type",value:function type(){return"color"}}]),ColorAxis}(),defaults_DEFAULT_CONFIG={value:36,range:[36,1e3]};function size_strategy_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}function size_strategy_toConsumableArray(arr){return function size_strategy_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);i0&&void 0!==arguments[0]?arguments[0]:0,value=this.config().value,scale=this.scale(),domain=this.domain()||[1,1];return scale&&domain[0]!==domain[1]?this._sizeStrategy.range(domainVal,scale,this.domain(),this.uniqueValues()):value}},{key:"updateDomain",value:function updateDomain(domain){if(domain){var domainInfo=(0,this._sizeStrategy.domain)(domain,this.config().intervals);this.domain(domainInfo.domain),this.uniqueValues(domainInfo.uniqueVals),this.scale().domain(domainInfo.scaleDomain||this.domain())}return this}},{key:"serialize",value:function serialize(){return{type:this.constructor.type(),scale:this.scale(),domain:this.domain(),range:this.range(),config:this.config()}}},{key:"id",value:function id(){return this._id}}],[{key:"defaultConfig",value:function defaultConfig(){return defaults_DEFAULT_CONFIG}},{key:"type",value:function type(){return"size"}}]),SizeAxis}(),shape_axis_defaults_DEFAULT_CONFIG={generator:null,value:"circle",range:["circle","diamond","star","cross","square","wye","triangle"]},shape_axis_props_PROPS={config:{},domain:{},scale:{},uniqueValues:{},generator:{}};function shape_axis_defineProperties(target,props){for(var i=0;i0&&void 0!==arguments[0]?arguments[0]:[];return domain.length&&(this.uniqueValues(domain),this.domain(domain),this.scale().domain(domain),this.config().generator&&(this._generatedShapes=function shapeGenerator(domain,generatorFn){var generatedShapes={};return domain.forEach(function(value){generatedShapes[value]=generatorFn(value)}),generatedShapes}(domain,this.config().generator))),this}},{key:"serialize",value:function serialize(){return{type:this.constructor.type(),scale:this.scale(),domain:this.domain(),range:this.config().range,config:this.config()}}},{key:"id",value:function id(){return this._id}}],[{key:"defaultConfig",value:function defaultConfig(){return shape_axis_defaults_DEFAULT_CONFIG}},{key:"type",value:function type(){return"shape"}}]),ShapeAxis}(),polar_axis_props_PROPS={config:{sanitization:function sanitization(context,config){return mergeRecursive(context.config(),config)},preset:function preset(context,config){var range=config.range,domain=config.domain;range&&context.range(range),domain&&context.domain(domain)}},domain:{},range:{}};function angle_axis_slicedToArray(arr,i){return function angle_axis_arrayWithHoles(arr){if(Array.isArray(arr))return arr}(arr)||function angle_axis_iterableToArrayLimit(arr,i){var _arr=[],_n=!0,_d=!1,_e=void 0;try{for(var _s,_i=arr[Symbol.iterator]();!(_n=(_s=_i.next()).done)&&(_arr.push(_s.value),!i||_arr.length!==i);_n=!0);}catch(err){_d=!0,_e=err}finally{try{_n||null==_i.return||_i.return()}finally{if(_d)throw _e}}return _arr}(arr,i)||function angle_axis_nonIterableRest(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}()}function angle_axis_defineProperties(target,props){for(var i=0;i0&&void 0!==arguments[0]?arguments[0]:{};!function angle_axis_classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}(this,AngleAxis),this._id=getUniqueId(),generateGetterSetters(this,polar_axis_props_PROPS),this._config=mergeRecursive({},this.constructor.defaultConfig()),this.config(config),this._range=[0,360],this._angleFn=angle_axis_pie().value(function(d){return"string"==typeof d?1:d}).sortValues(null),this._angleValues={}}return function angle_axis_createClass(Constructor,protoProps,staticProps){return protoProps&&angle_axis_defineProperties(Constructor.prototype,protoProps),staticProps&&angle_axis_defineProperties(Constructor,staticProps),Constructor}(AngleAxis,[{key:"createScale",value:function createScale(strategy){var range=this.config().range;return scale_creator_createScale({type:strategy.scale,range:range})}},{key:"getScaleValue",value:function getScaleValue(domainVal){return this._angleValues[domainVal]}},{key:"padAngle",value:function padAngle(angle){this._angleFn=this._angleFn.padAngle(angle)}},{key:"domain",value:function domain(){for(var _len=arguments.length,domainVal=new Array(_len),_key=0;_key<_len;_key++)domainVal[_key]=arguments[_key];if(domainVal.length){var customDomain=this.config().domain,domain=domainVal[0].length?domainVal[0]:DEFAULT_ANGLE_DOMAIN;return this._domain=helper_resolveAxisConfig(customDomain,domain,this),createAngleValues(this),this}return this._domain}},{key:"range",value:function range(){if(arguments.length){var customRange=this.config().range;this._range=helper_resolveAxisConfig(customRange,arguments.length<=0?void 0:arguments[0],this);var domain=this.domain(),_this$_range=angle_axis_slicedToArray(this._range,2),startAngle=_this$_range[0],endAngle=_this$_range[1];return this._angleFn.startAngle(startAngle/180*Math.PI).endAngle(Math.PI*endAngle/180),domain&&domain.length&&createAngleValues(this),this}return this._range}}],[{key:"defaultConfig",value:function defaultConfig(){return{}}}]),AngleAxis}(),X="x",Y="y",MEASURE="measure",ROWS="rows",COLUMNS="columns",COL="col",ROW="row",enums_constants_COLOR="color",enums_constants_SHAPE="shape",enums_constants_SIZE="size",enums_constants_LINEAR="linear",constants_LEFT="left",constants_RIGHT="right",CELL="cell",X_AXES="xAxes",Y_AXES="yAxes",ENTRY_CELLS="entryCell",EXIT_CELLS="exitCell",enums_constants_RADIUS="radius",enums_constants_ANGLE="angle",ANGLE0="angle0",PRIMARY="Primary",SECONDARY="Secondary";function radius_axis_defineProperties(target,props){for(var i=0;i0&&void 0!==arguments[0]?arguments[0]:{};!function radius_axis_classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}(this,RadiusAxis),this._id=getUniqueId(),generateGetterSetters(this,polar_axis_props_PROPS),this._range=[],this._radiusFactor=1,this._config=mergeRecursive({},this.constructor.defaultConfig()),this.config(config),this._scale=this.createScale({scale:enums_constants_LINEAR})}return function radius_axis_createClass(Constructor,protoProps,staticProps){return protoProps&&radius_axis_defineProperties(Constructor.prototype,protoProps),staticProps&&radius_axis_defineProperties(Constructor,staticProps),Constructor}(RadiusAxis,[{key:"config",value:function config(){if(arguments.length){var config=mergeRecursive(this.config(),arguments.length<=0?void 0:arguments[0]);return this._config=config,this}return this._config}},{key:"createScale",value:function createScale(strategy){return scale_creator_createScale({type:strategy.scale,range:this.range()})}},{key:"domain",value:function domain(){if(arguments.length){var customDomain=this.config().domain,domain=helper_resolveAxisConfig(customDomain,arguments.length<=0?void 0:arguments[0],this);domain=sanitizeDomainWhenEqual(domain),this._scale.domain(domain),this._domain=domain,adjustDomain(this)}return this._domain}},{key:"getInnerRadius",value:function getInnerRadius(domainVal){return void 0===domainVal?this.range()[0]:this._scale(domainVal)}},{key:"getOuterRadius",value:function getOuterRadius(domainVal){return void 0===domainVal?this.range()[1]:this._scale(domainVal)*this._radiusFactor}},{key:"range",value:function range(){for(var _len=arguments.length,_range=new Array(_len),_key=0;_key<_len;_key++)_range[_key]=arguments[_key];if(_range.length){var _this$config2=this.config(),padding=_this$config2.padding,customRange=_this$config2.range,sanitizedRange=_range[0].map(function(v,i){return v+(i?-padding[i]:padding[i])}),rangeVal=helper_resolveAxisConfig(customRange,sanitizedRange,this);this._range=rangeVal,this._scale.range(rangeVal),adjustDomain(this)}return this._range}},{key:"setRadiusFactor",value:function setRadiusFactor(val){return this._radiusFactor=val,this}}],[{key:"defaultConfig",value:function defaultConfig(){return{padding:[0,1],minOuterRadius:10}}}]),RadiusAxis}();function data_type_scale_map_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}var DATA_TYPES_MEASURE="measure",DATA_TYPES_TEMPORAL="temporal",group_transform=(data_type_scale_map_defineProperty(_dataTypeScaleMap={},"dimension",BAND),data_type_scale_map_defineProperty(_dataTypeScaleMap,DATA_TYPES_MEASURE,LINEAR),data_type_scale_map_defineProperty(_dataTypeScaleMap,DATA_TYPES_TEMPORAL,TIME),function(schema,data,config){var groupBy=config.groupBy instanceof Array?config.groupBy:[config.groupBy],groupByIndices=groupBy.map(function(fieldName){return schema.findIndex(function(d){return d.name===fieldName})});if(void 0!==groupByIndices.find(function(d){return-1===d}))throw new Error("Groupby field ".concat(groupBy," not found in schema"));var groupedData=function nestCollection(params){var nestFn=src_nest();return params.keys.forEach(function(key){return nestFn.key(function(d){return d[key]})}),nestFn.entries(params.data)}({keys:groupByIndices,data:data});return groupedData.forEach(function(d){var key=d.key;src_InvalidAwareTypes.isInvalid(key)&&(d.key=src_InvalidAwareTypes.getInvalidType(key))}),groupedData});var _transformMap;function transform_factory_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}var transformMap=(transform_factory_defineProperty(_transformMap={},"identity",function identityTransform(schema,data,config){return data}),transform_factory_defineProperty(_transformMap,"group",group_transform),transform_factory_defineProperty(_transformMap,"stack",function(schema,data,config){var uniqueField=config.uniqueField,valueField=config.value,groupBy=config.groupBy,sort=config.sort||"descending",normalizedData=function normalizeData(data,schema,valueField,uniqueField,groupBy){var groupedData=group_transform(schema,data,{groupBy:uniqueField}),uniqueFieldIndex=schema.findIndex(function(d){return d.name===uniqueField}),valueFieldIndex=schema.findIndex(function(d){return d.name===valueField}),seriesKeyIndex=schema.findIndex(function(d){return d.name===groupBy}),seriesKeys=data.map(function(d){return d[seriesKeyIndex]}).filter(function(item,pos,arr){return arr.indexOf(item)===pos}).sort(),fieldNames=schema.reduce(function(acc,obj,i){return acc[i]=obj.name,acc},{});return{data:groupedData.map(function(arr){var tuples={},rowObj=arr.values.reduce(function(acc,row){return acc=row.reduce(function(obj,value,i){return i===seriesKeyIndex?(obj[value]=row[valueFieldIndex],tuples[value]=row):i!==valueFieldIndex&&(obj[fieldNames[i]]=value),obj},acc)},{});return rowObj._tuple=tuples,seriesKeys.forEach(function(seriesKey){if(void 0===rowObj[seriesKey]){rowObj[seriesKey]=0;var newArr=new Array(arr.values[0].length);newArr[uniqueFieldIndex]=arr.key,newArr[seriesKeyIndex]=seriesKey,rowObj._tuple[seriesKey]=newArr}}),rowObj}),keys:seriesKeys}}(data,schema,valueField,uniqueField,groupBy),keys=normalizedData.keys,map={},orderBy=config.orderBy,orderIndex=schema.findIndex(function(d){return d.name===orderBy}),groupByIndex=schema.findIndex(function(d){return d.name===groupBy});-1!==orderIndex&&(keys.forEach(function(key){var name=data.find(function(d){return d[groupByIndex]===key});map[key]=name[orderIndex]}),normalizedData.keys.sort(function(a,b){return map[a].localeCompare(map[b])}));var stackData=common_utils_stack({keys:normalizedData.keys,offset:config.offset||"diverging",order:sort,data:normalizedData.data});return stackData.forEach(function(seriesData){seriesData.forEach(function(dataObj){dataObj.data=dataObj.data._tuple[seriesData.key]})}),stackData}),_transformMap);var _encodingFieldInfRetr,_dataNormalizers,_domainCalculator,transform_factory=function transformFactory(type){var transform=transformMap[type];if("function"!=typeof transform)throw new Error("Invalid transform type supplied.");return transform};function helpers_toConsumableArray(arr){return function helpers_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);i=d[0]?(y=x0=d[1],x=y0=d[0]):(y=x0=d[0],x=y0=d[1]),(pointObj=xFieldType===dist_datamodel.FieldType.MEASURE?{x:x,x0:x0,y:tuple[yFieldIndex],y0:tuple[yFieldIndex]}:{x:tuple[xFieldIndex],x0:tuple[xFieldIndex],y:y,y0:y0}).source=tuple,pointObj.rowId=tuple[fieldsLen],[COLOR,SHAPE,SIZE,TEXT].forEach(function(enc){pointObj[enc]=tuple[encodingFieldInf["".concat(enc,"FieldIndex")]]})):((pointObj={x:d[xFieldIndex],y:d[yFieldIndex],x0:d[x0FieldIndex],y0:d[y0FieldIndex]}).source=d,pointObj.rowId=d[fieldsLen],[COLOR,SHAPE,SIZE,TEXT].forEach(function(enc){pointObj[enc]=d[encodingFieldInf["".concat(enc,"FieldIndex")]]}));return pointObj})}).filter(function(d){return d.length})}),_dataNormalizers),domainCalculator=(helpers_defineProperty(_domainCalculator={},POLAR,function(data,layerInst){var config=layerInst.config(),sort=config.sort,angleValues=data[0],radius0Field=getObjProp(config.encoding.radius0,"field");return sort&&(angleValues=angleValues.sort(function(a,b){return"asc"===sort?a.radius-b.radius:b.radius-a.radius})),{radius:common_utils_getDomainFromData(data,[ENCODING.RADIUS,radius0Field?ENCODING.RADIUS0:ENCODING.RADIUS]),angle:angleValues.map(function(d){return d.angle}),angle0:angleValues.map(function(d){return d.angle0})}}),helpers_defineProperty(_domainCalculator,helpers_CARTESIAN,function(data,layerInst){var transformType=layerInst.transformType(),encodingFieldInf=layerInst.encodingFieldsInf(),xFieldSubType=encodingFieldInf.xFieldSubType,yFieldSubType=encodingFieldInf.yFieldSubType,xField=encodingFieldInf.xField,yField=encodingFieldInf.yField,x0Field=encodingFieldInf.x0Field,y0Field=encodingFieldInf.y0Field,domains={},yEnc=ENCODING.Y,xEnc=ENCODING.X;return xField&&(domains.x=common_utils_getDomainFromData(data,x0Field||"stack"===transformType?[xEnc,ENCODING.X0]:[xEnc,xEnc],xFieldSubType)),yField&&(domains.y=common_utils_getDomainFromData(data,y0Field||"stack"===transformType?[ENCODING.Y0,ENCODING.Y]:[yEnc,yEnc],yFieldSubType)),domains}),_domainCalculator),attachDataToVoronoi=function attachDataToVoronoi(voronoi,points){var _ref3;voronoi.data((_ref3=[]).concat.apply(_ref3,helpers_toConsumableArray(points)).filter(function(d){return void 0!==d.rowId}).map(function(d){var point=d.update;return{x:point.x,y:point.y,data:d}}))},helpers_updateStyle=function updateStyle(target,styles,remove){for(var key in styles)({}).hasOwnProperty.call(styles,key)&&target.style(key,remove?null:styles[key])},positionPoints=function positionPoints(context,points){var positioner=context.encodingTransform();return positioner?positioner(points,context,{smartLabel:context._dependencies.smartLabel}):points},helpers_getPlotMeasurement=function getPlotMeasurement(context,dimensionalValues){var fieldInfo=context.encodingFieldsInf(),axes=context.axes(),transformType=context.transformType(),config=context.config(),bandScale=context._bandScale;return["x","y"].map(function(type){var span=0,groupSpan=0,padding=0,offsetValues=[];if(fieldInfo["".concat(type,"FieldType")]===dist_datamodel.FieldType.DIMENSION){var actualGroupWidth,timeDiff=fieldInfo["".concat(type,"FieldSubType")]===dist_datamodel.DimensionSubtype.TEMPORAL?context.dataProps().timeDiffs[type]:0,axis=axes[type],pad=config["pad".concat(type.toUpperCase())],innerPadding=config.innerPadding,keys=dimensionalValues,scale=axis.scale();groupSpan=function getGroupSpan(axis,minDiff){var width=axis.getUnitWidth(),scale=axis.scale(),range=scale.range(),domain=scale.domain();return width||Math.abs(range[1]-range[0])/Math.abs(domain[1]-domain[0])*minDiff}(axis,timeDiff);var isAxisBandScale=axis.constructor.type()===helpers_BAND,axisPadding=axis.config().padding;if("group"===transformType){var groupPadding=isAxisBandScale?0:axisPadding*groupSpan/2;bandScale.range([groupPadding,groupSpan-groupPadding]).domain(keys).paddingInner(innerPadding),span=bandScale.bandwidth(),actualGroupWidth=groupSpan-(isAxisBandScale?0:axisPadding*groupSpan),offsetValues=keys.map(function(key){return bandScale(key)-(isAxisBandScale?0:groupSpan/2)})}else if(void 0!==pad){var offset;if(isAxisBandScale){var step=scale.step();offset=scale.padding()*step,span=scale.bandwidth()+offset}else span=groupSpan;offsetValues=keys.map(function(){return isAxisBandScale?-offset/2:-span/2})}else actualGroupWidth=span=groupSpan-(padding=isAxisBandScale?0:axisPadding*groupSpan),offsetValues=keys.map(function(){return isAxisBandScale?0:-span/2});groupSpan=actualGroupWidth,padding=isAxisBandScale?axisPadding*axis.scale().step():axisPadding*groupSpan}return{span:span,offsetValues:offsetValues,groupSpan:groupSpan,padding:padding}})},helpers_resolveInvalidTransformType=function resolveInvalidTransformType(context){var _context$encodingFiel=context.encodingFieldsInf(),xField=_context$encodingFiel.xField,yField=_context$encodingFiel.yField,xFieldType=_context$encodingFiel.xFieldType,yFieldType=_context$encodingFiel.yFieldType,groupByField=context.config().transform.groupBy,fieldsConfig=context.data().getFieldsConfig(),groupByFieldMeasure=fieldsConfig[groupByField]&&fieldsConfig[groupByField].def.type===dist_datamodel.FieldType.MEASURE;return!xField||!yField||groupByFieldMeasure||!groupByField||xFieldType===dist_datamodel.FieldType.DIMENSION&&yFieldType===dist_datamodel.FieldType.DIMENSION?"identity":null},helpers_getValidTransformForAggFn=function getValidTransformForAggFn(context){var resolvedInvalidTransformType=helpers_resolveInvalidTransformType(context);if(resolvedInvalidTransformType)return resolvedInvalidTransformType;var _context$encodingFiel2=context.encodingFieldsInf(),xField=_context$encodingFiel2.xField,yField=_context$encodingFiel2.yField,xFieldType=_context$encodingFiel2.xFieldType,yFieldType=_context$encodingFiel2.yFieldType,groupByField=context.config().transform.groupBy,isCustomTransformTypeProvided=!!getObjProp(context._customConfig,"transform","type"),transformType=context.config().transform.type;if(!isCustomTransformTypeProvided&&groupByField&&xFieldType!==yFieldType){var measureField=xFieldType===dist_datamodel.FieldType.MEASURE?xField:yField;transformType="sum"===common_utils_retrieveNearestGroupByReducers(context.data(),measureField)[measureField]?"stack":"group"}return transformType},helpers_resolveEncodingValues=function resolveEncodingValues(data,i,dataArr,layerInst){var transformedValues={},values=data.values,encoding=layerInst.config().encoding;for(var key in values){var value=getObjProp(encoding[key],"value");value instanceof Function?transformedValues[key]=value(values,i,dataArr,layerInst):transformedValues[key]=values[key]}return transformedValues},getColorMetaInf=function getColorMetaInf(color,colorAxis){return{originalColor:colorAxis.getHslArray(color),stateColor:{},colorTransform:{}}},getCoordValue=function getCoordValue(radius,trig,angle,offset){return radius*Math[trig](angle)+offset},coordValueGetter=function coordValueGetter(radius,angle,xOffset,yOffset){return{x:getCoordValue(radius,"cos",angle,xOffset),y:getCoordValue(radius,"sin",angle,yOffset)}},toCartesianCoordinates=function toCartesianCoordinates(points,measurement){for(var rangePlot=arguments.length>2&&void 0!==arguments[2]&&arguments[2],xOffset=measurement.width/2,yOffset=measurement.height/2,i=0,len=points.length;i3&&void 0!==arguments[3]?arguments[3]:{};return function base_layer_classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}(this,BaseLayer),_this=function base_layer_possibleConstructorReturn(self,call){return!call||"object"!==base_layer_typeof(call)&&"function"!=typeof call?base_layer_assertThisInitialized(self):call}(this,base_layer_getPrototypeOf(BaseLayer).call(this)),generateGetterSetters(base_layer_assertThisInitialized(_this),props_props),_this.data(data),_this.axes(axes),_this.config(config),_this.alias(_this.constructor.formalName()+getUniqueId()),_this.dependencies(dependencies),_this._points=[],_this._cachedData=[],_this._id=getUniqueId(),_this._measurement={},_this._animationDonePromises=[],_this._customConfig=null,_this}return function base_layer_inherits(subClass,superClass){if("function"!=typeof superClass&&null!==superClass)throw new TypeError("Super expression must either be null or a function");subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:!0,configurable:!0}}),superClass&&base_layer_setPrototypeOf(subClass,superClass)}(BaseLayer,simple_layer_SimpleLayer),function base_layer_createClass(Constructor,protoProps,staticProps){return protoProps&&base_layer_defineProperties(Constructor.prototype,protoProps),staticProps&&base_layer_defineProperties(Constructor,staticProps),Constructor}(BaseLayer,[{key:"store",value:function store(){if(arguments.length){this._store=arguments.length<=0?void 0:arguments[0];var metaInf=this.metaInf(),localNs="".concat(namespace_namespaceObject.LAYER_LOCAL_NAMESPACE,".").concat(metaInf.namespace);!function initializeGlobalState(context){var store=context.store(),globalState=context.constructor.getState()[0],namespace=context.metaInf().namespace;for(var prop in globalState)store.append("".concat(namespace_namespaceObject.LAYER_GLOBAL_NAMESPACE,".").concat(prop),helpers_defineProperty({},namespace,null))}(this);var store=this.store();return store.append("".concat(namespace_namespaceObject.LAYER_LOCAL_NAMESPACE),function base_layer_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}({},metaInf.namespace,null)),common_utils_transactor(this,defaultOptions,store.model,{namespace:localNs}),common_utils_registerListeners(this,listener_map_listenerMap,{local:localNs,global:namespace_namespaceObject.LAYER_GLOBAL_NAMESPACE},{unitRowIndex:metaInf.unitRowIndex,unitColIndex:metaInf.unitColIndex}),this}return this._store}},{key:"domain",value:function domain(){var prop="".concat(namespace_namespaceObject.LAYER_GLOBAL_NAMESPACE,".").concat("domain",".").concat(this.metaInf().namespace);return arguments.length?(this.store().commit(prop,arguments.length<=0?void 0:arguments[0]),this):this.store().get(prop)}},{key:"encodingFieldsInf",value:function encodingFieldsInf(){return arguments.length?(this._encodingFieldsInf=arguments.length<=0?void 0:arguments[0],this):this._encodingFieldsInf}},{key:"encodingTransform",value:function encodingTransform(){return arguments.length?(this._encodingTransform=arguments.length<=0?void 0:arguments[0],this):this._encodingTransform}},{key:"alias",value:function alias(){return arguments.length?(this._alias=arguments.length<=0?void 0:arguments[0],this):this._alias||this.constructor.formalName()}},{key:"dependencies",value:function dependencies(){return arguments.length?(this._dependencies=arguments.length<=0?void 0:arguments[0],this):this._dependencies}},{key:"enableCaching",value:function enableCaching(){return this._cacheEnabled=!0,this}},{key:"clearCaching",value:function clearCaching(){return this._cacheEnabled=!1,this.data(this._cachedData[0])}},{key:"serialize",value:function serialize(){return this.config()}},{key:"id",value:function id(){return this._id}},{key:"getTransformedData",value:function getTransformedData(dataModel,config,transformType,encodingFieldsInf){return function transformData(dataModel,config,transformType,encodingFieldInf){var data=dataModel.getData({withUid:!0}),schema=data.schema,transform=config.transform,xField=encodingFieldInf.xField,yField=encodingFieldInf.yField,xFieldType=encodingFieldInf.xFieldType,yFieldType=encodingFieldInf.yFieldType,uniqueField=xFieldType===dist_datamodel.FieldType.MEASURE?yField:xField;return transform_factory(transformType)(schema,data.data,{groupBy:transform.groupBy,uniqueField:uniqueField,sort:transform.sort||"none",offset:transform.offset,orderBy:transform.orderBy,value:yFieldType===dist_datamodel.FieldType.MEASURE?yField:xField},data.uids)}(dataModel,config,transformType,encodingFieldsInf)}},{key:"calculateDomainFromData",value:function calculateDomainFromData(data){var domains={};return this.data().isEmpty()||(domains=domainCalculator[this.coord()](data,this)),domains}},{key:"getDataDomain",value:function getDataDomain(encodingType){var domains=this.store().get("".concat(namespace_namespaceObject.LAYER_GLOBAL_NAMESPACE,".").concat("domain",".").concat(this.metaInf().namespace));return void 0!==encodingType?domains[encodingType]||[]:domains}},{key:"getNormalizedData",value:function getNormalizedData(transformedData){return function getNormalizedData(transformedData,context){var transformType=context.transformType(),transformedDataArr="identity"===transformType?[transformedData]:transformedData,encodingFieldInf=context.encodingFieldsInf(),fieldsConfig=context.data().getFieldsConfig();return dataNormalizers[context.coord()](transformedDataArr,encodingFieldInf,fieldsConfig,transformType)}(transformedData,this)}},{key:"getNearestPoint",value:function getNearestPoint(){return null}},{key:"applyInteractionStyle",value:function applyInteractionStyle(interactionType,selectionSet,apply,styles){var interactionStyles=(this.config().interaction||{})[interactionType];(interactionStyles=styles||interactionStyles)&&helpers_applyInteractionStyle(this,selectionSet,interactionStyles,{apply:apply,interactionType:interactionType})}},{key:"disableUpdate",value:function disableUpdate(){return this._updateLock=!0,this}},{key:"enableUpdate",value:function enableUpdate(){return this._updateLock=!1,this}},{key:"resolveTransformType",value:function resolveTransformType(){this._transformType=function getValidTransform(context){return helpers_resolveInvalidTransformType(context)||context.config().transform.type}(this)}},{key:"transformType",value:function transformType(){return this._transformType}},{key:"render",value:function render(){return this}},{key:"elemType",value:function elemType(){return"g"}},{key:"remove",value:function remove(){return this.store().unsubscribe({namespace:"".concat(namespace_namespaceObject.LAYER_LOCAL_NAMESPACE,".").concat(this.metaInf().namespace)}),renderer_utils_selectElement(this.mount()).remove(),this}},{key:"cachePoint",value:function cachePoint(key,data){if(null===key)return this;var pointMap=this._pointMap;return!pointMap[key]&&(pointMap[key]=[]),pointMap[key].push(data),this}},{key:"dataProps",value:function dataProps(){return arguments.length?(this._dataProps=arguments.length<=0?void 0:arguments[0],this):this._dataProps}},{key:"getIdentifiersFromData",value:function getIdentifiersFromData(data){var schema=this.data().getData().schema,fieldsConfig=this.data().getFieldsConfig(),identifiers=[[],[]],_this$encodingFieldsI=this.encodingFieldsInf(),xFieldType=_this$encodingFieldsI.xFieldType,yFieldType=_this$encodingFieldsI.yFieldType,xField=_this$encodingFieldsI.xField,yField=_this$encodingFieldsI.yField,_map2=base_layer_slicedToArray([xFieldType,yFieldType].map(function(type){return type===dist_datamodel.FieldType.MEASURE}),2),xMeasure=_map2[0],yMeasure=_map2[1];if(schema.forEach(function(d,i){var name=d.name;fieldsConfig[name].def.type===dist_datamodel.FieldType.DIMENSION&&(identifiers[0].push(name),identifiers[1].push(data[i]))}),xMeasure&&yMeasure){var _identifiers$,_identifiers$2,xMeasureIndex=fieldsConfig[xField].index,yMeasureIndex=fieldsConfig[yField].index;(_identifiers$=identifiers[0]).push.apply(_identifiers$,[xField,yField]),(_identifiers$2=identifiers[1]).push.apply(_identifiers$2,[data[xMeasureIndex],data[yMeasureIndex]])}return identifiers}},{key:"hasPlotSpan",value:function hasPlotSpan(){return!1}},{key:"getPlotSpan",value:function getPlotSpan(){return{x:0,y:0}}},{key:"getPlotPadding",value:function getPlotPadding(){return{x:0,y:0}}},{key:"getPointsFromIdentifiers",value:function getPointsFromIdentifiers(identifiers){var _ref,fieldNames,values,config=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},getAllAttrs=config.getAllAttrs,getBBox=config.getBBox;if(!this.data())return[];if(identifiers instanceof datamodel_default.a){var dataObj=identifiers.getData();fieldNames=dataObj.schema.map(function(d){return d.name}),values=dataObj.data}else fieldNames=identifiers[0],values=identifiers.slice(1,identifiers.length);var points=this._points,fieldsConfig=this.data().getFieldsConfig(),filteredPoints=(_ref=[]).concat.apply(_ref,base_layer_toConsumableArray(points)).filter(function(point){var source=point.source,rowId=point.rowId;return fieldNames.every(function(field,idx){return field in fieldsConfig&&fieldsConfig[field].def.type===dist_datamodel.FieldType.DIMENSION?-1!==values.findIndex(function(d){return d[idx]===source[fieldsConfig[field].index]}):field!==reserved_fields.ROW_ID||-1!==values.findIndex(function(d){return d[idx]===rowId})})});return getAllAttrs?filteredPoints:filteredPoints.map(function(d){var obj=clone(d);if(getBBox){var update=obj.update||obj;if(void 0!==obj.size){var sizeVal=2*Math.sqrt(obj.size/Math.PI);update.width=sizeVal,update.height=sizeVal,update.x-=sizeVal/2,update.y-=sizeVal/2}else void 0===update.width&&(update.width=2),void 0===update.height&&(update.height=2)}return obj.update||obj}).sort(function(a,b){return a.y-b.y})}},{key:"getTransformedDataFromIdentifiers",value:function getTransformedDataFromIdentifiers(identifiers){var measureIndex,enc,_identifiers$getData=identifiers.getData(),identifierData=_identifiers$getData.data,identifierSchema=_identifiers$getData.schema,normalizedData=this._normalizedData,fieldsConfig=this.data().getFieldsConfig(),_this$encodingFieldsI2=this.encodingFieldsInf(),yField=_this$encodingFieldsI2.yField,xField=_this$encodingFieldsI2.xField,yFieldType=_this$encodingFieldsI2.yFieldType;_this$encodingFieldsI2.xFieldType===dist_datamodel.FieldType.MEASURE?(measureIndex=fieldsConfig[xField].index,enc="x"):yFieldType===dist_datamodel.FieldType.MEASURE&&(measureIndex=fieldsConfig[yField].index,enc="y");var transformedData=[];return normalizedData.forEach(function(dataArr){dataArr.forEach(function(dataObj){var tupleArr=dataObj.source;if(identifierSchema.every(function(obj,i){return-1!==identifierData.findIndex(function(d){return tupleArr[fieldsConfig[obj.name].index]===d[i]})})){var transformedVal=dataObj[enc],row=dataObj.source,tuple={};for(var key in fieldsConfig){var index=fieldsConfig[key].index;tuple[key]=row[index],index===measureIndex&&(tuple[key]=transformedVal)}transformedData.push(tuple)}})}),[transformedData,this.data().getData().schema]}},{key:"getPlotElementsFromSet",value:function getPlotElementsFromSet(set){return renderer_utils_selectElement(this.mount()).selectAll(this.elemType()).filter(function(data){return!!data&&-1!==set.indexOf(data.rowId)})}},{key:"animationDone",value:function animationDone(){return Promise.all(this._animationDonePromises)}},{key:"registerAnimationDoneHook",value:function registerAnimationDoneHook(){var resolveFn,promise=new Promise(function(resolve){resolveFn=resolve});return this._animationDonePromises.push(promise),function(){resolveFn()}}},{key:"getRenderProps",value:function getRenderProps(){var metaInf=this.metaInf();return this.coord()===COORD_TYPES_POLAR?["".concat(namespace_namespaceObject.GROUP_GLOBAL_NAMESPACE,".domain.radius")]:["".concat(namespace_namespaceObject.GROUP_GLOBAL_NAMESPACE,".domain.y.").concat(metaInf.unitRowIndex,"0"),"".concat(namespace_namespaceObject.GROUP_GLOBAL_NAMESPACE,".domain.x.").concat(metaInf.unitColIndex,"0")]}}],[{key:"getState",value:function getState(){return[{domain:{}},{config:{},data:{}}]}},{key:"create",value:function create(){for(var _len=arguments.length,params=new Array(_len),_key=0;_key<_len;_key++)params[_key]=arguments[_key];return base_layer_construct(this,params)}},{key:"defaultConfig",value:function defaultConfig(){return{transform:{type:"identity"}}}},{key:"defaultPolicy",value:function defaultPolicy(conf,userConf){return mergeRecursive(conf,userConf)}},{key:"formalName",value:function formalName(){return"base"}},{key:"shouldDrawAnchors",value:function shouldDrawAnchors(){return!1}}]),BaseLayer}(),renderer_line=Symbols.line,renderer_filterFn=function filterFn(d){var update=d.update;return null!==update.y&&null!==update.x},renderer_drawLine=function drawLine(context){var filteredPoints,layer=context.layer,container=context.container,points=context.points,interpolate=context.interpolate,connectNullData=context.connectNullData,className=context.className,style=context.style,transition=context.transition,mount=renderer_utils_selectElement(container).attr("class",className),curveInterpolatorFn=pathInterpolators[interpolate],linepath=renderer_line().curve(curveInterpolatorFn).x(function(d){return d.update.x}).y(function(d){return d.update.y}).defined(renderer_filterFn);filteredPoints=points,connectNullData&&(filteredPoints=points.filter(renderer_filterFn)),helpers_updateStyle(mount,style);var element=makeElement(mount,"path",points.length?[points[0].className]:[]);return element.attr("class",function(d){return d}),transition.disabled||(element=element.transition().duration(transition.duration).on("end",layer.registerAnimationDoneHook())),element.attr("d",linepath(filteredPoints)).style("fill-opacity",0),element},line_default_config_defaultConfig={classPrefix:"muze",defClassName:"layer-line",className:"",interpolate:"linear",transform:{type:"group"},interaction:{highlight:[{type:"stroke",intensity:[0,0,-15,0]}],fade:[{type:"stroke",intensity:[0,0,15,0]}],focus:[{type:"stroke",intensity:[0,0,15,0]}]},nearestPointThreshold:20,encoding:{color:{},x:{},y:{},strokeOpacity:{value:1}},transition:{effect:"cubic",duration:1e3},connectNullData:!1};__webpack_require__(15);function line_typeof(obj){return(line_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function line_defineProperties(target,props){for(var i=0;i2&&void 0!==arguments[2]?arguments[2]:{},dataPoint=renderer_utils_selectElement(config.event.target).data()[0];if(isSimpleObject(dataPoint)){var source=dataPoint.source,rowId=dataPoint.rowId;return{id:this.getIdentifiersFromData(source,rowId),layerId:this.id()}}return null}},{key:"getPlotElementsFromSet",value:function getPlotElementsFromSet(set){return renderer_utils_selectElement(this.mount()).selectAll(this.elemType()).filter(function(d){return-1!==set.indexOf(d.rowId)})}},{key:"translatePoints",value:function translatePoints(data){var _this2=this,_this$axes=this.axes(),angle=_this$axes.angle,colorAxis=_this$axes.color,radiusAxis=_this$axes.radius,pieIndex={},prevData=this._points[0]||[],points=[],angleV={};return this._prevPieData={},prevData.forEach(function(e,index){_this2._prevPieData[e.rowId]=[e,index],pieIndex[e.index]=e}),data.forEach(function(d,i){var angles=angle.getScaleValue(d.angle);!angleV[d.angle]&&(angleV[d.angle]=0);var _angles=angles[angleV[d.angle]++],startAngle=_angles.startAngle,endAngle=_angles.endAngle,uid=d.rowId,resolvedEncodings=helpers_resolveEncodingValues({values:{radius:radiusAxis.getOuterRadius(d.radius),radius0:radiusAxis.getInnerRadius(d.radius0),color:colorAxis.getColor(d.color),angle0:startAngle,angle:endAngle,startAngle:startAngle,endAngle:endAngle,startAngle0:startAngle,endAngle0:endAngle},data:d},i,data,_this2),color=resolvedEncodings.color;points.push({source:d.source,index:i,enter:{},update:{angle0:resolvedEncodings.angle0,angle:resolvedEncodings.angle,radius0:resolvedEncodings.radius0,radius:resolvedEncodings.radius},color:color,meta:getColorMetaInf(resolvedEncodings.color,colorAxis),rowId:uid,_previousInfo:_this2._prevPieData[uid]?_this2._prevPieData[uid][0]:function getPreviousPoint(prevData,currIndex,context){var prevArc=prevData[currIndex-1],nextArc=prevData[currIndex],_context$axes$angle$r2=arc_helper_slicedToArray(context.axes().angle.range(),2),startAngle=_context$axes$angle$r2[0],endAngle=_context$axes$angle$r2[1];return prevArc&&nextArc?{update:{angle0:getObjProp(prevArc,"update","angle"),angle:getObjProp(nextArc,"update","angle0")}}:nextArc?{update:{angle0:(startAngle-90)*Math.PI*2/360,angle:(startAngle-90)*Math.PI*2/360}}:{update:{angle0:(endAngle-90)*Math.PI*2/360,angle:(endAngle-90)*Math.PI*2/360}}}(pieIndex,i,_this2)})}),points}},{key:"render",value:function render(container){var _this3=this,measurement=this.measurement(),_this$config=this.config(),classPrefix=_this$config.classPrefix,defClassName=_this$config.defClassName,cornerRadius=_this$config.cornerRadius,padAngle=_this$config.padAngle,padRadius=_this$config.padRadius,transition=_this$config.transition,qualClassName=getQualifiedClassName(defClassName,this.id(),classPrefix),path=this._arcFn=arc_arc().cornerRadius(cornerRadius).startAngle(function(d){return d.update.angle0+Math.PI/2}).endAngle(function(d){return d.update.angle+Math.PI/2}).padAngle(padAngle).padRadius(padRadius).outerRadius(function(d){return d.update.radius}).innerRadius(function(d){return d.update.radius0});this._points=this._normalizedData.map(function(arr){return _this3.translatePoints(arr)});var g=makeElement(renderer_utils_selectElement(container),"g",this._points,"".concat(qualClassName[0],"-group")).classed("".concat(qualClassName[1],"-group"),!0).attr("transform","translate(".concat(measurement.width/2,",\n ").concat(measurement.height/2,")")),consecutiveExits=[],exitCounter=0;return makeElement(g,"g",function(d){return d},"".concat(qualClassName[0]),{update:function tween(elem){makeElement(elem,"path",function(d){return[d]},"".concat(qualClassName[0],"-path")).style("fill",function(d){return d.color}).transition().duration(transition.duration).on("end",_this3.registerAnimationDoneHook()).attrTween("d",function(){for(var _len=arguments.length,params=new Array(_len),_key=0;_key<_len;_key++)params[_key]=arguments[_key];return function tweenPie(path,b){var datum=b[0];return function(t){return path(common_utils_interpolator()(datum._previousInfo,datum)(t))}}(path,params)}).attr("class",function(d,i){var individualClass=getIndividualClassName(d,i,_this3._points,_this3);return"".concat(qualClassName[0],"-path ").concat(qualClassName[1],"-path-").concat(d.index,"\n ").concat(individualClass)})},exit:function tweenExit(elem,d){var exitArr=consecutiveExits[exitCounter],oldExitCounter=exitCounter;exitArr?exitArr[exitArr.length-1].datum.index===d.index-1?exitArr.push({elem:elem,datum:d}):exitCounter++:exitArr=[{elem:elem,datum:d}],consecutiveExits[oldExitCounter]=exitArr}}).attr("class",function(d,i){return"".concat(qualClassName[0]," ").concat(qualClassName[1],"-").concat(i)}),function tweenExitPie(consecutiveExits,transition,path){consecutiveExits.length>0&&consecutiveExits.forEach(function(consecutiveExitArr){var startAngle=consecutiveExitArr[0].datum.update.angle0,endAngle=consecutiveExitArr[consecutiveExitArr.length-1].datum.update.angle,mid=2*Math.PI*startAngle/(2*Math.PI+startAngle-endAngle);consecutiveExitArr.forEach(function(e){var elem=e.elem,datum=e.datum;elem.each(function(){var gElem=renderer_utils_selectElement(this);gElem.selectAll("path").transition().duration(transition.duration).attrTween("d",function(){return function(t){return path(common_utils_interpolator()(datum,{update:{angle0:mid,angle:mid,radius:datum.radius,radius0:datum.radius0}})(t))}}).remove(),gElem.remove()})})})}(consecutiveExits,transition,path),this}},{key:"getPointsFromIdentifiers",value:function getPointsFromIdentifiers(identifiers){if(!this.data())return[];var fieldNames=identifiers[0],values=identifiers.slice(1,identifiers.length),pieSlices=renderer_utils_selectElement(this.mount()).selectAll("path").data(),fieldsConfig=this.data().getFieldsConfig(),pieSliceInf=pieSlices.filter(function(tData){var source=tData.source,rowId=tData.rowId;return fieldNames.every(function(field,idx){return field in fieldsConfig&&fieldsConfig[field].def.type===dist_datamodel.FieldType.DIMENSION?-1!==values.findIndex(function(d){return d[idx]===source[fieldsConfig[field].index]}):field!==reserved_fields.ROW_ID||-1!==values.findIndex(function(d){return d[idx]===rowId})})})[0];if(pieSliceInf){var measurement=this.measurement(),centroid=this._arcFn.centroid(pieSliceInf);return[{x:centroid[0]+measurement.width/2,y:centroid[1]+measurement.height/2,width:2,height:2}]}return[]}}],[{key:"defaultConfig",value:function defaultConfig(){return arc_default_config_defaultConfig}},{key:"formalName",value:function formalName(){return"arc"}}]),ArcLayer}(),text_renderer=function drawText(container,data,config,smartLabel){var selection=renderer_utils_selectElement(container).selectAll("g").data(data),selectionMerge=selection.enter().append("g").each(function(dataObj){renderer_utils_setAttrs(this,dataObj.enter)}).merge(selection),style=renderer_utils_getSmartComputedStyle(renderer_utils_selectElement(container),config.className),fontSize=parseInt(style.fontSize,10);return smartLabel.setStyle(style),selectionMerge.each(function(dataObj){var backgroundVal,element=renderer_utils_selectElement(this),update=dataObj.update,text=dataObj.text,color=dataObj.color,textanchor=dataObj.textanchor,textStyle=dataObj.style,background=dataObj.background;if(backgroundVal=background.value){var diff,backgroundPadding=background.padding,_smartLabel$getOriSiz=smartLabel.getOriSize(dataObj.text),width=_smartLabel$getOriSiz.width,height=_smartLabel$getOriSiz.height,backgroundEl=makeElement(element,"rect",[1]);diff="end"===textanchor?width:"start"===textanchor?0:width/2,renderer_utils_setAttrs(backgroundEl.node(),{x:update.x-diff-backgroundPadding/2,y:update.y-fontSize-backgroundPadding/2,width:width+backgroundPadding,height:height+backgroundPadding}),background&&renderer_utils_setStyles(backgroundEl,{background:backgroundVal})}var textEl=makeElement(element,"text",function(d){return[d]}).text(text),textNode=textEl.node();textStyle&&renderer_utils_setStyles(textNode,textStyle),color&&renderer_utils_setStyles(textNode,{fill:color}),dataObj.className&&textEl.classed(dataObj.className,!0),renderer_utils_setAttrs(textNode,update),textEl.attr("text-anchor",textanchor),textEl.attr("alignment-baseline",dataObj["alignment-baseline"]),textEl.attr("transform","rotate(".concat(dataObj.rotation," ").concat(update.x," ").concat(update.y,")"))}),selection.exit().remove(),selection},text_default_config_defaultConfig={defClassName:"layer-text",classPrefix:"muze",className:"",transform:{type:"identity"},interaction:{highlight:[{type:"fill",intensity:[0,0,-15,0]}],fade:[{type:"fill",intensity:[0,0,15,0]}],focus:[{type:"fill",intensity:[0,0,15,0]}]},transition:{effect:"cubic",duration:1e3},encoding:{color:{},size:{},radius:{},angle:{},text:{value:"",formatter:function formatter(val,i,data,context){return context.valueParser()(val)},background:{padding:10}},rotation:{value:0},"alignment-baseline":{value:"middle"}},states:{highlight:{className:"".concat("muze","-layer-text-highlight")},fadeout:{className:"".concat("muze","-layer-text-fadeout")},selected:{className:"".concat("muze","-layer-text-selected")}}};__webpack_require__(18);function text_typeof(obj){return(text_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function text_defineProperties(target,props){for(var i=0;i1&&void 0!==arguments[1]?arguments[1]:{};return pointTranslators[this.coord()](data,config,this)}},{key:"render",value:function render(container){var _this=this,config=this.config(),normalizedData=this._normalizedData,className=config.className,qualifiedClassName=getQualifiedClassName(config.defClassName,this.id(),config.classPrefix);return renderer_utils_selectElement(container).classed("".concat(qualifiedClassName.join(" ")," ").concat(className),!0),renderer_utils_createElements({data:normalizedData,append:"g",selector:"g",container:container,each:function each(dataArr,group){var node=group.node(),points=_this.translatePoints(dataArr,{},_this);renderer_utils_setStyles(node,{"text-anchor":"middle"}),text_renderer(node,points,{className:qualifiedClassName[0]},_this._dependencies.smartLabel)}}),this}}],[{key:"defaultConfig",value:function defaultConfig(){return text_default_config_defaultConfig}},{key:"formalName",value:function formalName(){return"text"}}]),TextLayer}(),point_renderer=function drawSymbols(params){var layer=params.layer,container=params.container,points=params.points,transition=params.transition,className=params.className,duration=transition.duration,effect=transition.effect,disabled=transition.disabled,mount=renderer_utils_selectElement(container);return mount.attr("class",className),makeElement(mount,"g",points,null,{enter:function enter(group,d){var enter=d.enter;group.attr("transform","translate(".concat(enter.x,",").concat(enter.y,")"))},update:function update(group,d){!function createShape(d,groupElement){var shape=d.shape,size=d.size,update=d.update;if(shape instanceof Promise)shape.then(function(res){d.shape=res,createShape(d,groupElement)});else if(shape instanceof Element){var newShape=shape.cloneNode(!0);if("img"===newShape.nodeName.toLowerCase()){var src=newShape.src||newShape.href;(newShape=document.createElementNS("http://www.w3.org/2000/svg","image")).setAttribute("href",src)}var shapeElement=renderer_utils_selectElement(newShape);"path"===newShape.nodeName||"image"===newShape.nodeName?shapeElement.attr("transform","scale(".concat(size/100,")")):(shapeElement.attr("height",size),shapeElement.attr("width",size)),shapeElement.attr("x",-size/2),shapeElement.attr("y",-size/2),makeElement(groupElement,function(){return newShape},[1])}else if("string"==typeof shape){var pathStr;pathStr=function checkPath(str){return!!(/^[mzlhvcsqta]\s*[-+.0-9][^mlhvzcsqta]+/i.test(str)&&/[\dz]$/i.test(str)&&str.length>4)}(shape)?shape:common_utils_getSymbol(shape).size(size)(update),makeElement(groupElement,"path",function(data){return[data]}).attr("d",pathStr)}else d.shape="circle",createShape(d,groupElement)}(d,group);var update=d.update,style=d.style;objectIterator(style,function(key){return group.style(key,style[key])}),group.attr("class",className),group.classed(d.className,!0),disabled||(group=group.transition().duration(transition.duration).on("end",layer.registerAnimationDoneHook())),group.attr("transform","translate(".concat(update.x,",").concat(update.y,")"))},exit:function exit(exitGroup){disabled?exitGroup.remove():exitGroup.transition().ease(easeFns[effect]).duration(duration).on("end",function(){return exitGroup.remove()}).style("fill-opacity",0).style("stroke-opacity",0)}},params.keyFn)},point_default_config_defaultConfig={defClassName:"layer-point",className:"",classPrefix:"muze",defColorStyle:"stroke",interaction:{highlight:[{type:"fill",intensity:[0,0,-20,0]}],fade:[{type:"fill",intensity:[0,0,20,0]}],focus:[{type:"fill",intensity:[0,0,20,0]}]},innerPadding:.1,nearestPointThreshold:10,transform:{type:"identity"},transition:{effect:"cubic",duration:1e3},encoding:{size:{value:30},color:{},shape:{value:"circle"},x:{},y:{},strokeOpacity:{value:.5},fillOpacity:{value:.5}},shapes:["circle","cross","diamond","square","star","wye","triangle"],sizes:[20,30,40,50,60,70]};__webpack_require__(19);function point_typeof(obj){return(point_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function point_toConsumableArray(arr){return function point_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);i1&&void 0!==arguments[1]?arguments[1]:{},points=[],encoding=this.config().encoding,axes=this.axes(),x=encoding.x,y=encoding.y,xField=x.field,yField=y.field,sizeAxis=axes.size,shapeAxis=axes.shape,fieldsConfig=this.data().getFieldsConfig(),isXDim=fieldsConfig[xField]&&fieldsConfig[xField].def.type===dist_datamodel.FieldType.DIMENSION,isYDim=fieldsConfig[yField]&&fieldsConfig[yField].def.type===dist_datamodel.FieldType.DIMENSION,key=isXDim?ENCODING.X:isYDim?ENCODING.Y:null,measurement=this.measurement(),colorAxis=axes.color,_config$offset=config.offset,offsetX=_config$offset.x,offsetY=_config$offset.y,_loop=function _loop(i,len){var d=data[i],size=sizeAxis.getSize(d.size),shape=shapeAxis.getShape(d.shape),_map2=point_slicedToArray([ENCODING.X,ENCODING.Y].map(function(type){var value=null===d[type]?void 0:d[type],measure=type===ENCODING.X?measurement.width:measurement.height;return encoding[type].field?axes[type].getScaleValue(value):measure/2}),2),xPx=_map2[0],yPx=_map2[1];xPx+=offsetX,yPx+=offsetY;var color=colorAxis.getColor(d.color),resolvedEncodings=helpers_resolveEncodingValues({values:{x:xPx,y:yPx,color:color,shape:shape,size:size,data:d},data:d},i,data,_this2),style={fill:color=resolvedEncodings.color,stroke:color},pos={x:resolvedEncodings.x,y:resolvedEncodings.y};if(!isNaN(xPx)&&!isNaN(yPx)){var point={enter:pos,update:pos,shape:resolvedEncodings.shape,size:Math.abs(resolvedEncodings.size),meta:getColorMetaInf(color,colorAxis),style:style,source:d.source,rowId:d.rowId};point.className=getIndividualClassName(d,i,data,_this2),points.push(point),_this2.cachePoint(d[key],point)}},i=0,len=data.length;i=update.x&&x<=update.width+update.x&&y>=update.y&&y<=update.height+update.y){pointFound=point;break}pointFound=null}var values=pointFound&&pointFound.source;return values&&(identifiers=this.getIdentifiersFromData(values,pointFound.rowId)),pointFound?{dimensions:[pointFound.update],id:identifiers,layerId:this.id()}:pointFound}},{key:"getPlotSpan",value:function getPlotSpan(){return this._plotSpan}},{key:"hasPlotSpan",value:function hasPlotSpan(){return!0}}],[{key:"formalName",value:function formalName(){return"bar"}},{key:"defaultConfig",value:function defaultConfig(){return bar_default_config_defaultConfig}},{key:"defaultPolicy",value:function defaultPolicy(conf,userConf){var config=base_layer_BaseLayer.defaultPolicy(conf,userConf),colorField=config.encoding.color.field,transform=config.transform;return colorField&&(transform.groupBy=colorField),config}}]),BarLayer}(),tick_default_config_defaultConfig={defClassName:"layer-tick",className:"",classPrefix:"muze",interaction:{highlight:[{type:"stroke",intensity:[0,0,-15,0]}],fade:[{type:"stroke",intensity:[0,0,15,0]}],focus:[{type:"stroke",intensity:[0,0,15,0]}]},innerPadding:.1,transform:{type:"identity"},transition:{effect:"cubic",duration:1e3},interpolate:"linear",encoding:{color:{},x:{},y:{},x0:{},y0:{},radius:{},radius0:{},angle:{},angle0:{},strokeOpacity:{value:.5},fillOpacity:{value:.5}},states:{highlight:{className:"".concat("muze","-layer-tick-highlight")},fadeout:{className:"".concat("muze","-layer-tick-fadeout")},selected:{className:"".concat("muze","-layer-tick-selected")}}},tick_renderer_line=Symbols.line,tick_renderer=function(params){var points=params.points,container=params.container,keyFn=params.keyFn,className=params.className,interpolate=params.interpolate,mount=renderer_utils_selectElement(container),ticks=mount.selectAll("path").data(points,keyFn),ticksEnter=ticks.enter().append("path");return mount.attr("class",className||""),ticksEnter.each(function(d){var selection=renderer_utils_selectElement(this),enter=d.enter||{};Object.entries(enter).forEach(function(attr){return!isNaN(attr[1])&&selection.attr(attr[0],attr[1])})}),ticks.exit().remove(),ticks.merge(ticksEnter).each(function(d){var selection=renderer_utils_selectElement(this),update=d.update,updateStyle=d.style||{},x0=void 0!==update.x0?update.x0:update.x,y0=void 0!==update.y0?update.y0:update.y,curveInterpolatorFn=pathInterpolators[interpolate],linepath=tick_renderer_line().curve(curveInterpolatorFn).x(function(e){return e[0]}).y(function(e){return e[1]});d.className&&selection.classed(d.className,!0),selection.attr("d",linepath([[update.x,update.y],[x0,y0]])),Object.entries(updateStyle).forEach(function(styleObj){return selection.style(styleObj[0],styleObj[1])})})};__webpack_require__(21);function tick_typeof(obj){return(tick_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function tick_defineProperties(target,props){for(var i=0;i1&&void 0!==arguments[1]&&arguments[1];for(var layerInst=arguments.length>2?arguments[2]:void 0,axes=layerInst.axes(),points=[],radiusAxis=axes.radius,angleAxis=axes.angle,angle0Axis=axes.angle0,measurement=layerInst.measurement(),colorAxis=axes.color,angleV={},angle0V={},i=0,len=data.length;i1&&void 0!==arguments[1]?arguments[1]:{},layerInst=arguments.length>2?arguments[2]:void 0,axes=layerInst.axes(),points=[],_getAxesScales=helpers_getAxesScales(axes),xAxis=_getAxesScales.xAxis,yAxis=_getAxesScales.yAxis,_layerInst$encodingFi=layerInst.encodingFieldsInf(),xField=_layerInst$encodingFi.xField,yField=_layerInst$encodingFi.yField,x0Field=_layerInst$encodingFi.x0Field,y0Field=_layerInst$encodingFi.y0Field,xFieldType=_layerInst$encodingFi.xFieldType,yFieldType=_layerInst$encodingFi.yFieldType,isXDim=xFieldType===dist_datamodel.FieldType.DIMENSION,isYDim=yFieldType===dist_datamodel.FieldType.DIMENSION,key=isXDim?ENCODING.X:isYDim?ENCODING.Y:null,measurement=layerInst.measurement(),colorAxis=axes.color,_config$offset=config.offset,offsetX=_config$offset.x,offsetY=_config$offset.y,_config$span=config.span,xSpan=_config$span.x,ySpan=_config$span.y,i=0,len=data.length;i1?_len-1:0),_key=1;_key<_len;_key++)params[_key-1]=arguments[_key];var layerRegistry=factoryObj._layerRegistry,instances=(layerDef=layerDef instanceof Array?layerDef:[layerDef]).map(function(layerObj){var layerConstructor=layerRegistry[layerObj.mark];return layerConstructor.create.apply(layerConstructor,params)});return 1===instances.length?instances[0]:instances},getLayerClass:function getLayerClass(mark){return factoryObj._layerRegistry[mark]},composeLayers:function composeLayers(layerType,layerDefs){compositeLayers[layerType]=layerDefs},sanitizeLayerConfig:function sanitizeLayerConfig(layerDef){var newConf=mergeRecursive({},layerDef);return sanitizeEncoding(newConf.encoding),newConf}};return factoryObj}();function defaults_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}var _CONFIG$ROWS$COLUMNS$,DEFAULT_LAYERS=(defaults_defineProperty(_DEFAULT_LAYERS={},layer_types_AREA_LAYER,area_AreaLayer),defaults_defineProperty(_DEFAULT_LAYERS,layer_types_ARC_LAYER,arc_ArcLayer),defaults_defineProperty(_DEFAULT_LAYERS,layer_types_LINE_LAYER,line_LineLayer),defaults_defineProperty(_DEFAULT_LAYERS,layer_types_TEXT_LAYER,text_TextLayer),defaults_defineProperty(_DEFAULT_LAYERS,layer_types_POINT_LAYER,point_PointLayer),defaults_defineProperty(_DEFAULT_LAYERS,layer_types_TICK_LAYER,tick_TickLayer),defaults_defineProperty(_DEFAULT_LAYERS,layer_types_BAR_LAYER,bar_BarLayer),defaults_defineProperty(_DEFAULT_LAYERS,layer_types_BASE_LAYER,base_layer_BaseLayer),_DEFAULT_LAYERS),muze_package=__webpack_require__(6);function local_options_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}var local_options=(local_options_defineProperty(_CONFIG$ROWS$COLUMNS$={},"config",{}),local_options_defineProperty(_CONFIG$ROWS$COLUMNS$,ROWS,{}),local_options_defineProperty(_CONFIG$ROWS$COLUMNS$,COLUMNS,{}),local_options_defineProperty(_CONFIG$ROWS$COLUMNS$,enums_constants_COLOR,{}),local_options_defineProperty(_CONFIG$ROWS$COLUMNS$,enums_constants_SHAPE,{}),local_options_defineProperty(_CONFIG$ROWS$COLUMNS$,enums_constants_SIZE,{}),local_options_defineProperty(_CONFIG$ROWS$COLUMNS$,"detail",{}),local_options_defineProperty(_CONFIG$ROWS$COLUMNS$,"layers",{}),local_options_defineProperty(_CONFIG$ROWS$COLUMNS$,"transform",{}),_CONFIG$ROWS$COLUMNS$);function simple_group_defineProperties(target,props){for(var i=0;i0&&(dimensionArr[0]=[].concat(field_sanitizer_toConsumableArray(dimensionArr[0]),field_sanitizer_toConsumableArray(dimensionArr[1])),dimensionArr[1]=[]),{fields:dimensionArr.map(function(list,i){return 1===i?measureArr[i].concat(dimensionArr[i]):dimensionArr[i].concat(measureArr[i])}),dimensions:[].concat(field_sanitizer_toConsumableArray(dimensionArr[0]),field_sanitizer_toConsumableArray(dimensionArr[1])),measures:[].concat(field_sanitizer_toConsumableArray(measureArr[0]),field_sanitizer_toConsumableArray(measureArr[1])),temporal:[].concat(field_sanitizer_toConsumableArray(temporalArr[0]),field_sanitizer_toConsumableArray(temporalArr[1])),categorical:[].concat(field_sanitizer_toConsumableArray(categoricalArr[0]),field_sanitizer_toConsumableArray(categoricalArr[1]))}}(norFields,fields)}),2),rowsInfo=_map2[0],columnsInfo=_map2[1],rows=rowsInfo.fields,rowDimensions=rowsInfo.dimensions,rowMeasures=rowsInfo.measures,rowTemporalFields=rowsInfo.temporal,rowCategoricalFields=rowsInfo.categorical,columns=columnsInfo.fields,columnDimensions=columnsInfo.dimensions,columnMeasures=columnsInfo.measures;return{rows:rows,rowDimensions:rowDimensions,rowMeasures:rowMeasures,rowTemporalFields:rowTemporalFields,rowCategoricalFields:rowCategoricalFields,columns:columns,columnTemporalFields:columnsInfo.temporal,columnCategoricalFields:columnsInfo.categorical,columnDimensions:columnDimensions,columnMeasures:columnMeasures}};function visual_encoder_slicedToArray(arr,i){return function visual_encoder_arrayWithHoles(arr){if(Array.isArray(arr))return arr}(arr)||function visual_encoder_iterableToArrayLimit(arr,i){var _arr=[],_n=!0,_d=!1,_e=void 0;try{for(var _s,_i=arr[Symbol.iterator]();!(_n=(_s=_i.next()).done)&&(_arr.push(_s.value),!i||_arr.length!==i);_n=!0);}catch(err){_d=!0,_e=err}finally{try{_n||null==_i.return||_i.return()}finally{if(_d)throw _e}}return _arr}(arr,i)||function visual_encoder_nonIterableRest(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}()}function visual_encoder_defineProperties(target,props){for(var i=0;i0&&void 0!==arguments[0]?arguments[0]:{},fields=arguments.length>1?arguments[1]:void 0,_getHeaderAxisFrom2=visual_encoder_slicedToArray(group_utils_getHeaderAxisFrom(ROW,fields.rows,axisFrom),2),rowHeader=_getHeaderAxisFrom2[0],rowAxis=_getHeaderAxisFrom2[1],_getHeaderAxisFrom4=visual_encoder_slicedToArray(group_utils_getHeaderAxisFrom("column",fields.columns,axisFrom),2),colHeader=_getHeaderAxisFrom4[0],colAxis=_getHeaderAxisFrom4[1];return this.axisFrom({row:rowAxis,column:colAxis}),this.headerFrom({row:rowHeader,column:colHeader}),this}}]),VisualEncoder}(),scaleMaps={linear:continous_axis_ContinousAxis,band:band_axis_BandAxis,temporal:time_axis_TimeAxis,size:size_axis_SizeAxis,color:color_axis_ColorAxis,shape:shape_axis_ShapeAxis},data_type_scale_map_dataTypeScaleMap={dimension:scale_type_namespaceObject.BAND,categorical:scale_type_namespaceObject.BAND,temporal:scale_type_namespaceObject.TIME,measure:scale_type_namespaceObject.LINEAR,continuous:scale_type_namespaceObject.LINEAR};function encoder_helper_toConsumableArray(arr){return function encoder_helper_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);i1?axesCreators.position="both":axesCreators.position=_this.axisFrom()[type],geomCellAxes[axis]=encoder_helper_generateAxisFromMap(axis,axisFields[i],axesCreators,{groupAxes:axis===X?xAxes:yAxes,valueParser:resolver.valueParser()},indices,facetFields)}),geomCell.axes(geomCellAxes),geomCellAxes}},{key:"updateDomains",value:function updateDomains(store,axes){var xAxes=axes.x,yAxes=axes.y;store.model.lock();for(var i=0;i1&&typeOfAxis===scale_type_namespaceObject.LINEAR&&axes[0].config().alignZeroLine)axes.forEach(function(axis,i){key=axisType?"".concat(idx,"0").concat(i):"0".concat(idx).concat(i),domain=domains[axisType][key],min[i]=domain[0],max[i]=domain[1]}),adjustedDomain=function getAdjustedDomain(max,min){var y1ratio=max[0]/(max[0]-min[0]),y2ratio=max[1]/(max[1]-min[1]),allSameSign=!1;return min[0]>0&&min[1]>0&&min[1]>0&&max[1]>0&&(allSameSign=!0,min[0]=0,min[1]=0),min[0]<0&&min[1]<0&&min[1]<0&&max[1]<0&&(allSameSign=!0,max[0]=0,max[1]=0),allSameSign||y1ratio===y2ratio||(y1ratiocounter)for(var _i2=counter;_i2-1&&(projections=[[_facet,_facet]],primaryFacets.splice(_existIndex,1)),secondaryFacets.splice(0,1)}else{var axisFromIndex=primaryFacets.length-1,facet=primaryFacets[axisFromIndex];projections=[[facet]];var existIndex=getIndex(secondaryFacets,facet);existIndex>-1&&(projections=[[facet,facet]],secondaryFacets.splice(existIndex,1)),primaryFacets.splice(axisFromIndex,1)}return{facets:facets=(facets=[].concat(primaryFacets,secondaryFacets)).filter(function(el,index,self){return index===self.findIndex(function(t){return t.toString()===el.toString()})}),projections:projections}}},{key:"fieldSanitizer",value:function fieldSanitizer(datamodel,config){return cartesian_encoder_get(cartesian_encoder_getPrototypeOf(CartesianEncoder.prototype),"fieldSanitizer",this).call(this,datamodel,config)}},{key:"getRetinalFieldsDomain",value:function getRetinalFieldsDomain(dataModels,encoding){var groupedModel=dataModels.groupedModel,domains={};for(var key in encoding)if({}.hasOwnProperty.call(encoding,key)){var encodingObj=encoding[key],field=encodingObj.field;if(!encodingObj.domain&&field){var domain=retriveDomainFromData(groupedModel,field);domains[field]=domain}}return domains}},{key:"serializeLayerConfig",value:function serializeLayerConfig(layerArray){var serializedLayers=[];return layerArray.length&&layerArray.forEach(function(layer,i){var def=src_layer_factory.sanitizeLayerConfig(layer);def.order=i,serializedLayers.push(def)}),serializedLayers}},{key:"sanitizeLayerConfig",value:function sanitizeLayerConfig(encodingConfigs,userLayerConfig){var layerConfig=[];return userLayerConfig.forEach(function(config){var def=toArray(config.def);encoder_helper_sanitizeIndividualLayerConfig(encodingConfigs,def),layerConfig.push(config)}),layerConfig}},{key:"getLayerConfig",value:function getLayerConfig(fields,userLayerConfig,retinalConfig){var layerConfig=[],columnFields=fields.columnFields,rowFields=fields.rowFields;return columnFields.forEach(function(colField){var colFieldName=colField.toString();rowFields.forEach(function(rowField){var configs=[],rowFieldName=rowField.toString(),encoding={x:{field:colFieldName},y:{field:rowFieldName}},rowFieldType=rowField.subtype(),mark=function getDefaultMark(colFieldType,rowFieldType){return"categorical"===colFieldType||"categorical"===rowFieldType?"bar":"temporal"===colFieldType||"temporal"===rowFieldType?"line":"point"}(colField.subtype(),rowFieldType),defConfigs=[{mark:mark,def:{mark:mark,encoding:encoding}}],layerConfigs=function getLayerConfFromFields(colFields,rowFields,userLayerConfig){return userLayerConfig.filter(function(conf){var _ref,_ref2,_ref3,userConf=conf instanceof Array?conf:[conf],encodingArr=(_ref=[]).concat.apply(_ref,encoder_helper_toConsumableArray(userConf.map(function(d){return d.encoding}).filter(function(d){return void 0!==d})));if(!encodingArr.length)return!0;var xFields=(_ref2=[]).concat.apply(_ref2,encoder_helper_toConsumableArray(encodingArr.map(function(d){return[d.x&&d.x.field,d.x0&&d.x0.field]}))).filter(function(d){return void 0!==d&&null!==d}),yFields=(_ref3=[]).concat.apply(_ref3,encoder_helper_toConsumableArray(encodingArr.map(function(d){return[d.y&&d.y.field,d.y0&&d.y0.field]}))).filter(function(d){return void 0!==d&&null!==d});if(!xFields.length&&!yFields.length)return!0;var colFieldExist=!!xFields.length&&xFields.every(function(d){return-1!==colFields.indexOf(d)}),rowFieldExist=!!yFields.length&&yFields.every(function(d){return-1!==rowFields.indexOf(d)});return xFields.length&&yFields.length?colFieldExist&&rowFieldExist:colFieldExist||rowFieldExist})}(colField.getMembers(),rowField.getMembers(),userLayerConfig||[]);configs=layerConfigs.length?layerConfigs.map(function(layerConf){var mergedLayerConf=mergeRecursive(mergeRecursive({},defConfigs[0].def),layerConf),serializedLayerConfig=src_layer_factory.getSerializedConf(mergedLayerConf.mark,mergedLayerConf);return{mark:mergedLayerConf.mark,order:mergedLayerConf.order,def:serializedLayerConfig}}):defConfigs,layerConfig.push.apply(layerConfig,cartesian_encoder_toConsumableArray(configs))})}),this.sanitizeLayerConfig(retinalConfig,layerConfig)}}],[{key:"type",value:function type(){return cartesian_encoder_CARTESIAN}}]),CartesianEncoder}();function polar_encoder_typeof(obj){return(polar_encoder_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function polar_encoder_toConsumableArray(arr){return function polar_encoder_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);icounter)for(var _i=counter;_i0&&(config=mergeRecursive(config,userLayerConfig[0])),layerConfig.push(config)}),0===layerConfig.length&&(layerConfig=userLayerConfig);var sanitizedConfig=this.sanitizeLayerConfig(retinalConfig,layerConfig);return this.layers(sanitizedConfig),sanitizedConfig}},{key:"serializeLayerConfig",value:function serializeLayerConfig(layerArray){var serializedLayers=[];return layerArray.length&&layerArray.forEach(function(layer){var def=src_layer_factory.getSerializedConf(layer.mark,layer);serializedLayers.push({mark:layer.mark,def:def})}),serializedLayers}},{key:"sanitizeLayerConfig",value:function sanitizeLayerConfig(encodingConfigs,userLayerConfig){var layerConfig=[];return userLayerConfig.forEach(function(config){var def=toArray(config.def);encoder_helper_sanitizeIndividualLayerConfig(encodingConfigs,def),def.forEach(function(conf){var encoding=conf.encoding||(conf.encoding={});!encoding.angle&&(encoding.angle={});var angleField=getObjProp(encoding.angle,"field"),angle0Field=getObjProp(encoding.angle0,"field");angleField||Object.assign(encoding.angle,{field:encodingConfigs.color&&encodingConfigs.color.field}),angle0Field||(!encoding.angle0&&(encoding.angle0={}),Object.assign(encoding.angle0,{field:encoding.angle.field}))}),layerConfig.push(config)}),layerConfig}}],[{key:"type",value:function type(){return polar_encoder_POLAR}}]),PolarEncoder}();function retinal_encoder_typeof(obj){return(retinal_encoder_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function retinal_encoder_defineProperties(target,props){for(var i=0;i1&&void 0!==arguments[1]?arguments[1]:{},axisType=axesCreators.axisType,fieldsConfig=axesCreators.fieldsConfig,field=fieldProps.field,axis=[],Cls=scaleMaps[axisType];return fieldProps.type=fieldProps.type?fieldProps.type:group_utils_getAxisType(fieldsConfig,field||null),axis.push(new Cls(fieldProps)),axis}({axisType:axisType,fieldsConfig:fieldsConfig},config[axisType])}),newAxes}},{key:"setCommonDomain",value:function setCommonDomain(context){var domains=context.domains,axes=context.axes,encoding=context.encoding;return Object.entries(encoding).forEach(function(enc){if(enc[1]&&enc[1].field){var encType=enc[0],field=enc[1].field;field&&axes[encType].forEach(function(axis){var domain=domains[field];!enc[1].domain&&axis.updateDomain(domain)})}}),axes}}],[{key:"type",value:function type(){return"retinal"}}]),RetinalEncoder}(),group_utils_this=void 0;function group_utils_slicedToArray(arr,i){return function group_utils_arrayWithHoles(arr){if(Array.isArray(arr))return arr}(arr)||function group_utils_iterableToArrayLimit(arr,i){var _arr=[],_n=!0,_d=!1,_e=void 0;try{for(var _s,_i=arr[Symbol.iterator]();!(_n=(_s=_i.next()).done)&&(_arr.push(_s.value),!i||_arr.length!==i);_n=!0);}catch(err){_d=!0,_e=err}finally{try{_n||null==_i.return||_i.return()}finally{if(_d)throw _e}}return _arr}(arr,i)||function group_utils_nonIterableRest(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}()}function group_utils_toConsumableArray(arr){return function group_utils_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);i1?_len-1:0),_key=1;_key<_len;_key++)params[_key-1]=arguments[_key];return"".concat(axisName,"-axis-").concat(params.join("-"))},group_utils_headerCreator=function headerCreator(fields,fieldHeaders,TextCell,_ref2){var classPrefix=_ref2.classPrefix,labelManager=_ref2.labelManager;return fields.length>0?fields[0].map(function(cell,i){return new TextCell({type:"header",className:"".concat(classPrefix,"-grid-headers")},{labelManager:labelManager}).source(function getHeaderText(headers,index,rowLength){var header="";if(index===rowLength-1&&headers.length>rowLength){for(var i=index;i1||right.length>1)&&(borders.top=!0,borders.bottom=!0),borders}(leftRows,rightRows),showColBorders=function getColumnsBorders(top,bottom){var borders={left:!1,right:!1};return(top.length||bottom.length)&&(top[0]&&top[0].length>1||bottom[0]&&bottom[0].length>1)&&(borders.left=!0,borders.right=!0),borders}(topColumns,bottomColumns),showValueBorders=function getValueBorders(rows,columns){var borders={top:!0,left:!0,bottom:!0,right:!0},borderTypeRow=[constants_LEFT,constants_RIGHT],borderTypeCol=["top","bottom"];return rows.forEach(function(e,i){e[0]&&e[0].length?borders[borderTypeRow[i]]=!0:borders[borderTypeRow[i]]=!1}),columns.forEach(function(e,i){e.length?borders[borderTypeCol[i]]=!0:borders[borderTypeCol[i]]=!1}),borders}([leftRows,rightRows],[topColumns,bottomColumns]),valueMatrix.length>1&&(showValueBorders.top=!0,showValueBorders.bottom=!0),valueMatrix.length&&valueMatrix[0].length>1&&(showValueBorders.left=!0,showValueBorders.right=!0),{showRowBorders:showRowBorders,showColBorders:showColBorders,showValueBorders:showValueBorders}},group_utils_sortFacetFields=function sortFacetFields(facet,keys,config){var facetName="".concat(facet);"dimension"===facet.type()&&config.sort[facetName]&&("asc"===config.sort[facetName]?keys.sort(function(a,b){return a-b}):keys.sort(function(a,b){return b-a}))};function action_behaviour_map_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}var actionBehaviourMap=(action_behaviour_map_defineProperty(_actionBehaviourMap={},actions_namespaceObject.DRAG,{behaviours:[behaviours_namespaceObject.BRUSH],touch:!1}),action_behaviour_map_defineProperty(_actionBehaviourMap,actions_namespaceObject.HOVER,{behaviours:[behaviours_namespaceObject.HIGHLIGHT]}),action_behaviour_map_defineProperty(_actionBehaviourMap,actions_namespaceObject.LONGTOUCH,{behaviours:[behaviours_namespaceObject.SELECT],touch:!0}),action_behaviour_map_defineProperty(_actionBehaviourMap,actions_namespaceObject.TOUCHDRAG,{behaviours:[behaviours_namespaceObject.BRUSH],touch:!0}),action_behaviour_map_defineProperty(_actionBehaviourMap,actions_namespaceObject.CLICK,{behaviours:[behaviours_namespaceObject.SELECT],touch:!1}),_actionBehaviourMap);function src_helper_toConsumableArray(arr){return function src_helper_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);i2&&void 0!==arguments[2]?arguments[2]:{},innerRadius=config.innerRadius,outerRadius=config.outerRadius;return[innerRadius||0,outerRadius||Math.min(height,width)/2]}(context.width(),context.height()))})},GRID_BAND="gridBands",GRID_LINE="gridLines";function grid_lines_slicedToArray(arr,i){return function grid_lines_arrayWithHoles(arr){if(Array.isArray(arr))return arr}(arr)||function grid_lines_iterableToArrayLimit(arr,i){var _arr=[],_n=!0,_d=!1,_e=void 0;try{for(var _s,_i=arr[Symbol.iterator]();!(_n=(_s=_i.next()).done)&&(_arr.push(_s.value),!i||_arr.length!==i);_n=!0);}catch(err){_d=!0,_e=err}finally{try{_n||null==_i.return||_i.return()}finally{if(_d)throw _e}}return _arr}(arr,i)||function grid_lines_nonIterableRest(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}()}function grid_lines_toConsumableArray(arr){return function grid_lines_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);i=0?axisInf[key]:axisArr.length-1;axes[key]&&(axesObj[key]=defaultValue(axes[key][axisIndex]))}}),Object.keys(axesObj).length&&layer.axes(axesObj)})}(axesVal,layers,layerAxisIndexVal),context._lifeCycleManager.notify({client:layers,action:"updated",formalName:"layer"})}}}]};function props_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}var src_props_PROPS=(props_defineProperty(_PROPS={},"facetByFields",{}),props_defineProperty(_PROPS,"retinalFields",{}),props_defineProperty(_PROPS,"parentAlias",{}),props_defineProperty(_PROPS,"layers",{}),props_defineProperty(_PROPS,"cachedData",{}),props_defineProperty(_PROPS,"detailFields",{}),props_defineProperty(_PROPS,"axes",{defaultValue:{x:[],y:[]}}),props_defineProperty(_PROPS,"fields",{}),props_defineProperty(_PROPS,"metaInf",{}),props_defineProperty(_PROPS,"registry",{}),props_defineProperty(_PROPS,"width",{}),props_defineProperty(_PROPS,"height",{}),props_defineProperty(_PROPS,"parentContainerInf",{}),props_defineProperty(_PROPS,"valueParser",{defaultValue:function defaultValue(val){return val}}),props_defineProperty(_PROPS,"coord",{}),_PROPS);function firebolt_helper_slicedToArray(arr,i){return function firebolt_helper_arrayWithHoles(arr){if(Array.isArray(arr))return arr}(arr)||function firebolt_helper_iterableToArrayLimit(arr,i){var _arr=[],_n=!0,_d=!1,_e=void 0;try{for(var _s,_i=arr[Symbol.iterator]();!(_n=(_s=_i.next()).done)&&(_arr.push(_s.value),!i||_arr.length!==i);_n=!0);}catch(err){_d=!0,_e=err}finally{try{_n||null==_i.return||_i.return()}finally{if(_d)throw _e}}return _arr}(arr,i)||function firebolt_helper_nonIterableRest(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}()}function firebolt_helper_toConsumableArray(arr){return function firebolt_helper_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);i2&&void 0!==arguments[2]?arguments[2]:{},payload=config.payload,selectionSet=config.selectionSet,propagationFieldInf=config.propagationFields[action]||{},propagationFields=propagationFieldInf.fields||[],append=propagationFieldInf.append,criteria=payload.criteria,context=instance.context,dataModel=context.cachedData()[0],sourceId=context.id(),sideEfffects=instance.sideEffects(),behaviourEffectMap=instance._behaviourEffectMap,mergedModel=selectionSet.mergedEnter.model,fieldsConfig=dataModel.getFieldsConfig();payload.sourceUnit=sourceId,payload.action=action,payload.sourceCanvas=context.parentAlias();var propagationBehaviour=instance._propagationBehaviourMap[action]||action,propFields=[];null===criteria?propagationData=null:isSimpleObject(criteria)?(propFields=Object.keys(criteria||{}),propagationData=mergedModel?mergedModel.project(propFields):null):(propFields=criteria[0],propagationData=mergedModel?mergedModel.project(propFields):null);var facetByFields=context.facetByFields();if(null!==propagationData&&propagationFields.length){var fields=propagationData.getData().schema.map(function(d){return d.name});propagationData=function getModelWithFacetData(dm,data){var dataObj=dm.getData(),schema1=dataObj.schema,data1=dataObj.data,jsonData=[],schema2=data[0].map(function(d){return{name:"".concat(d),type:dist_datamodel.FieldType.DIMENSION}}),data2=data[1];return data1.forEach(function(d){var tuple={};schema1.forEach(function(obj,i){tuple[obj.name]=d[i]}),schema2.forEach(function(obj,i){tuple[obj.name]=data2[i]}),jsonData.push(tuple)}),new datamodel_default.a(jsonData,[].concat(data_propagator_toConsumableArray(schema1),data_propagator_toConsumableArray(schema2)))}(propagationData,facetByFields),propFields=append?[].concat(data_propagator_toConsumableArray(fields),data_propagator_toConsumableArray(propagationFields)):propagationFields,propagationData=propagationData.project(propFields)}var propagateInterpolatedValues=!1;propFields.length&&propFields.every(function(field){return fieldsConfig[field]&&fieldsConfig[field].def.type===dist_datamodel.FieldType.MEASURE})&&(propagateInterpolatedValues=!0);var groupId=context.parentAlias();payload.action=action;var behaviourInstance=instance._actions.behavioural[propagationBehaviour],isMutableAction=!!behaviourInstance&&behaviourInstance.constructor.mutates(),filterFn=function filterFn(entry,propagationConf){var effects=behaviourEffectMap[entry.config.action],mutates=!entry.config.groupId||effects.some(function(d){return sideEfffects[d.name||d].constructor.mutates()});return entry.config.groupId!==propagationConf.groupId&&mutates},sourceBehaviour=instance._actions.behavioural[action],mutates=!!sourceBehaviour&&sourceBehaviour.constructor.mutates(),propConfig={payload:payload,action:action,criteria:propagationData,isMutableAction:mutates,propagateInterpolatedValues:propagateInterpolatedValues,groupId:groupId,sourceId:mutates?groupId:sourceId,filterFn:filterFn,enabled:function enabled(propConf,firebolt){return action===propagationBehaviour||propConf.payload.sourceCanvas===firebolt.context.parentAlias()}};dataModel.propagate(propagationData,propConfig,!0),action!==propagationBehaviour&&(propConfig={payload:payload,sourceId:isMutableAction?groupId:sourceId,criteria:propagationData,isMutableAction:isMutableAction,propagateInterpolatedValues:propagateInterpolatedValues,action:propagationBehaviour,groupId:groupId,applyOnSource:action===propagationBehaviour,enabled:function enabled(propConf,firebolt){return propConf.payload.sourceCanvas!==firebolt.context.parentAlias()},filterFn:filterFn},dataModel.propagate(propagationData,propConfig,!0,{filterImmutableAction:function filterImmutableAction(actionInf,propInf){return actionInf.groupId!==propInf.groupId}}))};function src_firebolt_typeof(obj){return(src_firebolt_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function src_firebolt_defineProperties(target,props){for(var i=0;i1&&void 0!==arguments[1]?arguments[1]:{},points=[],parsedIdentifiers=identifiers;if(null===identifiers)return[];var layers=this.layers(),len=layers.length;isSimpleObject(identifiers)&&(parsedIdentifiers=[Object.keys(identifiers)],parsedIdentifiers=[].concat(visual_unit_toConsumableArray(parsedIdentifiers),visual_unit_toConsumableArray(function transposeArray(arr){return arr[0].map(function(col,i){return arr.map(function(row){return row[i]})})}(Object.values(identifiers)))));for(var i=0;i1&&void 0!==arguments[1]?arguments[1]:[]].map(function(fields){return fields.reduce(function(acc,d){return acc=[].concat(matrix_model_toConsumableArray(acc),matrix_model_toConsumableArray(d.getMembers()))},[])})},createSelectedDataModel=function createSelectedDataModel(datamodel,fieldNames,fieldValues){return datamodel.select(function(fields){return fieldNames.every(function(field,k){return fields[field].value===fieldValues[k]})})},matrix_model_uniqueKeyGenerator=function uniqueKeyGenerator(keyArray,context){var depth=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0,val=arguments.length>3&&void 0!==arguments[3]?arguments[3]:[],facets=context.facets,dataModel=context.dataModel,uniqueValues=context.uniqueValues;if(facets[depth+1]){var field=facets[depth];uniqueValues.forEach(function(value){var newDm=dataModel.select(function(fields){return fields[field].value===value}),nextDepthUniqueValues=retriveDomainFromData(newDm,facets[depth+1]);uniqueKeyGenerator(keyArray,{facets:facets,dataModel:newDm,uniqueValues:nextDepthUniqueValues},depth+1,[].concat(matrix_model_toConsumableArray(val),[value]))})}else uniqueValues.forEach(function(value){keyArray.push([].concat(matrix_model_toConsumableArray(val),[value]))})},projectRows=function projectRows(datamodel,projections){var allColumnProjections=projections.allColumnProjections,rowProjections=projections.rowProjections,optionalProjections=projections.optionalProjections;return rowProjections.length>0?rowProjections.map(function(projectFields){var _getFieldNames2=matrix_model_slicedToArray(getFieldNames(projectFields,allColumnProjections),2),projFieldNames=_getFieldNames2[0],colProjFieldNames=_getFieldNames2[1];return datamodel.project([].concat(matrix_model_toConsumableArray(projFieldNames),matrix_model_toConsumableArray(colProjFieldNames),matrix_model_toConsumableArray(optionalProjections)))}):[datamodel]},pushToMatrix=function pushToMatrix(context,valueCellCreator){var _matrix$rowIndex,cells=[],matrix=context.matrix,datamodel=context.datamodel,facetInfo=context.facetInfo,fieldInfo=context.fieldInfo,rowProjections=fieldInfo.rowProjections,colProjections=fieldInfo.colProjections,optionalProjections=fieldInfo.optionalProjections,rowIndex=facetInfo.rowIndex,columnIndex=facetInfo.columnIndex,rowProj=rowProjections[rowIndex%rowProjections.length]||[];colProjections.length>0?cells=colProjections.map(function(projectFields,projIdx){var _getFieldNames4=matrix_model_slicedToArray(getFieldNames(projectFields,rowProj),2),colProjFieldNames=_getFieldNames4[0],rowProjFieldNames=_getFieldNames4[1],projectedDm=datamodel.project([].concat(matrix_model_toConsumableArray(colProjFieldNames),matrix_model_toConsumableArray(rowProjFieldNames),matrix_model_toConsumableArray(optionalProjections))),projections={rowFields:rowProj,columnFields:projectFields},indices={rowIndex:rowIndex,columnIndex:columnIndex*colProjections.length+projIdx};return valueCellCreator(projectedDm,{projections:projections,indices:indices},facetInfo)}):cells=[valueCellCreator(datamodel,{projections:{rowFields:rowProj,columnFields:[]},indices:{rowIndex:rowIndex,columnIndex:columnIndex}},facetInfo)];matrix[rowIndex]=matrix[rowIndex]||[],(_matrix$rowIndex=matrix[rowIndex]).push.apply(_matrix$rowIndex,matrix_model_toConsumableArray(cells))},formatKeys=function formatKeys(keys,formatterList){keys.forEach(function(rKeys){rKeys.forEach(function(key,idx){rKeys[idx]=formatterList[idx](key)})})};function cell_creator_slicedToArray(arr,i){return function cell_creator_arrayWithHoles(arr){if(Array.isArray(arr))return arr}(arr)||function cell_creator_iterableToArrayLimit(arr,i){var _arr=[],_n=!0,_d=!1,_e=void 0;try{for(var _s,_i=arr[Symbol.iterator]();!(_n=(_s=_i.next()).done)&&(_arr.push(_s.value),!i||_arr.length!==i);_n=!0);}catch(err){_d=!0,_e=err}finally{try{_n||null==_i.return||_i.return()}finally{if(_d)throw _e}}return _arr}(arr,i)||function cell_creator_nonIterableRest(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}()}function cell_creator_toConsumableArray(arr){return function cell_creator_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);i0?rowProjections.length:1):(keys=columnKeys,length=colProjections.length>0?colProjections.length:1),keys=keys.map(function(arr){return arr.map(function(val){return resolver.valueParser()(val)})}),section.length&&headerFrom===type&&axis&&keys.length){var hContext={axis:axis,length:length,type:type},headers=[];index<2?(hContext.keys=keys,hContext.facet=facet.rows,headers=cell_creator_headerPlaceholderGn(hContext,selectionObj,cells,labelManager)):(hContext.facet=facet.columns,hContext.keys=keys[0].map(function(key,i){return keys.map(function(e){return e[i]})}),headers=cell_creator_headerPlaceholderGn(hContext,selectionObj,cells,labelManager)),selectionObj["".concat(type,"Headers")]=headers}else selectionObj["".concat(type,"Headers")]=null}),selectionObj},cell_creator_getAxisFields=function getAxisFields(projections){var fieldHolder=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];return projections.reduce(function(acc,item){return[].concat(cell_creator_toConsumableArray(acc),cell_creator_toConsumableArray(item.reduce(function(ac,field){return field instanceof simple_var_SimpleVariable?[].concat(cell_creator_toConsumableArray(ac),[field.oneVar()]):ac},[])))},fieldHolder)},cell_creator_computeMatrices=function computeMatrices(context,config){var resolver=context.resolver,datamodel=context.datamodel,componentRegistry=context.componentRegistry,encoders=context.encoders,globalConfig=config.globalConfig,selection=config.selection,transform=config.transform,groupBy=globalConfig.autoGroupBy,labelManager=resolver.dependencies().smartlabel,fieldMap=datamodel.getFieldsConfig(),layerConfig=resolver.layerConfig(),registry=resolver.registry(),normalizedRows=resolver.horizontalAxis().fields,normalizedColumns=resolver.verticalAxis().fields,otherEncodings=resolver.optionalProjections(config,layerConfig),facetsAndProjections=resolver.getAllFields(),matrixGnContext={normalizedColumns:normalizedColumns,normalizedRows:normalizedRows,facetsAndProjections:facetsAndProjections,layers:layerConfig,fieldMap:fieldMap,otherEncodings:otherEncodings,encoders:encoders,facet:globalConfig.facet||{},axisFrom:globalConfig.axisFrom||{},selection:selection,resolver:resolver},cells={GeomCell:resolver.getCellDef(registry.GeomCell),AxisCell:resolver.getCellDef(registry.AxisCell),BlankCell:resolver.getCellDef(registry.BlankCell),TextCell:resolver.getCellDef(registry.TextCell)},isRowSizeEqual=group_utils_isDistributionEqual(normalizedRows),isColumnSizeEqual=group_utils_isDistributionEqual(normalizedColumns);resolver.colCells({}),resolver.rowCells({}),resolver.datamodelTransform(transform||{}),resolver.resetSimpleAxes();var newCacheMap={exitCellMap:resolver.cacheMaps().entryCellMap,entryCellMap:new Map};resolver.cacheMaps(newCacheMap);var valueCellContext={config:globalConfig,suppliedLayers:encoders.simpleEncoder.serializeLayerConfig(resolver.layerConfig()),resolver:resolver,cell:cells.GeomCell,encoder:encoders.simpleEncoder,newCacheMap:newCacheMap,detailFields:config.detail,retinalConfig:{color:config.color,size:config.size,shape:config.shape}},fieldsConfig=datamodel.getFieldsConfig(),groupedModel=datamodel;if(!groupBy.disabled){var allFields=function extractFields(facetsAndProjections,layerFields){var _ref6,fields=Object.values(facetsAndProjections).map(function(arr){var _ref4,_ref5,flattenArray=(_ref4=[]).concat.apply(_ref4,group_utils_toConsumableArray(arr));return(_ref5=[]).concat.apply(_ref5,group_utils_toConsumableArray(flattenArray.map(function(field){return field instanceof variable_Variable?field.getMembers():field})))});return(_ref6=[]).concat.apply(_ref6,group_utils_toConsumableArray(fields).concat(group_utils_toConsumableArray(layerFields)))}(facetsAndProjections,function getFieldsFromSuppliedLayers(suppliedLayerConfig,fieldsConfig){var _ref3,fields=[],encodingArr=suppliedLayerConfig.map(function(conf){return conf.encoding||{}});return fields=(fields=[].concat(group_utils_toConsumableArray(fields),[(_ref3=[]).concat.apply(_ref3,group_utils_toConsumableArray(encodingArr.map(function(enc){return Object.values(enc).map(function(d){return d.field})})))])).filter(function(field){return fieldsConfig[field]&&fieldsConfig[field].def.type===dist_datamodel.FieldType.DIMENSION})}(valueCellContext.suppliedLayers,datamodel.getFieldsConfig())),dimensions=allFields.filter(function(field){return fieldsConfig[field]&&fieldsConfig[field].def.type===dist_datamodel.FieldType.DIMENSION}),aggregationFns=groupBy.measures,measureNames=Object.keys(datamodel.getFieldspace().getMeasure()),nearestAggFns=common_utils_retrieveNearestGroupByReducers.apply(void 0,[datamodel].concat(cell_creator_toConsumableArray(measureNames))),resolvedAggFns=mergeRecursive(nearestAggFns,aggregationFns);groupedModel=datamodel.groupBy(dimensions.length?dimensions:[""],resolvedAggFns).project(allFields)}var valueMatrixInfo=function getMatrixModel(dataModel,facetsAndProjections,valueCellCreator,globalConfig){var rowDataModels=[],rowKeys=[],columnKeys=[],allColumnProjections=[],matrix=[],facetInfo=[],fieldInfo=Object.assign({},facetsAndProjections),rowFacets=fieldInfo.rowFacets,colFacets=fieldInfo.colFacets;if(fieldInfo.colProjections.forEach(function(colProj){allColumnProjections.push.apply(allColumnProjections,matrix_model_toConsumableArray(colProj))}),fieldInfo.allColumnProjections=allColumnProjections,rowFacets.length>0){var field=rowFacets[0].toString(),firstLevelRowKeys=retriveDomainFromData(dataModel,field);group_utils_sortFacetFields(rowFacets[0],firstLevelRowKeys,globalConfig),matrix_model_uniqueKeyGenerator(rowKeys,{facets:rowFacets,dataModel:dataModel,uniqueValues:firstLevelRowKeys}),rowKeys.forEach(function(val){var _rowDataModels,rowFacetFieldNames=matrix_model_slicedToArray(getFieldNames(rowFacets),1)[0],selectedDataModel=createSelectedDataModel(dataModel,rowFacetFieldNames,val),newProjectedDataModels=projectRows(selectedDataModel,fieldInfo);(_rowDataModels=rowDataModels).push.apply(_rowDataModels,matrix_model_toConsumableArray(newProjectedDataModels)),newProjectedDataModels.forEach(function(){facetInfo.push([rowFacets,val])})})}else{var _rowDataModels2;(_rowDataModels2=rowDataModels).push.apply(_rowDataModels2,matrix_model_toConsumableArray(projectRows(dataModel,fieldInfo)))}if(rowDataModels=rowDataModels.length>0?rowDataModels:[[]],colFacets.length>0){var colFacetNames=colFacets.map(function(d){return"".concat(d)}),_field=colFacetNames[0],firstLevelColumnKeys=retriveDomainFromData(dataModel,_field);group_utils_sortFacetFields(colFacets[0],firstLevelColumnKeys,globalConfig),matrix_model_uniqueKeyGenerator(columnKeys,{facets:colFacetNames,dataModel:dataModel,uniqueValues:firstLevelColumnKeys}),rowDataModels.forEach(function(dme,rIndex){facetInfo[rIndex]=facetInfo[rIndex]||[[],[]],columnKeys.forEach(function(val,cIndex){matrix[rIndex]=matrix[rIndex]||[];var datamodel=dme instanceof datamodel_default.a?dme:dataModel,selectedDataModel=createSelectedDataModel(datamodel,colFacetNames,val),context={matrix:matrix,datamodel:selectedDataModel,facetInfo:{rowFacets:facetInfo[rIndex],colFacets:[colFacets,val],rowIndex:rIndex,columnIndex:cIndex},fieldInfo:fieldInfo};pushToMatrix(context,valueCellCreator)})})}else rowDataModels.forEach(function(dme,rIndex){facetInfo[rIndex]=facetInfo[rIndex]||[[],[]];var context={matrix:matrix,datamodel:dme||dataModel,facetInfo:{rowFacets:facetInfo[rIndex],colFacets:[[],[]],rowIndex:rIndex,columnIndex:0},fieldInfo:fieldInfo};pushToMatrix(context,valueCellCreator)});formatKeys(columnKeys,colFacets.map(function(facetField){return facetField.rawFormat()})),formatKeys(rowKeys,rowFacets.map(function(facetField){return facetField.rawFormat()}));var transposedColKeys=columnKeys.length>0?columnKeys[0].map(function(col,i){return columnKeys.map(function(row){return row[i]})}):columnKeys;return{matrix:matrix,rowKeys:rowKeys,columnKeys:transposedColKeys}}(groupedModel=function sortDmTemporalFields(resolver,datamodel){var axisFields=[],projections=resolver.projections();axisFields=cell_creator_getAxisFields(projections.rowProjections,cell_creator_getAxisFields(projections.colProjections));var fieldConfig=datamodel.getFieldsConfig(),temporalFields=axisFields.reduce(function(acc,field){return"temporal"===fieldConfig[field].def.subtype?[].concat(cell_creator_toConsumableArray(acc),[[field]]):acc},[]);return temporalFields.length?datamodel.sort(temporalFields,{saveChild:!0}):datamodel}(resolver,groupedModel),facetsAndProjections,resolver.valueCellsCreator(valueCellContext),globalConfig);resolver.cacheMaps().exitCellMap.forEach(function(placeholder){placeholder.remove()}),resolver.cacheMaps().exitCellMap.clear(),resolver.valueMatrix(valueMatrixInfo.matrix);var _mutateAxesFromMap=function mutateAxesFromMap(cacheMaps,axes){var xAxes=null,yAxes=null,xAxesMap=cacheMaps.xAxesMap,yAxesMap=cacheMaps.yAxesMap,xAxisSet=axes.x,yAxisSet=axes.y;return xAxisSet&&xAxisSet.forEach(function(axisId){var xAxis=xAxesMap.get(axisId);(xAxes=xAxes||[]).push(xAxis)}),yAxisSet&&yAxisSet.forEach(function(axisId){var yAxis=yAxesMap.get(axisId);(yAxes=yAxes||[]).push(yAxis)}),{xAxes:xAxes,yAxes:yAxes}}(resolver.cacheMaps(),resolver.axes()),xAxes=_mutateAxesFromMap.xAxes,yAxes=_mutateAxesFromMap.yAxes;resolver.axes({x:xAxes,y:yAxes});var store=resolver.store();[xAxes,yAxes].forEach(function(axesArr,type){var stateProps={};(axesArr=axesArr||[]).forEach(function(axes,idx){axes.forEach(function(axis,axisIndex){stateProps["".concat(idx).concat(axisIndex)]=null})}),store.append("".concat(namespace_namespaceObject.GROUP_GLOBAL_NAMESPACE,".domain.").concat(type?"y":"x"),stateProps)}),resolver.createUnits(componentRegistry,config);var _generateMatrices=function generateMatrices(context,matrices,cells,labelManager){var unitHeight=context.unitHeight,unitWidth=context.unitWidth,facetsAndProjections=context.facetsAndProjections,normalizedRows=context.normalizedRows,normalizedColumns=context.normalizedColumns,selection=context.selection,axisFrom=context.axisFrom,facet=context.facet,encoders=context.encoders,resolver=context.resolver,selectionObj=cell_creator_generatePlaceholders({fields:{rows:normalizedRows,columns:normalizedColumns},matrices:matrices,facetsAndProjections:facetsAndProjections,selection:selection,axisFrom:axisFrom,facet:facet,encoders:encoders,resolver:resolver},cells,labelManager),columnsPrimary=selectionObj.columnsPrimary,columnsSecondary=selectionObj.columnsSecondary,rowsPrimary=selectionObj.rowsPrimary,rowsSecondary=selectionObj.rowsSecondary,leftHeaders=selectionObj.leftHeaders,topHeaders=selectionObj.topHeaders,bottomHeaders=selectionObj.bottomHeaders,rightHeaders=selectionObj.rightHeaders,_map2=cell_creator_slicedToArray([rowsPrimary,rowsSecondary,columnsPrimary,columnsSecondary].map(function(d){return d?d.getObjects():[]}),4),rowPrime=_map2[0],rowSec=_map2[1],colPrime=_map2[2],colSec=_map2[3],_map4=cell_creator_slicedToArray([leftHeaders,rightHeaders].map(function(e){return e?e.getObjects().map(function(f){return f.getObjects()}):[]}),2),leftFacets=_map4[0],rightFacets=_map4[1],rowPriority=rowSec.length?1:-1;rowPrime.length&&rowPriority++;var colPriority=colSec.length?1:-1;colPrime.length&&colPriority++;var leftMatrix=leftFacets.length?leftFacets.map(function(d,i){return rowPrime[i]=rowPrime[i]?[rowPrime[i]]:[],[].concat(cell_creator_toConsumableArray(d),cell_creator_toConsumableArray(rowPrime[i]))}):rowPrime?rowPrime.map(function(d){return[d]}):[],rightMatrix=rowSec.length?rowSec.map(function(d,i){return[d].concat(cell_creator_toConsumableArray(rightFacets[i]||[]))}):rightFacets.length?rightFacets.map(function(d){return cell_creator_toConsumableArray(d)}):[],topMatrix=[];topHeaders&&topHeaders.getObjects().forEach(function(e){e.getObjects().forEach(function(x,i){topMatrix[i]=topMatrix[i]||[],topMatrix[i].push(x)})});colPrime.length&&topMatrix.push(colPrime);var bottomMatrix=[];colSec.length&&bottomMatrix.push(colSec);var currentBottomLength=bottomMatrix.length;bottomHeaders&&bottomHeaders.getObjects().forEach(function(e){e.getObjects().forEach(function(x,i){bottomMatrix[i+currentBottomLength]=bottomMatrix[i+currentBottomLength]||[],bottomMatrix[i+currentBottomLength].push(x)})});if(!leftMatrix.length&&!rightMatrix.length){var cell=new cells.BlankCell;cell.setAvailableSpace(unitWidth,unitHeight),leftMatrix=[[cell]]}if(!(topMatrix.length||bottomMatrix.length&&bottomMatrix[0].length)){var _cell=new cells.BlankCell;_cell.setAvailableSpace(unitWidth,unitHeight),bottomMatrix=[[_cell]]}return{rows:[leftMatrix,rightMatrix],columns:[topMatrix,bottomMatrix],selectionObj:selectionObj,colPriority:colPriority,rowPriority:rowPriority}}(matrixGnContext,{valuesMatrix:valueMatrixInfo,axesMatrix:resolver.axes()},cells,labelManager),rows=_generateMatrices.rows,columns=_generateMatrices.columns,selectionObj=_generateMatrices.selectionObj,rowPriority=_generateMatrices.rowPriority,colPriority=_generateMatrices.colPriority;return resolver.rowMatrix(rows),resolver.columnMatrix(columns),{rows:resolver.rowMatrix(),columns:resolver.columnMatrix(),values:resolver.valueMatrix(),isColumnSizeEqual:isColumnSizeEqual,isRowSizeEqual:isRowSizeEqual,priority:{row:rowPriority,col:colPriority},selection:selectionObj,dataModels:{groupedModel:groupedModel,parentModel:datamodel}}},RESOLVER_PROPS={dependencies:{},units:{},datamodelTransform:{},layerConfig:{},matrixLayers:{},colCells:{},rowCells:{},rowMatrix:{},columnMatrix:{},valueMatrix:{},encoder:{},valueParser:{}};function matrix_resolver_slicedToArray(arr,i){return function matrix_resolver_arrayWithHoles(arr){if(Array.isArray(arr))return arr}(arr)||function matrix_resolver_iterableToArrayLimit(arr,i){var _arr=[],_n=!0,_d=!1,_e=void 0;try{for(var _s,_i=arr[Symbol.iterator]();!(_n=(_s=_i.next()).done)&&(_arr.push(_s.value),!i||_arr.length!==i);_n=!0);}catch(err){_d=!0,_e=err}finally{try{_n||null==_i.return||_i.return()}finally{if(_d)throw _e}}return _arr}(arr,i)||function matrix_resolver_nonIterableRest(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}()}function matrix_resolver_toConsumableArray(arr){return function matrix_resolver_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);i0?leftRows[0].map(blankCellCreator):[],right:rightRows.length>0?rightRows[0].map(blankCellCreator):[]},_map2=matrix_resolver_slicedToArray([constants_LEFT,constants_RIGHT].map(function(type){return topCols.map(function(col,i){return i===topCols.length-1?headers[type]:footers[type]})}),2),topLeft=_map2[0],topRight=_map2[1];if(0===topCols.length){var _map4=matrix_resolver_slicedToArray([constants_LEFT,constants_RIGHT].map(function(type){return bottomCols.map(function(col,i){return 0===i?headers[type]:footers[type]})}),2);bottomLeft=_map4[0],bottomRight=_map4[1]}else bottomLeft=bottomCols.map(function(){return leftRows.length>0?leftRows[0].map(blankCellCreator):[]}),bottomRight=bottomCols.map(function(){return rightRows.length>0?rightRows[0].map(blankCellCreator):[]});return lifeCycleManager.notify({client:[topLeft,topRight,bottomLeft,bottomRight],action:"initialized",formalName:"facet-headers"}),{topLeft:topLeft,topRight:topRight,bottomLeft:bottomLeft,bottomRight:bottomRight}}},{key:"getMatrices",value:function getMatrices(datamodel,config,componentRegistry,encoders){return cell_creator_computeMatrices({datamodel:datamodel,componentRegistry:componentRegistry,encoders:encoders,resolver:this},config)}},{key:"store",value:function store(){return arguments.length?(this._store=arguments.length<=0?void 0:arguments[0],this):this._store}}]),MatrixResolver}();function value_matrix_defineProperties(target,props){for(var i=0;i3&&void 0!==arguments[3]?arguments[3]:{},type=firebolt.context.constructor.type(),payload=config.payload,data=firebolt.context.data(),metaData=firebolt.context.metaData(),fieldType=metaData.getData().schema[0].type,propPayload={},sourceId=firebolt.context._id;propPayload.action=action_behaviour_map_propagationBehaviourMap[action]||action,propPayload.sideEffects=propagationSideEffects[action],propPayload.sourceCanvas=firebolt.context.canvasAlias();var isMutableAction=firebolt._actions.behavioural[propPayload.action].constructor.mutates();if(null===payload.criteria)propagationData=null;else{var entrySet=selectionSet.mergedEnter,values=data.filter(function(d){return-1!==entrySet.uids.indexOf(d.id)}).map(function(d){return d.rawVal});if("step"===type||"discrete"===type&&"measure"===fieldType){var field=Object.keys(payload.criteria||{})[0];propagationData=(values=data.filter(function(d){return-1!==entrySet.uids.indexOf(d.id)}).map(function(d){return d.range})).length?metaData.select(function(fields){for(var check=!1,i=0;i=values[i][0]&&fields[field].value<=values[i][1]);i++);return check},{saveChild:!1}):null}else"gradient"===type?propagationData=getDataModelFromRange(metaData,payload.criteria):values.length?propagationData=function assembleModelFromIdentifiers(model,identifiers){var data,schema=[],fieldMap=model.getFieldsConfig();return identifiers.length?function(){for(var fields=identifiers[0],len=fields.length,i=0;i=drawingInfMeasure+offset?[axisScale.invert(drawingInfMeasure+offset-selectionBoxMeasure),axisScale.invert(drawingInfMeasure+offset)]:subjectStartPoint-offset1&&void 0!==arguments[1]?arguments[1]:{},classPrefix=context.config().classPrefix;set.mergedEnter.length||set.mergedExit.length?(classed(set.mergedExit,config.className||"".concat(classPrefix,"-legend-brighten"),!1),classed(set.mergedExit,config.className||"".concat(classPrefix,"-legend-fadeout"),!0),classed(set.mergedEnter,config.className||"".concat(classPrefix,"-legend-fadeout"),!1)):classed(set.completeSet,config.className||"".concat(classPrefix,"-legend-fadeout"),!1)},brighten:function brighten(set){var config=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},classPrefix=context.config().classPrefix;set.mergedEnter.length||set.mergedExit.length?(classed(set.mergedEnter,config.className||"".concat(classPrefix,"-legend-brighten"),!0),classed(set.mergedExit,config.className||"".concat(classPrefix,"-legend-brighten"),!1)):classed(set.completeSet,config.className||"".concat(classPrefix,"-legend-brighten"),!1)}}};function legend_highlighter_typeof(obj){return(legend_highlighter_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function legend_highlighter_defineProperties(target,props){for(var i=0;i2&&void 0!==arguments[2]?arguments[2]:{};(0,this._strategies[options.strategy||this._strategy])(selectionSet,this)}}],[{key:"formalName",value:function formalName(){return"highlighter"}}]),LegendHighlighter}(),legend_props_PROPS={config:{sanitization:function sanitization(context,value){return mergeRecursive(context._config||{},value)}},data:{},fieldName:{},legendContainer:{},measurement:{sanitization:function sanitization(context,value){var measurement=mergeRecursive(context._measurement,value);return["padding","border","margin"].forEach(function(space){measurement[space]=Math.min(measurement[space]>0?measurement[space]:0,.1*measurement.maxWidth,.1*measurement.maxHeight)}),measurement}},logicalSpace:{},metaData:{},range:{sanitization:function sanitization(context,value){return context.scale().range(value),context.resetLogicalSpace(),context.store().commit("range",value),value}},scale:{},smartTicks:{},store:{},title:{sanitization:function sanitization(context,value){return mergeRecursive(context._title||{},value)}},labelManager:{},minTickDistance:{},valueParser:{defaultValue:function defaultValue(val){return val}}},ALIGN_HORIZONTAL="horizontal",ALIGN_VERTICAL="vertical",DEFAULT_MEASUREMENT={height:30,width:30,maxWidth:1/0,maxHeight:1/0,padding:2,margin:2,border:1},LEGEND_TITLE={text:"",orientation:function orientation(pos){return"left"===pos||"right"===pos?"left":"center"}},legend_defaults_DEFAULT_CONFIG={classPrefix:"muze",borderStyle:"solid",borderColor:"rgba(0,0,0,0)",formatter:{bounds:{lower:"less than",upper:"more than"}},item:{text:{orientation:"right",width:10,formatter:function formatter(val,i,data,context){return context.valueParser()(val)}},icon:{className:"legend-icon",height:20,width:20,color:"rgba(0,0,0,.5)",type:"square"}}},defaults_ICON_MAP=function ICON_MAP(icon){return icon&&"string"==typeof icon?common_utils_getSymbol(icon):icon};function legend_helper_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}var legend_helper_getScaleInfo=function getScaleInfo(scale){var scaleType=scale.constructor.type();return{scaleType:scaleType,domain:scale.uniqueValues(),steps:scale.config().stops||1,scaleFn:SCALE_FUNCTIONS[scaleType]}},legend_helper_getInterpolatedArrayData=function getInterpolatedArrayData(domainForLegend,scaleParams){var requiredWidth,requiredHeight,upperBound=domainForLegend[domainForLegend.length-1],minTickDiff=Math.ceil(domainForLegend[1]-domainForLegend[0]),maxTickDiff=Math.ceil(upperBound-domainForLegend[0]),alignment=scaleParams.alignment,smartLabelCalc=scaleParams.smartLabel,availableSpace=scaleParams.measures,minimumTickSize=scaleParams.minTickDistance,_smartLabelCalc$getOr=smartLabelCalc.getOriSize(upperBound),tickDimHeight=_smartLabelCalc$getOr.height,tickDimWidth=_smartLabelCalc$getOr.width;return Number.isInteger(upperBound)||(upperBound=upperBound.toFixed(2)),minTickDiff=minTickDiff<1?1:minTickDiff,requiredWidth=Math.abs(maxTickDiff)/Math.abs(minTickDiff)*(tickDimWidth+minimumTickSize.width),requiredWidth-=Math.abs(maxTickDiff),requiredHeight=Math.abs(maxTickDiff)/Math.abs(minTickDiff)*tickDimHeight,requiredHeight-=Math.abs(maxTickDiff),domainForLegend=function getcomputedArray(computationhelper,requiredMeasure,availableMeasure,domainForLegend){var currentTickValue,nextTickValue,upperBound=domainForLegend[domainForLegend.length-1],param=computationhelper.measureParam,smartLabelCalc=computationhelper.smartLabelCalc,pixelPerTick=availableMeasure[param]/upperBound;if(availableMeasure[param]>=requiredMeasure[param])return domainForLegend;currentTickValue=smartLabelCalc.getOriSize(domainForLegend[0])[param];for(var i=1;i0?titleSpace.height+effPadding:0,titleWidth=titleSpace.width+effPadding,labelSpaces=this.getLabelSpaces(effPadding,align),_computeItemSpaces=function computeItemSpaces(config,measures,data){var totalHeight=0,totalWidth=0,maxItemSpaces={width:0,height:0},effPadding=measures.effPadding,titleWidth=measures.titleWidth,labelSpaces=measures.labelSpaces,titleHeight=measures.titleHeight,maxWidth=measures.maxWidth,item=config.item,align=config.align,icon=item.icon,textOrientation=item.text.orientation,itemSpaces=[],iconSpaces=[],maxIconWidth=0;return labelSpaces.forEach(function(labelSpace,i){var itemSpace={width:0,height:0},iconSpace={width:0,height:0},datum=data[i]||{};"left"===textOrientation||"right"===textOrientation?(labelSpace.width+=effPadding,iconSpace.width=(datum.size?2*Math.sqrt(datum.size/Math.PI):icon.width)+effPadding,maxIconWidth=Math.max(iconSpace.width,maxIconWidth),itemSpace.width=labelSpace.width+maxIconWidth,labelSpace.height=Math.max(labelSpace.height,icon.height)+effPadding,iconSpace.height=labelSpace.height,itemSpace.height=labelSpace.height):(labelSpace.width=Math.max(labelSpace.width,datum.size?2*Math.sqrt(datum.size/Math.PI):icon.width)+effPadding,iconSpace.width=labelSpace.width,itemSpace.width=labelSpace.width,maxIconWidth=Math.max(iconSpace.width,maxIconWidth),labelSpace.height+=effPadding,iconSpace.height=icon.height+effPadding,itemSpace.height=labelSpace.height+iconSpace.height),"horizontal"===align?totalHeight=Math.max(totalHeight,itemSpace.height):(totalHeight+=itemSpace.height,totalWidth=Math.max(totalWidth,itemSpace.width,titleWidth)),maxItemSpaces={width:Math.max(itemSpace.width,maxItemSpaces.width),height:Math.max(itemSpace.height,maxItemSpaces.height)},itemSpaces.push(itemSpace),iconSpaces.push(iconSpace)}),itemSpaces.forEach(function(itemSpace,i){if("horizontal"===align)itemSpace.height=totalHeight,iconSpaces[i].width=maxIconWidth,"left"===textOrientation||"right"===textOrientation?(labelSpaces[i].height=totalHeight,iconSpaces[i].height=totalHeight,itemSpaces[i].width=labelSpaces[i].width+maxIconWidth):(labelSpaces[i].width=maxIconWidth,itemSpaces[i].width=maxIconWidth,labelSpaces[i].width=maxIconWidth),totalWidth=Math.max(totalWidth+itemSpaces[i].width);else if(itemSpace.width=Math.max(totalWidth,maxWidth),"top"===textOrientation||"bottom"===textOrientation)labelSpaces[i].width=totalWidth,iconSpaces[i].width=totalWidth,maxIconWidth=totalWidth;else{var labelWidth=labelSpaces[i].width,newLabelWidth=maxItemSpaces.width-maxIconWidth;iconSpaces[i].width=maxIconWidth,itemSpaces[i].width=labelSpaces[i].width+maxIconWidth,labelSpaces[i].width=Math.max(labelWidth,newLabelWidth),totalWidth=Math.max(totalWidth,itemSpace.width)}}),totalWidth=Math.ceil(Math.max(totalWidth,titleWidth))+effPadding,totalHeight+=titleHeight+effPadding,{totalHeight:totalHeight=Math.ceil(totalHeight),totalWidth:totalWidth,itemSpaces:itemSpaces,iconSpaces:iconSpaces,maxItemSpaces:maxItemSpaces,maxIconWidth:maxIconWidth}}(this.config(),{effPadding:effPadding,titleWidth:titleWidth,labelSpaces:labelSpaces,titleHeight:titleHeight,maxWidth:maxWidth,maxHeight:maxHeight},this.data()),totalHeight=_computeItemSpaces.totalHeight,totalWidth=_computeItemSpaces.totalWidth,itemSpaces=_computeItemSpaces.itemSpaces,iconSpaces=_computeItemSpaces.iconSpaces,maxItemSpaces=_computeItemSpaces.maxItemSpaces,maxIconWidth=_computeItemSpaces.maxIconWidth;return this.measurement({width:Math.max(totalWidth,width)+effMargin+effBorder,height:Math.max(totalHeight,height)+effMargin+effBorder,labelSpaces:labelSpaces,iconSpaces:iconSpaces,itemSpaces:itemSpaces,maxItemSpaces:maxItemSpaces,maxIconWidth:maxIconWidth,titleSpaces:{width:Math.min(maxWidth,this.measurement().width)-effMargin-effBorder,height:titleHeight}}),this}},{key:"getTitleSpace",value:function getTitleSpace(){return this._labelManager.setStyle(renderer_utils_getSmartComputedStyle(renderer_utils_selectElement("body"),"".concat(this.config().classPrefix,"-legend-title"))),this._labelManager.getOriSize(this.title().text?this.title().text:"")}},{key:"renderTitle",value:function renderTitle(container){var _this$measurement2=this.measurement(),titleSpaces=_this$measurement2.titleSpaces,border=_this$measurement2.border,padding=_this$measurement2.padding,width=_this$measurement2.width,maxWidth=_this$measurement2.maxWidth,_this$config3=this.config(),borderStyle=_this$config3.borderStyle,borderColor=_this$config3.borderColor;return function titleCreator(container,title,measurement,config){var titleWidth=Math.min(measurement.maxWidth,measurement.width),titleContainer=makeElement(container,"table",[1],"".concat(config.classPrefix,"-legend-title")).style("width","".concat(titleWidth,"px")).style("height","".concat(measurement.height,"px")).style("border-bottom","".concat(measurement.border,"px ").concat(config.borderStyle," ").concat(config.borderColor)).style("text-align",title.orientation instanceof Function?title.orientation(config.position):title.orientation);return makeElement(titleContainer,"td",[1],"".concat(config.classPrefix,"-legend-title-text")).style("width","".concat(titleWidth,"px")).style("max-width","".concat(titleWidth,"px")).style("height","100%").style("line-height",1).style("padding","".concat(measurement.padding,"px")).text(title.text).style("overflow-x","scroll").node()}(container,this.title(),{height:titleSpaces.height,width:width,maxWidth:maxWidth,border:border,padding:padding,borderStyle:borderStyle,borderColor:borderColor},this.config())}},{key:"render",value:function render(){var marginPosition,firebolt=this.firebolt(),_this$config4=this.config(),classPrefix=_this$config4.classPrefix,borderStyle=_this$config4.borderStyle,borderColor=_this$config4.borderColor,position=_this$config4.position,_this$measurement3=this.measurement(),maxWidth=_this$measurement3.maxWidth,maxHeight=_this$measurement3.maxHeight,width=_this$measurement3.width,height=_this$measurement3.height,margin=_this$measurement3.margin,border=_this$measurement3.border,legendContainer=makeElement(renderer_utils_selectElement(this.mount()),"div",[1],"".concat(classPrefix,"-legend-box"));switch(position){case"top":marginPosition="margin-".concat("bottom");break;case"left":marginPosition="margin-".concat("right");break;case"bottom":marginPosition="margin-".concat("top");break;default:marginPosition="margin-".concat("left")}return legendContainer.classed("".concat(classPrefix,"-legend-box-").concat(this._id),!0),legendContainer.style("float","left"),legendContainer.style("width","".concat(Math.min(maxWidth,width)-2*margin,"px")).style("height","".concat(Math.min(maxHeight,height)-2*margin,"px")).style("".concat(marginPosition),"".concat(margin,"px")).style("border","".concat(border,"px ").concat(borderStyle," ").concat(borderColor)),this.legendContainer(legendContainer.node()),this.renderTitle(legendContainer),firebolt.createSelectionSet(this.data().map(function(d){return d.id})),legendContainer}},{key:"getCriteriaFromData",value:function getCriteriaFromData(data){var fieldName=this.fieldName();return"measure"===this.metaData().getData().schema[0].type?function simple_legend_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}({},fieldName,data.range):[[fieldName],[data.rawVal]]}}],[{key:"create",value:function create(dependencies){return new SimpleLegend(dependencies)}},{key:"defaultConfig",value:function defaultConfig(){return legend_defaults_DEFAULT_CONFIG}},{key:"defaultMeasurement",value:function defaultMeasurement(){return DEFAULT_MEASUREMENT}}]),SimpleLegend}();function position_config_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}var legendOrientation=(position_config_defineProperty(_legendOrientation={},"horizontal",{datasets:function datasets(data){return{row:[1],column:data}},itemContainerMeasures:function itemContainerMeasures(measurement){var itemSpaces=measurement.itemSpaces,width=measurement.width;return{row:{width:"".concat(width,"px"),padding:"".concat(0,"px")},column:{width:function width(d,i){return"".concat(itemSpaces[i].width,"px")},padding:"".concat(0,"px")}}},getStepSpacesInfo:function getStepSpacesInfo(measurement){var maxItemSpaces=measurement.maxItemSpaces;return{iconHeight:measurement.height,iconWidth:maxItemSpaces.width,stepPadding:{horizontal:!0,vertical:!1}}}}),position_config_defineProperty(_legendOrientation,"vertical",{datasets:function datasets(data){return{row:data,column:function column(d){return[d]}}},itemContainerMeasures:function itemContainerMeasures(measurement,config){var width=measurement.width,padding=config.padding;return{row:{width:"".concat(width,"px"),padding:"".concat(padding,"px")},column:{width:"".concat(width,"px"),padding:"".concat(0,"px")}}},getStepSpacesInfo:function getStepSpacesInfo(measurement){var maxItemSpaces=measurement.maxItemSpaces,width=measurement.width;return{iconHeight:maxItemSpaces.height,iconWidth:width,stepPadding:{horizontal:!1,vertical:!0}}}}),_legendOrientation),positionConfig=(position_config_defineProperty(_positionConfig={},"left",legendOrientation.vertical),position_config_defineProperty(_positionConfig,"right",legendOrientation.vertical),position_config_defineProperty(_positionConfig,"top",legendOrientation.horizontal),position_config_defineProperty(_positionConfig,"bottom",legendOrientation.horizontal),_positionConfig),alignmentMap=(position_config_defineProperty(_alignmentMap={},"left","end"),position_config_defineProperty(_alignmentMap,"right","start"),position_config_defineProperty(_alignmentMap,"top","center"),position_config_defineProperty(_alignmentMap,"bottom","center"),_alignmentMap),itemStack=(position_config_defineProperty(_itemStack={},"left",[VALUE,"shape"]),position_config_defineProperty(_itemStack,"right",["shape",VALUE]),position_config_defineProperty(_itemStack,"top",[VALUE,"shape"]),position_config_defineProperty(_itemStack,"bottom",["shape",VALUE]),_itemStack),renderer_createLegendSkeleton=function createLegendSkeleton(context,container,classPrefix,data){var gradWidth,gradHeight,maxGradHeight,maxGradWidth,measurement=context.measurement(),margin=measurement.margin,border=measurement.border,titleSpaces=measurement.titleSpaces,width=measurement.width,height=measurement.height,maxWidth=measurement.maxWidth,maxHeight=measurement.maxHeight;gradHeight=height-(titleSpaces.height+2*margin+2*border),gradWidth=width-(2*margin+2*border),maxGradHeight=maxHeight-(titleSpaces.height+2*margin+2*border),maxGradWidth=maxWidth-(2*margin+2*border);var legendBody=makeElement(container,"div",[1],"".concat(classPrefix,"-legend-body"));return legendBody.select(".".concat(classPrefix,"-legend-overflow")).remove(),maxGradWidth&&maxGradWidth4)}(shape)?shape:defaults_ICON_MAP(shape).size(size)(),makeElement(groupElement,"path",function(data){return[data]}).attr("d",pathStr)}return d[1]="circle",createShape(d,elem,"circle")}(datum,makeElement(svg,"g",[datum[1]],"".concat(classPrefix,"-legend-icon")),datum[3]?"circle":"square",iconWidth,iconHeight).attr("transform","translate(".concat(maxIconWidth/2-padding," ").concat(iconHeight/2,")")).attr("fill",datum[2]||color):makeElement(svg,"rect",[datum[1]],"".concat(classPrefix,"-legend-icon")).attr("x",0).attr("y",0).attr("width",maxIconWidth).attr("height",iconHeight).attr("fill",datum[2]||color)};function discrete_legend_typeof(obj){return(discrete_legend_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function discrete_legend_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}function discrete_legend_toConsumableArray(arr){return function discrete_legend_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);isteps[steps.length-1]&&domainForLegend.push(domain[1]),domainForLegend=gradient_legend_toConsumableArray(new Set(domainForLegend)).sort(function(a,b){return a-b}),domainForLegend=legend_helper_getInterpolatedArrayData(domainForLegend,scaleParams)):domainForLegend=legend_helper_getInterpolatedData(domain,steps-1,scaleParams),(domainForLegend=gradient_legend_toConsumableArray(new Set(domainForLegend)).sort(function(a,b){return a-b})).map(function(ele,i){var _ref,value=domainForLegend[i];return gradient_legend_defineProperty(_ref={},scaleType,"size"===scaleType?scale[scaleFn](ele)*scale.getScaleFactor():scale[scaleFn](Math.floor(ele))),gradient_legend_defineProperty(_ref,"value",+value.toFixed(2)),gradient_legend_defineProperty(_ref,"id",i),_ref}).filter(function(d){return null!==d.value})}},{key:"getLabelSpaces",value:function getLabelSpaces(effPadding){this.config({item:{text:{orientation:this.config().position}}});var axis=function createAxis(context){var data=context.data(),align=context.config().align,AxisCell=context._cells.AxisCell,newAxis=new continous_axis_ContinousAxis({id:"legend-".concat(context._id),orientation:align===ALIGN_VERTICAL?"right":"bottom",style:context._computedStyle,nice:!1,showAxisName:!1,tickValues:data.map(function(d){return d.value}),fixedBaseline:!1,labels:{rotation:null}},{labelManager:context._labelManager});return newAxis.domain(getGradientDomain(data)),newAxis.range([1,1]),(new AxisCell).source(newAxis).config({margin:{left:0,bottom:0,top:0,right:0}})}(this),axisSpace=axis.getLogicalSpace(),space={width:axisSpace.width-effPadding,height:axisSpace.height-effPadding},axisDomainLength=axis.source().domain().length,labelSpaces=new Array(axisDomainLength).fill(space);return this.axis(axis),labelSpaces}},{key:"getDrawingContext",value:function getDrawingContext(){return{svgContainer:this._legendGradientSvg}}},{key:"render",value:function render(){var firebolt=this.firebolt(),legendContainer=gradient_legend_get(gradient_legend_getPrototypeOf(GradientLegend.prototype),"render",this).call(this,this.mount());return function renderGradient(context,container){var gradHeight,gradWidth,_context$config2=context.config(),align=_context$config2.align,classPrefix=_context$config2.classPrefix,item=_context$config2.item,data=context.data(),_createLegendSkeleton=gradient_helper_createLegendSkeleton(container,classPrefix,data),legendContainer=_createLegendSkeleton.legendContainer,legendGradSvg=_createLegendSkeleton.legendGradSvg,legendGradCont=_createLegendSkeleton.legendGradCont,linearGradient=_createLegendSkeleton.linearGradient,legendRect=_createLegendSkeleton.legendRect,labelDim=context.axis().source().getAxisDimensions().tickDimensions,_context$measurement=context.measurement(),padding=_context$measurement.padding,margin=_context$measurement.margin,border=_context$measurement.border,titleSpaces=_context$measurement.titleSpaces,maxItemSpaces=_context$measurement.maxItemSpaces,maxHeight=_context$measurement.maxHeight,maxWidth=_context$measurement.maxWidth,height=_context$measurement.height,width=_context$measurement.width,gradientDimensions={};gradHeight=Math.floor(Math.min(height,maxHeight)-(titleSpaces.height+2*margin+2*border)),gradWidth=Math.floor(Math.min(width,maxWidth)-(2*margin+2*border)),align===ALIGN_HORIZONTAL?(gradientDimensions.height=item.icon.height,gradientDimensions.width=gradWidth-2*padding-labelDim.width/2,linearGradient.attr("x2","100%").attr("y1","0%"),legendGradCont.attr("transform","translate( ".concat(labelDim.width/2," 0)")),gradient_helper_renderAxis(context,legendContainer,gradHeight-item.icon.height-padding,gradWidth-2*padding-1),applyStyle(legendContainer,{height:"".concat(maxItemSpaces.height+border+padding,"px"),width:"".concat(Math.min(width,maxWidth),"px"),padding:"".concat(padding,"px")}),legendRect.attr("height",gradientDimensions.height),legendRect.attr("width",gradientDimensions.width-labelDim.width/2)):(gradientDimensions.height=gradHeight-2*padding-labelDim.height/2,gradientDimensions.width=item.icon.width,linearGradient.attr("x2","0%").attr("y1","100%"),legendGradCont.attr("transform","translate(0 ".concat(labelDim.height/2,")")),gradient_helper_renderAxis(context,legendContainer,gradHeight-2*padding-1,gradWidth-item.icon.width-2*padding),applyStyle(legendContainer,{height:"".concat(Math.min(height,maxHeight),"px"),width:"".concat(maxWidth,"px"),padding:"".concat(padding,"px")}),legendRect.attr("height",gradientDimensions.height-labelDim.height/2),legendRect.attr("width",gradientDimensions.width)),applyStyle(legendGradSvg,{height:"".concat(gradientDimensions.height,"px"),width:"".concat(gradientDimensions.width,"px")}),applyStyle(legendRect,{fill:"url(#linear-gradient)"}),legendGradSvg.attr("height",gradientDimensions.height),legendGradSvg.attr("width",gradientDimensions.width),context.measurement({gradientDimensions:gradientDimensions}),context._legendGradientSvg=legendGradSvg}(this,legendContainer),legendContainer.selectAll("div").style("float","left"),firebolt.mapActionsAndBehaviour(),firebolt.createSelectionSet(this.data().map(function(d){return d.id})),legendContainer}},{key:"getCriteriaFromData",value:function getCriteriaFromData(data){return[[this.fieldName()],[data.value]]}}],[{key:"create",value:function create(dependencies){return new GradientLegend(dependencies)}},{key:"type",value:function type(){return"gradient"}}]),GradientLegend}();function step_legend_typeof(obj){return(step_legend_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function step_legend_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}function step_legend_toConsumableArray(arr){return function step_legend_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);isteps[steps.length-1]&&(domainBounds.upper=["".concat(formatter.bounds.upper," ").concat(steps[steps.length-1])])):domainLeg=legend_helper_getInterpolatedData(domain,steps,scaleParams),domainLeg=(domainLeg=step_legend_toConsumableArray(new Set(domainLeg)).sort(function(a,b){return a-b})).map(function(ele,i){var _ref,value=null;return i0&&void 0!==arguments[0]?arguments[0]:{},registrableComponents=this._registrableComponents,mergedPolicy=mergeRecursive(mergeRecursive({},function defaultPolicy(registrableComponents){var aliases=registrableComponents.map(function(comp){return comp.alias()});return{behaviours:{"*":function _(propagationPayload){var propagationCanvas=propagationPayload.sourceCanvas;return!propagationCanvas||-1!==aliases.indexOf(propagationCanvas)}}}}(registrableComponents)),policy);return registrableComponents.forEach(function(canvas){canvas.firebolt().crossInteractionPolicy(mergedPolicy)}),this}}]),ActionModel}()),TITLE_CONFIG={position:"top",align:"left",padding:4,className:"".concat("muze","-title-container")},SUB_TITLE_CONFIG={position:"top",align:"left",padding:16,maxLines:2,className:"".concat("muze","-subtitle-container")},LAYOUT_ALIGN_LEFT="left";function canvas_local_options_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}var localOptions=(canvas_local_options_defineProperty(_localOptions={},"rows",{value:null,meta:{typeCheck:"constructor",typeExpected:"Array"}}),canvas_local_options_defineProperty(_localOptions,"columns",{value:null,meta:{typeCheck:"constructor",typeExpected:"Array"}}),canvas_local_options_defineProperty(_localOptions,"data",{value:null,meta:{typeCheck:function typeCheck(d){return d instanceof datamodel_default.a},sanitization:function sanitization(dm,prevDm){prevDm&&prevDm.dispose();var sanitizedDm=dm;return dm instanceof datamodel_default.a&&(sanitizedDm=dm.project(dm.getSchema().map(function(d){return d.name}))),sanitizedDm}}}),canvas_local_options_defineProperty(_localOptions,"color",{value:null,meta:{typeCheck:"constructor",typeExpected:"Object",sanitization:function sanitization(config){return"string"!=typeof config&&config?config:{field:config}}}}),canvas_local_options_defineProperty(_localOptions,"shape",{value:null,meta:{typeCheck:"constructor",typeExpected:"Object",sanitization:function sanitization(config){return"string"!=typeof config&&config?config:{field:config}}}}),canvas_local_options_defineProperty(_localOptions,"size",{value:null,meta:{typeCheck:"constructor",typeExpected:"Object",sanitization:function sanitization(config){return"string"!=typeof config&&config?config:{field:config}}}}),canvas_local_options_defineProperty(_localOptions,"detail",{value:[],meta:{typeCheck:"constructor",typeExpected:"Array"}}),canvas_local_options_defineProperty(_localOptions,"layers",{value:[],meta:{typeCheck:"constructor",typeExpected:"Array"}}),canvas_local_options_defineProperty(_localOptions,"transform",{value:null,meta:{typeCheck:"constructor",typeExpected:"Object"}}),_localOptions),canvasOptions=(canvas_local_options_defineProperty(_canvasOptions={},"title",{value:[null,null],meta:{typeCheck:["constructor","constructor"],typeExpected:["Function","Object"],spreadParams:!0,sanitization:[function(title){if("string"==typeof title||!title){return function t(){return title}}return title},function(titleConfig){var defConfig=mergeRecursive({},TITLE_CONFIG);return mergeRecursive(defConfig,titleConfig)}]}}),canvas_local_options_defineProperty(_canvasOptions,"subtitle",{value:[null,null],meta:{typeCheck:["constructor","constructor"],typeExpected:["Function","Object"],spreadParams:!0,sanitization:[function(subtitle){if("string"==typeof subtitle||!subtitle){return function sub(){return subtitle}}return subtitle},function(subtitleConfig){var defConfig=mergeRecursive({},SUB_TITLE_CONFIG);return mergeRecursive(defConfig,subtitleConfig)}]}}),_canvasOptions);function layoutComponent_defineProperties(target,props){for(var i=0;i2&&void 0!==arguments[2]&&arguments[2],isGridComponent=arguments.length>3&&void 0!==arguments[3]&&arguments[3],cut="",componentRatioWidth=1,leftHeight=0,leftWidth=0;if(!component)return{first:definitionModel,second:definitionModel};var _component$getLogical=component.getLogicalSpace(),componentHeight=_component$getLogical.height,componentWidth=_component$getLogical.width,position=component.position();"top"===position||"bottom"===position?(cut="h",componentRatioWidth=componentHeight/definitionModel.remainingHeight(),leftHeight=definitionModel.remainingHeight()-componentHeight,leftWidth=definitionModel.remainingWidth()):(cut="v",componentRatioWidth=componentWidth/definitionModel.remainingWidth(),leftWidth=definitionModel.remainingWidth()-componentWidth,leftHeight=definitionModel.remainingHeight()),leftOvercomponentRationWidth=1-componentRatioWidth,definitionModel.cut(cut);var firstLaneConfig={host:component.name(),cut:null,ratioWeight:componentRatioWidth,preferred:!isGridComponent&&isPreferred,lanes:[]},firstLane=new DefinitionModel(firstLaneConfig);firstLane.remainingHeight(componentHeight),firstLane.remainingWidth(componentWidth);var secondLane=new DefinitionModel({host:null,cut:null,ratioWeight:leftOvercomponentRationWidth,preferred:!isGridComponent&&!isPreferred,lanes:[]});return secondLane.remainingHeight(leftHeight),secondLane.remainingWidth(leftWidth),isPreferred?definitionModel.lanes([firstLane]):"top"===position||"left"===position?definitionModel.lanes([firstLane,secondLane]):definitionModel.lanes([secondLane,firstLane]),{first:firstLane,second:secondLane}}function tree_toConsumableArray(arr){return function tree_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);i0?matrix[0]:matrix[1];return isTransposed?(joinedMatrix=matrix[0].length>0?utils_toConsumableArray(matrix[0]):[],joinedMatrix=matrix[1].length>0?[].concat(utils_toConsumableArray(joinedMatrix),utils_toConsumableArray(matrix[1])):joinedMatrix):joinedMatrix=joinedMatrix.map(function(row,rowIndex){var rowData=[];return matrix[0].length>0&&(rowData=utils_toConsumableArray(matrix[0][rowIndex])),matrix[1].length>0&&(rowData=[].concat(utils_toConsumableArray(rowData),utils_toConsumableArray(matrix[1][rowIndex]))),rowData}),joinedMatrix},utils_computeLogicalSpace=function computeLogicalSpace(){var item=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},config=arguments.length>1?arguments[1]:void 0,maxMeasures=arguments.length>2?arguments[2]:void 0,_config$isTransposed=config.isTransposed,isTransposed=void 0!==_config$isTransposed&&_config$isTransposed,unitMeasures=config.unitMeasures,_getMeasureInfo=function getMeasureInfo(isTransposed){return isTransposed?{firstMeasure:enums_constants_HEIGHT,secondMeasure:"width"}:{firstMeasure:"width",secondMeasure:enums_constants_HEIGHT}}(isTransposed),firstMeasure=_getMeasureInfo.firstMeasure,secondMeasure=_getMeasureInfo.secondMeasure,values=item.values,minMeasures=function getMinMeasures(isTransposed,unitMeasures){return isTransposed?{height:0,width:unitMeasures.width}:{height:unitMeasures.height,width:0}}(isTransposed,unitMeasures);if(values[0].key){var _logicalSpace,logicalSpace=(utils_defineProperty(_logicalSpace={},firstMeasure,0),utils_defineProperty(_logicalSpace,secondMeasure,0),_logicalSpace);return values.forEach(function(valueItem){var space=computeLogicalSpace(valueItem,config,maxMeasures);logicalSpace[firstMeasure]=Math.max(logicalSpace[firstMeasure],space[firstMeasure],minMeasures[firstMeasure]),logicalSpace[secondMeasure]+=+space[secondMeasure]}),item.space=logicalSpace,logicalSpace}return function getLogicalSpace(item,measures,minMeasures){var _ref,maxMeasure=arguments.length>3&&void 0!==arguments[3]?arguments[3]:[],firstMeasure=measures.firstMeasure,secondMeasure=measures.secondMeasure,firstMeasureValue=0,secondMeasureValue=0;return item.values.forEach(function(valueArray){var _item$space,fMeasure=0,sMeasure=0;valueArray.forEach(function(placeholder,colIndex){placeholder.setAvailableSpace();var space=placeholder.getLogicalSpace(),minSecondMeasure=placeholder.getMinMeasures(minMeasures[secondMeasure]);sMeasure=Math.max(sMeasure,+space[secondMeasure],minSecondMeasure),maxMeasure[colIndex]=Math.max(maxMeasure[colIndex]||0,space[firstMeasure]),fMeasure+=+maxMeasure[colIndex]}),secondMeasureValue+=sMeasure,firstMeasureValue=Math.max(firstMeasureValue,fMeasure),item.space=(utils_defineProperty(_item$space={},secondMeasure,Math.ceil(secondMeasureValue)),utils_defineProperty(_item$space,firstMeasure,Math.ceil(firstMeasureValue)),_item$space)}),utils_defineProperty(_ref={},secondMeasure,secondMeasureValue),utils_defineProperty(_ref,firstMeasure,firstMeasureValue),_ref}(item,{firstMeasure:firstMeasure,secondMeasure:secondMeasure},minMeasures,maxMeasures)},createMatrixEachLevel=function createMatrixEachLevel(item,isTransposed){if(item.values[0].key){var arr=[];return item.values.forEach(function(child){isTransposed?createMatrixEachLevel(child,isTransposed).forEach(function(e,i){var _arr$i;arr[i]=arr[i]||[],(_arr$i=arr[i]).push.apply(_arr$i,utils_toConsumableArray(e))}):arr.push.apply(arr,utils_toConsumableArray(createMatrixEachLevel(child,isTransposed)))}),item.matrix=arr,arr}return item.matrix=isTransposed?item.values[0].map(function(col,colIndex){return item.values.map(function(row){return row[colIndex]})}):item.values,item.matrix},extraCellsRemover=function extraCellsRemover(arr,beg,end){return arr.slice(beg,-end)},visual_matrix_props_PROPS={config:{sanitization:function sanitization(context,value){return mergeRecursive(context._config||{},value)}},maxMeasures:{},availableSpace:{},logicalSpace:{}},visual_matrix_default_config_defaultConfig={distribution:[],classPrefix:"muze",isDistributionEqual:!0,unitMeasures:{height:100,width:100,border:1},isTransposed:!1,facet:"primary",extraCellLengths:[]};function visual_matrix_defineProperties(target,props){for(var i=0;i1&&void 0!==arguments[1]?arguments[1]:{};!function visual_matrix_classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}(this,VisualMatrix),this._lastLevelKey=0,this._primaryMatrix=matrix[0]||[],this._secondaryMatrix=matrix[1]||[],this._maxMeasures=[],this._availableSpace={},generateGetterSetters(this,visual_matrix_props_PROPS);var defCon=Object.assign({},this.constructor.defaultConfig());this.config(mergeRecursive(defCon,config)),this._layoutMatrix=combineMatrices([matrix[0]||[],matrix[1]||[]],this.config())}return function visual_matrix_createClass(Constructor,protoProps,staticProps){return protoProps&&visual_matrix_defineProperties(Constructor.prototype,protoProps),staticProps&&visual_matrix_defineProperties(Constructor,staticProps),Constructor}(VisualMatrix,[{key:"computeLogicalSpace",value:function computeLogicalSpace(){throw new Error(ERROR_MSG.INTERFACE_IMPL)}},{key:"computeViewableSpaces",value:function computeViewableSpaces(){throw new Error(ERROR_MSG.INTERFACE_IMPL)}},{key:"removeExtraCells",value:function removeExtraCells(){throw new Error(ERROR_MSG.INTERFACE_IMPL)}},{key:"getPriorityDistribution",value:function getPriorityDistribution(){throw new Error(ERROR_MSG.INTERFACE_IMPL)}},{key:"calculateDepth",value:function calculateDepth(){throw new Error(ERROR_MSG.INTERFACE_IMPL)}},{key:"redistributeSpaces",value:function redistributeSpaces(){throw new Error(ERROR_MSG.INTERFACE_IMPL)}},{key:"redistributeViewSpaces",value:function redistributeViewSpaces(){throw new Error(ERROR_MSG.INTERFACE_IMPL)}},{key:"getCellDimensions",value:function getCellDimensions(){throw new Error(ERROR_MSG.INTERFACE_IMPL)}},{key:"primaryMatrix",value:function primaryMatrix(){return arguments.length?this:this._primaryMatrix}},{key:"secondaryMatrix",value:function secondaryMatrix(){return arguments.length?this:this._secondaryMatrix}},{key:"tree",value:function tree(){return arguments.length?this:this._tree}},{key:"createTree",value:function createTree(){var _createTree2=function createTree(context){var matrixTree={},lastLevelKey=0,facet="primary",nestFn=utils_nest(),keys=[],layoutMatrix=context._layoutMatrix,primaryMatrix=context.primaryMatrix(),secondaryMatrix=context.secondaryMatrix(),_context$config=context.config(),isTransposed=_context$config.isTransposed,breakPage=_context$config.breakPage;if(isTransposed){if(facet=0===primaryMatrix.length?"primary":0===secondaryMatrix.length?"secondary":primaryMatrix.length>=secondaryMatrix.length?"primary":"secondary",primaryMatrix.length>0){for(var _i2=0;_i20){for(var primaryMatrixLength=primaryMatrix.length,_i3=secondaryMatrix.length-1;_i3>0;_i3--)keys.push(_i3+primaryMatrixLength);keys.push(primaryMatrixLength),"primary"===facet&&(lastLevelKey=primaryMatrixLength)}var newMatrix;keys.forEach(function(key){var counter=-1;return nestFn.key(function(d){return counter++,"".concat(d[key].valueOf(),"-").concat(findInPage(counter,breakPage))})}),newMatrix=layoutMatrix[0].map(function(col,colIndex){return layoutMatrix.map(function(row){return row[colIndex]})}),matrixTree=nestFn.entries(newMatrix)}else{if(facet=0===primaryMatrix.length?"primary":0===secondaryMatrix.length?"secondary":primaryMatrix.length>=secondaryMatrix.length?"primary":"secondary",primaryMatrix.length>0){for(var i=0;i0){for(var keyLength=primaryMatrix.length>0?primaryMatrix[0].length:0,_i=secondaryMatrix[0].length-1;_i>0;_i--)keys.push(_i+keyLength);keys.push(keyLength),"primary"===facet&&(lastLevelKey=keyLength)}else lastLevelKey=primaryMatrix.length>0?primaryMatrix[0].length-1:0;keys.forEach(function(key){var counter=-1;return nestFn.key(function(d){return counter++,"".concat(d[key].valueOf(),"-").concat(findInPage(counter,breakPage))})}),matrixTree=nestFn.entries(layoutMatrix)}return{tree:matrixTree,lastLevelKey:lastLevelKey}}(this),tree=_createTree2.tree,lastLevelKey=_createTree2.lastLevelKey;return this._lastLevelKey=lastLevelKey,tree}},{key:"getLogicalSpace",value:function getLogicalSpace(){return this.logicalSpace()}},{key:"setAvailableSpace",value:function setAvailableSpace(width,height){this.availableSpace({width:width,height:height});var tree=this.tree(),heightMeasures=this.populateMaxMeasures(enums_constants_HEIGHT,tree),widthMeasures=this.populateMaxMeasures("width",tree),depth=this.calculateDepth(widthMeasures,heightMeasures);return this.viewableMatrix=this.createViewPortMatrix(depth),this.viewableMeasures=this.redistributeSpaces(width,height),this}},{key:"populateMaxMeasures",value:function populateMaxMeasures(type,matrixTree){var _this=this,depth=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0,measures=arguments.length>3&&void 0!==arguments[3]?arguments[3]:[];if(measures[depth]=Math.max(measures[depth]||0,matrixTree.space[type]),matrixTree.values){var childDepth=depth+1;matrixTree.values.forEach(function(child){child.space&&(measures=_this.populateMaxMeasures(type,child,childDepth,measures))})}return measures}},{key:"getViewableSpaces",value:function getViewableSpaces(){return this.viewableMeasures}},{key:"getViewableMatrices",value:function getViewableMatrices(){return this.viewableMatrix}},{key:"createViewPortMatrix",value:function createViewPortMatrix(depth){var arr=[];return function createMatrixInstances(){var arr=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],depth=arguments.length>1?arguments[1]:void 0,matrixInfo=arguments.length>2?arguments[2]:void 0,layout=arguments.length>3?arguments[3]:void 0,breakPointer=layout._breakPointer,isTransposed=layout.config().isTransposed,tree=matrixInfo.tree,layoutMatrix=matrixInfo.layoutMatrix;if(0===depth){var brokenMatrix=function breakMatrix(matrix,isTransposed,breakPointer){var primaryMatrix=[],secondaryMatrix=[];return isTransposed?matrix.forEach(function(row,rowIndex){rowIndex>=breakPointer?secondaryMatrix.push(row):primaryMatrix.push(row)}):matrix.forEach(function(row,rowIndex){row.forEach(function(column,columnIndex){columnIndex>=breakPointer?(secondaryMatrix[rowIndex]=secondaryMatrix[rowIndex]||[],secondaryMatrix[rowIndex].push(column)):(primaryMatrix[rowIndex]=primaryMatrix[rowIndex]||[],primaryMatrix[rowIndex].push(column))})}),[primaryMatrix,secondaryMatrix]}(tree.matrix,isTransposed,breakPointer);return arr.push({matrix:tree.matrix,primaryMatrix:brokenMatrix[0],secondaryMatrix:brokenMatrix[1],space:tree.space}),arr}var nextLevel=depth-1;return tree.values.forEach(function(e){createMatrixInstances(arr,nextLevel,{tree:e,layoutMatrix:layoutMatrix},layout)}),arr}(arr,depth,this.removeExtraCells(),this),arr}}],[{key:"defaultConfig",value:function defaultConfig(){return visual_matrix_default_config_defaultConfig}}]),VisualMatrix}();function row_matrix_typeof(obj){return(row_matrix_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function row_matrix_defineProperties(target,props){for(var i=0;i1&&void 0!==arguments[1]?arguments[1]:{};return function row_matrix_classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}(this,RowVisualMatrix),(_this=row_matrix_possibleConstructorReturn(this,row_matrix_getPrototypeOf(RowVisualMatrix).call(this,matrix,config)))._breakPointer=matrix[0].length>0?matrix[0][0].length:0,_this._layoutMatrix=combineMatrices([matrix[0]||[],matrix[1]||[]],_this.config()),_this._tree={key:ROW_ROOT,values:_this.createTree()},_this._logicalSpace=_this.computeLogicalSpace(),_this}return function row_matrix_inherits(subClass,superClass){if("function"!=typeof superClass&&null!==superClass)throw new TypeError("Super expression must either be null or a function");subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:!0,configurable:!0}}),superClass&&row_matrix_setPrototypeOf(subClass,superClass)}(RowVisualMatrix,visual_matrix_VisualMatrix),function row_matrix_createClass(Constructor,protoProps,staticProps){return protoProps&&row_matrix_defineProperties(Constructor.prototype,protoProps),staticProps&&row_matrix_defineProperties(Constructor,staticProps),Constructor}(RowVisualMatrix,[{key:"computeLogicalSpace",value:function computeLogicalSpace(){var matrixTree=this.tree();return createMatrixEachLevel(matrixTree,!1),utils_computeLogicalSpace(matrixTree,this.config(),this.maxMeasures())}},{key:"computeViewableSpaces",value:function computeViewableSpaces(measures){var _this2=this,maxHeights=measures.maxHeights,maxWidths=measures.maxWidths,height=measures.height;return this.viewableMatrix.map(function(matrixInst,i){var cellDimOptions={matrixInst:matrixInst,maxWidths:maxWidths,maxHeights:maxHeights,matrixIndex:i},_this2$getCellDimensi=_this2.getCellDimensions(cellDimOptions),widths=_this2$getCellDimensi.widths,rowHeights=_this2$getCellDimensi.rowHeights,columnWidths=_this2$getCellDimensi.columnWidths,heightMeasures=[height,height],columnMeasures=widths;return{rowHeights:{primary:rowHeights[0],secondary:rowHeights[1]},columnWidths:{primary:columnWidths[0],secondary:columnWidths[1]},height:{primary:heightMeasures[0],secondary:heightMeasures[1]},width:{primary:columnMeasures[0],secondary:columnMeasures[1]}}})}},{key:"removeExtraCells",value:function removeExtraCells(){var _this$config=this.config(),isTransposed=_this$config.isTransposed,extraCellLengths=_this$config.extraCellLengths,matrix=this._layoutMatrix,tree=mergeRecursive({},this.tree()),begCellLen=extraCellLengths[0],endCellLen=extraCellLengths[1]||Number.NEGATIVE_INFINITY,layoutMatrix=isTransposed?matrix.slice(0).map(function(e){return extraCellsRemover(e,begCellLen,endCellLen)}):extraCellsRemover(matrix,begCellLen,endCellLen);return tree.values=extraCellsRemover(tree.values,begCellLen,endCellLen),tree.matrix=extraCellsRemover(tree.matrix,begCellLen,endCellLen),{tree:tree,layoutMatrix:layoutMatrix}}},{key:"getPriorityDistribution",value:function getPriorityDistribution(measures){var remainingAvailWidth,remainingWidth,cWidths=[],conditions=[],maxPrioritySpace=0,matrix=measures.matrix,availableWidth=measures.width,maxWidths=measures.maxMeasures,currentWidth=measures.maxWidth,height=measures.height,priority=this.config().priority,primaryMatrixLength=this.primaryMatrix().length?this.primaryMatrix()[0].length:0,dist=[];remainingAvailWidth=availableWidth,remainingWidth=currentWidth,(conditions=2===priority?[primaryMatrixLength-1,primaryMatrixLength]:0===priority?[primaryMatrixLength-1]:[primaryMatrixLength]).forEach(function(i){dist[i]=maxWidths[i],maxPrioritySpace+=maxWidths[i],remainingAvailWidth-=dist[i],remainingWidth-=dist[i]}),matrix[0].forEach(function(e,i){-1===conditions.indexOf(i)&&(dist[i]=remainingAvailWidth*(maxWidths[i]/remainingWidth))}),matrix.forEach(function(row){return row.forEach(function(col,cIdx){-1===conditions.indexOf(cIdx)?(col.setAvailableSpace(dist[cIdx],height),cWidths[cIdx]=Math.max(cWidths[cIdx]||0,Math.floor(col.getLogicalSpace().width))):cWidths[cIdx]=0})});var prioritySpace=availableWidth-cWidths.reduce(function(t,n){return t+n});return prioritySpace<0?cWidths=cWidths.map(function(){return 0}):conditions.forEach(function(i){cWidths[i]=Math.floor(prioritySpace*(dist[i]/maxPrioritySpace||1))}),cWidths}},{key:"calculateDepth",value:function calculateDepth(widthMeasures,heightMeasures){var i,height=this.availableSpace().height;for(i=0;i0?logicalWidths:maxMeasures.map(function(){return 0}),rHeights=function getDistributedHeight(context){var heightWithoutGutter,distSum=0,gutterSum=0,isTransposed=context.isTransposed,distribution=context.distribution,availableHeight=context.availableHeight,height=context.height,isDistributionEqual=context.isDistributionEqual,gutter=context.gutter,matrix=context.matrix,cIdx=context.cIdx;distribution&&void 0!==distribution[0]&&(distSum=distribution.reduce(function(t,n){return t+=n})),gutter&&void 0!==gutter[0]&&(gutterSum=gutter.reduce(function(t,n){return t+=n})),heightWithoutGutter=availableHeight-Math.floor(availableHeight*gutterSum);var colLen=matrix.length;return matrix.map(function(row,rIdx){var space=row[cIdx].getLogicalSpace().height,distHeight=space+space/height*(heightWithoutGutter-height);return isTransposed||(distribution.length>0&&colLen===distribution.length?distHeight=heightWithoutGutter*distribution[rIdx]/distSum:(isDistributionEqual||0===context.height)&&(distHeight=heightWithoutGutter/colLen)),Math.floor(distHeight)})}({matrix:matrix,cIdx:this._lastLevelKey,height:mHeight,availableHeight:height,isDistributionEqual:isDistributionEqual,distribution:distribution,isTransposed:isTransposed,gutter:gutter}),maxWidths.length>0&&(cWidths=cWidths.map(function(e,i){return Math.max(e,maxWidths[0][i]||0)})),maxWidths.push(cWidths);for(var x=0;x=breakPointer&&(columnWidths[1][cIdx-breakPointer]=colWidth,widths[1]=(widths[1]||0)+colWidth),cIdx===_this4._lastLevelKey&&(rowHeights[0][rIdx]=colHeight,rowHeights[1][rIdx]=colHeight)})}),{heights:[0,0],widths:widths,rowHeights:rowHeights,columnWidths:columnWidths}}}]),RowVisualMatrix}();function column_matrix_typeof(obj){return(column_matrix_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function column_matrix_defineProperties(target,props){for(var i=0;i1&&void 0!==arguments[1]?arguments[1]:{};return function column_matrix_classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}(this,ColumnVisualMatrix),(_this=column_matrix_possibleConstructorReturn(this,column_matrix_getPrototypeOf(ColumnVisualMatrix).call(this,matrix,config)))._breakPointer=matrix[0].length,_this._tree={key:COLUMN_ROOT,values:_this.createTree()},_this._logicalSpace=_this.computeLogicalSpace(),_this}return function column_matrix_inherits(subClass,superClass){if("function"!=typeof superClass&&null!==superClass)throw new TypeError("Super expression must either be null or a function");subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:!0,configurable:!0}}),superClass&&column_matrix_setPrototypeOf(subClass,superClass)}(ColumnVisualMatrix,visual_matrix_VisualMatrix),function column_matrix_createClass(Constructor,protoProps,staticProps){return protoProps&&column_matrix_defineProperties(Constructor.prototype,protoProps),staticProps&&column_matrix_defineProperties(Constructor,staticProps),Constructor}(ColumnVisualMatrix,[{key:"computeLogicalSpace",value:function computeLogicalSpace(){var matrixTree=this.tree();return createMatrixEachLevel(matrixTree,!0),utils_computeLogicalSpace(matrixTree,this.config(),this.maxMeasures())}},{key:"computeViewableSpaces",value:function computeViewableSpaces(measures){var _this2=this,maxHeights=measures.maxHeights,maxWidths=measures.maxWidths,height=measures.height,width=measures.width;return this.viewableMatrix.map(function(matrixInst,i){var cellDimOptions={matrixInst:matrixInst,maxWidths:maxWidths,maxHeights:maxHeights,matrixIndex:i,height:height},_this2$getCellDimensi=_this2.getCellDimensions(cellDimOptions),heights=_this2$getCellDimensi.heights,rowHeights=_this2$getCellDimensi.rowHeights,columnWidths=_this2$getCellDimensi.columnWidths,heightMeasures=heights,columnMeasures=[width,width];return{rowHeights:{primary:rowHeights[0],secondary:rowHeights[1]},columnWidths:{primary:columnWidths[0],secondary:columnWidths[1]},height:{primary:heightMeasures[0],secondary:heightMeasures[1]},width:{primary:columnMeasures[0],secondary:columnMeasures[1]}}})}},{key:"removeExtraCells",value:function removeExtraCells(){var _this$config=this.config(),isTransposed=_this$config.isTransposed,extraCellLengths=_this$config.extraCellLengths,matrix=this._layoutMatrix,tree=mergeRecursive({},this.tree()),begCellLen=extraCellLengths[0],endCellLen=extraCellLengths[1]||Number.NEGATIVE_INFINITY,layoutMatrix=isTransposed?matrix.slice(0).map(function(e){return extraCellsRemover(e,begCellLen,endCellLen)}):extraCellsRemover(matrix,begCellLen,endCellLen);return tree.values=extraCellsRemover(tree.values,begCellLen,endCellLen),tree.matrix=tree.matrix.map(function(e){return extraCellsRemover(e,begCellLen,endCellLen)}),{tree:tree,layoutMatrix:layoutMatrix}}},{key:"getPriorityDistribution",value:function getPriorityDistribution(measures){var height=measures.height,maxHeights=measures.maxHeights,remainingHeight=height,heightDist=[],conditions=[],divider=2,priority=this.config().priority,primaryMatrixLength=this.primaryMatrix().length;return 2===priority?(conditions=[primaryMatrixLength-1,primaryMatrixLength],divider=2):(conditions=0===priority?[primaryMatrixLength-1]:[primaryMatrixLength],divider=1),maxHeights.forEach(function(heights,index){-1===conditions.indexOf(index)&&(heightDist[index]=heights,remainingHeight-=heights)}),remainingHeight<0?heightDist=heightDist.map(function(){return 0}):conditions.forEach(function(condition){heightDist[condition]=Math.min(maxHeights[condition],remainingHeight/divider)}),heightDist}},{key:"calculateDepth",value:function calculateDepth(widthMeasures){var j,width=this.availableSpace().width;for(j=0;j0)distWidth=availableWidth*distribution[colIndex]/distSum;else if(isDistributionEqual||0===width){var rowLen=row.length;distWidth=availableWidth/rowLen}return Math.floor(distWidth)})}({row:matrix[this._lastLevelKey],width:mWidth,availableWidth:width},this.config());matrix.forEach(function(row,rIdx){return row.forEach(function(col,cIdx){var oldLogicalSpace=col.getLogicalSpace();col.setAvailableSpace(cWidths[cIdx]-borderWidth,oldLogicalSpace.height),rHeights[rIdx]=Math.max(rHeights[rIdx]||0,Math.floor(col.getLogicalSpace().height))})}),maxHeights.length>0&&(rHeights=rHeights.map(function(e,i){return Math.max(e,maxHeights[0][i])})),maxHeights.push(rHeights);for(var x=0;x=breakPointer&&(rowHeights[1][rIdx-breakPointer]=colHeight,heights[1]=(heights[1]||0)+colHeight),rIdx===_this4._lastLevelKey&&(columnWidths[0][cIdx]=colWidth,columnWidths[1][cIdx]=colWidth)})}),{heights:heights,widths:[0,0],rowHeights:rowHeights,columnWidths:columnWidths}}}]),ColumnVisualMatrix}();function layout_helper_toConsumableArray(arr){return function layout_helper_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);imaxMeasure&&layout.scrollInfo(computations_defineProperty({},scrollType,!0)),Math.max(maxMeasure,actualMeasure)}}(layout,paginationDetailsMap[matrixType],relatedMaxMeasure,buffer)},computations_getMatrixHeightDetails=function getMatrixHeightDetails(layout,columnMatrixWidth){var height=layout.measurement().height,buffer=layout.config().buffer,_getHeightRequiredByC=function getHeightRequiredByColMatrix(layout,columnMatrixWidth){var height=layout.measurement().height,columnMatrix=layout.columnMatrix(),maxColumnMatrixHeight=Math.min(columnMatrix.getLogicalSpace().height,height/2);columnMatrix.setAvailableSpace(columnMatrixWidth,maxColumnMatrixHeight);var columnViewSpace=columnMatrix.getViewableSpaces()[layout.config().columnPointer];return{columnMatrixHeight:columnViewSpace.height.primary+columnViewSpace.height.secondary,maxColumnMatrixHeight:maxColumnMatrixHeight}}(layout,columnMatrixWidth),columnMatrixHeight=_getHeightRequiredByC.columnMatrixHeight,maxColumnMatrixHeight=_getHeightRequiredByC.maxColumnMatrixHeight,maxHeightAvailableForRowMatrix=height-Math.min(maxColumnMatrixHeight,columnMatrixHeight);return{columnMatrixHeight:columnMatrixHeight,maxColumnMatrixHeight:maxColumnMatrixHeight,rowMatrixHeight:paginationMeasureGetter(layout,"row",maxHeightAvailableForRowMatrix,buffer),maxHeightAvailableForRowMatrix:maxHeightAvailableForRowMatrix}},bufferCondition={isScroll:!0,pagination:"scroll"},computations_getActualBufferFromConfig=function getActualBufferFromConfig(layout){var buffer=layout.config().buffer,_map2=computations_slicedToArray([enums_constants_HORIZONTAL,enums_constants_VERTICAL].map(function(type){return function getBufferFromCondition(layout,type){var scrollInfo=layout.scrollInfo(),currentBufferType={pagination:layout.config().pagination,isScroll:scrollInfo[type]};return Object.keys(bufferCondition).every(function(e){return bufferCondition[e]===currentBufferType[e]})}(layout,type)?buffer:0}),2);return{horizontalBuffer:_map2[0],verticalBuffer:_map2[1]}},computations_computeLayoutMeasurements=function computeLayoutMeasurements(layout){var rowMatrix=layout.rowMatrix(),columnMatrix=layout.columnMatrix(),_getMatrixWidthDetail=function getMatrixWidthDetails(layout){var rowMatrix=layout.rowMatrix(),width=layout.measurement().width,_layout$config3=layout.config(),border=_layout$config3.border,buffer=_layout$config3.buffer,borderWidth=border.width,rowMatrixWidth=getMatrixMeasurement(rowMatrix,"width"),maxRowMatrixWidth=Math.min(rowMatrixWidth+buffer,width/2),maxWidthAvailableForColumnMatrix=width-maxRowMatrixWidth-borderWidth;return{rowMatrixWidth:rowMatrixWidth,maxRowMatrixWidth:maxRowMatrixWidth,columnMatrixWidth:paginationMeasureGetter(layout,"column",maxWidthAvailableForColumnMatrix,0),maxWidthAvailableForColumnMatrix:maxWidthAvailableForColumnMatrix}}(layout),rowMatrixWidth=_getMatrixWidthDetail.rowMatrixWidth,maxRowMatrixWidth=_getMatrixWidthDetail.maxRowMatrixWidth,maxWidthAvailableForColumnMatrix=_getMatrixWidthDetail.maxWidthAvailableForColumnMatrix,columnMatrixWidth=_getMatrixWidthDetail.columnMatrixWidth,_getMatrixHeightDetai=computations_getMatrixHeightDetails(layout,columnMatrixWidth),columnMatrixHeight=_getMatrixHeightDetai.columnMatrixHeight,rowMatrixHeight=_getMatrixHeightDetai.rowMatrixHeight,maxHeightAvailableForRowMatrix=_getMatrixHeightDetai.maxHeightAvailableForRowMatrix,_getActualBufferFromC=computations_getActualBufferFromConfig(layout),horizontalBuffer=_getActualBufferFromC.horizontalBuffer,verticalBuffer=_getActualBufferFromC.verticalBuffer;rowMatrix.setAvailableSpace(maxRowMatrixWidth-verticalBuffer,rowMatrixHeight-horizontalBuffer);var rowViewableSpaces=rowMatrix.getViewableSpaces(),columnViewableSpaces=columnMatrix.getViewableSpaces();return setViewSpaces(layout,"row",rowViewableSpaces),setViewSpaces(layout,"column",columnViewableSpaces),function setValueMatrixMeasurements(layout,rowViewableSpaces,columnViewableSpaces){var _ref,_ref2,_ref3,_ref4,_ref5,centerMatrix=layout.centerMatrix(),border=layout.config().border,matrices=layout.matrices(),top=matrices.top,bottom=matrices.bottom,borderWidth=border.width,rowHeights=(_ref=[]).concat.apply(_ref,computations_toConsumableArray(rowViewableSpaces.map(function(e){return e.rowHeights.primary}))),rowWidthsPrimary=(_ref2=[]).concat.apply(_ref2,computations_toConsumableArray(rowViewableSpaces.map(function(e){return e.columnWidths.primary}))),rowWidthsSecondary=(_ref3=[]).concat.apply(_ref3,computations_toConsumableArray(rowViewableSpaces.map(function(e){return e.columnWidths.secondary}))),columnWidths=(_ref4=[]).concat.apply(_ref4,computations_toConsumableArray(columnViewableSpaces.map(function(e){return e.columnWidths.primary}))),columnHeightsPrimary=columnViewableSpaces[0].rowHeights.primary,columnHeightsSecondary=(_ref5=[]).concat.apply(_ref5,computations_toConsumableArray(columnViewableSpaces.map(function(e){return e.rowHeights.secondary})));centerMatrix.forEach(function(matrix,rIdx){matrix.forEach(function(placeholder,cIdx){placeholder.setAvailableSpace(columnWidths[cIdx]-borderWidth,rowHeights[rIdx]-borderWidth)})}),computations_setAvailableSpace(top[0],rowWidthsPrimary,columnHeightsPrimary),computations_setAvailableSpace(top[2],rowWidthsSecondary,columnHeightsPrimary),computations_setAvailableSpace(bottom[0],rowWidthsPrimary,columnHeightsSecondary),computations_setAvailableSpace(bottom[2],rowWidthsSecondary,columnHeightsSecondary)}(layout,rowViewableSpaces,columnViewableSpaces),{rowMatrixHeight:rowMatrixHeight-horizontalBuffer,rowMatrixWidth:rowMatrixWidth-verticalBuffer,maxHeightAvailableForRowMatrix:maxHeightAvailableForRowMatrix-horizontalBuffer,columnMatrixHeight:columnMatrixHeight,columnMatrixWidth:columnMatrixWidth,maxWidthAvailableForColumnMatrix:maxWidthAvailableForColumnMatrix}},measureSum=function measureSum(measureArr){return measureArr.reduce(function(total,measure){return total+measure},0)};function layout_typeof(obj){return(layout_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function layout_defineProperties(target,props){for(var i=0;i0&&(leftMatrix=[].concat(layout_helper_toConsumableArray(topLeft),layout_helper_toConsumableArray(leftRows),layout_helper_toConsumableArray(bottomLeft))),rightRows.length>0&&(rightMatrix=[].concat(layout_helper_toConsumableArray(topRight),layout_helper_toConsumableArray(rightRows),layout_helper_toConsumableArray(bottomRight))),topColumns.length>0&&topColumns[0].length>0&&(topMatrix=topColumns.map(function(d,i){return[].concat(layout_helper_toConsumableArray(topLeft[i]),layout_helper_toConsumableArray(d),layout_helper_toConsumableArray(topRight[i]))})),bottomColumns.length>0&&bottomColumns[0].length>0&&(bottomMatrix=bottomColumns.map(function(d,i){return[].concat(layout_helper_toConsumableArray(bottomLeft[i]),layout_helper_toConsumableArray(d),layout_helper_toConsumableArray(bottomRight[i]))})),context.rowMatrix(new row_matrix_RowVisualMatrix([leftMatrix,rightMatrix],{isDistributionEqual:isRowSizeEqual,distribution:distribution.rows,gutter:gutterSpace.rows,unitMeasures:{width:minUnitWidth,height:minUnitHeight,border:border.width},priority:priority.row,breakPage:breakPage.rows.map(function(e){return e+Math.max(topLeft.length,topRight.length)}),extraCellLengths:[topLeft.length,bottomLeft.length]})),begColCells=topLeft.length>0?topLeft[0].length:bottomLeft.length>0?bottomLeft[0].length:0,endColCells=topRight.length>0?topRight[0].length:bottomRight.length>0?bottomRight[0].length:0,context.columnMatrix(new column_matrix_ColumnVisualMatrix([topMatrix,bottomMatrix],{isDistributionEqual:isColumnSizeEqual,distribution:distribution.columns,gutter:gutterSpace.columns,isTransposed:!0,unitMeasures:{width:minUnitWidth,height:minUnitHeight,border:border.width},priority:priority.col,breakPage:breakPage.columns,extraCellLengths:[begColCells,endColCells]})),context.centerMatrix(valueMatrix),matrices}(this,_matrices),this):layout_get(layout_getPrototypeOf(GridLayout.prototype),"matrices",this).call(this,_matrices)}},{key:"triggerReflow",value:function triggerReflow(){this.scrollInfo({horizontal:!1,vertical:!1});var _computeLayoutMeasure=computations_computeLayoutMeasurements(this),maxHeightAvailableForRowMatrix=_computeLayoutMeasure.maxHeightAvailableForRowMatrix,maxWidthAvailableForColumnMatrix=_computeLayoutMeasure.maxWidthAvailableForColumnMatrix;return this.setViewInformation(maxHeightAvailableForRowMatrix,maxWidthAvailableForColumnMatrix),this}},{key:"gotoPage",value:function gotoPage(type,pageNumber){var pageType=type.toLowerCase(),totalPages=this.viewInfo().viewMatricesInfo["".concat(pageType,"Pages")],pointer=Math.min(Math.max(1,pageNumber),totalPages);return this.config(function layout_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}({},"".concat(pageType,"Pointer"),pointer-1)),this.setViewInformation(),this.renderGrid(),this}},{key:"pages",value:function pages(type){var viewMatricesInfo=this.viewInfo().viewMatricesInfo,pageType=type.toLowerCase();return{totalPages:viewMatricesInfo["".concat(pageType,"Pages")],currentPage:this.config()["".concat(pageType,"Pointer")]+1}}},{key:"viewInfo",value:function viewInfo(){return arguments.length?(this._viewInfo=arguments.length<=0?void 0:arguments[0],this):this._viewInfo}},{key:"scrollInfo",value:function scrollInfo(){return arguments.length?(this._scrollInfo=mergeRecursive(this._scrollInfo,arguments.length<=0?void 0:arguments[0]),this):this._scrollInfo}},{key:"setViewInformation",value:function setViewInformation(maxRowHeight,maxColWidth){var _this$config2=this.config(),rowPointer=_this$config2.rowPointer,columnPointer=_this$config2.columnPointer,border=_this$config2.border,viewMatricesInfo=function getViewMatrices(layout,rowPointer,columnPointer){for(var rowMatrix=layout.rowMatrix(),columnMatrix=layout.columnMatrix(),centerMatrix=layout.centerMatrix(),matrices=layout.matrices(),rowMatrices=rowMatrix.getViewableMatrices(),columnMatrices=columnMatrix.getViewableMatrices(),centralMatrixPointer={row:0,column:0},i=rowPointer-1;i>=0;i--){var length=Math.max(rowMatrices[i].primaryMatrix.length,rowMatrices[i].secondaryMatrix.length);centralMatrixPointer.row+=length}for(var _i=columnPointer-1;_i>=0;_i--){var matrix=columnMatrices[_i],primaryMatrix=matrix.primaryMatrix,secondaryMatrix=matrix.secondaryMatrix,_length=Math.max(primaryMatrix[0]?primaryMatrix[0].length:0,secondaryMatrix[0]?secondaryMatrix[0].length:0);centralMatrixPointer.column+=_length}matrices.top[1]=columnMatrices[columnPointer].primaryMatrix,matrices.bottom[1]=columnMatrices[columnPointer].secondaryMatrix,matrices.center[0]=rowMatrices[rowPointer].primaryMatrix,matrices.center[2]=rowMatrices[rowPointer].secondaryMatrix;var rowMatrixLen=Math.max(matrices.center[0].length,matrices.center[2].length),columnMatrixLen=Math.max(matrices.top[1][0]?matrices.top[1][0].length:0,matrices.bottom[1][0]?matrices.bottom[1][0].length:0);return matrices.center[1]=centerMatrix.slice(centralMatrixPointer.row,centralMatrixPointer.row+rowMatrixLen).map(function(matrix){return matrix.slice(centralMatrixPointer.column,centralMatrixPointer.column+columnMatrixLen)}),{matrices:matrices,rowPages:rowMatrices.length,columnPages:columnMatrices.length}}(this,rowPointer,columnPointer),layoutDimensions=function getViewMeasurements(layout,maxRowHeight,maxColWidth){var rowMatrix=layout.rowMatrix(),columnMatrix=layout.columnMatrix(),_layout$config=layout.config(),columnPointer=_layout$config.columnPointer,rowPointer=_layout$config.rowPointer,rowSpaces=rowMatrix.getViewableSpaces()[rowPointer],colSpaces=columnMatrix.getViewableSpaces()[columnPointer],rowHeights=rowSpaces.rowHeights,rowMatrixWidth=rowSpaces.width,columnWidths=colSpaces.columnWidths,columnMatrixHeight=colSpaces.height,leftWidth=rowMatrixWidth.primary,rightWidth=rowMatrixWidth.secondary,topHeight=columnMatrixHeight.primary,bottomHeight=columnMatrixHeight.secondary,centerHeight=measureSum(rowHeights.primary),centerWidth=measureSum(columnWidths.primary),viewWidth=[leftWidth,Math.min(centerWidth,maxColWidth),rightWidth],viewHeight=[topHeight,Math.min(centerHeight,maxRowHeight),bottomHeight];return{viewWidth:viewWidth,viewHeight:viewHeight,actualCenterMeasures:{height:centerHeight,width:centerWidth},totalMeasures:{width:measureSum(viewWidth),height:measureSum(viewHeight)},unitHeights:rowHeights,unitWidths:columnWidths}}(this,maxRowHeight,maxColWidth);return layoutDimensions.border=border,this.viewInfo({viewMatricesInfo:viewMatricesInfo,layoutDimensions:layoutDimensions}),this}}],[{key:"defaultViewInfo",value:function defaultViewInfo(){return Object.assign({},{layoutDimensions:{border:this.defaultConfig().border,viewHeight:[0,0,0],viewWidth:[0,0,0]},viewMatricesInfo:{columnPages:0,rowPages:0,matrices:{top:[],center:[],bottom:[]}}})}},{key:"defaultMeasurement",value:function defaultMeasurement(){return DEFAULT_MEASUREMENTS}},{key:"defaultConfig",value:function defaultConfig(){return DEFAULT_CONFIGURATION}},{key:"create",value:function create(){return new GridLayout(null,null,this.defaultMeasurement(),this.defaultConfig())}}]),GridLayout}();function border_helper_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}var _matrixSpanGeneratorM,_spanApplierMap,borderMap=(border_helper_defineProperty(_borderMap={},"".concat("top","-").concat("left"),null),border_helper_defineProperty(_borderMap,"".concat("top","-").concat("middle"),"column"),border_helper_defineProperty(_borderMap,"".concat("top","-").concat("right"),null),border_helper_defineProperty(_borderMap,"".concat("center","-").concat("left"),"row"),border_helper_defineProperty(_borderMap,"".concat("center","-").concat("middle"),"center"),border_helper_defineProperty(_borderMap,"".concat("center","-").concat("right"),"row"),border_helper_defineProperty(_borderMap,"".concat("bottom","-").concat("left"),null),border_helper_defineProperty(_borderMap,"".concat("bottom","-").concat("middle"),"column"),border_helper_defineProperty(_borderMap,"".concat("bottom","-").concat("right"),null),_borderMap),border_helper_specificBorderApplier=function specificBorderApplier(borderTypes,showBorders,cells,borderInfo){var color=borderInfo.color,width=borderInfo.width,style=borderInfo.style,borderStyle="".concat(width,"px ").concat(style);borderTypes.forEach(function(borderType){!function applySpecificBorder(cells,color,type,style){cells.style("border-".concat(type),"".concat(style," ").concat(color))}(cells,showBorders[borderType]?color:"rgba(0,0,0,0)",borderType,borderStyle)})},border_helper_applyBorders=function applyBorders(cells,border,row,column){var borderApplierFn=function borderApplier(cells,borderInfo){var showRowBorders=borderInfo.showRowBorders,showColBorders=borderInfo.showColBorders,showValueBorders=borderInfo.showValueBorders;return{row:function row(){return border_helper_specificBorderApplier(["top","bottom"],showRowBorders,cells,borderInfo)},column:function column(){return border_helper_specificBorderApplier(["left","right"],showColBorders,cells,borderInfo)},center:function center(){return border_helper_specificBorderApplier(["left","right","top","bottom"],showValueBorders,cells,borderInfo)}}}(cells,border),borderMapVal=borderMap["".concat(ROW_MATRIX_INDEX[VIEW_INDEX[row]],"-").concat(COLUMN_MATRIX_INDEX[column])];borderMapVal&&borderApplierFn[borderMapVal]()};function span_maker_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}var orderMaker=function orderMaker(arr){return Array.from(Array(arr.length).keys())},nestByStack=function nestByStack(stack,updateArr){var optionalParams=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},order=optionalParams.order,keyFn=optionalParams.keyFn,arr=updateArr.slice(),currStack=stack.slice(),prevStack=currStack.slice();if(order=order||Array.from(Array(arr.length).keys()),keyFn=keyFn||function(v){return v},0===currStack.length){var _newArr=[];return order.forEach(function(e){_newArr.push(arr[e])}),{prevStack:prevStack,currStack:arr,arr:_newArr}}for(var arrVal="",stackVal="",newArr=[],i=order.length-1;i>=0;i--){var currElemIndex=order[i];if((arrVal+=keyFn(arr[currElemIndex]))===(stackVal+=keyFn(currStack[currElemIndex])))newArr[currElemIndex]=null;else{stackVal="";for(var j=i;j0&&void 0!==arguments[0]?arguments[0]:1,placeholder=arguments.length>1?arguments[1]:void 0,config=arguments.length>2?arguments[2]:void 0,index=arguments.length>3?arguments[3]:void 0,height=placeholder.availHeight(),width=placeholder.availWidth(),borderWidth=config.border.width,unitWidths=config.dimensions.unitWidths,col=index.col;return span_maker_defineProperty(_ref={},"rowSpan",function(){placeholder.setAvailableSpace(width,height*span)}),span_maker_defineProperty(_ref,"colSpan",function(){if(span>1){for(var cumulativeWidth=0,i=col;i0&&void 0!==arguments[0]?arguments[0]:0}},{key:"type",get:function get(){return"simple"}}],[{key:"defaultConfig",value:function defaultConfig(){return{}}}]),SimpleCell}();function enums_defaults_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}var visual_cell_src_props_PROPS,enums_defaults_DEFAULT_CONFIG=(enums_defaults_defineProperty(_DEFAULT_CONFIG={},"margin",(enums_defaults_defineProperty(_CONSTANTS$MARGIN={},visual_cell_src_enums_constants_LEFT,0),enums_defaults_defineProperty(_CONSTANTS$MARGIN,visual_cell_src_enums_constants_RIGHT,0),enums_defaults_defineProperty(_CONSTANTS$MARGIN,visual_cell_src_enums_constants_TOP,0),enums_defaults_defineProperty(_CONSTANTS$MARGIN,visual_cell_src_enums_constants_BOTTOM,0),_CONSTANTS$MARGIN)),enums_defaults_defineProperty(_DEFAULT_CONFIG,"spaceFixer",2),enums_defaults_defineProperty(_DEFAULT_CONFIG,"isOffset",!1),enums_defaults_defineProperty(_DEFAULT_CONFIG,"verticalAlign",null),enums_defaults_defineProperty(_DEFAULT_CONFIG,"textAlign","center"),enums_defaults_defineProperty(_DEFAULT_CONFIG,"show",!0),enums_defaults_defineProperty(_DEFAULT_CONFIG,"maxLines",0),enums_defaults_defineProperty(_DEFAULT_CONFIG,"minCharacters",0),enums_defaults_defineProperty(_DEFAULT_CONFIG,"rotation",null),_DEFAULT_CONFIG);function src_props_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}var DEFAULT_PROPS={mount:{},availHeight:{},availWidth:{},config:{sanitization:function sanitization(context,value){return mergeRecursive(context._config,value)}},logicalSpace:{},minSpacing:{},source:{}},packages_visual_cell_src_props_PROPS=(src_props_defineProperty(visual_cell_src_props_PROPS={},GEOM,mergeRecursive({data:{},caption:{},config:{},axes:{},facetByFields:{},fields:{},transform:{},layerDef:{},detailFields:{}},DEFAULT_PROPS)),src_props_defineProperty(visual_cell_src_props_PROPS,cell_type_TEXT,mergeRecursive({smartText:{}},DEFAULT_PROPS)),src_props_defineProperty(visual_cell_src_props_PROPS,cell_type_AXIS,DEFAULT_PROPS),src_props_defineProperty(visual_cell_src_props_PROPS,BLANK,DEFAULT_PROPS),visual_cell_src_props_PROPS);function axis_cell_typeof(obj){return(axis_cell_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function axis_cell_defineProperties(target,props){for(var i=0;i(availWidth||0)&&maxLines&&(space.height=space.oriTextHeight*maxLines),availWidth&&availWidth":">",'"':""","'":"'","/":"/"};return"".concat(str).replace(/[&<>"'/]/g,function(match){return htmlEscapes[match]})}(rawContent()):rawContent()},createHeading=function createHeading(config,type,labelManager,prevCell){return config?function headerCreator(config,cellType,labelManager,prevCell){var margin={},content=config.content,classPrefix=config.classPrefix,maxLines=config.maxLines,cell=prevCell||new src_text_cell({type:"title"===cellType?"header":"text",className:"".concat(classPrefix,"-").concat(cellType,"-cell")},{labelManager:labelManager}).config({maxLines:maxLines}).minSpacing({width:0,height:0});return cell.source(content),cell._minTickDiff={height:0,width:0},margin=config.position===src_constants_TOP?{top:0,bottom:config.padding}:{top:config.padding,bottom:0},cell.config({margin:margin}),{height:cell.getLogicalSpace().height,cell:cell}}(config,type,labelManager,prevCell):""},legend_maker_legendInitializer=function legendInitializer(legendConfig,canvas,measurement,prevLegends){var legends=[],height=measurement.height,width=measurement.width,headerHeight=measurement.headerHeight,position=legendConfig.position,align=legendConfig.align,legendInfo=function legendCreator(canvas){var LegendCls,dataset=[],axes=canvas.getRetinalAxes();return Object.entries(axes).forEach(function(axisInfo){var scale=axisInfo[1][0],scaleType=axisInfo[0],scaleProps=canvas[scaleType]();if(scaleProps.field&&scale){var _scale$config=scale.config(),type=_scale$config.type,step=_scale$config.step,stepMapper="boolean"==typeof step&&step;LegendCls=LEGEND_TYPE_MAP["".concat(type,"-").concat(stepMapper,"-").concat(scaleType)],dataset.push({scale:scale,canvas:canvas,fieldName:scaleProps.field,title:retrieveFieldDisplayName(canvas.data(),scaleProps.field),LegendCls:LegendCls,scaleType:scaleType})}}),dataset}(canvas),invalidValues=canvas.config().invalidValues,parser=getValueParser(invalidValues);return legendInfo.forEach(function(dataInfo,index){var legend={},legendMeasures={},LegendCls=dataInfo.LegendCls,scale=dataInfo.scale,fieldName=dataInfo.fieldName,titleText=dataInfo.title,scaleType=dataInfo.scaleType,config=legendConfig[scaleType]||{},title=config.title||{};title.text=title.text||titleText,config.show&&(config.position=position,config.align=align,legend=prevLegends[index]?prevLegends[index].legend:LegendCls.create({labelManager:canvas._dependencies.smartlabel,cells:{AxisCell:axis_cell,TextCell:src_text_cell}}),legendMeasures.maxHeight="vertical"===align?height-headerHeight:.2*height,legendMeasures.maxWidth="horizontal"===align?width:.2*width,legendMeasures.width=Math.min(legendMeasures.maxWidth,config.width),legendMeasures.height=Math.min(legendMeasures.maxHeight,config.height),[PADDING,BORDER,MARGIN].forEach(function(e){legendMeasures[e]=config[e]}),legend.scale(scale).valueParser(parser).title(title).fieldName(fieldName).config(config).metaData(canvas.composition().visualGroup.getGroupByData().project([fieldName])).measurement(legendMeasures).canvasAlias(canvas.alias()).setLegendMeasures(),legends.push({canvas:canvas,legend:legend,scaleType:scaleType}))}),legends};function muze_chart_component_typeof(obj){return(muze_chart_component_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function muze_chart_component_defineProperties(target,props){for(var i=0;icurrHeight?(sections++,currWidth=0,currHeight=legHeight):sections<0&§ions++,sectionComponents[sections]=sectionComponents[sections]||[],currHeight-=Math.min(leg.measurement().height,currHeight),currWidth=Math.max(Math.min(leg.measurement().width,leg.measurement().maxWidth),currWidth),sectionComponents[sections].push({legend:leg,legendHeight:legHeight,legendWidth:currWidth})});var mount=makeElement(legendMount,["div"],sectionComponents,"".concat(classPrefix,"-legend-section"));mount.classed("".concat(classPrefix,"-legend-vertical-section"),!0).style("width",function(d){return"".concat(d[0].legendWidth,"px")}),makeElement(mount,["div"],function(d){return d},"".concat(classPrefix,"-legend-components"),{},function(d){return d.legend.id()}).each(function(d){d.legend.mount(this)}).style("width",function(d){return"".concat(d.legendWidth,"px")})}else{var _mount=makeElement(legendMount,"div",[1],"".concat(classPrefix,"-legend-section"));_mount.classed("".concat(classPrefix,"-legend-horizontal-section"),!0),_mount.classed("".concat(classPrefix,"-legend-section-",0),!0).style("width","".concat(legWidth,"px")),makeElement(_mount,"div",this.components,"".concat(classPrefix,"-legend-components"),{},function(d){return d.legend.id()}).each(function(d){d.legend.mount(this)}).style("width",function(d){return"".concat(d.legend.measurement().width,"px")})}}},{key:"draw",value:function draw(container){this.renderLegend(container||document.getElementById(this.renderAt()))}},{key:"updateWrapper",value:function updateWrapper(params){return this.name(params.name),this.boundBox(params.config.measurement.legendSpace),this.setParams(params),this}},{key:"setParams",value:function setParams(params){this.components=params.component,this.params=params,this.target(params.config.target),this.position(params.config.position);var _defaultAlignmentHelp=function defaultAlignmentHelper(position){var alignment=null,alignWith="".concat(ROW_MATRIX_INDEX[1],"-").concat(COLUMN_MATRIX_INDEX[1]);switch(position){case src_constants_TOP:case src_constants_BOTTOM:alignment=HORIZONTAL_CENTER;break;case src_constants_LEFT:case src_constants_RIGHT:alignment=VERTICAL_CENTER;break;default:alignment=VERTICAL_CENTER}return{alignment:alignment,alignWith:alignWith}}(params.config.position),alignWith=_defaultAlignmentHelp.alignWith,alignment=_defaultAlignmentHelp.alignment;this.className(params.config.className),this.alignWith(params.config.alignWith||alignWith),this.alignment(params.config.alignment||alignment)}}]),LegendComponent}(),helper_d3Drag=(__webpack_require__(25),renderer_utils_getD3Drag()),arrowSizeMap={left:"width",right:"width",top:"height",bottom:"height"},getUnitPositions=function getUnitPositions(unitMeasures,totalLength,viewLength){var currentLen=0;return(unitMeasures.primary&&unitMeasures.primary.length?unitMeasures.primary:unitMeasures.secondary).map(function(e){var unitPosition=100*currentLen/(totalLength-viewLength);return currentLen+=e,unitPosition})},helper_createScrollBarArrow=function createScrollBarArrow(mount,type,config){var classPrefix=config.classPrefix,thickness=config.thickness,arrow=makeElement(mount,"div",[type],"".concat(classPrefix,"-scroll-arrow-").concat(type));return arrow.classed("".concat(classPrefix,"-scroll-arrow"),!0),arrow.style(arrowSizeMap[type],"".concat(thickness,"px")),makeElement(arrow,"div",[1],"".concat(classPrefix,"-scroll-arrow-chevron")).attr("id","".concat(classPrefix,"-scroll-arrow-chevron-").concat(type)),arrow},helper_createScrollBarRect=function createScrollBarRect(mount,config){var classPrefix=config.classPrefix,rect=makeElement(mount,"div",[1],"".concat(classPrefix,"-scroll-rect"));return{rect:rect,mover:makeElement(rect,"div",[1],"".concat(classPrefix,"-scroll-mover"))}},applyScrollMouseDownAction=function applyScrollMouseDownAction(moverRect,scrollMaker,speed){var mover=moverRect.mover,rect=moverRect.rect,_mover$node$getBoundi=mover.node().getBoundingClientRect(),x=_mover$node$getBoundi.x,y=_mover$node$getBoundi.y,_rect$node$getBoundin=rect.node().getBoundingClientRect(),rectX=_rect$node$getBoundin.x,rectY=_rect$node$getBoundin.y;scrollMaker.changeMoverPosition({x:x-rectX+speed,y:y-rectY+speed})},helper_registerListenerOnArrow=function registerListenerOnArrow(scrollMaker,moverRect,arrowType,speed){var timer="",arrow=scrollMaker._components[arrowType],isTouchDevice=hasTouch();arrow.on(isTouchDevice?"touchstart":"mousedown",function(){renderer_utils_getEvent().preventDefault(),timer=setInterval(function(){applyScrollMouseDownAction(moverRect,scrollMaker,speed)},100)}).on(isTouchDevice?"touchend":"mouseup",function(){renderer_utils_getEvent().preventDefault(),clearInterval(timer)}).on("click",function(){applyScrollMouseDownAction(moverRect,scrollMaker,speed)})},scroll_bar_maker_helper_registerListeners=function registerListeners(scrollMaker){var moverRect=scrollMaker._components.moverRect,speed=scrollMaker.config().speed;helper_registerListenerOnArrow(scrollMaker,moverRect,"prevArrow",-speed),function applyMoverDrag(scrollMaker,moverRect){var startPos={},moverStartPos=0,rectStartPos=0,endPos={},mover=moverRect.mover,rect=moverRect.rect;mover.call(helper_d3Drag().on("start",function(){var event=renderer_utils_getEvent();moverStartPos=mover.node().getBoundingClientRect(),rectStartPos=rect.node().getBoundingClientRect(),startPos={x:event.x,y:event.y}}).on("drag",function(){var event=renderer_utils_getEvent(),window=getWindow(),distanceMoved_x=(endPos={x:event.x,y:event.y}).x-startPos.x,distanceMoved_y=endPos.y-startPos.y,actualPosition={x:moverStartPos.x+distanceMoved_x-rectStartPos.x+window.pageXOffset,y:moverStartPos.y+distanceMoved_y-rectStartPos.y+window.pageYOffset};scrollMaker.changeMoverPosition(actualPosition)}))}(scrollMaker,moverRect),function applyRectClick(scrollMaker,moverRect){moverRect.rect.on("click",function(){var event=renderer_utils_getEvent();scrollMaker.emptyScrollAreaClick(event)})}(scrollMaker,moverRect),helper_registerListenerOnArrow(scrollMaker,moverRect,"nextArrow",speed)},scroll_bar_maker_props_PROPS={config:{sanitization:function sanitization(context,value){return value=mergeRecursive(context._config,value)}},manager:{},unitPositions:{},logicalSpace:{}};function scroll_maker_defineProperties(target,props){for(var i=0;i1&&void 0!==arguments[1]?arguments[1]:this.logicalSpace(),config=this.config(),scrollBarContainer=horizontal_scroll_maker_get(horizontal_scroll_maker_getPrototypeOf(HorizontalScrollMaker.prototype),"createScroll",this).call(this,mountPoint,config,dimensions).scrollBarContainer,prevArrow=helper_createScrollBarArrow(scrollBarContainer,"left",config),moverRect=helper_createScrollBarRect(scrollBarContainer,config),nextArrow=helper_createScrollBarArrow(scrollBarContainer,"right",config),mover=moverRect.mover,rect=moverRect.rect,_this$logicalSpace=this.logicalSpace(),height=_this$logicalSpace.height,width=_this$logicalSpace.width,totalLength=_this$logicalSpace.totalLength,viewLength=_this$logicalSpace.viewLength,unitWidths=_this$logicalSpace.unitWidths,scrollBarWithouArrowLength=width-2*height;rect.style("width","".concat(dimensions.width-2*height,"px")),rect.style("height","".concat(100,"%")),mover.style("width","".concat(viewLength*scrollBarWithouArrowLength/totalLength,"px")),mover.style("height","".concat(100,"%")),mover.style(src_constants_LEFT,"".concat(0,"px")),this._components={prevArrow:prevArrow,nextArrow:nextArrow,moverRect:moverRect,scrollBarContainer:scrollBarContainer},this._scrollBarWithouArrowLength=scrollBarWithouArrowLength,this.unitPositions(getUnitPositions(unitWidths,totalLength,viewLength)),this.registerListeners()}},{key:"emptyScrollAreaClick",value:function emptyScrollAreaClick(event){var _this$_components$mov=this._components.moverRect,mover=_this$_components$mov.mover,rect=_this$_components$mov.rect,speed=this.config().speed,_mover$node$getBoundi=mover.node().getBoundingClientRect(),x=_mover$node$getBoundi.x,y=_mover$node$getBoundi.y,_rect$node$getBoundin=rect.node().getBoundingClientRect(),rectX=_rect$node$getBoundin.x,rectY=_rect$node$getBoundin.y,positionAdjuster=10*speed;event.xrectStartPos.width?rectStartPos.width-moverPos.width:newPosition.x,mover.style(src_constants_LEFT,"".concat(currentPos,"px"));var movedViewLength=currentPos*totalLength/this._scrollBarWithouArrowLength;this.manager().performAttachedScrollFunction(this.constructor.type(),movedViewLength)}},{key:"scrollDeltaTo",value:function scrollDeltaTo(delta){var _this$_components$mov3=this._components.moverRect,mover=_this$_components$mov3.mover,rect=_this$_components$mov3.rect,moverPos=mover.node().getBoundingClientRect(),rectStartPos=rect.node().getBoundingClientRect();return this.changeMoverPosition({y:0,x:moverPos.x-rectStartPos.x-delta}),this}},{key:"scrollTo",value:function scrollTo(scrollPercentage){var moverPos=this._components.moverRect.mover.node().getBoundingClientRect(),movement=scrollPercentage*(this._scrollBarWithouArrowLength-moverPos.width)/100;return this.changeMoverPosition({y:0,x:movement}),this}}],[{key:"type",value:function type(){return"horizontal"}}]),HorizontalScrollMaker}(),vertical:function(_ScrollMaker){function VerticalScrollMaker(){return function vertical_scroll_maker_classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}(this,VerticalScrollMaker),vertical_scroll_maker_possibleConstructorReturn(this,vertical_scroll_maker_getPrototypeOf(VerticalScrollMaker).apply(this,arguments))}return function vertical_scroll_maker_inherits(subClass,superClass){if("function"!=typeof superClass&&null!==superClass)throw new TypeError("Super expression must either be null or a function");subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:!0,configurable:!0}}),superClass&&vertical_scroll_maker_setPrototypeOf(subClass,superClass)}(VerticalScrollMaker,scroll_maker_ScrollMaker),function vertical_scroll_maker_createClass(Constructor,protoProps,staticProps){return protoProps&&vertical_scroll_maker_defineProperties(Constructor.prototype,protoProps),staticProps&&vertical_scroll_maker_defineProperties(Constructor,staticProps),Constructor}(VerticalScrollMaker,[{key:"createScroll",value:function createScroll(mountPoint){var dimensions=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.logicalSpace(),config=this.config(),scrollBarContainer=vertical_scroll_maker_get(vertical_scroll_maker_getPrototypeOf(VerticalScrollMaker.prototype),"createScroll",this).call(this,mountPoint,dimensions).scrollBarContainer,prevArrow=helper_createScrollBarArrow(scrollBarContainer,"top",config),moverRect=helper_createScrollBarRect(scrollBarContainer,config),nextArrow=helper_createScrollBarArrow(scrollBarContainer,"bottom",config),mover=moverRect.mover,rect=moverRect.rect,_this$logicalSpace=this.logicalSpace(),height=_this$logicalSpace.height,width=_this$logicalSpace.width,totalLength=_this$logicalSpace.totalLength,viewLength=_this$logicalSpace.viewLength,unitHeights=_this$logicalSpace.unitHeights,scrollBarWithouArrowLength=height-2*width;rect.style("height","".concat(scrollBarWithouArrowLength,"px")),rect.style("width","".concat(100,"%")),mover.style("width","".concat(100,"%")),mover.style("height","".concat(viewLength*scrollBarWithouArrowLength/totalLength,"px")),mover.style(src_constants_TOP,"".concat(0,"px")),this._components={prevArrow:prevArrow,nextArrow:nextArrow,moverRect:moverRect,scrollBarContainer:scrollBarContainer},this._scrollBarWithouArrowLength=scrollBarWithouArrowLength,this.unitPositions(getUnitPositions(unitHeights,totalLength,viewLength)),this.registerListeners()}},{key:"emptyScrollAreaClick",value:function emptyScrollAreaClick(event){var _this$_components$mov=this._components.moverRect,mover=_this$_components$mov.mover,rect=_this$_components$mov.rect,speed=this.config().speed,_mover$node$getBoundi=mover.node().getBoundingClientRect(),x=_mover$node$getBoundi.x,y=_mover$node$getBoundi.y,_rect$node$getBoundin=rect.node().getBoundingClientRect(),rectX=_rect$node$getBoundin.x,rectY=_rect$node$getBoundin.y,positionAdjuster=10*speed;event.yrectStartPos.height?rectStartPos.height-moverPos.height:newPosition.y,mover.style(src_constants_TOP,"".concat(currentPos,"px"));var movedViewLength=currentPos*totalLength/this._scrollBarWithouArrowLength;this.manager().performAttachedScrollFunction(this.constructor.type(),movedViewLength)}},{key:"scrollDeltaTo",value:function scrollDeltaTo(delta){var _this$_components$mov3=this._components.moverRect,mover=_this$_components$mov3.mover,rect=_this$_components$mov3.rect,moverPos=mover.node().getBoundingClientRect(),rectStartPos=rect.node().getBoundingClientRect();return this.changeMoverPosition({y:moverPos.y-rectStartPos.y-delta,x:0}),this}},{key:"scrollTo",value:function scrollTo(scrollPercentage){var moverPos=this._components.moverRect.mover.node().getBoundingClientRect(),movement=scrollPercentage*(this._scrollBarWithouArrowLength-moverPos.height)/100;return this.changeMoverPosition({x:0,y:movement}),this}}],[{key:"type",value:function type(){return"vertical"}}]),VerticalScrollMaker}()},ScrollComponent=function(_MuzeComponent){function ScrollComponent(params){var _this;!function scroll_component_classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}(this,ScrollComponent);var ScrollMaker=scrollMakerMap[params.config.type];return params.component=new ScrollMaker,params.component.config(params.config.scrollBarComponentConfig),params.component.logicalSpace(params.dimensions),(_this=scroll_component_possibleConstructorReturn(this,scroll_component_getPrototypeOf(ScrollComponent).call(this,params.name,params.component.getLogicalSpace(),0))).setParams(params),_this}return function scroll_component_inherits(subClass,superClass){if("function"!=typeof superClass&&null!==superClass)throw new TypeError("Super expression must either be null or a function");subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:!0,configurable:!0}}),superClass&&scroll_component_setPrototypeOf(subClass,superClass)}(ScrollComponent,MuzeComponent),function scroll_component_createClass(Constructor,protoProps,staticProps){return protoProps&&scroll_component_defineProperties(Constructor.prototype,protoProps),staticProps&&scroll_component_defineProperties(Constructor,staticProps),Constructor}(ScrollComponent,[{key:"manager",value:function manager(){return arguments.length?(this.component.manager(arguments.length<=0?void 0:arguments[0]),this):this.component.manager()}},{key:"scrollDeltaTo",value:function scrollDeltaTo(delta){return this.component.scrollDeltaTo(delta),this}},{key:"scrollTo",value:function scrollTo(scrollPercentage){return this.component.scrollTo(scrollPercentage),this}},{key:"scrollToUnitIndex",value:function scrollToUnitIndex(unitIndex){var unitPositions=this.component.unitPositions(),sanitizedUnitIndex=Math.min(Math.max(0,unitIndex),unitPositions.length-1);return this.component.scrollTo(unitPositions[sanitizedUnitIndex]),this}},{key:"getScrollPositionsForUnits",value:function getScrollPositionsForUnits(){return this.component.unitPositions()}},{key:"draw",value:function draw(container){return this.component.createScroll(container||document.getElementById(this.renderAt())),this}},{key:"attachScrollAction",value:function attachScrollAction(externalAction){return this.component.attachScrollAction(externalAction),this}},{key:"detachScrollAction",value:function detachScrollAction(){return this.component.detachScrollAction(),this}},{key:"updateWrapper",value:function updateWrapper(params){return this.name(params.name),this.component.config(params.config.scrollBarComponentConfig),this.component.logicalSpace(params.dimensions),this.boundBox(this.component.getLogicalSpace()),this.setParams(params),this}},{key:"setParams",value:function setParams(params){this.component=params.component||this.component,this.params=params,this.target(params.config.target),this.position(params.config.position),this.className(params.config.className),this.alignWith(params.config.alignWith),this.alignment(params.config.alignment)}},{key:"remove",value:function remove(){this.component.remove()}}]),ScrollComponent}();function matrix_component_typeof(obj){return(matrix_component_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function matrix_component_defineProperties(target,props){for(var i=0;iMath.abs(wheelDeltaY)&&_this2.scrollBarManager().triggerScrollBarAction("horizontal",wheelDeltaX/30),0!==wheelDeltaY&&Math.abs(wheelDeltaX)0?heightAttr:height,minHeight),availableWidthForCanvas=Math.max(widthAttr>0?widthAttr:width,minWidth),_createHeaders=function createHeaders(context,canvasHeight,canvasWidth){var headerHeight=0,headers={},subtitle=context.subtitle(),isSubtitle=title_maker_resolveTitleSubTitleContent(subtitle[0]);return canvasHeight>=200&&canvasWidth>=200&&["title","subtitle"].forEach(function(type){var headerOptions=context[type](),content=title_maker_resolveTitleSubTitleContent(headerOptions[0]);if(content){var config=headerOptions[1];config.width=context.width(),config.height=context.height(),config.classPrefix=context.config().classPrefix,config.content=content,config.padding="title"!==type||isSubtitle.length?config.padding:subtitle[1].padding;var _createHeading=createHeading(config,type,context.dependencies().smartlabel,context["".concat(type,"Cell")]),height=_createHeading.height,cell=_createHeading.cell;headers["".concat(type,"Cell")]=cell,context._composition[type]=cell,headerHeight+=height}}),{headerHeight:headerHeight,headers:headers}}(context,availableHeightForCanvas,availableWidthForCanvas),headers=_createHeaders.headers,headerHeight=_createHeaders.headerHeight,legends=function createLegend(context,headerHeight,height,width){var measurement={height:height,width:width,headerHeight:headerHeight},legend=context.config().legend,show=legend.show,position=legend.position;legend.classPrefix=context.config().classPrefix;var align=position===src_constants_LEFT||position===src_constants_RIGHT?"vertical":"horizontal";return legend.show=show?"vertical"===align&&width>200||"horizontal"===align&&height>200:show,legend.align=align,legend_maker_legendInitializer(legend,context,measurement,context.legends||[])}(context,headerHeight,availableHeightForCanvas,availableWidthForCanvas);context._composition.legend={},legends.forEach(function(e){context._composition.legend[e.scaleType]=e.legend});var legendSpace=function getLegendSpace(legends,legendConfig,availableHeight,availableWidth){var legendSpace={width:0,height:0};return legends.map(function(legendInfo){return legendInfo.legend.measurement()}).forEach(function(space){var height,width;width=Math.min(space.width,space.maxWidth),height=Math.min(space.height,space.maxHeight),"horizontal"===legendConfig.align?legendSpace.width+width>availableWidth?(legendSpace.width=availableWidth,legendSpace.height+=height):(legendSpace.width+=width,legendSpace.height=Math.max(legendSpace.height,height)):legendSpace.height+height>availableHeight?(legendSpace.height=height,legendSpace.width+=width):(legendSpace.height+=height,legendSpace.width=Math.max(legendSpace.width,width))}),"horizontal"===legendConfig.align&&(legendSpace.width=availableWidth),legendSpace}(legends,legend,availableHeightForCanvas,availableWidthForCanvas),legendWidth=legendPosition===src_constants_LEFT||legendPosition===src_constants_RIGHT?legendSpace.width:0,legendHeight=legendPosition===src_constants_TOP||legendPosition===src_constants_BOTTOM?legendSpace.height:0,components={headers:headers,legends:legends,canvases:[context],rows:rows,columns:columns,values:values,cornerMatrices:visGroup.cornerMatrices()},measurement={mountSpace:{height:height,width:width},headerHeight:headerHeight,legendSpace:legendSpace,canvasWidth:availableWidthForCanvas,canvasHeight:availableHeightForCanvas,width:availableWidthForCanvas-legendWidth,height:availableHeightForCanvas-headerHeight-legendHeight,minUnitHeight:context.minUnitHeight(),minUnitWidth:context.minUnitWidth()};return{layoutConfig:layoutConfig=mergeRecursive(layoutConfig,{classPrefix:classPrefix,showHeaders:showHeaders,border:mergeRecursive(visGroup.metaData().border,context.config().border),layoutArrangement:layoutArrangement,legend:legend,buffer:scrollBar.thickness,pagination:pagination,title:titleConfig,subtitle:subtitleConfig,isColumnSizeEqual:isColumnSizeEqual,isRowSizeEqual:isRowSizeEqual,mount:mount,priority:priority}),components:components,measurement:measurement}},componentIndexes={title:0,subtitle:1,legend:2,verticalScrollBar:3,horizontalScrollBar:4,grid:5},componentNames={0:"title",1:"subtitle",2:"legend",3:"verticalScrollBar",4:"horizontalScrollBar",5:"grid"},layout_maker_renderLayout=function renderLayout(canvas,renderDetails){var layoutManager=canvas._layoutManager,gridLayout=canvas.layout(),grid=componentIndexes.grid,compWrappers=component_wrapper_maker_componentWrapperMaker(layoutManager,gridLayout,renderDetails),componentWrappers=Object.keys(componentIndexes).map(function(e){return compWrappers[e]}),gridWrapper=componentWrappers[grid];!function createScrollManager(componentWrappers,canvas){var verticalScrollBar=componentIndexes.verticalScrollBar,grid=componentIndexes.grid,horizontalScrollWrapper=componentWrappers[componentIndexes.horizontalScrollBar],verticalScrollWrapper=componentWrappers[verticalScrollBar],gridWrapper=componentWrappers[grid],scrollBarManager=new ScrollManager,scrollBarComponents={};verticalScrollWrapper&&(scrollBarComponents.vertical=verticalScrollWrapper),horizontalScrollWrapper&&(scrollBarComponents.horizontal=horizontalScrollWrapper),scrollBarManager.scrollBarComponents(scrollBarComponents).attachedComponents({grid:gridWrapper}),canvas.composition().hScrollBar=horizontalScrollWrapper,canvas.composition().vScrollBar=verticalScrollWrapper,[horizontalScrollWrapper,verticalScrollWrapper].forEach(function(wrapper){wrapper&&wrapper.manager(scrollBarManager)}),gridWrapper.scrollBarManager(scrollBarManager)}(componentWrappers,canvas),componentWrappers.forEach(function(componentWrapper,index){if(null===componentWrapper){var deleteElementName=componentNames[index],component=layoutManager.getComponent(deleteElementName),deleteElementId=component?component.renderAt():null;layoutManager.removeComponent(deleteElementId)}}),layoutManager.registerComponents(componentWrappers).compute(),gridWrapper.attachScrollListener()};function group_firebolt_typeof(obj){return(group_firebolt_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function group_firebolt_defineProperties(target,props){for(var i=0;i","\"","'","/","createHeading","prevCell","cellType","_minTickDiff","legendInitializer","legendConfig","prevLegends","legends","headerHeight","legendInfo","legendCreator","LegendCls","dataset","scaleProps","_scale$config","stepMapper","dataInfo","legendMeasures","getGroupByData","setLegendMeasures","MuzeComponent","_this$boundBox","HeaderComponent","headerComponent_classCallCheck","headerComponent_possibleConstructorReturn","headerComponent_getPrototypeOf","setParams","cont","renderHeader","LegendComponent","legendComponent_classCallCheck","legendComponent_possibleConstructorReturn","legendComponent_getPrototypeOf","legendSpace","sectionComponents","_this$params$config","legendMount","legWidth","legHeight","sections","currHeight","currWidth","leg","legendHeight","legendWidth","renderLegend","_defaultAlignmentHelp","defaultAlignmentHelper","arrowSizeMap","getUnitPositions","totalLength","viewLength","currentLen","unitPosition","createScrollBarArrow","createScrollBarRect","mover","applyScrollMouseDownAction","moverRect","scrollMaker","_mover$node$getBoundi","_rect$node$getBoundin","rectX","rectY","changeMoverPosition","registerListenerOnArrow","arrowType","_components","isTouchDevice","applyMoverDrag","moverStartPos","rectStartPos","distanceMoved","actualPosition","pageXOffset","pageYOffset","applyRectClick","emptyScrollAreaClick","manager","unitPositions","ScrollMaker","scroll_maker_classCallCheck","_attachedScrollAction","_unitPositions","scroll_maker_createClass","scrollTo","scrollDeltaTo","createScroll","scrollBarContainer","scrollContainerHelper","attachScrollAction","externalScrollAction","detachScrollAction","scrollMakerMap","_ScrollMaker","HorizontalScrollMaker","horizontal_scroll_maker_classCallCheck","horizontal_scroll_maker_possibleConstructorReturn","horizontal_scroll_maker_getPrototypeOf","horizontal_scroll_maker_inherits","horizontal_scroll_maker_createClass","horizontal_scroll_maker_get","prevArrow","nextArrow","_this$logicalSpace","scrollBarWithouArrowLength","_scrollBarWithouArrowLength","_this$_components$mov","positionAdjuster","newPosition","currentPos","_this$_components$mov2","moverPos","movedViewLength","performAttachedScrollFunction","delta","_this$_components$mov3","scrollPercentage","movement","VerticalScrollMaker","vertical_scroll_maker_classCallCheck","vertical_scroll_maker_possibleConstructorReturn","vertical_scroll_maker_getPrototypeOf","vertical_scroll_maker_inherits","vertical_scroll_maker_createClass","vertical_scroll_maker_get","ScrollComponent","scroll_component_classCallCheck","scrollBarComponentConfig","scroll_component_possibleConstructorReturn","scroll_component_getPrototypeOf","unitIndex","sanitizedUnitIndex","externalAction","MatrixComponent","matrix_component_classCallCheck","matrix_component_possibleConstructorReturn","matrix_component_getPrototypeOf","_this$params$config$s","containerForMatrix","applyScroll","_cellSpanMaker","cellSpanMaker","_matrixSpanGenerator","renderTable","applySpans","applier","renderPlaceholders","renderMatrix","applyScrollAction","scollDistance","GridComponent","grid_component_classCallCheck","grid_component_possibleConstructorReturn","grid_component_getPrototypeOf","_this$component$viewI","matrixDim","matrixName","updateWrapper","matrixWrapper","allComponents","_scrollBarManager","wheelDeltaX","wheelDeltaY","scrollBarManager","triggerScrollBarAction","movedView","scrollActionApplier","_this$component$0$0$b","sanitizeGrid","headerMap","headerCell","configType","createHeaderWrapper","headerType","layoutManager","renderDetails","_headerMap$headerType","headerConfig","component_wrapper_maker_objectSpread","wrapperParams","existingComponent","createScrollBarWrapper","scrollBarType","grid","_scrollBarMap$scrollB","scrollBarMap","layoutBasedMeasure","viewMeasure","rowAlign","colAlign","componentWrapperMaker","createLegendWrapper","legendWrapper","gridLayoutWrapper","verticalScrollBar","horizontalScrollBar","ScrollManager","scroll_manager_classCallCheck","_scrollBarComponents","_attachedComponents","scroll_manager_createClass","scrollBarComponents","attachedComponents","performScrollAction","getRenderDetails","_mount$getBoundingCli","heightAttr","widthAttr","visGroup","_visGroup$placeholder","legendPosition","layoutArrangement","arrangeComponents","_titleLayouts","titleLayouts","component_resolver_defineProperty","legendLayouts","titlePosition","subtitlePosition","availableHeightForCanvas","availableWidthForCanvas","_createHeaders","canvasHeight","canvasWidth","isSubtitle","headerOptions","_createHeading","createLegend","getLegendSpace","mountSpace","componentIndexes","renderLayout","_layoutManager","gridLayout","compWrappers","componentWrappers","gridWrapper","createScrollManager","horizontalScrollWrapper","verticalScrollWrapper","hScrollBar","vScrollBar","registerComponents","attachScrollListener","defaultInteractionPolicy","isMeasure","group_firebolt_toConsumableArray","getFieldsFromChannel","colDim","fieldInf","unitColFacets","equals","unitRowFacets","propagateWith","defaultCrossInteractionPolicy","propagationCanvasAlias","propagationUnit","GroupFireBolt","group_firebolt_classCallCheck","group_firebolt_possibleConstructorReturn","group_firebolt_getPrototypeOf","behaviouralAction","validFields","APP_INITIAL_STATE","app","Canvas","globalDependencies","canvas_classCallCheck","canvas_possibleConstructorReturn","canvas_getPrototypeOf","canvas_defineProperty","canvas_slicedToArray","canvas_assertThisInitialized","initedComponents","initCanvas","createGroupState","_VisualGroup$getState2","canvas_helper_slicedToArray","localState","register","prepareLayout","triggerReflow","setLayoutInfForUnits","getBoundBox","getRootNodeId","setLabelRotationForAxes","rotationVal","getAxes","initialSettings","regEntry","COMPONENTS","SUBREGISTRIES","regObj","globalCache","defaultRegistry","overrideRegistryDefinitions","overrideRegistry","muze","_transactor2","muze_slicedToArray","env","globalStore","componentSubRegistryDef","settings","withSettings","enableChainedTransaction","transactionModel","transactionEndpoint","transactionItems","Smartlabel","SideEffects","standards","Behaviours","operators","utils","lookupWhat","lookupDetails","lookupTarget","deps"],"mappings":"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B,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,yDACA,+DACA,sEACApT,IAAIgvC,gCCESgX,kBAZK,IAAIplD,MAAM,GAAGwS,OAC/B,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,yDACA,+DACA,sEACApT,IAAIgvC,gCCASgX,cAVK,IAAIplD,MAAM,GAAGwS,OAC/B,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,0DACApT,IAAIgvC,gCCESgX,cAVK,IAAIplD,MAAM,GAAGwS,OAC/B,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,0DACApT,IAAIgvC,gCCESgX,cAVK,IAAIplD,MAAM,GAAGwS,OAC/B,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,0DACApT,IAAIgvC,gCCESgX,cAVK,IAAIplD,MAAM,GAAGwS,OAC/B,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,0DACApT,IAAIgvC,gCCESgX,gBAVK,IAAIplD,MAAM,GAAGwS,OAC/B,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,0DACApT,IAAIgvC,gCCESgX,cAVK,IAAIplD,MAAM,GAAGwS,OAC/B,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,0DACApT,IAAIgvC,gCCESgX,cAVK,IAAIplD,MAAM,GAAGwS,OAC/B,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,0DACApT,IAAIgvC,gCCESgX,cAVK,IAAIplD,MAAM,GAAGwS,OAC/B,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,0DACApT,IAAIgvC,gCCESgX,gBAVK,IAAIplD,MAAM,GAAGwS,OAC/B,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,0DACApT,IAAIgvC,gCCESgX,cAVK,IAAIplD,MAAM,GAAGwS,OAC/B,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,0DACApT,IAAIgvC,gCCESgX,gBAVK,IAAIplD,MAAM,GAAGwS,OAC/B,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,0DACApT,IAAIgvC,gCCESgX,gBAVK,IAAIplD,MAAM,GAAGwS,OAC/B,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,0DACApT,IAAIgvC,gCCRKqX,aAAS,IAAIzlD,MAAM,GAAGwS,OAC/B,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,0DACApT,IAAIgvC,+BAESgX,eAAKK,cCALL,gBAVK,IAAIplD,MAAM,GAAGwS,OAC/B,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,0DACApT,IAAIgvC,gCCESgX,eAVK,IAAIplD,MAAM,GAAGwS,OAC/B,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,0DACApT,IAAIgvC,gCCESgX,iBAVK,IAAIplD,MAAM,GAAGwS,OAC/B,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,0DACApT,IAAIgvC,gCCESgX,cAVK,IAAIplD,MAAM,GAAGwS,OAC/B,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,0DACApT,IAAIgvC,gCCESgX,iBAVK,IAAIplD,MAAM,GAAGwS,OAC/B,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,0DACApT,IAAIgvC,gCCRS+W,yCAAyBtY,oBAAU,IAAK,GAAK,GAAMA,qBAAW,IAAK,GAAK,ICA5E8Y,aAAOR,cAAyBtY,qBAAW,IAAK,IAAM,KAAOA,oBAAU,GAAI,IAAM,KAEjF+Y,aAAOT,cAAyBtY,oBAAU,IAAK,IAAM,KAAOA,oBAAU,GAAI,IAAM,KAEvF98C,UAAI88C,sBAEOgZ,yBAAA,SAASj1D,IAClBA,EAAI,GAAKA,EAAI,KAAGA,GAAKoK,KAAK8M,MAAMlX,IACpC,IAAIk1D,GAAK9qD,KAAKsnB,IAAI1xB,EAAI,IAItB,OAHAb,UAAE8P,EAAI,IAAMjP,EAAI,IAChBb,UAAE4B,EAAI,IAAM,IAAMm0D,GAClB/1D,UAAEJ,EAAI,GAAM,GAAMm2D,GACX/1D,UAAI,ICbLo6C,YACKnvC,KAAKgwC,GACLhwC,KAAKgwC,GCFlB,SAASoa,aAAK1sD,OACZ,IAAIvH,EAAIuH,MAAMG,OACd,OAAO,SAASjI,GACd,OAAO8H,MAAMsC,KAAK6P,IAAI,EAAG7P,KAAK2P,IAAIxZ,EAAI,EAAG6J,KAAK8M,MAAMlX,EAAIO,OAI7Ci0D,0CAAKhX,8BAAO,qgDAEhB2X,cAAQX,aAAKhX,8BAAO,qgDAEpB4X,gBAAUZ,aAAKhX,8BAAO,qgDAEtB6X,eAASb,aAAKhX,8BAAO,qgDCfnB8X,sBAAwB,YACxBC,qBAAuB,cACvBC,sBAAwB,eACxBC,uBAAyB,aACzBC,uBAAyB,YACzBC,sBAAwB,cACxBC,uBAAyB,eACzBC,wBAA0B,aCHxBC,iBAHXC,OAAQ,UCKGC,cALXC,WAAY,YACZC,cAAe,cACfC,eAAgB,iBCHT90C,gBAAQjS,MAAMxO,UAAUygB,MCApB+0C,qBAAA,SAAS1zB,GACtB,OAAOA,GCELuE,SAAM,EACNqD,WAAQ,EACR+rB,YAAS,EACThsB,UAAO,EACPisB,QAAU,KAEd,SAASpX,WAAWxc,GAClB,MAAO,cAAgBA,EAAI,IAAO,MAGpC,SAASyc,WAAWp1C,GAClB,MAAO,gBAAkBA,EAAI,IAAO,IAiBtC,SAASwsD,WACP,OAAQhwD,KAAKiwD,OAGf,SAASC,UAAKC,OAAQppB,OACpB,IAAIqpB,iBACAC,WAAa,KACb3Q,WAAa,KACb4Q,cAAgB,KAChBC,cAAgB,EAChBC,cAAgB,EAChBC,YAAc,EACd/pB,EAAIypB,SAAWzvB,UAAOyvB,SAAWrsB,WAAQ,EAAI,EAC7C3H,EAAIg0B,SAAWrsB,WAAQqsB,SAAWpsB,WAAQ,IAAM,IAChDiW,UAAYmW,SAAWzvB,UAAOyvB,SAAWL,YAASnX,WAAaC,WAEnE,SAASsX,KAAKx1B,SACZ,IAAInd,OAAuB,MAAd8yC,WAAsBtpB,MAAMpC,MAAQoC,MAAMpC,MAAMp9B,MAAMw/B,MAAOqpB,eAAiBrpB,MAAMvwB,SAAY65C,WACzGtwD,OAAuB,MAAd2/C,WAAsB3Y,MAAM2Y,WAAa3Y,MAAM2Y,WAAWn4C,MAAMw/B,MAAOqpB,eAAiBtgC,qBAAY4vB,WAC7GgR,QAAU7sD,KAAK6P,IAAI68C,cAAe,GAAKE,YACvClvD,MAAQwlC,MAAMxlC,QACdovD,QAAUpvD,MAAM,GAAK,GACrBqvD,QAAUrvD,MAAMA,MAAMG,OAAS,GAAK,GACpC++B,UAAYsG,MAAMG,UA/B1B,SAAS2pB,YAAO9pB,OACd,IAAIka,OAASp9C,KAAK6P,IAAI,EAAGqzB,MAAMG,YAAc,GAAK,EAElD,OADIH,MAAMv8B,UAASy2C,OAASp9C,KAAK2G,MAAMy2C,SAChC,SAASpoD,GACd,OAAQkuC,MAAMluC,GAAKooD,SAVvB,SAAS/c,YAAO6C,OACd,OAAO,SAASluC,GACd,OAAQkuC,MAAMluC,MAmCqCkuC,MAAMC,QACrD8pB,UAAYp2B,QAAQo2B,UAAYp2B,QAAQo2B,YAAcp2B,QACtDhY,KAAOouC,UAAUC,UAAU,WAAWhmD,MAAM,OAC5CimD,KAAOF,UAAUC,UAAU,SAAShmD,KAAKwS,OAAQwpB,OAAO9gB,QACxDgrC,SAAWD,KAAKE,OAChBC,UAAYH,KAAKI,QAAQl+B,OAAO,KAAKm+B,KAAK,QAAS,QACnDC,KAAON,KAAKlzC,OAAO,QACnBzd,KAAO2wD,KAAKlzC,OAAO,QAEvB4E,KAAOA,KAAK7Y,MAAM6Y,KAAK0uC,QAAQG,OAAO,OAAQ,SACzCF,KAAK,QAAS,UACdA,KAAK,SAAU,SAEpBL,KAAOA,KAAKnnD,MAAMsnD,WAElBG,KAAOA,KAAKznD,MAAMsnD,UAAUj+B,OAAO,QAC9Bm+B,KAAK,SAAU,QACfA,KAAKl1B,EAAI,IAAKuK,EAAI6pB,gBAEvBlwD,KAAOA,KAAKwJ,MAAMsnD,UAAUj+B,OAAO,QAC9Bm+B,KAAK,OAAQ,QACbA,KAAKl1B,EAAGuK,EAAIgqB,SACZW,KAAK,KAAMlB,SAAWzvB,SAAM,MAAQyvB,SAAWL,YAAS,SAAW,WACnE/3B,MAAM,YAAau4B,eAEpB51B,UAAYo2B,YACdpuC,KAAOA,KAAK8uC,WAAW92B,SACvBs2B,KAAOA,KAAKQ,WAAW92B,SACvB42B,KAAOA,KAAKE,WAAW92B,SACvBr6B,KAAOA,KAAKmxD,WAAW92B,SAEvBu2B,SAAWA,SAASO,WAAW92B,SAC1B22B,KAAK,UAAWtB,SAChBsB,KAAK,YAAa,SAASx4D,GAAK,OAAOuI,SAASvI,EAAI4nC,SAAS5nC,IAAMmhD,UAAUnhD,GAAKmH,KAAKyxD,aAAa,eAEzGN,UACKE,KAAK,UAAWtB,SAChBsB,KAAK,YAAa,SAASx4D,GAAK,IAAI0B,EAAIyF,KAAKu/B,WAAW0wB,OAAQ,OAAOjW,UAAUz/C,GAAK6G,SAAS7G,EAAIA,EAAE1B,IAAM0B,EAAIkmC,SAAS5nC,OAG/Ho4D,SAASzrB,SAET9iB,KACK2uC,KAAK,IAAKlB,SAAWrsB,WAAQqsB,QAAUpsB,WAClC,IAAM2C,EAAI8pB,cAAgB,IAAMG,OAAS,QAAUC,OAAS,IAAMlqB,EAAI8pB,cACtE,IAAMG,OAAS,IAAMjqB,EAAI8pB,cAAgB,QAAUI,OAAS,IAAMlqB,EAAI8pB,eAEhFQ,KACKK,KAAK,UAAW,GAChBA,KAAK,YAAa,SAASx4D,GAAK,OAAOmhD,UAAUvZ,SAAS5nC,MAE/Dy4D,KACKD,KAAKl1B,EAAI,IAAKuK,EAAI6pB,eAEvBlwD,KACKgxD,KAAKl1B,EAAGuK,EAAIgqB,SACZrwD,KAAKN,QAEV+wD,UAAU99C,OAAOg9C,UACZqB,KAAK,OAAQ,QACbA,KAAK,YAAa,IAClBA,KAAK,cAAe,cACpBA,KAAK,cAAelB,SAAWpsB,WAAQ,QAAUosB,SAAWrsB,UAAO,MAAQ,UAEhFgtB,UACKvrB,KAAK,WAAavlC,KAAKiwD,OAASxvB,WA2CvC,OAxCAyvB,KAAKnpB,MAAQ,SAAS5mB,GACpB,OAAO/a,UAAU1D,QAAUqlC,MAAQ5mB,EAAG+vC,MAAQnpB,OAGhDmpB,KAAKI,cAAgB,SAASnwC,GAC5B,OAAO/a,UAAU1D,QAAU4uD,cAAgBnwC,EAAG+vC,MAAQI,eAGxDJ,KAAKvrB,MAAQ,WACX,OAAOyrB,cAAgBt1C,gBAAMpiB,KAAK0M,WAAY8qD,MAGhDA,KAAKE,cAAgB,SAASjwC,GAC5B,OAAO/a,UAAU1D,QAAU0uD,cAAqB,MAALjwC,KAAiBrF,gBAAMpiB,KAAKynB,GAAI+vC,MAAQE,cAAct1C,SAGnGo1C,KAAKG,WAAa,SAASlwC,GACzB,OAAO/a,UAAU1D,QAAU2uD,WAAkB,MAALlwC,EAAY,KAAOrF,gBAAMpiB,KAAKynB,GAAI+vC,MAAQG,YAAcA,WAAWv1C,SAG7Go1C,KAAKxQ,WAAa,SAASv/B,GACzB,OAAO/a,UAAU1D,QAAUg+C,WAAav/B,EAAG+vC,MAAQxQ,YAGrDwQ,KAAKwB,SAAW,SAASvxC,GACvB,OAAO/a,UAAU1D,QAAU6uD,cAAgBC,eAAiBrwC,EAAG+vC,MAAQK,eAGzEL,KAAKK,cAAgB,SAASpwC,GAC5B,OAAO/a,UAAU1D,QAAU6uD,eAAiBpwC,EAAG+vC,MAAQK,eAGzDL,KAAKM,cAAgB,SAASrwC,GAC5B,OAAO/a,UAAU1D,QAAU8uD,eAAiBrwC,EAAG+vC,MAAQM,eAGzDN,KAAKO,YAAc,SAAStwC,GAC1B,OAAO/a,UAAU1D,QAAU+uD,aAAetwC,EAAG+vC,MAAQO,aAGhDP,KClKT,IAAIyB,GAAK9tD,KAAKgwC,GACV+d,IAAM,EAAID,GAEVE,WAAaD,IADH,KAGd,SAASE,OACP9xD,KAAK+xD,IAAM/xD,KAAKgyD,IAChBhyD,KAAKiyD,IAAMjyD,KAAKkyD,IAAM,KACtBlyD,KAAKmgB,EAAI,GAGX,SAASuC,YACP,OAAO,IAAIovC,KAGbA,KAAKz3D,UAAYqoB,UAAKroB,WACpB2qB,YAAa8sC,KACbK,OAAQ,SAAAA,OAASh2B,EAAG34B,GAClBxD,KAAKmgB,GAAK,KAAOngB,KAAK+xD,IAAM/xD,KAAKiyD,KAAO91B,GAAK,KAAOn8B,KAAKgyD,IAAMhyD,KAAKkyD,KAAO1uD,IAE7E4uD,UAAW,SAAAA,YACQ,OAAbpyD,KAAKiyD,MACPjyD,KAAKiyD,IAAMjyD,KAAK+xD,IAAK/xD,KAAKkyD,IAAMlyD,KAAKgyD,IACrChyD,KAAKmgB,GAAK,MAGdkyC,OAAQ,SAAAA,OAASl2B,EAAG34B,GAClBxD,KAAKmgB,GAAK,KAAOngB,KAAKiyD,KAAO91B,GAAK,KAAOn8B,KAAKkyD,KAAO1uD,IAEvD8uD,iBAAkB,SAAAA,iBAASxS,GAAIyS,GAAIp2B,EAAG34B,GACpCxD,KAAKmgB,GAAK,MAAQ2/B,GAAM,MAAQyS,GAAM,KAAOvyD,KAAKiyD,KAAO91B,GAAK,KAAOn8B,KAAKkyD,KAAO1uD,IAEnFgvD,cAAe,SAAAA,cAAS1S,GAAIyS,GAAIE,GAAIC,GAAIv2B,EAAG34B,GACzCxD,KAAKmgB,GAAK,MAAQ2/B,GAAM,MAAQyS,GAAM,MAAQE,GAAM,MAAQC,GAAM,KAAO1yD,KAAKiyD,KAAO91B,GAAK,KAAOn8B,KAAKkyD,KAAO1uD,IAE/GmvD,MAAO,SAAAA,MAAS7S,GAAIyS,GAAIE,GAAIC,GAAIr5D,GAC9BymD,IAAMA,GAAIyS,IAAMA,GAAIE,IAAMA,GAAIC,IAAMA,GAAIr5D,GAAKA,EAC7C,IAAIwmD,GAAK7/C,KAAKiyD,IACVW,GAAK5yD,KAAKkyD,IACVW,IAAMJ,GAAK3S,GACXgT,IAAMJ,GAAKH,GACXQ,IAAMlT,GAAKC,GACXkT,IAAMJ,GAAKL,GACXU,MAAQF,IAAMA,IAAMC,IAAMA,IAG9B,GAAI35D,EAAI,EAAG,MAAM,IAAI4V,MAAM,oBAAsB5V,GAGjD,GAAiB,OAAb2G,KAAKiyD,IACPjyD,KAAKmgB,GAAK,KAAOngB,KAAKiyD,IAAMnS,IAAM,KAAO9/C,KAAKkyD,IAAMK,SAIjD,GAAMU,MApDD,KAyDL,GAAMpvD,KAAKsnB,IAAI6nC,IAAMH,IAAMC,IAAMC,KAzD5B,MAyDgD15D,EAKrD,CACH,IAAI65D,IAAMT,GAAK5S,GACXsT,IAAMT,GAAKE,GACXQ,MAAQP,IAAMA,IAAMC,IAAMA,IAC1BO,MAAQH,IAAMA,IAAMC,IAAMA,IAC1BG,IAAMzvD,KAAKkQ,KAAKq/C,OAChBG,IAAM1vD,KAAKkQ,KAAKk/C,OAChBz6D,EAAIa,EAAIwK,KAAKguC,KAAK8f,GAAK9tD,KAAK2vD,MAAMJ,MAAQH,MAAQI,QAAU,EAAIC,IAAMC,OAAS,GAC/EE,IAAMj7D,EAAI+6D,IACVG,IAAMl7D,EAAI86D,IAGVzvD,KAAKsnB,IAAIsoC,IAAM,GA1EX,OA2ENzzD,KAAKmgB,GAAK,KAAO2/B,GAAK2T,IAAMV,KAAO,KAAOR,GAAKkB,IAAMT,MAGvDhzD,KAAKmgB,GAAK,IAAM9mB,EAAI,IAAMA,EAAI,WAAa25D,IAAME,IAAMH,IAAMI,KAAQ,KAAOnzD,KAAKiyD,IAAMnS,GAAK4T,IAAMb,KAAO,KAAO7yD,KAAKkyD,IAAMK,GAAKmB,IAAMZ,UApBtI9yD,KAAKmgB,GAAK,KAAOngB,KAAKiyD,IAAMnS,IAAM,KAAO9/C,KAAKkyD,IAAMK,WAuBxDoB,IAAK,SAAAA,IAASx3B,EAAG34B,EAAGnK,EAAGu6D,GAAI1jD,GAAI2jD,KAC7B13B,GAAKA,EAAG34B,GAAKA,EACb,IAAIswD,IADYz6D,GAAKA,GACRwK,KAAK4wC,IAAImf,IAClBG,GAAK16D,EAAIwK,KAAK6wC,IAAIkf,IAClB/T,GAAK1jB,EAAI23B,GACTlB,GAAKpvD,EAAIuwD,GACTC,GAAK,EAAIH,IACTI,GAAKJ,IAAMD,GAAK1jD,GAAKA,GAAK0jD,GAG9B,GAAIv6D,EAAI,EAAG,MAAM,IAAI4V,MAAM,oBAAsB5V,GAGhC,OAAb2G,KAAKiyD,IACPjyD,KAAKmgB,GAAK,IAAM0/B,GAAK,IAAM+S,IAIpB/uD,KAAKsnB,IAAInrB,KAAKiyD,IAAMpS,IAnGnB,MAmGoCh8C,KAAKsnB,IAAInrB,KAAKkyD,IAAMU,IAnGxD,QAoGR5yD,KAAKmgB,GAAK,IAAM0/B,GAAK,IAAM+S,IAIxBv5D,IAGD46D,GAAK,IAAGA,GAAKA,GAAKrC,IAAMA,KAGxBqC,GAAKpC,WACP7xD,KAAKmgB,GAAK,IAAM9mB,EAAI,IAAMA,EAAI,QAAU26D,GAAK,KAAO73B,EAAI23B,IAAM,KAAOtwD,EAAIuwD,IAAM,IAAM16D,EAAI,IAAMA,EAAI,QAAU26D,GAAK,KAAOh0D,KAAKiyD,IAAMpS,IAAM,KAAO7/C,KAAKkyD,IAAMU,IAIrJqB,GAnHC,OAoHRj0D,KAAKmgB,GAAK,IAAM9mB,EAAI,IAAMA,EAAI,SAAW46D,IAAMtC,IAAO,IAAMqC,GAAK,KAAOh0D,KAAKiyD,IAAM91B,EAAI9iC,EAAIwK,KAAK4wC,IAAIvkC,KAAO,KAAOlQ,KAAKkyD,IAAM1uD,EAAInK,EAAIwK,KAAK6wC,IAAIxkC,QAGlJgkD,KAAM,SAAAA,KAAS/3B,EAAG34B,EAAG2hD,EAAGz8C,GACtB1I,KAAKmgB,GAAK,KAAOngB,KAAK+xD,IAAM/xD,KAAKiyD,KAAO91B,GAAK,KAAOn8B,KAAKgyD,IAAMhyD,KAAKkyD,KAAO1uD,GAAK,MAAQ2hD,EAAK,MAAQz8C,EAAK,KAAQy8C,EAAK,KAEzH7iD,SAAU,SAAAA,WACR,OAAOtC,KAAKmgB,IAIDuC,uBCjIAyxC,sBAAA,SAASh4B,GACtB,OAAO,SAASqa,WACd,OAAOra,ICFAhR,IAAMtnB,KAAKsnB,IACX+pB,MAAQrxC,KAAKqxC,MACbT,IAAM5wC,KAAK4wC,IACX/gC,SAAM7P,KAAK6P,IACXF,SAAM3P,KAAK2P,IACXkhC,IAAM7wC,KAAK6wC,IACX3gC,UAAOlQ,KAAKkQ,KAEZg8C,aAAU,MACV4B,QAAK9tD,KAAKgwC,GACVugB,OAASzC,QAAK,EACdC,SAAM,EAAID,QAMd,SAAS0C,KAAKl4B,GACnB,OAAOA,GAAK,EAAIi4B,OAASj4B,IAAM,GAAKi4B,OAASvwD,KAAKwwD,KAAKl4B,GCdzD,SAASm4B,eAAez7D,GACtB,OAAOA,EAAE07D,YAGX,SAASC,eAAe37D,GACtB,OAAOA,EAAE47D,YAGX,SAASC,cAAc77D,GACrB,OAAOA,EAAE87D,WAGX,SAASC,YAAY/7D,GACnB,OAAOA,EAAEg8D,SAGX,SAASC,YAAYj8D,GACnB,OAAOA,GAAKA,EAAEk8D,SAchB,SAASC,eAAenV,GAAI+S,GAAI9S,GAAIyS,GAAI3qB,GAAIqtB,GAAIjB,IAC9C,IAAIjB,IAAMlT,GAAKC,GACXkT,IAAMJ,GAAKL,GACX/hD,IAAMwjD,GAAKiB,IAAMA,IAAMlhD,UAAKg/C,IAAMA,IAAMC,IAAMA,KAC9CkC,GAAK1kD,GAAKwiD,IACVmC,IAAM3kD,GAAKuiD,IACXqC,IAAMvV,GAAKqV,GACXG,IAAMzC,GAAKuC,GACXG,IAAMxV,GAAKoV,GACXK,IAAMhD,GAAK4C,GACXK,KAAOJ,IAAME,KAAO,EACpBG,KAAOJ,IAAME,KAAO,EACpBzB,GAAKwB,IAAMF,IACXrB,GAAKwB,IAAMF,IACXK,GAAK5B,GAAKA,GAAKC,GAAKA,GACpB16D,EAAIuuC,GAAKqtB,GACT5f,EAAI+f,IAAMG,IAAMD,IAAMD,IACtBx8D,GAAKk7D,GAAK,GAAK,EAAI,GAAKhgD,UAAKL,SAAI,EAAGra,EAAIA,EAAIq8D,GAAKrgB,EAAIA,IACrDsgB,KAAOtgB,EAAI0e,GAAKD,GAAKj7D,GAAK68D,GAC1BE,MAAQvgB,EAAIye,GAAKC,GAAKl7D,GAAK68D,GAC3BG,KAAOxgB,EAAI0e,GAAKD,GAAKj7D,GAAK68D,GAC1BI,MAAQzgB,EAAIye,GAAKC,GAAKl7D,GAAK68D,GAC3BK,IAAMJ,IAAMH,IACZQ,IAAMJ,IAAMH,IACZQ,IAAMJ,IAAML,IACZU,IAAMJ,IAAML,IAMhB,OAFIM,IAAMA,IAAMC,IAAMA,IAAMC,IAAMA,IAAMC,IAAMA,MAAKP,IAAME,IAAKD,IAAME,MAGlEK,GAAIR,IACJS,GAAIR,IACJ7C,KAAMmC,GACNlC,KAAMmC,GACNC,IAAKO,KAAO/tB,GAAKvuC,EAAI,GACrBg8D,IAAKO,KAAOhuB,GAAKvuC,EAAI,ICxEzB,SAASg9D,OAAO37B,SACd16B,KAAKy6B,SAAWC,QAGlB27B,OAAOh8D,WACLi8D,UAAW,SAAAA,YACTt2D,KAAKu2D,MAAQ,GAEfC,QAAS,SAAAA,UACPx2D,KAAKu2D,MAAQ7yB,KAEf+yB,UAAW,SAAAA,YACTz2D,KAAK02D,OAAS,GAEhBC,QAAS,SAAAA,WACH32D,KAAKu2D,OAAyB,IAAfv2D,KAAKu2D,OAA+B,IAAhBv2D,KAAK02D,SAAe12D,KAAKy6B,SAAS23B,YACzEpyD,KAAKu2D,MAAQ,EAAIv2D,KAAKu2D,OAExBK,MAAO,SAAAA,MAASz6B,EAAG34B,GAEjB,OADA24B,GAAKA,EAAG34B,GAAKA,EACLxD,KAAK02D,QACX,KAAK,EAAG12D,KAAK02D,OAAS,EAAG12D,KAAKu2D,MAAQv2D,KAAKy6B,SAAS43B,OAAOl2B,EAAG34B,GAAKxD,KAAKy6B,SAAS03B,OAAOh2B,EAAG34B,GAAI,MAC/F,KAAK,EAAGxD,KAAK02D,OAAS,EACtB,QAAS12D,KAAKy6B,SAAS43B,OAAOl2B,EAAG34B,MAKxB,IAAAqzD,aAAA,SAASn8B,SACtB,OAAO,IAAI27B,OAAO37B,UC7Bb,SAASyB,QAAE5hC,GAChB,OAAOA,EAAE,GAGJ,SAASiJ,QAAEjJ,GAChB,OAAOA,EAAE,GCAI,IAAAu8D,SAAA,WACb,IAAI36B,EAAI46B,QACJvzD,EAAIwzD,QACJC,QAAUzgB,uBAAS,GACnB9b,QAAU,KACVw8B,MAAQC,aACRtb,OAAS,KAEb,SAASyV,KAAKvmD,MACZ,IAAIxS,EAEAM,EAEAu+D,OAHAp9D,EAAI+Q,KAAKrJ,OAET21D,UAAW,EAKf,IAFe,MAAX38B,UAAiBmhB,OAASqb,MAAME,OAAS10C,aAExCnqB,EAAI,EAAGA,GAAKyB,IAAKzB,IACdA,EAAIyB,GAAKi9D,QAAQp+D,EAAIkS,KAAKxS,GAAIA,EAAGwS,SAAWssD,YAC5CA,UAAYA,UAAUxb,OAAO4a,YAC5B5a,OAAO8a,WAEVU,UAAUxb,OAAO+a,OAAOz6B,EAAEtjC,EAAGN,EAAGwS,OAAQvH,EAAE3K,EAAGN,EAAGwS,OAGtD,GAAIqsD,OAAQ,OAAOvb,OAAS,KAAMub,OAAS,IAAM,KAuBnD,OApBA9F,KAAKn1B,EAAI,SAAShc,GAChB,OAAO/a,UAAU1D,QAAUy6B,EAAiB,mBAANhc,EAAmBA,EAAIq2B,uBAAUr2B,GAAImxC,MAAQn1B,GAGrFm1B,KAAK9tD,EAAI,SAAS2c,GAChB,OAAO/a,UAAU1D,QAAU8B,EAAiB,mBAAN2c,EAAmBA,EAAIq2B,uBAAUr2B,GAAImxC,MAAQ9tD,GAGrF8tD,KAAK2F,QAAU,SAAS92C,GACtB,OAAO/a,UAAU1D,QAAUu1D,QAAuB,mBAAN92C,EAAmBA,EAAIq2B,wBAAWr2B,GAAImxC,MAAQ2F,SAG5F3F,KAAK4F,MAAQ,SAAS/2C,GACpB,OAAO/a,UAAU1D,QAAUw1D,MAAQ/2C,EAAc,MAAXua,UAAoBmhB,OAASqb,MAAMx8B,UAAW42B,MAAQ4F,OAG9F5F,KAAK52B,QAAU,SAASva,GACtB,OAAO/a,UAAU1D,QAAe,MAALye,EAAYua,QAAUmhB,OAAS,KAAOA,OAASqb,MAAMx8B,QAAUva,GAAImxC,MAAQ52B,SAGjG42B,MC/CMgG,SAAA,WACb,IAAIzX,GAAKkX,QACLjX,GAAK,KACL8S,GAAKpc,sBAAS,GACd+b,GAAKyE,QACLC,QAAUzgB,uBAAS,GACnB9b,QAAU,KACVw8B,MAAQC,aACRtb,OAAS,KAEb,SAAS0b,KAAKxsD,MACZ,IAAIxS,EACAsiB,EACA6rB,EAEA7tC,EAEAu+D,OAHAp9D,EAAI+Q,KAAKrJ,OAET21D,UAAW,EAEXG,IAAM,IAAI3uD,MAAM7O,GAChBy9D,IAAM,IAAI5uD,MAAM7O,GAIpB,IAFe,MAAX0gC,UAAiBmhB,OAASqb,MAAME,OAAS10C,aAExCnqB,EAAI,EAAGA,GAAKyB,IAAKzB,EAAG,CACvB,KAAMA,EAAIyB,GAAKi9D,QAAQp+D,EAAIkS,KAAKxS,GAAIA,EAAGwS,SAAWssD,SAChD,GAAIA,UAAYA,SACdx8C,EAAItiB,EACJsjD,OAAOya,YACPza,OAAO4a,gBACF,CAGL,IAFA5a,OAAO8a,UACP9a,OAAO4a,YACF/vB,EAAInuC,EAAI,EAAGmuC,GAAK7rB,IAAK6rB,EACxBmV,OAAO+a,MAAMY,IAAI9wB,GAAI+wB,IAAI/wB,IAE3BmV,OAAO8a,UACP9a,OAAO2a,UAGPa,WACFG,IAAIj/D,IAAMsnD,GAAGhnD,EAAGN,EAAGwS,MAAO0sD,IAAIl/D,IAAMq6D,GAAG/5D,EAAGN,EAAGwS,MAC7C8wC,OAAO+a,MAAM9W,IAAMA,GAAGjnD,EAAGN,EAAGwS,MAAQysD,IAAIj/D,GAAIg6D,IAAMA,GAAG15D,EAAGN,EAAGwS,MAAQ0sD,IAAIl/D,KAI3E,GAAI6+D,OAAQ,OAAOvb,OAAS,KAAMub,OAAS,IAAM,KAGnD,SAASM,WACP,OAAOpG,WAAO2F,QAAQA,SAASC,MAAMA,OAAOx8B,QAAQA,SAoDtD,OAjDA68B,KAAKp7B,EAAI,SAAShc,GAChB,OAAO/a,UAAU1D,QAAUm+C,GAAkB,mBAAN1/B,EAAmBA,EAAIq2B,uBAAUr2B,GAAI2/B,GAAK,KAAMyX,MAAQ1X,IAGjG0X,KAAK1X,GAAK,SAAS1/B,GACjB,OAAO/a,UAAU1D,QAAUm+C,GAAkB,mBAAN1/B,EAAmBA,EAAIq2B,uBAAUr2B,GAAIo3C,MAAQ1X,IAGtF0X,KAAKzX,GAAK,SAAS3/B,GACjB,OAAO/a,UAAU1D,QAAUo+C,GAAU,MAAL3/B,EAAY,KAAoB,mBAANA,EAAmBA,EAAIq2B,uBAAUr2B,GAAIo3C,MAAQzX,IAGzGyX,KAAK/zD,EAAI,SAAS2c,GAChB,OAAO/a,UAAU1D,QAAUkxD,GAAkB,mBAANzyC,EAAmBA,EAAIq2B,uBAAUr2B,GAAIoyC,GAAK,KAAMgF,MAAQ3E,IAGjG2E,KAAK3E,GAAK,SAASzyC,GACjB,OAAO/a,UAAU1D,QAAUkxD,GAAkB,mBAANzyC,EAAmBA,EAAIq2B,uBAAUr2B,GAAIo3C,MAAQ3E,IAGtF2E,KAAKhF,GAAK,SAASpyC,GACjB,OAAO/a,UAAU1D,QAAU6wD,GAAU,MAALpyC,EAAY,KAAoB,mBAANA,EAAmBA,EAAIq2B,uBAAUr2B,GAAIo3C,MAAQhF,IAGzGgF,KAAKI,OACLJ,KAAKK,OAAS,WACZ,OAAOF,WAAWv7B,EAAE0jB,IAAIr8C,EAAEovD,KAG5B2E,KAAKM,OAAS,WACZ,OAAOH,WAAWv7B,EAAE0jB,IAAIr8C,EAAE+uD,KAG5BgF,KAAKO,OAAS,WACZ,OAAOJ,WAAWv7B,EAAE2jB,IAAIt8C,EAAEovD,KAG5B2E,KAAKN,QAAU,SAAS92C,GACtB,OAAO/a,UAAU1D,QAAUu1D,QAAuB,mBAAN92C,EAAmBA,EAAIq2B,wBAAWr2B,GAAIo3C,MAAQN,SAG5FM,KAAKL,MAAQ,SAAS/2C,GACpB,OAAO/a,UAAU1D,QAAUw1D,MAAQ/2C,EAAc,MAAXua,UAAoBmhB,OAASqb,MAAMx8B,UAAW68B,MAAQL,OAG9FK,KAAK78B,QAAU,SAASva,GACtB,OAAO/a,UAAU1D,QAAe,MAALye,EAAYua,QAAUmhB,OAAS,KAAOA,OAASqb,MAAMx8B,QAAUva,GAAIo3C,MAAQ78B,SAGjG68B,MC3GMQ,eAAA,SAASp9D,EAAGyI,GACzB,OAAOA,EAAIzI,GAAK,EAAIyI,EAAIzI,EAAI,EAAIyI,GAAKzI,EAAI,EAAI+oC,KCDhCs0B,sBAAA,SAASn/D,GACtB,OAAOA,GCCsBo/D,YAAYd,cAE3C,SAASe,OAAOhB,OACdl3D,KAAKm4D,OAASjB,MAqBD,SAASe,YAAYf,OAElC,SAASkB,OAAO19B,SACd,OAAO,IAAIw9B,OAAOhB,MAAMx8B,UAK1B,OAFA09B,OAAOD,OAASjB,MAETkB,OA1BTF,OAAO79D,WACLi8D,UAAW,SAAAA,YACTt2D,KAAKm4D,OAAO7B,aAEdE,QAAS,SAAAA,UACPx2D,KAAKm4D,OAAO3B,WAEdC,UAAW,SAAAA,YACTz2D,KAAKm4D,OAAO1B,aAEdE,QAAS,SAAAA,UACP32D,KAAKm4D,OAAOxB,WAEdC,MAAO,SAAAA,MAASj8D,EAAGtB,GACjB2G,KAAKm4D,OAAOvB,MAAMv9D,EAAIwK,KAAK6wC,IAAI/5C,GAAItB,GAAKwK,KAAK4wC,IAAI95C,MCNtC,IChBJmgB,yBAAQjS,MAAMxO,UAAUygB,MCEpB,IAAAu9C,eACbC,KAAM,SAAAA,KAAS59B,QAAShC,MACtB,IAAIr/B,EAAIwK,KAAKkQ,KAAK2kB,KAAOi5B,SACzBj3B,QAAQy3B,OAAO94D,EAAG,GAClBqhC,QAAQi5B,IAAI,EAAG,EAAGt6D,EAAG,EAAGu4D,YCNb2G,cACbD,KAAM,SAAAA,KAAS59B,QAAShC,MACtB,IAAIr/B,EAAIwK,KAAKkQ,KAAK2kB,KAAO,GAAK,EAC9BgC,QAAQy3B,QAAQ,EAAI94D,GAAIA,GACxBqhC,QAAQ23B,QAAQh5D,GAAIA,GACpBqhC,QAAQ23B,QAAQh5D,GAAI,EAAIA,GACxBqhC,QAAQ23B,OAAOh5D,GAAI,EAAIA,GACvBqhC,QAAQ23B,OAAOh5D,GAAIA,GACnBqhC,QAAQ23B,OAAO,EAAIh5D,GAAIA,GACvBqhC,QAAQ23B,OAAO,EAAIh5D,EAAGA,GACtBqhC,QAAQ23B,OAAOh5D,EAAGA,GAClBqhC,QAAQ23B,OAAOh5D,EAAG,EAAIA,GACtBqhC,QAAQ23B,QAAQh5D,EAAG,EAAIA,GACvBqhC,QAAQ23B,QAAQh5D,EAAGA,GACnBqhC,QAAQ23B,QAAQ,EAAIh5D,EAAGA,GACvBqhC,QAAQ03B,cCfRoG,MAAQ30D,KAAKkQ,KAAK,EAAI,GACtB0kD,QAAkB,EAARD,MAECE,SACbJ,KAAM,SAAAA,KAAS59B,QAAShC,MACtB,IAAIl1B,EAAIK,KAAKkQ,KAAK2kB,KAAO+/B,SACrBt8B,EAAI34B,EAAIg1D,MACZ99B,QAAQy3B,OAAO,GAAI3uD,GACnBk3B,QAAQ23B,OAAOl2B,EAAG,GAClBzB,QAAQ23B,OAAO,EAAG7uD,GAClBk3B,QAAQ23B,QAAQl2B,EAAG,GACnBzB,QAAQ03B,cCRRuG,GAAK90D,KAAK6wC,IAAIid,QAAK,IAAM9tD,KAAK6wC,IAAI,EAAIid,QAAK,IAC3CiH,GAAK/0D,KAAK6wC,IAAIkd,SAAM,IAAM+G,GAC1BE,IAAMh1D,KAAK4wC,IAAImd,SAAM,IAAM+G,GAEhBG,MACbR,KAAM,SAAAA,KAAS59B,QAAShC,MACtB,IAAIr/B,EAAIwK,KAAKkQ,KAPR,kBAOa2kB,MACdyD,EAAIy8B,GAAKv/D,EACTmK,EAAIq1D,GAAKx/D,EACbqhC,QAAQy3B,OAAO,GAAI94D,GACnBqhC,QAAQ23B,OAAOl2B,EAAG34B,GAClB,IAAK,IAAIjL,EAAI,EAAGA,EAAI,IAAKA,EAAG,CAC1B,IAAIoC,EAAIi3D,SAAMr5D,EAAI,EACdK,EAAIiL,KAAK4wC,IAAI95C,GACbH,EAAIqJ,KAAK6wC,IAAI/5C,GACjB+/B,QAAQ23B,OAAO73D,EAAInB,GAAIT,EAAIS,GAC3BqhC,QAAQ23B,OAAOz5D,EAAIujC,EAAI3hC,EAAIgJ,EAAGhJ,EAAI2hC,EAAIvjC,EAAI4K,GAE5Ck3B,QAAQ03B,cCrBG2G,QACbT,KAAM,SAAAA,KAAS59B,QAAShC,MACtB,IAAIysB,EAAIthD,KAAKkQ,KAAK2kB,MACdyD,GAAKgpB,EAAI,EACbzqB,QAAQw5B,KAAK/3B,EAAGA,EAAGgpB,EAAGA,KCJtB6T,MAAQn1D,KAAKkQ,KAAK,GAEPklD,UACbX,KAAM,SAAAA,KAAS59B,QAAShC,MACtB,IAAIl1B,GAAKK,KAAKkQ,KAAK2kB,MAAgB,EAARsgC,QAC3Bt+B,QAAQy3B,OAAO,EAAO,EAAJ3uD,GAClBk3B,QAAQ23B,QAAQ2G,MAAQx1D,GAAIA,GAC5Bk3B,QAAQ23B,OAAO2G,MAAQx1D,GAAIA,GAC3Bk3B,QAAQ03B,cCPR53D,MAAIqJ,KAAKkQ,KAAK,GAAK,EACnB2yB,MAAI,EAAI7iC,KAAKkQ,KAAK,IAClBpZ,MAAkB,GAAb+rC,MAAI,EAAI,GAEFwyB,KACbZ,KAAM,SAAAA,KAAS59B,QAAShC,MACtB,IAAIr/B,EAAIwK,KAAKkQ,KAAK2kB,KAAO/9B,OACrBklD,GAAKxmD,EAAI,EACTu5D,GAAKv5D,EAAIqtC,MACToZ,GAAKD,GACL0S,GAAKl5D,EAAIqtC,MAAIrtC,EACbo5D,IAAM3S,GACN4S,GAAKH,GACT73B,QAAQy3B,OAAOtS,GAAI+S,IACnBl4B,QAAQ23B,OAAOvS,GAAIyS,IACnB73B,QAAQ23B,OAAOI,GAAIC,IACnBh4B,QAAQ23B,QAjBJ,GAiBexS,GAAKrlD,MAAIo4D,GAAIp4D,MAAIqlD,IAjBhC,GAiByC+S,IAC7Cl4B,QAAQ23B,QAlBJ,GAkBevS,GAAKtlD,MAAI+3D,GAAI/3D,MAAIslD,IAlBhC,GAkByCyS,IAC7C73B,QAAQ23B,QAnBJ,GAmBeI,GAAKj4D,MAAIk4D,GAAIl4D,MAAIi4D,IAnBhC,GAmByCC,IAC7Ch4B,QAAQ23B,QApBJ,GAoBexS,GAAKrlD,MAAIo4D,IApBxB,GAoBgCA,GAAKp4D,MAAIqlD,IAC7CnlB,QAAQ23B,QArBJ,GAqBevS,GAAKtlD,MAAI+3D,IArBxB,GAqBgCA,GAAK/3D,MAAIslD,IAC7CplB,QAAQ23B,QAtBJ,GAsBeI,GAAKj4D,MAAIk4D,IAtBxB,GAsBgCA,GAAKl4D,MAAIi4D,IAC7C/3B,QAAQ03B,cCvBG+G,KAAA,aCAR,SAASvC,OAAMwC,KAAMj9B,EAAG34B,GAC7B41D,KAAK3+B,SAAS+3B,eACX,EAAI4G,KAAKrH,IAAMqH,KAAKnH,KAAO,GAC3B,EAAImH,KAAKpH,IAAMoH,KAAKlH,KAAO,GAC3BkH,KAAKrH,IAAM,EAAIqH,KAAKnH,KAAO,GAC3BmH,KAAKpH,IAAM,EAAIoH,KAAKlH,KAAO,GAC3BkH,KAAKrH,IAAM,EAAIqH,KAAKnH,IAAM91B,GAAK,GAC/Bi9B,KAAKpH,IAAM,EAAIoH,KAAKlH,IAAM1uD,GAAK,GAI7B,SAAS61D,MAAM3+B,SACpB16B,KAAKy6B,SAAWC,QAGlB2+B,MAAMh/D,WACJi8D,UAAW,SAAAA,YACTt2D,KAAKu2D,MAAQ,GAEfC,QAAS,SAAAA,UACPx2D,KAAKu2D,MAAQ7yB,KAEf+yB,UAAW,SAAAA,YACTz2D,KAAK+xD,IAAM/xD,KAAKiyD,IAChBjyD,KAAKgyD,IAAMhyD,KAAKkyD,IAAMxuB,IACtB1jC,KAAK02D,OAAS,GAEhBC,QAAS,SAAAA,UACP,OAAQ32D,KAAK02D,QACX,KAAK,EAAGE,OAAM52D,KAAMA,KAAKiyD,IAAKjyD,KAAKkyD,KACnC,KAAK,EAAGlyD,KAAKy6B,SAAS43B,OAAOryD,KAAKiyD,IAAKjyD,KAAKkyD,MAE1ClyD,KAAKu2D,OAAyB,IAAfv2D,KAAKu2D,OAA+B,IAAhBv2D,KAAK02D,SAAe12D,KAAKy6B,SAAS23B,YACzEpyD,KAAKu2D,MAAQ,EAAIv2D,KAAKu2D,OAExBK,MAAO,SAAAA,MAASz6B,EAAG34B,GAEjB,OADA24B,GAAKA,EAAG34B,GAAKA,EACLxD,KAAK02D,QACX,KAAK,EAAG12D,KAAK02D,OAAS,EAAG12D,KAAKu2D,MAAQv2D,KAAKy6B,SAAS43B,OAAOl2B,EAAG34B,GAAKxD,KAAKy6B,SAAS03B,OAAOh2B,EAAG34B,GAAI,MAC/F,KAAK,EAAGxD,KAAK02D,OAAS,EAAG,MACzB,KAAK,EAAG12D,KAAK02D,OAAS,EAAG12D,KAAKy6B,SAAS43B,QAAQ,EAAIryD,KAAK+xD,IAAM/xD,KAAKiyD,KAAO,GAAI,EAAIjyD,KAAKgyD,IAAMhyD,KAAKkyD,KAAO,GACzG,QAAS0E,OAAM52D,KAAMm8B,EAAG34B,GAE1BxD,KAAK+xD,IAAM/xD,KAAKiyD,IAAKjyD,KAAKiyD,IAAM91B,EAChCn8B,KAAKgyD,IAAMhyD,KAAKkyD,IAAKlyD,KAAKkyD,IAAM1uD,ICzCpC,SAAS81D,YAAY5+B,SACnB16B,KAAKy6B,SAAWC,QAGlB4+B,YAAYj/D,WACVi8D,UAAW6C,KACX3C,QAAS2C,KACT1C,UAAW,SAAAA,YACTz2D,KAAK+xD,IAAM/xD,KAAKiyD,IAAMjyD,KAAKu5D,IAAMv5D,KAAKw5D,IAAMx5D,KAAKy5D,IACjDz5D,KAAKgyD,IAAMhyD,KAAKkyD,IAAMlyD,KAAK05D,IAAM15D,KAAK25D,IAAM35D,KAAK45D,IAAMl2B,IACvD1jC,KAAK02D,OAAS,GAEhBC,QAAS,SAAAA,UACP,OAAQ32D,KAAK02D,QACX,KAAK,EACH12D,KAAKy6B,SAAS03B,OAAOnyD,KAAKu5D,IAAKv5D,KAAK05D,KACpC15D,KAAKy6B,SAAS23B,YACd,MAEF,KAAK,EACHpyD,KAAKy6B,SAAS03B,QAAQnyD,KAAKu5D,IAAM,EAAIv5D,KAAKw5D,KAAO,GAAIx5D,KAAK05D,IAAM,EAAI15D,KAAK25D,KAAO,GAChF35D,KAAKy6B,SAAS43B,QAAQryD,KAAKw5D,IAAM,EAAIx5D,KAAKu5D,KAAO,GAAIv5D,KAAK25D,IAAM,EAAI35D,KAAK05D,KAAO,GAChF15D,KAAKy6B,SAAS23B,YACd,MAEF,KAAK,EACHpyD,KAAK42D,MAAM52D,KAAKu5D,IAAKv5D,KAAK05D,KAC1B15D,KAAK42D,MAAM52D,KAAKw5D,IAAKx5D,KAAK25D,KAC1B35D,KAAK42D,MAAM52D,KAAKy5D,IAAKz5D,KAAK45D,OAKhChD,MAAO,SAAAA,MAASz6B,EAAG34B,GAEjB,OADA24B,GAAKA,EAAG34B,GAAKA,EACLxD,KAAK02D,QACX,KAAK,EAAG12D,KAAK02D,OAAS,EAAG12D,KAAKu5D,IAAMp9B,EAAGn8B,KAAK05D,IAAMl2D,EAAG,MACrD,KAAK,EAAGxD,KAAK02D,OAAS,EAAG12D,KAAKw5D,IAAMr9B,EAAGn8B,KAAK25D,IAAMn2D,EAAG,MACrD,KAAK,EAAGxD,KAAK02D,OAAS,EAAG12D,KAAKy5D,IAAMt9B,EAAGn8B,KAAK45D,IAAMp2D,EAAGxD,KAAKy6B,SAAS03B,QAAQnyD,KAAK+xD,IAAM,EAAI/xD,KAAKiyD,IAAM91B,GAAK,GAAIn8B,KAAKgyD,IAAM,EAAIhyD,KAAKkyD,IAAM1uD,GAAK,GAAI,MACjJ,QAASozD,OAAM52D,KAAMm8B,EAAG34B,GAE1BxD,KAAK+xD,IAAM/xD,KAAKiyD,IAAKjyD,KAAKiyD,IAAM91B,EAChCn8B,KAAKgyD,IAAMhyD,KAAKkyD,IAAKlyD,KAAKkyD,IAAM1uD,IC3CpC,SAASq2D,UAAUn/B,SACjB16B,KAAKy6B,SAAWC,QAGlBm/B,UAAUx/D,WACRi8D,UAAW,SAAAA,YACTt2D,KAAKu2D,MAAQ,GAEfC,QAAS,SAAAA,UACPx2D,KAAKu2D,MAAQ7yB,KAEf+yB,UAAW,SAAAA,YACTz2D,KAAK+xD,IAAM/xD,KAAKiyD,IAChBjyD,KAAKgyD,IAAMhyD,KAAKkyD,IAAMxuB,IACtB1jC,KAAK02D,OAAS,GAEhBC,QAAS,SAAAA,WACH32D,KAAKu2D,OAAyB,IAAfv2D,KAAKu2D,OAA+B,IAAhBv2D,KAAK02D,SAAe12D,KAAKy6B,SAAS23B,YACzEpyD,KAAKu2D,MAAQ,EAAIv2D,KAAKu2D,OAExBK,MAAO,SAAAA,MAASz6B,EAAG34B,GAEjB,OADA24B,GAAKA,EAAG34B,GAAKA,EACLxD,KAAK02D,QACX,KAAK,EAAG12D,KAAK02D,OAAS,EAAG,MACzB,KAAK,EAAG12D,KAAK02D,OAAS,EAAG,MACzB,KAAK,EAAG12D,KAAK02D,OAAS,EAAG,IAAI7W,IAAM7/C,KAAK+xD,IAAM,EAAI/xD,KAAKiyD,IAAM91B,GAAK,EAAGy2B,IAAM5yD,KAAKgyD,IAAM,EAAIhyD,KAAKkyD,IAAM1uD,GAAK,EAAGxD,KAAKu2D,MAAQv2D,KAAKy6B,SAAS43B,OAAOxS,GAAI+S,IAAM5yD,KAAKy6B,SAAS03B,OAAOtS,GAAI+S,IAAK,MACvL,KAAK,EAAG5yD,KAAK02D,OAAS,EACtB,QAASE,OAAM52D,KAAMm8B,EAAG34B,GAE1BxD,KAAK+xD,IAAM/xD,KAAKiyD,IAAKjyD,KAAKiyD,IAAM91B,EAChCn8B,KAAKgyD,IAAMhyD,KAAKkyD,IAAKlyD,KAAKkyD,IAAM1uD,IC9BpC,SAASs2D,OAAOp/B,QAASq/B,MACvB/5D,KAAKg6D,OAAS,IAAIX,MAAM3+B,SACxB16B,KAAKi6D,MAAQF,KAGfD,OAAOz/D,WACLo8D,UAAW,SAAAA,YACTz2D,KAAKk6D,MACLl6D,KAAKm6D,MACLn6D,KAAKg6D,OAAOvD,aAEdE,QAAS,SAAAA,UACP,IAAIx6B,EAAIn8B,KAAKk6D,GACT12D,EAAIxD,KAAKm6D,GACTt/C,EAAIshB,EAAEz6B,OAAS,EAEnB,GAAImZ,EAAI,EAQN,IAPA,IAKIphB,EALAomD,GAAK1jB,EAAE,GACPy2B,GAAKpvD,EAAE,GACPswD,GAAK33B,EAAEthB,GAAKglC,GACZkU,GAAKvwD,EAAEqX,GAAK+3C,GACZr6D,GAAK,IAGAA,GAAKsiB,GACZphB,EAAIlB,EAAIsiB,EACR7a,KAAKg6D,OAAOpD,MACV52D,KAAKi6D,MAAQ99B,EAAE5jC,IAAM,EAAIyH,KAAKi6D,QAAUpa,GAAKpmD,EAAIq6D,IACjD9zD,KAAKi6D,MAAQz2D,EAAEjL,IAAM,EAAIyH,KAAKi6D,QAAUrH,GAAKn5D,EAAIs6D,KAKvD/zD,KAAKk6D,GAAKl6D,KAAKm6D,GAAK,KACpBn6D,KAAKg6D,OAAOrD,WAEdC,MAAO,SAAAA,MAASz6B,EAAG34B,GACjBxD,KAAKk6D,GAAGh0D,MAAMi2B,GACdn8B,KAAKm6D,GAAGj0D,MAAM1C,MAIH,SAAU42D,OAAOL,MAE9B,SAASM,OAAO3/B,SACd,OAAgB,IAATq/B,KAAa,IAAIV,MAAM3+B,SAAW,IAAIo/B,OAAOp/B,QAASq/B,MAO/D,OAJAM,OAAON,KAAO,SAASA,MACrB,OAAOK,QAAQL,OAGVM,QAVM,CAWZ,KCvDI,SAASzD,eAAMwC,KAAMj9B,EAAG34B,GAC7B41D,KAAK3+B,SAAS+3B,cACZ4G,KAAKnH,IAAMmH,KAAKkB,IAAMlB,KAAKG,IAAMH,KAAKrH,KACtCqH,KAAKlH,IAAMkH,KAAKkB,IAAMlB,KAAKM,IAAMN,KAAKpH,KACtCoH,KAAKG,IAAMH,KAAKkB,IAAMlB,KAAKnH,IAAM91B,GACjCi9B,KAAKM,IAAMN,KAAKkB,IAAMlB,KAAKlH,IAAM1uD,GACjC41D,KAAKG,IACLH,KAAKM,KAIF,SAASa,SAAS7/B,QAAS8/B,SAChCx6D,KAAKy6B,SAAWC,QAChB16B,KAAKs6D,IAAM,EAAIE,SAAW,EAG5BD,SAASlgE,WACPi8D,UAAW,SAAAA,YACTt2D,KAAKu2D,MAAQ,GAEfC,QAAS,SAAAA,UACPx2D,KAAKu2D,MAAQ7yB,KAEf+yB,UAAW,SAAAA,YACTz2D,KAAK+xD,IAAM/xD,KAAKiyD,IAAMjyD,KAAKu5D,IAC3Bv5D,KAAKgyD,IAAMhyD,KAAKkyD,IAAMlyD,KAAK05D,IAAMh2B,IACjC1jC,KAAK02D,OAAS,GAEhBC,QAAS,SAAAA,UACP,OAAQ32D,KAAK02D,QACX,KAAK,EAAG12D,KAAKy6B,SAAS43B,OAAOryD,KAAKu5D,IAAKv5D,KAAK05D,KAAM,MAClD,KAAK,EAAG9C,eAAM52D,KAAMA,KAAKiyD,IAAKjyD,KAAKkyD,MAEjClyD,KAAKu2D,OAAyB,IAAfv2D,KAAKu2D,OAA+B,IAAhBv2D,KAAK02D,SAAe12D,KAAKy6B,SAAS23B,YACzEpyD,KAAKu2D,MAAQ,EAAIv2D,KAAKu2D,OAExBK,MAAO,SAAAA,MAASz6B,EAAG34B,GAEjB,OADA24B,GAAKA,EAAG34B,GAAKA,EACLxD,KAAK02D,QACX,KAAK,EAAG12D,KAAK02D,OAAS,EAAG12D,KAAKu2D,MAAQv2D,KAAKy6B,SAAS43B,OAAOl2B,EAAG34B,GAAKxD,KAAKy6B,SAAS03B,OAAOh2B,EAAG34B,GAAI,MAC/F,KAAK,EAAGxD,KAAK02D,OAAS,EAAG12D,KAAKiyD,IAAM91B,EAAGn8B,KAAKkyD,IAAM1uD,EAAG,MACrD,KAAK,EAAGxD,KAAK02D,OAAS,EACtB,QAASE,eAAM52D,KAAMm8B,EAAG34B,GAE1BxD,KAAK+xD,IAAM/xD,KAAKiyD,IAAKjyD,KAAKiyD,IAAMjyD,KAAKu5D,IAAKv5D,KAAKu5D,IAAMp9B,EACrDn8B,KAAKgyD,IAAMhyD,KAAKkyD,IAAKlyD,KAAKkyD,IAAMlyD,KAAK05D,IAAK15D,KAAK05D,IAAMl2D,KAI1C,SAAU42D,OAAOI,SAE9B,SAASC,SAAS//B,SAChB,OAAO,IAAI6/B,SAAS7/B,QAAS8/B,SAO/B,OAJAC,SAASD,QAAU,SAASA,SAC1B,OAAOJ,QAAQI,UAGVC,UAVM,CAWZ,GCzDI,SAASC,eAAehgC,QAAS8/B,SACtCx6D,KAAKy6B,SAAWC,QAChB16B,KAAKs6D,IAAM,EAAIE,SAAW,EAG5BE,eAAergE,WACbi8D,UAAW6C,KACX3C,QAAS2C,KACT1C,UAAW,SAAAA,YACTz2D,KAAK+xD,IAAM/xD,KAAKiyD,IAAMjyD,KAAKu5D,IAAMv5D,KAAKw5D,IAAMx5D,KAAKy5D,IAAMz5D,KAAK26D,IAC5D36D,KAAKgyD,IAAMhyD,KAAKkyD,IAAMlyD,KAAK05D,IAAM15D,KAAK25D,IAAM35D,KAAK45D,IAAM55D,KAAK46D,IAAMl3B,IAClE1jC,KAAK02D,OAAS,GAEhBC,QAAS,SAAAA,UACP,OAAQ32D,KAAK02D,QACX,KAAK,EACH12D,KAAKy6B,SAAS03B,OAAOnyD,KAAKw5D,IAAKx5D,KAAK25D,KACpC35D,KAAKy6B,SAAS23B,YACd,MAEF,KAAK,EACHpyD,KAAKy6B,SAAS43B,OAAOryD,KAAKw5D,IAAKx5D,KAAK25D,KACpC35D,KAAKy6B,SAAS23B,YACd,MAEF,KAAK,EACHpyD,KAAK42D,MAAM52D,KAAKw5D,IAAKx5D,KAAK25D,KAC1B35D,KAAK42D,MAAM52D,KAAKy5D,IAAKz5D,KAAK45D,KAC1B55D,KAAK42D,MAAM52D,KAAK26D,IAAK36D,KAAK46D,OAKhChE,MAAO,SAAAA,MAASz6B,EAAG34B,GAEjB,OADA24B,GAAKA,EAAG34B,GAAKA,EACLxD,KAAK02D,QACX,KAAK,EAAG12D,KAAK02D,OAAS,EAAG12D,KAAKw5D,IAAMr9B,EAAGn8B,KAAK25D,IAAMn2D,EAAG,MACrD,KAAK,EAAGxD,KAAK02D,OAAS,EAAG12D,KAAKy6B,SAAS03B,OAAOnyD,KAAKy5D,IAAMt9B,EAAGn8B,KAAK45D,IAAMp2D,GAAI,MAC3E,KAAK,EAAGxD,KAAK02D,OAAS,EAAG12D,KAAK26D,IAAMx+B,EAAGn8B,KAAK46D,IAAMp3D,EAAG,MACrD,QAASozD,eAAM52D,KAAMm8B,EAAG34B,GAE1BxD,KAAK+xD,IAAM/xD,KAAKiyD,IAAKjyD,KAAKiyD,IAAMjyD,KAAKu5D,IAAKv5D,KAAKu5D,IAAMp9B,EACrDn8B,KAAKgyD,IAAMhyD,KAAKkyD,IAAKlyD,KAAKkyD,IAAMlyD,KAAK05D,IAAK15D,KAAK05D,IAAMl2D,KAI1C,SAAU42D,OAAOI,SAE9B,SAASC,SAAS//B,SAChB,OAAO,IAAIggC,eAAehgC,QAAS8/B,SAOrC,OAJAC,SAASD,QAAU,SAASA,SAC1B,OAAOJ,QAAQI,UAGVC,UAVM,CAWZ,GC1DI,SAASI,aAAangC,QAAS8/B,SACpCx6D,KAAKy6B,SAAWC,QAChB16B,KAAKs6D,IAAM,EAAIE,SAAW,EAG5BK,aAAaxgE,WACXi8D,UAAW,SAAAA,YACTt2D,KAAKu2D,MAAQ,GAEfC,QAAS,SAAAA,UACPx2D,KAAKu2D,MAAQ7yB,KAEf+yB,UAAW,SAAAA,YACTz2D,KAAK+xD,IAAM/xD,KAAKiyD,IAAMjyD,KAAKu5D,IAC3Bv5D,KAAKgyD,IAAMhyD,KAAKkyD,IAAMlyD,KAAK05D,IAAMh2B,IACjC1jC,KAAK02D,OAAS,GAEhBC,QAAS,SAAAA,WACH32D,KAAKu2D,OAAyB,IAAfv2D,KAAKu2D,OAA+B,IAAhBv2D,KAAK02D,SAAe12D,KAAKy6B,SAAS23B,YACzEpyD,KAAKu2D,MAAQ,EAAIv2D,KAAKu2D,OAExBK,MAAO,SAAAA,MAASz6B,EAAG34B,GAEjB,OADA24B,GAAKA,EAAG34B,GAAKA,EACLxD,KAAK02D,QACX,KAAK,EAAG12D,KAAK02D,OAAS,EAAG,MACzB,KAAK,EAAG12D,KAAK02D,OAAS,EAAG,MACzB,KAAK,EAAG12D,KAAK02D,OAAS,EAAG12D,KAAKu2D,MAAQv2D,KAAKy6B,SAAS43B,OAAOryD,KAAKu5D,IAAKv5D,KAAK05D,KAAO15D,KAAKy6B,SAAS03B,OAAOnyD,KAAKu5D,IAAKv5D,KAAK05D,KAAM,MAC3H,KAAK,EAAG15D,KAAK02D,OAAS,EACtB,QAASE,eAAM52D,KAAMm8B,EAAG34B,GAE1BxD,KAAK+xD,IAAM/xD,KAAKiyD,IAAKjyD,KAAKiyD,IAAMjyD,KAAKu5D,IAAKv5D,KAAKu5D,IAAMp9B,EACrDn8B,KAAKgyD,IAAMhyD,KAAKkyD,IAAKlyD,KAAKkyD,IAAMlyD,KAAK05D,IAAK15D,KAAK05D,IAAMl2D,KAI1C,SAAU42D,OAAOI,SAE9B,SAASC,SAAS//B,SAChB,OAAO,IAAImgC,aAAangC,QAAS8/B,SAOnC,OAJAC,SAASD,QAAU,SAASA,SAC1B,OAAOJ,QAAQI,UAGVC,UAVM,CAWZ,GC7CI,SAAS7D,iBAAMwC,KAAMj9B,EAAG34B,GAC7B,IAAIs8C,GAAKsZ,KAAKnH,IACVM,GAAK6G,KAAKlH,IACVO,GAAK2G,KAAKG,IACV7G,GAAK0G,KAAKM,IAEd,GAAIN,KAAK0B,OAAS/K,aAAS,CACzB,IAAIp1D,EAAI,EAAIy+D,KAAK2B,QAAU,EAAI3B,KAAK0B,OAAS1B,KAAK4B,OAAS5B,KAAK6B,QAC5DjhE,EAAI,EAAIo/D,KAAK0B,QAAU1B,KAAK0B,OAAS1B,KAAK4B,QAC9Clb,IAAMA,GAAKnlD,EAAIy+D,KAAKrH,IAAMqH,KAAK6B,QAAU7B,KAAKG,IAAMH,KAAK2B,SAAW/gE,EACpEu4D,IAAMA,GAAK53D,EAAIy+D,KAAKpH,IAAMoH,KAAK6B,QAAU7B,KAAKM,IAAMN,KAAK2B,SAAW/gE,EAGtE,GAAIo/D,KAAK8B,OAASnL,aAAS,CACzB,IAAI3sD,EAAI,EAAIg2D,KAAK+B,QAAU,EAAI/B,KAAK8B,OAAS9B,KAAK4B,OAAS5B,KAAK6B,QAC5DtiE,EAAI,EAAIygE,KAAK8B,QAAU9B,KAAK8B,OAAS9B,KAAK4B,QAC9CvI,IAAMA,GAAKrvD,EAAIg2D,KAAKnH,IAAMmH,KAAK+B,QAAUh/B,EAAIi9B,KAAK6B,SAAWtiE,EAC7D+5D,IAAMA,GAAKtvD,EAAIg2D,KAAKlH,IAAMkH,KAAK+B,QAAU33D,EAAI41D,KAAK6B,SAAWtiE,EAG/DygE,KAAK3+B,SAAS+3B,cAAc1S,GAAIyS,GAAIE,GAAIC,GAAI0G,KAAKG,IAAKH,KAAKM,KAG7D,SAAS0B,WAAW1gC,QAAS2gC,OAC3Br7D,KAAKy6B,SAAWC,QAChB16B,KAAKs7D,OAASD,MAGhBD,WAAW/gE,WACTi8D,UAAW,SAAAA,YACTt2D,KAAKu2D,MAAQ,GAEfC,QAAS,SAAAA,UACPx2D,KAAKu2D,MAAQ7yB,KAEf+yB,UAAW,SAAAA,YACTz2D,KAAK+xD,IAAM/xD,KAAKiyD,IAAMjyD,KAAKu5D,IAC3Bv5D,KAAKgyD,IAAMhyD,KAAKkyD,IAAMlyD,KAAK05D,IAAMh2B,IACjC1jC,KAAK86D,OAAS96D,KAAKg7D,OAASh7D,KAAKk7D,OACjCl7D,KAAK+6D,QAAU/6D,KAAKi7D,QAAUj7D,KAAKm7D,QACnCn7D,KAAK02D,OAAS,GAEhBC,QAAS,SAAAA,UACP,OAAQ32D,KAAK02D,QACX,KAAK,EAAG12D,KAAKy6B,SAAS43B,OAAOryD,KAAKu5D,IAAKv5D,KAAK05D,KAAM,MAClD,KAAK,EAAG15D,KAAK42D,MAAM52D,KAAKu5D,IAAKv5D,KAAK05D,MAEhC15D,KAAKu2D,OAAyB,IAAfv2D,KAAKu2D,OAA+B,IAAhBv2D,KAAK02D,SAAe12D,KAAKy6B,SAAS23B,YACzEpyD,KAAKu2D,MAAQ,EAAIv2D,KAAKu2D,OAExBK,MAAO,SAAAA,MAASz6B,EAAG34B,GAGjB,GAFA24B,GAAKA,EAAG34B,GAAKA,EAETxD,KAAK02D,OAAQ,CACf,IAAI6E,IAAMv7D,KAAKu5D,IAAMp9B,EACjBq/B,IAAMx7D,KAAK05D,IAAMl2D,EACrBxD,KAAKk7D,OAASr3D,KAAKkQ,KAAK/T,KAAKm7D,QAAUt3D,KAAKoQ,IAAIsnD,IAAMA,IAAMC,IAAMA,IAAKx7D,KAAKs7D,SAG9E,OAAQt7D,KAAK02D,QACX,KAAK,EAAG12D,KAAK02D,OAAS,EAAG12D,KAAKu2D,MAAQv2D,KAAKy6B,SAAS43B,OAAOl2B,EAAG34B,GAAKxD,KAAKy6B,SAAS03B,OAAOh2B,EAAG34B,GAAI,MAC/F,KAAK,EAAGxD,KAAK02D,OAAS,EAAG,MACzB,KAAK,EAAG12D,KAAK02D,OAAS,EACtB,QAASE,iBAAM52D,KAAMm8B,EAAG34B,GAG1BxD,KAAK86D,OAAS96D,KAAKg7D,OAAQh7D,KAAKg7D,OAASh7D,KAAKk7D,OAC9Cl7D,KAAK+6D,QAAU/6D,KAAKi7D,QAASj7D,KAAKi7D,QAAUj7D,KAAKm7D,QACjDn7D,KAAK+xD,IAAM/xD,KAAKiyD,IAAKjyD,KAAKiyD,IAAMjyD,KAAKu5D,IAAKv5D,KAAKu5D,IAAMp9B,EACrDn8B,KAAKgyD,IAAMhyD,KAAKkyD,IAAKlyD,KAAKkyD,IAAMlyD,KAAK05D,IAAK15D,KAAK05D,IAAMl2D,IAI1C,IAAAi4D,iBAAA,SAAUrB,OAAOiB,OAE9B,SAASK,WAAWhhC,SAClB,OAAO2gC,MAAQ,IAAID,WAAW1gC,QAAS2gC,OAAS,IAAId,SAAS7/B,QAAS,GAOxE,OAJAghC,WAAWL,MAAQ,SAASA,OAC1B,OAAOjB,QAAQiB,QAGVK,WAVM,CAWZ,ICnFH,SAASC,iBAAiBjhC,QAAS2gC,OACjCr7D,KAAKy6B,SAAWC,QAChB16B,KAAKs7D,OAASD,MAGhBM,iBAAiBthE,WACfi8D,UAAW6C,KACX3C,QAAS2C,KACT1C,UAAW,SAAAA,YACTz2D,KAAK+xD,IAAM/xD,KAAKiyD,IAAMjyD,KAAKu5D,IAAMv5D,KAAKw5D,IAAMx5D,KAAKy5D,IAAMz5D,KAAK26D,IAC5D36D,KAAKgyD,IAAMhyD,KAAKkyD,IAAMlyD,KAAK05D,IAAM15D,KAAK25D,IAAM35D,KAAK45D,IAAM55D,KAAK46D,IAAMl3B,IAClE1jC,KAAK86D,OAAS96D,KAAKg7D,OAASh7D,KAAKk7D,OACjCl7D,KAAK+6D,QAAU/6D,KAAKi7D,QAAUj7D,KAAKm7D,QACnCn7D,KAAK02D,OAAS,GAEhBC,QAAS,SAAAA,UACP,OAAQ32D,KAAK02D,QACX,KAAK,EACH12D,KAAKy6B,SAAS03B,OAAOnyD,KAAKw5D,IAAKx5D,KAAK25D,KACpC35D,KAAKy6B,SAAS23B,YACd,MAEF,KAAK,EACHpyD,KAAKy6B,SAAS43B,OAAOryD,KAAKw5D,IAAKx5D,KAAK25D,KACpC35D,KAAKy6B,SAAS23B,YACd,MAEF,KAAK,EACHpyD,KAAK42D,MAAM52D,KAAKw5D,IAAKx5D,KAAK25D,KAC1B35D,KAAK42D,MAAM52D,KAAKy5D,IAAKz5D,KAAK45D,KAC1B55D,KAAK42D,MAAM52D,KAAK26D,IAAK36D,KAAK46D,OAKhChE,MAAO,SAAAA,MAASz6B,EAAG34B,GAGjB,GAFA24B,GAAKA,EAAG34B,GAAKA,EAETxD,KAAK02D,OAAQ,CACf,IAAI6E,IAAMv7D,KAAKu5D,IAAMp9B,EACjBq/B,IAAMx7D,KAAK05D,IAAMl2D,EACrBxD,KAAKk7D,OAASr3D,KAAKkQ,KAAK/T,KAAKm7D,QAAUt3D,KAAKoQ,IAAIsnD,IAAMA,IAAMC,IAAMA,IAAKx7D,KAAKs7D,SAG9E,OAAQt7D,KAAK02D,QACX,KAAK,EAAG12D,KAAK02D,OAAS,EAAG12D,KAAKw5D,IAAMr9B,EAAGn8B,KAAK25D,IAAMn2D,EAAG,MACrD,KAAK,EAAGxD,KAAK02D,OAAS,EAAG12D,KAAKy6B,SAAS03B,OAAOnyD,KAAKy5D,IAAMt9B,EAAGn8B,KAAK45D,IAAMp2D,GAAI,MAC3E,KAAK,EAAGxD,KAAK02D,OAAS,EAAG12D,KAAK26D,IAAMx+B,EAAGn8B,KAAK46D,IAAMp3D,EAAG,MACrD,QAASozD,iBAAM52D,KAAMm8B,EAAG34B,GAG1BxD,KAAK86D,OAAS96D,KAAKg7D,OAAQh7D,KAAKg7D,OAASh7D,KAAKk7D,OAC9Cl7D,KAAK+6D,QAAU/6D,KAAKi7D,QAASj7D,KAAKi7D,QAAUj7D,KAAKm7D,QACjDn7D,KAAK+xD,IAAM/xD,KAAKiyD,IAAKjyD,KAAKiyD,IAAMjyD,KAAKu5D,IAAKv5D,KAAKu5D,IAAMp9B,EACrDn8B,KAAKgyD,IAAMhyD,KAAKkyD,IAAKlyD,KAAKkyD,IAAMlyD,KAAK05D,IAAK15D,KAAK05D,IAAMl2D,KAI1C,SAAU42D,OAAOiB,OAE9B,SAASK,WAAWhhC,SAClB,OAAO2gC,MAAQ,IAAIM,iBAAiBjhC,QAAS2gC,OAAS,IAAIX,eAAehgC,QAAS,GAOpF,OAJAghC,WAAWL,MAAQ,SAASA,OAC1B,OAAOjB,QAAQiB,QAGVK,YAVM,CAWZ,ICtEH,SAASE,eAAelhC,QAAS2gC,OAC/Br7D,KAAKy6B,SAAWC,QAChB16B,KAAKs7D,OAASD,MAGhBO,eAAevhE,WACbi8D,UAAW,SAAAA,YACTt2D,KAAKu2D,MAAQ,GAEfC,QAAS,SAAAA,UACPx2D,KAAKu2D,MAAQ7yB,KAEf+yB,UAAW,SAAAA,YACTz2D,KAAK+xD,IAAM/xD,KAAKiyD,IAAMjyD,KAAKu5D,IAC3Bv5D,KAAKgyD,IAAMhyD,KAAKkyD,IAAMlyD,KAAK05D,IAAMh2B,IACjC1jC,KAAK86D,OAAS96D,KAAKg7D,OAASh7D,KAAKk7D,OACjCl7D,KAAK+6D,QAAU/6D,KAAKi7D,QAAUj7D,KAAKm7D,QACnCn7D,KAAK02D,OAAS,GAEhBC,QAAS,SAAAA,WACH32D,KAAKu2D,OAAyB,IAAfv2D,KAAKu2D,OAA+B,IAAhBv2D,KAAK02D,SAAe12D,KAAKy6B,SAAS23B,YACzEpyD,KAAKu2D,MAAQ,EAAIv2D,KAAKu2D,OAExBK,MAAO,SAAAA,MAASz6B,EAAG34B,GAGjB,GAFA24B,GAAKA,EAAG34B,GAAKA,EAETxD,KAAK02D,OAAQ,CACf,IAAI6E,IAAMv7D,KAAKu5D,IAAMp9B,EACjBq/B,IAAMx7D,KAAK05D,IAAMl2D,EACrBxD,KAAKk7D,OAASr3D,KAAKkQ,KAAK/T,KAAKm7D,QAAUt3D,KAAKoQ,IAAIsnD,IAAMA,IAAMC,IAAMA,IAAKx7D,KAAKs7D,SAG9E,OAAQt7D,KAAK02D,QACX,KAAK,EAAG12D,KAAK02D,OAAS,EAAG,MACzB,KAAK,EAAG12D,KAAK02D,OAAS,EAAG,MACzB,KAAK,EAAG12D,KAAK02D,OAAS,EAAG12D,KAAKu2D,MAAQv2D,KAAKy6B,SAAS43B,OAAOryD,KAAKu5D,IAAKv5D,KAAK05D,KAAO15D,KAAKy6B,SAAS03B,OAAOnyD,KAAKu5D,IAAKv5D,KAAK05D,KAAM,MAC3H,KAAK,EAAG15D,KAAK02D,OAAS,EACtB,QAASE,iBAAM52D,KAAMm8B,EAAG34B,GAG1BxD,KAAK86D,OAAS96D,KAAKg7D,OAAQh7D,KAAKg7D,OAASh7D,KAAKk7D,OAC9Cl7D,KAAK+6D,QAAU/6D,KAAKi7D,QAASj7D,KAAKi7D,QAAUj7D,KAAKm7D,QACjDn7D,KAAK+xD,IAAM/xD,KAAKiyD,IAAKjyD,KAAKiyD,IAAMjyD,KAAKu5D,IAAKv5D,KAAKu5D,IAAMp9B,EACrDn8B,KAAKgyD,IAAMhyD,KAAKkyD,IAAKlyD,KAAKkyD,IAAMlyD,KAAK05D,IAAK15D,KAAK05D,IAAMl2D,KAI1C,SAAU42D,OAAOiB,OAE9B,SAASK,WAAWhhC,SAClB,OAAO2gC,MAAQ,IAAIO,eAAelhC,QAAS2gC,OAAS,IAAIR,aAAangC,QAAS,GAOhF,OAJAghC,WAAWL,MAAQ,SAASA,OAC1B,OAAOjB,QAAQiB,QAGVK,YAVM,CAWZ,IC3DH,SAASG,aAAanhC,SACpB16B,KAAKy6B,SAAWC,QAGlBmhC,aAAaxhE,WACXi8D,UAAW6C,KACX3C,QAAS2C,KACT1C,UAAW,SAAAA,YACTz2D,KAAK02D,OAAS,GAEhBC,QAAS,SAAAA,UACH32D,KAAK02D,QAAQ12D,KAAKy6B,SAAS23B,aAEjCwE,MAAO,SAAAA,MAASz6B,EAAG34B,GACjB24B,GAAKA,EAAG34B,GAAKA,EACTxD,KAAK02D,OAAQ12D,KAAKy6B,SAAS43B,OAAOl2B,EAAG34B,IACpCxD,KAAK02D,OAAS,EAAG12D,KAAKy6B,SAAS03B,OAAOh2B,EAAG34B,MClBlD,SAASo5C,cAAKzgB,GACZ,OAAOA,EAAI,GAAK,EAAI,EAOtB,SAAS2/B,OAAO1C,KAAM3G,GAAIC,IACxB,IAAIqJ,GAAK3C,KAAKnH,IAAMmH,KAAKrH,IACrBiK,GAAKvJ,GAAK2G,KAAKnH,IACfgK,IAAM7C,KAAKlH,IAAMkH,KAAKpH,MAAQ+J,IAAMC,GAAK,IAAM,GAC/C3uC,IAAMqlC,GAAK0G,KAAKlH,MAAQ8J,IAAMD,GAAK,IAAM,GACzCxhE,GAAK0hE,GAAKD,GAAK3uC,GAAK0uC,KAAOA,GAAKC,IACpC,OAAQpf,cAAKqf,IAAMrf,cAAKvvB,KAAOxpB,KAAK2P,IAAI3P,KAAKsnB,IAAI8wC,IAAKp4D,KAAKsnB,IAAIkC,IAAK,GAAMxpB,KAAKsnB,IAAI5wB,KAAO,EAI5F,SAAS2hE,OAAO9C,KAAM3/D,GACpB,IAAIiP,EAAI0wD,KAAKnH,IAAMmH,KAAKrH,IACxB,OAAOrpD,GAAK,GAAK0wD,KAAKlH,IAAMkH,KAAKpH,KAAOtpD,EAAIjP,GAAK,EAAIA,EAMvD,SAASm9D,eAAMwC,KAAMllB,GAAIC,IACvB,IAAI0L,GAAKuZ,KAAKrH,IACVa,GAAKwG,KAAKpH,IACVlS,GAAKsZ,KAAKnH,IACVM,GAAK6G,KAAKlH,IACV4B,IAAMhU,GAAKD,IAAM,EACrBuZ,KAAK3+B,SAAS+3B,cAAc3S,GAAKiU,GAAIlB,GAAKkB,GAAK5f,GAAI4L,GAAKgU,GAAIvB,GAAKuB,GAAK3f,GAAI2L,GAAIyS,IAGhF,SAAS4J,UAAUzhC,SACjB16B,KAAKy6B,SAAWC,QA0ClB,SAAS0hC,UAAU1hC,SACjB16B,KAAKy6B,SAAW,IAAI4hC,eAAe3hC,SAOrC,SAAS2hC,eAAe3hC,SACtB16B,KAAKy6B,SAAWC,QCvFlB,SAAS4hC,QAAQ5hC,SACf16B,KAAKy6B,SAAWC,QA2ClB,SAAS6hC,cAAcpgC,GACrB,IAAI5jC,EAEAI,EADAqB,EAAImiC,EAAEz6B,OAAS,EAEf/G,EAAI,IAAIkO,MAAM7O,GACdoJ,EAAI,IAAIyF,MAAM7O,GACdX,EAAI,IAAIwP,MAAM7O,GAElB,IADAW,EAAE,GAAK,EAAGyI,EAAE,GAAK,EAAG/J,EAAE,GAAK8iC,EAAE,GAAK,EAAIA,EAAE,GACnC5jC,EAAI,EAAGA,EAAIyB,EAAI,IAAKzB,EAAGoC,EAAEpC,GAAK,EAAG6K,EAAE7K,GAAK,EAAGc,EAAEd,GAAK,EAAI4jC,EAAE5jC,GAAK,EAAI4jC,EAAE5jC,EAAI,GAE5E,IADAoC,EAAEX,EAAI,GAAK,EAAGoJ,EAAEpJ,EAAI,GAAK,EAAGX,EAAEW,EAAI,GAAK,EAAImiC,EAAEniC,EAAI,GAAKmiC,EAAEniC,GACnDzB,EAAI,EAAGA,EAAIyB,IAAKzB,EAAGI,EAAIgC,EAAEpC,GAAK6K,EAAE7K,EAAI,GAAI6K,EAAE7K,IAAMI,EAAGU,EAAEd,IAAMI,EAAIU,EAAEd,EAAI,GAE1E,IADAoC,EAAEX,EAAI,GAAKX,EAAEW,EAAI,GAAKoJ,EAAEpJ,EAAI,GACvBzB,EAAIyB,EAAI,EAAGzB,GAAK,IAAKA,EAAGoC,EAAEpC,IAAMc,EAAEd,GAAKoC,EAAEpC,EAAI,IAAM6K,EAAE7K,GAE1D,IADA6K,EAAEpJ,EAAI,IAAMmiC,EAAEniC,GAAKW,EAAEX,EAAI,IAAM,EAC1BzB,EAAI,EAAGA,EAAIyB,EAAI,IAAKzB,EAAG6K,EAAE7K,GAAK,EAAI4jC,EAAE5jC,EAAI,GAAKoC,EAAEpC,EAAI,GACxD,OAAQoC,EAAGyI,GDpBb+4D,UAAU9hE,WACRi8D,UAAW,SAAAA,YACTt2D,KAAKu2D,MAAQ,GAEfC,QAAS,SAAAA,UACPx2D,KAAKu2D,MAAQ7yB,KAEf+yB,UAAW,SAAAA,YACTz2D,KAAK+xD,IAAM/xD,KAAKiyD,IAChBjyD,KAAKgyD,IAAMhyD,KAAKkyD,IAChBlyD,KAAKw8D,IAAM94B,IACX1jC,KAAK02D,OAAS,GAEhBC,QAAS,SAAAA,UACP,OAAQ32D,KAAK02D,QACX,KAAK,EAAG12D,KAAKy6B,SAAS43B,OAAOryD,KAAKiyD,IAAKjyD,KAAKkyD,KAAM,MAClD,KAAK,EAAG0E,eAAM52D,KAAMA,KAAKw8D,IAAKN,OAAOl8D,KAAMA,KAAKw8D,OAE9Cx8D,KAAKu2D,OAAyB,IAAfv2D,KAAKu2D,OAA+B,IAAhBv2D,KAAK02D,SAAe12D,KAAKy6B,SAAS23B,YACzEpyD,KAAKu2D,MAAQ,EAAIv2D,KAAKu2D,OAExBK,MAAO,SAAAA,MAASz6B,EAAG34B,GACjB,IAAI2wC,GAAKzQ,IAGT,GADQlgC,GAAKA,GAAb24B,GAAKA,KACKn8B,KAAKiyD,KAAOzuD,IAAMxD,KAAKkyD,IAAjC,CACA,OAAQlyD,KAAK02D,QACX,KAAK,EAAG12D,KAAK02D,OAAS,EAAG12D,KAAKu2D,MAAQv2D,KAAKy6B,SAAS43B,OAAOl2B,EAAG34B,GAAKxD,KAAKy6B,SAAS03B,OAAOh2B,EAAG34B,GAAI,MAC/F,KAAK,EAAGxD,KAAK02D,OAAS,EAAG,MACzB,KAAK,EAAG12D,KAAK02D,OAAS,EAAGE,eAAM52D,KAAMk8D,OAAOl8D,KAAMm0C,GAAK2nB,OAAO97D,KAAMm8B,EAAG34B,IAAK2wC,IAAK,MACjF,QAASyiB,eAAM52D,KAAMA,KAAKw8D,IAAKroB,GAAK2nB,OAAO97D,KAAMm8B,EAAG34B,IAGtDxD,KAAK+xD,IAAM/xD,KAAKiyD,IAAKjyD,KAAKiyD,IAAM91B,EAChCn8B,KAAKgyD,IAAMhyD,KAAKkyD,IAAKlyD,KAAKkyD,IAAM1uD,EAChCxD,KAAKw8D,IAAMroB,OAQdioB,UAAU/hE,UAAYpB,OAAOY,OAAOsiE,UAAU9hE,YAAYu8D,MAAQ,SAASz6B,EAAG34B,GAC7E24D,UAAU9hE,UAAUu8D,MAAMl+D,KAAKsH,KAAMwD,EAAG24B,IAO1CkgC,eAAehiE,WACb83D,OAAQ,SAAAA,OAASh2B,EAAG34B,GAAKxD,KAAKy6B,SAAS03B,OAAO3uD,EAAG24B,IACjDi2B,UAAW,SAAAA,YAAapyD,KAAKy6B,SAAS23B,aACtCC,OAAQ,SAAAA,OAASl2B,EAAG34B,GAAKxD,KAAKy6B,SAAS43B,OAAO7uD,EAAG24B,IACjDq2B,cAAe,SAAAA,cAAS1S,GAAIyS,GAAIE,GAAIC,GAAIv2B,EAAG34B,GAAKxD,KAAKy6B,SAAS+3B,cAAcD,GAAIzS,GAAI4S,GAAID,GAAIjvD,EAAG24B,KC1FjGmgC,QAAQjiE,WACNi8D,UAAW,SAAAA,YACTt2D,KAAKu2D,MAAQ,GAEfC,QAAS,SAAAA,UACPx2D,KAAKu2D,MAAQ7yB,KAEf+yB,UAAW,SAAAA,YACTz2D,KAAKk6D,MACLl6D,KAAKm6D,OAEPxD,QAAS,SAAAA,UACP,IAAIx6B,EAAIn8B,KAAKk6D,GACT12D,EAAIxD,KAAKm6D,GACTngE,EAAImiC,EAAEz6B,OAEV,GAAI1H,EAEF,GADAgG,KAAKu2D,MAAQv2D,KAAKy6B,SAAS43B,OAAOl2B,EAAE,GAAI34B,EAAE,IAAMxD,KAAKy6B,SAAS03B,OAAOh2B,EAAE,GAAI34B,EAAE,IACnE,IAANxJ,EACFgG,KAAKy6B,SAAS43B,OAAOl2B,EAAE,GAAI34B,EAAE,SAI7B,IAFA,IAAIi5D,GAAKF,cAAcpgC,GACnBugC,GAAKH,cAAc/4D,GACd6hC,GAAK,EAAGgY,GAAK,EAAGA,GAAKrjD,IAAKqrC,KAAMgY,GACvCr9C,KAAKy6B,SAAS+3B,cAAciK,GAAG,GAAGp3B,IAAKq3B,GAAG,GAAGr3B,IAAKo3B,GAAG,GAAGp3B,IAAKq3B,GAAG,GAAGr3B,IAAKlJ,EAAEkhB,IAAK75C,EAAE65C,MAKnFr9C,KAAKu2D,OAAyB,IAAfv2D,KAAKu2D,OAAqB,IAANv8D,IAAUgG,KAAKy6B,SAAS23B,YAC/DpyD,KAAKu2D,MAAQ,EAAIv2D,KAAKu2D,MACtBv2D,KAAKk6D,GAAKl6D,KAAKm6D,GAAK,MAEtBvD,MAAO,SAAAA,MAASz6B,EAAG34B,GACjBxD,KAAKk6D,GAAGh0D,MAAMi2B,GACdn8B,KAAKm6D,GAAGj0D,MAAM1C,KCvClB,SAASm5D,KAAKjiC,QAASjhC,GACrBuG,KAAKy6B,SAAWC,QAChB16B,KAAK48D,GAAKnjE,EAGZkjE,KAAKtiE,WACHi8D,UAAW,SAAAA,YACTt2D,KAAKu2D,MAAQ,GAEfC,QAAS,SAAAA,UACPx2D,KAAKu2D,MAAQ7yB,KAEf+yB,UAAW,SAAAA,YACTz2D,KAAKk6D,GAAKl6D,KAAKm6D,GAAKz2B,IACpB1jC,KAAK02D,OAAS,GAEhBC,QAAS,SAAAA,UACH,EAAI32D,KAAK48D,IAAM58D,KAAK48D,GAAK,GAAqB,IAAhB58D,KAAK02D,QAAc12D,KAAKy6B,SAAS43B,OAAOryD,KAAKk6D,GAAIl6D,KAAKm6D,KACpFn6D,KAAKu2D,OAAyB,IAAfv2D,KAAKu2D,OAA+B,IAAhBv2D,KAAK02D,SAAe12D,KAAKy6B,SAAS23B,YACrEpyD,KAAKu2D,OAAS,IAAGv2D,KAAK48D,GAAK,EAAI58D,KAAK48D,GAAI58D,KAAKu2D,MAAQ,EAAIv2D,KAAKu2D,QAEpEK,MAAO,SAAAA,MAASz6B,EAAG34B,GAEjB,OADA24B,GAAKA,EAAG34B,GAAKA,EACLxD,KAAK02D,QACX,KAAK,EAAG12D,KAAK02D,OAAS,EAAG12D,KAAKu2D,MAAQv2D,KAAKy6B,SAAS43B,OAAOl2B,EAAG34B,GAAKxD,KAAKy6B,SAAS03B,OAAOh2B,EAAG34B,GAAI,MAC/F,KAAK,EAAGxD,KAAK02D,OAAS,EACtB,QACE,GAAI12D,KAAK48D,IAAM,EACb58D,KAAKy6B,SAAS43B,OAAOryD,KAAKk6D,GAAI12D,GAC9BxD,KAAKy6B,SAAS43B,OAAOl2B,EAAG34B,OACnB,CACL,IAAIs8C,GAAK9/C,KAAKk6D,IAAM,EAAIl6D,KAAK48D,IAAMzgC,EAAIn8B,KAAK48D,GAC5C58D,KAAKy6B,SAAS43B,OAAOvS,GAAI9/C,KAAKm6D,IAC9Bn6D,KAAKy6B,SAAS43B,OAAOvS,GAAIt8C,IAK/BxD,KAAKk6D,GAAK/9B,EAAGn8B,KAAKm6D,GAAK32D,IAIZ,IAAAq5D,WAAA,SAASniC,SACtB,OAAO,IAAIiiC,KAAKjiC,QAAS,KAGpB,SAASoiC,WAAWpiC,SACzB,OAAO,IAAIiiC,KAAKjiC,QAAS,GAGpB,SAASqiC,UAAUriC,SACxB,OAAO,IAAIiiC,KAAKjiC,QAAS,GCnDZ,IAAAsiC,KAAA,SAASC,OAAQh3C,OAC9B,IAAOjsB,EAAIijE,OAAOv7D,QAAU,EAC5B,IAAK,IAAWmZ,EAAGohD,GAA2BjiE,EAArCzB,EAAI,EAAU80B,GAAK4vC,OAAOh3C,MAAM,IAAQttB,EAAI00B,GAAG3rB,OAAQnJ,EAAIyB,IAAKzB,EAEvE,IADA0jE,GAAK5uC,GAAIA,GAAK4vC,OAAOh3C,MAAM1tB,IACtBsiB,EAAI,EAAGA,EAAIliB,IAAKkiB,EACnBwS,GAAGxS,GAAG,IAAMwS,GAAGxS,GAAG,GAAKvH,MAAM2oD,GAAGphD,GAAG,IAAMohD,GAAGphD,GAAG,GAAKohD,GAAGphD,GAAG,ICLjDqiD,WAAA,SAASD,QAEtB,IADA,IAAIjjE,EAAIijE,OAAOv7D,OAAQ1I,EAAI,IAAI6P,MAAM7O,KAC5BA,GAAK,GAAGhB,EAAEgB,GAAKA,EACxB,OAAOhB,GCET,SAASmkE,WAAWtkE,EAAGiB,KACrB,OAAOjB,EAAEiB,KCJI,IAAAsjE,gBAAA,SAASH,QACtB,IAAII,KAAOJ,OAAOh1D,IAAIgL,eACtB,OAAO+pD,WAAKC,QAAQ1sD,KAAK,SAAS5V,EAAGyI,GAAK,OAAOi6D,KAAK1iE,GAAK0iE,KAAKj6D,MAG3D,SAAS6P,cAAIgqD,QAElB,IADA,IAAsCrzD,EAAlCpP,EAAI,EAAGjC,GAAK,EAAGyB,EAAIijE,OAAOv7D,SACrBnJ,EAAIyB,IAAO4P,GAAKqzD,OAAO1kE,GAAG,MAAIiC,GAAKoP,GAC5C,OAAOpP,ECFF,SAAS8iE,WAAW7jE,GACzB,QAASA,GAAK,IAAM,EAAIA,EAAIA,EAAIA,GAAKA,GAAK,GAAKA,EAAIA,EAAI,GAAK,GCPzC,SAAS2gE,OAAO3/D,GAGnC,SAAS8iE,OAAO9jE,GACd,OAAOoK,KAAKoQ,IAAIxa,EAAGgB,GAKrB,OARAA,GAAKA,EAML8iE,OAAOhgB,SAAW6c,OAEXmD,QATY,CAFN,GAcO,SAASnD,OAAO3/D,GAGpC,SAAS+iE,QAAQ/jE,GACf,OAAO,EAAIoK,KAAKoQ,IAAI,EAAIxa,EAAGgB,GAK7B,OARAA,GAAKA,EAML+iE,QAAQjgB,SAAW6c,OAEZoD,QATa,CAdP,GAAf,IA0BWC,UAAa,SAASrD,OAAO3/D,GAGtC,SAASgjE,UAAUhkE,GACjB,QAASA,GAAK,IAAM,EAAIoK,KAAKoQ,IAAIxa,EAAGgB,GAAK,EAAIoJ,KAAKoQ,IAAI,EAAIxa,EAAGgB,IAAM,EAKrE,OARAA,GAAKA,EAMLgjE,UAAUlgB,SAAW6c,OAEdqD,UATe,CA1BT,GCAN55D,KAAKgwC,GCAd,IAAI1jC,GAAK,EAAI,GACTutD,GAAK,EAAI,GACTC,GAAK,EAAI,GACTC,GAAK,IACLC,GAAK,EAAI,GACTC,GAAK,GAAK,GACVC,GAAK,MACLC,GAAK,GAAK,GACVC,GAAK,GAAK,GACVC,GAAK,EAAI/tD,GAAKA,GAMX,SAASguD,UAAU1kE,GACxB,OAAQA,GAAKA,GAAK0W,GAAK+tD,GAAKzkE,EAAIA,EAAIA,EAAIkkE,GAAKO,IAAMzkE,GAAKikE,IAAMjkE,EAAImkE,GAAKnkE,EAAIqkE,GAAKI,IAAMzkE,GAAKokE,IAAMpkE,EAAIskE,GAAKG,IAAMzkE,GAAKukE,IAAMvkE,EAAIwkE,ICd5G,SAAS7D,OAAO5/D,GAGnC,SAAS4jE,OAAO3kE,GACd,OAAOA,EAAIA,IAAMe,EAAI,GAAKf,EAAIe,GAKhC,OARAA,GAAKA,EAML4jE,OAAOC,UAAYjE,OAEZgE,QATY,CAFL,SAcM,SAAShE,OAAO5/D,GAGpC,SAAS8jE,QAAQ7kE,GACf,QAASA,EAAIA,IAAMe,EAAI,GAAKf,EAAIe,GAAK,EAKvC,OARAA,GAAKA,EAML8jE,QAAQD,UAAYjE,OAEbkE,QATa,CAdN,SAAhB,IA0BWC,UAAa,SAASnE,OAAO5/D,GAGtC,SAAS+jE,UAAU9kE,GACjB,QAASA,GAAK,GAAK,EAAIA,EAAIA,IAAMe,EAAI,GAAKf,EAAIe,IAAMf,GAAK,GAAKA,IAAMe,EAAI,GAAKf,EAAIe,GAAK,GAAK,EAK7F,OARAA,GAAKA,EAML+jE,UAAUF,UAAYjE,OAEfmE,UATe,CA1BR,SCAZ3M,YAAM,EAAI/tD,KAAKgwC,GAiBR2qB,YAba,SAASpE,OAAOz/D,EAAGJ,GACzC,IAAIC,EAAIqJ,KAAKwwD,KAAK,GAAK15D,EAAIkJ,KAAK6P,IAAI,EAAG/Y,MAAQJ,GAAKq3D,aAEpD,SAAS6M,UAAUhlE,GACjB,OAAOkB,EAAIkJ,KAAKoQ,IAAI,EAAG,KAAOxa,GAAKoK,KAAK6wC,KAAKl6C,EAAIf,GAAKc,GAMxD,OAHAkkE,UAAUC,UAAY,SAAS/jE,GAAK,OAAOy/D,OAAOz/D,EAAGJ,EAAIq3D,cACzD6M,UAAUE,OAAS,SAASpkE,GAAK,OAAO6/D,OAAOz/D,EAAGJ,IAE3CkkE,UAVe,CAHR,EACH,IAeY,SAASrE,OAAOz/D,EAAGJ,GAC1C,IAAIC,EAAIqJ,KAAKwwD,KAAK,GAAK15D,EAAIkJ,KAAK6P,IAAI,EAAG/Y,MAAQJ,GAAKq3D,aAEpD,SAAS4M,WAAW/kE,GAClB,OAAO,EAAIkB,EAAIkJ,KAAKoQ,IAAI,GAAI,IAAMxa,GAAKA,IAAMoK,KAAK6wC,KAAKj7C,EAAIe,GAAKD,GAMlE,OAHAikE,WAAWE,UAAY,SAAS/jE,GAAK,OAAOy/D,OAAOz/D,EAAGJ,EAAIq3D,cAC1D4M,WAAWG,OAAS,SAASpkE,GAAK,OAAO6/D,OAAOz/D,EAAGJ,IAE5CikE,WAVgB,CAhBT,EACH,KCFEI,yBD8BY,SAASxE,OAAOz/D,EAAGJ,GAC5C,IAAIC,EAAIqJ,KAAKwwD,KAAK,GAAK15D,EAAIkJ,KAAK6P,IAAI,EAAG/Y,MAAQJ,GAAKq3D,aAEpD,SAASiN,aAAaplE,GACpB,QAASA,EAAQ,EAAJA,EAAQ,GAAK,EACpBkB,EAAIkJ,KAAKoQ,IAAI,EAAG,GAAKxa,GAAKoK,KAAK6wC,KAAKl6C,EAAIf,GAAKc,GAC7C,EAAII,EAAIkJ,KAAKoQ,IAAI,GAAI,GAAKxa,GAAKoK,KAAK6wC,KAAKl6C,EAAIf,GAAKc,IAAM,EAMhE,OAHAskE,aAAaH,UAAY,SAAS/jE,GAAK,OAAOy/D,OAAOz/D,EAAGJ,EAAIq3D,cAC5DiN,aAAaF,OAAS,SAASpkE,GAAK,OAAO6/D,OAAOz/D,EAAGJ,IAE9CskE,aAZkB,CA7BX,EACH,ICFE,SAAS1iC,GACtB,OAAO,WACL,OAAOA,KCFJ,SAASA,YAAEtjC,GAChB,OAAOA,EAAE,GAGJ,SAAS2K,YAAE3K,GAChB,OAAOA,EAAE,GCLX,SAASimE,eACP9+D,KAAKmgB,EAAI,KAGJ,SAAS4+C,aAAajwC,MAC3BA,KAAKw2B,EACLx2B,KAAKsmB,EACLtmB,KAAKm1B,EACLn1B,KAAKkwC,EACLlwC,KAAKtsB,EACLssB,KAAKrU,EAAI,KAuLX,SAASwkD,mBAAmBC,KAAMpwC,MAChC,IAAIv0B,EAAIu0B,KACJ8oB,EAAI9oB,KAAKkwC,EACTv5C,OAASlrB,EAAE+qD,EAEX7/B,OACEA,OAAOw+B,IAAM1pD,EAAGkrB,OAAOw+B,EAAIrM,EAC1BnyB,OAAOu5C,EAAIpnB,EAEhBsnB,KAAK/+C,EAAIy3B,EAGXA,EAAE0N,EAAI7/B,OACNlrB,EAAE+qD,EAAI1N,EACNr9C,EAAEykE,EAAIpnB,EAAEqM,EACJ1pD,EAAEykE,IAAGzkE,EAAEykE,EAAE1Z,EAAI/qD,GACjBq9C,EAAEqM,EAAI1pD,EAGR,SAAS4kE,oBAAoBD,KAAMpwC,MACjC,IAAIv0B,EAAIu0B,KACJ8oB,EAAI9oB,KAAKm1B,EACTx+B,OAASlrB,EAAE+qD,EAEX7/B,OACEA,OAAOw+B,IAAM1pD,EAAGkrB,OAAOw+B,EAAIrM,EAC1BnyB,OAAOu5C,EAAIpnB,EAEhBsnB,KAAK/+C,EAAIy3B,EAGXA,EAAE0N,EAAI7/B,OACNlrB,EAAE+qD,EAAI1N,EACNr9C,EAAE0pD,EAAIrM,EAAEonB,EACJzkE,EAAE0pD,IAAG1pD,EAAE0pD,EAAEqB,EAAI/qD,GACjBq9C,EAAEonB,EAAIzkE,EAGR,SAAS6kE,cAActwC,MACrB,KAAOA,KAAKm1B,GAAGn1B,KAAOA,KAAKm1B,EAC3B,OAAOn1B,KA5NTgwC,aAAazkE,WACX2qB,YAAa85C,aAEbvN,OAAQ,SAAAA,OAAS8N,MAAOvwC,MACtB,IAAIrJ,OAAQ65C,QAASC,MAErB,GAAIF,MAAO,CAKT,GAJAvwC,KAAKtsB,EAAI68D,MACTvwC,KAAKrU,EAAI4kD,MAAM5kD,EACX4kD,MAAM5kD,IAAG4kD,MAAM5kD,EAAEjY,EAAIssB,MACzBuwC,MAAM5kD,EAAIqU,KACNuwC,MAAML,EAAG,CAEX,IADAK,MAAQA,MAAML,EACPK,MAAMpb,GAAGob,MAAQA,MAAMpb,EAC9Bob,MAAMpb,EAAIn1B,UAEVuwC,MAAML,EAAIlwC,KAEZrJ,OAAS45C,WACAr/D,KAAKmgB,GACdk/C,MAAQD,cAAcp/D,KAAKmgB,GAC3B2O,KAAKtsB,EAAI,KACTssB,KAAKrU,EAAI4kD,MACTA,MAAM78D,EAAI68D,MAAMpb,EAAIn1B,KACpBrJ,OAAS45C,QAETvwC,KAAKtsB,EAAIssB,KAAKrU,EAAI,KAClBza,KAAKmgB,EAAI2O,KACTrJ,OAAS,MAOX,IALAqJ,KAAKm1B,EAAIn1B,KAAKkwC,EAAI,KAClBlwC,KAAKw2B,EAAI7/B,OACTqJ,KAAKsmB,GAAI,EAETiqB,MAAQvwC,KACDrJ,QAAUA,OAAO2vB,GAElB3vB,UADJ65C,QAAU75C,OAAO6/B,GACMrB,GACrBsb,MAAQD,QAAQN,IACHO,MAAMnqB,GACjB3vB,OAAO2vB,EAAImqB,MAAMnqB,GAAI,EACrBkqB,QAAQlqB,GAAI,EACZiqB,MAAQC,UAEJD,QAAU55C,OAAOu5C,IACnBC,mBAAmBj/D,KAAMylB,QAEzBA,QADA45C,MAAQ55C,QACO6/B,GAEjB7/B,OAAO2vB,GAAI,EACXkqB,QAAQlqB,GAAI,EACZ+pB,oBAAoBn/D,KAAMs/D,WAG5BC,MAAQD,QAAQrb,IACHsb,MAAMnqB,GACjB3vB,OAAO2vB,EAAImqB,MAAMnqB,GAAI,EACrBkqB,QAAQlqB,GAAI,EACZiqB,MAAQC,UAEJD,QAAU55C,OAAOw+B,IACnBkb,oBAAoBn/D,KAAMylB,QAE1BA,QADA45C,MAAQ55C,QACO6/B,GAEjB7/B,OAAO2vB,GAAI,EACXkqB,QAAQlqB,GAAI,EACZ6pB,mBAAmBj/D,KAAMs/D,UAG7B75C,OAAS45C,MAAM/Z,EAEjBtlD,KAAKmgB,EAAEi1B,GAAI,GAGb5P,OAAQ,SAAAA,OAAS1W,MACXA,KAAKrU,IAAGqU,KAAKrU,EAAEjY,EAAIssB,KAAKtsB,GACxBssB,KAAKtsB,IAAGssB,KAAKtsB,EAAEiY,EAAIqU,KAAKrU,GAC5BqU,KAAKrU,EAAIqU,KAAKtsB,EAAI,KAElB,IACIgjB,QAGAvT,KACA2+B,IALAnrB,OAASqJ,KAAKw2B,EAEdxhB,KAAOhV,KAAKm1B,EACZlgB,MAAQjV,KAAKkwC,EAsCjB,GAhCK/sD,KAFA6xB,KACKC,MACEq7B,cAAcr7B,OADFD,KADNC,MAIdte,OACEA,OAAOw+B,IAAMn1B,KAAMrJ,OAAOw+B,EAAIhyC,KAC7BwT,OAAOu5C,EAAI/sD,KAEhBjS,KAAKmgB,EAAIlO,KAGP6xB,MAAQC,OACV6M,IAAM3+B,KAAKmjC,EACXnjC,KAAKmjC,EAAItmB,KAAKsmB,EACdnjC,KAAKgyC,EAAIngB,KACTA,KAAKwhB,EAAIrzC,KACLA,OAAS8xB,OACXte,OAASxT,KAAKqzC,EACdrzC,KAAKqzC,EAAIx2B,KAAKw2B,EACdx2B,KAAO7c,KAAK+sD,EACZv5C,OAAOw+B,EAAIn1B,KACX7c,KAAK+sD,EAAIj7B,MACTA,MAAMuhB,EAAIrzC,OAEVA,KAAKqzC,EAAI7/B,OACTA,OAASxT,KACT6c,KAAO7c,KAAK+sD,KAGdpuB,IAAM9hB,KAAKsmB,EACXtmB,KAAO7c,MAGL6c,OAAMA,KAAKw2B,EAAI7/B,SACfmrB,IACJ,GAAI9hB,MAAQA,KAAKsmB,EAAKtmB,KAAKsmB,GAAI,MAA/B,CAEA,EAAG,CACD,GAAItmB,OAAS9uB,KAAKmgB,EAAG,MACrB,GAAI2O,OAASrJ,OAAOw+B,GAQlB,IAPAz+B,QAAUC,OAAOu5C,GACL5pB,IACV5vB,QAAQ4vB,GAAI,EACZ3vB,OAAO2vB,GAAI,EACX6pB,mBAAmBj/D,KAAMylB,QACzBD,QAAUC,OAAOu5C,GAEdx5C,QAAQy+B,GAAKz+B,QAAQy+B,EAAE7O,GACpB5vB,QAAQw5C,GAAKx5C,QAAQw5C,EAAE5pB,EAAI,CAC5B5vB,QAAQw5C,GAAMx5C,QAAQw5C,EAAE5pB,IAC3B5vB,QAAQy+B,EAAE7O,GAAI,EACd5vB,QAAQ4vB,GAAI,EACZ+pB,oBAAoBn/D,KAAMwlB,SAC1BA,QAAUC,OAAOu5C,GAEnBx5C,QAAQ4vB,EAAI3vB,OAAO2vB,EACnB3vB,OAAO2vB,EAAI5vB,QAAQw5C,EAAE5pB,GAAI,EACzB6pB,mBAAmBj/D,KAAMylB,QACzBqJ,KAAO9uB,KAAKmgB,EACZ,YAUF,IAPAqF,QAAUC,OAAOw+B,GACL7O,IACV5vB,QAAQ4vB,GAAI,EACZ3vB,OAAO2vB,GAAI,EACX+pB,oBAAoBn/D,KAAMylB,QAC1BD,QAAUC,OAAOw+B,GAEdz+B,QAAQy+B,GAAKz+B,QAAQy+B,EAAE7O,GACtB5vB,QAAQw5C,GAAKx5C,QAAQw5C,EAAE5pB,EAAI,CAC1B5vB,QAAQy+B,GAAMz+B,QAAQy+B,EAAE7O,IAC3B5vB,QAAQw5C,EAAE5pB,GAAI,EACd5vB,QAAQ4vB,GAAI,EACZ6pB,mBAAmBj/D,KAAMwlB,SACzBA,QAAUC,OAAOw+B,GAEnBz+B,QAAQ4vB,EAAI3vB,OAAO2vB,EACnB3vB,OAAO2vB,EAAI5vB,QAAQy+B,EAAE7O,GAAI,EACzB+pB,oBAAoBn/D,KAAMylB,QAC1BqJ,KAAO9uB,KAAKmgB,EACZ,MAGJqF,QAAQ4vB,GAAI,EACZtmB,KAAOrJ,OACPA,OAASA,OAAO6/B,SACRx2B,KAAKsmB,GAEXtmB,OAAMA,KAAKsmB,GAAI,MA+CR0pB,kCC1OR,SAASU,WAAW17B,KAAMC,MAAOgS,GAAIC,IAC1C,IAAIplB,MAAQ,KAAM,MACd3uB,MAAQmuB,cAAMlqB,KAAK0qB,MAAQ,EAO/B,OANAA,KAAKkT,KAAOA,KACZlT,KAAKmT,MAAQA,MACTgS,IAAI0pB,WAAW7uC,KAAMkT,KAAMC,MAAOgS,IAClCC,IAAIypB,WAAW7uC,KAAMmT,MAAOD,KAAMkS,IACtC0pB,cAAM57B,KAAK7hC,OAAO09D,UAAUz5D,KAAKjE,OACjCy9D,cAAM37B,MAAM9hC,OAAO09D,UAAUz5D,KAAKjE,OAC3B2uB,KAGF,SAASgvC,iBAAiB97B,KAAMiS,GAAIC,IACzC,IAAIplB,MAAQmlB,GAAIC,IAEhB,OADAplB,KAAKkT,KAAOA,KACLlT,KAGF,SAAS6uC,WAAW7uC,KAAMkT,KAAMC,MAAO87B,QACvCjvC,KAAK,IAAOA,KAAK,GAIXA,KAAKkT,OAASC,MACvBnT,KAAK,GAAKivC,OAEVjvC,KAAK,GAAKivC,QANVjvC,KAAK,GAAKivC,OACVjvC,KAAKkT,KAAOA,KACZlT,KAAKmT,MAAQA,OASjB,SAAS+7B,SAASlvC,KAAMivB,GAAI+S,GAAI9S,GAAIyS,IAClC,IAUIl5D,EAVAsB,EAAIi2B,KAAK,GACTxtB,EAAIwtB,KAAK,GACTmvC,GAAKplE,EAAE,GACPqlE,GAAKrlE,EAAE,GAGPu5C,GAAK,EACLC,GAAK,EACL2f,GAJK1wD,EAAE,GAIG28D,GACVhM,GAJK3wD,EAAE,GAIG48D,GAId,GADA3mE,EAAIwmD,GAAKkgB,GACJjM,MAAMz6D,EAAI,GAAf,CAEA,GADAA,GAAKy6D,GACDA,GAAK,EAAG,CACV,GAAIz6D,EAAI66C,GAAI,OACR76C,EAAI86C,KAAIA,GAAK96C,QACZ,GAAIy6D,GAAK,EAAG,CACjB,GAAIz6D,EAAI86C,GAAI,OACR96C,EAAI66C,KAAIA,GAAK76C,GAInB,GADAA,EAAIymD,GAAKigB,GACJjM,MAAMz6D,EAAI,GAAf,CAEA,GADAA,GAAKy6D,GACDA,GAAK,EAAG,CACV,GAAIz6D,EAAI86C,GAAI,OACR96C,EAAI66C,KAAIA,GAAK76C,QACZ,GAAIy6D,GAAK,EAAG,CACjB,GAAIz6D,EAAI66C,GAAI,OACR76C,EAAI86C,KAAIA,GAAK96C,GAInB,GADAA,EAAIu5D,GAAKoN,GACJjM,MAAM16D,EAAI,GAAf,CAEA,GADAA,GAAK06D,GACDA,GAAK,EAAG,CACV,GAAI16D,EAAI66C,GAAI,OACR76C,EAAI86C,KAAIA,GAAK96C,QACZ,GAAI06D,GAAK,EAAG,CACjB,GAAI16D,EAAI86C,GAAI,OACR96C,EAAI66C,KAAIA,GAAK76C,GAInB,GADAA,EAAIk5D,GAAKyN,GACJjM,MAAM16D,EAAI,GAAf,CAEA,GADAA,GAAK06D,GACDA,GAAK,EAAG,CACV,GAAI16D,EAAI86C,GAAI,OACR96C,EAAI66C,KAAIA,GAAK76C,QACZ,GAAI06D,GAAK,EAAG,CACjB,GAAI16D,EAAI66C,GAAI,OACR76C,EAAI86C,KAAIA,GAAK96C,GAGnB,QAAM66C,GAAK,GAAQC,GAAK,KAEpBD,GAAK,IAAGtjB,KAAK,IAAMmvC,GAAK7rB,GAAK4f,GAAIkM,GAAK9rB,GAAK6f,KAC3C5f,GAAK,IAAGvjB,KAAK,IAAMmvC,GAAK5rB,GAAK2f,GAAIkM,GAAK7rB,GAAK4f,MACxC,OAGT,SAASkM,YAAYrvC,KAAMivB,GAAI+S,GAAI9S,GAAIyS,IACrC,IAAIvc,GAAKplB,KAAK,GACd,GAAIolB,GAAI,OAAO,EAEf,IASIkqB,GACAC,GAVApqB,GAAKnlB,KAAK,GACVkT,KAAOlT,KAAKkT,KACZC,MAAQnT,KAAKmT,MACbq8B,GAAKt8B,KAAK,GACVu8B,GAAKv8B,KAAK,GACVw8B,GAAKv8B,MAAM,GACXw8B,GAAKx8B,MAAM,GACXy8B,IAAMJ,GAAKE,IAAM,EACjBG,IAAMJ,GAAKE,IAAM,EAIrB,GAAIA,KAAOF,GAAI,CACb,GAAIG,GAAK3gB,IAAM2gB,IAAM1gB,GAAI,OACzB,GAAIsgB,GAAKE,GAAI,CACX,GAAKvqB,IACA,GAAIA,GAAG,IAAMwc,GAAI,YADbxc,IAAMyqB,GAAI5N,IAEnB5c,IAAMwqB,GAAIjO,QACL,CACL,GAAKxc,IACA,GAAIA,GAAG,GAAK6c,GAAI,YADZ7c,IAAMyqB,GAAIjO,IAEnBvc,IAAMwqB,GAAI5N,UAKZ,GADAuN,GAAKM,IADLP,IAAME,GAAKE,KAAOC,GAAKF,KACRG,GACXN,IAAM,GAAKA,GAAK,EAClB,GAAIE,GAAKE,GAAI,CACX,GAAKvqB,IACA,GAAIA,GAAG,IAAMwc,GAAI,YADbxc,KAAO6c,GAAKuN,IAAMD,GAAItN,IAE/B5c,KAAOuc,GAAK4N,IAAMD,GAAI3N,QACjB,CACL,GAAKxc,IACA,GAAIA,GAAG,GAAK6c,GAAI,YADZ7c,KAAOwc,GAAK4N,IAAMD,GAAI3N,IAE/Bvc,KAAO4c,GAAKuN,IAAMD,GAAItN,SAGxB,GAAIyN,GAAKE,GAAI,CACX,GAAKxqB,IACA,GAAIA,GAAG,IAAM+J,GAAI,YADb/J,IAAM8J,GAAIqgB,GAAKrgB,GAAKsgB,IAE7BnqB,IAAM8J,GAAIogB,GAAKpgB,GAAKqgB,QACf,CACL,GAAKpqB,IACA,GAAIA,GAAG,GAAK8J,GAAI,YADZ9J,IAAM+J,GAAIogB,GAAKpgB,GAAKqgB,IAE7BnqB,IAAM6J,GAAIqgB,GAAKrgB,GAAKsgB,IAO1B,OAFAvvC,KAAK,GAAKmlB,GACVnlB,KAAK,GAAKolB,IACH,EC9IT,SAAS0qB,kBAAkBC,KAAM/vC,MAC/B,IAAIgwC,KAAOD,KAAKC,KACZC,GAAKjwC,KAAKkT,KACVg9B,GAAKlwC,KAAKmT,MAEd,OADI68B,OAASE,KAAIA,GAAKD,GAAIA,GAAKD,MAC3BE,GAAWj9D,KAAKqxC,MAAM4rB,GAAG,GAAKD,GAAG,GAAIC,GAAG,GAAKD,GAAG,KAChDD,OAASC,IAAIA,GAAKjwC,KAAK,GAAIkwC,GAAKlwC,KAAK,KACpCiwC,GAAKjwC,KAAK,GAAIkwC,GAAKlwC,KAAK,IACtB/sB,KAAKqxC,MAAM2rB,GAAG,GAAKC,GAAG,GAAIA,GAAG,GAAKD,GAAG,KAGvC,SAASE,kBAAkBJ,KAAM/vC,MACtC,OAAOA,OAAOA,KAAKkT,OAAS68B,KAAKC,OAG5B,SAASI,gBAAgBL,KAAM/vC,MACpC,OAAOA,OAAOA,KAAKkT,OAAS68B,KAAKC,OCvBnC,IAEWK,YAFPC,cAaG,SAASC,aAAaxN,KAC3B,IAAIyN,KAAOzN,IAAInxD,EACX6+D,KAAO1N,IAAIl5C,EAEf,GAAK2mD,MAASC,KAAd,CAEA,IAAIC,MAAQF,KAAKR,KACbW,MAAQ5N,IAAIiN,KACZY,MAAQH,KAAKT,KAEjB,GAAIU,QAAUE,MAAd,CAEA,IAAIC,GAAKF,MAAM,GACXG,GAAKH,MAAM,GACXxB,GAAKuB,MAAM,GAAKG,GAChBzB,GAAKsB,MAAM,GAAKI,GAChBvL,GAAKqL,MAAM,GAAKC,GAChBrL,GAAKoL,MAAM,GAAKE,GAEhB7oE,EAAI,GAAKknE,GAAK3J,GAAK4J,GAAK7J,IAC5B,KAAIt9D,IAAM8oE,kBAAV,CAEA,IAAIC,GAAK7B,GAAKA,GAAKC,GAAKA,GACpB6B,GAAK1L,GAAKA,GAAKC,GAAKA,GACpBj6B,GAAKi6B,GAAKwL,GAAK5B,GAAK6B,IAAMhpE,EAC1B2K,GAAKu8D,GAAK8B,GAAK1L,GAAKyL,IAAM/oE,EAE1BipE,OAASZ,WAAWj6C,OAAS,IApCnC,SAAS86C,SACPhD,aAAa/+D,MACbA,KAAKm8B,EACLn8B,KAAKwD,EACLxD,KAAK2zD,IACL3zD,KAAK4gE,KACL5gE,KAAKo2D,GAAK,MA+BV0L,OAAOnO,IAAMA,IACbmO,OAAOlB,KAAOW,MACdO,OAAO3lC,EAAIA,EAAIslC,GACfK,OAAOt+D,GAAKs+D,OAAO1L,GAAK5yD,EAAIk+D,IAAM79D,KAAKkQ,KAAKooB,EAAIA,EAAI34B,EAAIA,GAExDmwD,IAAImO,OAASA,OAKb,IAHA,IAAIE,OAAS,KACTlzC,KAAOmzC,QAAQ9hD,EAEZ2O,MACL,GAAIgzC,OAAOt+D,EAAIsrB,KAAKtrB,GAAMs+D,OAAOt+D,IAAMsrB,KAAKtrB,GAAKs+D,OAAO3lC,GAAKrN,KAAKqN,EAAI,CACpE,IAAIrN,KAAKm1B,EACJ,CAAE+d,OAASlzC,KAAKtsB,EAAG,MADZssB,KAAOA,KAAKm1B,MAEnB,CACL,IAAIn1B,KAAKkwC,EACJ,CAAEgD,OAASlzC,KAAM,MADVA,KAAOA,KAAKkwC,EAK5BiD,QAAQ1Q,OAAOyQ,OAAQF,QAClBE,SAAQf,YAAca,WAGtB,SAASI,aAAavO,KAC3B,IAAImO,OAASnO,IAAImO,OACbA,SACGA,OAAOt/D,IAAGy+D,YAAca,OAAOrnD,GACpCwnD,QAAQz8B,OAAOs8B,QACfZ,WAAWh7D,KAAK47D,QAChB/C,aAAa+C,QACbnO,IAAImO,OAAS,MCrEjB,IAAIK,aASJ,SAASC,YAAYxB,MACnB,IAAIyB,MAAQF,UAAUl7C,OAAS,IARjC,SAASq7C,QACPvD,aAAa/+D,MACbA,KAAK4wB,KACL5wB,KAAK4gE,KACL5gE,KAAK8hE,OAAS,MAMd,OADAO,MAAMzB,KAAOA,KACNyB,MAGT,SAASE,YAAYF,OACnBH,aAAaG,OACbG,QAAQh9B,OAAO68B,OACfF,UAAUj8D,KAAKm8D,OACftD,aAAasD,OAGR,SAASI,YAAYJ,OAC1B,IAAIP,OAASO,MAAMP,OACf3lC,EAAI2lC,OAAO3lC,EACX34B,EAAIs+D,OAAO1L,GACXyJ,QAAU1jC,EAAG34B,GACb09C,SAAWmhB,MAAM7/D,EACjByP,KAAOowD,MAAM5nD,EACbioD,cAAgBL,OAEpBE,YAAYF,OAGZ,IADA,IAAIjB,KAAOlgB,SACJkgB,KAAKU,QACLj+D,KAAKsnB,IAAIgR,EAAIilC,KAAKU,OAAO3lC,GAAK4zB,iBAC9BlsD,KAAKsnB,IAAI3nB,EAAI49D,KAAKU,OAAO1L,IAAMrG,iBACpC7O,SAAWkgB,KAAK5+D,EAChBkgE,aAAaj7D,QAAQ25D,MACrBmB,YAAYnB,MACZA,KAAOlgB,SAGTwhB,aAAaj7D,QAAQ25D,MACrBc,aAAad,MAGb,IADA,IAAIC,KAAOpvD,KACJovD,KAAKS,QACLj+D,KAAKsnB,IAAIgR,EAAIklC,KAAKS,OAAO3lC,GAAK4zB,iBAC9BlsD,KAAKsnB,IAAI3nB,EAAI69D,KAAKS,OAAO1L,IAAMrG,iBACpC99C,KAAOovD,KAAK5mD,EACZioD,aAAax8D,KAAKm7D,MAClBkB,YAAYlB,MACZA,KAAOpvD,KAGTywD,aAAax8D,KAAKm7D,MAClBa,aAAab,MAEb,IACIsB,KADAC,MAAQF,aAAahhE,OAEzB,IAAKihE,KAAO,EAAGA,KAAOC,QAASD,KAC7BtB,KAAOqB,aAAaC,MACpBvB,KAAOsB,aAAaC,KAAO,GAC3BlD,WAAW4B,KAAKzwC,KAAMwwC,KAAKR,KAAMS,KAAKT,KAAMf,QAG9CuB,KAAOsB,aAAa,IACpBrB,KAAOqB,aAAaE,MAAQ,IACvBhyC,KAAO4uC,WAAW4B,KAAKR,KAAMS,KAAKT,KAAM,KAAMf,QAEnDsB,aAAaC,MACbD,aAAaE,MAGR,SAASwB,SAASjC,MASvB,IARA,IAEIQ,KACAC,KACAyB,IACAC,IALA5mC,EAAIykC,KAAK,GACToC,UAAYpC,KAAK,GAKjB9xC,KAAO0zC,QAAQriD,EAEZ2O,MAEL,IADAg0C,IAAMG,eAAen0C,KAAMk0C,WAAa7mC,GAC9B4zB,gBAASjhC,KAAOA,KAAKm1B,MAAQ,CAErC,MADA8e,IAAM5mC,EAAI+mC,gBAAgBp0C,KAAMk0C,YACtBjT,iBAMH,CACD+S,KAAO/S,iBACTqR,KAAOtyC,KAAKtsB,EACZ6+D,KAAOvyC,MACEi0C,KAAOhT,iBAChBqR,KAAOtyC,KACPuyC,KAAOvyC,KAAKrU,GAEZ2mD,KAAOC,KAAOvyC,KAEhB,MAfA,IAAKA,KAAKkwC,EAAG,CACXoC,KAAOtyC,KACP,MAEFA,KAAOA,KAAKkwC,GFhGb,SAASmE,WAAWvC,MACzB,OAAOlB,cAAMkB,KAAK3+D,QAChB2+D,KAAMA,KACNjB,cE6GFwD,CAAWvC,MACX,IAAIwC,OAAShB,YAAYxB,MAGzB,GAFA4B,QAAQjR,OAAO6P,KAAMgC,QAEhBhC,MAASC,KAAd,CAEA,GAAID,OAASC,KAOX,OANAa,aAAad,MACbC,KAAOe,YAAYhB,KAAKR,MACxB4B,QAAQjR,OAAO6R,OAAQ/B,MACvB+B,OAAOxyC,KAAOywC,KAAKzwC,KAAO4uC,WAAW4B,KAAKR,KAAMwC,OAAOxC,MACvDO,aAAaC,WACbD,aAAaE,MAIf,GAAKA,KAAL,CAMAa,aAAad,MACbc,aAAab,MAEb,IAAIC,MAAQF,KAAKR,KACbb,GAAKuB,MAAM,GACXtB,GAAKsB,MAAM,GACXG,GAAKb,KAAK,GAAKb,GACf2B,GAAKd,KAAK,GAAKZ,GACfwB,MAAQH,KAAKT,KACbzK,GAAKqL,MAAM,GAAKzB,GAChB3J,GAAKoL,MAAM,GAAKxB,GAChBnnE,EAAI,GAAK4oE,GAAKrL,GAAKsL,GAAKvL,IACxBkN,GAAK5B,GAAKA,GAAKC,GAAKA,GACpBG,GAAK1L,GAAKA,GAAKC,GAAKA,GACpByJ,SAAWzJ,GAAKiN,GAAK3B,GAAKG,IAAMhpE,EAAIknE,IAAK0B,GAAKI,GAAK1L,GAAKkN,IAAMxqE,EAAImnE,IAEtEP,WAAW4B,KAAKzwC,KAAM0wC,MAAOE,MAAO3B,QACpCuD,OAAOxyC,KAAO4uC,WAAW8B,MAAOV,KAAM,KAAMf,QAC5CwB,KAAKzwC,KAAO4uC,WAAWoB,KAAMY,MAAO,KAAM3B,QAC1CsB,aAAaC,MACbD,aAAaE,WAzBX+B,OAAOxyC,KAAO4uC,WAAW4B,KAAKR,KAAMwC,OAAOxC,OA4B/C,SAASqC,eAAetP,IAAKqP,WAC3B,IAAIpC,KAAOjN,IAAIiN,KACX0C,MAAQ1C,KAAK,GACb2C,MAAQ3C,KAAK,GACb4C,KAAOD,MAAQP,UAEnB,IAAKQ,KAAM,OAAOF,MAElB,IAAIlC,KAAOzN,IAAInxD,EACf,IAAK4+D,KAAM,OAAQliB,IAGnB,IAAIukB,OADJ7C,KAAOQ,KAAKR,MACK,GACb8C,MAAQ9C,KAAK,GACb+C,MAAQD,MAAQV,UAEpB,IAAKW,MAAO,OAAOF,MAEnB,IAAIG,GAAKH,MAAQH,MACbO,KAAO,EAAIL,KAAO,EAAIG,MACtBvgE,EAAIwgE,GAAKD,MAEb,OAAIE,OAAezgE,EAAIS,KAAKkQ,KAAK3Q,EAAIA,EAAI,EAAIygE,MAAQD,GAAKA,KAAO,EAAID,OAASD,MAAQC,MAAQ,EAAIJ,MAAQC,KAAO,KAAOK,KAAOP,OAEvHA,MAAQG,OAAS,EAG3B,SAASP,gBAAgBvP,IAAKqP,WAC5B,IAAI3B,KAAO1N,IAAIl5C,EACf,GAAI4mD,KAAM,OAAO4B,eAAe5B,KAAM2B,WACtC,IAAIpC,KAAOjN,IAAIiN,KACf,OAAOA,KAAK,KAAOoC,UAAYpC,KAAK,GAAK1hB,ICzLpC,IAEIsjB,QACA9C,cACAuC,QACA7xC,cALA2/B,gBAAU,KACV4R,iBAAW,MAMtB,SAASmC,aAAanpE,EAAGyI,EAAGxK,GAC1B,OAAQ+B,EAAE,GAAK/B,EAAE,KAAOwK,EAAE,GAAKzI,EAAE,KAAOA,EAAE,GAAKyI,EAAE,KAAOxK,EAAE,GAAK+B,EAAE,IAGnE,SAASopE,cAAcppE,EAAGyI,GACxB,OAAOA,EAAE,GAAKzI,EAAE,IACTyI,EAAE,GAAKzI,EAAE,GAGH,SAASqpE,QAAQC,MAAOC,QACrC,IACI/nC,EACA34B,EACAs+D,OAHAlB,KAAOqD,MAAM1zD,KAAKwzD,eAAe98C,MAUrC,IALAmJ,iBACAsvC,cAAQ,IAAI72D,MAAMo7D,MAAMviE,QACxB8gE,QAAU,IAAI1D,iBACdmD,QAAU,IAAInD,mBAIZ,GADAgD,OAASb,YACLL,QAAUkB,QAAUlB,KAAK,GAAKkB,OAAOt+D,GAAMo9D,KAAK,KAAOkB,OAAOt+D,GAAKo9D,KAAK,GAAKkB,OAAO3lC,GAClFykC,KAAK,KAAOzkC,GAAKykC,KAAK,KAAOp9D,IAC/Bq/D,SAASjC,MACTzkC,EAAIykC,KAAK,GAAIp9D,EAAIo9D,KAAK,IAExBA,KAAOqD,MAAMh9C,UACR,KAAI66C,OAGT,MAFAW,YAAYX,OAAOnO,KAQvB,GHrBK,SAASwQ,oBACd,IAAK,IAA6BxD,KAAMhB,UAAW9kD,EAAGliB,EAA7CJ,EAAI,EAAGyB,EAAI0lE,cAAMh+D,OAA+BnJ,EAAIyB,IAAKzB,EAChE,IAAKooE,KAAOjB,cAAMnnE,MAAQI,GAAKgnE,UAAYgB,KAAKhB,WAAWj+D,QAAS,CAClE,IAAIO,MAAQ,IAAI4G,MAAMlQ,GAClBwrC,MAAQ,IAAIt7B,MAAMlQ,GACtB,IAAKkiB,EAAI,EAAGA,EAAIliB,IAAKkiB,EAAG5Y,MAAM4Y,GAAKA,EAAGspB,MAAMtpB,GAAK6lD,kBAAkBC,KAAMvwC,cAAMuvC,UAAU9kD,KAEzF,IADA5Y,MAAMsO,KAAK,SAAShY,EAAGsiB,GAAK,OAAOspB,MAAMtpB,GAAKspB,MAAM5rC,KAC/CsiB,EAAI,EAAGA,EAAIliB,IAAKkiB,EAAGspB,MAAMtpB,GAAK8kD,UAAU19D,MAAM4Y,IACnD,IAAKA,EAAI,EAAGA,EAAIliB,IAAKkiB,EAAG8kD,UAAU9kD,GAAKspB,MAAMtpB,IGWjDspD,GAEID,OAAQ,CACV,IAAIrkB,IAAMqkB,OAAO,GAAG,GAChBtR,IAAMsR,OAAO,GAAG,GAChBpkB,IAAMokB,OAAO,GAAG,GAChB3R,IAAM2R,OAAO,GAAG,IJqGjB,SAASE,UAAUvkB,GAAI+S,GAAI9S,GAAIyS,IAIpC,IAHA,IACI3hC,KADAr4B,EAAI63B,cAAM1uB,OAGPnJ,KACA0nE,YAAYrvC,KAAOR,cAAM73B,GAAIsnD,GAAI+S,GAAI9S,GAAIyS,KACtCuN,SAASlvC,KAAMivB,GAAI+S,GAAI9S,GAAIyS,MAC1B1uD,KAAKsnB,IAAIyF,KAAK,GAAG,GAAKA,KAAK,GAAG,IAAMm/B,iBAClClsD,KAAKsnB,IAAIyF,KAAK,GAAG,GAAKA,KAAK,GAAG,IAAMm/B,yBACtC3/B,cAAM73B,GI7Gf6rE,CAAUvkB,GAAI+S,GAAI9S,GAAIyS,IHbnB,SAAS8R,UAAUxkB,GAAI+S,GAAI9S,GAAIyS,IACpC,IACI+R,MACA3D,KACAC,KACA2D,UACA5E,UACA6E,WACAvmE,MACAwmE,OACAC,OACAj4D,IACAk4D,KACAC,KAZAC,OAASnF,cAAMh+D,OAafojE,OAAQ,EAEZ,IAAKR,MAAQ,EAAGA,MAAQO,SAAUP,MAChC,GAAI3D,KAAOjB,cAAM4E,OAAQ,CAMvB,IALA1D,KAAOD,KAAKC,KAEZ2D,WADA5E,UAAYgB,KAAKhB,WACKj+D,OAGf6iE,aACAn0C,cAAMuvC,UAAU4E,aACnB5E,UAAUr4D,OAAOi9D,UAAW,GAMhC,IADAA,UAAY,EAAGC,WAAa7E,UAAUj+D,OAC/B6iE,UAAYC,YACyCG,MAA1Dl4D,IAAMu0D,gBAAgBL,KAAMvwC,cAAMuvC,UAAU4E,cAAyB,GAAIK,KAAOn4D,IAAI,GACPg4D,QAA7ExmE,MAAQ8iE,kBAAkBJ,KAAMvwC,cAAMuvC,YAAY4E,UAAYC,eAA8B,GAAIE,OAASzmE,MAAM,IAC3G4F,KAAKsnB,IAAIw5C,KAAOF,QAAU1U,iBAAWlsD,KAAKsnB,IAAIy5C,KAAOF,QAAU3U,mBACjE4P,UAAUr4D,OAAOi9D,UAAW,EAAGn0C,cAAMlqB,KAAK05D,iBAAiBgB,KAAMn0D,IAC7D5I,KAAKsnB,IAAIw5C,KAAO9kB,IAAMkQ,iBAAWwC,GAAKqS,KAAO7U,iBAAWlQ,GAAIh8C,KAAKsnB,IAAIs5C,OAAS5kB,IAAMkQ,gBAAU2U,OAASnS,IACrG1uD,KAAKsnB,IAAIy5C,KAAOrS,IAAMxC,iBAAWjQ,GAAK6kB,KAAO5U,iBAAWlsD,KAAKsnB,IAAIu5C,OAASnS,IAAMxC,gBAAU0U,OAAS3kB,GAAIyS,IACvG1uD,KAAKsnB,IAAIw5C,KAAO7kB,IAAMiQ,iBAAW6U,KAAOhS,GAAK7C,iBAAWjQ,GAAIj8C,KAAKsnB,IAAIs5C,OAAS3kB,IAAMiQ,gBAAU2U,OAAS9R,IACvG/uD,KAAKsnB,IAAIy5C,KAAOhS,IAAM7C,iBAAW4U,KAAO9kB,GAAKkQ,iBAAWlsD,KAAKsnB,IAAIu5C,OAAS9R,IAAM7C,gBAAU0U,OAAS5kB,GAAI+S,IACvG,OAAS,KACb4R,YAIFA,aAAYM,OAAQ,GAM5B,GAAIA,MAAO,CACT,IAAIhR,GAAIC,GAAI2B,GAAIqP,GAAK7lB,IAErB,IAAKolB,MAAQ,EAAGQ,MAAQ,KAAMR,MAAQO,SAAUP,OAC1C3D,KAAOjB,cAAM4E,UAIf5O,IAFA5B,IADA8M,KAAOD,KAAKC,MACF,GAAK/gB,IAELiU,IADVC,GAAK6M,KAAK,GAAKhO,IACKmB,IACXgR,KAAIA,GAAKrP,GAAIoP,MAAQnE,MAIlC,GAAImE,MAAO,CACT,IAAIE,KAAOnlB,GAAI+S,IAAKqS,KAAOplB,GAAI0S,IAAK2S,KAAOplB,GAAIyS,IAAK4S,KAAOrlB,GAAI8S,IAC/DkS,MAAMnF,UAAUz5D,KACdkqB,cAAMlqB,KAAK05D,iBAAiBgB,KAAOkE,MAAMlE,KAAMoE,IAAKC,MAAQ,EAC5D70C,cAAMlqB,KAAK05D,iBAAiBgB,KAAMqE,IAAKC,MAAQ,EAC/C90C,cAAMlqB,KAAK05D,iBAAiBgB,KAAMsE,IAAKC,MAAQ,EAC/C/0C,cAAMlqB,KAAK05D,iBAAiBgB,KAAMuE,IAAKH,MAAQ,IAMrD,IAAKV,MAAQ,EAAGA,MAAQO,SAAUP,OAC5B3D,KAAOjB,cAAM4E,UACV3D,KAAKhB,UAAUj+D,eACXg+D,cAAM4E,QGjEjBD,CAAUxkB,GAAI+S,GAAI9S,GAAIyS,IAGxBvyD,KAAKowB,MAAQA,cACbpwB,KAAK0/D,MAAQA,cAEb8C,QACAP,QACA7xC,cACAsvC,cAAQ,KAGVsE,QAAQ3pE,WACN2qB,YAAag/C,QAEboB,SAAU,SAAAA,WACR,IAAIh1C,MAAQpwB,KAAKowB,MAEjB,OAAOpwB,KAAK0/D,MAAMz3D,IAAI,SAAS04D,MAC7B,IAAI0E,QAAU1E,KAAKhB,UAAU13D,IAAI,SAAS1P,GAAK,OAAOwoE,kBAAkBJ,KAAMvwC,MAAM73B,MAEpF,OADA8sE,QAAQt6D,KAAO41D,KAAKC,KAAK71D,KAClBs6D,WAIXC,UAAW,SAAAA,YACT,IAAIA,aACAl1C,MAAQpwB,KAAKowB,MAsBjB,OApBApwB,KAAK0/D,MAAM52D,QAAQ,SAAS63D,KAAMpoE,GAChC,GAAMI,GAAKgnE,UAAYgB,KAAKhB,WAAWj+D,OASvC,IARA,IACIi+D,UAEAhnE,EACAsjE,GAJA2E,KAAOD,KAAKC,KAEZ/lD,GAAK,EAGL0qD,GAAKn1C,MAAMuvC,UAAUhnE,EAAI,IACzB00B,GAAKk4C,GAAGzhC,OAAS88B,KAAO2E,GAAGxhC,MAAQwhC,GAAGzhC,OAEjCjpB,EAAIliB,GACXsjE,GAAK5uC,GAELA,IADAk4C,GAAKn1C,MAAMuvC,UAAU9kD,KACbipB,OAAS88B,KAAO2E,GAAGxhC,MAAQwhC,GAAGzhC,KAClCm4B,IAAM5uC,IAAM90B,EAAI0jE,GAAGh6D,OAAS1J,EAAI80B,GAAGprB,OAAS6hE,aAAalD,KAAM3E,GAAI5uC,IAAM,GAC3Ei4C,UAAUp/D,MAAM06D,KAAK71D,KAAMkxD,GAAGlxD,KAAMsiB,GAAGtiB,SAKtCu6D,WAGTE,MAAO,SAAAA,QACL,OAAOxlE,KAAKowB,MAAMpd,OAAO,SAAS4d,MAChC,OAAOA,KAAKmT,QACX97B,IAAI,SAAS2oB,MACd,OACEnN,OAAQmN,KAAKkT,KAAK/4B,KAClB2wC,OAAQ9qB,KAAKmT,MAAMh5B,SAKzBqf,KAAM,SAAAA,KAAS+R,EAAG34B,EAAGiiE,QAInB,IAHA,IAAiBpgC,GAAkDs7B,KAA/DvH,KAAOp5D,KAAUq9C,GAAK+b,KAAKsM,QAAU,EAAG1rE,EAAIo/D,KAAKsG,MAAMh+D,SAGlDi/D,KAAOvH,KAAKsG,MAAMriB,MAAM,KAAMA,IAAMrjD,EAAG,OAAO,KACvD,IAAI85D,GAAK33B,EAAIwkC,KAAKC,KAAK,GAAI7M,GAAKvwD,EAAIm9D,KAAKC,KAAK,GAAIlL,GAAK5B,GAAKA,GAAKC,GAAKA,GAGtE,GACE4M,KAAOvH,KAAKsG,MAAMr6B,GAAKgY,IAAKA,GAAK,KACjCsjB,KAAKhB,UAAU72D,QAAQ,SAASrO,GAC9B,IAAIm2B,KAAOwoC,KAAKhpC,MAAM31B,GAAImP,EAAIgnB,KAAKkT,KACnC,GAAKl6B,IAAM+2D,KAAKC,MAASh3D,IAAQA,EAAIgnB,KAAKmT,OAA1C,CACA,IAAI4hC,GAAKxpC,EAAIvyB,EAAE,GAAIg8D,GAAKpiE,EAAIoG,EAAE,GAAIqsC,GAAK0vB,GAAKA,GAAKC,GAAKA,GAClD3vB,GAAKyf,KAAIA,GAAKzf,GAAIoH,GAAKzzC,EAAE3H,gBAEjB,OAAPo7C,IAIT,OAFA+b,KAAKsM,OAASrgC,GAEG,MAAVogC,QAAkB/P,IAAM+P,OAASA,OAAS9E,KAAKC,KAAO,OCvIlD,IAAAiF,YAAA,WACb,IAAI1pC,EAAI46B,YACJvzD,EAAIwzD,YACJkN,OAAS,KAEb,SAAS4B,QAAQ/6D,MACf,OAAO,IAAIi5D,QAAQj5D,KAAK9C,IAAI,SAASpP,EAAGN,GACtC,IAAIiC,GAAKqJ,KAAK2G,MAAM2xB,EAAEtjC,EAAGN,EAAGwS,MAAQglD,iBAAWA,gBAASlsD,KAAK2G,MAAMhH,EAAE3K,EAAGN,EAAGwS,MAAQglD,iBAAWA,iBAG9F,OAFAv1D,EAAEyH,MAAQ1J,EACViC,EAAEuQ,KAAOlS,EACF2B,IACL0pE,QA+BN,OA5BA4B,QAAQV,SAAW,SAASr6D,MAC1B,OAAO+6D,QAAQ/6D,MAAMq6D,YAGvBU,QAAQN,MAAQ,SAASz6D,MACvB,OAAO+6D,QAAQ/6D,MAAMy6D,SAGvBM,QAAQR,UAAY,SAASv6D,MAC3B,OAAO+6D,QAAQ/6D,MAAMu6D,aAGvBQ,QAAQ3pC,EAAI,SAAShc,GACnB,OAAO/a,UAAU1D,QAAUy6B,EAAiB,mBAANhc,EAAmBA,EAAIq2B,yBAAUr2B,GAAI2lD,SAAW3pC,GAGxF2pC,QAAQtiE,EAAI,SAAS2c,GACnB,OAAO/a,UAAU1D,QAAU8B,EAAiB,mBAAN2c,EAAmBA,EAAIq2B,yBAAUr2B,GAAI2lD,SAAWtiE,GAGxFsiE,QAAQ5B,OAAS,SAAS/jD,GACxB,OAAO/a,UAAU1D,QAAUwiE,OAAc,MAAL/jD,EAAY,QAAUA,EAAE,GAAG,IAAKA,EAAE,GAAG,MAAOA,EAAE,GAAG,IAAKA,EAAE,GAAG,KAAM2lD,SAAW5B,UAAYA,OAAO,GAAG,GAAIA,OAAO,GAAG,KAAMA,OAAO,GAAG,GAAIA,OAAO,GAAG,MAGpL4B,QAAQptC,KAAO,SAASvY,GACtB,OAAO/a,UAAU1D,QAAUwiE,OAAc,MAAL/jD,EAAY,OAAS,EAAG,KAAMA,EAAE,IAAKA,EAAE,KAAM2lD,SAAW5B,SAAWA,OAAO,GAAG,GAAKA,OAAO,GAAG,GAAIA,OAAO,GAAG,GAAKA,OAAO,GAAG,KAGxJ4B,kXCsKMC,gCAzMX,SAAAA,2JAAeh6D,CAAA/L,KAAA+lE,WACX/lE,KAAKgmE,SAELhmE,KAAKimE,UACLjmE,KAAKkmE,YACLlmE,KAAKmmE,MAAQ,GAMbnmE,KAAKomE,cAELpmE,KAAKqmE,mRASL,OAAOptE,OAAOskB,OAAOvd,KAAKimE,0CAWxBK,QAASC,UAAU,IAAA9xD,MAAAzU,KACrB,GAAIumE,SAAU,CACVvmE,KAAKgmE,SACLhmE,KAAKwmE,UAAYD,SACjB,IAAME,WAENH,QAAQx9D,QAAQ,WACZ,IAAM7G,MAAQskE,SAAQh/D,WAAR,EAAAnC,WACdqhE,QAAQxkE,OAARmD,UAAA1D,QAAA,OAAA4L,EAAAlI,UAAA,KAGJ,IAAMshE,aAyBN,OAvBAztE,OAAO6M,KAAK9F,KAAKimE,QAAQn9D,QAAQ,SAACguB,IACzB2vC,QAAQ3vC,KACT4vC,UAAUxgE,KAAK4wB,MAIvB79B,OAAO6M,KAAK2gE,SAAS39D,QAAQ,SAACguB,IACrBriB,MAAKwxD,OAAOnvC,KAGbriB,MAAKwxD,OAAOnvC,IAAM2vC,QAAQ3vC,IAC1BriB,MAAKuxD,MAAM9/D,KAAKugE,QAAQ3vC,MAHxBriB,MAAK2xD,WAAWlgE,KAAKugE,QAAQ3vC,OAOrC4vC,UAAU59D,QAAQ,SAACguB,IACf,IAAM6vC,OAASlyD,MAAKwxD,OAAOnvC,IAC3BriB,MAAK4xD,UAAUngE,KAAKygE,eAEblyD,MAAKwxD,OAAOnvC,MAIhB92B,KAGX,GAAIsmE,QAAQ5kE,OAAS1B,KAAKgmE,MAAMtkE,OAE5B,IADA,IACSnJ,EADQyH,KAAKgmE,MAAMtkE,OACLnJ,EAAI+tE,QAAQ5kE,OAAQnJ,GAAK,EAC5CyH,KAAKomE,WAAWlgE,KAAKogE,QAAQ/tE,QAE9B,CAGH,IADA,IAAMquE,KAAON,QAAQ5kE,OACZnJ,GAAIquE,KAAMruE,GAAIyH,KAAKgmE,MAAMtkE,OAAQnJ,IAAK,EAAG,CAC9C,IAAMouE,OAAS3mE,KAAKgmE,MAAMztE,WACnByH,KAAKimE,OAAOU,OAAO7vC,IAC1B92B,KAAKqmE,UAAUngE,KAAKygE,QAExB3mE,KAAKgmE,MAAQhmE,KAAKgmE,MAAMlrD,MAAM8rD,KAAM5mE,KAAKgmE,MAAMtkE,QAEnD,OAAO1B,2CAWHqM,UAAU,IAAAsI,OAAA3U,KAQd,OAPAA,KAAA,IAAAqb,OAASrb,KAAKmmE,MAAd,SAA2Br9D,QAAQ,WAC/B,IAAMiC,KAAI3F,UAAA1D,QAAA,OAAA4L,EAAAlI,UAAA,GACJ0xB,GAAKniB,OAAK6xD,UAAY7xD,OAAK6xD,UAALj/D,MAAAoN,OAAIvP,WAAyB2F,KAAK+rB,KAAL1xB,UAAA1D,QAAA,OAAA4L,EAAAlI,UAAA,IACzDuP,OAAKsxD,OAAOnvC,IAAMzqB,SAAQ9E,WAAR,EAAAnC,WAClBuP,OAAKuxD,SAASpvC,IAAM/rB,OAExB/K,KAAKmmE,MAAQ,GACNnmE,2CAYP,OADAA,KAAKmmE,MAAQ,QACNnmE,uCAaLlG,IAAKN,OAEP,OADAwG,KAAKgmE,MAAMl9D,QAAQ,SAAAkB,MAAI,OAAIA,KAAKqnD,KAAKv3D,IAAKN,SACnCwG,yCAUJ8wD,WAAW,IAAA15C,OAAApX,KAQd,OAPA8wD,UAAUkV,MAAMl9D,QAAQ,WAAe,QAAA+9D,KAAAzhE,UAAA1D,OAAXgf,OAAW,IAAA7X,MAAAg+D,MAAAC,KAAA,EAAAA,KAAAD,KAAAC,OAAXpmD,OAAWomD,MAAA1hE,UAAA0hE,MACnC,IAAMhwC,GAAK1f,OAAKovD,UAAYpvD,OAAKovD,UAALj/D,MAAA6P,OAAkBsJ,QAAWA,OAAO,GAAGoW,IAAMpW,OAAO,GAChFtJ,OAAK6uD,OAAOnvC,IAAMpW,OAAO,GACzBtJ,OAAK4uD,MAAM9/D,KAAKwa,OAAO,MAG3B1gB,KAAKomE,cACEpmE,yCAcP,OAJAA,KAAKmmE,MAAQ,OAINnmE,uCAGL+d,IAAI,IAAA2V,OAAA1zB,KAIN,OAHA/G,OAAO6M,KAAK9F,KAAKimE,QAAQn9D,QAAQ,SAACrO,EAAGlC,GACjCwlB,GAAG2V,OAAKuyC,OAAOxrE,GAAIi5B,OAAKwyC,SAASzrE,GAAIlC,KAElCyH,qCAGN+d,IAAI,IAAAgpD,OAAA/mE,KAKL,OAJA/G,OAAO6M,KAAK9F,KAAKimE,QAAQn9D,QAAQ,WAAe,QAAAk+D,MAAA5hE,UAAA1D,OAAXgf,OAAW,IAAA7X,MAAAm+D,OAAAC,MAAA,EAAAA,MAAAD,MAAAC,QAAXvmD,OAAWumD,OAAA7hE,UAAA6hE,OAC5C,IAAMntE,IAAM4mB,OAAO,GACnBqmD,OAAKd,OAAOnsE,KAAOikB,GAAExW,WAAF,GAAGw/D,OAAKd,OAAOnsE,MAAfuhB,OAAwBqF,QAAQqmD,OAAKb,SAASpsE,UAE9DkG,6CAUMA,KAAA,IAAAqb,OAASrb,KAAKmmE,MAAd,SAERr9D,QAAQ,SAAAkB,MAAI,OAAIA,KAAKw7B,WACP,KAAfxlC,KAAKmmE,OACLnmE,KAAKulC,KAAK,SAAA9qC,GAAC,OAAIA,EAAE+qC,WAErBxlC,KAAA,IAAAqb,OAASrb,KAAKmmE,MAAd,YACAnmE,KAAKmmE,MAAQ,knEChJbz5D,kBAAsBrO,oBAAtBqO,kBAGF8gB,gBAFcr1B,OAAO+uE,YAEJ,SAAjB15C,eAAkBtlB,KAEpB,GAAmB,WAAfi/D,oBAAOj/D,KAAkB,CACzB,GAAY,OAARA,IAAgB,OAAO,EAE3B,GAAc,oBADNjP,OAAOoB,UAAUiI,SAAS5J,KAAKwP,KAEnC,MAA8E,YAAtEA,IAAI8c,YAAY1iB,WAAW+F,MAAM,4BAA8B,GAG/E,OAAO,IAQPiC,YAAc,SAAdA,cAAc,YAAA+Q,QAAY,IAAIzb,MAAO2K,WAAvB8Q,OAAmCxX,KAAK2G,MAAsB,IAAhB3G,KAAK4G,YAO/DoT,MAAQ,SAARA,MAAS7kB,GACX,IACI4Q,EADEiyC,UAEN,IAAK,IAAM/hD,OAAOd,OACPsB,eAAe5B,KAAKM,EAAGc,OAC1B8P,EAAI5Q,EAAEc,KACN+hD,OAAO/hD,KAAO0zB,eAAe5jB,GAAKiU,MAAMjU,GAAKA,GAGrD,OAAOiyC,QAoBLurB,mBACO,SAAAC,QAACvhE,KAAMoC,KACZ,GAAmB,WAAfi/D,oBAAOj/D,KACP,OAAO+G,MAAM,iCAGjB,IAAMq4D,gBAjBS,SAAjBC,eAAkBzhE,KAAMoC,KAC1B,IAAMo/D,mBAON,OANAxhE,KAAKgD,QAAQ,SAAChP,KACNA,OAAOoO,KAGXo/D,gBAAgBphE,KAAKpM,OAElBwtE,gBASqBC,CAAezhE,KAAMoC,KAC7C,OAAIo/D,gBAAgB5lE,OACTuN,MAAK,+BAAAoM,OAAgCisD,gBAAgBvkE,KAAK,QAE9DmF,KAiBTs/D,OAAS,SAATA,OAAUz8D,KAAMO,OAAP,OAAiBzH,KAAK6P,IAALnM,MAAA1D,KAAI4jE,mBAAQ18D,KAAK9C,IAAI,SAAApP,GAAC,OAAIA,EAAEyS,YAQtDo8D,OAAS,SAATA,OAAU38D,KAAMO,OAAP,OAAiBzH,KAAK2P,IAALjM,MAAA1D,KAAI4jE,mBAAQ18D,KAAK9C,IAAI,SAAApP,GAAC,OAAIA,EAAEyS,YAUtDq8D,+BAAoB,SAApBA,kBAAqB58D,KAAMnC,OAAQg/D,WAAc,IAAAj1C,KAC/Cnc,OACEqxD,UAEN,OADA98D,KAAOA,KAAK,aAAclC,MAAQkC,MAAQA,MAClC68D,WACR,KAAKhpE,gCAAiBC,YAClB2X,QAASmc,SAAGtX,OAAH9T,MAAAorB,KAAA80C,mBAAa18D,KAAK9C,IAAI,SAAAoI,KAAG,OAAIA,IAAIpI,IAAI,SAAApP,GAAC,OAAIA,EAAE+P,OAAO,MAAKoK,OAAO,SAAAna,GAAC,YAAUyU,IAANzU,QAC7E,MACJ,QACI,IADJ,IAAAivE,MAAA,SAAAA,MACavvE,EAAOkQ,KACZ,IAAM4H,IAAMtF,KAAKxS,GAFzBwvE,QAAAC,eAGiCp/D,OAHjC,GAGeq/D,OAHfF,QAAA,GAGuBG,OAHvBH,QAAA,GAIcI,KAAO93D,IAAI2C,OAAO,SAAAna,GAAC,OAAKya,MAAMza,EAAEovE,WAChCt9D,KAAO0F,IAAI2C,OAAO,SAAAna,GAAC,OAAKya,MAAMza,EAAEqvE,WACtC,GAAIC,KAAKzmE,QAAUiJ,KAAKjJ,OAAQ,CAC5B,IAAM0mE,SAAWV,OAAOS,KAAMF,QACxBI,UAAYX,OAAO/8D,KAAMu9D,QACzBI,SAAWd,OAAOW,KAAMF,QACxBM,UAAYf,OAAO78D,KAAMu9D,QAC/BL,OAAO3hE,MAAMrC,KAAK2P,IAAI40D,SAAUC,WAAYxkE,KAAK6P,IAAI40D,SAAUC,eAV9DhwE,EAAI,EAAGkQ,IAAMsC,KAAKrJ,OAAQnJ,EAAIkQ,IAAKlQ,IAAKuvE,MAAxCvvE,GAaTie,OAASqxD,OAAOnmE,QAAUmC,KAAK2P,IAALjM,MAAA1D,KAAI4jE,mBAAQI,OAAO5/D,IAAI,SAAApP,GAAC,OAAIA,EAAE,OAAMgL,KAAK6P,IAALnM,MAAA1D,KAAI4jE,mBAAQI,OAAO5/D,IAAI,SAAApP,GAAC,OAAIA,EAAE,WAGhG,OAAO2d,QASLgyD,yBAAc,SAAdA,YAAeC,QAASb,WAC1B,IAGoDc,MAHhDlyD,WACJiyD,QAAUA,QAAQz1D,OAAO,SAAA21D,KAAG,OAAIA,KAAOA,IAAIjnE,UAC/BA,SAEJ8U,OADAoxD,YAAchpE,gCAAiBC,aACtB6pE,UAAGrtD,OAAH9T,MAAAmhE,MAAAjB,mBAAagB,WAEZ5kE,KAAK2P,IAALjM,MAAA1D,KAAI4jE,mBAAQgB,QAAQxgE,IAAI,SAAApP,GAAC,OAAIA,EAAE,OAAMgL,KAAK6P,IAALnM,MAAA1D,KAAI4jE,mBAAQgB,QAAQxgE,IAAI,SAAApP,GAAC,OAAIA,EAAE,SAItF,OAAO2d,QAGLoyD,WACF9G,OAAQ+G,cACRC,MAAOC,aACPrQ,QAASsQ,QACTjQ,OAAQkQ,OACRnQ,KAAMoQ,KACNhQ,IAAKiQ,IACLlQ,SAAUmQ,UAGRC,SACFC,MAAOC,WACPC,OAAQC,UACRnzB,OClOG,SAASA,kBAAO78C,GACrB,OAAQA,GDkONiwE,QAASC,WACTC,KAAMC,UACNC,KAAMC,UACNjI,OE9NG,SAASkI,YAAYvwE,GAC1B,QAASA,GAAK,IAAM,EAAI,EAAIoK,KAAKkQ,KAAK,EAAIta,EAAIA,GAAKoK,KAAKkQ,KAAK,GAAKta,GAAK,GAAKA,GAAK,GAAK,IFiRxDquC,+BAAoB,SAApBA,kBAAqBz3B,IAAK7W,MAAOwuC,MAS7D,IARA,IAIIt3B,IACAw3B,GALAC,IAAM,EAENC,KADW/3B,IAAI3O,OACC,EAMbymC,IAAMC,MACT13B,IAAM7M,KAAK8M,OAAOw3B,IAAMC,MAAQ,GAChCF,GAAKrkC,KAAKsnB,IAAI9a,IAAIK,KAAOlX,OACpBqK,KAAKsnB,IAAI9a,IAAIK,IAAM,GAAKlX,QAEnB0uC,GACNC,IAAMz3B,IAAM,EAEZ03B,KAAO13B,IAIf,IAAKs3B,KACD,OAAOI,KAGX,IAAMH,QAAU53B,IAAI+3B,MACpB,OAAIH,UAAYzuC,MACL4uC,KACAH,QAAUzuC,MACJ,IAAT4uC,KAAqBA,KACT,SAATJ,KAAkBI,KAAO,EAAIA,KAEpCA,OAAS/3B,IAAI3O,OAAS,EAAY0mC,KACtB,SAATJ,KAAkBI,KAAOA,KAAO,GAGrC6hC,gBAAkB,SAAlBA,gBAAmBl/D,KAAMjR,KAC3B,IAAMowE,WAAan/D,KAAKiI,OAAO,SAAAna,GAAC,MAAiB,iBAANA,IAC3C,OAAOqxE,WAAWpiC,+BAAkBoiC,WAAYpwE,OAO9CqwE,UAAY,SAAZA,YAAY,OAAMhyE,QA6DQiyE,uBAvDJz8C,sBAEG08C,qBAqDyB,SAAxBD,sBAAyBE,IAAKxzC,GAAI6nB,QAE9D,OADA2rB,IAAMA,IAAIhqE,QAAQ,OAAQ,KACnB,GAAA+a,OAAIsjC,OAAJ,KAAAtjC,OAAcivD,KAAd,GAAAjvD,OAAwBsjC,OAAxB,KAAAtjC,OAAkCivD,IAAlC,KAAAjvD,OAAyCyb,OAYnByzC,aAAe,SAAfA,aAAgBnjE,MAAO5N,OACpD,YAAqB,IAAV4N,OAA2C,WAAjB+/D,oBAAO//D,SAAuBA,MACxD5N,MAEJ4N,OAULojE,mBAAqB,SAArBA,mBAAsBr2C,OA4BxB,IA3BA,IAAMs2C,mBACAC,WACA5kE,KAAO7M,OAAO6M,KAAKquB,OAQnBw2C,MAAQ,SAARA,MAAS7xE,MACX,GAAI2xE,gBAAgB/oE,SAAWoE,KAAKpE,OAChC,OAAO,EAEXgpE,QAAQ5xE,OAAQ,EAEhB,IADA,IAAMs3B,MAAQ+D,MAAMr7B,MACX2B,EAAI,EAAGA,EAAI21B,MAAM1uB,OAAQjH,IAAK,CACnC,IAAMw1B,IAAMG,MAAM31B,GACbiwE,QAAQz6C,MACT06C,MAAM16C,KAKd,OADAw6C,gBAAgBvkE,KAAKpN,OACd,GAGFP,EAAI,EAAGA,EAAIuN,KAAKpE,SACjBipE,MAAM7kE,KAAKvN,IADcA,KAIjC,OAAOkyE,iBASLG,eAAiB,SAAjBA,eAAkB1iE,IAAK6V,IACzB,IAAK,IAAMjkB,OAAOoO,IACVjP,OAAOqB,eAAe5B,KAAKwP,IAAKpO,MAChCikB,GAAGjkB,IAAKoO,MAUa2iE,gCAK7B,SAAAA,UAAwB,IAAX9/D,KAAW3F,UAAA1D,OAAA,QAAA4L,IAAAlI,UAAA,GAAAA,UAAA,MAAA0lE,4BAAA9qE,KAAA6qE,SACpB7qE,KAAK+qE,SAAWjF,cAAU3pC,EAAE,SAAAtjC,GAAC,OAAIA,EAAEsjC,IAAG34B,EAAE,SAAA3K,GAAC,OAAIA,EAAE2K,IAC/CxD,KAAK+K,KAAKA,+EAQRA,OAIF,OAHIA,QACA/K,KAAKgrE,WAAahrE,KAAK+qE,SAAShgE,QAE7B/K,uCAULm8B,EAAG34B,EAAGiiE,QACR,OAAOzlE,KAAKgrE,WAAW5gD,KAAK+R,EAAG34B,EAAGiiE,uBAIpCwF,uBAAyB,SAAzBA,uBAA0BC,aAAcntD,GAAI2c,SAC9C,IAAI5gC,IAAMoxE,aAAapxE,IACjBqxE,UAAYD,aAAaC,UAC3BA,YACCzwC,QAAQ0wC,WAAWD,aAAezwC,QAAQ0wC,WAAWD,eACjDrxE,MACDA,IAAMb,OAAO6M,KAAK40B,QAAQ0wC,WAAWD,YAAYzpE,QAErDg5B,QAAQ0wC,WAAWD,WAAWrxE,KAAOikB,KAErCjkB,IAAMb,OAAO6M,KAAK40B,QAAQ0wC,YAAY1pE,OACtCg5B,QAAQ0wC,WAAWtxE,KAAOikB,KAW5BstD,WAAa,SAAbA,WAAcnjE,KAChB,QAAYoF,IAARpF,KAA6B,OAARA,IACrB,OAAOA,IAFwB,IAInC,IAAIoe,OAASpe,IAJsB2+D,KAAAzhE,UAAA1D,OAAXkH,OAAW,IAAAC,MAAAg+D,KAAA,EAAAA,KAAA,KAAAC,KAAA,EAAAA,KAAAD,KAAAC,OAAXl+D,OAAWk+D,KAAA,GAAA1hE,UAAA0hE,MAKnC,IAAK,IAAIvuE,EAAI,EAAGkQ,IAAMG,OAAOlH,OAAQnJ,EAAIkQ,WAEtB6E,KADfgZ,OAASA,OAAO1d,OAAOrQ,MACgB,OAAX+tB,QAFc/tB,KAM9C,OAAO+tB,QAYLglD,8BAMF,SAAAA,MAAa1+D,QAAQk+D,4BAAA9qE,KAAAsrE,OAEjBtrE,KAAKmc,MAAQuZ,mBAAM77B,OAAO+S,QAC1B5M,KAAKorE,iGAWL,OAAOprE,KAAKmc,MAAMyP,kDAUd2/C,SAAU/xE,OAEdwG,KAAKmc,MAAMoW,KAAKg5C,SAAU/xE,6EAWoBgyE,UAAWC,SAAU32C,aAAgC,IAAnBo2C,aAAmB9lE,UAAA1D,OAAA,QAAA4L,IAAAlI,UAAA,GAAAA,UAAA,MAC/FotB,MAAQg5C,UACP3iE,MAAMwB,QAAQmhE,aACfh5C,OAASg5C,YAEb,IAAMztD,GAAK/d,KAAKmc,MAAMlK,KAAKugB,MAAOi5C,SAAU32C,aAE5C,OADAm2C,uBAAuBC,aAAcntD,GAAI/d,MAClCA,iFAU2CwrE,UAAWC,SAAU32C,aAAgC,IAAnBo2C,aAAmB9lE,UAAA1D,OAAA,QAAA4L,IAAAlI,UAAA,GAAAA,UAAA,MACnGotB,MAAQg5C,UACP3iE,MAAMwB,QAAQmhE,aACfh5C,OAASg5C,YAEb,IAAMztD,GAAK/d,KAAKmc,MAAMuvD,GAAGl5C,MAAOi5C,SAAU32C,aAE1C,OADAm2C,uBAAuBC,aAAcntD,GAAI/d,MAClCA,qCAUNurE,UACD,OAAOvrE,KAAKmc,MAAMoW,KAAKg5C,oDAWjBA,SAAUE,UAChB,OAAOzrE,KAAKmc,MAAMwvD,eAAeJ,SAAUE,gDAGvCF,SAAU/xE,OAEd,OADAwG,KAAKmc,MAAM+W,OAAOq4C,SAAU/xE,OACrBwG,6DAKP,OADA/G,OAAOskB,OAAOvd,KAAKorE,YAAYtiE,QAAQ,SAAAiV,IAAE,OAAIA,OACtC/d,uDAGqB,IAAnBkrE,aAAmB9lE,UAAA1D,OAAA,QAAA4L,IAAAlI,UAAA,GAAAA,UAAA,MACpB+lE,UAAmBD,aAAnBC,UAAWrxE,IAAQoxE,aAARpxE,IACb40B,UAAY1uB,KAAKorE,WAAWD,WAClC,GAAIrxE,IAAK,CACL,IAAMikB,GAAKstD,WAAW38C,UAAW50B,KACjCikB,IAAMA,UAEN9kB,OAAOskB,OAAOmR,WAAW5lB,QAAQ,SAAAiV,IAAE,OAAIA,OACvC/d,KAAKorE,WAAWD,cAEpB,OAAOnrE,kBAUT4rE,aAAe,SAAfA,aAAgB1qE,KAClB,IAAMmP,IAAMnP,IAAIoB,WAAW+F,MAAM,eACjC,OAAKgI,IAKEhP,SAASgP,IAAI,GAAI,IAHb,MAyBTw7D,wBAAa,SAAbA,WAAcC,OAAQnlE,QAASwV,OAA6B,IAC1D4vD,KADoCb,aAAsB9lE,UAAA1D,OAAA,QAAA4L,IAAAlI,UAAA,GAAAA,UAAA,MAExDuD,MAAQwT,OAASA,iBAAiBuZ,mBAAQvZ,MAAQuZ,mBAAM77B,WACxDmyE,cACN,IAAK,IAAMz5C,QAAQ5rB,QACf,MAAOrM,eAAe5B,KAAKiO,QAAS4rB,MAAO,CAEvC,IAAM05C,cADNF,KAAOplE,QAAQ4rB,OACU9V,MAAOsvD,KAAKtvD,KAAKwvD,YACtCC,mBAAa,EACXf,UAAYD,aAAaC,UAE3Be,cADAf,UACa,GAAA9vD,OAAM8vD,UAAN,KAAA9vD,OAAmBkX,MAEhBA,KAEf5pB,MAAM4pB,KAAN,GAAAlX,OAAc6wD,kBACfF,WAAWz5C,MAAQw5C,KAAKvyE,QAER,IAAhByyE,cACAH,OAAOv5C,MAAS,SAACmI,QAASje,KAAM0vD,QAAhB,OAA2B,WAAe,IACtD,IAAIjrE,IACAkrE,UAFkDpF,MAAA5hE,UAAA1D,OAAXgf,OAAW,IAAA7X,MAAAm+D,OAAAC,MAAA,EAAAA,MAAAD,MAAAC,QAAXvmD,OAAWumD,OAAA7hE,UAAA6hE,OAGtD,IAAMoF,UAAY3rD,OAAOhf,OACnB4qE,QAAU3jE,MAAM4pB,KAAK45C,QAC3B,GAAIE,UAAW,CAEX,IAAME,aAAe9vD,MAAQA,KAAK8vD,aAClCrrE,IAAMwf,OACN,IAAMnD,UACN,GAAId,KAAM,CACN,IAAK,IAAIlkB,EAAI,EAAGA,EAAI8zE,UAAW9zE,IAAK,CAChC2I,IAAMwf,OAAOnoB,GACb,IAAMi0E,aAAe/vD,KAAK+vD,eAAiBD,aAAe9vD,KAAK+vD,aAAaj0E,GACxEkkB,KAAK+vD,cACHC,UAAYhwD,KAAKgwD,YAAcF,aAAe9vD,KAAKgwD,UAAUl0E,GAAKkkB,KAAKgwD,WAM7E,GALID,cAAwC,mBAAjBA,eAEvBtrE,IAAMsrE,aAAatrE,IAAKorE,QAASR,SAGjCW,UAEA,GAAyB,mBAAdA,UAA0B,CACjC,IAAIC,aAAejwD,KAAKiwD,aACpBA,cAAgBH,eAChBG,aAAeA,aAAan0E,IAG5B6zE,UADAM,eAGY,EAGZD,UAAUvrE,OAASkrE,WACnB7uD,OAAOrX,KAAKhF,UAEb,GAAyB,iBAAdurE,WACd,GAAkB,gBAAdA,UAA6B,CAC7B,IAAMC,cAAeH,aAAe9vD,KAAKiwD,aAAan0E,GAClDkkB,KAAKiwD,aACLxrE,KAAQA,IAAI8jB,YAAYlsB,OAAS4zE,eACjCnvD,OAAOrX,KAAKhF,WAKpBqc,OAAOrX,KAAKhF,UAGhBqc,OAAOrX,KAAKhF,KAGpB,IAAMyrE,OAASlwD,KAAKkwD,OACdC,UAAYlyC,QAAQnI,KAAK45C,QAC/BQ,QAAUA,OAAOpvD,OAAO,GAAIuuD,QACxBS,cACAK,UAAU9jE,QAAQ,SAACtP,MAAOjB,QACJ+U,IAAdiQ,OAAOhlB,KACPglB,OAAOhlB,GAAKiB,SAIxB+jB,OAAO7b,QAAUg5B,QAAQnI,KAAK45C,OAAQI,aAAehvD,OAASA,OAAO,SAErEmd,QAAQnI,KAAK45C,OAAQI,aAAerrE,IAAMA,IAAI,IAElD,OAAO4qE,OAGX,OAAOpxC,QAAQnI,KAAK45C,SAtER,CAuEbxjE,MAAOojE,KAAKtvD,KAAMyvD,gBAKjC,QAA+B5+D,IAA3B49D,aAAaC,UACbxiE,MAAMuqB,OAAO84C,gBACV,CACH,IAAMb,WAAYD,aAAaC,UAC/BxiE,MAAMuqB,OAAOi4C,WAAWa,YAG5B,OAAQF,OAAQnjE,QASdkkE,sBAAwB,SAAxBA,sBAAyBnyC,QAASlI,OACpCv5B,OAAOub,QAAQge,OAAO1pB,QAAQ,SAACgkE,UAC3B,IAAMv6C,KAAOu6C,SAAS,GAChBC,YAAcD,SAAS,GAAGC,YAC1B9rE,OAAS6rE,SAAS,GAAGvC,aACrBiC,aAAeM,SAAS,GAAGN,aAC3BnyE,UAAYqgC,QAAQ1V,YAAY3qB,UAChCpB,OAAOqB,eAAe5B,KAAK2B,UAAWk4B,QACpCtxB,SACAy5B,QAAO,IAAArf,OAAKkX,OAAUtxB,QAE1By5B,QAAQnI,MAAQ,WACZ,GAAIntB,UAAO1D,OAAQ,CACf,IAAIlI,MAAK4L,UAAA1D,QAAA,OAAA4L,EAAAlI,UAAA,GAIT,OAHIonE,eACAhzE,MAAQgzE,aAAa9xC,QAADt1B,UAAA1D,QAAA,OAAA4L,EAAAlI,UAAA,KAEpB2nE,cAAgBA,YAAYvzE,OACrBkhC,QAAO,IAAArf,OAAKkX,QAEvBmI,QAAO,IAAArf,OAAKkX,OAAU/4B,MACfkhC,SACT,OAAOA,QAAO,IAAArf,OAAKkX,YAwC/By6C,qBAAU,SAAVA,QAAU3xE,MAAI,OAAI,SAAC4xE,OAAQC,QAC7B,MAAa,UAAT7xE,OACK4xE,QAlBO,SAAdE,YAAexiE,KAAMC,MACvB,GAAID,KAAKjJ,SAAWkJ,KAAKlJ,OAAU,OAAO,EAC1C,IAAK,IAAInJ,EAAIoS,KAAKjJ,OAAQnJ,GAAK,EAAGA,IAC9B,GAAIoS,KAAKpS,KAAOqS,KAAKrS,GAAM,OAAO,EAGtC,OAAO,EAeI40E,CAAYF,OAAQC,QACX,WAAT7xE,KACApC,OAAOm0E,GAAGH,OAAQC,QACpBD,SAAWC,SAqBlBG,WACFC,eAAgB,0BASdC,eAAiB,SAAjBA,eAAkB9pD,OAAQ+pD,MAC5B,IAAK,IAAMj7C,QAAQi7C,KACXhgD,eAAe/J,OAAO8O,QAAU/E,eAAeggD,KAAKj7C,OACpDg7C,eAAe9pD,OAAO8O,MAAOi7C,KAAKj7C,OAC3Bi7C,KAAKj7C,gBAAiBt5B,QAAUu0E,KAAKj7C,MAAMvN,cAAgB/rB,QAClEwqB,OAAO8O,SACPg7C,eAAe9pD,OAAO8O,MAAOi7C,KAAKj7C,QAElC9O,OAAO8O,MAAQi7C,KAAKj7C,MAG5B,OAAO9O,QAaLgqD,6BAAkB,SAAlBA,gBAAmBC,IAAKC,UAAW5iE,KAAM6iE,MAC3C,IAAI9c,UAAY4c,KGl6BL,SAASG,aAAuB,IAAX9iE,KAAW3F,UAAA1D,OAAA,QAAA4L,IAAAlI,UAAA,GAAAA,UAAA,MAC3C,OAAO,IAAI2gE,qBAAUh7D,MHi6BE8iE,KAKjBC,iBAHNhd,UAAYA,UAAU/lD,KAAKA,KAAM6iE,OAETxc,QAAQl+B,OAAOy6C,WACT9jE,MAAMinD,WAGpC,OADAA,UAAUI,QAAUJ,UAAUI,OAAO1rB,SAC9BsoC,iBAqDL3f,0BAAe,SAAfA,eAAe,OAAMnT,WAMrB+yB,gCAAqB,SAArBA,qBAAqB,OAAMC,YAwB3BC,mCAAwB,SAAxBA,wBAAwB,OAAMlzB,qBAsBpC,IA8BMmzB,SAAW,SAAXA,SAAY70E,EAAGy5C,EAAG1vC,GAAa,IAAVzI,EAAUyK,UAAA1D,OAAA,QAAA4L,IAAAlI,UAAA,GAAAA,UAAA,GAAN,EAC3B/L,GAAKA,EAAGy5C,GAAKA,EAAG1vC,GAAKA,EAAGzI,GAAKA,EAC7BtB,GAAK,IAAKy5C,GAAK,IAAK1vC,GAAK,IACzB,IAEIsF,EACAlO,EAHEkZ,IAAM7P,KAAK6P,IAAIra,EAAGy5C,EAAG1vC,GACrBoQ,IAAM3P,KAAK2P,IAAIna,EAAGy5C,EAAG1vC,GAGrB5K,GAAKkb,IAAMF,KAAO,EAExB,GAAIE,MAAQF,IACR9K,EAAIlO,EAAI,MACL,CACH,IAAM3B,EAAI6a,IAAMF,IAEhB,OADAhZ,EAAIhC,EAAI,GAAMK,GAAK,EAAI6a,IAAMF,KAAO3a,GAAK6a,IAAMF,KACvCE,KACR,KAAKra,EAAGqP,GAAKoqC,EAAI1vC,GAAKvK,GAAKi6C,EAAI1vC,EAAI,EAAI,GAAI,MAC3C,KAAK0vC,EAAGpqC,GAAKtF,EAAI/J,GAAKR,EAAI,EAAG,MAC7B,KAAKuK,EAAGsF,GAAKrP,EAAIy5C,GAAKj6C,EAAI,EAG1B6P,GAAK,EAET,OAAQA,EAAGlO,EAAGhC,EAAGmC,IAgDfwzE,YAAc,SAAdA,YAAeC,KAWjB,MAViB,yCAUJvwE,KAAKuwE,MALA,iHAKkBvwE,KAAKuwE,KAC9B,MAVM,0CAWGvwE,KAAKuwE,MALP,sGAKyBvwE,KAAKuwE,KACrC,MALM,yBAMGvwE,KAAKuwE,KACd,MACFA,KA0EPC,sBAAwB,SAAxBA,sBAAyBpxD,UAAWP,SAAUhjB,MAChD,GAAiB,OAAbgjB,SACA,OAAO,KAEX,IAAM4xD,UAAYr1E,OAAO6M,KAAK4W,UAU9B,OAAOO,UAAUa,OATH,SAARywD,MAAQ3lE,QAAM,OAAI0lE,UAAU5wD,MAAM,SAACpS,OACrC,IAAMpK,IAAM0H,OAAO0C,OAAO9R,MACpB+H,MAAQmb,SAASpR,OAAO,aAAczC,MAAQ6T,SAASpR,OAAO,GAAKoR,SAASpR,OAClF,MAAwB,iBAAb/J,MAAM,QACyB+L,IAA/B/L,MAAM6oB,KAAK,SAAAvxB,GAAC,OAAIA,IAAMqI,OAE1BK,OAAQL,KAAOK,MAAM,IAAML,KAAOK,MAAM,OAI/Cyc,WAAW,EACXtkB,aAWF80E,yCAA8B,SAA9BA,4BAA+BvxD,UAAWqE,YAAa5nB,MACzD,IAAI+0E,kBACJ,GAAIntD,uBAAuBzY,MAAO,CAC9B,IAAMuU,aAAeH,UAAUI,kBAEzBqxD,QAAUptD,YAAYxG,MAAM,EAAGwG,YAAY5f,QACjD,GAAI4f,uBAAuBxM,SACvB25D,kBAAoBntD,YAAYrE,cAAe,QAC5C,GAAIqE,uBAAuBzY,OAASyY,YAAY,GAAG5f,OAAQ,CAC9D,IAAMitE,eAAiBrtD,YAAY,GAAGtO,OAAO,SAAAna,GAAC,OAAIA,KAAKukB,eACvDqxD,kBAAoBxxD,UAAUa,OAAO,SAAClV,QAClC,IAAIgmE,SAAU,EAMd,OALAD,eAAe7lE,QAAQ,SAAC6U,UAAWzL,KAC/B,IAAM1Y,MAAQoP,OAAO+U,WAAWC,UAC1B3b,MAAQysE,QAAQnpD,UAAU,SAAA1sB,GAAC,OAAIA,EAAEqZ,OAAS1Y,QAChDo1E,QAAUA,UAAsB,IAAX3sE,QAElB2sE,UAEP5wD,WAAW,EACXtkB,kBAIR+0E,kBAAoBJ,sBAAsBpxD,UAAWqE,YAAa5nB,MAEtE,OAAO+0E,mBASLI,+BAAoB,SAApBA,kBAAqBn0C,QAASo0C,aAA2B,QAAAC,MAAA3pE,UAAA1D,OAAXgf,OAAW,IAAA7X,MAAAkmE,MAAA,EAAAA,MAAA,KAAAC,MAAA,EAAAA,MAAAD,MAAAC,QAAXtuD,OAAWsuD,MAAA,GAAA5pE,UAAA4pE,OAC3D,IAAMC,gBAAkBH,YAAWvnE,WAAX,GAAYmzB,SAAZrf,OAAwBqF,SAChD,IAAK,IAAM5mB,OAAOm1E,gBACd,MAAO30E,eAAe5B,KAAKu2E,gBAAiBn1E,KAAM,CAC9C,IAAMqxE,UAAYzqD,OAAO,GACrB9mB,GAAK,KACLuxE,YACAvxE,GAAKuxE,UAAU+D,OAEnB,IAAMC,OAASF,gBAAgBn1E,KACzBs1E,SAAWD,OAAO9zE,KAClBm3B,MAAQ28C,OAAO38C,MACf68C,WAAaF,OAAOG,SAC1B50C,QAAQ/xB,QAAQymE,UAAU58C,MAAO68C,YAAY,GACzClE,UAAWvxE,OAMrB21E,aAAe,SAAfA,aAAe/1E,OAAK,OAAK8Z,MAAM9Z,QAAUA,SAAW0lD,KAAY1lD,QAAU0lD,KA0B1E5rB,QAAU,SAAVA,QAAUjjB,KAAG,OAAKA,eAAexH,MAAQwH,KAAOA,MAmEhDm/D,uBAAY,SAAZA,UAAYn0E,MAAI,OIr3CP,WACb,IAAIA,KAAOm7C,sBAASsrB,eAChBppC,KAAO8d,sBAAS,IAChB9b,QAAU,KAEd,SAASmiB,SACP,IAAIua,OAGJ,GAFK18B,UAASA,QAAU08B,OAAS10C,YACjCrnB,KAAKkM,MAAMvH,KAAMoF,WAAWkzD,KAAK59B,SAAUhC,KAAKnxB,MAAMvH,KAAMoF,YACxDgyD,OAAQ,OAAO18B,QAAU,KAAM08B,OAAS,IAAM,KAepD,OAZAva,OAAOxhD,KAAO,SAAS8kB,GACrB,OAAO/a,UAAU1D,QAAUrG,KAAoB,mBAAN8kB,EAAmBA,EAAIq2B,sBAASr2B,GAAI08B,QAAUxhD,MAGzFwhD,OAAOnkB,KAAO,SAASvY,GACrB,OAAO/a,UAAU1D,QAAUg3B,KAAoB,mBAANvY,EAAmBA,EAAIq2B,uBAAUr2B,GAAI08B,QAAUnkB,MAG1FmkB,OAAOniB,QAAU,SAASva,GACxB,OAAO/a,UAAU1D,QAAUg5B,QAAe,MAALva,EAAY,KAAOA,EAAG08B,QAAUniB,SAGhEmiB,OJ61CiBA,GAASxhD,KAAKutE,UAAUvtE,QAE5Co0E,aAAWC,gBAAAC,gBKz4CS,OL04CKC,YADdF,gBAAAC,aK34Cc,YL64CKE,iBAFnBH,gBAAAC,aK14Ce,aCCjB,SAAS1S,QACtB,OAAOx5B,gBAAUw5B,QAAQ35C,YNw4CVqsD,cAKXG,cAAYJ,gBAAAK,iBK74Cc,YEHjB,SAAS9S,OAAQh3C,OAC9B,IAAOjsB,EAAIijE,OAAOv7D,QAAU,EAC5B,IAAK,IAAInJ,EAAUM,EAAGk7D,GAAIic,GAAIC,GAAIj2E,EAAtB6gB,EAAI,EAAqBliB,EAAIskE,OAAOh3C,MAAM,IAAIvkB,OAAQmZ,EAAIliB,IAAKkiB,EACzE,IAAKm1D,GAAKC,GAAK,EAAG13E,EAAI,EAAGA,EAAIyB,IAAKzB,GAC3Bw7D,IAAMl7D,EAAIokE,OAAOh3C,MAAM1tB,IAAIsiB,IAAI,GAAKhiB,EAAE,KAAO,GAChDA,EAAE,GAAKm3E,GAAIn3E,EAAE,GAAKm3E,IAAMjc,IACfA,GAAK,GACdl7D,EAAE,GAAKo3E,GAAIp3E,EAAE,GAAKo3E,IAAMlc,IAExBl7D,EAAE,GAAKm3E,KPu4CGN,gBAAAK,cK54CS,OL84CKG,MAFdR,gBAAAK,cK34CW,SGHd,SAAS9S,OAAQh3C,OAC9B,IAAOjsB,EAAIijE,OAAOv7D,QAAU,EAA5B,CACA,IAAK,IAAInJ,EAAGyB,EAAgCwJ,EAA7BqX,EAAI,EAAGliB,EAAIskE,OAAO,GAAGv7D,OAAWmZ,EAAIliB,IAAKkiB,EAAG,CACzD,IAAKrX,EAAIjL,EAAI,EAAGA,EAAIyB,IAAKzB,EAAGiL,GAAKy5D,OAAO1kE,GAAGsiB,GAAG,IAAM,EACpD,GAAIrX,EAAG,IAAKjL,EAAI,EAAGA,EAAIyB,IAAKzB,EAAG0kE,OAAO1kE,GAAGsiB,GAAG,IAAMrX,EAEpDw5D,KAAKC,OAAQh3C,URw4CGypD,gBAAAK,cK14CW,SIJd,SAAS9S,OAAQh3C,OAC9B,IAAOjsB,EAAIijE,OAAOv7D,QAAU,IAAS/I,GAAKsjE,GAAKgB,OAAOh3C,MAAM,KAAKvkB,QAAU,EAA3E,CACA,IAAK,IAAkBu6D,GAAItjE,EAAGqB,EAArBwJ,EAAI,EAAGqX,EAAI,EAAaA,EAAIliB,IAAKkiB,EAAG,CAC3C,IAAK,IAAItiB,EAAI,EAAG80B,GAAK,EAAGC,GAAK,EAAG/0B,EAAIyB,IAAKzB,EAAG,CAK1C,IAJA,IAAI43E,GAAKlT,OAAOh3C,MAAM1tB,IAClB63E,KAAOD,GAAGt1D,GAAG,IAAM,EAEnBw1D,IAAMD,MADCD,GAAGt1D,EAAI,GAAG,IAAM,IACF,EAChB6rB,EAAI,EAAGA,EAAInuC,IAAKmuC,EAAG,CAC1B,IAAI4pC,GAAKrT,OAAOh3C,MAAMygB,IAGtB2pC,KAFWC,GAAGz1D,GAAG,IAAM,IACZy1D,GAAGz1D,EAAI,GAAG,IAAM,GAG7BwS,IAAM+iD,KAAM9iD,IAAM+iD,GAAKD,KAEzBnU,GAAGphD,EAAI,GAAG,IAAMohD,GAAGphD,EAAI,GAAG,GAAKrX,EAC3B6pB,KAAI7pB,GAAK8pB,GAAKD,IAEpB4uC,GAAGphD,EAAI,GAAG,IAAMohD,GAAGphD,EAAI,GAAG,GAAKrX,EAC/Bw5D,KAAKC,OAAQh3C,UT03CG8pD,eAQZQ,mBAAQ,SAARA,MAAQ7vD,QAAM,OlB/4CL,WACb,IAAI5a,KAAO0wC,0BACPvwB,MAAQuqD,WACRvvB,OAASwvB,KACTj3E,MAAQ2jE,WAEZ,SAASoT,MAAMxlE,MACb,IACIxS,EAIAm4E,GALAC,GAAK7qE,KAAKyB,MAAMvH,KAAMoF,WAEtBzM,EAAIoS,KAAKrJ,OACT1H,EAAI22E,GAAGjvE,OACPkvE,GAAK,IAAI/nE,MAAM7O,GAGnB,IAAKzB,EAAI,EAAGA,EAAIyB,IAAKzB,EAAG,CACtB,IAAK,IAAkDs4E,IAA9CC,GAAKH,GAAGp4E,GAAI43E,GAAKS,GAAGr4E,GAAK,IAAIsQ,MAAMlQ,GAAIkiB,EAAI,EAAQA,EAAIliB,IAAKkiB,EACnEs1D,GAAGt1D,GAAKg2D,KAAO,GAAIr3E,MAAMuR,KAAK8P,GAAIi2D,GAAIj2D,EAAG9P,OACzC8lE,IAAI9lE,KAAOA,KAAK8P,GAElBs1D,GAAGr2E,IAAMg3E,GAGX,IAAKv4E,EAAI,EAAGm4E,GAAKzqD,MAAM2qD,IAAKr4E,EAAIyB,IAAKzB,EACnCq4E,GAAGF,GAAGn4E,IAAI0J,MAAQ1J,EAIpB,OADA0oD,OAAO2vB,GAAIF,IACJE,GAmBT,OAhBAL,MAAMzqE,KAAO,SAASqa,GACpB,OAAO/a,UAAU1D,QAAUoE,KAAoB,mBAANqa,EAAmBA,EAAIq2B,sBAAS17B,yBAAMpiB,KAAKynB,IAAKowD,OAASzqE,MAGpGyqE,MAAM/2E,MAAQ,SAAS2mB,GACrB,OAAO/a,UAAU1D,QAAUlI,MAAqB,mBAAN2mB,EAAmBA,EAAIq2B,uBAAUr2B,GAAIowD,OAAS/2E,OAG1F+2E,MAAMtqD,MAAQ,SAAS9F,GACrB,OAAO/a,UAAU1D,QAAUukB,MAAa,MAAL9F,EAAYqwD,WAAyB,mBAANrwD,EAAmBA,EAAIq2B,sBAAS17B,yBAAMpiB,KAAKynB,IAAKowD,OAAStqD,OAG7HsqD,MAAMtvB,OAAS,SAAS9gC,GACtB,OAAO/a,UAAU1D,QAAUu/C,OAAc,MAAL9gC,EAAYswD,KAAatwD,EAAGowD,OAAStvB,QAGpEsvB,MkBi2CeQ,GAAUjrE,KAAK4a,OAAO5a,MAAMm7C,OAAO6uB,aAAapvD,OAAOugC,SAC9Dh7B,MAAMwpD,YAAY/uD,OAAOuF,OADlB8qD,CAC0BrwD,OAAO3V,OAenDimE,mBACF7Z,yBACA8Z,yBACAC,2BACAC,qBACAC,iCACArU,UAAWkU,UACXvV,WAAY0V,iBACZ9sC,KAAM6sC,WACNrU,WAAYoU,WACZ56B,OAAQ6gB,cAGNka,SACFC,SxDrwCG,SAASA,SAASvqC,OACvB,OAAOmpB,UAAKpsB,UAAMiD,QwDqwChBwqC,UxD9wCG,SAASA,UAAUxqC,OACxB,OAAOmpB,UAAKnsB,WAAOgD,QwD8wCjByqC,QxDnxCG,SAASA,QAAQzqC,OACtB,OAAOmpB,UAAKxvB,SAAKqG,QwDmxCf0qC,WxD5wCG,SAASA,WAAW1qC,OACzB,OAAOmpB,UAAKJ,YAAQ/oB,QwD4wClBuqB,cACAiG,cACAma,IUv7CW,WACb,IAAIl4E,MAAQs2B,sBACR8V,WAAa+rC,eACbphE,KAAO,KACPokD,WAAane,sBAAS,GACtBqe,SAAWre,sBAASob,UACpBmD,SAAWve,sBAAS,GAExB,SAASk7B,IAAI3mE,MACX,IAAIxS,EAEAsiB,EACA6rB,EAMAx2B,GAGAtG,EAXA5P,EAAI+Q,KAAKrJ,OAGTuR,IAAM,EACNhR,MAAQ,IAAI4G,MAAM7O,GAClB43E,KAAO,IAAI/oE,MAAM7O,GACjB45D,IAAMe,WAAWptD,MAAMvH,KAAMoF,WAC7B6uD,GAAKpwD,KAAK2P,IAAIo+C,SAAK/tD,KAAK6P,KAAKk+C,SAAKiD,SAASttD,MAAMvH,KAAMoF,WAAawuD,KAEpEr5D,EAAIsJ,KAAK2P,IAAI3P,KAAKsnB,IAAI8oC,IAAMj6D,EAAG+6D,SAASxtD,MAAMvH,KAAMoF,YACpDysE,GAAKt3E,GAAK05D,GAAK,GAAK,EAAI,GAG5B,IAAK17D,EAAI,EAAGA,EAAIyB,IAAKzB,GACdqR,EAAIgoE,KAAK3vE,MAAM1J,GAAKA,IAAMiB,MAAMuR,KAAKxS,GAAIA,EAAGwS,OAAS,IACxDkI,KAAOrJ,GASX,IAJkB,MAAdg8B,WAAoB3jC,MAAMsO,KAAK,SAAShY,EAAGsiB,GAAK,OAAO+qB,WAAWgsC,KAAKr5E,GAAIq5E,KAAK/2D,MACnE,MAARtK,MAActO,MAAMsO,KAAK,SAAShY,EAAGsiB,GAAK,OAAOtK,KAAKxF,KAAKxS,GAAIwS,KAAK8P,MAGxEtiB,EAAI,EAAGmuC,EAAIzzB,KAAOghD,GAAKj6D,EAAI63E,IAAM5+D,IAAM,EAAG1a,EAAIyB,IAAKzB,EAAGq7D,GAAK1jD,GAC9D2K,EAAI5Y,MAAM1J,GAAiB2X,GAAK0jD,KAAlBhqD,EAAIgoE,KAAK/2D,IAAmB,EAAIjR,EAAI88B,EAAI,GAAKmrC,GAAID,KAAK/2D,IAClE9P,KAAMA,KAAK8P,GACX5Y,MAAO1J,EACPiB,MAAOoQ,EACP+qD,WAAYf,GACZiB,SAAU3kD,GACV6kD,SAAUx6D,GAId,OAAOq3E,KA2BT,OAxBAF,IAAIl4E,MAAQ,SAAS2mB,GACnB,OAAO/a,UAAU1D,QAAUlI,MAAqB,mBAAN2mB,EAAmBA,EAAIq2B,uBAAUr2B,GAAIuxD,KAAOl4E,OAGxFk4E,IAAI9rC,WAAa,SAASzlB,GACxB,OAAO/a,UAAU1D,QAAUkkC,WAAazlB,EAAG5P,KAAO,KAAMmhE,KAAO9rC,YAGjE8rC,IAAInhE,KAAO,SAAS4P,GAClB,OAAO/a,UAAU1D,QAAU6O,KAAO4P,EAAGylB,WAAa,KAAM8rC,KAAOnhE,MAGjEmhE,IAAI/c,WAAa,SAASx0C,GACxB,OAAO/a,UAAU1D,QAAUizD,WAA0B,mBAANx0C,EAAmBA,EAAIq2B,uBAAUr2B,GAAIuxD,KAAO/c,YAG7F+c,IAAI7c,SAAW,SAAS10C,GACtB,OAAO/a,UAAU1D,QAAUmzD,SAAwB,mBAAN10C,EAAmBA,EAAIq2B,uBAAUr2B,GAAIuxD,KAAO7c,UAG3F6c,IAAI3c,SAAW,SAAS50C,GACtB,OAAO/a,UAAU1D,QAAUqzD,SAAwB,mBAAN50C,EAAmBA,EAAIq2B,uBAAUr2B,GAAIuxD,KAAO3c,UAGpF2c,KVg3CL/d,IpDj3CW,WACb,IAAIY,YAAcD,eACdG,YAAcD,eACdsd,aAAet7B,sBAAS,GACxBu7B,UAAY,KACZpd,WAAaD,cACbG,SAAWD,YACXG,SAAWD,YACXp6B,QAAU,KAEd,SAASi5B,MACP,IAAIyD,OACA/9D,EACAsuC,IAAM4sB,YAAYhtD,MAAMvH,KAAMoF,WAC9BwiC,IAAM6sB,YAAYltD,MAAMvH,KAAMoF,WAC9BwuD,GAAKe,WAAWptD,MAAMvH,KAAMoF,WAAagvD,OACzClkD,GAAK2kD,SAASttD,MAAMvH,KAAMoF,WAAagvD,OACvCH,GAAK9oC,IAAIjb,GAAK0jD,IACdI,GAAK9jD,GAAK0jD,GAQd,GANKl5B,UAASA,QAAU08B,OAAS10C,YAG7BklB,GAAKD,KAAItuC,EAAIuuC,GAAIA,GAAKD,GAAIA,GAAKtuC,GAG7BuuC,GAAKmoB,aAGN,GAAIkE,GAAKrC,SAAM7B,aAClBr1B,QAAQy3B,OAAOvqB,GAAK6M,IAAImf,IAAKhsB,GAAK8M,IAAIkf,KACtCl5B,QAAQi5B,IAAI,EAAG,EAAG/rB,GAAIgsB,GAAI1jD,IAAK8jD,IAC3BrsB,GAAKooB,eACPr1B,QAAQy3B,OAAOxqB,GAAK8M,IAAIvkC,IAAKy3B,GAAK+M,IAAIxkC,KACtCwqB,QAAQi5B,IAAI,EAAG,EAAGhsB,GAAIz3B,GAAI0jD,GAAII,SAK7B,CACH,IAWI9f,GACAC,GAZA69B,IAAMpe,GACNqe,IAAM/hE,GACNgiE,IAAMte,GACNue,IAAMjiE,GACNkiE,IAAMne,GACNoe,IAAMpe,GACNqe,GAAKvd,SAASxtD,MAAMvH,KAAMoF,WAAa,EACvCmtE,GAAMD,GAAKviB,eAAagiB,WAAaA,UAAUxqE,MAAMvH,KAAMoF,WAAa2O,UAAK4zB,GAAKA,GAAKC,GAAKA,KAC5FqtB,GAAKzhD,SAAI2X,IAAIyc,GAAKD,IAAM,GAAImqC,aAAavqE,MAAMvH,KAAMoF,YACrDotE,IAAMvd,GACNwd,IAAMxd,GAKV,GAAIsd,GAAKxiB,aAAS,CAChB,IAAI2iB,GAAKre,KAAKke,GAAK5qC,GAAK+M,IAAI49B,KACxBK,GAAKte,KAAKke,GAAK3qC,GAAK8M,IAAI49B,MACvBF,KAAY,EAALM,IAAU3iB,cAA8BmiB,KAArBQ,IAAO1e,GAAK,GAAK,EAAeme,KAAOO,KACjEN,IAAM,EAAGF,IAAMC,KAAOve,GAAK1jD,IAAM,IACjCmiE,KAAY,EAALM,IAAU5iB,cAA8BiiB,KAArBW,IAAO3e,GAAK,GAAK,EAAeie,KAAOU,KACjEN,IAAM,EAAGL,IAAMC,KAAOre,GAAK1jD,IAAM,GAGxC,IAAI6iD,IAAMnrB,GAAK6M,IAAIu9B,KACfhf,IAAMprB,GAAK8M,IAAIs9B,KACf1c,IAAM3tB,GAAK8M,IAAI09B,KACf5c,IAAM5tB,GAAK+M,IAAIy9B,KAGnB,GAAIld,GAAKlF,aAAS,CAChB,IAII6iB,GAJAxd,IAAMxtB,GAAK6M,IAAIw9B,KACf5c,IAAMztB,GAAK8M,IAAIu9B,KACfzc,IAAM7tB,GAAK8M,IAAIy9B,KACfzc,IAAM9tB,GAAK+M,IAAIw9B,KAInB,GAAIje,IAAMrC,SAAM7B,eAAY6iB,GAlIpC,SAASC,UAAUhzB,GAAI+S,GAAI9S,GAAIyS,GAAIE,GAAIC,GAAIogB,GAAIC,IAC7C,IAAIzd,IAAMxV,GAAKD,GAAI0V,IAAMhD,GAAKK,GAC1BogB,IAAMF,GAAKrgB,GAAIwgB,IAAMF,GAAKrgB,GAC1Bj5D,EAAIw5E,IAAM3d,IAAM0d,IAAMzd,IAC1B,KAAI97D,EAAIA,EAAIs2D,cAEZ,OAAQlQ,IADRpmD,GAAKu5E,KAAOpgB,GAAKF,IAAMugB,KAAOpzB,GAAK4S,KAAOh5D,GACzB67D,IAAK1C,GAAKn5D,EAAI87D,KA4HQsd,CAAU9f,IAAKC,IAAKwC,IAAKC,IAAKL,IAAKC,IAAKC,IAAKC,MAAO,CACnF,IAAIwK,GAAKhN,IAAM6f,GAAG,GACd5S,GAAKhN,IAAM4f,GAAG,GACdnR,GAAKrM,IAAMwd,GAAG,GACdlR,GAAKrM,IAAMud,GAAG,GACdM,GAAK,EAAIx+B,IDlJhB,SAAS8e,KAAKr3B,GACnB,OAAOA,EAAI,EAAI,EAAIA,GAAK,EAAIw1B,QAAK9tD,KAAK2vD,KAAKr3B,GCiJlBq3B,EAAMuM,GAAK0B,GAAKzB,GAAK0B,KAAO3tD,UAAKgsD,GAAKA,GAAKC,GAAKA,IAAMjsD,UAAK0tD,GAAKA,GAAKC,GAAKA,MAAQ,GAC/FyR,GAAKp/D,UAAK6+D,GAAG,GAAKA,GAAG,GAAKA,GAAG,GAAKA,GAAG,IACzCJ,IAAMh/D,SAAIyhD,IAAKttB,GAAKwrC,KAAOD,GAAK,IAChCT,IAAMj/D,SAAIyhD,IAAKrtB,GAAKurC,KAAOD,GAAK,KAK9Bb,IAAMtiB,aAGH0iB,IAAM1iB,cACb7b,GAAK8gB,eAAeQ,IAAKC,IAAK1C,IAAKC,IAAKprB,GAAI6qC,IAAKze,IACjD7f,GAAK6gB,eAAeI,IAAKC,IAAKC,IAAKC,IAAK3tB,GAAI6qC,IAAKze,IAEjDt5B,QAAQy3B,OAAOje,GAAGiiB,GAAKjiB,GAAG6e,IAAK7e,GAAGkiB,GAAKliB,GAAG8e,KAGtCyf,IAAMxd,GAAIv6B,QAAQi5B,IAAIzf,GAAGiiB,GAAIjiB,GAAGkiB,GAAIqc,IAAKv9B,MAAMhB,GAAG8e,IAAK9e,GAAG6e,KAAM7d,MAAMf,GAAG6e,IAAK7e,GAAG4e,MAAOiB,KAI1Ft5B,QAAQi5B,IAAIzf,GAAGiiB,GAAIjiB,GAAGkiB,GAAIqc,IAAKv9B,MAAMhB,GAAG8e,IAAK9e,GAAG6e,KAAM7d,MAAMhB,GAAGmhB,IAAKnhB,GAAGkhB,MAAOpB,IAC9Et5B,QAAQi5B,IAAI,EAAG,EAAG/rB,GAAIsN,MAAMhB,GAAGkiB,GAAKliB,GAAGmhB,IAAKnhB,GAAGiiB,GAAKjiB,GAAGkhB,KAAMlgB,MAAMf,GAAGiiB,GAAKjiB,GAAGkhB,IAAKlhB,GAAGgiB,GAAKhiB,GAAGihB,MAAOpB,IACrGt5B,QAAQi5B,IAAIxf,GAAGgiB,GAAIhiB,GAAGiiB,GAAIqc,IAAKv9B,MAAMf,GAAGkhB,IAAKlhB,GAAGihB,KAAMlgB,MAAMf,GAAG6e,IAAK7e,GAAG4e,MAAOiB,OAK7Et5B,QAAQy3B,OAAOY,IAAKC,KAAMt4B,QAAQi5B,IAAI,EAAG,EAAG/rB,GAAIoqC,IAAKC,KAAMje,KArB1Ct5B,QAAQy3B,OAAOY,IAAKC,KAyBpCrrB,GAAKooB,cAAcqiB,IAAMriB,aAGtByiB,IAAMziB,cACb7b,GAAK8gB,eAAeM,IAAKC,IAAKH,IAAKC,IAAK1tB,IAAK6qC,IAAKxe,IAClD7f,GAAK6gB,eAAejC,IAAKC,IAAKwC,IAAKC,IAAK9tB,IAAK6qC,IAAKxe,IAElDt5B,QAAQ23B,OAAOne,GAAGiiB,GAAKjiB,GAAG6e,IAAK7e,GAAGkiB,GAAKliB,GAAG8e,KAGtCwf,IAAMvd,GAAIv6B,QAAQi5B,IAAIzf,GAAGiiB,GAAIjiB,GAAGkiB,GAAIoc,IAAKt9B,MAAMhB,GAAG8e,IAAK9e,GAAG6e,KAAM7d,MAAMf,GAAG6e,IAAK7e,GAAG4e,MAAOiB,KAI1Ft5B,QAAQi5B,IAAIzf,GAAGiiB,GAAIjiB,GAAGkiB,GAAIoc,IAAKt9B,MAAMhB,GAAG8e,IAAK9e,GAAG6e,KAAM7d,MAAMhB,GAAGmhB,IAAKnhB,GAAGkhB,MAAOpB,IAC9Et5B,QAAQi5B,IAAI,EAAG,EAAGhsB,GAAIuN,MAAMhB,GAAGkiB,GAAKliB,GAAGmhB,IAAKnhB,GAAGiiB,GAAKjiB,GAAGkhB,KAAMlgB,MAAMf,GAAGiiB,GAAKjiB,GAAGkhB,IAAKlhB,GAAGgiB,GAAKhiB,GAAGihB,KAAMpB,IACpGt5B,QAAQi5B,IAAIxf,GAAGgiB,GAAIhiB,GAAGiiB,GAAIoc,IAAKt9B,MAAMf,GAAGkhB,IAAKlhB,GAAGihB,KAAMlgB,MAAMf,GAAG6e,IAAK7e,GAAG4e,MAAOiB,MAK7Et5B,QAAQi5B,IAAI,EAAG,EAAGhsB,GAAIwqC,IAAKD,IAAKle,IArBIt5B,QAAQ23B,OAAOiD,IAAKC,UA1F1C76B,QAAQy3B,OAAO,EAAG,GAoHvC,GAFAz3B,QAAQ03B,YAEJgF,OAAQ,OAAO18B,QAAU,KAAM08B,OAAS,IAAM,KAyCpD,OAtCAzD,IAAIyf,SAAW,WACb,IAAI/5E,IAAMk7D,YAAYhtD,MAAMvH,KAAMoF,aAAcqvD,YAAYltD,MAAMvH,KAAMoF,YAAc,EAClFzK,IAAMg6D,WAAWptD,MAAMvH,KAAMoF,aAAcyvD,SAASttD,MAAMvH,KAAMoF,YAAc,EAAIusD,QAAK,EAC3F,OAAQld,IAAI95C,GAAKtB,EAAGq7C,IAAI/5C,GAAKtB,IAG/Bs6D,IAAIY,YAAc,SAASp0C,GACzB,OAAO/a,UAAU1D,QAAU6yD,YAA2B,mBAANp0C,EAAmBA,EAAIq2B,uBAAUr2B,GAAIwzC,KAAOY,aAG9FZ,IAAIc,YAAc,SAASt0C,GACzB,OAAO/a,UAAU1D,QAAU+yD,YAA2B,mBAANt0C,EAAmBA,EAAIq2B,uBAAUr2B,GAAIwzC,KAAOc,aAG9Fd,IAAIme,aAAe,SAAS3xD,GAC1B,OAAO/a,UAAU1D,QAAUowE,aAA4B,mBAAN3xD,EAAmBA,EAAIq2B,uBAAUr2B,GAAIwzC,KAAOme,cAG/Fne,IAAIoe,UAAY,SAAS5xD,GACvB,OAAO/a,UAAU1D,QAAUqwE,UAAiB,MAAL5xD,EAAY,KAAoB,mBAANA,EAAmBA,EAAIq2B,uBAAUr2B,GAAIwzC,KAAOoe,WAG/Gpe,IAAIgB,WAAa,SAASx0C,GACxB,OAAO/a,UAAU1D,QAAUizD,WAA0B,mBAANx0C,EAAmBA,EAAIq2B,uBAAUr2B,GAAIwzC,KAAOgB,YAG7FhB,IAAIkB,SAAW,SAAS10C,GACtB,OAAO/a,UAAU1D,QAAUmzD,SAAwB,mBAAN10C,EAAmBA,EAAIq2B,uBAAUr2B,GAAIwzC,KAAOkB,UAG3FlB,IAAIoB,SAAW,SAAS50C,GACtB,OAAO/a,UAAU1D,QAAUqzD,SAAwB,mBAAN50C,EAAmBA,EAAIq2B,uBAAUr2B,GAAIwzC,KAAOoB,UAG3FpB,IAAIj5B,QAAU,SAASva,GACrB,OAAO/a,UAAU1D,QAAWg5B,QAAe,MAALva,EAAY,KAAOA,EAAIwzC,KAAOj5B,SAG/Di5B,KoD2rCL7tB,eAGEutC,QACFpsC,KAAMqsC,MAGJC,gBAAkB,SAAlBA,gBAAmBC,QAGrB,IADA,IAAIz8D,SADJy8D,OAASA,OAAOjjE,KAAK,SAAC5V,EAAGyI,GAAJ,OAAUzI,EAAIyI,KACd,GAAKowE,OAAO,GACxBj7E,EAAI,EAAGA,EAAIi7E,OAAO9xE,OAAQnJ,IAC/Bwe,QAAUlT,KAAK2P,IAAIuD,QAASy8D,OAAOj7E,GAAKi7E,OAAOj7E,EAAI,IAGvD,OAAOwe,SAGL08D,aACFtyB,YAAa,yBACbG,OAAQ,sBACRE,OAAQ,mBACRC,KAAM,mBACNz+C,IAAK,gBACLK,MAAO,QACPW,KAAM,MAGJ0vE,gBACD,cAAe,SAAU,SAAU,OAAQ,MAAO,QAAS,SAC3D,EAAG,IAAM,IAAO,KAAS,MAAU,OAAY,UAQ9CC,4BAAiB,SAAjBA,eAAkBn6E,MAAOomD,UAC3B,IAAMg0B,gBANiB,SAArBC,mBAAsBj0B,UACxB,IAAM39C,MAAQ6lC,+BAAkB4rC,cAAc,GAAI9zB,UAClD,OAAO8zB,cAAc,GAAGzxE,OAIA4xE,CAAmBj0B,UAC3C,OAAO9/C,iCAAkBsG,SAAS5M,MAAOi6E,YAAYG,mBAiCnDE,gBANgB37E,OAAOw1B,uBAAyBx1B,OAAOy1B,6BACzDz1B,OAAO01B,0BAA4B11B,OAAO21B,wBAA0B31B,OAAO41B,wBAKxD,SAAjB+lD,eAAiBlnE,QAAM,OAAI,SAAC1L,KAC9B,OAAIA,eAAewL,kBACRxL,OAAO0L,OAASA,OAAO1L,KAAvB,GAAAma,OAAiCna,KAErCA,OAGL6yE,4CAAiC,SAAjCA,+BAAkC92D,WACpC,IAAI+2D,mBACA/hE,KAAOgL,UACX,EAAG,CACC,IAAMmP,YAAcna,KAAKgiE,iBACzB,GAAI7nD,YAAa,CACb,IAAM8nD,gBAAkB9nD,YAAY9I,UAAU8G,KAAK,SAAA3J,YAAU,MWnhDvC,UXmhD2CA,WAAWjE,KAC5E,GAAI03D,gBAAiB,CACjBF,gBAAkBE,gBAAgBx3D,aAClC,cAGHzK,KAAOA,KAAKkiE,aAZmD,IAcxE,IAAMC,oBACAnsD,SAAWhL,UAAUrO,gBAAgBrD,aAf6B8oE,MAAAjvE,UAAA1D,OAAtB4yE,kBAAsB,IAAAzrE,MAAAwrE,MAAA,EAAAA,MAAA,KAAAE,MAAA,EAAAA,MAAAF,MAAAE,QAAtBD,kBAAsBC,MAAA,GAAAnvE,UAAAmvE,OA2BxE,OAXAD,kBAAkBxrE,QAAQ,SAACqf,aACvB,GAAI6rD,gBAAgB7rD,aAChBisD,iBAAiBjsD,aAAe6rD,gBAAgB7rD,iBAC7C,CACH,IAAMyC,aAAe3C,SAASE,aAC1ByC,eACAwpD,iBAAiBjsD,aAAeyC,aAAalT,eAKlD08D,kBYxiDAI,MAAQ,+BAEJC,gBACb/xC,IAAK,6BACL8xC,MAAOA,MACPE,MAAO,+BACPC,IAAK,uCACLC,MAAO,iCCLMC,cAAA,SAAS/7E,MACtB,IAAI6lD,OAAS7lD,MAAQ,GAAIP,EAAIomD,OAAO14C,QAAQ,KAE5C,OADI1N,GAAK,GAAqC,WAA/BomD,OAAS7lD,KAAKgiB,MAAM,EAAGviB,MAAiBO,KAAOA,KAAKgiB,MAAMviB,EAAI,IACtEu8E,eAAWx6E,eAAeqkD,SAAWo2B,MAAOD,eAAWn2B,QAASuwB,MAAOp2E,MAAQA,MCczE,IAAAk8E,QAAA,SAASl8E,MACtB,IAAIm8E,SAAW9J,cAAUryE,MACzB,OAAQm8E,SAAS/F,MARnB,SAASgG,aAAaD,UACpB,OAAO,WACL,OAAOj1E,KAAKm1E,cAActyC,gBAAgBoyC,SAASF,MAAOE,SAAS/F,SAZvE,SAASkG,eAAet8E,MACtB,OAAO,WACL,IAAIw9B,SAAWt2B,KAAKm1E,cAChBE,IAAMr1E,KAAKs1E,aACf,OAAOD,MAAQb,OAASl+C,SAASwjB,gBAAgBw7B,eAAiBd,MAC5Dl+C,SAASmJ,cAAc3mC,MACvBw9B,SAASuM,gBAAgBwyC,IAAKv8E,SAchBm8E,WCvBxB,SAASjY,iBAEM,IAAAuY,aAAA,SAASC,UACtB,OAAmB,MAAZA,SAAmBxY,cAAO,WAC/B,OAAOh9D,KAAKy1E,cAAcD,YCJ9B,SAAS9vC,oBACP,SAGa,IAAAgwC,YAAA,SAASF,UACtB,OAAmB,MAAZA,SAAmB9vC,kBAAQ,WAChC,OAAO1lC,KAAK21E,iBAAiBH,YCNlBI,QAAA,SAASJ,UACtB,OAAO,WACL,OAAOx1E,KAAK61E,QAAQL,YCFTM,OAAA,SAASniD,QACtB,OAAO,IAAI9qB,MAAM8qB,OAAOjyB,SCMnB,SAASq0E,UAAUtwD,OAAQnU,OAChCtR,KAAKm1E,cAAgB1vD,OAAO0vD,cAC5Bn1E,KAAKs1E,aAAe7vD,OAAO6vD,aAC3Bt1E,KAAKg2E,MAAQ,KACbh2E,KAAK4iB,QAAU6C,OACfzlB,KAAKi2E,SAAW3kE,MAGlBykE,UAAU17E,WACR2qB,YAAa+wD,UACbj0C,YAAa,SAAAA,YAASthB,OAAS,OAAOxgB,KAAK4iB,QAAQ4c,aAAahf,MAAOxgB,KAAKg2E,QAC5Ex2C,aAAc,SAAAA,aAAShf,MAAOvO,MAAQ,OAAOjS,KAAK4iB,QAAQ4c,aAAahf,MAAOvO,OAC9EwjE,cAAe,SAAAA,cAASD,UAAY,OAAOx1E,KAAK4iB,QAAQ6yD,cAAcD,WACtEG,iBAAkB,SAAAA,iBAASH,UAAY,OAAOx1E,KAAK4iB,QAAQ+yD,iBAAiBH,YCpB/D,ICIXU,UAAY,IAEhB,SAASC,UAAU1wD,OAAQw4B,MAAOmT,MAAOz9B,OAAQu9B,KAAMnmD,MASrD,IARA,IACI+jB,KADAv2B,EAAI,EAEJ69E,YAAcn4B,MAAMv8C,OACpB20E,WAAatrE,KAAKrJ,OAKfnJ,EAAI89E,aAAc99E,GACnBu2B,KAAOmvB,MAAM1lD,KACfu2B,KAAKmnD,SAAWlrE,KAAKxS,GACrBo7B,OAAOp7B,GAAKu2B,MAEZsiC,MAAM74D,GAAK,IAAIw9E,UAAUtwD,OAAQ1a,KAAKxS,IAK1C,KAAOA,EAAI69E,cAAe79E,GACpBu2B,KAAOmvB,MAAM1lD,MACf24D,KAAK34D,GAAKu2B,MAKhB,SAASwnD,QAAQ7wD,OAAQw4B,MAAOmT,MAAOz9B,OAAQu9B,KAAMnmD,KAAMjR,KACzD,IAAIvB,EACAu2B,KAKAqX,SAJAowC,kBACAH,YAAcn4B,MAAMv8C,OACpB20E,WAAatrE,KAAKrJ,OAClB80E,UAAY,IAAI3tE,MAAMutE,aAK1B,IAAK79E,EAAI,EAAGA,EAAI69E,cAAe79E,GACzBu2B,KAAOmvB,MAAM1lD,MACfi+E,UAAUj+E,GAAK4tC,SAAW+vC,UAAYp8E,IAAIpB,KAAKo2B,KAAMA,KAAKmnD,SAAU19E,EAAG0lD,OACnE9X,YAAYowC,eACdrlB,KAAK34D,GAAKu2B,KAEVynD,eAAepwC,UAAYrX,MAQjC,IAAKv2B,EAAI,EAAGA,EAAI89E,aAAc99E,GAExBu2B,KAAOynD,eADXpwC,SAAW+vC,UAAYp8E,IAAIpB,KAAK+sB,OAAQ1a,KAAKxS,GAAIA,EAAGwS,SAElD4oB,OAAOp7B,GAAKu2B,KACZA,KAAKmnD,SAAWlrE,KAAKxS,GACrBg+E,eAAepwC,UAAY,MAE3BirB,MAAM74D,GAAK,IAAIw9E,UAAUtwD,OAAQ1a,KAAKxS,IAK1C,IAAKA,EAAI,EAAGA,EAAI69E,cAAe79E,GACxBu2B,KAAOmvB,MAAM1lD,KAAQg+E,eAAeC,UAAUj+E,MAAQu2B,OACzDoiC,KAAK34D,GAAKu2B,MClDhB,SAAS2U,eAAU9oC,EAAGyI,GACpB,OAAOzI,EAAIyI,GAAK,EAAIzI,EAAIyI,EAAI,EAAIzI,GAAKyI,EAAI,EAAIsgC,ICoBhC,IC1CA+yC,WAAA,SAAS3nD,MACtB,OAAQA,KAAKqmD,eAAiBrmD,KAAKqmD,cAAcp7B,aACzCjrB,KAAKwH,UAAYxH,MAClBA,KAAKirB,aC4BP,SAAS28B,WAAW5nD,KAAMh2B,MAC/B,OAAOg2B,KAAKiJ,MAAMmiB,iBAAiBphD,OAC5BihD,WAAYjrB,MAAMmrB,iBAAiBnrB,KAAM,MAAMorB,iBAAiBphD,MCjCzE,SAAS69E,WAAWt+B,QAClB,OAAOA,OAAOlgC,OAAO7L,MAAM,SAG7B,SAASsqE,UAAU9nD,MACjB,OAAOA,KAAK8nD,WAAa,IAAIC,UAAU/nD,MAGzC,SAAS+nD,UAAU/nD,MACjB9uB,KAAKoyB,MAAQtD,KACb9uB,KAAK82E,OAASH,WAAW7nD,KAAK2iC,aAAa,UAAY,IAuBzD,SAASslB,WAAWjoD,KAAMk2B,OAExB,IADA,IAAI51B,KAAOwnD,UAAU9nD,MAAOv2B,GAAK,EAAGyB,EAAIgrD,MAAMtjD,SACrCnJ,EAAIyB,GAAGo1B,KAAK3Y,IAAIuuC,MAAMzsD,IAGjC,SAASy+E,cAAcloD,KAAMk2B,OAE3B,IADA,IAAI51B,KAAOwnD,UAAU9nD,MAAOv2B,GAAK,EAAGyB,EAAIgrD,MAAMtjD,SACrCnJ,EAAIyB,GAAGo1B,KAAKoW,OAAOwf,MAAMzsD,IA3BpCs+E,UAAUx8E,WACRoc,IAAK,SAAAA,IAAS3d,MACJkH,KAAK82E,OAAO7wE,QAAQnN,MACpB,IACNkH,KAAK82E,OAAO5wE,KAAKpN,MACjBkH,KAAKoyB,MAAM2P,aAAa,QAAS/hC,KAAK82E,OAAO/zE,KAAK,QAGtDyiC,OAAQ,SAAAA,OAAS1sC,MACf,IAAIP,EAAIyH,KAAK82E,OAAO7wE,QAAQnN,MACxBP,GAAK,IACPyH,KAAK82E,OAAOxvE,OAAO/O,EAAG,GACtByH,KAAKoyB,MAAM2P,aAAa,QAAS/hC,KAAK82E,OAAO/zE,KAAK,QAGtDk0E,SAAU,SAAAA,SAASn+E,MACjB,OAAOkH,KAAK82E,OAAO7wE,QAAQnN,OAAS,IC7BxC,SAASo+E,aACPl3E,KAAKo6B,YAAc,GCDrB,SAAS+8C,aACPn3E,KAAKw3B,UAAY,GCDnB,SAASipB,cACHzgD,KAAKo3E,aAAap3E,KAAKu/B,WAAWuC,YAAY9hC,MCDpD,SAASq3E,QACHr3E,KAAKs3E,iBAAiBt3E,KAAKu/B,WAAWC,aAAax/B,KAAMA,KAAKu/B,WAAWg4C,YCE/E,SAASC,eACP,OAAO,KCJT,SAAShyC,gBACP,IAAI/f,OAASzlB,KAAKu/B,WACd9Z,QAAQA,OAAOH,YAAYtlB,MCFjC,SAASy3E,yBACP,OAAOz3E,KAAKu/B,WAAWC,aAAax/B,KAAK03E,WAAU,GAAQ13E,KAAKo3E,aAGlE,SAASO,sBACP,OAAO33E,KAAKu/B,WAAWC,aAAax/B,KAAK03E,WAAU,GAAO13E,KAAKo3E,aAGlD,ICRXQ,gBAEOC,SAAQ,KAEK,oBAAbvhD,WAEH,iBADQA,SAASwjB,kBAErB89B,cAAgBE,WAAY,YAAaC,WAAY,cAIzD,SAASC,sBAAsB1I,SAAUrtE,MAAOg8C,OAE9C,OADAqxB,SAAW2I,gBAAgB3I,SAAUrtE,MAAOg8C,OACrC,SAAS45B,OACd,IAAIK,QAAUL,MAAMM,cACfD,UAAYA,UAAYl4E,MAAkD,EAAxCk4E,QAAQE,wBAAwBp4E,QACrEsvE,SAAS52E,KAAKsH,KAAM63E,QAK1B,SAASI,gBAAgB3I,SAAUrtE,MAAOg8C,OACxC,OAAO,SAASo6B,QACd,IAAIC,OAAST,SACbA,SAAQQ,OACR,IACE/I,SAAS52E,KAAKsH,KAAMA,KAAKi2E,SAAUh0E,MAAOg8C,OAD5C,QAGE45B,SAAQS,SAad,SAASC,SAASC,UAChB,OAAO,WACL,IAAI9M,GAAK1rE,KAAKy4E,KACd,GAAK/M,GAAL,CACA,IAAK,IAAkC1yE,EAA9B6hB,EAAI,EAAGtiB,GAAK,EAAGI,EAAI+yE,GAAGhqE,OAAWmZ,EAAIliB,IAAKkiB,EAC7C7hB,EAAI0yE,GAAG7wD,GAAM29D,SAASn9E,MAAQrC,EAAEqC,OAASm9E,SAASn9E,MAASrC,EAAEF,OAAS0/E,SAAS1/E,KAGjF4yE,KAAKnzE,GAAKS,EAFVgH,KAAK04E,oBAAoB1/E,EAAEqC,KAAMrC,EAAEs2E,SAAUt2E,EAAE2/E,WAK7CpgF,EAAGmzE,GAAGhqE,OAASnJ,SACTyH,KAAKy4E,OAIrB,SAASG,MAAMJ,SAAUh/E,MAAOm/E,SAC9B,IAAIE,KAAOjB,aAAat9E,eAAek+E,SAASn9E,MAAQ28E,sBAAwBC,gBAChF,OAAO,SAASp/E,EAAGN,EAAG0lD,OACpB,IAAoBjlD,EAAhB0yE,GAAK1rE,KAAKy4E,KAASnJ,SAAWuJ,KAAKr/E,MAAOjB,EAAG0lD,OACjD,GAAIytB,GAAI,IAAK,IAAI7wD,EAAI,EAAGliB,EAAI+yE,GAAGhqE,OAAQmZ,EAAIliB,IAAKkiB,EAC9C,IAAK7hB,EAAI0yE,GAAG7wD,IAAIxf,OAASm9E,SAASn9E,MAAQrC,EAAEF,OAAS0/E,SAAS1/E,KAI5D,OAHAkH,KAAK04E,oBAAoB1/E,EAAEqC,KAAMrC,EAAEs2E,SAAUt2E,EAAE2/E,SAC/C34E,KAAK84E,iBAAiB9/E,EAAEqC,KAAMrC,EAAEs2E,SAAWA,SAAUt2E,EAAE2/E,QAAUA,cACjE3/E,EAAEQ,MAAQA,OAIdwG,KAAK84E,iBAAiBN,SAASn9E,KAAMi0E,SAAUqJ,SAC/C3/E,GAAKqC,KAAMm9E,SAASn9E,KAAMvC,KAAM0/E,SAAS1/E,KAAMU,MAAOA,MAAO81E,SAAUA,SAAUqJ,QAASA,SACrFjN,GACAA,GAAGxlE,KAAKlN,GADJgH,KAAKy4E,MAAQz/E,IA0BnB,SAAS+/E,YAAYV,OAAQ/I,SAAUlW,KAAMpyD,MAClD,IAAIsxE,OAAST,SACbQ,OAAOW,YAAcnB,SACrBA,SAAQQ,OACR,IACE,OAAO/I,SAAS/nE,MAAM6xD,KAAMpyD,MAD9B,QAGE6wE,SAAQS,QCtGZ,SAASW,cAAcnqD,KAAMzzB,KAAMqlB,QACjC,IAAIvoB,OAAS4hD,WAAYjrB,MACrB+oD,MAAQ1/E,OAAO+gF,YAEE,mBAAVrB,MACTA,MAAQ,IAAIA,MAAMx8E,KAAMqlB,SAExBm3D,MAAQ1/E,OAAOm+B,SAAS6iD,YAAY,SAChCz4D,QAAQm3D,MAAMuB,UAAU/9E,KAAMqlB,OAAO24D,QAAS34D,OAAO44D,YAAazB,MAAM0B,OAAS74D,OAAO64D,QACvF1B,MAAMuB,UAAU/9E,MAAM,GAAO,IAGpCyzB,KAAKmqD,cAAcpB,OAeN,ICGJhgF,gBAAQ,MAEZ,SAASkuE,oBAAUyT,OAAQC,SAChCz5E,KAAK05E,QAAUF,OACfx5E,KAAK25E,SAAWF,QAGlB,SAAS3oB,sBACP,OAAO,IAAIiV,sBAAYzvC,SAASwjB,kBAAmBjiD,gBAGrDkuE,oBAAU1rE,UAAYy2D,oBAAUz2D,WAC9B2qB,YAAa+gD,oBACbjoD,OC1Ca,SAASA,QACA,mBAAXA,SAAuBA,OAAS03D,aAAS13D,SAEpD,IAAK,IAAI07D,OAASx5E,KAAK05E,QAAS/gF,EAAI6gF,OAAO93E,OAAQk4E,UAAY,IAAI/wE,MAAMlQ,GAAIkiB,EAAI,EAAGA,EAAIliB,IAAKkiB,EAC3F,IAAK,IAAiFiU,KAAM+qD,QAAnF57B,MAAQu7B,OAAO3+D,GAAI7gB,EAAIikD,MAAMv8C,OAAQo4E,SAAWF,UAAU/+D,GAAK,IAAIhS,MAAM7O,GAAmBzB,EAAI,EAAGA,EAAIyB,IAAKzB,GAC9Gu2B,KAAOmvB,MAAM1lD,MAAQshF,QAAU/7D,OAAOplB,KAAKo2B,KAAMA,KAAKmnD,SAAU19E,EAAG0lD,UAClE,aAAcnvB,OAAM+qD,QAAQ5D,SAAWnnD,KAAKmnD,UAChD6D,SAASvhF,GAAKshF,SAKpB,OAAO,IAAI9T,oBAAU6T,UAAW55E,KAAK25E,WD+BrC5oB,UE3Ca,SAASjzC,QACA,mBAAXA,SAAuBA,OAAS43D,YAAY53D,SAEvD,IAAK,IAAI07D,OAASx5E,KAAK05E,QAAS/gF,EAAI6gF,OAAO93E,OAAQk4E,aAAgBH,WAAc5+D,EAAI,EAAGA,EAAIliB,IAAKkiB,EAC/F,IAAK,IAAyCiU,KAArCmvB,MAAQu7B,OAAO3+D,GAAI7gB,EAAIikD,MAAMv8C,OAAcnJ,EAAI,EAAGA,EAAIyB,IAAKzB,GAC9Du2B,KAAOmvB,MAAM1lD,MACfqhF,UAAU1zE,KAAK4X,OAAOplB,KAAKo2B,KAAMA,KAAKmnD,SAAU19E,EAAG0lD,QACnDw7B,QAAQvzE,KAAK4oB,OAKnB,OAAO,IAAIi3C,oBAAU6T,UAAWH,UFgChCzmE,OG5Ca,SAAS3K,OACD,mBAAVA,QAAsBA,MAAQutE,QAAQvtE,QAEjD,IAAK,IAAImxE,OAASx5E,KAAK05E,QAAS/gF,EAAI6gF,OAAO93E,OAAQk4E,UAAY,IAAI/wE,MAAMlQ,GAAIkiB,EAAI,EAAGA,EAAIliB,IAAKkiB,EAC3F,IAAK,IAAuEiU,KAAnEmvB,MAAQu7B,OAAO3+D,GAAI7gB,EAAIikD,MAAMv8C,OAAQo4E,SAAWF,UAAU/+D,MAAetiB,EAAI,EAAGA,EAAIyB,IAAKzB,GAC3Fu2B,KAAOmvB,MAAM1lD,KAAO8P,MAAM3P,KAAKo2B,KAAMA,KAAKmnD,SAAU19E,EAAG0lD,QAC1D67B,SAAS5zE,KAAK4oB,MAKpB,OAAO,IAAIi3C,oBAAU6T,UAAW55E,KAAK25E,WHkCrC5uE,Kf4Ba,SAASvR,MAAOM,KAC7B,IAAKN,MAGH,OAFAuR,KAAO,IAAIlC,MAAM7I,KAAK04B,QAAS7d,GAAK,EACpC7a,KAAKulC,KAAK,SAAS1sC,GAAKkS,OAAO8P,GAAKhiB,IAC7BkS,KAGT,IAAIhR,KAAOD,IAAMw8E,QAAUH,UACvBsD,QAAUz5E,KAAK25E,SACfH,OAASx5E,KAAK05E,QAEG,mBAAVlgF,QAAsBA,MDvFpB,SAAS2iC,GACtB,OAAO,WACL,OAAOA,GCqFgCqa,CAASh9C,QAElD,IAAK,IAAIb,EAAI6gF,OAAO93E,OAAQiyB,OAAS,IAAI9qB,MAAMlQ,GAAIy4D,MAAQ,IAAIvoD,MAAMlQ,GAAIu4D,KAAO,IAAIroD,MAAMlQ,GAAIkiB,EAAI,EAAGA,EAAIliB,IAAKkiB,EAAG,CAC/G,IAAI4K,OAASg0D,QAAQ5+D,GACjBojC,MAAQu7B,OAAO3+D,GACfu7D,YAAcn4B,MAAMv8C,OACpBqJ,KAAOvR,MAAMd,KAAK+sB,OAAQA,QAAUA,OAAOwwD,SAAUp7D,EAAG4+D,SACxDpD,WAAatrE,KAAKrJ,OAClBq4E,WAAa3oB,MAAMv2C,GAAK,IAAIhS,MAAMwtE,YAClC2D,YAAcrmD,OAAO9Y,GAAK,IAAIhS,MAAMwtE,YAGxCt8E,KAAK0rB,OAAQw4B,MAAO87B,WAAYC,YAFhB9oB,KAAKr2C,GAAK,IAAIhS,MAAMutE,aAEoBrrE,KAAMjR,KAK9D,IAAK,IAAoBonD,SAAUjvC,KAA1BozB,GAAK,EAAGgY,GAAK,EAAmBhY,GAAKgxC,aAAchxC,GAC1D,GAAI6b,SAAW64B,WAAW10C,IAAK,CAE7B,IADIA,IAAMgY,KAAIA,GAAKhY,GAAK,KACfpzB,KAAO+nE,YAAY38B,QAAUA,GAAKg5B,aAC3Cn1B,SAAS80B,MAAQ/jE,MAAQ,MAQ/B,OAHA0hB,OAAS,IAAIoyC,oBAAUpyC,OAAQ8lD,UACxBQ,OAAS7oB,MAChBz9B,OAAOumD,MAAQhpB,KACRv9B,QenEPy9B,MjB9Ca,WACb,OAAO,IAAI2U,oBAAU/lE,KAAKi6E,QAAUj6E,KAAK05E,QAAQzxE,IAAI6tE,QAAS91E,KAAK25E,WiB8CnEzoB,KI/Ca,WACb,OAAO,IAAI6U,oBAAU/lE,KAAKk6E,OAASl6E,KAAK05E,QAAQzxE,IAAI6tE,QAAS91E,KAAK25E,WJ+ClE52E,KKnDa,SAASo3E,QAASC,SAAUC,QACzC,IAAIjpB,MAAQpxD,KAAKoxD,QAASz9B,OAAS3zB,KAAMkxD,KAAOlxD,KAAKkxD,OAIrD,OAHAE,MAA2B,mBAAZ+oB,QAAyBA,QAAQ/oB,OAASA,MAAMl+B,OAAOinD,QAAU,IAChE,MAAZC,WAAkBzmD,OAASymD,SAASzmD,SAC1B,MAAV0mD,OAAgBnpB,KAAK1rB,SAAe60C,OAAOnpB,MACxCE,OAASz9B,OAASy9B,MAAMvnD,MAAM8pB,QAAQ1N,QAAU0N,QL+CvD9pB,MMlDa,SAASinD,WAEtB,IAAK,IAAIwpB,QAAUt6E,KAAK05E,QAASa,QAAUzpB,UAAU4oB,QAASc,GAAKF,QAAQ54E,OAAQ6xC,GAAKgnC,QAAQ74E,OAAQ/I,EAAIkL,KAAK2P,IAAIgnE,GAAIjnC,IAAKknC,OAAS,IAAI5xE,MAAM2xE,IAAK3/D,EAAI,EAAGA,EAAIliB,IAAKkiB,EACpK,IAAK,IAAmGiU,KAA/F4rD,OAASJ,QAAQz/D,GAAI8/D,OAASJ,QAAQ1/D,GAAI7gB,EAAI0gF,OAAOh5E,OAAQmI,MAAQ4wE,OAAO5/D,GAAK,IAAIhS,MAAM7O,GAAUzB,EAAI,EAAGA,EAAIyB,IAAKzB,GACxHu2B,KAAO4rD,OAAOniF,IAAMoiF,OAAOpiF,MAC7BsR,MAAMtR,GAAKu2B,MAKjB,KAAOjU,EAAI2/D,KAAM3/D,EACf4/D,OAAO5/D,GAAKy/D,QAAQz/D,GAGtB,OAAO,IAAIkrD,oBAAU0U,OAAQz6E,KAAK25E,WNqClC1zD,MOrDa,WAEb,IAAK,IAAIuzD,OAASx5E,KAAK05E,QAAS7+D,GAAK,EAAGliB,EAAI6gF,OAAO93E,SAAUmZ,EAAIliB,GAC/D,IAAK,IAA8Dm2B,KAA1DmvB,MAAQu7B,OAAO3+D,GAAItiB,EAAI0lD,MAAMv8C,OAAS,EAAGuQ,KAAOgsC,MAAM1lD,KAAYA,GAAK,IAC1Eu2B,KAAOmvB,MAAM1lD,MACX0Z,MAA6C,EAArC6c,KAAKspD,wBAAwBnmE,OAAWA,KAAKstB,WAAWC,aAAa1Q,KAAM7c,MACvFA,KAAO6c,MAKb,OAAO9uB,MP2CPuQ,KdpDa,SAASqzB,SAGtB,SAASg3C,YAAYjgF,EAAGyI,GACtB,OAAOzI,GAAKyI,EAAIwgC,QAAQjpC,EAAEs7E,SAAU7yE,EAAE6yE,WAAat7E,GAAKyI,EAHrDwgC,UAASA,QAAUH,gBAMxB,IAAK,IAAI+1C,OAASx5E,KAAK05E,QAAS/gF,EAAI6gF,OAAO93E,OAAQm5E,WAAa,IAAIhyE,MAAMlQ,GAAIkiB,EAAI,EAAGA,EAAIliB,IAAKkiB,EAAG,CAC/F,IAAK,IAAmFiU,KAA/EmvB,MAAQu7B,OAAO3+D,GAAI7gB,EAAIikD,MAAMv8C,OAAQo5E,UAAYD,WAAWhgE,GAAK,IAAIhS,MAAM7O,GAAUzB,EAAI,EAAGA,EAAIyB,IAAKzB,GACxGu2B,KAAOmvB,MAAM1lD,MACfuiF,UAAUviF,GAAKu2B,MAGnBgsD,UAAUvqE,KAAKqqE,aAGjB,OAAO,IAAI7U,oBAAU8U,WAAY76E,KAAK25E,UAAU1zD,ScqChDvtB,KQvDa,WACb,IAAI2T,SAAWjH,UAAU,GAGzB,OAFAA,UAAU,GAAKpF,KACfqM,SAAS9E,MAAM,KAAMnC,WACdpF,MRoDPmxB,MSxDa,WACb,IAAIA,MAAQ,IAAItoB,MAAM7I,KAAK04B,QAASngC,GAAK,EAEzC,OADAyH,KAAKulC,KAAK,WAAapU,QAAQ54B,GAAKyH,OAC7BmxB,OTsDPrC,KUzDa,WAEb,IAAK,IAAI0qD,OAASx5E,KAAK05E,QAAS7+D,EAAI,EAAGliB,EAAI6gF,OAAO93E,OAAQmZ,EAAIliB,IAAKkiB,EACjE,IAAK,IAAIojC,MAAQu7B,OAAO3+D,GAAItiB,EAAI,EAAGyB,EAAIikD,MAAMv8C,OAAQnJ,EAAIyB,IAAKzB,EAAG,CAC/D,IAAIu2B,KAAOmvB,MAAM1lD,GACjB,GAAIu2B,KAAM,OAAOA,KAIrB,OAAO,MViDP4J,KW1Da,WACb,IAAIA,KAAO,EAEX,OADA14B,KAAKulC,KAAK,aAAe7M,OAClBA,MXwDPgN,MY3Da,WACb,OAAQ1lC,KAAK8uB,QZ2DbyW,Ka5Da,SAASl5B,UAEtB,IAAK,IAAImtE,OAASx5E,KAAK05E,QAAS7+D,EAAI,EAAGliB,EAAI6gF,OAAO93E,OAAQmZ,EAAIliB,IAAKkiB,EACjE,IAAK,IAAgDiU,KAA5CmvB,MAAQu7B,OAAO3+D,GAAItiB,EAAI,EAAGyB,EAAIikD,MAAMv8C,OAAcnJ,EAAIyB,IAAKzB,GAC9Du2B,KAAOmvB,MAAM1lD,KAAI8T,SAAS3T,KAAKo2B,KAAMA,KAAKmnD,SAAU19E,EAAG0lD,OAI/D,OAAOj+C,MbqDPqxD,KbnBa,SAASv4D,KAAMU,OAC5B,IAAIy7E,SAAW9J,cAAUryE,MAEzB,GAAIsM,UAAU1D,OAAS,EAAG,CACxB,IAAIotB,KAAO9uB,KAAK8uB,OAChB,OAAOmmD,SAAS/F,MACVpgD,KAAKisD,eAAe9F,SAASF,MAAOE,SAAS/F,OAC7CpgD,KAAK2iC,aAAawjB,UAG1B,OAAOj1E,KAAKulC,MAAe,MAAT/rC,MACXy7E,SAAS/F,MA7ClB,SAAS8L,aAAa/F,UACpB,OAAO,WACLj1E,KAAKi7E,kBAAkBhG,SAASF,MAAOE,SAAS/F,SARpD,SAASgM,WAAWpiF,MAClB,OAAO,WACLkH,KAAKm7E,gBAAgBriF,QAiDgD,mBAAVU,MACtDy7E,SAAS/F,MApBlB,SAASkM,eAAenG,SAAUz7E,OAChC,OAAO,WACL,IAAIoQ,EAAIpQ,MAAM+N,MAAMvH,KAAMoF,WACjB,MAALwE,EAAW5J,KAAKi7E,kBAAkBhG,SAASF,MAAOE,SAAS/F,OAC1DlvE,KAAK8iC,eAAemyC,SAASF,MAAOE,SAAS/F,MAAOtlE,KAZ7D,SAASyxE,aAAaviF,KAAMU,OAC1B,OAAO,WACL,IAAIoQ,EAAIpQ,MAAM+N,MAAMvH,KAAMoF,WACjB,MAALwE,EAAW5J,KAAKm7E,gBAAgBriF,MAC/BkH,KAAK+hC,aAAajpC,KAAM8Q,KAyBxBqrE,SAAS/F,MAnClB,SAASoM,eAAerG,SAAUz7E,OAChC,OAAO,WACLwG,KAAK8iC,eAAemyC,SAASF,MAAOE,SAAS/F,MAAO11E,SARxD,SAAS+hF,aAAaziF,KAAMU,OAC1B,OAAO,WACLwG,KAAK+hC,aAAajpC,KAAMU,UAuC+By7E,SAAUz7E,SaOnEu+B,MXxCa,SAASj/B,KAAMU,MAAOgiF,UACnC,OAAOp2E,UAAU1D,OAAS,EACpB1B,KAAKulC,MAAe,MAAT/rC,MAtBnB,SAASiiF,YAAY3iF,MACnB,OAAO,WACLkH,KAAK+3B,MAAM2jD,eAAe5iF,QAqBe,mBAAVU,MAXnC,SAASmiF,cAAc7iF,KAAMU,MAAOgiF,UAClC,OAAO,WACL,IAAI5xE,EAAIpQ,MAAM+N,MAAMvH,KAAMoF,WACjB,MAALwE,EAAW5J,KAAK+3B,MAAM2jD,eAAe5iF,MACpCkH,KAAK+3B,MAAM6jD,YAAY9iF,KAAM8Q,EAAG4xE,YAVzC,SAASK,cAAc/iF,KAAMU,MAAOgiF,UAClC,OAAO,WACLx7E,KAAK+3B,MAAM6jD,YAAY9iF,KAAMU,MAAOgiF,aAiBX1iF,KAAMU,MAAmB,MAAZgiF,SAAmB,GAAKA,WAC1D9E,WAAW12E,KAAK8uB,OAAQh2B,OWmC9BsB,Sc3Ca,SAAStB,KAAMU,OAC5B,OAAO4L,UAAU1D,OAAS,EACpB1B,KAAKulC,MAAe,MAAT/rC,MAtBnB,SAASsiF,eAAehjF,MACtB,OAAO,kBACEkH,KAAKlH,QAqB8B,mBAAVU,MAXpC,SAASuiF,iBAAiBjjF,KAAMU,OAC9B,OAAO,WACL,IAAIoQ,EAAIpQ,MAAM+N,MAAMvH,KAAMoF,WACjB,MAALwE,SAAkB5J,KAAKlH,MACtBkH,KAAKlH,MAAQ8Q,IAVtB,SAASoyE,iBAAiBljF,KAAMU,OAC9B,OAAO,WACLwG,KAAKlH,MAAQU,SAiBaV,KAAMU,QAC5BwG,KAAK8uB,OAAOh2B,OdsClBmjF,QVHa,SAASnjF,KAAMU,OAC5B,IAAIwrD,MAAQ2xB,WAAW79E,KAAO,IAE9B,GAAIsM,UAAU1D,OAAS,EAAG,CAExB,IADA,IAAI0tB,KAAOwnD,UAAU52E,KAAK8uB,QAASv2B,GAAK,EAAGyB,EAAIgrD,MAAMtjD,SAC5CnJ,EAAIyB,GAAG,IAAKo1B,KAAK6nD,SAASjyB,MAAMzsD,IAAK,OAAO,EACrD,OAAO,EAGT,OAAOyH,KAAKulC,MAAuB,mBAAV/rC,MAf3B,SAAS0iF,gBAAgBl3B,MAAOxrD,OAC9B,OAAO,YACJA,MAAM+N,MAAMvH,KAAMoF,WAAa2xE,WAAaC,eAAeh3E,KAAMglD,SAc5CxrD,MA5B1B,SAAS2iF,YAAYn3B,OACnB,OAAO,WACL+xB,WAAW/2E,KAAMglD,SAIrB,SAASo3B,aAAap3B,OACpB,OAAO,WACLgyB,cAAch3E,KAAMglD,UAsBFA,MAAOxrD,SUR3B6G,KThDa,SAAS7G,OACtB,OAAO4L,UAAU1D,OACX1B,KAAKulC,KAAc,MAAT/rC,MACN09E,YAA+B,mBAAV19E,MAVjC,SAAS6iF,aAAa7iF,OACpB,OAAO,WACL,IAAIoQ,EAAIpQ,MAAM+N,MAAMvH,KAAMoF,WAC1BpF,KAAKo6B,YAAmB,MAALxwB,EAAY,GAAKA,IATxC,SAAS0yE,aAAa9iF,OACpB,OAAO,WACLwG,KAAKo6B,YAAc5gC,SAgBGA,QAClBwG,KAAK8uB,OAAOsL,aS2ClBmiD,KRjDa,SAAS/iF,OACtB,OAAO4L,UAAU1D,OACX1B,KAAKulC,KAAc,MAAT/rC,MACN29E,YAA+B,mBAAV39E,MAVjC,SAASgjF,aAAahjF,OACpB,OAAO,WACL,IAAIoQ,EAAIpQ,MAAM+N,MAAMvH,KAAMoF,WAC1BpF,KAAKw3B,UAAiB,MAAL5tB,EAAY,GAAKA,IATtC,SAAS6yE,aAAajjF,OACpB,OAAO,WACLwG,KAAKw3B,UAAYh+B,SAgBKA,QAClBwG,KAAK8uB,OAAO0I,WQ4ClBipB,MP/Da,WACb,OAAOzgD,KAAKulC,KAAKkb,cO+DjB42B,MNhEa,WACb,OAAOr3E,KAAKulC,KAAK8xC,QMgEjBnkD,OenEa,SAASp6B,MACtB,IAAIe,OAAyB,mBAATf,KAAsBA,KAAOk8E,QAAQl8E,MACzD,OAAOkH,KAAK8d,OAAO,WACjB,OAAO9d,KAAK8hC,YAAYjoC,OAAO0N,MAAMvH,KAAMoF,efiE7CmsD,OL/Da,SAASz4D,KAAMkpE,QAC5B,IAAInoE,OAAyB,mBAATf,KAAsBA,KAAOk8E,QAAQl8E,MACrDglB,OAAmB,MAAVkkD,OAAiBwV,aAAiC,mBAAXxV,OAAwBA,OAASwT,aAASxT,QAC9F,OAAOhiE,KAAK8d,OAAO,WACjB,OAAO9d,KAAKw/B,aAAa3lC,OAAO0N,MAAMvH,KAAMoF,WAAY0Y,OAAOvW,MAAMvH,KAAMoF,YAAc,SK4D3FogC,OJlEa,WACb,OAAOxlC,KAAKulC,KAAKC,gBIkEjB3nB,MHhEa,SAAS6+D,MACtB,OAAO18E,KAAK8d,OAAO4+D,KAAO/E,oBAAsBF,yBGgEhDnmE,MgBzEa,SAAS9X,OACtB,OAAO4L,UAAU1D,OACX1B,KAAK5F,SAAS,WAAYZ,OAC1BwG,KAAK8uB,OAAOmnD,UhBuElBvK,GFEa,SAAS8M,SAAUh/E,MAAOm/E,SACvC,IAA+CpgF,EAAyBkB,EAApEkjF,UA5CN,SAASC,eAAeD,WACtB,OAAOA,UAAUxkE,OAAO7L,MAAM,SAASrE,IAAI,SAASxO,GAClD,IAAIX,KAAO,GAAIP,EAAIkB,EAAEwM,QAAQ,KAE7B,OADI1N,GAAK,IAAGO,KAAOW,EAAEqhB,MAAMviB,EAAI,GAAIkB,EAAIA,EAAEqhB,MAAM,EAAGviB,KAC1C8C,KAAM5B,EAAGX,KAAMA,QAwCT8jF,CAAepE,SAAW,IAAQx+E,EAAI2iF,UAAUj7E,OAEhE,KAAI0D,UAAU1D,OAAS,GAAvB,CAcA,IAFAgqE,GAAKlyE,MAAQo/E,MAAQL,SACN,MAAXI,UAAiBA,SAAU,GAC1BpgF,EAAI,EAAGA,EAAIyB,IAAKzB,EAAGyH,KAAKulC,KAAKmmC,GAAGiR,UAAUpkF,GAAIiB,MAAOm/E,UAC1D,OAAO34E,KAdL,IAAI0rE,GAAK1rE,KAAK8uB,OAAO2pD,KACrB,GAAI/M,GAAI,IAAK,IAA0B1yE,EAAtB6hB,EAAI,EAAGliB,EAAI+yE,GAAGhqE,OAAWmZ,EAAIliB,IAAKkiB,EACjD,IAAKtiB,EAAI,EAAGS,EAAI0yE,GAAG7wD,GAAItiB,EAAIyB,IAAKzB,EAC9B,IAAKkB,EAAIkjF,UAAUpkF,IAAI8C,OAASrC,EAAEqC,MAAQ5B,EAAEX,OAASE,EAAEF,KACrD,OAAOE,EAAEQ,OETjBqjF,SD9Ca,SAASxhF,KAAMqlB,QAC5B,OAAO1gB,KAAKulC,MAAwB,mBAAX7kB,OAP3B,SAASo8D,iBAAiBzhF,KAAMqlB,QAC9B,OAAO,WACL,OAAOu4D,cAAcj5E,KAAM3E,KAAMqlB,OAAOnZ,MAAMvH,KAAMoF,cARxD,SAAS23E,iBAAiB1hF,KAAMqlB,QAC9B,OAAO,WACL,OAAOu4D,cAAcj5E,KAAM3E,KAAMqlB,WAaXrlB,KAAMqlB,WC8CjBowC,sCiB5EAksB,WAAA,SAASxH,UACtB,MAA2B,iBAAbA,SACR,IAAIzP,sBAAYzvC,SAASm/C,cAAcD,aAAcl/C,SAASwjB,kBAC9D,IAAIisB,sBAAYyP,WAAY39E,iBCLhColF,OAAS,EAMb,SAASC,QACPl9E,KAAKmgB,EAAI,OAAS88D,QAAQ36E,SAAS,IAGrC46E,MAAM7iF,UARS,SAAS60E,QACtB,OAAO,IAAIgO,OAOW7iF,WACtB2qB,YAAak4D,MACb9jF,IAAK,SAAAA,IAAS01B,MAEZ,IADA,IAAIgI,GAAK92B,KAAKmgB,IACL2W,MAAMhI,OAAO,KAAMA,KAAOA,KAAKyQ,YAAa,OACrD,OAAOzQ,KAAKgI,KAEdrlB,IAAK,SAAAA,IAASqd,KAAMt1B,OAClB,OAAOs1B,KAAK9uB,KAAKmgB,GAAK3mB,OAExBgsC,OAAQ,SAAAA,OAAS1W,MACf,OAAO9uB,KAAKmgB,KAAK2O,aAAeA,KAAK9uB,KAAKmgB,IAE5C7d,SAAU,SAAAA,WACR,OAAOtC,KAAKmgB,ICtBD,IAAA64D,YAAA,WAEb,IADA,IAAqBv1D,OAAjB05D,QAAUtF,SACPp0D,OAAS05D,QAAQnE,aAAamE,QAAU15D,OAC/C,OAAO05D,SCLMC,UAAA,SAAStuD,KAAM+oD,OAC5B,IAAIn1C,IAAM5T,KAAKuuD,iBAAmBvuD,KAElC,GAAI4T,IAAI46C,eAAgB,CACtB,IAAI1mB,MAAQl0B,IAAI46C,iBAGhB,OAFA1mB,MAAMz6B,EAAI07C,MAAM0F,QAAS3mB,MAAMpzD,EAAIq0E,MAAM2F,UACzC5mB,MAAQA,MAAM6mB,gBAAgB3uD,KAAK4uD,eAAeC,YACpCxhD,EAAGy6B,MAAMpzD,GAGzB,IAAI0wD,KAAOplC,KAAK8uD,wBAChB,OAAQ/F,MAAM0F,QAAUrpB,KAAKpwB,KAAOhV,KAAK+uD,WAAYhG,MAAM2F,QAAUtpB,KAAKxzB,IAAM5R,KAAKgvD,YCRxEC,MAAA,SAASjvD,MACtB,IAAI+oD,MAAQmB,cAEZ,OADInB,MAAMmG,iBAAgBnG,MAAQA,MAAMmG,eAAe,IAChDpnB,UAAM9nC,KAAM+oD,QCHNoG,UAAA,SAASnvD,KAAMovD,QAASC,YACjC/4E,UAAU1D,OAAS,IAAGy8E,WAAaD,QAASA,QAAUlF,cAAcgF,gBAExE,IAAK,IAA6CI,MAAzC7lF,EAAI,EAAGyB,EAAIkkF,QAAUA,QAAQx8E,OAAS,EAAUnJ,EAAIyB,IAAKzB,EAChE,IAAK6lF,MAAQF,QAAQ3lF,IAAI4lF,aAAeA,WACtC,OAAOvnB,UAAM9nC,KAAMsvD,OAIvB,OAAO,MCZLjlB,eAAQ3/D,MAAO,SAAAA,WAEnB,SAASqjF,oBACP,IAAK,IAAyCpjF,EAArClB,EAAI,EAAGyB,EAAIoL,UAAU1D,OAAQye,KAAW5nB,EAAIyB,IAAKzB,EAAG,CAC3D,KAAMkB,EAAI2L,UAAU7M,GAAK,KAAQkB,KAAK0mB,EAAI,MAAM,IAAIlR,MAAM,iBAAmBxV,GAC7E0mB,EAAE1mB,MAEJ,OAAO,IAAI4kF,SAASl+D,GAGtB,SAASk+D,SAASl+D,GAChBngB,KAAKmgB,EAAIA,EAqDX,SAAS/mB,aAAIiC,KAAMvC,MACjB,IAAK,IAA4BF,EAAxBL,EAAI,EAAGyB,EAAIqB,KAAKqG,OAAWnJ,EAAIyB,IAAKzB,EAC3C,IAAKK,EAAIyC,KAAK9C,IAAIO,OAASA,KACzB,OAAOF,EAAEY,MAKf,SAASiY,aAAIpW,KAAMvC,KAAMuT,UACvB,IAAK,IAAI9T,EAAI,EAAGyB,EAAIqB,KAAKqG,OAAQnJ,EAAIyB,IAAKzB,EACxC,GAAI8C,KAAK9C,GAAGO,OAASA,KAAM,CACzBuC,KAAK9C,GAAK4gE,cAAM99D,KAAOA,KAAKyf,MAAM,EAAGviB,GAAG8iB,OAAOhgB,KAAKyf,MAAMviB,EAAI,IAC9D,MAIJ,OADgB,MAAZ8T,UAAkBhR,KAAK6K,MAAMpN,KAAMA,KAAMU,MAAO6S,WAC7ChR,KAzDTgjF,SAAShkF,UAAYwiF,kBAASxiF,WAC5B2qB,YAAaq5D,SACb3S,GAAI,SAAAA,GAAS8M,SAAUnsE,UACrB,IAEI5S,EAFA0mB,EAAIngB,KAAKmgB,EACTm+D,EAbR,SAAS1B,wBAAeD,UAAW4B,OACjC,OAAO5B,UAAUxkE,OAAO7L,MAAM,SAASrE,IAAI,SAASxO,GAClD,IAAIX,KAAO,GAAIP,EAAIkB,EAAEwM,QAAQ,KAE7B,GADI1N,GAAK,IAAGO,KAAOW,EAAEqhB,MAAMviB,EAAI,GAAIkB,EAAIA,EAAEqhB,MAAM,EAAGviB,IAC9CkB,IAAM8kF,MAAMjkF,eAAeb,GAAI,MAAM,IAAIwV,MAAM,iBAAmBxV,GACtE,OAAQ4B,KAAM5B,EAAGX,KAAMA,QAQf8jF,CAAepE,SAAW,GAAIr4D,GAElC5nB,GAAK,EACLyB,EAAIskF,EAAE58E,OAGV,KAAI0D,UAAU1D,OAAS,GAAvB,CAOA,GAAgB,MAAZ2K,UAAwC,mBAAbA,SAAyB,MAAM,IAAI4C,MAAM,qBAAuB5C,UAC/F,OAAS9T,EAAIyB,GACX,GAAIP,GAAK++E,SAAW8F,EAAE/lF,IAAI8C,KAAM8kB,EAAE1mB,GAAKgY,aAAI0O,EAAE1mB,GAAI++E,SAAS1/E,KAAMuT,eAC3D,GAAgB,MAAZA,SAAkB,IAAK5S,KAAK0mB,EAAGA,EAAE1mB,GAAKgY,aAAI0O,EAAE1mB,GAAI++E,SAAS1/E,KAAM,MAG1E,OAAOkH,KAZL,OAASzH,EAAIyB,GAAG,IAAKP,GAAK++E,SAAW8F,EAAE/lF,IAAI8C,QAAU5B,EAAIL,aAAI+mB,EAAE1mB,GAAI++E,SAAS1/E,OAAQ,OAAOW,GAc/FutC,KAAM,SAAAA,OACJ,IAAIA,QAAW7mB,EAAIngB,KAAKmgB,EACxB,IAAK,IAAI1mB,KAAK0mB,EAAG6mB,KAAKvtC,GAAK0mB,EAAE1mB,GAAGqhB,QAChC,OAAO,IAAIujE,SAASr3C,OAEtBtuC,KAAM,SAAAA,KAAS2C,KAAM+9D,MACnB,IAAKp/D,EAAIoL,UAAU1D,OAAS,GAAK,EAAG,IAAK,IAAgC1H,EAAGP,EAA/BuN,KAAO,IAAI6B,MAAM7O,GAAIzB,EAAI,EAASA,EAAIyB,IAAKzB,EAAGyO,KAAKzO,GAAK6M,UAAU7M,EAAI,GACnH,IAAKyH,KAAKmgB,EAAE7lB,eAAee,MAAO,MAAM,IAAI4T,MAAM,iBAAmB5T,MACrE,IAAuB9C,EAAI,EAAGyB,GAAzBP,EAAIuG,KAAKmgB,EAAE9kB,OAAoBqG,OAAQnJ,EAAIyB,IAAKzB,EAAGkB,EAAElB,GAAGiB,MAAM+N,MAAM6xD,KAAMpyD,OAEjFO,MAAO,SAAAA,MAASlM,KAAM+9D,KAAMpyD,MAC1B,IAAKhH,KAAKmgB,EAAE7lB,eAAee,MAAO,MAAM,IAAI4T,MAAM,iBAAmB5T,MACrE,IAAK,IAAI5B,EAAIuG,KAAKmgB,EAAE9kB,MAAO9C,EAAI,EAAGyB,EAAIP,EAAEiI,OAAQnJ,EAAIyB,IAAKzB,EAAGkB,EAAElB,GAAGiB,MAAM+N,MAAM6xD,KAAMpyD,QAuBxE61E,mCCjFR,SAAS2B,gBACd3G,SAAM4G,2BAGO,IAAAC,QAAA,WACb7G,SAAM8G,iBACN9G,SAAM4G,4BCLOG,OAAA,SAASC,MACtB,IAAIhnF,KAAOgnF,KAAKvoD,SAASwjB,gBACrBgX,UAAYhzC,WAAO+gE,MAAMnT,GAAG,iBAAkBgT,SAAS,GACvD,kBAAmB7mF,KACrBi5D,UAAU4a,GAAG,mBAAoBgT,SAAS,IAE1C7mF,KAAKinF,WAAajnF,KAAKkgC,MAAMgnD,cAC7BlnF,KAAKkgC,MAAMgnD,cAAgB,SCVhB,IAAAC,qBAAA,SAAS7iD,GACtB,OAAO,WACL,OAAOA,ICFI,SAAS8iD,UAAUvjC,OAAQrgD,KAAM6jF,QAASpoD,GAAIqoD,OAAQhjD,EAAG34B,EAAGswD,GAAIC,GAAI8oB,UACjF78E,KAAK07C,OAASA,OACd17C,KAAK3E,KAAOA,KACZ2E,KAAKk/E,QAAUA,QACfl/E,KAAKm+E,WAAarnD,GAClB92B,KAAKm/E,OAASA,OACdn/E,KAAKm8B,EAAIA,EACTn8B,KAAKwD,EAAIA,EACTxD,KAAK8zD,GAAKA,GACV9zD,KAAK+zD,GAAKA,GACV/zD,KAAKmgB,EAAI08D,SCFX,SAASuC,gBACP,OAAQvH,SAAMwH,OAGhB,SAASC,mBACP,OAAOt/E,KAAKu/B,WAGd,SAASggD,eAAe1mF,GACtB,OAAY,MAALA,GAAasjC,EAAG07C,SAAM17C,EAAG34B,EAAGq0E,SAAMr0E,GAAK3K,EAGhD,SAAS2mF,mBACP,MAAO,iBAAkBx/E,KDR3Bi/E,UAAU5kF,UAAUqxE,GAAK,WACvB,IAAIlyE,MAAQwG,KAAKmgB,EAAEurD,GAAGnkE,MAAMvH,KAAKmgB,EAAG/a,WACpC,OAAO5L,QAAUwG,KAAKmgB,EAAIngB,KAAOxG,OCSpB,IAAAimF,SAAA,WACb,IAOIC,WACAC,WACAC,YACAC,YAVA7sE,OAASosE,cACTroD,UAAYuoD,iBACZJ,QAAUK,eACVO,UAAYN,iBACZO,YACArxD,UAAYmuD,aAAS,QAAS,OAAQ,OACtCsC,OAAS,EAKTa,eAAiB,EAErB,SAASC,KAAKnvB,WACZA,UACK4a,GAAG,iBAAkBwU,aACvBltE,OAAO8sE,WACLpU,GAAG,kBAAmByU,cACtBzU,GAAG,iBAAkB0U,YACrB1U,GAAG,iCAAkC2U,YACrCtoD,MAAM,eAAgB,QACtBA,MAAM,8BAA+B,iBAG5C,SAASmoD,cACP,IAAIL,aAAgB7sE,OAAOzL,MAAMvH,KAAMoF,WAAvC,CACA,IAAIk7E,QAAUC,YAAY,QAASxpD,UAAUxvB,MAAMvH,KAAMoF,WAAY24E,MAAO/9E,KAAMoF,WAC7Ek7E,UACLxiE,WAAO+5D,SAAMgH,MAAMnT,GAAG,iBAAkB8U,YAAY,GAAM9U,GAAG,eAAgB+U,YAAY,GACzF7B,OAAO/G,SAAMgH,MACbL,gBACAoB,aAAc,EACdF,WAAa7H,SAAM0F,QACnBoC,WAAa9H,SAAM2F,QACnB8C,QAAQ,WAGV,SAASE,aAEP,GADA9B,WACKkB,YAAa,CAChB,IAAI9rB,GAAK+jB,SAAM0F,QAAUmC,WAAY3rB,GAAK8jB,SAAM2F,QAAUmC,WAC1DC,YAAc9rB,GAAKA,GAAKC,GAAKA,GAAKisB,eAEpCD,SAAShC,MAAM,QAGjB,SAAS0C,aACP3iE,WAAO+5D,SAAMgH,MAAMnT,GAAG,8BAA+B,MH1DlD,SAASgV,QAAQ7B,KAAM8B,SAC5B,IAAI9oF,KAAOgnF,KAAKvoD,SAASwjB,gBACrBgX,UAAYhzC,WAAO+gE,MAAMnT,GAAG,iBAAkB,MAC9CiV,UACF7vB,UAAU4a,GAAG,aAAcgT,SAAS,GACpC1wD,WAAW,WAAa8iC,UAAU4a,GAAG,aAAc,OAAU,IAE3D,kBAAmB7zE,KACrBi5D,UAAU4a,GAAG,mBAAoB,OAEjC7zE,KAAKkgC,MAAMgnD,cAAgBlnF,KAAKinF,kBACzBjnF,KAAKinF,YGgDZ4B,CAAQ7I,SAAMgH,KAAMe,aACpBlB,UACAqB,SAAShC,MAAM,OAGjB,SAASoC,eACP,GAAKntE,OAAOzL,MAAMvH,KAAMoF,WAAxB,CACA,IAEwB7M,EAAG+nF,QAFvBpC,QAAUrG,SAAMmG,eAChBplF,EAAIm+B,UAAUxvB,MAAMvH,KAAMoF,WAC1BpL,EAAIkkF,QAAQx8E,OAEhB,IAAKnJ,EAAI,EAAGA,EAAIyB,IAAKzB,GACf+nF,QAAUC,YAAYrC,QAAQ3lF,GAAG4lF,WAAYvlF,EAAGwlF,UAAOp+E,KAAMoF,cAC/Do5E,gBACA8B,QAAQ,WAKd,SAASF,aACP,IACwB7nF,EAAG+nF,QADvBpC,QAAUrG,SAAMmG,eAChBhkF,EAAIkkF,QAAQx8E,OAEhB,IAAKnJ,EAAI,EAAGA,EAAIyB,IAAKzB,GACf+nF,QAAUP,SAAS7B,QAAQ3lF,GAAG4lF,eAChCO,UACA4B,QAAQ,SAKd,SAASD,aACP,IACwB9nF,EAAG+nF,QADvBpC,QAAUrG,SAAMmG,eAChBhkF,EAAIkkF,QAAQx8E,OAIhB,IAFIm+E,aAAae,aAAaf,aAC9BA,YAAc7xD,WAAW,WAAa6xD,YAAc,MAAS,KACxDtnF,EAAI,EAAGA,EAAIyB,IAAKzB,GACf+nF,QAAUP,SAAS7B,QAAQ3lF,GAAG4lF,eAChCK,gBACA8B,QAAQ,QAKd,SAASC,YAAYzpD,GAAIC,UAAW6/B,MAAOwC,KAAMpyD,MAC/C,IAA8BxM,EAAGs5D,GAAIC,GAAjCx5D,EAAIq8D,MAAM7/B,UAAWD,IACrB+pD,aAAenyD,UAAUsY,OAE7B,GAAK+xC,YAAY,IAAIkG,UAAUgB,KAAM,cAAezlF,EAAGs8B,GAAIqoD,OAAQ5kF,EAAE,GAAIA,EAAE,GAAI,EAAG,EAAGsmF,cAAe,WAClG,OAAuD,OAAlDhJ,SAAMqH,QAAU1kF,EAAI0kF,QAAQ33E,MAAM6xD,KAAMpyD,SAC7C8sD,GAAKt5D,EAAE2hC,EAAI5hC,EAAE,IAAM,EACnBw5D,GAAKv5D,EAAEgJ,EAAIjJ,EAAE,IAAM,GACZ,KAGT,OAAO,SAAS+lF,QAAQjlF,MACtB,IAAYrB,EAAR04E,GAAKn4E,EACT,OAAQc,MACN,IAAK,QAAS0kF,SAASjpD,IAAMwpD,QAAStmF,EAAImlF,SAAU,MACpD,IAAK,aAAcY,SAASjpD,MAAOqoD,OACnC,IAAK,OAAQ5kF,EAAIq8D,MAAM7/B,UAAWD,IAAK98B,EAAImlF,OAE7CpG,YAAY,IAAIkG,UAAUgB,KAAM5kF,KAAMb,EAAGs8B,GAAI98B,EAAGO,EAAE,GAAKu5D,GAAIv5D,EAAE,GAAKw5D,GAAIx5D,EAAE,GAAKm4E,GAAG,GAAIn4E,EAAE,GAAKm4E,GAAG,GAAImO,cAAeA,aAAat5E,MAAOs5E,cAAexlF,KAAM+9D,KAAMpyD,QA6BpK,OAzBAi5E,KAAKjtE,OAAS,SAASmN,GACrB,OAAO/a,UAAU1D,QAAUsR,OAAsB,mBAANmN,EAAmBA,EAAIq2B,uBAAWr2B,GAAI8/D,MAAQjtE,QAG3FitE,KAAKlpD,UAAY,SAAS5W,GACxB,OAAO/a,UAAU1D,QAAUq1B,UAAyB,mBAAN5W,EAAmBA,EAAIq2B,qBAASr2B,GAAI8/D,MAAQlpD,WAG5FkpD,KAAKf,QAAU,SAAS/+D,GACtB,OAAO/a,UAAU1D,QAAUw9E,QAAuB,mBAAN/+D,EAAmBA,EAAIq2B,qBAASr2B,GAAI8/D,MAAQf,SAG1Fe,KAAKH,UAAY,SAAS3/D,GACxB,OAAO/a,UAAU1D,QAAUo+E,UAAyB,mBAAN3/D,EAAmBA,EAAIq2B,uBAAWr2B,GAAI8/D,MAAQH,WAG9FG,KAAKvU,GAAK,WACR,IAAIlyE,MAAQk1B,UAAUg9C,GAAGnkE,MAAMmnB,UAAWtpB,WAC1C,OAAO5L,QAAUk1B,UAAYuxD,KAAOzmF,OAGtCymF,KAAKa,cAAgB,SAAS3gE,GAC5B,OAAO/a,UAAU1D,QAAUs+E,gBAAkB7/D,GAAKA,GAAKA,EAAG8/D,MAAQp8E,KAAKkQ,KAAKisE,iBAGvEC,mSCrKT,IAIIc,SACAC,SALAC,YAAQ,EACRC,QAAU,EACVthC,eAAW,EACXuhC,UAAY,IAGZC,UAAY,EACZC,SAAW,EACXC,UAAY,EACZC,MAA+B,YAAvB,oBAAOC,YAAP,YAAAC,aAAOD,eAA4BA,YAAYE,IAAMF,YAAc5hF,KAC3E+hF,SAA6B,YAAlB,oBAAOxpF,OAAP,YAAAspF,aAAOtpF,UAAuBA,OAAOw1B,sBAAwBx1B,OAAOw1B,sBAAsB5zB,KAAK5B,QAAU,SAASoiB,GAAKyT,WAAWzT,EAAG,KAE7I,SAASmnE,MACd,OAAOL,WAAaM,SAASC,UAAWP,SAAWE,MAAMG,MAAQJ,WAGnE,SAASM,WACPP,SAAW,EAGN,SAASQ,QACd7hF,KAAK8hF,MACL9hF,KAAK+hF,MACL/hF,KAAKg2E,MAAQ,KA0BR,SAASgM,YAAM31E,SAAU41E,MAAOt4B,MACrC,IAAIlwD,EAAI,IAAIooF,MAEZ,OADApoF,EAAEyoF,QAAQ71E,SAAU41E,MAAOt4B,MACpBlwD,EAcT,SAAS0oF,OACPd,UAAYD,UAAYG,MAAMG,OAASJ,UACvCL,YAAQC,QAAU,EAClB,KAdK,SAASkB,aACdV,QACET,YAEF,IADA,IAAkBxmF,EAAdhB,EAAIsnF,SACDtnF,IACAgB,EAAI4mF,SAAW5nF,EAAEsoF,QAAU,GAAGtoF,EAAEqoF,MAAMppF,KAAK,KAAM+B,GACtDhB,EAAIA,EAAEu8E,QAENiL,YAOAmB,GADF,QAGEnB,YAAQ,EAWZ,SAASoB,MACP,IAAInuC,GAAmBE,GAAfD,GAAK4sC,SAAcp3B,KAAOzK,IAClC,KAAO/K,IACDA,GAAG2tC,OACDn4B,KAAOxV,GAAG4tC,QAAOp4B,KAAOxV,GAAG4tC,OAC/B7tC,GAAKC,GAAIA,GAAKA,GAAG6hC,QAEjB5hC,GAAKD,GAAG6hC,MAAO7hC,GAAG6hC,MAAQ,KAC1B7hC,GAAKD,GAAKA,GAAG8hC,MAAQ5hC,GAAK2sC,SAAW3sC,IAGzC4sC,SAAW9sC,GACXouC,MAAM34B,MAtBJ04B,GACAhB,SAAW,GAIf,SAASkB,OACP,IAAIb,IAAMH,MAAMG,MAAOO,MAAQP,IAAMN,UACjCa,MAAQd,YAAWG,WAAaW,MAAOb,UAAYM,KAkBzD,SAASY,MAAM34B,MACTs3B,cACAC,UAASA,QAAUN,aAAaM,UACxBv3B,KAAO03B,SACP,IACN13B,KAAOzK,MAAUgiC,QAAUlzD,WAAWm0D,KAAMx4B,KAAO43B,MAAMG,MAAQJ,YACjE1hC,iBAAUA,eAAW4iC,cAAc5iC,mBAElCA,iBAAUwhC,UAAYG,MAAMG,MAAO9hC,eAAW6iC,YAAYF,KAAMpB,YACrEF,YAAQ,EAAGU,SAASQ,QAjFxBN,MAAMxnF,UAAY2nF,YAAM3nF,WACtB2qB,YAAa68D,MACbK,QAAS,SAAAA,QAAS71E,SAAU41E,MAAOt4B,MACjC,GAAwB,mBAAbt9C,SAAyB,MAAM,IAAIiI,UAAU,8BACxDq1C,MAAgB,MAARA,KAAe+3B,OAAS/3B,OAAkB,MAATs4B,MAAgB,GAAKA,OACzDjiF,KAAKg2E,OAASgL,WAAahhF,OAC1BghF,SAAUA,SAAShL,MAAQh2E,KAC1B+gF,SAAW/gF,KAChBghF,SAAWhhF,MAEbA,KAAK8hF,MAAQz1E,SACbrM,KAAK+hF,MAAQp4B,KACb24B,SAEFj+C,KAAM,SAAAA,OACArkC,KAAK8hF,QACP9hF,KAAK8hF,MAAQ,KACb9hF,KAAK+hF,MAAQ7iC,IACbojC,WC1CS,IAAAI,YAAA,SAASr2E,SAAU41E,MAAOt4B,MACvC,IAAIlwD,EAAI,IAAIooF,MAMZ,OALAI,MAAiB,MAATA,MAAgB,GAAKA,MAC7BxoF,EAAEyoF,QAAQ,SAASS,SACjBlpF,EAAE4qC,OACFh4B,SAASs2E,QAAUV,QAClBA,MAAOt4B,MACHlwD,GCNLmpF,QAAU/F,aAAS,QAAS,MAAO,SAAU,aAC7CgG,cAEOC,QAAU,EACVC,UAAY,EACZC,SAAW,EACXC,QAAU,EACVC,QAAU,EACVC,OAAS,EACTC,MAAQ,EAEJC,oBAAA,SAASv0D,KAAMh2B,KAAMg+B,GAAI70B,MAAOg8C,MAAOqlC,QACpD,IAAIC,UAAYz0D,KAAK00D,aACrB,GAAKD,WACA,GAAIzsD,MAAMysD,UAAW,YADVz0D,KAAK00D,iBAmCvB,SAAS3pF,gBAAOi1B,KAAMgI,GAAI2sD,MACxB,IACIC,MADAH,UAAYz0D,KAAK00D,aAgBrB,SAASvlF,MAAM0kF,SACb,IAAIpqF,EAAGsiB,EAAG7gB,EAAGhB,EAGb,GAAIyqF,KAAKE,QAAUZ,UAAW,OAAO1+C,OAErC,IAAK9rC,KAAKgrF,UAER,IADAvqF,EAAIuqF,UAAUhrF,IACRO,OAAS2qF,KAAK3qF,KAApB,CAKA,GAAIE,EAAE2qF,QAAUV,QAAS,OAAO/B,YAAQjjF,OAGpCjF,EAAE2qF,QAAUT,SACdlqF,EAAE2qF,MAAQP,MACVpqF,EAAEgpF,MAAM39C,OACRrrC,EAAE0yE,GAAGhzE,KAAK,YAAao2B,KAAMA,KAAKmnD,SAAUj9E,EAAEiJ,MAAOjJ,EAAEilD,cAChDslC,UAAUhrF,KAITA,EAAIu+B,KACZ99B,EAAE2qF,MAAQP,MACVpqF,EAAEgpF,MAAM39C,OACRrrC,EAAE0yE,GAAGhzE,KAAK,SAAUo2B,KAAMA,KAAKmnD,SAAUj9E,EAAEiJ,MAAOjJ,EAAEilD,cAC7CslC,UAAUhrF,IAoBrB,GAZA2oF,YAAQ,WACFuC,KAAKE,QAAUV,UACjBQ,KAAKE,MAAQT,QACbO,KAAKzB,MAAME,QAAQlxB,KAAMyyB,KAAKxB,MAAOwB,KAAK95B,MAC1CqH,KAAK2xB,YAMTc,KAAKE,MAAQX,SACbS,KAAK/X,GAAGhzE,KAAK,QAASo2B,KAAMA,KAAKmnD,SAAUwN,KAAKxhF,MAAOwhF,KAAKxlC,OACxDwlC,KAAKE,QAAUX,SAAnB,CAKA,IAJAS,KAAKE,MAAQV,QAGbS,MAAQ,IAAI76E,MAAM7O,EAAIypF,KAAKC,MAAMhiF,QAC5BnJ,EAAI,EAAGsiB,GAAK,EAAGtiB,EAAIyB,IAAKzB,GACvBS,EAAIyqF,KAAKC,MAAMnrF,GAAGiB,MAAMd,KAAKo2B,KAAMA,KAAKmnD,SAAUwN,KAAKxhF,MAAOwhF,KAAKxlC,UACrEylC,QAAQ7oE,GAAK7hB,GAGjB0qF,MAAMhiF,OAASmZ,EAAI,GAGrB,SAASm2C,KAAK2xB,SAKZ,IAJA,IAAIlpF,EAAIkpF,QAAUc,KAAKG,SAAWH,KAAKI,KAAKnrF,KAAK,KAAMiqF,QAAUc,KAAKG,WAAaH,KAAKzB,MAAME,QAAQ79C,MAAOo/C,KAAKE,MAAQR,OAAQ,GAC9H5qF,GAAK,EACLyB,EAAI0pF,MAAMhiF,SAELnJ,EAAIyB,GACX0pF,MAAMnrF,GAAGG,KAAKo2B,KAAMr1B,GAIlBgqF,KAAKE,QAAUR,SACjBM,KAAK/X,GAAGhzE,KAAK,MAAOo2B,KAAMA,KAAKmnD,SAAUwN,KAAKxhF,MAAOwhF,KAAKxlC,OAC1D5Z,QAIJ,SAASA,OAIP,IAAK,IAAI9rC,KAHTkrF,KAAKE,MAAQP,MACbK,KAAKzB,MAAM39C,cACJk/C,UAAUzsD,IACHysD,UAAW,cAClBz0D,KAAK00D,aA7FdD,UAAUzsD,IAAM2sD,KAChBA,KAAKzB,MAAQA,YAEb,SAAS8B,SAASnB,SAChBc,KAAKE,MAAQZ,UACbU,KAAKzB,MAAME,QAAQjkF,MAAOwlF,KAAKxB,MAAOwB,KAAK95B,MAGvC85B,KAAKxB,OAASU,SAAS1kF,MAAM0kF,QAAUc,KAAKxB,QAPrB,EAAGwB,KAAK95B,MAxCrC9vD,CAAOi1B,KAAMgI,IACXh+B,KAAMA,KACNmJ,MAAOA,MACPg8C,MAAOA,MACPytB,GAAIkX,QACJc,MAAOb,WACPl5B,KAAM25B,OAAO35B,KACbs4B,MAAOqB,OAAOrB,MACd2B,SAAUN,OAAOM,SACjBC,KAAMP,OAAOO,KACb7B,MAAO,KACP2B,MAAOb,WAIJ,SAAS1sD,KAAKtH,KAAMgI,IACzB,IAAIgtD,SAAW1qF,aAAI01B,KAAMgI,IACzB,GAAIgtD,SAASH,MAAQb,QAAS,MAAM,IAAI7zE,MAAM,+BAC9C,OAAO60E,SAGF,SAASryE,aAAIqd,KAAMgI,IACxB,IAAIgtD,SAAW1qF,aAAI01B,KAAMgI,IACzB,GAAIgtD,SAASH,MAAQV,QAAS,MAAM,IAAIh0E,MAAM,6BAC9C,OAAO60E,SAGF,SAAS1qF,aAAI01B,KAAMgI,IACxB,IAAIgtD,SAAWh1D,KAAK00D,aACpB,IAAKM,YAAcA,SAAWA,SAAShtD,KAAM,MAAM,IAAI7nB,MAAM,wBAC7D,OAAO60E,SCqBF,SAASC,WAAWvyB,WAAY14D,KAAMU,OAC3C,IAAIs9B,GAAK06B,WAAWwyB,IAOpB,OALAxyB,WAAWjsB,KAAK,WACd,IAAIu+C,SAAWryE,aAAIzR,KAAM82B,KACxBgtD,SAAStqF,QAAUsqF,SAAStqF,WAAaV,MAAQU,MAAM+N,MAAMvH,KAAMoF,aAG/D,SAAS0pB,MACd,OAAO11B,aAAI01B,KAAMgI,IAAIt9B,MAAMV,OC3EhB,IAAAmrF,uBAAA,SAAStpF,EAAGyI,GACzB,IAAIxK,EACJ,OAAqB,iBAANwK,EAAiB4qE,WAC1B5qE,aAAaovC,YAAQ0xC,SACpBtrF,EAAI45C,YAAMpvC,KAAOA,EAAIxK,EAAGsrF,SACzBC,YAAmBxpF,EAAGyI,ICAf,ICNX2iE,+BAAYjV,cAAUz2D,UAAU2qB,YCiBpC,SAASy2D,kBAAY3iF,MACnB,OAAO,WACLkH,KAAK+3B,MAAM2jD,eAAe5iF,OCNf,ICKXg+B,cAAK,EAEF,SAASstD,WAAW5K,OAAQC,QAAS3gF,KAAMg+B,IAChD92B,KAAK05E,QAAUF,OACfx5E,KAAK25E,SAAWF,QAChBz5E,KAAKqkF,MAAQvrF,KACbkH,KAAKgkF,IAAMltD,GAON,SAASwtD,QACd,QAASxtD,cAGX,IAAIytD,oBAAsBzzB,cAAUz2D,UAEpC+pF,WAAW/pF,UAVI,SAASm3D,0BAAW14D,MACjC,OAAOg4D,gBAAYU,WAAW14D,OASEuB,WAChC2qB,YAAao/D,WACbtmE,OCrCa,SAASA,QACtB,IAAIhlB,KAAOkH,KAAKqkF,MACZvtD,GAAK92B,KAAKgkF,IAEQ,mBAAXlmE,SAAuBA,OAAS03D,aAAS13D,SAEpD,IAAK,IAAI07D,OAASx5E,KAAK05E,QAAS/gF,EAAI6gF,OAAO93E,OAAQk4E,UAAY,IAAI/wE,MAAMlQ,GAAIkiB,EAAI,EAAGA,EAAIliB,IAAKkiB,EAC3F,IAAK,IAAiFiU,KAAM+qD,QAAnF57B,MAAQu7B,OAAO3+D,GAAI7gB,EAAIikD,MAAMv8C,OAAQo4E,SAAWF,UAAU/+D,GAAK,IAAIhS,MAAM7O,GAAmBzB,EAAI,EAAGA,EAAIyB,IAAKzB,GAC9Gu2B,KAAOmvB,MAAM1lD,MAAQshF,QAAU/7D,OAAOplB,KAAKo2B,KAAMA,KAAKmnD,SAAU19E,EAAG0lD,UAClE,aAAcnvB,OAAM+qD,QAAQ5D,SAAWnnD,KAAKmnD,UAChD6D,SAASvhF,GAAKshF,QACdiK,oBAAShK,SAASvhF,GAAIO,KAAMg+B,GAAIv+B,EAAGuhF,SAAU1gF,aAAI01B,KAAMgI,MAK7D,OAAO,IAAIstD,WAAWxK,UAAW55E,KAAK25E,SAAU7gF,KAAMg+B,KDsBtDi6B,UEtCa,SAASjzC,QACtB,IAAIhlB,KAAOkH,KAAKqkF,MACZvtD,GAAK92B,KAAKgkF,IAEQ,mBAAXlmE,SAAuBA,OAAS43D,YAAY53D,SAEvD,IAAK,IAAI07D,OAASx5E,KAAK05E,QAAS/gF,EAAI6gF,OAAO93E,OAAQk4E,aAAgBH,WAAc5+D,EAAI,EAAGA,EAAIliB,IAAKkiB,EAC/F,IAAK,IAAyCiU,KAArCmvB,MAAQu7B,OAAO3+D,GAAI7gB,EAAIikD,MAAMv8C,OAAcnJ,EAAI,EAAGA,EAAIyB,IAAKzB,EAClE,GAAIu2B,KAAOmvB,MAAM1lD,GAAI,CACnB,IAAK,IAA2DioB,MAAvDuV,SAAWjY,OAAOplB,KAAKo2B,KAAMA,KAAKmnD,SAAU19E,EAAG0lD,OAAeumC,QAAUprF,aAAI01B,KAAMgI,IAAK4P,EAAI,EAAGluC,EAAIu9B,SAASr0B,OAAQglC,EAAIluC,IAAKkuC,GAC/HlmB,MAAQuV,SAAS2Q,KACnBo9C,oBAAStjE,MAAO1nB,KAAMg+B,GAAI4P,EAAG3Q,SAAUyuD,SAG3C5K,UAAU1zE,KAAK6vB,UACf0jD,QAAQvzE,KAAK4oB,MAKnB,OAAO,IAAIs1D,WAAWxK,UAAWH,QAAS3gF,KAAMg+B,KFmBhD9jB,OGxCa,SAAS3K,OACD,mBAAVA,QAAsBA,MAAQutE,QAAQvtE,QAEjD,IAAK,IAAImxE,OAASx5E,KAAK05E,QAAS/gF,EAAI6gF,OAAO93E,OAAQk4E,UAAY,IAAI/wE,MAAMlQ,GAAIkiB,EAAI,EAAGA,EAAIliB,IAAKkiB,EAC3F,IAAK,IAAuEiU,KAAnEmvB,MAAQu7B,OAAO3+D,GAAI7gB,EAAIikD,MAAMv8C,OAAQo4E,SAAWF,UAAU/+D,MAAetiB,EAAI,EAAGA,EAAIyB,IAAKzB,GAC3Fu2B,KAAOmvB,MAAM1lD,KAAO8P,MAAM3P,KAAKo2B,KAAMA,KAAKmnD,SAAU19E,EAAG0lD,QAC1D67B,SAAS5zE,KAAK4oB,MAKpB,OAAO,IAAIs1D,WAAWxK,UAAW55E,KAAK25E,SAAU35E,KAAKqkF,MAAOrkF,KAAKgkF,MH8BjEn6E,MI1Ca,SAAS2nD,YACtB,GAAIA,WAAWwyB,MAAQhkF,KAAKgkF,IAAK,MAAM,IAAI/0E,MAE3C,IAAK,IAAIqrE,QAAUt6E,KAAK05E,QAASa,QAAU/oB,WAAWkoB,QAASc,GAAKF,QAAQ54E,OAAQ6xC,GAAKgnC,QAAQ74E,OAAQ/I,EAAIkL,KAAK2P,IAAIgnE,GAAIjnC,IAAKknC,OAAS,IAAI5xE,MAAM2xE,IAAK3/D,EAAI,EAAGA,EAAIliB,IAAKkiB,EACrK,IAAK,IAAmGiU,KAA/F4rD,OAASJ,QAAQz/D,GAAI8/D,OAASJ,QAAQ1/D,GAAI7gB,EAAI0gF,OAAOh5E,OAAQmI,MAAQ4wE,OAAO5/D,GAAK,IAAIhS,MAAM7O,GAAUzB,EAAI,EAAGA,EAAIyB,IAAKzB,GACxHu2B,KAAO4rD,OAAOniF,IAAMoiF,OAAOpiF,MAC7BsR,MAAMtR,GAAKu2B,MAKjB,KAAOjU,EAAI2/D,KAAM3/D,EACf4/D,OAAO5/D,GAAKy/D,QAAQz/D,GAGtB,OAAO,IAAIupE,WAAW3J,OAAQz6E,KAAK25E,SAAU35E,KAAKqkF,MAAOrkF,KAAKgkF,MJ4B9DlzB,UHzCa,WACb,OAAO,IAAIiV,+BAAU/lE,KAAK05E,QAAS15E,KAAK25E,WGyCxCnoB,WK3Ca,WAKb,IAJA,IAAI14D,KAAOkH,KAAKqkF,MACZI,IAAMzkF,KAAKgkF,IACXU,IAAMJ,QAED9K,OAASx5E,KAAK05E,QAAS/gF,EAAI6gF,OAAO93E,OAAQmZ,EAAI,EAAGA,EAAIliB,IAAKkiB,EACjE,IAAK,IAAyCiU,KAArCmvB,MAAQu7B,OAAO3+D,GAAI7gB,EAAIikD,MAAMv8C,OAAcnJ,EAAI,EAAGA,EAAIyB,IAAKzB,EAClE,GAAIu2B,KAAOmvB,MAAM1lD,GAAI,CACnB,IAAIisF,QAAUprF,aAAI01B,KAAM21D,KACxBX,oBAASh1D,KAAMh2B,KAAM4rF,IAAKnsF,EAAG0lD,OAC3B0L,KAAM66B,QAAQ76B,KAAO66B,QAAQvC,MAAQuC,QAAQZ,SAC7C3B,MAAO,EACP2B,SAAUY,QAAQZ,SAClBC,KAAMW,QAAQX,OAMtB,OAAO,IAAIO,WAAW5K,OAAQx5E,KAAK25E,SAAU7gF,KAAM4rF,MLyBnDhsF,KAAM6rF,oBAAoB7rF,KAC1By4B,MAAOozD,oBAAoBpzD,MAC3BrC,KAAMy1D,oBAAoBz1D,KAC1B4J,KAAM6rD,oBAAoB7rD,KAC1BgN,MAAO6+C,oBAAoB7+C,MAC3BH,KAAMg/C,oBAAoBh/C,KAC1BmmC,GM5Ba,SAAS5yE,KAAMw2E,UAC5B,IAAIx4C,GAAK92B,KAAKgkF,IAEd,OAAO5+E,UAAU1D,OAAS,EACpBtI,aAAI4G,KAAK8uB,OAAQgI,IAAI40C,GAAGA,GAAG5yE,MAC3BkH,KAAKulC,KApBb,SAASo/C,WAAW7tD,GAAIh+B,KAAMw2E,UAC5B,IAAIsV,IAAKC,IAAKC,IAThB,SAAS7mF,SAAMnF,MACb,OAAQA,KAAO,IAAIqf,OAAO7L,MAAM,SAASoR,MAAM,SAASjkB,GACtD,IAAIlB,EAAIkB,EAAEwM,QAAQ,KAElB,OADI1N,GAAK,IAAGkB,EAAIA,EAAEqhB,MAAM,EAAGviB,KACnBkB,GAAW,UAANA,IAKKwE,CAAMnF,MAAQs9B,KAAO3kB,aACzC,OAAO,WACL,IAAIqyE,SAAWgB,IAAI9kF,KAAM82B,IACrB40C,GAAKoY,SAASpY,GAKdA,KAAOkZ,MAAMC,KAAOD,IAAMlZ,IAAI1kC,QAAQ0kC,GAAG5yE,KAAMw2E,UAEnDwU,SAASpY,GAAKmZ,KASAF,CAAW7tD,GAAIh+B,KAAMw2E,YNwBrCje,KOiBa,SAASv4D,KAAMU,OAC5B,IAAIy7E,SAAW9J,cAAUryE,MAAOP,EAAiB,cAAb08E,SAA2B97B,wBAAuB6B,uBACtF,OAAOh7C,KAAK+kF,UAAUjsF,KAAuB,mBAAVU,OAC5By7E,SAAS/F,MAlBlB,SAASkM,oBAAenG,SAAUj6B,YAAaxhD,OAC7C,IAAIwrF,SACAC,SACAC,aACJ,OAAO,WACL,IAAIC,QAA+BC,QAAtBC,OAAS7rF,MAAMwG,MAC5B,GAAc,MAAVqlF,OAGJ,OAFAF,QAAUnlF,KAAK+6E,eAAe9F,SAASF,MAAOE,SAAS/F,WACvDkW,QAAUC,OAAS,IACU,KACvBF,UAAYH,UAAYI,UAAYH,SAAWC,cAC9CD,SAAWG,QAASF,aAAelqC,YAAYgqC,SAAWG,QAASE,SAL1CrlF,KAAKi7E,kBAAkBhG,SAASF,MAAOE,SAAS/F,SArBpF,SAASmM,kBAAaviF,KAAMkiD,YAAaxhD,OACvC,IAAIwrF,SACAC,SACAC,aACJ,OAAO,WACL,IAAIC,QAA+BC,QAAtBC,OAAS7rF,MAAMwG,MAC5B,GAAc,MAAVqlF,OAGJ,OAFAF,QAAUnlF,KAAKyxD,aAAa34D,UAC5BssF,QAAUC,OAAS,IACU,KACvBF,UAAYH,UAAYI,UAAYH,SAAWC,cAC9CD,SAAWG,QAASF,aAAelqC,YAAYgqC,SAAWG,QAASE,SAL1CrlF,KAAKm7E,gBAAgBriF,SA2BAm8E,SAAU18E,EAAGwrF,WAAW/jF,KAAM,QAAUlH,KAAMU,QACtF,MAATA,OAAiBy7E,SAAS/F,MAhElC,SAAS8L,kBAAa/F,UACpB,OAAO,WACLj1E,KAAKi7E,kBAAkBhG,SAASF,MAAOE,SAAS/F,SARpD,SAASgM,gBAAWpiF,MAClB,OAAO,WACLkH,KAAKm7E,gBAAgBriF,SAoE4Cm8E,WAC5DA,SAAS/F,MA/ClB,SAASoM,oBAAerG,SAAUj6B,YAAaqqC,QAC7C,IAAIL,SAEAE,aADAE,QAAUC,OAAS,GAEvB,OAAO,WACL,IAAIF,QAAUnlF,KAAK+6E,eAAe9F,SAASF,MAAOE,SAAS/F,OAC3D,OAAOiW,UAAYC,QAAU,KACvBD,UAAYH,SAAWE,aACvBA,aAAelqC,YAAYgqC,SAAWG,QAASE,UApBzD,SAAS9J,kBAAaziF,KAAMkiD,YAAaqqC,QACvC,IAAIL,SAEAE,aADAE,QAAUC,OAAS,GAEvB,OAAO,WACL,IAAIF,QAAUnlF,KAAKyxD,aAAa34D,MAChC,OAAOqsF,UAAYC,QAAU,KACvBD,UAAYH,SAAWE,aACvBA,aAAelqC,YAAYgqC,SAAWG,QAASE,WAmDApQ,SAAU18E,EAAGiB,SPrBpEurF,UQnBa,SAASjsF,KAAMU,OAC5B,IAAIM,IAAM,QAAUhB,KACpB,GAAIsM,UAAU1D,OAAS,EAAG,OAAQ5H,IAAMkG,KAAK0jF,MAAM5pF,OAASA,IAAIoS,OAChE,GAAa,MAAT1S,MAAe,OAAOwG,KAAK0jF,MAAM5pF,IAAK,MAC1C,GAAqB,mBAAVN,MAAsB,MAAM,IAAIyV,MAC3C,IAAIgmE,SAAW9J,cAAUryE,MACzB,OAAOkH,KAAK0jF,MAAM5pF,KAAMm7E,SAAS/F,MA5BnC,SAASoW,YAAYrQ,SAAUz7E,OAC7B,IAAI06C,GAAI7O,GACR,SAASq+C,QACP,IAAInrF,EAAIiB,MAAM+N,MAAMvH,KAAMoF,WAE1B,OADI7M,IAAM8sC,KAAI6O,IAAM7O,GAAK9sC,IAV7B,SAASgtF,kBAAkBtQ,SAAU18E,GACnC,OAAO,SAASkB,GACduG,KAAK8iC,eAAemyC,SAASF,MAAOE,SAAS/F,MAAO32E,EAAEkB,KAQvB8rF,CAAkBtQ,SAAU18E,IACpD27C,GAGT,OADAwvC,MAAMx3E,OAAS1S,MACRkqF,OAGT,SAASqB,UAAUjsF,KAAMU,OACvB,IAAI06C,GAAI7O,GACR,SAASq+C,QACP,IAAInrF,EAAIiB,MAAM+N,MAAMvH,KAAMoF,WAE1B,OADI7M,IAAM8sC,KAAI6O,IAAM7O,GAAK9sC,IA3B7B,SAASitF,gBAAgB1sF,KAAMP,GAC7B,OAAO,SAASkB,GACduG,KAAK+hC,aAAajpC,KAAMP,EAAEkB,KAyBK+rF,CAAgB1sF,KAAMP,IAC9C27C,GAGT,OADAwvC,MAAMx3E,OAAS1S,MACRkqF,QAS2DzO,SAAUz7E,SRc5Eu+B,MFYa,SAASj/B,KAAMU,MAAOgiF,UACnC,IAAIjjF,EAAqB,cAAhBO,MAAQ,IAAsBqgD,wBAAuB6B,uBAC9D,OAAgB,MAATxhD,MAAgBwG,KAClBylF,WAAW3sF,KAjElB,SAAS4sF,UAAU5sF,KAAMkiD,aACvB,IAAIgqC,SACAC,SACAC,aACJ,OAAO,WACL,IAAIC,QAAUptD,WAAM/3B,KAAMlH,MACtBssF,SAAWplF,KAAK+3B,MAAM2jD,eAAe5iF,MAAOi/B,WAAM/3B,KAAMlH,OAC5D,OAAOqsF,UAAYC,QAAU,KACvBD,UAAYH,UAAYI,UAAYH,SAAWC,aAC/CA,aAAelqC,YAAYgqC,SAAWG,QAASF,SAAWG,UAwD5CM,CAAU5sF,KAAMP,IACjCmzE,GAAG,aAAe5yE,KAAM2iF,kBAAY3iF,OACpB,mBAAVU,MAAuBwG,KAC7BylF,WAAW3sF,KArClB,SAAS6iF,oBAAc7iF,KAAMkiD,YAAaxhD,OACxC,IAAIwrF,SACAC,SACAC,aACJ,OAAO,WACL,IAAIC,QAAUptD,WAAM/3B,KAAMlH,MACtBusF,OAAS7rF,MAAMwG,MACfolF,QAAUC,OAAS,GAEvB,OADc,MAAVA,SAAoCrlF,KAAK+3B,MAAM2jD,eAAe5iF,MAA9CssF,QAAUC,OAA2CttD,WAAM/3B,KAAMlH,OAC9EqsF,UAAYC,QAAU,KACvBD,UAAYH,UAAYI,UAAYH,SAAWC,cAC9CD,SAAWG,QAASF,aAAelqC,YAAYgqC,SAAWG,QAASE,UA0BtD1J,CAAc7iF,KAAMP,EAAGwrF,WAAW/jF,KAAM,SAAWlH,KAAMU,SAC1E+rC,KAvBP,SAASogD,iBAAiB7uD,GAAIh+B,MAC5B,IAAI8rF,IAAKC,IAAKe,UAAwDpgD,OAA7C1rC,IAAM,SAAWhB,KAAM++E,MAAQ,OAAS/9E,IACjE,OAAO,WACL,IAAIgqF,SAAWryE,aAAIzR,KAAM82B,IACrB40C,GAAKoY,SAASpY,GACd4D,SAAkC,MAAvBwU,SAAStqF,MAAMM,KAAe0rC,SAAWA,OAASi2C,kBAAY3iF,YAASwU,EAKlFo+D,KAAOkZ,KAAOgB,YAActW,WAAWuV,KAAOD,IAAMlZ,IAAI1kC,QAAQ0kC,GAAGmM,MAAO+N,UAAYtW,UAE1FwU,SAASpY,GAAKmZ,KAWNc,CAAiB3lF,KAAKgkF,IAAKlrF,OACjCkH,KACCylF,WAAW3sF,KApDlB,SAAS+iF,oBAAc/iF,KAAMkiD,YAAaqqC,QACxC,IAAIL,SAEAE,aADAE,QAAUC,OAAS,GAEvB,OAAO,WACL,IAAIF,QAAUptD,WAAM/3B,KAAMlH,MAC1B,OAAOqsF,UAAYC,QAAU,KACvBD,UAAYH,SAAWE,aACvBA,aAAelqC,YAAYgqC,SAAWG,QAASE,SA4CjCxJ,CAAc/iF,KAAMP,EAAGiB,OAAQgiF,UAChD9P,GAAG,aAAe5yE,KAAM,OErB7B2sF,WSxCa,SAAS3sF,KAAMU,MAAOgiF,UACnC,IAAI1hF,IAAM,UAAYhB,MAAQ,IAC9B,GAAIsM,UAAU1D,OAAS,EAAG,OAAQ5H,IAAMkG,KAAK0jF,MAAM5pF,OAASA,IAAIoS,OAChE,GAAa,MAAT1S,MAAe,OAAOwG,KAAK0jF,MAAM5pF,IAAK,MAC1C,GAAqB,mBAAVN,MAAsB,MAAM,IAAIyV,MAC3C,OAAOjP,KAAK0jF,MAAM5pF,IAhBpB,SAAS2rF,WAAW3sF,KAAMU,MAAOgiF,UAC/B,IAAI/hF,EAAG4rC,GACP,SAASq+C,QACP,IAAInrF,EAAIiB,MAAM+N,MAAMvH,KAAMoF,WAE1B,OADI7M,IAAM8sC,KAAI5rC,GAAK4rC,GAAK9sC,IAV5B,SAASstF,iBAAiB/sF,KAAMP,EAAGijF,UACjC,OAAO,SAAS/hF,GACduG,KAAK+3B,MAAM6jD,YAAY9iF,KAAMP,EAAEkB,GAAI+hF,WAQLqK,CAAiB/sF,KAAMP,EAAGijF,WACjD/hF,EAGT,OADAiqF,MAAMx3E,OAAS1S,MACRkqF,MAQgB+B,CAAW3sF,KAAMU,MAAmB,MAAZgiF,SAAmB,GAAKA,YToCvEn7E,KD3Ca,SAAS7G,OACtB,OAAOwG,KAAK0jF,MAAM,OAAyB,mBAAVlqF,MARnC,SAAS6iF,kBAAa7iF,OACpB,OAAO,WACL,IAAI6rF,OAAS7rF,MAAMwG,MACnBA,KAAKo6B,YAAwB,MAAVirD,OAAiB,GAAKA,QAMrChJ,CAAa0H,WAAW/jF,KAAM,OAAQxG,QAf9C,SAAS8iF,kBAAa9iF,OACpB,OAAO,WACLwG,KAAKo6B,YAAc5gC,OAcf8iF,CAAsB,MAAT9iF,MAAgB,GAAKA,MAAQ,MCyChDgsC,OJnDa,WACb,OAAOxlC,KAAK0rE,GAAG,aATjB,SAASoa,eAAehvD,IACtB,OAAO,WACL,IAAIrR,OAASzlB,KAAKu/B,WAClB,IAAK,IAAIhnC,KAAKyH,KAAKwjF,aAAc,IAAKjrF,IAAMu+B,GAAI,OAC5CrR,QAAQA,OAAOH,YAAYtlB,OAKJ8lF,CAAe9lF,KAAKgkF,OImDjDN,MNTa,SAAS5qF,KAAMU,OAC5B,IAAIs9B,GAAK92B,KAAKgkF,IAId,GAFAlrF,MAAQ,GAEJsM,UAAU1D,OAAS,EAAG,CAExB,IADA,IACkCjI,EAD9BiqF,MAAQtqF,aAAI4G,KAAK8uB,OAAQgI,IAAI4sD,MACxBnrF,EAAI,EAAGyB,EAAI0pF,MAAMhiF,OAAWnJ,EAAIyB,IAAKzB,EAC5C,IAAKkB,EAAIiqF,MAAMnrF,IAAIO,OAASA,KAC1B,OAAOW,EAAED,MAGb,OAAO,KAGT,OAAOwG,KAAKulC,MAAe,MAAT/rC,MAhEpB,SAASusF,YAAYjvD,GAAIh+B,MACvB,IAAIktF,OAAQC,OACZ,OAAO,WACL,IAAInC,SAAWryE,aAAIzR,KAAM82B,IACrB4sD,MAAQI,SAASJ,MAKrB,GAAIA,QAAUsC,OAEZ,IAAK,IAAIztF,EAAI,EAAGyB,GADhBisF,OAASD,OAAStC,OACShiF,OAAQnJ,EAAIyB,IAAKzB,EAC1C,GAAI0tF,OAAO1tF,GAAGO,OAASA,KAAM,EAC3BmtF,OAASA,OAAOnrE,SACTxT,OAAO/O,EAAG,GACjB,MAKNurF,SAASJ,MAAQuC,SAIrB,SAASC,cAAcpvD,GAAIh+B,KAAMU,OAC/B,IAAIwsF,OAAQC,OACZ,GAAqB,mBAAVzsF,MAAsB,MAAM,IAAIyV,MAC3C,OAAO,WACL,IAAI60E,SAAWryE,aAAIzR,KAAM82B,IACrB4sD,MAAQI,SAASJ,MAKrB,GAAIA,QAAUsC,OAAQ,CACpBC,QAAUD,OAAStC,OAAO5oE,QAC1B,IAAK,IAAIrhB,GAAKX,KAAMA,KAAMU,MAAOA,OAAQjB,EAAI,EAAGyB,EAAIisF,OAAOvkF,OAAQnJ,EAAIyB,IAAKzB,EAC1E,GAAI0tF,OAAO1tF,GAAGO,OAASA,KAAM,CAC3BmtF,OAAO1tF,GAAKkB,EACZ,MAGAlB,IAAMyB,GAAGisF,OAAO//E,KAAKzM,GAG3BqqF,SAASJ,MAAQuC,UAmB4CnvD,GAAIh+B,KAAMU,SMLzEyoF,MU/Ca,SAASzoF,OACtB,IAAIs9B,GAAK92B,KAAKgkF,IAEd,OAAO5+E,UAAU1D,OACX1B,KAAKulC,MAAuB,mBAAV/rC,MAhB1B,SAAS2sF,cAAcrvD,GAAIt9B,OACzB,OAAO,WACL48B,KAAKp2B,KAAM82B,IAAImrD,OAASzoF,MAAM+N,MAAMvH,KAAMoF,aAI9C,SAASghF,cAActvD,GAAIt9B,OACzB,OAAOA,OAASA,MAAO,WACrB48B,KAAKp2B,KAAM82B,IAAImrD,MAAQzoF,SAUAs9B,GAAIt9B,QACvBJ,aAAI4G,KAAK8uB,OAAQgI,IAAImrD,OVyC3B2B,SWhDa,SAASpqF,OACtB,IAAIs9B,GAAK92B,KAAKgkF,IAEd,OAAO5+E,UAAU1D,OACX1B,KAAKulC,MAAuB,mBAAV/rC,MAhB1B,SAAS6sF,iBAAiBvvD,GAAIt9B,OAC5B,OAAO,WACLiY,aAAIzR,KAAM82B,IAAI8sD,UAAYpqF,MAAM+N,MAAMvH,KAAMoF,aAIhD,SAASkhF,iBAAiBxvD,GAAIt9B,OAC5B,OAAOA,OAASA,MAAO,WACrBiY,aAAIzR,KAAM82B,IAAI8sD,SAAWpqF,SAUCs9B,GAAIt9B,QAC1BJ,aAAI4G,KAAK8uB,OAAQgI,IAAI8sD,UX0C3BC,KYtDa,SAASrqF,OACtB,IAAIs9B,GAAK92B,KAAKgkF,IAEd,OAAO5+E,UAAU1D,OACX1B,KAAKulC,KAXb,SAASghD,aAAazvD,GAAIt9B,OACxB,GAAqB,mBAAVA,MAAsB,MAAM,IAAIyV,MAC3C,OAAO,WACLwC,aAAIzR,KAAM82B,IAAI+sD,KAAOrqF,OAQP+sF,CAAazvD,GAAIt9B,QAC3BJ,aAAI4G,KAAK8uB,OAAQgI,IAAI+sD,MZkD3Bp3E,Ia9Da,WACb,IAAIm4E,IAAKC,IAAKzrB,KAAOp5D,KAAM82B,GAAKsiC,KAAK4qB,IAAKtrD,KAAO0gC,KAAK1gC,OACtD,OAAO,IAAI8tD,QAAQ,SAASn+D,QAASo+D,QACnC,IAAIC,QAAUltF,MAAOitF,QACjBh6E,KAAOjT,MAAO,SAAAA,QAA4B,KAATk/B,MAAYrQ,YAEjD+wC,KAAK7zB,KAAK,WACR,IAAIu+C,SAAWryE,aAAIzR,KAAM82B,IACrB40C,GAAKoY,SAASpY,GAKdA,KAAOkZ,OACTC,KAAOD,IAAMlZ,IAAI1kC,QACb7mB,EAAEumE,OAAOxgF,KAAKwgF,QAClB7B,IAAI1kE,EAAEwmE,UAAUzgF,KAAKwgF,QACrB7B,IAAI1kE,EAAE1T,IAAIvG,KAAKuG,MAGjBq3E,SAASpY,GAAKmZ,UCjBpB,IAAI+B,eACFj9B,KAAM,KACNs4B,MAAO,EACP2B,SAAU,IACVC,KAAMgD,YAGR,SAASrC,mBAAQ11D,KAAMgI,IAErB,IADA,IAAIwsD,SACKA,OAASx0D,KAAK00D,iBAAmBF,OAASA,OAAOxsD,MACxD,KAAMhI,KAAOA,KAAKyQ,YAChB,OAAOqnD,cAAcj9B,KAAO+3B,MAAOkF,cAGvC,OAAOtD,OCfTxyB,cAAUz2D,UAAUssF,UCFL,SAAS7tF,MACtB,OAAOkH,KAAKulC,KAAK,YCDJ,SAASzW,KAAMh2B,MAC5B,IACIgrF,SACA3E,OAEA5mF,EAJAgrF,UAAYz0D,KAAK00D,aAGjB99C,OAAQ,EAGZ,GAAK69C,UAAL,CAIA,IAAKhrF,KAFLO,KAAe,MAARA,KAAe,KAAOA,KAAO,GAE1ByqF,WACHO,SAAWP,UAAUhrF,IAAIO,OAASA,MACvCqmF,OAAS2E,SAASH,MAAQX,UAAYc,SAASH,MAAQR,OACvDW,SAASH,MAAQP,MACjBU,SAAS9B,MAAM39C,OACfy/C,SAASpY,GAAGhzE,KAAKymF,OAAS,YAAc,SAAUrwD,KAAMA,KAAKmnD,SAAU6N,SAAS7hF,MAAO6hF,SAAS7lC,cACzFslC,UAAUhrF,IAL8BmtC,OAAQ,EAQrDA,cAAc5W,KAAK00D,cDlBrBmD,CAAU3mF,KAAMlH,SDCpBg4D,cAAUz2D,UAAUm3D,WDiBL,SAAS14D,MACtB,IAAIg+B,GACAwsD,OAEAxqF,gBAAgBsrF,YAClBttD,GAAKh+B,KAAKkrF,IAAKlrF,KAAOA,KAAKurF,QAE3BvtD,GAAKwtD,SAAUhB,OAASsD,eAAej9B,KAAO+3B,MAAO5oF,KAAe,MAARA,KAAe,KAAOA,KAAO,IAG3F,IAAK,IAAI0gF,OAASx5E,KAAK05E,QAAS/gF,EAAI6gF,OAAO93E,OAAQmZ,EAAI,EAAGA,EAAIliB,IAAKkiB,EACjE,IAAK,IAAyCiU,KAArCmvB,MAAQu7B,OAAO3+D,GAAI7gB,EAAIikD,MAAMv8C,OAAcnJ,EAAI,EAAGA,EAAIyB,IAAKzB,GAC9Du2B,KAAOmvB,MAAM1lD,KACfurF,oBAASh1D,KAAMh2B,KAAMg+B,GAAIv+B,EAAG0lD,MAAOqlC,QAAUkB,mBAAQ11D,KAAMgI,KAKjE,OAAO,IAAIstD,WAAW5K,OAAQx5E,KAAK25E,SAAU7gF,KAAMg+B,oTI7BrD,IAAMgwD,6BAAgB,SAAhBA,cAAgBC,SAAO,OAAIjpE,WAAOipE,UAUlCC,YAAc,SAAdA,YAAevhE,OAAQwhE,SAAUl8E,KAAMyqE,UAAoC,IAA1B0R,UAA0B9hF,UAAA1D,OAAA,QAAA4L,IAAAlI,UAAA,GAAAA,UAAA,MAAV+hF,MAAU/hF,UAAA1D,OAAA,EAAA0D,UAAA,QAAAkI,GACxEmY,kBAAkByhD,aAAezhD,kBAAkB2hE,cACpD3hE,OAASqhE,6BAAcrhE,SAG3B,IAMIzS,OANEq0E,YAAc7R,SAAWA,SAAS,GAAK,KACzC8R,aAAe,KACfC,eAAiB,KACjBR,QAAU,KACVS,SAAW,KACXC,SAAW,KAEXJ,YACoB,MAAhBA,aACAC,aAAe,KACfC,eAAiB/R,WAEjB8R,aAAe,QACfC,eAAiC,MAAhB/R,SAAS,GAAaA,SAAtB,IAAAn6D,OAAqCm6D,YAG1D+R,eAAiBN,SACjBj0E,QAAS,GAEb+zE,QAAUthE,OAAOsrC,UAAUw2B,gBAE3Bv0E,SAAW+zE,QAAUA,QAAQ/zE,OAAO,WAChC,OAAOhT,KAAKu/B,aAAe9Z,OAAOqJ,UAItC04D,UAFAT,QAAUA,QAAQh8E,KAAKA,KAAMo8E,QAEV/1B,QACMl+B,OAAO+zD,UAAY,OAC5CC,UAAU91B,OAASo2B,SAASjiD,KAAK,WAAqB,QAAAshC,KAAAzhE,UAAA1D,OAARgf,OAAQ,IAAA7X,MAAAg+D,MAAAC,KAAA,EAAAA,KAAAD,KAAAC,OAARpmD,OAAQomD,MAAA1hE,UAAA0hE,MAClDogB,UAAU91B,MAAV7pD,MAAA2/E,WAAgBJ,6BAAc9mF,OAArBqb,OAA+BqF,WAG5C+mE,SAAWD,SAAS39E,MAAMk9E,SAC1BG,UAAUvzD,QAAU8zD,SAASliD,KAAK,WAAqB,QAAAyhC,MAAA5hE,UAAA1D,OAARgf,OAAQ,IAAA7X,MAAAm+D,OAAAC,MAAA,EAAAA,MAAAD,MAAAC,QAARvmD,OAAQumD,OAAA7hE,UAAA6hE,OACnDigB,UAAUvzD,OAAVpsB,MAAA2/E,WAAiBJ,6BAAc9mF,OAAtBqb,OAAgCqF,WAExB,UAAjB4mE,aACAG,SAASxL,QAAwB,MAAhBoL,YAAsB7R,SAAS9xE,UAAU,EAAG8xE,SAAS9zE,QAAU8zE,UAAU,GAClE,OAAjB8R,cACPG,SAASp2B,KAAK,KAAMmkB,SAAS9xE,UAAU,EAAG8xE,SAAS9zE,SAEvD,IAAMgmF,QAAUX,QAAQ71B,OASxB,OAPIg2B,UAAUh2B,KACVw2B,QAAQniD,KAAK,WAAqB,QAAAwpC,MAAA3pE,UAAA1D,OAARgf,OAAQ,IAAA7X,MAAAkmE,OAAAC,MAAA,EAAAA,MAAAD,MAAAC,QAARtuD,OAAQsuD,OAAA5pE,UAAA4pE,OAC9BkY,UAAUh2B,KAAV3pD,MAAA2/E,WAAeJ,6BAAc9mF,OAApBqb,OAA8BqF,WAG3CgnE,QAAQliD,SAELiiD,UASLE,WAAa,SAAbA,WAActgE,KAAMgb,UAItB,OAHAppC,OAAOub,QAAQ6tB,UAAUv5B,QAAQ,SAACjQ,GAC9BwuB,KAAK0Q,MAAMl/B,EAAE,GAAIA,EAAE,aAEhBwuB,MAiBLugE,gBAAkB,SAAlBA,gBAAmBb,QAASc,OAC9B,IAAK,IAAM/tF,OAAO+tF,WACPvtF,eAAe5B,KAAKmvF,MAAO/tF,MAC9BitF,QAAQ11B,KAAKv3D,IAAK+tF,MAAM/tF,OAY9BguF,wBAAW,SAAXA,SAAYf,QAASc,MAAO3oD,WAO9B,OANM6nD,mBAAmBj2B,gBACrBi2B,QAAUD,6BAAcC,eAEdz5E,IAAd4xB,UAA0B6nD,QAAQh2B,UAAR,IAAA11C,OAAsB6jB,YAAaqG,KAAK,WAC9DqiD,gBAAgB9pE,WAAO9d,MAAO6nF,SAC7BD,gBAAgBb,QAASc,OACvBd,SAyCLgB,yBAAY,SAAZA,UAAahB,QAASiB,QAIxB,IAAK,IAAMluF,OAHLitF,mBAAmBj2B,gBACrBi2B,QAAUD,6BAAcC,UAEViB,YACP1tF,eAAe5B,KAAKsvF,OAAQluF,MAC/BitF,QAAQhvD,MAAMj+B,IAAKkuF,OAAOluF,MAGlC,OAAOitF,SAYLkB,8BAAiB,SAAjBA,eAAkBvnE,QACpB,IACI3V,KACA2iE,IAFE32C,UAAYjZ,WAAO4C,OAAOqW,WAKZ,iBADpBhsB,KAAO2V,OAAO3V,QAEVA,KAAOlC,MAAMkC,MAAM4xC,OAAO10C,IAAI,SAACpP,EAAGN,GAAJ,OAAUA,KAE5Cm1E,IAAM32C,UAAUg6B,UAAUrwC,OAAO80D,UAAUzqE,KAAKA,OAEhD2iE,IAAM32C,UAAUg6B,UAAUrwC,OAAO80D,UAAUxiE,OAAO,WAC9C,OAAOhT,KAAKu/B,aAAexI,UAAUjI,SACtC/jB,KAAK2V,OAAO3V,OAEYqmD,QAAQl+B,OAAOxS,OAAOwS,QAAQrpB,MAAM6jE,KAAKnoC,KAAK,SAAU1sC,EAAGN,GAClFmoB,OAAO6kB,KAAK1sC,EAAGilB,WAAO9d,MAAOzH,KAGlB84D,KAAK,QAAS3wC,OAAOwe,WAAa,IACjDwuC,IAAIxc,OAAO1rB,UA0CT0iD,8BAAiB,SAAjBA,iBACF,IAAMC,IAAMC,UAAW7gF,WAAX,EAAAnC,WACZ,OACI+2B,EAAGgsD,IAAI,GACP3kF,EAAG2kF,IAAI,KAeTE,wBAAW,SAAXA,WAAW,OAAMC,UAMjBC,yBAAY,SAAZA,YAAY,OAAMC,UAElBC,qCAAwB,SAAxBA,sBAAyBxqC,MAAOyqC,KAClC,IAAIC,OAEEC,gBACFC,eAAgB,GAEd3pD,UAA2B,iBAARwpD,IAAmBA,IAAOA,eAAe7/E,MAAQ6/E,IAAI3lF,KAAK,UAAOuK,EAGtFq7E,OADA1qC,MAAMnvB,iBAAkBo4C,YACfjpB,MAAM/qB,OAAO,OAAOqpD,KAPhB,KASJt+B,MAAM/qB,OAAO,QAAQ7yB,KATjB,KAYb6+B,UACAypD,OAAOt3B,KAAK,QAASnyB,WACC,WAAf4pD,sBAAOJ,cACPA,IAAI,gBACXnb,eAAeqb,eAAgBF,MAGnCC,OAAO5wD,MAAM6wD,gBACb,IAAMG,cAAgB5wF,OAAO8hD,iBAAiB0uC,OAAO75D,QAC/Ck6D,oBACFzvD,SAAUwvD,cAAcxvD,SACxBC,WAAYuvD,cAAcvvD,WAC1BC,WAAYsvD,cAActvD,WAC1BC,UAAWqvD,cAAcrvD,WAK7B,OAFAivD,OAAOnjD,SAEAwjD,oBAGLC,SAAW,SAAXA,WAAW,MAAM,iBAAkB3yD,SAASwjB,6HC1T5CovC,QACF,cACA,eACA,UACA,aACA,QACA,eACA,UACA,gBAaEC,eATF,SACA,OACA,QACA,OACA,gBACA,SACA,WAKSrgF,QAAQ,SAACsgF,aAClBF,OAAOpgF,QAAQ,SAAC+uE,OACZsR,WAAWjjF,KAAX,GAAAmV,OAAmB+tE,YAAnB,KAAA/tE,OAAkCw8D,YAI3BsR,+TClBf,IAAMx5D,2BAAW,SAAXA,SAAW05D,WAAS,OAAI,SAAAC,cAAY,OAAID,UAAUC,gBASlDC,OAAS,SAATA,OAAU9lE,OAAQrpB,UAAT,OAAsBnB,OAAOoB,UAAUC,eAAe5B,KAAK+qB,OAAQrpB,WClBnEovF,6BDkCX,SAAAA,mLAAeC,CAAAzpF,KAAAwpF,kBACXxpF,KAAK0pF,WAAaP,WAClBnpF,KAAK2pF,UAAY,IAAIv4E,IACrBpR,KAAK4pF,cACL5pF,KAAK6pF,eACL7pF,KAAK8pF,yBACL9pF,KAAK+pF,8TASL/pF,KAAK4pF,WAAa5pF,KAAK0pF,WAAW33E,OAAO,SAACC,IAAKlZ,MAE3C,OADAkZ,IAAIlZ,MAAQ62B,2BACL3d,SAEXhS,KAAKgqF,6DAWCx/D,WACN,OAAOxqB,KAAK2pF,UAAUvwF,IAAIoxB,6EAURA,WAAW,IAAA/V,MAAAzU,KAC7B,OAAO,IAAIwmF,QAAQ,SAACn+D,SAChB5T,MAAKm1E,WAAWp/D,WAAamF,2BAAStH,uEAU1B,IAAA1T,OAAA3U,KAChBA,KAAK0pF,WAAW5gF,QAAQ,SAAC0hB,WACrB,IAAMy/D,QAAUt1E,OAAKu1E,qBAAqB1/D,WAC1C7V,OAAKg1E,UAAUl4E,IAAI+Y,UAAWy/D,SEpFb,SAAhBE,cAAiBF,QAASz/D,UAAWkQ,SAC9CuvD,QAAQG,KAAK,WACT,IAAMC,IAAM3vD,QAAQwvD,qBAAqB1/D,WACzCkQ,QAAQivD,UAAUl4E,IAAI+Y,UAAW6/D,KACjCF,cAAcE,IAAK7/D,UAAWkQ,WFiF1ByvD,CAAcF,QAASz/D,UAAW7V,kEAezB6V,UAAW8+D,cACxBtpF,KAAK4pF,WAAWp/D,WAAW8+D,oDAYvBA,cAGJ,IAAMF,YAAcE,aAAagB,YAAchB,aAAaiB,OAAOvlE,YAAYslE,aAC/EhB,aAAagB,WAAalB,YAC1BppF,KAAKwqF,4BACLxqF,KAAKyqF,QAAQrB,YAAaE,sDAcrBF,YAAaE,cAClB,IAAMoB,MAAQpB,aAAalnE,OACrBoI,UAAS,GAAAnP,OAAM+tE,YAAN,KAAA/tE,OAAqBqvE,OAGpC1qF,KAAK2qF,gBAAgBngE,UAAW8+D,cAGhC,IAAMW,QAAUjqF,KAAK4qF,SAASpgE,WAE1BxqB,KAAK6pF,YAAYT,cACbppF,KAAK6pF,YAAYT,aAAasB,OAE9B1qF,KAAK6qF,uBAAuBzB,YAAasB,MAAOT,SAMpDjqF,KAAK8qF,cAAc1B,YAAasB,MAAOT,+EAYvBb,YAAasB,MAAOT,SACxC,IAAMz/D,UAAS,GAAAnP,OAAM+tE,YAAN,KAAA/tE,OAAqBqvE,OACpC1qF,KAAK6pF,YAAYT,aAAasB,OAAOT,SACrCjqF,KAAK+qF,oBAAoBvgE,yFASA,IAAApT,OAAApX,KACJ/G,OAAO6M,KAAK9F,KAAK8pF,uBACzBhhF,QAAQ,SAACsgF,aACHnwF,OAAO6M,KAAKsR,OAAK0yE,sBAAsBV,cAC/CtgF,QAAQ,SAAC4hF,OACZ,GAAItzE,OAAKyyE,YAAYT,cACbhyE,OAAKyyE,YAAYT,aAAasB,OAAQ,CAEtC,IAAMT,QAAU7yE,OAAK0yE,sBAAsBV,aAAasB,OAExDtzE,OAAKyzE,uBAAuBzB,YAAasB,MAAOT,gBAEzC7yE,OAAK0yE,sBAAsBV,aAAasB,gEAepDtB,YAAasB,MAAOT,SAC1BV,OAAOvpF,KAAK8pF,sBAAuBV,eACpCppF,KAAK8pF,sBAAsBV,iBAG1BG,OAAOvpF,KAAK8pF,sBAAsBV,aAAcsB,SACjD1qF,KAAK8pF,sBAAsBV,aAAasB,WAE5C1qF,KAAK8pF,sBAAsBV,aAAasB,OAAST,oDAS1B,IAAjBe,WAAiB5lF,UAAA1D,OAAA,QAAA4L,IAAAlI,UAAA,GAAAA,UAAA,MACvBpF,KAAK6pF,YAAcmB,WAGnBhrF,KAAKwqF,4FASYhgE,WAAW,IAAAkJ,OAAA1zB,KAC5BguB,WAAW,WACP0F,OAAKk2D,WAAWp/D,WAAamF,2BAC7B+D,OAAKi2D,UAAUl4E,IAAI+Y,UAAWkJ,OAAKw2D,qBAAqB1/D,aACzD,2BGhPL9d,sBAAoBrO,oBAAUqO,kBCLvBu+E,KAAO,OACPC,MAAQ,QACRC,cAAgB,gBAChBC,MAAQ,QACRC,UAAY,YACZC,UAAY,YACZC,YAAc,ICNrBC,oBAAsB,EACtBC,oBAAsB,EACtBC,eAAiB,EACjBC,oBAAsB,EACtBC,oBAAsB,uSCFbC,6BCkBX,SAAAA,aAAaC,YAAaC,uKAAWC,CAAAhsF,KAAA6rF,cACjC7rF,KAAK8rF,YAAcA,YACnB9rF,KAAKitB,KAAO6+D,YAAY/5E,OAAO,SAAC7J,IAAKpO,KAEjC,OADAoO,IAAIpO,KAAO4xF,eACJxjF,SAEXlI,KAAK+rF,UAAYA,UACjB/rF,KAAKisF,kBAAoBH,YAAYpqF,OACrC1B,KAAKksF,oBACLlsF,KAAKmsF,WAAY,kSAWhBC,KACDpsF,KAAKmsF,WAAY,EAEjB,IAAM16E,IAAMzR,KAAKitB,KAMjB,IAAK,IAAMnzB,OAJXsyF,IAAItjF,QAAQ,SAACvQ,GACTkZ,IAAIlZ,GAAKizF,sBAGK/5E,IACVA,IAAI3X,OAAS0xF,qBAAuB/5E,IAAI3X,OAAS6xF,sBACjDl6E,IAAI3X,KAAO2X,IAAI3X,KAAO,EAAI8xF,mBAAqBH,oBAGvD,OAAOzrF,2CAUHosF,KACJ,IAAM36E,IAAMzR,KAAKitB,KAMjB,OAJAm/D,IAAItjF,QAAQ,SAACvQ,GACTkZ,IAAIlZ,GAAKozF,sBAGN3rF,uDAYP,IAAMyR,IAAMzR,KAAKitB,KAGjB,IAAK,IAAMnzB,OAAO2X,IACdA,IAAI3X,KAAO2X,IAAI3X,OAAS0xF,oBAAsBG,oBAAsBl6E,IAAI3X,KAE5E,OAAOkG,qDAaP,IAAMyR,IAAMzR,KAAKitB,KAEjB,IAAK,IAAMnzB,OAAO2X,IACdA,IAAI3X,KAAO2X,IAAI3X,OAAS2xF,mBAAqBG,mBAAqBn6E,IAAI3X,KAE1E,OAAOkG,2CAWHosF,KACJpsF,KAAKmsF,WAAY,EAEjB,IAAM16E,IAAMzR,KAAKitB,KAKjB,IAAK,IAAMnzB,OAJXsyF,IAAItjF,QAAQ,SAACvQ,GACTkZ,IAAIlZ,GAAKkzF,qBAGKh6E,IACVA,IAAI3X,OAAS2xF,oBAAsBh6E,IAAI3X,OAAS8xF,qBAChDn6E,IAAI3X,KAAoB,IAAb2X,IAAI3X,KAAa0xF,oBAAsBG,qBAI1D,OAAO3rF,+CAIP,IAAMyR,IAAMzR,KAAKitB,KACX3G,QACF+lE,iBACAC,gBACAR,gBAGJ,IAAK,IAAMhyF,OAAO2X,IACVA,IAAI3X,KAAO,GACX2X,IAAI3X,OAAS6xF,qBAAuBrlE,OAAO+lE,SAAS,GAAGnmF,KAAKpM,KAC5D2X,IAAI3X,OAAS0xF,qBAAuBllE,OAAO+lE,SAAS,GAAGnmF,KAAKpM,MACrD2X,IAAI3X,KAAO,IAClB2X,IAAI3X,OAAS8xF,oBAAsBtlE,OAAOgmE,QAAQ,GAAGpmF,KAAKpM,KAC1D2X,IAAI3X,OAAS2xF,oBAAsBnlE,OAAOgmE,QAAQ,GAAGpmF,KAAKpM,MAE9DwsB,OAAOwlE,YAAY5lF,KAAKpM,KAQ5B,OALC,WAAY,WAAWgP,QAAQ,SAACzN,MAC7BirB,OAAOjrB,MAAQirB,OAAOjrB,MAAM4M,IAAI,SAAAxN,GAAC,OAAIA,EAAEwN,IAAIO,YAE/C8d,OAAOwlE,YAAcxlE,OAAOwlE,YAAY7jF,IAAIO,QAErC8d,2CAaJ8lE,KACH,IAAM36E,IAAMzR,KAAKitB,KACjB,GAAIm/D,IACAA,IAAItjF,QAAQ,SAACvQ,GACTkZ,IAAIlZ,GAAKmzF,qBAEV,CACH,IAAMa,UAAYvsF,KAAKksF,iBACvB,IAAK,IAAMpyF,OAAO2X,IACR3X,OAAOyyF,YACT96E,IAAI3X,KAAO4xF,gBAKvB,OADA1rF,KAAKmsF,WAAY,EACVnsF,uDAWP,IAAMyR,IAAMzR,KAAKitB,KACXu/D,UAEN,IAAK,IAAM1yF,OAAO2X,IACdA,IAAI3X,OAAS0xF,qBAAuBgB,OAAOtmF,KAAKpM,KAGpD,OAAO0yF,uEAWUA,QACjB,IAAM/6E,IAAMzR,KAAKitB,KACjB,OAAOu/D,OAAOx5E,OAAO,SAAAna,GAAC,OAAI4Y,IAAI5Y,KAAO2yF,qBAAuB/5E,IAAI5Y,KAAO8yF,oFAWvDc,WAChB,IAAMh7E,IAAMzR,KAAKitB,KACjB,OAAOw/D,UAAUz5E,OAAO,SAAAna,GAAC,OAAI4Y,IAAI5Y,KAAO4yF,oBAAsBh6E,IAAI5Y,KAAO+yF,uEAQzE,IAAMn6E,IAAMzR,KAAKitB,KACXy/D,aAEN,IAAK,IAAM5yF,OAAO2X,IACdA,IAAI3X,OAAS6xF,qBAAuBe,UAAUxmF,KAAKpM,KAEvD,OAAO4yF,0DAQP,IAAMj7E,IAAMzR,KAAKitB,KACXy/D,aAEN,IAAK,IAAM5yF,OAAO2X,IACdA,IAAI3X,OAAS8xF,oBAAsBc,UAAUxmF,KAAKpM,KAGtD,OAAO4yF,0DAUP,IAAMj7E,IAAMzR,KAAKitB,KACXw/D,aAEN,IAAK,IAAM3yF,OAAO2X,IACdA,IAAI3X,OAAS2xF,oBAAsBgB,UAAUvmF,KAAKpM,KAEtD,OAAO2yF,kEAUP,IAAMh7E,IAAMzR,KAAKitB,KACX6+D,eAEN,IAAK,IAAMhyF,OAAO2X,IACdq6E,YAAY5lF,KAAKpM,KAGrB,OAAOgyF,8EAIP,OAAO9rF,KAAKisF,8DAIZ,OAAOjsF,KAAKmsF,kDAQZ,IAAM16E,IAAMzR,KAAKitB,KAEjB,IAAK,IAAMnzB,OAAO2X,IACVA,IAAI3X,OAAS0xF,oBACb/5E,IAAI3X,KAAO2xF,mBACJh6E,IAAI3X,OAAS2xF,mBACpBh6E,IAAI3X,KAAO0xF,oBACJ/5E,IAAI3X,OAAS6xF,oBACpBl6E,IAAI3X,KAAO8xF,mBAEXn6E,IAAI3X,KAAO6xF,oBAInB,OAAO3rF,mfChUR,IAmCM2sF,6BAA+B,SAA/BA,6BAAgCjyD,QAAS3c,GAAI6uE,UACtD,IAAMC,YAAcnyD,QAAQmyD,cAC5B,IAAK,IAAM/yF,OAAO+yF,YACd,MAAOvyF,eAAe5B,KAAKm0F,YAAa/yF,KAAM,CAC1C,IAAIgzF,QAAS,EACT/uE,KAAkB,IAAZA,GAAGjkB,OACTgzF,QAAS,GAETA,SACAF,SAAWC,YAAY/yF,KAAKizF,SAAWF,YAAY/yF,KAAKkzF,aAM3DC,aAAe,SAAfA,aAAex7E,KAAG,OAAAy7E,yBAAQ,IAAI32E,OAAJ8E,OAAA6xE,yBAAYz7E,IAAI,IAAhBy7E,yBAAuBz7E,IAAI,QAe5D07E,eACFC,UAAWC,qBACXC,UAAWD,qBACXE,aAAcF,oBAA+BA,qBAC7CG,SAAUH,oBACVI,SAAUJ,oBACVK,YAAaL,mBAA8BA,oBAC3CM,aAaSC,WAAa,SAAbA,WAAcvyF,KAAMoW,IAAK7E,QAClC,IAAIuP,MAAQ,KACNsyD,kBAAoB7hE,OAAO6hE,kBAC3Bof,aAAejhF,OAAOihF,aAU5B,OATKjhF,OAAOkhF,gBAMDrf,oBACPtyD,MAAiB,gBAAT9gB,KAAyBozE,kBAAkB,GAAKA,kBAAkB,IALtEtyD,MADA0xE,aAAaE,WACL,KAhBW,SAAlBC,gBAAmB3yF,KAAM8gB,MAAO1K,KACzC,OAAI0K,MACOA,MAAM2B,OAAO,SAAClV,OAAQrQ,GAAT,OAChB40F,cAAc9xF,MAAMoiB,KAAK,SAAAwwE,WAAS,OAAIx8E,IAAIlZ,KAAO01F,cAC9CjwE,WAAW,IAGf,KAWSgwE,CAAgB3yF,KAAMuR,OAAOqQ,UAAWrQ,OAAOihF,aAAa5gE,OAMxE1G,KAAM9U,IACN/P,OAAQ+P,IAAI/P,OACZya,mjCC1Ea+xE,6BACjB,SAAAA,SAAaxzD,QAASyzD,QAAStB,YAAauB,2KAAoBC,CAAAruF,KAAAkuF,UAC5DluF,KAAK06B,QAAUA,QACf16B,KAAKsuF,0BACLtuF,KAAKuuF,gBACLvuF,KAAKwuF,mBACLxuF,KAAKyuF,UACDC,eACAC,aAEJ3uF,KAAK4uF,iBACL5uF,KAAK6uF,yBACL7uF,KAAK8uF,sBACL9uF,KAAK+uF,oBACDC,aAAc,SAAAA,eAAA,OAAM,IAExBhvF,KAAKivF,4BACLjvF,KAAKkvF,qBACLlvF,KAAKmvF,uBACLnvF,KAAKovF,WACLpvF,KAAKqvF,uBACLrvF,KAAKsvF,iBACLtvF,KAAKuvF,kBACLvvF,KAAKwvF,sBAELxvF,KAAKyvF,eAAerB,oBACpBpuF,KAAK0vF,2BAA2BvB,QAAQO,aACxC1uF,KAAK2vF,oBAAoB9C,aACzB7sF,KAAK4vF,+BAA+BzB,QAAQ0B,wBAC5C7vF,KAAK8vF,wBAAwB3B,QAAQQ,+RAIrC,OAAIvpF,UAAO1D,QACP1B,KAAKovF,QAAU7hB,eAAevtE,KAAKovF,QAANhqF,UAAA1D,QAAA,OAAA4L,EAAAlI,UAAA,IACtBpF,MAEJA,KAAKovF,8DAGAW,cACZ,IAAM3B,mBAAqBpuF,KAAKqvF,oBAChC,IAAK,IAAMv1F,OAAOi2F,aACd,MAAOz1F,eAAe5B,KAAKq3F,aAAcj2F,KAAM,CAC3C,IAAM+yF,YAAckD,aAAaj2F,SAC7Bk2F,uBAAwB,EACxBC,iBAAW,EACXziE,eAAeq/D,cACfoD,YAAcpD,YAAYqD,QAC1BF,sBAAwBnD,YAAYmD,uBAEpCC,YAAcpD,aAEjBuB,mBAAmBt0F,OAASs0F,mBAAmBt0F,SAChDkG,KAAKqvF,oBAAoBv1F,KAAzBq2F,2BAAoC,IAAI55E,IAAIy5E,sBAAwBC,eAAH50E,OAAA80E,2BACzD/B,mBAAmBt0F,MADsCq2F,2BAC7BF,gBAG5C,OAAOjwF,mFAGiBmuF,SACxB,IAAMiC,WD3E8B,SAA/BC,6BAAgC31D,QAASyzD,SAClD,IAAMmC,0BAMN,OAJAnC,QAAUA,mBAAmBtlF,MAAQslF,QAAUl1F,OAAOskB,OAAO4wE,UACrDrlF,QAAQ,SAACynF,QACbD,uBAAuBC,OAAOjG,cAAgB,IAAIiG,OAAO71D,WAEtD41D,uBCoEgBD,CAA6BrwF,KAAMmuF,SAGtD,OAFAnuF,KAAKwwF,qBAAqBJ,YAC1Bn3F,OAAO4T,OAAO7M,KAAKyuF,SAASC,YAAa0B,YAClCpwF,yEAIP,OAAOA,qEAGU6sF,aACjB,IAAK,IAAM/yF,OAAO+yF,YACd7sF,KAAKsuF,uBAAuBzB,YAAY/yF,KAAKwwF,cAAgBuC,YAAY/yF,KAG7E,OADAkG,KAAKywF,wBACEzwF,+DAGO6sF,YAAagB,aAAc3jE,SAAS,IAAAzV,MAAAzU,KAC5C0wF,gBAAkB1wF,KAAK6sF,cACvB8D,cAAgB3wF,KAAKuvF,eACrBqB,kBAAoB5wF,KAAKwvF,mBA6B/B,OA5BA3C,YAAY/jF,QAAQ,SAAC+nF,YACjB,IAAIlqF,QACA7N,KACEo3F,QAAUW,WAAWX,QACrBE,WAAaS,WAAWT,WACxBU,YDIO,SAAZC,UAAar2D,QAAS01D,YAC/B,IAAIU,eACEruE,QACF8qE,YAAa,KACbG,WAAY,MAqBhB,OAnBA0C,WAAWtnF,QAAQ,SAACkoF,WAChB,IAAMC,aAAev2D,QAAQ40D,cAAc0B,WACvCC,eACAH,YAAc73F,OAAO4T,OAAOikF,YAAajzE,MAAMozE,gBAC9C,cAAe,cAAcnoF,QAAQ,SAACzN,MACnC,IAAM8gB,MAAQ80E,aAAa51F,MAAM8gB,MAC7B+0E,cAAgBzuE,OAAOpnB,MAKvB61F,cAJCA,cAEM,GAAA71E,OAAGc,MAAM0P,YAAY5jB,IAAI,SAAApP,GAAC,OAAIA,EAAEC,OAAMyX,UAAtC,GAAA8K,OACJ61E,cAAcrlE,YAAY5jB,IAAI,SAAApP,GAAC,OAAIA,EAAEC,OAAMyX,QAC9BkS,OAAOpnB,MAAQ8gB,MAAM3G,MAAM07E,eAE3B/0E,MALAsG,OAAOpnB,MAAQ8gB,MAOnC20E,YAAYz1F,MAAM8gB,MAAQ+0E,mBAI/BJ,YC7BqBC,CAAUt8E,MAAM27E,YACpCF,QAAQpnF,QAAQ,SAACqoF,QACS,WAAlBC,gBAAOD,SACPr4F,KAAOq4F,OAAOr4F,KACd6N,QAAUwqF,OAAOxqF,SAEjB7N,KAAOq4F,OAGX,IAAME,mBAAqBX,gBAAgB53F,MACvCu4F,mBAAmBC,eACdD,mBAAmBrsE,YAAYusE,WAChCt4F,OAAOskB,OAAOozE,eAAelzE,KAAK,SAAA5kB,GAAC,OAAIA,EAAEoxB,kBACzC2mE,kBAAiB,GAAAv1E,OAAIviB,KAAJ,KAAAuiB,OAAY+0E,WAAWrtF,UACpCjK,UACA4nB,QAASowE,YAAa5mE,QAASvjB,UAGnC8N,MAAK+8E,mBAAmB14F,KAAMg4F,YAAa5mE,QAASvjB,cAK7D3G,mEAGSlH,KAAM+0F,aAAc3jE,SAAuB,IAAdvjB,QAAcvB,UAAA1D,OAAA,QAAA4L,IAAAlI,UAAA,GAAAA,UAAA,MACrDsrF,gBAAkB1wF,KAAK6sF,cACvBgE,WAAaH,gBAAgB53F,MAC/Bk0F,SAAU,EACVrmF,QAAQqM,QAAUrM,QAAQqM,OAAO69E,cACjC7D,SAAU,IAEbA,SAAW0D,gBAAgB53F,MAAMyO,MAAMsmF,aAAc3jE,QAASvjB,iGAGlCsB,KAE7B,OADAjI,KAAKivF,yBAA2Bh2F,OAAO4T,OAAO7M,KAAKivF,yBAA0BhnF,SACtEjI,iEAGQgxF,UAAW9mE,SAA+B,IAAtBunE,gBAAsBrsF,UAAA1D,OAAA,QAAA4L,IAAAlI,UAAA,GAAAA,UAAA,MACnDssF,eAA0CpkF,IAA9BmkF,gBAAgBC,WAA0BD,gBAAgBC,UAEtEtvE,OADqBpiB,KAAKyuF,SAASC,YACPsC,WAE5BnE,YDzDgB,SAAjB8E,eAAkBX,UAAW5C,oBACtC,IAAMvB,eACN,IAAK,IAAM/yF,OAAOs0F,mBAAoB,CAClC,IAAMgC,WAAat2F,IAAIwS,MAAM,KACf8jF,WAAW3yE,KAAK,SAAA5kB,GAAC,OAAIA,IAAMm4F,aAErCnE,YAAY3mF,MACRgqF,QAAS9B,mBAAmBt0F,KAC5Bs2F,wBAIZ,OAAOvD,YC6CiB8E,CAAeX,UADRhxF,KAAKqvF,qBAIhC,GAFArvF,KAAKwuF,gBAAkBiD,gBAEnBrvE,OAAQ,CACR,IAAMyrE,aAAezrE,OAAOy6D,SAAS3yD,SAC/B0nE,wBAA0B5xF,KAAK6xF,2BAA2BhE,cAChE7tF,KAAKsvF,cAAc0B,WAAaY,wBAChC,IAAME,uBAAyB9xF,KAAK8xF,uBAAuBJ,WAK3D,GAHIA,WACA1xF,KAAK0xF,UAAUV,UAAW9mE,QAAS2jE,aAAazjE,KAAK,SAAAvxB,GAAC,OAAIA,EAAEk5F,qBAAqBlF,aAEjFiF,uBAAwB,CACxB,IAAME,sBAAwBhyF,KAAKiyF,yBAAyBpF,YAAa3iE,QAASunE,iBAClFzxF,KAAKkyF,iBAAiBF,sBAAuBJ,wBAAyB1nE,UAI9E,OAAOlqB,mFAGiB6tF,cACxB,OAAOA,aAAazjE,KAAK,SAAAvxB,GAAC,OAAKA,EAAEk5F,6FAIjC,OAAO,8FAGwBf,UAAWx3F,OAM1C,OALIA,iBAAiBsb,SACjB9U,KAAKkvF,kBAAkB8B,WAAax3F,MAEpCwG,KAAKkvF,kBAAkB8B,WAAa,kBAAMx3F,OAEvCwG,mGAGyB6wF,WAAYr3F,OACxCA,iBAAiBsb,SACjB9U,KAAK+uF,mBAAmB8B,YAAcr3F,MAEtCwG,KAAK+uF,mBAAmB8B,YAAc,kBAAMr3F,qDAKhD,OAAOwG,uDAIP,OAAIoF,UAAY1D,QACZ1B,KAAKuuF,aAALnpF,UAAA1D,QAAA,OAAA4L,EAAAlI,UAAA,GACOpF,MAEJA,KAAKuuF,yEAGGxwE,IAEf,OADA4uE,6BAA6B3sF,KAAM+d,IAAI,GAChC/d,mEAGS+d,IAEhB,OADA4uE,6BAA6B3sF,KAAM+d,IAAI,GAChC/d,qEAGUgxF,UAAWmB,gBAC5B,IAAMC,mBAAqBpyF,KAAKmvF,oBAChC,IAAK,IAAMr1F,OAAOs4F,mBACd,GAAIt4F,MAAQq4F,eAAgB,CACxB,IAAME,aAAeD,mBAAmBt4F,KACxCu4F,aAAajC,WAAaiC,aAAajC,WAAWp9E,OAAO,SAAAna,GAAC,OAAIA,IAAMm4F,YACpEhxF,KAAKsyF,uBAAuBx4F,KAIpC,OAAOkG,uEAGW6wF,WAAYG,WAC9B,IAAM5C,mBAAqBpuF,KAAKqvF,oBAEhC,OADAjB,mBAAmB4C,WAAa5C,mBAAmB4C,WAAWh+E,OAAO,SAAAna,GAAC,OAAKA,EAAEC,MAAQD,KAAOg4F,aACrF7wF,+EAGe6sF,aACtB,OAAOA,wFAGgB5vE,WAGvB,OAFAA,UAAUs1E,YAAY,eACtBt1E,UAAUyuD,GAAG,cAAe1rE,KAAKwyF,0BAC1BxyF,6EAGe,IAAA2U,OAAA3U,KACtB,OAAO,SAACyyF,WACJ,IAAMvoE,QAAUuoE,UAAUvoE,QACpB9H,OAAS8H,QAAQ9H,OAEvBzN,OAAK+9E,kBAAkBtwE,OAAQ8H,SAC3BwnE,WAAW,mEAKHiB,UAAWC,oBAC3B,IAAMxC,WAAawC,oBAAsB5yF,KAAKyuF,SAASC,YACjDb,aAAe7tF,KAAK4uF,cACpBiE,qBAAuB7yF,KAAK6uF,sBAElC,IAAK,IAAM/0F,OAAOs2F,gBACP91F,eAAe5B,KAAK03F,WAAYt2F,OACnC+zF,aAAa/zF,KAAO,IAAI+xF,kBAAa8G,WACrCE,qBAAqB/4F,KAAO,IAAI+xF,kBAAa8G,WAAW,IAKhE,OAFA3yF,KAAK6uF,sBAAwBgE,qBAC7B7yF,KAAK6tF,aAAaA,cACX7tF,yDAIP,OAAIoF,UAAa1D,QACb1B,KAAK4uF,cAALxpF,UAAA1D,QAAA,OAAA4L,EAAAlI,UAAA,GACOpF,MAEJA,KAAK4uF,oFAIZ,IAAMkE,sBAAwB9yF,KAAKsuF,uBAEnC,OADAtuF,KAAK6sF,YDxSwB,SAAxB4D,sBAAyB/1D,QAASmyD,aAC3C,IAAMkG,eAAiBr4D,QAAQ6zD,aACzB3hF,OAAS8tB,QAAQ9tB,SASvB,OARAigF,YAAcA,uBAAuBhkF,MAAQgkF,YAAc5zF,OAAOskB,OAAOsvE,cAC7D/jF,QAAQ,SAACkqF,YACjB,IAAM1I,WAAa0I,WAAW1I,aACxB+G,mBAAqB0B,eAAezI,YAC1CyI,eAAezI,YAAc+G,oBAAsB,IAAI2B,WAAWt4D,SAClE,IAAMu4D,eAAiBrmF,OAAO09E,YAC9B2I,gBAAkBF,eAAezI,YAAY19E,OAAOqmF,kBAEjDF,eC6RctC,CAAsBzwF,KAAM8yF,wBACtC9yF,6EAGcmuF,SACrB,IAAM+E,cDrR2B,SAA5BC,0BAA6Bz4D,QAASyzD,SAC/C,IAAMiF,mBAEN,IAAK,IAAMt6F,QAAQq1F,aACL7zF,eAAe5B,KAAKI,KAAMq1F,WAChCiF,gBAAgBt6F,MAAQq1F,QAAQr1F,MAAM4hC,UAG9C,OAAO04D,gBC6QmBD,CAA0BnzF,KAAMmuF,SAEtD,OADAl1F,OAAO4T,OAAO7M,KAAKyuF,SAASE,SAAUuE,eAC/BlzF,yDAiBIoiB,OAAQxZ,QAAwB,IAAhBsqB,OAAgB9tB,UAAA1D,OAAA,QAAA4L,IAAAlI,UAAA,IAAAA,UAAA,GACrCwtF,mBAAqB5yF,KAAKyuF,SAASC,YACzC,GAAI9lF,OAAOlH,OAAQ,CACf,GAAI0gB,SAAWmpE,YACX,IAAK,IAAMzxF,OAAO84F,mBACd5yF,KAAK8uF,mBAAmBh1F,MACpB8O,cACAsqB,oBAIRlzB,KAAK8uF,mBAAmB1sE,SACpBxZ,cACAsqB,eAGR,OAAOlzB,KAEX,OAAOA,KAAK8uF,yFAOQuE,WACpB,IAAMC,sBAAwBtzF,KAAKyuF,SAASE,SACtC1mF,IAAMjI,KAAKmvF,oBAEjB,IAAK,IAAM/sE,UAAUna,IACjB,OAAU3N,eAAe5B,KAAK0pB,OAAQna,MAAQma,UAAYixE,WAAajxE,QAAS,CAC5E,IAAIs5B,YAAM,EACJyzB,OAASlnE,IAAIma,QACnBs5B,OAASyzB,OAAOzzB,OAChB,IAAM0iC,MAAQjP,OAAOiP,MAChB1iC,SACDA,OAAS17C,KAAK06B,QAAQ64D,8BAEbtK,YAAuB,IAAV7K,YAA4B9wE,IAAV8wE,OAAuBA,QAC3Dp+E,KAAKwzF,wBAAwBF,sBAAsBlxE,QACvDs5B,OAAQyzB,OAAOihB,YAG3B,OAAOpwF,2FAGqBiI,KAE5B,OADAjI,KAAKmvF,oBAAsB5hB,eAAevtE,KAAKmvF,oBAAqBlnF,KAC7DjI,6EAWcoiB,OAAQqxE,QAASC,eAAe,IAAAt8E,OAAApX,KAiBrD,MAhByB,iBAAbyzF,UACRA,SAAWA,UAEfA,QAAQ3qF,QAAQ,SAAC4yC,QACb,IAAM3pB,MAAQ3a,OAAKsjB,QAAQ3I,QACrBZ,MAAQuqB,OAAO5sB,gBAAgBha,SAAW4mC,OAASorC,6BAAc/0D,OAAOg/B,UAAUrV,QACnFvqB,MAAMuU,UACHvU,iBAAiBtoB,MACjBsoB,MAAMroB,QAAQ,SAACgmB,MACX1M,OAAO0kE,6BAAch4D,MAAO4kE,iBAGhCtxE,OAAO+O,MAAOuiE,kBAInB1zF,mEAIP,OAAOA,KAAKwuF,oFAGO9xE,UAA+B,IAArB8E,eAAqBpc,UAAA1D,OAAA,QAAA4L,IAAAlI,UAAA,GAAAA,UAAA,MAC5Cs1B,QAAU16B,KAAK06B,QACf+zC,kBAAoBjtD,eAAezW,KAAOyW,eAAezW,KAC3D2vB,QAAQ8zC,4BAA4B9xD,SAAU,OAC5Ci3E,QAAUj5D,QAAQ9xB,SAASuzB,MAC3By3D,QAAUl5D,QAAQ9xB,SAASpF,MAC3BqwF,UAAYF,QAAQj2E,MAAM,SAAApS,OAAK,OAAIA,MAAMjQ,SAAW8D,yBAAUC,UAC9D00F,UAAYF,QAAQl2E,MAAM,SAAApS,OAAK,OAAIA,MAAMjQ,SAAW8D,yBAAUC,UACpE,OACI+c,MAAOsyD,kBACPloD,KAAmB,OAAb7J,SAAoB,KAAQ8E,eAAezW,KvG0vB9B,SAAzB6R,uBAA0BT,MAAOe,UAAW+K,UAAa,IAEvD5E,cAFuD0wE,mBAClC72E,UAAUC,UAA3BpS,KADmDgpF,mBACnDhpF,KAAMW,OAD6CqoF,mBAC7CroF,OAEd,GAAIA,OAAOhK,OAAQ,CACf,IAAMsyF,SAAW73E,MAAMkB,kBACvBgG,cAAgBlH,MAAM2B,OAAO,SAAClV,QAQ1B,OAPgBmC,KAAK0S,KAAK,SAAA1C,KAAG,OAAIrP,OAAOgS,MAAM,SAACC,UAAWzL,KACtD,QAAK+V,UAAetK,UAAU7kB,QAAQk7F,UAC9BA,SAASr2E,UAAU7kB,MAAM0kB,IAAIniB,OAAS8D,yBAAUC,UAGjD2b,IAAI7I,OAAStJ,OAAO+U,UAAU7kB,MAAM8kB,gBAI/CI,WAAW,SAGfqF,cAAgBnG,UAGpB,OAAOmG,cuG/wByDzG,CAAuB5c,KAAKi0F,cAChFzyE,eAAezW,KAAK,GAAI8oF,WAAaC,WAAW32E,UAAUoJ,KAAOkoD,kBAAkB,GAAGtxD,UAAUoJ,gEAI1FnE,QACd,IAAMR,SAAW5hB,KAAK06B,QAAQ5D,KAExBo9D,mBADiBl0F,KAAKwuF,qBACa5sE,SACrCuyE,2BAQJ,OAPID,oBAAsBtyE,WACtBuyE,yBAA2Bn0F,KAAK6uF,sBAAsBzsE,UAGtD8xE,mBACAC,wBAAwBjuF,KAAKlG,KAAK6tF,eAAezrE,SAE9C+xE,0EAIP,OAAOn0F,KAAK06B,QAAQ3vB,mDAIpB,OAAO/K,KAAKmsF,kEAYC6E,WACb,OAAOhxF,KAAKsvF,cAAc0B,0TC5bboD,oCACjB,SAAAA,iBAAaC,gKAAUC,CAAAt0F,KAAAo0F,kBACnBp0F,KAAKq0F,SAAWA,SAChBr0F,KAAKu0F,UAAW,8RAYVrqE,SAAS,IAAAzV,MAAAzU,KACT0c,SAAWwN,QAAQxN,SACnB23E,SAAWr0F,KAAKq0F,SAChB/J,WAAatqF,KAAKglB,YAAYslE,aAC9BkK,cAAgBH,SAASI,iBAAiBnK,YAJjCoK,sBAQX10F,KAAKq0F,SAASM,sBAAsBj4E,SAAU1c,KAAKq0F,SAASO,qBAFrDnmB,kBANIimB,sBAMXv4E,MACAoK,KAPWmuE,sBAOXnuE,KAOJ,OALsBiuE,cAAcvsF,IAAI,SAAC4lF,cAErC,OADAp5E,MAAKogF,gBAAgBtuE,KAAMsnE,cACpBp5E,MAAKqgF,gBAAgBjH,aAAcpf,kBAAmBvkD,qEAiBjE,OAAOlqB,6DAGM6tF,aAAcpf,kBAAmBvkD,SAAS,IAAA6qE,sBAKnDlH,aAAamH,UAHb3I,SAFmD0I,sBAEnD1I,SACAC,QAHmDyI,sBAGnDzI,QACAR,YAJmDiJ,sBAInDjJ,YAEEtqE,eAAiBxhB,KAAKq0F,SAASO,oBAC/B33E,UAAYjd,KAAKq0F,SAASJ,cAC1BgB,WACFC,qBAAsB1zE,eAAe0zE,qBACrCj4E,oBACAwxD,oCACAqf,gBAAiBtsE,eAAezW,KAChC8iF,2BAGJ,OACIxB,UAAWuB,WAAW,WAAYvB,SAAS,GAAI4I,WAC3CrH,WAAW,WAAYvB,SAAS,GAAI4I,YACxC3I,SAAUsB,WAAW,WAAYtB,QAAQ,GAAI2I,WACzCrH,WAAW,UAAWtB,QAAQ,GAAI2I,YACtC1H,YAAaK,WAAW,cAAeX,aAAaZ,UAAW4I,WAC/DvH,WAAYE,WAAW,aAAcX,aAAaX,SAAU2I,WAC5DnJ,YAAa8B,WAAW,WAAY9B,YAAamJ,WACjDC,qBAAsB1zE,eAAe0zE,qBACrCtsF,OF1BmB,SAAlBusF,gBAAmB3zE,gBAAkC,IAAlB9E,SAAkBtX,UAAA1D,OAAA,QAAA4L,IAAAlI,UAAA,GAAAA,UAAA,MACxD4d,kBAAoBxB,eAAewB,kBASzC,OAPIA,kBACeA,kBAAkB6I,YAAY5jB,IAAI,SAAApP,GAAC,OAAIA,EAAEC,OACjD4jB,oBAAoB7T,MACZ6T,SAAS,GAETzjB,OAAO6M,KAAK4W,cEkBfy4E,CAAgB3zE,eAAgB0I,QAAQxN,UAChDq1E,oBAA+C,IAA3BlE,aAAa9B,mDASrC/rF,KAAKu0F,UAAW,4CAIhBv0F,KAAKu0F,UAAW,gDAIhB,OAAOv0F,KAAKu0F,qDAZZ,OAAO,6qCCnFMa,mtBAA0BhB,iUAC1B5H,OAAQqB,cACrB,GAAe,OAAXrB,OACAqB,aAAawH,aACV,GAAI7I,OAAO9qF,OAAQ,CAEtB,IAAM4zF,eAAiB9I,OAAOx5E,OAAO,SAAAna,GAAC,OAAIg1F,aAAa5gE,KAAKp0B,KAAOw0F,qBACxDQ,aAAa5gE,KAAKp0B,KAAOw0F,sBACpCQ,aAAa0H,aAJS,IAKdlJ,SAAawB,aAAamH,UAA1B3I,SACRwB,aAAawH,MAAMpI,aAAaZ,WAChCwB,aAAap3E,IAAI+1E,QACjBqB,aAAal6D,OAAO2hE,qBAEpBzH,aAAaroD,OAAOqoD,aAAa2H,2CClBhCC,MAAQ,QACRC,UAAY,YACZC,QAAU,UACVC,OAAS,SACTC,OAAS,stCCDDC,+vBAA2BV,oUAExC,OAAOM,ysCCGMK,mtBAAuBX,oTAEpC,OAAOY,2sCCPMC,8tBAAwBb,wTAErC,OAAOQ,iDAIP,OAAO,gvCCLMM,ywBAA4B9B,yUAC5B5H,OAAQqB,cACrB,GAAe,OAAXrB,OACAqB,aAAawH,aACV,GAAI7I,OAAO9qF,OAAQ,CACtB,IAAM8f,eAAiBxhB,KAAKq0F,SAASO,oBAE/BU,eAAiB9I,OAAOx5E,OAAO,SAAAna,GAAC,OAAIg1F,aAAa5gE,KAAKp0B,KAAOw0F,qBAC5DQ,aAAa5gE,KAAKp0B,KAAOw0F,sBAChC,IAAiC,IAA7B7rE,eAAekwE,UAAqB,CACpC7D,aAAa0H,aADuB,IAE5BlJ,SAAawB,aAAamH,UAA1B3I,SACRwB,aAAawH,MAAMpI,aAAaZ,WAChCwB,aAAap3E,IAAI+1E,QACjBqB,aAAal6D,OAAO2hE,oBACjB,CAECA,eAAe5zF,QACfmsF,aAAa0H,aACb1H,aAAaroD,OAAO8vD,kBAEpBzH,aAAasI,cACbtI,aAAap3E,IAAI+1E,SAPlB,IASKF,QAAYuB,aAAamH,UAAzB1I,QACF8J,cAAgBnJ,aAAaX,SAC7B+J,iBAAmBxI,aAAa2H,iBAAiB9zF,OACnD00F,cAAc10F,SAAW20F,kBACzBxI,aAAawH,cAIrBxH,aAAaroD,OAAOqoD,aAAa2H,kBAGrC,OAAOx1F,guCCpCMs2F,guBAAwBJ,4TAErC,OAAOL,8BCgFAU,mBA9EwC,SAAtBA,oBAAuBC,WAAY5pF,OAAQwQ,cACxE,IAAMo5E,WAAWC,KAAKt6D,IAAKq6D,WAAWC,KAAKjzF,EACvC,OACIkZ,SAAU,MAIlB,IAAM+5E,KAAOD,WAAWC,KAClBC,MAAQD,KAAKt6D,EAAE,GACfw6D,MAAQF,KAAKjzF,EAAE,GACfozF,WAAaJ,WAAW5tF,OACxBiuF,OAASD,WAAWz6D,EAAE,GAAG26D,aAAa,GACtCC,OAASH,WAAWpzF,EAAE,GAAGszF,aAAa,GACtCE,WAAa55E,aAAay5E,QAAQr5E,IAAIzH,QACtCkhF,WAAa75E,aAAa25E,QAAQv5E,IAAIzH,QACtCgS,cACAmvE,MAAQtqF,OAAOuqF,SACfC,OAASxqF,OAAOwqF,OAEtB,GAAIF,MAAM/6D,IAAMi7D,OAAOj7D,GAAK+6D,MAAM1zF,IAAM4zF,OAAO5zF,EAC3C,OACIkZ,SAAU,MAIlB,IAAM26E,QAAUL,aAAe/3F,8BAAeC,WAAc+3F,aAAeh4F,8BAAeC,YACrF,IAAK,MAAQ,MAAS,KACrBwd,YACA46E,aAAeN,aAAep4F,gCAAiBC,YAC/C04F,aAAeN,aAAer4F,gCAAiBC,YAC/C24F,OAASd,MAAMhvD,aAAawvD,MAAM/6D,EAAGi7D,OAAOj7D,GAC5Cs7D,OAASd,MAAMjvD,aAAawvD,MAAM1zF,EAAG4zF,OAAO5zF,GAC5Ck0F,iBACFv7D,EAAG+6D,MAAM/6D,IAAMi7D,OAAOj7D,KAAUm7D,aAAeE,OAASA,OAAOjnF,KAAK,SAAC5V,EAAGyI,GAAJ,OAAUzI,EAAIyI,IAClFI,EAAG0zF,MAAM1zF,IAAM4zF,OAAO5zF,KAAU+zF,aAAeE,OAASA,OAAOlnF,KAAK,SAAC5V,EAAGyI,GAAJ,OAAUzI,EAAIyI,KAEhFu0F,YAEN,GAAuB,IAAnBN,QAAQ31F,QAGR,GAFAi2F,SAASd,QAAUa,gBAAgBv7D,EACnCw7D,SAASZ,QAAUW,gBAAgBl0F,EAC/BqzF,SAAWE,OAAQ,CACnB,IAAMa,KAAOF,gBAAgBv7D,EACvB07D,KAAOH,gBAAgBl0F,EACvBgQ,IAAMokF,KAAK,GAAKC,KAAK,GAAKA,KAAOD,KACjClkF,IAAMF,MAAQqkF,KAAOD,KAAOC,KAC9BrkF,IAAI,GAAKE,IAAI,GACbikF,SAASd,WAETc,SAASd,SAAWnjF,IAAI,GAAIF,IAAI,GAAKE,IAAI,GAAKF,IAAI,GAAKE,IAAI,IAE/DqU,WAAWoU,GAAK+6D,MAAM/6D,EAAGi7D,OAAOj7D,GAChCpU,WAAWvkB,GAAK0zF,MAAM1zF,EAAG4zF,OAAO5zF,SAGpCkZ,SAAS26E,QAAQ,IAAMK,gBAAgBL,QAAQ,QAE5B,MAAfA,QAAQ,IACRM,SAASd,QAAUn6E,SAASyf,EACxB66D,aAAep4F,gCAAiBC,cAChCkpB,WAAWoU,EAAKvvB,OAAOkrF,MAAQZ,MAAM/6D,IAAMi7D,OAAOj7D,EAAKu6D,MAAMqB,gBAAgBb,MAAM/6D,EAAGi7D,OAAOj7D,IACxF+6D,MAAM/6D,EAAGi7D,OAAOj7D,MAGzBw7D,SAASZ,QAAUr6E,SAASlZ,EACxByzF,aAAer4F,gCAAiBC,cAChCkpB,WAAWvkB,EAAKoJ,OAAOkrF,MAAQZ,MAAM1zF,IAAM4zF,OAAO5zF,EAAKmzF,MAAMoB,gBAAgBb,MAAM1zF,EAAG4zF,OAAO5zF,IACxF0zF,MAAM1zF,EAAG4zF,OAAO5zF,KAKjC,OACIkZ,SAAUi7E,SACV5vE,wBCpEKiwE,2BAAkB,SAAlBA,gBAAmBC,SAAU7H,WAAYiE,SAAUjW,OAC5D,IAEI8Z,WAGAC,WALAhB,YACAC,UAGEgB,OAAS7P,2BAEf0P,SAASv/F,KAAK0/F,SAAS1sB,GAAG,QAAS,WAC/B,IAAMmM,MAAQwQ,0BACd8O,UACIh7D,EAAG07C,MAAM17C,EACT34B,EAAGq0E,MAAMr0E,GAEb00F,WAAa7D,SAAS35D,QAAQ29D,oBAC9BF,YAAa,IAAIv4F,MAAO2K,YACzBmhE,GAAG,OAAQ,WACV,IAAMmM,MAAQwQ,0BAKd,GAJA+O,QACIj7D,EAAG07C,MAAM17C,EACT34B,EAAGq0E,MAAMr0E,KAET46E,OAASv6E,KAAKsnB,IAAIgsE,SAASh7D,EAAIi7D,OAAOj7D,IAAM,GAAhD,CAGAi7D,OAAOj7D,EAAIt4B,KAAK6P,IAAI,EAAG7P,KAAK2P,IAAI4jF,OAAOj7D,EAAG+7D,WAAWr+D,QACrDu9D,OAAO5zF,EAAIK,KAAK6P,IAAI,EAAG7P,KAAK2P,IAAI4jF,OAAO5zF,EAAG00F,WAAWp+D,SAErD,IAAM5P,QAAUqsE,mBAAoBlC,SAAS35D,QAAQ49D,iBACjDnB,kBACAC,eACD/C,SAAS35D,QAAQ3vB,OAAOsS,mBAC3B+yE,WAAWtnF,QAAQ,SAAAyvF,KAAG,OAAIlE,SAAS3B,kBAAkB6F,IAAKruE,cAC3DwhD,GAAG,MAAO,WACT,IAAMmM,MAAQwQ,0BACd+O,QACIj7D,EAAG07C,MAAM17C,EACT34B,EAAGq0E,MAAMr0E,GAEb,IAAMogF,UAAW,IAAIhkF,MAAO2K,UAAY4tF,WAExC,KAAI/Z,OAASwF,SAAW,KAAO//E,KAAKsnB,IAAIgsE,SAASh7D,EAAIi7D,OAAOj7D,IAAM,GAAlE,CAGAi7D,OAAOj7D,EAAIt4B,KAAK6P,IAAI,EAAG7P,KAAK2P,IAAI4jF,OAAOj7D,EAAG+7D,WAAWr+D,QACrDu9D,OAAO5zF,EAAIK,KAAK6P,IAAI,EAAG7P,KAAK2P,IAAI4jF,OAAO5zF,EAAG00F,WAAWp+D,SAErD,IAAM5P,QAAUqsE,mBAAoBlC,SAAS35D,QAAQ49D,iBACjDnB,kBACAC,cACAU,MAAM,GACPzD,SAAS35D,QAAQ3vB,OAAOsS,mBAC3B6M,QAAQsuE,SAAU,EAClBpI,WAAWtnF,QAAQ,SAAAyvF,KAAG,OAAIlE,SAAS3B,kBAAkB6F,IAAKruE,gBCvBnDuuE,eAjC0B,SAARA,MAAQpE,UAAQ,OAAI,SAAC4D,SAAU7H,YAC5D,IAAMsC,kBAAoB,SAApBA,kBAA8B1rF,MAChC,IAAM6wE,MAAQwQ,0BACR3tD,QAAU25D,SAAS35D,QAEnBhhC,KADcghC,QAAQ9tB,SAAS8rF,YAAYC,QACxBj/F,KACnByuF,IAAMD,8BAAextD,QAAQ29D,oBAAoBO,aAAc/gB,OAC/DghB,aAAen+D,QAAQo+D,gBAAgB3Q,IAAIhsD,EAAGgsD,IAAI3kF,GACpDu1F,aChBgB,iBDgBFr/F,MCfA,eDeyBA,KACvCqR,KAAM/D,KACN6wE,cAEE3tD,SACFxN,SAAUm8E,aAAeA,aAAa/hE,GAAK,KAC3CkiE,eAAgBH,aAAaG,eAC7Bt9C,OAAQm9C,aAAan9C,OACrBjb,SAAU0nD,IACVzuF,WAGJ02F,WAAWtnF,QAAQ,SAAAyvF,KAAG,OAAIlE,SAAS3B,kBAAkB6F,IAAKruE,WAC1D2tD,MAAM1iD,mBAGV8iE,SAASvsB,GAAG,YAAagnB,mBACRhnB,GAAG,YAAagnB,mBAChBhnB,GAAG,WAAY,WACZ0kB,WAAWtnF,QAAQ,SAAAyvF,KAAG,OAAIlE,SAAS3B,kBAAkB6F,KACjD77E,SAAU,aEnCzBu8E,iCAA2B,SAA3BA,yBAAqCjyF,KAAM6wE,MAAOwc,UAC3D,IAAM35D,QAAU25D,SAAS35D,QACnBytD,IAAMD,8BAAextD,QAAQ29D,oBAAoBO,aAAc/gB,MAAMqG,QAAUrG,MAAMqG,QAAQ,GAAKrG,OAClGghB,aAAen+D,QAAQo+D,gBAAgB3Q,IAAIhsD,EAAGgsD,IAAI3kF,GACpDuH,KAAM/D,KACN6wE,cAEJ,OACIn7D,SAAUm8E,aAAeA,aAAa/hE,GAAK,KAC3CkiE,eAAgBH,aAAaG,eAC7Bt9C,OAAQm9C,aAAan9C,OACrBjb,SAAU0nD,MCMH+Q,eAV0B,SAARA,MAAQ7E,UAAQ,OAAI,SAAC4D,SAAU7H,YAQ5D6H,SAASvsB,GAAG,QAPc,SAApBgnB,kBAA8B1rF,MAChC,IAAM6wE,MAAQwQ,0BACRn+D,QAAU+uE,iCAAyBjyF,KAAM6wE,MAAOwc,UACtDjE,WAAWtnF,QAAQ,SAAAyvF,KAAG,OAAIlE,SAAS3B,kBAAkB6F,IAAKruE,WAC1D2tD,MAAM1iD,kMCPP,IAAMi+D,iBAAe+F,wBAAAC,oBACvBC,KCAmC,SAAPpZ,KAAOoU,UAAQ,OAAI,SAAC4D,SAAU7H,YAC3D4H,2BAAgBC,SAAU7H,WAAYiE,aDFd8E,wBAAAC,iBAEvBC,MAAoBZ,gBAFGU,wBAAAC,iBAGvBC,MAAoBH,gBAHGC,wBAAAC,iBAIvBC,UEDoB,SAAZC,UAAYjF,UAAQ,OAAI,SAAC4D,SAAU7H,YAC5C,IAAIvY,MACA0hB,SAOJA,UAAW,EACX1hB,MAAQwQ,0BACR4P,SAASvsB,GAAG,aAAc,SAAC1kE,MACvB6wE,MAAQwQ,0BACRkR,UAAW,EACXvrE,WAAW,WACFurE,SAGDnJ,WAAWtnF,QAAQ,SAAAyvF,KAAG,OAAIlE,SAAS3B,kBAAkB6F,KACjD77E,SAAU,SAhBA,SAApBg2E,kBAA8B1rF,MAChC,IAAMkjB,QAAU+uE,iCAAyBjyF,KAAM6wE,MAAOwc,UACtDjE,WAAWtnF,QAAQ,SAAAyvF,KAAG,OAAIlE,SAAS3B,kBAAkB6F,IAAKruE,WAC1D2tD,MAAM1iD,kBAUEu9D,CAAkB1rF,OAMvB,OACJ0kE,GAAG,WAAY,WACd6tB,UAAW,OF3BSJ,wBAAAC,iBAKvBC,UGJoB,SAAZG,UAAYnF,UAAQ,OAAI,SAAC4D,SAAU7H,YAC5C4H,2BAAgBC,SAAU7H,WAAYiE,UAAU,MHFxB+E,kBIPfK,OACTC,aACInvB,aAAc,SAAAA,aAAArpE,KAAG,OAAIA,iTCAdy4F,mBCaX,SAAAA,kBAAatF,2KAAUuF,CAAA55F,KAAA25F,mBACnB35F,KAAKq0F,SAAWA,SAChBr0F,KAAKu0F,UAAW,EAChBv0F,KAAK65F,UAAY,UACjB75F,KAAKovF,WACLpvF,KAAKgkF,IAAM15E,cACXtK,KAAK85F,eACLjtB,sBAAsB7sE,KAAMy5F,OAC5Bz5F,KAAK4M,OAAO5M,KAAKglB,YAAYpF,6UAiD7B,OAAIxa,UAAO1D,QACP1B,KAAKovF,QAAU7hB,eAAevtE,KAAKovF,QAANhqF,UAAA1D,QAAA,OAAA4L,EAAAlI,UAAA,IACtBpF,MAEJA,KAAKovF,kDAKZ,OADApvF,KAAKu0F,UAAW,EACTv0F,6CAKP,OADAA,KAAKu0F,UAAW,EACTv0F,mDAIP,OAAOA,KAAKu0F,+CAyBZ,OAAOv0F,qDAWElH,KAAMilB,IAEf,OADA/d,KAAK85F,YAAYhhG,MAAQilB,GAClB/d,6DA/FP,yDAUA,MAAO,kDAIP,MAAO,gDAWP,OAAO,wuCChCM+5F,0vBAA4BJ,iUA2BtBloF,KAA0CrM,UAAA1D,OAAA,QAAA4L,IAAAlI,UAAA,IAAAA,UAAA,OAAxB40F,gBAAwB50F,UAAA1D,OAAA,EAAA0D,UAAA,QAAAkI,EAAP/F,MAAOnC,UAAA1D,OAAA,EAAA0D,UAAA,QAAAkI,EAI7D,OAHetN,KAAKq0F,SAAS35D,QAAQu/D,SAC9BnxF,QAAQ,SAAAoxF,OAAK,OAAmC,IAA/BA,MAAMttF,SAASutF,aACnCD,MAAME,sBAAsBJ,gBAAiBvoF,IAAI8U,KAAMhf,SACpDvH,6uCC7BMq6F,owBAA4BV,iTAY9B5iE,UAAWkwD,SAAUl8E,KAAMm0B,UAAWgoD,WACjD,OAAOF,YAAYjwD,UAAWkwD,SAAUl8E,KAAMm0B,UAAWgoD,mEAiBzD,OAAI9hF,UAAe1D,QACf1B,KAAKs6F,gBAALl1F,UAAA1D,QAAA,OAAA4L,EAAAlI,UAAA,GACOpF,MAEJA,KAAKs6F,sDAIZ,OAAOt6F,yCAIP,OAAOA,slBCpER,IA2GMu6F,wBAAmB,SAAnBA,iBAAoB7/D,QAAS8/D,gBAAiBC,SACvD,IAAM7tF,OAAS8tB,QAAQ9tB,SACjBsyB,UAAYtyB,OAAO8tF,aACnBC,YAAc/tF,OAAO+tF,YAC3B7T,6BAAc0T,iBAAiBzpC,UAA/B,IAAA11C,OAA6Cs/E,YAA7C,KAAAt/E,OAA4D6jB,YAC3CnH,MAAM,UAAW0iE,QAAU,QAAU,8vCCuB3CG,8uBAxHYP,4TAmChBxM,aAAc3jE,SACjB,IAAIiS,EACA34B,EACAq2B,MACAC,OACEltB,OAAS5M,KAAKovF,QACdyL,QAAUjuF,OAAOkuF,IACjBzG,SAAWr0F,KAAKq0F,SAChB6D,WAAal4F,KAAK+6F,iBAClBzmE,WAAa4jE,WAAWsC,gBACxBQ,UAAY9C,WAAWr+D,MACvBohE,WAAa/C,WAAWp+D,OACxB6gE,YAAc/tF,OAAO+tF,YACrBO,wBAA0BtuF,OAAO8tF,aAEvC,GAAyB,OAArBxwE,QAAQxN,SAER,OADA1c,KAAKm7F,KAAKjD,YACHl4F,KAGX,IAAMo7F,UAAY/G,SAAS35D,QAAQ49D,gBApBT+C,sBDlDS,SAA9BC,4BAA+BpxE,QAASusE,KAAMG,YACvD,IAAI92C,GACA2S,GACAF,GACAG,GACA8kC,OACAC,OACA8D,UACE7+E,SAAWwN,QAAQxN,SACnBqL,WAAamC,QAAQnC,eACrByzE,KAAOzzE,WAAWoU,EAClBs/D,KAAO1zE,WAAWvkB,EAExB,GAAiB,OAAbkZ,SACA,OAAO,KAGX,IAAMg6E,MAAQD,KAAKt6D,EAAE,GACfw6D,MAAQF,KAAKjzF,EAAE,GACfk4F,QAAuC,WAA7BhF,MAAM1xE,YAAY3pB,OAC5BsgG,QAAuC,WAA7BhF,MAAM3xE,YAAY3pB,OAC5Bw7F,OAAM,GAAAx7E,OAAMu7E,WAAWz6D,EAAE,IACzB46D,OAAM,GAAA17E,OAAMu7E,WAAWpzF,EAAE,IACzBo4F,UAAYl/E,SAASm6E,QACrBgF,UAAYn/E,SAASq6E,QAU3B,GARI6E,WAAaA,UAAU,aAAc/yF,OACrC2uF,OAASoE,UAAU,GACnBnE,OAASmE,UAAU,KAEnBpE,OAASoE,cACTnE,OAASoE,eAEbN,UAAYK,WAAaC,UAAY,OAAUD,UAAY,WAAa,aACpEpE,QAAUA,OAAO91F,OACjB,GAAkC,SAA7Bi1F,MAAM3xE,YAAY3pB,QAAqBqgG,QACxC57C,GAAK2S,QAAKnlD,EACViuF,UAAY,iBACT,CACH,IAEIO,MACAC,MAHEvlF,OAASkgF,MAAMlgF,SACfwlF,UAAyC,SAA7BtF,MAAM1xE,YAAY3pB,OAGpC,GAAI2gG,UAAW,CACX,IAAIC,cAAgBzlF,OAAOvQ,QAAQuxF,OAAO,IACtC0E,cAAgB1lF,OAAOvQ,QAAQuxF,OAAOA,OAAO91F,OAAS,IAF/Cy6F,OAAAC,sBAGuBH,cAAeC,eAAe3rF,KAAK,SAAC5V,EAAGyI,GAAJ,OAAUzI,EAAIyI,IAHxE,GAGV64F,cAHUE,OAAA,GAGKD,cAHLC,OAAA,GAIXL,MAAQtlF,OAAOylF,eACfF,MAAQvlF,OAAO0lF,oBAEfJ,MAAQtE,OAAO,GACfuE,MAAQvE,OAAOA,OAAO91F,OAAS,GAEnCo+C,GAAK42C,MAAM2F,cAAcP,OACzBrpC,GAAKikC,MAAM2F,cAAcN,OACzBtpC,IAAMupC,UAAYtF,MAAM4F,eAAiB,OAG7Cx8C,GAAK2S,QAAKnlD,EAEd,GAAImqF,QAAUA,OAAO/1F,OACjB,GAAkC,SAA7Bg1F,MAAM1xE,YAAY3pB,QAAqBsgG,QACxCppC,GAAKG,QAAKplD,EACViuF,UAAY,eACT,CACH,IAEIgB,MACAC,MAHEhmF,QAASmgF,MAAMngF,SAIrB,GAH+C,SAA7BmgF,MAAM3xE,YAAY3pB,OAGrB,CACX,IAAIohG,cAAgBjmF,QAAOvQ,QAAQwxF,OAAO,IACtCiF,cAAgBlmF,QAAOvQ,QAAQwxF,OAAOA,OAAO/1F,OAAS,IAF/Ci7F,OAAAP,sBAGuBK,cAAeC,eAAensF,KAAM,SAAC5V,EAAGyI,GAAJ,OAAUA,EAAIzI,IAHzE,GAGV8hG,cAHUE,OAAA,GAGKD,cAHLC,OAAA,GAIXJ,MAAQ/lF,QAAOimF,eACfD,MAAQhmF,QAAOkmF,oBAEfH,MAAQ9E,OAAO,GACf+E,MAAQ/E,OAAOA,OAAO/1F,OAAS,GAEnC6wD,GAAKokC,MAAM0F,cAAcE,OACzB7pC,GAAKikC,MAAM0F,cAAcG,OACzB9pC,IAAmC,SAA7BikC,MAAM3xE,YAAY3pB,OAAoBs7F,MAAM2F,eAAiB,OAGvE/pC,GAAKG,QAAKplD,EAGd,GAAKquF,SAAWD,UAAaxxE,QAAQsuE,QAAS,CAC1C,GAAIgD,KAAM,KAAAoB,MAAAR,qBACKZ,KADL,GACL17C,GADK88C,MAAA,GACDnqC,GADCmqC,MAAA,GAGV,GAAInB,KAAM,KAAAoB,MAAAT,qBACKX,KADL,GACLlpC,GADKsqC,MAAA,GACDnqC,GADCmqC,MAAA,IAKd,OACIC,WACIh9C,MACA2S,MACAF,MACAG,OAEJ6oC,qBChCiCD,CAA4BpxE,QAASkxE,UAAU3E,KAC5E2E,UAAUxyF,QADNk0F,UArBkBzB,sBAqBlByB,UAAWvB,UArBOF,sBAqBPE,UAEb/pC,WAAatnC,QAAQsuE,SAAW5rF,OAAO4kD,WAE3B,SAAd+pC,WAAsC,aAAdA,WACxBp/D,EAAIt4B,KAAK2P,IAAIspF,UAAUh9C,GAAIg9C,UAAUrqC,IACrC54B,MAAQh2B,KAAKsnB,IAAI2xE,UAAUrqC,GAAKqqC,UAAUh9C,MAE1C3jB,EAAI,EACJtC,MAAQmhE,WAEM,SAAdO,WAAsC,eAAdA,WACxB/3F,EAAIK,KAAK2P,IAAIspF,UAAUvqC,GAAIuqC,UAAUpqC,IACrC54B,OAASj2B,KAAKsnB,IAAI2xE,UAAUpqC,GAAKoqC,UAAUvqC,MAE3Cz4B,OAASmhE,WACTz3F,EAAI,GAERxD,KAAK+8F,KAAK7E,YAEV,IAAM1kB,SAEEr3C,IACA34B,IACAq2B,YACAC,gBAMF+2D,WAAa7wF,KACb8wD,UAHiBk2B,YAAYF,6BAAcxyD,YAAa,KAAM,GAAlC,IAAAjZ,OAC1Bs/E,YAD0B,KAAAt/E,OACX6/E,0BAEUnqC,UAAU,QAAQhmD,KAAKyoE,QAClDwb,aAAel+B,UAAUM,QAAQl+B,OAAO,QAC7BqS,KAAK,YCpGE,SAAnBy3D,iBAAmB3I,UAAQ,OAAI,SAAC4D,SAAU7H,YACnD,IAAIlR,QACAgZ,WACEx9D,QAAU25D,SAAS35D,QACnBuiE,OAAS,SAATA,OAAU/yE,SACZkmE,WAAWtnF,QAAQ,SAAAsZ,QAAM,OAAIiyE,SAAS3B,kBAAkBtwE,OAAQ8H,YAE9DkuE,OAAS7P,2BAEf0P,SAASv/F,KAAK0/F,SAAS1sB,GAAG,QAAS,WAC/B,IAAMmM,MAAQwQ,0BACd6P,WAAax9D,QAAQ29D,oBACrBnZ,QAAUrH,MAAMqH,UACjBxT,GAAG,OAAQ,WACV,IAAMmM,MAAQwQ,0BACdnJ,QAAQ/iD,GAAK07C,MAAM/jB,GACnBorB,QAAQ17E,GAAKq0E,MAAM9jB,GACnB,IAAMl6B,MAAQq+D,WAAWr+D,MACnBC,OAASo+D,WAAWp+D,OACpBqC,EAAIt4B,KAAK2P,IAAIqmB,MAAQqlD,QAAQrlD,MAAOh2B,KAAK6P,IAAIwrE,QAAQ/iD,EAAG,IACxD34B,EAAIK,KAAK2P,IAAIsmB,OAASolD,QAAQplD,OAAQj2B,KAAK6P,IAAIwrE,QAAQ17E,EAAG,IAC1DkvD,GAAKlvD,EAAI07E,QAAQplD,OACjB24B,GAAKt2B,EAAI+iD,QAAQrlD,MAEvB,GAAIsC,GAAK,GAAKs2B,IAAM54B,OAASr2B,GAAK,GAAKkvD,IAAM54B,OAAQ,CACjD,IAAM5P,QAAUqsE,mBAAoB77D,QAAQ49D,iBACxCnB,UACIh7D,IACA34B,KAEJ4zF,QACIj7D,EAAGs2B,GACHjvD,EAAGkvD,KAERh4B,QAAQ3vB,OAAOsS,mBAClB4/E,OAAO/yE,YAEZwhD,GAAG,MAAO,WACT,IAAM7xC,MAAQq+D,WAAWr+D,MACnBC,OAASo+D,WAAWp+D,OACpBqC,EAAIt4B,KAAK2P,IAAIqmB,MAAQqlD,QAAQrlD,MAAOh2B,KAAK6P,IAAIwrE,QAAQ/iD,EAAG,IACxD34B,EAAIK,KAAK2P,IAAIsmB,OAASolD,QAAQplD,OAAQj2B,KAAK6P,IAAIwrE,QAAQ17E,EAAG,IAC1DkvD,GAAKlvD,EAAI07E,QAAQplD,OACjB24B,GAAKt2B,EAAI+iD,QAAQrlD,MAEvB,GAAIsC,GAAK,GAAKs2B,IAAM54B,OAASr2B,GAAK,GAAKkvD,IAAM54B,OAAQ,CACjD,IAAM5P,QAAUqsE,mBAAoB77D,QAAQ49D,iBACxCnB,UACIh7D,IACA34B,KAEJ4zF,QACIj7D,EAAGs2B,GACHjvD,EAAGkvD,IAEPolC,MAAM,GACPp9D,QAAQ3vB,OAAOsS,mBAClB6M,QAAQsuE,SAAU,EAClByE,OAAO/yE,cD2CS8yE,CAAiB3I,SAAjB2I,CAA2BlW,6BAAc9mF,OAAQ,SAAU6wF,cAE9DhnF,MAAMinD,WACNvrB,KAAK,SAAUsiD,OACZ,IAAId,QAAUD,6BAAc9mF,MAE5B,IAAK,IAAMlG,OADX03D,aAAeu1B,QAAUA,QAAQv1B,aAAaoyB,SAASpyB,WAAWoyB,WAChDiE,WACPvtF,eAAe5B,KAAKmvF,MAAO/tF,MAC9By1E,aAAasY,MAAM/tF,OAASitF,QAAQ11B,KAAKv3D,IAAK+tF,MAAM/tF,QAK1EojG,aAAe9yB,sBAAsBywB,QAAQH,aAAc16F,KAAKgkF,IAAK2W,aAI3E,OAHA3L,aAAa/S,QAAQihB,aAAan6F,KAAK,MAAM,GAC7CisF,aAAa/S,QAAQ4e,QAAQ37D,WAAW,GAEjCl/B,uCAGLk4F,YACFqC,wBAAiBv6F,KAAMk4F,WAAWsC,iBAAiB,qCAGjDtC,YACFqC,wBAAiBv6F,KAAMk4F,WAAWsC,iBAAiB,2DA9GnD,OACIE,aAAc,sBACdx7D,UAAW,GACXy7D,Yb1Be,Oa2BfG,KACIJ,aAAc,gBACdx7D,UAAW,IAEfsyB,YACIoyB,SAAU,sDAMlB,MAAO,mCE7BFuZ,eACT18D,SAAU,WACV5G,MAAO,EACPC,OAAQ,GCVCla,8BACT+6E,YDHuB,OCIvBD,aAAc,cACd0C,mBAAoB,qBACpBl+D,UAAW,GACXnkB,KACIsiF,OAAQ,GAEZC,SACI5sC,QAAS,EACT6sC,kBAAmB,GACnBC,UAAW,EACXC,UAAW,SACXC,UAAW,UACXC,UAAW,MACXN,OAAQ,GACRO,UAAW,IACX1+D,UAAW,4BACX2+D,gBAAiB,oCAErBC,OACIplE,KAAM,GACNqlE,UAAU,EACVrD,aAAc,gBACdx7D,UAAW,GACXsT,MAAO,2BCxBFwrD,mBAAc,SAAdA,YAAe7tC,OAAQ8tC,IAAKC,YAAatxF,QAClD,IAAIuxF,SACIhiE,EAA8B+hE,YAA9B/hE,EAAG34B,EAA2B06F,YAA3B16F,EAAG46F,UAAwBF,YAAxBE,UAAWC,SAAaH,YAAbG,SAEnBC,WADgB1xF,OAAOkxF,MAAMC,SACA,EAAInxF,OAAOkxF,MAAMplE,KAEpD,GFLsB,SEKlBy3B,QFRmB,UEQMA,OAAwB,CACjD,IAAIlyD,MAAQ,EACR+kC,KAAOo7D,UAAY,EACjBG,WAAaN,IAAIz6F,EAAIy6F,IAAInkE,OACzB0kE,UAAYh7F,EAAI46F,UAElBH,IAAIz6F,EAAIA,GACRvF,MAAQggG,IAAIz6F,EAAIA,EAChBw/B,MAAQu7D,YAAcC,UAAaA,UAAYP,IAAIz6F,EAAKy6F,IAAInkE,QAAU,GAC/D0kE,UAAYD,aACnBv7D,KAAOn/B,KAAKsnB,IAAI3nB,GAAKy6F,IAAIz6F,EAAIy6F,IAAInkE,SAAW,GAEhDqkE,SAAWlgG,MAAQ+kC,KAAOs7D,WAAa,MACpC,CACH,IAAIrgG,OAAQ,EACR+kC,MAAOq7D,SAAW,EAChBI,UAAYR,IAAI9hE,EAAI8hE,IAAIpkE,MACxB6kE,SAAWviE,EAAIkiE,SAEjBJ,IAAI9hE,EAAIA,GACRl+B,OAAQggG,IAAI9hE,EAAIA,EAChB6G,OAAQy7D,WAAaC,SAAYA,SAAWT,IAAI9hE,EAAK8hE,IAAIpkE,OAAS,GAC3D6kE,SAAWD,YAClBz7D,MAAOn/B,KAAKsnB,IAAIgR,GAAK8hE,IAAI9hE,EAAI8hE,IAAIpkE,QAAU,GAE/CskE,SAAWlgG,OAAQ+kC,MAAOs7D,WAAa,EAE3C,OAAOH,UAUEQ,kBAAa,SAAbA,WAAcjkE,QAAS+F,SAAU09D,UAC1C,IAAMS,aAAelkE,QAAQmkE,cACvBC,kBAAoBpkE,QAAQqkE,mBAC5BnyF,OAAS8tB,QAAQ00D,QACjBuL,YAAc/tF,OAAO+tF,YACrBqE,UAAYpyF,OAAOkxF,MACnB5+D,UAAYkrC,sBAAsB40B,UAAUtE,aAAchgE,QAAQspD,IAAKp3E,OAAO+tF,aAEpFiE,aAAa7mE,MAAM,UAAW,SAC9B6mE,aAAavtC,KAAK,QAAlB,GAAAh2C,OAA8B6jB,UAAUn8B,KAAK,OFlDrB,SEmDpB09B,UFlDqB,UEkDQA,UAC7Bm+D,aAAa7mE,MAAM,MAAnB,GAAA1c,OAA6B8iF,SAA7B,OACAS,aAAa7mE,MAAM,OAAQ,IAC3B+mE,kBAAkB/mE,MAAM,MAAxB,GAAA1c,OAAkC8iF,SAAlC,OACAW,kBAAkB/mE,MAAM,OAAQ,MFrDV,WEuDtB0I,SAA8Bm+D,aAAa7mE,MAAM,MAAO,QAAU6mE,aAAa7mE,MAAM,MAAnB,IAAA1c,OAC1D2jF,UAAUtmE,KADgD,OAElEkmE,aAAa7mE,MAAM,OAAnB,GAAA1c,OAA8B8iF,SAA9B,OFzDsB,WE0DtB19D,SAA8Bq+D,kBAAkB/mE,MAAM,MAAO,QAAU+mE,kBAAkB/mE,MAAM,MAAxB,IAAA1c,OAC/D2jF,UAAUtmE,KAAO,EAD8C,OAEvEomE,kBAAkB/mE,MAAM,OAAxB,GAAA1c,OAAmC8iF,SAAnC,QAEJS,aAAa3iB,QAAb,GAAA5gE,OAAwBs/E,YAAxB,mBAAqD,GACrDiE,aAAa3iB,QAAb,GAAA5gE,OAAwBs/E,YAAxB,mBAAAt/E,OAAqDqf,QAAQukE,oBAAqB,GAClFL,aAAa3iB,QAAb,GAAA5gE,OAAwBs/E,YAAxB,mBAAAt/E,OAAqDolB,WAAY,GACjEq+D,kBAAkB7iB,QAAlB,GAAA5gE,OAA6Bs/E,YAA7B,8BAAqE,GACrEmE,kBAAkB7iB,QAAlB,GAAA5gE,OAA6Bs/E,YAA7B,8BAAAt/E,OAAqEqf,QAAQukE,oBAAqB,GAClGH,kBAAkB7iB,QAAlB,GAAA5gE,OAA6Bs/E,YAA7B,8BAAAt/E,OAAqEolB,WAAY,63CCjE7E/zB,2BAAsBrO,oBAAtBqO,kBAEFwyF,oBAAa,SAAbA,WAAc98F,UAAWw9C,SAAU85C,aAAtB,IAAA/mE,KAAA,OAAAwsE,wBAAAxsE,QACd/zB,gCAAiBE,SAAW,SAACtF,OAC1B,OAAIA,iBAAiBkT,2BACVgtF,YAAYlgG,OAEhBm6E,4BAAen6E,MAAOomD,YALlBu/C,wBAAAxsE,KAOd1zB,8BAAeC,WAAa,SAAA1F,OAAK,OAAKA,iBAAiBkT,2BAAoBgtF,YAAYlgG,OACpF4I,UAAU5I,MAAMkkD,QAAQ,MARbyhD,wBAAAxsE,KASd/zB,gCAAiBC,YAAc,SAAArF,OAAK,OAAIkgG,YAAYlgG,SATtCm5B,MAYbysE,sCAA+B,SAA/BA,6BAAgCh9F,UAAWi9F,kBAAZ,OAAiC90B,aAAanoE,UAAWi9F,mBAsBjFC,0BAAmB,SAAnBA,iBAAoBriF,WAAoC,IAAzBrQ,OAAyBxH,UAAA1D,OAAA,QAAA4L,IAAAlI,UAAA,GAAAA,UAAA,MAAZs1B,QAAYt1B,UAAA1D,OAAA,EAAA0D,UAAA,QAAAkI,EAC7DiyF,eACEviF,QAAUC,UAAUE,UACpBpS,KAAOiS,QAAQjS,KACfW,OAASsR,QAAQtR,OACjBkyF,UAAYhxF,OAAOgxF,UACnBxgF,aAAeH,UAAUI,kBACzBmiF,WAAaviF,UAAUrO,gBACvB6wF,aAAe/kE,QAAQ+kE,iBACvB13E,WAAarc,OAAOsH,OAAO,SAAAna,GAAC,OAAIA,EAAEwC,OAAS8D,yBAAUE,YACrD4oB,SAAWvc,OAAOsH,OAAO,SAAAna,GAAC,OAAIA,EAAEwC,OAAS8D,yBAAUC,UACnDsgG,oBAAsBh0F,OAAO0e,KAAK,SAAAvxB,GAAC,OAAsC,IAAlC4mG,aAAax5F,QAAQpN,EAAEC,QAC9D6mG,QAAU50F,KAAKrJ,OAEjBg4F,YAIAh/D,QAJAg/D,YACAjD,KAGA/7D,QAHA+7D,KACAmJ,oBAEAllE,QAFAklE,oBACAC,UACAnlE,QADAmlE,UAEEC,aAAeZ,oBAAW,KAAM,KAAMxF,aAAa96F,gCAAiBC,aACpEkhG,cAAgB,SAAhBA,cAAiBz0F,MAAOjQ,MAC1B,IAAI7B,MACAwmG,eACAC,aACE1iF,UACAtb,MAAQmb,aAAa9R,OAAOrJ,MAC5B29C,SAAWxiC,aAAa9R,OAAOkS,IAAIzH,UAAYnX,gCAAiBE,SAAW+gG,UAAUv0F,OAAS,EAC9F40F,YAAcd,sCAA6BF,oBAAW,SAAAh+F,KAAG,OAAIA,KAAK0+C,SAAU85C,aAAar+F,MAC3FykG,cAEJ,GAAc,OAAVtmG,MAAgB,CAChB,IAAI2mG,WAAa9kG,OAAS4D,8BAAeC,WAAa6L,KAAK9C,IAAI,SAAApP,GAAC,OAAIA,EAAEoJ,SAArDm+F,2BACT,IAAI7pF,IAAIxL,KAAK9C,IAAI,SAAApP,GAAC,OAAIA,EAAEoJ,WAChCk+F,WAAaA,WAAWntF,OAAO,SAAAna,GAAC,MAAU,KAANA,IACpC,IAAMwnG,UAAY5J,KAAKjkD,MAAM,GACvB8tD,UAAY7J,KAAK8J,MAAM,GACvBC,SAAW/J,KAAK/9D,KAAK,GACrB+nE,gBAAkBJ,WAAaC,WAAaE,WAAab,QAAU,GACjEtkG,OAAS4D,8BAAeC,WAEhCihG,WAAWr3F,QAAQ,SAAC5H,IAAK3I,GACrB,IAAIuB,IACE4mG,mBAAqBd,oBAAoBt0F,OAE/C,GAAIo1F,oBAAsBA,mBAAmBh/F,QAAUi+F,QAAU,EAAG,CAChE7lG,IAAMoH,IACN,IAAIy/F,MACAnnG,MAAO,IAWX,GARIinG,iBACAE,MACItlG,KAAM,OACNm3C,MAAO6tD,UAAUO,SAAS1/F,KAC1Bq/F,MAAOD,UAAUO,SAAS3/F,KAC1Bw3B,KAAM8nE,SAASM,QAAQ5/F,KAAO0L,OAAO4wF,YAGzCkD,mBAAmBh/F,OAAS,EAAG,CAC/B,IAAMq/F,aAAe1lG,OAASuD,gCAAiBE,SAAWohG,YAAYpmG,IAAK8lD,UAAY9lD,IACvFyjB,OAAOrX,MAAMy6F,KAAD,GAAAtlF,OAAU0lF,gBACtBL,mBAAmB53F,QAAQ,SAACk4F,SACxBf,aAAe7iF,aAAa4jF,SAAS/+F,MACrCzI,MAAQuR,KAAKxS,GAAG0nG,cAChB,IAAMtoF,aAAe6nF,WAAW52F,OAAOq3F,cAActoF,eAC/CspF,iBAAmB7B,sCACrBF,oBAAWvnF,aAAcioC,SAAU85C,aAAaz6F,8BAAeC,aACnE8gG,eAAiBiB,iBAAiBznG,OAClC+jB,OAAOrX,OACH1M,MAAK,GAAA6hB,OAAK2lF,SAAL3lF,OAAeuiF,WACpB7lE,OACImpE,cAAA,GAAA7lF,OAAkBzO,OAAOywF,OAAzB,QAEJn+D,UAAS,GAAA7jB,OAAKzO,OAAO+tF,YAAZ,kBAETnhG,MAAK,GAAA6hB,OAAK2kF,gBACV9gE,UAAS,GAAA7jB,OAAKzO,OAAO+tF,YAAZ,2BAGd,CACHsF,aAAe7iF,aAAasjF,mBAAmB,IAAIz+F,MACnDzI,MAAQuR,KAAKxS,GAAG0nG,cAChB,IAAMtoF,aAAe6nF,WAAW52F,OAAOq3F,cAActoF,eAC/CspF,iBAAmB7B,sCACrBF,oBAAWvnF,aAAcioC,SAAU85C,aAAaz6F,8BAAeC,aACnE8gG,eAAiBiB,iBAAiBznG,OAClC,IAAMunG,cAAe1lG,OAASuD,gCAAiBE,SAAWohG,YAAYpmG,IAAK8lD,UAAY9lD,IACvFyjB,OAAOrX,MACHy6F,MAEInnG,MAAK,GAAA6hB,OAAK0lF,eACV7hE,UAAS,GAAA7jB,OAAKzO,OAAO+tF,YAAZ,kBAGTnhG,MAAK,GAAA6hB,OAAK2kF,gBACV9gE,UAAS,GAAA7jB,OAAKzO,OAAO+tF,YAAZ,2BAKrB7gG,IAAMwR,MAEN00F,eAAiBE,YADjB1mG,MAAQ0H,KAERqc,OAAOrX,OACH1M,MAAK,GAAA6hB,OAAKvhB,KAALuhB,OAAWuiF,WAChB1+D,UAAS,GAAA7jB,OAAKzO,OAAO+tF,YAAZ,kBAETnhG,MAAK,GAAA6hB,OAAK2kF,gBACV9gE,UAAS,GAAA7jB,OAAKzO,OAAO+tF,YAAZ,uBAKzB,OAAOp9E,QAEP4jF,cAAgB,WAEpB,GAAIxB,QAAU,GAAKD,oBACfH,YA1Ie,SAAjB6B,eAAkBpkF,QAAS0d,QAAS2kE,kBACtC,IAAM7kF,QACEzP,KAA6BiS,QAA7BjS,KAAMW,OAAuBsR,QAAvBtR,OAAQ8zF,WAAexiF,QAAfwiF,WACtBhlF,KAAKtU,KAAKwF,OAAOzD,IAAI,SAAApP,GAAC,OAAIA,EAAEC,QAH+B,IAInD4gG,YAA2Bh/D,QAA3Bg/D,YAAamG,UAAcnlE,QAAdmlE,UAarB,OAZA90F,KAAKjC,QAAQ,SAACjQ,GACV,IAAMkiB,OACNrP,OAAO5C,QAAQ,SAACu4F,SAAU9oG,GACtB,IAAMqnD,SAAWyhD,SAAStrF,UAAYnX,gCAAiBE,SAAW+gG,UAAUwB,SAASvoG,MAAQ,EACvF6e,aAAe0pF,SAAShmG,OAAS8D,yBAAUC,SAAWogG,WAAW52F,OAAOrQ,GAAGof,eAG3Ene,MAFc4lG,sCAA6BF,oBAAWvnF,aACxDioC,SAAU85C,aAAa2H,SAAStrF,SAAUspF,iBAChCa,CAAYrnG,EAAEN,IAC5BwiB,IAAI7U,KAAK1M,SAEbghB,KAAKtU,KAAK6U,OAEPP,KAyHW4mF,EACVr2F,UACAW,cACA8zF,uBACD9kE,QAASolE,cACZqB,cAAgB,YACb,CACHp5E,WAAWjf,QAAQ,SAACkB,MAChB,IAAM3O,KAAO2O,KAAK+L,QAAU/L,KAAK+L,QAAU/L,KAAK3O,KAChDkkG,eAAWlkF,OAAA+kF,2BAAOb,aAAPa,2BAAuBL,cAAc/1F,KAAKlR,KAAMuC,UAG/D,IAAMimG,YAAclB,2BAAAmB,WAAQhrF,IAAX6pF,2BAAkBnnG,OAAOskB,OAAOqiF,yBACxBD,QAAU,EAAI13E,SAASjV,OAAO,SAAAna,GAAC,OAAqC,IAAjCyoG,YAAYr7F,QAAQpN,EAAEC,QAC5EmvB,UAEWnf,QAAQ,SAACkB,MACtB,IAAM3O,KAAO2O,KAAK+L,QAAU/L,KAAK+L,QAAU/L,KAAK3O,KAChDkkG,eAAWlkF,OAAA+kF,2BAAOb,aAAPa,2BAAuBL,cAAc/1F,KAAKlR,KAAMuC,UAInE,OACIiiG,QAASiC,YACT4B,8BAQKK,mBACTr7D,SAAU,SAAAA,SAACp7B,KAAM6B,OAAQ8tB,SAErB,OADe4kE,0BAAiBv0F,KAAM6B,OAAQ8tB,WAKzC+mE,iBAAmB,0SC3LXC,2BAIjB,SAAAA,gKAAeC,CAAA3hG,KAAA0hG,SACX1hG,KAAK4hG,OAAS,KACd5hG,KAAK65F,UAAY4H,iBACjBzhG,KAAK6hG,WAAa,KAClB7hG,KAAKovF,QAAUpvF,KAAKglB,YAAYpF,iSAahC,OAAIxa,UAAE1D,OAAS,GACX1B,KAAKovF,QAAU7hB,eAAevtE,KAAKovF,QAANhqF,UAAA1D,QAAA,OAAA4L,EAAAlI,UAAA,IACtBpF,MAEJA,KAAKovF,8CAORplF,MAIJ,OAHAhK,KAAK4hG,OAAS53F,KAAKmS,MACnBnc,KAAK65F,eAA8BvsF,IAAlBtD,KAAKw3F,SAAyBx3F,KAAKw3F,SAAWC,iBAC/DzhG,KAAK6hG,WAAa73F,KAAK5H,UAChBpC,6CAGF8hG,KAEL,OADA9hG,KAAKy6B,SAAWqnE,IACT9hG,2CAGH+xB,OACJ,IAAIhnB,KACE6B,OAAS5M,KAAKovF,QACdmO,kBAAoB3wF,OAAO2wF,kBAC3Bn7F,UAAYpC,KAAK6hG,WACjBlE,UAAY/wF,OAAO+wF,UACnBxhF,MAAQnc,KAAK4hG,OAUnB,GARA5hG,KAAK+hG,OAAShwE,OAEVhnB,KADAoR,iBAAiBtT,MACVsT,MAEA/Z,qBAAqB0S,SAAW1S,UAAUpC,KAAK4hG,OAAQ5hG,KAAKy6B,UAC/D+mE,kBAASxhG,KAAK65F,WAAW75F,KAAK4hG,OAAQ5hG,KAAK4M,SAAU5M,KAAKy6B,qBAG9C3lB,SAChBid,MAAMwqD,KAAKxxE,YACR,CACH,IAAIuyF,QAAUvyF,KACVo2F,cAAgB,UAEhB3zE,eAAeziB,QACfuyF,QAAUvyF,KAAKuyF,QACf6D,cAAgBp2F,KAAKo2F,eAGzB,IAAMt/D,KAAOmlD,YAAYj1D,MAAO,OAAQovE,eAAhB,GAAA9lF,OAAmCzO,OAAO+tF,YAA1C,uBACpB,SAAA9hG,GAAC,OAAIA,IAET,GAAsB,UAAlBsoG,cAA2B,CAC3B,IAAMa,MAAQhb,YAAYnlD,KAAM,SAAU,GAAjB,GAAAxmB,OAAwBzO,OAAO+tF,YAA/B,mBACnBsH,MAAQjb,YAAYgb,MAAO,SAAU,GAAlB,GAAA3mF,OAAyBzO,OAAO+tF,YAAhC,yBACnBngF,KAAOwsE,YAAYib,MAAO,KAAM3E,QAAd,GAAAjiF,OAA0BzO,OAAO+tF,YAAjC,uBACxBngF,KAAK+qB,KAAK,SAAU1sC,EAAGN,GACnBuuF,6BAAc9mF,MAAMi8E,QAApB,GAAA5gE,OAA+BzO,OAAO+tF,YAAtC,uBAAAt/E,OAAuE9iB,IAAK,KAElEyuF,YAAYxsE,KAAM,KAAM,SAAA3hB,GAAC,OAAIA,GAAlB,GAAAwiB,OAAwBzO,OAAO+tF,YAA/B,wBACnBp1D,KAAK,SAAU1sC,GACjBiuF,6BAAc9mF,MAAMu8E,KAAK1jF,SAE1B,CACH,IAAM2hB,MAAOwsE,YAAYnlD,KAAM,MAAOy7D,QAAd,GAAAjiF,OAA0BzO,OAAO+tF,YAAjC,iBAClBj7B,OAAQsnB,YAAYxsE,MAAM,OAAQ,SAAA3hB,GAAC,OAAIA,GAApB,GAAAwiB,OAA0BzO,OAAO+tF,YAAjC,qBACzBj7B,OAAMrO,KAAK,QAAX,GAAAh2C,OAAuBzO,OAAO+tF,YAA9B,qBACA5S,yBAAUvtE,OACN6iF,OAAQM,YAEZ5V,yBAAUroB,QACNn8B,QAAS,eACT2+D,eAAA,GAAA7mF,OAAmBzO,OAAO8jD,QAA1B,QAGJgP,OAAMn6B,KAAK,SAAU1sC,GACjB,IAAMspG,GAAKrb,6BAAc9mF,MAEzB,GADAmiG,GAAG5lB,KAAK,IACJ1jF,aAAaI,OACb,GAAe,SAAXJ,EAAEwC,KAAiB,CACnB,IAAMqnC,IAAMskD,YAAYmb,GAAI,OAAQ,IAC9Bz/E,KAAOskE,YAAYtkD,IAAK,QAAS,IACjC69D,MAAQ1nG,EAAE0nG,iBAAiBzrF,SAAWjc,EAAE0nG,MAAQ/wB,uBAAU32E,EAAE0nG,OAElEzY,wBAASplD,KACLvG,EAAG,EACH34B,EAAG,EACHq2B,MAAO0jE,kBACPzjE,OAAQyjE,oBAEZzV,wBAASplE,MACL7pB,EAAG0nG,MAAM7nE,KAAK7/B,EAAE6/B,KAAb6nE,GACHvmD,UAAS,aAAA3+B,OAAekiF,kBAAoB,EAAnC,MAAAliF,OAAyCkiF,kBAAoB,EAA7D,OAEbxV,yBAAUrlE,MACNi6B,KAAM9jD,EAAE25C,QAEZu1C,yBAAUrlD,KACN7I,MAAK,GAAAxe,OAAKkiF,kBAAL,MACLzjE,OAAM,GAAAze,OAAKkiF,kBAAL,aAGV4E,GAAG5lB,KAAK1jF,EAAEW,OACVX,EAAEqmC,WAAaijE,GAAGlmB,QAAQpjF,EAAEqmC,WAAW,GACvC6oD,yBAAUoa,GAAItpG,EAAEk/B,YAGpBoqE,GAAG5lB,KAAK1jF,MAKxB,OAAOmH,2CAKP,OADAA,KAAK4hG,OAAS,KACP5hG,6DA5HP,IAAM4M,OAASgT,6BAAc09E,QAE7B,OADA1wF,OAAO+tF,YAAc/6E,6BAAc+6E,YAC5B/tF,qTCZMw1F,2BAMjB,SAAAA,QAAaC,cAAezJ,oKAAc0J,CAAAtiG,KAAAoiG,SACtC,IAAIG,mBAAqB3J,aACzB54F,KAAKgkF,IAAM15E,cACXtK,KAAKovF,WACLpvF,KAAK4M,WACL,IAAM41F,YAAcxiG,KAAKovF,QACnBuL,YAAc6H,YAAY7H,YAC1B8H,aAAeD,YAAYlF,QAAQO,gBACnC9mE,UAAYiwD,YAAYqb,cAAe,OAAQ,GAAxB,GAAAhnF,OAA+Bs/E,YAA/B,uBAC7B36F,KAAKi5B,WAAalC,UAClB/2B,KAAK0iG,kBAAoB3rE,UAAU7D,OAAO,OAAO6E,MAAM,WAAY,YACnE/3B,KAAK2iG,kBAAoB3iG,KAAK0iG,kBAAkBxvE,OAAO,OAAOm+B,KAAK,QAA1C,GAAAh2C,OAAsDs/E,YAAtD,KAAAt/E,OAAqEonF,eAC9FziG,KAAK++F,mBAAqB/+F,KAAK0iG,kBAAkBxvE,OAAO,OAAO6E,MAAM,WAAY,YACjF/3B,KAAK6+F,cAAgB7+F,KAAK0iG,kBAAkBxvE,OAAO,OAE9C0lE,eACD2J,mBAAqBF,cAAcnvE,OAAO,OAAO6E,MAAM,iBAAkB,SAE7E/3B,KAAK4iG,aACL5iG,KAAK6iG,2BAA6B/b,6BAAcyb,oBAC3CrvE,OAAO,KACPm+B,KAAK,QAFwB,GAAAh2C,OAEZmnF,YAAY7H,YAFA,KAAAt/E,OAEemnF,YAAYpF,qBAC7D,IAAMtmE,GAAK92B,KAAKgkF,IACV0W,aAAe8H,YAAY9H,aAC3BoI,mBAAqB14B,sBAAsBswB,aAAc5jE,GAAI0rE,YAAY7H,aAE/E5S,yBAAU/nF,KAAK6+F,cAAe1B,eAC9BpV,yBAAU/nF,KAAK++F,mBAAoB5B,eACnCn9F,KAAK+iG,SAASD,mBAAmB//F,KAAK,MACtC/C,KAAK+iG,SAASP,YAAYtjE,WAC1Bl/B,KAAKm7F,wRASL,GAAI/1F,UAAO1D,OAAS,EAAG,CACnB,IAAMshG,QAAUz1B,kBAAmBvtE,KAAKglB,YAAYpF,iBAEpD,OADA5f,KAAKovF,QAAU7hB,eAAey1B,QAAD59F,UAAA1D,QAAA,OAAA4L,EAAAlI,UAAA,IACtBpF,KAEX,OAAOA,KAAKovF,kDAeNlwD,WAEN,OADAl/B,KAAK0iG,kBAAkBzmB,QAAQ/8C,WAAW,GACnCl/B,+CAIP,OAAIoF,UAAI1D,QACJ1B,KAAKy6B,SAALr1B,UAAA1D,QAAA,OAAA4L,EAAAlI,UAAA,GACOpF,MAEJA,KAAKy6B,iDAGP3hC,KAAMiS,MAA0B,IAApBk4F,cAAoB79F,UAAA1D,OAAA,QAAA4L,IAAAlI,UAAA,GAAAA,UAAA,MAC/BwH,OAAS5M,KAAK4M,SACZ+tF,YAAgB/tF,OAAhB+tF,YACF8H,aAAe71F,OAAO0wF,QAAQp+D,UAC9B98B,UAAYwK,OAAOxK,UACnB88B,UAAY+jE,cAAc/jE,WAAd,GAAA7jB,OAA8Bs/E,YAA9B,KAAAt/E,OAA6ConF,aAA7C,KAAApnF,OAA6DviB,MACzEwkG,QAAUt9F,KAAK4iG,UAAU9pG,MAAQkH,KAAK4iG,UAAU9pG,OAAS,IAAI4oG,gBAC7D3qE,UAAYiwD,YAAYhnF,KAAK2iG,kBAAmB,OAAQM,cAAch9E,OAAQiZ,WACpFnI,UAAUs6B,KAAK,QAAf,GAAAh2C,OAA2Bs/E,YAA3B,KAAAt/E,OAA0ConF,aAA1C,KAAApnF,OAA0D6jB,YH5BjC,SAApBgkE,kBAAqBlrE,gBAAiBkH,WAC/ClH,gBAAgB+4B,UAAU7xB,WAAW3uB,KAAK,SAAC5V,EAAGyI,GAAJ,OAAUzI,EAAIyI,IG4BpD8/F,CAAkBljG,KAAK2iG,kBAAN,IAAAtnF,OAA6Bs/E,YAA7B,KAAAt/E,OAA4ConF,eAC7D,IAAMU,YAAcv2F,OAAO0wF,QAoB3B,OAnBA2F,cAActI,YAAc36F,KAAKovF,QAAQuL,YACzC2C,QAAQ1wF,OAAOu2F,aAEF,OAATp4F,MACAuyF,QAAQ73D,QACR1O,UAAUyO,gBACHxlC,KAAK4iG,UAAU9pG,QAEtBwkG,QAAQ3pE,QACJxX,MAAOpR,KACP3I,UAAW6gG,cAAc7gG,WAAaA,YAE1Ck7F,QAAQ5iE,QAAQ16B,KAAKy6B,UACrB6iE,QAAQ8F,OAAOrsE,YAGd99B,OAAO6M,KAAK9F,KAAK4iG,WAAWlhG,QAC7B1B,KAAKm7F,OAEFn7F,uDAIP,OAAO/G,OAAOskB,OAAOvd,KAAK4iG,qDASpBzmE,EAAG34B,GAAc,IAAXuoE,KAAW3mE,UAAA1D,OAAA,QAAA4L,IAAAlI,UAAA,GAAAA,UAAA,MACvB,IAAKnM,OAAO6M,KAAK9F,KAAK4iG,WAAWlhG,OAE7B,OADA1B,KAAKm7F,OACEn7F,KAEXA,KAAK+8F,OACL,IAAMrhD,OAAS17C,KAAKqjG,QACdC,gBAAkBv3B,KAAKu3B,gBAE7B,GAAI5nD,QAAU4nD,gBAAiB,CAC3B,IAAMx0E,KAAO9uB,KAAK0iG,kBAAkB5zE,OAC9BliB,OAAS5M,KAAKovF,QACdmU,cAAgB32F,OAAOkxF,MAAMC,SAC7BO,WAAaiF,cAAgB,EAAI32F,OAAOkxF,MAAMplE,KAC9C8qE,YAAcxjG,KAAKi/F,kBACnBwE,YLxJQ,SKwJMD,aL3JL,UK2JmCA,YAC7ChgG,EAAIsrB,KAAK8I,aAAe0mE,WAAc5iD,OAAOl4C,GAAKA,EAAKk4C,OAAOl4C,EAAIk4C,OAAO5hB,OACzEqC,EAAIrN,KAAK+I,YAAcymE,WAAc5iD,OAAOvf,GAAKA,EAAKuf,OAAOvf,EAAIuf,OAAO7hB,MAE7E,IAAK0pE,cACD,GAAIE,YAAa,CACb,IAAI/gF,KACJ1iB,KAAK6+F,cAAc9mE,MAAM,UAAW,QACpC/3B,KAAK++F,mBAAmBhnE,MAAM,UAAW,QACzC/3B,KAAK6iG,2BAA2B9qE,MAAM,UAAW,SACjD,IAAM2rE,UAAY1jG,KAAK6iG,2BAA2B9xC,UAAU,QAAQhmD,MAAM,IACpEqmD,MAAQsyC,UAAUtyC,QAAQl+B,OAAO,QLnKjC,SKoKFswE,YACA9gF,KAAO,KAAArH,OAAK8gB,EAAL,KAAA9gB,OAAU7X,EAAIsrB,KAAK8I,aAAe,EAAlC,OAAAvc,OAAyCqgC,OAAOvf,EAAIuf,OAAO7hB,OAA3D,IAAAxe,OACGqgC,OAAOl4C,EAAIk4C,OAAO5hB,OAAS,GLzKlC,UK0KI0pE,YACP9gF,KAAO,KAAArH,OAAK8gB,EAAIrN,KAAK+I,YAAd,KAAAxc,OAA6B7X,EAAIsrB,KAAK8I,aAAe,GAArD,MAAAvc,OACSqgC,OAAOvf,EADhB,KAAA9gB,OACqBqgC,OAAOl4C,EAAIk4C,OAAO5hB,OAAS,GL1KnD,WK2KG0pE,cACP9gF,KAAO,KAAArH,OAAK8gB,EAAIrN,KAAK+I,YAAc,EAA5B,KAAAxc,OAAiC7X,EAAIsrB,KAAK8I,cAA1C,MAAAvc,OACKqgC,OAAOvf,EAAIuf,OAAO7hB,MAAQ,EAD/B,KAAAxe,OACoCqgC,OAAOl4C,IAEtD4tD,MAAMvnD,MAAM65F,WAAWryC,KAAK,IAAK3uC,MAAMqV,MAAM,UAAW,aACrD,CACH,IAAMomE,SAAWH,mBAAYwF,YAAa9nD,QACtCvf,IACA34B,IACA46F,UAAWtvE,KAAK8I,aAChBymE,SAAUvvE,KAAK+I,aAChB73B,KAAKovF,SAERuP,kBAAW3+F,KAAMA,KAAKi/F,kBAAmBd,UACzCn+F,KAAK6iG,2BAA2B9qE,MAAM,UAAW,SAK7D,IAAMkpB,OAASjhD,KAAK2jG,UAChBxnE,EAAG,EACH34B,EAAG,GAKP,OAHAxD,KAAK0iG,kBAAkB3qE,MAAM,OAA7B,GAAA1c,OAAwC4lC,OAAO9kB,EAAIA,EAAnD,OAA0DpE,MAAM,MAAhE,GAAA1c,OACO4lC,OAAOz9C,EAAIA,EADlB,OAGOxD,mEAQSi+F,KAAuB,IACnC/1F,IADmCuM,MAAAzU,KAAlBwiG,YAAkBp9F,UAAA1D,OAAA,QAAA4L,IAAAlI,UAAA,GAAAA,UAAA,MAEnCw+F,YAAcpB,YAAYoB,YAE9B,GADA5jG,KAAK+8F,QACAkB,IAED,OADAj+F,KAAKm7F,OACEn7F,KAGX,IAAMkkE,OAASlkE,KAAK6jG,QACd/0E,KAAO9uB,KAAK0iG,kBAAkB5zE,OAEpC9uB,KAAK0iG,kBAAkB3qE,MAAM,MAAO,OACnBA,MAAM,OAAQ,OAC/B,IAAMF,YAAc/I,KAAK+I,YAAc,EACjCD,aAAe9I,KAAK8I,aAAe,EACnChrB,OAAS5M,KAAKovF,QACdnuC,OAASjhD,KAAK2jG,QACdJ,cAAgB32F,OAAOkxF,MAAMC,SAC7B+F,UAAYP,cAAgB,EAAI32F,OAAOkxF,MAAMplE,KAC7C4/B,UAA4BhrD,IAArBk1F,YAAYlqC,MAAqBkqC,YAAYlqC,KACpDyrC,SAAW9F,IAAIz6F,EAEfwgG,KAAO/F,IAAI9hE,EAAI8hE,IAAIpkE,MAAQonB,OAAO9kB,EAClC8nE,WAAa//B,OAAOrqC,MAAQmqE,KAC5BE,UAAYjG,IAAI9hE,EAAI8kB,OAAO9kB,EAAI+nC,OAAO/nC,EACtCgoE,YAAcJ,SAAYnsE,aAAeksE,UACzCM,cAAgBH,YAAcpsE,YAAcisE,UAC5CO,aAAeH,WAAarsE,YAAcisE,UAwGhD,OA/BA9jG,KAAKqjG,QAAUpF,IACV2F,cAEGA,YADAO,YACc,WACPC,eAAiBC,aACV,aAEA,YAIF,eAAhBT,YACA17F,IAnFuB,SAArBo8F,qBACF,IAAI7jE,SACAtE,EAAI8hE,IAAI9hE,EAAI8hE,IAAIpkE,MAChBr2B,EAAIy6F,IAAIz6F,EAwBZ,OAtBI4gG,eACA3jE,SL/OY,OKgPZtE,GAAK2nE,WACEO,cACPloE,EAAI8hE,IAAI9hE,EAAItE,YACZ4I,SLlPa,QKmPbtE,GAAK2nE,YAELrjE,SAAW,OACXtE,GAAK2nE,WAEL7F,IAAInkE,OAASlC,eACbp0B,EAAIK,KAAK6P,IAAI,EAAGuqF,IAAIz6F,EAAIy6F,IAAInkE,OAAS,EAAIlC,aAAe,KAWxD6I,kBACA09D,SATaH,mBAAYv9D,SAAUw9D,KACnC9hE,IACA34B,IACA46F,UAAWxmE,aACXymE,SAAUxmE,aACXpjB,MAAK26E,SAKJjzD,IACA34B,KAoDE8gG,GACiB,aAAhBV,cACP17F,IAlDqB,SAAnBq8F,mBACF,IAAI9jE,SACAj9B,EAEA24B,EAAI8hE,IAAI9hE,EAAItE,YAAc,EAAIomE,IAAIpkE,MAAQ,EAwB9C,OArBKqqC,OAAOrqC,OAASokE,IAAI9hE,EAAI8kB,OAAO9kB,GAAMtE,YACtCsE,EAAI+nC,OAAOrqC,MAAQhC,YAAcopB,OAAO9kB,EAChCA,EAAI8kB,OAAO9kB,EAAK+nC,OAAO/nC,IAC/BA,EAAI+nC,OAAO/nC,GAGXgoE,aACA3gG,EAAIy6F,IAAIz6F,EAAIo0B,aAAeksE,UAC3BrjE,SLzRc,WK2Rdj9B,EAAIy6F,IAAIz6F,EAAIy6F,IAAInkE,OAASgqE,UACzBrjE,SL3RW,QKsSXA,kBACA09D,SATaH,mBAAYv9D,SAAUw9D,KACnC9hE,IACA34B,IACA46F,UAAWxmE,aACXymE,SAAUxmE,aACXpjB,MAAK26E,SAKJjzD,IACA34B,KAkBE+gG,IAGVvkG,KAAKwkG,WACDroE,EAAGj0B,IAAIi0B,EACP34B,EAAG0E,IAAI1E,GAGXxD,KAAKykG,UAAYv8F,IAAIi2F,SAChBoF,eAGDvjG,KAAK6+F,cAAc9mE,MAAM,UAAW,QACpC/3B,KAAK++F,mBAAmBhnE,MAAM,UAAW,SAHzC4mE,kBAAW3+F,KAAMkI,IAAIu4B,SAAUv4B,IAAIi2F,UAKvCn+F,KAAKi/F,kBAAoB/2F,IAAIu4B,SAC7B63B,MAAQt4D,KAAKygC,SAASv4B,IAAIi0B,EAAGj0B,IAAI1E,GAC1BxD,yCAUP,OAFAA,KAAK0iG,kBAAkB3qE,MAAM,UAAW,QACxC/3B,KAAK6iG,2BAA2B9qE,MAAM,UAAW,QAC1C/3B,yCASP,OADAA,KAAK0iG,kBAAkB3qE,MAAM,UAAW,SACjC/3B,2CAGHkkE,SAEJ,OADAlkE,KAAK6jG,QAAU3/B,QACRlkE,2CAGHihD,SAEJ,OADAjhD,KAAK2jG,QAAU1iD,QACRjhD,6CAOP,OAHAA,KAAK0iG,kBAAkBl9D,SACvBxlC,KAAK++F,mBAAmBv5D,SACxBxlC,KAAK6iG,2BAA2Br9D,SACzBxlC,6DA1SP,OAAO4f,shBC5ER,IAAM8kF,uBACTC,kBAAmB,SAAAA,kBAACjyF,IAChB,IAAMsK,QAAUtK,GAAGyK,UACb8K,SAAWjL,QAAQtR,OAAOsH,OAAO,SAAAna,GAAC,OAAIA,EAAEwC,OAAS8D,yBAAUC,UAC3DwlG,gBAAkBlyF,GAAGkV,SAAS,IAAKK,SAASlW,OAAO,SAACC,IAAKpI,GAE3D,OADAoI,IAAIpI,EAAE9Q,MAAuB,UAAf8Q,EAAE8N,SAAuB,MAAQ9N,EAAE8N,SAC1C1F,UAEL5G,UAAYsH,GAAG9D,gBAAgBxD,YAC/By5F,WAAaD,gBAAgBvnF,kBAC/BE,SACA/jB,MAAK,GAAA6hB,OAAK2B,QAAQjS,KAAKrJ,QACvBq2B,OACIkJ,cAAe,SAEpB,kBACG6jE,aAAe78E,SAAShgB,IAAI,SAAApP,GAAC,OAAIA,EAAEC,OAUzC,OATIgsG,aAAapjG,SACb6b,UAAMlC,OAAA0pF,6BAAOxnF,SAAW,IAAAlC,OAAKjQ,UAAU05F,aAAa,IAAIptF,WAAWmmC,cAA3C,MAAAxiC,OAA6DypF,aAAa,KAE1FtrG,MAAK,GAAA6hB,OAAKupF,gBAAgBznF,UAAUpS,KAAK,GAAG85F,WAAWC,aAAa,IAAI7iG,OAAOy7C,QAAQ,IACvF3lB,OACIkJ,cAAe,aAIvB1jB,ssDCnBK6kF,4DACjB,SAAAA,UAAwB,IAAA4C,iBAAAvwF,yKAAAwwF,CAAAjlG,KAAAoiG,SAAA,QAAAv7B,KAAAzhE,UAAA1D,OAARgf,OAAQ,IAAA7X,MAAAg+D,MAAAC,KAAA,EAAAA,KAAAD,KAAAC,OAARpmD,OAAQomD,MAAA1hE,UAAA0hE,MAAA,OACpBryD,MAAAywF,kCAAAllG,MAAAglG,iBAAAG,uBAAA/C,UAAA1pG,KAAA6O,MAAAy9F,kBAAAhlG,MAAAqb,OAASqF,WACJ0kF,aACL3wF,MAAKqlF,YAAc4K,sBACnBjwF,MAAKolF,UAAY,UAJGplF,yXADS4lF,4UAsB1BxM,aAAc3jE,SAAuB,IAAdvjB,QAAcvB,UAAA1D,OAAA,QAAA4L,IAAAlI,UAAA,GAAAA,UAAA,MACpCigG,YAAc,EACdC,WAAa,EACXroF,UAAY4wE,aAAaN,YAAYpxE,MACrCue,QAAU16B,KAAKq0F,SAAS35D,QACxBw9D,WAAal4F,KAAK+6F,iBACxB,GAAK99E,UAAUsoF,WAAkC,OAArBr7E,QAAQxN,WAA4D,IAAtCmxE,aAAaqH,qBAEnE,OADAl1F,KAAKm7F,KAAKx0F,QAAS,MACZ3G,KAGX,IAAMwlG,SAAWxlG,KAAKolG,UAChBx4F,OAAS5M,KAAK4M,SACd64F,UACF5rE,MAAOq+D,WAAWr+D,MAClBC,OAAQo+D,WAAWp+D,QAEjBk/D,eAAiB9uE,QAAQ8uE,eACzBn5F,IAAM+M,OAAOg0B,QACb8kE,cACAC,WtBjDY,esBiDC/4F,OAAOlT,KACpB0hG,UAAY1gE,QAAQ49D,gBACpB1vF,OAASwyF,UAAUxyF,OAEnBg9F,oBADYh9F,OAAOuzB,EAAE,IAAKvzB,OAAOuzB,EAAE,GAAG9gC,SAAW8D,yBAAUE,WAE3DwmG,WAAa37E,QAAQuW,SACrBqlE,SACA10C,SACA7qC,KAAOtJ,UAAUE,UAAUoJ,KAC7Bo/E,WACAD,WAAWx/F,KAAXqB,MAAAm+F,WAAUK,0BAASx/E,KAAKte,IAAI,SAAApP,GAAC,OAAIokB,UAAUa,OAAO,SAAC2J,UAAWlvB,GAAZ,OAAkBA,IAAMM,IACtEmlB,WAAW,QAGf0nF,WAAWx/F,KAAK+W,WAGpB,IAAIy+B,OAASxxB,QAAQwxB,OACjB9pC,gBACJ,GAAI8pC,OAAQ,CACR9pC,aAAe8pC,OAAO,OAGtB,IAFA,IAAMsqD,aAAe97E,QAAQ87E,aACvBC,WACG1tG,EAAI,EAAGkQ,IAAMmJ,aAAalQ,OAAQnJ,EAAIkQ,IAAKlQ,KACD,IAA3CytG,aAAa//F,QAAQ2L,aAAarZ,KAClC0tG,QAAQ//F,KAAK3N,GAGrBmjD,OAASA,OAAOzzC,IAAI,SAAApP,GAAC,OAAIA,EAAEma,OAAO,SAACpJ,EAAGrR,GAAJ,OAAkC,IAAxB0tG,QAAQhgG,QAAQ1N,OAQhE,IALA,IAAM2tG,eAAiBxrE,QAAQyrE,6BAA6BzqD,QAAUxxB,QAAQxN,UAC1E2d,SAAS,IAIJ9hC,GAAI,EAAGA,GAAImtG,WAAWhkG,OAAQnJ,KAAK,CACxC,IAAI6tG,QAAUF,eAAe3tG,IAC7B,GAAIotG,WAAY,CACZ,IAAM59E,WAAa29E,WAAWntG,IAAG4kB,UAAUzR,OAAOsH,OAAO,SAAAna,GAAC,OAAIA,EAAEwC,OAAS8D,yBAAUE,YAC9E4I,IAAI,SAAApP,GAAC,OAAIA,EAAEC,OAEhBstG,SADAA,QAAU1rE,QAAQyrE,6BAA6BT,WAAWntG,IAAGi0B,QAAQzE,aAAesS,SAAS,MACxE+rE,QAAQ,GAGjC,IAAIC,GAAKX,WAAWntG,IAChBqU,OAAOhE,SACPy9F,GAAKA,GAAG75E,QAAQ5f,OAAOhE,QACnBoV,WAAW,KAGfpR,OAAO05F,gBACPD,GAAKz5F,OAAO05F,cAAcD,GAAI9tG,KAGlC64D,MAAM74D,KAAK,EAnB6B,IAoBfguG,gBAA+CrO,WAAhElgE,gBAAkCwuE,0BAA8BtO,WAA9BsO,0BACpCC,eAAiBF,gBAAgB3oB,wBACjC8oB,aAAexO,WAAWmK,cAAczkB,wBAExCv+C,WAAaqnE,aAAa5iE,KAAO2iE,eAAe3iE,KAChDxE,UAAYonE,aAAahmE,IAAM+lE,eAAe/lE,IAC9CimE,YAAcnB,SAASjtG,IAAKitG,SAASjtG,KAAM,IAAIquG,gBAAgBL,gBAC7DrO,WAAWU,cAEnBwC,UAAUlxE,QAAUA,QACpBkxE,UAAU/G,SAAWr0F,KAAKq0F,SAC1B+G,UAAUqE,aAAe/kE,QAAQ+kE,eACjCrE,UAAUyE,UAAYnlE,QAAQmsE,mBAC9BzL,UAAU1B,YAAch/D,QAAQg/D,cAChCiN,YAAYjsE,QAAQ0gE,WACpB,IAAMoG,SAAWkD,sBAAW/9F,QAAQ66F,UAiBpC,GAhBAmF,YAAYrJ,QAAQ32F,QAAQ66F,UAAYxhG,KAAK65F,UAAWwM,IACpDjkG,UAAWo/F,SACXv7E,MAAOtf,QAAQsf,QAEFrZ,OAAO5M,KAAK4M,UACZs3D,QACG/nC,EAAG,EACH34B,EAAG,EACHq2B,MAAO2sE,0BAA0B3sE,MACjCC,OAAQ0sE,0BAA0B1sE,SAErCmnB,QACG9kB,EAAGkD,YAAczyB,OAAOq0C,OAAO9kB,GAAK,GACpC34B,EAAG87B,WAAa1yB,OAAOq0C,OAAOz9C,GAAK,KAGnDw1F,eACA2N,YAAYlmE,SAASolE,WAAW1pE,EAAIt8B,IAAKgmG,WAAWriG,EAAI3D,SACrD,KAAIumG,QAUJ,CACHO,YAAYxL,OACZ,MAXAwL,YAAYG,oBACR3qE,EAAGiqE,QAAQjqE,EACX34B,EAAG4iG,QAAQ5iG,EACXq2B,MAAOusE,QAAQvsE,OAAS,EACxBC,OAAQssE,QAAQtsE,QAAU,IAE1B8pE,YAAa+B,WACRC,eAAiB,aAAe,gBAAct4F,IAO3D,GAAIq4F,WAAY,CACZ,IAAMllE,SAAWkmE,YAAYnC,UACvBuC,gBAAkBJ,YAAYjE,kBAAkB5zE,OAAO8uD,wBAI7D,GAFAynB,aAAe0B,gBAAgBjtE,OAASj6B,IACxCylG,YAAcyB,gBAAgBltE,MAAQh6B,IAClC+lG,eAAiBP,YAAcnN,WAAWp+D,OAASwrE,WAAapN,WAAWr+D,MAC3E,MAEJisE,MAAM5/F,MACFi2B,EAAGsE,SAAStE,EACZ34B,EAAGi9B,SAASj9B,EACZq2B,MAAOktE,gBAAgBltE,MACvBC,OAAQitE,gBAAgBjtE,OACxB6+D,QAASgO,eAKrB,IAAK,IAAM7sG,OAAO0rG,SACd,IAAKp0C,MAAMt3D,KAAM,CACb,IAAM6+F,QAAU6M,SAAS1rG,KACzB6+F,QAAQ2E,QAAQpzE,QAAQ9H,OAAQ,MAC3Bu2E,QAAQqO,cAActlG,SACvBi3F,QAAQnzD,gBACDggE,SAAS1rG,MAU5B,OANI6rG,cCzLiB,SAAhBsB,cAAiBnB,MAAO5hC,OAAQ0hC,gBACzC,IAAIpiG,EACAs2B,OACAqC,EACAtC,MACAthC,EAEEkQ,IAAMq9F,MAAMpkG,OACZwlG,kBAAoB,SAApBA,kBAAqBC,SAAUC,UAAWC,UAC5ClrE,EAAIgrE,SAAShrE,EACbtC,MAAQstE,SAASttE,MACjBr2B,EAAI2jG,SAAS3jG,EACbs2B,OAASqtE,SAASrtE,OAClB,IAAMg2B,OAAStsD,EAAIs2B,OACbiK,MAAQ5H,EAAItC,MAEd+rE,gBACIyB,SAAW7jG,EAAK4jG,UAAU5jG,EAAI4jG,UAAUttE,OAAUg2B,OAASs3C,UAAU5jG,KACrE4jG,UAAU5jG,EAAI6jG,SAAWF,SAAS3jG,EAAI4jG,UAAUttE,OAZhD,EAaQg2B,OAbR,IAeGu3C,SAAWlrE,EAAKirE,UAAUjrE,EAAIirE,UAAUvtE,MAASkK,MAAQqjE,UAAUjrE,KAC1EirE,UAAUjrE,EAAIkrE,SAAWF,SAAShrE,EAAIirE,UAAUvtE,MAhB5C,EAiBIkK,MAjBJ,IAwBZ,IAHA+hE,MAAMv1F,KAAK,SAAC5V,EAAGyI,GAAJ,OAAWwiG,eAAiBjrG,EAAE6I,EAAIJ,EAAEI,EAAI7I,EAAEwhC,EAAI/4B,EAAE+4B,IAC3D5jC,EAAI,EAECA,EAAI,EAAGA,EAAIkQ,IAAM,EAAGlQ,IACrB2uG,kBAAkBpB,MAAMvtG,GAAIutG,MAAMvtG,EAAI,IAG1C,GAAKutG,MAAMvtG,GAAGiL,EAAIsiG,MAAMvtG,GAAGuhC,OAAUoqC,OAAOpqC,QACnCgsE,MAAMvtG,GAAG4jC,EAAI2pE,MAAMvtG,GAAGshC,MAASqqC,OAAOrqC,MAM3C,IALI+rE,eACAE,MAAMvtG,GAAGiL,GAAMsiG,MAAMvtG,GAAGuhC,OAASgsE,MAAMvtG,GAAGiL,EAAK0gE,OAAOpqC,OAEtDgsE,MAAMvtG,GAAG4jC,GAAM2pE,MAAMvtG,GAAGshC,MAAQisE,MAAMvtG,GAAG4jC,EAAK+nC,OAAOrqC,MAEpDthC,EAAIkQ,IAAM,EAAGlQ,EAAI,EAAGA,IACrB2uG,kBAAkBpB,MAAMvtG,GAAIutG,MAAMvtG,EAAI,IAAI,GDgJ1C0uG,CAAcnB,MAAOL,SAAUG,gBAC/BE,MAAMh9F,QAAQ,SAAAgyF,KAAG,OAAIA,IAAInC,QAAQl4D,SAASq6D,IAAI3+D,EAAG2+D,IAAIt3F,GACjD8/F,iBAAiB,OAGlBtjG,uCAGL2G,SACF,IAAM6+F,SAAWxlG,KAAKolG,UACtB,IAAK,IAAMtrG,OAAO0rG,SACd,MAAOlrG,eAAe5B,KAAK8sG,SAAU1rG,KAAM,CACvC,IAAM0nG,SAAW76F,QAAQ66F,UAAYxhG,KAAK65F,UAC1C2L,SAAS1rG,KAAKwjG,QAAQkE,SAAU,MAChCgE,SAAS1rG,KAAKqhG,gEAtLtB,OACIv6D,QAAS,EACTqgB,QACI9kB,EAAG,EACH34B,EAAG,oDAMX,MAAO,ouDEtBM8jG,otBAAkBjN,6SAa5BxM,aAAc3jE,SAAS,IACtB4P,OACAytE,UACA9qC,GACA5iC,MAJsBplB,MAAAzU,KAAAwnG,aAStBxnG,KAAK4M,SAHLsyB,UANsBsoE,aAMtBtoE,UACAuoE,UAPsBD,aAOtBC,UACAC,UARsBF,aAQtBE,UAEEzqF,UAAY4wE,aAAaN,YAAYpxE,MACrC+7E,WAAal4F,KAAK+6F,iBACxB,GAAI7wE,QAAQxN,UAAYO,WAAaA,UAAUsoF,UAC3C,OAAOvlG,KAEX,GAAyB,OAArBkqB,QAAQxN,WAAsBO,UAE9B,OADAjd,KAAKm7F,OACEn7F,KAGX,IAAMgd,QAAUC,UAAUE,UACpBi+E,UAAYp7F,KAAKq0F,SAAS35D,QAAQ49D,gBAClC7B,KAAO2E,UAAU3E,KACjBG,WAAawE,UAAUxyF,OACvBA,OAASilF,aAAajlF,OACtBmC,KAAOiS,QAAQjS,KACfqS,aAAeH,UAAUI,kBACzBu7E,aAAeV,WAAWsC,gBAE1BmN,YA+BN,GA9BA/+F,OAAOE,QAAQ,SAACwC,OACZ,IAAMvC,WAAaqU,aAAa9R,QAAU8R,aAAa9R,OAAOrJ,MACxDysE,QAAU3jE,KAAK9C,IAAI,SAAApP,GAAC,OAAIA,EAAEkQ,cAC1B6+F,YAAc,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAIx9E,KAAK,SAAC/Z,KAC7D,IAAMw3F,UAAYjR,WAAWvmF,IAAI,IAAIA,IAAI,IACzC,OAAOw3F,WAAaA,UAAUxsG,SAAW8D,yBAAUE,YACJ,IAA3CwoG,UAAU/Q,aAAa7wF,QAAQqF,SAEvC,QAAkBgC,IAAds6F,WAA2B78F,KAAKrJ,OAAQ,CACxC,IAAMrG,KAAOusG,UAAU,GACjB13C,KAAOumC,KAAKp7F,MAAMusG,UAAU,IAC5BpuG,MAAQk1E,QAAQ,GACtB64B,UAAYr3C,KAAKosC,gBAAkB,EACnC7/B,GAAKvM,KAAKmsC,cAAc7iG,OAAS+tG,UAAY,EAAIrP,WAAW4P,QAC5D,IAAMC,UAAYlkG,KAAK6P,IAALnM,MAAA1D,KAAImkG,4BAAQvzF,MAAK4/E,SAAS35D,QAAQu/D,SAAShyF,IAAI,SAAAiyF,OAAK,OAAIA,MAAM+N,cAAc5sG,UACxFwE,IAAMgE,KAAK6P,IAALnM,MAAA1D,KAAImkG,4BAAQvzF,MAAK4/E,SAAS35D,QAAQu/D,SAAShyF,IAAI,SAAAiyF,OAAK,OAAIA,MAAMgO,iBAAiB7sG,UAC3Fy+B,OAASo+D,WAAWp+D,OACpBD,MAAQq+D,WAAWr+D,MACnB,IAAMsuE,QAAU1rC,GAAKsrC,UAAY,EAAIloG,IAAM,EACrCuoG,MAAQ3rC,GAAKsrC,UAAY,EAAIloG,IAAM,EACnCwoG,aAEFA,UAAUxvG,EADD,MAATwC,KACA,OAAAggB,OAAqB8sF,QAArB,SAAA9sF,OAAoC+sF,MAApC,OAAA/sF,OAA+Cwe,MAA/C,KAAAxe,OAAwD+sF,MAAxD,OAAA/sF,OAAmEwe,MAAnE,KAAAxe,OAA4E8sF,QAA5E,MAEA,KAAA9sF,OAAmB8sF,QAAnB,SAAA9sF,OAAkC+sF,MAAlC,SAAA/sF,OAA+C+sF,MAA/C,KAAA/sF,OAAwDye,OAAxD,OAAAze,OAAoE8sF,QAApE,KAAA9sF,OAA+Eye,OAA/E,MAEJuuE,UAAUnpE,UAAY6oE,UAAYN,UAAYC,UAC9CC,SAASzhG,KAAKmiG,cAGlBV,SAASjmG,OAAQ,CACjB,IAAM4mG,YAActoG,KAAKy/B,cAAcm5D,aAAc,KAAM,GAAI15D,WAClDl/B,KAAKy/B,cAAc6oE,YAAa,OAAQX,UAChDt2C,KAAK,IAAK,SAAAx4D,GAAC,OAAIA,EAAEA,IAAGk/B,MAAM,iBAAkB,QAChCs5B,KAAK,QAAS,SAAAx4D,GAAC,OAAIA,EAAEqmC,YAE1C,OAAOl/B,yCAIP,IAAMk/B,UAAYl/B,KAAK4M,SAASsyB,UAC1Bg5D,WAAal4F,KAAK+6F,iBACxBjU,6BAAcoR,WAAWsC,iBAAiBzpC,UAA1C,IAAA11C,OAAwD6jB,YAAasG,iEAnFrE,OACItG,UAAS,GAAA7jB,OxBTM,OwBSN,oBACTosF,UAAS,GAAApsF,OxBVM,OwBUN,cACTqsF,UAAS,GAAArsF,OxBXM,OwBWN,+DAKb,MAAO,6BCAFqpF,qBACT6D,KAjBW,SAATC,OAAU/2F,IAAKipB,QAAS8mE,UAAa,IAEnCjU,YAIA97E,IAJA87E,YACAG,WAGAj8E,IAHAi8E,WACApB,QAEA76E,IAFA66E,QACAR,YACAr6E,IADAq6E,YAGCyB,YAAY7rF,QAAWgsF,WAAWhsF,QAGnCg5B,QAAQ0/D,sBAAsB9N,QAAQ,MAAQkV,UAAU,GACxD9mE,QAAQ0/D,sBAAsB7M,eAAiBiU,UAAU,IAHzD9mE,QAAQ0/D,sBAAsBtO,eAAiB0V,UAAU,IAS7DiH,MAAO,SAAAA,MAACh3F,IAAKipB,SAAY,IAEjB6yD,YAGA97E,IAHA87E,YACAG,WAEAj8E,IAFAi8E,WACA5B,YACAr6E,IADAq6E,YAECyB,YAAY7rF,QAAWgsF,WAAWhsF,QAGnCg5B,QAAQ0/D,sBAAsB1M,cAAgB,SAAS,GACvDhzD,QAAQ0/D,sBAAsB7M,eAAiB,SAAS,IAHxD7yD,QAAQ0/D,sBAAsBtO,eAAiB,SAAS,IAMhE4c,UAAW,SAAAA,UAACj3F,IAAKipB,SAAY,IAErB6yD,YAKA97E,IALA87E,YACAG,WAIAj8E,IAJAi8E,WACArB,SAGA56E,IAHA46E,SACAC,QAEA76E,IAFA66E,QACAR,YACAr6E,IADAq6E,YAECyB,YAAY7rF,QAAWgsF,WAAWhsF,QAGnCg5B,QAAQ0/D,sBAAsB/N,SAAS,MAAQ,aAAa,GAC5D3xD,QAAQ0/D,sBAAsB9N,QAAQ,MAAQ,aAAa,IAH3D5xD,QAAQ0/D,sBAAsBtO,eAAiB,aAAa,wxCCrCnD6c,gEACjB,SAAAA,kBAAwB,IAAA3D,iBAAAvwF,qKAAAm0F,CAAA5oG,KAAA2oG,iBAAA,QAAA9hC,KAAAzhE,UAAA1D,OAARgf,OAAQ,IAAA7X,MAAAg+D,MAAAC,KAAA,EAAAA,KAAAD,KAAAC,OAARpmD,OAAQomD,MAAA1hE,UAAA0hE,MAAA,OACpBryD,MAAAo0F,2CAAA7oG,MAAAglG,iBAAA8D,gCAAAH,kBAAAjwG,KAAA6O,MAAAy9F,kBAAAhlG,MAAAqb,OAASqF,WACJm5E,UAAY,YACjBplF,MAAKqlF,YAAc4K,oBAHCjwF,mZADiBslF,8TAelClM,aAAc3jE,SAAuB,IAAdvjB,QAAcvB,UAAA1D,OAAA,QAAA4L,IAAAlI,UAAA,GAAAA,UAAA,MAClCo8F,SAAWxhG,KAAK85F,YAAYnzF,QAAQ66F,UAAYxhG,KAAK65F,WAM3D,OAJ0C,IAAtChM,aAAaqH,sBACbsM,SAAS3T,aAAc7tF,KAAM2G,QAAQ66F,UAAYxhG,KAAK65F,WAGnD75F,uDAdP,MAAO,sDAIP,MAAO,s1CCbM+oG,2wBAAqBhP,oUAa/BlM,aAAc3jE,SACjB,IAAMwQ,QAAU16B,KAAKq0F,SAAS35D,QACxBsuE,WAAanb,aAAaN,YAAYpxE,MAM5C,OALyB,OAArB+N,QAAQxN,SACRge,QAAQuuE,eAAeC,YAEvBxuE,QAAQyuE,gBAAgBp+F,KAAKi+F,YAE1BhpG,uDAnBP,MAAO,iDAIP,MAAO,wDAIP,OAAO,swDCNf,IAAMopG,iBAAW,SAAXA,SAAYC,UAAWC,cAAe5uE,QAASm2D,YACjD,IAAMoJ,UAwCN,OAvCIoP,WACAA,UAAUvgG,QAAQ,SAACygG,UACf,IAAMC,KAAOD,SAASC,KAChBC,SAAWH,cAAcE,MAC/B,GAAIC,UAAYA,SAASC,oBAAqB,CAC1C,IAAMC,iBAAmBJ,SAAS/rF,IAAIosF,SAChCA,UACFztE,EAAGkvC,WAAWs+B,iBAAkB,IAAK,SACrCnmG,EAAG6nE,WAAWs+B,iBAAkB,IAAK,SACrCn3D,MAAO64B,WAAWs+B,iBAAkB,QAAS,SAC7CjxE,MACIptB,MAAO+/D,WAAWs+B,iBAAkB,OAAQ,SAC5CnwG,MAAOq3F,WAAWgZ,qBAGpB/wG,KAAI,GAAAuiB,OAAMkuF,SAAS/rF,IAAI1kB,KAAnB,KAAAuiB,OAA2Bw1E,WAAW7rE,YAAYslE,cACtDwf,UACFC,UAAWrvE,QAAQ0uE,UACftwG,UACA0wG,KAAM,QACNtqE,UAAW2xD,WAAW7rE,YAAYpF,gBAAgBsf,UAClD0qE,kBACA5vD,WACI3+C,KAAM,YAEVm2D,WAAYq/B,WAAWmZ,sBACvBC,iBAAiB,EACjBxmF,OAAQ,SAAAA,OAAA/Q,IAAE,OAAIA,GAAGoL,OAAO,kBAAM,IAC1BE,WAAW,KAEfm8E,aAAa,EACbiJ,QAAQ,IAEZ8G,YAAaX,SAAS/rF,IAAI1kB,MAE9BmhG,OAAO/zF,KAAK4jG,aAIjB7P,QAGUkQ,oDACjB,SAAAA,eAAwB,IAAAnF,iBAAAvwF,4JAAA21F,CAAApqG,KAAAmqG,cAAA,QAAAtjC,KAAAzhE,UAAA1D,OAARgf,OAAQ,IAAA7X,MAAAg+D,MAAAC,KAAA,EAAAA,KAAAD,KAAAC,OAARpmD,OAAQomD,MAAA1hE,UAAA0hE,MAAA,OACpBryD,MAAA41F,kCAAArqG,MAAAglG,iBAAAsF,uBAAAH,eAAAzxG,KAAA6O,MAAAy9F,kBAAAhlG,MAAAqb,OAASqF,WACJ6pF,cACL91F,MAAK+1F,kBAHe/1F,8XADc4lF,gUAqBnB,IAAA1lF,OAAA3U,KACT06B,QAAU16B,KAAKq0F,SAAS35D,QACxB+vE,QAAU/vE,QAAQ+vE,UAClBnB,cAAgB5uE,QAAQgwE,WAAWpB,cACnCqB,aAAejwE,QAAQ6uE,WAM7B,OALA7uE,QAAQ/xB,QAAQiiG,0BAAhB,GAAAvvF,OACOwvF,0BAAiB77C,qBADxB,KAAA3zC,OACgDovF,QAAQt/B,UADxD,aAC8E,SAAAx4C,MAAmB,IAAf02E,UAAeyB,sBAAAn4E,KAAA,MACzFhe,OAAKo2F,QAAU3B,iBAASC,UAAWC,cAAe5uE,QAAS/lB,UAEnE3U,KAAK+qG,QAAU3B,iBAASuB,aAAcrB,cAAe5uE,QAAS16B,MACvDA,uEAIP,OACI+9F,UAAU,+DASd,OAAO,wCAGJlQ,cACH,IAAMpK,KAAOzjF,KACPid,UAAY4wE,aAAaN,YAAYpxE,MAC3C,IAA0C,IAAtC0xE,aAAaqH,qBAAgC,CAC7C,IACMsF,gBADax6F,KAAK+6F,iBACWP,gBAC7Bt7D,UAAS,GAAA7jB,OAAMrb,KAAK4M,SAASsyB,WAC7B+6D,OAASj6F,KAAK+qG,QACdzC,YAActoG,KAAKy/B,cAAc+6D,gBAAiB,KAAM,GAA1C,GAAAn/E,OAAiD6jB,UAAjD,eACCl/B,KAAKy/B,cAAc6oE,YAAa,IAAKrvG,OAAOskB,OAAO08E,SAC3D10D,KAAK,SAAU20D,OACxB,IAAM6P,UAAY7P,MAAM6P,UAClBiB,MAAQvnB,KAAKhkD,cAAcz/B,KAAM,IAAK+pG,UAAW7qE,WAFxB+rE,uBAAAH,sBAGXrnB,KAAK4Q,SAAS35D,QAAQwwE,eAAehR,MAAMgQ,aACjBiB,kCAAkCluF,WAJjD,GAIxBmuF,gBAJwBH,uBAAA,GAIPv/F,OAJOu/F,uBAAA,GAKzBI,qBAAuB,IAAIhtG,oBAAU+sG,gBAAiB1/F,QAC5Ds/F,MAAMzlE,KAAK,SAAU1sC,EAAGN,GACpBwxG,UAAUxxG,GAAGwS,KAAKsgG,sBAAsBt5E,MAAM/xB,UAI1D,OAAOA,+CA7DP,MAAO,oEAIP,OACIk/B,UAAS,GAAA7jB,O5B/DM,O4B+DN,mEAKb,MAAO,q0CCjEMiwF,2yBAA0BnB,qWAYvC,OACIpM,UAAU,qDAXd,MAAO,2EAIP,OACI7+D,UAAS,GAAA7jB,O7BVM,O6BUN,0zCCPAkwF,ovBAAqBpB,iVAYlC,OACIpM,UAAU,qDAXd,MAAO,sEAIP,OACI7+D,UAAS,GAAA7jB,O9BVM,O8BUN,+NCRd,IAAM+yE,yCAAkBod,oCAAAnc,uBAC1Boc,OAAoB,gBACjB3yG,KAAM,cACN6N,SACI66F,SAAU,SAEf,kBANwBgK,oCAAAnc,oBAAA,GAAAh0E,OAOvBowF,MAPuB,KAAApwF,OAOHowF,UACpB3yG,KAAM,UACN6N,SACI66F,SAAU,oBACVv7E,MAAO,EACPjT,OAAQ,SAAAA,OAAA0nB,SAAO,MAA8B,eAA1BA,QAAQ9tB,SAASlT,UAZjB8xG,oCAAAnc,oBAe1Boc,YACG3yG,KAAM,cACN6N,SACI66F,SAAU,cAEf,aACC1oG,KAAM,UACN6N,SACIsf,MAAO,OAEZ,YAzBwBulF,oCAAAnc,oBA0B1Boc,QAAqB,WA1BKD,oCAAAnc,oBA2B1Boc,SACG3yG,KAAM,cACN6N,SACI66F,SAAU,UAEf,uBAhCwBnS,qBCDlBqc,MAAQ,QAGRC,MAAQ,QACRC,OAAS,SACTC,KAAO,OACPC,MAAQ,QACRC,MAAQ,QAGRC,UACTpuD,EAAG,IACH35C,EAAG,IACHgoG,GAAI,KACJC,GAAI,MCbKtsF,mCACT+6E,YDHuB,OCIvBD,aAAc,aACdx7D,UAAW,GACX8b,YAAa,SACbhB,WACI3+C,KAAMqwG,OAEVhT,eAGAyT,sBAAuB,GACvBvC,UACIp3D,SACArW,KACA34B,KACAovD,MACAw5C,eACI5yG,MAAO,IAGfg4D,YACI2/B,OAAQ,QACRvN,SAAU,KAEdyoB,iBAAiB,2TCbAC,qhBAGb,MAAM,IAAIr9F,MAAMo+D,UAAUC,oEAS1B,MAAM,IAAIr+D,MAAMo+D,UAAUC,wDAU1B,MAAM,IAAIr+D,MAAMo+D,UAAUC,oDAW1B,MAAM,IAAIr+D,MAAMo+D,UAAUC,8DAQ1B,MAAM,IAAIr+D,MAAMo+D,UAAUC,gDAQ1B,MAAM,IAAIr+D,MAAMo+D,UAAUC,4FAa1B,MAAM,IAAIr+D,MAAMo+D,UAAUC,gFAc1B,MAAM,IAAIr+D,MAAMo+D,UAAUC,4FAY1B,MAAM,IAAIr+D,MAAMo+D,UAAUC,8DAU1B,MAAM,IAAIr+D,MAAMo+D,UAAUC,0EAQ1B,MAAM,IAAIr+D,MAAMo+D,UAAUC,wEAQ1B,MAAM,IAAIr+D,MAAMo+D,UAAUC,4EAQ1B,OAAOttE,6DAIP,MAAM,IAAIiP,MAAMo+D,UAAUC,sDAQ1B,MAAM,IAAIr+D,MAAMo+D,UAAUC,wDAI1B,MAAM,IAAIr+D,MAAMo+D,UAAUC,mCCxJrB96C,aACTikE,QACA1kE,SACAmsE,eACAuM,WACA1/F,QACA6B,UACA8sF,aACInvB,aAAc,SAAAA,aAAArpE,KAAG,OAAIA,2LCKtB,cAAMqrG,wBAAS,SACTC,qBAAM,MACNC,sBAAO,OACPC,uBAAQ,QAMRC,oBAAkBC,gCAAAC,uBAC1BC,sBAAuBz7B,QAAQC,UADLs7B,gCAAAC,oBAE1BC,wBAAyBz7B,QAAQI,YAFPm7B,gCAAAC,oBAG1BC,uBAAwBz7B,QAAQE,WAHNq7B,gCAAAC,oBAI1BC,qBAAsBz7B,QAAQG,SAJJq7B,qBCjBlBE,OAAS,SACTC,KAAO,OACPC,KAAO,WACPnB,iBAAQ,QACRoB,QAAU,UACVC,SAAW,WACXC,SAAW,WACXC,IAAM,MACNC,IAAM,MACNC,oBAAW,WACXC,WAAa,aACbC,UAAY,YCdZC,mCAAY,aACZC,SAAW,WACXH,qBAAa,aACbN,kBAAU,UACVH,iBAAS,SAETI,mBAAW,WASXS,OAAS,8LCHlBC,YAcAC,uBAdAD,YACAE,eAaAD,uBAbAC,eACAC,SAYAF,uBAZAE,SACAC,SAWAH,uBAXAG,SACAC,cAUAJ,uBAVAI,cACAC,aASAL,uBATAK,aACAC,gBAQAN,uBARAM,gBACAC,cAOAP,uBAPAO,cACAC,cAMAR,uBANAQ,cAIAh7B,UAEAw6B,uBAFAx6B,UACAi7B,UACAT,uBADAS,UAESC,UAAQC,6BAAAC,aAChBC,OAAmBd,aADHY,6BAAAC,UAEhBC,KAAiBr7B,WAFDm7B,6BAAAC,UAGhBC,SAAqBN,eAHLI,6BAAAC,UAIhBC,SAAqBL,eAJLG,6BAAAC,UAKhBC,UAAsBZ,gBALNU,6BAAAC,UAMhBC,WAAuBP,iBANPK,6BAAAC,UAOhBC,IAAgBX,UAPAS,6BAAAC,UAQhBC,IAAgBV,UARAQ,6BAAAC,UAShBC,oBAAqBT,eATLO,6BAAAC,UAUhBC,KAAiBJ,WAVDE,6BAAAC,UAWhBC,iBAAkBd,aAXFY,6BAAAC,UAYhBC,QAAoBR,cAZJO,WA6Dd,SAASE,0BAAaluF,QACzB,IAAKA,OAAOrlB,OAASmzG,SAAS9tF,OAAOrlB,MACjC,MAAM,IAAI4T,MAAJ,GAAAoM,OAAaqF,OAAOrlB,KAApB,+BAEV,IAAKwN,MAAMwB,QAAQqW,OAAOnf,OACtB,MAAM,IAAI0N,MAAM,oCAEpB,IAAI4/F,aAAe,KACbttG,MAAQmf,OAAOnf,MAErB,GAAImf,OAAOrlB,OAAS0xG,kBAAUrsF,OAAOytC,aAAc,CAE/C,GADA0gD,aAAeL,SAAS9tF,OAAOytC,cAC3BztC,OAAOytC,eAAiBwgD,IACxB,OAAOE,eAAettG,MAAMA,OAAOg8C,SAAS78B,OAAO68B,UAChD,GAAI78B,OAAOytC,eAAiBwgD,IAC/B,OAAOE,eAAettG,MAAMA,OAAO0+C,MAAMv/B,OAAOu/B,YAGpD4uD,aAAeL,SAAS9tF,OAAOrlB,MAMnC,OAHIqlB,OAAOrlB,OAAS8xG,oBAChB0B,eAAelvD,OAEZkvD,eAAettG,MAAMA,OC3GzB,IAAMqe,6CACTkX,GAAIxsB,cACJwkG,UACIpU,aAAc,aAElBqU,gBAAiB,GACjB9uD,KAAM,GACN06C,YFduB,OEevBz7D,UAAS,GAAA7jB,OFfc,OEed,SACTkiC,SAAU,EACV4Q,aAAc,SACd6gD,eAAe,EACfC,QACIC,SAAU,KACVC,WAAY,MAEhBvL,YAAa,OACbjsF,aAAc,SAAAA,aAAAzW,KAAG,OAAIA,KACrB0/B,QAAS,GACT+e,MAAM,EACNyvD,cAAe,GACfv2D,QAAQ,EACRkkD,MAAM,EACNsS,cAAc,EACdC,gBAAgB,EAChBC,gBAAgB,EAChBx3E,SACA18B,KAAM,SACNqkD,WAAY,KACZ2Q,WAAY,KACZy3C,QAAS,EACT0H,QAAS,GCvBPC,yBAAa,SAAbA,WAAcC,SAAUC,SAAUC,cACpC,IAAIV,SACEh/C,KAAOw/C,SAASx/C,OAChBtjD,OAAS8iG,SAAS9iG,SAClBijG,aAAeH,SAASG,eACxBV,WAAaO,SAASP,aACtBpoE,MAAQmpB,KAAKnpB,QAEbpC,OADYoC,MAAMpC,OAASoC,MAAM5B,UAAY4B,MAAMvwB,UAGrDotF,YAGAh3F,OAHAg3F,YACAoL,cAEApiG,OAFAoiG,cACA3zG,KACAuR,OADAvR,KAGA4zG,OACAY,aADAZ,OAGJC,SAAWD,OAAOC,SAElB,IAAMx9C,SAAWg+C,SAASI,cAsD1B,OArDAH,SAASpqE,KAAK,SAAU1sC,EAAGoJ,OACvB,IAAI8tG,OACAC,OACA1+F,MAAQ69F,WAAWltG,OAASktG,WAAWltG,OAAO5B,KAAOxH,EAEnDo3G,cAAgB//C,KAAKxQ,aAAewQ,KAAKxQ,WAAa,KAI5DpuC,OAFaogD,SAAYu+C,cAAgBA,gBAAgBp3G,GAAKyY,MAAS,IAE1DhP,WAEb,IAAM4tG,aAAeN,aAAaxxE,WAAW9sB,OAEvCuoB,MAA6B,GAArBq2E,aAAar2E,MACrBC,OAA+B,GAAtBo2E,aAAap2E,OAExBo1E,SAAW,IACXA,SAAW,IAAMA,UAGrB,IAAMiB,SAAW,EAAItsG,KAAK8M,MAAMu+F,SAAW,IACrCkB,oBAAuBD,SAAW,GAAM,EAAKjB,SAAW,IAAMrrG,KAAKqnB,KAAKgkF,SAAW,KAAOA,UAAY,IAE5Ga,OAASlsG,KAAKkQ,KAAKlQ,KAAAoQ,IAAA6lB,OAAU,GAAVj2B,KAAAoQ,IAAc4lB,MAAS,IAAKh2B,KAAK6wC,I5J45BtC,SAAhB27D,cAAgBC,OAAK,OAAIA,MAAQzsG,KAAKgwC,GAAK,I4J55Bew8D,CAAcD,qBAEpD,IAAbD,UAA+B,IAAbA,UAAqBC,mBAAqB,MAAQA,oBAAsB,KAC3FL,QAAmB,EAATj2E,QAEdk2E,OAASn2E,MAGLm2E,OADa,KAAbd,SACSp1E,OACW,MAAbo1E,UACGp1E,OAED,EAGT8pE,cAAgBkJ,sBAChBkD,OAAUhB,eAAiBrqE,MAAM,KAAO9rC,GAAKwC,OAAS0xG,iBAAUiD,OAASA,OAAS,EAAIA,OACtFlpB,6BAAc9mF,MACGqxD,KAAK,YADtB,aAAAh2C,QACiD20F,OAASt+C,SAD1D,sCAAAr2C,QAEuB00F,OAASr+C,SAFhC,aAAAr2C,OAEoD6zF,SAFpD,QAIAc,OAAUhB,eAAiBrqE,MAAM,KAAO9rC,GAAKwC,OAAS0xG,iBAAUiD,OAASA,OAAS,EAAIA,OAEtFlpB,6BAAc9mF,MACGqxD,KAAK,YADtB,aAAAh2C,OACgD20F,OAASt+C,SADzD,sCAAAr2C,OAEsB00F,OAASr+C,SAF/B,aAAAr2C,OAEmD6zF,SAFnD,OAIJpoB,6BAAc9mF,MAAMwxD,aACHoyB,SAAS,KAAMvjF,KAAKiR,SAElCq+F,UASLY,oCAAwB,SAAxBA,sBAAyBC,gBAAiBC,aAAc/+C,UAAa,IAEnEg/C,YACAD,aADAC,YAEE9jG,OAAS6jG,aAAa7jG,SACtBijG,aAAeY,aAAaZ,eAC5BD,aAAea,aAAah1G,eAAem0G,aAE7ChM,YAEAh3F,OAFAg3F,YACAjJ,YACA/tF,OADA+tF,YAGAsU,OACAY,aADAZ,OAGAC,SAEAD,OAFAC,SACYyB,aACZ1B,OADAE,WAGEQ,SAAWa,gBAAgBz/C,UAAU,cAI3C,GAHA4+C,SAAS5+C,UAAU,SAASvrB,UAGxB0pE,UHrGW,QGqGEtL,aHtGC,WGsGsBA,YAEjC,GAAKsL,UAAayB,aAElB,CAEH,GADAhB,SAAStvG,KAAK,IH1GH,QG2GPujG,aH5GU,WG4GaA,YACvB+L,SAASt+C,KAAK,IAAK,GACFA,KAAK,IAAK,GACVA,KAAK,YAAa,IAClBhxD,KAAK,IACR2mF,YAAY2oB,SAAU,QAAS,SAAC92G,EAAGN,GAC7C,OAAIm4G,YAAYn4G,GACLm4G,YAAYn4G,GAAGggC,UAFL,GAAAld,OAInBs/E,YAJmB,gBAMnBtpC,KAAK,KAAM,KACAt5B,MAAM,UAAW,KAEjBy5B,aACAoyB,SAAS,KACTlY,GAAG,MAAO+kC,aAAaG,6BACvBv/C,KAAK,KAAM,SAACx4D,EAAGN,GACZ,MH9HV,WG8HcqrG,aAAgC,IAANrrG,EACnBm4G,YAAY,GAAG3yE,eAElB2yE,YAAY,GAAG3yE,eAAiB2yE,YAAY,GAAGn4E,MAAM72B,OAAS,GAAKgwD,WAE9E35B,MAAM,UAAW,GACjB13B,KAAK,SAAA5F,GAAC,OAAIA,IACV42D,KAAK,IAAK,QAEb21B,YAAY2oB,SAAU,QAAS,SAAC92G,EAAGN,GAAJ,OAAUm4G,YAAYn4G,GAAGggC,OAA7C,GAAAld,OAAuDs/E,YAAvD,gBACnBt6F,KAAK,SAAA5F,GAAC,OAAIA,SA/BpBk1G,SAASt+C,KAAK,YAAa,SAF3Bo+C,yBAAWgB,aAAcd,SAAUC,cAqCvC,OAAOD,UAGLkB,+BAAmB,SAAnBA,iBAAoBJ,cAAiB,IAEnCzB,cACAyB,aAAa7jG,SADboiG,cAEEx4F,OAASi6F,aAAaj6F,SACxBw4F,eAAiBx4F,OAAO9U,QACxB+uG,aAAaI,oBAWfC,6BAAiB,SAAjBA,eAAkBC,SAAUnN,YAAa37E,UAAa,IAEpD+oF,eAIA/oF,SAJA+oF,eACAxB,QAGAvnF,SAHAunF,QACAyB,YAEAhpF,SAFAgpF,YACAC,eACAjpF,SADAipF,eAEJ,OAAQtN,aACR,KAAKkJ,sBACDiE,SAAS1/C,KAAK,YAAd,aAAAh2C,SACmB61F,eAAer3E,MAAQm3E,gBAD1C,KAAA31F,OAC6Dm0F,QAAUyB,YADvE,iBAEA,MACJ,KAAKnE,uBACDiE,SAAS1/C,KAAK,YAAd,aAAAh2C,OACmB61F,eAAer3E,MAAQm3E,eAD1C,KAAA31F,OAC6Dm0F,QAAUyB,YADvE,gBAEA,MACJ,KAAKnE,qBACDiE,SAAS1/C,KAAK,YAAd,aAAAh2C,OACkB61F,eAAer3E,MAAQ,EADzC,KAAAxe,QAC+C61F,eAAep3E,OAASk3E,eADvE,MAEA,MACJ,KAAKlE,wBACDiE,SAAS1/C,KAAK,YAAd,aAAAh2C,OACkB61F,eAAer3E,MAAQ,EADzC,KAAAxe,OAC8C61F,eAAep3E,OAASk3E,eAAiB,EADvF,MAKJ,OAAOD,UC3MX,IAAMI,aAAe,SAAfA,aAAgBz2E,QAASr/B,KAAM+1G,YAAanwD,QAC9CvmB,QAAQn5B,MAAM6vG,aACdnwD,QAAUvmB,QAAQ9tB,uLAARykG,IAAA,GAAAh2F,OAAqBhgB,KAArB,UAAoC4lD,UAcrCqwD,yBAAc,SAAdA,YAAev6F,QAASxV,MAAOiV,OAAQotF,aAChD,IAAM5gE,KAZY,SAAhBuuE,cAAiBC,SAAUjwG,MAAOiV,QACpC,IACMqjB,MADMh2B,KAAKsnB,IAAI5pB,MAAM,GAAKA,MAAM,KAAOiV,OAAO,GAAKA,OAAO,IAC3Cg7F,SACfC,QAAWlwG,MAAM,GAAKA,MAAM,GAC5BmwG,KAAOD,QAAU53E,MAIvB,OAFa43E,QADIA,SAAWC,KAAO,GACDA,MAEpB,EAIDH,CAAcx6F,QAASxV,MAAOiV,QAS3C,OAPIotF,cAAgB4I,sBAAO5I,cAAgB2I,yBACvChrG,MAAM,IAAMyhC,KACZzhC,MAAM,IAAMyhC,OAEZzhC,MAAM,IAAMyhC,KACZzhC,MAAM,IAAMyhC,MAETzhC,OAGEowG,YAAc,SAAdA,YAAej3E,QAASk3E,aACjC,IAAIrkD,aACAskD,eAF6CC,sBAO7Cp3E,QAAQw2E,iBAHDa,WAJsCD,sBAI7Cj4E,MACQm4E,YALqCF,sBAK7Ch4E,OACA8G,QAN6CkxE,sBAM7ClxE,QAGAF,IAIAE,QAJAF,IACAoD,KAGAlD,QAHAkD,KACAgsB,OAEAlvB,QAFAkvB,OACA/rB,MACAnD,QADAmD,MAGAkuE,SACAL,YADAK,SAf6CC,sBAoB7Cx3E,QAAQm1E,eAFRR,aAlB6C6C,sBAkB7C7C,aACAJ,OAnB6CiD,sBAmB7CjD,OAGAC,SACAD,OADAC,SAtB6CiD,iBA6B7Cz3E,QAAQ9tB,SAJRg3F,YAzB6CuO,iBAyB7CvO,YACAoL,cA1B6CmD,iBA0B7CnD,cACAD,gBA3B6CoD,iBA2B7CpD,gBACA1+C,WA5B6C8hD,iBA4B7C9hD,WA5B6C+hD,sBAmC7C13E,QAAQ23E,oBAJRC,eA/B6CF,sBA+B7CE,eACAC,kBAhC6CH,sBAgC7CG,kBACAC,mBAjC6CJ,sBAiC7CI,mBACA9gD,SAlC6C0gD,sBAkC7C1gD,SAGQ+gD,cAERH,eAFAx4E,OACO44E,aACPJ,eADAz4E,MAEE84E,YAActD,aAAeN,gBAAkB,EAC/C6D,aAAgBzD,YAAY,EAAMD,SAAUD,OAAOC,UACnD2D,gBAAkBn4E,QAAQo4E,iBAC1BC,aAAer4E,QAAQs4E,cACvBj8F,QAAU2jB,QAAQu4E,SAClBz8F,OAASkkB,QAAQlkB,SACjBw6F,eAAiBwB,mBAAmB14E,OAE1C,OACI6vB,MACIxtB,EAAG,SAAAA,IACC,IAAM+2E,YAAcR,aAAe,EA+BnC,OA7BAvB,aAAaz2E,QAAS,IAAK42E,yBAAYv6F,SAClCm8F,YAAanB,WAAajuE,KAAOC,MAAQmvE,aAAc18F,OAAQotF,aAC5DqO,SAAWD,YAAc,MAEjCzkD,aAAiBwkD,WAAcr3E,QAAQy4E,gBAAgBzxG,OAChCmxG,gBAAgBh5E,MAEvCg4E,eAAiBG,YAAcQ,mBAAmBR,YAActgD,SAAWihD,YAEvEplD,aAAewlD,aAAal5E,OAAsB,IAAbq1E,WAErC0D,YAAY1D,SAA+B,OAApBD,OAAOC,UAAqB,GAAKA,SAGpD3hD,aAAewlD,aAAaj5E,SAC5B+3E,eAAiBG,YACjBzkD,aAAewlD,aAAaj5E,OAC5BY,QAAQm1E,cAAeP,gBAAgB,EAAOC,gBAAgB,MAGlEyC,YAAchB,gBACdt2E,QAAQm1E,cAAe9S,MAAM,IAGjCriE,QAAQ04E,eACJv5E,MAAO0zB,aACPzzB,OAAQ+3E,eACR12E,OAAqB,OAAb+zE,WAEL0D,aAEXpvG,EAAG,SAAAA,IACC,IAAI6vG,cAAgBtB,WACdmB,YAAcT,cAAgB,EAmBpC,OAjBAtB,aAAaz2E,QAAS,IAAK42E,yBAAYv6F,SAClCi7F,YAActxE,IAAMovB,OAASojD,YAAaA,aAAc18F,OAAQotF,aAC7DqO,SAAWF,WAAa,MAE3BA,WAAaf,eAAiB2B,aAAgBE,gBAAgBh5E,QAC/Dw5E,cAAgB,EAChB34E,QAAQm1E,cAAeP,gBAAgB,EAAOC,gBAAgB,KAGlE70E,QAAQ04E,eACJv5E,MAAOw5E,cACPv5E,OAAQk4E,YACR72E,QAAQ,IAER42E,WAAaf,gBACbt2E,QAAQm1E,cAAe9S,MAAM,IAE1B6V,cAGf3rE,MACI9K,EAAG,SAAAA,IACCg1E,aAAaz2E,QAAS,KAAM,EAAGq3E,WAAajuE,KAAOC,OAAQkuE,SAAWD,YAAc,MACpF,IAAMzwG,MAAQm5B,QAAQn5B,QAQtB,GALAgsD,cAAiBhsD,MAAM,GAAKA,MAAM,KAAO8uD,YAAc75C,QAAQ9U,OAAUmxG,gBAAgBh5E,MAGzFg4E,eAAiBG,YAAchB,eAAiBt/C,SAAWihD,YAEvDplD,aAAewlD,aAAal5E,OAAsB,IAAbq1E,SAErC0D,YAAY1D,SAAwB,OAAbA,UAAqB,GAAKA,SACjD0D,YAAYzD,YAAa,EAGrB5hD,aAAewlD,aAAaj5E,SAC5B+3E,eAAiB,EACjBtkD,aAAe,EACf7yB,QAAQm1E,cAAeP,gBAAgB,EAAOC,gBAAgB,IAC9D70E,QAAQn5B,OAAOwxG,aAAaj5E,OAAS,EAAGi4E,WAAagB,aAAaj5E,OAAS,UAE5E,GAAIu2B,WAAY,CACD0hD,WAAav7F,OAAO9U,OAAUmxG,gBAAgBh5E,MACjDk5E,aAAal5E,OACxBa,QAAQn5B,OAAOwxG,aAAaj5E,OAAS,EAAGi4E,WAAagB,aAAaj5E,OAAS,IAYnF,OATIk4E,YAAchB,gBACdt2E,QAAQm1E,cAAe9S,MAAM,EAAOuS,gBAAgB,EAAOC,gBAAgB,IAG/E70E,QAAQ04E,eACJv5E,MAAO0zB,aACPzzB,OAAQ+3E,eACR12E,OAAqB,OAAb+zE,WAEL0D,aAEXpvG,EAAG,SAAAA,IACC2tG,aAAaz2E,QAAS,KAAMs3E,YAAcliD,OAAQpvB,KAAMuxE,SAAWF,WAAa,MAEhF,IAAIsB,cAAgBtB,WAAaf,eAAiBt/C,SAAWihD,YAc7D,OAbIU,eAAiBR,gBAAgBh5E,QACjCw5E,cAAgB,EAChB34E,QAAQm1E,cAAeP,gBAAgB,EAAOC,gBAAgB,KAGlE70E,QAAQ04E,eACJv5E,MAAOw5E,cACPv5E,OAAQk4E,YACR72E,QAAQ,IAER42E,WAAaf,gBACbt2E,QAAQm1E,cAAe9S,MAAM,IAE1B6V,cAGfU,WACIn3E,EAAG,SAAAA,IACCy2E,YAAYzD,YAAa,EACzB,IAAM+D,YAAcZ,eAAez4E,MAAQ,EAG3Cs3E,aAAaz2E,QAAS,MAFLs0E,cAAgB,EAAIkE,aAEEpvE,KAAMiuE,WAAahuE,MAAQmvE,aAC9DjB,SAAWD,YAAc,MAE7B,IAAMzwG,MAAQm5B,QAAQn5B,QAGhBgyG,eAAiBhB,kBAAkB7wG,QAAU4wG,eAAez4E,MAAQg5E,gBAAgBh5E,OAe1F,OAduBt4B,MAAM,GAAKA,MAAM,GAGnBgyG,gBAAsC,OAApBtE,OAAOC,WAC1C0D,YAAY1D,UAAY,IAIxB8C,YAAchB,eAAiB2B,YAAcL,eAAex4E,SAC5DY,QAAQm1E,cAAeP,gBAAgB,IACnC0C,YAAchB,gBACdt2E,QAAQm1E,cAAe9S,MAAM,KAG9B6V,aAEXpvG,EAAG,SAAAA,IACCovG,YAAYzD,YAAa,EACzB,IAAM+D,YAAcZ,eAAex4E,OAAS,EAa5C,OAVAq3E,aAAaz2E,QAAS,KAAMs3E,YAAcliD,QAFzBk/C,cAAgB,EAAIkE,aAEwBA,YAAcxyE,KACvEuxE,SAAWF,WAAa,MAGxBA,WAAaO,eAAez4E,MAAQm3E,eAAiB2B,cACrDj4E,QAAQm1E,cAAeP,gBAAgB,IACnCyC,WAAaf,gBACbt2E,QAAQm1E,cAAe9S,MAAM,KAG9B6V,siBChPhB,IAAMY,iBAAmB,SAAnBA,mBAAoD,IAAhCtE,SAAgC9pG,UAAA1D,OAAA,QAAA4L,IAAAlI,UAAA,GAAAA,UAAA,GAArB,EAAGy0B,MAAkBz0B,UAAA1D,OAAA,EAAA0D,UAAA,QAAAkI,EAAXwsB,OAAW10B,UAAA1D,OAAA,EAAA0D,UAAA,QAAAkI,EACzDmmG,cAAgB35E,OAChB45E,aAAe75E,MACnB,GAAIq1E,SAAU,CACV,IAAMoB,OAAUpB,UAAY,GAAKrrG,KAAKgwC,GAAM,IAC5C6/D,aAAe7vG,KAAKsnB,IAAI2O,OAASj2B,KAAK6wC,IAAI47D,QAAUzsG,KAAKsnB,IAAI0O,MAAQh2B,KAAK4wC,IAAI67D,QAC9EmD,cAAgB5vG,KAAKsnB,IAAI0O,MAAQh2B,KAAK6wC,IAAI47D,QAAUzsG,KAAKsnB,IAAI2O,OAASj2B,KAAK4wC,IAAI67D,QAEnF,OAASz2E,MAAO65E,aAAc55E,OAAQ25E,gBAG7BE,iBAAY,SAAZA,UAAaj5E,SACtB,IAAIyB,EAAI,EACJ34B,EAAI,EACFowG,aAAel5E,QAAQk5E,eACvBhnG,OAAS8tB,QAAQ9tB,SAEnBg3F,YAGAh3F,OAHAg3F,YACAkE,QAEAl7F,OAFAk7F,QACA0H,QACA5iG,OADA4iG,QAEA5L,cAAgB6I,wBAChBtwE,OAAgB7uB,IAAZw6F,QAAwB8L,aAAa/5E,MAAQiuE,SAEjDlE,cAAgB4I,uBAChBhpG,OAAgB8J,IAAZkiG,QAAwBoE,aAAa95E,OAAS01E,SAEtD90E,QAAQ9tB,QAASk7F,QAAS3rE,EAAGqzE,QAAShsG,KAkB7BqwG,2BAA6B,SAA7BA,2BAA8Bn5E,SACvC,IAGIo5E,UAHAC,YAAc,GACdC,uBAA0Bn6E,MAAO,EAAGC,OAAQ,GAC5Cm6E,aAEE1B,qBACAxrE,MAAQrM,QAAQqM,QACdsoE,aAAiB30E,QAAQm1E,eAAzBR,aAP2C6E,gBAQtBx5E,QAAQ9tB,SAA7ByjD,WAR2C6jD,gBAQ3C7jD,WAAYv3D,KAR+Bo7G,gBAQ/Bp7G,KACZ82G,aAAiBl1E,QAAQj/B,eAAzBm0G,aACFuE,UAAYptE,MAAMpC,OAASoC,MAAM5B,UAAY4B,MAAMvwB,OA8BzD,OA3BAo5F,aAAax3E,SAASsC,QAAQ05E,iBAM9BN,WAHAA,UAAYzjD,YAAc8jD,aAGJlsG,IAAI,SAACosG,cAAe97G,GACtC,IAAMuZ,MAAQ4oB,QAAQ45E,iBAAiBD,cAAe97G,EAAGu7G,WAGnDxB,eAAiB1C,aAAaxxE,WAAWtsB,OAW/C,OARAygG,kBAAkBrsG,KAAKosG,gBAGnBA,eAAez4E,MAAQm6E,sBAAsBn6E,QAC7Ck6E,YAAcjiG,MACdmiG,UAAYv5E,QAAQy0E,aAAez0E,QAAQy0E,aAAa52G,MACxDy7G,sBAAwB1B,gBAErBxgG,QAGX89F,aAAax3E,SAASsC,QAAQ65E,iBAI1B/B,mBAHuBnD,aAAeO,aAAaxxE,WAAWtlC,OAAU+gC,MAAO,EAAGC,OAAQ,GAI1Fi6E,wBACAC,4CACAzB,oCACAuB,oBACAG,oBACAviD,SAAUh3B,QAAQo1E,gBAqDb0E,uBAAyB,SAAzBA,uBAA0B95E,QAAS+5E,eAAgBlzG,OAC5D,IAAIs4B,MACAC,OACEtjB,OAASkkB,QAAQlkB,SACfk7C,SAAiD+iD,eAAjD/iD,SAAU4gD,eAAuCmC,eAAvCnC,eAAgBE,mBAAuBiC,eAAvBjC,mBAJoCL,iBAK9Bz3E,QAAQ9tB,SAAxCmiG,gBAL8DoD,iBAK9DpD,gBAAiB1+C,WAL6C8hD,iBAK7C9hD,WACjBg/C,aAAiB30E,QAAQm1E,eAAzBR,aACQqF,cAAkBlC,mBAA1B14E,OACQ24E,cAAuCH,eAA/Cx4E,OAA8B44E,aAAiBJ,eAAxBz4E,MAK/B,GAHAA,MAAQt4B,OAASA,MAAMG,OAASH,MAAM,GAAKA,MAAM,GAAK,EAEtDu4B,OAAS,EACLu2B,WAAY,CACZ,IAAMskD,YAAcj6E,QAAQk6E,uBADhBjiF,MAGR9uB,KAAK2P,IAALjM,MAAA1D,KAAIgxG,wCAAQxkD,YAARh1C,OAAAw5F,wCAAuBr+F,UAC3B3S,KAAK6P,IAALnM,MAAA1D,KAAIgxG,wCAAQxkD,YAARh1C,OAAAw5F,wCAAuBr+F,WAG/BqjB,OAPYlH,KAAA,GAAAA,KAAA,IAOW9uB,KAAKsnB,IAAIwpF,cAAiBjC,aAAeh4E,QAAQo4E,iBAAiBj5E,OAS7F,OAJIC,OAHCD,OAAmB,IAAVA,MAGD44E,cAFA5uG,KAAK6P,IAAIg/F,aAAcD,gBAOhC54E,YACAC,OAJJA,SAAWu1E,aAAeqF,cAAgB3F,gBAAkB,GAAKr9C,WAgBxDojD,qBAAuB,SAAvBA,qBAAwBp6E,QAAS+5E,gBAC1C,IAAI36E,OACAD,MACErjB,OAASkkB,QAAQlkB,SACfk7C,SAAiD+iD,eAAjD/iD,SAAU4gD,eAAuCmC,eAAvCnC,eAAgBE,mBAAuBiC,eAAvBjC,mBAJ2BuC,iBAKrBr6E,QAAQ9tB,SAAxCmiG,gBALqDgG,iBAKrDhG,gBAAiB1+C,WALoC0kD,iBAKpC1kD,WACjBg/C,aAAiB30E,QAAQm1E,eAAzBR,aACQqF,cAAkBlC,mBAA1B14E,OACQ24E,cAAuCH,eAA/Cx4E,OAIR,GAFAA,OAAS,EACTD,MAHuDy4E,eAAxBz4E,MAI3Bw2B,WAAY,CACZ,IAAMskD,YAAcj6E,QAAQk6E,uBADhBlsC,OAGR7kE,KAAK2P,IAALjM,MAAA1D,KAAIgxG,wCAAQxkD,YAARh1C,OAAAw5F,wCAAuBr+F,UAC3B3S,KAAK6P,IAALnM,MAAA1D,KAAIgxG,wCAAQxkD,YAARh1C,OAAAw5F,wCAAuBr+F,WAG/BsjB,QAPY4uC,MAAA,GAAAA,MAAA,IAOY7kE,KAAKsnB,IAAIwpF,aAAgBlC,cAIrD,OACI34E,cACAD,MAJJA,QAAUw1E,aAAeqF,cAAgB,GAAKhjD,SAAWq9C,kBAYhDiG,0BAAqB,SAArBA,mBAAsBt6E,SAC/B,IAAMn5B,MAAQm5B,QAAQn5B,QAChBkzG,eAAiB/5E,QAAQ23E,oBACvBzO,YAAgBlpE,QAAQ9tB,SAAxBg3F,YACA7G,KAASriE,QAAQm1E,eAAjB9S,KACAiX,sBAAwDS,eAAxDT,sBAAuBF,UAAiCW,eAAjCX,UAAWvB,kBAAsBkC,eAAtBlC,kBAC1B0C,iBAAqBjB,sBAA7Bl6E,OACFo7E,aAAex6E,QAAQo4E,iBAAiBj5E,MAC9C,GAAI+pE,cAAgB4I,sBAAO5I,cAAgB2I,wBAAQ,KAAA4I,sBAI3CX,uBAAuB95E,QAAS+5E,eAAgBlzG,OAFhDs4B,OAF2Cs7E,sBAE3Ct7E,MACAC,QAH2Cq7E,sBAG3Cr7E,OAYJ,OATKD,QAAmB,IAAVA,SACVA,OAAQ04E,kBAAkBxgG,OAAO,SAACtY,EAAGO,GAAJ,OAC7BP,EAAIoK,KAAK2P,IAAIxZ,EAAE6/B,MAAO7/B,EAAE8/B,QAAUo7E,cAAc,KAE3C,IAATnY,OACAjjE,QAAS,EACTD,OAAQ,IAIRA,aACAC,gBAzBmC,IAAAs7E,sBAgCvCN,qBAAqBp6E,QAAS+5E,gBAF9B56E,MA9BuCu7E,sBA8BvCv7E,MACAC,OA/BuCs7E,sBA+BvCt7E,OAUJ,OAPKA,QAAqB,IAAXA,SACXA,OAASg6E,UAAUpyG,QAAUuzG,iBAAmBv6E,QAAQo4E,iBAAiBh5E,QAAUm7E,mBAE1E,IAATlY,OACAljE,MAAQ,IAIRA,YACAC,gBAwDKu7E,sBAAiB,SAAjBA,eAAkB36E,QAASlkB,QAAW,IAC/B8+F,QAAY56E,QAAQ9tB,SAA5B4J,OAMR,OAJI8+F,UACA9+F,OAAS8+F,SAGN/qC,aAAa/zD,YAGX++F,uBAAyB,SAAzBA,uBAA0B76E,QAASlkB,QAAW,IAC/CmpC,KAASjlB,QAAQ9tB,SAAjB+yC,KACF5Y,MAAQrM,QAAQqM,MAAMhtC,KAAK2gC,SAEjCqM,QAAQvwB,OAAOA,QACfmpC,MAAQ5Y,QAAQ4Y,OAChBjlB,QAAQ86E,QAAUzuE,QAAQvwB,UChVjBijF,aACTyX,kBACAuD,kBACAgB,2BACA7oG,QACI4/D,aAAc,SAAAA,aAAC9xC,QAASlhC,OACpB,IAAMk8G,UAAYz8G,OAAO4T,UAAW6tB,QAAQ00D,aACtCumB,gBAAkBpoC,kBAAmBmoC,YAC3Cl8G,MAAQ+zE,eAAeooC,gBAAiBn8G,QAElCu1G,gBAAkBlrG,KAAK6P,IAAIla,MAAMu1G,gBAAiB,GACxD,IAAM6G,sBDgVkB,SAAvBC,uBAA4D,IAApC3tG,IAAoC9C,UAAA1D,OAAA,QAAA4L,IAAAlI,UAAA,GAAAA,UAAA,MAA1BqE,KAA0BrE,UAAA1D,OAAA,QAAA4L,IAAAlI,UAAA,GAAAA,UAAA,MAAf0wG,WAAe1wG,UAAA1D,OAAA,EAAA0D,UAAA,QAAAkI,EACrE,SAAKrU,OAAO6M,KAAKoC,KAAKxG,SAAWzI,OAAO6M,KAAK2D,MAAM/H,SAG5Co0G,WAAWr4F,KAAK,SAAA3jB,KAAG,OAAIoO,IAAIpO,OAAS2P,KAAK3P,OCpVV+7G,CAC1Br8G,MAAOk8G,WAAY,eAAgB,WAAY,OAAQ,gBAErDzF,cAAgBv1E,QAAQq7E,sBAAsBv8G,OAEhDo8G,wBACAl7E,QAAQs7E,OAASt7E,QAAQk0E,YAAYp1G,OACrCkhC,QAAQu7E,MAAQv7E,QAAQw7E,WAAW18G,QAGvCkhC,QAAQy7E,eAAiB,SAAAxxE,OAAK,OAAIsrE,cAActrE,QAhBlB,IAAAz4B,OAwB1B1S,MALAy1G,OAnB0B/iG,OAmB1B+iG,OACAlS,KApB0B7wF,OAoB1B6wF,KACAuS,eArB0BpjG,OAqB1BojG,eACAC,eAtB0BrjG,OAsB1BqjG,eACAF,aAvB0BnjG,OAuB1BmjG,aASJ,OAPA30E,QAAQm1E,cACJZ,cACAlS,UACAuS,8BACAC,8BACAF,4BAEG71G,QAGfq2G,cACIrjC,aAAc,SAAAA,aAAC9xC,QAASlhC,OACpB,IAAMk8G,UAAYz8G,OAAO4T,UAAW6tB,QAAQ07E,mBAE5C,OADA58G,MAAQ+zE,eAAemoC,UAAWl8G,SAI1Co6G,gBACA7hF,SAEAxwB,OACIirE,aAAc,SAAAA,aAAC9xC,QAASlhC,OAGpB,OAFAkhC,QAAQqM,QAAQxlC,MAAM/H,OACtBkhC,QAAQk5E,aAAa,MACdp6G,QAIf21G,cACAz9C,YACA0hD,iBACA1Z,aACInvB,aAAc,SAAAA,aAAArpE,KAAG,OAAIA,0SC5CRm1G,kCAMjB,SAAAA,WAAazpG,OAAQnR,wKAAc66G,CAAAt2G,KAAAq2G,YAC/Br2G,KAAKgkF,IAAM15E,cAEXtK,KAAKu2G,cAAgB96G,aACrBuE,KAAK+hG,OAAS,KACd/hG,KAAKw2G,UACLx2G,KAAKw1G,WACLx1G,KAAKy2G,aAAc,EACnBz2G,KAAK02G,mBACL12G,KAAK0wG,eAEL,IAAMiG,OAASppC,kBAAmBvtE,KAAKglB,YAAYpF,iBAC7Cg3F,aAAerpC,eAAeopC,OAAQ/pG,QAEtCiqG,SAAW/vB,6BAAc,QACzB6T,YAAcic,aAAajc,YACjC36F,KAAKo0G,gBAAkB3rB,qCAAsBouB,SAAD,GAAAx7F,OAAcs/E,YAAd,WAC5C36F,KAAKu0G,eAAiB9rB,qCAAsBouB,SAAD,GAAAx7F,OAAcs/E,YAAd,eAE3Cl/F,aAAam0G,aAAax3E,SAASp4B,KAAKo0G,iBACxC,IAAM0C,KAAOr7G,aAAam0G,aAAaxxE,WAAW,KAElDp+B,KAAK8yG,kBAAqBj5E,MAAoB,EAAbi9E,KAAKj9E,MAAY,EAAGC,OAAQg9E,KAAKh9E,OAAS,GAC3E95B,KAAKgzG,cAAgBv3G,aAAam0G,aAAaxxE,WAAW,OAE1DyuC,sBAAsB7sE,KAAMy5F,aAC5Bz5F,KAAK4M,OAAOgqG,cAEZ52G,KAAKg2G,OAASh2G,KAAK4uG,YAAY5uG,KAAKovF,SACpCpvF,KAAKi2G,MAAQj2G,KAAKk2G,WAAWl2G,KAAKovF,SAClCpvF,KAAK+2G,8UAoBL,OAAO/2G,2CAUP,OAAIoF,UAAO1D,QACP1B,KAAKg2G,OAAL5wG,UAAA1D,QAAA,OAAA4L,EAAAlI,UAAA,GACOpF,MAEJA,KAAKg2G,yDAKZ,OADAh2G,KAAKw1G,WACEx1G,yCAUP,OAAIoF,UAAO1D,QACP1B,KAAKi2G,MAAL7wG,UAAA1D,QAAA,OAAA4L,EAAAlI,UAAA,GACOpF,MAEJA,KAAKi2G,8CAWZ,GAAI7wG,UAAO1D,OAAQ,CACf,IAAMs1G,YAAc3B,sBAAer1G,KAADoF,UAAA1D,QAAA,OAAA4L,EAAAlI,UAAA,IAKlC,OAJApF,KAAK+mC,QAAQvwB,OAAOwgG,aACpBh3G,KAAKw1G,QAAUx1G,KAAK+mC,QAAQvwB,SAC5BxW,KAAKi3G,6BACLj3G,KAAK4zG,aAAa,MACX5zG,KAEX,OAAOA,KAAKw1G,wFAIZx1G,KAAKy1G,wBAAwB5B,2BAA2B7zG,2DAUxD,OAAOA,KAAKu2G,8DASH3pG,QAAQ,IAEbqzC,KAIArzC,OAJAqzC,KAeJ,OATc2uD,2BACVhuE,QAHAh0B,OAHAg0B,QAOAutB,aAJAvhD,OAFAuhD,aAOA5Q,SALA3wC,OADA2wC,SAOA0C,UACA1+C,MANUvB,KAAKuB,QAOflG,KAAM2E,KAAKglB,YAAY3pB,6EAMR7B,OAAO,IAClBkmD,WAA6BlmD,MAA7BkmD,WAAY/nC,aAAiBne,MAAjBme,aAEpB,OAAI+nC,WACO,SAAA/a,OAAK,OAAI,SAACzjC,IAAK3I,GAAN,OAAYmnD,WAAW/nC,aAAazW,KAAMA,IAAK3I,EAAGosC,SAG/D,kBAAM,SAAAzjC,KAAG,OAAIyW,aAAazW,qEAIjClB,KAAK4zG,aAAa,MAClB5zG,KAAKuB,UAFY,IAAAimG,aASbxnG,KAAK4M,SALLqiG,OAJazH,aAIbyH,OACAlS,KALayK,aAKbzK,KACAuS,eANa9H,aAMb8H,eACAC,eAPa/H,aAOb+H,eACAF,aARa7H,aAQb6H,aAEJrvG,KAAK6vG,cACDZ,cACAlS,UACAuS,8BACAC,8BACAF,sFAIUhvG,KAAM4B,MAAO6xG,WAG3B,OAAO1xG,EAFWpC,KAAKm2G,gBAENrC,UAAV1xG,CAAqB/B,KAAM4B,qDAS1B2K,QAAQ,IACRg3F,YAAgBh3F,OAAhBg3F,YACFsT,UAAYvK,mBAAmB/I,aAErC,OAAIsT,UACaA,UAAUl3G,KAAK+mC,SAGzB,mEAW8C,IAAtClN,MAAsCz0B,UAAA1D,OAAA,QAAA4L,IAAAlI,UAAA,GAAAA,UAAA,GAA9B,EAAG00B,OAA2B10B,UAAA1D,OAAA,EAAA0D,UAAA,QAAAkI,EAAnBszB,QAAmBx7B,UAAA1D,OAAA,EAAA0D,UAAA,QAAAkI,EAAV2kG,SAAU7sG,UAAA1D,OAAA,EAAA0D,UAAA,QAAAkI,EACjDslG,eAEDhP,YACA5jG,KAAK4M,SADLg3F,YAiBH,OAdA5jG,KAAKkxG,gBAAiBr3E,YAAOC,cAAQ8G,kBAGjCgyE,YADAhP,cAAgB4I,sBAAO5I,cAAgB2I,wBACzBoF,YAAY3xG,MAAQiyG,oBAAYqB,UAAUn3E,IAE1Cw1E,YAAY3xG,MAAQiyG,oBAAYqB,UAAU9vG,IAI5DxD,KAAK6vG,cACDZ,OAAQ2D,cAEZ5yG,KAAKm3G,gBACLn3G,KAAK8vG,cACE9vG,2DASP,OAAOA,yDAGIo3G,WACX,GAAkB,OAAdA,gBAAoC9pG,IAAd8pG,UAG1B,OAAOp3G,KAAK+mC,OAAL/mC,CAAao3G,6DAUpB,OAAOp3G,KAAKkwD,OAAOwB,yEASO,QAAAmV,KAAAzhE,UAAA1D,OAARgf,OAAQ,IAAA7X,MAAAg+D,MAAAC,KAAA,EAAAA,KAAAD,KAAAC,OAARpmD,OAAQomD,MAAA1hE,UAAA0hE,MAE1B,OADA9mE,KAAKy0G,eF7LwB,SAAxB4C,sBAAyB38E,SAClC,IAAI43E,kBACIrD,OAAWv0E,QAAQm1E,eAAnBZ,OACAE,WAAyBF,OAAzBE,WAAYD,SAAaD,OAAbC,SAH0BoI,sBAW1CzD,2BAA2Bn5E,SAN3Bs5E,sBAL0CsD,sBAK1CtD,sBACAF,UAN0CwD,sBAM1CxD,UACAG,UAP0CqD,sBAO1CrD,UACAzB,mBAR0C8E,sBAQ1C9E,mBACAD,kBAT0C+E,sBAS1C/E,kBACA7gD,SAV0C4lD,sBAU1C5lD,SAEY6lD,YAAmCvD,sBAA3Cl6E,OAA4B09E,WAAexD,sBAAtBn6E,MAM7B,OAAsB,IAHPa,QAAQlkB,SAGZ9U,OACA,MAOX4wG,eAAiBkB,iBAAiBtE,UAJ9BoD,eADAnD,WACiB8E,WAEEp6E,MAAO29E,WAAY19E,OAAQy9E,cAES19E,MAAOy4E,eAAex4E,QAEhE,IAAb43B,WACA4gD,gBAAmBz4E,MAAO,EAAGC,OAAQ,KAGrCy4E,oCACA7gD,kBACA4gD,8BACAE,sCACAwB,4CACAF,uBEwJyCvsG,WAArB,GAAsBvH,MAAtBqb,OAA+BqF,UAC5C1gB,KAAKy0G,2EAgBZ,OANKz0G,KAAK4zG,iBACN5zG,KAAK4zG,aFzBsB,SAA1B6D,wBAA2B/8E,SACpC,IAAMn5B,MAAQm5B,QAAQn5B,QAChBkzG,eAAiB/5E,QAAQ23E,oBACvBzO,YAAgBlpE,QAAQ9tB,SAAxBg3F,YAHwC8T,uBAIjBh9E,QAAQm1E,eAA/B9S,KAJwC2a,uBAIxC3a,KAAMsS,aAJkCqI,uBAIlCrI,aACNmD,mBAAuBiC,eAAvBjC,mBAER,IAAa,IAATzV,KACA,OACIljE,MAAO,EACPC,OAAQ,GAVgC,IAcjC69E,cAAkBnF,mBAAzB34E,MAER,GAAI+pE,cAAgB4I,sBAAO5I,cAAgB2I,wBAAQ,KAAAqL,uBAI3CpD,uBAAuB95E,QAAS+5E,eAAgBlzG,OAFhDs4B,QAF2C+9E,uBAE3C/9E,MACAC,SAH2C89E,uBAG3C99E,OAIJ,OACID,MAHch2B,KAAK6P,IAAImmB,QAAO89E,eAI9B79E,iBAzBwC,IAAA+9E,uBA+B5C/C,qBAAqBp6E,QAAS+5E,gBAF9B56E,MA7B4Cg+E,uBA6B5Ch+E,MACAC,OA9B4C+9E,uBA8B5C/9E,OAKJ,OACID,YACAC,OAJcj2B,KAAK6P,IAAIomB,OAAQu1E,aAAesI,cAAgB,IERxCF,CAAwBz3G,OAC1CA,KAAK4zG,eACLD,iBAAU3zG,OAGPA,KAAK4zG,qDAQRp6G,OACJ,OAAOwG,KAAK+mC,QAAQgB,OAAOvuC,+DAUdw8C,GAAIC,IACjB,OAAQD,GAAIC,sDAGFD,GAAIC,IACd,OAAQj2C,KAAK+nC,OAAOiO,IAAKh2C,KAAK+nC,OAAOkO,yEAIrC,OAAOj2C,KAAKwW,+EAGQ65C,YACpB,OAAOA,+DAYP,OAAO,gDAWP,OACIv3D,KAAMkH,KAAKlH,KACXuC,KAAM2E,KAAK3E,KACXkG,MAAOvB,KAAKuB,QACZqL,OAAQ5M,KAAK4M,kDAwBjB,OAJI5M,KAAK+xB,UACL/xB,KAAKm3G,gBJvKV,SAASW,WAAYrH,cACxB,IAAM7jG,OAAS6jG,aAAa7jG,SACtBijG,aAAeY,aAAaZ,eAC5BD,aAAea,aAAah1G,eAAem0G,aAC3C79E,MAAQ0+E,aAAa1+E,QACrBxwB,MAAQkvG,aAAalvG,QACrB2uD,KAAOugD,aAAavgD,OACpBnpB,MAAQ0pE,aAAa1pE,QAEPgxE,cAIftH,aAJD8D,eACiByD,eAGhBvH,aAHD2D,gBACgB6D,kBAEfxH,aAFD0F,eACA9lD,WACCogD,aADDpgD,WAGAuzC,YAQCh3F,OARDg3F,YACA9qG,KAOC8T,OAPD9T,KACAgvG,QAMCl7F,OANDk7F,QACA0H,QAKC5iG,OALD4iG,QACAT,gBAICniG,OAJDmiG,gBACA7vE,UAGCtyB,OAHDsyB,UACApI,GAEClqB,OAFDkqB,GACA6jE,YACC/tF,OADD+tF,YAGAoC,KAGA8S,aAHA9S,KACAsS,aAEAQ,aAFAR,aACAJ,OACAY,aADAZ,OAGJ,GAAKlS,KAAL,CAIA,IAAMrrC,SAAW++C,aAAaX,cAExBU,gBAAkBxpB,YAAYF,6BAAc/0D,OAAQ,KAAM0+E,cAA7B,GAAAp1F,OAA+C6jB,cAC9E,SAAAplC,KAAG,OAAIA,IAAI8S,SAASkqB,KAGxB84E,aAAax3E,SAAS4/E,gBAEtB,IAAM7D,UAAYptE,MAAMpC,OAASoC,MAAM5B,UAAY4B,MAAMvwB,OAEzD05C,KAAKxQ,WAAWu4D,kBAAkB5nD,YAAcH,KAAKG,cAAgB8jD,cAGrE,IAAMjD,eAAiBrtG,KAAKsnB,IAAI5pB,MAAM,GAAKA,MAAM,IAG3C22G,WAAazH,aAAagF,0BAA0BzB,sBAG1DxD,gBAAgBn/C,KAAK,YAArB,aAAAh2C,OAA+CysF,QAA/C,KAAAzsF,OAA0Dm0F,QAA1D,MACAqB,+BAAiBJ,eACS,IAAtBxB,OAAOE,YAAqC,IAAbz9C,SAC/B8+C,gBAAgBh/C,aACCoyB,SAAS,KACTlY,GAAG,MAAO+kC,aAAaG,6BACvBl4G,KAAKw3D,MAEtBsgD,gBAAgB93G,KAAKw3D,MAEzBsgD,gBAAgBz/C,UAAU,SAASkrB,QAAnC,GAAA5gE,OAA8Cs/E,YAA9C,WAAmE,GACnE6V,gBAAgBz/C,UAAU,cAAckrB,QAAxC,GAAA5gE,OAAmDs/E,YAAnD,gBAA6E,GAG5D6V,gBAAgBz/C,UAAU,cAClCkrB,QAAT,GAAA5gE,OAAoBs/E,YAApB,WAAyC,GACxB1e,QADjB,GAAA5gE,OAC4Bs/E,YAD5B,WAAAt/E,OACiDyb,KAAM,GAEvDy5E,oCAAsBC,gBAAiBC,aAAc/+C,UAGrD,IAAMq/C,SAAW/pB,YAAYwpB,gBAAiB,QAAS13G,MAA3B,GAAAuiB,OAAqCs/E,YAArC,eACXtpC,KAAK,cAAe,UACpB4qB,QAFA,GAAA5gE,OAEWs/E,YAFX,eAAAt/E,OAEoCyb,KAAM,GAC1Cz2B,KAAK,SAAAxH,GAAC,OAAIA,IAG3Bk4G,SAAS90B,QAAQ2xB,QAASyB,cAG1B,IAAM4B,YAAcC,eAAiB,EAGrCtB,aAAax3E,SAAS2/E,eACtB,IAAMI,cAAgBvI,aAAaxxE,WAAWtlC,MACxCmvB,UACFiwF,sBACAxmD,kBACAq9C,gCACAiC,eAAgBmH,cAAcr+E,OAC9B69E,cAAeQ,cAAct+E,MAC7B21E,gBACA1H,gBACAmJ,wBACAC,eAAgBT,aAAaS,kBAGjCJ,6BAAeC,SAAUnN,YAAa37E,WIoE9B6vF,CAAW93G,OAERA,6CAWP,OADA8mF,6BAAc9mF,KAAK+xB,SAASyT,SACrBxlC,uDASP,OAAOA,mDAUP,IAAMuB,MAAQvB,KAAKuB,QACnB,OAAOA,MAAM,GAAKA,MAAM,uEAUxB,IAAMwlC,MAAQ/mC,KAAK+mC,QACbxlC,MAAQwlC,MAAMxlC,QACdiV,OAASuwB,MAAMvwB,SAErB,OAAO3S,KAAKsnB,IAAI5pB,MAAM,GAAKA,MAAM,KAAOiV,OAAO,GAAKA,OAAO,0DAU3D,OAAOgwE,QAAQ4xB,IAAIp4G,KAAK+2G,sGAIxB,IAAI1tB,UACEY,QAAU,IAAIzD,QAAQ,SAACn+D,SACzBghE,UAAYhhE,UAIhB,OAFAroB,KAAK+2G,uBAAuB7wG,KAAK+jF,SAE1B,WACHZ,4CAjFJ,OAAOrpF,KAAKgkF,4DApTZ,OAAOpkE,4VC/DMy4F,mhBAEJzrG,QAAQ,IAEbrL,MACAqL,OADArL,MAEEstG,aAAeL,SAASl4D,OAE9B,OADAt2C,KAAKg2G,OAASnH,eAAettG,MAAMA,OAC5BvB,KAAKg2G,2DAGDoB,WACX,OAAOp3G,KAAKg2G,OAAOoB,WAAa,yDAGpB5gG,QAIZ,OAHIA,OAAO9U,QAAU8U,OAAO,KAAOA,OAAO,KACtCA,QAAU,EAAgB,GAAZA,OAAO,KAElBA,4TCnBM8hG,wfAEJ1rG,QAAQ,IAEbrL,MAEAqL,OAFArL,MACA0+C,KACArzC,OADAqzC,KAEE4uD,aAAeL,SAAS1pE,IAE9B,OADA9kC,KAAKg2G,OAASnH,eAAettG,MAAMA,OAAO0+C,KAAKA,MACxCjgD,KAAKg2G,2DAGDoB,WACX,OAAIA,WAAa,EACN,EAGJp3G,KAAKg2G,OAAOoB,WAAa,yDAGpB5gG,QACZ,OAAIA,OAAO,IAAM,GACL3S,KAAK6P,IAAI,EAAG8C,OAAO,IAAK3S,KAAK6P,IAAI,EAAG8C,OAAO,KAC9CA,0UCvBI+hG,wfAEJ3rG,QAAQ,IAEbrL,MAEAqL,OAFArL,MACAg8C,SACA3wC,OADA2wC,SAEEsxD,aAAeL,SAASv6F,IAE9B,OADAjU,KAAKg2G,OAASnH,eAAettG,MAAMA,OAAOg8C,SAASA,UAC5Cv9C,KAAKg2G,2DAGDoB,WACX,OAAOp3G,KAAKg2G,OAAOoB,WAAa,yDAGpB5gG,QACZ,OAAOA,28CCPR,IAAMgiG,iBAAeC,8BAAAC,oBACvBrL,IAAMiL,qBADiBG,8BAAAC,iBAEvBpL,IAAMiL,qBAFiBE,8BAAAC,iBAGvB3L,OAASsL,2BAHcK,kBAMPC,mDACjB,SAAAA,cAAa/rG,OAAQnR,cAAc,mKAAAm9G,CAAA54G,KAAA24G,eAC/B/rG,OAAO8yC,WAAa9yC,OAAO8yC,YAAe,SAAAx+C,KAAG,OAAIA,KADlB23G,yCAAA74G,KAAA84G,8BAAAH,eAAAjgH,KAAAsH,KAEzB4M,OAAQnR,sZAHqB46G,qUAW1BzpG,QAAQ,IAEbqzC,KAIArzC,OAJAqzC,KACArf,QAGAh0B,OAHAg0B,QACAutB,aAEAvhD,OAFAuhD,aACA5Q,SACA3wC,OADA2wC,SAEEh8C,MAAQvB,KAAKuB,QACbw3G,gBAAkBP,gBAAgBrqD,cAExCnuD,KAAKg5G,cAAgB,IAAID,gBACzB,IAAIhyE,MAAQ/mC,KAAKg5G,cAAcpK,aAC3BhuE,gBACA2c,kBACA0C,UACA1+C,cAIJ,OADAwlC,MAAQA,MAAM4Y,2DAeHy3D,WACX,GAAkB,OAAdA,gBAAoC9pG,IAAd8pG,UAG1B,OAAOp3G,KAAKg5G,cAAc3c,cAAc+a,6DAQ7B,IAAA6B,mBAIPj5G,KAAK6vG,eAFLP,eAFO2J,mBAEP3J,eACAC,eAHO0J,mBAGP1J,eAEEr/C,KAAOlwD,KAAKkwD,OAIlB,OAHAA,KAAKK,eAAiC,IAAnB++C,eAA2B,EAAI,GAClDp/C,KAAKM,eAAiC,IAAnB++C,eAA2B,EAAI,GAE3Cr/C,KAAKwB,mDAWZ,GAAItsD,UAAO1D,OAAQ,CACf,IAAM01G,UAAYp3G,KAAKg5G,cAAcE,eAAe7D,sBAAer1G,KAADoF,UAAA1D,QAAA,OAAA4L,EAAAlI,UAAA,KAIlE,OAHAmwG,uBAAuBv1G,KAAMo3G,WAC7Bp3G,KAAKi3G,6BACLj3G,KAAK4zG,aAAa,MACX5zG,KAEX,OAAOA,KAAKw1G,sEAWyC,IAAtC37E,MAAsCz0B,UAAA1D,OAAA,QAAA4L,IAAAlI,UAAA,GAAAA,UAAA,GAA9B,EAAG00B,OAA2B10B,UAAA1D,OAAA,EAAA0D,UAAA,QAAAkI,EAAnBszB,QAAmBx7B,UAAA1D,OAAA,EAAA0D,UAAA,QAAAkI,EAAV2kG,SAAU7sG,UAAA1D,OAAA,EAAA0D,UAAA,QAAAkI,EACjDslG,eAEDhP,YACA5jG,KAAK4M,SADLg3F,YAiBH,OAdA5jG,KAAKkxG,gBAAiBr3E,YAAOC,cAAQ8G,kBAGjCgyE,YADAhP,cAAgB4I,sBAAO5I,cAAgB2I,wBACzBoF,YAAY3xG,MAAQiyG,oBAAYqB,UAAUn3E,IAE1Cw1E,YAAY3xG,MAAQiyG,oBAAYqB,UAAU9vG,IAI5DxD,KAAK6vG,cACDZ,OAAQ2D,cAEZ5yG,KAAKm3G,gBACLn3G,KAAK8vG,cACE9vG,2DAUM,IAETqwD,WACArwD,KAAK4M,SADLyjD,WAGAi/C,eACAtvG,KAAK6vG,eADLP,eAEEp/C,KAAOlwD,KAAKkwD,OAElB,OAAKo/C,eAKDj/C,YACAA,sBAAsBxnD,OAAS7I,KAAKkwD,OAAOG,WAAWA,YAC/CrwD,OAEXkwD,KAAKG,WAAWrwD,KAAKmzG,iBAEdnzG,OAVHkwD,KAAKG,eACErwD,4DAmBX,IADam5G,cAKTn5G,KAAK4M,SAFLg3F,YAHSuV,cAGTvV,YACAvzC,WAJS8oD,cAIT9oD,WAEE9uD,MAAQvB,KAAKuB,QACb2uD,KAAOlwD,KAAKkwD,OAEZghD,eAAiBrtG,KAAKsnB,IAAI5pB,MAAM,GAAKA,MAAM,IAE3C22G,WAAal4G,KAAKy1G,0BAA0BzB,sBAElD,OAAI3jD,WACOH,KAAKnpB,QAAQpC,MAAM0rB,YNxJN,SAAnB+oD,iBAAoBlI,eAAgBmI,SAAUnpD,KAAMugD,cAC7D,IAAM9rE,MAAQurB,KAAKnpB,QAAQpC,QACnByqE,cAAkBqB,aAAa7jG,SAA/BwiG,cACFkK,WAAa30E,MAAMjjC,OACrB63G,eAAiBD,WAQrB,OANIA,YAAyB,IAAXD,UAAkBnI,iBAChCqI,eAAiB11G,KAAK8M,MAAMugG,gBAA6B,IAAXmI,YAGlDE,eAAiB11G,KAAK2P,IAAI47F,cAAevrG,KAAK6P,IAAI,EAAG6lG,iBAE9CrpD,KAAKnpB,QAAQpC,MAAM40E,gBMgJfH,CAAiBlI,eAFbgH,WAAWtU,cAAgB2I,yBAAU3I,cAAgB4I,qBAAM,QAAU,UAE9Bt8C,KAAMlwD,0EAIxD,OAAOuzE,gBAAgBvzE,KAAK4M,SAASyjD,sEAWvBs/C,UAAU,IAEpB/L,YACA5jG,KAAK4M,SADLg3F,YAOAsL,SAHAlvG,KAAK6vG,eADLZ,OAIAC,SAEEh/C,KAAOlwD,KAAKkwD,OACZvrB,MAAQurB,KAAKnpB,QAAQpC,QAZH60E,sBAaEx5G,KAAKy1G,0BAA0BlD,kBAAkB,GAAnE14E,MAbgB2/E,sBAahB3/E,MAAOC,OAbS0/E,sBAaT1/E,OAWf,OAVAo2B,KAAKI,cAAc,SAACz3D,GAChB,GAAIA,IAAM8rC,MAAM,GAAI,CAChB,GAAKi/D,cAAgB6I,uBAAQ7I,cAAgB8I,uBACzC,uBAAArxF,OAAyBye,OAAU,EAAnC,OAEJ,IAAK8pE,cAAgB4I,sBAAO5I,cAAgB2I,2BAAY2C,SACpD,mBAAA7zF,OAAoBwe,MAAQ,EAA5B,QAAqC,EAArC,OAEN,MAAO,KAEN81E,+CAzKP,OAAO5C,qtDCrDM0M,ssBAAiBpD,iTASrBzpG,QACT,OAAA8sG,KAAAC,yBAAAF,SAAAp/G,WAAA,cAAA2F,MAAAtH,KAAAsH,KAAyB4M,sEAsB4B,IAAtCitB,MAAsCz0B,UAAA1D,OAAA,QAAA4L,IAAAlI,UAAA,GAAAA,UAAA,GAA9B,EAAG00B,OAA2B10B,UAAA1D,OAAA,EAAA0D,UAAA,QAAAkI,EAAnBszB,QAAmBx7B,UAAA1D,OAAA,EAAA0D,UAAA,QAAAkI,EAAV2kG,SAAU7sG,UAAA1D,OAAA,EAAA0D,UAAA,QAAAkI,EACjDslG,eAEDhP,YACA5jG,KAAK4M,SADLg3F,YAgBH,OAbA5jG,KAAKkxG,gBAAiBr3E,YAAOC,cAAQ8G,kBAGjCgyE,YADAhP,cAAgB4I,sBAAO5I,cAAgB2I,wBACzBoF,YAAY3xG,MAAQiyG,oBAAYhrE,KAAK9K,IAErCw1E,YAAY3xG,MAAQiyG,oBAAYhrE,KAAKzjC,IAIvDxD,KAAK6vG,cACDZ,OAAQ2D,cAEZ5yG,KAAKm3G,gBACEn3G,2DAUP,IACIs4B,WADA62E,WAAa,GAEX34F,OAASxW,KAAKwW,SACZo5F,aAAiB5vG,KAAKu2G,cAAtB3G,aAJKgK,cAKmB55G,KAAK4M,SAA7ByjD,WALKupD,cAKLvpD,WAAYzvB,QALPg5E,cAKOh5E,QACZquE,OAAWjvG,KAAK6vG,eAAhBZ,OANK4K,oBAO8C75G,KAAKozG,gBAAhDpB,YAPH6H,oBAOL//E,OAA4Bi4E,WAPvB8H,oBAOgBhgF,MAAmBsB,OAPnC0+E,oBAOmC1+E,OAPnC2+E,kBAQatG,iBAAiBvE,OAAOC,SAAU6C,WAAYC,aAAhEn4E,MARKigF,kBAQLjgF,MAAOC,OARFggF,kBAQEhgF,OAaf,GAXAu2B,YAAcrwD,KAAKkwD,OAAOG,WAAWA,YACrC8+C,WAAa9+C,YAAc75C,OAG3Bo5F,aAAax3E,SAASp4B,KAAKo0G,iBAGJ,iBAAZxzE,SAAwBA,SAAW,GAAKA,SAAW,GAC1D5gC,KAAK+mC,QAAQnG,QAAQA,SAGrBpqB,QAAUA,OAAO9U,OAAQ,CACzB,IAAM6b,OAAS8yC,YAAc75C,OACvBy5F,cAAgBjwG,KAAKm2G,eAAe54F,QAC1C4xF,WAAa5xF,OAAOtV,IAAI,SAACpP,EAAGN,GAIxB,OAHAq3G,aAAa70E,uBAAsB,GAEnCzC,WAAas3E,aAAa50E,aAAai1E,cAAcp3G,EAAGN,GAAIshC,MAAOC,OAAQqB,QACpEy0E,aAAa5qF,YAAYqT,YAAYC,cAIpD,OADAt4B,KAAKmvG,WAAWA,YACTnvG,+DAeP,OALKA,KAAK4zG,iBACN5zG,KAAK4zG,aAAaoB,0BAAmBh1G,OACrC2zG,iBAAU3zG,MACVA,KAAK4zG,gBAEF5zG,KAAK4zG,qEASZ,OAAO5zG,KAAKkwD,OAAOnpB,QAAQvwB,6EAGRhd,OAAO,IAAAib,MAAAzU,KAClB0/C,WAAelmD,MAAfkmD,WAER,OAAIA,WACO,SAAA/a,OAAK,OAAI,SAACzjC,IAAK3I,GAAN,OAAYmnD,WAAWx+C,IAAKA,IAAK3I,EAAGosC,SAEjD,kBAAM,SAAAzjC,KAAG,OAAIuT,MAAKilF,aAALjlF,CAAmBvT,2DAUvC,OAAOlB,KAAK+mC,QAAQG,8DAST,IAAA6yE,oBAIP/5G,KAAK6vG,eAFLP,eAFOyK,oBAEPzK,eACAC,eAHOwK,oBAGPxK,eAEEr/C,KAAOlwD,KAAKkwD,OAIlB,OAFAA,KAAKK,cAAc++C,eAAiB,EAAI,GACxCp/C,KAAKM,cAAc++C,eAAiB,EAAI,GACjCr/C,KAAKwB,6DAGF1b,GAAIC,IACd,OAAOj2C,KAAK+mC,QAAQW,aAAasO,GAAIC,4DASxBD,GAAIC,IACjB,IAAMlP,MAAQ/mC,KAAK+mC,QACbxlC,MAAQwlC,MAAMxlC,QACd+hB,QAAU/hB,MAAM,GAAKA,MAAM,GAE3B2iE,OAASlkE,KAAK0nC,aAAasO,GAAIC,IAGrC,OAFWlP,MAAMzjB,QAAU4gD,OAAOA,OAAOxiE,OAAS,GAAKwiE,OAAO,IACnDn9B,MAAMzjB,QAAU4gD,OAAO,GAAKA,OAAOA,OAAOxiE,OAAS,IAAMqlC,MAAMG,mDAxJ1E,OAAO8lE,yuDCbMgN,yCAEjB,SAAAA,WAAwB,IAAAhV,iBAAAvwF,8JAAAwlG,CAAAj6G,KAAAg6G,UAAA,QAAAnzC,KAAAzhE,UAAA1D,OAARgf,OAAQ,IAAA7X,MAAAg+D,MAAAC,KAAA,EAAAA,KAAAD,KAAAC,OAARpmD,OAAQomD,MAAA1hE,UAAA0hE,MAAA,OACpBryD,MAAAylG,oCAAAl6G,MAAAglG,iBAAAmV,yBAAAH,WAAAthH,KAAA6O,MAAAy9F,kBAAAhlG,MAAAqb,OAASqF,WACJuyF,SAAW/zD,IAFIzqC,8XAFU4hG,iTAcrB90G,OACT,IAAIwlC,MAAQqzE,cAAAD,yBAAAH,SAAA3/G,WAAA,cAAA2F,MAAAtH,KAAAsH,KAAkBuB,OAG9B,OADAwlC,MAAQA,MAAM4Y,qDAqBN/yC,QAAQ,IACRg3F,YAAgBh3F,OAAhBg3F,YACFsT,UAAYvK,mBAAmB/I,aAErC,OAAIsT,UACaA,UAAUl3G,KAAK+mC,SAGzB,yEAGYvtC,OAAO,IAAAmb,OAAA3U,KAClB0/C,WAAelmD,MAAfkmD,WAER,OAAIA,WACO,SAAC/a,OACJ,IAAM01E,SAAW11E,MAAM18B,IAAI,SAAAxO,GAAC,OAAIA,EAAE8Q,YAClC,OAAO,SAACrJ,IAAK3I,GAAN,OAAYmnD,WAAWx+C,IAAKA,IAAIqJ,UAAWhS,EAAG8hH,YAGtD,kBAAM,SAAAh6G,MAAI,OAAIsU,OAAKoyB,QAAQ2Y,YAAb/qC,CAA0BtU,0DASpC,IAAA44G,mBAIPj5G,KAAK6vG,eAFLP,eAFO2J,mBAEP3J,eACAC,eAHO0J,mBAGP1J,eAEEr/C,KAAOlwD,KAAKkwD,OAGlB,OAFAA,KAAKK,eAAiC,IAAnB++C,eAA2B,EAAI,GAClDp/C,KAAKM,eAAiC,IAAnB++C,eAA2B,EAAI,GAClD6K,cAAAD,yBAAAH,SAAA3/G,WAAA,cAAA2F,MAAAtH,KAAAsH,4DAUA,OAAOA,KAAK4M,SAASyjD,YAAcrwD,KAAK+mC,QAAQpC,gDAU3C3B,MAEL,OADAhjC,KAAKizG,SAAWpvG,KAAK2P,IAAIxT,KAAKizG,SAAUjwE,MACjChjC,6CAWP,GAAIoF,UAAO1D,OAAQ,CACf,IAAMs1G,YAAc3B,sBAAer1G,KAADoF,UAAA1D,QAAA,OAAA4L,EAAAlI,UAAA,IAIlC,OAHAmwG,uBAAuBv1G,KAAMg3G,aAC7Bh3G,KAAKi3G,6BACLj3G,KAAK4zG,aAAa,MACX5zG,KAEX,OAAOA,KAAKw1G,kEAeZ,OALKx1G,KAAK4zG,iBACN5zG,KAAK4zG,aAAaoB,0BAAmBh1G,OACrCA,KAAK4zG,eACLD,iBAAU3zG,OAEPA,KAAK4zG,mFAIZ,OAAOrgC,gBAAgBvzE,KAAK4M,SAASyjD,0EAWgB,IAAtCx2B,MAAsCz0B,UAAA1D,OAAA,QAAA4L,IAAAlI,UAAA,GAAAA,UAAA,GAA9B,EAAG00B,OAA2B10B,UAAA1D,OAAA,EAAA0D,UAAA,QAAAkI,EAAnBszB,QAAmBx7B,UAAA1D,OAAA,EAAA0D,UAAA,QAAAkI,EAAV2kG,SAAU7sG,UAAA1D,OAAA,EAAA0D,UAAA,QAAAkI,EACjDslG,eAEDhP,YACA5jG,KAAK4M,SADLg3F,YAiBH,OAdA5jG,KAAKkxG,gBAAiBr3E,YAAOC,cAAQ8G,kBAGjCgyE,YADAhP,cAAgB4I,sBAAO5I,cAAgB2I,wBACzBoF,YAAY3xG,MAAQiyG,oBAAYtoD,KAAKxtB,IAErCw1E,YAAY3xG,MAAQiyG,oBAAYtoD,KAAKnmD,IAIvDxD,KAAK6vG,cACDZ,OAAQ2D,cAEZ5yG,KAAKm3G,gBACLn3G,KAAK8vG,cACE9vG,2DAUP,IAAImvG,WACA72E,WACI+3B,WAAerwD,KAAK4M,SAApByjD,WACA4+C,OAAWjvG,KAAK6vG,eAAhBZ,OAJK4K,oBAK8C75G,KAAKozG,gBAAhDpB,YALH6H,oBAKL//E,OAA4Bi4E,WALvB8H,oBAKgBhgF,MAAmBsB,OALnC0+E,oBAKmC1+E,OACxCy0E,aAAiB5vG,KAAKu2G,cAAtB3G,aACFp5F,OAASxW,KAAKmzG,gBAEpB9iD,YAAcrwD,KAAKkwD,OAAOG,WAAWA,YATxB,IAAAypD,kBAWatG,iBAAiBvE,OAAOC,SAAU6C,WAAYC,aAAhEn4E,MAXKigF,kBAWLjgF,MAAOC,OAXFggF,kBAWEhgF,OAOf,GALAq1E,WAAa9+C,YAAc75C,OAG3Bo5F,aAAax3E,SAASp4B,KAAKo0G,iBAEvB59F,QAAUA,OAAO9U,OAAQ,CACzB,IAAM6b,OAAS8yC,YAAc75C,OACvBy5F,cAAgBjwG,KAAKm2G,eAAe54F,QAC1C4xF,WAAa5xF,OAAOtV,IAAI,SAACpP,EAAGN,GAIxB,OAHAq3G,aAAa70E,uBAAsB,GAEnCzC,WAAas3E,aAAa50E,aAAai1E,cAAcp3G,EAAGN,GAAIshC,MAAOC,OAAQqB,QACpEy0E,aAAa5qF,YAAYqT,YAAYC,cAIpD,OADAt4B,KAAKmvG,WAAWA,YACTnvG,2CA9KP,OAAOitG,qBC3CFqN,WACTC,MAAQrnE,IAAK,SAAUF,IAAK,eAC5BwnE,WAAatnE,IAAK,SAAUF,IAAK,eACjCynE,SAAWvnE,IAAK,SAAUF,IAAK,eAC/B0nE,UAAYxnE,IAAK,SAAUF,IAAK,cAChC2nE,eAAiBznE,IAAK,SAAUF,IAAK,eACrC4nE,iBAAmB1nE,IAAK,SAAUF,IAAK,cACvC6nE,aAAe3nE,IAAK,SAAUF,IAAK,eACnC8nE,QAAU5nE,IAAK,SAAUF,IAAK,eAC9B+nE,YAAc7nE,IAAK,SAAUF,IAAK,eAClCgoE,YAAc9nE,IAAK,SAAUF,IAAK,eAClCioE,WAAa/nE,IAAK,SAAUF,IAAK,aACjCkoE,SAAWhoE,IAAK,SAAUF,IAAK,aAC/BmoE,WAAajoE,IAAK,SAAUF,IAAK,aACjCooE,SAAWloE,IAAK,SAAUF,IAAK,WAC/BqoE,KAAOnoE,IAAK,SAAUF,IAAK,WAC3BsoE,WAAapoE,IAAK,SAAUF,IAAK,YACjCuoE,QAAUroE,IAAK,SAAUF,IAAK,aAC9BwoE,OAAStoE,IAAK,SAAUF,IAAK,cAC7ByoE,YAAcvoE,IAAK,SAAUF,IAAK,aAClC0oE,QAAUxoE,IAAK,SAAUF,IAAK,aAC9B2oE,MAAQzoE,IAAK,SAAUF,IAAK,aAC5B4oE,QAAU1oE,IAAK,SAAUF,IAAK,aAC9B6oE,aAAe3oE,IAAK,SAAUF,IAAK,eACnC8oE,cAAgB5oE,IAAK,SAAUF,IAAK,eACpC+oE,sBAAwB7oE,IAAK,SAAUF,IAAK,eAC5CgpE,YAAc9oE,IAAK,SAAUF,IAAK,eAClCipE,UAAY/oE,IAAK,SAAUF,IAAK,eAChCkpE,WAAahpE,IAAK,SAAUF,IAAK,eACjCmpE,eAAiBjpE,IAAK,SAAUF,IAAK,eACrCopE,OAASlpE,IAAK,SAAUF,IAAK,eAC7BqpE,WAAanpE,IAAK,SAAUF,IAAK,eACjCspE,UAAYppE,IAAK,SAAUF,IAAK,eAChCupE,gBAAkBrpE,IAAK,SAAUF,IAAK,eACtCwpE,QAAUtpE,IAAK,SAAUF,IAAK,eAC9BypE,aAAevpE,IAAK,SAAUF,IAAK,eACnC0pE,OAASxpE,IAAK,SAAUF,IAAK,eAC7B2pE,WAAazpE,IAAK,SAAUF,IAAK,eACjC4pE,KAAO1pE,IAAK,SAAUF,IAAK,eAC3B6pE,WAAa3pE,IAAK,SAAUF,IAAK,eACjC8pE,YAAc5pE,IAAK,SAAUF,IAAK,cAClC+pE,WAAa7pE,IAAK,SAAUF,IAAK,cACjCgqE,eAAiB9pE,IAAK,SAAUF,IAAK,cACrCiqE,MAAQ/pE,IAAK,SAAUF,IAAK,cAC5BkqE,WAAahqE,IAAK,SAAUF,IAAK,cACjCmqE,aAAejqE,IAAK,SAAUF,IAAK,aACnCoqE,QAAUlqE,IAAK,SAAUF,IAAK,aAC9BqqE,OAASnqE,IAAK,SAAUF,IAAK,aAC7BsqE,QAAUpqE,IAAK,SAAUF,IAAK,WAC9BuqE,gBAAkBrqE,IAAK,SAAUF,IAAK,aACtCwqE,OAAStqE,IAAK,SAAUF,IAAK,aAC7ByqE,WAAavqE,IAAK,SAAUF,IAAK,cACjC0qE,aAAexqE,IAAK,SAAUF,IAAK,cACnC2qE,WAAazqE,IAAK,SAAUF,IAAK,aACjC4qE,MAAQ1qE,IAAK,SAAUF,IAAK,WAC5B6qE,WAAa3qE,IAAK,SAAUF,IAAK,aACjC8qE,YAAc5qE,IAAK,SAAUF,IAAK,aAClC+qE,aAAe7qE,IAAK,SAAUF,IAAK,cACnCgrE,aAAe9qE,IAAK,SAAUF,IAAK,aACnCirE,mBAAqB/qE,IAAK,SAAUF,IAAK,aACzCkrE,YAAchrE,IAAK,SAAUF,IAAK,eAClCmrE,WAAajrE,IAAK,SAAUF,IAAK,eACjCorE,cAAgBlrE,IAAK,SAAUF,IAAK,eACpCqrE,gBAAkBnrE,IAAK,SAAUF,IAAK,cACtCsrE,UAAYprE,IAAK,SAAUF,IAAK,aAChCurE,aAAerrE,IAAK,SAAUF,IAAK,aACnCwrE,OAAStrE,IAAK,SAAUF,IAAK,WAC7ByrE,WAAavrE,IAAK,SAAUF,IAAK,WACjC0rE,kBAAoBxrE,IAAK,SAAUF,IAAK,eACxC2rE,MAAQzrE,IAAK,SAAUF,IAAK,aAC5B4rE,MAAQ1rE,IAAK,SAAUF,IAAK,aAC5B6rE,WAAa3rE,IAAK,SAAUF,IAAK,eACjC8rE,eAAiB5rE,IAAK,SAAUF,IAAK,eACrC+rE,YAAc7rE,IAAK,SAAUF,IAAK,eAClCgsE,WAAa9rE,IAAK,SAAUF,IAAK,cACjCisE,iBAAmB/rE,IAAK,SAAUF,IAAK,cACvCksE,eAAiBhsE,IAAK,SAAUF,IAAK,aACrCmsE,eAAiBjsE,IAAK,SAAUF,IAAK,cACrCosE,WAAalsE,IAAK,SAAUF,IAAK,cACjCqsE,UAAYnsE,IAAK,SAAUF,IAAK,aAChCssE,MAAQpsE,IAAK,SAAUF,IAAK,aAC5BusE,gBAAkBrsE,IAAK,SAAUF,IAAK,eACtCwsE,YAActsE,IAAK,SAAUF,IAAK,eAClCysE,WAAavsE,IAAK,SAAUF,IAAK,eACjC0sE,SAAWxsE,IAAK,SAAUF,IAAK,eAC/B2sE,cAAgBzsE,IAAK,SAAUF,IAAK,eACpC4sE,aAAe1sE,IAAK,SAAUF,IAAK,aACnC6sE,YAAc3sE,IAAK,SAAUF,IAAK,cAClC8sE,gBAAkB5sE,IAAK,SAAUF,IAAK,eACtC+sE,WAAa7sE,IAAK,SAAUF,IAAK,cACjCgtE,WAAa9sE,IAAK,SAAUF,IAAK,cACjCitE,MAAQ/sE,IAAK,SAAUF,IAAK,WAC5BktE,YAAchtE,IAAK,SAAUF,IAAK,WAClCmtE,UAAYjtE,IAAK,SAAUF,IAAK,WAChCotE,MAAQltE,IAAK,SAAUF,IAAK,WAC5BqtE,cAAgBntE,IAAK,SAAUF,IAAK,aACpCstE,UAAYptE,IAAK,SAAUF,IAAK,eAChCutE,SAAWrtE,IAAK,SAAUF,IAAK,eAC/BwtE,MAAQttE,IAAK,SAAUF,IAAK,eAC5BytE,QAAUvtE,IAAK,SAAUF,IAAK,eAC9B0tE,QAAUxtE,IAAK,SAAUF,IAAK,eAC9B2tE,SAAWztE,IAAK,SAAUF,IAAK,aAC/B4tE,SAAW1tE,IAAK,SAAUF,IAAK,aAC/B6tE,cAAgB3tE,IAAK,SAAUF,IAAK,cACpC8tE,cAAgB5tE,IAAK,SAAUF,IAAK,eACpC+tE,YAAc7tE,IAAK,SAAUF,IAAK,cAClCguE,YAAc9tE,IAAK,SAAUF,IAAK,aAClCiuE,YAAc/tE,IAAK,SAAUF,IAAK,cAClCkuE,aAAehuE,IAAK,SAAUF,IAAK,aACnCmuE,QAAUjuE,IAAK,SAAUF,IAAK,aAC9BouE,QAAUluE,IAAK,SAAUF,IAAK,YAC9BquE,eAAiBnuE,IAAK,SAAUF,IAAK,aACrCsuE,WAAapuE,IAAK,SAAUF,IAAK,cACjCuuE,iBAAmBruE,IAAK,SAAUF,IAAK,eACvCwuE,OAAStuE,IAAK,SAAUF,IAAK,eAC7ByuE,MAAQvuE,IAAK,SAAUF,IAAK,eAC5B0uE,UAAYxuE,IAAK,SAAUF,IAAK,eAChC2uE,WAAazuE,IAAK,SAAUF,IAAK,eACjC4uE,OAAS1uE,IAAK,SAAUF,IAAK,eAC7B6uE,WAAa3uE,IAAK,SAAUF,IAAK,eACjC8uE,YAAc5uE,IAAK,SAAUF,IAAK,eAClC+uE,YAAc7uE,IAAK,SAAUF,IAAK,eAClCgvE,UAAY9uE,IAAK,SAAUF,IAAK,eAChCivE,OAAS/uE,IAAK,SAAUF,IAAK,eAC7BkvE,SAAWhvE,IAAK,SAAUF,IAAK,eAC/BmvE,aAAejvE,IAAK,SAAUF,IAAK,eACnCovE,OAASlvE,IAAK,SAAUF,IAAK,eAC7BqvE,cAAgBnvE,IAAK,SAAUF,IAAK,eACpCsvE,OAASpvE,IAAK,SAAUF,IAAK,eAC7BuvE,eAAiBrvE,IAAK,SAAUF,IAAK,eACrCwvE,WAAatvE,IAAK,SAAUF,IAAK,eACjCyvE,WAAavvE,IAAK,SAAUF,IAAK,eACjC0vE,WAAaxvE,IAAK,SAAUF,IAAK,eACjC2vE,QAAUzvE,IAAK,SAAUF,IAAK,eAC9B4vE,UAAY1vE,IAAK,SAAUF,IAAK,eAChC6vE,MAAQ3vE,IAAK,SAAUF,IAAK,eAC5B8vE,SAAW5vE,IAAK,SAAUF,IAAK,eAC/B+vE,gBAAkB7vE,IAAK,SAAUF,IAAK,eACtCgwE,WAAa9vE,IAAK,SAAUF,IAAK,eACjCiwE,eAAiB/vE,IAAK,SAAUF,IAAK,YACrCkwE,OAAShwE,IAAK,SAAUF,IAAK,UCtIpBmwE,SACT,UACA,UACA,UACA,UACA,UACA,WAGSC,uBAAyB,UAEzBC,gBACT9hH,MAAO4hH,QACP3pH,MAAO2pH,QAAQ,GACf7+E,MAAM,EACNg/E,MAAO,EACPjoH,KAAM0xG,weCjBH,IAAMwW,mBAAe,SAAfA,aAAeC,QAAM,cAAAnoG,OAAwB,IAAZmoG,OAAO,GAAnB,KAAAnoG,OAA2C,IAAZmoG,OAAO,GAAtC,MAAAnoG,OAA+D,IAAZmoG,OAAO,GAA1D,MAAAnoG,OAChCmoG,OAAO,IAAM,EADmB,MAGrBC,mBAAqB,SAArBA,mBAAqBC,YAAU,OAAKA,WAAWp3G,MAAM,UACjDyF,OAAO,SAACoqB,EAAG1hC,GAAJ,SAAA4gB,OAAa8gB,GAAb9gB,OAAiB5gB,EAAEmjC,OAAO,GAAGigB,eAA7BxiC,OAA6C5gB,EAAEqgB,MAAM,KAAM,KAEtE6oG,wBAAoB,SAApBA,kBAAqBlpH,EAAGmpH,cACjC,IAAIpxE,MAAQ,GACZ,GAAiB,iBAAN/3C,EAGP,GADAA,GADAA,EAAIA,EAAE6F,QAAQ,KAAM,KACdmB,chBUK,QgBTP0sE,YAAY1zE,IhBQJ,SgBRkB0zE,YAAY1zE,GAEtC+3C,QADAA,MAAQ/3C,EAAE4N,MAAM,mBACD,GAAK,IAAKmqC,MAAM,GAAK,IAAKA,MAAM,GAAK,IAAKA,MAAM,IAAM,QAClE,GhBII,QgBJA27B,YAAY1zE,GACnB+3C,MzKimCK,SAAXqxE,SAAY3wE,KACd,IAAMzvC,OAAS,4CAA4CgvC,KAAKS,KAE1D75C,EAAIgI,SAASoC,OAAO,GAAI,IACxBqvC,EAAIzxC,SAASoC,OAAO,GAAI,IACxBL,EAAI/B,SAASoC,OAAO,GAAI,IACxB9I,EAAI8I,OAAO,GAAKpC,SAASoC,OAAO,GAAI,IAAM,EAChD,OAAOyqE,SAAS70E,EAAGy5C,EAAG1vC,EAAGzI,GyKxmCTkpH,CAASppH,QACd,GhBCI,QgBDA0zE,YAAY1zE,GAAY,CAC/B,IAAM2zE,IAAM3zE,EAAEiJ,UAAUjJ,EAAEwL,QAAQ,KAAO,EAAGxL,EAAEgkC,YAAY,MAAMnyB,MAAM,QACtEkmC,MAAQ07B,SAAQ3mE,WAAR,EAAAu8G,wBAAY11C,WACbksC,UAAUmJ,mBAAmBhpH,MACpC+3C,MAAQ07B,SAAQ3mE,WAAR,EAAAu8G,wBAAYxJ,UAAUmJ,mBAAmBhpH,IAAIu4C,IAAI1mC,MAAM,aAKnEkmC,MAHS/3C,aAAaoO,MAGdpO,EAFAyzE,SAAS01C,cAIrB,OAAOpxE,OAGEinD,wBACT7sF,QACI4/D,aAAc,SAAAA,aAAC9xC,QAAS9tB,QACpB,IAAM+pG,OAASppC,kBAAmB7yC,QAAQ1V,YAAYpF,iBAClDhT,OAAOvR,OAAS0xG,mBAChBngG,OAAOrL,MAAQqL,OAAOrL,QAAUo1G,OAAOp1G,MAAM,IAC7CqL,OAAOrL,MAAQqL,OAAOrL,MAAMG,OAAS,EAAIkL,OAAOrL,OAAS6hH,wBAA1C/nG,OAAAyoG,wBAAqEl3G,OAAOrL,SAE/F,IAAMm0G,UAAYnoC,eAAeopC,OAAQj8E,QAAQ9tB,UAC3Cm3G,UAAYx2C,eAAemoC,UAAW9oG,QAO5C,OALIm3G,UAAUxiH,iBAAiBsH,QAC3Bk7G,UAAUxiH,MAAQwiH,UAAUxiH,MAAM0G,IAAI,SAACxN,EAAGlC,GAAJ,OAAUorH,wBAAkBlpH,EAAG0oH,QAAQ5qH,MAC7EwrH,UAAUT,MAAQ12G,OAAO02G,OAASS,UAAUxiH,MAAMG,QAEtDqiH,UAAUvqH,MAAQmqH,wBAAkBI,UAAUvqH,MAAOuqH,UAAUvqH,OACxDuqH,YAGfvtG,UACAuwB,SACAi9E,iBCtDSC,yBAAoB,SAApBA,kBAAqB7M,UAAW8M,UAAWC,oBACpD,OAAI/M,qBAAqB1qG,sBACdy3G,mBAEJD,urBCAX,IAAME,wBAAW,SAAXA,SAAY5tG,OAAQ8sG,OACtB,IAAIe,YAEJ,GAAIf,iBAAiBz6G,MACjBw7G,SAAWf,MAAMxoG,QAAQvK,OACzB8zG,SAAWC,iCAAI,IAAI/tG,KAAKC,OAAO,IAAhB6E,OAAAipG,iCAAuBhB,QAAO9sG,OAAO,OAAMjG,YAG1D,IADA,IAAM49C,aAAe4f,kCAAkBxmE,WAAlB,EAAA+8G,iCAAwB9tG,SACpCje,EAAI,EAAGA,GAAK+qH,MAAO/qH,IACxB8rH,SAAS9rH,GAAK41D,aAAa51D,EAAI+qH,OAOvC,OAHIe,SAAS,GAAK7tG,OAAO,IACrB6tG,SAAS/7G,SAEJkO,cAAQ6tG,oBAGfE,0BAAa,SAAbA,WAAcC,eAAgBjjH,OAChC,IAAIkjH,YAGJ,GAAID,eAFmB3gH,KAAK2P,IAAIjS,MAAMG,OAAQ,IAI1C,IADA,IAAMysD,aAAe8f,qC3K29BL,SAAlBy2C,kBAAkB,OAAMC,Q2K39BuBD,GAAmBnjH,MAAM0G,IAAI,SAAAxN,GAAC,OAAI8oH,mBAAa9oH,MACnFlC,EAAI,EAAGA,EAAIisH,eAAgBjsH,IAChCksH,SAASlsH,GAAK41D,aAAa51D,GAAKisH,eAAiB,SAGrDC,SAAWljH,MAAMuZ,MAAM,EAAG0pG,gBAE9B,OAASC,oBASPG,cAAgB,SAAhBA,cAAiBpuG,QACnB,IAAM2pF,WAAa3pF,OAEnB,OAASA,OADSA,OAAOvO,IAAI,SAACpP,EAAGN,GAAJ,OAAWA,GAAMie,OAAO9U,OAAS,KAClCy+F,sBAAY0kB,aAAc,EAAG,KASvDC,qBAAuB,SAAvBA,qBAAwBtuG,OAAQ8sG,MAAO/hH,OAEzC,OAASiV,cAAQ2pF,WADE3pF,OACUquG,aAAc,EAAG,GAAItjH,cAShDwjH,aAAe,SAAfA,aAAgBvuG,OAAQ8sG,MAAO/hH,OAEjC,OAAS4+F,WADU3pF,OACEA,cAAQmpC,MAAM,EAAMp+C,cAUvCyjH,6BAAgB,SAAhBA,cAAiBxuG,OAAQ8sG,MAAO/hH,OAAU,IAAA0jH,UACHb,wBAAS5tG,OAAQ8sG,OAA1CnjB,WAD4B8kB,UACpCzuG,OAAoB6tG,SADgBY,UAChBZ,SAG5B,OAASlkB,sBAAY3pF,OAAQ6tG,SAAU1kE,MAAM,EAAMp+C,MAF9BgjH,0BAAWF,SAAS3iH,OAAS,EAAGH,OAA7CkjH,WAKNS,sCAAyB,SAAzBA,uBAA0B1uG,OAAQ8sG,MAAO/hH,OAAU,IAAA4jH,WACZf,wBAAS5tG,OAAQjV,MAAMG,OAAS,GAEzE,OAASy+F,WAH4CglB,WAC7C3uG,OAEaA,OAHgC2uG,WACzBd,SAEW1kE,MAAM,EAAMp+C,MADlCA,MAAM0G,IAAI,SAAAxN,GAAC,OAAI8oH,mBAAa9oH,OAa3C2qH,YAAc,SAAdA,YAAepO,YAAajwE,MAAOvwB,OAAQ2pF,YAG7C,OAAOp5D,MADQvwB,OADD2pF,WAAWl6F,QAAQ+wG,gBAa/BqO,4BAAe,SAAfA,aAAgBrO,YAAajwE,MAAOvwB,QACtC,IAAM8uG,QAAUtO,YAAcxgG,OAAO,KAAOA,OAAOA,OAAO9U,OAAS,GAAK8U,OAAO,IAE/E,OAAOytG,yBAAkBjN,YAAajwE,MAAMu+E,QAASv+E,MAAM,KASzDw+E,2BAAc,SAAdA,YAAevO,YAAajwE,MAAOvwB,QAArB,OAAgCytG,yBAAkBjN,YAAajwE,MAAMiwE,aACrFjwE,MAAMvwB,OAAO,MAiDJgvG,eAAiB,SAAjBA,eAAkBC,WAAYC,UAAWC,WAAYrC,OAApC,OA1CX,SAAb5e,aAAa,IAAA/xE,KAAA,OAAAizF,8BAAAjzF,QAAA,GAAAtX,OACXqyF,UADW,KAAAryF,OACEqyF,UADF,KAAAryF,OACemyF,aAC1BzmE,MAAOymE,WACPqY,YAAa,SAAAA,cAAA,OAAMf,sBACnBtrH,MAAO,SAAAA,QAAA,OAAM6rH,+BAJFO,8BAAAjzF,KAAA,GAAAtX,OAMXqyF,UANW,KAAAryF,OAMEsyF,SANF,KAAAtyF,OAMcmyF,aACzBzmE,MAAOymE,WACPqY,YAAa,SAAAA,cAAA,OAAMf,sBACnBtrH,MAAO,SAAAA,QAAA,OAAM6rH,+BATFO,8BAAAjzF,KAAA,GAAAtX,OAWXsyF,SAXW,KAAAtyF,OAWCsyF,SAXD,KAAAtyF,OAWamyF,aACxBzmE,MAAOymE,WACPqY,YAAa,SAAAA,cAAA,OAAMjB,eACnBprH,MAAO,SAAAA,QAAA,OAAM4rH,eAdFQ,8BAAAjzF,KAAA,GAAAtX,OAgBXsyF,SAhBW,KAAAtyF,OAgBCsyF,SAhBD,KAAAtyF,OAgBa6xF,UACxBnmE,MAAOmmE,QACP2Y,YAAa,SAAAA,cAAA,OAAMd,cACnBvrH,MAAO,SAAAA,QAAA,OAAM+rH,8BAnBFK,8BAAAjzF,KAAA,GAAAtX,OAqBXqyF,UArBW,KAAAryF,OAqBEqyF,UArBF,KAAAryF,OAqBe6xF,UAC1BnmE,MAAOgmE,OACP8Y,YAAa,SAAAA,cAAA,OAAMX,uCACnB1rH,MAAO,SAAAA,QAAA,OAAM+rH,8BAxBFK,8BAAAjzF,KAAA,GAAAtX,OA0BXqyF,UA1BW,KAAAryF,OA0BEsyF,SA1BF,KAAAtyF,OA0Bc6xF,UACzBnmE,MAAOqmE,SACPyY,YAAa,SAAAA,cAAA,OAAMb,8BACnBxrH,MAAO,SAAAA,QAAA,OAAM+rH,8BA7BF5yF,KA2Cd+xE,GAAA,GAAArpF,OAAqBoqG,WAArB,KAAApqG,OAAmCqqG,UAAnC,KAAArqG,OAAgDsqG,YAAc,8xBCpK9CG,gCAUjB,SAAAA,UAAal5G,iKAAQm5G,CAAA/lH,KAAA8lH,WACjBj5C,sBAAsB7sE,KAAMy5F,wBAC5Bz5F,KAAK4M,OAAOA,QAEZ5M,KAAKgmH,YAAoC,WAAtBhmH,KAAKovF,QAAQ/zF,KAAoBqyG,UAAYC,SAChE3tG,KAAKimH,WAAoC,WAAtBjmH,KAAKovF,QAAQ/zF,MAAsB2E,KAAKovF,QAAQ9qD,KAAoBqpE,SAAZD,UAE3E1tG,KAAKkmH,YlBqCN,SAASC,cAAe73D,QAO3B,OALIA,QAA8B,iBAAZA,QACS,MAAdA,OAAO,GAAak/C,qBAEpBN,kBkB1CMiZ,CAAcnmH,KAAKovF,QAAQ7tF,OAE9CvB,KAAKomH,eAAiBpmH,KAAKqmH,iBAAiBrmH,KAAKgmH,YAAahmH,KAAKimH,WAAYjmH,KAAKkmH,aACpFlmH,KAAKg2G,OAASh2G,KAAK4uG,YAAY5uG,KAAKomH,gBAEpCpmH,KAAKgkF,IAAM15E,cAEXtK,KAAKsmH,aAAa15G,OAAO4J,4SAgChB+vG,eAAe,IAChBhlH,MAAUvB,KAAK4M,SAAfrL,MACR,OAAIA,OAA4B,iBAAXA,MlBlBtB,SAASilH,UAAWl4D,QACvB,MAAkB,MAAdA,OAAO,GACA8/C,gBAAgBqY,8BAAan4D,SAEjC6/C,aAAasY,8BAAan4D,SkBelBk4D,CAAUjlH,OAEdqtG,2BACHvzG,KAAMkrH,cAAcx/E,MACpBxlC,wEAaUkkH,WAAYC,UAAWC,YACnB3lH,KAAK4M,SAAf02G,MAER,OAAOkC,eAAeC,WAAYC,UAAWC,8DAUnCe,eACV,OAAOnD,mBAAamD,yDASdtP,WACN,OAAOp3G,KAAKujH,aAAavjH,KAAK2mH,YAAYvP,4DASjCA,WACT,GAAIp3G,KAAKwW,eAA0BlJ,IAAd8pG,UAAyB,CAC1C,IAAMrwE,MAAQ/mC,KAAK+mC,QACbxlC,MAAQwlC,MAAMxlC,MAAQwlC,MAAMxlC,QAAU,KACtCixC,MAAQxyC,KAAKomH,eAAe5sH,MAAM+H,MAA1BvB,CAAiCo3G,UAAWrwE,MAAO/mC,KAAKwW,SAAUxW,KAAKgkH,gBACrF,GAAIxxE,MAAO,CACP,GAAqB,iBAAVA,MAAoB,CAC3B,IAAM47B,IAAM57B,MAAM9uC,UAAU8uC,MAAMvsC,QAAQ,KAAO,EAAGusC,MAAM/T,YAAY,MAAMnyB,MAAM,QAClF,OAAO4hE,SAAQ3mE,WAAR,EAAAq/G,6BAAYx4C,MAEvB,OAAAw4C,6BAAWp0E,QAGnB,OAAAo0E,6BAAW5mH,KAAK4M,SAASpT,2DAUF,IAAbgd,OAAapR,UAAA1D,OAAA,QAAA4L,IAAAlI,UAAA,GAAAA,UAAA,MACvB,GAAIoR,OAAO9U,OAAQ,CACf,IAAMqlC,MAAQ/mC,KAAK+mC,QACbxlC,MAAQwlC,MAAMxlC,MAAQwlC,MAAMxlC,QAAU,KAEtCslH,UADgB7mH,KAAKomH,eAAeP,aACxBiB,CAActwG,OAAQxW,KAAK4M,SAAS02G,MAAO/hH,OAE7DvB,KAAKwW,OAAOqwG,UAAUrwG,QACtBqwG,UAAUtlH,OAASvB,KAAK+mC,QAAQxlC,MAAMslH,UAAUtlH,OAChDvB,KAAKgkH,aAAa6C,UAAU1mB,YAC5BngG,KAAK+mC,QAAQvwB,OAAOqwG,UAAUhC,aAAe7kH,KAAKwW,UAEtD,OAAOxW,mDAWP,OACI3E,KAAM2E,KAAKglB,YAAY3pB,OACvB0rC,MAAO/mC,KAAK+mC,QACZvwB,OAAQxW,KAAKwW,SACb5J,OAAQ5M,KAAK4M,gEAIL4lC,MAAOu0E,mBACnB,IAAMr+G,EAAe,IAAX8pC,MAAM,GACVh4C,EAAe,IAAXg4C,MAAM,GACVh6C,EAAe,IAAXg6C,MAAM,GACV73C,EAAI63C,MAAM,IAAM,EAChBw0E,KAAOt+G,EAAIq+G,kBAAkB,GAC7BE,KAAOzsH,EAAIusH,kBAAkB,GAC7BG,KAAO1uH,EAAIuuH,kBAAkB,GAC7BI,KAAOxsH,EAAIosH,kBAAkB,IAAM,EAEzC,OAASv0E,MAAK,QAAAn3B,OAAU2rG,KAAV,KAAA3rG,OAAkB4rG,KAAlB,MAAA5rG,OAA2B6rG,KAA3B,MAAA7rG,OAAoC8rG,KAApC,KAA6Ct0E,MAAOm0E,KAAO,IAAKC,KAAO,IAAKC,KAAO,IAAKC,uCAQtG,OAAOnnH,KAAKgkF,4DAlJZ,OAAOq/B,mDAWP,MnBnDa,yBoBXRA,yBACT7pH,MAAO,GACP+H,OAAQ,GAAI,6qBCShB,IAqFMmjG,0BAAU0iB,6BAAAttB,eAAA,GAAAz+E,OACRsyF,SADQ,KAAAtyF,OACIqyF,YACZ3mE,MAAOgmE,OACPv2F,OAxFc,SAAhBouG,cAAiBpuG,QACnB,IAAM2pF,WAAa3pF,OAEnB,OAASA,OADSA,OAAOvO,IAAI,SAACpP,EAAGN,GAAJ,OAAWA,GAAMie,OAAO9U,OAAS,KAClCy+F,sBAAY0kB,aAAc,EAAG,KAsFrDtjH,MAzBe,SAAjB8lH,eAAkBrQ,YAAajwE,MAAOvwB,OAAQ2pF,YAChD,IACMmlB,OAAS9uG,OADD2pF,WAAWl6F,QAAQ+wG,cAGjC,OADW/oC,qCAAwBF,kCAAHu5C,gCAA6BvgF,MAAMxlC,SAC5Dwc,CAAGunG,WAiBE8B,6BAAAttB,YAAA,GAAAz+E,OAMRqyF,UANQ,KAAAryF,OAMKqyF,YACb3mE,MAAOgmE,OACPv2F,OAjFa,SAAfuuG,aAAgBvuG,QAElB,OAAS2pF,WADU3pF,OACEA,gBAgFjBjV,MAjBY,SAAdgkH,YAAevO,YAAajwE,MAAOvwB,QAArB,OAChBytG,yBAAkBjN,YAAajwE,MAAMiwE,aAAcjwE,MAAMvwB,OAAO,QAOpD4wG,6BAAAttB,YAAA,GAAAz+E,OAWRqyF,UAXQ,KAAAryF,OAWKsyF,WACb5mE,MAAO0mE,UACPj3F,OA1Ec,SAAhBwuG,cAAiBxuG,OAAQ+wG,WAC3B,IAAIC,gBACJ,GAAID,qBAAqB1+G,MACrB2+G,aAAeD,UAAUzsG,QAAQvK,YAGjC,IADA,IAAM49C,aAAe4f,kCAAkBxmE,WAAlB,EAAA+/G,gCAAwB9wG,SACpCje,EAAI,EAAGA,EAAIgvH,UAAWhvH,IAC3BivH,aAAajvH,GAAK41D,aAAa51D,GAAKgvH,UAAY,IAOxD,OAJIC,aAAa,GAAKhxG,OAAO,IACzBgxG,aAAal/G,SAGR63F,WAAYqnB,aAAchxG,OADjBgxG,aACoC7nE,MAAM,IA6DxDp+C,MAjDc,SAAhBkmH,cAAiBzQ,YAAajwE,MAAOvwB,QACvC,IAAM8uG,QAAUtO,YAAcxgG,OAAO,KAAOA,OAAOA,OAAO9U,OAAS,GAAK8U,OAAO,IACzE23C,aAAe4f,kCAAkBxmE,WAAlB,EAAA+/G,gCAAwBvgF,MAAMxlC,UACnD,OAAO0iH,yBAAkBjN,YAAa7oD,aAAam3D,QAASn3D,aAAa33C,OAAO,QAgCpEsjF,aChGHL,uBACT7sF,UACA4J,QACIg2D,aAAc,SAAAA,aAAC9xC,QAASlhC,OAEpB,OADAkhC,QAAQqM,QAAQvwB,OAAOhd,OAChBA,QAGf+H,SACAwlC,SACAi9E,kTCMiB0D,8BAOjB,SAAAA,SAAa96G,gKAAQ+6G,CAAA3nH,KAAA0nH,UACjB76C,sBAAsB7sE,KAAMy5F,uBAE5Bz5F,KAAKgkF,IAAM15E,cACXtK,KAAKovF,QAAUn2F,OAAO4T,UAAW7M,KAAKglB,YAAYpF,gBAAiBhT,QAEnE5M,KAAKgmH,YAAoC,WAAtBhmH,KAAKovF,QAAQ/zF,KAAoBqyG,UAAYC,SAChE3tG,KAAKimH,WAAavY,UAElB1tG,KAAK4nH,cAAgB5nH,KAAK6nH,YAAY7nH,KAAKgmH,YAAahmH,KAAKimH,YAC7DjmH,KAAKg2G,OAASh2G,KAAK4uG,YAAY5uG,KAAK4nH,eACpC5nH,KAAKw2G,OAASx2G,KAAKovF,QAAQ7tF,MAE3BvB,KAAKsmH,aAAa15G,OAAO4J,wSAYhBivG,WAAYC,WACrB,OFyEsB,SAAjBF,eAAkBC,WAAYC,WAAb,OACzBhhB,yBAAU,GAAArpF,OAAIoqG,WAAJ,KAAApqG,OAAkBqqG,YE1ElBF,CAAeC,WAAYC,2DASzBlkB,UAAU,IAEfjgG,MACAvB,KAAK4M,SADLrL,MAEJ,OAAOqtG,2BACHvzG,KAAMmmG,SAASz6D,MACfxlC,wDAiCgB,IAAf61G,UAAehyG,UAAA1D,OAAA,QAAA4L,IAAAlI,UAAA,GAAAA,UAAA,GAAH,EAGb5L,MACAwG,KAAK4M,SADLpT,MAEEutC,MAAQ/mC,KAAK+mC,QACbvwB,OAASxW,KAAKwW,WAAa,EAAG,GAEpC,OAAKuwB,OAASvwB,OAAO,KAAOA,OAAO,GAGxBxW,KAAK4nH,cAAcrmH,MAAM61G,UAAWrwE,MAAO/mC,KAAKwW,SAAUxW,KAAKgkH,gBAF5DxqH,wDAaJgd,QACV,GAAIA,OAAQ,CACR,IAEMsxG,YAAaC,EAFF/nH,KAAK4nH,cAAcpxG,QAERA,OAAQxW,KAAK4M,SAAS26G,WAElDvnH,KAAKwW,OAAOsxG,WAAWtxG,QACvBxW,KAAKgkH,aAAa8D,WAAW3nB,YAE7BngG,KAAK+mC,QAAQvwB,OAAOsxG,WAAWjD,aAAe7kH,KAAKwW,UAEvD,OAAOxW,mDAWP,OACI3E,KAAM2E,KAAKglB,YAAY3pB,OACvB0rC,MAAO/mC,KAAK+mC,QACZvwB,OAAQxW,KAAKwW,SACbjV,MAAOvB,KAAKuB,QACZqL,OAAQ5M,KAAK4M,0CASjB,OAAO5M,KAAKgkF,4DA/EZ,OAAOq/B,4DAWP,MvB1EY,uBwBbPA,oCACT2E,UAAW,KACXxuH,MAAO,SACP+H,OAAQ,SAAU,UAAW,OAAQ,QAAS,SAAU,MAAO,aCHtDk4F,wBACT7sF,UACA4J,UACAuwB,SACAi9E,gBACAgE,kUCWiBC,gCAOjB,SAAAA,UAAar7G,iKAAQs7G,CAAAloH,KAAAioH,WACjBp7C,sBAAsB7sE,KAAMy5F,wBAE5Bz5F,KAAKgkF,IAAM15E,cACXtK,KAAKovF,QAAUn2F,OAAO4T,UAAW7M,KAAKglB,YAAYpF,iBAClD5f,KAAKovF,QAAU7hB,eAAevtE,KAAKovF,QAASxiF,QAE5C5M,KAAKg2G,OAASpH,2BACVvzG,KAAM,UACNkG,MAAOvB,KAAKovF,QAAQ7tF,QAExBvB,KAAKsmH,aAAa15G,OAAO4J,sSAgCnBhd,OACN,IAAKwG,KAAK+mC,UAAY/mC,KAAKwW,WAAahd,OAASA,iBAAiBkT,sBAC9D,OAAO1M,KAAK4M,SAASpT,MAGzB,GAAIwG,KAAKmoH,iBACL,OAAOnoH,KAAKmoH,iBAAiB3uH,OAGjC,IAAM4uH,UAAYpoH,KAAK+mC,OAAL/mC,CAAaxG,OAC/B,MAAkB,WAAd4uH,UACO54C,uBAAU44C,WAGdA,8DASgB,IAAb5xG,OAAapR,UAAA1D,OAAA,QAAA4L,IAAAlI,UAAA,GAAAA,UAAA,MAUvB,OATIoR,OAAO9U,SACP1B,KAAKgkH,aAAaxtG,QAClBxW,KAAKwW,OAAOA,QACZxW,KAAK+mC,QAAQvwB,OAAOA,QAEhBxW,KAAK4M,SAASo7G,YACdhoH,KAAKmoH,iBCzFS,SAAjBE,eAAkB7xG,OAAQ8xG,aACnC,IAAMC,mBAIN,OAHA/xG,OAAO1N,QAAQ,SAACtP,OACZ+uH,gBAAgB/uH,OAAS8uH,YAAY9uH,SAElC+uH,gBDoF6BF,CAAe7xG,OAAQxW,KAAK4M,SAASo7G,aAG9DhoH,mDAWP,OACI3E,KAAM2E,KAAKglB,YAAY3pB,OACvB0rC,MAAO/mC,KAAK+mC,QACZvwB,OAAQxW,KAAKwW,SACbjV,MAAOvB,KAAK4M,SAASrL,MACrBqL,OAAQ5M,KAAK4M,0CASjB,OAAO5M,KAAKgkF,4DA/EZ,OAAOq/B,uEAWP,M1B5Ca,gN4BVrB,IAAMmF,mBAGO,UAHPA,oBAIQ,WCICC,iBDEcC,mCAAAC,qBATd,YAUaha,MADC+Z,mCAAAC,kBAExBH,mBAAqB7Z,QAFG+Z,mCAAAC,kBAGxBH,oBAAsB7Z,MCLZ,SAACjjG,OAAQX,KAAM6B,QAC1B,IAAMgb,QAAUhb,OAAOgb,mBAAmB/e,MAAQ+D,OAAOgb,SAAWhb,OAAOgb,SACrEghG,eAAiBhhG,QAAQ3f,IAAI,SAAA6K,WAAS,OAAIpH,OAAO6Z,UAAU,SAAA1sB,GAAC,OAAIA,EAAEC,OAASga,cAEjF,QAA2CxF,IAAvCs7G,eAAex+F,KAAK,SAAAvxB,GAAC,OAAW,IAAPA,IACzB,MAAM,IAAIoW,MAAJ,iBAAAoM,OAA2BuM,QAA3B,yBAGV,IAAMvW,YtLg5Ca,SAAjBw3G,eAAkBnoG,QACpB,IAAMooG,OAAShjF,WAEf,OADAplB,OAAO5a,KAAKgD,QAAQ,SAAAhP,KAAG,OAAIgvH,OAAOhvH,IAAI,SAAAjB,GAAC,OAAIA,EAAEiB,SACtCgvH,OAAOt0G,QAAQkM,OAAO3V,MsLn5CT89G,EAChB/iH,KAAM8iH,eACN79G,YASJ,OANAsG,YAAYvI,QAAQ,SAACjQ,GACjB,IAAMiB,IAAMjB,EAAEiB,IACV4S,sBAAkBuL,UAAUne,OAC5BjB,EAAEiB,IAAM4S,sBAAkBwL,eAAepe,QAG1CuX,cCZK03G,uMCPhB,IAAMC,cAAYC,iCAAAC,iBCJO,WFOxB,SAASH,kBAAmBr9G,OAAQX,KAAM6B,QACtC,OAAO7B,OCJMk+G,iCAAAC,cCHI,QDKKjrE,iBAFTgrE,iCAAAC,cCFI,QCgEP,SAACx9G,OAAQX,KAAM6B,QAC1B,IAAMu8G,YAAcv8G,OAAOu8G,YACrBC,WAAax8G,OAAOpT,MACpBouB,QAAUhb,OAAOgb,QACjBrX,KAAO3D,OAAO2D,MAAQ,aACtB84G,eAzDY,SAAhBC,cAAiBv+G,KAAMW,OAAQ09G,WAAYD,YAAavhG,SAC1D,IAAMvW,YAAc4sC,gBAAMvyC,OAAQX,MAC9B6c,QAASuhG,cAEPI,iBAAmB79G,OAAO6Z,UAAU,SAAA1sB,GAAC,OAAIA,EAAEC,OAASqwH,cACpDK,gBAAkB99G,OAAO6Z,UAAU,SAAA1sB,GAAC,OAAIA,EAAEC,OAASswH,aACnDK,eAAiB/9G,OAAO6Z,UAAU,SAAA1sB,GAAC,OAAIA,EAAEC,OAAS8uB,UAClD8hG,WAAa3+G,KAAK9C,IAAI,SAAApP,GAAC,OAAIA,EAAE4wH,kBAAiBz2G,OAAO,SAAChJ,KAAMm+E,IAAK93E,KAAZ,OAAoBA,IAAIpK,QAAQ+D,QAAUm+E,MAAK53E,OACpG4W,WAAazb,OAAOqG,OAAO,SAACC,IAAK9J,IAAK3P,GAExC,OADAyZ,IAAIzZ,GAAK2P,IAAIpP,KACNkZ,SA8BX,OACIjH,KA7BYsG,YAAYpJ,IAAI,SAACoI,KAC7B,IAAMs5G,UACA5kG,OAAS1U,IAAIkN,OAAOxL,OAAO,SAACC,IAAK+I,KAUnC,OATA/I,IAAM+I,IAAIhJ,OAAO,SAAC7J,IAAK1O,MAAOjB,GAO1B,OANIA,IAAMkxH,gBACNvhH,IAAI1O,OAASuhB,IAAIyuG,iBACjBG,OAAOnwH,OAASuhB,KACTxiB,IAAMixH,kBACbthH,IAAIif,WAAW5uB,IAAMiB,OAElB0O,KACR8J,UAcP,OAXA+S,OAAO6kG,OAASD,OAEhBD,WAAW5gH,QAAQ,SAAC+gH,WAChB,QAA0Bv8G,IAAtByX,OAAO8kG,WAA0B,CACjC9kG,OAAO8kG,WAAa,EACpB,IAAMC,OAAS,IAAIjhH,MAAMwH,IAAIkN,OAAO,GAAG7b,QACvCooH,OAAOP,kBAAoBl5G,IAAIvW,IAC/BgwH,OAAOL,gBAAkBI,UACzB9kG,OAAO6kG,OAAOC,WAAaC,UAG5B/kG,SAKPjf,KAAM4jH,YAeaJ,CAAcv+G,KAAMW,OAAQ09G,WAAYD,YAAavhG,SACtE9hB,KAAOujH,eAAevjH,KACtBmC,OACA8hH,QAAUn9G,OAAOm9G,QACjBC,WAAat+G,OAAO6Z,UAAU,SAAA1sB,GAAC,OAAIA,EAAEC,OAASixH,UAC9CE,aAAev+G,OAAO6Z,UAAU,SAAA1sB,GAAC,OAAIA,EAAEC,OAAS8uB,WAClC,IAAhBoiG,aACAlkH,KAAKgD,QAAQ,SAAChP,KACV,IAAMhB,KAAOiS,KAAKqf,KAAK,SAAAvxB,GAAC,OAAIA,EAAEoxH,gBAAkBnwH,MAChDmO,IAAInO,KAAOhB,KAAKkxH,cAEpBX,eAAevjH,KAAKyK,KAAK,SAAC5V,EAAGyI,GAAJ,OAAU6E,IAAItN,GAAGuvH,cAAcjiH,IAAI7E,OAGhE,IAAM+mH,UAAY55C,oBACdzqE,KAAMujH,eAAevjH,KACrBm7C,OAAQr0C,OAAOq0C,QAAU,YACzBh7B,MAAO1V,KACPxF,KAAMs+G,eAAet+G,OAOzB,OALAo/G,UAAUrhH,QAAQ,SAACshH,YACfA,WAAWthH,QAAQ,SAACkU,SAChBA,QAAQjS,KAAOiS,QAAQjS,KAAK6+G,OAAOQ,WAAWtwH,SAG/CqwH,YF5FOjB,eAqBHmB,sBARf,SAASA,iBAAkBhvH,MACvB,IAAM2+C,UAAYgvE,aAAa3tH,MAC/B,GAAyB,mBAAd2+C,UACP,MAAM,IAAI/qC,MAAM,oCAEpB,OAAO+qC,urCGbX,IAAMgzD,aAAO2B,2BAAU3B,KAEVsd,cAAgB,SAAhBA,cAAgB33F,KAAA+1C,OAAqE,IAAlEp3D,MAAkEqhB,KAAlErhB,MAAOrP,MAA2D0wB,KAA3D1wB,MAAWsoH,cAAgD7hD,MAAhD6hD,cAAelqB,UAAiC33B,MAAjC23B,UAAWmqB,gBAAsB9hD,MAAtB8hD,gBACpEC,SAAW,GACXj4E,MAAQ,GAQZ,OAPI+3E,eAAiBA,cAAc/wH,iBAAiBsb,UAChD09B,MAAQ+3E,cAAc/wH,MAAM8X,MAAOrP,OACnCwoH,SAAWF,cAAc/wH,MAAM8X,MAAOrP,SAEtCwoH,SAAWpqB,UAAUsmB,YAAYr1G,MAAM00D,MAAMwkD,kBAC7Ch4E,MAAQ6tD,UAAUkjB,aAAakH,YAE1Bj4E,YAAOi4E,oBAGdC,eAAiB,SAAjBA,eAAkBrqB,UAAW/uF,MAAOq5G,UAAWC,WACjDt5G,MAAMmL,KAAKouG,WAAWF,WAAar5G,MAAMmL,KAAKouG,WAAWF,YAAcr5G,MAAMmL,KAAKquG,cAClF,IAAMC,cAAgB1qB,UAAU2qB,eAAe15G,MAAMmL,KAAKouG,WAAWF,WAAYC,WAGjF,OAFAt5G,MAAMmL,KAAKouG,WAAWF,WAAaI,cAAcl4E,KAE1Ck4E,eAGE3wB,8BAAwB,SAAxBA,sBAAyB1/D,QAASmzD,aAAco9B,kBAAmBr+G,QAC5E,IAAMs+G,SAAWxwF,QAAQywF,uBAAuBt9B,cAE1CwS,UADO3lE,QAAQ+7D,OACEjkD,MACjBjrC,MAAQqF,OAAOrF,MACfyyF,gBAAkBptF,OAAOotF,gBAC/BixB,kBAAkBniH,QAAQ,SAACivB,OACvB,IAAM4yF,UAAY5yF,MAAM18B,KACxB6vH,SAASnzF,MAAM4yF,UAAY,SAAC9xH,GAAM,IAAAuyH,QACwBvyH,EAAE4jB,KAAhD4uG,eADsBD,QACtBC,eAAgBR,WADMO,QACNP,WAAYC,cADNM,QACMN,cAEpC,GADAO,eAAerxB,iBAAmBqxB,eAAerxB,qBAC7CzyF,QAAU8jH,eAAerxB,iBAAiB2wB,WAI1C,OAFAU,eAAerxB,iBAAiB2wB,WAAa5yF,MAAM6yF,UACrCF,eAAerqB,UAAWxnG,EAAG8xH,UAAW5yF,MAAM6yF,WAAWp4E,MAG3E,IAAKjrC,OAAS8jH,eAAerxB,iBAAiB2wB,WAG1C,OADAU,eAAerxB,iBAAiB2wB,WAAa,KACtCD,eAAerqB,UAAWxnG,EAAG8xH,UAAW5yF,MAAM6yF,UAAU3iH,IAAI,SAAAxN,GAAC,OAAKA,KAAI+3C,MAZnD,IAAA84E,MAAAC,sBAcTV,WAAWF,WAAaE,WAAWF,WAAaG,cAdvC,GAcvBpiH,EAduB4iH,MAAA,GAcpB9wH,EAdoB8wH,MAAA,GAcjB9yH,EAdiB8yH,MAAA,GAcd3wH,EAdc2wH,MAAA,GAe9B,cAAAjwG,OAAmB,IAAJ3S,EAAf,KAAA2S,OAA8B,IAAJ7gB,EAA1B,MAAA6gB,OAA0C,IAAJ7iB,EAAtC,OAAA6iB,OAAmD1gB,GAAK,EAAxD,UAmCC6wH,sBAAgB,SAAhBA,cAAiB/0B,MAAS,IAAAg1B,MAAAF,uBACXvf,SAASpuD,EAAGouD,SAAS/nG,GAAGgE,IAAI,SAAAxN,GAAC,OAAIg8F,KAAKh8F,KAD3B,GAC5Bi8F,MAD4B+0B,MAAA,GACrB90B,MADqB80B,MAAA,GAAAC,MAAAH,uBAET70B,MAAOC,OAAO1uF,IAAI,SAAAxN,GAAC,OAAIA,GAAKA,EAAEssC,UAFrB,GAGnC,OACI2vD,YACAC,YACAg1B,OAN+BD,MAAA,GAO/BE,OAP+BF,MAAA,KAiF1BG,uBAAyB,SAAzBA,uBAA0BhzH,EAAGN,EAAGwS,KAAM2vB,SAC/C,IAAMwE,UAAYxE,QAAQ9tB,SAASk/G,oBAC/BC,aAAe,GAInB,OAHI7sF,qBAAqBpqB,WACrBi3G,aAAe7sF,UAAUrmC,EAAGN,EAAGwS,KAAM2vB,UAElCqxF,cAiGEC,oBAAsB,SAAtBA,oBAAuBlmD,QAAS0N,QAAW,IAAAy4C,MACpDnmD,QAAQ/6D,MAAKkhH,UAAG5wG,OAAH9T,MAAA0kH,MAAAC,0BAAa14C,SAAQxgE,OAAO,SAAAna,GAAC,YAAcyU,IAAVzU,EAAEmrF,MAAmB/7E,IAAI,SAACpP,GACpE,IAAM+9D,MAAQ/9D,EAAE86B,OAChB,OACIwI,EAAGy6B,MAAMz6B,EACT34B,EAAGozD,MAAMpzD,EACTuH,KAAMlS,OAYLszH,oBAAc,SAAdA,YAAezwE,OAAQssC,OAAQxiD,QACxC,IAAK,IAAM1rC,OAAOkuF,YACP1tF,eAAe5B,KAAKsvF,OAAQluF,MAC/B4hD,OAAO3jB,MAAMj+B,IAAK0rC,OAAS,KAAOwiD,OAAOluF,OAiCxCsyH,eAAiB,SAAjBA,eAAkB1xF,QAAS84C,QACpC,IAAM64C,WAAa3xF,QAAQ4xF,oBAC3B,OAAID,WACOA,WAAW74C,OAAQ94C,SAAWmD,WAAYnD,QAAQ67E,cAAc14E,aAEpE21C,QAyBE+4C,2BAAqB,SAArBA,mBAAsB7xF,QAAS8xF,mBACxC,IAAMC,UAAY/xF,QAAQgyF,oBACpBj2B,KAAO/7D,QAAQ+7D,OACfk2B,cAAgBjyF,QAAQiyF,gBACxB//G,OAAS8tB,QAAQ9tB,SACjBovF,UAAYthE,QAAQkyF,WAE1B,OAAQ,IAAK,KAAK3kH,IAAI,SAAC5M,MACnB,IAAIwxH,KAAO,EACPC,UAAY,EACZlsF,QAAU,EACVmsF,gBACJ,GAAIN,UAAS,GAAApxG,OAAIhgB,KAAJ,gBAAyB8D,yBAAUE,UAAW,CACvD,IAAI2tH,iBAEExb,SADaib,UAAS,GAAApxG,OAAIhgB,KAAJ,mBAA4BuD,gCAAiBE,SAC3C47B,QAAQuyF,YAAYptB,UAAUxkG,MAAQ,EAC9D60D,KAAOumC,KAAKp7F,MACZwE,IAAM+M,OAAM,MAAAyO,OAAOhgB,KAAKwiD,gBACxBqvE,aAAetgH,OAAOsgH,aACtBpnH,KAAO0mH,kBACPzlF,MAAQmpB,KAAKnpB,QACnB+lF,UAjCgB,SAAfK,aAAgBj9D,KAAMn5C,SAC/B,IACM8iB,MAAQq2B,KAAKosC,eACbv1D,MAAQmpB,KAAKnpB,QACbxlC,MAAQwlC,MAAMxlC,QACdiV,OAASuwB,MAAMvwB,SAIrB,OAHCqjB,OAAqBh2B,KAAKsnB,IAAI5pB,MAAM,GAAKA,MAAM,IAAMsC,KAAKsnB,IAAI3U,OAAO,GAAKA,OAAO,IAAOO,QA2BrEo2G,CAAaj9D,KAAMshD,UAC/B,IAAM4b,gBAAkBl9D,KAAKlrC,YAAY3pB,SAAW2xG,aAC9CqgB,YAAcn9D,KAAKtjD,SAASg0B,QAIlC,GAAsB,UAAlB+rF,cAA2B,CAC3B,IAAMW,aAAeF,gBAAkB,EAAIC,YAAcP,UAAY,EACrE9wB,UAAUz6F,OAAO+rH,aAAcR,UAAYQ,eAAe92G,OAAO1Q,MAAMshC,aAAa8lF,cACpFL,KAAO7wB,UAAU90D,YACjB8lF,iBAAmBF,WAAaM,gBAAkB,EAAIC,YAAcP,WACpEC,aAAejnH,KAAKmC,IAAI,SAAAnO,KAAG,OAAIkiG,UAAUliG,MAAQszH,gBAAkB,EAAKN,UAAY,UACjF,QAAYx/G,IAARzN,IAAmB,CAC1B,IAAIohD,OACJ,GAAImsE,gBAAiB,CACjB,IAAM9oF,KAAOyC,MAAMzC,OACnB2c,OAASla,MAAMnG,UAAY0D,KAC3BuoF,KAAO9lF,MAAMG,YAAc+Z,YAE3B4rE,KAAOC,UAEXC,aAAejnH,KAAKmC,IAAI,kBAAOmlH,iBAAoBnsE,OAAS,GAAO4rE,KAAO,SAI1EG,iBADAH,KAAOC,WADPlsF,QAAUwsF,gBAAkB,EAAIC,YAAcP,WAG9CC,aAAejnH,KAAKmC,IAAI,kBAAOmlH,gBAAkB,GAAMP,KAAO,IAGlEC,UAAYE,iBACZpsF,QAAUwsF,gBAAkBC,YAAcn9D,KAAKnpB,QAAQzC,OAAS+oF,YAAcP,UAGlF,OACID,UACAE,0BACAD,oBACAlsF,oBAgBC2sF,oCAA8B,SAA9BA,4BAA+B7yF,SAAY,IAAA8yF,sBAMhD9yF,QAAQgyF,oBAJR71B,OAFgD22B,sBAEhD32B,OACAE,OAHgDy2B,sBAGhDz2B,OACAC,WAJgDw2B,sBAIhDx2B,WACAC,WALgDu2B,sBAKhDv2B,WAEEw2B,aAAe/yF,QAAQ9tB,SAASotC,UAAUpyB,QAC1CxK,aAAesd,QAAQ3vB,OAAOsS,kBAC9BqwG,oBAAsBtwG,aAAaqwG,eAAiBrwG,aAAaqwG,cAAcjwG,IAAIniB,OAAS8D,yBAAUC,QAC5G,OAAKy3F,SAAWE,QAAU22B,sBAAwBD,cAAgBz2B,aAAe73F,yBAAUE,WACvF43F,aAAe93F,yBAAUE,UxC9bT,WwCicb,MAKEsuH,kCAA4B,SAA5BA,0BAA6BjzF,SACtC,IAAMkzF,6BAA+BL,oCAA4B7yF,SACjE,GAAIkzF,6BACA,OAAOA,6BAHuC,IAAAC,uBAW9CnzF,QAAQgyF,oBAJR71B,OAP8Cg3B,uBAO9Ch3B,OACAE,OAR8C82B,uBAQ9C92B,OACAC,WAT8C62B,uBAS9C72B,WACAC,WAV8C42B,uBAU9C52B,WAEEw2B,aAAe/yF,QAAQ9tB,SAASotC,UAAUpyB,QAC1CkmG,gCAAkCziD,WAAW3wC,QAAQqzF,cAAe,YAAa,QACnFpB,cAAgBjyF,QAAQ9tB,SAASotC,UAAU3+C,KAE/C,IAAKyyH,+BAAiCL,cAAgBz2B,aAAeC,WAAY,CAC7E,IAAMrsE,aAAeosE,aAAe73F,yBAAUC,QAAUy3F,OAASE,OAEjE41B,cxCxckB,QwCucgB54C,4CAA+Br5C,QAAQ3vB,OAAQ6f,cAAxEA,cAC8B8gF,MxC1d1B,QwC6djB,OAAOihB,skBC3dX,oBAQa79C,yBAAc,SAAdA,YAAep0C,QAAS9gC,IAAV,QAEnB44B,OAAO,GAAAnX,OAAIzhB,GAAGs1E,MAAP,KAAA7zD,OCdK,SDeZi0D,SAAU,SAAAA,SAAA38C,MAAc,IAAV5nB,KAAUijH,2BAAAr7F,KAAA,MACd/lB,OAAS8tB,QAAQ9tB,SACjBqhH,cAAgBrhH,OAAOg9F,SAC7B,GAAI7+F,MAAQkjH,cAAe,CACvB,IAAM7wG,aAAerS,KAAKsS,kBACpBqvG,kBD8Fa,SAAtBwB,oBAAuBtkB,SAAUxsF,cAAiB,IAAA+wG,MAAA5C,uBAEtDvf,SAASpuD,EAAGouD,SAAS/nG,EAAG+nG,SAASC,GAAID,SAASE,GAAIJ,MAAOC,MAAOF,MAAM5jG,IAAI,SAAAxN,GAAC,OAAImvG,SAASnvG,IACrFmvG,SAASnvG,GAAG6Q,QAHuC,GACpDurF,OADoDs3B,MAAA,GAC5Cp3B,OAD4Co3B,MAAA,GACpCC,QADoCD,MAAA,GAC3BE,QAD2BF,MAAA,GAClBG,WADkBH,MAAA,GACNI,WADMJ,MAAA,GACMK,UADNL,MAAA,GAAAM,MAAAlD,uBAKzB10B,OAAQE,OAAQq3B,QAASC,SAASpmH,IAAI,SAAAxN,GAAC,OAAI2iB,aAAa3iB,IACtF2iB,aAAa3iB,GAAG+iB,IAAIniB,OANmC,GAKpD27F,WALoDy3B,MAAA,GAKxCx3B,WALwCw3B,MAAA,GAAAC,OAAAnD,uBAQnB10B,OAAQE,QAAQ9uF,IAAI,SAAAxN,GAAC,OAAI2iB,aAAa3iB,KAAO2iB,aAAa3iB,GAAG+iB,IAAIzH,SACrGqH,aAAa3iB,GAAG+iB,IAAIniB,QATmC,GAQpDszH,cARoDD,OAAA,GAQrCE,cARqCF,OAAA,GAAAG,OAAAtD,uBAWK10B,OAAQE,OAAQq3B,QAASC,SACpFpmH,IAAI,SAAAxN,GAAC,OAAI2iB,aAAa3iB,IAAM2iB,aAAa3iB,GAAGwH,QAZU,GAc3D,OACI40F,cACAE,cACAu3B,sBACAC,sBACAC,oBACAJ,gBACAC,gBACAr3B,sBACAC,sBACA03B,4BACAC,4BACAE,YA1BuDD,OAAA,GA2BvDE,YA3BuDF,OAAA,GA4BvDG,aA5BuDH,OAAA,GA6BvDI,aA7BuDJ,OAAA,IC9FrBX,CAAoBD,cAAe7wG,cAC7Dsd,QAAQgyF,kBAAkBA,mBAC1BhyF,QAAQw0F,uBACRx0F,QAAQy0F,iBAAmBz0F,QAAQ00F,mBAAmBrkH,KAAM6B,OACxD8tB,QAAQiyF,gBAAiBD,mBAC7BhyF,QAAQ20F,gBAAkB30F,QAAQ40F,kBAAkB50F,QAAQy0F,iBAAkB/xG,cAC9E,IAAM5G,OAASkkB,QAAQ60F,wBAAwB70F,QAAQ20F,gBAAiB30F,QAAQgyF,oBAC5EhyF,QAAQ3vB,OAAOsS,mBACnBqd,QAAQ86E,QAAUh/F,QACjBkkB,QAAQ80F,aAAe90F,QAAQlkB,OAAOA,UAG/Cnb,KAAM,8BAGNm3B,OAAO,GAAAnX,OAAIzhB,GAAGs1E,MAAP,KAAA7zD,OClCO,WDmCdi0D,SAAU,SAAAA,SAAAzsD,OAAgB,IAChBonF,gBADgB+jB,2BAAAnrG,MAAA,MACSonF,gBACzBz3E,MAAQkI,QAAQ+0F,iBAChB9mH,MAAQ+xB,QAAQ/xB,QAChBuiE,cACFC,UAAS,GAAA9vD,OAAKwvF,0BAAiB57C,sBAAtB,KAAA5zC,OAA+Cqf,QAAQ+vE,UAAUt/B,WAC1ErxE,IAAK,kBAET6O,MAAM4pF,YAAYrnB,eACM,IAApB++B,iBACAz3E,MAAMtsB,KAAN,GAAAmV,OAAczhB,GAAGs1E,MAAjB,KAAA7zD,OC9CI,SDgDR1S,MAAM+mH,uBAAuBl9F,MACzB,YA7CI,SAAdm9F,YAAej1F,SACjB,IAAM3I,MAAQ2I,QAAQ3I,QAClBA,QACA2I,QAAQ0oE,OAAOrxE,OACf2I,QAAQj/B,eAAem0H,UAAUC,OAAOpgE,aAAYE,eAAe,IA0CvDggE,CAAYj1F,WACb,EAAOwwC,eAElB7vE,KAAM,kNElDP,IAAMy0H,gBAAcC,+BAAAC,mBDFL,UCIdx2H,MAAO,KACPijB,MACI+vD,aAAc,SAAAA,aAAC5/D,OAAQ8oG,UAAWh7E,SAC9BA,QAAQqzF,cAAgBnhH,OACxB,IAAMoY,YAAc0V,QAAQ1V,YACtBirG,QAAU1iD,kBAAmBvoD,YAAYpF,iBAC/C,OAAOoF,YAAYkrG,cAAcD,QAASrjH,YAR/BmjH,+BAAAC,gBDHP,QCgBZx2H,MAAO,KACPijB,MACIkwD,OAAQ,SAAAA,OAAC5hE,KAAM2vB,SACPA,QAAQy1F,cACRz1F,QAAQ01F,YAAYlqH,KAAK6E,MAEzB2vB,QAAQ01F,aAAerlH,UAnBhBilH,2sFC2CNK,4CAqBjB,SAAAA,UAAatlH,KAAM0rF,KAAM7pF,QAA2B,IAAA6H,MAAnBhZ,aAAmB2J,UAAA1D,OAAA,QAAA4L,IAAAlI,UAAA,GAAAA,UAAA,qKAAAkrH,CAAAtwH,KAAAqwH,WAChD57G,oLAAA87G,CAAAvwH,KAAAwwH,0BAAAH,WAAA33H,KAAAsH,OAEA6sE,sBAAsB4jD,kEAAAh8G,QAAM+d,aAC5B/d,MAAK1J,KAAKA,MACV0J,MAAKgiF,KAAKA,MACVhiF,MAAK7H,OAAOA,QACZ6H,MAAKi8G,MAAMj8G,MAAKuQ,YAAYslE,aAAehgF,eAC3CmK,MAAKhZ,aAAaA,cAClBgZ,MAAKk8G,WACLl8G,MAAK27G,eACL37G,MAAKuvE,IAAM15E,cACXmK,MAAKm8G,gBACLn8G,MAAKsiG,0BACLtiG,MAAKs5G,cAAgB,KAd2Bt5G,iYArBjB63F,6SAmD/B,GAAIlnG,UAAO1D,OAAQ,CACf1B,KAAK6wH,OAALzrH,UAAA1D,QAAA,OAAA4L,EAAAlI,UAAA,GACA,IAAMqlG,QAAUzqG,KAAKyqG,UACfqmB,QAAO,GAAAz1G,OAAMwvF,0BAAiB57C,sBAAvB,KAAA5zC,OAAgDovF,QAAQt/B,YJuU5C,SAAxB4lD,sBAAyBr2F,SAClC,IAAM/xB,MAAQ+xB,QAAQ/xB,QAChBqoH,YAAct2F,QAAQ1V,YAAYisG,WAAW,GAC7C9lD,UAAYzwC,QAAQ+vE,UAAUt/B,UACpC,IAAK,IAAM54C,QAAQy+F,YACfroH,MAAMuqB,OAAN,GAAA7X,OAAgBwvF,0BAAiB37C,uBAAjC,KAAA7zC,OAA2DkX,MAA3D2+F,0BACK/lD,UAAY,OI5Ub4lD,CAAsB/wH,MACtB,IAAM2I,MAAQ3I,KAAK2I,QAenB,OAdAA,MAAMuqB,OAAN,GAAA7X,OAAgBwvF,0BAAiB57C,qMAAjCkiE,IACK1mB,QAAQt/B,UAAY,OAGzBU,wBAAW7rE,KAAM8vH,eAAgBnnH,MAAMwT,OACnCgvD,UAAW2lD,UAEfjiD,+BAAkB7uE,KAAM8uE,0BACpBI,MAAO4hD,QACPM,OAAQvmB,0BAAiB37C,yBAEzBmiE,aAAc5mB,QAAQ4mB,aACtBC,aAAc7mB,QAAQ6mB,eAEnBtxH,KAEX,OAAOA,KAAK6wH,+CAIZ,IAAMt+F,KAAI,GAAAlX,OAAMwvF,0BAAiB37C,uBAAvB,KAAA7zC,OFxHI,SEwHJ,KAAAA,OAAiErb,KAAKyqG,UAAUt/B,WAC1F,OAAI/lE,UAAI1D,QACJ1B,KAAK2I,QAAQknH,OAAOt9F,KAApBntB,UAAA1D,QAAA,OAAA4L,EAAAlI,UAAA,IACOpF,MAEJA,KAAK2I,QAAQvP,IAAIm5B,oEAiExB,OAAIntB,UAAU1D,QACV1B,KAAKuxH,mBAALnsH,UAAA1D,QAAA,OAAA4L,EAAAlI,UAAA,GACOpF,MAEJA,KAAKuxH,iFAIZ,OAAInsH,UAAkB1D,QAClB1B,KAAKwxH,mBAALpsH,UAAA1D,QAAA,OAAA4L,EAAAlI,UAAA,GACOpF,MAEJA,KAAKwxH,yDAmBZ,OAAIpsH,UAAO1D,QACP1B,KAAKyxH,OAALrsH,UAAA1D,QAAA,OAAA4L,EAAAlI,UAAA,GACOpF,MAEJA,KAAKyxH,QAAUzxH,KAAKglB,YAAYslE,iEAIvC,OAAIllF,UAAO1D,QACP1B,KAAKu2G,cAALnxG,UAAA1D,QAAA,OAAA4L,EAAAlI,UAAA,GACOpF,MAEJA,KAAKu2G,oEAKZ,OADAv2G,KAAKmwH,eAAgB,EACdnwH,yDAKP,OADAA,KAAKmwH,eAAgB,EACdnwH,KAAK+K,KAAK/K,KAAKowH,YAAY,kDAWlC,OAAOpwH,KAAK4M,yCAWZ,OAAO5M,KAAKgkF,kEAaI/mE,UAAWrQ,OAAQ+/G,cAAeD,mBAClD,OJ/HqB,SAAhBgF,cAAiBz0G,UAAWrQ,OAAQ+/G,cAAegF,kBAC5D,IAAM5mH,KAAOkS,UAAUE,SAAU+I,SAAS,IACpCxa,OAASX,KAAKW,OACdsuC,UAAYptC,OAAOotC,UAErB68C,OAIA86B,iBAJA96B,OACAE,OAGA46B,iBAHA56B,OACAC,WAEA26B,iBAFA36B,WACAC,WACA06B,iBADA16B,WAEEkyB,YAAcnyB,aAAe73F,yBAAUC,QAAU23F,OAASF,OAEhE,OAAOwzB,kBAAiBsC,cAAjBtC,CAAgC3+G,OAAQX,KAAKA,MAChD6c,QAASoyB,UAAUpyB,QACnBuhG,wBACA54G,KAAMypC,UAAUzpC,MAAQ,OACxB0wC,OAAQjH,UAAUiH,OAClB8oE,QAAS/vE,UAAU+vE,QACnBvwH,MAAOy9F,aAAe93F,yBAAUC,QAAU23F,OAASF,QACpD9rF,KAAKwb,MI4GGmrG,CAAcz0G,UAAWrQ,OAAQ+/G,cAAeD,2FAYlC3hH,MACrB,IAAI09D,WAMJ,OALgBzoE,KAAK+K,OAAOw6F,YAGxB98B,QJ3C2B,SAA1B8mD,wBAA2BxkH,KAAM4mH,iBAAkBhF,eAAkB,IAE1EgC,cAMAgD,iBANAhD,cACAC,cAKA+C,iBALA/C,cACA/3B,OAIA86B,iBAJA96B,OACAE,OAGA46B,iBAHA56B,OACAq3B,QAEAuD,iBAFAvD,QACAC,QACAsD,iBADAtD,QAEE5lD,WACAmpD,KAAO5lB,SAAS/nG,EAChB4tH,KAAO7lB,SAASpuD,EAUtB,OATIi5C,SACApuB,QAAQtsC,EAAIwrC,+BAAkB58D,KAAMqjH,SAAWzB,gBAAkBjhB,OAASmmB,KAAM7lB,SAASC,KAAO4lB,KAAMA,MAClGlD,gBAEJ53B,SACAtuB,QAAQjlE,EAAImkE,+BAAkB58D,KAAMsjH,SAAW1B,gBAAkBjhB,OAASM,SAASE,GAAIF,SAAS/nG,IAC3F2tH,KAAMA,MAAOhD,gBAGfnmD,QIsBW8mD,CAAwBxkH,KAAM/K,KAAK0sH,oBAAqB1sH,KAAK2sH,kBAEpElkD,4DAaIqpD,cACX,IAAMrpD,QAAUzoE,KAAK2I,QAChBvP,IADW,GAAAiiB,OACJwvF,0BAAiB37C,uBADb,KAAA7zC,OFxTF,SEwTE,KAAAA,OACuDrb,KAAKyqG,UAAUt/B,YACtF,YAAwB79D,IAAjBwkH,aAA6BrpD,QAAQqpD,kBAAsBrpD,oEASnD2iC,gBAAiBhuF,cAChC,OJpIyB,SAApBkyG,kBAAqBlkB,gBAAiBhuF,aAAcu0G,iBAAkBhF,eAC/E,IAAMoF,mBxCjMc,awCiMOpF,eAA8BvhB,iBAAmBA,gBAExEpU,WAKA26B,iBALA36B,WACA83B,YAIA6C,iBAJA7C,YACAC,YAGA4C,iBAHA5C,YACAC,aAEA2C,iBAFA3C,aACAC,aACA0C,iBADA1C,aAEE+C,UAAY/4H,OAAO6M,KAAKsX,cAAc1b,OAK5C,OAAOqwH,mBAAmB9pH,IAAI,SAAC8C,MAE3B,OxCjNa,UwCgNE4hH,cAA0B5hH,KAAKwS,OAASxS,MACzC9C,IAAI,SAACpP,GACf,IACI0W,MAGI/L,EACAovD,GACAz2B,EACA0jB,GAPJoyE,YAuCJ,OArCItF,gBAAkBjhB,OAClBn8F,MAAQ1W,EAAEkS,SAKNlS,EAAE,IAAMA,EAAE,IACV2K,EAAIq8C,GAAKhnD,EAAE,GACXsjC,EAAIy2B,GAAK/5D,EAAE,KAEX2K,EAAIq8C,GAAKhnD,EAAE,GACXsjC,EAAIy2B,GAAK/5D,EAAE,KAGfo5H,SAAWj7B,aAAe73F,yBAAUC,SAChC+8B,IACA0jB,MACAr8C,EAAG+L,MAAMw/G,aACTn8D,GAAIrjD,MAAMw/G,eAEV5yF,EAAG5sB,MAAMu/G,aACTjvE,GAAItwC,MAAMu/G,aACVtrH,IACAovD,QAEKoT,MAAQz2D,MACjB0iH,SAASjuC,IAAMz0E,MAAMyiH,cAErBC,UACI91F,EAAGtjC,EAAEi2H,aACLtrH,EAAG3K,EAAEk2H,aACLlvE,GAAIhnD,EAAEm2H,cACNp8D,GAAI/5D,EAAEo2H,gBAEDjpD,MAAQntE,EACjBo5H,SAASjuC,IAAMnrF,EAAEm5H,YAEdC,aAEZj/G,OAAO,SAAAna,GAAC,OAAIA,EAAE6I,SI0EN4tH,CAAkBlkB,gBAAiBhuF,aAAcpd,KAAK0sH,oBAAqB1sH,KAAK2sH,2EAwBvF,OAAO,yEAGY3yB,gBAAiBnM,aAActmF,MAAOygF,QACzD,IAEIijC,mBAFsBjrH,KAAK4M,SAAS8rF,iBAEEsB,kBAC1CixB,kBAAoBjjC,QAAUijC,oBAE1B7wB,8BAAsBp6F,KAAM6tF,aAAco9B,mBACtC1jH,YACAyyF,wFAOR,OADAh6F,KAAKwvH,aAAc,EACZxvH,yDAKP,OADAA,KAAKwvH,aAAc,EACZxvH,yEAIPA,KAAKkyH,eJ6EoB,SAApBC,kBAAoBz3F,SAAO,OAAI6yF,oCAA4B7yF,UAAYA,QAAQ9tB,SAASotC,UAAU3+C,KI7EjF82H,CAAkBnyH,4DAIxC,OAAOA,KAAKkyH,uDAQZ,OAAOlyH,iDAUP,MAAO,4CAaP,OAJAA,KAAK2I,QAAQ4pF,aACTpnB,UAAS,GAAA9vD,OAAKwvF,0BAAiB57C,sBAAtB,KAAA5zC,OAA+Crb,KAAKyqG,UAAUt/B,aAE3E2b,6BAAc9mF,KAAK+xB,SAASyT,SACrBxlC,mDAUClG,IAAKiR,MACb,GAAY,OAARjR,IACA,OAAOkG,KAEX,IAAMoyH,SAAWpyH,KAAKqyH,UAGtB,OAFCD,SAASt4H,OAASs4H,SAASt4H,SAC5Bs4H,SAASt4H,KAAKoM,KAAK6E,MACZ/K,mDAWP,OAAIoF,UAAU1D,QACV1B,KAAKsyH,WAALltH,UAAA1D,QAAA,OAAA4L,EAAAlI,UAAA,GACOpF,MAEJA,KAAKsyH,iFAWQvnH,MACpB,IAAMW,OAAS1L,KAAK+K,OAAOoS,UAAUzR,OAC/B0R,aAAepd,KAAK+K,OAAOsS,kBAC3BiE,oBAHoBixG,sBASlBvyH,KAAK0sH,oBAJL11B,WALkBu7B,sBAKlBv7B,WACAC,WANkBs7B,sBAMlBt7B,WACAJ,OAPkB07B,sBAOlB17B,OACAE,OARkBw7B,sBAQlBx7B,OARkB00B,MAAA+G,0BAWIx7B,WAAYC,YAAYhvF,IAAI,SAAA5M,MAAI,OAAIA,OAAS8D,yBAAUC,UAX3D,GAWnBqzH,SAXmBhH,MAAA,GAWTiH,SAXSjH,MAAA,GAoB1B,GARA//G,OAAO5C,QAAQ,SAACjQ,EAAGN,GACf,IAAMO,KAAOD,EAAEC,KACXskB,aAAatkB,MAAM0kB,IAAIniB,OAAS8D,yBAAUE,YAC1CiiB,YAAY,GAAGpb,KAAKpN,MACpBwoB,YAAY,GAAGpb,KAAK6E,KAAKxS,OAI7Bk6H,UAAYC,SAAU,KAAAC,cAAAC,eAChBC,cAAgBz1G,aAAay5E,QAAQ50F,MACrC6wH,cAAgB11G,aAAa25E,QAAQ90F,OAC3C0wH,cAAArxG,YAAY,IAAGpb,KAAfqB,MAAAorH,eAAwB97B,OAAQE,UAChC67B,eAAAtxG,YAAY,IAAGpb,KAAfqB,MAAAqrH,gBAAwB7nH,KAAK8nH,eAAgB9nH,KAAK+nH,iBAEtD,OAAOxxG,8DAIP,OACI6a,EAAG,EACH34B,EAAG,2DAKP,OACI24B,EAAG,EACH34B,EAAG,6EAyBe8d,aAA0B,IAAAqR,KAM5CxL,WACA5J,OAP+B3Q,OAAaxH,UAAA1D,OAAA,QAAA4L,IAAAlI,UAAA,GAAAA,UAAA,MAC1C2tH,YAAcnmH,OAAOmmH,YACrB14F,QAAUztB,OAAOytB,QACvB,IAAKr6B,KAAK+K,OACN,SAIJ,GAAIuW,uBAAuBjjB,oBAAW,CAClC,IAAM2e,QAAUsE,YAAYnE,UAC5BgK,WAAanK,QAAQtR,OAAOzD,IAAI,SAAApP,GAAC,OAAIA,EAAEC,OACvCykB,OAASP,QAAQjS,UAEjBoc,WAAa7F,YAAY,GACzB/D,OAAS+D,YAAYxG,MAAM,EAAGwG,YAAY5f,QAG9C,IAAM8xE,OAASxzE,KAAK2wH,QACdvzG,aAAepd,KAAK+K,OAAOsS,kBAE3B21G,gBAAiBrgG,SAAGtX,OAAH9T,MAAAorB,KAAAsgG,6BAAaz/C,SAAQxgE,OAAO,SAAC4jD,OAAU,IAClDoP,MAAepP,MAAfoP,MAAOge,IAAQptB,MAARotB,IAEf,OAAO78D,WAAWzJ,MAAM,SAACpS,MAAO4G,KAC5B,OAAI5G,SAAS8R,cAAgBA,aAAa9R,OAAOkS,IAAIniB,OAAS8D,yBAAUE,WACW,IAAxEke,OAAOgI,UAAU,SAAA1sB,GAAC,OAAIA,EAAEqZ,OAAS8zD,MAAM5oD,aAAa9R,OAAOrJ,SAC3DqJ,QAAUikD,gBAAeC,SACkB,IAA3CjyC,OAAOgI,UAAU,SAAA1sB,GAAC,OAAIA,EAAEqZ,OAAS8xE,UAIpD,OAAO+uC,YAAcC,eAAiBA,eAAe/qH,IAAI,SAACpP,GACtD,IAAMqP,IAAM2V,MAAMhlB,GAClB,GAAIwhC,QAAS,CACT,IAAM1G,OAASzrB,IAAIyrB,QAAUzrB,IAC7B,QAAiBoF,IAAbpF,IAAIwwB,KAAoB,CACxB,IAAMw6F,QAA0C,EAAhCrvH,KAAKkQ,KAAK7L,IAAIwwB,KAAO70B,KAAKgwC,IAC1ClgB,OAAOkG,MAAQq5F,QACfv/F,OAAOmG,OAASo5F,QAChBv/F,OAAOwI,GAAK+2F,QAAU,EACtBv/F,OAAOnwB,GAAK0vH,QAAU,YAED5lH,IAAjBqmB,OAAOkG,QACPlG,OAAOkG,MAAQ,QAEGvsB,IAAlBqmB,OAAOmG,SACPnG,OAAOmG,OAAS,GAK5B,OAAO5xB,IAAIyrB,QAAUzrB,MACtBqI,KAAK,SAAC5V,EAAGyI,GAAJ,OAAUzI,EAAE6I,EAAIJ,EAAEI,gGAGK8d,aAAa,IAUxC2+E,aACAkzB,IAXwCC,qBACe9xG,YAAYnE,UAAzDk2G,eAD8BD,qBACpCroH,KAA8BuoH,iBADMF,qBACd1nH,OACxB29G,eAAiBrpH,KAAKqvH,gBACtBjyG,aAAepd,KAAK+K,OAAOsS,kBAHWk2G,uBASxCvzH,KAAK0sH,oBAJL31B,OALwCw8B,uBAKxCx8B,OACAF,OANwC08B,uBAMxC18B,OACAI,WAPwCs8B,uBAOxCt8B,WAPwCs8B,uBAQxCv8B,aAIe73F,yBAAUC,SACzB6gG,aAAe7iF,aAAay5E,QAAQ50F,MACpCkxH,IAAM,KACCl8B,aAAe93F,yBAAUC,UAChC6gG,aAAe7iF,aAAa25E,QAAQ90F,MACpCkxH,IAAM,KAGV,IAAM/nB,mBAsBN,OArBAie,eAAevgH,QAAQ,SAAC4lE,SACpBA,QAAQ5lE,QAAQ,SAACkU,SACb,IAAMw2G,SAAWx2G,QAAQgpD,MAGzB,GAFcstD,iBAAiB51G,MAAM,SAACxV,IAAK3P,GAAN,OACmD,IAApF86H,eAAe9tG,UAAU,SAAA1sB,GAAC,OAAI26H,SAASp2G,aAAalV,IAAIpP,MAAMmJ,SAAWpJ,EAAEN,OACpE,CACP,IAAMk7H,eAAiBz2G,QAAQm2G,KACzBp4G,IAAMiC,QAAQgpD,MACdz2D,SACN,IAAK,IAAMzV,OAAOsjB,aAAc,CAC5B,IAAMnb,MAAQmb,aAAatjB,KAAKmI,MAChCsN,MAAMzV,KAAOihB,IAAI9Y,OACbA,QAAUg+F,eACV1wF,MAAMzV,KAAO25H,gBAGrBroB,gBAAgBllG,KAAKqJ,aAKzB67F,gBAAiBprG,KAAK+K,OAAOoS,UAAUzR,8EAa3B+F,KACpB,OAAOq1E,6BAAc9mF,KAAK+xB,SAASg/B,UAAU/wD,KAAKinF,YAAYj0E,OAAO,SAAAjI,MAAI,QACpEA,OAAkC,IAA3B0G,IAAIxL,QAAQ8E,KAAKi5E,6DAU7B,OAAOwC,QAAQ4xB,IAAIp4G,KAAK+2G,sGAIxB,IAAI1tB,UACEY,QAAU,IAAIzD,QAAQ,SAACn+D,SACzBghE,UAAYhhE,UAIhB,OAFAroB,KAAK+2G,uBAAuB7wG,KAAK+jF,SAE1B,WACHZ,qEAKJ,IAAMohB,QAAUzqG,KAAKyqG,UACrB,OAAO,GAAApvF,OAAIwvF,0BAAiB17C,uBAArB,cAAA9zC,OAAwDovF,QAAQ4mB,aAAhE,QAAAh2G,OACAwvF,0BAAiB17C,uBADjB,cAAA9zC,OACoDovF,QAAQ6mB,aAD5D,oDA9jBP,QAEQ96G,YAGA5J,UACA7B,kDA4Cc,QAAA87D,KAAAzhE,UAAA1D,OAARgf,OAAQ,IAAA7X,MAAAg+D,MAAAC,KAAA,EAAAA,KAAAD,KAAAC,OAARpmD,OAAQomD,MAAA1hE,UAAA0hE,MACtB,OAAA4sD,qBAAW1zH,KAAQ0gB,8DAcnB,OACIs5B,WACI3+C,KAAM,iEAkBI0wE,KAAM4nD,UACxB,OAAOpmD,eAAexB,KAAM4nD,0DAkB5B,MAAO,qEAoHP,OAAO,mBCzSTriE,cAAO+f,QAAQ/f,KAEf/iD,kBAAW,SAAXA,SAAY1V,GAAM,IACZ86B,OAAW96B,EAAX86B,OACR,OAAoB,OAAbA,OAAOnwB,GAA2B,OAAbmwB,OAAOwI,GAQ1By3F,kBAAW,SAAXA,SAAYl5F,SACrB,IAAIs4F,eACI94B,MAAyFx/D,QAAzFw/D,MAAOnjE,UAAkF2D,QAAlF3D,UAAWy8C,OAAuE94C,QAAvE84C,OAAQx4B,YAA+DtgB,QAA/DsgB,YAAaqxD,gBAAkD3xE,QAAlD2xE,gBAAiBntE,UAAiCxE,QAAjCwE,UAAWnH,MAAsB2C,QAAtB3C,MAAOy5B,WAAe92B,QAAf82B,WAC5Ez/B,MAAQ+0D,6BAAc/vD,WAAWs6B,KAAK,QAASnyB,WAC/C20F,oBAAsB7iD,kBAAkBh2B,aACxC84E,SAAWxiE,gBACJ4F,MAAM28D,qBACN13F,EAAE,SAAAtjC,GAAC,OAAIA,EAAE86B,OAAOwI,IAChB34B,EAAE,SAAA3K,GAAC,OAAIA,EAAE86B,OAAOnwB,IAChByzD,QAAQ1oD,mBAErBykH,eAAiBx/C,OACb64B,kBACA2mB,eAAiBx/C,OAAOxgE,OAAOzE,oBAGnC49G,oBAAYp6F,MAAOgG,OACnB,IAAIgvD,QAAUC,YAAYj1D,MAAO,QAAS,IAS1C,OARAg1D,QAAQ9K,QAAQzI,OAAO,GAAGt0C,WAAW,GAChCsyB,WAAWusC,WACZhX,QAAUA,QAAQv1B,aACjBoyB,SAASpyB,WAAWoyB,UACpBlY,GAAG,MAAOwuB,MAAM0W,8BAErB7pB,QAAQ11B,KAAK,IAAKyiE,SAASd,iBACVj7F,MAAM,eAAgB,GAChCgvD,SC5CEnnE,mCACT+6E,Y9CHuB,O8CIvBD,aAAc,aACdx7D,UAAW,GACX8b,YAAa,SACbhB,WACI3+C,KAAM,SAEVq9F,aACIgQ,YACIrtG,KAAM,SACNuvH,WAAY,EAAG,GAAI,GAAI,KAE3BriB,OACIltG,KAAM,SACNuvH,WAAY,EAAG,EAAG,GAAK,KAE3BniB,QACIptG,KAAM,SACNuvH,WAAY,EAAG,EAAG,GAAK,MAG/Bze,sBAAuB,GACvBvC,UACIp3D,SACArW,KACA34B,KACA4oG,eACI5yG,MAAO,IAGfg4D,YACI2/B,OAAQ,QACRvN,SAAU,KAEdyoB,iBAAiB,srCCLA0nB,oCAOjB,SAAAA,YAAsB,IAAA/uB,iBAAAvwF,yJAAAu/G,CAAAh0H,KAAA+zH,WAAA,QAAAltD,KAAAzhE,UAAA1D,OAANsF,KAAM,IAAA6B,MAAAg+D,MAAAC,KAAA,EAAAA,KAAAD,KAAAC,OAAN9/D,KAAM8/D,MAAA1hE,UAAA0hE,MAAA,OAClBryD,MAAAw/G,+BAAAj0H,MAAAglG,iBAAAkvB,oBAAAH,YAAAr7H,KAAA6O,MAAAy9F,kBAAAhlG,MAAAqb,OAASrU,SACJ+jE,SAAW,IAAIF,qBAFFp2D,qXAPa47G,6RA8B/B,MAAO,qDAqCP,OAAOuD,0EAeM7oH,KAAM2hH,kBAAmBj2B,MAAM,IAAA9hF,OAAA3U,KACxCwzE,UACEkjB,MAAQD,KAAKt6D,EACbw6D,MAAQF,KAAKjzF,EACb68F,UAAY5J,KAAKjkD,MACjBo3D,SAAW5pG,KAAK4M,SAASg9F,SACvB5S,WAA2B01B,kBAA3B11B,WAAYC,WAAey1B,kBAAfz1B,WACdk9B,OAASn9B,aAAe73F,yBAAUE,UAClC+0H,OAASn9B,aAAe93F,yBAAUE,UAClCvF,IAAMq6H,OAASnoB,SAASpuD,EAAKw2E,OAASpoB,SAAS/nG,EAAI,KACnDsmH,cAAgB3gB,SAASp3D,MACzB87E,WAAa/D,cAAcj/G,MAC3B8R,aAAepd,KAAK+K,OAAOsS,kBAC3BmtG,gBAAkB8D,YAAclxG,aAAakxG,YAAYrsH,MACzD81B,SACAtb,QAgCN,OA9BA+2D,OAASzoE,KAAK9C,IAAI,SAACpP,EAAGN,GAClB,IAAM87H,IAAM39B,MAAM2F,cAAcxjG,EAAEsjC,GAAKu6D,MAAM4F,eAAiB,EACxDg4B,IAAM39B,MAAM0F,cAAcxjG,EAAE2K,GAAKmzF,MAAM2F,eAAiB,EAFtCi4B,eAGIjK,eAAgBh5G,MAAOzY,EAAGoJ,MAAO1J,IACzDgyH,4BAAelqB,oBAAWmqB,kCADtBh4E,MAHgB+hF,eAGhB/hF,MAAOi4E,SAHS8J,eAGT9J,SAGf1yF,MAAMy8F,OAAShiF,MACfza,MAAM,gBAAkB,EACxBtb,KAAKouG,cACLpuG,KAAKquG,cAAgBL,SACrBhuG,KAAK4uG,kBAEL,IAAMz0D,OACFxF,SACAz9B,QACIwI,EAAGtjC,EAAEsjC,aAAazvB,sBAAoB,KAAO2nH,IAC7C7wH,EAAG3K,EAAE2K,aAAakJ,sBAAoB,KAAO4nH,KAEjDv8F,YACAiuC,MAAOntE,EAAEmtE,MACTge,IAAKnrF,EAAEmrF,IACPywC,MAAO57H,EAAEmrF,IACTvgE,OAAQ5qB,EAAEmtE,MACVvpD,WAIJ,OAFAm6C,MAAM13B,UAAY2sF,uBAAuBhzH,EAAGN,EAAGwS,KAAM4J,QACrDA,OAAK+/G,WAAW77H,EAAEiB,KAAM88D,OACjBA,QAEX4c,OAAS44C,eAAepsH,KAAMwzE,8CAS1Bz8C,WAAW,IACXy8C,OACAmhD,gBACA58F,MAHW3gB,OAAApX,KAKT4M,OAAS5M,KAAK4M,SAEhBg9F,SAKAh9F,OALAg9F,SACA5uD,YAIApuC,OAJAouC,YACA9b,UAGAtyB,OAHAsyB,UACAw7D,aAEA9tF,OAFA8tF,aACAlpC,WACA5kD,OADA4kD,WAEE63D,eAAiBrpH,KAAKqvH,gBACtBjkB,gBAAkBprG,KAAKmvH,iBACvB/xG,aAAepd,KAAK+K,OAAOsS,kBAC3Bo5E,KAAOz2F,KAAKy2F,OACZ3wF,KAAOslG,gBAAgBnjG,IAAI,SAAApP,GAAC,OAAIA,EAAEiB,MAClCgpG,mBAAqB14B,sBAAsBswB,aAAc16F,KAAK82B,KAAMlqB,OAAO+tF,aAC3Ei6B,mBAAqB9tC,6BAAc/vD,WACnCu3F,WAAa1kB,SAASp3D,MAAMlnC,MAC5Bk/G,gBAAkBptG,aAAakxG,aAAelxG,aAAakxG,YAAYrsH,MAoD7E,OAlDAjC,KAAK2wH,WACL3wH,KAAKqyH,aACLuC,mBAAmB34C,QAAQ6mB,mBAAmB//F,KAAK,MAAM,GACzD6xH,mBAAmB34C,QAAQ/8C,WAAW,GACtC8nD,YAAYjwD,UAAW,IAAKsyF,eAAgB,MACxCj4D,MAAO,SAAAA,MAACnT,QPmHQ,SAAf42E,aAAgB9iG,MAAO2I,SAChC,IAAIo6F,gBACAnhG,OACI69B,WAAkC92B,QAAlC82B,WAAYujE,kBAAsBr6F,QAAtBq6F,kBACZnxC,SAA+BpyB,WAA/BoyB,SAAUuN,OAAqB3/B,WAArB2/B,OAAQ4M,SAAavsC,WAAbusC,SACtBg3B,oBACAhtC,yBAAUh2D,MAAMjD,OAAQimG,kBAAkB3jE,OAC1Cz9B,OAASohG,kBAAkBphG,OASvBmhG,gBARC/2B,SAQiBhsE,MAPAA,MAAMy/B,aACnBqyB,KAAKxa,QAAQ8nB,SACbvN,SAASA,UACTlY,GAAG,MAAO,WACPygD,oBAAYrlC,6BAAc9mF,MAAO2zB,QAAQ,KAKrDw4F,oBAAY2I,gBAAiBnhG,SOpIrBkhG,CAAa52E,OACTuT,sBACAujE,mBACI3jE,OACI4jE,iBAAkB,EAClBnsC,eAAgBzxE,OAAK69G,eAAe,iBAExCthG,QACIqhG,iBAAkBprB,SAASwC,cAAc5yG,WAKzDm6B,OAAQ,SAAAA,OAACsqB,MAAOywB,QAASn2E,GAKrB,IAAIi6C,MAJJghC,OAASp8D,OAAK89G,gBAAgBxmD,QAASt3D,OAAKs1G,oBAAqBj2B,KAAMl+F,GACvE6e,OAAKu5G,QAAQzqH,KAAKstE,QAClBmhD,gBAAkB,GAAAt5G,OAAGynF,mBAAmB,GAAtB,KAAAznF,OAA4BvV,KAAKvN,IAAMA,GAAIkJ,cAG7D,IAAM0zH,WAAavrB,SAASp3D,MAAMh5C,MAC5B47H,SAAW5hD,OAAOppD,KAAK,SAAAvxB,GAAC,OAAiC,OAA7BA,EAAEmtE,MAAMwkD,uBACLl9G,IAA7BzU,EAAEmtE,MAAMwkD,mBAGZh4E,MADA2iF,WACQA,WAAWzmD,QAASn2E,EAAG8wH,gBAEvB5yB,KAAKjkD,MAAMouD,SAASw0B,UAAYA,SAASpvD,MAAMwkD,kBAG3DzyF,MAAQ3gB,OAAK69G,aAAaziF,OAC1Bp7B,OAAKi+G,WAALj+G,EACI8iF,MAAO9iF,OACP2f,UAAWknB,MAAMnvB,OACjBksB,wBACAw4B,cACAt0C,UAAWy1F,gBACXnjE,sBACAz5B,MAAOA,UACPs0E,gBAAiBz/F,OAAOy/F,oBAGjC,SAAAxzG,GAAC,OAAIA,EAAE,GAAGmtE,MAAMwkD,kBAAoB3xH,EAAE,GAAGmrF,MAE5CgoC,oBAAoBhsH,KAAK+qE,SAAU/qE,KAAK2wH,SACjC3wH,uDAQGwyC,OACV,OACIgiF,OAAQhiF,MACRq2C,eAAgB,6DAUP1sD,EAAG34B,EAAGoJ,QACnB,IAAI0oH,aAAe1oH,OAAO0oH,aACpBvqH,KAAO/K,KAAK+K,OAElB,IAAKA,MAASA,MAAQA,KAAKw6F,UACvB,OAAO,KAGX+vB,kBAAgChoH,IAAjBgoH,aAA6BA,aAAet1H,KAAK4M,SAASu/F,sBACzE,IAAMv1C,MAAQ52D,KAAK+qE,SAAS3gD,KAAK+R,EAAG34B,EAAG8xH,cACjCvtG,WAAasjD,WAAWzU,MAAO,OAAQ,OAAQ,UAErD,GAAIA,MAAO,KAAA2+D,iBACgB3+D,MAAM7rD,KAAKA,KAA1Bi7D,MADDuvD,iBACCvvD,MAAOge,IADRuxC,iBACQvxC,IAEf,OACIltD,GAFgB92B,KAAKw1H,uBAAuBxvD,MAAOge,KAGnDj8D,aACIoU,EAAGpU,WAAWoU,EACd34B,EAAGukB,WAAWvkB,EACdq2B,MAAO,EACPC,OAAQ,IAEZ27F,QAASz1H,KAAK82B,MAGtB,OAAO,uDA7OP,MAAO,6DAkBP,OAAOlX,sFAYWmsD,KAAM4nD,UACxB,IAAM/mH,OAASyjH,qBAAUH,cAAcnkD,KAAM4nD,UACvC/pB,SAAWh9F,OAAOg9F,SAClB5vD,UAAYptC,OAAOotC,UACnBs0E,WAAa1kB,SAASp3D,OAASo3D,SAASp3D,MAAMlnC,MAKpD,OAHIgjH,aAAet0E,UAAUpyB,UACzBoyB,UAAUpyB,QAAU0mG,YAEjB1hH,qEAYP,OAAO,0jBChGf,IAAM2qD,cAAO8Z,QAAQ9Z,KAuCNm+D,cAjC6B,SAAXA,SAAYh1G,QACzC,IAAIsyG,eACI94B,MAAyFx5E,OAAzFw5E,MAAOnjE,UAAkFrW,OAAlFqW,UAAWy8C,OAAuE9yD,OAAvE8yD,OAAQz7C,MAA+DrX,OAA/DqX,MAAOy5B,WAAwD9wC,OAAxD8wC,WAAYtyB,UAA4Cxe,OAA5Cwe,UAAWmtE,gBAAiC3rF,OAAjC2rF,gBAAiBrxD,YAAgBt6B,OAAhBs6B,YAEjE26E,WAAyBnkE,WAAjC2/B,OAAoBvN,SAAapyB,WAAboyB,SACtB7xD,MAAQ+0D,6BAAc/vD,WACtB88F,oBAAsB7iD,kBAAkBh2B,aACxC8V,UAAY/+B,MAAMg/B,UAAU,QAAQhmD,MAAM2V,OAAO8yD,SAPHi4C,MAAAmK,wBAQX,QAAS,UAAU3tH,IAAI,SAAAxN,GAAC,OAAI88D,gBAAOL,MAAM28D,qBACjE13F,EAAE,SAAAtjC,GAAC,OAAIA,EAAE4B,GAAG0hC,IACZo2B,GAAG,SAAA15D,GAAC,OAAIA,EAAE4B,GAAG+I,IACbovD,GAAG,SAAA/5D,GAAC,OAAIA,EAAE4B,GAAGm4D,KACbqE,QAAQ,SAAAp+D,GAAC,OAAe,OAAXA,EAAE4B,GAAG+I,MAZiB,GAQ7CqyH,cAR6CpK,MAAA,GAQ9BqK,eAR8BrK,MAAA,GAepDuH,eAAiBx/C,OACjBzhD,MAAMs/B,KAAK,QAASnyB,WAChBmtE,kBACA2mB,eAAiBx/C,OAAOxgE,OAAO,SAAAna,GAAC,OAAmB,OAAfA,EAAE86B,OAAOnwB,KAEjD,IAAMuyH,eAAiBjlE,UAAUM,QAAQl+B,OAAO,QAAQm+B,KAAK,IAAKwkE,cAAc7C,iBAChFliE,UAAUjnD,MAAMksH,gBAAgBvkE,aAAaqyB,KAAKxa,QAAQssD,aACzC/xC,SAASA,UACTlY,GAAG,MAAOwuB,MAAM0W,6BAChBv/C,KAAK,IAAKykE,eAAe9C,iBACzBztF,KAAK,SAAU1sC,GACZ,IAAMkuF,QAAUD,6BAAc9mF,MAE9B+mF,QAAQ9K,QAAQpjF,EAAE,GAAGqmC,WAAW,GAChCjmC,OAAO6M,KAAKiyB,OAAOjvB,QAAQ,SAAAhP,KAAG,OAAIitF,QAAQhvD,MAAMj+B,IAAKi+B,MAAMj+B,irDCR9Dk8H,4qBAAkBjC,mTAwBVhpH,KAAM2hH,kBAAmBtvG,cAC9C,IAAMqrD,QAAUwtD,SAAAC,oBAAAF,UAAA37H,WAAA,0BAAA2F,MAAAtH,KAAAsH,KAA8B+K,KAAMqS,cAOpD,OANC4uF,SAASpuD,EAAGouD,SAAS/nG,GAAG6E,QAAQ,SAACzN,MACcqxH,kBADL,GAAArxG,OAC3BhgB,KAD2B,gBAErB8D,yBAAUC,cAA6BkO,IAAlBm7D,QAAQptE,QAC3CotE,QAAQptE,MAAM,GAAKwI,KAAK2P,IAAIi1D,QAAQptE,MAAM,GAAI,MAG/CotE,sDAQP,OAAOitD,sEAUM3qH,KAAM2hH,kBAAmBj2B,MAAM,IAAAhiF,MAAAzU,KACxCwzE,UACEm5C,cAAgB3sH,KAAK2sH,gBACrBtsB,UAAY5J,KAAKjkD,MACjB5lC,OAAS5M,KAAK4M,SAEd29G,cADW39G,OAAOg9F,SACOp3D,MACzB87E,WAAa/D,cAAcj/G,MAC3B8R,aAAepd,KAAK+K,OAAOsS,kBAC3BmtG,gBAAkB8D,YAAclxG,aAAakxG,YAAYrsH,MACvD40F,OAA4B61B,kBAA5B71B,OAAQE,OAAoB21B,kBAApB31B,OAAQs3B,QAAY3B,kBAAZ2B,QAVoB8H,eAczC3K,sBAAc/0B,MAFbC,MAZwCy/B,eAYxCz/B,MACAC,MAbwCw/B,eAaxCx/B,MAEEy/B,YAAcxpH,OAAOk/G,oBACrBqI,OAAS/2G,aAAay5E,SAAWz5E,aAAay5E,QAAQr5E,IAAIniB,OAAS8D,yBAAUE,UAC7E+0H,OAASh3G,aAAa25E,SAAW35E,aAAa25E,QAAQv5E,IAAIniB,OAAS8D,yBAAUE,UAC7EvF,IAAMq6H,OAAS,IAAOC,OAAS,IAAM,KAwC3C,OAvCA5gD,OAASzoE,KAAK9C,IAAI,SAACpP,EAAGN,GAClB,IAAM87H,IAAM39B,MAAM2F,cAAcxjG,EAAEsjC,GAAKu6D,MAAM4F,eAAiB,EACxDg4B,IAAM39B,MAAM0F,cAAcxjG,EAAE2K,GAC5B6yH,KAAQhI,SAAW1B,gBAAkBjhB,MAAS/U,MAAM0F,cAAcxjG,EAAE+5D,IAAM+jC,MAAM0F,cAAc,GAH5Ek4B,eAIIjK,eAAgBh5G,MAAOzY,EAAGoJ,MAAO1J,IACzDgyH,4BAAelqB,oBAAWmqB,kCADtBh4E,MAJgB+hF,eAIhB/hF,MAAOi4E,SAJS8J,eAIT9J,SAET1yF,SACAtb,QACNsb,MAAM4kB,KAAOnK,MAEb/1B,KAAKouG,cACLpuG,KAAKquG,cAAgBL,SACrBhuG,KAAK4uG,kBACL,IAAMiL,SAAWz9H,EAAE2K,aAAakJ,sBAC1B6pH,UAAY19H,EAAE+5D,cAAclmD,sBAC5BkqD,OACFxF,OACIj1B,EAAGk4F,IACH7wH,EAAG8yH,SAAW,KAAO3/B,MAAM0F,cAAc,GACzCzpC,GAAI2jE,UAAY,KAAO5/B,MAAM0F,cAAc,IAE/C1oE,QACIwI,EAAGk4F,IACH7wH,EAAG8yH,SAAW,KAAOhC,IACrB1hE,GAAI2jE,UAAY,KAAOF,MAE3BryC,IAAKnrF,EAAEmrF,IACPhe,MAAOntE,EAAEmtE,MACTviD,OAAQ5qB,EAAEmtE,MACVyuD,MAAO57H,EAAEmrF,IACT9kD,UAAWk3F,YAAcA,YAAYv9H,EAAGN,EAAGwS,KAAM0J,OAAQ,GACzDsjB,YACAtb,WAIJ,OAFAm6C,MAAM13B,UAAY2sF,uBAAuBhzH,EAAGN,EAAGwS,KAAM0J,OACrDA,MAAKigH,WAAW77H,EAAEiB,KAAM88D,OACjBA,QAEX4c,OAAS44C,eAAepsH,KAAMwzE,4EAK9BxzE,KAAKkyH,eAAiBvE,kCAA0B3tH,wDAQtCwyC,OACV,OACImK,KAAMnK,+DArHV,OAAO5yB,kFAWP,MAAO,wBChDFA,kCACT+6E,YlDHuB,OkDIvBD,aAAc,YACd95D,SAAWF,IAAK,EAAGovB,OAAQ,EAAGhsB,KAAM,EAAGC,MAAO,GAC9C7E,UAAW,GACXs3F,eAAgB,GAChB99B,aACIgQ,YACIrtG,KAAM,OACNuvH,WAAY,EAAG,GAAI,GAAI,KAE3BriB,OACIltG,KAAM,OACNuvH,WAAY,EAAG,EAAG,GAAK,KAE3BniB,QACIptG,KAAM,OACNuvH,WAAY,EAAG,EAAG,GAAK,MAG/B9wF,OAAQ,IACRD,MAAO,IACPtpB,KAAM,GACNuhE,aAAc,EACd/c,SAAU,EACVgd,UAAW,EACXpd,WAAY,EACZE,SAAU,IACV5d,QAAS,UAAW,OAAQ,QAAS,SAAU,SAAU,UACzD+C,WACI3+C,KAAM,YAEVuuG,UACI6sB,gBACIj9H,MAAO,OAEXk9H,mBACIl9H,MAAO,SAEX82G,OACI92G,MAAO,KAEXisE,QACIjsE,MAAO,KAEXy5C,SACIz5C,MAAO,KAEXg5C,OACIh5C,MAAO,KAEX+mG,OACI/mG,MAAO,KAEXk/B,MACIl/B,MAAO,MAGfm9H,iBAAkB,GAClBnlE,YACI2/B,OAAQ,QACRvN,SAAU,KAEdgzC,QACIluB,WACIxpE,UAAS,GAAA7jB,OlDnEM,OkDmEN,yBAEbw7G,SACI33F,UAAS,GAAA7jB,OlDtEM,OkDsEN,uBAEby7G,UACI53F,UAAS,GAAA7jB,OlDzEM,OkDyEN,8uDCvDrB,IAAMq2D,QAAML,QAAQK,IACd/d,QAAM0d,QAAQ1d,IAWCojE,kCAEjB,SAAAA,SAAahsH,KAAM0rF,KAAM7pF,OAAQnR,cAAc,IAAAgZ,MAAA,wJAAAuiH,CAAAh3H,KAAA+2H,WAC3CtiH,MAAAwiH,8BAAAj3H,KAAAk3H,mBAAAH,UAAAr+H,KAAAsH,KAAM+K,KAAM0rF,KAAM7pF,OAAQnR,gBACrB07H,gBAFsC1iH,kXAFb47G,yRAoC9B,MAAO,qEAWSpzG,UAAWrQ,QAAQ,IAAA+H,OAAA3U,KAC/Bo3H,WACEC,YAEF1iE,WAKA/nD,OALA+nD,WACAE,SAIAjoD,OAJAioD,SACA+0C,SAGAh9F,OAHAg9F,SACAr5F,KAEA3D,OAFA2D,KACAimH,eACA5pH,OADA4pH,eAEEc,SAAWt3H,KAAKmvH,qBAVaoI,iBC0CZ,SAAlBC,gBAAmB5tB,SAAUxsF,cAAiB,IAAAquG,MAAAgM,0BACG9rB,MAAOC,OAAQE,MAAOD,MACvE5jG,IAAI,SAAAxN,GAAC,OAAImvG,SAASnvG,GAAG6Q,QAFyB,GAChDosH,WADgDjM,MAAA,GACpCkM,YADoClM,MAAA,GACvB6C,WADuB7C,MAAA,GAAAC,MAAA+L,0BAGTC,WAHSjM,MAAA,GAGckM,aAChE1vH,IAAI,SAACxN,GACF,IAAMsxE,KAAO3uD,aAAa3iB,GAC1B,OAAIsxE,MAAQA,KAAKvuD,IAAIniB,OAAS8D,yBAAUC,QAC7B2sE,KAAK9pE,MAET,OATwC,GAYvD,OACI21H,WAbmDlM,MAAA,GAcnDmM,UAdmDnM,MAAA,GAenDoM,YAfmDpM,MAAA,GAgBnDqM,WALe1sD,WAAWjuD,aAAckxG,WAAY,UDpChDkJ,CAAgB5tB,SANC5pG,KAAK+K,OAAOsS,mBAE7Bu6G,WAb+BL,iBAa/BK,WACAC,UAd+BN,iBAc/BM,UACAC,YAf+BP,iBAe/BO,YACAC,WAhB+BR,iBAgB/BQ,WAEEC,QAAU/6G,UAAUE,UACpBpS,KAAOitH,QAAQjtH,KACfwb,KAAOyxG,QAAQzxG,KAErBvmB,KAAKm3H,gBAELG,SAASxuH,QAAQ,SAACrO,EAAGwH,OACjB0S,OAAKwiH,aAAa18H,EAAEw9H,MAAQx9H,EAAGwH,OAC/Bo1H,SAAS58H,EAAEwH,OAASxH,IAKxB28H,QAAU1lD,UACL/c,WAAYA,WAAa,IAAO9wD,KAAKgwC,IACrCghB,SAAShxD,KAAKgwC,GAAKghB,SAAW,KAC9Br7D,MAAM,SAAAX,GAAC,OAAIA,EAAE++H,aAAe,IAC5BhyF,WAAW,MAEhBr1B,KAAK7O,QAAUo2H,aAAeV,QAAQ7mH,KAAK,SAAC5V,EAAGyI,GAC3C,MnDjGa,QmDiGTmN,KACO5V,EAAEm9H,aAAe10H,EAAE00H,aACrB10H,EAAE00H,aAAen9H,EAAEm9H,eAEhC,IAAM5E,QAAUnoH,KAAKgH,OAAO,SAACC,IAAKnZ,GAAN,OAAYmZ,KAAOnZ,EAAEg/H,YAAc,IAAI,GAgBnE,OAbAT,QAAUA,QAAQrsH,MAAM9C,IAAI,SAACpP,EAAGN,GAW5B,OAVAM,EAAEq/H,iBAAmBntH,KAAKxS,GAAGu/H,cAAgBtB,eAC7C39H,EAAE07D,YAAc3nD,OAAO2nD,YACvB17D,EAAEu8H,SAAWrqH,KAAKxS,GAAGw/H,YACrBl/H,EAAEs/H,SAAWptH,KAAKxS,GAAGq/H,YACrB/+H,EAAEq6H,QAAUA,QACZr6H,EAAEo/H,IAAM1xG,KAAKhuB,GACbM,EAAE47H,MAAQ57H,EAAEo/H,IACZp/H,EAAE4qB,OAAS1Y,KAAKxS,GAChBM,EAAEu/H,cAAgBzjH,OAAKwiH,aAAat+H,EAAEo/H,KAAOtjH,OAAKwiH,aAAat+H,EAAEo/H,KAAK,GC3FlD,SAAnBI,iBAAoBf,SAAUgB,UAAW1rH,QAClD,IAAM2rH,QAAUjB,SAASgB,UAAY,GAC/BE,QAAUlB,SAASgB,WAEzB,OAAIC,SAAWC,SAEP7jE,WAAY4jE,QAAQ1jE,SACpBA,SAAU2jE,QAAQ7jE,YAEd6jE,SAOR7jE,WAAY/nD,OAAO+nD,WAAa9wD,KAAKgwC,GAAK,EAAI,IAC9CghB,SAAUjoD,OAAO+nD,WAAa9wD,KAAKgwC,GAAK,EAAI,MANxC8gB,WAAY/nD,OAAOioD,SAAWhxD,KAAKgwC,GAAK,EAAI,IAC5CghB,SAAUjoD,OAAOioD,SAAWhxD,KAAKgwC,GAAK,EAAI,KDgFtCwkF,CAAiBhB,SAAUx+H,EAAEoJ,MAAO2K,QACjC/T,gEAYIkS,MACf,OAAOA,6EAUcA,MAErB,OACI06D,OAAQkC,gCAAmB58D,OnDtJL,iGmDkKboxB,EAAG34B,GAAgB,IAAboJ,OAAaxH,UAAA1D,OAAA,QAAA4L,IAAAlI,UAAA,GAAAA,UAAA,MAC1BijG,UAAYvhB,6BAAcl6E,OAAOirE,MAAMn8B,QAAQ3wC,OAAO,GAC5D,GAAIyiB,eAAe66E,WAAY,KAAAowB,iBACLpwB,UAAU/2F,MAAxBvG,KADmB0tH,iBACnB1tH,KAAMktH,IADaQ,iBACbR,IACd,OACInhG,GAAI92B,KAAKw1H,uBAAuBzqH,KAAMktH,KACtCxC,QAASz1H,KAAK82B,MAGtB,OAAO,2EAUarlB,KACpB,OAAOq1E,6BAAc9mF,KAAK+xB,SAASg/B,UAAU/wD,KAAKinF,YAAYj0E,OAAO,SAAAna,GAAC,OAAkC,IAA9B4Y,IAAIxL,QAAQpN,EAAEyY,MAAM2mH,6CAU1FlhG,WAAW,IAAA3f,OAAApX,KAAA04H,kBAIX14H,KAAKk+F,cAFLpkE,OAFW4+F,kBAEX5+F,OACAD,MAHW6+F,kBAGX7+F,MAHW2tE,aAiBZxnG,KAAK4M,SAXJ+tF,YANW6M,aAMX7M,YACAD,aAPW8M,aAOX9M,aACA87B,eARWhvB,aAQXgvB,eACAjiE,YATWizC,aASXjzC,YACAE,YAVW+yC,aAUX/yC,YACAqd,aAXW01B,aAWX11B,aACA/c,SAZWyyC,aAYXzyC,SACAgd,UAbWy1B,aAaXz1B,UACAnxC,QAdW4mE,aAcX5mE,QACA4wB,WAfWg2C,aAeXh2C,WACAmlE,iBAhBWnvB,aAgBXmvB,iBAEEn2B,SAAWxgG,KAAKy2F,OAAO/9D,KACvB0yE,gBAAkBprG,KAAKmvH,iBACvBwJ,YAAc7+F,OAAS8G,QAAQF,IAAME,QAAQkvB,OAC7C8oE,WAAa/+F,MAAQ+G,QAAQkD,KAAOlD,QAAQmD,MAC5C80F,cAAgBzuD,sBAAsBswB,aAAc16F,KAAK82B,KAAM6jE,aAE/Dp5F,MCpMgB,SAAjBu3H,eAAkBj/F,MAAOC,OAAQltB,QAAW,IAEjD4pH,eAIA5pH,OAJA4pH,eACAjiE,YAGA3nD,OAHA2nD,YACAE,YAEA7nD,OAFA6nD,YACAkiE,iBACA/pH,OADA+pH,iBAGJ,OAAQ9yH,KAAK6P,IAAK6gD,YAAcoiE,kBAAoB,EAAIH,gBAAiB/hE,aAAe5wD,KAAK2P,IAAIsmB,OAC7FD,OAAS,GD2LKi/F,CAAeF,WAAYD,aACrCnC,8BACAjiE,wBACAE,wBACAkiE,oCAEEt2B,UAAYrgG,KAAKy2F,OAAOjkD,MACxBumF,cAAgBtkE,aAAe5wD,KAAK2P,IAAImlH,YAAaC,YAAc,EACnEI,aAAeh5H,KAAKwW,SAASivD,OAC7BwzD,iBAAmB,SAAnBA,iBAAmBpgI,GAAC,OChOL,SAAhBqgI,cAAiB5nH,MAAO/P,MAAOiV,OAAQuiH,cAAev4B,UAC/D,IAAI24B,iBAAmB,EAEnBjB,iBAEA5mH,MAFA4mH,iBACAhF,QACA5hH,MADA4hH,QAEEkG,eAAiB54B,SAAShqF,SAC1B6iH,eAAiB74B,SAASM,QAAQoyB,UAAYkG,eAAiB54B,SAASj/F,QAAQ,GAAKi/F,SAAS5zF,SAASpT,OAI7G,OAFA2/H,mBAAqB53H,MAAM,GAAKA,MAAM,KAAOiV,OAAO,GAAKA,OAAO,KAC9CjV,MAAM,IAAM22H,iBAAmB1hH,OAAO,IAAM2iH,kBAC1CJ,eAAiBM,eDqNHH,CAAcrgI,EAAG0I,MAAOy3H,aAAcD,cAAev4B,WAE7E99E,KAAOixC,UAEJY,YAAYA,YAAc1wD,KAAK2P,IAAImlH,YAAc,EAAGC,WAAa,EAAGrkE,aAAe,GACnFud,aAAaA,cACb/c,SAASA,UACTgd,UAAUA,WACnB/xE,KAAKs5H,YAAcV,WACnB54H,KAAKu5H,aAAeZ,YAEpB,IAAM7lF,EAAIk0C,YAAYF,6BAAc/vD,WAAY,KAAM,GAAjC,GAAA1b,OAAwCw9G,cAAc,GAAtD,WACZ58C,QADC,GAAA5gE,OACUw9G,cAAc,GADxB,WACoC,GACrCxnE,KAAK,YAFJ,aAAAh2C,OAE8Bu9G,WAAa,EAF3C,KAAAv9G,OAEgDs9G,YAAc,EAF9D,MAyBJa,oBACFC,YAAc,EAqBlB,OAPAzyC,YAAYl0C,EAAG,IAAKs4D,gBAAT,GAAA/vF,OAA6Bw9G,cAAc,KAE9CllG,OAvCM,SAAR+vD,MAASr8D,MACX2/D,YAAY3/D,KAAM,OAAQ,SAACxuB,EAAGN,GAAJ,QACtB+Y,MAAOzY,EACPoJ,MAAO1J,EACPmhI,MAAOh3G,KACPjG,MACIquG,cAAezqB,UAAUsmB,YAAY9tH,EAAEu8H,UACvCvK,cACAQ,sBAPG,GAAAhwG,OASJw9G,cAAc,GATV,UAUM9gG,MAAM,OAAQ,SAAAl/B,GAAC,OAAIwnG,UAAUO,SAAS/nG,EAAEyY,MAAM8jH,YAC9C5jE,aACAoyB,SAASpyB,WAAWoyB,UACpBlY,GAAG,MAAOt0D,OAAKw5F,6BACf7rB,UAAU,IAAK,mBAAAle,KAAAzhE,UAAA1D,OAAIgf,OAAJ,IAAA7X,MAAAg+D,MAAAC,KAAA,EAAAA,KAAAD,KAAAC,OAAIpmD,OAAJomD,MAAA1hE,UAAA0hE,MAAA,OClMpB,SAAX6yD,SAAYj3G,KAAMu2G,iBAAkB71H,GAAM,IAC3CkO,MAAUlO,EAAE,GAAZkO,MACFmjD,YAAcwkE,iBAAiB3nH,OAGrC,OAFAA,MAAMmjD,YAAcA,YACpBnjD,MAAM8mH,cAAc3jE,YAAcnjD,MAAM8mH,cAAc3jE,aAAeA,YAC9D,SAAUh7D,GACb,OAAOipB,KAAKyrC,4BAAe78C,MAAM8mH,cAAe9mH,MAApC68C,CAA2C10D,KD4LJkgI,CAASj3G,KAAMu2G,iBAAkBv4G,UAC/D2wC,KAAK,QAAS,SAACx4D,EAAGN,GACf,IAAMqhI,gBAAkB/N,uBAAuBhzH,EAAGN,EAAG6yG,gBAAiBh0F,QACtE,SAAAiE,OAAUw9G,cAAc,GAAxB,UAAAx9G,OAAmCw9G,cAAc,GAAjD,UAAAx9G,OAA4DxiB,EAAEoJ,MAA9D,0CAAAoZ,OACMu+G,oBAqBtB1oE,KAhBU,SAAZ2oE,UAAaxyG,KAAMxuB,GACrB,IAAIihI,QAAUN,iBAAiBC,aACzBM,eAAiBN,YAClBK,QAEMA,QAAQA,QAAQp4H,OAAS,GAAG4P,MAAMrP,QAAUpJ,EAAEoJ,MAAQ,EAC7D63H,QAAQ5zH,MAAOmhB,UAAM/V,MAAOzY,IAE5B4gI,cAJAK,UAAazyG,UAAM/V,MAAOzY,IAM9B2gI,iBAAiBO,gBAAkBD,WAQtBzoE,KAAK,QAAS,SAACx4D,EAAGN,GAAJ,SAAA8iB,OAAaw9G,cAAc,GAA3B,KAAAx9G,OAAiCw9G,cAAc,GAA/C,KAAAx9G,OAAqD9iB,KC3MhE,SAAfyhI,aAAgBR,iBAAkBhoE,WAAYynE,iBAAkBv2G,MACrE82G,iBAAiB93H,OAAS,GAC1B83H,iBAAiB1wH,QAAQ,SAACmxH,oBACtB,IAAMtlE,WAAaslE,mBAAmB,GAAG3oH,MAAMqjD,WACzCE,SAAWolE,mBAAmBA,mBAAmBv4H,OAAS,GAAG4P,MAAMujD,SACnEnkD,IAAiB,EAAV7M,KAAKgwC,GAAS8gB,YAA0B,EAAV9wD,KAAKgwC,GAAU8gB,WAAaE,UAEvEolE,mBAAmBnxH,QAAQ,SAACrO,GAAM,IACtB4sB,KAAgB5sB,EAAhB4sB,KAAM/V,MAAU7W,EAAV6W,MAEd+V,KAAKke,KAAK,WACN,IAAM20F,MAAQpzC,6BAAc9mF,MAC5Bk6H,MAAMnpE,UAAU,QACCS,aACAoyB,SAASpyB,WAAWoyB,UACpBmB,UAAU,IAAK,kBAAM,SAAUtrF,GAC5B,IAAMg7D,YAAcwkE,iBAAiB3nH,OAErC,OADAA,MAAMmjD,YAAcA,YACb/xC,KAAKyrC,4BAAe78C,OACvBqjD,WAAYjkD,IACZmkD,SAAUnkD,IACV+jD,yBAHQtG,CAIT10D,OAEN+rC,SACjB00F,MAAM10F,eDmLlBw0F,CAAaR,iBAAkBhoE,WAAYynE,iBAAkBv2G,MACtD1iB,+EAUeshB,aACtB,IAAKthB,KAAK+K,OACN,SAEJ,IAAMoc,WAAa7F,YAAY,GACzB/D,OAAS+D,YAAYxG,MAAM,EAAGwG,YAAY5f,QAC1Cy4H,UAAYrzC,6BAAc9mF,KAAK+xB,SAASg/B,UAAU,QAAQhmD,OAC1DqS,aAAepd,KAAK+K,OAAOsS,kBAc3B+8G,YAZeD,UAAUnnH,OAAO,SAACqnH,OACnC,IAAMtvH,KAAOsvH,MAAM/oH,MAAMvG,KACnBktH,IAAMoC,MAAM/oH,MAAM2mH,IACxB,OAAO9wG,WAAWzJ,MAAM,SAACpS,MAAO4G,KAC5B,OAAI5G,SAAS8R,cAAgBA,aAAa9R,OAAOkS,IAAIniB,OAAS8D,yBAAUE,WACU,IAAvEke,OAAOgI,UAAU,SAAA1sB,GAAC,OAAIA,EAAEqZ,OAASnH,KAAKqS,aAAa9R,OAAOrJ,SAC1DqJ,QAAUikD,gBAAeC,SACkB,IAA3CjyC,OAAOgI,UAAU,SAAA1sB,GAAC,OAAIA,EAAEqZ,OAAS+lH,UAKnB,GACjC,GAAImC,YAAa,CACb,IAAMhnD,SAAWgnD,YAAYV,MAAMtmD,SAASgnD,YAAY9oH,OACxD,QACI6qB,EAAGi3C,SAAS,GAAKpzE,KAAKs5H,YAAc,EACpC91H,EAAG4vE,SAAS,GAAKpzE,KAAKu5H,aAAe,EACrC1/F,MAAO,EACPC,OAAQ,IAGhB,iEAIA,OAAO,GAAAze,OAAIwvF,0BAAiB17C,uBAArB,2EApSP,OAAOvvC,iFAWP,MAAO,sBEaA06G,cAvDE,SAAXA,SAAYvjG,UAAWhsB,KAAM6B,OAAQixB,YACvC,IAAMizB,UAAYg2B,6BAAc/vD,WAAWg6B,UAAU,KAAKhmD,KAAKA,MAEzDwvH,eAAiBzpE,UAAUM,QAAQl+B,OAAO,KAC3CqS,KAAK,SAAUvoB,SACZ8qE,wBAAS9nF,KAAMgd,QAAQo0C,SAE1BvnD,MAAMinD,WACL/4B,MAAQ0wD,qCAAsB3B,6BAAc/vD,WAAYnqB,OAAOsyB,WAC/D3F,SAAWl4B,SAAS02B,MAAMwB,SAAU,IA2C1C,OAzCAsE,WAAWzF,SAASL,OACpBwiG,eAAeh1F,KAAK,SAAUvoB,SAC1B,IAGIw9G,cAHEzzC,QAAUD,6BAAc9mF,MACtB2zB,OAAsD3W,QAAtD2W,OAAQtzB,KAA8C2c,QAA9C3c,KAAMmyC,MAAwCx1B,QAAxCw1B,MAAOioF,WAAiCz9G,QAAjCy9G,WAAmBC,UAAc19G,QAArB+a,MACnC4iG,WAAa39G,QAAQ29G,WAE3B,GAAIH,cAAgBG,WAAWnhI,MAAO,CAClC,IACIwpC,KADE43F,kBAAoBD,WAAW/5F,QADHi6F,sBAGRh9F,WAAWO,WAAWphB,QAAQ3c,MAAhDw5B,MAH0BghG,sBAG1BhhG,MAAOC,OAHmB+gG,sBAGnB/gG,OACTghG,aAAe9zC,YAAYD,QAAS,QAAS,IAG/C/jD,KADe,QAAfy3F,WACO5gG,MACe,UAAf4gG,WACA,EAEA5gG,MAAQ,EAGnBiuD,wBAASgzC,aAAahsG,QAClBqN,EAAGxI,OAAOwI,EAAI6G,KAAO43F,kBAAoB,EACzCp3H,EAAGmwB,OAAOnwB,EAAI+1B,SAAWqhG,kBAAoB,EAC7C/gG,MAAOA,MAAQ+gG,kBACf9gG,OAAQA,OAAS8gG,oBAErBD,YAAc5yC,yBAAU+yC,cACpBH,WAAYH,gBAGpB,IAAM7xC,OAAS3B,YAAYD,QAAS,OAAQ,SAAAluF,GAAC,OAAKA,KAAIwH,KAAKA,MACrD0wG,SAAWpoB,OAAO75D,OACxB4rG,WAAa3yC,yBAAUgpB,SAAU2pB,WACjCloF,OAASu1C,yBAAUgpB,UACfp0D,KAAMnK,QAEVx1B,QAAQkiB,WAAaypD,OAAO1M,QAAQj/D,QAAQkiB,WAAW,GACvD4oD,wBAASipB,SAAUp9E,QACnBg1D,OAAOt3B,KAAK,cAAeopE,cAE/B3pE,UAAUI,OAAO1rB,SACVsrB,WChEElxC,mCACT86E,aAAc,aACdC,YtDJuB,OsDKvBz7D,UAAW,GACX8a,WACI3+C,KAAM,YAEVq9F,aACIgQ,YACIrtG,KAAM,OACNuvH,WAAY,EAAG,GAAI,GAAI,KAE3BriB,OACIltG,KAAM,OACNuvH,WAAY,EAAG,EAAG,GAAK,KAE3BniB,QACIptG,KAAM,OACNuvH,WAAY,EAAG,EAAG,GAAK,MAG/Bp5D,YACI2/B,OAAQ,QACRvN,SAAU,KAEdgmB,UACIp3D,SACAnyC,MACI7G,MAAO,GACP4I,UAAW,SAAAA,UAAClB,IAAK3I,EAAGwS,KAAM2vB,SAEtB,OADoBA,QAAQg/D,aACrBA,CAAYx4F,MAEvBy5H,YACI/5F,QAAS,MAIrBg2F,QACIluB,WACIxpE,UAAS,GAAA7jB,OtD1CM,OsD0CN,0BAEbw7G,SACI33F,UAAS,GAAA7jB,OtD7CM,OsD6CN,wBAEby7G,UACI53F,UAAS,GAAA7jB,OtDhDM,OsDgDN,quDCvBA0/G,4qBAAkB1K,6RAc/B,MAAO,+DAUMtlH,KAAM6+F,SAAUnT,MAgB7B,IAhBmC,IAAAhiF,MAAAzU,KAC/BwzE,UACE6sB,UAAY5J,KAAKjkD,MACjBwoF,aAAepxB,SAASvpG,KACf46H,UAA+CD,aAAtD1vH,MAAkB9R,MAAoCwhI,aAApCxhI,MAAkB0hI,cAAkBF,aAA7B54H,UAC3BmoH,cAAgB3gB,SAASp3D,MACzB87E,WAAa/D,eAAiBA,cAAcj/G,MAC5C8R,aAAepd,KAAK+K,OAAOsS,kBAE3B89G,mBAAqBvxB,SAASvpG,KAAKs6H,WACnCC,kBAAoBO,mBAAmBv6F,QACvCw6F,gBAAkBD,mBAAmB3hI,MACrCgxH,gBAAkBptG,aAAakxG,YAAclxG,aAAakxG,YAAYrsH,OAAS,EAC/Eo5H,eAAiBJ,UAAY79G,aAAa69G,YAAc79G,aAAa69G,WAAWh5H,OAAS,EACzF4vH,KAAO7lB,SAASpuD,EAChBg0E,KAAO5lB,SAAS/nG,EAfa6jE,MAAA,SAAAA,MAgB1BvvE,EAAOkQ,KACZ,IAAM5P,EAAIkS,KAAKxS,GACTwiB,IAAMliB,EAAEmtE,MACRs1D,UAAYL,UAAYlgH,IAAIsgH,gBAAkB7hI,MAnBrBiyH,MAAA8P,oBAqBX1J,KAAMD,MAAM3pH,IAAI,SAAA5M,MAAI,OAAKo7F,KAAKp7F,MAAQo7F,KAAKp7F,MAAMghG,cAAcxjG,EAAEwC,OAC7Eo7F,KAAKp7F,MAAMihG,eAAiB,EAAI,IAtBT,GAqBxB+3B,IArBwB5I,MAAA,GAqBnB6I,IArBmB7I,MAAA,GAAA8I,eAwBHjK,eAAgBh5G,MAAOzY,EAAGoJ,MAAO1J,IACvDgyH,4BAAelqB,oBAAWmqB,kCADxBh4E,MAxBuB+hF,eAwBvB/hF,MAAOi4E,SAxBgB8J,eAwBhB9J,SAGT7zD,OACFxF,SACAz9B,QACIwI,EAAGk4F,IACH7wH,EAAG8wH,KAEPj0H,KAAM66H,cAAcI,UAAW/iI,EAAGwS,KAAM0J,OACxC+9B,YACAmoF,YACInhI,MAAO4hI,2BAA2BtmH,SAAWsmH,gBAAgBviI,EAAGN,EAAGwS,KAAM0J,OAAQ,KACjFmsB,QAASg6F,mBAEbn+G,MACIouG,cACAC,cAAeL,SACfY,mBAEJtzF,SACAiuC,MAAOjrD,IACPipE,IAAKnrF,EAAEmrF,IACPvgE,OAAQ5qB,EAAEmtE,MACVyuD,MAAO57H,EAAEmrF,KAGbptB,MAAM13B,UAAY2sF,uBAAuBhzH,EAAGN,EAAGwS,KAAM0J,OACrD++D,OAAOttE,KAAK0wD,QApCPr+D,EAAI,EAAGkQ,IAAMsC,KAAKrJ,OAAQnJ,EAAIkQ,IAAKlQ,IAAKuvE,MAAxCvvE,GA4CT,OAJAi7E,QADAA,OAAS44C,eAAepsH,KAAMwzE,SACdxgE,OAAO,SAACna,GACpB,IAAM86B,OAAS96B,EAAE86B,OACjB,OAAQrgB,MAAMqgB,OAAOwI,KAAO7oB,MAAMqgB,OAAOnwB,2CAUzCuzB,WAAW,IACXy8C,OADW7+D,OAAA3U,KAET4M,OAAS5M,KAAK4M,SACdg9F,SAAWh9F,OAAOg9F,SAClByf,eAAiBrpH,KAAKqvH,gBACtBnwF,UAAYtyB,OAAOsyB,UACnB4jE,mBAAqB14B,sBAAsBx9D,OAAO8tF,aAAc16F,KAAK82B,KAAMlqB,OAAO+tF,aAClFlE,KAAOz2F,KAAKy2F,OAoBlB,OAnB2B3P,6BAAc/vD,WAEtBklD,QAAnB,GAAA5gE,OAA8BynF,mBAAmB//F,KAAK,KAAtD,KAAAsY,OAA8D6jB,YAAa,GAC3E+oD,+BACIl9E,KAAMs+G,eACNn2F,OAAQ,IACRsiD,SAAU,IACVz+C,oBACAwO,KAAM,SAAAA,KAACmpC,QAASzwB,MAAO1lD,GACnB,IAAMu2B,KAAOmvB,MAAMnvB,OACnB0kD,OAAS7+D,OAAKugH,gBAAgBxmD,QAASk7B,SAAUnT,KAAMl+F,GACvDwvF,yBAAUj5D,MACN0sG,cvD/Hc,WuDiIlBlB,cAASxrG,KAAM0kD,QACXt0C,UAAW4jE,mBAAmB,IAC/BnuF,OAAK4hG,cAAc14E,eAGvB79B,6DAjHP,OAAO4f,kFAIP,MAAO,wBC2EA67G,eAtCgC,SAAdA,YAAe/6G,QAAW,IAC/Cw5E,MAAoDx5E,OAApDw5E,MAAOnjE,UAA6CrW,OAA7CqW,UAAWy8C,OAAkC9yD,OAAlC8yD,OAAQhiB,WAA0B9wC,OAA1B8wC,WAAYtyB,UAAcxe,OAAdwe,UACtC0kD,SAA+BpyB,WAA/BoyB,SAAUuN,OAAqB3/B,WAArB2/B,OAAQ4M,SAAavsC,WAAbusC,SACpBhsE,MAAQ+0D,6BAAc/vD,WAG5B,OADAhF,MAAMs/B,KAAK,QAASnyB,WACb8nD,YAAYj1D,MAAO,IAAKyhD,OAAQ,MACnCpiB,MAAO,SAAAA,MAACnT,MAAOplD,GAAM,IACTu4D,MAAUv4D,EAAVu4D,MACRnT,MAAMoT,KAAK,YAAX,aAAAh2C,OAAqC+1C,MAAMj1B,EAA3C,KAAA9gB,OAAgD+1C,MAAM5tD,EAAtD,OAEJmwB,OAAQ,SAAAA,OAACsqB,MAAOplD,IAvDJ,SAAd6iI,YAAwB7iI,EAAG8iI,cAAc,IACnCp7B,MAAwB1nG,EAAxB0nG,MAAO7nE,KAAiB7/B,EAAjB6/B,KAAM/E,OAAW96B,EAAX86B,OAErB,GAAI4sE,iBAAiB/Z,QACjB+Z,MAAMnW,KAAK,SAAC/7D,KACRx1B,EAAE0nG,MAAQlyE,IACVqtG,YAAY7iI,EAAG8iI,qBAEhB,GAAIp7B,iBAAiBq7B,QAAS,CACjC,IAAIC,SAAWt7B,MAAM7oB,WAAU,GAE/B,GAAwC,QAApCmkD,SAASC,SAASr6H,cAAyB,CAC3C,IAAMs6H,IAAMF,SAASE,KAAOF,SAASG,MACrCH,SAAWvlG,SAASuM,gBAAgB,6BAA8B,UACzDd,aAAa,OAAQg6F,KAElC,IAAME,aAAen1C,6BAAc+0C,UACT,SAAtBA,SAASC,UAA6C,UAAtBD,SAASC,SACzCG,aAAa5qE,KAAK,YAAlB,SAAAh2C,OAAwCqd,KAAO,IAA/C,OAEAujG,aAAa5qE,KAAK,SAAU34B,MAC5BujG,aAAa5qE,KAAK,QAAS34B,OAE/BujG,aAAa5qE,KAAK,KAAM34B,KAAO,GAC/BujG,aAAa5qE,KAAK,KAAM34B,KAAO,GAC/BsuD,YAAY20C,aAAc,kBAAME,WAAW,SACxC,GAAqB,iBAAVt7B,MAAoB,CAClC,IAAI27B,QAIAA,QA5CM,SAAZC,UAAahyH,KACf,SAAI,0CAA0CtM,KAAKsM,MAAQ,UAAUtM,KAAKsM,MAAQA,IAAIzI,OAAS,GAwCvFy6H,CAAU57B,OACAA,MAEA/wB,uBAAU+wB,OAAO7nE,KAAKA,KAAtB82C,CAA4B77C,QAE1CqzD,YAAY20C,aAAc,OAAQ,SAAA5wH,MAAI,OAAKA,QAAOsmD,KAAK,IAAK6qE,cAE5DrjI,EAAE0nG,MAAQ,SACVm7B,YAAY7iI,EAAG8iI,cAoBXD,CAAY7iI,EAAGolD,OADG,IAEVtqB,OAAkB96B,EAAlB86B,OAAQoE,MAAUl/B,EAAVk/B,MAChB6yC,eAAe7yC,MAAO,SAAAj+B,KAAG,OAAImkD,MAAMlmB,MAAMj+B,IAAKi+B,MAAMj+B,QACpDmkD,MAAMoT,KAAK,QAASnyB,WACpB+e,MAAMg+B,QAAQpjF,EAAEqmC,WAAW,GACtB6+D,WACD9/C,MAAQA,MAAMuT,aACToyB,SAASpyB,WAAWoyB,UACpBlY,GAAG,MAAOwuB,MAAM0W,8BAEzB3yD,MAAMoT,KAAK,YAAX,aAAAh2C,OAAqCsY,OAAOwI,EAA5C,KAAA9gB,OAAiDsY,OAAOnwB,EAAxD,OAEJ0tD,KAAM,SAAAA,KAACkrE,WACEr+B,SAODq+B,UAAU52F,SANV42F,UAAU5qE,aAAaqyB,KAAKxa,QAAQ8nB,SACnCvN,SAASA,UACTlY,GAAG,MAAO,kBAAM0wD,UAAU52F,WAC1BzN,MAAM,eAAgB,GACtBA,MAAM,iBAAkB,KAKlCrX,OAAOymE,QCzGDvnE,oCACT86E,aAAc,cACdx7D,UAAW,GACXy7D,YzDLuB,OyDMvB0hC,cAAe,SACf3jC,aACIgQ,YACIrtG,KAAM,OACNuvH,WAAY,EAAG,GAAI,GAAI,KAE3BriB,OACIltG,KAAM,OACNuvH,WAAY,EAAG,EAAG,GAAK,KAE3BniB,QACIptG,KAAM,OACNuvH,WAAY,EAAG,EAAG,GAAK,MAI/BsC,aAAc,GACd/gB,sBAAuB,GACvBnyD,WACI3+C,KAAM,YAEVm2D,YACI2/B,OAAQ,QACRvN,SAAU,KAEdgmB,UACIlxE,MACIl/B,MAAO,IAEXg5C,SACA+tD,OACI/mG,MAAO,UAEX2iC,KACA34B,KACA4oG,eACI5yG,MAAO,IAEX8iI,aACI9iI,MAAO,KAGf+iI,QAAS,SAAU,QAAS,UAAW,SAAU,OAAQ,MAAO,YAChEC,OAAQ,GAAI,GAAI,GAAI,GAAI,GAAI,mrEChBXC,sCAOjB,SAAAA,aAAsB,IAAAz3B,iBAAAvwF,0JAAAioH,CAAA18H,KAAAy8H,YAAA,QAAA51D,KAAAzhE,UAAA1D,OAANsF,KAAM,IAAA6B,MAAAg+D,MAAAC,KAAA,EAAAA,KAAAD,KAAAC,OAAN9/D,KAAM8/D,MAAA1hE,UAAA0hE,MAAA,OAClBryD,MAAAkoH,gCAAA38H,MAAAglG,iBAAA43B,qBAAAH,aAAA/jI,KAAA6O,MAAAy9F,kBAAAhlG,MAAAqb,OAASrU,SACJ+jE,SAAW,IAAIF,qBACpBp2D,MAAKm4G,WAAav5C,OAAOpsC,OAHPxyB,wXAPc47G,iSAoBhC,MAAO,4DAoDMtlH,KAAM6+F,SAAUnT,MA2B7B,IA3BgD,IAAA9hF,OAAA3U,KAAb4M,OAAaxH,UAAA1D,OAAA,QAAA4L,IAAAlI,UAAA,GAAAA,UAAA,MAC5CouE,UAEMqpD,aAKNjzB,SALAlxE,KACOokG,cAIPlzB,SAJArJ,MACOgqB,cAGP3gB,SAHAp3D,MACArW,EAEAytE,SAFAztE,EACA34B,EACAomG,SADApmG,EAEEgrH,UAAYqO,aAAavxH,MACzByxH,UAAYF,aAAarjI,MACzB+0H,WAAauO,cAAcxxH,MAC3BurF,OAAS16D,EAAE7wB,MACXyrF,OAASvzF,EAAE8H,MACHk1F,SAA+B/J,KAArC/9D,KAAuB4nE,UAAc7J,KAArB8J,MAClBnjF,aAAepd,KAAK+K,OAAOsS,kBAC3B82G,OAAS/2G,aAAay5E,SAAWz5E,aAAay5E,QAAQr5E,IAAIniB,OAAS8D,yBAAUE,UAC7E+0H,OAASh3G,aAAa25E,SAAW35E,aAAa25E,QAAQv5E,IAAIniB,OAAS8D,yBAAUE,UAC7EvF,IAAMq6H,OAASnoB,SAASpuD,EAAKw2E,OAASpoB,SAAS/nG,EAAI,KACnDqqH,WAAa/D,eAAiBA,cAAcj/G,MAC5Ck/G,gBAAkBptG,aAAakxG,aAAelxG,aAAakxG,YAAYrsH,MACvEi8F,YAAcl+F,KAAKk+F,cACnB8+B,gBAAkB5/G,aAAamxG,aAAenxG,aAAamxG,YAAYtsH,MACvEg7H,eAAiB7/G,aAAaoxG,YAAcpxG,aAAaoxG,WAAWvsH,MACpEo+F,UAAY5J,KAAKjkD,MAxByB0qF,eAyBbtwH,OAAOq0C,OAA/Bk8E,QAzBqCD,eAyBxC/gG,EAAeihG,QAzByBF,eAyB5B15H,EAzB4BskE,MAAA,SAAAA,MA2BvCvvE,EAAOkQ,KACZ,IAAM5P,EAAIkS,KAAKxS,GACTwiB,IAAMliB,EAAEmtE,MACRttC,KAAOqkG,qBAAqBjoH,SAAWioH,UAAUlkI,EAAGN,GAAKioG,SAASM,QAAQ/lF,IAAIkiH,iBAC9E18B,MAAQD,UAAUO,SAAS9lF,IAAIiiH,kBA/BOvR,MAAA4R,qBAiC1BrxB,SAASpuD,EAAGouD,SAAS/nG,GAAGgE,IAAI,SAAC5M,MAC3C,IAAM7B,MAAoB,OAAZX,EAAEwC,WAAiBiS,EAAYzU,EAAEwC,MACzC2lG,QAAU3lG,OAAS2wG,SAASpuD,EAAIsgD,YAAYrkE,MAAQqkE,YAAYpkE,OACtE,OAAQ8vE,SAASvuG,MAAMiQ,MAAsBmrF,KAAKp7F,MAAMghG,cAAc7iG,OAAvCwnG,QAAU,IApCD,GAiCvCqzB,IAjCuC5I,MAAA,GAiClC6I,IAjCkC7I,MAAA,GAuC5C4I,KAAO8I,QACP7I,KAAO8I,QAxCqC,IAAA7I,eA0ChBjK,eAAgBh5G,MAAOzY,EAAGoJ,MAAO1J,IACvDgyH,4BAAelqB,oBAAWmqB,kCADxBh4E,MA1CoC+hF,eA0CpC/hF,MAAOi4E,SA1C6B8J,eA0C7B9J,SAGT1yF,OACF4kB,KAAMnK,MACNgiF,OAAQhiF,OAGZ,IAAKl/B,MAAM+gH,OAAS/gH,MAAMghH,KAAM,CAC5B,IAAM19D,OACFxF,OACIj1B,EAAGk4F,IACH7wH,EAAG8wH,KAEP3gG,QACIwI,EAAGk4F,IACH7wH,EAAG8wH,KAEP/zB,YACA7nE,KAAM70B,KAAKsnB,IAAIuN,MACfjc,MACIouG,cACAC,cAAeL,SACfY,mBAEJtzF,YACAiuC,MAAOjrD,IACPipE,IAAKnrF,EAAEmrF,IACPvgE,OAAQ5qB,EAAEmtE,MACVyuD,MAAO57H,EAAEmrF,KAEbptB,MAAM13B,UAAY2sF,uBAAuBhzH,EAAGN,EAAGwS,KAAM4J,QACrD6+D,OAAOttE,KAAK0wD,OACZjiD,OAAK+/G,WAAW77H,EAAEiB,KAAM88D,SAhDvBr+D,EAAI,EAAGkQ,IAAMsC,KAAKrJ,OAAQnJ,EAAIkQ,IAAKlQ,IAAKuvE,MAAxCvvE,GAoDT,OADAi7E,OAAS44C,eAAepsH,KAAMwzE,8CAU1Bz8C,WAAW,IAEX49F,gBAFWv9G,OAAApX,KACXs9H,QAAU,EAER1wH,OAAS5M,KAAK4M,SACd9G,KAAO9F,KAAKmvH,iBAAiBlnH,IAAI,SAAApP,GAAC,OAAIA,EAAEiB,MACtC03D,WAAqD5kD,OAArD4kD,WAAYtyB,UAAyCtyB,OAAzCsyB,UAAWw7D,aAA8B9tF,OAA9B8tF,aAAcC,YAAgB/tF,OAAhB+tF,YACvC0uB,eAAiBrpH,KAAKqvH,gBACtBuF,mBAAqB9tC,6BAAc/vD,WACnC+rE,mBAAqB14B,sBAAsBswB,aAAc16F,KAAK82B,KAAM6jE,aAC1E36F,KAAK2wH,WACL3wH,KAAKqyH,aAELuC,mBAAmB34C,QAAQ6mB,mBAAmB//F,KAAK,MAAM,GAAMk5E,QAAQ/8C,WAAW,GAElFl/B,KAAK2wH,QAAU3wH,KAAKu9H,mBAAmBlU,eAAgBvjH,MACvD,IAAM4F,OAAS1L,KAAK+K,OAAO8gB,YAiB3B,OAhBAm7D,YAAYjwD,UAAW,IAAK/2B,KAAK2wH,QAAS,MACtCh9F,OAAQ,SAAAA,OAACsqB,MAAOu1B,QACZ8pD,QAAUz5H,KAAK6P,IAALnM,MAAA1D,MAASy5H,SAALjiH,OAAAmiH,wBAAiBhqD,OAAOvrE,IAAI,SAAApP,GAAC,OAAIA,EAAE6/B,UACjDi8F,gBAAe,GAAAt5G,OAAMynF,mBAAmB,IACxC1rF,OAAK4N,YAAYy4G,QAAjBrmH,EACI8iF,MAAO9iF,OACP2f,UAAWknB,MAAMnvB,OACjB0kD,cACAt0C,UAAWy1F,gBACXnjE,sBACA21B,MAAO,SAAAA,MAAAv9E,GAAC,OlBuQH,SAAZ8zH,UAAaj6G,OAAQ/X,QAAT,OAAoB+X,OAAOzQ,OAAO,SAAC9R,IAAK3I,GAAN,OAAYmT,OAAOnT,IAC1EmT,OAAOnT,GAAG8C,OAAS8D,yBAAUE,YAAW0D,OkBxQZ26H,CAAU9zH,EAAE6Z,OAAQ/X,aAGzC,SAAAX,MAAI,OAAIA,KAAK,GAAGi5E,MACnBhkF,KAAK29H,SAA0C,EAA/B95H,KAAKkQ,KAAKupH,QAAUz5H,KAAKgwC,IACzCm4E,oBAAoBhsH,KAAK+qE,SAAU/qE,KAAK2wH,SACjC3wH,mEAGSqpH,eAAgBvjH,MAAM,IAAA4tB,OAAA1zB,KAChC4pG,SAAW5pG,KAAK4M,SAASg9F,SACzBnT,KAAOz2F,KAAKy2F,OAFoBmnC,qBAAAP,oBAGA9Q,2BAAmBvsH,KAAM8F,MAHzB,GAG/B+3H,aAH+BD,qBAAA,GAGjBE,cAHiBF,qBAAA,GAIhCG,cAAgBF,aAAa9Q,iBAC7BiR,cAAgBF,cAAc/Q,iBACpC,OAAO1D,eAAephH,IAAI,SAACymE,QAASn2E,GAChC,IAAM0lI,gBAAkBvqG,OAAKwqG,qBAAqBH,cAAcxlI,GAAIylI,cAAczlI,GAAIslI,aAAahR,KAC/FiR,cAAcjR,MAClB,OAAOn5F,OAAKwhG,gBAAgBxmD,QAASk7B,SAAUnT,KAAMwnC,mBACtDjrH,OAAO,SAAAna,GAAC,OAAIA,EAAE6I,2EAGCy7H,QAASC,QAASe,UAAWC,YAC/C,OACIn9E,QACI9kB,GAAIghG,SAAW,GAAKgB,UAAY,EAChC36H,GAAI45H,SAAW,GAAKgB,WAAa,GAErCvR,MACI1wF,EAAGgiG,UACH36H,EAAG46H,qEAWEjiG,EAAG34B,GAChB,IAAM66H,cAAgBx6H,KAAK6P,IAAI1T,KAAK29H,SAAU39H,KAAK4M,SAASu/F,uBAE5D,IAAKnsG,KAAK+K,OACN,OAAO,KAGX,IAAM6rD,MAAQ52D,KAAK+qE,SAAS3gD,KAAK+R,EAAG34B,EAAG66H,eACjCt2G,WAAa6uC,OAASA,MAAM7rD,KAAKA,KAAK4oB,OACtC8xC,OAAS7O,MAAQ/yD,KAAKkQ,KAAK6iD,MAAM7rD,KAAKA,KAAK2tB,KAAO70B,KAAKgwC,IAAM,EAEnE,GAAI+iB,MAAO,KAAA2+D,iBACgB3+D,MAAM7rD,KAAKA,KAA1Bi7D,MADDuvD,iBACCvvD,MAAOge,IADRuxC,iBACQvxC,IAEf,OACIltD,GAFgB92B,KAAKw1H,uBAAuBxvD,MAAOge,KAGnDj8D,aACIoU,EAAGpU,WAAWoU,EACd34B,EAAGukB,WAAWvkB,EACdq2B,MAAO4rC,OACP3rC,OAAQ2rC,SAEZgwD,QAASz1H,KAAK82B,MAGtB,OAAO,6DAhOP,OAAOlX,uFAGWmsD,KAAM4nD,UACxB,IAAM/mH,OAASyjH,qBAAUH,cAAcnkD,KAAM4nD,UACvC/pB,SAAWh9F,OAAOg9F,SAClB5vD,UAAYptC,OAAOotC,UACnBs0E,WAAa1kB,SAASp3D,OAASo3D,SAASp3D,MAAMlnC,MAKpD,OAHIgjH,aACAt0E,UAAUpyB,QAAU0mG,YAEjB1hH,uDAWP,MAAO,gDAWP,OAAO6uH,iCCnDyB6C,mBAAY,SAAZA,UAAa59G,QAAW,IACpDw5E,MAAoCx5E,OAApCw5E,MAAO1mB,OAA6B9yD,OAA7B8yD,OAAQz8C,UAAqBrW,OAArBqW,UAAWowD,MAAUzmE,OAAVymE,MAKlC,OAAOH,YAAYjwD,UAAW,OAAQy8C,OAAQ,MAH1CpiB,MADc,SAAAA,MACP/pC,KAAMxuB,IAdF,SAAb0lI,WAAcl3G,KAAMxuB,GACtB,IAAMi4D,UAAYzpC,KACZ+pC,MAAQv4D,EAAEu4D,UAChBn4D,OAAOub,QAAQ48C,OAAOtoD,QAAQ,SAAAuoD,MAAI,OAAM/9C,MAAM+9C,KAAK,KAAOP,UAAUO,KAAKA,KAAK,GAAIA,KAAK,MAWjEktE,CAAWl3G,KAAMxuB,IACnC86B,OAFc,SAAAA,OAENtM,KAAMxuB,EAAGN,IAtCF,SAAjBimI,eAAkBtkC,MAAO7yE,KAAM/V,MAAOrP,MAAOy4B,SAAY,IACnD82B,WAAe92B,QAAf82B,WACAoyB,SAA+BpyB,WAA/BoyB,SAAUma,SAAqBvsC,WAArBusC,SAAU5M,OAAW3/B,WAAX2/B,OACtBrgC,UAAYzpC,KAEZo3G,cAAgB1gC,SAAWjtC,UAC7BA,UAAUU,aACToyB,SAASA,UACTC,KAAKxa,QAAQ8nB,SACbzlB,GAAG,MAAOwuB,MAAM0W,6BACfj9E,OAASriB,MAAMqiB,QAAUriB,MACzB66G,YAAc76G,MAAMymB,UAC1BzmB,MAAM4tB,WAAa4xB,UAAUmrB,QAAQ3qE,MAAM4tB,WAAW,GACtDjmC,OAAOub,QAAQmf,QAAQ7qB,QAAQ,SAAAuoD,MAAI,OAAM/9C,MAAM+9C,KAAK,KAAOotE,cAAcptE,KAAKA,KAAK,GAAIA,KAAK,MAC5Fp4D,OAAOub,QAAQ23G,aAAarjH,QAAQ,SAAAu5B,UAAQ,OAAIyuB,UAAU/4B,MAAMsK,SAAS,GAAIA,SAAS,MAwB5Dm8F,CAAetkC,MAAO7yE,KAAMxuB,EAAGN,EAAGmoB,UAEGymE,QChDtDvnE,kCACT+6E,Y5DHuB,O4DIvBD,aAAc,YACdx7D,UAAW,GACXw5D,aACIgQ,YACIrtG,KAAM,OACNuvH,WAAY,EAAG,GAAI,GAAI,KAE3BriB,OACIltG,KAAM,OACNuvH,WAAY,EAAG,EAAG,GAAK,KAE3BniB,QACIptG,KAAM,OACNuvH,WAAY,EAAG,EAAG,GAAK,MAG/B5wE,WACI3+C,KAAM,SAEVm2D,YACI2/B,OAAQ,QACRvN,SAAU,KAEdspC,aAAc,GACdtjB,UACIp3D,SACArW,KACA34B,KACAq8C,MACA+S,OAEJgkE,QACIluB,WACIxpE,UAAS,GAAA7jB,O5DrCM,O4DqCN,yBAEbw7G,SACI33F,UAAS,GAAA7jB,O5DxCM,O4DwCN,uBAEby7G,UACI53F,UAAS,GAAA7jB,O5D3CM,O4D2CN,0BC9BfqjH,sDAAoB,SAApBA,kBAAqBrjI,KAAMsjI,SAAU/xH,OAAQ7B,MAC/C,IAWIo9E,IAXEy2C,UAAqB,MAATvjI,KAAe,QAAU,SADas3B,MAE7B/lB,OAAM,GAAAyO,OAAIhgB,KAAJ,cAAsBsjI,SAAQ,GAAAtjH,OAAIhgB,KAAJ,UAAxDusE,UAFiDj1C,KAAA,GAEtCu9B,KAFsCv9B,KAAA,GAIpDg6F,cAIA//G,OAJA+/G,cACAkQ,aAGAjwH,OAHAiwH,aACAgC,WAEAjyH,OAFAiyH,WACA3gC,YACAtxF,OADAsxF,YAGE6+B,UAAYF,aAAarjI,MAC3B43D,MAAQ,EAER2jB,MAAQ,EACR+pD,WAAa,EACjB,QAAkBxxH,IAAds6D,UACA,GAAIh7D,OAAM,GAAAyO,OAAIhgB,KAAJ,WAAmB,CACzB,IAEImY,IACAE,IAHEqrH,OAASh0H,KAAK1P,MACd2jI,OAASj0H,KAAI,GAAAsQ,OAAIhgB,KAAJ,MAGnB,GAAe,OAAX0jI,QAA8B,OAAXC,OACnB,OACIF,gBAAYxxH,EACZ8jD,WAAO9jD,EACP66E,SAAK76E,EACLynE,WAAOznE,GAEJs6D,YAAc3oE,8BAAeC,YAAc0oE,YAAchpE,gCAAiBE,UACjF0U,IAAM3P,KAAK2P,IAAIurH,OAAQC,QACvBtrH,IAAM7P,KAAK6P,IAAIqrH,OAAQC,UAEvBxrH,IAAMurH,OACNrrH,IAAMsrH,QAEV,IAAMlxB,OAAkB,MAATzyG,MAAgBmY,IAAKE,MAAQA,IAAKF,KACjD20E,IAAMj4B,KAAKmsC,cAAcyR,OAAO,IAAM59C,KAAKosC,eAAiB,EAC5DvnB,MAAQlxE,KAAKsnB,IAAI+kC,KAAKmsC,cAAcyR,OAAO,IAAM3lB,KAAOj4B,KAAKosC,eAAiB,EAE9ElrC,MAAQ+2B,IACR22C,WAAa,OACV,GAAIl3D,YAAchpE,gCAAiBC,aAAe+oE,YAAchpE,gCAAiBE,SAAU,CAK9F,GAJAqpF,IAAMj4B,KAAKmsC,cAActxF,KAAK1P,QACzBwjI,WAAoB,MAATxjI,KAAe,iBAAmB,oBAAsB,GAExE05E,MAAQ8pD,WAAoB,MAATxjI,KAAe,WAAa,kBAC7BiS,IAAdyvH,UAAyB,CACzB,IAAMkC,OAASlC,UAAYhoD,MAC3BA,OAASkqD,OACT92C,KAAO82C,OAAS,EAEpB7tE,MAAQ+2B,IACR22C,WAAa/pD,UACV,CACH,IAAMmqD,QAAUhvE,KAAKmsC,cAAc,GAC7B8iC,SAAWjvE,KAAKmsC,cAActxF,KAAK1P,OACnC+jI,UAAYlvE,KAAKmsC,cAActxF,KAAI,GAAAsQ,OAAIhgB,KAAJ,OAEzCyjI,WAAa,EACA,MAATzjI,MACA8sF,IAAMp9E,KAAK1P,MAAQ,GAAKsxH,gBAAkBjhB,MAAQyzB,SAAWD,QAC7DnqD,MAAQlxE,KAAKsnB,IAAIg9D,KAAOwkC,gBAAkBjhB,MAAQ0zB,UAAar0H,KAAK1P,OAAS,EAAI8jI,SAAWD,YAE5F/2C,IAAMwkC,gBAAkBjhB,OAAS3gG,KAAK1P,OAAS,EAAI8jI,SAAWD,QAC9DnqD,MAAQlxE,KAAKsnB,IAAIg9D,KAAOwkC,gBAAkBjhB,MAAQ0zB,UAAar0H,KAAK1P,OAAS,EAAI6jI,QAAUC,YAE/F/tE,MAAQ8tE,aAGZ/2C,IAAM,EACNpT,MAAQmpB,YAAY0gC,WAGxB,OACIE,sBACA1tE,YACA+2B,QACApT,eAYFsqD,kBAAoB,SAApBA,kBAAqBt0H,KAAM6B,OAAQ6pF,MACrC,IAAMkoC,UACFjoC,MAAOD,KAAKt6D,EACZw6D,MAAOF,KAAKjzF,GAH8B87H,mBAU1CZ,6BAAkB,IAAKC,SAAU/xH,OAAQ7B,MAJ7Bw0H,WAN8BD,mBAM1CR,WACOU,OAPmCF,mBAO1CluE,MACKquE,KARqCH,mBAQ1Cn3C,IACOtuD,MATmCylG,mBAS1CvqD,MAT0C2qD,oBAiB1ChB,6BAAkB,IAAKC,SAAU/xH,OAAQ7B,MAJ7B40H,YAb8BD,oBAa1CZ,WAKJ,OACI1tE,OACIj1B,EAAGqjG,OACHh8H,EArBsCk8H,oBAc1CtuE,MAQIv3B,MAAO0lG,WACPzlG,OAAQ6lG,aAEZhsG,QACIwI,EAAGsjG,KACHj8H,EA3BsCk8H,oBAe1Cv3C,IAaItuD,YACAC,OA7BsC4lG,oBAgB1C3qD,smFCpGR,IAAM31E,QAAUD,yBAAUC,QACpBk0E,cAAYD,OAAOpsC,KAaJ24F,kCAIjB,SAAAA,WAAwB,IAAA56B,iBAAAvwF,wJAAAorH,CAAA7/H,KAAA4/H,UAAA,QAAA/4D,KAAAzhE,UAAA1D,OAARgf,OAAQ,IAAA7X,MAAAg+D,MAAAC,KAAA,EAAAA,KAAAD,KAAAC,OAARpmD,OAAQomD,MAAA1hE,UAAA0hE,MAAA,OACpBryD,MAAAqrH,8BAAA9/H,MAAAglG,iBAAA+6B,mBAAAH,WAAAlnI,KAAA6O,MAAAy9F,kBAAAhlG,MAAAqb,OAASqF,WACJksG,WAAat5C,gBAClB7+D,MAAKurH,cACD7jG,EAAG,EACH34B,EAAG,GAEPiR,MAAKwrH,WACD9jG,EAAG,EACH34B,EAAG,GAEPiR,MAAK49G,aAXe59G,kXAJU47G,yRAyB9B,MAAO,+EAmDctlH,KAAM4mH,iBAAkBv0G,cAC7C,IAAM5G,OAAS0pH,QAAAH,mBAAAH,SAAAvlI,WAAA,0BAAA2F,MAAAtH,KAAAsH,KAA8B+K,KAAM4mH,iBAAkBv0G,cAOrE,OANC,IAAK,KAAKtU,QAAQ,SAACjQ,GACZ84H,iBAAgB,GAAAt2G,OAAIxiB,EAAJ,gBAAsBuG,SAAWoX,OAAO3d,KACxD84H,iBAAgB,GAAAt2G,OAAIxiB,EAAJ,YAAkB2d,OAAO3d,GAAK2d,OAAO3d,GAAG0X,KAAK,SAAC5V,EAAGyI,GAAJ,OAAUzI,EAAIyI,IACtEoT,OAAO3d,GAAG,GAAKgL,KAAK2P,IAAIgD,OAAO3d,GAAG,GAAI,MAG5C2d,+DAWMzL,KAAM8zH,YACnB,ODgB2B,SAAtBsB,oBAAuBzlG,QAAS3vB,KAAM8zH,YAsB/C,IArBA,IAAIrrD,UACEo2B,SAAWlvE,QAAQ9tB,SAASg9F,SAC5BnT,KAAO/7D,QAAQ+7D,OACf4J,UAAY5J,KAAKjkD,MACjBp1B,aAAesd,QAAQ3vB,OAAOsS,kBAC9BktG,cAAgB3gB,SAASp3D,MACzB87E,WAAa/D,cAAcj/G,MAC3BuxH,aAAejzB,SAASlxE,SARgC80F,sBActD9yF,QAAQgyF,oBAJR0B,QAVsDZ,sBAUtDY,QACAC,QAXsDb,sBAWtDa,QACAM,cAZsDnB,sBAYtDmB,cACAC,cAbsDpB,sBAatDoB,cAEF1wB,YAAcxjE,QAAQwjE,cACtBi2B,OAASxF,gBAAkB/vH,gCAAiBC,aAAe8vH,gBAAkB/vH,gCAAiBE,SAC9Fs1H,OAASxF,gBAAkBhwH,gCAAiBC,aAAe+vH,gBAAkBhwH,gCAAiBE,SAC9FhF,IAAMq6H,OAAS,IAAOC,OAAS,IAAM,KACrCzH,cAAgBjyF,QAAQiyF,gBACxBnC,gBAAkB8D,YAAclxG,aAAakxG,aAAelxG,aAAakxG,YAAYrsH,MAElF1J,EAAI,EAAGkQ,IAAMsC,KAAKrJ,OAAQnJ,EAAIkQ,IAAKlQ,IAAK,CAC7C,IAAMM,EAAIkS,KAAKxS,GACTw/B,SACAtb,QACAsL,WAAas3G,kBAAkBxmI,GACjCm+F,WAAY23B,cACZ13B,WAAY23B,cACZR,gBACAC,gBACA1B,4BACAzuB,wBACA2gC,sBACAhC,2BACDpmC,MAb0C89B,eAejBjK,eAAgBh5G,MAAOzY,EAAGoJ,MAAO1J,IACvDgyH,4BAAelqB,oBAAWmqB,kCADxBh4E,MAfqC+hF,eAerC/hF,MAAOi4E,SAf8B8J,eAe9B9J,SAGf1yF,MAAM4kB,KAAOnK,MACb/1B,KAAKouG,cACLpuG,KAAKquG,cAAgBL,SACrBhuG,KAAK4uG,kBAEL,IAAM13F,OAAS5L,WAAW4L,OAE1B,IAAKrgB,MAAMqgB,OAAOwI,KAAO7oB,MAAMqgB,OAAOnwB,SAAgB8J,IAAVzU,EAAEmrF,IAAmB,CAC7D,IAAIptB,MAAQ,MACZA,OACIxF,MAAOrpC,WAAWqpC,MAClBz9B,cACAoE,YACAiuC,MAAOntE,EAAEmtE,MACTge,IAAKnrF,EAAEmrF,IACPvgE,OAAQ5qB,EAAEmtE,MACVyuD,MAAO57H,EAAEmrF,IACTvnE,YAEEyiB,UAAY2sF,uBAAuBhzH,EAAGN,EAAGwS,KAAM2vB,SACrD84C,OAAOttE,KAAK0wD,OAEZl8B,QAAQg6F,WAAW77H,EAAEiB,KAAM88D,QAKnC,OADA4c,OAAS44C,eAAe1xF,QAAS84C,QClFtB2sD,CAAoBngI,KAAM+K,KAAM8zH,kDAQnC9nG,WAAW,IAAApiB,OAAA3U,KACT4M,OAAS5M,KAAK4M,SACd4kD,WAAa5kD,OAAO4kD,WACpB4uE,kBAAoBpgI,KAAKqvH,gBAEzBvpH,KADkB9F,KAAKmvH,iBACAlnH,IAAI,SAAApP,GAAC,OAAIA,EAAEiB,MAClCsjB,aAAepd,KAAK+K,OAAOsS,kBAC3Bo5E,KAAOz2F,KAAKy2F,OACZ38D,OAAS28D,KAAKjzF,GAAKizF,KAAKjzF,EAAEujC,QAAQxlC,QAAQ,GAC1Cs4B,MAAQ48D,KAAKt6D,GAAKs6D,KAAKt6D,EAAE4K,QAAQxlC,QAAQ,GACzCm5F,aAAe9tF,OAAO8tF,aACtBoI,mBAAqB14B,sBAAsBswB,aAAc16F,KAAK82B,KAAMlqB,OAAO+tF,aAC3Ez7D,UAAYtyB,OAAOsyB,UACnB01F,mBAAqB9tC,6BAAc/vD,WACnChP,WAAa9uB,OAAOskB,OAAOH,cAAcpK,OAAO,SAAAvY,GAAC,OAAIA,EAAE+iB,IAAIniB,OAAS8D,yBAAUE,YAC/E4I,IAAI,SAAAxN,GAAC,OAAIA,EAAEwH,QA+BhB,OA9BA2yH,mBAAmB34C,QAAQ6mB,mBAAmB//F,KAAK,MAAM,GACzD6xH,mBAAmB34C,QAAQ/8C,WAAW,GrHmE1B,SAAdmhG,YAAetpG,UAAWmnE,YAAapnE,IACzC,IAAMwpG,gBAAkBt5C,YAAYlpE,WAAOiZ,WAAY,YAAa,GAAjC,IAAA1b,OAAyCyb,KACvDkwD,YAAYs5C,gBAAiB,QAAS,IAC9CjvE,KAAK,IAAK6sC,YAAY/hE,GAClBk1B,KAAK,IAAK6sC,YAAY/hE,GACtBk1B,KAAK,QAAS6sC,YAAYrkE,OAC1Bw3B,KAAK,SAAU6sC,YAAYpkE,QAC5CwmG,gBAAgBjvE,KAAK,YAArB,QAAAh2C,OAA0Cyb,GAA1C,MqHzEIupG,CAAYtpG,WACRoF,EAAG,EACH34B,EAAG,EACHq2B,YACAC,eAJO,MAAAze,OAKFrb,KAAK82B,OAEd92B,KAAK2wH,QAAU3wH,KAAKu9H,mBAAmB6C,kBAAmBt6H,MAE1DmiF,+BACIl9E,KAAM/K,KAAK2wH,QACX55F,oBACAy+C,SAAU,IACVtiD,OAAQ,IACRqS,KAAM,SAAAA,KAACiuC,OAAQv1B,MAAO1lD,GAClB,IAAMo8H,gBAAkB,GAAAt5G,OAAGynF,mBAAmB,GAAtB,KAAAznF,OAA4BvV,KAAKvN,IAAMA,GAAIkJ,cACnEw8C,MAAMlmB,MAAM,UAAW,SACvBumG,oBACIpkC,MAAOvlF,OACPoiB,UAAWknB,MAAMnvB,OACjB0kD,cACAt0C,UAAWy1F,gBACXnjE,sBACAz5B,SACAovD,MAAO,SAAAA,MAAAtuF,GAAC,OAAIkvB,WAAW9f,IAAI,SAAAnO,KAAG,OAAIjB,EAAEmtE,MAAMlsE,OAAMiJ,KAAK,WAI1D/C,mEAWSqpH,eAAgBvjH,MAAM,IAAAsR,OAAApX,KAAA49H,qBAAA2C,kBACMhU,2BAAmBvsH,KAAM8F,MAD/B,GAC/B06H,gBAD+B5C,qBAAA,GACd6C,iBADc7C,qBAAA,GAEhC8C,gBAAkBF,gBAAgBzT,iBAClC4T,iBAAmBF,iBAAiB1T,iBAW1C,OAVA/sH,KAAKigI,WACD9jG,EAAGqkG,gBAAgB1T,WAAa,EAChCtpH,EAAGi9H,iBAAiB3T,WAAa,GAErC9sH,KAAKggI,cACD7jG,EAAGqkG,gBAAgB5/F,SAAW,EAC9Bp9B,EAAGi9H,iBAAiB7/F,SAAW,GAGnC5gC,KAAKqyH,aACEhJ,eAAephH,IAAI,SAAC8C,KAAMxS,GAAP,OAAa6e,OAAK89G,gBAAgBnqH,MAEpD61H,SAAUJ,gBAAgB3T,KAC1BgU,eAAgBH,gBAAgBnoI,IAAM,EACtCuoI,UAAWL,iBAAiB5T,KAC5BkU,gBAAiBJ,iBAAiBpoI,IAAM,8DAKhD,OAAOyH,KAAKggI,iFAIZhgI,KAAKkyH,eAAiBvE,kCAA0B3tH,8DASnCm8B,EAAG34B,GAChB,IAAKxD,KAAK+K,OACN,OAAO,KAEX,IACIvR,MACAg6E,OACAwtD,gBACAzX,iBACAr/C,WACA5oD,YACA2/G,WAAa,KACXhkH,UAAYjd,KAAK+K,OACjBiS,QAAUC,UAAUE,UACpBC,aAAeH,UAAUI,kBACzBo5E,KAAOz2F,KAAKy2F,OACZ1rF,KAAOiS,QAAQjS,KACfqnH,SAAWpyH,KAAKqyH,UAjBHE,sBAuBXvyH,KAAK0sH,oBAJL71B,OAnBW07B,sBAmBX17B,OACAE,OApBWw7B,sBAoBXx7B,OACA43B,cArBW4D,sBAqBX5D,cACAC,cAtBW2D,sBAsBX3D,cAGJD,gBAAkB1vH,8BAAeC,YAEjC1F,MADOi9F,KAAKjzF,EACCukC,OAAOvkC,GACpB+lH,iBAAmBnsG,aAAa25E,QAAQ90F,MACxC++H,gBAAkBpS,gBAGlBp1H,MADOi9F,KAAKt6D,EACC4L,OAAO5L,GACpBotF,iBAAmBnsG,aAAay5E,QAAQ50F,MACxC++H,gBAAkBrS,eAGlBqS,kBAAoBpiI,gCAAiBC,cACrC20E,OAAS4+C,SAAS54H,QAGlBwnI,kBAAoBpiI,gCAAiBE,WACrCorE,WAAag3D,sBAAI,IAAI3qH,IAAIxL,KAAK9C,IAAI,SAAApP,GAAC,OAAIA,EAAE0wH,sBAEzC/1C,OAAS4+C,SADT54H,MAAQywE,gBAAgBC,WAAY1wE,SAGxC,IAAMiP,IAAM+qE,QAAUA,OAAO9xE,OAC7B8xE,QAAUA,OAAOjjE,KAAK,SAACoiE,GAAIwuD,IAAL,OAAYxuD,GAAGh/C,OAAOnwB,EAAI29H,GAAGxtG,OAAOnwB,IAC1D,IAAK,IAAIjL,EAAI,EAAGA,EAAIkQ,IAAKlQ,IAAK,CAC1B,IAAMq+D,MAAQ4c,OAAOj7E,GACfo7B,OAASijC,MAAMjjC,OACrB,GAAIwI,GAAKxI,OAAOwI,GAAKA,GAAMxI,OAAOkG,MAAQlG,OAAOwI,GAAM34B,GAAKmwB,OAAOnwB,GAAKA,GAAMmwB,OAAOmG,OAASnG,OAAOnwB,EAAI,CACrGy9H,WAAarqE,MACb,MAEJqqE,WAAa,KAGjB,IAAM1jH,OAAS0jH,YAAcA,WAAWj7D,MAIxC,OAHIzoD,SACA+D,YAActhB,KAAKw1H,uBAAuBj4G,OAAQ0jH,WAAWj9C,MAE1Di9C,YACHl5G,YAAak5G,WAAWttG,QACxBmD,GAAIxV,YACJm0G,QAASz1H,KAAK82B,MACdmqG,6DAIJ,OAAOjhI,KAAKigI,4DAxOZ,MAAO,4DAQP,OAAOrgH,qFAYWmsD,KAAM4nD,UACxB,IAAM/mH,OAASyjH,qBAAUH,cAAcnkD,KAAM4nD,UAEvCrF,WADW1hH,OAAOg9F,SACIp3D,MAAMlnC,MAC5B0uC,UAAYptC,OAAOotC,UAKzB,OAHIs0E,aACAt0E,UAAUpyB,QAAU0mG,YAEjB1hH,uBC/FFgT,mCACT86E,aAAc,aACdx7D,UAAW,GACXy7D,Y/DLuB,O+DMvBjC,aACIgQ,YACIrtG,KAAM,SACNuvH,WAAY,EAAG,GAAI,GAAI,KAE3BriB,OACIltG,KAAM,SACNuvH,WAAY,EAAG,EAAG,GAAI,KAE1BniB,QACIptG,KAAM,SACNuvH,WAAY,EAAG,EAAG,GAAI,MAG9BsC,aAAc,GACdlzE,WACI3+C,KAAM,YAEVm2D,YACI2/B,OAAQ,QACRvN,SAAU,KAEdgmB,UACIp3D,SACArW,KACA34B,KACAq8C,MACA+S,MACAw5C,eACI5yG,MAAO,IAEX8iI,aACI9iI,MAAO,KAGfo9H,QACIluB,WACIxpE,UAAS,GAAA7jB,O/D3CM,O+D2CN,0BAEbw7G,SACI33F,UAAS,GAAA7jB,O/D9CM,O+D8CN,wBAEby7G,UACI53F,UAAS,GAAA7jB,O/DjDM,O+DiDN,2BC1CqB+lH,cAAA,SAAC1gH,QAAW,IAC1C8yD,OAAwC9yD,OAAxC8yD,OAAQz8C,UAAgCrW,OAAhCqW,UAAWowD,MAAqBzmE,OAArBymE,MAAOjoD,UAAcxe,OAAdwe,UAC5BnN,MAAQ+0D,6BAAc/vD,WACtB4N,MAAQ5S,MAAMg/B,UAAU,QAAQhmD,KAAKyoE,OAAQ2T,OAC7Ck6C,WAAa18F,MAAMysB,QAAQl+B,OAAO,QAUxC,OARAnB,MAAMs/B,KAAK,QAASnyB,WAAa,IACjCmiG,WAAW97F,KAAK,SAAU1sC,GACtB,IAAMi4D,UAAYg2B,6BAAc9mF,MAC1BoxD,MAAQv4D,EAAEu4D,UAChBn4D,OAAOub,QAAQ48C,OAAOtoD,QAAQ,SAAAuoD,MAAI,OAAM/9C,MAAM+9C,KAAK,KAAOP,UAAUO,KAAKA,KAAK,GAAIA,KAAK,QAG3F1sB,MAAMusB,OAAO1rB,SACNb,MAAM96B,MAAMw3H,YACF97F,KAAK,SAAU1sC,GACZ,IAAMi4D,UAAYg2B,6BAAc9mF,MAC1B2zB,OAAS96B,EAAE86B,OACXw4F,YAActzH,EAAEk/B,UAChB8nB,QAAmBvyC,IAAdqmB,OAAOksB,GAAmBlsB,OAAOksB,GAAKlsB,OAAOwI,EAClDy2B,QAAmBtlD,IAAdqmB,OAAOi/B,GAAmBj/B,OAAOi/B,GAAKj/B,OAAOnwB,EAClDkf,KAAI,KAAArH,OAAQsY,OAAOwI,EAAf,KAAA9gB,OAAoBsY,OAAOnwB,EAA3B,OAAA6X,OAAkCwkC,GAAlC,KAAAxkC,OAAwCu3C,IAClD/5D,EAAEqmC,WAAa4xB,UAAUmrB,QAAQpjF,EAAEqmC,WAAW,GAC9C4xB,UAAUO,KAAK,IAAK3uC,MACpBzpB,OAAOub,QAAQ23G,aAAarjH,QAAQ,SAAAu5B,UAAQ,OAAIyuB,UAAU/4B,MAAMsK,SAAS,GAAIA,SAAS,4rCCbzFi/F,6qBAAkB7E,yRA0C/B,MAAO,+DAUM1xH,KAAM6+F,SAAUnT,MAyB7B,IAzBgD,IAAb7pF,OAAaxH,UAAA1D,OAAA,QAAA4L,IAAAlI,UAAA,GAAAA,UAAA,MAC5CouE,UAD4C2iD,eAKxC3K,sBAAc/0B,MAFdC,MAHwCy/B,eAGxCz/B,MACAC,MAJwCw/B,eAIxCx/B,MAEFv5E,aAAepd,KAAK+K,OAAOsS,kBANek1G,sBAcxCvyH,KAAK0sH,oBANL71B,OARwC07B,sBAQxC17B,OACAE,OATwCw7B,sBASxCx7B,OACAq3B,QAVwCmE,sBAUxCnE,QACAC,QAXwCkE,sBAWxClE,QACAr3B,WAZwCu7B,sBAYxCv7B,WACAC,WAbwCs7B,sBAaxCt7B,WAEFk9B,OAASn9B,aAAe73F,yBAAUE,UAClC+0H,OAASn9B,aAAe93F,yBAAUE,UAClCvF,IAAMq6H,OAASnoB,SAASpuD,EAAKw2E,OAASpoB,SAAS/nG,EAAI,KACnDsmH,cAAgB3gB,SAASp3D,MACzB87E,WAAa/D,eAAiBA,cAAcj/G,MAC5Ck/G,gBAAkBptG,aAAakxG,aAAelxG,aAAakxG,YAAYrsH,MACvEi8F,YAAcl+F,KAAKk+F,cACnBmC,UAAY5J,KAAKjkD,MAtByB0qF,eAuBbtwH,OAAOq0C,OAA/Bk8E,QAvBqCD,eAuBxC/gG,EAAeihG,QAvByBF,eAuB5B15H,EAvB4B+9H,aAwBjB30H,OAAOigH,KAA3B2U,MAxBqCD,aAwBxCplG,EAAaslG,MAxB2BF,aAwB9B/9H,EACTjL,EAAI,EAAGkQ,IAAMsC,KAAKrJ,OAAQnJ,EAAIkQ,IAAKlQ,IAAK,CAC7C,IAAI87H,SAAG,EACHqN,UAAI,EACJrL,UAAI,EACJ/B,SAAG,EACDz7H,EAAIkS,KAAKxS,GACTwiB,IAAMliB,EAAEmtE,MACV6wB,SAEA6qC,MADArN,IAAM39B,MAAM2F,cAAcxjG,EAAEsjC,GAAKghG,SACpBqE,OAGbzqC,SAEAs/B,KAAe,QADf/B,IAAM39B,MAAM0F,cAAcxjG,EAAE2K,GAAK45H,SACX9I,IAAMmN,MAAQ,MAGnC5qC,SACDw9B,IAAM,EACNqN,KAAOxjC,YAAYrkE,MACdvmB,MAAMghH,OAEP+B,KADA/B,KAAOmN,MAAQ,IAKlB1qC,SACDu9B,IAAM,EACN+B,KAAOn4B,YAAYpkE,OACnB4nG,KAAOrN,KAAOmN,MAAQ,GAGtBpT,UACAsT,KAAOhrC,MAAM2F,cAAcxjG,EAAEgnD,IAAM2hF,MACnClN,KAAOmN,MAAQ,EACfpL,MAAQoL,MAAQ,GAGhBpT,UACAgI,KAAO1/B,MAAM0F,cAAcxjG,EAAE+5D,IAAM6uE,MACnCpN,KAAOmN,MAAQ,EACfE,MAAQF,MAAQ,GAEpB,IAAMzpG,SACAtb,QA5CuC83G,eA6CjBjK,eAAgBh5G,MAAOzY,EAAGoJ,MAAO1J,IACvDgyH,4BAAelqB,oBAAWmqB,kCADxBh4E,MA7CqC+hF,eA6CrC/hF,MAAOi4E,SA7C8B8J,eA6C9B9J,SAOf,GAJA1yF,MAAMy8F,OAAShiF,MACf/1B,KAAKouG,cACLpuG,KAAKquG,cAAgBL,SACrBhuG,KAAK4uG,mBACA/3G,MAAM+gH,OAAS/gH,MAAMghH,KAAM,CAC5B,IAAM19D,OACFxF,SACAz9B,QACIwI,EAAGk4F,IACH7wH,EAAG8wH,IACHz0E,GAAI6hF,KACJ9uE,GAAIyjE,MAERt+F,YACAiuC,MAAOjrD,IACPipE,IAAKnrF,EAAEmrF,IACPvgE,OAAQ1I,IACR05G,MAAO57H,EAAEmrF,IACTvnE,WAEJm6C,MAAM13B,UAAY2sF,uBAAuBhzH,EAAGN,EAAGwS,KAAM/K,MACrDwzE,OAAOttE,KAAK0wD,OACZ52D,KAAK00H,WAAW77H,EAAEiB,KAAM88D,QAIhC,OADA4c,OAAS44C,eAAepsH,KAAMwzE,0EAIZ2pD,QAASC,QAASe,UAAWC,YAC/C,OACIn9E,QACI9kB,EAAIghG,SAAW,EACf35H,EAAI45H,SAAW,GAEnBvQ,MACI1wF,EAAGgiG,UACH36H,EAAG46H,qEAxJX,OAAOx+G,kFAWP,MAAO,+CAWP,OAAO+hH,+BClDFC,uBAAa,OACbC,sBAAY,MACZC,uBAAa,OACbC,uBAAa,OACbC,wBAAc,QACdC,sBAAY,MACZC,uBAAa,OACbC,yBAAe,SACfC,uBAAa,6fCN1B,oBAqBMC,iBAAmB,SAAnBA,iBAAoBz4B,UAEtB,IAAK,IAAM9vG,OAAO8vG,SACe,iBAAlBA,SAAS9vG,OAChB8vG,SAAS9vG,MACLwR,MAAOs+F,SAAS9vG,QC1BjBwoI,kBDyCO,WAClB,IAAMC,mBACAC,YACFC,iBAAkB,SAAAA,iBAACC,KACfF,WAAWG,eAAiBD,KAEhCE,kBAAmB,SAAAA,kBAACp5B,KAAMD,UACtB,IAAIs5B,eACEC,KAAOP,gBAAgB/4B,MACvBymB,QAAU1iD,kBAAmBg8B,UAGnC,GAAIu5B,KACAD,eAAiBC,KAAK76H,IAAI,SAAC86H,cACvB,IAAMC,QAGN,OA1DS,SAAvBC,qBAAwBz1D,KAAMllC,WAAYihE,SAAU25B,WACtD,IAAK,IAAMppI,OAAOwuC,WACd,GAAIrvC,OAAOqB,eAAe5B,KAAK4vC,WAAYxuC,KAAM,CAC7C,IAAIqpI,UAAI,EACJ1wC,eAAS,EACPj1E,IAAM8qB,WAAWxuC,KACnB0zB,eAAehQ,MACfgwD,KAAK1zE,QACLmpI,qBAAqBz1D,KAAK1zE,KAAM0jB,IAAK+rF,SAAU25B,YACzB,iBAAR1lH,MAAqB2lH,KAAO3lH,IAAIlR,MAAM,OAAS62H,KAAK,KAAOD,eAEvD51H,KADlBmlF,UAAYpnB,WAAU9jE,WAAV,GAAWgiG,UAAXluF,OAAA+nH,gCAAwBD,KAAKroH,MAAM,EAAGqoH,KAAKzhI,cAEnD8rE,KAAK1zE,KAAO24F,WAGhBjlB,KAAK1zE,KAAO0jB,KAyCRylH,CAAqBD,KAAMD,aAAc9S,QAASzmB,MAClD64B,iBAAiBW,KAAKp5B,UACfo5B,WAER,CACH,IAAMp5B,SAAWqmB,QAAQrmB,SAEzBy4B,iBAAiBz4B,UACjBi5B,eAAiB5S,QAGrB,OAAO4S,gBAEXQ,iBAAkB,SAAAA,iBAAC95B,UAAwB,QAAA1iC,KAAAzhE,UAAA1D,OAAXgf,OAAW,IAAA7X,MAAAg+D,KAAA,EAAAA,KAAA,KAAAC,KAAA,EAAAA,KAAAD,KAAAC,OAAXpmD,OAAWomD,KAAA,GAAA1hE,UAAA0hE,MACvC,IAAMwiC,cAAgBk5B,WAAWG,eAE3B54B,WADNR,SAAaA,oBAAoB1gG,MAAsB0gG,UAAZA,WAChBthG,IAAI,SAAC6hG,UAC5B,IAAMw5B,iBAAmBh6B,cAAcQ,SAASN,MAChD,OAAO85B,iBAAiBzpI,OAAjB0N,MAAA+7H,iBAA2B5iH,UAEtC,OAA4B,IAArBqpF,UAAUroG,OAAeqoG,UAAU,GAAKA,WAEnDw5B,cAAe,SAAAA,cAAA/5B,MAAI,OAAIg5B,WAAWG,eAAen5B,OASjDg6B,cAAe,SAAAA,cAACN,UAAW75B,WACvBk5B,gBAAgBW,WAAa75B,WAEjCo6B,oBAAqB,SAAAA,oBAACl6B,UAClB,IAAM0mB,QAAU1iD,kBAAmBg8B,UAEnC,OADA84B,iBAAiBpS,QAAQrmB,UAClBqmB,UAGf,OAAOuS,WAvDW,+KEjCf,0BAAMkB,gBAAcC,wBAAAC,mBACtBC,uBAAyB7N,gBADH2N,wBAAAC,gBAEtBC,sBAAwB9M,cAFF4M,wBAAAC,gBAGtBC,uBAAyB9P,gBAHH4P,wBAAAC,gBAItBC,uBAAyB9I,gBAJH4I,wBAAAC,gBAKtBC,wBAA0BpH,kBALJkH,wBAAAC,gBAMtBC,uBAAyBvC,gBANHqC,wBAAAC,gBAOtBC,sBAAwBjE,cAPF+D,wBAAAC,gBAQtBC,uBAAyBxT,sBARHuT,qDCHdhmF,EAAI,IAIJ35C,EAAI,IA0EJ6/H,KAAO,OAKPC,QAAU,UAKVC,IAAM,MAKNC,IAAM,MAUNn4B,sBAAQ,QAKRC,sBAAQ,QAKRF,qBAAO,OA6BPY,eAAO,OAIPC,gBAAQ,QAiBRw3B,KAAO,OAIPC,OAAS,QAITC,OAAS,QAITC,YAAc,YAQdC,WAAa,WA4Bb14B,iBAAS,SAITD,gBAAQ,QAoCR44B,QAAU,UAIVC,UAAY,6LChPzB,IAAAC,eAAAC,6BAAAC,yBDQsB,aCRtBD,6BAAAC,sBAEKb,SAFLY,6BAAAC,sBAGKZ,YAHLW,6BAAAC,sBAIK74B,0BAJL44B,6BAAAC,sBAKK54B,0BALL24B,6BAAAC,sBAMK94B,yBANL64B,6BAAAC,sBDuGsB,aCvGtBD,6BAAAC,sBD4GsB,aC5GtBD,6BAAAC,sBDiHyB,gBCjHzBA,2TC+BeC,6fArCP,MAAM,IAAI31H,MAAMo+D,UAAUC,wDAY1B,MAAM,IAAIr+D,MAAMo+D,UAAUC,8DAU1B,MAAM,IAAIr+D,MAAMo+D,UAAUC,kEAW1B,MAAM,IAAIr+D,MAAMo+D,UAAUC,mUCzCbu3D,yeAQb,MAAM,IAAI51H,MAAMo+D,UAAUC,4DAS1B,MAAM,IAAIr+D,MAAMo+D,UAAUC,qxCCyEnBw3D,kCA/EX,SAAAA,eAAuB,IAAA9/B,iBAAAvwF,kKAAAswH,CAAA/kI,KAAA8kI,cAAA,QAAAj+D,KAAAzhE,UAAA1D,OAAPsjI,MAAO,IAAAn8H,MAAAg+D,MAAAC,KAAA,EAAAA,KAAAD,KAAAC,OAAPk+D,MAAOl+D,MAAA1hE,UAAA0hE,MAAA,OACnBryD,MAAAwwH,wCAAAjlI,MAAAglG,iBAAAkgC,6BAAAJ,eAAApsI,KAAA6O,MAAAy9F,kBAAAhlG,MAAAqb,OAAS2pH,UACJG,KAAKH,OAFSvwH,0YAPAowH,gTAanB,OAAIz/H,UAAO1D,QACP1B,KAAKolI,MAALhgI,UAAA1D,QAAA,OAAA4L,EAAAlI,UAAA,GACOpF,MAEJA,KAAKolI,0CAGH,QAAAp+D,MAAA5hE,UAAA1D,OAAJgR,GAAI,IAAA7J,MAAAm+D,OAAAC,MAAA,EAAAA,MAAAD,MAAAC,QAAJv0D,GAAIu0D,OAAA7hE,UAAA6hE,OACT,OAAIv0D,GAAGhR,QACH1B,KAAKmlI,OAAOr8H,QAAQ,SAAAjQ,GAAC,OAAIA,EAAEkS,KAAK2H,GAAG,MAC5B1S,MAEJA,KAAKgmE,sDAWZ,OADahmE,KAAKmlI,OACNl9H,IAAI,SAAAo9H,QAAM,OAAIA,OAAOvuC,aAAa,yCAS9C,OAAO92F,KAAKmlI,OAAO,GAAG9pI,mDAItB,OAAO2E,KAAKmlI,OAAOl9H,IAAI,SAAApP,GAAC,OAAIA,EAAEyJ,aAAYS,KAAK,yDAS/C,OAAO/C,KAAKmlI,OAAO,GAAGxtH,qDAGlB4F,QACJ,OAAOvd,KAAKmlI,OAAO,GAAGplI,OAAOwd,kDAU7B,OAAOvd,KAAKmlI,OAAO,GAAGpvH,0DAUtB,OAAO/V,KAAKmlI,OAAO,GAAGG,wvCCpFTC,8CAOjB,SAAAA,eAAallI,MAAM,IAAAoU,MAAA,+JAAA+wH,CAAAxlI,KAAAulI,iBACf9wH,MAAAgxH,qCAAAzlI,KAAA0lI,0BAAAH,gBAAA7sI,KAAAsH,QACK2lI,OAAOtlI,MAFGoU,sYAPqBowH,6SAmBpC,OAAIz/H,UAAK1D,QACL1B,KAAK4lI,QAALxgI,UAAA1D,QAAA,OAAA4L,EAAAlI,UAAA,GACOpF,MAEJA,KAAK4lI,4CAIZ,OAAIxgI,UAAG1D,QACH1B,KAAKgmE,MAAL5gE,UAAA1D,QAAA,OAAA4L,EAAAlI,UAAA,GACOpF,MAEJA,KAAKgmE,kDAIZ,OAAOhmE,KAAK2lI,6DAUZ,MAAoB,YAAhB3lI,KAAK3E,OACa2E,KAAK+K,OAAO6D,gBAAgBrD,aAAavL,KAAK2lI,UAC/ChuH,eACZ,SAAAzW,KAAG,OAAIA,2CAGZqc,QACJ,GAAIA,QAA6B,aAAnBvd,KAAK+V,UAA0B,CACzC,IAAM3T,UAAYpC,KAAK+K,OAAO6D,gBAAgBjD,eAAe3L,KAAK2lI,UAAUj6H,SAAS3L,OAC/E8lI,SAAW,IAAI/lI,iCAAkBsC,WACvCmb,OAASA,OAAOtV,IAAI,SAAAxN,GAAC,OAAIorI,SAASt9H,cAAc9N,KAEpD,OAAO8iB,uDAUP,OAAQvd,KAAK2lI,8CAWb,OADiB3lI,KAAK+K,OAAOsS,kBAAkBrd,KAAK2lI,UAAUnoH,IAC9CniB,+CAWhB,IAAMgqB,SAAWrlB,KAAK+K,OAAOsS,kBAAkBrd,KAAK2lI,UAAUnoH,IAC9D,OAAO6H,SAAStP,SAAWsP,SAAShqB,qDAUpC,OADmB2E,KAAK+K,OAAO6D,gBACbxD,YAAYpL,KAAK2lI,UAAUG,qEAQzCC,SACJ,OAAO/lI,KAAK2lI,WAAaI,QAAQJ,gmCC7GzC,IAmFMK,6BAAe,SAAfA,aAAgBC,UAAWr9H,QAC7B,IAAMu8H,QAUN,OARAv8H,QAAUA,OAAOE,QAAQ,SAACwC,OAClBA,iBAAiBw5H,eACjBK,KAAKj/H,KAAKoF,OACVA,MAAMP,KAAKk7H,YAEXd,KAAKj/H,KAAK,IAAIq/H,0BAAej6H,OAAOP,KAAKk7H,cAG1Cd,MAWEe,gCAAkB,SAAlBA,gBAAmBD,UAAWr5H,QAAW,IAAA6+G,MAAA0a,+BACjBrC,KAAMC,SAAS97H,IAAI,SAACW,QACjD,IAAMw9H,iBA5CU,SAAlBC,gBAAmBz5H,OAAQvR,MAC7B,IAAMosB,aACA7e,OAASgE,OAAOvR,MAQtB,OANMuN,OAAO,aAAcC,OAGvB4e,UAAU,GAAK7e,OAAO,OACtB6e,UAAU,GAAK7e,OAAO,QAHtB6e,UAAU,GAAK7e,OAKZ6e,UAkCsB4+G,CAAgBz5H,OAAQhE,QAC3C09H,WAAaN,6BAAaC,UAAWG,iBAAiB,KAK5D,OAHIA,iBAAiB,KACjBE,UAAU,GAAKN,6BAAaC,UAAWG,iBAAiB,KA/GhD,SAAdG,YAAeC,WAAYnrI,MAC7B,IAAMmtB,qBACAC,mBACAg+G,oBACAC,uBAENF,WAAW19H,QAAQ,SAAC69H,UAAW1kI,OAC3B0kI,UAAU79H,QAAQ,SAACwC,ONsCF,cMrCTA,MAAMjQ,QACNmtB,aAAavmB,OAAOiE,KAAKoF,ON+NjB,aM9NRA,MAAMyK,UAAyB0wH,YAAYxkI,OAAOiE,KAAKoF,OAASo7H,eAAezkI,OAAOiE,KAAKoF,QAE3Fmd,WAAWxmB,OAAOiE,KAAKoF,WAKnC,IAAMs7H,cAAgBn+G,WAAW,GAAG/mB,QAAU+mB,WAAW,GAAKA,WAAW,GAAG/mB,OAAS,GAGrF,IAAK8kI,WAAW,KAEZ/9G,WAAW,GAAKptB,OAAS0oI,QAAUt7G,WAAW,MAE9CA,WAAW,GAAKptB,OAAS0oI,QAAUt7G,WAAW,MAE9CD,aAAa,MAEbA,aAAa,GAAKA,aAAa,GACT,IAAlBo+G,eAAqB,CACrB,IAAMC,iBAAaxrH,OAAAyrH,kCAAOt+G,aAAa,IAApBs+G,kCAA2Bt+G,aAAa,KACvDntB,OAAS0oI,SACTv7G,aAAa,GAAKq+G,cAAcA,cAAcnlI,OAAS,IAAMmlI,cAAcA,cAAcnlI,OAAS,OAElGmlI,cAAcv/H,QAAQ,EAAG,IAEzBkhB,aAAa,MAEjBA,aAAa,GAAbs+G,kCAAsBD,eAQ9B,OAJIr+G,aAAa,GAAG9mB,QAAU8mB,aAAa,GAAG9mB,QAAUklI,cAAgB,IACpEp+G,aAAa,MAAbnN,OAAAyrH,kCAAsBt+G,aAAa,IAAnCs+G,kCAA0Ct+G,aAAa,KACvDA,aAAa,QAGb5f,OAAQ4f,aAAavgB,IAAI,SAACmnB,KAAM72B,GAAP,OAAoB,IAANA,EACnCkwB,WAAWlwB,GAAG8iB,OAAOmN,aAAajwB,IAAMiwB,aAAajwB,GAAG8iB,OAAOoN,WAAWlwB,MAC9EwvB,cAAU1M,OAAAyrH,kCAAMt+G,aAAa,IAAnBs+G,kCAA0Bt+G,aAAa,KACjDP,YAAQ5M,OAAAyrH,kCAAMr+G,WAAW,IAAjBq+G,kCAAwBr+G,WAAW,KAC3Cs+G,YAAQ1rH,OAAAyrH,kCAAML,YAAY,IAAlBK,kCAAyBL,YAAY,KAC7CO,eAAW3rH,OAAAyrH,kCAAMJ,eAAe,IAArBI,kCAA4BJ,eAAe,MA6D/CH,CAAYD,UAAW19H,UARgB,GAC3Cq+H,SAD2Cxb,MAAA,GACjCyb,YADiCzb,MAAA,GAWtCjxG,KAKRysH,SALAr+H,OACYu+H,cAIZF,SAJAl/G,WACUq/G,YAGVH,SAHAh/G,SACUo/G,kBAEVJ,SAFAF,SACaO,qBACbL,SADAD,YAGQztH,QAKR2tH,YALAt+H,OACY2+H,iBAIZL,YAJAn/G,WACUy/G,eAGVN,YAHAj/G,SAIJ,OACIzN,UACA2sH,4BACAC,wBACAC,oCACAC,0CACA/tH,gBACAkuH,qBARAP,YAFAH,SAWAW,wBATAR,YADAF,YAWAO,kCACAC,q4BC1IaG,uiBAQb,MAAM,IAAI14H,MAAMo+D,UAAUC,0EAS1B,MAAM,IAAIr+D,MAAMo+D,UAAUC,wEAS1B,MAAM,IAAIr+D,MAAMo+D,UAAUC,8DAI1B,OAAIloE,UAAK1D,QACL1B,KAAK4nI,WAAar6D,eAAevtE,KAAK4nI,eAANxiI,UAAA1D,QAAA,OAAA4L,EAAAlI,UAAA,IACzBpF,MAEJA,KAAK4nI,iEAWA3B,UAAWr5H,QAEvB,OADA5M,KAAKysH,UAAUyZ,gCAAgBD,UAAWr5H,SACnC5M,KAAKysH,wDAWZ,OAAIrnH,UAAO1D,QACP1B,KAAK6nI,UAALziI,UAAA1D,QAAA,OAAA4L,EAAAlI,UAAA,GACOpF,MAEJA,KAAK6nI,0DAWZ,OAAIziI,UAAO1D,QACP1B,KAAK8nI,YAAL1iI,UAAA1D,QAAA,OAAA4L,EAAAlI,UAAA,GACOpF,MAEJA,KAAK+nI,2EAU0B,IAAvBC,SAAuB5iI,UAAA1D,OAAA,QAAA4L,IAAAlI,UAAA,GAAAA,UAAA,MAARwD,OAAQxD,UAAA1D,OAAA,EAAA0D,UAAA,QAAAkI,EAAA26H,oBAAAC,6BACTC,8BAAkBlE,IAAKr7H,OAAO4R,KAAMwtH,UAD3B,GAC/BI,UAD+BH,oBAAA,GACpBI,QADoBJ,oBAAA,GAAAK,oBAAAJ,6BAETC,8BPKf,SOLyCv/H,OAAO2Q,QAASyuH,UAFjC,GAE/BO,UAF+BD,oBAAA,GAEpBE,QAFoBF,oBAAA,GAYtC,OARAtoI,KAAKgoI,UACDjtH,IAAKstH,QACLjtH,OAAQotH,UAEZxoI,KAAKyoI,YACD1tH,IAAKqtH,UACLhtH,OAAQmtH,YAELvoI,0BC5GF0oI,WACTpyF,OAAQqiE,6BACR1xE,KAAMwyE,mBACNstB,SAAU/sB,mBACVthF,KAAMgvF,mBACNl1E,MAAOszE,qBACPvlB,MAAO0nB,sBCHE0gB,sCACT7rC,UAAW6R,2BAAU3B,KACrBg6B,YAAar4B,2BAAU3B,KACvB+5B,SAAUp4B,2BAAU1B,KACpBjM,QAAS2N,2BAAU5B,OACnBnxD,WAAY+yD,2BAAU5B,kgBCK1B,IA+Fa67B,mCAAsB,SAAtBA,oBAAuBzJ,SAAU1S,UAAWoc,aAAclK,UACnE,IAAImK,QACIC,UAA2BpK,SAA3BoK,UAAWrvC,YAAgBilC,SAAhBjlC,YACbsvC,eACEpgI,OAAkB6jH,UAAlB7jH,OAAQ3G,MAAUwqH,UAAVxqH,MAEVgG,IADgB4gI,aAAdI,UACa,GAAA5tH,OAAI8jH,SAAJ,YAEf+J,cAAgBC,WAAWhK,SAAUl9H,OAwB3C,OAvBA2G,OAAOE,QAAQ,SAACwC,MAAOs8F,WACnBkhC,QAAUK,WAAWhK,SAAUl9H,MAAO2lG,UAAW+gC,qCAAiBr9H,MAAMyK,YACxE,IAEIm6C,KAFEk5E,WA1GQ,SAAhBC,cAAiBC,SAAUh+H,MAAOu9H,cACpC,IAAIU,gBACItnI,MAA+BqnI,SAA/BrnI,MAAO2lG,UAAwB0hC,SAAxB1hC,UAAWu3B,SAAamK,SAAbnK,SAClBvyH,OAAqBi8H,aAArBj8H,OAAQ6zB,SAAaooG,aAAbpoG,SACV+oG,eAAiB58H,OAAO6pF,MAAQ7pF,OAAO6pF,KAAK0oC,cAU9CoK,gBV6OY,SU9OZ9oG,UAFoB0+F,WAAal7H,GADjC6oG,iCAJAL,KAIAK,iCAHAJ,QAGAI,iCAFAN,IAEAM,iCADAP,SAKkC3E,WAEhBnnE,SAEtB,IAAM2oG,YACFtyG,GAAE,GAAAzb,OAAK8jH,SAAL,KAAA9jH,OAAiBpZ,MAAjB,KAAAoZ,OAA0BusF,WAC5B9uG,KAAMwS,MAAMhJ,WACZgJ,MAAOA,MAAMhJ,WACbqV,aAAcrM,MAAMqM,eACpBisF,YAAa2lC,gBACbl6B,cAAc,EACdtS,MAAM,EACN1hG,KAAMstI,qCAAiBr9H,MAAMyK,YAKjC,OAHAyzH,eAAen5E,WAAa/kD,MAAMvL,OAAOypI,eAAen5E,YACxDm5E,eAAehzH,OAASlL,MAAMvL,OAAOypI,eAAehzH,QAE7C+2D,eAAe67D,WAAYI,gBA2EXH,EAAgBpnI,YAAO2lG,oBAAWu3B,mBAAY7zH,MAAOu9H,cAGnE5gI,IAAIuJ,IAAIs3H,WAGT54E,KAAOjoD,IAAI7O,IAAI0vI,UACVW,eAAgB,EACrBv5E,KAAKtjD,OAAOw8H,YACZA,WAAW5yH,OAAS05C,KAAK15C,OAAO4yH,WAAW5yH,QAAU05C,KAAKw5E,eAL1Dx5E,KApEa,SAAnBy5E,iBAAoBP,WAAY99H,MAAOu9H,cAAiB,IAClDj5B,aAAiBi5B,aAAjBj5B,aAGR,OADmB,IAAIg6B,EADXlB,UAAUC,qCAAiBr9H,MAAMyK,aAClBqzH,YAAcx5B,4BAiE1B+5B,CAAiBP,WAAY99H,MAAOu9H,cAO/C34E,KAAKwpC,YAAYA,aACjBsvC,YAAY9iI,KAAKgqD,MACjBjoD,IAAIwJ,IAAIq3H,QAAS54E,QAGjB84E,YAAYtnI,SACZuG,IAAIwJ,IAAIy3H,cAAeF,aACvBD,UAAUtyH,IAAIyyH,gBAGXF,aA+EEa,SAAW,SAAXA,SAAYx5H,IAAKnP,KAI1B,IAHA,IAAI3I,EAAI,EACJuxI,UAAY,GAEK,IAAdA,UAAmBvxI,EAAI8X,IAAI3O,QAC1B2O,IAAI9X,GAAG+J,aAAepB,IAAIoB,aAC1BwnI,SAAWvxI,GAEfA,IAEJ,OAAOuxI,o1EClNUC,iyBAAyBpC,qVAoB9BkB,aAAcpc,UAAW/xF,SAAS,IAAAjmB,MAAAzU,KACpCgqI,gBAEFvzC,KACAoyC,aADApyC,KAGAwzC,YAEAxd,UAFAwd,YACAhkC,QACAwmB,UADAxmB,QAGAikC,UAEAD,YAFAC,UACAC,aACAF,YADAE,aAMEvzC,aACFhuF,OAAQshI,UACRjoI,MAHAgkG,QAFCmkC,WAODxhI,OAAQuhI,aACRloI,MANAgkG,QADCokC,cASCC,MAAQ7zC,KAAKt6D,MACbouG,MAAQ9zC,KAAKjzF,MAgBnB,OAdC0mI,UAAWC,cAAcrhI,QAAQ,SAACF,OAAQrQ,GACvC,IAAM8C,KAAa,IAAN9C,EAAU0rI,IXoCb,SWnCJ/zE,KAAa,IAAN33D,EAAU0L,EAAI25C,EAEvBh1C,OAAOlH,OAAS,EAChBmnI,aAAapoG,SXiMT,OW/LJooG,aAAapoG,SAAWhsB,MAAKuzH,WAAW3sI,MAE5C2uI,aAAa95E,MAAQ04E,mCAAoB14E,KAAM0mC,WAAWr+F,GAAIswI,cAC1DE,UAAW74E,OAAStS,EAAI0sF,MAAQC,MAChC7wC,YAAah/D,QAAQ/K,SAAS+pE,kBAG/BswC,iEAGIrhI,MAAO8tF,MAClB,IAAM6zC,MAAQ7zC,KAAKt6D,EACbouG,MAAQ9zC,KAAKjzF,EACnBmF,MAAMwT,MAAMquH,OACZ,IAAK,IAAIjyI,EAAI,EAAGA,EAAI+xI,MAAM5oI,OAAQnJ,IAC9B,IAAK,IAAIsiB,EAAI,EAAGA,EAAIyvH,MAAM/xI,GAAGmJ,OAAQmZ,IACjClS,MAAMknH,OAAN,GAAAx0G,OAAgBwvF,0BAAiB17C,uBAAjC,aAAoE,GAApE9zC,OAAwE9iB,EAAxE,KAA8E+xI,MAAM/xI,GAAGsiB,GAAGrE,UAGlG,IAAK,IAAIje,GAAI,EAAGA,GAAIgyI,MAAM7oI,OAAQnJ,KAC9B,IAAK,IAAIsiB,GAAI,EAAGA,GAAI0vH,MAAMhyI,IAAGmJ,OAAQmZ,KACjClS,MAAMknH,OAAN,GAAAx0G,OAAgBwvF,0BAAiB17C,uBAAjC,cAAA9zC,OAAoE9iB,GAAI,EAAxE,KAA8EgyI,MAAMhyI,IAAGsiB,IAAGrE,UAC1F+zH,MAAMhyI,IAAGsiB,IAAG47F,aAAc,EAIlC9tG,MAAMwT,MAAMsuH,mEAGE/vG,SAUd,IATA,IAAM/xB,MAAQ+xB,QAAQ/xB,QAChB+hI,YAAc/hI,MAAMvP,IAAN,GAAAiiB,OAAawvF,0BAAiB97C,sBAA9B,YACdp/B,SAAW+K,QAAQ/K,WACnBg7G,MAAQh7G,SAASg7G,QACjBliE,SACF/jB,KACAkmF,MAPmB9iE,MAAA,SAAAA,MAUd+iE,KAAUpiI,KAEf,IADA,IAAMqiI,SAAWH,MAAME,MAXJE,OAAA,SAAAA,OAYVC,KAAUC,MACf,IACMr0C,WADOk0C,SAASE,MACEpiI,UACvBguF,WAAWz6D,EAAGy6D,WAAWpzF,GAAGsF,QAAQ,SAACoC,SAAUi0H,UAC5Cj0H,SAASpC,QAAQ,SAACwC,MAAOs8F,WACrB,IAAM9tG,IAAOqlI,SAAD,GAAA9jH,OAAwCwvH,KAAxC,KAAAxvH,OAAgDusF,WAAhD,IAAAvsF,OAAgB2vH,MAAhB3vH,OAAuBusF,WAC7Bj/B,IAAM+hE,YAAW,GAAArvH,OAAIwvH,MAAJxvH,OAAW2vH,OAC9BriE,KAAmC,IAA5B1vE,OAAO6M,KAAK6iE,KAAKjnE,SACxB+mE,QAAQ02D,UAAUrlI,KAAO0uE,0BAAcC,QAAQ02D,WAAa12D,QAAQ02D,UAAUrlI,SAC1E6uE,IAAG,GAAAttD,OAAI/P,SAAWA,MAAMyK,iBATnCi1H,KAAO,EAAGC,KAAOH,SAASppI,OAAQspI,KAAOC,KAAMD,OAAQD,OAAvDC,OAFJH,KAAO,EAAGpiI,IAAMkiI,MAAMjpI,OAAQmpI,KAAOpiI,IAAKoiI,OAAQ/iE,MAAlD+iE,MAVc,IAAAK,eA4BQv7G,SAAS8mE,OAA7B6zC,MA5BYY,eA4Bf/uG,EAAaouG,MA5BEW,eA4BL1nI,EAClBmF,MAAMwT,MAAMquH,QACXF,MAAOC,OAAOzhI,QAAQ,SAACqiI,QAAShM,UAC7BgM,QAAQriI,QAAQ,SAAC2tF,KAAMvkF,KACnB,IAAMsB,OACAE,OACF8C,UACA40H,kBACA30C,KAAK/0F,OAAS,GAAoC,WAA/B+0F,KAAK,GAAGzxE,YAAY3pB,QAAuBo7F,KAAK,GAAG7pF,SAASy+H,gBAC/E50C,KAAK3tF,QAAQ,SAAConD,KAAM33D,GAChB,IAAMuB,IAAOqlI,SAAD,GAAA9jH,OAA+BnJ,IAA/B,KAAAmJ,OAAsC9iB,GAAtC,IAAA8iB,OAAgBnJ,KAAhBmJ,OAAsB9iB,GAClCie,OAASiyD,QAAQ02D,UAAUrlI,KAC3B0Z,IAAIjb,GAAKie,OAAO,GAChB9C,IAAInb,GAAKie,OAAO,KAEpB40H,eDnFa,SAApBE,kBAAqB53H,IAAKF,KACnC,IAAM+3H,QAAU73H,IAAI,IAAMA,IAAI,GAAKF,IAAI,IACjCg4H,QAAU93H,IAAI,IAAMA,IAAI,GAAKF,IAAI,IAGnCi4H,aAAc,EA0BlB,OAvBIj4H,IAAI,GAAK,GAAKA,IAAI,GAAK,GAAKA,IAAI,GAAK,GAAKE,IAAI,GAAK,IACnD+3H,aAAc,EACdj4H,IAAI,GAAK,EACTA,IAAI,GAAK,GAITA,IAAI,GAAK,GAAKA,IAAI,GAAK,GAAKA,IAAI,GAAK,GAAKE,IAAI,GAAK,IACnD+3H,aAAc,EACd/3H,IAAI,GAAK,EACTA,IAAI,GAAK,GAIR+3H,aAAeF,UAAYC,UACxBD,QAAUC,QAEVh4H,IAAI,GAAKA,IAAI,GAAKE,IAAI,GAAKA,IAAI,GAG/BF,IAAI,GAAKA,IAAI,GAAKE,IAAI,GAAKA,IAAI,MAIlCF,IAAI,GAAIE,IAAI,KACZF,IAAI,GAAIE,IAAI,KCkDgB43H,CAAkB53H,IAAKF,MAG5CijF,KAAK3tF,QAAQ,SAAConD,KAAMjuD,OAChB,IAAMnI,IAAOqlI,SAAD,GAAA9jH,OAAmCnJ,IAAnC,KAAAmJ,OAA0CpZ,OAA1C,IAAAoZ,OAAgBnJ,KAAhBmJ,OAAsBpZ,OAClCuU,OAAS40H,eAAenpI,QAAUwmE,QAAQ02D,UAAUrlI,KACpDo2D,KAAK15C,OAAOA,QACZ,IAAMnb,KAAQ8jI,SAAiB,IAAN,IACzBx2H,MAAMknH,OAAN,GAAAx0G,OAAgBwvF,0BAAiB17C,uBAAjC,YAAA9zC,OAAkEhgB,KAAlE,KAAAggB,OAA0EnJ,KAA1EmJ,OAAgFpZ,OAASuU,cAIrG7N,MAAMwT,MAAMsuH,iFAUS7hI,OAAQvN,MAY7B,IAXA,IAAIqwI,UACAzB,eACA0B,QAAU,EACRC,iBACAC,mBACAC,cAAgBljI,OAAO,GACvBmjI,gBAAkBnjI,OAAO,GACzBojI,WAAaF,cAAcpqI,OAC3BuqI,aAAeF,gBAAgBrqI,OAC/BsmI,SAAWhoI,KAAKgoI,WAEbzvI,EAAI,EAAGA,EAAIyzI,WAAYzzI,IAAK,CACjC,IAAI2zI,SAAWJ,cAAcvzI,IACvB4zI,aAAeL,cAAcvzI,GAEnC,GX7HW,YW6HP4zI,aAAa9wI,OAAoB,CACjC,IAAM+wI,eAAiBL,gBAAgBJ,SACnCS,gBX/HG,YW+HeA,eAAe/wI,SACjCswI,UACAO,SAAWC,aAAcC,iBAE7BnC,YAAY/jI,KAAKgmI,cAEjBR,OAAOxlI,KAAKimI,cACZP,cAAc1lI,KAAKimI,cAG3B,GAAIF,aAAeN,QACf,IAAK,IAAIpzI,IAAIozI,QAASpzI,IAAI0zI,aAAc1zI,MAAK,CACzC,IAAM6zI,gBAAiBL,gBAAgBxzI,KACjC2zI,UAAWE,iBX5IV,YW6IHA,gBAAe/wI,OACf4uI,YAAY/jI,KAAKgmI,WAEjBR,OAAOxlI,KAAKkmI,iBACZP,gBAAgB3lI,KAAKkmI,kBAIjC,IAAKR,cAAclqI,QAAUmqI,gBAAgBnqI,UAAYuoI,YAAYvoI,OAEjE,GAAKsmI,SADL3sI,KAAOA,OAAS2oI,IXzGN,SWyGqB3oI,QACPoxG,gBXtDjB,QWsDyBu7B,SAAS3sI,QAAkBuwI,cAAclqI,OAUlE,CACH,IACM2qI,OAAQR,gBADQ,GAEtB5B,cAAgBoC,SAChB,IAAMC,YAAazC,SAAS+B,cAAeS,QACvCC,aAAc,IACdrC,cAAgBoC,OAAOA,SACvBT,cAActkI,OAAOglI,YAAY,IAErCT,gBAAgBvkI,OARM,EAQgB,OAnBuC,CAC7E,IAAMilI,cAAgBX,cAAclqI,OAAS,EACvC2qI,MAAQT,cAAcW,eAC5BtC,cAAgBoC,QAChB,IAAMC,WAAazC,SAASgC,gBAAiBQ,OACzCC,YAAc,IACdrC,cAAgBoC,MAAOA,QACvBR,gBAAgBvkI,OAAOglI,WAAY,IAEvCV,cAActkI,OAAOilI,cAAe,GAgB5C,OACIb,OAFJA,QADAA,UAAMrwH,OAAOuwH,cAAkBC,kBACf74H,OAAO,SAACmvF,GAAIlgG,MAAOwhF,MAAZ,OAAqBxhF,QAAUwhF,KAAKl+D,UAAU,SAAA9rB,GAAC,OAAKA,EAAE6I,aAAe6/F,GAAG7/F,eAG3F2nI,+EAYQhE,UAAWr5H,QACvB,OAAA4/H,sBAAAC,iCAAA1C,iBAAA1vI,WAAA,iBAAA2F,MAAAtH,KAAAsH,KAA4BimI,UAAWr5H,8EAUnB84F,WAAYkE,UAChC,IAAM8iC,aAAehnC,WAAWgnC,aAC1BjkE,WACN,IAAK,IAAM3uE,OAAO8vG,SACd,MAAOtvG,eAAe5B,KAAKkxG,SAAU9vG,KAAM,CACvC,IAAM6yI,YAAc/iC,SAAS9vG,KACvBwR,MAAQqhI,YAAYrhI,MAC1B,IAAKqhI,YAAYn2H,QAAUlL,MAAO,CAC9B,IAAMkL,OAASo2H,sBAAsBF,aAAcphI,OACnDm9D,QAAQn9D,OAASkL,QAI7B,OAAOiyD,0EASWokE,YAClB,IAAMC,oBAON,OALAD,WAAWnrI,QAAUmrI,WAAW/jI,QAAQ,SAACoxF,MAAO3hG,GAC5C,IAAMilB,IAAM8kH,kBAAamB,oBAAoBvpC,OAC7C18E,IAAIyI,MAAQ1tB,EACZu0I,iBAAiB5mI,KAAKsX,OAEnBsvH,uEAWKlkI,OAAQmkI,iBACpB,IAAMC,eAEF7C,aAEAvhI,OAFAuhI,aACAD,UACAthI,OADAshI,UAiDJ,OA7CAC,aAAarhI,QAAQ,SAACmkI,UAClB,IAAMC,aAAeD,SAAS3qI,WAC9B4nI,UAAUphI,QAAQ,SAACqkI,UACf,IAAIC,WACEC,aAAeF,SAAS7qI,WACxBsnG,UACFztE,GACI7wB,MAAO4hI,cAEX1pI,GACI8H,MAAO+hI,eAGTC,aAAeH,SAASp3H,UAExByzF,KD/IQ,SAAjB+jC,eAAkBC,aAAcF,cAWzC,MV6CuB,gBUrDnBE,cVqDmB,gBUrDaF,aV6DrB,MAJK,aUvDTE,cVuDS,aUvDoBF,aV+DxB,OAIC,QWuEQC,CADQN,SAASl3H,UACYu3H,cAEpCG,aACFjkC,UACAhsF,KACIgsF,UACAI,qBAIF8jC,aD5FgB,SAAzBC,uBAA0BC,UAAW1D,UAAW6C,iBAAvB,OAA2CA,gBAAgB/5H,OAAO,SAAC+4D,MAAS,IAAAp5C,KAAA+1C,MAAA7lD,MACxG8wG,SAAW5nD,gBAAgBljE,MAAQkjE,MAAQA,MAC3C8hE,aAAcl7G,SAAGtX,OAAH9T,MAAAorB,KAAAm7G,iCAAana,SAAS1rH,IAAI,SAAApP,GAAC,OAAIA,EAAE+wG,WAAU52F,OAAO,SAAAna,GAAC,YAAUyU,IAANzU,MAE3E,IAAKg1I,YAAYnsI,OACb,OAAO,EAGX,IAAMiyF,SAAUjrB,UAAGrtD,OAAH9T,MAAAmhE,MAAAolE,iCAAaD,YAAY5lI,IAAI,SAAApP,GAAC,OAAKA,EAAEsjC,GAAKtjC,EAAEsjC,EAAE7wB,MAAOzS,EAAEgnD,IAAMhnD,EAAEgnD,GAAGv0C,WACrE0H,OAAO,SAAAna,GAAC,YAAUyU,IAANzU,GAAyB,OAANA,IACtC+6F,SAAU/wE,UAAGxH,OAAH9T,MAAAsb,MAAAirH,iCAAaD,YAAY5lI,IAAI,SAAApP,GAAC,OAAKA,EAAE2K,GAAK3K,EAAE2K,EAAE8H,MAAOzS,EAAE+5D,IAAM/5D,EAAE+5D,GAAGtnD,WACrE0H,OAAO,SAAAna,GAAC,YAAUyU,IAANzU,GAAyB,OAANA,IAE5C,IAAK86F,QAAQjyF,SAAWkyF,QAAQlyF,OAC5B,OAAO,EAGX,IAAMqsI,gBAAgBp6C,QAAQjyF,QAASiyF,QAAQj2E,MAAM,SAAA7kB,GAAC,OAA8B,IAA1B+0I,UAAU3nI,QAAQpN,KACtEm1I,gBAAgBp6C,QAAQlyF,QAASkyF,QAAQl2E,MAAM,SAAA7kB,GAAC,OAA8B,IAA1BqxI,UAAUjkI,QAAQpN,KAC5E,OAAI86F,QAAQjyF,QAAUkyF,QAAQlyF,OACnBqsI,eAAiBC,cAErBD,eAAiBC,gBCsESL,CAAuBV,SAASn2C,aACjDq2C,SAASr2C,aAAci2C,qBAEvBK,QADAM,aAAahsI,OACHgsI,aAAazlI,IAAI,SAACgmI,WACxB,IAAMC,gBAAkB3gE,eAAeA,kBAAmBkgE,WAAW,GAAGjwH,KAAMywH,WACxEE,sBAAwB7L,kBAAaM,kBAAkBsL,gBAAgB1kC,KACzE0kC,iBACJ,OACI1kC,KAAM0kC,gBAAgB1kC,KACtBvjF,MAAOioH,gBAAgBjoH,MACvBzI,IAAK2wH,yBAIHV,WAGdT,YAAY9mI,KAAZqB,MAAAylI,YAAWoB,oCAAShB,cAGrBJ,kDArUP,MXwMiB,syEY3NJqB,qvBAAqB1G,qUAU1BkB,aAAcpc,WAAW,IAI3Bud,aADFnB,aADApyC,KAIAwP,QACAwmB,UADAxmB,QAGAmkC,SAEAnkC,QAFAmkC,SACAC,YACApkC,QADAokC,YAGEiE,QAAUtE,aAAat4D,QAS7B,OAPA48D,QAAQlE,UAAYkE,QAAQlE,cAC5BkE,QAAQlE,UAAUC,gBAElBL,aAAat4D,IAAM48D,QACnBtE,aAAa7tG,EAAI,KACjB6tG,aAAaxmI,EAAI,KAEVwmI,qFAUcphI,QASrB,IARA,IAAI+iI,QAAU,EACRD,UACAzB,eACA6B,cAAgBljI,OAAO,GACvBmjI,gBAAkBnjI,OAAO,GACzBojI,WAAaF,cAAcpqI,OAC3BuqI,aAAeF,gBAAgBrqI,OAE5BnJ,EAAI,EAAGA,EAAIyzI,WAAYzzI,IAAK,CACjC,IAAM4zI,aAAeL,cAAcvzI,GACnC,GZJW,YYIP4zI,aAAa9wI,OAAoB,CACjC,IAAM+wI,eAAiBL,gBAAgBJ,WACjCO,QAAUE,gBAAkBD,aAAcC,iBAAmBD,cACnElC,YAAY/jI,KAAKgmI,cAEjBR,OAAOxlI,KAAKimI,cAGpB,GAAIF,aAAeN,QACf,IAAK,IAAIpzI,GAAIozI,QAASpzI,GAAI0zI,aAAc1zI,KAAK,CACzC,IAAM6zI,gBAAiBL,gBAAgBxzI,IACjC2zI,UAAWE,iBZfV,YYgBHA,gBAAe/wI,OACf4uI,YAAY/jI,KAAKgmI,UAEjBR,OAAOxlI,KAAKkmI,iBAIxB,OACIV,cACAzB,mFAIUvvG,SACd,IAAM/xB,MAAQ+xB,QAAQ/xB,QAChB8/D,QAAU9/D,MAAMvP,IAAN,GAAAiiB,OAAawvF,0BAAiB97C,sBAA9B,YACVw/E,aACF9oE,QAASvmB,KAAWA,MAExBjmD,OAAOskB,OAAOkrD,SAAS3/D,QAAQ,SAACsuG,WAC5B,IAAK,IAAMt9G,OAAOs9G,UACdm3B,YAAYz0I,MAAQ+J,KAAK2P,IAAI4jG,UAAUt9G,KAAK,GAAIy0I,YAAYz0I,KAAK,IAC7D+J,KAAK2P,IAAI4jG,UAAUt9G,KAAK,GAAIy0I,YAAYz0I,KAAK,OAGzD6O,MAAMknH,OAAN,GAAAx0G,OAAgBwvF,0BAAiB17C,uBAAjC,kBAAyEo/E,YAAY9oE,kEAWrF,OAAOzlE,6CAcP,OAAIoF,UAAO1D,QACP1B,KAAK+qG,QAAL3lG,UAAA1D,QAAA,OAAA4L,EAAAlI,UAAA,GACOpF,MAEJA,KAAK+qG,8DAUAk7B,UAAWr5H,QACvB,IAAI4hI,sBACAC,yBACE7lI,OAAS8lI,kBAAAC,6BAAAN,aAAAh0I,WAAA,iBAAA2F,MAAAtH,KAAAsH,KAAqBimI,UAAWr5H,QAE3CqtF,OACArtF,OADAqtF,OAGAz/E,KAEA5R,OAFA4R,KACAjB,QACA3Q,OADA2Q,QAGEqwF,SADQ3P,OAAO,GACE2P,SACjBnkC,OAASmkC,UAAYA,SAASnkC,OAASmkC,SAASnkC,OAAOn6D,MAAQ,KAC/DglG,MAAQ1G,UAAYA,SAAS0G,MAAQ1G,SAAS0G,MAAMhlG,MAAQ,KAC5DsjI,iBAAmBJ,cAAeC,kBAYxC,OAVCj0H,KAAMjB,SAASzQ,QAAQ,SAAC8+D,UAAWinE,WAChCjnE,UAAU9+D,QAAQ,SAACgmI,SAAUv2I,GAAX,OAAiBu2I,SAAShmI,QAAQ,SAACwC,OAC7CA,MAAMhJ,aAAemjE,QAAUn6D,MAAMhJ,aAAeguG,OZnGjD,YYmG0DhlG,MAAMjQ,QACnEuzI,gBAAgBC,WAAWt2I,GAAG2N,KAAKoF,aAI/CmjI,iBAAmBM,gCAAI,IAAIx4H,IAAIk4H,mBAC/BD,cAAgBO,gCAAI,IAAIx4H,IAAIi4H,gBAC5BxuI,KAAKysH,WAAYjyG,KAAMg0H,cAAej1H,QAASk1H,mBACxCzuI,KAAKysH,kFAGQ/mB,WAAYkE,SAAUolC,YAAapnH,SACvD,IAAI4mG,UACAF,WACE1lH,UACAqxF,OAASj6F,KAAKi6F,SACdh9E,UAAYyoF,WAAWgnC,aACvBtvH,aAAeH,UAAUI,kBACzBorD,WACN,GAAIwxB,QAAUA,OAAO,GAAI,CACrB,IACMg1C,cADQh1C,OAAO,GACOz8E,IAAIosF,cAE/BgC,iBAAQD,gBAAOE,qBAAMC,uBAAOhjG,QAAQ,SAAComI,SAClC,IAAM5jI,MAAQ2jI,cAAcC,SAAWD,cAAcC,SAAS5jI,MAAQ,GAChEsf,aAAexN,aAAa9R,QZ5H3B,YY4HqC8R,aAAa9R,OAAOkS,IAAIniB,KAChE6zI,UAAYrjC,sBAAQjhF,eACpB4jG,UAAYljH,OAEZ4jI,UAAYpjC,wBACZwiB,WAAahjH,OAEjB8R,aAAa9R,SAAWsf,cAAgBhiB,OAAO1C,KAAKoF,SAU5D,GANIkjH,YACA/lD,QAAQ+lD,WAAavxG,UAAU2K,QAAQonH,6LAAlBG,IAChB3gB,UAAY,QACd5/G,gBAAgBxD,YAAYojH,WAAWh4G,UAG1C83G,WAAY,CACZ,IAAM57G,GAAKuK,UAAU2K,WAAVvM,OAAA0zH,gCAAsBC,aAAgBpmI,QAASgf,QAAQK,UAClEwgD,QAAQ6lD,YAAc57G,GAAG9D,gBAAgBxD,YAAYkjH,YAAY93G,SAErE,OAAOiyD,8DAUK7/D,OAAQmkI,iBACpB,IAAIC,eAEI7C,aAEAvhI,OAFAuhI,aACAD,UACAthI,OADAshI,UAsBR,SApBe7uH,OAAA0zH,gCAAO5E,cAAP4E,gCAAwB7E,YAE7BphI,QAAQ,WACd,IACI8D,QACA48F,KZAG,MYCHhsF,KACIosF,cAGJmjC,iBAAmBA,gBAAgBrrI,OAAS,IAC5CkL,OAAS2gE,eAAe3gE,OAAQmgI,gBAAgB,KAEpDC,YAAY9mI,KAAK0G,UAEM,IAAvBogI,YAAYtrI,SACZsrI,YAAcD,iBAGlB/sI,KAAKi6F,OAAO+yC,aACLA,8EAUWH,YAClB,IAAMC,oBASN,OAPAD,WAAWnrI,QAAUmrI,WAAW/jI,QAAQ,SAACoxF,OACrC,IAAM18E,IAAM8kH,kBAAaM,kBAAkB1oC,MAAMsP,KAAMtP,OACvD4yC,iBAAiB5mI,MACbsjG,KAAMtP,MAAMsP,KACZhsF,YAGDsvH,uDA3IP,MZgHa,qyCa/NAsC,2wBAAuBzH,6UAS5BkB,cAAc,IACdzrH,aAAyByrH,aAAzBzrH,aAAcxQ,OAAWi8H,aAAXj8H,OAChByiI,WAKN,OAHCvjC,sBAAOC,sBAAOF,sBAAM/iG,QAAQ,SAACq2H,UAC1BkQ,QAAO,GAAAh0H,OAAI8jH,WHkLU,SAApBmQ,kBAAqBzG,cAAkC,IAApB0G,WAAoBnqI,UAAA1D,OAAA,QAAA4L,IAAAlI,UAAA,GAAAA,UAAA,MACxD+5H,SAA2B0J,aAA3B1J,SAAU/hH,aAAiByrH,aAAjBzrH,aACZ9R,MAAQikI,WAAWjkI,MACnB4kD,QACA05E,IAAMlB,UAAUvJ,UAItB,OAFAoQ,WAAWl0I,KAAOk0I,WAAWl0I,KAAOk0I,WAAWl0I,KAAOm0I,wBAAYpyH,aAAc9R,OAAS,MACzF4kD,KAAKhqD,KAAK,IAAI0jI,IAAI2F,aACXr/E,KG1L0Bo/E,EAAoBnQ,kBAAU/hH,2BAAgBxQ,OAAOuyH,aAE3EkQ,8DAsBKI,gBAAiB1C,iBAC7B,IAAMC,eAqBN,OApBAD,gBAAgBjkI,QAAQ,SAACrO,GACrB,IAAMmS,OAASnS,GACdqxG,sBAAOC,sBAAOF,sBAAM/iG,QAAQ,SAAConD,MAC1B,GAAIu/E,gBAAgBv/E,OAASu/E,gBAAgBv/E,MAAM5kD,MAAO,CACtD,IAAMkS,IAAM5Q,OAAO4Q,IACf5Q,OAAO4Q,eAAe3U,MACtB2U,IAAI1U,QAAQ,SAACijE,MACTA,KAAK69B,SAAW79B,KAAK69B,cACpB79B,KAAK69B,SAAS15C,QAAU6b,KAAK69B,SAAS15C,UACvC6b,KAAK69B,SAAS15C,MAAM5kD,MAAQmkI,gBAAgBv/E,MAAM5kD,SAGtDkS,IAAIosF,SAAWpsF,IAAIosF,cAClBpsF,IAAIosF,SAAS15C,QAAU1yC,IAAIosF,SAAS15C,UACrC1yC,IAAIosF,SAAS15C,MAAM5kD,MAAQmkI,gBAAgBv/E,MAAM5kD,UAI7D0hI,YAAY9mI,KAAK0G,UAEdogI,oEAUMtyG,SAAS,IACd+tC,QAA4B/tC,QAA5B+tC,QAASguB,KAAmB/7D,QAAnB+7D,KAAMmT,SAAalvE,QAAbkvE,SAevB,OAbA3wG,OAAOub,QAAQo1F,UAAU9gG,QAAQ,SAACqqH,KAC9B,GAAIA,IAAI,IAAMA,IAAI,GAAG7nH,MAAO,CACxB,IAAM4jI,QAAU/b,IAAI,GACd7nH,MAAQ6nH,IAAI,GAAG7nH,MAEjBA,OACAmrF,KAAKy4C,SAASpmI,QAAQ,SAAConD,MACnB,IAAM15C,OAASiyD,QAAQn9D,QACtB6nH,IAAI,GAAG38G,QAAU05C,KAAKo2D,aAAa9vG,aAK7CigF,2CA3DP,MAAO,wwCCFR,wBASMi5C,gCAAsB,SAAtBA,oBAAsBr/H,KAAG,SAAIgL,OAAAs0H,8BAAIt/H,IAAI,IAARs/H,8BAAet/H,IAAI,KAAI0B,OAAO,SAACi7D,QAASjyD,KAC9E,IAAM60H,QAAU70H,IAAI1f,OAKpB,MdSmB,YcZfu0I,SdkMgB,aclMOA,UACvB5iE,SAAU,GAEPA,UACR,IAMU6iE,oBAAsB,SAAtBA,sBAAsB,OAC/BC,QAAS,IAAI1+H,IACb2+H,SAAU,IAAI3+H,IACd4+H,SAAU,IAAI5+H,IACd6+H,aAAc,IAAI7+H,IAClB8+H,YAAa,IAAI9+H,MASR+3H,WAAa,SAAbA,WAAcr6B,UAAD,QAAAjoC,KAAAzhE,UAAA1D,OAAcgf,OAAd,IAAA7X,MAAAg+D,KAAA,EAAAA,KAAA,KAAAC,KAAA,EAAAA,KAAAD,KAAAC,OAAcpmD,OAAdomD,KAAA,GAAA1hE,UAAA0hE,MAAA,SAAAzrD,OAA4ByzF,SAA5B,UAAAzzF,OAA6CqF,OAAO3d,KAAK,OA6DtEotI,0BAAgB,SAAhBA,cAAiBvnI,OAAQwnI,aAAcC,SAAvB3nE,OAAmE,IAAhCiyB,YAAgCjyB,MAAhCiyB,YAAaiV,aAAmBlnC,MAAnBknC,aAQzE,OAPgBhnG,OAAOlH,OAAS,EAAIkH,OAAO,GAAGX,IAAI,SAAC04D,KAAMpoE,GAAP,OAAa,IAAI83I,UAC/Dh1I,KdmJc,SclJd6jC,UAAS,GAAA7jB,OAAKs/E,YAAL,mBAETiV,4BACDnsF,OA9BsB,SAAhB6sH,cAAiBt3H,QAAS/W,MAAOsuI,WAC1C,IAAIr3H,OAAS,GAEb,GAAIjX,QAAUsuI,UAAY,GAAKv3H,QAAQtX,OAAS6uI,UAAW,CACvD,IAAK,IAAIh4I,EAAI0J,MAAO1J,EAAIygB,QAAQtX,OAAS,EAAGnJ,IACxC2gB,QAAM,GAAAmC,OAAOrC,QAAQzgB,GAAG+J,WAAlB,OAGV,OADA4W,QAAUF,QAAQA,QAAQtX,OAAS,GAAGY,WAEnC,OAAI0W,QAAQ/W,OACR+W,QAAQ/W,OAAOK,WAEnB,GAkBGguI,CAAcF,aAAc73I,EAAGqQ,OAAO,GAAGlH,SAClCkL,QAASmwF,KAAMp8B,KAAK/zD,SAASmwF,aAyDrCyyC,wBAAc,SAAdA,YAAepyH,aAAc9R,OACtC,IAAIs8D,Ud1De,Uc+DnB,OAHIt8D,OdjJiB,cciJR8R,aAAa9R,OAAOkS,IAAIniB,OACjCusE,UdxDc,Uc0DXA,WAUEglE,sBAAwB,SAAxBA,sBAAyB3G,UAAWnzH,WAE7C,OADcmzH,UAAUr3H,gBAAgBhG,OAAOwhB,KAAK,SAAAvxB,GAAC,OAAIA,EAAEC,SAAWga,UAAUxQ,aACnEkU,UA6DJ2xH,8BAAoB,SAApBA,kBAAqB9sI,KAAMuN,OAAQ4nI,oBAC5C,IAAIxI,SAAWwI,mBAAmBn1I,MAC9BotI,WAAa,GACX9hI,QAAUtL,OAAS4oI,KAAOx3B,eAAMC,kBdtHpB,SAJH,OcuHoD3kC,QAAA0oE,0BAIjC7nI,OAJiC,GAI5D8nI,WAJ4D3oE,QAAA,GAIhD4oE,YAJgD5oE,QAAA,GAK7D6oE,eAAiB,SAAjBA,eAAiBr4I,GAAC,OAAKm4I,WAAWhvI,OAASgvI,WAAWn4I,GAAG8C,OAAS,MAClEw1I,gBAAkB,SAAlBA,gBAAkBt4I,GAAC,OAAKo4I,YAAYjvI,OAASivI,YAAYp4I,GAAG8C,OAAS,MAwB3E,Md3PqB,ccqOjBu1I,eAAeF,WAAWhvI,OAAS,IdrOlB,ccqOsCmvI,gBAAgB,IACvEpI,WAAaT,SAAWrhI,QAAQ,EAAIA,QAAQV,QAAQ+hI,WAAarhI,QAAQ,GAGrEqhI,SdvLU,WcsLV3sI,MAAoBq1I,WAAWA,WAAWhvI,OAAS,GAAGY,aAAequI,YAAY,GAAGruI,WdlI7E,McqII0lI,UAAYrhI,QAAQ,Id3OlB,cc6OVkqI,gBAAgBF,YAAYjvI,OAAS,IAC5C+mI,WAAaptI,OAAS4oI,IAAMv3B,gBdpId,ScqIds7B,SAAW3sI,OAAS4oI,IAAMv3B,gBdrIZ,WcuId+7B,WAAaptI,OAAS4oI,IAAMx3B,ed3IjB,Mc4IXu7B,SAAW3sI,OAAS4oI,IAAMx3B,ed5If,OAjGI,Yc+OfmkC,eAAeF,WAAWhvI,OAAS,Id/OpB,Yc+OsCmvI,gBAAgB,GACrE7I,SAAW3sI,OAAS4oI,IAAMx3B,ed/If,MAjGI,YciPRokC,gBAAgB,GACvB7I,SAAW3sI,OAAS4oI,IAAMv3B,gBd7IZ,SArGC,YcmPRkkC,eAAeF,WAAWhvI,OAAS,KAC1CsmI,SAAW3sI,OAAS4oI,IAAMx3B,ednJf,QcqJPg8B,WAAYT,WAYX8I,wBAA0B,SAA1BA,wBAA2Bp2G,QAAS+xF,UAAWskB,SAAY,IAEhEnoI,OAEA6jH,UAFA7jH,OACAvN,KACAoxH,UADApxH,KAHgE21I,sBAKpCD,QAAQE,cAAcC,wBAAwBtoI,OAAQvN,MAA9EqwI,OAL4DsF,sBAK5DtF,OAAQzB,YALoD+G,sBAKpD/G,YAKhB,OAHAvvG,QAAQgxG,OAARyF,8BAAA,GAAA91H,OAAqBhgB,KAArB,UAAoCqwI,SACpChxG,QAAQuvG,YAARkH,8BAAA,GAAA91H,OAA0BhgB,KAA1B,eAA8C4uI,eAErCyB,cAAQzB,wBAAarhI,gBAiDrBwoI,uBAAa,SAAbA,WAAcC,SAAUN,SACjC,IAAIO,gBAAmB5wG,KAAK,EAAOovB,QAAQ,GACvCyhF,gBAAmBztG,MAAM,EAAOC,OAAO,GACvCytG,kBAAqB9wG,KAAK,EAAOovB,QAAQ,EAAOhsB,MAAM,EAAOC,OAAO,GAEpEvpB,KAGA62H,SAHA72H,KACAjB,QAEA83H,SAFA93H,QACQk4H,YACRJ,SADA9zH,OAPyCm0H,MAAAjB,0BASfj2H,KATe,GAStCm3H,SATsCD,MAAA,GAS5BE,UAT4BF,MAAA,GAAAG,SAAApB,0BAUTl3H,QAVS,GAUtCu4H,WAVsCD,SAAA,GAU1BE,cAV0BF,SAAA,GAAAG,mBAkBzCjB,QAAQtkB,YANR0a,cAZyC6K,mBAYzC7K,cACAI,iBAbyCyK,mBAazCzK,iBACAF,kBAdyC2K,mBAczC3K,kBACAI,qBAfyCuK,mBAezCvK,qBACAD,eAhByCwK,mBAgBzCxK,eACAJ,YAjByC4K,mBAiBzC5K,YAEE6K,mBAAqB9K,cAAczlI,OAAS6lI,iBAAiB7lI,OAC7DwwI,kBAAoB9K,YAAY1lI,OAAS8lI,eAAe9lI,OACxDywI,wBAA0B9K,kBAAkB3lI,OAAS+lI,qBAAqB/lI,OAEhF,GdtKiB,UcsKbqvI,QAAQ/rH,YAAY3pB,QACpB,IAAK42I,mBACD,OAASX,8BAAgBC,8BAAgBC,wCAE1C,IAAKU,oBAAsBC,yBAA2BF,oBAAsB,EAC/E,OAASX,8BAAgBC,8BAAgBC,mCAe7C,OAZAF,eA7EkB,SAAhBc,cAAiBtuG,KAAMC,OACzB,IAAMsuG,SACNA,KAAc,EACdA,QAAiB,GAKjB,OAJIvuG,KAAKpiC,OAAS,GAAKqiC,MAAMriC,OAAS,KAClC2wI,QAAQ3xG,KAAM,EACd2xG,QAAQviF,QAAS,GAEduiF,QAqEUD,CAAcT,SAAUC,WACzCL,eAnEsB,SAApBe,kBAAqB5xG,IAAKovB,QAC5B,IAAMuiF,SACNA,MAAe,EACfA,OAAgB,GAOhB,OANI3xG,IAAIh/B,QAAUouD,OAAOpuD,UAChBg/B,IAAI,IAAMA,IAAI,GAAGh/B,OAAS,GAAOouD,OAAO,IAAMA,OAAO,GAAGpuD,OAAS,KAClE2wI,QAAQvuG,MAAO,EACfuuG,QAAQtuG,OAAQ,GAGjBsuG,QAyDUC,CAAkBR,WAAYC,eAC/CP,iBAvDoB,SAAlBe,gBAAmB/3H,KAAMjB,SAC3B,IAAM84H,SAAY3xG,KAAK,EAAMoD,MAAM,EAAMgsB,QAAQ,EAAM/rB,OAAO,GACxDyuG,eAAiB/lC,eAAMC,iBACvB+lC,edzMS,MAIG,UcqNlB,OAfAj4H,KAAK1R,QAAQ,SAACrO,EAAGlC,GACTkC,EAAE,IAAMA,EAAE,GAAGiH,OACb2wI,QAAQG,cAAcj6I,KAAM,EAE5B85I,QAAQG,cAAcj6I,KAAM,IAGpCghB,QAAQzQ,QAAQ,SAACrO,EAAGlC,GACZkC,EAAEiH,OACF2wI,QAAQI,cAAcl6I,KAAM,EAE5B85I,QAAQI,cAAcl6I,KAAM,IAI7B85I,QAoCYE,EAAiBZ,SAAUC,YAAaE,WAAYC,gBAEnEN,YAAY/vI,OAAS,IACrB8vI,iBAAiB9wG,KAAM,EACvB8wG,iBAAiB1hF,QAAS,GAE1B2hF,YAAY/vI,QAAU+vI,YAAY,GAAG/vI,OAAS,IAC9C8vI,iBAAiB1tG,MAAO,EACxB0tG,iBAAiBztG,OAAQ,IAEpButG,8BAAgBC,8BAAgBC,4NClatC,IAAMp/C,oBAAkBsgD,oCAAAvjD,uBAC1BwjD,wBAAQ1nD,MACLmF,YAAaqb,2BAAWhW,OACxBrX,OAAO,IAHgBs0D,oCAAAvjD,oBAK1BwjD,wBAAQznD,OACLkF,YAAaqb,2BAAW/V,aANDg9C,oCAAAvjD,oBAQ1BwjD,wBAAQtnD,WACL+E,YAAaqb,2BAAW5V,QACxBzX,OAAO,IAVgBs0D,oCAAAvjD,oBAY1BwjD,wBAAQrnD,WACL8E,YAAaqb,2BAAWhW,OACxBrX,OAAO,IAdgBs0D,oCAAAvjD,oBAgB1BwjD,wBAAQvnD,OACLgF,YAAaqb,2BAAW5V,QACxBzX,OAAO,IAlBgB+Q,+fCaxB,IAyCMyjD,uBAAkB,SAAlBA,gBAAmBl4G,QAAS4N,WAAYuqG,cAAe/9D,YAChE,IAAIi1B,UAAY8oC,cACVp3I,aAAei/B,QAAQo4G,WACvBroC,QAAU/vE,QAAQ+vE,UACnBooC,gBACD9oC,UAAYu4B,kBAAae,iBAAiB/6F,YAC1ChV,QAAQy2E,WAAWjhG,QAAQ,SAACiqI,KAAMx6I,GAC9Bw6I,KAAKtoC,SACD4mB,aAAc5mB,QAAQ2/B,SACtB9Y,aAAc7mB,QAAQuoC,SACtB7nE,UAAW2J,WAAWv8E,KAE1Bw6I,KAAKpqI,MAAM+xB,QAAQ/xB,YAG3B,IAAMsxF,UACAg5C,YAAc3/G,QAAQy2E,WAgB5B,OAfAzhE,WAAahV,QAAQgV,aACVv2B,OAAO,SAACC,IAAKwL,IAAKtL,KACzB,IAAMw9F,SAAWujC,YAAY/gI,KAW7B,OAVAw9F,SAAS9iG,OAAO4Q,KAChBkyF,SAAShW,YAAYh/D,QAAQg/D,eAC7BgW,SAASj0G,aAAaA,cACtBi0G,SAASud,WACLptB,UAAWnlE,QAAQw4G,aAEnB11H,IAAI1kB,MACJ42G,SAASghB,MAAMlzG,IAAI1kB,MAEvBmhG,OAAOyV,SAASghB,SAAWhhB,SACpB19F,SAEJioF,QAGEk5C,yBAA2B,SAA3BA,yBAA4BC,UAAWzqI,OAChD,IAAM2jH,kBAAoB8mB,UAAUxmI,SAAS0/G,sBACvC+mB,WAAa/mB,kBAAkB+mB,WACjCC,UACJ,GAAID,WAAY,CACZ,IAAMz/G,SAAWy/G,WAAW1qI,OAC5B2qI,OAAS1/G,SAAS0/G,OAClBF,UAAU9mB,kBAAkB14F,SAAS7V,SAC9BuuG,6BAA6Bx3G,UACpCs+H,UAAU9mB,kBAAkBA,mBAEhC,OAAOgnB,QAgDEC,wBAAmB,SAAnBA,iBAAoBlqC,WAC7B,IAAMmqC,iBAoBN,OAnBAnqC,UAAUvgG,QAAQ,SAACygG,SAAUhxG,GACzB,IAAMilB,IAAM+rF,SAAS/rF,IACfgsF,KAAOD,SAASC,KACtB,GAAKhsF,IAUIA,IAAI1kB,OACL0kB,IAAI1kB,KAAJ,GAAAuiB,OAAcmuF,KAAd,KAAAnuF,OAAsB9iB,IAE1Bi7I,cAActtI,KAAKqjG,cAbb,CACN,IAAMkqC,MAAQnR,kBAAaM,kBAAkBr5B,SAASC,KAAMD,UACvDkqC,MAAM36I,OACP26I,MAAM36I,KAAN,GAAAuiB,OAAgBmuF,KAAhB,KAAAnuF,OAAwB9iB,IAE5Bi7I,cAActtI,MACVsjG,KAAMD,SAASC,KACfhsF,IAAKi2H,WASVD,eA4IEE,YAAc,SAAdA,YAAez5C,OAAQ05C,SAAUn6I,OAAnB,OAA6BygG,OAAOjnF,OAAO,SAACknF,OAEnE,OAD0B,SAAby5C,SAAsBz5C,MAAMl1E,YAAYslE,aAAe4P,MAAMw2B,WAC1Dl3H,SAGPo6I,eAAiB,SAAjBA,eAAkB35C,OAAQ05C,SAAUn6I,OAC7CygG,OAAOjnF,OAAO,SAAC+/H,MAEX,OAD0B,SAAbY,SAAsBZ,KAAKnmI,SAAS48F,KAAOupC,KAAKriB,WAChDl3H,QACTu5I,KAAKvtG,UACE,MAQNquG,oBAAsB,SAAtBA,oBAAuBp8H,MACRA,KAAKq8H,iBACb1pD,KAAK,WACjB3yE,KAAKq8H,iBAAmB,IAAIttD,QAAQ,SAACn+D,SACjC5Q,KAAKs8H,iBAAmB1rH,UAE5BwrH,oBAAoBp8H,SCxUfu8H,UAAY,YACZC,UAAY,6uCCGjBhS,qBAA0B4B,4BAA1B5B,UAAWC,sBAAe2B,4BAAf3B,WAEbn1B,kBAAS4B,2BAAU5B,OAiEZmnC,mCAA0B,SAA1BA,wBAA2Bx5G,QAAS9tB,OAAQvR,MAAlB,OAA4B,IAAK,KAAK4M,IAAI,SAACk3H,UAC9E,IAAM1oC,KAAO/7D,QAAQ+7D,OACrB,OAAKA,KAAK0oC,WAGG50D,aAAa39D,OAAOuyH,WAAavyH,OAAOuyH,UAAUpiC,KAZvC,SAAtBo3C,oBAAuBp3C,KAAM7sC,MAC/B,OAAIA,KAAKlrC,YAAY3pB,SAAW0xG,mBACrBhQ,KAWPo3C,CAAoBvnI,OAAOmwF,KAAMtG,KAAK0oC,UAAU,KArE7B,SAArBiV,mBAAsB15G,QAAS+7D,KAAMp7F,KAAMuoG,aAAgB,IAAAywC,YACzDzqC,SAUqC0qC,UATnC1nI,OAAS8tB,QAAQ9tB,SACf+tF,YAAsC/tF,OAAtC+tF,YAAa45C,UAAyB3nI,OAAzB2nI,UAAWC,UAAc5nI,OAAd4nI,UAC1BC,cAAgBF,UAAU/hG,MAC1BkiG,cAAgBH,UAAUG,cAC1Bh6C,aAAer/F,OAAS24I,UAAYQ,UAAU95C,aAAe65C,UAAU75C,aACvEi6C,cAAgBH,UAAU5wC,aAAapxD,MACvC0d,KAAOumC,KAAKmN,aAAa,GACzBgxC,cAAgB1kF,KAAKlrC,YAAY3pB,SAAW0xG,kBAE9C1xG,OAAS24I,WAAaY,eACdC,0BAAAP,aACH1wC,YADG,GAAAvoF,OACcuoF,YADd,UAAAixC,0BAAAP,UAAA,GAAAj5H,OAEAuoF,YAFA,QAAAvoF,OAEoBuoF,YAFpB,WAARgG,SAAQ0qC,WAKR1qC,SAAWirC,6BACNjxC,YAA2B,GAAAvoF,OAAMuoF,YAAnBgxC,cAAa,gBAapC,OAVAhrC,SAASp3D,OACLh5C,MAAO,SAAAA,MAACuR,KAAMxS,GACV,IAAMu8I,iBAAmBF,eAAiB1kF,KAAK15C,SAAS,GAAK,EAC7D,OAAInb,OAAS24I,UACFW,cAAcp8I,EAAI,GAEtBu8I,kBAA0C,IAAtB/pI,KAAK64F,aAAqB8wC,cAAgBD,iBAKzEnsG,YAAU+rG,aACN35C,aAAY,GAAAr/E,OAAKq/E,aAAL,KAAAr/E,OAAqBuoF,aACjC1kE,UAAWtyB,OAAOsyB,UAClBpmC,KAAM8qG,YACNkoB,oBAAqB,SAAAA,oBAAC/gH,KAAMxS,GAQxB,OANyBq8I,eAAiB1kF,KAAK15C,SAAS,GAAK,GAC1B,IAAXzL,KAAKvH,GAAWnI,OAAS24I,UACpC,GAAA34H,OAAMs/E,YAAN,mBAEA,GAAAt/E,OAAMs/E,YAAN,UAAAt/E,OAA0BhgB,KAA1B,KAAAggB,OAAkCuoF,YAAlC,KAAAvoF,OAAiD9iB,EAAI,KAVhEs8I,0BAAAR,YAAA,MAAAh5H,OAcCuoF,YAAY/lD,eAAkBxiD,OAAS24I,UAAY,OAAI1mI,GAdxDunI,0BAAAR,YAAA,WAeNzqC,UAfMyqC,aAiBV59C,KAAMo+C,6BACDjxC,YAAc1zC,MAEnBiqC,aAAa,GAmBHi6C,CAAmB15G,QAAS+7D,KAAMp7F,KAAM8jI,UAL3C,OAMZnsH,OAAO,SAAAna,GAAC,OAAU,OAANA,KA8GFk8I,2BAA6B,SAA7BA,2BAA8Br6G,SAAY,IAAA/H,KAC7C8jE,KAAO/7D,QAAQ+7D,OACfyH,aACFrkE,MAAOa,QAAQb,QACfC,OAAQY,QAAQZ,UAEdy6G,UAAY75G,QAAQs6G,WACpBR,UAAY95G,QAAQu6G,WACpBC,cApHsB,SAAnBC,iBAAoB1+C,KAAM7tF,OAAQwU,cAC3C,IAAMg4H,YAyCN,OAxCC,IAAK,KAAKtsI,QAAQ,SAACzN,MAChB,IAAIspC,MAAQ8xD,KAAKp7F,MAAM,GAAG83G,gBACpBp9F,QAAUs1D,WAAWjuD,aAAciuD,WAAWziE,OAAQvN,KAAM,GAAGy7F,aAAa,GAAI,MAAO,WACvFhyE,YACApZ,SAEE5S,KAAM,SACNuC,KAAM,YAENvC,KAAM,SACNuC,KAAM,YAGNvC,KAAM,UACNuC,KAAM,YAENvC,KAAM,UACNuC,KAAM,YAENvC,KAAM,OACNuC,KAAM,YACN0a,kBAEAjd,KAAM,OACNuC,KAAM,YACN0a,kBAGFtN,IAAM5E,KAAK6P,IAAIixB,MAAMjjC,QAC3BijC,MAAQ5uB,UAAYnX,gCAAiBE,SAAW6lC,MAAM18B,IAAI,SAAApP,GAAC,OAAIA,EAAE0R,YAAao6B,MAC9E,IAAK,IAAIpsC,EAAI,EAAGA,EAAIkQ,IAAKlQ,GAAK,EAAG,KAAA88I,eAC7BvwH,SAAS5e,MAAT2uI,0BAAAQ,kBAAA,GAAAh6H,OACQhgB,KADR,SACsBspC,MAAMpsC,IAD5Bs8I,0BAAAQ,eAAA,GAAAh6H,OAEQhgB,KAFR,UAEuBspC,MAAMpsC,EAAI,IAFjCs8I,0BAAAQ,eAAA,GAAAh6H,OAGQhgB,KAHR,OAGoBspC,MAAMpsC,IAH1Bs8I,0BAAAQ,eAAA,GAAAh6H,OAIQhgB,KAJR,OAIoBspC,MAAMpsC,IAJ1B88I,iBAOJD,SAAS/5I,MAAQ,IAAIgD,oBAAUymB,SAAUpZ,UAEtC0pI,SA0EeD,CAAiB1+C,KAAM/7D,QAAQ9xB,SAAU8xB,QAAQ3vB,OAAOsS,oBAC9EsV,SAAGtX,OAAH9T,MAAAorB,KAAA2iH,6BAAad,WAAbn5H,OAAAi6H,6BAA2Bf,aAAWzrI,QAAQ,SAACiqI,MAC3CA,KAAKhoI,KAAKgoI,KAAKt8C,OAAOt6D,EAAI+4G,cAAc/4G,EAAI+4G,cAAc1xI,GAAG06F,YAAYA,gBCzMpEt+E,kCACT+6E,YFPuB,OEQvBD,aAAc,cACdx7D,UAAW,GACXq2G,iBAAkB,sBAClBhB,WACI75C,aAAc,kBACdx7D,UAAW,GACX69D,MAAM,EACNvqD,MAAO,UACPkiG,cAAe,WAEnBF,WACI95C,aAAc,kBACdx7D,UAAW,GACX69D,MAAM,EACNv5F,GACIgvC,OAAQ,OAAQ,YAEpBrW,GACIqW,OAAQ,OAAQ,aAGxBgjG,kBAAmB,YACnB98C,aACIC,SACIj/F,KFvBgB,iBE0BxB+7I,oBAAqB,osBC9BzB,IAAAC,mBAAAC,iCAAAC,yBCLsB,UDOdp8I,MAAO,KACPijB,MACI+vD,aAAc,SAAAA,aAAC5/D,OAAQ8oG,WAAT,OACVnoC,eAAemoC,WAAanoC,kBAAmB3tD,kCAAgBhT,YAL/E+oI,iCAAAC,sBCFyB,YDYjBp8I,MAAO,KACPijB,MACIkwD,OAAQ,SAAAA,OAAA48B,UAAQ,OAAIgqC,wBAAiBhqC,cAZjDosC,iCAAAC,sBCEyB,aDcjBp8I,MAAO,OAhBfm8I,iCAAAC,sBCOsB,UDYdp8I,MAAO,OAnBfm8I,iCAAAC,sBCJoB,QD0BZp8I,MAAO,KACPijB,MACIgwD,UAAW,SAAAA,UAAA5zE,GAAC,OAAIA,aAAawF,qBAC7BsuE,OAAQ,SAAAA,OAAC5hE,KAAM2vB,SACX,GAAIA,QAAQC,OAAQ,CAChB,IAAMk7G,WAAan7G,QAAQm7G,aAC3Bn7G,QAAQm7G,cAARx6H,OAAAy6H,gCAAuBD,aAAY9qI,YAChC,CACH,IAAMgrI,QAAUr7G,QAAQ3vB,OACxBgrI,SAAWA,QAAQxjD,YAAY,eAC/B73D,QAAQm7G,YAAY9qI,YAhCxC4qI,iCAAAC,sBCG+B,mBDmCvBp8I,MAAO,KACPijB,MACIwvD,aAAa,KAxCzB2pE,8lBEOA,WAgBaI,qCAA0B,SAA1BA,wBAA2Bt7G,QAASywC,WAAV,OAAwB,WAC3D,IAAM30D,ON+L2B,SAAxBy/H,sBAAyBh8C,OAAQrD,WAAYs/C,eAAgB94H,cACtE,IAAIqrD,WA4BJ,OA3BAwxB,OAASA,OAAOjnF,OAAO,SAAAknF,OAAK,OAA8B,OAA1BA,MAAMi8C,mBAC/BrtI,QAAQ,SAACoxF,OACZ,IAAIk8C,gBACExpI,OAASstF,MAAMttF,SACfg9F,SAAWh9F,OAAOg9F,SAClBysC,YAAcn8C,MAAMi8C,gBACpB1gB,QAAUv7B,MAAMpjE,KAEF,OAAhBu/G,cAAmD,IAA3BzpI,OAAOq9F,kBAC/BmsC,aAAen9I,OAAOub,QAAQ6hI,aAC9B5tE,QAAU2tE,aAAarkI,OAAO,SAACukI,YAAa9/H,QACxC,IAAMs7G,aAAet7G,OAAO,GACtBlL,MAAQs+F,SAASkoB,cAAcxmH,MAC/Bs8F,UAAYsuC,eAAezgB,SAAS3D,cAC1C,GAAIA,gBAAgBl7B,WAAY,CAC5B,IAAM2/C,SAAQ,GAAAl7H,OAAMu7E,WAAWk7B,cAAclqB,YAC7C0uC,YAAYC,UAAYD,YAAYC,cACpCD,YAAYC,UAAY/tE,0BAAc8tE,YAAYC,UAAW//H,OAAO,IAChE4G,aAAa9R,OAAOkS,IAAIzH,QAAUqH,aAAa9R,OAAOkS,IAAIzH,QAClDqH,aAAa9R,OAAOkS,IAAIniB,WAEpCi7I,YAAYxkB,cAAgBt7G,OAAO,GAEvC,OAAO8/H,aACR7tE,YAGJA,QM5NQwtE,CAAsBv7G,QAAQu/D,SAAUv/D,QAAQ9xB,SAAU8xB,QAAQ87G,gBAC7E97G,QAAQ3vB,OAAOsS,mBACnBqd,QAAQ/xB,QAAQknH,OAAhB,GAAAx0G,OAA0BwvF,0BAAiB97C,sBAA3C,KAAA1zC,ODlBkB,SCkBlB,KAAAA,OAAoF8vD,WAAa30D,UAGxFs4D,6BAAc,SAAdA,YAAep0C,QAASywC,UAAWs/B,SAArB,QAEnBpvG,KAAM,4BACNm3B,OAAO,GAAAnX,OAAI8vD,UAAU+D,MAAd,KAAA7zD,ODrCO,WCsCdi0D,SAAU,SAAAA,SAAA38C,MAAgB,IAAZ/lB,OAAY6pI,+BAAA9jH,KAAA,MACtB/lB,QAAU8tB,QAAQ25D,WAAWznF,OAAOA,OAAO8rF,gBAI/Cr9F,KAAM,4BACNm3B,OAAO,GAAAnX,OAAI8vD,UAAU+D,MAAd,KAAA7zD,ODzCU,aC0CjBi0D,SAAU,SAAAA,SAAAzsD,OAAmB,IAAfwmF,UAAeotC,+BAAA5zH,MAAA,MACnB6zH,UAAYh8G,QAAQ9xB,SAC1B,GAAIygG,WAAaqtC,UAAW,EAnCf,SAAnBC,iBAAoBttC,UAAW3uE,SACjC,IAAMk8G,UAAYl8G,QAAQ6vE,WACpBssC,WAMN,IAAK,IAAM/8I,OALXuvG,UAAUvgG,QAAQ,SAACygG,SAAUhxG,GACzB,IAAMu+B,GAAE,GAAAzb,OAAMkuF,SAASC,KAAf,KAAAnuF,OAAuB9iB,GAC/Bs+I,QAAQ//G,KAAM,IAGA8/G,UACR98I,OAAO+8I,UACTD,UAAU98I,KAAKgP,QAAQ,SAAAoxF,OAAK,OAAIA,MAAM10D,kBAC/BoxG,UAAU98I,MAyBb68I,CAAiBttC,UAAW3uE,SAC5B,IAAM+7D,KAAO/7D,QAAQ+7D,OACrB,GAAIA,KAAKt6D,GAAKs6D,KAAKjzF,EAAG,CAClB,IAAMgvB,OAAQ,GAAAnX,OAAIwvF,0BAAiB17C,uBAArB,cAAA9zC,OAAwDovF,QAAQ2/B,SAAhE,QAAA/uH,OACPwvF,0BAAiB17C,uBADV,cAAA9zC,OAC6CovF,QAAQuoC,SADrD,MAERrqI,MAAQ+xB,QAAQ/xB,QAChBmuI,aACF3rE,UAAWA,UAAU+D,MACrBp1E,IAAK,oBAET6O,MAAM4pF,YAAYukD,aAClBnuI,MAAM+mH,uBAAuBl9F,MAAO,WAChCuiH,2BAA2Br6G,WAC5B,EAAOo8G,aAGdp8G,QAAQ0uE,SAASC,WACjB3uE,QAAQq8G,kBAAkBC,QACtBzsD,OAAQ7vD,QAAQu/D,SAChB73E,OAAQ,cACRkoE,WAAY,cAMxBjvF,KAAM,4BACNm3B,OAAO,GAAAnX,OAAI8vD,UAAU+D,MAAd,KAAA7zD,OD1EK,SC2EZi0D,SAAU,SAAAA,SAAA28C,OAAmB,IAAfhvG,UAAew5H,+BAAAxqB,MAAA,MACnBgrB,QAAUv8G,QAAQ+7D,OAClBoJ,aACAgH,oBAEN5tG,OAAOub,Q/Ou5CI,SAAjB0iI,eAAkBj6H,WACpB,IAAMk6H,kBAMN,OALAl+I,OAAOub,QAAQyI,UAAUrO,gBAAgBjD,gBAAgB7C,QAAQ,SAAAmjH,OAA2B,IAAAmrB,MAAApvE,eAAAikD,MAAA,GAAzBn5G,UAAyBskI,MAAA,GAAd/1C,SAAc+1C,MAAA,GACpF/1C,SAAStrF,YAAcnX,gCAAiBE,WACxCq4I,eAAerkI,WAAauuF,YAG7B81C,e+O95CgBD,CAAej6H,YAAYnU,QAAQ,SAAAuuI,OAA2B,IAAAC,MAAAb,+BAAAY,MAAA,GAAzBvkI,UAAyBwkI,MAAA,GAAdj2C,SAAci2C,MAAA,GACzEzwC,iBAAiB/zF,WAAauuF,SAASykC,iCAG3C7sI,OAAOub,QAAQkmB,QAAQ9xB,UAAUE,QAAQ,SAAAyuI,OAAqB,IAAAC,OAAAf,+BAAAc,MAAA,GAAnBl8I,KAAmBm8I,OAAA,GAAZlsI,MAAYmrI,+BAAAe,OAAA,SAC1D,GAAIlsI,MAAO,CACP,IAAMkmG,SAAW3K,iBAAgB,GAAAxrF,OAAI/P,QACjCkmG,WACA3R,UAAUxkG,MAAQm2G,SAClBylC,QAAQ57I,MAAMyN,QAAQ,SAAAonD,MAAI,OAAIA,KAAKn5C,QAAQy6F,gBAKvD92E,QAAQ+8G,kBAAoB5wC,iBAC5BnsE,QAAQw4G,WAAarzC,aAIzBxkG,KAAM,4BACNm3B,OAAO,GAAAnX,OAAI8vD,UAAU+D,MAAd,KAAA7zD,ODrGO,WCsGdi0D,SAAU,SAAAA,YJqDiB,SAAtBooE,oBAAuBh9G,SAChC,IAAMi9G,OAASj9G,QAAQ9tB,SACjB69F,QAAU/vE,QAAQ+vE,UAClB9hG,MAAQ+xB,QAAQ/xB,QAChBk3F,UAAYnlE,QAAQw4G,YACzBc,UAAWC,WAAWnrI,QAAQ,SAACzN,MAC5B,IAAImuG,KACA58F,OACAvR,OAAS24I,WACTxqC,KAAOy4B,qBACPr1H,OAAS+qI,OAAOnD,YAEhBhrC,KAAO04B,sBACPt1H,OAAS+qI,OAAOpD,WAEpB,IAAMpwI,YAAc+vI,mCAAwBx5G,QAAS9tB,OAAQvR,MAEvDqyE,IAAG,IAAAryD,OAAOhgB,KAAP,aACTq/B,QAAQgzC,KAtCe,SAAlBkqE,kBAAyE,IAAtD7tC,UAAsD3kG,UAAA1D,OAAA,QAAA4L,IAAAlI,UAAA,GAAAA,UAAA,MAAtCyyI,SAAsCzyI,UAAA1D,OAAA,EAAA0D,UAAA,QAAAkI,EAA5BnJ,YAA4BiB,UAAA1D,OAAA,EAAA0D,UAAA,QAAAkI,EAAfwqI,WAAe1yI,UAAA1D,OAAA,EAAA0D,UAAA,QAAAkI,EAC5ErF,OAUN,IAAK,IAAMnO,OATXqK,YAAY2E,QAAQ,SAAC0U,KACjB,IAAM1kB,KAAO0kB,IAAI8qB,WAAWxvC,KACxB42G,SAAW3F,UAAUjxG,MACpB42G,WACD3F,UAAUjxG,MAAQ42G,SAAWmoC,SAASr6H,MAE1Cs6H,WAAWpoC,SAAUlyF,IAAK1kB,MAC1BmP,IAAInP,MAAQ,IAEEixG,UACRjwG,OAAOmO,MACT8hG,UAAUjwG,KAAK0rC,gBACRukE,UAAUjwG,MAGzB,OAAOiwG,UAqBY6tC,CAAgBl9G,QAAQgzC,KAAM,WACzC,IAAMqlE,KAAOzQ,kBAAae,kBAAmB75B,YAE7C,OADAupC,KAAKt3I,aAAai/B,QAAQo4G,YACnBC,MACR5uI,YAAa,SAAC+1F,MAAO69C,UAAWj+I,KAC/B,IAAMwuC,WAAayvG,UAAUzvG,WACvBmrG,MAAQnR,kBAAaM,kBAAkBp5B,KAAMlhE,YAC7C2uG,QAAUc,UAAUthD,KAC1ByD,MAAMuQ,SACF4mB,aAAc5mB,QAAQ2/B,SACtB9Y,aAAc7mB,QAAQuoC,SACtB7nE,UAAS,GAAA9vD,OAAKovF,QAAQt/B,WAAb9vD,OAAyBhgB,MAAzBggB,OAAgCvhB,OAExC6O,MAAMA,OACNiE,OAAO6mI,OACPxmB,WACGptB,sBAEHpJ,KAAKwgD,WAEdv8G,QAAO,IAAArf,OAAKhgB,OAAUpC,OAAOskB,OAAOmd,QAAQgzC,QI1FxCgqE,CAAoBh9G,YAIxBr/B,KAAM,4BACNm3B,OAAO,GAAAnX,OAAI8vD,UAAU+D,MAAd,KAAA7zD,OD3GK,QC2GL,GAAAA,OACA8vD,UAAU+D,MADV,KAAA7zD,ODrGU,cCuGjBi0D,SAAU,SAAAA,SAAA0oE,OAAAC,QAAkC,IAA9Bh7H,UAA8Bw5H,+BAAAuB,OAAA,MAAfh+F,UAAey8F,+BAAAwB,OAAA,MACxC,GAAIh7H,UAAW,CACX,IAAMyoF,WNpEa,SAAtBwyC,oBAAuBl+F,UAAW/8B,WAC3C,IAAMyoF,cACN,IAAK,IAAM5rG,OAAOkgD,UACd,MAAO1/C,eAAe5B,KAAKshD,UAAWlgD,KAAM,CACxC,IAAMq+I,aAAen+F,UAAUlgD,KAC/B4rG,WAAW5rG,KAAOq+I,aAAal7H,WAIvC,OAAOyoF,WM2DwBwyC,CAAoBl+F,UAAW/8B,WAClDyd,QAAQ/xB,QAAQknH,OAAhB,GAAAx0G,OAA0B8vD,UAAU+D,MAApC,KAAA7zD,ODzGe,mBCyGuDqqF,gBAK9ErqG,KAAM,4BACNm3B,OAAO,GAAAnX,OAAI8vD,UAAU+D,MAAd,KAAA7zD,OD/GgB,mBC+GhB,GAAAA,OACA8vD,UAAU+D,MADV,KAAA7zD,OD3GO,WC6Gdi0D,SAAU,SAAAA,SAAA8oE,OAAAC,QAAqC,IAAjCjtC,gBAAiCqrC,+BAAA2B,OAAA,MAAZn+C,OAAYw8C,+BAAA4B,OAAA,MACrCC,kBAAoB59G,QAAQ87G,gBAC5B+B,QAAU79G,QAAQ+7D,OAClBx5E,UAAYyd,QAAQ3vB,OAC1B,GAAIqgG,iBAAmBnR,QAAUs+C,SAAWD,kBAAmB,CAC3D59G,QAAQq8G,kBAAkBC,QAASzsD,OAAQ0P,OAAQ73E,OAAQ,eAAgBkoE,WAAY,UACvF,IAAMnuE,MAAQue,QAAQ/xB,QAAQwT,MAC9B89E,OAAOnxF,QAAQ,SAAA0vI,KAAG,OAAIA,IAAIC,kBN8CR,SAArBC,mBAAsBz+C,OAAQvnF,GAAIimI,uBAC3C1+C,OAAOnxF,QAAQ,SAACoxF,OACZ,IAAM0+C,WAAa1+C,MAAMttF,SAAS6W,OAC5BxG,UAAY27H,sBAAsB9jI,SAAW8jI,WAAWlmI,IACzDimI,sBAAsBC,aAAelmI,GACtCwnF,MAAMnvF,SAAWkS,WACjBi9E,MAAMnvF,KAAKkS,aMnDPy7H,CAAmBz+C,OAAQh9E,UAAWmuF,iBACtCjvF,MAAMquH,OACNvwC,OAAOnxF,QAAQ,SAAC0vI,KACZA,IAAIK,eAAeriI,OAAOgiI,IAAIhjC,WAElCr5F,MAAMsuH,SACN/vG,QAAQo+G,qBNxHc,SAAzBC,uBAA0B9+C,OAAQ78E,cAC3C,IAAM47H,+BAoBN,IAAK,IAAMl/I,OAlBXmgG,OAAOnxF,QAAQ,SAACoxF,OAAU,IAAA++C,sBAOlB/+C,MAAMwyB,oBALN4B,WAFkB2qB,sBAElB3qB,WACAE,UAHkByqB,sBAGlBzqB,UACAD,WAJkB0qB,sBAIlB1qB,WAIEtmG,UARgBgxH,sBAKlBpiD,OALkBoiD,sBAMlBliD,QAE8B/jF,OAAO,SAAA1H,OAAK,OAAI8R,aAAa9R,QAAU8R,aAAa9R,OAAOkS,IAAIniB,OAC7F8D,yBAAUC,WACbkvH,WAAYE,UAAWD,YAAYzlH,QAAQ,SAACwC,OACwC,IAAA4tI,sBAA7E97H,aAAa9R,QAAU8R,aAAa9R,OAAOkS,IAAIniB,OAAS8D,yBAAUE,aACjE25I,4BAA4B1tI,SAAW0tI,4BAA4B1tI,YACpE4tI,sBAAAF,4BAA4B1tI,QAAOpF,KAAnCqB,MAAA2xI,sBAAAC,6BAA2ClxH,gBAKrC+wH,iCACP1+I,eAAe5B,KAAKsgJ,4BAA6Bl/I,OACpDk/I,4BAA4Bl/I,KAA5Bq/I,6BAAuC,IAAI5iI,IAAIyiI,4BAA4Bl/I,QAGnF,OAAOk/I,4BM8FoCD,CAAuB9+C,OAClDh9E,UAAUI,kBAAmBqd,QAAQ0+G,iBNiDvB,SAArBC,mBAAsB5iD,KAAMwD,OAAQi8C,gBAC7Cj8C,OAAOnxF,QAAQ,SAACoxF,OACZ,IAAMu7B,QAAUv7B,MAAMpjE,KAChBmgH,WAENrsE,eAAe6rB,KAAM,SAAC38F,KAClB,IAAMw/I,QAAUpD,eAAezgB,SAC3B6jB,SACA7iD,KAAK38F,OAASm9I,QAAQn9I,KAAO28F,KAAK38F,KAAKw/I,QAAQx/I,MAAQ,MAG/Db,OAAO6M,KAAKmxI,SAASv1I,QAAUw4F,MAAMzD,KAAKwgD,WM3DlCoC,CAAmBd,QAASt+C,OAAQq+C,mBACpC59G,QAAQq8G,kBAAkBC,QAASzsD,OAAQ0P,OAAQ73E,OAAQ,UAAWkoE,WAAY,wLCxI3F,IAAMmP,iBAAK8/C,qBAAAC,UNSa,oBMTbD,qBAAAC,ONUY,oBMVZD,qBAAAC,ONWU,kBMXVD,qBAAAC,ONYI,aMZJD,qBAAAC,ONaS,iBMbTD,qBAAAC,OAAA,mBAAAD,qBAAAC,OAAA,QAQVjvE,cACIpuC,KACA34B,QAVM+1I,qBAAAC,OAAA,aAAAD,qBAAAC,OAAA,cAAAD,qBAAAC,OAAA,eAAAD,qBAAAC,OAAA,YAAAD,qBAAAC,OAAA,aAAAD,qBAAAC,OAAA,yBAAAD,qBAAAC,OAAA,eAoBVjvE,aAAc,SAAAA,aAAArpE,KAAG,OAAIA,OApBXs4I,ykCCEX,IA8BM3qE,yBAAoB,SAApBA,kBAAqBwlB,UAC9B,IAAM35D,QAAU25D,SAAS35D,QACnB/xB,MAAQ+xB,QAAQ/xB,QAEtBA,MAAMiiG,2BAA0B,eAAAvvF,OAAgBqf,QAAQ+vE,UAAUt/B,UAAlC,KAAA9vD,OHrChB,SGqCwE,SAAC4B,WAGrF,GAFWA,UAAU,GAEb,CACJo3E,SAASolD,mBAAmBplD,SAAS35D,QAAQ3vB,OAAOoS,UAAUoJ,MAC9D8tE,SAAS5D,wBACT,IAAMipD,aAAerlD,SAAS35D,QAAQm7G,aAAa,GACnDxhD,SAASslD,0BAA0BD,iBAI3C/wI,MAAM+mH,wBAAuB,eAAAr0G,OAAgBqf,QAAQ+vE,UAAUt/B,UAAlC,KAAA9vD,OHhDb,SGgDqE,WAC5Eg5E,SAAS35D,QAAQ3I,SACGsiE,SAAS35D,QAAQm7G,aAAa,GACtCtjD,YAAY,iBAIjC73D,QAAQo4G,WAAWljB,UAAUF,wBAAwBjgE,aAAYE,eAC7D,SAAAh9B,MAAqBinH,8BAAAjnH,KAAA,QAhCY,SAA5BknH,0BAA6Bn/G,SACtC,IAAMk2D,kBAAoBl2D,QAAQ80D,mBAClCv2F,OAAOub,QAAQo8E,mBAAmB9nF,QAAQ,SAACqZ,OACvC,IAAM0uE,WAAa1uE,MAAM,GACzBuY,QAAQ82D,mBAARjqF,MAAAmzB,SAA2Bm2D,WAAW/3F,MAA/BuiB,OAAAy+H,kCAAwCjpD,WAAWnwE,YAE9Dga,QAAQ80D,sBA4BIqqD,CAA0BxlD,UA3CR,SAArB0lD,mBAAsBr/G,SAC/B,IAAMi2D,cAAgBj2D,QAAQ60D,eAC9B,IAAK,IAAMz1F,OAAO62F,cACVA,cAAc72F,KAAKmwB,wBACZyQ,QAAQ60D,eAAez1F,KAwC1BigJ,CAAmB1lD,ohBC1DnC,IAoCa2lD,kBACTC,MAAO,SAAAA,MAACvqC,SAAUwqC,mBAAoBn3H,YAClC,IAAMo3H,YAAcp3H,WAAWmH,QACzBxN,SAvCW,SAAnB09H,iBAAoB1qC,SAAUwqC,mBAAoBn3H,YACpD,IACM/F,QAAUk9H,mBAAmB,GAAG/8H,UAChCk9H,aAAet3H,WAAWmH,QAAQxN,SAClCsG,kBAAoBD,WAAWC,kBAC/BtX,OAASsR,QAAQtR,OACjBsoF,SAAW0b,SAAS3kG,OAAOsS,kBAC3BtS,KAAOiS,QAAQjS,KA0BrB,OAzB2B2kG,SAAS54E,OAAS/T,WAAWnB,SAGzCy4H,aAEuB,OAAtBr3H,kBAA8BtX,OAAOqG,OAAO,SAACC,IAAK9J,IAAKjG,OAC/D,IAAIV,MACE+J,MAAQpD,IAAIpP,KACZuoG,SAAWrN,SAAS1oF,OAEpBgvI,aADOj5C,WAAaA,SAAS7jF,IAAIzH,QAAUsrF,SAAS7jF,IAAIzH,QAAUsrF,SAAS7jF,IAAIniB,SACxDuD,gCAAiBC,YAE9C,OAAKwiG,UAOD9/F,MAHC+4I,YAGOvvI,KAAK9C,IAAI,SAAApP,GAAC,OAAIA,EAAEoJ,UAFf4B,KAAK2P,IAALjM,MAAA1D,KAAI02I,oCAAQxvI,KAAK9C,IAAI,SAAApP,GAAC,OAAIA,EAAEoJ,WAAU4B,KAAK6P,IAALnM,MAAA1D,KAAI02I,oCAAQxvI,KAAK9C,IAAI,SAAApP,GAAC,OAAIA,EAAEoJ,YAI/E+P,IAAI1G,OAAS/J,MACNyQ,KATIA,SAUN,KAQQooI,CAAiB1qC,SAAUwqC,mBAAoBn3H,YAC1DmH,QAAUjxB,OAAO4T,UAAWstI,aAElC,OADAjwH,QAAQxN,SAAWA,SACZwN,SAGXswH,UAAW,SAAAA,UAAC9qC,SAAUwqC,mBAAoBn3H,YACtC,IAAMo3H,YAAcp3H,WAAWmH,QACzBlH,kBAAoBD,WAAWC,kBAC/BhG,QAAUk9H,mBAAmB,GAAG/8H,UAClCzR,OAASsR,QAAQtR,OACfwe,QAAUjxB,OAAO4T,UAAWstI,aAClCzuI,OAASsR,QAAQtR,OACjB,IAAMX,KAAOiS,QAAQjS,KACfi7F,aAAet6F,OAAOzD,IAAI,SAAApP,GAAC,OAAIA,EAAEC,OAIvC,OAHAoxB,QAAQxN,UAAYsG,mBAAqBk3H,mBAAmB,GAAG30C,UAAY,MACtES,cADc3qF,OAAAk/H,oCACGxvI,OACtBmf,QAAQ87E,aAAehjF,kBAAoBA,kBAAkB6I,YAAY5jB,IAAI,SAAApP,GAAC,OAAIA,EAAEC,UAC7EoxB,wgBCzDf,IAyBauwH,gCAAkB,SAAlBA,gBAAmB/qC,SAAUttF,QAAwB,IAC1D0rE,gBAD0ClhF,OAAgBxH,UAAA1D,OAAA,QAAA4L,IAAAlI,UAAA,GAAAA,UAAA,MAExD8kB,QAAUtd,OAAOsd,QACjB2jE,aAAejhF,OAAOihF,aACtB6sD,oBAAsB9tI,OAAO+tI,kBAAkBv4H,YAC/Cu4H,kBAAoBD,oBAAoB9xI,WACxCsqB,OAASwnH,oBAAoBxnH,OAC7BxW,SAAWwN,QAAQxN,SACnBge,QAAUg1E,SAASh1E,QACnBzd,UAAYyd,QAAQm7G,aAAa,GACjCj0H,SAAW8Y,QAAQ5D,KACnB8jH,aAAelrC,SAAS7iB,cACxBuB,mBAAqBshB,SAASrgB,oBAC9BwrD,YAAchtD,aAAaN,YAAYpxE,MACvCiB,aAAeH,UAAUI,kBAC/B6M,QAAQ4wH,WAAal5H,SACrBsI,QAAQ9H,OAASA,OACjB8H,QAAQ6wH,aAAergH,QAAQsgH,cAC/B,IACMC,qBAD0BvrC,SAASzgB,yBACY7sE,SAAWA,OAE5D84H,cACa,OAAbx+H,SACAoxE,gBAAkB,KACXtgE,eAAe9Q,WACtBw+H,WAAajiJ,OAAO6M,KAAK4W,cACzBoxE,gBAAkB+sD,YAAcA,YAAYruH,QAAQ0uH,YAAc,OAElEA,WAAax+H,SAAS,GACtBoxE,gBAAkB+sD,YAAcA,YAAYruH,QAAQ0uH,YAAc,MAGtE,IAAMC,cAAgBzgH,QAAQygH,gBAC9B,GAAwB,OAApBrtD,iBAA4B6sD,kBAAkBj5I,OAAQ,CACtD,IAAMkH,OAASklF,gBAAgB3wE,UAAUzR,OAAOzD,IAAI,SAAApP,GAAC,OAAIA,EAAEC,OAC3Dg1F,gBA5DsB,SAAxBstD,sBAAyB1oI,GAAI3H,MAC/B,IAAMiS,QAAUtK,GAAGyK,UACbk+H,QAAUr+H,QAAQtR,OAClB4vI,MAAQt+H,QAAQjS,KAChB+Z,YACAy2H,QAAUxwI,KAAK,GAAG9C,IAAI,SAAApP,GAAC,OACzBC,KAAI,GAAAuiB,OAAKxiB,GACTwC,KAAM8D,yBAAUE,aAEdm8I,MAAQzwI,KAAK,GAanB,OAXAuwI,MAAMxyI,QAAQ,SAACjQ,GACX,IAAM0W,SACN8rI,QAAQvyI,QAAQ,SAACZ,IAAK3P,GAClBgX,MAAMrH,IAAIpP,MAAQD,EAAEN,KAExBgjJ,QAAQzyI,QAAQ,SAACZ,IAAK3P,GAClBgX,MAAMrH,IAAIpP,MAAQ0iJ,MAAMjjJ,KAE5BusB,SAAS5e,KAAKqJ,SAGX,IAAIlR,oBAAUymB,YAAdzJ,OAAAogI,kCAA4BJ,SAA5BI,kCAAwCF,WAsCzBH,CAAsBttD,gBAAiBqtD,eACzDD,WAAahoH,UAAM7X,OAAAogI,kCAAO7yI,QAAP6yI,kCAAkBd,oBAAqBA,kBAC1D7sD,gBAAkBA,gBAAgBthE,QAAQ0uH,YAG9C,IAAIr5H,6BAA8B,EAC9Bq5H,WAAWx5I,QAAUw5I,WAAWx9H,MAAM,SAAApS,OAAK,OAAI8R,aAAa9R,QAC5D8R,aAAa9R,OAAOkS,IAAIniB,OAAS8D,yBAAUC,YAC3CyiB,6BAA8B,GAGlC,IAAM65H,QAAUhhH,QAAQsgH,cACxB9wH,QAAQ9H,OAASA,OACjB,IAAMu5H,kBAAoBjsC,SAASjhB,SAASC,YAAYusD,sBAClDhxH,kBAAkB0xH,mBAAoBA,kBAAkB32H,YAAYusE,UAEpEhjF,SAAW,SAAXA,SAAY4T,MAAOy5H,iBACrB,IAAM1rD,QAAU9B,mBAAmBjsE,MAAMvV,OAAOwV,QAC1CmvE,SAAUpvE,MAAMvV,OAAO8uI,SACzBxrD,QAAQzyE,KAAK,SAAA5kB,GAAC,OAAI+hJ,aAAa/hJ,EAAEC,MAAQD,GAAGmsB,YAAYusE,YAC5D,OAAOpvE,MAAMvV,OAAO8uI,UAAYE,gBAAgBF,SAAWnqD,SAGzDsqD,gBAAkBnsC,SAASjhB,SAASC,YAAYtsE,QAChDmvE,UAAUsqD,iBAAkBA,gBAAgB72H,YAAYusE,UAC1DxuE,YACAmH,gBACA9H,cACA1F,SAAUoxE,gBACV7jE,gBAAiBsnE,QACjB1vE,wDACA65H,gBACA95H,SAAU2vE,QAAUmqD,QAAU95H,SAC9BrT,kBACAutI,QAAS,SAAAA,QAACC,SAAU1nD,UAAX,OAAyBjyE,SAAW64H,sBACzCc,SAAS7xH,QAAQ6wH,eAAiB1mD,SAAS35D,QAAQsgH,gBAG3D/9H,UAAUy0E,UAAU5D,gBAAiB/qE,YAAY,GAE7CX,SAAW64H,uBACXl4H,YACImH,gBACAtI,SAAUqI,gBAAkByxH,QAAU95H,SACtClF,SAAUoxE,gBACV7jE,gCACApI,wDACAO,OAAQ64H,qBACRS,gBACAl5H,cAAeJ,SAAW64H,qBAC1Ba,QAAS,SAAAA,QAACC,SAAU1nD,UAAX,OAAwB0nD,SAAS7xH,QAAQ6wH,eAAiB1mD,SAAS35D,QAAQsgH,eACpFzsI,mBAGJ0O,UAAUy0E,UAAU5D,gBAAiB/qE,YAAY,GAC7CuH,sBAAuB,SAAAA,sBAAChI,UAAW05H,SAAZ,OAAwB15H,UAAUo5H,UAAYM,QAAQN,qlDC3GpEO,0CACjB,SAAAA,eAAwB,IAAAj3C,iBAAAvwF,iKAAAynI,CAAAl8I,KAAAi8I,cAAA,QAAAp1E,KAAAzhE,UAAA1D,OAARgf,OAAQ,IAAA7X,MAAAg+D,MAAAC,KAAA,EAAAA,KAAAD,KAAAC,OAARpmD,OAAQomD,MAAA1hE,UAAA0hE,MAAA,OACpBryD,kLAAA0nI,CAAAn8I,MAAAglG,iBAAAo3C,wBAAAH,eAAAvjJ,KAAA6O,MAAAy9F,kBAAAhlG,MAAAqb,OAASqF,UACTmuD,yBAAkBwtE,8DAAA5nI,SAFEA,gYADcy5E,qTAM3B8C,UAAW9mE,QAAS2jE,aAAchB,aACzC4tD,gCAAgBz6I,KAAMgxF,WAClB9mE,gBACA2jE,0BACAhB,wBACA8tD,kBAAmB36I,KAAK8uF,+FAINjC,YAAa3iE,QAAS1I,gBAC5C,IAAMkZ,QAAU16B,KAAK06B,QACf4hH,OAAS5hH,QAAQ5D,KACjBylH,UAAY7hH,QAAQsgH,cACpBwB,wBAA0Bh7H,eAAe24H,aAAe34H,eAAe24H,YAAYY,aACnF0B,aAAej7H,eAAe24H,aAAe34H,eAAe24H,YAAYW,WACxE4B,kBAAoB18I,KAAK+uF,mBACzB4tD,oBAAsB38I,KAAK6sF,cAC3B+vD,gBAAiBH,cAAeA,eAAiBH,OAEjDtqD,sBAAwB9nE,QAAQ2iE,cAClCqD,QAAShmE,QAAQ2iE,YACjBuD,YAAalmE,QAAQ9H,UACpByqE,YAoBL,OAnBAmF,sBAAsBlpF,QAAQ,SAACjQ,GAC3B,IAAIgkJ,cAAgBhkJ,EAAEq3F,QACtB2sD,cAAgBA,cAAc7pI,OAAO,SAACgC,IAElC,GADgB2nI,oBAAoB3nI,GAAGlc,MAAQkc,IAAIgQ,YAAYusE,YACb,IAAnC/vE,eAAeyI,gBAC1B,OAAO,EAEX,IAAK2yH,gBAAuC,OAArB1yH,QAAQxN,SAAmB,CAC9C,IAAMogI,kBAAoBJ,kBAAkB1nI,GAAGlc,MAAQkc,IACvD,OAAO8nI,mBAAoBA,kBAAkBt7H,eAAe24H,YAAaz/G,SAE7E,OAAI8hH,0BAA4BD,YAAaK,iBACb,IAArB5nI,GAAGwN,gBAKlB3pB,EAAEq3F,QAAU2sD,gBAET7qD,4FAGaN,WACpB,OAAqB,IAAdA,kFAGe,IAAA/8E,OAAA3U,KACtB,OAAO,SAAC+K,KAAM6B,QACV,IAAIsoF,sBAAuB,EACvBjrE,iBAAkB,EAChBkwH,YAAcvtI,OAAOsd,QACrBlH,kBAAoBpW,OAAOoW,kBAC3B+5H,UAAYnwI,OAAOkvI,QACnB15H,OAASxV,OAAOwV,OAChB46H,UAAYhD,iBAAiB53H,SAAW43H,iBAAiBQ,UAE/D,GAAIx3H,kBAAmB,CACnB,IAAM5F,aAAe4F,kBAAkB3F,kBACjC4/H,uBAAyBhkJ,OAAO6M,KAAKsX,cACrC89H,WAAajiJ,OAAO6M,KAAKiF,KAAK,GAAGsS,mBAClCpkB,OAAOskB,OAAOH,cAAcK,KAAK,SAAA5kB,GAAC,OAAIA,EAAE2kB,IAAIniB,OAAS8D,yBAAUC,YAChE81F,qBAAuB+nD,uBAAuBx/H,KAAK,SAAA5kB,GAAC,OAA+B,IAA3BqiJ,WAAWj1I,QAAQpN,MAInF,IAAMqxB,QAAU8yH,UAAUroI,OAAK+lB,QAAS3vB,KAAM6B,QACxCswI,iBAAmBvoI,OAAKu6E,kBACxB3gF,SAAW2uI,iBAAiB96H,SAAW86H,iBAAiB,KAC1DpB,SAAU,EAUd,GARIvtI,WACAutI,QAAUvtI,SAAS4rI,gBAAmBxlI,OAAK+lB,UAG3CqiH,YACAjB,QAAUiB,UAAUnwI,OAAQ+H,UAAqB,IAAZmnI,SAGrCA,QAAS,CACT,IAAM5rD,QAAUv7E,OAAK06E,oBAAoBjtE,QACnCu6H,oBAAsBhoI,OAAKk4E,cACjC5iE,gBAAkBrd,OAAO8uI,QACrBxrD,QAAQzyE,KAAK,SAAA5kB,GAAC,OAAI8jJ,oBAAoB9jJ,EAAEC,MAAQD,GAAGmsB,YAAYusE,YAAa3kF,OAAOqd,gBAEvF,IAAMzI,gBACFkwE,WAAW,EACX3mF,UACAovI,wBACAn3H,oCACAjB,YAAY,EACZmzE,0CACAtzE,SAAUhV,OAAO+U,oBACjBsI,gBAAiBrd,OAAOqd,iBAG5BtV,OAAK46E,eAAentE,SAChB8H,gBACA1I,8BACAyI,iCAEJtV,OAAK+9E,kBAAkBtwE,OAAQ8H,QAAS1I,oFAK9B4uE,YAClB,IAAMrlF,KAAO/K,KAAK06B,QAAQ3vB,OAI1B,OAHIA,MACA/K,KAAKy5I,mBAAmB1uI,KAAKoS,UAAUoJ,KAAM6pE,YAE1CpwF,2EAOP,OAHIA,KAAK06B,QAAQ3vB,QACboyI,aAAAf,wBAAAH,aAAA5hJ,WAAA,wBAAA2F,MAAAtH,KAAAsH,MAEGA,6CAKP,OADAA,KAAK06B,QAAQm7G,aAAa,GAAGtjD,YAAY,eAClCvyF,uuDClGf,IAYqBo9I,kCAQjB,SAAAA,WAAa1yC,SAAUjvG,cAAc,IAAAgZ,MAAAzU,+JAAAq9I,CAAAr9I,KAAAo9I,YACjCp9I,KAAKgkF,IAAM15E,cACXtK,KAAKu2G,cAAgB96G,aACrBuE,KAAK8yI,YACDljB,UAAW,IAAItkD,mBAAJgyE,8BACN7tF,aAAYE,eAAgB,IAEjC9xB,WAAYpiC,aAAaoiC,WACzB0/G,iBAAkB9hJ,aAAa8hJ,kBAEnCv9I,KAAK+zI,iBAAmB,KACxB/zI,KAAK8zI,iBAAmB,IAAIttD,QAAQ,SAACn+D,SACjC5T,MAAKs/H,iBAAmB1rH,UAE5BwrH,oBAAoB7zI,MACpBA,KAAK8yI,WAAWljB,UAAUF,wBAAwBjgE,aAAYE,eAAgB,WAC1El7C,MAAKs/H,mBACLt/H,MAAKsiI,kBAAkBC,QAASzsD,OAAQ91E,MAAKwlF,SAAU73E,OAAQ,QAASkoE,WAAY,YAGxFtqF,KAAK+2I,kBAAoBt7I,aAAa8hJ,iBACtCv9I,KAAKuqG,cACLvqG,KAAKw9I,uBACLx9I,KAAKy9I,uBACLz9I,KAAKg1I,cACLh1I,KAAKi1I,cACLj1I,KAAK09I,oBACL19I,KAAKw2I,mBACLx2I,KAAK29I,0BACLrb,kBAAaG,iBAAiB/3B,SAASpB,eACvCz8B,sBAAsB7sE,KAAMy5F,iBAC5Bz5F,KAAK0qG,SAASA,UACd1qG,KAAK61I,6SAiBL,GAAIzwI,UAAO1D,OAAQ,CACf1B,KAAK6wH,OAALzrH,UAAA1D,QAAA,OAAA4L,EAAAlI,UAAA,GACA,IAAMqlG,QAAUzqG,KAAKyqG,UACrBzqG,KAAK2I,QAAQuqB,OAAb,GAAA7X,OAAuBwvF,0BAAiB77C,sBAAxCsuF,8BAAA,GAAAjiI,OACQovF,QAAQt/B,WAAc,OAE9B,IAAM2lD,QAAO,GAAAz1G,OAAMwvF,0BAAiB77C,qBAAvB,KAAA3zC,OAA+CovF,QAAQt/B,WAgBpE,OAfAU,wBAAW7rE,KAAM49I,kBAAc59I,KAAK2I,QAAQwT,OACxCgvD,UAAW2lD,UAEfjiD,+BAAkB7uE,KAAM8uE,8BACpBI,MAAO4hD,QACPM,OAAQvmB,0BAAiB97C,wBAEzBq7E,SAAU3/B,QAAQ2/B,SAClB4I,SAAUvoC,QAAQuoC,WAEtBhzI,KAAKq0F,SAAS,IAAI4nD,sBAAaj8I,MAC3B2uF,SAAUyE,gBACV1E,YAAakE,4BACb/C,uBAAwBuC,oBACzBvF,6BAAauB,0CACTpuF,KAEX,OAAOA,KAAK6wH,mDAyBZ,OAAIzrH,UAAS1D,QACT1B,KAAK69I,UAALz4I,UAAA1D,QAAA,OAAA4L,EAAAlI,UAAA,GACOpF,MAEJA,KAAK69I,0CAUZ,OAAO79I,KAAKgkF,kDAKZ,OADAhkF,KAAK6wH,OAAO10G,MAAMquH,OACXxqI,uDAKP,OADAA,KAAK6wH,OAAO10G,MAAMsuH,SACXzqI,iEAIP,OAAIoF,UAAO1D,OACA1B,KAEJA,KAAKy3I,wDAQR1gH,WACJ,IAAMnqB,OAAS5M,KAAK4M,SACZsyB,UAA8DtyB,OAA9DsyB,UAAWw7D,aAAmD9tF,OAAnD8tF,aAAc+6C,oBAAqC7oI,OAArC6oI,oBAAqB96C,YAAgB/tF,OAAhB+tF,YAChDmI,mBAAqB14B,sBAAsBswB,aAAc16F,KAAK82B,KAAMlqB,OAAO+tF,aAC3E9gE,MAAQ75B,KAAK65B,QACbC,OAAS95B,KAAK85B,SACd86F,mBAAqB9tC,6BAAc/vD,WAAWgB,MAAM,WAAY,YAEtE/3B,KAAK89I,SAAW92D,YAAY4tC,mBAAoB,OAAQ,MAAO11F,WAC9CnH,MAAM,QADP,GAAA1c,OACmBwe,MADnB,OAC8B9B,MAAM,SADpC,GAAA1c,OACiDye,OADjD,OAGhB,IAAMhL,KAAO9uB,KAAK89I,SAAShvH,OAC3Bg5D,wBAASh5D,MACL+K,YACAC,cACAikH,MAAOj7C,mBAAmB//F,KAAK,OVJP,SAAvBi7I,qBAAwBtjH,QAAS3D,WAC1C,IACM4jE,YADSjgE,QAAQ9tB,SACI+tF,YACrB45C,UAAY75G,QAAQs6G,WACpBR,UAAY95G,QAAQu6G,WAEpBgJ,oBAAsBj3D,YAAYjwD,UAAW,KAAM,GAAlB,GAAA1b,OAAyBs/E,YAAzB,KAAAt/E,ODrNV,wBCsN3Bk5H,UAAD,GAAAl5H,OAAes/E,YAAf,KAAAt/E,ODxNuC,gBCyN/Bm5H,UAAD,GAAAn5H,OAAes/E,YAAf,KAAAt/E,ODxNgC,gBCwN+BvS,QAAQ,SAACqZ,OAAU,IAAA+7H,OAAAC,yBACxCh8H,MADwC,GACvE4nF,UADuEm0C,OAAA,GAC5DE,iBAD4DF,OAAA,GAExE5pH,WAAa0yD,YAAYi3D,oBAAqB,KAAM,GAA5B,IAAA5iI,OAAoC+iI,mBAC5Dl/G,UAAS,GAAA7jB,OAAM+iI,iBAAN,UACfp3D,YAAY1yD,WAAY,IAAKy1E,UAAlB,IAAA1uF,OAAiC6jB,YACxCvL,OAAQ,SAAAA,OAACsqB,MAAOyxD,UACZA,SAASud,WAAYptB,UAAWnlE,QAAQw4G,aAAcnhH,MAAMksB,MAAMnvB,aURlFkvH,CAAqBh+I,KAAM8uB,MZmCP,SAAfuvH,aAAgB3jH,QAAS3D,UAAWkjE,OAAQiE,aACrDxjE,QAAQq8G,kBAAkBC,QAASzsD,OAAQ0P,OAAQ73E,OAAQ,aAAckoE,WAAY,UACrF,IACMqQ,YADSjgE,QAAQ9tB,SACI+tF,YACrB2jD,cAAgB5jH,QAAQu/D,SAAS1pF,KAAK,SAAC5V,EAAGyI,GAAJ,OAAUzI,EAAEiS,SAASqZ,MAAQ7iB,EAAEwJ,SAASqZ,QAC9Es4H,iBAAmBv3D,YAAYjwD,UAAW,KAAM,GAAlB,GAAA1b,OAAyBs/E,YAAzB,iBAC9B6jD,cAAgBh0E,mBAAmB9vC,QAAQ+jH,gBAC3CjlE,UACNwN,YAAYu3D,iBAAkB,IAAKD,cAAe,MAC9C3qH,OAAQ,SAAAA,OAACsqB,MAAOi8C,OACZ1gB,OAAO0gB,MAAMw2B,UACTzyE,YACAi8C,gBAIKskD,cAAcv2I,IAAI,SAAAnP,MAAI,OAAI0gF,OAAO1gF,QACzCgQ,QAAQ,SAAC9P,GACd,IAAMkhG,MAAQlhG,EAAEkhG,MACVj8C,MAAQjlD,EAAEilD,MAChBi8C,MAAMgE,YAAYA,aAClBhE,MAAM+yB,WACFptB,UAAWnlE,QAAQw4G,cAEG,IAA1Bh5C,MAAMttF,SAASw2F,QAAoBlJ,MAAMnoE,MAAMksB,MAAMnvB,UY1DrDuvH,CAAar+I,KAAM8uB,KAAM9uB,KAAKi6F,UAC1BpgE,YACAC,gBAEJ95B,KAAK0+I,iBZyGwB,SAAxBC,sBAAyB5nH,UAAWmI,WAAZ,OAA0B8nD,YAAYjwD,UAAW,KAAM,GAAImI,WAAWpQ,OYzG3E6vH,CAAsB7vH,KAAD,GAAAzT,OAAUs/E,YAAV,KAAAt/E,OAAyBo6H,sBACtE,IAAMphD,SAAWr0F,KAAKq0F,WAEtB,OJ7NuB,SAAlBuqD,gBAAmB/xD,YAAawH,UACzC,IAAK,IAAMv6F,OAAO+yF,iBACPvyF,eAAe5B,KAAKm0F,YAAa/yF,OACpC+yF,YAAY/yF,eAAgBugG,+BAAuBxN,YAAY/yF,KAAKihG,eAAe,WAE/E,OADgB1G,SAAS35D,QACV29D,sBAEnBxL,YAAY/yF,KAAK4/F,YAAYrF,SAAS35D,QAAQg/D,gBIqNlDklD,CAAgBvqD,SAASxH,cAAewH,UACjCr0F,yCAIP,OAAOA,KAAK8zI,uEAaZ,OADA9zI,KAAK26B,QAAS,EACP36B,yDAaP,OAFAA,KAAK26B,QAAS,EACd36B,KAAK61I,YAAY71I,KAAK61I,aAAa,KAC5B71I,mEAwBP,IAAM6+I,QAAU7+I,KAAK89I,UAAY99I,KAAK89I,SAAShvH,OACzC+K,MAAQ75B,KAAK65B,QACbC,OAAS95B,KAAK85B,SAHHglH,sBAIU9+I,KAAK++I,qBAAxB58C,GAJS28C,sBAIT38C,GAAIp6E,WAJK+2H,sBAIL/2H,WACZ,OACIs6E,cAAeriG,KAAK+xB,QACpB6mE,aAAcimD,QACdhlH,YACAC,cACA0gE,gBAAiBx6F,KAAK0+I,iBACtB1mH,gBAAiBmqE,GACjBqE,0BAA2Bz+E,WAC3B+/E,QAAS,EACT0H,QAAS,iDAUb,OACIvV,OAAQj6F,KAAKi6F,SAAShyF,IAAI,SAAAiyF,OAAK,OAAIA,MAAMtuE,cACzChf,OAAQ5M,KAAK4M,SACb6pF,KAAMz2F,KAAKy2F,OAAOxuF,IAAI,SAAAioD,MAAI,OAAIA,KAAKtkC,qDAKvC,OAAIxmB,UAAM1D,QACN1B,KAAK+hG,OAAL38F,UAAA1D,QAAA,OAAA4L,EAAAlI,UAAA,GACApF,KAAKojG,OAALh+F,UAAA1D,QAAA,OAAA4L,EAAAlI,UAAA,IACApF,KAAKq0F,WAAW/B,yBACTtyF,MAEJA,KAAK+hG,iDAyBNi9C,iBAAiB,IAAAt2E,MAAA7lD,MAAAlO,OAAA3U,KACjBi/I,iBAAmB1L,wBAAiBjgH,QAAQ0rH,kBAE5CpI,UAAY52I,KAAKuqG,WACjBssC,WACAluI,OACFsxF,UACAilD,YACIznI,KAAMzX,OAGVm/I,WAAa,EACbC,YAAa12E,UAAGrtD,OAAH9T,MAAAmhE,MAAA22E,8BAAapmJ,OAAOskB,OAAOvd,KAAKuqG,cAAa7oG,OACxD+oG,QAAUzqG,KAAKyqG,UACfj4E,MAAQxyB,KAAK09I,iBACbzjD,OAASglD,iBAAiB1uI,KAAK,SAAC5V,EAAGyI,GAAJ,OAAUzI,EAAEsrB,MAAQ7iB,EAAE6iB,QAAOlU,OAAO,SAACutI,UAAW/1C,UAAa,IAAAg2C,WACxFj3G,WAAaihE,SAAS/rF,IACtBgiI,OAASl3G,WAAWxvC,KACpB2mJ,OAASnsH,QAAQgV,YACjBwsC,cACN2qE,OAAO32I,QAAQ,SAAC0U,KACZA,IAAIyI,MAAQsjF,SAAStjF,MAAQk5H,WAC7B,IAAMh0E,UAAS,GAAA9vD,OAAMovF,QAAQt/B,WAAd9vD,OAA0B+jI,YACpCxI,UAAU4I,UACXJ,cACmC,IAA/B92G,WAAW2hE,kBACXz3E,MAAK,GAAAnX,OAAIwvF,0BAAiB37C,uBAArB,KAAA7zC,OPlWP,SOkWO,KAAAA,OAAyD8vD,aAAe,IAGrF2J,WAAW5uE,KAAKilE,aAEpBg0E,YAAcM,OAAO/9I,OACrB,IAAMqoG,UAAY6oC,uBAAgBj+H,OAAM2zB,WAAYsuG,UAAU4I,QAAS1qE,YACvEnsE,MAAMsxF,OAAShhG,OAAO4T,OAAOlE,MAAMsxF,OAAQ8P,WAC3C,IAAM21C,eAAiBzmJ,OAAOskB,OAAOwsF,WAIrC,OAHAu1C,WAAYC,WAAAD,WAAUjkI,OAAV9T,MAAAg4I,WAAAF,8BAAoBK,iBAChC9I,UAAU4I,QAAUE,eACpB7I,QAAQ2I,QAAUA,OACXF,eAGX32I,MAAM8O,KAAOzX,KACb,IAAM2/I,aACAL,WAAYz8H,UAAGxH,OAAH9T,MAAAsb,MAAAw8H,8BAAapmJ,OAAOskB,OAAOvd,KAAKuqG,cAElD+0C,UAAUx2I,QAAQ,SAACoxF,OACf,IAAMw2B,MAAQx2B,MAAMw2B,QACpB/nH,MAAMsxF,OAAOy2B,OAASx2B,MACtBylD,UAAUjvB,YAEdz2B,OAAOnxF,QAAQ,SAACoxF,OACZ,IAAMo5C,OAASH,yBAAyBj5C,MAAOvxF,OAC/Cg3I,UAAUzlD,MAAMw2B,SAAW4iB,SAG/BtzI,KAAKy+I,eAAiBkB,UACtB3/I,KAAKw2I,gBAAkBv9I,OAAO4T,OAAO7M,KAAKw2I,gBZrMjB,SAApBoJ,kBAAqB3lD,OAAQrxF,QACtC,IAAMstI,kBAgBN,OAfAj8C,OAAOnxF,QAAQ,SAACoxF,OAAU,IAAA2lD,cACK3lD,MAAMttF,SAAzBsjD,KADc2vF,cACd3vF,KAAM05C,SADQi2C,cACRj2C,SACR9yE,GAAKojE,MAAMpjE,MAChB,IAAK,KAAKhuB,QAAQ,SAACzN,MAChB,IAAI4G,MACEqJ,MAAQi/D,aAAac,WAAWnb,KAAM70D,MAAOuuG,SAASvuG,OAASuuG,SAASvuG,MAAMiQ,OAEhFrJ,MADA2G,OAAOvN,MACCuN,OAAOvN,MAAMkqB,UAAU,SAAAsiF,WAAS,OAA+C,IAA3CA,UAAU/Q,aAAa7wF,QAAQqF,SAEnE,GAEX4qI,eAAep/G,MAAQo/G,eAAep/G,QACvCo/G,eAAep/G,IAAIz7B,MAAQ4G,UAG5Bi0I,eYoLwD0J,CAAkB3lD,OAAQj6F,KAAK4I,WAC1F,IAAMk3I,WAAa9/I,KAAK2I,QAYxB,OAVAm3I,WAAWvtD,aACPz4F,IAAK,0BACLqxE,UAAS,GAAA9vD,OAAKwvF,0BAAiB77C,qBAAtB,KAAA3zC,OAA8CovF,QAAQt/B,aAEnE20E,WAAWl1C,0BAA0B3xG,OAAO6M,KAAK0sB,OAAQwjH,qCAAwBh2I,KAAMyqG,QAAQt/B,YAC3F,GACIrxE,IAAK,0BACLqxE,UAAS,GAAA9vD,OAAKwvF,0BAAiB77C,qBAAtB,KAAA3zC,OAA8CovF,QAAQt/B,aAEvEnrE,KAAKi6F,OAAOqlD,WACLrlD,+CAUP,IAAMsjD,iBAAmBv9I,KAAKu2G,cAAcgnC,iBAY5C,OAXAA,iBAAiBvG,QAASzsD,OAAQvqF,KAAMoiB,OAAQ,eAAgBkoE,WAAY,SAC5EtqF,KAAK2I,QAAQ4pF,aACTpnB,UAAS,GAAA9vD,OAAKwvF,0BAAiB77C,qBAAtB,KAAA3zC,OAA8Crb,KAAKyqG,UAAUt/B,aAE1E2b,6BAAc9mF,KAAK+xB,SAASyT,SAC5BxlC,KAAKq0F,WAAW7uD,SAEhB+3G,iBAAiBvG,QAASzsD,OAAQvqF,KAAKi6F,SAAU73E,OAAQ,eAAgBkoE,WAAY,UACrFtqF,KAAKi6F,SAASnxF,QAAQ,SAAAoxF,OAAK,OAAIA,MAAM10D,WACrC+3G,iBAAiBvG,QAASzsD,OAAQvqF,KAAKi6F,SAAU73E,OAAQ,UAAWkoE,WAAY,UAChFizD,iBAAiBvG,QAASzsD,OAAQvqF,KAAMoiB,OAAQ,UAAWkoE,WAAY,SAChEtqF,qFAUkBshB,YAAa5nB,KAAMqmJ,aAC5C,GAAoB,OAAhBz+H,YACA,OAAO,KAEX,IAAMrE,UAAY8iI,aAAe//I,KAAK+K,OACtC,OAAOyjE,yCAA4BvxD,UAAWqE,YAAa5nB,oDAY3D,OADAsG,KAAK+K,KAAK/K,KAAK61I,aAAa,IACrB71I,2DAUP,OACI4/F,oBAAqB5/F,KAAK84I,qBAC1BlwI,OAAQ5I,KAAK4I,SACbmC,KAAM/K,KAAK+K,OACX0rF,KAAMz2F,KAAKy2F,sFAUU,IAAA+Q,aACaxnG,KAAK4M,SAAnC+tF,YADiB6M,aACjB7M,YAAaD,aADI8M,aACJ9M,aACrB,OAAO,IAAAr/E,OAAKs/E,YAAL,KAAAt/E,OAAoBq/E,uEAYdr/F,MAEb,OADeq4I,YAAY1zI,KAAKi6F,SAAU,OAAQ5+F,4DAatCvC,MAEZ,OADe46I,YAAY1zI,KAAKi6F,SAAU,OAAQnhG,MACpC,2DA2BDqjC,EAAG34B,EAAGoJ,QACnB,IAAIqlH,UACAn7F,GAAI,MAEFkpH,SZvQ4B,SAA7BC,2BAA8BvlH,QAAS+F,UAChD,IAAM73B,OAAS8xB,QAAQ9xB,SACvB,IAAKA,OAAOuzB,EAAEz6B,SAAWkH,OAAOpF,EAAE9B,OAC9B,OAAO,KAEX,IAAMqJ,KAAO2vB,QAAQ3vB,OACf0rF,KAAO/7D,QAAQ+7D,OACfr5E,aAAerS,KAAKsS,kBACpBw5E,OAASxrB,WAAWziE,OAAQ,IAAK,GAAGkuF,aAAa,GACjDC,OAAS1rB,WAAWziE,OAAQ,IAAK,GAAGkuF,aAAa,GACjDE,WAAa55E,aAAay5E,QAAQr5E,IAAIzH,QACtCkhF,WAAa75E,aAAa25E,QAAQv5E,IAAIzH,QAEtCmqI,WAAa,IAAKlpD,WAAYH,SAAU,IAAKI,WAAYF,SAAS3sE,KAAK,SAAAjI,OAAK,OAC9EA,MAAM,KAAOvjB,gCAAiBC,aAAesjB,MAAM,KAAOvjB,gCAAiBE,WAE/E,IAAKohJ,UAAalpD,aAAe/3F,8BAAeC,YAAc+3F,aAAeh4F,8BAAeC,WACxF,OAAO,KAEX,IAAMoM,MAAQ40I,SAAS,GACjBj+I,MAAQmb,aAAa9R,OAAOrJ,MAC9BnI,IAAM28F,KAAKypD,SAAS,IAAI,GAAGn4G,OAAOtH,SAASy/G,SAAS,KACxD,GAAIA,SAAS,KAAOthJ,gCAAiBE,SAAU,CAC3C,IAAMorE,WAAaivE,6BAAI,IAAI5iI,IAAIxL,KAAKoS,UAAUpS,KAAK9C,IAAI,SAAApP,GAAC,OAAIA,EAAEoJ,WAC9DnI,IAAMmwE,gBAAgBC,WAAYpwE,KAGtC,YAAewT,IAARxT,MAAsBwR,QAASxR,MAAQ,KY4OzBmmJ,CAA2BjgJ,MACxCm8B,IACA34B,MAGJ,GAAiB,OAAbw8I,UAAqBpzI,OAAOmsF,aAAc,CAC1Ck5B,SAASn7F,GAAKkpH,SACd,IAAMG,SAAWngJ,KAAKogJ,qBAAqBjkH,EAAG34B,EAAGoJ,QAEjD,OADAqlH,SAASv2E,OAASykG,UAAYA,SAASrpH,GAAKqpH,SAASrpH,GAAKm7F,SAASn7F,GAC5Dm7F,SAGX,IAAMouB,QAAUrgJ,KAAKogJ,qBAAqBjkH,EAAG34B,EAAGoJ,UAAakqB,GAAI,MAIjE,OAHAm7F,SAAWh5H,OAAO4T,UAAWwzI,UAEpB3kG,OAAS2kG,QAAQvpH,GACnBm7F,2EAGW91F,EAAG34B,EAAGwD,MAMxB,IALA,IAAMizF,OAASj6F,KAAKi6F,SACdxxF,IAAMwxF,OAAOv4F,OACfk1D,MAAQ,KAGHr+D,EAAI,EAAGA,EAAIkQ,IAAKlQ,IAAK,CAC1B,IAAM2hG,MAAQD,OAAO1hG,GAKrB,IAH2B,IADZ2hG,MAAMttF,SACVutF,cACPvjC,MAAQsjC,MAAMpB,gBAAgB38D,EAAG34B,EAAGwD,OAEpC4vD,MACA,OAAOA,MAGf,OAAOA,wFAsDmBt1C,aAA0B,IAAb1U,OAAaxH,UAAA1D,OAAA,QAAA4L,IAAAlI,UAAA,GAAAA,UAAA,MAChDouE,UACA8sE,kBAAoBh/H,YACxB,GAAoB,OAAhBA,YACA,SAEJ,IAAM24E,OAASj6F,KAAKi6F,SACdxxF,IAAMwxF,OAAOv4F,OACf8rB,eAAelM,eACfg/H,mBAAqBrnJ,OAAO6M,KAAKwb,cACjCg/H,qBAAiBjlI,OAAAgkI,8BAAOiB,mBAAPjB,8BrPksBN,SAAjBkB,eAAiBlwI,KAAG,OAAIA,IAAI,GAAGpI,IAAI,SAACmmE,IAAK71E,GAAN,OAAY8X,IAAIpI,IAAI,SAAA8S,KAAG,OAAIA,IAAIxiB,OqPlsBdgoJ,CAAetnJ,OAAOskB,OAAO+D,iBAE/E,IAAK,IAAI/oB,EAAI,EAAGA,EAAIkQ,IAAKlQ,IAAK,CAC1B,IAAM2hG,MAAQD,OAAO1hG,IACc,IAA/B2hG,MAAMttF,SAASutF,cACf3mB,UAAMn4D,OAAAgkI,8BAAO7rE,QAAP6rE,8BAAkBnlD,MAAMsmD,yBAAyBF,kBAAmB1zI,WAGlF,OAAO4mE,mEAWQ16E,MAEf,OADA86I,eAAe,OAAQ96I,MAChBkH,mEAWS3E,MAEhB,OADAu4I,eAAe,OAAQv4I,MAChB2E,uDAlkBP,MAxDY,mDA4DZ,QAEQwW,WAEJonI,2DAyCkB,QAAA/2E,KAAAzhE,UAAA1D,OAARgf,OAAQ,IAAA7X,MAAAg+D,MAAAC,KAAA,EAAAA,KAAAD,KAAAC,OAARpmD,OAAQomD,MAAA1hE,UAAA0hE,MACtB,OAAA25E,sBAAWzgJ,KAAQ0gB,mkCC1I3B,IAAMggI,cAAgB,SAAhBA,cAAiBC,SAAD,OAA4BA,QAA5Bv7I,UAAA1D,OAAA,QAAA4L,IAAAlI,UAAA,GAAAA,UAAA,OAA8C6C,IAAI,SAAAW,QAAM,OAAIA,OAAOmJ,OAAO,SAACC,IAAKnZ,GAElG,OADAmZ,OAAGqJ,OAAAulI,+BAAO5uI,KAAP4uI,+BAAe/nJ,EAAEi+F,uBAYlB+pD,wBAA0B,SAA1BA,wBAA2B5a,UAAW9+G,WAAYo4E,aAAxB,OAC5B0mC,UAAUnoH,OAAO,SAAAlV,QAAM,OAAIue,WAAWzJ,MAAM,SAACpS,MAAOo7B,GAAR,OAAc99B,OAAO0C,OAAO9R,QAAU+lG,YAAY74D,QAS5Fo6G,gCAAqB,SAArBA,mBAAsBC,SAAUrmH,SAAiC,IAAxBsL,MAAwB5gC,UAAA1D,OAAA,QAAA4L,IAAAlI,UAAA,GAAAA,UAAA,GAAhB,EAAGlE,IAAakE,UAAA1D,OAAA,QAAA4L,IAAAlI,UAAA,GAAAA,UAAA,MAE/DsmI,OAGAhxG,QAHAgxG,OACAzuH,UAEAyd,QAFAzd,UACA+mG,aACAtpF,QADAspF,aAIJ,GAAI0nB,OAAO1lG,MAAQ,GAAI,CACnB,IAAM16B,MAAQogI,OAAO1lG,OACrBg+E,aAAal7G,QAAQ,SAACtP,OAClB,IAAMwnJ,MAAQ/jI,UAAUa,OAAO,SAAAlV,QAAM,OAAIA,OAAO0C,OAAO9R,QAAUA,QAC3DynJ,sBAAwBrU,sBAAsBoU,MAAOtV,OAAO1lG,MAAQ,IAO1E86G,mBAAmBC,UALfrV,cACAzuH,UAAW+jI,MACXh9B,aAAci9B,uBAGuBj7G,MAAQ,KAA/B3qB,OAAAulI,+BAAsC1/I,MAAK1H,gBAGjEwqH,aAAal7G,QAAQ,SAACtP,OAClBunJ,SAAS76I,QAATmV,OAAAulI,+BAAkB1/I,MAAK1H,YAW7B0nJ,YAAc,SAAdA,YAAejb,UAAWgE,aAAgB,IAExCkX,qBAGAlX,YAHAkX,qBACAC,eAEAnX,YAFAmX,eACAC,oBACApX,YADAoX,oBAGJ,OAAID,eAAe1/I,OAAS,EACjB0/I,eAAen5I,IAAI,SAACq5I,eAAkB,IAAAC,gBAAAC,2BACGd,cAAcY,cAAeH,sBADhC,GAClCM,eADkCF,gBAAA,GAClBG,kBADkBH,gBAAA,GAEzC,OAAOtb,UAAUz5G,WAAVnR,OAAAulI,+BAAsBa,gBAAtBb,+BAAyCc,mBAAzCd,+BAA+DS,0BAGtEpb,YASN0b,aAAe,SAAfA,aAAgBjnH,QAASknH,kBAAqB,IAAAC,iBAC5CniF,SAEAnlB,OAIA7f,QAJA6f,OACA0rF,UAGAvrG,QAHAurG,UACA6b,UAEApnH,QAFAonH,UACAr1B,UACA/xF,QADA+xF,UAIA20B,eAGA30B,UAHA20B,eACAW,eAEAt1B,UAFAs1B,eACAV,oBACA50B,UADA40B,oBAGAjX,SAEA0X,UAFA1X,SACAC,YACAyX,UADAzX,YAEE2X,QAAUZ,eAAgBhX,SAAYgX,eAAe1/I,YAIvDqgJ,eAAergJ,OAAS,EACxBg+D,MAAQqiF,eAAe95I,IAAI,SAACq5I,cAAeW,SAAY,IAAAC,gBAAAV,2BACJd,cAAcY,cAAeU,SADzB,GAC5CN,kBAD4CQ,gBAAA,GACzBC,kBADyBD,gBAAA,GAE7CE,YAAcnc,UAAUz5G,WAAVnR,OAAAulI,+BAAsBc,mBAAtBd,+BAA4CuB,mBAA5CvB,+BAAkES,uBAChFpX,aAAgBC,UAAW8X,QAAS7X,aAAcmX,eAClDr7C,SAAYmkC,kBAAUC,YAAaA,YAAc0X,eAAergJ,OAASugJ,SAE/E,OAAOL,iBAAiBQ,aAAenY,wBAAahkC,iBAAW67C,aAMnEpiF,OAASkiF,iBAAiB3b,WAAagE,aAHjBC,UAAW8X,QAAS7X,iBAGUlkC,SAFlCmkC,kBAAUC,0BAEmCyX,YAGnEvnG,OAAO6vF,UAAY7vF,OAAO6vF,eAC1ByX,iBAAAtnG,OAAO6vF,WAAUlkI,KAAjBqB,MAAAs6I,iBAAAjB,+BAAyBlhF,kjCCxG7B,IAoBa2iF,8BAAmB,SAAnBA,iBAAoB3nH,QAASurG,UAAWxZ,UAAWif,QAAW,IAEnEzB,YAEAxd,UAFAwd,YACAhkC,QACAwmB,UADAxmB,QAGAikC,UAEAD,YAFAC,UACAC,aACAF,YADAE,aAGCC,SAEDnkC,QAFCmkC,SACAC,YACDpkC,QADCokC,YAGDiY,eAMA5nH,QANA4nH,eACMC,SAKN7nH,QALAimC,KACAhxC,SAIA+K,QAJA/K,SACA/iB,OAGA8tB,QAHA9tB,OACAmkI,QAEAr2G,QAFAq2G,QACAtxC,aACA/kE,QADA+kE,aAEEhJ,KAAO9mE,SAAS8mE,OAChBwyC,UAAYt5G,SAASs5G,YACrBuZ,aAAe7yH,SAAS6yH,eACxB5yC,aAAejgF,SAASl0B,eAAe68B,WACvCmqH,eAAiB9yH,SAAS8yH,iBAC1BC,aAAe/yH,SAAS+yH,eACxBC,mBAAqBhzH,SAASgzH,qBAEhC1S,aAEAhH,UAFAgH,aACAC,YACAjH,UADAiH,YAEE0S,eAAiB7R,QAAQ8R,gBAAiB1Y,0BAAcD,qBAAaoY,oBACrEzZ,cAAiBj8H,cAAQgjG,0BAAcnZ,UAAMwyC,qBAEnDxc,UAAUq2B,kBAAoBJ,aAAa95I,OAC3C6jH,UAAUs2B,eAAiBN,eAAe75I,OAE1C,IAAMmgI,UAAYgI,QAAQ76B,WAAW2yB,aAAcpc,UAAW/xF,SAE9D8nH,aAAapY,UAAYoY,aAAapY,UAAYoY,aAAapY,aAC/DoY,aAAapY,UAAUC,aAAeuY,eAGtC,IAAMI,YhBTgB,SAAbC,WAAcxuB,MAAOyuB,UAAR,cAAA7nI,OAA6Bo5G,MAA7B,KAAAp5G,OAAsC6nI,UgBSxCD,CAAW7Y,SAAUC,aACnCzhI,QACFpF,EAAG0mI,UACH/tG,EAAGguG,cAGDgZ,cAAY9nI,OAAA+nI,+BACV1X,OAAO2X,UAAU,IADPD,+BACc1X,OAAO4X,UAAU,QAD/BjoI,OAAA+nI,+BAEV1X,OAAO2X,UAAU,IAFPD,+BAEc1X,OAAO4X,UAAU,MAE3CC,SAAYrT,YAAY1+H,IAAIwxI,aAAgC9S,YAAY92I,IAAI4pJ,aAAjC,IAAIT,SAarD,OAXAgB,SAASx4I,KAAKk7H,WACGxvC,KAAKsyC,WACLngI,OAAOA,QACPoxC,UAAU2oG,oBACVljD,aAAaA,cACb07C,cAAcgI,WAC/BlT,aAAax+H,IAAIuxI,YAAaO,UAC9BrT,YAAYr7H,OAAOmuI,aAnFH,SAAdQ,YAAe7zH,SAAU+7G,OAAQ6X,WAClCtf,IAAKD,KAAKl7H,QAAQ,SAACwC,OAChB,IAAMo0D,MAAQ/vC,SAAQ,GAAAtU,OAAI/P,MAAJ,YAChBm4I,SAAW/X,OAAM,GAAArwH,OAAI/P,MAAJ,WAAmB,GAAGvI,QAE5C28D,MAAM+jF,YAAc/jF,MAAM+jF,cAC3B/jF,MAAM+jF,UAAUv9I,KAAKq9I,UACrB5zH,SAAQ,GAAAtU,OAAI/P,MAAJ,UAAkBo0D,SA8E9B8jF,CAAY7zH,SAAU+7G,OAAQ6X,UAEvBtT,aAAa72I,IAAI4pJ,cAatBU,6BAAkB,SAAlBA,gBAAmB5yF,UAAW2lC,KAAMmR,UAAWloC,OAA7B,OACpB+N,6BAAgB3c,UAAW,SAAAZ,MAAI,OAAIA,MAAMumC,KAAM,SAACzsF,KAAMzR,GAAP,OAAaA,EAAIyR,KAAK+H,OAAO,SAACtX,EAAGT,GAE5E,OAAOS,GADIT,EAAE88B,GAAK8wE,YAEnB,MAAK3/F,IAAI,SAACioD,MACT,GAAIA,MAAQA,KAAK03C,WAAY,CACzB,IAAM+7C,SAAWzzF,KAAK03C,WADGg8C,iBAEKD,SAAS/2I,SAA/Bg3F,YAFiBggD,iBAEjBhgD,YAAa7G,KAFI6mD,iBAEJ7mD,KAErB,OAAO,IAAIr9B,MAAMmkF,UAAWpgI,OAAOkgI,UAAU/2I,QACzCqlG,SAAUrO,cAAgBkJ,iCAAgBL,MAAQ7I,cAAgBkJ,iCAAgBN,IAClFzP,YAGR,OAAO,IAAIr9B,MAAMokF,WAAYl3I,QAASmwF,MAAM,OAoE9CgnD,iCAAsB,SAAtBA,oBAAuBrpH,QAASspH,aAActkF,MAAOkwC,cAAiB,IAEpE1/C,KAIAx1B,QAJAw1B,KACApqD,KAGA40B,QAHA50B,KACAzK,KAEAq/B,QAFAr/B,KACAgxI,MACA3xG,QADA2xG,MAEEV,QAAUz7E,KAAKxuD,OAASoE,KAAKpE,OAC7BuiJ,cAAgBn+I,KAAKpE,OAASwuD,KAAKjoD,IAAI,SAACpP,EAAGN,GAAJ,OAAUuN,KAAKjC,KAAK8M,MAAMpY,EAAIozI,eAE3E,OAAOl+D,6BAAgBu2E,aAAY,GAAA3oI,OAAIhgB,KAAJ,YAAoB,SAAA6oJ,QAAM,OAAIA,QAAQD,cACrE,SAACC,OAAQ3rJ,GAAT,SAAA8iB,OAAkB6oI,OAAOnhJ,KAAK,KAA9B,KAAAsY,OAAsC9iB,KACzB0P,IAAI,SAAAi8I,QAAM,OAxBP,SAAlBC,gBAAmBrzF,UAAW93C,QAAS0mD,MAAOkwC,cAA5B,OAA6CniC,6BAAgB3c,UACjF,SAAAh/C,OAAK,OAAI,IAAI4tD,MAAM2wE,aAAezgC,4BAAgBnsF,OAAO3R,QAAQkH,QAAS,SAAClf,IAAKvB,GAAN,OAAYuB,IAAMvB,IAuB7D4rJ,CAAgB,KAAMD,OAAQxkF,MAAOkwC,cACnC3nG,IAAI,SAAC04D,KAAMj6B,EAAGnuC,GAAV,OAAgBooE,KAAKl9C,OAAOygI,OAAO3rJ,IAAIqU,OAAOy/H,YAajF+X,kCAAuB,SAAvBA,qBAAwB1pH,QAASglC,MAAOkwC,cAC1C,IAAIo0C,aAEA3S,SAOA32G,QAPA22G,SACAzoI,OAMA8xB,QANA9xB,OACAy7I,qBAKA3pH,QALA2pH,qBACAvzF,UAIAp2B,QAJAo2B,UACAu7E,MAGA3xG,QAHA2xG,MACAiY,SAEA5pH,QAFA4pH,SACA30H,SACA+K,QADA/K,SAGAnV,KAEA5R,OAFA4R,KACAjB,QACA3Q,OADA2Q,QAGAgrI,aACAlT,SADAkT,aAGAnD,eAEAiD,qBAFAjD,eACAW,eACAsC,qBADAtC,eAGAyC,QAEAD,aAFAC,QACAC,WACAF,aADAE,WAEEC,aAAeJ,SAASrT,cAAcpJ,UACtC8c,eAAiBL,SAASrT,cAAcnJ,YAE9Ckc,aAAelzF,eAEd,MAAOlT,EAAG35C,GAAG6E,QAAQ,SAAConD,MACnB,IAAM83E,SAAW93E,OAAStS,EAAI8mG,aAAatpI,OAASspI,aAAa3pI,IACjEipI,aApHkB,SAApBY,kBAAqBlqH,QAASmqH,OAAQnlF,OAAU,IAK9ColF,WAFApqH,QADA22G,SAGAyT,WAGJ,OAAO,SAACzpJ,KAAM2sI,UACV,IAAMvxC,KAAOquD,WAAU,GAAAzpI,OAAIhgB,OAE3B,GAAIo7F,MAAQA,KAAK/0F,OACb,GAAIrG,OAASuiD,GAAKviD,OAAS4I,EAAG,CAC1B,IAAMkjB,WAAa9rB,OAAS4I,EAAI6/H,KAAOC,SAEtCQ,QAASC,WAAW17H,QAAQ,SAAC8+D,UAAW3lE,OACrC,IAAM8iJ,WAAU,GAAA1pI,OAAM8L,YAAN9L,OAAmBusD,WAC/BggC,UAAY3lG,MACZ+iJ,YAAcvuD,KACduxC,WAAat7B,iB9BRf,W8BQwBs7B,WACtBpgC,UAAY,EAAIA,WAEfv8B,WAAWorB,KAAM,EAAGmR,aACrBo9C,gBAEJH,OAAOE,YAAcrB,6BAAgBmB,OAAOE,YAAaC,YAAap9C,UAAWloC,cAGrFmlF,OAAOI,YAAcvB,6BAAgBmB,OAAOK,SAAUzuD,KAAKxuF,IAAI,sBAAW,EAAGy3D,OAC7EmlF,OAAOM,eAAiBzB,6BAAgBmB,OAAOO,SAAU3uD,KAAK,GAAI,EAAG/2B,OAG7E,OAAOmlF,QAoFQD,CAAkBlqH,QAASspH,aAActkF,MAAzCklF,CAAgD10F,KAAM83E,YAjCd,IAAAqd,cAyCvDrB,aAJAiB,YArCuDI,cAqCvDJ,YACAK,cAtCuDD,cAsCvDC,cACAH,eAvCuDE,cAuCvDF,eACAI,iBAxCuDF,cAwCvDE,iBAGEld,QAAU4c,aAAeA,YAAYO,aAAa9jJ,OAASujJ,YAAYO,aACxEF,eAAiBA,cAAcE,aAAa9jJ,OAAS4jJ,cAAcE,gBAClEhd,QAAU2c,gBAAkBA,eAAeK,aAAa9jJ,OAASyjJ,eAAeK,aACjFD,kBAAoBA,iBAAiBC,aAAa9jJ,OAAS6jJ,iBAAiBC,gBA6CjF,QA1CMnqJ,KAAMoxG,eAAMg5C,QAASjrI,KAAK,GAAI01C,KAAMm4E,QAASI,WAAYkc,eAAe5pI,MACxE1f,KAAMqxG,gBAAO+4C,QAASjrI,KAAK,GAAI01C,KAAMm4E,QAASI,WAAYkc,eAAe5pI,MACzE1f,K9B/HS,M8B+HEoqJ,QAASlsI,QAAQ,GAAI22C,KAAMs4E,QAASC,WAAYkc,eAAevpI,SAC1E/f,K9B5HY,S8B4HEoqJ,QAASlsI,QAAQ,GAAI22C,KAAMs4E,QAASC,WAAYkc,eAAevpI,SAGtEtS,QAAQ,SAAC8D,OAAQ3K,OAC1B,IAAI6D,KACApE,OAEArG,KAIAuR,OAJAvR,KACAoqJ,QAGA74I,OAHA64I,QACAv1F,KAEAtjD,OAFAsjD,KACAu4E,WACA77H,OADA67H,WAWJ,GARIxmI,MAAQ,GACR6D,KAAO0+I,QACP9iJ,OAAS0/I,eAAe1/I,OAAS,EAAI0/I,eAAe1/I,OAAS,IAE7DoE,KAAO2+I,WACP/iJ,OAASqgJ,eAAergJ,OAAS,EAAIqgJ,eAAergJ,OAAS,GAEjEoE,KAAOA,KAAKmC,IAAI,SAAAoI,KAAG,OAAIA,IAAIpI,IAAI,SAAA/G,KAAG,OAAIyuB,SAAS+pE,aAAT/pE,CAAuBzuB,SACzDukJ,QAAQ/jJ,QAAU+mI,aAAeptI,MAAQ60D,MAAQpqD,KAAKpE,OAAQ,CAC9D,IAAMgkJ,UAAax1F,UAAMxuD,cAAQrG,WAC7B2d,WACA/W,MAAQ,GACRyjJ,SAAS5/I,KAAOA,KAChB4/I,SAASrZ,MAAQA,MAAM7xH,KACvBxB,QAAU+qI,iCAAoB2B,SAAU1B,aAActkF,MAAOkwC,gBAE7D81C,SAASrZ,MAAQA,MAAM9yH,QACvBmsI,SAAS5/I,KAAOA,KAAK,GAAGmC,IAAI,SAACnO,IAAKvB,GAAN,OAAYuN,KAAKmC,IAAI,SAAAxN,GAAC,OAAIA,EAAElC,OAExDygB,QAAU+qI,iCAAoB2B,SAAU1B,aAActkF,MAAOkwC,eAEjEo0C,aAAY,GAAA3oI,OAAIhgB,KAAJ,YAAqB2d,aAEjCgrI,aAAY,GAAA3oI,OAAIhgB,KAAJ,YAAqB,OAGlC2oJ,cAqIE2B,6BAAkB,SAAlBA,gBAAmBjrH,QAAS9tB,QAAW,IAE5C+iB,SAIA+K,QAJA/K,SACAs2G,UAGAvrG,QAHAurG,UACA2f,kBAEAlrH,QAFAkrH,kBACAtB,SACA5pH,QADA4pH,SAGIuB,aAGAj5I,OAHAi5I,aACA/0F,UAEAlkD,OAFAkkD,UACA9W,UACAptC,OADAotC,UAEFpyB,QAAUi+H,aAAaC,YACTl2C,aAAiBjgF,SAASl0B,eAAtC68B,WACF07D,SAAWiyC,UAAU5oH,kBACrB2vH,YAAcr9G,SAASq9G,cACvBtiC,SAAW/6E,SAAS+6E,WACVq4C,eAAmBpzH,SAAS8yH,iBAApC75I,OACQk6I,kBAAsBnzH,SAAS+yH,eAAvC95I,OACFm9I,eAAiBp2H,SAAS0xH,oBAAoBz0I,OAAQogI,aACtDqX,qBAAuB10H,SAAS9K,eAChCmhI,iBAGFlD,oCACAC,8BACAsB,0CACApqD,OAAQ+yC,YACRh5C,kBACA+xD,8BACAzB,kBACAjY,MAAOwZ,aAAaxZ,UACpBrE,SAAU6d,aAAa7d,aACvBl3E,oBACAnhC,mBAEE+vC,OACF6iF,SAAU5yH,SAASs2H,WAAWv7C,SAAS63C,UACvCsB,SAAUl0H,SAASs2H,WAAWv7C,SAASm5C,UACvCC,UAAWn0H,SAASs2H,WAAWv7C,SAASo5C,WACxCzT,SAAU1gH,SAASs2H,WAAWv7C,SAAS2lC,WAErC6V,eAAiBxW,gCAAoBqT,gBACrCoD,kBAAoBzW,gCAAoBoT,mBAE9CnzH,SAASy2H,aACTz2H,SAAS02H,aACT12H,SAASgzH,mBAAmB3oG,eAG5BrqB,SAAS22H,kBAlDuC,IAuD1CC,aACFrW,YAFAvgH,SAASs5G,YADTgH,aAIAA,aAAc,IAAI7+H,KAGtBue,SAASs5G,UAAUsd,aAEnB,IAAMC,kBACF55I,OAAQi5I,aACRvD,eAAgBgC,SAASrT,cAAcwV,qBAAqB92H,SAASq9G,eACrEr9G,kBACAgxC,KAAMjB,MAAM6iF,SACZxR,QAASuT,SAASrT,cAClBsV,wBACA9mD,aAAc7yF,OAAO2sE,QAEnBn8D,aAAe6oH,UAAU5oH,kBAC3BqvH,aAAezG,UACnB,IAAKr+G,QAAQm2E,SAAU,CACnB,IACM1+E,UhBrGe,SAAhBqnI,cAAiBrC,qBAAsBsC,aAAgB,IAAAvP,MAC1DxuI,OAAS3P,OAAOskB,OAAO8mI,sBAAsBp8I,IAAI,SAACoI,KAAQ,IAAAi7G,MAAAW,MACtD26B,cAAet7B,UAAGjwG,OAAH9T,MAAA+jH,MAAAqkB,8BAAat/H,MAClC,OAAO47G,UAAG5wG,OAAH9T,MAAA0kH,MAAA0jB,8BAAaiX,aAAa3+I,IAAI,SAACqD,OAClC,OAAIA,iBAAiBu5H,kBACVv5H,MAAMwrF,aAEVxrF,YAGf,OAAO8rI,UAAG/7H,OAAH9T,MAAA6vI,MAAAzH,8BAAa/mI,QAAbyS,OAAAs0H,8BAAwBgX,egB2FTD,CAAcrC,qBhB7GG,SAA9BwC,4BAA+BC,oBAAqB1pI,cAAiB,IAAAyF,MAC1Eja,UACEilI,YAAciZ,oBAAoB7+I,IAAI,SAAA8jE,MAAI,OAAKA,KAAK69B,eAG1D,OADAhhG,QADAA,UAAMyS,OAAAs0H,8BAAO/mI,UAAQia,UAAGxH,OAAH9T,MAAAsb,MAAA8sH,8BAAa9B,YAAY5lI,IAAI,SAAAkrH,KAAG,OAAIl6H,OAAOskB,OAAO41G,KAAKlrH,IAAI,SAAApP,GAAC,OAAIA,EAAEyS,eACvE0H,OAAO,SAAA1H,OAAK,OAAI8R,aAAa9R,QAAU8R,aAAa9R,OAAOkS,IAAIniB,OAAS8D,yBAAUE,YgBwG/EwnJ,CAA4BL,iBAAiBlE,eAAgBrc,UAAU5oH,oBAGhF0K,WAAa1I,UAAUrM,OAAO,SAAA1H,OAAK,OACrC8R,aAAa9R,QAAU8R,aAAa9R,OAAOkS,IAAIniB,OAAS8D,yBAAUE,YAChE0nJ,eAAiBn/H,QAAQK,SACzB68E,aAAe7rG,OAAO6M,KAAKmgI,UAAUr3H,gBAAgBrD,cACrDy7I,cAAgBjzE,4CAA8BxsE,WAA9B,GAA+B0+H,WAA/B5qH,OAAA+nI,+BAA6Ct+C,gBAC7DmiD,eAAiB15E,eAAey5E,cAAeD,gBAErDra,aAAezG,UAAUr+G,QAAQG,WAAWrmB,OAASqmB,YAAc,IAAKk/H,gBAAgBz6H,QAAQnN,WAIpG,IAEM6nI,gBDtZoB,SAAjBC,eAAkBlqI,UAAWonI,qBAAsBzC,kBAC5D,IAAIwF,iBACE5C,WACAC,cACAtD,wBACA5mG,UACAunG,aAEAr1B,UAAYxzH,OAAO4T,UAAWw3I,sBAEhChB,UAGA52B,UAHA42B,UACAC,UAEA72B,UAFA62B,UAUJ,GARI72B,UADAs1B,eAGWj5I,QAAQ,SAACu+I,SACpBlG,qBAAqBj7I,KAArBqB,MAAA45I,qBAAoBP,+BAASyG,YAEjC56B,UAAU00B,qBAAuBA,qBAG7BkC,UAAU3hJ,OAAS,EAAG,CAEtB,IAAM4J,MAAQ+3I,UAAU,GAAG/gJ,WACrBglJ,kBAAoB1a,sBAAsB3vH,UAAW3R,OAG3Dw1I,gCAAmB0D,SAAW9Y,OAAQ2X,UAAWpmI,oBAAW+mG,aAAcsjC,oBAG1E9C,QAAQ17I,QAAQ,SAAC5H,KAAQ,IAAAqmJ,eAEdC,mBAFchG,2BAEQd,cAAc2C,WAFtB,MAGfoE,kBAAoB5G,wBAAwB5jI,UAAWuqI,mBAAoBtmJ,KAG3EwmJ,uBAAyBxG,YAAYuG,kBAAmBh7B,YAC9D86B,eAAAH,eAAclhJ,KAAdqB,MAAAggJ,eAAA3G,+BAAsB8G,yBAEtBA,uBAAuB5+I,QAAQ,WAC3Bg5I,UAAU57I,MAAMm9I,UAAWniJ,cAGhC,KAAAymJ,iBAEHA,gBAAAP,eAAclhJ,KAAdqB,MAAAogJ,gBAAA/G,+BAAsBM,YAAYjkI,UAAWwvG,aAOjD,GAHA26B,cAAgBA,cAAc1lJ,OAAS,EAAI0lJ,mBAGvC9D,UAAU5hJ,OAAS,EAAG,CACtB,IAAMkmJ,cAAgBtE,UAAUr7I,IAAI,SAAApP,GAAC,SAAAwiB,OAAOxiB,KAEtCyS,OAAQs8I,cAAc,GACtBC,qBAAuBjb,sBAAsB3vH,UAAW3R,QAG9Dw1I,gCAAmB2D,YACf/Y,OAAQkc,cACR3qI,oBACA+mG,aAAc6jC,uBAGlBT,cAAct+I,QAAQ,SAACg/I,IAAKC,QACxBjG,UAAUiG,QAAUjG,UAAUiG,iBAC9BtD,WAAW37I,QAAQ,SAAC5H,IAAK8mJ,QACrBztG,OAAOwtG,QAAUxtG,OAAOwtG,YAGxB,IAAM9hB,UAAY6hB,eAAezpJ,oBAAYypJ,IAAM7qI,UAG7CwqI,kBAAoB5G,wBAAwB5a,UAAW2hB,cAAe1mJ,KACtEw5B,SACF6f,cACA0rF,UAAWwhB,kBACX3F,WACIuB,UAAWvB,UAAUiG,QACrBzE,WAAYA,UAAWpiJ,KACvBkpI,SAAU2d,OACV1d,YAAa2d,QAEjBv7B,qBAEJk1B,aAAajnH,QAASknH,2BAK9BwF,cAAct+I,QAAQ,SAACg/I,IAAKC,QACxBjG,UAAUiG,QAAUjG,UAAUiG,iBAC9B,IAAMrtH,SACF6f,cACA0rF,UAAW6hB,KAAO7qI,UAClB6kI,WACIuB,UAAWvB,UAAUiG,QACrBzE,kBACAlZ,SAAU2d,OACV1d,YAAa,GAEjB5d,qBAGJk1B,aAAajnH,QAASknH,oBAK9B,IAAMqG,kBAAoBxD,WAAW/iJ,OAAS,EAAI+iJ,WAAW,GAAGx8I,IAAI,SAACmmE,IAAK71E,GAAN,OACpDksJ,WAAWx8I,IAAI,SAAA8S,KAAG,OAAIA,IAAIxiB,OAAOksJ,WAEjD,OAASlqG,cAAQiqG,gBAASC,WAAYwD,mBCqSdd,CAAeza,aAAc2X,qBAFjC10H,SAASu4H,kBAAkB1B,mBAI/C72H,SAASs5G,YAAYiH,YAAYpnI,QAAQ,SAACq/I,aACtCA,YAAY3iH,WAEhB7V,SAASs5G,YAAYiH,YAAYzqG,QACjC9V,SAAS8hH,YAAYyV,gBAAgB3sG,QAhGW,IAAA6tG,mBhB1OnB,SAApBC,kBAAqBpf,UAAWxyC,MACzC,IAAI6zC,MAAQ,KACRC,MAAQ,KAERwF,SAEA9G,UAFA8G,SACAC,SACA/G,UADA+G,SAGGsY,SAEH7xD,KAFAt6D,EACGosH,SACH9xD,KADAjzF,EAeJ,OAZA8kJ,UAAYA,SAASx/I,QAAQ,SAAC0/I,QAC1B,IAAM9xD,MAAQq5C,SAAS32I,IAAIovJ,SAC3Ble,MAAQA,WACFpkI,KAAKwwF,SAGf6xD,UAAYA,SAASz/I,QAAQ,SAAC0/I,QAC1B,IAAM7xD,MAAQq5C,SAAS52I,IAAIovJ,SAC3Bje,MAAQA,WACFrkI,KAAKywF,UAIX2zC,YAAOC,agBmTc8d,CAAkB14H,SAASs5G,YAAat5G,SAAS8mE,QAAlE6zC,MAlGwC8d,mBAkGxC9d,MAAOC,MAlGiC6d,mBAkGjC7d,MAEf56G,SAAS8mE,MACLt6D,EAAGmuG,MACH9mI,EAAG+mI,QAEP,IAAM5hI,MAAQgnB,SAAShnB,SAEtB2hI,MAAOC,OAAOzhI,QAAQ,SAACqiI,QAAS9vI,MAC7B,IAAM2wE,eACNm/D,QAAUA,aACFriI,QAAQ,SAAC2tF,KAAMvkF,KACnBukF,KAAK3tF,QAAQ,SAAConD,KAAM03C,WAChB57B,WAAU,GAAA3wD,OAAInJ,KAAJmJ,OAAUusF,YAAe,SAG3Cj/F,MAAMuqB,OAAN,GAAA7X,OAAgBwvF,0BAAiB17C,uBAAjC,YAAA9zC,OAAkEhgB,KAAO,IAAM,KAAO2wE,cAE1Fr8C,SAAS84H,YAAY7C,kBAAmBh5I,QAExC,IAtHgD87I,kBAzHpB,SAAnBC,iBAAoBjuH,QAAS22G,SAAU3xE,MAAOkwC,cAAiB,IAEpE3U,WAUCvgE,QAVDugE,WACAD,UASCtgE,QATDsgE,UACAqpD,qBAQC3pH,QARD2pH,qBACAtB,eAOCroH,QAPDqoH,eACAD,kBAMCpoH,QANDooH,kBACAhyF,UAKCp2B,QALDo2B,UACAk3E,SAICttG,QAJDstG,SACAqE,MAGC3xG,QAHD2xG,MACAiY,SAEC5pH,QAFD4pH,SACA30H,SACC+K,QADD/K,SAgBEq0H,aAAeI,mCAbjBx7I,QACI4R,KAAMuoI,eACNxpI,QAASupI,mBAEbzR,kBACAgT,0CACAvzF,oBACAk3E,kBACAqE,YACAiY,kBACA30H,mBAG0D+vC,MAAOkwC,cAEjEu1C,eAQAnB,aARAmB,eACAI,iBAOAvB,aAPAuB,iBACAN,YAMAjB,aANAiB,YACAK,cAKAtB,aALAsB,cACAsD,YAIA5E,aAJA4E,YACAC,WAGA7E,aAHA6E,WACAC,cAEA9E,aAFA8E,cACAC,aACA/E,aADA+E,aApCoEt9B,MAAAu9B,4BAsC1B/D,YAAaK,cAAeH,eAAgBI,kBACrFt9I,IAAI,SAAApP,GAAC,OAAKA,EAAIA,EAAE2sJ,kBAvCmD,GAsCjEN,SAtCiEz5B,MAAA,GAsCvDw9B,OAtCuDx9B,MAAA,GAsC/C25B,SAtC+C35B,MAAA,GAsCrCy9B,OAtCqCz9B,MAAA,GAAAC,MAAAs9B,4BAwCrCJ,YAAaG,cAC3C9gJ,IAAI,SAAAxN,GAAC,OAAKA,EAAIA,EAAE+qJ,aACAv9I,IAAI,SAAAsS,GAAC,OAAIA,EAAEirI,oBA1CwC,GAwCjE2D,WAxCiEz9B,MAAA,GAwCrD09B,YAxCqD19B,MAAA,GA2CpE29B,YAAcJ,OAAOvnJ,OAAS,GAAK,EACvCwjJ,SAASxjJ,QAAU2nJ,cACnB,IAAIC,YAAcJ,OAAOxnJ,OAAS,GAAK,EACvC0jJ,SAAS1jJ,QAAU4nJ,cAGnB,IAAIC,WAAaJ,WAAWznJ,OAASynJ,WAAWlhJ,IAAI,SAACpP,EAAGN,GAEpD,OADA2sJ,SAAS3sJ,GAAK2sJ,SAAS3sJ,IAAM2sJ,SAAS3sJ,UACtC8iB,OAAA+nI,+BAAWvqJ,GAAXuqJ,+BAAiB8B,SAAS3sJ,OACxB2sJ,SAAWA,SAASj9I,IAAI,SAAApP,GAAC,OAAKA,QAG9B2wJ,YAAcP,OAAOvnJ,OAASunJ,OAAOhhJ,IAAI,SAACpP,EAAGN,GAAJ,OAAWM,GAAXwiB,OAAA+nI,+BAAkBgG,YAAY7wJ,WAAe6wJ,YAAY1nJ,OACpG0nJ,YAAYnhJ,IAAI,SAAApP,GAAC,OAAAuqJ,+BAAQvqJ,QAEvB4wJ,aACFZ,YACgBA,WAAWrD,aACnB18I,QAAQ,SAACrO,GACQA,EAAE+qJ,aACV18I,QAAQ,SAACqzB,EAAG5jC,GACrBkxJ,UAAUlxJ,GAAKkxJ,UAAUlxJ,OACzBkxJ,UAAUlxJ,GAAG2N,KAAKi2B,OAK1BipH,SAAS1jJ,QACT+nJ,UAAUvjJ,KAAKk/I,UAInB,IAAIsE,gBACAR,OAAOxnJ,QACPgoJ,aAAaxjJ,KAAKgjJ,QAEtB,IAAMS,oBAAsBD,aAAahoJ,OACrConJ,eACgBA,cAActD,aACtB18I,QAAQ,SAACrO,GACQA,EAAE+qJ,aACV18I,QAAQ,SAACqzB,EAAG5jC,GACrBmxJ,aAAanxJ,EAAIoxJ,qBAAuBD,aAAanxJ,EAAIoxJ,yBACzDD,aAAanxJ,EAAIoxJ,qBAAqBzjJ,KAAKi2B,OAKvD,IAAKotH,WAAW7nJ,SAAW8nJ,YAAY9nJ,OAAQ,CAC3C,IAAMi/D,KAAO,IAAIjB,MAAMokF,UACvBnjF,KAAKipF,kBAAkB5uD,UAAWC,YAClCsuD,aAAe5oF,OAGnB,KAAK8oF,UAAU/nJ,QAAYgoJ,aAAahoJ,QAAWgoJ,aAAa,GAAGhoJ,QAAS,CACxE,IAAMi/D,MAAO,IAAIjB,MAAMokF,UACvBnjF,MAAKipF,kBAAkB5uD,UAAWC,YAClCyuD,eAAiB/oF,QAGrB,OACInmD,MAAO+uI,WAAYC,aACnBjwI,SAAUkwI,UAAWC,cACrB1F,0BACAsF,wBACAD,yBA8IAV,CAAiB3C,iBAVjBzB,aAAc2C,gBACdpC,WAAYn1H,SAAS8mE,QASuB/2B,MAAOkwC,cALnDp1F,KA5H4CkuI,kBA4H5CluI,KACAjB,QA7H4CmvI,kBA6H5CnvI,QACAyqI,aA9H4C0E,kBA8H5C1E,aACAqF,YA/H4CX,kBA+H5CW,YACAC,YAhI4CZ,kBAgI5CY,YAMJ,OAHA35H,SAASk6H,UAAUrvI,MACnBmV,SAASm6H,aAAavwI,UAGlBiB,KAAMmV,SAASk6H,YACftwI,QAASoW,SAASm6H,eAClBvsI,OAAQoS,SAAS8hH,cACjB0U,oCACAD,8BACA1qE,UACIzgE,IAAKsuI,YACLj7E,IAAKk7E,aAETx4F,UAAWkzF,aACXt+C,YACIgnC,0BACAqT,YAAa9Z,aC5lBZ8jB,gBACTtuJ,gBACAkvI,SACAgY,sBACA3V,eACAwV,gBACA4D,YACAC,YACAwD,aACAC,gBACArY,eACAV,WACAr3C,w3CCSiBswD,0CAOjB,SAAAA,eAAavuJ,4KAAcwuJ,CAAAjqJ,KAAAgqJ,gBACvBhqJ,KAAKkqJ,aACLlqJ,KAAKmqJ,gBACLnqJ,KAAKoqJ,iBACLpqJ,KAAKu2G,cAAgB96G,aACrBuE,KAAKqqJ,cACLrqJ,KAAKsqJ,iBACLtqJ,KAAKuqJ,gBACLvqJ,KAAKwqJ,SAAYnH,aAAeC,cAChCtjJ,KAAKyqJ,cAAiBrJ,kBAAoBW,mBAC1C/hJ,KAAK0qJ,uBACL1qJ,KAAK2qJ,UACL3qJ,KAAK4qJ,cACL5qJ,KAAK6qJ,OACD1uH,KACA34B,KACAgvC,SACA9Z,QACA6nE,UAEJ1zB,sBAAsB7sE,KAAM+pJ,gBAC5B/pJ,KAAKipI,UAAU4G,2UAUQ,IAAAp7H,MAAAzU,KACvB,OAAIoF,UAAa1D,QACbzI,OAAOub,QAAPpP,UAAA1D,QAAA,OAAA4L,EAAAlI,UAAA,IAAgC0D,QAAQ,SAAC5H,KACrCuT,MAAKy1I,UAAUhpJ,IAAI,IAAMA,IAAI,KAE1BlB,MAEJA,KAAKkqJ,wDAUI,QAAAv1I,OAAA3U,KAAA6mE,KAAAzhE,UAAA1D,OAANopJ,KAAM,IAAAjiJ,MAAAg+D,MAAAC,KAAA,EAAAA,KAAAD,KAAAC,OAANgkF,KAAMhkF,MAAA1hE,UAAA0hE,MAChB,OAAIgkF,KAAKppJ,SACJwiI,KAAMC,OAAQC,OAAQC,YAAaC,YAAYx7H,QAAQ,SAACrO,GACrDka,OAAKi2I,WAAL,GAAAvvI,OAAmB5gB,EAAnB,QAA6BqwJ,KAAK,GAAL,GAAAzvI,OAAW5gB,EAAX,SAAsBka,OAAKi2I,WAAL,GAAAvvI,OAAmB5gB,EAAnB,UAEhDuF,MAEJA,KAAK4qJ,+CAWZ,OAAIxlJ,UAAK1D,QACL1B,KAAK6qJ,MAAQ5xJ,OAAO4T,UAAW7M,KAAK6qJ,MAAvBzlJ,UAAA1D,QAAA,OAAA4L,EAAAlI,UAAA,IACNpF,MAEJA,KAAK6qJ,8CAUG,IAAAzzI,OAAApX,KACf,OAAIoF,UAAO1D,QACPzI,OAAOub,QAAPpP,UAAA1D,QAAA,OAAA4L,EAAAlI,UAAA,IAA0B0D,QAAQ,SAACrO,GAC/B2c,OAAKozI,QAAQ/vJ,EAAE,IAAMA,EAAE,KAEpBuF,MAEJA,KAAKwqJ,0DAUa,IAAA92H,OAAA1zB,KACzB,OAAIoF,UAAY1D,QACZzI,OAAOub,QAAPpP,UAAA1D,QAAA,OAAA4L,EAAAlI,UAAA,IAA+B0D,QAAQ,SAACrO,GACpCi5B,OAAK+2H,aAAahwJ,EAAE,IAAMA,EAAE,KAEzBuF,MAEJA,KAAKyqJ,6EAWK79I,OAAQogI,aACzB,IAAM+Y,kBACA1E,uBA2BN,OA1B4Bx1C,qBAAMC,sBAAOC,uBAEtBjjG,QAAQ,SAACzN,MACxB,GAAIuR,OAAOvR,OAASuR,OAAOvR,MAAMiQ,MAAO,CACpC,IAAM6nH,IAAMvmH,OAAOvR,MACnB0qJ,eAAe1qJ,MAAQ83H,IAAI7nH,MAC3B+1I,oBAAoBn7I,KAAKitH,IAAI7nH,UAIjCsB,OAAM,QACNy0I,oBAAoBn7I,KAApBqB,MAAA85I,oBAAmB0J,kCAASn+I,OAAO2sE,SAGnCyzD,YAAYtrI,QACZsrI,YAAYlkI,QAAQ,SAACoxF,OACbA,MAAM0P,UACN3wG,OAAOskB,OAAO28E,MAAM0P,UAAU9gG,QAAQ,SAACqqH,KAC/BA,MAAmD,IAA5CkuB,oBAAoBp7I,QAAQktH,IAAI7nH,QACvC+1I,oBAAoBn7I,KAAKitH,IAAI7nH,MAAQ6nH,IAAI7nH,MAAQ6nH,SAMrEnzH,KAAKiqI,aAAcoX,0CACZ0E,qEAUKvrI,KAAMu2H,SAClB,OAAIv2H,MACAxa,KAAKgrJ,gBAAkBla,wBAAwB9wI,MAAQ3E,KAAM4oI,IAAKr7H,OAAQ4R,MAAQu2H,SAC3E/wI,MAEJA,KAAKgrJ,kEAUFzxI,QAASw3H,SACnB,OAAIx3H,SACAvZ,KAAKirJ,cAAgBna,wBAAwB9wI,MAAQ3E,KAAM2oI,IAAKp7H,OAAQ2Q,SAAWw3H,SAC5E/wI,MAEJA,KAAKirJ,4DAWJtqF,MACR,IAAM+pC,SAAW1qG,KAAK0qG,WAOtB,OALAzxG,OAAOskB,OAAOmtF,UAAU5hG,QAAQ,SAACrO,GACzBA,EAAEJ,qBAAqBsmE,OACvBA,KAAOlmE,KAGRkmE,iEAWQjmC,SAIf,OAFA16B,KAAKwiJ,iBAEE,SAACvc,UAAWxZ,UAAWif,QAAvB,OAAkC2W,8BAAiB3nH,QAASurG,UAAWxZ,UAAWif,iDAUpFwf,WAAY7+I,UACjBrM,KAAKkrJ,cAAcpiJ,QAAQ,SAACiS,IAAKgtI,QAC7BhtI,IAAIjS,QAAQ,SAACslE,IAAK45E,QACd37I,SAAS07I,OAAQC,OAAQ55E,6DAYjC,IAAM9nD,OAAStmB,KAAKiqI,cAKpB,OAHAhxI,OAAOub,QAAQxU,KAAK0rI,UAAU5iI,QAAQ,SAACrO,GACnC6rB,OAAO7rB,EAAE,IAAMA,EAAE,KAEd6rB,iEASP,OAAOtmB,KAAKy2F,MACRt6D,EAAG,IAAI5lB,IACP/S,EAAG,IAAI+S,sDAWFqvI,kBAAmBh5I,QAAQ,IAAAm6D,OAAA/mE,KAEhC6lJ,aAEAj5I,OAFAi5I,aACAn1B,MACA9jH,OADA8jH,MAGApnB,cAEAs8C,kBAFAt8C,cACA6hD,mBACAvF,kBADAuF,mBAPgCC,mBAYhCprJ,KAAKvE,eAFOoiC,WAVoButH,mBAUhC9yH,WACAilH,iBAXgC6N,mBAWhC7N,iBAGE5S,WAEA0gB,WlBxNmB,SAApBC,kBAAqB1+I,QAC9B,IAAMy+I,cAQN,Od6KuB,cAID,YAIA,ac1LZviJ,QAAQ,SAACuoD,WACM/jD,IAAjBV,OAAOykD,QACPg6F,WAAWh6F,MAAQzkD,OAAOykD,SAG3Bg6F,WkB+MgBC,CAAkBzF,kBAC/B70B,YAAcosB,uBAAWnsB,WAAW,GACpCs6B,gBACA5iJ,MAAQ3I,KAAK2I,QA6BnB,IAAK,IAAM7O,OA5BXkG,KAAK8I,QhClGe,cgCkGO,SAACvQ,EAAGsiB,EAAGsnF,IAC9B,IAAI1qF,KAAO0qF,GAAG1+E,SACd,IAAKhM,KAAM,CACP,IAAM0zD,UAAS,GAAA9vD,OAAM9iB,GAAN8iB,OAAUR,GAEzBpD,KAAO2lI,uBAAWvjJ,QACdyvG,4BACA6hD,wCAEAttH,sBACA0/G,oCAEJgO,aAAapgF,WAAa,KAC1B1zD,KAAKgzF,SACD2/B,SAAU7xI,EACVy6I,SAAUn4H,EACVswD,sBAEJ1zD,KAAK9O,MAAMA,OACXw5F,GAAG1+E,OAAOhM,OAEbkzH,MAAMpyI,KAAOoyI,MAAMpyI,OACpBoyI,MAAMpyI,GAAGsiB,GAAKpD,KACdA,KAAKujI,YAAYtqB,OACjBj5G,KAAKiiF,YAAY3yB,OAAK2yB,eACtByI,GAAGv1F,OAAOy+I,cAGIr6B,YACdroH,MAAMuqB,OAAN,GAAA7X,OAAgBwvF,0BAAiB97C,sBAAjC,KAAA1zC,OAA0DvhB,KAAOyxJ,cAIrE,OADAhO,iBAAiBvG,QAASzsD,OAAQogD,MAAOvoH,OhC1JtB,cgC0J2CkoE,WhC9IlD,SgC+ILtqF,KAAK2qI,MAAMA,qDASV/9H,OAAQq5H,UAAWqe,UAAU,IAEjC9xG,MAIA5lC,OAJA4lC,MACA+tD,MAGA3zF,OAHA2zF,MACA7nE,KAEA9rB,OAFA8rB,KAGE9Q,QADFhb,OADAi5I,aAEyBC,YAPQ0F,mBAWjCxrJ,KAAK6kB,eAFLw+H,UATiCmI,mBASjCnI,UACAC,UAViCkI,mBAUjClI,UAEE15C,UACFp3D,YACA+tD,YACA7nE,WAEEs2G,eAAW3zH,OAAA0vI,kCAAO1H,UAAUp7I,IAAI,SAAAxN,GAAC,OAAIA,EAAE6H,cAA5ByoJ,kCAA4CzH,UAAUr7I,IAAI,SAAAxN,GAAC,OAAIA,EAAE6H,eAC5EmpJ,YACFhjF,QAAS67E,SAASrT,cAAcya,uBAAuBzlB,UAAWr8B,SAAUolC,YAAapnH,SACzF6uE,KAAMz2F,KAAKy2F,OACXmT,mBAGJ,OADA06C,SAASqH,eAAeC,gBAAgBH,YACjCzrJ,mFAMP,OAFAA,KAAKwqJ,WACLxqJ,KAAKyqJ,gBACEzqJ,6DASO,IAAA6rJ,WAKV7rJ,KAAKy2F,OAHLjkD,MAFUq5G,WAEVr5G,MACA+tD,MAHUsrD,WAGVtrD,MACA7nE,KAJUmzH,WAIVnzH,KAGJ,OACI8Z,MAAOu4G,kCAAIv4G,OACX+tD,MAAOwqD,kCAAIxqD,OACX7nE,KAAMqyH,kCAAIryH,2DAWHr9B,MACX,OAAO2E,KAAKy2F,OAAL,GAAAp7E,OAAehgB,mEAUP+hB,aAAcxQ,OAAQ03I,UAAU,IAAAwH,OAAA9rJ,KACzCgtI,YAAchtI,KAAKgtI,cACzBhtI,KAAKqhJ,oBAAoBz0I,OAAQogI,aACjC,IAAM+e,YAAczH,SAASqH,eAAez1C,YACxC94F,0BACAxQ,cACA6pF,KAAMz2F,KAAKy2F,SAGX8mD,iBACAv9I,KAAKvE,eADL8hJ,kBAGHzxC,sBAAOC,sBAAOF,sBAAM/iG,QAAQ,SAACrO,GAC1BqxJ,OAAKr1D,OAAOh8F,GAAKsxJ,YAAYtxJ,KAGjC8iJ,iBAAiBvG,QAASzsD,OAAQvqF,KAAKy2F,OAAQr0E,OhC3P5B,cgC2PiDkoE,WhCnPxD,SgCoPZizD,iBAAiBvG,QAASzsD,OAAQvqF,KAAK2qI,QAASvoH,OhCxO3B,egCwOkDkoE,WhChP3D,SgCkPZ,IAAMqgD,SACA6X,aAAexiJ,KAAKwiJ,eAY1B,OAVAxiJ,KAAK8I,QhCzOe,cgCyOO,SAACvQ,EAAGsiB,EAAGsnF,IAC9BA,GAAG1L,KAAKs1D,aACR5pD,GAAG1+E,UAAY0+E,GAAG1+E,SAAS21H,cAAcxsI,QACzCu1F,GAAGoH,SAAS+6C,SAASqH,eAAe9I,eAAej2I,OAAQ41I,aAAajqJ,GAAGsiB,KAC3EsnF,GAAG6pD,cAEHrhB,MAAMzkI,KAAKi8F,GAAG1+E,YAGlB85H,iBAAiBvG,QAASzsD,OAAQogD,MAAOvoH,OhC1P1B,UgC0P2CkoE,WhC9P9C,SgC+PLtqF,yDAWIisJ,aAAc9kI,WAAYva,QACrC,IAAIs/I,cACAC,eAEA3xI,KAEAyxI,aAFAzxI,KACAjB,QACA0yI,aADA1yI,QALyC6yI,oBAUzCpsJ,KAAKvE,eAFOm0G,aAR6Bw8C,oBAQzC9zH,WACAilH,iBATyC6O,oBASzC7O,iBAGA8O,YAEAz/I,OAFAy/I,YACA1xD,YACA/tF,OADA+tF,YAEE01C,SAAWrwI,KAAKimJ,WAAWjmJ,KAAK0qG,WAAW2lC,UAC3CyT,UAAY9jJ,KAAKimJ,WAAWjmJ,KAAK0qG,WAAWo5C,WAhBLpS,MAAA4a,8BAiBf9xI,KAjBe,GAiBtCm3H,SAjBsCD,MAAA,GAiB5BE,UAjB4BF,MAAA,GAAAG,SAAAya,8BAkBf/yI,QAlBe,GAkBtCgzI,QAlBsC1a,SAAA,GAkB7B2a,WAlB6B3a,SAAA,GAmBvC4a,WAAatlI,WAAW3M,KACxBkyI,iBAAmB,SAAnBA,iBAAmB/rF,MAAI,OAAI,IAAImjF,WAAYl3I,QAASmwF,KAAMp8B,KAAK/zD,SAASmwF,QAIxE/jF,SACF8qB,KAAMqsG,0BAAcwB,SAAU8a,WAAW,GAAIJ,YAAchc,SAAWyT,WAChEnpD,wBAAaiV,4BACnB7rE,MAAOosG,0BAAcyB,UAAW6a,WAAW,GAAIJ,YAAchc,SAAWyT,WAClEnpD,wBAAaiV,6BAEjB+8C,SACF7oH,KAAM6tG,SAASjwI,OAAS,EAAIiwI,SAAS,GAAG1pI,IAAIykJ,qBAC5C3oH,MAAO6tG,UAAUlwI,OAAS,EAAIkwI,UAAU,GAAG3pI,IAAIykJ,sBAhCNjhC,MAAA6gC,+BAkChB7/C,eAAMC,iBAAOzkG,IAAI,SAAA5M,MAAI,OAAIkxJ,QAAQtkJ,IAAI,SAACmmE,IAAK71E,GACpE,OAAIA,IAAMg0J,QAAQ7qJ,OAAS,EAChBsX,QAAQ3d,MAEZsxJ,QAAQtxJ,UAtC0B,GAkCtCuxJ,QAlCsCnhC,MAAA,GAkC7BohC,SAlC6BphC,MAAA,GA0C7C,GAAuB,IAAnB8gC,QAAQ7qJ,OAAc,KAAAgqH,MAAA4gC,+BACO7/C,eAAMC,iBAAOzkG,IAAI,SAAA5M,MAAI,OAAImxJ,WAAWvkJ,IAAI,SAACmmE,IAAK71E,GACvE,OAAU,IAANA,EACOygB,QAAQ3d,MAEZsxJ,QAAQtxJ,UALG,GACrB6wJ,WADqBxgC,MAAA,GACTygC,YADSzgC,MAAA,QAQtBwgC,WAAaM,WAAWvkJ,IAAI,kBAAO0pI,SAASjwI,OAAS,EAAIiwI,SAAS,GAAG1pI,IAAIykJ,uBACzEP,YAAcK,WAAWvkJ,IAAI,kBAAO2pI,UAAUlwI,OAAS,EAAIkwI,UAAU,GAAG3pI,IAAIykJ,uBAShF,OANAnP,iBAAiBvG,QACbzsD,QAASqiE,QAASC,SAAUX,WAAYC,aACxC/pI,OhC9Ue,cgC+UfkoE,WhCnTiB,mBgCsTZsiE,gBAASC,kBAAUX,sBAAYC,yEAa/BlmB,UAAWr5H,OAAQg5I,kBAAmBtB,UAQ/C,OAAOqB,8BANH1f,oBACA2f,oCACAtB,kBACA30H,SAAU3vB,MAGkB4M,8CAIhC,OAAIxH,UAAO1D,QACP1B,KAAK6wH,OAALzrH,UAAA1D,QAAA,OAAA4L,EAAAlI,UAAA,GACOpF,MAEJA,KAAK6wH,iUClaLi8B,wBAzHX,SAAAA,YAAaC,sKAAWC,CAAAhtJ,KAAA8sJ,aACpB,IAAMG,iBAENjtJ,KAAKu6C,OAAOwyG,eACZ/sJ,KAAKgT,OAAO,kBAAM,IAElBhT,KAAKulC,KAAK,SAAC48D,GAAI0oC,KAAMG,MACjB,IAAMkiB,UAAY/qD,GAAGvkF,UACrB,GAAIsvI,WAAaA,UAAUp2H,GAAI,CAC3B,IAAMA,GAAKo2H,UAAUp2H,KACrBm2H,cAAcn2H,KACV44E,SAAUw9C,UACV9iB,SAAUS,KACVmI,SAAUhI,SAKtBhrI,KAAKitJ,cAAcA,iUAInB,OAAI7nJ,UAAG1D,QACH1B,KAAKmtJ,eAAL/nJ,UAAA1D,QAAA,OAAA4L,EAAAlI,UAAA,GACOpF,MAEJA,KAAKmtJ,uDAUZ,OAAI/nJ,UAAO1D,QACP1B,KAAKotJ,QAALhoJ,UAAA1D,QAAA,OAAA4L,EAAAlI,UAAA,GACOpF,MAEJA,KAAKotJ,gDAYZ,OAAIhoJ,UAAG1D,QACH1B,KAAKqtJ,UAALjoJ,UAAA1D,QAAA,OAAA4L,EAAAlI,UAAA,GACOpF,MAEJA,KAAKqtJ,gDASZ,IAAIC,SAAW,EASf,OAPAttJ,KAAKu6C,SAASzxC,QAAQ,SAACiS,KACnB,IAAIwyI,gBAAkB,EACtBxyI,IAAIjS,QAAQ,SAAC63D,MACT4sF,iBAAmB5sF,KAAK6sF,kBAAkB3zH,QAE9CyzH,SAAWzpJ,KAAK6P,IAAI45I,SAAUC,mBAE3BD,iDASP,IAAIG,UAAY,EAShB,OAPAztJ,KAAKu6C,SAASzxC,QAAQ,SAACiS,KACnB,IAAI2yI,iBAAmB,EACvB3yI,IAAIjS,QAAQ,SAAC63D,MACT+sF,iBAAmB7pJ,KAAK6P,IAAIg6I,iBAAkB/sF,KAAK6sF,kBAAkB1zH,UAEzE2zH,WAAaC,mBAEVD,4CAUL1vI,IACF,IAAMw8B,OAASv6C,KAAKu6C,SACdhsC,SAAWvO,KAAKgT,SAStB,OAPAunC,OAAOzxC,QAAQ,SAACiS,IAAKgtI,QACjBhtI,IAAIjS,QAAQ,SAACslE,IAAK45E,QACVz5I,SAAS6/D,MACTrwD,GAAGqwD,IAAK25E,OAAQC,OAAQztG,YAI7Bv6C,qEAGU82B,IACjB,OAAO92B,KAAKitJ,gBAAgBn2H,0mBC3H7B,6BAgCM62H,0BAAqB,SAArBA,mBAAsBjzH,QAASytH,aAAgB,IAEpD5qI,OAGA4qI,YAHA5qI,OACA/C,KAEA2tI,YAFA3tI,KACAjB,QACA4uI,YADA5uI,QAcJ,OAZAgE,OAASA,WACT/C,KAAOA,SACPjB,QAAUA,YACVmhB,QAAQkzH,aAAavc,UACjB73I,MAAO,IAAIszJ,aAAYvvI,QACvBumB,KAAM,IAAIgpH,aAAYtyI,KAAK,IAC3BupB,MAAO,IAAI+oH,aAAYtyI,KAAK,IAC5BkmB,IAAK,IAAIosH,aAAYvzI,QAAQ,IAC7Bu2C,OAAQ,IAAIg9F,aAAYvzI,QAAQ,KAGpCmhB,QAAQ67E,cAAcqZ,UAAUC,OAAOpgE,aAAYG,gBAAgB,GAC5Dl1B,SAGEmzH,sBAAiB,SAAjBA,eAAkBnzH,SAC3B,IAAMlgB,KAAOkgB,QAAQlgB,OACfjB,QAAUmhB,QAAQnhB,UAClBi5B,MAAQ9X,QAAQ8X,QAChByzF,UAAYvrG,QAAQ3vB,OACpB2tB,KAAOgC,QAAQhC,OACf6gD,OAAS7+C,QAAQ6+C,SACjB0gB,OAASv/D,QAAQu/D,SACjBjgD,UAAYtf,QAAQsf,YACpBptC,OAAS8tB,QAAQ9tB,SACjB2zF,MAAQ7lE,QAAQ6lE,QAGhB5wE,SAAW+K,QAAQ/K,WACzBA,SAAShnB,MAAM+xB,QAAQ/xB,SACvBgnB,SAAS+pE,YAAYh/D,QAAQg/D,eAE7B,IAAIo0D,cACAh9F,UAAWp2B,QAAQo2B,YACnB4/D,MAAOh2F,QAAQg2F,QACfm1B,aAAcj5I,WACd4N,UACAjB,gBACAggE,cACA0gB,cACAjgD,sBCxDkC,SAA7B+zG,2BAA8BrzH,SACvCA,QAAQ/xB,QAAQ4pF,aACZpnB,UAAW,QACXrxE,IAAK,gBDwDTi0J,CAA2BrzH,SAE3B,IAAMszH,cAlEoB,SAAxBC,sBAAyBC,aAC3B,IAAMniF,QACN,IAAK,IAAMjyE,OAAOo0J,YAAa,CAC3B,IAAMC,UAAYD,YAAYp0J,KAM1BiyE,KAAKjyE,KALgB,iBAAdq0J,WAA2BA,UAKtBA,WAHR7iJ,MAAO4iJ,YAAYp0J,MAM/B,OAAOiyE,KAsDekiF,EAClBz7G,YACA+tD,YACA7nE,YAGJo1H,aAAe70J,OAAO4T,OAAOihJ,aAAcE,eAE3C,IAAM1J,YACNA,SAASqH,eAAiB,IAAIvc,+BAC9BkV,SAASrT,cpB6Ja,SAAbmd,WAAcn0D,QACvB,IAAI82C,QAAU,IAAIhH,mCAMlB,OAJI9vC,OAAOv4F,SAEPqvI,QAAU92C,OAAOv8E,MAAM,SAAAjjB,GAAC,MAAe,QAAXA,EAAE+uG,OAAkB,IAAI6kC,2BAAiB0C,SAElEA,QoBpKkBqd,CAAWn0D,QACpCtqE,SAASohH,QAAQuT,SAASrT,eAG1Bv2G,QAAQ2zH,UAAU/J,SAASrT,cAAcjsH,YAAY3pB,QAGrD,IAAMuN,OAAS07I,SAASrT,cAAcqd,eAAeroB,UAAW6nB,cAChExJ,SAASrT,cAAcsd,kBAAkB3hJ,OAASA,OAAOo7H,YAAep/H,QAExEqxF,QAAUtqE,SAASq9G,YAAY/yC,QAE/BtqE,SAAS8yH,eAAe75I,OAAO4R,KAAM8pI,UAAU5B,aAAa95I,OAAO2Q,QAAS+qI,UAE5E,IAAMkK,gBAAkB7+H,SAAS8+H,YAAYxoB,UAAW6nB,aAAcpzH,QAAQgwE,WAAY45C,UA6B1F,OA5BA5pH,QAAQg0H,kBAAoBF,gBAAgB9oD,WAAWgnC,aAEvDhyG,QAAQo2B,UAAU09F,gBAAgB19F,WAGlCnhC,SAASg/H,kBAAkBH,gBAAgB9oD,WAAWq6C,YAAY1iI,kBAAmB2wI,cAC7E1J,UAGR30H,SAASi/H,WAAWd,aAAcU,gBAAgB9oD,WAAY4+C,UAG9DqJ,0BAAmBjzH,QAAS8zH,iBAG5B9zH,QAAQm0H,eAAel/H,SAASm/H,cAAcN,gBAAiB5lJ,OAAQgE,SAGvE8tB,QAAQ8zH,gBAAgBA,iBAExB9zH,QAAQkzH,aAAan3D,KAAO9mE,SAAS8mE,OACrC/7D,QAAQq0H,UACJC,OAAQ5d,uBAAWod,gBAAiBlK,SAASrT,iBAGjDthH,SAASohH,UAAUke,iBAAiBv0H,SCzHI,SAA/Bw0H,6BAAgCx0H,SAC3BA,QAAQ/xB,QAChB+mH,wBAAuB,GAAAr0G,OAAIwvF,0BAAiB97C,sBAArB,YAAsD,WAC/Er0B,QAAQ/K,WAAWohH,UAAUke,iBAAiBv0H,WAC/C,GACCywC,UAAW,QACXrxE,IAAK,gBDqHTo1J,CAA6Bx0H,SACtBA,+LE9IJ,IAAM++D,8BAAK01D,kCAAAC,0BACd1+B,SACA3lH,QACA8jJ,gBACItkF,cACIqiF,WACAC,YACAX,cACAC,iBAGRkC,aAEAU,UACIxkF,cACIykF,YAGRR,iBACIjkF,iBAEJ56C,YACA+pE,aACInvB,aAAc,SAAAA,aAAArpE,KAAG,OAAIA,MAEzBwpG,UACIl+B,aAAc,SAAAA,aAAC9xC,QAASlhC,OAIpB,OAHIkhC,QAAQ/K,UACR+K,QAAQ/K,WAAW+6E,SAASlxG,MAAM61J,cAE/B71J,QAGfs3D,cpCLkB,aoC5BJq+F,kCAAAC,yBAmCbtrB,SAnCaqrB,kCAAAC,yBAoCbrrB,YApCaorB,kCAAAC,yBAqCbtjD,0BArCaqjD,kCAAAC,yBAsCbrjD,0BAtCaojD,kCAAAC,yBAuCbvjD,yBAvCasjD,kCAAAC,yBpC2HI,aoC3HJD,kCAAAC,yBpCgII,aoChIJD,kCAAAC,yBpCqIO,gBoCrIPA,myCC0PHE,oCApNX,SAAAA,YAAa5kD,SAAUjvG,cAAc,IAAAgZ,iKAAA86I,CAAAvvJ,KAAAsvJ,aACjC76I,0LAAA+6I,CAAAxvJ,KAAAyvJ,4BAAAH,aAAA52J,KAAAsH,OADiC,IAI7B0vJ,qBACAhlD,SADAglD,qBAJ6B,OAOjCj7I,MAAK8hG,cAAgB96G,aAKrBoxE,sBAAsB8iF,sEAAAl7I,QAAMglF,8BAC5B5sB,sBAAsB8iF,sEAAAl7I,QAAMmpI,eAG5BnpI,MAAKm5I,gBAELn5I,MAAKuxD,SAELvxD,MAAKstF,OAAS,KAEdttF,MAAKm7I,cAELn7I,MAAKkb,SAAS,IAAIq6H,+BAAev1I,MAAK8hG,gBAEtCo3C,0BAAmBgC,sEAAAl7I,YAEnBA,MAAKi2F,UACDpB,cAAeomD,qBAAqBpmD,cAAclwG,MAClDi2J,aAAcK,qBAAqBL,aAAaj2J,QA9BnBqb,uYAVfmwH,ySAuDlB,OAAIx/H,UAAO1D,QACP1B,KAAK6wH,OAALzrH,UAAA1D,QAAA,OAAA4L,EAAAlI,UAAA,GHxEyB,SAAxB2rH,sBAAyBr2F,SAClC,IAAMs2F,YAAct2F,QAAQ1V,YAAYisG,WAAW,GACrCv2F,QAAQ/xB,QAChBuqB,OAAO23E,0BAAiB17C,uBAAwB6hE,aGsE9CD,CAAsB/wH,MH/EH,SAAlB6vJ,gBAAmBn1H,SAAY,IACjCs2F,YADiC8+B,kCAClB1S,uBAAWnsB,WADO,MAE1Bv2F,QAAQ/xB,QAChBuqB,OAAO23E,0BAAiB97C,sBAAuBiiE,aG6E7C6+B,CAAgB7vJ,MHpEI,SAAnB+vJ,iBAAoBr1H,SAAY,IAClCs2F,YADkC8+B,kCACnBz/B,qBAAUY,WADS,MAEzCv2F,QAAQ/xB,QAAQuqB,OAAO23E,0BAAiB37C,uBAAwB8hE,aGmExD++B,CAAiB/vJ,MFvFO,SAAvBgwJ,qBAAwBt1H,SACjC,IAAM/xB,MAAQ+xB,QAAQ/xB,QAEtBA,MAAM+mH,wBAAuB,GAAAr0G,OAAIwvF,0BAAiB17C,uBAArB,cAAyD,WAChEz0B,QAAQ/K,WAAW8mE,OAC3Bt6D,EAAErzB,QAAQ,SAAA2tF,MAAI,OAAIA,KAAK3tF,QAAQ,SAAConD,MACtCA,KAAKkzC,eAIbz6F,MAAM+mH,wBAAuB,GAAAr0G,OAAIwvF,0BAAiB17C,uBAArB,cAAyD,WAChEz0B,QAAQ/K,WAAW8mE,OAC3BjzF,EAAEsF,QAAQ,SAAA2tF,MAAI,OAAIA,KAAK3tF,QAAQ,SAAConD,MACtCA,KAAKkzC,eE4EL4sD,CAAqBhwJ,MACdA,MAEJA,KAAK6wH,+DASZ,OAAIzrH,UAAS1D,OACF1B,KAEJA,KAAKopF,cAAcioD,2DA8B1B,OAAIjsI,UAAO1D,OACA1B,KAEJA,KAAK4tJ,2DAWZ,OADA5tJ,KAAK2I,QAAQwT,MAAMquH,OACZxqI,uDAUP,OADAA,KAAK2I,QAAQwT,MAAMsuH,SACZzqI,yCAWJiwJ,UACH,OvBrBmB,SAAdC,YAAeD,SAAU5wI,WAClC,IAAI8wI,QAAU,KAQd,OANCrkD,sBAAOD,qBAAME,uBAAOjjG,QAAQ,SAACrO,GACtB21J,iBAAKznJ,MAAMvP,IAAIqB,IAAMw1J,WAAaG,iBAAKznJ,MAAMvP,IAAIqB,GAAG,KACpD01J,QAAU11J,KAId01J,SACSA,mBAEZlsB,IAAKD,KAAKl7H,QAAQ,SAACunJ,WAChBhxI,UAAS,GAAAhE,OAAIg1I,UAAJ,WAAuBvnJ,QAAQ,SAACrO,GACjCA,EAAE6H,aAAe2tJ,WACjBE,SAAYA,QdwHP,QcxHuB90J,KAAMg1J,YAAcrsB,Id7D1C,Sc6DyDC,UAKvEksB,WAIHlsB,IAAKD,KAAKl7H,QAAQ,SAACwnJ,UAChBjxI,UAAS,GAAAhE,OAAIi1I,SAAJ,gBAA2BxnJ,QAAQ,SAACrO,GACzCA,EAAEqO,QAAQ,SAACnQ,GACHA,EAAE2J,aAAe2tJ,WACjBE,QAAUG,WAAatsB,IAAMpmF,EAAI35C,SAM7CksJ,SACSA,iBAEN,OuBhBID,CAAYD,SAAUjwJ,KAAK2vB,WAAW9K,wDAWxCxpB,MACL,MrClBe,YqCkBXA,KACO2E,KAAK2vB,WAAW4gI,iBAEpBvwJ,KAAK2vB,WAAW6gI,cAAcn1J,gDAS/BA,MACN,OAAO2E,KAAK2vB,WAAL,GAAAtU,OAAmBhgB,KAAnB,8EAGW80J,SAAS,IAAAM,sBAIvBzwJ,KAAK2vB,WAAW9K,eAFhBu8H,eAFuBqP,sBAEvBrP,eACAW,eAHuB0O,sBAGvB1O,eAEJ,OAAOoO,UAAYlsJ,EAAIm9I,eAAiBW,6EAGxB0B,UAChB,IAAM9zH,SAAW3vB,KAAK2vB,WAEtB,OADcA,SAAS02H,WAAW5C,WAAa9zH,SAASy2H,WAAW3C,0EAIpDtkB,SAAUskB,UACzB,IAAM9zH,SAAW3vB,KAAK2vB,WAItB,OAHcA,SAAS02H,WAAW5C,WAAa9zH,SAASy2H,WAAW3C,WAChD,GAAG7lI,UAAU64E,OAAO0oC,4DAW9B,IAAAxsG,KACHhqB,MAAQ3I,KAAK2I,QAEnB,OAAA+nJ,4BAAA/9H,QrCzMc,SqC0MAhqB,MAAMvP,IrC1MN,WqCyMds3J,4BAAA/9H,KrC5Ja,QqC8JAhqB,MAAMvP,IrC9JN,UqC4Jbu5B,6DAaA,OAAO3yB,KAAK0uJ,0EAIZb,sBAAe7tJ,oDA7Kf,QACIwW,QACI2lB,KACA34B,KACAiiE,y3DC7EK6wB,wyBAAwBJ,mWAKxB1J,OAAQqB,cACrB,GAAe,OAAXrB,OACAqB,aAAawH,aACV,GAAI7I,OAAO9qF,OAAQ,CAEtB,IAAMivJ,kBAAoBnkE,OAAOx5E,OAAO,SAAAna,GAAC,OAAIg1F,aAAa5gE,KAAKp0B,KAAOw0F,gCAAUzB,oBACzEiC,aAAa5gE,KAAKp0B,KAAOw0F,gCAAU5B,qBAEtCklE,kBAAkBjvJ,QAClBmsF,aAAasI,cACbtI,aAAap3E,IAAIk6I,qBAEjB9iE,aAAa0H,aACb1H,aAAaroD,OAAOgnD,SAVF,IAYdF,QAAYuB,aAAamH,UAAzB1I,QACF8J,iBAAa/6E,OAAAu1I,yBAAO,IAAIr6I,IAAI+1E,QAAQ,KAAvBskE,yBAA+B,IAAIr6I,IAAI+1E,QAAQ,MAC5D+J,iBAAmBxI,aAAa2H,iBAAiB9zF,OACnD4qF,QAAQ,GAAG5qF,SAAW20F,kBAAoBD,cAAc10F,SAAW20F,kBACnExI,aAAawH,aAGjBxH,aAAaroD,OAAOqoD,aAAa2H,kBAErC,OAAOx1F,uDA3BP,MAAO,iOCFf,2EAEaoyF,kDAAkBy+D,6CAAAC,2CAC1Bne,wBAAQ1nD,MACLvvC,OAAM,IAAArgC,OAJM,OAIN,kBACN+0E,YAAaqb,2BAAWhW,SAHDo7D,6CAAAC,wCAK1Bne,wBAAQznD,OACLxvC,QAAQ,IAAArgC,OARI,OAQJ,oBACR+0E,YAAaqb,2BAAW/V,aAPDm7D,6CAAAC,wCAS1Bne,wBAAQvnD,OACL1vC,QAAQ,IAAArgC,OAZI,OAYJ,oBACR+0E,YAAaqb,2BAAW5V,UAXDi7D,yCAelBC,8CAAuBF,6CAAAG,yBAC/BvlD,2BAAW5V,OAAS4V,2BAAW7V,QADAi7D,6CAAAG,sBAE/BvlD,2BAAWhW,MAAQgW,2BAAW/V,WAFCs7D,wNChB7B,IAAM5iE,sDAAkB6iE,6CAAAC,oDCHV,SCAO,gBFKpBp4J,KEJmB,cFKnB6N,SACI66F,SAAU,WAJSyvD,6CAAAC,iDCFN,aCAE,gBFEID,6CAAAC,iDAAA,WASvBp4J,KEXmB,cFYnB6N,SACI66F,SAAU,WAXS0vD,kDAgBlBC,wBAAsBF,6CAAAG,yBCnBd,UDqBbt4J,KEpBmB,cFqBnB6N,SACI66F,SAAU,WAJayvD,6CAAAG,sBClBV,cD0BjBt4J,KE1BmB,cF2BnB6N,SACI66F,SAAU,WAVayvD,6CAAAG,sBCfb,UD4BI,WAbSA,uBGCtBC,iBACT34H,KAAM,UACN6nE,MAAO,WACP/tD,MAAO,YASE8+G,MAAQ,shBC3Bd,IAAM5/D,iBAAY,SAAZA,UAAa2C,SAAUjyE,OAAQyrE,cAA8B,IAClEC,gBADkDlhF,OAAgBxH,UAAA1D,OAAA,QAAA4L,IAAAlI,UAAA,GAAAA,UAAA,MAEhE/J,KAAOg5F,SAAS35D,QAAQ1V,YAAY3pB,OACpC6uB,QAAUtd,OAAOsd,QACjBnf,KAAOspF,SAAS35D,QAAQ3vB,OACxBgkJ,SAAW16D,SAAS35D,QAAQq0H,WAC5BnnF,UAAYmnF,SAAS5xI,UAAUzR,OAAO,GAAGrQ,KAEzC8+I,eACAv4H,SAAWyyE,SAAS35D,QAAQspD,IAClCm2D,YAAY/3H,OAAS2uI,6CAAwB3uI,SAAWA,OACxD+3H,YAAYttD,YAAcskE,uBAAuB/uI,QACjD+3H,YAAYY,aAAe1mD,SAAS35D,QAAQ62H,cAC5C,IAAMtnI,gBAAkBoqE,SAAS5F,SAASC,YAAYyrD,YAAY/3H,QAAQ4C,YAAYusE,UACtF,GAAyB,OAArBrnE,QAAQxN,SACRoxE,gBAAkB,SACf,CACH,IAAMzB,SAAWwB,aAAaN,YAC1BhwE,OAASxS,KAAKiI,OAAO,SAAAna,GAAC,OAAqC,IAAjCwzF,SAAS9lE,KAAKtgB,QAAQpN,EAAEi+B,MAAY7uB,IAAI,SAAApP,GAAC,OAAIA,EAAE24J,SAC7E,GDPY,SCORn2J,MDkBY,aClBMA,MDmBP,YCnB4BusE,UAAwB,CAC/D,IAAMt8D,MAAQrS,OAAO6M,KAAKokB,QAAQxN,cAAgB,GAElDoxE,iBADAvwE,OAASxS,KAAKiI,OAAO,SAAAna,GAAC,OAAqC,IAAjCwzF,SAAS9lE,KAAKtgB,QAAQpN,EAAEi+B,MAAY7uB,IAAI,SAAApP,GAAC,OAAIA,EAAE0I,SAChDG,OAASqtJ,SAASjxI,OAAO,SAAClV,QAE/C,IADA,IAAI6oJ,OAAQ,EACHl5J,EAAI,EAAGA,EAAIglB,OAAO7b,SAET,KADd+vJ,MAAQ7oJ,OAAO0C,OAAO9R,OAAS+jB,OAAOhlB,GAAG,IAAMqQ,OAAO0C,OAAO9R,OAAS+jB,OAAOhlB,GAAG,IADjDA,KAMnC,OAAOk5J,QAEPzzI,WAAW,IACV,SDpBO,aCqBL3iB,KACPyyF,gBAAkBzf,sBAAsB0gF,SAAU7kI,QAAQxN,UACnDa,OAAO7b,OACdosF,gBrQwoCyB,SAA/B4jE,6BAAgCv1I,MAAOmF,aACzC,IACIvW,KADAW,UAEEsoF,SAAW73E,MAAMkB,kBA2BvB,OA1BIiE,YAAY5f,OAAQ,WAGpB,IAFA,IAAMkH,OAAS0Y,YAAY,GACrB7Y,IAAMG,OAAOlH,OACVnJ,EAAI,EAAGA,EAAIkQ,IAAKlQ,IAAK,CAC1B,IAAM+S,MAAQ1C,OAAOrQ,GACf8oG,SAAWrN,SAAS1oF,QAAUrS,OAAO4T,UAAWmnF,SAAS1oF,OAAOkS,KAClE6jF,UACA31F,OAAOxF,KAAKjN,OAAO4T,OAAOw0F,WAIlCt2F,QAEA,IADA,IAAMmO,OAASoI,YAAY,GAZPypH,OAAA,SAAAA,OAaXxyI,KACL,IACMquE,QADOtlD,YAAY/oB,KAEpBuQ,QAAQ,SAACyI,SAAUy5H,MACpBpkE,KAAK1tD,OAAO8xH,OAASz5H,WAEzBxG,KAAK7E,KAAK0gE,OANLruE,IAAI,EAAGA,IAAI+oB,YAAY5f,OAAQnJ,KAAK,EAAGwyI,OAAvCxyI,KAbW,IAsBpBwS,QACAW,WAGG,IAAIyQ,MAAM6I,YAAYja,KAAMW,QqQtqCTgmJ,CAA6B3C,UAAW7kI,QAAQxN,SAAS,IAA7BrB,OAAAs2I,sCAAoCp0I,OAAOtV,IAAI,SAAApP,GAAC,OAAKA,SAEnGshJ,YAAYz9H,SAAW,KACvBoxE,gBAAkBihE,SAASjxI,OAAO,kBAAM,IACpCE,WAAW,KAKvB,IAAI6D,6BAA8B,EAE9BisE,kBAEAjsE,4BADeisE,gBAAgBjiE,YACMnO,MAAM,SAAA7kB,GAAC,MDZ7B,YCYiCA,EAAEwC,QAGtD,IAAM0nB,YACFnB,SAAQ,UAAAvG,OAAYuG,UACpBsI,QAASiwH,YACTz9H,SAAmC,OAAzBy9H,YAAYz9H,SAAoB,KAAOoxE,gBACjD7jE,gCACApI,wDACAO,OAAQ+3H,YAAY/3H,QAGxB2sI,SAASr9D,UAAU5D,gBAAiB/qE,YAAY,ywCCzD7C,IAAM6uI,+BAAb,SAAAC,WACI,SAAAD,iBAAwB,IAAA5sD,iBAAAvwF,oKAAAq9I,CAAA9xJ,KAAA4xJ,gBAAA,QAAA/qF,KAAAzhE,UAAA1D,OAARgf,OAAQ,IAAA7X,MAAAg+D,MAAAC,KAAA,EAAAA,KAAAD,KAAAC,OAARpmD,OAAQomD,MAAA1hE,UAAA0hE,MAAA,OACpBryD,MAAAs9I,0CAAA/xJ,MAAAglG,iBAAAgtD,+BAAAJ,iBAAAl5J,KAAA6O,MAAAy9F,kBAAAhlG,MAAAqb,OAASqF,WACJ+vE,wBAFeh8E,MAD5B,0XAAAw9I,CAAAL,eAAoC1jE,qQAApCgkE,CAAAN,iBAAA93J,IAAA,6BAAAN,MAAA,SAAAq4F,2BAMgChE,cACxB,OAAOA,aAAa,MAP5B/zF,IAAA,YAAAN,MAAA,SAAAk4F,UAUeygE,cAAejoI,QAAS2jE,cAC/B6D,iBAAU1xF,KAAMmyJ,cAAetkE,cAC3B3jE,qBAZZpwB,IAAA,wBAAAN,MAAA,SAAAm7F,sBAgB2Bj4E,UACnB,IAAIa,OACAo1E,UACEt3F,KAAO2E,KAAK06B,QAAQ1V,YAAY3pB,OAkBtC,OAhBiB,OAAbqhB,SACAi2E,UAAY,KFfJ,SEgBDt3F,MACPkiB,OAAStkB,OAAOskB,OAAOb,UACvBi2E,UAAY3yF,KAAK06B,QAAQ3vB,OAAOiI,OAAO,SAAAna,GAAC,OAAiC,IAA7B0kB,OAAOtX,QAAQpN,EAAE0I,SAAe0G,IAAI,SAAApP,GAAC,OAAIA,EAAEi+B,MFjB3E,aEkBLz7B,KACPs3F,cAEAp1E,OAASb,SAAS,IAEdi2E,UAAY3yF,KAAK06B,QAAQ3vB,OAAOiI,OAAO,SAAAna,GAAC,OAAkC,IAA9B0kB,OAAOtX,QAAQpN,EAAE24J,UAAgBvpJ,IAAI,SAAApP,GAAC,OAAIA,EAAEi+B,MAExFvZ,OAAStkB,OAAOskB,OAAOb,UACvBi2E,UAAY3yF,KAAK06B,QAAQ3vB,OAAOiI,OAAO,SAAAna,GAAC,OAAiC,IAA7B0kB,OAAOtX,QAAQpN,EAAE0I,SAAe0G,IAAI,SAAApP,GAAC,OAAIA,EAAEi+B,OAI3FvQ,KAAMosE,UACNx2E,MAAO,SAvCnBriB,IAAA,cAAAN,MAAA,SAAAy6F,cA4CQ,OAAO,SA5Cf29D,eAAA,2KCC2B,6BCkBZn5D,wBArB0B,SAARA,MAAQpE,UAAQ,OAAI,SAAC4D,SAAU7H,YAC5D,IAAMsC,kBAAoB,SAApBA,kBAA8B1rF,MAChC,IAAM6wE,MAAQwQ,0BACRn+D,SACFxN,SAAU23E,SAAS35D,QAAQ03H,oBAAoBprJ,OAEnDopF,WAAWtnF,QAAQ,SAAAkoF,WAAS,OAAIqD,SAAS3B,kBAAkB1B,UAAW9mE,WACtE2tD,MAAM1iD,mBAGV8iE,SAASvsB,GAAG,YAAagnB,mBACRhnB,GAAG,YAAagnB,mBAChBhnB,GAAG,WAAY,WACZ,IAAMmM,MAAQwQ,0BACd+H,WAAWtnF,QAAQ,SAAAkoF,WAAS,OAAIqD,SAAS3B,kBAAkB1B,WACvDt0E,SAAU,SAEdm7D,MAAM1iD,sBCRf+jE,wBAXD,SAARA,MAAQ7E,UAAQ,OAAI,SAAC4D,SAAU7H,YAQjC6H,SAASvsB,GAAG,QAPc,SAApBgnB,kBAA8B1rF,MAChC,IAAMkjB,SACFxN,SAAU23E,SAAS35D,QAAQ03H,oBAAoBprJ,OAEnDopF,WAAWtnF,QAAQ,SAAAkoF,WAAS,OAAIqD,SAAS3B,kBAAkB1B,UAAW9mE,oMCNvE,IAAMkpE,mCAAei/D,iCAAAC,4BCLR,OJWoB,SAAPryE,KAAOoU,UAAQ,OAAI,SAAC4D,SAAU7H,YAC3D,IAEIlmE,QAFAitE,YACAC,UAEEgB,OAAS7P,2BACT7tD,QAAU25D,SAAS35D,QACnB63H,YAAc73H,QAAQwjE,cAAcs0D,mBACpCrzB,SAAsC,eAA3BzkG,QAAQ9tB,SAAS06B,MAAyB,IAAM,IAC3DmrH,UAAY/3H,QAAQw1B,OAAOzsC,SAASsjB,QACpC2rH,aAAeD,UAAUlxJ,QAAqB,MAAb49H,SAAmB,EAAI,GAE9DlnC,SAASv/F,KAAK0/F,SAAS1sB,GAAG,QAAS,WAC/B,IAAMmM,MAAQwQ,0BACd8O,UACIh7D,EAAG07C,MAAM17C,EACT34B,EAAGq0E,MAAMr0E,KAEdkoE,GAAG,OAAQ,WACV,IAAMmM,MAAQwQ,2BAEd+O,QACIj7D,EAAG07C,MAAM17C,EACT34B,EAAGq0E,MAAMr0E,IAEN24B,EAAIt4B,KAAK6P,IAAI,EAAG7P,KAAK2P,IAAI4jF,OAAOj7D,EAAGo2H,YAAY14H,QACtDu9D,OAAO5zF,EAAIK,KAAK6P,IAAI,EAAG7P,KAAK2P,IAAI4jF,OAAO5zF,EAAG+uJ,YAAYz4H,SAEtD5P,SACIxN,SAAUi2I,uBACLj4H,QAAQ5nB,aAAe2/I,UAAU1qH,OAAOovD,SAASgoC,UAA2B,EAAfuzB,cAC1DD,UAAU1qH,OAAOqvD,OAAO+nC,UAA2B,EAAfuzB,eAAmBniJ,KAAK,SAAC5V,EAAGyI,GAAJ,OAAUzI,EAAIyI,MAGtFgtF,WAAWtnF,QAAQ,SAAAkoF,WAAS,OAAIqD,SAAS3B,kBAAkB1B,UAAW9mE,aACvEwhD,GAAG,MAAO,WACT,IAAMmM,MAAQwQ,2BAEd+O,QACIj7D,EAAG07C,MAAM17C,EACT34B,EAAGq0E,MAAMr0E,IAEN24B,EAAIt4B,KAAK6P,IAAI,EAAG7P,KAAK2P,IAAI4jF,OAAOj7D,EAAGo2H,YAAY14H,QACtDu9D,OAAO5zF,EAAIK,KAAK6P,IAAI,EAAG7P,KAAK2P,IAAI4jF,OAAO5zF,EAAG+uJ,YAAYz4H,SAElD5P,QADAitE,SAASgoC,YAAc/nC,OAAO+nC,WAE1BziH,cAIAA,SAAUi2I,uBACLj4H,QAAQ5nB,aAAe2/I,UAAU1qH,OAAOovD,SAASgoC,UAA2B,EAAfuzB,cAC1DD,UAAU1qH,OAAOqvD,OAAO+nC,UAA2B,EAAfuzB,eAAmBniJ,KAAK,SAAC5V,EAAGyI,GAAJ,OAAUzI,EAAIyI,MAI1FgtF,WAAWtnF,QAAQ,SAAAkoF,WAAS,OAAIqD,SAAS3B,kBAAkB1B,UAAW9mE,iBG7DlDmoI,iCAAAC,yBCJP,QDMI75D,yBAFG45D,iCAAAC,yBCFP,QDKIp5D,yBAHGo5D,gNEE5B,IAAMM,qBAAuB,SAAvBA,qBAAwB1zE,QAAShvB,KAAMjoC,UACzC,IAAIvL,YAEA+1I,UAEAviG,KAFAuiG,UACAtzB,SACAjvE,KADAivE,SAGAhoC,SAKAlvE,SALAkvE,SACAC,OAIAnvE,SAJAmvE,OACAy7D,oBAGA5qI,SAHA4qI,oBACAC,kBAEA7qI,SAFA6qI,kBACA7xG,OACAh5B,SADAg5B,OAEE8xG,kBAAoB7zE,QAAQigD,UAalC,OAVIziH,SADAy6E,SAASgoC,YAAc/nC,OAAO+nC,aAEvB4zB,kBAAoBF,qBAAuBC,kBAAoB7xG,QAC1DwxG,UAAU1qH,OAAO+qH,kBAAoB7xG,OAAS4xG,qBACtDJ,UAAU1qH,OAAO+qH,kBAAoB7xG,SAClC8xG,kBAAoB9xG,OAASA,QACxBwxG,UAAU1qH,OAAgB,EAATkZ,QAAawxG,UAAU1qH,OAAO8qH,oBAA+B,EAAT5xG,UAErEwxG,UAAU1qH,OAAOgrH,mBAAoBN,UAAU1qH,OAAOgrH,kBAAoBF,sBAE7E,MAAb1zB,UAA8BziH,SAAS4G,UAChC5G,y5CC6CIk+E,4zBAlEuCP,mWAmBhBxM,aAAc3jE,SAC5C,IAAIiS,EACA34B,EACAq2B,MACAC,OACEu6D,SAAWr0F,KAAKq0F,SAChB35D,QAAU25D,SAAS35D,QACnB9tB,OAAS5M,KAAK4M,SACdsjD,KAAOx1B,QAAQw1B,OAAOzsC,SACtByb,UAAS,GAAA7jB,OAAMzO,OAAO+tF,YAAb,KAAAt/E,OAA4BzO,OAAOsyB,WAE5C1oB,OAAS0T,QAAQxN,SAAS23E,SAAS35D,QAAQ5nB,aAC3C2/I,UAAYviG,KAAKnpB,QACjBxlC,MAAQiV,QAAU05C,KAAKmsC,cAAc7lF,OAAO,IAAK05C,KAAKmsC,cAAc7lF,OAAO,QAE3E2oH,STjBY,eSiBDzkG,QAAQ9tB,SAAS06B,MAAuB,IAAM,IAEzD0rH,kBAAoB3+D,SAAS35D,QAAQwjE,cAAcs0D,mBAAgC,MAAbrzB,STxC9D,SAFD,SS6CPuzB,aAAeD,UAAUlxJ,QAAqB,MAAb49H,SAAmB,EAAI,GACxD8zB,oBAAsBv4H,QAAQ29D,oBAAoBO,aAClDs6D,eAAiBlsE,YAAYisE,oBAAqB,KAAM,GAA5B,GAAA53I,OAAmCzO,OAAO+tF,YAA1C,yBTxBhB,eS0BdtG,SAAS35D,QAAQ9tB,SAAS06B,OAC1BnL,EAAI56B,MAAM,GAAKmxJ,cAAgB,EAC/BlvJ,EAAI,EACJq2B,MAAQt4B,MAAM,GAAKA,MAAM,IAAM,EAC/Bu4B,OAASk5H,oBAET72H,EAAI,EACJ34B,EAAIjC,MAAM,GAAKmxJ,cAAgB,EAC/B54H,OAASv4B,MAAM,GAAKA,MAAM,IAAM,EAChCs4B,MAAQm5H,mBAKGhsE,YAAYksE,eTjCf,SSiCwC18I,cAAQ2lB,IAAG34B,IAAGq2B,YAAOC,gBAAWoF,WAC9EkyB,MAJU,SAAV+hG,QAAoBhxD,KD9BF,SAAnBnF,iBAAmB3I,UAAQ,OAAI,SAAC4D,SAAU7H,YACnD,IACIlmE,QADAitE,YAEEC,UACAgB,OAAS7P,2BACT7tD,QAAU25D,SAAS35D,QACnB+3H,UAAY/3H,QAAQw1B,OAAOzsC,SAASsjB,QACpCo4F,SRdgB,eQcLzkG,QAAQ9tB,SAAS06B,MAAuB,IAAM,IAIzDrf,UACF6qI,kBAJsBp4H,QAAQwjE,cAAcs0D,mBAAgC,MAAbrzB,SRtClD,QAEC,UQyCdl+E,OAHWwxG,UAAUlxJ,QAAqB,MAAb49H,SAAmB,EAAI,IAKpDjgD,WAEJ+Y,SAASv/F,KAAK0/F,SAAS1sB,GAAG,QAAS,WAC/B,IAAMmM,MAAQwQ,0BACd8O,ShL6LY,SAAdi8D,YAAersE,QAASlP,OAC1B,IAAMw7E,mBAAqBtsE,QAAQnJ,wBACnC,OACIzhD,EAAG07C,MAAM17C,EAAIk3H,mBAAmBl3H,EAChC34B,EAAGq0E,MAAMr0E,EAAI6vJ,mBAAmB7vJ,GgLjMrB4vJ,CAAYpzJ,KAAM63E,MAAMmB,aACnCkG,QAAUrH,MAAMqH,UACjBxT,GAAG,OAAQ,WACV,IAAMmM,MAAQwQ,0BACRwqE,oBAAsB3zE,QAAqB,MAAbigD,SRrDvB,QAEC,UQqDdjgD,QAAQ/iD,GAAK07C,MAAM/jB,GACnBorB,QAAQ17E,GAAKq0E,MAAM9jB,GAEnB9rC,SAAS4qI,oBAAsBA,oBAC/B5qI,SAASkvE,SAAWA,SACpBlvE,SAASmvE,OAASA,OAClB,IAAM16E,SAAWk2I,qBAAqB1zE,SAAWuzE,oBAAWtzB,mBAAYl3G,UAExEiC,SACIxN,SAAU42I,qCACL54H,QAAQ5nB,YAAc4J,UAE3B62I,SAAS,GAEbl/D,SAAS3B,kBAAkBtC,WAAW,GAAIlmE,WAC3CwhD,GAAG,MAAO,WACT,IAAMmM,MAAQwQ,0BACRwqE,oBAAsB3zE,QAAqB,MAAbigD,SRxEvB,QAEC,UQuEdl3G,SAAS4qI,oBAAsBA,oBAC/B5qI,SAASkvE,SAAWA,SACpBlvE,SAASmvE,OAASA,OAClB,IAAM16E,SAAWk2I,qBAAqB/6E,OAAS46E,oBAAWtzB,mBAAYl3G,UACtEiC,SACIxN,SAAU42I,qCACL54H,QAAQ5nB,YAAc4J,UAE3B62I,SAAS,EACT3mJ,QACI4kD,YACIoyB,SAAU,OAItByQ,SAAS3B,kBAAkBtC,WAAW,GAAIlmE,aC3BtC8yE,CAAiB3I,SAAjB2I,CAA2BmF,IAAK,aAI7B9wC,KAAK,IAAK7tD,GACA6tD,KAAK,IAAKl1B,GACVk1B,KTnEJ,QSmEgBx3B,OACZw3B,KTlEH,SSkEgBv3B,0DA5D9B,MVdoB,qEUsBpB,OACIoF,UAAW,uBACXy7D,YTxBe,4BUEd+J,yCAAa,SAAbA,WAAcrQ,UACvB,IAAM35D,QAAU25D,SAAS35D,QACnBuhD,QAAU,SAAVA,QAAWxqE,IAAKytB,UAAW4tD,QAC7B,IAAM6N,YAAcjgE,QAAQ9tB,SAAS+tF,YACrC7T,6BAAcpsD,QAAQ3I,SACLg/B,UADjB,IAAA11C,OAC+Bs/E,YAD/B,oBAEiB3nF,OAAO,SAAAna,GAAC,OAAgC,IAA5B4Y,IAAI8U,KAAKtgB,QAAQpN,EAAEi+B,MAC/Bi6B,UAAU,OACVkrB,QAAQ/8C,UAAW4tD,SAGxC,OACIyb,KAAM,SAAAA,KAAC92F,KAAqB,IAAhB7E,OAAgBxH,UAAA1D,OAAA,QAAA4L,IAAAlI,UAAA,GAAAA,UAAA,MAClBu1F,YAAcjgE,QAAQ9tB,SAAS+tF,YAChClpF,IAAI87E,YAAY7rF,QAAW+P,IAAIi8E,WAAWhsF,QAG3Cu6E,QAAQxqE,IAAIi8E,WAAY9gF,OAAOsyB,WAAP,GAAA7jB,OAAuBs/E,YAAvB,qBAAsD,GAC9E1e,QAAQxqE,IAAIi8E,WAAY9gF,OAAOsyB,WAAP,GAAA7jB,OAAuBs/E,YAAvB,oBAAqD,GAC7E1e,QAAQxqE,IAAI87E,YAAa3gF,OAAOsyB,WAAP,GAAA7jB,OAAuBs/E,YAAvB,oBAAqD,IAJ9E1e,QAAQxqE,IAAIq6E,YAAal/E,OAAOsyB,WAAP,GAAA7jB,OAAuBs/E,YAAvB,oBAAqD,IAOtF64D,SAAU,SAAAA,SAAC/hJ,KAAqB,IAAhB7E,OAAgBxH,UAAA1D,OAAA,QAAA4L,IAAAlI,UAAA,GAAAA,UAAA,MACtBu1F,YAAcjgE,QAAQ9tB,SAAS+tF,YAChClpF,IAAI87E,YAAY7rF,QAAW+P,IAAIi8E,WAAWhsF,QAG3Cu6E,QAAQxqE,IAAI87E,YAAa3gF,OAAOsyB,WAAP,GAAA7jB,OAAuBs/E,YAAvB,qBAAsD,GAC/E1e,QAAQxqE,IAAIi8E,WAAY9gF,OAAOsyB,WAAP,GAAA7jB,OAAuBs/E,YAAvB,qBAAsD,IAH9E1e,QAAQxqE,IAAIq6E,YAAal/E,OAAOsyB,WAAP,GAAA7jB,OAAuBs/E,YAAvB,qBAAsD,6yCCvB1E84D,kEACjB,SAAAA,oBAAwB,IAAAzuD,iBAAAvwF,uKAAAi/I,CAAA1zJ,KAAAyzJ,mBAAA,QAAA5sF,KAAAzhE,UAAA1D,OAARgf,OAAQ,IAAA7X,MAAAg+D,MAAAC,KAAA,EAAAA,KAAAD,KAAAC,OAARpmD,OAAQomD,MAAA1hE,UAAA0hE,MAAA,OACpBryD,MAAAk/I,6CAAA3zJ,MAAAglG,iBAAA4uD,kCAAAH,oBAAA/6J,KAAA6O,MAAAy9F,kBAAAhlG,MAAAqb,OAASqF,WACJo5E,YAAc4K,yCAAWjwF,MAAK4/E,UACnC5/E,MAAKolF,UAAY,WAHGplF,yZADmBklF,0TAWpC9L,aAAc3jE,SAAuB,IAAdvjB,QAAcvB,UAAA1D,OAAA,QAAA4L,IAAAlI,UAAA,GAAAA,UAAA,OAGxCo8F,EAFiBxhG,KAAK85F,YAAYnzF,QAAQ66F,UAAYxhG,KAAK65F,YAElDhM,aAAc7tF,wDANvB,MZXmB,uCaCdy5F,oBACT7sF,QACI4/D,aAAc,SAAAA,aAAC9xC,QAASlhC,OAAV,OAAoB+zE,eAAe7yC,QAAQ00D,YAAe51F,SAE5EuR,QACA+H,aACA+gJ,mBACA31D,aACI1xB,aAAc,SAAAA,aAAC9xC,QAASlhC,OACpB,IAAM0kG,YAAc3wB,eAAe7yC,QAAQk2F,aAAcp3H,OAKzD,OAJC,UAAW,SAAU,UAAUsP,QAAQ,SAACisE,OACrCmpB,YAAYnpB,OAASlxE,KAAK2P,IAAI0qF,YAAYnpB,OAAS,EAAImpB,YAAYnpB,OAAS,EAChD,GAAvBmpB,YAAYjjE,SAAwC,GAAxBijE,YAAYhjE,aAE1CgjE,cAGf0V,gBACAm7C,YACAxtJ,OACIirE,aAAc,SAAAA,aAAC9xC,QAASlhC,OAIpB,OAHAkhC,QAAQqM,QAAQxlC,MAAM/H,OACtBkhC,QAAQo5H,oBACRp5H,QAAQ/xB,QAAQknH,OAAO,QAASr2H,OACzBA,QAGfutC,SACAooE,cACAxmG,SACAorJ,OACIvnF,aAAc,SAAAA,aAAC9xC,QAASlhC,OAAV,OAAoB+zE,eAAe7yC,QAAQs5H,WAAcx6J,SAE3EkgG,aACInvB,aAAc,SAAAA,aAAArpE,KAAG,OAAIA,OC7BhB+yJ,iBACG,aADHA,eAEC,WAGDC,qBACTp6H,OAAQ,GACRD,MAAO,GACPoB,SAAUikB,IACVhkB,UAAWgkB,IACXte,QAAS,EACTy8D,OAAQ,EACR2xD,OAAQ,GAGCmF,cACT9zJ,KAAM,GACNujG,YAAa,SAAAA,YAACzb,KACV,MbCY,SaDRA,KbES,UaFOA,IbCR,OAKE,WaATk7B,gCACT1oB,YAAa,OACby5D,YAAa,QACbC,YAAa,gBACbjyJ,WACIkyJ,QACIj9E,MAAO,YACPk9E,MAAO,cAGfvqJ,MACI3J,MACIujG,YAAa,QACb/pE,MAAO,GACPz3B,UAAW,SAAAA,UAAClB,IAAK3I,EAAGwS,KAAM2vB,SAAf,OAA2BA,QAAQg/D,aAARh/D,CAAsBx5B,OAEhEy/F,MACIzhE,UAAW,cACXpF,OAAQ,GACRD,MAAO,GACP2Y,MAAO,iBACPn3C,KAAM,YAWLm5J,kBAAW,SAAXA,SAAY7zD,MACrB,OAAIA,MAA0B,iBAAVA,KACTnxB,uBAAUmxB,MACZA,uLC/CN,IAAM8zD,2BAAe,SAAfA,aAAgB1tH,OACzB,IAAM2tH,UAAY3tH,MAAM/hB,YAAY3pB,OAKpC,OAASq5J,oBAAWl+I,OAJLuwB,MAAMi9E,eAIO2wC,MAHd5tH,MAAMn6B,SAAS02G,OAAS,EAGHsxC,QAFnBvD,gBAAgBqD,aAYvBG,kCAAsB,SAAtBA,oBAAuBr+I,OAAQm+I,OAIxC,IAHA,IAAMG,mBACAC,eAAiBhnF,kCAAqBv3D,OAAO,GAAIA,OAAO,IAErDje,EAAI,EAAGA,GAAKo8J,MAAOp8J,IACxBu8J,gBAAgBv8J,GAAKw8J,eAAex8J,EAAIo8J,OAE5C,OAAOG,iBAmMEE,gBAAkB,SAAlBA,gBAAmB35J,KAAMwrH,UAAWiB,YAAe,IAAAn1F,KAExDiiI,QAGA/tC,UAHA+tC,QACAF,UAEA7tC,UAFA6tC,UACA3tH,MACA8/E,UADA9/E,MAGAvwB,OAIAsxG,WAJAtxG,OACAy+I,aAGAntC,WAHAmtC,aACAC,UAEAptC,WAFAotC,UACAP,MACA7sC,WADA6sC,MAEEQ,IAAM3+I,OAAgB,UAATnb,KAAmB,EAAImb,OAAO9U,OAAS,GACpD4iC,KAAOqwH,MAAe,UAATt5J,KAAmB,EAAIs5J,MAAMjzJ,OAAS,GAEzD,OAAA0zJ,6BAAAziI,QACK+hI,UAA0B,SAAdA,UAAuB3tH,MAAM6tH,SAASO,KAAOpuH,MAAMsuH,iBAAmBtuH,MAAM6tH,SAASO,MADtGC,6BAAAziI,KAAA,QAEWsiI,aAAa55J,OAFxB+5J,6BAAAziI,KAAA,KAGiB,UAATt3B,KAAmB,EAAI65J,UAAUxzJ,OAAS,GAHlD0zJ,6BAAAziI,KAAA,SAIYwiI,IAAK7wH,OAJjB3R,uWCjOiB2iI,sCAOjB,SAAAA,aAAa75J,0KAAc85J,CAAAv1J,KAAAs1J,cACvBt1J,KAAKgmE,SACLhmE,KAAKw1J,aACLx1J,KAAK+hG,OAAS,KACd/hG,KAAKy1J,WAAa,KAClBz1J,KAAKg0J,OAAS/6J,OAAO4T,UAAWsnJ,cAChCn0J,KAAKw1J,UAAY,KACjBx1J,KAAK01J,cAAgBj6J,aAAam0G,aAClC5vG,KAAK21J,OAASl6J,aAAaikE,MAC3B1/D,KAAKgkF,IAAM15E,cACXtK,KAAK4wH,aAAe33H,OAAO4T,UAAW7M,KAAKglB,YAAY4wI,sBACvD51J,KAAKovF,QAAU7hB,kBAAmBvtE,KAAKglB,YAAYpF,iBAEnDitD,sBAAsB7sE,KAAMy5F,oBAC5Bz5F,KAAK61J,eAAiBptE,qCAAsB3B,6BAAc,QAAf,GAAAzrE,OACpCrb,KAAK4M,SAAS+tF,YADsB,sBAG3C36F,KAAK69I,UAAY,IAAI+T,+BAAe5xJ,MAChC0uF,YAAaz1F,OAAO4T,UAAW+lF,4BAAoBkjE,sCACnDnnE,SAAUyE,kCACVvD,uBAAwBuC,kDACzBvF,sCAAauB,sVAIhB,OAAOpuF,KAAKgkF,gDA2CZ,OAAI5+E,UAAO1D,OACA1B,KAEJA,KAAK69I,sDAUZ,MflFY,yDesFZ,OAAIz4I,UAAM1D,QACN1B,KAAK+1J,aAAL3wJ,UAAA1D,QAAA,OAAA4L,EAAAlI,UAAA,GACOpF,MAEJA,KAAK+1J,mDAUZ,OAAI3wJ,UAAO1D,QACP1B,KAAK+hG,OAAL38F,UAAA1D,QAAA,OAAA4L,EAAAlI,UAAA,GACApF,KAAKojG,SACEpjG,MAEJA,KAAK+hG,+DAWE,IAAAyF,aAIVxnG,KAAK4M,SAFL5C,KAFUw9F,aAEVx9F,KACA2wF,YAHU6M,aAGV7M,YAIJ,OAFA36F,KAAK01J,cAAct9H,SAASqwD,qCAAsB3B,6BAAc,QAAf,GAAAzrE,OAC1Cs/E,YAD0C,uBDnD1B,SAAlBq7D,gBAAmBt7H,QAASnI,KAAMnwB,WAC3C,IAAM2yE,SACAhqE,KAAO2vB,QAAQ3vB,OACf6kG,aAAel1E,QAAQg7H,cAO7B,OALA3qJ,KAAKjC,QAAQ,SAACkB,KAAM/H,OAChB,IAAMzI,MAAQ+4B,KAAOvoB,KAAKuoB,MAAQvoB,KADRisJ,sBAEArmD,aAAaxxE,WAAWh8B,UAAU5I,MAAOyI,MAAO8I,KAAM2vB,UAAxEZ,OAFkBm8H,sBAElBn8H,OAAQD,MAFUo8H,sBAEVp8H,MAChBk7C,MAAM9yE,QAAW63B,OAAQA,OAAS,EAAGD,MAAOA,MAAQ,KAEjDk7C,MC2CIihF,CAAgBh2J,KAAMsxJ,MAAOtnJ,KAAK3J,KAAK+B,yEAU7B,IAAAs2H,kBASb14H,KAAKk+F,cAPLrkE,MAFa6+F,kBAEb7+F,MACAC,OAHa4+F,kBAGb5+F,OACAmB,SAJay9F,kBAIbz9F,SACAC,UALaw9F,kBAKbx9F,UACA0F,QANa83F,kBAMb93F,QACAy8D,OAPaq7B,kBAObr7B,OACA2xD,OARat2B,kBAQbs2B,OAGA1nH,MACAtnC,KAAK4M,SADL06B,MAIE4uH,WAAuB,EAAVt1H,QACbu1H,UAAqB,EAATnH,OACZoH,UAAqB,EAAT/4D,OAElBr9F,KAAK+K,KAAK/K,KAAKq2J,cAAcr2J,KAAK+mC,UAElC,IAAMuvH,WAAat2J,KAAKu2J,gBAClBC,YAAcF,WAAWx8H,OAAS,EAAIw8H,WAAWx8H,OAASo8H,WAAa,EACvEO,WAAaH,WAAWz8H,MAAQq8H,WAGhCQ,YAAc12J,KAAK22J,eAAeT,WAAY5uH,OA1BnCsvH,mBDzCQ,SAApBC,kBAAqBjqJ,OAAQqb,SAAUld,MAChD,IAAIs6F,YAAc,EACdC,WAAa,EACbwxD,eACAj9H,MAAO,EAAGC,OAAQ,GAGlBo8H,WAKAjuI,SALAiuI,WACAO,WAIAxuI,SAJAwuI,WACAC,YAGAzuI,SAHAyuI,YACAF,YAEAvuI,SAFAuuI,YACAv7H,SACAhT,SADAgT,SAGAjxB,KAEA4C,OAFA5C,KACAs9B,MACA16B,OADA06B,MAGAq5D,KAEA32F,KAFA22F,KAGEo2D,gBADF/sJ,KADA3J,KAEyBujG,YACvBozD,cACAC,cACFC,aAAe,EA6EnB,OA5EAR,YAAY5tJ,QAAQ,SAACquJ,WAAY5+J,GAC7B,IAAM6+J,WAAcv9H,MAAO,EAAGC,OAAQ,GAChCu9H,WAAcx9H,MAAO,EAAGC,OAAQ,GAChCxoB,MAAQvG,KAAKxS,Od/HP,SciIRw+J,iBdhIS,UcgImBA,iBAE5BI,WAAWt9H,OAASq8H,WACpBmB,UAAUx9H,OAASvoB,MAAMonB,KAAO,EAAI70B,KAAKkQ,KAAKzC,MAAMonB,KAAO70B,KAAKgwC,IAAM8sD,KAAK9mE,OAASq8H,WACpFgB,aAAerzJ,KAAK6P,IAAI2jJ,UAAUx9H,MAAOq9H,cACzCE,UAAUv9H,MAAQs9H,WAAWt9H,MAAQq9H,aAGrCC,WAAWr9H,OAASj2B,KAAK6P,IAAIyjJ,WAAWr9H,OAAQ6mE,KAAK7mE,QAAUo8H,WAC/DmB,UAAUv9H,OAASq9H,WAAWr9H,OAC9Bs9H,UAAUt9H,OAASq9H,WAAWr9H,SAG9Bq9H,WAAWt9H,MAAQh2B,KAAK6P,IAAIyjJ,WAAWt9H,MAAOvoB,MAAMonB,KAAO,EAAI70B,KAAKkQ,KAAKzC,MAAMonB,KAAO70B,KAAKgwC,IACzF8sD,KAAK9mE,OAASq8H,WAChBmB,UAAUx9H,MAAQs9H,WAAWt9H,MAC7Bu9H,UAAUv9H,MAAQs9H,WAAWt9H,MAC7Bq9H,aAAerzJ,KAAK6P,IAAI2jJ,UAAUx9H,MAAOq9H,cAGzCC,WAAWr9H,QAAUo8H,WACrBmB,UAAUv9H,OAAS6mE,KAAK7mE,OAASo8H,WACjCkB,UAAUt9H,OAASq9H,WAAWr9H,OAASu9H,UAAUv9H,QAGvC,eAAVwN,MACA+9D,YAAcxhG,KAAK6P,IAAI2xF,YAAa+xD,UAAUt9H,SAE9CurE,aAAe+xD,UAAUt9H,OACzBwrE,WAAazhG,KAAK6P,IAAI4xF,WAAY8xD,UAAUv9H,MAAO48H,aAEvDK,eACIj9H,MAAOh2B,KAAK6P,IAAI0jJ,UAAUv9H,MAAOi9H,cAAcj9H,OAC/CC,OAAQj2B,KAAK6P,IAAI0jJ,UAAUt9H,OAAQg9H,cAAch9H,SAErDk9H,WAAW9wJ,KAAKkxJ,WAChBH,WAAW/wJ,KAAKmxJ,aAEpBL,WAAWluJ,QAAQ,SAACsuJ,UAAW7+J,GAC3B,GAAc,eAAV+uC,MACA8vH,UAAUt9H,OAASurE,YACnB4xD,WAAW1+J,GAAGshC,MAAQq9H,ad1Kd,Sc2KJH,iBd1KK,Uc0KuBA,iBAC5BL,YAAYn+J,GAAGuhC,OAASurE,YACxB4xD,WAAW1+J,GAAGuhC,OAASurE,YACvB2xD,WAAWz+J,GAAGshC,MAAQ68H,YAAYn+J,GAAGshC,MAAQq9H,eAE7CR,YAAYn+J,GAAGshC,MAAQq9H,aACvBF,WAAWz+J,GAAGshC,MAAQq9H,aACtBR,YAAYn+J,GAAGshC,MAAQq9H,cAE3B5xD,WAAazhG,KAAK6P,IAAI4xF,WAAa0xD,WAAWz+J,GAAGshC,YAGjD,GADAu9H,UAAUv9H,MAAQh2B,KAAK6P,IAAI4xF,WAAYrqE,UdvLhC,QcwLH87H,iBdrLM,WcqLqBA,gBAC3BL,YAAYn+J,GAAGshC,MAAQyrE,WACvB2xD,WAAW1+J,GAAGshC,MAAQyrE,WACtB4xD,aAAe5xD,eACZ,CACH,IAAMkS,WAAak/C,YAAYn+J,GAAGshC,MAC5By9H,cAAiBR,cAAcj9H,MAAQq9H,aAC7CD,WAAW1+J,GAAGshC,MAAQq9H,aACtBF,WAAWz+J,GAAGshC,MAAQ68H,YAAYn+J,GAAGshC,MAAQq9H,aAC7CR,YAAYn+J,GAAGshC,MAAQh2B,KAAK6P,IAAI8jG,WAAY8/C,eAC5ChyD,WAAazhG,KAAK6P,IAAI4xF,WAAY8xD,UAAUv9H,UAIxDyrE,WAAazhG,KAAKqnB,KAAKrnB,KAAK6P,IAAI4xF,WAAYmxD,aAAeP,WAC3D7wD,aAAemxD,YAAcN,YAEpB7wD,YADTA,YAAcxhG,KAAKqnB,KAAKm6E,aACFC,sBAAY0xD,sBAAYC,sBAAYH,4BAAeI,2BC/BjEL,CAAkB72J,KAAK4M,UACzBspJ,sBAAYO,sBAAYC,wBAAaF,wBAAav7H,kBAAUC,qBAAal7B,KAAK+K,QAF5Es6F,YA5BauxD,mBA4BbvxD,YAAaC,WA5BAsxD,mBA4BAtxD,WAAY0xD,WA5BZJ,mBA4BYI,WAAYC,WA5BxBL,mBA4BwBK,WAAYH,cA5BpCF,mBA4BoCE,cAAeI,aA5BnDN,mBA4BmDM,aAiBpE,OAbAl3J,KAAKk+F,aACDrkE,MAAOh2B,KAAK6P,IAAI4xF,WAAYzrE,OAASu8H,UAAYD,UACjDr8H,OAAQj2B,KAAK6P,IAAI2xF,YAAavrE,QAAUs8H,UAAYD,UACpDO,wBACAO,sBACAD,sBACAF,4BACAI,0BACAK,aACI19H,MAAOh2B,KAAK2P,IAAIynB,SAAUj7B,KAAKk+F,cAAcrkE,OAASu8H,UAAYD,UAClEr8H,OAAQ08H,eAGTx2J,2DAYP,OAFAA,KAAK01J,cAAct9H,SAASqwD,qCAAsB3B,6BAAc,QAAf,GAAAzrE,OACNrb,KAAK4M,SAAS+tF,YADR,mBAE1C36F,KAAK01J,cAAct3H,WAAWp+B,KAAK+zJ,QAAQ1zJ,KAAOL,KAAK+zJ,QAAQ1zJ,KAAO,oDAUpE02B,WAAW,IAAAygI,mBACsCx3J,KAAKk+F,cAAvDq5D,YADYC,mBACZD,YAAavI,OADDwI,mBACCxI,OAAQpuH,QADT42H,mBACS52H,QAAS/G,MADlB29H,mBACkB39H,MAAOoB,SADzBu8H,mBACyBv8H,SADzBk+E,cAEiBn5G,KAAK4M,SAAlCwnJ,YAFYj7C,cAEZi7C,YAAaC,YAFDl7C,cAECk7C,YACrB,ODvLoB,SAAfoD,aAAgB1gI,UAAWg9H,MAAO71D,YAAatxF,QACxD,IAAM6pJ,WAAa5yJ,KAAK2P,IAAI0qF,YAAYjjE,SAAUijE,YAAYrkE,OAExD69H,eAAiB1wE,YAAYjwD,UAAW,SAAU,GAAtB,GAAA1b,OAA6BzO,OAAO+tF,YAApC,kBACzB5iE,MdnDQ,QckDM,GAAA1c,OACEo7I,WADF,OAEd1+H,MdlDS,ScgDK,GAAA1c,OAEG6iF,YAAYpkE,OAFf,OAGd/B,MAAM,gBAHQ,GAAA1c,OAGY6iF,YAAY8wD,OAHxB,OAAA3zI,OAGoCzO,OAAOwnJ,YAH3C,KAAA/4I,OAG0DzO,OAAOynJ,cAC/Et8H,MAAM,aAAcg8H,MAAMnwD,uBAAuB9uF,SAClDi/I,MAAMnwD,YAAYh3F,OAAO6zB,UAAYszH,MAAMnwD,aACnD,OAAO5c,YAAY0wE,eAAgB,MAAO,GAAxB,GAAAr8I,OAA+BzO,OAAO+tF,YAAtC,uBACD5iE,MdzDA,QcwDV,GAAA1c,OAC0Bo7I,WAD1B,OAEU1+H,MdzDG,YcuDb,GAAA1c,OAE6Bo7I,WAF7B,OAGU1+H,MdzDC,ScyDa,QACdA,MAAM,cAAe,GACrBA,MAAM,UALhB,GAAA1c,OAK8B6iF,YAAYt9D,QAL1C,OAMUvgC,KAAK0zJ,MAAM1zJ,MACX03B,MAAM,aAAc,UACpBjJ,OCsKN2oI,CAAa1gI,UAAW/2B,KAAK+zJ,SAChCj6H,OAAQy9H,YAAYz9H,OACpBD,YACAoB,kBACA+zH,cACApuH,gBACAwzH,wBACAC,yBACDr0J,KAAK4M,kDAWR,IAgBI+qJ,eAhBEtjE,SAAWr0F,KAAKq0F,WADhBujE,cAOF53J,KAAK4M,SAJL+tF,YAHEi9D,cAGFj9D,YACAy5D,YAJEwD,cAIFxD,YACAC,YALEuD,cAKFvD,YACA5zH,SANEm3H,cAMFn3H,SANEo3H,mBAeF73J,KAAKk+F,cANLjjE,SATE48H,mBASF58H,SACAC,UAVE28H,mBAUF38H,UACArB,MAXEg+H,mBAWFh+H,MACAC,OAZE+9H,mBAYF/9H,OACAujE,OAbEw6D,mBAaFx6D,OACA2xD,OAdE6I,mBAcF7I,OAEE6E,gBAAkB7sE,YAAYF,6BAAc9mF,KAAK+xB,SAAU,OAAQ,GAAtC,GAAA1W,OAA6Cs/E,YAA7C,gBAEnC,OAAQl6D,UACR,IfxPW,MeyPPk3H,eAAc,UAAAt8I,OftPJ,UeuPV,MACJ,If1PY,Oe2PRs8I,eAAc,UAAAt8I,Of1PL,Se2PT,MACJ,If3Pc,Se4PVs8I,eAAc,UAAAt8I,Of/PP,OegQP,MACJ,QACIs8I,eAAc,UAAAt8I,OfjQN,Qe+QZ,OAZAw4I,gBAAgB53E,QAAhB,GAAA5gE,OAA2Bs/E,YAA3B,gBAAAt/E,OAAqDrb,KAAKgkF,MAAO,GACjE6vE,gBAAgB97H,MAAM,QAAS,QAE/B87H,gBAAgB97H,MAAM,QAAtB,GAAA1c,OAAkCxX,KAAK2P,IAAIynB,SAAUpB,OAAkB,EAATwjE,OAA9D,OACiBtlE,MAAM,SADvB,GAAA1c,OACoCxX,KAAK2P,IAAI0nB,UAAWpB,QAAmB,EAATujE,OADlE,OAEiBtlE,MAFjB,GAAA1c,OAE0Bs8I,gBAF1B,GAAAt8I,OAE+CgiF,OAF/C,OAGiBtlE,MAAM,SAHvB,GAAA1c,OAGoC2zI,OAHpC,OAAA3zI,OAGgD+4I,YAHhD,KAAA/4I,OAG+Dg5I,cAC/Dr0J,KAAK6zJ,gBAAgBA,gBAAgB/kI,QAGrC9uB,KAAK83J,YAAYjE,iBACjBx/D,SAASolD,mBAAmBz5I,KAAK+K,OAAO9C,IAAI,SAAApP,GAAC,OAAIA,EAAEi+B,MAC5C+8H,gFASU9oJ,MACjB,IAAM+H,UAAY9S,KAAK8S,YAEvB,MAAa,YADA9S,KAAK+uJ,WAAW5xI,UAAUzR,OAAO,GAAGrQ,sLAE7C08J,IACKjlJ,UAAY/H,KAAKxJ,SAGjBuR,YAAa/H,KAAKymJ,iDArPhB/1J,cACX,OAAO,IAAI65J,aAAa75J,oEAWxB,OAAO4nH,+FAWP,OAAO6wC,2NC9Ef,IAAM8D,mBAAiBC,+BAAAC,sBhBeG,cgBblBC,SAAU,SAAAA,SAAAptJ,MAAI,OACVgQ,KAAM,GACNK,OAAQrQ,OAEZqtJ,sBAAuB,SAAAA,sBAACl6D,aAAgB,IAEhC84D,WAEA94D,YAFA84D,WACAn9H,MACAqkE,YADArkE,MAEJ,OACI9e,KACI8e,MAAK,GAAAxe,OAAKwe,MAAL,MACL+G,QAAO,GAAAvlB,OAAK,EAAL,OAEXD,QACIye,MAAO,SAAAA,MAAChhC,EAAGN,GAAJ,SAAA8iB,OAAa27I,WAAWz+J,GAAGshC,MAA3B,OACP+G,QAAO,GAAAvlB,OAAK,EAAL,SAInBg9I,kBAAmB,SAAAA,kBAACn6D,aAAgB,IACxB44D,cAA0B54D,YAA1B44D,cACR,OACIwB,WAF8Bp6D,YAAXpkE,OAGnBy+H,UAAWzB,cAAcj9H,MACzB2+H,aACIC,YAAY,EACZC,UAAU,OA7BPT,+BAAAC,mBhBgBC,YgBmBhBC,SAAU,SAAAA,SAAAptJ,MAAI,OACVgQ,IAAKhQ,KACLqQ,OAAQ,SAAAA,OAAAviB,GAAC,OAAKA,MAElBu/J,sBAAuB,SAAAA,sBAACl6D,YAAatxF,QAAW,IAExCitB,MACAqkE,YADArkE,MAEI+G,QAAYh0B,OAAZg0B,QAER,OACI7lB,KACI8e,MAAK,GAAAxe,OAAKwe,MAAL,MACL+G,QAAO,GAAAvlB,OAAKulB,QAAL,OAEXxlB,QACIye,MAAK,GAAAxe,OAAKwe,MAAL,MACL+G,QAAO,GAAAvlB,OAAK,EAAL,SAInBg9I,kBAAmB,SAAAA,kBAACn6D,aAAgB,IACxB44D,cAAyB54D,YAAzB44D,cAAej9H,MAAUqkE,YAAVrkE,MACvB,OACIy+H,WAAYxB,cAAch9H,OAC1By+H,UAAW1+H,MACX2+H,aACIC,YAAY,EACZC,UAAU,OA/DPR,oBAsEVS,gBAAcV,+BAAAW,mBhB1DP,OgB2DRZ,kBAAiB,UADFC,+BAAAW,gBhBzDN,QgB2DRZ,kBAAiB,UAFHC,+BAAAW,gBhB3DR,MgB8DRZ,kBAAiB,YAHDC,+BAAAW,gBhBxDL,SgB4DRZ,kBAAiB,YAJJY,iBAOdC,cAAYZ,+BAAAa,iBhBjEL,OAcD,OgBmDMb,+BAAAa,chBhEJ,QAUA,SgBsDIb,+BAAAa,chBlEN,MAMG,UgB4DGb,+BAAAa,chB/DH,SAGA,UgB4DGA,eAgBZC,WAASd,+BAAAe,chBjFF,QgBkFP1H,MhB1EQ,UgByEC2G,+BAAAe,WhBhFD,SAOA,QgB2EA1H,QAFC2G,+BAAAe,WhBlFH,OgBqFP1H,MhB5ES,UgByEC2G,+BAAAe,WhB/EA,UAMD,QgB6EC1H,QAJA0H,YClDTC,8BAAuB,SAAvBA,qBAAwBv+H,QAAS3D,UAAW4jE,YAAa5vF,MAClE,IAAImuJ,UACAC,WACAC,cACAC,aACEn7D,YAAcxjE,QAAQwjE,cAEpBb,OAOAa,YAPAb,OACA2xD,OAMA9wD,YANA8wD,OACAuI,YAKAr5D,YALAq5D,YACA19H,MAIAqkE,YAJArkE,MACAC,OAGAokE,YAHApkE,OACAmB,SAEAijE,YAFAjjE,SACAC,UACAgjE,YADAhjE,UAGRi+H,WAAar/H,QAAUy9H,YAAYz9H,OAAS,EAAIujE,OAAS,EAAI2xD,QAC7DkK,UAAYr/H,OAAkB,EAATwjE,OAAsB,EAAT2xD,QAElCoK,cAAgBl+H,WAAaq8H,YAAYz9H,OAAkB,EAATujE,OAAsB,EAAT2xD,QAC/DqK,aAAep+H,UAAqB,EAAToiE,OAAsB,EAAT2xD,QAExC,IAAIsK,WAAatyE,YAAYjwD,UAAW,OAAQ,GAApB,GAAA1b,OAA2Bs/E,YAA3B,iBAiB5B,OAhBA2+D,WAAWx7I,OAAX,IAAAzC,OAAsBs/E,YAAtB,qBAAqDn1D,SAEjD6zH,cAAgBA,aAAeH,YAC/BI,WAAaA,WAAWvhI,MjB7EX,QiB6EA,GAAA1c,OAA2Bg+I,aAA3B,OAA6CthI,MAAM,aAAc,WAG9EqhI,eAAiBA,cAAgBD,YACjCG,WAAWvhI,MjB/EG,SiB+Ed,GAAA1c,OAA4B+9I,cAA5B,OAA+CrhI,MAAM,aAAc,WAGvEuhI,WAAatyE,YAAYsyE,WAAY,OAAQ,GAArB,GAAAj+I,OAA4Bs/E,YAA5B,sBAEb5iE,MjBtFM,QiBsFjB,GAAA1c,OAA2B69I,UAA3B,OACAI,WAAWvhI,MjBrFO,SiBqFlB,GAAA1c,OAA4B89I,WAA5B,QAGSI,WA1EoB,SAApBC,kBAAqBziI,UAAWhsB,KAAM0uJ,gBAC/C,IAAMv7D,YAAcu7D,eAAev7D,cAC7BtxF,OAAS6sJ,eAAe7sJ,SAE1BoqJ,WACA94D,YADA84D,WAGAr8D,YAEA/tF,OAFA+tF,YACAl6D,SACA7zB,OADA6zB,SAEEi5H,YAAcf,eAAel4H,UAC7B03H,SAAWuB,YAAYvB,SAASptJ,MAChCkd,SAAWyxI,YAAYtB,sBAAsBl6D,YAAatxF,QAE1D4N,KAAOwsE,YAAYjwD,UAAW,MAAOohI,SAASp9I,IAA5B,GAAAM,OAAoCs/E,YAApC,gBACxBngF,KAAKud,MjB7Ba,SiB6BC,SAACl/B,EAAGN,GAAJ,SAAA8iB,OAAa27I,WAAWz+J,GAAGuhC,OAA3B,QACnBtf,KAAKud,MjBhCY,QiBgCC9P,SAASlN,IAAI8e,OAC/Brf,KAAKud,MAAM,UAAW9P,SAASlN,IAAI6lB,SAEnC,IAAMrnB,QAAUytE,YAAYxsE,KAAM,MAAO29I,SAAS/8I,OAAvB,GAAAC,OAAkCs/E,YAAlC,oBAI3B,OAHAphF,QAAQwe,MjBpCS,QiBoCI9P,SAAS7M,OAAOye,OACrCtgB,QAAQwe,MAAM,UAAW9P,SAAS7M,OAAOwlB,SAElCrnB,QAkDYigJ,CAAkBF,WAAYvuJ,KAAM2vB,WAW9Ci/H,4BAAqB,SAArBA,mBAAsBj/H,QAAS3D,WAAc,IAAAm9E,gBAIlDx5E,QAAQ9tB,SAFR+tF,YAFkDuZ,gBAElDvZ,YAGEo8D,gBALgD7iD,gBAGlDlqG,KAEyB3J,KAAKujG,YAE5BrzB,MAAQwoF,UAAUhC,iBAClB6C,aAAe5yE,YAAYjwD,UAAW,MAAO,SAACl+B,EAAGN,GAAJ,OAAUg4E,MAAMtoE,IAAI,SAAAxN,GAAC,OAAKA,EAAG5B,EAAE4B,GAAI5B,EAAE25C,MAAO35C,EAAE6/B,KAC7F7/B,EAAEW,MAAOkhC,QAAQ5nB,YAAava,MADF,GAAA8iB,OACUs/E,YADV,sBAG1Bk/D,WAAahB,aAAa9B,iBAGhC,OADA6C,aAAa39E,QAAQ49E,YAAY,IACxBD,4BASAE,wBAAiB,SAAjBA,eAAkB9vJ,KAAM+vJ,YAAaC,eAAgBt/H,SAAY,IAAAu/H,qBAMtEv/H,QAAQwjE,cAJRt9D,QAFsEq5H,qBAEtEr5H,QACA81H,YAHsEuD,qBAGtEvD,YACAO,WAJsEgD,qBAItEhD,WACAC,aALsE+C,qBAKtE/C,aAEEl0H,KAAOg3H,eAA4B,GAAVp5H,QAAc,EAE7C,OAAI52B,KAAK,KAAOsnJ,MACZ,GAAAj2I,OAAUq7I,YAAY1sJ,KAAK,IAAI+vJ,aAA/B,MAEJ,GAAA1+I,OAA0B,UAAhB0+I,aAA4BC,eAAgC/C,WAAWjtJ,KAAK,IAAI+vJ,aAAe/2H,KAAlDk0H,aAAvD,OA+ESgD,oBAAa,SAAbA,WAAcv5D,KAAM5pE,UAAWzlB,MAAOopB,SAAY,IAEvDigE,YAMAjgE,QANAigE,YACA29D,WAKA59H,QALA49H,WACAC,UAIA79H,QAJA69H,UACArB,aAGAx8H,QAHAw8H,aACAt2H,QAEAlG,QAFAkG,QACA4R,MACA9X,QADA8X,MAEE9P,IAAMskD,YAAYjwD,UAAW,MAAO,SAAAxc,GAAC,OAAKA,IAAzB,GAAAc,OAAgCs/E,YAAhC,qBACtBtpC,KjBhOgB,QiBgOJ6lG,cACZ7lG,KjB/NiB,SiB+NJinG,YACbvgI,MjBlOgB,QiB+NL,GAAA1c,OAGK67I,aAHL,OAIXn/H,MjBjOiB,SiB6NN,GAAA1c,OAIMi9I,WAJN,OjBjMI,SiBuMZ33D,KAxEY,SAAd+6B,YAAwB7iI,EAAGwuB,KAAM8yI,YAAatgI,MAAOC,QACvD,IAAM6hG,aAAet0G,KAEfqR,KAAO7/B,EAAE,IAAMgL,KAAK2P,IAAIqmB,MAAOC,QAAUj2B,KAAKgwC,GAC9C0sD,MAAQ1nG,EAAE,IAAMshK,YAEtB,GAAI55D,iBAAiB/Z,QACjB+Z,MAAMnW,KAAK,SAAC/7D,KAER,OADAx1B,EAAE0nG,MAAQlyE,IACHqtG,YAAY7iI,EAAGwuB,YAEvB,IAAIk5E,iBAAiBq7B,QAAS,CACjC,IAAIC,SAAWt7B,MAAM7oB,WAAU,GAE/B,GAAwC,QAApCmkD,SAASC,SAASr6H,cAAyB,CAC3C,IAAMs6H,IAAMF,SAASE,KAAOF,SAASG,MACrCH,SAAWvlG,SAASuM,gBAAgB,6BAA8B,UACzDd,aAAa,OAAQg6F,KAIlC,OAFqBj1C,6BAAc+0C,UACtBxqE,KAAK,YAAlB,SAAAh2C,OAAwCqd,KAAO,IAA/C,MACOouD,6BAAc60C,aAAa7sG,OAAOgT,YAAY+5F,WAErD,IAAIK,QADD,GAAqB,iBAAV37B,MAOd,OAFI27B,QAxCM,SAAZC,UAAahyH,KACf,SAAI,0CAA0CtM,KAAKsM,MAAQ,UAAUtM,KAAKsM,MAAQA,IAAIzI,OAAS,GAoCvFy6H,CAAU57B,OACAA,MAEAi0D,kBAASj0D,OAAO7nE,KAAKA,KAArB87H,GAEPxtE,YAAY20C,aAAc,OAAQ,SAAA5wH,MAAI,OAAKA,QAAOsmD,KAAK,IAAK6qE,SAGvE,OADArjI,EAAE,GAAK,SACA6iI,YAAY7iI,EAAGwuB,KAAM,UA0CxBq0G,CAAYpqH,MADE01E,YAAYtkD,IAAK,KAAMpxB,MAAM,IAAlB,GAAA+J,OAA0Bs/E,YAA1B,iBACCrpF,MAAM,GAAK,SAAW,SAAUinJ,UAAWD,YACpDjnG,KAAK,YADtB,aAAAh2C,OACgD67I,aAAe,EAAIt2H,QADnE,KAAAvlB,OAC8Ei9I,WAAa,EAD3F,MAEiBjnG,KAAK,OAAQ//C,MAAM,IAAMkhC,OAE1Cw0C,YAAYtkD,IjB7MA,QiB6MYpxB,MAAM,IAAnB,GAAA+J,OAA2Bs/E,YAA3B,iBACMtpC,KAAK,IAAK,GACVA,KAAK,IAAK,GACVA,KjB9OJ,QiB8OgB6lG,cACZ7lG,KjB7OH,SiB6OgBinG,YACbjnG,KAAK,OAAQ//C,MAAM,IAAMkhC,i+ECrO7B4nH,0wBAAuB9E,iVAgCzBvuH,OAAO,IAAAszH,cACqB5F,2BAAa1tH,OAA5C2tH,UADU2F,cACV3F,UAAWl+I,OADD6jJ,cACC7jJ,OAAQo+I,QADTyF,cACSzF,QACvBE,gBAAkBwF,kCAAI,IAAI/jJ,IAAIC,SAC5BlL,MAAQtL,KAAK+uJ,WAAWngJ,gBAAgBhG,OAAO,GAHnC2xJ,cAIQjvJ,MAAMI,SAAxBrQ,KAJUk/J,cAIVl/J,KAAM0a,QAJIwkJ,cAIJxkJ,QA6Bd,OA3BA++I,gBAAkBA,gBAAgB7sJ,IAAI,SAACktJ,IAAK58J,GAAM,IAAAo6B,KAC1Cn5B,MAAQ,EACR+H,MAAQ,EACNiwJ,OAASsD,gBAAgBv8J,GAC/B,GAAI8C,OAAS8D,yBAAUC,QAAS,CAG5BmC,OAFA/H,QAAUs7J,gBAAgBv8J,IAAImlD,QAAQ,IACtBo3G,gBAAgBv8J,EAAI,IAAMu8J,gBAAgBv8J,EAAI,IAAMiB,OAC5CkkD,QAAQ,QAC7B,CACH,IAAI05D,UAAYo6C,OACZz7I,UAAYnX,gCAAiBE,WAC7Bs4G,UAAYzjC,4BAAemhF,gBAAgBv8J,GAAI+S,MAAMw6H,iCAEzDtsI,MAAQ49G,UACR71G,OAAS61G,WAEb,OAAAojD,+BAAA7nI,QACK+hI,UAAY3tH,MAAM6tH,SAASO,MADhCqF,+BAAA7nI,KAAA,QAEIn5B,OAFJghK,+BAAA7nI,KAAA,KAGQp6B,GAHRiiK,+BAAA7nI,KAAA,QAIIpxB,OAJJi5J,+BAAA7nI,KAAA,SAKI6+H,QALJ7+H,OAOD3f,OAAO,SAAAna,GAAC,OAAgB,OAAZA,EAAEW,QAEjBs7J,gBlBvCY,SkBuCMJ,UAAqBI,gBAAgBvkJ,KAAK,SAAC5V,EAAGyI,GAAJ,OAAUzI,EAAE+5J,WAAatxJ,EAAEsxJ,aACjFI,wDAYN,IAAMzgE,SAAWr0F,KAAKq0F,WAChBtpF,KAAO/K,KAAK+K,OACV4vF,YAAgB36F,KAAK4M,SAArB+tF,YACFk5D,gBAAkB4G,oBAAAC,+BAAAN,eAAA//J,WAAA,SAAA2F,MAAAtH,KAAAsH,KAAaA,KAAK+xB,SAElCwnI,WAAeN,8BAAqBj5J,KAAM6zJ,gBAAiBl5D,YAAa5vF,MAAxEwuJ,WAMR,ODwJ0B,SAArBoB,mBAAsBjgI,QAAS3D,WACxC,IAAM64E,aAAel1E,QAAQg7H,cADyBvjD,iBAKlDz3E,QAAQ9tB,SAFL5C,KAH+CmoG,iBAG/CnoG,KACA2wF,YAJ+CwX,iBAI/CxX,YAJ+CigE,sBASlDlgI,QAAQwjE,cAFRg5D,aAPkD0D,sBAOlD1D,aACAt2H,QARkDg6H,sBAQlDh6H,QARkDi6H,WAe9C7wJ,KAAK22F,KAJE43D,UAXuCsC,WAW9ChhI,MACQy+H,WAZsCuC,WAY9C/gI,OACA0Y,MAb8CqoH,WAa9CroH,MACAtT,UAd8C27H,WAc9C37H,UAGF63H,gBAAkB/sJ,KAAK3J,KAAKujG,YAC5BxhG,UAAY4H,KAAK3J,KAAK+B,UAE5BwtG,aAAa70E,uBAAsB,GACnC4sD,WAAW5wD,WACP8C,MAAO,SAAAA,MAAAhhC,GAAC,OAAIihK,wBAAejhK,EjBhRd,SiBgRwB,EAAO6hC,UAC5CZ,OAAQ,SAAAA,OAAAjhC,GAAC,OAAIihK,wBAAejhK,EjB/Qd,UiB+QyB,EAAO6hC,UAC9CogI,ajBzPc,SiB0Pdl6H,QAAO,GAAAvlB,OAAKulB,QAAL,QAGXgvE,aAAax3E,SAASsC,QAAQm7H,gBAC9B,IAAMnnF,QAAU33C,UAAUhsB,OAC1BgsB,UAAUwO,KAAK,SAAU1sC,EAAGN,GACpBM,EAAE,KAAOy4J,MACTxqE,6BAAc9mF,MAAMK,KAAK+B,UAAUvJ,EAAE,GAAIN,EAAGm2E,QAASh0C,UACpC3C,MADjB,WAAA1c,OjBrQS,UiBsQyB07I,gBjBvQ1B,OACC,SiBsQqE,QAG9EjwE,6BAAc9mF,MAAMi8E,QAApB,GAAA5gE,OAA+Bs/E,YAA/B,KAAAt/E,OAA8C6jB,YAAa,GAC3D4nD,6BAAc9mF,MAAMi8E,QAApB,GAAA5gE,OAA+Bs/E,YAA/B,KAAAt/E,OAA8C6jB,UAA9C,KAAA7jB,OAA2D9iB,IAAK,GAChE2hK,oBAAW,SAAUpzE,6BAAc9mF,MAAOnH,GACtC8hG,wBACA49D,oBAEAD,sBACApB,0BACAt2H,gBACA4R,iBCzMRmoH,CAAmB36J,KADM25J,4BAAmB35J,KAAMu5J,YAA1CK,cAER/F,gBAAgB9iG,UAAU,OAAOh5B,MAAM,QlB3E3B,QkB4EZs8D,SAAS/B,yBACT+B,SAASolD,mBAAmBz5I,KAAK+K,OAAO9C,IAAI,SAAApP,GAAC,OAAIA,EAAEi+B,MAC5C+8H,wDA7EIp4J,cACX,OAAO,IAAI2+J,eAAe3+J,kDAW1B,MlBGgB,iCmB9BXs/J,kBAAoB,SAApBA,kBAAqBhwJ,MAC9B,MAA6B,iBAAlBA,KAAK,GAAGvR,MACRuR,KAAKgH,OAAO,SAACipJ,YAAaC,cAAd,OACdp3J,KAAK2P,IAAIynJ,aAAazhK,MAAOwhK,YAAY,IAAKn3J,KAAK6P,IAAIunJ,aAAazhK,MAAOwhK,YAAY,OACnFxyJ,OAAO0yJ,UAAW1yJ,OAAO2yJ,YAE/BpwJ,KAAK9C,IAAI,SAAAxN,GAAC,OAAIA,EAAEjB,SA+DrBy/J,qCAAuB,SAAvBA,qBAAwBliI,UAAW4jE,YAAa5vF,MAClD,IAAMyL,OAASukJ,kBAAkBhwJ,MAC3B8oJ,gBAAkB7sE,YAAYjwD,UAAW,OAAQ,GAApB,GAAA1b,OAA2Bs/E,YAA3B,iBAC7BygE,cAAgBp0E,YAAY6sE,gBAAiB,OAAQ,GAA1B,GAAAx4I,OAAiCs/E,YAAjC,cAC3B0gE,eAAiBr0E,YAAYo0E,cAAe,KAAM,GAAtB,GAAA//I,OAA6Bs/E,YAA7B,oBAIlC,OACIk5D,gCACAwH,8BACAD,4BACAE,eAhE0B,SAArBC,mBAAsBxkI,UAAWhsB,KAAMyL,QAChD,IAAMssH,KAAO97C,YAAYjwD,UAAW,QAAS,IACvCukI,eAAiBt0E,YAAY87C,KAAM,kBAAmB,IAC/CzxE,KAAK,KAAM,mBACXA,KAAK,KAAM,MACXA,KAAK,KAAM,MAIxB,OAHA21B,YAAYs0E,eAAgB,OAAQvwJ,KAAM,iBACzBsmD,KAAK,SAAU,SAAAx4D,GAAC,SAAAwiB,OAA+B,KAAvBxiB,EAAEW,MAAQgd,OAAO,KAAaA,OAAO,GAAKA,OAAO,IAAzD,OAChB66C,KAAK,aAAc,SAAAx4D,GAAC,OAAIA,EAAE25C,QACpC8oH,eAgDgBC,CAAmBH,cAAerwJ,KAAMyL,QAQ3DglJ,WAPex0E,YAAYq0E,eAAgB,QAAS,GAA1B,GAAAhgJ,OAAiCs/E,YAAjC,qBAmBrBmd,2BAAa,SAAbA,WAAcp9E,QAAS3D,UAAW+C,OAAQD,OACnD,IAAMq2B,KAAOx1B,QAAQw1B,OAErBA,KAAK05F,kBAAkB/vH,MAAOC,QAC9Bo2B,KAAKkzC,OAAOrsE,UAAUjI,QACtBohC,KAAKzsC,SAAS2/E,m+ECnGGq4D,0wBAAuBnG,iUAiCpC,OAAIlwJ,UAAK1D,QACL1B,KAAKi2G,MAAL7wG,UAAA1D,QAAA,OAAA4L,EAAAlI,UAAA,GACOpF,MAEJA,KAAKi2G,0DAUDlvE,OACX,IAAI+tH,mBADcuF,cAE4B5F,2BAAa1tH,OAAnD2tH,UAFU2F,cAEV3F,UAAWl+I,OAFD6jJ,cAEC7jJ,OAAQm+I,MAFT0F,cAES1F,MAAOC,QAFhByF,cAEgBzF,QAelC,OAbID,iBAAiB9rJ,OACb2N,OAAO,GAAKm+I,MAAM,KAClBG,gBAAgB,GAAKt+I,OAAO,IAEhCs+I,mBAAez5I,OAAAqgJ,kCAAO5G,iBAAP4G,kCAA2B/G,QACtCn+I,OAAOA,OAAO9U,OAAS,GAAKizJ,MAAMA,MAAMjzJ,OAAS,IACjDozJ,gBAAgB5uJ,KAAKsQ,OAAO,KAGhCs+I,gBAAkBD,kCAAoBr+I,OAAQm+I,MAAQ,IAE1DG,gBAAkB4G,kCAAI,IAAInlJ,IAAIu+I,kBAAkBvkJ,KAAK,SAAC5V,EAAGyI,GAAJ,OAAUzI,EAAIyI,KAE5C6E,IAAI,SAACktJ,IAAK58J,GAAM,IAAAo6B,KAC7Bn5B,MAAQs7J,gBAAgBv8J,GAC9B,OAAAojK,+BAAAhpI,QACK+hI,UpBtCG,SoBsCSA,UAAqB3tH,MAAM6tH,SAASO,KAAOpuH,MAAMsuH,iBACxDtuH,MAAM6tH,SAAS/wJ,KAAK8M,MAAMwkJ,OAFpCwG,+BAAAhpI,KAAA,SAGYn5B,MAAMkkD,QAAQ,IAH1Bi+G,+BAAAhpI,KAAA,KAIQp6B,GAJRo6B,OAMD3f,OAAO,SAAAna,GAAC,OAAgB,OAAZA,EAAEW,8DAWL08J,YACZl2J,KAAK4M,QACD5C,MACI3J,MACIujG,YAAa5jG,KAAK4M,SAAS6zB,aAIvC,IAAMyvB,KDvDY,SAAbgmD,WAAcx7E,SACvB,IAAM3vB,KAAO2vB,QAAQ3vB,OACbu8B,MAAU5M,QAAQ9tB,SAAlB06B,MACFu8G,SAAWnpH,QAAQi7H,OAAO9R,SAC1B+X,QAAU,IAAIjjD,8BAChB7hF,GAAE,UAAAzb,OAAYqf,QAAQspD,KACtB4f,YAAat8D,QAAU2sH,enB3BV,QACC,SmB2Bdl8H,MAAO2C,QAAQm7H,eACfl2G,MAAM,EACN0vD,cAAc,EACdh/C,WAAYtlD,KAAK9C,IAAI,SAAApP,GAAC,OAAIA,EAAEW,QAC5Bw1G,eAAe,EACfC,QACIC,SAAU,KAEbU,aAAcl1E,QAAQg7H,gBAI3B,OAFAkG,QAAQplJ,OAAOukJ,kBAAkBhwJ,OACjC6wJ,QAAQr6J,OAAO,EAAG,KACX,IAAIsiJ,UAAWpgI,OAAOm4I,SAAShvJ,QAClCywF,QAAUv5D,KAAM,EAAGgsB,OAAQ,EAAGpvB,IAAK,EAAGqD,MAAO,KCmChCmyE,CAAWl2G,MAClB67J,UAAY3rG,KAAKs9F,kBACjBz4E,OAAUl7C,MAAOgiI,UAAUhiI,MAAQq8H,WAAYp8H,OAAQ+hI,UAAU/hI,OAASo8H,YAC1E4F,iBAAmB5rG,KAAKzsC,SAASjN,SAAS9U,OAC1Cg1J,YAAc,IAAI7tJ,MAAMizJ,kBAAkBn/G,KAAKo4B,OAGrD,OADA/0E,KAAKkwD,KAAKA,MACHwmG,0EAUP,OACI99D,aAAc54F,KAAK+7J,4DAYvB,IAAM1nE,SAAWr0F,KAAKq0F,WAChBw/D,gBAAkBmI,oBAAAC,+BAAAR,eAAAphK,WAAA,SAAA2F,MAAAtH,KAAAsH,KAAaA,KAAK+xB,SAM1C,ODpBsB,SAAjBmqI,eAAkBxhI,QAAS3D,WACpC,IAAIoiI,WACAD,UAF8C/mD,iBAO9Cz3E,QAAQ9tB,SAHR06B,MAJ8C6qE,iBAI9C7qE,MACAqzD,YAL8CwX,iBAK9CxX,YACA3wF,KAN8CmoG,iBAM9CnoG,KAEEe,KAAO2vB,QAAQ3vB,OAR6BoxJ,sBAgB9ClD,qCAAqBliI,UAAW4jE,YAAa5vF,MAL7C8oJ,gBAX8CsI,sBAW9CtI,gBACAuH,cAZ8Ce,sBAY9Cf,cACAC,eAb8Cc,sBAa9Cd,eACAC,eAd8Ca,sBAc9Cb,eACAE,WAf8CW,sBAe9CX,WAEEniD,SAAW3+E,QAAQw1B,OAAOzsC,SAAS4uF,oBAAoBC,eAjBX2nD,qBA4B9Cv/H,QAAQwjE,cATRt9D,QAnB8Cq5H,qBAmB9Cr5H,QACAy8D,OApB8C48D,qBAoB9C58D,OACA2xD,OArB8CiL,qBAqB9CjL,OACAuI,YAtB8C0C,qBAsB9C1C,YACAT,cAvB8CmD,qBAuB9CnD,cACA57H,UAxB8C++H,qBAwB9C/+H,UACAD,SAzB8Cg/H,qBAyB9Ch/H,SACAnB,OA1B8CmgI,qBA0B9CngI,OACAD,MA3B8CogI,qBA2B9CpgI,MAEE24H,sBAEN2G,WAAat1J,KAAK8M,MAAMmpB,QAAUy9H,YAAYz9H,OAAS,EAAIujE,OAAS,EAAI2xD,SACxEkK,UAAYr1J,KAAK8M,MAAMkpB,OAAkB,EAATwjE,OAAsB,EAAT2xD,SAEzC1nH,QAAU2sH,kBACVzB,mBAAmB14H,OAAS9vB,KAAK22F,KAAK7mE,OACtC04H,mBAAmB34H,MAAQq/H,UAAY,EAAIt4H,QAAUy4E,SAASx/E,MAAQ,EACtEyhI,eAAejqG,KAAK,KAAM,QAAQA,KAAK,KAAM,MAC7CgqG,eAAehqG,KAAK,YAApB,cAAAh2C,OAA+Cg+F,SAASx/E,MAAQ,EAAhE,QACAi+E,2BAAWp9E,QAASm5H,gBAAiBsF,WAAanvJ,KAAK22F,KAAK7mE,OAAS8G,QAASs4H,UAAY,EAAIt4H,QAAU,GACxGizH,gBAAgB53E,QAAhB,GAAA5gE,OAA2Bs/E,YAA3B,eAAqD9gE,MAAQoB,UAE7D0sD,WAAWksE,iBACP/5H,OAAM,GAAAze,OAAKy7I,cAAch9H,OAASk1H,OAASpuH,QAArC,MACN/G,MAAK,GAAAxe,OAAKxX,KAAK2P,IAAIqmB,MAAOoB,UAArB,MACL2F,QAAO,GAAAvlB,OAAKulB,QAAL,QAGX46H,WAAWnqG,KAAK,SAAUmhG,mBAAmB14H,QAC7C0hI,WAAWnqG,KAAK,QAASmhG,mBAAmB34H,MAAQw/E,SAASx/E,MAAQ,KAErE24H,mBAAmB14H,OAASq/H,WAAa,EAAIv4H,QAAUy4E,SAASv/E,OAAS,EACzE04H,mBAAmB34H,MAAQ7vB,KAAK22F,KAAK9mE,MACrCyhI,eAAejqG,KAAK,KAAM,MAAMA,KAAK,KAAM,QAC3CgqG,eAAehqG,KAAK,YAApB,eAAAh2C,OAAgDg+F,SAASv/E,OAAS,EAAlE,MACAg+E,2BAAWp9E,QAASm5H,gBAAiBsF,WAAa,EAAIv4H,QAAU,EAAGs4H,UAAYlvJ,KAAK22F,KAAK9mE,MAAkB,EAAV+G,SACjGizH,gBAAgB53E,QAAhB,GAAA5gE,OAA2Bs/E,YAA3B,eAAqD7gE,OAASoB,WAC9DysD,WAAWksE,iBACP/5H,OAAM,GAAAze,OAAKxX,KAAK2P,IAAIsmB,OAAQoB,WAAtB,MACNrB,MAAK,GAAAxe,OAAKwe,MAAL,MACL+G,QAAO,GAAAvlB,OAAKulB,QAAL,QAEX46H,WAAWnqG,KAAK,SAAUmhG,mBAAmB14H,OAASu/E,SAASv/E,OAAS,GACxE0hI,WAAWnqG,KAAK,QAASmhG,mBAAmB34H,QAIhD8tD,WAAWyzE,eACPthI,OAAM,GAAAze,OAAKm3I,mBAAmB14H,OAAxB,MACND,MAAK,GAAAxe,OAAKm3I,mBAAmB34H,MAAxB,QAIT8tD,WAAW6zE,YACP7+G,KAAM,0BAEVy+G,cAAc/pG,KAAK,SAAUmhG,mBAAmB14H,QAChDshI,cAAc/pG,KAAK,QAASmhG,mBAAmB34H,OAE/Ca,QAAQwjE,aACJs0D,wCAEJ93H,QAAQqhI,mBAAqBX,cClEzBc,CAAel8J,KAAM6zJ,iBACrBA,gBAAgB9iG,UAAU,OAAOh5B,MAAM,QpB/G3B,QoBgHZs8D,SAAS/B,yBACT+B,SAASolD,mBAAmBz5I,KAAK+K,OAAO9C,IAAI,SAAApP,GAAC,OAAIA,EAAEi+B,MAC5C+8H,gFASU9oJ,MACjB,QAAS/K,KAAK8S,cAAe/H,KAAKvR,gDAhIvBiC,cACX,OAAO,IAAIggK,eAAehgK,kDAW1B,MpBhBgB,+7EqBGH2gK,8tBAAmB9G,iUAgCrBvuH,OACX,IAAImuH,aADcmF,cAE4B5F,2BAAa1tH,OAAnD2tH,UAFU2F,cAEV3F,UAAWl+I,OAFD6jJ,cAEC7jJ,OAAQm+I,MAFT0F,cAES1F,MAAOC,QAFhByF,cAEgBzF,QAE1BxyJ,UAAcpC,KAAK4M,SAAnBxK,UACF6yJ,cACF59E,MAAO,KAAMk9E,MAAO,MA6BxB,GA1BII,iBAAiB9rJ,OACb2N,OAAO,GAAKm+I,MAAM,KAClBM,aAAa59E,OAAQ,GAAAh8D,OAAIjZ,UAAUkyJ,OAAOj9E,MAArB,KAAAh8D,OAA8Bs5I,MAAM,MAE7DO,aAAS75I,OAAAghJ,8BAAOnH,WAAPmH,8BAAqB1H,QAC1Bn+I,OAAOA,OAAO9U,OAAS,GAAKizJ,MAAMA,MAAMjzJ,OAAS,KACjDuzJ,aAAaV,OAAQ,GAAAl5I,OAAIjZ,UAAUkyJ,OAAOC,MAArB,KAAAl5I,OAA8Bs5I,MAAMA,MAAMjzJ,OAAS,OAG5EwzJ,UAAYL,kCAAoBr+I,OAAQm+I,OAI5CO,WADAA,UAAYmH,8BAAI,IAAI9lJ,IAAI2+I,YAAY3kJ,KAAK,SAAC5V,EAAGyI,GAAJ,OAAUzI,EAAIyI,KACjC6E,IAAI,SAACktJ,IAAK58J,GAAM,IAAAo6B,KAC9Bn5B,MAAQ,KAIZ,OAHIjB,EAAI28J,UAAUxzJ,OAAS,IACvBlI,MAAK,GAAA6hB,OAAO85I,IAAIz3G,QAAQ,GAAnB,OAAAriC,QAA8B65I,UAAU38J,EAAI,GAAGmlD,QAAQ,KAEhE4+G,2BAAA3pI,QACK+hI,UrBxCG,SqBwCSA,UAAqB3tH,MAAM6tH,SAASO,KAAOpuH,MAAMsuH,iBAAmBtuH,MAAM6tH,SAASO,MADpGmH,2BAAA3pI,KAAA,QAEIn5B,OAFJ8iK,2BAAA3pI,KAAA,KAGQp6B,EAAI,GAHZ+jK,2BAAA3pI,KAAA,SAIYwiI,IAAKD,UAAU38J,EAAI,KAJ/Bo6B,OAMD3f,OAAO,SAAAna,GAAC,OAAgB,OAAZA,EAAEW,QAEby7J,aAAa59E,MAAO,CACpB,IAAMklF,YAAcvH,gBrBlDX,SqBkDoCjuH,YAAO6tH,gBAASF,sBACvDl+I,cAAQm+I,YAAOM,4BACrBC,WAAaqH,aAAJlhJ,OAAAghJ,8BAAoBnH,YAEjC,GAAID,aAAaV,MAAO,CACpB,IAAMiI,YAAcxH,gBrBxDX,SqBwDoCjuH,YAAO6tH,gBAASF,sBAC3Dl+I,cAAQm+I,YAAOM,0BAAcC,sBAC/BA,aAAS75I,OAAAghJ,8BAAOnH,YAAWsH,cAE/B,OAAOtH,gEAWKgB,WAAY5uH,OAQxB,OAPAtnC,KAAK4M,QACD5C,MACI3J,MACIujG,YAAa5jG,KAAK4M,SAAS6zB,aAIvCg8H,gBAAAC,2BAAAN,WAAA/hK,WAAA,iBAAA2F,MAAAtH,KAAAsH,KAA4Bk2J,WAAY5uH,mDAUxC,MrB3FY,+CqBsGZ,IAAM+sD,SAAWr0F,KAAKq0F,WADhBulB,cAE4B55G,KAAK4M,SAA/B+tF,YAFFif,cAEEjf,YAAal6D,SAFfm5E,cAEen5E,SACf11B,KLzCU,SAAX4xJ,SAAW5xJ,MAAI,IAAA4nB,KAAA,OAAAslI,+BAAAtlI,QhBzER,OgB0ER5nB,KAAKuY,WADW20I,+BAAAtlI,KhBxEP,QgB0ER5nB,KAAKuY,WAFU20I,+BAAAtlI,KhB1ET,MgB6ER5nB,MAHiBktJ,+BAAAtlI,KhBvEN,SgB2ER5nB,MAJc4nB,KKyCPgqI,CAAS38J,KAAK+K,QAAQ01B,UAE7BozH,gBAAkB4I,gBAAAC,2BAAAN,WAAA/hK,WAAA,SAAA2F,MAAAtH,KAAAsH,KAAaA,KAAK+xB,SAGlCwnI,WAAeN,8BAAqBj5J,KAAM6zJ,gBAAiBl5D,YAAa5vF,MAAxEwuJ,WAOR,OJiKsB,SAAjBqD,eAAkBliI,QAAS3D,WACpC,IAAM64E,aAAel1E,QAAQg7H,cADqB3gD,iBAM/Cr6E,QAAQ9tB,SAHT5C,KAHgD+qG,iBAGhD/qG,KACAy2B,SAJgDs0E,iBAIhDt0E,SACAk6D,YALgDoa,iBAKhDpa,YALgDkiE,sBAW/CniI,QAAQwjE,cAHT44D,cARgD+F,sBAQhD/F,cACAI,aATgD2F,sBAShD3F,aACAt2H,QAVgDi8H,sBAUhDj8H,QAVgDk8H,YAgB/C9yJ,KAAK22F,KAHL9mE,MAb+CijI,YAa/CjjI,MACAC,OAd+CgjI,YAc/ChjI,OACA0Y,MAf+CsqH,YAe/CtqH,MAGCpwC,UACD4H,KAAK3J,KADJ+B,UAGJwtG,aAAa70E,uBAAsB,GArBe,IAAAgiI,sBAsBHpE,eAAel4H,UAAU43H,mBACpEvB,4BAAeh9H,cAAQD,cADnBy+H,WAtB0CyE,sBAsB1CzE,WAAYC,UAtB8BwE,sBAsB9BxE,UAAWC,YAtBmBuE,sBAsBnBvE,YAI/B7wE,WAAW5wD,WACP8C,MAAO,SAAAA,MAAAhhC,GAAC,OAAIihK,wBAAejhK,EjB9Ud,QiB8UwB2/J,YAAYC,WAAY/9H,UAC7DZ,OAAQ,SAAAA,OAAAjhC,GAAC,OAAIihK,wBAAejhK,EjB7Ud,SiB6UyB2/J,YAAYE,SAAUh+H,UAC7DogI,aAAc,SACdl6H,QAAO,GAAAvlB,OAAKulB,QAAL,QAGXgvE,aAAax3E,SAASsC,QAAQm7H,gBAC9B,IAAMnnF,QAAU33C,UAAUhsB,OAC1BgsB,UAAUwO,KAAK,SAAU1sC,EAAGN,GACpBM,EAAE,KAAOy4J,MACTxqE,6BAAc9mF,MAAMK,KAAK+B,UAAUvJ,EAAE,GAAIN,EAAGm2E,QAASh0C,UAErDw/H,oBjB5TQ,OiB4TSpzE,6BAAc9mF,MAAOnH,GAClC8hG,wBACA49D,oBACAD,sBACApB,0BACA1kH,gBIjNRoqH,CAAe58J,KAFU25J,4BAAmB35J,KAAMu5J,YAA1CK,cAGR/F,gBAAgB9iG,UAAU,OAAOh5B,MAAM,QrB3H3B,QqB4HZs8D,SAAS/B,yBACT+B,SAASolD,mBAAmBz5I,KAAK+K,OAAO9C,IAAI,SAAApP,GAAC,OAAIA,EAAEi+B,MAC5C+8H,gFAUU9oJ,MAEjB,OAAAuxJ,8BADkBt8J,KAAK8S,YAEN/H,KAAKxJ,+CAtIX9F,cACX,OAAO,IAAI2gK,WAAW3gK,kDAWtB,MrB1BY,sMsBZb,IAaMuhK,QAAU,UACVC,OAAS,SACTC,OAAS,SAiBTC,iCACT,SACA,SAGSC,iBAAeC,yBAAAC,oBAAA,GAAAjiJ,OARL,UAQK,KACT,EADS,KAAAA,OAlCP,SAmCgB++I,gCADTiD,yBAAAC,iBAAA,GAAAjiJ,OARL,UAQK,KAET,EAFS,KAAAA,OAhCR,QAkCgB++I,gCAFRiD,yBAAAC,iBAAA,GAAAjiJ,OARL,UAQK,KAGT,EAHS,KAAAA,OAjCP,SAoCgB++I,gCAHTiD,yBAAAC,iBAAA,GAAAjiJ,OARL,UAQK,KAIT,EAJS,KAAAA,OAlCP,SAsCiB++I,gCAJViD,yBAAAC,iBAAA,GAAAjiJ,OARL,UAQK,KAKT,EALS,KAAAA,OAjCP,SAsCiB++I,gCALViD,yBAAAC,iBAAA,GAAAjiJ,OARL,UAQK,KAMT,EANS,KAAAA,OAhCR,QAsCiB++I,gCANTiD,yBAAAC,iBAAA,GAAAjiJ,OATN,SASM,KAOV,EAPU,KAAAA,OAhCR,QAuCgB++I,gCAPRiD,yBAAAC,iBAAA,GAAAjiJ,OATN,SASM,KAQV,EARU,KAAAA,OAhCR,QAwCe++I,gCARPiD,yBAAAC,iBAAA,GAAAjiJ,OATN,SASM,KASV,EATU,KAAAA,OAjCP,SA0CgB++I,gCATTiD,yBAAAC,iBAAA,GAAAjiJ,OATN,SASM,KAUV,EAVU,KAAAA,OAlCP,SA4Ce+gJ,wBAVRiB,yBAAAC,iBAAA,GAAAjiJ,OATN,SASM,KAWV,EAXU,KAAAA,OAlCP,SA6CgBogJ,gCAXT6B,kBAcf7wD,mBAAO,OACPC,oBAAQ,QACRH,qBAAS,SACTC,kBAAM,MAQN+wD,kBAAoB,WACpBC,gBAAkB,+tCC/CxB,IAAMC,gBAAQ,SAARA,QAAQ,QAAA52F,KAAAzhE,UAAA1D,OAAIyjI,KAAJ,IAAAt8H,MAAAg+D,MAAAC,KAAA,EAAAA,KAAAD,KAAAC,OAAIq+D,KAAJr+D,MAAA1hE,UAAA0hE,MAAA,OAAA42F,oBAAiB54B,cAAjB64B,4BAAiCx4B,KAAKl9H,IAAI,SAAAgoJ,UAAQ,OAAI,IAAI1qB,0BAAe0qB,eAqCvF,SAAS1zE,eAAMqhF,SAKlB,IAJA,IAAIC,SAAW,GACTC,MAAK14J,UAAA1D,QAAA,IAAA0D,UAAA1D,OAAA,EACPnJ,EAAI,EAEDA,EAAIulK,QAASvlK,EAChBslK,UAAYD,QAAQrlK,IAAUA,EAAlB,KAAA6M,UAAA1D,QAAkBnJ,EAAlB,OAAA+U,EAAAlI,UAAkB7M,EAAlB,IAEhBslK,UAAYD,QAAQrlK,GAEpB,IAAMwlK,KAAOznI,SAAS0nI,yBAChB/mI,QAAUX,SAASmJ,cAAc,OAEvCs+H,KAAKj8H,YAAY7K,SACjBA,QAAQO,UAAYqmI,SA3CxB,SAASI,cAAenvI,MACpB,GAAIA,KAAKovI,WAAaC,KAAKC,aAE3B,IAA6E,IAAzEjB,gCAAgCl3J,QAAQ6oB,KAAKuvI,QAAQ58J,eACrDqtB,KAAKyQ,WAAWja,YAAYwJ,UACzB,KAAAhQ,2BAAA,EAAAw/I,mBAAA,EAAAC,oBAAAjxJ,EAAA,IACH,QAAAkxJ,MAAAC,UAAwB3vI,KAAK4vI,WAA7BplK,OAAA2b,cAAA6J,2BAAA0/I,MAAAC,UAAAxsJ,QAAAkD,MAAA2J,2BAAA,EACIm/I,cADqCO,MAAAhlK,OADtC,MAAAmlK,KAAAL,mBAAA,EAAAC,eAAAI,IAAA,YAAA7/I,2BAAA,MAAA2/I,UAAArpJ,QAAAqpJ,UAAArpJ,SAAA,WAAAkpJ,kBAAA,MAAAC,kBAwCPN,CAAchnI,SAhBsB,IAiB5BO,UAAcP,QAAdO,UAER,OAAO,kBAAMA,2SC3EjB,iCAiBMonI,4BAAiB,SAAjBA,eAAkBC,SAAU/mB,WAAYgnB,KAC1CD,SAAS/1J,QAAQ,SAACi2J,QACCA,OAAO31E,cAAc41E,YAAYC,iBAAiBzlK,MAC1D+rC,KAAK,SAAAo7B,MAAI,OAAIm3E,WAAWn3E,KAAK/iD,UAAUy2E,cAC9CyqE,KAAOA,IAAIC,QAEOA,OAAOG,WAEft0D,2BAA2Bn7C,aAAYG,gBAbtC,SAAbyf,WAAc0vF,OAAQhhJ,IAAT,OAAgB,WACXghJ,OAAO31E,cAAc41E,YAAYC,iBAAiBzlK,MAC1D+rC,KAAK,SAAAo7B,MAAI,OAAI5iD,GAAG4iD,KAAK/iD,UAAUy2E,eAYnChlB,CAAW0vF,OAAQjnB,gBAsWlBqnB,YAAqB,eArV9B,SAAAC,yKAAeC,CAAAr/J,KAAAo/J,aACXp/J,KAAKs/J,yTAWW,QAAAz4F,KAAAzhE,UAAA1D,OAAZw9I,WAAY,IAAAr2I,MAAAg+D,MAAAC,KAAA,EAAAA,KAAAD,KAAAC,OAAZo4E,WAAYp4E,MAAA1hE,UAAA0hE,MAEhB,OADA9mE,KAAKs/J,uBAAyBpgB,WACvBl/I,6EAsCcoiB,QAOrB,OANAw8I,4BAAe5+J,KAAKs/J,uBAAwB,SAACjrE,UACzCA,SAASvE,wBAAwB1tE,SAClC,SAAC28I,QACAA,OAAO1qE,WAAWvE,wBAAwB1tE,UAGvCpiB,qFAuC6B,QAAAgnE,MAAA5hE,UAAA1D,OAATysF,QAAS,IAAAtlF,MAAAm+D,OAAAC,MAAA,EAAAA,MAAAD,MAAAC,QAATknB,QAASlnB,OAAA7hE,UAAA6hE,OAOpC,OANA23F,4BAAe5+J,KAAKs/J,uBAAwB,SAACjrE,UACzCA,SAAS3E,2BAA2BvB,UACrC,SAAC4wE,QACAA,OAAO1qE,WAAW3E,2BAA2BvB,WAG1CnuF,2FAiCqBiI,KAM5B,OALA22J,4BAAe5+J,KAAKs/J,uBAAwB,SAACjrE,UACzCA,SAASzE,+BAA+B3nF,MACzC,SAAC82J,QACAA,OAAO1qE,WAAWzE,+BAA+B3nF,OAE9CjI,6FAqBsBiI,KAO7B,OANA22J,4BAAe5+J,KAAKs/J,uBAAwB,SAACjrE,UACzCA,SAASkrE,gCAAgCt3J,MAC1C,SAAC82J,QACAA,OAAO1qE,WAAWkrE,gCAAgCt3J,OAG/CjI,2DA+BKiI,KAMZ,OALA22J,4BAAe5+J,KAAKs/J,uBAAwB,SAACjrE,UACzCA,SAAS5E,eAAexnF,MACzB,SAAC82J,QACAA,OAAO1qE,WAAW5E,eAAexnF,OAE9BjI,uEAyB0B,QAAA+uE,MAAA3pE,UAAA1D,OAAbmrF,YAAa,IAAAhkF,MAAAkmE,OAAAC,MAAA,EAAAA,MAAAD,MAAAC,QAAb6d,YAAa7d,OAAA5pE,UAAA4pE,OAMjC,OALA4vF,4BAAe5+J,KAAKs/J,uBAAwB,SAACjrE,UACzCA,SAAS1E,oBAAoB9C,cAC9B,SAACkyE,QACAA,OAAO1qE,WAAW1E,oBAAoB9C,eAEnC7sF,uEAgBmB,QAAAq0E,MAAAjvE,UAAA1D,OAANopJ,KAAM,IAAAjiJ,MAAAwrE,OAAAE,MAAA,EAAAA,MAAAF,MAAAE,QAANu2E,KAAMv2E,OAAAnvE,UAAAmvE,OAM1B,OALAqqF,4BAAe5+J,KAAKs/J,uBAAwB,SAACjrE,UACzCy2D,KAAKhiJ,QAAQ,SAAA5H,KAAG,OAAImzF,SAASmrE,oBAAoBt+J,IAAI,GAAIA,IAAI,OAC9D,SAAC69J,QACAjU,KAAKhiJ,QAAQ,SAAA5H,KAAG,OAAI69J,OAAO1qE,WAAWmrE,oBAAoBt+J,IAAI,GAAIA,IAAI,QAEnElB,yEAgBoB,QAAAy/J,MAAAr6J,UAAA1D,OAANopJ,KAAM,IAAAjiJ,MAAA42J,OAAAC,MAAA,EAAAA,MAAAD,MAAAC,QAAN5U,KAAM4U,OAAAt6J,UAAAs6J,OAM3B,OALAd,4BAAe5+J,KAAKs/J,uBAAwB,SAACjrE,UACzCy2D,KAAKhiJ,QAAQ,SAAA5H,KAAG,OAAImzF,SAASsrE,qBAAqBz+J,IAAI,GAAIA,IAAI,OAC/D,SAAC69J,QACAjU,KAAKhiJ,QAAQ,SAAA5H,KAAG,OAAI69J,OAAO1qE,WAAWsrE,qBAAqBz+J,IAAI,GAAIA,IAAI,QAEpElB,iFA6C4B,IAAb4/J,OAAax6J,UAAA1D,OAAA,QAAA4L,IAAAlI,UAAA,GAAAA,UAAA,MAC7By6J,sBAAwB7/J,KAAKs/J,uBAC7BQ,aAAevyF,eAAeA,kBAtXtB,SAAhB2iD,cAAiB2vC,uBACnB,IAAME,QAAUF,sBAAsB53J,IAAI,SAAA+3J,MAAI,OAAIA,KAAKtvC,UACvD,OACItgC,YACI6vE,IAAK,SAAA9/I,EAAC+/I,oBACF,IAAMC,kBAAoBD,mBAAmBnlB,aAC7C,OAAOolB,oBAA4D,IAAxCJ,QAAQ95J,QAAQk6J,sBAgXIjwC,CAAc2vC,wBAAyBD,QAM9F,OAJAC,sBAAsB/2J,QAAQ,SAACi2J,QAC3BA,OAAO1qE,WAAW+rE,uBAAuBN,gBAGtC9/J,yBC5XFqgK,cACT5/H,SAAU,MACV6G,MAAO,OACP1G,QAAS,EACT1B,UAAS,GAAA7jB,OH6Bc,OG7Bd,qBAGAilJ,kBACT7/H,SAAU,MACV6G,MAAO,OACP1G,QAAS,GACT2/H,SAAU,EACVrhI,UAAS,GAAA7jB,OHqBc,OGrBd,wBAOAmlJ,kBAEH,+LCWH,IAAM5iB,cAAY6iB,oCAAAC,iBJ7BL,QI+BZlnK,MAAO,KACPijB,MACIgwD,UAAW,cACXC,aAAc,WALD+zF,oCAAAC,cJ5BF,WIqCflnK,MAAO,KACPijB,MACIgwD,UAAW,cACXC,aAAc,WAZD+zF,oCAAAC,cJ1BJ,SI0CblnK,MAAO,KACPijB,MACIgwD,UAAW,cACXC,aAAc,SACdF,aAAc,SAAAA,aAAC5/D,QACX,MAAsB,iBAAXA,QAAkC,OAAXA,QAE1BtB,MAAOsB,QAGRA,WA1BE6zJ,oCAAAC,cJzBJ,SIwDblnK,MAAO,KACPijB,MACIgwD,UAAW,cACXC,aAAc,SACdF,aAAc,SAAAA,aAAC5/D,QACX,MAAsB,iBAAXA,QAAkC,OAAXA,QAE1BtB,MAAOsB,QAGRA,WAzCE6zJ,oCAAAC,cJxBL,QIsEZlnK,MAAO,KACPijB,MACIgwD,UAAW,cACXC,aAAc,SACdF,aAAc,SAAAA,aAAC5/D,QACX,MAAsB,iBAAXA,QAAkC,OAAXA,QAE1BtB,MAAOsB,QAGRA,WAxDE6zJ,oCAAAC,cJvBH,UIoFdlnK,SACAijB,MACIgwD,UAAW,cACXC,aAAc,WAhED+zF,oCAAAC,cJtBH,UI2FdlnK,SACAijB,MACIgwD,UAAW,cACXC,aAAc,WAxED+zF,oCAAAC,cJrBA,aIiGjBlnK,MAAO,KACPijB,MACIgwD,UAAW,cACXC,aAAc,YA/EDg0F,eAoFZC,eAAaF,oCAAAG,kBJ3FL,SI6FbpnK,OAAQ,KAAM,MACdijB,MACIgwD,WAAY,cAAe,eAC3BC,cAAe,WAAY,UAC3BH,cAAc,EACdC,cAAe,SAACunF,OACZ,GAAqB,iBAAVA,MAAoB,CAC3B,IAAMt6J,EAAI,SAAJA,IAAI,OAAMs6J,OAEhB,OADAt6J,EAAEonK,YAAa,EACRpnK,EAEX,OAAOs6J,OACR,SAAC+M,aACA,IAAMp8I,UAAY6oD,kBAAmB8yF,cACrC,OAAO9yF,eAAe7oD,UAAWo8I,kBAhBvBL,oCAAAG,eJ1FD,YI+GjBpnK,OAAQ,KAAM,MACdijB,MACIgwD,WAAY,cAAe,eAC3BC,cAAe,WAAY,UAC3BH,cAAc,EACdC,cAAe,SAACu0F,UACZ,GAAwB,iBAAbA,SAAuB,CAC9B,IAAMC,IAAM,SAANA,MAAM,OAAMD,UAElB,OADAC,IAAIH,YAAa,EACVG,IAEX,OAAOD,UACR,SAACE,gBACA,IAAMv8I,UAAY6oD,kBAAmB+yF,kBACrC,OAAO/yF,eAAe7oD,UAAWu8I,qBAnCvBL,uTCtHLM,2BACjB,SAAAA,gBAAapoK,KAAMivB,WAAYkH,oKAAMkyI,CAAAnhK,KAAAkhK,iBACjClhK,KAAKqwB,MAAQpB,KACbjvB,KAAKohK,WACDtnI,OAAQ/R,WAAW+R,OACnBD,MAAO9R,WAAW8R,MAClB6G,IAAK,KACLoD,KAAM,MAEV9jC,KAAKqhK,UAAY,KACjBrhK,KAAKshK,WAAa,KAClBthK,KAAKuhK,WAAa,KAClBvhK,KAAKqjG,QAAU,KACfrjG,KAAKwkG,UAAY,KACjBxkG,KAAKwhK,eAAiB1oK,KACtBkH,KAAKyhK,WAAa,wUAIlB,MAAM,IAAIxyJ,MAAM,8FAIhB,MAAM,IAAIA,MAAM,oEAGd7H,OAIF,OAHIA,QACApH,KAAKwhK,eAAiBp6J,OAEnBpH,KAAKwhK,qDAGRp6J,OAIJ,OAHIA,QACApH,KAAKqjG,QAAUj8F,OAEZpH,KAAKqjG,kDAGNj8F,OAIN,OAHIA,QACApH,KAAKwkG,UAAYp9F,OAEdpH,KAAKwkG,sDAGLp9F,OAIP,OAHIA,QACApH,KAAKuhK,WAAan6J,OAEfpH,KAAKuhK,uDAGLn6J,OAIP,OAHIA,QACApH,KAAKshK,WAAal6J,OAEfpH,KAAKshK,qDAGNl6J,OAIN,OAHIA,QACApH,KAAKqhK,UAAYj6J,OAEdpH,KAAKqhK,oDAGNj6J,OAIN,OAHIA,OACAnO,OAAO4T,OAAO7M,KAAKohK,UAAWh6J,OAE3BpH,KAAKohK,sDAGLh6J,OAIP,OAHIA,QACApH,KAAKyhK,WAAar6J,OAEfpH,KAAKyhK,+CAIZ,MAAM,IAAIxyJ,MAAM,uzCCtDTyyJ,8vBA3BcR,4UAErB,OACIrnI,MAAO75B,KAAKylG,WAAW5rE,MACvBC,OAAQ95B,KAAKylG,WAAW3rE,kEAIdiyC,MAOd,OANA/rE,KAAKylG,UAAW/kE,IAAKqrC,KAAKvoE,EAAGsgC,KAAMioC,KAAK5vC,IACxCn8B,KAAK2hK,eACD9nI,MAAOkyC,KAAKlyC,MACZC,OAAQiyC,KAAKjyC,QAEjB95B,KAAK4hK,SAAS71F,KAAK61F,UACZ5hK,yCAIP,IAAKA,KAAK6hK,UACN,MAAM,IAAI5yJ,MAAJ,yBAAAoM,OAAmCrb,KAAK8hK,gBAGlD,OADA9hK,KAAK6hK,UAAU9vI,MAAMuE,SAASgB,eAAet3B,KAAK4hK,WAC3C5hK,2BCzBFqjH,6BACT1oB,YAAa,OACbjC,aACI7H,WAAY,cAEhBkxE,WAAY,SACZC,WACIC,UAAW,GACXC,MAAO,EACPxJ,UACIpxH,MAAO,SAEXmxH,YACInxH,MAAO,WAGf66H,QACI1hI,SAAU,QACV+R,OACIuqD,MAAM,EACNn8D,QAAS,EACTy8D,OAAQ,EACR2xD,OAAQ,EACRl1H,OAAQ,GACRD,MAAO,IAEX0mE,OACIxD,MAAM,EACNn8D,QAAS,EACTy8D,OAAQ,EACR2xD,OAAQ,EACRl1H,OAAQ,GACRD,MAAO,IAEXnB,MACIqkE,MAAM,EACNn8D,QAAS,EACTy8D,OAAQ,EACR2xD,OAAQ,EACRl1H,OAAQ,GACRD,MAAO,KAGfwyH,aAAa,EACbjwH,SAAU,IACVgmI,UAAW,IACX/1B,OACI7xH,MACI6nJ,cAAe,GAEnB9oJ,SACIgnJ,SAAU,EACV+B,cAAe,SACfD,cAAe,IAGvBrT,QACIj3H,MAAO,QACPya,MAAO,UACP3Y,MAAO,EACP0oI,UAAU,EACV7xG,QAAS,GAEbo1F,aACI/nD,UAAU,GAEdykE,kBChEEC,cAAgB,IAChBC,eAAiB,IACjBC,mBAAkB,GAAAtnJ,OAAMgoG,4BAAe1oB,YAArB,+BAClBioE,YAAW,GAAAvnJ,OAAMgoG,4BAAe1oB,YAArB,4TCLIkoE,2BACjB,SAAAA,gBAAaj2J,sKAAQk2J,CAAA9iK,KAAA6iK,iBACjB7iK,KAAK+iK,MAAQn2J,OAAOo2J,MAAQ,KAC5BhjK,KAAKijK,KAAOr2J,OAAOs2J,KAAO,KAC1BljK,KAAKmjK,aAAsC,IAAvBv2J,OAAOw2J,YAAoB,EAAIx2J,OAAOw2J,aAAe,EACzEpjK,KAAKqjK,WAAaz2J,OAAO02J,YAAa,EACtCtjK,KAAKujK,OAAS32J,OAAO42J,UACrBxjK,KAAKyjK,iBAAmB,EACxBzjK,KAAK0jK,gBAAkB,6SAGrBV,OAIF,OAHIA,QACAhjK,KAAK+iK,MAAQC,OAEVhjK,KAAK+iK,kDAGLO,YAIP,OAHIA,aACAtjK,KAAKqjK,WAAaC,YAEftjK,KAAKqjK,2CAGXH,MAID,OAHIA,OACAljK,KAAKijK,KAAOC,MAETljK,KAAKijK,qDAGHG,cAIT,OAHIA,eACApjK,KAAKmjK,aAAeC,cAEjBpjK,KAAKmjK,iDAGTK,QAIH,OAHIA,SACAxjK,KAAKujK,OAASC,QAEXxjK,KAAKujK,+DAGCI,kBAIb,OAHIA,mBACA3jK,KAAKyjK,iBAAmBE,kBAErB3jK,KAAKyjK,uEAGAG,iBAIZ,OAHIA,kBACA5jK,KAAK0jK,gBAAkBE,iBAEpB5jK,KAAK0jK,uCCvCb,IAAMG,UAAa,WACtB,IAAIC,KAAO,EACX,OAAO,oBAAAzoJ,OAASunJ,YAAT,KAAAvnJ,SAA0ByoJ,OAFX,GAKnB,SAASC,YAAaj1I,MACzB,IAAIk1I,eAAiB,EACrB,GAA0B,MAAtBl1I,KAAKm1I,aACLD,eAmBD,SAASE,gCAAiCp1I,MAC7C,IAAIk1I,eAAiBx7J,OAAO27J,iBAO5B,OANAr1I,KAAKiH,WAAWjtB,QAAQ,SAAC0X,OACrB,IAAM9X,EAAIq7J,YAAYvjJ,OAClB9X,EAAIs7J,iBACJA,eAAiBt7J,KAGlBs7J,eA3BcE,CAAgCp1I,WAC9C,GAA0B,MAAtBA,KAAKm1I,aACZn1I,KAAKiH,WAAWjtB,QAAQ,SAAC0X,OACrBwjJ,gBAAkBD,YAAYvjJ,cAE/B,GAAIsO,KAAK3S,QAAQ6mJ,QAAUl0I,KAAK3S,QAAQ6mJ,OAAOxV,gBAAiB,CACnE,IAAM4W,gBAAkBt1I,KAAK22E,WAAW3rE,OAClCuqI,WAAav1I,KAAK3S,QAAQ6mJ,OAAOxV,kBAAkB1zH,QAEzDkqI,eAAiBI,gBAAkBC,YACd,IACjBL,eAAiB,QAGrBA,eAAiB,EAErB,OAAOA,eAcJ,SAASM,YAAax1I,MACzB,IAAIy1I,cAAgB,EACpB,GAA0B,MAAtBz1I,KAAKm1I,aACLM,cAkBD,SAASC,6BAA8B11I,MAC1C,IAAIy1I,cAAgB/7J,OAAO27J,iBAO3B,OANAr1I,KAAKiH,WAAWjtB,QAAQ,SAAC0X,OACrB,IAAM2kC,EAAIm/G,YAAY9jJ,OAClB2kC,EAAIo/G,gBACJA,cAAgBp/G,KAGjBo/G,cA1BaC,CAA6B11I,WAC1C,GAA0B,MAAtBA,KAAKm1I,aACZn1I,KAAKiH,WAAWjtB,QAAQ,SAAC0X,OACrB+jJ,eAAiBD,YAAY9jJ,cAE9B,GAAIsO,KAAK3S,QAAQ6mJ,QAAUl0I,KAAK3S,QAAQ6mJ,OAAOxV,gBAAiB,CACnE,IAAMiX,eAAiB31I,KAAK22E,WAAW5rE,MACjC6qI,UAAY51I,KAAK3S,QAAQ6mJ,OAAOxV,kBAAkB3zH,OACxD0qI,cAAgBE,eAAiBC,WACb,IAChBH,cAAgB,QAGpBA,cAAgB,EAEpB,OAAOA,cA0DJ,SAASI,2BAA4B7qI,OAAQD,MAAO4G,UACvD,IAAMu/H,KAAO,IAAI0B,gBAAe,GAAK5nI,cAAQD,cAG7C,OAFAmmI,KAAKlnK,KAAK,eACVknK,KAAKv/H,SAASA,UACPu/H,KAGJ,SAAS4E,eAAgBC,gBAAiBhD,WAAyD,IAGlGiD,6BAHoDC,YAA8C3/J,UAAA1D,OAAA,QAAA4L,IAAAlI,UAAA,IAAAA,UAAA,GAAzB4/J,gBAAyB5/J,UAAA1D,OAAA,QAAA4L,IAAAlI,UAAA,IAAAA,UAAA,GAClG89J,IAAM,GACN+B,oBAAsB,EAEtBC,WAAa,EACbC,UAAY,EAEhB,IAAKtD,UACD,OAASluJ,MAAOkxJ,gBAAiBvjH,OAAQujH,iBARyD,IAAAO,sBAW3CvD,UAAUrU,kBAArD6X,gBAXsFD,sBAW9FtrI,OAAgCwrI,eAX8DF,sBAWrEvrI,MAC3B4G,SAAWohI,UAAUphI,WACV,QAAbA,UAAmC,WAAbA,UACtByiI,IAAM,IACN+B,oBAAsBI,gBAAkBR,gBAAgBlB,kBACxDuB,WAAaL,gBAAgBlB,kBAAoB0B,gBACjDF,UAAYN,gBAAgBjB,mBAE5BV,IAAM,IACN+B,oBAAsBK,eAAiBT,gBAAgBjB,iBACvDuB,UAAYN,gBAAgBjB,iBAAmB0B,eAC/CJ,WAAaL,gBAAgBlB,mBAEjCmB,6BAA+B,EAAIG,oBAGnCJ,gBAAgB3B,IAAIA,KACpB,IAAMqC,iBACFvC,KAAMnB,UAAU/oK,OAChBoqK,IAAK,KACLE,YAAa6B,oBACb3B,WAAW0B,iBAA0BD,YACrCvB,UAEEgC,UAAY,IAAI3C,gBAAgB0C,iBACtCC,UAAU7B,gBAAgB0B,iBAC1BG,UAAU5B,eAAe0B,gBAEzB,IAOMG,WAAa,IAAI5C,iBANnBG,KAAM,KACNE,IAAK,KACLE,YAAa0B,6BACbxB,WAAW0B,kBAA2BD,YACtCvB,WAYJ,OATAiC,WAAW9B,gBAAgBuB,YAC3BO,WAAW7B,eAAeuB,WACtBJ,YACAF,gBAAgBrB,OAAOgC,YACH,QAAb/kI,UAAmC,SAAbA,SAC7BokI,gBAAgBrB,OAAOgC,UAAWC,aAElCZ,gBAAgBrB,OAAOiC,WAAYD,aAE9B7xJ,MAAO6xJ,UAAWlkH,OAAQmkH,0vBChDxBtH,kCA/IX,SAAAA,KAAapzJ,yJAAM26J,CAAA1lK,KAAAm+J,MACfn+J,KAAK4hG,OAAS72F,KACd/K,KAAK4iB,QAAU,KACf5iB,KAAKohB,aACLphB,KAAK2lK,WAAa,KAClB3lK,KAAKohK,WACD1gI,IAAK,KACLoD,KAAM,KACNhK,OAAQ,KACRD,MAAO,MAGX75B,KAAKgkF,IAAMhkF,KAAK4hG,OAAOohE,iBAAkB9B,iBAAmBlhK,KAAK4hG,OAAOohE,OAAOpB,WACnE5hK,KAAK4hG,OAAOohE,OAAOpB,WACnBiC,yRAGHrvJ,SAAS,IAAAoxJ,gBAAAnxJ,MAAAzU,MAClB4lK,gBAAA5lK,KAAKohB,WAAUlb,KAAfqB,MAAAq+J,gBAAAC,uBAAuBrxJ,UACvBA,QAAQ1L,QAAQ,SAACrO,GAAQA,EAAEgrB,OAAOhR,iDAIlC,OAAwB,OAAjBzU,KAAK4iB,gDAIZ,OAAQ5iB,KAAKohB,UAAU1f,uDAIvB,OAAO1B,KAAK4hG,OAAOshE,wDAInB,QAASljK,KAAK4hG,OAAO0hE,sDAGfvtI,WAIN,OAHIA,YACA/1B,KAAKohB,UAAY2U,WAEd/1B,KAAKohB,gDAGRqE,SAIJ,OAHIA,UACAzlB,KAAK4iB,QAAU6C,SAEZzlB,KAAK4iB,oDAGLkjJ,YAIP,OAHIA,aACA9lK,KAAK2lK,WAAaG,YAEf9lK,KAAK2lK,yCAGZ7uI,KAIA,OAHIA,MACA92B,KAAKgkF,IAAMltD,KAER92B,KAAKgkF,wCAGT7nE,QAIH,OAHIA,SACAnc,KAAK4hG,OAASzlF,QAEXnc,KAAK4hG,iDAGNmkE,OASN,OARIA,QACA/lK,KAAKohK,WACD1gI,IAAKqlI,MAAMrlI,IACXoD,KAAMiiI,MAAMjiI,KACZhK,OAAQisI,MAAMjsI,OACdD,MAAOksI,MAAMlsI,QAGd75B,KAAKohK,wDAMJ4E,YAAY,IAAArxJ,OAAA3U,KAChBA,KAAKgkF,MAAQgiF,WAAWhiF,KACxBhkF,KAAK4hG,OAAOshE,IAAI8C,WAAW9C,KAC3BljK,KAAK4hG,OAAOwhE,YAAY4C,WAAW5C,cAEnCpjK,KAAKohB,UAAUtY,QAAQ,SAACgmB,MACpB,GAAIA,KAAKk1D,MAAQgiF,WAAWhiF,IAGxB,OAFAl1D,KAAK3S,MAAM+mJ,IAAI8C,WAAW9C,UAC1Bp0I,KAAK3S,MAAMinJ,YAAY4C,WAAW5C,aAGtCzuJ,OAAKsxJ,WAAWn3I,KAAMk3I,4DAMtBl3I,KAAMk3I,YAAY,IAAA5uJ,OAAApX,KAC1B8uB,KAAKiH,WAAWjtB,QAAQ,SAACo9J,WACjBA,UAAUpvI,OAASkvI,WAAWhiF,KAC9BkiF,UAAU/pJ,QAAQ+mJ,IAAI8C,WAAW9C,KACjCgD,UAAU/pJ,QAAQinJ,YAAY4C,WAAW5C,cAEzChsJ,OAAK6uJ,WAAWC,UAAWF,qDAS/BG,QAAQ,IAAAzyI,OAAA1zB,KACZA,KAAKohB,UAAUtY,QAAQ,SAACgmB,MACpB,GAAIA,KAAKgI,OAASqvI,OAAQ,CACtB,IAAMlkK,MAAQyxB,OAAKtS,UAAUnb,QAAQ6oB,MACrC4E,OAAKkuE,OAAO4hE,QAAQl8J,OAAOrF,MAAO,GAEtCyxB,OAAK0yI,iBAAiBt3I,KAAMq3I,oEAKlBr3I,KAAMq3I,QAAQ,IAAAp/F,OAAA/mE,KAC5B8uB,KAAKiH,WAAWjtB,QAAQ,SAACo9J,WACrB,GAAIA,UAAUpvI,OAASqvI,OAAQ,CAC3B,IAAMlkK,MAAQ6sB,KAAKiH,WAAW9vB,QAAQigK,WACtCp3I,KAAK3S,QAAQqnJ,QAAQl8J,OAAOrF,MAAO,QAEnC8kE,OAAKq/F,iBAAiBF,UAAWC,0TCtI5BE,oCACjB,SAAAA,YAAaC,aAAc15J,mKAAQ25J,CAAAvmK,KAAAqmK,aAC/BrmK,KAAKwmK,cAAgBF,aACrBtmK,KAAKovF,QAAUxiF,OACf5M,KAAKymK,MAAQzmK,KAAK0mK,WAAW1mK,KAAKovF,QAAS,MAC3CpvF,KAAK2mK,wTAGG/5J,OAAQ6Y,QAChB,IAAMqJ,KAAO,IAAIqvI,uBAAKvxJ,QAClB6Y,QACAqJ,KAAKg3I,UAAUrgJ,OAAOw+I,cACtBx+I,OAAOmhJ,aAAa93I,QAEpB9uB,KAAKymK,MAAQ33I,KANO,IAAAhQ,2BAAA,EAAAw/I,mBAAA,EAAAC,oBAAAjxJ,EAAA,IAQxB,QAAAkxJ,MAAAC,UAAmB7xJ,OAAO42J,QAA1BlqK,OAAA2b,cAAA6J,2BAAA0/I,MAAAC,UAAAxsJ,QAAAkD,MAAA2J,2BAAA,EAAmC,KAAxB+nJ,KAAwBrI,MAAAhlK,MAC/BwG,KAAK0mK,WAAWG,KAAM/3I,OATF,MAAA6vI,KAAAL,mBAAA,EAAAC,eAAAI,IAAA,YAAA7/I,2BAAA,MAAA2/I,UAAArpJ,QAAAqpJ,UAAArpJ,SAAA,WAAAkpJ,kBAAA,MAAAC,gBAYxB,OAAOv+J,KAAKymK,wDAIZzmK,KAAKymK,MAAMhhE,UACP/kE,IAAK,EACLoD,KAAM,EACNjK,MAAO75B,KAAKwmK,cAAc3sI,MAC1BC,OAAQ95B,KAAKwmK,cAAc1sI,SF8OhC,SAASgtI,oBAAqBh4I,MACjC,IAAMi4I,YAAcj4I,KAAKiH,WACA9tB,IAAI,SAAAuY,OAAK,OAAIA,MAAMrE,QAAQinJ,gBAC3BrxJ,OAAO,SAACi1J,MAAO9lK,KAAR,OAAgB8lK,MAAQ9lK,KAAK,GAE7D4tB,KAAKiH,WAAWjtB,QAAQ,SAAC0X,MAAOjoB,EAAGw9B,UAC/B,IAAMkxI,YAAclxI,SAASx9B,EAAI,GAC3B2uK,MAAQ1mJ,MAAMrE,QAAQinJ,cAAgB2D,YAElB,MAAtBvmJ,MAAMslJ,YACNtlJ,MAAMilF,UACF/kE,IAAKnoC,EAAI0uK,YAAYxhE,WAAW/kE,IAAMumI,YAAYxhE,WAAW3rE,OAAS,EACtEgK,KAAMtjB,MAAMiF,SAASggF,WAAW3hE,KAChChK,OAAQtZ,MAAMiF,SAASggF,WAAW3rE,OAASotI,MAC3CrtI,MAAOrZ,MAAMiF,SAASggF,WAAW5rE,QAGrCrZ,MAAMilF,UACF/kE,IAAKlgB,MAAMiF,SAASggF,WAAW/kE,IAC/BoD,KAAMvrC,EAAI0uK,YAAYxhE,WAAW3hE,KAAOmjI,YAAYxhE,WAAW5rE,MAAQ,EACvEC,OAAQtZ,MAAMiF,SAASggF,WAAW3rE,OAClCD,MAAOrZ,MAAMiF,SAASggF,WAAW5rE,MAAQqtI,QAGjDJ,oBAAoBtmJ,SEpQpBsmJ,CAAoB9mK,KAAKymK,+DAGZ33I,MAAM,IAAAra,MAAAzU,KACnB8uB,KAAKiH,WAAWjtB,QAAQ,SAAC0X,OACrB6lJ,YAAYc,qBAAqB3mJ,OACjC/L,MAAK2yJ,gBAAgB5mJ,uDAsBzB,OF0JD,SAAS6mJ,mBAAoBv4I,MAQhC,IAPA,IAAIw0I,UAEAgE,WACAC,cAFAC,uBAAyB,EAIvBC,eAAiB34I,KAAKiH,WAAWr0B,OAE9BO,MAAQ,EAAGA,MAAQwlK,eAAgBxlK,QAAS,CACjD,IACIylK,cADA3pJ,QAAE,EAEAyC,MAAQsO,KAAKiH,WAAW9zB,OAEJ,MAAtBue,MAAMslJ,aACN/nJ,GAAKgmJ,YACLuD,WAAa,SACbC,cAAgB,UAEhBxpJ,GAAKumJ,YACLgD,WAAa,QACbC,cAAgB,UAIhB/mJ,MAAMukJ,cAENzB,UAAY9iJ,OAKhBgnJ,wBAA2BE,cAAgB3pJ,GAAGyC,OAC9CA,MAAMilF,WAAW6hE,aAAeI,cAEhClnJ,MAAMilF,WAAW8hE,eAAiB/mJ,MAAMiF,SAASggF,WAAW8hE,eAE5DF,mBAAmB7mJ,QAGnB8iJ,YACAA,UAAU79D,WAAW6hE,aAAeE,uBACpClE,UAAU79D,WAAW8hE,eAAiBjE,UAAU79I,SAASggF,WAAW8hE,eACpEF,mBAAmB/D,YEtMnB+D,CAAmBrnK,KAAKymK,OF0MzB,SAASkB,gBAAiB74I,MAC7BA,KAAKiH,WAAWjtB,QAAQ,SAAC0X,MAAOjoB,EAAGw9B,UAC/B,IAAM0vE,SAnLP,SAASmiE,kBAAmBC,GAAItvK,EAAG8X,IAAKq/F,UAC3C,GAAIn3G,EAAG,CAEH,IAFGuvK,sBAEiBz3J,IAAI9X,EAAI,GACmDktG,WAAlEsiE,MAHVD,sBAGKpnI,IAAiBsnI,OAHtBF,sBAGgBhkI,KAAqBmkI,QAHrCH,sBAG6BhuI,OAAwBouI,OAHrDJ,sBAG8CjuI,MACjD,OACIA,MAAOguI,GAAGhuI,MACVC,OAAQ+tI,GAAG/tI,OAEX4G,IAA8B,MAAzBgvE,SAASo2D,YAChBiC,MAAOE,QAAUF,MAEfjkI,KAA+B,MAAzB4rE,SAASo2D,YACjBkC,OAAQA,OAAQE,QAb+B,IAAAC,sBAiBlBz4D,SAASjqF,SAASggF,WAAxCsiE,KAjBwCI,sBAiB7CznI,IAAiBsnI,MAjB4BG,sBAiBlCrkI,KACnB,OACIjK,MAAOguI,GAAGhuI,MACVC,OAAQ+tI,GAAG/tI,OACX4G,IAAKqnI,KACLjkI,KAAMkkI,OA6JWJ,CAAkBpnJ,MAAMilF,WAAYltG,EAAGw9B,SAAUvV,OAClEA,MAAMilF,SAASA,UACfkiE,gBAAgBnnJ,SE7MhBmnJ,CAAgB3nK,KAAKymK,OACdzmK,mDAKP,OADAA,KAAKonK,gBAAgBpnK,KAAKymK,OACnBzmK,yCAIP,OAAOA,KAAKymK,0EA3Ba33I,MACzB,IAAM+4I,GAAK/4I,KAAK22E,WACVu9D,KAAOl0I,KAAK3S,QAAQ6mJ,OAC1B,GAAIA,MAAQA,KAAKoF,iBAAkB,CAC/B,IAAMr8F,MACF5vC,EAAG0rI,GAAG/jI,KACNtgC,EAAGqkK,GAAGnnI,IACN7G,MAAOguI,GAAGhuI,MACVC,OAAQ+tI,GAAG/tI,OACX8nI,SAAU9yI,KAAKgI,MAEnBksI,KAAKoF,iBAAiBr8F,mTCxD3B,IAAMs8F,MAAb,oBAAAA,4JAAAr4I,CAAAhwB,KAAAqoK,OAAA,2NAAAC,CAAAD,MAAA,OAAAvuK,IAAA,eAAAN,MAAA,SAAA+uK,aACyBxhF,SACjB,OAAOA,mBAAmB60C,WAFlC9hI,IAAA,QAAAN,MAAA,SAAAgvK,MAKkBzhF,SACV,OAAOA,QAAQjwD,MANvBh9B,IAAA,aAAAN,MAAA,SAAAivK,WASuB3xI,IACf,OAAOR,SAASgB,eAAeR,OAVvCh9B,IAAA,gBAAAN,MAAA,SAAAkvK,cAa0B39J,MAClB,OAAOA,KAAKiI,OAAO,SAAA21J,YAAU,OAAyB,MAArBA,WAAWljJ,SAAgB,MAdpE3rB,IAAA,YAAAN,MAAA,SAAAovK,UAoBsBC,OACyB,OAAnCvyI,SAASgB,eAAeuxI,QAAmBvyI,SAASgB,eAAeuxI,OAAOrjI,aArBtF6iI,MAAA,qSCCqBS,gCACjB,SAAAA,UAAah6I,+JAAMi6I,CAAA/oK,KAAA8oK,WACf9oK,KAAKoyB,MAAQtD,KACb9uB,KAAKyhK,WAAa3yI,KAAK3S,QAAQ6mJ,iBAAkB9B,gBAC7BpyI,KAAK3S,QAAQ6mJ,OAAO9jI,YAAcyjI,2SAItD,OAAO3iK,KAAKoyB,gDAIZ,OAAOpyB,KAAKoyB,MAAMjW,QAAQ6mJ,iBAAkB9B,8DAI5C,OAAOlhK,KAAKyhK,YAAckB,mUCjB3B,IAAMqG,uBAAb,WACI,SAAAA,WAAaj+J,gKAAMk+J,CAAAjpK,KAAAgpK,YACfhpK,KAAKgmE,MAAQj7D,KAFrB,6OAAAm+J,CAAAF,aAAAlvK,IAAA,wBAAAN,MAAA,SAAA2vK,wBAMQ,IAAMC,cAEN,OCRqB,SAAhBC,cAAiBv6I,KAAMs6I,YAChC,IAAME,UAAY,IAAIR,qBAAUh6I,MAChCs6I,WAAWljK,KAAKojK,WAChBx6I,KAAKiH,WAAWjtB,QAAQ,SAAC0X,OACrB6oJ,cAAc7oJ,MAAO4oJ,cDGrBC,CAAcrpK,KAAKgmE,MAAOojG,YACnBA,eARfJ,WAAA,mtDEAO,IAAMO,gBAAb,SAAAC,aAAA,SAAAD,kBAAA,8JAAAE,CAAAzpK,KAAAupK,iBAAAG,oCAAA1pK,KAAA2pK,yBAAAJ,iBAAAhiK,MAAAvH,KAAAoF,YAAA,8WAAAwkK,CAAAL,gBAAqCP,wPAArCa,CAAAN,kBAAAzvK,IAAA,iBAAAN,MAAA,SAAAswK,iBAEQ,OAAAC,cAAAJ,yBAAAJ,gBAAAlvK,WAAA,wBAAA2F,MAAAtH,KAAAsH,UAFRupK,gBAAA,+RCFO,IAAMS,SAAb,oBAAAA,kKAAAC,CAAAjqK,KAAAgqK,UAAA,oOAAAE,CAAAF,WAAAlwK,IAAA,eAAAN,MAAA,SAAA2wK,aAEkBr7I,KAAMowC,MAChBpwC,KAAKs7I,cAAgBlrG,SAH7B8qG,SAAA,i3ECIO,IAAMK,2BAAb,SAAAC,WACI,SAAAD,aAAat/J,MAAM,IAAA0J,MAAA,kKAAA81J,CAAAvqK,KAAAqqK,eACf51J,MAAA+1J,wCAAAxqK,KAAAyqK,6BAAAJ,cAAA3xK,KAAAsH,QACKgmE,MAAQj7D,KACb0J,MAAKi2J,aAAe,IAAInB,gBAAgB90J,MAAKuxD,OAAO8jG,iBAHrCr1J,MADvB,sXAAAk2J,CAAAN,aAAkCL,sPAAlCY,CAAAP,eAAAvwK,IAAA,aAAAN,MAAA,SAAAqxK,WAOgB94I,MAAOmN,WAAW,IAAAvqB,OAAA3U,KACpB8qK,QAAU/4I,MAChBg5I,kBAAAN,6BAAAJ,aAAAhwK,WAAA,eAAA2F,MAAAtH,KAAAsH,KAAmB8qK,QAAS9qK,KAAKgmE,OACjChmE,KAAKgrK,UAAYhrK,KAAKirK,yBAAyB/rI,WAC/Cl/B,KAAK0qK,aAAa5hK,QAAQ,SAACgmB,MACvB,GAAIA,KAAKo8I,UAAW,CAChB,IAAMlI,KAAOl0I,KAAKA,OAClBna,OAAKq2J,UAAUlpI,YAAYntB,OAAKw2J,qBAALC,iBAA+BpI,KAAKv9D,YAC3D3uE,GAAIksI,KAAKlsI,KACToI,UAAWpQ,KAAKoQ,mBAG5B4rI,QAAQhpI,YAAY9hC,KAAKgrK,cAnBjClxK,IAAA,uBAAAN,MAAA,SAAA2xK,qBAsB0Bv+J,QAAQ,IAClB8zB,IAA4C9zB,OAA5C8zB,IAAKoD,KAAuCl3B,OAAvCk3B,KAAMhK,OAAiCltB,OAAjCktB,OAAQD,MAAyBjtB,OAAzBitB,MAAOqF,UAAkBtyB,OAAlBsyB,UAAWpI,GAAOlqB,OAAPkqB,GAEvCu0I,IADc/0I,SAASgB,eAAeR,KACjBR,SAASmJ,cAAc,OAQlD,OAPA4rI,IAAItzI,MAAM0I,SAAW,WACrB4qI,IAAItzI,MAAM+L,KAAV,GAAAzoB,OAAoByoB,KAApB,MACAunI,IAAItzI,MAAM2I,IAAV,GAAArlB,OAAmBqlB,IAAnB,MACA2qI,IAAItzI,MAAM+B,OAAV,GAAAze,OAAsBye,OAAtB,MACAuxI,IAAItzI,MAAM8B,MAAV,GAAAxe,OAAqBwe,MAArB,MACAwxI,IAAIv0I,GAAKA,GACTu0I,IAAInsI,UAAYA,UACTmsI,OAjCfvxK,IAAA,2BAAAN,MAAA,SAAAyxK,yBAoC8B/rI,WACtB,IAAMnI,UAAYsxI,MAAMK,cAAc1oK,KAAK0qK,cACrC1H,KAAOjsI,UAAUjI,OACjBk8I,UAAYhrK,KAAKmrK,qBAALC,iBAA+BpI,KAAKv9D,YAClD3uE,GAAIksI,KAAKlsI,KACToI,UAAWnI,UAAUmI,eAGzB,OAFA8rI,UAAU9rI,UAAYA,UACtB8rI,UAAUjzI,MAAM0I,SAAW,WACpBuqI,aA5CflxK,IAAA,cAAAN,MAAA,SAAA8xK,cAgDQ,OAAOtrK,KAAK0qK,iBAhDpBL,aAAA,GCEakB,SAAW,SAAXA,SAAY7wI,QAAS8wI,QAAV,OACA9wI,QAAQ+wI,WAAWH,cAAclhJ,KAAK,SAAAwsC,OAAK,OAAIA,MAAM9nC,OAAOgI,OAAS00I,UAEhFE,kBAAa,SAAbA,WAAchxI,SACvBA,QAAQ+wI,SAAS,IAAIpB,2BAAa3vI,QAAQ3vB,SAC1C2vB,QAAQ+wI,WAAWZ,WAAWnwI,QAAQ3I,QAAS2I,QAAQwE,iTCRpD,IAAMysI,+BAAb,WACI,SAAAA,eAAa5gK,KAAM0gK,SAAU10I,yKAAW60I,CAAA5rK,KAAA2rK,gBACpC3rK,KAAKgmE,MAAQj7D,KAAKm0D,KAClBl/D,KAAK6rK,cAAgB9gK,KAAK+gK,aAC1B9rK,KAAK+rK,iBAAmBhhK,KAAKihK,gBAC7BhsK,KAAKisK,UAAYR,SACjBzrK,KAAK+hG,OAASsmE,MAAME,aAAaxxI,WAAaA,UAAYsxI,MAAMI,WAAW1xI,WANnF,yPAAAm1I,CAAAP,iBAAA7xK,IAAA,OAAAN,MAAA,SAAA8+D,OAaQ,ODFkB,SAAb6zG,WAAczxI,SACvB,OAAQA,QAAQ+wI,YAChB,IAAK,OACDC,kBAAWhxI,SACX,MACJ,QACIgxI,kBAAWhxI,UCPXyxI,CAAWnsK,MDyBY,SAAlBosK,gBAAmB1xI,QAAS2xI,eACrCA,cAAct2I,WAAWjtB,QAAQ,SAAC+4J,WAC9B,IAAMmB,KAAOnB,UAAU1lJ,QAAQ6mJ,OAC/B,GAAIA,gBAAgB9B,iBAAmB8B,KAAKsJ,YAAa,CACrD,IAAIC,iBACE31G,MAAQ20G,SAAS7wI,QAASmnI,UAAU/qI,MAAMhI,OAC1CA,KAAO8nC,MAAM6uC,WACb+mE,QAAUjB,SAAS7wI,QAASA,QAAQoxI,eAAe1yK,IAAI4pK,KAAKsJ,aAAa1K,YAC1D9yI,OACA22E,WACrB,OAAQu9D,KAAKyJ,aACb,IAAK,OACDF,eACI7rI,IAAK5R,KAAK4R,IACVoD,KAAM0oI,QAAQ1oI,KACdhK,OAAQhL,KAAKgL,OACbD,MAAOh2B,KAAKsnB,IAAI2D,KAAK+K,MAAQh2B,KAAKsnB,IAAIqhJ,QAAQ1oI,KAAOhV,KAAKgV,QAE9D,MAEJ,IAAK,QACDyoI,eACI7rI,IAAK5R,KAAK4R,IACVoD,KAAMhV,KAAKgV,KACXhK,OAAQhL,KAAKgL,OACbD,MAAOh2B,KAAKsnB,IAAI2D,KAAK+K,MAAQh2B,KAAKsnB,IAAI2D,KAAKgV,KAAOhV,KAAK+K,OAAS2yI,QAAQ1oI,KAAO0oI,QAAQ3yI,UAE3F,MAEJ,IAAK,MACD0yI,eACI7rI,IAAK8rI,QAAQ9rI,IACboD,KAAMhV,KAAKgV,KACXhK,OAAQj2B,KAAKsnB,IAAI2D,KAAKgL,OAASj2B,KAAKsnB,IAAIqhJ,QAAQ9rI,IAAM5R,KAAK4R,MAC3D7G,MAAO/K,KAAK+K,OAEhB,MAEJ,IAAK,SACD0yI,eACI7rI,IAAK5R,KAAK4R,IACVoD,KAAMhV,KAAKgV,KACXhK,OAAQj2B,KAAKsnB,IAAI2D,KAAK4R,IAAM8rI,QAAQ9rI,IAAM8rI,QAAQ1yI,QAClDD,MAAO/K,KAAK+K,OAEhB,MAEJ,IAAK,WACD0yI,eACI7rI,IAAK5R,KAAK4R,IACVoD,KAAM0oI,QAAQ1oI,KACdhK,OAAQhL,KAAKgL,OACbD,MAAO2yI,QAAQ3yI,OAEnB,MAEJ,IAAK,WACD0yI,eACI7rI,IAAK8rI,QAAQ9rI,IACboD,KAAMhV,KAAKgV,KACXhK,OAAQ0yI,QAAQ9rI,IAChB7G,MAAO/K,KAAK+K,OAOpB5gC,OAAO4T,OAAO0/J,eAAiBz1I,GAAI8/B,MAAM9/B,KAAMoI,UAAW8jI,KAAK9jI,cAC/DxE,QAAQ+wI,WAAWN,qBAAqBoB,eACxC7xI,QAAQoxI,eAAe1yK,IAAI4pK,KAAKlqK,QAAQsvK,kBACpCjsI,EAAGowI,cAAczoI,KACjBtgC,EAAG+oK,cAAc7rI,IACjB5G,OAAQyyI,cAAczyI,OACtBD,MAAO0yI,cAAc1yI,QAI7BuyI,gBAAgB1xI,QAASmnI,aCtGzBuK,CAAgBpsK,KAAMA,KAAKgmE,ODUN,SAAhB0mG,cAAiBL,eAC1BA,cAAct2I,WAAWjtB,QAAQ,SAACgmB,MAC9B,IAAMk0I,KAAOl0I,KAAK3S,QAAQ6mJ,OACtBA,gBAAgB9B,iBAChB8B,KAAK1qG,OAETo0G,cAAc59I,QCfd49I,CAAc1sK,KAAKgmE,OACZhmE,QAbflG,IAAA,OAAAN,MAAA,SAAAuR,KAgBUA,OAIF,OAHIA,QACA/K,KAAKgmE,MAAQj7D,OAEV/K,KAAKgmE,SApBpBlsE,IAAA,eAAAN,MAAA,SAAAsyK,aAuBkB1kK,OAIV,OAHIA,QACApH,KAAK6rK,cAAgBzkK,OAElBpH,KAAK6rK,iBA3BpB/xK,IAAA,YAAAN,MAAA,SAAA0lC,UA8Be93B,OAIP,OAHIA,QACApH,KAAK+rK,iBAAmB3kK,OAErBpH,KAAK+rK,oBAlCpBjyK,IAAA,WAAAN,MAAA,SAAAiyK,SAqCcrkK,OAIN,OAHIA,QACApH,KAAKisK,UAAY7kK,OAEdpH,KAAKisK,aAzCpBnyK,IAAA,QAAAN,MAAA,SAAAu4B,MA4CW3qB,OAIH,OAHIA,QACApH,KAAK+hG,OAAS36F,OAEXpH,KAAK+hG,WAhDpB4pE,eAAA,6SCAqBgB,gDACjB,SAAAA,kBAAab,aAActkI,SAAU69D,YAAaC,6KAAYsnE,CAAA5sK,KAAA2sK,mBAC1D3sK,KAAK6rK,cAAgBC,aACrB9rK,KAAK6sK,kBAAoBrlI,SACzBxnC,KAAK8sK,aAAeznE,YACpBrlG,KAAK+sK,YAAcznE,WACnBtlG,KAAKgtK,oBAAsB,4VZ0G5B,SAASC,0BAA2BvyI,SACvCA,QAAQwyI,mBAAmB,IAAI97J,KAC/BspB,QAAQoxI,eAAehjK,QAAQ,SAACtP,OAC5B,GAAIkhC,QAAQwyI,qBAAqB17J,IAAIhY,MAAMkiD,UACvChhB,QAAQwyI,qBAAqB9zK,IAAII,MAAMkiD,UAAUx1C,KAAK1M,WACnD,CACH,IAAMotE,QACNA,KAAK1gE,KAAK1M,OACVkhC,QAAQwyI,qBAAqBz7J,IAAIjY,MAAMkiD,SAAUkrB,SY7GrDqmG,CAA0BjtK,MAC1B,IAAMmtK,gBAAkBntK,KAAKgtK,oBAAoB5zK,IAAI,UAC/CyrK,gBAAkB,IAAIhC,oBACxBuK,aAAevI,gBACnBA,gBAAgBlB,gBAAgB3jK,KAAK8sK,cACrCjI,gBAAgBjB,eAAe5jK,KAAK+sK,aAEpC,IAAIM,aAAe,KAUnB,OARArtK,KAAK6sK,kBAAkB/jK,QAAQ,SAAChQ,MAC5Bu0K,aZwGL,SAASC,aAAcH,gBAAiBrL,eAC3C,IAAM9B,KAAOmN,gBAAgB/iJ,KAAK,SAAAy3I,WAAS,OAAIA,UAAU/oK,SAAWgpK,gBACpE,OAAQ9B,OAAkB,IAAVA,KAAeA,KAAO,KY1GfsN,CAAaH,gBAAiBr0K,MAEzCs0K,aADS,SAATt0K,KACe8rK,eAAewI,aAAcC,cAAc/rH,OZ4KnE,SAASisH,mBAAoB1I,gBAAiB2I,gBAMjD,IALA,IAAIJ,aAAevI,gBACbrqJ,KAAOgzJ,eAAe9rK,OACtB0Z,OAASZ,KAAOgzJ,eAAe,GAAG9rK,OAAS,EAC3Co4B,OAAS0zI,eAAez7J,OAAO,SAACC,IAAK9Q,KAAN,OAAe8Q,IAAM9Q,IAAI,GAAGssJ,kBAAkB1zH,QAAS,GAEnFvhC,EAAI,EAAGA,EAAI6iB,OAAQ7iB,IAAK,CAC7B,IAAMk1K,kBAAoBl1K,IAAM6iB,OAAS,EADZsyJ,gBAIH9I,eAAewI,aAFNzI,2BAA2B7qI,OAClB0zI,eAAe,GAAGj1K,GAAGi1J,kBAAkB3zH,MAAO,QACP4zI,mBAA3E95J,MAJqB+5J,gBAIrB/5J,MAAO2tC,OAJcosH,gBAIdpsH,OACf8rH,aAAez5J,MACf,IAAK,IAAIkH,EAAI,EAAGA,EAAIL,KAAMK,IAAK,CAC3B,IAAM8yJ,YAAc9yJ,IAAOL,KAAO,EAClC4yJ,aAAexI,eAAewI,aAAcI,eAAe3yJ,GAAGtiB,GAAIo1K,aAAa,GAAMrsH,OAEzF8rH,aAAe9rH,OAEnB,OAAO8rH,aY5LoBG,CAAmBH,aAAcC,aAAaxL,aAG9DgD,kEAGGz9J,OAIV,OAHIA,QACApH,KAAK6rK,cAAgBzkK,OAElBpH,KAAK6rK,4EAGIzkK,OAIhB,OAHIA,QACApH,KAAKgtK,oBAAsB5lK,OAExBpH,KAAKgtK,2UC3Cb,IAAMY,qBAAb,WACI,SAAAA,qKAAeC,CAAA7tK,KAAA4tK,WACX5tK,KAAK6rK,cAAgB,IAAIz6J,IACzBpR,KAAK8tK,kBAAoB,KAHjC,0OAAAC,CAAAH,YAAA9zK,IAAA,eAAAN,MAAA,SAAAw0K,aAMkBnM,WACV7hK,KAAK6rK,cAAcp6J,IAAIowJ,UAAU/oK,OAAQ+oK,cAPjD/nK,IAAA,mBAAAN,MAAA,SAAAy0K,iBAUsBzwJ,KAId,OAHIA,MACAxd,KAAK8tK,kBAAoBtwJ,KAEtBxd,KAAK8tK,qBAdpBh0K,IAAA,uBAAAN,MAAA,SAAA00K,qBAiB0BC,gBAAgB,IAAA15J,MAAAzU,KAClCmuK,eAAerlK,QAAQ,SAACk3J,MACpBvrJ,MAAKu5J,aAAahO,WAnB9BlmK,IAAA,sBAAAN,MAAA,SAAA40K,sBAyBQ,OCzBD,SAASC,eAAgB3zI,QAAS4zI,SACrC,IAAMC,OAASD,QAAQtL,OACnBsL,QAAQ9K,SAAW8K,QAAQ9K,QAAQ9hK,QACnC4sK,QAAQ9K,QAAQ16J,QAAQ,SAAA0lK,WAAS,OAAIH,eAAe3zI,QAAS8zI,aAEnD,MAAVD,QAAsC,iBAAZA,aACiBjhK,IAAvCotB,QAAQoxI,eAAe1yK,IAAIm1K,SAC3BD,QAAQtL,KAAKtoI,QAAQoxI,eAAe1yK,IAAIm1K,SDiB5CF,CAAeruK,KAAMA,KAAK8tK,mBACnB9tK,KAAKiuK,sBAzBpBn0K,IAAA,eAAAN,MAAA,SAAAsyK,eA6BQ,OAAO9rK,KAAK6rK,iBA7BpB/xK,IAAA,oBAAAN,MAAA,SAAAi1K,oBAgCQzuK,KAAK6rK,cAAcpmI,YAhC3BmoI,UAAA,ySEYqBc,wCACjB,SAAAA,cAAa3iG,mKAAM4iG,CAAA3uK,KAAA0uK,eACf1uK,KAAKqhK,UAAYt1F,KAAK61F,SACtB5hK,KAAK+rK,iBAAmBhgG,KAAK7sC,UAC7Bl/B,KAAK4uK,YACD/0I,MAAOkyC,KAAKlyC,OAAS4oI,cACrB3oI,OAAQiyC,KAAKjyC,QAAU4oI,gBAG3B1iK,KAAK6uK,cAAgB9iG,KAAK+iG,cAAgB,OAC1C9uK,KAAK8tK,kBAAoB,KACzB9tK,KAAK+uK,WAAa,IAAInB,qBACtB5tK,KAAKgvK,gBAAkB,KACvBhvK,KAAK6sK,qBACL7sK,KAAKk/D,KAAO,KACZl/D,KAAKivK,YAAc,qTAGZ7nK,OAIP,OAHIA,QACApH,KAAK+uK,WAAa3nK,OAEfpH,KAAK+uK,qEAGE3nK,OAId,OAHIA,QACApH,KAAK6sK,kBAAoBzlK,OAEtBpH,KAAK6sK,8DAGLzlK,OAIP,OAHIA,OACAnO,OAAO4T,OAAO7M,KAAK4uK,WAAYxnK,OAE5BpH,KAAK4uK,6DAGF/M,WACV7hK,KAAK+uK,WAAWf,aAAanM,6EAGXsM,gBAClBnuK,KAAK+uK,WAAWb,qBAAqBC,4DAG9Br/I,MACH9uB,KAAKkvK,KACLlvK,KAAKkvK,IAAIC,UAAUrgJ,oDAQfliB,QACR5M,KAAKk/D,KAAKkwG,WAAWxiK,QACrB5M,KAAK8tK,kBAAoB9tK,KAAKk/D,KAAK/iD,MACnCnc,KAAKqvK,oDAKDhH,MAAME,aAAavoK,KAAKqhK,WACxBrhK,KAAKqhK,UAAUiO,QAAUtvK,KAEzBs2B,SAASgB,eAAet3B,KAAKqhK,WAAWiO,QAAUtvK,KAGtDA,KAAK8tK,kBDvEN,SAASyB,aAAc70I,SAAS,IAAA80I,mBACT90I,QAAQoiE,YAA1BhjE,OAD2B01I,mBAC3B11I,OAAQD,MADmB21I,mBACnB31I,MAMhB,OALmB,IAAI8yI,qCAAkBjyI,QAAQ+0I,YAAY3D,eACnBpxI,QAAQg1I,mBACR51I,OACAD,OACV81I,sBCiEHJ,CAAavvK,MACtCA,KAAK+uK,WAAWd,iBAAiBjuK,KAAK8tK,mBACtC9tK,KAAK8tK,kBAAoB9tK,KAAK+uK,WAAWX,sBACzCpuK,KAAKsvK,QAAU,IAAIjJ,0BACfxsI,MAAO75B,KAAK4uK,WAAW/0I,MACvBC,OAAQ95B,KAAK4uK,WAAW90I,QAExB95B,KAAK8tK,mBACT9tK,KAAKk/D,KAAOl/D,KAAKsvK,QAAQM,YAAY1wG,OACrCl/D,KAAKsvK,QAAQO,YACb7vK,KAAKgvK,gBAAkB,IAAIrD,gCACvBzsG,KAAMl/D,KAAKk/D,KACX4sG,aAAc9rK,KAAK+uK,WAAWjD,eAC9BE,gBAAiBhsK,KAAK+rK,kBACvB/rK,KAAK6uK,cAAe7uK,KAAKqhK,WAExBrhK,KAAKivK,YACLjvK,KAAKk/D,KAAKpoC,GAAG92B,KAAKivK,aAElBjvK,KAAKivK,YAAcjvK,KAAKk/D,KAAKpoC,KAGjC92B,KAAKgvK,gBAAgB12G,6DAIrB,OAAOt4D,KAAKivK,0EAOIa,kBAAkB,IAAAr7J,MAAAzU,KAgBlC,OAfAA,KAAK6sK,kBAAkBnrK,OAAS,EAChC1B,KAAK+uK,WAAWN,oBAChBqB,iBAAiBhnK,QAAQ,SAACiuB,WAClBA,YACAtiB,MAAKo4J,kBAAkB3mK,KAAK6wB,UAAUj+B,QACtC2b,MAAKu5J,aAAaj3I,WACO,SAArBA,UAAUj+B,QACVi+B,UAAU8qI,UAAU/4J,QAAQ,SAACinK,cACzBA,aAAajnK,QAAQ,SAACknK,OAClBv7J,MAAKu5J,aAAagC,cAM/BhwK,uDAGG8hK,eACV,OAAO9hK,KAAK+uK,WAAWjD,eAAe1yK,IAAI0oK,yDAGpC/vI,OAIN,OAHIA,QACA/xB,KAAKqhK,UAAYtvI,OAEd/xB,KAAKqhK,glCClIb,IAyIM4O,2BAAsB,SAAtBA,oBAAuBv1I,SAChC,IAAM/xB,MAAQ+xB,QAAQm2F,OAEhBq/C,WAAaj3K,OAAO6M,KAAK40B,QAAQy1I,aACjC39I,SAAKnX,OAAA+0J,gCAAOF,YAAPE,gCAAsBn3K,OAAO6M,KAAK66J,iBACvC0P,kBAAiBh1J,OAAA+0J,gCAAIF,YAAJE,gCAAmBn3K,OAAO6M,KAAK66J,iBAAgB14J,IAAI,SAAAsqB,MAAI,SAAAlX,OACvEwvF,0BAAiBx7C,uBADsD,KAAAh0C,OAC5BkX,QAClD5pB,MAAM+mH,uBAAuB2gD,eAAgB,WAAe,QAAAxpG,KAAAzhE,UAAA1D,OAAXgf,OAAW,IAAA7X,MAAAg+D,MAAAC,KAAA,EAAAA,KAAAD,KAAAC,OAAXpmD,OAAWomD,MAAA1hE,UAAA0hE,OA5FxC,SAAlBwpG,gBAAmB99I,MAAO9R,QAC5B,IAAI3B,QAAU,SAAAA,UAAA,OAAM,GACZyT,MAAM9U,MAAM,SAAC6yJ,OAAQh4K,GACzB,OAAQg4K,QACR,I1BlEY,O0BmEZ,I1BlEe,U0BmEf,I1B9Dc,S0B+DVxxJ,QAAUiuD,qBAAQ,SAClB,MAEJ,I1BpEa,Q0BqEb,I1BpEY,O0BqEZ,I1BvEa,Q0BwEb,I1BzEY,O0B0EZ,I1B5Dc,S0B6DVjuD,QAAUiuD,qBAAQ,UAClB,MACJ,QACIjuD,QAAU,SAAAA,UAAA,OAAM,GAGpB,IAAMkuD,OAASvsD,OAAOnoB,GAAG,GACnB20E,OAASxsD,OAAOnoB,GAAG,GAEzB,OAAOwmB,QAAQkuD,OAAQC,UAqELojG,CAAgB99I,MAAO9R,SAjE3B,SAAhB8vJ,cAAiBh+I,MAAO9R,QAAR,OAAmB8R,MAAM9U,MAAM,SAAC6yJ,OAAQh4K,GAC1D,IAAM2I,IAAMwf,OAAOnoB,GAAG,GACtB,OAAQg4K,QACR,I1B7FgB,O0B8FhB,I1B7FmB,U0B8Ff,OAAe,OAARrvK,IAEX,I1B/FgB,O0BgGZ,OAAOA,MAAQA,IAAIqkG,UAEvB,QACI,OAAO,MAuDOirE,CAAch+I,MAAO9R,SAGhBga,QAAQ3I,WAtHN,SAAhB0+I,cAAiB/1I,SAC1B,IAAM6iH,iBAAmB7iH,QAAQj/B,eAAe8hJ,iBAChDA,iBAAiBvG,QAASzsD,OAAQ7vD,QAAStY,OAAQ,iBACnD,IAAM48I,YAActkI,QAAQ0uD,cAAc41E,YAEpCkR,WAAax1I,QAAQy1I,YAC3B,IAAK,IAAMr2K,OAAOo2K,WAAY,CAC1B,IAAM12K,MAAQkhC,QAAQ5gC,OACR,OAAVN,OACAwlK,YAAYllK,MAAQklK,YAAYllK,KAAKN,OATP,IAY9BgpK,cAAkB9nI,QAAQ9tB,SAA1B41J,cAERxD,YAAYtlE,YAAY5lB,eAAe0uF,gBACvCxD,YAAYnR,iBACZnzH,QAAQg2I,gBACRnzB,iBAAiBvG,QAASzsD,OAAQ7vD,QAAStY,OAAQ,gBACnDm7H,iBAAiBvG,QAASzsD,OAAQ7vD,QAAStY,OAAQ,YAqG3CquJ,CAAc/1I,SACdA,QAAQ0oE,UAvDc,SAArButE,mBAAsBj2I,SAC/B,IAAMk2I,aAAel2I,QAAQm2I,SAASC,WAAWC,iBAAiB1/B,SAASxgF,OAAO,OAC5EmgH,YACNJ,aAAa9nK,QAAQ,SAACmoK,SAClBA,QAAQnoK,QAAQ,SAAC63D,MACbqwG,SAAS9qK,KAAKy6D,KAAK/iD,UAAUzI,YAGrC,IAAMooI,iBAAmB7iH,QAAQw2I,YAC7BF,SAAStvK,OACT8kF,QAAQ4xB,IAAI44D,UAAU5mF,KAAK,WAEvBmzD,iBAAiBvG,QAASzsD,OAAQ7vD,QAAStY,OAAQ,UACnD,IAAM+uJ,oBAENP,aAAa9nK,QAAQ,SAACmoK,SAClBA,QAAQnoK,QAAQ,SAAC63D,MACbA,KAAK/iD,UAAUq8E,SAASnxF,QAAQ,SAACoxF,OAC7Bi3E,iBAAiBjrK,KAAKg0F,MAAMk3E,wBAKvC12I,QAAQ4vG,QAAS5vG,QAAQ6vG,SAASzhI,QAAQ,SAACuoK,UACxCA,QAAUA,aACFvoK,QAAQ,SAAC2tF,MACbA,KAAK3tF,QAAQ,SAAC66I,UACVwtB,iBAAiBjrK,KAAKy9I,SAASytB,uBAK3C5qF,QAAQ4xB,IAAI+4D,kBAAkB/mF,KAAK,WAC/BmzD,iBAAiBvG,QAASzsD,OAAQ7vD,QAAStY,OAAQ,qBAI3Dm7H,iBAAiBvG,QAASzsD,OAAQ7vD,QAAStY,OAAQ,iBAoBnDuuJ,CAAmBj2I,WACpB,IAGM42I,uBAAyB,SAAzBA,uBAA0Bj9E,UACnC,IACM2qE,YADS3qE,SAAS35D,QACG0uD,cAAc41E,YACzC,GAAIA,YAAa,CACb,IAAMvtB,YAAcutB,YAAYC,iBAAiBzlK,OAEjD+3K,EAD0Bl9E,SAASm9E,oBACjB//B,YAAap9C,UAC/B,IAAM+rE,uBAAyB/rE,SAASo9E,wBAClCrhF,WAAagwE,uBAAuBhwE,WACpCvD,YAAcuzE,uBAAuBvzE,YAC3C4kD,YAAYlsG,KAAK,SAACo7B,MACd,IAAM+wG,aAAe/wG,KAAK/iD,UAAUy2E,WACpC,IAAK,IAAMv6F,OAAOs2F,WACdshF,aAAaC,kCAAkC73K,IAAKs2F,WAAWt2F,MAEnE,IAAK,IAAMA,SAAO+yF,YACd6kF,aAAaE,mCAAmC93K,MAAK+yF,YAAY/yF,YAoDpE+3K,2BAAsB,SAAtBA,sBAIT,OAHsB,IAAInD,8BACtBxvI,UAAW,0BC9NJ4yI,aACX/mK,MACIvR,MAAO,KACPijB,MACIgwD,UAAW,SAAAA,UAAA5zE,GAAC,OAAIA,aAAawF,uBAGrCw7B,OACIrgC,MAAO,EACPijB,MACI+vD,aAAcZ,aACda,UAAWjkE,OAAOupK,YAG1Bj4I,QACItgC,MAAO,EACPijB,MACI+vD,aAAcZ,aACda,UAAWjkE,OAAOupK,YAG1BC,cACIx4K,MAAO,GACPijB,MACI+vD,aAAcZ,aACda,UAAWjkE,OAAOupK,YAG1BE,eACIz4K,MAAO,GACPijB,MACI+vD,aAAcZ,aACda,UAAWjkE,OAAOupK,YAG1BnlK,QACIpT,MAAO,KACPijB,MACIgwD,UAAW,cACXC,aAAc,SACdF,aAAc,SAAAA,aAAC5/D,OAAQ8oG,WAEnB,IAAMw8D,QAAU3kG,kBAA8B,OAAX3gE,UAAuB8oG,WACpDhxF,UAAY6oD,eAAe2kG,QAAS7uD,6BACtC4M,QAAU1iD,eAAe7oD,UAAW9X,QAGxC,OAFAqjH,QD1CkB,SAArBkiD,mBAAsBvlK,QAE/B,OADAA,OAAOo1J,UAAUC,UAAYp+J,KAAK2P,IAAI,GAAI3P,KAAK6P,IAAI,GAAI9G,OAAOo1J,UAAUC,YACjEr1J,OCwCeulK,CAAmBliD,aC1DhCmiD,YACT1xI,IAAK,EACLmwB,OAAQ,EACRf,OAAQ,GAGCuiH,kBACT3tH,EAAG,MACHkmF,EAAG,SACH0nC,EAAG,UAGMC,qBACT7tH,EAAG,OACHkmF,EAAG,SACH0nC,EAAG,SAiNME,uBAAS,SAgBTC,SAAW,UACXC,YAAc,aAGdC,yBAAW,WACXC,2BAAa,kXC7OLC,wCAYjB,SAAAA,cAAav+I,WAAY4pE,YAAatxF,OAAQnR,2KAAcq3K,CAAA9yK,KAAA6yK,eACxD7yK,KAAKovF,WACLpvF,KAAK4wH,gBACL5wH,KAAK+yK,aAGL/yK,KAAKu2G,cAAgB96G,aAErBuE,KAAKk+F,YAAYA,aACjBl+F,KAAKs0B,WAAWA,YAChBt0B,KAAK4M,OAAOA,0TAQZ,OACIsxF,YAAal+F,KAAKk+F,cAClBtxF,OAAQ5M,KAAK4M,SACbykI,SAAUrxI,KAAKqxI,kDASfzkI,SACJ,OAAIA,SACA5M,KAAKovF,QAAU7hB,eAAevtE,KAAKovF,YAAexiF,SAClD5M,KAAKovF,QAAQ4/D,OAAOn1H,MAAQh2B,KAAK6P,IAAI,EAAG1T,KAAKovF,QAAQ4/D,OAAOn1H,OACrD75B,MAEJA,KAAKovF,wDAQH8O,cACT,OAAIA,cACAl+F,KAAK4wH,aAAerjD,eAAevtE,KAAK4wH,iBAAoB1yB,cAErDl+F,MAEJA,KAAK4wH,uDAQNygB,WACN,OAAIA,WACArxI,KAAK+yK,UAAY3rG,oBDmJV,MAIG,SADA,UCtJiDiqE,WAEpDrxI,MAEJA,KAAK+yK,sDAQLx4H,QACP,OAAIA,QACAv6C,KAAKqqJ,WAAa9vG,OACXv6C,MAEJA,KAAKqqJ,6DAQF9vG,QACV,OAAIA,QACAv6C,KAAKsqJ,cAAgB/vG,OACdv6C,MAEJA,KAAKsqJ,gEAQF/vG,QACV,OAAIA,QACAv6C,KAAKgzK,cAAgBz4H,OACdv6C,MAEJA,KAAKgzK,4DAQJ1+I,aACR,OAAIA,aACAt0B,KAAKizK,YAAc3+I,YAEZt0B,MAEJA,KAAKizK,yNC1Ib,IAAMC,uBAAqBC,oCAAAC,yBFgCZ,UEhCYD,oCAAAE,sBF6Kb,QE3KO,SAFMF,oCAAAE,mBFkLb,QE/KO,WAHMF,oCAAAE,mBFuLb,QEnLO,GAJMF,oCAAAE,mBF4LV,YEvLO,GALGF,oCAAAE,mBFiMX,UE3LO,GANIA,qBAAAF,oCAAAC,sBF0PR,aElPG,UARKD,oCAAAC,sBF2PZ,SElPG,IATSD,oCAAAC,sBF2MP,eEjMK54J,QAAUjB,aAVR45J,oCAAAC,sBFsMN,gBE3LK54J,QAAUjB,aAXT45J,oCAAAC,sBFgNR,aEpMK54J,QAAUjB,aAZP45J,oCAAAC,sBF+CD,kBElCG,GAbFD,oCAAAC,sBFoDE,qBEtCG,GAdLD,oCAAAC,sBF0CJ,gBE3BG,GAfCD,oCAAAC,sBFqCP,aErBG,GAhBIA,uBAuBrBE,sBAAoBH,oCAAAI,yBFDP,QEEG,KADIJ,oCAAAI,sBFIN,SEFG,KAFGJ,oCAAAI,sBF4IP,YEzIG,KAHIJ,oCAAAI,sBFiJN,aE7IG,KAJGA,spBCvBjC,IAAMztI,WAAOurC,QAAQvrC,KA2Bf0tI,WAAa,SAAbA,WAAcj7K,EAAGk7K,MACnB,IAAI5/J,MAAQ,EACZ,IAAK,IAAMsoB,KAAKs3I,KACZ,GAAIl7K,EAAIk7K,KAAKt3I,GAAI,CACbtoB,MAAQsoB,EACR,MAGR,OAAOtoB,OAUE6/J,gBAAkB,SAAlBA,gBAAmBn5H,OAAQ3tC,QAAW,IACvC+mK,aAAiB/mK,OAAjB+mK,aACJC,aAAer5H,OAAO,GAAG74C,OAAS,EAAI64C,OAAO,GAAKA,OAAO,GAgB7D,OAfIo5H,cACAC,aAAer5H,OAAO,GAAG74C,OAAS,EAAnBmyK,wBAA2Bt5H,OAAO,OACjDq5H,aAAer5H,OAAO,GAAG74C,OAAS,KAAnB2Z,OAAAw4J,wBAA2BD,cAA3BC,wBAA4Ct5H,OAAO,KAAMq5H,cAExEA,aAAeA,aAAa3rK,IAAI,SAAC8S,IAAKqvH,UAClC,IAAI0pC,WAOJ,OANIv5H,OAAO,GAAG74C,OAAS,IACnBoyK,QAAUD,wBAAIt5H,OAAO,GAAG6vF,YAExB7vF,OAAO,GAAG74C,OAAS,IACnBoyK,WAAOz4J,OAAAw4J,wBAAOC,SAAPD,wBAAmBt5H,OAAO,GAAG6vF,aAEjC0pC,UAGRF,cAyKEG,0BAAsB,SAAtBA,sBAA0D,IAAnC/pK,KAAmC5E,UAAA1D,OAAA,QAAA4L,IAAAlI,UAAA,GAAAA,UAAA,MAAxBwH,OAAwBxH,UAAA1D,OAAA,EAAA0D,UAAA,QAAAkI,EAAhB0mK,YAAgB5uK,UAAA1D,OAAA,EAAA0D,UAAA,QAAAkI,EAAA2mK,qBACpBrnK,OAAvC+mK,+BAD2D,IAAAM,2CACrCC,aAAiBtnK,OAAjBsnK,aADqCC,gBAjOhD,SAAjBC,eAAkBT,cACpB,OAAIA,cAEIU,aAAc7B,uBACd8B,cH4KS,UGxKbD,aHwKa,QGvKbC,cAAe9B,wBA0NqB4B,CAAeT,cAA/CU,aAF2DF,gBAE3DE,aAAcC,cAF6CH,gBAE7CG,cACd/2J,OAAWvT,KAAXuT,OACFg3J,YA/DoB,SAAjBC,eAAkBb,aAAcO,cACzC,OAAKP,cAOD75I,OAAQ,EACRD,MAAOq6I,aAAar6I,QANhBC,OAAQo6I,aAAap6I,OACrBD,MAAO,GA2DK26I,CAAeb,aAAcO,cACjD,GAAI32J,OAAO,GAAGzjB,IAAK,KAAA26K,cACT7gE,cAAY8gE,qBAAAD,iBAAMJ,aAAe,GAArBK,qBAAAD,cAAyBH,cAAgB,GAAzCG,eAYlB,OAVAl3J,OAAOzU,QAAQ,SAAC6rK,WAEZ,IAAM5/F,MAAQg/F,oBAAoBY,UAAW/nK,OAAQonK,aAErDpgE,aAAaygE,cAAgBxwK,KAAK6P,IAAIkgG,aAAaygE,cAAet/F,MAAMs/F,cACpEE,YAAYF,eAEhBzgE,aAAa0gE,iBAAmBv/F,MAAMu/F,iBAE1CtqK,KAAK+qE,MAAQ6+B,aACNA,aAEX,OAzD2B,SAAlB45C,gBAAmBxjJ,KAAMie,SAAUssJ,aAAiC,IAAA5hJ,KAApBiiJ,WAAoBxvK,UAAA1D,OAAA,QAAA4L,IAAAlI,UAAA,GAAAA,UAAA,MACrEivK,aAAgCpsJ,SAAhCosJ,aAAcC,cAAkBrsJ,SAAlBqsJ,cAClBO,kBAAoB,EACpBC,mBAAqB,EAmBzB,OAlBA9qK,KAAKuT,OAAOzU,QAAQ,SAACisK,YAAe,IAAAC,YAC5BC,SAAW,EACXC,SAAW,EACfH,WAAWjsK,QAAQ,SAACq/I,YAAanV,UAC7BmV,YAAYyB,oBACZ,IAAM70E,MAAQozE,YAAYqF,kBAE1B0nB,SAAWrxK,KAAK6P,IAAIwhK,UAAWngG,MAAMu/F,eAAgBC,YAAYD,gBACjEM,WAAW5hC,UAAYnvI,KAAK6P,IAAIkhK,WAAW5hC,WAAa,EAAGj+D,MAAMs/F,eACjEY,WAAaL,WAAW5hC,YAE5B8hC,oBAAsBI,SACtBL,kBAAoBhxK,KAAK6P,IAAImhK,kBAAmBI,UAChDjrK,KAAK+qE,OAAL2/F,qBAAAM,eACKV,cAAgBzwK,KAAKqnB,KAAK4pJ,qBAD/BJ,qBAAAM,YAEKX,aAAexwK,KAAKqnB,KAAK2pJ,oBAF9BG,eAKJN,qBAAA/hJ,QACK2hJ,cAAgBQ,oBADrBJ,qBAAA/hJ,KAEK0hJ,aAAeQ,mBAFpBliJ,KAmCO66H,CAAgBxjJ,MAAQqqK,0BAAcC,6BAAiBC,YAAaP,cAoDlEmB,sBAAwB,SAAxBA,sBAAyBnrK,KAAM2pK,cACxC,GAAI3pK,KAAKuT,OAAO,GAAGzjB,IAAK,CACpB,IAAMuW,OAaN,OAZArG,KAAKuT,OAAOzU,QAAQ,SAAC0X,OACZmzJ,aAGiBwB,sBAAsB30J,MAAOmzJ,cACrC7qK,QAAQ,SAACrO,EAAGlC,GAAM,IAAA68K,OACxB/kK,IAAI9X,GAAK8X,IAAI9X,QACb68K,OAAA/kK,IAAI9X,IAAG2N,KAAPqB,MAAA6tK,OAAAvB,wBAAep5K,MALnB4V,IAAInK,KAAJqB,MAAA8I,IAAGwjK,wBAASsB,sBAAsB30J,MAAOmzJ,kBASjD3pK,KAAKuwC,OAASlqC,IACPA,IAOX,OAFIrG,KAAKuwC,OAHJo5H,aAGa3pK,KAAKuT,OAAO,GAAGtV,IAAI,SAACmmE,IAAK4kE,UAAN,OAAmBhpI,KAAKuT,OAAOtV,IAAI,SAAA8S,KAAG,OAAIA,IAAIi4H,cAFjEhpI,KAAKuT,OAIhBvT,KAAKuwC,QAwIH86H,kBAAoB,SAApBA,kBAAqBhlK,IAAKilK,IAAK7oK,KAAX,OAAmB4D,IAAIyK,MAAMw6J,KAAM7oK,MCldvDgtF,2BACT7sF,QACI4/D,aAAc,SAAAA,aAAC9xC,QAASlhC,OAAV,OAAoB+zE,eAAe7yC,QAAQ00D,YAAe51F,SAE5Ew6K,eACA9iE,kBACA0C,iBCHSh0F,4CACT21J,gBACA56E,YAAa,OACb+0C,qBAAqB,EACrBwkC,cACIp6I,OAAQ,IACRD,MAAO,IACPm1H,OAAQ,GAEZ2kB,cAAc,EACdtnC,ML0OmB,UKzOnBmpC,0TCDiBC,sCAQjB,SAAAA,aAAal7H,QAAqB,IAAb3tC,OAAaxH,UAAA1D,OAAA,QAAA4L,IAAAlI,UAAA,GAAAA,UAAA,kKAAAswK,CAAA11K,KAAAy1K,cAE9Bz1K,KAAK21K,cAAgB,EACrB31K,KAAK41K,eAAiBr7H,OAAO,OAC7Bv6C,KAAK61K,iBAAmBt7H,OAAO,OAC/Bv6C,KAAK81K,gBACL91K,KAAK+1K,mBAGLlpG,sBAAsB7sE,KAAMy5F,2BAC5B,IAAMkd,OAAS19G,OAAO4T,UAAW7M,KAAKglB,YAAYpF,iBAClD5f,KAAK4M,OAAO2gE,eAAeopC,OAAQ/pG,SAEnC5M,KAAKg2K,cAAgBtC,iBAAiBn5H,OAAO,OAAUA,OAAO,QAAWv6C,KAAK4M,4UAU9E,MAAM,IAAIqC,MAAMo+D,UAAUC,sFAI1B,MAAM,IAAIr+D,MAAMo+D,UAAUC,4EAU1B,MAAM,IAAIr+D,MAAMo+D,UAAUC,0FAI1B,MAAM,IAAIr+D,MAAMo+D,UAAUC,wEAY1B,MAAM,IAAIr+D,MAAMo+D,UAAUC,gFAa1B,MAAM,IAAIr+D,MAAMo+D,UAAUC,wFAU1B,MAAM,IAAIr+D,MAAMo+D,UAAUC,8EAW1B,MAAM,IAAIr+D,MAAMo+D,UAAUC,sEAW1B,OAAIloE,UAAO1D,OACA1B,KAEJA,KAAK41K,yEAIZ,OAAIxwK,UAAO1D,OACA1B,KAEJA,KAAK61K,qDAIZ,OAAIzwK,UAAO1D,OACA1B,KAEJA,KAAKi2K,sDAOF,IAAAC,aHnEQ,SAAbxP,WAAchsI,SACvB,IAAIy7I,cACAC,aAAe,EACf/pC,MHwKe,UGvKbvjB,OAAShjF,aACThgC,QACAuwK,aAAe37I,QAAQs7I,cACvBM,cAAgB57I,QAAQ47I,gBACxBC,gBAAkB77I,QAAQ67I,kBARGriE,gBASCx5E,QAAQ9tB,SAApC+mK,aAT2Bz/D,gBAS3By/D,aAAc6C,UATatiE,gBASbsiE,UAEtB,GAAK7C,aAsCE,CAQH,GANItnC,MADyB,IAAzBiqC,cAAc50K,OHyHH,UGvHuB,IAA3B60K,gBAAgB70K,OHwHV,YGrHL40K,cAAc50K,QAAU60K,gBAAgB70K,OHoHrC,UACE,YGnHb40K,cAAc50K,OAAS,EAAG,CAC1B,IAAK,IAAInJ,IAAI,EAAGA,IAAI+9K,cAAc50K,OAAS,EAAGnJ,MAC1CuN,KAAKI,KAAK3N,KAGduN,KAAKI,KAAKowK,cAAc50K,OAAS,GH8GpB,cG5GT2qI,QACA+pC,aAAeE,cAAc50K,OAAS,GAG9C,GAAI60K,gBAAgB70K,OAAS,EAAG,CAE5B,IADA,IAAM+0K,oBAAsBH,cAAc50K,OACjCnJ,IAAIg+K,gBAAgB70K,OAAS,EAAGnJ,IAAI,EAAGA,MAC5CuN,KAAKI,KAAK3N,IAAIk+K,qBAGlB3wK,KAAKI,KAAKuwK,qBHiGC,YG/FPpqC,QACA+pC,aAAeK,qBAUvB,IAAIC,UAPJ5wK,KAAKgD,QAAQ,SAAChP,KACV,IAAI6xI,SAAW,EACf,OAAO7iB,OAAOhvH,IAAI,SAACjB,GAEf,OADA8yI,UACA,GAAAtwH,OAAUxiB,EAAEiB,KAAK8jB,UAAjB,KAAAvC,OAA8Bm4J,WAAW7nC,QAAS6qC,gBAI1DE,UAAYL,aAAa,GAAGpuK,IAAI,SAACmmE,IAAK4kE,UAAN,OAAmBqjC,aAAapuK,IAAI,SAAA8S,KAAG,OAAIA,IAAIi4H,cAC/EmjC,WAAartD,OAAOt0G,QAAQkiK,eA9Eb,CAQf,GANIrqC,MADyB,IAAzBiqC,cAAc50K,OH+JH,UG7JuB,IAA3B60K,gBAAgB70K,OH8JV,YG3JL40K,cAAc50K,QAAU60K,gBAAgB70K,OH0JrC,UACE,YGzJb40K,cAAc50K,OAAS,EAAG,CAC1B,IAAK,IAAInJ,EAAI,EAAGA,EAAI+9K,cAAc,GAAG50K,OAAS,EAAGnJ,IAC7CuN,KAAKI,KAAK3N,GAEduN,KAAKI,KAAKowK,cAAc,GAAG50K,OAAS,GHqJvB,cGpJT2qI,OAAkD,IAA3BkqC,gBAAgB70K,SACvC00K,aAAeE,cAAc,GAAG50K,OAAS,GAGjD,GAAI60K,gBAAgB70K,OAAS,EAAG,CAE5B,IADA,IAAMi1K,UAAYL,cAAc50K,OAAS,EAAI40K,cAAc,GAAG50K,OAAS,EAC9DnJ,GAAIg+K,gBAAgB,GAAG70K,OAAS,EAAGnJ,GAAI,EAAGA,KAC/CuN,KAAKI,KAAK3N,GAAIo+K,WAElB7wK,KAAKI,KAAKywK,WH0IC,YGxIPtqC,QACA+pC,aAAeO,gBAGnBP,aAAeE,cAAc50K,OAAS,EAAI40K,cAAc,GAAG50K,OAAS,EAAI,EAE5EoE,KAAKgD,QAAQ,SAAChP,KACV,IAAI6xI,SAAW,EACf,OAAO7iB,OAAOhvH,IAAI,SAACjB,GAEf,OADA8yI,UACA,GAAAtwH,OAAUxiB,EAAEiB,KAAK8jB,UAAjB,KAAAvC,OAA8Bm4J,WAAW7nC,QAAS6qC,gBAG1DL,WAAartD,OAAOt0G,QAAQ6hK,cA2ChC,OAASn3G,KAAMi3G,WAAYC,2BGvBQ1P,CAAW1mK,MAAlCk/D,KADEg3G,aACFh3G,KAAMk3G,aADJF,aACIE,aAEd,OADAp2K,KAAK21K,cAAgBS,aACdl3G,+DAUP,OAAOl/D,KAAK4zG,2EAUG/5E,MAAOC,QACtB95B,KAAKkxG,gBAAiBr3E,YAAOC,gBAC7B,IAAMolC,KAAOl/D,KAAKk/D,OACZ03G,eAAiB52K,KAAK62K,oBAAoBrE,uBAAQtzG,MAClD43G,cAAgB92K,KAAK62K,oBNiBd,QMjByC33G,MAChDl5B,MAAQhmC,KAAK+2K,eAAeD,cAAeF,gBAIjD,OAFA52K,KAAKg3K,eAAiBh3K,KAAKi3K,qBAAqBjxI,OAChDhmC,KAAKk3K,iBAAmBl3K,KAAKm3K,mBAAmBt9I,MAAOC,QAChD95B,qEAYU3E,KAAM86K,YAAsC,IAAA1hK,MAAAzU,KAA1BgmC,MAA0B5gC,UAAA1D,OAAA,QAAA4L,IAAAlI,UAAA,GAAAA,UAAA,GAAlB,EAAG6iB,SAAe7iB,UAAA1D,OAAA,QAAA4L,IAAAlI,UAAA,GAAAA,UAAA,MAE7D,GADA6iB,SAAS+d,OAASniC,KAAK6P,IAAIuU,SAAS+d,QAAU,EAAGmwI,WAAWphG,MAAM15E,OAC9D86K,WAAW54J,OAAQ,CACnB,IAAM65J,WAAapxI,MAAQ,EAC3BmwI,WAAW54J,OAAOzU,QAAQ,SAAC0X,OACnBA,MAAMu0D,QACN9sD,SAAWxT,MAAKoiK,oBAAoBx7K,KAAMmlB,MAAO42J,WAAYnvJ,aAIzE,OAAOA,uEAUP,OAAOjoB,KAAKk3K,mFAUZ,OAAOl3K,KAAKg3K,iFAUMhxI,OAClB,IAAM31B,OAEN,OHsP6B,SAAxBgnK,wBAAiE,IAAxChnK,IAAwCjL,UAAA1D,OAAA,QAAA4L,IAAAlI,UAAA,GAAAA,UAAA,MAA9B4gC,MAA8B5gC,UAAA1D,OAAA,EAAA0D,UAAA,QAAAkI,EAAvBgqK,WAAuBlyK,UAAA1D,OAAA,EAAA0D,UAAA,QAAAkI,EAAXujK,OAAWzrK,UAAA1D,OAAA,EAAA0D,UAAA,QAAAkI,EACpEiqK,aAAe1G,OAAO2G,cAGxB7D,aAFW9C,OAAOjkK,SAElB+mK,aAGAz0G,KAEAo4G,WAFAp4G,KACAm3G,aACAiB,WADAjB,aAGJ,GAAc,IAAVrwI,MAAa,CACb,IAAMyxI,aAnJa,SAAdC,YAAen9H,OAAQo5H,aAAc4D,cAC9C,IAAMjB,iBACAC,mBAsBN,OArBI5C,aACAp5H,OAAOzxC,QAAQ,SAACiS,IAAKqvH,UACbA,UAAYmtC,aACZhB,gBAAgBrwK,KAAK6U,KAErBu7J,cAAcpwK,KAAK6U,OAI3Bw/B,OAAOzxC,QAAQ,SAACiS,IAAKqvH,UACjBrvH,IAAIjS,QAAQ,SAACsS,OAAQivH,aACbA,aAAektC,cACfhB,gBAAgBnsC,UAAYmsC,gBAAgBnsC,cAC5CmsC,gBAAgBnsC,UAAUlkI,KAAKkV,UAE/Bk7J,cAAclsC,UAAYksC,cAAclsC,cACxCksC,cAAclsC,UAAUlkI,KAAKkV,cAKrCk7J,cAAeC,iBA2HEmB,CAAYx4G,KAAK3kB,OAAQo5H,aAAc4D,cAO5D,OANAlnK,IAAInK,MACAq0C,OAAQ2kB,KAAK3kB,OACb+7H,cAAemB,aAAa,GAC5BlB,gBAAiBkB,aAAa,GAC9B1iG,MAAO7V,KAAK6V,QAET1kE,IAEX,IAAMsnK,UAAY3xI,MAAQ,EAO1B,OANAk5B,KAAK3hD,OAAOzU,QAAQ,SAACrO,GACjB48K,sBAAsBhnK,IAAKsnK,WACvBz4G,KAAMzkE,EACN47K,2BACDxF,UAEAxgK,IGnRHgnK,CAAsBhnK,IAAK21B,MAAOhmC,KAAK43K,mBAAoB53K,MACpDqQ,4DA1FP,OAAOuP,sxCC7HMi4J,mDAQjB,SAAAA,gBAAat9H,QAAqB,IAAA9lC,MAAb7H,OAAaxH,UAAA1D,OAAA,QAAA4L,IAAAlI,UAAA,GAAAA,UAAA,qKAAA0yK,CAAA93K,KAAA63K,kBAC9BpjK,MAAAsjK,qCAAA/3K,KAAAg4K,0BAAAH,iBAAAn/K,KAAAsH,KAAMu6C,OAAQ3tC,UAET4qK,cAAiBj9H,OAAO,GAAG74C,OAAS,EAAI64C,OAAO,GAAG,GAAG74C,OAAS,EACnE+S,MAAKuhK,cAAgBtC,iBAAiBn5H,OAAO,OAAUA,OAAO,QAAW9lC,MAAK7H,UAG9E6H,MAAKwhK,OACDn8K,IAAK24K,SACLl1J,OAAQ9I,MAAKiyJ,cAEjBjyJ,MAAKggK,cAAgBhgK,MAAKs/J,sBAXIt/J,uYAROghK,iVA6BrC,IAAMU,WAAan2K,KAAKk/D,OAExB,OADAi2G,sBAAsBgB,YAAY,GAC3BpC,0BAAoBoC,WAAYn2K,KAAK4M,SAAU5M,KAAKg0K,mFAGxC/rJ,UAAU,IAAAtT,OAAA3U,KAEzBi4K,WAGAhwJ,SAHAgwJ,WACAC,UAEAjwJ,SAFAiwJ,UACAp+I,OACA7R,SADA6R,OAEJ,OAAO95B,KAAKg3K,eAAe/uK,IAAI,SAACkwK,WAAY5/K,GACxC,IAAM6/K,gBAAmBD,sBAAYD,oBAAWD,sBAAYI,YAAa9/K,GAD3B+/K,sBAED3jK,OAAK4jK,kBAAkBH,gBAA5DI,OAFsCF,sBAEtCE,OAAQC,WAF8BH,sBAE9BG,WAAYC,aAFkBJ,sBAElBI,aACtB9B,gBAAkB98I,OAAQA,QAC1B0tG,eAAiBgxC,OAEvB,OACIC,YACIE,QAASF,WAAW,GACpBG,UAAWH,WAAW,IAE1BC,cACIC,QAASD,aAAa,GACtBE,UAAWF,aAAa,IAE5B5+I,QACI6+I,QAAS/B,eAAe,GACxBgC,UAAWhC,eAAe,IAE9B/8I,OACI8+I,QAASnxC,eAAe,GACxBoxC,UAAWpxC,eAAe,mEAYtB,IAAAhgC,aAIZxnG,KAAK4M,SAFL+mK,aAFYnsE,aAEZmsE,aACA6B,iBAHYhuE,aAGZguE,iBAEEj7H,OAASv6C,KAAKg2K,cACd92G,KAAOqO,kBAAmBvtE,KAAKk/D,QAC/B25G,WAAarD,iBAAiB,GAC9BsD,WAAatD,iBAAiB,IAAMhtK,OAAOqP,kBAC3Cw+J,aAAgB1C,aACtBp5H,OAAOz/B,MAAM,GAAG7S,IAAI,SAAAxN,GAAC,OAAI46K,kBAAkB56K,EAAGo+K,WAAYC,cADrBzD,kBAAkB96H,OAAQs+H,WAAYC,YAM3E,OAHA55G,KAAK3hD,OAAS83J,kBAAkBn2G,KAAK3hD,OAAQs7J,WAAYC,YACzD55G,KAAK3kB,OAAS86H,kBAAkBn2G,KAAK3kB,OAAQs+H,WAAYC,aAGrD55G,UACAm3G,mGAIiBpuJ,UACrB,IAAI8wJ,qBACAC,gBACAC,WACAC,cACAC,iBAAmB,EAEnB5+H,OAKAtyB,SALAsyB,OACO6+H,eAIPnxJ,SAJA4R,MACaq+I,UAGbjwJ,SAHA+rJ,YACUqF,aAEVpxJ,SAFAgT,SACAnB,OACA7R,SADA6R,OAEE0hD,SAAWx7E,KAAK4M,SAAS4uE,SACzBi7F,oBAAsBz2K,KAAKs2K,gBAAgB50K,OAAS1B,KAAKs2K,gBAAgB,GAAG50K,OAAS,EAErFo1G,QAENiiE,qBAAuBK,eACvBJ,gBAAkBK,cAGdH,WADa,IAAb19F,UACci7F,oBAAsB,EAAGA,qBAGb,IAAbj7F,UAAkBi7F,oBAAsB,IAAMA,sBAGpD3tK,QAAQ,SAACvQ,GAChBu+G,KAAKv+G,GAAK2/K,UAAU3/K,GACpB4gL,kBAAoBjB,UAAU3/K,GAC9BwgL,sBAAwBjiE,KAAKv+G,GAC7BygL,iBAAmBliE,KAAKv+G,KAE5BgiD,OAAO,GAAGzxC,QAAQ,SAACrO,EAAGlC,IACa,IAA3B2gL,WAAWjzK,QAAQ1N,KACnBu+G,KAAKv+G,GAAKwgL,sBAAwBb,UAAU3/K,GAAKygL,oBAGzDz+H,OAAOzxC,QAAQ,SAAAiS,KAAG,OAAIA,IAAIjS,QAAQ,SAACslE,IAAK48D,OACF,IAA9BkuC,WAAWjzK,QAAQ+kI,OACnB58D,IAAIw7E,kBAAkB9yC,KAAKk0B,MAAOlxG,QAElCm/I,QAAQjuC,MAAQnnI,KAAK6P,IAAIulK,QAAQjuC,OAAS,EAAGnnI,KAAK8M,MAAMy9D,IAAIo/E,kBAAkB3zH,SAE9Eo/I,QAAQjuC,MAAQ,MAIxB,IAAMsuC,cAAgBF,eAAiBH,QAAQlnK,OAAO,SAACtY,EAAGO,GAAJ,OAAUP,EAAIO,IAQpE,OAPIs/K,cAAgB,EAChBL,QAAUA,QAAQhxK,IAAI,kBAAM,IAE5BixK,WAAWpwK,QAAQ,SAACvQ,GAChB0gL,QAAQ1gL,GAAKsL,KAAK8M,MAAM2oK,eAAiBxiE,KAAKv+G,GAAK4gL,kBAAoB,MAGxEF,8DAWKnC,cAAeF,gBAC3B,IAAIr+K,EACIuhC,OAAW95B,KAAKkxG,iBAAhBp3E,OAER,IAAKvhC,EAAI,EAAGA,EAAIq+K,eAAel1K,UACvBk1K,eAAer+K,IAAMuhC,QADUvhC,KAIvC,OAAOsL,KAAK2P,IAAIsjK,cAAcp1K,OAAS,EAAGnJ,iEAY1BshC,MAAOC,QAAQ,IAAA1iB,OAAApX,KAC3Bi4K,cACAC,aACElE,YAAch0K,KAAKg0K,cAEnB/4I,SAAW+4I,YAAYjiK,OAAO,SAACtY,EAAGO,GAEpC,OADAP,GAAKO,IAGHu/K,cAAgBv5K,KAAKw5K,yBACvBj/H,OAAQv6C,KAAKg2K,cACb/6I,kBACA+4I,wBACAn6I,YACAC,gBAYJ,OATA95B,KAAKg3K,eAAeluK,QAAQ,SAACqvK,YACzB,IAGMxxK,SAAY8yK,OAFH,EAEWC,QADV,EACmBn/H,OAHpB49H,WAAW59H,OAGiB1gB,YAAOC,cAAQm+I,sBAAYC,oBAAWqB,6BAC3EtxJ,SAAW7Q,OAAKuiK,uBAAuBhzK,SAC7CuxK,UAAYjwJ,SAASiwJ,UACrBD,WAAahwJ,SAASgwJ,aAEnBj4K,KAAK45K,uBAAwB9/I,cAAQD,YAAOo+I,sBAAYC,4FAS3CjwJ,UACpB,IACI4xJ,SACAH,QAFAT,WAGEjF,YAAch0K,KAAKg0K,cAJKp6D,cAW1B55G,KAAK4M,SAJL8iI,oBAP0B91B,cAO1B81B,oBACA6lC,aAR0B37D,cAQ1B27D,aACA5B,aAT0B/5D,cAS1B+5D,aACAmG,OAV0BlgE,cAU1BkgE,OAEIv/H,OAAyDtyB,SAAzDsyB,OAAQzgB,OAAiD7R,SAAjD6R,OAAQm+I,WAAyChwJ,SAAzCgwJ,WAAYC,UAA6BjwJ,SAA7BiwJ,UAAWqB,cAAkBtxJ,SAAlBsxJ,cAC/CG,QJyC0B,SAArBK,mBAAsBx/H,OAAQy4F,UACvC,IAAIl5G,OAAS,EACTD,MAAQ,EAOZ,OANA0gB,OAAOzxC,QAAQ,SAACiS,KACZ,IACMi/J,OADMj/J,IAAIi4H,UACGwa,kBACnB3zH,MAAQh2B,KAAK6P,IAAImmB,MAAOmgJ,OAAOngJ,OAC/BC,QAAUkgJ,OAAOlgJ,UAGjBD,YACAC,eIpDUigJ,CAAmBx/H,OAAQv6C,KAAK21K,eAAe77I,OAEzD,IAAMmB,SAAW+4I,YAAYjiK,OAAO,SAACtY,EAAGO,GAEpC,OADAP,GAAKO,IAGTiuB,SAAS+rJ,YAAcA,YACvB/rJ,SAASgT,SAAWA,SAEhBg+I,QADAh+I,SAAW,EACDs+I,cAEAvF,YAAY/rK,IAAI,kBAAM,IAEpC4xK,SJ2J4B,SAAvBI,qBAAwBv/I,SACjC,IAEIw/I,oBAFAC,QAAU,EACVC,UAAY,EAGZzG,aAQAj5I,QARAi5I,aACA4B,aAOA76I,QAPA66I,aACA8E,gBAMA3/I,QANA2/I,gBACAvgJ,OAKAY,QALAZ,OACA41G,oBAIAh1G,QAJAg1G,oBACAoqC,OAGAp/I,QAHAo/I,OACAv/H,OAEA7f,QAFA6f,OACAywF,KACAtwG,QADAswG,KAGAuqC,mBAAoCjoK,IAApBioK,aAAa,KAC7B4E,QAAU5E,aAAaxjK,OAAO,SAACtY,EAAGO,GAE9B,OADAP,GAAKO,KAIT8/K,aAAwBxsK,IAAdwsK,OAAO,KACjBM,UAAYN,OAAO/nK,OAAO,SAACtY,EAAGO,GAE1B,OADAP,GAAKO,KAIbkgL,oBAAsBG,gBAAkBx2K,KAAK8M,MAAM0pK,gBAAkBD,WAErE,IAAME,OAAS//H,OAAO74C,OACtB,OAAO64C,OAAOtyC,IAAI,SAAC8S,IAAK8vH,MACpB,IACM91D,MADMh6D,IAAIiwH,MACEwiB,kBAAkB1zH,OAChCygJ,WAAcxlG,MAA0CA,MAAQj7C,QAAzCogJ,oBAAsBpgJ,QASjD,OAPK65I,eACG4B,aAAa7zK,OAAS,GAAK44K,SAAW/E,aAAa7zK,OACnD64K,WAAcL,oBAAsB3E,aAAa1qC,MAAQsvC,SAClDzqC,qBAA0C,IAAnBh1G,QAAQZ,UACtCygJ,WAAcL,oBAAsBI,SAGrCz2K,KAAK8M,MAAM4pK,cIrMPN,EACP1/H,cACAywF,KAAMhrI,KAAK21K,cACX77I,OAAQ4/I,QACRW,gBAAiBvgJ,OACjB41G,wCACA6lC,0BACA5B,0BACAmG,gBAEA5B,UAAUx2K,OAAS,IACnBu3K,QAAUA,QAAQhxK,IAAI,SAACxN,EAAGlC,GAAJ,OAAUsL,KAAK6P,IAAIjZ,EAAGy9K,UAAU,GAAG3/K,IAAM,MAEnE2/K,UAAUhyK,KAAK+yK,SACf,IAAK,IAAI98I,EAAI,EAAGA,EAAI+7I,UAAUx2K,OAAQy6B,IAClC+7I,UAAU/7I,GAAK88I,QAGnB,OADAhB,WAAW/xK,KAAK2zK,WACP3B,oBAAWD,mFAULhwJ,UAAU,IAAAyL,OAAA1zB,KAInBw6K,YADFx6K,KAAK4M,SADLsnK,aAE6BllB,OACzBmpB,WAAmDlwJ,SAAnDkwJ,WAAYD,UAAuCjwJ,SAAvCiwJ,UAAWD,WAA4BhwJ,SAA5BgwJ,WAAYI,YAAgBpwJ,SAAhBowJ,YACrC99H,OAAS49H,WAAW59H,OACpBk+H,aAAe,IAAK,IACpBC,eAAiB,IAAK,IAEtBF,QAAU,EAAG,GACbjB,aAAev3K,KAAKw3K,cAsB1B,OApBAj9H,OAAOzxC,QAAQ,SAACiS,IAAK8vH,MACjB9vH,IAAIjS,QAAQ,SAAC63D,KAAMqqE,MACf,IAAMyvC,UAAYxC,WAAWI,aAAaxtC,OAAS,EAC7C6vC,SAAWxC,UAAUG,aAAartC,MAExCrqE,KAAKipF,kBAAkB8wB,SAAUD,UAAYD,aAEhC,IAAT3vC,MAAcG,KAAOusC,cACrBmB,aAAa,GAAG1tC,MAAQ0vC,SACxBlC,OAAO,IAAMA,OAAO,IAAM,GAAKkC,UACf,IAAT7vC,MAAcG,MAAQusC,eAC7BmB,aAAa,GAAG1tC,KAAOusC,cAAgBmD,SACvClC,OAAO,IAAMA,OAAO,IAAM,GAAKkC,UAE/B1vC,OAASt3G,OAAKiiJ,gBACd8C,WAAW,GAAG5tC,MAAQ4vC,UACtBhC,WAAW,GAAG5tC,MAAQ4vC,gBAK9BE,SAzBa,EAAG,GA0BhBnC,cACAC,sBACAC,uyCCrTSkC,yDAQjB,SAAAA,mBAAargI,QAAqB,IAAA9lC,MAAb7H,OAAaxH,UAAA1D,OAAA,QAAA4L,IAAAlI,UAAA,GAAAA,UAAA,wKAAAy1K,CAAA76K,KAAA46K,qBAC9BnmK,MAAAqmK,wCAAA96K,KAAA+6K,6BAAAH,oBAAAliL,KAAAsH,KAAMu6C,OAAQ3tC,UAET4qK,cAAgBj9H,OAAO,GAAG74C,OAG/B+S,MAAKwhK,OACDn8K,IAAK44K,YACLn1J,OAAQ9I,MAAKiyJ,cAEjBjyJ,MAAKggK,cAAgBhgK,MAAKs/J,sBAVIt/J,gZARUghK,6VA4BxC,IAAMU,WAAan2K,KAAKk/D,OAExB,OADAi2G,sBAAsBgB,YAAY,GAC3BpC,0BAAoBoC,WAAYn2K,KAAK4M,SAAU5M,KAAKg0K,mFAGxC/rJ,UAAU,IAAAtT,OAAA3U,KAEzBi4K,WAIAhwJ,SAJAgwJ,WACAC,UAGAjwJ,SAHAiwJ,UACAp+I,OAEA7R,SAFA6R,OACAD,MACA5R,SADA4R,MAGJ,OAAO75B,KAAKg3K,eAAe/uK,IAAI,SAACkwK,WAAY5/K,GACxC,IAAM6/K,gBAAmBD,sBAAYD,oBAAWD,sBAAYI,YAAa9/K,EAAGuhC,eAD9Bw+I,sBAM1C3jK,OAAK4jK,kBAAkBH,gBAHvBuC,QAH0CrC,sBAG1CqC,QACAlC,WAJ0CH,sBAI1CG,WACAC,aAL0CJ,sBAK1CI,aAEE9B,eAAiB+D,QACjBnzC,gBAAkB3tG,MAAOA,OAE/B,OACI4+I,YACIE,QAASF,WAAW,GACpBG,UAAWH,WAAW,IAE1BC,cACIC,QAASD,aAAa,GACtBE,UAAWF,aAAa,IAE5B5+I,QACI6+I,QAAS/B,eAAe,GACxBgC,UAAWhC,eAAe,IAE9B/8I,OACI8+I,QAASnxC,eAAe,GACxBoxC,UAAWpxC,eAAe,mEAYtB,IAAAhgC,aAIZxnG,KAAK4M,SAFL+mK,aAFYnsE,aAEZmsE,aACA6B,iBAHYhuE,aAGZguE,iBAEEj7H,OAASv6C,KAAKg2K,cACd92G,KAAOqO,kBAAmBvtE,KAAKk/D,QAC/B25G,WAAarD,iBAAiB,GAC9BsD,WAAatD,iBAAiB,IAAMhtK,OAAOqP,kBAC3Cw+J,aAAgB1C,aACtBp5H,OAAOz/B,MAAM,GAAG7S,IAAI,SAAAxN,GAAC,OAAI46K,kBAAkB56K,EAAGo+K,WAAYC,cADrBzD,kBAAkB96H,OAAQs+H,WAAYC,YAO3E,OAJA55G,KAAK3hD,OAAS83J,kBAAkBn2G,KAAK3hD,OAAQs7J,WAAYC,YAEzD55G,KAAK3kB,OAAS2kB,KAAK3kB,OAAOtyC,IAAI,SAAAxN,GAAC,OAAI46K,kBAAkB56K,EAAGo+K,WAAYC,eAGhE55G,UACAm3G,mGAIiBpuJ,UAAU,IAE3B6R,OAEA7R,SAFA6R,OACAm+I,WACAhwJ,SADAgwJ,WAEA+C,iBAAmBlhJ,OACnBmhJ,cACA/B,cACAgC,QAAU,EACR1/F,SAAWx7E,KAAK4M,SAAS4uE,SACzBi7F,oBAAsBz2K,KAAKs2K,gBAAgB50K,OA0BjD,OAxBiB,IAAb85E,UACA09F,YAAczC,oBAAsB,EAAGA,qBACvCyE,QAAU,IAEVhC,WAA0B,IAAb19F,UAAkBi7F,oBAAsB,IAAMA,qBAC3DyE,QAAU,GAEdjD,WAAWnvK,QAAQ,SAACrO,EAAGlC,IACY,IAA3B2gL,WAAWjzK,QAAQ1N,KACnB0iL,WAAW1iL,GAAKkC,EAChBugL,kBAAoBvgL,KAGxBugL,iBAAmB,EACnBC,WAAaA,WAAWhzK,IAAI,kBAAM,IAElCixK,WAAWpwK,QAAQ,SAACrO,GACZugL,iBAAmBE,QAAUjD,WAAWx9K,GACxCwgL,WAAWxgL,GAAK,EAEhBwgL,WAAWxgL,GAAKoJ,KAAK2P,IAAIykK,WAAWx9K,GAAKugL,iBAAoBE,WAIlED,iEAWKnE,eACZ,IAAIj8J,EACIgf,MAAU75B,KAAKkxG,iBAAfr3E,MAER,IAAKhf,EAAI,EAAGA,EAAIi8J,cAAcp1K,UACtBo1K,cAAcj8J,IAAMgf,OADUhf,KAGtC,OAAOhX,KAAK2P,IAAIsjK,cAAcp1K,OAAS,EAAGmZ,iEAY1Bgf,MAAOC,QAAQ,IAAA1iB,OAAApX,KAC3Bi4K,cACAC,aAYJ,OAVAl4K,KAAKg3K,eAAeluK,QAAQ,SAACqvK,YACzB,IAGMxxK,SAAY8yK,OAFH,EAEWC,QADV,EACmBn/H,OAHpB49H,WAAW59H,OAGiB1gB,YAAOC,cAAQm+I,sBAAYC,qBAChElE,YAAc58J,OAAKuiK,uBAAuBhzK,SAChDuxK,UAAYlE,YAAYkE,UACxBD,WAAajE,YAAYiE,aAGtBj4K,KAAK45K,uBAAwB9/I,cAAQD,YAAOo+I,sBAAYC,4FAS3CjwJ,UACpB,IAAI4xJ,YAEAt/H,OAIAtyB,SAJAsyB,OACA1gB,MAGA5R,SAHA4R,MACAo+I,WAEAhwJ,SAFAgwJ,WACAC,UACAjwJ,SADAiwJ,UAEEsC,YAAcx6K,KAAK4M,SAASsnK,aAAallB,OAEzCyqB,OLoDiB,SAAlB0B,gBAAmBpgK,KAC5B,IAAI+e,OAAS,EACTD,MAAQ,EAMZ,OALA9e,IAAIjS,QAAQ,SAACslE,KACT,IAAM4rG,OAAS5rG,IAAIo/E,kBACnB1zH,OAASj2B,KAAK6P,IAAIomB,OAAQkgJ,OAAOlgJ,QACjCD,OAASmgJ,OAAOngJ,SAGhBA,YACAC,eK9DeqhJ,CAAgB5gI,OAAOv6C,KAAK21K,gBAAgB97I,MACrDo/I,QLgKqB,SAAtBmC,oBAAuB1gJ,QAAS2gJ,cAAiB,IAEtDjC,eAGA1+I,QAHA0+I,eACAv/I,MAEAa,QAFAb,MACA9e,IACA2f,QADA3f,IAGA20H,oBAGA2rC,aAHA3rC,oBACAikC,aAEA0H,aAFA1H,aACA4B,aACA8F,aADA9F,aAEA4E,QAAU,EAOd,OANI5E,cAAgBA,aAAa,KAC7B4E,QAAU5E,aAAaxjK,OAAO,SAACtY,EAAGO,GAE9B,OADAP,GAAKO,KAIN+gB,IAAI9S,IAAI,SAACmmE,IAAK4kE,UACjB,IAAMj+D,MAAQ3G,IAAIo/E,kBAAkB3zH,MAChCyhJ,UAAavmG,MAAoCA,MAAQl7C,OAAnCu/I,eAAiBv/I,OAC3C,GAAI85I,aACA,GAAI4B,aAAa7zK,OAAS,EACtB45K,UAAalC,eAAiB7D,aAAaviC,UAAYmnC,aACpD,GAAIzqC,qBAAiC,IAAV71G,MAAa,CAC3C,IAAM0hJ,OAASxgK,IAAIrZ,OACnB45K,UAAalC,eAAiBmC,OAGtC,OAAO13K,KAAK8M,MAAM2qK,aK7LFF,EACZrgK,IAAKw/B,OAAOv6C,KAAK21K,eACjB97I,MAAO4/I,OACPL,eAAgBv/I,OACjB75B,KAAK4M,UAER2tC,OAAOzxC,QAAQ,SAACiS,IAAK8vH,MAAN,OAAe9vH,IAAIjS,QAAQ,SAACslE,IAAK48D,MAC5C,IAAMwwC,gBAAkBptG,IAAIo/E,kBAE5Bp/E,IAAIw7E,kBAAkBqvB,QAAQjuC,MAAQwvC,YAAagB,gBAAgB1hJ,QACnE+/I,SAAShvC,MAAQhnI,KAAK6P,IAAImmK,SAAShvC,OAAS,EAAGhnI,KAAK8M,MAAMy9D,IAAIo/E,kBAAkB1zH,aAEhFm+I,WAAWv2K,OAAS,IACpBm4K,SAAWA,SAAS5xK,IAAI,SAACxN,EAAGlC,GAAJ,OAAUsL,KAAK6P,IAAIjZ,EAAGw9K,WAAW,GAAG1/K,OAEhE0/K,WAAW/xK,KAAK2zK,UAChB,IAAK,IAAI19I,EAAI,EAAGA,EAAI87I,WAAWv2K,OAAQy6B,IACnC87I,WAAW97I,GAAK09I,SAGpB,OADA3B,UAAUhyK,KAAK+yK,UACNhB,sBAAYC,iFAUNjwJ,UAAU,IAAAyL,OAAA1zB,KAInBw6K,YADFx6K,KAAK4M,SADLsnK,aAE6BllB,OACzBmpB,WAA2DlwJ,SAA3DkwJ,WAAYr+I,OAA+C7R,SAA/C6R,OAAQo+I,UAAuCjwJ,SAAvCiwJ,UAAWD,WAA4BhwJ,SAA5BgwJ,WAAYI,YAAgBpwJ,SAAhBowJ,YAC7C99H,OAAS49H,WAAW59H,OACpBk+H,aAAe,IAAK,IACpBC,eAAiB,IAAK,IACtBiC,SAAW,EAAG,GAEdpD,aAAev3K,KAAKw3K,cAEpBiE,mBAAqBz7K,KAAKw5K,yBAA0B1/I,cAAQm+I,WAAYA,WAAW,SAsBzF,OApBA19H,OAAOzxC,QAAQ,SAACiS,IAAK8vH,MACjB9vH,IAAIjS,QAAQ,SAAC63D,KAAMqqE,MACf,IAAMyvC,UAAYgB,mBAAmB5wC,OAAS,EACxC6vC,SAAWxC,UAAUG,aAAartC,MAExCrqE,KAAKipF,kBAAkB8wB,SAAWF,YAAaC,WAElC,IAATzvC,MAAcH,KAAO0sC,cACrBkB,WAAW,GAAG5tC,MAAQ4vC,UACtBE,QAAQ,IAAMA,QAAQ,IAAM,GAAKF,WACjB,IAATzvC,MAAcH,MAAQ0sC,eAC7BkB,WAAW,GAAG5tC,KAAO0sC,cAAgBkD,UACrCE,QAAQ,IAAMA,QAAQ,IAAM,GAAKF,WAEjC5vC,OAASn3G,OAAKiiJ,gBACd+C,aAAa,GAAG1tC,MAAQ0vC,SACxBhC,aAAa,GAAG1tC,MAAQ0vC,eAKhCC,gBACAnC,QA3BY,EAAG,GA4BfC,sBACAC,+zECjRL,SAASgD,qBAAsBnhI,OAAQl/C,MAC1C,OAAIk/C,OACOA,OAAOizG,kBAAkBnyJ,MAE7B,EAoBX,IAAMuuJ,+BAAoB,SAApBA,kBAAqBrvG,OAAQi+H,OAAQmC,SACvCpgI,OAAOzxC,QAAQ,SAACiS,IAAK8vH,MACjB9vH,IAAIjS,QAAQ,SAACq/I,YAAand,MACtBmd,YAAYyB,kBAAkB4uB,OAAOxtC,MAAO2vC,QAAQ9vC,YAK1D8wC,cAAgB,SAAhBA,cAAiB9K,OAAQ+K,YAAaC,YACxC,IAAIC,QAAUjL,OAAOjkK,SAAP,GAAAyO,OAAmBugK,YAAnB,YAKd,OAJIC,WAAWn6K,OAAS,EAAIo6K,UACxBA,QAAU,EACVjL,OAAOjkK,OAAPmvK,+BAAA,GAAA1gK,OAAoBugK,YAApB,WAA2CE,WAExCA,SAGLE,sBACF5gK,QACIw5J,WTgNsC,mCS/MtCr6H,OTgNqB,eS/MrBw/G,YToIa,QSnIbkiB,WAAYrJ,4BAEhB73J,KACI65J,WT4MuC,iCS3MvCr6H,OT4MkB,YS3MlBw/G,YAAayY,uBACbyJ,WAAYtJ,2BAkDduJ,wBAA0B,SAA1BA,wBAA2BrL,OAAQ3lB,WAAYixB,kBAAmB/kH,QAAxC,OAlCM,SAAhCglH,8BAAiCvL,OAAQwL,eAAgBzH,WAAYx9G,QAAW,IAE9E2qG,WACA8O,OAAOjkK,SADPm1J,WAGAxnH,OAGA8hI,eAHA9hI,OACAw/G,YAEAsiB,eAFAtiB,YACAkiB,WACAI,eADAJ,WAGJ,OAAQla,YACR,ITuKoB,WStKhB,OAAO6S,WACX,QACI,IAAM0H,cAAgBZ,qBAAqB7K,OAAOt2H,UAAWw/G,aAAe3iG,OAK5E,OAHIklH,cAAgB1H,YAChB/D,OAAO0L,WAAPR,+BAAqBE,YAAa,IAE/Bp4K,KAAK6P,IAAIkhK,WAAY0H,gBAgBhCF,CAA8BvL,OAAQmL,qBAAqB9wB,YAAaixB,kBAAmB/kH,SA+DzFolH,oCAAyB,SAAzBA,uBAA0B3L,OAAQ4L,mBAAsB,IAEtD3iJ,OACA+2I,OAAO3yE,cADPpkE,OAGAs9B,OACAy5G,OAAOjkK,SADPwqD,OALsDslH,sBA5BzB,SAA/BC,6BAAgC9L,OAAQ4L,mBAAsB,IAE5D3iJ,OACA+2I,OAAO3yE,cADPpkE,OAEEgwH,aAAe+mB,OAAO/mB,eAGtB8yB,sBAAwB/4K,KAAK2P,IAAIs2I,aAAa0D,kBAAkB1zH,OAAQA,OAAS,GAIvFgwH,aAAaF,kBAAkB6yB,kBAAmBG,uBAGlD,IAGMC,gBAHkB/yB,aAAagzB,oBAGGjM,OAAOjkK,SAASmwK,eAKxD,OACIC,mBAHuBH,gBAAgB/iJ,OAAO6+I,QAAUkE,gBAAgB/iJ,OAAO8+I,UAI/EgE,6CAakDD,CAA6B9L,OAAQ4L,mBAAnFO,mBATkDN,sBASlDM,mBAAoBJ,sBAT8BF,sBAS9BE,sBAGtBK,+BAAiCnjJ,OAASj2B,KAAK2P,IAAIopK,sBAAuBI,oBAKhF,OACIA,sCACAJ,4CACAM,gBALoBhB,wBAAwBrL,OTwCjC,MSxC8CoM,+BAAgC7lH,QAMzF6lH,gEAoDFE,iBACFC,UAAU,EACVrb,WTMkB,USWhBsb,uCAA4B,SAA5BA,0BAA6BxM,QAAW,IAEtCz5G,OACAy5G,OAAOjkK,SADPwqD,OAFsCq0D,MAAA6xD,4BAIE1K,2BAAYD,0BAAU1qK,IAAI,SAAC5M,MACnE,OAnBuB,SAAzBkiL,uBAA0B1M,OAAQx1K,MACpC,IAAMkhL,WAAa1L,OAAO0L,aAKpBiB,mBACFzb,WAHA8O,OAAOjkK,SADPm1J,WAKAqb,SAAUb,WAAWlhL,OAGzB,OAAOpC,OAAO6M,KAAKq3K,iBAAiBz/J,MAAM,SAAAjjB,GAAC,OAAI0iL,gBAAgB1iL,KAAO+iL,kBAAkB/iL,KAQhF8iL,CAAuB1M,OAAQx1K,MACxB+7D,OAEJ,IAR+B,GAW1C,OACIqmH,iBAZsChyD,MAAA,GAatCiyD,eAbsCjyD,MAAA,KAuBjCkyD,uCAA4B,SAA5BA,0BAA6B9M,QACtC,IAAMhnB,UAAYgnB,OAAOhnB,YACnBC,aAAe+mB,OAAO/mB,eAFqB8zB,sBAhLvB,SAAxBC,sBAAyBhN,QAC3B,IAAMhnB,UAAYgnB,OAAOhnB,YAErBhwH,MACAg3I,OAAO3yE,cADPrkE,MAHkCikJ,gBAQlCjN,OAAOjkK,SAFPoiJ,OANkC8uB,gBAMlC9uB,OACA53F,OAPkC0mH,gBAOlC1mH,OAIEojH,YAAcxrB,OAAOn1H,MAGrBkkJ,eAAiBrC,qBAAqB7xB,UT0D3B,SSvDXm0B,kBAAoBn6K,KAAK2P,IAAIuqK,eAAiB3mH,OAAQv9B,MAAQ,GAG9DokJ,iCAAmCpkJ,MAAQmkJ,kBAAoBxD,YAKrE,OACIuD,8BACAC,oCACAvB,kBALsBP,wBAAwBrL,OT4FhC,SS5FgDoN,iCAAkC,GAMhGA,mEA6JAJ,CAAsBhN,QAJtBkN,eAN6CH,sBAM7CG,eACAC,kBAP6CJ,sBAO7CI,kBACAC,iCAR6CL,sBAQ7CK,iCACAxB,kBAT6CmB,sBAS7CnB,kBAT6CyB,sBAiB7C1B,oCAAuB3L,OAAQ4L,mBAH/BO,mBAd6CkB,sBAc7ClB,mBACAE,gBAf6CgB,sBAe7ChB,gBACAD,+BAhB6CiB,sBAgB7CjB,+BAhB6CkB,sBAsB7Cd,uCAA0BxM,QAF1B4M,iBApB6CU,sBAoB7CV,iBACAC,eArB6CS,sBAqB7CT,eAEJ7zB,UAAUD,kBAAkBo0B,kBAAoBN,eAAgBR,gBAAkBO,kBAGlF,IAAMW,kBAAoBv0B,UAAUizB,oBAC9BuB,qBAAuBv0B,aAAagzB,oBAS1C,OANAnB,cAAc9K,OT1FC,MS0FYuN,mBAC3BzC,cAAc9K,OT5FI,SS4FYwN,sBAzHC,SAA7BC,2BAA8BzN,OAAQuN,kBAAmBC,sBAAyB,IAAA1rJ,KAAA+1C,MAAA7lD,MAAAyoG,MAAAW,MAC9E2kD,aAAeC,OAAOD,eAGxB5hB,OACA6hB,OAAOjkK,SADPoiJ,OAEE3d,SAAWw/B,OAAOx/B,WAEpB3wG,IAEA2wG,SAFA3wG,IACAovB,OACAuhF,SADAvhF,OAIE0qH,YAAcxrB,OAAOn1H,MAGrB4+I,YAAa9lJ,SAAGtX,OAAH9T,MAAAorB,KAAA4rJ,+BAAaH,kBAAkBn2K,IAAI,SAAAxN,GAAC,OAAIA,EAAEg+K,WAAWE,YAGlE6F,kBAAmB91G,UAAGrtD,OAAH9T,MAAAmhE,MAAA61G,+BAAaH,kBAAkBn2K,IAAI,SAAAxN,GAAC,OAAIA,EAAEi+K,aAAaC,YAC1E8F,oBAAqB57J,UAAGxH,OAAH9T,MAAAsb,MAAA07J,+BAAaH,kBAAkBn2K,IAAI,SAAAxN,GAAC,OAAIA,EAAEi+K,aAAaE,cAG5EF,cAAeptD,UAAGjwG,OAAH9T,MAAA+jH,MAAAizD,+BAAaF,qBAAqBp2K,IAAI,SAAAxN,GAAC,OAAIA,EAAEi+K,aAAaC,YAGzE+F,qBAAuBL,qBAAqB,GAAG5F,WAAWE,QAC1DgG,wBAAyB1yD,UAAG5wG,OAAH9T,MAAA0kH,MAAAsyD,+BAAaF,qBAAqBp2K,IAAI,SAAAxN,GAAC,OAAIA,EAAEg+K,WAAWG,cAIvFhI,aAAa9nK,QAAQ,SAACyxC,OAAQswF,MAC1BtwF,OAAOzxC,QAAQ,SAACq/I,YAAand,MACzBmd,YAAYyB,kBAAkB8uB,aAAa1tC,MAAQwvC,YAAa/B,WAAW5tC,MAAQ2vC,iBAM3F5wB,+BAAkBlpH,IAAI,GAAI89I,iBAAkBE,sBAE5C90B,+BAAkBlpH,IAAI,GAAI+9I,mBAAoBC,sBAE9C90B,+BAAkB95F,OAAO,GAAI0uH,iBAAkBG,wBAE/C/0B,+BAAkB95F,OAAO,GAAI2uH,mBAAoBE,wBA+EjDL,CAA2BzN,OAAQuN,kBAAmBC,uBAGlDnB,gBAAiBA,gBAAkBO,iBACnCM,eAAgBA,eAAiBL,eACjCT,+BAAgCA,+BAAiCQ,iBAEjET,sCACAP,oCACAwB,oEC1RFW,WAAa,SAAbA,WAAan2J,YAAU,OAAIA,WAAW1W,OAAO,SAAC8sK,MAAO79E,SAAR,OAAoB69E,MAAQ79E,SAAS,yrDCrCnE89E,2CAUjB,SAAAA,WAAaztC,SAAU/8G,WAAY4pE,YAAatxF,QAAQ,IAAA6H,MAAA,2JAAAsqK,CAAA/+K,KAAA8+K,aACpDrqK,MAAAuqK,iCAAAh/K,KAAAi/K,sBAAAH,YAAApmL,KAAAsH,KAAMs0B,WAAY4pE,YAAatxF,UAC1BykI,SAASA,UACd58H,MAAK7H,OAAO6H,MAAKuQ,YAAYpF,iBAC7BnL,MAAKyqK,UAAY50K,cACjBmK,MAAK0qK,UAAY1qK,MAAKuQ,YAAYo6J,kBAClC3qK,MAAK4qK,aAAgB5mB,YAAY,EAAOC,UAAU,GANEjkJ,0XAVpBo+J,0SA0E1BxhC,WACN,OAAIA,WACArxI,KAAK+yK,UC1FqB,SAAzBuM,uBAA0B5kJ,QAAS22G,UAE5C,IAIIkuC,YACAC,YALAj2B,cACAC,eACAC,aACAC,gBALqDx1C,gBAgBrDx5E,QAAQ9tB,SAPRs5I,eATqDhyC,gBASrDgyC,eACAC,kBAVqDjyC,gBAUrDiyC,kBACAs5B,YAXqDvrE,gBAWrDurE,YACAlK,aAZqDrhE,gBAYrDqhE,aACAvmB,OAbqD96C,gBAarD86C,OACAwnB,UAdqDtiE,gBAcrDsiE,UACAh7F,SAfqD04B,gBAerD14B,SAfqDy+E,qBAoBrDv/H,QAAQwjE,cAFR+zE,cAlBqDhY,qBAkBrDgY,cACAD,aAnBqD/X,qBAmBrD+X,aAEItxI,IAAwB2wG,SAAxB3wG,IAAKmwB,OAAmBwgF,SAAnBxgF,OAAQf,OAAWuhF,SAAXvhF,OArBoCi4G,KAAA2X,4BAsBjBh/I,IAtBiB,GAsBlDksH,QAtBkDmb,KAAA,GAsBzCj2B,WAtByCi2B,KAAA,GAsB7Blb,SAtB6Bkb,KAAA,GAAA4X,QAAAD,4BAuBd7uH,OAvBc,GAuBlD8gF,SAvBkDguC,QAAA,GAuBxCluC,YAvBwCkuC,QAAA,GAuB3B/tC,UAvB2B+tC,QAAA,GAAAC,QAAAF,4BAwBR5vH,OAxBQ,GAwBlDo8F,WAxBkD0zB,QAAA,GAwBtC7tC,cAxBsC6tC,QAAA,GAwBvBzzB,YAxBuByzB,QAAA,GAqFzD,OA3DIjuC,SAASjwI,OAAS,IAElB6nJ,cAAUluI,OAAAwkK,gCAAOjzB,SAAPizB,gCAAmBluC,UAAnBkuC,gCAAgC3zB,cAE1Cta,UAAUlwI,OAAS,IAEnB8nJ,eAAWnuI,OAAAwkK,gCAAOhzB,UAAPgzB,gCAAoBjuC,WAApBiuC,gCAAkC1zB,eAE7Cra,WAAWpwI,OAAS,GAAKowI,WAAW,GAAGpwI,OAAS,IAEhD+nJ,UAAY3X,WAAW7pI,IAAI,SAACpP,EAAGN,GAAJ,SAAA8iB,OAAAwkK,gCAAcjzB,QAAQr0J,IAAtBsnL,gCAA6BhnL,GAA7BgnL,gCAAmChzB,SAASt0J,QAEvEw5I,cAAcrwI,OAAS,GAAKqwI,cAAc,GAAGrwI,OAAS,IAEtDgoJ,aAAe3X,cAAc9pI,IAAI,SAACpP,EAAGN,GAAJ,SAAA8iB,OAAAwkK,gCAAc3zB,WAAW3zJ,IAAzBsnL,gCAAgChnL,GAAhCgnL,gCAAsC1zB,YAAY5zJ,QAGvFmiC,QAAQmvH,UAAU,IAAIi2B,4BAAWv2B,WAAYC,cACzC9Z,oBAAqBwW,eACrBqvB,aAAcA,aAAa/6J,KAC3Bs/J,OAAQ2F,YAAYjlK,KACpB05J,cACIr6I,MAAOm4I,aACPl4I,OAAQm4I,cACRjjB,OAAQA,OAAOn1H,OAEnB2hD,SAAUA,SAASzgE,IACnBy7J,UAAWA,UAAUh8J,KAAKvS,IAAI,SAAAxN,GAAC,OAAIA,EAAIoJ,KAAK6P,IAAIk5I,QAAQlrJ,OAAQmrJ,SAASnrJ,UACzE8zK,kBAAmB5oB,QAAQlrJ,OAAQwqJ,WAAWxqJ,WAI9C69K,YADA3yB,QAAQlrJ,OAAS,EACHkrJ,QAAQ,GAAGlrJ,OAEXwqJ,WAAWxqJ,OAAS,EAAIwqJ,WAAW,GAAGxqJ,OAAS,EAI7D89K,YADA3yB,SAASnrJ,OAAS,EACJmrJ,SAAS,GAAGnrJ,OAEZyqJ,YAAYzqJ,OAAS,EAAIyqJ,YAAY,GAAGzqJ,OAAS,EAGnEg5B,QAAQovH,aAAa,IAAIi2B,kCAAct2B,UAAWC,eAC9Cha,oBAAqByW,kBACrBovB,aAAcA,aAAah8J,QAC3BugK,OAAQ2F,YAAYlmK,QACpBo6J,cAAc,EACdO,cACIr6I,MAAOm4I,aACPl4I,OAAQm4I,cACRjjB,OAAQA,OAAOn1H,OAEnB2hD,SAAUA,SAASpN,IACnBooG,UAAWA,UAAUj9J,QACrBi8J,kBAAmB+J,YAAaC,gBAEpC9kJ,QAAQk2I,aAAan/B,aAEdJ,SDKkBiuC,CAAuBt/K,KAAMqxI,WACvCrxI,MAEXggL,WAAAf,sBAAAH,WAAAzkL,WAAA,WAAA2F,MAAAtH,KAAAsH,KAAsBqxI,iEAWtBrxI,KAAKu8K,YAAa9jB,YAAY,EAAOC,UAAU,IADlC,IAAAunB,sBAKTtC,uCAA0B39K,MAF1Bi9K,+BAHSgD,sBAGThD,+BACAgB,iCAJSgC,sBAIThC,iCAIJ,OADAj+K,KAAKkgL,mBAAmBjD,+BAAgCgB,kCACjDj+K,+CAGD3E,KAAM8kL,YACZ,IAAMC,SAAW/kL,KAAKoG,cAEhB4+K,WADuBrgL,KAAK8wK,WAA1BC,iBAC2B,GAAA11J,OAAI+kK,SAAJ,UAC7BtE,QAAUj4K,KAAK2P,IAAI3P,KAAK6P,IAAI,EAAGysK,YAAaE,YAMlD,OALArgL,KAAK4M,iLAAL0zK,IAAA,GAAAjlK,OACQ+kK,SADR,WAC4BtE,QAAU,IAEtC97K,KAAKkgL,qBACLlgL,KAAKugL,aACEvgL,yCAGJ3E,MAAM,IACD01K,iBAAqB/wK,KAAK8wK,WAA1BC,iBACFqP,SAAW/kL,KAAKoG,cACtB,OACI4+K,WAAYtP,iBAAgB,GAAA11J,OAAI+kK,SAAJ,UAC5BI,YAAaxgL,KAAK4M,SAAL,GAAAyO,OAAiB+kK,SAAjB,YAAsC,+CAKvD,OAAIh7K,UAAS1D,QACT1B,KAAKm/K,UAAL/5K,UAAA1D,QAAA,OAAA4L,EAAAlI,UAAA,GACOpF,MAEJA,KAAKm/K,0DAIZ,OAAI/5K,UAAW1D,QACX1B,KAAKq/K,YAAc9xG,eAAevtE,KAAKq/K,YAANj6K,UAAA1D,QAAA,OAAA4L,EAAAlI,UAAA,IAC1BpF,MAEJA,KAAKq/K,0EASIoB,aAAcC,aAAa,IAAA9mE,cAKvC55G,KAAK4M,SAHL+zK,WAFuC/mE,cAEvC+mE,WACA5D,cAHuCnjE,cAGvCmjE,cACA/tB,OAJuCp1C,cAIvCo1C,OAEE+hB,iBD/JiB,SAAlB6P,gBAAmB/P,OAAQ8P,WAAY5D,eAYhD,IAXA,IAAMlzB,UAAYgnB,OAAOhnB,YACnBC,aAAe+mB,OAAO/mB,eACtB8mB,aAAeC,OAAOD,eACtBv/B,SAAWw/B,OAAOx/B,WAClBwvC,YAAch3B,UAAUi3B,sBACxBC,eAAiBj3B,aAAag3B,sBAC9BE,sBACFjmK,IAAK,EACLK,OAAQ,GAGH7iB,EAAIooL,WAAa,EAAGpoL,GAAK,EAAGA,IAAK,CACtC,IAAMmJ,OAASmC,KAAK6P,IAAImtK,YAAYtoL,GAAG+9K,cAAc50K,OACjDm/K,YAAYtoL,GAAGg+K,gBAAgB70K,QACnCs/K,qBAAqBjmK,KAAOrZ,OAGhC,IAAK,IAAInJ,GAAIwkL,cAAgB,EAAGxkL,IAAK,EAAGA,KAAK,CACzC,IAAMgiD,OAASwmI,eAAexoL,IACtB+9K,cAAmC/7H,OAAnC+7H,cAAeC,gBAAoBh8H,OAApBg8H,gBACjB70K,QAASmC,KAAK6P,IAAI4iK,cAAc,GAAKA,cAAc,GAAG50K,OAAS,EACjE60K,gBAAgB,GAAKA,gBAAgB,GAAG70K,OAAS,GACrDs/K,qBAAqB5lK,QAAU1Z,QAGnC2vI,SAAS3wG,IAAI,GAAKqgJ,eAAehE,eAAezG,cAChDjlC,SAASvhF,OAAO,GAAKixH,eAAehE,eAAexG,gBAEnDllC,SAASxgF,OAAO,GAAKgwH,YAAYF,YAAYrK,cAC7CjlC,SAASxgF,OAAO,GAAKgwH,YAAYF,YAAYpK,gBAE7C,IAAM0K,aAAep9K,KAAK6P,IAAI29H,SAASxgF,OAAO,GAAGnvD,OAAQ2vI,SAASxgF,OAAO,GAAGnvD,QAEtEw/K,gBAAkBr9K,KAAK6P,IAAI29H,SAAS3wG,IAAI,GAAG,GAAK2wG,SAAS3wG,IAAI,GAAG,GAAGh/B,OAAS,EAAG2vI,SAASvhF,OAAO,GAAG,GAChGuhF,SAASvhF,OAAO,GAAG,GAAGpuD,OAAS,GAIvC,OAHA2vI,SAASxgF,OAAO,GAAK+/G,aAAa91J,MAAMkmK,qBAAqBjmK,IAAKimK,qBAAqBjmK,IAAMkmK,cACxFh5K,IAAI,SAAAsyC,QAAM,OAAIA,OAAOz/B,MAAMkmK,qBAAqB5lK,OAAQ4lK,qBAAqB5lK,OAAS8lK,oBAGvF7vC,kBACA8vC,SAAUN,YAAYn/K,OACtB0/K,YAAaL,eAAer/K,QCqHHk/K,CAAgB5gL,KAAM2gL,WAAY5D,eACrDsE,iBD3GqB,SAAtBC,oBAAuBzQ,OAAQ4P,aAAcC,aACtD,IAAM72B,UAAYgnB,OAAOhnB,YACnBC,aAAe+mB,OAAO/mB,eAF0Cy3B,eAMlE1Q,OAAOjkK,SAFPmwK,cAJkEwE,eAIlExE,cACA4D,WALkEY,eAKlEZ,WAGEa,UAAY33B,UAAUizB,oBAAoB6D,YAC1Cc,UAAY33B,aAAagzB,oBAAoBC,eAG/CtE,WAEA+I,UAFA/I,WACOsF,eACPyD,UADA3nJ,MAGA6+I,aAEA+I,UAFA/I,aACQsE,mBACRyE,UADA3nJ,OAGaqrI,UAAqC4Y,eAA9CpF,QAA+B+I,WAAe3D,eAA1BnF,UACX+I,UAAuC3E,mBAAhDrE,QAA+BiJ,aAAiB5E,mBAA5BpE,UAEtBiJ,aAAejD,WAAWnG,WAAWE,SACrCmJ,YAAclD,WAAWlG,aAAaC,SACtCoJ,WAAa5c,UAAWthK,KAAK2P,IAAIsuK,YAAapB,aAAcgB,YAC5DM,YAAcL,UAAW99K,KAAK2P,IAAIquK,aAAcpB,cAAemB,cAErE,OACIG,oBACAC,sBACAC,sBACInoJ,OAAQ+nJ,aACRhoJ,MAAOioJ,aAEXI,eACIroJ,MAAO+kJ,WAAWmD,WAClBjoJ,OAAQ8kJ,WAAWoD,aAEvBG,YAAa1J,WACb2J,WAAY1J,cCmEa4I,CAAoBthL,KAAMygL,aAAcC,aAMjE,OALAW,iBAAiBryB,OAASA,OAC1BhvJ,KAAK8wK,UACDC,kCACAsQ,oCAEGrhL,iEAzIP,OAAO/G,OAAO4T,WACVw0K,kBACIryB,OAAQhvJ,KAAK4f,gBAAgBovI,OAC7BgzB,YAAa,EAAG,EAAG,GACnBD,WAAY,EAAG,EAAG,IAEtBhR,kBACIqQ,YAAa,EACbD,SAAU,EACV9vC,UAAY3wG,OAASmwB,UAAYf,8EAazC,OAAOwjH,2EAWP,OAAOJ,8DAWP,OAAO,IAAI4L,WAAW,KAAM,KAAM9+K,KAAK41J,qBAAsB51J,KAAK4f,oNE5E1E,0CAAMyiK,WAASC,6BAAAC,cAAA,GAAAlnK,ObqOI,MarOJ,KAAAA,ObsOK,QA0BM,MahQXinK,6BAAAC,WAAA,GAAAlnK,ObqOI,MarOJ,KAAAA,Ob+PO,UA5BA,UanOPinK,6BAAAC,WAAA,GAAAlnK,ObqOI,MarOJ,KAAAA,ObuOM,SAyBK,MahQXinK,6BAAAC,WAAA,GAAAlnK,ObyOO,SazOP,KAAAA,ObsOK,QAFD,OapOJinK,6BAAAC,WAAA,GAAAlnK,ObyOO,SazOP,KAAAA,Ob+PO,UAtBA,UazOPinK,6BAAAC,WAAA,GAAAlnK,ObyOO,SazOP,KAAAA,ObuOM,SAHF,OapOJinK,6BAAAC,WAAA,GAAAlnK,ObwOO,SaxOP,KAAAA,ObsOK,QA0BM,MahQXinK,6BAAAC,WAAA,GAAAlnK,ObwOO,SaxOP,KAAAA,Ob+PO,UA5BA,UanOPinK,6BAAAC,WAAA,GAAAlnK,ObwOO,SaxOP,KAAAA,ObuOM,SAyBK,MahQXknK,YAgBTC,oCAAwB,SAAxBA,sBAAyBC,YAAaC,YAAahjH,MAAOijH,YAAe,IAEvEnwI,MAGAmwI,WAHAnwI,MACA3Y,MAEA8oJ,WAFA9oJ,MACA9B,MACA4qJ,WADA5qJ,MAEEq8H,YAAW,GAAA/4I,OAAMwe,MAAN,OAAAxe,OAAiB0c,OAElC0qJ,YAAY35K,QAAQ,SAAC85K,aAZG,SAAtBC,oBAAuBnjH,MAAOltB,MAAOn3C,KAAM08B,OAC7C2nC,MAAM3nC,MAAN,UAAA1c,OAAsBhgB,MAAtB,GAAAggB,OAAiC0c,MAAjC,KAAA1c,OAA0Cm3B,QAYtCqwI,CAAoBnjH,MAAOgjH,YAAYE,YAAcpwI,MbgOhC,gBahOuDowI,WAAYxuB,gBAiBnF0uB,2BAAe,SAAfA,aAAgBpjH,MAAOsvF,OAAQj0I,IAAKK,QAC7C,IAAM2nK,gBAdY,SAAhBC,cAAiBtjH,MAAOijH,YAAe,IAEtCrxC,eAGDqxC,WAHCrxC,eACDC,eAEAoxC,WAFApxC,eACAC,iBACAmxC,WADAnxC,iBAEF,OACIz2H,IAAK,SAAAA,MAAA,OAAMynK,qCbiMA,MAGG,UapMkClxC,eAAgB5xE,MAAOijH,aACvEvnK,OAAQ,SAAAA,SAAA,OAAMonK,qCbiMF,OACC,SalMsCjxC,eAAgB7xE,MAAOijH,aAC1E9xH,OAAQ,SAAAA,SAAA,OAAM2xH,qCbgMF,OACC,QAFF,MAGG,UalMkDhxC,iBAAkB9xE,MAAOijH,cAKrEK,CAActjH,MAAOsvF,QACvCi0B,aAAeZ,UAAS,GAAAhnK,OAAIg3J,iBAAiBD,WAAWr3J,MAAhC,KAAAM,OAAyCk3J,oBAAoBn3J,UACvF6nK,cACAF,gBAAgBE,+LC9CxB,IAAMC,WAAa,SAAbA,WAAa7yK,KAAG,OAAIxH,MAAMG,KAAKH,MAAMwH,IAAI3O,QAAQoE,SAEjDq9K,YAAc,SAAdA,YAAe5yG,MAAO6yG,WAAmC,IAAxBC,eAAwBj+K,UAAA1D,OAAA,QAAA4L,IAAAlI,UAAA,GAAAA,UAAA,MAEvD6gB,MAEAo9J,eAFAp9J,MACAkhE,MACAk8F,eADAl8F,MAEE92E,IAAM+yK,UAAUtoK,QAChBwoK,UAAY/yG,MAAMz1D,QAClByoK,UAAYD,UAAUxoK,QAS5B,GANAmL,MAAQA,OAASpd,MAAMG,KAAKH,MAAMwH,IAAI3O,QAAQoE,QAG9CqhF,MAAQA,OAAU,SAAAv9E,GAAC,OAAIA,GAGE,IAArB05K,UAAU5hL,OAAc,CACxB,IAAMooH,WAIN,OAHA7jG,MAAMnd,QAAQ,SAACrO,GACXqvH,QAAO5jH,KAAKmK,IAAI5V,OAEX8oL,oBAAWD,UAAWjzK,IAAKA,IAAKy5G,SAQ7C,IALA,IAAI05D,OAAS,GACTC,SAAW,GACT35D,UAGGvxH,EAAI0tB,MAAMvkB,OAAS,EAAGnJ,GAAK,EAAGA,IAAK,CAExC,IAAMmrL,cAAgBz9J,MAAM1tB,GAO5B,IAJAirL,QAAUr8F,MAAM92E,IAAIqzK,oBACpBD,UAAYt8F,MAAMm8F,UAAUI,iBAIxB55D,OAAO45D,eAAiB,SACrB,CACHD,SAAW,GAGX,IAAK,IAAI5oK,EAAItiB,EAAGsiB,EAAIoL,MAAMvkB,OAAQmZ,IAAK,CACnC,IAAM8oK,QAAU19J,MAAMpL,GAChB+oK,QAAUvzK,IAAIszK,SAEpB75D,OAAO65D,SAAWC,QAGlBN,UAAUK,SAAWC,QACrBH,SAAWD,SAIvB,IAAMK,aAIN,OAHA59J,MAAMnd,QAAQ,SAACrO,GACXopL,UAAU39K,KAAK4jH,OAAOrvH,OAEjB8oL,oBAAWD,oBAAWjzK,IAAKwzK,YAGlCC,eAAiB,SAAjBA,eAAkBh7J,QAASI,OAAQqxB,OAAQswF,MAG7C,IAAK/hH,QACD,OAAO,kBAAM,GAGjB,IAAMowJ,YACFn+J,IAAK,SAAAA,IAAAlH,OAAK,OAAI0mC,OAAOswF,KAAOh3H,QAAU0mC,OAAOswF,KAAOh3H,OAAOqV,SAC3D9N,OAAQ,SAAAA,OAAAvH,OAAK,OAAI0mC,OAAOswF,MAAM3hH,OAASrV,SAG3C,OAAO,SAACxY,MAIJ,IAHA,IAAIwY,MAAQ,EACRkwK,QAAS,GAELA,QAC4B,OAA5B7K,WAAW79K,MAAMwY,OACjBA,OAAS,EAETkwK,QAAS,EAGjB,OAAOlwK,QAITmwK,YAAc,SAAdA,YAAezpI,OAAQt0B,OAAT,OAChBlL,IAAK,SAAAA,MACD,IAAIw1D,SACJ,OAAOh2B,OAAOtyC,IAAI,SAACxN,GAAM,IAAAwpL,aAIbd,YAAY5yG,MAAO91E,GAAK0sF,MAAO,SAAAA,MAAAjmF,KAAG,OAAIA,IAAI0c,WAAWqI,cAFrDq9J,UAFaW,aAEbX,UACAjzK,IAHa4zK,aAGb5zK,IAIR,OADAkgE,MAAQ+yG,UACDjzK,OAGf+K,OAAQ,SAAAA,SACJ,IAAIm1D,SACE2zG,cAiBN,OAhBA3pI,OAAO74C,QAAU64C,OAAO,GAAGzxC,QAAQ,SAAC63D,KAAMqyE,UACtC,IAAMmxC,aACN5pI,OAAOzxC,QAAQ,SAACiS,KACZopK,UAAUj+K,KAAK6U,IAAIi4H,aAH4B,IAAAoxC,cAQ3CjB,YAAY5yG,MAAO4zG,WAAah9F,MAAO,SAAAA,MAAAjmF,KAAG,OAAIA,IAAI0c,WAAWqI,cAF7Dq9J,UAN2Cc,cAM3Cd,UACAjzK,IAP2C+zK,cAO3C/zK,IAERkgE,MAAQ+yG,UAER/oI,OAAOzxC,QAAQ,SAACiS,IAAKqvH,UACjB85C,WAAW95C,UAAY85C,WAAW95C,cAClC85C,WAAW95C,UAAU4I,UAAY3iI,IAAI+5H,cAGtC85C,cAITG,cAAgB,SAAhBA,cAAgBH,YAAU,OAC5BnpK,IAAK,SAAAA,MACD,IAAMupK,SAUN,OATAJ,WAAWp7K,QAAQ,SAACiS,IAAKwpK,MACrBD,MAAMC,MAAQD,MAAMC,UACpBxpK,IAAIjS,QAAQ,SAACslE,IAAK71E,GACd,GAAI2rL,WAAWK,MAAMhsL,GAAI,CACrB,IAAMisL,SAAWV,eAAe11G,IAAK71E,EAAG2rL,WAAYK,KAAnCT,CAAyC,OAC1DU,UAAYF,MAAMC,MAAMr+K,KAAKs+K,eAIlCF,OAEXlpK,OAAQ,SAAAA,SAAA,OAAM8oK,WAAWj8K,IAAI,SAAC8S,IAAKwpK,MAAN,OAAexpK,IAAI9S,IAAI,SAACmmE,IAAK71E,GAAN,OAAYurL,eAAe11G,IAAK71E,EAAG2rL,WAAYK,KAAnCT,CAAyC,YACxF9wK,OAAO,SAAAo7D,KAAG,OAAY,IAARA,WAG7Bq2G,SAAW,SAAXA,SAAWC,WAAS,OACtB3pK,IAAK,SAAAA,IAACw/B,QACF,OAAImqI,UACOxB,WAAW3oI,OAAO,IAAIj3B,UAE1B4/J,WAAW3oI,OAAO,KAE7Bn/B,OAAQ,SAAAA,OAACm/B,QACL,OAAImqI,UACOxB,WAAW3oI,QAAQj3B,UAEvB4/J,WAAW3oI,WAIpBoqI,wBAAsBC,0BAAAC,yBAAA,GAAAxpK,OdoET,McpES,OAEpBypK,YAAaL,UAAS,GAAT,OACbM,gBAAiB,SAAAA,kBAAA,OAAef,YAAWz8K,WAAX,EAAAnC,WAAA,QAChC4/K,UAAW,SAAAA,YAAA,OAAeX,cAAa98K,WAAb,EAAAnC,WAAA,UAJNw/K,0BAAAC,sBAAA,GAAAxpK,OduEN,ScvEM,OAOpBypK,YAAaL,UAAS,GAAT,OACbM,gBAAiB,SAAAA,kBAAA,OAAef,YAAWz8K,WAAX,EAAAnC,WAAA,QAChC4/K,UAAW,SAAAA,YAAA,OAAeX,cAAa98K,WAAb,EAAAnC,WAAA,UATNw/K,0BAAAC,sBAAA,GAAAxpK,OdwEN,ScxEM,OAYpBypK,YAAaL,UAAS,GAAT,IACbM,gBAAiB,SAAAA,kBAAA,OAAef,YAAWz8K,WAAX,EAAAnC,WAAA,KAChC4/K,UAAW,SAAAA,YAAA,OAAeX,cAAa98K,WAAb,EAAAnC,WAAA,OAdNw/K,0BAAAC,sBAAA,GAAAxpK,OdwEN,ScxEM,OAiBpBypK,YAAaL,UAAS,GAAT,IACbM,gBAAiB,SAAAA,kBAAA,OAAef,YAAWz8K,WAAX,EAAAnC,WAAA,KAChC4/K,UAAW,SAAAA,YAAA,OAAeX,cAAa98K,WAAb,EAAAnC,WAAA,OAnBNy/K,uBAuBtBI,oBAAsB,SAAtBA,oBAAuB5pL,MACzB,IAAM2sH,UAAY28D,uBAAuBtpL,MACzC,OAAI2sH,YAIA88D,YAAa,SAAAA,cAAA,OAAM,MACnBC,gBAAiB,SAAAA,gBAAAxqI,QAAM,OAAI,kBAAMA,SACjCyqI,UAAW,SAAAA,YAAA,OAAM,kBAAM,SA+B/B,IAqBME,YAAc,SAAdA,YAAexlH,MAAO4kH,MAAO13K,OAAQvR,MACvC,IAAMm/K,YAAc5tK,OAAOoiJ,OAAOn1H,MAElC6lC,MAAMrO,KAAKh2D,KAAM,SAAUslE,KAAMqyE,UAC7B,IAAMnmB,KAAOy3D,MAAM3jH,KAAKypE,UAAU4I,UAIlC,OA7ByB,SAA3BmyC,yBAA4Bt4D,KAAMs7B,YAAaqyB,aAAgB,IAAA7nJ,KAC3DmH,OAASquH,YAAYn2C,cACrBn4E,MAAQsuH,YAAYp2C,aAE1B,OAAA6yE,0BAAAjyJ,QdaoB,UcbpB,WAEQm0D,6BAAc9mF,MAAM+3B,MAAM,SAA1B,GAAA1c,OAAuCye,OAAS0gJ,YAAhD,OACI3tD,KAAO,IACP/lC,6BAAc9mF,MAAM+3B,MAAM,SAA1B,GAAA1c,OAAuCye,OAAS+yF,KAAO2tD,YAAe3tD,KAAtE,OACAs7B,YAAYyB,kBAAkB/vH,MAAOC,OAAS+yF,SAL1D+3D,0BAAAjyJ,KdcoB,UcdpB,WASYk6F,KAAO,GACPs7B,YAAYyB,kBAAkB/vH,MAAQgzF,KAAO2tD,aAAe3tD,KAAO,GAAI/yF,QAE3EgtD,6BAAc9mF,MAAM+3B,MAAM,SAA1B,GAAA1c,OAAuCye,OAAvC,SAZRnH,KAwBIwyJ,CAAyBt4D,KAFLlsD,KAAKwnF,YAEmBqyB,aAAan/K,MAAMtB,KAAKiG,KAApEmlL,GACOt4D,QAITu4D,gBAAcR,0BAAAS,mBAAA,GAAAhqK,Od3BD,Mc2BC,MACF,MADEupK,0BAAAS,gBAAA,GAAAhqK,Od3BD,Mc2BC,MAEF,SAAA8E,IAAA,QAAA0mD,KAAAzhE,UAAA1D,OAAIgf,OAAJ,IAAA7X,MAAAg+D,MAAAC,KAAA,EAAAA,KAAAD,KAAAC,OAAIpmD,OAAJomD,MAAA1hE,UAAA0hE,MAAA,OAAeo+G,YAAW39K,WAAX,EAAemZ,OAAfrF,QdjBT,eceJupK,0BAAAS,gBAAA,GAAAhqK,Od3BD,Mc2BC,MAGF,MAHEupK,0BAAAS,gBAAA,GAAAhqK,OdvBE,ScuBF,MAIC,SAAA8E,IAAA,QAAA6mD,MAAA5hE,UAAA1D,OAAIgf,OAAJ,IAAA7X,MAAAm+D,OAAAC,MAAA,EAAAA,MAAAD,MAAAC,QAAIvmD,OAAJumD,OAAA7hE,UAAA6hE,OAAA,OAAei+G,YAAW39K,WAAX,EAAemZ,OAAfrF,QdpBZ,ecgBJupK,0BAAAS,gBAAA,GAAAhqK,OdvBE,ScuBF,MAKC,MALDupK,0BAAAS,gBAAA,GAAAhqK,OdvBE,ScuBF,MAMC,SAAA8E,IAAA,QAAA4uD,MAAA3pE,UAAA1D,OAAIgf,OAAJ,IAAA7X,MAAAkmE,OAAAC,MAAA,EAAAA,MAAAD,MAAAC,QAAItuD,OAAJsuD,OAAA5pE,UAAA4pE,OAAA,OAAek2G,YAAW39K,WAAX,EAAemZ,OAAfrF,QdtBZ,ecgBJupK,0BAAAS,gBAAA,GAAAhqK,OdxBE,ScwBF,MAOC,MAPDupK,0BAAAS,gBAAA,GAAAhqK,OdxBE,ScwBF,MAQC,SAAA8E,IAAA,QAAAk0D,MAAAjvE,UAAA1D,OAAIgf,OAAJ,IAAA7X,MAAAwrE,OAAAE,MAAA,EAAAA,MAAAF,MAAAE,QAAI7zD,OAAJ6zD,OAAAnvE,UAAAmvE,OAAA,OAAe2wG,YAAW39K,WAAX,EAAemZ,OAAfrF,QdvBZ,eceJupK,0BAAAS,gBAAA,GAAAhqK,OdxBE,ScwBF,MASC,MATDgqK,4TChQCC,wkBAKb,MAAM,IAAIr2K,MAAMo+D,UAAUk4G,sDAO1B,MAAM,IAAIt2K,MAAMo+D,UAAUk4G,wDAO1B,MAAM,IAAIt2K,MAAMo+D,UAAUk4G,wDAO1B,MAAM,IAAIt2K,MAAMo+D,UAAUk4G,gOCvB3B,ICJM94E,qCAAO,OACPC,sCAAQ,QACRH,uCAAS,SACTC,oCAAM,MAENg5E,4CAAc,OASdC,iBAAS,SAGTC,qBAAO,OACPC,qBAAO,OACPC,0BAAkB,gBAClBC,iBAAS,SACTC,0BAAY,YACZC,UAAY,WACZC,2BAAS,SACTC,cAAgB,eCzBhBC,eAAO,OAEPC,eAAO,OAEPC,KAAO,OAEPC,MAAQ,6UCsHNC,uBArGX,SAAAA,WAAa15K,kKAAQ25K,CAAAvmL,KAAAsmL,YACjBtmL,KAAKgkF,IAAM15E,cAEX,IAAMoa,UAAY6oD,kBAAmBvtE,KAAKglB,YAAYpF,iBACtD5f,KAAKovF,QAAU7hB,eAAe7oD,UAAW9X,YAEzC5M,KAAK+hG,OAAS,uSA8Bd,MAAM,IAAI9yF,MAAMo+D,UAAUC,gDAU1B,MAAM,IAAIr+D,MAAMo+D,UAAUC,8DAS1B,MAAM,IAAIr+D,MAAMo+D,UAAUC,0EAU1B,MAAM,IAAIr+D,MAAMo+D,UAAUC,8EAW1B,MAAM,IAAIr+D,MAAMo+D,UAAUC,wDAU1B,MAAM,IAAIr+D,MAAMo+D,UAAUC,wDAU1B,MAAM,IAAIr+D,MAAMo+D,UAAUC,iDAhF1B,MDzCc,iECoDd,6MC3CD,gCAAM+1C,+BAAcmjE,8BAAAC,mBHPL,UGOKD,8BAAAE,qBAElBC,qCAAiB,GAFCH,8BAAAE,kBAGlBC,sCAAkB,GAHAH,8BAAAE,kBAIlBC,oCAAgB,GAJEH,8BAAAE,kBAKlBC,uCAAmB,GALDD,oBAAAF,8BAAAC,gBHFA,aGSE,GAPFD,8BAAAC,gBHEF,YGME,GARAD,8BAAAC,gBHAG,gBGSE,MATLD,8BAAAC,gBHCD,YAKJ,UGNKD,8BAAAC,gBHKP,QGME,GAXKD,8BAAAC,gBHmBF,WGPE,GAZAD,8BAAAC,gBHoBF,gBGPE,GAbAD,8BAAAC,gBHqBH,WGPE,MAdCA,8LCP3B,IAAMG,eACF70J,SACAigF,eACAD,cACAnlG,QACI4/D,aAAc,SAAAA,aAAC9xC,QAASlhC,OAAV,OAAoB+zE,eAAe7yC,QAAQ00D,QAAS51F,SAEtEo6G,gBACAizE,cACApjK,WAoBSg2E,sCAAKqtF,yBAAAC,+BACbX,KAAO74G,gBAjBRxiE,QACAi8K,WACAp6K,UACA6pF,MACIjqB,aAAc,SAAAA,aAAC9xC,QAASlhC,OAAV,OAAoBP,OAAO4T,OAAO6tB,QAAQmwH,MAAOrxJ,SAEnE2hJ,iBACAvyI,UACAoxC,aACAuvD,YACA9J,iBAOkCmnF,gBADpBE,yBAAAC,4BAEbb,eAAO34G,gBAJR05G,cAIkCL,gBAFpBE,yBAAAC,4BAGbZ,eAAOS,eAHME,yBAAAC,4BAIbV,MAAQO,eAJKG,0lCCdlB,IA+MeljC,gCAvKX,SAAAA,SAAaj3I,QAAQ,IAAA6H,MAAA,8JAAAyyK,CAAAlnL,KAAA6jJ,WACjBpvI,iLAAA0yK,CAAAnnL,KAAAonL,yBAAAvjC,UAAAnrJ,KAAAsH,KAAM4M,UAEDqpG,MAAQ,KACbxhG,MAAK4yK,aAAe,KACpB5yK,MAAK6yK,YAAc,KACnB7yK,MAAKggK,cAAgB,KAErB5nG,sBAAsB06G,gEAAA9yK,QAAMglF,qCAAM0sF,iBARjB1xK,8XARF6xK,gSAoCf,OAAOtmL,KAAKyjB,SAASqT,iDAoBrB,OACIz7B,KAAM8qL,eACNj2H,KAAMlwD,KAAKyjB,SAASmI,uEAyBxB,OAHK5rB,KAAK4zG,gBACN5zG,KAAK4zG,aAjHQ,SAAnB4zE,iBAAoB9sJ,SACtB,IAAI+sJ,aACAC,cACEx3H,KAAOx1B,QAAQjX,SAHaywF,gBAO9Bx5E,QAAQ9tB,SAFR+6K,WAL8BzzE,gBAK9ByzE,WACAtqF,OAN8B6W,gBAM9B7W,OAN8BuqF,sBAW9B13H,KAAKs9F,kBAFL3zH,MAT8B+tJ,sBAS9B/tJ,MACAC,OAV8B8tJ,sBAU9B9tJ,OAWJ,OANa,IADLo2B,KAAKtjD,SADLmwF,MAGJ2qF,cAAgB7jL,KAAK8M,MAAMmpB,OAASujE,OAAO38D,IAAM28D,OAAOvtC,OAAS63H,YACjEF,aAAe5jL,KAAK8M,MAAMkpB,MAAQwjE,OAAOv5D,KAAOu5D,OAAOt5D,MAAQ4jJ,cAE9DF,aAAgC5tJ,MAAlB6tJ,cAAyB5tJ,SAGxCD,MAAO4tJ,aACP3tJ,OAAQ4tJ,eA0FcF,CAAiBxnL,OAEhCA,KAAK4zG,2EAYG/5E,MAAOC,QACtB95B,KAAK+xG,WAAWl4E,OAChB75B,KAAKgyG,YAAYl4E,QAFa,IAAA0tE,aAM1BxnG,KAAK4M,SAFLywF,OAJ0BmK,aAI1BnK,OACA4U,SAL0BzK,aAK1ByK,SAUJ,OAPIp4E,OAASC,QACT95B,KAAKyjB,SAASmmI,kBAAkB/vH,MAAOC,OAAQujE,OAAQ4U,UACvDjyG,KAAKyjB,SAASmwF,aAAa,OAE3B5zG,KAAKyjB,SAASqwI,oBAElB9zJ,KAAK4zG,aAAa,MACX5zG,2CAUuB+xB,OAC9B,IAAKA,MACD,OAAO/xB,KAEX,IAAMkwD,KAAOlwD,KAAKyjB,SACZuuF,YAAchyG,KAAKgyG,cACnBD,WAAa/xG,KAAK+xG,aAEpB1U,OACAr9F,KAAK4M,SADLywF,OAGA38D,IAIA28D,OAJA38D,IACAovB,OAGAutC,OAHAvtC,OACAhsB,KAEAu5D,OAFAv5D,KACAC,MACAs5D,OADAt5D,MAdiC8jJ,cAmBjC33H,KAAKtjD,SAFLmwF,KAjBiC8qF,cAiBjC9qF,KACA6G,YAlBiCikF,cAkBjCjkF,YAEEkkF,WAAa9gG,YAAYF,6BAAc/0D,OAAQ,OAAQ/xB,MAA/B,GAAAqb,OAAyCmqK,4CAAzC,KAAAnqK,OL5Jb,cK6JXy1C,UAAYk2B,YAAY8gG,WAAY,OAAQ,GAArB,GAAAzsK,OAA4BmqK,4CAA5B,oBAkB7B,OAjBA10H,UAAUmrB,QAAV,GAAA5gE,OAAqBmqK,4CAArB,oBAAAnqK,OAAmDuoF,cAAe,GAElE5jG,KAAK+xB,MAAMA,OACNggF,YACDjhD,UAAUO,KLhLD,QKgLT,GAAAh2C,OAAyB,EAAzB,OAEC22F,aACDlhD,UAAUO,KLpLA,SKoLV,GAAAh2C,OAA0B,EAA1B,OAEJysK,WAAW/vJ,MLrLE,QKqLb,GAAA1c,OAA2B0hF,KAAOl5F,KAAK8M,MAAMohG,YAAc,EAA3D,OACiBh6E,MLvLH,SKsLd,GAAA1c,OACkC0hF,KAAOl5F,KAAK8M,MAAMqhG,aAAe,EADnE,OAEiBj6E,MAAM,aAAc2I,KACpB3I,MAAM,gBAAiB+3B,QACvB/3B,MAAM,cAAe+L,MACrB/L,MAAM,eAAgBgM,OAEvCmsB,KAAKn+B,MAAM++B,UAAUhiC,QACdgiC,kDAYP,OAFA9wD,KAAKyjB,UAAYzjB,KAAKyjB,SAAS+hB,SAC/BxlC,KAAK+xB,SAAW/xB,KAAK+xB,QAAQyT,SACtBxlC,sCAjJP,OAAOmmL,8CAoBP,OAAOnmL,KAAKgkF,4DAwBZ,OAAOq/B,unCCqCAygC,iCAjIX,SAAAA,UAAal3I,QAAQ,IAAA6H,MAAA,+JAAAszK,CAAA/nL,KAAA8jJ,WACjBrvI,oLAAAuzK,CAAAhoL,KAAAioL,0BAAAnkC,WAAAprJ,KAAAsH,KAAM4M,SAENigE,sBAAsBq7G,kEAAAzzK,QAAMglF,qCAAM4sF,QAHjB5xK,iYAPD6xK,oSA8BhB,OAAOtmL,KAAK82B,iDAgCZ,OACIz7B,KAAMgrL,iEAYV,OAAKrmL,KAAK4zG,eAMH5zG,KAAK4zG,gBAJJ/5E,MAAO75B,KAAK65B,OAAS,EACrBC,OAAQ95B,KAAK85B,QAAU,+DAchBD,MAAOC,QAItB,OAHA95B,KAAK+xG,WAAWl4E,OAChB75B,KAAKgyG,YAAYl4E,QACjB95B,KAAK4zG,aAAa,MACX5zG,2CAWuB+xB,OAC9B,GAAIA,MAAO,KACCgG,MAAU/3B,KAAK4M,SAAfmrB,MAER/3B,KAAK+xB,MAAMA,OACX,IAAMgF,UAAY+vD,6BAAc/0D,OAC1B1K,KAAO2/D,YAAYjwD,UAAW,OAAQ/2B,KAAK82B,KACjDzP,KAAK40D,QAAL,GAAA5gE,OAAgBmqK,4CAAhB,KAAAnqK,ONnGc,eMmG+B,GAC7CgM,KAAK0Q,MAAM,QAAX,GAAA1c,OAAuBrb,KAAK+xG,aAA5B,OACA1qF,KAAK0Q,MAAM,SAAX,GAAA1c,OAAwBrb,KAAKgyG,cAA7B,OACA3qF,KAAKk1D,KAAK,IAENxkD,OACA4vD,WAAWtgE,KAAM0Q,OAEvB,OAAO/3B,6CAWT,OADAA,KAAK+xB,SAAW/xB,KAAK+xB,QAAQyT,SACtBxlC,sCAjHP,OAAOqmL,qCAgCP,OAAOrmL,KAAKgkF,4DAXZ,OAAOq/B,ooCC5Cf,IAAM8kE,aAAe,SAAfA,aAAgBztJ,SAClB,IAAMjX,OAASiX,QAAQjX,SADO2kK,oBAK1B1tJ,QAAQmsJ,aAFAwB,eAHkBD,oBAG1BtuJ,OACOwuJ,cAJmBF,oBAI1BvuJ,MAJ0Bq6E,gBAS3Bx5E,QAAQ9tB,SAFRywF,OAP2B6W,gBAO3B7W,OACA6R,SAR2BgF,gBAQ3BhF,SAGCprE,KAICu5D,OAJDv5D,KACAC,MAGCs5D,OAHDt5D,MAIEwkJ,aADDlrF,OAFD38D,IAEC28D,OADDvtC,OAEgCu4H,eAC9BG,YAAc1kJ,KAAOC,MAAQukJ,cAC7Bt2E,YAAct3E,QAAQs3E,cAAgBu2E,aACtCx2E,WAAar3E,QAAQq3E,aAAey2E,YACpC54E,aAAel1E,QAAQj/B,eAAem0G,aAO5C,OALAA,aAAax3E,SAASsC,QAAQm7H,iBAE7B3mD,UAAYx0E,QAAQusJ,UAAUr3E,aAAa50E,aAAavX,OAAQsuF,WAAYC,aAAa,IAC1F9C,UAAYx0E,QAAQusJ,UAAUr3E,aAAa50E,aAAavX,OAAQuuF,YAAaD,YAAY,IAElFr3E,SAiQI21G,oCArLX,SAAAA,SAAazjI,OAAQnR,cAAc,IAAAgZ,8JAAAg0K,CAAAzoL,KAAAqwI,WAC/B57H,iLAAAi0K,CAAA1oL,KAAA2oL,yBAAAt4C,UAAA33I,KAAAsH,KAAM4M,UAED2pG,cAAgB96G,aACrBgZ,MAAKgtJ,WAAahtJ,MAAK26E,QAAQlwD,YAClBzqB,MAAK26E,QAAQ/zF,OAASoqL,iBAAtB,GAAApqK,OAAkCmqK,4CAAlC,KAAAnqK,OAAiDoqK,iBAAjD,YAAApqK,OAAoEmqK,4CAApE,KAAAnqK,OAAmF6qK,eAAnF,UACbzxK,MAAKohJ,eAAiBptE,qCAAsB3B,6BAAc,QAASryE,MAAKgtJ,YACxEhtJ,MAAK8hG,cAAc3G,aAAax3E,SAAS3jB,MAAKohJ,gBAC9ChpF,sBAAsB+7G,gEAAAn0K,QAAMglF,qCAAMysF,iBAClC,IAAMnxG,MAAQtgE,MAAK8hG,cAAc3G,aAAaxxE,WAAW,KAT1B,OAU/B3pB,MAAKoyK,YAAahtJ,MAAOh2B,KAAK8M,MAAoB,EAAdokE,MAAMl7C,MAAY,GAAIC,OAAQj2B,KAAK8M,MAAMokE,MAAMj7C,OAAS,KAC5FquJ,aAAaS,gEAAAn0K,SAXkBA,8XARhB6xK,gSAuCf,OAAOtmL,KAAKyjB,6DAqBZ,OAAOzjB,KAAKu2G,4DAUZ,OACIl2G,KAAML,KAAKyjB,SACXpoB,KAAM6qL,0EA0BV,OAHKlmL,KAAK4zG,gBACN5zG,KAAK4zG,aA1JQ,SAAnBi1E,iBAAoBnuJ,SAAY,IAC1Bk1E,aAAiBl1E,QAAQj/B,eAAzBm0G,aAD0Bk5E,qBAK9BpuJ,QAAQmsJ,aAFAwB,eAHsBS,qBAG9BhvJ,OACOwuJ,cAJuBQ,qBAI9BjvJ,MAJ8Bs4E,iBAW/Bz3E,QAAQ9tB,SAJRywF,OAP+B8U,iBAO/B9U,OACAN,KAR+BoV,iBAQ/BpV,KACAwjE,SAT+BpuD,iBAS/BouD,SACA8B,cAV+BlwD,iBAU/BkwD,cAGAv+H,KAICu5D,OAJDv5D,KACAC,MAGCs5D,OAHDt5D,MAIGwkJ,aADFlrF,OAFD38D,IAEC28D,OADDvtC,OAEiCu4H,eAC9BG,YAAc1kJ,KAAOC,MAAQukJ,cAC7Bt2E,YAAct3E,QAAQs3E,cAAgBu2E,aACtCx2E,WAAar3E,QAAQq3E,aAAey2E,YACpC/kK,OAASiX,QAAQjX,SACjBsxD,MAAQr6C,QAAQusJ,YAChB8B,QAAU,IAAIlgL,MAAMw5J,eAAe1lH,KAAK,KAAK55C,KAAK,IAClDimL,cAAgBp5E,aAAaxxE,WAAW2qJ,SAS9C,GAPAruJ,QAAQ9tB,QAASsiG,UAAU,IACvBn6B,MAAMl7C,OAASk4E,YAAc,IAAMwuD,WACnCxrF,MAAMj7C,OAASi7C,MAAMh3C,cAAgBwiI,UAErCxuD,YAAcA,WAAah9B,MAAMl7C,QACjCk7C,MAAMl7C,MAAQmvJ,cAAcnvJ,OAE5Bk4E,YAAcA,WAAaluG,KAAK2P,IAAIw1K,cAAcnvJ,MAAOk7C,MAAMj3C,cAAe,CAC9E,IAAMmrJ,WAAar5E,aAAa50E,aAAavX,OAAQuuF,YAAag3E,cAAclvJ,QAAQ,GACxFi7C,MAAMl7C,MAAQovJ,WAAWnvJ,OACzBi7C,MAAMj7C,OAASmvJ,WAAWpvJ,MAC1Ba,QAAQ9tB,QAASsiG,UAAU,IAC3Bx0E,QAAQusJ,UAAUgC,YAGtB,OAAIlsF,MAEIljE,MAAOh2B,KAAKqnB,KAAK6pD,MAAMl7C,OAAS2uJ,YAChC1uJ,OAAQj2B,KAAKqnB,KAAK6pD,MAAMj7C,QAAUyuJ,eAGtC1uJ,MAAO,EACPC,OAAQ,GAyGc+uJ,CAAiB7oL,OAEhCA,KAAK4zG,2EAWG/5E,MAAOC,QAKtB,OAJA95B,KAAK+xG,WAAWl4E,OAChB75B,KAAKgyG,YAAYl4E,QACjBquJ,aAAanoL,MACbA,KAAK4zG,aAAa,MACX5zG,2CAWH+xB,OACJ,IAAMggF,WAAa/xG,KAAK+xG,aAClBC,YAAchyG,KAAKgyG,cAFdxK,aASPxnG,KAAK4M,SALLywF,OAJOmK,aAIPnK,OACAN,KALOyK,aAKPzK,KACAulE,cANO96D,aAMP86D,cACA4mB,UAPO1hF,aAOP0hF,UACAh6E,SARO1H,aAQP0H,SAIJ,GADAlvG,KAAK+xB,MAAMA,OACPgrE,KAAM,CACN,IAAMhmE,UAAY+vD,6BAAc/0D,OAC1B1K,KAAO2/D,YAAYjwD,UAAW,OAAQ/2B,KAAK82B,IAAzB,GAAAzb,OAAiCmqK,4CAAjC,KAAAnqK,OP3NX,cO4NP8tK,OAAS7mB,eAAiBpzD,SAAW,SAAW,MAHhDk6E,gBAOFppL,KAAKinL,YAFLptJ,MALEuvJ,gBAKFvvJ,MACAC,OANEsvJ,gBAMFtvJ,OAGQuuJ,eACRroL,KAAK6mL,aADL/sJ,OAEEuvJ,aACF3oJ,IAAK7G,MAAQwuJ,eAAiB,EAC9BiB,OAAQzvJ,MAAQ,EAAIwuJ,eACpBv4H,OAAQu4H,gBAGZtxJ,UAAUgB,MAAM,iBAAkBoxJ,QAGlC9hK,KAAK40D,QAAQj8E,KAAKyhK,YAAY,GAG9Bp6I,KAAK0Q,MAAM,aAAcmxJ,WACzB7hK,KAAK0Q,MAAM,UAAW,UACtB1Q,KAAK0Q,MAAM,YAAam3E,SAAQ,aAAA7zF,OAAgBye,OAAS,EAAzB,yBAAAze,OAC1BguK,YAAYF,QADc,sBACgB,IAChD9hK,KAAK0Q,MPjQI,QOiQSg6E,WAAU,GAAA12F,OAAM02F,WAAN,MAAuB,SAClDvF,oCAAKD,uCAAQE,qCAAMC,uCAAO5jG,QAAQ,SAACzN,MAChC07B,UAAUgB,MAAV,UAAA1c,OAA0BhgB,MAA1B,GAAAggB,OAAqCgiF,OAAOhiG,MAA5C,SAEJgsB,KAAK0Q,MAAM,aAAcmxJ,WACzB7hK,KAAK0Q,MAAM,UAAW,UAEtB/3B,KAAKu2G,cAAc3G,aAAax3E,SAASp4B,KAAK61J,gBAC9CxuI,KAAKk1D,KAAKv8E,KAAKu2G,cAAc3G,aAAa50E,aAAah7B,KAAKyjB,SAAUsuF,WAAYC,aAAa,GAAM3xG,MAEzG,OAAOL,6CAWP,OADAA,KAAK+xB,SAAW/xB,KAAK+xB,QAAQyT,SACtBxlC,sCA5JP,OAAOkmL,8CAqBP,OAAOlmL,KAAKgkF,4DAkCZ,OAAOq/B,2mCC9Kf,0BAwMek/B,gCAnLX,SAAAA,SAAa31I,QAAQ,IAAA6H,MAAA,8JAAA80K,CAAAvpL,KAAAuiJ,WACjB9tI,iLAAA+0K,CAAAxpL,KAAAypL,yBAAAlnC,UAAA7pJ,KAAAsH,KAAM4M,UAED88K,MAAQ,KACbj1K,MAAKs2F,QAAU,KACft2F,MAAKo2I,SACLp2I,MAAKk1K,cACLl1K,MAAKm1K,kBACLn1K,MAAKszD,QAAU,KACftzD,MAAKo1K,WAAa,KAClBp1K,MAAKq1K,SAAW,KAEhBj9G,sBAAsBk9G,gEAAAt1K,QAAMglF,qCAAM2sF,OAZjB3xK,8XAPF6xK,gSAuCf,OAAOtmL,KAAKyjB,uDAsBZ,OACIpoB,KAAM+qL,KACN3uK,KAAMzX,KAAKyjB,SAASmI,YACpBo7J,QAAShnL,KAAKgnL,6DAqBP,IAAAryK,OAAA3U,KACLyX,KAAOzX,KAAKyjB,SAMlB,OALAhM,KAAKuyK,aACJjE,UAAWD,0BAAWH,qBAAME,iBAAQG,2BAAQN,qBAAMC,qBAAMC,0BAAiBK,eAAen9K,QAAQ,SAACypB,MAC9F5d,OAAK4d,SAAW9a,KAAK8a,MAAM5d,OAAK4d,WAEpC9a,KAAKwyK,cACEjqL,+DAUP,IAAMgnL,QAAUhnL,KAAKgnL,UAEjBkD,cAAiBrwJ,MAAO,EAAGC,OAAQ,GAIvC,OAHIktJ,UACAkD,aAAelD,QAAQx5B,mBAEpB08B,uEAaP,OAHKlqL,KAAK4zG,gBACN5zG,KAAK4zG,aArIQ,SAAnBu2E,iBAAoBzvJ,SACtB,IAAM9tB,OAAS8tB,QAAQjX,SAAS7W,SACxBitB,MAAkBjtB,OAAlBitB,MAAOC,OAAWltB,OAAXktB,OACf,OACID,MAAOh2B,KAAKqnB,KAAK2O,OACjBC,OAAQj2B,KAAKqnB,KAAK4O,OAASY,QAAQ0vJ,kBAAkBtwJ,SAgI/BqwJ,CAAiBnqL,OAEhCA,KAAK4zG,2EAYG/5E,MAAOC,QACtB,IAAMriB,KAAOzX,KAAKyjB,SAQlB,OANAzjB,KAAK+xG,WAAWl4E,OAChB75B,KAAKgyG,YAAYl4E,QACjBriB,KAAKuyK,YACLvyK,KAAKoiB,MAAMA,OAAOC,OAAOA,OAAS95B,KAAKoqL,kBAAkBtwJ,QACzDriB,KAAKwyK,cACLjqL,KAAK4zG,aAAa,MACX5zG,2CAUH+xB,OACJ,GAAIA,MAAO,CACP/xB,KAAK+xB,MAAMA,OACX,IAAMigF,YAAchyG,KAAKgyG,cACnBD,WAAa/xG,KAAK+xG,aAClBi1E,QAAUhnL,KAAKgnL,UACfc,WAAa9gG,YAAYF,6BAAc/0D,OAAQ,OAAQ,GAA/B,GAAA1W,OAAsCmqK,4CAAtC,KAAAnqK,ORhKjB,cQkKb,GAAI2rK,QAAS,CACT,IAAMqD,WAAarjG,YAAY8gG,WAAY,OAAQd,SAArB,GAAA3rK,OAAkCmqK,4CAAlC,kBAA8D12J,OAC5Fk4J,QAAQ5jF,OAAOinF,YAEnB,IAAMv5H,UAAYk2B,YAAY8gG,WAAY,OAAQ,GAArB,GAAAzsK,OAA4BmqK,4CAA5B,UAC7BsC,WAAW/vJ,MRtLF,QQsLT,GAAA1c,OAA2B02F,WAA3B,OAA2Ch6E,MRvLjC,SQuLV,GAAA1c,OAA4D22F,YAA5D,OACAlhD,UAAU/4B,MRvLD,QQuLT,GAAA1c,OAA0B02F,WAA1B,OACiBh6E,MRzLP,SQwLV,GAAA1c,OACkC22F,YAAchyG,KAAKoqL,kBAAkBtwJ,OADvE,OAEA95B,KAAKyjB,SAASsO,MAAM++B,UAAUhiC,QAElC,OAAO9uB,6CAYP,OAFAA,KAAK+xB,SAAW/xB,KAAK+xB,QAAQyT,SAC7BxlC,KAAKyjB,SAAS+hB,SACPxlC,sCAzJP,OAAOomL,oCAqBP,OAAOpmL,KAAKyjB,SAASqT,6DA0BrB,OAAOusF,8NCzGR,IAAMinE,sBAAoBC,4BAAAC,yBCRN,aDSElE,aADIiE,4BAAAC,sBCPR,WDSEn6C,eAFMk6C,4BAAAC,sBCNR,WDSE3mC,WAHM0mC,4BAAAC,sBCJR,WDQEjoC,WAJMgoC,4BAAAC,sBCLP,YDUE1mC,YALK0mC,uBEYlBn7B,cAZM,SAAfA,eACF,IAAM3sB,IAAM4nD,qBACZ,OACI74K,IAAK,SAAAA,IAAC3X,IAAK0jB,KAIP,OAHI1jB,OAAO4oI,MACPA,IAAI5oI,KAAO0jB,KAER6xI,cAEXj2J,IAAK,SAAAA,MAAA,OAAMspI,OCPb+nD,wCAA8B,SAA9BA,4BAA+BC,YACjC,MAA0B,mBAAfA,YAA8BA,WAAW7xK,UnVwyCrC,SAAb8xK,WAAcxgL,KAChB,IAAMygL,aACFC,IAAK,QACLC,IAAK,OACLC,IAAK,OACLC,IAAK,SACLC,IAAK,SACLC,IAAK,UAGT,MAAO,GAAA7vK,OAAIlR,KAAO7J,QADE,YACmB,SAAA+H,OAAK,OAAIuiL,YAAYviL,SmV/yCrDsiL,CAAWD,cAFPA,cAuDTS,cAAgB,SAAhBA,cAAiBv+K,OAAQvR,KAAMu0G,aAAcw7E,UAC/C,OAAKx+K,OA1Ca,SAAhBujI,cAAiBvjI,OAAQy+K,SAAUz7E,aAAcw7E,UACnD,IAAI/tF,UAEAC,QAGA1wF,OAHA0wF,QACA3C,YAEA/tF,OAFA+tF,YACA4lE,SACA3zJ,OADA2zJ,SAEE5/F,KAAOyqH,UAAY,IAAI/6C,eAErBh1I,KAAmB,UAAbgwL,SAAuB,SAAW,OACxCnsJ,UAAS,GAAA7jB,OAAKs/E,YAAL,KAAAt/E,OAAoBgwK,SAApB,WAETz7E,4BAENhjG,QAAS2zJ,oBAAYsmB,YAAahtJ,MAAO,EAAGC,OAAQ,IAYtD,OAVA6mC,KAAKl9C,OAAO65E,SACZ38B,KAAK2qH,cAAiBxxJ,OAAQ,EAAGD,MAAO,GAGpCwjE,OADAzwF,OAAO6zB,WAAa+rE,mBACT9rE,IAAK,EAAGovB,OAAQljD,OAAOg0B,UAEvBF,IAAK9zB,OAAOg0B,QAASkvB,OAAQ,GAE5C6Q,KAAK/zD,QAASywF,iBAGVvjE,OAAQ6mC,KAAK6sF,kBAAkB1zH,OAC/B6mC,WAgBGwvE,CACHvjI,OACAvR,KACAu0G,aACAw7E,UANkB,ICrBbG,+BAAoB,SAApBA,kBAAqBC,aAAczsB,OAAQ7gE,YAAautF,aACjE,IAAMC,WAEF5xJ,OAGAokE,YAHApkE,OACAD,MAEAqkE,YAFArkE,MACA8xJ,aACAztF,YADAytF,aAGAlrJ,SAEA+qJ,aAFA/qJ,SACA6G,MACAkkJ,aADAlkJ,MAGEskJ,WA9CmB,SAAhBC,cAAiB9sB,QAC1B,IAAI+sB,UACEC,WACAt1F,KAAOsoE,OAAOxO,iBAmBpB,OAjBAt3J,OAAOub,QAAQiiF,MAAM3tF,QAAQ,SAACwgI,UAC1B,IAAMviG,MAAQuiG,SAAS,GAAG,GACpBorB,UAAYprB,SAAS,GACrB0iD,WAAajtB,OAAOrK,aAE1B,GAAIs3B,WAAW1gL,OAASy7B,MAAO,KAAAklJ,cAIvBllJ,MAAMn6B,SAFNvR,KAFuB4wL,cAEvB5wL,KACAipC,KAHuB2nJ,cAGvB3nJ,KAGE4nJ,WAA6B,kBAAT5nJ,MAAqBA,KAC/CwnJ,UAAY1uB,gBAAe,GAAA/hJ,OAAIhgB,KAAJ,KAAAggB,OAAY6wK,WAAZ,KAAA7wK,OAA0Bq5I,YACrDq3B,QAAQ7lL,MAAO6gC,YAAOg4H,cAAQjsJ,UAAWk5K,WAAW1gL,MAAOwgL,oBAAWp3B,yBAIvEq3B,QAwBYF,CAAc9sB,QACzByD,cAAkBzD,OAAOnyJ,SAAzB41J,cAEFrgK,OAAS2xE,eAAe0uF,eAkD9B,OAjDAopB,WAAW9iL,QAAQ,SAACqjL,SAAUlqL,OAC1B,IAAIkgK,UAEEiqB,kBAEEN,UAIAK,SAJAL,UACA/kJ,MAGAolJ,SAHAplJ,MACAj0B,UAEAq5K,SAFAr5K,UACA4hJ,UACAy3B,SADAz3B,UAEF9nJ,OAAS4+K,aAAa92B,eACtBX,MAAQnnJ,OAAOmnJ,UACrBA,MAAM1zJ,KAAO0zJ,MAAM1zJ,MAAQyS,UACvBlG,OAAOmwF,OACPnwF,OAAO6zB,SAAWA,SAClB7zB,OAAO06B,MAAQA,MAGX66H,OADAspB,YAAYxpL,OACHwpL,YAAYxpL,OAAOkgK,OAEnB2pB,UAAUjyL,QACf+1G,aAAcmvD,OAAOxoD,cAAcj+E,WACnConC,OACImkF,mBAAUxT,0BAItB+7C,eAAelxJ,U1DzBH,a0DyBeoM,MAAsBxN,OAAS6xJ,aAAyB,GAAT7xJ,OAC1EsyJ,eAAenxJ,S1DzBD,e0DyBYqM,MAAuBzN,MAAgB,GAARA,MACzDuyJ,eAAevyJ,MAAQh2B,KAAK2P,IAAI44K,eAAenxJ,SAAUruB,OAAOitB,OAChEuyJ,eAAetyJ,OAASj2B,KAAK2P,IAAI44K,eAAelxJ,UAAWtuB,OAAOktB,SAEjEkjI,QAASC,OAAQC,QAAQp0J,QAAQ,SAACrO,GAC/B2xL,eAAe3xL,GAAKmS,OAAOnS,KAG/B0nK,OAAOp7H,MAAMA,OACI2yD,YAAYv3F,QACZ4xJ,MAAMA,OACNjhJ,UAAUA,WACVlG,OAAOA,QACPmiJ,SAASgQ,OAAO31E,cAAc41E,YAAYqtB,iBAAiB7/J,SAAS1Z,aACpEorF,YAAYkuF,gBACZ76B,YAAYwN,OAAOruC,SACnB47D,oBAEjBZ,QAAQxlL,MAAO64J,cAAQoD,cAAQzN,yBAGhCg3B,o0CC9GUa,ixBAAsBrrB,0VACpB,IAAAsrB,eACWxsL,KAAKylG,WAC/B,OAAS5rE,MAFM2yJ,eACP3yJ,MACQC,OAFD0yJ,eACA1yJ,kEAIDiyC,MACd/rE,KAAKylG,UAAW/kE,IAAKqrC,KAAKvoE,EAAGsgC,KAAMioC,KAAK5vC,IACxCn8B,KAAK2hK,eACD9nI,MAAOkyC,KAAKlyC,MACZC,OAAQiyC,KAAKjyC,QAEjB95B,KAAK4hK,SAAS71F,KAAK61F,4DAInB,OAAO5hK,KAAKylG,iEAIZ,MAAMx2F,MAAM,2EAIZ,MAAMA,MAAM,+zCCtBCw9K,yDACjB,SAAAA,gBAAa/rK,QAAQ,IAAAjM,MAAA,oKAAAi4K,CAAA1sL,KAAAysL,kBACjBh4K,MAAAk4K,0CAAA3sL,KAAA4sL,+BAAAH,iBAAA/zL,KAAAsH,KAAM0gB,OAAO5nB,KAAM4nB,OAAOmhJ,UAAUrU,kBAAmB,KAClDq/B,UAAUnsK,QAFEjM,iZADoB83K,mUAM3Bx1J,WACV,IAAMskJ,aAAer7K,KAAK0gB,OAAO9T,OACjCmqB,UAAY+vD,6BAAc/vD,WAFL,IAGbuQ,MAAU+zI,aAAV/zI,MACFomC,IAAM32C,UACTg6B,UADS,IAAA11C,OACKggK,aAAa1gF,YADlB,qBAET5vF,MAAM/K,KAAKlH,OACd40E,IAAIxc,OAAO1rB,SACX,IAEMsnJ,KAFWp/G,IAAItc,QAAQl+B,OAAO,OAEdrpB,MAAM6jE,KAC5Bo/G,KAAK7wG,QAAL,GAAA5gE,OAAgBggK,aAAa1gF,YAA7B,qBAA4D,GAXvC,IAAA6xF,eAYKxsL,KAAKylG,WAAvB3rE,OAZa0yJ,eAYb1yJ,OAAQD,MAZK2yJ,eAYL3yJ,MAChB75B,KAAK6hK,UAAUjY,kBAAkB/vH,MAAOC,QAExC95B,KAAK6hK,WAAa7hK,KAAK6hK,UAAUz+D,OAAO0pF,KAAKh+J,QAE7Cg+J,KAAK/7H,UAAU,OAAOkrB,QAAtB,GAAA5gE,OAAiCggK,aAAa1gF,YAA9C,mBAA2E,GAC3EmyF,KAAK/0J,MAAM,QAAX,GAAA1c,OAAuB,IAAvB,MAEIggK,cAAgBr7K,KAAK6hK,WACrBirB,KAAK/0J,MAAM,QAAS00E,oBACH10E,MAAM,aAAcuP,yCAKvCvQ,WACF/2B,KAAK+sL,aAAah2J,WAAaT,SAASgB,eAAet3B,KAAK4hK,iEAGjDlhJ,QAGX,OAFA1gB,KAAKlH,KAAK4nB,OAAO5nB,MACjBkH,KAAKylG,SAAS/kF,OAAOmhJ,UAAUrU,mBACxBxtJ,iDAGA0gB,QACP1gB,KAAK6hK,UAAYnhJ,OAAOmhJ,UACxB7hK,KAAK0gB,OAASA,OACd1gB,KAAK07C,OAAOh7B,OAAO9T,OAAO8uC,QAC1B17C,KAAKygC,SAAS/f,OAAO9T,OAAO6zB,UAC5BzgC,KAAKk/B,UAAUxe,OAAO9T,OAAOsyB,WAC7Bl/B,KAAKssK,UAAU5rJ,OAAO9T,OAAO0/J,WAC7BtsK,KAAKysK,UAAU/rJ,OAAO9T,OAAO6/J,qEAGf1gG,MACd/rE,KAAKylG,UAAW/kE,IAAKqrC,KAAKvoE,EACtBsgC,KAAMioC,KAAK5vC,EACXtC,MAAOkyC,KAAKlyC,MACZC,OAAQiyC,KAAKjyC,SACjB95B,KAAK4hK,SAAS71F,KAAK61F,0yCCtCNorB,yDACjB,SAAAA,gBAAatsK,QAAQ,IAAAjM,MAAA,oKAAAw4K,CAAAjtL,KAAAgtL,kBACjBv4K,MAAAy4K,0CAAAltL,KAAAmtL,+BAAAH,iBAAAt0L,KAAAsH,KAAM0gB,OAAO5nB,KAAM4nB,OAAO9T,OAAOsxF,YAAYkvF,YAAa,KACrDP,UAAUnsK,QAFEjM,iZADoB83K,mUAM3Bx1J,WACVA,UAAY+vD,6BAAc/vD,WAC1B,IAAMs2J,qBAFeC,oBAGattL,KAAK0gB,OAAO9T,OAAtC6zB,SAHa6sJ,oBAGb7sJ,SAAUk6D,YAHG2yF,oBAGH3yF,YACZ4yF,YAAcvmG,YAAYjwD,UAAW,OAAQ/2B,KAAKk/I,YAAzB,GAAA7jI,OACIs/E,YADJ,qBACqC,SAAA9hG,GAAC,OAAIA,IACzE00L,YAAYtxG,QAAZ,GAAA5gE,OAAuBs/E,YAAvB,YAA6C,GAC7C,IAAMrzD,MAAS7G,WAAagsE,oBAAQhsE,WAAaisE,oB7D4BjC,WACE,a6D5BZ8gF,SAAWxtL,KAAK2hK,cAAc9nI,MAC9B4zJ,UAAYztL,KAAK2hK,cAAc7nI,OAQrC,IANC/C,UAAWw2J,aAAazkL,QAAQ,SAACue,MAC9BA,KAAK0Q,MAAM,QAAX,GAAA1c,OAAuBxX,KAAK8M,MAAM68K,UAAlC,OACiBz1J,MAAM,SADvB,GAAA1c,OACoCoyK,UADpC,OAEiB11J,MAAM,QAAS00E,sB7DqBpB,a6DlBZnlE,MAAoB,CACpB,IAAIomJ,UAAY,EACZC,WAAaF,UACbG,UAAY,EAEhB5tL,KAAKk/I,WAAWp2I,QAAQ,SAAC8iL,YACrB,IAAMiC,IAAMjC,WAAWzpB,OACnB0rB,IAAI3vF,cAAcpkE,OAAS6zJ,YAC3BD,WACAE,UAAY,EACZD,WAAaF,WAEbC,SAAW,GAAKA,WAEpBL,kBAAkBK,UAAYL,kBAAkBK,cAChDC,YAAc9pL,KAAK2P,IAAIq6K,IAAI3vF,cAAcpkE,OAAQ6zJ,YACjDC,UAAY/pL,KAAK6P,IAAI7P,KAAK2P,IAAIq6K,IAAI3vF,cAAcrkE,MAAOg0J,IAAI3vF,cAAcjjE,UAAW2yJ,WACpFP,kBAAkBK,UAAUxnL,MACxBi8J,OAAQ0rB,IACRC,aAAcL,UACdM,YAAaH,cAIrB,IAAM77J,MAAQi1D,YAAYumG,aAAc,OAAQF,kBAAvB,GAAAhyK,OAA6Cs/E,YAA7C,oBAEzB5oE,MAAMkqD,QAAN,GAAA5gE,OAAiBs/E,YAAjB,6BAAwD,GACvC5iE,MAAM,QAAS,SAAAl/B,GAAC,SAAAwiB,OAAOxiB,EAAE,GAAGk1L,YAAZ,QACjC/mG,YAAYj1D,OAAQ,OAAQ,SAAAl5B,GAAC,OAAIA,GAAtB,GAAAwiB,OAA4Bs/E,YAA5B,yBAAiE,SAAA9hG,GAAC,OAAIA,EAAEspK,OAAOrrI,OACzEyO,KAAK,SAAU1sC,GACZA,EAAEspK,OAAOpwI,MAAM/xB,QAElB+3B,MAAM,QAAS,SAAAl/B,GAAC,SAAAwiB,OAAOxiB,EAAEk1L,YAAT,YAC9B,CACH,IAAMh8J,OAAQi1D,YAAYumG,YAAa,OAAQ,GAAtB,GAAAlyK,OAA6Bs/E,YAA7B,oBACzB5oE,OAAMkqD,QAAN,GAAA5gE,OAAiBs/E,YAAjB,+BAA0D,GAC1D5oE,OAAMkqD,QAAN,GAAA5gE,OAAiBs/E,YAAjB,mBAA+C,IAAK,GACnC5iE,MAAM,QADvB,GAAA1c,OACmCmyK,SADnC,OAGAxmG,YAAYj1D,OAAO,MAAO/xB,KAAKk/I,WAApB,GAAA7jI,OAAmCs/E,YAAnC,yBAAwE,SAAA9hG,GAAC,OAAIA,EAAEspK,OAAOrrI,OAChFyO,KAAK,SAAU1sC,GAAKA,EAAEspK,OAAOpwI,MAAM/xB,QACnC+3B,MAAM,QAAS,SAAAl/B,GAAC,SAAAwiB,OAAOxiB,EAAEspK,OAAOjkE,cAAcrkE,MAA9B,2CAInC9C,WACF/2B,KAAKguL,aAAaj3J,WAAaT,SAASgB,eAAet3B,KAAK4hK,iEAGjDlhJ,QAIX,OAHA1gB,KAAKlH,KAAK4nB,OAAO5nB,MACjBkH,KAAKylG,SAAS/kF,OAAO9T,OAAOsxF,YAAYkvF,aACxCptL,KAAK6sL,UAAUnsK,QACR1gB,iDAGA0gB,QACP1gB,KAAKk/I,WAAax+H,OAAOmhJ,UACzB7hK,KAAK0gB,OAASA,OACd1gB,KAAK07C,OAAOh7B,OAAO9T,OAAO8uC,QAC1B17C,KAAKygC,SAAS/f,OAAO9T,OAAO6zB,UAJb,IAAAwtJ,sBAhGvB,SAASC,uBAAwBztJ,UAC7B,IAAIgsI,UAAY,KACVH,UAAS,GAAAjxJ,OAAMg3J,iBAAiB,GAAvB,KAAAh3J,OAA6Bk3J,oBAAoB,IAChE,OAAQ9xI,UACR,KAAK+rE,kBACL,KAAKD,qBACDkgE,UAAYlP,kBACZ,MACJ,KAAK9wD,mBACL,KAAKC,oBACD+/D,UAAYjP,gBACZ,MACJ,QACIiP,UAAYjP,gBAEhB,OAASiP,oBAAWH,qBAsFiB4hB,CAAuBxtK,OAAO9T,OAAO6zB,UAA9D6rI,UALO2hB,sBAKP3hB,UAAWG,UALJwhB,sBAKIxhB,UACnBzsK,KAAKk/B,UAAUxe,OAAO9T,OAAOsyB,WAC7Bl/B,KAAKssK,UAAU5rJ,OAAO9T,OAAO0/J,WAAaA,WAC1CtsK,KAAKysK,UAAU/rJ,OAAO9T,OAAO6/J,WAAaA,kCCpG5Cr0E,uCAAS7P,4BAET4lG,cACFrqJ,K9DEiB,Q8DDjBC,M9DCiB,Q8DAjBrD,I9DCkB,S8DAlBovB,O9DAkB,U8DGTs+H,iBAAmB,SAAnBA,iBAAoBla,aAAcma,YAAaC,YACxD,IAAIC,WAAa,EAIjB,OAHiBra,aAAayE,SAAWzE,aAAayE,QAAQj3K,OAC1DwyK,aAAayE,QAAUzE,aAAa0E,WAExB3wK,IAAI,SAACxN,GACjB,IAAM+zL,aAA4B,IAAbD,YAAoBF,YAAcC,YAEvD,OADAC,YAAc9zL,EACP+zL,gBAIFC,4BAAuB,SAAvBA,qBAAwB18J,MAAO12B,KAAMuR,QAAW,IAErD+tF,YAEA/tF,OAFA+tF,YACAsnE,UACAr1J,OADAq1J,UAEEnkE,MAAQ9W,YAAYj1D,MAAO,OAAQ12B,MAAhB,GAAAggB,OAA0Bs/E,YAA1B,kBAAAt/E,OAAsDhgB,OAS/E,OAPAyiG,MAAM7hB,QAAN,GAAA5gE,OAAiBs/E,YAAjB,kBAA6C,GAC7CmD,MAAM/lE,MAAMo2J,aAAa9yL,MAAzB,GAAAggB,OAAmC4mJ,UAAnC,OAEgBj7E,YAAY8W,MAAO,OAAQ,GAAhB,GAAAziF,OAAuBs/E,YAAvB,0BAEnBtpC,KAAK,KAAb,GAAAh2C,OAAsBs/E,YAAtB,0BAAAt/E,OAA0DhgB,OAEnDyiG,OAGE4wF,2BAAsB,SAAtBA,oBAAuB38J,MAAOnlB,QAAW,IAE9C+tF,YACA/tF,OADA+tF,YAEEzmC,KAAO8yB,YAAYj1D,MAAO,OAAQ,GAAhB,GAAA1W,OAAuBs/E,YAAvB,iBAGxB,OAASzmC,UAAMy6H,MAFD3nG,YAAY9yB,KAAM,OAAQ,GAAf,GAAA74C,OAAsBs/E,YAAtB,oBAyDvBi0F,2BAA6B,SAA7BA,2BAA8BC,UAAWC,YAAa5sB,OAAU,IAE9DysB,MAEAE,UAFAF,MACAz6H,KACA26H,UADA36H,KAH8D66H,sBAKjDJ,MAAM7/J,OAAO8uD,wBAAtBzhD,EAL0D4yJ,sBAK1D5yJ,EAAG34B,EALuDurL,sBAKvDvrL,EALuDwrL,sBAMnC96H,KAAKplC,OAAO8uD,wBAAhCqxG,MANuDD,sBAM1D7yJ,EAAa+yJ,MAN6CF,sBAMhDxrL,EAElBsrL,YAAYK,qBAAsBhzJ,EAAGA,EAAI8yJ,MAAQ/sB,MAAO1+J,EAAGA,EAAI0rL,MAAQhtB,SAGrEktB,+BAA0B,SAA1BA,wBAA2BN,YAAaD,UAAWQ,UAAWntB,OAChE,IAAIlgF,MAAQ,GACN8b,MAAQgxF,YAAYQ,YAAYD,WAChCE,cAAgBtmG,WAEtB6U,MAAMpyB,GAAG6jH,cAAgB,aAAe,YAAa,WACnClnG,0BAER1J,iBAENqD,MAAQS,YAAY,WAChBmsG,2BAA2BC,UAAWC,YAAa5sB,QACpD,OACJx2F,GAAG6jH,cAAgB,WAAa,UAAW,WAC5BlnG,0BAER1J,iBAEN6D,cAAcR,SACftW,GAAG,QAAS,WACXkjH,2BAA2BC,UAAWC,YAAa5sB,UAI9CrzF,0CAAoB,SAApBA,kBAAqBigH,aAAgB,IAE1CD,UACAC,YAAYQ,YADZT,UAGE3sB,MAAQ4sB,YAAYliL,SAASs1J,MAEnCktB,+BAAwBN,YAAaD,UAAW,aAAc3sB,OAnF3C,SAAjBstB,eAAkBV,YAAaD,WACjC,IAAI13F,YACAs4F,cAAgB,EAChBr4F,UAEAu3F,MAEAE,UAFAF,MAGEe,aADFb,UADA36H,KAEsBplC,OAAO8uD,wBAEjC+wG,MAAMj2L,KAAK0/F,gBACM1sB,GAAG,QAAS,WACT,IAAMmM,MAAQwQ,0BAEdonG,cAAgBd,MAAM7/J,OAAO8uD,wBAC7BuZ,UACIh7D,EAAG07C,MAAM17C,EACT34B,EAAGq0E,MAAMr0E,KAGhBkoE,GAAG,OAAQ,WACR,IAAMmM,MAAQwQ,0BACRlwF,OAASgyE,YAMTwlH,iBAJNv4F,QACIj7D,EAAG07C,MAAM17C,EACT34B,EAAGq0E,MAAMr0E,IAGC24B,EAAIg7D,SAASh7D,EADrBwzJ,gBAECv4F,OAAO5zF,EAAI2zF,SAAS3zF,EAErBosL,gBACFzzJ,EAAGszJ,cAActzJ,EAAIwzJ,gBAAkBD,aAAavzJ,EAAIhkC,OAAO03L,YAC/DrsL,EAAGisL,cAAcjsL,EAAImsL,gBAAkBD,aAAalsL,EAAIrL,OAAO23L,aAGnEhB,YAAYK,oBAAoBS,mBA+CpDJ,CAAeV,YAAaD,WA/FF,SAAjBkB,eAAkBjB,YAAaD,WAGpCA,UADA36H,KAGCwX,GAAG,QAAS,WACb,IAAMmM,MAAQwQ,0BACdymG,YAAYkB,qBAAqBn4G,SAyFrCk4G,CAAejB,YAAaD,WAC5BO,+BAAwBN,YAAaD,UAAW,YAAa3sB,QC1JpDzoE,8BAET7sF,QACI4/D,aAAc,SAAAA,aAAC9xC,QAASlhC,OAEpB,OADAA,MAAQ+zE,eAAe7yC,QAAQ00D,QAAS51F,SAIhDy2L,WACAC,iBACAt8E,iTCLG,IAAMu8E,yBAAb,WAEI,SAAAA,yKAAeC,CAAApwL,KAAAmwL,aACXnwL,KAAKsvL,eACLtvL,KAAKy0K,iBACLz0K,KAAKqwL,sBAAwB,aAC7BrwL,KAAKovF,SACD6yE,UAAW,GACXC,MAAO,GAEXliK,KAAKswL,eAAiB,KAEtBzjH,sBAAsB7sE,KAAMy5F,8BAZpC,gPAAA82F,CAAAJ,cAAAr2L,IAAA,uBAAAN,MAAA,SAAAw2L,uBAoBQ,MAAM,IAAI3iH,UAAU,6BApB5BvzE,IAAA,sBAAAN,MAAA,SAAA21L,sBAwBQ,MAAM,IAAI9hH,UAAU,6BAxB5BvzE,IAAA,WAAAN,MAAA,SAAAg3L,WA4BQ,MAAM,IAAInjH,UAAU,6BA5B5BvzE,IAAA,gBAAAN,MAAA,SAAAi3L,gBAgCQ,MAAM,IAAIpjH,UAAU,6BAhC5BvzE,IAAA,eAAAN,MAAA,SAAAk3L,aAmCkBp8J,YAGV,OACIq8J,mBFiHyB,SAAxBC,sBAAyBt8J,WAAY1nB,OAAQmb,WAAY1sB,MAAS,IAEvEs/F,YACA/tF,OADA+tF,YAEEg2F,mBAAqB3pG,YAAYF,6BAAcxyD,YAAa,OAAQ,GAApC,IAAAjZ,OAA4Cs/E,YAA5C,gBAAAt/E,OAAsEhgB,OAK5G,OAHAs1L,mBAAmB10G,QAAnB,GAAA5gE,OAA8Bs/E,YAA9B,gBAAwD,GACxDg2F,mBAAmB54J,M9DtJF,Q8DsJjB,GAAA1c,OAAmC0M,WAAW8R,MAA9C,OACA82J,mBAAmB54J,M9DtJD,S8DsJlB,GAAA1c,OAAoC0M,WAAW+R,OAA/C,OACO62J,mBE1HqBC,CAAsBt8J,WAH/Bt0B,KAAK4M,SAG8C5M,KAAK4zG,eAAgB5zG,KAAKglB,YAAY3pB,YAvChHvB,IAAA,qBAAAN,MAAA,SAAAq3L,mBA2CwBC,sBAEhB,OADA9wL,KAAKqwL,sBAAwBS,qBACtB9wL,QA7CflG,IAAA,qBAAAN,MAAA,SAAAu3L,qBAkDQ,OADA/wL,KAAKqwL,sBAAwB,aACtBrwL,QAlDflG,IAAA,kBAAAN,MAAA,SAAAg0J,kBAsDQ,OAAOxtJ,KAAK4zG,kBAtDpB95G,IAAA,oBAAAN,MAAA,SAAAq1E,oBA2DQ,OADAA,0CAAkB7uE,MACXA,QA3DflG,IAAA,SAAAN,MAAA,SAAAgsC,SAgEQ,OADAxlC,KAAKsvL,YAAYqB,mBAAmBnrJ,SAC7BxlC,UAhEflG,IAAA,OAAAN,MAAA,SAAA6B,OAgBQ,MAAM,IAAIgyE,UAAU,8BAhB5B8iH,YAAA,8hKCHA,IAAMa,gBACFv4B,WCDJ,SAAAw4B,cAAA,SAAAC,wBAAA,4KAAAC,CAAAnxL,KAAAkxL,uBAAAE,kDAAApxL,KAAAqxL,uCAAAH,uBAAA3pL,MAAAvH,KAAAoF,YAAA,0YAAAksL,CAAAJ,sBAA2Cf,oSAA3CoB,CAAAL,wBAAAp3L,IAAA,eAAAN,MAAA,SAAAk3L,aAakBp8J,YAA8C,IAAlCvM,WAAkC3iB,UAAA1D,OAAA,QAAA4L,IAAAlI,UAAA,GAAAA,UAAA,GAArBpF,KAAK4zG,eAClChnG,OAAS5M,KAAK4M,SACZ+jL,mBAFgDa,4BAAAH,uCAAAH,sBAAA72L,WAAA,eAAA2F,MAAAtH,KAAAsH,KAENs0B,WAAY1nB,OAAQmb,YAA9D4oK,mBACFc,UAAYhD,4BAAqBkC,mBAAoB,OAAQ/jL,QAC7DiiL,UAAYH,2BAAoBiC,mBAAoB/jL,QACpD8kL,UAAYjD,4BAAqBkC,mBAAoB,QAAS/jL,QAEhE+hL,MAEAE,UAFAF,MACAz6H,KACA26H,UADA36H,KARoDy9H,mBAWO3xL,KAAK4zG,eAA5D95E,OAXgD63J,mBAWhD73J,OAAQD,MAXwC83J,mBAWxC93J,MAAOw0J,YAXiCsD,mBAWjCtD,YAAaC,WAXoBqD,mBAWpBrD,WAAYlM,WAXQuP,mBAWRvP,WAC1CwP,2BAA6B/3J,MAAiB,EAATC,OAE3Co6B,KAAKn8B,MlEfQ,QkEeb,GAAA1c,OAAqB0M,WAAW8R,MAAiB,EAATC,OAAxC,OACAo6B,KAAKn8B,MlEfS,SkEed,GAAA1c,OAAsB,IAAtB,MACAszK,MAAM52J,MlEjBO,QkEiBb,GAAA1c,OAAuBizK,WAAasD,2BAA8BvD,YAAlE,OACAM,MAAM52J,MlEjBQ,SkEiBd,GAAA1c,OAAuB,IAAvB,MACAszK,MAAM52J,MAAM00E,mBAAZ,GAAApxF,OAAqB,EAArB,OAEArb,KAAKsvL,aACDmC,oBACAC,oBACA7C,oBACA8B,uCAEJ3wL,KAAK6xL,4BAA8BD,2BACnC5xL,KAAKkwL,cAAc9B,iBAAiBhM,WAAYiM,YAAaC,aAC7DtuL,KAAK6uE,uBAzCb/0E,IAAA,uBAAAN,MAAA,SAAAw2L,qBA4C0Bn4G,OAAO,IAAAi6G,sBAIrB9xL,KAAKsvL,YAAYT,UAFjBF,MAFqBmD,sBAErBnD,MACAz6H,KAHqB49H,sBAGrB59H,KAEEguG,MAAQliK,KAAK4M,SAASs1J,MALH6sB,sBAMRJ,MAAM7/J,OAAO8uD,wBAAtBzhD,EANiB4yJ,sBAMjB5yJ,EAAG34B,EANcurL,sBAMdvrL,EANcwrL,sBAOM96H,KAAKplC,OAAO8uD,wBAAhCqxG,MAPcD,sBAOjB7yJ,EAAa+yJ,MAPIF,sBAOPxrL,EACduuL,iBAA2B,GAAR7vB,MACnBrqF,MAAM17C,EAAIA,IACV41J,iBAA4B,IAAR7vB,OAExBliK,KAAKmvL,qBAAsBhzJ,EAAGA,EAAI8yJ,MAAQ8C,iBAAkBvuL,EAAGA,EAAI0rL,MAAQ6C,sBAxDnFj4L,IAAA,sBAAAN,MAAA,SAAA21L,oBA2DyB6C,aACjB,IAAIC,WAD0BC,uBAK1BlyL,KAAKsvL,YAAYT,UAFjBF,MAH0BuD,uBAG1BvD,MAGEe,aANwBwC,uBAI1Bh+H,KAEsBplC,OAAO8uD,wBAC3Bu0G,SAAWxD,MAAM7/J,OAAO8uD,wBAE1BywG,YACCruL,KAAK4zG,eADNy6E,YAIA4D,WADAD,YAAY71J,EAAI,EACH,EACN61J,YAAY71J,EAAIg2J,SAASt4J,MAAQ61J,aAAa71J,MACxC61J,aAAa71J,MAAQs4J,SAASt4J,MAE9Bm4J,YAAY71J,EAG7BwyJ,MAAM52J,MAAM00E,mBAAZ,GAAApxF,OAAqB42K,WAArB,OACA,IACMG,gBAAmBH,WAAa5D,YADhBruL,KAAK6xL,4BAG3B7xL,KAAKiwL,UAAUoC,8BAA8BryL,KAAKglB,YAAY3pB,OAAQ+2L,oBAnF9Et4L,IAAA,gBAAAN,MAAA,SAAAi3L,cAsFmB6B,OAAO,IAAAC,uBAIdvyL,KAAKsvL,YAAYT,UAFjBF,MAFc4D,uBAEd5D,MACAz6H,KAHcq+H,uBAGdr+H,KAEEi+H,SAAWxD,MAAM7/J,OAAO8uD,wBACxB8xG,aAAex7H,KAAKplC,OAAO8uD,wBAGjC,OADA59E,KAAKmvL,qBAAsB3rL,EAAG,EAAG24B,EAAGg2J,SAASh2J,EAAIuzJ,aAAavzJ,EAAIm2J,QAC3DtyL,QA/FflG,IAAA,WAAAN,MAAA,SAAAg3L,SA0GcgC,kBAAkB,IAIlBL,SADFnyL,KAAKsvL,YAAYT,UADjBF,MAEmB7/J,OAAO8uD,wBACxB60G,SAAYD,kBAAoBxyL,KAAK6xL,4BAA8BM,SAASt4J,OAAU,IAG5F,OADA75B,KAAKmvL,qBAAsB3rL,EAAG,EAAG24B,EAAGs2J,WAC7BzyL,UAlHflG,IAAA,OAAAN,MAAA,SAAA6B,OAUQ,MlEoDkB,iBkE9D1B61L,sBAAA,GDEIx4B,SEFJ,SAAAu4B,cAAA,SAAAyB,sBAAA,0KAAAC,CAAA3yL,KAAA0yL,qBAAAE,gDAAA5yL,KAAA6yL,qCAAAH,qBAAAnrL,MAAAvH,KAAAoF,YAAA,sYAAA0tL,CAAAJ,oBAAyCvC,8RAAzC4C,CAAAL,sBAAA54L,IAAA,eAAAN,MAAA,SAAAk3L,aAakBp8J,YAA8C,IAAlCvM,WAAkC3iB,UAAA1D,OAAA,QAAA4L,IAAAlI,UAAA,GAAAA,UAAA,GAArBpF,KAAK4zG,eAClChnG,OAAS5M,KAAK4M,SACZ+jL,mBAFgDqC,0BAAAH,qCAAAH,oBAAAr4L,WAAA,eAAA2F,MAAAtH,KAAAsH,KAENs0B,WAAYvM,YAAtD4oK,mBACFc,UAAYhD,4BAAqBkC,mBAAoB,MAAO/jL,QAC5DiiL,UAAYH,2BAAoBiC,mBAAoB/jL,QACpD8kL,UAAYjD,4BAAqBkC,mBAAoB,SAAU/jL,QAEjE+hL,MAEAE,UAFAF,MACAz6H,KACA26H,UADA36H,KARoDy9H,mBAUQ3xL,KAAK4zG,eAA7D95E,OAVgD63J,mBAUhD73J,OAAQD,MAVwC83J,mBAUxC93J,MAAOw0J,YAViCsD,mBAUjCtD,YAAaC,WAVoBqD,mBAUpBrD,WAAYnM,YAVQwP,mBAURxP,YAC1CyP,2BAA6B93J,OAAiB,EAARD,MAE5Cq6B,KAAKn8B,MnEbS,SmEad,GAAA1c,OAAsBu2K,2BAAtB,OACA19H,KAAKn8B,MnEfQ,QmEeb,GAAA1c,OAAqB,IAArB,MACAszK,MAAM52J,MnEhBO,QmEgBb,GAAA1c,OAAsB,IAAtB,MACAszK,MAAM52J,MnEhBQ,SmEgBd,GAAA1c,OAAwBizK,WAAasD,2BAA8BvD,YAAnE,OACAM,MAAM52J,MAAMy0E,kBAAZ,GAAAnxF,OAAoB,EAApB,OAEArb,KAAKsvL,aACDmC,oBACAC,oBACA7C,oBACA8B,uCAEJ3wL,KAAK6xL,4BAA8BD,2BAEnC5xL,KAAKkwL,cAAc9B,iBAAiBjM,YAAakM,YAAaC,aAC9DtuL,KAAK6uE,uBAzCb/0E,IAAA,uBAAAN,MAAA,SAAAw2L,qBA4C0Bn4G,OAAO,IAAAi6G,sBAIrB9xL,KAAKsvL,YAAYT,UAFjBF,MAFqBmD,sBAErBnD,MACAz6H,KAHqB49H,sBAGrB59H,KAEEguG,MAAQliK,KAAK4M,SAASs1J,MALH6sB,sBAMRJ,MAAM7/J,OAAO8uD,wBAAtBzhD,EANiB4yJ,sBAMjB5yJ,EAAG34B,EANcurL,sBAMdvrL,EANcwrL,sBAOM96H,KAAKplC,OAAO8uD,wBAAhCqxG,MAPcD,sBAOjB7yJ,EAAa+yJ,MAPIF,sBAOPxrL,EAEduuL,iBAA2B,GAAR7vB,MACnBrqF,MAAMr0E,EAAIA,IACVuuL,iBAA4B,IAAR7vB,OAExBliK,KAAKmvL,qBAAsBhzJ,EAAGA,EAAI8yJ,MAAQ8C,iBAAkBvuL,EAAGA,EAAI0rL,MAAQ6C,sBAzDnFj4L,IAAA,sBAAAN,MAAA,SAAA21L,oBA4DyB6C,aACjB,IAAIC,WAD0BC,uBAK1BlyL,KAAKsvL,YAAYT,UAFjBF,MAH0BuD,uBAG1BvD,MACAz6H,KAJ0Bg+H,uBAI1Bh+H,KAGAm6H,YACCruL,KAAK4zG,eADNy6E,YAEEqB,aAAex7H,KAAKplC,OAAO8uD,wBAC3Bu0G,SAAWxD,MAAM7/J,OAAO8uD,wBAG1Bq0G,WADAD,YAAYxuL,EAAI,EACH,EACNwuL,YAAYxuL,EAAI2uL,SAASr4J,OAAS41J,aAAa51J,OACzC41J,aAAa51J,OAASq4J,SAASr4J,OAE/Bk4J,YAAYxuL,EAE7BmrL,MAAM52J,MAAMy0E,kBAAZ,GAAAnxF,OAAoB42K,WAApB,OACA,IACMG,gBAAmBH,WAAa5D,YADhBruL,KAAK6xL,4BAG3B7xL,KAAKiwL,UAAUoC,8BAA8BryL,KAAKglB,YAAY3pB,OAAQ+2L,oBAnF9Et4L,IAAA,gBAAAN,MAAA,SAAAi3L,cAgGmB6B,OAAO,IAAAC,uBAIdvyL,KAAKsvL,YAAYT,UAFjBF,MAFc4D,uBAEd5D,MACAz6H,KAHcq+H,uBAGdr+H,KAEEi+H,SAAWxD,MAAM7/J,OAAO8uD,wBACxB8xG,aAAex7H,KAAKplC,OAAO8uD,wBAGjC,OADA59E,KAAKmvL,qBAAsB3rL,EAAG2uL,SAAS3uL,EAAIksL,aAAalsL,EAAI8uL,MAAOn2J,EAAG,IAC/Dn8B,QAzGflG,IAAA,WAAAN,MAAA,SAAAg3L,SAoHcgC,kBAAkB,IAIlBL,SADFnyL,KAAKsvL,YAAYT,UADjBF,MAEmB7/J,OAAO8uD,wBACxB60G,SAAYD,kBAAoBxyL,KAAK6xL,4BAA8BM,SAASr4J,QAAW,IAG7F,OADA95B,KAAKmvL,qBAAsBhzJ,EAAG,EAAG34B,EAAGivL,WAC7BzyL,UA5HflG,IAAA,OAAAN,MAAA,SAAA6B,OAUQ,MnEmDgB,emE7DxBq3L,oBAAA,IFcqBO,yCAEjB,SAAAA,gBAAavyK,QAAQ,IAAAjM,qKAAAy+K,CAAAlzL,KAAAizL,iBACjB,IAAM9C,YAAca,eAAetwK,OAAO9T,OAAOvR,MADhC,OAGjBqlB,OAAOmhJ,UAAY,IAAIsuB,YACvBzvK,OAAOmhJ,UAAUj1J,OAAO8T,OAAO9T,OAAOumL,0BACtCzyK,OAAOmhJ,UAAUjuD,aAAalzF,OAAOqH,aACrCtT,MAAA2+K,2CAAApzL,KAAAqzL,gCAAAJ,iBAAAv6L,KAAAsH,KAAM0gB,OAAO5nB,KAAM4nB,OAAOmhJ,UAAUrU,kBAAmB,KAClDq/B,UAAUnsK,QAPEjM,mZAFoB83K,8TAarC,OAAInnL,UAAQ1D,QACR1B,KAAK6hK,UAAUouB,QAAf7qL,UAAA1D,QAAA,OAAA4L,EAAAlI,UAAA,IACOpF,MAEJA,KAAK6hK,UAAUouB,8DAaXqC,OAEX,OADAtyL,KAAK6hK,UAAU4uB,cAAc6B,OACtBtyL,+CAWDwyL,kBAEN,OADAxyL,KAAK6hK,UAAU2uB,SAASgC,kBACjBxyL,iEAcQszL,WACf,IAAMpD,cAAgBlwL,KAAK6hK,UAAUquB,gBAC/BqD,mBAAqB1vL,KAAK2P,IAAI3P,KAAK6P,IAAI,EAAG4/K,WAAYpD,cAAcxuL,OAAS,GAEnF,OADA1B,KAAK6hK,UAAU2uB,SAASN,cAAcqD,qBAC/BvzL,qFAaP,OAAOA,KAAK6hK,UAAUquB,kDAGpBn5J,WAEF,OADA/2B,KAAK6hK,UAAU6uB,aAAa35J,WAAaT,SAASgB,eAAet3B,KAAK4hK,aAC/D5hK,mEAUSwzL,gBAEhB,OADAxzL,KAAK6hK,UAAUgvB,mBAAmB2C,gBAC3BxzL,qEAWP,OADAA,KAAK6hK,UAAUkvB,qBACR/wL,yDAGI0gB,QAMX,OALA1gB,KAAKlH,KAAK4nB,OAAO5nB,MACjBkH,KAAK6hK,UAAUj1J,OAAO8T,OAAO9T,OAAOumL,0BACpCnzL,KAAK6hK,UAAUjuD,aAAalzF,OAAOqH,YACnC/nB,KAAKylG,SAASzlG,KAAK6hK,UAAUrU,mBAC7BxtJ,KAAK6sL,UAAUnsK,QACR1gB,iDAGA0gB,QACP1gB,KAAK6hK,UAAYnhJ,OAAOmhJ,WAAa7hK,KAAK6hK,UAC1C7hK,KAAK0gB,OAASA,OACd1gB,KAAK07C,OAAOh7B,OAAO9T,OAAO8uC,QAC1B17C,KAAKygC,SAAS/f,OAAO9T,OAAO6zB,UAC5BzgC,KAAKk/B,UAAUxe,OAAO9T,OAAOsyB,WAC7Bl/B,KAAKssK,UAAU5rJ,OAAO9T,OAAO0/J,WAC7BtsK,KAAKysK,UAAU/rJ,OAAO9T,OAAO6/J,mDAI7BzsK,KAAK6hK,UAAUr8H,+yCGvIvB,IAOqBiuJ,0DAEjB,SAAAA,gBAAa/yK,QAAQ,IAAAjM,MAAA,qKAAAi/K,CAAA1zL,KAAAyzL,kBACjBh/K,MAAAk/K,2CAAA3zL,KAAA4zL,gCAAAH,iBAAA/6L,KAAAsH,KAAM0gB,OAAO5nB,KAAM4nB,OAAO9T,OAAOmb,WAAY,KACxC8kK,UAAUnsK,QACfjM,MAAKyqB,UAAUxe,OAAO9T,OAAOsyB,WAHZzqB,mZAFoB83K,oUAQ5Bx1J,WACT,IAAMhc,IAAM/a,KAAK0gB,OAAO9T,OAAOmO,IACzBK,OAASpb,KAAK0gB,OAAO9T,OAAOwO,OAFdy4K,sBAGa7zL,KAAK0gB,OAAO9T,OAAO2vK,WAA5C9jB,WAHYo7B,sBAGZp7B,WAAYC,SAHAm7B,sBAGAn7B,SACpB3hI,UAAUgB,MpEyCM,WAID,WoE5CfhB,UAAUgB,MpEdG,QAyDD,QoE1CZhB,UAAUgB,MpEdI,SAwDF,QoExCR0gI,YAAyB,IAAXr9I,SACd2b,UAAUgB,MpEoCE,WADF,UoElCVhB,UAAUgB,MpEnBD,QoEmBc,SAGvB2gI,UxCwMU,WwCxME39I,MACZgc,UAAUgB,MpE+BE,WADF,UoE7BVhB,UAAUgB,MpEvBA,SoEuBc,2DAIlBzD,YAEV,IAAMqmE,YAAc36F,KAAK0gB,OAAO9T,OAAO+tF,YACjC5/E,IAAM/a,KAAK0gB,OAAO9T,OAAOmO,IACzBK,OAASpb,KAAK0gB,OAAO9T,OAAOwO,OAC5B2M,WAAa/nB,KAAK0gB,OAAO9T,OAAOmb,WAChCinI,OAAShvJ,KAAK0gB,OAAO9T,OAAOoiJ,OAG5B8kC,mBAAqB9sG,YAAY1yD,WAAY,OAAQ,GAArB,GAAAjZ,OAA4Bs/E,YAA5B,UAAAt/E,OAAgDN,IAAhD,KAAAM,OAAuDD,OAAS,IACjG6gE,QADsB,GAAA5gE,OACXs/E,YADW,UAAAt/E,OACSN,MAAO,GACtCkhE,QAFsB,GAAA5gE,OAEXs/E,YAFW,UAES,GAEpC36F,KAAK+zL,YAAYD,oBAbK,IAAAE,e1BuKvB,SAASC,cAAe15I,OAAQl/C,KAAM4G,OACzC,IAAIqiL,MAAQ,KACRJ,WAAa3pI,OAF+B25I,qBAO5CjP,oBAAmB,GAAA5pK,OAAIhgB,KAAJ,KAAAggB,OAAYpZ,QAH/B6iL,YAJ4CoP,qBAI5CpP,YACAC,gBAL4CmP,qBAK5CnP,gBACAC,UAN4CkP,qBAM5ClP,UAQJ,OALIzqI,OAAO74C,SAGP4iL,MAAQU,UADRd,WAAaa,gBAAgBxqI,OADfuqI,YAAYvqI,QACbwqI,GACLC,KAEHd,sBAAYI,a0BnKb2P,CAAcj0L,KAAK6hK,UAAW9mJ,IAAKK,QAFnC8oK,WAhBkB8P,eAgBlB9P,WACAI,MAjBkB0P,eAiBlB1P,MAII5kH,MAAU1/D,KAAKm0L,YAAYL,mBAAjB,GAAAz4K,OAAwCs/E,YAAxC,SAA4DupF,YAAtExkH,O1BgNU,SAAb00H,WAAc10H,MAAO4kH,MAAO13K,OAAQvR,MAC7C,IAAMg5L,QAAUjP,eAAe/pL,MAC3Bg5L,SACAA,QAAQ30H,MAAO4kH,MAAO13K,Q0BjNtBwnL,CAAW10H,MAAO4kH,OAASv8J,sBAAYinI,eAA7B,GAAA3zI,OAA0CN,IAA1C,KAAAM,OAAiDD,SAzDxC,SAArBk5K,mBAAsB50H,OAExBA,MAAMn6B,KAAK,SAAUo7B,MACjBA,KAAKwnF,YAAY/kD,OAAOpjG,QAuDxBs0L,CAAmB50H,OAEnBA,MAAMxO,OAAO3rB,KAAK,SAACo7B,MACfA,KAAKwnF,YAAY3iH,WAGrBs9I,2BAAapjH,MAAOsvF,OAAQj0I,IAAKK,wDAGxB2W,MAAOmN,UAAW40I,SAC3B,IAAM9xE,MAAQhb,YAAYj1D,MAAO,SAAU,UAAlB,GAAA1W,OAAgC6jB,UAAhC,WACnB2C,KAAOmlD,YAAYgb,MAAO,SAAU,UAAlB,GAAA3mF,OAAgC6jB,UAAhC,UAClB1kB,KAAOwsE,YAAYnlD,KAAM,KAAMiyI,QAAb,GAAAz4J,OAAyB6jB,UAAzB,QAIxB,OAAS8iE,YAAOngE,UAAMrnB,UAAMklD,MAHdsnB,YAAYxsE,KAAM,KAAM,SAAC3hB,EAAGN,GAAJ,OAAUM,EAAEma,OAAO,SAAAvY,GAAC,OAAU,OAANA,IAAYwN,IAAI,SAAAxN,GAAC,OAClD0tJ,YAAa1tJ,EAAG2vI,SAAU7xI,MAD9B,GAAA8iB,OACwC6jB,UADxC,UAC4D,SAAAplC,KAAG,OAAIA,IAAIquJ,YAAYrxH,wCAK1GC,WACF/2B,KAAKu0L,aAAax9J,WAAaT,SAASgB,eAAet3B,KAAK4hK,iEAGjDlhJ,QAIX,OAHA1gB,KAAKlH,KAAK4nB,OAAO5nB,MACjBkH,KAAKylG,SAAS/kF,OAAO9T,OAAOmb,YAC5B/nB,KAAK6sL,UAAUnsK,QACR1gB,iDAGA0gB,QACP1gB,KAAK6hK,UAAYnhJ,OAAOmhJ,UACxB7hK,KAAK0gB,OAASA,OACd1gB,KAAK07C,OAAOh7B,OAAO9T,OAAO8uC,QAC1B17C,KAAKygC,SxCoIM,OwCnIXzgC,KAAKk/B,UAAUxe,OAAO9T,OAAOsyB,6xCC5FrC,IAAMs1J,iCAAoB,SAApBA,kBAAqBntK,KAAMszE,YAAa85F,cAAep5L,MACzDyrF,6BAAcz/D,MACG0pC,UADjB,IAAA11C,OAC+Bs/E,YAD/B,UAEiBvgG,SAASiB,KAAMo5L,gBAwBfC,sDAEjB,SAAAA,cAAah0K,QAAQ,IAAAjM,MAAA,mKAAAkgL,CAAA30L,KAAA00L,gBACjBjgL,MAAAmgL,yCAAA50L,KAAA60L,8BAAAH,eAAAh8L,KAAAsH,KAAM0gB,OAAO5nB,KAAM4nB,OAAO9T,OAAOmb,WAAY,KACxCylJ,kBACL/4J,MAAKo4K,UAAUnsK,QAHEjM,6YAFkB83K,gUAcnC,IALA,IAAIzyJ,OAAS,EACTD,MAAQ,EAFAi7J,sBAGmC90L,KAAK6hK,UAAUiP,WAAtDC,iBAHI+jB,sBAGJ/jB,iBAAkBsQ,iBAHdyT,sBAGczT,iBACpB9E,WAAav8K,KAAK6hK,UAAU0a,aAEzBhkL,EAAI,EAAGA,EAAI,EAAGA,IAAK,CAClByH,KAAKwtK,eAAe9rK,QAAU1B,KAAKwtK,eAAej1K,aAAcsQ,QAClE7I,KAAKwtK,eAAej1K,OAExB,IAAK,IAAIsiB,EAAI,EAAGA,EAAI,EAAGA,IAAK,CACxB,IAAMk6K,WAAcj7J,OAAQunJ,iBAAiBW,WAAWzpL,GAAIshC,MAAOwnJ,iBAAiBU,UAAUlnK,IACxF0/B,OAASw2H,iBAAiB1/B,SAAjB,GAAAh2H,OAA6Bg3J,iBAAiB95K,KAAMsiB,GAC7Dm6K,WAAU,GAAA35K,OAAMg3J,iBAAiB95K,GAAvB,KAAA8iB,OAA6Bk3J,oBAAoB13J,IAC3DizI,cACF/lI,WAAYgtK,UACZ/lC,OAAQqyB,iBAAiBryB,OACzBr0D,YAAa36F,KAAK0gB,OAAO9T,OAAO+tF,YAChC4hF,sBACAxhK,IAAKs3J,iBAAiB95K,GACtB6iB,OAAQP,GAEZ,GAAI7a,KAAKwtK,eAAej1K,GAAGsiB,aAAc0xK,cACrCvsL,KAAKwtK,eAAej1K,GAAGsiB,GAAGo6K,eACtBn8L,KAAMk8L,WACNnzB,UAAWtnH,OACX3tC,OAAQkhJ,mBAET,CACH,IAAMonC,cAAgB,IAAIzB,kCACtB36L,KAAMk8L,WACNnzB,UAAWtnH,OACX3tC,OAAQkhJ,eAEZ9tJ,KAAKwtK,eAAej1K,GAAG2N,KAAKgvL,eAEtB,IAAN38L,IACAshC,OAASk7J,UAAUl7J,OAEb,IAANhf,IACAif,QAAUi7J,UAAUj7J,SAIhC95B,KAAKylG,UAAW3rE,cAAQD,cAExB75B,KAAK6hK,UAAY7hK,KAAKwtK,eACtBxtK,KAAKm1L,cAAgBn1L,KAAKwtK,2EAI1B,OAAIpoK,UAAQ1D,QACR1B,KAAKo1L,kBAALhwL,UAAA1D,QAAA,OAAA4L,EAAAlI,UAAA,GACOpF,MAEJA,KAAKo1L,sFAUQ,IAAAzgL,OAAA3U,KAuBpB,OAtBA8mF,6BAAa,IAAAzrE,OAAKrb,KAAK6hK,UAAU,GAAG,GAAGD,aACtBl2F,GAAG,QAAS,WACT,IAAMmM,MAAQwQ,0BAEVgtG,YAEAx9G,MAFAw9G,YACAC,YACAz9G,MADAy9G,YAIJz9G,MAAM8G,iBACN9G,MAAM1iD,kBAGc,IAAhBkgK,aAAqBxxL,KAAKsnB,IAAIkqK,aAAexxL,KAAKsnB,IAAImqK,cACtD3gL,OAAK4gL,mBAAmBC,uBAAuB,aAAcH,aAI7C,IAAhBC,aAAqBzxL,KAAKsnB,IAAIkqK,aAAexxL,KAAKsnB,IAAImqK,cACtD3gL,OAAK4gL,mBAAmBC,uBAAuB,WAAYF,eAG5Et1L,qEAGUu7F,UAAWk6F,WAE5B,OApHoB,SAAtBC,oBAAuBjD,SAAU/3J,SACnC,IAAMigE,YAAcjgE,QAAQha,OAAO9T,OAAO+tF,YAE1C,OACI89D,WAAY,SAAAA,cACP,EAAG,EAAG,GAAG3vJ,QAAQ,SAAArO,GAAC,OACf+5L,iCAAiB,IAAAn5K,OAAKqf,QAAQmnI,UAAUpnK,GAAG,GAAGmnK,YAAcjnE,YAAa83F,SAAU,iBAE3F/5B,SAAU,SAAAA,YACL,EAAG,EAAG,GAAG5vJ,QAAQ,SAAArO,GAAC,OACf+5L,iCAAiB,IAAAn5K,OAAKqf,QAAQmnI,UAAU,GAAGpnK,GAAGmnK,YAAcjnE,YAAa83F,SAAU,iBAyG3FiD,CAAoBD,UAAWz1L,MAAMu7F,aAC9Bv7F,uDAGI,IAAA21L,sBACW31L,KAAK6hK,UAAU,GAAG,GAAGp8D,WAAnC/kE,IADGi1J,sBACHj1J,IAAKoD,KADF6xJ,sBACE7xJ,KADF0oJ,eAEexsL,KAAKylG,WAE/B,OACI/kE,QACAoD,UACAhK,OAPO0yJ,eAEH1yJ,OAMJD,MARO2yJ,eAEK3yJ,2DAULnZ,QAIX,OAHA1gB,KAAKlH,KAAK4nB,OAAO5nB,MACjBkH,KAAKylG,SAAS/kF,OAAO9T,OAAOmb,YAC5B/nB,KAAK6sL,UAAUnsK,QACR1gB,iDAGA0gB,QAMP,OALA1gB,KAAK6hK,UAAYnhJ,OAAOmhJ,UACxB7hK,KAAK0gB,OAASA,OACd1gB,KAAK07C,OAAOh7B,OAAO9T,OAAO8uC,QAC1B17C,KAAKk/B,UAAUxe,OAAO9T,OAAOsyB,WAC7Bl/B,KAAK41L,eACE51L,2qBC9Jf,IAAM61L,WACF9hC,OACI+hC,WAAY,YACZC,WAAY11B,cAEhBU,UACI+0B,WAAY,eACZC,WAAYz1B,mBAad01B,4CAAsB,SAAtBA,oBAAuBC,WAAYC,cAAeC,eACpD,IAAIl/J,QAAU,KAENioH,WAA6Bi3C,cAA7Bj3C,WAAYm8B,aAAiB8a,cAAjB9a,aAHkD+a,sBAInCP,UAAUI,YAArCH,WAJ8DM,sBAI9DN,WAAYC,WAJkDK,sBAIlDL,WACdr6I,QAAWA,OnEfC,UmEiBlB,GAAIwjG,WAAWlmI,SAAWkmI,WAAWlmI,QAAQ88K,YAAa,CACtD,IAAIO,aAAehb,aAAa4a,YAC1B/8K,OAASgmI,WAAWlmI,QAAQ88K,Y1CwMpB,Y0CtMdO,aAAep9L,OAAO4T,UAAWwpL,aAAlBC,sCACX37F,YAAa0gF,aAAa1gF,aACvBj/C,QACH4wH,UAAS,GAAAjxJ,OAAKg3J,iBAAiB,GAAtB,KAAAh3J,OAA4Bk3J,oBAAoB,IACzD9F,UAAWjM,kBACXthI,UAAW62J,WAAW72J,cAGToI,QACb+uJ,aAAa5pB,UAAY,KACzB4pB,aAAa/pB,UAAY,MAEzB+pB,aAAa/uJ,QAAUolE,sBACvB2pF,aAAa5pB,UAAY//D,qBAG7B,IAAM6pF,eACFz9L,KAAMm9L,WACNp0B,UAAW3oJ,OACXtM,OAAQypL,cAGNG,kBAAoBN,cAAc5oB,aAAa2oB,YAEjDh/J,QADAu/J,kBACUA,kBACCvB,cAAcsB,eAEf,IAAI9J,gCAAgB8J,eAGtC,OAAOt/J,SAuCLw/J,+CAAyB,SAAzBA,uBAA0BC,cAAeR,cAAeC,cAAeQ,MACzE,IACQtb,aAAiB8a,cAAjB9a,aACF3/H,QAAWA,OnE7FC,UmE8FVsmH,UAAcqZ,aAAdrZ,UACAqf,iBAAqBsV,KAAK7lB,WAA1BuQ,iBAEJY,qBAGAZ,iBAHAY,qBACAE,YAEAd,iBAFAc,YACAC,WACAf,iBADAe,WAT8EwU,sBAnCjE,SAAfC,aAAejqL,QAAM,OACvB8rJ,UACIoJ,cAAe,oBACfjoI,MAAO,YACPC,OAAQ,qBACRg9J,mBtE9Dc,SsE+DdC,YAAa,aACbC,SAAU,EACVC,SAA2B,UAAjBrqL,OAAO06B,MAAoB,EAAI,EACzC7G,SAAU7zB,OAAO06B,MACjBmlI,UAAWjgE,mBAEfisD,YACIqJ,cAAe,sBACfjoI,MAAO,qBACPi9J,mBtEzEa,QsE0EbC,YAAa,YACbj9J,OAAQ,YACRk9J,SAA2B,QAAjBpqL,OAAO06B,MAAkB,EAAI,EACvC2vJ,SAAU,EACVx2J,SAAU7zB,OAAO06B,MACjBmlI,UAAWhgE,qBA4BXoqF,CAAa70B,UAAU00B,gBAAgBA,eAFvC50B,cAZ8E80B,sBAY9E90B,cAAeg1B,mBAZ+DF,sBAY/DE,mBAAoBj9J,MAZ2C+8J,sBAY3C/8J,MAAOC,OAZoC88J,sBAYpC98J,OAAQk9J,SAZ4BJ,sBAY5BI,SAAUC,SAZkBL,sBAYlBK,SAC5DF,YAb8EH,sBAa9EG,YAAat2J,SAbiEm2J,sBAajEn2J,SAAUgsI,UAbuDmqB,sBAavDnqB,UAErB1kJ,YACFk6I,UAAWD,UAAUC,UACrB60B,mBAAoBzV,iBAAiB0V,aAAa,IAEhD3Z,SAAWuZ,KAAKpa,aAAama,eAC7BrI,YAAcpM,qBAAqB6U,oBACnCxI,WAAajN,iBAAiB0V,aAAa,GAgB3CR,eACFz9L,KAAMgpK,cACNl1J,OAhBiB3T,OAAO4T,UAAPypL,sCACjB37F,YAAa0gF,aAAa1gF,aACvBj/C,QACHy3I,yBAA0BmD,wCACnBt0B,WACHrnE,YAAa0gF,aAAa1gF,cAG9Bt/F,KAAMq7L,cACNpqB,UAAS,GAAAjxJ,OAAKg3J,iBAAiB2kB,UAAtB,KAAA37K,OAAmCk3J,oBAAoB0kB,WAChExqB,oBACAhsI,qBAMA1Y,YACI8R,MAAO9R,WAAW8R,OAClBC,OAAQ/R,WAAW+R,QACnBu0J,wBACAC,sBACAnM,wBACAC,wBAIFoU,kBAAoBN,cAAc5oB,aAAaxL,eAErD,OAAKsb,SAKDoZ,kBACmBA,kBACMvB,cAAcsB,eAEpB,IAAItD,gBAAgBsD,gBARvCC,mBAAqBA,kBAAkBhxJ,SAChC,OA4FF0xJ,8CAAwB,SAAxBA,sBAAyBhB,cAAeS,KAAMR,eAAtB,OACjCpiC,MAAOiiC,4CtErOU,QsEqOiBE,cAAeC,eACjDp1B,SAAUi1B,4CtErOW,WsEqOoBE,cAAeC,eACxDh0B,OA1EwB,SAAtBg1B,oBAAuBjB,cAAeC,eACxC,IAAIiB,cAAgB,KACZl4C,WAA0Ci3C,cAA1Cj3C,WAAYm8B,aAA8B8a,cAA9B9a,aAAcn9E,YAAgBi4F,cAAhBj4F,YAC5BxiD,QAAWA,OnExKC,UmE0KlB,GAAIwjG,WAAWwsC,SAAWxsC,WAAWwsC,QAAQhqL,OAAQ,CACjD,IAAM8pL,aAAe8K,wCAAKjb,aAAalZ,OAAWzmH,QAAQwiD,0BACpDq4F,eACFz9L,KtEtKU,SsEuKV+oK,UAAW3iB,WAAWwsC,QACtB9+K,OAAQ4+K,cAGNgL,kBAAoBN,cAAc5oB,atE3K1B,UsE8KV8pB,cADAZ,kBACgBA,kBACJvB,cAAcsB,eAEV,IAAIvJ,gCAAgBuJ,eAG5C,OAAOa,cAoDCD,CAAoBjB,cAAeC,eAC3CQ,KAzCsB,SAApBU,kBAAqBnB,cAAeC,cAAeQ,MACrD,IACMj7I,QAAWA,OnEzMC,UmE0MV2/H,aAAiB8a,cAAjB9a,aAQFkb,eACFz9L,KnErNY,OmEsNZ+oK,UAAW80B,KACX/pL,OATW0pL,wCACR56I,QACHqmH,WAAYsZ,aAAatZ,WACzBpnE,YAAa0gF,aAAa1gF,YAC1B5yE,YAAc+R,OAAQ,EAAGD,MAAO,MAO9B28J,kBAAoBN,cAAc5oB,anEzNxB,QmEgOhB,OANIkpB,kBACcA,kBACDvB,cAAcsB,eAEb,IAAI7B,6BAAc6B,eAoB9Bc,CAAkBnB,cAAeC,cAAeQ,MACtDW,kBAAmBb,+CtEnMC,WsEmMgCP,cAAeC,cAAeQ,MAClFY,oBAAqBd,+CtEnMC,asEmMkCP,cAAeC,cAAeQ,0SCrQnF,IAAMa,cAAb,WAEI,SAAAA,6KAAeC,CAAAz3L,KAAAw3L,eACXx3L,KAAK03L,wBACL13L,KAAK23L,uBAJb,sPAAAC,CAAAJ,gBAAA19L,IAAA,sBAAAN,MAAA,SAAAq+L,sBAQQ,OAAIzyL,UAAI1D,QACJ1B,KAAK03L,qBAALtyL,UAAA1D,QAAA,OAAA4L,EAAAlI,UAAA,GACOpF,MAEJA,KAAK03L,wBAZpB59L,IAAA,qBAAAN,MAAA,SAAAs+L,qBAgBQ,OAAI1yL,UAAI1D,QACJ1B,KAAK23L,oBAALvyL,UAAA1D,QAAA,OAAA4L,EAAAlI,UAAA,GACOpF,MAEJA,KAAK23L,uBApBpB79L,IAAA,gCAAAN,MAAA,SAAA64L,8BAuBmCh3L,KAAM+2L,iBACjCn5L,OAAOskB,OAAOvd,KAAK83L,sBAAsBhvL,QAAQ,SAACrO,GAC9CA,EAAEs9L,oBAAoB18L,KAAM+2L,sBAzBxCt4L,IAAA,yBAAAN,MAAA,SAAAg8L,uBA6B4Bn6L,KAAMi3L,OAC1BtyL,KAAK63L,sBAAsBx8L,OAAS2E,KAAK63L,sBAAsBx8L,MAAMo1L,cAAc6B,WA9B3FkF,cAAA,GC+CaQ,8BAAmB,SAAnBA,iBAAoBt9J,QAAS3I,OACtC,IAAIspJ,aAAe9tG,kBAAmB7yC,QAAQ9tB,UADEqrL,sBAGxBlmK,MAAM6rD,wBAAxB9jD,OAH0Cm+J,sBAG1Cn+J,OAAQD,MAHkCo+J,sBAGlCp+J,MACRq+J,WAAax9J,QAAQZ,SACrBq+J,UAAYz9J,QAAQb,QACpBu+J,SAAW19J,QAAQ0uD,cAAc41E,YANSq5B,sBAc5CD,SAAS5pC,kBANTrI,kBAR4CkyC,sBAQ5ClyC,kBACAD,eAT4CmyC,sBAS5CnyC,eACA1qE,SAV4C68G,sBAU5C78G,SACAhhE,KAX4C69K,sBAW5C79K,KACAjB,QAZ4C8+K,sBAY5C9+K,QACAgE,OAb4C86K,sBAa5C96K,OAb4C22F,gBAuB5Cx5E,QAAQ9tB,SAPRwvB,SAhB4C83E,gBAgB5C93E,SACAgmI,UAjB4CluD,gBAiB5CkuD,UACAznE,YAlB4CuZ,gBAkB5CvZ,YACA0xD,YAnB4Cn4C,gBAmB5Cm4C,YACA8V,OApB4CjuD,gBAoB5CiuD,OACAJ,WArB4C7tD,gBAqB5C6tD,WACAC,UAtB4C9tD,gBAsB5C8tD,UAIElB,YAAcpmI,QAAQq5H,QAAQ,GAE9BkN,eAAiBvmI,QAAQqmI,WAAW,GAEpCu3B,eAAiBn2B,OAAO1hI,SAExB83J,kB5BvEuB,SAApBC,kBAAqB99J,SAAY,IAAA+9J,cACpCjN,aAAe9wJ,QAAQ9tB,SAASu1J,OAChCrB,YAAcpmI,QAAQq5H,QAAQ,GAC9BkN,eAAiBvmI,QAAQqmI,WAAW,GACpC23B,cAAYC,kCAAAF,iBAAA,GAAAp9K,OACVmxF,kBADU,KAAAnxF,OACHmxF,oB5CcE,QACI,WAgCJ,U4ChDCmsF,kCAAAF,cAAA,GAAAp9K,OAEVkxF,qBAFU,KAAAlxF,OAEAkxF,uB5C8CD,QAhCI,WADJ,U4CfCosF,kCAAAF,cAAA,GAAAp9K,OAGVmxF,kBAHU,KAAAnxF,OAGHkxF,uB5CYE,QAiCA,QAhCI,a4ChBHosF,kCAAAF,cAAA,GAAAp9K,OAIVkxF,qBAJU,KAAAlxF,OAIAmxF,oB5CYG,WAgCJ,QAjCA,U4CfCisF,eAMZG,gB5CQY,SAmCA,oBAnCA,W4CJZC,cAAgB/3B,YAAYrgI,UAAY+rE,kBACxCssF,iBAAmB73B,eAAexgI,UAAY+rE,kBAEpD,OACIxzF,QAAS0/K,aAAY,GAAAr9K,OAAIw9K,cAAJ,KAAAx9K,OAAqBy9K,mBAC1CpN,QAASF,aAAa/qJ,WAAagsE,oBAAQ++E,aAAa/qJ,WAAa+rE,kBACrEosF,cAAc,GAAKA,cAAc,I4BmDXJ,CAAkB99J,SAE5CZ,OAASj2B,KAAK8M,MAAMmpB,QACpBD,MAAQh2B,KAAK8M,MAAMkpB,OAEnB,IAAMk/J,yBAA2Bl1L,KAAK6P,IAAIwkL,WAAa,EAAIA,WAAap+J,OAAQsoI,WAC1E42B,wBAA0Bn1L,KAAK6P,IAAIykL,UAAY,EAAIA,UAAYt+J,MAAOuC,UAtC5B68J,efoCvB,SAAhBnqC,cAAiBp0H,QAASw+J,aAAcC,aACjD,IAAIxN,aAAe,EACb3yK,WACA+nJ,SAAWrmI,QAAQqmI,WACnBq4B,WAAa3O,wCAA4B1pB,SAAS,IAsBxD,OApBAm4B,cAAgB,KAAOC,aAAe,MAAQ,QAAS,YAAYrwL,QAAQ,SAACzN,MACxE,IAAMg+L,cAAgB3+J,QAAQr/B,QACxBiiG,QAAUmtF,wCAA4B4O,cAAc,IAC1D,GAAI/7F,QAAQ57F,OAAQ,CAChB,IAAMkL,OAASysL,cAAc,GAE7BzsL,OAAOitB,MAAQa,QAAQb,QACvBjtB,OAAOktB,OAASY,QAAQZ,SACxBltB,OAAO+tF,YAAcjgE,QAAQ9tB,SAAS+tF,YACtC/tF,OAAO0wF,QAAUA,QACjB1wF,OAAOg0B,QAAoB,UAATvlC,MAAqB+9L,WAAW13L,OAAgCkL,OAAOg0B,QAA7BmgI,SAAS,GAAGngI,QAPxD,IAAA04J,eASSnO,cAAcv+K,OAAQvR,KAAMq/B,QAAQj/B,eAAe68B,WACxEoC,QAAO,GAAArf,OAAIhgB,KAAJ,UADHy+B,OATQw/J,eASRx/J,OAAQ6mC,KATA24H,eASA34H,KAGhB3nD,QAAO,GAAAqC,OAAIhgB,KAAJ,SAAkBslE,KACzBjmC,QAAQkzH,aAAavyJ,MAAQslE,KAC7BgrH,cAAgB7xJ,WAGf6xJ,0BAAc3yK,iBerBW81I,CAAcp0H,QAASq+J,yBAA0BC,yBAA3EhgL,QAzCwCigL,eAyCxCjgL,QAAS2yK,aAzC+BsN,eAyC/BtN,aAGXD,QdwEkB,SAAf6N,aAAgB7+J,QAASixJ,aAAc7xJ,OAAQD,OACxD,IAAMqkE,aACFpkE,cACAD,YACA8xJ,2BAEIxpB,OAAWznI,QAAQ9tB,SAAnBu1J,OACAplE,KAAmBolE,OAAnBplE,KAAMt8D,SAAa0hI,OAAb1hI,SAEd0hI,OAAOxnE,YAAcjgE,QAAQ9tB,SAAS+tF,YACtC,IAAMrzD,MAAS7G,WAAagsE,oBAAQhsE,WAAaisE,oB1D5G7B,WACE,a0D+GtB,OAFAy1D,OAAOplE,KAAOA,K1D9GM,a0D8GGz1D,OAAsBzN,MAAQ,K1D7G/B,e0D6GwCyN,OAAwBxN,OAAS,IAAQijE,KACvGolE,OAAO76H,MAAQA,MACRikJ,+BAAkBppB,OAAQznI,QAASwjE,YAAaxjE,QAAQgxJ,actF/C6N,CAAa7+J,QAASixJ,aAAcoN,yBAA0BC,yBAC9Et+J,QAAQkzH,aAAauU,UACrBupB,QAAQ5iL,QAAQ,SAACrO,GACbigC,QAAQkzH,aAAauU,OAAO1nK,EAAEi6J,WAAaj6J,EAAE0nK,SAGjD,IAAMirB,Yd2BoB,SAAjBoM,eAAkB9N,QAASF,aAAcnR,gBAAiBjB,gBACnE,IACMgU,aAAgBvzJ,MAAO,EAAGC,OAAQ,GA2BxC,OA5BuB4xJ,QAAQzjL,IAAI,SAAA2jL,YAAU,OAAIA,WAAWzpB,OAAOjkE,gBAGpDp1F,QAAQ,SAACisE,OACpB,IAAIj7C,OACAD,MACJA,MAAQh2B,KAAK2P,IAAIuhE,MAAMl7C,MAAOk7C,MAAM95C,UACpCnB,OAASj2B,KAAK2P,IAAIuhE,MAAMj7C,OAAQi7C,MAAM75C,W1DlEpB,e0DoEdswJ,aAAalkJ,MACT8lJ,YAAYvzJ,MAAQA,MAAQu/I,gBAC5BgU,YAAYvzJ,MAAQu/I,eACpBgU,YAAYtzJ,QAAUA,SAEtBszJ,YAAYvzJ,OAASA,MACrBuzJ,YAAYtzJ,OAASj2B,KAAK6P,IAAI05K,YAAYtzJ,OAAQA,SAE/CszJ,YAAYtzJ,OAASA,OAASugJ,iBACrC+S,YAAYtzJ,OAASA,OACrBszJ,YAAYvzJ,OAASA,QAErBuzJ,YAAYtzJ,QAAUA,OACtBszJ,YAAYvzJ,MAAQh2B,KAAK6P,IAAI05K,YAAYvzJ,MAAOA,U1DjFlC,e0DoFlB2xJ,aAAalkJ,QACb8lJ,YAAYvzJ,MAAQu/I,gBAEjBgU,YcxDaoM,CAAe9N,QAASvpB,OAAQ42B,yBAA0BC,yBACxEjL,YAAeuK,iBAAmB7rF,oBAAQ6rF,iBAAmB5rF,oBAAS0gF,YAAYvzJ,MAAQ,EAC1Fi0J,aAAgBwK,iBAAmB9rF,mBAAO8rF,iBAAmB/rF,qBAAU6gF,YAAYtzJ,OAAS,EAG5FolH,YACFlmI,gBACA0yK,gBACA7sB,UAAWnkI,SACXlgB,UACAjB,gBACAgE,cACAsxI,eAAgBupC,SAASvpC,kBAGvB3wD,aACFu7F,YACI3/J,cACAD,aAEJ8xJ,0BACAyB,wBACA+L,YAAaH,wBACbE,aAAcH,yBACdl/J,MAAOm/J,wBAA0BjL,YACjCj0J,OAAQi/J,yBAA2BpN,aAAemC,aAClD7b,cAAev3I,QAAQu3I,gBACvBD,aAAct3I,QAAQs3I,gBAiB1B,OACIqJ,aAhBJA,aAAe9tG,eAAe8tG,cAC1B1gF,wBACA0xD,wBACA2C,OAAQzhF,eAAe6qH,SAASrpC,WAAWC,OAAQt0H,QAAQ9tB,SAASoiJ,QACpEupC,oCACAp2B,cACA/qG,OAAQ4qG,UAAUC,UAClBF,sBACAhO,MAAO+M,YACPC,SAAUE,eACV9a,oCACAD,8BACAn0H,YACAypD,oBAIA0jE,sBACAhhD,0BAIFw7F,kBACF3lC,MAAO,EACPgN,SAAU,EACVoB,OAAQ,EACRm1B,kBAAmB,EACnBC,oBAAqB,EACrBZ,KAAM,GA0CGgD,0BAAe,SAAfA,aAAgB56B,OAAQo3B,eACjC,IAAMD,cAAgBn3B,OAAO66B,eACvBC,WAAa96B,OAAO8R,SAGtB8lB,KACA+C,iBADA/C,KAIEmD,aAAe5C,8CAAsBhB,cAAe2D,WAAY1D,eAChE4D,kBAAoB9gM,OAAO6M,KAAK4zL,kBAAkBzxL,IAAI,SAAAxN,GAAC,OAAIq/L,aAAar/L,KACxEu/L,YAAcD,kBAAkBpD,OA1Cd,SAAtBsD,oBAAuBF,kBAAmBh7B,QAAW,IAGnDu4B,kBAEAoC,iBAFApC,kBACAX,KACA+C,iBADA/C,KAGEuD,wBAA0BH,kBAF5BL,iBAHAnC,qBAME4C,sBAAwBJ,kBAAkBzC,mBAC1C0C,YAAcD,kBAAkBpD,MAChCpB,iBAAmB,IAAIiC,cACvBK,uBAENsC,wBAA0BtC,oBAAoBn/B,SAAWyhC,uBACzDD,0BAA4BrC,oBAAoBp/B,WAAayhC,yBAE7D3E,iBACiBsC,oBAAoBA,qBACpBC,oBACGnB,KAAMqD,cAE1Bj7B,OAAO31E,cAAcgxG,WAAaF,wBAClCn7B,OAAO31E,cAAcixG,WAAaF,uBAEjCD,wBAAyBC,uBAAuBrxL,QAAQ,SAACmuB,SACtDA,SAAWA,QAAQg5J,QAAQsF,oBAG/ByE,YAAYzE,iBAAiBA,kBAe7B0E,CAAoBF,kBAAmBh7B,QAEvCm3B,cAAcoE,mBAAmBP,mBAAmB1qB,UACpD2qB,YAAYO,6wDCxMhB,IAAMC,0BAA2B,SAA3BA,yBAA4B/oD,YAAap9C,UAAa,IAAA1hE,KAAA+1C,MAClD+xH,UAAY,SAAZA,UAAYnvL,OAAK,OAAIA,MAAMjQ,SAAW8D,yBAAUC,SAEhD4/J,YADS3qE,SAAS35D,QACG0uD,cAAc41E,YACnCrrE,SAAUhhE,SAAGtX,OAAH9T,MAAAorB,KAAA+nK,iCAAa17B,YAAY27B,qBAAqB,OACxD/mG,SAAUlrB,UAAGrtD,OAAH9T,MAAAmhE,MAAAgyH,iCAAa17B,YAAY27B,qBAAqB,OACxDC,OAASjnG,QAAQj2E,MAAM,SAAApS,OAAK,OAAIA,MAAMjQ,SAAW8D,yBAAUE,YAC3Dw7L,SAAW77B,YAAYrvI,WAAW9K,eAClCw+H,UAAYw3C,SAASx3C,UACrBC,UAAYu3C,SAASv3C,UAC3B7R,YAAYlsG,KAAK,SAACo7B,MACd,IAAM+wG,aAAe/wG,KAAK/iD,UAAUy2E,WACpC,IAAMV,QAAQj2E,MAAM+8K,aAAc7mG,QAAQl2E,MAAM+8K,WAAa,CACzD,IAGIv/C,WAHElM,YAAcruE,KAAK/iD,UAAUu9H,gBAAgB,GAC7C2/C,cAAgB9rD,YAAYh8H,OAAO,SAAAna,GAAC,OAA+C,IAA3CyqJ,UAAU/9H,UAAU,SAAA3b,GAAC,OAAIA,EAAEmxL,OAAOliM,OAC1EmiM,cAAgBhsD,YAAYh8H,OAAO,SAAAna,GAAC,OAA+C,IAA3CwqJ,UAAU99H,UAAU,SAAA3b,GAAC,OAAIA,EAAEmxL,OAAOliM,OAG5EqiJ,WADA0/C,OACaE,cAAc7yL,IAAI,SAAApP,GAAC,SAAAwiB,OAAOxiB,KAE1BmiM,cAAc/yL,IAAI,SAAApP,GAAC,SAAAwiB,OAAOxiB,KAG3C64K,aAAaupB,cAAc,IAAK//C,YAAY,OAKlDggD,gCACF9qG,YACI6vE,IAAK,SAAA9/I,EAAC+/I,mBAAoBxlI,SACtB,IAAMygK,uBAAyBj7B,mBAAmBnlB,aAC5CwW,YAAc72H,QAAQsgH,cAC5B,OAAOmgD,wBAAyB5pC,cAAgB4pC,yBAGxDtuG,aACI8L,QAAS,SAAAA,QAACunE,mBAAoBxlI,SAC1B,IAAM0gK,gBAAkBl7B,mBAAmBplB,WACrCqlB,kBAAoBD,mBAAmBnlB,aACvCuB,OAAS5hH,QAAQ5D,KACjBy6H,YAAc72H,QAAQsgH,cAC5B,OAAImlB,oBACOA,oBAAsB5O,aAAqBjV,SAAW8+C,oBCpD9DC,oCD0EX,SAAAA,gBAAwB,IAAAr2F,iBAAAvwF,mKAAA6mL,CAAAt7L,KAAAq7L,eAAA,QAAAx0H,KAAAzhE,UAAA1D,OAARgf,OAAQ,IAAA7X,MAAAg+D,MAAAC,KAAA,EAAAA,KAAAD,KAAAC,OAARpmD,OAAQomD,MAAA1hE,UAAA0hE,MAAA,OACpBryD,MAAA8mL,yCAAAv7L,MAAAglG,iBAAAw2F,8BAAAH,gBAAA3iM,KAAA6O,MAAAy9F,kBAAAhlG,MAAAqb,OAASqF,WACJ8wJ,mBAAqB/8J,MAAKuQ,YAAYw1K,2BAC3C/lL,MAAK2rJ,uBAAuB3rJ,MAAKuQ,YAAYk2K,iCAHzBzmL,6YADey5E,8UAgBnC,OAAI9oF,UAAO1D,QACP1B,KAAKwxK,oBAAqBpsK,UAAA1D,QAAA,OAAA4L,EAAAlI,UAAA,KAAapF,KAAKglB,YAAYw1K,2BACjDx6L,MAEJA,KAAKwxK,2FAGmB,IAAA78J,OAAA3U,KAC/B,GAAIoF,UAAO1D,OAAQ,CACf1B,KAAKyxK,wBAA0BlkG,eAAeA,kBAC1CvtE,KAAKglB,YAAYk2K,kCAAkC91L,UAAA1D,QAAA,OAAA4L,EAAAlI,UAAA,SACvD,IAAMs1B,QAAU16B,KAAK06B,QAKrB,OAJA42I,uBAAuBtxK,MACvB06B,QAAQwkI,WAAWt0D,2BAA2Bn7C,aAAYG,gBAAiB,WACvE0hH,uBAAuB38J,UAEpB3U,KAEX,OAAOA,KAAKyxK,oFA8CGzgF,UAAW9mE,SAC1B,IAAMiwH,YAAclhJ,OAAO4T,OAAOqd,SAC5BxN,SAAWy9H,YAAYz9H,SACvB3R,KAAO/K,KAAK06B,QAAQ0uD,cAAc41E,YAAYqtB,iBAC9CjvK,aAAerS,KAAKsS,kBACpBlB,MAAQqyD,yCAA4BzjE,KAAM2R,UAC1C++K,kBAAoBz7L,KAAKyuF,SAASC,YAAYsC,WAEpD,GAAIyqG,kBAAmB,CACnB,IACMC,aADSluK,eAAe9Q,UAAYzjB,OAAO6M,KAAK4W,UAAaA,SAAWA,SAAS,OAC5D1J,OAAO,SAAA1H,OAAK,OAAIA,SAAS8R,eAC9Cm0E,QAAUkqG,kBAAkBz2K,YAAYusE,UACxCxuE,YACFmH,QAASiwH,YACT/3H,OAAQ4uE,UACRt0E,SAAUP,MACVyF,SAAU5hB,KAAK06B,QAAQg2F,QACvBzmG,gBAAiBsnE,QACjB1vE,4BAA6B65K,YAAYh+K,MAAM,SAAApS,OAAK,OAAI8R,aAAa9R,OAAOkS,IAAIniB,OAC5E8D,yBAAUC,WAElB2L,KAAK2mF,UAAUv1E,MAAO4G,YAAY,GAEtC,OAAO/iB,qEAGU6sF,aACjB,IAAK,IAAM/yF,OAAO+yF,YACd7sF,KAAKsuF,uBAAuBzB,YAAY/yF,KAAKwwF,cAAgBuC,YAAY/yF,KAE7E,OAAOkG,mFAtGP,OAAOw6L,gHAIP,OAAOU,oDEvFFS,mBACTC,KACI39I,SACA0sF,SACA1wC,UACA8kE,WAEJ7vF,OACI6vF,UACA9gH,SACA0sF,SACA1wC,olDCsBa4hG,4CAUjB,SAAAA,OAAaC,oBAAoB,IAAArnL,2JAAAsnL,CAAA/7L,KAAA67L,SAC7BpnL,wKAAAunL,CAAAh8L,KAAAi8L,sBAAAJ,QAAAnjM,KAAAsH,QAEKmwK,YAAcl3K,OAAO4T,UAAWlG,YAASi3I,cAC9CnpI,MAAKy1I,aACLz1I,MAAKm5I,gBACLn5I,MAAKi8J,gBACLj8J,MAAKg9G,OAAS,KACdh9G,MAAKs/H,iBAAmB,KACxBt/H,MAAKq/H,iBAAmB,IAAIttD,QAAQ,SAACn+D,SACjC5T,MAAKs/H,iBAAmB1rH,UAE5B5T,MAAKm5I,aAAaijB,OAAS,IAAIiO,kBAC/BrqK,MAAKo8G,OAAS,IAAIvlD,mBAAMqwH,mBAExBlnL,MAAKyqJ,WAAa,IAAI5zF,6LAAJ4wH,IACbzsI,aAAYG,gBAAiB,IAIlC,IAAMub,UAAY0/B,0BAAiBx7C,uBAC1B1mD,MArBoBwzL,qBAqBXtwH,wBAAWuwH,0DAAA3nL,QAAM9N,YAAS8N,MAAKo8G,OAAO10G,OACpDgvD,sBAtByB,aAwB7BU,wBAAWuwH,0DAAA3nL,QAAMmpI,aAAcj1I,OAC3BwiE,sBAEJU,wBAAWuwH,0DAAA3nL,QAAMksJ,cAAeh4J,OAC5BwiE,sBAGJ12D,MAAKhZ,aAAaxC,OAAO4T,UAAWivL,mBAAoBrnL,MAAK8hG,gBAC7D9hG,MAAK4/E,SAAS,IAAIgnG,gBAAJe,0DAAA3nL,SACVi6E,YAAakE,4BACbjE,SAAUyE,gBACVvD,2BACDhD,6BAAauB,0CAChB35E,MAAKi8G,MAAL,UAAAr1G,OAAqB/Q,gBACrBmK,MAAKs/I,MAAM,OACXt/I,MAAKssJ,SAAS,OACdtsJ,MAAK0tJ,WACL1tJ,MAAK+9B,UACL/9B,MAAK8rF,UACL9rF,MAAKikB,SACLu3I,2BAAoBmsB,0DAAA3nL,SAEpBA,MAAKmlL,eAAiB/nB,6BA9COp9J,sXAVD6wK,8SAoE5B,OAAIlgL,UAAO1D,OACA1B,KAEJA,KAAKopF,cAAcynF,yDAoB1B,OAAIzrK,UAAO1D,OACA1B,KAEJA,KAAK4tJ,iDAIZ,OAAO5tJ,KAAK8zI,uDAkBZ,GAAI1uI,UAAO1D,OAAQ,CACf,IAAMs9J,YAAch/J,KAAKopF,cAAc41E,YAGvC,OAFAh/J,KAAKyxH,OAALrsH,UAAA1D,QAAA,OAAA4L,EAAAlI,UAAA,GACA45J,aAAeA,YAAYtuC,MAAM1wH,KAAK0wH,SAC/B1wH,KAEX,OAAOA,KAAKyxH,mDA4CZ,OAAIrsH,UAAS1D,QACT1B,KAAK69I,UAALz4I,UAAA1D,QAAA,OAAA4L,EAAAlI,UAAA,GACOpF,MAEJA,KAAK69I,sDASK,QAAAh3E,KAAAzhE,UAAA1D,OAARgf,OAAQ,IAAA7X,MAAAg+D,MAAAC,KAAA,EAAAA,KAAAD,KAAAC,OAARpmD,OAAQomD,MAAA1hE,UAAA0hE,MACjB,GAAIpmD,OAAOhf,OAAQ,CACf,IAAMw9I,WAAajmJ,OAAO4T,UAAW6T,OAAO,GAAGw+H,YACzCwQ,qBAAuBz2J,OAAO4T,UAAW6T,OAAO,GAAGgvI,sBAEzD1vJ,KAAKkqJ,WAAchL,sBAAYwQ,2CAC/B,IAAM2sC,iBlD3MQ,SAAbC,WAAc5hK,SAGvB,OAAQ,IAFIA,QAAQwvH,UAAUhL,WAEdoQ,YAAY50H,QAAQwvH,UAAWjxJ,OAAO4T,QAClD+iH,UAAWl1F,QAAQwkI,YACpBxkI,QAAQj/B,kBkDsMsB6gM,CAAWt8L,MAKpC,OAHAA,KAAK4tJ,aAAaoR,YAAcq9B,iBAAiB,GlDO7B,SAAnBE,iBAAoB7hK,SAAY,IAAA8hK,uBAAAC,4BACPntC,aAAYr+B,WADL,GAClCD,YADkCwrE,uBAAA,GACrBE,WADqBF,uBAAA,GAEnC7zL,MAAQ+xB,QAAQm2F,OACtBloH,MAAMuqB,OAAO,YAAa89F,aAC1BroH,MAAMuqB,OAAO,cAAewpK,YkDVpBH,CAAiBv8L,MACjBA,KAAKopF,cAAc41E,YAAYtuC,MAAM1wH,KAAK0wH,SAAS/nH,MAAM3I,KAAK6wH,QACvD7wH,KAEX,OAAOA,KAAKkqJ,8DAOZ,OAAI9kJ,UAAM1D,QACN1B,KAAKu2G,cAALnxG,UAAA1D,QAAA,OAAA4L,EAAAlI,UAAA,GACOpF,MAGJA,KAAKu2G,0DAULvrB,YACP,IAAMuyD,iBAAmBv9I,KAAKvE,eAAe8hJ,iBAC7C,OAAIvyD,YACAuyD,iBAAiBo/C,SAAS3xG,YACnBhrF,MAEJu9I,yDAUP,OAAIn4I,UAAO1D,OACA1B,KAEJA,KAAKopF,cAAc+4E,yCAmBxB33I,WAEF,OADyBxqB,KAAKvE,eAAe8hJ,iBACrB3yD,SAASpgE,mDASjC,IAAMuH,MAAQ/xB,KAAK+xB,QAEbwrH,iBAAmBv9I,KAAKvE,eAAe8hJ,iBAEvC44C,cAAgB6B,8BAAiBh4L,KAAM+xB,OAC7CwrH,iBAAiBvG,QAASzsD,OAAQvqF,KAAMoiB,OAAQ,eJ/R3B,SAAhBw6K,cAAiB/rB,OAAQslB,eAAkB,IAC5Cj3C,WAA0Ci3C,cAA1Cj3C,WAAYm8B,aAA8B8a,cAA9B9a,aAAcn9E,YAAgBi4F,cAAhBj4F,YAE9B1jF,KAIA0kI,WAJA1kI,KACAjB,QAGA2lI,WAHA3lI,QACAgE,OAEA2hI,WAFA3hI,OACAsxI,eACA3P,WADA2P,eAGAjC,QAIAiC,eAJAjC,QACAC,SAGAgC,eAHAhC,SACAX,WAEA2C,eAFA3C,WACAC,YACA0C,eADA1C,YAEA3xI,MAAQjB,SACRs3J,OAAO3yE,YAAYA,aACFtxF,OAAOyuK,cACPhqC,UACG3wG,KAAMksH,QAASrzI,QAAQ,GAAIszI,UAC3Bh8F,QAASr2C,KAAK,GAAI+C,OAAQ/C,KAAK,IAC/Bs1C,QAASo8F,WAAY3yI,QAAQ,GAAI4yI,eAEpC0wC,gBI2QjBD,CAAc58L,KAAK6wK,SAAUslB,eAE7Bn2L,KAAK45L,eAAe98F,WAChBhjE,OAAQq8J,cAAcj4F,YAAYg7F,aAClCr/J,MAAOs8J,cAAcj4F,YAAYi7F,cAGrCn5L,KAAK45L,eAAeh4B,SAAS7vI,OAG7B4nK,0BAAa35L,KAAMm2L,elD7RS,SAAvB2G,qBAAwBpiK,SACjC,IAAMw7J,cAAgBx7J,QAAQk/J,eACxBn0F,SAAWywF,cAAc5oB,aAAa,QAAQyvB,cAC9CtrD,YAAc/2G,QAAQ0uD,cAAc41E,YAAYC,iBAAiBzlK,MACjEw+B,gBAAkB8uD,6BAAa,IAAAzrE,OAAK66K,cAAc8G,kBAAmBluK,OAC3E2iH,YAAYlsG,KAAK,SAACo7B,MACdA,KAAK/iD,UAAUmhI,oBACX58C,GAAInqE,gBACJjQ,WAAY09E,akDuRhBq3F,CAAqB98L,MlDnHU,SAA1Bi9L,wBAA2BviK,SACpC,IAAIw0E,SAAW,EAETo7B,MAAQ5vG,QAAQ4vG,aAEtB,WACI,IAAK,IAAI/xI,EAAI,EAAGA,EAAI+xI,MAAM5oI,OAAQnJ,IAC9B,IAAK,IAAIsiB,EAAI,EAAGA,EAAIyvH,MAAM/xI,GAAGmJ,OAAQmZ,IAAK,CACtC,IAAMqiL,YAAc5yD,MAAM/xI,GAAGsiB,GAAGg1F,eAAeZ,OAAOC,SACtD,GAAIguF,aAA+B,IAAhBA,YAEf,YADAhuF,SAAWguF,cAL3B,GAYIhuF,UACAo7B,MAAMxhI,QAAQ,SAAC2tF,MACXA,KAAK3tF,QAAQ,SAAConD,MACVA,KAAK2/C,cAAeZ,QAAUC,qBAC9Bh/C,KAAKi/C,WAAWj/C,KAAKinD,qBkDiG7B8lF,CAAwBj9L,4CAmBxB,OAAOA,KAAKopF,cAAc41E,YAAYm+B,QAAQ,2CAkB9C,OAAOn9L,KAAKopF,cAAc41E,YAAYm+B,QAAQ,6DAkB9C,OADoBn9L,KAAKopF,cAAc41E,YACpBm+B,Q5EvTJ,iD4E2Tf,GAAI/3L,UAAO1D,OAAQ,CACf,IAAIlI,MAAK4L,UAAA1D,QAAA,OAAA4L,EAAAlI,UAAA,GAKT,MAJyB,iBAArBA,UAAA1D,QAAA,OAAA4L,EAAAlI,UAAA,MACA5L,MAAQstF,6BAAa1hF,UAAA1D,QAAA,OAAA4L,EAAAlI,UAAA,IAAY0pB,QAErC9uB,KAAK+hG,OAASvoG,MACPwG,KAEX,OAAOA,KAAK+hG,2DA1NKq7F,gBAAiBC,SAAUvB,oBAC5C,IAAMpsF,SAAW,IAAImsF,OAAOC,oBAE5B,IAAK,IAAMhiM,OAAOsjM,gBACd1tF,SAAS51G,KAAKsjM,gBAAgBtjM,MAIlC,OADA41G,SAAShF,SAAS2yF,UACX3tF,yDAWP,MAAO,uBCrLF4tF,YACThuC,yBACAlS,mCAESmgD,eACTluC,2BACA/lD,cCTW,WACX,IAAMo5B,IAAMgB,eACN85D,QACF/rL,IAAK,SAAAA,IAAC3X,IAAK0jB,KAEP,OADAklH,IAAI5oI,KAAO0jB,IACJggL,QAEXpkM,IAAK,SAAAA,MAAA,OAAMspI,MAEf,OAAO86D,wjBCuBX,IAAMC,eACAC,gBAAkBJ,WAElBK,4BAA8B,SAA9BA,4BAA+BC,iBAAkBlzF,UACnD,IAAK,IAAMn4E,QAAQqrK,iBACflzF,SAASj5F,IAAI8gB,KAAMqrK,iBAAiBrrK,QA+BtCsrK,UAAO,SAAPA,OAAa,IAAAC,aAAAC,mBAEYlyH,2BAAellE,aAF3B,GAERq3L,IAFQF,aAAA,GAEHG,YAFGH,aAAA,GAGT5+C,WAAajmJ,OAAO4T,UAAWywL,YAC/BY,wBAA0BjlM,OAAO4T,OAAO0wL,eACxC7tC,wBAEN,IAAK,IAAMn9H,QAAQ2rK,wBACfxuC,qBAAqBn9H,MAAQ2rK,wBAAwB3rK,QAgEzD,OA5DAyrK,IAAIj/B,OAAS,WAET,IAAMo/B,SAAWF,YAAYryK,YACvBmzI,OAAS88B,cAAOuC,aAAaD,UAC/Bj/C,sBACAwQ,2CACDsuC,IAAIlC,sBAKP,OzWgyByB,SAA3BuC,yBAA4BC,iBAAkBC,oBAAqBC,kBACrEA,iBAAiB11L,QAAQ,SAAAkB,MAAI,OAAIs0L,iBAAiB5yH,GAAG1hE,KAAM,SAAA6Y,OAAA,IAAIqqD,OAAJlF,eAAAnlD,MAAA,aAAgB07K,oBAAoBv0L,MAAMkjE,YyWnyBjGmxH,CAAyBJ,YAAal/B,OAAQ9lK,OAAO6M,KAAKq4L,WAEnDp/B,QAIXi/B,IAAIlC,mBAAqB,WAIrB,OAHK2B,YAAYnlK,aACbmlK,YAAYnlK,WAAa,IAAImmK,4BAAW,EAAG,UAG3CnmK,WAAYmlK,YAAYnlK,WACxBilH,iBAAkB,IAAI/zD,oBAM9Bw0G,IAAIG,SAAW,kBAAMF,YAAYryK,aAEjCoyK,IAAItzF,SAAW,WAAyB,QAAA7jC,KAAAzhE,UAAA1D,OAArBk8L,iBAAqB,IAAA/0L,MAAAg+D,MAAAC,KAAA,EAAAA,KAAAD,KAAAC,OAArB82H,iBAAqB92H,MAAA1hE,UAAA0hE,MAEpC,GAAI82H,iBAAiBl8L,OAAQ,CACzB,IAAK,IAAM6wB,SAAQqrK,iBACXrrK,SAAQmrK,kBACRx+C,WAAW3sH,OAAQqrK,iBAAiBrrK,QAG5C,OAAOyrK,IAEX,OAAO9+C,YAGX8+C,IAAI3uC,aAAe,WACf,IAAMA,aAAeK,qBAAqBL,aAC1C,OAAIjqJ,UAAiB1D,QACjBi8L,4BAA2Bv4L,UAAA1D,QAAA,OAAA4L,EAAAlI,UAAA,GAAsBiqJ,cAC1C2uC,KAEJ3uC,aAAaj2J,OAGxB4kM,IAAI10F,cAAgB,WAChB,IAAMA,cAAgBomD,qBAAqBpmD,cAC3C,OAAIlkG,UAAiB1D,QACjBi8L,4BAA2Bv4L,UAAA1D,QAAA,OAAA4L,EAAAlI,UAAA,GAAsBkkG,eAC1C00F,KAEJ10F,cAAclwG,OAGlB4kM,KAGLU,aACF7xG,yCACA8xG,WACI5kG,wCACAM,kDACAV,4BAIFilG,YACFhsG,+CACA+rG,WACIvqG,0CACA8B,mDACAd,+CAIRyoG,UAAKx/L,UAAYA,oBACjBw/L,UAAK9iM,QAAU+xB,aAAI/xB,QACnB8iM,UAAKa,YAAcA,YACnBb,UAAKz+B,YAAcA,YACnBy+B,UAAKv7D,aAAeA,kBACpBu7D,UAAK9xK,UAAY8yK,0BACjBhB,UAAKe,WAAaA,WAClBf,UAAKiB,OACD52G,6CACAG,iCACArB,wBACAF,2CACAhnF,mDACAxB,QzWk0CY,SAAVA,QAAWygM,WAAYC,eAAb,OACZ3rD,WAAY,SAAAA,WAAC1qI,OACT,IAAMs2L,aAAet2L,MAAMo2L,YACrBzrD,OAAS0rD,cAAclkL,MAAM,EAAGkkL,cAAct9L,OAAS,GACvDqc,GAAKihL,cAAcA,cAAct9L,OAAS,GAE1Cw9L,KAAO5rD,OAAOrrI,IAAI,SAAAkC,KAAG,OAAI80L,aAAa90L,OAC5C,OACI4T,GAAIA,GAAExW,WAAF,EAAAkgE,mBAAMy3H,OACV5rD,mByWx0CGuqD","file":"muze.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"muze\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"muze\"] = factory();\n\telse\n\t\troot[\"muze\"] = factory();\n})(window, function() {\nreturn "," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 7);\n","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"DataModel\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"DataModel\"] = factory();\n\telse\n\t\troot[\"DataModel\"] = factory();\n})(window, function() {\nreturn "," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 1);\n","const DataModel = require('./export');\n\nmodule.exports = DataModel.default ? DataModel.default : DataModel;\n","/**\n * DataFormat Enum defines the format of the input data.\n * Based on the format of the data the respective adapter is loaded.\n *\n * @readonly\n * @enum {string}\n */\nconst DataFormat = {\n FLAT_JSON: 'FlatJSON',\n DSV_STR: 'DSVStr',\n DSV_ARR: 'DSVArr',\n AUTO: 'Auto'\n};\n\nexport default DataFormat;\n","/**\n * DimensionSubtype enum defines the sub types of the Dimensional Field.\n *\n * @readonly\n * @enum {string}\n */\nconst DimensionSubtype = {\n CATEGORICAL: 'categorical',\n TEMPORAL: 'temporal',\n GEO: 'geo',\n BINNED: 'binned'\n};\n\nexport default DimensionSubtype;\n","/**\n * MeasureSubtype enum defines the sub types of the Measure Field.\n *\n * @readonly\n * @enum {string}\n */\nconst MeasureSubtype = {\n CONTINUOUS: 'continuous'\n};\n\nexport default MeasureSubtype;\n","/**\n * FieldType enum defines the high level field based on which visuals are controlled.\n * Measure in a high level is numeric field and Dimension in a high level is string field.\n *\n * @readonly\n * @enum {string}\n */\nconst FieldType = {\n MEASURE: 'measure',\n DIMENSION: 'dimension'\n};\n\nexport default FieldType;\n","/**\n * Filtering mode enum defines the filering modes of DataModel.\n *\n * @readonly\n * @enum {string}\n */\nconst FilteringMode = {\n NORMAL: 'normal',\n INVERSE: 'inverse',\n ALL: 'all'\n};\n\nexport default FilteringMode;\n","/**\n * Creates a JS native date object from input\n *\n * @param {string | number | Date} date Input using which date object to be created\n * @return {Date} : JS native date object\n */\nfunction convertToNativeDate (date) {\n if (date instanceof Date) {\n return date;\n }\n\n return new Date(date);\n}\n/**\n * Apply padding before a number if its less than 1o. This is used when constant digit's number to be returned\n * between 0 - 99\n *\n * @param {number} n Input to be padded\n * @return {string} Padded number\n */\nfunction pad (n) {\n return (n < 10) ? (`0${n}`) : n;\n}\n/*\n * DateFormatter utility to convert any date format to any other date format\n * DateFormatter parse a date time stamp specified by a user abiding by rules which are defined\n * by user in terms of token. It creates JS native date object from the user specified format.\n * That native date can also be displayed\n * in any specified format.\n * This utility class only takes care of format conversion only\n */\n\n/*\n * Escapes all the special character that are used in regular expression.\n * Like\n * RegExp.escape('sgfd-$') // Output: sgfd\\-\\$\n *\n * @param text {String} : text which is to be escaped\n */\nRegExp.escape = function (text) {\n return text.replace(/[-[\\]{}()*+?.,\\\\^$|#\\s]/g, '\\\\$&');\n};\n\n/**\n * DateTimeFormatter class to convert any user format of date time stamp to any other format\n * of date time stamp.\n *\n * @param {string} format Format of the date given. For the above date,\n * 'year: %Y, month: %b, day: %d'.\n * @class\n */\n/* istanbul ignore next */ function DateTimeFormatter (format) {\n this.format = format;\n this.dtParams = undefined;\n this.nativeDate = undefined;\n}\n\n// The identifier of the tokens\nDateTimeFormatter.TOKEN_PREFIX = '%';\n\n// JS native Date constructor takes the date params (year, month, etc) in a certail sequence.\n// This defines the sequence of the date parameters in the constructor.\nDateTimeFormatter.DATETIME_PARAM_SEQUENCE = {\n YEAR: 0,\n MONTH: 1,\n DAY: 2,\n HOUR: 3,\n MINUTE: 4,\n SECOND: 5,\n MILLISECOND: 6\n};\n\n/*\n * This is a default number parsing utility. It tries to parse a number in integer, if parsing is unsuccessful, it\n * gives back a default value.\n *\n * @param: defVal {Number} : Default no if the parsing to integer is not successful\n * @return {Function} : An closure function which is to be called by passing an the value which needs to be parsed.\n */\nDateTimeFormatter.defaultNumberParser = function (defVal) {\n return function (val) {\n let parsedVal;\n if (isFinite(parsedVal = parseInt(val, 10))) {\n return parsedVal;\n }\n\n return defVal;\n };\n};\n\n/*\n * This is a default number range utility. It tries to find an element in the range. If not found it returns a\n * default no as an index.\n *\n * @param: range {Array} : The list which is to be serached\n * @param: defVal {Number} : Default no if the serach and find does not return anything\n * @return {Function} : An closure function which is to be called by passing an the value which needs to be found\n */\nDateTimeFormatter.defaultRangeParser = function (range, defVal) {\n return (val) => {\n let i;\n let l;\n\n if (!val) { return defVal; }\n\n const nVal = val.toLowerCase();\n\n for (i = 0, l = range.length; i < l; i++) {\n if (range[i].toLowerCase() === nVal) {\n return i;\n }\n }\n\n if (i === undefined) {\n return defVal;\n }\n return null;\n };\n};\n\n/*\n * Defines the tokens which are supporter by the dateformatter. Using this definitation a value gets extracted from\n * the user specifed date string. This also formats the value for display purpose from native JS date.\n * The definition of each token contains the following named properties\n * {\n * %token_name% : {\n * name: name of the token, this is used in reverse lookup,\n * extract: a function that returns the regular expression to extract that piece of information. All the\n * regex should be gouped by using ()\n * parser: a function which receives value extracted by the above regex and parse it to get the date params\n * formatter: a formatter function that takes milliseconds or JS Date object and format the param\n * represented by the token only.\n * }\n * }\n *\n * @return {Object} : Definition of the all the supported tokens.\n */\nDateTimeFormatter.getTokenDefinitions = function () {\n const daysDef = {\n short: [\n 'Sun',\n 'Mon',\n 'Tue',\n 'Wed',\n 'Thu',\n 'Fri',\n 'Sat'\n ],\n long: [\n 'Sunday',\n 'Monday',\n 'Tuesday',\n 'Wednesday',\n 'Thursday',\n 'Friday',\n 'Saturday'\n ]\n };\n const monthsDef = {\n short: [\n 'Jan',\n 'Feb',\n 'Mar',\n 'Apr',\n 'May',\n 'Jun',\n 'Jul',\n 'Aug',\n 'Sep',\n 'Oct',\n 'Nov',\n 'Dec'\n ],\n long: [\n 'January',\n 'February',\n 'March',\n 'April',\n 'May',\n 'June',\n 'July',\n 'August',\n 'September',\n 'October',\n 'November',\n 'December'\n ]\n };\n\n const definitions = {\n H: {\n // 24 hours format\n name: 'H',\n index: 3,\n extract () { return '(\\\\d+)'; },\n parser: DateTimeFormatter.defaultNumberParser(),\n formatter (val) {\n const d = convertToNativeDate(val);\n\n return d.getHours().toString();\n }\n },\n l: {\n // 12 hours format\n name: 'l',\n index: 3,\n extract () { return '(\\\\d+)'; },\n parser: DateTimeFormatter.defaultNumberParser(),\n formatter (val) {\n const d = convertToNativeDate(val);\n const hours = d.getHours() % 12;\n\n return (hours === 0 ? 12 : hours).toString();\n }\n },\n p: {\n // AM or PM\n name: 'p',\n index: 3,\n extract () { return '(AM|PM)'; },\n parser: (val) => {\n if (val) {\n return val.toLowerCase();\n }\n return null;\n },\n formatter: (val) => {\n const d = convertToNativeDate(val);\n const hours = d.getHours();\n\n return (hours < 12 ? 'AM' : 'PM');\n }\n },\n P: {\n // am or pm\n name: 'P',\n index: 3,\n extract () { return '(am|pm)'; },\n parser: (val) => {\n if (val) {\n return val.toLowerCase();\n }\n return null;\n },\n formatter: (val) => {\n const d = convertToNativeDate(val);\n const hours = d.getHours();\n\n return (hours < 12 ? 'am' : 'pm');\n }\n },\n M: {\n // Two digit minutes 00 - 59\n name: 'M',\n index: 4,\n extract () { return '(\\\\d+)'; },\n parser: DateTimeFormatter.defaultNumberParser(),\n formatter (val) {\n const d = convertToNativeDate(val);\n const mins = d.getMinutes();\n\n return pad(mins);\n }\n },\n S: {\n // Two digit seconds 00 - 59\n name: 'S',\n index: 5,\n extract () { return '(\\\\d+)'; },\n parser: DateTimeFormatter.defaultNumberParser(),\n formatter (val) {\n const d = convertToNativeDate(val);\n const seconds = d.getSeconds();\n\n return pad(seconds);\n }\n },\n K: {\n // Milliseconds\n name: 'K',\n index: 6,\n extract () { return '(\\\\d+)'; },\n parser: DateTimeFormatter.defaultNumberParser(),\n formatter (val) {\n const d = convertToNativeDate(val);\n const ms = d.getMilliseconds();\n\n return ms.toString();\n }\n },\n a: {\n // Short name of day, like Mon\n name: 'a',\n index: 2,\n extract () { return `(${daysDef.short.join('|')})`; },\n parser: DateTimeFormatter.defaultRangeParser(daysDef.short),\n formatter (val) {\n const d = convertToNativeDate(val);\n const day = d.getDay();\n\n return (daysDef.short[day]).toString();\n }\n },\n A: {\n // Long name of day, like Monday\n name: 'A',\n index: 2,\n extract () { return `(${daysDef.long.join('|')})`; },\n parser: DateTimeFormatter.defaultRangeParser(daysDef.long),\n formatter (val) {\n const d = convertToNativeDate(val);\n const day = d.getDay();\n\n return (daysDef.long[day]).toString();\n }\n },\n e: {\n // 8 of March, 11 of November\n name: 'e',\n index: 2,\n extract () { return '(\\\\d+)'; },\n parser: DateTimeFormatter.defaultNumberParser(),\n formatter (val) {\n const d = convertToNativeDate(val);\n const day = d.getDate();\n\n return day.toString();\n }\n },\n d: {\n // 08 of March, 11 of November\n name: 'd',\n index: 2,\n extract () { return '(\\\\d+)'; },\n parser: DateTimeFormatter.defaultNumberParser(),\n formatter (val) {\n const d = convertToNativeDate(val);\n const day = d.getDate();\n\n return pad(day);\n }\n },\n b: {\n // Short month, like Jan\n name: 'b',\n index: 1,\n extract () { return `(${monthsDef.short.join('|')})`; },\n parser: DateTimeFormatter.defaultRangeParser(monthsDef.short),\n formatter (val) {\n const d = convertToNativeDate(val);\n const month = d.getMonth();\n\n return (monthsDef.short[month]).toString();\n }\n },\n B: {\n // Long month, like January\n name: 'B',\n index: 1,\n extract () { return `(${monthsDef.long.join('|')})`; },\n parser: DateTimeFormatter.defaultRangeParser(monthsDef.long),\n formatter (val) {\n const d = convertToNativeDate(val);\n const month = d.getMonth();\n\n return (monthsDef.long[month]).toString();\n }\n },\n m: {\n // Two digit month of year like 01 for January\n name: 'm',\n index: 1,\n extract () { return '(\\\\d+)'; },\n parser (val) { return DateTimeFormatter.defaultNumberParser()(val) - 1; },\n formatter (val) {\n const d = convertToNativeDate(val);\n const month = d.getMonth();\n\n return pad(month + 1);\n }\n },\n y: {\n // Short year like 90 for 1990\n name: 'y',\n index: 0,\n extract () { return '(\\\\d{2})'; },\n parser (val) {\n let result;\n if (val) {\n const l = val.length;\n val = val.substring(l - 2, l);\n }\n let parsedVal = DateTimeFormatter.defaultNumberParser()(val);\n let presentDate = new Date();\n let presentYear = Math.trunc((presentDate.getFullYear()) / 100);\n\n result = `${presentYear}${parsedVal}`;\n\n if (convertToNativeDate(result).getFullYear() > presentDate.getFullYear()) {\n result = `${presentYear - 1}${parsedVal}`;\n }\n return convertToNativeDate(result).getFullYear();\n },\n formatter (val) {\n const d = convertToNativeDate(val);\n let year = d.getFullYear().toString();\n let l;\n\n if (year) {\n l = year.length;\n year = year.substring(l - 2, l);\n }\n\n return year;\n }\n },\n Y: {\n // Long year like 1990\n name: 'Y',\n index: 0,\n extract () { return '(\\\\d{4})'; },\n parser: DateTimeFormatter.defaultNumberParser(),\n formatter (val) {\n const d = convertToNativeDate(val);\n const year = d.getFullYear().toString();\n\n return year;\n }\n }\n };\n\n return definitions;\n};\n\n/*\n * The tokens which works internally is not user friendly in terms of memorizing the names. This gives a formal\n * definition to the informal notations.\n *\n * @return {Object} : Formal definition of the tokens\n */\nDateTimeFormatter.getTokenFormalNames = function () {\n const definitions = DateTimeFormatter.getTokenDefinitions();\n\n return {\n HOUR: definitions.H,\n HOUR_12: definitions.l,\n AMPM_UPPERCASE: definitions.p,\n AMPM_LOWERCASE: definitions.P,\n MINUTE: definitions.M,\n SECOND: definitions.S,\n SHORT_DAY: definitions.a,\n LONG_DAY: definitions.A,\n DAY_OF_MONTH: definitions.e,\n DAY_OF_MONTH_CONSTANT_WIDTH: definitions.d,\n SHORT_MONTH: definitions.b,\n LONG_MONTH: definitions.B,\n MONTH_OF_YEAR: definitions.m,\n SHORT_YEAR: definitions.y,\n LONG_YEAR: definitions.Y\n };\n};\n\n/*\n * This defines the rules and declares dependencies that resolves a date parameter (year, month etc) from\n * the date time parameter array.\n *\n * @return {Object} : An object that contains dependencies and a resolver function. The dependencies values are fed\n * to the resolver function in that particular sequence only.\n */\nDateTimeFormatter.tokenResolver = function () {\n const definitions = DateTimeFormatter.getTokenDefinitions();\n const defaultResolver = (...args) => { // eslint-disable-line require-jsdoc\n let i = 0;\n let arg;\n let targetParam;\n const l = args.length;\n\n for (; i < l; i++) {\n arg = args[i];\n if (args[i]) {\n targetParam = arg;\n }\n }\n\n if (!targetParam) { return null; }\n\n return targetParam[0].parser(targetParam[1]);\n };\n\n return {\n YEAR: [definitions.y, definitions.Y,\n defaultResolver\n ],\n MONTH: [definitions.b, definitions.B, definitions.m,\n defaultResolver\n ],\n DAY: [definitions.a, definitions.A, definitions.e, definitions.d,\n defaultResolver\n ],\n HOUR: [definitions.H, definitions.l, definitions.p, definitions.P,\n function (hourFormat24, hourFormat12, ampmLower, ampmUpper) {\n let targetParam;\n let amOrpm;\n let isPM;\n let val;\n\n if (hourFormat12 && (amOrpm = (ampmLower || ampmUpper))) {\n if (amOrpm[0].parser(amOrpm[1]) === 'pm') {\n isPM = true;\n }\n\n targetParam = hourFormat12;\n } else if (hourFormat12) {\n targetParam = hourFormat12;\n } else {\n targetParam = hourFormat24;\n }\n\n if (!targetParam) { return null; }\n\n val = targetParam[0].parser(targetParam[1]);\n if (isPM) {\n val += 12;\n }\n return val;\n }\n ],\n MINUTE: [definitions.M,\n defaultResolver\n ],\n SECOND: [definitions.S,\n defaultResolver\n ]\n };\n};\n\n/*\n * Finds token from the format rule specified by a user.\n * @param format {String} : The format of the input date specified by the user\n * @return {Array} : An array of objects which contains the available token and their occurence index in the format\n */\nDateTimeFormatter.findTokens = function (format) {\n const tokenPrefix = DateTimeFormatter.TOKEN_PREFIX;\n const definitions = DateTimeFormatter.getTokenDefinitions();\n const tokenLiterals = Object.keys(definitions);\n const occurrence = [];\n let i;\n let forwardChar;\n\n while ((i = format.indexOf(tokenPrefix, i + 1)) >= 0) {\n forwardChar = format[i + 1];\n if (tokenLiterals.indexOf(forwardChar) === -1) { continue; }\n\n occurrence.push({\n index: i,\n token: forwardChar\n });\n }\n\n return occurrence;\n};\n\n/*\n * Format any JS date to a specified date given by user.\n *\n * @param date {Number | Date} : The date object which is to be formatted\n * @param format {String} : The format using which the date will be formatted for display\n */\nDateTimeFormatter.formatAs = function (date, format) {\n const nDate = convertToNativeDate(date);\n const occurrence = DateTimeFormatter.findTokens(format);\n const definitions = DateTimeFormatter.getTokenDefinitions();\n let formattedStr = String(format);\n const tokenPrefix = DateTimeFormatter.TOKEN_PREFIX;\n let token;\n let formattedVal;\n let i;\n let l;\n\n for (i = 0, l = occurrence.length; i < l; i++) {\n token = occurrence[i].token;\n formattedVal = definitions[token].formatter(nDate);\n formattedStr = formattedStr.replace(new RegExp(tokenPrefix + token, 'g'), formattedVal);\n }\n\n return formattedStr;\n};\n\n/*\n * Parses the user specified date string to extract the date time params.\n *\n * @return {Array} : Value of date time params in an array [year, month, day, hour, minutes, seconds, milli]\n */\nDateTimeFormatter.prototype.parse = function (dateTimeStamp, options) {\n const tokenResolver = DateTimeFormatter.tokenResolver();\n const dtParams = this.extractTokenValue(dateTimeStamp);\n const dtParamSeq = DateTimeFormatter.DATETIME_PARAM_SEQUENCE;\n const noBreak = options && options.noBreak;\n const dtParamArr = [];\n const args = [];\n let resolverKey;\n let resolverParams;\n let resolverFn;\n let val;\n let i;\n let param;\n let resolvedVal;\n let l;\n let result = [];\n\n for (resolverKey in tokenResolver) {\n if (!{}.hasOwnProperty.call(tokenResolver, resolverKey)) { continue; }\n\n args.length = 0;\n resolverParams = tokenResolver[resolverKey];\n resolverFn = resolverParams.splice(resolverParams.length - 1, 1)[0];\n\n for (i = 0, l = resolverParams.length; i < l; i++) {\n param = resolverParams[i];\n val = dtParams[param.name];\n\n if (val === undefined) {\n args.push(null);\n } else {\n args.push([param, val]);\n }\n }\n\n resolvedVal = resolverFn.apply(this, args);\n\n if ((resolvedVal === undefined || resolvedVal === null) && !noBreak) {\n break;\n }\n\n dtParamArr[dtParamSeq[resolverKey]] = resolvedVal;\n }\n\n if (dtParamArr.length && this.checkIfOnlyYear(dtParamArr.length))\n {\n result.unshift(dtParamArr[0], 0, 1); }\n else {\n result.unshift(...dtParamArr);\n }\n\n return result;\n};\n\n/*\n * Extract the value of the token from user specified date time string.\n *\n * @return {Object} : An key value pair which contains the tokens as key and value as pair\n */\nDateTimeFormatter.prototype.extractTokenValue = function (dateTimeStamp) {\n const format = this.format;\n const definitions = DateTimeFormatter.getTokenDefinitions();\n const tokenPrefix = DateTimeFormatter.TOKEN_PREFIX;\n const occurrence = DateTimeFormatter.findTokens(format);\n const tokenObj = {};\n\n let lastOccurrenceIndex;\n let occObj;\n let occIndex;\n let targetText;\n let regexFormat;\n\n let l;\n let i;\n\n regexFormat = String(format);\n\n const tokenArr = occurrence.map(obj => obj.token);\n const occurrenceLength = occurrence.length;\n for (i = occurrenceLength - 1; i >= 0; i--) {\n occIndex = occurrence[i].index;\n\n if (occIndex + 1 === regexFormat.length - 1) {\n lastOccurrenceIndex = occIndex;\n continue;\n }\n\n if (lastOccurrenceIndex === undefined) {\n lastOccurrenceIndex = regexFormat.length;\n }\n\n targetText = regexFormat.substring(occIndex + 2, lastOccurrenceIndex);\n regexFormat = regexFormat.substring(0, occIndex + 2) +\n RegExp.escape(targetText) +\n regexFormat.substring(lastOccurrenceIndex, regexFormat.length);\n\n lastOccurrenceIndex = occIndex;\n }\n\n for (i = 0; i < occurrenceLength; i++) {\n occObj = occurrence[i];\n regexFormat = regexFormat.replace(tokenPrefix + occObj.token, definitions[occObj.token].extract());\n }\n\n const extractValues = dateTimeStamp.match(new RegExp(regexFormat)) || [];\n extractValues.shift();\n\n for (i = 0, l = tokenArr.length; i < l; i++) {\n tokenObj[tokenArr[i]] = extractValues[i];\n }\n return tokenObj;\n};\n\n/*\n * Give back the JS native date formed from user specified date string\n *\n * @return {Date} : Native JS Date\n */\nDateTimeFormatter.prototype.getNativeDate = function (dateTimeStamp) {\n let date = null;\n if (Number.isFinite(dateTimeStamp)) {\n date = new Date(dateTimeStamp);\n } else if (!this.format && Date.parse(dateTimeStamp)) {\n date = new Date(dateTimeStamp);\n }\n else {\n const dtParams = this.dtParams = this.parse(dateTimeStamp);\n if (dtParams.length) {\n this.nativeDate = new Date(...dtParams);\n date = this.nativeDate;\n }\n }\n return date;\n};\n\nDateTimeFormatter.prototype.checkIfOnlyYear = function(len) {\n return len === 1 && this.format.match(/y|Y/g).length;\n};\n\n/*\n * Represents JS native date to a user specified format.\n *\n * @param format {String} : The format according to which the date is to be represented\n * @return {String} : The formatted date string\n */\nDateTimeFormatter.prototype.formatAs = function (format, dateTimeStamp) {\n let nativeDate;\n\n if (dateTimeStamp) {\n nativeDate = this.nativeDate = this.getNativeDate(dateTimeStamp);\n } else if (!(nativeDate = this.nativeDate)) {\n nativeDate = this.getNativeDate(dateTimeStamp);\n }\n\n return DateTimeFormatter.formatAs(nativeDate, format);\n};\n\nexport { DateTimeFormatter as default };\n","/**\n * The utility function to calculate major column.\n *\n * @param {Object} store - The store object.\n * @return {Function} Returns the push function.\n */\nexport default (store) => {\n let i = 0;\n return (...fields) => {\n fields.forEach((val, fieldIndex) => {\n if (!(store[fieldIndex] instanceof Array)) {\n store[fieldIndex] = Array.from({ length: i });\n }\n store[fieldIndex].push(val);\n });\n i++;\n };\n};\n","/* eslint-disable */\nconst OBJECTSTRING = 'object';\nconst objectToStrFn = Object.prototype.toString;\nconst objectToStr = '[object Object]';\nconst arrayToStr = '[object Array]';\n\nfunction checkCyclicRef(obj, parentArr) {\n let i = parentArr.length;\n let bIndex = -1;\n\n while (i) {\n if (obj === parentArr[i]) {\n bIndex = i;\n return bIndex;\n }\n i -= 1;\n }\n\n return bIndex;\n}\n\nfunction merge(obj1, obj2, skipUndef, tgtArr, srcArr) {\n var item,\n srcVal,\n tgtVal,\n str,\n cRef;\n // check whether obj2 is an array\n // if array then iterate through it's index\n // **** MOOTOOLS precution\n\n if (!srcArr) {\n tgtArr = [obj1];\n srcArr = [obj2];\n }\n else {\n tgtArr.push(obj1);\n srcArr.push(obj2);\n }\n\n if (obj2 instanceof Array) {\n for (item = 0; item < obj2.length; item += 1) {\n try {\n srcVal = obj1[item];\n tgtVal = obj2[item];\n }\n catch (e) {\n continue;\n }\n\n if (typeof tgtVal !== OBJECTSTRING) {\n if (!(skipUndef && tgtVal === undefined)) {\n obj1[item] = tgtVal;\n }\n }\n else {\n if (srcVal === null || typeof srcVal !== OBJECTSTRING) {\n srcVal = obj1[item] = tgtVal instanceof Array ? [] : {};\n }\n cRef = checkCyclicRef(tgtVal, srcArr);\n if (cRef !== -1) {\n srcVal = obj1[item] = tgtArr[cRef];\n }\n else {\n merge(srcVal, tgtVal, skipUndef, tgtArr, srcArr);\n }\n }\n }\n }\n else {\n for (item in obj2) {\n try {\n srcVal = obj1[item];\n tgtVal = obj2[item];\n }\n catch (e) {\n continue;\n }\n\n if (tgtVal !== null && typeof tgtVal === OBJECTSTRING) {\n // Fix for issue BUG: FWXT-602\n // IE < 9 Object.prototype.toString.call(null) gives\n // '[object Object]' instead of '[object Null]'\n // that's why null value becomes Object in IE < 9\n str = objectToStrFn.call(tgtVal);\n if (str === objectToStr) {\n if (srcVal === null || typeof srcVal !== OBJECTSTRING) {\n srcVal = obj1[item] = {};\n }\n cRef = checkCyclicRef(tgtVal, srcArr);\n if (cRef !== -1) {\n srcVal = obj1[item] = tgtArr[cRef];\n }\n else {\n merge(srcVal, tgtVal, skipUndef, tgtArr, srcArr);\n }\n }\n else if (str === arrayToStr) {\n if (srcVal === null || !(srcVal instanceof Array)) {\n srcVal = obj1[item] = [];\n }\n cRef = checkCyclicRef(tgtVal, srcArr);\n if (cRef !== -1) {\n srcVal = obj1[item] = tgtArr[cRef];\n }\n else {\n merge(srcVal, tgtVal, skipUndef, tgtArr, srcArr);\n }\n }\n else {\n obj1[item] = tgtVal;\n }\n }\n else {\n if (skipUndef && tgtVal === undefined) {\n continue;\n }\n obj1[item] = tgtVal;\n }\n }\n }\n return obj1;\n}\n\n\nfunction extend2 (obj1, obj2, skipUndef) {\n //if none of the arguments are object then return back\n if (typeof obj1 !== OBJECTSTRING && typeof obj2 !== OBJECTSTRING) {\n return null;\n }\n\n if (typeof obj2 !== OBJECTSTRING || obj2 === null) {\n return obj1;\n }\n\n if (typeof obj1 !== OBJECTSTRING) {\n obj1 = obj2 instanceof Array ? [] : {};\n }\n merge(obj1, obj2, skipUndef);\n return obj1;\n}\n\nexport { extend2 as default };\n","import { DataFormat } from '../enums';\n\n/**\n * Checks whether the value is an array.\n *\n * @param {*} val - The value to be checked.\n * @return {boolean} Returns true if the value is an array otherwise returns false.\n */\nexport function isArray (val) {\n return Array.isArray(val);\n}\n\n/**\n * Checks whether the value is an object.\n *\n * @param {*} val - The value to be checked.\n * @return {boolean} Returns true if the value is an object otherwise returns false.\n */\nexport function isObject (val) {\n return val === Object(val);\n}\n\n/**\n * Checks whether the value is a string value.\n *\n * @param {*} val - The value to be checked.\n * @return {boolean} Returns true if the value is a string value otherwise returns false.\n */\nexport function isString (val) {\n return typeof val === 'string';\n}\n\n/**\n * Checks whether the value is callable.\n *\n * @param {*} val - The value to be checked.\n * @return {boolean} Returns true if the value is callable otherwise returns false.\n */\nexport function isCallable (val) {\n return typeof val === 'function';\n}\n\n/**\n * Returns the unique values from the input array.\n *\n * @param {Array} data - The input array.\n * @return {Array} Returns a new array of unique values.\n */\nexport function uniqueValues (data) {\n return [...new Set(data)];\n}\n\nexport const getUniqueId = () => `id-${new Date().getTime()}${Math.round(Math.random() * 10000)}`;\n\n/**\n * Checks Whether two arrays have same content.\n *\n * @param {Array} arr1 - The first array.\n * @param {Array} arr2 - The 2nd array.\n * @return {boolean} Returns whether two array have same content.\n */\nexport function isArrEqual(arr1, arr2) {\n if (!isArray(arr1) || !isArray(arr2)) {\n return arr1 === arr2;\n }\n\n if (arr1.length !== arr2.length) {\n return false;\n }\n\n for (let i = 0; i < arr1.length; i++) {\n if (arr1[i] !== arr2[i]) {\n return false;\n }\n }\n\n return true;\n}\n\n/**\n * It is the default number format function for the measure field type.\n *\n * @param {any} val - The input value.\n * @return {number} Returns a number value.\n */\nexport function formatNumber(val) {\n return val;\n}\n\n/**\n * Returns the detected data format.\n *\n * @param {any} data - The input data to be tested.\n * @return {string} Returns the data format name.\n */\nexport const detectDataFormat = (data) => {\n if (isString(data)) {\n return DataFormat.DSV_STR;\n } else if (isArray(data) && isArray(data[0])) {\n return DataFormat.DSV_ARR;\n } else if (isArray(data) && (data.length === 0 || isObject(data[0]))) {\n return DataFormat.FLAT_JSON;\n }\n return null;\n};\n","import { FieldType } from './enums';\nimport { getUniqueId } from './utils';\n\nconst fieldStore = {\n data: {},\n\n createNamespace (fieldArr, name) {\n const dataId = name || getUniqueId();\n\n this.data[dataId] = {\n name: dataId,\n fields: fieldArr,\n\n fieldsObj () {\n let fieldsObj = this._cachedFieldsObj;\n\n if (!fieldsObj) {\n fieldsObj = this._cachedFieldsObj = {};\n this.fields.forEach((field) => {\n fieldsObj[field.name()] = field;\n });\n }\n return fieldsObj;\n },\n getMeasure () {\n let measureFields = this._cachedMeasure;\n\n if (!measureFields) {\n measureFields = this._cachedMeasure = {};\n this.fields.forEach((field) => {\n if (field.schema().type === FieldType.MEASURE) {\n measureFields[field.name()] = field;\n }\n });\n }\n return measureFields;\n },\n getDimension () {\n let dimensionFields = this._cachedDimension;\n\n if (!this._cachedDimension) {\n dimensionFields = this._cachedDimension = {};\n this.fields.forEach((field) => {\n if (field.schema().type === FieldType.DIMENSION) {\n dimensionFields[field.name()] = field;\n }\n });\n }\n return dimensionFields;\n },\n };\n return this.data[dataId];\n },\n};\n\nexport default fieldStore;\n","/**\n * The wrapper class on top of the primitive value of a field.\n *\n * @todo Need to have support for StringValue, NumberValue, DateTimeValue\n * and GeoValue. These types should expose predicate API mostly.\n */\nclass Value {\n\n /**\n * Creates new Value instance.\n *\n * @param {*} val - the primitive value from the field cell.\n * @param {string | Field} field - The field from which the value belongs.\n */\n constructor (val, field) {\n Object.defineProperty(this, '_value', {\n enumerable: false,\n configurable: false,\n writable: false,\n value: val\n });\n\n this.field = field;\n }\n\n /**\n * Returns the field value.\n *\n * @return {*} Returns the current value.\n */\n get value () {\n return this._value;\n }\n\n /**\n * Converts to human readable string.\n *\n * @override\n * @return {string} Returns a human readable string of the field value.\n *\n */\n toString () {\n return String(this.value);\n }\n\n /**\n * Returns the value of the field.\n *\n * @override\n * @return {*} Returns the field value.\n */\n valueOf () {\n return this.value;\n }\n}\n\nexport default Value;\n","/**\n * Iterates through the diffSet array and call the callback with the current\n * index.\n *\n * @param {string} rowDiffset - The row diffset string e.g. '0-4,6,10-13'.\n * @param {Function} callback - The callback function to be called with every index.\n */\nexport function rowDiffsetIterator (rowDiffset, callback) {\n if (rowDiffset.length > 0) {\n const rowDiffArr = rowDiffset.split(',');\n rowDiffArr.forEach((diffStr) => {\n const diffStsArr = diffStr.split('-');\n const start = +(diffStsArr[0]);\n const end = +(diffStsArr[1] || diffStsArr[0]);\n if (end >= start) {\n for (let i = start; i <= end; i += 1) {\n callback(i);\n }\n }\n });\n }\n}\n","/**\n * A parser to parser null, undefined, invalid and NIL values.\n *\n * @public\n * @class\n */\nclass InvalidAwareTypes {\n /**\n * Static method which gets/sets the invalid value registry.\n *\n * @public\n * @param {Object} config - The custom configuration supplied by user.\n * @return {Object} Returns the invalid values registry.\n */\n static invalidAwareVals (config) {\n if (!config) {\n return InvalidAwareTypes._invalidAwareValsMap;\n }\n return Object.assign(InvalidAwareTypes._invalidAwareValsMap, config);\n }\n\n /**\n * Initialize a new instance.\n *\n * @public\n * @param {string} value - The value of the invalid data type.\n */\n constructor (value) {\n this._value = value;\n }\n\n /**\n * Returns the current value of the instance.\n *\n * @public\n * @return {string} Returns the value of the invalid data type.\n */\n value () {\n return this._value;\n }\n\n /**\n * Returns the current value of the instance in string format.\n *\n * @public\n * @return {string} Returns the value of the invalid data type.\n */\n toString () {\n return String(this._value);\n }\n\n static isInvalid(val) {\n return (val instanceof InvalidAwareTypes) || !!InvalidAwareTypes.invalidAwareVals()[val];\n }\n\n static getInvalidType(val) {\n return val instanceof InvalidAwareTypes ? val : InvalidAwareTypes.invalidAwareVals()[val];\n }\n}\n\n/**\n * Enums for Invalid types.\n */\nInvalidAwareTypes.NULL = new InvalidAwareTypes('null');\nInvalidAwareTypes.NA = new InvalidAwareTypes('na');\nInvalidAwareTypes.NIL = new InvalidAwareTypes('nil');\n\n/**\n * Default Registry for mapping the invalid values.\n *\n * @private\n */\nInvalidAwareTypes._invalidAwareValsMap = {\n invalid: InvalidAwareTypes.NA,\n nil: InvalidAwareTypes.NIL,\n null: InvalidAwareTypes.NULL,\n undefined: InvalidAwareTypes.NA\n};\n\nexport default InvalidAwareTypes;\n","/**\n * The helper function that returns an array of common schema\n * from two fieldStore instances.\n *\n * @param {FieldStore} fs1 - The first FieldStore instance.\n * @param {FieldStore} fs2 - The second FieldStore instance.\n * @return {Array} An array containing the common schema.\n */\nexport function getCommonSchema (fs1, fs2) {\n const retArr = [];\n const fs1Arr = [];\n fs1.fields.forEach((field) => {\n fs1Arr.push(field.schema().name);\n });\n fs2.fields.forEach((field) => {\n if (fs1Arr.indexOf(field.schema().name) !== -1) {\n retArr.push(field.schema().name);\n }\n });\n return retArr;\n}\n","export { DataFormat, FilteringMode } from '../enums';\n/**\n * The event name for data propagation.\n */\nexport const PROPAGATION = 'propagation';\n\n/**\n * The name of the unique row id column in DataModel.\n */\nexport const ROW_ID = '__id__';\n\n/**\n * The enums for operation names performed on DataModel.\n */\nexport const DM_DERIVATIVES = {\n SELECT: 'select',\n PROJECT: 'project',\n GROUPBY: 'group',\n COMPOSE: 'compose',\n CAL_VAR: 'calculatedVariable',\n BIN: 'bin'\n};\n\nexport const JOINS = {\n CROSS: 'cross',\n LEFTOUTER: 'leftOuter',\n RIGHTOUTER: 'rightOuter',\n NATURAL: 'natural',\n FULLOUTER: 'fullOuter'\n};\n\nexport const LOGICAL_OPERATORS = {\n AND: 'and',\n OR: 'or'\n};\n","import DataModel from '../datamodel';\nimport { extend2 } from '../utils';\nimport { getCommonSchema } from './get-common-schema';\nimport { rowDiffsetIterator } from './row-diffset-iterator';\nimport { JOINS } from '../constants';\nimport { prepareJoinData } from '../helper';\n/**\n * Default filter function for crossProduct.\n *\n * @return {boolean} Always returns true.\n */\nfunction defaultFilterFn() { return true; }\n\n/**\n * Implementation of cross product operation between two DataModel instances.\n * It internally creates the data and schema for the new DataModel.\n *\n * @param {DataModel} dataModel1 - The left DataModel instance.\n * @param {DataModel} dataModel2 - The right DataModel instance.\n * @param {Function} filterFn - The filter function which is used to filter the tuples.\n * @param {boolean} [replaceCommonSchema=false] - The flag if the common name schema should be there.\n * @return {DataModel} Returns The newly created DataModel instance from the crossProduct operation.\n */\nexport function crossProduct (dm1, dm2, filterFn, replaceCommonSchema = false, jointype = JOINS.CROSS) {\n const schema = [];\n const data = [];\n const applicableFilterFn = filterFn || defaultFilterFn;\n const dm1FieldStore = dm1.getFieldspace();\n const dm2FieldStore = dm2.getFieldspace();\n const dm1FieldStoreName = dm1FieldStore.name;\n const dm2FieldStoreName = dm2FieldStore.name;\n const name = `${dm1FieldStore.name}.${dm2FieldStore.name}`;\n const commonSchemaList = getCommonSchema(dm1FieldStore, dm2FieldStore);\n\n if (dm1FieldStoreName === dm2FieldStoreName) {\n throw new Error('DataModels must have different alias names');\n }\n // Here prepare the schema\n dm1FieldStore.fields.forEach((field) => {\n const tmpSchema = extend2({}, field.schema());\n if (commonSchemaList.indexOf(tmpSchema.name) !== -1 && !replaceCommonSchema) {\n tmpSchema.name = `${dm1FieldStore.name}.${tmpSchema.name}`;\n }\n schema.push(tmpSchema);\n });\n dm2FieldStore.fields.forEach((field) => {\n const tmpSchema = extend2({}, field.schema());\n if (commonSchemaList.indexOf(tmpSchema.name) !== -1) {\n if (!replaceCommonSchema) {\n tmpSchema.name = `${dm2FieldStore.name}.${tmpSchema.name}`;\n schema.push(tmpSchema);\n }\n } else {\n schema.push(tmpSchema);\n }\n });\n\n // Here prepare Data\n rowDiffsetIterator(dm1._rowDiffset, (i) => {\n let rowAdded = false;\n let rowPosition;\n rowDiffsetIterator(dm2._rowDiffset, (ii) => {\n const tuple = [];\n const userArg = {};\n userArg[dm1FieldStoreName] = {};\n userArg[dm2FieldStoreName] = {};\n dm1FieldStore.fields.forEach((field) => {\n tuple.push(field.partialField.data[i]);\n userArg[dm1FieldStoreName][field.name()] = field.partialField.data[i];\n });\n dm2FieldStore.fields.forEach((field) => {\n if (!(commonSchemaList.indexOf(field.schema().name) !== -1 && replaceCommonSchema)) {\n tuple.push(field.partialField.data[ii]);\n }\n userArg[dm2FieldStoreName][field.name()] = field.partialField.data[ii];\n });\n\n let cachedStore = {};\n let cloneProvider1 = () => dm1.detachedRoot();\n let cloneProvider2 = () => dm2.detachedRoot();\n\n const dm1Fields = prepareJoinData(userArg[dm1FieldStoreName]);\n const dm2Fields = prepareJoinData(userArg[dm2FieldStoreName]);\n if (applicableFilterFn(dm1Fields, dm2Fields, cloneProvider1, cloneProvider2, cachedStore)) {\n const tupleObj = {};\n tuple.forEach((cellVal, iii) => {\n tupleObj[schema[iii].name] = cellVal;\n });\n if (rowAdded && JOINS.CROSS !== jointype) {\n data[rowPosition] = tupleObj;\n }\n else {\n data.push(tupleObj);\n rowAdded = true;\n rowPosition = i;\n }\n } else if ((jointype === JOINS.LEFTOUTER || jointype === JOINS.RIGHTOUTER) && !rowAdded) {\n const tupleObj = {};\n let len = dm1FieldStore.fields.length - 1;\n tuple.forEach((cellVal, iii) => {\n if (iii <= len) {\n tupleObj[schema[iii].name] = cellVal;\n }\n else {\n tupleObj[schema[iii].name] = null;\n }\n });\n rowAdded = true;\n rowPosition = i;\n data.push(tupleObj);\n }\n });\n });\n\n return new DataModel(data, schema, { name });\n}\n","/**\n * The default sort function.\n *\n * @param {*} a - The first value.\n * @param {*} b - The second value.\n * @return {number} Returns the comparison result e.g. 1 or 0 or -1.\n */\nfunction defSortFn (a, b) {\n const a1 = `${a}`;\n const b1 = `${b}`;\n if (a1 < b1) {\n return -1;\n }\n if (a1 > b1) {\n return 1;\n }\n return 0;\n}\n\n/**\n * The helper function for merge sort which creates the sorted array\n * from the two halves of the input array.\n *\n * @param {Array} arr - The target array which needs to be merged.\n * @param {number} lo - The starting index of the first array half.\n * @param {number} mid - The ending index of the first array half.\n * @param {number} hi - The ending index of the second array half.\n * @param {Function} sortFn - The sort function.\n */\nfunction merge (arr, lo, mid, hi, sortFn) {\n const mainArr = arr;\n const auxArr = [];\n for (let i = lo; i <= hi; i += 1) {\n auxArr[i] = mainArr[i];\n }\n let a = lo;\n let b = mid + 1;\n\n for (let i = lo; i <= hi; i += 1) {\n if (a > mid) {\n mainArr[i] = auxArr[b];\n b += 1;\n } else if (b > hi) {\n mainArr[i] = auxArr[a];\n a += 1;\n } else if (sortFn(auxArr[a], auxArr[b]) <= 0) {\n mainArr[i] = auxArr[a];\n a += 1;\n } else {\n mainArr[i] = auxArr[b];\n b += 1;\n }\n }\n}\n\n/**\n * The helper function for merge sort which would be called\n * recursively for sorting the array halves.\n *\n * @param {Array} arr - The target array which needs to be sorted.\n * @param {number} lo - The starting index of the array half.\n * @param {number} hi - The ending index of the array half.\n * @param {Function} sortFn - The sort function.\n * @return {Array} Returns the target array itself.\n */\nfunction sort (arr, lo, hi, sortFn) {\n if (hi === lo) { return arr; }\n\n const mid = lo + Math.floor((hi - lo) / 2);\n sort(arr, lo, mid, sortFn);\n sort(arr, mid + 1, hi, sortFn);\n merge(arr, lo, mid, hi, sortFn);\n\n return arr;\n}\n\n/**\n * The implementation of merge sort.\n * It is used in DataModel for stable sorting as it is not sure\n * what the sorting algorithm used by browsers is stable or not.\n *\n * @param {Array} arr - The target array which needs to be sorted.\n * @param {Function} [sortFn=defSortFn] - The sort function.\n * @return {Array} Returns the input array itself in sorted order.\n */\nexport function mergeSort (arr, sortFn = defSortFn) {\n if (arr.length > 1) {\n sort(arr, 0, arr.length - 1, sortFn);\n }\n return arr;\n}\n","import { DimensionSubtype, MeasureSubtype } from '../enums';\nimport { rowDiffsetIterator } from './row-diffset-iterator';\nimport { mergeSort } from './merge-sort';\nimport { fieldInSchema } from '../helper';\nimport { isCallable, isArray, } from '../utils';\n/**\n * Generates the sorting functions to sort the data of a DataModel instance\n * according to the input data type.\n *\n * @param {string} dataType - The data type e.g. 'measure', 'datetime' etc.\n * @param {string} sortType - The sorting order i.e. 'asc' or 'desc'.\n * @param {integer} index - The index of the data which will be sorted.\n * @return {Function} Returns the the sorting function.\n */\nfunction getSortFn (dataType, sortType, index) {\n let retFunc;\n switch (dataType) {\n case MeasureSubtype.CONTINUOUS:\n case DimensionSubtype.TEMPORAL:\n if (sortType === 'desc') {\n retFunc = (a, b) => b[index] - a[index];\n } else {\n retFunc = (a, b) => a[index] - b[index];\n }\n break;\n default:\n retFunc = (a, b) => {\n const a1 = `${a[index]}`;\n const b1 = `${b[index]}`;\n if (a1 < b1) {\n return sortType === 'desc' ? 1 : -1;\n }\n if (a1 > b1) {\n return sortType === 'desc' ? -1 : 1;\n }\n return 0;\n };\n }\n return retFunc;\n}\n\n/**\n * Groups the data according to the specified target field.\n *\n * @param {Array} data - The input data array.\n * @param {number} fieldIndex - The target field index within schema array.\n * @return {Array} Returns an array containing the grouped data.\n */\nfunction groupData(data, fieldIndex) {\n const hashMap = new Map();\n const groupedData = [];\n\n data.forEach((datum) => {\n const fieldVal = datum[fieldIndex];\n if (hashMap.has(fieldVal)) {\n groupedData[hashMap.get(fieldVal)][1].push(datum);\n } else {\n groupedData.push([fieldVal, [datum]]);\n hashMap.set(fieldVal, groupedData.length - 1);\n }\n });\n\n return groupedData;\n}\n\n/**\n * Creates the argument value used for sorting function when sort is done\n * with another fields.\n *\n * @param {Array} groupedDatum - The grouped datum for a single dimension field value.\n * @param {Array} targetFields - An array of the sorting fields.\n * @param {Array} targetFieldDetails - An array of the sorting field details in schema.\n * @return {Object} Returns an object containing the value of sorting fields and the target field name.\n */\nfunction createSortingFnArg(groupedDatum, targetFields, targetFieldDetails) {\n const arg = {\n label: groupedDatum[0]\n };\n\n targetFields.reduce((acc, next, idx) => {\n acc[next] = groupedDatum[1].map(datum => datum[targetFieldDetails[idx].index]);\n return acc;\n }, arg);\n\n return arg;\n}\n\n/**\n * Sorts the data before return in dataBuilder.\n *\n * @param {Object} dataObj - An object containing the data and schema.\n * @param {Array} sortingDetails - An array containing the sorting configs.\n */\nfunction sortData(dataObj, sortingDetails) {\n const { data, schema } = dataObj;\n let fieldName;\n let sortMeta;\n let fDetails;\n let i = sortingDetails.length - 1;\n\n for (; i >= 0; i--) {\n fieldName = sortingDetails[i][0];\n sortMeta = sortingDetails[i][1];\n fDetails = fieldInSchema(schema, fieldName);\n\n if (!fDetails) {\n // eslint-disable-next-line no-continue\n continue;\n }\n\n if (isCallable(sortMeta)) {\n // eslint-disable-next-line no-loop-func\n mergeSort(data, (a, b) => sortMeta(a[fDetails.index], b[fDetails.index]));\n } else if (isArray(sortMeta)) {\n const groupedData = groupData(data, fDetails.index);\n const sortingFn = sortMeta[sortMeta.length - 1];\n const targetFields = sortMeta.slice(0, sortMeta.length - 1);\n const targetFieldDetails = targetFields.map(f => fieldInSchema(schema, f));\n\n groupedData.forEach((groupedDatum) => {\n groupedDatum.push(createSortingFnArg(groupedDatum, targetFields, targetFieldDetails));\n });\n\n mergeSort(groupedData, (a, b) => {\n const m = a[2];\n const n = b[2];\n return sortingFn(m, n);\n });\n\n // Empty the array\n data.length = 0;\n groupedData.forEach((datum) => {\n data.push(...datum[1]);\n });\n } else {\n sortMeta = String(sortMeta).toLowerCase() === 'desc' ? 'desc' : 'asc';\n mergeSort(data, getSortFn(fDetails.type, sortMeta, fDetails.index));\n }\n }\n\n dataObj.uids = [];\n data.forEach((value) => {\n dataObj.uids.push(value.pop());\n });\n}\n\n\n/**\n * Builds the actual data array.\n *\n * @param {Array} fieldStore - An array of field.\n * @param {string} rowDiffset - A string consisting of which rows to be included eg. '0-2,4,6';\n * @param {string} colIdentifier - A string consisting of the details of which column\n * to be included eg 'date,sales,profit';\n * @param {Object} sortingDetails - An object containing the sorting details of the DataModel instance.\n * @param {Object} options - The options required to create the type of the data.\n * @return {Object} Returns an object containing the multidimensional array and the relative schema.\n */\nexport function dataBuilder (fieldStore, rowDiffset, colIdentifier, sortingDetails, options) {\n const defOptions = {\n addUid: false,\n columnWise: false\n };\n options = Object.assign({}, defOptions, options);\n\n const retObj = {\n schema: [],\n data: [],\n uids: []\n };\n const addUid = options.addUid;\n const reqSorting = sortingDetails && sortingDetails.length > 0;\n // It stores the fields according to the colIdentifier argument\n const tmpDataArr = [];\n // Stores the fields according to the colIdentifier argument\n const colIArr = colIdentifier.split(',');\n\n colIArr.forEach((colName) => {\n for (let i = 0; i < fieldStore.length; i += 1) {\n if (fieldStore[i].name() === colName) {\n tmpDataArr.push(fieldStore[i]);\n break;\n }\n }\n });\n\n // Inserts the schema to the schema object\n tmpDataArr.forEach((field) => {\n /** @todo Need to use extend2 here otherwise user can overwrite the schema. */\n retObj.schema.push(field.schema());\n });\n\n if (addUid) {\n retObj.schema.push({\n name: 'uid',\n type: 'identifier'\n });\n }\n\n rowDiffsetIterator(rowDiffset, (i) => {\n retObj.data.push([]);\n const insertInd = retObj.data.length - 1;\n let start = 0;\n tmpDataArr.forEach((field, ii) => {\n retObj.data[insertInd][ii + start] = field.partialField.data[i];\n });\n if (addUid) {\n retObj.data[insertInd][tmpDataArr.length] = i;\n }\n // Creates an array of unique identifiers for each row\n retObj.uids.push(i);\n\n // If sorting needed then there is the need to expose the index\n // mapping from the old index to its new index\n if (reqSorting) { retObj.data[insertInd].push(i); }\n });\n\n // Handles the sort functionality\n if (reqSorting) {\n sortData(retObj, sortingDetails);\n }\n\n if (options.columnWise) {\n const tmpData = Array(...Array(retObj.schema.length)).map(() => []);\n retObj.data.forEach((tuple) => {\n tuple.forEach((data, i) => {\n tmpData[i].push(data);\n });\n });\n retObj.data = tmpData;\n }\n\n return retObj;\n}\n","import DataModel from '../datamodel';\nimport { extend2 } from '../utils';\nimport { rowDiffsetIterator } from './row-diffset-iterator';\nimport { isArrEqual } from '../utils/helper';\n\n/**\n * Performs the union operation between two dm instances.\n *\n * @todo Fix the conflicts between union and difference terminology here.\n *\n * @param {dm} dm1 - The first dm instance.\n * @param {dm} dm2 - The second dm instance.\n * @return {dm} Returns the newly created dm after union operation.\n */\nexport function difference (dm1, dm2) {\n const hashTable = {};\n const schema = [];\n const schemaNameArr = [];\n const data = [];\n const dm1FieldStore = dm1.getFieldspace();\n const dm2FieldStore = dm2.getFieldspace();\n const dm1FieldStoreFieldObj = dm1FieldStore.fieldsObj();\n const dm2FieldStoreFieldObj = dm2FieldStore.fieldsObj();\n const name = `${dm1FieldStore.name} union ${dm2FieldStore.name}`;\n\n // For union the columns should match otherwise return a clone of the dm1\n if (!isArrEqual(dm1._colIdentifier.split(',').sort(), dm2._colIdentifier.split(',').sort())) {\n return null;\n }\n\n // Prepare the schema\n (dm1._colIdentifier.split(',')).forEach((fieldName) => {\n const field = dm1FieldStoreFieldObj[fieldName];\n schema.push(extend2({}, field.schema()));\n schemaNameArr.push(field.schema().name);\n });\n\n /**\n * The helper function to create the data.\n *\n * @param {dm} dm - The dm instance for which the data is inserted.\n * @param {Object} fieldsObj - The fieldStore object format.\n * @param {boolean} addData - If true only tuple will be added to the data.\n */\n function prepareDataHelper(dm, fieldsObj, addData) {\n rowDiffsetIterator(dm._rowDiffset, (i) => {\n const tuple = {};\n let hashData = '';\n schemaNameArr.forEach((schemaName) => {\n const value = fieldsObj[schemaName].partialField.data[i];\n hashData += `-${value}`;\n tuple[schemaName] = value;\n });\n if (!hashTable[hashData]) {\n if (addData) { data.push(tuple); }\n hashTable[hashData] = true;\n }\n });\n }\n\n // Prepare the data\n prepareDataHelper(dm2, dm2FieldStoreFieldObj, false);\n prepareDataHelper(dm1, dm1FieldStoreFieldObj, true);\n\n return new DataModel(data, schema, { name });\n}\n\n","import { isArray } from '../utils';\nimport InvalidAwareTypes from '../invalid-aware-types';\n\n\nfunction getFilteredValues(arr) {\n return arr.filter(item => !(item instanceof InvalidAwareTypes));\n}\n/**\n * Reducer function that returns the sum of all the values.\n *\n * @public\n * @param {Array.} arr - The input array.\n * @return {number} Returns the sum of the array.\n */\nfunction sum (arr) {\n if (isArray(arr) && !(arr[0] instanceof Array)) {\n const filteredNumber = getFilteredValues(arr);\n const totalSum = filteredNumber.length ?\n filteredNumber.reduce((acc, curr) => acc + curr, 0)\n : InvalidAwareTypes.NULL;\n return totalSum;\n }\n return InvalidAwareTypes.NULL;\n}\n\n/**\n * Reducer function that returns the average of all the values.\n *\n * @public\n * @param {Array.} arr - The input array.\n * @return {number} Returns the mean value of the array.\n */\nfunction avg (arr) {\n if (isArray(arr) && !(arr[0] instanceof Array)) {\n const totalSum = sum(arr);\n const len = arr.length || 1;\n return (Number.isNaN(totalSum) || totalSum instanceof InvalidAwareTypes) ?\n InvalidAwareTypes.NULL : totalSum / len;\n }\n return InvalidAwareTypes.NULL;\n}\n\n/**\n * Reducer function that gives the min value amongst all the values.\n *\n * @public\n * @param {Array.} arr - The input array.\n * @return {number} Returns the minimum value of the array.\n */\nfunction min (arr) {\n if (isArray(arr) && !(arr[0] instanceof Array)) {\n // Filter out undefined, null and NaN values\n const filteredValues = getFilteredValues(arr);\n\n return (filteredValues.length) ? Math.min(...filteredValues) : InvalidAwareTypes.NULL;\n }\n return InvalidAwareTypes.NULL;\n}\n\n/**\n * Reducer function that gives the max value amongst all the values.\n *\n * @public\n * @param {Array.} arr - The input array.\n * @return {number} Returns the maximum value of the array.\n */\nfunction max (arr) {\n if (isArray(arr) && !(arr[0] instanceof Array)) {\n // Filter out undefined, null and NaN values\n const filteredValues = getFilteredValues(arr);\n\n return (filteredValues.length) ? Math.max(...filteredValues) : InvalidAwareTypes.NULL;\n }\n return InvalidAwareTypes.NULL;\n}\n\n/**\n * Reducer function that gives the first value of the array.\n *\n * @public\n * @param {Array} arr - The input array.\n * @return {number} Returns the first value of the array.\n */\nfunction first (arr) {\n return arr[0];\n}\n\n/**\n * Reducer function that gives the last value of the array.\n *\n * @public\n * @param {Array} arr - The input array.\n * @return {number} Returns the last value of the array.\n */\nfunction last (arr) {\n return arr[arr.length - 1];\n}\n\n/**\n * Reducer function that gives the count value of the array.\n *\n * @public\n * @param {Array} arr - The input array.\n * @return {number} Returns the length of the array.\n */\nfunction count (arr) {\n if (isArray(arr)) {\n return arr.length;\n }\n return InvalidAwareTypes.NULL;\n}\n\n/**\n * Calculates the variance of the input array.\n *\n * @param {Array.} arr - The input array.\n * @return {number} Returns the variance of the input array.\n */\nfunction variance (arr) {\n let mean = avg(arr);\n return avg(arr.map(num => (num - mean) ** 2));\n}\n\n/**\n * Calculates the square root of the variance of the input array.\n *\n * @public\n * @param {Array.} arr - The input array.\n * @return {number} Returns the square root of the variance.\n */\nfunction std (arr) {\n return Math.sqrt(variance(arr));\n}\n\n\nconst fnList = {\n sum,\n avg,\n min,\n max,\n first,\n last,\n count,\n std\n};\n\nconst defaultReducerName = 'sum';\n\nexport {\n defaultReducerName,\n sum as defReducer,\n fnList,\n};\n","import { defReducer, fnList } from '../operator';\n\n/**\n * A page level storage which stores, registers, unregisters reducers for all the datamodel instances. There is only one\n * reducer store available in a page. All the datamodel instances receive same instance of reducer store. DataModel\n * out of the box provides handful of {@link reducer | reducers} which can be used as reducer funciton.\n *\n * @public\n * @namespace DataModel\n */\nclass ReducerStore {\n constructor () {\n this.store = new Map();\n this.store.set('defReducer', defReducer);\n\n Object.entries(fnList).forEach((key) => {\n this.store.set(key[0], key[1]);\n });\n }\n\n /**\n * Changes the `defaultReducer` globally. For all the fields which does not have `defAggFn` mentioned in schema, the\n * value of `defaultReducer` is used for aggregation.\n *\n * @public\n * @param {string} [reducer='sum'] - The name of the default reducer. It picks up the definition from store by doing\n * name lookup. If no name is found then it takes `sum` as the default reducer.\n * @return {ReducerStore} Returns instance of the singleton store in page.\n */\n defaultReducer (...params) {\n if (!params.length) {\n return this.store.get('defReducer');\n }\n\n let reducer = params[0];\n\n if (typeof reducer === 'function') {\n this.store.set('defReducer', reducer);\n } else {\n reducer = String(reducer);\n if (Object.keys(fnList).indexOf(reducer) !== -1) {\n this.store.set('defReducer', fnList[reducer]);\n } else {\n throw new Error(`Reducer ${reducer} not found in registry`);\n }\n }\n return this;\n }\n\n /**\n *\n * Registers a {@link reducer | reducer}.\n * A {@link reducer | reducer} has to be registered before it is used.\n *\n * @example\n * // find the mean squared value of a given set\n * const reducerStore = DataModel.Reducers();\n *\n * reducers.register('meanSquared', (arr) => {\n * const squaredVal = arr.map(item => item * item);\n * let sum = 0;\n * for (let i = 0, l = squaredVal.length; i < l; i++) {\n * sum += squaredVal[i++];\n * }\n *\n * return sum;\n * })\n *\n * // datamodel (dm) is already prepared with cars.json\n * const dm1 = dm.groupBy(['origin'], {\n * accleration: 'meanSquared'\n * });\n *\n * @public\n *\n * @param {string} name formal name for a reducer. If the given name already exists in store it is overridden by new\n * definition.\n * @param {Function} reducer definition of {@link reducer} function.\n *\n * @return {Function} function for unregistering the reducer.\n */\n register (name, reducer) {\n if (typeof reducer !== 'function') {\n throw new Error('Reducer should be a function');\n }\n\n name = String(name);\n this.store.set(name, reducer);\n\n return () => { this.__unregister(name); };\n }\n\n __unregister (name) {\n if (this.store.has(name)) {\n this.store.delete(name);\n }\n }\n\n resolve (name) {\n if (name instanceof Function) {\n return name;\n }\n return this.store.get(name);\n }\n}\n\nconst reducerStore = (function () {\n let store = null;\n\n function getStore () {\n if (store === null) {\n store = new ReducerStore();\n }\n return store;\n }\n return getStore();\n}());\n\nexport default reducerStore;\n","import { getCommonSchema } from './get-common-schema';\n\n/**\n * The filter function used in natural join.\n * It generates a function that will have the logic to join two\n * DataModel instances by the process of natural join.\n *\n * @param {DataModel} dm1 - The left DataModel instance.\n * @param {DataModel} dm2 - The right DataModel instance.\n * @return {Function} Returns a function that is used in cross-product operation.\n */\nexport function naturalJoinFilter (dm1, dm2) {\n const dm1FieldStore = dm1.getFieldspace();\n const dm2FieldStore = dm2.getFieldspace();\n // const dm1FieldStoreName = dm1FieldStore.name;\n // const dm2FieldStoreName = dm2FieldStore.name;\n const commonSchemaArr = getCommonSchema(dm1FieldStore, dm2FieldStore);\n\n return (dm1Fields, dm2Fields) => {\n let retainTuple = true;\n commonSchemaArr.forEach((fieldName) => {\n if (dm1Fields[fieldName].value ===\n dm2Fields[fieldName].value && retainTuple) {\n retainTuple = true;\n } else {\n retainTuple = false;\n }\n });\n return retainTuple;\n };\n}\n","import DataModel from '../export';\nimport { extend2 } from '../utils';\nimport { rowDiffsetIterator } from './row-diffset-iterator';\nimport { isArrEqual } from '../utils/helper';\n/**\n * Performs the union operation between two dm instances.\n *\n * @param {dm} dm1 - The first dm instance.\n * @param {dm} dm2 - The second dm instance.\n * @return {dm} Returns the newly created dm after union operation.\n */\nexport function union (dm1, dm2) {\n const hashTable = {};\n const schema = [];\n const schemaNameArr = [];\n const data = [];\n const dm1FieldStore = dm1.getFieldspace();\n const dm2FieldStore = dm2.getFieldspace();\n const dm1FieldStoreFieldObj = dm1FieldStore.fieldsObj();\n const dm2FieldStoreFieldObj = dm2FieldStore.fieldsObj();\n const name = `${dm1FieldStore.name} union ${dm2FieldStore.name}`;\n\n // For union the columns should match otherwise return a clone of the dm1\n if (!isArrEqual(dm1._colIdentifier.split(',').sort(), dm2._colIdentifier.split(',').sort())) {\n return null;\n }\n\n // Prepare the schema\n (dm1._colIdentifier.split(',')).forEach((fieldName) => {\n const field = dm1FieldStoreFieldObj[fieldName];\n schema.push(extend2({}, field.schema()));\n schemaNameArr.push(field.schema().name);\n });\n\n /**\n * The helper function to create the data.\n *\n * @param {dm} dm - The dm instance for which the data is inserted.\n * @param {Object} fieldsObj - The fieldStore object format.\n */\n function prepareDataHelper (dm, fieldsObj) {\n rowDiffsetIterator(dm._rowDiffset, (i) => {\n const tuple = {};\n let hashData = '';\n schemaNameArr.forEach((schemaName) => {\n const value = fieldsObj[schemaName].partialField.data[i];\n hashData += `-${value}`;\n tuple[schemaName] = value;\n });\n if (!hashTable[hashData]) {\n data.push(tuple);\n hashTable[hashData] = true;\n }\n });\n }\n\n // Prepare the data\n prepareDataHelper(dm1, dm1FieldStoreFieldObj);\n prepareDataHelper(dm2, dm2FieldStoreFieldObj);\n\n return new DataModel(data, schema, { name });\n}\n","import { crossProduct } from './cross-product';\nimport { JOINS } from '../constants';\nimport { union } from './union';\n\n\nexport function leftOuterJoin (dataModel1, dataModel2, filterFn) {\n return crossProduct(dataModel1, dataModel2, filterFn, false, JOINS.LEFTOUTER);\n}\n\nexport function rightOuterJoin (dataModel1, dataModel2, filterFn) {\n return crossProduct(dataModel2, dataModel1, filterFn, false, JOINS.RIGHTOUTER);\n}\n\nexport function fullOuterJoin (dataModel1, dataModel2, filterFn) {\n return union(leftOuterJoin(dataModel1, dataModel2, filterFn), rightOuterJoin(dataModel1, dataModel2, filterFn));\n}\n","import { rowDiffsetIterator } from '../../operator/row-diffset-iterator';\n\n/**\n * In {@link DataModel}, every tabular data consists of column, a column is stored as field.\n * Field contains all the data for a given column in an array.\n *\n * Each record consists of several fields; the fields of all records form the columns.\n * Examples of fields: name, gender, sex etc.\n *\n * In DataModel, each field can have multiple attributes which describes its data and behaviour.\n * A field can have two types of data: Measure and Dimension.\n *\n * A Dimension Field is the context on which a data is categorized and the measure is the numerical values that\n * quantify the data set.\n * In short a dimension is the lens through which you are looking at your measure data.\n *\n * Refer to {@link Schema} to get info about possible field attributes.\n *\n * @public\n * @class\n */\nexport default class Field {\n /**\n * Initialize a new instance.\n *\n * @public\n * @param {PartialField} partialField - The partialField instance which holds the whole data.\n * @param {string} rowDiffset - The data subset definition.\n */\n constructor (partialField, rowDiffset) {\n this.partialField = partialField;\n this.rowDiffset = rowDiffset;\n }\n\n /**\n * Generates the field type specific domain.\n *\n * @public\n * @abstract\n */\n domain () {\n throw new Error('Not yet implemented');\n }\n\n /**\n * Returns the the field schema.\n *\n * @public\n * @return {string} Returns the field schema.\n */\n schema () {\n return this.partialField.schema;\n }\n\n /**\n * Returns the name of the field.\n *\n * @public\n * @return {string} Returns the name of the field.\n */\n name () {\n return this.partialField.name;\n }\n\n /**\n * Returns the type of the field.\n *\n * @public\n * @return {string} Returns the type of the field.\n */\n type () {\n return this.partialField.schema.type;\n }\n\n /**\n * Returns the subtype of the field.\n *\n * @public\n * @return {string} Returns the subtype of the field.\n */\n subtype () {\n return this.partialField.schema.subtype;\n }\n\n /**\n * Returns the description of the field.\n *\n * @public\n * @return {string} Returns the description of the field.\n */\n description () {\n return this.partialField.schema.description;\n }\n\n /**\n * Returns the display name of the field.\n *\n * @public\n * @return {string} Returns the display name of the field.\n */\n displayName () {\n return this.partialField.schema.displayName || this.partialField.schema.name;\n }\n\n /**\n * Returns the data associated with the field.\n *\n * @public\n * @return {Array} Returns the data.\n */\n data () {\n const data = [];\n rowDiffsetIterator(this.rowDiffset, (i) => {\n data.push(this.partialField.data[i]);\n });\n return data;\n }\n\n /**\n * Returns the formatted version of the underlying field data.\n *\n * @public\n * @abstract\n */\n formattedData () {\n throw new Error('Not yet implemented');\n }\n}\n","import Field from '../field';\n\n/**\n * Represents dimension field type.\n *\n * @public\n * @class\n * @extends Field\n */\nexport default class Dimension extends Field {\n /**\n * Returns the domain for the dimension field.\n *\n * @override\n * @public\n * @return {any} Returns the calculated domain.\n */\n domain () {\n if (!this._cachedDomain) {\n this._cachedDomain = this.calculateDataDomain();\n }\n return this._cachedDomain;\n }\n\n /**\n * Calculates the corresponding field domain.\n *\n * @public\n * @abstract\n */\n calculateDataDomain () {\n throw new Error('Not yet implemented');\n }\n\n /**\n * Returns the formatted version of the underlying field data.\n *\n * @public\n * @override\n * @return {Array} Returns the formatted data.\n */\n formattedData () {\n return this.data();\n }\n}\n","import { rowDiffsetIterator } from '../../operator/row-diffset-iterator';\nimport { DimensionSubtype } from '../../enums';\nimport Dimension from '../dimension';\n/**\n * Represents categorical field subtype.\n *\n * @public\n * @class\n * @extends Dimension\n */\nexport default class Categorical extends Dimension {\n /**\n * Returns the subtype of the field.\n *\n * @public\n * @override\n * @return {string} Returns the subtype of the field.\n */\n subtype () {\n return DimensionSubtype.CATEGORICAL;\n }\n\n /**\n * Calculates the corresponding field domain.\n *\n * @public\n * @override\n * @return {Array} Returns the unique values.\n */\n calculateDataDomain () {\n const hash = new Set();\n const domain = [];\n\n // here don't use this.data() as the iteration will be occurred two times on same data.\n rowDiffsetIterator(this.rowDiffset, (i) => {\n const datum = this.partialField.data[i];\n if (!hash.has(datum)) {\n hash.add(datum);\n domain.push(datum);\n }\n });\n return domain;\n }\n}\n","import { rowDiffsetIterator } from '../../operator/row-diffset-iterator';\nimport Dimension from '../dimension';\nimport { DateTimeFormatter } from '../../utils';\nimport InvalidAwareTypes from '../../invalid-aware-types';\n\n/**\n * Represents temporal field subtype.\n *\n * @public\n * @class\n * @extends Dimension\n */\nexport default class Temporal extends Dimension {\n /**\n * Initialize a new instance.\n *\n * @public\n * @param {PartialField} partialField - The partialField instance which holds the whole data.\n * @param {string} rowDiffset - The data subset definition.\n */\n constructor (partialField, rowDiffset) {\n super(partialField, rowDiffset);\n\n this._cachedMinDiff = null;\n }\n\n /**\n * Calculates the corresponding field domain.\n *\n * @public\n * @override\n * @return {Array} Returns the unique values.\n */\n calculateDataDomain () {\n const hash = new Set();\n const domain = [];\n\n // here don't use this.data() as the iteration will be\n // occurred two times on same data.\n rowDiffsetIterator(this.rowDiffset, (i) => {\n const datum = this.partialField.data[i];\n if (!hash.has(datum)) {\n hash.add(datum);\n domain.push(datum);\n }\n });\n\n return domain;\n }\n\n\n /**\n * Calculates the minimum consecutive difference from the associated field data.\n *\n * @public\n * @return {number} Returns the minimum consecutive diff in milliseconds.\n */\n minimumConsecutiveDifference () {\n if (this._cachedMinDiff) {\n return this._cachedMinDiff;\n }\n\n const sortedData = this.data().filter(item => !(item instanceof InvalidAwareTypes)).sort((a, b) => a - b);\n const arrLn = sortedData.length;\n let minDiff = Number.POSITIVE_INFINITY;\n let prevDatum;\n let nextDatum;\n let processedCount = 0;\n\n for (let i = 1; i < arrLn; i++) {\n prevDatum = sortedData[i - 1];\n nextDatum = sortedData[i];\n\n if (nextDatum === prevDatum) {\n continue;\n }\n\n minDiff = Math.min(minDiff, nextDatum - sortedData[i - 1]);\n processedCount++;\n }\n\n if (!processedCount) {\n minDiff = null;\n }\n this._cachedMinDiff = minDiff;\n\n return this._cachedMinDiff;\n }\n\n /**\n * Returns the format specified in the input schema while creating field.\n *\n * @public\n * @return {string} Returns the datetime format.\n */\n format () {\n return this.partialField.schema.format;\n }\n\n /**\n * Returns the formatted version of the underlying field data.\n *\n * @public\n * @override\n * @return {Array} Returns the formatted data.\n */\n formattedData () {\n const data = [];\n rowDiffsetIterator(this.rowDiffset, (i) => {\n const datum = this.partialField.data[i];\n if (datum instanceof InvalidAwareTypes) {\n data.push(datum);\n } else {\n data.push(DateTimeFormatter.formatAs(datum, this.format()));\n }\n });\n return data;\n }\n}\n\n","import Dimension from '../dimension';\n\n/**\n * Represents binned field subtype.\n *\n * @public\n * @class\n * @extends Dimension\n */\nexport default class Binned extends Dimension {\n /**\n * Calculates the corresponding field domain.\n *\n * @public\n * @override\n * @return {Array} Returns the last and first values of bins config array.\n */\n calculateDataDomain () {\n const binsArr = this.partialField.schema.bins;\n return [binsArr[0], binsArr[binsArr.length - 1]];\n }\n\n /**\n * Returns the bins config provided while creating the field instance.\n *\n * @public\n * @return {Array} Returns the bins array config.\n */\n bins () {\n return this.partialField.schema.bins;\n }\n}\n","import { formatNumber } from '../../utils';\nimport { defaultReducerName } from '../../operator/group-by-function';\nimport Field from '../field';\n\n/**\n * Represents measure field type.\n *\n * @public\n * @class\n * @extends Field\n */\nexport default class Measure extends Field {\n /**\n * Returns the domain for the measure field.\n *\n * @override\n * @public\n * @return {any} Returns the calculated domain.\n */\n domain () {\n if (!this._cachedDomain) {\n this._cachedDomain = this.calculateDataDomain();\n }\n return this._cachedDomain;\n }\n\n /**\n * Returns the unit of the measure field.\n *\n * @public\n * @return {string} Returns unit of the field.\n */\n unit () {\n return this.partialField.schema.unit;\n }\n\n /**\n * Returns the aggregation function name of the measure field.\n *\n * @public\n * @return {string} Returns aggregation function name of the field.\n */\n defAggFn () {\n return this.partialField.schema.defAggFn || defaultReducerName;\n }\n\n /**\n * Returns the number format of the measure field.\n *\n * @public\n * @return {Function} Returns number format of the field.\n */\n numberFormat () {\n const { numberFormat } = this.partialField.schema;\n return numberFormat instanceof Function ? numberFormat : formatNumber;\n }\n\n /**\n * Calculates the corresponding field domain.\n *\n * @public\n * @abstract\n */\n calculateDataDomain () {\n throw new Error('Not yet implemented');\n }\n\n /**\n * Returns the formatted version of the underlying field data.\n *\n * @public\n * @override\n * @return {Array} Returns the formatted data.\n */\n formattedData () {\n return this.data();\n }\n}\n","import { rowDiffsetIterator } from '../../operator/row-diffset-iterator';\nimport { MeasureSubtype } from '../../enums';\nimport Measure from '../measure';\nimport InvalidAwareTypes from '../../invalid-aware-types';\n\n/**\n * Represents continuous field subtype.\n *\n * @public\n * @class\n * @extends Measure\n */\nexport default class Continuous extends Measure {\n /**\n * Returns the subtype of the field.\n *\n * @public\n * @override\n * @return {string} Returns the subtype of the field.\n */\n subtype () {\n return MeasureSubtype.CONTINUOUS;\n }\n\n /**\n * Calculates the corresponding field domain.\n *\n * @public\n * @override\n * @return {Array} Returns the min and max values.\n */\n calculateDataDomain () {\n let min = Number.POSITIVE_INFINITY;\n let max = Number.NEGATIVE_INFINITY;\n\n // here don't use this.data() as the iteration will be occurred two times on same data.\n rowDiffsetIterator(this.rowDiffset, (i) => {\n const datum = this.partialField.data[i];\n if (datum instanceof InvalidAwareTypes) {\n return;\n }\n\n if (datum < min) {\n min = datum;\n }\n if (datum > max) {\n max = datum;\n }\n });\n\n return [min, max];\n }\n}\n","/**\n * A interface to represent a parser which is responsible to parse the field.\n *\n * @public\n * @interface\n */\nexport default class FieldParser {\n /**\n * Parses a single value of a field and return the sanitized form.\n *\n * @public\n * @abstract\n */\n parse () {\n throw new Error('Not yet implemented');\n }\n}\n","import FieldParser from '../field-parser';\nimport InvalidAwareTypes from '../../../invalid-aware-types';\n\n/**\n * A FieldParser which parses the categorical values.\n *\n * @public\n * @class\n * @implements {FieldParser}\n */\nexport default class CategoricalParser extends FieldParser {\n /**\n * Parses a single value of a field and returns the stringified form.\n *\n * @public\n * @param {string|number} val - The value of the field.\n * @return {string} Returns the stringified value.\n */\n parse (val) {\n let result;\n // check if invalid date value\n if (!InvalidAwareTypes.isInvalid(val)) {\n result = String(val).trim();\n } else {\n result = InvalidAwareTypes.getInvalidType(val);\n }\n return result;\n }\n}\n","import { DateTimeFormatter } from '../../../utils';\nimport FieldParser from '../field-parser';\nimport InvalidAwareTypes from '../../../invalid-aware-types';\n\n/**\n * A FieldParser which parses the temporal values.\n *\n * @public\n * @class\n * @implements {FieldParser}\n */\nexport default class TemporalParser extends FieldParser {\n /**\n * Initialize a new instance.\n *\n * @public\n * @param {Object} schema - The schema object for the corresponding field.\n */\n constructor (schema) {\n super();\n this.schema = schema;\n this._dtf = new DateTimeFormatter(this.schema.format);\n }\n\n /**\n * Parses a single value of a field and returns the millisecond value.\n *\n * @public\n * @param {string|number} val - The value of the field.\n * @return {number} Returns the millisecond value.\n */\n parse (val) {\n let result;\n // check if invalid date value\n if (!InvalidAwareTypes.isInvalid(val)) {\n let nativeDate = this._dtf.getNativeDate(val);\n result = nativeDate ? nativeDate.getTime() : InvalidAwareTypes.NA;\n } else {\n result = InvalidAwareTypes.getInvalidType(val);\n }\n return result;\n }\n}\n","import FieldParser from '../field-parser';\nimport InvalidAwareTypes from '../../../invalid-aware-types';\n\n/**\n * A FieldParser which parses the binned values.\n *\n * @public\n * @class\n * @implements {FieldParser}\n */\nexport default class BinnedParser extends FieldParser {\n /**\n * Parses a single binned value of a field and returns the sanitized value.\n *\n * @public\n * @param {string} val - The value of the field.\n * @return {string} Returns the sanitized value.\n */\n parse (val) {\n const regex = /^\\s*([+-]?\\d+(?:\\.\\d+)?)\\s*-\\s*([+-]?\\d+(?:\\.\\d+)?)\\s*$/;\n val = String(val);\n let result;\n // check if invalid date value\n if (!InvalidAwareTypes.isInvalid(val)) {\n let matched = val.match(regex);\n result = matched ? `${Number.parseFloat(matched[1])}-${Number.parseFloat(matched[2])}`\n : InvalidAwareTypes.NA;\n } else {\n result = InvalidAwareTypes.getInvalidType(val);\n }\n return result;\n }\n}\n","import FieldParser from '../field-parser';\nimport InvalidAwareTypes from '../../../invalid-aware-types';\n\n/**\n * A FieldParser which parses the continuous values.\n *\n * @public\n * @class\n * @implements {FieldParser}\n */\nexport default class ContinuousParser extends FieldParser {\n /**\n * Parses a single value of a field and returns the number form.\n *\n * @public\n * @param {string|number} val - The value of the field.\n * @return {string} Returns the number value.\n */\n parse (val) {\n let result;\n // check if invalid date value\n if (!InvalidAwareTypes.isInvalid(val)) {\n let parsedVal = parseFloat(val, 10);\n result = Number.isNaN(parsedVal) ? InvalidAwareTypes.NA : parsedVal;\n } else {\n result = InvalidAwareTypes.getInvalidType(val);\n }\n return result;\n }\n}\n","/**\n * Stores the full data and the metadata of a field. It provides\n * a single source of data from which the future Field\n * instance can get a subset of it with a rowDiffset config.\n *\n * @class\n * @public\n */\nexport default class PartialField {\n /**\n * Initialize a new instance.\n *\n * @public\n * @param {string} name - The name of the field.\n * @param {Array} data - The data array.\n * @param {Object} schema - The schema object of the corresponding field.\n * @param {FieldParser} parser - The parser instance corresponding to that field.\n */\n constructor (name, data, schema, parser) {\n this.name = name;\n this.schema = schema;\n this.parser = parser;\n this.data = this._sanitize(data);\n }\n\n /**\n * Sanitizes the field data.\n *\n * @private\n * @param {Array} data - The actual input data.\n * @return {Array} Returns the sanitized data.\n */\n _sanitize (data) {\n return data.map(datum => this.parser.parse(datum));\n }\n}\n","import { FieldType, DimensionSubtype, MeasureSubtype } from './enums';\nimport {\n Categorical,\n Temporal,\n Binned,\n Continuous,\n CategoricalParser,\n TemporalParser,\n BinnedParser,\n ContinuousParser,\n PartialField\n} from './fields';\n\n/**\n * Creates a field instance according to the provided data and schema.\n *\n * @param {Array} data - The field data array.\n * @param {Object} schema - The field schema object.\n * @return {Field} Returns the newly created field instance.\n */\nfunction createUnitField(data, schema) {\n data = data || [];\n let partialField;\n\n switch (schema.type) {\n case FieldType.MEASURE:\n switch (schema.subtype) {\n case MeasureSubtype.CONTINUOUS:\n partialField = new PartialField(schema.name, data, schema, new ContinuousParser());\n return new Continuous(partialField, `0-${data.length - 1}`);\n default:\n partialField = new PartialField(schema.name, data, schema, new ContinuousParser());\n return new Continuous(partialField, `0-${data.length - 1}`);\n }\n case FieldType.DIMENSION:\n switch (schema.subtype) {\n case DimensionSubtype.CATEGORICAL:\n partialField = new PartialField(schema.name, data, schema, new CategoricalParser());\n return new Categorical(partialField, `0-${data.length - 1}`);\n case DimensionSubtype.TEMPORAL:\n partialField = new PartialField(schema.name, data, schema, new TemporalParser(schema));\n return new Temporal(partialField, `0-${data.length - 1}`);\n case DimensionSubtype.BINNED:\n partialField = new PartialField(schema.name, data, schema, new BinnedParser());\n return new Binned(partialField, `0-${data.length - 1}`);\n default:\n partialField = new PartialField(schema.name, data, schema, new CategoricalParser());\n return new Categorical(partialField, `0-${data.length - 1}`);\n }\n default:\n partialField = new PartialField(schema.name, data, schema, new CategoricalParser());\n return new Categorical(partialField, `0-${data.length - 1}`);\n }\n}\n\n\n/**\n * Creates a field instance from partialField and rowDiffset.\n *\n * @param {PartialField} partialField - The corresponding partial field.\n * @param {string} rowDiffset - The data subset config.\n * @return {Field} Returns the newly created field instance.\n */\nexport function createUnitFieldFromPartial(partialField, rowDiffset) {\n const { schema } = partialField;\n\n switch (schema.type) {\n case FieldType.MEASURE:\n switch (schema.subtype) {\n case MeasureSubtype.CONTINUOUS:\n return new Continuous(partialField, rowDiffset);\n default:\n return new Continuous(partialField, rowDiffset);\n }\n case FieldType.DIMENSION:\n switch (schema.subtype) {\n case DimensionSubtype.CATEGORICAL:\n return new Categorical(partialField, rowDiffset);\n case DimensionSubtype.TEMPORAL:\n return new Temporal(partialField, rowDiffset);\n case DimensionSubtype.BINNED:\n return new Binned(partialField, rowDiffset);\n default:\n return new Categorical(partialField, rowDiffset);\n }\n default:\n return new Categorical(partialField, rowDiffset);\n }\n}\n\n/**\n * Creates the field instances with input data and schema.\n *\n * @param {Array} dataColumn - The data array for fields.\n * @param {Array} schema - The schema array for fields.\n * @param {Array} headers - The array of header names.\n * @return {Array.} Returns an array of newly created field instances.\n */\nexport function createFields(dataColumn, schema, headers) {\n const headersObj = {};\n\n if (!(headers && headers.length)) {\n headers = schema.map(item => item.name);\n }\n\n headers.forEach((header, i) => {\n headersObj[header] = i;\n });\n\n return schema.map(item => createUnitField(dataColumn[headersObj[item.name]], item));\n}\n","import { DataFormat } from './enums';\n\nexport default {\n dataFormat: DataFormat.AUTO\n};\n","import { columnMajor } from '../utils';\n\n/**\n * Parses and converts data formatted in DSV array to a manageable internal format.\n *\n * @param {Array.} arr - A 2D array containing of the DSV data.\n * @param {Object} options - Option to control the behaviour of the parsing.\n * @param {boolean} [options.firstRowHeader=true] - Whether the first row of the dsv data is header or not.\n * @return {Array} Returns an array of headers and column major data.\n * @example\n *\n * // Sample input data:\n * const data = [\n * [\"a\", \"b\", \"c\"],\n * [1, 2, 3],\n * [4, 5, 6],\n * [7, 8, 9]\n * ];\n */\nfunction DSVArr (arr, options) {\n const defaultOption = {\n firstRowHeader: true,\n };\n options = Object.assign({}, defaultOption, options);\n\n let header;\n const columns = [];\n const push = columnMajor(columns);\n\n if (options.firstRowHeader) {\n // If header present then mutate the array.\n // Do in-place mutation to save space.\n header = arr.splice(0, 1)[0];\n } else {\n header = [];\n }\n\n arr.forEach(field => push(...field));\n\n return [header, columns];\n}\n\nexport default DSVArr;\n","var EOL = {},\n EOF = {},\n QUOTE = 34,\n NEWLINE = 10,\n RETURN = 13;\n\nfunction objectConverter(columns) {\n return new Function(\"d\", \"return {\" + columns.map(function(name, i) {\n return JSON.stringify(name) + \": d[\" + i + \"]\";\n }).join(\",\") + \"}\");\n}\n\nfunction customConverter(columns, f) {\n var object = objectConverter(columns);\n return function(row, i) {\n return f(object(row), i, columns);\n };\n}\n\n// Compute unique columns in order of discovery.\nfunction inferColumns(rows) {\n var columnSet = Object.create(null),\n columns = [];\n\n rows.forEach(function(row) {\n for (var column in row) {\n if (!(column in columnSet)) {\n columns.push(columnSet[column] = column);\n }\n }\n });\n\n return columns;\n}\n\nexport default function(delimiter) {\n var reFormat = new RegExp(\"[\\\"\" + delimiter + \"\\n\\r]\"),\n DELIMITER = delimiter.charCodeAt(0);\n\n function parse(text, f) {\n var convert, columns, rows = parseRows(text, function(row, i) {\n if (convert) return convert(row, i - 1);\n columns = row, convert = f ? customConverter(row, f) : objectConverter(row);\n });\n rows.columns = columns || [];\n return rows;\n }\n\n function parseRows(text, f) {\n var rows = [], // output rows\n N = text.length,\n I = 0, // current character index\n n = 0, // current line number\n t, // current token\n eof = N <= 0, // current token followed by EOF?\n eol = false; // current token followed by EOL?\n\n // Strip the trailing newline.\n if (text.charCodeAt(N - 1) === NEWLINE) --N;\n if (text.charCodeAt(N - 1) === RETURN) --N;\n\n function token() {\n if (eof) return EOF;\n if (eol) return eol = false, EOL;\n\n // Unescape quotes.\n var i, j = I, c;\n if (text.charCodeAt(j) === QUOTE) {\n while (I++ < N && text.charCodeAt(I) !== QUOTE || text.charCodeAt(++I) === QUOTE);\n if ((i = I) >= N) eof = true;\n else if ((c = text.charCodeAt(I++)) === NEWLINE) eol = true;\n else if (c === RETURN) { eol = true; if (text.charCodeAt(I) === NEWLINE) ++I; }\n return text.slice(j + 1, i - 1).replace(/\"\"/g, \"\\\"\");\n }\n\n // Find next delimiter or newline.\n while (I < N) {\n if ((c = text.charCodeAt(i = I++)) === NEWLINE) eol = true;\n else if (c === RETURN) { eol = true; if (text.charCodeAt(I) === NEWLINE) ++I; }\n else if (c !== DELIMITER) continue;\n return text.slice(j, i);\n }\n\n // Return last token before EOF.\n return eof = true, text.slice(j, N);\n }\n\n while ((t = token()) !== EOF) {\n var row = [];\n while (t !== EOL && t !== EOF) row.push(t), t = token();\n if (f && (row = f(row, n++)) == null) continue;\n rows.push(row);\n }\n\n return rows;\n }\n\n function format(rows, columns) {\n if (columns == null) columns = inferColumns(rows);\n return [columns.map(formatValue).join(delimiter)].concat(rows.map(function(row) {\n return columns.map(function(column) {\n return formatValue(row[column]);\n }).join(delimiter);\n })).join(\"\\n\");\n }\n\n function formatRows(rows) {\n return rows.map(formatRow).join(\"\\n\");\n }\n\n function formatRow(row) {\n return row.map(formatValue).join(delimiter);\n }\n\n function formatValue(text) {\n return text == null ? \"\"\n : reFormat.test(text += \"\") ? \"\\\"\" + text.replace(/\"/g, \"\\\"\\\"\") + \"\\\"\"\n : text;\n }\n\n return {\n parse: parse,\n parseRows: parseRows,\n format: format,\n formatRows: formatRows\n };\n}\n","import dsv from \"./dsv\";\n\nvar csv = dsv(\",\");\n\nexport var csvParse = csv.parse;\nexport var csvParseRows = csv.parseRows;\nexport var csvFormat = csv.format;\nexport var csvFormatRows = csv.formatRows;\n","import dsv from \"./dsv\";\n\nvar tsv = dsv(\"\\t\");\n\nexport var tsvParse = tsv.parse;\nexport var tsvParseRows = tsv.parseRows;\nexport var tsvFormat = tsv.format;\nexport var tsvFormatRows = tsv.formatRows;\n","import { dsvFormat as d3Dsv } from 'd3-dsv';\nimport DSVArr from './dsv-arr';\n\n/**\n * Parses and converts data formatted in DSV string to a manageable internal format.\n *\n * @todo Support to be given for https://tools.ietf.org/html/rfc4180.\n * @todo Sample implementation https://github.com/knrz/CSV.js/.\n *\n * @param {string} str - The input DSV string.\n * @param {Object} options - Option to control the behaviour of the parsing.\n * @param {boolean} [options.firstRowHeader=true] - Whether the first row of the dsv string data is header or not.\n * @param {string} [options.fieldSeparator=\",\"] - The separator of two consecutive field.\n * @return {Array} Returns an array of headers and column major data.\n * @example\n *\n * // Sample input data:\n * const data = `\n * a,b,c\n * 1,2,3\n * 4,5,6\n * 7,8,9\n * `\n */\nfunction DSVStr (str, options) {\n const defaultOption = {\n firstRowHeader: true,\n fieldSeparator: ','\n };\n options = Object.assign({}, defaultOption, options);\n\n const dsv = d3Dsv(options.fieldSeparator);\n return DSVArr(dsv.parseRows(str), options);\n}\n\nexport default DSVStr;\n","import { columnMajor } from '../utils';\n\n/**\n * Parses and converts data formatted in JSON to a manageable internal format.\n *\n * @param {Array.} arr - The input data formatted in JSON.\n * @return {Array.} Returns an array of headers and column major data.\n * @example\n *\n * // Sample input data:\n * const data = [\n * {\n * \"a\": 1,\n * \"b\": 2,\n * \"c\": 3\n * },\n * {\n * \"a\": 4,\n * \"b\": 5,\n * \"c\": 6\n * },\n * {\n * \"a\": 7,\n * \"b\": 8,\n * \"c\": 9\n * }\n * ];\n */\nfunction FlatJSON (arr) {\n const header = {};\n let i = 0;\n let insertionIndex;\n const columns = [];\n const push = columnMajor(columns);\n\n arr.forEach((item) => {\n const fields = [];\n for (let key in item) {\n if (key in header) {\n insertionIndex = header[key];\n } else {\n header[key] = i++;\n insertionIndex = i - 1;\n }\n fields[insertionIndex] = item[key];\n }\n push(...fields);\n });\n\n return [Object.keys(header), columns];\n}\n\nexport default FlatJSON;\n","import FlatJSON from './flat-json';\nimport DSVArr from './dsv-arr';\nimport DSVStr from './dsv-str';\nimport { detectDataFormat } from '../utils';\n\n/**\n * Parses the input data and detect the format automatically.\n *\n * @param {string|Array} data - The input data.\n * @param {Object} options - An optional config specific to data format.\n * @return {Array.} Returns an array of headers and column major data.\n */\nfunction Auto (data, options) {\n const converters = { FlatJSON, DSVStr, DSVArr };\n const dataFormat = detectDataFormat(data);\n\n if (!dataFormat) {\n throw new Error('Couldn\\'t detect the data format');\n }\n\n return converters[dataFormat](data, options);\n}\n\nexport default Auto;\n","import { FieldType, FilteringMode, DimensionSubtype, MeasureSubtype, DataFormat } from './enums';\nimport fieldStore from './field-store';\nimport Value from './value';\nimport {\n rowDiffsetIterator\n} from './operator';\nimport { DM_DERIVATIVES, LOGICAL_OPERATORS } from './constants';\nimport { createFields, createUnitFieldFromPartial } from './field-creator';\nimport defaultConfig from './default-config';\nimport * as converter from './converter';\nimport { extend2, detectDataFormat } from './utils';\n\n/**\n * Prepares the selection data.\n */\nfunction prepareSelectionData (fields, i) {\n const resp = {};\n for (let field of fields) {\n resp[field.name()] = new Value(field.partialField.data[i], field);\n }\n return resp;\n}\n\nexport function prepareJoinData (fields) {\n const resp = {};\n Object.keys(fields).forEach((key) => { resp[key] = new Value(fields[key], key); });\n return resp;\n}\n\nexport const updateFields = ([rowDiffset, colIdentifier], partialFieldspace, fieldStoreName) => {\n let collID = colIdentifier.length ? colIdentifier.split(',') : [];\n let partialFieldMap = partialFieldspace.fieldsObj();\n let newFields = collID.map(coll => createUnitFieldFromPartial(partialFieldMap[coll].partialField, rowDiffset));\n return fieldStore.createNamespace(newFields, fieldStoreName);\n};\n\nexport const persistDerivation = (model, operation, config = {}, criteriaFn) => {\n let derivative;\n if (operation !== DM_DERIVATIVES.COMPOSE) {\n derivative = {\n op: operation,\n meta: config,\n criteria: criteriaFn\n };\n model._derivation.push(derivative);\n }\n else {\n derivative = [...criteriaFn];\n model._derivation.length = 0;\n model._derivation.push(...derivative);\n }\n};\n\nexport const selectHelper = (rowDiffset, fields, selectFn, config, sourceDm) => {\n const newRowDiffSet = [];\n let lastInsertedValue = -1;\n let { mode } = config;\n let li;\n let cachedStore = {};\n let cloneProvider = () => sourceDm.detachedRoot();\n const selectorHelperFn = index => selectFn(\n prepareSelectionData(fields, index),\n index,\n cloneProvider,\n cachedStore\n );\n\n let checker;\n if (mode === FilteringMode.INVERSE) {\n checker = index => !selectorHelperFn(index);\n } else {\n checker = index => selectorHelperFn(index);\n }\n\n rowDiffsetIterator(rowDiffset, (i) => {\n if (checker(i)) {\n if (lastInsertedValue !== -1 && i === (lastInsertedValue + 1)) {\n li = newRowDiffSet.length - 1;\n newRowDiffSet[li] = `${newRowDiffSet[li].split('-')[0]}-${i}`;\n } else {\n newRowDiffSet.push(`${i}`);\n }\n lastInsertedValue = i;\n }\n });\n return newRowDiffSet.join(',');\n};\n\nexport const filterPropagationModel = (model, propModels, config = {}) => {\n const operation = config.operation || LOGICAL_OPERATORS.AND;\n const filterByMeasure = config.filterByMeasure || false;\n let fns = [];\n if (!propModels.length) {\n fns = [() => false];\n } else {\n fns = propModels.map(propModel => ((dataModel) => {\n const dataObj = dataModel.getData();\n const schema = dataObj.schema;\n const fieldsConfig = dataModel.getFieldsConfig();\n const fieldsSpace = dataModel.getFieldspace().fieldsObj();\n const data = dataObj.data;\n const domain = Object.values(fieldsConfig).reduce((acc, v) => {\n acc[v.def.name] = fieldsSpace[v.def.name].domain();\n return acc;\n }, {});\n\n return (fields) => {\n const include = !data.length ? false : data.some(row => schema.every((propField) => {\n if (!(propField.name in fields)) {\n return true;\n }\n const value = fields[propField.name].valueOf();\n if (filterByMeasure && propField.type === FieldType.MEASURE) {\n return value >= domain[propField.name][0] && value <= domain[propField.name][1];\n }\n\n if (propField.type !== FieldType.DIMENSION) {\n return true;\n }\n const idx = fieldsConfig[propField.name].index;\n return row[idx] === fields[propField.name].valueOf();\n }));\n return include;\n };\n })(propModel));\n }\n\n let filteredModel;\n if (operation === LOGICAL_OPERATORS.AND) {\n const clonedModel = model.clone(false, false);\n filteredModel = clonedModel.select(fields => fns.every(fn => fn(fields)), {\n saveChild: false,\n mode: FilteringMode.ALL\n });\n } else {\n filteredModel = model.clone(false, false).select(fields => fns.some(fn => fn(fields)), {\n mode: FilteringMode.ALL,\n saveChild: false\n });\n }\n\n return filteredModel;\n};\n\nexport const cloneWithSelect = (sourceDm, selectFn, selectConfig, cloneConfig) => {\n const cloned = sourceDm.clone(cloneConfig.saveChild);\n const rowDiffset = selectHelper(\n cloned._rowDiffset,\n cloned.getPartialFieldspace().fields,\n selectFn,\n selectConfig,\n sourceDm\n );\n cloned._rowDiffset = rowDiffset;\n cloned.__calculateFieldspace().calculateFieldsConfig();\n\n persistDerivation(cloned, DM_DERIVATIVES.SELECT, { config: selectConfig }, selectFn);\n\n return cloned;\n};\n\nexport const cloneWithProject = (sourceDm, projField, config, allFields) => {\n const cloned = sourceDm.clone(config.saveChild);\n let projectionSet = projField;\n if (config.mode === FilteringMode.INVERSE) {\n projectionSet = allFields.filter(fieldName => projField.indexOf(fieldName) === -1);\n }\n // cloned._colIdentifier = sourceDm._colIdentifier.split(',')\n // .filter(coll => projectionSet.indexOf(coll) !== -1).join();\n cloned._colIdentifier = projectionSet.join(',');\n cloned.__calculateFieldspace().calculateFieldsConfig();\n\n persistDerivation(\n cloned,\n DM_DERIVATIVES.PROJECT,\n { projField, config, actualProjField: projectionSet },\n null\n );\n\n return cloned;\n};\n\nexport const sanitizeUnitSchema = (unitSchema) => {\n // Do deep clone of the unit schema as the user might change it later.\n unitSchema = extend2({}, unitSchema);\n if (!unitSchema.type) {\n unitSchema.type = FieldType.DIMENSION;\n }\n\n if (!unitSchema.subtype) {\n switch (unitSchema.type) {\n case FieldType.MEASURE:\n unitSchema.subtype = MeasureSubtype.CONTINUOUS;\n break;\n default:\n case FieldType.DIMENSION:\n unitSchema.subtype = DimensionSubtype.CATEGORICAL;\n break;\n }\n }\n\n return unitSchema;\n};\n\nexport const sanitizeSchema = schema => schema.map(unitSchema => sanitizeUnitSchema(unitSchema));\n\nexport const updateData = (relation, data, schema, options) => {\n schema = sanitizeSchema(schema);\n options = Object.assign(Object.assign({}, defaultConfig), options);\n const converterFn = converter[options.dataFormat];\n\n if (!(converterFn && typeof converterFn === 'function')) {\n throw new Error(`No converter function found for ${options.dataFormat} format`);\n }\n\n const [header, formattedData] = converterFn(data, options);\n const fieldArr = createFields(formattedData, schema, header);\n\n // This will create a new fieldStore with the fields\n const nameSpace = fieldStore.createNamespace(fieldArr, options.name);\n relation._partialFieldspace = nameSpace;\n // If data is provided create the default colIdentifier and rowDiffset\n relation._rowDiffset = formattedData.length && formattedData[0].length ? `0-${formattedData[0].length - 1}` : '';\n relation._colIdentifier = (schema.map(_ => _.name)).join();\n relation._dataFormat = options.dataFormat === DataFormat.AUTO ? detectDataFormat(data) : options.dataFormat;\n return relation;\n};\n\nexport const fieldInSchema = (schema, field) => {\n let i = 0;\n\n for (; i < schema.length; ++i) {\n if (field === schema[i].name) {\n return {\n type: schema[i].subtype || schema[i].type,\n index: i\n };\n }\n }\n return null;\n};\n\n\nexport const getOperationArguments = (child) => {\n const derivation = child._derivation;\n let params = [];\n let operation;\n if (derivation && derivation.length === 1) {\n operation = derivation[0].op;\n switch (operation) {\n case DM_DERIVATIVES.SELECT:\n params = [derivation[0].criteria];\n break;\n case DM_DERIVATIVES.PROJECT:\n params = [derivation[0].meta.actualProjField];\n break;\n case DM_DERIVATIVES.GROUPBY:\n operation = 'groupBy';\n params = [derivation[0].meta.groupByString.split(','), derivation[0].criteria];\n break;\n default:\n break;\n }\n }\n\n return {\n operation,\n params\n };\n};\n\nconst applyExistingOperationOnModel = (propModel, dataModel) => {\n const { operation, params } = getOperationArguments(dataModel);\n let selectionModel = propModel[0];\n let rejectionModel = propModel[1];\n if (operation && params.length) {\n selectionModel = propModel[0][operation](...params, {\n saveChild: false\n });\n rejectionModel = propModel[1][operation](...params, {\n saveChild: false\n });\n }\n return [selectionModel, rejectionModel];\n};\n\nconst getFilteredModel = (propModel, path) => {\n for (let i = 0, len = path.length; i < len; i++) {\n const model = path[i];\n propModel = applyExistingOperationOnModel(propModel, model);\n }\n return propModel;\n};\n\nconst propagateIdentifiers = (dataModel, propModel, config = {}, propModelInf = {}) => {\n const nonTraversingModel = propModelInf.nonTraversingModel;\n const excludeModels = propModelInf.excludeModels || [];\n\n if (dataModel === nonTraversingModel) {\n return;\n }\n\n const propagate = excludeModels.length ? excludeModels.indexOf(dataModel) === -1 : true;\n\n propagate && dataModel.handlePropagation(propModel, config);\n\n const children = dataModel._children;\n children.forEach((child) => {\n let [selectionModel, rejectionModel] = applyExistingOperationOnModel(propModel, child);\n propagateIdentifiers(child, [selectionModel, rejectionModel], config, propModelInf);\n });\n};\n\nexport const getRootGroupByModel = (model) => {\n if (model._parent && model._derivation.find(d => d.op !== 'group')) {\n return getRootGroupByModel(model._parent);\n }\n return model;\n};\n\nexport const getRootDataModel = (model) => {\n while (model._parent) {\n model = model._parent;\n }\n return model;\n};\n\nexport const getPathToRootModel = (model, path = []) => {\n while (model._parent) {\n path.push(model);\n model = model._parent;\n }\n return path;\n};\n\nexport const propagateToAllDataModels = (identifiers, rootModels, propagationInf, config) => {\n let criteria;\n let propModel;\n const { propagationNameSpace, propagateToSource } = propagationInf;\n const propagationSourceId = propagationInf.sourceId;\n const propagateInterpolatedValues = config.propagateInterpolatedValues;\n const filterFn = (entry) => {\n const filter = config.filterFn || (() => true);\n return filter(entry, config);\n };\n\n let criterias = [];\n\n if (identifiers === null && config.persistent !== true) {\n criterias = [{\n criteria: []\n }];\n } else {\n let actionCriterias = Object.values(propagationNameSpace.mutableActions);\n if (propagateToSource !== false) {\n actionCriterias = actionCriterias.filter(d => d.config.sourceId !== propagationSourceId);\n }\n\n const filteredCriteria = actionCriterias.filter(filterFn).map(action => action.config.criteria);\n\n const excludeModels = [];\n\n if (propagateToSource !== false) {\n const sourceActionCriterias = Object.values(propagationNameSpace.mutableActions);\n\n sourceActionCriterias.forEach((actionInf) => {\n const actionConf = actionInf.config;\n if (actionConf.applyOnSource === false && actionConf.action === config.action &&\n actionConf.sourceId !== propagationSourceId) {\n excludeModels.push(actionInf.model);\n criteria = sourceActionCriterias.filter(d => d !== actionInf).map(d => d.config.criteria);\n criteria.length && criterias.push({\n criteria,\n models: actionInf.model,\n path: getPathToRootModel(actionInf.model)\n });\n }\n });\n }\n\n\n criteria = [].concat(...[...filteredCriteria, identifiers]).filter(d => d !== null);\n criterias.push({\n criteria,\n excludeModels: [...excludeModels, ...config.excludeModels || []]\n });\n }\n\n const rootModel = rootModels.model;\n\n const propConfig = Object.assign({\n sourceIdentifiers: identifiers,\n propagationSourceId\n }, config);\n\n const rootGroupByModel = rootModels.groupByModel;\n if (propagateInterpolatedValues && rootGroupByModel) {\n propModel = filterPropagationModel(rootGroupByModel, criteria, {\n filterByMeasure: propagateInterpolatedValues\n });\n propagateIdentifiers(rootGroupByModel, propModel, propConfig);\n }\n\n criterias.forEach((inf) => {\n const propagationModel = filterPropagationModel(rootModel, inf.criteria);\n const path = inf.path;\n\n if (path) {\n const filteredModel = getFilteredModel(propagationModel, path.reverse());\n inf.models.handlePropagation(filteredModel, propConfig);\n } else {\n propagateIdentifiers(rootModel, propagationModel, propConfig, {\n excludeModels: inf.excludeModels,\n nonTraversingModel: propagateInterpolatedValues && rootGroupByModel\n });\n }\n });\n};\n\nexport const propagateImmutableActions = (propagationNameSpace, rootModels, propagationInf) => {\n const immutableActions = propagationNameSpace.immutableActions;\n\n for (const action in immutableActions) {\n const actionInf = immutableActions[action];\n const actionConf = actionInf.config;\n const propagationSourceId = propagationInf.config.sourceId;\n const filterImmutableAction = propagationInf.propConfig.filterImmutableAction ?\n propagationInf.propConfig.filterImmutableAction(actionConf, propagationInf.config) : true;\n if (actionConf.sourceId !== propagationSourceId && filterImmutableAction) {\n const criteriaModel = actionConf.criteria;\n propagateToAllDataModels(criteriaModel, rootModels, {\n propagationNameSpace,\n propagateToSource: false,\n sourceId: propagationSourceId\n }, actionConf);\n }\n }\n};\n\nexport const addToPropNamespace = (propagationNameSpace, config = {}, model) => {\n let sourceNamespace;\n const isMutableAction = config.isMutableAction;\n const criteria = config.criteria;\n const key = `${config.action}-${config.sourceId}`;\n\n if (isMutableAction) {\n sourceNamespace = propagationNameSpace.mutableActions;\n } else {\n sourceNamespace = propagationNameSpace.immutableActions;\n }\n\n if (criteria === null) {\n delete sourceNamespace[key];\n } else {\n sourceNamespace[key] = {\n model,\n config\n };\n }\n\n return this;\n};\n","import { FilteringMode } from './enums';\nimport { getUniqueId } from './utils';\nimport { persistDerivation, updateFields, cloneWithSelect, cloneWithProject, updateData } from './helper';\nimport { crossProduct, difference, naturalJoinFilter, union } from './operator';\nimport { DM_DERIVATIVES } from './constants';\n\n/**\n * Relation provides the definitions of basic operators of relational algebra like *selection*, *projection*, *union*,\n * *difference* etc.\n *\n * It is extended by {@link DataModel} to inherit the functionalities of relational algebra concept.\n *\n * @class\n * @public\n * @module Relation\n * @namespace DataModel\n */\nclass Relation {\n\n /**\n * Creates a new Relation instance by providing underlying data and schema.\n *\n * @private\n *\n * @param {Object | string | Relation} data - The input tabular data in dsv or json format or\n * an existing Relation instance object.\n * @param {Array} schema - An array of data schema.\n * @param {Object} [options] - The optional options.\n */\n constructor (...params) {\n let source;\n\n this._parent = null;\n this._derivation = [];\n this._children = [];\n\n if (params.length === 1 && ((source = params[0]) instanceof Relation)) {\n // parent datamodel was passed as part of source\n this._colIdentifier = source._colIdentifier;\n this._rowDiffset = source._rowDiffset;\n this._dataFormat = source._dataFormat;\n this._parent = source;\n this._partialFieldspace = this._parent._partialFieldspace;\n this._fieldStoreName = getUniqueId();\n this.__calculateFieldspace().calculateFieldsConfig();\n } else {\n updateData(this, ...params);\n this._fieldStoreName = this._partialFieldspace.name;\n this.__calculateFieldspace().calculateFieldsConfig();\n this._propagationNameSpace = {\n mutableActions: {},\n immutableActions: {}\n };\n }\n }\n\n /**\n * Retrieves the {@link Schema | schema} details for every {@link Field | field} as an array.\n *\n * @public\n *\n * @return {Array.} Array of fields schema.\n * ```\n * [\n * { name: 'Name', type: 'dimension' },\n * { name: 'Miles_per_Gallon', type: 'measure', numberFormat: (val) => `${val} miles / gallon` },\n * { name: 'Cylinder', type: 'dimension' },\n * { name: 'Displacement', type: 'measure', defAggFn: 'max' },\n * { name: 'HorsePower', type: 'measure', defAggFn: 'max' },\n * { name: 'Weight_in_lbs', type: 'measure', defAggFn: 'avg', },\n * { name: 'Acceleration', type: 'measure', defAggFn: 'avg' },\n * { name: 'Year', type: 'dimension', subtype: 'datetime', format: '%Y' },\n * { name: 'Origin' }\n * ]\n * ```\n */\n getSchema () {\n return this.getFieldspace().fields.map(d => d.schema());\n }\n\n /**\n * Returns the name of the {@link DataModel} instance. If no name was specified during {@link DataModel}\n * initialization, then it returns a auto-generated name.\n *\n * @public\n *\n * @return {string} Name of the DataModel instance.\n */\n getName() {\n return this._fieldStoreName;\n }\n\n getFieldspace () {\n return this._fieldspace;\n }\n\n __calculateFieldspace () {\n this._fieldspace = updateFields([this._rowDiffset, this._colIdentifier],\n this.getPartialFieldspace(), this._fieldStoreName);\n return this;\n }\n\n getPartialFieldspace () {\n return this._partialFieldspace;\n }\n\n /**\n * Performs {@link link_of_cross_product | cross-product} between two {@link DataModel} instances and returns a\n * new {@link DataModel} instance containing the results. This operation is also called theta join.\n *\n * Cross product takes two set and create one set where each value of one set is paired with each value of another\n * set.\n *\n * This method takes an optional predicate which filters the generated result rows. If the predicate returns true\n * the combined row is included in the resulatant table.\n *\n * @example\n * let originDM = dm.project(['Origin','Origin_Formal_Name']);\n * let carsDM = dm.project(['Name','Miles_per_Gallon','Origin'])\n *\n * console.log(carsDM.join(originDM)));\n *\n * console.log(carsDM.join(originDM,\n * obj => obj.[originDM.getName()].Origin === obj.[carsDM.getName()].Origin));\n *\n * @text\n * This is chained version of `join` operator. `join` can also be used as\n * {@link link_to_join_op | functional operator}.\n *\n * @public\n *\n * @param {DataModel} joinWith - The DataModel to be joined with the current instance DataModel.\n * @param {SelectionPredicate} filterFn - The predicate function that will filter the result of the crossProduct.\n *\n * @return {DataModel} New DataModel instance created after joining.\n */\n join (joinWith, filterFn) {\n return crossProduct(this, joinWith, filterFn);\n }\n\n /**\n * {@link natural_join | Natural join} is a special kind of cross-product join where filtering of rows are performed\n * internally by resolving common fields are from both table and the rows with common value are included.\n *\n * @example\n * let originDM = dm.project(['Origin','Origin_Formal_Name']);\n * let carsDM = dm.project(['Name','Miles_per_Gallon','Origin'])\n *\n * console.log(carsDM.naturalJoin(originDM));\n *\n * @text\n * This is chained version of `naturalJoin` operator. `naturalJoin` can also be used as\n * {@link link_to_join_op | functional operator}.\n *\n * @public\n *\n * @param {DataModel} joinWith - The DataModel with which the current instance of DataModel on which the method is\n * called will be joined.\n * @return {DataModel} New DataModel instance created after joining.\n */\n naturalJoin (joinWith) {\n return crossProduct(this, joinWith, naturalJoinFilter(this, joinWith), true);\n }\n\n /**\n * {@link link_to_union | Union} operation can be termed as vertical stacking of all rows from both the DataModel\n * instances, provided that both of the {@link DataModel} instances should have same column names.\n *\n * @example\n * console.log(EuropeanMakerDM.union(USAMakerDM));\n *\n * @text\n * This is chained version of `naturalJoin` operator. `naturalJoin` can also be used as\n * {@link link_to_join_op | functional operator}.\n *\n * @public\n *\n * @param {DataModel} unionWith - DataModel instance for which union has to be applied with the instance on which\n * the method is called\n *\n * @return {DataModel} New DataModel instance with the result of the operation\n */\n union (unionWith) {\n return union(this, unionWith);\n }\n\n /**\n * {@link link_to_difference | Difference } operation only include rows which are present in the datamodel on which\n * it was called but not on the one passed as argument.\n *\n * @example\n * console.log(highPowerDM.difference(highExpensiveDM));\n *\n * @text\n * This is chained version of `naturalJoin` operator. `naturalJoin` can also be used as\n * {@link link_to_join_op | functional operator}.\n *\n * @public\n *\n * @param {DataModel} differenceWith - DataModel instance for which difference has to be applied with the instance\n * on which the method is called\n * @return {DataModel} New DataModel instance with the result of the operation\n */\n difference (differenceWith) {\n return difference(this, differenceWith);\n }\n\n /**\n * {@link link_to_selection | Selection} is a row filtering operation. It expects a predicate and an optional mode\n * which control which all rows should be included in the resultant DataModel instance.\n *\n * {@link SelectionPredicate} is a function which returns a boolean value. For selection operation the selection\n * function is called for each row of DataModel instance with the current row passed as argument.\n *\n * After executing {@link SelectionPredicate} the rows are labeled as either an entry of selection set or an entry\n * of rejection set.\n *\n * {@link FilteringMode} operates on the selection and rejection set to determine which one would reflect in the\n * resultant datamodel.\n *\n * @warning\n * Selection and rejection set is only a logical idea for concept explanation purpose.\n *\n * @example\n * // with selection mode NORMAL:\n * const normDt = dt.select(fields => fields.Origin.value === \"USA\")\n * console.log(normDt));\n *\n * // with selection mode INVERSE:\n * const inverDt = dt.select(fields => fields.Origin.value === \"USA\", { mode: DataModel.FilteringMode.INVERSE })\n * console.log(inverDt);\n *\n * // with selection mode ALL:\n * const dtArr = dt.select(fields => fields.Origin.value === \"USA\", { mode: DataModel.FilteringMode.ALL })\n * // print the selected parts\n * console.log(dtArr[0]);\n * // print the inverted parts\n * console.log(dtArr[1]);\n *\n * @text\n * This is chained version of `select` operator. `select` can also be used as\n * {@link link_to_join_op | functional operator}.\n *\n * @public\n *\n * @param {Function} selectFn - The predicate function which is called for each row with the current row.\n * ```\n * function (row, i, cloneProvider, store) { ... }\n * ```\n * @param {Object} config - The configuration object to control the inclusion exclusion of a row in resultant\n * DataModel instance.\n * @param {FilteringMode} [config.mode=FilteringMode.NORMAL] - The mode of the selection.\n * @return {DataModel} Returns the new DataModel instance(s) after operation.\n */\n select (selectFn, config) {\n const defConfig = {\n mode: FilteringMode.NORMAL,\n saveChild: true\n };\n config = Object.assign({}, defConfig, config);\n\n const cloneConfig = { saveChild: config.saveChild };\n let oDm;\n\n if (config.mode === FilteringMode.ALL) {\n const selectDm = cloneWithSelect(\n this,\n selectFn,\n { mode: FilteringMode.NORMAL },\n cloneConfig\n );\n const rejectDm = cloneWithSelect(\n this,\n selectFn,\n { mode: FilteringMode.INVERSE },\n cloneConfig\n );\n oDm = [selectDm, rejectDm];\n } else {\n oDm = cloneWithSelect(\n this,\n selectFn,\n config,\n cloneConfig\n );\n }\n\n return oDm;\n }\n\n /**\n * Retrieves a boolean value if the current {@link DataModel} instance has data.\n *\n * @example\n * const schema = [\n * { name: 'CarName', type: 'dimension' },\n * { name: 'HorsePower', type: 'measure' },\n * { name: \"Origin\", type: 'dimension' }\n * ];\n * const data = [];\n *\n * const dt = new DataModel(data, schema);\n * console.log(dt.isEmpty());\n *\n * @public\n *\n * @return {Boolean} True if the datamodel has no data, otherwise false.\n */\n isEmpty () {\n return !this._rowDiffset.length || !this._colIdentifier.length;\n }\n\n /**\n * Creates a clone from the current DataModel instance with child parent relationship.\n *\n * @private\n * @param {boolean} [saveChild=true] - Whether the cloned instance would be recorded in the parent instance.\n * @return {DataModel} - Returns the newly cloned DataModel instance.\n */\n clone (saveChild = true, linkParent = true) {\n let retDataModel;\n if (linkParent === false) {\n const dataObj = this.getData({\n getAllFields: true\n });\n const data = dataObj.data;\n const schema = dataObj.schema;\n const jsonData = data.map((row) => {\n const rowObj = {};\n schema.forEach((field, i) => {\n rowObj[field.name] = row[i];\n });\n return rowObj;\n });\n retDataModel = new this.constructor(jsonData, schema);\n }\n else {\n retDataModel = new this.constructor(this);\n }\n\n if (saveChild) {\n this._children.push(retDataModel);\n }\n return retDataModel;\n }\n\n /**\n * {@link Projection} is filter column (field) operation. It expects list of fields' name and either include those\n * or exclude those based on {@link FilteringMode} on the resultant variable.\n *\n * Projection expects array of fields name based on which it creates the selection and rejection set. All the field\n * whose name is present in array goes in selection set and rest of the fields goes in rejection set.\n *\n * {@link FilteringMode} operates on the selection and rejection set to determine which one would reflect in the\n * resulatant datamodel.\n *\n * @warning\n * Selection and rejection set is only a logical idea for concept explanation purpose.\n *\n * @example\n * const dm = new DataModel(data, schema);\n *\n * // with projection mode NORMAL:\n * const normDt = dt.project([\"Name\", \"HorsePower\"]);\n * console.log(normDt.getData());\n *\n * // with projection mode INVERSE:\n * const inverDt = dt.project([\"Name\", \"HorsePower\"], { mode: DataModel.FilteringMode.INVERSE })\n * console.log(inverDt.getData());\n *\n * // with selection mode ALL:\n * const dtArr = dt.project([\"Name\", \"HorsePower\"], { mode: DataModel.FilteringMode.ALL })\n * // print the normal parts\n * console.log(dtArr[0].getData());\n * // print the inverted parts\n * console.log(dtArr[1].getData());\n *\n * @text\n * This is chained version of `select` operator. `select` can also be used as\n * {@link link_to_join_op | functional operator}.\n *\n * @public\n *\n * @param {Array.} projField - An array of column names in string or regular expression.\n * @param {Object} [config] - An optional config to control the creation of new DataModel\n * @param {FilteringMode} [config.mode=FilteringMode.NORMAL] - Mode of the projection\n *\n * @return {DataModel} Returns the new DataModel instance after operation.\n */\n project (projField, config) {\n const defConfig = {\n mode: FilteringMode.NORMAL,\n saveChild: true\n };\n config = Object.assign({}, defConfig, config);\n const fieldConfig = this.getFieldsConfig();\n const allFields = Object.keys(fieldConfig);\n const { mode } = config;\n\n let normalizedProjField = projField.reduce((acc, field) => {\n if (field.constructor.name === 'RegExp') {\n acc.push(...allFields.filter(fieldName => fieldName.search(field) !== -1));\n } else if (field in fieldConfig) {\n acc.push(field);\n }\n return acc;\n }, []);\n\n normalizedProjField = Array.from(new Set(normalizedProjField)).map(field => field.trim());\n let dataModel;\n\n if (mode === FilteringMode.ALL) {\n let projectionClone = cloneWithProject(this, normalizedProjField, {\n mode: FilteringMode.NORMAL,\n saveChild: config.saveChild\n }, allFields);\n let rejectionClone = cloneWithProject(this, normalizedProjField, {\n mode: FilteringMode.INVERSE,\n saveChild: config.saveChild\n }, allFields);\n dataModel = [projectionClone, rejectionClone];\n } else {\n let projectionClone = cloneWithProject(this, normalizedProjField, config, allFields);\n dataModel = projectionClone;\n }\n\n return dataModel;\n }\n\n getFieldsConfig () {\n return this._fieldConfig;\n }\n\n calculateFieldsConfig () {\n this._fieldConfig = this._fieldspace.fields.reduce((acc, fieldDef, i) => {\n acc[fieldDef.name()] = {\n index: i,\n def: { name: fieldDef.name(), type: fieldDef.type(), subtype: fieldDef.subtype() }\n };\n return acc;\n }, {});\n return this;\n }\n\n\n /**\n * Frees up the resources associated with the current DataModel instance and breaks all the links instance has in\n * the DAG.\n *\n * @public\n */\n dispose () {\n this._parent.removeChild(this);\n this._parent = null;\n }\n\n /**\n * Removes the specified child {@link DataModel} from the child list of the current {@link DataModel} instance.\n *\n * @example\n * const schema = [\n * { name: 'Name', type: 'dimension' },\n * { name: 'HorsePower', type: 'measure' },\n * { name: \"Origin\", type: 'dimension' }\n * ];\n *\n * const data = [\n * { Name: \"chevrolet chevelle malibu\", Horsepower: 130, Origin: \"USA\" },\n * { Name: \"citroen ds-21 pallas\", Horsepower: 115, Origin: \"Europe\" },\n * { Name: \"datsun pl510\", Horsepower: 88, Origin: \"Japan\" },\n * { Name: \"amc rebel sst\", Horsepower: 150, Origin: \"USA\"},\n * ]\n *\n * const dt = new DataModel(data, schema);\n *\n * const dt2 = dt.select(fields => fields.Origin.value === \"USA\")\n * dt.removeChild(dt2);\n *\n * @private\n *\n * @param {DataModel} child - Delegates the parent to remove this child.\n */\n removeChild (child) {\n let idx = this._children.findIndex(sibling => sibling === child);\n idx !== -1 ? this._children.splice(idx, 1) : true;\n }\n\n /**\n * Adds the specified {@link DataModel} as a parent for the current {@link DataModel} instance.\n *\n * The optional criteriaQueue is an array containing the history of transaction performed on parent\n * {@link DataModel} to get the current one.\n *\n * @param {DataModel} parent - The datamodel instance which will act as parent.\n * @param {Array} criteriaQueue - Queue contains in-between operation meta-data.\n */\n addParent (parent, criteriaQueue = []) {\n persistDerivation(this, DM_DERIVATIVES.COMPOSE, null, criteriaQueue);\n this._parent = parent;\n parent._children.push(this);\n }\n\n /**\n * Returns the parent {@link DataModel} instance.\n *\n * @example\n * const schema = [\n * { name: 'Name', type: 'dimension' },\n * { name: 'HorsePower', type: 'measure' },\n * { name: \"Origin\", type: 'dimension' }\n * ];\n *\n * const data = [\n * { Name: \"chevrolet chevelle malibu\", Horsepower: 130, Origin: \"USA\" },\n * { Name: \"citroen ds-21 pallas\", Horsepower: 115, Origin: \"Europe\" },\n * { Name: \"datsun pl510\", Horsepower: 88, Origin: \"Japan\" },\n * { Name: \"amc rebel sst\", Horsepower: 150, Origin: \"USA\"},\n * ]\n *\n * const dt = new DataModel(data, schema);\n *\n * const dt2 = dt.select(fields => fields.Origin.value === \"USA\");\n * const parentDm = dt2.getParent();\n *\n * @return {DataModel} Returns the parent DataModel instance.\n */\n getParent () {\n return this._parent;\n }\n\n /**\n * Returns the immediate child {@link DataModel} instances.\n *\n * @example\n * const schema = [\n * { name: 'Name', type: 'dimension' },\n * { name: 'HorsePower', type: 'measure' },\n * { name: \"Origin\", type: 'dimension' }\n * ];\n *\n * const data = [\n * { Name: \"chevrolet chevelle malibu\", Horsepower: 130, Origin: \"USA\" },\n * { Name: \"citroen ds-21 pallas\", Horsepower: 115, Origin: \"Europe\" },\n * { Name: \"datsun pl510\", Horsepower: 88, Origin: \"Japan\" },\n * { Name: \"amc rebel sst\", Horsepower: 150, Origin: \"USA\"},\n * ]\n *\n * const dt = new DataModel(data, schema);\n *\n * const childDm1 = dt.select(fields => fields.Origin.value === \"USA\");\n * const childDm2 = dt.select(fields => fields.Origin.value === \"Japan\");\n * const childDm3 = dt.groupBy([\"Origin\"]);\n *\n * @return {DataModel[]} Returns the immediate child DataModel instances.\n */\n getChildren() {\n return this._children;\n }\n\n /**\n * Returns the in-between operation meta data while creating the current {@link DataModel} instance.\n *\n * @example\n * const schema = [\n * { name: 'Name', type: 'dimension' },\n * { name: 'HorsePower', type: 'measure' },\n * { name: \"Origin\", type: 'dimension' }\n * ];\n *\n * const data = [\n * { Name: \"chevrolet chevelle malibu\", Horsepower: 130, Origin: \"USA\" },\n * { Name: \"citroen ds-21 pallas\", Horsepower: 115, Origin: \"Europe\" },\n * { Name: \"datsun pl510\", Horsepower: 88, Origin: \"Japan\" },\n * { Name: \"amc rebel sst\", Horsepower: 150, Origin: \"USA\"},\n * ]\n *\n * const dt = new DataModel(data, schema);\n * const dt2 = dt.select(fields => fields.Origin.value === \"USA\");\n * const dt3 = dt2.groupBy([\"Origin\"]);\n * const derivations = dt3.getDerivations();\n *\n * @return {Any[]} Returns the derivation meta data.\n */\n getDerivations() {\n return this._derivation;\n }\n}\n\nexport default Relation;\n","/* eslint-disable default-case */\n\nimport { FieldType, DimensionSubtype, DataFormat } from './enums';\nimport {\n persistDerivation,\n getRootGroupByModel,\n propagateToAllDataModels,\n getRootDataModel,\n propagateImmutableActions,\n addToPropNamespace,\n sanitizeUnitSchema\n} from './helper';\nimport { DM_DERIVATIVES, PROPAGATION } from './constants';\nimport {\n dataBuilder,\n rowDiffsetIterator,\n groupBy\n} from './operator';\nimport { createBinnedFieldData } from './operator/bucket-creator';\nimport Relation from './relation';\nimport reducerStore from './utils/reducer-store';\nimport { createFields } from './field-creator';\nimport InvalidAwareTypes from './invalid-aware-types';\n\n/**\n * DataModel is an in-browser representation of tabular data. It supports\n * {@link https://en.wikipedia.org/wiki/Relational_algebra | relational algebra} operators as well as generic data\n * processing opearators.\n * DataModel extends {@link Relation} class which defines all the relational algebra opreators. DataModel gives\n * definition of generic data processing operators which are not relational algebra complient.\n *\n * @public\n * @class\n * @extends Relation\n * @memberof Datamodel\n */\nclass DataModel extends Relation {\n /**\n * Creates a new DataModel instance by providing data and schema. Data could be in the form of\n * - Flat JSON\n * - DSV String\n * - 2D Array\n *\n * By default DataModel finds suitable adapter to serialize the data. DataModel also expects a\n * {@link Schema | schema} for identifying the variables present in data.\n *\n * @constructor\n * @example\n * const data = loadData('cars.csv');\n * const schema = [\n * { name: 'Name', type: 'dimension' },\n * { name: 'Miles_per_Gallon', type: 'measure', unit : 'cm', scale: '1000', numberformat: val => `${val}G`},\n * { name: 'Cylinders', type: 'dimension' },\n * { name: 'Displacement', type: 'measure' },\n * { name: 'Horsepower', type: 'measure' },\n * { name: 'Weight_in_lbs', type: 'measure' },\n * { name: 'Acceleration', type: 'measure' },\n * { name: 'Year', type: 'dimension', subtype: 'datetime', format: '%Y' },\n * { name: 'Origin', type: 'dimension' }\n * ];\n * const dm = new DataModel(data, schema, { name: 'Cars' });\n * table(dm);\n *\n * @public\n *\n * @param {Array. | string | Array.} data Input data in any of the mentioned formats\n * @param {Array.} schema Defination of the variables. Order of the variables in data and order of the\n * variables in schema has to be same.\n * @param {object} [options] Optional arguments to specify more settings regarding the creation part\n * @param {string} [options.name] Name of the datamodel instance. If no name is given an auto generated name is\n * assigned to the instance.\n * @param {string} [options.fieldSeparator=','] specify field separator type if the data is of type dsv string.\n */\n constructor (...args) {\n super(...args);\n\n this._onPropagation = [];\n this._sortingDetails = [];\n }\n\n /**\n * Reducers are simple functions which reduces an array of numbers to a representative number of the set.\n * Like an array of numbers `[10, 20, 5, 15]` can be reduced to `12.5` if average / mean reducer function is\n * applied. All the measure fields in datamodel (variables in data) needs a reducer to handle aggregation.\n *\n * @public\n *\n * @return {ReducerStore} Singleton instance of {@link ReducerStore}.\n */\n static get Reducers () {\n return reducerStore;\n }\n\n /**\n * Configure null, undefined, invalid values in the source data\n *\n * @public\n *\n * @param {Object} [config] - Configuration to control how null, undefined and non-parsable values are\n * represented in DataModel.\n * @param {string} [config.undefined] - Define how an undefined value will be represented.\n * @param {string} [config.null] - Define how a null value will be represented.\n * @param {string} [config.invalid] - Define how a non-parsable value will be represented.\n */\n static configureInvalidAwareTypes (config) {\n return InvalidAwareTypes.invalidAwareVals(config);\n }\n\n /**\n * Retrieve the data attached to an instance in JSON format.\n *\n * @example\n * // DataModel instance is already prepared and assigned to dm variable\n * const data = dm.getData({\n * order: 'column',\n * formatter: {\n * origin: (val) => val === 'European Union' ? 'EU' : val;\n * }\n * });\n * console.log(data);\n *\n * @public\n *\n * @param {Object} [options] Options to control how the raw data is to be returned.\n * @param {string} [options.order='row'] Defines if data is retieved in row order or column order. Possible values\n * are `'rows'` and `'columns'`\n * @param {Function} [options.formatter=null] Formats the output data. This expects an object, where the keys are\n * the name of the variable needs to be formatted. The formatter function is called for each row passing the\n * value of the cell for a particular row as arguments. The formatter is a function in the form of\n * `function (value, rowId, schema) => { ... }`\n * Know more about {@link Fomatter}.\n *\n * @return {Array} Returns a multidimensional array of the data with schema. The return format looks like\n * ```\n * {\n * data,\n * schema\n * }\n * ```\n */\n getData (options) {\n const defOptions = {\n order: 'row',\n formatter: null,\n withUid: false,\n getAllFields: false,\n sort: []\n };\n options = Object.assign({}, defOptions, options);\n const fields = this.getPartialFieldspace().fields;\n\n const dataGenerated = dataBuilder.call(\n this,\n this.getPartialFieldspace().fields,\n this._rowDiffset,\n options.getAllFields ? fields.map(d => d.name()).join() : this._colIdentifier,\n options.sort,\n {\n columnWise: options.order === 'column',\n addUid: !!options.withUid\n }\n );\n\n if (!options.formatter) {\n return dataGenerated;\n }\n\n const { formatter } = options;\n const { data, schema, uids } = dataGenerated;\n const fieldNames = schema.map((e => e.name));\n const fmtFieldNames = Object.keys(formatter);\n const fmtFieldIdx = fmtFieldNames.reduce((acc, next) => {\n const idx = fieldNames.indexOf(next);\n if (idx !== -1) {\n acc.push([idx, formatter[next]]);\n }\n return acc;\n }, []);\n\n if (options.order === 'column') {\n fmtFieldIdx.forEach((elem) => {\n const fIdx = elem[0];\n const fmtFn = elem[1];\n\n data[fIdx].forEach((datum, datumIdx) => {\n data[fIdx][datumIdx] = fmtFn.call(\n undefined,\n datum,\n uids[datumIdx],\n schema[fIdx]\n );\n });\n });\n } else {\n data.forEach((datum, datumIdx) => {\n fmtFieldIdx.forEach((elem) => {\n const fIdx = elem[0];\n const fmtFn = elem[1];\n\n datum[fIdx] = fmtFn.call(\n undefined,\n datum[fIdx],\n uids[datumIdx],\n schema[fIdx]\n );\n });\n });\n }\n\n return dataGenerated;\n }\n\n /**\n * Groups the data using particular dimensions and by reducing measures. It expects a list of dimensions using which\n * it projects the datamodel and perform aggregations to reduce the duplicate tuples. Refer this\n * {@link link_to_one_example_with_group_by | document} to know the intuition behind groupBy.\n *\n * DataModel by default provides definition of few {@link reducer | Reducers}.\n * {@link ReducerStore | User defined reducers} can also be registered.\n *\n * This is the chained implementation of `groupBy`.\n * `groupBy` also supports {@link link_to_compose_groupBy | composability}\n *\n * @example\n * const groupedDM = dm.groupBy(['Year'], { horsepower: 'max' } );\n * console.log(groupedDm);\n *\n * @public\n *\n * @param {Array.} fieldsArr - Array containing the name of dimensions\n * @param {Object} [reducers={}] - A map whose key is the variable name and value is the name of the reducer. If its\n * not passed, or any variable is ommitted from the object, default aggregation function is used from the\n * schema of the variable.\n *\n * @return {DataModel} Returns a new DataModel instance after performing the groupby.\n */\n groupBy (fieldsArr, reducers = {}, config = { saveChild: true }) {\n const groupByString = `${fieldsArr.join()}`;\n let params = [this, fieldsArr, reducers];\n const newDataModel = groupBy(...params);\n\n persistDerivation(\n newDataModel,\n DM_DERIVATIVES.GROUPBY,\n { fieldsArr, groupByString, defaultReducer: reducerStore.defaultReducer() },\n reducers\n );\n\n if (config.saveChild) {\n this._children.push(newDataModel);\n }\n newDataModel._parent = this;\n\n return newDataModel;\n }\n\n /**\n * Performs sorting operation on the current {@link DataModel} instance according to the specified sorting details.\n * Like every other operator it doesn't mutate the current DataModel instance on which it was called, instead\n * returns a new DataModel instance containing the sorted data.\n *\n * DataModel support multi level sorting by listing the variables using which sorting needs to be performed and\n * the type of sorting `ASC` or `DESC`.\n *\n * In the following example, data is sorted by `Origin` field in `DESC` order in first level followed by another\n * level of sorting by `Acceleration` in `ASC` order.\n *\n * @example\n * // here dm is the pre-declared DataModel instance containing the data of 'cars.json' file\n * let sortedDm = dm.sort([\n * [\"Origin\", \"DESC\"]\n * [\"Acceleration\"] // Default value is ASC\n * ]);\n *\n * console.log(dm.getData());\n * console.log(sortedDm.getData());\n *\n * // Sort with a custom sorting function\n * sortedDm = dm.sort([\n * [\"Origin\", \"DESC\"]\n * [\"Acceleration\", (a, b) => a - b] // Custom sorting function\n * ]);\n *\n * console.log(dm.getData());\n * console.log(sortedDm.getData());\n *\n * @text\n * DataModel also provides another sorting mechanism out of the box where sort is applied to a variable using\n * another variable which determines the order.\n * Like the above DataModel contains three fields `Origin`, `Name` and `Acceleration`. Now, the data in this\n * model can be sorted by `Origin` field according to the average value of all `Acceleration` for a\n * particular `Origin` value.\n *\n * @example\n * // here dm is the pre-declared DataModel instance containing the data of 'cars.json' file\n * const sortedDm = dm.sort([\n * ['Origin', ['Acceleration', (a, b) => avg(...a.Acceleration) - avg(...b.Acceleration)]]\n * ]);\n *\n * console.log(dm.getData());\n * console.log(sortedDm.getData());\n *\n * @public\n *\n * @param {Array.} sortingDetails - Sorting details based on which the sorting will be performed.\n * @return {DataModel} Returns a new instance of DataModel with sorted data.\n */\n sort (sortingDetails) {\n const rawData = this.getData({\n order: 'row',\n sort: sortingDetails\n });\n const header = rawData.schema.map(field => field.name);\n const dataInCSVArr = [header].concat(rawData.data);\n\n const sortedDm = new this.constructor(dataInCSVArr, rawData.schema, { dataFormat: 'DSVArr' });\n sortedDm._sortingDetails = sortingDetails;\n return sortedDm;\n }\n\n /**\n * Performs the serialization operation on the current {@link DataModel} instance according to the specified data\n * type. When an {@link DataModel} instance is created, it de-serializes the input data into its internal format,\n * and during its serialization process, it converts its internal data format to the specified data type and returns\n * that data regardless what type of data is used during the {@link DataModel} initialization.\n *\n * @example\n * // here dm is the pre-declared DataModel instance.\n * const csvData = dm.serialize(DataModel.DataFormat.DSV_STR, { fieldSeparator: \",\" });\n * console.log(csvData); // The csv formatted data.\n *\n * const jsonData = dm.serialize(DataModel.DataFormat.FLAT_JSON);\n * console.log(jsonData); // The json data.\n *\n * @public\n *\n * @param {string} type - The data type name for serialization.\n * @param {Object} options - The optional option object.\n * @param {string} options.fieldSeparator - The field separator character for DSV data type.\n * @return {Array|string} Returns the serialized data.\n */\n serialize (type, options) {\n type = type || this._dataFormat;\n options = Object.assign({}, { fieldSeparator: ',' }, options);\n\n const fields = this.getFieldspace().fields;\n const colData = fields.map(f => f.formattedData());\n const rowsCount = colData[0].length;\n let serializedData;\n let rowIdx;\n let colIdx;\n\n if (type === DataFormat.FLAT_JSON) {\n serializedData = [];\n for (rowIdx = 0; rowIdx < rowsCount; rowIdx++) {\n const row = {};\n for (colIdx = 0; colIdx < fields.length; colIdx++) {\n row[fields[colIdx].name()] = colData[colIdx][rowIdx];\n }\n serializedData.push(row);\n }\n } else if (type === DataFormat.DSV_STR) {\n serializedData = [fields.map(f => f.name()).join(options.fieldSeparator)];\n for (rowIdx = 0; rowIdx < rowsCount; rowIdx++) {\n const row = [];\n for (colIdx = 0; colIdx < fields.length; colIdx++) {\n row.push(colData[colIdx][rowIdx]);\n }\n serializedData.push(row.join(options.fieldSeparator));\n }\n serializedData = serializedData.join('\\n');\n } else if (type === DataFormat.DSV_ARR) {\n serializedData = [fields.map(f => f.name())];\n for (rowIdx = 0; rowIdx < rowsCount; rowIdx++) {\n const row = [];\n for (colIdx = 0; colIdx < fields.length; colIdx++) {\n row.push(colData[colIdx][rowIdx]);\n }\n serializedData.push(row);\n }\n } else {\n throw new Error(`Data type ${type} is not supported`);\n }\n\n return serializedData;\n }\n\n addField (field) {\n const fieldName = field.name();\n this._colIdentifier += `,${fieldName}`;\n const partialFieldspace = this._partialFieldspace;\n\n if (!partialFieldspace.fieldsObj()[field.name()]) {\n partialFieldspace.fields.push(field);\n } else {\n const fieldIndex = partialFieldspace.fields.findIndex(fieldinst => fieldinst.name() === fieldName);\n fieldIndex >= 0 && (partialFieldspace.fields[fieldIndex] = field);\n }\n\n // flush out cached namespace values on addition of new fields\n partialFieldspace._cachedFieldsObj = null;\n partialFieldspace._cachedDimension = null;\n partialFieldspace._cachedMeasure = null;\n\n this.__calculateFieldspace().calculateFieldsConfig();\n return this;\n }\n\n /**\n * Creates a new variable calculated from existing variables. This method expects the definition of the newly created\n * variable and a function which resolves the value of the new variable from existing variables.\n *\n * Can create a new measure based on existing variables:\n * @example\n * // DataModel already prepared and assigned to dm variable;\n * const newDm = dataModel.calculateVariable({\n * name: 'powerToWeight',\n * type: 'measure'\n * }, ['horsepower', 'weight_in_lbs', (hp, weight) => hp / weight ]);\n *\n *\n * Can create a new dimension based on existing variables:\n * @example\n * // DataModel already prepared and assigned to dm variable;\n * const child = dataModel.calculateVariable(\n * {\n * name: 'Efficiency',\n * type: 'dimension'\n * }, ['horsepower', (hp) => {\n * if (hp < 80) { return 'low'; },\n * else if (hp < 120) { return 'moderate'; }\n * else { return 'high' }\n * }]);\n *\n * @public\n *\n * @param {Object} schema - The schema of newly defined variable.\n * @param {Array.} dependency - An array containing the dependency variable names and a resolver\n * function as the last element.\n * @param {Object} config - An optional config object.\n * @param {boolean} [config.saveChild] - Whether the newly created DataModel will be a child.\n * @param {boolean} [config.replaceVar] - Whether the newly created variable will replace the existing variable.\n * @return {DataModel} Returns an instance of DataModel with the new field.\n */\n calculateVariable (schema, dependency, config) {\n schema = sanitizeUnitSchema(schema);\n config = Object.assign({}, { saveChild: true, replaceVar: false }, config);\n\n const fieldsConfig = this.getFieldsConfig();\n const depVars = dependency.slice(0, dependency.length - 1);\n const retrieveFn = dependency[dependency.length - 1];\n\n if (fieldsConfig[schema.name] && !config.replaceVar) {\n throw new Error(`${schema.name} field already exists in datamodel`);\n }\n\n const depFieldIndices = depVars.map((field) => {\n const fieldSpec = fieldsConfig[field];\n if (!fieldSpec) {\n // @todo dont throw error here, use warning in production mode\n throw new Error(`${field} is not a valid column name.`);\n }\n return fieldSpec.index;\n });\n\n const clone = this.clone();\n\n const fs = clone.getFieldspace().fields;\n const suppliedFields = depFieldIndices.map(idx => fs[idx]);\n\n let cachedStore = {};\n let cloneProvider = () => this.detachedRoot();\n\n const computedValues = [];\n rowDiffsetIterator(clone._rowDiffset, (i) => {\n const fieldsData = suppliedFields.map(field => field.partialField.data[i]);\n computedValues[i] = retrieveFn(...fieldsData, i, cloneProvider, cachedStore);\n });\n const [field] = createFields([computedValues], [schema], [schema.name]);\n clone.addField(field);\n\n persistDerivation(clone, DM_DERIVATIVES.CAL_VAR, { config: schema, fields: depVars }, retrieveFn);\n\n return clone;\n }\n\n /**\n * Propagates changes across all the connected DataModel instances.\n *\n * @param {Array} identifiers - A list of identifiers that were interacted with.\n * @param {Object} payload - The interaction specific details.\n *\n * @return {DataModel} DataModel instance.\n */\n propagate (identifiers, config = {}, addToNameSpace, propConfig = {}) {\n const isMutableAction = config.isMutableAction;\n const propagationSourceId = config.sourceId;\n const payload = config.payload;\n const rootModel = getRootDataModel(this);\n const propagationNameSpace = rootModel._propagationNameSpace;\n const rootGroupByModel = getRootGroupByModel(this);\n const rootModels = {\n groupByModel: rootGroupByModel,\n model: rootModel\n };\n\n addToNameSpace && addToPropNamespace(propagationNameSpace, config, this);\n propagateToAllDataModels(identifiers, rootModels, { propagationNameSpace, sourceId: propagationSourceId },\n Object.assign({\n payload\n }, config));\n\n if (isMutableAction) {\n propagateImmutableActions(propagationNameSpace, rootModels, {\n config,\n propConfig\n }, this);\n }\n\n return this;\n }\n\n /**\n * Associates a callback with an event name.\n *\n * @param {string} eventName - The name of the event.\n * @param {Function} callback - The callback to invoke.\n * @return {DataModel} Returns this current DataModel instance itself.\n */\n on (eventName, callback) {\n switch (eventName) {\n case PROPAGATION:\n this._onPropagation.push(callback);\n break;\n }\n return this;\n }\n\n /**\n * Unsubscribes the callbacks for the provided event name.\n *\n * @param {string} eventName - The name of the event to unsubscribe.\n * @return {DataModel} Returns the current DataModel instance itself.\n */\n unsubscribe (eventName) {\n switch (eventName) {\n case PROPAGATION:\n this._onPropagation = [];\n break;\n\n }\n return this;\n }\n\n /**\n * This method is used to invoke the method associated with propagation.\n *\n * @param {Object} payload The interaction payload.\n * @param {DataModel} identifiers The propagated DataModel.\n * @memberof DataModel\n */\n handlePropagation (propModel, payload) {\n let propListeners = this._onPropagation;\n propListeners.forEach(fn => fn.call(this, propModel, payload));\n }\n\n /**\n * Performs the binning operation on a measure field based on the binning configuration. Binning means discretizing\n * values of a measure. Binning configuration contains an array; subsequent values from the array marks the boundary\n * of buckets in [inclusive, exclusive) range format. This operation does not mutate the subject measure field,\n * instead, it creates a new field (variable) of type dimension and subtype binned.\n *\n * Binning can be configured by\n * - providing custom bin configuration with non-uniform buckets,\n * - providing bins count,\n * - providing each bin size,\n *\n * When custom `buckets` are provided as part of binning configuration:\n * @example\n * // DataModel already prepared and assigned to dm variable\n * const config = { name: 'binnedHP', buckets: [30, 80, 100, 110] }\n * const binnedDM = dataModel.bin('horsepower', config);\n *\n * @text\n * When `binsCount` is defined as part of binning configuration:\n * @example\n * // DataModel already prepared and assigned to dm variable\n * const config = { name: 'binnedHP', binsCount: 5, start: 0, end: 100 }\n * const binDM = dataModel.bin('horsepower', config);\n *\n * @text\n * When `binSize` is defined as part of binning configuration:\n * @example\n * // DataModel already prepared and assigned to dm variable\n * const config = { name: 'binnedHorsepower', binSize: 20, start: 5}\n * const binDM = dataModel.bin('horsepower', config);\n *\n * @public\n *\n * @param {string} measureFieldName - The name of the target measure field.\n * @param {Object} config - The config object.\n * @param {string} [config.name] - The name of the new field which will be created.\n * @param {string} [config.buckets] - An array containing the bucket ranges.\n * @param {string} [config.binSize] - The size of each bin. It is ignored when buckets are given.\n * @param {string} [config.binsCount] - The total number of bins to generate. It is ignored when buckets are given.\n * @param {string} [config.start] - The start value of the bucket ranges. It is ignored when buckets are given.\n * @param {string} [config.end] - The end value of the bucket ranges. It is ignored when buckets are given.\n * @return {DataModel} Returns a new {@link DataModel} instance with the new field.\n */\n bin (measureFieldName, config) {\n const fieldsConfig = this.getFieldsConfig();\n\n if (!fieldsConfig[measureFieldName]) {\n throw new Error(`Field ${measureFieldName} doesn't exist`);\n }\n\n const binFieldName = config.name || `${measureFieldName}_binned`;\n\n if (fieldsConfig[binFieldName]) {\n throw new Error(`Field ${binFieldName} already exists`);\n }\n\n const measureField = this.getFieldspace().fieldsObj()[measureFieldName];\n const { binnedData, bins } = createBinnedFieldData(measureField, this._rowDiffset, config);\n\n const binField = createFields([binnedData], [\n {\n name: binFieldName,\n type: FieldType.DIMENSION,\n subtype: DimensionSubtype.BINNED,\n bins\n }], [binFieldName])[0];\n\n const clone = this.clone();\n clone.addField(binField);\n\n persistDerivation(clone, DM_DERIVATIVES.BIN, { measureFieldName, config, binFieldName }, null);\n\n return clone;\n }\n\n /**\n * Creates a new {@link DataModel} instance with completely detached root from current {@link DataModel} instance,\n * the new {@link DataModel} instance has no parent-children relationship with the current one, but has same data as\n * the current one.\n * This API is useful when a completely different {@link DataModel} but with same data as the current instance is\n * needed.\n *\n * @example\n * const dm = new DataModel(data, schema);\n * const detachedDm = dm.detachedRoot();\n *\n * // has different namespace\n * console.log(dm.getPartialFieldspace().name);\n * console.log(detachedDm.getPartialFieldspace().name);\n *\n * // has same data\n * console.log(dm.getData());\n * console.log(detachedDm.getData());\n *\n * @public\n *\n * @return {DataModel} Returns a detached {@link DataModel} instance.\n */\n detachedRoot () {\n const data = this.serialize(DataFormat.FLAT_JSON);\n const schema = this.getSchema();\n\n return new DataModel(data, schema);\n }\n}\n\nexport default DataModel;\n","import { extend2 } from '../utils';\nimport { rowDiffsetIterator } from './row-diffset-iterator';\nimport DataModel from '../export';\nimport reducerStore from '../utils/reducer-store';\nimport { defaultReducerName } from './group-by-function';\nimport { FieldType } from '../enums';\n\n/**\n * This function sanitize the user given field and return a common Array structure field\n * list\n * @param {DataModel} dataModel the dataModel operating on\n * @param {Array} fieldArr user input of field Array\n * @return {Array} arrays of field name\n */\nfunction getFieldArr (dataModel, fieldArr) {\n const retArr = [];\n const fieldStore = dataModel.getFieldspace();\n const dimensions = fieldStore.getDimension();\n\n Object.entries(dimensions).forEach(([key]) => {\n if (fieldArr && fieldArr.length) {\n if (fieldArr.indexOf(key) !== -1) {\n retArr.push(key);\n }\n } else {\n retArr.push(key);\n }\n });\n\n return retArr;\n}\n\n/**\n * This sanitize the reducer provide by the user and create a common type of object.\n * user can give function Also\n * @param {DataModel} dataModel dataModel to worked on\n * @param {Object|function} [reducers={}] reducer provided by the users\n * @return {Object} object containing reducer function for every measure\n */\nfunction getReducerObj (dataModel, reducers = {}) {\n const retObj = {};\n const fieldStore = dataModel.getFieldspace();\n const measures = fieldStore.getMeasure();\n const defReducer = reducerStore.defaultReducer();\n\n Object.keys(measures).forEach((measureName) => {\n if (typeof reducers[measureName] !== 'string') {\n reducers[measureName] = measures[measureName].defAggFn();\n }\n const reducerFn = reducerStore.resolve(reducers[measureName]);\n if (reducerFn) {\n retObj[measureName] = reducerFn;\n } else {\n retObj[measureName] = defReducer;\n reducers[measureName] = defaultReducerName;\n }\n });\n return retObj;\n}\n\n/**\n * main function which perform the group-by operations which reduce the measures value is the\n * fields are common according to the reducer function provided\n * @param {DataModel} dataModel the dataModel to worked\n * @param {Array} fieldArr fields according to which the groupby should be worked\n * @param {Object|Function} reducers reducers function\n * @param {DataModel} existingDataModel Existing datamodel instance\n * @return {DataModel} new dataModel with the group by\n */\nfunction groupBy (dataModel, fieldArr, reducers, existingDataModel) {\n const sFieldArr = getFieldArr(dataModel, fieldArr);\n const reducerObj = getReducerObj(dataModel, reducers);\n const fieldStore = dataModel.getFieldspace();\n const fieldStoreObj = fieldStore.fieldsObj();\n const dbName = fieldStore.name;\n const dimensionArr = [];\n const measureArr = [];\n const schema = [];\n const hashMap = {};\n const data = [];\n let newDataModel;\n\n // Prepare the schema\n Object.entries(fieldStoreObj).forEach(([key, value]) => {\n if (sFieldArr.indexOf(key) !== -1 || reducerObj[key]) {\n schema.push(extend2({}, value.schema()));\n\n switch (value.schema().type) {\n case FieldType.MEASURE:\n measureArr.push(key);\n break;\n default:\n case FieldType.DIMENSION:\n dimensionArr.push(key);\n }\n }\n });\n // Prepare the data\n let rowCount = 0;\n rowDiffsetIterator(dataModel._rowDiffset, (i) => {\n let hash = '';\n dimensionArr.forEach((_) => {\n hash = `${hash}-${fieldStoreObj[_].partialField.data[i]}`;\n });\n if (hashMap[hash] === undefined) {\n hashMap[hash] = rowCount;\n data.push({});\n dimensionArr.forEach((_) => {\n data[rowCount][_] = fieldStoreObj[_].partialField.data[i];\n });\n measureArr.forEach((_) => {\n data[rowCount][_] = [fieldStoreObj[_].partialField.data[i]];\n });\n rowCount += 1;\n } else {\n measureArr.forEach((_) => {\n data[hashMap[hash]][_].push(fieldStoreObj[_].partialField.data[i]);\n });\n }\n });\n\n // reduction\n let cachedStore = {};\n let cloneProvider = () => dataModel.detachedRoot();\n data.forEach((row) => {\n const tuple = row;\n measureArr.forEach((_) => {\n tuple[_] = reducerObj[_](row[_], cloneProvider, cachedStore);\n });\n });\n if (existingDataModel) {\n existingDataModel.__calculateFieldspace();\n newDataModel = existingDataModel;\n }\n else {\n newDataModel = new DataModel(data, schema, { name: dbName });\n }\n return newDataModel;\n}\n\nexport { groupBy, getFieldArr, getReducerObj };\n","import { rowDiffsetIterator } from './row-diffset-iterator';\nimport InvalidAwareTypes from '../invalid-aware-types';\n\nconst generateBuckets = (binSize, start, end) => {\n const buckets = [];\n let next = start;\n\n while (next < end) {\n buckets.push(next);\n next += binSize;\n }\n buckets.push(next);\n\n return buckets;\n};\n\nconst findBucketRange = (bucketRanges, value) => {\n let leftIdx = 0;\n let rightIdx = bucketRanges.length - 1;\n let midIdx;\n let range;\n\n // Here use binary search as the bucketRanges is a sorted array\n while (leftIdx <= rightIdx) {\n midIdx = leftIdx + Math.floor((rightIdx - leftIdx) / 2);\n range = bucketRanges[midIdx];\n\n if (value >= range.start && value < range.end) {\n return range;\n } else if (value >= range.end) {\n leftIdx = midIdx + 1;\n } else if (value < range.start) {\n rightIdx = midIdx - 1;\n }\n }\n\n return null;\n};\n\n /**\n * Creates the bin data from input measure field and supplied configs.\n *\n * @param {Measure} measureField - The Measure field instance.\n * @param {string} rowDiffset - The datamodel rowDiffset values.\n * @param {Object} config - The config object.\n * @return {Object} Returns the binned data and the corresponding bins.\n */\nexport function createBinnedFieldData (measureField, rowDiffset, config) {\n let { buckets, binsCount, binSize, start, end } = config;\n const [dMin, dMax] = measureField.domain();\n\n if (!buckets) {\n start = (start !== 0 && (!start || start > dMin)) ? dMin : start;\n end = (end !== 0 && (!end || end < dMax)) ? (dMax + 1) : end;\n\n if (binsCount) {\n binSize = Math.ceil(Math.abs(end - start) / binsCount);\n }\n\n buckets = generateBuckets(binSize, start, end);\n }\n\n if (buckets[0] > dMin) {\n buckets.unshift(dMin);\n }\n if (buckets[buckets.length - 1] <= dMax) {\n buckets.push(dMax + 1);\n }\n\n const bucketRanges = [];\n for (let i = 0; i < buckets.length - 1; i++) {\n bucketRanges.push({\n start: buckets[i],\n end: buckets[i + 1]\n });\n }\n\n const binnedData = [];\n rowDiffsetIterator(rowDiffset, (i) => {\n const datum = measureField.partialField.data[i];\n if (datum instanceof InvalidAwareTypes) {\n binnedData.push(datum);\n return;\n }\n\n const range = findBucketRange(bucketRanges, datum);\n binnedData.push(`${range.start}-${range.end}`);\n });\n\n return { binnedData, bins: buckets };\n}\n","import { fnList } from '../operator/group-by-function';\n\nexport const { sum, avg, min, max, first, last, count, std: sd } = fnList;\n","import DataModel from './datamodel';\nimport {\n compose,\n bin,\n select,\n project,\n groupby as groupBy,\n calculateVariable,\n sort,\n crossProduct,\n difference,\n naturalJoin,\n leftOuterJoin,\n rightOuterJoin,\n fullOuterJoin,\n union\n} from './operator';\nimport * as Stats from './stats';\nimport * as enums from './enums';\nimport { DateTimeFormatter } from './utils';\nimport { DataFormat, FilteringMode } from './constants';\nimport InvalidAwareTypes from './invalid-aware-types';\nimport pkg from '../package.json';\n\nDataModel.Operators = {\n compose,\n bin,\n select,\n project,\n groupBy,\n calculateVariable,\n sort,\n crossProduct,\n difference,\n naturalJoin,\n leftOuterJoin,\n rightOuterJoin,\n fullOuterJoin,\n union\n};\nDataModel.Stats = Stats;\nObject.assign(DataModel, enums);\nDataModel.DateTimeFormatter = DateTimeFormatter;\nDataModel.DataFormat = DataFormat;\nDataModel.FilteringMode = FilteringMode;\nDataModel.InvalidAwareTypes = InvalidAwareTypes;\nDataModel.version = pkg.version;\n\nexport default DataModel;\n","\n/**\n * DataModel's opearators are exposed as composable functional operators as well as chainable operators. Chainable\n * operators are called on the instances of {@link Datamodel} and {@link Relation} class.\n *\n * Those same operators can be used as composable operators from `DataModel.Operators` namespace.\n *\n * All these operators have similar behaviour. All these operators when called with the argument returns a function\n * which expects a DataModel instance.\n *\n * @public\n * @module Operators\n * @namespace DataModel\n */\n\n/**\n * This is functional version of selection operator. {@link link_to_selection | Selection} is a row filtering operation.\n * It takes {@link SelectionPredicate | predicate} for filtering criteria and returns a function.\n * The returned function is called with the DataModel instance on which the action needs to be performed.\n *\n * {@link SelectionPredicate} is a function which returns a boolean value. For selection opearation the selection\n * function is called for each row of DataModel instance with the current row passed as argument.\n *\n * After executing {@link SelectionPredicate} the rows are labeled as either an entry of selection set or an entry\n * of rejection set.\n *\n * {@link FilteringMode} operates on the selection and rejection set to determine which one would reflect in the\n * resulatant datamodel.\n *\n * @warning\n * [Warn] Selection and rejection set is only a logical idea for concept explanation purpose.\n *\n * @error\n * [Error] `FilteringMode.ALL` is not a valid working mode for functional version of `select`. Its only avialable on the\n * chained version.\n *\n * @example\n * const select = DataModel.Operators.select;\n * usaCarsFn = select(fields => fields.Origin.value === 'USA');\n * usaCarsDm = usaCarsFn(dm);\n * console.log(usaCarsDm);\n *\n * @public\n * @namespace DataModel\n * @module Operators\n *\n * @param {SelectionPredicate} selectFn - Predicate funciton which is called for each row with the current row\n * ```\n * function (row, i) { ... }\n * ```\n * @param {Object} [config] - The configuration object to control the inclusion exclusion of a row in resultant\n * DataModel instance\n * @param {FilteringMode} [config.mode=FilteringMode.NORMAL] - The mode of the selection\n *\n * @return {PreparatorFunction} Function which expects an instance of DataModel on which the operator needs to be\n * applied.\n */\nexport const select = (...args) => dm => dm.select(...args);\n\n/**\n * This is functional version of projection operator. {@link link_to_projection | Projection} is a column filtering\n * operation.It expects list of fields name and either include those or exclude those based on {@link FilteringMode} on\n * the resultant variable.It returns a function which is called with the DataModel instance on which the action needs\n * to be performed.\n *\n * Projection expects array of fields name based on which it creates the selection and rejection set. All the field\n * whose name is present in array goes in selection set and rest of the fields goes in rejection set.\n *\n * {@link FilteringMode} operates on the selection and rejection set to determine which one would reflect in the\n * resulatant datamodel.\n *\n * @warning\n * Selection and rejection set is only a logical idea for concept explanation purpose.\n *\n * @error\n * `FilteringMode.ALL` is not a valid working mode for functional version of `select`. Its only avialable on the\n * chained version.\n *\n * @public\n * @namespace DataModel\n * @module Operators\n *\n * @param {Array.} projField - An array of column names in string or regular expression.\n * @param {Object} [config] - An optional config to control the creation of new DataModel\n * @param {FilteringMode} [config.mode=FilteringMode.NORMAL] - Mode of the projection\n *\n * @return {PreparatorFunction} Function which expects an instance of DataModel on which the operator needs to be\n * applied.\n */\nexport const project = (...args) => dm => dm.project(...args);\n\n/**\n * This is functional version of binnig operator. Binning happens on a measure field based on a binning configuration.\n * Binning in DataModel does not aggregate the number of rows present in DataModel instance after binning, it just adds\n * a new field with the binned value. Refer binning {@link example_of_binning | example} to have a intuition of what\n * binning is and the use case.\n *\n * Binning can be configured by\n * - providing custom bin configuration with non uniform buckets\n * - providing bin count\n * - providing each bin size\n *\n * When custom buckets are provided as part of binning configuration\n * @example\n * // DataModel already prepared and assigned to dm vairable\n * const buckets = {\n * start: 30\n * stops: [80, 100, 110]\n * };\n * const config = { buckets, name: 'binnedHP' }\n * const binFn = bin('horsepower', config);\n * const binnedDm = binFn(dm);\n *\n * @text\n * When `binCount` is defined as part of binning configuration\n * @example\n * // DataModel already prepared and assigned to dm vairable\n * const config = { binCount: 5, name: 'binnedHP' }\n * const binFn = bin('horsepower', config);\n * const binnedDm = binFn(Dm);\n *\n * @text\n * When `binSize` is defined as part of binning configuration\n * @example\n * // DataModel already prepared and assigned to dm vairable\n * const config = { binSize: 200, name: 'binnedHorsepower' }\n * const binnedDm = dataModel.bin('horsepower', config);\n * const binnedDm = binFn(Dm);\n *\n * @public\n * @namespace DataModel\n * @module Operators\n *\n * @param {String} name Name of measure which will be used to create bin\n * @param {Object} config Config required for bin creation\n * @param {Array.} config.bucketObj.stops Defination of bucket ranges. Two subsequent number from arrays\n * are picked and a range is created. The first number from range is inclusive and the second number from range\n * is exclusive.\n * @param {Number} [config.bucketObj.startAt] Force the start of the bin from a particular number.\n * If not mentioned, the start of the bin or the lower domain of the data if stops is not mentioned, else its\n * the first value of the stop.\n * @param {Number} config.binSize Bucket size for each bin\n * @param {Number} config.binCount Number of bins which will be created\n * @param {String} config.name Name of the new binned field to be created\n *\n * @return {PreparatorFunction} Function which expects an instance of DataModel on which the operator needs to be\n * applied.\n */\nexport const bin = (...args) => dm => dm.bin(...args);\n\n/**\n * This is functional version of `groupBy` operator.Groups the data using particular dimensions and by reducing\n * measures. It expects a list of dimensions using which it projects the datamodel and perform aggregations to reduce\n * the duplicate tuples. Refer this {@link link_to_one_example_with_group_by | document} to know the intuition behind\n * groupBy.\n *\n * DataModel by default provides definition of few {@link reducer | Reducers}.\n * {@link ReducerStore | User defined reducers} can also be registered.\n *\n * This is the chained implementation of `groupBy`.\n * `groupBy` also supports {@link link_to_compose_groupBy | composability}\n *\n * @example\n * const groupBy = DataModel.Operators.groupBy;\n * const groupedFn = groupBy(['Year'], { horsepower: 'max' } );\n * groupedDM = groupByFn(dm);\n *\n * @public\n *\n * @param {Array.} fieldsArr - Array containing the name of dimensions\n * @param {Object} [reducers={}] - A map whose key is the variable name and value is the name of the reducer. If its\n * not passed, or any variable is ommitted from the object, default aggregation function is used from the\n * schema of the variable.\n *\n * @return {PreparatorFunction} Function which expects an instance of DataModel on which the operator needs to be\n * applied.\n */\nexport const groupBy = (...args) => dm => dm.groupBy(...args);\n\n/**\n * Enables composing operators to run multiple operations and save group of operataion as named opration on a DataModel.\n * The resulting DataModel will be the result of all the operation provided. The operations provided will be executed in\n * a serial manner ie. result of one operation will be the input for the next operations (like pipe operator in unix).\n *\n * Suported operations in compose are\n * - `select`\n * - `project`\n * - `groupBy`\n * - `bin`\n * - `compose`\n *\n * @example\n * const compose = DataModel.Operators.compose;\n * const select = DataModel.Operators.select;\n * const project = DataModel.Operators.project;\n *\n * let composedFn = compose(\n * select(fields => fields.netprofit.value <= 15),\n * project(['netprofit', 'netsales']));\n *\n * const dataModel = new DataModel(data1, schema1);\n *\n * let composedDm = composedFn(dataModel);\n *\n * @public\n * @namespace DataModel\n * @module Operators\n *\n * @param {Array.} operators: An array of operation that will be applied on the\n * datatable.\n *\n * @returns {DataModel} Instance of resultant DataModel\n */\nexport const compose = (...operations) =>\n (dm, config = { saveChild: true }) => {\n let currentDM = dm;\n let frstChild;\n const derivations = [];\n const saveChild = config.saveChild;\n\n operations.forEach((operation) => {\n currentDM = operation(currentDM);\n derivations.push(...currentDM._derivation);\n if (!frstChild) {\n frstChild = currentDM;\n }\n });\n\n saveChild && currentDM.addParent(dm, derivations);\n if (derivations.length > 1) {\n frstChild.dispose();\n }\n\n return currentDM;\n };\n","/**\n * Wrapper on calculateVariable() method of DataModel to behave\n * the pure-function functionality.\n *\n * @param {Array} args - The argument list.\n * @return {any} Returns the returned value of calling function.\n */\nexport const calculateVariable = (...args) => dm => dm.calculateVariable(...args);\n\n/**\n * Wrapper on sort() method of DataModel to behave\n * the pure-function functionality.\n *\n * @param {Array} args - The argument list.\n * @return {any} Returns the returned value of calling function.\n */\nexport const sort = (...args) => dm => dm.sort(...args);\n","import { crossProduct } from './cross-product';\nimport { naturalJoinFilter } from './natural-join-filter-function';\n\nexport function naturalJoin (dataModel1, dataModel2) {\n return crossProduct(dataModel1, dataModel2, naturalJoinFilter(dataModel1, dataModel2), true);\n}\n","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"hyperdis\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"hyperdis\"] = factory();\n\telse\n\t\troot[\"hyperdis\"] = factory();\n})(window, function() {\nreturn "," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 0);\n","const makeEntry = (arr, sCon) => {\n arr.forEach((elem) => {\n if (elem === undefined || elem === null) {\n return;\n }\n sCon[elem] = 1;\n });\n};\n\nexport default class ForeignSet {\n constructor (arr) {\n this._set = {};\n makeEntry(arr, this._set);\n }\n\n append (arr) {\n makeEntry(arr, this._set);\n return this;\n }\n\n toArray () {\n return Object.keys(this._set);\n }\n\n static difference (set1, set2) {\n let key;\n const filteredKeys = [],\n s1 = set1._set,\n s2 = set2._set;\n for (key in s1) {\n if (!({}).hasOwnProperty.call(s1, key)) {\n continue;\n }\n if (key in s2) {\n continue;\n }\n filteredKeys.push(key);\n }\n return new ForeignSet(filteredKeys);\n }\n}\n","/* global window */\n\nimport ForeignSet from './set';\n\nconst\n isSimpleObject = (obj) => {\n let token;\n if (typeof obj === 'object') {\n if (obj === null) { return false; }\n token = Object.prototype.toString.call(obj);\n if (token === '[object Object]') {\n return (obj.constructor.toString().match(/^function (.*)\\(\\)/m) || [])[1] === 'Object';\n }\n }\n return false;\n },\n minMsThreshold = 16,\n /* istanbul ignore next */win = typeof window === 'undefined' ? (this || {}) : window,\n /* istanbul ignore next */ reqAnimFrame = win.requestAnimationFrame || win.webkitRequestAnimationFrame ||\n win.mozRequestAnimationFrame || win.oRequestAnimationFrame ||\n win.msRequestAnimationFrame ||\n function (callback) {\n setTimeout(callback, minMsThreshold);\n },\n\n getTimeBasedId = () => {\n if (getTimeBasedId.__lastTime === new Date().getTime()) {\n return (getTimeBasedId.__lastTime).toString() + (getTimeBasedId.__id++).toString();\n }\n\n getTimeBasedId.__id = 0;\n getTimeBasedId.__lastTime = new Date().getTime();\n return (getTimeBasedId.__lastTime).toString() + (getTimeBasedId.__id++).toString();\n },\n pullableRecent = (nodes, fn) => {\n let nFn = () => {\n fn(...nodes.map((node) => {\n const\n hist = node.history,\n l = hist.length - 1;\n return [hist[l - 1 < 0 ? 0 : l - 1], hist[l]];\n }));\n };\n nFn.__id = getTimeBasedId();\n return nFn;\n },\n pullableEnd = (nodes, fn) => {\n let nFn = () => {\n fn(...nodes.map((node) => {\n const hist = node.history;\n return [hist[0], hist[hist.length - 1]];\n }));\n };\n nFn.__id = getTimeBasedId();\n return nFn;\n },\n unique = fns => fns\n .reduce((store, fn) => {\n // @warn function with side effect, it mutates the store passed during initialization\n if (fn.__id in store.map) {\n return store;\n }\n\n store.map[fn.__id] = 1;\n store.unique.push(fn);\n\n return store;\n }, { map: {}, unique: [] })\n .unique,\n compose = fns => () => {\n fns.forEach(fn => fn());\n },\n flat = (...params) => {\n const res = [];\n params.forEach(param => res.push(...param));\n return res;\n },\n identityMap = arrays => arrays,\n splitPathProp = (path) => {\n const pathArr = path.split('.'),\n len = pathArr.length;\n return [pathArr.slice(0, len - 1), pathArr[len - 1]];\n },\n scheduler = (onFinishCallback) => {\n let queue = [],\n animationFrame = null;\n\n onFinishCallback = onFinishCallback &&\n typeof onFinishCallback === 'function' && onFinishCallback || (() => { });\n\n return (listeners, payload) => {\n [].push.apply(queue, listeners);\n if (animationFrame === null) {\n animationFrame = reqAnimFrame(() => {\n const tempQ = queue.slice(0);\n queue.length = 0;\n animationFrame = null;\n\n unique(tempQ).forEach(fn => fn());\n onFinishCallback(payload);\n });\n }\n };\n },\n fetch = namedNode => (...params) => params.map((param) => {\n const node = namedNode[param];\n return {\n name: node.name,\n qualifiedName: node.qualifiedName,\n value: node.seed\n };\n }),\n fetchAggregator = (...params) => ({\n dependencies: params.slice(0, params.length - 1),\n fn: params[params.length - 1]\n }),\n getUpstreamNodes = (list) => {\n let res = [];\n const map = {};\n list.forEach(node => map[node.qualifiedName] = -1);\n function rec (arr) {\n arr.forEach((node) => {\n let qname,\n placedIndex,\n preArr,\n postArr;\n if (!((qname = node.qualifiedName) in map)) {\n map[qname] = res.push(node) - 1;\n } else {\n placedIndex = map[qname];\n if (placedIndex !== -1 && placedIndex !== res.length - 1) {\n // If not the last element, readjust the array so that the later dependency position is saved\n preArr = res.slice(0, placedIndex);\n postArr = res.slice(placedIndex + 1);\n res = preArr.concat(postArr);\n\n // reset the index in map\n postArr.forEach((elem, i) => map[elem.qualifiedName] = i + preArr.length);\n map[qname] = res.push(node) - 1;\n }\n }\n rec(node.outgoingEdges);\n });\n }\n rec(list);\n return res;\n },\n resolver = {\n accumulate: (...params) => {\n const resp = {};\n params.forEach((nodeDetails) => {\n Object.assign(resp, { [nodeDetails.name]: nodeDetails.value });\n });\n return resp;\n },\n identity: nodeDetails => nodeDetails.value\n };\n\nfunction resolveDependencyOrder (node, resolved, resolveMap) {\n let qname;\n node.edges.forEach((neighbour) => {\n resolveDependencyOrder(neighbour, resolved, resolveMap);\n });\n\n if (node.isRoot() || (qname = node.qualifiedName) in resolveMap) {\n return;\n }\n resolved.push(node);\n resolveMap[qname] = 1;\n}\n\nclass CustomResolver {\n constructor (resolver) {\n this.fn = resolver;\n this.dep = [];\n }\n\n addDependencies(...dep) {\n this.dep.push(...dep);\n return this;\n }\n\n getDependencies () {\n return this.dep;\n }\n\n get () {\n return this.fn;\n }\n}\n\nexport {\n isSimpleObject,\n scheduler,\n compose,\n flat,\n identityMap,\n pullableEnd,\n pullableRecent,\n unique,\n splitPathProp,\n resolver,\n ForeignSet,\n resolveDependencyOrder,\n fetch,\n fetchAggregator,\n CustomResolver,\n getUpstreamNodes\n};\n","export default class GraphNode {\n constructor (name, qualifiedName, options) {\n /* istanbul ignore next */options = options || {};\n this.name = name;\n this.qualifiedName = qualifiedName;\n this.edges = [];\n this.outgoingEdges = [];\n this._seed = null;\n this.requireResolve = true;\n this.retriever = options.retriever;\n this.history = [];\n this.resolver = null;\n this.electricEdges = [];\n }\n\n addDependencies (...dep) {\n this.edges.push(...dep);\n dep.forEach(entry => entry.outgoingEdges.push(this));\n return this;\n }\n\n addElectricNode (node) {\n this.electricEdges.push(node);\n return this;\n }\n\n get seed () {\n return this._seed;\n }\n\n set seed (value) {\n this._seed = value;\n this.requireResolve = true;\n return this;\n }\n\n resolve () {\n this.seed = this.resolver(...this.retrieveDetails());\n this.history.push(this.seed);\n this.requireResolve = false;\n return this;\n }\n\n retrieveDetails () {\n if (this.edges.length === 0) {\n return [{\n name: this.name,\n qualifiedName: this.qualifiedName,\n value: this.seed\n }];\n }\n return this.retriever(...this.edges.map(edge => edge.qualifiedName));\n }\n\n repeatHead () {\n const\n history = this.history,\n head = history[history.length - 1];\n // @todo- Akash, write test case if history.length === 0 to pass code coverage\n if (history.length === 0) {\n return this;\n }\n history.push(head);\n return this;\n }\n\n flush () {\n const hist = this.history,\n head = hist[hist.length - 1];\n hist.length = 0;\n hist.push(head);\n return this;\n }\n\n isRoot () {\n return this.name === null;\n }\n}\n","import {\n pullableRecent,\n pullableEnd\n} from './utils';\n\nexport default class ElectricNode {\n constructor () {\n this.edges = [];\n this.listeners = {\n nextFrame: [],\n currentFrame: []\n };\n }\n\n addEdges (...nodes) {\n this.edges.push(...nodes);\n return this;\n }\n\n regListenerForCurrFrame (fn) {\n const lstnrs = this.listeners.currentFrame;\n let index = lstnrs.push(pullableRecent(this.edges, fn)) - 1;\n\n return () => {\n this.listeners.currentFrame = lstnrs.filter((fn, i) => i !== index);\n };\n }\n\n regListenerForNextFrame (fn) {\n const lstnrs = this.listeners.nextFrame;\n let index = lstnrs.push(pullableEnd(this.edges, fn)) - 1;\n\n return () => {\n this.listeners.nextFrame = lstnrs.filter((fn, i) => i !== index);\n };\n }\n\n hasNextFrameListener () {\n return !!this.listeners.nextFrame.length;\n }\n}\n","import {\n isSimpleObject,\n resolver,\n // upstreamNodes,\n flat,\n resolveDependencyOrder,\n getUpstreamNodes,\n ForeignSet,\n fetch,\n CustomResolver,\n scheduler\n} from './utils';\nimport Node from './graph-node';\nimport ElectricNode from './electric-node';\n\nexport default class Graph {\n constructor () {\n this.qualifiedNodeMap = {};\n this.retriever = fetch(this.qualifiedNodeMap);\n this.root = new Node(null, null, { retriever: this.retriever });\n this.root.resolver = resolver.accumulate;\n\n this._wholeSet = null;\n this._propagate = true;\n this.propagationOverride = {\n currentFrameListeners: false,\n nextFrameListeners: false\n };\n\n this._schedule = scheduler((payload) => {\n let qname;\n for (qname in payload.flushTarget) {\n if (!({}).hasOwnProperty.call(this.qualifiedNodeMap, qname)) {\n return;\n }\n this.qualifiedNodeMap[qname].flush();\n }\n });\n }\n\n createNodesFrom (obj, mount) {\n let val,\n resolveReqList;\n const qualifiedNodeMap = this.qualifiedNodeMap,\n root = this.root,\n retriever = this.retriever;\n\n (function rec (objn, qualifiedName, history) {\n let key,\n qname,\n perv,\n node;\n\n for (key in objn) {\n if (!({}).hasOwnProperty.call(objn, key)) {\n continue;\n }\n qname = `${qualifiedName}${key}`;\n node = new Node(key, qname, { retriever });\n qualifiedNodeMap[qname] = node;\n\n if ((perv = history.perv) !== undefined) {\n perv.addDependencies(node);\n } else {\n // top most level entries\n root.addDependencies(node);\n }\n\n if (isSimpleObject(val = objn[key])) {\n rec(val, `${qualifiedName}${key}.`, { perv: node });\n node.resolver = resolver.accumulate;\n } else if (val instanceof CustomResolver) {\n node.resolver = val.get();\n node.addDependencies(...val.getDependencies().map(qname => qualifiedNodeMap[qname]));\n } else {\n node.resolver = resolver.identity;\n node.seed = val;\n // node.resolve();\n }\n }\n }(obj, mount === null ? '' : `${mount}.`, {\n perv: qualifiedNodeMap[mount]\n }));\n\n this._wholeSet = new ForeignSet(Object.keys(this.qualifiedNodeMap));\n\n // Recalculate the model without firing the listeners\n // @todo selective branch resolve. Currently resolve gets called even for a branch which was updated\n resolveReqList = this.constructor.getResolvedList(root).concat(root).filter(node => node.requireResolve);\n resolveReqList.forEach(node => node.resolve());\n getUpstreamNodes(resolveReqList).forEach(node => node.resolve());\n return this;\n }\n\n getNodeValue (prop) {\n if (prop in this.qualifiedNodeMap) {\n return this.qualifiedNodeMap[prop].seed;\n }\n return undefined;\n }\n\n createElectricNodeOf (props, fnSpec) {\n const nodes = props.map(prop => this.qualifiedNodeMap[prop]),\n eNode = new ElectricNode().addEdges(...nodes);\n\n nodes.forEach(node => node.addElectricNode(eNode));\n return eNode[`regListenerFor${fnSpec.type}`](fnSpec.fn);\n }\n\n update (...params) {\n let changedSet,\n upstreamNodes;\n const\n electricEdges = [],\n nodes = params.map((entry) => {\n entry[0].seed = entry[1];\n return entry[0];\n });\n nodes.forEach(node => node.resolve());\n electricEdges.push(...flat(...nodes.map(node => node.electricEdges)));\n changedSet = new ForeignSet(nodes.map(node => node.qualifiedName));\n\n if (!this._propagate) {\n this.__execUniqueElectricEdges(electricEdges);\n this._propagate = true;\n return this;\n }\n\n upstreamNodes = getUpstreamNodes(nodes);\n upstreamNodes.forEach(upstreamNode => upstreamNode.resolve());\n changedSet.append(upstreamNodes.map(node => node.qualifiedName));\n electricEdges.push(...flat(...upstreamNodes.map(node => node.electricEdges)));\n\n this.__execUniqueElectricEdges(Array.from(new Set(electricEdges)), changedSet);\n return this;\n }\n\n __execUniqueElectricEdges (electricEdges, changedSet) {\n const\n cfLstnrs = [], // current frame listeners\n nfLstnrs = []; // next frame listeners\n if (changedSet) {\n const\n differenceSet = ForeignSet.difference(this._wholeSet, changedSet),\n entries = differenceSet.toArray();\n\n entries.forEach(entry => this.qualifiedNodeMap[entry].repeatHead());\n }\n\n electricEdges.forEach((e) => {\n cfLstnrs.push(...e.listeners.currentFrame);\n });\n electricEdges.forEach((e) => {\n nfLstnrs.push(...e.listeners.nextFrame);\n });\n\n !this.propagationOverride.currentFrameListeners && cfLstnrs.forEach(fn => fn());\n !this.propagationOverride.nextFrameListeners && this._schedule(nfLstnrs, { flushTarget: changedSet });\n this.resetPropagationOverride();\n return this;\n }\n\n resetNodeValue (...qnames) {\n const nodes = qnames.map(qname => this.qualifiedNodeMap[qname]),\n args = nodes.map(node => [node, node.seed]);\n this.update(...args);\n return this;\n }\n\n static getResolvedList (node) {\n const resolved = [];\n resolveDependencyOrder(node, resolved, {});\n return resolved;\n }\n\n stopPropagation () {\n this._propagate = false;\n return this;\n }\n\n resetPropagationOverride () {\n this.propagationOverride.currentFrameListeners = false;\n this.propagationOverride.nextFrameListeners = false;\n return this;\n }\n\n setPropagationOverride (key) {\n this.propagationOverride[`${key}Listeners`] = true;\n return this;\n }\n\n getNodeFromQualifiedName (qname) {\n return this.qualifiedNodeMap[qname];\n }\n}\n","import Graph from './graph';\nimport { CustomResolver, fetchAggregator } from './utils';\n\n/**\n * The container class for Hyperdis. Hyperdis is an enabler for observable object with few interesting features like,\n * calculated property, next frame and same frame listeners, multiple listeners etc with a dependency resolving system.\n * It internally uses a graph to hold the hierarchial relationship of a object. Model is merely a container which\n * ties all the components together.\n *\n * @todo Circular dependency detection is not present\n *\n * @example check src/index.spec.js\n * @class\n */\nclass Model {\n constructor () {\n this._graph = new Graph();\n this._lockFlag = false;\n this._reqQ = [];\n }\n\n /**\n * Static method to create and init the model with an observable seed\n *\n * @param {Object} obj The target object which is required to be made observable\n * @return {Model} instance of the observable object model\n */\n static create (obj) {\n return new Model()._addPropInModel(null, obj);\n }\n\n /**\n * Appends more observable property on the already observable instance. This mutates the original model.\n *\n * This function works in two mode. One being\n * @param {String} mountPoint the property on which the new set of properties will be mounted. If its a nested\n * property then the mountPoint has to be written such a way so it feels like you are\n * accessing the object. If the mount point is not found then he obeservables are added in\n * the root.\n * @param {Object} The target object which is required to be made observable\n *\n * Another being\n * @param {Object} The target object which is required to be made observable\n *\n * @return {Model} instance of the observable object model\n */\n append (...params) {\n let mountPoint,\n obj;\n\n if (params.length === 1) {\n mountPoint = null;\n obj = params[0];\n } else {\n mountPoint = params[0];\n obj = params[1];\n }\n\n this._addPropInModel(mountPoint, obj);\n return this;\n }\n\n /**\n * Creates a calculated variable from existing variable. This variable can't be updated from outside.\n * @param {string} mountpoint property path on which the new variable will be placed\n * @param {string} name name of the variable. If the variable could have hierarchy like `limits.start`\n * @param {Function} fn funtion where the dependent variables are injected based on the dependency requirement\n */\n calculatedProp (...params) {\n let calculationConfig,\n customResolver,\n varName,\n mount,\n fetchFn;\n\n if (params.length > 2) {\n mount = params[0];\n varName = params[1];\n fetchFn = params[2];\n } else {\n mount = null;\n varName = params[0];\n fetchFn = params[1];\n }\n\n calculationConfig = fetchFn(fetchAggregator);\n customResolver = new CustomResolver(calculationConfig.fn);\n customResolver.addDependencies(...calculationConfig.dependencies);\n\n this._addPropInModel(mount, { [varName]: customResolver });\n return this;\n }\n\n // eslint-disable-next-line require-jsdoc\n _addPropInModel (mountPoint, obj) {\n this._graph.createNodesFrom(obj, mountPoint);\n return this;\n }\n\n /**\n * Register a listener in the current frame when a property or group of properties is changed.\n *\n * @example\n * This function takes a single or group of property and handler which is called when any of the properties are\n * changed.\n * When a single property is changed the handler is called with two parameter, what was the old value of the state\n * property and what is the new value.\n * myState.on('range.start', (oldValue, newValue) => {\n * console.log('Value before prop change', oldValue);\n * console.log('Value after prop change', newValue);\n * });\n *\n * myState.prop('range.start', 9);\n * // Output\n * Value before prop change 1\n * Value after prop change 9\n *\n * If a handler is registered on change of a property which has another state property as value, then the handler\n * gets called whenever any state property connected to it gets changed\n *\n * myState.on('range', (oldValue, newValue) => {\n * console.log('Value before prop change', oldValue);\n * console.log('Value after prop change', newValue);\n * });\n *\n * myState.prop('range.start', 10);\n * myState.prop('range.type.absolute', false);\n *\n * // Output\n * Value before prop change\n * range {\n * start: 9,\n * end: 5,\n * type: {\n * absolute: true\n * }\n * }\n * Value after prop change\n * range: {\n * start: 10,\n * end: 5,\n * type: {\n * absolute: false\n * }\n * }\n * If a handler is registered with more than one property change then, the handler is called when any of the\n * properties gets changed. In this cast the handler is called with more than one parameter: each for one state\n * property which is registered for listening. Each parameter is of type array containing [oldValue, newValue]\n *\n * myState.on('range.start', 'range.end', (start, end) => {\n * console.log('Start', start);\n * console.log('End', end);\n * });\n *\n * myState.prop('range.start', 12);\n *\n * // Output\n * Start [10, 12]\n * End [5, 5]\n *\n * myState.prop('range.end', 7);\n *\n * // Output\n * Start [12, 12]\n * End [5, 7]\n *\n * The on returns a function which is when called the listener registered gets unregistered\n *\n * let unsub = myState.on(['range.start', 'range.end'], (start, end) => {\n * console.log('Start', start);\n * console.log('End', end);\n * });\n *\n * // Unsubscribe\n * unsub()\n *\n * On takes an optional boolean value as the last parameter, which if passed as a true value the handler gets called\n * during registration itself.\n *\n * @param {Array.} props List of properties which is of interest\n * @param {Function} fn Listener to be executed when any of them is changed. The listener is called with the old\n * value and new value of the properties\n * @param {*} instantCall When registered if the function is to be triggered with the value of the property\n *\n * @return {Function} function to unsubscribe from the listeners registry\n */\n on (props, fn, instantCall) {\n const\n propsArr = props instanceof Array ? props : [props],\n // All there listeners will be executed in the current stack frame\n unsub = this._graph.createElectricNodeOf(propsArr, {\n type: 'CurrFrame',\n fn\n });\n\n if (instantCall) {\n // Bar current next frame listeners from getting fired\n this._graph.stopPropagation().setPropagationOverride('nextFrame').resetNodeValue(...props);\n }\n return unsub;\n }\n\n /**\n * Register a listener for the next frame when a property or group of properties is changed.\n *\n * @example\n * See the examples for the on listener\n *\n * @param {Array.} props List of properties which is of interest\n * @param {Function} fn Listener to be executed when any of them is changed. The listener is called with the old\n * value and new value of the properties. Here the oldvalue is last value of the last frame\n * @param {*} instantCall When registered if the function is to be triggered with the value of the property\n *\n * @return {Function} function to unsubscribe from the listeners registry\n */\n next (props, fn, instantCall) {\n const\n propsArr = props instanceof Array ? props : [props],\n // All there listeners will be executed at the tick of next animation frame\n unsub = this._graph.createElectricNodeOf(propsArr, {\n type: 'NextFrame',\n fn\n });\n\n // @todo check support for this from the graph side\n if (instantCall) {\n // Bar current frame listeners from getting fired\n this._graph.stopPropagation().setPropagationOverride('currentFrame').resetNodeValue(...props);\n }\n\n return unsub;\n }\n\n /**\n * Lock queues the request of property change and releases the change when unlock is called. This is helpful when\n * multiple property is getting called and the model listeners are to be fired once at the end of update.\n *\n * @return {Model} instance of the model\n */\n lock () {\n this._lockFlag = true;\n this._reqQ.length = 0;\n return this;\n }\n\n /**\n * Unlock unleashes the change done after the lock was called.\n\n * @return {Model} instance of the model\n */\n unlock () {\n this._lockFlag = false;\n this.setProp(...this._reqQ);\n this._reqQ.length = 0;\n return this;\n }\n\n /**\n * This acts as getter and setter. If the function is called by passing only one argument, it retrieve the value\n * associated with the property. If the same function is called using two parameters, first one being the property\n * and second one being the value, then the value is set for the property and the handlers are called (if any)\n * which got registered using the on function\n *\n * Getter\n * @param {string} prop property path whose value to be retrieved\n * @return {Object} value of the property at the time of call\n *\n * Setter\n * @param {string} property property path whose value to be ser\n * @return {Model} instance of the model\n */\n prop (...params) {\n let prop,\n val,\n len;\n\n switch (len = params.length) {\n case 1:\n prop = params[0];\n break;\n\n case 2:\n prop = params[0];\n val = params[1];\n break;\n\n default:\n return this;\n }\n\n if (len === 2) {\n this._lockFlag ? this._reqQ.push([prop, val]) : this.setProp([prop, val]);\n return this;\n }\n\n return this._graph.getNodeValue(prop);\n }\n\n // eslint-disable-next-line require-jsdoc\n setProp (...props) {\n // Filter out the calculated variables, so that it cant be changed from outside\n // @todo if a node is not leafValue, and change is called, ignore it too\n // props = props.filter(prop => !(VirtualObj.walkTill(prop[0].split('.'), this._vObj).leafValue()\n // instanceof CalculatedVar));\n\n if (props.length === 0) {\n return this;\n }\n\n this._graph.update(...props.map(prop => [this._graph.getNodeFromQualifiedName(prop[0]), prop[1]]));\n return this;\n }\n\n /**\n * Retrieves the graph representation of the object\n * @return {Graph} instance of the graph associated to the model\n */\n graph () {\n return this._graph;\n }\n\n /**\n * Get serialized data from the model\n *\n * @return {Object} Serialized data\n */\n serialize () {\n return this._graph.root.seed;\n }\n}\n\nexport default Model;\n","import Model from './model';\n\nexport default Model;\n","module.exports = function(module) {\n\tif (!module.webpackPolyfill) {\n\t\tmodule.deprecate = function() {};\n\t\tmodule.paths = [];\n\t\t// module.parent = undefined by default\n\t\tif (!module.children) module.children = [];\n\t\tObject.defineProperty(module, \"loaded\", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.l;\n\t\t\t}\n\t\t});\n\t\tObject.defineProperty(module, \"id\", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.i;\n\t\t\t}\n\t\t});\n\t\tmodule.webpackPolyfill = 1;\n\t}\n\treturn module;\n};\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _lib = require('./lib');\n\nvar _lib2 = _interopRequireDefault(_lib);\n\nvar _containerManager = require('./container-manager');\n\nvar _containerManager2 = _interopRequireDefault(_containerManager);\n\nvar slLib = _lib2['default'].init(typeof window !== \"undefined\" ? window : undefined),\n doc = slLib.win.document,\n M = slLib.win.Math,\n max = M.max,\n round = M.round,\n BLANK = '',\n htmlSplCharSpace = { ' ': ' ' },\n documentSupport = slLib.getDocumentSupport(),\n SVG_BBOX_CORRECTION = documentSupport.isWebKit ? 0 : 4.5;\n\n/*\n * Create new instance of SmartLabelManager.\n *\n * SmartLabelManager controls the lifetime of the execution space where the text's metrics will be calculated.\n * This takes a string for a given style and returns the height, width.\n * If a bound box is defined it wraps the text and returns the wrapped height and width.\n * It allows to append ellipsis at the end if the text is truncated.\n *\n * @param {String | Number} id - Id of the instance. If the same id is passed, it disposes the old instance and\n * save the new one;\n * @param {String | HTMLElement} container - The id or the instance of the container where the intermediate dom\n * elements are to be attached. If not passed, it appends in div\n *\n * @param {Boolean} useEllipses - This decides if a ellipses to be appended if the text is truncated.\n * @param {Object} options - Control options\n * {\n * maxCacheLimit: No of letter to be cached. Default: 500.\n * }\n * @constructor\n */\nfunction SmartLabelManager(id, container, useEllipses, options) {\n var wrapper,\n prop,\n max,\n prevInstance,\n isBrowserLess = false,\n store = SmartLabelManager.store;\n\n if (typeof id === 'undefined' || typeof id === 'object') {\n return;\n }\n\n if (prevInstance = store[id]) {\n prevInstance.dispose();\n }\n\n store[id] = this;\n options = options || {};\n options.maxCacheLimit = isFinite(max = options.maxCacheLimit) ? max : slLib.maxDefaultCacheLimit;\n\n if (typeof container === 'string') {\n container = doc.getElementById(container);\n }\n\n wrapper = slLib.createContainer(container);\n wrapper.innerHTML = slLib.testStrAvg;\n\n if (documentSupport.isHeadLess || !documentSupport.isIE && !wrapper.offsetHeight && !wrapper.offsetWidth) {\n isBrowserLess = true;\n }\n\n wrapper.innerHTML = '';\n for (prop in slLib.parentContainerStyle) {\n wrapper.style[prop] = slLib.parentContainerStyle[prop];\n }\n\n this.id = id;\n this.parentContainer = wrapper;\n\n this._containerManager = new _containerManager2['default'](wrapper, isBrowserLess, 10);\n this._showNoEllipses = !useEllipses;\n this._init = true;\n this.style = {};\n this.options = options;\n\n this.setStyle();\n}\n\n/*\n * getSmartText returns the text separated by
whenever a break is necessary. This is to recgonize one\n * generalized format independent of the implementation (canvas based solution, svg based solution). This method\n * converts the output of getSmartText().text to array of lines if the text is wrapped. It sets a named property\n * `lines` on the object passed as parameter.\n *\n * @param {Object} smartlabel - the object returned by getSmartText based on which line arr which to be formed.\n *\n * @return {Object} - The same object which was passed in the arguments. Also a named property `lines` is set.\n */\nSmartLabelManager.textToLines = function (smartlabel) {\n smartlabel = smartlabel || {};\n\n if (!smartlabel.text) {\n smartlabel.text = '';\n } else if (typeof smartlabel.text !== 'string') {\n smartlabel.text = smartlabel.text.toString();\n }\n\n smartlabel.lines = smartlabel.text.split(/\\n|/ig);\n return smartlabel;\n};\n\n// Saves all the instance created so far\nSmartLabelManager.store = {};\n\n// Calculates space taken by a character with an approximation value which is calculated by repeating the\n// character by string length times.\nSmartLabelManager.prototype._calCharDimWithCache = function (text, calculateDifference, length) {\n if (!this._init) {\n return false;\n }\n\n var size,\n csArr,\n tw,\n twi,\n cachedStyle,\n asymmetricDifference,\n maxAdvancedCacheLimit = this.options.maxCacheLimit,\n container = this._container,\n style = this.style || {},\n cache = this._advancedCache || (this._advancedCache = {}),\n advancedCacheKey = this._advancedCacheKey || (this._advancedCacheKey = []),\n cacheName = text + (style.fontSize || BLANK) + (style.fontFamily || BLANK) + (style.fontWeight || BLANK) + (style.fontStyle || BLANK),\n cacheInitName = text + 'init' + (style.fontSize || BLANK) + (style.fontFamily || BLANK) + (style.fontWeight || BLANK) + (style.fontStyle || BLANK);\n\n htmlSplCharSpace[text] && (text = htmlSplCharSpace[text]);\n\n if (!calculateDifference) {\n asymmetricDifference = 0;\n } else {\n if ((asymmetricDifference = cache[cacheInitName]) === undefined) {\n container.innerHTML = text.repeat ? text.repeat(length) : Array(length + 1).join(text); // jshint ignore:line\n tw = container.offsetWidth;\n\n container.innerHTML = text;\n twi = container.offsetWidth;\n\n asymmetricDifference = cache[cacheInitName] = (tw - length * twi) / (length + 1);\n advancedCacheKey.push(cacheInitName);\n if (advancedCacheKey.length > maxAdvancedCacheLimit) {\n delete cache[advancedCacheKey.shift()];\n }\n }\n }\n\n if (cachedStyle = cache[cacheName]) {\n csArr = cachedStyle.split(',');\n return {\n width: parseFloat(csArr[0], 10),\n height: parseFloat(csArr[1], 10)\n };\n }\n\n container.innerHTML = text;\n\n size = {\n height: container.offsetHeight,\n width: container.offsetWidth + asymmetricDifference\n };\n\n cache[cacheName] = size.width + ',' + size.height;\n advancedCacheKey.push(cacheName);\n if (advancedCacheKey.length > maxAdvancedCacheLimit) {\n delete cache[advancedCacheKey.shift()];\n }\n\n return size;\n};\n\n// Provide function to calculate the height and width based on the environment and available support from dom.\nSmartLabelManager.prototype._getWidthFn = function () {\n var contObj = this._containerObj,\n container = this._container,\n svgText = contObj.svgText;\n\n if (svgText) {\n return function (str) {\n var bbox, width;\n\n svgText.textContent = str;\n bbox = svgText.getBBox();\n width = bbox.width - SVG_BBOX_CORRECTION;\n if (width < 1) {\n width = bbox.width;\n }\n\n return width;\n };\n } else {\n return function (str) {\n container.innerHTML = str;\n return container.offsetWidth;\n };\n }\n};\n\n/*\n * Sets the style based on which the text's metrics to be calculated.\n *\n * @param {Object} style - The style object which affects the text size\n * {\n * fontSize / 'font-size' : MUST BE FOLLOWED BY PX (10px, 11px)\n * fontFamily / 'font-family'\n * fontWeight / 'font-weight'\n * fontStyle / 'font-style'\n * }\n *\n * @return {SmartLabelManager} - Current instance of SmartLabelManager\n */\nSmartLabelManager.prototype.setStyle = function (style) {\n if (!this._init) {\n return this;\n }\n\n var sCont;\n\n if (style === this.style && !this._styleNotSet) {\n return;\n }\n\n if (!style) {\n style = this.style;\n }\n\n slLib.setLineHeight(style);\n this.style = style;\n\n this._containerObj = sCont = this._containerManager.get(style);\n\n if (this._containerObj) {\n this._container = sCont.node;\n this._context = sCont.context;\n this._cache = sCont.charCache;\n this._lineHeight = sCont.lineHeight;\n this._styleNotSet = false;\n } else {\n this._styleNotSet = true;\n }\n\n return this;\n};\n\n/*\n * Decides whether ellipses to be shown if the node is truncated\n *\n * @param {Boolean} useEllipses - decides if a ellipses to be appended if the text is truncated. Default: false\n *\n * @return {SmartLabelManager} - Current instance of SmartLabelManager\n */\nSmartLabelManager.prototype.useEllipsesOnOverflow = function (useEllipses) {\n if (!this._init) {\n return this;\n }\n this._showNoEllipses = !useEllipses;\n return this;\n};\n\n/*\n * Get wrapped or truncated text if a bound box is defined around it. The result text would be separated by
\n * if wrapped\n *\n * @param {String} text - the subject text\n * @param {Number} maxWidth - width in px of the the bound box\n * @param {Number} maxHeight - height in px of the the bound box\n * @param {Boolean} noWrap - whether the text to be wrapped. Default false.\n *\n * @return {Object} - The metrics of the text bounded by the box\n * {\n * height : height of the wrapped text\n * width : width of the wrapped text\n * isTruncated : whether the text is truncated\n * maxHeight : Maximum height given\n * maxWidth : Maximum width given\n * oriText : Original text sent\n * oriTextHeight : Original text height\n * oriTextWidth : Original text width\n * text : SMART TEXT\n * }\n */\nSmartLabelManager.prototype.getSmartText = function (text, maxWidth, maxHeight, noWrap) {\n if (!this._init) {\n return false;\n }\n\n if (text === undefined || text === null) {\n text = '';\n } else if (typeof text !== 'string') {\n text = text.toString();\n }\n\n var len,\n trimStr,\n tempArr,\n tmpText,\n maxWidthWithEll,\n toolText,\n oriWidth,\n oriHeight,\n newCharIndex,\n nearestChar,\n tempChar,\n getWidth,\n initialLeft,\n initialTop,\n getOriSizeImproveObj,\n spanArr,\n x,\n y,\n minWidth,\n elem,\n chr,\n elemRightMostPoint,\n elemLowestPoint,\n lastBR,\n removeFromIndex,\n removeFromIndexForEllipses,\n hasHTMLTag = false,\n maxStrWidth = 0,\n lastDash = -1,\n lastSpace = -1,\n lastIndexBroken = -1,\n strWidth = 0,\n strHeight = 0,\n oriTextArr = [],\n i = 0,\n ellipsesStr = this._showNoEllipses ? '' : '...',\n lineHeight = this._lineHeight,\n context = this._context,\n container = this._container,\n sCont = this._containerObj,\n ellipsesWidth = sCont.ellipsesWidth,\n dotWidth = sCont.dotWidth,\n characterArr = [],\n dashIndex = -1,\n spaceIndex = -1,\n lastLineBreak = -1,\n fastTrim = function fastTrim(str) {\n str = str.replace(/^\\s\\s*/, '');\n var ws = /\\s/,\n i = str.length;\n while (ws.test(str.charAt(i -= 1))) {/* jshint noempty:false */}\n return str.slice(0, i + 1);\n },\n smartLabel = {\n text: text,\n maxWidth: maxWidth,\n maxHeight: maxHeight,\n width: null,\n height: null,\n oriTextWidth: null,\n oriTextHeight: null,\n oriText: text,\n isTruncated: false\n };\n\n getWidth = this._getWidthFn();\n\n // In some browsers, offsetheight of a single-line text is getting little (1 px) heigher value of the\n // lineheight. As a result, smartLabel is unable to return single-line text.\n // To fix this, increase the maxHeight a little amount. Hence maxHeight = lineHeight * 1.2\n if (maxHeight === lineHeight) {\n maxHeight *= 1.2;\n }\n\n if (container) {\n if (!documentSupport.isBrowserLess) {\n hasHTMLTag = slLib.xmlTagRegEx.test(text);\n if (!hasHTMLTag) {\n // Due to support of <,> for xml we convert <, > to <,> respectively so to get the correct\n // width it is required to convert the same before calculation for the new improve version of the\n // get text width.\n tmpText = text.replace(slLib.ltgtRegex, function (match) {\n return match === '<' ? '<' : '>';\n });\n getOriSizeImproveObj = this.getOriSize(tmpText, true);\n\n smartLabel.oriTextWidth = oriWidth = getOriSizeImproveObj.width;\n smartLabel.oriTextHeight = oriHeight = getOriSizeImproveObj.height;\n } else {\n container.innerHTML = text;\n smartLabel.oriTextWidth = oriWidth = container.offsetWidth;\n smartLabel.oriTextHeight = oriHeight = container.offsetHeight;\n }\n\n if (oriHeight <= maxHeight && oriWidth <= maxWidth) {\n smartLabel.width = smartLabel.oriTextWidth = oriWidth;\n smartLabel.height = smartLabel.oriTextHeight = oriHeight;\n return smartLabel;\n }\n\n if (lineHeight > maxHeight) {\n smartLabel.text = '';\n smartLabel.width = smartLabel.oriTextWidth = 0;\n smartLabel.height = smartLabel.oriTextHeight = 0;\n return smartLabel;\n }\n }\n\n // Calculate width with ellipses\n text = fastTrim(text).replace(/(\\s+)/g, ' ');\n maxWidthWithEll = this._showNoEllipses ? maxWidth : maxWidth - ellipsesWidth;\n\n if (!hasHTMLTag) {\n oriTextArr = text.split('');\n len = oriTextArr.length;\n trimStr = '', tempArr = [];\n tempChar = oriTextArr[0];\n\n if (this._cache[tempChar]) {\n minWidth = this._cache[tempChar].width;\n } else {\n minWidth = getWidth(tempChar);\n this._cache[tempChar] = { width: minWidth };\n }\n\n if (maxWidthWithEll > minWidth) {\n tempArr = text.substr(0, slLib.getNearestBreakIndex(text, maxWidthWithEll, this)).split('');\n i = tempArr.length;\n } else if (minWidth > maxWidth) {\n smartLabel.text = '';\n smartLabel.width = smartLabel.oriTextWidth = smartLabel.height = smartLabel.oriTextHeight = 0;\n return smartLabel;\n } else if (ellipsesStr) {\n maxWidthWithEll = maxWidth - 2 * dotWidth;\n if (maxWidthWithEll > minWidth) {\n ellipsesStr = '..';\n } else {\n maxWidthWithEll = maxWidth - dotWidth;\n if (maxWidthWithEll > minWidth) {\n ellipsesStr = '.';\n } else {\n maxWidthWithEll = 0;\n ellipsesStr = '';\n }\n }\n }\n\n strWidth = getWidth(tempArr.join(''));\n strHeight = this._lineHeight;\n\n if (noWrap) {\n for (; i < len; i += 1) {\n tempChar = tempArr[i] = oriTextArr[i];\n if (this._cache[tempChar]) {\n minWidth = this._cache[tempChar].width;\n } else {\n if (!getOriSizeImproveObj || !(minWidth = getOriSizeImproveObj.detailObj[tempChar])) {\n minWidth = getWidth(tempChar);\n }\n this._cache[tempChar] = {\n width: minWidth\n };\n }\n strWidth += minWidth;\n if (strWidth > maxWidthWithEll) {\n if (!trimStr) {\n trimStr = tempArr.slice(0, -1).join('');\n }\n if (strWidth > maxWidth) {\n smartLabel.text = fastTrim(trimStr) + ellipsesStr;\n smartLabel.tooltext = smartLabel.oriText;\n smartLabel.width = getWidth(smartLabel.text);\n smartLabel.height = this._lineHeight;\n return smartLabel;\n }\n }\n }\n\n smartLabel.text = tempArr.join('');\n smartLabel.width = strWidth;\n smartLabel.height = this._lineHeight;\n return smartLabel;\n } else {\n for (; i < len; i += 1) {\n tempChar = tempArr[i] = oriTextArr[i];\n if (tempChar === ' ' && !context) {\n tempChar = ' ';\n }\n\n if (this._cache[tempChar]) {\n minWidth = this._cache[tempChar].width;\n } else {\n if (!getOriSizeImproveObj || !(minWidth = getOriSizeImproveObj.detailObj[tempChar])) {\n minWidth = getWidth(tempChar);\n }\n this._cache[tempChar] = {\n width: minWidth\n };\n }\n strWidth += minWidth;\n\n if (strWidth > maxWidthWithEll) {\n if (!trimStr) {\n trimStr = tempArr.slice(0, -1).join('');\n }\n if (strWidth > maxWidth) {\n /** @todo use regular expressions for better performance. */\n lastSpace = text.substr(0, tempArr.length).lastIndexOf(' ');\n lastDash = text.substr(0, tempArr.length).lastIndexOf('-');\n if (lastSpace > lastIndexBroken) {\n strWidth = getWidth(tempArr.slice(lastIndexBroken + 1, lastSpace).join(''));\n tempArr.splice(lastSpace, 1, '
');\n lastIndexBroken = lastSpace;\n newCharIndex = lastSpace + 1;\n } else if (lastDash > lastIndexBroken) {\n if (lastDash === tempArr.length - 1) {\n strWidth = getWidth(tempArr.slice(lastIndexBroken + 1, lastSpace).join(''));\n tempArr.splice(lastDash, 1, '
-');\n } else {\n strWidth = getWidth(tempArr.slice(lastIndexBroken + 1, lastSpace).join(''));\n tempArr.splice(lastDash, 1, '-
');\n }\n lastIndexBroken = lastDash;\n newCharIndex = lastDash + 1;\n } else {\n tempArr.splice(tempArr.length - 1, 1, '
' + oriTextArr[i]);\n lastLineBreak = tempArr.length - 2;\n strWidth = getWidth(tempArr.slice(lastIndexBroken + 1, lastLineBreak + 1).join(''));\n lastIndexBroken = lastLineBreak;\n newCharIndex = i;\n }\n strHeight += this._lineHeight;\n if (strHeight > maxHeight) {\n smartLabel.text = fastTrim(trimStr) + ellipsesStr;\n smartLabel.tooltext = smartLabel.oriText;\n // The max width among all the lines will be the width of the string.\n smartLabel.width = maxWidth;\n smartLabel.height = strHeight - this._lineHeight;\n return smartLabel;\n } else {\n maxStrWidth = max(maxStrWidth, strWidth);\n trimStr = null;\n nearestChar = slLib.getNearestBreakIndex(text.substr(newCharIndex), maxWidthWithEll, this);\n strWidth = getWidth(text.substr(newCharIndex, nearestChar || 1));\n if (tempArr.length < newCharIndex + nearestChar) {\n tempArr = tempArr.concat(text.substr(tempArr.length, newCharIndex + nearestChar - tempArr.length).split(''));\n i = tempArr.length - 1;\n }\n }\n }\n }\n }\n\n maxStrWidth = max(maxStrWidth, strWidth);\n\n smartLabel.text = tempArr.join('');\n smartLabel.width = maxStrWidth;\n smartLabel.height = strHeight;\n return smartLabel;\n }\n } else {\n toolText = text.replace(slLib.spanAdditionRegx, '$2');\n text = text.replace(slLib.spanAdditionRegx, slLib.spanAdditionReplacer);\n text = text.replace(/()/g, '$1');\n\n container.innerHTML = text;\n\n spanArr = container[documentSupport.childRetriverFn](documentSupport.childRetriverString);\n\n for (x = 0, y = spanArr.length; x < y; x += 1) {\n elem = spanArr[x];\n //chech whether this span is temporary inserted span from it's class\n if (documentSupport.noClassTesting || slLib.classNameReg.test(elem.className)) {\n chr = elem.innerHTML;\n if (chr !== '') {\n if (chr === ' ') {\n spaceIndex = characterArr.length;\n } else if (chr === '-') {\n dashIndex = characterArr.length;\n }\n\n characterArr.push({\n spaceIdx: spaceIndex,\n dashIdx: dashIndex,\n elem: elem\n });\n oriTextArr.push(chr);\n }\n }\n }\n\n i = 0;\n len = characterArr.length;\n minWidth = characterArr[0].elem.offsetWidth;\n\n if (minWidth > maxWidth) {\n smartLabel.text = '';\n smartLabel.width = smartLabel.oriTextWidth = smartLabel.height = smartLabel.oriTextHeight = 0;\n\n return smartLabel;\n } else if (minWidth > maxWidthWithEll && !this._showNoEllipses) {\n\n maxWidthWithEll = maxWidth - 2 * dotWidth;\n if (maxWidthWithEll > minWidth) {\n ellipsesStr = '..';\n } else {\n maxWidthWithEll = maxWidth - dotWidth;\n if (maxWidthWithEll > minWidth) {\n ellipsesStr = '.';\n } else {\n maxWidthWithEll = 0;\n ellipsesStr = '';\n }\n }\n }\n\n initialLeft = characterArr[0].elem.offsetLeft;\n initialTop = characterArr[0].elem.offsetTop;\n\n if (noWrap) {\n for (; i < len; i += 1) {\n elem = characterArr[i].elem;\n elemRightMostPoint = elem.offsetLeft - initialLeft + elem.offsetWidth;\n\n if (elemRightMostPoint > maxWidthWithEll) {\n if (!removeFromIndexForEllipses) {\n removeFromIndexForEllipses = i;\n }\n if (container.offsetWidth > maxWidth) {\n removeFromIndex = i;\n i = len;\n }\n }\n }\n } else {\n for (; i < len; i += 1) {\n elem = characterArr[i].elem;\n elemLowestPoint = elem.offsetHeight + (elem.offsetTop - initialTop);\n elemRightMostPoint = elem.offsetLeft - initialLeft + elem.offsetWidth;\n\n lastBR = null;\n\n if (elemRightMostPoint > maxWidthWithEll) {\n if (!removeFromIndexForEllipses) {\n removeFromIndexForEllipses = i;\n }\n\n if (elemRightMostPoint > maxWidth) {\n lastSpace = characterArr[i].spaceIdx;\n lastDash = characterArr[i].dashIdx;\n if (lastSpace > lastIndexBroken) {\n characterArr[lastSpace].elem.innerHTML = '
';\n lastIndexBroken = lastSpace;\n } else if (lastDash > lastIndexBroken) {\n if (lastDash === i) {\n // in case the overflowing character itself is the '-'\n characterArr[lastDash].elem.innerHTML = '
-';\n } else {\n characterArr[lastDash].elem.innerHTML = '-
';\n }\n lastIndexBroken = lastDash;\n } else {\n elem.parentNode.insertBefore(lastBR = doc.createElement('br'), elem);\n }\n\n //check whether this break made current element outside the area height\n if (elem.offsetHeight + elem.offsetTop > maxHeight) {\n //remove the lastly inserted line break\n if (lastBR) {\n lastBR.parentNode.removeChild(lastBR);\n } else if (lastIndexBroken === lastDash) {\n characterArr[lastDash].elem.innerHTML = '-';\n } else {\n characterArr[lastSpace].elem.innerHTML = ' ';\n }\n removeFromIndex = i;\n //break the looping condition\n i = len;\n } else {\n removeFromIndexForEllipses = null;\n }\n }\n } else {\n //check whether this break made current element outside the area height\n if (elemLowestPoint > maxHeight) {\n removeFromIndex = i;\n i = len;\n }\n }\n }\n }\n\n if (removeFromIndex < len) {\n //set the trancated property of the smartlabel\n smartLabel.isTruncated = true;\n\n /** @todo is this really needed? */\n removeFromIndexForEllipses = removeFromIndexForEllipses ? removeFromIndexForEllipses : removeFromIndex;\n\n for (i = len - 1; i >= removeFromIndexForEllipses; i -= 1) {\n elem = characterArr[i].elem;\n //chech whether this span is temporary inserted span from it's class\n elem.parentNode.removeChild(elem);\n }\n\n for (; i >= 0; i -= 1) {\n elem = characterArr[i].elem;\n if (slLib.classNameBrReg.test(elem.className)) {\n //chech whether this span is temporary inserted span from it's class\n elem.parentNode.removeChild(elem);\n } else {\n i = 0;\n }\n }\n }\n\n //get the smart text\n smartLabel.text = container.innerHTML.replace(slLib.spanRemovalRegx, '$1').replace(/\\&\\;/g, '&');\n if (smartLabel.isTruncated) {\n smartLabel.text += ellipsesStr;\n smartLabel.tooltext = toolText;\n }\n }\n\n smartLabel.height = container.offsetHeight;\n smartLabel.width = container.offsetWidth;\n\n return smartLabel;\n } else {\n smartLabel.error = new Error('Body Tag Missing!');\n return smartLabel;\n }\n};\n\n/*\n * Get the height and width of a text.\n *\n * @param {String} text - Text whose metrics to be measured\n * @param {Boolean} Optional detailedCalculationFlag - this flag if set it calculates per letter position\n * information and returns it. Ideally you dont need it unless you want to post process the\n * string. And its an EXPENSIVE OPERATION.\n *\n * @return {Object} - If detailedCalculationFlag is set to true the returned object would be\n * {\n * height: height of the text\n * width: width of the text\n * detailObj: detail calculation of letters in the format {lettername: width}\n * }\n * If detailedCalculationFlag is set to false the returned object wont have the detailObj prop.\n */\nSmartLabelManager.prototype.getOriSize = function (text, detailedCalculationFlag) {\n if (!this._init) {\n return false;\n }\n\n var textArr,\n letter,\n lSize,\n i,\n l,\n cumulativeSize = 0,\n height = 0,\n indiSizeStore = {};\n\n if (!detailedCalculationFlag) {\n return this._calCharDimWithCache(text);\n }\n\n // Calculate the width of every letter with an approximation\n textArr = text.split('');\n for (i = 0, l = textArr.length; i < l; i++) {\n letter = textArr[i];\n lSize = this._calCharDimWithCache(letter, true, textArr.length);\n height = max(height, lSize.height);\n cumulativeSize += lSize.width;\n indiSizeStore[letter] = lSize.width;\n }\n\n return {\n width: round(cumulativeSize),\n height: height,\n detailObj: indiSizeStore\n };\n};\n\n/*\n * Dispose the container and object allocated by the smartlabel\n */\nSmartLabelManager.prototype.dispose = function () {\n if (!this._init) {\n return this;\n }\n\n this._containerManager && this._containerManager.dispose && this._containerManager.dispose();\n\n delete this._container;\n delete this._context;\n delete this._cache;\n delete this._containerManager;\n delete this._containerObj;\n delete this.id;\n delete this.style;\n delete this.parentContainer;\n delete this._showNoEllipses;\n\n return this;\n};\n\nexports['default'] = SmartLabelManager;\nmodule.exports = exports['default'];","'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n\tvalue: true\n});\nvar lib = {\n\tinit: function init(win) {\n\t\tvar doc = win.document,\n\t\t nav = win.navigator,\n\t\t userAgent = nav.userAgent,\n\t\t DIV = 'DIV',\n\t\t ceil = Math.ceil,\n\t\t floor = Math.floor,\n\t\t containerInstanceCount = 0,\n\t\t clsNameSpace = 'fusioncharts-smartlabel-',\n\t\t containerClass = clsNameSpace + 'container',\n\t\t classNameWithTag = clsNameSpace + 'tag',\n\t\t classNameWithTagBR = clsNameSpace + 'br';\n\n\t\tlib = {\n\t\t\twin: win,\n\n\t\t\tcontainerClass: containerClass,\n\n\t\t\tclassNameWithTag: classNameWithTag,\n\n\t\t\tclassNameWithTagBR: classNameWithTagBR,\n\n\t\t\tmaxDefaultCacheLimit: 500,\n\n\t\t\tclassNameReg: new RegExp('\\b' + classNameWithTag + '\\b'),\n\n\t\t\tclassNameBrReg: new RegExp('\\b' + classNameWithTagBR + '\\b'),\n\n\t\t\tspanAdditionRegx: /(<[^<\\>]+?\\>)|(&(?:[a-z]+|#[0-9]+);|.)/ig,\n\n\t\t\tspanAdditionReplacer: '$1$2',\n\n\t\t\tspanRemovalRegx: new RegExp('\\\\]+?' + classNameWithTag + '[^\\\\>]{0,}\\\\>(.*?)\\\\<\\\\/span\\\\>', 'ig'),\n\n\t\t\txmlTagRegEx: new RegExp('<[^>][^<]*[^>]+>', 'i'),\n\n\t\t\tltgtRegex: /<|>/g,\n\n\t\t\tbrReplaceRegex: //ig,\n\n\t\t\ttestStrAvg: 'WgI',\n\n\t\t\t// This style is applied over the parent smartlabel container. The container is kept hidden from the viewport\n\t\t\tparentContainerStyle: {\n\t\t\t\tposition: 'absolute',\n\t\t\t\ttop: '-9999em',\n\t\t\t\twhiteSpace: 'nowrap',\n\t\t\t\tpadding: '0px',\n\t\t\t\twidth: '1px',\n\t\t\t\theight: '1px',\n\t\t\t\toverflow: 'hidden'\n\t\t\t},\n\n\t\t\t// All the style which might affect the text metrics\n\t\t\tsupportedStyle: {\n\t\t\t\tfont: 'font',\n\t\t\t\tfontFamily: 'font-family',\n\t\t\t\t'font-family': 'font-family',\n\t\t\t\tfontWeight: 'font-weight',\n\t\t\t\t'font-weight': 'font-weight',\n\t\t\t\tfontSize: 'font-size',\n\t\t\t\t'font-size': 'font-size',\n\t\t\t\tlineHeight: 'line-height',\n\t\t\t\t'line-height': 'line-height',\n\t\t\t\tfontStyle: 'font-style',\n\t\t\t\t'font-style': 'font-style'\n\t\t\t},\n\n\t\t\t// Get the support list for html the document where the text calcution is to be done.\n\t\t\tgetDocumentSupport: function getDocumentSupport() {\n\t\t\t\tvar childRetriverFn, childRetriverString, noClassTesting;\n\n\t\t\t\tif (doc.getElementsByClassName) {\n\t\t\t\t\tchildRetriverFn = 'getElementsByClassName';\n\t\t\t\t\tchildRetriverString = classNameWithTag;\n\t\t\t\t\tnoClassTesting = true;\n\t\t\t\t} else {\n\t\t\t\t\tchildRetriverFn = 'getElementsByTagName';\n\t\t\t\t\tchildRetriverString = 'span';\n\t\t\t\t\tnoClassTesting = false;\n\t\t\t\t}\n\n\t\t\t\treturn {\n\t\t\t\t\tisIE: /msie/i.test(userAgent) && !win.opera,\n\t\t\t\t\thasSVG: Boolean(win.SVGAngle || doc.implementation.hasFeature('http://www.w3.org/TR/SVG11/feature#BasicStructure', '1.1')),\n\t\t\t\t\tisHeadLess: new RegExp(' HtmlUnit').test(userAgent),\n\t\t\t\t\tisWebKit: new RegExp(' AppleWebKit/').test(userAgent),\n\t\t\t\t\tchildRetriverFn: childRetriverFn,\n\t\t\t\t\tchildRetriverString: childRetriverString,\n\t\t\t\t\tnoClassTesting: noClassTesting\n\t\t\t\t};\n\t\t\t},\n\n\t\t\t/*\n * Create a html div element and attach it with a parent. All the subsequent operations are performed\n * by upding this dom tree only.\n *\n * @param {HTMLElement} - The html element where the newly created div is to be attached. If not passed,\n * the new div is appended on the body.\n */\n\t\t\tcreateContainer: function createContainer(containerParent) {\n\t\t\t\tvar body, container;\n\n\t\t\t\tif (containerParent && (containerParent.offsetWidth || containerParent.offsetHeight)) {\n\t\t\t\t\tif (containerParent.appendChild) {\n\t\t\t\t\t\tcontainerParent.appendChild(container = doc.createElement(DIV));\n\t\t\t\t\t\tcontainer.className = containerClass;\n\t\t\t\t\t\tcontainer.setAttribute('aria-hidden', 'true');\n\t\t\t\t\t\tcontainer.setAttribute('role', 'presentation');\n\t\t\t\t\t\treturn container;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tbody = doc.getElementsByTagName('body')[0];\n\n\t\t\t\t\tif (body && body.appendChild) {\n\t\t\t\t\t\tcontainer = doc.createElement(DIV);\n\t\t\t\t\t\tcontainer.className = containerClass;\n\t\t\t\t\t\tcontainer.setAttribute('aria-hidden', 'true');\n\t\t\t\t\t\tcontainer.setAttribute('role', 'presentation');\n\t\t\t\t\t\tcontainerInstanceCount += 1;\n\t\t\t\t\t\tbody.appendChild(container);\n\t\t\t\t\t\treturn container;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// Finds a approximate position where the text is to be broken\n\t\t\tgetNearestBreakIndex: function getNearestBreakIndex(text, maxWidth, sl) {\n\t\t\t\tif (!text || !text.length) {\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\n\t\t\t\tvar difference,\n\t\t\t\t getWidth = sl._getWidthFn(),\n\t\t\t\t charLen = 0,\n\t\t\t\t increment = 0,\n\t\t\t\t oriWidth = getWidth(text),\n\t\t\t\t avgWidth = oriWidth / text.length;\n\n\t\t\t\tdifference = maxWidth;\n\t\t\t\tcharLen = ceil(maxWidth / avgWidth);\n\n\t\t\t\tif (oriWidth < maxWidth) {\n\t\t\t\t\treturn text.length - 1;\n\t\t\t\t}\n\n\t\t\t\tif (charLen > text.length) {\n\t\t\t\t\tdifference = maxWidth - oriWidth;\n\t\t\t\t\tcharLen = text.length;\n\t\t\t\t}\n\n\t\t\t\twhile (difference > 0) {\n\t\t\t\t\tdifference = maxWidth - getWidth(text.substr(0, charLen));\n\t\t\t\t\tincrement = floor(difference / avgWidth);\n\t\t\t\t\tif (increment) {\n\t\t\t\t\t\tcharLen += increment;\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn charLen;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\twhile (difference < 0) {\n\t\t\t\t\tdifference = maxWidth - getWidth(text.substr(0, charLen));\n\t\t\t\t\tincrement = floor(difference / avgWidth);\n\t\t\t\t\tif (increment) {\n\t\t\t\t\t\tcharLen += increment;\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn charLen;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn charLen;\n\t\t\t},\n\n\t\t\t/*\n * Determine lineheight of a text for a given style. It adds propery lineHeight to the style passed\n *\n * @param {Object} - The style based on which the text's metric needs to be calculated. The calculation happens\n * based on fontSize property, if its not present a default font size is assumed.\n *\n * @return {Object} - The style that was passed with lineHeight as a named propery set on the object.\n */\n\t\t\tsetLineHeight: function setLineHeight(styleObj) {\n\t\t\t\tvar fSize = styleObj.fontSize = styleObj.fontSize || '12px';\n\t\t\t\tstyleObj.lineHeight = styleObj.lineHeight || styleObj['line-height'] || parseInt(fSize, 10) * 1.2 + 'px';\n\t\t\t\treturn styleObj;\n\t\t\t}\n\t\t};\n\n\t\treturn lib;\n\t}\n};\n\nexports['default'] = lib;\nmodule.exports = exports['default'];","const Muze = require('./muze');\n\nmodule.exports = Muze.default ? Muze.default : Muze;\n","'use strict';\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _lib = require('./lib');\n\nvar _lib2 = _interopRequireDefault(_lib);\n\nvar slLib = _lib2['default'].init(typeof window !== \"undefined\" ? window : undefined),\n doc = slLib.win.document,\n documentSupport = slLib.getDocumentSupport(),\n SVG_BBOX_CORRECTION = documentSupport.isWebKit ? 0 : 4.5;\n\nfunction ContainerManager(parentContainer, isBrowserLess, maxContainers) {\n var svg;\n\n maxContainers = maxContainers > 5 ? maxContainers : 5;\n maxContainers = maxContainers < 20 ? maxContainers : 20;\n\n this.maxContainers = maxContainers;\n this.first = null;\n this.last = null;\n this.containers = {};\n this.length = 0;\n this.rootNode = parentContainer;\n\n if (isBrowserLess) {\n svg = doc.createElementNS('http://www.w3.org/2000/svg', 'svg');\n svg.setAttributeNS('http://www.w3.org/2000/svg', 'xlink', 'http://www.w3.org/1999/xlink');\n svg.setAttributeNS('http://www.w3.org/2000/svg', 'height', '0');\n svg.setAttributeNS('http://www.w3.org/2000/svg', 'width', '0');\n this.svgRoot = svg;\n this.rootNode.appendChild(svg);\n }\n}\n\nContainerManager.prototype.get = function (style) {\n var diff,\n key,\n containerObj,\n containers = this.containers,\n len = this.length,\n max = this.maxContainers,\n keyStr = '';\n\n for (key in slLib.supportedStyle) {\n if (style[key] !== undefined) {\n keyStr += slLib.supportedStyle[key] + ':' + style[key] + ';';\n }\n }\n\n if (!keyStr) {\n return false;\n }\n\n if (containerObj = containers[keyStr]) {\n if (this.first !== containerObj) {\n containerObj.prev && (containerObj.prev.next = containerObj.next);\n containerObj.next && (containerObj.next.prev = containerObj.prev);\n containerObj.next = this.first;\n containerObj.next.prev = containerObj;\n this.last === containerObj && (this.last = containerObj.prev);\n containerObj.prev = null;\n this.first = containerObj;\n }\n } else {\n if (len >= max) {\n diff = len - max + 1;\n // +1 is to remove an extra entry to make space for the new container to be added.\n while (diff--) {\n this.removeContainer(this.last);\n }\n }\n containerObj = this.addContainer(keyStr);\n }\n\n return containerObj;\n};\n\nContainerManager.prototype.addContainer = function (keyStr) {\n var node, container;\n\n this.containers[keyStr] = container = {\n next: null,\n prev: null,\n node: null,\n ellipsesWidth: 0,\n lineHeight: 0,\n dotWidth: 0,\n avgCharWidth: 4,\n keyStr: keyStr,\n charCache: {}\n };\n\n // Since the container objects are arranged from most recent to least recent order, we need to add the new\n // object at the beginning of the list.\n container.next = this.first;\n container.next && (container.next.prev = container);\n this.first = container;\n if (!this.last) {\n this.last = container;\n }\n this.length += 1;\n\n node = container.node = doc.createElement('div');\n this.rootNode.appendChild(node);\n\n if (documentSupport.isIE && !documentSupport.hasSVG) {\n node.style.setAttribute('cssText', keyStr);\n } else {\n node.setAttribute('style', keyStr);\n }\n\n node.setAttribute('aria-hidden', 'true');\n node.setAttribute('role', 'presentation');\n node.style.display = 'inline-block';\n\n node.innerHTML = slLib.testStrAvg; // A test string.\n container.lineHeight = node.offsetHeight;\n container.avgCharWidth = node.offsetWidth / 3;\n\n if (documentSupport.isBrowserLess) {\n node = container.svgText = doc.createElementNS('http://www.w3.org/2000/svg', 'text');\n node.setAttribute('style', keyStr);\n this.svgRoot.appendChild(node);\n\n node.textContent = slLib.testStrAvg; // A test string.\n container.lineHeight = node.getBBox().height;\n container.avgCharWidth = (node.getBBox().width - SVG_BBOX_CORRECTION) / 3;\n\n node.textContent = '...';\n container.ellipsesWidth = node.getBBox().width - SVG_BBOX_CORRECTION;\n node.textContent = '.';\n container.dotWidth = node.getBBox().width - SVG_BBOX_CORRECTION;\n } else {\n node.innerHTML = '...';\n container.ellipsesWidth = node.offsetWidth;\n node.innerHTML = '.';\n container.dotWidth = node.offsetWidth;\n node.innerHTML = '';\n }\n\n return container;\n};\n\nContainerManager.prototype.removeContainer = function (cObj) {\n var keyStr = cObj.keyStr;\n\n if (!keyStr || !this.length || !cObj) {\n return;\n }\n this.length -= 1;\n\n cObj.prev && (cObj.prev.next = cObj.next);\n cObj.next && (cObj.next.prev = cObj.prev);\n this.first === cObj && (this.first = cObj.next);\n this.last === cObj && (this.last = cObj.prev);\n\n cObj.node.parentNode.removeChild(cObj.node);\n\n delete this.containers[keyStr];\n};\n\nContainerManager.prototype.dispose = function () {\n var key,\n containers = this.containers;\n\n this.maxContainers = null;\n for (key in containers) {\n this.removeContainer(containers[key]);\n }\n\n this.rootNode.parentNode.removeChild(this.rootNode);\n\n this.rootNode = null;\n this.first = null;\n this.last = null;\n};\n\nmodule.exports = ContainerManager;","export default function(a, b) {\n return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n","import ascending from \"./ascending\";\n\nexport default function(compare) {\n if (compare.length === 1) compare = ascendingComparator(compare);\n return {\n left: function(a, x, lo, hi) {\n if (lo == null) lo = 0;\n if (hi == null) hi = a.length;\n while (lo < hi) {\n var mid = lo + hi >>> 1;\n if (compare(a[mid], x) < 0) lo = mid + 1;\n else hi = mid;\n }\n return lo;\n },\n right: function(a, x, lo, hi) {\n if (lo == null) lo = 0;\n if (hi == null) hi = a.length;\n while (lo < hi) {\n var mid = lo + hi >>> 1;\n if (compare(a[mid], x) > 0) hi = mid;\n else lo = mid + 1;\n }\n return lo;\n }\n };\n}\n\nfunction ascendingComparator(f) {\n return function(d, x) {\n return ascending(f(d), x);\n };\n}\n","import ascending from \"./ascending\";\nimport bisector from \"./bisector\";\n\nvar ascendingBisect = bisector(ascending);\nexport var bisectRight = ascendingBisect.right;\nexport var bisectLeft = ascendingBisect.left;\nexport default bisectRight;\n","import {pair} from \"./pairs\";\n\nexport default function(values0, values1, reduce) {\n var n0 = values0.length,\n n1 = values1.length,\n values = new Array(n0 * n1),\n i0,\n i1,\n i,\n value0;\n\n if (reduce == null) reduce = pair;\n\n for (i0 = i = 0; i0 < n0; ++i0) {\n for (value0 = values0[i0], i1 = 0; i1 < n1; ++i1, ++i) {\n values[i] = reduce(value0, values1[i1]);\n }\n }\n\n return values;\n}\n","export default function(x) {\n return x === null ? NaN : +x;\n}\n","var array = Array.prototype;\n\nexport var slice = array.slice;\nexport var map = array.map;\n","export default function(start, stop, step) {\n start = +start, stop = +stop, step = (n = arguments.length) < 2 ? (stop = start, start = 0, 1) : n < 3 ? 1 : +step;\n\n var i = -1,\n n = Math.max(0, Math.ceil((stop - start) / step)) | 0,\n range = new Array(n);\n\n while (++i < n) {\n range[i] = start + i * step;\n }\n\n return range;\n}\n","var e10 = Math.sqrt(50),\n e5 = Math.sqrt(10),\n e2 = Math.sqrt(2);\n\nexport default function(start, stop, count) {\n var reverse,\n i = -1,\n n,\n ticks,\n step;\n\n stop = +stop, start = +start, count = +count;\n if (start === stop && count > 0) return [start];\n if (reverse = stop < start) n = start, start = stop, stop = n;\n if ((step = tickIncrement(start, stop, count)) === 0 || !isFinite(step)) return [];\n\n if (step > 0) {\n start = Math.ceil(start / step);\n stop = Math.floor(stop / step);\n ticks = new Array(n = Math.ceil(stop - start + 1));\n while (++i < n) ticks[i] = (start + i) * step;\n } else {\n start = Math.floor(start * step);\n stop = Math.ceil(stop * step);\n ticks = new Array(n = Math.ceil(start - stop + 1));\n while (++i < n) ticks[i] = (start - i) / step;\n }\n\n if (reverse) ticks.reverse();\n\n return ticks;\n}\n\nexport function tickIncrement(start, stop, count) {\n var step = (stop - start) / Math.max(0, count),\n power = Math.floor(Math.log(step) / Math.LN10),\n error = step / Math.pow(10, power);\n return power >= 0\n ? (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1) * Math.pow(10, power)\n : -Math.pow(10, -power) / (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1);\n}\n\nexport function tickStep(start, stop, count) {\n var step0 = Math.abs(stop - start) / Math.max(0, count),\n step1 = Math.pow(10, Math.floor(Math.log(step0) / Math.LN10)),\n error = step0 / step1;\n if (error >= e10) step1 *= 10;\n else if (error >= e5) step1 *= 5;\n else if (error >= e2) step1 *= 2;\n return stop < start ? -step1 : step1;\n}\n","export default function(values) {\n return Math.ceil(Math.log(values.length) / Math.LN2) + 1;\n}\n","import number from \"./number\";\n\nexport default function(values, p, valueof) {\n if (valueof == null) valueof = number;\n if (!(n = values.length)) return;\n if ((p = +p) <= 0 || n < 2) return +valueof(values[0], 0, values);\n if (p >= 1) return +valueof(values[n - 1], n - 1, values);\n var n,\n i = (n - 1) * p,\n i0 = Math.floor(i),\n value0 = +valueof(values[i0], i0, values),\n value1 = +valueof(values[i0 + 1], i0 + 1, values);\n return value0 + (value1 - value0) * (i - i0);\n}\n","export var prefix = \"$\";\n\nfunction Map() {}\n\nMap.prototype = map.prototype = {\n constructor: Map,\n has: function(key) {\n return (prefix + key) in this;\n },\n get: function(key) {\n return this[prefix + key];\n },\n set: function(key, value) {\n this[prefix + key] = value;\n return this;\n },\n remove: function(key) {\n var property = prefix + key;\n return property in this && delete this[property];\n },\n clear: function() {\n for (var property in this) if (property[0] === prefix) delete this[property];\n },\n keys: function() {\n var keys = [];\n for (var property in this) if (property[0] === prefix) keys.push(property.slice(1));\n return keys;\n },\n values: function() {\n var values = [];\n for (var property in this) if (property[0] === prefix) values.push(this[property]);\n return values;\n },\n entries: function() {\n var entries = [];\n for (var property in this) if (property[0] === prefix) entries.push({key: property.slice(1), value: this[property]});\n return entries;\n },\n size: function() {\n var size = 0;\n for (var property in this) if (property[0] === prefix) ++size;\n return size;\n },\n empty: function() {\n for (var property in this) if (property[0] === prefix) return false;\n return true;\n },\n each: function(f) {\n for (var property in this) if (property[0] === prefix) f(this[property], property.slice(1), this);\n }\n};\n\nfunction map(object, f) {\n var map = new Map;\n\n // Copy constructor.\n if (object instanceof Map) object.each(function(value, key) { map.set(key, value); });\n\n // Index array by numeric index or specified key function.\n else if (Array.isArray(object)) {\n var i = -1,\n n = object.length,\n o;\n\n if (f == null) while (++i < n) map.set(i, object[i]);\n else while (++i < n) map.set(f(o = object[i], i, object), o);\n }\n\n // Convert object to map.\n else if (object) for (var key in object) map.set(key, object[key]);\n\n return map;\n}\n\nexport default map;\n","import map from \"./map\";\n\nexport default function() {\n var keys = [],\n sortKeys = [],\n sortValues,\n rollup,\n nest;\n\n function apply(array, depth, createResult, setResult) {\n if (depth >= keys.length) {\n if (sortValues != null) array.sort(sortValues);\n return rollup != null ? rollup(array) : array;\n }\n\n var i = -1,\n n = array.length,\n key = keys[depth++],\n keyValue,\n value,\n valuesByKey = map(),\n values,\n result = createResult();\n\n while (++i < n) {\n if (values = valuesByKey.get(keyValue = key(value = array[i]) + \"\")) {\n values.push(value);\n } else {\n valuesByKey.set(keyValue, [value]);\n }\n }\n\n valuesByKey.each(function(values, key) {\n setResult(result, key, apply(values, depth, createResult, setResult));\n });\n\n return result;\n }\n\n function entries(map, depth) {\n if (++depth > keys.length) return map;\n var array, sortKey = sortKeys[depth - 1];\n if (rollup != null && depth >= keys.length) array = map.entries();\n else array = [], map.each(function(v, k) { array.push({key: k, values: entries(v, depth)}); });\n return sortKey != null ? array.sort(function(a, b) { return sortKey(a.key, b.key); }) : array;\n }\n\n return nest = {\n object: function(array) { return apply(array, 0, createObject, setObject); },\n map: function(array) { return apply(array, 0, createMap, setMap); },\n entries: function(array) { return entries(apply(array, 0, createMap, setMap), 0); },\n key: function(d) { keys.push(d); return nest; },\n sortKeys: function(order) { sortKeys[keys.length - 1] = order; return nest; },\n sortValues: function(order) { sortValues = order; return nest; },\n rollup: function(f) { rollup = f; return nest; }\n };\n}\n\nfunction createObject() {\n return {};\n}\n\nfunction setObject(object, key, value) {\n object[key] = value;\n}\n\nfunction createMap() {\n return map();\n}\n\nfunction setMap(map, key, value) {\n map.set(key, value);\n}\n","import {default as map, prefix} from \"./map\";\n\nfunction Set() {}\n\nvar proto = map.prototype;\n\nSet.prototype = set.prototype = {\n constructor: Set,\n has: proto.has,\n add: function(value) {\n value += \"\";\n this[prefix + value] = value;\n return this;\n },\n remove: proto.remove,\n clear: proto.clear,\n values: proto.keys,\n size: proto.size,\n empty: proto.empty,\n each: proto.each\n};\n\nfunction set(object, f) {\n var set = new Set;\n\n // Copy constructor.\n if (object instanceof Set) object.each(function(value) { set.add(value); });\n\n // Otherwise, assume it’s an array.\n else if (object) {\n var i = -1, n = object.length;\n if (f == null) while (++i < n) set.add(object[i]);\n else while (++i < n) set.add(f(object[i], i, object));\n }\n\n return set;\n}\n\nexport default set;\n","var array = Array.prototype;\n\nexport var map = array.map;\nexport var slice = array.slice;\n","import {map} from \"d3-collection\";\nimport {slice} from \"./array\";\n\nexport var implicit = {name: \"implicit\"};\n\nexport default function ordinal(range) {\n var index = map(),\n domain = [],\n unknown = implicit;\n\n range = range == null ? [] : slice.call(range);\n\n function scale(d) {\n var key = d + \"\", i = index.get(key);\n if (!i) {\n if (unknown !== implicit) return unknown;\n index.set(key, i = domain.push(d));\n }\n return range[(i - 1) % range.length];\n }\n\n scale.domain = function(_) {\n if (!arguments.length) return domain.slice();\n domain = [], index = map();\n var i = -1, n = _.length, d, key;\n while (++i < n) if (!index.has(key = (d = _[i]) + \"\")) index.set(key, domain.push(d));\n return scale;\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = slice.call(_), scale) : range.slice();\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n scale.copy = function() {\n return ordinal()\n .domain(domain)\n .range(range)\n .unknown(unknown);\n };\n\n return scale;\n}\n","import {range as sequence} from \"d3-array\";\nimport ordinal from \"./ordinal\";\n\nexport default function band() {\n var scale = ordinal().unknown(undefined),\n domain = scale.domain,\n ordinalRange = scale.range,\n range = [0, 1],\n step,\n bandwidth,\n round = false,\n paddingInner = 0,\n paddingOuter = 0,\n align = 0.5;\n\n delete scale.unknown;\n function rescale() {\n var n = domain().length,\n reverse = range[1] < range[0],\n start = range[reverse - 0],\n stop = range[1 - reverse];\n step = (stop - start) / Math.max(1, n - paddingInner + paddingOuter * 2);\n if (round) step = Math.floor(step);\n start += (stop - start - step * (n - paddingInner)) * align;\n bandwidth = step * (1 - paddingInner);\n if (round) start = Math.round(start), bandwidth = Math.round(bandwidth);\n var values = sequence(n).map(function(i) { return start + step * i; });\n return ordinalRange(reverse ? values.reverse() : values);\n }\n\n scale.domain = function(_) {\n return arguments.length ? (domain(_), rescale()) : domain();\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = [+_[0], +_[1]], rescale()) : range.slice();\n };\n\n scale.rangeRound = function(_) {\n return range = [+_[0], +_[1]], round = true, rescale();\n };\n\n scale.bandwidth = function() {\n return bandwidth;\n };\n\n scale.step = function() {\n return step;\n };\n\n scale.round = function(_) {\n return arguments.length ? (round = !!_, rescale()) : round;\n };\n\n scale.padding = function(_) {\n return arguments.length ? (paddingInner = paddingOuter = Math.max(0, Math.min(1, _)), rescale()) : paddingInner;\n };\n\n scale.paddingInner = function(_) {\n return arguments.length ? (paddingInner = Math.max(0, Math.min(1, _)), rescale()) : paddingInner;\n };\n\n scale.paddingOuter = function(_) {\n return arguments.length ? (paddingOuter = Math.max(0, Math.min(1, _)), rescale()) : paddingOuter;\n };\n\n scale.align = function(_) {\n return arguments.length ? (align = Math.max(0, Math.min(1, _)), rescale()) : align;\n };\n\n scale.copy = function() {\n return band()\n .domain(domain())\n .range(range)\n .round(round)\n .paddingInner(paddingInner)\n .paddingOuter(paddingOuter)\n .align(align);\n };\n\n scale.invertExtent = function(r0, r1) {\n var lo = +r0,\n hi = arguments.length > 1 ? +r1 : lo,\n reverse = range[1] < range[0],\n values = reverse ? ordinalRange().reverse() : ordinalRange(),\n n = values.length - 1, a, b, t,\n hiIndex;\n values.push(values[n] + this.step());\n // order range inputs, bail if outside of scale range\n if (hi < lo) t = lo, lo = hi, hi = t;\n if (hi < values[0] || lo > range[1-reverse]) return undefined;\n\n // binary search to index into scale range\n a = Math.max(0, getClosestIndexOf(values, lo));\n hiIndex = getClosestIndexOf(values, hi);\n b = lo===hi ? a : Math.max(a, hiIndex - 1);\n\n // increment index a if lo is within padding gap\n // if (lo - values[a] > bandwidth + 1e-10) ++a;\n\n if (reverse) t = a, a = n - b, b = n - t; // map + swap\n return (a > b) ? undefined : domain().slice(a, b+1);\n };\n\n scale.invert = function (r0, r1) {\n var lo = +r0,\n hi = arguments.length > 1 ? +r1 : lo,\n reverse = range[1] < range[0],\n values = reverse ? ordinalRange().reverse() : ordinalRange(),\n n = values.length - 1,\n a,\n t;\n\n // order range inputs, bail if outside of scale range\n if (hi < lo) t = lo, lo = hi, hi = t;\n if (hi < values[0] || lo > range[1-reverse]) return undefined;\n\n // binary search to index into scale range\n a = Math.max(0, getClosestIndexOf(values, lo, 'left'));\n\n // increment index a if lo is within padding gap\n // if (lo - values[a] > bandwidth + 1e-10) ++a;\n\n return domain()[reverse ? n - a : a];\n }\n return rescale();\n}\n\nfunction pointish(scale) {\n var copy = scale.copy;\n\n scale.padding = scale.paddingOuter;\n delete scale.paddingInner;\n delete scale.paddingOuter;\n\n scale.copy = function() {\n return pointish(copy());\n };\n\n return scale;\n}\n\nexport function point() {\n return pointish(band().paddingInner(1));\n}\n\nfunction getClosestIndexOf (arr, value, side) {\n var low = 0,\n arrLen = arr.length,\n high = arrLen - 1,\n highVal,\n mid,\n d1,\n d2;\n\n while (low < high) {\n mid = Math.floor((low + high) / 2);\n d1 = Math.abs(arr[mid] - value);\n d2 = Math.abs(arr[mid + 1] - value);\n\n if (d2 <= d1) {\n low = mid + 1;\n }\n else {\n high = mid;\n }\n }\n\n if (!side) {\n return high;\n }\n\n highVal = arr[high];\n if (highVal === value) {\n return high;\n } else if (highVal > value) {\n if (high === 0) { return high; }\n return side === 'left'? high - 1 : high;\n } else {\n if (high === arr.length - 1) { return high; }\n return side === 'left'? high : high + 1;\n }\n}","export default function(constructor, factory, prototype) {\n constructor.prototype = factory.prototype = prototype;\n prototype.constructor = constructor;\n}\n\nexport function extend(parent, definition) {\n var prototype = Object.create(parent.prototype);\n for (var key in definition) prototype[key] = definition[key];\n return prototype;\n}\n","import define, {extend} from \"./define\";\n\nexport function Color() {}\n\nexport var darker = 0.7;\nexport var brighter = 1 / darker;\n\nvar reI = \"\\\\s*([+-]?\\\\d+)\\\\s*\",\n reN = \"\\\\s*([+-]?\\\\d*\\\\.?\\\\d+(?:[eE][+-]?\\\\d+)?)\\\\s*\",\n reP = \"\\\\s*([+-]?\\\\d*\\\\.?\\\\d+(?:[eE][+-]?\\\\d+)?)%\\\\s*\",\n reHex3 = /^#([0-9a-f]{3})$/,\n reHex6 = /^#([0-9a-f]{6})$/,\n reRgbInteger = new RegExp(\"^rgb\\\\(\" + [reI, reI, reI] + \"\\\\)$\"),\n reRgbPercent = new RegExp(\"^rgb\\\\(\" + [reP, reP, reP] + \"\\\\)$\"),\n reRgbaInteger = new RegExp(\"^rgba\\\\(\" + [reI, reI, reI, reN] + \"\\\\)$\"),\n reRgbaPercent = new RegExp(\"^rgba\\\\(\" + [reP, reP, reP, reN] + \"\\\\)$\"),\n reHslPercent = new RegExp(\"^hsl\\\\(\" + [reN, reP, reP] + \"\\\\)$\"),\n reHslaPercent = new RegExp(\"^hsla\\\\(\" + [reN, reP, reP, reN] + \"\\\\)$\");\n\nvar named = {\n aliceblue: 0xf0f8ff,\n antiquewhite: 0xfaebd7,\n aqua: 0x00ffff,\n aquamarine: 0x7fffd4,\n azure: 0xf0ffff,\n beige: 0xf5f5dc,\n bisque: 0xffe4c4,\n black: 0x000000,\n blanchedalmond: 0xffebcd,\n blue: 0x0000ff,\n blueviolet: 0x8a2be2,\n brown: 0xa52a2a,\n burlywood: 0xdeb887,\n cadetblue: 0x5f9ea0,\n chartreuse: 0x7fff00,\n chocolate: 0xd2691e,\n coral: 0xff7f50,\n cornflowerblue: 0x6495ed,\n cornsilk: 0xfff8dc,\n crimson: 0xdc143c,\n cyan: 0x00ffff,\n darkblue: 0x00008b,\n darkcyan: 0x008b8b,\n darkgoldenrod: 0xb8860b,\n darkgray: 0xa9a9a9,\n darkgreen: 0x006400,\n darkgrey: 0xa9a9a9,\n darkkhaki: 0xbdb76b,\n darkmagenta: 0x8b008b,\n darkolivegreen: 0x556b2f,\n darkorange: 0xff8c00,\n darkorchid: 0x9932cc,\n darkred: 0x8b0000,\n darksalmon: 0xe9967a,\n darkseagreen: 0x8fbc8f,\n darkslateblue: 0x483d8b,\n darkslategray: 0x2f4f4f,\n darkslategrey: 0x2f4f4f,\n darkturquoise: 0x00ced1,\n darkviolet: 0x9400d3,\n deeppink: 0xff1493,\n deepskyblue: 0x00bfff,\n dimgray: 0x696969,\n dimgrey: 0x696969,\n dodgerblue: 0x1e90ff,\n firebrick: 0xb22222,\n floralwhite: 0xfffaf0,\n forestgreen: 0x228b22,\n fuchsia: 0xff00ff,\n gainsboro: 0xdcdcdc,\n ghostwhite: 0xf8f8ff,\n gold: 0xffd700,\n goldenrod: 0xdaa520,\n gray: 0x808080,\n green: 0x008000,\n greenyellow: 0xadff2f,\n grey: 0x808080,\n honeydew: 0xf0fff0,\n hotpink: 0xff69b4,\n indianred: 0xcd5c5c,\n indigo: 0x4b0082,\n ivory: 0xfffff0,\n khaki: 0xf0e68c,\n lavender: 0xe6e6fa,\n lavenderblush: 0xfff0f5,\n lawngreen: 0x7cfc00,\n lemonchiffon: 0xfffacd,\n lightblue: 0xadd8e6,\n lightcoral: 0xf08080,\n lightcyan: 0xe0ffff,\n lightgoldenrodyellow: 0xfafad2,\n lightgray: 0xd3d3d3,\n lightgreen: 0x90ee90,\n lightgrey: 0xd3d3d3,\n lightpink: 0xffb6c1,\n lightsalmon: 0xffa07a,\n lightseagreen: 0x20b2aa,\n lightskyblue: 0x87cefa,\n lightslategray: 0x778899,\n lightslategrey: 0x778899,\n lightsteelblue: 0xb0c4de,\n lightyellow: 0xffffe0,\n lime: 0x00ff00,\n limegreen: 0x32cd32,\n linen: 0xfaf0e6,\n magenta: 0xff00ff,\n maroon: 0x800000,\n mediumaquamarine: 0x66cdaa,\n mediumblue: 0x0000cd,\n mediumorchid: 0xba55d3,\n mediumpurple: 0x9370db,\n mediumseagreen: 0x3cb371,\n mediumslateblue: 0x7b68ee,\n mediumspringgreen: 0x00fa9a,\n mediumturquoise: 0x48d1cc,\n mediumvioletred: 0xc71585,\n midnightblue: 0x191970,\n mintcream: 0xf5fffa,\n mistyrose: 0xffe4e1,\n moccasin: 0xffe4b5,\n navajowhite: 0xffdead,\n navy: 0x000080,\n oldlace: 0xfdf5e6,\n olive: 0x808000,\n olivedrab: 0x6b8e23,\n orange: 0xffa500,\n orangered: 0xff4500,\n orchid: 0xda70d6,\n palegoldenrod: 0xeee8aa,\n palegreen: 0x98fb98,\n paleturquoise: 0xafeeee,\n palevioletred: 0xdb7093,\n papayawhip: 0xffefd5,\n peachpuff: 0xffdab9,\n peru: 0xcd853f,\n pink: 0xffc0cb,\n plum: 0xdda0dd,\n powderblue: 0xb0e0e6,\n purple: 0x800080,\n rebeccapurple: 0x663399,\n red: 0xff0000,\n rosybrown: 0xbc8f8f,\n royalblue: 0x4169e1,\n saddlebrown: 0x8b4513,\n salmon: 0xfa8072,\n sandybrown: 0xf4a460,\n seagreen: 0x2e8b57,\n seashell: 0xfff5ee,\n sienna: 0xa0522d,\n silver: 0xc0c0c0,\n skyblue: 0x87ceeb,\n slateblue: 0x6a5acd,\n slategray: 0x708090,\n slategrey: 0x708090,\n snow: 0xfffafa,\n springgreen: 0x00ff7f,\n steelblue: 0x4682b4,\n tan: 0xd2b48c,\n teal: 0x008080,\n thistle: 0xd8bfd8,\n tomato: 0xff6347,\n turquoise: 0x40e0d0,\n violet: 0xee82ee,\n wheat: 0xf5deb3,\n white: 0xffffff,\n whitesmoke: 0xf5f5f5,\n yellow: 0xffff00,\n yellowgreen: 0x9acd32\n};\n\ndefine(Color, color, {\n displayable: function() {\n return this.rgb().displayable();\n },\n hex: function() {\n return this.rgb().hex();\n },\n toString: function() {\n return this.rgb() + \"\";\n }\n});\n\nexport default function color(format) {\n var m;\n format = (format + \"\").trim().toLowerCase();\n return (m = reHex3.exec(format)) ? (m = parseInt(m[1], 16), new Rgb((m >> 8 & 0xf) | (m >> 4 & 0x0f0), (m >> 4 & 0xf) | (m & 0xf0), ((m & 0xf) << 4) | (m & 0xf), 1)) // #f00\n : (m = reHex6.exec(format)) ? rgbn(parseInt(m[1], 16)) // #ff0000\n : (m = reRgbInteger.exec(format)) ? new Rgb(m[1], m[2], m[3], 1) // rgb(255, 0, 0)\n : (m = reRgbPercent.exec(format)) ? new Rgb(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, 1) // rgb(100%, 0%, 0%)\n : (m = reRgbaInteger.exec(format)) ? rgba(m[1], m[2], m[3], m[4]) // rgba(255, 0, 0, 1)\n : (m = reRgbaPercent.exec(format)) ? rgba(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, m[4]) // rgb(100%, 0%, 0%, 1)\n : (m = reHslPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, 1) // hsl(120, 50%, 50%)\n : (m = reHslaPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, m[4]) // hsla(120, 50%, 50%, 1)\n : named.hasOwnProperty(format) ? rgbn(named[format])\n : format === \"transparent\" ? new Rgb(NaN, NaN, NaN, 0)\n : null;\n}\n\nfunction rgbn(n) {\n return new Rgb(n >> 16 & 0xff, n >> 8 & 0xff, n & 0xff, 1);\n}\n\nfunction rgba(r, g, b, a) {\n if (a <= 0) r = g = b = NaN;\n return new Rgb(r, g, b, a);\n}\n\nexport function rgbConvert(o) {\n if (!(o instanceof Color)) o = color(o);\n if (!o) return new Rgb;\n o = o.rgb();\n return new Rgb(o.r, o.g, o.b, o.opacity);\n}\n\nexport function rgb(r, g, b, opacity) {\n return arguments.length === 1 ? rgbConvert(r) : new Rgb(r, g, b, opacity == null ? 1 : opacity);\n}\n\nexport function Rgb(r, g, b, opacity) {\n this.r = +r;\n this.g = +g;\n this.b = +b;\n this.opacity = +opacity;\n}\n\ndefine(Rgb, rgb, extend(Color, {\n brighter: function(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n },\n darker: function(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n },\n rgb: function() {\n return this;\n },\n displayable: function() {\n return (0 <= this.r && this.r <= 255)\n && (0 <= this.g && this.g <= 255)\n && (0 <= this.b && this.b <= 255)\n && (0 <= this.opacity && this.opacity <= 1);\n },\n hex: function() {\n return \"#\" + hex(this.r) + hex(this.g) + hex(this.b);\n },\n toString: function() {\n var a = this.opacity; a = isNaN(a) ? 1 : Math.max(0, Math.min(1, a));\n return (a === 1 ? \"rgb(\" : \"rgba(\")\n + Math.max(0, Math.min(255, Math.round(this.r) || 0)) + \", \"\n + Math.max(0, Math.min(255, Math.round(this.g) || 0)) + \", \"\n + Math.max(0, Math.min(255, Math.round(this.b) || 0))\n + (a === 1 ? \")\" : \", \" + a + \")\");\n }\n}));\n\nfunction hex(value) {\n value = Math.max(0, Math.min(255, Math.round(value) || 0));\n return (value < 16 ? \"0\" : \"\") + value.toString(16);\n}\n\nfunction hsla(h, s, l, a) {\n if (a <= 0) h = s = l = NaN;\n else if (l <= 0 || l >= 1) h = s = NaN;\n else if (s <= 0) h = NaN;\n return new Hsl(h, s, l, a);\n}\n\nexport function hslConvert(o) {\n if (o instanceof Hsl) return new Hsl(o.h, o.s, o.l, o.opacity);\n if (!(o instanceof Color)) o = color(o);\n if (!o) return new Hsl;\n if (o instanceof Hsl) return o;\n o = o.rgb();\n var r = o.r / 255,\n g = o.g / 255,\n b = o.b / 255,\n min = Math.min(r, g, b),\n max = Math.max(r, g, b),\n h = NaN,\n s = max - min,\n l = (max + min) / 2;\n if (s) {\n if (r === max) h = (g - b) / s + (g < b) * 6;\n else if (g === max) h = (b - r) / s + 2;\n else h = (r - g) / s + 4;\n s /= l < 0.5 ? max + min : 2 - max - min;\n h *= 60;\n } else {\n s = l > 0 && l < 1 ? 0 : h;\n }\n return new Hsl(h, s, l, o.opacity);\n}\n\nexport function hsl(h, s, l, opacity) {\n return arguments.length === 1 ? hslConvert(h) : new Hsl(h, s, l, opacity == null ? 1 : opacity);\n}\n\nfunction Hsl(h, s, l, opacity) {\n this.h = +h;\n this.s = +s;\n this.l = +l;\n this.opacity = +opacity;\n}\n\ndefine(Hsl, hsl, extend(Color, {\n brighter: function(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Hsl(this.h, this.s, this.l * k, this.opacity);\n },\n darker: function(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Hsl(this.h, this.s, this.l * k, this.opacity);\n },\n rgb: function() {\n var h = this.h % 360 + (this.h < 0) * 360,\n s = isNaN(h) || isNaN(this.s) ? 0 : this.s,\n l = this.l,\n m2 = l + (l < 0.5 ? l : 1 - l) * s,\n m1 = 2 * l - m2;\n return new Rgb(\n hsl2rgb(h >= 240 ? h - 240 : h + 120, m1, m2),\n hsl2rgb(h, m1, m2),\n hsl2rgb(h < 120 ? h + 240 : h - 120, m1, m2),\n this.opacity\n );\n },\n displayable: function() {\n return (0 <= this.s && this.s <= 1 || isNaN(this.s))\n && (0 <= this.l && this.l <= 1)\n && (0 <= this.opacity && this.opacity <= 1);\n }\n}));\n\n/* From FvD 13.37, CSS Color Module Level 3 */\nfunction hsl2rgb(h, m1, m2) {\n return (h < 60 ? m1 + (m2 - m1) * h / 60\n : h < 180 ? m2\n : h < 240 ? m1 + (m2 - m1) * (240 - h) / 60\n : m1) * 255;\n}\n","export var deg2rad = Math.PI / 180;\nexport var rad2deg = 180 / Math.PI;\n","import define, {extend} from \"./define\";\nimport {Color, rgbConvert, Rgb} from \"./color\";\nimport {deg2rad, rad2deg} from \"./math\";\n\n// https://beta.observablehq.com/@mbostock/lab-and-rgb\nvar K = 18,\n Xn = 0.96422,\n Yn = 1,\n Zn = 0.82521,\n t0 = 4 / 29,\n t1 = 6 / 29,\n t2 = 3 * t1 * t1,\n t3 = t1 * t1 * t1;\n\nfunction labConvert(o) {\n if (o instanceof Lab) return new Lab(o.l, o.a, o.b, o.opacity);\n if (o instanceof Hcl) {\n if (isNaN(o.h)) return new Lab(o.l, 0, 0, o.opacity);\n var h = o.h * deg2rad;\n return new Lab(o.l, Math.cos(h) * o.c, Math.sin(h) * o.c, o.opacity);\n }\n if (!(o instanceof Rgb)) o = rgbConvert(o);\n var r = rgb2lrgb(o.r),\n g = rgb2lrgb(o.g),\n b = rgb2lrgb(o.b),\n y = xyz2lab((0.2225045 * r + 0.7168786 * g + 0.0606169 * b) / Yn), x, z;\n if (r === g && g === b) x = z = y; else {\n x = xyz2lab((0.4360747 * r + 0.3850649 * g + 0.1430804 * b) / Xn);\n z = xyz2lab((0.0139322 * r + 0.0971045 * g + 0.7141733 * b) / Zn);\n }\n return new Lab(116 * y - 16, 500 * (x - y), 200 * (y - z), o.opacity);\n}\n\nexport function gray(l, opacity) {\n return new Lab(l, 0, 0, opacity == null ? 1 : opacity);\n}\n\nexport default function lab(l, a, b, opacity) {\n return arguments.length === 1 ? labConvert(l) : new Lab(l, a, b, opacity == null ? 1 : opacity);\n}\n\nexport function Lab(l, a, b, opacity) {\n this.l = +l;\n this.a = +a;\n this.b = +b;\n this.opacity = +opacity;\n}\n\ndefine(Lab, lab, extend(Color, {\n brighter: function(k) {\n return new Lab(this.l + K * (k == null ? 1 : k), this.a, this.b, this.opacity);\n },\n darker: function(k) {\n return new Lab(this.l - K * (k == null ? 1 : k), this.a, this.b, this.opacity);\n },\n rgb: function() {\n var y = (this.l + 16) / 116,\n x = isNaN(this.a) ? y : y + this.a / 500,\n z = isNaN(this.b) ? y : y - this.b / 200;\n x = Xn * lab2xyz(x);\n y = Yn * lab2xyz(y);\n z = Zn * lab2xyz(z);\n return new Rgb(\n lrgb2rgb( 3.1338561 * x - 1.6168667 * y - 0.4906146 * z),\n lrgb2rgb(-0.9787684 * x + 1.9161415 * y + 0.0334540 * z),\n lrgb2rgb( 0.0719453 * x - 0.2289914 * y + 1.4052427 * z),\n this.opacity\n );\n }\n}));\n\nfunction xyz2lab(t) {\n return t > t3 ? Math.pow(t, 1 / 3) : t / t2 + t0;\n}\n\nfunction lab2xyz(t) {\n return t > t1 ? t * t * t : t2 * (t - t0);\n}\n\nfunction lrgb2rgb(x) {\n return 255 * (x <= 0.0031308 ? 12.92 * x : 1.055 * Math.pow(x, 1 / 2.4) - 0.055);\n}\n\nfunction rgb2lrgb(x) {\n return (x /= 255) <= 0.04045 ? x / 12.92 : Math.pow((x + 0.055) / 1.055, 2.4);\n}\n\nfunction hclConvert(o) {\n if (o instanceof Hcl) return new Hcl(o.h, o.c, o.l, o.opacity);\n if (!(o instanceof Lab)) o = labConvert(o);\n if (o.a === 0 && o.b === 0) return new Hcl(NaN, 0, o.l, o.opacity);\n var h = Math.atan2(o.b, o.a) * rad2deg;\n return new Hcl(h < 0 ? h + 360 : h, Math.sqrt(o.a * o.a + o.b * o.b), o.l, o.opacity);\n}\n\nexport function lch(l, c, h, opacity) {\n return arguments.length === 1 ? hclConvert(l) : new Hcl(h, c, l, opacity == null ? 1 : opacity);\n}\n\nexport function hcl(h, c, l, opacity) {\n return arguments.length === 1 ? hclConvert(h) : new Hcl(h, c, l, opacity == null ? 1 : opacity);\n}\n\nexport function Hcl(h, c, l, opacity) {\n this.h = +h;\n this.c = +c;\n this.l = +l;\n this.opacity = +opacity;\n}\n\ndefine(Hcl, hcl, extend(Color, {\n brighter: function(k) {\n return new Hcl(this.h, this.c, this.l + K * (k == null ? 1 : k), this.opacity);\n },\n darker: function(k) {\n return new Hcl(this.h, this.c, this.l - K * (k == null ? 1 : k), this.opacity);\n },\n rgb: function() {\n return labConvert(this).rgb();\n }\n}));\n","import define, {extend} from \"./define\";\nimport {Color, rgbConvert, Rgb, darker, brighter} from \"./color\";\nimport {deg2rad, rad2deg} from \"./math\";\n\nvar A = -0.14861,\n B = +1.78277,\n C = -0.29227,\n D = -0.90649,\n E = +1.97294,\n ED = E * D,\n EB = E * B,\n BC_DA = B * C - D * A;\n\nfunction cubehelixConvert(o) {\n if (o instanceof Cubehelix) return new Cubehelix(o.h, o.s, o.l, o.opacity);\n if (!(o instanceof Rgb)) o = rgbConvert(o);\n var r = o.r / 255,\n g = o.g / 255,\n b = o.b / 255,\n l = (BC_DA * b + ED * r - EB * g) / (BC_DA + ED - EB),\n bl = b - l,\n k = (E * (g - l) - C * bl) / D,\n s = Math.sqrt(k * k + bl * bl) / (E * l * (1 - l)), // NaN if l=0 or l=1\n h = s ? Math.atan2(k, bl) * rad2deg - 120 : NaN;\n return new Cubehelix(h < 0 ? h + 360 : h, s, l, o.opacity);\n}\n\nexport default function cubehelix(h, s, l, opacity) {\n return arguments.length === 1 ? cubehelixConvert(h) : new Cubehelix(h, s, l, opacity == null ? 1 : opacity);\n}\n\nexport function Cubehelix(h, s, l, opacity) {\n this.h = +h;\n this.s = +s;\n this.l = +l;\n this.opacity = +opacity;\n}\n\ndefine(Cubehelix, cubehelix, extend(Color, {\n brighter: function(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Cubehelix(this.h, this.s, this.l * k, this.opacity);\n },\n darker: function(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Cubehelix(this.h, this.s, this.l * k, this.opacity);\n },\n rgb: function() {\n var h = isNaN(this.h) ? 0 : (this.h + 120) * deg2rad,\n l = +this.l,\n a = isNaN(this.s) ? 0 : this.s * l * (1 - l),\n cosh = Math.cos(h),\n sinh = Math.sin(h);\n return new Rgb(\n 255 * (l + a * (A * cosh + B * sinh)),\n 255 * (l + a * (C * cosh + D * sinh)),\n 255 * (l + a * (E * cosh)),\n this.opacity\n );\n }\n}));\n","export function basis(t1, v0, v1, v2, v3) {\n var t2 = t1 * t1, t3 = t2 * t1;\n return ((1 - 3 * t1 + 3 * t2 - t3) * v0\n + (4 - 6 * t2 + 3 * t3) * v1\n + (1 + 3 * t1 + 3 * t2 - 3 * t3) * v2\n + t3 * v3) / 6;\n}\n\nexport default function(values) {\n var n = values.length - 1;\n return function(t) {\n var i = t <= 0 ? (t = 0) : t >= 1 ? (t = 1, n - 1) : Math.floor(t * n),\n v1 = values[i],\n v2 = values[i + 1],\n v0 = i > 0 ? values[i - 1] : 2 * v1 - v2,\n v3 = i < n - 1 ? values[i + 2] : 2 * v2 - v1;\n return basis((t - i / n) * n, v0, v1, v2, v3);\n };\n}\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","import constant from \"./constant\";\n\nfunction linear(a, d) {\n return function(t) {\n return a + t * d;\n };\n}\n\nfunction exponential(a, b, y) {\n return a = Math.pow(a, y), b = Math.pow(b, y) - a, y = 1 / y, function(t) {\n return Math.pow(a + t * b, y);\n };\n}\n\nexport function hue(a, b) {\n var d = b - a;\n return d ? linear(a, d > 180 || d < -180 ? d - 360 * Math.round(d / 360) : d) : constant(isNaN(a) ? b : a);\n}\n\nexport function gamma(y) {\n return (y = +y) === 1 ? nogamma : function(a, b) {\n return b - a ? exponential(a, b, y) : constant(isNaN(a) ? b : a);\n };\n}\n\nexport default function nogamma(a, b) {\n var d = b - a;\n return d ? linear(a, d) : constant(isNaN(a) ? b : a);\n}\n","import {rgb as colorRgb} from \"d3-color\";\nimport basis from \"./basis\";\nimport basisClosed from \"./basisClosed\";\nimport nogamma, {gamma} from \"./color\";\n\nexport default (function rgbGamma(y) {\n var color = gamma(y);\n\n function rgb(start, end) {\n var r = color((start = colorRgb(start)).r, (end = colorRgb(end)).r),\n g = color(start.g, end.g),\n b = color(start.b, end.b),\n opacity = nogamma(start.opacity, end.opacity);\n return function(t) {\n start.r = r(t);\n start.g = g(t);\n start.b = b(t);\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n\n rgb.gamma = rgbGamma;\n\n return rgb;\n})(1);\n\nfunction rgbSpline(spline) {\n return function(colors) {\n var n = colors.length,\n r = new Array(n),\n g = new Array(n),\n b = new Array(n),\n i, color;\n for (i = 0; i < n; ++i) {\n color = colorRgb(colors[i]);\n r[i] = color.r || 0;\n g[i] = color.g || 0;\n b[i] = color.b || 0;\n }\n r = spline(r);\n g = spline(g);\n b = spline(b);\n color.opacity = 1;\n return function(t) {\n color.r = r(t);\n color.g = g(t);\n color.b = b(t);\n return color + \"\";\n };\n };\n}\n\nexport var rgbBasis = rgbSpline(basis);\nexport var rgbBasisClosed = rgbSpline(basisClosed);\n","export default function(a, b) {\n return a = +a, b -= a, function(t) {\n return a + b * t;\n };\n}\n","import {basis} from \"./basis\";\n\nexport default function(values) {\n var n = values.length;\n return function(t) {\n var i = Math.floor(((t %= 1) < 0 ? ++t : t) * n),\n v0 = values[(i + n - 1) % n],\n v1 = values[i % n],\n v2 = values[(i + 1) % n],\n v3 = values[(i + 2) % n];\n return basis((t - i / n) * n, v0, v1, v2, v3);\n };\n}\n","import value from \"./value\";\n\nexport default function(a, b) {\n var i = {},\n c = {},\n k;\n\n if (a === null || typeof a !== \"object\") a = {};\n if (b === null || typeof b !== \"object\") b = {};\n\n for (k in b) {\n if (k in a) {\n i[k] = value(a[k], b[k]);\n } else {\n c[k] = b[k];\n }\n }\n\n return function(t) {\n for (k in i) c[k] = i[k](t);\n return c;\n };\n}\n","import number from \"./number\";\n\nvar reA = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n reB = new RegExp(reA.source, \"g\");\n\nfunction zero(b) {\n return function() {\n return b;\n };\n}\n\nfunction one(b) {\n return function(t) {\n return b(t) + \"\";\n };\n}\n\nexport default function(a, b) {\n var bi = reA.lastIndex = reB.lastIndex = 0, // scan index for next number in b\n am, // current match in a\n bm, // current match in b\n bs, // string preceding current number in b, if any\n i = -1, // index in s\n s = [], // string constants and placeholders\n q = []; // number interpolators\n\n // Coerce inputs to strings.\n a = a + \"\", b = b + \"\";\n\n // Interpolate pairs of numbers in a & b.\n while ((am = reA.exec(a))\n && (bm = reB.exec(b))) {\n if ((bs = bm.index) > bi) { // a string precedes the next number in b\n bs = b.slice(bi, bs);\n if (s[i]) s[i] += bs; // coalesce with previous string\n else s[++i] = bs;\n }\n if ((am = am[0]) === (bm = bm[0])) { // numbers in a & b match\n if (s[i]) s[i] += bm; // coalesce with previous string\n else s[++i] = bm;\n } else { // interpolate non-matching numbers\n s[++i] = null;\n q.push({i: i, x: number(am, bm)});\n }\n bi = reB.lastIndex;\n }\n\n // Add remains of b.\n if (bi < b.length) {\n bs = b.slice(bi);\n if (s[i]) s[i] += bs; // coalesce with previous string\n else s[++i] = bs;\n }\n\n // Special optimization for only a single match.\n // Otherwise, interpolate each of the numbers and rejoin the string.\n return s.length < 2 ? (q[0]\n ? one(q[0].x)\n : zero(b))\n : (b = q.length, function(t) {\n for (var i = 0, o; i < b; ++i) s[(o = q[i]).i] = o.x(t);\n return s.join(\"\");\n });\n}\n","import {color} from \"d3-color\";\nimport rgb from \"./rgb\";\nimport array from \"./array\";\nimport date from \"./date\";\nimport number from \"./number\";\nimport object from \"./object\";\nimport string from \"./string\";\nimport constant from \"./constant\";\n\nexport default function(a, b) {\n var t = typeof b, c;\n return b == null || t === \"boolean\" ? constant(b)\n : (t === \"number\" ? number\n : t === \"string\" ? ((c = color(b)) ? (b = c, rgb) : string)\n : b instanceof color ? rgb\n : b instanceof Date ? date\n : Array.isArray(b) ? array\n : typeof b.valueOf !== \"function\" && typeof b.toString !== \"function\" || isNaN(b) ? object\n : number)(a, b);\n}\n","import decompose, {identity} from \"./decompose\";\n\nvar cssNode,\n cssRoot,\n cssView,\n svgNode;\n\nexport function parseCss(value) {\n if (value === \"none\") return identity;\n if (!cssNode) cssNode = document.createElement(\"DIV\"), cssRoot = document.documentElement, cssView = document.defaultView;\n cssNode.style.transform = value;\n value = cssView.getComputedStyle(cssRoot.appendChild(cssNode), null).getPropertyValue(\"transform\");\n cssRoot.removeChild(cssNode);\n value = value.slice(7, -1).split(\",\");\n return decompose(+value[0], +value[1], +value[2], +value[3], +value[4], +value[5]);\n}\n\nexport function parseSvg(value) {\n if (value == null) return identity;\n if (!svgNode) svgNode = document.createElementNS(\"http://www.w3.org/2000/svg\", \"g\");\n svgNode.setAttribute(\"transform\", value);\n if (!(value = svgNode.transform.baseVal.consolidate())) return identity;\n value = value.matrix;\n return decompose(value.a, value.b, value.c, value.d, value.e, value.f);\n}\n","export default function(a, b) {\n var d = new Date;\n return a = +a, b -= a, function(t) {\n return d.setTime(a + b * t), d;\n };\n}\n","import value from \"./value\";\n\nexport default function(a, b) {\n var nb = b ? b.length : 0,\n na = a ? Math.min(nb, a.length) : 0,\n x = new Array(na),\n c = new Array(nb),\n i;\n\n for (i = 0; i < na; ++i) x[i] = value(a[i], b[i]);\n for (; i < nb; ++i) c[i] = b[i];\n\n return function(t) {\n for (i = 0; i < na; ++i) c[i] = x[i](t);\n return c;\n };\n}\n","export default function(a, b) {\n return a = +a, b -= a, function(t) {\n return Math.round(a + b * t);\n };\n}\n","var degrees = 180 / Math.PI;\n\nexport var identity = {\n translateX: 0,\n translateY: 0,\n rotate: 0,\n skewX: 0,\n scaleX: 1,\n scaleY: 1\n};\n\nexport default function(a, b, c, d, e, f) {\n var scaleX, scaleY, skewX;\n if (scaleX = Math.sqrt(a * a + b * b)) a /= scaleX, b /= scaleX;\n if (skewX = a * c + b * d) c -= a * skewX, d -= b * skewX;\n if (scaleY = Math.sqrt(c * c + d * d)) c /= scaleY, d /= scaleY, skewX /= scaleY;\n if (a * d < b * c) a = -a, b = -b, skewX = -skewX, scaleX = -scaleX;\n return {\n translateX: e,\n translateY: f,\n rotate: Math.atan2(b, a) * degrees,\n skewX: Math.atan(skewX) * degrees,\n scaleX: scaleX,\n scaleY: scaleY\n };\n}\n","import number from \"../number\";\nimport {parseCss, parseSvg} from \"./parse\";\n\nfunction interpolateTransform(parse, pxComma, pxParen, degParen) {\n\n function pop(s) {\n return s.length ? s.pop() + \" \" : \"\";\n }\n\n function translate(xa, ya, xb, yb, s, q) {\n if (xa !== xb || ya !== yb) {\n var i = s.push(\"translate(\", null, pxComma, null, pxParen);\n q.push({i: i - 4, x: number(xa, xb)}, {i: i - 2, x: number(ya, yb)});\n } else if (xb || yb) {\n s.push(\"translate(\" + xb + pxComma + yb + pxParen);\n }\n }\n\n function rotate(a, b, s, q) {\n if (a !== b) {\n if (a - b > 180) b += 360; else if (b - a > 180) a += 360; // shortest path\n q.push({i: s.push(pop(s) + \"rotate(\", null, degParen) - 2, x: number(a, b)});\n } else if (b) {\n s.push(pop(s) + \"rotate(\" + b + degParen);\n }\n }\n\n function skewX(a, b, s, q) {\n if (a !== b) {\n q.push({i: s.push(pop(s) + \"skewX(\", null, degParen) - 2, x: number(a, b)});\n } else if (b) {\n s.push(pop(s) + \"skewX(\" + b + degParen);\n }\n }\n\n function scale(xa, ya, xb, yb, s, q) {\n if (xa !== xb || ya !== yb) {\n var i = s.push(pop(s) + \"scale(\", null, \",\", null, \")\");\n q.push({i: i - 4, x: number(xa, xb)}, {i: i - 2, x: number(ya, yb)});\n } else if (xb !== 1 || yb !== 1) {\n s.push(pop(s) + \"scale(\" + xb + \",\" + yb + \")\");\n }\n }\n\n return function(a, b) {\n var s = [], // string constants and placeholders\n q = []; // number interpolators\n a = parse(a), b = parse(b);\n translate(a.translateX, a.translateY, b.translateX, b.translateY, s, q);\n rotate(a.rotate, b.rotate, s, q);\n skewX(a.skewX, b.skewX, s, q);\n scale(a.scaleX, a.scaleY, b.scaleX, b.scaleY, s, q);\n a = b = null; // gc\n return function(t) {\n var i = -1, n = q.length, o;\n while (++i < n) s[(o = q[i]).i] = o.x(t);\n return s.join(\"\");\n };\n };\n}\n\nexport var interpolateTransformCss = interpolateTransform(parseCss, \"px, \", \"px)\", \"deg)\");\nexport var interpolateTransformSvg = interpolateTransform(parseSvg, \", \", \")\", \")\");\n","var rho = Math.SQRT2,\n rho2 = 2,\n rho4 = 4,\n epsilon2 = 1e-12;\n\nfunction cosh(x) {\n return ((x = Math.exp(x)) + 1 / x) / 2;\n}\n\nfunction sinh(x) {\n return ((x = Math.exp(x)) - 1 / x) / 2;\n}\n\nfunction tanh(x) {\n return ((x = Math.exp(2 * x)) - 1) / (x + 1);\n}\n\n// p0 = [ux0, uy0, w0]\n// p1 = [ux1, uy1, w1]\nexport default function(p0, p1) {\n var ux0 = p0[0], uy0 = p0[1], w0 = p0[2],\n ux1 = p1[0], uy1 = p1[1], w1 = p1[2],\n dx = ux1 - ux0,\n dy = uy1 - uy0,\n d2 = dx * dx + dy * dy,\n i,\n S;\n\n // Special case for u0 ≅ u1.\n if (d2 < epsilon2) {\n S = Math.log(w1 / w0) / rho;\n i = function(t) {\n return [\n ux0 + t * dx,\n uy0 + t * dy,\n w0 * Math.exp(rho * t * S)\n ];\n }\n }\n\n // General case.\n else {\n var d1 = Math.sqrt(d2),\n b0 = (w1 * w1 - w0 * w0 + rho4 * d2) / (2 * w0 * rho2 * d1),\n b1 = (w1 * w1 - w0 * w0 - rho4 * d2) / (2 * w1 * rho2 * d1),\n r0 = Math.log(Math.sqrt(b0 * b0 + 1) - b0),\n r1 = Math.log(Math.sqrt(b1 * b1 + 1) - b1);\n S = (r1 - r0) / rho;\n i = function(t) {\n var s = t * S,\n coshr0 = cosh(r0),\n u = w0 / (rho2 * d1) * (coshr0 * tanh(rho * s + r0) - sinh(r0));\n return [\n ux0 + u * dx,\n uy0 + u * dy,\n w0 * coshr0 / cosh(rho * s + r0)\n ];\n }\n }\n\n i.duration = S * 1000;\n\n return i;\n}\n","import {hsl as colorHsl} from \"d3-color\";\nimport color, {hue} from \"./color\";\n\nfunction hsl(hue) {\n return function(start, end) {\n var h = hue((start = colorHsl(start)).h, (end = colorHsl(end)).h),\n s = color(start.s, end.s),\n l = color(start.l, end.l),\n opacity = color(start.opacity, end.opacity);\n return function(t) {\n start.h = h(t);\n start.s = s(t);\n start.l = l(t);\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n}\n\nexport default hsl(hue);\nexport var hslLong = hsl(color);\n","import {hcl as colorHcl} from \"d3-color\";\nimport color, {hue} from \"./color\";\n\nfunction hcl(hue) {\n return function(start, end) {\n var h = hue((start = colorHcl(start)).h, (end = colorHcl(end)).h),\n c = color(start.c, end.c),\n l = color(start.l, end.l),\n opacity = color(start.opacity, end.opacity);\n return function(t) {\n start.h = h(t);\n start.c = c(t);\n start.l = l(t);\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n}\n\nexport default hcl(hue);\nexport var hclLong = hcl(color);\n","import {cubehelix as colorCubehelix} from \"d3-color\";\nimport color, {hue} from \"./color\";\n\nfunction cubehelix(hue) {\n return (function cubehelixGamma(y) {\n y = +y;\n\n function cubehelix(start, end) {\n var h = hue((start = colorCubehelix(start)).h, (end = colorCubehelix(end)).h),\n s = color(start.s, end.s),\n l = color(start.l, end.l),\n opacity = color(start.opacity, end.opacity);\n return function(t) {\n start.h = h(t);\n start.s = s(t);\n start.l = l(Math.pow(t, y));\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n\n cubehelix.gamma = cubehelixGamma;\n\n return cubehelix;\n })(1);\n}\n\nexport default cubehelix(hue);\nexport var cubehelixLong = cubehelix(color);\n","export default function piecewise(interpolate, values) {\n var i = 0, n = values.length - 1, v = values[0], I = new Array(n < 0 ? 0 : n);\n while (i < n) I[i] = interpolate(v, v = values[++i]);\n return function(t) {\n var i = Math.max(0, Math.min(n - 1, Math.floor(t *= n)));\n return I[i](t - i);\n };\n}\n","export default function(interpolator, n) {\n var samples = new Array(n);\n for (var i = 0; i < n; ++i) samples[i] = interpolator(i / (n - 1));\n return samples;\n}\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","export default function(x) {\n return +x;\n}\n","import {bisect} from \"d3-array\";\nimport {interpolate as interpolateValue, interpolateRound} from \"d3-interpolate\";\nimport {map, slice} from \"./array\";\nimport constant from \"./constant\";\nimport number from \"./number\";\n\nvar unit = [0, 1];\n\nexport function deinterpolateLinear(a, b) {\n return (b -= (a = +a))\n ? function(x) { return (x - a) / b; }\n : constant(b);\n}\n\nfunction deinterpolateClamp(deinterpolate) {\n return function(a, b) {\n var d = deinterpolate(a = +a, b = +b);\n return function(x) { return x <= a ? 0 : x >= b ? 1 : d(x); };\n };\n}\n\nfunction reinterpolateClamp(reinterpolate) {\n return function(a, b) {\n var r = reinterpolate(a = +a, b = +b);\n return function(t) { return t <= 0 ? a : t >= 1 ? b : r(t); };\n };\n}\n\nfunction bimap(domain, range, deinterpolate, reinterpolate) {\n var d0 = domain[0], d1 = domain[1], r0 = range[0], r1 = range[1];\n if (d1 < d0) d0 = deinterpolate(d1, d0), r0 = reinterpolate(r1, r0);\n else d0 = deinterpolate(d0, d1), r0 = reinterpolate(r0, r1);\n return function(x) { return r0(d0(x)); };\n}\n\nfunction polymap(domain, range, deinterpolate, reinterpolate) {\n var j = Math.min(domain.length, range.length) - 1,\n d = new Array(j),\n r = new Array(j),\n i = -1;\n\n // Reverse descending domains.\n if (domain[j] < domain[0]) {\n domain = domain.slice().reverse();\n range = range.slice().reverse();\n }\n\n while (++i < j) {\n d[i] = deinterpolate(domain[i], domain[i + 1]);\n r[i] = reinterpolate(range[i], range[i + 1]);\n }\n\n return function(x) {\n var i = bisect(domain, x, 1, j) - 1;\n return r[i](d[i](x));\n };\n}\n\nexport function copy(source, target) {\n return target\n .domain(source.domain())\n .range(source.range())\n .interpolate(source.interpolate())\n .clamp(source.clamp());\n}\n\n// deinterpolate(a, b)(x) takes a domain value x in [a,b] and returns the corresponding parameter t in [0,1].\n// reinterpolate(a, b)(t) takes a parameter t in [0,1] and returns the corresponding domain value x in [a,b].\nexport default function continuous(deinterpolate, reinterpolate) {\n var domain = unit,\n range = unit,\n interpolate = interpolateValue,\n clamp = false,\n piecewise,\n output,\n input;\n\n function rescale() {\n piecewise = Math.min(domain.length, range.length) > 2 ? polymap : bimap;\n output = input = null;\n return scale;\n }\n\n function scale(x) {\n return (output || (output = piecewise(domain, range, clamp ? deinterpolateClamp(deinterpolate) : deinterpolate, interpolate)))(+x);\n }\n\n scale.invert = function(y) {\n return (input || (input = piecewise(range, domain, deinterpolateLinear, clamp ? reinterpolateClamp(reinterpolate) : reinterpolate)))(+y);\n };\n\n scale.domain = function(_) {\n return arguments.length ? (domain = map.call(_, number), rescale()) : domain.slice();\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = slice.call(_), rescale()) : range.slice();\n };\n\n scale.rangeRound = function(_) {\n return range = slice.call(_), interpolate = interpolateRound, rescale();\n };\n\n scale.clamp = function(_) {\n return arguments.length ? (clamp = !!_, rescale()) : clamp;\n };\n\n scale.interpolate = function(_) {\n return arguments.length ? (interpolate = _, rescale()) : interpolate;\n };\n\n return rescale();\n}\n","// Computes the decimal coefficient and exponent of the specified number x with\n// significant digits p, where x is positive and p is in [1, 21] or undefined.\n// For example, formatDecimal(1.23) returns [\"123\", 0].\nexport default function(x, p) {\n if ((i = (x = p ? x.toExponential(p - 1) : x.toExponential()).indexOf(\"e\")) < 0) return null; // NaN, ±Infinity\n var i, coefficient = x.slice(0, i);\n\n // The string returned by toExponential either has the form \\d\\.\\d+e[-+]\\d+\n // (e.g., 1.2e+3) or the form \\de[-+]\\d+ (e.g., 1e+3).\n return [\n coefficient.length > 1 ? coefficient[0] + coefficient.slice(2) : coefficient,\n +x.slice(i + 1)\n ];\n}\n","import formatDecimal from \"./formatDecimal\";\n\nexport default function(x) {\n return x = formatDecimal(Math.abs(x)), x ? x[1] : NaN;\n}\n","// [[fill]align][sign][symbol][0][width][,][.precision][~][type]\nvar re = /^(?:(.)?([<>=^]))?([+\\-( ])?([$#])?(0)?(\\d+)?(,)?(\\.\\d+)?(~)?([a-z%])?$/i;\n\nexport default function formatSpecifier(specifier) {\n return new FormatSpecifier(specifier);\n}\n\nformatSpecifier.prototype = FormatSpecifier.prototype; // instanceof\n\nfunction FormatSpecifier(specifier) {\n if (!(match = re.exec(specifier))) throw new Error(\"invalid format: \" + specifier);\n var match;\n this.fill = match[1] || \" \";\n this.align = match[2] || \">\";\n this.sign = match[3] || \"-\";\n this.symbol = match[4] || \"\";\n this.zero = !!match[5];\n this.width = match[6] && +match[6];\n this.comma = !!match[7];\n this.precision = match[8] && +match[8].slice(1);\n this.trim = !!match[9];\n this.type = match[10] || \"\";\n}\n\nFormatSpecifier.prototype.toString = function() {\n return this.fill\n + this.align\n + this.sign\n + this.symbol\n + (this.zero ? \"0\" : \"\")\n + (this.width == null ? \"\" : Math.max(1, this.width | 0))\n + (this.comma ? \",\" : \"\")\n + (this.precision == null ? \"\" : \".\" + Math.max(0, this.precision | 0))\n + (this.trim ? \"~\" : \"\")\n + this.type;\n};\n","// Trims insignificant zeros, e.g., replaces 1.2000k with 1.2k.\nexport default function(s) {\n out: for (var n = s.length, i = 1, i0 = -1, i1; i < n; ++i) {\n switch (s[i]) {\n case \".\": i0 = i1 = i; break;\n case \"0\": if (i0 === 0) i0 = i; i1 = i; break;\n default: if (i0 > 0) { if (!+s[i]) break out; i0 = 0; } break;\n }\n }\n return i0 > 0 ? s.slice(0, i0) + s.slice(i1 + 1) : s;\n}\n","import formatDecimal from \"./formatDecimal\";\n\nexport var prefixExponent;\n\nexport default function(x, p) {\n var d = formatDecimal(x, p);\n if (!d) return x + \"\";\n var coefficient = d[0],\n exponent = d[1],\n i = exponent - (prefixExponent = Math.max(-8, Math.min(8, Math.floor(exponent / 3))) * 3) + 1,\n n = coefficient.length;\n return i === n ? coefficient\n : i > n ? coefficient + new Array(i - n + 1).join(\"0\")\n : i > 0 ? coefficient.slice(0, i) + \".\" + coefficient.slice(i)\n : \"0.\" + new Array(1 - i).join(\"0\") + formatDecimal(x, Math.max(0, p + i - 1))[0]; // less than 1y!\n}\n","import formatLocale from \"./locale\";\n\nvar locale;\nexport var format;\nexport var formatPrefix;\n\ndefaultLocale({\n decimal: \".\",\n thousands: \",\",\n grouping: [3],\n currency: [\"$\", \"\"]\n});\n\nexport default function defaultLocale(definition) {\n locale = formatLocale(definition);\n format = locale.format;\n formatPrefix = locale.formatPrefix;\n return locale;\n}\n","import formatDecimal from \"./formatDecimal\";\n\nexport default function(x, p) {\n var d = formatDecimal(x, p);\n if (!d) return x + \"\";\n var coefficient = d[0],\n exponent = d[1];\n return exponent < 0 ? \"0.\" + new Array(-exponent).join(\"0\") + coefficient\n : coefficient.length > exponent + 1 ? coefficient.slice(0, exponent + 1) + \".\" + coefficient.slice(exponent + 1)\n : coefficient + new Array(exponent - coefficient.length + 2).join(\"0\");\n}\n","import formatPrefixAuto from \"./formatPrefixAuto\";\nimport formatRounded from \"./formatRounded\";\n\nexport default {\n \"%\": function(x, p) { return (x * 100).toFixed(p); },\n \"b\": function(x) { return Math.round(x).toString(2); },\n \"c\": function(x) { return x + \"\"; },\n \"d\": function(x) { return Math.round(x).toString(10); },\n \"e\": function(x, p) { return x.toExponential(p); },\n \"f\": function(x, p) { return x.toFixed(p); },\n \"g\": function(x, p) { return x.toPrecision(p); },\n \"o\": function(x) { return Math.round(x).toString(8); },\n \"p\": function(x, p) { return formatRounded(x * 100, p); },\n \"r\": formatRounded,\n \"s\": formatPrefixAuto,\n \"X\": function(x) { return Math.round(x).toString(16).toUpperCase(); },\n \"x\": function(x) { return Math.round(x).toString(16); }\n};\n","export default function(x) {\n return x;\n}\n","import exponent from \"./exponent\";\nimport formatGroup from \"./formatGroup\";\nimport formatNumerals from \"./formatNumerals\";\nimport formatSpecifier from \"./formatSpecifier\";\nimport formatTrim from \"./formatTrim\";\nimport formatTypes from \"./formatTypes\";\nimport {prefixExponent} from \"./formatPrefixAuto\";\nimport identity from \"./identity\";\n\nvar prefixes = [\"y\",\"z\",\"a\",\"f\",\"p\",\"n\",\"µ\",\"m\",\"\",\"k\",\"M\",\"G\",\"T\",\"P\",\"E\",\"Z\",\"Y\"];\n\nexport default function(locale) {\n var group = locale.grouping && locale.thousands ? formatGroup(locale.grouping, locale.thousands) : identity,\n currency = locale.currency,\n decimal = locale.decimal,\n numerals = locale.numerals ? formatNumerals(locale.numerals) : identity,\n percent = locale.percent || \"%\";\n\n function newFormat(specifier) {\n specifier = formatSpecifier(specifier);\n\n var fill = specifier.fill,\n align = specifier.align,\n sign = specifier.sign,\n symbol = specifier.symbol,\n zero = specifier.zero,\n width = specifier.width,\n comma = specifier.comma,\n precision = specifier.precision,\n trim = specifier.trim,\n type = specifier.type;\n\n // The \"n\" type is an alias for \",g\".\n if (type === \"n\") comma = true, type = \"g\";\n\n // The \"\" type, and any invalid type, is an alias for \".12~g\".\n else if (!formatTypes[type]) precision == null && (precision = 12), trim = true, type = \"g\";\n\n // If zero fill is specified, padding goes after sign and before digits.\n if (zero || (fill === \"0\" && align === \"=\")) zero = true, fill = \"0\", align = \"=\";\n\n // Compute the prefix and suffix.\n // For SI-prefix, the suffix is lazily computed.\n var prefix = symbol === \"$\" ? currency[0] : symbol === \"#\" && /[boxX]/.test(type) ? \"0\" + type.toLowerCase() : \"\",\n suffix = symbol === \"$\" ? currency[1] : /[%p]/.test(type) ? percent : \"\";\n\n // What format function should we use?\n // Is this an integer type?\n // Can this type generate exponential notation?\n var formatType = formatTypes[type],\n maybeSuffix = /[defgprs%]/.test(type);\n\n // Set the default precision if not specified,\n // or clamp the specified precision to the supported range.\n // For significant precision, it must be in [1, 21].\n // For fixed precision, it must be in [0, 20].\n precision = precision == null ? 6\n : /[gprs]/.test(type) ? Math.max(1, Math.min(21, precision))\n : Math.max(0, Math.min(20, precision));\n\n function format(value) {\n var valuePrefix = prefix,\n valueSuffix = suffix,\n i, n, c;\n\n if (type === \"c\") {\n valueSuffix = formatType(value) + valueSuffix;\n value = \"\";\n } else {\n value = +value;\n\n // Perform the initial formatting.\n var valueNegative = value < 0;\n value = formatType(Math.abs(value), precision);\n\n // Trim insignificant zeros.\n if (trim) value = formatTrim(value);\n\n // If a negative value rounds to zero during formatting, treat as positive.\n if (valueNegative && +value === 0) valueNegative = false;\n\n // Compute the prefix and suffix.\n valuePrefix = (valueNegative ? (sign === \"(\" ? sign : \"-\") : sign === \"-\" || sign === \"(\" ? \"\" : sign) + valuePrefix;\n valueSuffix = (type === \"s\" ? prefixes[8 + prefixExponent / 3] : \"\") + valueSuffix + (valueNegative && sign === \"(\" ? \")\" : \"\");\n\n // Break the formatted value into the integer “value” part that can be\n // grouped, and fractional or exponential “suffix” part that is not.\n if (maybeSuffix) {\n i = -1, n = value.length;\n while (++i < n) {\n if (c = value.charCodeAt(i), 48 > c || c > 57) {\n valueSuffix = (c === 46 ? decimal + value.slice(i + 1) : value.slice(i)) + valueSuffix;\n value = value.slice(0, i);\n break;\n }\n }\n }\n }\n\n // If the fill character is not \"0\", grouping is applied before padding.\n if (comma && !zero) value = group(value, Infinity);\n\n // Compute the padding.\n var length = valuePrefix.length + value.length + valueSuffix.length,\n padding = length < width ? new Array(width - length + 1).join(fill) : \"\";\n\n // If the fill character is \"0\", grouping is applied after padding.\n if (comma && zero) value = group(padding + value, padding.length ? width - valueSuffix.length : Infinity), padding = \"\";\n\n // Reconstruct the final output based on the desired alignment.\n switch (align) {\n case \"<\": value = valuePrefix + value + valueSuffix + padding; break;\n case \"=\": value = valuePrefix + padding + value + valueSuffix; break;\n case \"^\": value = padding.slice(0, length = padding.length >> 1) + valuePrefix + value + valueSuffix + padding.slice(length); break;\n default: value = padding + valuePrefix + value + valueSuffix; break;\n }\n\n return numerals(value);\n }\n\n format.toString = function() {\n return specifier + \"\";\n };\n\n return format;\n }\n\n function formatPrefix(specifier, value) {\n var f = newFormat((specifier = formatSpecifier(specifier), specifier.type = \"f\", specifier)),\n e = Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3,\n k = Math.pow(10, -e),\n prefix = prefixes[8 + e / 3];\n return function(value) {\n return f(k * value) + prefix;\n };\n }\n\n return {\n format: newFormat,\n formatPrefix: formatPrefix\n };\n}\n","export default function(grouping, thousands) {\n return function(value, width) {\n var i = value.length,\n t = [],\n j = 0,\n g = grouping[0],\n length = 0;\n\n while (i > 0 && g > 0) {\n if (length + g + 1 > width) g = Math.max(1, width - length);\n t.push(value.substring(i -= g, i + g));\n if ((length += g + 1) > width) break;\n g = grouping[j = (j + 1) % grouping.length];\n }\n\n return t.reverse().join(thousands);\n };\n}\n","export default function(numerals) {\n return function(value) {\n return value.replace(/[0-9]/g, function(i) {\n return numerals[+i];\n });\n };\n}\n","import exponent from \"./exponent\";\n\nexport default function(step) {\n return Math.max(0, -exponent(Math.abs(step)));\n}\n","import {tickStep} from \"d3-array\";\nimport {format, formatPrefix, formatSpecifier, precisionFixed, precisionPrefix, precisionRound} from \"d3-format\";\n\nexport default function(domain, count, specifier) {\n var start = domain[0],\n stop = domain[domain.length - 1],\n step = tickStep(start, stop, count == null ? 10 : count),\n precision;\n specifier = formatSpecifier(specifier == null ? \",f\" : specifier);\n switch (specifier.type) {\n case \"s\": {\n var value = Math.max(Math.abs(start), Math.abs(stop));\n if (specifier.precision == null && !isNaN(precision = precisionPrefix(step, value))) specifier.precision = precision;\n return formatPrefix(specifier, value);\n }\n case \"\":\n case \"e\":\n case \"g\":\n case \"p\":\n case \"r\": {\n if (specifier.precision == null && !isNaN(precision = precisionRound(step, Math.max(Math.abs(start), Math.abs(stop))))) specifier.precision = precision - (specifier.type === \"e\");\n break;\n }\n case \"f\":\n case \"%\": {\n if (specifier.precision == null && !isNaN(precision = precisionFixed(step))) specifier.precision = precision - (specifier.type === \"%\") * 2;\n break;\n }\n }\n return format(specifier);\n}\n","import exponent from \"./exponent\";\n\nexport default function(step, value) {\n return Math.max(0, Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3 - exponent(Math.abs(step)));\n}\n","import exponent from \"./exponent\";\n\nexport default function(step, max) {\n step = Math.abs(step), max = Math.abs(max) - step;\n return Math.max(0, exponent(max) - exponent(step)) + 1;\n}\n","import {ticks, tickIncrement} from \"d3-array\";\nimport {interpolateNumber as reinterpolate} from \"d3-interpolate\";\nimport {default as continuous, copy, deinterpolateLinear as deinterpolate} from \"./continuous\";\nimport tickFormat from \"./tickFormat\";\n\nexport function linearish(scale) {\n var domain = scale.domain;\n\n scale.ticks = function(count) {\n var d = domain();\n return ticks(d[0], d[d.length - 1], count == null ? 10 : count);\n };\n\n scale.tickFormat = function(count, specifier) {\n return tickFormat(domain(), count, specifier);\n };\n\n scale.nice = function(count) {\n if (count == null) count = 10;\n\n var d = domain(),\n i0 = 0,\n i1 = d.length - 1,\n start = d[i0],\n stop = d[i1],\n step;\n\n if (stop < start) {\n step = start, start = stop, stop = step;\n step = i0, i0 = i1, i1 = step;\n }\n\n step = tickIncrement(start, stop, count);\n\n if (step > 0) {\n start = Math.floor(start / step) * step;\n stop = Math.ceil(stop / step) * step;\n step = tickIncrement(start, stop, count);\n } else if (step < 0) {\n start = Math.ceil(start * step) / step;\n stop = Math.floor(stop * step) / step;\n step = tickIncrement(start, stop, count);\n }\n\n if (step > 0) {\n d[i0] = Math.floor(start / step) * step;\n d[i1] = Math.ceil(stop / step) * step;\n domain(d);\n } else if (step < 0) {\n d[i0] = Math.ceil(start * step) / step;\n d[i1] = Math.floor(stop * step) / step;\n domain(d);\n }\n\n return scale;\n };\n\n return scale;\n}\n\nexport default function linear() {\n var scale = continuous(deinterpolate, reinterpolate);\n\n scale.copy = function() {\n return copy(scale, linear());\n };\n\n return linearish(scale);\n}\n","import {map} from \"./array\";\nimport {linearish} from \"./linear\";\nimport number from \"./number\";\n\nexport default function identity() {\n var domain = [0, 1];\n\n function scale(x) {\n return +x;\n }\n\n scale.invert = scale;\n\n scale.domain = scale.range = function(_) {\n return arguments.length ? (domain = map.call(_, number), scale) : domain.slice();\n };\n\n scale.copy = function() {\n return identity().domain(domain);\n };\n\n return linearish(scale);\n}\n","export default function(domain, interval) {\n domain = domain.slice();\n\n var i0 = 0,\n i1 = domain.length - 1,\n x0 = domain[i0],\n x1 = domain[i1],\n t;\n\n if (x1 < x0) {\n t = i0, i0 = i1, i1 = t;\n t = x0, x0 = x1, x1 = t;\n }\n\n domain[i0] = interval.floor(x0);\n domain[i1] = interval.ceil(x1);\n return domain;\n}\n","import {ticks} from \"d3-array\";\nimport {format} from \"d3-format\";\nimport constant from \"./constant\";\nimport nice from \"./nice\";\nimport {default as continuous, copy} from \"./continuous\";\n\nfunction deinterpolate(a, b) {\n return (b = Math.log(b / a))\n ? function(x) { return Math.log(x / a) / b; }\n : constant(b);\n}\n\nfunction reinterpolate(a, b) {\n return a < 0\n ? function(t) { return -Math.pow(-b, t) * Math.pow(-a, 1 - t); }\n : function(t) { return Math.pow(b, t) * Math.pow(a, 1 - t); };\n}\n\nfunction pow10(x) {\n return isFinite(x) ? +(\"1e\" + x) : x < 0 ? 0 : x;\n}\n\nfunction powp(base) {\n return base === 10 ? pow10\n : base === Math.E ? Math.exp\n : function(x) { return Math.pow(base, x); };\n}\n\nfunction logp(base) {\n return base === Math.E ? Math.log\n : base === 10 && Math.log10\n || base === 2 && Math.log2\n || (base = Math.log(base), function(x) { return Math.log(x) / base; });\n}\n\nfunction reflect(f) {\n return function(x) {\n return -f(-x);\n };\n}\n\nexport default function log() {\n var scale = continuous(deinterpolate, reinterpolate).domain([1, 10]),\n domain = scale.domain,\n base = 10,\n logs = logp(10),\n pows = powp(10);\n\n function rescale() {\n logs = logp(base), pows = powp(base);\n if (domain()[0] < 0) logs = reflect(logs), pows = reflect(pows);\n return scale;\n }\n\n scale.base = function(_) {\n return arguments.length ? (base = +_, rescale()) : base;\n };\n\n scale.domain = function(_) {\n return arguments.length ? (domain(_), rescale()) : domain();\n };\n\n scale.ticks = function(count) {\n var d = domain(),\n u = d[0],\n v = d[d.length - 1],\n r;\n\n if (r = v < u) i = u, u = v, v = i;\n\n var i = logs(u),\n j = logs(v),\n p,\n k,\n t,\n n = count == null ? 10 : +count,\n z = [];\n\n if (!(base % 1) && j - i < n) {\n i = Math.round(i) - 1, j = Math.round(j) + 1;\n if (u > 0) for (; i < j; ++i) {\n for (k = 1, p = pows(i); k < base; ++k) {\n t = p * k;\n if (t < u) continue;\n if (t > v) break;\n z.push(t);\n }\n } else for (; i < j; ++i) {\n for (k = base - 1, p = pows(i); k >= 1; --k) {\n t = p * k;\n if (t < u) continue;\n if (t > v) break;\n z.push(t);\n }\n }\n } else {\n z = ticks(i, j, Math.min(j - i, n)).map(pows);\n }\n\n return r ? z.reverse() : z;\n };\n\n scale.tickFormat = function(count, specifier) {\n if (specifier == null) specifier = base === 10 ? \".0e\" : \",\";\n if (typeof specifier !== \"function\") specifier = format(specifier);\n if (count === Infinity) return specifier;\n if (count == null) count = 10;\n var k = Math.max(1, base * count / scale.ticks().length); // TODO fast estimate?\n return function(d) {\n var i = d / pows(Math.round(logs(d)));\n if (i * base < base - 0.5) i *= base;\n return i <= k ? specifier(d) : \"\";\n };\n };\n\n scale.nice = function() {\n return domain(nice(domain(), {\n floor: function(x) { return pows(Math.floor(logs(x))); },\n ceil: function(x) { return pows(Math.ceil(logs(x))); }\n }));\n };\n\n scale.copy = function() {\n return copy(scale, log().base(base));\n };\n\n return scale;\n}\n","import constant from \"./constant\";\nimport {linearish} from \"./linear\";\nimport {default as continuous, copy} from \"./continuous\";\n\nfunction raise(x, exponent) {\n return x < 0 ? -Math.pow(-x, exponent) : Math.pow(x, exponent);\n}\n\nexport default function pow() {\n var exponent = 1,\n scale = continuous(deinterpolate, reinterpolate),\n domain = scale.domain;\n\n function deinterpolate(a, b) {\n return (b = raise(b, exponent) - (a = raise(a, exponent)))\n ? function(x) { return (raise(x, exponent) - a) / b; }\n : constant(b);\n }\n\n function reinterpolate(a, b) {\n b = raise(b, exponent) - (a = raise(a, exponent));\n return function(t) { return raise(a + b * t, 1 / exponent); };\n }\n\n scale.exponent = function(_) {\n return arguments.length ? (exponent = +_, domain(domain())) : exponent;\n };\n\n scale.copy = function() {\n return copy(scale, pow().exponent(exponent));\n };\n\n return linearish(scale);\n}\n\nexport function sqrt() {\n return pow().exponent(0.5);\n}\n","import {ascending, bisect, quantile as threshold} from \"d3-array\";\nimport {slice} from \"./array\";\n\nexport default function quantile() {\n var domain = [],\n range = [],\n thresholds = [];\n\n function rescale() {\n var i = 0, n = Math.max(1, range.length);\n thresholds = new Array(n - 1);\n while (++i < n) thresholds[i - 1] = threshold(domain, i / n);\n return scale;\n }\n\n function scale(x) {\n if (!isNaN(x = +x)) return range[bisect(thresholds, x)];\n }\n\n scale.invertExtent = function(y) {\n var i = range.indexOf(y);\n return i < 0 ? [NaN, NaN] : [\n i > 0 ? thresholds[i - 1] : domain[0],\n i < thresholds.length ? thresholds[i] : domain[domain.length - 1]\n ];\n };\n\n scale.domain = function(_) {\n if (!arguments.length) return domain.slice();\n domain = [];\n for (var i = 0, n = _.length, d; i < n; ++i) if (d = _[i], d != null && !isNaN(d = +d)) domain.push(d);\n domain.sort(ascending);\n return rescale();\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = slice.call(_), rescale()) : range.slice();\n };\n\n scale.quantiles = function() {\n return thresholds.slice();\n };\n\n scale.copy = function() {\n return quantile()\n .domain(domain)\n .range(range);\n };\n\n return scale;\n}\n","import {bisect} from \"d3-array\";\nimport {slice} from \"./array\";\nimport {linearish} from \"./linear\";\n\nexport default function quantize() {\n var x0 = 0,\n x1 = 1,\n n = 1,\n domain = [0.5],\n range = [0, 1];\n\n function scale(x) {\n if (x <= x) return range[bisect(domain, x, 0, n)];\n }\n\n function rescale() {\n var i = -1;\n domain = new Array(n);\n while (++i < n) domain[i] = ((i + 1) * x1 - (i - n) * x0) / (n + 1);\n return scale;\n }\n\n scale.domain = function(_) {\n return arguments.length ? (x0 = +_[0], x1 = +_[1], rescale()) : [x0, x1];\n };\n\n scale.range = function(_) {\n return arguments.length ? (n = (range = slice.call(_)).length - 1, rescale()) : range.slice();\n };\n\n scale.invertExtent = function(y) {\n var i = range.indexOf(y);\n return i < 0 ? [NaN, NaN]\n : i < 1 ? [x0, domain[0]]\n : i >= n ? [domain[n - 1], x1]\n : [domain[i - 1], domain[i]];\n };\n\n scale.copy = function() {\n return quantize()\n .domain([x0, x1])\n .range(range);\n };\n\n return linearish(scale);\n}\n","import {bisect} from \"d3-array\";\nimport {slice} from \"./array\";\n\nexport default function threshold() {\n var domain = [0.5],\n range = [0, 1],\n n = 1;\n\n function scale(x) {\n if (x <= x) return range[bisect(domain, x, 0, n)];\n }\n\n scale.domain = function(_) {\n return arguments.length ? (domain = slice.call(_), n = Math.min(domain.length, range.length - 1), scale) : domain.slice();\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = slice.call(_), n = Math.min(domain.length, range.length - 1), scale) : range.slice();\n };\n\n scale.invertExtent = function(y) {\n var i = range.indexOf(y);\n return [domain[i - 1], domain[i]];\n };\n\n scale.copy = function() {\n return threshold()\n .domain(domain)\n .range(range);\n };\n\n return scale;\n}\n","var t0 = new Date,\n t1 = new Date;\n\nexport default function newInterval(floori, offseti, count, field) {\n\n function interval(date) {\n return floori(date = new Date(+date)), date;\n }\n\n interval.floor = interval;\n\n interval.ceil = function(date) {\n return floori(date = new Date(date - 1)), offseti(date, 1), floori(date), date;\n };\n\n interval.round = function(date) {\n var d0 = interval(date),\n d1 = interval.ceil(date);\n return date - d0 < d1 - date ? d0 : d1;\n };\n\n interval.offset = function(date, step) {\n return offseti(date = new Date(+date), step == null ? 1 : Math.floor(step)), date;\n };\n\n interval.range = function(start, stop, step) {\n var range = [], previous;\n start = interval.ceil(start);\n step = step == null ? 1 : Math.floor(step);\n if (!(start < stop) || !(step > 0)) return range; // also handles Invalid Date\n do range.push(previous = new Date(+start)), offseti(start, step), floori(start);\n while (previous < start && start < stop);\n return range;\n };\n\n interval.filter = function(test) {\n return newInterval(function(date) {\n if (date >= date) while (floori(date), !test(date)) date.setTime(date - 1);\n }, function(date, step) {\n if (date >= date) {\n if (step < 0) while (++step <= 0) {\n while (offseti(date, -1), !test(date)) {} // eslint-disable-line no-empty\n } else while (--step >= 0) {\n while (offseti(date, +1), !test(date)) {} // eslint-disable-line no-empty\n }\n }\n });\n };\n\n if (count) {\n interval.count = function(start, end) {\n t0.setTime(+start), t1.setTime(+end);\n floori(t0), floori(t1);\n return Math.floor(count(t0, t1));\n };\n\n interval.every = function(step) {\n step = Math.floor(step);\n return !isFinite(step) || !(step > 0) ? null\n : !(step > 1) ? interval\n : interval.filter(field\n ? function(d) { return field(d) % step === 0; }\n : function(d) { return interval.count(0, d) % step === 0; });\n };\n }\n\n return interval;\n}\n","import interval from \"./interval\";\n\nvar millisecond = interval(function() {\n // noop\n}, function(date, step) {\n date.setTime(+date + step);\n}, function(start, end) {\n return end - start;\n});\n\n// An optimized implementation for this simple case.\nmillisecond.every = function(k) {\n k = Math.floor(k);\n if (!isFinite(k) || !(k > 0)) return null;\n if (!(k > 1)) return millisecond;\n return interval(function(date) {\n date.setTime(Math.floor(date / k) * k);\n }, function(date, step) {\n date.setTime(+date + step * k);\n }, function(start, end) {\n return (end - start) / k;\n });\n};\n\nexport default millisecond;\nexport var milliseconds = millisecond.range;\n","export var durationSecond = 1e3;\nexport var durationMinute = 6e4;\nexport var durationHour = 36e5;\nexport var durationDay = 864e5;\nexport var durationWeek = 6048e5;\n","import interval from \"./interval\";\nimport {durationSecond} from \"./duration\";\n\nvar second = interval(function(date) {\n date.setTime(Math.floor(date / durationSecond) * durationSecond);\n}, function(date, step) {\n date.setTime(+date + step * durationSecond);\n}, function(start, end) {\n return (end - start) / durationSecond;\n}, function(date) {\n return date.getUTCSeconds();\n});\n\nexport default second;\nexport var seconds = second.range;\n","import interval from \"./interval\";\nimport {durationMinute} from \"./duration\";\n\nvar minute = interval(function(date) {\n date.setTime(Math.floor(date / durationMinute) * durationMinute);\n}, function(date, step) {\n date.setTime(+date + step * durationMinute);\n}, function(start, end) {\n return (end - start) / durationMinute;\n}, function(date) {\n return date.getMinutes();\n});\n\nexport default minute;\nexport var minutes = minute.range;\n","import interval from \"./interval\";\nimport {durationHour, durationMinute} from \"./duration\";\n\nvar hour = interval(function(date) {\n var offset = date.getTimezoneOffset() * durationMinute % durationHour;\n if (offset < 0) offset += durationHour;\n date.setTime(Math.floor((+date - offset) / durationHour) * durationHour + offset);\n}, function(date, step) {\n date.setTime(+date + step * durationHour);\n}, function(start, end) {\n return (end - start) / durationHour;\n}, function(date) {\n return date.getHours();\n});\n\nexport default hour;\nexport var hours = hour.range;\n","import interval from \"./interval\";\nimport {durationDay, durationMinute} from \"./duration\";\n\nvar day = interval(function(date) {\n date.setHours(0, 0, 0, 0);\n}, function(date, step) {\n date.setDate(date.getDate() + step);\n}, function(start, end) {\n return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationDay;\n}, function(date) {\n return date.getDate() - 1;\n});\n\nexport default day;\nexport var days = day.range;\n","import interval from \"./interval\";\nimport {durationMinute, durationWeek} from \"./duration\";\n\nfunction weekday(i) {\n return interval(function(date) {\n date.setDate(date.getDate() - (date.getDay() + 7 - i) % 7);\n date.setHours(0, 0, 0, 0);\n }, function(date, step) {\n date.setDate(date.getDate() + step * 7);\n }, function(start, end) {\n return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationWeek;\n });\n}\n\nexport var sunday = weekday(0);\nexport var monday = weekday(1);\nexport var tuesday = weekday(2);\nexport var wednesday = weekday(3);\nexport var thursday = weekday(4);\nexport var friday = weekday(5);\nexport var saturday = weekday(6);\n\nexport var sundays = sunday.range;\nexport var mondays = monday.range;\nexport var tuesdays = tuesday.range;\nexport var wednesdays = wednesday.range;\nexport var thursdays = thursday.range;\nexport var fridays = friday.range;\nexport var saturdays = saturday.range;\n","import interval from \"./interval\";\n\nvar month = interval(function(date) {\n date.setDate(1);\n date.setHours(0, 0, 0, 0);\n}, function(date, step) {\n date.setMonth(date.getMonth() + step);\n}, function(start, end) {\n return end.getMonth() - start.getMonth() + (end.getFullYear() - start.getFullYear()) * 12;\n}, function(date) {\n return date.getMonth();\n});\n\nexport default month;\nexport var months = month.range;\n","import interval from \"./interval\";\n\nvar year = interval(function(date) {\n date.setMonth(0, 1);\n date.setHours(0, 0, 0, 0);\n}, function(date, step) {\n date.setFullYear(date.getFullYear() + step);\n}, function(start, end) {\n return end.getFullYear() - start.getFullYear();\n}, function(date) {\n return date.getFullYear();\n});\n\n// An optimized implementation for this simple case.\nyear.every = function(k) {\n return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : interval(function(date) {\n date.setFullYear(Math.floor(date.getFullYear() / k) * k);\n date.setMonth(0, 1);\n date.setHours(0, 0, 0, 0);\n }, function(date, step) {\n date.setFullYear(date.getFullYear() + step * k);\n });\n};\n\nexport default year;\nexport var years = year.range;\n","import interval from \"./interval\";\nimport {durationMinute} from \"./duration\";\n\nvar utcMinute = interval(function(date) {\n date.setUTCSeconds(0, 0);\n}, function(date, step) {\n date.setTime(+date + step * durationMinute);\n}, function(start, end) {\n return (end - start) / durationMinute;\n}, function(date) {\n return date.getUTCMinutes();\n});\n\nexport default utcMinute;\nexport var utcMinutes = utcMinute.range;\n","import interval from \"./interval\";\nimport {durationHour} from \"./duration\";\n\nvar utcHour = interval(function(date) {\n date.setUTCMinutes(0, 0, 0);\n}, function(date, step) {\n date.setTime(+date + step * durationHour);\n}, function(start, end) {\n return (end - start) / durationHour;\n}, function(date) {\n return date.getUTCHours();\n});\n\nexport default utcHour;\nexport var utcHours = utcHour.range;\n","import interval from \"./interval\";\nimport {durationDay} from \"./duration\";\n\nvar utcDay = interval(function(date) {\n date.setUTCHours(0, 0, 0, 0);\n}, function(date, step) {\n date.setUTCDate(date.getUTCDate() + step);\n}, function(start, end) {\n return (end - start) / durationDay;\n}, function(date) {\n return date.getUTCDate() - 1;\n});\n\nexport default utcDay;\nexport var utcDays = utcDay.range;\n","import interval from \"./interval\";\nimport {durationWeek} from \"./duration\";\n\nfunction utcWeekday(i) {\n return interval(function(date) {\n date.setUTCDate(date.getUTCDate() - (date.getUTCDay() + 7 - i) % 7);\n date.setUTCHours(0, 0, 0, 0);\n }, function(date, step) {\n date.setUTCDate(date.getUTCDate() + step * 7);\n }, function(start, end) {\n return (end - start) / durationWeek;\n });\n}\n\nexport var utcSunday = utcWeekday(0);\nexport var utcMonday = utcWeekday(1);\nexport var utcTuesday = utcWeekday(2);\nexport var utcWednesday = utcWeekday(3);\nexport var utcThursday = utcWeekday(4);\nexport var utcFriday = utcWeekday(5);\nexport var utcSaturday = utcWeekday(6);\n\nexport var utcSundays = utcSunday.range;\nexport var utcMondays = utcMonday.range;\nexport var utcTuesdays = utcTuesday.range;\nexport var utcWednesdays = utcWednesday.range;\nexport var utcThursdays = utcThursday.range;\nexport var utcFridays = utcFriday.range;\nexport var utcSaturdays = utcSaturday.range;\n","import interval from \"./interval\";\n\nvar utcMonth = interval(function(date) {\n date.setUTCDate(1);\n date.setUTCHours(0, 0, 0, 0);\n}, function(date, step) {\n date.setUTCMonth(date.getUTCMonth() + step);\n}, function(start, end) {\n return end.getUTCMonth() - start.getUTCMonth() + (end.getUTCFullYear() - start.getUTCFullYear()) * 12;\n}, function(date) {\n return date.getUTCMonth();\n});\n\nexport default utcMonth;\nexport var utcMonths = utcMonth.range;\n","import interval from \"./interval\";\n\nvar utcYear = interval(function(date) {\n date.setUTCMonth(0, 1);\n date.setUTCHours(0, 0, 0, 0);\n}, function(date, step) {\n date.setUTCFullYear(date.getUTCFullYear() + step);\n}, function(start, end) {\n return end.getUTCFullYear() - start.getUTCFullYear();\n}, function(date) {\n return date.getUTCFullYear();\n});\n\n// An optimized implementation for this simple case.\nutcYear.every = function(k) {\n return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : interval(function(date) {\n date.setUTCFullYear(Math.floor(date.getUTCFullYear() / k) * k);\n date.setUTCMonth(0, 1);\n date.setUTCHours(0, 0, 0, 0);\n }, function(date, step) {\n date.setUTCFullYear(date.getUTCFullYear() + step * k);\n });\n};\n\nexport default utcYear;\nexport var utcYears = utcYear.range;\n","import {\n timeDay,\n timeSunday,\n timeMonday,\n timeThursday,\n timeYear,\n utcDay,\n utcSunday,\n utcMonday,\n utcThursday,\n utcYear\n} from \"d3-time\";\n\nfunction localDate(d) {\n if (0 <= d.y && d.y < 100) {\n var date = new Date(-1, d.m, d.d, d.H, d.M, d.S, d.L);\n date.setFullYear(d.y);\n return date;\n }\n return new Date(d.y, d.m, d.d, d.H, d.M, d.S, d.L);\n}\n\nfunction utcDate(d) {\n if (0 <= d.y && d.y < 100) {\n var date = new Date(Date.UTC(-1, d.m, d.d, d.H, d.M, d.S, d.L));\n date.setUTCFullYear(d.y);\n return date;\n }\n return new Date(Date.UTC(d.y, d.m, d.d, d.H, d.M, d.S, d.L));\n}\n\nfunction newYear(y) {\n return {y: y, m: 0, d: 1, H: 0, M: 0, S: 0, L: 0};\n}\n\nexport default function formatLocale(locale) {\n var locale_dateTime = locale.dateTime,\n locale_date = locale.date,\n locale_time = locale.time,\n locale_periods = locale.periods,\n locale_weekdays = locale.days,\n locale_shortWeekdays = locale.shortDays,\n locale_months = locale.months,\n locale_shortMonths = locale.shortMonths;\n\n var periodRe = formatRe(locale_periods),\n periodLookup = formatLookup(locale_periods),\n weekdayRe = formatRe(locale_weekdays),\n weekdayLookup = formatLookup(locale_weekdays),\n shortWeekdayRe = formatRe(locale_shortWeekdays),\n shortWeekdayLookup = formatLookup(locale_shortWeekdays),\n monthRe = formatRe(locale_months),\n monthLookup = formatLookup(locale_months),\n shortMonthRe = formatRe(locale_shortMonths),\n shortMonthLookup = formatLookup(locale_shortMonths);\n\n var formats = {\n \"a\": formatShortWeekday,\n \"A\": formatWeekday,\n \"b\": formatShortMonth,\n \"B\": formatMonth,\n \"c\": null,\n \"d\": formatDayOfMonth,\n \"e\": formatDayOfMonth,\n \"f\": formatMicroseconds,\n \"H\": formatHour24,\n \"I\": formatHour12,\n \"j\": formatDayOfYear,\n \"L\": formatMilliseconds,\n \"m\": formatMonthNumber,\n \"M\": formatMinutes,\n \"p\": formatPeriod,\n \"Q\": formatUnixTimestamp,\n \"s\": formatUnixTimestampSeconds,\n \"S\": formatSeconds,\n \"u\": formatWeekdayNumberMonday,\n \"U\": formatWeekNumberSunday,\n \"V\": formatWeekNumberISO,\n \"w\": formatWeekdayNumberSunday,\n \"W\": formatWeekNumberMonday,\n \"x\": null,\n \"X\": null,\n \"y\": formatYear,\n \"Y\": formatFullYear,\n \"Z\": formatZone,\n \"%\": formatLiteralPercent\n };\n\n var utcFormats = {\n \"a\": formatUTCShortWeekday,\n \"A\": formatUTCWeekday,\n \"b\": formatUTCShortMonth,\n \"B\": formatUTCMonth,\n \"c\": null,\n \"d\": formatUTCDayOfMonth,\n \"e\": formatUTCDayOfMonth,\n \"f\": formatUTCMicroseconds,\n \"H\": formatUTCHour24,\n \"I\": formatUTCHour12,\n \"j\": formatUTCDayOfYear,\n \"L\": formatUTCMilliseconds,\n \"m\": formatUTCMonthNumber,\n \"M\": formatUTCMinutes,\n \"p\": formatUTCPeriod,\n \"Q\": formatUnixTimestamp,\n \"s\": formatUnixTimestampSeconds,\n \"S\": formatUTCSeconds,\n \"u\": formatUTCWeekdayNumberMonday,\n \"U\": formatUTCWeekNumberSunday,\n \"V\": formatUTCWeekNumberISO,\n \"w\": formatUTCWeekdayNumberSunday,\n \"W\": formatUTCWeekNumberMonday,\n \"x\": null,\n \"X\": null,\n \"y\": formatUTCYear,\n \"Y\": formatUTCFullYear,\n \"Z\": formatUTCZone,\n \"%\": formatLiteralPercent\n };\n\n var parses = {\n \"a\": parseShortWeekday,\n \"A\": parseWeekday,\n \"b\": parseShortMonth,\n \"B\": parseMonth,\n \"c\": parseLocaleDateTime,\n \"d\": parseDayOfMonth,\n \"e\": parseDayOfMonth,\n \"f\": parseMicroseconds,\n \"H\": parseHour24,\n \"I\": parseHour24,\n \"j\": parseDayOfYear,\n \"L\": parseMilliseconds,\n \"m\": parseMonthNumber,\n \"M\": parseMinutes,\n \"p\": parsePeriod,\n \"Q\": parseUnixTimestamp,\n \"s\": parseUnixTimestampSeconds,\n \"S\": parseSeconds,\n \"u\": parseWeekdayNumberMonday,\n \"U\": parseWeekNumberSunday,\n \"V\": parseWeekNumberISO,\n \"w\": parseWeekdayNumberSunday,\n \"W\": parseWeekNumberMonday,\n \"x\": parseLocaleDate,\n \"X\": parseLocaleTime,\n \"y\": parseYear,\n \"Y\": parseFullYear,\n \"Z\": parseZone,\n \"%\": parseLiteralPercent\n };\n\n // These recursive directive definitions must be deferred.\n formats.x = newFormat(locale_date, formats);\n formats.X = newFormat(locale_time, formats);\n formats.c = newFormat(locale_dateTime, formats);\n utcFormats.x = newFormat(locale_date, utcFormats);\n utcFormats.X = newFormat(locale_time, utcFormats);\n utcFormats.c = newFormat(locale_dateTime, utcFormats);\n\n function newFormat(specifier, formats) {\n return function(date) {\n var string = [],\n i = -1,\n j = 0,\n n = specifier.length,\n c,\n pad,\n format;\n\n if (!(date instanceof Date)) date = new Date(+date);\n\n while (++i < n) {\n if (specifier.charCodeAt(i) === 37) {\n string.push(specifier.slice(j, i));\n if ((pad = pads[c = specifier.charAt(++i)]) != null) c = specifier.charAt(++i);\n else pad = c === \"e\" ? \" \" : \"0\";\n if (format = formats[c]) c = format(date, pad);\n string.push(c);\n j = i + 1;\n }\n }\n\n string.push(specifier.slice(j, i));\n return string.join(\"\");\n };\n }\n\n function newParse(specifier, newDate) {\n return function(string) {\n var d = newYear(1900),\n i = parseSpecifier(d, specifier, string += \"\", 0),\n week, day;\n if (i != string.length) return null;\n\n // If a UNIX timestamp is specified, return it.\n if (\"Q\" in d) return new Date(d.Q);\n\n // The am-pm flag is 0 for AM, and 1 for PM.\n if (\"p\" in d) d.H = d.H % 12 + d.p * 12;\n\n // Convert day-of-week and week-of-year to day-of-year.\n if (\"V\" in d) {\n if (d.V < 1 || d.V > 53) return null;\n if (!(\"w\" in d)) d.w = 1;\n if (\"Z\" in d) {\n week = utcDate(newYear(d.y)), day = week.getUTCDay();\n week = day > 4 || day === 0 ? utcMonday.ceil(week) : utcMonday(week);\n week = utcDay.offset(week, (d.V - 1) * 7);\n d.y = week.getUTCFullYear();\n d.m = week.getUTCMonth();\n d.d = week.getUTCDate() + (d.w + 6) % 7;\n } else {\n week = newDate(newYear(d.y)), day = week.getDay();\n week = day > 4 || day === 0 ? timeMonday.ceil(week) : timeMonday(week);\n week = timeDay.offset(week, (d.V - 1) * 7);\n d.y = week.getFullYear();\n d.m = week.getMonth();\n d.d = week.getDate() + (d.w + 6) % 7;\n }\n } else if (\"W\" in d || \"U\" in d) {\n if (!(\"w\" in d)) d.w = \"u\" in d ? d.u % 7 : \"W\" in d ? 1 : 0;\n day = \"Z\" in d ? utcDate(newYear(d.y)).getUTCDay() : newDate(newYear(d.y)).getDay();\n d.m = 0;\n d.d = \"W\" in d ? (d.w + 6) % 7 + d.W * 7 - (day + 5) % 7 : d.w + d.U * 7 - (day + 6) % 7;\n }\n\n // If a time zone is specified, all fields are interpreted as UTC and then\n // offset according to the specified time zone.\n if (\"Z\" in d) {\n d.H += d.Z / 100 | 0;\n d.M += d.Z % 100;\n return utcDate(d);\n }\n\n // Otherwise, all fields are in local time.\n return newDate(d);\n };\n }\n\n function parseSpecifier(d, specifier, string, j) {\n var i = 0,\n n = specifier.length,\n m = string.length,\n c,\n parse;\n\n while (i < n) {\n if (j >= m) return -1;\n c = specifier.charCodeAt(i++);\n if (c === 37) {\n c = specifier.charAt(i++);\n parse = parses[c in pads ? specifier.charAt(i++) : c];\n if (!parse || ((j = parse(d, string, j)) < 0)) return -1;\n } else if (c != string.charCodeAt(j++)) {\n return -1;\n }\n }\n\n return j;\n }\n\n function parsePeriod(d, string, i) {\n var n = periodRe.exec(string.slice(i));\n return n ? (d.p = periodLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n }\n\n function parseShortWeekday(d, string, i) {\n var n = shortWeekdayRe.exec(string.slice(i));\n return n ? (d.w = shortWeekdayLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n }\n\n function parseWeekday(d, string, i) {\n var n = weekdayRe.exec(string.slice(i));\n return n ? (d.w = weekdayLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n }\n\n function parseShortMonth(d, string, i) {\n var n = shortMonthRe.exec(string.slice(i));\n return n ? (d.m = shortMonthLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n }\n\n function parseMonth(d, string, i) {\n var n = monthRe.exec(string.slice(i));\n return n ? (d.m = monthLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n }\n\n function parseLocaleDateTime(d, string, i) {\n return parseSpecifier(d, locale_dateTime, string, i);\n }\n\n function parseLocaleDate(d, string, i) {\n return parseSpecifier(d, locale_date, string, i);\n }\n\n function parseLocaleTime(d, string, i) {\n return parseSpecifier(d, locale_time, string, i);\n }\n\n function formatShortWeekday(d) {\n return locale_shortWeekdays[d.getDay()];\n }\n\n function formatWeekday(d) {\n return locale_weekdays[d.getDay()];\n }\n\n function formatShortMonth(d) {\n return locale_shortMonths[d.getMonth()];\n }\n\n function formatMonth(d) {\n return locale_months[d.getMonth()];\n }\n\n function formatPeriod(d) {\n return locale_periods[+(d.getHours() >= 12)];\n }\n\n function formatUTCShortWeekday(d) {\n return locale_shortWeekdays[d.getUTCDay()];\n }\n\n function formatUTCWeekday(d) {\n return locale_weekdays[d.getUTCDay()];\n }\n\n function formatUTCShortMonth(d) {\n return locale_shortMonths[d.getUTCMonth()];\n }\n\n function formatUTCMonth(d) {\n return locale_months[d.getUTCMonth()];\n }\n\n function formatUTCPeriod(d) {\n return locale_periods[+(d.getUTCHours() >= 12)];\n }\n\n return {\n format: function(specifier) {\n var f = newFormat(specifier += \"\", formats);\n f.toString = function() { return specifier; };\n return f;\n },\n parse: function(specifier) {\n var p = newParse(specifier += \"\", localDate);\n p.toString = function() { return specifier; };\n return p;\n },\n utcFormat: function(specifier) {\n var f = newFormat(specifier += \"\", utcFormats);\n f.toString = function() { return specifier; };\n return f;\n },\n utcParse: function(specifier) {\n var p = newParse(specifier, utcDate);\n p.toString = function() { return specifier; };\n return p;\n }\n };\n}\n\nvar pads = {\"-\": \"\", \"_\": \" \", \"0\": \"0\"},\n numberRe = /^\\s*\\d+/, // note: ignores next directive\n percentRe = /^%/,\n requoteRe = /[\\\\^$*+?|[\\]().{}]/g;\n\nfunction pad(value, fill, width) {\n var sign = value < 0 ? \"-\" : \"\",\n string = (sign ? -value : value) + \"\",\n length = string.length;\n return sign + (length < width ? new Array(width - length + 1).join(fill) + string : string);\n}\n\nfunction requote(s) {\n return s.replace(requoteRe, \"\\\\$&\");\n}\n\nfunction formatRe(names) {\n return new RegExp(\"^(?:\" + names.map(requote).join(\"|\") + \")\", \"i\");\n}\n\nfunction formatLookup(names) {\n var map = {}, i = -1, n = names.length;\n while (++i < n) map[names[i].toLowerCase()] = i;\n return map;\n}\n\nfunction parseWeekdayNumberSunday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 1));\n return n ? (d.w = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekdayNumberMonday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 1));\n return n ? (d.u = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberSunday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.U = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberISO(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.V = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberMonday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.W = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseFullYear(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 4));\n return n ? (d.y = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseYear(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.y = +n[0] + (+n[0] > 68 ? 1900 : 2000), i + n[0].length) : -1;\n}\n\nfunction parseZone(d, string, i) {\n var n = /^(Z)|([+-]\\d\\d)(?::?(\\d\\d))?/.exec(string.slice(i, i + 6));\n return n ? (d.Z = n[1] ? 0 : -(n[2] + (n[3] || \"00\")), i + n[0].length) : -1;\n}\n\nfunction parseMonthNumber(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.m = n[0] - 1, i + n[0].length) : -1;\n}\n\nfunction parseDayOfMonth(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.d = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseDayOfYear(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 3));\n return n ? (d.m = 0, d.d = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseHour24(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.H = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseMinutes(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.M = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseSeconds(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.S = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseMilliseconds(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 3));\n return n ? (d.L = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseMicroseconds(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 6));\n return n ? (d.L = Math.floor(n[0] / 1000), i + n[0].length) : -1;\n}\n\nfunction parseLiteralPercent(d, string, i) {\n var n = percentRe.exec(string.slice(i, i + 1));\n return n ? i + n[0].length : -1;\n}\n\nfunction parseUnixTimestamp(d, string, i) {\n var n = numberRe.exec(string.slice(i));\n return n ? (d.Q = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseUnixTimestampSeconds(d, string, i) {\n var n = numberRe.exec(string.slice(i));\n return n ? (d.Q = (+n[0]) * 1000, i + n[0].length) : -1;\n}\n\nfunction formatDayOfMonth(d, p) {\n return pad(d.getDate(), p, 2);\n}\n\nfunction formatHour24(d, p) {\n return pad(d.getHours(), p, 2);\n}\n\nfunction formatHour12(d, p) {\n return pad(d.getHours() % 12 || 12, p, 2);\n}\n\nfunction formatDayOfYear(d, p) {\n return pad(1 + timeDay.count(timeYear(d), d), p, 3);\n}\n\nfunction formatMilliseconds(d, p) {\n return pad(d.getMilliseconds(), p, 3);\n}\n\nfunction formatMicroseconds(d, p) {\n return formatMilliseconds(d, p) + \"000\";\n}\n\nfunction formatMonthNumber(d, p) {\n return pad(d.getMonth() + 1, p, 2);\n}\n\nfunction formatMinutes(d, p) {\n return pad(d.getMinutes(), p, 2);\n}\n\nfunction formatSeconds(d, p) {\n return pad(d.getSeconds(), p, 2);\n}\n\nfunction formatWeekdayNumberMonday(d) {\n var day = d.getDay();\n return day === 0 ? 7 : day;\n}\n\nfunction formatWeekNumberSunday(d, p) {\n return pad(timeSunday.count(timeYear(d), d), p, 2);\n}\n\nfunction formatWeekNumberISO(d, p) {\n var day = d.getDay();\n d = (day >= 4 || day === 0) ? timeThursday(d) : timeThursday.ceil(d);\n return pad(timeThursday.count(timeYear(d), d) + (timeYear(d).getDay() === 4), p, 2);\n}\n\nfunction formatWeekdayNumberSunday(d) {\n return d.getDay();\n}\n\nfunction formatWeekNumberMonday(d, p) {\n return pad(timeMonday.count(timeYear(d), d), p, 2);\n}\n\nfunction formatYear(d, p) {\n return pad(d.getFullYear() % 100, p, 2);\n}\n\nfunction formatFullYear(d, p) {\n return pad(d.getFullYear() % 10000, p, 4);\n}\n\nfunction formatZone(d) {\n var z = d.getTimezoneOffset();\n return (z > 0 ? \"-\" : (z *= -1, \"+\"))\n + pad(z / 60 | 0, \"0\", 2)\n + pad(z % 60, \"0\", 2);\n}\n\nfunction formatUTCDayOfMonth(d, p) {\n return pad(d.getUTCDate(), p, 2);\n}\n\nfunction formatUTCHour24(d, p) {\n return pad(d.getUTCHours(), p, 2);\n}\n\nfunction formatUTCHour12(d, p) {\n return pad(d.getUTCHours() % 12 || 12, p, 2);\n}\n\nfunction formatUTCDayOfYear(d, p) {\n return pad(1 + utcDay.count(utcYear(d), d), p, 3);\n}\n\nfunction formatUTCMilliseconds(d, p) {\n return pad(d.getUTCMilliseconds(), p, 3);\n}\n\nfunction formatUTCMicroseconds(d, p) {\n return formatUTCMilliseconds(d, p) + \"000\";\n}\n\nfunction formatUTCMonthNumber(d, p) {\n return pad(d.getUTCMonth() + 1, p, 2);\n}\n\nfunction formatUTCMinutes(d, p) {\n return pad(d.getUTCMinutes(), p, 2);\n}\n\nfunction formatUTCSeconds(d, p) {\n return pad(d.getUTCSeconds(), p, 2);\n}\n\nfunction formatUTCWeekdayNumberMonday(d) {\n var dow = d.getUTCDay();\n return dow === 0 ? 7 : dow;\n}\n\nfunction formatUTCWeekNumberSunday(d, p) {\n return pad(utcSunday.count(utcYear(d), d), p, 2);\n}\n\nfunction formatUTCWeekNumberISO(d, p) {\n var day = d.getUTCDay();\n d = (day >= 4 || day === 0) ? utcThursday(d) : utcThursday.ceil(d);\n return pad(utcThursday.count(utcYear(d), d) + (utcYear(d).getUTCDay() === 4), p, 2);\n}\n\nfunction formatUTCWeekdayNumberSunday(d) {\n return d.getUTCDay();\n}\n\nfunction formatUTCWeekNumberMonday(d, p) {\n return pad(utcMonday.count(utcYear(d), d), p, 2);\n}\n\nfunction formatUTCYear(d, p) {\n return pad(d.getUTCFullYear() % 100, p, 2);\n}\n\nfunction formatUTCFullYear(d, p) {\n return pad(d.getUTCFullYear() % 10000, p, 4);\n}\n\nfunction formatUTCZone() {\n return \"+0000\";\n}\n\nfunction formatLiteralPercent() {\n return \"%\";\n}\n\nfunction formatUnixTimestamp(d) {\n return +d;\n}\n\nfunction formatUnixTimestampSeconds(d) {\n return Math.floor(+d / 1000);\n}\n","import formatLocale from \"./locale\";\n\nvar locale;\nexport var timeFormat;\nexport var timeParse;\nexport var utcFormat;\nexport var utcParse;\n\ndefaultLocale({\n dateTime: \"%x, %X\",\n date: \"%-m/%-d/%Y\",\n time: \"%-I:%M:%S %p\",\n periods: [\"AM\", \"PM\"],\n days: [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"],\n shortDays: [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"],\n months: [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"],\n shortMonths: [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"]\n});\n\nexport default function defaultLocale(definition) {\n locale = formatLocale(definition);\n timeFormat = locale.format;\n timeParse = locale.parse;\n utcFormat = locale.utcFormat;\n utcParse = locale.utcParse;\n return locale;\n}\n","import {utcFormat} from \"./defaultLocale\";\n\nexport var isoSpecifier = \"%Y-%m-%dT%H:%M:%S.%LZ\";\n\nfunction formatIsoNative(date) {\n return date.toISOString();\n}\n\nvar formatIso = Date.prototype.toISOString\n ? formatIsoNative\n : utcFormat(isoSpecifier);\n\nexport default formatIso;\n","import {isoSpecifier} from \"./isoFormat\";\nimport {utcParse} from \"./defaultLocale\";\n\nfunction parseIsoNative(string) {\n var date = new Date(string);\n return isNaN(date) ? null : date;\n}\n\nvar parseIso = +new Date(\"2000-01-01T00:00:00.000Z\")\n ? parseIsoNative\n : utcParse(isoSpecifier);\n\nexport default parseIso;\n","import {bisector, tickStep} from \"d3-array\";\nimport {interpolateNumber as reinterpolate} from \"d3-interpolate\";\nimport {timeYear, timeMonth, timeWeek, timeDay, timeHour, timeMinute, timeSecond, timeMillisecond} from \"d3-time\";\nimport {timeFormat} from \"d3-time-format\";\nimport {map} from \"./array\";\nimport {default as continuous, copy, deinterpolateLinear as deinterpolate} from \"./continuous\";\nimport nice from \"./nice\";\n\nvar durationSecond = 1000,\n durationMinute = durationSecond * 60,\n durationHour = durationMinute * 60,\n durationDay = durationHour * 24,\n durationWeek = durationDay * 7,\n durationMonth = durationDay * 30,\n durationYear = durationDay * 365;\n\nfunction date(t) {\n return new Date(t);\n}\n\nfunction number(t) {\n return t instanceof Date ? +t : +new Date(+t);\n}\n\nexport function calendar(year, month, week, day, hour, minute, second, millisecond, format) {\n var scale = continuous(deinterpolate, reinterpolate),\n invert = scale.invert,\n domain = scale.domain;\n\n var formatMillisecond = format(\".%L\"),\n formatSecond = format(\":%S\"),\n formatMinute = format(\"%I:%M\"),\n formatHour = format(\"%I %p\"),\n formatDay = format(\"%a %d\"),\n formatWeek = format(\"%b %d\"),\n formatMonth = format(\"%B\"),\n formatYear = format(\"%Y\");\n\n var tickIntervals = [\n [second, 1, durationSecond],\n [second, 5, 5 * durationSecond],\n [second, 15, 15 * durationSecond],\n [second, 30, 30 * durationSecond],\n [minute, 1, durationMinute],\n [minute, 5, 5 * durationMinute],\n [minute, 15, 15 * durationMinute],\n [minute, 30, 30 * durationMinute],\n [ hour, 1, durationHour ],\n [ hour, 3, 3 * durationHour ],\n [ hour, 6, 6 * durationHour ],\n [ hour, 12, 12 * durationHour ],\n [ day, 1, durationDay ],\n [ day, 2, 2 * durationDay ],\n [ week, 1, durationWeek ],\n [ month, 1, durationMonth ],\n [ month, 3, 3 * durationMonth ],\n [ year, 1, durationYear ]\n ];\n\n function tickFormat(date) {\n return (second(date) < date ? formatMillisecond\n : minute(date) < date ? formatSecond\n : hour(date) < date ? formatMinute\n : day(date) < date ? formatHour\n : month(date) < date ? (week(date) < date ? formatDay : formatWeek)\n : year(date) < date ? formatMonth\n : formatYear)(date);\n }\n\n function tickInterval(interval, start, stop, step) {\n if (interval == null) interval = 10;\n\n // If a desired tick count is specified, pick a reasonable tick interval\n // based on the extent of the domain and a rough estimate of tick size.\n // Otherwise, assume interval is already a time interval and use it.\n if (typeof interval === \"number\") {\n var target = Math.abs(stop - start) / interval,\n i = bisector(function(i) { return i[2]; }).right(tickIntervals, target);\n if (i === tickIntervals.length) {\n step = tickStep(start / durationYear, stop / durationYear, interval);\n interval = year;\n } else if (i) {\n i = tickIntervals[target / tickIntervals[i - 1][2] < tickIntervals[i][2] / target ? i - 1 : i];\n step = i[1];\n interval = i[0];\n } else {\n step = Math.max(tickStep(start, stop, interval), 1);\n interval = millisecond;\n }\n }\n\n return step == null ? interval : interval.every(step);\n }\n\n scale.invert = function(y) {\n return new Date(invert(y));\n };\n\n scale.domain = function(_) {\n return arguments.length ? domain(map.call(_, number)) : domain().map(date);\n };\n\n scale.ticks = function(interval, step) {\n var d = domain(),\n t0 = d[0],\n t1 = d[d.length - 1],\n r = t1 < t0,\n t;\n if (r) t = t0, t0 = t1, t1 = t;\n t = tickInterval(interval, t0, t1, step);\n t = t ? t.range(t0, t1 + 1) : []; // inclusive stop\n return r ? t.reverse() : t;\n };\n\n scale.tickFormat = function(count, specifier) {\n return specifier == null ? tickFormat : format(specifier);\n };\n\n scale.nice = function(interval, step) {\n var d = domain();\n return (interval = tickInterval(interval, d[0], d[d.length - 1], step))\n ? domain(nice(d, interval))\n : scale;\n };\n\n scale.copy = function() {\n return copy(scale, calendar(year, month, week, day, hour, minute, second, millisecond, format));\n };\n\n return scale;\n}\n\nexport default function() {\n return calendar(timeYear, timeMonth, timeWeek, timeDay, timeHour, timeMinute, timeSecond, timeMillisecond, timeFormat).domain([new Date(2000, 0, 1), new Date(2000, 0, 2)]);\n}\n","export default function(s) {\n return s.match(/.{6}/g).map(function(x) {\n return \"#\" + x;\n });\n}\n","import colors from \"./colors\";\n\nexport default colors(\"1f77b4ff7f0e2ca02cd627289467bd8c564be377c27f7f7fbcbd2217becf\");\n","import colors from \"./colors\";\n\nexport default colors(\"393b795254a36b6ecf9c9ede6379398ca252b5cf6bcedb9c8c6d31bd9e39e7ba52e7cb94843c39ad494ad6616be7969c7b4173a55194ce6dbdde9ed6\");\n","import colors from \"./colors\";\n\nexport default colors(\"1f77b4aec7e8ff7f0effbb782ca02c98df8ad62728ff98969467bdc5b0d58c564bc49c94e377c2f7b6d27f7f7fc7c7c7bcbd22dbdb8d17becf9edae5\");\n","import colors from \"./colors\";\n\nexport default colors(\"3182bd6baed69ecae1c6dbefe6550dfd8d3cfdae6bfdd0a231a35474c476a1d99bc7e9c0756bb19e9ac8bcbddcdadaeb636363969696bdbdbdd9d9d9\");\n","import {cubehelix} from \"d3-color\";\nimport {interpolateCubehelixLong} from \"d3-interpolate\";\n\nexport default interpolateCubehelixLong(cubehelix(300, 0.5, 0.0), cubehelix(-240, 0.5, 1.0));\n","import {cubehelix} from \"d3-color\";\nimport {interpolateCubehelixLong} from \"d3-interpolate\";\n\nexport var warm = interpolateCubehelixLong(cubehelix(-100, 0.75, 0.35), cubehelix(80, 1.50, 0.8));\n\nexport var cool = interpolateCubehelixLong(cubehelix(260, 0.75, 0.35), cubehelix(80, 1.50, 0.8));\n\nvar rainbow = cubehelix();\n\nexport default function(t) {\n if (t < 0 || t > 1) t -= Math.floor(t);\n var ts = Math.abs(t - 0.5);\n rainbow.h = 360 * t - 100;\n rainbow.s = 1.5 - 1.5 * ts;\n rainbow.l = 0.8 - 0.9 * ts;\n return rainbow + \"\";\n}\n","import colors from \"./colors\";\n\nfunction ramp(range) {\n var n = range.length;\n return function(t) {\n return range[Math.max(0, Math.min(n - 1, Math.floor(t * n)))];\n };\n}\n\nexport default ramp(colors(\"44015444025645045745055946075a46085c460a5d460b5e470d60470e6147106347116447136548146748166848176948186a481a6c481b6d481c6e481d6f481f70482071482173482374482475482576482677482878482979472a7a472c7a472d7b472e7c472f7d46307e46327e46337f463480453581453781453882443983443a83443b84433d84433e85423f854240864241864142874144874045884046883f47883f48893e49893e4a893e4c8a3d4d8a3d4e8a3c4f8a3c508b3b518b3b528b3a538b3a548c39558c39568c38588c38598c375a8c375b8d365c8d365d8d355e8d355f8d34608d34618d33628d33638d32648e32658e31668e31678e31688e30698e306a8e2f6b8e2f6c8e2e6d8e2e6e8e2e6f8e2d708e2d718e2c718e2c728e2c738e2b748e2b758e2a768e2a778e2a788e29798e297a8e297b8e287c8e287d8e277e8e277f8e27808e26818e26828e26828e25838e25848e25858e24868e24878e23888e23898e238a8d228b8d228c8d228d8d218e8d218f8d21908d21918c20928c20928c20938c1f948c1f958b1f968b1f978b1f988b1f998a1f9a8a1e9b8a1e9c891e9d891f9e891f9f881fa0881fa1881fa1871fa28720a38620a48621a58521a68522a78522a88423a98324aa8325ab8225ac8226ad8127ad8128ae8029af7f2ab07f2cb17e2db27d2eb37c2fb47c31b57b32b67a34b67935b77937b87838b9773aba763bbb753dbc743fbc7340bd7242be7144bf7046c06f48c16e4ac16d4cc26c4ec36b50c46a52c56954c56856c66758c7655ac8645cc8635ec96260ca6063cb5f65cb5e67cc5c69cd5b6ccd5a6ece5870cf5773d05675d05477d1537ad1517cd2507fd34e81d34d84d44b86d54989d5488bd6468ed64590d74393d74195d84098d83e9bd93c9dd93ba0da39a2da37a5db36a8db34aadc32addc30b0dd2fb2dd2db5de2bb8de29bade28bddf26c0df25c2df23c5e021c8e020cae11fcde11dd0e11cd2e21bd5e21ad8e219dae319dde318dfe318e2e418e5e419e7e419eae51aece51befe51cf1e51df4e61ef6e620f8e621fbe723fde725\"));\n\nexport var magma = ramp(colors(\"00000401000501010601010802010902020b02020d03030f03031204041405041606051806051a07061c08071e0907200a08220b09240c09260d0a290e0b2b100b2d110c2f120d31130d34140e36150e38160f3b180f3d19103f1a10421c10441d11471e114920114b21114e22115024125325125527125829115a2a115c2c115f2d11612f116331116533106734106936106b38106c390f6e3b0f703d0f713f0f72400f74420f75440f764510774710784910784a10794c117a4e117b4f127b51127c52137c54137d56147d57157e59157e5a167e5c167f5d177f5f187f601880621980641a80651a80671b80681c816a1c816b1d816d1d816e1e81701f81721f817320817521817621817822817922827b23827c23827e24828025828125818326818426818627818827818928818b29818c29818e2a81902a81912b81932b80942c80962c80982d80992d809b2e7f9c2e7f9e2f7fa02f7fa1307ea3307ea5317ea6317da8327daa337dab337cad347cae347bb0357bb2357bb3367ab5367ab73779b83779ba3878bc3978bd3977bf3a77c03a76c23b75c43c75c53c74c73d73c83e73ca3e72cc3f71cd4071cf4070d0416fd2426fd3436ed5446dd6456cd8456cd9466bdb476adc4869de4968df4a68e04c67e24d66e34e65e44f64e55064e75263e85362e95462ea5661eb5760ec5860ed5a5fee5b5eef5d5ef05f5ef1605df2625df2645cf3655cf4675cf4695cf56b5cf66c5cf66e5cf7705cf7725cf8745cf8765cf9785df9795df97b5dfa7d5efa7f5efa815ffb835ffb8560fb8761fc8961fc8a62fc8c63fc8e64fc9065fd9266fd9467fd9668fd9869fd9a6afd9b6bfe9d6cfe9f6dfea16efea36ffea571fea772fea973feaa74feac76feae77feb078feb27afeb47bfeb67cfeb77efeb97ffebb81febd82febf84fec185fec287fec488fec68afec88cfeca8dfecc8ffecd90fecf92fed194fed395fed597fed799fed89afdda9cfddc9efddea0fde0a1fde2a3fde3a5fde5a7fde7a9fde9aafdebacfcecaefceeb0fcf0b2fcf2b4fcf4b6fcf6b8fcf7b9fcf9bbfcfbbdfcfdbf\"));\n\nexport var inferno = ramp(colors(\"00000401000501010601010802010a02020c02020e03021004031204031405041706041907051b08051d09061f0a07220b07240c08260d08290e092b10092d110a30120a32140b34150b37160b39180c3c190c3e1b0c411c0c431e0c451f0c48210c4a230c4c240c4f260c51280b53290b552b0b572d0b592f0a5b310a5c320a5e340a5f3609613809623909633b09643d09653e0966400a67420a68440a68450a69470b6a490b6a4a0c6b4c0c6b4d0d6c4f0d6c510e6c520e6d540f6d550f6d57106e59106e5a116e5c126e5d126e5f136e61136e62146e64156e65156e67166e69166e6a176e6c186e6d186e6f196e71196e721a6e741a6e751b6e771c6d781c6d7a1d6d7c1d6d7d1e6d7f1e6c801f6c82206c84206b85216b87216b88226a8a226a8c23698d23698f24699025689225689326679526679727669827669a28659b29649d29649f2a63a02a63a22b62a32c61a52c60a62d60a82e5fa92e5eab2f5ead305dae305cb0315bb1325ab3325ab43359b63458b73557b93556ba3655bc3754bd3853bf3952c03a51c13a50c33b4fc43c4ec63d4dc73e4cc83f4bca404acb4149cc4248ce4347cf4446d04545d24644d34743d44842d54a41d74b3fd84c3ed94d3dda4e3cdb503bdd513ade5238df5337e05536e15635e25734e35933e45a31e55c30e65d2fe75e2ee8602de9612bea632aeb6429eb6628ec6726ed6925ee6a24ef6c23ef6e21f06f20f1711ff1731df2741cf3761bf37819f47918f57b17f57d15f67e14f68013f78212f78410f8850ff8870ef8890cf98b0bf98c0af98e09fa9008fa9207fa9407fb9606fb9706fb9906fb9b06fb9d07fc9f07fca108fca309fca50afca60cfca80dfcaa0ffcac11fcae12fcb014fcb216fcb418fbb61afbb81dfbba1ffbbc21fbbe23fac026fac228fac42afac62df9c72ff9c932f9cb35f8cd37f8cf3af7d13df7d340f6d543f6d746f5d949f5db4cf4dd4ff4df53f4e156f3e35af3e55df2e661f2e865f2ea69f1ec6df1ed71f1ef75f1f179f2f27df2f482f3f586f3f68af4f88ef5f992f6fa96f8fb9af9fc9dfafda1fcffa4\"));\n\nexport var plasma = ramp(colors(\"0d088710078813078916078a19068c1b068d1d068e20068f2206902406912605912805922a05932c05942e05952f059631059733059735049837049938049a3a049a3c049b3e049c3f049c41049d43039e44039e46039f48039f4903a04b03a14c02a14e02a25002a25102a35302a35502a45601a45801a45901a55b01a55c01a65e01a66001a66100a76300a76400a76600a76700a86900a86a00a86c00a86e00a86f00a87100a87201a87401a87501a87701a87801a87a02a87b02a87d03a87e03a88004a88104a78305a78405a78606a68707a68808a68a09a58b0aa58d0ba58e0ca48f0da4910ea3920fa39410a29511a19613a19814a099159f9a169f9c179e9d189d9e199da01a9ca11b9ba21d9aa31e9aa51f99a62098a72197a82296aa2395ab2494ac2694ad2793ae2892b02991b12a90b22b8fb32c8eb42e8db52f8cb6308bb7318ab83289ba3388bb3488bc3587bd3786be3885bf3984c03a83c13b82c23c81c33d80c43e7fc5407ec6417dc7427cc8437bc9447aca457acb4679cc4778cc4977cd4a76ce4b75cf4c74d04d73d14e72d24f71d35171d45270d5536fd5546ed6556dd7566cd8576bd9586ada5a6ada5b69db5c68dc5d67dd5e66de5f65de6164df6263e06363e16462e26561e26660e3685fe4695ee56a5de56b5de66c5ce76e5be76f5ae87059e97158e97257ea7457eb7556eb7655ec7754ed7953ed7a52ee7b51ef7c51ef7e50f07f4ff0804ef1814df1834cf2844bf3854bf3874af48849f48948f58b47f58c46f68d45f68f44f79044f79143f79342f89441f89540f9973ff9983ef99a3efa9b3dfa9c3cfa9e3bfb9f3afba139fba238fca338fca537fca636fca835fca934fdab33fdac33fdae32fdaf31fdb130fdb22ffdb42ffdb52efeb72dfeb82cfeba2cfebb2bfebd2afebe2afec029fdc229fdc328fdc527fdc627fdc827fdca26fdcb26fccd25fcce25fcd025fcd225fbd324fbd524fbd724fad824fada24f9dc24f9dd25f8df25f8e125f7e225f7e425f6e626f6e826f5e926f5eb27f4ed27f3ee27f3f027f2f227f1f426f1f525f0f724f0f921\"));\n","import {linearish} from \"./linear\";\n\nexport default function sequential(interpolator) {\n var x0 = 0,\n x1 = 1,\n clamp = false;\n\n function scale(x) {\n var t = (x - x0) / (x1 - x0);\n return interpolator(clamp ? Math.max(0, Math.min(1, t)) : t);\n }\n\n scale.domain = function(_) {\n return arguments.length ? (x0 = +_[0], x1 = +_[1], scale) : [x0, x1];\n };\n\n scale.clamp = function(_) {\n return arguments.length ? (clamp = !!_, scale) : clamp;\n };\n\n scale.interpolator = function(_) {\n return arguments.length ? (interpolator = _, scale) : interpolator;\n };\n\n scale.copy = function() {\n return sequential(interpolator).domain([x0, x1]).clamp(clamp);\n };\n\n return linearish(scale);\n}\n","export default function(specifier) {\n var n = specifier.length / 6 | 0, colors = new Array(n), i = 0;\n while (i < n) colors[i] = \"#\" + specifier.slice(i * 6, ++i * 6);\n return colors;\n}\n","import colors from \"../colors\";\n\nexport default colors(\"7fc97fbeaed4fdc086ffff99386cb0f0027fbf5b17666666\");\n","import colors from \"../colors\";\n\nexport default colors(\"1f77b4ff7f0e2ca02cd627289467bd8c564be377c27f7f7fbcbd2217becf\");\n","import colors from \"../colors\";\n\nexport default colors(\"1b9e77d95f027570b3e7298a66a61ee6ab02a6761d666666\");\n","import colors from \"../colors\";\n\nexport default colors(\"a6cee31f78b4b2df8a33a02cfb9a99e31a1cfdbf6fff7f00cab2d66a3d9affff99b15928\");\n","import colors from \"../colors\";\n\nexport default colors(\"fbb4aeb3cde3ccebc5decbe4fed9a6ffffcce5d8bdfddaecf2f2f2\");\n","import colors from \"../colors\";\n\nexport default colors(\"b3e2cdfdcdaccbd5e8f4cae4e6f5c9fff2aef1e2cccccccc\");\n","import colors from \"../colors\";\n\nexport default colors(\"e41a1c377eb84daf4a984ea3ff7f00ffff33a65628f781bf999999\");\n","import colors from \"../colors\";\n\nexport default colors(\"66c2a5fc8d628da0cbe78ac3a6d854ffd92fe5c494b3b3b3\");\n","import colors from \"../colors\";\n\nexport default colors(\"8dd3c7ffffb3bebadafb807280b1d3fdb462b3de69fccde5d9d9d9bc80bdccebc5ffed6f\");\n","import {interpolateRgbBasis} from \"d3-interpolate\";\n\nexport default function(scheme) {\n return interpolateRgbBasis(scheme[scheme.length - 1]);\n}\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"d8b365f5f5f55ab4ac\",\n \"a6611adfc27d80cdc1018571\",\n \"a6611adfc27df5f5f580cdc1018571\",\n \"8c510ad8b365f6e8c3c7eae55ab4ac01665e\",\n \"8c510ad8b365f6e8c3f5f5f5c7eae55ab4ac01665e\",\n \"8c510abf812ddfc27df6e8c3c7eae580cdc135978f01665e\",\n \"8c510abf812ddfc27df6e8c3f5f5f5c7eae580cdc135978f01665e\",\n \"5430058c510abf812ddfc27df6e8c3c7eae580cdc135978f01665e003c30\",\n \"5430058c510abf812ddfc27df6e8c3f5f5f5c7eae580cdc135978f01665e003c30\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"af8dc3f7f7f77fbf7b\",\n \"7b3294c2a5cfa6dba0008837\",\n \"7b3294c2a5cff7f7f7a6dba0008837\",\n \"762a83af8dc3e7d4e8d9f0d37fbf7b1b7837\",\n \"762a83af8dc3e7d4e8f7f7f7d9f0d37fbf7b1b7837\",\n \"762a839970abc2a5cfe7d4e8d9f0d3a6dba05aae611b7837\",\n \"762a839970abc2a5cfe7d4e8f7f7f7d9f0d3a6dba05aae611b7837\",\n \"40004b762a839970abc2a5cfe7d4e8d9f0d3a6dba05aae611b783700441b\",\n \"40004b762a839970abc2a5cfe7d4e8f7f7f7d9f0d3a6dba05aae611b783700441b\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"e9a3c9f7f7f7a1d76a\",\n \"d01c8bf1b6dab8e1864dac26\",\n \"d01c8bf1b6daf7f7f7b8e1864dac26\",\n \"c51b7de9a3c9fde0efe6f5d0a1d76a4d9221\",\n \"c51b7de9a3c9fde0eff7f7f7e6f5d0a1d76a4d9221\",\n \"c51b7dde77aef1b6dafde0efe6f5d0b8e1867fbc414d9221\",\n \"c51b7dde77aef1b6dafde0eff7f7f7e6f5d0b8e1867fbc414d9221\",\n \"8e0152c51b7dde77aef1b6dafde0efe6f5d0b8e1867fbc414d9221276419\",\n \"8e0152c51b7dde77aef1b6dafde0eff7f7f7e6f5d0b8e1867fbc414d9221276419\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"998ec3f7f7f7f1a340\",\n \"5e3c99b2abd2fdb863e66101\",\n \"5e3c99b2abd2f7f7f7fdb863e66101\",\n \"542788998ec3d8daebfee0b6f1a340b35806\",\n \"542788998ec3d8daebf7f7f7fee0b6f1a340b35806\",\n \"5427888073acb2abd2d8daebfee0b6fdb863e08214b35806\",\n \"5427888073acb2abd2d8daebf7f7f7fee0b6fdb863e08214b35806\",\n \"2d004b5427888073acb2abd2d8daebfee0b6fdb863e08214b358067f3b08\",\n \"2d004b5427888073acb2abd2d8daebf7f7f7fee0b6fdb863e08214b358067f3b08\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"ef8a62f7f7f767a9cf\",\n \"ca0020f4a58292c5de0571b0\",\n \"ca0020f4a582f7f7f792c5de0571b0\",\n \"b2182bef8a62fddbc7d1e5f067a9cf2166ac\",\n \"b2182bef8a62fddbc7f7f7f7d1e5f067a9cf2166ac\",\n \"b2182bd6604df4a582fddbc7d1e5f092c5de4393c32166ac\",\n \"b2182bd6604df4a582fddbc7f7f7f7d1e5f092c5de4393c32166ac\",\n \"67001fb2182bd6604df4a582fddbc7d1e5f092c5de4393c32166ac053061\",\n \"67001fb2182bd6604df4a582fddbc7f7f7f7d1e5f092c5de4393c32166ac053061\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"ef8a62ffffff999999\",\n \"ca0020f4a582bababa404040\",\n \"ca0020f4a582ffffffbababa404040\",\n \"b2182bef8a62fddbc7e0e0e09999994d4d4d\",\n \"b2182bef8a62fddbc7ffffffe0e0e09999994d4d4d\",\n \"b2182bd6604df4a582fddbc7e0e0e0bababa8787874d4d4d\",\n \"b2182bd6604df4a582fddbc7ffffffe0e0e0bababa8787874d4d4d\",\n \"67001fb2182bd6604df4a582fddbc7e0e0e0bababa8787874d4d4d1a1a1a\",\n \"67001fb2182bd6604df4a582fddbc7ffffffe0e0e0bababa8787874d4d4d1a1a1a\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"fc8d59ffffbf91bfdb\",\n \"d7191cfdae61abd9e92c7bb6\",\n \"d7191cfdae61ffffbfabd9e92c7bb6\",\n \"d73027fc8d59fee090e0f3f891bfdb4575b4\",\n \"d73027fc8d59fee090ffffbfe0f3f891bfdb4575b4\",\n \"d73027f46d43fdae61fee090e0f3f8abd9e974add14575b4\",\n \"d73027f46d43fdae61fee090ffffbfe0f3f8abd9e974add14575b4\",\n \"a50026d73027f46d43fdae61fee090e0f3f8abd9e974add14575b4313695\",\n \"a50026d73027f46d43fdae61fee090ffffbfe0f3f8abd9e974add14575b4313695\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"fc8d59ffffbf91cf60\",\n \"d7191cfdae61a6d96a1a9641\",\n \"d7191cfdae61ffffbfa6d96a1a9641\",\n \"d73027fc8d59fee08bd9ef8b91cf601a9850\",\n \"d73027fc8d59fee08bffffbfd9ef8b91cf601a9850\",\n \"d73027f46d43fdae61fee08bd9ef8ba6d96a66bd631a9850\",\n \"d73027f46d43fdae61fee08bffffbfd9ef8ba6d96a66bd631a9850\",\n \"a50026d73027f46d43fdae61fee08bd9ef8ba6d96a66bd631a9850006837\",\n \"a50026d73027f46d43fdae61fee08bffffbfd9ef8ba6d96a66bd631a9850006837\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"fc8d59ffffbf99d594\",\n \"d7191cfdae61abdda42b83ba\",\n \"d7191cfdae61ffffbfabdda42b83ba\",\n \"d53e4ffc8d59fee08be6f59899d5943288bd\",\n \"d53e4ffc8d59fee08bffffbfe6f59899d5943288bd\",\n \"d53e4ff46d43fdae61fee08be6f598abdda466c2a53288bd\",\n \"d53e4ff46d43fdae61fee08bffffbfe6f598abdda466c2a53288bd\",\n \"9e0142d53e4ff46d43fdae61fee08be6f598abdda466c2a53288bd5e4fa2\",\n \"9e0142d53e4ff46d43fdae61fee08bffffbfe6f598abdda466c2a53288bd5e4fa2\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"e5f5f999d8c92ca25f\",\n \"edf8fbb2e2e266c2a4238b45\",\n \"edf8fbb2e2e266c2a42ca25f006d2c\",\n \"edf8fbccece699d8c966c2a42ca25f006d2c\",\n \"edf8fbccece699d8c966c2a441ae76238b45005824\",\n \"f7fcfde5f5f9ccece699d8c966c2a441ae76238b45005824\",\n \"f7fcfde5f5f9ccece699d8c966c2a441ae76238b45006d2c00441b\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"e0ecf49ebcda8856a7\",\n \"edf8fbb3cde38c96c688419d\",\n \"edf8fbb3cde38c96c68856a7810f7c\",\n \"edf8fbbfd3e69ebcda8c96c68856a7810f7c\",\n \"edf8fbbfd3e69ebcda8c96c68c6bb188419d6e016b\",\n \"f7fcfde0ecf4bfd3e69ebcda8c96c68c6bb188419d6e016b\",\n \"f7fcfde0ecf4bfd3e69ebcda8c96c68c6bb188419d810f7c4d004b\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"e0f3dba8ddb543a2ca\",\n \"f0f9e8bae4bc7bccc42b8cbe\",\n \"f0f9e8bae4bc7bccc443a2ca0868ac\",\n \"f0f9e8ccebc5a8ddb57bccc443a2ca0868ac\",\n \"f0f9e8ccebc5a8ddb57bccc44eb3d32b8cbe08589e\",\n \"f7fcf0e0f3dbccebc5a8ddb57bccc44eb3d32b8cbe08589e\",\n \"f7fcf0e0f3dbccebc5a8ddb57bccc44eb3d32b8cbe0868ac084081\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"fee8c8fdbb84e34a33\",\n \"fef0d9fdcc8afc8d59d7301f\",\n \"fef0d9fdcc8afc8d59e34a33b30000\",\n \"fef0d9fdd49efdbb84fc8d59e34a33b30000\",\n \"fef0d9fdd49efdbb84fc8d59ef6548d7301f990000\",\n \"fff7ecfee8c8fdd49efdbb84fc8d59ef6548d7301f990000\",\n \"fff7ecfee8c8fdd49efdbb84fc8d59ef6548d7301fb300007f0000\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"ece2f0a6bddb1c9099\",\n \"f6eff7bdc9e167a9cf02818a\",\n \"f6eff7bdc9e167a9cf1c9099016c59\",\n \"f6eff7d0d1e6a6bddb67a9cf1c9099016c59\",\n \"f6eff7d0d1e6a6bddb67a9cf3690c002818a016450\",\n \"fff7fbece2f0d0d1e6a6bddb67a9cf3690c002818a016450\",\n \"fff7fbece2f0d0d1e6a6bddb67a9cf3690c002818a016c59014636\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"ece7f2a6bddb2b8cbe\",\n \"f1eef6bdc9e174a9cf0570b0\",\n \"f1eef6bdc9e174a9cf2b8cbe045a8d\",\n \"f1eef6d0d1e6a6bddb74a9cf2b8cbe045a8d\",\n \"f1eef6d0d1e6a6bddb74a9cf3690c00570b0034e7b\",\n \"fff7fbece7f2d0d1e6a6bddb74a9cf3690c00570b0034e7b\",\n \"fff7fbece7f2d0d1e6a6bddb74a9cf3690c00570b0045a8d023858\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"e7e1efc994c7dd1c77\",\n \"f1eef6d7b5d8df65b0ce1256\",\n \"f1eef6d7b5d8df65b0dd1c77980043\",\n \"f1eef6d4b9dac994c7df65b0dd1c77980043\",\n \"f1eef6d4b9dac994c7df65b0e7298ace125691003f\",\n \"f7f4f9e7e1efd4b9dac994c7df65b0e7298ace125691003f\",\n \"f7f4f9e7e1efd4b9dac994c7df65b0e7298ace125698004367001f\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"fde0ddfa9fb5c51b8a\",\n \"feebe2fbb4b9f768a1ae017e\",\n \"feebe2fbb4b9f768a1c51b8a7a0177\",\n \"feebe2fcc5c0fa9fb5f768a1c51b8a7a0177\",\n \"feebe2fcc5c0fa9fb5f768a1dd3497ae017e7a0177\",\n \"fff7f3fde0ddfcc5c0fa9fb5f768a1dd3497ae017e7a0177\",\n \"fff7f3fde0ddfcc5c0fa9fb5f768a1dd3497ae017e7a017749006a\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"edf8b17fcdbb2c7fb8\",\n \"ffffcca1dab441b6c4225ea8\",\n \"ffffcca1dab441b6c42c7fb8253494\",\n \"ffffccc7e9b47fcdbb41b6c42c7fb8253494\",\n \"ffffccc7e9b47fcdbb41b6c41d91c0225ea80c2c84\",\n \"ffffd9edf8b1c7e9b47fcdbb41b6c41d91c0225ea80c2c84\",\n \"ffffd9edf8b1c7e9b47fcdbb41b6c41d91c0225ea8253494081d58\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"f7fcb9addd8e31a354\",\n \"ffffccc2e69978c679238443\",\n \"ffffccc2e69978c67931a354006837\",\n \"ffffccd9f0a3addd8e78c67931a354006837\",\n \"ffffccd9f0a3addd8e78c67941ab5d238443005a32\",\n \"ffffe5f7fcb9d9f0a3addd8e78c67941ab5d238443005a32\",\n \"ffffe5f7fcb9d9f0a3addd8e78c67941ab5d238443006837004529\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"fff7bcfec44fd95f0e\",\n \"ffffd4fed98efe9929cc4c02\",\n \"ffffd4fed98efe9929d95f0e993404\",\n \"ffffd4fee391fec44ffe9929d95f0e993404\",\n \"ffffd4fee391fec44ffe9929ec7014cc4c028c2d04\",\n \"ffffe5fff7bcfee391fec44ffe9929ec7014cc4c028c2d04\",\n \"ffffe5fff7bcfee391fec44ffe9929ec7014cc4c02993404662506\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"ffeda0feb24cf03b20\",\n \"ffffb2fecc5cfd8d3ce31a1c\",\n \"ffffb2fecc5cfd8d3cf03b20bd0026\",\n \"ffffb2fed976feb24cfd8d3cf03b20bd0026\",\n \"ffffb2fed976feb24cfd8d3cfc4e2ae31a1cb10026\",\n \"ffffccffeda0fed976feb24cfd8d3cfc4e2ae31a1cb10026\",\n \"ffffccffeda0fed976feb24cfd8d3cfc4e2ae31a1cbd0026800026\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"deebf79ecae13182bd\",\n \"eff3ffbdd7e76baed62171b5\",\n \"eff3ffbdd7e76baed63182bd08519c\",\n \"eff3ffc6dbef9ecae16baed63182bd08519c\",\n \"eff3ffc6dbef9ecae16baed64292c62171b5084594\",\n \"f7fbffdeebf7c6dbef9ecae16baed64292c62171b5084594\",\n \"f7fbffdeebf7c6dbef9ecae16baed64292c62171b508519c08306b\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"e5f5e0a1d99b31a354\",\n \"edf8e9bae4b374c476238b45\",\n \"edf8e9bae4b374c47631a354006d2c\",\n \"edf8e9c7e9c0a1d99b74c47631a354006d2c\",\n \"edf8e9c7e9c0a1d99b74c47641ab5d238b45005a32\",\n \"f7fcf5e5f5e0c7e9c0a1d99b74c47641ab5d238b45005a32\",\n \"f7fcf5e5f5e0c7e9c0a1d99b74c47641ab5d238b45006d2c00441b\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"f0f0f0bdbdbd636363\",\n \"f7f7f7cccccc969696525252\",\n \"f7f7f7cccccc969696636363252525\",\n \"f7f7f7d9d9d9bdbdbd969696636363252525\",\n \"f7f7f7d9d9d9bdbdbd969696737373525252252525\",\n \"fffffff0f0f0d9d9d9bdbdbd969696737373525252252525\",\n \"fffffff0f0f0d9d9d9bdbdbd969696737373525252252525000000\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"efedf5bcbddc756bb1\",\n \"f2f0f7cbc9e29e9ac86a51a3\",\n \"f2f0f7cbc9e29e9ac8756bb154278f\",\n \"f2f0f7dadaebbcbddc9e9ac8756bb154278f\",\n \"f2f0f7dadaebbcbddc9e9ac8807dba6a51a34a1486\",\n \"fcfbfdefedf5dadaebbcbddc9e9ac8807dba6a51a34a1486\",\n \"fcfbfdefedf5dadaebbcbddc9e9ac8807dba6a51a354278f3f007d\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"fee0d2fc9272de2d26\",\n \"fee5d9fcae91fb6a4acb181d\",\n \"fee5d9fcae91fb6a4ade2d26a50f15\",\n \"fee5d9fcbba1fc9272fb6a4ade2d26a50f15\",\n \"fee5d9fcbba1fc9272fb6a4aef3b2ccb181d99000d\",\n \"fff5f0fee0d2fcbba1fc9272fb6a4aef3b2ccb181d99000d\",\n \"fff5f0fee0d2fcbba1fc9272fb6a4aef3b2ccb181da50f1567000d\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"fee6cefdae6be6550d\",\n \"feeddefdbe85fd8d3cd94701\",\n \"feeddefdbe85fd8d3ce6550da63603\",\n \"feeddefdd0a2fdae6bfd8d3ce6550da63603\",\n \"feeddefdd0a2fdae6bfd8d3cf16913d948018c2d04\",\n \"fff5ebfee6cefdd0a2fdae6bfd8d3cf16913d948018c2d04\",\n \"fff5ebfee6cefdd0a2fdae6bfd8d3cf16913d94801a636037f2704\"\n).map(colors);\n\nexport default ramp(scheme);\n","import {cubehelix} from \"d3-color\";\nimport {interpolateCubehelixLong} from \"d3-interpolate\";\n\nexport default interpolateCubehelixLong(cubehelix(300, 0.5, 0.0), cubehelix(-240, 0.5, 1.0));\n","import {cubehelix} from \"d3-color\";\nimport {interpolateCubehelixLong} from \"d3-interpolate\";\n\nexport var warm = interpolateCubehelixLong(cubehelix(-100, 0.75, 0.35), cubehelix(80, 1.50, 0.8));\n\nexport var cool = interpolateCubehelixLong(cubehelix(260, 0.75, 0.35), cubehelix(80, 1.50, 0.8));\n\nvar c = cubehelix();\n\nexport default function(t) {\n if (t < 0 || t > 1) t -= Math.floor(t);\n var ts = Math.abs(t - 0.5);\n c.h = 360 * t - 100;\n c.s = 1.5 - 1.5 * ts;\n c.l = 0.8 - 0.9 * ts;\n return c + \"\";\n}\n","import {rgb} from \"d3-color\";\n\nvar c = rgb(),\n pi_1_3 = Math.PI / 3,\n pi_2_3 = Math.PI * 2 / 3;\n\nexport default function(t) {\n var x;\n t = (0.5 - t) * Math.PI;\n c.r = 255 * (x = Math.sin(t)) * x;\n c.g = 255 * (x = Math.sin(t + pi_1_3)) * x;\n c.b = 255 * (x = Math.sin(t + pi_2_3)) * x;\n return c + \"\";\n}\n","import colors from \"../colors\";\n\nfunction ramp(range) {\n var n = range.length;\n return function(t) {\n return range[Math.max(0, Math.min(n - 1, Math.floor(t * n)))];\n };\n}\n\nexport default ramp(colors(\"44015444025645045745055946075a46085c460a5d460b5e470d60470e6147106347116447136548146748166848176948186a481a6c481b6d481c6e481d6f481f70482071482173482374482475482576482677482878482979472a7a472c7a472d7b472e7c472f7d46307e46327e46337f463480453581453781453882443983443a83443b84433d84433e85423f854240864241864142874144874045884046883f47883f48893e49893e4a893e4c8a3d4d8a3d4e8a3c4f8a3c508b3b518b3b528b3a538b3a548c39558c39568c38588c38598c375a8c375b8d365c8d365d8d355e8d355f8d34608d34618d33628d33638d32648e32658e31668e31678e31688e30698e306a8e2f6b8e2f6c8e2e6d8e2e6e8e2e6f8e2d708e2d718e2c718e2c728e2c738e2b748e2b758e2a768e2a778e2a788e29798e297a8e297b8e287c8e287d8e277e8e277f8e27808e26818e26828e26828e25838e25848e25858e24868e24878e23888e23898e238a8d228b8d228c8d228d8d218e8d218f8d21908d21918c20928c20928c20938c1f948c1f958b1f968b1f978b1f988b1f998a1f9a8a1e9b8a1e9c891e9d891f9e891f9f881fa0881fa1881fa1871fa28720a38620a48621a58521a68522a78522a88423a98324aa8325ab8225ac8226ad8127ad8128ae8029af7f2ab07f2cb17e2db27d2eb37c2fb47c31b57b32b67a34b67935b77937b87838b9773aba763bbb753dbc743fbc7340bd7242be7144bf7046c06f48c16e4ac16d4cc26c4ec36b50c46a52c56954c56856c66758c7655ac8645cc8635ec96260ca6063cb5f65cb5e67cc5c69cd5b6ccd5a6ece5870cf5773d05675d05477d1537ad1517cd2507fd34e81d34d84d44b86d54989d5488bd6468ed64590d74393d74195d84098d83e9bd93c9dd93ba0da39a2da37a5db36a8db34aadc32addc30b0dd2fb2dd2db5de2bb8de29bade28bddf26c0df25c2df23c5e021c8e020cae11fcde11dd0e11cd2e21bd5e21ad8e219dae319dde318dfe318e2e418e5e419e7e419eae51aece51befe51cf1e51df4e61ef6e620f8e621fbe723fde725\"));\n\nexport var magma = ramp(colors(\"00000401000501010601010802010902020b02020d03030f03031204041405041606051806051a07061c08071e0907200a08220b09240c09260d0a290e0b2b100b2d110c2f120d31130d34140e36150e38160f3b180f3d19103f1a10421c10441d11471e114920114b21114e22115024125325125527125829115a2a115c2c115f2d11612f116331116533106734106936106b38106c390f6e3b0f703d0f713f0f72400f74420f75440f764510774710784910784a10794c117a4e117b4f127b51127c52137c54137d56147d57157e59157e5a167e5c167f5d177f5f187f601880621980641a80651a80671b80681c816a1c816b1d816d1d816e1e81701f81721f817320817521817621817822817922827b23827c23827e24828025828125818326818426818627818827818928818b29818c29818e2a81902a81912b81932b80942c80962c80982d80992d809b2e7f9c2e7f9e2f7fa02f7fa1307ea3307ea5317ea6317da8327daa337dab337cad347cae347bb0357bb2357bb3367ab5367ab73779b83779ba3878bc3978bd3977bf3a77c03a76c23b75c43c75c53c74c73d73c83e73ca3e72cc3f71cd4071cf4070d0416fd2426fd3436ed5446dd6456cd8456cd9466bdb476adc4869de4968df4a68e04c67e24d66e34e65e44f64e55064e75263e85362e95462ea5661eb5760ec5860ed5a5fee5b5eef5d5ef05f5ef1605df2625df2645cf3655cf4675cf4695cf56b5cf66c5cf66e5cf7705cf7725cf8745cf8765cf9785df9795df97b5dfa7d5efa7f5efa815ffb835ffb8560fb8761fc8961fc8a62fc8c63fc8e64fc9065fd9266fd9467fd9668fd9869fd9a6afd9b6bfe9d6cfe9f6dfea16efea36ffea571fea772fea973feaa74feac76feae77feb078feb27afeb47bfeb67cfeb77efeb97ffebb81febd82febf84fec185fec287fec488fec68afec88cfeca8dfecc8ffecd90fecf92fed194fed395fed597fed799fed89afdda9cfddc9efddea0fde0a1fde2a3fde3a5fde5a7fde7a9fde9aafdebacfcecaefceeb0fcf0b2fcf2b4fcf4b6fcf6b8fcf7b9fcf9bbfcfbbdfcfdbf\"));\n\nexport var inferno = ramp(colors(\"00000401000501010601010802010a02020c02020e03021004031204031405041706041907051b08051d09061f0a07220b07240c08260d08290e092b10092d110a30120a32140b34150b37160b39180c3c190c3e1b0c411c0c431e0c451f0c48210c4a230c4c240c4f260c51280b53290b552b0b572d0b592f0a5b310a5c320a5e340a5f3609613809623909633b09643d09653e0966400a67420a68440a68450a69470b6a490b6a4a0c6b4c0c6b4d0d6c4f0d6c510e6c520e6d540f6d550f6d57106e59106e5a116e5c126e5d126e5f136e61136e62146e64156e65156e67166e69166e6a176e6c186e6d186e6f196e71196e721a6e741a6e751b6e771c6d781c6d7a1d6d7c1d6d7d1e6d7f1e6c801f6c82206c84206b85216b87216b88226a8a226a8c23698d23698f24699025689225689326679526679727669827669a28659b29649d29649f2a63a02a63a22b62a32c61a52c60a62d60a82e5fa92e5eab2f5ead305dae305cb0315bb1325ab3325ab43359b63458b73557b93556ba3655bc3754bd3853bf3952c03a51c13a50c33b4fc43c4ec63d4dc73e4cc83f4bca404acb4149cc4248ce4347cf4446d04545d24644d34743d44842d54a41d74b3fd84c3ed94d3dda4e3cdb503bdd513ade5238df5337e05536e15635e25734e35933e45a31e55c30e65d2fe75e2ee8602de9612bea632aeb6429eb6628ec6726ed6925ee6a24ef6c23ef6e21f06f20f1711ff1731df2741cf3761bf37819f47918f57b17f57d15f67e14f68013f78212f78410f8850ff8870ef8890cf98b0bf98c0af98e09fa9008fa9207fa9407fb9606fb9706fb9906fb9b06fb9d07fc9f07fca108fca309fca50afca60cfca80dfcaa0ffcac11fcae12fcb014fcb216fcb418fbb61afbb81dfbba1ffbbc21fbbe23fac026fac228fac42afac62df9c72ff9c932f9cb35f8cd37f8cf3af7d13df7d340f6d543f6d746f5d949f5db4cf4dd4ff4df53f4e156f3e35af3e55df2e661f2e865f2ea69f1ec6df1ed71f1ef75f1f179f2f27df2f482f3f586f3f68af4f88ef5f992f6fa96f8fb9af9fc9dfafda1fcffa4\"));\n\nexport var plasma = ramp(colors(\"0d088710078813078916078a19068c1b068d1d068e20068f2206902406912605912805922a05932c05942e05952f059631059733059735049837049938049a3a049a3c049b3e049c3f049c41049d43039e44039e46039f48039f4903a04b03a14c02a14e02a25002a25102a35302a35502a45601a45801a45901a55b01a55c01a65e01a66001a66100a76300a76400a76600a76700a86900a86a00a86c00a86e00a86f00a87100a87201a87401a87501a87701a87801a87a02a87b02a87d03a87e03a88004a88104a78305a78405a78606a68707a68808a68a09a58b0aa58d0ba58e0ca48f0da4910ea3920fa39410a29511a19613a19814a099159f9a169f9c179e9d189d9e199da01a9ca11b9ba21d9aa31e9aa51f99a62098a72197a82296aa2395ab2494ac2694ad2793ae2892b02991b12a90b22b8fb32c8eb42e8db52f8cb6308bb7318ab83289ba3388bb3488bc3587bd3786be3885bf3984c03a83c13b82c23c81c33d80c43e7fc5407ec6417dc7427cc8437bc9447aca457acb4679cc4778cc4977cd4a76ce4b75cf4c74d04d73d14e72d24f71d35171d45270d5536fd5546ed6556dd7566cd8576bd9586ada5a6ada5b69db5c68dc5d67dd5e66de5f65de6164df6263e06363e16462e26561e26660e3685fe4695ee56a5de56b5de66c5ce76e5be76f5ae87059e97158e97257ea7457eb7556eb7655ec7754ed7953ed7a52ee7b51ef7c51ef7e50f07f4ff0804ef1814df1834cf2844bf3854bf3874af48849f48948f58b47f58c46f68d45f68f44f79044f79143f79342f89441f89540f9973ff9983ef99a3efa9b3dfa9c3cfa9e3bfb9f3afba139fba238fca338fca537fca636fca835fca934fdab33fdac33fdae32fdaf31fdb130fdb22ffdb42ffdb52efeb72dfeb82cfeba2cfebb2bfebd2afebe2afec029fdc229fdc328fdc527fdc627fdc827fdca26fdcb26fccd25fcce25fcd025fcd225fbd324fbd524fbd724fad824fada24f9dc24f9dd25f8df25f8e125f7e225f7e425f6e626f6e826f5e926f5eb27f4ed27f3ee27f3f027f2f227f1f426f1f525f0f724f0f921\"));\n","export const UNIT_GLOBAL_NAMESPACE = 'app.units';\nexport const UNIT_LOCAL_NAMESPACE = 'local.units';\nexport const LAYER_LOCAL_NAMESPACE = 'local.layers';\nexport const LAYER_GLOBAL_NAMESPACE = 'app.layers';\nexport const GROUP_GLOBAL_NAMESPACE = 'app.group';\nexport const GROUP_LOCAL_NAMESPACE = 'local.group';\nexport const CANVAS_LOCAL_NAMESPACE = 'local.canvas';\nexport const CANVAS_GLOBAL_NAMESPACE = 'app.canvas';\n\n","const ReservedFields = {\n ROW_ID: '__id__'\n};\n\nexport default ReservedFields;\n","const CommonProps = {\n ACTION_INF: 'actionInf',\n ON_LAYER_DRAW: 'onLayerDraw',\n MATRIX_CREATED: 'matrixCreated'\n};\n\nexport default CommonProps;\n","export var slice = Array.prototype.slice;\n","export default function(x) {\n return x;\n}\n","import {slice} from \"./array\";\nimport identity from \"./identity\";\n\nvar top = 1,\n right = 2,\n bottom = 3,\n left = 4,\n epsilon = 1e-6;\n\nfunction translateX(x) {\n return \"translate(\" + (x + 0.5) + \",0)\";\n}\n\nfunction translateY(y) {\n return \"translate(0,\" + (y + 0.5) + \")\";\n}\n\nfunction number(scale) {\n return function(d) {\n return +scale(d);\n };\n}\n\nfunction center(scale) {\n var offset = Math.max(0, scale.bandwidth() - 1) / 2; // Adjust for 0.5px offset.\n if (scale.round()) offset = Math.round(offset);\n return function(d) {\n return +scale(d) + offset;\n };\n}\n\nfunction entering() {\n return !this.__axis;\n}\n\nfunction axis(orient, scale) {\n var tickArguments = [],\n tickValues = null,\n tickFormat = null,\n tickTransform = null,\n tickSizeInner = 6,\n tickSizeOuter = 6,\n tickPadding = 3,\n k = orient === top || orient === left ? -1 : 1,\n x = orient === left || orient === right ? \"x\" : \"y\",\n transform = orient === top || orient === bottom ? translateX : translateY;\n\n function axis(context) {\n var values = tickValues == null ? (scale.ticks ? scale.ticks.apply(scale, tickArguments) : scale.domain()) : tickValues,\n format = tickFormat == null ? (scale.tickFormat ? scale.tickFormat.apply(scale, tickArguments) : identity) : tickFormat,\n spacing = Math.max(tickSizeInner, 0) + tickPadding,\n range = scale.range(),\n range0 = +range[0] + 0.5,\n range1 = +range[range.length - 1] + 0.5,\n position = (scale.bandwidth ? center : number)(scale.copy()),\n selection = context.selection ? context.selection() : context,\n path = selection.selectAll(\".domain\").data([null]),\n tick = selection.selectAll(\".tick\").data(values, scale).order(),\n tickExit = tick.exit(),\n tickEnter = tick.enter().append(\"g\").attr(\"class\", \"tick\"),\n line = tick.select(\"line\"),\n text = tick.select(\"text\");\n\n path = path.merge(path.enter().insert(\"path\", \".tick\")\n .attr(\"class\", \"domain\")\n .attr(\"stroke\", \"#000\"));\n\n tick = tick.merge(tickEnter);\n\n line = line.merge(tickEnter.append(\"line\")\n .attr(\"stroke\", \"#000\")\n .attr(x + \"2\", k * tickSizeInner));\n\n text = text.merge(tickEnter.append(\"text\")\n .attr(\"fill\", \"#000\")\n .attr(x, k * spacing)\n .attr(\"dy\", orient === top ? \"0em\" : orient === bottom ? \"0.71em\" : \"0.32em\"))\n .style('transform', tickTransform);\n\n if (context !== selection) {\n path = path.transition(context);\n tick = tick.transition(context);\n line = line.transition(context);\n text = text.transition(context);\n\n tickExit = tickExit.transition(context)\n .attr(\"opacity\", epsilon)\n .attr(\"transform\", function(d) { return isFinite(d = position(d)) ? transform(d) : this.getAttribute(\"transform\"); });\n\n tickEnter\n .attr(\"opacity\", epsilon)\n .attr(\"transform\", function(d) { var p = this.parentNode.__axis; return transform(p && isFinite(p = p(d)) ? p : position(d)); });\n }\n\n tickExit.remove();\n\n path\n .attr(\"d\", orient === left || orient == right\n ? \"M\" + k * tickSizeOuter + \",\" + range0 + \"H0.5V\" + range1 + \"H\" + k * tickSizeOuter\n : \"M\" + range0 + \",\" + k * tickSizeOuter + \"V0.5H\" + range1 + \"V\" + k * tickSizeOuter);\n\n tick\n .attr(\"opacity\", 1)\n .attr(\"transform\", function(d) { return transform(position(d)); });\n\n line\n .attr(x + \"2\", k * tickSizeInner);\n\n text\n .attr(x, k * spacing)\n .text(format);\n\n selection.filter(entering)\n .attr(\"fill\", \"none\")\n .attr(\"font-size\", 10)\n .attr(\"font-family\", \"sans-serif\")\n .attr(\"text-anchor\", orient === right ? \"start\" : orient === left ? \"end\" : \"middle\");\n\n selection\n .each(function() { this.__axis = position; });\n }\n\n axis.scale = function(_) {\n return arguments.length ? (scale = _, axis) : scale;\n };\n\n axis.tickTransform = function(_) {\n return arguments.length ? (tickTransform = _, axis) : tickTransform;\n };\n\n axis.ticks = function() {\n return tickArguments = slice.call(arguments), axis;\n };\n\n axis.tickArguments = function(_) {\n return arguments.length ? (tickArguments = _ == null ? [] : slice.call(_), axis) : tickArguments.slice();\n };\n\n axis.tickValues = function(_) {\n return arguments.length ? (tickValues = _ == null ? null : slice.call(_), axis) : tickValues && tickValues.slice();\n };\n\n axis.tickFormat = function(_) {\n return arguments.length ? (tickFormat = _, axis) : tickFormat;\n };\n\n axis.tickSize = function(_) {\n return arguments.length ? (tickSizeInner = tickSizeOuter = +_, axis) : tickSizeInner;\n };\n\n axis.tickSizeInner = function(_) {\n return arguments.length ? (tickSizeInner = +_, axis) : tickSizeInner;\n };\n\n axis.tickSizeOuter = function(_) {\n return arguments.length ? (tickSizeOuter = +_, axis) : tickSizeOuter;\n };\n\n axis.tickPadding = function(_) {\n return arguments.length ? (tickPadding = +_, axis) : tickPadding;\n };\n\n return axis;\n}\n\nexport function axisTop(scale) {\n return axis(top, scale);\n}\n\nexport function axisRight(scale) {\n return axis(right, scale);\n}\n\nexport function axisBottom(scale) {\n return axis(bottom, scale);\n}\n\nexport function axisLeft(scale) {\n return axis(left, scale);\n}\n","var pi = Math.PI,\n tau = 2 * pi,\n epsilon = 1e-6,\n tauEpsilon = tau - epsilon;\n\nfunction Path() {\n this._x0 = this._y0 = // start of current subpath\n this._x1 = this._y1 = null; // end of current subpath\n this._ = \"\";\n}\n\nfunction path() {\n return new Path;\n}\n\nPath.prototype = path.prototype = {\n constructor: Path,\n moveTo: function(x, y) {\n this._ += \"M\" + (this._x0 = this._x1 = +x) + \",\" + (this._y0 = this._y1 = +y);\n },\n closePath: function() {\n if (this._x1 !== null) {\n this._x1 = this._x0, this._y1 = this._y0;\n this._ += \"Z\";\n }\n },\n lineTo: function(x, y) {\n this._ += \"L\" + (this._x1 = +x) + \",\" + (this._y1 = +y);\n },\n quadraticCurveTo: function(x1, y1, x, y) {\n this._ += \"Q\" + (+x1) + \",\" + (+y1) + \",\" + (this._x1 = +x) + \",\" + (this._y1 = +y);\n },\n bezierCurveTo: function(x1, y1, x2, y2, x, y) {\n this._ += \"C\" + (+x1) + \",\" + (+y1) + \",\" + (+x2) + \",\" + (+y2) + \",\" + (this._x1 = +x) + \",\" + (this._y1 = +y);\n },\n arcTo: function(x1, y1, x2, y2, r) {\n x1 = +x1, y1 = +y1, x2 = +x2, y2 = +y2, r = +r;\n var x0 = this._x1,\n y0 = this._y1,\n x21 = x2 - x1,\n y21 = y2 - y1,\n x01 = x0 - x1,\n y01 = y0 - y1,\n l01_2 = x01 * x01 + y01 * y01;\n\n // Is the radius negative? Error.\n if (r < 0) throw new Error(\"negative radius: \" + r);\n\n // Is this path empty? Move to (x1,y1).\n if (this._x1 === null) {\n this._ += \"M\" + (this._x1 = x1) + \",\" + (this._y1 = y1);\n }\n\n // Or, is (x1,y1) coincident with (x0,y0)? Do nothing.\n else if (!(l01_2 > epsilon));\n\n // Or, are (x0,y0), (x1,y1) and (x2,y2) collinear?\n // Equivalently, is (x1,y1) coincident with (x2,y2)?\n // Or, is the radius zero? Line to (x1,y1).\n else if (!(Math.abs(y01 * x21 - y21 * x01) > epsilon) || !r) {\n this._ += \"L\" + (this._x1 = x1) + \",\" + (this._y1 = y1);\n }\n\n // Otherwise, draw an arc!\n else {\n var x20 = x2 - x0,\n y20 = y2 - y0,\n l21_2 = x21 * x21 + y21 * y21,\n l20_2 = x20 * x20 + y20 * y20,\n l21 = Math.sqrt(l21_2),\n l01 = Math.sqrt(l01_2),\n l = r * Math.tan((pi - Math.acos((l21_2 + l01_2 - l20_2) / (2 * l21 * l01))) / 2),\n t01 = l / l01,\n t21 = l / l21;\n\n // If the start tangent is not coincident with (x0,y0), line to.\n if (Math.abs(t01 - 1) > epsilon) {\n this._ += \"L\" + (x1 + t01 * x01) + \",\" + (y1 + t01 * y01);\n }\n\n this._ += \"A\" + r + \",\" + r + \",0,0,\" + (+(y01 * x20 > x01 * y20)) + \",\" + (this._x1 = x1 + t21 * x21) + \",\" + (this._y1 = y1 + t21 * y21);\n }\n },\n arc: function(x, y, r, a0, a1, ccw) {\n x = +x, y = +y, r = +r;\n var dx = r * Math.cos(a0),\n dy = r * Math.sin(a0),\n x0 = x + dx,\n y0 = y + dy,\n cw = 1 ^ ccw,\n da = ccw ? a0 - a1 : a1 - a0;\n\n // Is the radius negative? Error.\n if (r < 0) throw new Error(\"negative radius: \" + r);\n\n // Is this path empty? Move to (x0,y0).\n if (this._x1 === null) {\n this._ += \"M\" + x0 + \",\" + y0;\n }\n\n // Or, is (x0,y0) not coincident with the previous point? Line to (x0,y0).\n else if (Math.abs(this._x1 - x0) > epsilon || Math.abs(this._y1 - y0) > epsilon) {\n this._ += \"L\" + x0 + \",\" + y0;\n }\n\n // Is this arc empty? We’re done.\n if (!r) return;\n\n // Does the angle go the wrong way? Flip the direction.\n if (da < 0) da = da % tau + tau;\n\n // Is this a complete circle? Draw two arcs to complete the circle.\n if (da > tauEpsilon) {\n this._ += \"A\" + r + \",\" + r + \",0,1,\" + cw + \",\" + (x - dx) + \",\" + (y - dy) + \"A\" + r + \",\" + r + \",0,1,\" + cw + \",\" + (this._x1 = x0) + \",\" + (this._y1 = y0);\n }\n\n // Is this arc non-empty? Draw an arc!\n else if (da > epsilon) {\n this._ += \"A\" + r + \",\" + r + \",0,\" + (+(da >= pi)) + \",\" + cw + \",\" + (this._x1 = x + r * Math.cos(a1)) + \",\" + (this._y1 = y + r * Math.sin(a1));\n }\n },\n rect: function(x, y, w, h) {\n this._ += \"M\" + (this._x0 = this._x1 = +x) + \",\" + (this._y0 = this._y1 = +y) + \"h\" + (+w) + \"v\" + (+h) + \"h\" + (-w) + \"Z\";\n },\n toString: function() {\n return this._;\n }\n};\n\nexport default path;\n","export default function(x) {\n return function constant() {\n return x;\n };\n}\n","export var abs = Math.abs;\nexport var atan2 = Math.atan2;\nexport var cos = Math.cos;\nexport var max = Math.max;\nexport var min = Math.min;\nexport var sin = Math.sin;\nexport var sqrt = Math.sqrt;\n\nexport var epsilon = 1e-12;\nexport var pi = Math.PI;\nexport var halfPi = pi / 2;\nexport var tau = 2 * pi;\n\nexport function acos(x) {\n return x > 1 ? 0 : x < -1 ? pi : Math.acos(x);\n}\n\nexport function asin(x) {\n return x >= 1 ? halfPi : x <= -1 ? -halfPi : Math.asin(x);\n}\n","import {path} from \"d3-path\";\nimport constant from \"./constant\";\nimport {abs, acos, asin, atan2, cos, epsilon, halfPi, max, min, pi, sin, sqrt, tau} from \"./math\";\n\nfunction arcInnerRadius(d) {\n return d.innerRadius;\n}\n\nfunction arcOuterRadius(d) {\n return d.outerRadius;\n}\n\nfunction arcStartAngle(d) {\n return d.startAngle;\n}\n\nfunction arcEndAngle(d) {\n return d.endAngle;\n}\n\nfunction arcPadAngle(d) {\n return d && d.padAngle; // Note: optional!\n}\n\nfunction intersect(x0, y0, x1, y1, x2, y2, x3, y3) {\n var x10 = x1 - x0, y10 = y1 - y0,\n x32 = x3 - x2, y32 = y3 - y2,\n t = y32 * x10 - x32 * y10;\n if (t * t < epsilon) return;\n t = (x32 * (y0 - y2) - y32 * (x0 - x2)) / t;\n return [x0 + t * x10, y0 + t * y10];\n}\n\n// Compute perpendicular offset line of length rc.\n// http://mathworld.wolfram.com/Circle-LineIntersection.html\nfunction cornerTangents(x0, y0, x1, y1, r1, rc, cw) {\n var x01 = x0 - x1,\n y01 = y0 - y1,\n lo = (cw ? rc : -rc) / sqrt(x01 * x01 + y01 * y01),\n ox = lo * y01,\n oy = -lo * x01,\n x11 = x0 + ox,\n y11 = y0 + oy,\n x10 = x1 + ox,\n y10 = y1 + oy,\n x00 = (x11 + x10) / 2,\n y00 = (y11 + y10) / 2,\n dx = x10 - x11,\n dy = y10 - y11,\n d2 = dx * dx + dy * dy,\n r = r1 - rc,\n D = x11 * y10 - x10 * y11,\n d = (dy < 0 ? -1 : 1) * sqrt(max(0, r * r * d2 - D * D)),\n cx0 = (D * dy - dx * d) / d2,\n cy0 = (-D * dx - dy * d) / d2,\n cx1 = (D * dy + dx * d) / d2,\n cy1 = (-D * dx + dy * d) / d2,\n dx0 = cx0 - x00,\n dy0 = cy0 - y00,\n dx1 = cx1 - x00,\n dy1 = cy1 - y00;\n\n // Pick the closer of the two intersection points.\n // TODO Is there a faster way to determine which intersection to use?\n if (dx0 * dx0 + dy0 * dy0 > dx1 * dx1 + dy1 * dy1) cx0 = cx1, cy0 = cy1;\n\n return {\n cx: cx0,\n cy: cy0,\n x01: -ox,\n y01: -oy,\n x11: cx0 * (r1 / r - 1),\n y11: cy0 * (r1 / r - 1)\n };\n}\n\nexport default function() {\n var innerRadius = arcInnerRadius,\n outerRadius = arcOuterRadius,\n cornerRadius = constant(0),\n padRadius = null,\n startAngle = arcStartAngle,\n endAngle = arcEndAngle,\n padAngle = arcPadAngle,\n context = null;\n\n function arc() {\n var buffer,\n r,\n r0 = +innerRadius.apply(this, arguments),\n r1 = +outerRadius.apply(this, arguments),\n a0 = startAngle.apply(this, arguments) - halfPi,\n a1 = endAngle.apply(this, arguments) - halfPi,\n da = abs(a1 - a0),\n cw = a1 > a0;\n\n if (!context) context = buffer = path();\n\n // Ensure that the outer radius is always larger than the inner radius.\n if (r1 < r0) r = r1, r1 = r0, r0 = r;\n\n // Is it a point?\n if (!(r1 > epsilon)) context.moveTo(0, 0);\n\n // Or is it a circle or annulus?\n else if (da > tau - epsilon) {\n context.moveTo(r1 * cos(a0), r1 * sin(a0));\n context.arc(0, 0, r1, a0, a1, !cw);\n if (r0 > epsilon) {\n context.moveTo(r0 * cos(a1), r0 * sin(a1));\n context.arc(0, 0, r0, a1, a0, cw);\n }\n }\n\n // Or is it a circular or annular sector?\n else {\n var a01 = a0,\n a11 = a1,\n a00 = a0,\n a10 = a1,\n da0 = da,\n da1 = da,\n ap = padAngle.apply(this, arguments) / 2,\n rp = (ap > epsilon) && (padRadius ? +padRadius.apply(this, arguments) : sqrt(r0 * r0 + r1 * r1)),\n rc = min(abs(r1 - r0) / 2, +cornerRadius.apply(this, arguments)),\n rc0 = rc,\n rc1 = rc,\n t0,\n t1;\n\n // Apply padding? Note that since r1 ≥ r0, da1 ≥ da0.\n if (rp > epsilon) {\n var p0 = asin(rp / r0 * sin(ap)),\n p1 = asin(rp / r1 * sin(ap));\n if ((da0 -= p0 * 2) > epsilon) p0 *= (cw ? 1 : -1), a00 += p0, a10 -= p0;\n else da0 = 0, a00 = a10 = (a0 + a1) / 2;\n if ((da1 -= p1 * 2) > epsilon) p1 *= (cw ? 1 : -1), a01 += p1, a11 -= p1;\n else da1 = 0, a01 = a11 = (a0 + a1) / 2;\n }\n\n var x01 = r1 * cos(a01),\n y01 = r1 * sin(a01),\n x10 = r0 * cos(a10),\n y10 = r0 * sin(a10);\n\n // Apply rounded corners?\n if (rc > epsilon) {\n var x11 = r1 * cos(a11),\n y11 = r1 * sin(a11),\n x00 = r0 * cos(a00),\n y00 = r0 * sin(a00),\n oc;\n\n // Restrict the corner radius according to the sector angle.\n if (da <= tau - epsilon && (oc = intersect(x01, y01, x00, y00, x11, y11, x10, y10))) {\n var ax = x01 - oc[0],\n ay = y01 - oc[1],\n bx = x11 - oc[0],\n by = y11 - oc[1],\n kc = 1 / sin(acos((ax * bx + ay * by) / (sqrt(ax * ax + ay * ay) * sqrt(bx * bx + by * by))) / 2),\n lc = sqrt(oc[0] * oc[0] + oc[1] * oc[1]);\n rc0 = min(rc, (r0 - lc) / (kc - 1));\n rc1 = min(rc, (r1 - lc) / (kc + 1));\n }\n }\n\n // Is the sector collapsed to a line?\n if (!(da1 > epsilon)) context.moveTo(x01, y01);\n\n // Does the sector’s outer ring have rounded corners?\n else if (rc1 > epsilon) {\n t0 = cornerTangents(x00, y00, x01, y01, r1, rc1, cw);\n t1 = cornerTangents(x11, y11, x10, y10, r1, rc1, cw);\n\n context.moveTo(t0.cx + t0.x01, t0.cy + t0.y01);\n\n // Have the corners merged?\n if (rc1 < rc) context.arc(t0.cx, t0.cy, rc1, atan2(t0.y01, t0.x01), atan2(t1.y01, t1.x01), !cw);\n\n // Otherwise, draw the two corners and the ring.\n else {\n context.arc(t0.cx, t0.cy, rc1, atan2(t0.y01, t0.x01), atan2(t0.y11, t0.x11), !cw);\n context.arc(0, 0, r1, atan2(t0.cy + t0.y11, t0.cx + t0.x11), atan2(t1.cy + t1.y11, t1.cx + t1.x11), !cw);\n context.arc(t1.cx, t1.cy, rc1, atan2(t1.y11, t1.x11), atan2(t1.y01, t1.x01), !cw);\n }\n }\n\n // Or is the outer ring just a circular arc?\n else context.moveTo(x01, y01), context.arc(0, 0, r1, a01, a11, !cw);\n\n // Is there no inner ring, and it’s a circular sector?\n // Or perhaps it’s an annular sector collapsed due to padding?\n if (!(r0 > epsilon) || !(da0 > epsilon)) context.lineTo(x10, y10);\n\n // Does the sector’s inner ring (or point) have rounded corners?\n else if (rc0 > epsilon) {\n t0 = cornerTangents(x10, y10, x11, y11, r0, -rc0, cw);\n t1 = cornerTangents(x01, y01, x00, y00, r0, -rc0, cw);\n\n context.lineTo(t0.cx + t0.x01, t0.cy + t0.y01);\n\n // Have the corners merged?\n if (rc0 < rc) context.arc(t0.cx, t0.cy, rc0, atan2(t0.y01, t0.x01), atan2(t1.y01, t1.x01), !cw);\n\n // Otherwise, draw the two corners and the ring.\n else {\n context.arc(t0.cx, t0.cy, rc0, atan2(t0.y01, t0.x01), atan2(t0.y11, t0.x11), !cw);\n context.arc(0, 0, r0, atan2(t0.cy + t0.y11, t0.cx + t0.x11), atan2(t1.cy + t1.y11, t1.cx + t1.x11), cw);\n context.arc(t1.cx, t1.cy, rc0, atan2(t1.y11, t1.x11), atan2(t1.y01, t1.x01), !cw);\n }\n }\n\n // Or is the inner ring just a circular arc?\n else context.arc(0, 0, r0, a10, a00, cw);\n }\n\n context.closePath();\n\n if (buffer) return context = null, buffer + \"\" || null;\n }\n\n arc.centroid = function() {\n var r = (+innerRadius.apply(this, arguments) + +outerRadius.apply(this, arguments)) / 2,\n a = (+startAngle.apply(this, arguments) + +endAngle.apply(this, arguments)) / 2 - pi / 2;\n return [cos(a) * r, sin(a) * r];\n };\n\n arc.innerRadius = function(_) {\n return arguments.length ? (innerRadius = typeof _ === \"function\" ? _ : constant(+_), arc) : innerRadius;\n };\n\n arc.outerRadius = function(_) {\n return arguments.length ? (outerRadius = typeof _ === \"function\" ? _ : constant(+_), arc) : outerRadius;\n };\n\n arc.cornerRadius = function(_) {\n return arguments.length ? (cornerRadius = typeof _ === \"function\" ? _ : constant(+_), arc) : cornerRadius;\n };\n\n arc.padRadius = function(_) {\n return arguments.length ? (padRadius = _ == null ? null : typeof _ === \"function\" ? _ : constant(+_), arc) : padRadius;\n };\n\n arc.startAngle = function(_) {\n return arguments.length ? (startAngle = typeof _ === \"function\" ? _ : constant(+_), arc) : startAngle;\n };\n\n arc.endAngle = function(_) {\n return arguments.length ? (endAngle = typeof _ === \"function\" ? _ : constant(+_), arc) : endAngle;\n };\n\n arc.padAngle = function(_) {\n return arguments.length ? (padAngle = typeof _ === \"function\" ? _ : constant(+_), arc) : padAngle;\n };\n\n arc.context = function(_) {\n return arguments.length ? ((context = _ == null ? null : _), arc) : context;\n };\n\n return arc;\n}\n","function Linear(context) {\n this._context = context;\n}\n\nLinear.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; // proceed\n default: this._context.lineTo(x, y); break;\n }\n }\n};\n\nexport default function(context) {\n return new Linear(context);\n}\n","export function x(p) {\n return p[0];\n}\n\nexport function y(p) {\n return p[1];\n}\n","import {path} from \"d3-path\";\nimport constant from \"./constant\";\nimport curveLinear from \"./curve/linear\";\nimport {x as pointX, y as pointY} from \"./point\";\n\nexport default function() {\n var x = pointX,\n y = pointY,\n defined = constant(true),\n context = null,\n curve = curveLinear,\n output = null;\n\n function line(data) {\n var i,\n n = data.length,\n d,\n defined0 = false,\n buffer;\n\n if (context == null) output = curve(buffer = path());\n\n for (i = 0; i <= n; ++i) {\n if (!(i < n && defined(d = data[i], i, data)) === defined0) {\n if (defined0 = !defined0) output.lineStart();\n else output.lineEnd();\n }\n if (defined0) output.point(+x(d, i, data), +y(d, i, data));\n }\n\n if (buffer) return output = null, buffer + \"\" || null;\n }\n\n line.x = function(_) {\n return arguments.length ? (x = typeof _ === \"function\" ? _ : constant(+_), line) : x;\n };\n\n line.y = function(_) {\n return arguments.length ? (y = typeof _ === \"function\" ? _ : constant(+_), line) : y;\n };\n\n line.defined = function(_) {\n return arguments.length ? (defined = typeof _ === \"function\" ? _ : constant(!!_), line) : defined;\n };\n\n line.curve = function(_) {\n return arguments.length ? (curve = _, context != null && (output = curve(context)), line) : curve;\n };\n\n line.context = function(_) {\n return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), line) : context;\n };\n\n return line;\n}\n","import {path} from \"d3-path\";\nimport constant from \"./constant\";\nimport curveLinear from \"./curve/linear\";\nimport line from \"./line\";\nimport {x as pointX, y as pointY} from \"./point\";\n\nexport default function() {\n var x0 = pointX,\n x1 = null,\n y0 = constant(0),\n y1 = pointY,\n defined = constant(true),\n context = null,\n curve = curveLinear,\n output = null;\n\n function area(data) {\n var i,\n j,\n k,\n n = data.length,\n d,\n defined0 = false,\n buffer,\n x0z = new Array(n),\n y0z = new Array(n);\n\n if (context == null) output = curve(buffer = path());\n\n for (i = 0; i <= n; ++i) {\n if (!(i < n && defined(d = data[i], i, data)) === defined0) {\n if (defined0 = !defined0) {\n j = i;\n output.areaStart();\n output.lineStart();\n } else {\n output.lineEnd();\n output.lineStart();\n for (k = i - 1; k >= j; --k) {\n output.point(x0z[k], y0z[k]);\n }\n output.lineEnd();\n output.areaEnd();\n }\n }\n if (defined0) {\n x0z[i] = +x0(d, i, data), y0z[i] = +y0(d, i, data);\n output.point(x1 ? +x1(d, i, data) : x0z[i], y1 ? +y1(d, i, data) : y0z[i]);\n }\n }\n\n if (buffer) return output = null, buffer + \"\" || null;\n }\n\n function arealine() {\n return line().defined(defined).curve(curve).context(context);\n }\n\n area.x = function(_) {\n return arguments.length ? (x0 = typeof _ === \"function\" ? _ : constant(+_), x1 = null, area) : x0;\n };\n\n area.x0 = function(_) {\n return arguments.length ? (x0 = typeof _ === \"function\" ? _ : constant(+_), area) : x0;\n };\n\n area.x1 = function(_) {\n return arguments.length ? (x1 = _ == null ? null : typeof _ === \"function\" ? _ : constant(+_), area) : x1;\n };\n\n area.y = function(_) {\n return arguments.length ? (y0 = typeof _ === \"function\" ? _ : constant(+_), y1 = null, area) : y0;\n };\n\n area.y0 = function(_) {\n return arguments.length ? (y0 = typeof _ === \"function\" ? _ : constant(+_), area) : y0;\n };\n\n area.y1 = function(_) {\n return arguments.length ? (y1 = _ == null ? null : typeof _ === \"function\" ? _ : constant(+_), area) : y1;\n };\n\n area.lineX0 =\n area.lineY0 = function() {\n return arealine().x(x0).y(y0);\n };\n\n area.lineY1 = function() {\n return arealine().x(x0).y(y1);\n };\n\n area.lineX1 = function() {\n return arealine().x(x1).y(y0);\n };\n\n area.defined = function(_) {\n return arguments.length ? (defined = typeof _ === \"function\" ? _ : constant(!!_), area) : defined;\n };\n\n area.curve = function(_) {\n return arguments.length ? (curve = _, context != null && (output = curve(context)), area) : curve;\n };\n\n area.context = function(_) {\n return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), area) : context;\n };\n\n return area;\n}\n","export default function(a, b) {\n return b < a ? -1 : b > a ? 1 : b >= a ? 0 : NaN;\n}\n","export default function(d) {\n return d;\n}\n","import curveLinear from \"./linear\";\n\nexport var curveRadialLinear = curveRadial(curveLinear);\n\nfunction Radial(curve) {\n this._curve = curve;\n}\n\nRadial.prototype = {\n areaStart: function() {\n this._curve.areaStart();\n },\n areaEnd: function() {\n this._curve.areaEnd();\n },\n lineStart: function() {\n this._curve.lineStart();\n },\n lineEnd: function() {\n this._curve.lineEnd();\n },\n point: function(a, r) {\n this._curve.point(r * Math.sin(a), r * -Math.cos(a));\n }\n};\n\nexport default function curveRadial(curve) {\n\n function radial(context) {\n return new Radial(curve(context));\n }\n\n radial._curve = curve;\n\n return radial;\n}\n","import curveRadial, {curveRadialLinear} from \"./curve/radial\";\nimport line from \"./line\";\n\nexport function lineRadial(l) {\n var c = l.curve;\n\n l.angle = l.x, delete l.x;\n l.radius = l.y, delete l.y;\n\n l.curve = function(_) {\n return arguments.length ? c(curveRadial(_)) : c()._curve;\n };\n\n return l;\n}\n\nexport default function() {\n return lineRadial(line().curve(curveRadialLinear));\n}\n","export var slice = Array.prototype.slice;\n","import {pi, tau} from \"../math\";\n\nexport default {\n draw: function(context, size) {\n var r = Math.sqrt(size / pi);\n context.moveTo(r, 0);\n context.arc(0, 0, r, 0, tau);\n }\n};\n","export default {\n draw: function(context, size) {\n var r = Math.sqrt(size / 5) / 2;\n context.moveTo(-3 * r, -r);\n context.lineTo(-r, -r);\n context.lineTo(-r, -3 * r);\n context.lineTo(r, -3 * r);\n context.lineTo(r, -r);\n context.lineTo(3 * r, -r);\n context.lineTo(3 * r, r);\n context.lineTo(r, r);\n context.lineTo(r, 3 * r);\n context.lineTo(-r, 3 * r);\n context.lineTo(-r, r);\n context.lineTo(-3 * r, r);\n context.closePath();\n }\n};\n","var tan30 = Math.sqrt(1 / 3),\n tan30_2 = tan30 * 2;\n\nexport default {\n draw: function(context, size) {\n var y = Math.sqrt(size / tan30_2),\n x = y * tan30;\n context.moveTo(0, -y);\n context.lineTo(x, 0);\n context.lineTo(0, y);\n context.lineTo(-x, 0);\n context.closePath();\n }\n};\n","import {pi, tau} from \"../math\";\n\nvar ka = 0.89081309152928522810,\n kr = Math.sin(pi / 10) / Math.sin(7 * pi / 10),\n kx = Math.sin(tau / 10) * kr,\n ky = -Math.cos(tau / 10) * kr;\n\nexport default {\n draw: function(context, size) {\n var r = Math.sqrt(size * ka),\n x = kx * r,\n y = ky * r;\n context.moveTo(0, -r);\n context.lineTo(x, y);\n for (var i = 1; i < 5; ++i) {\n var a = tau * i / 5,\n c = Math.cos(a),\n s = Math.sin(a);\n context.lineTo(s * r, -c * r);\n context.lineTo(c * x - s * y, s * x + c * y);\n }\n context.closePath();\n }\n};\n","export default {\n draw: function(context, size) {\n var w = Math.sqrt(size),\n x = -w / 2;\n context.rect(x, x, w, w);\n }\n};\n","var sqrt3 = Math.sqrt(3);\n\nexport default {\n draw: function(context, size) {\n var y = -Math.sqrt(size / (sqrt3 * 3));\n context.moveTo(0, y * 2);\n context.lineTo(-sqrt3 * y, -y);\n context.lineTo(sqrt3 * y, -y);\n context.closePath();\n }\n};\n","var c = -0.5,\n s = Math.sqrt(3) / 2,\n k = 1 / Math.sqrt(12),\n a = (k / 2 + 1) * 3;\n\nexport default {\n draw: function(context, size) {\n var r = Math.sqrt(size / a),\n x0 = r / 2,\n y0 = r * k,\n x1 = x0,\n y1 = r * k + r,\n x2 = -x1,\n y2 = y1;\n context.moveTo(x0, y0);\n context.lineTo(x1, y1);\n context.lineTo(x2, y2);\n context.lineTo(c * x0 - s * y0, s * x0 + c * y0);\n context.lineTo(c * x1 - s * y1, s * x1 + c * y1);\n context.lineTo(c * x2 - s * y2, s * x2 + c * y2);\n context.lineTo(c * x0 + s * y0, c * y0 - s * x0);\n context.lineTo(c * x1 + s * y1, c * y1 - s * x1);\n context.lineTo(c * x2 + s * y2, c * y2 - s * x2);\n context.closePath();\n }\n};\n","export default function() {}\n","export function point(that, x, y) {\n that._context.bezierCurveTo(\n (2 * that._x0 + that._x1) / 3,\n (2 * that._y0 + that._y1) / 3,\n (that._x0 + 2 * that._x1) / 3,\n (that._y0 + 2 * that._y1) / 3,\n (that._x0 + 4 * that._x1 + x) / 6,\n (that._y0 + 4 * that._y1 + y) / 6\n );\n}\n\nexport function Basis(context) {\n this._context = context;\n}\n\nBasis.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 =\n this._y0 = this._y1 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 3: point(this, this._x1, this._y1); // proceed\n case 2: this._context.lineTo(this._x1, this._y1); break;\n }\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; this._context.lineTo((5 * this._x0 + this._x1) / 6, (5 * this._y0 + this._y1) / 6); // proceed\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = x;\n this._y0 = this._y1, this._y1 = y;\n }\n};\n\nexport default function(context) {\n return new Basis(context);\n}\n","import noop from \"../noop\";\nimport {point} from \"./basis\";\n\nfunction BasisClosed(context) {\n this._context = context;\n}\n\nBasisClosed.prototype = {\n areaStart: noop,\n areaEnd: noop,\n lineStart: function() {\n this._x0 = this._x1 = this._x2 = this._x3 = this._x4 =\n this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 1: {\n this._context.moveTo(this._x2, this._y2);\n this._context.closePath();\n break;\n }\n case 2: {\n this._context.moveTo((this._x2 + 2 * this._x3) / 3, (this._y2 + 2 * this._y3) / 3);\n this._context.lineTo((this._x3 + 2 * this._x2) / 3, (this._y3 + 2 * this._y2) / 3);\n this._context.closePath();\n break;\n }\n case 3: {\n this.point(this._x2, this._y2);\n this.point(this._x3, this._y3);\n this.point(this._x4, this._y4);\n break;\n }\n }\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._x2 = x, this._y2 = y; break;\n case 1: this._point = 2; this._x3 = x, this._y3 = y; break;\n case 2: this._point = 3; this._x4 = x, this._y4 = y; this._context.moveTo((this._x0 + 4 * this._x1 + x) / 6, (this._y0 + 4 * this._y1 + y) / 6); break;\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = x;\n this._y0 = this._y1, this._y1 = y;\n }\n};\n\nexport default function(context) {\n return new BasisClosed(context);\n}\n","import {point} from \"./basis\";\n\nfunction BasisOpen(context) {\n this._context = context;\n}\n\nBasisOpen.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 =\n this._y0 = this._y1 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; var x0 = (this._x0 + 4 * this._x1 + x) / 6, y0 = (this._y0 + 4 * this._y1 + y) / 6; this._line ? this._context.lineTo(x0, y0) : this._context.moveTo(x0, y0); break;\n case 3: this._point = 4; // proceed\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = x;\n this._y0 = this._y1, this._y1 = y;\n }\n};\n\nexport default function(context) {\n return new BasisOpen(context);\n}\n","import {Basis} from \"./basis\";\n\nfunction Bundle(context, beta) {\n this._basis = new Basis(context);\n this._beta = beta;\n}\n\nBundle.prototype = {\n lineStart: function() {\n this._x = [];\n this._y = [];\n this._basis.lineStart();\n },\n lineEnd: function() {\n var x = this._x,\n y = this._y,\n j = x.length - 1;\n\n if (j > 0) {\n var x0 = x[0],\n y0 = y[0],\n dx = x[j] - x0,\n dy = y[j] - y0,\n i = -1,\n t;\n\n while (++i <= j) {\n t = i / j;\n this._basis.point(\n this._beta * x[i] + (1 - this._beta) * (x0 + t * dx),\n this._beta * y[i] + (1 - this._beta) * (y0 + t * dy)\n );\n }\n }\n\n this._x = this._y = null;\n this._basis.lineEnd();\n },\n point: function(x, y) {\n this._x.push(+x);\n this._y.push(+y);\n }\n};\n\nexport default (function custom(beta) {\n\n function bundle(context) {\n return beta === 1 ? new Basis(context) : new Bundle(context, beta);\n }\n\n bundle.beta = function(beta) {\n return custom(+beta);\n };\n\n return bundle;\n})(0.85);\n","export function point(that, x, y) {\n that._context.bezierCurveTo(\n that._x1 + that._k * (that._x2 - that._x0),\n that._y1 + that._k * (that._y2 - that._y0),\n that._x2 + that._k * (that._x1 - x),\n that._y2 + that._k * (that._y1 - y),\n that._x2,\n that._y2\n );\n}\n\nexport function Cardinal(context, tension) {\n this._context = context;\n this._k = (1 - tension) / 6;\n}\n\nCardinal.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 = this._x2 =\n this._y0 = this._y1 = this._y2 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 2: this._context.lineTo(this._x2, this._y2); break;\n case 3: point(this, this._x1, this._y1); break;\n }\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; this._x1 = x, this._y1 = y; break;\n case 2: this._point = 3; // proceed\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(tension) {\n\n function cardinal(context) {\n return new Cardinal(context, tension);\n }\n\n cardinal.tension = function(tension) {\n return custom(+tension);\n };\n\n return cardinal;\n})(0);\n","import noop from \"../noop\";\nimport {point} from \"./cardinal\";\n\nexport function CardinalClosed(context, tension) {\n this._context = context;\n this._k = (1 - tension) / 6;\n}\n\nCardinalClosed.prototype = {\n areaStart: noop,\n areaEnd: noop,\n lineStart: function() {\n this._x0 = this._x1 = this._x2 = this._x3 = this._x4 = this._x5 =\n this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = this._y5 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 1: {\n this._context.moveTo(this._x3, this._y3);\n this._context.closePath();\n break;\n }\n case 2: {\n this._context.lineTo(this._x3, this._y3);\n this._context.closePath();\n break;\n }\n case 3: {\n this.point(this._x3, this._y3);\n this.point(this._x4, this._y4);\n this.point(this._x5, this._y5);\n break;\n }\n }\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._x3 = x, this._y3 = y; break;\n case 1: this._point = 2; this._context.moveTo(this._x4 = x, this._y4 = y); break;\n case 2: this._point = 3; this._x5 = x, this._y5 = y; break;\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(tension) {\n\n function cardinal(context) {\n return new CardinalClosed(context, tension);\n }\n\n cardinal.tension = function(tension) {\n return custom(+tension);\n };\n\n return cardinal;\n})(0);\n","import {point} from \"./cardinal\";\n\nexport function CardinalOpen(context, tension) {\n this._context = context;\n this._k = (1 - tension) / 6;\n}\n\nCardinalOpen.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 = this._x2 =\n this._y0 = this._y1 = this._y2 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; this._line ? this._context.lineTo(this._x2, this._y2) : this._context.moveTo(this._x2, this._y2); break;\n case 3: this._point = 4; // proceed\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(tension) {\n\n function cardinal(context) {\n return new CardinalOpen(context, tension);\n }\n\n cardinal.tension = function(tension) {\n return custom(+tension);\n };\n\n return cardinal;\n})(0);\n","import {epsilon} from \"../math\";\nimport {Cardinal} from \"./cardinal\";\n\nexport function point(that, x, y) {\n var x1 = that._x1,\n y1 = that._y1,\n x2 = that._x2,\n y2 = that._y2;\n\n if (that._l01_a > epsilon) {\n var a = 2 * that._l01_2a + 3 * that._l01_a * that._l12_a + that._l12_2a,\n n = 3 * that._l01_a * (that._l01_a + that._l12_a);\n x1 = (x1 * a - that._x0 * that._l12_2a + that._x2 * that._l01_2a) / n;\n y1 = (y1 * a - that._y0 * that._l12_2a + that._y2 * that._l01_2a) / n;\n }\n\n if (that._l23_a > epsilon) {\n var b = 2 * that._l23_2a + 3 * that._l23_a * that._l12_a + that._l12_2a,\n m = 3 * that._l23_a * (that._l23_a + that._l12_a);\n x2 = (x2 * b + that._x1 * that._l23_2a - x * that._l12_2a) / m;\n y2 = (y2 * b + that._y1 * that._l23_2a - y * that._l12_2a) / m;\n }\n\n that._context.bezierCurveTo(x1, y1, x2, y2, that._x2, that._y2);\n}\n\nfunction CatmullRom(context, alpha) {\n this._context = context;\n this._alpha = alpha;\n}\n\nCatmullRom.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 = this._x2 =\n this._y0 = this._y1 = this._y2 = NaN;\n this._l01_a = this._l12_a = this._l23_a =\n this._l01_2a = this._l12_2a = this._l23_2a =\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 2: this._context.lineTo(this._x2, this._y2); break;\n case 3: this.point(this._x2, this._y2); break;\n }\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n\n if (this._point) {\n var x23 = this._x2 - x,\n y23 = this._y2 - y;\n this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));\n }\n\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; // proceed\n default: point(this, x, y); break;\n }\n\n this._l01_a = this._l12_a, this._l12_a = this._l23_a;\n this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(alpha) {\n\n function catmullRom(context) {\n return alpha ? new CatmullRom(context, alpha) : new Cardinal(context, 0);\n }\n\n catmullRom.alpha = function(alpha) {\n return custom(+alpha);\n };\n\n return catmullRom;\n})(0.5);\n","import {CardinalClosed} from \"./cardinalClosed\";\nimport noop from \"../noop\";\nimport {point} from \"./catmullRom\";\n\nfunction CatmullRomClosed(context, alpha) {\n this._context = context;\n this._alpha = alpha;\n}\n\nCatmullRomClosed.prototype = {\n areaStart: noop,\n areaEnd: noop,\n lineStart: function() {\n this._x0 = this._x1 = this._x2 = this._x3 = this._x4 = this._x5 =\n this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = this._y5 = NaN;\n this._l01_a = this._l12_a = this._l23_a =\n this._l01_2a = this._l12_2a = this._l23_2a =\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 1: {\n this._context.moveTo(this._x3, this._y3);\n this._context.closePath();\n break;\n }\n case 2: {\n this._context.lineTo(this._x3, this._y3);\n this._context.closePath();\n break;\n }\n case 3: {\n this.point(this._x3, this._y3);\n this.point(this._x4, this._y4);\n this.point(this._x5, this._y5);\n break;\n }\n }\n },\n point: function(x, y) {\n x = +x, y = +y;\n\n if (this._point) {\n var x23 = this._x2 - x,\n y23 = this._y2 - y;\n this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));\n }\n\n switch (this._point) {\n case 0: this._point = 1; this._x3 = x, this._y3 = y; break;\n case 1: this._point = 2; this._context.moveTo(this._x4 = x, this._y4 = y); break;\n case 2: this._point = 3; this._x5 = x, this._y5 = y; break;\n default: point(this, x, y); break;\n }\n\n this._l01_a = this._l12_a, this._l12_a = this._l23_a;\n this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(alpha) {\n\n function catmullRom(context) {\n return alpha ? new CatmullRomClosed(context, alpha) : new CardinalClosed(context, 0);\n }\n\n catmullRom.alpha = function(alpha) {\n return custom(+alpha);\n };\n\n return catmullRom;\n})(0.5);\n","import {CardinalOpen} from \"./cardinalOpen\";\nimport {point} from \"./catmullRom\";\n\nfunction CatmullRomOpen(context, alpha) {\n this._context = context;\n this._alpha = alpha;\n}\n\nCatmullRomOpen.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 = this._x2 =\n this._y0 = this._y1 = this._y2 = NaN;\n this._l01_a = this._l12_a = this._l23_a =\n this._l01_2a = this._l12_2a = this._l23_2a =\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n\n if (this._point) {\n var x23 = this._x2 - x,\n y23 = this._y2 - y;\n this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));\n }\n\n switch (this._point) {\n case 0: this._point = 1; break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; this._line ? this._context.lineTo(this._x2, this._y2) : this._context.moveTo(this._x2, this._y2); break;\n case 3: this._point = 4; // proceed\n default: point(this, x, y); break;\n }\n\n this._l01_a = this._l12_a, this._l12_a = this._l23_a;\n this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(alpha) {\n\n function catmullRom(context) {\n return alpha ? new CatmullRomOpen(context, alpha) : new CardinalOpen(context, 0);\n }\n\n catmullRom.alpha = function(alpha) {\n return custom(+alpha);\n };\n\n return catmullRom;\n})(0.5);\n","import noop from \"../noop\";\n\nfunction LinearClosed(context) {\n this._context = context;\n}\n\nLinearClosed.prototype = {\n areaStart: noop,\n areaEnd: noop,\n lineStart: function() {\n this._point = 0;\n },\n lineEnd: function() {\n if (this._point) this._context.closePath();\n },\n point: function(x, y) {\n x = +x, y = +y;\n if (this._point) this._context.lineTo(x, y);\n else this._point = 1, this._context.moveTo(x, y);\n }\n};\n\nexport default function(context) {\n return new LinearClosed(context);\n}\n","function sign(x) {\n return x < 0 ? -1 : 1;\n}\n\n// Calculate the slopes of the tangents (Hermite-type interpolation) based on\n// the following paper: Steffen, M. 1990. A Simple Method for Monotonic\n// Interpolation in One Dimension. Astronomy and Astrophysics, Vol. 239, NO.\n// NOV(II), P. 443, 1990.\nfunction slope3(that, x2, y2) {\n var h0 = that._x1 - that._x0,\n h1 = x2 - that._x1,\n s0 = (that._y1 - that._y0) / (h0 || h1 < 0 && -0),\n s1 = (y2 - that._y1) / (h1 || h0 < 0 && -0),\n p = (s0 * h1 + s1 * h0) / (h0 + h1);\n return (sign(s0) + sign(s1)) * Math.min(Math.abs(s0), Math.abs(s1), 0.5 * Math.abs(p)) || 0;\n}\n\n// Calculate a one-sided slope.\nfunction slope2(that, t) {\n var h = that._x1 - that._x0;\n return h ? (3 * (that._y1 - that._y0) / h - t) / 2 : t;\n}\n\n// According to https://en.wikipedia.org/wiki/Cubic_Hermite_spline#Representations\n// \"you can express cubic Hermite interpolation in terms of cubic Bézier curves\n// with respect to the four values p0, p0 + m0 / 3, p1 - m1 / 3, p1\".\nfunction point(that, t0, t1) {\n var x0 = that._x0,\n y0 = that._y0,\n x1 = that._x1,\n y1 = that._y1,\n dx = (x1 - x0) / 3;\n that._context.bezierCurveTo(x0 + dx, y0 + dx * t0, x1 - dx, y1 - dx * t1, x1, y1);\n}\n\nfunction MonotoneX(context) {\n this._context = context;\n}\n\nMonotoneX.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 =\n this._y0 = this._y1 =\n this._t0 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 2: this._context.lineTo(this._x1, this._y1); break;\n case 3: point(this, this._t0, slope2(this, this._t0)); break;\n }\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n var t1 = NaN;\n\n x = +x, y = +y;\n if (x === this._x1 && y === this._y1) return; // Ignore coincident points.\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; point(this, slope2(this, t1 = slope3(this, x, y)), t1); break;\n default: point(this, this._t0, t1 = slope3(this, x, y)); break;\n }\n\n this._x0 = this._x1, this._x1 = x;\n this._y0 = this._y1, this._y1 = y;\n this._t0 = t1;\n }\n}\n\nfunction MonotoneY(context) {\n this._context = new ReflectContext(context);\n}\n\n(MonotoneY.prototype = Object.create(MonotoneX.prototype)).point = function(x, y) {\n MonotoneX.prototype.point.call(this, y, x);\n};\n\nfunction ReflectContext(context) {\n this._context = context;\n}\n\nReflectContext.prototype = {\n moveTo: function(x, y) { this._context.moveTo(y, x); },\n closePath: function() { this._context.closePath(); },\n lineTo: function(x, y) { this._context.lineTo(y, x); },\n bezierCurveTo: function(x1, y1, x2, y2, x, y) { this._context.bezierCurveTo(y1, x1, y2, x2, y, x); }\n};\n\nexport function monotoneX(context) {\n return new MonotoneX(context);\n}\n\nexport function monotoneY(context) {\n return new MonotoneY(context);\n}\n","function Natural(context) {\n this._context = context;\n}\n\nNatural.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x = [];\n this._y = [];\n },\n lineEnd: function() {\n var x = this._x,\n y = this._y,\n n = x.length;\n\n if (n) {\n this._line ? this._context.lineTo(x[0], y[0]) : this._context.moveTo(x[0], y[0]);\n if (n === 2) {\n this._context.lineTo(x[1], y[1]);\n } else {\n var px = controlPoints(x),\n py = controlPoints(y);\n for (var i0 = 0, i1 = 1; i1 < n; ++i0, ++i1) {\n this._context.bezierCurveTo(px[0][i0], py[0][i0], px[1][i0], py[1][i0], x[i1], y[i1]);\n }\n }\n }\n\n if (this._line || (this._line !== 0 && n === 1)) this._context.closePath();\n this._line = 1 - this._line;\n this._x = this._y = null;\n },\n point: function(x, y) {\n this._x.push(+x);\n this._y.push(+y);\n }\n};\n\n// See https://www.particleincell.com/2012/bezier-splines/ for derivation.\nfunction controlPoints(x) {\n var i,\n n = x.length - 1,\n m,\n a = new Array(n),\n b = new Array(n),\n r = new Array(n);\n a[0] = 0, b[0] = 2, r[0] = x[0] + 2 * x[1];\n for (i = 1; i < n - 1; ++i) a[i] = 1, b[i] = 4, r[i] = 4 * x[i] + 2 * x[i + 1];\n a[n - 1] = 2, b[n - 1] = 7, r[n - 1] = 8 * x[n - 1] + x[n];\n for (i = 1; i < n; ++i) m = a[i] / b[i - 1], b[i] -= m, r[i] -= m * r[i - 1];\n a[n - 1] = r[n - 1] / b[n - 1];\n for (i = n - 2; i >= 0; --i) a[i] = (r[i] - a[i + 1]) / b[i];\n b[n - 1] = (x[n] + a[n - 1]) / 2;\n for (i = 0; i < n - 1; ++i) b[i] = 2 * x[i + 1] - a[i + 1];\n return [a, b];\n}\n\nexport default function(context) {\n return new Natural(context);\n}\n","function Step(context, t) {\n this._context = context;\n this._t = t;\n}\n\nStep.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x = this._y = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n if (0 < this._t && this._t < 1 && this._point === 2) this._context.lineTo(this._x, this._y);\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n if (this._line >= 0) this._t = 1 - this._t, this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; // proceed\n default: {\n if (this._t <= 0) {\n this._context.lineTo(this._x, y);\n this._context.lineTo(x, y);\n } else {\n var x1 = this._x * (1 - this._t) + x * this._t;\n this._context.lineTo(x1, this._y);\n this._context.lineTo(x1, y);\n }\n break;\n }\n }\n this._x = x, this._y = y;\n }\n};\n\nexport default function(context) {\n return new Step(context, 0.5);\n}\n\nexport function stepBefore(context) {\n return new Step(context, 0);\n}\n\nexport function stepAfter(context) {\n return new Step(context, 1);\n}\n","export default function(series, order) {\n if (!((n = series.length) > 1)) return;\n for (var i = 1, j, s0, s1 = series[order[0]], n, m = s1.length; i < n; ++i) {\n s0 = s1, s1 = series[order[i]];\n for (j = 0; j < m; ++j) {\n s1[j][1] += s1[j][0] = isNaN(s0[j][1]) ? s0[j][0] : s0[j][1];\n }\n }\n}\n","export default function(series) {\n var n = series.length, o = new Array(n);\n while (--n >= 0) o[n] = n;\n return o;\n}\n","import {slice} from \"./array\";\nimport constant from \"./constant\";\nimport offsetNone from \"./offset/none\";\nimport orderNone from \"./order/none\";\n\nfunction stackValue(d, key) {\n return d[key];\n}\n\nexport default function() {\n var keys = constant([]),\n order = orderNone,\n offset = offsetNone,\n value = stackValue;\n\n function stack(data) {\n var kz = keys.apply(this, arguments),\n i,\n m = data.length,\n n = kz.length,\n sz = new Array(n),\n oz;\n\n for (i = 0; i < n; ++i) {\n for (var ki = kz[i], si = sz[i] = new Array(m), j = 0, sij; j < m; ++j) {\n si[j] = sij = [0, +value(data[j], ki, j, data)];\n sij.data = data[j];\n }\n si.key = ki;\n }\n\n for (i = 0, oz = order(sz); i < n; ++i) {\n sz[oz[i]].index = i;\n }\n\n offset(sz, oz);\n return sz;\n }\n\n stack.keys = function(_) {\n return arguments.length ? (keys = typeof _ === \"function\" ? _ : constant(slice.call(_)), stack) : keys;\n };\n\n stack.value = function(_) {\n return arguments.length ? (value = typeof _ === \"function\" ? _ : constant(+_), stack) : value;\n };\n\n stack.order = function(_) {\n return arguments.length ? (order = _ == null ? orderNone : typeof _ === \"function\" ? _ : constant(slice.call(_)), stack) : order;\n };\n\n stack.offset = function(_) {\n return arguments.length ? (offset = _ == null ? offsetNone : _, stack) : offset;\n };\n\n return stack;\n}\n","import none from \"./none\";\n\nexport default function(series) {\n var sums = series.map(sum);\n return none(series).sort(function(a, b) { return sums[a] - sums[b]; });\n}\n\nexport function sum(series) {\n var s = 0, i = -1, n = series.length, v;\n while (++i < n) if (v = +series[i][1]) s += v;\n return s;\n}\n","export function cubicIn(t) {\n return t * t * t;\n}\n\nexport function cubicOut(t) {\n return --t * t * t + 1;\n}\n\nexport function cubicInOut(t) {\n return ((t *= 2) <= 1 ? t * t * t : (t -= 2) * t * t + 2) / 2;\n}\n","var exponent = 3;\n\nexport var polyIn = (function custom(e) {\n e = +e;\n\n function polyIn(t) {\n return Math.pow(t, e);\n }\n\n polyIn.exponent = custom;\n\n return polyIn;\n})(exponent);\n\nexport var polyOut = (function custom(e) {\n e = +e;\n\n function polyOut(t) {\n return 1 - Math.pow(1 - t, e);\n }\n\n polyOut.exponent = custom;\n\n return polyOut;\n})(exponent);\n\nexport var polyInOut = (function custom(e) {\n e = +e;\n\n function polyInOut(t) {\n return ((t *= 2) <= 1 ? Math.pow(t, e) : 2 - Math.pow(2 - t, e)) / 2;\n }\n\n polyInOut.exponent = custom;\n\n return polyInOut;\n})(exponent);\n","var pi = Math.PI,\n halfPi = pi / 2;\n\nexport function sinIn(t) {\n return 1 - Math.cos(t * halfPi);\n}\n\nexport function sinOut(t) {\n return Math.sin(t * halfPi);\n}\n\nexport function sinInOut(t) {\n return (1 - Math.cos(pi * t)) / 2;\n}\n","var b1 = 4 / 11,\n b2 = 6 / 11,\n b3 = 8 / 11,\n b4 = 3 / 4,\n b5 = 9 / 11,\n b6 = 10 / 11,\n b7 = 15 / 16,\n b8 = 21 / 22,\n b9 = 63 / 64,\n b0 = 1 / b1 / b1;\n\nexport function bounceIn(t) {\n return 1 - bounceOut(1 - t);\n}\n\nexport function bounceOut(t) {\n return (t = +t) < b1 ? b0 * t * t : t < b3 ? b0 * (t -= b2) * t + b4 : t < b6 ? b0 * (t -= b5) * t + b7 : b0 * (t -= b8) * t + b9;\n}\n\nexport function bounceInOut(t) {\n return ((t *= 2) <= 1 ? 1 - bounceOut(1 - t) : bounceOut(t - 1) + 1) / 2;\n}\n","var overshoot = 1.70158;\n\nexport var backIn = (function custom(s) {\n s = +s;\n\n function backIn(t) {\n return t * t * ((s + 1) * t - s);\n }\n\n backIn.overshoot = custom;\n\n return backIn;\n})(overshoot);\n\nexport var backOut = (function custom(s) {\n s = +s;\n\n function backOut(t) {\n return --t * t * ((s + 1) * t + s) + 1;\n }\n\n backOut.overshoot = custom;\n\n return backOut;\n})(overshoot);\n\nexport var backInOut = (function custom(s) {\n s = +s;\n\n function backInOut(t) {\n return ((t *= 2) < 1 ? t * t * ((s + 1) * t - s) : (t -= 2) * t * ((s + 1) * t + s) + 2) / 2;\n }\n\n backInOut.overshoot = custom;\n\n return backInOut;\n})(overshoot);\n","var tau = 2 * Math.PI,\n amplitude = 1,\n period = 0.3;\n\nexport var elasticIn = (function custom(a, p) {\n var s = Math.asin(1 / (a = Math.max(1, a))) * (p /= tau);\n\n function elasticIn(t) {\n return a * Math.pow(2, 10 * --t) * Math.sin((s - t) / p);\n }\n\n elasticIn.amplitude = function(a) { return custom(a, p * tau); };\n elasticIn.period = function(p) { return custom(a, p); };\n\n return elasticIn;\n})(amplitude, period);\n\nexport var elasticOut = (function custom(a, p) {\n var s = Math.asin(1 / (a = Math.max(1, a))) * (p /= tau);\n\n function elasticOut(t) {\n return 1 - a * Math.pow(2, -10 * (t = +t)) * Math.sin((t + s) / p);\n }\n\n elasticOut.amplitude = function(a) { return custom(a, p * tau); };\n elasticOut.period = function(p) { return custom(a, p); };\n\n return elasticOut;\n})(amplitude, period);\n\nexport var elasticInOut = (function custom(a, p) {\n var s = Math.asin(1 / (a = Math.max(1, a))) * (p /= tau);\n\n function elasticInOut(t) {\n return ((t = t * 2 - 1) < 0\n ? a * Math.pow(2, 10 * t) * Math.sin((s - t) / p)\n : 2 - a * Math.pow(2, -10 * t) * Math.sin((s + t) / p)) / 2;\n }\n\n elasticInOut.amplitude = function(a) { return custom(a, p * tau); };\n elasticInOut.period = function(p) { return custom(a, p); };\n\n return elasticInOut;\n})(amplitude, period);\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","export function x(d) {\n return d[0];\n}\n\nexport function y(d) {\n return d[1];\n}\n","function RedBlackTree() {\n this._ = null; // root node\n}\n\nexport function RedBlackNode(node) {\n node.U = // parent node\n node.C = // color - true for red, false for black\n node.L = // left node\n node.R = // right node\n node.P = // previous node\n node.N = null; // next node\n}\n\nRedBlackTree.prototype = {\n constructor: RedBlackTree,\n\n insert: function(after, node) {\n var parent, grandpa, uncle;\n\n if (after) {\n node.P = after;\n node.N = after.N;\n if (after.N) after.N.P = node;\n after.N = node;\n if (after.R) {\n after = after.R;\n while (after.L) after = after.L;\n after.L = node;\n } else {\n after.R = node;\n }\n parent = after;\n } else if (this._) {\n after = RedBlackFirst(this._);\n node.P = null;\n node.N = after;\n after.P = after.L = node;\n parent = after;\n } else {\n node.P = node.N = null;\n this._ = node;\n parent = null;\n }\n node.L = node.R = null;\n node.U = parent;\n node.C = true;\n\n after = node;\n while (parent && parent.C) {\n grandpa = parent.U;\n if (parent === grandpa.L) {\n uncle = grandpa.R;\n if (uncle && uncle.C) {\n parent.C = uncle.C = false;\n grandpa.C = true;\n after = grandpa;\n } else {\n if (after === parent.R) {\n RedBlackRotateLeft(this, parent);\n after = parent;\n parent = after.U;\n }\n parent.C = false;\n grandpa.C = true;\n RedBlackRotateRight(this, grandpa);\n }\n } else {\n uncle = grandpa.L;\n if (uncle && uncle.C) {\n parent.C = uncle.C = false;\n grandpa.C = true;\n after = grandpa;\n } else {\n if (after === parent.L) {\n RedBlackRotateRight(this, parent);\n after = parent;\n parent = after.U;\n }\n parent.C = false;\n grandpa.C = true;\n RedBlackRotateLeft(this, grandpa);\n }\n }\n parent = after.U;\n }\n this._.C = false;\n },\n\n remove: function(node) {\n if (node.N) node.N.P = node.P;\n if (node.P) node.P.N = node.N;\n node.N = node.P = null;\n\n var parent = node.U,\n sibling,\n left = node.L,\n right = node.R,\n next,\n red;\n\n if (!left) next = right;\n else if (!right) next = left;\n else next = RedBlackFirst(right);\n\n if (parent) {\n if (parent.L === node) parent.L = next;\n else parent.R = next;\n } else {\n this._ = next;\n }\n\n if (left && right) {\n red = next.C;\n next.C = node.C;\n next.L = left;\n left.U = next;\n if (next !== right) {\n parent = next.U;\n next.U = node.U;\n node = next.R;\n parent.L = node;\n next.R = right;\n right.U = next;\n } else {\n next.U = parent;\n parent = next;\n node = next.R;\n }\n } else {\n red = node.C;\n node = next;\n }\n\n if (node) node.U = parent;\n if (red) return;\n if (node && node.C) { node.C = false; return; }\n\n do {\n if (node === this._) break;\n if (node === parent.L) {\n sibling = parent.R;\n if (sibling.C) {\n sibling.C = false;\n parent.C = true;\n RedBlackRotateLeft(this, parent);\n sibling = parent.R;\n }\n if ((sibling.L && sibling.L.C)\n || (sibling.R && sibling.R.C)) {\n if (!sibling.R || !sibling.R.C) {\n sibling.L.C = false;\n sibling.C = true;\n RedBlackRotateRight(this, sibling);\n sibling = parent.R;\n }\n sibling.C = parent.C;\n parent.C = sibling.R.C = false;\n RedBlackRotateLeft(this, parent);\n node = this._;\n break;\n }\n } else {\n sibling = parent.L;\n if (sibling.C) {\n sibling.C = false;\n parent.C = true;\n RedBlackRotateRight(this, parent);\n sibling = parent.L;\n }\n if ((sibling.L && sibling.L.C)\n || (sibling.R && sibling.R.C)) {\n if (!sibling.L || !sibling.L.C) {\n sibling.R.C = false;\n sibling.C = true;\n RedBlackRotateLeft(this, sibling);\n sibling = parent.L;\n }\n sibling.C = parent.C;\n parent.C = sibling.L.C = false;\n RedBlackRotateRight(this, parent);\n node = this._;\n break;\n }\n }\n sibling.C = true;\n node = parent;\n parent = parent.U;\n } while (!node.C);\n\n if (node) node.C = false;\n }\n};\n\nfunction RedBlackRotateLeft(tree, node) {\n var p = node,\n q = node.R,\n parent = p.U;\n\n if (parent) {\n if (parent.L === p) parent.L = q;\n else parent.R = q;\n } else {\n tree._ = q;\n }\n\n q.U = parent;\n p.U = q;\n p.R = q.L;\n if (p.R) p.R.U = p;\n q.L = p;\n}\n\nfunction RedBlackRotateRight(tree, node) {\n var p = node,\n q = node.L,\n parent = p.U;\n\n if (parent) {\n if (parent.L === p) parent.L = q;\n else parent.R = q;\n } else {\n tree._ = q;\n }\n\n q.U = parent;\n p.U = q;\n p.L = q.R;\n if (p.L) p.L.U = p;\n q.R = p;\n}\n\nfunction RedBlackFirst(node) {\n while (node.L) node = node.L;\n return node;\n}\n\nexport default RedBlackTree;\n","import {cells, edges, epsilon} from \"./Diagram\";\n\nexport function createEdge(left, right, v0, v1) {\n var edge = [null, null],\n index = edges.push(edge) - 1;\n edge.left = left;\n edge.right = right;\n if (v0) setEdgeEnd(edge, left, right, v0);\n if (v1) setEdgeEnd(edge, right, left, v1);\n cells[left.index].halfedges.push(index);\n cells[right.index].halfedges.push(index);\n return edge;\n}\n\nexport function createBorderEdge(left, v0, v1) {\n var edge = [v0, v1];\n edge.left = left;\n return edge;\n}\n\nexport function setEdgeEnd(edge, left, right, vertex) {\n if (!edge[0] && !edge[1]) {\n edge[0] = vertex;\n edge.left = left;\n edge.right = right;\n } else if (edge.left === right) {\n edge[1] = vertex;\n } else {\n edge[0] = vertex;\n }\n}\n\n// Liang–Barsky line clipping.\nfunction clipEdge(edge, x0, y0, x1, y1) {\n var a = edge[0],\n b = edge[1],\n ax = a[0],\n ay = a[1],\n bx = b[0],\n by = b[1],\n t0 = 0,\n t1 = 1,\n dx = bx - ax,\n dy = by - ay,\n r;\n\n r = x0 - ax;\n if (!dx && r > 0) return;\n r /= dx;\n if (dx < 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n } else if (dx > 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n }\n\n r = x1 - ax;\n if (!dx && r < 0) return;\n r /= dx;\n if (dx < 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n } else if (dx > 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n }\n\n r = y0 - ay;\n if (!dy && r > 0) return;\n r /= dy;\n if (dy < 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n } else if (dy > 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n }\n\n r = y1 - ay;\n if (!dy && r < 0) return;\n r /= dy;\n if (dy < 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n } else if (dy > 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n }\n\n if (!(t0 > 0) && !(t1 < 1)) return true; // TODO Better check?\n\n if (t0 > 0) edge[0] = [ax + t0 * dx, ay + t0 * dy];\n if (t1 < 1) edge[1] = [ax + t1 * dx, ay + t1 * dy];\n return true;\n}\n\nfunction connectEdge(edge, x0, y0, x1, y1) {\n var v1 = edge[1];\n if (v1) return true;\n\n var v0 = edge[0],\n left = edge.left,\n right = edge.right,\n lx = left[0],\n ly = left[1],\n rx = right[0],\n ry = right[1],\n fx = (lx + rx) / 2,\n fy = (ly + ry) / 2,\n fm,\n fb;\n\n if (ry === ly) {\n if (fx < x0 || fx >= x1) return;\n if (lx > rx) {\n if (!v0) v0 = [fx, y0];\n else if (v0[1] >= y1) return;\n v1 = [fx, y1];\n } else {\n if (!v0) v0 = [fx, y1];\n else if (v0[1] < y0) return;\n v1 = [fx, y0];\n }\n } else {\n fm = (lx - rx) / (ry - ly);\n fb = fy - fm * fx;\n if (fm < -1 || fm > 1) {\n if (lx > rx) {\n if (!v0) v0 = [(y0 - fb) / fm, y0];\n else if (v0[1] >= y1) return;\n v1 = [(y1 - fb) / fm, y1];\n } else {\n if (!v0) v0 = [(y1 - fb) / fm, y1];\n else if (v0[1] < y0) return;\n v1 = [(y0 - fb) / fm, y0];\n }\n } else {\n if (ly < ry) {\n if (!v0) v0 = [x0, fm * x0 + fb];\n else if (v0[0] >= x1) return;\n v1 = [x1, fm * x1 + fb];\n } else {\n if (!v0) v0 = [x1, fm * x1 + fb];\n else if (v0[0] < x0) return;\n v1 = [x0, fm * x0 + fb];\n }\n }\n }\n\n edge[0] = v0;\n edge[1] = v1;\n return true;\n}\n\nexport function clipEdges(x0, y0, x1, y1) {\n var i = edges.length,\n edge;\n\n while (i--) {\n if (!connectEdge(edge = edges[i], x0, y0, x1, y1)\n || !clipEdge(edge, x0, y0, x1, y1)\n || !(Math.abs(edge[0][0] - edge[1][0]) > epsilon\n || Math.abs(edge[0][1] - edge[1][1]) > epsilon)) {\n delete edges[i];\n }\n }\n}\n","import {createBorderEdge} from \"./Edge\";\nimport {cells, edges, epsilon} from \"./Diagram\";\n\nexport function createCell(site) {\n return cells[site.index] = {\n site: site,\n halfedges: []\n };\n}\n\nfunction cellHalfedgeAngle(cell, edge) {\n var site = cell.site,\n va = edge.left,\n vb = edge.right;\n if (site === vb) vb = va, va = site;\n if (vb) return Math.atan2(vb[1] - va[1], vb[0] - va[0]);\n if (site === va) va = edge[1], vb = edge[0];\n else va = edge[0], vb = edge[1];\n return Math.atan2(va[0] - vb[0], vb[1] - va[1]);\n}\n\nexport function cellHalfedgeStart(cell, edge) {\n return edge[+(edge.left !== cell.site)];\n}\n\nexport function cellHalfedgeEnd(cell, edge) {\n return edge[+(edge.left === cell.site)];\n}\n\nexport function sortCellHalfedges() {\n for (var i = 0, n = cells.length, cell, halfedges, j, m; i < n; ++i) {\n if ((cell = cells[i]) && (m = (halfedges = cell.halfedges).length)) {\n var index = new Array(m),\n array = new Array(m);\n for (j = 0; j < m; ++j) index[j] = j, array[j] = cellHalfedgeAngle(cell, edges[halfedges[j]]);\n index.sort(function(i, j) { return array[j] - array[i]; });\n for (j = 0; j < m; ++j) array[j] = halfedges[index[j]];\n for (j = 0; j < m; ++j) halfedges[j] = array[j];\n }\n }\n}\n\nexport function clipCells(x0, y0, x1, y1) {\n var nCells = cells.length,\n iCell,\n cell,\n site,\n iHalfedge,\n halfedges,\n nHalfedges,\n start,\n startX,\n startY,\n end,\n endX,\n endY,\n cover = true;\n\n for (iCell = 0; iCell < nCells; ++iCell) {\n if (cell = cells[iCell]) {\n site = cell.site;\n halfedges = cell.halfedges;\n iHalfedge = halfedges.length;\n\n // Remove any dangling clipped edges.\n while (iHalfedge--) {\n if (!edges[halfedges[iHalfedge]]) {\n halfedges.splice(iHalfedge, 1);\n }\n }\n\n // Insert any border edges as necessary.\n iHalfedge = 0, nHalfedges = halfedges.length;\n while (iHalfedge < nHalfedges) {\n end = cellHalfedgeEnd(cell, edges[halfedges[iHalfedge]]), endX = end[0], endY = end[1];\n start = cellHalfedgeStart(cell, edges[halfedges[++iHalfedge % nHalfedges]]), startX = start[0], startY = start[1];\n if (Math.abs(endX - startX) > epsilon || Math.abs(endY - startY) > epsilon) {\n halfedges.splice(iHalfedge, 0, edges.push(createBorderEdge(site, end,\n Math.abs(endX - x0) < epsilon && y1 - endY > epsilon ? [x0, Math.abs(startX - x0) < epsilon ? startY : y1]\n : Math.abs(endY - y1) < epsilon && x1 - endX > epsilon ? [Math.abs(startY - y1) < epsilon ? startX : x1, y1]\n : Math.abs(endX - x1) < epsilon && endY - y0 > epsilon ? [x1, Math.abs(startX - x1) < epsilon ? startY : y0]\n : Math.abs(endY - y0) < epsilon && endX - x0 > epsilon ? [Math.abs(startY - y0) < epsilon ? startX : x0, y0]\n : null)) - 1);\n ++nHalfedges;\n }\n }\n\n if (nHalfedges) cover = false;\n }\n }\n\n // If there weren’t any edges, have the closest site cover the extent.\n // It doesn’t matter which corner of the extent we measure!\n if (cover) {\n var dx, dy, d2, dc = Infinity;\n\n for (iCell = 0, cover = null; iCell < nCells; ++iCell) {\n if (cell = cells[iCell]) {\n site = cell.site;\n dx = site[0] - x0;\n dy = site[1] - y0;\n d2 = dx * dx + dy * dy;\n if (d2 < dc) dc = d2, cover = cell;\n }\n }\n\n if (cover) {\n var v00 = [x0, y0], v01 = [x0, y1], v11 = [x1, y1], v10 = [x1, y0];\n cover.halfedges.push(\n edges.push(createBorderEdge(site = cover.site, v00, v01)) - 1,\n edges.push(createBorderEdge(site, v01, v11)) - 1,\n edges.push(createBorderEdge(site, v11, v10)) - 1,\n edges.push(createBorderEdge(site, v10, v00)) - 1\n );\n }\n }\n\n // Lastly delete any cells with no edges; these were entirely clipped.\n for (iCell = 0; iCell < nCells; ++iCell) {\n if (cell = cells[iCell]) {\n if (!cell.halfedges.length) {\n delete cells[iCell];\n }\n }\n }\n}\n","import {RedBlackNode} from \"./RedBlackTree\";\nimport {circles, epsilon2} from \"./Diagram\";\n\nvar circlePool = [];\n\nexport var firstCircle;\n\nfunction Circle() {\n RedBlackNode(this);\n this.x =\n this.y =\n this.arc =\n this.site =\n this.cy = null;\n}\n\nexport function attachCircle(arc) {\n var lArc = arc.P,\n rArc = arc.N;\n\n if (!lArc || !rArc) return;\n\n var lSite = lArc.site,\n cSite = arc.site,\n rSite = rArc.site;\n\n if (lSite === rSite) return;\n\n var bx = cSite[0],\n by = cSite[1],\n ax = lSite[0] - bx,\n ay = lSite[1] - by,\n cx = rSite[0] - bx,\n cy = rSite[1] - by;\n\n var d = 2 * (ax * cy - ay * cx);\n if (d >= -epsilon2) return;\n\n var ha = ax * ax + ay * ay,\n hc = cx * cx + cy * cy,\n x = (cy * ha - ay * hc) / d,\n y = (ax * hc - cx * ha) / d;\n\n var circle = circlePool.pop() || new Circle;\n circle.arc = arc;\n circle.site = cSite;\n circle.x = x + bx;\n circle.y = (circle.cy = y + by) + Math.sqrt(x * x + y * y); // y bottom\n\n arc.circle = circle;\n\n var before = null,\n node = circles._;\n\n while (node) {\n if (circle.y < node.y || (circle.y === node.y && circle.x <= node.x)) {\n if (node.L) node = node.L;\n else { before = node.P; break; }\n } else {\n if (node.R) node = node.R;\n else { before = node; break; }\n }\n }\n\n circles.insert(before, circle);\n if (!before) firstCircle = circle;\n}\n\nexport function detachCircle(arc) {\n var circle = arc.circle;\n if (circle) {\n if (!circle.P) firstCircle = circle.N;\n circles.remove(circle);\n circlePool.push(circle);\n RedBlackNode(circle);\n arc.circle = null;\n }\n}\n","import {RedBlackNode} from \"./RedBlackTree\";\nimport {createCell} from \"./Cell\";\nimport {attachCircle, detachCircle} from \"./Circle\";\nimport {createEdge, setEdgeEnd} from \"./Edge\";\nimport {beaches, epsilon} from \"./Diagram\";\n\nvar beachPool = [];\n\nfunction Beach() {\n RedBlackNode(this);\n this.edge =\n this.site =\n this.circle = null;\n}\n\nfunction createBeach(site) {\n var beach = beachPool.pop() || new Beach;\n beach.site = site;\n return beach;\n}\n\nfunction detachBeach(beach) {\n detachCircle(beach);\n beaches.remove(beach);\n beachPool.push(beach);\n RedBlackNode(beach);\n}\n\nexport function removeBeach(beach) {\n var circle = beach.circle,\n x = circle.x,\n y = circle.cy,\n vertex = [x, y],\n previous = beach.P,\n next = beach.N,\n disappearing = [beach];\n\n detachBeach(beach);\n\n var lArc = previous;\n while (lArc.circle\n && Math.abs(x - lArc.circle.x) < epsilon\n && Math.abs(y - lArc.circle.cy) < epsilon) {\n previous = lArc.P;\n disappearing.unshift(lArc);\n detachBeach(lArc);\n lArc = previous;\n }\n\n disappearing.unshift(lArc);\n detachCircle(lArc);\n\n var rArc = next;\n while (rArc.circle\n && Math.abs(x - rArc.circle.x) < epsilon\n && Math.abs(y - rArc.circle.cy) < epsilon) {\n next = rArc.N;\n disappearing.push(rArc);\n detachBeach(rArc);\n rArc = next;\n }\n\n disappearing.push(rArc);\n detachCircle(rArc);\n\n var nArcs = disappearing.length,\n iArc;\n for (iArc = 1; iArc < nArcs; ++iArc) {\n rArc = disappearing[iArc];\n lArc = disappearing[iArc - 1];\n setEdgeEnd(rArc.edge, lArc.site, rArc.site, vertex);\n }\n\n lArc = disappearing[0];\n rArc = disappearing[nArcs - 1];\n rArc.edge = createEdge(lArc.site, rArc.site, null, vertex);\n\n attachCircle(lArc);\n attachCircle(rArc);\n}\n\nexport function addBeach(site) {\n var x = site[0],\n directrix = site[1],\n lArc,\n rArc,\n dxl,\n dxr,\n node = beaches._;\n\n while (node) {\n dxl = leftBreakPoint(node, directrix) - x;\n if (dxl > epsilon) node = node.L; else {\n dxr = x - rightBreakPoint(node, directrix);\n if (dxr > epsilon) {\n if (!node.R) {\n lArc = node;\n break;\n }\n node = node.R;\n } else {\n if (dxl > -epsilon) {\n lArc = node.P;\n rArc = node;\n } else if (dxr > -epsilon) {\n lArc = node;\n rArc = node.N;\n } else {\n lArc = rArc = node;\n }\n break;\n }\n }\n }\n\n createCell(site);\n var newArc = createBeach(site);\n beaches.insert(lArc, newArc);\n\n if (!lArc && !rArc) return;\n\n if (lArc === rArc) {\n detachCircle(lArc);\n rArc = createBeach(lArc.site);\n beaches.insert(newArc, rArc);\n newArc.edge = rArc.edge = createEdge(lArc.site, newArc.site);\n attachCircle(lArc);\n attachCircle(rArc);\n return;\n }\n\n if (!rArc) { // && lArc\n newArc.edge = createEdge(lArc.site, newArc.site);\n return;\n }\n\n // else lArc !== rArc\n detachCircle(lArc);\n detachCircle(rArc);\n\n var lSite = lArc.site,\n ax = lSite[0],\n ay = lSite[1],\n bx = site[0] - ax,\n by = site[1] - ay,\n rSite = rArc.site,\n cx = rSite[0] - ax,\n cy = rSite[1] - ay,\n d = 2 * (bx * cy - by * cx),\n hb = bx * bx + by * by,\n hc = cx * cx + cy * cy,\n vertex = [(cy * hb - by * hc) / d + ax, (bx * hc - cx * hb) / d + ay];\n\n setEdgeEnd(rArc.edge, lSite, rSite, vertex);\n newArc.edge = createEdge(lSite, site, null, vertex);\n rArc.edge = createEdge(site, rSite, null, vertex);\n attachCircle(lArc);\n attachCircle(rArc);\n}\n\nfunction leftBreakPoint(arc, directrix) {\n var site = arc.site,\n rfocx = site[0],\n rfocy = site[1],\n pby2 = rfocy - directrix;\n\n if (!pby2) return rfocx;\n\n var lArc = arc.P;\n if (!lArc) return -Infinity;\n\n site = lArc.site;\n var lfocx = site[0],\n lfocy = site[1],\n plby2 = lfocy - directrix;\n\n if (!plby2) return lfocx;\n\n var hl = lfocx - rfocx,\n aby2 = 1 / pby2 - 1 / plby2,\n b = hl / plby2;\n\n if (aby2) return (-b + Math.sqrt(b * b - 2 * aby2 * (hl * hl / (-2 * plby2) - lfocy + plby2 / 2 + rfocy - pby2 / 2))) / aby2 + rfocx;\n\n return (rfocx + lfocx) / 2;\n}\n\nfunction rightBreakPoint(arc, directrix) {\n var rArc = arc.N;\n if (rArc) return leftBreakPoint(rArc, directrix);\n var site = arc.site;\n return site[1] === directrix ? site[0] : Infinity;\n}\n","import {addBeach, removeBeach} from \"./Beach\";\nimport {sortCellHalfedges, cellHalfedgeStart, clipCells} from \"./Cell\";\nimport {firstCircle} from \"./Circle\";\nimport {clipEdges} from \"./Edge\";\nimport RedBlackTree from \"./RedBlackTree\";\n\nexport var epsilon = 1e-6;\nexport var epsilon2 = 1e-12;\nexport var beaches;\nexport var cells;\nexport var circles;\nexport var edges;\n\nfunction triangleArea(a, b, c) {\n return (a[0] - c[0]) * (b[1] - a[1]) - (a[0] - b[0]) * (c[1] - a[1]);\n}\n\nfunction lexicographic(a, b) {\n return b[1] - a[1]\n || b[0] - a[0];\n}\n\nexport default function Diagram(sites, extent) {\n var site = sites.sort(lexicographic).pop(),\n x,\n y,\n circle;\n\n edges = [];\n cells = new Array(sites.length);\n beaches = new RedBlackTree;\n circles = new RedBlackTree;\n\n while (true) {\n circle = firstCircle;\n if (site && (!circle || site[1] < circle.y || (site[1] === circle.y && site[0] < circle.x))) {\n if (site[0] !== x || site[1] !== y) {\n addBeach(site);\n x = site[0], y = site[1];\n }\n site = sites.pop();\n } else if (circle) {\n removeBeach(circle.arc);\n } else {\n break;\n }\n }\n\n sortCellHalfedges();\n\n if (extent) {\n var x0 = +extent[0][0],\n y0 = +extent[0][1],\n x1 = +extent[1][0],\n y1 = +extent[1][1];\n clipEdges(x0, y0, x1, y1);\n clipCells(x0, y0, x1, y1);\n }\n\n this.edges = edges;\n this.cells = cells;\n\n beaches =\n circles =\n edges =\n cells = null;\n}\n\nDiagram.prototype = {\n constructor: Diagram,\n\n polygons: function() {\n var edges = this.edges;\n\n return this.cells.map(function(cell) {\n var polygon = cell.halfedges.map(function(i) { return cellHalfedgeStart(cell, edges[i]); });\n polygon.data = cell.site.data;\n return polygon;\n });\n },\n\n triangles: function() {\n var triangles = [],\n edges = this.edges;\n\n this.cells.forEach(function(cell, i) {\n if (!(m = (halfedges = cell.halfedges).length)) return;\n var site = cell.site,\n halfedges,\n j = -1,\n m,\n s0,\n e1 = edges[halfedges[m - 1]],\n s1 = e1.left === site ? e1.right : e1.left;\n\n while (++j < m) {\n s0 = s1;\n e1 = edges[halfedges[j]];\n s1 = e1.left === site ? e1.right : e1.left;\n if (s0 && s1 && i < s0.index && i < s1.index && triangleArea(site, s0, s1) < 0) {\n triangles.push([site.data, s0.data, s1.data]);\n }\n }\n });\n\n return triangles;\n },\n\n links: function() {\n return this.edges.filter(function(edge) {\n return edge.right;\n }).map(function(edge) {\n return {\n source: edge.left.data,\n target: edge.right.data\n };\n });\n },\n\n find: function(x, y, radius) {\n var that = this, i0, i1 = that._found || 0, n = that.cells.length, cell;\n\n // Use the previously-found cell, or start with an arbitrary one.\n while (!(cell = that.cells[i1])) if (++i1 >= n) return null;\n var dx = x - cell.site[0], dy = y - cell.site[1], d2 = dx * dx + dy * dy;\n\n // Traverse the half-edges to find a closer cell, if any.\n do {\n cell = that.cells[i0 = i1], i1 = null;\n cell.halfedges.forEach(function(e) {\n var edge = that.edges[e], v = edge.left;\n if ((v === cell.site || !v) && !(v = edge.right)) return;\n var vx = x - v[0], vy = y - v[1], v2 = vx * vx + vy * vy;\n if (v2 < d2) d2 = v2, i1 = v.index;\n });\n } while (i1 !== null);\n\n that._found = i0;\n\n return radius == null || d2 <= radius * radius ? cell.site : null;\n }\n}\n","import constant from \"./constant\";\nimport {x as pointX, y as pointY} from \"./point\";\nimport Diagram, {epsilon} from \"./Diagram\";\n\nexport default function() {\n var x = pointX,\n y = pointY,\n extent = null;\n\n function voronoi(data) {\n return new Diagram(data.map(function(d, i) {\n var s = [Math.round(x(d, i, data) / epsilon) * epsilon, Math.round(y(d, i, data) / epsilon) * epsilon];\n s.index = i;\n s.data = d;\n return s;\n }), extent);\n }\n\n voronoi.polygons = function(data) {\n return voronoi(data).polygons();\n };\n\n voronoi.links = function(data) {\n return voronoi(data).links();\n };\n\n voronoi.triangles = function(data) {\n return voronoi(data).triangles();\n };\n\n voronoi.x = function(_) {\n return arguments.length ? (x = typeof _ === \"function\" ? _ : constant(+_), voronoi) : x;\n };\n\n voronoi.y = function(_) {\n return arguments.length ? (y = typeof _ === \"function\" ? _ : constant(+_), voronoi) : y;\n };\n\n voronoi.extent = function(_) {\n return arguments.length ? (extent = _ == null ? null : [[+_[0][0], +_[0][1]], [+_[1][0], +_[1][1]]], voronoi) : extent && [[extent[0][0], extent[0][1]], [extent[1][0], extent[1][1]]];\n };\n\n voronoi.size = function(_) {\n return arguments.length ? (extent = _ == null ? null : [[0, 0], [+_[0], +_[1]]], voronoi) : extent && [extent[1][0] - extent[0][0], extent[1][1] - extent[0][1]];\n };\n\n return voronoi;\n}\n","/**\n * This class represents a selection applied on a data array.\n *\n * @class Selection\n */\nclass Selection {\n /**\n * Creates an instance of Selection.\n * @param {Array} data Array of DataObjects.\n * @memberof Selection\n */\n constructor () {\n this._data = [];\n // // map of id to data\n this._idMap = {};\n this._dataMap = {};\n this._mode = '';\n // data.forEach((item, idx) => {\n // const index = item.id || idx;\n // this._idMap[index] = item;\n // });\n // // array to store data in enter phase\n this._enterdata = [];\n // // array to store data in exit phase\n this._exitdata = [];\n }\n /**\n * Gets the object bound to a class\n *\n * @return {Object} current data set bound to the class\n * @memberof Selection\n */\n getObjects () {\n return Object.values(this._idMap);\n }\n\n /**\n * This method is used to supply seed data to a selection.\n *\n * @param {Array} newData Seed data to create the enter selection.\n * @param {Functon | undefined } idGetter This function is used to uniqely identify a data entry.\n * @return {Selection} Modified selection.\n * @memberof Selection\n */\n data (newData, idGetter) {\n if (idGetter) {\n this._data = [];\n this._idGetter = idGetter;\n const tempMap = {};\n\n newData.forEach((...params) => {\n const index = idGetter(...params);\n tempMap[index] = params[0];\n });\n // check if any data items have been removed\n const purgedIds = [];\n\n Object.keys(this._idMap).forEach((id) => {\n if (!tempMap[id]) {\n purgedIds.push(id);\n }\n });\n\n Object.keys(tempMap).forEach((id) => {\n if (!this._idMap[id]) {\n this._enterdata.push(tempMap[id]);\n } else {\n this._idMap[id] = tempMap[id];\n this._data.push(tempMap[id]);\n }\n });\n // move the purged items to exit selection\n purgedIds.forEach((id) => {\n const purged = this._idMap[id];\n this._exitdata.push(purged);\n // this._data = this._data.slice(id, 1);\n delete this._idMap[id];\n });\n // this._data = this._data.slice(temp, this._data.length);\n\n return this;\n }\n // no id getter supplied so use indices\n if (newData.length > this._data.length) {\n const startIdx = this._data.length;\n for (let i = startIdx; i < newData.length; i += 1) {\n this._enterdata.push(newData[i]);\n }\n } else {\n // push to exit selection\n const temp = newData.length;\n for (let i = temp; i < this._data.length; i += 1) {\n const purged = this._data[i];\n delete this._idMap[purged.id];\n this._exitdata.push(purged);\n }\n this._data = this._data.slice(temp, this._data.length);\n }\n return this;\n }\n\n /**\n * Applies the supplied callback to each data element\n * and returns a new selection.\n *\n * @param {Function} callback Callback to execute on each item.\n * @return {Selection} New selection with data created using callback.\n * @memberof EnterSelection\n */\n append (callback) {\n this[`_${this._mode}data`].forEach((...params) => {\n const data = params[0];\n const id = this._idGetter ? this._idGetter(...params) : (data.id || params[1]);\n this._idMap[id] = callback(...params);\n this._dataMap[id] = data;\n });\n this._mode = '';\n return this;\n }\n\n /**\n * This method returns an enter selection that\n * allows or update operations.\n *\n * @return {EnterSelection} Instance of enter selection.\n * @memberof Selection\n */\n enter () {\n this._mode = 'enter';\n return this;\n // return new EnterSelection(this._enterdata, this._idMap, this._idGetter);\n }\n\n /**\n * This method is used to set key value pairs\n * on data objects.\n *\n * @param {string} key Name of property.\n * @param {any} value Value of property.\n * @return {Selection} Modified selection.\n * @memberof Selection\n */\n attr (key, value) {\n this._data.forEach(item => item.attr(key, value));\n return this;\n }\n\n /**\n * This method merges the data of one selection with another.\n *\n * @param {Selection} selection Instance of selection.\n * @return {Selection} Modified selection.\n * @memberof Selection\n */\n merge (selection) {\n selection._data.forEach((...params) => {\n const id = this._idGetter ? this._idGetter(...params) : (params[0].id || params[1]);\n this._idMap[id] = params[0];\n this._data.push(params[0]);\n });\n // reset enter selection\n this._enterdata = [];\n return this;\n }\n\n /**\n * Returns a selection with exit data.\n *\n * @return {Selection} Instance of selection.\n * @memberof Selection\n */\n exit () {\n this._mode = 'exit';\n // const exitdata = this._exitdata;\n // const exitSelection = new Selection(exitdata);\n // this._exitdata = [];\n return this;\n }\n\n each (fn) {\n Object.keys(this._idMap).forEach((e, i) => {\n fn(this._idMap[e], this._dataMap[e], i);\n });\n return this;\n }\n\n map (fn) {\n Object.keys(this._idMap).forEach((...params) => {\n const key = params[0];\n this._idMap[key] = fn(this._idMap[key], ...params, this._dataMap[key]);\n });\n return this;\n }\n\n /**\n * Executes the cleanup operation associated with data objets.\n *\n * @memberof Selection\n */\n remove () {\n // do cleanup on DDO's\n const data = this[`_${this._mode}data`];\n\n data.forEach(item => item.remove());\n if (this._mode === '') {\n this.each(e => e.remove());\n }\n this[`_${this._mode}data`] = [];\n this._mode = '';\n }\n}\n\nexport default Selection;\n","/* global window, requestAnimationFrame, cancelAnimationFrame */\nimport { FieldType, DimensionSubtype, DateTimeFormatter, default as DataModel } from 'datamodel';\nimport {\n axisLeft,\n axisRight,\n axisTop,\n axisBottom\n} from 'd3-axis';\nimport {\n symbolCircle,\n symbolCross,\n symbolDiamond,\n symbolSquare,\n symbolStar,\n symbolWye,\n symbolTriangle,\n symbol,\n stack as d3Stack,\n stackOffsetDiverging,\n stackOrderNone,\n stackOrderAscending,\n stackOrderDescending,\n stackOffsetNone,\n stackOffsetExpand,\n stackOffsetWiggle,\n pie,\n arc,\n line,\n curveLinear,\n curveStepAfter,\n curveStepBefore,\n curveStep,\n curveCatmullRom,\n area\n} from 'd3-shape';\nimport { scaleBand } from 'd3-scale';\nimport { nest } from 'd3-collection';\nimport {\n interpolate,\n interpolateRgb,\n piecewise,\n interpolateNumber,\n interpolateHslLong\n} from 'd3-interpolate';\nimport {\n easeCubic,\n easeBounce,\n easePoly,\n easeBack,\n easeCircle,\n easeLinear,\n easeElastic\n} from 'd3-ease';\nimport {\n color,\n rgb,\n hsl\n} from 'd3-color';\nimport { voronoi } from 'd3-voronoi';\nimport Model from 'hyperdis';\nimport { dataSelect } from './DataSystem';\nimport * as STACK_CONFIG from './enums/stack-config';\nimport { DM_OPERATION_GROUP } from './enums';\n\nconst { InvalidAwareTypes } = DataModel;\nconst HTMLElement = window.HTMLElement;\n\nconst isSimpleObject = (obj) => {\n let token;\n if (typeof obj === 'object') {\n if (obj === null) { return false; }\n token = Object.prototype.toString.call(obj);\n if (token === '[object Object]') {\n return (obj.constructor.toString().match(/^function (.*)\\(\\)/m) || [])[1] === 'Object';\n }\n }\n return false;\n};\n\n/**\n * Returns unique id\n * @return {string} Unique id string\n */\nconst\n getUniqueId = () => `id-${new Date().getTime()}${Math.round(Math.random() * 10000)}`;\n\n/**\n * Deep copies an object and returns a new object.\n * @param {Object} o Object to clone\n * @return {Object} New Object.\n */\nconst clone = (o) => {\n const output = {};\n let v;\n for (const key in o) {\n if ({}.hasOwnProperty.call(o, key)) {\n v = o[key];\n output[key] = isSimpleObject(v) ? clone(v) : v;\n }\n }\n return output;\n};\n\n/**\n* Checks the existence of keys in an object\n* @param {Array} keys Set of keys which are to be checked\n* @param {Object} obj whose keys are checked from the set of keys provided\n* @return {Object} Error if the keys are absent, or the object itself\n*/\nconst checkExistence = (keys, obj) => {\n const nonExistentKeys = [];\n keys.forEach((key) => {\n if (key in obj) {\n return;\n }\n nonExistentKeys.push(key);\n });\n return nonExistentKeys;\n};\n\nconst sanitizeIP = {\n typeObj: (keys, obj) => {\n if (typeof obj !== 'object') {\n return Error('Argument type object expected');\n }\n\n const nonExistentKeys = checkExistence(keys, obj);\n if (nonExistentKeys.length) {\n return Error(`Missing keys from parameter ${nonExistentKeys.join(', ')}`);\n }\n return obj;\n },\n\n /* istanbul ignore next */ htmlElem: (elem) => {\n if (!(elem instanceof HTMLElement)) {\n return Error('HTMLElement required');\n }\n return elem;\n }\n};\n\n/**\n * Gets the maximum value from an array of objects for a given property name\n * @param {Array.} data Array of objects\n * @param {string} field Field name\n * @return {number} Maximum value\n */\nconst getMax = (data, field) => Math.max(...data.map(d => d[field]));\n\n/**\n * Gets the minimum value from an array of objects for a given property name\n * @param {Array.} data Array of objects\n * @param {string} field Field name\n * @return {number} Minimum value\n */\nconst getMin = (data, field) => Math.min(...data.map(d => d[field]));\n\n/**\n * Gets the domain from the data based on the field name and type of field\n * @param {Array. | Array.} data Data Array\n * @param {Array.} fields Array of fields from where the domain will be calculated\n * @param {string} fieldType Type of field - nominal, quantitiative, temporal.\n * @return {Array} Usually contains a min and max value if field is quantitative or\n * an array of values if field type is nominal or ordinal\n */\nconst getDomainFromData = (data, fields, fieldType) => {\n let domain;\n const domArr = [];\n data = data[0] instanceof Array ? data : [data];\n switch (fieldType) {\n case DimensionSubtype.CATEGORICAL:\n domain = [].concat(...data.map(arr => arr.map(d => d[fields[0]]).filter(d => d !== undefined)));\n break;\n default:\n for (let i = 0, len = data.length; i < len; i++) {\n const arr = data[i];\n const [field0, field1] = fields;\n const arr0 = arr.filter(d => !isNaN(d[field0]));\n const arr1 = arr.filter(d => !isNaN(d[field1]));\n if (arr0.length || arr1.length) {\n const firstMin = getMin(arr0, field0);\n const secondMin = getMin(arr1, field1);\n const firstMax = getMax(arr0, field0);\n const secondMax = getMax(arr1, field1);\n domArr.push([Math.min(firstMin, secondMin), Math.max(firstMax, secondMax)]);\n }\n }\n domain = domArr.length ? [Math.min(...domArr.map(d => d[0])), Math.max(...domArr.map(d => d[1]))] : [];\n break;\n }\n return domain;\n};\n\n/**\n * Union Domain values\n * @param {Array.} domains Array of domain values\n * @param {string} fieldType type of field - dimension,measure or datetime.\n * @return {Array} Unioned domain of all domain values.\n */\nconst unionDomain = (domains, fieldType) => {\n let domain = [];\n domains = domains.filter(dom => dom && dom.length);\n if (domains.length) {\n if (fieldType === DimensionSubtype.CATEGORICAL) {\n domain = [].concat(...domains);\n } else {\n domain = [Math.min(...domains.map(d => d[0])), Math.max(...domains.map(d => d[1]))];\n }\n }\n\n return domain;\n};\n\nconst symbolFns = {\n circle: symbolCircle,\n cross: symbolCross,\n diamond: symbolDiamond,\n square: symbolSquare,\n star: symbolStar,\n wye: symbolWye,\n triangle: symbolTriangle\n};\n\nconst easeFns = {\n cubic: easeCubic,\n bounce: easeBounce,\n linear: easeLinear,\n elastic: easeElastic,\n back: easeBack,\n poly: easePoly,\n circle: easeCircle\n};\n\n/**\n * Returns the maximum or minimum points of a compare value from an array of objects.\n * @param {Array} points Array of objects\n * @param {string} compareValue Key in the object on which the comparing will be done.\n * @param {string} minOrMax minimum or maximum.\n * @return {Object} Minimum or maximum point.\n */\nconst getExtremePoint = (points, compareValue, minOrMax) => {\n let extremePoint;\n let point;\n const len = points.length;\n let minOrMaxVal = minOrMax === 'max' ? -Infinity : Infinity;\n let val;\n\n for (let i = 0; i < len; i++) {\n point = points[i];\n val = point[compareValue];\n if (minOrMax === 'min' ? val < minOrMaxVal : val > minOrMaxVal) {\n minOrMaxVal = val;\n extremePoint = point;\n }\n }\n\n return extremePoint;\n};\n\n/**\n * Returns the minimum point of a compare value from an array of objects.\n * @param {Array} points Array of objects\n * @param {string} compareValue Key in the object on which the comparing will be done.\n * @return {Object} Minimum point.\n */\nconst getMinPoint = (points, compareValue) => getExtremePoint(points, compareValue, 'min');\n\n/**\n * Returns the maximum point of a compare value from an array of objects.\n * @param {Array} points Array of objects\n * @param {string} compareValue Key in the object on which the comparing will be done.\n * @return {Object} Maximum point.\n */\nconst getMaxPoint = (points, compareValue) => getExtremePoint(points, compareValue, 'max');\n\n/**\n * Gets the index of the closest value of the given value from the array.\n * @param {Array} arr Array of values\n * @param {number} value Value from which the nearest value will be calculated.\n * @param {string} side side property.\n * @return {number} index of the closest value\n */\n/* istanbul ignore next */const getClosestIndexOf = (arr, value, side) => {\n let low = 0;\n const arrLen = arr.length;\n let high = arrLen - 1;\n\n let mid;\n let d1;\n let d2;\n\n while (low < high) {\n mid = Math.floor((low + high) / 2);\n d1 = Math.abs(arr[mid] - value);\n d2 = Math.abs(arr[mid + 1] - value);\n\n if (d2 <= d1) {\n low = mid + 1;\n } else {\n high = mid;\n }\n }\n\n if (!side) {\n return high;\n }\n\n const highVal = arr[high];\n if (highVal === value) {\n return high;\n } else if (highVal > value) {\n if (high === 0) { return high; }\n return side === 'left' ? high - 1 : high;\n }\n if (high === arr.length - 1) { return high; }\n return side === 'left' ? high : high + 1;\n};\n\nconst getNearestValue = (data, key) => {\n const filterData = data.filter(d => typeof d === 'number');\n return filterData[getClosestIndexOf(filterData, key)];\n};\n\n/**\n * Returns the browser window object\n * @return {Window} Window object\n*/\nconst getWindow = () => window;\n\n/**\n * Returns the browser window object\n * @return {Window} Window object\n*/\nconst reqAnimFrame = (() => requestAnimationFrame)();\n\nconst cancelAnimFrame = (() => cancelAnimationFrame)();\n\n/**\n * Capitalizes the first letter of the word\n * @param {string} text word\n * @return {string} Capitalized word\n */\nconst capitalizeFirst = (text) => {\n text = text.toLowerCase();\n\n return text.replace(/\\w\\S*/g, txt => txt.charAt(0).toUpperCase() + txt.substr(1));\n};\n\n/**\n *\n *\n * @param {*} arr\n */\nconst unique = arr => ([...new Set(arr)]);\n\n/**\n * Gets the minimum difference between two consecutive numbers in an array.\n * @param {Array} arr Array of numbers\n * @param {number} index index of the value\n * @return {number} minimum difference between values\n */\n/* istanbul ignore next */ const getMinDiff = (arr, index) => {\n let diff;\n let uniqueVals;\n if (index !== undefined) {\n uniqueVals = unique(arr.map(d => d[index]));\n } else {\n uniqueVals = unique(arr);\n }\n if (uniqueVals.length > 1) {\n diff = Math.abs(uniqueVals[1] - uniqueVals[0]);\n for (let i = 2, len = uniqueVals.length; i < len; i++) {\n diff = Math.min(diff, Math.abs(uniqueVals[i] - uniqueVals[i - 1]));\n }\n } else {\n diff = uniqueVals[0];\n }\n\n return diff;\n};\n\n/**\n * Returns the class name appended with a given id.\n * @param {string} cls class name\n * @param {string} id unique identifier\n * @param {string} prefix string needed to add before the classname\n * @return {string} qualified class name\n */\n/* istanbul ignore next */const getQualifiedClassName = (cls, id, prefix) => {\n cls = cls.replace(/^\\.*/, '');\n return [`${prefix}-${cls}`, `${prefix}-${cls}-${id}`];\n};\n\n/**\n * This method is used to set the default value for variables\n * without sullying the code with conditional statements.\n *\n * @export\n * @param {any} param The parameter to test.\n * @param {any} value The default value to assign.\n * @return {any} The value.\n */\n/* istanbul ignore next */ const defaultValue = (param, value) => {\n if (typeof param === 'undefined' || (typeof param === 'object' && !param)) {\n return value;\n }\n return param;\n};\n\n/**\n * DESCRIPTION TODO\n *\n * @export\n * @param {Object} graph graph whose dependency order has to be generated\n * @return {Object}\n */\nconst getDependencyOrder = (graph) => {\n const dependencyOrder = [];\n const visited = {};\n const keys = Object.keys(graph);\n /**\n * DESCRIPTION TODO\n *\n * @export\n * @param {Object} name\n * @return {Object}\n */\n const visit = (name) => {\n if (dependencyOrder.length === keys.length) {\n return true;\n }\n visited[name] = true;\n const edges = graph[name];\n for (let e = 0; e < edges.length; e++) {\n const dep = edges[e];\n if (!visited[dep]) {\n visit(dep);\n }\n }\n\n dependencyOrder.push(name);\n return false;\n };\n\n for (let i = 0; i < keys.length; i++) {\n if (visit(keys[i], i)) break;\n }\n\n return dependencyOrder;\n};\n\n/**\n * Iterates over the properties of an object and applies the function\n *\n * @param {any} obj object to be iterated upon\n * @param {any} fn function to be applied on it\n */\nconst objectIterator = (obj, fn) => {\n for (const key in obj) {\n if (Object.hasOwnProperty.call(obj, key)) {\n fn(key, obj);\n }\n }\n};\n\n/**\n * This class creates a d3 voronoi for retrieving the nearest neighbour of any point from a set of two\n * dimensional points\n * @class Voronoi\n */\n/* istanbul ignore next */ class Voronoi {\n /**\n * Initialize the voronoi with the data given.\n * @param {Array.} data Array of points.\n */\n constructor (data = []) {\n this._voronoi = voronoi().x(d => d.x).y(d => d.y);\n this.data(data);\n }\n\n /**\n * Sets the data to voronoi\n * @param {Array.} data Array of objects.\n * @return {Voronoi} Instance of voronoi.\n */\n data (data) {\n if (data) {\n this._voronoiFn = this._voronoi(data);\n }\n return this;\n }\n\n /**\n * Finds the closest point to the x and y position given.\n * @param {number} x x value\n * @param {number} y y value\n * @param {number} radius search radius.\n * @return {Object} Details of the nearest point.\n */\n find (x, y, radius) {\n return this._voronoiFn.find(x, y, radius);\n }\n}\n\nconst addListenerToNamespace = (namespaceInf, fn, context) => {\n let key = namespaceInf.key;\n const namespace = namespaceInf.namespace;\n if (namespace) {\n !context._listeners[namespace] && (context._listeners[namespace] = []);\n if (!key) {\n key = Object.keys(context._listeners[namespace]).length;\n }\n context._listeners[namespace][key] = fn;\n } else {\n key = Object.keys(context._listeners).length;\n context._listeners[key] = fn;\n }\n};\n\n/**\n *\n *\n * @param {*} obj\n * @param {*} fields\n *\n */\nconst getObjProp = (obj, ...fields) => {\n if (obj === undefined || obj === null) {\n return obj;\n }\n let retObj = obj;\n for (let i = 0, len = fields.length; i < len; i++) {\n retObj = retObj[fields[i]];\n if (retObj === undefined || retObj === null) {\n break;\n }\n }\n return retObj;\n};\n\n/**\n * Methods to handle changes to table configuration and reactivity are handled by this\n * class.\n */\n/**\n * Common store class\n *\n * @class Store\n */\nclass Store {\n /**\n * Creates an instance of Store.\n * @param {Object} config The object to create the state store with.\n * @memberof Store\n */\n constructor (config) {\n // create reactive model\n this.model = Model.create(config);\n this._listeners = {};\n }\n\n /**\n * This method returns a plain JSON object\n * with all the fields in the state store.\n *\n * @return {Object} Serialized representation of state store.\n * @memberof Store\n */\n serialize () {\n return this.model.serialize();\n }\n\n /**\n * This method is used to update the value of a property in the state store.\n *\n * @param {string} propName The name of the property.\n * @param {number} value The new value of the property.\n * @memberof Store\n */\n commit (propName, value) {\n // check if appropriate enum has been used\n this.model.prop(propName, value);\n }\n\n /**\n * This method is used to register a callbacl that will execute\n * when one or more properties change.\n *\n * @param {string | Array} propNames name of property or array of props.\n * @param {Function} callBack The callback to execute.\n * @memberof Store\n */\n /* istanbul ignore next */registerChangeListener (propNames, callBack, instantCall, namespaceInf = {}) {\n let props = propNames;\n if (!Array.isArray(propNames)) {\n props = [propNames];\n }\n const fn = this.model.next(props, callBack, instantCall);\n addListenerToNamespace(namespaceInf, fn, this);\n return this;\n }\n /**\n * This method is used to register a callbacl that will execute\n * when one or more properties change.\n *\n * @param {string | Array} propNames name of property or array of props.\n * @param {Function} callBack The callback to execute.\n * @memberof Store\n */\n /* istanbul ignore next */ registerImmediateListener (propNames, callBack, instantCall, namespaceInf = {}) {\n let props = propNames;\n if (!Array.isArray(propNames)) {\n props = [propNames];\n }\n const fn = this.model.on(props, callBack, instantCall);\n addListenerToNamespace(namespaceInf, fn, this);\n return this;\n }\n /**\n * This method is used to get the name of the property\n * from the state store.\n *\n * @param {string} propName The name of the field in state store.\n * @return {any} The value of the field.\n * @memberof Store\n */\n get (propName) {\n return this.model.prop(propName);\n }\n\n /**\n * This method is used to register a computed property that is computed every time\n * the store value changes.\n *\n * @param {string} propName The name of the property to create.\n * @param {Function} callBack The function to execute when depemdent props change.\n * @memberof Store\n */\n computed (propName, callBack) {\n return this.model.calculatedProp(propName, callBack);\n }\n\n append (propName, value) {\n this.model.append(propName, value);\n return this;\n }\n\n unsubscribeAll () {\n Object.values(this._listeners).forEach(fn => fn());\n return this;\n }\n\n unsubscribe (namespaceInf = {}) {\n const { namespace, key } = namespaceInf;\n const listeners = this._listeners[namespace];\n if (key) {\n const fn = getObjProp(listeners, key);\n fn && fn();\n } else {\n Object.values(listeners).forEach(fn => fn());\n this._listeners[namespace] = [];\n }\n return this;\n }\n}\n\n/**\n * Sanitize an input number / string mixed number. Currently dot in the no is not supported.\n *\n * @param {number | string} val pure number or string mixed number\n * @return {number | null} Number if it can be extracted. Otherwise null\n */\nconst intSanitizer = (val) => {\n const arr = val.toString().match(/(\\d+)(px)*/g);\n if (!arr) {\n // If only characters are passed\n return null;\n }\n\n return parseInt(arr[0], 10);\n};\n\n/**\n * Setter getter creator from config\n * Format\n * PROPERTRY_NAME: {\n * value: // default value of the property,\n * meta: {\n * typeCheck: // The setter value will be checked using this. If the value is function then the setter value\n * // is passed as args. (Optional)\n * typeExpected: // The output of typecheck action will be tested against this. Truthy value will set the\n * // value to the setter\n * sanitizaiton: // Need for sanitization before type is checked\n * }\n * }\n *\n * @param {Object} holder an empty object on which the getters and setters will be mounted\n * @param {Object} options options config based on which the getters and setters are determined.\n * @param {Hyperdis} model optional model to attach the property. If not sent new moel is created.\n * @return {Array}\n */\nconst transactor = (holder, options, model, namespaceInf = {}) => {\n let conf;\n const store = model && model instanceof Model ? model : Model.create({});\n const stateProps = {};\n for (const prop in options) {\n if ({}.hasOwnProperty.call(options, prop)) {\n conf = options[prop];\n const addAsMethod = conf.meta ? conf.meta.addAsMethod : true;\n let nameSpaceProp;\n const namespace = namespaceInf.namespace;\n if (namespace) {\n nameSpaceProp = `${namespace}.${prop}`;\n } else {\n nameSpaceProp = prop;\n }\n if (!store.prop(`${nameSpaceProp}`)) {\n stateProps[prop] = conf.value;\n }\n if (addAsMethod !== false) {\n holder[prop] = ((context, meta, nsProp) => (...params) => {\n let val;\n let compareTo;\n const paramsLen = params.length;\n const prevVal = store.prop(nsProp);\n if (paramsLen) {\n // If parameters are passed then it's a setter\n const spreadParams = meta && meta.spreadParams;\n val = params;\n const values = [];\n if (meta) {\n for (let i = 0; i < paramsLen; i++) {\n val = params[i];\n const sanitization = meta.sanitization && (spreadParams ? meta.sanitization[i] :\n meta.sanitization);\n const typeCheck = meta.typeCheck && (spreadParams ? meta.typeCheck[i] : meta.typeCheck);\n if (sanitization && typeof sanitization === 'function') {\n // Sanitize if required\n val = sanitization(val, prevVal, holder);\n }\n\n if (typeCheck) {\n // Checking if a setter is valid\n if (typeof typeCheck === 'function') {\n let typeExpected = meta.typeExpected;\n if (typeExpected && spreadParams) {\n typeExpected = typeExpected[i];\n }\n if (typeExpected) {\n compareTo = typeExpected;\n } else {\n compareTo = true;\n }\n\n if (typeCheck(val) === compareTo) {\n values.push(val);\n }\n } else if (typeof typeCheck === 'string') {\n if (typeCheck === 'constructor') {\n const typeExpected = spreadParams ? meta.typeExpected[i] :\n meta.typeExpected;\n if (val && (val.constructor.name === typeExpected)) {\n values.push(val);\n }\n }\n } else {\n // context.prop(key, val);\n values.push(val);\n }\n } else {\n values.push(val);\n }\n }\n const preset = meta.preset;\n const oldValues = context.prop(nsProp);\n preset && preset(values[0], holder);\n if (spreadParams) {\n oldValues.forEach((value, i) => {\n if (values[i] === undefined) {\n values[i] = value;\n }\n });\n }\n values.length && context.prop(nsProp, spreadParams ? values : values[0]);\n } else {\n context.prop(nsProp, spreadParams ? val : val[0]);\n }\n return holder;\n }\n // No parameters are passed hence its a getter\n return context.prop(nsProp);\n })(store, conf.meta, nameSpaceProp);\n }\n }\n }\n\n if (namespaceInf.namespace === undefined) {\n store.append(stateProps);\n } else {\n const namespace = namespaceInf.namespace;\n store.append(namespace, stateProps);\n }\n\n return [holder, store];\n};\n\n/**\n *\n *\n * @param {*} context\n * @param {*} props\n */\nconst generateGetterSetters = (context, props) => {\n Object.entries(props).forEach((propInfo) => {\n const prop = propInfo[0];\n const typeChecker = propInfo[1].typeChecker;\n const defVal = propInfo[1].defaultValue;\n const sanitization = propInfo[1].sanitization;\n const prototype = context.constructor.prototype;\n if (!(Object.hasOwnProperty.call(prototype, prop))) {\n if (defVal) {\n context[`_${prop}`] = defVal;\n }\n context[prop] = (...params) => {\n if (params.length) {\n let value = params[0];\n if (sanitization) {\n value = sanitization(context, params[0]);\n }\n if (typeChecker && !typeChecker(value)) {\n return context[`_${prop}`];\n }\n context[`_${prop}`] = value;\n return context;\n } return context[`_${prop}`];\n };\n }\n });\n};\n\n/**\n *\n *\n * @param {*} arr\n * @param {*} prop\n */\nconst getArraySum = (arr, prop) => arr.reduce((total, elem) => {\n total += prop ? elem[prop] : elem;\n return total;\n}, 0);\n\n/**\n *\n *\n * @param {*} arr1\n * @param {*} arr2\n *\n */\nconst arraysEqual = (arr1, arr2) => {\n if (arr1.length !== arr2.length) { return false; }\n for (let i = arr1.length; i >= 0; i--) {\n if (arr1[i] !== arr2[i]) { return false; }\n }\n\n return true;\n};\n\n/* eslint valid-typeof:0 */\n/**\n * Returns a validation function which can be used to validate variables against a type and value\n *\n * @param {any} type type of value that the object should have\n * @return {Object} validation function\n */\nconst isEqual = type => (oldVal, newVal) => {\n if (type === 'Array') {\n if (!oldVal) {\n return false;\n }\n return arraysEqual(oldVal, newVal);\n } else if (type === 'Object') {\n return Object.is(oldVal, newVal);\n } return oldVal === newVal;\n};\n\n/**\n * Description @todo\n *\n * @param {any} transactionModel @todo\n * @param {any} transactionEndpoint @todo\n * @param {any} transactionItems @todo\n * @return {any} @todo\n */\nconst enableChainedTransaction = (transactionModel, transactionEndpoint, transactionItems) =>\n transactionItems.forEach(item => transactionModel.on(item, ([, newVal]) => transactionEndpoint[item](newVal)));\n\n/**\n * Chceks if the element is istanceof HTMLElement\n *\n * @param {Object} elem any JS Object\n */\nconst isHTMLElem = elem => elem instanceof HTMLElement;\n\nconst ERROR_MSG = {\n INTERFACE_IMPL: 'Method not implemented'\n};\n\n/**\n * Merges the sink object in the source by recursively iterating through the object properties\n * @param {Object} source Source Object\n * @param {Object} sink Sink Object\n * @return {Object} Merged object\n */\nconst mergeRecursive = (source, sink) => {\n for (const prop in sink) {\n if (isSimpleObject(source[prop]) && isSimpleObject(sink[prop])) {\n mergeRecursive(source[prop], sink[prop]);\n } else if (sink[prop] instanceof Object && sink[prop].constructor === Object) {\n source[prop] = {};\n mergeRecursive(source[prop], sink[prop]);\n } else {\n source[prop] = sink[prop];\n }\n }\n return source;\n};\n\n/**\n * Creates a selection set from a data set with corresponding attributes\n *\n * @export\n * @param {Selection} sel contains previous selection\n * @param {Object} appendObj Object to be appended\n * @param {Array} data Data based on which the selection is entered/updated/removed\n * @param {Object} [attrs={}] Attributes to be set on the data\n * @return {Selection} Merged selection\n */\nconst createSelection = (sel, appendObj, data, idFn) => {\n let selection = sel || dataSelect([]);\n\n selection = selection.data(data, idFn);\n\n const enter = selection.enter().append(appendObj);\n const mergedSelection = enter.merge(selection);\n\n selection.exit() && selection.exit().remove();\n return mergedSelection;\n};\n\nconst interpolateArray = (data, fitCount) => {\n const linearInterpolate = function (before, after, atPoint) {\n return before + (after - before) * atPoint;\n };\n const newData = [];\n const springFactor = ((data.length - 1) / (fitCount - 1));\n newData[0] = data[0]; // for new allocation\n for (let i = 1; i < fitCount - 1; i++) {\n const tmp = i * springFactor;\n const before = (Math.floor(tmp)).toFixed();\n const after = (Math.ceil(tmp)).toFixed();\n const atPoint = tmp - before;\n newData[i] = linearInterpolate(data[before], data[after], atPoint);\n }\n newData[fitCount - 1] = data[data.length - 1]; // for new allocation\n return newData;\n};\n\n/**\n *\n *\n * @param {*} fn\n */\nconst nextFrame = (fn) => {\n setTimeout(() => {\n fn();\n }, 0);\n};\n\n/**\n *\n *\n * @param {*} angle\n */\nconst angleToRadian = angle => angle * Math.PI / 180;\n\n/**\n *\n *\n * @param {*} newName\n * @param {*} oldName\n */\nconst replaceCSSPrefix = () => {\n // @todo\n};\n\n/**\n * Gets the interpolator function from d3 color\n *\n */\nconst interpolator = () => interpolate;\n\n/**\n * Gets the number interpolator from d3 color\n *\n */\nconst numberInterpolator = () => interpolateNumber;\n\n/**\n * Gets the rgb interpolator from d3 color\n *\n */\nconst colorInterpolator = () => interpolateRgb;\n\n/**\n * Gets the hsl interpolator from d3 color\n *\n */\nconst hslInterpolator = () => interpolateHslLong;\n\nconst transformColors = () => ({\n color,\n rgb,\n hsl\n});\n\n/**\n * Gets the piecewise interpolator from d3 color\n *\n */\nconst piecewiseInterpolator = () => piecewise;\n\nfunction hue2rgb (p, q, t) {\n if (t < 0) t += 1;\n if (t > 1) t -= 1;\n if (t < 1 / 6) return p + (q - p) * 6 * t;\n if (t < 1 / 2) return q;\n if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;\n return p;\n}\n\n /**\n * Converts an HSL color value to RGB. Conversion formula\n * adapted from http://en.wikipedia.org/wiki/HSL_color_space.\n * Assumes h, s, and l are contained in the set [0, 1] and\n * returns r, g, and b in the set [0, 255].\n *\n * @param Number h The hue\n * @param Number s The saturation\n * @param Number l The lightness\n * @return Array The RGB representation\n */\nconst hslToRgb = (h, s, l, a = 1) => {\n let r;\n let g;\n let b;\n\n if (s === 0) {\n r = g = b = l; // achromatic\n } else {\n const q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n const p = 2 * l - q;\n\n r = hue2rgb(p, q, h + 1 / 3);\n g = hue2rgb(p, q, h);\n b = hue2rgb(p, q, h - 1 / 3);\n }\n\n return [r * 255, g * 255, b * 255, a];\n};\n\n /**\n * Converts an RGB color value to HSV. Conversion formula\n * adapted from http://en.wikipedia.org/wiki/HSV_color_space.\n * Assumes r, g, and b are contained in the set [0, 255] and\n * returns h, s, and v in the set [0, 1].\n *\n * @param Number r The red color value\n * @param Number g The green color value\n * @param Number b The blue color value\n * @return Array The HSV representation\n */\nconst rgbToHsv = (r, g, b, a = 1) => {\n r = +r; g = +g; b = +b; a = +a;\n r /= 255; g /= 255; b /= 255;\n const max = Math.max(r, g, b);\n const min = Math.min(r, g, b);\n let h;\n let s;\n const l = (max + min) / 2;\n\n if (max === min) {\n h = s = 0; // achromatic\n } else {\n const d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n switch (max) {\n case r: h = (g - b) / d + (g < b ? 6 : 0); break;\n case g: h = (b - r) / d + 2; break;\n case b: h = (r - g) / d + 4; break;\n default: break;\n }\n h /= 6;\n }\n return [h, s, l, a];\n};\n\n /**\n * Converts an HSV color value to RGB. Conversion formula\n * adapted from http://en.wikipedia.org/wiki/HSV_color_space.\n * Assumes h, s, and v are contained in the set [0, 1] and\n * returns r, g, and b in the set [0, 255].\n *\n * @param Number h The hue\n * @param Number s The saturation\n * @param Number v The value\n * @return Array The RGB representation\n */\nconst hsvToRgb = (h, s, v, a = 1) => {\n let r;\n let g;\n let b;\n\n const i = Math.floor(h * 6);\n const f = h * 6 - i;\n const p = v * (1 - s);\n const q = v * (1 - f * s);\n const t = v * (1 - (1 - f) * s);\n\n switch (i % 6) {\n case 0: r = v; g = t; b = p; break;\n case 1: r = q; g = v; b = p; break;\n case 2: r = p; g = v; b = t; break;\n case 3: r = p; g = q; b = v; break;\n case 4: r = t; g = p; b = v; break;\n case 5: r = v; g = p; b = q; break;\n default: break;\n }\n\n return [r * 255, g * 255, b * 255, a];\n};\n\nconst hexToHsv = (hex) => {\n const result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex);\n\n const r = parseInt(result[1], 16);\n const g = parseInt(result[2], 16);\n const b = parseInt(result[3], 16);\n const a = result[4] ? parseInt(result[4], 16) : 1;\n return rgbToHsv(r, g, b, a);\n};\n\nconst detectColor = (col) => {\n const matchRgb = /rgb\\((\\d{1,3}), (\\d{1,3}), (\\d{1,3})\\)/;\n const matchHsl = /hsl\\((\\d+),\\s*([\\d.]+)%,\\s*([\\d.]+)%\\)/g;\n\n // Source : https://gist.github.com/sethlopezme/d072b945969a3cc2cc11\n // eslint-disable-next-line\n const matchRgba = /rgba?\\(((25[0-5]|2[0-4]\\d|1\\d{1,2}|\\d\\d?)\\s*,\\s*?){2}(25[0-5]|2[0-4]\\d|1\\d{1,2}|\\d\\d?)\\s*,?\\s*([01]\\.?\\d*?)?\\)/;\n // eslint-disable-next-line\n const matchHsla = /^hsla\\((0|360|35\\d|3[0-4]\\d|[12]\\d\\d|0?\\d?\\d),(0|100|\\d{1,2})%,(0|100|\\d{1,2})%,(0?\\.\\d|1(\\.0)?)\\)$/;\n const matchHex = /^#([0-9a-f]{3}){1,2}$/i;\n\n if (matchRgb.test(col) || matchRgba.test(col)) {\n return 'rgb';\n } else if (matchHsl.test(col) || matchHsla.test(col)) {\n return 'hsl';\n } else if (matchHex.test(col)) {\n return 'hex';\n } return col;\n};\n\n/**\n *\n *\n * @param {*} model\n * @param {*} propModel\n *\n */\nconst filterPropagationModel = (model, propModel, measures) => {\n const { data, schema } = propModel.getData();\n let filteredModel;\n if (schema.length) {\n const fieldMap = model.getFieldsConfig();\n filteredModel = model.select((fields) => {\n const include = data.some(row => schema.every((propField, idx) => {\n if (!measures && (!(propField.name in fieldMap) ||\n fieldMap[propField.name].def.type === FieldType.MEASURE)) {\n return true;\n }\n return row[idx] === fields[propField.name].valueOf();\n }));\n return include;\n }, {\n saveChild: false\n });\n } else {\n filteredModel = propModel;\n }\n\n return filteredModel;\n};\n\nconst assembleModelFromIdentifiers = (model, identifiers) => {\n let schema = [];\n let data;\n const fieldMap = model.getFieldsConfig();\n if (identifiers.length) {\n const fields = identifiers[0];\n const len = fields.length;\n for (let i = 0; i < len; i++) {\n const field = fields[i];\n const fieldObj = fieldMap[field] && Object.assign({}, fieldMap[field].def);\n if (fieldObj) {\n schema.push(Object.assign(fieldObj));\n }\n }\n\n data = [];\n const header = identifiers[0];\n for (let i = 1; i < identifiers.length; i += 1) {\n const vals = identifiers[i];\n const temp = {};\n vals.forEach((fieldVal, cIdx) => {\n temp[header[cIdx]] = fieldVal;\n });\n data.push(temp);\n }\n } else {\n data = [];\n schema = [];\n }\n\n return new model.constructor(data, schema);\n};\n\n/**\n *\n *\n * @param {*} dataModel\n * @param {*} criteria\n *\n */\nconst getDataModelFromRange = (dataModel, criteria, mode) => {\n if (criteria === null) {\n return null;\n }\n const selFields = Object.keys(criteria);\n const selFn = fields => selFields.every((field) => {\n const val = fields[field].value;\n const range = criteria[field][0] instanceof Array ? criteria[field][0] : criteria[field];\n if (typeof range[0] === 'string') {\n return range.find(d => d === val) !== undefined;\n }\n return range ? val >= range[0] && val <= range[1] : true;\n });\n\n return dataModel.select(selFn, {\n saveChild: false,\n mode\n });\n};\n\n/**\n *\n *\n * @param {*} dataModel\n * @param {*} identifiers\n *\n */\nconst getDataModelFromIdentifiers = (dataModel, identifiers, mode) => {\n let filteredDataModel;\n if (identifiers instanceof Array) {\n const fieldsConfig = dataModel.getFieldsConfig();\n\n const dataArr = identifiers.slice(1, identifiers.length);\n if (identifiers instanceof Function) {\n filteredDataModel = identifiers(dataModel, {}, false);\n } else if (identifiers instanceof Array && identifiers[0].length) {\n const filteredSchema = identifiers[0].filter(d => d in fieldsConfig);\n filteredDataModel = dataModel.select((fields) => {\n let include = true;\n filteredSchema.forEach((propField, idx) => {\n const value = fields[propField].valueOf();\n const index = dataArr.findIndex(d => d[idx] === value);\n include = include && index !== -1;\n });\n return include;\n }, {\n saveChild: false,\n mode\n });\n }\n } else {\n filteredDataModel = getDataModelFromRange(dataModel, identifiers, mode);\n }\n return filteredDataModel;\n};\n\n/**\n *\n *\n * @param {*} context\n * @param {*} listenerMap\n */\nconst registerListeners = (context, listenerMap, ...params) => {\n const propListenerMap = listenerMap(context, ...params);\n for (const key in propListenerMap) {\n if ({}.hasOwnProperty.call(propListenerMap, key)) {\n const namespace = params[0];\n let ns = null;\n if (namespace) {\n ns = namespace.local;\n }\n const mapObj = propListenerMap[key];\n const propType = mapObj.type;\n const props = mapObj.props;\n const listenerFn = mapObj.listener;\n context.store()[propType](props, listenerFn, false, {\n namespace: ns\n });\n }\n }\n};\n\nconst isValidValue = value => !isNaN(value) && value !== -Infinity && value !== Infinity;\n/**\n *\n *\n * @param {*} str\n *\n */\nconst escapeHTML = (str) => {\n const htmlEscapes = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": ''',\n '/': '/'\n };\n const htmlEscaper = /[&<>\"'/]/g;\n return (`${str}`).replace(htmlEscaper, match => htmlEscapes[match]);\n};\n\n/**\n *\n *\n * @param {*} arr\n */\nconst transposeArray = arr => arr[0].map((col, i) => arr.map(row => row[i]));\nconst toArray = arr => (arr instanceof Array ? arr : [arr]);\nconst extendsClass = (cls, extendsFrom, found) => {\n if (!cls) {\n return false;\n }\n const prototype = cls.prototype;\n if (prototype instanceof extendsFrom) {\n found = true;\n } else {\n found = extendsClass(prototype, extendsFrom, found);\n }\n return found;\n};\n\n/**\n *\n * @param {*} dm1\n * @param {*} dm2\n */\nconst concatModels = (dm1, dm2) => {\n const dataObj1 = dm1.getData();\n const dataObj2 = dm2.getData();\n const data1 = dataObj1.data;\n const data2 = dataObj2.data;\n const schema1 = dataObj1.schema;\n const schema2 = dataObj2.schema;\n const tuples1 = {};\n const tuples2 = {};\n const commonTuples = {};\n for (let i = 0; i < data1.length; i++) {\n for (let ii = 0; ii < data2.length; ii++) {\n const row1 = data1[i];\n const row2 = data2[ii];\n const dim1Values = row1.filter((d, idx) => schema1[idx].type === FieldType.DIMENSION);\n const dim2Values = row2.filter((d, idx) => schema2[idx].type === FieldType.DIMENSION);\n const allDimSame = dim1Values.every(value => dim2Values.indexOf(value) !== -1);\n if (allDimSame) {\n const key = dim1Values.join();\n !commonTuples[key] && (commonTuples[key] = {});\n row1.forEach((value, idx) => {\n commonTuples[key][schema1[idx].name] = value;\n });\n row2.forEach((value, idx) => {\n commonTuples[key][schema2[idx].name] = value;\n });\n } else {\n const dm1Key = dim1Values.join();\n const dm2Key = dim2Values.join();\n if (!commonTuples[dm1Key] && !commonTuples[dm2Key]) {\n !tuples1[dm1Key] && (tuples1[dm1Key] = {});\n !tuples2[dm2Key] && (tuples2[dm2Key] = {});\n row1.forEach((value, idx) => {\n tuples1[dm1Key][schema1[idx].name] = value;\n });\n row2.forEach((value, idx) => {\n tuples2[dm2Key][schema2[idx].name] = value;\n });\n }\n }\n }\n }\n\n const commonSchema = [...schema1, ...schema2.filter(s2 => schema1.findIndex(s1 => s1.name === s2.name) === -1)];\n const data = [...Object.values(tuples1), ...Object.values(tuples2), ...Object.values(commonTuples)];\n return [data, commonSchema];\n};\n\nconst getSymbol = type => symbol().type(symbolFns[type]);\n\nconst stackOrders = {\n [STACK_CONFIG.ORDER_NONE]: stackOrderNone,\n [STACK_CONFIG.ORDER_ASCENDING]: stackOrderAscending,\n [STACK_CONFIG.ORDER_DESCENDING]: stackOrderDescending\n};\nconst stackOffsets = {\n [STACK_CONFIG.OFFSET_DIVERGING]: stackOffsetDiverging,\n [STACK_CONFIG.OFFSET_NONE]: stackOffsetNone,\n [STACK_CONFIG.OFFSET_EXPAND]: stackOffsetExpand,\n [STACK_CONFIG.OFFSET_WIGGLE]: stackOffsetWiggle\n};\n\n// eslint-disable-next-line require-jsdoc\nconst stack = params => d3Stack().keys(params.keys).offset(stackOffsets[params.offset])\n .order(stackOrders[params.order])(params.data);\n\n/**\n * Groups the data into a hierarchical tree structure based on one or more fields.\n * @param { Object } params Configuration properties for nesting data\n * @param { Array. } params.data Data which needs to be grouped\n * @param { Array. } params.keys Field indices by which the data will be grouped\n * @return { Array. } Grouped data array\n */\nconst nestCollection = (params) => {\n const nestFn = nest();\n params.keys.forEach(key => nestFn.key(d => d[key]));\n return nestFn.entries(params.data);\n};\n\nconst pathInterpolators = {\n curveLinear,\n curveStepAfter,\n curveStepBefore,\n curveStep,\n curveCatmullRom,\n stepAfter: curveStepAfter,\n catmullRom: curveCatmullRom,\n step: curveStep,\n stepBefore: curveStepBefore,\n linear: curveLinear\n};\n\nconst Symbols = {\n axisLeft,\n axisRight,\n axisTop,\n axisBottom,\n line,\n area,\n pie,\n arc,\n nest\n};\n\nconst Scales = {\n band: scaleBand\n};\n\nconst getSmallestDiff = (points) => {\n points = points.sort((a, b) => a - b);\n let minDiff = points[1] - points[0];\n for (let i = 2; i < points.length; i++) {\n minDiff = Math.min(minDiff, points[i] - points[i - 1]);\n }\n\n return minDiff;\n};\n\nconst timeFormats = {\n millisecond: '%A, %b %e, %H:%M:%S.%L',\n second: '%A, %b %e, %H:%M:%S',\n minute: '%A, %b %e, %H:%M',\n hour: '%A, %b %e, %H:%M',\n day: '%A, %b %e, %Y',\n month: '%B %Y',\n year: '%Y'\n};\n\nconst timeDurations = [\n ['millisecond', 'second', 'minute', 'hour', 'day', 'month', 'year'],\n [1, 1000, 60000, 3600000, 86400000, 2592000000, 31536000000]\n];\n\nconst getNearestInterval = (interval) => {\n const index = getClosestIndexOf(timeDurations[1], interval);\n return timeDurations[0][index];\n};\n\nconst formatTemporal = (value, interval) => {\n const nearestInterval = getNearestInterval(interval);\n return DateTimeFormatter.formatAs(value, timeFormats[nearestInterval]);\n};\n\nconst temporalFields = (dataModel) => {\n const filteredFields = {};\n Object.entries(dataModel.getFieldspace().getDimension()).forEach(([fieldName, fieldObj]) => {\n if (fieldObj.subtype() === DimensionSubtype.TEMPORAL) {\n filteredFields[fieldName] = fieldObj;\n }\n });\n return filteredFields;\n};\n\nconst require = (lookupWhat, lookupDetails) => ({\n resolvable: (store) => {\n const lookupTarget = store[lookupWhat];\n const depArr = lookupDetails.slice(0, lookupDetails.length - 1);\n const fn = lookupDetails[lookupDetails.length - 1]; // fn\n\n const deps = depArr.map(str => lookupTarget[str]);\n return {\n fn: fn(...deps),\n depArr\n };\n }\n});\n\nconst nextAnimFrame = window.requestAnimationFrame || window.webkitRequestAnimationFrame ||\n window.mozRequestAnimationFrame || window.oRequestAnimationFrame || window.msRequestAnimationFrame ||\n function (callback) {\n setTimeout(callback, 16);\n };\n\nconst getValueParser = config => (val) => {\n if (val instanceof InvalidAwareTypes) {\n return val in config ? config[val] : `${val}`;\n }\n return val;\n};\n\nconst retrieveNearestGroupByReducers = (dataModel, ...measureFieldNames) => {\n let nearestReducers = {};\n let next = dataModel;\n do {\n const derivations = next.getDerivations();\n if (derivations) {\n const groupDerivation = derivations.reverse().find(derivation => derivation.op === DM_OPERATION_GROUP);\n if (groupDerivation) {\n nearestReducers = groupDerivation.criteria || {};\n break;\n }\n }\n } while (next = next.getParent());\n\n const filteredReducers = {};\n const measures = dataModel.getFieldspace().getMeasure();\n measureFieldNames.forEach((measureName) => {\n if (nearestReducers[measureName]) {\n filteredReducers[measureName] = nearestReducers[measureName];\n } else {\n const measureField = measures[measureName];\n if (measureField) {\n filteredReducers[measureName] = measureField.defAggFn();\n }\n }\n });\n\n return filteredReducers;\n};\n\nexport {\n getValueParser,\n require,\n Scales,\n Symbols,\n pathInterpolators,\n stack,\n nestCollection,\n getSymbol,\n transformColors,\n detectColor,\n hexToHsv,\n hslToRgb,\n rgbToHsv,\n hsvToRgb,\n concatModels,\n toArray,\n angleToRadian,\n escapeHTML,\n generateGetterSetters,\n getArraySum,\n interpolator,\n piecewiseInterpolator,\n getDataModelFromIdentifiers,\n getDataModelFromRange,\n colorInterpolator,\n numberInterpolator,\n ERROR_MSG,\n reqAnimFrame,\n nextAnimFrame,\n filterPropagationModel,\n transposeArray,\n cancelAnimFrame,\n getMax,\n getMin,\n getDomainFromData,\n getUniqueId,\n mergeRecursive,\n unionDomain,\n symbolFns,\n easeFns,\n clone,\n isEqual,\n interpolateArray,\n getMinPoint,\n defaultValue,\n getMaxPoint,\n getClosestIndexOf,\n Voronoi,\n checkExistence,\n sanitizeIP,\n getMinDiff,\n capitalizeFirst,\n getWindow,\n getQualifiedClassName,\n Store,\n getDependencyOrder,\n objectIterator,\n intSanitizer,\n transactor,\n enableChainedTransaction,\n isHTMLElem,\n isSimpleObject,\n nextFrame,\n registerListeners,\n replaceCSSPrefix,\n getObjProp,\n extendsClass,\n assembleModelFromIdentifiers,\n isValidValue,\n hslInterpolator,\n getSmallestDiff,\n getNearestValue,\n retrieveNearestGroupByReducers,\n createSelection,\n formatTemporal,\n temporalFields\n};\n","export function linear(t) {\n return +t;\n}\n","export function circleIn(t) {\n return 1 - Math.sqrt(1 - t * t);\n}\n\nexport function circleOut(t) {\n return Math.sqrt(1 - --t * t);\n}\n\nexport function circleInOut(t) {\n return ((t *= 2) <= 1 ? 1 - Math.sqrt(1 - t * t) : Math.sqrt(1 - (t -= 2) * t) + 1) / 2;\n}\n","import Selection from './selection';\n/**\n * This function applies a selection operation on a data array.\n *\n * @export\n * @param {Array} [data=[]] The data array to be observed.\n * @return {Selection} Instance of a selection.\n */\nexport default function dataSelect (data = []) {\n return new Selection(data);\n}\n\n","import {path} from \"d3-path\";\nimport circle from \"./symbol/circle\";\nimport cross from \"./symbol/cross\";\nimport diamond from \"./symbol/diamond\";\nimport star from \"./symbol/star\";\nimport square from \"./symbol/square\";\nimport triangle from \"./symbol/triangle\";\nimport wye from \"./symbol/wye\";\nimport constant from \"./constant\";\n\nexport var symbols = [\n circle,\n cross,\n diamond,\n square,\n star,\n triangle,\n wye\n];\n\nexport default function() {\n var type = constant(circle),\n size = constant(64),\n context = null;\n\n function symbol() {\n var buffer;\n if (!context) context = buffer = path();\n type.apply(this, arguments).draw(context, +size.apply(this, arguments));\n if (buffer) return context = null, buffer + \"\" || null;\n }\n\n symbol.type = function(_) {\n return arguments.length ? (type = typeof _ === \"function\" ? _ : constant(_), symbol) : type;\n };\n\n symbol.size = function(_) {\n return arguments.length ? (size = typeof _ === \"function\" ? _ : constant(+_), symbol) : size;\n };\n\n symbol.context = function(_) {\n return arguments.length ? (context = _ == null ? null : _, symbol) : context;\n };\n\n return symbol;\n}\n","export const ORDER_ASCENDING = 'ascending';\nexport const ORDER_DESCENDING = 'descending';\nexport const ORDER_NONE = 'none';\nexport const OFFSET_DIVERGING = 'diverging';\nexport const OFFSET_NONE = 'none';\nexport const OFFSET_EXPAND = 'expand';\nexport const OFFSET_WIGGLE = 'wiggle';\n","import ascending from \"./ascending\";\n\nexport default function(series) {\n return ascending(series).reverse();\n}\n","export default function(series, order) {\n if (!((n = series.length) > 1)) return;\n for (var i, j = 0, d, dy, yp, yn, n, m = series[order[0]].length; j < m; ++j) {\n for (yp = yn = 0, i = 0; i < n; ++i) {\n if ((dy = (d = series[order[i]][j])[1] - d[0]) >= 0) {\n d[0] = yp, d[1] = yp += dy;\n } else if (dy < 0) {\n d[1] = yn, d[0] = yn += dy;\n } else {\n d[0] = yp;\n }\n }\n }\n}\n","import none from \"./none\";\n\nexport default function(series, order) {\n if (!((n = series.length) > 0)) return;\n for (var i, n, j = 0, m = series[0].length, y; j < m; ++j) {\n for (y = i = 0; i < n; ++i) y += series[i][j][1] || 0;\n if (y) for (i = 0; i < n; ++i) series[i][j][1] /= y;\n }\n none(series, order);\n}\n","import none from \"./none\";\n\nexport default function(series, order) {\n if (!((n = series.length) > 0) || !((m = (s0 = series[order[0]]).length) > 0)) return;\n for (var y = 0, j = 1, s0, m, n; j < m; ++j) {\n for (var i = 0, s1 = 0, s2 = 0; i < n; ++i) {\n var si = series[order[i]],\n sij0 = si[j][1] || 0,\n sij1 = si[j - 1][1] || 0,\n s3 = (sij0 - sij1) / 2;\n for (var k = 0; k < i; ++k) {\n var sk = series[order[k]],\n skj0 = sk[j][1] || 0,\n skj1 = sk[j - 1][1] || 0;\n s3 += skj0 - skj1;\n }\n s1 += sij0, s2 += s3 * sij0;\n }\n s0[j - 1][1] += s0[j - 1][0] = y;\n if (s1) y -= s2 / s1;\n }\n s0[j - 1][1] += s0[j - 1][0] = y;\n none(series, order);\n}\n","import constant from \"./constant\";\nimport descending from \"./descending\";\nimport identity from \"./identity\";\nimport {tau} from \"./math\";\n\nexport default function() {\n var value = identity,\n sortValues = descending,\n sort = null,\n startAngle = constant(0),\n endAngle = constant(tau),\n padAngle = constant(0);\n\n function pie(data) {\n var i,\n n = data.length,\n j,\n k,\n sum = 0,\n index = new Array(n),\n arcs = new Array(n),\n a0 = +startAngle.apply(this, arguments),\n da = Math.min(tau, Math.max(-tau, endAngle.apply(this, arguments) - a0)),\n a1,\n p = Math.min(Math.abs(da) / n, padAngle.apply(this, arguments)),\n pa = p * (da < 0 ? -1 : 1),\n v;\n\n for (i = 0; i < n; ++i) {\n if ((v = arcs[index[i] = i] = +value(data[i], i, data)) > 0) {\n sum += v;\n }\n }\n\n // Optionally sort the arcs by previously-computed values or by data.\n if (sortValues != null) index.sort(function(i, j) { return sortValues(arcs[i], arcs[j]); });\n else if (sort != null) index.sort(function(i, j) { return sort(data[i], data[j]); });\n\n // Compute the arcs! They are stored in the original data's order.\n for (i = 0, k = sum ? (da - n * pa) / sum : 0; i < n; ++i, a0 = a1) {\n j = index[i], v = arcs[j], a1 = a0 + (v > 0 ? v * k : 0) + pa, arcs[j] = {\n data: data[j],\n index: i,\n value: v,\n startAngle: a0,\n endAngle: a1,\n padAngle: p\n };\n }\n\n return arcs;\n }\n\n pie.value = function(_) {\n return arguments.length ? (value = typeof _ === \"function\" ? _ : constant(+_), pie) : value;\n };\n\n pie.sortValues = function(_) {\n return arguments.length ? (sortValues = _, sort = null, pie) : sortValues;\n };\n\n pie.sort = function(_) {\n return arguments.length ? (sort = _, sortValues = null, pie) : sort;\n };\n\n pie.startAngle = function(_) {\n return arguments.length ? (startAngle = typeof _ === \"function\" ? _ : constant(+_), pie) : startAngle;\n };\n\n pie.endAngle = function(_) {\n return arguments.length ? (endAngle = typeof _ === \"function\" ? _ : constant(+_), pie) : endAngle;\n };\n\n pie.padAngle = function(_) {\n return arguments.length ? (padAngle = typeof _ === \"function\" ? _ : constant(+_), pie) : padAngle;\n };\n\n return pie;\n}\n","export const DM_OPERATION_GROUP = 'group';\n","export var xhtml = \"http://www.w3.org/1999/xhtml\";\n\nexport default {\n svg: \"http://www.w3.org/2000/svg\",\n xhtml: xhtml,\n xlink: \"http://www.w3.org/1999/xlink\",\n xml: \"http://www.w3.org/XML/1998/namespace\",\n xmlns: \"http://www.w3.org/2000/xmlns/\"\n};\n","import namespaces from \"./namespaces\";\n\nexport default function(name) {\n var prefix = name += \"\", i = prefix.indexOf(\":\");\n if (i >= 0 && (prefix = name.slice(0, i)) !== \"xmlns\") name = name.slice(i + 1);\n return namespaces.hasOwnProperty(prefix) ? {space: namespaces[prefix], local: name} : name;\n}\n","import namespace from \"./namespace\";\nimport {xhtml} from \"./namespaces\";\n\nfunction creatorInherit(name) {\n return function() {\n var document = this.ownerDocument,\n uri = this.namespaceURI;\n return uri === xhtml && document.documentElement.namespaceURI === xhtml\n ? document.createElement(name)\n : document.createElementNS(uri, name);\n };\n}\n\nfunction creatorFixed(fullname) {\n return function() {\n return this.ownerDocument.createElementNS(fullname.space, fullname.local);\n };\n}\n\nexport default function(name) {\n var fullname = namespace(name);\n return (fullname.local\n ? creatorFixed\n : creatorInherit)(fullname);\n}\n","function none() {}\n\nexport default function(selector) {\n return selector == null ? none : function() {\n return this.querySelector(selector);\n };\n}\n","function empty() {\n return [];\n}\n\nexport default function(selector) {\n return selector == null ? empty : function() {\n return this.querySelectorAll(selector);\n };\n}\n","export default function(selector) {\n return function() {\n return this.matches(selector);\n };\n}\n","export default function(update) {\n return new Array(update.length);\n}\n","import sparse from \"./sparse\";\nimport {Selection} from \"./index\";\n\nexport default function() {\n return new Selection(this._enter || this._groups.map(sparse), this._parents);\n}\n\nexport function EnterNode(parent, datum) {\n this.ownerDocument = parent.ownerDocument;\n this.namespaceURI = parent.namespaceURI;\n this._next = null;\n this._parent = parent;\n this.__data__ = datum;\n}\n\nEnterNode.prototype = {\n constructor: EnterNode,\n appendChild: function(child) { return this._parent.insertBefore(child, this._next); },\n insertBefore: function(child, next) { return this._parent.insertBefore(child, next); },\n querySelector: function(selector) { return this._parent.querySelector(selector); },\n querySelectorAll: function(selector) { return this._parent.querySelectorAll(selector); }\n};\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","import {Selection} from \"./index\";\nimport {EnterNode} from \"./enter\";\nimport constant from \"../constant\";\n\nvar keyPrefix = \"$\"; // Protect against keys like “__proto__”.\n\nfunction bindIndex(parent, group, enter, update, exit, data) {\n var i = 0,\n node,\n groupLength = group.length,\n dataLength = data.length;\n\n // Put any non-null nodes that fit into update.\n // Put any null nodes into enter.\n // Put any remaining data into enter.\n for (; i < dataLength; ++i) {\n if (node = group[i]) {\n node.__data__ = data[i];\n update[i] = node;\n } else {\n enter[i] = new EnterNode(parent, data[i]);\n }\n }\n\n // Put any non-null nodes that don’t fit into exit.\n for (; i < groupLength; ++i) {\n if (node = group[i]) {\n exit[i] = node;\n }\n }\n}\n\nfunction bindKey(parent, group, enter, update, exit, data, key) {\n var i,\n node,\n nodeByKeyValue = {},\n groupLength = group.length,\n dataLength = data.length,\n keyValues = new Array(groupLength),\n keyValue;\n\n // Compute the key for each node.\n // If multiple nodes have the same key, the duplicates are added to exit.\n for (i = 0; i < groupLength; ++i) {\n if (node = group[i]) {\n keyValues[i] = keyValue = keyPrefix + key.call(node, node.__data__, i, group);\n if (keyValue in nodeByKeyValue) {\n exit[i] = node;\n } else {\n nodeByKeyValue[keyValue] = node;\n }\n }\n }\n\n // Compute the key for each datum.\n // If there a node associated with this key, join and add it to update.\n // If there is not (or the key is a duplicate), add it to enter.\n for (i = 0; i < dataLength; ++i) {\n keyValue = keyPrefix + key.call(parent, data[i], i, data);\n if (node = nodeByKeyValue[keyValue]) {\n update[i] = node;\n node.__data__ = data[i];\n nodeByKeyValue[keyValue] = null;\n } else {\n enter[i] = new EnterNode(parent, data[i]);\n }\n }\n\n // Add any remaining nodes that were not bound to data to exit.\n for (i = 0; i < groupLength; ++i) {\n if ((node = group[i]) && (nodeByKeyValue[keyValues[i]] === node)) {\n exit[i] = node;\n }\n }\n}\n\nexport default function(value, key) {\n if (!value) {\n data = new Array(this.size()), j = -1;\n this.each(function(d) { data[++j] = d; });\n return data;\n }\n\n var bind = key ? bindKey : bindIndex,\n parents = this._parents,\n groups = this._groups;\n\n if (typeof value !== \"function\") value = constant(value);\n\n for (var m = groups.length, update = new Array(m), enter = new Array(m), exit = new Array(m), j = 0; j < m; ++j) {\n var parent = parents[j],\n group = groups[j],\n groupLength = group.length,\n data = value.call(parent, parent && parent.__data__, j, parents),\n dataLength = data.length,\n enterGroup = enter[j] = new Array(dataLength),\n updateGroup = update[j] = new Array(dataLength),\n exitGroup = exit[j] = new Array(groupLength);\n\n bind(parent, group, enterGroup, updateGroup, exitGroup, data, key);\n\n // Now connect the enter nodes to their following update node, such that\n // appendChild can insert the materialized enter node before this node,\n // rather than at the end of the parent node.\n for (var i0 = 0, i1 = 0, previous, next; i0 < dataLength; ++i0) {\n if (previous = enterGroup[i0]) {\n if (i0 >= i1) i1 = i0 + 1;\n while (!(next = updateGroup[i1]) && ++i1 < dataLength);\n previous._next = next || null;\n }\n }\n }\n\n update = new Selection(update, parents);\n update._enter = enter;\n update._exit = exit;\n return update;\n}\n","import {Selection} from \"./index\";\n\nexport default function(compare) {\n if (!compare) compare = ascending;\n\n function compareNode(a, b) {\n return a && b ? compare(a.__data__, b.__data__) : !a - !b;\n }\n\n for (var groups = this._groups, m = groups.length, sortgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, sortgroup = sortgroups[j] = new Array(n), node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n sortgroup[i] = node;\n }\n }\n sortgroup.sort(compareNode);\n }\n\n return new Selection(sortgroups, this._parents).order();\n}\n\nfunction ascending(a, b) {\n return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n","import namespace from \"../namespace\";\n\nfunction attrRemove(name) {\n return function() {\n this.removeAttribute(name);\n };\n}\n\nfunction attrRemoveNS(fullname) {\n return function() {\n this.removeAttributeNS(fullname.space, fullname.local);\n };\n}\n\nfunction attrConstant(name, value) {\n return function() {\n this.setAttribute(name, value);\n };\n}\n\nfunction attrConstantNS(fullname, value) {\n return function() {\n this.setAttributeNS(fullname.space, fullname.local, value);\n };\n}\n\nfunction attrFunction(name, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) this.removeAttribute(name);\n else this.setAttribute(name, v);\n };\n}\n\nfunction attrFunctionNS(fullname, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) this.removeAttributeNS(fullname.space, fullname.local);\n else this.setAttributeNS(fullname.space, fullname.local, v);\n };\n}\n\nexport default function(name, value) {\n var fullname = namespace(name);\n\n if (arguments.length < 2) {\n var node = this.node();\n return fullname.local\n ? node.getAttributeNS(fullname.space, fullname.local)\n : node.getAttribute(fullname);\n }\n\n return this.each((value == null\n ? (fullname.local ? attrRemoveNS : attrRemove) : (typeof value === \"function\"\n ? (fullname.local ? attrFunctionNS : attrFunction)\n : (fullname.local ? attrConstantNS : attrConstant)))(fullname, value));\n}\n","export default function(node) {\n return (node.ownerDocument && node.ownerDocument.defaultView) // node is a Node\n || (node.document && node) // node is a Window\n || node.defaultView; // node is a Document\n}\n","import defaultView from \"../window\";\n\nfunction styleRemove(name) {\n return function() {\n this.style.removeProperty(name);\n };\n}\n\nfunction styleConstant(name, value, priority) {\n return function() {\n this.style.setProperty(name, value, priority);\n };\n}\n\nfunction styleFunction(name, value, priority) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) this.style.removeProperty(name);\n else this.style.setProperty(name, v, priority);\n };\n}\n\nexport default function(name, value, priority) {\n return arguments.length > 1\n ? this.each((value == null\n ? styleRemove : typeof value === \"function\"\n ? styleFunction\n : styleConstant)(name, value, priority == null ? \"\" : priority))\n : styleValue(this.node(), name);\n}\n\nexport function styleValue(node, name) {\n return node.style.getPropertyValue(name)\n || defaultView(node).getComputedStyle(node, null).getPropertyValue(name);\n}\n","function classArray(string) {\n return string.trim().split(/^|\\s+/);\n}\n\nfunction classList(node) {\n return node.classList || new ClassList(node);\n}\n\nfunction ClassList(node) {\n this._node = node;\n this._names = classArray(node.getAttribute(\"class\") || \"\");\n}\n\nClassList.prototype = {\n add: function(name) {\n var i = this._names.indexOf(name);\n if (i < 0) {\n this._names.push(name);\n this._node.setAttribute(\"class\", this._names.join(\" \"));\n }\n },\n remove: function(name) {\n var i = this._names.indexOf(name);\n if (i >= 0) {\n this._names.splice(i, 1);\n this._node.setAttribute(\"class\", this._names.join(\" \"));\n }\n },\n contains: function(name) {\n return this._names.indexOf(name) >= 0;\n }\n};\n\nfunction classedAdd(node, names) {\n var list = classList(node), i = -1, n = names.length;\n while (++i < n) list.add(names[i]);\n}\n\nfunction classedRemove(node, names) {\n var list = classList(node), i = -1, n = names.length;\n while (++i < n) list.remove(names[i]);\n}\n\nfunction classedTrue(names) {\n return function() {\n classedAdd(this, names);\n };\n}\n\nfunction classedFalse(names) {\n return function() {\n classedRemove(this, names);\n };\n}\n\nfunction classedFunction(names, value) {\n return function() {\n (value.apply(this, arguments) ? classedAdd : classedRemove)(this, names);\n };\n}\n\nexport default function(name, value) {\n var names = classArray(name + \"\");\n\n if (arguments.length < 2) {\n var list = classList(this.node()), i = -1, n = names.length;\n while (++i < n) if (!list.contains(names[i])) return false;\n return true;\n }\n\n return this.each((typeof value === \"function\"\n ? classedFunction : value\n ? classedTrue\n : classedFalse)(names, value));\n}\n","function textRemove() {\n this.textContent = \"\";\n}\n\nfunction textConstant(value) {\n return function() {\n this.textContent = value;\n };\n}\n\nfunction textFunction(value) {\n return function() {\n var v = value.apply(this, arguments);\n this.textContent = v == null ? \"\" : v;\n };\n}\n\nexport default function(value) {\n return arguments.length\n ? this.each(value == null\n ? textRemove : (typeof value === \"function\"\n ? textFunction\n : textConstant)(value))\n : this.node().textContent;\n}\n","function htmlRemove() {\n this.innerHTML = \"\";\n}\n\nfunction htmlConstant(value) {\n return function() {\n this.innerHTML = value;\n };\n}\n\nfunction htmlFunction(value) {\n return function() {\n var v = value.apply(this, arguments);\n this.innerHTML = v == null ? \"\" : v;\n };\n}\n\nexport default function(value) {\n return arguments.length\n ? this.each(value == null\n ? htmlRemove : (typeof value === \"function\"\n ? htmlFunction\n : htmlConstant)(value))\n : this.node().innerHTML;\n}\n","function raise() {\n if (this.nextSibling) this.parentNode.appendChild(this);\n}\n\nexport default function() {\n return this.each(raise);\n}\n","function lower() {\n if (this.previousSibling) this.parentNode.insertBefore(this, this.parentNode.firstChild);\n}\n\nexport default function() {\n return this.each(lower);\n}\n","import creator from \"../creator\";\nimport selector from \"../selector\";\n\nfunction constantNull() {\n return null;\n}\n\nexport default function(name, before) {\n var create = typeof name === \"function\" ? name : creator(name),\n select = before == null ? constantNull : typeof before === \"function\" ? before : selector(before);\n return this.select(function() {\n return this.insertBefore(create.apply(this, arguments), select.apply(this, arguments) || null);\n });\n}\n","function remove() {\n var parent = this.parentNode;\n if (parent) parent.removeChild(this);\n}\n\nexport default function() {\n return this.each(remove);\n}\n","function selection_cloneShallow() {\n return this.parentNode.insertBefore(this.cloneNode(false), this.nextSibling);\n}\n\nfunction selection_cloneDeep() {\n return this.parentNode.insertBefore(this.cloneNode(true), this.nextSibling);\n}\n\nexport default function(deep) {\n return this.select(deep ? selection_cloneDeep : selection_cloneShallow);\n}\n","var filterEvents = {};\n\nexport var event = null;\n\nif (typeof document !== \"undefined\") {\n var element = document.documentElement;\n if (!(\"onmouseenter\" in element)) {\n filterEvents = {mouseenter: \"mouseover\", mouseleave: \"mouseout\"};\n }\n}\n\nfunction filterContextListener(listener, index, group) {\n listener = contextListener(listener, index, group);\n return function(event) {\n var related = event.relatedTarget;\n if (!related || (related !== this && !(related.compareDocumentPosition(this) & 8))) {\n listener.call(this, event);\n }\n };\n}\n\nfunction contextListener(listener, index, group) {\n return function(event1) {\n var event0 = event; // Events can be reentrant (e.g., focus).\n event = event1;\n try {\n listener.call(this, this.__data__, index, group);\n } finally {\n event = event0;\n }\n };\n}\n\nfunction parseTypenames(typenames) {\n return typenames.trim().split(/^|\\s+/).map(function(t) {\n var name = \"\", i = t.indexOf(\".\");\n if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);\n return {type: t, name: name};\n });\n}\n\nfunction onRemove(typename) {\n return function() {\n var on = this.__on;\n if (!on) return;\n for (var j = 0, i = -1, m = on.length, o; j < m; ++j) {\n if (o = on[j], (!typename.type || o.type === typename.type) && o.name === typename.name) {\n this.removeEventListener(o.type, o.listener, o.capture);\n } else {\n on[++i] = o;\n }\n }\n if (++i) on.length = i;\n else delete this.__on;\n };\n}\n\nfunction onAdd(typename, value, capture) {\n var wrap = filterEvents.hasOwnProperty(typename.type) ? filterContextListener : contextListener;\n return function(d, i, group) {\n var on = this.__on, o, listener = wrap(value, i, group);\n if (on) for (var j = 0, m = on.length; j < m; ++j) {\n if ((o = on[j]).type === typename.type && o.name === typename.name) {\n this.removeEventListener(o.type, o.listener, o.capture);\n this.addEventListener(o.type, o.listener = listener, o.capture = capture);\n o.value = value;\n return;\n }\n }\n this.addEventListener(typename.type, listener, capture);\n o = {type: typename.type, name: typename.name, value: value, listener: listener, capture: capture};\n if (!on) this.__on = [o];\n else on.push(o);\n };\n}\n\nexport default function(typename, value, capture) {\n var typenames = parseTypenames(typename + \"\"), i, n = typenames.length, t;\n\n if (arguments.length < 2) {\n var on = this.node().__on;\n if (on) for (var j = 0, m = on.length, o; j < m; ++j) {\n for (i = 0, o = on[j]; i < n; ++i) {\n if ((t = typenames[i]).type === o.type && t.name === o.name) {\n return o.value;\n }\n }\n }\n return;\n }\n\n on = value ? onAdd : onRemove;\n if (capture == null) capture = false;\n for (i = 0; i < n; ++i) this.each(on(typenames[i], value, capture));\n return this;\n}\n\nexport function customEvent(event1, listener, that, args) {\n var event0 = event;\n event1.sourceEvent = event;\n event = event1;\n try {\n return listener.apply(that, args);\n } finally {\n event = event0;\n }\n}\n","import defaultView from \"../window\";\n\nfunction dispatchEvent(node, type, params) {\n var window = defaultView(node),\n event = window.CustomEvent;\n\n if (typeof event === \"function\") {\n event = new event(type, params);\n } else {\n event = window.document.createEvent(\"Event\");\n if (params) event.initEvent(type, params.bubbles, params.cancelable), event.detail = params.detail;\n else event.initEvent(type, false, false);\n }\n\n node.dispatchEvent(event);\n}\n\nfunction dispatchConstant(type, params) {\n return function() {\n return dispatchEvent(this, type, params);\n };\n}\n\nfunction dispatchFunction(type, params) {\n return function() {\n return dispatchEvent(this, type, params.apply(this, arguments));\n };\n}\n\nexport default function(type, params) {\n return this.each((typeof params === \"function\"\n ? dispatchFunction\n : dispatchConstant)(type, params));\n}\n","import selection_select from \"./select\";\nimport selection_selectAll from \"./selectAll\";\nimport selection_filter from \"./filter\";\nimport selection_data from \"./data\";\nimport selection_enter from \"./enter\";\nimport selection_exit from \"./exit\";\nimport selection_join from \"./join\";\nimport selection_merge from \"./merge\";\nimport selection_order from \"./order\";\nimport selection_sort from \"./sort\";\nimport selection_call from \"./call\";\nimport selection_nodes from \"./nodes\";\nimport selection_node from \"./node\";\nimport selection_size from \"./size\";\nimport selection_empty from \"./empty\";\nimport selection_each from \"./each\";\nimport selection_attr from \"./attr\";\nimport selection_style from \"./style\";\nimport selection_property from \"./property\";\nimport selection_classed from \"./classed\";\nimport selection_text from \"./text\";\nimport selection_html from \"./html\";\nimport selection_raise from \"./raise\";\nimport selection_lower from \"./lower\";\nimport selection_append from \"./append\";\nimport selection_insert from \"./insert\";\nimport selection_remove from \"./remove\";\nimport selection_clone from \"./clone\";\nimport selection_datum from \"./datum\";\nimport selection_on from \"./on\";\nimport selection_dispatch from \"./dispatch\";\n\nexport var root = [null];\n\nexport function Selection(groups, parents) {\n this._groups = groups;\n this._parents = parents;\n}\n\nfunction selection() {\n return new Selection([[document.documentElement]], root);\n}\n\nSelection.prototype = selection.prototype = {\n constructor: Selection,\n select: selection_select,\n selectAll: selection_selectAll,\n filter: selection_filter,\n data: selection_data,\n enter: selection_enter,\n exit: selection_exit,\n join: selection_join,\n merge: selection_merge,\n order: selection_order,\n sort: selection_sort,\n call: selection_call,\n nodes: selection_nodes,\n node: selection_node,\n size: selection_size,\n empty: selection_empty,\n each: selection_each,\n attr: selection_attr,\n style: selection_style,\n property: selection_property,\n classed: selection_classed,\n text: selection_text,\n html: selection_html,\n raise: selection_raise,\n lower: selection_lower,\n append: selection_append,\n insert: selection_insert,\n remove: selection_remove,\n clone: selection_clone,\n datum: selection_datum,\n on: selection_on,\n dispatch: selection_dispatch\n};\n\nexport default selection;\n","import {Selection} from \"./index\";\nimport selector from \"../selector\";\n\nexport default function(select) {\n if (typeof select !== \"function\") select = selector(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) {\n if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) {\n if (\"__data__\" in node) subnode.__data__ = node.__data__;\n subgroup[i] = subnode;\n }\n }\n }\n\n return new Selection(subgroups, this._parents);\n}\n","import {Selection} from \"./index\";\nimport selectorAll from \"../selectorAll\";\n\nexport default function(select) {\n if (typeof select !== \"function\") select = selectorAll(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n subgroups.push(select.call(node, node.__data__, i, group));\n parents.push(node);\n }\n }\n }\n\n return new Selection(subgroups, parents);\n}\n","import {Selection} from \"./index\";\nimport matcher from \"../matcher\";\n\nexport default function(match) {\n if (typeof match !== \"function\") match = matcher(match);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) {\n if ((node = group[i]) && match.call(node, node.__data__, i, group)) {\n subgroup.push(node);\n }\n }\n }\n\n return new Selection(subgroups, this._parents);\n}\n","import sparse from \"./sparse\";\nimport {Selection} from \"./index\";\n\nexport default function() {\n return new Selection(this._exit || this._groups.map(sparse), this._parents);\n}\n","export default function(onenter, onupdate, onexit) {\n var enter = this.enter(), update = this, exit = this.exit();\n enter = typeof onenter === \"function\" ? onenter(enter) : enter.append(onenter + \"\");\n if (onupdate != null) update = onupdate(update);\n if (onexit == null) exit.remove(); else onexit(exit);\n return enter && update ? enter.merge(update).order() : update;\n}\n","import {Selection} from \"./index\";\n\nexport default function(selection) {\n\n for (var groups0 = this._groups, groups1 = selection._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) {\n for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {\n if (node = group0[i] || group1[i]) {\n merge[i] = node;\n }\n }\n }\n\n for (; j < m0; ++j) {\n merges[j] = groups0[j];\n }\n\n return new Selection(merges, this._parents);\n}\n","export default function() {\n\n for (var groups = this._groups, j = -1, m = groups.length; ++j < m;) {\n for (var group = groups[j], i = group.length - 1, next = group[i], node; --i >= 0;) {\n if (node = group[i]) {\n if (next && node.compareDocumentPosition(next) ^ 4) next.parentNode.insertBefore(node, next);\n next = node;\n }\n }\n }\n\n return this;\n}\n","export default function() {\n var callback = arguments[0];\n arguments[0] = this;\n callback.apply(null, arguments);\n return this;\n}\n","export default function() {\n var nodes = new Array(this.size()), i = -1;\n this.each(function() { nodes[++i] = this; });\n return nodes;\n}\n","export default function() {\n\n for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n for (var group = groups[j], i = 0, n = group.length; i < n; ++i) {\n var node = group[i];\n if (node) return node;\n }\n }\n\n return null;\n}\n","export default function() {\n var size = 0;\n this.each(function() { ++size; });\n return size;\n}\n","export default function() {\n return !this.node();\n}\n","export default function(callback) {\n\n for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n for (var group = groups[j], i = 0, n = group.length, node; i < n; ++i) {\n if (node = group[i]) callback.call(node, node.__data__, i, group);\n }\n }\n\n return this;\n}\n","function propertyRemove(name) {\n return function() {\n delete this[name];\n };\n}\n\nfunction propertyConstant(name, value) {\n return function() {\n this[name] = value;\n };\n}\n\nfunction propertyFunction(name, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) delete this[name];\n else this[name] = v;\n };\n}\n\nexport default function(name, value) {\n return arguments.length > 1\n ? this.each((value == null\n ? propertyRemove : typeof value === \"function\"\n ? propertyFunction\n : propertyConstant)(name, value))\n : this.node()[name];\n}\n","import creator from \"../creator\";\n\nexport default function(name) {\n var create = typeof name === \"function\" ? name : creator(name);\n return this.select(function() {\n return this.appendChild(create.apply(this, arguments));\n });\n}\n","export default function(value) {\n return arguments.length\n ? this.property(\"__data__\", value)\n : this.node().__data__;\n}\n","import {Selection, root} from \"./selection/index\";\n\nexport default function(selector) {\n return typeof selector === \"string\"\n ? new Selection([[document.querySelector(selector)]], [document.documentElement])\n : new Selection([[selector]], root);\n}\n","var nextId = 0;\n\nexport default function local() {\n return new Local;\n}\n\nfunction Local() {\n this._ = \"@\" + (++nextId).toString(36);\n}\n\nLocal.prototype = local.prototype = {\n constructor: Local,\n get: function(node) {\n var id = this._;\n while (!(id in node)) if (!(node = node.parentNode)) return;\n return node[id];\n },\n set: function(node, value) {\n return node[this._] = value;\n },\n remove: function(node) {\n return this._ in node && delete node[this._];\n },\n toString: function() {\n return this._;\n }\n};\n","import {event} from \"./selection/on\";\n\nexport default function() {\n var current = event, source;\n while (source = current.sourceEvent) current = source;\n return current;\n}\n","export default function(node, event) {\n var svg = node.ownerSVGElement || node;\n\n if (svg.createSVGPoint) {\n var point = svg.createSVGPoint();\n point.x = event.clientX, point.y = event.clientY;\n point = point.matrixTransform(node.getScreenCTM().inverse());\n return [point.x, point.y];\n }\n\n var rect = node.getBoundingClientRect();\n return [event.clientX - rect.left - node.clientLeft, event.clientY - rect.top - node.clientTop];\n}\n","import sourceEvent from \"./sourceEvent\";\nimport point from \"./point\";\n\nexport default function(node) {\n var event = sourceEvent();\n if (event.changedTouches) event = event.changedTouches[0];\n return point(node, event);\n}\n","import sourceEvent from \"./sourceEvent\";\nimport point from \"./point\";\n\nexport default function(node, touches, identifier) {\n if (arguments.length < 3) identifier = touches, touches = sourceEvent().changedTouches;\n\n for (var i = 0, n = touches ? touches.length : 0, touch; i < n; ++i) {\n if ((touch = touches[i]).identifier === identifier) {\n return point(node, touch);\n }\n }\n\n return null;\n}\n","var noop = {value: function() {}};\n\nfunction dispatch() {\n for (var i = 0, n = arguments.length, _ = {}, t; i < n; ++i) {\n if (!(t = arguments[i] + \"\") || (t in _)) throw new Error(\"illegal type: \" + t);\n _[t] = [];\n }\n return new Dispatch(_);\n}\n\nfunction Dispatch(_) {\n this._ = _;\n}\n\nfunction parseTypenames(typenames, types) {\n return typenames.trim().split(/^|\\s+/).map(function(t) {\n var name = \"\", i = t.indexOf(\".\");\n if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);\n if (t && !types.hasOwnProperty(t)) throw new Error(\"unknown type: \" + t);\n return {type: t, name: name};\n });\n}\n\nDispatch.prototype = dispatch.prototype = {\n constructor: Dispatch,\n on: function(typename, callback) {\n var _ = this._,\n T = parseTypenames(typename + \"\", _),\n t,\n i = -1,\n n = T.length;\n\n // If no callback was specified, return the callback of the given type and name.\n if (arguments.length < 2) {\n while (++i < n) if ((t = (typename = T[i]).type) && (t = get(_[t], typename.name))) return t;\n return;\n }\n\n // If a type was specified, set the callback for the given type and name.\n // Otherwise, if a null callback was specified, remove callbacks of the given name.\n if (callback != null && typeof callback !== \"function\") throw new Error(\"invalid callback: \" + callback);\n while (++i < n) {\n if (t = (typename = T[i]).type) _[t] = set(_[t], typename.name, callback);\n else if (callback == null) for (t in _) _[t] = set(_[t], typename.name, null);\n }\n\n return this;\n },\n copy: function() {\n var copy = {}, _ = this._;\n for (var t in _) copy[t] = _[t].slice();\n return new Dispatch(copy);\n },\n call: function(type, that) {\n if ((n = arguments.length - 2) > 0) for (var args = new Array(n), i = 0, n, t; i < n; ++i) args[i] = arguments[i + 2];\n if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\n for (t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n },\n apply: function(type, that, args) {\n if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\n for (var t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n }\n};\n\nfunction get(type, name) {\n for (var i = 0, n = type.length, c; i < n; ++i) {\n if ((c = type[i]).name === name) {\n return c.value;\n }\n }\n}\n\nfunction set(type, name, callback) {\n for (var i = 0, n = type.length; i < n; ++i) {\n if (type[i].name === name) {\n type[i] = noop, type = type.slice(0, i).concat(type.slice(i + 1));\n break;\n }\n }\n if (callback != null) type.push({name: name, value: callback});\n return type;\n}\n\nexport default dispatch;\n","import {event} from \"d3-selection\";\n\nexport function nopropagation() {\n event.stopImmediatePropagation();\n}\n\nexport default function() {\n event.preventDefault();\n event.stopImmediatePropagation();\n}\n","import {select} from \"d3-selection\";\nimport noevent from \"./noevent\";\n\nexport default function(view) {\n var root = view.document.documentElement,\n selection = select(view).on(\"dragstart.drag\", noevent, true);\n if (\"onselectstart\" in root) {\n selection.on(\"selectstart.drag\", noevent, true);\n } else {\n root.__noselect = root.style.MozUserSelect;\n root.style.MozUserSelect = \"none\";\n }\n}\n\nexport function yesdrag(view, noclick) {\n var root = view.document.documentElement,\n selection = select(view).on(\"dragstart.drag\", null);\n if (noclick) {\n selection.on(\"click.drag\", noevent, true);\n setTimeout(function() { selection.on(\"click.drag\", null); }, 0);\n }\n if (\"onselectstart\" in root) {\n selection.on(\"selectstart.drag\", null);\n } else {\n root.style.MozUserSelect = root.__noselect;\n delete root.__noselect;\n }\n}\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","export default function DragEvent(target, type, subject, id, active, x, y, dx, dy, dispatch) {\n this.target = target;\n this.type = type;\n this.subject = subject;\n this.identifier = id;\n this.active = active;\n this.x = x;\n this.y = y;\n this.dx = dx;\n this.dy = dy;\n this._ = dispatch;\n}\n\nDragEvent.prototype.on = function() {\n var value = this._.on.apply(this._, arguments);\n return value === this._ ? this : value;\n};\n","import {dispatch} from \"d3-dispatch\";\nimport {event, customEvent, select, mouse, touch} from \"d3-selection\";\nimport nodrag, {yesdrag} from \"./nodrag\";\nimport noevent, {nopropagation} from \"./noevent\";\nimport constant from \"./constant\";\nimport DragEvent from \"./event\";\n\n// Ignore right-click, since that should open the context menu.\nfunction defaultFilter() {\n return !event.button;\n}\n\nfunction defaultContainer() {\n return this.parentNode;\n}\n\nfunction defaultSubject(d) {\n return d == null ? {x: event.x, y: event.y} : d;\n}\n\nfunction defaultTouchable() {\n return \"ontouchstart\" in this;\n}\n\nexport default function() {\n var filter = defaultFilter,\n container = defaultContainer,\n subject = defaultSubject,\n touchable = defaultTouchable,\n gestures = {},\n listeners = dispatch(\"start\", \"drag\", \"end\"),\n active = 0,\n mousedownx,\n mousedowny,\n mousemoving,\n touchending,\n clickDistance2 = 0;\n\n function drag(selection) {\n selection\n .on(\"mousedown.drag\", mousedowned)\n .filter(touchable)\n .on(\"touchstart.drag\", touchstarted)\n .on(\"touchmove.drag\", touchmoved)\n .on(\"touchend.drag touchcancel.drag\", touchended)\n .style(\"touch-action\", \"none\")\n .style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\");\n }\n\n function mousedowned() {\n if (touchending || !filter.apply(this, arguments)) return;\n var gesture = beforestart(\"mouse\", container.apply(this, arguments), mouse, this, arguments);\n if (!gesture) return;\n select(event.view).on(\"mousemove.drag\", mousemoved, true).on(\"mouseup.drag\", mouseupped, true);\n nodrag(event.view);\n nopropagation();\n mousemoving = false;\n mousedownx = event.clientX;\n mousedowny = event.clientY;\n gesture(\"start\");\n }\n\n function mousemoved() {\n noevent();\n if (!mousemoving) {\n var dx = event.clientX - mousedownx, dy = event.clientY - mousedowny;\n mousemoving = dx * dx + dy * dy > clickDistance2;\n }\n gestures.mouse(\"drag\");\n }\n\n function mouseupped() {\n select(event.view).on(\"mousemove.drag mouseup.drag\", null);\n yesdrag(event.view, mousemoving);\n noevent();\n gestures.mouse(\"end\");\n }\n\n function touchstarted() {\n if (!filter.apply(this, arguments)) return;\n var touches = event.changedTouches,\n c = container.apply(this, arguments),\n n = touches.length, i, gesture;\n\n for (i = 0; i < n; ++i) {\n if (gesture = beforestart(touches[i].identifier, c, touch, this, arguments)) {\n nopropagation();\n gesture(\"start\");\n }\n }\n }\n\n function touchmoved() {\n var touches = event.changedTouches,\n n = touches.length, i, gesture;\n\n for (i = 0; i < n; ++i) {\n if (gesture = gestures[touches[i].identifier]) {\n noevent();\n gesture(\"drag\");\n }\n }\n }\n\n function touchended() {\n var touches = event.changedTouches,\n n = touches.length, i, gesture;\n\n if (touchending) clearTimeout(touchending);\n touchending = setTimeout(function() { touchending = null; }, 500); // Ghost clicks are delayed!\n for (i = 0; i < n; ++i) {\n if (gesture = gestures[touches[i].identifier]) {\n nopropagation();\n gesture(\"end\");\n }\n }\n }\n\n function beforestart(id, container, point, that, args) {\n var p = point(container, id), s, dx, dy,\n sublisteners = listeners.copy();\n\n if (!customEvent(new DragEvent(drag, \"beforestart\", s, id, active, p[0], p[1], 0, 0, sublisteners), function() {\n if ((event.subject = s = subject.apply(that, args)) == null) return false;\n dx = s.x - p[0] || 0;\n dy = s.y - p[1] || 0;\n return true;\n })) return;\n\n return function gesture(type) {\n var p0 = p, n;\n switch (type) {\n case \"start\": gestures[id] = gesture, n = active++; break;\n case \"end\": delete gestures[id], --active; // nobreak\n case \"drag\": p = point(container, id), n = active; break;\n }\n customEvent(new DragEvent(drag, type, s, id, n, p[0] + dx, p[1] + dy, p[0] - p0[0], p[1] - p0[1], sublisteners), sublisteners.apply, sublisteners, [type, that, args]);\n };\n }\n\n drag.filter = function(_) {\n return arguments.length ? (filter = typeof _ === \"function\" ? _ : constant(!!_), drag) : filter;\n };\n\n drag.container = function(_) {\n return arguments.length ? (container = typeof _ === \"function\" ? _ : constant(_), drag) : container;\n };\n\n drag.subject = function(_) {\n return arguments.length ? (subject = typeof _ === \"function\" ? _ : constant(_), drag) : subject;\n };\n\n drag.touchable = function(_) {\n return arguments.length ? (touchable = typeof _ === \"function\" ? _ : constant(!!_), drag) : touchable;\n };\n\n drag.on = function() {\n var value = listeners.on.apply(listeners, arguments);\n return value === listeners ? drag : value;\n };\n\n drag.clickDistance = function(_) {\n return arguments.length ? (clickDistance2 = (_ = +_) * _, drag) : Math.sqrt(clickDistance2);\n };\n\n return drag;\n}\n","var frame = 0, // is an animation frame pending?\n timeout = 0, // is a timeout pending?\n interval = 0, // are any timers active?\n pokeDelay = 1000, // how frequently we check for clock skew\n taskHead,\n taskTail,\n clockLast = 0,\n clockNow = 0,\n clockSkew = 0,\n clock = typeof performance === \"object\" && performance.now ? performance : Date,\n setFrame = typeof window === \"object\" && window.requestAnimationFrame ? window.requestAnimationFrame.bind(window) : function(f) { setTimeout(f, 17); };\n\nexport function now() {\n return clockNow || (setFrame(clearNow), clockNow = clock.now() + clockSkew);\n}\n\nfunction clearNow() {\n clockNow = 0;\n}\n\nexport function Timer() {\n this._call =\n this._time =\n this._next = null;\n}\n\nTimer.prototype = timer.prototype = {\n constructor: Timer,\n restart: function(callback, delay, time) {\n if (typeof callback !== \"function\") throw new TypeError(\"callback is not a function\");\n time = (time == null ? now() : +time) + (delay == null ? 0 : +delay);\n if (!this._next && taskTail !== this) {\n if (taskTail) taskTail._next = this;\n else taskHead = this;\n taskTail = this;\n }\n this._call = callback;\n this._time = time;\n sleep();\n },\n stop: function() {\n if (this._call) {\n this._call = null;\n this._time = Infinity;\n sleep();\n }\n }\n};\n\nexport function timer(callback, delay, time) {\n var t = new Timer;\n t.restart(callback, delay, time);\n return t;\n}\n\nexport function timerFlush() {\n now(); // Get the current time, if not already set.\n ++frame; // Pretend we’ve set an alarm, if we haven’t already.\n var t = taskHead, e;\n while (t) {\n if ((e = clockNow - t._time) >= 0) t._call.call(null, e);\n t = t._next;\n }\n --frame;\n}\n\nfunction wake() {\n clockNow = (clockLast = clock.now()) + clockSkew;\n frame = timeout = 0;\n try {\n timerFlush();\n } finally {\n frame = 0;\n nap();\n clockNow = 0;\n }\n}\n\nfunction poke() {\n var now = clock.now(), delay = now - clockLast;\n if (delay > pokeDelay) clockSkew -= delay, clockLast = now;\n}\n\nfunction nap() {\n var t0, t1 = taskHead, t2, time = Infinity;\n while (t1) {\n if (t1._call) {\n if (time > t1._time) time = t1._time;\n t0 = t1, t1 = t1._next;\n } else {\n t2 = t1._next, t1._next = null;\n t1 = t0 ? t0._next = t2 : taskHead = t2;\n }\n }\n taskTail = t0;\n sleep(time);\n}\n\nfunction sleep(time) {\n if (frame) return; // Soonest alarm already set, or will be.\n if (timeout) timeout = clearTimeout(timeout);\n var delay = time - clockNow; // Strictly less than if we recomputed clockNow.\n if (delay > 24) {\n if (time < Infinity) timeout = setTimeout(wake, time - clock.now() - clockSkew);\n if (interval) interval = clearInterval(interval);\n } else {\n if (!interval) clockLast = clock.now(), interval = setInterval(poke, pokeDelay);\n frame = 1, setFrame(wake);\n }\n}\n","import {Timer} from \"./timer\";\n\nexport default function(callback, delay, time) {\n var t = new Timer;\n delay = delay == null ? 0 : +delay;\n t.restart(function(elapsed) {\n t.stop();\n callback(elapsed + delay);\n }, delay, time);\n return t;\n}\n","import {dispatch} from \"d3-dispatch\";\nimport {timer, timeout} from \"d3-timer\";\n\nvar emptyOn = dispatch(\"start\", \"end\", \"cancel\", \"interrupt\");\nvar emptyTween = [];\n\nexport var CREATED = 0;\nexport var SCHEDULED = 1;\nexport var STARTING = 2;\nexport var STARTED = 3;\nexport var RUNNING = 4;\nexport var ENDING = 5;\nexport var ENDED = 6;\n\nexport default function(node, name, id, index, group, timing) {\n var schedules = node.__transition;\n if (!schedules) node.__transition = {};\n else if (id in schedules) return;\n create(node, id, {\n name: name,\n index: index, // For context during callback.\n group: group, // For context during callback.\n on: emptyOn,\n tween: emptyTween,\n time: timing.time,\n delay: timing.delay,\n duration: timing.duration,\n ease: timing.ease,\n timer: null,\n state: CREATED\n });\n}\n\nexport function init(node, id) {\n var schedule = get(node, id);\n if (schedule.state > CREATED) throw new Error(\"too late; already scheduled\");\n return schedule;\n}\n\nexport function set(node, id) {\n var schedule = get(node, id);\n if (schedule.state > STARTED) throw new Error(\"too late; already running\");\n return schedule;\n}\n\nexport function get(node, id) {\n var schedule = node.__transition;\n if (!schedule || !(schedule = schedule[id])) throw new Error(\"transition not found\");\n return schedule;\n}\n\nfunction create(node, id, self) {\n var schedules = node.__transition,\n tween;\n\n // Initialize the self timer when the transition is created.\n // Note the actual delay is not known until the first callback!\n schedules[id] = self;\n self.timer = timer(schedule, 0, self.time);\n\n function schedule(elapsed) {\n self.state = SCHEDULED;\n self.timer.restart(start, self.delay, self.time);\n\n // If the elapsed delay is less than our first sleep, start immediately.\n if (self.delay <= elapsed) start(elapsed - self.delay);\n }\n\n function start(elapsed) {\n var i, j, n, o;\n\n // If the state is not SCHEDULED, then we previously errored on start.\n if (self.state !== SCHEDULED) return stop();\n\n for (i in schedules) {\n o = schedules[i];\n if (o.name !== self.name) continue;\n\n // While this element already has a starting transition during this frame,\n // defer starting an interrupting transition until that transition has a\n // chance to tick (and possibly end); see d3/d3-transition#54!\n if (o.state === STARTED) return timeout(start);\n\n // Interrupt the active transition, if any.\n if (o.state === RUNNING) {\n o.state = ENDED;\n o.timer.stop();\n o.on.call(\"interrupt\", node, node.__data__, o.index, o.group);\n delete schedules[i];\n }\n\n // Cancel any pre-empted transitions.\n else if (+i < id) {\n o.state = ENDED;\n o.timer.stop();\n o.on.call(\"cancel\", node, node.__data__, o.index, o.group);\n delete schedules[i];\n }\n }\n\n // Defer the first tick to end of the current frame; see d3/d3#1576.\n // Note the transition may be canceled after start and before the first tick!\n // Note this must be scheduled before the start event; see d3/d3-transition#16!\n // Assuming this is successful, subsequent callbacks go straight to tick.\n timeout(function() {\n if (self.state === STARTED) {\n self.state = RUNNING;\n self.timer.restart(tick, self.delay, self.time);\n tick(elapsed);\n }\n });\n\n // Dispatch the start event.\n // Note this must be done before the tween are initialized.\n self.state = STARTING;\n self.on.call(\"start\", node, node.__data__, self.index, self.group);\n if (self.state !== STARTING) return; // interrupted\n self.state = STARTED;\n\n // Initialize the tween, deleting null tween.\n tween = new Array(n = self.tween.length);\n for (i = 0, j = -1; i < n; ++i) {\n if (o = self.tween[i].value.call(node, node.__data__, self.index, self.group)) {\n tween[++j] = o;\n }\n }\n tween.length = j + 1;\n }\n\n function tick(elapsed) {\n var t = elapsed < self.duration ? self.ease.call(null, elapsed / self.duration) : (self.timer.restart(stop), self.state = ENDING, 1),\n i = -1,\n n = tween.length;\n\n while (++i < n) {\n tween[i].call(node, t);\n }\n\n // Dispatch the end event.\n if (self.state === ENDING) {\n self.on.call(\"end\", node, node.__data__, self.index, self.group);\n stop();\n }\n }\n\n function stop() {\n self.state = ENDED;\n self.timer.stop();\n delete schedules[id];\n for (var i in schedules) return; // eslint-disable-line no-unused-vars\n delete node.__transition;\n }\n}\n","import {get, set} from \"./schedule\";\n\nfunction tweenRemove(id, name) {\n var tween0, tween1;\n return function() {\n var schedule = set(this, id),\n tween = schedule.tween;\n\n // If this node shared tween with the previous node,\n // just assign the updated shared tween and we’re done!\n // Otherwise, copy-on-write.\n if (tween !== tween0) {\n tween1 = tween0 = tween;\n for (var i = 0, n = tween1.length; i < n; ++i) {\n if (tween1[i].name === name) {\n tween1 = tween1.slice();\n tween1.splice(i, 1);\n break;\n }\n }\n }\n\n schedule.tween = tween1;\n };\n}\n\nfunction tweenFunction(id, name, value) {\n var tween0, tween1;\n if (typeof value !== \"function\") throw new Error;\n return function() {\n var schedule = set(this, id),\n tween = schedule.tween;\n\n // If this node shared tween with the previous node,\n // just assign the updated shared tween and we’re done!\n // Otherwise, copy-on-write.\n if (tween !== tween0) {\n tween1 = (tween0 = tween).slice();\n for (var t = {name: name, value: value}, i = 0, n = tween1.length; i < n; ++i) {\n if (tween1[i].name === name) {\n tween1[i] = t;\n break;\n }\n }\n if (i === n) tween1.push(t);\n }\n\n schedule.tween = tween1;\n };\n}\n\nexport default function(name, value) {\n var id = this._id;\n\n name += \"\";\n\n if (arguments.length < 2) {\n var tween = get(this.node(), id).tween;\n for (var i = 0, n = tween.length, t; i < n; ++i) {\n if ((t = tween[i]).name === name) {\n return t.value;\n }\n }\n return null;\n }\n\n return this.each((value == null ? tweenRemove : tweenFunction)(id, name, value));\n}\n\nexport function tweenValue(transition, name, value) {\n var id = transition._id;\n\n transition.each(function() {\n var schedule = set(this, id);\n (schedule.value || (schedule.value = {}))[name] = value.apply(this, arguments);\n });\n\n return function(node) {\n return get(node, id).value[name];\n };\n}\n","import {color} from \"d3-color\";\nimport {interpolateNumber, interpolateRgb, interpolateString} from \"d3-interpolate\";\n\nexport default function(a, b) {\n var c;\n return (typeof b === \"number\" ? interpolateNumber\n : b instanceof color ? interpolateRgb\n : (c = color(b)) ? (b = c, interpolateRgb)\n : interpolateString)(a, b);\n}\n","function removeFunction(id) {\n return function() {\n var parent = this.parentNode;\n for (var i in this.__transition) if (+i !== id) return;\n if (parent) parent.removeChild(this);\n };\n}\n\nexport default function() {\n return this.on(\"end.remove\", removeFunction(this._id));\n}\n","import {selection} from \"d3-selection\";\n\nvar Selection = selection.prototype.constructor;\n\nexport default function() {\n return new Selection(this._groups, this._parents);\n}\n","import {interpolateTransformCss as interpolateTransform} from \"d3-interpolate\";\nimport {style} from \"d3-selection\";\nimport {set} from \"./schedule\";\nimport {tweenValue} from \"./tween\";\nimport interpolate from \"./interpolate\";\n\nfunction styleNull(name, interpolate) {\n var string00,\n string10,\n interpolate0;\n return function() {\n var string0 = style(this, name),\n string1 = (this.style.removeProperty(name), style(this, name));\n return string0 === string1 ? null\n : string0 === string00 && string1 === string10 ? interpolate0\n : interpolate0 = interpolate(string00 = string0, string10 = string1);\n };\n}\n\nfunction styleRemove(name) {\n return function() {\n this.style.removeProperty(name);\n };\n}\n\nfunction styleConstant(name, interpolate, value1) {\n var string00,\n string1 = value1 + \"\",\n interpolate0;\n return function() {\n var string0 = style(this, name);\n return string0 === string1 ? null\n : string0 === string00 ? interpolate0\n : interpolate0 = interpolate(string00 = string0, value1);\n };\n}\n\nfunction styleFunction(name, interpolate, value) {\n var string00,\n string10,\n interpolate0;\n return function() {\n var string0 = style(this, name),\n value1 = value(this),\n string1 = value1 + \"\";\n if (value1 == null) string1 = value1 = (this.style.removeProperty(name), style(this, name));\n return string0 === string1 ? null\n : string0 === string00 && string1 === string10 ? interpolate0\n : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));\n };\n}\n\nfunction styleMaybeRemove(id, name) {\n var on0, on1, listener0, key = \"style.\" + name, event = \"end.\" + key, remove;\n return function() {\n var schedule = set(this, id),\n on = schedule.on,\n listener = schedule.value[key] == null ? remove || (remove = styleRemove(name)) : undefined;\n\n // If this node shared a dispatch with the previous node,\n // just assign the updated shared dispatch and we’re done!\n // Otherwise, copy-on-write.\n if (on !== on0 || listener0 !== listener) (on1 = (on0 = on).copy()).on(event, listener0 = listener);\n\n schedule.on = on1;\n };\n}\n\nexport default function(name, value, priority) {\n var i = (name += \"\") === \"transform\" ? interpolateTransform : interpolate;\n return value == null ? this\n .styleTween(name, styleNull(name, i))\n .on(\"end.style.\" + name, styleRemove(name))\n : typeof value === \"function\" ? this\n .styleTween(name, styleFunction(name, i, tweenValue(this, \"style.\" + name, value)))\n .each(styleMaybeRemove(this._id, name))\n : this\n .styleTween(name, styleConstant(name, i, value), priority)\n .on(\"end.style.\" + name, null);\n}\n","import {tweenValue} from \"./tween\";\n\nfunction textConstant(value) {\n return function() {\n this.textContent = value;\n };\n}\n\nfunction textFunction(value) {\n return function() {\n var value1 = value(this);\n this.textContent = value1 == null ? \"\" : value1;\n };\n}\n\nexport default function(value) {\n return this.tween(\"text\", typeof value === \"function\"\n ? textFunction(tweenValue(this, \"text\", value))\n : textConstant(value == null ? \"\" : value + \"\"));\n}\n","import {selection} from \"d3-selection\";\nimport transition_attr from \"./attr\";\nimport transition_attrTween from \"./attrTween\";\nimport transition_delay from \"./delay\";\nimport transition_duration from \"./duration\";\nimport transition_ease from \"./ease\";\nimport transition_filter from \"./filter\";\nimport transition_merge from \"./merge\";\nimport transition_on from \"./on\";\nimport transition_remove from \"./remove\";\nimport transition_select from \"./select\";\nimport transition_selectAll from \"./selectAll\";\nimport transition_selection from \"./selection\";\nimport transition_style from \"./style\";\nimport transition_styleTween from \"./styleTween\";\nimport transition_text from \"./text\";\nimport transition_transition from \"./transition\";\nimport transition_tween from \"./tween\";\nimport transition_end from \"./end\";\n\nvar id = 0;\n\nexport function Transition(groups, parents, name, id) {\n this._groups = groups;\n this._parents = parents;\n this._name = name;\n this._id = id;\n}\n\nexport default function transition(name) {\n return selection().transition(name);\n}\n\nexport function newId() {\n return ++id;\n}\n\nvar selection_prototype = selection.prototype;\n\nTransition.prototype = transition.prototype = {\n constructor: Transition,\n select: transition_select,\n selectAll: transition_selectAll,\n filter: transition_filter,\n merge: transition_merge,\n selection: transition_selection,\n transition: transition_transition,\n call: selection_prototype.call,\n nodes: selection_prototype.nodes,\n node: selection_prototype.node,\n size: selection_prototype.size,\n empty: selection_prototype.empty,\n each: selection_prototype.each,\n on: transition_on,\n attr: transition_attr,\n attrTween: transition_attrTween,\n style: transition_style,\n styleTween: transition_styleTween,\n text: transition_text,\n remove: transition_remove,\n tween: transition_tween,\n delay: transition_delay,\n duration: transition_duration,\n ease: transition_ease,\n end: transition_end\n};\n","import {selector} from \"d3-selection\";\nimport {Transition} from \"./index\";\nimport schedule, {get} from \"./schedule\";\n\nexport default function(select) {\n var name = this._name,\n id = this._id;\n\n if (typeof select !== \"function\") select = selector(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) {\n if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) {\n if (\"__data__\" in node) subnode.__data__ = node.__data__;\n subgroup[i] = subnode;\n schedule(subgroup[i], name, id, i, subgroup, get(node, id));\n }\n }\n }\n\n return new Transition(subgroups, this._parents, name, id);\n}\n","import {selectorAll} from \"d3-selection\";\nimport {Transition} from \"./index\";\nimport schedule, {get} from \"./schedule\";\n\nexport default function(select) {\n var name = this._name,\n id = this._id;\n\n if (typeof select !== \"function\") select = selectorAll(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n for (var children = select.call(node, node.__data__, i, group), child, inherit = get(node, id), k = 0, l = children.length; k < l; ++k) {\n if (child = children[k]) {\n schedule(child, name, id, k, children, inherit);\n }\n }\n subgroups.push(children);\n parents.push(node);\n }\n }\n }\n\n return new Transition(subgroups, parents, name, id);\n}\n","import {matcher} from \"d3-selection\";\nimport {Transition} from \"./index\";\n\nexport default function(match) {\n if (typeof match !== \"function\") match = matcher(match);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) {\n if ((node = group[i]) && match.call(node, node.__data__, i, group)) {\n subgroup.push(node);\n }\n }\n }\n\n return new Transition(subgroups, this._parents, this._name, this._id);\n}\n","import {Transition} from \"./index\";\n\nexport default function(transition) {\n if (transition._id !== this._id) throw new Error;\n\n for (var groups0 = this._groups, groups1 = transition._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) {\n for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {\n if (node = group0[i] || group1[i]) {\n merge[i] = node;\n }\n }\n }\n\n for (; j < m0; ++j) {\n merges[j] = groups0[j];\n }\n\n return new Transition(merges, this._parents, this._name, this._id);\n}\n","import {Transition, newId} from \"./index\";\nimport schedule, {get} from \"./schedule\";\n\nexport default function() {\n var name = this._name,\n id0 = this._id,\n id1 = newId();\n\n for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n var inherit = get(node, id0);\n schedule(node, name, id1, i, group, {\n time: inherit.time + inherit.delay + inherit.duration,\n delay: 0,\n duration: inherit.duration,\n ease: inherit.ease\n });\n }\n }\n }\n\n return new Transition(groups, this._parents, name, id1);\n}\n","import {get, set, init} from \"./schedule\";\n\nfunction start(name) {\n return (name + \"\").trim().split(/^|\\s+/).every(function(t) {\n var i = t.indexOf(\".\");\n if (i >= 0) t = t.slice(0, i);\n return !t || t === \"start\";\n });\n}\n\nfunction onFunction(id, name, listener) {\n var on0, on1, sit = start(name) ? init : set;\n return function() {\n var schedule = sit(this, id),\n on = schedule.on;\n\n // If this node shared a dispatch with the previous node,\n // just assign the updated shared dispatch and we’re done!\n // Otherwise, copy-on-write.\n if (on !== on0) (on1 = (on0 = on).copy()).on(name, listener);\n\n schedule.on = on1;\n };\n}\n\nexport default function(name, listener) {\n var id = this._id;\n\n return arguments.length < 2\n ? get(this.node(), id).on.on(name)\n : this.each(onFunction(id, name, listener));\n}\n","import {interpolateTransformSvg as interpolateTransform} from \"d3-interpolate\";\nimport {namespace} from \"d3-selection\";\nimport {tweenValue} from \"./tween\";\nimport interpolate from \"./interpolate\";\n\nfunction attrRemove(name) {\n return function() {\n this.removeAttribute(name);\n };\n}\n\nfunction attrRemoveNS(fullname) {\n return function() {\n this.removeAttributeNS(fullname.space, fullname.local);\n };\n}\n\nfunction attrConstant(name, interpolate, value1) {\n var string00,\n string1 = value1 + \"\",\n interpolate0;\n return function() {\n var string0 = this.getAttribute(name);\n return string0 === string1 ? null\n : string0 === string00 ? interpolate0\n : interpolate0 = interpolate(string00 = string0, value1);\n };\n}\n\nfunction attrConstantNS(fullname, interpolate, value1) {\n var string00,\n string1 = value1 + \"\",\n interpolate0;\n return function() {\n var string0 = this.getAttributeNS(fullname.space, fullname.local);\n return string0 === string1 ? null\n : string0 === string00 ? interpolate0\n : interpolate0 = interpolate(string00 = string0, value1);\n };\n}\n\nfunction attrFunction(name, interpolate, value) {\n var string00,\n string10,\n interpolate0;\n return function() {\n var string0, value1 = value(this), string1;\n if (value1 == null) return void this.removeAttribute(name);\n string0 = this.getAttribute(name);\n string1 = value1 + \"\";\n return string0 === string1 ? null\n : string0 === string00 && string1 === string10 ? interpolate0\n : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));\n };\n}\n\nfunction attrFunctionNS(fullname, interpolate, value) {\n var string00,\n string10,\n interpolate0;\n return function() {\n var string0, value1 = value(this), string1;\n if (value1 == null) return void this.removeAttributeNS(fullname.space, fullname.local);\n string0 = this.getAttributeNS(fullname.space, fullname.local);\n string1 = value1 + \"\";\n return string0 === string1 ? null\n : string0 === string00 && string1 === string10 ? interpolate0\n : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));\n };\n}\n\nexport default function(name, value) {\n var fullname = namespace(name), i = fullname === \"transform\" ? interpolateTransform : interpolate;\n return this.attrTween(name, typeof value === \"function\"\n ? (fullname.local ? attrFunctionNS : attrFunction)(fullname, i, tweenValue(this, \"attr.\" + name, value))\n : value == null ? (fullname.local ? attrRemoveNS : attrRemove)(fullname)\n : (fullname.local ? attrConstantNS : attrConstant)(fullname, i, value));\n}\n","import {namespace} from \"d3-selection\";\n\nfunction attrInterpolate(name, i) {\n return function(t) {\n this.setAttribute(name, i(t));\n };\n}\n\nfunction attrInterpolateNS(fullname, i) {\n return function(t) {\n this.setAttributeNS(fullname.space, fullname.local, i(t));\n };\n}\n\nfunction attrTweenNS(fullname, value) {\n var t0, i0;\n function tween() {\n var i = value.apply(this, arguments);\n if (i !== i0) t0 = (i0 = i) && attrInterpolateNS(fullname, i);\n return t0;\n }\n tween._value = value;\n return tween;\n}\n\nfunction attrTween(name, value) {\n var t0, i0;\n function tween() {\n var i = value.apply(this, arguments);\n if (i !== i0) t0 = (i0 = i) && attrInterpolate(name, i);\n return t0;\n }\n tween._value = value;\n return tween;\n}\n\nexport default function(name, value) {\n var key = \"attr.\" + name;\n if (arguments.length < 2) return (key = this.tween(key)) && key._value;\n if (value == null) return this.tween(key, null);\n if (typeof value !== \"function\") throw new Error;\n var fullname = namespace(name);\n return this.tween(key, (fullname.local ? attrTweenNS : attrTween)(fullname, value));\n}\n","function styleInterpolate(name, i, priority) {\n return function(t) {\n this.style.setProperty(name, i(t), priority);\n };\n}\n\nfunction styleTween(name, value, priority) {\n var t, i0;\n function tween() {\n var i = value.apply(this, arguments);\n if (i !== i0) t = (i0 = i) && styleInterpolate(name, i, priority);\n return t;\n }\n tween._value = value;\n return tween;\n}\n\nexport default function(name, value, priority) {\n var key = \"style.\" + (name += \"\");\n if (arguments.length < 2) return (key = this.tween(key)) && key._value;\n if (value == null) return this.tween(key, null);\n if (typeof value !== \"function\") throw new Error;\n return this.tween(key, styleTween(name, value, priority == null ? \"\" : priority));\n}\n","import {get, init} from \"./schedule\";\n\nfunction delayFunction(id, value) {\n return function() {\n init(this, id).delay = +value.apply(this, arguments);\n };\n}\n\nfunction delayConstant(id, value) {\n return value = +value, function() {\n init(this, id).delay = value;\n };\n}\n\nexport default function(value) {\n var id = this._id;\n\n return arguments.length\n ? this.each((typeof value === \"function\"\n ? delayFunction\n : delayConstant)(id, value))\n : get(this.node(), id).delay;\n}\n","import {get, set} from \"./schedule\";\n\nfunction durationFunction(id, value) {\n return function() {\n set(this, id).duration = +value.apply(this, arguments);\n };\n}\n\nfunction durationConstant(id, value) {\n return value = +value, function() {\n set(this, id).duration = value;\n };\n}\n\nexport default function(value) {\n var id = this._id;\n\n return arguments.length\n ? this.each((typeof value === \"function\"\n ? durationFunction\n : durationConstant)(id, value))\n : get(this.node(), id).duration;\n}\n","import {get, set} from \"./schedule\";\n\nfunction easeConstant(id, value) {\n if (typeof value !== \"function\") throw new Error;\n return function() {\n set(this, id).ease = value;\n };\n}\n\nexport default function(value) {\n var id = this._id;\n\n return arguments.length\n ? this.each(easeConstant(id, value))\n : get(this.node(), id).ease;\n}\n","import {set} from \"./schedule\";\n\nexport default function() {\n var on0, on1, that = this, id = that._id, size = that.size();\n return new Promise(function(resolve, reject) {\n var cancel = {value: reject},\n end = {value: function() { if (--size === 0) resolve(); }};\n\n that.each(function() {\n var schedule = set(this, id),\n on = schedule.on;\n\n // If this node shared a dispatch with the previous node,\n // just assign the updated shared dispatch and we’re done!\n // Otherwise, copy-on-write.\n if (on !== on0) {\n on1 = (on0 = on).copy();\n on1._.cancel.push(cancel);\n on1._.interrupt.push(cancel);\n on1._.end.push(end);\n }\n\n schedule.on = on1;\n });\n });\n}\n","import {Transition, newId} from \"../transition/index\";\nimport schedule from \"../transition/schedule\";\nimport {easeCubicInOut} from \"d3-ease\";\nimport {now} from \"d3-timer\";\n\nvar defaultTiming = {\n time: null, // Set on use.\n delay: 0,\n duration: 250,\n ease: easeCubicInOut\n};\n\nfunction inherit(node, id) {\n var timing;\n while (!(timing = node.__transition) || !(timing = timing[id])) {\n if (!(node = node.parentNode)) {\n return defaultTiming.time = now(), defaultTiming;\n }\n }\n return timing;\n}\n\nexport default function(name) {\n var id,\n timing;\n\n if (name instanceof Transition) {\n id = name._id, name = name._name;\n } else {\n id = newId(), (timing = defaultTiming).time = now(), name = name == null ? null : name + \"\";\n }\n\n for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n schedule(node, name, id, i, group, timing || inherit(node, id));\n }\n }\n }\n\n return new Transition(groups, this._parents, name, id);\n}\n","import {selection} from \"d3-selection\";\nimport selection_interrupt from \"./interrupt\";\nimport selection_transition from \"./transition\";\n\nselection.prototype.interrupt = selection_interrupt;\nselection.prototype.transition = selection_transition;\n","import interrupt from \"../interrupt\";\n\nexport default function(name) {\n return this.each(function() {\n interrupt(this, name);\n });\n}\n","import {STARTING, ENDING, ENDED} from \"./transition/schedule\";\n\nexport default function(node, name) {\n var schedules = node.__transition,\n schedule,\n active,\n empty = true,\n i;\n\n if (!schedules) return;\n\n name = name == null ? null : name + \"\";\n\n for (i in schedules) {\n if ((schedule = schedules[i]).name !== name) { empty = false; continue; }\n active = schedule.state > STARTING && schedule.state < ENDING;\n schedule.state = ENDED;\n schedule.timer.stop();\n schedule.on.call(active ? \"interrupt\" : \"cancel\", node, node.__data__, schedule.index, schedule.group);\n delete schedules[i];\n }\n\n if (empty) delete node.__transition;\n}\n","import { select, event as d3event, selection, clientPoint } from 'd3-selection';\nimport { drag as d3drag } from 'd3-drag';\nimport 'd3-transition';\nimport { mergeRecursive } from './common-utils';\n/**\n * This function takes a raw DOM element or\n * a string and returns a d3 selection of that element.\n *\n * @param {HTMLElement | string} element The element to wrap in d3 selection.\n * @return {Selection} Instance of d3 selection.\n */\nconst selectElement = element => select(element);\n\n/**\n * It creates a new d3 element on the parent element\n * @param {Selection} parent Element to which the element is to be appended\n * @param {Object} elemType Type of the new element\n * @param {Array} data Data for the new element\n * @param {Object} selector classname/id/tagname for the element\n * @return {HTMLElement} Newly Created Element\n */\nconst makeElement = (parent, elemType, data, selector, callbacks = {}, keyFn) => {\n if ((parent instanceof HTMLElement || parent instanceof SVGElement)) {\n parent = selectElement(parent);\n }\n\n const selectorVal = selector ? selector[0] : null;\n let selectorType = null;\n let actualSelector = null;\n let element = null;\n let enterSel = null;\n let mergeSel = null;\n let filter;\n if (selectorVal) {\n if (selectorVal === '#') {\n selectorType = 'id';\n actualSelector = selector;\n } else {\n selectorType = 'class';\n actualSelector = selector[0] === '.' ? selector : `.${selector}`;\n }\n } else {\n actualSelector = elemType;\n filter = true;\n }\n element = parent.selectAll(actualSelector);\n\n filter && (element = element.filter(function () {\n return this.parentNode === parent.node();\n }));\n element = element.data(data, keyFn);\n\n enterSel = element.enter()\n .append(elemType || 'div');\n callbacks.enter && enterSel.each(function (...params) {\n callbacks.enter(selectElement(this), ...params);\n });\n\n mergeSel = enterSel.merge(element);\n callbacks.update && mergeSel.each(function (...params) {\n callbacks.update(selectElement(this), ...params);\n });\n if (selectorType === 'class') {\n mergeSel.classed(selectorVal === '.' ? selector.substring(1, selector.length) : selector, true);\n } else if (selectorType === 'id') {\n mergeSel.attr('id', selector.substring(1, selector.length));\n }\n const exitSel = element.exit();\n\n if (callbacks.exit) {\n exitSel.each(function (...params) {\n callbacks.exit(selectElement(this), ...params);\n });\n } else {\n exitSel.remove();\n }\n return mergeSel;\n};\n\n/**\n * This function applies styles to an element\n * @param {Object} elem Element Selection\n * @param {Object} styleObj Style Object to be applied\n * @return {Element} Newly Created Element\n*/\nconst applyStyle = (elem, styleObj) => {\n Object.entries(styleObj).forEach((d) => {\n elem.style(d[0], d[1]);\n }, this);\n return elem;\n};\n\n/**\n * This function appends a dom element in another element.\n * @param {HTMLElement | SVGElement} element1 The element in which to append the second element\n * @param {HTMLElement | SVGElement} element2 The element which will be appended.\n */\nconst appendElement = (element1, element2) => {\n element1.appendChild(element2);\n};\n\n/**\n * Sets the attributes to the element.\n * @param {HTMLElement | SVGElement} element Element on which attributes will be applied\n * @param {Object} attrs Attributes which need to be applied\n */\nconst setElementAttrs = (element, attrs) => {\n for (const key in attrs) {\n if ({}.hasOwnProperty.call(attrs, key)) {\n element.attr(key, attrs[key]);\n }\n }\n};\n\n/**\n * Sets attributes in the svg or html element\n * @param {SVGElement | HTMLElement} element The element on which attrs will be applied\n * @param {Array.} attrs Array of attributes\n * @param {string} className className of elements to select.\n * @return {SVGElement | HTMLElement} SVGElement or html element.\n */\nconst setAttrs = (element, attrs, className) => {\n if (!(element instanceof selection)) {\n element = selectElement(element);\n }\n className !== undefined ? element.selectAll(`.${className}`).each(function () {\n setElementAttrs(select(this), attrs);\n }) : setElementAttrs(element, attrs);\n return element;\n};\n\n/**\n * Adds a css class to elements which passes the filter function.If filter function is not given,\n * then all elements will be applied the class.\n * @param {HTMLElement | SVGElement} element element\n * @param {string} className css class\n * @param {string} selector css selector\n * @param {Function} filterFn filter method.\n */\nconst addClass = (element, className, selector, filterFn) => {\n select(element).selectAll(selector).each(function (data) {\n const elem = select(this);\n filterFn ? filterFn(data) && elem.classed(className, true) :\n elem.classed(className, true);\n });\n};\n\n/**\n * Removes the css class from elements which passes the filter function.If filter function is not given,\n * then all elements will be applied the class.\n * @param {HTMLElement | SVGElement} element element\n * @param {string} className css class\n * @param {string} selector css selector\n * @param {Function} filterFn filter method.\n */\nconst removeClass = (element, className, selector, filterFn) => {\n select(element).selectAll(selector).each(function (data) {\n const elem = select(this);\n filterFn ? filterFn(data) && elem.classed(className, false) :\n elem.classed(className, false);\n });\n};\n\n/**\n * Sets styles in the svg or html element\n * @param {SVGElement | HTMLElement} element The element on which styles will be applied\n * @param {Array.} styles Array of style attributes\n * @return {SVGElement | HTMLElement} SVGElement or html element.\n */\nconst setStyles = (element, styles) => {\n if (!(element instanceof selection)) {\n element = selectElement(element);\n }\n for (const key in styles) {\n if ({}.hasOwnProperty.call(styles, key)) {\n element.style(key, styles[key]);\n }\n }\n return element;\n};\n\n/**\n * Creates svg or html elements by binding data to the selection.Removes extra elements\n * on exit.\n * @param {Object} params Parameter object\n * @param {SVGElement | HTMLElement} params.container Container element where all elements will be appended\n * @param {string} params.selector Selector by which elements will be selected from dom\n * @param {string} params.append Append tag\n * @param {Function} params.each Function which will be executed for each data point and element.\n */\nconst createElements = (params) => {\n const container = select(params.container);\n let data;\n let sel;\n\n data = params.data;\n if (typeof data === 'number') {\n data = Array(data).fill().map((d, i) => i);\n }\n sel = container.selectAll(params.selector).data(data);\n\n sel = container.selectAll(params.selector).filter(function () {\n return this.parentNode === container.node();\n }).data(params.data);\n\n const selectionMerge = sel.enter().append(params.append).merge(sel).each(function (d, i) {\n params.each(d, select(this), i);\n });\n\n selectionMerge.attr('class', params.className || '');\n sel.exit().remove();\n};\n\n/**\n * Clips an element with given measurement. Basically it is used to hide overflowing portions\n * of any element.\n * @param {SVGElement} container svg element which needs to be clipped.\n * @param {Object} measurement Dimensions of the clipped rectangle.\n * @param {string} id Unique id of the clip element\n */\nconst clipElement = (container, measurement, id) => {\n const clipPathElement = makeElement(select(container), 'clipPath', [1], `#${id}`);\n const clipPathRect = makeElement(clipPathElement, 'rect', [1]);\n clipPathRect.attr('x', measurement.x)\n .attr('y', measurement.x)\n .attr('width', measurement.width)\n .attr('height', measurement.height);\n clipPathElement.attr('clip-path', `url(#${id})`);\n};\n\n/**\n * Returns the element of the corresponding classname.\n * @param {HTMLElement | SVGElement} node html or svg node element.\n * @param {string} className css class to be applied.\n * @return {HTMLElement | SVGElement} html or svg element.\n */\nconst getElementsByClassName = (node, className) => select(node).selectAll(className).nodes();\n\n/**\n * Gets the mouse position relative to an svg type of element\n * @param {SVGElement} element Any svg element like rect, circle, etc.\n * @param {Event} event Event object.\n * @return {Object} x and y position relative to the container element passed.\n */\nconst getMousePos = (element, event) => {\n const boundingClientRect = element.getBoundingClientRect();\n return {\n x: event.x - boundingClientRect.x,\n y: event.y - boundingClientRect.y\n };\n};\n\nconst getClientPoint = (...params) => {\n const pos = clientPoint(...params);\n return {\n x: pos[0],\n y: pos[1]\n };\n};\n\n/** This function appends a dom element in another element.\n * @param {Object} tag The tag name of the element to append\n * @param {Object} mount Mount point fo the element\n * @return {Object} selection of the appended element\n */\nconst createElement = (tag, mount) => select(mount).append(tag).node();\n\n/**\n * Gets the d3 event function\n * @return {Object} d3 event\n */\nconst getEvent = () => d3event;\n\n/**\n * Gets the d3 drag function\n * @return {Object} d3 drag\n */\nconst getD3Drag = () => d3drag;\n\nconst getSmartComputedStyle = (group, css) => {\n let textEl;\n const testText = 'W';\n const mandatoryStyle = {\n 'fill-opacity': 0\n };\n const className = typeof css === 'string' ? css : (css instanceof Array ? css.join(' ') : undefined);\n\n if (group.node() instanceof HTMLElement) {\n textEl = group.append('div').html(testText);\n } else {\n textEl = group.append('text').text(testText);\n }\n\n if (className) {\n textEl.attr('class', className);\n } else if (typeof css === 'object') {\n delete css['fill-opacity'];\n mergeRecursive(mandatoryStyle, css);\n }\n\n textEl.style(mandatoryStyle);\n const computedStyle = window.getComputedStyle(textEl.node());\n const styleForSmartLabel = {\n fontSize: computedStyle.fontSize,\n fontFamily: computedStyle.fontFamily,\n fontWeight: computedStyle.fontWeight,\n fontStyle: computedStyle.fontStyle\n };\n\n textEl.remove();\n\n return styleForSmartLabel;\n};\n\nconst hasTouch = () => 'ontouchstart' in document.documentElement;\n\nexport {\n hasTouch,\n selectElement,\n makeElement,\n applyStyle,\n addClass,\n removeClass,\n appendElement,\n setAttrs,\n setStyles,\n createElement,\n createElements,\n clipElement,\n getElementsByClassName,\n getMousePos,\n getEvent,\n getD3Drag,\n getSmartComputedStyle,\n getClientPoint\n};\n","const events = [\n 'initialized',\n 'beforeupdate',\n 'updated',\n 'beforedraw',\n 'drawn',\n 'beforeremove',\n 'removed',\n 'animationend'\n];\n\nconst compositions = [\n 'canvas',\n 'unit',\n 'layer',\n 'axis',\n 'facet-headers',\n 'legend',\n 'caption'\n];\n\nconst EVENT_LIST = [];\n\ncompositions.forEach((composition) => {\n events.forEach((event) => {\n EVENT_LIST.push(`${composition}.${event}`);\n });\n});\n\nexport default EVENT_LIST;\n","import EVENT_LIST from './event-list';\nimport { createPromise } from './helper';\n\n/**\n * At first call it accepts one function\n * calling it second time accepts notification object.\n * notification object then called with first accepted function\n *\n * @param {Function} resolveFn a promise's resolve function\n * @return {Function} a function to accept notification object\n */\nconst resolver = resolveFn => notification => resolveFn(notification);\n\n/**\n * Checks if the property string is present in the source object\n *\n * @param {Object} source source object whom you want to check the property\n * @param {string} property key name that need to be checked\n * @return {boolean} returns true if the property found in the source object\n */\nconst hasOwn = (source, property) => Object.prototype.hasOwnProperty.call(source, property);\n\n/**\n * LifeCycleManager which goes as a dependendecy to a muze\n * it accepts notification from the entire library throughout\n * the exeecution life\n *\n * @export\n * @class LifeCycleManager\n */\nexport default class LifeCycleManager {\n\n /**\n * Creates an instance of LifeCycleManager.\n * @memberof LifeCycleManager\n */\n constructor () {\n this._eventList = EVENT_LIST;\n this._promises = new Map();\n this._notifiers = {};\n this._lifeCycles = {};\n this._unreleasedLifeCycles = {};\n this._boot();\n }\n\n /**\n * Fills all the notifiers with resolver callback\n *\n * @memberof LifeCycleManager\n */\n _boot () {\n this._notifiers = this._eventList.reduce((acc, name) => {\n acc[name] = resolver;\n return acc;\n }, {});\n this._preparePromises();\n }\n\n /**\n * Public method which gives the promise corresponding\n * to the event name\n *\n * @param {string} eventName name of the event like `canvas.drawn`\n * @return {promise} promise that is passed to the user\n * @memberof LifeCycleManager\n */\n retrieve (eventName) {\n return this._promises.get(eventName);\n }\n\n /**\n * Creates a promise that will be passed to user's callback\n *\n * @param {string} eventName name of the event like `canvas.drawn`\n * @return {promise} a pending promise waiting for resolve to be called\n * @memberof LifeCycleManager\n */\n _makeNotifierPromise (eventName) {\n return new Promise((resolve) => {\n this._notifiers[eventName] = resolver(resolve);\n });\n }\n\n /**\n * Prepares the promise map with pending promises\n * all the promises are in a pending state where their's\n * resolve function waiting to be called with notification object\n * @memberof LifeCycleManager\n */\n _preparePromises () {\n this._eventList.forEach((eventName) => {\n const promise = this._makeNotifierPromise(eventName);\n this._promises.set(eventName, promise);\n createPromise(promise, eventName, this);\n });\n }\n\n /**\n * Resolves the promise with notification object\n *\n * @param {string} eventName name of the event in the system\n * @param {Object} notification notification object\n * @param {string} notification.formalName name of the sender creating the notification\n * @param {Object} notification.client instance or array of instances sending the notification\n * @param {string} notification.action the stage name when the event happened like `beforedraw`\n *\n * @memberof LifeCycleManager\n */\n _resolvePromise (eventName, notification) {\n this._notifiers[eventName](notification);\n }\n\n /**\n * Public method which is being called by different\n * subcompoents of the system at different execution atages\n * @param {Object} notification notification object\n * @param {string} notification.formalName name of the sender creating the notification\n * @param {Object} notification.client instance or array of instances sending the notification\n * @param {string} notification.action the stage name when the event happened like `beforedraw`\n * @memberof LifeCycleManager\n */\n notify (notification) {\n // get the composition name from notification\n // or from static formalName() method\n const composition = notification.formalName || notification.client.constructor.formalName();\n notification.formalName = composition;\n this._releasePromisesFromCache();\n this._notify(composition, notification);\n }\n\n /**\n * Notify user the with promsie in a callback\n * if callback not found then cache it\n *\n * @param {string} composition\n * @param {Object} notification notification object\n * @param {string} notification.formalName name of the sender creating the notification\n * @param {Object} notification.client instance or array of instances sending the notification\n * @param {string} notification.action the stage name when the event happened like `beforedraw`\n * @memberof LifeCycleManager\n */\n _notify (composition, notification) {\n const stage = notification.action;\n const eventName = `${composition}.${stage}`;\n\n // resolves promise with the notification object\n this._resolvePromise(eventName, notification);\n\n // get the promise from the promise map\n const promise = this.retrieve(eventName);\n\n if (this._lifeCycles[composition]) {\n if (this._lifeCycles[composition][stage]) {\n // if user given call back exists, then call with promise\n this._callLifeCycleCallback(composition, stage, promise);\n } else {\n // otherwise cache the promise\n this._cachePromise(composition, stage, promise);\n }\n } else {\n this._cachePromise(composition, stage, promise);\n }\n }\n\n /**\n * Calls the user's callback with callback\n *\n * @param {string} composition name of the compositon like `canvas`\n * @param {string} stage the stage name when the event happened like `beforedraw`\n * @param {promise} promise promise that is passed to the user\n * @memberof LifeCycleManager\n */\n _callLifeCycleCallback (composition, stage, promise) {\n const eventName = `${composition}.${stage}`;\n this._lifeCycles[composition][stage](promise);\n this._resetTargetPromise(eventName);\n }\n\n /**\n * Try to clear the cached promsies once we have\n * macthed callbacks from the user\n *\n * @memberof LifeCycleManager\n */\n _releasePromisesFromCache () {\n const compositions = Object.keys(this._unreleasedLifeCycles);\n compositions.forEach((composition) => {\n const stages = Object.keys(this._unreleasedLifeCycles[composition]);\n stages.forEach((stage) => {\n if (this._lifeCycles[composition]) {\n if (this._lifeCycles[composition][stage]) {\n // take the promise from unreleased lifeCycles\n const promise = this._unreleasedLifeCycles[composition][stage];\n // call the user given callback with that promise\n this._callLifeCycleCallback(composition, stage, promise);\n // delete promise from unreleased lifeCycles\n delete this._unreleasedLifeCycles[composition][stage];\n }\n }\n });\n });\n }\n\n /**\n * Cache the promise in the map. This cache\n * then get consumed if we get user callbacks\n * @param {string} composition name of the compositon like `canvas`\n * @param {string} stage the stage name when the event happened like `beforedraw`\n * @param {promise} promise promise that is passed to the user\n * @memberof LifeCycleManager\n */\n _cachePromise (composition, stage, promise) {\n if (!hasOwn(this._unreleasedLifeCycles, composition)) {\n this._unreleasedLifeCycles[composition] = {};\n }\n\n if (!hasOwn(this._unreleasedLifeCycles[composition], stage)) {\n this._unreleasedLifeCycles[composition][stage] = {};\n }\n this._unreleasedLifeCycles[composition][stage] = promise;\n }\n\n /**\n * It register's the callbacks gievn the user\n *\n * @param {Object} [lifeCycles={}] a object with list of callbacks\n * @memberof LifeCycleManager\n */\n register (lifeCycles = {}) {\n this._lifeCycles = lifeCycles;\n // as we get all the callbacks, try to call them\n // from unreleased promise map\n this._releasePromisesFromCache();\n }\n\n /**\n * Reset the promise into pending state\n *\n * @param {string} eventName name of the event happening\n * @memberof LifeCycleManager\n */\n _resetTargetPromise (eventName) {\n setTimeout(() => {\n this._notifiers[eventName] = resolver;\n this._promises.set(eventName, this._makeNotifierPromise(eventName));\n }, 0);\n }\n}\n","import LifeCycleManager from './lifecycle-manager';\n\nexport default LifeCycleManager;\n","/**\n * Creates a new promise when the given promise is resolved. This needs to be done so that after the lifecycle event\n * is completed, then again when the event gets completed, then a new promise gets resolved.\n *\n * @param {Promise} promise Instance of promise\n * @param {string} eventName name of event\n * @param {LifeCycleManager} context Instance of lifecyclemanager\n */\nexport const createPromise = (promise, eventName, context) => {\n promise.then(() => {\n const prm = context._makeNotifierPromise(eventName);\n context._promises.set(eventName, prm);\n createPromise(prm, eventName, context);\n });\n};\n","import { default as DataModel } from 'datamodel';\nimport * as scales from './scales';\nimport * as colorSchemes from './color-schemes';\nimport * as STATE_NAMESPACES from './enums/namespace';\n\nconst InvalidAwareTypes = DataModel.InvalidAwareTypes;\n\nexport {\n InvalidAwareTypes,\n DataModel\n};\n\nexport {\n ReservedFields,\n CommonProps\n} from './enums';\n\nexport { STATE_NAMESPACES };\n\nexport {\n scales,\n colorSchemes\n};\n\nexport {\n getNearestValue,\n getValueParser,\n transformColors,\n detectColor,\n hslToRgb,\n rgbToHsv,\n hexToHsv,\n hsvToRgb,\n escapeHTML,\n angleToRadian,\n generateGetterSetters,\n getArraySum,\n ERROR_MSG,\n interpolator,\n colorInterpolator,\n numberInterpolator,\n piecewiseInterpolator,\n reqAnimFrame,\n cancelAnimFrame,\n nextAnimFrame,\n getMax,\n getMin,\n getDomainFromData,\n getUniqueId,\n mergeRecursive,\n unionDomain,\n replaceCSSPrefix,\n symbolFns,\n defaultValue,\n easeFns,\n clone,\n interpolateArray,\n getMinPoint,\n getMaxPoint,\n getClosestIndexOf,\n registerListeners,\n Voronoi,\n checkExistence,\n sanitizeIP,\n getMinDiff,\n capitalizeFirst,\n getWindow,\n getQualifiedClassName,\n Store,\n getDependencyOrder,\n objectIterator,\n intSanitizer,\n transactor,\n enableChainedTransaction,\n isHTMLElem,\n isEqual,\n isSimpleObject,\n nextFrame,\n filterPropagationModel,\n getObjProp,\n getDataModelFromIdentifiers,\n getDataModelFromRange,\n transposeArray,\n toArray,\n extendsClass,\n concatModels,\n assembleModelFromIdentifiers,\n isValidValue,\n nestCollection,\n stack,\n getSymbol,\n Scales,\n Symbols,\n pathInterpolators,\n hslInterpolator,\n getSmallestDiff,\n require,\n formatTemporal,\n createSelection,\n temporalFields,\n retrieveNearestGroupByReducers\n} from './common-utils';\n\nexport {\n selectElement,\n makeElement,\n applyStyle,\n addClass,\n removeClass,\n appendElement,\n setAttrs,\n setStyles,\n createElement,\n createElements,\n clipElement,\n getElementsByClassName,\n getMousePos,\n getEvent,\n getD3Drag,\n getSmartComputedStyle,\n getClientPoint,\n hasTouch\n} from './renderer-utils';\n\nexport { default as Smartlabel } from 'fusioncharts-smartlabel';\n\nexport { dataSelect, DataObject } from './DataSystem';\n\nexport { default as LifeCycleManager } from './lifecycle-manager';\n\nexport { DimensionSubtype, FieldType, MeasureSubtype, DateTimeFormatter } from 'datamodel';\n\n","export const DRAG = 'drag';\nexport const HOVER = 'hover';\nexport const SELECTIONDRAG = 'selectiondrag';\nexport const CLICK = 'click';\nexport const LONGTOUCH = 'longtouch';\nexport const TOUCHDRAG = 'touchdrag';\nexport const ALL_ACTIONS = '*';\n","const SELECTION_NEW_ENTRY = 1;\nconst SELECTION_NEW_EXIT = -1;\nconst SELECTION_NULL = 0;\nconst SELECTION_OLD_ENTRY = 2;\nconst SELECTION_OLD_EXIT = -2;\n\nexport {\n SELECTION_NEW_ENTRY,\n SELECTION_NEW_EXIT,\n SELECTION_NULL,\n SELECTION_OLD_ENTRY,\n SELECTION_OLD_EXIT\n};\n","import SelectionSet from './selection-set';\n\nexport default SelectionSet;\n","import {\n SELECTION_NEW_ENTRY, SELECTION_NEW_EXIT, SELECTION_NULL, SELECTION_OLD_ENTRY, SELECTION_OLD_EXIT\n} from '../enums/selection';\n/* eslint-disable guard-for-in */\n\n/**\n * This component is used to keep track of the row tuples of the data which gets added and removed. This keeps\n * information of which rows are in previous and new entry set and previous and new exit set. This is initialized by\n * {@link Firebolt}.\n *\n * @public\n *\n * @class SelectionSet\n */\nclass SelectionSet {\n /**\n * Creates an instance of selection set\n *\n * @param {Array.} completeSet Set of unique ids.\n */\n constructor (completeSet, _volatile) {\n this.completeSet = completeSet;\n this._set = completeSet.reduce((obj, key) => {\n obj[key] = SELECTION_NULL;\n return obj;\n }, {});\n this._volatile = _volatile;\n this._completeSetCount = completeSet.length;\n this._lockedSelection = {};\n this._resetted = true;\n }\n\n /**\n * Adds a set of ids to the selection set. This also moves the other rows to exit set.\n *\n * @public\n * @param {Array.} ids Array of unique ids.\n *\n * @return {SelectionSet} Instance of selection set.\n */\n add (ids) {\n this._resetted = false;\n\n const set = this._set;\n // from exitset to entryset\n ids.forEach((i) => {\n set[i] = SELECTION_NEW_ENTRY;\n });\n\n for (const key in set) {\n if (set[key] !== SELECTION_NEW_ENTRY && set[key] !== SELECTION_OLD_ENTRY) {\n set[key] = set[key] < 0 ? SELECTION_OLD_EXIT : SELECTION_NEW_EXIT;\n }\n }\n return this;\n }\n\n /**\n * Adds an array of ids to the old entry set.\n *\n * @param {Array.} ids Array of unique ids\n *\n * @return {SelectionSet} Instance of selection set.\n */\n update (ids) {\n const set = this._set;\n // from exitset to entryset\n ids.forEach((i) => {\n set[i] = SELECTION_OLD_ENTRY;\n });\n\n return this;\n }\n\n /**\n * Moves all ids which in new entry set to old entry set.\n *\n * @public\n * @param {Array.} ids Array of unique ids\n *\n * @return {SelectionSet} Instance of selection set.\n */\n updateEntry () {\n const set = this._set;\n\n // from exitset to entryset\n for (const key in set) {\n set[key] = set[key] === SELECTION_NEW_ENTRY ? SELECTION_OLD_ENTRY : set[key];\n }\n return this;\n }\n\n /**\n * Moves an array of ids which are in new exit set to old exit set.\n *\n * @public\n *\n * @param {Array.} ids Array of unique ids.\n *\n * @return {SelectionSet} Instance of selection set.\n */\n updateExit () {\n const set = this._set;\n // from exitset to entryset\n for (const key in set) {\n set[key] = set[key] === SELECTION_NEW_EXIT ? SELECTION_OLD_EXIT : set[key];\n }\n return this;\n }\n\n /**\n * Removes an array of ids from the selection set. It also moves the remaining row ids to entry set.\n *\n * @public\n * @param {Array.} ids Array of unique ids\n *\n * @return {SelectionSet} Instance of selection set\n */\n remove (ids) {\n this._resetted = false;\n\n const set = this._set;\n ids.forEach((i) => {\n set[i] = SELECTION_NEW_EXIT;\n });\n\n for (const key in set) {\n if (set[key] !== SELECTION_NEW_EXIT && set[key] !== SELECTION_OLD_EXIT) {\n set[key] = set[key] === 0 ? SELECTION_NEW_ENTRY : SELECTION_OLD_ENTRY;\n }\n }\n\n return this;\n }\n\n getSets () {\n const set = this._set;\n const retObj = {\n entrySet: [[], []],\n exitSet: [[], []],\n completeSet: []\n };\n\n for (const key in set) {\n if (set[key] > 0) {\n set[key] === SELECTION_OLD_ENTRY && retObj.entrySet[0].push(key);\n set[key] === SELECTION_NEW_ENTRY && retObj.entrySet[1].push(key);\n } else if (set[key] < 0) {\n set[key] === SELECTION_OLD_EXIT && retObj.exitSet[0].push(key);\n set[key] === SELECTION_NEW_EXIT && retObj.exitSet[1].push(key);\n }\n retObj.completeSet.push(key);\n }\n\n ['entrySet', 'exitSet'].forEach((type) => {\n retObj[type] = retObj[type].map(e => e.map(Number));\n });\n retObj.completeSet = retObj.completeSet.map(Number);\n\n return retObj;\n }\n\n /**\n * Resets an array of ids in the selection set to initial state. It sets the value of every unique id value to\n * null in the selection set which means they are neither in entry set nor in exit set. If no ids are passed,\n * then it resets all the ids to null.\n *\n * @public\n *\n * @param {Array} ids Array of unique ids.\n * @return {SelectionSet} Instance of selection set.\n */\n reset (ids) {\n const set = this._set;\n if (ids) {\n ids.forEach((i) => {\n set[i] = SELECTION_NULL;\n });\n } else {\n const lockedSel = this._lockedSelection;\n for (const key in set) {\n if (!(key in lockedSel)) {\n set[key] = SELECTION_NULL;\n }\n }\n }\n this._resetted = true;\n return this;\n }\n\n /**\n * Gets the set of ids which are added in the selection set.\n *\n * @public\n *\n * @return {Array.} Array of unique ids\n */\n getEntrySet () {\n const set = this._set;\n const addSet = [];\n\n for (const key in set) {\n set[key] === SELECTION_NEW_ENTRY && addSet.push(key);\n }\n\n return addSet;\n }\n\n /**\n * Returns a set of unique ids which are already present in entry set.\n *\n * @public\n * @param {Array} addSet Array of unique ids which are added\n *\n * @return {Array} Array of unique ids which are already in old entry set or new entry set\n */\n getExistingEntrySet (addSet) {\n const set = this._set;\n return addSet.filter(d => set[d] === SELECTION_NEW_ENTRY || set[d] === SELECTION_OLD_ENTRY);\n }\n\n /**\n * Returns a set of unique ids which are already present in exit set.\n *\n * @public\n * @param {Array} addSet Array of unique ids which are added\n *\n * @return {Array} Array of unique ids which are already in old exit set or new exit set\n */\n getExistingExitSet (removeSet) {\n const set = this._set;\n return removeSet.filter(d => set[d] === SELECTION_NEW_EXIT || set[d] === SELECTION_OLD_EXIT);\n }\n\n /**\n * Gets the set of ids which are added in the selection set.\n * @return {Array.} Array of unique ids\n */\n getOldEntry () {\n const set = this._set;\n const updateSet = [];\n\n for (const key in set) {\n set[key] === SELECTION_OLD_ENTRY && updateSet.push(key);\n }\n return updateSet;\n }\n\n /**\n * Gets the set of ids which are added in the selection set.\n * @return {Array.} Array of unique ids\n */\n getOldExit () {\n const set = this._set;\n const updateSet = [];\n\n for (const key in set) {\n set[key] === SELECTION_OLD_EXIT && updateSet.push(key);\n }\n\n return updateSet;\n }\n\n /**\n * Gets the array of ids which are in the exit set.\n *\n * @public\n * @return {Array.} Array of unique ids\n */\n getExitSet () {\n const set = this._set;\n const removeSet = [];\n\n for (const key in set) {\n set[key] === SELECTION_NEW_EXIT && removeSet.push(key);\n }\n return removeSet;\n }\n\n /**\n * Gets all the ids which are either in exit or entry set.\n *\n * @public\n * @return {Array} Array of unique ids\n */\n getCompleteSet () {\n const set = this._set;\n const completeSet = [];\n\n for (const key in set) {\n completeSet.push(key);\n }\n\n return completeSet;\n }\n\n getCompleteSetCount () {\n return this._completeSetCount;\n }\n\n resetted () {\n return this._resetted;\n }\n\n /**\n * Swaps the add set and remove set in the selection set.\n * @return {SelectionSet} Instance of selection set.\n */\n toggle () {\n const set = this._set;\n\n for (const key in set) {\n if (set[key] === SELECTION_NEW_ENTRY) {\n set[key] = SELECTION_NEW_EXIT;\n } else if (set[key] === SELECTION_NEW_EXIT) {\n set[key] = SELECTION_NEW_ENTRY;\n } else if (set[key] === SELECTION_OLD_ENTRY) {\n set[key] = SELECTION_OLD_EXIT;\n } else {\n set[key] = SELECTION_OLD_ENTRY;\n }\n }\n\n return this;\n }\n}\n\nexport default SelectionSet;\n","import { clone } from 'muze-utils';\nimport * as SELECTION from '../enums/selection';\n\nexport const initializeSideEffects = (context, sideEffects) => {\n const sideEffectsMap = context._sideEffects;\n const config = context.config();\n sideEffects = sideEffects instanceof Array ? sideEffects : Object.values(sideEffects);\n sideEffects.forEach((SideEffect) => {\n const formalName = SideEffect.formalName();\n const sideEffectInstance = sideEffectsMap[formalName];\n sideEffectsMap[formalName] = sideEffectInstance || new SideEffect(context);\n const sideEffectConf = config[formalName];\n sideEffectConf && sideEffectsMap[formalName].config(sideEffectConf);\n });\n return sideEffectsMap;\n};\n\nexport const initializeBehaviouralActions = (context, actions) => {\n const dispatchableBehaviours = {};\n\n actions = actions instanceof Array ? actions : Object.values(actions);\n actions.forEach((Action) => {\n dispatchableBehaviours[Action.formalName()] = new Action(context);\n });\n return dispatchableBehaviours;\n};\n\nexport const initializePhysicalActions = (context, actions) => {\n const physicalActions = {};\n\n for (const name in actions) {\n if (!({}).hasOwnProperty.call(name, actions)) {\n physicalActions[name] = actions[name](context);\n }\n }\n return physicalActions;\n};\n\nexport const changeSideEffectAvailability = (context, fn, toEnable) => {\n const sideEffects = context.sideEffects();\n for (const key in sideEffects) {\n if ({}.hasOwnProperty.call(sideEffects, key)) {\n let change = true;\n if (fn && fn(key) === false) {\n change = false;\n }\n if (change) {\n toEnable ? sideEffects[key].enable() : sideEffects[key].disable();\n }\n }\n }\n};\n\nexport const getMergedSet = set => [...new Set([...set[0], ...set[1]])];\n\nexport const getSourceFields = (propagationInf, criteria = {}) => {\n const sourceIdentifiers = propagationInf.sourceIdentifiers;\n let sourceFields;\n if (sourceIdentifiers) {\n sourceFields = sourceIdentifiers.getSchema().map(d => d.name);\n } else if (criteria instanceof Array) {\n sourceFields = criteria[0];\n } else {\n sourceFields = Object.keys(criteria || {});\n }\n return sourceFields;\n};\n\nconst conditionsMap = {\n newEntry: [SELECTION.SELECTION_NEW_ENTRY],\n oldEntry: [SELECTION.SELECTION_OLD_ENTRY],\n mergedEnter: [SELECTION.SELECTION_NEW_ENTRY, SELECTION.SELECTION_OLD_ENTRY],\n newExit: [SELECTION.SELECTION_NEW_EXIT],\n oldExit: [SELECTION.SELECTION_OLD_EXIT],\n mergedExit: [SELECTION.SELECTION_NEW_EXIT, SELECTION.SELECTION_OLD_EXIT],\n complete: []\n};\n\nexport const getModelFromSet = (type, model, set) => {\n if (model) {\n return model.select((fields, i) =>\n (conditionsMap[type].some(condition => set[i] === condition)), {\n saveChild: false\n });\n }\n return null;\n};\n\nexport const getSetInfo = (type, set, config) => {\n let model = null;\n const filteredDataModel = config.filteredDataModel;\n const selectionSet = config.selectionSet;\n if (!config.propagationData) {\n if (selectionSet.resetted()) {\n model = null;\n } else {\n model = getModelFromSet(type, config.dataModel, config.selectionSet._set);\n }\n } else if (filteredDataModel) {\n model = type === 'mergedEnter' ? filteredDataModel[0] : filteredDataModel[1];\n }\n return {\n uids: set,\n length: set.length,\n model\n };\n};\n\nexport const getSideEffects = (behaviour, behaviourEffectMap) => {\n const sideEffects = [];\n for (const key in behaviourEffectMap) {\n const behaviours = key.split(',');\n const found = behaviours.some(d => d === behaviour);\n if (found) {\n sideEffects.push({\n effects: behaviourEffectMap[key],\n behaviours\n });\n }\n }\n return sideEffects;\n};\n\nexport const unionSets = (context, behaviours) => {\n let combinedSet = {};\n const models = {\n mergedEnter: null,\n mergedExit: null\n };\n behaviours.forEach((behaviour) => {\n const entryExitSet = context._entryExitSet[behaviour];\n if (entryExitSet) {\n combinedSet = Object.assign(combinedSet, clone(entryExitSet));\n ['mergedEnter', 'mergedExit'].forEach((type) => {\n const model = entryExitSet[type].model;\n let existingModel = models[type];\n if (!existingModel) {\n existingModel = models[type] = model;\n } else if (`${model.getSchema().map(d => d.name).sort()}` ===\n `${existingModel.getSchema().map(d => d.name).sort()}`) {\n existingModel = models[type] = model.union(existingModel);\n } else {\n existingModel = model;\n }\n combinedSet[type].model = existingModel;\n });\n }\n });\n return combinedSet;\n};\n","import {\n mergeRecursive,\n hasTouch,\n filterPropagationModel,\n FieldType,\n selectElement,\n isSimpleObject\n} from 'muze-utils';\nimport { ALL_ACTIONS } from './enums/actions';\nimport SelectionSet from './selection-set';\nimport {\n initializeBehaviouralActions,\n initializeSideEffects,\n changeSideEffectAvailability,\n initializePhysicalActions,\n unionSets,\n getSideEffects\n} from './helper';\n\n/**\n * This class is responsible for dispatching behavioural actions and side effects. It also keeps the information of\n * registered physical actions, behavioural actions and side effects. Also, it keeps the map of physical and behavioural\n * actions and behavioural actions and side effects. Whenever any behavioural action is dispatched, it also propagates\n * the rows which got affected to the other datamodels. This class is initialized by {@link VisualUnit} and legend to\n * manage it's interaction.\n *\n * @public\n * @class Firebolt\n * @module Firebolt\n */\nexport default class Firebolt {\n constructor (context, actions, sideEffects, behaviourEffectMap) {\n this.context = context;\n this._sideEffectDefinitions = {};\n this._sideEffects = {};\n this._propagationInf = {};\n this._actions = {\n behavioural: {},\n physical: {}\n };\n this._selectionSet = {};\n this._volatileSelectionSet = {};\n this._propagationFields = {};\n this._sourceSideEffects = {\n selectionBox: () => false\n };\n this._propagationBehaviourMap = {};\n this._sourceBehaviours = {};\n this._actionBehaviourMap = {};\n this._config = {};\n this._behaviourEffectMap = {};\n this._entryExitSet = {};\n this._actionHistory = {};\n this._queuedSideEffects = {};\n\n this.mapSideEffects(behaviourEffectMap);\n this.registerBehaviouralActions(actions.behavioural);\n this.registerSideEffects(sideEffects);\n this.registerPhysicalBehaviouralMap(actions.physicalBehaviouralMap);\n this.registerPhysicalActions(actions.physical);\n }\n\n config (...config) {\n if (config.length) {\n this._config = mergeRecursive(this._config, config[0]);\n return this;\n }\n return this._config;\n }\n\n mapSideEffects (behEffectMap) {\n const behaviourEffectMap = this._behaviourEffectMap;\n for (const key in behEffectMap) {\n if ({}.hasOwnProperty.call(behEffectMap, key)) {\n const sideEffects = behEffectMap[key] || [];\n let preventDefaultActions = false;\n let effectNames;\n if (isSimpleObject(sideEffects)) {\n effectNames = sideEffects.effects;\n preventDefaultActions = sideEffects.preventDefaultActions;\n } else {\n effectNames = sideEffects;\n }\n !behaviourEffectMap[key] && (behaviourEffectMap[key] = []);\n this._behaviourEffectMap[key] = [...new Set(preventDefaultActions ? effectNames :\n [...behaviourEffectMap[key], ...effectNames])];\n }\n }\n return this;\n }\n\n registerBehaviouralActions (actions) {\n const behaviours = initializeBehaviouralActions(this, actions);\n this.prepareSelectionSets(behaviours);\n Object.assign(this._actions.behavioural, behaviours);\n return this;\n }\n\n prepareSelectionSets () {\n return this;\n }\n\n registerSideEffects (sideEffects) {\n for (const key in sideEffects) {\n this._sideEffectDefinitions[sideEffects[key].formalName()] = sideEffects[key];\n }\n this.initializeSideEffects();\n return this;\n }\n\n applySideEffects (sideEffects, selectionSet, payload) {\n const sideEffectStore = this.sideEffects();\n const actionHistory = this._actionHistory;\n const queuedSideEffects = this._queuedSideEffects;\n sideEffects.forEach((sideEffect) => {\n let options;\n let name;\n const effects = sideEffect.effects;\n const behaviours = sideEffect.behaviours;\n const combinedSet = unionSets(this, behaviours, selectionSet);\n effects.forEach((effect) => {\n if (typeof effect === 'object') {\n name = effect.name;\n options = effect.options;\n } else {\n name = effect;\n }\n\n const sideEffectInstance = sideEffectStore[name];\n if (sideEffectInstance.isEnabled()) {\n if (!sideEffectInstance.constructor.mutates() &&\n Object.values(actionHistory).some(d => d.isMutableAction)) {\n queuedSideEffects[`${name}-${behaviours.join()}`] = {\n name,\n params: [combinedSet, payload, options]\n };\n } else {\n this.dispatchSideEffect(name, combinedSet, payload, options);\n }\n }\n });\n });\n return this;\n }\n\n dispatchSideEffect (name, selectionSet, payload, options = {}) {\n const sideEffectStore = this.sideEffects();\n const sideEffect = sideEffectStore[name];\n let disable = false;\n if (options.filter && options.filter(sideEffect)) {\n disable = true;\n }\n !disable && sideEffectStore[name].apply(selectionSet, payload, options);\n }\n\n registerPropagationBehaviourMap (map) {\n this._propagationBehaviourMap = Object.assign(this._propagationBehaviourMap, map || {});\n return this;\n }\n\n dispatchBehaviour (behaviour, payload, propagationInfo = {}) {\n const propagate = propagationInfo.propagate !== undefined ? propagationInfo.propagate : true;\n const behaviouralActions = this._actions.behavioural;\n const action = behaviouralActions[behaviour];\n const behaviourEffectMap = this._behaviourEffectMap;\n const sideEffects = getSideEffects(behaviour, behaviourEffectMap);\n this._propagationInf = propagationInfo;\n\n if (action) {\n const selectionSet = action.dispatch(payload);\n const propagationSelectionSet = this.getPropagationSelectionSet(selectionSet);\n this._entryExitSet[behaviour] = propagationSelectionSet;\n const shouldApplySideEffects = this.shouldApplySideEffects(propagate);\n\n if (propagate) {\n this.propagate(behaviour, payload, selectionSet.find(d => d.sourceSelectionSet), sideEffects);\n }\n if (shouldApplySideEffects) {\n const applicableSideEffects = this.getApplicableSideEffects(sideEffects, payload, propagationInfo);\n this.applySideEffects(applicableSideEffects, propagationSelectionSet, payload);\n }\n }\n\n return this;\n }\n\n getPropagationSelectionSet (selectionSet) {\n return selectionSet.find(d => !d.sourceSelectionSet);\n }\n\n shouldApplySideEffects () {\n return true;\n }\n\n changeBehaviourStateOnPropagation (behaviour, value) {\n if (value instanceof Function) {\n this._sourceBehaviours[behaviour] = value;\n } else {\n this._sourceBehaviours[behaviour] = () => value;\n }\n return this;\n }\n\n changeSideEffectStateOnPropagation (sideEffect, value) {\n if (value instanceof Function) {\n this._sourceSideEffects[sideEffect] = value;\n } else {\n this._sourceSideEffects[sideEffect] = () => value;\n }\n }\n\n propagate () {\n return this;\n }\n\n sideEffects (...sideEffects) {\n if (sideEffects.length) {\n this._sideEffects = sideEffects[0];\n return this;\n }\n return this._sideEffects;\n }\n\n enableSideEffects (fn) {\n changeSideEffectAvailability(this, fn, true);\n return this;\n }\n\n disableSideEffects (fn) {\n changeSideEffectAvailability(this, fn, false);\n return this;\n }\n\n dissociateBehaviour (behaviour, physicalAction) {\n const actionBehaviourMap = this._actionBehaviourMap;\n for (const key in actionBehaviourMap) {\n if (key === physicalAction) {\n const behaviourMap = actionBehaviourMap[key];\n behaviourMap.behaviours = behaviourMap.behaviours.filter(d => d !== behaviour);\n this.mapActionsAndBehaviour(key);\n }\n }\n\n return this;\n }\n\n dissociateSideEffect (sideEffect, behaviour) {\n const behaviourEffectMap = this._behaviourEffectMap;\n behaviourEffectMap[behaviour] = behaviourEffectMap[behaviour].filter(d => (d.name || d) !== sideEffect);\n return this;\n }\n\n getApplicableSideEffects (sideEffects) {\n return sideEffects;\n }\n\n attachPropagationListener (dataModel) {\n dataModel.unsubscribe('propagation');\n dataModel.on('propagation', this.onDataModelPropagation());\n return this;\n }\n\n onDataModelPropagation () {\n return (propValue) => {\n const payload = propValue.payload;\n const action = payload.action;\n\n this.dispatchBehaviour(action, payload, {\n propagate: false\n });\n };\n }\n\n createSelectionSet (uniqueIds, behaviouralActions) {\n const behaviours = behaviouralActions || this._actions.behavioural;\n const selectionSet = this._selectionSet;\n const volatileSelectionSet = this._volatileSelectionSet;\n\n for (const key in behaviours) {\n if ({}.hasOwnProperty.call(behaviours, key)) {\n selectionSet[key] = new SelectionSet(uniqueIds);\n volatileSelectionSet[key] = new SelectionSet(uniqueIds, true);\n }\n }\n this._volatileSelectionSet = volatileSelectionSet;\n this.selectionSet(selectionSet);\n return this;\n }\n\n selectionSet (...selectionSet) {\n if (selectionSet.length) {\n this._selectionSet = selectionSet[0];\n return this;\n }\n return this._selectionSet;\n }\n\n initializeSideEffects () {\n const sideEffectDefinitions = this._sideEffectDefinitions;\n this.sideEffects(initializeSideEffects(this, sideEffectDefinitions));\n return this;\n }\n\n registerPhysicalActions (actions) {\n const initedActions = initializePhysicalActions(this, actions);\n Object.assign(this._actions.physical, initedActions);\n return this;\n }\n\n /**\n * Allows to propagate the datamodel with only the supplied fields. When propagation is done, then the fields\n * which are supplied for the specified behavioural action is propagated.\n *\n * @public\n *\n * @param {string} action Name of behavioural action. If '*' is specified, then for all behavioural actions it is\n * applied.\n * @param {Array} fields Array of field names which will be propagated.\n * @param {boolean} append If true, then it is appended to the existing propagation data model fields else only\n * those fields are projected from propagation data model and propagated.\n *\n * @return {Firebolt} Instance of firebolt\n */\n propagateWith (action, fields, append = false) {\n const behaviouralActions = this._actions.behavioural;\n if (fields.length) {\n if (action === ALL_ACTIONS) {\n for (const key in behaviouralActions) {\n this._propagationFields[key] = {\n fields,\n append\n };\n }\n } else {\n this._propagationFields[action] = {\n fields,\n append\n };\n }\n return this;\n }\n return this._propagationFields;\n }\n\n /**\n * Map actions and behaviours\n * @return {Firebolt} Firebolt instance\n */\n mapActionsAndBehaviour (phyAction) {\n const initedPhysicalActions = this._actions.physical;\n const map = this._actionBehaviourMap;\n\n for (const action in map) {\n if (!({}).hasOwnProperty.call(action, map) && action === (phyAction || action)) {\n let target;\n const mapObj = map[action];\n target = mapObj.target;\n const touch = mapObj.touch;\n if (!target) {\n target = this.context.getDefaultTargetContainer();\n }\n const bind = hasTouch() ? touch === true || touch === undefined : !touch;\n bind && this.bindActionWithBehaviour(initedPhysicalActions[action],\n target, mapObj.behaviours);\n }\n }\n return this;\n }\n\n registerPhysicalBehaviouralMap (map) {\n this._actionBehaviourMap = mergeRecursive(this._actionBehaviourMap, map);\n return this;\n }\n\n /**\n * Binds a target element with an action.\n *\n * @param {Function} action Action method\n * @param {string} target Class name of element\n * @param {Array} behaviourList Array of behaviours\n * @return {FireBolt} Instance of firebolt\n */\n bindActionWithBehaviour (action, targets, behaviourList) {\n if (typeof (targets) === 'string') {\n targets = [targets];\n }\n targets.forEach((target) => {\n const mount = this.context.mount();\n const nodes = target.node instanceof Function ? target : selectElement(mount).selectAll(target);\n if (!nodes.empty()) {\n if (nodes instanceof Array) {\n nodes.forEach((node) => {\n action(selectElement(node), behaviourList);\n });\n } else {\n action(nodes, behaviourList);\n }\n }\n });\n return this;\n }\n\n getPropagationInf () {\n return this._propagationInf;\n }\n\n getAddSetFromCriteria (criteria, propagationInf = {}) {\n const context = this.context;\n const filteredDataModel = propagationInf.data ? propagationInf.data :\n context.getDataModelFromIdentifiers(criteria, 'all');\n const xFields = context.fields().x || [];\n const yFields = context.fields().y || [];\n const xMeasures = xFields.every(field => field.type() === FieldType.MEASURE);\n const yMeasures = yFields.every(field => field.type() === FieldType.MEASURE);\n return {\n model: filteredDataModel,\n uids: criteria === null ? null : (propagationInf.data ? filterPropagationModel(this.getFullData(),\n propagationInf.data[0], xMeasures && yMeasures).getData().uids : filteredDataModel[0].getData().uids)\n };\n }\n\n getSelectionSets (action) {\n const sourceId = this.context.id();\n const propagationInf = this._propagationInf || {};\n const propagationSource = propagationInf.sourceId;\n let applicableSelectionSets = [];\n if (propagationSource !== sourceId) {\n applicableSelectionSets = [this._volatileSelectionSet[action]];\n }\n\n if (propagationSource) {\n applicableSelectionSets.push(this.selectionSet()[action]);\n }\n return applicableSelectionSets;\n }\n\n getFullData () {\n return this.context.data();\n }\n\n resetted () {\n return this._resetted;\n }\n\n /**\n * Returns the entry and exit set information of the specified behavioural action.\n *\n * @public\n *\n * @param {string} behaviour Name of behavioural action.\n *\n * @return {Object} Entry exit set information.\n */\n getEntryExitSet (behaviour) {\n return this._entryExitSet[behaviour];\n }\n}\n","import { getSetInfo, getMergedSet, getSourceFields } from '../../helper';\n\n/**\n * This is the base class has all the common functionalities needed for all behavioural actions. Any other behavioural\n * action needs to extend this class.\n *\n * @public\n * @class GenericBehaviour\n * @module GenericBehaviour\n */\nexport default class GenericBehaviour {\n constructor (firebolt) {\n this.firebolt = firebolt;\n this._enabled = true;\n }\n\n /**\n * Returns entry and exit set information. This method is called by firebolt when ```dispatchBehaviour``` is called\n * dynamically or when any physical action is triggered on the chart.\n *\n * @param {Object} payload Payload information.\n * @param {Object|Array} payload.criteria Identifiers of data interacted with.\n *\n * @return {Array} Entry and exit set information.\n */\n dispatch (payload) {\n const criteria = payload.criteria;\n const firebolt = this.firebolt;\n const formalName = this.constructor.formalName();\n const selectionSets = firebolt.getSelectionSets(formalName);\n const {\n model: filteredDataModel,\n uids\n } = this.firebolt.getAddSetFromCriteria(criteria, this.firebolt.getPropagationInf());\n const entryExitSets = selectionSets.map((selectionSet) => {\n this.setSelectionSet(uids, selectionSet);\n return this.getEntryExitSet(selectionSet, filteredDataModel, payload);\n });\n\n return entryExitSets;\n }\n\n /**\n * Updates the selection set by adding uids to the instance of {@link SelectionSet} or removing them.\n * {@link SelectionSet} keeps the information of which rows are in the entry set and exit set.\n *\n * @public\n * @param {Array} addSet Array of row ids which got affected during interaction.\n * @param {SelectionSet} selectionSet Instance of selection set.\n *\n * @return {GenericBehaviour} Instance of behaviour.\n */\n setSelectionSet () {\n return this;\n }\n\n getEntryExitSet (selectionSet, filteredDataModel, payload) {\n const {\n entrySet,\n exitSet,\n completeSet\n } = selectionSet.getSets();\n const propagationInf = this.firebolt.getPropagationInf();\n const dataModel = this.firebolt.getFullData();\n const setConfig = {\n isSourceFieldPresent: propagationInf.isSourceFieldPresent,\n dataModel,\n filteredDataModel,\n propagationData: propagationInf.data,\n selectionSet\n };\n\n return {\n entrySet: [getSetInfo('oldEntry', entrySet[0], setConfig),\n getSetInfo('newEntry', entrySet[1], setConfig)],\n exitSet: [getSetInfo('oldEntry', exitSet[0], setConfig),\n getSetInfo('newExit', exitSet[1], setConfig)],\n mergedEnter: getSetInfo('mergedEnter', getMergedSet(entrySet), setConfig),\n mergedExit: getSetInfo('mergedExit', getMergedSet(exitSet), setConfig),\n completeSet: getSetInfo('complete', completeSet, setConfig),\n isSourceFieldPresent: propagationInf.isSourceFieldPresent,\n fields: getSourceFields(propagationInf, payload.criteria),\n sourceSelectionSet: selectionSet._volatile === true\n };\n }\n\n static mutates () {\n return false;\n }\n\n enable () {\n this._enabled = true;\n }\n\n disable () {\n this._enabled = false;\n }\n\n isEnabled () {\n return this._enabled;\n }\n}\n\n","import GenericBehaviour from './generic';\nimport { getMergedSet } from '../../helper';\nimport * as SELECTION from '../../enums/selection';\n\nexport default class VolatileBehaviour extends GenericBehaviour {\n setSelectionSet (addSet, selectionSet) {\n if (addSet === null) {\n selectionSet.reset();\n } else if (addSet.length) {\n // new add set\n const existingAddSet = addSet.filter(d => selectionSet._set[d] === SELECTION.SELECTION_NEW_ENTRY\n || selectionSet._set[d] === SELECTION.SELECTION_OLD_ENTRY);\n selectionSet.updateExit();\n const { entrySet } = selectionSet.getSets();\n selectionSet.reset(getMergedSet(entrySet));\n selectionSet.add(addSet);\n selectionSet.update(existingAddSet);\n } else {\n selectionSet.remove(selectionSet.getCompleteSet());\n }\n }\n}\n","export const BRUSH = 'brush';\nexport const HIGHLIGHT = 'highlight';\nexport const TOOLTIP = 'tooltip';\nexport const FILTER = 'filter';\nexport const SELECT = 'select';\n","import VolatileBehaviour from './volatile';\nimport { HIGHLIGHT } from '../../enums/behaviours';\n\nexport default class HighlightBehaviour extends VolatileBehaviour {\n static formalName () {\n return HIGHLIGHT;\n }\n}\n","import VolatileBehaviour from './volatile';\nimport * as BEHAVIOURNAMES from '../../enums/behaviours';\n\n/**\n * This is the behaviour for brushing a region on the chart. It accepts a payload\n * which contains the x and y range of the data and other configuration. It will then\n * create a selection box from the range and select the points which fall within the range.\n */\nexport default class BrushBehaviour extends VolatileBehaviour {\n static formalName () {\n return BEHAVIOURNAMES.BRUSH;\n }\n}\n","import VolatileBehaviour from './volatile';\nimport { FILTER } from '../../enums/behaviours';\n\nexport default class FilterBehaviour extends VolatileBehaviour {\n static formalName () {\n return FILTER;\n }\n\n static mutates () {\n return true;\n }\n}\n","import GenericBehaviour from './generic';\nimport { getMergedSet } from '../../helper';\nimport * as SELECTION from '../../enums/selection';\n\nexport default class PersistentBehaviour extends GenericBehaviour {\n setSelectionSet (addSet, selectionSet) {\n if (addSet === null) {\n selectionSet.reset();\n } else if (addSet.length) {\n const propagationInf = this.firebolt.getPropagationInf();\n // new add set\n const existingAddSet = addSet.filter(d => selectionSet._set[d] === SELECTION.SELECTION_NEW_ENTRY\n || selectionSet._set[d] === SELECTION.SELECTION_OLD_ENTRY);\n if (propagationInf.propagate === false) {\n selectionSet.updateExit();\n const { entrySet } = selectionSet.getSets();\n selectionSet.reset(getMergedSet(entrySet));\n selectionSet.add(addSet);\n selectionSet.update(existingAddSet);\n } else {\n // existing add set\n if (existingAddSet.length) {\n selectionSet.updateExit();\n selectionSet.remove(existingAddSet);\n } else {\n selectionSet.updateEntry();\n selectionSet.add(addSet);\n }\n const { exitSet } = selectionSet.getSets();\n const mergedExitSet = getMergedSet(exitSet);\n const completeSetCount = selectionSet.getCompleteSet().length;\n if (mergedExitSet.length === completeSetCount) {\n selectionSet.reset();\n }\n }\n } else {\n selectionSet.remove(selectionSet.getCompleteSet());\n }\n\n return this;\n }\n}\n","import PersistentBehaviour from './persistent';\nimport { SELECT } from '../../enums/behaviours';\n\nexport default class SelectBehaviour extends PersistentBehaviour {\n static formalName () {\n return SELECT;\n }\n}\n\n","import { DimensionSubtype, MeasureSubtype } from 'muze-utils';\n/**\n * Gets the drag action configuration\n * @param {VisualUnit} instance instance of visual unit\n * @param {Object} config x y positions\n * @return {Object} Payload of behaviour\n*/\n/* istanbul ignore next */ const getDragActionConfig = (sourceInfo, config, fieldsConfig) => {\n if (!(sourceInfo.axes.x || sourceInfo.axes.y)) {\n return {\n criteria: null\n };\n }\n\n const axes = sourceInfo.axes;\n const xAxis = axes.x[0];\n const yAxis = axes.y[0];\n const axisFields = sourceInfo.fields;\n const xField = axisFields.x[0].getMembers()[0];\n const yField = axisFields.y[0].getMembers()[0];\n const xFieldType = fieldsConfig[xField].def.subtype;\n const yFieldType = fieldsConfig[yField].def.subtype;\n const dimensions = {};\n const stPos = config.startPos;\n const endPos = config.endPos;\n\n if (stPos.x === endPos.x && stPos.y === endPos.y) {\n return {\n criteria: null\n };\n }\n\n const dragDim = xFieldType === MeasureSubtype.CONTINUOUS ? (yFieldType === MeasureSubtype.CONTINUOUS ?\n ['x', 'y'] : ['y']) : ['x'];\n const criteria = {};\n const isXDimension = xFieldType === DimensionSubtype.CATEGORICAL;\n const isYDimension = yFieldType === DimensionSubtype.CATEGORICAL;\n const xRange = xAxis.invertExtent(stPos.x, endPos.x);\n const yRange = yAxis.invertExtent(stPos.y, endPos.y);\n const selectedDomains = {\n x: stPos.x === endPos.x ? [] : (isXDimension ? xRange : xRange.sort((a, b) => a - b)),\n y: stPos.y === endPos.y ? [] : (isYDimension ? yRange : yRange.sort((a, b) => a - b))\n };\n const rangeObj = {};\n\n if (dragDim.length === 2) {\n rangeObj[xField] = selectedDomains.x;\n rangeObj[yField] = selectedDomains.y;\n if (xField === yField) {\n const xdom = selectedDomains.x;\n const ydom = selectedDomains.y;\n const min = xdom[0] > ydom[0] ? ydom : xdom;\n const max = min === ydom ? xdom : ydom;\n if (min[1] < max[0]) {\n rangeObj[xField] = [];\n } else {\n rangeObj[xField] = [max[0], min[1] < max[1] ? min[1] : max[1]];\n }\n dimensions.x = [stPos.x, endPos.x];\n dimensions.y = [stPos.y, endPos.y];\n }\n } else {\n criteria[dragDim[0]] = selectedDomains[dragDim[0]] || [];\n\n if (dragDim[0] === 'x') {\n rangeObj[xField] = criteria.x;\n if (xFieldType === DimensionSubtype.CATEGORICAL) {\n dimensions.x = (config.snap && stPos.x !== endPos.x) ? xAxis.getNearestRange(stPos.x, endPos.x) :\n [stPos.x, endPos.x];\n }\n } else {\n rangeObj[yField] = criteria.y;\n if (yFieldType === DimensionSubtype.CATEGORICAL) {\n dimensions.y = (config.snap && stPos.y !== endPos.y) ? yAxis.getNearestRange(stPos.y, endPos.y) :\n [stPos.y, endPos.y];\n }\n }\n }\n\n return {\n criteria: rangeObj,\n dimensions\n };\n};\n\nexport default getDragActionConfig;\n","import {\n getEvent,\n getD3Drag\n } from 'muze-utils';\n\nimport getDragActionConfig from './drag-action-config';\n\n/**\n * Adds dragging action to the target element.\n * @param {VisualUnit} instance Instance of visual unit.\n * @param {SVGElement} targetEl Element on which brushing action is needed.\n * @param {Array} behaviours Array of behaviours\n */\nexport const attachDragEvent = (targetEl, behaviours, firebolt, touch) => {\n let startPos = {};\n let endPos = {};\n let drawingInf;\n\n const d3Drag = getD3Drag();\n let touchStart;\n targetEl.call(d3Drag().on('start', () => {\n const event = getEvent();\n startPos = {\n x: event.x,\n y: event.y\n };\n drawingInf = firebolt.context.getDrawingContext();\n touchStart = new Date().getTime();\n }).on('drag', () => {\n const event = getEvent();\n endPos = {\n x: event.x,\n y: event.y\n };\n if (touch && Math.abs(startPos.x - endPos.x) <= 5) {\n return;\n }\n endPos.x = Math.max(0, Math.min(endPos.x, drawingInf.width));\n endPos.y = Math.max(0, Math.min(endPos.y, drawingInf.height));\n\n const payload = getDragActionConfig(firebolt.context.getSourceInfo(), {\n startPos,\n endPos\n }, firebolt.context.data().getFieldsConfig());\n behaviours.forEach(beh => firebolt.dispatchBehaviour(beh, payload));\n }).on('end', () => {\n const event = getEvent();\n endPos = {\n x: event.x,\n y: event.y\n };\n const duration = new Date().getTime() - touchStart;\n\n if (touch && duration > 100 && Math.abs(startPos.x - endPos.x) <= 5) {\n return;\n }\n endPos.x = Math.max(0, Math.min(endPos.x, drawingInf.width));\n endPos.y = Math.max(0, Math.min(endPos.y, drawingInf.height));\n\n const payload = getDragActionConfig(firebolt.context.getSourceInfo(), {\n startPos,\n endPos,\n snap: true\n }, firebolt.context.data().getFieldsConfig());\n payload.dragEnd = true;\n behaviours.forEach(beh => firebolt.dispatchBehaviour(beh, payload));\n }));\n};\n\n","import { getClientPoint, getEvent } from 'muze-utils';\nimport { CONSOLIDATED, FRAGMENTED } from '../../enums/constants';\n\n/**\n * Adds mouse interactions to target element.\n * @param {Firebolt} instance instance of firebolt.\n * @param {SVGElement} targetEl Element on which the event listeners will be attached.\n * @param {Array} behaviours Array of behaviours\n */\n/* istanbul ignore next */ const hover = firebolt => (targetEl, behaviours) => {\n const dispatchBehaviour = function (args) {\n const event = getEvent();\n const context = firebolt.context;\n const tooltipConf = context.config().interaction.tooltip;\n const mode = tooltipConf.mode;\n const pos = getClientPoint(context.getDrawingContext().svgContainer, event);\n const nearestPoint = context.getNearestPoint(pos.x, pos.y, {\n getAllPoints: mode === CONSOLIDATED || mode === FRAGMENTED,\n data: args,\n event\n });\n const payload = {\n criteria: nearestPoint ? nearestPoint.id : null,\n showInPosition: nearestPoint.showInPosition,\n target: nearestPoint.target,\n position: pos,\n mode\n };\n\n behaviours.forEach(beh => firebolt.dispatchBehaviour(beh, payload));\n event.stopPropagation();\n };\n\n targetEl.on('mouseover', dispatchBehaviour)\n .on('mousemove', dispatchBehaviour)\n .on('mouseout', () => {\n behaviours.forEach(beh => firebolt.dispatchBehaviour(beh, {\n criteria: null\n }));\n });\n};\n\nexport default hover;\n","export const CLASSPREFIX = 'muze';\nexport const CONSOLIDATED = 'consolidated';\nexport const FRAGMENTED = 'fragmented';\n\n","import { getClientPoint } from 'muze-utils';\n\nexport const generatePayloadFromEvent = function (args, event, firebolt) {\n const context = firebolt.context;\n const pos = getClientPoint(context.getDrawingContext().svgContainer, event.touches ? event.touches[0] : event);\n const nearestPoint = context.getNearestPoint(pos.x, pos.y, {\n data: args,\n event\n });\n return {\n criteria: nearestPoint ? nearestPoint.id : null,\n showInPosition: nearestPoint.showInPosition,\n target: nearestPoint.target,\n position: pos\n };\n};\n","import { getEvent } from 'muze-utils';\nimport { generatePayloadFromEvent } from './helpers';\n\n/**\n * Adds mouse interactions to target element.\n * @param {VisualUnit} instance instance of visual unit.\n * @param {SVGElement} targetEl Element on which the event listeners will be attached.\n * @param {Array} behaviours Array of behaviours\n */\n/* istanbul ignore next */ const click = firebolt => (targetEl, behaviours) => {\n const dispatchBehaviour = function (args) {\n const event = getEvent();\n const payload = generatePayloadFromEvent(args, event, firebolt);\n behaviours.forEach(beh => firebolt.dispatchBehaviour(beh, payload));\n event.stopPropagation();\n };\n\n targetEl.on('click', dispatchBehaviour);\n};\nexport default click;\n","import drag from './drag';\nimport hover from './hover';\nimport { longtouch } from './longtouch';\nimport { touchdrag } from './touch-drag';\nimport * as ACTIONNAMES from '../../enums/actions';\nimport click from './click';\n\nexport const physicalActions = {\n [ACTIONNAMES.DRAG]: drag,\n [ACTIONNAMES.HOVER]: hover,\n [ACTIONNAMES.CLICK]: click,\n [ACTIONNAMES.LONGTOUCH]: longtouch,\n [ACTIONNAMES.TOUCHDRAG]: touchdrag\n};\n\n","import { attachDragEvent } from './helpers/drag-event';\n\n/**\n * Adds dragging action to the target element.\n * @param {VisualUnit} instance Instance of visual unit.\n * @param {SVGElement} targetEl Element on which brushing action is needed.\n * @param {Array} behaviours Array of behaviours\n */\n/* istanbul ignore next */ const drag = firebolt => (targetEl, behaviours) => {\n attachDragEvent(targetEl, behaviours, firebolt);\n};\n\nexport default drag;\n","/* global setTimeout */\nimport { getEvent } from 'muze-utils';\nimport { generatePayloadFromEvent } from './helpers';\n\n/**\n * Adds mouse interactions to target element.\n * @param {VisualUnit} instance instance of visual unit.\n * @param {SVGElement} targetEl Element on which the event listeners will be attached.\n * @param {Array} behaviours Array of behaviours\n */\nexport const longtouch = firebolt => (targetEl, behaviours) => {\n let event;\n let touchEnd;\n const dispatchBehaviour = function (args) {\n const payload = generatePayloadFromEvent(args, event, firebolt);\n behaviours.forEach(beh => firebolt.dispatchBehaviour(beh, payload));\n event.stopPropagation();\n };\n\n touchEnd = false;\n event = getEvent();\n targetEl.on('touchstart', (args) => {\n event = getEvent();\n touchEnd = false;\n setTimeout(() => {\n if (!touchEnd) {\n dispatchBehaviour(args);\n } else {\n behaviours.forEach(beh => firebolt.dispatchBehaviour(beh, {\n criteria: null\n }));\n }\n }, 100);\n }).on('touchend', () => {\n touchEnd = true;\n });\n};\n","import { attachDragEvent } from './helpers/drag-event';\n\n/**\n * Adds dragging action to the target element.\n * @param {VisualUnit} instance Instance of visual unit.\n * @param {SVGElement} targetEl Element on which brushing action is needed.\n * @param {Array} behaviours Array of behaviours\n */\nexport const touchdrag = firebolt => (targetEl, behaviours) => {\n attachDragEvent(targetEl, behaviours, firebolt, true);\n};\n\n","export const PROPS = {\n valueParser: {\n defaultValue: val => val\n }\n};\n","import GenericSideEffect from './generic-sideeffect';\n\nexport default GenericSideEffect;\n","import { mergeRecursive, getUniqueId, generateGetterSetters } from 'muze-utils';\nimport { PROPS } from './props';\n\n/**\n * This is the base class of all side effects. It contains all common methods like setting configuration, disabling,\n * enabling side effect, etc. Every new side effect has to inherit this class or {@link SpawnableSideEffect} or\n * {@link SurrogateSideEffect} class. All side effects are initialized by firebolt. The instance of firebolt is\n * passed on initialization. The firebolt instance contains ```context``` which is the instance of visual unit with\n * which the firebolt is attached.\n *\n * @public\n * @class\n * @module GenericSideEffect\n */\nexport default class GenericSideEffect {\n constructor (firebolt) {\n this.firebolt = firebolt;\n this._enabled = true;\n this._strategy = 'default';\n this._config = {};\n this._id = getUniqueId();\n this._strategies = {};\n generateGetterSetters(this, PROPS);\n this.config(this.constructor.defaultConfig());\n }\n\n /**\n * Returns the default configuration of the side effect.\n *\n * @public\n * @return {Object} Default configuration of side effect.\n */\n static defaultConfig () {\n return {};\n }\n\n /**\n * Returns the formal name of a side effect. This method must be implemented by all side effects which changes\n * or adds any element in the visualization.\n *\n * @return {string} Formal name of side effect.\n */\n static formalName () {\n return 'generic';\n }\n\n static target () {\n return 'all';\n }\n\n /**\n * Returns true if the side effects mutates the data of chart.\n *\n * @public\n *\n * @return {boolean} If the side effect mutates the data of chart.\n */\n static mutates () {\n return false;\n }\n\n /**\n * Sets or gets the configuration of side effect.\n *\n * When setter,\n * @param {Object} config Configuration of side effect.\n * @return {GenericSideEffect} Side effect instance.\n *\n * When getter,\n * @return {Object} Side effect configuration.\n */\n config (...params) {\n if (params.length) {\n this._config = mergeRecursive(this._config, params[0]);\n return this;\n }\n return this._config;\n }\n\n disable () {\n this._enabled = false;\n return this;\n }\n\n enable () {\n this._enabled = true;\n return this;\n }\n\n isEnabled () {\n return this._enabled;\n }\n\n /**\n * Applies the interaction effect on the chart. This is where the implemntation of the side effect is defined.\n *\n * @param {Object} selectionSet Contains the entry and exit set of data which got affected during interaction.\n * @param {Object} selectionSet.mergedEnter Combined previous entry and new entry set.\n * @param {DataModel} selectionSet.mergedEnter.model Instance of data model containing all rows which got\n * affected during interaction.\n * @param {Array} selectionSet.mergedEnter.uids Ids of all rows which were affected during interaction.\n * @param {Object} selectionSet.mergedExit Combined previous exit and new exit set.\n * @param {DataModel} selectionSet.mergedExit.model Instance of data model containing rows which were not affected\n * during interaction.\n * @param {Array} selectionSet.mergedExit.uids Ids of all rows which were not affected during interaction.\n * @param {Object} selectionSet.entrySet Entry set information.\n * @param {Array} selectionSet.entrySet[0].uids All row ids which got affected during previous interaction.\n * @param {Array} selectionSet.entrySet[1].uids All row ids which got affected during current interaction.\n * @param {Array} selectionSet.exitSet[0].uids All row ids which were not affected during previous interaction.\n * @param {Array} selectionSet.exitSet[1].uids All row ids which were not affected during current interaction.\n * @param {Object} payload Payload information of the behavioural action on trigger of which this side effect\n * is applied.\n * @param {Object} options Optional information for side effect like strategy, etc.\n */\n apply () {\n return this;\n }\n\n /**\n * Adds a new strategy method for this side effect. The strategy method is implemented by side effect class.\n *\n * @param {string} name Name of the strategy.\n * @param {Function} fn Strategy method.\n *\n * @return {GenericSideEffect} Instance of side effect.\n */\n addStrategy (name, fn) {\n this._strategies[name] = fn;\n return this;\n }\n}\n","import GenericSideEffect from './generic';\n\n/**\n * This class is inherited by all side effects which changes the look of any existing elements in the visualization.\n * For example, if a side effect wants to change the color of bar plots, then it is a surrogate side effect.\n *\n * To use this,\n * ```\n * const SurrogateSideEffect = muze.SideEffects.standards.SurrogateSideEffect;\n *\n * class BarColorChanger extends SurrogateSideEffect {\n * static formalName () {\n * return 'colorChanger';\n * }\n *\n * // Implement the logic of applying the style here.\n * apply () {\n * }\n * }\n * ```\n * @public\n *\n * @module SurrogateSideEffect\n * @class\n * @extends GenericSideEffect\n */\nexport default class SurrogateSideEffect extends GenericSideEffect {\n /**\n * Applies or removes interaction styles from plot elements. An array of row ids needs to be passed\n * which identifies the plot elements and applies styles to them.\n *\n * To apply the interaction style,\n * ```\n * const entryRowIds = entrySet[0].uids;\n * const interactionStyle = [{\n * type: 'fill',\n * intensity: [0, 0, 15, 0] // hsla configuration\n * }];\n *\n * this.applyInteractionStyle(entryRowIds, interactionStyle, 'brighten', true);\n * ```\n * @public\n * @param {Array} set Array of row ids.\n * @param {Array} config Style configuration.\n * @param {Object} config[0] fill or stroke configuration.\n * @param {string} config[0].type Type of style - fill or stroke.\n * @param {Array} config[0].intensity hsla configuration.\n * @param {string} interactionType Type of interaction. This is needed for storing the styles for\n * each type of interaction in the plot elements.\n * @param {boolean} apply Whether to apply or remove the interaction style.\n *\n * @return {SurrogateSideEffect} Instance of surrogate side effect.\n */\n applyInteractionStyle (set, config = {}, interactionType, apply) {\n const layers = this.firebolt.context.layers();\n layers.forEach(layer => layer.config().interactive !== false &&\n layer.applyInteractionStyle(interactionType, set.uids, apply));\n return this;\n }\n}\n","import { makeElement } from 'muze-utils';\n\nimport GenericSideEffect from './generic';\n\n/**\n * Any side effect which will add any new element to the chart like drawing a rectangular box or any annotation over\n * the chart needs to inherit this class. This class has methods which returns the container where the dom elements\n * needs to be created.\n *\n * To use this,\n * ```\n * const SpawnableSideEffect = muze.SideEffects.standards.SpawnableSideEffect;\n *\n * class SelectionBox extends SpawnableSideEffect {\n * static formalName () {\n * return 'selectionBox';\n * }\n *\n * // Implement the logic of applying the style here.\n * apply () {\n * }\n * }\n * ```\n * @public\n * @class\n * @extends GenericSideEffect\n * @module SpawnableSideEffect\n */\nexport default class SpawnableSideEffect extends GenericSideEffect {\n /**\n * Creates a html or svg element in the container.\n *\n * @public\n * @param {SVGElement|HTMLElement} container Container where the dom element will be rendered.\n * @param {string} elemType Type of dom element.\n * @param {Array} data Array of objects with which the dom elements will be binded.\n * @param {string} className class name of the element.\n *\n * @return {Selection} D3 Selection of the element.\n */\n createElement (container, elemType, data, className, callbacks) {\n return makeElement(container, elemType, data, className, callbacks);\n }\n\n /**\n * Returns the drawing information for side effect like svg container, dimensions of the visual unit.\n *\n * @public\n * @return {Object} Drawing information for side effect.\n * ```\n * sideEffectGroup: // svg container where the side effect needs to be appended.\n * svgContainer: // svg container of the {@link VisualUnit}.\n * htmlContainer: // html div container of the {@link VisualUnit}.\n * width: // Width of the {@link VisualUnit}\n * height: // Height of the {@link VisualUnit}\n * ```\n */\n drawingContext (...drawingContext) {\n if (drawingContext.length) {\n this._drawingContext = drawingContext[0];\n return this;\n }\n return this._drawingContext();\n }\n\n show () {\n return this;\n }\n\n hide () {\n return this;\n }\n}\n","import { selectElement } from 'muze-utils';\n\nexport const getBoxDimensionsFromPayload = (payload, axes, axisFields) => {\n let x1;\n let x2;\n let y1;\n let y2;\n let xRange;\n let yRange;\n let direction;\n const criteria = payload.criteria;\n const dimensions = payload.dimensions || {};\n const xDim = dimensions.x;\n const yDim = dimensions.y;\n\n if (criteria === null) {\n return null;\n }\n\n const xAxis = axes.x[0];\n const yAxis = axes.y[0];\n const xLinear = xAxis.constructor.type() === 'linear';\n const yLinear = yAxis.constructor.type() === 'linear';\n const xField = `${axisFields.x[0]}`;\n const yField = `${axisFields.y[0]}`;\n const xCriteria = criteria[xField];\n const yCriteria = criteria[yField];\n\n if (xCriteria && xCriteria[0] instanceof Array) {\n xRange = xCriteria[0];\n yRange = xCriteria[1];\n } else {\n xRange = xCriteria || [];\n yRange = yCriteria || [];\n }\n direction = xCriteria && yCriteria ? 'both' : (xCriteria ? 'vertical' : 'horizontal');\n if (xRange && xRange.length) {\n if ((yAxis.constructor.type() === 'band' && xLinear)) {\n x1 = x2 = undefined;\n direction = 'horizontal';\n } else {\n const domain = xAxis.domain();\n const bandScale = xAxis.constructor.type() === 'band';\n let x1Val;\n let x2Val;\n if (bandScale) {\n let x1DomainIndex = domain.indexOf(xRange[0]);\n let x2DomainIndex = domain.indexOf(xRange[xRange.length - 1]);\n [x1DomainIndex, x2DomainIndex] = [x1DomainIndex, x2DomainIndex].sort((a, b) => a - b);\n x1Val = domain[x1DomainIndex];\n x2Val = domain[x2DomainIndex];\n } else {\n x1Val = xRange[0];\n x2Val = xRange[xRange.length - 1];\n }\n x1 = xAxis.getScaleValue(x1Val);\n x2 = xAxis.getScaleValue(x2Val);\n x2 += bandScale ? xAxis.getUnitWidth() : 0;\n }\n } else {\n x1 = x2 = undefined;\n }\n if (yRange && yRange.length) {\n if ((xAxis.constructor.type() === 'band' && yLinear)) {\n y1 = y2 = undefined;\n direction = 'vertical';\n } else {\n const domain = yAxis.domain();\n const bandScale = yAxis.constructor.type() === 'band';\n let y1Val;\n let y2Val;\n if (bandScale) {\n let y1DomainIndex = domain.indexOf(yRange[0]);\n let y2DomainIndex = domain.indexOf(yRange[yRange.length - 1]);\n [y1DomainIndex, y2DomainIndex] = [y1DomainIndex, y2DomainIndex].sort(((a, b) => b - a));\n y1Val = domain[y1DomainIndex];\n y2Val = domain[y2DomainIndex];\n } else {\n y1Val = yRange[0];\n y2Val = yRange[yRange.length - 1];\n }\n y1 = yAxis.getScaleValue(y1Val);\n y2 = yAxis.getScaleValue(y2Val);\n y2 += yAxis.constructor.type() === 'band' ? yAxis.getUnitWidth() : 0;\n }\n } else {\n y1 = y2 = undefined;\n }\n\n if ((yLinear && xLinear) || !payload.dragEnd) {\n if (xDim) {\n [x1, x2] = xDim;\n }\n if (yDim) {\n [y1, y2] = yDim;\n }\n }\n\n return {\n dimension: {\n x1,\n x2,\n y1,\n y2\n },\n direction\n };\n};\n\nexport const changeVisibility = (context, sideEffectGroup, visible) => {\n const config = context.config();\n const className = config.defClassName;\n const classPrefix = config.classPrefix;\n selectElement(sideEffectGroup).selectAll(`.${classPrefix}-${className}`)\n .style('display', visible ? 'block' : 'none');\n};\n","import {\n getQualifiedClassName,\n selectElement,\n makeElement,\n isValidValue\n} from 'muze-utils';\nimport { CLASSPREFIX } from '../../enums/constants';\nimport './styles.scss';\nimport SpawnableSideEffect from '../spawnable';\nimport { selectionBoxDrag } from '../../actions/physical/selection-box-drag';\nimport { getBoxDimensionsFromPayload, changeVisibility } from './helper';\n\n/**\n * This class is used to create a selection box which is used by visual unit for brushing and\n * selection in the canvas.\n * @class SelectionBox\n */\nclass SelectionBox extends SpawnableSideEffect {\n /**\n * It returns the default configuration needed by selectionbox.\n * @return {Object} Default configuration of the selection box.\n */\n static defaultConfig () {\n return {\n defClassName: 'selection-box-group',\n className: '',\n classPrefix: CLASSPREFIX,\n box: {\n defClassName: 'selection-box',\n className: ''\n },\n transition: {\n duration: 200\n }\n };\n }\n\n static formalName () {\n return 'selectionBox';\n }\n\n /**\n * Draws the selectionbox with the specified dimensions.\n * @param {Object} dimension Dimensions of the selection box.\n * @param {number} dimension.x1 Starting x position\n * @param {number} dimension.x2 Ending x position\n * @param {number} dimension.y1 Starting y position\n * @param {number} dimension.y2 Ending y position\n * @param {Object} conf Configuration needed to draw the selection box\n * @param {number} unitWidth Width of the visual unit.\n * @param {number} unitHeight Height of the visual unit.\n */\n apply (selectionSet, payload) {\n let x;\n let y;\n let width;\n let height;\n const config = this._config;\n const boxConf = config.box;\n const firebolt = this.firebolt;\n const drawingInf = this.drawingContext();\n const mountPoint = drawingInf.sideEffectGroup;\n const unitWidth = drawingInf.width;\n const unitHeight = drawingInf.height;\n const classPrefix = config.classPrefix;\n const selectionGroupClassName = config.defClassName;\n\n if (payload.criteria === null) {\n this.hide(drawingInf);\n return this;\n }\n\n const sourceInf = firebolt.context.getSourceInfo();\n const { dimension, direction } = getBoxDimensionsFromPayload(payload, sourceInf.axes,\n sourceInf.fields);\n const transition = payload.dragEnd && config.transition;\n\n if (direction === 'both' || direction === 'vertical') {\n x = Math.min(dimension.x1, dimension.x2);\n width = Math.abs(dimension.x2 - dimension.x1);\n } else {\n x = 0;\n width = unitWidth;\n }\n if (direction === 'both' || direction === 'horizontal') {\n y = Math.min(dimension.y1, dimension.y2);\n height = Math.abs(dimension.y2 - dimension.y1);\n } else {\n height = unitHeight;\n y = 0;\n }\n this.show(drawingInf);\n // Create the data array for drawing the rectangle\n const points = [\n {\n x,\n y,\n width,\n height\n }\n ];\n // Create the container group for selection box.\n const selectionGroup = makeElement(selectElement(mountPoint), 'g', [1],\n `.${classPrefix}-${selectionGroupClassName}`);\n const sideEffect = this;\n const selection = selectionGroup.selectAll('rect').data(points);\n const selectionBox = selection.enter().append('rect')\n .each(function () {\n selectionBoxDrag(firebolt)(selectElement(this), ['brush'], sideEffect);\n })\n .merge(selection)\n .each(function (attrs) {\n let element = selectElement(this);\n transition && (element = element.transition().duration(transition.duration));\n for (const key in attrs) {\n if ({}.hasOwnProperty.call(attrs, key)) {\n isValidValue(attrs[key]) && element.attr(key, attrs[key]);\n }\n }\n });\n // Get the qualified class name for selection box rectangle\n const boxClassName = getQualifiedClassName(boxConf.defClassName, this._id, classPrefix);\n selectionBox.classed(boxClassName.join(' '), true);\n selectionBox.classed(boxConf.className, true);\n\n return this;\n }\n\n hide (drawingInf) {\n changeVisibility(this, drawingInf.sideEffectGroup, false);\n }\n\n show (drawingInf) {\n changeVisibility(this, drawingInf.sideEffectGroup, true);\n }\n}\n\nexport default SelectionBox;\n\n","import {\n getEvent,\n getD3Drag\n } from 'muze-utils';\n\nimport getDragActionConfig from './helpers/drag-action-config';\n\nexport const selectionBoxDrag = firebolt => (targetEl, behaviours) => {\n let subject;\n let drawingInf;\n const context = firebolt.context;\n const onDrag = (payload) => {\n behaviours.forEach(action => firebolt.dispatchBehaviour(action, payload));\n };\n const d3Drag = getD3Drag();\n\n targetEl.call(d3Drag().on('start', () => {\n const event = getEvent();\n drawingInf = context.getDrawingContext();\n subject = event.subject;\n }).on('drag', () => {\n const event = getEvent();\n subject.x += event.dx;\n subject.y += event.dy;\n const width = drawingInf.width;\n const height = drawingInf.height;\n const x = Math.min(width - subject.width, Math.max(subject.x, 0));\n const y = Math.min(height - subject.height, Math.max(subject.y, 0));\n const y2 = y + subject.height;\n const x2 = x + subject.width;\n\n if (x >= 0 && x2 <= width && y >= 0 && y2 <= height) {\n const payload = getDragActionConfig(context.getSourceInfo(), {\n startPos: {\n x,\n y\n },\n endPos: {\n x: x2,\n y: y2\n }\n }, context.data().getFieldsConfig());\n onDrag(payload);\n }\n }).on('end', () => {\n const width = drawingInf.width;\n const height = drawingInf.height;\n const x = Math.min(width - subject.width, Math.max(subject.x, 0));\n const y = Math.min(height - subject.height, Math.max(subject.y, 0));\n const y2 = y + subject.height;\n const x2 = x + subject.width;\n\n if (x >= 0 && x2 <= width && y >= 0 && y2 <= height) {\n const payload = getDragActionConfig(context.getSourceInfo(), {\n startPos: {\n x,\n y\n },\n endPos: {\n x: x2,\n y: y2\n },\n snap: true\n }, context.data().getFieldsConfig());\n payload.dragEnd = true;\n onDrag(payload);\n }\n }));\n};\n","export const CLASSPREFIX = 'muze';\nexport const ARROW_RIGHT = 'right';\nexport const ARROW_TOP = 'top';\nexport const ARROW_BOTTOM = 'bottom';\nexport const ARROW_LEFT = 'left';\nexport const TOOLTIP_LEFT = 'left';\nexport const TOOLTIP_RIGHT = 'right';\nexport const TOOLTIP_BOTTOM = 'bottom';\nexport const TOOLTIP_TOP = 'top';\nexport const INITIAL_STYLE = {\n position: 'absolute',\n width: 0,\n height: 0\n};\n","import { CLASSPREFIX } from './constants';\n\nexport const defaultConfig = {\n classPrefix: CLASSPREFIX,\n defClassName: 'tooltip-box',\n connectorClassName: 'tooltip-connectors',\n className: '',\n row: {\n margin: 0\n },\n content: {\n spacing: 5,\n iconContainerSize: 10,\n iconScale: 1,\n iconShape: 'circle',\n iconColor: '#ff0000',\n rowMargin: '0px',\n margin: 10,\n separator: ':',\n className: 'tooltip-content-container',\n parentClassName: 'tooltip-content-parent-container'\n },\n arrow: {\n size: 10,\n disabled: false,\n defClassName: 'tooltip-arrow',\n className: '',\n color: 'rgba(195,195,195,0.85)'\n }\n};\n","import { getQualifiedClassName } from 'muze-utils';\nimport { TOOLTIP_LEFT, TOOLTIP_RIGHT, ARROW_RIGHT, ARROW_LEFT, TOOLTIP_BOTTOM } from './constants';\n\nexport const getArrowPos = (orient, dim, measurement, config) => {\n let arrowPos;\n const { x, y, boxHeight, boxWidth } = measurement;\n const arrowDisabled = config.arrow.disabled;\n const arrowWidth = arrowDisabled ? 0 : config.arrow.size;\n\n if (orient === ARROW_LEFT || orient === ARROW_RIGHT) {\n let start = 0;\n let diff = boxHeight / 2;\n const plotBottom = dim.y + dim.height;\n const boxBottom = y + boxHeight;\n\n if (dim.y > y) {\n start = dim.y - y;\n diff = (plotBottom >= boxBottom ? (boxBottom - dim.y) : dim.height) / 2;\n } else if (boxBottom > plotBottom) {\n diff = Math.abs(y - (dim.y + dim.height)) / 2;\n }\n arrowPos = start + diff - arrowWidth / 2;\n } else {\n let start = 0;\n let diff = boxWidth / 2;\n const plotRight = dim.x + dim.width;\n const boxRight = x + boxWidth;\n\n if (dim.x > x) {\n start = dim.x - x;\n diff = (plotRight >= boxRight ? (boxRight - dim.x) : dim.width) / 2;\n } else if (boxRight > plotRight) {\n diff = Math.abs(x - (dim.x + dim.width)) / 2;\n }\n arrowPos = start + diff - arrowWidth / 2;\n }\n return arrowPos;\n};\n\n/**\n * Places the arrow in the specified arrow position. It also applies appropriate arrow\n * class name to the arrow element.\n * @param {string} position Left, bottom or right position of the arrow;\n * @param {number} arrowPos position of arrow in pixels\n * @return {Tooltip} Instance of tooltip.\n */\nexport const placeArrow = (context, position, arrowPos) => {\n const tooltipArrow = context._tooltipArrow;\n const tooltipBackground = context._tooltipBackground;\n const config = context._config;\n const classPrefix = config.classPrefix;\n const arrowConf = config.arrow;\n const className = getQualifiedClassName(arrowConf.defClassName, context._id, config.classPrefix);\n\n tooltipArrow.style('display', 'block');\n tooltipArrow.attr('class', `${className.join(' ')}`);\n if (position === TOOLTIP_LEFT || position === TOOLTIP_RIGHT) {\n tooltipArrow.style('top', `${arrowPos}px`);\n tooltipArrow.style('left', '');\n tooltipBackground.style('top', `${arrowPos}px`);\n tooltipBackground.style('left', '');\n } else {\n position === TOOLTIP_BOTTOM ? tooltipArrow.style('top', '100%') : tooltipArrow.style('top',\n `-${arrowConf.size}px`);\n tooltipArrow.style('left', `${arrowPos}px`);\n position === TOOLTIP_BOTTOM ? tooltipBackground.style('top', '100%') : tooltipBackground.style('top',\n `-${arrowConf.size + 3}px`);\n tooltipBackground.style('left', `${arrowPos}px`);\n }\n tooltipArrow.classed(`${classPrefix}-tooltip-arrow`, true);\n tooltipArrow.classed(`${classPrefix}-tooltip-arrow-${context._arrowOrientation}`, false);\n tooltipArrow.classed(`${classPrefix}-tooltip-arrow-${position}`, true);\n tooltipBackground.classed(`${classPrefix}-tooltip-background-arrow`, true);\n tooltipBackground.classed(`${classPrefix}-tooltip-background-arrow-${context._arrowOrientation}`, false);\n tooltipBackground.classed(`${classPrefix}-tooltip-background-arrow-${position}`, true);\n return this;\n};\n\nexport const reorderContainers = (parentContainer, className) => {\n parentContainer.selectAll(className).sort((a, b) => a - b);\n};\n","import {\n formatTemporal,\n DimensionSubtype,\n MeasureSubtype,\n FieldType,\n DataModel,\n defaultValue\n} from 'muze-utils';\n\nconst { InvalidAwareTypes } = DataModel;\n\nconst formatters = (formatter, interval, valueParser) => ({\n [DimensionSubtype.TEMPORAL]: (value) => {\n if (value instanceof InvalidAwareTypes) {\n return valueParser(value);\n }\n return formatTemporal(value, interval);\n },\n [MeasureSubtype.CONTINUOUS]: value => (value instanceof InvalidAwareTypes ? valueParser(value) :\n formatter(value.toFixed(2))),\n [DimensionSubtype.CATEGORICAL]: value => valueParser(value)\n});\n\nconst getDefaultTooltipFormatterFn = (formatter, defaultFormatter) => defaultValue(formatter, defaultFormatter);\n\nconst getTabularData = (dataObj, context, defaultFormatter) => {\n const rows = [];\n const { data, schema, fieldspace } = dataObj;\n rows.push(schema.map(d => d.name));\n const { valueParser, timeDiffs } = context;\n data.forEach((d) => {\n const row = [];\n schema.forEach((fieldObj, i) => {\n const interval = fieldObj.subtype === DimensionSubtype.TEMPORAL ? timeDiffs[fieldObj.name] : 0;\n const numberFormat = fieldObj.type === FieldType.MEASURE && fieldspace.fields[i].numberFormat();\n const formatterFn = getDefaultTooltipFormatterFn(formatters(numberFormat,\n interval, valueParser)[fieldObj.subtype], defaultFormatter);\n const value = formatterFn(d[i]);\n row.push(value);\n });\n rows.push(row);\n });\n return rows;\n};\n\nexport const buildTooltipData = (dataModel, config = {}, context) => {\n let fieldValues = [];\n const dataObj = dataModel.getData();\n const data = dataObj.data;\n const schema = dataObj.schema;\n const separator = config.separator;\n const fieldsConfig = dataModel.getFieldsConfig();\n const fieldspace = dataModel.getFieldspace();\n const detailFields = context.detailFields || [];\n const dimensions = schema.filter(d => d.type === FieldType.DIMENSION);\n const measures = schema.filter(d => d.type === FieldType.MEASURE);\n const containsDetailField = schema.find(d => detailFields.indexOf(d.name) !== -1);\n const dataLen = data.length;\n const {\n valueParser,\n axes,\n dimensionMeasureMap,\n timeDiffs\n } = context;\n const defFormatter = formatters(null, null, valueParser)[DimensionSubtype.CATEGORICAL];\n const getRowContent = (field, type) => {\n let value;\n let formattedValue;\n let measureIndex;\n const values = [];\n const index = fieldsConfig[field].index;\n const interval = fieldsConfig[field].def.subtype === DimensionSubtype.TEMPORAL ? timeDiffs[field] : 0;\n const formatterFn = getDefaultTooltipFormatterFn(formatters(val => val, interval, valueParser)[type],\n defFormatter);\n\n if (value !== null) {\n let uniqueVals = type === MeasureSubtype.CONTINUOUS ? data.map(d => d[index]) :\n [...new Set(data.map(d => d[index]))];\n uniqueVals = uniqueVals.filter(d => d !== '');\n const colorAxis = axes.color[0];\n const shapeAxis = axes.shape[0];\n const sizeAxis = axes.size[0];\n const isRetinalField = (colorAxis || shapeAxis || sizeAxis) && dataLen > 1 &&\n type !== MeasureSubtype.CONTINUOUS;\n\n uniqueVals.forEach((val, i) => {\n let key;\n const associatedMeasures = dimensionMeasureMap[field];\n\n if (associatedMeasures && associatedMeasures.length && dataLen > 1) {\n key = val;\n let icon = {\n value: ''\n };\n\n if (isRetinalField) {\n icon = {\n type: 'icon',\n color: colorAxis.getColor(val),\n shape: shapeAxis.getShape(val),\n size: sizeAxis.getSize(val) * config.iconScale\n };\n }\n if (associatedMeasures.length > 1) {\n const formattedKey = type === DimensionSubtype.TEMPORAL ? formatterFn(key, interval) : key;\n values.push([icon, `${formattedKey}`]);\n associatedMeasures.forEach((measure) => {\n measureIndex = fieldsConfig[measure].index;\n value = data[i][measureIndex];\n const numberFormat = fieldspace.fields[measureIndex].numberFormat();\n const measureFormatter = getDefaultTooltipFormatterFn(\n formatters(numberFormat, interval, valueParser)[MeasureSubtype.CONTINUOUS]);\n formattedValue = measureFormatter(value);\n values.push([{\n value: `${measure}${separator}`,\n style: {\n 'margin-left': `${config.margin}px}`\n },\n className: `${config.classPrefix}-tooltip-key`\n }, {\n value: `${formattedValue}`,\n className: `${config.classPrefix}-tooltip-value`\n }]);\n });\n } else {\n measureIndex = fieldsConfig[associatedMeasures[0]].index;\n value = data[i][measureIndex];\n const numberFormat = fieldspace.fields[measureIndex].numberFormat();\n const measureFormatter = getDefaultTooltipFormatterFn(\n formatters(numberFormat, interval, valueParser)[MeasureSubtype.CONTINUOUS]);\n formattedValue = measureFormatter(value);\n const formattedKey = type === DimensionSubtype.TEMPORAL ? formatterFn(key, interval) : key;\n values.push([\n icon,\n {\n value: `${formattedKey}`,\n className: `${config.classPrefix}-tooltip-key`\n },\n {\n value: `${formattedValue}`,\n className: `${config.classPrefix}-tooltip-value`\n }\n ]);\n }\n } else {\n key = field;\n value = val;\n formattedValue = formatterFn(value);\n values.push([{\n value: `${key}${separator}`,\n className: `${config.classPrefix}-tooltip-key`\n }, {\n value: `${formattedValue}`,\n className: `${config.classPrefix}-tooltip-value`\n }]);\n }\n });\n }\n return values;\n };\n let displayFormat = 'keyValue';\n\n if (dataLen > 1 && containsDetailField) {\n fieldValues = getTabularData({\n data,\n schema,\n fieldspace\n }, context, defFormatter);\n displayFormat = 'table';\n } else {\n dimensions.forEach((item) => {\n const type = item.subtype ? item.subtype : item.type;\n fieldValues = [...fieldValues, ...getRowContent(item.name, type)];\n });\n\n const allMeasures = [...new Set(...Object.values(dimensionMeasureMap))];\n const filteredMeasures = dataLen > 1 ? measures.filter(d => allMeasures.indexOf(d.name) === -1)\n : measures;\n\n filteredMeasures.forEach((item) => {\n const type = item.subtype ? item.subtype : item.type;\n fieldValues = [...fieldValues, ...getRowContent(item.name, type)];\n });\n }\n\n return {\n content: fieldValues,\n displayFormat\n };\n};\n\n/**\n * This contains the strategy methods for showing tooltip in the chart.\n * @param {VisualUnit} context Attached instance.\n */\nexport const strategy = {\n keyValue: (data, config, context) => {\n const values = buildTooltipData(data, config, context);\n return values;\n }\n};\n\nexport const DEFAULT_STRATEGY = 'keyValue';\n","import {\n selectElement,\n mergeRecursive,\n makeElement,\n setAttrs,\n setStyles,\n getSymbol,\n isSimpleObject\n} from 'muze-utils';\nimport { DEFAULT_STRATEGY, strategy } from './strategy';\nimport { defaultConfig } from './default-config';\n\n/**\n * This class is used to manage the content of tooltip.\n */\nexport default class Content {\n /**\n * Creates an instance of content.\n */\n constructor () {\n this._model = null;\n this._strategy = DEFAULT_STRATEGY;\n this._formatter = null;\n this._config = this.constructor.defaultConfig();\n }\n /**\n * Returns the default configuration of tooltip\n * @return {Object} Configuration of tooltip.\n */\n static defaultConfig () {\n const config = defaultConfig.content;\n config.classPrefix = defaultConfig.classPrefix;\n return config;\n }\n\n config (...c) {\n if (c.length > 0) {\n this._config = mergeRecursive(this._config, c[0]);\n return this;\n }\n return this._config;\n }\n\n /**\n * Update model. The format contains presentation strategy which determines how to show the content.\n * If no strategy is mentioned then default is to show key value pair\n */\n update (item) {\n this._model = item.model;\n this._strategy = item.strategy !== undefined ? item.strategy : DEFAULT_STRATEGY;\n this._formatter = item.formatter;\n return this;\n }\n\n context (ctx) {\n this._context = ctx;\n return this;\n }\n\n render (mount) {\n let data;\n const config = this._config;\n const iconContainerSize = config.iconContainerSize;\n const formatter = this._formatter;\n const rowMargin = config.rowMargin;\n const model = this._model;\n\n this._mount = mount;\n if (model instanceof Array) {\n data = model;\n } else {\n data = formatter instanceof Function ? formatter(this._model, this._context) :\n strategy[this._strategy](this._model, this.config(), this._context);\n }\n\n if (data instanceof Function) {\n mount.html(data());\n } else {\n let content = data;\n let displayFormat = 'default';\n\n if (isSimpleObject(data)) {\n content = data.content;\n displayFormat = data.displayFormat;\n }\n\n const body = makeElement(mount, 'div', [displayFormat], `${config.classPrefix}-tooltip-content`, {},\n d => d);\n\n if (displayFormat === 'table') {\n const table = makeElement(body, 'table', [1], `${config.classPrefix}-tooltip-table`);\n const tbody = makeElement(table, 'tbody', [1], `${config.classPrefix}-tooltip-table-tbody`);\n const rows = makeElement(tbody, 'tr', content, `${config.classPrefix}-tooltip-table-row`);\n rows.each(function (d, i) {\n selectElement(this).classed(`${config.classPrefix}-tooltip-table-row-${i}`, true);\n });\n const cells = makeElement(rows, 'td', d => d, `${config.classPrefix}-tooltip-table-cell`);\n cells.each(function (d) {\n selectElement(this).html(d);\n });\n } else {\n const rows = makeElement(body, 'div', content, `${config.classPrefix}-tooltip-row`);\n const cells = makeElement(rows, 'span', d => d, `${config.classPrefix}-tooltip-content`);\n cells.attr('class', `${config.classPrefix}-tooltip-content`);\n setStyles(rows, {\n margin: rowMargin\n });\n setStyles(cells, {\n display: 'inline-block',\n 'margin-right': `${config.spacing}px`\n });\n\n cells.each(function (d) {\n const el = selectElement(this);\n el.html('');\n if (d instanceof Object) {\n if (d.type === 'icon') {\n const svg = makeElement(el, 'svg', [1]);\n const path = makeElement(svg, 'path', [1]);\n const shape = d.shape instanceof Function ? d.shape : getSymbol(d.shape);\n\n setAttrs(svg, {\n x: 0,\n y: 0,\n width: iconContainerSize,\n height: iconContainerSize\n });\n setAttrs(path, {\n d: shape.size(d.size)(),\n transform: `translate(${iconContainerSize / 2}, ${iconContainerSize / 2})`\n });\n setStyles(path, {\n fill: d.color\n });\n setStyles(svg, {\n width: `${iconContainerSize}px`,\n height: `${iconContainerSize}px`\n });\n } else {\n el.html(d.value);\n d.className && el.classed(d.className, true);\n setStyles(el, d.style);\n }\n } else {\n el.html(d);\n }\n });\n }\n }\n return this;\n }\n\n clear () {\n this._model = null;\n return this;\n }\n}\n","import {\n mergeRecursive,\n getQualifiedClassName,\n getUniqueId,\n selectElement,\n setStyles,\n makeElement\n} from 'muze-utils';\nimport { ARROW_BOTTOM, ARROW_LEFT, ARROW_RIGHT, TOOLTIP_LEFT, TOOLTIP_RIGHT, TOOLTIP_BOTTOM, TOOLTIP_TOP,\n INITIAL_STYLE } from './constants';\nimport { defaultConfig } from './default-config';\nimport { getArrowPos, placeArrow, reorderContainers } from './helper';\nimport './styles.scss';\nimport Content from './content';\n\n/**\n * This component is responsible for creating a tooltip element. It appends the tooltip\n * in the body element.\n * @class Tooltip\n */\nexport default class Tooltip {\n /**\n * Initializes the tooltip with the container element and configuration\n * @param {HTMLElement} container container where the tooltip will be mounted.\n * @param {string} className Class name of the tooltip.\n */\n constructor (htmlContainer, svgContainer) {\n let connectorContainer = svgContainer;\n this._id = getUniqueId();\n this._config = {};\n this.config({});\n const tooltipConf = this._config;\n const classPrefix = tooltipConf.classPrefix;\n const contentClass = tooltipConf.content.parentClassName;\n const container = makeElement(htmlContainer, 'div', [1], `${classPrefix}-tooltip-container`);\n this._container = container;\n this._tooltipContainer = container.append('div').style('position', 'absolute');\n this._contentContainer = this._tooltipContainer.append('div').attr('class', `${classPrefix}-${contentClass}`);\n this._tooltipBackground = this._tooltipContainer.append('div').style('position', 'relative');\n this._tooltipArrow = this._tooltipContainer.append('div');\n\n if (!svgContainer) {\n connectorContainer = htmlContainer.append('svg').style('pointer-events', 'none');\n }\n this._contents = {};\n this._tooltipConnectorContainer = selectElement(connectorContainer)\n .append('g')\n .attr('class', `${tooltipConf.classPrefix}-${tooltipConf.connectorClassName}`);\n const id = this._id;\n const defClassName = tooltipConf.defClassName;\n const qualifiedClassName = getQualifiedClassName(defClassName, id, tooltipConf.classPrefix);\n\n setStyles(this._tooltipArrow, INITIAL_STYLE);\n setStyles(this._tooltipBackground, INITIAL_STYLE);\n this.addClass(qualifiedClassName.join(' '));\n this.addClass(tooltipConf.className);\n this.hide();\n }\n\n /**\n * Sets the configuration of tooltip.\n * @param {Object} config Configuration of tooltip\n * @return {Tooltip} Instance of tooltip\n */\n config (...config) {\n if (config.length > 0) {\n const defConf = mergeRecursive({}, this.constructor.defaultConfig());\n this._config = mergeRecursive(defConf, config[0]);\n return this;\n }\n return this._config;\n }\n\n /**\n * Returns the default configuration of tooltip\n * @return {Object} Configuration of tooltip.\n */\n static defaultConfig () {\n return defaultConfig;\n }\n /**\n * Sets the class name of tooltip\n * @param {string} className tooltip class name\n * @return {Tooltip} Instance of tooltip.\n */\n addClass (className) {\n this._tooltipContainer.classed(className, true);\n return this;\n }\n\n context (...ctx) {\n if (ctx.length) {\n this._context = ctx[0];\n return this;\n }\n return this._context;\n }\n\n content (name, data, contentConfig = {}) {\n const config = this.config();\n const { classPrefix } = config;\n const contentClass = config.content.className;\n const formatter = config.formatter;\n const className = contentConfig.className || `${classPrefix}-${contentClass}-${name}`;\n const content = this._contents[name] = this._contents[name] || new Content();\n const container = makeElement(this._contentContainer, 'div', [contentConfig.order], className);\n container.attr('class', `${classPrefix}-${contentClass} ${className}`);\n reorderContainers(this._contentContainer, `.${classPrefix}-${contentClass}`);\n const contentConf = config.content;\n contentConfig.classPrefix = this._config.classPrefix;\n content.config(contentConf);\n\n if (data === null) {\n content.clear();\n container.remove();\n delete this._contents[name];\n } else {\n content.update({\n model: data,\n formatter: contentConfig.formatter || formatter\n });\n content.context(this._context);\n content.render(container);\n }\n\n if (!Object.keys(this._contents).length) {\n this.hide();\n }\n return this;\n }\n\n getContents () {\n return Object.values(this._contents);\n }\n\n /**\n * Positions the tooltip at the given x and y position.\n * @param {number} x x position\n * @param {number} y y position\n * @return {Tooltip} Instance of tooltip.\n */\n position (x, y, conf = {}) {\n if (!Object.keys(this._contents).length) {\n this.hide();\n return this;\n }\n this.show();\n const target = this._target;\n const repositionArrow = conf.repositionArrow;\n\n if (target && repositionArrow) {\n const node = this._tooltipContainer.node();\n const config = this._config;\n const arrowDisabled = config.arrow.disabled;\n const arrowWidth = arrowDisabled ? 0 : config.arrow.size;\n const arrowOrient = this._arrowOrientation;\n const outsidePlot = arrowOrient === ARROW_LEFT || arrowOrient === ARROW_RIGHT ?\n (y + node.offsetHeight - arrowWidth) < target.y || y > (target.y + target.height) :\n (x + node.offsetWidth - arrowWidth) < target.x || x > (target.x + target.width);\n\n if (!arrowDisabled) {\n if (outsidePlot) {\n let path;\n this._tooltipArrow.style('display', 'none');\n this._tooltipBackground.style('display', 'none');\n this._tooltipConnectorContainer.style('display', 'block');\n const connector = this._tooltipConnectorContainer.selectAll('path').data([1]);\n const enter = connector.enter().append('path');\n if (arrowOrient === ARROW_LEFT) {\n path = `M ${x} ${y + node.offsetHeight / 2} L ${target.x + target.width}`\n + ` ${target.y + target.height / 2}`;\n } else if (arrowOrient === ARROW_RIGHT) {\n path = `M ${x + node.offsetWidth} ${y + node.offsetHeight / 2}`\n + ` L ${target.x} ${target.y + target.height / 2}`;\n } else if (arrowOrient === ARROW_BOTTOM) {\n path = `M ${x + node.offsetWidth / 2} ${y + node.offsetHeight}`\n + ` L ${target.x + target.width / 2} ${target.y}`;\n }\n enter.merge(connector).attr('d', path).style('display', 'block');\n } else {\n const arrowPos = getArrowPos(arrowOrient, target, {\n x,\n y,\n boxHeight: node.offsetHeight,\n boxWidth: node.offsetWidth\n }, this._config);\n\n placeArrow(this, this._arrowOrientation, arrowPos);\n this._tooltipConnectorContainer.style('display', 'none');\n }\n }\n }\n\n const offset = this._offset || {\n x: 0,\n y: 0\n };\n this._tooltipContainer.style('left', `${offset.x + x}px`).style('top',\n `${offset.y + y}px`);\n\n return this;\n }\n\n /**\n * Positions the tooltip relative to a rectangular box. It takes care of tooltip overflowing the\n * boundaries.\n * @param {Object} dim Dimensions of the plot.\n */\n positionRelativeTo (dim, tooltipConf = {}) {\n let obj;\n let orientation = tooltipConf.orientation;\n this.show();\n if (!dim) {\n this.hide();\n return this;\n }\n\n const extent = this._extent;\n const node = this._tooltipContainer.node();\n\n this._tooltipContainer.style('top', '0px')\n .style('left', '0px');\n const offsetWidth = node.offsetWidth + 2;\n const offsetHeight = node.offsetHeight + 2;\n const config = this._config;\n const offset = this._offset;\n const arrowDisabled = config.arrow.disabled;\n const arrowSize = arrowDisabled ? 0 : config.arrow.size;\n const draw = tooltipConf.draw !== undefined ? tooltipConf.draw : true;\n const topSpace = dim.y;\n // When there is no space in right\n const dimX = dim.x + dim.width + offset.x;\n const rightSpace = extent.width - dimX;\n const leftSpace = dim.x + offset.x - extent.x;\n const positionTop = topSpace > (offsetHeight + arrowSize);\n const positionRight = rightSpace >= offsetWidth + arrowSize;\n const positionLeft = leftSpace >= offsetWidth + arrowSize;\n\n const positionHorizontal = () => {\n let position;\n let x = dim.x + dim.width;\n let y = dim.y;\n\n if (positionRight) {\n position = TOOLTIP_LEFT;\n x += arrowSize;\n } else if (positionLeft) {\n x = dim.x - offsetWidth;\n position = TOOLTIP_RIGHT;\n x -= arrowSize;\n } else {\n position = 'left';\n x += arrowSize;\n }\n if (dim.height < offsetHeight) {\n y = Math.max(0, dim.y + dim.height / 2 - offsetHeight / 2);\n }\n\n const arrowPos = getArrowPos(position, dim, {\n x,\n y,\n boxHeight: offsetHeight,\n boxWidth: offsetWidth\n }, this._config);\n\n return {\n position,\n arrowPos,\n x,\n y\n };\n };\n\n const positionVertical = () => {\n let position;\n let y;\n // Position tooltip at the center of plot\n let x = dim.x - offsetWidth / 2 + dim.width / 2;\n\n // Overflows to the right\n if ((extent.width - (dim.x + offset.x)) < offsetWidth) {\n x = extent.width - offsetWidth - offset.x;\n } else if ((x + offset.x) < extent.x) { // Overflows to the left\n x = extent.x;\n }\n\n if (positionTop) {\n y = dim.y - offsetHeight - arrowSize;\n position = TOOLTIP_BOTTOM;\n } else {\n y = dim.y + dim.height + arrowSize;\n position = TOOLTIP_TOP;\n }\n\n const arrowPos = getArrowPos(position, dim, {\n x,\n y,\n boxHeight: offsetHeight,\n boxWidth: offsetWidth\n }, this._config);\n\n return {\n position,\n arrowPos,\n x,\n y\n };\n };\n\n this._target = dim;\n if (!orientation) {\n if (positionTop) {\n orientation = 'vertical';\n } else if (positionRight || positionLeft) {\n orientation = 'horizontal';\n } else {\n orientation = 'vertical';\n }\n }\n\n if (orientation === 'horizontal') {\n obj = positionHorizontal();\n } else if (orientation === 'vertical') {\n obj = positionVertical();\n }\n\n this._position = {\n x: obj.x,\n y: obj.y\n };\n\n this._arrowPos = obj.arrowPos;\n if (!arrowDisabled) {\n placeArrow(this, obj.position, obj.arrowPos);\n } else {\n this._tooltipArrow.style('display', 'none');\n this._tooltipBackground.style('display', 'none');\n }\n this._arrowOrientation = obj.position;\n draw && this.position(obj.x, obj.y);\n return this;\n }\n\n /**\n * Hides the tooltip element.\n * @return {Tooltip} Instance of tooltip.\n */\n hide () {\n this._tooltipContainer.style('display', 'none');\n this._tooltipConnectorContainer.style('display', 'none');\n return this;\n }\n\n /**\n * Shows the tooltip element.\n * @return {Tooltip} Instance of tooltip.\n */\n show () {\n this._tooltipContainer.style('display', 'block');\n return this;\n }\n\n extent (extent) {\n this._extent = extent;\n return this;\n }\n\n offset (offset) {\n this._offset = offset;\n return this;\n }\n\n remove () {\n this._tooltipContainer.remove();\n this._tooltipBackground.remove();\n this._tooltipConnectorContainer.remove();\n return this;\n }\n}\n","import { FieldType } from 'muze-utils';\n\nexport const strategies = {\n showSelectedItems: (dm) => {\n const dataObj = dm.getData();\n const measures = dataObj.schema.filter(d => d.type === FieldType.MEASURE);\n const aggregatedModel = dm.groupBy([''], measures.reduce((acc, v) => {\n acc[v.name] = v.defAggFn === 'count' ? 'sum' : v.defAggFn;\n return acc;\n }, {}));\n const fieldsObj = dm.getFieldspace().fieldsObj();\n const fieldsConf = aggregatedModel.getFieldsConfig();\n let values = [{\n value: `${dataObj.data.length}`,\n style: {\n 'font-weight': 'bold'\n }\n }, 'Items Selected'];\n const measureNames = measures.map(d => d.name);\n if (measureNames.length) {\n values = [...values, ...[`(${fieldsObj[measureNames[0]].defAggFn().toUpperCase()}) ${measureNames[0]}`,\n {\n value: `${aggregatedModel.getData().data[0][fieldsConf[measureNames[0]].index].toFixed(2)}`,\n style: {\n 'font-weight': 'bold'\n }\n }]];\n }\n return [values];\n }\n};\n","import { Tooltip as TooltipRenderer } from '@chartshq/muze-tooltip';\nimport { FieldType } from 'muze-utils';\nimport { spaceOutBoxes } from '../helper';\nimport { strategies } from './strategies';\nimport { FRAGMENTED } from '../../enums/constants';\nimport SpawnableSideEffect from '../spawnable';\n\nimport './styles.scss';\n\nexport default class Tooltip extends SpawnableSideEffect {\n constructor (...params) {\n super(...params);\n this._tooltips = {};\n this._strategies = strategies;\n this._strategy = 'default';\n }\n\n static defaultConfig () {\n return {\n padding: 5,\n offset: {\n x: 0,\n y: 0\n }\n };\n }\n\n static formalName () {\n return 'tooltip';\n }\n\n apply (selectionSet, payload, options = {}) {\n let totalHeight = 0;\n let totalWidth = 0;\n const dataModel = selectionSet.mergedEnter.model;\n const context = this.firebolt.context;\n const drawingInf = this.drawingContext();\n if ((dataModel.isEmpty() || payload.criteria === null) || selectionSet.isSourceFieldPresent === false) {\n this.hide(options, null);\n return this;\n }\n\n const tooltips = this._tooltips;\n const config = this.config();\n const boundBox = {\n width: drawingInf.width,\n height: drawingInf.height\n };\n const showInPosition = payload.showInPosition;\n const pad = config.padding;\n const dataModels = [];\n const fragmented = config.mode === FRAGMENTED;\n const sourceInf = context.getSourceInfo();\n const fields = sourceInf.fields;\n const xFieldDim = fields.x[0] ? fields.x[0].type() === FieldType.DIMENSION : false;\n const showVertically = !!xFieldDim;\n const tooltipPos = payload.position;\n const boxes = [];\n const enter = {};\n const uids = dataModel.getData().uids;\n if (fragmented) {\n dataModels.push(...uids.map(d => dataModel.select((fieldsArr, i) => i === d, {\n saveChild: false\n })));\n } else {\n dataModels.push(dataModel);\n }\n\n let target = payload.target;\n let targetFields = [];\n if (target) {\n targetFields = target[0] || [];\n const sourceFields = payload.sourceFields;\n const indices = [];\n for (let i = 0, len = targetFields.length; i < len; i++) {\n if (sourceFields.indexOf(targetFields[i]) !== -1) {\n indices.push(i);\n }\n }\n target = target.map(d => d.filter((v, i) => indices.indexOf(i) !== -1));\n }\n\n const plotDimensions = context.getPlotPointsFromIdentifiers(target || payload.criteria, {\n getBBox: true\n });\n\n // Show tooltip for each datamodel\n for (let i = 0; i < dataModels.length; i++) {\n let plotDim = plotDimensions[i];\n if (fragmented) {\n const dimensions = dataModels[i].getData().schema.filter(d => d.type === FieldType.DIMENSION)\n .map(d => d.name);\n plotDim = context.getPlotPointsFromIdentifiers(dataModels[i].project(dimensions), { getBBox: true });\n plotDim = plotDim && plotDim[0];\n }\n\n let dt = dataModels[i];\n if (config.fields) {\n dt = dt.project(config.fields, {\n saveChild: false\n });\n }\n if (config.dataTransform) {\n dt = config.dataTransform(dt, i);\n }\n\n enter[i] = true;\n const { parentContainer: layoutContainer, parentContainerDimensions } = drawingInf;\n const layoutBoundBox = layoutContainer.getBoundingClientRect();\n const unitBoundBox = drawingInf.htmlContainer.getBoundingClientRect();\n\n const offsetLeft = unitBoundBox.left - layoutBoundBox.left;\n const offsetTop = unitBoundBox.top - layoutBoundBox.top;\n const tooltipInst = tooltips[i] = tooltips[i] || new TooltipRenderer(layoutContainer,\n drawingInf.svgContainer);\n\n sourceInf.payload = payload;\n sourceInf.firebolt = this.firebolt;\n sourceInf.detailFields = context.detailFields();\n sourceInf.timeDiffs = context.timeDiffsByField();\n sourceInf.valueParser = context.valueParser();\n tooltipInst.context(sourceInf);\n const strategy = strategies[options.strategy];\n tooltipInst.content(options.strategy || this._strategy, dt, {\n formatter: strategy,\n order: options.order\n })\n .config(this.config())\n .extent({\n x: 0,\n y: 0,\n width: parentContainerDimensions.width,\n height: parentContainerDimensions.height\n })\n .offset({\n x: offsetLeft + (config.offset.x || 0),\n y: offsetTop + (config.offset.y || 0)\n });\n\n if (showInPosition) {\n tooltipInst.position(tooltipPos.x + pad, tooltipPos.y + pad);\n } else if (plotDim) {\n tooltipInst.positionRelativeTo({\n x: plotDim.x,\n y: plotDim.y,\n width: plotDim.width || 0,\n height: plotDim.height || 0\n }, {\n orientation: fragmented ?\n (showVertically ? 'horizontal' : 'vertical') : undefined\n });\n } else {\n tooltipInst.hide();\n break;\n }\n\n if (fragmented) {\n const position = tooltipInst._position;\n const tooltipBoundBox = tooltipInst._tooltipContainer.node().getBoundingClientRect();\n\n totalHeight += tooltipBoundBox.height + pad;\n totalWidth += tooltipBoundBox.width + pad;\n if (showVertically ? totalHeight > drawingInf.height : totalWidth > drawingInf.width) {\n break;\n }\n boxes.push({\n x: position.x,\n y: position.y,\n width: tooltipBoundBox.width,\n height: tooltipBoundBox.height,\n tooltip: tooltipInst\n });\n }\n }\n\n for (const key in tooltips) {\n if (!enter[key]) {\n const tooltip = tooltips[key];\n tooltip.content(payload.action, null);\n if (!tooltip.getContents().length) {\n tooltip.remove();\n delete tooltips[key];\n }\n }\n }\n if (fragmented) {\n spaceOutBoxes(boxes, boundBox, showVertically);\n boxes.forEach(box => box.tooltip.position(box.x, box.y, {\n repositionArrow: true\n }));\n }\n return this;\n }\n\n hide (options) {\n const tooltips = this._tooltips;\n for (const key in tooltips) {\n if ({}.hasOwnProperty.call(tooltips, key)) {\n const strategy = options.strategy || this._strategy;\n tooltips[key].content(strategy, null);\n tooltips[key].hide();\n }\n }\n }\n}\n","export const spaceOutBoxes = (boxes, extent, showVertically) => {\n let y;\n let height;\n let x;\n let width;\n let i;\n const pad = 5;\n const len = boxes.length;\n const spaceOutIfOverlap = (firstBox, secondBox, opposite) => {\n x = firstBox.x;\n width = firstBox.width;\n y = firstBox.y;\n height = firstBox.height;\n const bottom = y + height;\n const right = x + width;\n\n if (showVertically) {\n if (opposite ? y < (secondBox.y + secondBox.height) : bottom > secondBox.y) {\n secondBox.y = opposite ? firstBox.y - secondBox.height - pad :\n bottom + pad;\n }\n } else if (opposite ? x < (secondBox.x + secondBox.width) : right > secondBox.x) {\n secondBox.x = opposite ? firstBox.x - secondBox.width - pad :\n right + pad;\n }\n };\n\n boxes.sort((a, b) => (showVertically ? a.y - b.y : a.x - b.x));\n i = 0;\n\n for (i = 0; i < len - 1; i++) {\n spaceOutIfOverlap(boxes[i], boxes[i + 1]);\n }\n\n if ((boxes[i].y + boxes[i].height) > extent.height ||\n (boxes[i].x + boxes[i].width) > extent.width) {\n if (showVertically) {\n boxes[i].y -= (boxes[i].height + boxes[i].y) - extent.height;\n } else {\n boxes[i].x -= (boxes[i].width + boxes[i].x) - extent.width;\n }\n for (i = len - 1; i > 0; i--) {\n spaceOutIfOverlap(boxes[i], boxes[i - 1], true);\n }\n }\n return boxes;\n}\n;\n","import { selectElement, FieldType } from 'muze-utils';\n\nimport './styles.scss';\nimport { CLASSPREFIX } from '../../enums/constants';\nimport SpawnableSideEffect from '../spawnable';\n\nexport default class Crossline extends SpawnableSideEffect {\n static defaultConfig () {\n return {\n className: `${CLASSPREFIX}-crossline-group`,\n bandClass: `${CLASSPREFIX}-crossband`,\n lineClass: `${CLASSPREFIX}-crossline`\n };\n }\n\n static formalName () {\n return 'crossline';\n }\n\n apply (selectionSet, payload) {\n let height;\n let bandWidth;\n let px;\n let width;\n const {\n className,\n bandClass,\n lineClass\n } = this.config();\n const dataModel = selectionSet.mergedEnter.model;\n const drawingInf = this.drawingContext();\n if (payload.criteria && dataModel && dataModel.isEmpty()) {\n return this;\n }\n if (payload.criteria === null || !dataModel) {\n this.hide();\n return this;\n }\n\n const dataObj = dataModel.getData();\n const sourceInf = this.firebolt.context.getSourceInfo();\n const axes = sourceInf.axes;\n const axisFields = sourceInf.fields;\n const fields = selectionSet.fields;\n const data = dataObj.data;\n const fieldsConfig = dataModel.getFieldsConfig();\n const svgContainer = drawingInf.sideEffectGroup;\n\n const elemData = [];\n fields.forEach((field) => {\n const fieldIndex = fieldsConfig[field] && fieldsConfig[field].index;\n const dataArr = data.map(d => d[fieldIndex]);\n const axisIndex = [['x', 0], ['x', 1], ['y', 0], ['y', 1]].find((arr) => {\n const fieldInst = axisFields[arr[0]][arr[1]];\n return fieldInst && fieldInst.type() === FieldType.DIMENSION &&\n fieldInst.getMembers().indexOf(field) !== -1;\n });\n if (axisIndex !== undefined && data.length) {\n const type = axisIndex[0];\n const axis = axes[type][axisIndex[1]];\n const value = dataArr[0];\n bandWidth = axis.getUnitWidth() || 0;\n px = axis.getScaleValue(value) + bandWidth / 2 + drawingInf.xOffset;\n const plotWidth = Math.max(...this.firebolt.context.layers().map(layer => layer.getPlotSpan()[type]));\n const pad = Math.max(...this.firebolt.context.layers().map(layer => layer.getPlotPadding()[type]));\n height = drawingInf.height;\n width = drawingInf.width;\n const startPx = px - plotWidth / 2 - pad / 2;\n const endPx = px + plotWidth / 2 + pad / 2;\n const dataPoint = {};\n if (type === 'y') {\n dataPoint.d = `M 0 ${startPx} L 0 ${endPx} L ${width} ${endPx} L ${width} ${startPx} Z`;\n } else {\n dataPoint.d = `M ${startPx} 0 L ${endPx} 0 L ${endPx} ${height} L ${startPx} ${height} Z`;\n }\n dataPoint.className = plotWidth ? bandClass : lineClass;\n elemData.push(dataPoint);\n }\n });\n if (elemData.length) {\n const parentGroup = this.createElement(svgContainer, 'g', [1], className);\n const elem = this.createElement(parentGroup, 'path', elemData);\n elem.attr('d', d => d.d).style('pointer-events', 'none')\n .attr('class', d => d.className);\n }\n return this;\n }\n\n hide () {\n const className = this.config().className;\n const drawingInf = this.drawingContext();\n selectElement(drawingInf.sideEffectGroup).selectAll(`.${className}`).remove();\n }\n}\n","const fadeFn = (set, context, strategy) => {\n const {\n mergedEnter,\n mergedExit,\n exitSet,\n completeSet\n } = set;\n\n if (!mergedEnter.length && !mergedExit.length) {\n context.applyInteractionStyle(completeSet, {}, strategy, false);\n } else {\n context.applyInteractionStyle(exitSet[1], {}, strategy, true);\n context.applyInteractionStyle(mergedEnter, {}, strategy, false);\n }\n};\n\nexport const strategies = {\n fade: fadeFn,\n focus: (set, context) => {\n const {\n mergedEnter,\n mergedExit,\n completeSet\n } = set;\n if (!mergedEnter.length && !mergedExit.length) {\n context.applyInteractionStyle(completeSet, {}, 'focus', false);\n } else {\n context.applyInteractionStyle(mergedExit, {}, 'focus', true);\n context.applyInteractionStyle(mergedEnter, {}, 'focus', false);\n }\n },\n highlight: (set, context) => {\n const {\n mergedEnter,\n mergedExit,\n entrySet,\n exitSet,\n completeSet\n } = set;\n if (!mergedEnter.length && !mergedExit.length) {\n context.applyInteractionStyle(completeSet, {}, 'highlight', false);\n } else {\n context.applyInteractionStyle(entrySet[1], {}, 'highlight', true);\n context.applyInteractionStyle(exitSet[1], {}, 'highlight', false);\n }\n }\n};\n","import SurrogateSideEffect from '../surrogate';\nimport { strategies } from './strategy';\n\nexport default class PlotHighlighter extends SurrogateSideEffect {\n constructor (...params) {\n super(...params);\n this._strategy = 'highlight';\n this._strategies = strategies;\n }\n\n static formalName () {\n return 'highlighter';\n }\n\n static target () {\n return 'visual-unit';\n }\n\n apply (selectionSet, payload, options = {}) {\n const strategy = this._strategies[options.strategy || this._strategy];\n\n if (selectionSet.isSourceFieldPresent !== false) {\n strategy(selectionSet, this, options.strategy || this._strategy);\n }\n\n return this;\n }\n}\n","import SurrogateSideEffect from '../surrogate';\n\nexport default class FilterEffect extends SurrogateSideEffect {\n static formalName () {\n return 'filter';\n }\n\n static target () {\n return 'visual-unit';\n }\n\n static mutates () {\n return true;\n }\n\n apply (selectionSet, payload) {\n const context = this.firebolt.context;\n const entryModel = selectionSet.mergedEnter.model;\n if (payload.criteria === null) {\n context.clearCaching().resetData();\n } else {\n context.enableCaching().data(entryModel);\n }\n return this;\n }\n}\n","import { DataModel, STATE_NAMESPACES, getObjProp } from 'muze-utils';\nimport { CLASSPREFIX } from '../../enums/constants';\nimport SpawnableSideEffect from '../spawnable';\n\nimport './styles.scss';\n\nconst addLayer = (layerDefs, layerRegistry, context, sideEffect) => {\n const layers = [];\n if (layerDefs) {\n layerDefs.forEach((layerDef) => {\n const mark = layerDef.mark;\n const layerCls = layerRegistry[mark];\n if (layerCls && layerCls.shouldDrawAnchors()) {\n const depLayerEncoding = layerDef.def.encoding;\n const encoding = {\n x: getObjProp(depLayerEncoding, 'x', 'field'),\n y: getObjProp(depLayerEncoding, 'y', 'field'),\n color: getObjProp(depLayerEncoding, 'color', 'field'),\n size: {\n field: getObjProp(depLayerEncoding, 'size', 'field'),\n value: sideEffect.defaultSizeValue()\n }\n };\n const name = `${layerDef.def.name}-${sideEffect.constructor.formalName()}`;\n const layerObj = {\n instances: context.addLayer({\n name,\n mark: 'point',\n className: sideEffect.constructor.defaultConfig().className,\n encoding,\n transform: {\n type: 'identity'\n },\n transition: sideEffect.getTransitionConfig(),\n calculateDomain: false,\n source: dm => dm.select(() => false, {\n saveChild: false\n }),\n interactive: false,\n render: false\n }),\n linkedLayer: layerDef.def.name\n };\n layers.push(layerObj);\n }\n });\n }\n return layers;\n};\n\nexport default class AnchorEffect extends SpawnableSideEffect {\n constructor (...params) {\n super(...params);\n this._layersMap = {};\n this.addAnchorLayers();\n }\n\n static target () {\n return 'visual-unit';\n }\n\n static defaultConfig () {\n return {\n className: `${CLASSPREFIX}-anchors-group`\n };\n }\n\n static formalName () {\n return 'anchors';\n }\n\n addAnchorLayers () {\n const context = this.firebolt.context;\n const metaInf = context.metaInf();\n const layerRegistry = context.registry().layerRegistry;\n const layerDefsVal = context.layerDef();\n context.store().registerImmediateListener(\n `${STATE_NAMESPACES.UNIT_LOCAL_NAMESPACE}.${metaInf.namespace}.layerDef`, ([, layerDefs]) => {\n this._layers = addLayer(layerDefs, layerRegistry, context, this);\n });\n this._layers = addLayer(layerDefsVal, layerRegistry, context, this);\n return this;\n }\n\n getTransitionConfig () {\n return {\n disabled: true\n };\n }\n\n /**\n * Returns the default area value of the anchor point.\n * @return { number } Default area value of anchor.\n */\n defaultSizeValue () {\n return 100;\n }\n\n apply (selectionSet) {\n const self = this;\n const dataModel = selectionSet.mergedEnter.model;\n if (selectionSet.isSourceFieldPresent !== false) {\n const drawingInf = this.drawingContext();\n const sideEffectGroup = drawingInf.sideEffectGroup;\n const className = `${this.config().className}`;\n const layers = this._layers;\n const parentGroup = this.createElement(sideEffectGroup, 'g', [1], `${className}-container`);\n const anchorGroups = this.createElement(parentGroup, 'g', Object.values(layers));\n anchorGroups.each(function (layer) {\n const instances = layer.instances;\n const elems = self.createElement(this, 'g', instances, className);\n const linkedLayer = self.firebolt.context.getLayerByName(layer.linkedLayer);\n const [transformedData, schema] = linkedLayer.getTransformedDataFromIdentifiers(dataModel);\n const transformedDataModel = new DataModel(transformedData, schema);\n elems.each(function (d, i) {\n instances[i].data(transformedDataModel).mount(this);\n });\n });\n }\n return this;\n }\n}\n","import AnchorEffect from './anchors';\nimport { CLASSPREFIX } from '../enums/constants';\n\nexport default class PersistentAnchors extends AnchorEffect {\n static formalName () {\n return 'persistent-anchors';\n }\n\n static defaultConfig () {\n return {\n className: `${CLASSPREFIX}-persistent-anchors`\n };\n }\n\n getTransitionConfig () {\n return {\n disabled: true\n };\n }\n}\n","import AnchorEffect from './anchors';\nimport { CLASSPREFIX } from '../enums/constants';\n\nexport default class BrushAnchors extends AnchorEffect {\n static formalName () {\n return 'brush-anchors';\n }\n\n static defaultConfig () {\n return {\n className: `${CLASSPREFIX}-brush-anchors`\n };\n }\n\n getTransitionConfig () {\n return {\n disabled: true\n };\n }\n}\n","import * as BEHAVIOURS from './enums/behaviours';\n\nexport const behaviourEffectMap = {\n [BEHAVIOURS.BRUSH]: ['selectionBox', {\n name: 'highlighter',\n options: {\n strategy: 'fade'\n }\n }, 'brush-anchors'],\n [`${BEHAVIOURS.BRUSH},${BEHAVIOURS.SELECT}`]: [{\n name: 'tooltip',\n options: {\n strategy: 'showSelectedItems',\n order: 0,\n filter: context => context.config().mode === 'fragmented'\n }\n }],\n [BEHAVIOURS.HIGHLIGHT]: [{\n name: 'highlighter',\n options: {\n strategy: 'highlight'\n }\n }, 'crossline', {\n name: 'tooltip',\n options: {\n order: 9999\n }\n }, 'anchors'],\n [BEHAVIOURS.FILTER]: ['filter'],\n [BEHAVIOURS.SELECT]: [{\n name: 'highlighter',\n options: {\n strategy: 'focus'\n }\n }, 'persistent-anchors']\n};\n","export const CLASSPREFIX = 'muze';\nexport const STACK = 'stack';\nexport const GROUP = 'group';\nexport const IDENTITY = 'identity';\nexport const ANGLE = 'angle';\nexport const RADIUS = 'radius';\nexport const SIZE = 'size';\nexport const COLOR = 'color';\nexport const SHAPE = 'shape';\nexport const OUTER_RADIUS_VALUE = 'outerRadiusValue';\nexport const TEXT_ANCHOR_MIDDLE = 'middle';\nexport const ENCODING = {\n X: 'x',\n Y: 'y',\n X0: 'x0',\n Y0: 'y0'\n};\n\nexport const ASCENDING = 'asc';\n\nexport const AGG_FN_SUM = 'sum';\n\nexport const AREA_LAYER = 'area';\nexport const ARC_LAYER = 'arc';\nexport const LINE_LAYER = 'line';\nexport const TEXT_LAYER = 'text';\nexport const POINT_LAYER = 'point';\nexport const BAR_LAYER = 'bar';\nexport const TICK_LAYER = 'tick';\nexport const SIMPLE_LAYER = 'simple';\nexport const BASE_LAYER = 'base';\n","import { CLASSPREFIX, STACK } from '../../enums/constants';\n\nexport const defaultConfig = {\n classPrefix: CLASSPREFIX,\n defClassName: 'layer-area',\n className: '',\n interpolate: 'linear',\n transform: {\n type: STACK\n },\n interaction: {\n\n },\n nearestPointThreshold: 10,\n encoding: {\n color: {},\n x: {},\n y: {},\n y0: {},\n strokeOpacity: {\n value: 1\n }\n },\n transition: {\n effect: 'cubic',\n duration: 1000\n },\n connectNullData: false\n};\n","import { ERROR_MSG } from 'muze-utils';\n\n/**\n * This is an interface class which any new layer class has to extend.\n *\n * @example\n * class BarLayer extends BaseLayer {\n * update (params) {\n * // super.update(params);\n * // Update the bar layer\n * }\n * }\n * @class\n */\nexport default class SimpleLayer {\n\n formalName () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Sets or gets the dependencies.\n * @param {Object} dependencies Dependencies needed by layer\n * @return {BaseLayer} Instance of base layer.\n */\n dependencies () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Returns the config of the layer\n *\n * @param {Object} config Configuration of layer\n * @return {Object} configuration of layer\n */\n config () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Acts as a getter or setter function\n * When setter\n * Returns the datamodel of the layer\n * @param { DataModel } dataModel instance of DataModel\n * @return { DataModel } DataModel instance of the layer\n */\n data () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Returns a serialized schema of the layer\n * @return {Object} Serialized schema\n */\n serialize () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Returns the unique identifier of this layer\n * @return {string} id of the layer\n */\n id () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n /*\n * This method resolves the x, y, x0 and y0 values from the transformed data.\n * It also checks the type of transformed data for example, if it is a stacked data\n * then it fetches the y and y0 values from the stacked data.\n * @param {Array.} transformedData transformed data\n * @param {Object} fieldMap field definitions\n * @param {string} transformType type of transformed data - stack, group or identity.\n * @return {Array.} Normalized data\n * @private\n */\n normalizeTransformedData () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Gets the transform method from transform factory based on type of transform. It then calls the\n * transform method with the data and passes the configuration parameters of transform such as\n * groupBy, value field, etc.\n *\n * @param {DataModel} dataModel Instance of dataModel\n * @param {Object} config configuration for transforming data\n * @return {Array.} Transformed data.\n * @private\n */\n getTransformedData () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Calculates the domain from the data.\n * It checks the type of field and calculates the domain based on that. For example, if it\n * is a quantitative or temporal field, then it calculates the min and max from the data or\n * if it is a nominal field then it gets all the values from the data of that field.\n * @param {Array} data DataArray\n * @return {Array} Domain values array.\n */\n _calculateDomainFromData () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Returns the domain for the axis.\n *\n * @param {string} encodingType type of encoding x, y, color, etc.\n * @return {Object} Axis domains\n */\n getDomain () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Abstract method for getting nearest point\n * @return {BaseLayer} Instance of base layer\n */\n getNearestPoint () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Abstract method for highlighting points\n * @return {BaseLayer} Instance of base layer\n */\n highlightPoint () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Abstract method for deselecting points\n * @return {BaseLayer} Instance of base layer\n */\n dehighlightPoint () {\n return this;\n }\n\n linkLayerStore () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Sets the container element for the layer to be renderered.\n * @param {SVGElement} mountPoint SVG element or group element.\n */\n mount () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n render () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n}\n","export const props = {\n axes: {},\n mount: {},\n measurement: {},\n metaInf: {},\n data: {},\n config: {},\n valueParser: {\n defaultValue: val => val\n }\n};\n","/**\n * @module Axis\n * This file declares a class that is used to render an axis to add meaning to\n * plots.\n */\nimport { Symbols } from 'muze-utils';\nimport * as AxisOrientation from '../enums/axis-orientation';\n\n/**\n * @module Axis\n * This file exports constants that are used to reference axis orientations\n * in a consistent manner.\n */\nexport const BOTTOM = 'bottom';\nexport const TOP = 'top';\nexport const LEFT = 'left';\nexport const RIGHT = 'right';\n\n/**\n * This object is used to associate the axis orientation with the d3 class\n * used to represent that axis.\n */\nexport const axisOrientationMap = {\n [AxisOrientation.LEFT]: Symbols.axisLeft,\n [AxisOrientation.BOTTOM]: Symbols.axisBottom,\n [AxisOrientation.RIGHT]: Symbols.axisRight,\n [AxisOrientation.TOP]: Symbols.axisTop\n};\n","/**\n * @module axis\n * This file exports constants used to reference scale type\n * consistently throughout the project.\n */\nexport const LINEAR = 'linear';\nexport const BAND = 'band';\nexport const TIME = 'temporal';\nexport const COLOR = 'color';\nexport const ORDINAL = 'ordinal';\nexport const QUANTIZE = 'quantize';\nexport const QUANTILE = 'quantile';\nexport const LOG = 'log';\nexport const POW = 'pow';\nexport const IDENTITY = 'identity';\nexport const SEQUENTIAL = 'sequential';\nexport const THRESHOLD = 'threshold';\n","export const CLASSPREFIX = 'muze';\n\nexport const CONTINOUS = 'continous';\nexport const DISCRETE = 'discrete';\nexport const SEQUENTIAL = 'sequential';\nexport const ORDINAL = 'ordinal';\nexport const LINEAR = 'linear';\nexport const THRESHOLD = 'threshold';\nexport const QUANTIZE = 'quantize';\nexport const QUANTILE = 'quantile';\n\nexport const COLOR = 'color';\nexport const SHAPE = 'shape';\nexport const SIZE = 'size';\n\nexport const DOMAIN = 'domain';\nexport const BAND = 'band';\nexport const HIDDEN = 'hidden';\nexport const NUMBER = 'number';\nexport const BOTTOM = 'bottom';\nexport const TOP = 'top';\n\nexport const RGB = 'rgb';\nexport const HEX = 'hex';\nexport const HSLA = 'hsla';\nexport const HSL = 'hsl';\n\n","import { scales, colorSchemes } from 'muze-utils';\n\nimport {\n SEQUENTIAL,\n ORDINAL,\n LINEAR,\n CONTINOUS,\n THRESHOLD,\n QUANTIZE\n} from './enums/constants';\n\nimport * as ScaleType from './enums/scale-type';\n\nconst {\n scaleLinear,\n scaleThreshold,\n scaleLog,\n scalePow,\n scaleIdentity,\n scaleOrdinal,\n scaleSequential,\n scaleQuantize,\n scaleQuantile,\n schemeCategory10,\n schemeCategory20,\n schemeCategory20b,\n scaleBand,\n scaleTime\n} = scales;\nexport const scaleMap = {\n [ScaleType.LINEAR]: scaleLinear,\n [ScaleType.BAND]: scaleBand,\n [ScaleType.QUANTIZE]: scaleQuantize,\n [ScaleType.QUANTILE]: scaleQuantile,\n [ScaleType.THRESHOLD]: scaleThreshold,\n [ScaleType.SEQUENTIAL]: scaleSequential,\n [ScaleType.LOG]: scaleLog,\n [ScaleType.POW]: scalePow,\n [ScaleType.IDENTITY]: scaleIdentity,\n [ScaleType.TIME]: scaleTime,\n [ScaleType.COLOR]: scaleLinear,\n [ScaleType.ORDINAL]: scaleOrdinal\n};\nexport const SCHEMES = {\n SCHEME1: schemeCategory10,\n SCHEME2: schemeCategory20,\n SCHEME3: schemeCategory20b\n};\n\n/**\n * Accepts a scheme in a string format and returns the scale from d3-scale-chromatic\n *\n * @export\n * @param {string} scheme a string representing the kind of scheme for the color axis\n * @return {Object} The corresponding scale from a scheme type from d3 chromatic scale\n */\nexport function getScheme (scheme) {\n if (scheme[0] === 'i') {\n return scaleSequential(colorSchemes[scheme]);\n }\n return scaleOrdinal(colorSchemes[scheme]);\n}\n\n/**\n *\n *\n * @export\n * @param {*} scheme\n *\n */\nexport function getSchemeType (scheme) {\n let schemeType = '';\n if (scheme && typeof (scheme) === 'string') {\n schemeType = scheme[0] === 'i' ? SEQUENTIAL : ORDINAL;\n } else {\n schemeType = ORDINAL;\n }\n return schemeType;\n}\n\n/**\n * This function is used to create a scale that is assigned to\n * an instance of axis.\n *\n * @export\n * @param {Object} params the input parameters to create a Scale object\n * @param {string} params.type the type of scale\n * @param {Array} params.range the range of scale\n * @return {Object} instance of scale\n */\nexport function createScale (params) {\n if (!params.type || !scaleMap[params.type]) {\n throw new Error(`${params.type} is not a valid scale type`);\n }\n if (!Array.isArray(params.range)) {\n throw new Error('range parameter must be an array');\n }\n let scaleFactory = null;\n const range = params.range;\n // @todo: do it using scale decorator\n if (params.type === LINEAR && params.interpolator) {\n scaleFactory = scaleMap[params.interpolator];\n if (params.interpolator === ScaleType.POW) {\n return scaleFactory().range(range).exponent(params.exponent);\n } else if (params.interpolator === ScaleType.LOG) {\n return scaleFactory().range(range).base([params.base]);\n }\n } else {\n scaleFactory = scaleMap[params.type];\n }\n\n if (params.type === QUANTIZE) {\n scaleFactory().nice();\n }\n return scaleFactory().range(range);\n}\n\n/**\n * This method is used to update the range of a scale\n * so that the core module can remain agnostic of the d3\n * scale api.\n *\n * @export\n * @param {Scale} scale Instance of d3 Scale.\n * @param {Array} range new range of the scale.\n * @return {Scale} Updated scale.\n */\nexport function updateScaleRange (scale, range) {\n return scale.range(range);\n}\n\n/**\n *\n *\n * @export\n * @param {*} domainType\n * @param {*} rangeType\n * @param {*} steps\n *\n */\nexport function getScaleType (domainType, rangeType, steps) {\n if (rangeType === CONTINOUS) {\n return LINEAR;\n }\n if (domainType === CONTINOUS) {\n if (steps instanceof Array) {\n return THRESHOLD;\n }\n return QUANTIZE;\n }\n return ORDINAL;\n}\n","import { getUniqueId } from 'muze-utils';\nimport { CLASSPREFIX } from '../enums/constants';\n\n/**\n *\n *\n */\nexport const defaultConfig = {\n id: getUniqueId(),\n axisName: {\n defClassName: 'axis-name'\n },\n axisNamePadding: 12,\n base: 10,\n classPrefix: CLASSPREFIX,\n className: `${CLASSPREFIX}-axis`,\n exponent: 1,\n interpolator: 'linear',\n fixedBaseline: true,\n labels: {\n rotation: null,\n smartTicks: null\n },\n orientation: 'left',\n numberFormat: val => val,\n padding: 0.3,\n nice: true,\n numberOfTicks: 10,\n rotate: false,\n show: true,\n showAxisName: true,\n showInnerTicks: true,\n showOuterTicks: true,\n style: {},\n type: 'linear',\n tickFormat: null,\n tickValues: null,\n xOffset: 0,\n yOffset: 0\n};\n\n","/**\n * This file exports functionality that is used to render axis.\n */\nimport { selectElement, makeElement, angleToRadian } from 'muze-utils';\nimport * as AxisOrientation from './enums/axis-orientation';\nimport { LINEAR, HIDDEN, BOTTOM, TOP } from './enums/constants';\n\n/**\n *\n *\n * @param {*} instance\n * @param {*} container\n * @param {*} labelManager\n * @param {*} config\n */\nconst rotateAxis = (instance, tickText, labelManager) => {\n let rotation;\n const axis = instance.axis();\n const config = instance.config();\n const renderConfig = instance.renderConfig();\n const smartTicks = instance.smartTicks();\n const scale = axis.scale();\n const labelFunc = scale.ticks || scale.quantile || scale.domain;\n const ticks = labelFunc();\n const {\n orientation,\n fixedBaseline,\n type\n } = config;\n const {\n labels\n } = renderConfig;\n\n rotation = labels.rotation;\n\n const tickSize = instance.getTickSize();\n tickText.each(function (d, index) {\n let yShift;\n let xShift;\n let datum = smartTicks[index] ? smartTicks[index].text : d;\n\n const tickFormatter = axis.tickFormat() ? axis.tickFormat : null;\n\n const temp = tickSize ? (tickFormatter ? tickFormatter()(d) : datum) : '';\n\n datum = temp.toString();\n\n const tickLabelDim = labelManager.getOriSize(datum);\n\n const width = tickLabelDim.width * 0.5;\n const height = tickLabelDim.height * 0.5;\n\n if (rotation < 0) {\n rotation = 360 + rotation;\n }\n\n const quadrant = 4 - Math.floor(rotation / 90);\n const rotationNormalizer = ((quadrant % 2 === 0) ? rotation : 180 * Math.ceil(rotation / 180) - rotation) % 180;\n\n yShift = Math.sqrt(height ** 2 + width ** 2) * Math.sin(angleToRadian(rotationNormalizer));\n\n if ((quadrant === 3 || quadrant === 2) && !(rotationNormalizer > 67.5 && rotationNormalizer <= 90)) {\n yShift += height * 2;\n }\n xShift = width;\n\n if (rotation === 90) {\n xShift = height;\n } else if (rotation === 270) {\n xShift = -height;\n } else {\n xShift = 0;\n }\n\n if (orientation === AxisOrientation.TOP) {\n xShift = (fixedBaseline && ticks[0] === d && type === LINEAR) ? xShift + xShift / 2 : xShift;\n selectElement(this)\n .attr('transform', `translate(${-xShift + tickSize}\n ${-yShift - tickSize}) rotate(${rotation})`);\n } else {\n xShift = (fixedBaseline && ticks[0] === d && type === LINEAR) ? xShift - xShift / 2 : xShift;\n\n selectElement(this)\n .attr('transform', `translate(${xShift - tickSize}\n ${yShift + tickSize}) rotate(${rotation})`);\n }\n selectElement(this).transition()\n .duration(1000).text(datum);\n });\n return tickText;\n};\n\n/**\n *\n *\n * @param {*} tickText\n * @param {*} axisInstance\n */\nconst changeTickOrientation = (selectContainer, axisInstance, tickSize) => {\n const {\n _smartTicks\n } = axisInstance;\n const config = axisInstance.config();\n const renderConfig = axisInstance.renderConfig();\n const labelManager = axisInstance.dependencies().labelManager;\n const {\n orientation,\n classPrefix\n } = config;\n const {\n labels\n } = renderConfig;\n const {\n rotation,\n smartTicks: isSmartTicks\n } = labels;\n\n const tickText = selectContainer.selectAll('.tick text');\n tickText.selectAll('tspan').remove();\n\n // rotate labels if not enough space is available\n if (rotation && (orientation === TOP || orientation === BOTTOM)) {\n rotateAxis(axisInstance, tickText, labelManager);\n } else if (!rotation && !isSmartTicks) {\n tickText.attr('transform', '');\n } else {\n tickText.text('');\n if (orientation === TOP || orientation === BOTTOM) {\n tickText.attr('y', 0)\n .attr('x', 0)\n .attr('transform', '')\n .text('');\n const tspan = makeElement(tickText, 'tspan', (d, i) => {\n if (_smartTicks[i]) {\n return _smartTicks[i].lines;\n } return [];\n }, `${classPrefix}-smart-text`);\n\n tspan.attr('dy', '0')\n .style('opacity', '0')\n\n .transition()\n .duration(1000)\n .on('end', axisInstance.registerAnimationDoneHook())\n .attr('dy', (d, i) => {\n if (orientation === BOTTOM || i !== 0) {\n return _smartTicks[0].oriTextHeight;\n }\n return -_smartTicks[0].oriTextHeight * (_smartTicks[0].lines.length - 1) - tickSize;\n })\n .style('opacity', 1)\n .text(e => e)\n .attr('x', 0);\n } else {\n const tspan = makeElement(tickText, 'tspan', (d, i) => _smartTicks[i].lines, `${classPrefix}-smart-text`);\n tspan.text(e => e);\n }\n }\n\n return tickText;\n};\n\nconst setFixedBaseline = (axisInstance) => {\n const {\n fixedBaseline\n } = axisInstance.config();\n const domain = axisInstance.domain();\n if (fixedBaseline && domain.length) {\n axisInstance.setFixedBaseline();\n }\n};\n\n/**\n *\n *\n * @param {*} textNode\n * @param {*} orientation\n * @param {*} measures\n */\nconst setAxisNamePos = (textNode, orientation, measures) => {\n const {\n axisNameHeight,\n yOffset,\n labelOffset,\n availableSpace\n } = measures;\n switch (orientation) {\n case AxisOrientation.LEFT:\n textNode.attr('transform',\n `translate(${-(availableSpace.width - axisNameHeight)},${yOffset + labelOffset})rotate(-90)`);\n break;\n case AxisOrientation.RIGHT:\n textNode.attr('transform',\n `translate(${(availableSpace.width - axisNameHeight)},${yOffset + labelOffset})rotate(90)`);\n break;\n case AxisOrientation.TOP:\n textNode.attr('transform',\n `translate(${availableSpace.width / 2},${-availableSpace.height + axisNameHeight})`);\n break;\n case AxisOrientation.BOTTOM:\n textNode.attr('transform',\n `translate(${availableSpace.width / 2},${availableSpace.height - axisNameHeight / 2})`);\n break;\n default:\n }\n return textNode;\n};\n\n/**\n * This method is used to render the axis inside an\n * svg container.\n *\n * @export\n * @param {Object} axisInstance the nput object required to render axis\n * @param {string} axisInstance.orientation the orientation of axis\n * @param {Object} axisInstance.scale instance of d3 scale\n * @param {SVGElement} axisInstance.container the container in which to render\n */\nexport function renderAxis (axisInstance) {\n const config = axisInstance.config();\n const renderConfig = axisInstance.renderConfig();\n const labelManager = axisInstance.dependencies().labelManager;\n const mount = axisInstance.mount();\n const range = axisInstance.range();\n const axis = axisInstance.axis();\n const scale = axisInstance.scale();\n const {\n _axisNameStyle: axisNameStyle,\n _tickLabelStyle: tickLabelStyle,\n _tickFormatter: axisTickFormatter,\n tickValues\n } = axisInstance;\n const {\n orientation,\n name,\n xOffset,\n yOffset,\n axisNamePadding,\n className,\n id,\n classPrefix\n } = config;\n const {\n show,\n showAxisName,\n labels\n } = renderConfig;\n\n if (!show) {\n return;\n }\n\n const tickSize = axisInstance.getTickSize();\n\n const selectContainer = makeElement(selectElement(mount), 'g', [axisInstance], `${className}`, {},\n key => key.config().id);\n\n // Set style for tick labels\n labelManager.setStyle(tickLabelStyle);\n\n const labelFunc = scale.ticks || scale.quantile || scale.domain;\n\n axis.tickFormat(axisTickFormatter(tickValues || axis.tickValues() || labelFunc()));\n\n // Get range(length of range)\n const availableSpace = Math.abs(range[0] - range[1]);\n\n // Get width and height taken by axis labels\n const labelProps = axisInstance.axisComponentDimensions().largestTickDimensions;\n\n // Draw axis ticks\n selectContainer.attr('transform', `translate(${xOffset},${yOffset})`);\n setFixedBaseline(axisInstance);\n if (labels.smartTicks === false || tickSize === 0) {\n selectContainer.transition()\n .duration(1000)\n .on('end', axisInstance.registerAnimationDoneHook())\n .call(axis);\n } else {\n selectContainer.call(axis);\n }\n selectContainer.selectAll('.tick').classed(`${classPrefix}-ticks`, true);\n selectContainer.selectAll('.tick line').classed(`${classPrefix}-tick-lines`, true);\n\n // Set classes for ticks\n const tickText = selectContainer.selectAll('.tick text');\n tickText.classed(`${classPrefix}-ticks`, true)\n .classed(`${classPrefix}-ticks-${id}`, true);\n\n changeTickOrientation(selectContainer, axisInstance, tickSize);\n\n // Create axis name\n const textNode = makeElement(selectContainer, 'text', [name], `${classPrefix}-axis-name`)\n .attr('text-anchor', 'middle')\n .classed(`${classPrefix}-axis-name-${id}`, true)\n .text(d => d);\n\n // Hide axis name if show is off\n textNode.classed(HIDDEN, !showAxisName);\n\n // render labels based on orientation of axis\n const labelOffset = availableSpace / 2;\n\n // Set style for axis name\n labelManager.setStyle(axisNameStyle);\n const axisNameSpace = labelManager.getOriSize(name);\n const measures = {\n labelProps,\n tickSize,\n axisNamePadding,\n axisNameHeight: axisNameSpace.height,\n axisNameWidth: axisNameSpace.width,\n yOffset,\n xOffset,\n labelOffset,\n availableSpace: axisInstance.availableSpace()\n };\n // Set position for axis name\n setAxisNamePos(textNode, orientation, measures);\n}\n","import { BOTTOM, TOP } from '../enums/axis-orientation';\n\nconst setAxisRange = (context, type, rangeBounds, offset) => {\n context.range(rangeBounds);\n offset && context.config({ [`${type}Offset`]: offset });\n};\n\nconst getAxisOffset = (timeDiff, range, domain) => {\n const pvr = Math.abs(range[1] - range[0]) / (domain[1] - domain[0]);\n const width = (pvr * timeDiff);\n const avWidth = (range[1] - range[0]);\n const bars = avWidth / width;\n const barWidth = avWidth / (bars + 1);\n const diff = avWidth - barWidth * bars;\n\n return diff / 2;\n};\n\nexport const adjustRange = (minDiff, range, domain, orientation) => {\n const diff = getAxisOffset(minDiff, range, domain);\n\n if (orientation === TOP || orientation === BOTTOM) {\n range[0] += diff;\n range[1] -= diff;\n } else {\n range[0] -= diff;\n range[1] += diff;\n }\n return range;\n};\n\nexport const spaceSetter = (context, spaceConfig) => {\n let tickInterval;\n let heightForTicks;\n const {\n width: availWidth,\n height: availHeight,\n padding\n } = context.availableSpace();\n const {\n top,\n left,\n bottom,\n right\n } = padding;\n const {\n isOffset\n } = spaceConfig;\n const {\n showAxisName,\n labels\n } = context.renderConfig();\n const {\n rotation\n } = labels;\n const {\n orientation,\n fixedBaseline,\n axisNamePadding,\n tickValues\n } = context.config();\n const {\n tickDimensions,\n allTickDimensions,\n axisNameDimensions,\n tickSize\n } = context.getAxisDimensions();\n const {\n height: tickDimHeight,\n width: tickDimWidth\n } = tickDimensions;\n const namePadding = showAxisName ? axisNamePadding : 0;\n const labelConfig = { smartTicks: true, rotation: labels.rotation };\n const minTickDistance = context._minTickDistance;\n const minTickSpace = context._minTickSpace;\n const minDiff = context._minDiff;\n const domain = context.domain();\n const axisNameHeight = axisNameDimensions.height;\n\n return {\n time: {\n x: () => {\n const tickShifter = tickDimWidth / 2;\n\n setAxisRange(context, 'y', adjustRange(minDiff,\n [tickShifter, availWidth - left - right - tickShifter], domain, orientation),\n isOffset ? availHeight : null);\n\n tickInterval = ((availWidth) / context.getTickValues().length)\n - minTickDistance.width;\n\n heightForTicks = availHeight - axisNameDimensions.availHeight - tickSize - namePadding;\n\n if (tickInterval < minTickSpace.width && rotation !== 0) {\n // set smart ticks and rotation config\n labelConfig.rotation = labels.rotation === null ? -90 : rotation;\n\n // Remove ticks if not enough height\n if (tickInterval < minTickSpace.height) {\n heightForTicks = availHeight;\n tickInterval = minTickSpace.height;\n context.renderConfig({ showInnerTicks: false, showOuterTicks: false });\n }\n }\n if (availHeight < axisNameHeight) {\n context.renderConfig({ show: false });\n }\n\n context.maxTickSpaces({\n width: tickInterval,\n height: heightForTicks,\n noWrap: rotation !== null\n });\n return labelConfig;\n },\n y: () => {\n let widthForTicks = availWidth;\n const tickShifter = tickDimHeight / 2;\n\n setAxisRange(context, 'x', adjustRange(minDiff,\n [availHeight - top - bottom - tickShifter, tickShifter], domain, orientation),\n isOffset ? availWidth : null);\n\n if ((availWidth - axisNameHeight - namePadding) <= minTickDistance.width) {\n widthForTicks = 0;\n context.renderConfig({ showInnerTicks: false, showOuterTicks: false });\n }\n\n context.maxTickSpaces({\n width: widthForTicks,\n height: availHeight,\n noWrap: true\n });\n if (availWidth < axisNameHeight) {\n context.renderConfig({ show: false });\n }\n return labelConfig;\n }\n },\n band: {\n x: () => {\n setAxisRange(context, 'y', [0, availWidth - left - right], isOffset ? availHeight : null);\n const range = context.range();\n\n // Get Tick Interval\n tickInterval = ((range[1] - range[0]) / (tickValues || domain).length) - minTickDistance.width;\n\n // Get height available for ticks\n heightForTicks = availHeight - axisNameHeight - tickSize - namePadding;\n\n if (tickInterval < minTickSpace.width && rotation !== 0) {\n // set smart ticks and rotation config\n labelConfig.rotation = rotation === null ? -90 : rotation;\n labelConfig.smartTicks = false;\n\n // Ticks with overlapping height\n if (tickInterval < minTickSpace.height) {\n heightForTicks = 0;\n tickInterval = 0;\n context.renderConfig({ showInnerTicks: false, showOuterTicks: false });\n context.range([minTickSpace.height / 2, availWidth - minTickSpace.height / 2]);\n }\n } else if (tickValues) {\n const interval = (availWidth / domain.length) - minTickDistance.width;\n if (interval < minTickSpace.width) {\n context.range([minTickSpace.height / 2, availWidth - minTickSpace.height / 2]);\n }\n }\n if (availHeight < axisNameHeight) {\n context.renderConfig({ show: false, showInnerTicks: false, showOuterTicks: false });\n }\n\n context.maxTickSpaces({\n width: tickInterval,\n height: heightForTicks,\n noWrap: rotation !== null\n });\n return labelConfig;\n },\n y: () => {\n setAxisRange(context, 'x', [availHeight - bottom, top], isOffset ? availWidth : null);\n\n let widthForTicks = availWidth - axisNameHeight - tickSize - namePadding;\n if (widthForTicks <= minTickDistance.width) {\n widthForTicks = 0;\n context.renderConfig({ showInnerTicks: false, showOuterTicks: false });\n }\n\n context.maxTickSpaces({\n width: widthForTicks,\n height: availHeight,\n noWrap: true\n });\n if (availWidth < axisNameHeight) {\n context.renderConfig({ show: false });\n }\n return labelConfig;\n }\n },\n continous: {\n x: () => {\n labelConfig.smartTicks = false;\n const tickShifter = tickDimensions.width / 2;\n const baseline = fixedBaseline ? 0 : tickShifter;\n\n setAxisRange(context, 'y', [baseline + left, availWidth - right - tickShifter],\n isOffset ? availHeight : null);\n\n const range = context.range();\n\n // Get Tick widths and available space\n const totalTickWidth = allTickDimensions.length * (tickDimensions.width + minTickDistance.width);\n const availableSpace = range[1] - range[0];\n\n // Rotate labels if not enough width\n if (availableSpace < totalTickWidth && labels.rotation === null) {\n labelConfig.rotation = -90;\n }\n\n // Remove ticks if not enough height\n if (availHeight - axisNameHeight - namePadding < tickDimensions.height) {\n context.renderConfig({ showInnerTicks: false });\n if (availHeight < axisNameHeight) {\n context.renderConfig({ show: false });\n }\n }\n return labelConfig;\n },\n y: () => {\n labelConfig.smartTicks = false;\n const tickShifter = tickDimensions.height / 2;\n const baseline = fixedBaseline ? 1 : tickShifter;\n\n setAxisRange(context, 'x', [availHeight - bottom - baseline, tickShifter + top],\n isOffset ? availWidth : null);\n\n // Remove display of ticks if no space is left\n if (availWidth < tickDimensions.width + axisNameHeight + namePadding) {\n context.renderConfig({ showInnerTicks: false });\n if (availWidth < axisNameHeight) {\n context.renderConfig({ show: false });\n }\n }\n return labelConfig;\n }\n }\n };\n};\n","import { defaultValue } from 'muze-utils';\nimport { TOP, LEFT, BOTTOM } from '../enums/axis-orientation';\n\nexport const getRotatedSpaces = (rotation = 0, width, height) => {\n let rotatedHeight = height;\n let rotatedWidth = width;\n if (rotation) {\n const angle = ((rotation || 0) * Math.PI) / 180;\n rotatedWidth = Math.abs(height * Math.sin(angle)) + Math.abs(width * Math.cos(angle));\n rotatedHeight = Math.abs(width * Math.sin(angle)) + Math.abs(height * Math.cos(angle));\n }\n return { width: rotatedWidth, height: rotatedHeight };\n};\n\nexport const setOffset = (context) => {\n let x = 0;\n let y = 0;\n const logicalSpace = context.logicalSpace();\n const config = context.config();\n const {\n orientation,\n xOffset,\n yOffset\n } = config;\n if (orientation === LEFT) {\n x = xOffset === undefined ? logicalSpace.width : xOffset;\n }\n if (orientation === TOP) {\n y = yOffset === undefined ? logicalSpace.height : yOffset;\n }\n context.config({ xOffset: x, yOffset: y });\n};\n\nexport const getNumberOfTicks = (availableSpace, labelDim, axis, axisInstance) => {\n const ticks = axis.scale().ticks();\n const { numberOfTicks } = axisInstance.config();\n const tickLength = ticks.length;\n let numberOfValues = tickLength;\n\n if (tickLength * (labelDim * 1.5) > availableSpace) {\n numberOfValues = Math.floor(availableSpace / (labelDim * 1.5));\n }\n\n numberOfValues = Math.min(numberOfTicks, Math.max(2, numberOfValues));\n\n return axis.scale().ticks(numberOfValues);\n};\n\nexport const getAxisComponentDimensions = (context) => {\n let largestTick = '';\n let largestTickDimensions = { width: 0, height: 0 };\n let smartTick = {};\n let axisTicks;\n const allTickDimensions = [];\n const scale = context.scale();\n const { showAxisName } = context.renderConfig();\n const { tickValues, name } = context.config();\n const { labelManager } = context.dependencies();\n const labelFunc = scale.ticks || scale.quantile || scale.domain;\n\n // set the style on the shared label manager instance\n labelManager.setStyle(context._tickLabelStyle);\n\n // get the values along the domain\n axisTicks = tickValues || labelFunc();\n\n // Get the tick labels\n axisTicks = axisTicks.map((originalLabel, i) => {\n const label = context.getFormattedText(originalLabel, i, axisTicks);\n\n // convert to string for quant values\n const tickDimensions = labelManager.getOriSize(label);\n\n // Get spaces for all labels\n allTickDimensions.push(tickDimensions);\n\n // Getting largest label\n if (tickDimensions.width > largestTickDimensions.width) {\n largestTick = label;\n smartTick = context.smartTicks() ? context.smartTicks()[i] : {};\n largestTickDimensions = tickDimensions;\n }\n return label;\n });\n\n labelManager.setStyle(context._axisNameStyle);\n const axisNameDimensions = showAxisName ? labelManager.getOriSize(name) : { width: 0, height: 0 };\n\n return {\n axisNameDimensions,\n largestTick,\n largestTickDimensions,\n allTickDimensions,\n axisTicks,\n smartTick,\n tickSize: context.getTickSize()\n };\n};\n\nexport const computeAxisDimensions = (context) => {\n let tickDimensions = {};\n const { labels } = context.renderConfig();\n const { smartTicks, rotation } = labels;\n const {\n largestTickDimensions,\n axisTicks,\n smartTick,\n axisNameDimensions,\n allTickDimensions,\n tickSize\n } = getAxisComponentDimensions(context);\n const { height: labelHeight, width: labelWidth } = largestTickDimensions;\n\n // get the domain of axis\n const domain = context.domain();\n // const angle = ((rotation || 0) * Math.PI) / 180;\n\n if (domain.length === 0) {\n return null;\n }\n if (smartTicks) {\n tickDimensions = smartTick;\n } else {\n tickDimensions = { width: labelWidth, height: labelHeight };\n }\n tickDimensions = getRotatedSpaces(rotation, tickDimensions.width, tickDimensions.height);\n\n if (tickSize === 0) {\n tickDimensions = { width: 0, height: 0 };\n }\n return {\n allTickDimensions,\n tickSize,\n tickDimensions,\n axisNameDimensions,\n largestTickDimensions,\n axisTicks\n };\n};\n\n/**\n *\n *\n * @param {*} axisDimensions\n * @param {*} config\n * @param {*} range\n *\n */\nexport const getHorizontalAxisSpace = (context, axisDimensions, range) => {\n let width;\n let height;\n const domain = context.domain();\n const { tickSize, tickDimensions, axisNameDimensions } = axisDimensions;\n const { axisNamePadding, tickValues } = context.config();\n const { showAxisName } = context.renderConfig();\n const { height: axisDimHeight } = axisNameDimensions;\n const { height: tickDimHeight, width: tickDimWidth } = tickDimensions;\n\n width = range && range.length ? range[1] - range[0] : 0;\n\n height = 0;\n if (tickValues) {\n const minTickDiff = context.getMinTickDifference();\n const [min, max] = [\n Math.min(...tickValues, ...domain),\n Math.max(...tickValues, ...domain)\n ];\n\n width = ((max - min) / Math.abs(minTickDiff)) * (tickDimWidth + context._minTickDistance.width);\n }\n if (!width || width === 0) {\n height = Math.max(tickDimWidth, tickDimHeight);\n } else {\n height = tickDimHeight;\n }\n height += (showAxisName ? axisDimHeight + axisNamePadding : 0) + tickSize;\n\n return {\n width,\n height\n };\n};\n\n/**\n *\n *\n * @param {*} axisDimensions\n * @param {*} config\n * @param {*} range\n *\n */\nexport const getVerticalAxisSpace = (context, axisDimensions) => {\n let height;\n let width;\n const domain = context.domain();\n const { tickSize, tickDimensions, axisNameDimensions } = axisDimensions;\n const { axisNamePadding, tickValues } = context.config();\n const { showAxisName } = context.renderConfig();\n const { height: axisDimHeight } = axisNameDimensions;\n const { height: tickDimHeight, width: tickDimWidth } = tickDimensions;\n\n height = 0;\n width = tickDimWidth;\n if (tickValues) {\n const minTickDiff = context.getMinTickDifference();\n const [min, max] = [\n Math.min(...tickValues, ...domain),\n Math.max(...tickValues, ...domain)\n ];\n\n height = ((max - min) / Math.abs(minTickDiff)) * tickDimHeight;\n }\n width += (showAxisName ? axisDimHeight : 0) + tickSize + axisNamePadding;\n\n return {\n height,\n width\n };\n};\n\n/**\n * Calculates the logical space of the axis\n * @return {Object} Width and height occupied by the axis.\n */\nexport const calculateBandSpace = (context) => {\n const range = context.range();\n const axisDimensions = context.getAxisDimensions();\n const { orientation } = context.config();\n const { show } = context.renderConfig();\n const { largestTickDimensions, axisTicks, allTickDimensions } = axisDimensions;\n const { height: largestDimHeight } = largestTickDimensions;\n const minTickWidth = context._minTickDistance.width;\n if (orientation === TOP || orientation === BOTTOM) {\n let {\n width,\n height\n } = getHorizontalAxisSpace(context, axisDimensions, range);\n\n if (!width || width === 0) {\n width = allTickDimensions.reduce((t, n) =>\n t + Math.min(n.width, n.height) + minTickWidth, 0);\n }\n if (show === false) {\n height = 0;\n width = 0;\n }\n\n return {\n width,\n height\n };\n }\n\n let {\n width,\n height\n } = getVerticalAxisSpace(context, axisDimensions, range);\n\n if (!height || height === 0) {\n height = axisTicks.length * (largestDimHeight + context._minTickDistance.height) + largestDimHeight;\n }\n if (show === false) {\n width = 0;\n }\n\n return {\n width,\n height\n };\n};\n\n/**\n * Calculates the logical space of the axis\n * @return {Object} Width and height occupied by the axis.\n */\nexport const calculateContinousSpace = (context) => {\n const range = context.range();\n const axisDimensions = context.getAxisDimensions();\n const { orientation } = context.config();\n const { show, showAxisName } = context.renderConfig();\n const { axisNameDimensions } = axisDimensions;\n\n if (show === false) {\n return {\n width: 0,\n height: 0\n };\n }\n\n const { width: axisNameWidth } = axisNameDimensions;\n\n if (orientation === TOP || orientation === BOTTOM) {\n const {\n width,\n height\n } = getHorizontalAxisSpace(context, axisDimensions, range);\n const axisWidth = Math.max(width, axisNameWidth);\n\n return {\n width: axisWidth,\n height\n };\n }\n const {\n width,\n height\n } = getVerticalAxisSpace(context, axisDimensions, range);\n\n const effHeight = Math.max(height, showAxisName ? axisNameWidth : 0);\n\n return {\n width,\n height: effHeight\n };\n};\n\n/**\n * Overwrites domain with user defined domain (if present)\n * @param {Object} context reference to current axes\n * @param {Array} domain default domain\n *\n * @return {Array} domain\n */\nexport const getValidDomain = (context, domain) => {\n const { domain: userDom } = context.config();\n\n if (userDom) {\n domain = userDom;\n }\n\n return defaultValue(domain, []);\n};\n\nexport const setContinousAxisDomain = (context, domain) => {\n const { nice } = context.config();\n const scale = context.scale.bind(context);\n\n scale().domain(domain);\n nice && scale().nice();\n context._domain = scale().domain();\n};\n\n/**\n * Checks if any of the properties have changed between two objects\n * @param {Object} obj first object\n * @param {Object} obj1 second object\n * @param {Array} properties properties to be compared between two objects\n *\n * @return {Boolean} boolean value\n */\nexport const hasAxesConfigChanged = (obj = {}, obj1 = {}, properties) => {\n if (!Object.keys(obj).length || !Object.keys(obj1).length) {\n return false;\n }\n return properties.some(key => obj[key] !== obj1[key]);\n};\n","import { mergeRecursive } from 'muze-utils';\nimport { hasAxesConfigChanged } from './helper';\n\nexport const PROPS = {\n availableSpace: {},\n axisDimensions: {},\n axisComponentDimensions: {},\n config: {\n sanitization: (context, value) => {\n const oldConfig = Object.assign({}, context._config || {});\n const mockedOldConfig = mergeRecursive({}, oldConfig);\n value = mergeRecursive(mockedOldConfig, value);\n\n value.axisNamePadding = Math.max(value.axisNamePadding, 0);\n const shouldAxesScaleUpdate = hasAxesConfigChanged(\n value, oldConfig, ['interpolator', 'exponent', 'base', 'orientation']\n );\n const tickFormatter = context.sanitizeTickFormatter(value);\n\n if (shouldAxesScaleUpdate) {\n context._scale = context.createScale(value);\n context._axis = context.createAxis(value);\n }\n\n context._tickFormatter = ticks => tickFormatter(ticks);\n\n const {\n labels,\n show,\n showInnerTicks,\n showOuterTicks,\n showAxisName\n } = value;\n context.renderConfig({\n labels,\n show,\n showInnerTicks,\n showOuterTicks,\n showAxisName\n });\n return value;\n }\n },\n renderConfig: {\n sanitization: (context, value) => {\n const oldConfig = Object.assign({}, context._renderConfig || {});\n value = mergeRecursive(oldConfig, value);\n return value;\n }\n },\n logicalSpace: {},\n mount: {\n },\n range: {\n sanitization: (context, value) => {\n context.scale().range(value);\n context.logicalSpace(null);\n return value;\n }\n },\n\n smartTicks: {},\n tickSize: {},\n maxTickSpaces: {},\n valueParser: {\n defaultValue: val => val\n }\n};\n","import {\n mergeRecursive,\n getSmartComputedStyle,\n selectElement,\n generateGetterSetters,\n getUniqueId\n} from 'muze-utils';\nimport { createScale } from '../scale-creator';\nimport { axisOrientationMap, BOTTOM, TOP } from '../enums/axis-orientation';\nimport { defaultConfig } from './default-config';\nimport { renderAxis } from '../axis-renderer';\nimport { spaceSetter } from './space-setter';\nimport {\n getAxisComponentDimensions,\n computeAxisDimensions,\n calculateContinousSpace,\n setOffset,\n getValidDomain\n} from './helper';\nimport { PROPS } from './props';\n\nexport default class SimpleAxis {\n\n /**\n * Creates an instance of SimpleAxis.\n * @memberof SimpleAxis\n */\n constructor (config, dependencies) {\n this._id = getUniqueId();\n\n this._dependencies = dependencies;\n this._mount = null;\n this._range = [];\n this._domain = [];\n this._domainLock = false;\n this._axisDimensions = {};\n this._smartTicks = [];\n\n const defCon = mergeRecursive({}, this.constructor.defaultConfig());\n const simpleConfig = mergeRecursive(defCon, config);\n\n const bodyElem = selectElement('body');\n const classPrefix = simpleConfig.classPrefix;\n this._tickLabelStyle = getSmartComputedStyle(bodyElem, `${classPrefix}-ticks`);\n this._axisNameStyle = getSmartComputedStyle(bodyElem, `${classPrefix}-axis-name`);\n\n dependencies.labelManager.setStyle(this._tickLabelStyle);\n const dist = dependencies.labelManager.getOriSize('w');\n\n this._minTickDistance = { width: dist.width * 3 / 4, height: dist.height / 2 };\n this._minTickSpace = dependencies.labelManager.getOriSize('www');\n\n generateGetterSetters(this, PROPS);\n this.config(simpleConfig);\n\n this._scale = this.createScale(this._config);\n this._axis = this.createAxis(this._config);\n this._animationDonePromises = [];\n }\n\n /**\n * Returns the default configuration of simple axis\n * @return {Object} default configurations\n */\n static defaultConfig () {\n return defaultConfig;\n }\n\n /**\n * Sets a fixed baseline for the first ticks so that they can render effectively within\n * the given area\n *\n * @param {*} tickText\n * @param {*} config\n * @param {*} labelManager\n */\n setFixedBaseline () {\n return this;\n }\n\n /**\n *\n *\n * @readonly\n * @memberof SimpleAxis\n */\n scale (...params) {\n if (params.length) {\n this._scale = params[0];\n return this;\n }\n return this._scale;\n }\n\n resetDomain () {\n this._domain = [];\n return this;\n }\n\n /**\n *\n *\n * @readonly\n * @memberof SimpleAxis\n */\n axis (...params) {\n if (params.length) {\n this._axis = params[0];\n return this;\n }\n return this._axis;\n }\n\n /**\n *\n *\n * @param {*} d\n *\n * @memberof SimpleAxis\n */\n domain (...domain) {\n if (domain.length) {\n const domainValue = getValidDomain(this, domain[0]);\n this.scale().domain(domainValue);\n this._domain = this.scale().domain();\n this.setAxisComponentDimensions();\n this.logicalSpace(null);\n return this;\n }\n return this._domain;\n }\n\n setAxisComponentDimensions () {\n this.axisComponentDimensions(getAxisComponentDimensions(this));\n }\n\n /**\n *\n *\n *\n * @memberof SimpleAxis\n */\n dependencies () {\n return this._dependencies;\n }\n\n /**\n *\n *\n *\n * @memberof SimpleAxis\n */\n createScale (config) {\n const {\n base,\n padding,\n interpolator,\n exponent\n } = config;\n const range = this.range();\n const scale = createScale({\n padding,\n interpolator,\n exponent,\n base,\n range,\n type: this.constructor.type()\n });\n\n return scale;\n }\n\n sanitizeTickFormatter (value) {\n const { tickFormat, numberFormat } = value;\n\n if (tickFormat) {\n return ticks => (val, i) => tickFormat(numberFormat(val), val, i, ticks);\n }\n\n return () => val => numberFormat(val);\n }\n\n resetLogicalSpace () {\n this.logicalSpace(null);\n this.range([]);\n const {\n labels,\n show,\n showInnerTicks,\n showOuterTicks,\n showAxisName\n } = this.config();\n this.renderConfig({\n labels,\n show,\n showInnerTicks,\n showOuterTicks,\n showAxisName\n });\n }\n\n getFormattedText (text, index, axisTicks) {\n const formatter = this._tickFormatter;\n\n return formatter(axisTicks)(text, index);\n }\n\n /**\n *\n *\n *\n * @memberof SimpleAxis\n */\n createAxis (config) {\n const { orientation } = config;\n const axisClass = axisOrientationMap[orientation];\n\n if (axisClass) {\n const axis = axisClass(this.scale());\n return axis;\n }\n return null;\n }\n\n /**\n * This method is used to set the space availiable to render\n * the SimpleCell.\n *\n * @param {number} width The width of SimpleCell.\n * @param {number} height The height of SimpleCell.\n * @memberof AxisCell\n */\n setAvailableSpace (width = 0, height, padding, isOffset) {\n let labelConfig = {};\n const {\n orientation\n } = this.config();\n\n this.availableSpace({ width, height, padding });\n\n if (orientation === TOP || orientation === BOTTOM) {\n labelConfig = spaceSetter(this, { isOffset }).continous.x();\n } else {\n labelConfig = spaceSetter(this, { isOffset }).continous.y();\n }\n\n // Set config\n this.renderConfig({\n labels: labelConfig\n });\n this.setTickConfig();\n this.getTickSize();\n return this;\n }\n\n /**\n *\n *\n * @memberof SimpleAxis\n */\n setTickConfig () {\n return this;\n }\n\n getScaleValue (domainVal) {\n if (domainVal === null || domainVal === undefined) {\n return undefined;\n }\n return this.scale()(domainVal);\n }\n\n /**\n *\n *\n *\n * @memberof SimpleAxis\n */\n getTickSize () {\n return this.axis().tickSize();\n }\n\n /**\n * Gets the space occupied by the parts of an axis\n *\n * @return {Object} object with details about sizes of the axis.\n * @memberof SimpleAxis\n */\n getAxisDimensions (...params) {\n this.axisDimensions(computeAxisDimensions(this, ...params));\n return this.axisDimensions();\n }\n\n /**\n * Gets the space occupied by the axis\n *\n * @return {Object} object with details about size of the axis.\n * @memberof SimpleAxis\n */\n getLogicalSpace () {\n if (!this.logicalSpace()) {\n this.logicalSpace(calculateContinousSpace(this));\n this.logicalSpace();\n setOffset(this);\n }\n\n return this.logicalSpace();\n }\n\n /**\n * Returns the value from the domain when given a value from the range.\n * @param {number} value Value from the range.\n * @return {number} Value\n */\n invert (value) {\n return this.scale().invert(value);\n }\n\n /**\n * Gets the nearest range value from the given range values.\n * @param {number} v1 Start range value\n * @param {number} v2 End range value\n *\n * @return {Array} range values\n */\n getNearestRange (v1, v2) {\n return [v1, v2];\n }\n\n invertExtent (v1, v2) {\n return [this.invert(v1), this.invert(v2)];\n }\n\n getMinTickDifference () {\n return this.domain();\n }\n\n getFormattedTickValues (tickValues) {\n return tickValues;\n }\n\n /**\n * This method returns the width in pixels for one\n * unit along the axis. It is only applicable to band scale\n * and returns undefined for other scale type.\n *\n * @return {number} the width of one band along band scale axis\n * @memberof SimpleAxis\n */\n getUnitWidth () {\n return 0;\n }\n\n /**\n * This method returns an object that can be used to\n * reconstruct this instance.\n *\n * @return {Object} the serializable props of axis\n * @memberof SimpleAxis\n */\n serialize () {\n return {\n name: this.name,\n type: this.type,\n range: this.range(),\n config: this.config()\n };\n }\n\n /**\n * Returns the id of the axis.\n * @return {string} Unique identifier of the axis.\n */\n get id () {\n return this._id;\n }\n\n /**\n * This method is used to render the axis inside\n * the supplied svg container.\n *\n * @param {SVGElement} svg the svg element in which to render the path\n * @memberof SimpleAxis\n */\n /* istanbul ignore next */render () {\n if (this.mount()) {\n this.setTickConfig();\n renderAxis(this);\n }\n return this;\n }\n\n /**\n *\n *\n *\n * @memberof SimpleAxis\n */\n remove () {\n selectElement(this.mount()).remove();\n return this;\n }\n\n /**\n *\n *\n * @memberof SimpleAxis\n */\n unsubscribe () {\n return this;\n }\n\n /**\n *\n *\n *\n * @memberof SimpleAxis\n */\n isReverse () {\n const range = this.range();\n return range[0] > range[1];\n }\n\n /**\n *\n *\n *\n * @memberof SimpleAxis\n */\n getPixelToValueRatio () {\n const scale = this.scale();\n const range = scale.range();\n const domain = scale.domain();\n\n return Math.abs(range[1] - range[0]) / (domain[1] - domain[0]);\n }\n\n /**\n * Notifies when all animations/transitions of the axis are completed.\n *\n * @public\n * @return {Promise} Returns a promise to notify the animation completion.\n */\n animationDone () {\n return Promise.all(this._animationDonePromises);\n }\n\n registerAnimationDoneHook () {\n let resolveFn;\n const promise = new Promise((resolve) => {\n resolveFn = resolve;\n });\n this._animationDonePromises.push(promise);\n\n return () => {\n resolveFn();\n };\n }\n}\n\n","import { scaleMap } from '../../scale-creator';\n\nexport default class LinearInterpolator {\n\n createScale (config) {\n const {\n range\n } = config;\n const scaleFactory = scaleMap.linear;\n this._scale = scaleFactory().range(range);\n return this._scale;\n }\n\n getScaleValue (domainVal) {\n return this._scale(domainVal) + 0.5;\n }\n\n sanitizeDomain (domain) {\n if (domain.length && domain[0] === domain[1]) {\n domain = [0, +domain[0] * 2];\n }\n return domain;\n }\n}\n","import { scaleMap } from '../../scale-creator';\n\nexport default class LogInterpolator {\n\n createScale (config) {\n const {\n range,\n base\n } = config;\n const scaleFactory = scaleMap.log;\n this._scale = scaleFactory().range(range).base(base);\n return this._scale;\n }\n\n getScaleValue (domainVal) {\n if (domainVal <= 0) {\n return 1;\n }\n\n return this._scale(domainVal) + 0.5;\n }\n\n sanitizeDomain (domain) {\n if (domain[0] <= 0) {\n return [Math.max(1, domain[0]), Math.max(1, domain[1])];\n } return domain;\n }\n}\n","import { scaleMap } from '../../scale-creator';\n\nexport default class PowInterpolator {\n\n createScale (config) {\n const {\n range,\n exponent\n } = config;\n const scaleFactory = scaleMap.pow;\n this._scale = scaleFactory().range(range).exponent(exponent);\n return this._scale;\n }\n\n getScaleValue (domainVal) {\n return this._scale(domainVal) + 0.5;\n }\n\n sanitizeDomain (domain) {\n return domain;\n }\n}\n","import { getSmallestDiff } from 'muze-utils';\nimport SimpleAxis from './simple-axis';\nimport { BOTTOM, TOP, LEFT, RIGHT } from '../enums/axis-orientation';\nimport { spaceSetter } from './space-setter';\nimport { LINEAR, LOG, POW } from '../enums/scale-type';\nimport { LogInterpolator, PowInterpolator, LinearInterpolator } from './interpolators';\nimport {\n getNumberOfTicks,\n getValidDomain,\n setContinousAxisDomain\n} from './helper';\n\nexport const interpolatorMap = {\n [LOG]: LogInterpolator,\n [POW]: PowInterpolator,\n [LINEAR]: LinearInterpolator\n};\n\nexport default class ContinousAxis extends SimpleAxis {\n constructor (config, dependencies) {\n config.tickFormat = config.tickFormat || (val => val);\n super(config, dependencies);\n }\n /**\n *\n *\n *\n * @memberof SimpleAxis\n */\n createScale (config) {\n const {\n base,\n padding,\n interpolator,\n exponent\n } = config;\n const range = this.range();\n const InterpolatorCls = interpolatorMap[interpolator];\n\n this._interpolator = new InterpolatorCls();\n let scale = this._interpolator.createScale({\n padding,\n exponent,\n base,\n range\n });\n\n scale = scale.nice();\n return scale;\n }\n\n /**\n *\n *\n * @static\n *\n * @memberof ContinousAxis\n */\n static type () {\n return LINEAR;\n }\n\n getScaleValue (domainVal) {\n if (domainVal === null || domainVal === undefined) {\n return undefined;\n }\n return this._interpolator.getScaleValue(domainVal);\n }\n /**\n *\n *\n *\n * @memberof SimpleAxis\n */\n getTickSize () {\n const {\n showInnerTicks,\n showOuterTicks\n } = this.renderConfig();\n const axis = this.axis();\n axis.tickSizeInner(showInnerTicks === false ? 0 : 6);\n axis.tickSizeOuter(showOuterTicks === false ? 0 : 6);\n\n return axis.tickSize();\n }\n\n /**\n *\n *\n * @param {*} d\n *\n * @memberof SimpleAxis\n */\n domain (...domain) {\n if (domain.length) {\n const domainVal = this._interpolator.sanitizeDomain(getValidDomain(this, domain[0]));\n setContinousAxisDomain(this, domainVal);\n this.setAxisComponentDimensions();\n this.logicalSpace(null);\n return this;\n }\n return this._domain;\n }\n\n /**\n * This method is used to set the space availiable to render\n * the SimpleCell.\n *\n * @param {number} width The width of SimpleCell.\n * @param {number} height The height of SimpleCell.\n * @memberof AxisCell\n */\n setAvailableSpace (width = 0, height, padding, isOffset) {\n let labelConfig = {};\n const {\n orientation\n } = this.config();\n\n this.availableSpace({ width, height, padding });\n\n if (orientation === TOP || orientation === BOTTOM) {\n labelConfig = spaceSetter(this, { isOffset }).continous.x();\n } else {\n labelConfig = spaceSetter(this, { isOffset }).continous.y();\n }\n\n // Set config\n this.renderConfig({\n labels: labelConfig\n });\n this.setTickConfig();\n this.getTickSize();\n return this;\n }\n\n /**\n *\n *\n * @param {*} tickValues\n *\n * @memberof SimpleAxis\n */\n setTickConfig () {\n const {\n tickValues\n } = this.config();\n const {\n showInnerTicks\n } = this.renderConfig();\n const axis = this.axis();\n\n if (!showInnerTicks) {\n axis.tickValues([]);\n return this;\n }\n\n if (tickValues) {\n tickValues instanceof Array && this.axis().tickValues(tickValues);\n return this;\n }\n axis.tickValues(this.getTickValues());\n\n return this;\n }\n\n /**\n *\n *\n *\n * @memberof SimpleAxis\n */\n getTickValues () {\n let labelDim = 0;\n const {\n orientation,\n tickValues\n } = this.config();\n const range = this.range();\n const axis = this.axis();\n\n const availableSpace = Math.abs(range[0] - range[1]);\n\n const labelProps = this.axisComponentDimensions().largestTickDimensions;\n\n if (tickValues) {\n return axis.scale().ticks(tickValues);\n }\n labelDim = labelProps[orientation === BOTTOM || orientation === TOP ? 'width' : 'height'];\n\n return getNumberOfTicks(availableSpace, labelDim, axis, this);\n }\n\n getMinTickDifference () {\n return getSmallestDiff(this.config().tickValues);\n }\n\n /**\n * Sets a fixed baseline for the first ticks so that they can render effectively within\n * the given area\n *\n * @param {*} tickText\n * @param {*} config\n * @param {*} labelManager\n */\n setFixedBaseline (tickText) {\n const {\n orientation\n } = this.config();\n const {\n labels\n } = this.renderConfig();\n\n const {\n rotation\n } = labels;\n const axis = this.axis();\n const ticks = axis.scale().ticks();\n const { width, height } = this.axisComponentDimensions().allTickDimensions[0];\n axis.tickTransform((d) => {\n if (d === ticks[0]) {\n if ((orientation === LEFT || orientation === RIGHT)) {\n return `translate(0, -${(height) / 3}px)`;\n }\n if ((orientation === TOP || orientation === BOTTOM) && !rotation) {\n return `translate(${width / 2}px, ${0}px)`;\n }\n } return '';\n });\n return tickText;\n }\n\n}\n","import SimpleAxis from './simple-axis';\nimport { BAND } from '../enums/scale-type';\nimport { TOP, BOTTOM } from '../enums/axis-orientation';\nimport { calculateBandSpace, setOffset, getRotatedSpaces } from './helper';\nimport { spaceSetter } from './space-setter';\n\nexport default class BandAxis extends SimpleAxis {\n\n /**\n *\n *\n * @param {*} config axes configuration\n *\n * @memberof BandAxis\n */\n createScale (config) {\n return super.createScale(config);\n }\n\n /**\n *\n *\n * @static\n *\n * @memberof BandAxis\n */\n static type () {\n return BAND;\n }\n\n /**\n * This method is used to set the space availiable to render\n * the SimpleCell.\n *\n * @param {number} width The width of SimpleCell.\n * @param {number} height The height of SimpleCell.\n * @memberof AxisCell\n */\n setAvailableSpace (width = 0, height, padding, isOffset) {\n let labelConfig = {};\n const {\n orientation\n } = this.config();\n\n this.availableSpace({ width, height, padding });\n\n if (orientation === TOP || orientation === BOTTOM) {\n labelConfig = spaceSetter(this, { isOffset }).band.x();\n } else {\n labelConfig = spaceSetter(this, { isOffset }).band.y();\n }\n\n // Set config\n this.renderConfig({\n labels: labelConfig\n });\n this.setTickConfig();\n return this;\n }\n\n /**\n *\n *\n *\n * @memberof BandAxis\n */\n setTickConfig () {\n let smartTicks = '';\n let smartlabel;\n const domain = this.domain();\n const { labelManager } = this._dependencies;\n const { tickValues, padding } = this.config();\n const { labels } = this.renderConfig();\n const { height: availHeight, width: availWidth, noWrap } = this.maxTickSpaces();\n const { width, height } = getRotatedSpaces(labels.rotation, availWidth, availHeight);\n\n tickValues && this.axis().tickValues(tickValues);\n smartTicks = tickValues || domain;\n\n // set the style on the shared label manager instance\n labelManager.setStyle(this._tickLabelStyle);\n\n // Update padding between plots\n if (typeof padding === 'number' && padding >= 0 && padding <= 1) {\n this.scale().padding(padding);\n }\n\n if (domain && domain.length) {\n const values = tickValues || domain;\n const tickFormatter = this._tickFormatter(values);\n smartTicks = values.map((d, i) => {\n labelManager.useEllipsesOnOverflow(true);\n\n smartlabel = labelManager.getSmartText(tickFormatter(d, i), width, height, noWrap);\n return labelManager.constructor.textToLines(smartlabel);\n });\n }\n this.smartTicks(smartTicks);\n return this;\n }\n\n /**\n * Gets the space occupied by the axis\n *\n * @return {Object} object with details about size of the axis.\n * @memberof SimpleAxis\n */\n getLogicalSpace () {\n if (!this.logicalSpace()) {\n this.logicalSpace(calculateBandSpace(this));\n setOffset(this);\n this.logicalSpace();\n }\n return this.logicalSpace();\n }\n\n /**\n *\n *\n * @memberof BandAxis\n */\n getTickValues () {\n return this.axis().scale().domain();\n }\n\n sanitizeTickFormatter (value) {\n const { tickFormat } = value;\n\n if (tickFormat) {\n return ticks => (val, i) => tickFormat(val, val, i, ticks);\n }\n return () => val => this.valueParser()(val);\n }\n\n /**\n *\n *\n *\n * @memberof BandAxis\n */\n getUnitWidth () {\n return this.scale().bandwidth();\n }\n\n /**\n *\n *\n *\n * @memberof SimpleAxis\n */\n getTickSize () {\n const {\n showInnerTicks,\n showOuterTicks\n } = this.renderConfig();\n const axis = this.axis();\n\n axis.tickSizeInner(showInnerTicks ? 6 : 0);\n axis.tickSizeOuter(showOuterTicks ? 6 : 0);\n return axis.tickSize();\n }\n\n invertExtent (v1, v2) {\n return this.scale().invertExtent(v1, v2);\n }\n\n /**\n * Gets the nearest range value from the given range values.\n * @param {number} v1 Start range value\n * @param {number} v2 End range value\n * @return {Array} range values\n */\n getNearestRange (v1, v2) {\n const scale = this.scale();\n const range = scale.range();\n const reverse = range[0] > range[1];\n\n const extent = this.invertExtent(v1, v2);\n const p1 = scale(reverse ? extent[extent.length - 1] : extent[0]);\n const p2 = scale(reverse ? extent[0] : extent[extent.length - 1]) + scale.bandwidth();\n return [p1, p2];\n }\n}\n","import { getSmallestDiff } from 'muze-utils';\nimport SimpleAxis from './simple-axis';\nimport { TIME } from '../enums/scale-type';\nimport { axisOrientationMap, BOTTOM, TOP } from '../enums/axis-orientation';\nimport { calculateBandSpace, getRotatedSpaces, getValidDomain, setContinousAxisDomain, setOffset } from './helper';\nimport { spaceSetter } from './space-setter';\n\n/**\n *\n *\n * @export\n * @class TimeAxis\n * @extends {SimpleAxis}\n */\nexport default class TimeAxis extends SimpleAxis {\n\n constructor (...params) {\n super(...params);\n this._minDiff = Infinity;\n }\n\n /**\n *\n *\n * @param {*} range\n *\n * @memberof TimeAxis\n */\n createScale (range) {\n let scale = super.createScale(range);\n\n scale = scale.nice();\n return scale;\n }\n\n /**\n *\n *\n * @static\n *\n * @memberof TimeAxis\n */\n static type () {\n return TIME;\n }\n\n /**\n *\n *\n * @returns\n * @memberof SimpleAxis\n */\n createAxis (config) {\n const { orientation } = config;\n const axisClass = axisOrientationMap[orientation];\n\n if (axisClass) {\n const axis = axisClass(this.scale());\n return axis;\n }\n return null;\n }\n\n sanitizeTickFormatter (value) {\n const { tickFormat } = value;\n\n if (tickFormat) {\n return (ticks) => {\n const rawTicks = ticks.map(t => t.getTime());\n return (val, i) => tickFormat(val, val.getTime(), i, rawTicks);\n };\n }\n return () => text => this.scale().tickFormat()(text);\n }\n\n /**\n *\n *\n *\n * @memberof SimpleAxis\n */\n getTickSize () {\n const {\n showInnerTicks,\n showOuterTicks\n } = this.renderConfig();\n const axis = this.axis();\n axis.tickSizeInner(showInnerTicks === false ? 0 : 6);\n axis.tickSizeOuter(showOuterTicks === false ? 0 : 6);\n return super.getTickSize();\n }\n\n /**\n *\n *\n *\n * @memberof TimeAxis\n */\n getTickValues () {\n return this.config().tickValues || this.scale().ticks();\n }\n\n /**\n *\n *\n * @param {*} diff\n *\n * @memberof TimeAxis\n */\n minDiff (diff) {\n this._minDiff = Math.min(this._minDiff, diff);\n return this;\n }\n\n /**\n *\n *\n * @param {*} d\n *\n * @memberof SimpleAxis\n */\n domain (...domain) {\n if (domain.length) {\n const domainValue = getValidDomain(this, domain[0]);\n setContinousAxisDomain(this, domainValue);\n this.setAxisComponentDimensions();\n this.logicalSpace(null);\n return this;\n }\n return this._domain;\n }\n\n /**\n * Gets the space occupied by the axis\n *\n * @return {Object} object with details about size of the axis.\n * @memberof SimpleAxis\n */\n getLogicalSpace () {\n if (!this.logicalSpace()) {\n this.logicalSpace(calculateBandSpace(this));\n this.logicalSpace();\n setOffset(this);\n }\n return this.logicalSpace();\n }\n\n getMinTickDifference () {\n return getSmallestDiff(this.config().tickValues);\n }\n\n /**\n * This method is used to set the space availiable to render\n * the SimpleCell.\n *\n * @param {number} width The width of SimpleCell.\n * @param {number} height The height of SimpleCell.\n * @memberof AxisCell\n */\n setAvailableSpace (width = 0, height, padding, isOffset) {\n let labelConfig = {};\n const {\n orientation\n } = this.config();\n\n this.availableSpace({ width, height, padding });\n\n if (orientation === TOP || orientation === BOTTOM) {\n labelConfig = spaceSetter(this, { isOffset }).time.x();\n } else {\n labelConfig = spaceSetter(this, { isOffset }).time.y();\n }\n\n // Set config\n this.renderConfig({\n labels: labelConfig\n });\n this.setTickConfig();\n this.getTickSize();\n return this;\n }\n\n /**\n *\n *\n * @returns\n * @memberof BandAxis\n */\n setTickConfig () {\n let smartTicks;\n let smartlabel;\n const { tickValues } = this.config();\n const { labels } = this.renderConfig();\n const { height: availHeight, width: availWidth, noWrap } = this.maxTickSpaces();\n const { labelManager } = this._dependencies;\n const domain = this.getTickValues();\n\n tickValues && this.axis().tickValues(tickValues);\n\n const { width, height } = getRotatedSpaces(labels.rotation, availWidth, availHeight);\n\n smartTicks = tickValues || domain;\n\n // set the style on the shared label manager instance\n labelManager.setStyle(this._tickLabelStyle);\n\n if (domain && domain.length) {\n const values = tickValues || domain;\n const tickFormatter = this._tickFormatter(values);\n smartTicks = values.map((d, i) => {\n labelManager.useEllipsesOnOverflow(true);\n\n smartlabel = labelManager.getSmartText(tickFormatter(d, i), width, height, noWrap);\n return labelManager.constructor.textToLines(smartlabel);\n });\n }\n this.smartTicks(smartTicks);\n return this;\n }\n}\n","export const x11Colors = {\n Pink: { hex: 'ffc0cb', rgb: '255,192,203' },\n LightPink: { hex: 'ffb6c1', rgb: '255,182,193' },\n HotPink: { hex: 'ff69b4', rgb: '255,105,180' },\n DeepPink: { hex: 'ff1493', rgb: '255,20,147' },\n PaleVioletRed: { hex: 'db7093', rgb: '219,112,147' },\n MediumVioletRed: { hex: 'c71585', rgb: '199,21,133' },\n LightSalmon: { hex: 'ffa07a', rgb: '255,160,122' },\n Salmon: { hex: 'fa8072', rgb: '250,128,114' },\n DarkSalmon: { hex: 'e9967a', rgb: '233,150,122' },\n LightCoral: { hex: 'f08080', rgb: '240,128,128' },\n IndianRed: { hex: 'cd5c5c', rgb: '205,92,92' },\n Crimson: { hex: 'dc143c', rgb: '220,20,60' },\n FireBrick: { hex: 'b22222', rgb: '178,34,34' },\n DarkRed: { hex: '8b0000', rgb: '139,0,0' },\n Red: { hex: 'ff0000', rgb: '255,0,0' },\n OrangeRed: { hex: 'ff4500', rgb: '255,69,0' },\n Tomato: { hex: 'ff6347', rgb: '255,99,71' },\n Coral: { hex: 'ff7f50', rgb: '255,127,80' },\n DarkOrange: { hex: 'ff8c00', rgb: '255,140,0' },\n Orange: { hex: 'ffa500', rgb: '255,165,0' },\n Gold: { hex: 'ffd700', rgb: '255,215,0' },\n Yellow: { hex: 'ffff00', rgb: '255,255,0' },\n LightYellow: { hex: 'ffffe0', rgb: '255,255,224' },\n LemonChiffon: { hex: 'fffacd', rgb: '255,250,205' },\n LightGoldenrodYellow: { hex: 'fafad2', rgb: '250,250,210' },\n PapayaWhip: { hex: 'ffefd5', rgb: '255,239,213' },\n Moccasin: { hex: 'ffe4b5', rgb: '255,228,181' },\n PeachPuff: { hex: 'ffdab9', rgb: '255,218,185' },\n PaleGoldenrod: { hex: 'eee8aa', rgb: '238,232,170' },\n Khaki: { hex: 'f0e68c', rgb: '240,230,140' },\n DarkKhaki: { hex: 'bdb76b', rgb: '189,183,107' },\n Cornsilk: { hex: 'fff8dc', rgb: '255,248,220' },\n BlanchedAlmond: { hex: 'ffebcd', rgb: '255,235,205' },\n Bisque: { hex: 'ffe4c4', rgb: '255,228,196' },\n NavajoWhite: { hex: 'ffdead', rgb: '255,222,173' },\n Wheat: { hex: 'f5deb3', rgb: '245,222,179' },\n BurlyWood: { hex: 'deb887', rgb: '222,184,135' },\n Tan: { hex: 'd2b48c', rgb: '210,180,140' },\n RosyBrown: { hex: 'bc8f8f', rgb: '188,143,143' },\n SandyBrown: { hex: 'f4a460', rgb: '244,164,96' },\n Goldenrod: { hex: 'daa520', rgb: '218,165,32' },\n DarkGoldenrod: { hex: 'b8860b', rgb: '184,134,11' },\n Peru: { hex: 'cd853f', rgb: '205,133,63' },\n Chocolate: { hex: 'd2691e', rgb: '210,105,30' },\n SaddleBrown: { hex: '8b4513', rgb: '139,69,19' },\n Sienna: { hex: 'a0522d', rgb: '160,82,45' },\n Brown: { hex: 'a52a2a', rgb: '165,42,42' },\n Maroon: { hex: '800000', rgb: '128,0,0' },\n DarkOliveGreen: { hex: '556b2f', rgb: '85,107,47' },\n Olive: { hex: '808000', rgb: '128,128,0' },\n OliveDrab: { hex: '6b8e23', rgb: '107,142,35' },\n YellowGreen: { hex: '9acd32', rgb: '154,205,50' },\n LimeGreen: { hex: '32cd32', rgb: '50,205,50' },\n Lime: { hex: '00ff00', rgb: '0,255,0' },\n LawnGreen: { hex: '7cfc00', rgb: '124,252,0' },\n Chartreuse: { hex: '7fff00', rgb: '127,255,0' },\n GreenYellow: { hex: 'adff2f', rgb: '173,255,47' },\n SpringGreen: { hex: '00ff7f', rgb: '0,255,127' },\n MediumSpringGreen: { hex: '00fa9a', rgb: '0,250,154' },\n LightGreen: { hex: '90ee90', rgb: '144,238,144' },\n PaleGreen: { hex: '98fb98', rgb: '152,251,152' },\n DarkSeaGreen: { hex: '8fbc8f', rgb: '143,188,143' },\n MediumSeaGreen: { hex: '3cb371', rgb: '60,179,113' },\n SeaGreen: { hex: '2e8b57', rgb: '46,139,87' },\n ForestGreen: { hex: '228b22', rgb: '34,139,34' },\n Green: { hex: '008000', rgb: '0,128,0' },\n DarkGreen: { hex: '006400', rgb: '0,100,0' },\n MediumAquamarine: { hex: '66cdaa', rgb: '102,205,170' },\n Aqua: { hex: '00ffff', rgb: '0,255,255' },\n Cyan: { hex: '00ffff', rgb: '0,255,255' },\n LightCyan: { hex: 'e0ffff', rgb: '224,255,255' },\n PaleTurquoise: { hex: 'afeeee', rgb: '175,238,238' },\n Aquamarine: { hex: '7fffd4', rgb: '127,255,212' },\n Turquoise: { hex: '40e0d0', rgb: '64,224,208' },\n MediumTurquoise: { hex: '48d1cc', rgb: '72,209,204' },\n DarkTurquoise: { hex: '00ced1', rgb: '0,206,209' },\n LightSeaGreen: { hex: '20b2aa', rgb: '32,178,170' },\n CadetBlue: { hex: '5f9ea0', rgb: '95,158,160' },\n DarkCyan: { hex: '008b8b', rgb: '0,139,139' },\n Teal: { hex: '008080', rgb: '0,128,128' },\n LightSteelBlue: { hex: 'b0c4de', rgb: '176,196,222' },\n PowderBlue: { hex: 'b0e0e6', rgb: '176,224,230' },\n LightBlue: { hex: 'add8e6', rgb: '173,216,230' },\n SkyBlue: { hex: '87ceeb', rgb: '135,206,235' },\n LightSkyBlue: { hex: '87cefa', rgb: '135,206,250' },\n DeepSkyBlue: { hex: '00bfff', rgb: '0,191,255' },\n DodgerBlue: { hex: '1e90ff', rgb: '30,144,255' },\n CornflowerBlue: { hex: '6495ed', rgb: '100,149,237' },\n SteelBlue: { hex: '4682b4', rgb: '70,130,180' },\n RoyalBlue: { hex: '4169e1', rgb: '65,105,225' },\n Blue: { hex: '0000ff', rgb: '0,0,255' },\n MediumBlue: { hex: '0000cd', rgb: '0,0,205' },\n DarkBlue: { hex: '00008b', rgb: '0,0,139' },\n Navy: { hex: '000080', rgb: '0,0,128' },\n MidnightBlue: { hex: '191970', rgb: '25,25,112' },\n Lavender: { hex: 'e6e6fa', rgb: '230,230,250' },\n Thistle: { hex: 'd8bfd8', rgb: '216,191,216' },\n Plum: { hex: 'dda0dd', rgb: '221,160,221' },\n Violet: { hex: 'ee82ee', rgb: '238,130,238' },\n Orchid: { hex: 'da70d6', rgb: '218,112,214' },\n Fuchsia: { hex: 'ff00ff', rgb: '255,0,255' },\n Magenta: { hex: 'ff00ff', rgb: '255,0,255' },\n MediumOrchid: { hex: 'ba55d3', rgb: '186,85,211' },\n MediumPurple: { hex: '9370db', rgb: '147,112,219' },\n BlueViolet: { hex: '8a2be2', rgb: '138,43,226' },\n DarkViolet: { hex: '9400d3', rgb: '148,0,211' },\n DarkOrchid: { hex: '9932cc', rgb: '153,50,204' },\n DarkMagenta: { hex: '8b008b', rgb: '139,0,139' },\n Purple: { hex: '800080', rgb: '128,0,128' },\n Indigo: { hex: '4b0082', rgb: '75,0,130' },\n DarkSlateBlue: { hex: '483d8b', rgb: '72,61,139' },\n SlateBlue: { hex: '6a5acd', rgb: '106,90,205' },\n MediumSlateBlue: { hex: '7b68ee', rgb: '123,104,238' },\n White: { hex: 'ffffff', rgb: '255,255,255' },\n Snow: { hex: 'fffafa', rgb: '255,250,250' },\n Honeydew: { hex: 'f0fff0', rgb: '240,255,240' },\n MintCream: { hex: 'f5fffa', rgb: '245,255,250' },\n Azure: { hex: 'f0ffff', rgb: '240,255,255' },\n AliceBlue: { hex: 'f0f8ff', rgb: '240,248,255' },\n GhostWhite: { hex: 'f8f8ff', rgb: '248,248,255' },\n WhiteSmoke: { hex: 'f5f5f5', rgb: '245,245,245' },\n Seashell: { hex: 'fff5ee', rgb: '255,245,238' },\n Beige: { hex: 'f5f5dc', rgb: '245,245,220' },\n OldLace: { hex: 'fdf5e6', rgb: '253,245,230' },\n FloralWhite: { hex: 'fffaf0', rgb: '255,250,240' },\n Ivory: { hex: 'fffff0', rgb: '255,255,240' },\n AntiqueWhite: { hex: 'faebd7', rgb: '250,235,215' },\n Linen: { hex: 'faf0e6', rgb: '250,240,230' },\n LavenderBlush: { hex: 'fff0f5', rgb: '255,240,245' },\n MistyRose: { hex: 'ffe4e1', rgb: '255,228,225' },\n Gainsboro: { hex: 'dcdcdc', rgb: '220,220,220' },\n LightGray: { hex: 'd3d3d3', rgb: '211,211,211' },\n Silver: { hex: 'c0c0c0', rgb: '192,192,192' },\n DarkGrey: { hex: 'a9a9a9', rgb: '169,169,169' },\n Grey: { hex: '808080', rgb: '128,128,128' },\n DimGrey: { hex: '696969', rgb: '105,105,105' },\n LightSlateGrey: { hex: '778899', rgb: '119,136,153' },\n SlateGrey: { hex: '708090', rgb: '112,128,144' },\n DarkSlateGrey: { hex: '2f4f4f', rgb: '47,79,79' },\n Black: { hex: '000000', rgb: '0,0,0' }\n};\n","import {\n LINEAR\n} from '../enums/constants';\n/**\n * Set of default colors\n */\nexport const palette = [\n '#086bb6',\n '#f37d45',\n '#f5ce02',\n '#67bda0',\n '#c54e4e',\n '#ae70af'\n];\n\nexport const DEFAULT_GRADIENT_COLOR = '#eaeaea';\n\nexport const DEFAULT_CONFIG = {\n range: palette,\n value: palette[0],\n step: false,\n stops: 5,\n type: LINEAR\n};\n","import { mergeRecursive, detectColor, hexToHsv, rgbToHsv } from 'muze-utils';\nimport { x11Colors } from './color-maps';\nimport { palette, DEFAULT_GRADIENT_COLOR } from './defaults';\nimport { LINEAR, RGB, HEX, HSL, HSLA } from '../enums/constants';\n\nexport const getHslString = hslArr => `hsla(${hslArr[0] * 360},${hslArr[1] * 100}%,${hslArr[2] * 100}%,\\\n${hslArr[3] || 1})`;\n\nexport const convertToXllString = baseString => (baseString.split(' ') || [])\n .reduce((x, e) => `${x}${e.charAt(0).toUpperCase()}${e.slice(1)}`, '');\n\nexport const getActualHslColor = (e, paletteColor) => {\n let color = '';\n if (typeof e === 'string') {\n e = e.replace(/ /g, '');\n e = e.toLowerCase();\n if (detectColor(e) === HSL || detectColor(e) === HSLA) {\n color = e.match(/(\\d+(\\.\\d+)?)/g);\n color = [color[0] / 360, color[1] / 100, color[2] / 100, color[3] || 1];\n } else if (detectColor(e) === HEX) {\n color = hexToHsv(e);\n } else if (detectColor(e) === RGB) {\n const col = e.substring(e.indexOf('(') + 1, e.lastIndexOf(')')).split(/,\\s*/);\n color = rgbToHsv(...col);\n } else if (x11Colors[convertToXllString(e)]) {\n color = rgbToHsv(...x11Colors[convertToXllString(e)].rgb.split(','));\n }\n } else if (!(e instanceof Array)) {\n color = rgbToHsv(paletteColor);\n } else {\n color = e;\n }\n return color;\n};\n\nexport const PROPS = {\n config: {\n sanitization: (context, config) => {\n const defCon = mergeRecursive({}, context.constructor.defaultConfig());\n if (config.type === LINEAR) {\n config.range = config.range || [defCon.range[0]];\n config.range = config.range.length > 1 ? config.range : [DEFAULT_GRADIENT_COLOR, ...config.range];\n }\n const oldConfig = mergeRecursive(defCon, context.config());\n const newConfig = mergeRecursive(oldConfig, config);\n\n if (newConfig.range instanceof Array) {\n newConfig.range = newConfig.range.map((e, i) => getActualHslColor(e, palette[i]));\n newConfig.stops = config.stops || newConfig.range.length;\n }\n newConfig.value = getActualHslColor(newConfig.value, newConfig.value);\n return newConfig;\n }\n },\n domain: {},\n scale: {},\n uniqueValues: {}\n};\n","import { InvalidAwareTypes } from 'muze-utils';\n\nexport const treatNullMeasures = (domainVal, scaledVal, minDomainScaledVal) => {\n if (domainVal instanceof InvalidAwareTypes) {\n return minDomainScaledVal;\n }\n return scaledVal;\n};\n","import { numberInterpolator, piecewiseInterpolator, hslInterpolator } from 'muze-utils';\nimport { CONTINOUS, DISCRETE } from '../enums/constants';\nimport { LINEAR, SEQUENTIAL, ORDINAL, QUANTILE } from '../enums/scale-type';\nimport { getHslString } from './props';\nimport { treatNullMeasures } from '../helper';\n\nconst getStops = (domain, stops) => {\n let newStops = [];\n\n if (stops instanceof Array) {\n newStops = stops.slice().sort();\n newStops = [...new Set([domain[0], ...stops, domain[1]])].sort();\n } else {\n const interpolator = numberInterpolator()(...domain);\n for (let i = 0; i <= stops; i++) {\n newStops[i] = interpolator(i / stops);\n }\n }\n\n if (newStops[0] < domain[0]) {\n newStops.shift();\n }\n return { domain, newStops };\n};\n\nconst rangeStops = (newStopsLength, range) => {\n let newRange = [];\n const maxRangeLength = Math.min(range.length, 18);\n\n if (newStopsLength > maxRangeLength) {\n const interpolator = piecewiseInterpolator()(hslInterpolator(), range.map(e => getHslString(e)));\n for (let i = 0; i < newStopsLength; i++) {\n newRange[i] = interpolator(i / (newStopsLength - 1));\n }\n } else {\n newRange = range.slice(0, newStopsLength);\n }\n return { newRange };\n};\n\n/**\n*\n*\n* @param {*} domain\n*\n*/\nconst indexedDomain = (domain) => {\n const uniqueVals = domain;\n const retDomain = domain.map((d, i) => (i) / (domain.length - 1));\n return { domain: retDomain, uniqueVals, scaleDomain: [0, 1] };\n};\n\n/**\n *\n *\n * @param {*} domain\n *\n */\nconst indexedDomainMeasure = (domain, stops, range) => {\n const uniqueVals = domain;\n return { domain, uniqueVals, scaleDomain: [0, 1], range };\n};\n\n/**\n *\n *\n * @param {*} domain\n *\n */\nconst normalDomain = (domain, stops, range) => {\n const uniqueVals = domain;\n return { uniqueVals, domain, nice: true, range };\n};\n\n/**\n *\n *\n * @param {*} domain\n * @param {*} stops\n *\n */\nconst steppedDomain = (domain, stops, range) => {\n const { domain: uniqueVals, newStops } = getStops(domain, stops);\n const { newRange } = rangeStops(newStops.length - 1, range);\n\n return { uniqueVals, domain: newStops, nice: true, range: newRange };\n};\n\nconst continousSteppedDomain = (domain, stops, range) => {\n const { domain: uniqueVals, newStops } = getStops(domain, range.length - 1);\n const hslRange = range.map(e => getHslString(e));\n return { uniqueVals, domain: newStops, nice: true, range: hslRange };\n};\n\n/**\n *\n *\n * @param {*} domainValue\n * @param {*} scale\n * @param {*} domain\n * @param {*} uniqueVals\n *\n */\nconst uniqueRange = (domainValue, scale, domain, uniqueVals) => {\n const index = uniqueVals.indexOf(domainValue);\n const numVal = domain[index];\n return scale(numVal);\n};\n\n/**\n *\n *\n * @param {*} domainValue\n * @param {*} scale\n * @param {*} domain\n *\n */\nconst indexedRange = (domainValue, scale, domain) => {\n const numVal = (domainValue - domain[0]) / (domain[domain.length - 1] - domain[0]);\n\n return treatNullMeasures(domainValue, scale(numVal), scale(0));\n};\n\n/**\n *\n *\n * @param {*} domainValue\n * @param {*} scale\n */\nconst normalRange = (domainValue, scale, domain) => treatNullMeasures(domainValue, scale(domainValue),\n scale(domain[0]));\n\n/**\n *\n *\n * @param {*} stops\n */\nconst strategies = () => ({\n [`${CONTINOUS}-${CONTINOUS}-${SEQUENTIAL}`]: {\n scale: SEQUENTIAL,\n domainRange: () => indexedDomainMeasure,\n value: () => indexedRange\n },\n [`${CONTINOUS}-${DISCRETE}-${SEQUENTIAL}`]: {\n scale: SEQUENTIAL,\n domainRange: () => indexedDomainMeasure,\n value: () => indexedRange\n },\n [`${DISCRETE}-${DISCRETE}-${SEQUENTIAL}`]: {\n scale: SEQUENTIAL,\n domainRange: () => indexedDomain,\n value: () => uniqueRange\n },\n [`${DISCRETE}-${DISCRETE}-${ORDINAL}`]: {\n scale: ORDINAL,\n domainRange: () => normalDomain,\n value: () => normalRange\n },\n [`${CONTINOUS}-${CONTINOUS}-${ORDINAL}`]: {\n scale: LINEAR,\n domainRange: () => continousSteppedDomain,\n value: () => normalRange\n },\n [`${CONTINOUS}-${DISCRETE}-${ORDINAL}`]: {\n scale: QUANTILE,\n domainRange: () => steppedDomain,\n value: () => normalRange\n\n }\n});\n\n/**\n *\n *\n * @param {*} domainType\n * @param {*} rangeType\n * @param {*} schemeType\n * @param {*} stops\n */\nexport const strategyGetter = (domainType, rangeType, schemeType, stops) =>\n strategies(stops)[`${domainType}-${rangeType}-${schemeType || ''}`];\n","/**\n * @module Axis\n * This file declares a class that is used to render an axis to add meaning to\n * plots.\n */\nimport { getUniqueId, generateGetterSetters, rgbToHsv } from 'muze-utils';\nimport { createScale, getScheme, getSchemeType } from '../scale-creator';\nimport { CONTINOUS, DISCRETE, COLOR } from '../enums/constants';\nimport { strategyGetter } from './color-strategy';\nimport { DEFAULT_CONFIG } from './defaults';\nimport { PROPS, getHslString } from './props';\n\n/**\n* This class is used to instantiate a SimpleAxis.\n* @class SimpleAxis\n*/\nexport default class ColorAxis {\n\n /**\n * Creates an instance of SimpleAxis.\n * @param {Object} config input parameters.\n * @param {Object | undefined} params.range Type of color range.\n * @param {string} params.name the label to show on axis.\n * @param {string} params.type The type of scale to handle.\n * @memberof ColorAxis\n */\n constructor (config) {\n generateGetterSetters(this, PROPS);\n this.config(config);\n\n this._domainType = this._config.type === 'linear' ? CONTINOUS : DISCRETE;\n this._rangeType = (this._config.type === 'linear' && !this._config.step) ? CONTINOUS : DISCRETE;\n\n this._schemeType = getSchemeType(this._config.range);\n\n this._colorStrategy = this.setColorStrategy(this._domainType, this._rangeType, this._schemeType);\n this._scale = this.createScale(this._colorStrategy);\n\n this._id = getUniqueId();\n\n this.updateDomain(config.domain);\n }\n\n /**\n *\n *\n * @static\n *\n * @memberof ColorAxis\n */\n static defaultConfig () {\n return DEFAULT_CONFIG;\n }\n\n /**\n *\n *\n * @static\n *\n * @memberof ColorAxis\n */\n static type () {\n return COLOR;\n }\n\n /**\n *\n *\n * @param {*} colorStrategy\n *\n * @memberof ColorAxis\n */\n createScale (colorStrategy) {\n const { range } = this.config();\n if (range && typeof (range) === 'string') {\n return getScheme(range);\n }\n return createScale({\n type: colorStrategy.scale,\n range\n });\n }\n\n /**\n *\n *\n * @param {*} domainType\n * @param {*} rangeType\n * @param {*} schemeType\n *\n * @memberof ColorAxis\n */\n setColorStrategy (domainType, rangeType, schemeType) {\n const { stops } = this.config();\n\n return strategyGetter(domainType, rangeType, schemeType, stops);\n }\n\n /**\n *\n *\n * @param {*} domainVal\n *\n * @memberof ColorAxis\n */\n getHslString (hslColorArray) {\n return getHslString(hslColorArray);\n }\n /**\n *\n *\n * @param {*} domainVal\n *\n * @memberof ColorAxis\n */\n getColor (domainVal) {\n return this.getHslString(this.getRawColor(domainVal));\n }\n /**\n *\n *\n * @param {*} domainVal\n *\n * @memberof ColorAxis\n */\n getRawColor (domainVal) {\n if (this.domain() && domainVal !== undefined) {\n const scale = this.scale();\n const range = scale.range ? scale.range() : null;\n const color = this._colorStrategy.value(range)(domainVal, scale, this.domain(), this.uniqueValues());\n if (color) {\n if (typeof color === 'string') {\n const col = color.substring(color.indexOf('(') + 1, color.lastIndexOf(')')).split(/,\\s*/);\n return rgbToHsv(...col);\n }\n return [...color];\n }\n }\n return [...this.config().value];\n }\n\n /**\n *\n *\n * @param {*} [domain=[]]\n *\n * @memberof ColorAxis\n */\n updateDomain (domain = []) {\n if (domain.length) {\n const scale = this.scale();\n const range = scale.range ? scale.range() : null;\n const domainRangeFn = this._colorStrategy.domainRange();\n const scaleInfo = domainRangeFn(domain, this.config().stops, range);\n\n this.domain(scaleInfo.domain);\n scaleInfo.range && this.scale().range(scaleInfo.range);\n this.uniqueValues(scaleInfo.uniqueVals);\n this.scale().domain(scaleInfo.scaleDomain || this.domain());\n }\n return this;\n }\n\n /**\n * This method returns an object that can be used to\n * reconstruct this instance.\n *\n * @return {Object} the serializable props of axis\n * @memberof ShapeAxis\n */\n serialize () {\n return {\n type: this.constructor.type(),\n scale: this.scale(),\n domain: this.domain(),\n config: this.config()\n };\n }\n\n transformColor (color, transformationArr) {\n const h = color[0] * 360;\n const s = color[1] * 100;\n const l = color[2] * 100;\n const a = color[3] || 1;\n const newH = h + transformationArr[0];\n const newS = s + transformationArr[1];\n const newL = l + transformationArr[2];\n const newA = a + transformationArr[3] || 0;\n\n return { color: `hsla(${newH},${newS}%,${newL}%,${newA})`, hsla: [newH / 360, newS / 100, newL / 100, newA] };\n }\n\n /**\n * Returns the id of the axis.\n * @return {string} Unique identifier of the axis.\n */\n id () {\n return this._id;\n }\n\n}\n","export const DEFAULT_CONFIG = {\n value: 36,\n range: [36, 1000]\n};\n","import { numberInterpolator, piecewiseInterpolator } from 'muze-utils';\nimport { CONTINOUS, DISCRETE } from '../enums/constants';\nimport { LINEAR, THRESHOLD } from '../enums/scale-type';\nimport { treatNullMeasures } from '../helper';\n\n/**\n *\n *\n * @param {*} domain\n *\n */\nconst indexedDomain = (domain) => {\n const uniqueVals = domain;\n const retDomain = domain.map((d, i) => (i) / (domain.length - 1));\n return { domain: retDomain, uniqueVals, scaleDomain: [0, 1] };\n};\n\n/**\n *\n *\n * @param {*} domain\n *\n */\nconst normalDomain = (domain) => {\n const uniqueVals = domain;\n return { uniqueVals, domain };\n};\n\n/**\n *\n *\n * @param {*} domain\n * @param {*} intervals\n *\n */\nconst steppedDomain = (domain, intervals) => {\n let newIntervals = [];\n if (intervals instanceof Array) {\n newIntervals = intervals.slice().sort();\n } else {\n const interpolator = numberInterpolator()(...domain);\n for (let i = 0; i < intervals; i++) {\n newIntervals[i] = interpolator(i / (intervals - 1));\n }\n }\n if (newIntervals[0] < domain[0]) {\n newIntervals.shift();\n }\n const retDomain = newIntervals;\n return { uniqueVals: newIntervals, domain: retDomain, nice: true };\n};\n\n/**\n *\n *\n * @param {*} domainValue\n * @param {*} scale\n * @param {*} domain\n * @param {*} uniqueVals\n *\n */\nconst discreteRange = (domainValue, scale, domain) => {\n const numVal = (domainValue - domain[0]) / (domain[domain.length - 1] - domain[0]);\n const interpolator = numberInterpolator()(...scale.range());\n return treatNullMeasures(domainValue, interpolator(numVal), interpolator(domain[0]));\n};\n\n/**\n *\n *\n * @param {*} domainValue\n * @param {*} scale\n * @param {*} domain\n *\n */\nconst pieceWiseRange = (domainValue, scale, domain, uniqueVals) => {\n const index = uniqueVals.indexOf(domainValue);\n const numVal = domain[index];\n const fn = piecewiseInterpolator()(numberInterpolator(), [...scale.range()]);\n return fn(numVal);\n};\n\n/**\n *\n *\n * @param {*} domainValue\n * @param {*} scale\n */\nconst normalRange = (domainValue, scale, domain) =>\n treatNullMeasures(domainValue, scale(domainValue), scale(domain[0]));\n\n/**\n *\n *\n * @param {*} intervals\n */\nconst strategies = {\n [`${DISCRETE}-${CONTINOUS}`]: {\n scale: LINEAR,\n domain: indexedDomain,\n range: pieceWiseRange\n },\n [`${CONTINOUS}-${CONTINOUS}`]: {\n scale: LINEAR,\n domain: normalDomain,\n range: normalRange\n },\n [`${CONTINOUS}-${DISCRETE}`]: {\n scale: THRESHOLD,\n domain: steppedDomain,\n range: discreteRange\n }\n};\n\n/**\n *\n *\n * @param {*} domainType\n * @param {*} rangeType\n * @param {*} schemeType\n * @param {*} intervals\n */\nexport const strategyGetter = (domainType, rangeType) =>\n strategies[`${domainType}-${rangeType}`];\n","export const PROPS = {\n config: {},\n domain: {\n sanitization: (context, value) => {\n context.scale().domain(value);\n return value;\n }\n },\n range: {},\n scale: {},\n uniqueValues: {}\n};\n","/**\n * @module Axis\n * This file declares a class that is used to render an axis to add meaning to\n * plots.\n */\nimport { getUniqueId, generateGetterSetters } from 'muze-utils';\nimport { createScale } from '../scale-creator';\nimport { DEFAULT_CONFIG } from './defaults';\nimport { SIZE, CONTINOUS, DISCRETE } from '../enums/constants';\nimport { strategyGetter } from './size-strategy';\nimport { PROPS } from './props';\n\n/**\n* This class is used to instantiate a SimpleAxis.\n* @class SimpleAxis\n*/\nexport default class SizeAxis {\n\n /**\n * Creates an instance of SimpleAxis.\n * @param {Object} config input parameters.\n * @memberof SizeAxis\n */\n constructor (config) {\n generateGetterSetters(this, PROPS);\n\n this._id = getUniqueId();\n this._config = Object.assign({}, this.constructor.defaultConfig(), config);\n // @todo: Will use configuration override using scale decorator\n this._domainType = this._config.type === 'linear' ? CONTINOUS : DISCRETE;\n this._rangeType = CONTINOUS;\n\n this._sizeStrategy = this.setStrategy(this._domainType, this._rangeType);\n this._scale = this.createScale(this._sizeStrategy);\n this._range = this._config.range;\n\n this.updateDomain(config.domain);\n }\n\n /**\n *\n *\n * @param {*} domainType\n * @param {*} rangeType\n * @param {*} schemeType\n *\n * @memberof ColorAxis\n */\n setStrategy (domainType, rangeType) {\n return strategyGetter(domainType, rangeType);\n }\n\n /**\n *\n *\n *\n * @memberof SizeAxis\n */\n createScale (strategy) {\n const {\n range\n } = this.config();\n return createScale({\n type: strategy.scale,\n range\n });\n }\n\n /**\n *\n *\n * @static\n *\n * @memberof ColorAxis\n */\n static defaultConfig () {\n return DEFAULT_CONFIG;\n }\n\n /**\n *\n *\n * @static\n *\n * @memberof ColorAxis\n */\n static type () {\n return SIZE;\n }\n\n /**\n *\n *\n * @param {*} domainVal\n *\n * @memberof SizeAxis\n */\n getSize (domainVal = 0) {\n let sizeVal = 1;\n const {\n value\n } = this.config();\n const scale = this.scale();\n const domain = this.domain() || [1, 1];\n\n if (!scale || domain[0] === domain[1]) {\n sizeVal = value;\n } else {\n return this._sizeStrategy.range(domainVal, scale, this.domain(), this.uniqueValues());\n }\n return sizeVal;\n }\n\n /**\n * This method is used to assign a domain to the axis.\n *\n * @param {Array} domain the domain of the scale\n * @memberof SizeAxis\n */\n updateDomain (domain) {\n if (domain) {\n const domainFn = this._sizeStrategy.domain;\n\n const domainInfo = domainFn(domain, this.config().intervals);\n\n this.domain(domainInfo.domain);\n this.uniqueValues(domainInfo.uniqueVals);\n\n this.scale().domain(domainInfo.scaleDomain || this.domain());\n }\n return this;\n }\n\n /**\n * This method returns an object that can be used to\n * reconstruct this instance.\n *\n * @return {Object} the serializable props of axis\n * @memberof ShapeAxis\n */\n serialize () {\n return {\n type: this.constructor.type(),\n scale: this.scale(),\n domain: this.domain(),\n range: this.range(),\n config: this.config()\n };\n }\n\n /**\n * Returns the id of the axis.\n * @return {string} Unique identifier of the axis.\n */\n id () {\n return this._id;\n }\n}\n","export const DEFAULT_CONFIG = {\n generator: null,\n value: 'circle',\n range: ['circle', 'diamond', 'star', 'cross', 'square', 'wye', 'triangle']\n};\n","export const PROPS = {\n config: {},\n domain: {},\n scale: {},\n uniqueValues: {},\n generator: {}\n};\n\n","/**\n * @module Axis\n * This file declares a class that is used to render an axis to add meaning to\n * plots.\n */\nimport { getUniqueId, getSymbol, generateGetterSetters, mergeRecursive, InvalidAwareTypes } from 'muze-utils';\nimport { createScale } from '../scale-creator';\nimport { DEFAULT_CONFIG } from './defaults';\nimport { SHAPE } from '../enums/constants';\nimport { shapeGenerator } from './helper';\nimport { PROPS } from './props';\n\n/**\n* This class is used to instantiate a SimpleAxis.\n* @class SimpleAxis\n*/\nexport default class ShapeAxis {\n /**\n * Creates an instance of SimpleAxis.\n * @param {Object} params input parameters.\n * @param {Object | undefined} params.range Type of color scheme.\n * @memberof ShapeAxis\n */\n constructor (config) {\n generateGetterSetters(this, PROPS);\n\n this._id = getUniqueId();\n this._config = Object.assign({}, this.constructor.defaultConfig());\n this._config = mergeRecursive(this._config, config);\n\n this._scale = createScale({\n type: 'ordinal',\n range: this._config.range\n });\n this.updateDomain(config.domain);\n }\n\n /**\n *\n *\n * @static\n *\n * @memberof ColorAxis\n */\n static defaultConfig () {\n return DEFAULT_CONFIG;\n }\n\n /**\n *\n *\n * @static\n *\n * @memberof ColorAxis\n */\n static type () {\n return SHAPE;\n }\n\n /**\n *\n *\n * @param {*} value\n *\n * @memberof ShapeAxis\n */\n getShape (value) {\n if (!this.scale() || !this.domain() || !value || value instanceof InvalidAwareTypes) {\n return this.config().value;\n }\n\n if (this._generatedShapes) {\n return this._generatedShapes[value];\n }\n\n const shapeType = this.scale()(value);\n if (shapeType === 'string') {\n return getSymbol(shapeType);\n }\n\n return shapeType;\n }\n\n /**\n * This method is used to assign a domain to the axis.\n *\n * @param {Array} domain the domain of the scale\n * @memberof ShapeAxis\n */\n updateDomain (domain = []) {\n if (domain.length) {\n this.uniqueValues(domain);\n this.domain(domain);\n this.scale().domain(domain);\n\n if (this.config().generator) {\n this._generatedShapes = shapeGenerator(domain, this.config().generator);\n }\n }\n return this;\n }\n\n /**\n * This method returns an object that can be used to\n * reconstruct this instance.\n *\n * @return {Object} the serializable props of axis\n * @memberof ShapeAxis\n */\n serialize () {\n return {\n type: this.constructor.type(),\n scale: this.scale(),\n domain: this.domain(),\n range: this.config().range,\n config: this.config()\n };\n }\n\n /**\n * Returns the id of the axis.\n * @return {string} Unique identifier of the axis.\n */\n id () {\n return this._id;\n }\n}\n","/**\n *\n *\n * @param {*} domain\n * @param {*} generatorFn\n *\n */\nexport const shapeGenerator = (domain, generatorFn) => {\n const generatedShapes = {};\n domain.forEach((value) => {\n generatedShapes[value] = generatorFn(value);\n });\n return generatedShapes;\n};\n","import * as ScaleType from './enums/scale-type';\n\nconst DATA_TYPES = {\n DIMENSION: 'dimension',\n CATEGORICAL: 'categorical',\n MEASURE: 'measure',\n TEMPORAL: 'temporal'\n};\n\n/**\n * Map of DataModel types to associated field types.\n */\nexport const dataTypeScaleMap = {\n [DATA_TYPES.DIMENSION]: ScaleType.BAND,\n [DATA_TYPES.MEASURE]: ScaleType.LINEAR,\n [DATA_TYPES.TEMPORAL]: ScaleType.TIME\n};\n\n","import { nestCollection, InvalidAwareTypes } from 'muze-utils';\n\n/**\n * Create multiple datasets from a single dataset by grouping the data using\n * a dimensional field.\n * @param {Array} schema Name and type of fields are stored in schema\n * @param {Array} data Data array\n * @param {Object} config Configuration object\n * @return {Array} Grouped data array\n */\nexport default (schema, data, config) => {\n const groupBy = config.groupBy instanceof Array ? config.groupBy : [config.groupBy];\n const groupByIndices = groupBy.map(fieldName => schema.findIndex(d => d.name === fieldName));\n\n if (groupByIndices.find(d => d === -1) !== undefined) {\n throw new Error(`Groupby field ${groupBy} not found in schema`);\n }\n\n const groupedData = nestCollection({\n keys: groupByIndices,\n data\n });\n\n groupedData.forEach((d) => {\n const key = d.key;\n if (InvalidAwareTypes.isInvalid(key)) {\n d.key = InvalidAwareTypes.getInvalidType(key);\n }\n });\n return groupedData;\n};\n","/**\n * @module Transform\n * This file exports a function that is used to implement\n * the identity transform\n */\n /* eslint no-unused-vars: 0 */\n /**\n * This function accepts data and returns the data unchanged.\n * @param {Object} schema The schema.\n * @param {Array} data The data array.\n * @param {Object} config The config object.\n * @return {Array} The unchanged data.\n */\n function identityTransform (schema, data, config) {\n return data;\n }\n\n export default identityTransform;\n","/**\n * @module Transform\n * This file exports the transform factory.\n */\nimport * as TransformType from '../enums/transform-type';\nimport identity from '../identity-transform';\nimport group from '../group-transform';\nimport stack from '../stack-transform';\n\n/* istanbul ignore next */\nconst transformMap = {\n [TransformType.IDENTITY]: identity,\n [TransformType.GROUP]: group,\n [TransformType.STACK]: stack\n};\n\n/**\n * This function is used to retirn a transform associated\n * with the given type.\n *\n * @param {string} type The type of the transform.\n * @return {Function} The transform function.\n */\nfunction transformFactory (type) {\n const transform = transformMap[type];\n if (typeof transform !== 'function') {\n throw new Error('Invalid transform type supplied.');\n }\n return transform;\n}\n\nexport default transformFactory;\n","/**\n * @module Transform\n * This module exports constants that are used to reference transforms in\n * a consistent manner throughout the project.\n */\n/* eslint one-var: 0 */\n export const IDENTITY = 'identity';\n export const GROUP = 'group';\n export const STACK = 'stack';\n export const FRACTURE = 'fracture';\n","import { stack } from 'muze-utils';\n\nimport group from '../group-transform';\n/*\n Normalize the data to a form which can be given to d3 stack for stacking the data\n ['Product', 'Sales', 'Region'],\n 0 ['A', 2000, 'North'],\n 1 ['A', 3000, 'South'],\n 2 ['B', 3000, 'South'],\n 3 ['B', 2000, 'North'],\n 4 ['C', 3000, 'South'],\n 5 ['C', 2000, 'North']\n |\n |\n ['Product', 'North', 'South'],\n ['A', 2000, 3000],\n ['B', 2000, 3000],\n ['C', 2000, 3000]\n*/\n// eslint-disable-next-line require-jsdoc\nconst normalizeData = (data, schema, valueField, uniqueField, groupBy) => {\n const groupedData = group(schema, data, {\n groupBy: uniqueField\n });\n const uniqueFieldIndex = schema.findIndex(d => d.name === uniqueField);\n const valueFieldIndex = schema.findIndex(d => d.name === valueField);\n const seriesKeyIndex = schema.findIndex(d => d.name === groupBy);\n const seriesKeys = data.map(d => d[seriesKeyIndex]).filter((item, pos, arr) => arr.indexOf(item) === pos).sort();\n const fieldNames = schema.reduce((acc, obj, i) => {\n acc[i] = obj.name;\n return acc;\n }, {});\n const dataArr = groupedData.map((arr) => {\n const tuples = {};\n const rowObj = arr.values.reduce((acc, row) => {\n acc = row.reduce((obj, value, i) => {\n if (i === seriesKeyIndex) {\n obj[value] = row[valueFieldIndex];\n tuples[value] = row;\n } else if (i !== valueFieldIndex) {\n obj[fieldNames[i]] = value;\n }\n return obj;\n }, acc);\n return acc;\n }, {});\n rowObj._tuple = tuples;\n // Set missing values field to zero value\n seriesKeys.forEach((seriesKey) => {\n if (rowObj[seriesKey] === undefined) {\n rowObj[seriesKey] = 0;\n const newArr = new Array(arr.values[0].length);\n newArr[uniqueFieldIndex] = arr.key;\n newArr[seriesKeyIndex] = seriesKey;\n rowObj._tuple[seriesKey] = newArr;\n }\n });\n return rowObj;\n });\n\n return {\n data: dataArr,\n keys: seriesKeys\n };\n};\n/**\n * Generate a stacked representation of data\n * @param {Array} schema schema Array\n * @param {Array} data data array\n * @param {Object} config Configuration object\n * @return {Array} stacked data\n */\nexport default (schema, data, config) => {\n const uniqueField = config.uniqueField;\n const valueField = config.value;\n const groupBy = config.groupBy;\n const sort = config.sort || 'descending';\n const normalizedData = normalizeData(data, schema, valueField, uniqueField, groupBy);\n const keys = normalizedData.keys;\n const map = {};\n const orderBy = config.orderBy;\n const orderIndex = schema.findIndex(d => d.name === orderBy);\n const groupByIndex = schema.findIndex(d => d.name === groupBy);\n if (orderIndex !== -1) {\n keys.forEach((key) => {\n const name = data.find(d => d[groupByIndex] === key);\n map[key] = name[orderIndex];\n });\n normalizedData.keys.sort((a, b) => map[a].localeCompare(map[b]));\n }\n\n const stackData = stack({\n keys: normalizedData.keys,\n offset: config.offset || 'diverging',\n order: sort,\n data: normalizedData.data\n });\n stackData.forEach((seriesData) => {\n seriesData.forEach((dataObj) => {\n dataObj.data = dataObj.data._tuple[seriesData.key];\n });\n });\n return stackData;\n};\n\n","import {\n FieldType,\n getDomainFromData,\n setStyles,\n easeFns,\n selectElement,\n DimensionSubtype,\n STATE_NAMESPACES,\n retrieveNearestGroupByReducers,\n getObjProp\n} from 'muze-utils';\nimport { ScaleType } from '@chartshq/muze-axis';\nimport { transformFactory } from '@chartshq/transform';\nimport { IDENTITY, STACK, GROUP, COLOR, SHAPE, SIZE, ENCODING, AGG_FN_SUM } from '../enums/constants';\n\nconst BAND = ScaleType.BAND;\n\nexport const getLayerColor = ({ datum, index }, { colorEncoding, colorAxis, colorFieldIndex }) => {\n let rawColor = '';\n let color = '';\n if (colorEncoding && colorEncoding.value instanceof Function) {\n color = colorEncoding.value(datum, index);\n rawColor = colorEncoding.value(datum, index);\n } else {\n rawColor = colorAxis.getRawColor(datum._data[colorFieldIndex]);\n color = colorAxis.getHslString(rawColor);\n }\n return { color, rawColor };\n};\n\nconst transfromColor = (colorAxis, datum, styleType, intensity) => {\n datum.meta.stateColor[styleType] = datum.meta.stateColor[styleType] || datum.meta.originalColor;\n const fillColorInfo = colorAxis.transformColor(datum.meta.stateColor[styleType], intensity);\n datum.meta.stateColor[styleType] = fillColorInfo.hsla;\n\n return fillColorInfo;\n};\n\nexport const applyInteractionStyle = (context, selectionSet, interactionStyles, config) => {\n const elements = context.getPlotElementsFromSet(selectionSet);\n const axes = context.axes();\n const colorAxis = axes.color;\n const apply = config.apply;\n const interactionType = config.interactionType;\n interactionStyles.forEach((style) => {\n const styleType = style.type;\n elements.style(styleType, ((d) => {\n const { colorTransform, stateColor, originalColor } = d.meta;\n colorTransform[interactionType] = colorTransform[interactionType] || {};\n if (apply && !colorTransform[interactionType][styleType]) {\n // fade selections\n colorTransform[interactionType][styleType] = style.intensity;\n const color = transfromColor(colorAxis, d, styleType, style.intensity).color;\n return color;\n }\n if (!apply && colorTransform[interactionType][styleType]) {\n // unfade selections\n colorTransform[interactionType][styleType] = null;\n return transfromColor(colorAxis, d, styleType, style.intensity.map(e => -e)).color;\n }\n const [h, s, l, a] = stateColor[styleType] ? stateColor[styleType] : originalColor;\n return `hsla(${h * 360},${s * 100}%,${l * 100}%, ${a || 1})`;\n }));\n });\n};\n\n/**\n *\n *\n * @param {*} selectionSet\n * @param {*} className\n * @param {*} hasFaded\n */\nexport const fadeUnfadeSelection = (context, selectionSet, hasFaded, interaction) => {\n const interactionConfig = { interaction, apply: hasFaded };\n applyInteractionStyle(context, selectionSet, 'fade', interactionConfig);\n};\n\n/**\n *\n *\n * @param {*} selectionSet\n * @param {*} className\n * @param {*} hasFaded\n */\nexport const focusUnfocusSelection = (context, selectionSet, isFocussed, interaction) => {\n const interactionConfig = { interaction, apply: isFocussed };\n applyInteractionStyle(context, selectionSet, 'focus', interactionConfig);\n};\n\n/**\n *\n *\n * @param {*} axes\n *\n */\nexport const getAxesScales = (axes) => {\n const [xAxis, yAxis] = [ENCODING.X, ENCODING.Y].map(e => axes[e]);\n const [xScale, yScale] = [xAxis, yAxis].map(e => e && e.scale());\n return {\n xAxis,\n yAxis,\n xScale,\n yScale\n };\n};\n\n/**\n *\n *\n * @param {*} encoding\n * @param {*} fieldsConfig\n *\n */\nexport const getEncodingFieldInf = (encoding, fieldsConfig) => {\n const [xField, yField, x0Field, y0Field, colorField, shapeField, sizeField] =\n [ENCODING.X, ENCODING.Y, ENCODING.X0, ENCODING.Y0, COLOR, SHAPE, SIZE].map(e => encoding[e] &&\n encoding[e].field);\n\n const [xFieldType, yFieldType] = [xField, yField, x0Field, y0Field].map(e => fieldsConfig[e] &&\n fieldsConfig[e].def.type);\n\n const [xFieldSubType, yFieldSubType] = [xField, yField].map(e => fieldsConfig[e] && (fieldsConfig[e].def.subtype ||\n fieldsConfig[e].def.type));\n\n const [xFieldIndex, yFieldIndex, x0FieldIndex, y0FieldIndex] = [xField, yField, x0Field, y0Field]\n .map(e => fieldsConfig[e] && fieldsConfig[e].index);\n\n return {\n xField,\n yField,\n colorField,\n shapeField,\n sizeField,\n x0Field,\n y0Field,\n xFieldType,\n yFieldType,\n xFieldSubType,\n yFieldSubType,\n xFieldIndex,\n yFieldIndex,\n x0FieldIndex,\n y0FieldIndex\n };\n};\n\n/**\n *\n *\n * @param {*} dataModel\n * @param {*} config\n * @param {*} transformType\n *\n */\nexport const transformData = (dataModel, config, transformType, encodingFieldInf) => {\n const data = dataModel.getData({ withUid: true });\n const schema = data.schema;\n const transform = config.transform;\n const {\n xField,\n yField,\n xFieldType,\n yFieldType\n } = encodingFieldInf;\n const uniqueField = xFieldType === FieldType.MEASURE ? yField : xField;\n\n return transformFactory(transformType)(schema, data.data, {\n groupBy: transform.groupBy,\n uniqueField,\n sort: transform.sort || 'none',\n offset: transform.offset,\n orderBy: transform.orderBy,\n value: yFieldType === FieldType.MEASURE ? yField : xField\n }, data.uids);\n};\n\nexport const getIndividualClassName = (d, i, data, context) => {\n const className = context.config().individualClassName;\n let classNameStr = '';\n if (className instanceof Function) {\n classNameStr = className(d, i, data, context);\n }\n return classNameStr;\n};\n\n/*\n * This method resolves the x, y, x0 and y0 values from the transformed data.\n * It also checks the type of transformed data for example, if it is a stacked data\n * then it fetches the y and y0 values from the stacked data.\n * @param {Array.} transformedData transformed data\n * @param {Object} fieldsConfig field definitions\n * @param {string} transformType type of transformed data - stack, group or identity.\n * @return {Array.} Normalized data\n*/\nexport const getNormalizedData = (transformedData, fieldsConfig, encodingFieldInf, transformType) => {\n const transformedDataArr = transformType === IDENTITY ? [transformedData] : transformedData;\n const {\n xFieldType,\n xFieldIndex,\n yFieldIndex,\n x0FieldIndex,\n y0FieldIndex\n } = encodingFieldInf;\n const fieldsLen = Object.keys(fieldsConfig).length;\n /**\n * Returns normalized data from transformed data. It recursively traverses through\n * the transformed data if there it is nested.\n */\n return transformedDataArr.map((data) => {\n const values = transformType === GROUP ? data.values : data;\n return values.map((d) => {\n let pointObj = {};\n let tuple;\n if (transformType === STACK) {\n tuple = d.data || [];\n let y;\n let y0;\n let x;\n let x0;\n if (d[1] >= d[0]) {\n y = x0 = d[1];\n x = y0 = d[0];\n } else {\n y = x0 = d[0];\n x = y0 = d[1];\n }\n\n pointObj = xFieldType === FieldType.MEASURE ? {\n x,\n x0,\n y: tuple[yFieldIndex],\n y0: tuple[yFieldIndex]\n } : {\n x: tuple[xFieldIndex],\n x0: tuple[xFieldIndex],\n y,\n y0\n };\n pointObj._data = tuple;\n pointObj._id = tuple[fieldsLen];\n } else {\n pointObj = {\n x: d[xFieldIndex],\n y: d[yFieldIndex],\n x0: d[x0FieldIndex],\n y0: d[y0FieldIndex]\n };\n pointObj._data = d;\n pointObj._id = d[fieldsLen];\n }\n return pointObj;\n });\n }).filter(d => d.length);\n};\n\nexport const calculateDomainFromData = (data, encodingFieldInf, transformType) => {\n const {\n xFieldSubType,\n yFieldSubType,\n xField,\n yField,\n x0Field,\n y0Field\n } = encodingFieldInf;\n const domains = {};\n const yEnc = ENCODING.Y;\n const xEnc = ENCODING.X;\n if (xField) {\n domains.x = getDomainFromData(data, x0Field || transformType === STACK ? [xEnc, ENCODING.X0] : [xEnc, xEnc],\n xFieldSubType);\n }\n if (yField) {\n domains.y = getDomainFromData(data, y0Field || transformType === STACK ? [ENCODING.Y0, ENCODING.Y] :\n [yEnc, yEnc], yFieldSubType);\n }\n\n return domains;\n};\n\nexport const attachDataToVoronoi = (voronoi, points) => {\n voronoi.data([].concat(...points).filter(d => d._id !== undefined).map((d) => {\n const point = d.update;\n return {\n x: point.x,\n y: point.y,\n data: d\n };\n }));\n};\n\n/**\n *\n *\n * @param {*} target\n * @param {*} styles\n * @param {*} remove\n */\nexport const updateStyle = (target, styles, remove) => {\n for (const key in styles) {\n if ({}.hasOwnProperty.call(styles, key)) {\n target.style(key, remove ? null : styles[key]);\n }\n }\n};\n\n/**\n *\n *\n * @param {*} mount\n * @param {*} context\n */\nexport const animateGroup = (mount, context) => {\n let groupTransition;\n let update;\n const { transition, groupAnimateStyle } = context;\n const { duration, effect, disabled } = transition;\n if (groupAnimateStyle) {\n setStyles(mount.node(), groupAnimateStyle.enter);\n update = groupAnimateStyle.update;\n if (!disabled) {\n groupTransition = mount.transition()\n .ease(easeFns[effect])\n .duration(duration)\n .on('end', function () {\n updateStyle(selectElement(this), update, true);\n });\n } else {\n groupTransition = mount;\n }\n updateStyle(groupTransition, update);\n }\n};\n\nexport const positionPoints = (context, points) => {\n const positioner = context.encodingTransform();\n if (positioner) {\n return positioner(points, context, { smartLabel: context._dependencies.smartLabel });\n }\n return points;\n};\n\n/**\n * Gets the width of each group. It gets the width from axis if it is available for\n * example when the scale is nominal else it calculates the width from the\n * range of the axis and number of data points.\n *\n * @param {SimpleAxis} axis instance of axis\n * @param {number} minDiff Minimum difference between data points\n * @return {number} width of each bar\n * @private\n*/\nexport const getGroupSpan = (axis, minDiff) => {\n let groupSpan;\n const width = axis.getUnitWidth();\n const scale = axis.scale();\n const range = scale.range();\n const domain = scale.domain();\n !width ? groupSpan = (Math.abs(range[1] - range[0]) / Math.abs(domain[1] - domain[0])) * minDiff :\n (groupSpan = width);\n\n return groupSpan;\n};\n\nexport const getPlotMeasurement = (context, dimensionalValues) => {\n const fieldInfo = context.encodingFieldsInf();\n const axes = context.axes();\n const transformType = context.transformType();\n const config = context.config();\n const bandScale = context._bandScale;\n\n return ['x', 'y'].map((type) => {\n let span = 0;\n let groupSpan = 0;\n let padding = 0;\n let offsetValues = [];\n if (fieldInfo[`${type}FieldType`] === FieldType.DIMENSION) {\n let actualGroupWidth;\n const isTemporal = fieldInfo[`${type}FieldSubType`] === DimensionSubtype.TEMPORAL;\n const timeDiff = isTemporal ? context.dataProps().timeDiffs[type] : 0;\n const axis = axes[type];\n const pad = config[`pad${type.toUpperCase()}`];\n const innerPadding = config.innerPadding;\n const keys = dimensionalValues;\n const scale = axis.scale();\n groupSpan = getGroupSpan(axis, timeDiff);\n const isAxisBandScale = axis.constructor.type() === BAND;\n const axisPadding = axis.config().padding;\n // If it is a grouped bar then the width of each bar in a grouping is retrieved from\n // a band scale. The band scale will have range equal to width of one group of bars and\n // the domain is set to series keys.\n if (transformType === 'group') {\n const groupPadding = isAxisBandScale ? 0 : axisPadding * groupSpan / 2;\n bandScale.range([groupPadding, groupSpan - groupPadding]).domain(keys).paddingInner(innerPadding);\n span = bandScale.bandwidth();\n actualGroupWidth = groupSpan - (isAxisBandScale ? 0 : axisPadding * groupSpan);\n offsetValues = keys.map(key => bandScale(key) - (isAxisBandScale ? 0 : (groupSpan / 2)));\n } else if (pad !== undefined) {\n let offset;\n if (isAxisBandScale) {\n const step = scale.step();\n offset = scale.padding() * step;\n span = scale.bandwidth() + offset;\n } else {\n span = groupSpan;\n }\n offsetValues = keys.map(() => (isAxisBandScale ? -(offset / 2) : -(span / 2)));\n } else {\n padding = isAxisBandScale ? 0 : axisPadding * groupSpan;\n span = groupSpan - padding;\n actualGroupWidth = span;\n offsetValues = keys.map(() => (isAxisBandScale ? 0 : -(span / 2)));\n }\n\n groupSpan = actualGroupWidth;\n padding = isAxisBandScale ? axisPadding * axis.scale().step() : axisPadding * groupSpan;\n }\n\n return {\n span,\n offsetValues,\n groupSpan,\n padding\n };\n });\n};\n\nexport const initializeGlobalState = (context) => {\n const store = context.store();\n const globalState = context.constructor.getState()[0];\n const namespace = context.metaInf().namespace;\n for (const prop in globalState) {\n store.append(`${STATE_NAMESPACES.LAYER_GLOBAL_NAMESPACE}.${prop}`, {\n [namespace]: null\n });\n }\n};\n\nexport const resolveInvalidTransformType = (context) => {\n const {\n xField,\n yField,\n xFieldType,\n yFieldType\n } = context.encodingFieldsInf();\n const groupByField = context.config().transform.groupBy;\n const fieldsConfig = context.data().getFieldsConfig();\n const groupByFieldMeasure = fieldsConfig[groupByField] && fieldsConfig[groupByField].def.type === FieldType.MEASURE;\n if (!xField || !yField || groupByFieldMeasure || !groupByField || xFieldType === FieldType.DIMENSION &&\n yFieldType === FieldType.DIMENSION) {\n return IDENTITY;\n }\n return null;\n};\n\nexport const getValidTransform = context => resolveInvalidTransformType(context) || context.config().transform.type;\n\nexport const getValidTransformForAggFn = (context) => {\n const resolvedInvalidTransformType = resolveInvalidTransformType(context);\n if (resolvedInvalidTransformType) {\n return resolvedInvalidTransformType;\n }\n\n const {\n xField,\n yField,\n xFieldType,\n yFieldType\n } = context.encodingFieldsInf();\n const groupByField = context.config().transform.groupBy;\n const isCustomTransformTypeProvided = !!getObjProp(context._customConfig, 'transform', 'type');\n let transformType = context.config().transform.type;\n\n if (!isCustomTransformTypeProvided && groupByField && xFieldType !== yFieldType) {\n const measureField = xFieldType === FieldType.MEASURE ? xField : yField;\n const { [measureField]: aggFn } = retrieveNearestGroupByReducers(context.data(), measureField);\n transformType = aggFn === AGG_FN_SUM ? STACK : GROUP;\n }\n\n return transformType;\n};\n\nexport const getMarkId = (source, schema) => source.filter((val, i) => schema[i] &&\n schema[i].type === FieldType.DIMENSION).join();\n","import { CommonProps, STATE_NAMESPACES } from 'muze-utils';\nimport { getEncodingFieldInf } from '../helpers';\nimport * as PROPS from '../enums/props';\n\nconst renderLayer = (context) => {\n const mount = context.mount();\n if (mount) {\n context.render(mount);\n context.dependencies().throwback.commit(CommonProps.ON_LAYER_DRAW, true);\n }\n};\n\nexport const listenerMap = (context, ns) => [\n {\n props: [`${ns.local}.${PROPS.DATA}`],\n listener: ([, data]) => {\n const config = context.config();\n const encodingValue = config.encoding;\n if (data && encodingValue) {\n const fieldsConfig = data.getFieldsConfig();\n const encodingFieldsInf = getEncodingFieldInf(encodingValue, fieldsConfig);\n context.encodingFieldsInf(encodingFieldsInf);\n context.resolveTransformType();\n context._transformedData = context.getTransformedData(data, config,\n context.transformType(), encodingFieldsInf);\n context._normalizedData = context.getNormalizedData(context._transformedData, fieldsConfig);\n const domain = context.calculateDomainFromData(context._normalizedData, context.encodingFieldsInf(),\n context.data().getFieldsConfig());\n context._domain = domain;\n !context._updateLock && context.domain(domain);\n }\n },\n type: 'registerImmediateListener'\n },\n {\n props: [`${ns.local}.${PROPS.CONFIG}`],\n listener: ([, config]) => {\n const calculateDomain = config.calculateDomain;\n const props = context.getRenderProps();\n const store = context.store();\n const namespaceInf = {\n namespace: `${STATE_NAMESPACES.LAYER_LOCAL_NAMESPACE}.${context.metaInf().namespace}`,\n key: 'renderListener'\n };\n store.unsubscribe(namespaceInf);\n if (calculateDomain === false) {\n props.push(`${ns.local}.${PROPS.DATA}`);\n }\n store.registerChangeListener(props,\n () => {\n renderLayer(context);\n }, false, namespaceInf);\n },\n type: 'registerImmediateListener'\n }\n];\n\n","export const DATA = 'data';\nexport const CONFIG = 'config';\nexport const MEASUREMENT = 'measurement';\nexport const DOMAIN = 'domain';\nexport const MOUNT = 'mount';\n","import { mergeRecursive } from 'muze-utils';\nimport * as PROPS from '../enums/props';\n\nexport const defaultOptions = {\n [PROPS.CONFIG]: {\n value: null,\n meta: {\n sanitization: (config, oldConfig, context) => {\n context._customConfig = config;\n const constructor = context.constructor;\n const newConf = mergeRecursive({}, constructor.defaultConfig());\n return constructor.defaultPolicy(newConf, config);\n }\n }\n },\n [PROPS.DATA]: {\n value: null,\n meta: {\n preset: (data, context) => {\n if (context._cacheEnabled) {\n context._cachedData.push(data);\n } else {\n context._cachedData = [data];\n }\n }\n }\n }\n // [PROPS.MOUNT]: {\n // value: null\n // },\n // [PROPS.AXES]: {\n // value: null\n // },\n // [PROPS.MEASUREMENT]: {\n // value: null\n // }\n};\n","import {\n getUniqueId,\n mergeRecursive,\n FieldType,\n selectElement,\n ReservedFields,\n registerListeners,\n transactor,\n DataModel,\n clone,\n generateGetterSetters,\n STATE_NAMESPACES\n} from 'muze-utils';\nimport { SimpleLayer } from '../simple-layer';\nimport * as PROPS from '../enums/props';\nimport { props } from './props';\nimport {\n transformData,\n calculateDomainFromData,\n getNormalizedData,\n applyInteractionStyle,\n initializeGlobalState,\n getValidTransform\n} from '../helpers';\nimport { listenerMap } from './listener-map';\nimport { defaultOptions } from './default-options';\n\n/**\n * An abstract class which gives definition of common layer functionality like\n * - transforming data for various modes. Supported modes: identity, group and stack.\n * - calculating data domain\n * - linking dependent layers\n * - merging policy of configuration\n * - interaction sideffect helpers\n * - retrieving dom elements from data using id\n * - retrieving the physical dimensions of marks\n * - disposing layer\n *\n * Every layer has to extend base layer and give concrete definition.\n * This layer does not have any default visual. A new layer has to define the logic of `render` for rendering the\n * visuals\n *\n * @public\n * @class\n * @module BaseLayer\n */\nexport default class BaseLayer extends SimpleLayer {\n\n /**\n * Creates a layer using a configuration and data.\n *\n * @public\n * @constructor\n * @param {DataModel} data Instance of DataModel to be used. This DataModel instance serves as the data for a layer.\n * @param {Object} axes Axes instances to be used for rendering the layer. Axes are used for mapping data from\n * value to px.\n * @param {SimpleAxis} axes.x X axis of the layer. Based on the type of variable it gets instance of BandAxis,\n * TimeAxis, ContinuousAxis\n * @param {SimpleAxis} axes.y X axis of the layer. Based on the type of variable it gets instance of BandAxis,\n * TimeAxis, ContinuousAxis\n * @param {ColorAxis} axes.color Axis for coloring a layer using color interpolators\n * @param {ShapeAxis} axes.shape Axis for providing a shape\n * @param {SizeAxis} axes.size Axis for determining size of a mark using size interpolator\n * @param {LayerConfig} config Configuration of the layer\n * @param {Object} dependencies Dependencies of the layer\n * @param {SmartLabel} dependencies.smartLabel Smartlabel singleton instance\n */\n constructor (data, axes, config, dependencies = {}) {\n super();\n\n generateGetterSetters(this, props);\n this.data(data);\n this.axes(axes);\n this.config(config);\n this.alias(this.constructor.formalName() + getUniqueId());\n this.dependencies(dependencies);\n this._points = [];\n this._cachedData = [];\n this._id = getUniqueId();\n this._measurement = {};\n this._animationDonePromises = [];\n this._customConfig = null;\n }\n\n static getState () {\n return [\n {\n domain: {}\n },\n {\n config: {},\n data: {}\n }\n ];\n }\n\n store (...params) {\n if (params.length) {\n this._store = params[0];\n const metaInf = this.metaInf();\n const localNs = `${STATE_NAMESPACES.LAYER_LOCAL_NAMESPACE}.${metaInf.namespace}`;\n initializeGlobalState(this);\n const store = this.store();\n store.append(`${STATE_NAMESPACES.LAYER_LOCAL_NAMESPACE}`, {\n [metaInf.namespace]: null\n });\n\n transactor(this, defaultOptions, store.model, {\n namespace: localNs\n });\n registerListeners(this, listenerMap, {\n local: localNs,\n global: STATE_NAMESPACES.LAYER_GLOBAL_NAMESPACE\n }, {\n unitRowIndex: metaInf.unitRowIndex,\n unitColIndex: metaInf.unitColIndex\n });\n return this;\n }\n return this._store;\n }\n\n domain (...dom) {\n const prop = `${STATE_NAMESPACES.LAYER_GLOBAL_NAMESPACE}.${PROPS.DOMAIN}.${this.metaInf().namespace}`;\n if (dom.length) {\n this.store().commit(prop, dom[0]);\n return this;\n }\n return this.store().get(prop);\n }\n\n /**\n * Creates a layer instance\n * @return {BaseLayer} Instance of a layer\n */\n static create (...params) {\n return new this(...params);\n }\n\n /**\n * Default configuration of the layer. This configuration gets merged to the user passed configuration using a\n * plolicy. Base layer only returns part of configuraion, any layer overridding base layer should return its own\n * configuration.\n *\n * @public\n * @static\n *\n * @return {Object} Default configuration\n */\n static defaultConfig () {\n return {\n transform: {\n type: 'identity'\n }\n };\n }\n\n /**\n * Policy defines how user config gets merged to default config. The default policy here does a deep copy\n * operation.\n * Any policy which does more than deep copying should define the policy as a static member.\n *\n * @static\n * @public\n *\n * @param {LayerConfig} conf Configuration with which the user config will be merged\n * @param {LayerConfig} userConf Configuration given by the user\n *\n * @return {LayerConfig} Merged layer configuration\n */\n static defaultPolicy (conf, userConf) {\n return mergeRecursive(conf, userConf);\n }\n\n /**\n * Determines a name for a layer. This name of the layer is used in the input data to refer to this layer.\n * ```\n * .layers([\n * mark: 'bar',\n * encoding: { ... }\n * ])\n * ```\n *\n * @static\n * @public\n *\n * @return {string} name of layer\n */\n static formalName () {\n return 'base';\n }\n\n encodingFieldsInf (...fieldsInf) {\n if (fieldsInf.length) {\n this._encodingFieldsInf = fieldsInf[0];\n return this;\n }\n return this._encodingFieldsInf;\n }\n\n encodingTransform (...encodingTransform) {\n if (encodingTransform.length) {\n this._encodingTransform = encodingTransform[0];\n return this;\n }\n return this._encodingTransform;\n }\n\n /**\n * Provides a alias for a layer. Like it's possible to have same layer (like bar) multiple times, but among multiple\n * layers of same type if one layer has to be referred, alias is used. If no alias is given then `formalName` is set\n * as the alias name.\n *\n *\n * If used as setter\n * @param {string} alias Name of the alias\n * @return {BaseLayer} Instance of current base layer\n *\n * If used as getter\n * @return {string} Alias of the current layer\n *\n * @public\n */\n alias (...params) {\n if (params.length) {\n this._alias = params[0];\n return this;\n }\n return this._alias || this.constructor.formalName();\n }\n\n dependencies (...params) {\n if (params.length) {\n this._dependencies = params[0];\n return this;\n }\n return this._dependencies;\n }\n\n enableCaching () {\n this._cacheEnabled = true;\n return this;\n }\n\n clearCaching () {\n this._cacheEnabled = false;\n return this.data(this._cachedData[0]);\n }\n\n /**\n * Serialize the schema. Merge config is used for serialization.\n *\n * @public\n *\n * @return {LayerConfig} Serialized schema\n */\n serialize () {\n return this.config();\n }\n\n /**\n * Returns the unique identifier of this layer. Id is auto generated during the creation proceess of a schema.\n *\n * @public\n *\n * @return {string} id of the layer\n */\n id () {\n return this._id;\n }\n\n /**\n * Returns the transformed data based on given transform type.\n * It first gets the transform method from transform factory based on type of transform. It then calls the\n * transform method with the data and passes the configuration parameters of transform such as\n * groupBy, value field, etc.\n *\n * @param {DataModel} dataModel Instance of DataModel\n * @param {Object} config Configuration for transforming data\n * @return {Array.} Transformed data.\n */\n getTransformedData (dataModel, config, transformType, encodingFieldsInf) {\n return transformData(dataModel, config, transformType, encodingFieldsInf);\n }\n\n /**\n * Calculates the domain from the data.\n * It checks the type of field and calculates the domain based on that. For example, if it\n * is a quantitative or temporal field, then it calculates the min and max from the data or\n * if it is a categorical field then it gets all the values from the data of that field.\n * @param {Array} data DataArray\n * @param {Object} fieldsConfig Configuration of fields\n * @return {Array} Domain values array.\n */\n calculateDomainFromData (data) {\n let domains = {};\n const isEmpty = this.data().isEmpty();\n\n if (!isEmpty) {\n domains = calculateDomainFromData(data, this.encodingFieldsInf(), this.transformType());\n }\n return domains;\n }\n\n static shouldDrawAnchors () {\n return false;\n }\n\n /**\n * Returns the domain for the axis.\n *\n * @param {string} encodingType type of encoding x, y, etc.\n * @return {Object} Axis domains\n */\n getDataDomain (encodingType) {\n const domains = this.store()\n .get(`${STATE_NAMESPACES.LAYER_GLOBAL_NAMESPACE}.${PROPS.DOMAIN}.${this.metaInf().namespace}`);\n return encodingType !== undefined ? domains[encodingType] || [] : domains;\n }\n\n /**\n * Normalizes the transformed data and returns it.\n *\n * @param {string} encodingType type of encoding x, y, etc.\n * @return {Object} Axis domains\n */\n getNormalizedData (transformedData, fieldsConfig) {\n return getNormalizedData(transformedData, fieldsConfig, this.encodingFieldsInf(), this.transformType());\n }\n\n /**\n * Gets the nearest point closest to the given x and y coordinate. If no nearest point is found, then it returns\n * null.\n *\n * @public\n *\n * @param {number} x X Coordinate.\n * @param {number} y Y Coordinate.\n *\n * @return {Object} Information of the nearest point.\n * ```\n * {\n * // id property contains the field names and their corresponding values in a 2d array. This is the data\n * // associated with the nearest point.\n * id: // Example data: [['Origin'], ['USA']],\n * dimensions: // Physical dimensions of the point.\n * layerId: // Id of the layer instance.\n * }\n * ```\n */\n getNearestPoint () {\n return null;\n }\n\n applyInteractionStyle (interactionType, selectionSet, apply, styles) {\n const interactionConfig = this.config().interaction || {};\n\n let interactionStyles = interactionConfig[interactionType];\n interactionStyles = styles || interactionStyles;\n if (interactionStyles) {\n applyInteractionStyle(this, selectionSet, interactionStyles, {\n apply,\n interactionType\n });\n }\n }\n\n disableUpdate () {\n this._updateLock = true;\n return this;\n }\n\n enableUpdate () {\n this._updateLock = false;\n return this;\n }\n\n resolveTransformType () {\n this._transformType = getValidTransform(this);\n }\n\n transformType () {\n return this._transformType;\n }\n\n /**\n * Renders the layer\n * @return {BaseLayer} Instance of the layer.\n */\n render () {\n return this;\n }\n\n /**\n *\n *\n *\n * @memberof BaseLayer\n */\n elemType () {\n return 'g';\n }\n\n /**\n * Disposes the entire layer.\n *\n * @return {BaseLayer} Instance of layer.\n */\n remove () {\n this.store().unsubscribe({\n namespace: `${STATE_NAMESPACES.LAYER_LOCAL_NAMESPACE}.${this.metaInf().namespace}`\n });\n selectElement(this.mount()).remove();\n return this;\n }\n\n /**\n * Stores point in an object with key as the categorical value or temporal value\n *\n * @param {string} key categorical value or temporal value\n * @param {Object} data Information of the data point\n * @return {BarLayer} Instance of bar layer\n */\n cachePoint (key, data) {\n if (key === null) {\n return this;\n }\n const pointMap = this._pointMap;\n !pointMap[key] && (pointMap[key] = []);\n pointMap[key].push(data);\n return this;\n }\n\n /**\n *\n *\n * @param {*} dataProps\n *\n * @memberof BaseLayer\n */\n dataProps (...dataProps) {\n if (dataProps.length) {\n this._dataProps = dataProps[0];\n return this;\n }\n return this._dataProps;\n }\n\n /**\n *\n *\n * @param {*} data\n * @param {*} id\n *\n * @memberof BaseLayer\n */\n getIdentifiersFromData (data) {\n const schema = this.data().getData().schema;\n const fieldsConfig = this.data().getFieldsConfig();\n const identifiers = [[], []];\n const {\n xFieldType,\n yFieldType,\n xField,\n yField\n } = this.encodingFieldsInf();\n\n const [xMeasure, yMeasure] = [xFieldType, yFieldType].map(type => type === FieldType.MEASURE);\n schema.forEach((d, i) => {\n const name = d.name;\n if (fieldsConfig[name].def.type === FieldType.DIMENSION) {\n identifiers[0].push(name);\n identifiers[1].push(data[i]);\n }\n });\n\n if (xMeasure && yMeasure) {\n const xMeasureIndex = fieldsConfig[xField].index;\n const yMeasureIndex = fieldsConfig[yField].index;\n identifiers[0].push(...[xField, yField]);\n identifiers[1].push(...[data[xMeasureIndex], data[yMeasureIndex]]);\n }\n return identifiers;\n }\n\n getPlotSpan () {\n return {\n x: 0,\n y: 0\n };\n }\n\n getPlotPadding () {\n return {\n x: 0,\n y: 0\n };\n }\n\n /**\n * Returns the information of the marks corresponding to the supplied identifiers. Identifiers are a set of field\n * names and their corresponding values in an array. It can also be an instance of datamodel.\n *\n * For example,\n * ```\n * const identifiers = [\n * ['Origin', 'Cylinders'],\n * ['USA', '8']\n * ];\n * const points = barLayer.getPointsFromIdentifiers(identifiers);\n * ```\n * @public\n * @param {Array|DataModel} identifiers Identifiers of the marks.\n * @param {Object} config Optional configuration which describes how to get the information.\n * @param {boolean} config.getAllAttrs If true, then returns all the information of the points, else returns only\n * the positions of the points.\n * @param {boolean} config.getBBox If true, then returns the bounding box of all the marks.\n *\n * @return {Array} Array of points contains\n */\n getPointsFromIdentifiers (identifiers, config = {}) {\n const getAllAttrs = config.getAllAttrs;\n const getBBox = config.getBBox;\n if (!this.data()) {\n return [];\n }\n let fieldNames;\n let values;\n if (identifiers instanceof DataModel) {\n const dataObj = identifiers.getData();\n fieldNames = dataObj.schema.map(d => d.name);\n values = dataObj.data;\n } else {\n fieldNames = identifiers[0];\n values = identifiers.slice(1, identifiers.length);\n }\n\n const points = this._points;\n const fieldsConfig = this.data().getFieldsConfig();\n\n const filteredPoints = [].concat(...points).filter((point) => {\n const { _data, _id } = point;\n\n return fieldNames.every((field, idx) => {\n if (field in fieldsConfig && fieldsConfig[field].def.type === FieldType.DIMENSION) {\n return values.findIndex(d => d[idx] === _data[fieldsConfig[field].index]) !== -1;\n } else if (field === ReservedFields.ROW_ID) {\n return values.findIndex(d => d[idx] === _id) !== -1;\n } return true;\n });\n });\n return getAllAttrs ? filteredPoints : filteredPoints.map((d) => {\n const obj = clone(d);\n if (getBBox) {\n const update = obj.update || obj;\n if (obj.size !== undefined) {\n const sizeVal = Math.sqrt(obj.size / Math.PI) * 2;\n update.width = sizeVal;\n update.height = sizeVal;\n update.x -= sizeVal / 2;\n update.y -= sizeVal / 2;\n } else {\n if (update.width === undefined) {\n update.width = 2;\n }\n if (update.height === undefined) {\n update.height = 2;\n }\n }\n }\n\n return obj.update || obj;\n }).sort((a, b) => a.y - b.y);\n }\n\n getTransformedDataFromIdentifiers (identifiers) {\n const { data: identifierData, schema: identifierSchema } = identifiers.getData();\n const normalizedData = this._normalizedData;\n const fieldsConfig = this.data().getFieldsConfig();\n const {\n yField,\n xField,\n yFieldType,\n xFieldType\n } = this.encodingFieldsInf();\n let measureIndex;\n let enc;\n if (xFieldType === FieldType.MEASURE) {\n measureIndex = fieldsConfig[xField].index;\n enc = 'x';\n } else if (yFieldType === FieldType.MEASURE) {\n measureIndex = fieldsConfig[yField].index;\n enc = 'y';\n }\n\n const transformedData = [];\n normalizedData.forEach((dataArr) => {\n dataArr.forEach((dataObj) => {\n const tupleArr = dataObj._data;\n const exist = identifierSchema.every((obj, i) =>\n identifierData.findIndex(d => tupleArr[fieldsConfig[obj.name].index] === d[i]) !== -1);\n if (exist) {\n const transformedVal = dataObj[enc];\n const row = dataObj._data;\n const tuple = {};\n for (const key in fieldsConfig) {\n const index = fieldsConfig[key].index;\n tuple[key] = row[index];\n if (index === measureIndex) {\n tuple[key] = transformedVal;\n }\n }\n transformedData.push(tuple);\n }\n });\n });\n\n return [transformedData, this.data().getData().schema];\n }\n\n /**\n * Returns the dom elements associated with the supplied set of row ids.\n * Each element in the layer is mapped with a row of the datamodel. When given an array of row ids, it returns all\n * the elements which is mapped with those row ids.\n *\n * @public\n * @param {Array} set Array of row ids\n *\n * @return {Selection} D3 Selection of dom elements.\n */\n getPlotElementsFromSet (set) {\n return selectElement(this.mount()).selectAll(this.elemType()).filter(data =>\n (data ? set.indexOf(data._id) !== -1 : false));\n }\n\n /**\n * Notifies when all animations/transitions of the layer are completed.\n *\n * @public\n * @return {Promise} Returns a promise to notify the animation completion.\n */\n animationDone () {\n return Promise.all(this._animationDonePromises);\n }\n\n registerAnimationDoneHook () {\n let resolveFn;\n const promise = new Promise((resolve) => {\n resolveFn = resolve;\n });\n this._animationDonePromises.push(promise);\n\n return () => {\n resolveFn();\n };\n }\n\n getRenderProps () {\n const metaInf = this.metaInf();\n return [`${STATE_NAMESPACES.GROUP_GLOBAL_NAMESPACE}.domain.y.${metaInf.unitRowIndex}0`,\n `${STATE_NAMESPACES.GROUP_GLOBAL_NAMESPACE}.domain.x.${metaInf.unitColIndex}0`];\n }\n}\n","import {\n selectElement,\n makeElement,\n pathInterpolators,\n Symbols\n} from 'muze-utils';\nimport { updateStyle } from '../../helpers';\n\nconst line = Symbols.line;\n\nconst filterFn = (d) => {\n const { update } = d;\n return update.y !== null && update.x !== null;\n};\n\n/**\n * Draws a line from the points\n * Generates a svg path string\n * @param {Object} params Contains container, points and interpolate attribute.\n */\nexport const drawLine = (context) => {\n let filteredPoints;\n const { layer, container, points, interpolate, connectNullData, className, style, transition } = context;\n const mount = selectElement(container).attr('class', className);\n const curveInterpolatorFn = pathInterpolators[interpolate];\n const linepath = line()\n .curve(curveInterpolatorFn)\n .x(d => d.update.x)\n .y(d => d.update.y)\n .defined(filterFn);\n\n filteredPoints = points;\n if (connectNullData) {\n filteredPoints = points.filter(filterFn);\n }\n\n updateStyle(mount, style);\n let element = makeElement(mount, 'path', [1]);\n element.classed(points[0].className, true);\n if (!transition.disabled) {\n element = element.transition()\n .duration(transition.duration)\n .on('end', layer.registerAnimationDoneHook());\n }\n element.attr('d', linepath(filteredPoints))\n .style('fill-opacity', 0);\n return element;\n};\n","import { CLASSPREFIX } from '../../enums/constants';\n\nexport const defaultConfig = {\n classPrefix: CLASSPREFIX,\n defClassName: 'layer-line',\n className: '',\n interpolate: 'linear',\n transform: {\n type: 'group'\n },\n interaction: {\n highlight: [{\n type: 'stroke',\n intensity: [0, 0, -15, 0]\n }],\n fade: [{\n type: 'stroke',\n intensity: [0, 0, +15, 0]\n }],\n focus: [{\n type: 'stroke',\n intensity: [0, 0, +15, 0]\n }]\n },\n nearestPointThreshold: 20,\n encoding: {\n color: {},\n x: {},\n y: {},\n strokeOpacity: {\n value: 1\n }\n },\n transition: {\n effect: 'cubic',\n duration: 1000\n },\n connectNullData: false\n};\n\n","import {\n Voronoi,\n getQualifiedClassName,\n selectElement,\n makeElement,\n FieldType,\n getObjProp,\n InvalidAwareTypes\n} from 'muze-utils';\nimport { BaseLayer } from '../../base-layer';\nimport { drawLine } from './renderer';\nimport { defaultConfig } from './default-config';\nimport { ENCODING } from '../../enums/constants';\nimport {\n attachDataToVoronoi,\n animateGroup,\n getLayerColor,\n positionPoints,\n getIndividualClassName\n} from '../../helpers';\n\nimport './styles.scss';\n\n/**\n * This layer is used to render straight or smoothed line paths. The mark type of this layer is ```line```.\n *\n * @public\n *\n * @class\n * @module LineLayer\n * @extends BaseLayer\n */\nexport default class LineLayer extends BaseLayer {\n\n /**\n * Creates an instance of LineLayer.\n * @param {*} args\n * @memberof LineLayer\n */\n constructor (...args) {\n super(...args);\n this._voronoi = new Voronoi();\n }\n\n /**\n *\n *\n * @static\n *\n * @memberof LineLayer\n */\n static formalName () {\n return 'line';\n }\n\n /**\n *\n *\n *\n * @memberof LineLayer\n */\n elemType () {\n return 'path';\n }\n\n /**\n * Default configuration of line layer\n * @return {Object} Default configuration of layer\n */\n static defaultConfig () {\n return defaultConfig;\n }\n\n /**\n *\n *\n * @static\n * @param {*} conf\n * @param {*} userConf\n *\n * @memberof LineLayer\n */\n static defaultPolicy (conf, userConf) {\n const config = BaseLayer.defaultPolicy(conf, userConf);\n const encoding = config.encoding;\n const transform = config.transform;\n const colorField = encoding.color && encoding.color.field;\n\n if (colorField && !transform.groupBy) {\n transform.groupBy = colorField;\n }\n return config;\n }\n\n /**\n * Returns the draw method for line\n * @return {Function} Draw method of line layer\n */\n getDrawFn () {\n return drawLine;\n }\n\n static shouldDrawAnchors () {\n return true;\n }\n\n /**\n * Generates the x and y positions for each point\n * @param {Array} data Data Array\n * @param {Object} encoding Visual Encodings of the layer\n * @param {Object} axes Contains the axis\n * @param {number} seriesIndex index of series\n * @return {Array} Array of points\n */\n translatePoints (data, encodingFieldsInf, axes) {\n let points = [];\n const xAxis = axes.x;\n const yAxis = axes.y;\n const colorAxis = axes.color;\n const encoding = this.config().encoding;\n const { xFieldType, yFieldType } = encodingFieldsInf;\n const isXDim = xFieldType === FieldType.DIMENSION;\n const isYDim = yFieldType === FieldType.DIMENSION;\n const key = isXDim ? ENCODING.X : (isYDim ? ENCODING.Y : null);\n const colorEncoding = encoding.color;\n const colorField = colorEncoding.field;\n const fieldsConfig = this.data().getFieldsConfig();\n const colorFieldIndex = colorField && fieldsConfig[colorField].index;\n const style = {};\n const meta = {};\n\n points = data.map((d, i) => {\n const xPx = xAxis.getScaleValue(d.x) + xAxis.getUnitWidth() / 2;\n const yPx = yAxis.getScaleValue(d.y) + yAxis.getUnitWidth() / 2;\n const { color, rawColor } = getLayerColor({ datum: d, index: i }, {\n colorEncoding, colorAxis, colorFieldIndex });\n\n style.stroke = color;\n style['fill-opacity'] = 0;\n meta.stateColor = {};\n meta.originalColor = rawColor;\n meta.colorTransform = {};\n\n const point = {\n enter: {},\n update: {\n x: d.x instanceof InvalidAwareTypes ? null : xPx,\n y: d.y instanceof InvalidAwareTypes ? null : yPx\n },\n style,\n _data: d._data,\n _id: d._id,\n rowId: d._id,\n source: d._data,\n meta\n };\n point.className = getIndividualClassName(d, i, data, this);\n this.cachePoint(d[key], point);\n return point;\n });\n points = positionPoints(this, points);\n return points;\n }\n\n /**\n * Renders the line plot\n * @param {SVGElement} container svg element\n * @return {LineLayer} instance of line layer\n */\n render (container) {\n let points;\n let seriesClassName;\n let style;\n\n const config = this.config();\n const {\n encoding,\n interpolate,\n className,\n defClassName,\n transition\n } = config;\n const normalizedData = this._normalizedData;\n const transformedData = this._transformedData;\n const fieldsConfig = this.data().getFieldsConfig();\n const axes = this.axes();\n const keys = transformedData.map(d => d.key);\n const qualifiedClassName = getQualifiedClassName(defClassName, this.id(), config.classPrefix);\n const containerSelection = selectElement(container);\n const colorField = encoding.color.field;\n const colorFieldIndex = fieldsConfig[colorField] && fieldsConfig[colorField].index;\n\n this._points = [];\n this._pointMap = {};\n containerSelection.classed(qualifiedClassName.join(' '), true);\n containerSelection.classed(className, true);\n makeElement(container, 'g', normalizedData, null, {\n enter: (group) => {\n animateGroup(group, {\n transition,\n groupAnimateStyle: {\n enter: {\n 'stroke-opacity': 0,\n 'fill-opacity': this.getPathStyle()['fill-opacity']\n },\n update: {\n 'stroke-opacity': encoding.strokeOpacity.value\n }\n }\n });\n },\n update: (group, dataArr, i) => {\n points = this.translatePoints(dataArr, this.encodingFieldsInf(), axes, i);\n this._points.push(points);\n seriesClassName = `${qualifiedClassName[0]}-${keys[i] || i}`.toLowerCase();\n\n let color;\n const colorValFn = encoding.color.value;\n const colorVal = points.find(d => d._data[colorFieldIndex] !== null &&\n d._data[colorFieldIndex] !== undefined);\n\n if (colorValFn) {\n color = colorValFn(dataArr, i, normalizedData);\n } else {\n color = axes.color.getColor(colorVal && colorVal._data[colorFieldIndex]);\n }\n\n style = this.getPathStyle(color);\n this.getDrawFn()({\n layer: this,\n container: group.node(),\n interpolate,\n points,\n className: seriesClassName,\n transition,\n style: style || {},\n connectNullData: config.connectNullData\n });\n }\n }, d => d[0]._data[colorFieldIndex] || d[0]._id);\n\n attachDataToVoronoi(this._voronoi, this._points);\n return this;\n }\n\n /**\n * Get the css styles need to be applied on the line path\n * @param {string} color Color value\n * @return {Object} Path styles\n */\n getPathStyle (color) {\n return {\n stroke: color,\n 'fill-opacity': '0'\n };\n }\n\n /**\n * Gets the nearest point closest to the given position\n * @param {number} x x position\n * @param {number} y y position\n * @return {Object} Nearest point information\n */\n getNearestPoint (x, y, config) {\n let searchRadius = config.searchRadius;\n const data = this.data();\n\n if (!data || (data && data.isEmpty())) {\n return null;\n }\n\n searchRadius = searchRadius !== undefined ? searchRadius : this.config().nearestPointThreshold;\n const point = this._voronoi.find(x, y, searchRadius);\n const dimensions = getObjProp(point, 'data', 'data', 'update');\n\n if (point) {\n const { _data, _id } = point.data.data;\n const identifiers = this.getIdentifiersFromData(_data, _id);\n return {\n id: identifiers,\n dimensions: [{\n x: dimensions.x,\n y: dimensions.y,\n width: 2,\n height: 2\n }],\n layerId: this.id()\n };\n }\n return null;\n }\n}\n","import {\n easeFns,\n selectElement,\n pathInterpolators,\n Symbols\n} from 'muze-utils';\n\nconst area = Symbols.area;\n/**\n * Draws a line from the points\n * Generates a svg path string\n * @param {Object} params Contains container, points and interpolate attribute.\n */\nconst /* istanbul ignore next */ drawArea = (params) => {\n let filteredPoints;\n const { layer, container, points, style, transition, className, connectNullData, interpolate } = params;\n\n const { effect: easeEffect, duration } = transition;\n const mount = selectElement(container);\n const curveInterpolatorFn = pathInterpolators[interpolate];\n const selection = mount.selectAll('path').data([params.points]);\n const [enterAreaPath, updateAreaPath] = ['enter', 'update'].map(e => area().curve(curveInterpolatorFn)\n .x(d => d[e].x)\n .y1(d => d[e].y)\n .y0(d => d[e].y0)\n .defined(d => d[e].y !== null\n ));\n\n filteredPoints = points;\n mount.attr('class', className);\n if (connectNullData) {\n filteredPoints = points.filter(d => d.update.y !== null);\n }\n const selectionEnter = selection.enter().append('path').attr('d', enterAreaPath(filteredPoints));\n selection.merge(selectionEnter).transition().ease(easeFns[easeEffect])\n .duration(duration)\n .on('end', layer.registerAnimationDoneHook())\n .attr('d', updateAreaPath(filteredPoints))\n .each(function (d) {\n const element = selectElement(this);\n\n element.classed(d[0].className, true);\n Object.keys(style).forEach(key => element.style(key, style[key]));\n });\n};\n\nexport default drawArea;\n","import { FieldType, InvalidAwareTypes } from 'muze-utils';\nimport { defaultConfig } from './default-config';\nimport { LineLayer } from '../line';\nimport drawArea from './renderer';\nimport './styles.scss';\nimport { STACK, ENCODING } from '../../enums/constants';\nimport {\n getAxesScales,\n positionPoints,\n getLayerColor,\n getIndividualClassName,\n getValidTransformForAggFn\n} from '../../helpers';\n\n/**\n * Area layer renders a closed path. The mark type of this layer is ```area```. This layer can be used\n * to create stacked or multi-series areas and vertical range area plots by using the encoding properties.\n *\n * To create this layer using layer configuration from canvas,\n * ```\n * canvas.layers([{\n * mark: 'area',\n * transform: {\n * type: 'stack' // Produces a stacked area.\n * }\n * }]);\n * ```\n *\n * @public\n *\n * @class\n * @module AreaLayer\n * @extends LineLayer\n */\nexport default class AreaLayer extends LineLayer {\n /** oation of line layer\n * @return {Object} Default configuration of layer\n */\n static defaultConfig () {\n return defaultConfig;\n }\n\n /**\n *\n *\n * @static\n *\n * @memberof AreaLayer\n */\n static formalName () {\n return 'area';\n }\n\n /**\n * Calculates the domain from data. It calls its parent class's method which is line layer\n * to get the domain and overwrites the domain according to its need.\n * @return {Array} Domain values\n */\n calculateDomainFromData (data, encodingFieldsInf, fieldsConfig) {\n const domains = super.calculateDomainFromData(data, fieldsConfig);\n [ENCODING.X, ENCODING.Y].forEach((type) => {\n const { [`${type}FieldType`]: fieldType } = encodingFieldsInf;\n if (fieldType === FieldType.MEASURE && domains[type] !== undefined) {\n domains[type][0] = Math.min(domains[type][0], 0);\n }\n });\n return domains;\n }\n\n /**\n * Returns the drawing method of this layer\n * @return {Function} Draw method\n */\n getDrawFn () {\n return drawArea;\n }\n\n /**\n * Generates the x and y positions for each point\n * @param {Array} data Data Array\n * @param {Object} encoding Visual Encodings of the layer\n * @param {Object} axes Contains the axis\n * @return {Array} Array of points\n */\n translatePoints (data, encodingFieldsInf, axes) {\n let points = [];\n const transformType = this.transformType();\n const colorAxis = axes.color;\n const config = this.config();\n const encoding = config.encoding;\n const colorEncoding = encoding.color;\n const colorField = colorEncoding.field;\n const fieldsConfig = this.data().getFieldsConfig();\n const colorFieldIndex = colorField && fieldsConfig[colorField].index;\n const { xField, yField, y0Field } = encodingFieldsInf;\n const {\n xAxis,\n yAxis\n } = getAxesScales(axes);\n const classNameFn = config.individualClassName;\n const isXDim = fieldsConfig[xField] && fieldsConfig[xField].def.type === FieldType.DIMENSION;\n const isYDim = fieldsConfig[yField] && fieldsConfig[yField].def.type === FieldType.DIMENSION;\n const key = isXDim ? 'x' : (isYDim ? 'y' : null);\n points = data.map((d, i) => {\n const xPx = xAxis.getScaleValue(d.x) + xAxis.getUnitWidth() / 2;\n const yPx = yAxis.getScaleValue(d.y);\n const y0Px = (y0Field || transformType === STACK) ? yAxis.getScaleValue(d.y0) : yAxis.getScaleValue(0);\n const { color, rawColor } = getLayerColor({ datum: d, index: i }, {\n colorEncoding, colorAxis, colorFieldIndex });\n const style = {};\n const meta = {};\n style.fill = color;\n // style['fill-opacity'] = 0;\n meta.stateColor = {};\n meta.originalColor = rawColor;\n meta.colorTransform = {};\n const invalidY = d.y instanceof InvalidAwareTypes;\n const invalidY0 = d.y0 instanceof InvalidAwareTypes;\n const point = {\n enter: {\n x: xPx,\n y: invalidY ? null : yAxis.getScaleValue(0),\n y0: invalidY0 ? null : yAxis.getScaleValue(0)\n },\n update: {\n x: xPx,\n y: invalidY ? null : yPx,\n y0: invalidY0 ? null : y0Px\n },\n _id: d._id,\n _data: d._data,\n source: d._data,\n rowId: d._id,\n className: classNameFn ? classNameFn(d, i, data, this) : '',\n style,\n meta\n };\n point.className = getIndividualClassName(d, i, data, this);\n this.cachePoint(d[key], point);\n return point;\n });\n points = positionPoints(this, points);\n return points;\n }\n\n resolveTransformType () {\n this._transformType = getValidTransformForAggFn(this);\n }\n\n /**\n * Get the css styles need to be applied on the line path\n * @param {string} color Color value\n * @return {Object} Path styles\n */\n getPathStyle (color) {\n return {\n fill: color\n };\n }\n}\n\n","import { CLASSPREFIX } from '../../enums/constants';\n\nexport const defaultConfig = {\n classPrefix: CLASSPREFIX,\n defClassName: 'layer-arc',\n padding: { top: 1, bottom: 1, left: 1, right: 1 },\n className: '',\n minOuterRadius: 10,\n interaction: {\n highlight: [{\n type: 'fill',\n intensity: [0, 0, -15, 0]\n }],\n fade: [{\n type: 'fill',\n intensity: [0, 0, +15, 0]\n }],\n focus: [{\n type: 'fill',\n intensity: [0, 0, +15, 0]\n }]\n },\n height: 100,\n width: 100,\n sort: '',\n cornerRadius: 0,\n padAngle: 0,\n padRadius: 0,\n startAngle: 0,\n endAngle: 360,\n colors: ['#F44336', 'blue', 'green', 'yellow', 'orange', 'purple'],\n transform: {\n type: 'identity'\n },\n encoding: {\n 'stroke-width': {\n value: '2px'\n },\n 'stroke-linejoin': {\n value: 'round'\n },\n angle: {\n value: '1'\n },\n radius: {\n value: '1'\n },\n opacity: {\n value: '1'\n },\n color: {\n value: '1'\n },\n shape: {\n value: '1'\n },\n size: {\n value: '1'\n }\n },\n innerRadiusFixer: 10,\n transition: {\n effect: 'cubic',\n duration: 500\n },\n states: {\n highlight: {\n className: `${CLASSPREFIX}-layer-arc-highlight`\n },\n fadeout: {\n className: `${CLASSPREFIX}-layer-arc-fadeout`\n },\n selected: {\n className: `${CLASSPREFIX}-layer-arc-selected`\n }\n }\n};\n\n","import {\n makeElement,\n selectElement,\n getQualifiedClassName,\n isSimpleObject,\n getDomainFromData,\n Symbols,\n FieldType,\n ReservedFields,\n STATE_NAMESPACES\n} from 'muze-utils';\nimport { defaultConfig } from './default-config';\nimport { BaseLayer } from '../../base-layer';\nimport { ASCENDING, OUTER_RADIUS_VALUE } from '../../enums/constants';\nimport { getIndividualClassName } from '../../helpers';\nimport { getRangeValue, getRadiusRange, tweenPie, tweenExitPie, getFieldIndices, getPreviousPoint } from './arc-helper';\nimport './styles.scss';\n\nconst pie = Symbols.pie;\nconst arc = Symbols.arc;\n\n/**\n * Arc Layer creates a plot with polar coordinates.\n *\n * @public\n *\n * @class\n * @module ArcLayer\n * @extends BaseLayer\n */\nexport default class ArcLayer extends BaseLayer {\n\n constructor (data, axes, config, dependencies) {\n super(data, axes, config, dependencies);\n this._prevPieData = {};\n }\n\n /**\n * returns the default configuration of the layer\n *\n * @static\n * @return {Object} Default configuration for arc layer\n * @memberof ArcLayer\n */\n static defaultConfig () {\n return defaultConfig;\n }\n\n /**\n *\n *\n * @static\n *\n * @memberof ArcLayer\n */\n static formalName () {\n return 'arc';\n }\n\n /**\n *\n *\n *\n * @memberof ArcLayer\n */\n elemType () {\n return 'path';\n }\n\n /**\n * Transforms data in the appropriate data structure to be consumed by the layer for rendering\n *\n * @param {Object} data data model associated with the layer\n * @param {Object} config configuration of the layer that contains encoding and other parameters\n * @return {Object} Transformed pie data\n * @memberof ArcLayer\n */\n getTransformedData (dataModel, config) {\n let pieData = [];\n const pieIndex = {};\n const {\n startAngle,\n endAngle,\n encoding,\n sort,\n minOuterRadius\n } = config;\n const prevData = this._transformedData || [];\n const fieldsConfig = this.data().getFieldsConfig();\n const {\n angleIndex,\n sizeIndex,\n radiusIndex,\n colorIndex\n } = getFieldIndices(encoding, fieldsConfig);\n const dataVal = dataModel.getData();\n const data = dataVal.data;\n const uids = dataVal.uids;\n\n this._prevPieData = {};\n\n prevData.forEach((e, index) => {\n this._prevPieData[e.uid] = [e, index];\n pieIndex[e.index] = e;\n });\n // Creating pie data using angle field provided. If the angle field is a dimension,\n // all the angles will be equal(360/number of dimensions)\n\n pieData = pie()\n .startAngle((startAngle / 180) * Math.PI)\n .endAngle(Math.PI * endAngle / 180)\n .value(d => d[angleIndex] || 1)\n .sortValues(null);\n\n sort.length && radiusIndex && pieData.sort((a, b) => {\n if (sort === ASCENDING) {\n return a[radiusIndex] - b[radiusIndex];\n } return b[radiusIndex] - a[radiusIndex];\n });\n const sizeVal = data.reduce((acc, d) => acc + (d[sizeIndex] || 0), 1);\n\n // Adding the radius field values to each data point in pie data\n pieData = pieData(data).map((d, i) => {\n d.outerRadiusValue = data[i][radiusIndex] || minOuterRadius;\n d.innerRadius = config.innerRadius;\n d.colorVal = data[i][colorIndex];\n d.angleVal = data[i][angleIndex];\n d.sizeVal = sizeVal;\n d.uid = uids[i];\n d.rowId = d.uid;\n d.source = data[i];\n d._previousInfo = this._prevPieData[d.uid] ? this._prevPieData[d.uid][0] :\n getPreviousPoint(pieIndex, d.index, config);\n return d;\n });\n return pieData;\n }\n\n /**\n * Returns normalized data after transformation (it is the same in the case of pie layer)\n *\n * @param {Object} data transformed data\n * @return {Object} normalized data\n * @memberof ArcLayer\n */\n getNormalizedData (data) {\n return data;\n }\n\n /**\n *\n *\n * @param {Object} data\n * @return {}\n * @memberof ArcLayer\n */\n calculateDomainFromData (data) {\n const domainKey = OUTER_RADIUS_VALUE;\n return {\n radius: getDomainFromData([data], [domainKey, domainKey])\n };\n }\n\n /**\n *\n *\n * @param {Object} x\n * @param {Object} y\n * @return {}\n * @memberof ArcLayer\n */\n getNearestPoint (x, y, config = {}) {\n const dataPoint = selectElement(config.event.target).data()[0];\n if (isSimpleObject(dataPoint)) {\n const { data, uid } = dataPoint.datum;\n return {\n id: this.getIdentifiersFromData(data, uid),\n layerId: this.id()\n };\n }\n return null;\n }\n\n /**\n *\n *\n * @param {*} set\n *\n * @memberof ArcLayer\n */\n getPlotElementsFromSet (set) {\n return selectElement(this.mount()).selectAll(this.elemType()).filter(d => set.indexOf(d.datum.uid) !== -1);\n }\n\n /**\n *\n *\n * @param {Object} container\n * @return {}\n * @memberof ArcLayer\n */\n render (container) {\n const {\n height,\n width\n } = this.measurement();\n const {\n classPrefix,\n defClassName,\n minOuterRadius,\n innerRadius,\n outerRadius,\n cornerRadius,\n padAngle,\n padRadius,\n padding,\n transition,\n innerRadiusFixer\n } = this.config();\n const sizeAxis = this.axes().size;\n const transformedData = this._transformedData;\n const chartHeight = height - padding.top - padding.bottom;\n const chartWidth = width - padding.left - padding.right;\n const qualClassName = getQualifiedClassName(defClassName, this.id(), classPrefix);\n // Sets range for radius\n const range = getRadiusRange(chartWidth, chartHeight, {\n minOuterRadius,\n innerRadius,\n outerRadius,\n innerRadiusFixer\n });\n const colorAxis = this.axes().color;\n const defaultRadius = outerRadius || Math.min(chartHeight, chartWidth) / 2;\n const radiusDomain = this.domain().radius;\n const rangeValueGetter = d => getRangeValue(d, range, radiusDomain, defaultRadius, sizeAxis);\n // This returns a function that generates the arc path based on the datum provided\n const path = arc()\n // .outerRadius(d => rangeValueGetter(d))\n .innerRadius(innerRadius ? Math.min(chartHeight / 2, chartWidth / 2, innerRadius) : 0)\n .cornerRadius(cornerRadius)\n .padAngle(padAngle)\n .padRadius(padRadius);\n this._chartWidth = chartWidth;\n this._chartHeight = chartHeight;\n // Creating the group that holds all the arcs\n const g = makeElement(selectElement(container), 'g', [1], `${qualClassName[0]}-group`)\n .classed(`${qualClassName[1]}-group`, true)\n .attr('transform', `translate(${chartWidth / 2},${chartHeight / 2})`);\n const tween = (elem) => {\n makeElement(elem, 'path', (d, i) => [{\n datum: d,\n index: i,\n arcFn: path,\n meta: {\n originalColor: colorAxis.getRawColor(d.colorVal),\n stateColor: {},\n colorTransform: {}\n }\n }], `${qualClassName[0]}-path`)\n .style('fill', d => colorAxis.getColor(d.datum.colorVal))\n .transition()\n .duration(transition.duration)\n .on('end', this.registerAnimationDoneHook())\n .attrTween('d', (...params) => tweenPie(path, rangeValueGetter, params))\n .attr('class', (d, i) => {\n const individualClass = getIndividualClassName(d, i, transformedData, this);\n return `${qualClassName[0]}-path ${qualClassName[1]}-path-${d.index}\n ${individualClass}`;\n });\n };\n const consecutiveExits = [];\n let exitCounter = 0;\n const tweenExit = (elem, d) => {\n let exitArr = consecutiveExits[exitCounter];\n const oldExitCounter = exitCounter;\n if (!exitArr) {\n exitArr = [{ elem, datum: d }];\n } else if (exitArr[exitArr.length - 1].datum.index === d.index - 1) {\n exitArr.push({ elem, datum: d });\n } else {\n exitCounter++;\n }\n consecutiveExits[oldExitCounter] = exitArr;\n };\n // Creating groups for all the arcs present individually\n makeElement(g, 'g', transformedData, `${qualClassName[0]}`,\n {\n update: tween,\n exit: tweenExit\n })\n .attr('class', (d, i) => `${qualClassName[0]} ${qualClassName[1]}-${i}`);\n tweenExitPie(consecutiveExits, transition, rangeValueGetter, path);\n return this;\n }\n\n /**\n *\n *\n * @param {*} identifiers\n *\n * @memberof BaseLayer\n */\n getPointsFromIdentifiers (identifiers) {\n if (!this.data()) {\n return [];\n }\n const fieldNames = identifiers[0];\n const values = identifiers.slice(1, identifiers.length);\n const pieSlices = selectElement(this.mount()).selectAll('path').data();\n const fieldsConfig = this.data().getFieldsConfig();\n\n const filteredPies = pieSlices.filter((tData) => {\n const data = tData.datum.data;\n const uid = tData.datum.uid;\n return fieldNames.every((field, idx) => {\n if (field in fieldsConfig && fieldsConfig[field].def.type === FieldType.DIMENSION) {\n return values.findIndex(d => d[idx] === data[fieldsConfig[field].index]) !== -1;\n } else if (field === ReservedFields.ROW_ID) {\n return values.findIndex(d => d[idx] === uid) !== -1;\n } return true;\n });\n });\n\n const pieSliceInf = filteredPies[0];\n if (pieSliceInf) {\n const centroid = pieSliceInf.arcFn.centroid(pieSliceInf.datum);\n return [{\n x: centroid[0] + this._chartWidth / 2,\n y: centroid[1] + this._chartHeight / 2,\n width: 2,\n height: 2\n }];\n }\n return [];\n }\n\n getRenderProps () {\n return [`${STATE_NAMESPACES.GROUP_GLOBAL_NAMESPACE}.domain.radius`];\n }\n}\n","import { getObjProp, interpolator, FieldType, selectElement } from 'muze-utils';\nimport { ANGLE, RADIUS, SIZE, COLOR } from '../../enums/constants';\n\n/**\n * Returns the range value from a value inside the domain\n *\n * @param {Object} domainValue Value whose range has to be returned\n * @return {number} range value\n * @memberof ArcLayer\n */\nexport const getRangeValue = (datum, range, domain, defaultRadius, sizeAxis) => {\n let domainMultiplier = 1;\n const {\n outerRadiusValue,\n sizeVal\n } = datum;\n const sizeAxisDomain = sizeAxis.domain();\n const sizeMultiplier = sizeAxis.getSize(sizeVal) / (sizeAxisDomain ? sizeAxis.range()[1] : sizeAxis.config().value);\n\n domainMultiplier *= (range[1] - range[0]) / (domain[1] - domain[0]);\n const rangeVal = (range[0] + (outerRadiusValue - domain[0]) * domainMultiplier);\n return (rangeVal || defaultRadius) * sizeMultiplier;\n};\n\n/**\n *\n *\n * @memberof ArcLayer\n */\nexport const getRadiusRange = (width, height, config) => {\n const {\n minOuterRadius,\n innerRadius,\n outerRadius,\n innerRadiusFixer\n } = config;\n\n return [Math.max((innerRadius + innerRadiusFixer || 0), minOuterRadius), outerRadius || Math.min(height,\n width) / 2];\n};\nexport const getPreviousPoint = (prevData, currIndex, config) => {\n const prevArc = prevData[currIndex - 1];\n const nextArc = prevData[currIndex];\n\n if (prevArc && nextArc) {\n return {\n startAngle: prevArc.endAngle,\n endAngle: nextArc.startAngle\n };\n } else if (!nextArc) {\n return {\n startAngle: config.endAngle * Math.PI * 2 / 360,\n endAngle: config.endAngle * Math.PI * 2 / 360\n };\n }\n return {\n startAngle: config.startAngle * Math.PI * 2 / 360,\n endAngle: config.startAngle * Math.PI * 2 / 360\n };\n};\n\n/**\n *\n *\n * @param {*} path\n * @param {*} b\n *\n * @memberof ArcLayer\n */\nexport const tweenPie = (path, rangeValueGetter, b) => {\n const { datum } = b[0];\n const outerRadius = rangeValueGetter(datum);\n datum.outerRadius = outerRadius;\n datum._previousInfo.outerRadius = datum._previousInfo.outerRadius || outerRadius;\n return function (t) {\n return path(interpolator()(datum._previousInfo, datum)(t));\n };\n};\n\n/**\n *\n *\n * @param {*} path\n * @param {*} b\n *\n * @memberof ArcLayer\n */\nexport const tweenExitPie = (consecutiveExits, transition, rangeValueGetter, path) => {\n if (consecutiveExits.length > 0) {\n consecutiveExits.forEach((consecutiveExitArr) => {\n const startAngle = consecutiveExitArr[0].datum.startAngle;\n const endAngle = consecutiveExitArr[consecutiveExitArr.length - 1].datum.endAngle;\n const mid = (Math.PI * 2 * startAngle) / ((Math.PI * 2) + startAngle - endAngle);\n\n consecutiveExitArr.forEach((e) => {\n const { elem, datum } = e;\n\n elem.each(function () {\n const gElem = selectElement(this);\n gElem.selectAll('path')\n .transition()\n .duration(transition.duration)\n .attrTween('d', () => function (t) {\n const outerRadius = rangeValueGetter(datum);\n datum.outerRadius = outerRadius;\n return path(interpolator()(datum, {\n startAngle: mid,\n endAngle: mid,\n outerRadius\n })(t));\n })\n .remove();\n gElem.remove();\n });\n });\n });\n }\n};\n\nexport const getFieldIndices = (encoding, fieldsConfig) => {\n const [angleField, radiusField, colorField, sizeField] = [ANGLE, RADIUS, COLOR, SIZE]\n .map(e => encoding[e].field);\n const [angleIndex, sizeIndex, radiusIndex] = [angleField, sizeField, radiusField]\n .map((e) => {\n const conf = fieldsConfig[e];\n if (conf && conf.def.type === FieldType.MEASURE) {\n return conf.index;\n }\n return null;\n });\n const colorIndex = getObjProp(fieldsConfig, colorField, 'index');\n return {\n angleIndex,\n sizeIndex,\n radiusIndex,\n colorIndex\n };\n};\n","import {\n setAttrs,\n setStyles,\n selectElement,\n makeElement,\n getSmartComputedStyle\n} from 'muze-utils';\n\n/**\n * Draws svg text in the specified container.\n * @param {SVGElement} container Container where labels will be appended.\n * @param {Array.} data Data of the elements.\n * @return {Selection} d3 selection of the elements.\n */\nconst drawText = (container, data, config, smartLabel) => {\n const selection = selectElement(container).selectAll('g').data(data);\n\n const selectionMerge = selection.enter().append('g')\n .each(function (dataObj) {\n setAttrs(this, dataObj.enter);\n })\n .merge(selection);\n const style = getSmartComputedStyle(selectElement(container), config.className);\n const fontSize = parseInt(style.fontSize, 10);\n\n smartLabel.setStyle(style);\n selectionMerge.each(function (dataObj) {\n const element = selectElement(this);\n const { update, text, color, textanchor, style: textStyle } = dataObj;\n const background = dataObj.background;\n let backgroundVal;\n if (backgroundVal = background.value) {\n const backgroundPadding = background.padding;\n let diff;\n const { width, height } = smartLabel.getOriSize(dataObj.text);\n const backgroundEl = makeElement(element, 'rect', [1]);\n\n if (textanchor === 'end') {\n diff = width;\n } else if (textanchor === 'start') {\n diff = 0;\n } else {\n diff = width / 2;\n }\n\n setAttrs(backgroundEl.node(), {\n x: update.x - diff - backgroundPadding / 2,\n y: update.y - fontSize - backgroundPadding / 2,\n width: width + backgroundPadding,\n height: height + backgroundPadding\n });\n background && setStyles(backgroundEl, {\n background: backgroundVal\n });\n }\n const textEl = makeElement(element, 'text', d => [d]).text(text);\n const textNode = textEl.node();\n textStyle && setStyles(textNode, textStyle);\n color && setStyles(textNode, {\n fill: color\n });\n dataObj.className && textEl.classed(dataObj.className, true);\n setAttrs(textNode, update);\n textEl.attr('text-anchor', textanchor);\n });\n selection.exit().remove();\n return selection;\n};\n\nexport default drawText;\n","import { CLASSPREFIX } from '../../enums/constants';\n\nexport const defaultConfig = {\n defClassName: 'layer-text',\n classPrefix: CLASSPREFIX,\n className: '',\n transform: {\n type: 'identity'\n },\n interaction: {\n highlight: [{\n type: 'fill',\n intensity: [0, 0, -15, 0]\n }],\n fade: [{\n type: 'fill',\n intensity: [0, 0, +15, 0]\n }],\n focus: [{\n type: 'fill',\n intensity: [0, 0, +15, 0]\n }]\n },\n transition: {\n effect: 'cubic',\n duration: 1000\n },\n encoding: {\n color: {},\n text: {\n value: '',\n formatter: (val, i, data, context) => {\n const valueParser = context.valueParser();\n return valueParser(val);\n },\n background: {\n padding: 10\n }\n }\n },\n states: {\n highlight: {\n className: `${CLASSPREFIX}-layer-text-highlight`\n },\n fadeout: {\n className: `${CLASSPREFIX}-layer-text-fadeout`\n },\n selected: {\n className: `${CLASSPREFIX}-layer-text-selected`\n }\n }\n};\n","import {\n getQualifiedClassName,\n selectElement,\n setStyles,\n createElements\n} from 'muze-utils';\nimport { BaseLayer } from '../../base-layer';\nimport drawText from './renderer';\nimport { defaultConfig } from './default-config';\nimport { getLayerColor, positionPoints, getIndividualClassName } from '../../helpers';\nimport { TEXT_ANCHOR_MIDDLE, ENCODING } from '../../enums/constants';\n\nimport './styles.scss';\n\n/**\n * This layer is used to create labels for each data point. It has an encoding property ```text```\n * which determines from which field's data the value of the label will be taken. The text encoding\n * property is necessary for the layer to render the text.The mark type of this layer is ```text```.\n *\n * @public\n *\n * @class\n * @module TextLayer\n * @extends BaseLayer\n */\nexport default class TextLayer extends BaseLayer {\n /**\n * Returns the default configuration of the text layer\n * @return {Object} Default configuration of the text layer\n */\n static defaultConfig () {\n return defaultConfig;\n }\n\n static formalName () {\n return 'text';\n }\n\n elemType () {\n return 'text';\n }\n\n /**\n * Generates an array of objects containing x, y, width and height of the points from the data\n * @param {Array.} data Data Array\n * @param {Object} encoding Config\n * @param {Object} axes Axes object\n * @return {Array.} Array of points\n */\n translatePoints (data, encoding, axes) {\n let points = [];\n const colorAxis = axes.color;\n const textEncoding = encoding.text;\n const { field: textField, value, formatter: textFormatter } = textEncoding;\n const colorEncoding = encoding.color;\n const colorField = colorEncoding && colorEncoding.field;\n const fieldsConfig = this.data().getFieldsConfig();\n\n const backgroundEncoding = encoding.text.background;\n const backgroundPadding = backgroundEncoding.padding;\n const backgroundValue = backgroundEncoding.value;\n const colorFieldIndex = fieldsConfig[colorField] ? fieldsConfig[colorField].index : -1;\n const textFieldIndex = textField ? fieldsConfig[textField] && fieldsConfig[textField].index : -1;\n const xEnc = ENCODING.X;\n const yEnc = ENCODING.Y;\n for (let i = 0, len = data.length; i < len; i++) {\n const d = data[i];\n const row = d._data;\n const textValue = textField ? row[textFieldIndex] : value;\n\n const [xPx, yPx] = [xEnc, yEnc].map(type => (axes[type] ? axes[type].getScaleValue(d[type]) +\n axes[type].getUnitWidth() / 2 : 0));\n\n const { color, rawColor } = getLayerColor({ datum: d, index: i },\n { colorEncoding, colorAxis, colorFieldIndex });\n\n const point = {\n enter: {},\n update: {\n x: xPx,\n y: yPx\n },\n text: textFormatter(textValue, i, data, this),\n color,\n background: {\n value: backgroundValue instanceof Function ? backgroundValue(d, i, data, this) : null,\n padding: backgroundPadding\n },\n meta: {\n stateColor: {},\n originalColor: rawColor,\n colorTransform: {}\n },\n style: {},\n _data: row,\n _id: d._id,\n source: d._data,\n rowId: d._id\n };\n\n point.className = getIndividualClassName(d, i, data, this);\n points.push(point);\n }\n\n points = positionPoints(this, points);\n points = points.filter((d) => {\n const update = d.update;\n return !isNaN(update.x) && !isNaN(update.y);\n });\n return points;\n }\n\n /**\n * Renders the plot in the given container\n * @param {SVGElement} container SVGElement which will hold the plot\n * @return {textLayer} Instance of text layer\n */\n render (container) {\n let points;\n const config = this.config();\n const encoding = config.encoding;\n const normalizedData = this._normalizedData;\n const className = config.className;\n const qualifiedClassName = getQualifiedClassName(config.defClassName, this.id(), config.classPrefix);\n const axes = this.axes();\n const containerSelection = selectElement(container);\n\n containerSelection.classed(`${qualifiedClassName.join(' ')} ${className}`, true);\n createElements({\n data: normalizedData,\n append: 'g',\n selector: 'g',\n container,\n each: (dataArr, group, i) => {\n const node = group.node();\n points = this.translatePoints(dataArr, encoding, axes, i);\n setStyles(node, {\n 'text-anchor': TEXT_ANCHOR_MIDDLE\n });\n drawText(node, points, {\n className: qualifiedClassName[0]\n }, this._dependencies.smartLabel);\n }\n });\n return this;\n }\n}\n","/* global Element, document */\nimport {\n makeElement,\n selectElement,\n easeFns,\n objectIterator,\n getSymbol\n} from 'muze-utils';\n\n/**\n *\n *\n * @param {*} str\n *\n */\nconst checkPath = (str) => {\n if (/^[mzlhvcsqta]\\s*[-+.0-9][^mlhvzcsqta]+/i.test(str) && /[\\dz]$/i.test(str) && str.length > 4) {\n return true;\n }\n return false;\n};\n\n/**\n *\n *\n * @param {*} d\n * @param {*} elem\n */\nconst createShape = function (d, groupElement) {\n const { shape, size, update } = d;\n\n if (shape instanceof Promise) {\n shape.then((res) => {\n d.shape = res;\n createShape(d, groupElement);\n });\n } else if (shape instanceof Element) {\n let newShape = shape.cloneNode(true);\n\n if (newShape.nodeName.toLowerCase() === 'img') {\n const src = newShape.src || newShape.href;\n newShape = document.createElementNS('http://www.w3.org/2000/svg', 'image');\n newShape.setAttribute('href', src);\n }\n const shapeElement = selectElement(newShape);\n if (newShape.nodeName === 'path' || newShape.nodeName === 'image') {\n shapeElement.attr('transform', `scale(${size / 100})`);\n } else {\n shapeElement.attr('height', size);\n shapeElement.attr('width', size);\n }\n shapeElement.attr('x', -size / 2);\n shapeElement.attr('y', -size / 2);\n makeElement(groupElement, () => newShape, [1]);\n } else if (typeof shape === 'string') {\n let pathStr;\n if (checkPath(shape)) {\n pathStr = shape;\n } else {\n pathStr = getSymbol(shape).size(size)(update);\n }\n makeElement(groupElement, 'path', data => [data]).attr('d', pathStr);\n } else {\n d.shape = 'circle';\n createShape(d, groupElement);\n }\n};\n\n/**\n * Draws symbols using d3 symbol api\n * @param {Object} params Contains the svg container, points and other symbol related attributes.\n */\n/* istanbul ignore next */ const drawSymbols = (params) => {\n const { layer, container, points, transition, className } = params;\n const { duration, effect, disabled } = transition;\n const mount = selectElement(container);\n\n mount.attr('class', className);\n return makeElement(mount, 'g', points, null, {\n enter: (group, d) => {\n const { enter } = d;\n group.attr('transform', `translate(${enter.x},${enter.y})`);\n },\n update: (group, d) => {\n createShape(d, group);\n const { update, style } = d;\n objectIterator(style, key => group.style(key, style[key]));\n group.attr('class', className);\n group.classed(d.className, true);\n if (!disabled) {\n group = group.transition()\n .duration(transition.duration)\n .on('end', layer.registerAnimationDoneHook());\n }\n group.attr('transform', `translate(${update.x},${update.y})`);\n },\n exit: (exitGroup) => {\n if (!disabled) {\n exitGroup.transition().ease(easeFns[effect])\n .duration(duration)\n .on('end', () => exitGroup.remove())\n .style('fill-opacity', 0)\n .style('stroke-opacity', 0);\n } else {\n exitGroup.remove();\n }\n }\n }, params.keyFn);\n};\n\nexport default drawSymbols;\n","import { CLASSPREFIX } from '../../enums/constants';\n\nexport const defaultConfig = {\n defClassName: 'layer-point',\n className: '',\n classPrefix: CLASSPREFIX,\n defColorStyle: 'stroke',\n interaction: {\n highlight: [{\n type: 'fill',\n intensity: [0, 0, -20, 0]\n }],\n fade: [{\n type: 'fill',\n intensity: [0, 0, +20, 0]\n }],\n focus: [{\n type: 'fill',\n intensity: [0, 0, +20, 0]\n }\n ]\n },\n innerPadding: 0.1,\n nearestPointThreshold: 10,\n transform: {\n type: 'identity'\n },\n transition: {\n effect: 'cubic',\n duration: 1000\n },\n encoding: {\n size: {\n value: 30\n },\n color: { },\n shape: {\n value: 'circle'\n },\n x: {},\n y: {},\n strokeOpacity: {\n value: 0.5\n },\n fillOpacity: {\n value: 0.5\n }\n },\n shapes: ['circle', 'cross', 'diamond', 'square', 'star', 'wye', 'triangle'],\n sizes: [20, 30, 40, 50, 60, 70]\n};\n","import {\n Voronoi,\n selectElement,\n getQualifiedClassName,\n makeElement,\n FieldType,\n Scales\n} from 'muze-utils';\nimport { BaseLayer } from '../../base-layer';\nimport drawSymbols from './renderer';\nimport { defaultConfig } from './default-config';\nimport { ENCODING } from '../../enums/constants';\nimport {\n attachDataToVoronoi,\n getLayerColor,\n positionPoints,\n getPlotMeasurement,\n getIndividualClassName,\n getMarkId\n} from '../../helpers';\n\nimport './styles.scss';\n\n/**\n * This layer is used to create various symbols for each data point. This is commonly used in\n * scatterplot visualizations. The mark type of this layer is ```point```.\n *\n * @public\n *\n * @class\n * @module PointLayer\n * @extends BaseLayer\n */\nexport default class PointLayer extends BaseLayer {\n\n /**\n * Creates an instance of PointLayer.\n * @param {*} args\n * @memberof PointLayer\n */\n constructor (...args) {\n super(...args);\n this._voronoi = new Voronoi();\n this._bandScale = Scales.band();\n }\n\n /**\n *\n *\n *\n * @memberof PointLayer\n */\n elemType () {\n return 'g';\n }\n\n /**\n * Returns the default configuration of the point layer\n * @return {Object} Default configuration of the point layer\n */\n static defaultConfig () {\n return defaultConfig;\n }\n\n static defaultPolicy (conf, userConf) {\n const config = BaseLayer.defaultPolicy(conf, userConf);\n const encoding = config.encoding;\n const transform = config.transform;\n const colorField = encoding.color && encoding.color.field;\n\n if (colorField) {\n transform.groupBy = colorField;\n }\n return config;\n }\n\n /**\n *\n *\n * @static\n *\n * @memberof PointLayer\n */\n static formalName () {\n return 'point';\n }\n\n /**\n *\n *\n * @static\n *\n * @memberof PointLayer\n */\n static drawFn () {\n return drawSymbols;\n }\n\n /**\n * Generates an array of objects containing x, y, width and height of the points from the data\n * @param {Array.} data Data Array\n * @param {Object} encoding Config\n * @param {Object} axes Axes object\n * @return {Array.} Array of points\n */\n translatePoints (data, encoding, axes, config = {}) {\n let points = [];\n const {\n size: sizeEncoding,\n shape: shapeEncoding,\n color: colorEncoding,\n x,\n y\n } = encoding;\n const sizeField = sizeEncoding.field;\n const sizeValue = sizeEncoding.value;\n const shapeField = shapeEncoding.field;\n const xField = x.field;\n const yField = y.field;\n const { size: sizeAxis, shape: shapeAxis } = axes;\n const fieldsConfig = this.data().getFieldsConfig();\n const isXDim = fieldsConfig[xField] && fieldsConfig[xField].def.type === FieldType.DIMENSION;\n const isYDim = fieldsConfig[yField] && fieldsConfig[yField].def.type === FieldType.DIMENSION;\n const key = isXDim ? ENCODING.X : (isYDim ? ENCODING.Y : null);\n const colorField = colorEncoding && colorEncoding.field;\n const colorFieldIndex = fieldsConfig[colorField] && fieldsConfig[colorField].index;\n const measurement = this.measurement();\n const shapeFieldIndex = fieldsConfig[shapeField] && fieldsConfig[shapeField].index;\n const sizeFieldIndex = fieldsConfig[sizeField] && fieldsConfig[sizeField].index;\n const colorAxis = axes.color;\n const { x: offsetX, y: offsetY } = config.offset;\n\n for (let i = 0, len = data.length; i < len; i++) {\n const d = data[i];\n const row = d._data;\n const size = sizeValue instanceof Function ? sizeValue(d, i) : sizeAxis.getSize(row[sizeFieldIndex]);\n const shape = shapeAxis.getShape(row[shapeFieldIndex]);\n\n let [xPx, yPx] = [ENCODING.X, ENCODING.Y].map((type) => {\n const value = d[type] === null ? undefined : d[type];\n const measure = type === ENCODING.X ? measurement.width : measurement.height;\n return !encoding[type].field ? measure / 2 : axes[type].getScaleValue(value);\n });\n\n xPx += offsetX;\n yPx += offsetY;\n\n const { color, rawColor } = getLayerColor({ datum: d, index: i },\n { colorEncoding, colorAxis, colorFieldIndex });\n\n const style = {\n fill: color,\n stroke: color\n };\n\n if (!isNaN(xPx) && !isNaN(yPx)) {\n const point = {\n enter: {\n x: xPx,\n y: yPx\n },\n update: {\n x: xPx,\n y: yPx\n },\n shape,\n size: Math.abs(size),\n meta: {\n stateColor: {},\n originalColor: rawColor,\n colorTransform: {}\n },\n style,\n _data: row,\n _id: d._id,\n source: d._data,\n rowId: d._id\n };\n point.className = getIndividualClassName(d, i, data, this);\n points.push(point);\n this.cachePoint(d[key], point);\n }\n }\n points = positionPoints(this, points);\n return points;\n }\n\n /**\n * Renders the plot in the given container.\n *\n * @param {SVGElement} container SVGElement which will hold the plot\n * @return {BarLayer} Instance of bar layer\n */\n render (container) {\n let maxSize = 0;\n let seriesClassName;\n const config = this.config();\n const keys = this._transformedData.map(d => d.key);\n const { transition, className, defClassName, classPrefix } = config;\n const normalizedData = this._normalizedData;\n const containerSelection = selectElement(container);\n const qualifiedClassName = getQualifiedClassName(defClassName, this.id(), classPrefix);\n this._points = [];\n this._pointMap = {};\n\n containerSelection.classed(qualifiedClassName.join(' '), true).classed(className, true);\n\n this._points = this.generateDataPoints(normalizedData, keys);\n const schema = this.data().getSchema();\n makeElement(container, 'g', this._points, null, {\n update: (group, points) => {\n maxSize = Math.max(maxSize, ...points.map(d => d.size));\n seriesClassName = `${qualifiedClassName[0]}`;\n this.constructor.drawFn()({\n layer: this,\n container: group.node(),\n points,\n className: seriesClassName,\n transition,\n keyFn: v => getMarkId(v.source, schema)\n });\n }\n }, data => data[0]._id);\n this._maxSize = Math.sqrt(maxSize / Math.PI) * 2;\n attachDataToVoronoi(this._voronoi, this._points);\n return this;\n }\n\n generateDataPoints (normalizedData, keys) {\n const encoding = this.config().encoding;\n const axes = this.axes();\n const [widthMetrics, heightMetrics] = getPlotMeasurement(this, keys);\n const offsetXValues = widthMetrics.offsetValues || [];\n const offsetYValues = heightMetrics.offsetValues || [];\n return normalizedData.map((dataArr, i) => {\n const measurementConf = this.getMeasurementConfig(offsetXValues[i], offsetYValues[i], widthMetrics.span,\n heightMetrics.span);\n return this.translatePoints(dataArr, encoding, axes, measurementConf);\n }).filter(d => d.length);\n }\n\n getMeasurementConfig (offsetX, offsetY, widthSpan, heightSpan) {\n return {\n offset: {\n x: (offsetX || 0) + widthSpan / 2,\n y: (offsetY || 0) + heightSpan / 2\n },\n span: {\n x: widthSpan,\n y: heightSpan\n }\n };\n }\n\n /**\n * Gets the nearest point from a position.\n * @param {number} x x position\n * @param {number} y y position\n * @return {Object} Point details\n */\n getNearestPoint (x, y) {\n const distanceLimit = Math.max(this._maxSize, this.config().nearestPointThreshold);\n\n if (!this.data()) {\n return null;\n }\n\n const point = this._voronoi.find(x, y, distanceLimit);\n const dimensions = point && point.data.data.update;\n const radius = point ? Math.sqrt(point.data.data.size / Math.PI) : 0;\n\n if (point) {\n const { _data, _id } = point.data.data;\n const identifiers = this.getIdentifiersFromData(_data, _id);\n return {\n id: identifiers,\n dimensions: [{\n x: dimensions.x,\n y: dimensions.y,\n width: radius,\n height: radius\n }],\n layerId: this.id()\n };\n }\n return null;\n }\n}\n","import { makeElement, easeFns } from 'muze-utils';\n\n/**\n *\n *\n * @param {*} elem\n * @param {*} datum\n * @param {*} index\n * @param {*} context\n */\nconst transitionBars = (layer, elem, datum, index, context) => {\n const { transition } = context;\n const { duration, disabled, effect } = transition;\n const selection = elem;\n\n const selTransition = disabled ? selection :\n selection.transition()\n .duration(duration)\n .ease(easeFns[effect])\n .on('end', layer.registerAnimationDoneHook());\n const update = datum.update || datum;\n const updateStyle = datum.style || {};\n datum.className && selection.classed(datum.className, true);\n Object.entries(update).forEach(attr => (!isNaN(attr[1]) && selTransition.attr(attr[0], attr[1])));\n Object.entries(updateStyle).forEach(styleObj => selection.style(styleObj[0], styleObj[1]));\n};\n\n/**\n *\n *\n * @param {*} elem\n * @param {*} d\n */\nconst barEnterFn = (elem, d) => {\n const selection = elem;\n const enter = d.enter || {};\n Object.entries(enter).forEach(attr => (!isNaN(attr[1]) && selection.attr(attr[0], attr[1])));\n};\n\n/**\n * Draws rectangles by using d3 selection\n * @param {Object} params Contains container element and points\n * @return {Selection} Bar Selection\n */\n/* istanbul ignore next */ export const drawRects = (params) => {\n const { layer, points, container, keyFn } = params;\n const updateFns = {\n enter (elem, d) { barEnterFn(elem, d); },\n update (elem, d, i) { transitionBars(layer, elem, d, i, params); }\n };\n return makeElement(container, 'rect', points, null, updateFns, keyFn);\n};\n","import { CLASSPREFIX } from '../../enums/constants';\n\nexport const defaultConfig = {\n classPrefix: CLASSPREFIX,\n defClassName: 'layer-bar',\n className: '',\n interaction: {\n highlight: [{\n type: 'fill',\n intensity: [0, 0, -15, 0]\n }],\n fade: [{\n type: 'fill',\n intensity: [0, 0, +15, 0]\n }],\n focus: [{\n type: 'fill',\n intensity: [0, 0, +15, 0]\n }]\n },\n transform: {\n type: 'stack'\n },\n transition: {\n effect: 'cubic',\n duration: 1000\n },\n innerPadding: 0.1,\n encoding: {\n color: {},\n x: {},\n y: {},\n x0: {},\n y0: {}\n },\n states: {\n highlight: {\n className: `${CLASSPREFIX}-layer-bar-highlight`\n },\n fadeout: {\n className: `${CLASSPREFIX}-layer-bar-fadeout`\n },\n selected: {\n className: `${CLASSPREFIX}-layer-bar-selected`\n }\n }\n};\n\n","import { MeasureSubtype, DimensionSubtype } from 'muze-utils';\nimport { STACK } from '../../enums/constants';\nimport { getLayerColor, positionPoints, getIndividualClassName } from '../../helpers';\n\n/**\n *\n *\n * @param {*} type\n * @param {*} fieldInfo\n * @param {*} config\n * @param {*} data\n *\n */\nconst resolveDimByField = (type, axesInfo, config, data) => {\n const spaceType = type === 'x' ? 'width' : 'height';\n const [fieldType, axis] = [config[`${type}FieldType`], axesInfo[`${type}Axis`]];\n const {\n transformType,\n sizeEncoding,\n sizeConfig,\n measurement\n } = config;\n\n const sizeValue = sizeEncoding.value;\n let enter = 0;\n let pos;\n let space = 0;\n let enterSpace = 0;\n if (fieldType !== undefined) {\n if (config[`${type}0Field`]) {\n const minVal = data[type];\n const maxVal = data[`${type}0`];\n let min;\n let max;\n if (minVal === null || maxVal === null) {\n return {\n enterSpace: undefined,\n enter: undefined,\n pos: undefined,\n space: undefined\n };\n } else if (fieldType === MeasureSubtype.CONTINUOUS || fieldType === DimensionSubtype.TEMPORAL) {\n min = Math.min(minVal, maxVal);\n max = Math.max(minVal, maxVal);\n } else {\n min = minVal;\n max = maxVal;\n }\n const scales = type === 'x' ? [min, max] : [max, min];\n pos = axis.getScaleValue(scales[0]) + axis.getUnitWidth() / 2;\n space = Math.abs(axis.getScaleValue(scales[1]) - pos) + axis.getUnitWidth() / 2;\n\n enter = pos;\n enterSpace = 0;\n } else if (fieldType === DimensionSubtype.CATEGORICAL || fieldType === DimensionSubtype.TEMPORAL) {\n pos = axis.getScaleValue(data[type]) +\n (sizeConfig[type === 'x' ? 'barWidthOffset' : 'barHeightOffset'] || 0);\n\n space = sizeConfig[type === 'x' ? 'barWidth' : 'barHeight'];\n if (sizeValue !== undefined) {\n const diffPx = sizeValue * space;\n space -= diffPx;\n pos += diffPx / 2;\n }\n enter = pos;\n enterSpace = space;\n } else {\n const zeroPos = axis.getScaleValue(0);\n const axisType = axis.getScaleValue(data[type]);\n const axisType0 = axis.getScaleValue(data[`${type}0`]);\n\n enterSpace = 0;\n if (type === 'x') {\n pos = data[type] < 0 || transformType === STACK ? axisType : zeroPos;\n space = Math.abs(pos - (transformType === STACK ? axisType0 : (data[type] >= 0 ? axisType : zeroPos)));\n } else {\n pos = transformType === STACK || data[type] >= 0 ? axisType : zeroPos;\n space = Math.abs(pos - (transformType === STACK ? axisType0 : (data[type] >= 0 ? zeroPos : axisType)));\n }\n enter = zeroPos;\n }\n } else {\n pos = 0;\n space = measurement[spaceType];\n }\n\n return {\n enterSpace,\n enter,\n pos,\n space\n };\n};\n\n/**\n *\n *\n * @param {*} data\n * @param {*} config\n * @param {*} axes\n *\n */\nconst resolveDimensions = (data, config, axes) => {\n const axesInfo = {\n xAxis: axes.x,\n yAxis: axes.y\n };\n const {\n enterSpace: enterWidth,\n enter: enterX,\n pos: xPos,\n space: width\n } = resolveDimByField('x', axesInfo, config, data);\n\n const {\n enterSpace: enterHeight,\n enter: enterY,\n pos: yPos,\n space: height\n } = resolveDimByField('y', axesInfo, config, data);\n return {\n enter: {\n x: enterX,\n y: enterY,\n width: enterWidth,\n height: enterHeight\n },\n update: {\n x: xPos,\n y: yPos,\n width,\n height\n }\n };\n};\n\n/**\n * Generates an array of objects containing x, y, width and height of the bars from the data\n * @param {Array.} data Data Array\n * @param {Object} encoding Config\n * @param {Object} axes Axes object\n * @param {Object} conf config object for point generation\n * @return {Array.} Array of points\n */\nexport const getTranslatedPoints = (context, data, sizeConfig) => {\n let points = [];\n const encoding = context.config().encoding;\n const axes = context.axes();\n const colorAxis = axes.color;\n const fieldsConfig = context.data().getFieldsConfig();\n const colorEncoding = encoding.color;\n const colorField = colorEncoding.field;\n const sizeEncoding = encoding.size || {};\n const {\n x0Field,\n y0Field,\n xFieldSubType,\n yFieldSubType\n } = context.encodingFieldsInf();\n const measurement = context.measurement();\n const isXDim = xFieldSubType === DimensionSubtype.CATEGORICAL || xFieldSubType === DimensionSubtype.TEMPORAL;\n const isYDim = yFieldSubType === DimensionSubtype.CATEGORICAL || yFieldSubType === DimensionSubtype.TEMPORAL;\n const key = isXDim ? 'x' : (isYDim ? 'y' : null);\n const transformType = context.transformType();\n const colorFieldIndex = colorField && fieldsConfig[colorField] && fieldsConfig[colorField].index;\n\n for (let i = 0, len = data.length; i < len; i++) {\n const d = data[i];\n const style = {};\n const meta = {};\n const dimensions = resolveDimensions(d, {\n xFieldType: xFieldSubType,\n yFieldType: yFieldSubType,\n x0Field,\n y0Field,\n transformType,\n measurement,\n sizeConfig,\n sizeEncoding\n }, axes);\n\n const { color, rawColor } = getLayerColor({ datum: d, index: i },\n { colorEncoding, colorAxis, colorFieldIndex });\n\n style.fill = color;\n meta.stateColor = {};\n meta.originalColor = rawColor;\n meta.colorTransform = {};\n\n const update = dimensions.update;\n\n if (!isNaN(update.x) && !isNaN(update.y) && d._id !== undefined) {\n let point = null;\n point = {\n enter: dimensions.enter,\n update,\n style,\n _data: d._data,\n _id: d._id,\n source: d._data,\n rowId: d._id,\n meta\n };\n point.className = getIndividualClassName(d, i, data, context);\n points.push(point);\n // Store each point in a hashmap with key as the dimensional or temporal field value\n context.cachePoint(d[key], point);\n }\n }\n\n points = positionPoints(context, points);\n return points;\n};\n","import {\n getQualifiedClassName,\n selectElement,\n createElements,\n clipElement,\n DimensionSubtype,\n FieldType,\n MeasureSubtype,\n Scales,\n getNearestValue\n} from 'muze-utils';\nimport { BaseLayer } from '../../base-layer';\nimport { drawRects } from './renderer';\nimport { defaultConfig } from './default-config';\nimport { getPlotMeasurement, getValidTransformForAggFn } from '../../helpers';\nimport './styles.scss';\nimport { getTranslatedPoints } from './bar-helper';\n\nconst MEASURE = FieldType.MEASURE;\nconst scaleBand = Scales.band;\n\n/**\n * Bar layer creates rectangle marks. The mark type of this layer is ```bar```. This layer can be used\n * to create stacked or grouped bars, range bars, heatmap plots and also reference bands by using\n * the encoding properties.\n *\n * @public\n *\n * @class\n * @module BarLayer\n * @extends BaseLayer\n */\nexport default class BarLayer extends BaseLayer {\n /**\n * Creates an instance of bar layer\n */\n constructor (...params) {\n super(...params);\n this._bandScale = scaleBand();\n this._plotPadding = {\n x: 0,\n y: 0\n };\n this._plotSpan = {\n x: 0,\n y: 0\n };\n this._pointMap = {};\n }\n\n /**\n *\n *\n *\n * @memberof BarLayer\n */\n elemType () {\n return 'rect';\n }\n\n /**\n *\n *\n * @static\n *\n * @memberof BarLayer\n */\n static formalName () {\n return 'bar';\n }\n\n /**\n * Returns the default configuration of the bar layer\n * @return {Object} Default configuration of the bar layer\n */\n static defaultConfig () {\n return defaultConfig;\n }\n\n /**\n *\n *\n * @static\n * @param {*} conf\n * @param {*} userConf\n *\n * @memberof BarLayer\n */\n static defaultPolicy (conf, userConf) {\n const config = BaseLayer.defaultPolicy(conf, userConf);\n const encoding = config.encoding;\n const colorField = encoding.color.field;\n const transform = config.transform;\n\n if (colorField) {\n transform.groupBy = colorField;\n }\n return config;\n }\n\n /**\n *\n *\n * @param {*} data\n * @param {*} fieldsConfig\n *\n * @memberof BarLayer\n */\n calculateDomainFromData (data, encodingFieldInf, fieldsConfig) {\n const domain = super.calculateDomainFromData(data, encodingFieldInf, fieldsConfig);\n ['x', 'y'].forEach((d) => {\n if (encodingFieldInf[`${d}FieldType`] === MEASURE && domain[d]) {\n encodingFieldInf[`${d}0Field}`] ? domain[d] = domain[d].sort((a, b) => a - b) :\n (domain[d][0] = Math.min(domain[d][0], 0));\n }\n });\n return domain;\n }\n\n /**\n * Generates an array of objects containing x, y, width and height of the bars from the data\n * @param {Array.} data Data Array\n * @param {Object} encoding Config\n * @param {Object} axes Axes object\n * @param {Object} conf config object for point generation\n * @return {Array.} Array of points\n */\n translatePoints (data, sizeConfig) {\n return getTranslatedPoints(this, data, sizeConfig);\n }\n\n /**\n * Renders the plot in the given container\n * @param {SVGGroup} container SVGGroup where plot will be rendered.\n * @return {BarLayer} Instance of bar layer.\n */\n render (container) {\n const config = this.config();\n const transition = config.transition;\n const normalizedDataArr = this._normalizedData;\n const transformedData = this._transformedData;\n const keys = transformedData.map(d => d.key);\n const fieldsConfig = this.data().getFieldsConfig();\n const axes = this.axes();\n const height = axes.y && axes.y.scale().range()[0];\n const width = axes.x && axes.x.scale().range()[1];\n const defClassName = config.defClassName;\n const qualifiedClassName = getQualifiedClassName(defClassName, this.id(), config.classPrefix);\n const className = config.className;\n const containerSelection = selectElement(container);\n const dimensions = Object.values(fieldsConfig).filter(e => e.def.type === FieldType.DIMENSION)\n .map(e => e.index);\n containerSelection.classed(qualifiedClassName.join(' '), true);\n containerSelection.classed(className, true);\n clipElement(container, {\n x: 0,\n y: 0,\n width,\n height\n }, `id-${this.id()}`);\n\n this._points = this.generateDataPoints(normalizedDataArr, keys);\n\n createElements({\n data: this._points,\n container,\n selector: 'g',\n append: 'g',\n each: (points, group, i) => {\n const seriesClassName = `${qualifiedClassName[0]}-${keys[i] || i}`.toLowerCase();\n group.style('display', 'block');\n drawRects({\n layer: this,\n container: group.node(),\n points,\n className: seriesClassName,\n transition,\n style: {},\n keyFn: d => dimensions.map(key => d._data[key]).join('-')\n });\n }\n });\n return this;\n }\n\n /**\n *\n *\n * @param {*} normalizedData\n * @param {*} keys\n *\n * @memberof BarLayer\n */\n generateDataPoints (normalizedData, keys) {\n const [barWidthMetrics, barHeightMetrics] = getPlotMeasurement(this, keys);\n const barWidthOffsets = barWidthMetrics.offsetValues || [];\n const barHeightOffsets = barHeightMetrics.offsetValues || [];\n this._plotSpan = {\n x: barWidthMetrics.groupSpan || 0,\n y: barHeightMetrics.groupSpan || 0\n };\n this._plotPadding = {\n x: barWidthMetrics.padding || 0,\n y: barHeightMetrics.padding || 0\n };\n\n this._pointMap = {};\n return normalizedData.map((data, i) => this.translatePoints(data,\n {\n barWidth: barWidthMetrics.span,\n barWidthOffset: barWidthOffsets[i] || 0,\n barHeight: barHeightMetrics.span,\n barHeightOffset: barHeightOffsets[i] || 0\n }));\n }\n\n getPlotPadding () {\n return this._plotPadding;\n }\n\n resolveTransformType () {\n this._transformType = getValidTransformForAggFn(this);\n }\n\n /**\n * Gets the nearest point of the position passed.\n * @param {number} x x position\n * @param {number} y y position\n * @return {Object} Nearest point.\n */\n getNearestPoint (x, y) {\n if (!this.data()) {\n return null;\n }\n let axis;\n let value;\n let points;\n let uniqueFieldType;\n let uniqueFieldIndex;\n let filterData;\n let identifiers;\n let pointFound = null;\n const dataModel = this.data();\n const dataObj = dataModel.getData();\n const fieldsConfig = dataModel.getFieldsConfig();\n const axes = this.axes();\n const data = dataObj.data;\n const pointMap = this._pointMap;\n const {\n xField,\n yField,\n xFieldSubType,\n yFieldSubType\n } = this.encodingFieldsInf();\n\n if (xFieldSubType === MeasureSubtype.CONTINUOUS) {\n axis = axes.y;\n value = axis.invert(y);\n uniqueFieldIndex = fieldsConfig[yField].index;\n uniqueFieldType = yFieldSubType;\n } else {\n axis = axes.x;\n value = axis.invert(x);\n uniqueFieldIndex = fieldsConfig[xField].index;\n uniqueFieldType = xFieldSubType;\n }\n\n if (uniqueFieldType === DimensionSubtype.CATEGORICAL) {\n points = pointMap[value];\n }\n\n if (uniqueFieldType === DimensionSubtype.TEMPORAL) {\n filterData = [...new Set(data.map(d => d[uniqueFieldIndex]))];\n value = getNearestValue(filterData, value);\n points = pointMap[value];\n }\n const len = points && points.length;\n points && points.sort((p1, p2) => p1.update.y - p2.update.y);\n for (let i = 0; i < len; i++) {\n const point = points[i];\n const update = point.update;\n if (x >= update.x && x <= (update.width + update.x) && y >= update.y && y <= (update.height + update.y)) {\n pointFound = point;\n break;\n }\n pointFound = null;\n }\n\n const values = pointFound && pointFound._data;\n if (values) {\n identifiers = this.getIdentifiersFromData(values, pointFound._id);\n }\n return pointFound ? {\n dimensions: [pointFound.update],\n id: identifiers,\n layerId: this.id()\n } : pointFound;\n }\n\n getPlotSpan () {\n return this._plotSpan;\n }\n}\n","import { CLASSPREFIX } from '../../enums/constants';\n\nexport const defaultConfig = {\n defClassName: 'layer-tick',\n className: '',\n classPrefix: CLASSPREFIX,\n interaction: {\n highlight: [{\n type: 'stroke',\n intensity: [0, 0, -15, 0]\n }],\n fade: [{\n type: 'stroke',\n intensity: [0, 0, 15, 0]\n }],\n focus: [{\n type: 'stroke',\n intensity: [0, 0, 15, 0]\n }]\n },\n innerPadding: 0.1,\n transform: {\n type: 'identity'\n },\n transition: {\n effect: 'cubic',\n duration: 1000\n },\n encoding: {\n color: { },\n x: {},\n y: {},\n x0: {},\n y0: {},\n strokeOpacity: {\n value: 0.5\n },\n fillOpacity: {\n value: 0.5\n }\n },\n states: {\n highlight: {\n className: `${CLASSPREFIX}-layer-tick-highlight`\n },\n fadeout: {\n className: `${CLASSPREFIX}-layer-tick-fadeout`\n },\n selected: {\n className: `${CLASSPREFIX}-layer-tick-selected`\n }\n }\n};\n","import { selectElement } from 'muze-utils';\n\n/**\n * Draws ticks by using d3 selection\n * @param {Object} params Contains container element and points\n * @return {Selection} Ticks Selection\n */\nexport default /* istanbul ignore next */ (params) => {\n const { points, container, keyFn, className } = params;\n const mount = selectElement(container);\n const ticks = mount.selectAll('path').data(points, keyFn);\n const ticksEnter = ticks.enter().append('path');\n\n mount.attr('class', className || '');\n ticksEnter.each(function (d) {\n const selection = selectElement(this);\n const enter = d.enter || {};\n Object.entries(enter).forEach(attr => (!isNaN(attr[1]) && selection.attr(attr[0], attr[1])));\n });\n\n ticks.exit().remove();\n return ticks.merge(ticksEnter)\n .each(function (d) {\n const selection = selectElement(this);\n const update = d.update;\n const updateStyle = d.style || {};\n const x0 = update.x0 !== undefined ? update.x0 : update.x;\n const y0 = update.y0 !== undefined ? update.y0 : update.y;\n const path = `M ${update.x} ${update.y} L ${x0} ${y0}`;\n d.className && selection.classed(d.className, true);\n selection.attr('d', path);\n Object.entries(updateStyle).forEach(styleObj => selection.style(styleObj[0], styleObj[1]));\n });\n};\n\n","import { FieldType } from 'muze-utils';\nimport { PointLayer } from '../point';\nimport { defaultConfig } from './default-config';\nimport { ENCODING } from '../../enums/constants';\nimport drawTicks from './renderer';\nimport './styles.scss';\nimport { getAxesScales, getLayerColor, positionPoints, getIndividualClassName } from '../../helpers';\n\n/**\n * This layer is used to create small lines. The orientation of the line is determined by the positional\n * encoding properties x0 and y0. The mark type of the layer is ```tick```.\n *\n * @public\n *\n * @class\n * @module TickLayer\n * @extends BaseLayer\n */\nexport default class TickLayer extends PointLayer {\n\n /**\n *\n *\n * @staticg\n *\n * @memberof TickLayer\n */\n static defaultConfig () {\n return defaultConfig;\n }\n\n /**\n *\n *\n * @static\n *\n * @memberof TickLayer\n */\n static formalName () {\n return 'tick';\n }\n\n /**\n *\n *\n * @static\n *\n * @memberof TickLayer\n */\n static drawFn () {\n return drawTicks;\n }\n\n /**\n *\n *\n *\n * @memberof TickLayer\n */\n elemType () {\n return 'path';\n }\n\n /**\n * Generates an array of objects containing x, y, width and height of the points from the data\n * @param {Array.} data Data Array\n * @param {Object} encoding Config\n * @param {Object} axes Axes object\n * @return {Array.} Array of points\n */\n translatePoints (data, encoding, axes, config = {}) {\n let points = [];\n const {\n xAxis,\n yAxis\n } = getAxesScales(axes);\n const fieldsConfig = this.data().getFieldsConfig();\n const {\n xField,\n yField,\n x0Field,\n y0Field,\n xFieldType,\n yFieldType\n } = this.encodingFieldsInf();\n const isXDim = xFieldType === FieldType.DIMENSION;\n const isYDim = yFieldType === FieldType.DIMENSION;\n const key = isXDim ? ENCODING.X : (isYDim ? ENCODING.Y : null);\n const colorEncoding = encoding.color;\n const colorField = colorEncoding && colorEncoding.field;\n const colorFieldIndex = fieldsConfig[colorField] && fieldsConfig[colorField].index;\n const measurement = this.measurement();\n const colorAxis = axes.color;\n const { x: offsetX, y: offsetY } = config.offset;\n const { x: xSpan, y: ySpan } = config.span;\n for (let i = 0, len = data.length; i < len; i++) {\n let xPx;\n let x0Px;\n let y0Px;\n let yPx;\n const d = data[i];\n const row = d._data;\n if (xField) {\n xPx = xAxis.getScaleValue(d.x) + offsetX;\n x0Px = xPx + xSpan;\n }\n\n if (yField) {\n yPx = yAxis.getScaleValue(d.y) + offsetY;\n y0Px = yPx !== null ? yPx + ySpan : null;\n }\n\n if (!xField) {\n xPx = 0;\n x0Px = measurement.width;\n if (!isNaN(yPx)) {\n yPx += ySpan / 2;\n y0Px = yPx;\n }\n }\n\n if (!yField) {\n yPx = 0;\n y0Px = measurement.height;\n x0Px = xPx += xSpan / 2;\n }\n\n if (x0Field) {\n x0Px = xAxis.getScaleValue(d.x0) + xSpan;\n yPx += ySpan / 2;\n y0Px -= ySpan / 2;\n }\n\n if (y0Field) {\n y0Px = yAxis.getScaleValue(d.y0) + ySpan;\n xPx += xSpan / 2;\n x0Px -= xSpan / 2;\n }\n const style = {};\n const meta = {};\n const { color, rawColor } = getLayerColor({ datum: d, index: i },\n { colorEncoding, colorAxis, colorFieldIndex });\n\n style.stroke = color;\n meta.stateColor = {};\n meta.originalColor = rawColor;\n meta.colorTransform = {};\n if (!isNaN(xPx) && !isNaN(yPx)) {\n const point = {\n enter: {},\n update: {\n x: xPx,\n y: yPx,\n x0: x0Px,\n y0: y0Px\n },\n style,\n _data: row,\n _id: d._id,\n source: row,\n rowId: d._id,\n meta\n };\n point.className = getIndividualClassName(d, i, data, this);\n points.push(point);\n this.cachePoint(d[key], point);\n }\n }\n points = positionPoints(this, points);\n return points;\n }\n\n getMeasurementConfig (offsetX, offsetY, widthSpan, heightSpan) {\n return {\n offset: {\n x: (offsetX || 0),\n y: (offsetY || 0)\n },\n span: {\n x: widthSpan,\n y: heightSpan\n }\n };\n }\n}\n","export const AREA_LAYER = 'area';\nexport const ARC_LAYER = 'arc';\nexport const LINE_LAYER = 'line';\nexport const TEXT_LAYER = 'text';\nexport const POINT_LAYER = 'point';\nexport const BAR_LAYER = 'bar';\nexport const TICK_LAYER = 'tick';\nexport const SIMPLE_LAYER = 'simple';\nexport const BASE_LAYER = 'base';\n","import { isSimpleObject, mergeRecursive, getObjProp } from 'muze-utils';\n\nconst parseLayerDefinition = (sink, definition, layerDef, layerType) => {\n for (const key in definition) {\n if (Object.hasOwnProperty.call(definition, key)) {\n let strs;\n let propValue;\n const def = definition[key];\n if (isSimpleObject(def)) {\n sink[key] = {};\n parseLayerDefinition(sink[key], def, layerDef, layerType);\n } else if (typeof def === 'string' && (strs = def.split('.')) && strs[0] === layerType) {\n propValue = getObjProp(layerDef, ...strs.slice(1, strs.length));\n if (propValue !== undefined) {\n sink[key] = propValue;\n }\n } else {\n sink[key] = def;\n }\n }\n }\n};\n\nconst sanitizeEncoding = (encoding) => {\n // Create object for each encoding value if encoding value is a string\n for (const key in encoding) {\n if (typeof encoding[key] === 'string') {\n encoding[key] = {\n field: encoding[key]\n };\n }\n }\n};\n\n/**\n * Layer Factory creates layers based on the layer type. All types of layers needs to register in\n * the layer factory. For getting a layer instance, getLayer method needs to invoked with the\n * layerType and other arguments. It also registers the definition of composite layers.\n *\n * @public\n *\n * @module LayerFactory\n */\nconst layerFactory = (() => {\n const compositeLayers = {};\n const factoryObj = {\n setLayerRegistry: (reg) => {\n factoryObj._layerRegistry = reg;\n },\n getSerializedConf: (mark, layerDef) => {\n let serializedDefs;\n const defs = compositeLayers[mark];\n const newConf = mergeRecursive({}, layerDef);\n\n // If it is a composite layer then resolve all the definitions of each unit layer\n if (defs) {\n serializedDefs = defs.map((unitLayerDef) => {\n const sDef = {};\n parseLayerDefinition(sDef, unitLayerDef, newConf, mark);\n sanitizeEncoding(sDef.encoding);\n return sDef;\n });\n } else {\n const encoding = newConf.encoding;\n // Create object for each encoding value if encoding value is a string\n sanitizeEncoding(encoding);\n serializedDefs = newConf;\n }\n\n return serializedDefs;\n },\n getLayerInstance: (layerDef, ...params) => {\n const layerRegistry = factoryObj._layerRegistry;\n layerDef = !(layerDef instanceof Array) ? [layerDef] : layerDef;\n const instances = layerDef.map((layerObj) => {\n const layerConstructor = layerRegistry[layerObj.mark];\n return layerConstructor.create(...params);\n });\n return instances.length === 1 ? instances[0] : instances;\n },\n getLayerClass: mark => factoryObj._layerRegistry[mark],\n /**\n * Registers a new composite layer definition in the layer factory.\n *\n * @public\n *\n * @param {string} layerType Mark type of the new composite layer.\n * @param {Array} layerDefs Layer definitions of the composite layer.\n */\n composeLayers: (layerType, layerDefs) => {\n compositeLayers[layerType] = layerDefs;\n },\n sanitizeLayerConfig: (layerDef) => {\n const newConf = mergeRecursive({}, layerDef);\n sanitizeEncoding(newConf.encoding);\n return newConf;\n }\n };\n return factoryObj;\n})();\n\nexport default layerFactory;\n","import layerFactory from './layer-factory';\n\nexport default layerFactory;\n","import { AreaLayer } from './layers/area';\nimport { ArcLayer } from './layers/arc';\nimport { LineLayer } from './layers/line';\nimport { TextLayer } from './layers/text';\nimport { PointLayer } from './layers/point';\nimport { BarLayer } from './layers/bar';\nimport { BaseLayer } from './base-layer';\nimport * as LAYER_TYPES from './enums/layer-types';\nimport { TickLayer } from './layers/tick';\n\nexport const DEFAULT_LAYERS = {\n [LAYER_TYPES.AREA_LAYER]: AreaLayer,\n [LAYER_TYPES.ARC_LAYER]: ArcLayer,\n [LAYER_TYPES.LINE_LAYER]: LineLayer,\n [LAYER_TYPES.TEXT_LAYER]: TextLayer,\n [LAYER_TYPES.POINT_LAYER]: PointLayer,\n [LAYER_TYPES.TICK_LAYER]: TickLayer,\n [LAYER_TYPES.BAR_LAYER]: BarLayer,\n [LAYER_TYPES.BASE_LAYER]: BaseLayer\n};\n","/**\n * This file exports constants that are used as enums in the\n * crosstab group implementation.\n */\n/**\n * Width of the crosstab.\n */\nexport const X = 'x';\n/**\n * Width of the crosstab.\n */\nexport const Y = 'y';\n/**\n * Width of the crosstab.\n */\nexport const WIDTH = 'width';\n\n/**\n * Height of the crosstab.\n */\nexport const HEIGHT = 'height';\n\n/**\n * Field referring to object storing measurement configuration.\n */\nexport const MEASUREMENT = 'measurement';\n\n/**\n * Field referring to object storing configuration properties.\n */\nexport const CONFIG = 'config';\n\n/**\n * Width of visual unit in crosstab.\n */\nexport const MIN_UNIT_WIDTH = 'minUnitWidth';\n\n/**\n * Height of visual unit.\n */\nexport const MIN_UNIT_HEIGHT = 'minUnitHeight';\n\n/**\n * Field to store the array of dimensions to facet by.\n */\nexport const DIMENSIONS = 'dimensions';\n\n/**\n * Field to store array of measures to use as x axis.\n */\nexport const MEASURES = 'measures';\n\n/**\n * Field to store the array of dimensions to facet by.\n */\nexport const DIMENSION = 'dimension';\n\n/**\n * Field to store array of measures to use as x axis.\n */\nexport const MEASURE = 'measure';\n\n/**\n * Flag to specify if model should be pivoted.\n */\nexport const PIVOT = 'pivot';\n\n/**\n * Flag to specify format\n */\nexport const FORMAT = 'format';\n\n/**\n * Mount point where the variable will be hosted\n */\nexport const MOUNT = 'mount';\n\n/**\n * Data update flag\n */\nexport const HAS_DATA_UPDATED = 'hasDataUpdated';\n\n/**\n * Field referring to object storing set of rows\n */\nexport const ROWS = 'rows';\n\n/**\n * Field referring to object storing set of columns\n */\nexport const COLUMNS = 'columns';\n\n/**\n * Field referring to object storing set of columns\n */\nexport const COL = 'col';\n\n/**\n * Field referring to object storing set of rows\n */\nexport const ROW = 'row';\n\n/**\n * Field referring to object storing set of columns\n */\nexport const COLUMN = 'column';\n\n/**\n * Field referring to object storing color field\n */\nexport const COLOR = 'color';\n\n/**\n * Field referring to object storing shape field\n */\nexport const SHAPE = 'shape';\n\n/**\n * Field referring to object storing size field\n */\nexport const SIZE = 'size';\n\n/**\n * Field referring to object storing detail field\n */\nexport const DETAIL = 'detail';\n\n/**\n * Field referring to object storing set of layers\n */\nexport const LAYERS = 'layers';\n\n/**\n * Field referring to object storing the transforms\n */\nexport const TRANSFORM = 'transform';\n\n/**\n * Field referring to object storing the transforms\n */\nexport const ORDINAL = 'ordinal';\n\n/**\n * Field referring to object storing the transforms\n */\nexport const LINEAR = 'linear';\n/**\n * Field referring to object storing the transforms\n */\nexport const LEFT = 'left';\n/**\n * Field referring to object storing the transforms\n */\nexport const RIGHT = 'right';\n/**\n * Field referring to object storing the transforms\n */\nexport const TOP = 'top';\n/**\n * Field referring to object storing the transforms\n */\nexport const BOTTOM = 'bottom';\n\n/**\n * Field referring to object storing the transforms\n */\nexport const RETINAL = 'retinal';\n/**\n * Field referring to object storing the transforms\n */\nexport const CELL = 'cell';\n/**\n * Field referring to object storing the transforms\n */\nexport const X_AXES = 'xAxes';\n/**\n * Field referring to object storing the transforms\n */\nexport const Y_AXES = 'yAxes';\n/**\n * Field referring to object storing the transforms\n */\nexport const ENTRY_CELLS = 'entryCell';\n/**\n * Field referring to object storing the transforms\n */\nexport const INITIALIZED = 'initialized';\n/**\n * Field referring to object storing the transforms\n */\nexport const EXIT_CELLS = 'exitCell';\n/**\n * Field referring to object storing the transforms\n */\nexport const AXIS = 'axis';\n/**\n * Field referring to object storing the transforms\n */\nexport const UNIT = 'unit';\n/**\n * Field referring to object storing the transforms\n */\nexport const UPDATED = 'updated';\n/**\n * Field referring to object storing the transforms\n */\nexport const BEFORE_UPDATE = 'beforeupdate';\n/**\n * Field referring to object storing the transforms\n */\nexport const VALUE_MATRIX = 'valueMatrix';\n/**\n * Field referring to object storing the transforms\n */\nexport const FACET_HEADERS = 'facet-headers';\n/**\n * Field referring to object storing the transforms\n */\nexport const RADIUS = 'radius';\n/**\n * Field referring to object storing the transforms\n */\nexport const ANGLE = 'angle';\n/**\n * Field referring to object storing the transforms\n */\nexport const ARC = 'arc';\n/**\n * Field referring to object storing the transforms\n */\nexport const CARTESIAN = 'cartesian';\n/**\n * Field referring to object storing the transforms\n */\nexport const POLAR = 'polar';\n/**\n * Field referring to object storing the transforms\n */\nexport const CATEGORICAL = 'categorical';\n/**\n * Field referring to object storing the transforms\n */\nexport const TEMPORAL = 'temporal';\n/**\n * Field referring to object storing the transforms\n */\nexport const BAR = 'bar';\n/**\n * Field referring to object storing the transforms\n */\nexport const LINE = 'line';\n/**\n * Field referring to object storing the transforms\n */\nexport const POINT = 'point';\n/**\n * Field referring to object storing the transforms\n */\nexport const PRIMARY = 'Primary';\n/**\n * Field referring to object storing the transforms\n */\nexport const SECONDARY = 'Secondary';\n/**\n * Field referring to object storing the transforms\n */\nexport const BOTH = 'both';\n/**\n * Field referring to object storing the transforms\n */\nexport const INTERACTION = 'interaction';\n/**\n * Field referring to object storing the transforms\n */\nexport const GRID_LINES = 'gridLines';\n/**\n * Field referring to object storing the transforms\n */\nexport const GRID_BANDS = 'gridBands';\n/**\n * Field referring to object storing the transforms\n */\nexport const HEADER = 'header';\n/**\n * Field referring to object storing the transforms\n */\nexport const FACET = 'facet';\n\n","import { ROWS, COLUMNS, COLOR, SHAPE, SIZE, DETAIL, LAYERS, TRANSFORM, CONFIG } from '../enums/constants';\n\n/**\n * This is the local options semantics based on which setters getters are created and reactivity is initiated.\n * This local object is only valid for Artboard.\n * Artboard merges global and local object both to the model\n *\n * Format\n * PROPERTRY_NAME: {\n * value: // default value of the property,\n * meta: {\n * typeCheck: // The setter value will be checked using this. If the value is function then the setter value\n * // is passed as args.\n * typeExpected: // The output of typecheck action will be tested against this. Truthy value will set the\n * // value to the setter\n * sanitizaiton: // Need for sanitization before type is checked\n * }\n * }\n *\n * @module\n */\n\nexport default {\n [CONFIG]: {},\n [ROWS]: {},\n [COLUMNS]: {},\n [COLOR]: {},\n [SHAPE]: {},\n [SIZE]: {},\n [DETAIL]: {},\n [LAYERS]: {},\n [TRANSFORM]: {}\n};\n","import { ERROR_MSG } from 'muze-utils';\n\n/**\n * Interfaces for VisualGroup. Any new VisualGroup has to implement this class.\n * @class SimpleGroup\n */\nclass SimpleGroup {\n\n /**\n * This method is used to set or get the DataModel instance.\n *\n * @param {DataModel | undefined} dataModel Instance of datamodel.\n\n * @memberof SimpleGroup\n */\n data () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * This method is used to set or get the group specific configuration\n * properties\n *\n * @param {Object | undefined} configObj The input configuration.\n * or instance of visual group.\n * @memberof SimpleGroup\n */\n config () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * This method is used to return a serialized representation of the\n * instance's properties.\n *\n * @memberof SimpleGroup\n */\n serialize () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * This method is used to get or set the measurement object which houses\n * layout properties like width and height.\n *\n * @param {Object | undefined} mObj The measurement properties.\n * @memberof SimpleGroup\n */\n measurement () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n}\n\nexport default SimpleGroup;\n","import { ERROR_MSG } from 'muze-utils';\n\n/**\n *\n *\n * @export\n * @class Variable\n */\nexport default class Variable {\n\n /**\n *\n *\n * @memberof Variable\n */\n type () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n *\n *\n * @memberof Variable\n */\n toString () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n}\n","import Variable from './variable';\n\n/**\n * This is a wrapper on top of multiple variables which are of same type but they are shown in the same axis.This is\n * required in case of range plots or ohlc plots where one plot is mapped to multiple measure fields. At that time,\n * we need to create a composed variable from multiple variables. This class just wraps them into one variable instance\n * and provides methods to get the type and other common functionalities which can be performed on a simple variable\n * instance.\n *\n * @public\n * @class ComposeVars\n */\nclass ComposedVars extends Variable {\n\n /**\n * Creates an instance of ComposeVars.\n *\n * @param {Array} texts Array of field names\n */\n constructor (...texts) {\n super(...texts);\n this.vars(texts);\n }\n\n vars (...params) {\n if (params.length) {\n this._vars = params[0];\n return this;\n }\n return this._vars;\n }\n\n data (...dm) {\n if (dm.length) {\n this.vars().forEach(d => d.data(dm[0]));\n return this;\n }\n return this._data;\n }\n\n /**\n * Get all the field names from composed variable instance.\n *\n * @public\n * @return {Array} Array of field names.\n */\n getMembers () {\n const vars = this.vars();\n return vars.map(member => member.getMembers()[0]);\n }\n\n /**\n * Type of field associated with this composed variable.\n *\n * @return {string} Type of variable (Measure/Dimension).\n */\n type () {\n return this.vars()[0].type();\n }\n\n toString () {\n return this.vars().map(d => d.toString()).join(',');\n }\n\n /**\n * Returns the number formatter function of the variable.\n *\n * @return {Function} Number formatter function of the variable.\n */\n numberFormat () {\n return this.vars()[0].numberFormat();\n }\n\n format (values) {\n return this.vars()[0].format(values);\n }\n\n /**\n * Returns the subtype of the fields associated with this variable instance.\n *\n * @public\n * @return {string} Subtype of the variable.\n */\n subtype () {\n return this.vars()[0].subtype();\n }\n\n /**\n * Returns the consecutive minimum difference of the field values.\n *\n * @public\n * @return {number} Minimum consecutive difference.\n */\n getMinDiff () {\n return this.vars()[0].getMinDiff();\n }\n}\n\nexport default ComposedVars;\n","import { DateTimeFormatter } from 'muze-utils';\nimport Variable from './variable';\n\n/**\n * This is a wrapper on top of fields passed in rows or columns in canvas. This is used to get the type of field or\n * get min difference from the field values.\n *\n * @public\n * @class SimpleVariable\n */\nexport default class SimpleVariable extends Variable {\n\n /**\n * Creates an instance of simple variable instance.\n *\n * @param {string} text Field name.\n */\n constructor (text) {\n super();\n this.oneVar(text);\n }\n\n /**\n * Gets the field name associated with this variable instance.\n *\n * @public\n * @return {string} Name of the field.\n */\n oneVar (...oneV) {\n if (oneV.length) {\n this._oneVar = oneV[0];\n return this;\n }\n return this._oneVar;\n }\n\n data (...dm) {\n if (dm.length) {\n this._data = dm[0];\n return this;\n }\n return this._data;\n }\n\n toString () {\n return this.oneVar();\n }\n\n /**\n * Gets the number formatter function of this variable.\n *\n * @public\n * @return {Function} Number formatter function.\n */\n numberFormat () {\n if (this.type() === 'measure') {\n const formatter = this.data().getFieldspace().getMeasure()[this.oneVar()];\n return formatter.numberFormat();\n } return val => val;\n }\n\n format (values) {\n if (values && this.subtype() === 'temporal') {\n const formatter = this.data().getFieldspace().getDimension()[this.oneVar()].schema().format;\n const dtFormat = new DateTimeFormatter(formatter);\n values = values.map(e => dtFormat.getNativeDate(e));\n }\n return values;\n }\n\n /**\n * Return the field names associated with this variable instance.\n *\n * @public\n * @return {Array} Array of fields.\n */\n getMembers () {\n return [this.oneVar()];\n }\n\n /**\n * Returns the type of the variable. Whether it is measure or dimension.\n *\n * @public\n * @return {string} Type of variable.\n */\n type () {\n const fieldDef = this.data().getFieldsConfig()[this.oneVar()].def;\n return fieldDef.type;\n }\n\n /**\n * Returns the subtype of the variable. Subtype can be categorical or temporal. If no subtype is found, then it\n * returns the type of the variable.\n *\n * @public\n * @return {string} Subtype of variable.\n */\n subtype () {\n const fieldDef = this.data().getFieldsConfig()[this.oneVar()].def;\n return fieldDef.subtype || fieldDef.type;\n }\n\n /**\n * Returns the minimum consecutive difference between the data values of this variable.\n *\n * @return {number} Minimum consecutive difference.\n */\n getMinDiff () {\n const fieldSpace = this.data().getFieldspace();\n return fieldSpace.fieldsObj()[this.oneVar()].minimumConsecutiveDifference();\n }\n\n /**\n * Returns true if two variable instances are same.If both variable has the same field names, they are equal.\n *\n * @return {Boolean} Whether two variable instances are same.\n */\n equals (varInst) {\n return this.oneVar() === varInst.oneVar();\n }\n}\n","import { ComposedVars, SimpleVariable } from '../variable';\nimport { DIMENSION, COLUMNS, ROWS, TEMPORAL } from '../enums/constants';\n\n/**\n * Gets the list of fields in a sorted order by measurement and dimension\n *\n * @param {Array} fieldList List of fields in the view\n * @param {Object} fieldMap Mapping of fields in the datamodel\n * @return {Array} fields sorted by measurement and dimensions\n */\nconst orderFields = (fieldArray, type) => {\n const dimensionArr = [[], []];\n const measureArr = [[], []];\n const temporalArr = [[], []];\n const categoricalArr = [[], []];\n\n fieldArray.forEach((fieldList, index) => {\n fieldList.forEach((field) => {\n if (field.type() === DIMENSION) {\n dimensionArr[index].push(field);\n field.subtype() === TEMPORAL ? temporalArr[index].push(field) : categoricalArr[index].push(field);\n } else {\n measureArr[index].push(field);\n }\n });\n });\n\n const numOfMeasures = measureArr[0].length + (measureArr[1] ? measureArr[1].length : 0);\n\n // Single array of fields\n if (!fieldArray[1]) {\n // Push measures to bottom\n measureArr[1] = type === COLUMNS ? measureArr[0] : [];\n // Push measures to left\n measureArr[0] = type !== COLUMNS ? measureArr[0] : [];\n // Bottom and right dimensions empty\n dimensionArr[1] = [];\n // Left and top filled with dimensions\n dimensionArr[0] = dimensionArr[0];\n if (numOfMeasures === 0) {\n const allDimensions = [...dimensionArr[0], ...dimensionArr[1]];\n if (type === COLUMNS) {\n dimensionArr[1] = allDimensions[allDimensions.length - 1] ? [allDimensions[allDimensions.length - 1]]\n : [];\n allDimensions.splice(-1, 1);\n } else {\n dimensionArr[1] = [];\n }\n dimensionArr[0] = [...allDimensions];\n }\n }\n\n if (dimensionArr[0].length && dimensionArr[1].length && numOfMeasures > 0) {\n dimensionArr[0] = [...dimensionArr[0], ...dimensionArr[1]];\n dimensionArr[1] = [];\n }\n return {\n fields: dimensionArr.map((list, i) => (i === 1 ?\n measureArr[i].concat(dimensionArr[i]) : dimensionArr[i].concat(measureArr[i]))),\n dimensions: [...dimensionArr[0], ...dimensionArr[1]],\n measures: [...measureArr[0], ...measureArr[1]],\n temporal: [...temporalArr[0], ...temporalArr[1]],\n categorical: [...categoricalArr[0], ...categoricalArr[1]]\n };\n};\n\n/**\n * Gets the list of normalized fields\n *\n * @param {Array} fields List of fields in the view\n * @param {Object} fieldMap Mapping of fields in the datamodel\n * @return {Array} fields normalized by measurement and dimensions\n */\nconst normalizeFields = (config, type) => {\n const fieldsArr = [];\n const fields = config[type];\n\n if (!(fields[0] instanceof Array)) {\n fieldsArr[0] = fields;\n } else {\n fieldsArr[0] = fields[0] || [];\n fieldsArr[1] = fields[1] || [];\n }\n return fieldsArr;\n};\n\n/**\n *\n *\n * @param {*} fields\n * @param {*} datamodel\n *\n */\nconst convertToVar = (datamodel, fields) => {\n const vars = [];\n\n fields && fields.forEach((field) => {\n if (field instanceof ComposedVars) {\n vars.push(field);\n field.data(datamodel);\n } else {\n vars.push(new SimpleVariable(field).data(datamodel));\n }\n });\n return vars;\n};\n\n/**\n *\n *\n * @param {*} rows\n * @param {*} columns\n * @param {*} datamodel\n *\n */\nexport const transformFields = (datamodel, config) => {\n const [rowsInfo, columnsInfo] = [ROWS, COLUMNS].map((fields) => {\n const normalizedFields = normalizeFields(config, fields);\n const norFields = [convertToVar(datamodel, normalizedFields[0])];\n\n if (normalizedFields[1]) {\n norFields[1] = convertToVar(datamodel, normalizedFields[1]);\n }\n return orderFields(norFields, fields);\n });\n const {\n fields: rows,\n dimensions: rowDimensions,\n measures: rowMeasures,\n temporal: rowTemporalFields,\n categorical: rowCategoricalFields\n } = rowsInfo;\n const {\n fields: columns,\n dimensions: columnDimensions,\n measures: columnMeasures,\n temporal: columnTemporalFields,\n categorical: columnCategoricalFields\n } = columnsInfo;\n return {\n rows,\n rowDimensions,\n rowMeasures,\n rowTemporalFields,\n rowCategoricalFields,\n columns,\n columnTemporalFields,\n columnCategoricalFields,\n columnDimensions,\n columnMeasures\n };\n};\n","import { ERROR_MSG, mergeRecursive } from 'muze-utils';\nimport { transformFields } from './field-sanitizer';\nimport { getHeaderAxisFrom } from '../group-helper/group-utils';\nimport { ROW, COLUMN } from '../enums/constants';\n\n/**\n *\n *\n * @export\n * @class VisualEncoder\n */\nexport default class VisualEncoder {\n\n /**\n *\n *\n * @memberof VisualEncoder\n */\n createAxis () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n *\n *\n * @memberof VisualEncoder\n */\n setCommonDomain () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n *\n *\n * @memberof VisualEncoder\n */\n getLayerConfig () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n fieldInfo (...info) {\n if (info.length) {\n this._fieldInfo = mergeRecursive(this._fieldInfo || {}, info[0]);\n return this;\n }\n return this._fieldInfo;\n }\n\n /**\n *\n *\n * @param {*} datamodel\n * @param {*} config\n *\n * @memberof VisualEncoder\n */\n fieldSanitizer (datamodel, config) {\n this.fieldInfo(transformFields(datamodel, config));\n return this.fieldInfo();\n }\n\n /**\n *\n *\n * @param {*} params\n *\n * @memberof VisualEncoder\n */\n axisFrom (...params) {\n if (params.length) {\n this._axisFrom = params[0];\n return this;\n }\n return this._axisFrom;\n }\n\n /**\n *\n *\n * @param {*} params\n *\n * @memberof VisualEncoder\n */\n headerFrom (...params) {\n if (params.length) {\n this._headerFrom = params[0];\n return this;\n }\n return this.__headerFrom;\n }\n\n /**\n *\n *\n * @param {*} axisFrom\n *\n * @memberof CartesianEncoder\n */\n setAxisAndHeaders (axisFrom = {}, fields) {\n const [rowHeader, rowAxis] = getHeaderAxisFrom(ROW, fields.rows, axisFrom);\n const [colHeader, colAxis] = getHeaderAxisFrom(COLUMN, fields.columns, axisFrom);\n\n this.axisFrom({\n row: rowAxis,\n column: colAxis\n });\n this.headerFrom({\n row: rowHeader,\n column: colHeader\n });\n return this;\n }\n}\n","import { ContinousAxis, BandAxis, TimeAxis, ColorAxis, SizeAxis, ShapeAxis } from '@chartshq/muze-axis';\n\nexport const scaleMaps = {\n linear: ContinousAxis,\n band: BandAxis,\n temporal: TimeAxis,\n size: SizeAxis,\n color: ColorAxis,\n shape: ShapeAxis\n};\n","import { ScaleType } from '@chartshq/muze-axis';\n\n/**\n * Map of DataModel types to associated field types.\n */\nexport const dataTypeScaleMap = {\n dimension: ScaleType.BAND,\n categorical: ScaleType.BAND,\n temporal: ScaleType.TIME,\n measure: ScaleType.LINEAR,\n continuous: ScaleType.LINEAR\n};\n","import { mergeRecursive } from 'muze-utils';\nimport { AxisOrientation } from '@chartshq/muze-axis';\nimport { scaleMaps } from '../enums/scale-maps';\nimport { getAxisType, getAxisKey } from '../group-helper';\nimport { dataTypeScaleMap } from '../data-type-scale-map';\nimport { CATEGORICAL, TEMPORAL, BAR, LINE, POINT, BOTH, Y } from '../enums/constants';\n\n/**\n *\n *\n * @param {*} axisInfo\n * @param {*} field\n * @param {*} axesCreators\n *\n */\nconst getAxisConfig = (axisInfo, field, axesCreators) => {\n let axisOrientation;\n const { index, axisIndex, axisType } = axisInfo;\n const { config, position } = axesCreators;\n const userAxisConfig = config.axes ? (config.axes[axisType] || {}) : {};\n const {\n LEFT,\n RIGHT,\n TOP,\n BOTTOM\n } = AxisOrientation;\n const allOrientations = axisType === Y ? [LEFT, RIGHT] : [TOP, BOTTOM];\n\n if (position === BOTH) {\n axisOrientation = allOrientations[axisIndex];\n } else {\n axisOrientation = position;\n }\n const axisConfig = {\n id: `${axisType}-${index}-${axisIndex}`,\n name: field.toString(),\n field: field.toString(),\n numberFormat: field.numberFormat(),\n orientation: axisOrientation,\n showAxisName: true,\n show: true,\n type: dataTypeScaleMap[field.subtype()]\n };\n userAxisConfig.tickValues = field.format(userAxisConfig.tickValues);\n userAxisConfig.domain = field.format(userAxisConfig.domain);\n\n return mergeRecursive(axisConfig, userAxisConfig);\n};\n\n/**\n *\n *\n * @param {*} axisInfo\n * @param {*} field\n * @param {*} axesCreators\n *\n */\nconst createSimpleAxis = (axisConfig, field, axesCreators) => {\n const { labelManager } = axesCreators;\n const Cls = scaleMaps[dataTypeScaleMap[field.subtype()]];\n const simpleAxis = new Cls(axisConfig, { labelManager });\n return simpleAxis;\n};\n\nexport const getAdjustedDomain = (max, min) => {\n const y1ratio = max[0] / (max[0] - min[0]);\n const y2ratio = max[1] / (max[1] - min[1]);\n\n // adjust min/max values for positive negative values zero line etc\n let allSameSign = false;\n\n // if all numbers are positive set floor to zero\n if (min[0] > 0 && min[1] > 0 && min[1] > 0 && max[1] > 0) {\n allSameSign = true;\n min[0] = 0;\n min[1] = 0;\n }\n\n // if all numbers are negative set ceiling to zero\n if (min[0] < 0 && min[1] < 0 && min[1] < 0 && max[1] < 0) {\n allSameSign = true;\n max[0] = 0;\n max[1] = 0;\n }\n\n // align zero line if necessary\n if (!allSameSign && y1ratio !== y2ratio) {\n if (y1ratio < y2ratio) {\n // adjust min[1]\n min[1] = min[0] / max[0] * max[1];\n } else {\n // adjust min[0]\n min[0] = min[1] / max[1] * max[0];\n }\n }\n return [\n [min[0], max[0]],\n [min[1], max[1]]\n ];\n};\n\n/**\n *\n *\n * @param {*} axisType\n * @param {*} fieldInfo\n * @param {*} axesCreators\n * @param {*} groupAxes\n *\n */\nexport const generateAxisFromMap = (axisType, fieldInfo, axesCreators, axesInfo) => {\n let axisKey;\n const { groupAxes, valueParser } = axesInfo;\n const currentAxes = [];\n const { fields, index } = fieldInfo;\n const { cacheMaps } = axesCreators;\n const map = cacheMaps[`${axisType}AxesMap`];\n\n const commonAxisKey = getAxisKey(axisType, index);\n fields.forEach((field, axisIndex) => {\n axisKey = getAxisKey(axisType, index, axisIndex, dataTypeScaleMap[field.subtype()]);\n const axisConfig = getAxisConfig({ index, axisIndex, axisType }, field, axesCreators);\n\n let axis;\n if (!map.has(axisKey)) {\n axis = createSimpleAxis(axisConfig, field, axesCreators);\n } else {\n axis = map.get(axisKey);\n axis._rotationLock = false;\n axis.config(axisConfig);\n axisConfig.domain ? axis.domain(axisConfig.domain) : axis.resetDomain();\n }\n axis.valueParser(valueParser);\n currentAxes.push(axis);\n map.set(axisKey, axis);\n });\n\n if (currentAxes.length) {\n map.set(commonAxisKey, currentAxes);\n groupAxes.add(commonAxisKey);\n }\n\n return currentAxes;\n};\n\n/**\n *\n *\n * @memberof MatrixResolver\n */\nexport const mutateAxesFromMap = (cacheMaps, axes) => {\n const {\n xAxesMap,\n yAxesMap\n } = cacheMaps;\n const {\n x: xAxisSet,\n y: yAxisSet\n } = axes;\n const xAxes = [];\n const yAxes = [];\n\n xAxisSet.forEach((axisId) => {\n const xAxis = xAxesMap.get(axisId);\n xAxes.push(xAxis);\n });\n yAxisSet.forEach((axisId) => {\n const yAxis = yAxesMap.get(axisId);\n yAxes.push(yAxis);\n });\n return {\n xAxes, yAxes\n };\n};\n\n/**\n * return a default mark based on predefined set of rules of type and subtype of the fields\n *\n * @param {string} colFieldType dimension/measure - temporal/ordinal/nominal\n * @param {string} rowFieldType dimension/measure - temporal/ordinal/nominal\n * @return {Object} return mark type\n */\nexport const getDefaultMark = (colFieldType, rowFieldType) => {\n let mark;\n\n if (colFieldType === CATEGORICAL || rowFieldType === CATEGORICAL) {\n mark = BAR;\n } else if (colFieldType === TEMPORAL || rowFieldType === TEMPORAL) {\n mark = LINE;\n } else {\n mark = POINT;\n }\n\n return mark;\n};\n\n/**\n *\n *\n * @param {*} axesCreators\n * @param {*} [fieldInfo=[]]\n *\n */\nexport const createRetinalAxis = (axesCreators, fieldProps = {}) => {\n const { axisType, fieldsConfig } = axesCreators;\n const field = fieldProps.field;\n const axis = [];\n const Cls = scaleMaps[axisType];\n\n fieldProps.type = fieldProps.type ? fieldProps.type : getAxisType(fieldsConfig, field || null);\n axis.push(new Cls(fieldProps));\n return axis;\n};\n\n/**\n *\n *\n * @param {*} arr\n * @param {*} val\n *\n */\nexport const getIndex = (arr, val) => {\n let i = 0;\n let arrIndex = -1;\n\n while (arrIndex === -1 && i < arr.length) {\n if (arr[i].toString() === val.toString()) {\n arrIndex = i;\n }\n i++;\n }\n return arrIndex;\n};\n\n/**\n *\n *\n * @param {*} colFields\n * @param {*} rowFields\n * @param {*} userLayerConfig\n *\n * @memberof CartesianEncoder\n */\nexport const getLayerConfFromFields = (colFields, rowFields, userLayerConfig) => userLayerConfig.filter((conf) => {\n const userConf = conf instanceof Array ? conf : [conf];\n const encodingArr = [].concat(...userConf.map(d => d.encoding).filter(d => d !== undefined));\n\n if (!encodingArr.length) {\n return true;\n }\n\n const xFields = [].concat(...encodingArr.map(d => [d.x && d.x.field, d.x0 && d.x0.field]))\n .filter(d => d !== undefined && d !== null);\n const yFields = [].concat(...encodingArr.map(d => [d.y && d.y.field, d.y0 && d.y0.field]))\n .filter(d => d !== undefined && d !== null);\n\n if (!xFields.length && !yFields.length) {\n return true;\n }\n\n const colFieldExist = xFields.length ? xFields.every(d => colFields.indexOf(d) !== -1) : false;\n const rowFieldExist = yFields.length ? yFields.every(d => rowFields.indexOf(d) !== -1) : false;\n if (xFields.length && yFields.length) {\n return colFieldExist && rowFieldExist;\n }\n return colFieldExist || rowFieldExist;\n});\n","import { layerFactory } from '@chartshq/visual-layer';\nimport { mergeRecursive, STATE_NAMESPACES, unionDomain } from 'muze-utils';\nimport {\n generateAxisFromMap,\n getDefaultMark,\n getIndex,\n getLayerConfFromFields,\n getAdjustedDomain\n} from './encoder-helper';\nimport { retriveDomainFromData } from '../group-helper';\n\nimport { ROW, COLUMN, COL, LEFT, TOP, CARTESIAN, MEASURE, BOTH, X, Y } from '../enums/constants';\nimport VisualEncoder from './visual-encoder';\n\n/**\n *\n *\n * @export\n * @class CartesianEncoder\n * @extends {VisualEncoder}\n */\nexport default class CartesianEncoder extends VisualEncoder {\n\n /**\n *\n *\n *\n * @memberof CartesianEncoder\n */\n static type () {\n return CARTESIAN;\n }\n\n /**\n *\n *\n * @param {*} axesCreators\n * @param {*} fieldInfo\n *\n * @memberof CartesianEncoder\n */\n createAxis (axesCreators, fieldInfo, context) {\n const geomCellAxes = {};\n const {\n axes\n } = axesCreators;\n const {\n projections,\n indices\n } = fieldInfo;\n const {\n rowFields,\n columnFields\n } = projections;\n const {\n rowIndex,\n columnIndex\n } = indices;\n const axisFields = [{\n fields: rowFields,\n index: rowIndex\n }, {\n fields: columnFields,\n index: columnIndex\n }];\n const xAxes = axes.x || [];\n const yAxes = axes.y || [];\n\n [rowFields, columnFields].forEach((fields, i) => {\n const type = i === 0 ? ROW : COLUMN;\n const axis = i === 0 ? Y : X;\n\n if (fields.length > 1) {\n axesCreators.position = BOTH;\n } else {\n axesCreators.position = this.axisFrom()[type];\n }\n geomCellAxes[axis] = generateAxisFromMap(axis, axisFields[i], axesCreators, {\n groupAxes: axis === X ? xAxes : yAxes,\n valueParser: context.resolver.valueParser()\n });\n });\n return geomCellAxes;\n }\n\n updateDomains (store, axes) {\n const xAxes = axes.x;\n const yAxes = axes.y;\n store.model.lock();\n for (let i = 0; i < xAxes.length; i++) {\n for (let j = 0; j < xAxes[i].length; j++) {\n store.commit(`${STATE_NAMESPACES.GROUP_GLOBAL_NAMESPACE}.domain.x.${0}${i}0`, xAxes[i][j].domain());\n }\n }\n for (let i = 0; i < yAxes.length; i++) {\n for (let j = 0; j < yAxes[i].length; j++) {\n store.commit(`${STATE_NAMESPACES.GROUP_GLOBAL_NAMESPACE}.domain.y.${i}${0}0`, yAxes[i][j].domain());\n yAxes[i][j]._domainLock = false;\n }\n }\n\n store.model.unlock();\n }\n\n unionUnitDomains (context) {\n const store = context.store();\n const unitDomains = store.get(`${STATE_NAMESPACES.UNIT_GLOBAL_NAMESPACE}.domain`);\n const resolver = context.resolver();\n const units = resolver.units();\n const domains = {\n 0: {},\n 1: {}\n };\n\n for (let rIdx = 0, len = units.length; rIdx < len; rIdx++) {\n const unitsArr = units[rIdx];\n for (let cIdx = 0, len2 = unitsArr.length; cIdx < len2; cIdx++) {\n const unit = unitsArr[cIdx];\n const axisFields = unit.fields();\n [axisFields.x, axisFields.y].forEach((fieldArr, axisType) => {\n fieldArr.forEach((field, axisIndex) => {\n const key = !axisType ? `0${cIdx}${axisIndex}` : `${rIdx}0${axisIndex}`;\n const dom = unitDomains[`${rIdx}${cIdx}`];\n if (dom && Object.keys(dom).length !== 0) {\n domains[axisType][key] = unionDomain([(domains[axisType] && domains[axisType][key]) || [],\n dom[`${field}`]], field.subtype());\n }\n });\n });\n }\n }\n\n const { x: xAxes, y: yAxes } = resolver.axes();\n store.model.lock();\n [xAxes, yAxes].forEach((axesArr, axisType) => {\n axesArr.forEach((axes, idx) => {\n const min = [];\n const max = [];\n let domain = [];\n let adjustedDomain = [];\n if (axes.length > 1 && axes[0].constructor.type() === 'linear' && axes[0].config().alignZeroLine) {\n axes.forEach((axis, i) => {\n const key = !axisType ? `0${idx}${i}` : `${idx}0${i}`;\n domain = domains[axisType][key];\n min[i] = domain[0];\n max[i] = domain[1];\n });\n adjustedDomain = getAdjustedDomain(max, min);\n }\n\n axes.forEach((axis, index) => {\n const key = !axisType ? `0${idx}${index}` : `${idx}0${index}`;\n domain = adjustedDomain[index] || domains[axisType][key];\n axis.domain(domain);\n const type = !axisType ? 'x' : 'y';\n store.commit(`${STATE_NAMESPACES.GROUP_GLOBAL_NAMESPACE}.domain.${type}.${idx}${index}`, domain);\n });\n });\n });\n store.model.unlock();\n }\n\n /**\n *\n *\n * @param {*} fields\n *\n * @memberof CartesianEncoder\n */\n getFacetsAndProjections (fields, type) {\n let facets = [];\n let projections = [];\n let counter = 0;\n const primaryFacets = [];\n const secondaryFacets = [];\n const primaryFields = fields[0];\n const secondaryFields = fields[1];\n const primaryLen = primaryFields.length;\n const secondaryLen = secondaryFields.length;\n const axisFrom = this.axisFrom();\n\n for (let i = 0; i < primaryLen; i++) {\n let projArr = [primaryFields[i]];\n const primaryField = primaryFields[i];\n\n if (primaryField.type() === MEASURE) {\n const secondaryField = secondaryFields[counter];\n if (secondaryField && secondaryField.type() === MEASURE) {\n counter++;\n projArr = [primaryField, secondaryField];\n }\n projections.push(projArr);\n } else {\n facets.push(primaryField);\n primaryFacets.push(primaryField);\n }\n }\n if (secondaryLen > counter) {\n for (let i = counter; i < secondaryLen; i++) {\n const secondaryField = secondaryFields[i];\n const projArr = [secondaryField];\n if (secondaryField.type() === MEASURE) {\n projections.push(projArr);\n } else {\n facets.push(secondaryField);\n secondaryFacets.push(secondaryField);\n }\n }\n }\n if ((primaryFacets.length || secondaryFacets.length) && !projections.length) {\n type = type === COL ? COLUMN : type;\n if ((axisFrom[type] === LEFT || axisFrom[type] === TOP) && primaryFacets.length) {\n const axisFromIndex = primaryFacets.length - 1;\n const facet = primaryFacets[axisFromIndex];\n projections = [[facet]];\n const existIndex = getIndex(secondaryFacets, facet);\n if (existIndex > -1) {\n projections = [[facet, facet]];\n secondaryFacets.splice(existIndex, 1);\n }\n primaryFacets.splice(axisFromIndex, 1);\n } else {\n const axisFromIndex = 0;\n const facet = secondaryFacets[axisFromIndex];\n projections = [[facet]];\n const existIndex = getIndex(primaryFacets, facet);\n if (existIndex > -1) {\n projections = [[facet, facet]];\n primaryFacets.splice(existIndex, 1);\n }\n secondaryFacets.splice(axisFromIndex, 1);\n }\n }\n\n facets = [...primaryFacets, ...secondaryFacets];\n facets = facets.filter((el, index, self) => index === self.findIndex(t => (t.toString() === el.toString())));\n return {\n facets,\n projections\n };\n }\n\n /**\n *\n *\n * @param {*} datamodel\n * @param {*} config\n *\n * @memberof CartesianEncoder\n */\n fieldSanitizer (datamodel, config) {\n return super.fieldSanitizer(datamodel, config);\n }\n\n /**\n *\n *\n * @param {*} datamodel\n *\n * @memberof CartesianEncoder\n */\n getRetinalFieldsDomain (dataModels, encoding) {\n const groupedModel = dataModels.groupedModel;\n const domains = {};\n for (const key in encoding) {\n if ({}.hasOwnProperty.call(encoding, key)) {\n const encodingObj = encoding[key];\n const field = encodingObj.field;\n if (!encodingObj.domain && field) {\n const domain = retriveDomainFromData(groupedModel, field);\n domains[field] = domain;\n }\n }\n }\n return domains;\n }\n\n /**\n *\n *\n * @param {*} layerArray\n * @memberof CartesianEncoder\n */\n serializeLayerConfig (layerArray) {\n const serializedLayers = [];\n // let currentLayerIndex = 0;\n layerArray.length && layerArray.forEach((layer, i) => {\n const def = layerFactory.sanitizeLayerConfig(layer);\n def.order = i;\n serializedLayers.push(def);\n });\n return serializedLayers;\n }\n\n /**\n *\n *\n * @param {*} fields\n * @param {*} userLayerConfig\n *\n * @memberof CartesianEncoder\n */\n getLayerConfig (fields, userLayerConfig) {\n const layerConfig = [];\n const {\n columnFields,\n rowFields\n } = fields;\n\n // let currentLayerIndex = 0;\n columnFields.forEach((colField) => {\n const colFieldName = colField.toString();\n rowFields.forEach((rowField) => {\n let configs = [];\n const rowFieldName = rowField.toString();\n const encoding = {\n x: {\n field: colFieldName\n },\n y: {\n field: rowFieldName\n }\n };\n const rowFieldType = rowField.subtype();\n const colFieldType = colField.subtype();\n const mark = getDefaultMark(colFieldType, rowFieldType);\n\n const defConfigs = [{\n mark,\n def: {\n mark,\n encoding\n }\n }];\n\n const layerConfigs = getLayerConfFromFields(colField.getMembers(),\n rowField.getMembers(), userLayerConfig || []);\n if (layerConfigs.length) {\n configs = layerConfigs.map((layerConf) => {\n const mergedLayerConf = mergeRecursive(mergeRecursive({}, defConfigs[0].def), layerConf);\n const serializedLayerConfig = layerFactory.getSerializedConf(mergedLayerConf.mark,\n mergedLayerConf);\n return {\n mark: mergedLayerConf.mark,\n order: mergedLayerConf.order,\n def: serializedLayerConfig\n };\n });\n } else {\n configs = defConfigs;\n }\n\n layerConfig.push(...configs);\n });\n });\n return layerConfig;\n }\n}\n","import { layerFactory } from '@chartshq/visual-layer';\nimport { mergeRecursive, STATE_NAMESPACES } from 'muze-utils';\nimport VisualEncoder from './visual-encoder';\nimport { RADIUS, ANGLE, SIZE, MEASURE, ARC, POLAR, COLOR } from '../enums/constants';\n/**\n *\n *\n * @export\n * @class PolarEncoder\n * @extends {VisualEncoder}\n */\nexport default class PolarEncoder extends VisualEncoder {\n\n /**\n *\n *\n * @param {*} axesCreators\n * @param {*} fieldInfo\n *\n * @memberof PolarEncoder\n */\n createAxis (axesCreators, fieldInfo) {\n const {\n axes\n } = axesCreators;\n const geomCellAxes = axes;\n const {\n indices\n } = fieldInfo;\n const {\n rowIndex,\n columnIndex\n } = indices;\n // Dummy axes for polar, to create blank cells\n const pieAxes = geomCellAxes.pie || [];\n\n pieAxes[rowIndex] = pieAxes[rowIndex] || [];\n pieAxes[rowIndex][columnIndex] = [];\n\n geomCellAxes.pie = pieAxes;\n geomCellAxes.x = null;\n geomCellAxes.y = null;\n\n return geomCellAxes;\n }\n\n /**\n *\n *\n * @param {*} fields\n *\n * @memberof CartesianEncoder\n */\n getFacetsAndProjections (fields) {\n let counter = 0;\n const facets = [];\n const projections = [];\n const primaryFields = fields[0];\n const secondaryFields = fields[1];\n const primaryLen = primaryFields.length;\n const secondaryLen = secondaryFields.length;\n\n for (let i = 0; i < primaryLen; i++) {\n const primaryField = primaryFields[i];\n if (primaryField.type() === MEASURE) {\n const secondaryField = secondaryFields[counter++];\n const projArr = secondaryField ? [primaryField, secondaryField] : [primaryField];\n projections.push(projArr);\n } else {\n facets.push(primaryField);\n }\n }\n if (secondaryLen > counter) {\n for (let i = counter; i < secondaryLen; i++) {\n const secondaryField = secondaryFields[i];\n const projArr = [secondaryField];\n if (secondaryField.type() === MEASURE) {\n projections.push(projArr);\n } else {\n facets.push(secondaryField);\n }\n }\n }\n return {\n facets,\n projections\n };\n }\n\n unionUnitDomains (context) {\n const store = context.store();\n const domains = store.get(`${STATE_NAMESPACES.UNIT_GLOBAL_NAMESPACE}.domain`);\n const domainProps = {\n radius: [Infinity, -Infinity]\n };\n Object.values(domains).forEach((domainVal) => {\n for (const key in domainVal) {\n domainProps[key] = [Math.min(domainVal[key][0], domainProps[key][0]),\n Math.min(domainVal[key][1], domainProps[key][1])];\n }\n });\n store.commit(`${STATE_NAMESPACES.GROUP_GLOBAL_NAMESPACE}.domain.radius`, domainProps.radius);\n }\n\n /**\n *\n *\n *\n * @memberof PolarEncoder\n */\n setCommonDomain () {\n // No domain to be set\n return this;\n }\n\n /**\n *\n *\n *\n * @memberof PolarEncoder\n */\n static type () {\n return POLAR;\n }\n\n layers (...layers) {\n if (layers.length) {\n this._layers = layers[0];\n return this;\n }\n return this._layers;\n }\n\n /**\n *\n *\n * @param {*} datamodel\n * @param {*} config\n * @memberof PolarEncoder\n */\n fieldSanitizer (datamodel, config) {\n let sanitizedRows = [[], []];\n let sanitizedColumns = [[], []];\n const fields = super.fieldSanitizer(datamodel, config);\n const {\n layers\n } = config;\n const {\n rows,\n columns\n } = fields;\n const layer = layers[0];\n const encoding = layer.encoding;\n const radius = encoding && encoding.radius ? encoding.radius.field : null;\n const angle = encoding && encoding.angle ? encoding.angle.field : null;\n const sanitizedFields = [sanitizedRows, sanitizedColumns];\n\n [rows, columns].forEach((fieldType, typeIndex) => {\n fieldType.forEach((fieldSet, i) => fieldSet.forEach((field) => {\n if (field.toString() !== radius && field.toString() !== angle && field.type() !== MEASURE) {\n sanitizedFields[typeIndex][i].push(field);\n }\n }));\n });\n sanitizedColumns = [...new Set(sanitizedColumns)];\n sanitizedRows = [...new Set(sanitizedRows)];\n this.fieldInfo({ rows: sanitizedRows, columns: sanitizedColumns });\n return this.fieldInfo();\n }\n\n getRetinalFieldsDomain (dataModels, encoding, facetFields, groupBy) {\n let sizeField;\n let colorField;\n const fields = [];\n const layers = this.layers();\n const dataModel = dataModels.groupedModel;\n const fieldsConfig = dataModel.getFieldsConfig();\n const domains = {};\n if (layers && layers[0]) {\n const layer = layers[0];\n const layerEncoding = layer.def.encoding || {};\n\n [RADIUS, ANGLE, SIZE, COLOR].forEach((encType) => {\n const field = layerEncoding[encType] ? layerEncoding[encType].field : '';\n const measureField = fieldsConfig[field] && fieldsConfig[field].def.type === MEASURE;\n if (encType === SIZE && measureField) {\n sizeField = field;\n }\n if (encType === COLOR) {\n colorField = field;\n }\n fieldsConfig[field] && !measureField && fields.push(field);\n });\n }\n\n if (sizeField) {\n domains[sizeField] = dataModel.groupBy(facetFields, {\n [sizeField]: 'sum'\n }).getFieldspace().fieldsObj()[sizeField].domain();\n }\n\n if (colorField) {\n const dm = dataModel.groupBy([...facetFields, ...fields], groupBy.measures);\n domains[colorField] = dm.getFieldspace().fieldsObj()[colorField].domain();\n }\n return domains;\n }\n /**\n *\n *\n * @param {*} fields\n * @param {*} userLayerConfig\n *\n * @memberof PolarEncoder\n */\n getLayerConfig (fields, userLayerConfig) {\n let layerConfig = [];\n const {\n columnFields,\n rowFields\n } = fields;\n const allFields = [...columnFields, ...rowFields];\n\n allFields.forEach(() => {\n const encoding = {};\n let config = {\n mark: ARC,\n def: {\n encoding\n }\n };\n if (userLayerConfig && userLayerConfig.length > 0) {\n config = mergeRecursive(config, userLayerConfig[0]);\n }\n layerConfig.push(config);\n });\n if (layerConfig.length === 0) {\n layerConfig = userLayerConfig;\n }\n\n this.layers(layerConfig);\n return layerConfig;\n }\n\n /**\n *\n *\n * @param {*} layerArray\n *\n * @memberof PolarEncoder\n */\n serializeLayerConfig (layerArray) {\n const serializedLayers = [];\n\n layerArray.length && layerArray.forEach((layer) => {\n const def = layerFactory.getSerializedConf(layer.mark, layer);\n serializedLayers.push({\n mark: layer.mark,\n def\n });\n });\n return serializedLayers;\n }\n}\n","import { createRetinalAxis } from './encoder-helper';\nimport { COLOR, SHAPE, SIZE } from '../enums/constants';\nimport VisualEncoder from './visual-encoder';\n\n/**\n *\n *\n * @export\n * @class RetinalEncoder\n * @extends {VisualEncoder}\n */\nexport default class RetinalEncoder extends VisualEncoder {\n\n /**\n *\n *\n * @param {*} axesCreators\n *\n * @memberof RetinalEncoder\n */\n createAxis (axesCreators) {\n const { fieldsConfig, config } = axesCreators;\n const newAxes = {};\n\n [COLOR, SHAPE, SIZE].forEach((axisType) => {\n newAxes[`${axisType}`] = createRetinalAxis({ axisType, fieldsConfig }, config[axisType]);\n });\n return newAxes;\n }\n\n /**\n *\n *\n * @static\n *\n * @memberof RetinalEncoder\n */\n static type () {\n return 'retinal';\n }\n\n /**\n *\n *\n * @param {*} fields\n * @param {*} userLayerConfig\n *\n * @memberof RetinalEncoder\n */\n getLayerConfig (encodingConfigs, userLayerConfig) {\n const layerConfig = [];\n userLayerConfig.forEach((e) => {\n const config = e;\n [COLOR, SHAPE, SIZE].forEach((axis) => {\n if (encodingConfigs[axis] && encodingConfigs[axis].field) {\n const def = config.def;\n if (config.def instanceof Array) {\n def.forEach((conf) => {\n conf.encoding = conf.encoding || {};\n !conf.encoding[axis] && (conf.encoding[axis] = {});\n conf.encoding[axis].field = encodingConfigs[axis].field;\n });\n } else {\n def.encoding = def.encoding || {};\n !def.encoding[axis] && (def.encoding[axis] = {});\n def.encoding[axis].field = encodingConfigs[axis].field;\n }\n }\n });\n layerConfig.push(config);\n });\n return layerConfig;\n }\n\n /**\n *\n *\n * @param {*} context\n *\n * @memberof RetinalEncoder\n */\n setCommonDomain (context) {\n const { domains, axes, encoding } = context;\n\n Object.entries(encoding).forEach((enc) => {\n if (enc[1] && enc[1].field) {\n const encType = enc[0];\n const field = enc[1].field;\n\n if (field) {\n axes[encType].forEach((axis) => {\n const domain = domains[field];\n !enc[1].domain && axis.updateDomain(domain);\n });\n }\n }\n });\n return axes;\n }\n}\n","import { Store, FieldType } from 'muze-utils';\nimport { DATA_UPDATE_COUNTER } from '../enums/defaults';\nimport { Variable } from '../variable';\nimport { PolarEncoder, CartesianEncoder } from '../encoder';\nimport {\n DIMENSION,\n MEASURE,\n ORDINAL,\n LINEAR,\n ROW,\n COLUMN,\n COL,\n LEFT,\n RIGHT,\n TOP,\n BOTTOM,\n COLOR,\n SIZE,\n TEMPORAL,\n SHAPE,\n INTERACTION,\n GRID_LINES,\n GRID_BANDS,\n HEADER,\n FACET,\n X,\n Y,\n POLAR\n} from '../enums/constants';\n\n/**\n * Creates an instance of a store which contains the arguments to make the class reactive\n *\n * @return {Object} instance of store\n * @memberof VisualGroup\n */\nexport const initStore = () => new Store({\n [DATA_UPDATE_COUNTER]: DATA_UPDATE_COUNTER\n});\n\n/**\n *\n *\n * @param {*} arr\n */\nexport const isDistributionEqual = arr => [...arr[0], ...arr[1]].reduce((isEqual, row) => {\n const rowType = row.type();\n\n if (rowType === MEASURE || rowType === TEMPORAL) {\n isEqual = true;\n }\n return isEqual;\n}, false);\n\n/**\n *\n *\n */\nexport const initializeCacheMaps = () => ({\n cellMap: new Map(),\n xAxesMap: new Map(),\n yAxesMap: new Map(),\n entryCellMap: new Map(),\n exitCellMap: new Map()\n});\n\n/**\n *\n *\n * @param {*} axisName\n * @param {*} id\n */\nexport const getAxisKey = (axisName, ...params) => `${axisName}-axis-${params.join('-')}`;\n\n/**\n *\n *\n * @param {*} rowId\n * @param {*} columnId\n */\nexport const getCellKey = (rowId, columnId) => `cell-${rowId}-${columnId}`;\n\n/**\n *\n *\n * @param {*} config\n *\n */\nexport const extractUnitConfig = (config) => {\n const unitConfig = {};\n const attrNames = [INTERACTION, GRID_LINES, GRID_BANDS];\n\n attrNames.forEach((attr) => {\n if (config[attr] !== undefined) {\n unitConfig[attr] = config[attr];\n }\n });\n return unitConfig;\n};\n\n/**\n *\n *\n * @param {*} headers\n * @param {*} index\n * @param {*} rowLength\n *\n * @memberof MatrixResolver\n */\nexport const getHeaderText = (headers, index, rowLength) => {\n let header = '';\n\n if (index === rowLength - 1 && headers.length > rowLength) {\n for (let i = index; i < headers.length - 1; i++) {\n header += `${headers[i].toString()} / `;\n }\n header += headers[headers.length - 1].toString();\n return header;\n } else if (headers[index]) {\n return headers[index].toString();\n }\n return '';\n};\n\n/**\n *\n *\n * @param {*} fields\n * @param {*} fieldHeaders\n * @param {*} TextCell\n * @param {*} labelManager\n *\n */\nexport const headerCreator = (fields, fieldHeaders, TextCell, { classPrefix, labelManager }) => {\n const headers = fields.length > 0 ? fields[0].map((cell, i) => new TextCell({\n type: HEADER,\n className: `${classPrefix}-grid-headers`\n }, {\n labelManager\n }).source(getHeaderText(fieldHeaders, i, fields[0].length))\n .config({ show: cell.config().show })) : [];\n return headers;\n};\n\n/**\n *\n *\n * @param {*} variable\n * @param {*} allFields\n *\n */\nexport const findInGroup = (variable, allFields) => {\n let channel = null;\n\n [COLOR, SIZE, SHAPE].forEach((e) => {\n if (this.store.get(e) && variable === this.store.get(e)[0]) {\n channel = e;\n }\n });\n\n if (channel) {\n return { channel };\n }\n [ROW, COL].forEach((facetType) => {\n allFields[`${facetType}Facets`].forEach((e) => {\n if (e.toString() === variable) {\n channel = { channel: FACET, type: facetType === COL ? COLUMN : ROW };\n }\n });\n });\n\n if (channel) {\n return channel;\n }\n\n [ROW, COL].forEach((projType) => {\n allFields[`${projType}Projections`].forEach((e) => {\n e.forEach((m) => {\n if (m.toString() === variable) {\n channel = projType === COL ? X : Y;\n }\n });\n });\n });\n\n if (channel) {\n return { channel };\n }\n return null;\n};\n\n/**\n *\n *\n * @param {*} datamodel\n * @param {*} field\n */\nexport const getAxisType = (fieldsConfig, field) => {\n let fieldType = ORDINAL;\n\n if (field && fieldsConfig[field].def.type !== DIMENSION) {\n fieldType = LINEAR;\n }\n return fieldType;\n};\n\n/**\n *\n *\n * @param {*} datamodel\n * @param {*} fieldName\n *\n */\nexport const retriveDomainFromData = (datamodel, fieldName) => {\n const field = datamodel.getFieldspace().fields.find(d => d.name() === fieldName.toString());\n return field.domain();\n};\n\n/**\n *\n *\n * @memberof MatrixResolver\n */\nexport const mutateAxesFromMap = (cacheMaps, axes) => {\n let xAxes = null;\n let yAxes = null;\n const {\n xAxesMap,\n yAxesMap\n } = cacheMaps;\n const {\n x: xAxisSet,\n y: yAxisSet\n } = axes;\n\n xAxisSet && xAxisSet.forEach((axisId) => {\n const xAxis = xAxesMap.get(axisId);\n xAxes = xAxes || [];\n xAxes.push(xAxis);\n });\n\n yAxisSet && yAxisSet.forEach((axisId) => {\n const yAxis = yAxesMap.get(axisId);\n yAxes = yAxes || [];\n yAxes.push(yAxis);\n });\n\n return {\n xAxes, yAxes\n };\n};\n\n/**\n *\n *\n * @param {*} layers\n *\n */\nexport const getEncoder = (layers) => {\n let encoder = new CartesianEncoder();\n\n if (layers.length) {\n // Figuring out the kind of layers the group will have\n encoder = layers.every(e => e.mark === 'arc') ? new PolarEncoder() : encoder;\n }\n return encoder;\n};\n\n/**\n *\n *\n * @param {*} type\n * @param {*} fields\n * @param {*} userAxisFromConfig\n *\n */\nexport const getHeaderAxisFrom = (type, fields, userAxisFromConfig) => {\n let axisFrom = userAxisFromConfig[type];\n let headerFrom = '';\n const options = type === ROW ? [LEFT, RIGHT] : [BOTTOM, TOP];\n const [firstField, secondField] = fields;\n const firstFieldType = i => (firstField.length ? firstField[i].type() : null);\n const secondFieldType = i => (secondField.length ? secondField[i].type() : null);\n\n if (firstFieldType(firstField.length - 1) === DIMENSION && secondFieldType(0) === DIMENSION) {\n headerFrom = axisFrom ? options[1 - options.indexOf(axisFrom)] : options[1];\n\n if (type === COLUMN && (firstField[firstField.length - 1].toString() === secondField[0].toString())) {\n axisFrom = TOP;\n } else {\n axisFrom = axisFrom || options[0];\n }\n } else if (secondFieldType(secondField.length - 1) === DIMENSION) {\n headerFrom = type === ROW ? RIGHT : BOTTOM;\n axisFrom = type === ROW ? RIGHT : BOTTOM;\n } else {\n headerFrom = type === ROW ? LEFT : TOP;\n axisFrom = type === ROW ? LEFT : TOP;\n }\n if (firstFieldType(firstField.length - 1) === MEASURE && secondFieldType(0) === MEASURE) {\n axisFrom = type === ROW ? LEFT : TOP;\n } else if (secondFieldType(0) === MEASURE) {\n axisFrom = type === ROW ? RIGHT : BOTTOM;\n } else if (firstFieldType(firstField.length - 1) === MEASURE) {\n axisFrom = type === ROW ? LEFT : TOP;\n }\n return [headerFrom, axisFrom];\n};\n\n/**\n *\n *\n * @param {*} type\n * @param {*} fields\n * @param {*} layers\n *\n * @memberof MatrixResolver\n */\nexport const setFacetsAndProjections = (context, fieldInfo, encoder) => {\n const {\n fields,\n type\n } = fieldInfo;\n const { facets, projections } = encoder.simpleEncoder.getFacetsAndProjections(fields, type);\n\n context.facets({ [`${type}Facets`]: facets });\n context.projections({ [`${type}Projections`]: projections });\n\n return { facets, projections, fields };\n};\n\nconst getRowBorders = (left, right) => {\n const borders = {};\n borders.top = false;\n borders.bottom = false;\n if (left.length > 1 || right.length > 1) {\n borders.top = true;\n borders.bottom = true;\n }\n return borders;\n};\n\nconst getColumnsBorders = (top, bottom) => {\n const borders = {};\n borders.left = false;\n borders.right = false;\n if (top.length || bottom.length) {\n if ((top[0] && top[0].length > 1) || (bottom[0] && bottom[0].length > 1)) {\n borders.left = true;\n borders.right = true;\n }\n }\n return borders;\n};\n\nconst getValueBorders = (rows, columns) => {\n const borders = { top: true, left: true, bottom: true, right: true };\n const borderTypeRow = [LEFT, RIGHT];\n const borderTypeCol = [TOP, BOTTOM];\n rows.forEach((e, i) => {\n if (e[0] && e[0].length) {\n borders[borderTypeRow[i]] = true;\n } else {\n borders[borderTypeRow[i]] = false;\n }\n });\n columns.forEach((e, i) => {\n if (e.length) {\n borders[borderTypeCol[i]] = true;\n } else {\n borders[borderTypeCol[i]] = false;\n }\n });\n\n return borders;\n};\n\nexport const getBorders = (matrices, encoder) => {\n let showRowBorders = { top: false, bottom: false };\n let showColBorders = { left: false, right: false };\n let showValueBorders = { top: false, bottom: false, left: false, right: false };\n const {\n rows,\n columns,\n values: valueMatrix\n } = matrices;\n const [leftRows, rightRows] = rows;\n const [topColumns, bottomColumns] = columns;\n const {\n rowDimensions,\n columnDimensions,\n rowTemporalFields,\n columnTemporalFields,\n columnMeasures,\n rowMeasures\n } = encoder.fieldInfo();\n const allDimensionLength = rowDimensions.length + columnDimensions.length;\n const allMeasuresLength = rowMeasures.length + columnMeasures.length;\n const allTemporalFieldsLength = rowTemporalFields.length + columnTemporalFields.length;\n\n if (encoder.constructor.type() === POLAR) {\n if (!allDimensionLength) {\n return { showRowBorders, showColBorders, showValueBorders };\n }\n } else if (!allMeasuresLength && !allTemporalFieldsLength && allDimensionLength <= 2) {\n return { showRowBorders, showColBorders, showValueBorders };\n }\n\n showRowBorders = getRowBorders(leftRows, rightRows);\n showColBorders = getColumnsBorders(topColumns, bottomColumns);\n showValueBorders = getValueBorders([leftRows, rightRows], [topColumns, bottomColumns]);\n\n if (valueMatrix.length > 1) {\n showValueBorders.top = true;\n showValueBorders.bottom = true;\n }\n if (valueMatrix.length && valueMatrix[0].length > 1) {\n showValueBorders.left = true;\n showValueBorders.right = true;\n }\n return { showRowBorders, showColBorders, showValueBorders };\n};\n\nexport const getFieldsFromSuppliedLayers = (suppliedLayerConfig, fieldsConfig) => {\n let fields = [];\n const encodingArr = suppliedLayerConfig.map(conf => (conf.encoding || {}));\n fields = [...fields, [].concat(...encodingArr.map(enc => Object.values(enc).map(d => d.field)))];\n fields = fields.filter(field => fieldsConfig[field] && fieldsConfig[field].def.type === FieldType.DIMENSION);\n return fields;\n};\n\nexport const extractFields = (facetsAndProjections, layerFields) => {\n const fields = Object.values(facetsAndProjections).map((arr) => {\n const flattenArray = [].concat(...arr);\n return [].concat(...flattenArray.map((field) => {\n if (field instanceof Variable) {\n return field.getMembers();\n }\n return field;\n }));\n });\n return [].concat(...fields, ...layerFields);\n};\n","import { BEHAVIOURS, ACTIONS } from '@chartshq/muze-firebolt';\n\nexport const actionBehaviourMap = {\n [ACTIONS.DRAG]: {\n behaviours: [BEHAVIOURS.BRUSH],\n touch: false\n },\n [ACTIONS.HOVER]: {\n behaviours: [BEHAVIOURS.HIGHLIGHT]\n },\n [ACTIONS.LONGTOUCH]: {\n behaviours: [BEHAVIOURS.SELECT],\n touch: true\n },\n [ACTIONS.TOUCHDRAG]: {\n behaviours: [BEHAVIOURS.BRUSH],\n touch: true\n },\n [ACTIONS.CLICK]: {\n behaviours: [BEHAVIOURS.SELECT],\n touch: false\n }\n};\n","import {\n FieldType,\n getDependencyOrder,\n getObjProp,\n defaultValue,\n objectIterator,\n unionDomain,\n makeElement,\n DimensionSubtype,\n toArray,\n MeasureSubtype,\n getNearestValue\n} from 'muze-utils';\nimport { layerFactory } from '@chartshq/visual-layer';\n\nexport const getDimensionMeasureMap = (layers, fieldsConfig) => {\n const retinalEncodingsAndMeasures = {};\n\n layers.forEach((layer) => {\n const {\n colorField,\n sizeField,\n shapeField,\n xField,\n yField\n } = layer.encodingFieldsInf();\n const measures = [xField, yField].filter(field => fieldsConfig[field] && fieldsConfig[field].def.type ===\n FieldType.MEASURE);\n [colorField, sizeField, shapeField].forEach((field) => {\n if (fieldsConfig[field] && fieldsConfig[field].def.type === FieldType.DIMENSION) {\n !retinalEncodingsAndMeasures[field] && (retinalEncodingsAndMeasures[field] = []);\n retinalEncodingsAndMeasures[field].push(...measures);\n }\n });\n });\n\n for (const key in retinalEncodingsAndMeasures) {\n if ({}.hasOwnProperty.call(retinalEncodingsAndMeasures, key)) {\n retinalEncodingsAndMeasures[key] = [...new Set(retinalEncodingsAndMeasures[key])];\n }\n }\n return retinalEncodingsAndMeasures;\n};\n\nexport const transformDataModels = (transform, dataModel) => {\n const dataModels = {};\n for (const key in transform) {\n if ({}.hasOwnProperty.call(transform, key)) {\n const transformVal = transform[key];\n dataModels[key] = transformVal(dataModel);\n }\n }\n\n return dataModels;\n};\n\nexport const getLayerFromDef = (context, definition, existingLayer, namespaces) => {\n let instances = existingLayer;\n const dependencies = context._layerDeps;\n const metaInf = context.metaInf();\n if (!existingLayer) {\n instances = layerFactory.getLayerInstance(definition);\n toArray(instances).forEach((inst, i) => {\n inst.metaInf({\n unitRowIndex: metaInf.rowIndex,\n unitColIndex: metaInf.colIndex,\n namespace: namespaces[i]\n });\n inst.store(context.store());\n });\n }\n const layers = {};\n const instanceArr = toArray(instances);\n definition = toArray(definition);\n definition.reduce((acc, def, idx) => {\n const instance = instanceArr[idx];\n instance.config(def);\n instance.valueParser(context.valueParser());\n instance.dependencies(dependencies);\n instance.dataProps({\n timeDiffs: context._timeDiffs\n });\n if (def.name) {\n instance.alias(def.name);\n }\n layers[instance.alias()] = instance;\n return acc;\n }, {});\n return layers;\n};\n\nexport const resolveEncodingTransform = (layerInst, store) => {\n const encodingTransform = layerInst.config().encodingTransform || {};\n const resolvable = encodingTransform.resolvable;\n let depArr = [];\n if (resolvable) {\n const resolved = resolvable(store);\n depArr = resolved.depArr;\n layerInst.encodingTransform(resolved.fn);\n } else if (encodingTransform instanceof Function) {\n layerInst.encodingTransform(encodingTransform);\n }\n return depArr;\n};\n\nexport const createLayers = (context, layerDefinitions) => {\n const layersMap = context._layersMap;\n const markSet = {};\n const store = {\n layers: {},\n components: {\n unit: context\n }\n };\n let layerIndex = 0;\n let layers = layerDefinitions.sort((a, b) => a.order - b.order).reduce((layersArr, layerDef, i) => {\n const mark = layerDef.mark;\n const definition = layerDef.def;\n const markId = `${mark}-${i}`;\n const defArr = toArray(definition);\n defArr.forEach((def) => {\n def.order = layerDef.order + layerIndex;\n });\n layerIndex += defArr.length;\n const instances = getLayerFromDef(context, definition, layersMap[markId], i);\n store.layers = Object.assign(store.layers, instances);\n const instanceValues = Object.values(instances);\n layersArr = layersArr.concat(...instanceValues);\n layersMap[markId] = instanceValues;\n markSet[markId] = markId;\n return layersArr;\n }, []);\n store.unit = context;\n const layerdeps = {};\n layers.forEach((layer) => {\n const depArr = resolveEncodingTransform(layer, store);\n layerdeps[layer.alias()] = depArr;\n });\n\n const order = getDependencyOrder(layerdeps);\n layers = order.map(name => store.layers[name]);\n for (const key in layersMap) {\n if (!(key in markSet)) {\n layersMap[key].forEach(layer => layer.remove());\n delete layersMap[key];\n }\n }\n return layers;\n};\n\nexport const sanitizeLayerDef = (layerDefs) => {\n const sanitizedDefs = [];\n layerDefs.forEach((layerDef, i) => {\n const def = layerDef.def;\n const mark = layerDef.mark;\n if (!def) {\n const sConf = layerFactory.getSerializedConf(layerDef.mark, layerDef);\n if (!sConf.name) {\n sConf.name = `${mark}-${i}`;\n }\n sanitizedDefs.push({\n mark: layerDef.mark,\n def: sConf\n });\n } else {\n if (!def.name) {\n def.name = `${mark}-${i}`;\n }\n sanitizedDefs.push(layerDef);\n }\n });\n return sanitizedDefs;\n};\n\nexport const attachDataToLayers = (layers, dm, transformedDataModels) => {\n layers.forEach((layer) => {\n const dataSource = layer.config().source;\n const dataModel = dataSource instanceof Function ? dataSource(dm) :\n (transformedDataModels[dataSource] || dm);\n if (layer.data() !== dataModel) {\n layer.data(dataModel);\n }\n });\n};\n\nexport const attachAxisToLayers = (axes, layers, layerAxisIndex) => {\n layers.forEach((layer) => {\n const layerId = layer.id();\n const axesObj = {};\n\n objectIterator(axes, (key) => {\n const axisInf = layerAxisIndex[layerId];\n if (axisInf) {\n axes[key] && (axesObj[key] = axes[key][axisInf[key] || 0]);\n }\n });\n Object.keys(axesObj).length && layer.axes(axesObj);\n });\n};\n\nexport const getLayerAxisIndex = (layers, fields) => {\n const layerAxisIndex = {};\n layers.forEach((layer) => {\n const { axis, encoding } = layer.config();\n const id = layer.id();\n ['x', 'y'].forEach((type) => {\n let index;\n const field = defaultValue(getObjProp(axis, type), encoding[type] && encoding[type].field);\n if (fields[type]) {\n index = fields[type].findIndex(fieldInst => fieldInst.getMembers().indexOf(field) !== -1);\n } else {\n index = 0;\n }\n !layerAxisIndex[id] && (layerAxisIndex[id] = {});\n layerAxisIndex[id][type] = index;\n });\n });\n return layerAxisIndex;\n};\n\nexport const unionDomainFromLayers = (layers, axisFields, layerAxisIndex, fieldsConfig) => {\n let domains = {};\n layers = layers.filter(layer => layer.getDataDomain() !== null);\n layers.forEach((layer) => {\n let domainValues = {};\n const config = layer.config();\n const encoding = config.encoding;\n const layerDomain = layer.getDataDomain();\n const layerId = layer.id();\n\n if (layerDomain !== null && config.calculateDomain !== false) {\n domainValues = Object.entries(layerDomain);\n domains = domainValues.reduce((fieldDomain, domain) => {\n const encodingType = domain[0];\n const field = encoding[encodingType].field;\n const axisIndex = layerAxisIndex[layerId][encodingType];\n if (encodingType in axisFields) {\n const fieldStr = `${axisFields[encodingType][axisIndex]}`;\n fieldDomain[fieldStr] = fieldDomain[fieldStr] || [];\n fieldDomain[fieldStr] = unionDomain(([fieldDomain[fieldStr], domain[1]]),\n fieldsConfig[field].def.subtype ? fieldsConfig[field].def.subtype :\n fieldsConfig[field].def.type);\n } else {\n fieldDomain[encodingType] = domain[1];\n }\n return fieldDomain;\n }, domains);\n }\n });\n return domains;\n};\n\nexport const renderLayers = (context, container, layers, measurement) => {\n context._lifeCycleManager.notify({ client: layers, action: 'beforedraw', formalName: 'layer' });\n const config = context.config();\n const classPrefix = config.classPrefix;\n const orderedLayers = context.layers().sort((a, b) => a.config().order - b.config().order);\n const layerParentGroup = makeElement(container, 'g', [1], `${classPrefix}-layer-group`);\n const layerDepOrder = getDependencyOrder(context._layerDepOrder);\n const groups = {};\n makeElement(layerParentGroup, 'g', orderedLayers, null, {\n update: (group, layer) => {\n groups[layer.alias()] = {\n group,\n layer\n };\n }\n });\n const layerSeq = layerDepOrder.map(name => groups[name]);\n layerSeq.forEach((o) => {\n const layer = o.layer;\n const group = o.group;\n layer.measurement(measurement);\n layer.dataProps({\n timeDiffs: context._timeDiffs\n });\n layer.config().render !== false && layer.mount(group.node());\n });\n return this;\n};\n\nexport const getNearestDimensionalValue = (context, position) => {\n const fields = context.fields();\n if (!fields.x.length || !fields.y.length) {\n return null;\n }\n const data = context.data();\n const axes = context.axes();\n const fieldsConfig = data.getFieldsConfig();\n const xField = getObjProp(fields, 'x', 0).getMembers()[0];\n const yField = getObjProp(fields, 'y', 0).getMembers()[0];\n const xFieldType = fieldsConfig[xField].def.subtype;\n const yFieldType = fieldsConfig[yField].def.subtype;\n\n const entryVal = [['x', xFieldType, xField], ['y', yFieldType, yField]].find(entry =>\n entry[1] === DimensionSubtype.CATEGORICAL || entry[1] === DimensionSubtype.TEMPORAL);\n\n if (!entryVal || (xFieldType !== MeasureSubtype.CONTINUOUS && yFieldType !== MeasureSubtype.CONTINUOUS)) {\n return null;\n }\n const field = entryVal[2];\n const index = fieldsConfig[field].index;\n let key = axes[entryVal[0]][0].invert(position[entryVal[0]]);\n if (entryVal[1] === DimensionSubtype.TEMPORAL) {\n const filterData = [...new Set(data.getData().data.map(d => d[index]))];\n key = getNearestValue(filterData, key);\n }\n\n return key !== undefined ? [[field], [key]] : null;\n};\n\nexport const getLayersBy = (layers, searchBy, value) => layers.filter((layer) => {\n const name = searchBy === 'type' ? layer.constructor.formalName() : layer.alias();\n return name === value;\n});\n\nexport const removeLayersBy = (layers, searchBy, value) => {\n layers.filter((inst) => {\n const name = searchBy === 'type' ? inst.config().mark : inst.alias();\n if (name === value) {\n inst.remove();\n return false;\n }\n return true;\n });\n};\n\nexport const createSideEffectGroup = (container, className) => makeElement(container, 'g', [1], className).node();\n\nexport const createRenderPromise = (unit) => {\n const renderedPromise = unit._renderedPromise;\n renderedPromise.then(() => {\n unit._renderedPromise = new Promise((resolve) => {\n unit._renderedResolve = resolve;\n });\n createRenderPromise(unit);\n });\n};\n","export const CLASSPREFIX = 'muze';\nexport const IDFIELD = '__id__';\nexport const GRID_LINE_PARENT_GROUP_CLASS = 'grid-lines';\nexport const GRID_BAND_PARENT_GROUP_CLASS = 'grid-bands';\nexport const GRID_PARENT_GROUP = 'grid-parent-group';\nexport const BAND = 'band';\nexport const TICK = 'tick';\nexport const GRID_BAND = 'gridBands';\nexport const GRID_LINE = 'gridLines';\nexport const CONSOLIDATED = 'consolidated';\nexport const FRAGMENTED = 'fragmented';\nexport const FACET_BY_FIELDS = 'facetByFields';\nexport const RETINAL_FIELDS = 'retinalFields';\nexport const PARENT_ALIAS = 'parentAlias';\nexport const LAYERS = 'layers';\nexport const CACHED_DATA = 'cachedData';\nexport const STORE = 'store';\n","import { getObjProp, defaultValue, makeElement, DimensionSubtype, DataModel } from 'muze-utils';\nimport { ScaleType } from '@chartshq/muze-axis';\nimport { layerFactory, LAYER_TYPES } from '@chartshq/visual-layer';\nimport {\n GRID_BAND,\n GRID_LINE,\n GRID_BAND_PARENT_GROUP_CLASS,\n GRID_LINE_PARENT_GROUP_CLASS,\n GRID_PARENT_GROUP\n} from '../enums/constants';\n\nconst { BAR_LAYER, TICK_LAYER } = LAYER_TYPES;\n\nconst LINEAR = ScaleType.LINEAR;\n\nconst getLayerDefinition = (context, axes, type, orientation) => {\n let encoding;\n const config = context.config();\n const { classPrefix, gridLines, gridBands } = config;\n const gridLineColor = gridLines.color;\n const zeroLineColor = gridLines.zeroLineColor;\n const defClassName = type === GRID_BAND ? gridBands.defClassName : gridLines.defClassName;\n const gridBandColor = gridBands[orientation].color;\n const axis = axes[orientation][0];\n const isLinearScale = axis.constructor.type() === LINEAR;\n\n if (type === GRID_BAND && isLinearScale) {\n encoding = {\n [orientation]: `${orientation}value`,\n [`${orientation}0`]: `${orientation}value0`\n };\n } else {\n encoding = {\n [orientation]: isLinearScale ? `${orientation}value` : `${orientation}dim`\n };\n }\n encoding.color = {\n value: (data, i) => {\n const isNegativeDomain = isLinearScale && axis.domain()[0] < 0;\n if (type === GRID_BAND) {\n return gridBandColor[i % 2];\n }\n return isNegativeDomain && data[orientation] === 0 ? zeroLineColor : gridLineColor;\n }\n };\n\n return {\n definition: {\n defClassName: `${defClassName}-${orientation}`,\n className: config.className,\n name: orientation,\n individualClassName: (data, i) => {\n let className;\n const isNegativeDomain = isLinearScale && axis.domain()[0] < 0;\n if (isNegativeDomain && data.y === 0 && type !== GRID_BAND) {\n className = `${classPrefix}-axis-zero-line`;\n } else {\n className = `${classPrefix}-grid-${type}-${orientation}-${i % 2}`;\n }\n return className;\n },\n [`pad${orientation.toUpperCase()}`]: type === GRID_BAND ? 0 : undefined,\n encoding\n },\n axes: {\n [orientation]: axis\n },\n interactive: false\n };\n};\n\nconst getDefaultVisibilty = (show, axis) => {\n if (axis.constructor.type() === LINEAR) {\n return show;\n }\n return false;\n};\n\nexport const getGridLayerDefinitions = (context, config, type) => ['x', 'y'].map((axisType) => {\n const axes = context.axes();\n if (!axes[axisType]) {\n return null;\n }\n const show = defaultValue(config[axisType] && config[axisType].show,\n getDefaultVisibilty(config.show, axes[axisType][0]));\n\n return show ? getLayerDefinition(context, axes, type, axisType) : null;\n}).filter(d => d !== null);\n\nexport const getGridLayerData = (axes, fields, fieldsConfig) => {\n const gridData = {};\n ['x', 'y'].forEach((type) => {\n let ticks = axes[type][0].getTickValues();\n const subtype = getObjProp(fieldsConfig, getObjProp(fields, type, 0).getMembers()[0], 'def', 'subtype');\n const jsonData = [];\n const schema = [\n {\n name: 'yvalue',\n type: 'measure'\n }, {\n name: 'xvalue',\n type: 'measure'\n },\n {\n name: 'yvalue0',\n type: 'measure'\n }, {\n name: 'xvalue0',\n type: 'measure'\n }, {\n name: 'xdim',\n type: 'dimension',\n subtype\n }, {\n name: 'ydim',\n type: 'dimension',\n subtype\n }\n ];\n const len = Math.max(ticks.length);\n ticks = subtype === DimensionSubtype.TEMPORAL ? ticks.map(d => d.getTime()) : ticks;\n for (let i = 0; i < len; i += 1) {\n jsonData.push({\n [`${type}value`]: ticks[i],\n [`${type}value0`]: ticks[i + 1],\n [`${type}dim`]: ticks[i],\n [`${type}dim`]: ticks[i]\n });\n }\n gridData[type] = new DataModel(jsonData, schema);\n });\n return gridData;\n};\n\n// @todo Use dataSelect method to reuse instances when the method is fixed. #110\nexport const createGridLines = (instances = {}, createFn, definitions, iteratorFn) => {\n const map = {};\n definitions.forEach((def) => {\n const name = def.definition.name;\n let instance = instances[name];\n if (!instance) {\n instances[name] = instance = createFn(def);\n }\n iteratorFn(instance, def, name);\n map[name] = 1;\n });\n for (const key in instances) {\n if (!(key in map)) {\n instances[key].remove();\n delete instances[key];\n }\n }\n return instances;\n};\n\nexport const createGridLineLayer = (context) => {\n const vuConf = context.config();\n const metaInf = context.metaInf();\n const store = context.store();\n const timeDiffs = context._timeDiffs;\n [GRID_BAND, GRID_LINE].forEach((type) => {\n let mark;\n let config;\n if (type === GRID_BAND) {\n mark = BAR_LAYER;\n config = vuConf.gridBands;\n } else {\n mark = TICK_LAYER;\n config = vuConf.gridLines;\n }\n const definitions = getGridLayerDefinitions(context, config, type);\n\n const sel = `_${type}Selection`;\n context[sel] = createGridLines(context[sel], () => {\n const inst = layerFactory.getLayerInstance({ mark });\n inst.dependencies(context._layerDeps);\n return inst;\n }, definitions, (layer, atomicDef, key) => {\n const definition = atomicDef.definition;\n const sConf = layerFactory.getSerializedConf(mark, definition);\n const axesObj = atomicDef.axes;\n layer.metaInf({\n unitRowIndex: metaInf.rowIndex,\n unitColIndex: metaInf.colIndex,\n namespace: `${metaInf.namespace}${type}${key}`\n })\n .store(store)\n .config(sConf)\n .dataProps({\n timeDiffs\n })\n .axes(axesObj);\n });\n context[`_${type}`] = Object.values(context[sel]);\n });\n};\n\nexport const attachDataToGridLineLayers = (context) => {\n const axes = context.axes();\n const measurement = {\n width: context.width(),\n height: context.height()\n };\n const gridLines = context._gridLines;\n const gridBands = context._gridBands;\n const gridLayerData = getGridLayerData(axes, context.fields(), context.data().getFieldsConfig());\n [].concat(...gridBands, ...gridLines).forEach((inst) => {\n inst.data(inst.axes().x ? gridLayerData.x : gridLayerData.y).measurement(measurement);\n });\n};\n\nexport const renderGridLineLayers = (context, container) => {\n const config = context.config();\n const classPrefix = config.classPrefix;\n const gridLines = context._gridLines;\n const gridBands = context._gridBands;\n\n const gridLineParentGroup = makeElement(container, 'g', [1], `${classPrefix}-${GRID_PARENT_GROUP}`);\n [[gridLines, `${classPrefix}-${GRID_LINE_PARENT_GROUP_CLASS}`],\n [gridBands, `${classPrefix}-${GRID_BAND_PARENT_GROUP_CLASS}`]].forEach((entry) => {\n const [instances, parentGroupClass] = entry;\n const mountPoint = makeElement(gridLineParentGroup, 'g', [1], `.${parentGroupClass}`);\n const className = `${parentGroupClass}-group`;\n makeElement(mountPoint, 'g', instances, `.${className}`, {\n update: (group, instance) => {\n instance.dataProps({ timeDiffs: context._timeDiffs }).mount(group.node());\n }\n });\n });\n};\n","import { CLASSPREFIX, CONSOLIDATED } from './enums/constants';\n\n/**\n * Returns the default configuration of the visual unit\n * @return {Object} Default configuration of visual unit\n */\nexport const defaultConfig = {\n classPrefix: CLASSPREFIX,\n defClassName: 'visual-unit',\n className: '',\n trackerClassName: 'visual-unit-tracker',\n gridLines: {\n defClassName: 'axis-grid-lines',\n className: '',\n show: true,\n color: '#efefef',\n zeroLineColor: '#b6b6b6'\n },\n gridBands: {\n defClassName: 'axis-grid-bands',\n className: '',\n show: false,\n y: {\n color: ['#fff', '#fbfbfb']\n },\n x: {\n color: ['#fff', '#f9f9f9']\n }\n },\n arcLayerClassName: 'layer-arc',\n interaction: {\n tooltip: {\n mode: CONSOLIDATED\n }\n },\n sideEffectClassName: 'side-effect-container'\n};\n","import { mergeRecursive, DataModel } from 'muze-utils';\nimport { defaultConfig } from './default-config';\nimport { CONFIG, LAYERDEFS, TRANSFORM, DATA, LAYERS, TRANSFORMEDDATA } from './enums/reactive-props';\nimport { sanitizeLayerDef } from './helper';\n\nexport default {\n [CONFIG]: {\n value: null,\n meta: {\n sanitization: (config, oldConfig) => (\n mergeRecursive(oldConfig || mergeRecursive({}, defaultConfig), config)\n )\n }\n },\n [LAYERDEFS]: {\n value: null,\n meta: {\n preset: layerDef => sanitizeLayerDef(layerDef)\n }\n },\n [TRANSFORM]: {\n value: null\n },\n [LAYERS]: {\n value: null\n },\n [DATA]: {\n value: null,\n meta: {\n typeCheck: d => d instanceof DataModel,\n preset: (data, context) => {\n if (context._cache) {\n const cachedData = context.cachedData();\n context.cachedData([...cachedData, data]);\n } else {\n const oldData = context.data();\n oldData && oldData.unsubscribe('propagation');\n context.cachedData([data]);\n }\n }\n }\n },\n [TRANSFORMEDDATA]: {\n value: null,\n meta: {\n addAsMethod: false\n }\n }\n};\n","export const CONFIG = 'config';\nexport const DATA = 'data';\nexport const AXES = 'axes';\nexport const LAYERDEFS = 'layerDef';\nexport const WIDTH = 'width';\nexport const HEIGHT = 'height';\nexport const MOUNT = 'mount';\nexport const TRANSFORM = 'transform';\nexport const TRANSFORMEDDATA = 'transformedData';\nexport const DATADOMAIN = 'dataDomain';\nexport const FIELDS = 'fields';\nexport const LAYERAXISINDEX = 'layerAxisIndex';\nexport const LAYERS = 'layers';\nexport const DOMAIN = 'domain';\n\n","import { STATE_NAMESPACES, temporalFields } from 'muze-utils';\nimport * as PROPS from './enums/reactive-props';\nimport {\n transformDataModels,\n getDimensionMeasureMap,\n attachDataToLayers,\n attachAxisToLayers,\n unionDomainFromLayers\n} from './helper';\n\nimport { createGridLineLayer, attachDataToGridLineLayers } from './helper/grid-lines';\n\nconst removeExitLayers = (layerDefs, context) => {\n const layersMap = context._layersMap;\n const markSet = {};\n layerDefs.forEach((layerDef, i) => {\n const id = `${layerDef.mark}-${i}`;\n markSet[id] = true;\n });\n\n for (const key in layersMap) {\n if (!(key in markSet)) {\n layersMap[key].forEach(layer => layer.remove());\n delete layersMap[key];\n }\n }\n};\n\nexport const calculateDomainListener = (context, namespace) => () => {\n const domain = unionDomainFromLayers(context.layers(), context.fields(), context._layerAxisIndex,\n context.data().getFieldsConfig());\n context.store().commit(`${STATE_NAMESPACES.UNIT_GLOBAL_NAMESPACE}.${PROPS.DOMAIN}.${namespace}`, domain);\n};\n\nexport const listenerMap = (context, namespace, metaInf) => ([\n {\n type: 'registerImmediateListener',\n props: [`${namespace.local}.${PROPS.CONFIG}`],\n listener: ([, config]) => {\n config && context.firebolt().config(config.interaction);\n }\n },\n {\n type: 'registerImmediateListener',\n props: [`${namespace.local}.${PROPS.LAYERDEFS}`],\n listener: ([, layerDefs]) => {\n const fieldsVal = context.fields();\n if (layerDefs && fieldsVal) {\n removeExitLayers(layerDefs, context);\n const axes = context.axes();\n if (axes.x || axes.y) {\n const props = [`${STATE_NAMESPACES.GROUP_GLOBAL_NAMESPACE}.domain.y.${metaInf.rowIndex}0`,\n `${STATE_NAMESPACES.GROUP_GLOBAL_NAMESPACE}.domain.x.${metaInf.colIndex}0`];\n const store = context.store();\n const listenerInf = {\n namespace: namespace.local,\n key: 'gridLineListener'\n };\n store.unsubscribe(listenerInf);\n store.registerChangeListener(props, () => {\n attachDataToGridLineLayers(context);\n }, false, listenerInf);\n }\n\n context.addLayer(layerDefs);\n context._lifeCycleManager.notify({\n client: context.layers(),\n action: 'initialized',\n formalName: 'layer'\n });\n }\n }\n },\n {\n type: 'registerImmediateListener',\n props: [`${namespace.local}.${PROPS.DATA}`],\n listener: ([, dataModel]) => {\n const axesObj = context.axes();\n const timeDiffs = {};\n const timeDiffsByField = {};\n\n Object.entries(temporalFields(dataModel)).forEach(([fieldName, fieldObj]) => {\n timeDiffsByField[fieldName] = fieldObj.minimumConsecutiveDifference();\n });\n\n Object.entries(context.fields()).forEach(([type, [field]]) => {\n if (field) {\n const timeDiff = timeDiffsByField[`${field}`];\n if (timeDiff) {\n timeDiffs[type] = timeDiff;\n axesObj[type].forEach(axis => axis.minDiff(timeDiff));\n }\n }\n });\n\n context._timeDiffsByField = timeDiffsByField;\n context._timeDiffs = timeDiffs;\n }\n },\n {\n type: 'registerImmediateListener',\n props: [`${namespace.local}.${PROPS.CONFIG}`],\n listener: () => {\n createGridLineLayer(context);\n }\n },\n {\n type: 'registerImmediateListener',\n props: [`${namespace.local}.${PROPS.DATA}`,\n `${namespace.local}.${PROPS.TRANSFORM}`],\n listener: ([, dataModel], [, transform]) => {\n if (dataModel) {\n const dataModels = transformDataModels(transform, dataModel);\n context.store().commit(`${namespace.local}.${PROPS.TRANSFORMEDDATA}`, dataModels);\n }\n }\n },\n {\n type: 'registerImmediateListener',\n props: [`${namespace.local}.${PROPS.TRANSFORMEDDATA}`,\n `${namespace.local}.${PROPS.LAYERS}`],\n listener: ([, transformedData], [, layers]) => {\n const layerAxisIndexVal = context._layerAxisIndex;\n const axesVal = context.axes();\n const dataModel = context.data();\n if (transformedData && layers && axesVal && layerAxisIndexVal) {\n context._lifeCycleManager.notify({ client: layers, action: 'beforeupdate', formalName: 'layer' });\n const model = context.store().model;\n layers.forEach(lyr => lyr.disableUpdate());\n attachDataToLayers(layers, dataModel, transformedData);\n model.lock();\n layers.forEach((lyr) => {\n lyr.enableUpdate().domain(lyr._domain);\n });\n model.unlock();\n context._dimensionMeasureMap = getDimensionMeasureMap(layers,\n dataModel.getFieldsConfig(), context.retinalFields());\n attachAxisToLayers(axesVal, layers, layerAxisIndexVal);\n context._lifeCycleManager.notify({ client: layers, action: 'updated', formalName: 'layer' });\n }\n }\n }\n]);\n","import { FACET_BY_FIELDS, RETINAL_FIELDS, PARENT_ALIAS, LAYERS, CACHED_DATA } from './enums/constants';\n\nexport const PROPS = {\n [FACET_BY_FIELDS]: {},\n [RETINAL_FIELDS]: {},\n [PARENT_ALIAS]: {},\n [LAYERS]: {},\n [CACHED_DATA]: {},\n detailFields: {},\n axes: {\n defaultValue: {\n x: [],\n y: []\n }\n },\n fields: {},\n metaInf: {},\n registry: {},\n width: {},\n height: {},\n parentContainerInf: {},\n valueParser: {\n defaultValue: val => val\n }\n};\n","import { CommonProps } from 'muze-utils';\nimport { SpawnableSideEffect } from '@chartshq/muze-firebolt';\nimport { DATA } from '../enums/reactive-props';\n\nexport const initSideEffects = (sideEffects, firebolt) => {\n for (const key in sideEffects) {\n if ({}.hasOwnProperty.call(sideEffects, key)) {\n sideEffects[key] instanceof SpawnableSideEffect && sideEffects[key].drawingContext(() => {\n const context = firebolt.context;\n return context.getDrawingContext();\n });\n sideEffects[key].valueParser(firebolt.context.valueParser());\n }\n }\n};\n\nexport const clearActionHistory = (context) => {\n const actionHistory = context._actionHistory;\n for (const key in actionHistory) {\n if (actionHistory[key].isMutableAction) {\n delete context._actionHistory[key];\n }\n }\n};\n\nexport const dispatchQueuedSideEffects = (context) => {\n const queuedSideEffects = context._queuedSideEffects;\n Object.entries(queuedSideEffects).forEach((entry) => {\n const sideEffect = entry[1];\n context.dispatchSideEffect(sideEffect.name, ...sideEffect.params);\n });\n context._queuedSideEffects = {};\n};\n\nexport const registerListeners = (firebolt) => {\n const context = firebolt.context;\n const store = context.store();\n\n store.registerImmediateListener([`local.units.${context.metaInf().namespace}.${DATA}`], (dataModel) => {\n const dm = dataModel[1];\n\n if (dm) {\n firebolt.createSelectionSet(firebolt.context.data().getData().uids);\n firebolt.initializeSideEffects();\n const originalData = firebolt.context.cachedData()[0];\n firebolt.attachPropagationListener(originalData);\n }\n });\n\n store.registerChangeListener([`local.units.${context.metaInf().namespace}.${DATA}`], () => {\n if (!firebolt.context.mount()) {\n const originalData = firebolt.context.cachedData()[0];\n originalData.unsubscribe('propagation');\n }\n });\n\n context._layerDeps.throwback.registerChangeListener([CommonProps.ON_LAYER_DRAW],\n ([, onlayerdraw]) => {\n if (onlayerdraw) {\n dispatchQueuedSideEffects(firebolt);\n clearActionHistory(firebolt);\n }\n });\n};\n","import { DimensionSubtype } from 'muze-utils';\n\nconst getRangeFromData = (instance, selectionDataModel, propConfig) => {\n let criteria;\n const dataObj = selectionDataModel[0].getData();\n const propCriteria = propConfig.payload.criteria;\n const sourceIdentifiers = propConfig.sourceIdentifiers;\n const schema = dataObj.schema;\n const fieldMap = instance.data().getFieldsConfig();\n const data = dataObj.data;\n const isActionSourceSame = instance.id() === propConfig.sourceId;\n\n if (isActionSourceSame) {\n criteria = propCriteria;\n } else {\n criteria = (sourceIdentifiers !== null) ? schema.reduce((acc, obj, index) => {\n let range;\n const field = obj.name;\n const fieldObj = fieldMap[field];\n const type = fieldObj && (fieldObj.def.subtype ? fieldObj.def.subtype : fieldObj.def.type);\n const isDimension = type === DimensionSubtype.CATEGORICAL;\n\n if (!fieldObj) {\n return acc;\n }\n\n if (!isDimension) {\n range = [Math.min(...data.map(d => d[index])), Math.max(...data.map(d => d[index]))];\n } else {\n range = data.map(d => d[index]);\n }\n acc[field] = range;\n return acc;\n }, {}) : null;\n }\n return criteria;\n};\n\nexport const payloadGenerator = {\n brush: (instance, selectionDataModel, propConfig) => {\n const propPayload = propConfig.payload;\n const criteria = getRangeFromData(instance, selectionDataModel, propConfig);\n const payload = Object.assign({}, propPayload);\n payload.criteria = criteria;\n return payload;\n },\n\n __default: (instance, selectionDataModel, propConfig) => {\n const propPayload = propConfig.payload;\n const sourceIdentifiers = propConfig.sourceIdentifiers;\n const dataObj = selectionDataModel[0].getData();\n let schema = dataObj.schema;\n const payload = Object.assign({}, propPayload);\n schema = dataObj.schema;\n const data = dataObj.data;\n const sourceFields = schema.map(d => d.name);\n payload.criteria = !sourceIdentifiers && selectionDataModel[0].isEmpty() ? null :\n [sourceFields, ...data];\n payload.sourceFields = sourceIdentifiers ? sourceIdentifiers.getSchema().map(d => d.name) : [];\n return payload;\n }\n};\n\n","import { isSimpleObject, FieldType, DataModel } from 'muze-utils';\n\nconst getModelWithFacetData = (dm, data) => {\n const dataObj = dm.getData();\n const schema1 = dataObj.schema;\n const data1 = dataObj.data;\n const jsonData = [];\n const schema2 = data[0].map(d => ({\n name: `${d}`,\n type: FieldType.DIMENSION\n }));\n const data2 = data[1];\n\n data1.forEach((d) => {\n const tuple = {};\n schema1.forEach((obj, i) => {\n tuple[obj.name] = d[i];\n });\n schema2.forEach((obj, i) => {\n tuple[obj.name] = data2[i];\n });\n jsonData.push(tuple);\n });\n\n return new DataModel(jsonData, [...schema1, ...schema2]);\n};\n\nexport const propagateValues = (instance, action, config = {}) => {\n let propagationData;\n const payload = config.payload;\n const selectionSet = config.selectionSet;\n const propagationFieldInf = config.propagationFields[action] || {};\n const propagationFields = propagationFieldInf.fields || [];\n const append = propagationFieldInf.append;\n const criteria = payload.criteria;\n const context = instance.context;\n const dataModel = context.cachedData()[0];\n const sourceId = context.id();\n const sideEfffects = instance.sideEffects();\n const behaviourEffectMap = instance._behaviourEffectMap;\n const mergedModel = selectionSet.mergedEnter.model;\n const fieldsConfig = dataModel.getFieldsConfig();\n payload.sourceUnit = sourceId;\n payload.action = action;\n payload.sourceCanvas = context.parentAlias();\n const propagationBehaviourMap = instance._propagationBehaviourMap;\n const propagationBehaviour = propagationBehaviourMap[action] || action;\n\n let propFields = [];\n if (criteria === null) {\n propagationData = null;\n } else if (isSimpleObject(criteria)) {\n propFields = Object.keys(criteria || {});\n propagationData = mergedModel ? mergedModel.project(propFields) : null;\n } else {\n propFields = criteria[0];\n propagationData = mergedModel ? mergedModel.project(propFields) : null;\n }\n\n const facetByFields = context.facetByFields();\n if (propagationData !== null && propagationFields.length) {\n const fields = propagationData.getData().schema.map(d => d.name);\n propagationData = getModelWithFacetData(propagationData, facetByFields);\n propFields = append ? [...fields, ...propagationFields] : propagationFields;\n propagationData = propagationData.project(propFields);\n }\n\n let propagateInterpolatedValues = false;\n if (propFields.length && propFields.every(field => fieldsConfig[field] &&\n fieldsConfig[field].def.type === FieldType.MEASURE)) {\n propagateInterpolatedValues = true;\n }\n\n const groupId = context.parentAlias();\n payload.action = action;\n const behaviourInstance = instance._actions.behavioural[propagationBehaviour];\n const isMutableAction = behaviourInstance ? behaviourInstance.constructor.mutates() : false;\n\n const filterFn = (entry, propagationConf) => {\n const effects = behaviourEffectMap[entry.config.action];\n const mutates = entry.config.groupId ?\n effects.some(d => sideEfffects[d.name || d].constructor.mutates()) : true;\n return entry.config.groupId !== propagationConf.groupId && mutates;\n };\n\n const sourceBehaviour = instance._actions.behavioural[action];\n const mutates = sourceBehaviour ? sourceBehaviour.constructor.mutates() : false;\n let propConfig = {\n payload,\n action,\n criteria: propagationData,\n isMutableAction: mutates,\n propagateInterpolatedValues,\n groupId,\n sourceId: mutates ? groupId : sourceId,\n filterFn,\n enabled: (propConf, firebolt) => (action !== propagationBehaviour ?\n propConf.payload.sourceCanvas === firebolt.context.parentAlias() : true)\n };\n\n dataModel.propagate(propagationData, propConfig, true);\n\n if (action !== propagationBehaviour) {\n propConfig = {\n payload,\n sourceId: isMutableAction ? groupId : sourceId,\n criteria: propagationData,\n isMutableAction,\n propagateInterpolatedValues,\n action: propagationBehaviour,\n groupId,\n applyOnSource: action === propagationBehaviour,\n enabled: (propConf, firebolt) => propConf.payload.sourceCanvas !== firebolt.context.parentAlias(),\n filterFn\n };\n\n dataModel.propagate(propagationData, propConfig, true, {\n filterImmutableAction: (actionInf, propInf) => actionInf.groupId !== propInf.groupId\n });\n }\n};\n","import { FieldType } from 'muze-utils';\nimport { Firebolt } from '@chartshq/muze-firebolt';\nimport { registerListeners } from './helper';\nimport { payloadGenerator } from './payload-generator';\nimport { propagateValues } from './data-propagator';\n\n/**\n * This class manages the interactions of visual unit. It associates physical actions with\n * behavioural actions. It also propagates the behavioural actions to other datamodels.\n */\nexport default class UnitFireBolt extends Firebolt {\n constructor (...params) {\n super(...params);\n registerListeners(this);\n }\n\n propagate (behaviour, payload, selectionSet, sideEffects) {\n propagateValues(this, behaviour, {\n payload,\n selectionSet,\n sideEffects,\n propagationFields: this._propagationFields\n });\n }\n\n getApplicableSideEffects (sideEffects, payload, propagationInf) {\n const context = this.context;\n const unitId = context.id();\n const aliasName = context.parentAlias();\n const propagationSourceCanvas = propagationInf.propPayload && propagationInf.propPayload.sourceCanvas;\n const sourceUnitId = propagationInf.propPayload && propagationInf.propPayload.sourceUnit;\n const sourceSideEffects = this._sourceSideEffects;\n const sideEffectInstances = this.sideEffects();\n const actionOnSource = sourceUnitId ? sourceUnitId === unitId : true;\n\n const applicableSideEffects = payload.sideEffects ? [{\n effects: payload.sideEffects,\n behaviours: [payload.action]\n }] : sideEffects;\n applicableSideEffects.forEach((d) => {\n let mappedEffects = d.effects;\n mappedEffects = mappedEffects.filter((se) => {\n const mutates = sideEffectInstances[se.name || se].constructor.mutates();\n if (mutates && propagationInf.isMutableAction === false) {\n return false;\n }\n if (!actionOnSource && payload.criteria !== null) {\n const sideEffectChecker = sourceSideEffects[se.name || se];\n return sideEffectChecker ? sideEffectChecker(propagationInf.propPayload, context) : true;\n }\n if (propagationSourceCanvas === aliasName || actionOnSource) {\n return se.applyOnSource !== false;\n }\n\n return true;\n });\n d.effects = mappedEffects;\n });\n return applicableSideEffects;\n }\n\n shouldApplySideEffects (propagate) {\n return propagate === false;\n }\n\n onDataModelPropagation () {\n return (data, config) => {\n let isSourceFieldPresent = true;\n let isMutableAction = false;\n const propPayload = config.payload;\n const sourceIdentifiers = config.sourceIdentifiers;\n const enabledFn = config.enabled;\n const action = config.action;\n const payloadFn = payloadGenerator[action] || payloadGenerator.__default;\n\n if (sourceIdentifiers) {\n const fieldsConfig = sourceIdentifiers.getFieldsConfig();\n const sourceIdentifierFields = Object.keys(fieldsConfig);\n const propFields = Object.keys(data[0].getFieldsConfig());\n if (!Object.values(fieldsConfig).some(d => d.def.type === FieldType.MEASURE)) {\n isSourceFieldPresent = sourceIdentifierFields.some(d => propFields.indexOf(d) !== -1);\n }\n }\n\n const payload = payloadFn(this.context, data, config);\n const sourceBehaviours = this._sourceBehaviours;\n const filterFn = sourceBehaviours[action] || sourceBehaviours['*'];\n let enabled = true;\n\n if (filterFn) {\n enabled = filterFn(propPayload || {}, this.context);\n }\n\n if (enabledFn) {\n enabled = enabledFn(config, this) && enabled !== false;\n }\n\n if (enabled) {\n const effects = this._behaviourEffectMap[action];\n const sideEffectInstances = this.sideEffects();\n isMutableAction = config.groupId ?\n effects.some(d => sideEffectInstances[d.name || d].constructor.mutates()) : config.isMutableAction;\n\n const propagationInf = {\n propagate: false,\n data,\n propPayload,\n sourceIdentifiers,\n persistent: false,\n isSourceFieldPresent,\n sourceId: config.propagationSourceId,\n isMutableAction: config.isMutableAction\n };\n\n this._actionHistory[action] = {\n payload,\n propagationInf,\n isMutableAction\n };\n this.dispatchBehaviour(action, payload, propagationInf);\n }\n };\n }\n\n prepareSelectionSets (behaviours) {\n const data = this.context.data();\n if (data) {\n this.createSelectionSet(data.getData().uids, behaviours);\n }\n return this;\n }\n\n initializeSideEffects () {\n if (this.context.data()) {\n super.initializeSideEffects();\n }\n return this;\n }\n\n remove () {\n this.context.cachedData()[0].unsubscribe('propagation');\n return this;\n }\n}\n","import { layerFactory } from '@chartshq/visual-layer';\nimport {\n Store,\n setAttrs,\n getUniqueId,\n getQualifiedClassName,\n selectElement,\n transactor,\n makeElement,\n registerListeners,\n generateGetterSetters,\n getDataModelFromIdentifiers,\n isSimpleObject,\n transposeArray,\n CommonProps,\n toArray,\n STATE_NAMESPACES\n} from 'muze-utils';\nimport { physicalActions, sideEffects, behaviouralActions, behaviourEffectMap } from '@chartshq/muze-firebolt';\nimport { actionBehaviourMap } from './firebolt/action-behaviour-map';\nimport {\n renderLayers,\n getNearestDimensionalValue,\n removeLayersBy,\n getLayersBy,\n getLayerFromDef,\n getLayerAxisIndex,\n sanitizeLayerDef,\n createSideEffectGroup,\n resolveEncodingTransform,\n createRenderPromise\n} from './helper';\nimport { renderGridLineLayers } from './helper/grid-lines';\nimport localOptions from './local-options';\nimport { listenerMap, calculateDomainListener } from './listener-map';\nimport {\n DOMAIN\n} from './enums/reactive-props';\nimport { PROPS } from './props';\nimport UnitFireBolt from './firebolt';\nimport { initSideEffects } from './firebolt/helper';\nimport './styles.scss';\n\nconst FORMAL_NAME = 'unit';\n\n/**\n * Visual Unit is hierarchical component created by {@link VisualGroup}. This component accepts layer definitions\n * and creates concrete layer instances from them, binds data and attaches axis to them. It also retreives the domain\n * from the layers and unions them and sets them on corresponding axis instances. This also creates the parent svg\n * groups for all the layers and delegates the rendering to all the layers.\n *\n * @public\n * @module VisualUnit\n * @class\n */\nexport default class VisualUnit {\n\n /**\n * Creates instance of visualization unit.\n *\n * @param {Object} registry Component registry\n * @param {Object} dependencies Dependencies required by visual unit.\n */\n constructor (registry, dependencies) {\n this._id = getUniqueId();\n this._dependencies = dependencies;\n this._layerDeps = {\n throwback: new Store({\n [CommonProps.ON_LAYER_DRAW]: false\n }),\n smartLabel: dependencies.smartLabel,\n lifeCycleManager: dependencies.lifeCycleManager\n };\n this._renderedResolve = null;\n this._renderedPromise = new Promise((resolve) => {\n this._renderedResolve = resolve;\n });\n createRenderPromise(this);\n this._layerDeps.throwback.registerChangeListener([CommonProps.ON_LAYER_DRAW], () => {\n this._renderedResolve();\n this._lifeCycleManager.notify({ client: this.layers(), action: 'drawn', formalName: 'layer' });\n });\n\n this._lifeCycleManager = dependencies.lifeCycleManager;\n this._layersMap = {};\n this._gridLinesSelection = {};\n this._gridBandsSelection = {};\n this._gridLines = [];\n this._gridBands = [];\n this._layerNamespaces = {};\n this._layerAxisIndex = {};\n this._transformedDataModels = {};\n layerFactory.setLayerRegistry(registry.layerRegistry);\n generateGetterSetters(this, PROPS);\n this.registry(registry);\n this.cachedData([]);\n }\n\n static formalName () {\n return FORMAL_NAME;\n }\n\n static getState () {\n return [\n {\n domain: {}\n },\n localOptions\n ];\n }\n\n store (...params) {\n if (params.length) {\n this._store = params[0];\n const metaInf = this.metaInf();\n this.store().append(`${STATE_NAMESPACES.UNIT_LOCAL_NAMESPACE}`, {\n [`${metaInf.namespace}`]: null\n });\n const localNs = `${STATE_NAMESPACES.UNIT_LOCAL_NAMESPACE}.${metaInf.namespace}`;\n transactor(this, localOptions, this.store().model, {\n namespace: localNs\n });\n registerListeners(this, listenerMap, {\n local: localNs,\n global: STATE_NAMESPACES.UNIT_GLOBAL_NAMESPACE\n }, {\n rowIndex: metaInf.rowIndex,\n colIndex: metaInf.colIndex\n });\n this.firebolt(new UnitFireBolt(this, {\n physical: physicalActions,\n behavioural: behaviouralActions,\n physicalBehaviouralMap: actionBehaviourMap\n }, sideEffects, behaviourEffectMap));\n return this;\n }\n return this._store;\n }\n\n /**\n * Static helper for creates a unit instance\n *\n * @param {Object} [id] optional unique identifier for a unit; , id is calculated internally\n * @param {DataModel} data instance of datamodel\n * @param {Array.} layers layer configuration\n * @param {Object} config configurtion for the visual unit\n * @return {VisualUnit} Instance of a unit\n */\n static create (...params) {\n return new this(...params);\n }\n\n /**\n * Returns the instance of firebolt associated with this visual unit. Firebolt dispatches the behavioural actions\n * when any physical action happens on the elements of visual unit.\n *\n * @public\n *\n * @return {Firebolt} Instance of firebolt.\n */\n firebolt (...firebolt) {\n if (firebolt.length) {\n this._firebolt = firebolt[0];\n return this;\n }\n return this._firebolt;\n }\n\n /**\n * Returns the unique id of this visual unit.\n *\n * @public\n * @return {string} Unique identifier.\n */\n id () {\n return this._id;\n }\n\n lockModel () {\n this._store.model.lock();\n return this;\n }\n\n unlockModel () {\n this._store.model.unlock();\n return this;\n }\n\n timeDiffsByField (...params) {\n if (params.length) {\n return this;\n }\n return this._timeDiffsByField;\n }\n\n /**\n * Renders the visual unit. It creates the layout and renders the axes and layers.\n *\n * @return {VisualUnit} Instance of visual unit.\n */\n render (container) {\n const config = this.config();\n const { className, defClassName, sideEffectClassName, classPrefix } = config;\n const qualifiedClassName = getQualifiedClassName(defClassName, this.id(), config.classPrefix);\n const width = this.width();\n const height = this.height();\n const containerSelection = selectElement(container).style('position', 'relative');\n\n this._rootSvg = makeElement(containerSelection, 'svg', [null], className)\n .style('width', `${width}px`).style('height', `${height}px`);\n\n const node = this._rootSvg.node();\n setAttrs(node, {\n width,\n height,\n class: qualifiedClassName.join(' ')\n });\n renderGridLineLayers(this, node);\n renderLayers(this, node, this.layers(), {\n width,\n height\n });\n this._sideEffectGroup = createSideEffectGroup(node, `${classPrefix}-${sideEffectClassName}`);\n const firebolt = this.firebolt();\n initSideEffects(firebolt.sideEffects(), firebolt);\n return this;\n }\n\n done () {\n return this._renderedPromise;\n }\n\n /**\n * Caches all the datamodels in an array from the next `data()` call on visual unit until `clearCaching()` or\n * `resetData()` is called on it.\n *\n * @public\n * @return {VisualUnit} Instance of visual unit.\n */\n\n enableCaching () {\n this._cache = true;\n return this;\n }\n\n /**\n * Clears all the previous cached data.\n *\n * @public\n * @segment VisualUnit\n * @return {VisualUnit} Instance of visual unit.\n */\n clearCaching () {\n this._cache = false;\n this.cachedData([this.cachedData()[0]]);\n return this;\n }\n\n /**\n * Returns the drawing information from visual unit.Drawing context contains the dimensions of unit and the svg\n * container of the visual unit.\n *\n * @public\n *\n * @return {Object} Drawing information.\n * ```\n * {\n * htmlContainer: // Html container of svg container of the visual unit\n * svgContainer: // Root svg container\n * width: // Width of the visual unit\n * height: // Height of the visual unit\n * sideEffectGroup: // Svg group for drawing side effect elements.\n * parentContainer: // Parent html container of the visual unit.\n * xOffset: // x offset space from the starting x position of the container,\n * yOffset: // y offset space from the starting y position of the container\n * }\n * ```\n */\n getDrawingContext () {\n const rootSvg = this._rootSvg && this._rootSvg.node();\n const width = this.width();\n const height = this.height();\n const { el, dimensions } = this.parentContainerInf();\n return {\n htmlContainer: this.mount(),\n svgContainer: rootSvg,\n width,\n height,\n sideEffectGroup: this._sideEffectGroup,\n parentContainer: el,\n parentContainerDimensions: dimensions,\n xOffset: 0,\n yOffset: 0\n };\n }\n\n /**\n * Returns the serialized configuration of visual unit.\n *\n * @return {Object} serialized configuration\n */\n serialize () {\n return {\n layers: this.layers().map(layer => layer.serialize()),\n config: this.config(),\n axes: this.axes().map(axis => axis.serialize())\n };\n }\n\n mount (...mount) {\n if (mount.length) {\n this._mount = mount[0];\n this.render(mount[0]);\n this.firebolt().mapActionsAndBehaviour();\n return this;\n }\n return this._mount;\n }\n\n /**\n * Adds a new layer to the visual unit. It takes a layer definition and creates layer instances from them. It does\n * not render the layers. It returns the layer instances in an array. If the layer definition is a composite layer,\n * then multiple layer instances will be returned in the array.\n *\n * To add a layer in the unit,\n * ```\n * unit.addLayer({\n * name: 'bullet',\n * mark: 'bar',\n * encoding: {\n * x: 'Year',\n * y: 'Acceleration',\n * color: 'Origin'\n * }\n * });\n * ```\n * @public\n * @param {Object} layerDef Definition of new layer.\n *\n * @return {Array} Array of layer instances.\n */\n addLayer (layerDefinition) {\n const layerDefinitions = sanitizeLayerDef(toArray(layerDefinition));\n\n const layersMap = this._layersMap;\n const markSet = {};\n const store = {\n layers: {},\n components: {\n unit: this\n }\n };\n let layerIndex = 0;\n let startIndex = [].concat(...Object.values(this._layersMap)).length;\n const metaInf = this.metaInf();\n const props = this._layerNamespaces;\n const layers = layerDefinitions.sort((a, b) => a.order - b.order).reduce((layersArr, layerDef) => {\n const definition = layerDef.def;\n const markId = definition.name;\n const defArr = toArray(definition);\n const namespaces = [];\n defArr.forEach((def) => {\n def.order = layerDef.order + layerIndex;\n const namespace = `${metaInf.namespace}${startIndex}`;\n if (!layersMap[markId]) {\n startIndex++;\n if (definition.calculateDomain !== false) {\n props[`${STATE_NAMESPACES.LAYER_GLOBAL_NAMESPACE}.${DOMAIN}.${namespace}`] = true;\n }\n }\n namespaces.push(namespace);\n });\n layerIndex += defArr.length;\n const instances = getLayerFromDef(this, definition, layersMap[markId], namespaces);\n store.layers = Object.assign(store.layers, instances);\n const instanceValues = Object.values(instances);\n layersArr = layersArr.concat(...instanceValues);\n layersMap[markId] = instanceValues;\n markSet[markId] = markId;\n return layersArr;\n }, []);\n\n store.unit = this;\n const layerdeps = {};\n const layersArr = [].concat(...Object.values(this._layersMap));\n\n layersArr.forEach((layer) => {\n const alias = layer.alias();\n store.layers[alias] = layer;\n layerdeps[alias] = [];\n });\n layers.forEach((layer) => {\n const depArr = resolveEncodingTransform(layer, store);\n layerdeps[layer.alias()] = depArr;\n });\n\n this._layerDepOrder = layerdeps;\n this._layerAxisIndex = Object.assign(this._layerAxisIndex, getLayerAxisIndex(layers, this.fields()));\n const stateStore = this.store();\n\n stateStore.unsubscribe({\n key: 'calculateDomainListener',\n namespace: `${STATE_NAMESPACES.UNIT_LOCAL_NAMESPACE}.${metaInf.namespace}`\n });\n stateStore.registerImmediateListener(Object.keys(props), calculateDomainListener(this, metaInf.namespace),\n false, {\n key: 'calculateDomainListener',\n namespace: `${STATE_NAMESPACES.UNIT_LOCAL_NAMESPACE}.${metaInf.namespace}`\n });\n this.layers(layersArr);\n return layers;\n }\n\n /**\n *\n *\n *\n * @memberof VisualUnit\n */\n remove () {\n const lifeCycleManager = this._dependencies.lifeCycleManager;\n lifeCycleManager.notify({ client: this, action: 'beforeremove', formalName: 'unit' });\n this.store().unsubscribe({\n namespace: `${STATE_NAMESPACES.UNIT_LOCAL_NAMESPACE}.${this.metaInf().namespace}`\n });\n selectElement(this.mount()).remove();\n this.firebolt().remove();\n // Remove layers\n lifeCycleManager.notify({ client: this.layers(), action: 'beforeremove', formalName: 'layer' });\n this.layers().forEach(layer => layer.remove());\n lifeCycleManager.notify({ client: this.layers(), action: 'removed', formalName: 'layer' });\n lifeCycleManager.notify({ client: this, action: 'removed', formalName: 'unit' });\n return this;\n }\n\n /**\n *\n *\n * @param {*} identifiers\n *\n * @memberof VisualUnit\n */\n getDataModelFromIdentifiers (identifiers, mode, parentModel) {\n if (identifiers === null) {\n return null;\n }\n const dataModel = parentModel || this.data();\n return getDataModelFromIdentifiers(dataModel, identifiers, mode);\n }\n\n /**\n * Resets the data of visual unit to original data model. It also clears the cached data.\n *\n * @public\n * @segment VisualUnit\n * @return {VisualUnit} Instance of visual unit.\n */\n resetData () {\n this.data(this.cachedData()[0]);\n return this;\n }\n\n /**\n *\n *\n *\n * @memberof VisualUnit\n */\n getSourceInfo () {\n return {\n dimensionMeasureMap: this._dimensionMeasureMap,\n fields: this.fields(),\n data: this.data(),\n axes: this.axes()\n };\n }\n\n /**\n *\n *\n *\n * @memberof VisualUnit\n */\n getDefaultTargetContainer () {\n const { classPrefix, defClassName } = this.config();\n return [`.${classPrefix}-${defClassName}`];\n }\n\n /**\n * Returns an array of layer instances which matches the supplied mark type.\n *\n * @public\n *\n * @param {string} type Mark type of layer.\n *\n * @return {Array} Array of layer instances.\n */\n getLayersByType (type) {\n const layers = getLayersBy(this.layers(), 'type', type);\n return layers;\n }\n\n /**\n * Returns the layer instance which matches the supplied layer name. If no layer is found, then it returns\n * undefined.\n *\n * @public\n * @param {string} name Name of layer.\n *\n * @return {VisualUnit} Layer instance.\n */\n getLayerByName (name) {\n const layers = getLayersBy(this.layers(), 'name', name);\n return layers[0];\n }\n\n /**\n * Returns the point located nearest to the supplied x and y position. It returns the unique identifiers of the\n * point. This function also accepts an additional configuration `getAllPoints` inside `config` object in the third\n * argument which if set to true, then it returns the identifiers of all the points which falls on the nearest\n * x value or y value if any one of the field is a dimension. Additionally, a target property is also returned\n * which contains the identifier of the nearest point. If no nearest point is found, then it returns identifier\n * as null.\n *\n * @public\n *\n * @param {number} x X Position of the point from where nearest point is to be found.\n * @param {number} y Y Position of the point from where nearest point is to be found.\n * @param {Object} config Additional configuration options.\n * @param {boolean} config.getAllPoints If true, then returns all the points nearest to the x value or y value if\n * it is dimension.\n * @param {Object} config.data Data associated with the nearest point.\n * @return {Object} Nearest point information\n * ```\n * {\n * id: [['Origin'], ['USA'], ['Japan']], // Identifiers of all the points closest to the x value.\n * target: [['Origin'], ['Japan']] // Identifier of the nearest point.\n * }\n * ```\n */\n getNearestPoint (x, y, config) {\n let pointObj = {\n id: null\n };\n const dimValue = getNearestDimensionalValue(this, {\n x,\n y\n });\n\n if (dimValue !== null && config.getAllPoints) {\n pointObj.id = dimValue;\n const pointInf = this.getMarkInfFromLayers(x, y, config);\n pointObj.target = pointInf && pointInf.id ? pointInf.id : pointObj.id;\n return pointObj;\n }\n\n const markInf = this.getMarkInfFromLayers(x, y, config) || { id: null };\n pointObj = Object.assign({}, markInf);\n\n pointObj.target = markInf.id;\n return pointObj;\n }\n\n getMarkInfFromLayers (x, y, args) {\n const layers = this.layers();\n const len = layers.length;\n let point = null;\n // Iterate through the layers array and fetch the nearest point from each layer. If a valid\n // nearest point is found from any layer, then return that point.\n for (let i = 0; i < len; i++) {\n const layer = layers[i];\n const config = layer.config();\n if (config.interactive !== false) {\n point = layer.getNearestPoint(x, y, args);\n }\n if (point) {\n return point;\n }\n }\n return point;\n }\n\n /**\n * Get the information of all the marks such as x, y position and size from supplied identifiers. It\n * returns an array of points whose data matches the given identifiers.\n *\n * @public\n *\n * @param {Array|Object} identifiers Field names and their corresponding values.\n * ```\n * identifiers can be given in an array of array,\n * ['Origin', 'Name'], // Names of the fields supplied in first array\n * ['USA', 'ford'], // Data values of each field supplied in rest of the arrays.\n * ['Japan', 'ford']\n * or in an object,\n * {\n * Origin: ['USA']\n * }\n * ```\n * @param {Object} config Optional configurations which decides which information of the mark will\n * be retrieved.\n * @param {boolean} [config.getAllAttrs = false] If true, then returns all the information of each mark.\n * @param {boolean} [config.getBBox = false] If true, then returns the bounding box of each mark.\n *\n * @return {Array} Array of objects containing the information of each point.\n * ```\n * By default, the method returns the array of points in this structure,\n * [\n * {\n * x: 20,\n * y: 100,\n * width: 200,\n * height: 100\n * }\n * ]\n * If 'config.getAllAttrs' is true, then it returns all the information of each mark,\n * [\n * // Positions of mark on initial state of transition.\n * enter: {\n * x: 0,\n * y: 0\n * },\n * // Final positions of the mark\n * update: {\n * x: 20,\n * y: 10\n * },\n * style: // css styles of each mark\n * source: [200, 'USA'] // Row information of each mark\n * id: 20 // Row id of each mark\n * ]\n * ```\n */\n getPlotPointsFromIdentifiers (identifiers, config = {}) {\n let points = [];\n let parsedIdentifiers = identifiers;\n if (identifiers === null) {\n return [];\n }\n const layers = this.layers();\n const len = layers.length;\n if (isSimpleObject(identifiers)) {\n parsedIdentifiers = [Object.keys(identifiers)];\n parsedIdentifiers = [...parsedIdentifiers, ...transposeArray(Object.values(identifiers))];\n }\n for (let i = 0; i < len; i++) {\n const layer = layers[i];\n if (layer.config().interactive !== false) {\n points = [...points, ...layer.getPointsFromIdentifiers(parsedIdentifiers, config)];\n }\n }\n return points;\n }\n\n /**\n * Removes the layer instance which matches the supplied layer name.\n *\n * @public\n * @param {string} name Name of layer\n *\n * @return {VisualUnit} Instance of visual unit.\n */\n removeLayerByName (name) {\n removeLayersBy('name', name);\n return this;\n }\n\n /**\n * Removes all the layer instances which matches the supplied mark type.\n *\n * @public\n * @param {string} type Mark type of layer.\n *\n * @return {VisualUnit} Instance of visual unit.\n */\n removeLayersByType (type) {\n removeLayersBy('type', type);\n return this;\n }\n}\n","import { DataModel } from 'muze-utils';\n\nimport { retriveDomainFromData } from './group-utils';\n\n/**\n * Gets name of fields form the variables\n *\n * @param {*} fields1\n * @param {*} [fields2=[]]\n *\n */\nconst getFieldNames = (fields1, fields2 = []) => [fields1, fields2].map(fields => fields.reduce((acc, d) => {\n acc = [...acc, ...d.getMembers()];\n return acc;\n}, []));\n\n/**\n * Creates a selected datamodel from a parent datamodel and a set of field names\n *\n * @param {Object} datamodel provided as input\n * @param {Array} fieldNames schema names\n * @param {Array} fieldValues values of those schema names to be selected\n * @return {Object} creates a new selected datamodel\n */\nconst createSelectedDataModel = (datamodel, fieldNames, fieldValues) =>\n datamodel.select(fields => fieldNames.every((field, k) => fields[field].value === fieldValues[k]));\n\n/**\n *\n *\n * @param {*} facets\n * @param {*} keyArray\n *\n */\nconst uniqueKeyGenerator = (keyArray, context, depth = 0, val = []) => {\n const {\n facets,\n dataModel,\n uniqueValues\n } = context;\n\n // Get unique keys for the next depth recursively if required\n if (facets[depth + 1]) {\n const field = facets[depth];\n uniqueValues.forEach((value) => {\n const newDm = dataModel.select(fields => fields[field].value === value);\n const nextDepthUniqueValues = retriveDomainFromData(newDm, facets[depth + 1]);\n const newContext = {\n facets,\n dataModel: newDm,\n uniqueValues: nextDepthUniqueValues\n };\n\n uniqueKeyGenerator(keyArray, newContext, depth + 1, [...val, value]);\n });\n } else {\n uniqueValues.forEach((value) => {\n keyArray.push([...val, value]);\n });\n }\n};\n\n/**\n * projects row model based on the set of row and/or column and other projection fields\n *\n * @param {Object} datamodel provided as input\n * @return {Object} Projected datamodel\n */\nconst projectRows = (datamodel, projections) => {\n const {\n allColumnProjections,\n rowProjections,\n optionalProjections\n } = projections;\n\n if (rowProjections.length > 0) {\n return rowProjections.map((projectFields) => {\n const [projFieldNames, colProjFieldNames] = getFieldNames(projectFields, allColumnProjections);\n return datamodel.project([...projFieldNames, ...colProjFieldNames, ...optionalProjections]);\n });\n }\n return [datamodel];\n};\n\n/**\n * Adds the datamodels to current row index based on column fields\n *\n * @param {Array} context current context\n * @param {Array} valueCellCreator List of facets applied to the current datamodel\n */\nconst pushToMatrix = (context, valueCellCreator) => {\n let cells = [];\n const {\n matrix,\n datamodel,\n facetInfo,\n fieldInfo\n } = context;\n // Get projected fields for current row\n const {\n rowProjections,\n colProjections,\n optionalProjections\n } = fieldInfo;\n const {\n rowIndex,\n columnIndex\n } = facetInfo;\n const rowProj = rowProjections[(rowIndex) % rowProjections.length] || [];\n\n // Get the cells for the matrix from the return function of the callback on the datamodel.\n // callback function -> (datamodel, {projections, indices}, facets)\n if (colProjections.length > 0) {\n cells = colProjections.map((projectFields, projIdx) => {\n const [colProjFieldNames, rowProjFieldNames] = getFieldNames(projectFields, rowProj);\n const projectedDm = datamodel.project([...colProjFieldNames, ...rowProjFieldNames, ...optionalProjections]);\n const projections = { rowFields: rowProj, columnFields: projectFields };\n const indices = { rowIndex, columnIndex: columnIndex * colProjections.length + projIdx };\n\n return valueCellCreator(projectedDm, { projections, indices }, facetInfo);\n });\n } else {\n const projections = { rowFields: rowProj, columnFields: [] };\n const indices = { rowIndex, columnIndex };\n\n cells = [valueCellCreator(datamodel, { projections, indices }, facetInfo)];\n }\n\n matrix[rowIndex] = matrix[rowIndex] || [];\n matrix[rowIndex].push(...cells);\n};\n\n/**\n * Gets Matrixes for corresponding datamodel, facets and projections\n *\n * @param {Object} dataModel input datamodel\n * @param {Object} fieldMap corresponding fieldmap\n * @param {Array} facetsAndProjections contains the set of facets and projections for the matrices\n * @param {Function} valueCellCreator Callback executed after datamodels are prepared after sel/proj\n * @return {Object} set of matrices with the corresponding row and column keys\n */\nexport const getMatrixModel = (dataModel, facetsAndProjections, valueCellCreator) => {\n let rowDataModels = [];\n const rowKeys = [];\n const columnKeys = [];\n const allColumnProjections = [];\n const matrix = [];\n const facetInfo = [];\n\n const fieldInfo = Object.assign({}, facetsAndProjections);\n const {\n rowFacets,\n colFacets,\n colProjections\n } = fieldInfo;\n\n colProjections.forEach((colProj) => {\n allColumnProjections.push(...colProj);\n });\n fieldInfo.allColumnProjections = allColumnProjections;\n\n // Performing row selection and projection\n if (rowFacets.length > 0) {\n // Get unique values for the root level of facet\n const field = rowFacets[0].toString();\n const firstLevelRowKeys = retriveDomainFromData(dataModel, field);\n\n // Get unique keys in the form of an array of arrays for each row\n uniqueKeyGenerator(rowKeys, { facets: rowFacets, dataModel, uniqueValues: firstLevelRowKeys });\n\n // Apply selection -> projection -> row datamodels\n rowKeys.forEach((val) => {\n // Create faceted datamodel\n const [rowFacetFieldNames] = getFieldNames(rowFacets);\n const selectedDataModel = createSelectedDataModel(dataModel, rowFacetFieldNames, val);\n\n // Project the datamodel based on the number of projections (based on last levels)\n const newProjectedDataModels = projectRows(selectedDataModel, fieldInfo);\n rowDataModels.push(...newProjectedDataModels);\n\n newProjectedDataModels.forEach(() => {\n facetInfo.push([rowFacets, val]);\n });\n });\n } else {\n // No row facets, hence only row projection\n rowDataModels.push(...projectRows(dataModel, fieldInfo));\n }\n\n // Maintaining set of row datamodels for column resolution\n rowDataModels = rowDataModels.length > 0 ? rowDataModels : [[]];\n\n // Performing column selection and projection\n if (colFacets.length > 0) {\n const colFacetNames = colFacets.map(d => `${d}`);\n // Get unique values for the root level of facet\n const field = colFacetNames[0];\n const firstLevelColumnKeys = retriveDomainFromData(dataModel, field);\n\n // Get unique keys to create faceted datamodels: this time for columns\n uniqueKeyGenerator(columnKeys, {\n facets: colFacetNames,\n dataModel,\n uniqueValues: firstLevelColumnKeys\n });\n // For each row in the datamodel, apply selection -> projection -> push the projection to matri\n rowDataModels.forEach((dme, rIndex) => {\n facetInfo[rIndex] = facetInfo[rIndex] || [[], []];\n columnKeys.forEach((val, cIndex) => {\n matrix[rIndex] = matrix[rIndex] || [];\n\n // If datamodel is not present in current row, choose parent datamodel\n const datamodel = dme instanceof DataModel ? dme : dataModel;\n\n // Selection is made on the datamodel for the current row\n const selectedDataModel = createSelectedDataModel(datamodel, colFacetNames, val);\n const context = {\n matrix,\n datamodel: selectedDataModel,\n facetInfo: {\n rowFacets: facetInfo[rIndex],\n colFacets: [colFacets, val],\n rowIndex: rIndex,\n columnIndex: cIndex\n },\n fieldInfo\n };\n pushToMatrix(context, valueCellCreator);\n });\n });\n } else {\n // No column facets, hence only row projection\n rowDataModels.forEach((dme, rIndex) => {\n facetInfo[rIndex] = facetInfo[rIndex] || [[], []];\n const context = {\n matrix,\n datamodel: dme || dataModel,\n facetInfo: {\n rowFacets: facetInfo[rIndex],\n colFacets: [[], []],\n rowIndex: rIndex,\n columnIndex: 0\n },\n fieldInfo\n };\n\n pushToMatrix(context, valueCellCreator);\n });\n }\n\n // Getting column keys\n const transposedColKeys = columnKeys.length > 0 ? columnKeys[0].map((col, i) =>\n columnKeys.map(row => row[i])) : columnKeys;\n\n return { matrix, rowKeys, columnKeys: transposedColKeys };\n};\n","import { AxisOrientation } from '@chartshq/muze-axis';\nimport {\n getObjProp,\n FieldType,\n STATE_NAMESPACES,\n retrieveNearestGroupByReducers,\n mergeRecursive,\n createSelection\n} from 'muze-utils';\nimport { getMatrixModel } from './matrix-model';\nimport {\n getCellKey,\n isDistributionEqual,\n mutateAxesFromMap,\n getFieldsFromSuppliedLayers,\n extractFields\n} from './group-utils';\nimport { ROW, ROWS, COLUMNS, COL, LEFT, RIGHT, TOP, BOTTOM, PRIMARY, SECONDARY, X, Y } from '../enums/constants';\n\n/**\n * Updates row and column cells with the geom cell corresponding to the facet keys\n *\n * @param {*} resolver\n * @param {*} facets\n */\nconst updateCells = (resolver, facets, geomCell) => {\n [ROW, COL].forEach((field) => {\n const cells = resolver[`${field}Cells`]();\n const facetKey = facets[`${field}Facets`][1].join();\n\n !cells[facetKey] && (cells[facetKey] = []);\n cells[facetKey].push(geomCell);\n resolver[`${field}Cells`](cells);\n });\n};\n\n/**\n *\n *\n * @param {*} context\n * @param {*} datamodel\n * @param {*} fieldInfo\n * @param {*} facets\n *\n */\nexport const createValueCells = (context, datamodel, fieldInfo, facets) => {\n const {\n projections,\n indices\n } = fieldInfo;\n const {\n rowFields,\n columnFields\n } = projections;\n const {\n rowIndex,\n columnIndex\n } = indices;\n const {\n suppliedLayers,\n cell: GeomCell,\n resolver,\n config,\n encoder,\n detailFields\n } = context;\n const axes = resolver.axes();\n const cacheMaps = resolver.cacheMaps();\n const matrixLayers = resolver.matrixLayers();\n const labelManager = resolver.dependencies().smartlabel;\n const horizontalAxis = resolver.horizontalAxis();\n const verticalAxis = resolver.verticalAxis();\n const datamodelTransform = resolver.datamodelTransform();\n const {\n entryCellMap,\n exitCellMap\n } = cacheMaps;\n const layerConfigArr = encoder.getLayerConfig({ columnFields, rowFields }, suppliedLayers || []);\n const axesCreators = { config, labelManager, axes, cacheMaps };\n\n fieldInfo.normalizedColumns = verticalAxis.fields;\n fieldInfo.normalizedRows = horizontalAxis.fields;\n\n const groupAxes = encoder.createAxis(axesCreators, fieldInfo, context);\n\n matrixLayers[rowIndex] = matrixLayers[rowIndex] ? matrixLayers[rowIndex] : [];\n matrixLayers[rowIndex][columnIndex] = layerConfigArr;\n\n // return from map if already there otherwise create and put in map\n const geomCellKey = getCellKey(rowIndex, columnIndex);\n const fields = {\n y: rowFields,\n x: columnFields\n };\n\n const allFacets = [\n [...facets.rowFacets[0], ...facets.colFacets[0]],\n [...facets.rowFacets[1], ...facets.colFacets[1]]\n ];\n const geomCell = !exitCellMap.has(geomCellKey) ? new GeomCell() : exitCellMap.get(geomCellKey);\n\n geomCell.data(datamodel)\n .axes(groupAxes)\n .fields(fields)\n .transform(datamodelTransform)\n .detailFields(detailFields)\n .facetByFields(allFacets);\n entryCellMap.set(geomCellKey, geomCell);\n exitCellMap.delete(geomCellKey);\n\n updateCells(resolver, facets, geomCell);\n\n return entryCellMap.get(geomCellKey);\n};\n\n/**\n * Creates axis cells based on the set of axes\n *\n * @param {Selection} selection Contains a selection of the axis units\n * @param {Array} axes Actual axis units\n * @param {number} axisIndex 0-> primary axis, 1-> secondary axis(when dual axis is made)\n * @param {Object} cells Contains a collection of the cells\n * @return {Object} return either set of axis/blank cells depending on the config\n */\n\nconst createAxisCells = (selection, axes, axisIndex, cells) =>\n createSelection(selection, axis => axis, axes, (item, i) => i + item.reduce((e, n) => {\n const id = n.id + axisIndex;\n return e + id;\n }, '')).map((axis) => {\n if (axis && axis[axisIndex]) {\n const axisInst = axis[axisIndex];\n const { orientation, show } = axisInst.config();\n\n return new cells.AxisCell().source(axisInst).config({\n isOffset: orientation === AxisOrientation.LEFT || orientation === AxisOrientation.TOP,\n show\n });\n }\n return new cells.BlankCell().config({ show: false });\n });\n\n/**\n *\n *\n * @param {*} context\n * @param {*} selectionObj\n * @param {*} cells\n * @retur\n */\nconst axisPlaceholderGn = (context, selObj, cells) => {\n const {\n matrices\n } = context;\n const {\n axesMatrix\n } = matrices;\n\n return (type, axisFrom) => {\n const axes = axesMatrix[`${type}`];\n\n if (axes && axes.length) {\n if (type === X || type === Y) {\n const fieldNames = type === Y ? ROWS : COLUMNS;\n\n [PRIMARY, SECONDARY].forEach((fieldType, index) => {\n const selObjProp = `${fieldNames}${fieldType}`;\n let axisIndex = index;\n let axesForDraw = axes;\n if (axisFrom === RIGHT || axisFrom === BOTTOM) {\n axisIndex = 1 - axisIndex;\n }\n if (!getObjProp(axes, 0, axisIndex)) {\n axesForDraw = [];\n }\n selObj[selObjProp] = createAxisCells(selObj[selObjProp], axesForDraw, axisIndex, cells);\n });\n } else {\n selObj.rowsPrimary = createAxisCells(selObj.rowPrime, axes.map(() => []), 0, cells);\n selObj.columnsPrimary = createAxisCells(selObj.colPrime, axes[0], 0, cells);\n }\n }\n return selObj;\n };\n};\n\n/**\n * Creates header cells based on the set of headers\n *\n * @param {Object} selection Contains a selection of the header units\n * @param {string} headers Contains a list of the headers\n * @param {Object} cells Contains a collection of the cells\n * @param {Object} labelManager smart label instance\n * @return {Object} return either set of header cells depending on the config\n */\nconst createTextCells = (selection, headers, cells, labelManager) => createSelection(selection,\n label => new cells.TextCell({}, { labelManager }).source(label), headers, (key, i) => key + i);\n\n/**\n *\n *\n * @param {*} context\n * @param {*} selectionObj\n * @param {*} cells\n * @param {*} labelManager\n *\n */\nconst headerPlaceholderGn = (context, selectionObj, cells, labelManager) => {\n const {\n axis,\n keys,\n type,\n facet\n } = context;\n const counter = axis.length / keys.length;\n const selectionKeys = keys.length ? axis.map((d, i) => keys[Math.floor(i / counter)]) : [];\n\n return createSelection(selectionObj[`${type}Headers`], keySet => keySet, selectionKeys,\n (keySet, i) => `${keySet.join(',')}-${i}`)\n .map(keySet => createTextCells(null, keySet, cells, labelManager)\n .map((cell, k, i) => cell.source(keySet[i]).config(facet)));\n};\n\n/**\n * Creates a set of placeholders as a part of selection object\n *\n * @param {Array} normalizedOptions contains normalized rows and columns\n * @param {Array} matrices contains axis and value matrices\n * @param {aArrayny} projections contains set of row and column projections\n * @param {Object} cells Contains a collection of the cells\n * @param {Object} labelManager smart label instance\n * @return {Object} Creates a set of placeholders as a part of selections\n */\nconst generatePlaceholders = (context, cells, labelManager) => {\n let selectionObj;\n const {\n matrices,\n fields,\n facetsAndProjections,\n selection,\n facet,\n encoders,\n resolver\n } = context;\n const {\n rows,\n columns\n } = fields;\n const {\n valuesMatrix\n } = matrices;\n const {\n rowProjections,\n colProjections\n } = facetsAndProjections;\n const {\n rowKeys,\n columnKeys\n } = valuesMatrix;\n const takeAxisFrom = encoders.simpleEncoder._axisFrom;\n const takeHeaderFrom = encoders.simpleEncoder._headerFrom;\n\n selectionObj = selection || {};\n\n ['pie', X, Y].forEach((axis) => {\n const axisFrom = axis === X ? takeAxisFrom.column : takeAxisFrom.row;\n selectionObj = axisPlaceholderGn(context, selectionObj, cells)(axis, axisFrom);\n });\n\n const {\n rowsPrimary,\n rowsSecondary,\n columnsPrimary,\n columnsSecondary\n } = selectionObj;\n\n const rowAxis = rowsPrimary && rowsPrimary.getObjects().length ? rowsPrimary.getObjects() :\n (rowsSecondary && rowsSecondary.getObjects().length ? rowsSecondary.getObjects() : []);\n const colAxis = columnsPrimary && columnsPrimary.getObjects().length ? columnsPrimary.getObjects() :\n (columnsSecondary && columnsSecondary.getObjects().length ? columnsSecondary.getObjects() : []);\n\n const headerConfig = [\n { type: LEFT, section: rows[0], axis: rowAxis, headerFrom: takeHeaderFrom.row },\n { type: RIGHT, section: rows[1], axis: rowAxis, headerFrom: takeHeaderFrom.row },\n { type: TOP, section: columns[0], axis: colAxis, headerFrom: takeHeaderFrom.column },\n { type: BOTTOM, section: columns[1], axis: colAxis, headerFrom: takeHeaderFrom.column }\n ];\n\n headerConfig.forEach((config, index) => {\n let keys;\n let length;\n const {\n type,\n section,\n axis,\n headerFrom\n } = config;\n\n if (index < 2) {\n keys = rowKeys;\n length = rowProjections.length > 0 ? rowProjections.length : 1;\n } else {\n keys = columnKeys;\n length = colProjections.length > 0 ? colProjections.length : 1;\n }\n keys = keys.map(arr => arr.map(val => resolver.valueParser()(val)));\n if (section.length && headerFrom === type && axis && keys.length) {\n const hContext = { axis, length, type };\n let headers = [];\n if (index < 2) {\n hContext.keys = keys;\n hContext.facet = facet.rows;\n headers = headerPlaceholderGn(hContext, selectionObj, cells, labelManager);\n } else {\n hContext.facet = facet.columns;\n hContext.keys = keys[0].map((key, i) => keys.map(e => e[i]));\n\n headers = headerPlaceholderGn(hContext, selectionObj, cells, labelManager);\n }\n selectionObj[`${type}Headers`] = headers;\n } else {\n selectionObj[`${type}Headers`] = null;\n }\n });\n return selectionObj;\n};\n\n/**\n * Generates matrices\n *\n * @param {Object} config Configuration to generate matrices\n * @param {Array} matrices Matrices containing the set of visual units and axes units\n * @param {Object} cells Contains a collection of the cells\n * @param {Object} labelManager smart label instance\n * @return {Object} contains a collection of matrices\n */\nexport const generateMatrices = (context, matrices, cells, labelManager) => {\n const {\n unitHeight,\n unitWidth,\n facetsAndProjections,\n normalizedRows,\n normalizedColumns,\n selection,\n axisFrom,\n facet,\n encoders,\n resolver\n } = context;\n const placeholderContext = {\n fields: {\n rows: normalizedRows,\n columns: normalizedColumns\n },\n matrices,\n facetsAndProjections,\n selection,\n axisFrom,\n facet,\n encoders,\n resolver\n };\n // Generate placeholders for all matrices\n const selectionObj = generatePlaceholders(placeholderContext, cells, labelManager);\n const {\n columnsPrimary,\n columnsSecondary,\n rowsPrimary,\n rowsSecondary,\n leftHeaders,\n topHeaders,\n bottomHeaders,\n rightHeaders\n } = selectionObj;\n const [rowPrime, rowSec, colPrime, colSec] = [rowsPrimary, rowsSecondary, columnsPrimary, columnsSecondary]\n .map(d => (d ? d.getObjects() : []));\n const [leftFacets, rightFacets] = [leftHeaders, rightHeaders]\n .map(e => (e ? e.getObjects()\n .map(f => f.getObjects()) : []));\n let rowPriority = rowSec.length ? 1 : -1;\n rowPrime.length && rowPriority++;\n let colPriority = colSec.length ? 1 : -1;\n colPrime.length && colPriority++;\n\n // Compute left matrix using left headers and the axes on the rows\n let leftMatrix = leftFacets.length ? leftFacets.map((d, i) => {\n rowPrime[i] = rowPrime[i] ? [rowPrime[i]] : [];\n return [...d, ...rowPrime[i]];\n }) : (rowPrime ? rowPrime.map(d => [d]) : []);\n\n // Compute right matrix using right headers and the axes on the rows\n const rightMatrix = rowSec.length ? rowSec.map((d, i) => [d, ...(rightFacets[i] || [])]) : (rightFacets.length ?\n rightFacets.map(d => [...d]) : []);\n\n const topMatrix = [];\n if (topHeaders) {\n const headers = topHeaders.getObjects();\n headers.forEach((e) => {\n const innerHeaders = e.getObjects();\n innerHeaders.forEach((x, i) => {\n topMatrix[i] = topMatrix[i] || [];\n topMatrix[i].push(x);\n });\n });\n }\n // Compute top matrix using the top headers and axes on the columns\n if (colPrime.length) {\n topMatrix.push(colPrime);\n }\n\n // Bottom and right matrices are prepared using the user config.\n let bottomMatrix = [];\n if (colSec.length) {\n bottomMatrix.push(colSec);\n }\n const currentBottomLength = bottomMatrix.length;\n if (bottomHeaders) {\n const headers = bottomHeaders.getObjects();\n headers.forEach((e) => {\n const innerHeaders = e.getObjects();\n innerHeaders.forEach((x, i) => {\n bottomMatrix[i + currentBottomLength] = bottomMatrix[i + currentBottomLength] || [];\n bottomMatrix[i + currentBottomLength].push(x);\n });\n });\n }\n\n if (!leftMatrix.length && !rightMatrix.length) {\n const cell = new cells.BlankCell();\n cell.setAvailableSpace(unitWidth, unitHeight);\n leftMatrix = [[cell]];\n }\n\n if (!topMatrix.length && (!bottomMatrix.length || !bottomMatrix[0].length)) {\n const cell = new cells.BlankCell();\n cell.setAvailableSpace(unitWidth, unitHeight);\n bottomMatrix = [[cell]];\n }\n\n return {\n rows: [leftMatrix, rightMatrix],\n columns: [topMatrix, bottomMatrix],\n selectionObj,\n colPriority,\n rowPriority\n };\n};\n\n/**\n * Computes matrices for a group\n *\n * @param {Object} datamodel on which the matrices are to be computed\n * @param {Object} config configuration of the matrices\n * @param {Object} layerRegistry contains the registered layers\n * @return {Object} conputed matrices\n * @memberof MatrixResolver\n */\nexport const computeMatrices = (context, config) => {\n const {\n resolver,\n datamodel,\n componentRegistry,\n encoders\n } = context;\n const {\n globalConfig,\n selection,\n transform\n } = config;\n const groupBy = globalConfig.autoGroupBy;\n const { smartlabel: labelManager } = resolver.dependencies();\n const fieldMap = datamodel.getFieldsConfig();\n const layerConfig = resolver.layerConfig();\n const registry = resolver.registry();\n const { fields: normalizedRows } = resolver.horizontalAxis();\n const { fields: normalizedColumns } = resolver.verticalAxis();\n const otherEncodings = resolver.optionalProjections(config, layerConfig);\n const facetsAndProjections = resolver.getAllFields();\n const matrixGnContext = {\n // Configuration to be passed to generate the different matrices.\n // A common config is used for both value matrices and other matrices\n normalizedColumns,\n normalizedRows,\n facetsAndProjections,\n layers: layerConfig,\n fieldMap,\n otherEncodings,\n encoders,\n facet: globalConfig.facet || {},\n axisFrom: globalConfig.axisFrom || {},\n selection,\n resolver\n };\n const cells = {\n GeomCell: resolver.getCellDef(registry.GeomCell),\n AxisCell: resolver.getCellDef(registry.AxisCell),\n BlankCell: resolver.getCellDef(registry.BlankCell),\n TextCell: resolver.getCellDef(registry.TextCell)\n };\n const isRowSizeEqual = isDistributionEqual(normalizedRows);\n const isColumnSizeEqual = isDistributionEqual(normalizedColumns);\n\n resolver.colCells({});\n resolver.rowCells({});\n resolver.datamodelTransform(transform || {});\n\n // Cell creation begins here\n resolver.resetSimpleAxes();\n\n const {\n entryCellMap\n } = resolver.cacheMaps();\n const newCacheMap = {\n exitCellMap: entryCellMap,\n entryCellMap: new Map()\n };\n\n resolver.cacheMaps(newCacheMap);\n\n const valueCellContext = {\n config: globalConfig,\n suppliedLayers: encoders.simpleEncoder.serializeLayerConfig(resolver.layerConfig()),\n resolver,\n cell: cells.GeomCell,\n encoder: encoders.simpleEncoder,\n newCacheMap,\n detailFields: config.detail\n };\n const fieldsConfig = datamodel.getFieldsConfig();\n let groupedModel = datamodel;\n if (!groupBy.disabled) {\n const fields = getFieldsFromSuppliedLayers(valueCellContext.suppliedLayers, datamodel.getFieldsConfig());\n const allFields = extractFields(facetsAndProjections, fields);\n\n const dimensions = allFields.filter(field =>\n fieldsConfig[field] && fieldsConfig[field].def.type === FieldType.DIMENSION);\n const aggregationFns = groupBy.measures;\n const measureNames = Object.keys(datamodel.getFieldspace().getMeasure());\n const nearestAggFns = retrieveNearestGroupByReducers(datamodel, ...measureNames);\n const resolvedAggFns = mergeRecursive(nearestAggFns, aggregationFns);\n\n groupedModel = datamodel.groupBy(dimensions.length ? dimensions : [''], resolvedAggFns).project(allFields);\n }\n\n // return a callback function to create the cells from the matrix\n const cellCreator = resolver.valueCellsCreator(valueCellContext);\n // Creates value matrices from the datamodel and configs\n const valueMatrixInfo = getMatrixModel(groupedModel, facetsAndProjections, cellCreator);\n\n resolver.cacheMaps().exitCellMap.forEach((placeholder) => {\n placeholder.remove();\n });\n resolver.cacheMaps().exitCellMap.clear();\n resolver.valueMatrix(valueMatrixInfo.matrix);\n\n const { xAxes, yAxes } = mutateAxesFromMap(resolver.cacheMaps(), resolver.axes());\n\n resolver.axes({\n x: xAxes,\n y: yAxes\n });\n const store = resolver.store();\n\n [xAxes, yAxes].forEach((axesArr, type) => {\n const stateProps = {};\n axesArr = axesArr || [];\n axesArr.forEach((axes, idx) => {\n axes.forEach((axis, axisIndex) => {\n stateProps[`${idx}${axisIndex}`] = null;\n });\n });\n store.append(`${STATE_NAMESPACES.GROUP_GLOBAL_NAMESPACE}.domain.${type ? 'y' : 'x'}`, stateProps);\n });\n resolver.createUnits(componentRegistry, config);\n\n const matrices = {\n valuesMatrix: valueMatrixInfo,\n axesMatrix: resolver.axes()\n };\n // Create all matrices\n const {\n rows,\n columns,\n selectionObj,\n rowPriority,\n colPriority\n } = generateMatrices(matrixGnContext, matrices, cells, labelManager);\n\n resolver.rowMatrix(rows);\n resolver.columnMatrix(columns);\n\n return {\n rows: resolver.rowMatrix(),\n columns: resolver.columnMatrix(),\n values: resolver.valueMatrix(),\n isColumnSizeEqual,\n isRowSizeEqual,\n priority: {\n row: rowPriority,\n col: colPriority\n },\n selection: selectionObj,\n dataModels: {\n groupedModel,\n parentModel: datamodel\n }\n };\n};\n","export const RESOLVER_PROPS = {\n dependencies: {},\n units: {},\n datamodelTransform: {},\n layerConfig: {},\n matrixLayers: {},\n colCells: {},\n rowCells: {},\n rowMatrix: {},\n columnMatrix: {},\n valueMatrix: {},\n encoder: {},\n valueParser: {}\n};\n","import { VisualUnit } from '@chartshq/visual-unit';\nimport { generateGetterSetters, STATE_NAMESPACES } from 'muze-utils';\nimport {\n initializeCacheMaps,\n headerCreator,\n extractUnitConfig,\n setFacetsAndProjections\n} from './group-utils';\nimport {\n ROW, COL, LEFT, RIGHT, COLOR, SIZE, SHAPE, DETAIL, CELL, X_AXES, Y_AXES, ENTRY_CELLS, EXIT_CELLS, INITIALIZED,\n AXIS, UNIT, BEFORE_UPDATE, UPDATED, VALUE_MATRIX, FACET_HEADERS\n} from '../enums/constants';\nimport { createValueCells, computeMatrices } from './cell-creator';\nimport { RESOLVER_PROPS } from './resolver-props';\n\n/**\n * Resolves the matrices from configuration provided\n *\n * @export\n * @class MatrixResolver\n */\nexport default class MatrixResolver {\n\n /**\n * Creates an instance of MatrixResolver.\n * @param {Object} dependencies needed to run the resolver\n * @memberof MatrixResolver\n */\n constructor (dependencies) {\n this._registry = {};\n this._layerConfig = [];\n this._matrixLayers = [];\n this._dependencies = dependencies;\n this._rowMatrix = [];\n this._columnMatrix = [];\n this._valueMatrix = [];\n this._facets = { rowFacets: [], colFacets: [] };\n this._projections = { rowProjections: [], colProjections: [] };\n this._datamodelTransform = {};\n this._units = [];\n this._cacheMaps = {};\n this._axes = {\n x: {},\n y: {},\n color: [],\n size: [],\n shape: []\n };\n generateGetterSetters(this, RESOLVER_PROPS);\n this.cacheMaps(initializeCacheMaps());\n }\n\n /**\n * Set: Registers placeholders, Get: return {Object} those placeholders\n *\n * @param {Object} placeholders cells that will construct the group\n * @return {Object} Either current instance or the set of placeholders\n * @memberof MatrixResolver\n */\n registry (...placeholders) {\n if (placeholders.length) {\n Object.entries(placeholders[0]).forEach((val) => {\n this._registry[val[0]] = val[1];\n });\n return this;\n }\n return this._registry;\n }\n\n /**\n * Used to set the layer config from outside or get current layer info\n *\n * @param {Object} type configuration of layer provided externally\n * @return {Object} either the layer or current instance\n * @memberof MatrixResolver\n */\n cacheMaps (...maps) {\n if (maps.length) {\n [CELL, X_AXES, Y_AXES, ENTRY_CELLS, EXIT_CELLS].forEach((e) => {\n this._cacheMaps[`${e}Map`] = maps[0][`${e}Map`] || this._cacheMaps[`${e}Map`];\n });\n return this;\n }\n return this._cacheMaps;\n }\n\n /**\n * Used to set the layer config from outside or get current layer info\n *\n * @param {Object} type configuration of layer provided externally\n * @return {Object} either the layer or current instance\n * @memberof MatrixResolver\n */\n axes (...axes) {\n if (axes.length) {\n this._axes = Object.assign({}, this._axes, axes[0]);\n return this;\n }\n return this._axes;\n }\n\n /**\n *\n *\n * @param {*} facets\n *\n * @memberof MatrixResolver\n */\n facets (...facets) {\n if (facets.length) {\n Object.entries(facets[0]).forEach((e) => {\n this._facets[e[0]] = e[1];\n });\n return this;\n }\n return this._facets;\n }\n\n /**\n *\n *\n * @param {*} projections\n *\n * @memberof MatrixResolver\n */\n projections (...projections) {\n if (projections.length) {\n Object.entries(projections[0]).forEach((e) => {\n this._projections[e[0]] = e[1];\n });\n return this;\n }\n return this._projections;\n }\n\n /**\n *\n *\n * @param {*} config\n * @param {*} layerConfig\n *\n * @memberof MatrixResolver\n */\n optionalProjections (config, layerConfig) {\n const otherEncodings = {};\n const optionalProjections = [];\n const otherEncodingTypes = [SIZE, COLOR, SHAPE];\n\n otherEncodingTypes.forEach((type) => {\n if (config[type] && config[type].field) {\n const enc = config[type];\n otherEncodings[type] = enc.field;\n optionalProjections.push(enc.field);\n }\n });\n\n if (config[DETAIL]) {\n optionalProjections.push(...config.detail);\n }\n\n if (layerConfig.length) {\n layerConfig.forEach((layer) => {\n if (layer.encoding) {\n Object.values(layer.encoding).forEach((enc) => {\n if (enc && optionalProjections.indexOf(enc.field) === -1) {\n optionalProjections.push(enc.field ? enc.field : enc);\n }\n });\n }\n });\n }\n this.projections({ optionalProjections });\n return otherEncodings;\n }\n\n /**\n * return the normalized set of rows and facets and projections\n *\n * @param {Object} rows parameters needed to set horizontal axis consisiting of rows\n * @return {Object} facets, projections and normalized rows\n * @memberof MatrixResolver\n */\n horizontalAxis (rows, encoder) {\n if (rows) {\n this._horizontalAxis = setFacetsAndProjections(this, { type: ROW, fields: rows }, encoder);\n return this;\n }\n return this._horizontalAxis;\n }\n\n /**\n * return the normalized set of columns and facets and projections\n *\n * @param {Object} columns parameters needed to set vertical axis consisiting of columns\n * @return {Object} facets, projections and normalized columns\n * @memberof MatrixResolver\n */\n verticalAxis (columns, encoder) {\n if (columns) {\n this._verticalAxis = setFacetsAndProjections(this, { type: COL, fields: columns }, encoder);\n return this;\n }\n return this._verticalAxis;\n }\n\n /**\n * Gets the class definition of a particular cell type(if the particular type has been extended, that particular\n * definition is returned)\n *\n * @param {Object} cell cell whose class definition is to be retrieved\n * @return {Object} cell definition\n * @memberof MatrixResolver\n */\n getCellDef (cell) {\n const registry = this.registry();\n\n Object.values(registry).forEach((e) => {\n if (e.prototype instanceof cell) {\n cell = e;\n }\n });\n return cell;\n }\n\n /**\n * return a visual cell creator along with its axis information to be injected to the datamodel creation\n * function\n *\n * @param {Object} GeomCell Type of cell to be created\n * @return {Object} Created cell\n * @memberof MatrixResolver\n */\n valueCellsCreator (context) {\n // reset matrix layers\n this.matrixLayers([]);\n\n return (datamodel, fieldInfo, facets) => createValueCells(context, datamodel, fieldInfo, facets);\n }\n\n /**\n * Callback to be applied on each cell of a matrix of a particular type\n *\n * @param {string} matrixType type of matrix on which callback is to be applied\n * @param {Function} callback function to be applied to each cell\n * @memberof MatrixResolver\n */\n forEach (matrixType, callback) {\n this[matrixType]().forEach((row, rIndex) => {\n row.forEach((col, cIndex) => {\n callback(rIndex, cIndex, col);\n });\n });\n }\n\n /**\n *\n *\n *\n * @memberof MatrixResolver\n */\n getAllFields () {\n const retObj = this.projections();\n\n Object.entries(this.facets()).forEach((e) => {\n retObj[e[0]] = e[1];\n });\n return retObj;\n }\n\n /**\n *\n *\n * @memberof MatrixResolver\n */\n resetSimpleAxes () {\n return this.axes({\n x: new Set(),\n y: new Set()\n });\n }\n\n /**\n *\n *\n * @param {*} componentRegistry\n * @param {*} config\n * @memberof MatrixResolver\n */\n createUnits (componentRegistry, config) {\n const {\n globalConfig,\n alias\n } = config;\n const {\n layerRegistry,\n sideEffectRegistry\n } = componentRegistry;\n const {\n smartlabel: smartLabel,\n lifeCycleManager\n } = this.dependencies();\n // Provide the source for the matrix\n const units = [[]];\n // Setting unit configuration\n const unitConfig = extractUnitConfig(globalConfig || {});\n const globalState = VisualUnit.getState()[0];\n const globalStates = {};\n const store = this.store();\n this.forEach(VALUE_MATRIX, (i, j, el) => {\n let unit = el.source();\n if (!unit) {\n const namespace = `${i}${j}`;\n\n unit = VisualUnit.create({\n layerRegistry,\n sideEffectRegistry\n }, {\n smartLabel,\n lifeCycleManager\n });\n globalStates[namespace] = null;\n unit.metaInf({\n rowIndex: i,\n colIndex: j,\n namespace\n });\n unit.store(store);\n el.source(unit);\n }\n !units[i] && (units[i] = []);\n units[i][j] = unit;\n unit.parentAlias(alias);\n unit.valueParser(this.valueParser());\n el.config(unitConfig);\n });\n\n for (const key in globalState) {\n store.append(`${STATE_NAMESPACES.UNIT_GLOBAL_NAMESPACE}.${key}`, globalStates);\n }\n\n lifeCycleManager.notify({ client: units, action: INITIALIZED, formalName: UNIT });\n return this.units(units);\n }\n\n /**\n *\n *\n * @param {*} config\n * @memberof MatrixResolver\n */\n setDomains (config, datamodel, encoders) {\n const {\n color,\n shape,\n size,\n globalConfig\n } = config;\n const groupBy = globalConfig.autoGroupBy;\n const {\n rowFacets,\n colFacets\n } = this.getAllFields();\n const encoding = {\n color,\n shape,\n size\n };\n const facetFields = [...rowFacets.map(e => e.toString()), ...colFacets.map(e => e.toString())];\n const retContext = {\n domains: encoders.simpleEncoder.getRetinalFieldsDomain(datamodel, encoding, facetFields, groupBy),\n axes: this.axes(),\n encoding\n };\n encoders.retinalEncoder.setCommonDomain(retContext);\n return this;\n }\n\n resetFacetsAndProjections () {\n this._facets = {};\n this._projections = {};\n return this;\n }\n\n /**\n *\n *\n *\n * @memberof MatrixResolver\n */\n getRetinalAxes () {\n const {\n color,\n shape,\n size\n } = this.axes();\n\n return {\n color: [...color],\n shape: [...shape],\n size: [...size]\n };\n }\n\n /**\n *\n *\n * @param {*} type\n *\n * @memberof MatrixResolver\n */\n getSimpleAxes (type) {\n return this.axes()[`${type}`];\n }\n\n /**\n *\n *\n * @param {*} datamodel\n * @param {*} config\n * @memberof MatrixResolver\n */\n createRetinalAxes (fieldsConfig, config, encoders) {\n const layerConfig = this.layerConfig();\n this.optionalProjections(config, layerConfig);\n const retinalAxes = encoders.retinalEncoder.createAxis({\n fieldsConfig,\n config,\n axes: this.axes()\n });\n const {\n lifeCycleManager\n } = this.dependencies();\n\n [COLOR, SHAPE, SIZE].forEach((e) => {\n this.axes()[e] = retinalAxes[e];\n });\n\n lifeCycleManager.notify({ client: this.axes(), action: INITIALIZED, formalName: AXIS });\n lifeCycleManager.notify({ client: this.units(), action: BEFORE_UPDATE, formalName: UNIT });\n\n const units = [];\n const matrixLayers = this.matrixLayers();\n\n this.forEach(VALUE_MATRIX, (i, j, el) => {\n el.axes(retinalAxes);\n el.source() && el.source().retinalFields(config);\n el.layerDef(encoders.retinalEncoder.getLayerConfig(config, matrixLayers[i][j]));\n el.updateModel();\n\n units.push(el.source());\n });\n\n lifeCycleManager.notify({ client: units, action: UPDATED, formalName: UNIT });\n return this;\n }\n\n /**\n *\n *\n * @param {*} placeholders\n * @param {*} fieldNames\n *\n * @memberof MatrixResolver\n */\n createHeaders (placeholders, fieldNames, config) {\n let bottomLeft = [];\n let bottomRight = [];\n const {\n rows,\n columns\n } = placeholders;\n const {\n smartlabel: labelManager,\n lifeCycleManager\n } = this.dependencies();\n const {\n showHeaders,\n classPrefix\n } = config;\n const TextCell = this.getCellDef(this.registry().TextCell);\n const BlankCell = this.getCellDef(this.registry().BlankCell);\n const [leftRows, rightRows] = rows;\n const [topCols, bottomCols] = columns;\n const rowHeaders = fieldNames.rows;\n const blankCellCreator = cell => new BlankCell().config({ show: cell.config().show });\n\n // Headers and footers are created based on the rows. Thereafter, using the column information\n // they are tabularized into the current structure\n const headers = {\n left: headerCreator(leftRows, rowHeaders[0], showHeaders ? TextCell : BlankCell,\n { classPrefix, labelManager }),\n right: headerCreator(rightRows, rowHeaders[1], showHeaders ? TextCell : BlankCell,\n { classPrefix, labelManager })\n };\n const footers = {\n left: leftRows.length > 0 ? leftRows[0].map(blankCellCreator) : [],\n right: rightRows.length > 0 ? rightRows[0].map(blankCellCreator) : []\n };\n const [topLeft, topRight] = [LEFT, RIGHT].map(type => topCols.map((col, i) => {\n if (i === topCols.length - 1) {\n return headers[type];\n }\n return footers[type];\n }));\n\n // Creating only bottom matrices if there is no information on the top\n if (topCols.length === 0) {\n [bottomLeft, bottomRight] = [LEFT, RIGHT].map(type => bottomCols.map((col, i) => {\n if (i === 0) {\n return headers[type];\n }\n return footers[type];\n }));\n } else {\n bottomLeft = bottomCols.map(() => (leftRows.length > 0 ? leftRows[0].map(blankCellCreator) : []));\n bottomRight = bottomCols.map(() => (rightRows.length > 0 ? rightRows[0].map(blankCellCreator) : []));\n }\n\n lifeCycleManager.notify({\n client: [topLeft, topRight, bottomLeft, bottomRight],\n action: INITIALIZED,\n formalName: FACET_HEADERS\n });\n\n return { topLeft, topRight, bottomLeft, bottomRight };\n }\n\n /**\n *\n *\n * @param {*} datamodel\n * @param {*} config\n * @param {*} componentRegistry\n * @param {*} encoders\n *\n * @memberof MatrixResolver\n */\n getMatrices (datamodel, config, componentRegistry, encoders) {\n const context = {\n datamodel,\n componentRegistry,\n encoders,\n resolver: this\n };\n\n return computeMatrices(context, config);\n }\n\n store (...params) {\n if (params.length) {\n this._store = params[0];\n return this;\n }\n return this._store;\n }\n}\n","/**\n * This is a wrapper class over the matrix of cells which gets created in visual group. Visual Group creates left,\n * right, bottom and top and center matrices and wraps them using this class.\n *\n * @public\n * @class ValueMatrix\n */\nclass ValueMatrix {\n\n /**\n * Creates an instance of ValueMatrix.\n *\n * @param {Array} matrixArr Matrix array.\n */\n constructor (matrixArr) {\n const instancesById = {};\n\n this.matrix(matrixArr || []);\n this.filter(() => true);\n\n this.each((el, rIdx, cIdx) => {\n const cellValue = el.valueOf();\n if (cellValue && cellValue.id) {\n const id = cellValue.id();\n instancesById[id] = {\n instance: cellValue,\n rowIndex: rIdx,\n colIndex: cIdx\n };\n }\n });\n\n this.instancesById(instancesById);\n }\n\n instancesById (...id) {\n if (id.length) {\n this._instancesById = id[0];\n return this;\n }\n return this._instancesById;\n }\n\n /**\n * Returns the array of matrices contained in this instance.\n *\n * @public\n * @return {Array} Array of matrices.\n */\n matrix (...matrix) {\n if (matrix.length) {\n this._matrix = matrix[0];\n return this;\n }\n return this._matrix;\n }\n\n /**\n * Sets a filter criteria. This filter criteria gets applied when each function is called.\n *\n * @public\n * @param {Function} fn Filter function.\n *\n * @return {ValueMatrix} Instance of value matrix.\n */\n filter (...fn) {\n if (fn.length) {\n this._filterFn = fn[0];\n return this;\n }\n return this._filterFn;\n }\n\n /**\n * Returns the total width occupied by all the cells of the matrix.\n *\n * @return {Number} Width of the matrix.\n */\n width () {\n let rowWidth = 0;\n\n this.matrix().forEach((row) => {\n let currentRowWidth = 0;\n row.forEach((cell) => {\n currentRowWidth += cell.getLogicalSpace().width;\n });\n rowWidth = Math.max(rowWidth, currentRowWidth);\n });\n return rowWidth;\n }\n\n /**\n * Returns the total width occupied by all the cells of the matrix.\n *\n * @return {Number} Width of the matrix.\n */\n height () {\n let rowHeight = 0;\n\n this.matrix().forEach((row) => {\n let currentRowHeight = 0;\n row.forEach((cell) => {\n currentRowHeight = Math.max(currentRowHeight, cell.getLogicalSpace().height);\n });\n rowHeight += currentRowHeight;\n });\n return rowHeight;\n }\n\n /**\n * Iterates through the two dimensional matrix array and calls the given callback function with the cell instance,\n * row index, column index and the matrix array.\n *\n * @param {Function} fn Callback function which will get called for every cell.\n * @return {ValueMatrix} Instance of the value matrix.\n */\n each (fn) {\n const matrix = this.matrix();\n const filterFn = this.filter();\n\n matrix.forEach((row, rIndex) => {\n row.forEach((col, cIndex) => {\n if (filterFn(col)) {\n fn(col, rIndex, cIndex, matrix);\n }\n });\n });\n return this;\n }\n\n findPlaceHolderById (id) {\n return this.instancesById()[id];\n }\n}\n\nexport default ValueMatrix;\n","import { VisualUnit } from '@chartshq/visual-unit';\nimport { STATE_NAMESPACES, CommonProps } from 'muze-utils';\nimport { BaseLayer } from '@chartshq/visual-layer';\nimport { getEncoder, getBorders } from '../group-helper';\nimport { RetinalEncoder } from '../encoder';\nimport { registerDomainChangeListener, unsubscribeChangeListeners } from './change-listener';\nimport ValueMatrix from './value-matrix';\n\nexport const createUnitState = (context) => {\n const [globalState] = VisualUnit.getState();\n const store = context.store();\n store.append(STATE_NAMESPACES.UNIT_GLOBAL_NAMESPACE, globalState);\n};\n\nexport const initializeGlobalState = (context) => {\n const globalState = context.constructor.getState()[0];\n const store = context.store();\n store.append(STATE_NAMESPACES.GROUP_GLOBAL_NAMESPACE, globalState);\n};\n\nexport const createLayerState = (context) => {\n const [globalState] = BaseLayer.getState();\n context.store().append(STATE_NAMESPACES.LAYER_GLOBAL_NAMESPACE, globalState);\n};\n\nconst sanitizeRetinalConfig = (retinalConf) => {\n const conf = {};\n for (const key in retinalConf) {\n const confValue = retinalConf[key];\n if (typeof confValue === 'string' || !confValue) {\n conf[key] = {\n field: retinalConf[key]\n };\n } else {\n conf[key] = confValue;\n }\n }\n return conf;\n};\n\nexport const setMatrixInstances = (context, placeholder) => {\n let {\n values,\n rows,\n columns\n } = placeholder;\n values = values || [];\n rows = rows || [];\n columns = columns || [];\n context._composition.matrices = {\n value: new ValueMatrix(values),\n left: new ValueMatrix(rows[0]),\n right: new ValueMatrix(rows[1]),\n top: new ValueMatrix(columns[0]),\n bottom: new ValueMatrix(columns[1])\n };\n\n context._dependencies.throwback.commit(CommonProps.MATRIX_CREATED, true);\n return context;\n};\n\nexport const createMatrices = (context) => {\n const rows = context.rows();\n const columns = context.columns();\n const color = context.color();\n const datamodel = context.data();\n const size = context.size();\n const detail = context.detail();\n const layers = context.layers();\n const transform = context.transform();\n const config = context.config();\n const shape = context.shape();\n\n // Get the resolver for the matrices\n const resolver = context.resolver();\n resolver.store(context.store());\n resolver.valueParser(context.valueParser());\n // Prepare configuration for matrix preparation\n let matrixConfig = {\n selection: context.selection(),\n alias: context.alias(),\n globalConfig: config || {},\n rows,\n columns,\n detail,\n layers,\n transform\n };\n\n unsubscribeChangeListeners(context);\n\n const retinalConfig = sanitizeRetinalConfig({\n color,\n shape,\n size\n });\n\n matrixConfig = Object.assign(matrixConfig, retinalConfig);\n // Create the encoders for the group\n const encoders = {};\n encoders.retinalEncoder = new RetinalEncoder();\n encoders.simpleEncoder = getEncoder(layers);\n resolver.encoder(encoders.simpleEncoder);\n\n // Set the group type\n context.groupType(encoders.simpleEncoder.constructor.type());\n\n // Get sanitized fields as instances of the Vars Class\n const fields = encoders.simpleEncoder.fieldSanitizer(datamodel, matrixConfig);\n encoders.simpleEncoder.setAxisAndHeaders(config ? config.axisFrom : {}, fields);\n // Setting layers for the code\n layers && resolver.layerConfig(layers);\n // Set the row and column axes\n resolver.horizontalAxis(fields.rows, encoders).verticalAxis(fields.columns, encoders);\n // Getting the placeholders\n const placeholderInfo = resolver.getMatrices(datamodel, matrixConfig, context.registry(), encoders);\n context._groupedDataModel = placeholderInfo.dataModels.groupedModel;\n // Set the selection object\n context.selection(placeholderInfo.selection);\n\n // Create retinal axes\n resolver.createRetinalAxes(placeholderInfo.dataModels.parentModel.getFieldsConfig(), retinalConfig,\n encoders);\n\n // Domains are evaluated for each of the axes for commonality\n resolver.setDomains(matrixConfig, placeholderInfo.dataModels, encoders);\n\n // Create matrix instances\n setMatrixInstances(context, placeholderInfo);\n\n // Prepare corner matrices\n context.cornerMatrices(resolver.createHeaders(placeholderInfo, fields, config));\n\n // Set placeholder information\n context.placeholderInfo(placeholderInfo);\n\n context._composition.axes = resolver.axes();\n context.metaData({\n border: getBorders(placeholderInfo, encoders.simpleEncoder)\n });\n\n resolver.encoder().unionUnitDomains(context);\n\n registerDomainChangeListener(context);\n return context;\n};\n","import { STATE_NAMESPACES } from 'muze-utils';\n\nexport const setupChangeListeners = (context) => {\n const store = context.store();\n\n store.registerChangeListener([`${STATE_NAMESPACES.GROUP_GLOBAL_NAMESPACE}.domain.x`], () => {\n const groupAxes = context.resolver().axes();\n groupAxes.x.forEach(axes => axes.forEach((axis) => {\n axis.render();\n }));\n });\n\n store.registerChangeListener([`${STATE_NAMESPACES.GROUP_GLOBAL_NAMESPACE}.domain.y`], () => {\n const groupAxes = context.resolver().axes();\n groupAxes.y.forEach(axes => axes.forEach((axis) => {\n axis.render();\n }));\n });\n};\n\nexport const registerDomainChangeListener = (context) => {\n const store = context.store();\n store.registerChangeListener([`${STATE_NAMESPACES.UNIT_GLOBAL_NAMESPACE}.domain`], () => {\n context.resolver().encoder().unionUnitDomains(context);\n }, false, {\n namespace: 'group',\n key: 'unionDomain'\n });\n};\n\nexport const unsubscribeChangeListeners = (context) => {\n context.store().unsubscribe({\n namespace: 'group',\n key: 'unionDomain'\n });\n};\n","import { ROWS, COLUMNS, COLOR, SHAPE, SIZE, DETAIL, LAYERS, TRANSFORM, CONFIG } from '../enums/constants';\n\nexport const PROPS = {\n alias: {},\n data: {},\n cornerMatrices: {\n defaultValue: {\n topLeft: [],\n topRight: [],\n bottomLeft: [],\n bottomRight: []\n }\n },\n groupType: {},\n\n metaData: {\n defaultValue: {\n border: {}\n }\n },\n placeholderInfo: {\n defaultValue: {}\n },\n resolver: {},\n valueParser: {\n defaultValue: val => val\n },\n registry: {\n sanitization: (context, value) => {\n if (context.resolver) {\n context.resolver().registry(value.cellRegistry);\n }\n return value;\n }\n },\n selection: {},\n [CONFIG]: {},\n [ROWS]: {},\n [COLUMNS]: {},\n [COLOR]: {},\n [SHAPE]: {},\n [SIZE]: {},\n [DETAIL]: {},\n [LAYERS]: {},\n [TRANSFORM]: {}\n};\n","import { generateGetterSetters } from 'muze-utils';\nimport localOptions from './local-options';\nimport { SimpleGroup } from '../simple-group';\nimport {\n MatrixResolver,\n findInGroup\n} from '../group-helper';\nimport { createUnitState, initializeGlobalState, setMatrixInstances, createMatrices, createLayerState } from './helper';\nimport { setupChangeListeners } from './change-listener';\nimport { PROPS } from './props';\nimport {\n CONFIG,\n MOUNT,\n RETINAL,\n Y\n} from '../enums/constants';\n\n/**\n * VisualGroup is instantiated by canvas for creating {@link VisualUnit} and axes instances.It creates the\n * the matrix of visual units and axes. It also creates the layout instance which manages the allocation\n * of space of matrices.\n *\n * To get instance of visual group,\n * ```\n * const visualGroup = canvas.composition().visualGroup;\n * ```\n * @public\n *\n * @class VisualGroup\n */\nclass VisualGroup extends SimpleGroup {\n\n /**\n * Creates an instance of VisualGroup. Requires dependencies and other registry options for placeholders\n * and layers that create individual units.\n *\n * @param {Object} registry Key value pair of compostions for the group\n * @param {Object} dependencies Dependencies needed to run the group\n * @memberof VisualGroup\n */\n constructor (registry, dependencies) {\n super();\n\n const {\n componentSubRegistry\n } = registry;\n\n this._dependencies = dependencies;\n // Generate getter/setter methods for all properties of the class\n // One can get each property by calling the method and can set it\n // by passing paramaters for the same. Thus, one can chain setter\n // getter methods.\n generateGetterSetters(this, PROPS);\n generateGetterSetters(this, localOptions);\n // Populate the store with default values\n // initialize group compositions\n this._composition = {};\n // store reference to data\n this._data = [];\n // store reference to mountpoint\n this._mount = null;\n // selection object that takes care of updating of components\n this._selection = {};\n // Create instance of matrix resolver\n this.resolver(new MatrixResolver(this._dependencies));\n // matrix instance store each of the matrices\n setMatrixInstances(this, {});\n // Getting indiviual registered items\n this.registry({\n layerRegistry: componentSubRegistry.layerRegistry.get(),\n cellRegistry: componentSubRegistry.cellRegistry.get()\n });\n }\n\n static getState () {\n return [{\n domain: {\n x: {},\n y: {},\n radius: {}\n }\n }, {}];\n }\n\n store (...params) {\n if (params.length) {\n this._store = params[0];\n initializeGlobalState(this);\n createUnitState(this);\n createLayerState(this);\n // Register listeners\n setupChangeListeners(this);\n return this;\n }\n return this._store;\n }\n\n /**\n * Return the instances of matrices created by the visual group.\n *\n * @return {Object} Instance of matrices.\n */\n matrixInstance (...matrices) {\n if (matrices.length) {\n return this;\n }\n return this.composition().matrices;\n }\n\n /**\n * Returns the composition of visual group.\n *\n * @public\n *\n * @return {Object} Composition of visual group. It contains instance of matrices {@link ValueMatrix}\n * and instances of axis.\n * ```\n * {\n * matrices: {\n * value: // Instance of center value matrix.\n * left: // Instance of left value matrix\n * right: // Instance of right value matrix\n * bottom: // Instance of bottom value matrix\n * top: // Instance of top value matrix.\n * },\n * axes: {\n * x: // Array of x axis.\n * y: // Array of y axis\n * color: // Array of color axis\n * shape: // Array of shape axis\n * size: // Array of size axis.\n * }\n * }\n * ```\n */\n composition (...params) {\n if (params.length) {\n return this;\n }\n return this._composition;\n }\n\n /**\n * Locks the model to prevent change listeners to be triggered until unlocked\n *\n * @return {Object} Instance of class VisualGroup\n * @memberof VisualGroup\n */\n lockModel () {\n this.store().model.lock();\n return this;\n }\n\n /**\n * Unlocks the model so that all change listeners can be triggered\n *\n * @return {Object} Instance of class VisualGroup\n */\n unlockModel () {\n this.store().model.unlock();\n return this;\n }\n\n /**\n * Returns the channel name of the variable. Channels are rows, columns, color, shape and size.\n *\n * @public\n * @param {string} variable Name of the variable.\n *\n * @return {string} Name of the channel.\n */\n where (variable) {\n return findInGroup(variable, this.resolver().getAllFields());\n }\n\n /**\n * Gets the axis instances of the visual group based on the given axis type.\n *\n * @public\n * @param {string} type Type of axis. X,Y or retinal axes.\n *\n * @return {Array} Array of axis instances.\n */\n getAxes (type) {\n if (type === RETINAL) {\n return this.resolver().getRetinalAxes();\n }\n return this.resolver().getSimpleAxes(type);\n }\n\n /**\n * Returns the instances of cells based on the given type. Type can be given as `row' or `col`.\n *\n * @public\n * @return {Array} Two dimensional array of cells.\n */\n getCells (type) {\n return this.resolver()[`${type}Cells`]();\n }\n\n getFieldsFromChannel (channel) {\n const {\n rowProjections,\n colProjections\n } = this.resolver().getAllFields();\n return channel === Y ? rowProjections : colProjections;\n }\n\n getCellsByFacetKey (facetKey) {\n const resolver = this.resolver();\n const cells = resolver.rowCells()[facetKey] || resolver.colCells()[facetKey] || [];\n return cells;\n }\n\n getAxesByFacetKey (axisType, facetKey) {\n const resolver = this.resolver();\n const cells = resolver.rowCells()[facetKey] || resolver.colCells()[facetKey];\n const axes = cells[0].valueOf().axes()[axisType] || [];\n\n return axes;\n }\n\n /**\n * This method is used to return a serialized representation of the instance's properties.\n *\n * @return {Object} Object with config proprties.\n * @memberof VisualGroup\n */\n serialize () {\n const store = this.store();\n\n return {\n [CONFIG]: store.get(CONFIG),\n [MOUNT]: store.get(MOUNT)\n };\n }\n\n /**\n * Returns the grouped datamodel prepared by visual group. If there is no group by performed, then it returns the\n * original data model passed to visual group.\n *\n * @return {DataModel} Grouped data model.\n */\n getGroupByData () {\n return this._groupedDataModel;\n }\n\n createMatrices () {\n createMatrices(this);\n }\n}\n\nexport default VisualGroup;\n","import { PersistentBehaviour, SELECTION } from '@chartshq/muze-firebolt';\n\nexport default class SelectBehaviour extends PersistentBehaviour {\n static formalName () {\n return 'select';\n }\n\n setSelectionSet (addSet, selectionSet) {\n if (addSet === null) {\n selectionSet.reset();\n } else if (addSet.length) {\n // new add set\n const existingRemoveSet = addSet.filter(d => selectionSet._set[d] === SELECTION.SELECTION_OLD_EXIT\n || selectionSet._set[d] === SELECTION.SELECTION_NEW_EXIT);\n // existing add set\n if (existingRemoveSet.length) {\n selectionSet.updateEntry();\n selectionSet.add(existingRemoveSet);\n } else {\n selectionSet.updateExit();\n selectionSet.remove(addSet);\n }\n const { exitSet } = selectionSet.getSets();\n const mergedExitSet = [...new Set(exitSet[1]), ...new Set(exitSet[0])];\n const completeSetCount = selectionSet.getCompleteSet().length;\n if (exitSet[1].length !== completeSetCount && mergedExitSet.length === completeSetCount) {\n selectionSet.reset();\n }\n } else {\n selectionSet.remove(selectionSet.getCompleteSet());\n }\n return this;\n }\n}\n","import { BEHAVIOURS, ACTIONS } from '@chartshq/muze-firebolt';\n\nconst CLASSPREFIX = 'muze';\n\nexport const actionBehaviourMap = {\n [ACTIONS.DRAG]: {\n target: `.${CLASSPREFIX}-gradient-rect`,\n behaviours: [BEHAVIOURS.BRUSH]\n },\n [ACTIONS.HOVER]: {\n target: [`.${CLASSPREFIX}-legend-columns`],\n behaviours: [BEHAVIOURS.HIGHLIGHT]\n },\n [ACTIONS.CLICK]: {\n target: [`.${CLASSPREFIX}-legend-columns`],\n behaviours: [BEHAVIOURS.SELECT]\n }\n};\n\nexport const propagationBehaviourMap = {\n [BEHAVIOURS.SELECT]: BEHAVIOURS.FILTER,\n [BEHAVIOURS.BRUSH]: BEHAVIOURS.HIGHLIGHT\n};\n","import * as BEHAVIOURS from '../enums/behaviours';\nimport * as sideEffects from '../enums/side-effects';\n\nexport const behaviourEffectMap = {\n [BEHAVIOURS.BRUSH]: [sideEffects.SELECTIONBOX, {\n name: sideEffects.Highlighter,\n options: {\n strategy: 'fade'\n }\n }],\n [BEHAVIOURS.HIGHLIGHT]: [sideEffects.Highlighter],\n select: [{\n name: sideEffects.Highlighter,\n options: {\n strategy: 'fade'\n }\n }]\n};\n\nexport const propagationSideEffects = {\n [BEHAVIOURS.BRUSH]: [{\n name: sideEffects.Highlighter,\n options: {\n strategy: 'fade'\n }\n }],\n [BEHAVIOURS.HIGHLIGHT]: [{\n name: sideEffects.Highlighter,\n options: {\n strategy: 'fade'\n }\n }],\n [BEHAVIOURS.SELECT]: ['filter']\n};\n\n","export const BRUSH = 'brush';\nexport const HIGHLIGHT = 'highlight';\nexport const TOOLTIP = 'tooltip';\nexport const FILTER = 'filter';\nexport const SELECT = 'select';\n\n","export const SELECTIONBOX = 'selectionBox';\nexport const Highlighter = 'highlighter';\n\n","export const CLASSPREFIX = 'muze';\nexport const IDFIELD = '__id__';\nexport const CONFIG = 'config';\nexport const DATAMODEL = 'dataModel';\nexport const AXES = 'axes';\nexport const LAYERDEFS = 'layerDef';\nexport const WIDTH = 'width';\nexport const MAXWIDTH = 'max-width';\nexport const HEIGHT = 'height';\nexport const MOUNTPOINT = 'mountPoint';\nexport const GRIDLINEPARENTGROUPCLASS = 'grid-lines';\nexport const TRANSFORM = 'transform';\nexport const CONSOLIDATED = 'consolidated';\nexport const FRAGMENTED = 'fragmented';\nexport const DEFAULTCOLOR = '#F44336';\nexport const DEFAULTSIZE = 50;\nexport const DEFAULTSHAPE = 'circle';\nexport const STEP = 'step';\nexport const GRADIENT = 'gradient';\nexport const ORDINAL = 'ordinal';\nexport const SCALE_FUNCTIONS = {\n size: 'getSize',\n shape: 'getShape',\n color: 'getColor'\n};\nexport const TOP = 'top';\nexport const LEFT = 'left';\nexport const RIGHT = 'right';\nexport const BOTTOM = 'bottom';\nexport const HORIZONTAL = 'horizontal';\nexport const VERTICAL = 'vertical';\nexport const CENTER = 'center';\nexport const VALUE = 'value';\nexport const PATH = 'path';\nexport const SHAPE = 'shape';\nexport const ICON = 'icon';\nexport const RECT = 'rect';\nexport const START = 'start';\nexport const UPPER = 'upper';\nexport const LOWER = 'lower';\nexport const END = 'end';\nexport const SIZE = 'size';\nexport const DISCRETE = 'discrete';\nexport const MEASURE = 'measure';\n\n","import { assembleModelFromIdentifiers, getDataModelFromRange } from 'muze-utils';\nimport { propagationBehaviourMap } from './action-behaviour-map';\nimport { propagationSideEffects } from './behaviour-effect-map';\nimport { STEP, GRADIENT, DISCRETE, MEASURE } from '../enums/constants';\n\nexport const propagate = (firebolt, action, selectionSet, config = {}) => {\n let propagationData;\n const type = firebolt.context.constructor.type();\n const payload = config.payload;\n const data = firebolt.context.data();\n const metaData = firebolt.context.metaData();\n const fieldType = metaData.getData().schema[0].type;\n\n const propPayload = {};\n const sourceId = firebolt.context._id;\n propPayload.action = propagationBehaviourMap[action] || action;\n propPayload.sideEffects = propagationSideEffects[action];\n propPayload.sourceCanvas = firebolt.context.canvasAlias();\n const isMutableAction = firebolt._actions.behavioural[propPayload.action].constructor.mutates();\n if (payload.criteria === null) {\n propagationData = null;\n } else {\n const entrySet = selectionSet.mergedEnter;\n let values = data.filter(d => entrySet.uids.indexOf(d.id) !== -1).map(d => d.rawVal);\n if (type === STEP || (type === DISCRETE && fieldType === MEASURE)) {\n const field = Object.keys(payload.criteria || {})[0];\n values = data.filter(d => entrySet.uids.indexOf(d.id) !== -1).map(d => d.range);\n propagationData = values.length ? metaData.select((fields) => {\n let check = false;\n for (let i = 0; i < values.length; i++) {\n check = fields[field].value >= values[i][0] && fields[field].value <= values[i][1];\n if (check === true) {\n break;\n }\n }\n return check;\n }, {\n saveChild: false\n }) : null;\n } else if (type === GRADIENT) {\n propagationData = getDataModelFromRange(metaData, payload.criteria);\n } else if (values.length) {\n propagationData = assembleModelFromIdentifiers(metaData, [payload.criteria[0], ...values.map(d => [d])]);\n } else {\n propPayload.criteria = null;\n propagationData = metaData.select(() => true, {\n saveChild: false\n });\n }\n }\n\n let propagateInterpolatedValues = false;\n\n if (propagationData) {\n const schema = propagationData.getSchema();\n propagateInterpolatedValues = schema.every(d => d.type === MEASURE);\n }\n\n const propConfig = {\n sourceId: `legend-${sourceId}`,\n payload: propPayload,\n criteria: propPayload.criteria === null ? null : propagationData,\n isMutableAction,\n propagateInterpolatedValues,\n action: propPayload.action\n };\n\n metaData.propagate(propagationData, propConfig, true);\n};\n","import { Firebolt } from '@chartshq/muze-firebolt';\nimport { propagate } from './helper';\nimport { STEP, GRADIENT } from '../enums/constants';\n\n/**\n * This class manages the interactions of legend.\n * @export\n * @class LegendFireBolt\n * @extends {Firebolt}\n */\nexport class LegendFireBolt extends Firebolt {\n constructor (...params) {\n super(...params);\n this.initializeSideEffects();\n }\n\n getPropagationSelectionSet (selectionSet) {\n return selectionSet[0];\n }\n\n propagate (behaviourName, payload, selectionSet) {\n propagate(this, behaviourName, selectionSet, {\n payload\n });\n }\n\n getAddSetFromCriteria (criteria) {\n let values;\n let uniqueIds;\n const type = this.context.constructor.type();\n\n if (criteria === null) {\n uniqueIds = null;\n } else if (type === STEP) {\n values = Object.values(criteria);\n uniqueIds = this.context.data().filter(d => values.indexOf(d.range) !== -1).map(d => d.id);\n } else if (type === GRADIENT) {\n uniqueIds = [];\n } else {\n values = criteria[1];\n if (values) {\n uniqueIds = this.context.data().filter(d => values.indexOf(d.rawVal) !== -1).map(d => d.id);\n } else {\n values = Object.values(criteria);\n uniqueIds = this.context.data().filter(d => values.indexOf(d.range) !== -1).map(d => d.id);\n }\n }\n return {\n uids: uniqueIds,\n model: null\n };\n }\n\n getFullData () {\n return null;\n }\n}\n","import {\n getEvent,\n getD3Drag\n } from 'muze-utils';\n\n/**\n * Adds dragging action to the target element.\n * @param {firebolt} firebolt firebolt\n * @param {SVGElement} targetEl Element on which brushing action is needed.\n * @param {Array} behaviours Array of behaviours\n */\n/* istanbul ignore next */ const drag = firebolt => (targetEl, behaviours) => {\n let startPos = {};\n let endPos = {};\n let payload;\n const d3Drag = getD3Drag();\n const context = firebolt.context;\n const boundingBox = context.measurement().gradientDimensions;\n const axisType = context.config().align === 'horizontal' ? 'x' : 'y';\n const axisScale = context.axis().source().scale();\n const rangeShifter = axisScale.range()[axisType === 'x' ? 0 : 1];\n\n targetEl.call(d3Drag().on('start', () => {\n const event = getEvent();\n startPos = {\n x: event.x,\n y: event.y\n };\n }).on('drag', () => {\n const event = getEvent();\n\n endPos = {\n x: event.x,\n y: event.y\n };\n endPos.x = Math.max(0, Math.min(endPos.x, boundingBox.width));\n endPos.y = Math.max(0, Math.min(endPos.y, boundingBox.height));\n\n payload = {\n criteria: {\n [context.fieldName()]: [axisScale.invert(startPos[axisType] + rangeShifter * 2),\n axisScale.invert(endPos[axisType] + rangeShifter * 2)].sort((a, b) => a - b)\n }\n };\n behaviours.forEach(behaviour => firebolt.dispatchBehaviour(behaviour, payload));\n }).on('end', () => {\n const event = getEvent();\n\n endPos = {\n x: event.x,\n y: event.y\n };\n endPos.x = Math.max(0, Math.min(endPos.x, boundingBox.width));\n endPos.y = Math.max(0, Math.min(endPos.y, boundingBox.height));\n if (startPos[axisType] === endPos[axisType]) {\n payload = {\n criteria: {}\n };\n } else {\n payload = {\n criteria: {\n [context.fieldName()]: [axisScale.invert(startPos[axisType] + rangeShifter * 2),\n axisScale.invert(endPos[axisType] + rangeShifter * 2)].sort((a, b) => a - b)\n }\n };\n }\n behaviours.forEach(behaviour => firebolt.dispatchBehaviour(behaviour, payload));\n }));\n};\n\nexport default drag;\n","import { getEvent } from 'muze-utils';\n\n/**\n * Adds mouse interactions to target element.\n * @param {Firebolt} Firebolt instance of firebolt.\n * @param {SVGElement} targetEl Element on which the event listeners will be attached.\n * @param {Array} behaviours Array of behaviours\n */\n/* istanbul ignore next */ const hover = firebolt => (targetEl, behaviours) => {\n const dispatchBehaviour = function (args) {\n const event = getEvent();\n const payload = {\n criteria: firebolt.context.getCriteriaFromData(args)\n };\n behaviours.forEach(behaviour => firebolt.dispatchBehaviour(behaviour, payload));\n event.stopPropagation();\n };\n\n targetEl.on('mouseover', dispatchBehaviour)\n .on('mousemove', dispatchBehaviour)\n .on('mouseout', () => {\n const event = getEvent();\n behaviours.forEach(behaviour => firebolt.dispatchBehaviour(behaviour, {\n criteria: null\n }));\n event.stopPropagation();\n });\n};\n\nexport default hover;\n","/**\n * Adds mouse interactions to target element.\n * @param {VisualUnit} instance instance of visual unit.\n * @param {SVGElement} targetEl Element on which the event listeners will be attached.\n * @param {Array} behaviours Array of behaviours\n */\nconst click = firebolt => (targetEl, behaviours) => {\n const dispatchBehaviour = function (args) {\n const payload = {\n criteria: firebolt.context.getCriteriaFromData(args)\n };\n behaviours.forEach(behaviour => firebolt.dispatchBehaviour(behaviour, payload));\n };\n\n targetEl.on('click', dispatchBehaviour);\n};\n\nexport default click;\n","import drag from './drag';\nimport hover from './hover';\nimport click from './click';\nimport * as ACTIONNAMES from '../../enums/actions';\n\nexport const physicalActions = {\n [ACTIONNAMES.DRAG]: drag,\n [ACTIONNAMES.HOVER]: hover,\n [ACTIONNAMES.CLICK]: click\n};\n\n","export const DRAG = 'drag';\nexport const HOVER = 'hover';\nexport const SELECTIONDRAG = 'selectiondrag';\nexport const CLICK = 'click';\n","import {\n getMousePos,\n getEvent,\n getD3Drag\n } from 'muze-utils';\nimport { HEIGHT, WIDTH, HORIZONTAL } from '../../enums/constants';\n\nconst getSelectionCriteria = (subject, axis, measures) => {\n let criteria = [];\n const {\n axisScale,\n axisType\n } = axis;\n const {\n startPos,\n endPos,\n selectionBoxMeasure,\n drawingInfMeasure,\n offset\n } = measures;\n const subjectStartPoint = subject[axisType];\n\n if (startPos[axisType] === endPos[axisType]) {\n criteria = [];\n } else if (subjectStartPoint + selectionBoxMeasure >= drawingInfMeasure + offset) {\n criteria = [axisScale.invert(drawingInfMeasure + offset - selectionBoxMeasure),\n axisScale.invert(drawingInfMeasure + offset)];\n } else if (subjectStartPoint - offset < offset) {\n criteria = [axisScale.invert(offset * 2), axisScale.invert(selectionBoxMeasure + offset * 2)];\n } else {\n criteria = [axisScale.invert(subjectStartPoint), axisScale.invert(subjectStartPoint + selectionBoxMeasure)];\n }\n axisType === 'x' ? criteria : criteria.reverse();\n return criteria;\n};\n\nexport const selectionBoxDrag = firebolt => (targetEl, behaviours) => {\n let startPos = {};\n let payload;\n const endPos = {};\n const d3Drag = getD3Drag();\n const context = firebolt.context;\n const axisScale = context.axis().source().scale();\n const axisType = context.config().align === HORIZONTAL ? 'x' : 'y';\n const drawingInfMeasure = context.measurement().gradientDimensions[axisType === 'x' ?\n WIDTH : HEIGHT];\n const offset = axisScale.range()[axisType === 'x' ? 0 : 1];\n const measures = {\n drawingInfMeasure,\n offset\n };\n let subject = {};\n\n targetEl.call(d3Drag().on('start', function () {\n const event = getEvent();\n startPos = getMousePos(this, event.sourceEvent);\n subject = event.subject;\n }).on('drag', () => {\n const event = getEvent();\n const selectionBoxMeasure = subject[axisType === 'x' ? WIDTH : HEIGHT];\n\n subject.x += event.dx;\n subject.y += event.dy;\n\n measures.selectionBoxMeasure = selectionBoxMeasure;\n measures.startPos = startPos;\n measures.endPos = endPos;\n const criteria = getSelectionCriteria(subject, { axisScale, axisType }, measures);\n\n payload = {\n criteria: {\n [context.fieldName()]: criteria\n },\n fadeOut: true\n };\n firebolt.dispatchBehaviour(behaviours[0], payload);\n }).on('end', () => {\n const event = getEvent();\n const selectionBoxMeasure = subject[axisType === 'x' ? WIDTH : HEIGHT];\n measures.selectionBoxMeasure = selectionBoxMeasure;\n measures.startPos = startPos;\n measures.endPos = endPos;\n const criteria = getSelectionCriteria(event, { axisScale, axisType }, measures);\n payload = {\n criteria: {\n [context.fieldName()]: criteria\n },\n fadeOut: true,\n config: {\n transition: {\n duration: 200\n }\n }\n };\n firebolt.dispatchBehaviour(behaviours[0], payload);\n }));\n};\n\n","import { makeElement } from 'muze-utils';\nimport { SpawnableSideEffect } from '@chartshq/muze-firebolt';\nimport { CLASSPREFIX, HEIGHT, WIDTH, HORIZONTAL, RECT } from '../../../enums/constants';\nimport { SELECTIONBOX } from '../../../enums/side-effects';\nimport { selectionBoxDrag } from '../../physical/selection-box-drag';\nimport './styles.scss';\n\n/**\n * This class is used to create a selection box which is used by visual unit for brushing and\n * selection in the canvas.\n * @class SelectionBox\n */\n/* istanbul ignore next */ class SelectionBox extends SpawnableSideEffect {\n static formalName () {\n return SELECTIONBOX;\n }\n\n /**\n * It returns the default configuration needed by selectionbox.\n * @return {Object} Default configuration of the selection box.\n */\n static defaultConfig () {\n return {\n className: 'legend-selection-box',\n classPrefix: CLASSPREFIX\n };\n }\n\n /**\n * Draws the selectionbox with the specified dimensions.\n */\n /* istanbul ignore next */ apply (selectionSet, payload) {\n let x;\n let y;\n let width;\n let height;\n const firebolt = this.firebolt;\n const context = firebolt.context;\n const config = this.config();\n const axis = context.axis().source();\n const className = `${config.classPrefix}-${config.className}`;\n\n const domain = payload.criteria[firebolt.context.fieldName()];\n const axisScale = axis.scale();\n const range = domain ? [axis.getScaleValue(domain[0]), axis.getScaleValue(domain[1])] : [];\n\n const axisType = context.config().align === HORIZONTAL ? 'x' : 'y';\n\n const gradientDimension = firebolt.context.measurement().gradientDimensions[axisType === 'x' ?\n HEIGHT : WIDTH];\n\n const rangeShifter = axisScale.range()[axisType === 'x' ? 0 : 1];\n const legendGradContainer = context.getDrawingContext().svgContainer;\n const legendSelGroup = makeElement(legendGradContainer, 'g', [1], `${config.classPrefix}-selection-box-group`);\n\n if (firebolt.context.config().align === HORIZONTAL) {\n x = range[0] - rangeShifter || 0;\n y = 0;\n width = range[1] - range[0] || 0;\n height = gradientDimension;\n } else {\n x = 0;\n y = range[1] - rangeShifter || 0;\n height = range[0] - range[1] || 0;\n width = gradientDimension;\n }\n const enterFn = function (el) {\n selectionBoxDrag(firebolt)(el, ['brush']);\n };\n const selBox = makeElement(legendSelGroup, RECT, [{ domain, x, y, width, height }], className,\n { enter: enterFn });\n selBox.attr('y', y)\n .attr('x', x)\n .attr(WIDTH, width)\n .attr(HEIGHT, height);\n }\n}\n\nexport default SelectionBox;\n\n","import { selectElement } from 'muze-utils';\n\nexport const strategies = (firebolt) => {\n const context = firebolt.context;\n const classed = (set, className, change) => {\n const classPrefix = context.config().classPrefix;\n selectElement(context.mount())\n .selectAll(`.${classPrefix}-legend-columns`)\n .filter(d => set.uids.indexOf(d.id) !== -1)\n .selectAll('div')\n .classed(className, change);\n };\n\n return {\n fade: (set, config = {}) => {\n const classPrefix = context.config().classPrefix;\n if (!set.mergedEnter.length && !set.mergedExit.length) {\n classed(set.completeSet, config.className || `${classPrefix}-legend-fadeout`, false);\n } else {\n classed(set.mergedExit, config.className || `${classPrefix}-legend-brighten`, false);\n classed(set.mergedExit, config.className || `${classPrefix}-legend-fadeout`, true);\n classed(set.mergedEnter, config.className || `${classPrefix}-legend-fadeout`, false);\n }\n },\n brighten: (set, config = {}) => {\n const classPrefix = context.config().classPrefix;\n if (!set.mergedEnter.length && !set.mergedExit.length) {\n classed(set.completeSet, config.className || `${classPrefix}-legend-brighten`, false);\n } else {\n classed(set.mergedEnter, config.className || `${classPrefix}-legend-brighten`, true);\n classed(set.mergedExit, config.className || `${classPrefix}-legend-brighten`, false);\n }\n }\n };\n};\n","import { GenericSideEffect } from '@chartshq/muze-firebolt';\nimport { strategies } from './strategies';\nimport { Highlighter } from '../../../enums/side-effects';\n\nexport default class LegendHighlighter extends GenericSideEffect {\n constructor (...params) {\n super(...params);\n this._strategies = strategies(this.firebolt);\n this._strategy = 'brighten';\n }\n\n static formalName () {\n return Highlighter;\n }\n\n apply (selectionSet, payload, options = {}) {\n const strategy = this._strategies[options.strategy || this._strategy];\n\n strategy(selectionSet, this);\n }\n}\n","import { mergeRecursive } from 'muze-utils';\n\nexport const PROPS = {\n config: {\n sanitization: (context, value) => mergeRecursive(context._config || {}, value)\n },\n data: {},\n fieldName: {},\n legendContainer: {},\n measurement: {\n sanitization: (context, value) => {\n const measurement = mergeRecursive(context._measurement, value);\n ['padding', 'border', 'margin'].forEach((space) => {\n measurement[space] = Math.min(measurement[space] > 0 ? measurement[space] : 0,\n measurement.maxWidth * 0.1, measurement.maxHeight * 0.1);\n });\n return measurement;\n }\n },\n logicalSpace: {},\n metaData: {},\n range: {\n sanitization: (context, value) => {\n context.scale().range(value);\n context.resetLogicalSpace();\n context.store().commit('range', value);\n return value;\n }\n },\n scale: {},\n smartTicks: {},\n store: {},\n title: {\n sanitization: (context, value) => mergeRecursive(context._title || {}, value)\n },\n valueParser: {\n defaultValue: val => val\n }\n};\n","import { getSymbol } from 'muze-utils';\nimport {\n CENTER,\n LEFT,\n RIGHT\n} from '../enums/constants';\n\nexport const ALIGN = {\n HORIZONTAL: 'horizontal',\n VERTICAL: 'vertical'\n};\n\nexport const DEFAULT_MEASUREMENT = {\n height: 30,\n width: 30,\n maxWidth: Infinity,\n maxHeight: Infinity,\n padding: 2,\n margin: 2,\n border: 1\n};\n\nexport const LEGEND_TITLE = {\n text: '',\n orientation: (pos) => {\n if (pos === LEFT || pos === RIGHT) {\n return LEFT;\n } return CENTER;\n }\n};\n\nexport const DEFAULT_CONFIG = {\n classPrefix: 'muze',\n borderStyle: 'solid',\n borderColor: 'rgba(0,0,0,0)',\n formatter: {\n bounds: {\n lower: 'less than',\n upper: 'more than'\n }\n },\n item: {\n text: {\n orientation: 'right',\n width: 10,\n formatter: (val, i, data, context) => context.valueParser()(val)\n },\n icon: {\n className: 'legend-icon',\n height: 20,\n width: 20,\n color: 'rgba(0,0,0,.5)',\n type: 'square'\n }\n }\n};\n\n/**\n * Creates a map of pre defined icons\n *\n * @param {string} icon Accepts a icon name like 'square', 'cross', 'diamond' etc\n * @return {Object} icon object which can be used to draw the icons\n */\nexport const ICON_MAP = (icon) => {\n if (icon && typeof (icon) === 'string') {\n return getSymbol(icon);\n } return icon;\n};\n","import { makeElement, numberInterpolator } from 'muze-utils';\n\nimport {\n SCALE_FUNCTIONS,\n WIDTH,\n HEIGHT,\n LEFT,\n RIGHT,\n TOP,\n BOTTOM,\n MAXWIDTH\n} from '../enums/constants';\n\n/**\n *\n *\n * @param {*} scale\n *\n */\nexport const getScaleInfo = (scale) => {\n const scaleType = scale.constructor.type();\n const domain = scale.uniqueValues();\n const steps = scale.config().stops || 1;\n const scaleFn = SCALE_FUNCTIONS[scaleType];\n\n return { scaleType, domain, steps, scaleFn };\n};\n\n/**\n *\n *\n * @param {*} domain\n * @param {*} steps\n *\n */\nexport const getInterpolatedData = (domain, steps) => {\n const domainForLegend = [];\n const interpolatedFn = numberInterpolator()(domain[0], domain[1]);\n\n for (let i = 0; i <= steps; i++) {\n domainForLegend[i] = interpolatedFn(i / steps);\n }\n return domainForLegend;\n};\n\n/**\n *\n *\n * @param {*} container\n * @param {*} text\n * @param {*} measurement\n * @param {*} classPrefix\n */\nexport const titleCreator = (container, title, measurement, config) => {\n const titleWidth = Math.min(measurement.maxWidth, measurement.width);\n\n const titleContainer = makeElement(container, 'table', [1], `${config.classPrefix}-legend-title`)\n .style(WIDTH, `${titleWidth}px`)\n .style(HEIGHT, `${measurement.height}px`)\n .style('border-bottom', `${measurement.border}px ${config.borderStyle} ${config.borderColor}`)\n .style('text-align', title.orientation instanceof Function ?\n title.orientation(config.position) : title.orientation);\n return makeElement(titleContainer, 'td', [1], `${config.classPrefix}-legend-title-text`)\n .style(WIDTH, `${titleWidth}px`)\n .style(MAXWIDTH, `${titleWidth}px`)\n .style(HEIGHT, '100%')\n .style('line-height', 1)\n .style('padding', `${measurement.padding}px`)\n .text(title.text)\n .style('overflow-x', 'scroll')\n .node();\n};\n\n/**\n *\n *\n * @param {*} data\n * @param {*} prop\n * @param {*} labelManager\n *\n */\nexport const getMaxMeasures = (data, prop, labelManager) => {\n let maxHeight = -Infinity;\n let maxWidth = -Infinity;\n\n data.forEach((item) => {\n const value = prop ? item[prop] : item;\n const space = labelManager.getOriSize(value);\n maxHeight = Math.max(space.height + 2, maxHeight);\n maxWidth = Math.max(space.width + 2, maxWidth);\n });\n\n return { height: maxHeight, width: maxWidth };\n};\n\n/**\n *\n *\n * @param {*} data\n * @param {*} prop\n * @param {*} labelManager\n *\n */\nexport const getItemMeasures = (context, prop, formatter) => {\n const space = [];\n const data = context.data();\n const labelManager = context._labelManager;\n\n data.forEach((item, index) => {\n const value = prop ? item[prop] : item;\n const { height, width } = labelManager.getOriSize(formatter(value, index, data, context));\n space[index] = { height: height + 1, width: width + 1 };\n });\n return space;\n};\n\n/**\n *\n *\n * @param {*} textOrientation\n * @param {*} effPadding\n * @param {*} titleSpace\n *\n * @memberof Legend\n */\nexport const computeItemSpaces = (config, measures, data) => {\n let totalHeight = 0;\n let totalWidth = 0;\n let maxItemSpaces = {\n width: 0, height: 0\n };\n const {\n effPadding,\n titleWidth,\n labelSpaces,\n titleHeight,\n maxWidth\n } = measures;\n const {\n item,\n align\n } = config;\n const {\n icon,\n text\n } = item;\n const textOrientation = text.orientation;\n const itemSpaces = [];\n const iconSpaces = [];\n let maxIconWidth = 0;\n labelSpaces.forEach((labelSpace, i) => {\n const itemSpace = { width: 0, height: 0 };\n const iconSpace = { width: 0, height: 0 };\n const datum = data[i] || {};\n // Compute each legend item height/width\n if (textOrientation === LEFT || textOrientation === RIGHT) {\n // Get label, icon and item widths\n labelSpace.width += effPadding;\n iconSpace.width = (datum.size ? 2 * Math.sqrt(datum.size / Math.PI) : icon.width) + effPadding;\n maxIconWidth = Math.max(iconSpace.width, maxIconWidth);\n itemSpace.width = labelSpace.width + maxIconWidth;\n\n // Get label, icon and item heights\n labelSpace.height = Math.max(labelSpace.height, icon.height) + effPadding;\n iconSpace.height = labelSpace.height;\n itemSpace.height = labelSpace.height;\n } else {\n // Get label, icon and item widths\n labelSpace.width = Math.max(labelSpace.width, datum.size ? 2 * Math.sqrt(datum.size / Math.PI)\n : icon.width) + effPadding;\n iconSpace.width = labelSpace.width;\n itemSpace.width = labelSpace.width;\n maxIconWidth = Math.max(iconSpace.width, maxIconWidth);\n\n // Get label, icon and item heights\n labelSpace.height += effPadding;\n iconSpace.height = icon.height + effPadding;\n itemSpace.height = labelSpace.height + iconSpace.height;\n }\n // Compute height and width of legend for each alignment\n if (align === 'horizontal') {\n totalHeight = Math.max(totalHeight, itemSpace.height);\n } else {\n totalHeight += itemSpace.height;\n totalWidth = Math.max(totalWidth, itemSpace.width, titleWidth);\n }\n maxItemSpaces = {\n width: Math.max(itemSpace.width, maxItemSpaces.width),\n height: Math.max(itemSpace.height, maxItemSpaces.height)\n };\n itemSpaces.push(itemSpace);\n iconSpaces.push(iconSpace);\n });\n itemSpaces.forEach((itemSpace, i) => {\n if (align === 'horizontal') {\n itemSpace.height = totalHeight;\n iconSpaces[i].width = maxIconWidth;\n if (textOrientation === LEFT || textOrientation === RIGHT) {\n labelSpaces[i].height = totalHeight;\n iconSpaces[i].height = totalHeight;\n itemSpaces[i].width = labelSpaces[i].width + maxIconWidth;\n } else {\n labelSpaces[i].width = maxIconWidth;\n itemSpaces[i].width = maxIconWidth;\n labelSpaces[i].width = maxIconWidth;\n }\n totalWidth = Math.max(totalWidth + itemSpaces[i].width);\n } else {\n itemSpace.width = Math.max(totalWidth, maxWidth);\n if (textOrientation === TOP || textOrientation === BOTTOM) {\n labelSpaces[i].width = totalWidth;\n iconSpaces[i].width = totalWidth;\n maxIconWidth = totalWidth;\n } else {\n const labelWidth = labelSpaces[i].width;\n const newLabelWidth = (maxItemSpaces.width - maxIconWidth);\n iconSpaces[i].width = maxIconWidth;\n itemSpaces[i].width = labelSpaces[i].width + maxIconWidth;\n labelSpaces[i].width = Math.max(labelWidth, newLabelWidth);\n totalWidth = Math.max(totalWidth, itemSpace.width);\n }\n }\n });\n totalWidth = Math.ceil(Math.max(totalWidth, titleWidth)) + effPadding;\n totalHeight += titleHeight + effPadding;\n totalHeight = Math.ceil(totalHeight);\n return { totalHeight, totalWidth, itemSpaces, iconSpaces, maxItemSpaces, maxIconWidth };\n};\n\n/**\n *\n *\n * @param {*} type\n * @param {*} scaleInfo\n * @param {*} domainInfo\n *\n */\nexport const getDomainBounds = (type, scaleInfo, domainInfo) => {\n const {\n scaleFn,\n scaleType,\n scale\n } = scaleInfo;\n const {\n domain,\n domainBounds,\n domainLeg,\n steps\n } = domainInfo;\n const ele = domain[type === 'lower' ? 0 : domain.length - 1];\n const step = steps[type === 'lower' ? 0 : steps.length - 1];\n\n return {\n [scaleType]: scaleType === 'size' ? scale[scaleFn](ele) * scale.getScaleFactor() : scale[scaleFn](ele),\n value: domainBounds[type],\n id: type === 'lower' ? 0 : domainLeg.length + 2,\n range: [ele, step]\n };\n};\n","import {\n makeElement,\n selectElement,\n getUniqueId,\n getSmartComputedStyle,\n generateGetterSetters,\n mergeRecursive\n} from 'muze-utils';\nimport { behaviouralActions } from '@chartshq/muze-firebolt';\nimport * as legendBehaviours from '../firebolt/behavioural';\n\nimport { LegendFireBolt } from '../firebolt/legend-firebolt';\nimport { actionBehaviourMap } from '../firebolt/action-behaviour-map';\nimport { physicalActions } from '../firebolt/physical';\nimport * as sideEffects from '../firebolt/side-effects';\nimport { behaviourEffectMap } from '../firebolt/behaviour-effect-map';\nimport { VALUE, PATH, RIGHT, LEFT, TOP, BOTTOM } from '../enums/constants';\nimport { PROPS } from './props';\nimport { DEFAULT_MEASUREMENT, DEFAULT_CONFIG, LEGEND_TITLE } from './defaults';\nimport { getItemMeasures, titleCreator, computeItemSpaces } from './legend-helper';\n\n/**\n * Creates a Legend from the axes of a canvas\n *\n * @param {Object} dependencies : legend data\n * @class SimpleLegend\n */\nexport default class SimpleLegend {\n\n /**\n * Creates an instance of Legend.\n * @param {Object} dependencies Set of dependencies required by the legend\n * @memberof Legend\n */\n constructor (dependencies) {\n this._data = [];\n this._metaData = [];\n this._mount = null;\n this._fieldName = null;\n this._title = Object.assign({}, LEGEND_TITLE);\n this._metaData = null;\n this._labelManager = dependencies.labelManager;\n this._cells = dependencies.cells;\n this._id = getUniqueId();\n this._measurement = Object.assign({}, this.constructor.defaultMeasurement());\n this._config = mergeRecursive({}, this.constructor.defaultConfig());\n\n generateGetterSetters(this, PROPS);\n this._computedStyle = getSmartComputedStyle(selectElement('body'),\n `${this.config().classPrefix}-legend-item-info`);\n\n this._firebolt = new LegendFireBolt(this, {\n behavioural: Object.assign({}, behaviouralActions, legendBehaviours),\n physical: physicalActions,\n physicalBehaviouralMap: actionBehaviourMap\n }, sideEffects, behaviourEffectMap);\n }\n\n id () {\n return this._id;\n }\n /**\n * Initializes an instance of the class\n *\n * @static\n * @param {Object} dependencies Set of dependencies required by the legend\n * @return {Instance} returns a new instance of Legend\n * @memberof Legend\n */\n static create (dependencies) {\n return new SimpleLegend(dependencies);\n }\n\n /**\n *\n *\n * @static\n *\n * @memberof SimpleLegend\n */\n static defaultConfig () {\n return DEFAULT_CONFIG;\n }\n\n /**\n *\n *\n * @static\n *\n * @memberof SimpleLegend\n */\n static defaultMeasurement () {\n return DEFAULT_MEASUREMENT;\n }\n\n /**\n *\n *\n * @readonly\n * @memberof SimpleLegend\n */\n firebolt (...params) {\n if (params.length) {\n return this;\n }\n return this._firebolt;\n }\n\n /**\n *\n *\n *\n * @memberof Legend\n */\n elemType () {\n return PATH;\n }\n\n canvasAlias (...alias) {\n if (alias.length) {\n this._canvasAlias = alias[0];\n return this;\n }\n return this._canvasAlias;\n }\n\n /**\n *\n *\n *\n * @memberof Legend\n */\n mount (...params) {\n if (params.length) {\n this._mount = params[0];\n this.render();\n return this;\n }\n return this._mount;\n }\n\n /**\n *\n *\n * @param {*} effPadding\n * @param {*} align\n *\n * @memberof Legend\n */\n getLabelSpaces () {\n const {\n item,\n classPrefix\n } = this.config();\n this._labelManager.setStyle(getSmartComputedStyle(selectElement('body'),\n `${classPrefix}-legend-item-info`));\n return getItemMeasures(this, VALUE, item.text.formatter);\n }\n\n /**\n * Sets the height and width of a legend based on provided max\n * height and width and based on its contents\n *\n * @return {Instance} Current instance\n * @memberof Legend\n */\n setLegendMeasures () {\n const {\n width,\n height,\n maxWidth,\n maxHeight,\n padding,\n margin,\n border\n } = this.measurement();\n const {\n align\n } = this.config();\n\n // Effective padding, margin and padding\n const effPadding = padding * 2;\n const effBorder = border * 2;\n const effMargin = margin * 2;\n\n this.data(this.dataFromScale(this.scale()));\n // Get space occupied by title\n const titleSpace = this.getTitleSpace();\n const titleHeight = titleSpace.height > 0 ? titleSpace.height + effPadding : 0;\n const titleWidth = titleSpace.width + effPadding;\n\n // Get space occupied by labels\n const labelSpaces = this.getLabelSpaces(effPadding, align);\n const {\n totalHeight, totalWidth, itemSpaces, iconSpaces, maxItemSpaces, maxIconWidth\n } = computeItemSpaces(this.config(),\n { effPadding, titleWidth, labelSpaces, titleHeight, maxWidth, maxHeight }, this.data());\n\n this.measurement({\n width: Math.max(totalWidth, width) + effMargin + effBorder,\n height: Math.max(totalHeight, height) + effMargin + effBorder,\n labelSpaces,\n iconSpaces,\n itemSpaces,\n maxItemSpaces,\n maxIconWidth,\n titleSpaces: {\n width: Math.min(maxWidth, this.measurement().width) - effMargin - effBorder,\n height: titleHeight\n }\n });\n return this;\n }\n\n /**\n * Returns the space occupied by the legend title\n *\n * @return {Object} Space occupied by title\n * @memberof Legend\n */\n getTitleSpace () {\n this._labelManager.setStyle(getSmartComputedStyle(selectElement('body'),\n `${this.config().classPrefix}-legend-title`));\n return this._labelManager.getOriSize(this.title().text ? this.title().text : '');\n }\n\n /**\n * Creates the title for the legend\n *\n * @param {DOM} container Container made for the title\n * @return {Selection} Title and it's node\n * @memberof Legend\n */\n renderTitle (container) {\n const { titleSpaces, border, padding, width, maxWidth } = this.measurement();\n const { borderStyle, borderColor } = this.config();\n return titleCreator(container, this.title(), {\n height: titleSpaces.height,\n width,\n maxWidth,\n border,\n padding,\n borderStyle,\n borderColor\n }, this.config());\n }\n\n /**\n * Render the legend with its title\n *\n * @param {DOM} mountPoint Point where the legend and title are to be appended\n * @return {Instance} Current instance of legend\n * @memberof Legend\n */\n render () {\n const firebolt = this.firebolt();\n const {\n classPrefix,\n borderStyle,\n borderColor,\n position\n } = this.config();\n const {\n maxWidth,\n maxHeight,\n width,\n height,\n margin,\n border\n } = this.measurement();\n const legendContainer = makeElement(selectElement(this.mount()), 'div', [1], `${classPrefix}-legend-box`);\n let marginPosition;\n switch (position) {\n case TOP:\n marginPosition = `margin-${BOTTOM}`;\n break;\n case LEFT:\n marginPosition = `margin-${RIGHT}`;\n break;\n case BOTTOM:\n marginPosition = `margin-${TOP}`;\n break;\n default:\n marginPosition = `margin-${LEFT}`;\n }\n legendContainer.classed(`${classPrefix}-legend-box-${this._id}`, true);\n legendContainer.style('float', 'left');\n // set height and width\n legendContainer.style('width', `${Math.min(maxWidth, width) - margin * 2}px`)\n .style('height', `${Math.min(maxHeight, height) - margin * 2}px`)\n .style(`${marginPosition}`, `${margin}px`)\n .style('border', `${border}px ${borderStyle} ${borderColor}`);\n this.legendContainer(legendContainer.node());\n\n // create title\n this.renderTitle(legendContainer);\n firebolt.createSelectionSet(this.data().map(d => d.id));\n return legendContainer;\n }\n /**\n *\n *\n * @param {*} data\n *\n * @memberof StepLegend\n */\n getCriteriaFromData (data) {\n const fieldName = this.fieldName();\n const type = this.metaData().getData().schema[0].type;\n if (type === 'measure') {\n return {\n [fieldName]: data.range\n };\n }\n return [[fieldName], [data.rawVal]];\n }\n}\n","import {\n LEFT,\n RIGHT,\n START,\n END,\n TOP,\n BOTTOM,\n HORIZONTAL,\n VERTICAL,\n CENTER,\n SHAPE,\n VALUE\n} from '../enums/constants';\n\nconst legendOrientation = {\n [HORIZONTAL]: {\n datasets: data => ({\n row: [1],\n column: data\n }),\n itemContainerMeasures: (measurement) => {\n const {\n itemSpaces,\n width\n } = measurement;\n return {\n row: {\n width: `${width}px`,\n padding: `${0}px`\n },\n column: {\n width: (d, i) => `${itemSpaces[i].width}px`,\n padding: `${0}px`\n }\n };\n },\n getStepSpacesInfo: (measurement) => {\n const { maxItemSpaces, height } = measurement;\n return {\n iconHeight: height,\n iconWidth: maxItemSpaces.width,\n stepPadding: {\n horizontal: true,\n vertical: false\n }\n };\n }\n },\n [VERTICAL]: {\n datasets: data => ({\n row: data,\n column: d => [d]\n }),\n itemContainerMeasures: (measurement, config) => {\n const {\n width\n } = measurement;\n const { padding } = config;\n\n return {\n row: {\n width: `${width}px`,\n padding: `${padding}px`\n },\n column: {\n width: `${width}px`,\n padding: `${0}px`\n }\n };\n },\n getStepSpacesInfo: (measurement) => {\n const { maxItemSpaces, width } = measurement;\n return {\n iconHeight: maxItemSpaces.height,\n iconWidth: width,\n stepPadding: {\n horizontal: false,\n vertical: true\n }\n };\n }\n }\n};\n\nexport const positionConfig = {\n [LEFT]: legendOrientation[VERTICAL],\n [RIGHT]: legendOrientation[VERTICAL],\n [TOP]: legendOrientation[HORIZONTAL],\n [BOTTOM]: legendOrientation[HORIZONTAL]\n};\n\nexport const alignmentMap = {\n [LEFT]: END,\n [RIGHT]: START,\n [TOP]: CENTER,\n [BOTTOM]: CENTER\n};\n\n// Reverses data for step legend\nexport const stepData = data => ({\n [LEFT]: data.reverse(),\n [RIGHT]: data.reverse(),\n [TOP]: data,\n [BOTTOM]: data\n});\n\n// Changes the item layout based on the position of the text\nexport const itemStack = {\n [LEFT]: [VALUE, SHAPE],\n [RIGHT]: [SHAPE, VALUE],\n [TOP]: [VALUE, SHAPE],\n [BOTTOM]: [SHAPE, VALUE]\n};\n","import { makeElement, selectElement, applyStyle } from 'muze-utils';\nimport { ICON_MAP } from './defaults';\nimport { positionConfig, alignmentMap, itemStack } from './position-config';\nimport {\n WIDTH,\n HEIGHT,\n CENTER,\n VALUE,\n RECT,\n LEFT,\n RIGHT\n} from '../enums/constants';\n\n/**\n *\n *\n * @param {*} container\n * @param {*} data\n * @param {*} legendInstance\n * @param {*} align\n *\n */\nexport const getItemContainers = (container, data, legendInstance) => {\n const measurement = legendInstance.measurement();\n const config = legendInstance.config();\n const {\n itemSpaces\n } = measurement;\n const {\n classPrefix,\n position\n } = config;\n const positionObj = positionConfig[position];\n const datasets = positionObj.datasets(data);\n const measures = positionObj.itemContainerMeasures(measurement, config);\n\n const rows = makeElement(container, 'div', datasets.row, `${classPrefix}-legend-row`);\n rows.style(HEIGHT, (d, i) => `${itemSpaces[i].height}px`);\n rows.style(WIDTH, measures.row.width);\n rows.style('padding', measures.row.padding);\n\n const columns = makeElement(rows, 'div', datasets.column, `${classPrefix}-legend-columns`);\n columns.style(WIDTH, measures.column.width);\n columns.style('padding', measures.column.padding);\n\n return columns;\n};\n\n/**\n *\n *\n * @param {*} container\n * @param {*} classPrefix\n * @param {*} data\n *\n * @memberof DiscreteLegend\n */\nexport const createLegendSkeleton = (context, container, classPrefix, data) => {\n let gradWidth = 0;\n let gradHeight = 0;\n let maxGradHeight = 0;\n let maxGradWidth = 0;\n const measurement = context.measurement();\n const {\n margin,\n border,\n titleSpaces,\n width,\n height,\n maxWidth,\n maxHeight\n } = measurement;\n\n gradHeight = height - (titleSpaces.height + 2 * margin + 2 * border);\n gradWidth = width - (margin * 2 + border * 2);\n\n maxGradHeight = maxHeight - (titleSpaces.height + margin * 2 + border * 2);\n maxGradWidth = maxWidth - (margin * 2 + border * 2);\n\n let legendBody = makeElement(container, 'div', [1], `${classPrefix}-legend-body`);\n legendBody.select(`.${classPrefix}-legend-overflow`).remove();\n // Create a div with scroll when overflow\n if (maxGradWidth && maxGradWidth < gradWidth) {\n legendBody = legendBody.style(WIDTH, `${maxGradWidth}px`).style('overflow-x', 'scroll');\n }\n // Create a div with scroll when overflow\n if (maxGradHeight && maxGradHeight < gradHeight) {\n legendBody.style(HEIGHT, `${maxGradHeight}px`).style('overflow-y', 'scroll');\n }\n\n legendBody = makeElement(legendBody, 'div', [1], `${classPrefix}-legend-overflow`);\n\n legendBody.style(WIDTH, `${gradWidth}px`);\n legendBody.style(HEIGHT, `${gradHeight}px`);\n\n const legendItem = getItemContainers(legendBody, data, context);\n return { legendItem };\n};\n\n/**\n * Creates legend item based on alignment and text orientation\n *\n * @param {Selection} container Point where items are to be mounted\n * @return {Instance} Current instance\n * @memberof Legend\n */\nexport const createItemSkeleton = (context, container) => {\n const {\n classPrefix,\n item\n } = context.config();\n const textOrientation = item.text.orientation;\n\n const stack = itemStack[textOrientation];\n const itemSkeleton = makeElement(container, 'div', (d, i) => stack.map(e => [e, d[e], d.color, d.size,\n d.value, context.fieldName(), i]), `${classPrefix}-legend-item-info`);\n\n const alignClass = alignmentMap[textOrientation];\n\n itemSkeleton.classed(alignClass, true);\n return { itemSkeleton };\n};\n\n/**\n *\n *\n * @param {*} measureType\n * @param {*} stepColorCheck\n */\nexport const applyItemStyle = (item, measureType, stepColorCheck, context) => {\n const {\n padding,\n labelSpaces,\n iconSpaces,\n maxIconWidth\n } = context.measurement();\n const diff = stepColorCheck ? -padding * 2 : 0;\n\n if (item[0] === VALUE) {\n return `${labelSpaces[item[6]][measureType]}px`;\n }\n return `${measureType === 'width' && !stepColorCheck ? maxIconWidth : iconSpaces[item[6]][measureType] - diff}px`;\n};\n\n/**\n *\n *\n * @param {*} str\n *\n */\nconst checkPath = (str) => {\n if (/^[mzlhvcsqta]\\s*[-+.0-9][^mlhvzcsqta]+/i.test(str) && /[\\dz]$/i.test(str) && str.length > 4) {\n return true;\n }\n return false;\n};\n\n/**\n *\n *\n * @param {*} d\n * @param {*} elem\n */\nconst createShape = function (d, elem, defaultIcon, width, height) {\n const groupElement = elem;\n // const { shape, size, update } = d;\n const size = d[3] || Math.min(width, height) * Math.PI;\n const shape = d[1] || defaultIcon;\n\n if (shape instanceof Promise) {\n shape.then((res) => {\n d.shape = res;\n return createShape(d, elem);\n });\n } else if (shape instanceof Element) {\n let newShape = shape.cloneNode(true);\n\n if (newShape.nodeName.toLowerCase() === 'img') {\n const src = newShape.src || newShape.href;\n newShape = document.createElementNS('http://www.w3.org/2000/svg', 'image');\n newShape.setAttribute('href', src);\n }\n const shapeElement = selectElement(newShape);\n shapeElement.attr('transform', `scale(${size / 100})`);\n return selectElement(groupElement.node().appendChild(newShape));\n } else if (typeof shape === 'string') {\n let pathStr;\n if (checkPath(shape)) {\n pathStr = shape;\n } else {\n pathStr = ICON_MAP(shape).size(size)();\n }\n return makeElement(groupElement, 'path', data => [data]).attr('d', pathStr);\n }\n d[1] = 'circle';\n return createShape(d, elem, 'circle');\n};\n\n/**\n * Returns the icon of the legend item\n *\n * @param {Object} datum Data property attached to the item\n * @param {number} width width of the item\n * @param {number} height height of the item\n * @return {Object|string} returns the path string or the string name of the icon\n * @memberof Legend\n */\nexport const getLegendIcon = (datum, width, height, defaultIcon) => {\n const icon = ICON_MAP(datum[1]);\n\n if (icon) {\n return icon.size(datum[3] || Math.min(width, height) * Math.PI);\n }\n return ICON_MAP(datum[3] ? 'circle' : defaultIcon).size(datum[3] || Math.min(width, height) * Math.PI);\n};\n\n/**\n *\n *\n */\nexport const renderIcon = (icon, container, datum, context) => {\n const {\n classPrefix,\n iconHeight,\n iconWidth,\n maxIconWidth,\n padding,\n color\n } = context;\n const svg = makeElement(container, 'svg', f => [f], `${classPrefix}-legend-icon-svg`)\n .attr(WIDTH, maxIconWidth)\n .attr(HEIGHT, iconHeight)\n .style(WIDTH, `${maxIconWidth}px`)\n .style(HEIGHT, `${iconHeight}px`);\n\n if (icon !== RECT) {\n const group = makeElement(svg, 'g', [datum[1]], `${classPrefix}-legend-icon`);\n createShape(datum, group, datum[3] ? 'circle' : 'square', iconWidth, iconHeight)\n .attr('transform', `translate(${maxIconWidth / 2 - padding} ${iconHeight / 2})`)\n .attr('fill', datum[2] || color);\n } else {\n makeElement(svg, RECT, [datum[1]], `${classPrefix}-legend-icon`)\n .attr('x', 0)\n .attr('y', 0)\n .attr(WIDTH, maxIconWidth)\n .attr(HEIGHT, iconHeight)\n .attr('fill', datum[2] || color);\n }\n};\n\n/**\n * Renders the items in the legend i.e, icon and text\n *\n * @param {DOM} container Point where item is to be mounted\n * @memberof Legend\n */\nexport const renderDiscreteItem = (context, container) => {\n const labelManager = context._labelManager;\n const {\n item,\n classPrefix\n } = context.config();\n const {\n maxIconWidth,\n padding\n } = context.measurement();\n const {\n width: iconWidth,\n height: iconHeight,\n color,\n className\n } = item.icon;\n\n const textOrientation = item.text.orientation;\n const formatter = item.text.formatter;\n\n labelManager.useEllipsesOnOverflow(true);\n applyStyle(container, {\n width: d => applyItemStyle(d, WIDTH, false, context),\n height: d => applyItemStyle(d, HEIGHT, false, context),\n 'text-align': CENTER,\n padding: `${padding}px`\n });\n\n labelManager.setStyle(context._computedStyle);\n const dataArr = container.data();\n container.each(function (d, i) {\n if (d[0] === VALUE) {\n selectElement(this).text(formatter(d[1], i, dataArr, context))\n .style(`padding-${textOrientation === RIGHT ? LEFT : RIGHT}`, '0px');\n } else {\n // const icon = getLegendIcon(d, iconWidth, iconHeight, type);\n selectElement(this).classed(`${classPrefix}-${className}`, true);\n selectElement(this).classed(`${classPrefix}-${className}-${i}`, true);\n renderIcon('circle', selectElement(this), d, {\n classPrefix,\n iconWidth,\n // iconWidth: 2 * Math.sqrt(d[3] / Math.PI) || iconWidth,\n iconHeight,\n maxIconWidth,\n padding,\n color\n });\n }\n });\n};\n\n/**\n* Renders the items in the legend i.e, icon and text\n*\n* @param {DOM} container Point where item is to be mounted\n* @memberof Legend\n*/\nexport const renderStepItem = (context, container) => {\n const labelManager = context._labelManager;\n const {\n item,\n position,\n classPrefix\n } = context.config();\n const {\n maxItemSpaces,\n maxIconWidth,\n padding\n } = context.measurement();\n const {\n width,\n height,\n color\n } = item.icon;\n const {\n formatter\n } = item.text;\n\n labelManager.useEllipsesOnOverflow(true);\n const { iconHeight, iconWidth, stepPadding } = positionConfig[position].getStepSpacesInfo({\n maxItemSpaces, height, width\n });\n\n applyStyle(container, {\n width: d => applyItemStyle(d, WIDTH, stepPadding.horizontal, context),\n height: d => applyItemStyle(d, HEIGHT, stepPadding.vertical, context),\n 'text-align': 'center',\n padding: `${padding}px`\n });\n\n labelManager.setStyle(context._computedStyle);\n const dataArr = container.data();\n container.each(function (d, i) {\n if (d[0] === VALUE) {\n selectElement(this).text(formatter(d[1], i, dataArr, context));\n } else {\n renderIcon(RECT, selectElement(this), d, {\n classPrefix,\n iconWidth,\n iconHeight,\n maxIconWidth,\n color\n });\n }\n });\n};\n","import {\n FieldType,\n DimensionSubtype,\n formatTemporal\n} from 'muze-utils';\nimport SimpleLegend from './simple-legend';\nimport { DISCRETE, LEFT, SIZE } from '../enums/constants';\nimport { getScaleInfo } from './legend-helper';\nimport { createLegendSkeleton, createItemSkeleton, renderDiscreteItem } from './renderer';\nimport '../styles.scss';\n\n/**\n * Creates a Legend from the axes of a canvas\n *\n * @param {Object} dependencies : legend data\n * @class Legend\n */\nexport default class DiscreteLegend extends SimpleLegend {\n\n /**\n * Initializes an instance of the class\n *\n * @static\n * @param {Object} dependencies Set of dependencies required by the legend\n * @return {Instance} returns a new instance of Legend\n * @memberof Legend\n */\n static create (dependencies) {\n return new DiscreteLegend(dependencies);\n }\n\n /**\n *\n *\n * @static\n *\n * @memberof DiscreteLegend\n */\n static type () {\n return DISCRETE;\n }\n\n /**\n *\n *\n * @param {*} scale\n *\n * @memberof DiscreteLegend\n */\n dataFromScale (scale) {\n const { scaleType, domain, scaleFn } = getScaleInfo(scale);\n let domainForLegend = [...new Set(domain)];\n const field = this.metaData().getFieldspace().fields[0];\n const { type, subtype } = field.schema();\n\n domainForLegend = domainForLegend.map((ele, i) => {\n let value = 0;\n let range = 0;\n const rawVal = domainForLegend[i];\n if (type === FieldType.MEASURE) {\n value = (+domainForLegend[i]).toFixed(0);\n const nextVal = domainForLegend[i + 1] ? +domainForLegend[i + 1] : +value;\n range = [value, nextVal.toFixed(0)];\n } else {\n let domainVal = rawVal;\n if (subtype === DimensionSubtype.TEMPORAL) {\n domainVal = formatTemporal(domainForLegend[i], field.minimumConsecutiveDifference());\n }\n value = domainVal;\n range = [domainVal];\n }\n return {\n [scaleType]: scale[scaleFn](ele),\n value,\n id: i,\n range,\n rawVal\n };\n }).filter(d => d.value !== null);\n\n domainForLegend = scaleType === SIZE ? domainForLegend.sort((a, b) => a[scaleType] - b[scaleType])\n : domainForLegend;\n return domainForLegend;\n }\n\n /**\n * Render the legend with its title\n *\n * @param {DOM} mountPoint Point where the legend and title are to be appended\n * @return {Instance} Current instance of legend\n * @memberof Legend\n */\n render () {\n const firebolt = this.firebolt();\n const data = this.data();\n const { classPrefix } = this.config();\n const legendContainer = super.render(this.mount());\n // create Legend\n const { legendItem } = createLegendSkeleton(this, legendContainer, classPrefix, data);\n const { itemSkeleton } = createItemSkeleton(this, legendItem);\n renderDiscreteItem(this, itemSkeleton);\n legendContainer.selectAll('div').style('float', LEFT);\n firebolt.mapActionsAndBehaviour();\n firebolt.createSelectionSet(this.data().map(d => d.id));\n return legendContainer;\n }\n}\n","import { makeElement, applyStyle } from 'muze-utils';\nimport { ContinousAxis } from '@chartshq/muze-axis';\nimport { BOTTOM, RIGHT } from '../enums/constants';\nimport { ALIGN } from './defaults';\nimport '../styles.scss';\n\n/**\n *\n *\n * @param {*} data\n *\n */\nexport const getGradientDomain = (data) => {\n if (typeof data[0].value === 'number') {\n return data.reduce((accumulator, currentValue) =>\n [Math.min(currentValue.value, accumulator[0]), Math.max(currentValue.value, accumulator[1])],\n [Number.MAX_VALUE, Number.MIN_VALUE]);\n }\n return data.map(e => e.value);\n};\n\n/**\n *\n *\n * @param {*} container\n * @param {*} data\n * @param {*} domain\n *\n */\nexport const makeLinearGradient = (container, data, domain) => {\n const defs = makeElement(container, 'defs', [1]);\n const linearGradient = makeElement(defs, 'linearGradient', [1])\n .attr('id', 'linear-gradient')\n .attr('x1', '0%')\n .attr('y2', '0%');\n makeElement(linearGradient, 'stop', data, 'stop-gradient')\n .attr('offset', d => `${(d.value - domain[0]) * 100 / (domain[1] - domain[0])}%`)\n .attr('stop-color', d => d.color);\n return linearGradient;\n};\n\n/**\n * Creates an axis cell with a linear axis for computing space and\n * creating gradient legend\n *\n * @return {AxisCell} Instance of Axis Cell for the gradient axis\n * @memberof Legend\n */\nexport const createAxis = (context) => {\n const data = context.data();\n const { align } = context.config();\n const AxisCell = context._cells.AxisCell;\n const newAxis = new ContinousAxis({\n id: `legend-${context._id}`,\n orientation: align === ALIGN.VERTICAL ? RIGHT : BOTTOM,\n style: context._computedStyle,\n nice: false,\n showAxisName: false,\n tickValues: data.map(d => d.value),\n fixedBaseline: false,\n labels: {\n rotation: 0\n }\n }, { labelManager: context._labelManager });\n\n newAxis.domain(getGradientDomain(data));\n newAxis.range([1, 1]);\n return new AxisCell().source(newAxis).config({\n margin: { left: 0, bottom: 0, top: 0, right: 0 }\n });\n};\n\n/**\n *\n *\n * @param {*} container\n * @param {*} data\n * @param {*} classPrefix\n *\n * @memberof GradientLegend\n */\nconst createLegendSkeleton = (container, classPrefix, data) => {\n const domain = getGradientDomain(data);\n const legendContainer = makeElement(container, 'div', [1], `${classPrefix}-legend-body`);\n const legendGradSvg = makeElement(legendContainer, 'svg', [1], `${classPrefix}-gradient`);\n const legendGradCont = makeElement(legendGradSvg, 'g', [1], `${classPrefix}-gradient-group`);\n const linearGradient = makeLinearGradient(legendGradSvg, data, domain);\n const legendRect = makeElement(legendGradCont, 'rect', [1], `${classPrefix}-gradient-rect`);\n\n return {\n legendContainer,\n legendGradCont,\n legendGradSvg,\n linearGradient,\n legendRect\n };\n};\n\n/**\n * Renders the axis for the gradient\n *\n * @param {Selection} container Point where axis is to be mounted\n * @param {number} height Height for axis\n * @param {number} width Width for axis\n * @memberof Legend\n */\nexport const renderAxis = (context, container, height, width) => {\n const axis = context.axis();\n\n axis.setAvailableSpace(width, height);\n axis.render(container.node());\n axis.source().render();\n};\n\n/**\n * Renders gradient legends\n *\n * @param {Selection} container Point where the legend is to be appended\n * @memberof GradientLegend\n */\nexport const renderGradient = (context, container) => {\n let gradHeight = 0;\n let gradWidth = 0;\n const {\n align,\n classPrefix,\n item\n } = context.config();\n const data = context.data();\n // Create the skeleton for the legend\n const {\n legendContainer,\n legendGradSvg,\n legendGradCont,\n linearGradient,\n legendRect\n } = createLegendSkeleton(container, classPrefix, data);\n const labelDim = context.axis().source().getAxisDimensions().tickDimensions;\n const {\n padding,\n margin,\n border,\n titleSpaces,\n maxItemSpaces,\n maxHeight,\n maxWidth,\n height,\n width\n } = context.measurement();\n const gradientDimensions = {};\n\n gradHeight = Math.floor(height - (titleSpaces.height + 2 * margin + 2 * border));\n gradWidth = Math.floor(width - (margin * 2 + border * 2));\n\n if (align === ALIGN.HORIZONTAL) {\n gradientDimensions.height = item.icon.height;\n gradientDimensions.width = gradWidth - 2 * padding - labelDim.width / 2;\n linearGradient.attr('x2', '100%').attr('y1', '0%');\n legendGradCont.attr('transform', `translate( ${labelDim.width / 2} 0)`);\n renderAxis(context, legendContainer, gradHeight - item.icon.height - padding, gradWidth - 2 * padding - 1);\n legendContainer.classed(`${classPrefix}-overflow-x`, width > maxWidth);\n\n applyStyle(legendContainer, {\n height: `${maxItemSpaces.height + border + padding}px`,\n width: `${Math.min(width, maxWidth)}px`,\n padding: `${padding}px`\n });\n\n legendRect.attr('height', gradientDimensions.height);\n legendRect.attr('width', gradientDimensions.width - labelDim.width / 2);\n } else {\n gradientDimensions.height = gradHeight - 2 * padding - labelDim.height / 2;\n gradientDimensions.width = item.icon.width;\n linearGradient.attr('x2', '0%').attr('y1', '100%');\n legendGradCont.attr('transform', `translate(0 ${labelDim.height / 2})`);\n renderAxis(context, legendContainer, gradHeight - 2 * padding - 1, gradWidth - item.icon.width - padding * 2);\n legendContainer.classed(`${classPrefix}-overflow-y`, height > maxHeight);\n applyStyle(legendContainer, {\n height: `${Math.min(height, maxHeight)}px`,\n width: `${width}px`,\n padding: `${padding}px`\n });\n legendRect.attr('height', gradientDimensions.height - labelDim.height / 2);\n legendRect.attr('width', gradientDimensions.width);\n }\n\n // Apply Styles to the legend plot area\n applyStyle(legendGradSvg, {\n height: `${gradientDimensions.height}px`,\n width: `${gradientDimensions.width}px`\n });\n\n // Apply styles to the legend rect\n applyStyle(legendRect, {\n fill: 'url(#linear-gradient)'\n });\n legendGradSvg.attr('height', gradientDimensions.height);\n legendGradSvg.attr('width', gradientDimensions.width);\n\n context.measurement({\n gradientDimensions\n });\n context._legendGradientSvg = legendGradSvg;\n return context;\n};\n","import SimpleLegend from './simple-legend';\nimport { getScaleInfo, getInterpolatedData } from './legend-helper';\nimport { GRADIENT, LEFT, SIZE } from '../enums/constants';\nimport { renderGradient, createAxis } from './gradient-helper';\nimport '../styles.scss';\n\n/**\n * Creates a Legend from the axes of a canvas\n *\n * @param {Object} dependencies : legend data\n * @class Legend\n */\nexport default class GradientLegend extends SimpleLegend {\n\n /**\n * Initializes an instance of the class\n *\n * @static\n * @param {Object} dependencies Set of dependencies required by the legend\n * @return {Instance} returns a new instance of Legend\n * @memberof Legend\n */\n static create (dependencies) {\n return new GradientLegend(dependencies);\n }\n\n /**\n *\n *\n * @static\n *\n * @memberof GradientLegend\n */\n static type () {\n return GRADIENT;\n }\n\n /**\n *\n *\n * @param {*} axis\n *\n * @memberof GradientLegend\n */\n axis (...axis) {\n if (axis.length) {\n this._axis = axis[0];\n return this;\n }\n return this._axis;\n }\n\n /**\n *\n *\n * @param {*} scale\n *\n * @memberof GradientLegend\n */\n dataFromScale (scale) {\n let domainForLegend = [];\n const { scaleType, domain, steps, scaleFn } = getScaleInfo(scale);\n\n if (steps instanceof Array) {\n if (domain[0] < steps[0]) {\n domainForLegend[0] = domain[0];\n }\n domainForLegend = [...domainForLegend, ...steps];\n if (domain[domain.length - 1] > steps[steps.length - 1]) {\n domainForLegend.push(domain[1]);\n }\n } else {\n domainForLegend = getInterpolatedData(domain, steps - 1);\n }\n domainForLegend = [...new Set(domainForLegend)].sort((a, b) => a - b);\n\n return domainForLegend.map((ele, i) => {\n const value = domainForLegend[i];\n return {\n [scaleType]: scaleType === SIZE ? scale[scaleFn](ele) * scale.getScaleFactor()\n : scale[scaleFn](Math.floor(ele)),\n value: +value.toFixed(2),\n id: i\n };\n }).filter(d => d.value !== null);\n }\n\n /**\n *\n *\n * @param {*} effPadding\n * @param {*} align\n *\n * @memberof Legend\n */\n getLabelSpaces (effPadding) {\n this.config({\n item: {\n text: {\n orientation: this.config().position\n }\n }\n });\n const axis = createAxis(this);\n const axisSpace = axis.getLogicalSpace();\n const space = { width: axisSpace.width - effPadding, height: axisSpace.height - effPadding };\n const axisDomainLength = axis.source().domain().length;\n const labelSpaces = new Array(axisDomainLength).fill(space);\n\n this.axis(axis);\n return labelSpaces;\n }\n\n /**\n *\n *\n *\n * @memberof GradientLegend\n */\n getDrawingContext () {\n return {\n svgContainer: this._legendGradientSvg\n };\n }\n\n /**\n * Render the legend with its title\n *\n * @param {DOM} mountPoint Point where the legend and title are to be appended\n * @return {Instance} Current instance of legend\n * @memberof Legend\n */\n render () {\n const firebolt = this.firebolt();\n const legendContainer = super.render(this.mount());\n // create Legend\n renderGradient(this, legendContainer);\n legendContainer.selectAll('div').style('float', LEFT);\n firebolt.mapActionsAndBehaviour();\n firebolt.createSelectionSet(this.data().map(d => d.id));\n return legendContainer;\n }\n /**\n *\n *\n * @param {*} data\n *\n * @memberof SimpleLegend\n */\n getCriteriaFromData (data) {\n return [[this.fieldName()], [data.value]];\n }\n}\n","import SimpleLegend from './simple-legend';\nimport {\n getScaleInfo,\n getInterpolatedData,\n getDomainBounds\n} from './legend-helper';\nimport {\n createLegendSkeleton,\n createItemSkeleton,\n renderStepItem\n} from './renderer';\nimport { STEP, RECT, LEFT, SIZE, UPPER, LOWER } from '../enums/constants';\nimport { stepData } from './position-config';\nimport '../styles.scss';\n\n/**\n * Creates a Legend from the axes of a canvas\n *\n * @param {Object} dependencies : legend data\n * @class Legend\n */\nexport default class StepLegend extends SimpleLegend {\n\n /**\n * Initializes an instance of the class\n *\n * @static\n * @param {Object} dependencies Set of dependencies required by the legend\n * @return {Instance} returns a new instance of Legend\n * @memberof Legend\n */\n static create (dependencies) {\n return new StepLegend(dependencies);\n }\n\n /**\n *\n *\n * @static\n *\n * @memberof StepLegend\n */\n static type () {\n return STEP;\n }\n\n /**\n *\n *\n * @param {*} scale\n *\n * @memberof StepLegend\n */\n dataFromScale (scale) {\n let domainLeg = [];\n const { scaleType, domain, steps, scaleFn } = getScaleInfo(scale);\n\n const { formatter } = this.config();\n const domainBounds = {\n lower: null, upper: null\n };\n\n if (steps instanceof Array) {\n if (domain[0] < steps[0]) {\n domainBounds.lower = [`${formatter.bounds.lower} ${steps[0]}`];\n }\n domainLeg = [...domainLeg, ...steps];\n if (domain[domain.length - 1] > steps[steps.length - 1]) {\n domainBounds.upper = [`${formatter.bounds.upper} ${steps[steps.length - 1]}`];\n }\n } else {\n domainLeg = getInterpolatedData(domain, steps);\n }\n\n domainLeg = [...new Set(domainLeg)].sort((a, b) => a - b);\n domainLeg = domainLeg.map((ele, i) => {\n let value = null;\n if (i < domainLeg.length - 1) {\n value = `${(ele.toFixed(1))} - ${(+domainLeg[i + 1].toFixed(1))}`;\n }\n return {\n [scaleType]: scaleType === SIZE ? scale[scaleFn](ele) * scale.getScaleFactor() : scale[scaleFn](ele),\n value,\n id: i + 1,\n range: [ele, domainLeg[i + 1]]\n };\n }).filter(d => d.value !== null);\n\n if (domainBounds.lower) {\n const lowerBounds = getDomainBounds(LOWER, { scale, scaleFn, scaleType },\n { domain, steps, domainBounds });\n domainLeg = [lowerBounds, ...domainLeg];\n }\n if (domainBounds.upper) {\n const upperBounds = getDomainBounds(UPPER, { scale, scaleFn, scaleType },\n { domain, steps, domainBounds, domainLeg });\n domainLeg = [...domainLeg, upperBounds];\n }\n return domainLeg;\n }\n\n /**\n *\n *\n * @param {*} effPadding\n * @param {*} align\n *\n * @memberof Legend\n */\n getLabelSpaces (effPadding, align) {\n this.config({\n item: {\n text: {\n orientation: this.config().position\n }\n }\n });\n return super.getLabelSpaces(effPadding, align);\n }\n\n /**\n *\n *\n *\n * @memberof Legend\n */\n elemType () {\n return RECT;\n }\n\n /**\n * Render the legend with its title\n *\n * @param {DOM} mountPoint Point where the legend and title are to be appended\n * @return {Instance} Current instance of legend\n * @memberof Legend\n */\n render () {\n const firebolt = this.firebolt();\n const { classPrefix, position } = this.config();\n const data = stepData(this.data())[position];\n\n const legendContainer = super.render(this.mount());\n\n // create Legend\n const { legendItem } = createLegendSkeleton(this, legendContainer, classPrefix, data);\n const { itemSkeleton } = createItemSkeleton(this, legendItem);\n\n renderStepItem(this, itemSkeleton);\n legendContainer.selectAll('div').style('float', LEFT);\n firebolt.mapActionsAndBehaviour();\n firebolt.createSelectionSet(this.data().map(d => d.id));\n return legendContainer;\n }\n\n /**\n *\n *\n * @param {*} data\n *\n * @memberof StepLegend\n */\n getCriteriaFromData (data) {\n const fieldName = this.fieldName();\n return {\n [fieldName]: data.range\n };\n }\n}\n","import { GradientLegend, DiscreteLegend, StepLegend } from '@chartshq/muze-legend';\n\n/**\n * Contants to be used as attr\n */\nexport const ROWS = 'rows';\nexport const COLUMNS = 'columns';\nexport const DATA = 'data';\nexport const COLOR = 'color';\nexport const SHAPE = 'shape';\nexport const SIZE = 'size';\nexport const DETAIL = 'detail';\nexport const LAYERS = 'layers';\nexport const TRANSFORM = 'transform';\nexport const INITIALIZED = 'isInitialized';\nexport const SOURCE = 'source';\nexport const WIDTH = 'width';\nexport const HEIGHT = 'height';\nexport const PADDING = 'padding';\nexport const BORDER = 'border';\nexport const MARGIN = 'margin';\nexport const CONFIG = 'config';\nexport const MOUNT = 'mount';\nexport const CANVAS_UPDATED = 'canvasUpdated';\nexport const CLASSPREFIX = 'classPrefix';\nexport const POLICIES = '_policies';\nexport const LEGEND = 'legend';\nexport const TITLE = 'title';\nexport const SUB_TITLE = 'subtitle';\nexport const RESOLVE = 'resolve';\nexport const DISCRETE = 'discrete';\nexport const STEP_COLOR = 'step-color';\nexport const GRADIENT = 'gradient';\nexport const LINEAR = 'linear';\nexport const ORDINAL = 'ordinal';\nexport const MUZE_PREFIX = 'muze';\n\nexport const TITLE_TEMPLATE_NOT_ALLOWED_TAGS = [\n 'script',\n 'style'\n];\n\nexport const LEGEND_TYPE_MAP = {\n [`${ORDINAL}-${true}-${COLOR}`]: DiscreteLegend,\n [`${ORDINAL}-${true}-${SIZE}`]: DiscreteLegend,\n [`${ORDINAL}-${true}-${SHAPE}`]: DiscreteLegend,\n [`${ORDINAL}-${false}-${COLOR}`]: DiscreteLegend,\n [`${ORDINAL}-${false}-${SHAPE}`]: DiscreteLegend,\n [`${ORDINAL}-${false}-${SIZE}`]: DiscreteLegend,\n [`${LINEAR}-${false}-${SIZE}`]: DiscreteLegend,\n [`${LINEAR}-${true}-${SIZE}`]: DiscreteLegend,\n [`${LINEAR}-${false}-${SHAPE}`]: DiscreteLegend,\n [`${LINEAR}-${true}-${COLOR}`]: StepLegend,\n [`${LINEAR}-${false}-${COLOR}`]: GradientLegend\n};\n\nexport const LEFT = 'left';\nexport const RIGHT = 'right';\nexport const BOTTOM = 'bottom';\nexport const TOP = 'top';\nexport const GROUP = 'group';\nexport const LAYOUT = 'layout';\nexport const RETINAL = 'retinal';\nexport const DIMENSION = 'dimension';\nexport const MEASURE = 'measure';\nexport const VERTICAL = 'vertical';\nexport const HORIZONTAL = 'horizontal';\nexport const HORIZONTAL_CENTER = 'h-center';\nexport const VERTICAL_CENTER = 'v-center';\nexport const HIDDEN = 'hidden';\nexport const OVERFLOW = 'overflow';\nexport const OVERFLOW_X = 'overflow-x';\nexport const OVERFLOW_Y = 'overflow-y';\nexport const AUTO = 'auto';\nexport const VISIBLE = 'visible';\n","import { ComposedVars, SimpleVariable } from '@chartshq/visual-group';\nimport { TITLE_TEMPLATE_NOT_ALLOWED_TAGS } from './constants';\n\n/**\n * This method creates a new composed variable instance from multiple variables. This is required when we have multiple\n * variables on a single axis and the union of domain of all the variables needs to be set on the axis.\n *\n * To create a new composed variable from multiple fields,\n * ```\n * const sharedVar = share('open', 'high', 'low', 'close');\n * canvas.rows([sharedVar])\n * .columns(['date']);\n * ```\n *\n * @module Operators\n * @public\n * @function share\n * @param {Array} vars Variable names.\n *\n * @return {ComposedVars} Instance of composed variable\n */\nexport const share = (...vars) => new ComposedVars(...vars.map(variable => new SimpleVariable(variable)));\n\n/**\n *\n *\n * @param {*} node\n *\n */\nfunction treeShakeNode (node) {\n if (node.nodeType !== Node.ELEMENT_NODE) { return; }\n\n if (TITLE_TEMPLATE_NOT_ALLOWED_TAGS.indexOf(node.tagName.toLowerCase()) !== -1) {\n node.parentNode.removeChild(node);\n } else {\n for (const childNode of node.childNodes) {\n treeShakeNode(childNode);\n }\n }\n}\n\n/**\n * A string template tagged function which sanitizes input html formatted string according to the allowed html tags.\n * This is used to render html in canvas components like title and tooltip.\n *\n * To render html in canvas components,\n * ```\n * canvas.title(html`TITLE`);\n * ```\n *\n * @public\n * @module Operators\n * @function html\n * @param {Array.} strings - The string parts of the template.\n * @param {Array} exps - The list of evaluated expression values.\n *\n * @return {Function} Returns a function which returns the sanitized html string.\n */\nexport function html (strings, ...exps) {\n let htmlCode = '';\n const expLn = exps.length;\n let i = 0;\n\n for (; i < expLn; ++i) {\n htmlCode += strings[i] + exps[i];\n }\n htmlCode += strings[i];\n\n const frag = document.createDocumentFragment();\n const wrapper = document.createElement('div');\n\n frag.appendChild(wrapper);\n wrapper.innerHTML = htmlCode;\n\n treeShakeNode(wrapper);\n const { innerHTML } = wrapper;\n\n return () => innerHTML;\n}\n","import { mergeRecursive, CommonProps } from 'muze-utils';\n\nconst defaultPolicy = (registrableComponents) => {\n const aliases = registrableComponents.map(comp => comp.alias());\n return {\n behaviours: {\n '*': (propagationPayload) => {\n const propagationCanvas = propagationPayload.sourceCanvas;\n return propagationCanvas ? aliases.indexOf(propagationCanvas) !== -1 : true;\n }\n }\n };\n};\n\nconst listenerFn = (canvas, fn) => () => {\n const valueMatrix = canvas.composition().visualGroup.matrixInstance().value;\n valueMatrix.each(cell => fn(cell.valueOf().firebolt()));\n};\n\nconst canvasIterator = (canvases, iteratorFn, cFn) => {\n canvases.forEach((canvas) => {\n const matrix = canvas.composition().visualGroup.matrixInstance().value;\n matrix.each(cell => iteratorFn(cell.valueOf().firebolt()));\n cFn && cFn(canvas);\n // Also register actions on canvas update\n const throwback = canvas._throwback;\n\n throwback.registerImmediateListener([CommonProps.MATRIX_CREATED],\n listenerFn(canvas, iteratorFn));\n });\n};\n\n/**\n * This class is initiated only once in lifecycle and is reponsible for regisration of physical and behavioural\n * actions and side effects and the mapping between them.\n *\n * To get the instance of action model\n * ```\n * const ActionModel = muze.ActionModel;\n * ```\n *\n * @public\n * @module ActionModel\n */\nclass ActionModel {\n constructor () {\n this._registrableComponents = [];\n }\n\n /**\n * Takes an array of canvases on which the physical and behavioural actions will get registered.\n *\n * @public\n * @param {Canvas} components Array of canvases\n *\n * @return {ActionModel} Instance of action model.\n */\n for (...components) {\n this._registrableComponents = components;\n return this;\n }\n\n /**\n * Registers physical actions on the canvases. It takes an object with key as the name of action and value having\n * the definition of the action.\n *\n * To register a {@link PhysicalAction},\n * ```\n * const ActionModel = muze.ActionModel;\n * ActionModel\n * // Physical actions will be registered on these canvases.\n * .for(canvas)\n * .registerPhysicalActions({\n * // Key is the name of physical action.\n * ctrlClick: (firebolt) => (targetEl, behaviours) => {\n * targetEl.on('click', function (data) {\n * const event = utils.getEvent();\n * const pos = utils.getClientPoint(event, this);\n * // Get the data point nearest to the mouse position.\n * const nearestPoint = firebolt.context.getNearestPoint(pos, {\n * data\n * });\n * // Prepare the payload\n * const payload = {\n * criteria: nearestPoint.id\n * };\n * behaviours.forEach((behaviour) => firebolt.dispatchBehaviour(behaviour, payload));\n * });\n * }\n * });\n * ```\n * @public\n *\n * @param {Object} action Names of physical actions and their definitions.\n *\n * @return {ActionModel} Instance of the action model.\n */\n registerPhysicalActions (action) {\n canvasIterator(this._registrableComponents, (firebolt) => {\n firebolt.registerPhysicalActions(action);\n }, (canvas) => {\n canvas.firebolt().registerPhysicalActions(action);\n });\n\n return this;\n }\n\n /**\n * Registers behavioural actions on the canvases. It takes definitions of the behavioural actions and registers\n * them on the canvases. Every behavioural action must inherit the {@link GenericBehaviour} class.\n *\n * To register a behavioural action\n * ```\n * // Define a new behavioural action\n * class SingleSelectBehaviour extends GenericBehaviour {\n * static formalName () {\n * return 'singleSelect';\n * }\n *\n * setSelectionSet (addSet, selectionSet) {\n * if (addSet === null) {\n * selectionSet.reset();\n * } else if (addSet.length) {\n * const existingAddSet = selectionSet.getExistingEntrySet(addSet);\n * if (existingAddSet.length){\n * selectionSet.reset();\n * } else {\n * selectionSet.add(addSet);\n * }\n * } else {\n * selectionSet.reset();\n * }\n * }\n * }\n * muze.ActionModel.registerBehaviouralActions(SingleSelectBehaviour);\n * ```\n *\n * @public\n *\n * @param {GenericBehaviour} actions Definition of behavioural actions.\n *\n * @return {ActionModel} Instance of action model.\n */\n registerBehaviouralActions (...actions) {\n canvasIterator(this._registrableComponents, (firebolt) => {\n firebolt.registerBehaviouralActions(actions);\n }, (canvas) => {\n canvas.firebolt().registerBehaviouralActions(actions);\n });\n\n return this;\n }\n\n /**\n * Registers the mapping of physical and behavioural actions. This mapping is used to establish which behavioural\n * actions should be dispatched on any triggering of physical actions.\n *\n * To map physical actions with behavioural actions,\n * ```\n * muze.ActionModel.registerPhysicalBehaviouralMap({\n * ctrlClick: {\n * behaviours: ['select'] // This array must be the formal names of the behavioural actions.\n * }\n * });\n * ```\n *\n * @public\n * @param {Object} map Contains the physical and behavioural action map.\n * ```\n * {\n * // Name of the physical action\n * click: {\n * // Target element selector. This is an optional field. If not passed, then by default takes the\n * // container element of visual unit.\n * target: '.muze-layers-area path',\n * // Behaviours which should be dispatched on triggering of the mapped physical action.\n * behaviours: ['select']\n * }\n * }\n * ```\n *\n * @return {ActionModel} Instance of action model.\n */\n registerPhysicalBehaviouralMap (map) {\n canvasIterator(this._registrableComponents, (firebolt) => {\n firebolt.registerPhysicalBehaviouralMap(map);\n }, (canvas) => {\n canvas.firebolt().registerPhysicalBehaviouralMap(map);\n });\n return this;\n }\n\n /**\n * Registers what behaviour to propagate on dispatch of a certain behavioural action. By default, when any\n * behavioural action is dispatched, then the same behavioural action gets propagated to all the other canvases.\n * This can be changed using this api.\n *\n * To register what behaviour should be propagated on dispatch of any behavioural action,\n * ```\n * ActionModel.for(canvas1, canvas2).registerPropagationBehaviourMap({\n * select: 'filter',\n * brush: 'filter'\n * });\n * ```\n *\n * @public\n * @param {Object} map Propagation behaviour map.\n *\n * @return {ActionModel} Instance of action model.\n */\n registerPropagationBehaviourMap (map) {\n canvasIterator(this._registrableComponents, (firebolt) => {\n firebolt.registerPropagationBehaviourMap(map);\n }, (canvas) => {\n canvas.firebolt().registerPropagationBehaviourMap(map);\n });\n\n return this;\n }\n\n /**\n * Registers the mapping of side effects and behavioural actions. It takes an object which contains key as the\n * name of behavioural action and the side effects which will be linked to it.\n *\n * To map side effects to select behaviour,\n * ```\n * muze.ActionModel.mapSideEffects({\n * select: ['infoBox'] // This array must be the formal names of the side effects\n * });\n * ```\n *\n * To map side effects to select behaviour, but disable all the default side effects attached with this behaviour,\n * ```\n * muze.ActionModel.mapSideEffects({\n * select: {\n * effects: ['infoBox'],\n * preventDefaultActions: true\n * }\n * });\n * @public\n * @param {Object} map Mapping of behavioural actions and side effects.\n * ```\n * {\n * select: ['infoBox']\n * }\n * ```\n * @return {ActionModel} Instance of action model.\n */\n mapSideEffects (map) {\n canvasIterator(this._registrableComponents, (firebolt) => {\n firebolt.mapSideEffects(map);\n }, (canvas) => {\n canvas.firebolt().mapSideEffects(map);\n });\n return this;\n }\n\n /**\n * Registers the side effects on the registered canvases. It takes definitions of side effects and registers them\n * on the canvases. Every side effect must inherit the base class {@link GenericSideEffect} or\n * {@link SpawnableSideEffect} or {@link SurrogateSideEffect} class.\n *\n * ```\n * // Define a custom side effect\n * class InfoBox extends SpawnableSideEffect {\n * static formalName () {\n * return 'infoBox';\n * }\n *\n * apply (selectionSet) {\n * }\n * }\n * muze.ActionModel.registerSideEffects(InfoBox);\n * ```\n * @public\n * @param {GenericSideEffect} sideEffects Definition of side effects.\n *\n * @return {ActionModel} Instance of action model.\n */\n registerSideEffects (...sideEffects) {\n canvasIterator(this._registrableComponents, (firebolt) => {\n firebolt.registerSideEffects(sideEffects);\n }, (canvas) => {\n canvas.firebolt().registerSideEffects(sideEffects);\n });\n return this;\n }\n\n /**\n * Breaks the link between behavioural actions and physical actions. It takes an array of behavioural action\n * and it's physical action.\n *\n * To dissociate behavioural actions from physical actions\n * ```\n * muze.ActionModel.dissociateBehaviour(['select', 'click'], ['highlight', 'hover']);\n * ```\n * @public\n * @param {Array} maps Array of behavioural action and physical action.\n *\n * @return {ActionModel} Instance of action model.\n */\n dissociateBehaviour (...maps) {\n canvasIterator(this._registrableComponents, (firebolt) => {\n maps.forEach(val => firebolt.dissociateBehaviour(val[0], val[1]));\n }, (canvas) => {\n maps.forEach(val => canvas.firebolt().dissociateBehaviour(val[0], val[1]));\n });\n return this;\n }\n\n /**\n * Breaks the link between side effects and behavioural actions. It takes an array of formal names of the side\n * effects and it's linked behavioural action.\n *\n * To dissociate side effects from behavioural actions\n * ```\n * muze.ActionModel.dissociateSideEffect(['crossline', 'highlight'], ['selectionBox', 'brush']);\n * ```\n * @public\n * @param {Array} maps Array of side effects and behavioural actions.\n *\n * @return {ActionModel} Instance of action model.\n */\n dissociateSideEffect (...maps) {\n canvasIterator(this._registrableComponents, (firebolt) => {\n maps.forEach(val => firebolt.dissociateSideEffect(val[0], val[1]));\n }, (canvas) => {\n maps.forEach(val => canvas.firebolt().dissociateSideEffect(val[0], val[1]));\n });\n return this;\n }\n\n /**\n * By default cross interactivity is disabled between canvases. This enables cross interaction between the canvases\n * so that any action happening in one canvas gets dispatched on other canvases as well. An optional policy can also\n * be passed in this method. The policy can be used to control on which canvases the behavioural actions and\n * side effects gets dispatched.\n *\n * To just enable cross interactivity between two canvases,\n * ```\n * ActionModel.for(canvas1, canvas2)\n * .enableCrossInteractivity();\n * ```\n *\n * To enable cross interactivity but enable any behavioural action only when it is triggered from canvas1.\n * ```\n * ActionModel.for(canvas1, canvas2)\n * .enableCrossInteractivity({\n * behaviours: {\n * // Here * stands for any behavioural action name. We can also give any name of behavioural action\n * // in place of this.\n * '*': (propPayload, context) => {\n * return propPayload.sourceCanvas === canvas1.alias();\n * }\n * }\n * });\n * ```\n *\n * To enable cross interactivity but enable tooltip effect if the action is propagated from canvas1,\n * ```\n * ActionModel.for(canvas1, canvas2)\n * .enableCrossInteractivity({\n * sideEffects: {\n * tooltip: (propPayload, context) => {\n * return propPayload.sourceCanvas === canvas1.alias();\n * }\n * }\n * });\n * ```\n * @public\n * @param {Object} policy Policy definition.\n *\n * @return {ActionModel} Instance of action model.\n */\n enableCrossInteractivity (policy = {}) {\n const registrableComponents = this._registrableComponents;\n const mergedPolicy = mergeRecursive(mergeRecursive({}, defaultPolicy(registrableComponents)), policy);\n\n registrableComponents.forEach((canvas) => {\n canvas.firebolt().crossInteractionPolicy(mergedPolicy);\n });\n\n return this;\n }\n}\n\nexport const actionModel = (() => new ActionModel())();\n","import { MUZE_PREFIX } from '../constants';\n\nexport const TITLE_CONFIG = {\n position: 'top',\n align: 'left',\n padding: 4,\n className: `${MUZE_PREFIX}-title-container`\n};\n\nexport const SUB_TITLE_CONFIG = {\n position: 'top',\n align: 'left',\n padding: 16,\n maxLines: 2,\n className: `${MUZE_PREFIX}-subtitle-container`\n};\n\nexport const GRID = 'grid';\n\nexport const CANVAS = 'canvas';\n\nexport const LAYOUT_ALIGN = {\n TOP: 'top',\n LEFT: 'left',\n RIGHT: 'right',\n BOTTOM: 'bottom'\n};\n","import { mergeRecursive } from 'muze-utils';\nimport {\n ROWS,\n COLUMNS,\n COLOR,\n SHAPE,\n SIZE,\n DETAIL,\n LAYERS,\n TRANSFORM,\n TITLE,\n SUB_TITLE\n} from '../constants';\nimport { TITLE_CONFIG, SUB_TITLE_CONFIG } from './defaults';\n/**\n * This is the local options semantics based on which setters getters are created and reactivity is initiated.\n * This local object is only valid for Canvas.\n * Canvas merges global and local object both to the model\n *\n * Format\n * PROPERTRY_NAME: {\n * value: // default value of the property,\n * meta: {\n * typeCheck: // The setter value will be checked using this. If the value is function then the setter value\n * // is passed as args.\n * typeExpected: // The output of typecheck action will be tested against this. Truthy value will set the\n * // value to the setter\n * sanitizaiton: // Need for sanitization before type is checked\n * }\n * }\n *\n * @module LocalOptions\n */\n\nexport const localOptions = {\n [ROWS]: {\n value: null,\n meta: {\n typeCheck: 'constructor',\n typeExpected: 'Array'\n }\n },\n [COLUMNS]: {\n value: null,\n meta: {\n typeCheck: 'constructor',\n typeExpected: 'Array'\n }\n },\n [COLOR]: {\n value: null,\n meta: {\n typeCheck: 'constructor',\n typeExpected: 'Object',\n sanitization: (config) => {\n if (typeof config === 'string' || config === null) {\n return {\n field: config\n };\n }\n return config;\n }\n }\n },\n [SHAPE]: {\n value: null,\n meta: {\n typeCheck: 'constructor',\n typeExpected: 'Object',\n sanitization: (config) => {\n if (typeof config === 'string' || config === null) {\n return {\n field: config\n };\n }\n return config;\n }\n }\n },\n [SIZE]: {\n value: null,\n meta: {\n typeCheck: 'constructor',\n typeExpected: 'Object',\n sanitization: (config) => {\n if (typeof config === 'string' || config === null) {\n return {\n field: config\n };\n }\n return config;\n }\n }\n },\n [DETAIL]: {\n value: [],\n meta: {\n typeCheck: 'constructor',\n typeExpected: 'Array'\n }\n },\n\n [LAYERS]: {\n value: [],\n meta: {\n typeCheck: 'constructor',\n typeExpected: 'Array'\n }\n },\n [TRANSFORM]: {\n value: null,\n meta: {\n typeCheck: 'constructor',\n typeExpected: 'Object'\n }\n }\n};\n\nexport const canvasOptions = {\n [TITLE]: {\n value: [null, null],\n meta: {\n typeCheck: ['constructor', 'constructor'],\n typeExpected: ['Function', 'Object'],\n spreadParams: true,\n sanitization: [(title) => {\n if (typeof title === 'string') {\n const t = () => title;\n t._sanitized = true;\n return t;\n }\n return title;\n }, (titleConfig) => {\n const defConfig = mergeRecursive({}, TITLE_CONFIG);\n return mergeRecursive(defConfig, titleConfig);\n }]\n }\n },\n [SUB_TITLE]: {\n value: [null, null],\n meta: {\n typeCheck: ['constructor', 'constructor'],\n typeExpected: ['Function', 'Object'],\n spreadParams: true,\n sanitization: [(subtitle) => {\n if (typeof subtitle === 'string') {\n const sub = () => subtitle;\n sub._sanitized = true;\n return sub;\n }\n return subtitle;\n }, (subtitleConfig) => {\n const defConfig = mergeRecursive({}, SUB_TITLE_CONFIG);\n return mergeRecursive(defConfig, subtitleConfig);\n }]\n }\n }\n};\n","export default class LayoutComponent {\n constructor (name, dimensions, seed) {\n this._seed = seed;\n this._boundBox = {\n height: dimensions.height,\n width: dimensions.width,\n top: null,\n left: null\n };\n this._renderAt = null;\n this._alignWith = null;\n this._alignment = null;\n this._target = null;\n this._position = null;\n this._componentName = name;\n this._className = null;\n }\n\n getLogicalSpace () {\n throw new Error('getLogicalSpace is not defined');\n }\n\n setSpatialConfig () {\n throw new Error('setSpatialSpace is not defined');\n }\n\n name (param) {\n if (param) {\n this._componentName = param;\n }\n return this._componentName;\n }\n\n target (param) {\n if (param) {\n this._target = param;\n }\n return this._target;\n }\n\n position (param) {\n if (param) {\n this._position = param;\n }\n return this._position;\n }\n\n alignment (param) {\n if (param) {\n this._alignment = param;\n }\n return this._alignment;\n }\n\n alignWith (param) {\n if (param) {\n this._alignWith = param;\n }\n return this._alignWith;\n }\n\n renderAt (param) {\n if (param) {\n this._renderAt = param;\n }\n return this._renderAt;\n }\n\n boundBox (param) {\n if (param) {\n Object.assign(this._boundBox, param);\n }\n return this._boundBox;\n }\n\n className (param) {\n if (param) {\n this._className = param;\n }\n return this._className;\n }\n\n draw () {\n throw new Error('draw is not defined');\n }\n }\n\n","import LayoutComponent from './layoutComponent';\n\nclass DummyComponent extends LayoutComponent {\n getLogicalSpace () {\n return {\n width: this.boundBox().width,\n height: this.boundBox().height\n };\n }\n\n setSpatialConfig (conf) {\n this.boundBox({ top: conf.y, left: conf.x });\n this.newDimensions = {\n width: conf.width,\n height: conf.height\n };\n this.renderAt(conf.renderAt);\n return this;\n }\n\n draw () {\n if (!this.component) {\n throw new Error(`Component not set for ${this.componentName}`);\n }\n this.component.mount(document.getElementById(this.renderAt)); // Change the draw method to component draw\n return this;\n }\n}\n\nexport default DummyComponent;\n","export const DEFAULT_CONFIG = {\n classPrefix: 'muze',\n interaction: {\n sideEffect: 'individual'\n },\n pagination: 'scroll',\n scrollBar: {\n thickness: 10,\n speed: 2,\n vertical: {\n align: 'right'\n },\n horizontal: {\n align: 'bottom'\n }\n },\n legend: {\n position: 'right',\n color: {\n show: true,\n padding: 1,\n margin: 3,\n border: 1,\n height: 20,\n width: 20\n },\n shape: {\n show: true,\n padding: 1,\n margin: 3,\n border: 1,\n height: 20,\n width: 20\n },\n size: {\n show: true,\n padding: 1,\n margin: 3,\n border: 1,\n height: 20,\n width: 20\n }\n },\n showHeaders: false,\n minWidth: 100,\n minHeight: 100,\n facet: {\n rows: {\n minCharacters: 3\n },\n columns: {\n maxLines: 2,\n verticalAlign: 'middle',\n minCharacters: 1\n }\n },\n border: {\n style: 'solid',\n color: '#d6d6d6',\n width: 2,\n collapse: true,\n spacing: 0\n },\n autoGroupBy: {\n disabled: false\n },\n invalidValues: {}\n};\n","import { DEFAULT_CONFIG } from '../../../../muze/src/defaults';\n\nconst DEFAULT_WIDTH = 600;\nconst DEFAULT_HEIGHT = 400;\nconst DEFAULT_CLASS_NAME = `${DEFAULT_CONFIG.classPrefix}-layout-container-component`;\nconst NODE_PREFIX = `${DEFAULT_CONFIG.classPrefix}-layout-container`;\n\nexport {\n DEFAULT_WIDTH,\n DEFAULT_HEIGHT,\n DEFAULT_CLASS_NAME,\n NODE_PREFIX\n};\n","export default class DefinitionModel {\n constructor (config) {\n this._host = config.host || null;\n this._cut = config.cut || null;\n this._ratioWeight = config.ratioWeight === 0 ? 0 : config.ratioWeight || 1;\n this._preferred = config.preferred || false;\n this._lanes = config.lanes || [];\n this._remainingHeight = 0;\n this._remainingWidth = 0;\n }\n\n host (host) {\n if (host) {\n this._host = host;\n }\n return this._host;\n }\n\n preferred (preferred) {\n if (preferred) {\n this._preferred = preferred;\n }\n return this._preferred;\n }\n\n cut (cut) {\n if (cut) {\n this._cut = cut;\n }\n return this._cut;\n }\n\n ratioWeight (ratioWeight) {\n if (ratioWeight) {\n this._ratioWeight = ratioWeight;\n }\n return this._ratioWeight;\n }\n\n lanes (lanes) {\n if (lanes) {\n this._lanes = lanes;\n }\n return this._lanes;\n }\n\n remainingHeight (remainingHeight) {\n if (remainingHeight) {\n this._remainingHeight = remainingHeight;\n }\n return this._remainingHeight;\n }\n\n remainingWidth (remainingWidth) {\n if (remainingWidth) {\n this._remainingWidth = remainingWidth;\n }\n return this._remainingWidth;\n }\n}\n","import { NODE_PREFIX } from '../../constants/defaults';\nimport DefinitionModel from '../definition-manager/definitionModel';\nimport DummyComponent from '../../layout-component/dummy-component';\n/**\n * Compares two strings in lowercase\n *\n * @export\n * @param {string} value the value to be compared\n * @param {string} compareTo whom the value would be compared\n * @return {boolean} true if values are equal\n */\nexport function isEqual (value, compareTo) {\n if (typeof value !== 'string' || typeof compareTo !== 'string') {\n throw new TypeError('value and compareTo must be string');\n }\n return value.toLowerCase() === compareTo.toLowerCase();\n}\n\nexport const getNodeId = (() => {\n let _uid = 0;\n return () => `${NODE_PREFIX}-${++_uid}`;\n})();\n\nexport function yExtraSpace (node) {\n let smallestHeight = 0;\n if (node.getCutType() === 'v') {\n smallestHeight = smallestExtraHeightHorizontally(node); // eslint-disable-line no-use-before-define\n } else if (node.getCutType() === 'h') {\n node.children().forEach((child) => {\n smallestHeight += yExtraSpace(child);\n });\n } else if (node.model().host() && node.model().host().getLogicalSpace) {\n const containerHeight = node.boundBox().height;\n const hostHeight = node.model().host().getLogicalSpace().height;\n\n smallestHeight = containerHeight - hostHeight;\n if (smallestHeight < 0) {\n smallestHeight = 0;\n }\n } else {\n smallestHeight = 0;\n }\n return smallestHeight;\n}\n\nexport function smallestExtraHeightHorizontally (node) {\n let smallestHeight = Number.MAX_SAFE_INTEGER;\n node.children().forEach((child) => {\n const h = yExtraSpace(child);\n if (h < smallestHeight) {\n smallestHeight = h;\n }\n });\n return smallestHeight;\n}\n\nexport function xExtraSpace (node) {\n let smallestWidth = 0;\n if (node.getCutType() === 'h') {\n smallestWidth = smallestExtraWidthVertically(node); // eslint-disable-line no-use-before-define\n } else if (node.getCutType() === 'v') {\n node.children().forEach((child) => {\n smallestWidth += xExtraSpace(child);\n });\n } else if (node.model().host() && node.model().host().getLogicalSpace) {\n const containerWidth = node.boundBox().width;\n const hostWidth = node.model().host().getLogicalSpace().width;\n smallestWidth = containerWidth - hostWidth;\n if (smallestWidth < 0) {\n smallestWidth = 0;\n }\n } else {\n smallestWidth = 0;\n }\n return smallestWidth;\n}\n\nexport function smallestExtraWidthVertically (node) {\n let smallestWidth = Number.MAX_SAFE_INTEGER;\n node.children().forEach((child) => {\n const w = xExtraSpace(child);\n if (w < smallestWidth) {\n smallestWidth = w;\n }\n });\n return smallestWidth;\n}\n\nexport function determineBoundBox (bb, i, arr, instance) {\n if (i) {\n // if not first sibling, take boundbox from previous sibling\n const lastSibling = arr[i - 1];\n const { top: _top, left: _left, height: _height, width: _width } = lastSibling.boundBox();\n return {\n width: bb.width,\n height: bb.height,\n\n top: instance.parentCut() === 'h'\n ? _top + _height : _top,\n\n left: instance.parentCut() === 'h'\n ? _left : _left + _width\n };\n }\n // if first sibling, take boundbox from parent\n const { top: _top, left: _left } = instance.parent().boundBox();\n return {\n width: bb.width,\n height: bb.height,\n top: _top,\n left: _left\n };\n}\n\n// prepares the targetComponent Map for target Mapping ie. where a component should lie\nexport function prepareTargetComponentMap (context) {\n context.targetComponentMap(new Map());\n context.componentMap().forEach((value) => {\n if (context.targetComponentMap().has(value.target())) {\n context.targetComponentMap().get(value.target()).push(value);\n } else {\n const temp = [];\n temp.push(value);\n context.targetComponentMap().set(value.target(), temp);\n }\n });\n}\n\nexport function getComponent (canvasComponent, componentName) {\n const comp = canvasComponent.find(component => component.name() === componentName);\n return (comp && comp !== -1) ? comp : null;\n}\nexport function createPlaceHolderComponent (height, width, position) {\n const comp = new DummyComponent(0, { height, width });\n comp.name('placeHolder');\n comp.position(position);\n return comp;\n}\n\nexport function placeComponent (definitionModel, component, isPreferred = false, isGridComponent = false) {\n let cut = '';\n let componentRatioWidth = 1;\n let leftOvercomponentRationWidth = 1;\n let leftHeight = 0;\n let leftWidth = 0;\n\n if (!component) {\n return { first: definitionModel, second: definitionModel };\n }\n\n const { height: componentHeight, width: componentWidth } = component.getLogicalSpace();\n const position = component.position();\n if (position === 'top' || position === 'bottom') {\n cut = 'h';\n componentRatioWidth = componentHeight / definitionModel.remainingHeight();\n leftHeight = definitionModel.remainingHeight() - componentHeight;\n leftWidth = definitionModel.remainingWidth();\n } else {\n cut = 'v';\n componentRatioWidth = componentWidth / definitionModel.remainingWidth();\n leftWidth = definitionModel.remainingWidth() - componentWidth;\n leftHeight = definitionModel.remainingHeight();\n }\n leftOvercomponentRationWidth = 1 - componentRatioWidth;\n\n// update parentModel\n definitionModel.cut(cut);\n const firstLaneConfig = {\n host: component.name(),\n cut: null,\n ratioWeight: componentRatioWidth,\n preferred: isGridComponent ? false : isPreferred,\n lanes: []\n };\n const firstLane = new DefinitionModel(firstLaneConfig);\n firstLane.remainingHeight(componentHeight);\n firstLane.remainingWidth(componentWidth);\n\n const secondLaneConfig = {\n host: null,\n cut: null,\n ratioWeight: leftOvercomponentRationWidth,\n preferred: isGridComponent ? false : !isPreferred,\n lanes: []\n };\n const secondLane = new DefinitionModel(secondLaneConfig);\n secondLane.remainingHeight(leftHeight);\n secondLane.remainingWidth(leftWidth);\n if (isPreferred) {\n definitionModel.lanes([firstLane]);\n } else if (position === 'top' || position === 'left') {\n definitionModel.lanes([firstLane, secondLane]);\n } else {\n definitionModel.lanes([secondLane, firstLane]);\n }\n return { first: firstLane, second: secondLane };\n}\n\nexport function placeGridComponent (definitionModel, gridComponents) {\n let tempDefModel = definitionModel;\n const rows = gridComponents.length;\n const column = rows ? gridComponents[0].length : 0;\n const height = gridComponents.reduce((acc, val) => (acc + val[0].getLogicalSpace().height), 0);\n\n for (let i = 0; i < column; i++) {\n const iscolumnPreffered = i === column - 1;\n const columnPlaceHolderComponent = createPlaceHolderComponent(height,\n gridComponents[0][i].getLogicalSpace().width, 'left');\n const { first, second } = placeComponent(tempDefModel, columnPlaceHolderComponent, iscolumnPreffered);\n tempDefModel = first;\n for (let j = 0; j < rows; j++) {\n const rowpreffred = j === (rows - 1);\n tempDefModel = placeComponent(tempDefModel, gridComponents[j][i], rowpreffred, true).second;\n }\n tempDefModel = second;\n }\n return tempDefModel;\n}\n\nexport function negotiateDimension (node) {\n let preferred;\n let cumultiveExtraSpaceAmt = 0;\n let alteredDim;\n let nonAlteredDim;\n\n const childrenLength = node.children().length;\n\n for (let index = 0; index < childrenLength; index++) {\n let fn;\n let extraSpaceAmt;\n const child = node.children()[index];\n\n if (child.parentCut() === 'h') {\n fn = yExtraSpace;\n alteredDim = 'height';\n nonAlteredDim = 'width';\n } else {\n fn = xExtraSpace;\n alteredDim = 'width';\n nonAlteredDim = 'height';\n }\n // if vertical then get extra height from other node and push it to the preferred node.\n // for horizontal cut the same thing is to be done with width\n if (child.isPreferred()) {\n // push extra space in sink. Execute it when all non preferred space are computed.\n preferred = child;\n\n continue; // eslint-disable-line no-continue\n }\n // reduce own height and save it in a var\n cumultiveExtraSpaceAmt += (extraSpaceAmt = fn(child));\n child.boundBox()[alteredDim] -= extraSpaceAmt;\n // update nonaltered dim from parent for any change which happened during negotiation\n child.boundBox()[nonAlteredDim] = child.parent().boundBox()[nonAlteredDim];\n\n negotiateDimension(child);\n }\n\n if (preferred) {\n preferred.boundBox()[alteredDim] += cumultiveExtraSpaceAmt;\n preferred.boundBox()[nonAlteredDim] = preferred.parent().boundBox()[nonAlteredDim];\n negotiateDimension(preferred);\n }\n}\n\nexport function computePosition (node) {\n node.children().forEach((child, i, children) => {\n const boundBox = determineBoundBox(child.boundBox(), i, children, child);\n child.boundBox(boundBox);\n computePosition(child);\n });\n}\n\nexport function allocateBoundingBox (node) {\n const totalWeight = node.children()\n .map(child => child.model().ratioWeight())\n .reduce((carry, val) => carry + val, 0);\n\n node.children().forEach((child, i, children) => {\n const lastSibling = children[i - 1];\n const ratio = child.model().ratioWeight() / totalWeight;\n\n if (child.parentCut() === 'h') {\n child.boundBox({\n top: i ? lastSibling.boundBox().top + lastSibling.boundBox().height : 0,\n left: child.parent().boundBox().left,\n height: child.parent().boundBox().height * ratio,\n width: child.parent().boundBox().width\n });\n } else {\n child.boundBox({\n top: child.parent().boundBox().top,\n left: i ? lastSibling.boundBox().left + lastSibling.boundBox().width : 0,\n height: child.parent().boundBox().height,\n width: child.parent().boundBox().width * ratio\n });\n }\n allocateBoundingBox(child);\n });\n}\n\n","import { getNodeId } from '../helper';\nimport { LayoutComponent } from '../../layout-component';\n\nclass Node {\n constructor (data) {\n this._model = data;\n this._parent = null;\n this._children = [];\n this._parentCut = null;\n this._boundBox = {\n top: null,\n left: null,\n height: null,\n width: null\n };\n\n this._id = this._model.host() instanceof LayoutComponent && this._model.host().renderAt() ?\n this._model.host().renderAt() :\n getNodeId();\n }\n\n addChildren (entries) {\n this._children.push(...entries);\n entries.forEach((e) => { e.parent(this); });\n }\n\n isRoot () {\n return this._parent === null;\n }\n\n isLeaf () {\n return !this._children.length;\n }\n\n getCutType () {\n return this._model.cut();\n }\n\n isPreferred () {\n return !!this._model.preferred();\n }\n\n children (children) {\n if (children) {\n this._children = children;\n }\n return this._children;\n }\n\n parent (parent) {\n if (parent) {\n this._parent = parent;\n }\n return this._parent;\n }\n\n parentCut (parentCut) {\n if (parentCut) {\n this._parentCut = parentCut;\n }\n return this._parentCut;\n }\n\n id (id) {\n if (id) {\n this._id = id;\n }\n return this._id;\n }\n\n model (model) {\n if (model) {\n this._model = model;\n }\n return this._model;\n }\n\n boundBox (bound) {\n if (bound) {\n this._boundBox = {\n top: bound.top,\n left: bound.left,\n height: bound.height,\n width: bound.width\n };\n }\n return this._boundBox;\n }\n /**\n * function to search a node and update it with the config provided.\n * @param {Object} nodeconfig\n */\n updateNode (nodeconfig) {\n if (this._id === nodeconfig._id) {\n this._model.cut(nodeconfig.cut);\n this._model.ratioWeight(nodeconfig.ratioWeight);\n } else {\n this._children.forEach((node) => {\n if (node._id === nodeconfig._id) {\n node.model.cut(nodeconfig.cut);\n node.model.ratioWeight(nodeconfig.ratioWeight);\n return;\n }\n this.searchNode(node, nodeconfig);\n });\n }\n }\n\n // Recursive function to search a node\n searchNode (node, nodeconfig) {\n node.children().forEach((childNode) => {\n if (childNode.id() === nodeconfig._id) {\n childNode.model().cut(nodeconfig.cut);\n childNode.model().ratioWeight(nodeconfig.ratioWeight);\n } else {\n this.searchNode(childNode, nodeconfig);\n }\n });\n }\n\n /**\n * function to delete a node from tree Structure.\n * @param {String} nodeId - node Id of the Node\n */\n delete (nodeId) {\n this._children.forEach((node) => {\n if (node.id() === nodeId) {\n const index = this._children.indexOf(node);\n this._model.lanes().splice(index, 1);\n }\n this.deleteSearchNode(node, nodeId);\n });\n }\n\n // Recursive function to search a node\n deleteSearchNode (node, nodeId) {\n node.children().forEach((childNode) => {\n if (childNode.id() === nodeId) {\n const index = node.children().indexOf(childNode);\n node.model().lanes().splice(index, 1);\n } else {\n this.deleteSearchNode(childNode, nodeId);\n }\n });\n }\n}\n\nexport default Node;\n","import Node from '../tree';\nimport {\n allocateBoundingBox,\n negotiateDimension,\n computePosition\n} from '../helper';\n\nexport default class LayoutModel {\n constructor (measurements, config) {\n this._measurements = measurements;\n this._config = config;\n this._root = this.createTree(this._config, null);\n this.setBoundBox();\n }\n\n createTree (config, parent) {\n const node = new Node(config);\n if (parent) {\n node.parentCut(parent.getCutType());\n parent.addChildren([node]);\n } else {\n this._root = node;\n }\n for (const lane of config.lanes()) {\n this.createTree(lane, node);\n }\n\n return this._root;\n }\n\n setBoundBox () {\n this._root.boundBox({\n top: 0,\n left: 0,\n width: this._measurements.width,\n height: this._measurements.height\n });\n allocateBoundingBox(this._root);\n }\n\n setHostPosition (node) {\n node.children().forEach((child) => {\n LayoutModel.setHostSpatialConfig(child);\n this.setHostPosition(child);\n });\n }\n\n static setHostSpatialConfig (node) {\n const bb = node.boundBox();\n const host = node.model().host();\n if (host && host.setSpatialConfig) {\n const conf = {\n x: bb.left,\n y: bb.top,\n width: bb.width,\n height: bb.height,\n renderAt: node.id()\n };\n host.setSpatialConfig(conf);\n }\n }\n\n negotiate () {\n negotiateDimension(this._root);\n computePosition(this._root);\n return this;\n }\n\n broadcast () {\n this.setHostPosition(this._root);\n return this;\n }\n\n tree () {\n return this._root;\n }\n}\n","/* eslint no-undef: \"off\" */\n/* eslint default-case: \"off\" */\nexport class Utils {\n static isDOMElement (element) {\n return element instanceof Element;\n }\n\n static getID (element) {\n return element.id;\n }\n\n static getElement (id) {\n return document.getElementById(id);\n }\n\n static findContainer (data) {\n return data.filter(coordinate => coordinate.parent == null)[0];\n }\n /**\n * static method to remove the div\n * @param {} divId - div ID to be removed.\n */\n static removeDiv (divId) {\n if (document.getElementById(divId) !== null) { document.getElementById(divId).remove(); }\n }\n}\n","import { DEFAULT_CLASS_NAME } from '../constants/defaults';\nimport { LayoutComponent } from '../layout-component';\n\nexport default class DataPoint {\n constructor (node) {\n this._node = node;\n this._className = node.model().host() instanceof LayoutComponent ?\n node.model().host().className() : DEFAULT_CLASS_NAME;\n }\n\n node () {\n return this._node;\n }\n\n hasHost () {\n return this._node.model().host() instanceof LayoutComponent;\n }\n\n className () {\n return this._className || DEFAULT_CLASS_NAME;\n }\n}\n","import { getnodePoints } from './helper';\n\nexport class DataParser {\n constructor (data) {\n this._data = data;\n }\n\n defaultDataPointLogic () {\n const nodepoints = [];\n getnodePoints(this._data, nodepoints);\n return nodepoints;\n }\n\n}\n","import DataPoint from './data-point';\n\nexport const getnodePoints = (node, nodepoints) => {\n const datapoint = new DataPoint(node);\n nodepoints.push(datapoint);\n node.children().forEach((child) => {\n getnodePoints(child, nodepoints);\n });\n};\n","import { DataParser } from './data-parser';\n\nexport class HTMLDataAdapter extends DataParser {\n getCoordinates () {\n return super.defaultDataPointLogic();\n }\n}\n","export class Renderer {\n\n initRenderer (node, tree) {\n node.__logicalTree = tree;\n }\n}\n","import { HTMLDataAdapter } from '../data-adapters/html-data';\nimport { Utils } from '../utils';\nimport { Renderer } from './renderer';\n\nexport class HTMLRenderer extends Renderer {\n constructor (data) {\n super();\n this._data = data;\n this._coordinates = new HTMLDataAdapter(this._data).getCoordinates();\n }\n\n createhtml (mount, className) {\n const mainDiv = mount;\n super.initRenderer(mainDiv, this._data); // Initialise node with layout id\n this.parentDiv = this.createAndCustomiseParent(className);\n this._coordinates.forEach((node) => {\n if (node.hasHost()) {\n const host = node.node();\n this.parentDiv.appendChild(this.createAndPositionDiv({ ...host.boundBox(),\n id: host.id(),\n className: node.className() }));\n }\n });\n mainDiv.appendChild(this.parentDiv);\n }\n\n createAndPositionDiv (config) {\n const { top, left, height, width, className, id } = config;\n const existingDiv = document.getElementById(id);\n const div = existingDiv || document.createElement('div');\n div.style.position = 'absolute';\n div.style.left = `${left}px`;\n div.style.top = `${top}px`;\n div.style.height = `${height}px`;\n div.style.width = `${width}px`;\n div.id = id;\n div.className = className;\n return div;\n }\n\n createAndCustomiseParent (className) {\n const container = Utils.findContainer(this._coordinates);\n const host = container.node();\n const parentDiv = this.createAndPositionDiv({ ...host.boundBox(),\n id: host.id(),\n className: container.className() });\n parentDiv.className = className;\n parentDiv.style.position = 'relative';\n return parentDiv;\n }\n\n coordinates () {\n return this._coordinates;\n }\n}\n","import { HTMLRenderer } from '../renderers/html-renderer';\nimport { LayoutComponent } from '../layout-component';\n\nexport const getChildNode = (context, config) =>\n context.renderer().createAndPositionDiv(config);\n\nexport const findNode = (context, nodeID) =>\n context.renderer().coordinates().find(point => point.node().id() === nodeID);\n\nexport const renderHTML = (context) => {\n context.renderer(new HTMLRenderer(context.data()));\n context.renderer().createhtml(context.mount(), context.className());\n};\n\nexport const drawLayout = (context) => {\n switch (context.renderer()) {\n case 'html' :\n renderHTML(context);\n break;\n default:\n renderHTML(context);\n }\n};\n\nexport const drawComponent = (componentData) => {\n componentData.children().forEach((node) => {\n const host = node.model().host();\n if (host instanceof LayoutComponent) {\n host.draw();\n }\n drawComponent(node);\n });\n};\n\nexport const removeElement = (elemID) => {\n document.removeElement(document.getElementById(elemID));\n};\n\nexport const resolveAligment = (context, componentData) => {\n componentData.children().forEach((component) => {\n const host = component.model().host();\n if (host instanceof LayoutComponent && host.alignWith()) {\n let newNodeConfig = {};\n const point = findNode(context, component.id()).node();\n const node = point.boundBox();\n const refNode = findNode(context, context.componentMap().get(host.alignWith()).renderAt())\n .node()\n .boundBox();\n switch (host.alignment()) {\n case 'left':\n newNodeConfig = {\n top: node.top,\n left: refNode.left,\n height: node.height,\n width: Math.abs(node.width - Math.abs(refNode.left - node.left))\n };\n break;\n\n case 'right':\n newNodeConfig = {\n top: node.top,\n left: node.left,\n height: node.height,\n width: Math.abs(node.width - Math.abs(node.left + node.width - (refNode.left + refNode.width)))\n };\n break;\n\n case 'top':\n newNodeConfig = {\n top: refNode.top,\n left: node.left,\n height: Math.abs(node.height - Math.abs(refNode.top - node.top)),\n width: node.width\n };\n break;\n\n case 'bottom':\n newNodeConfig = {\n top: node.top,\n left: node.left,\n height: Math.abs(node.top - refNode.top + refNode.height),\n width: node.width\n };\n break;\n\n case 'h-center':\n newNodeConfig = {\n top: node.top,\n left: refNode.left,\n height: node.height,\n width: refNode.width\n };\n break;\n\n case 'v-center':\n newNodeConfig = {\n top: refNode.top,\n left: node.left,\n height: refNode.top,\n width: node.width\n };\n break;\n default:\n break;\n }\n // check if model in parent component\n Object.assign(newNodeConfig, { id: point.id(), className: host.className() });\n context.renderer().createAndPositionDiv(newNodeConfig);\n context.componentMap().get(host.name()).setSpatialConfig({\n x: newNodeConfig.left,\n y: newNodeConfig.top,\n height: newNodeConfig.height,\n width: newNodeConfig.width\n\n });\n }\n resolveAligment(context, component);\n });\n};\n","import { Utils } from '../utils';\nimport { drawLayout, resolveAligment, drawComponent } from './helper';\n\nexport class DrawingManager {\n constructor (data, renderer, container) {\n this._data = data.tree;\n this._componentMap = data.componentMap;\n this._layoutClassName = data.layoutClassName;\n this._renderer = renderer;\n this._mount = Utils.isDOMElement(container) ? container : Utils.getElement(container);\n }\n\n draw () {\n drawLayout(this);\n resolveAligment(this, this._data);\n drawComponent(this._data);\n return this;\n }\n\n data (data) {\n if (data) {\n this._data = data;\n }\n return this._data;\n }\n\n componentMap (param) {\n if (param) {\n this._componentMap = param;\n }\n return this._componentMap;\n }\n\n className (param) {\n if (param) {\n this._layoutClassName = param;\n }\n return this._layoutClassName;\n }\n\n renderer (param) {\n if (param) {\n this._renderer = param;\n }\n return this._renderer;\n }\n\n mount (param) {\n if (param) {\n this._mount = param;\n }\n return this._mount;\n }\n}\n","import DefinitionModel from './definitionModel';\nimport { prepareTargetComponentMap, getComponent, placeComponent, placeGridComponent } from '../helper';\n\nexport default class DefinitionManager {\n constructor (componentMap, sequence, totalHeight, totalWidth) {\n this._componentMap = componentMap;\n this._prioritySequence = sequence;\n this._totalHeight = totalHeight;\n this._totalWidth = totalWidth;\n this._targetComponentMap = null;\n }\n\n // create the config model\n generateConfigModel () {\n prepareTargetComponentMap(this);\n const canvasComponent = this._targetComponentMap.get('canvas');\n const definitionModel = new DefinitionModel({});\n let tempDefModel = definitionModel;\n definitionModel.remainingHeight(this._totalHeight);\n definitionModel.remainingWidth(this._totalWidth);\n\n let componentRef = null;\n\n this._prioritySequence.forEach((name) => {\n componentRef = getComponent(canvasComponent, name);\n if (name !== 'grid') {\n tempDefModel = placeComponent(tempDefModel, componentRef).second;\n } else {\n tempDefModel = placeGridComponent(tempDefModel, componentRef.component);\n }\n });\n return definitionModel;\n }\n\n componentMap (param) {\n if (param) {\n this._componentMap = param;\n }\n return this._componentMap;\n }\n\n targetComponentMap (param) {\n if (param) {\n this._targetComponentMap = param;\n }\n return this._targetComponentMap;\n }\n}\n","import { sanitizeConfig } from './helper';\n\nexport class LayoutDef {\n constructor () {\n this._componentMap = new Map();\n this._layoutDefinition = null;\n }\n\n addComponent (component) {\n this._componentMap.set(component.name(), component);\n }\n\n layoutDefinition (def) {\n if (def) {\n this._layoutDefinition = def;\n }\n return this._layoutDefinition;\n }\n\n addMultipleComponent (componentArray) {\n componentArray.forEach((comp) => {\n this.addComponent(comp);\n });\n }\n\n sanitizedDefinition () {\n sanitizeConfig(this, this._layoutDefinition);\n return this.layoutDefinition();\n }\n\n componentMap () {\n return this._componentMap;\n }\n resetComponentMap () {\n this._componentMap.clear();\n }\n}\n","import DefinitionManager from '../layout-definition/definition-manager';\n\nexport function sanitizeConfig (context, hostObj) {\n const hostID = hostObj.host();\n if (hostObj.lanes() && hostObj.lanes().length) {\n hostObj.lanes().forEach(childHost => sanitizeConfig(context, childHost));\n }\n if (hostID != null && typeof (hostID) === 'string') {\n if (context.componentMap().get(hostID) !== undefined) {\n hostObj.host(context.componentMap().get(hostID));\n }\n }\n}\n\nexport function calLayOutDef (context) {\n const { height, width } = context.dimension();\n const defManager = new DefinitionManager(context.layoutDef().componentMap(),\n context.prioritySequence(),\n height,\n width);\n const genLayoutdef = defManager.generateConfigModel();\n return genLayoutdef;\n}\n","import {\n LayoutModel\n} from '../layout-definition';\n\nimport {\n DEFAULT_WIDTH,\n DEFAULT_HEIGHT\n} from '../constants/defaults';\n\nimport { DrawingManager } from '../drawing-manager';\nimport { Utils } from '../utils';\nimport { LayoutDef } from './layout-def';\nimport { calLayOutDef } from './helper';\n\nexport default class LayoutManager {\n constructor (conf) {\n this._renderAt = conf.renderAt;\n this._layoutClassName = conf.className;\n this._dimension = {\n width: conf.width || DEFAULT_WIDTH,\n height: conf.height || DEFAULT_HEIGHT\n };\n\n this._skeletonType = conf.skeletonType || 'html';\n this._layoutDefinition = null;\n this._layoutDef = new LayoutDef();\n this._drawingManager = null;\n this._prioritySequence = [];\n this.tree = null;\n this._rootNodeID = null;\n }\n\n layoutDef (param) {\n if (param) {\n this._layoutDef = param;\n }\n return this._layoutDef;\n }\n\n prioritySequence (param) {\n if (param) {\n this._prioritySequence = param;\n }\n return this._prioritySequence;\n }\n\n dimension (param) {\n if (param) {\n Object.assign(this._dimension, param);\n }\n return this._dimension;\n }\n\n addComponent (component) {\n this._layoutDef.addComponent(component);\n }\n\n addMultipleComponent (componentArray) {\n this._layoutDef.addMultipleComponent(componentArray);\n }\n\n resetNode (node) {\n if (this.con) {\n this.con.resetNode(node);\n }\n }\n\n /**\n * function to update the node and rerender the layout.\n * @param {} config - node configuration to change.\n */\n updateNode (config) {\n this.tree.updateNode(config);\n this._layoutDefinition = this.tree.model;\n this.compute();\n }\n\n compute () {\n //----\n if (Utils.isDOMElement(this._renderAt)) {\n this._renderAt._layout = this;\n } else {\n document.getElementById(this._renderAt)._layout = this;\n }\n //-----\n this._layoutDefinition = calLayOutDef(this);\n this._layoutDef.layoutDefinition(this._layoutDefinition);\n this._layoutDefinition = this._layoutDef.sanitizedDefinition();\n this._layout = new LayoutModel({\n width: this._dimension.width,\n height: this._dimension.height\n },\n this._layoutDefinition);\n this.tree = this._layout.negotiate().tree();\n this._layout.broadcast();\n this._drawingManager = new DrawingManager({\n tree: this.tree,\n componentMap: this._layoutDef.componentMap(),\n layoutClassName: this._layoutClassName\n }, this._skeletonType, this._renderAt);\n\n if (this._rootNodeID) {\n this.tree.id(this._rootNodeID);\n } else {\n this._rootNodeID = this.tree.id();\n }\n // this will draw all the components by calling their draw method\n this._drawingManager.draw();\n }\n\n getRootNodeId () {\n return this._rootNodeID;\n }\n\n /**\n * This function takes the LayoutComponents and Register them in component store\n * @param {Array} layoutComponents\n */\n registerComponents (layoutComponents) {\n this._prioritySequence.length = 0;\n this._layoutDef.resetComponentMap();\n layoutComponents.forEach((container) => {\n if (container) {\n this._prioritySequence.push(container.name());\n this.addComponent(container);\n if (container.name() === 'grid') {\n container.component.forEach((componentArr) => {\n componentArr.forEach((compo) => {\n this.addComponent(compo);\n });\n });\n }\n }\n });\n return this;\n }\n\n getComponent (componentName) {\n return this._layoutDef.componentMap().get(componentName);\n }\n\n renderAt (mount) {\n if (mount) {\n this._renderAt = mount;\n }\n return this._renderAt;\n }\n}\n","import { isEqual, STATE_NAMESPACES, selectElement, getValueParser } from 'muze-utils';\nimport { VisualGroup } from '@chartshq/visual-group';\nimport { ROWS, COLUMNS, COLOR, SHAPE, SIZE, DETAIL, DATA, CONFIG }\n from '../constants';\nimport { canvasOptions } from './local-options';\nimport { LayoutManager } from '../../../layout/src/tree-layout';\n\n/**\n * Instantiate high level components. Canvas knows what all high level component it has.\n * @nice-to-have dynamic high level components.\n * - Is it even required ?\n * - Reactive to source (canvas) streaming ?\n * @param {*} context Canvas instance\n * @return {Object.} Arrays of Title, visualGroup, Legend\n */\nexport const initCanvas = (context) => {\n const reg = context._registry.components;\n\n return [new reg.VisualGroup(context._registry, Object.assign({\n throwback: context._throwback\n }, context.dependencies()))];\n};\n\nexport const fixScrollBarConfig = (config) => {\n config.scrollBar.thickness = Math.min(50, Math.max(10, config.scrollBar.thickness));\n return config;\n};\n\nexport const setLayoutInfForUnits = (context) => {\n const layoutManager = context._layoutManager;\n const boundBox = layoutManager.getComponent('grid').getBoundBox();\n const valueMatrix = context.composition().visualGroup.matrixInstance().value;\n const parentContainer = selectElement(`#${layoutManager.getRootNodeId()}`).node();\n valueMatrix.each((cell) => {\n cell.valueOf().parentContainerInf({\n el: parentContainer,\n dimensions: boundBox\n });\n });\n};\n\n/**\n *\n *\n * @memberof Canvas\n */\nexport const dispatchProps = (context) => {\n const lifeCycleManager = context.dependencies().lifeCycleManager;\n lifeCycleManager.notify({ client: context, action: 'beforeupdate' });\n const visualGroup = context.composition().visualGroup;\n\n const allOptions = context._allOptions;\n for (const key in allOptions) {\n const value = context[key]();\n if (value !== null) {\n visualGroup[key] && visualGroup[key](value);\n }\n }\n const { invalidValues } = context.config();\n\n visualGroup.valueParser(getValueParser(invalidValues));\n visualGroup.createMatrices();\n context._cachedProps = {};\n lifeCycleManager.notify({ client: context, action: 'initialized' });\n lifeCycleManager.notify({ client: context, action: 'updated' });\n};\n\nconst equalityChecker = (props, params) => {\n let checker = () => false;\n return !props.every((option, i) => {\n switch (option) {\n case ROWS:\n case COLUMNS:\n case DETAIL:\n checker = isEqual('Array');\n break;\n\n case SHAPE:\n case SIZE:\n case COLOR:\n case DATA:\n case CONFIG:\n checker = isEqual('Object');\n break;\n default:\n checker = () => true;\n break;\n }\n const oldVal = params[i][0];\n const newVal = params[i][1];\n\n return checker(oldVal, newVal);\n });\n};\n\nconst updateChecker = (props, params) => props.every((option, i) => {\n const val = params[i][1];\n switch (option) {\n case ROWS:\n case COLUMNS:\n return val !== null;\n\n case DATA:\n return val && !val.isEmpty();\n\n default:\n return true;\n\n }\n});\n\nexport const notifyAnimationEnd = (context) => {\n const centerMatrix = context.layout().viewInfo().viewMatricesInfo.matrices.center[1] || [];\n const promises = [];\n centerMatrix.forEach((cellArr) => {\n cellArr.forEach((cell) => {\n promises.push(cell.valueOf().done());\n });\n });\n const lifeCycleManager = context.lifeCycle();\n if (promises.length) {\n Promise.all(promises).then(() => {\n // Update life cycle\n lifeCycleManager.notify({ client: context, action: 'drawn' });\n const animDonePromises = [];\n\n centerMatrix.forEach((cellArr) => {\n cellArr.forEach((cell) => {\n cell.valueOf().layers().forEach((layer) => {\n animDonePromises.push(layer.animationDone());\n });\n });\n });\n\n [context.xAxes(), context.yAxes()].forEach((axisArr) => {\n axisArr = axisArr || [];\n axisArr.forEach((axes) => {\n axes.forEach((axisInst) => {\n animDonePromises.push(axisInst.animationDone());\n });\n });\n });\n\n Promise.all(animDonePromises).then(() => {\n lifeCycleManager.notify({ client: context, action: 'animationend' });\n });\n });\n } else {\n lifeCycleManager.notify({ client: context, action: 'animationend' });\n }\n};\n\nexport const setupChangeListener = (context) => {\n const store = context._store;\n\n const allOptions = Object.keys(context._allOptions);\n const props = [...allOptions, ...Object.keys(canvasOptions)];\n const nameSpaceProps = [...allOptions, ...Object.keys(canvasOptions)].map(prop =>\n `${STATE_NAMESPACES.CANVAS_LOCAL_NAMESPACE}.${prop}`);\n store.registerChangeListener(nameSpaceProps, (...params) => {\n let updateProps = equalityChecker(props, params);\n updateProps = updateChecker(props, params);\n\n // inform attached board to rerender\n if (updateProps && context.mount()) {\n dispatchProps(context);\n context.render();\n }\n notifyAnimationEnd(context);\n }, true);\n};\n\nexport const applyInteractionPolicy = (firebolt) => {\n const canvas = firebolt.context;\n const visualGroup = canvas.composition().visualGroup;\n if (visualGroup) {\n const valueMatrix = visualGroup.matrixInstance().value;\n const interactionPolicy = firebolt._interactionPolicy;\n interactionPolicy(valueMatrix, firebolt);\n const crossInteractionPolicy = firebolt._crossInteractionPolicy;\n const behaviours = crossInteractionPolicy.behaviours;\n const sideEffects = crossInteractionPolicy.sideEffects;\n valueMatrix.each((cell) => {\n const unitFireBolt = cell.valueOf().firebolt();\n for (const key in behaviours) {\n unitFireBolt.changeBehaviourStateOnPropagation(key, behaviours[key]);\n }\n for (const key in sideEffects) {\n unitFireBolt.changeSideEffectStateOnPropagation(key, sideEffects[key]);\n }\n });\n }\n};\n\n/**\n * Sets the rotation for all x axes if any axis has the rotation config set in the\n * entire view\n *\n * @param {Array} columns Column cells that contain the axes cells\n */\nexport const setLabelRotationForAxes = (context) => {\n let rotation = 0;\n\n const xAxes = context.xAxes() || [];\n\n (() => {\n for (let i = 0; i < xAxes.length; i++) {\n for (let j = 0; j < xAxes[i].length; j++) {\n const rotationVal = xAxes[i][j].renderConfig().labels.rotation;\n if (rotationVal && rotationVal !== 0) {\n rotation = rotationVal;\n return;\n }\n }\n }\n })();\n\n if (rotation) {\n xAxes.forEach((axes) => {\n axes.forEach((axis) => {\n axis.renderConfig({ labels: { rotation } });\n axis.smartTicks(axis.setTickConfig());\n });\n });\n }\n};\n\nexport const createGroupState = (context) => {\n const [globalState, localState] = VisualGroup.getState();\n const store = context._store;\n store.append('app.group', globalState);\n store.append('local.group', localState);\n};\n\nexport const removeChild = (mount) => {\n while (mount.firstChild) {\n mount.removeChild(mount.firstChild);\n }\n};\n\nexport const createLayoutManager = () => {\n const layoutManager = new LayoutManager({\n className: 'muze-group-container'\n });\n return layoutManager;\n};\n","/**\n * This is the global options semantics based on which setters getters are created and reactivity is initiated.\n * Format\n * PROPERTRY_NAME: {\n * value: // default value of the property,\n * meta: {\n * typeCheck: // The setter value will be checked using this. If the value is function then the setter value\n * // is passed as args.\n * typeExpected: // The output of typecheck action will be tested against this. Truthy value will set the\n * // value to the setter\n * sanitizaiton: // Need for sanitization before type is checked\n * }\n * }\n * @module GlobalOptions\n */\n\nimport { intSanitizer, mergeRecursive, DataModel } from 'muze-utils';\nimport { fixScrollBarConfig } from './canvas/helper';\nimport { DEFAULT_CONFIG } from './defaults';\n\nexport default {\n data: {\n value: null,\n meta: {\n typeCheck: d => d instanceof DataModel\n }\n },\n width: {\n value: 0,\n meta: {\n sanitization: intSanitizer,\n typeCheck: Number.isInteger\n }\n },\n height: {\n value: 0,\n meta: {\n sanitization: intSanitizer,\n typeCheck: Number.isInteger\n }\n },\n minUnitWidth: {\n value: 50,\n meta: {\n sanitization: intSanitizer,\n typeCheck: Number.isInteger\n }\n },\n minUnitHeight: {\n value: 50,\n meta: {\n sanitization: intSanitizer,\n typeCheck: Number.isInteger\n }\n },\n config: {\n value: null,\n meta: {\n typeCheck: 'constructor',\n typeExpected: 'Object',\n sanitization: (config, oldConfig) => {\n // Reset the configuration when null is passed\n const oldConf = mergeRecursive({}, config === null ? {} : oldConfig);\n const defConfig = mergeRecursive(oldConf, DEFAULT_CONFIG);\n let newConf = mergeRecursive(defConfig, config);\n newConf = fixScrollBarConfig(newConf);\n\n return newConf;\n }\n\n }\n }\n};\n","/**\n * This file exports constants that will be used to\n * create the state store of the table layout.\n */\n/**\n * The index of top, bottom and center in the matrix\n */\nexport const VIEW_INDEX = {\n top: 0,\n center: 1,\n bottom: 2\n};\n\nexport const ROW_MATRIX_INDEX = {\n 0: 'top',\n 1: 'center',\n 2: 'bottom'\n};\n\nexport const COLUMN_MATRIX_INDEX = {\n 0: 'left',\n 1: 'middle',\n 2: 'right'\n};\n\n/**\n * The width of the grid suppied by the user.\n */\nexport const GRID_WIDTH = 'width';\n\n/**\n * The height of the grid supplied by the user.\n */\nexport const GRID_HEIGHT = 'height';\n\n/**\n * The border for the grid\n */\nexport const BORDER = 'border';\n\n /**\n * The index of the first visible row in view matrix.\n */\nexport const ROW_POINTER = 'rowPointer';\n\n/**\n * The index of the first visible column in the view matrix.\n */\nexport const COLUMN_POINTER = 'columnPointer';\n\n/**\n * Flag to specify whether row sizes should be equal.\n */\nexport const ROW_SIZE_IS_EQUAL = 'isRowSizeEqual';\n\n/**\n * Flag to specify whether column sizes are equal.\n */\nexport const COLUMN_SIZE_IS_EQUAL = 'isColumnSizeEqual';\n\n/**\n * Field to store an array an of the widths of visible columns.\n * @computed\n */\nexport const COLUMN_WIDTHS = 'visibleColumnWidths';\n\n/**\n * Field to store an array of heights of visible rows.\n * @computed\n */\nexport const ROW_HEIGHTS = 'visibleRowHeights';\n\n/**\n * Field to store the width of the left matrix.\n * @computed\n */\nexport const LEFT_MATRIX_WIDTH = 'leftMatrixWidth';\n\n/**\n * Field to store the width of the right matrix.\n * @computed\n */\nexport const RIGHT_MATRIX_WIDTH = 'rightMatrixWidth';\n\n/**\n * Field to store the height of the top matrix.\n * @computed\n */\nexport const TOP_MATRIX_HEIGHT = 'topMatrixHeight';\n\n/**\n * Field to store the height of the bottom matrix.\n * @computed\n */\nexport const BOTTOM_MATRIX_HEIGHT = 'bottomMatrixHeight';\n\n/**\n * The dom element to render the layout inside.\n */\nexport const MOUNT_POINT = 'mount';\n\n/**\n * The id attribute of the left table element.\n */\nexport const LEFT_TABLE_ID = 'grid-left';\n\n/**\n * The id attribute of the right table element.\n */\nexport const RIGHT_TABLE_ID = 'grid-right';\n\n/**\n * The id attribute of the top table.\n */\nexport const TOP_TABLE_ID = 'grid-top';\n\n/**\n * The id attribute of the bottom table.\n */\nexport const BOTTOM_TABLE_ID = 'grid-bottom';\n\n/**\n * The id attribute of the center table.\n */\nexport const CENTER_TABLE_ID = 'grid-center';\n\n/**\n * The id attribute of the top div.\n */\nexport const TOP_DIV_ID = 'muze-div-top';\n\n/**\n * The id attribute of the bottom div.\n */\nexport const BOTTOM_DIV_ID = 'muze-div-bottom';\n\n/**\n * The id attribute of the center div.\n */\nexport const CENTER_DIV_ID = 'muze-div-center';\n\n/**\n * Field that indicates if the row configuration has changed\n */\nexport const HAVE_ROWS_CHANGED = 'haveRowsChanged';\n\n/**\n * Field that indicates if the column configuration has changed\n */\nexport const HAVE_COLUMNS_CHANGED = 'haveColumnsChanged';\n\n/**\n * Field that indicates if the values configuration for the center matrix has changed\n */\nexport const HAVE_VALUES_CHANGED = 'haveValuesChanged';\n\n/**\n * Field that indicates the width of row matrix\n */\nexport const ROW_MATRIX_WIDTH = 'rowMatrixWidth';\n\n/**\n * Field that indicates the height of row matrix\n */\nexport const COLUMN_MATRIX_HEIGHT = 'columnMatrixHeight';\n\n/**\n * Field that indicates the unit width of layout\n */\nexport const UNIT_WIDTH = 'unitWidth';\n\n/**\n * Field that indicates the unit height of layout\n */\nexport const UNIT_HEIGHT = 'unitHeight';\n\n/**\n * Field that indicates the style object\n */\nexport const STYLE = 'style';\n\n/**\n * Field that indicates the color configuration\n */\nexport const COLOR = 'color';\n\n/**\n * Field that indicates width\n */\nexport const WIDTH = 'width';\n\n/**\n * Field that indicates collpase property for border\n */\nexport const COLLAPSE = 'collapse';\n\n/**\n * Field that indicates spacing property for border\n */\nexport const SPACING = 'spacing';\n\n/**\n * Field that indicates spacing property for border\n */\nexport const DISTRIBUTION = 'distribution';\n\n/**\n * Field that indicates spacing property for border\n */\nexport const GUTTERSPACE = 'gutterSpace';\n\n/**\n * Field that indicates spacing property for border\n */\nexport const BREAK_PAGE = 'breakPage';\n\n/**\n * Field that indicates spacing property for border\n */\nexport const SHOW_ROW_BORDERS = 'showRowBorders';\n\n/**\n * Field that indicates spacing property for border\n */\nexport const SHOW_COL_BORDERS = 'showColBorders';\n\n/**\n * Field that indicates spacing property for border\n */\nexport const SHOW_VALUE_BORDERS = 'showValueBorders';\n\nexport const HEIGHT = 'height';\nexport const COLUMN = 'column';\nexport const ROW = 'row';\nexport const TOP = 'top';\nexport const LEFT = 'left';\nexport const RIGHT = 'right';\nexport const BOTTOM = 'bottom';\nexport const CENTER = 'center';\nexport const CLICK = 'click';\nexport const ROW_LEFT = 'rowLeft';\nexport const ROW_RIGHT = 'rowRight';\nexport const COLUMN_BOTTOM = 'colBottom';\nexport const COLUMN_TOP = 'colTop';\nexport const AUTO = 'auto';\nexport const ROW_SPAN = 'rowSpan';\nexport const COL_SPAN = 'colSpan';\nexport const ROW_ROOT = 'rowRoot';\nexport const COLUMN_ROOT = 'columnRoot';\nexport const PRIMARY = 'primary';\nexport const SECONDARY = 'secondary';\nexport const VERTICAL = 'vertical';\nexport const HORIZONTAL = 'horizontal';\n\nexport const BLANK_BORDERS = 'rgba(0,0,0,0)';\n\nexport const PAGINATION = 'pagination';\nexport const BUFFER = 'buffer';\nexport const HOLISTIC = 'holistic';\nexport const SCROLL = 'scroll';\nexport const MIDDLE = 'middle';\nexport const NO_BORDERS = null;\n\nexport const MAX_WIDTH_AVAIL_FOR_COL_MATRIX = 'maxWidthAvailableForColumnMatrix';\nexport const COLUMN_MATRIX = 'columnMatrix';\nexport const MAX_HEIGHT_AVAIL_FOR_ROW_MATRIX = 'maxHeightAvailableForRowMatrix';\nexport const ROW_MATRIX = 'rowMatrix';\n","import { sanitizeIP, mergeRecursive } from 'muze-utils';\nimport { TOP, CENTER, BOTTOM } from '../enums/constants';\n\n/*\n * This is the abstract implementation of the root layout. This takes care of common work which all the layouts\n * has to handle. The common work includes sanitizaion of inputs, update, rerender, dispose etc. This class can't be\n * used directly (as ofcourse this is an abstract implementaiton), the class which is implementing it has to implement\n * the necessary methods and gives its on visual.\n */\n\n/**\n * This class is used to create a generic layout. It can be extended to create layouts\n * of different types\n * @class GenericLayout\n */\nexport default class GenericLayout {\n\n /**\n * Creates an instance of TableLayout.\n * @param {HTMLElement} mountPoint DOM element/d3 selection where the layout is to be mounted\n * @param {Object} measurement The dimensions of the layout\n * @param {Object} config configuration to be given for the layout\n * @param {Object} dependencies external dependencies.\n *\n * @memberof GenericLayout\n *\n */\n constructor (mountPoint, measurement, config, dependencies) {\n this._config = {};\n this._measurement = {};\n this._matrices = [];\n // External dependencies to be included for the layout. This includes the ext global dependencies like\n // smartlabel which has one single implementation of throughout the page or per isntance\n this._dependencies = dependencies;\n\n this.measurement(measurement);\n this.mountPoint(mountPoint);\n this.config(config);\n }\n\n /**\n * Returns an object which is used to recreate the layout.\n * @return {Object} the serialized components\n */\n serialize () {\n return {\n measurement: this.measurement(),\n config: this.config(),\n matrices: this.matrices()\n };\n }\n\n /**\n * Sets/Gets the config for the layout\n * @param {Object} config configuration for the layout\n * @return {Layout|Object} Gets the Config/ Returns this instance when set\n */\n config (config) {\n if (config) {\n this._config = mergeRecursive(this._config || {}, config);\n this._config.border.width = Math.max(0, this._config.border.width);\n return this;\n }\n return this._config;\n }\n\n /**\n * Sets/Gets the measurement for the layout\n * @param {Object} measurement measurement for the layout\n * @return {Layout|Object} Gets the measurement/ Returns this instance when set\n */\n measurement (measurement) {\n if (measurement) {\n this._measurement = mergeRecursive(this._measurement || {}, measurement);\n\n return this;\n }\n return this._measurement;\n }\n\n /**\n * Sets/Gets the matrices for the layout\n * @param {Object} matrices matrices for the layout\n * @return {Layout|Object} Gets the matrices/ Returns this instance when set\n */\n matrices (matrices) {\n if (matrices) {\n this._matrices = sanitizeIP.typeObj([TOP, CENTER, BOTTOM], matrices);\n\n return this;\n }\n return this._matrices;\n }\n\n /**\n * Sets/Gets the matrix for row\n * @param {Object} matrix matrices for the layout\n * @return {Layout|Object} Gets the matrix/ Returns this instance when set\n */\n rowMatrix (matrix) {\n if (matrix) {\n this._rowMatrix = matrix;\n return this;\n }\n return this._rowMatrix;\n }\n\n /**\n * Sets/Gets the matrix for columns\n * @param {Object} matrix matrices for the layout\n * @return {Layout|Object} Gets the matrix/ Returns this instance when set\n */\n columnMatrix (matrix) {\n if (matrix) {\n this._columnMatrix = matrix;\n return this;\n }\n return this._columnMatrix;\n }\n\n /**\n * Sets/Gets the matrix for value\n * @param {Object} matrix matrices for the layout\n * @return {Layout|Object} Gets the matrix/ Returns this instance when set\n */\n centerMatrix (matrix) {\n if (matrix) {\n this._centerMatrix = matrix;\n return this;\n }\n return this._centerMatrix;\n }\n\n /**\n * Sets/Gets the mountPoint for the layout\n * @param {Object} mountPoint mountPoint for the layout\n * @return {Layout|Object} Gets the mountPoint/ Returns this instance when set\n */\n mountPoint (mountPoint) {\n if (mountPoint) {\n this._mountPoint = mountPoint;\n\n return this;\n }\n return this._mountPoint;\n }\n}\n","import * as FieldNames from '../enums/constants';\n\n/**\n * Default configuration of the layout\n * @return {Object} returns the default configuration\n */\nexport const DEFAULT_CONFIGURATION = {\n [FieldNames.BORDER]: {\n [FieldNames.STYLE]: 'solid',\n [FieldNames.COLOR]: '#d6d6d6',\n [FieldNames.WIDTH]: 2,\n [FieldNames.COLLAPSE]: true,\n [FieldNames.SPACING]: 0\n },\n [FieldNames.PAGINATION]: 'scroll',\n [FieldNames.BUFFER]: 20,\n [FieldNames.GUTTERSPACE]: { rows: [], columns: [] },\n [FieldNames.DISTRIBUTION]: { rows: [], columns: [] },\n [FieldNames.BREAK_PAGE]: { rows: [], columns: [] },\n [FieldNames.ROW_SIZE_IS_EQUAL]: false,\n [FieldNames.COLUMN_SIZE_IS_EQUAL]: false,\n [FieldNames.COLUMN_POINTER]: 0,\n [FieldNames.ROW_POINTER]: 0\n};\n\n/**\n * Default measurements for the layout\n * @return {Object} returns the default measurements\n */\nexport const DEFAULT_MEASUREMENTS = {\n [FieldNames.GRID_WIDTH]: 100,\n [FieldNames.GRID_HEIGHT]: 100,\n [FieldNames.UNIT_WIDTH]: 100,\n [FieldNames.UNIT_HEIGHT]: 100\n};\n\nexport const BLANK_BORDERS = 'rgba(0,0,0,0)';\n","/**\n * This file exports utility functions that are used across the layout module\n */\nimport { Symbols } from 'muze-utils';\nimport { PRIMARY, SECONDARY, HEIGHT, WIDTH } from '../enums/constants';\n\nconst nest = Symbols.nest;\n/**\n *\n *\n * @param {*} isTransposed\n *\n */\nconst getMeasureInfo = (isTransposed) => {\n if (isTransposed) {\n return {\n firstMeasure: HEIGHT,\n secondMeasure: WIDTH\n };\n }\n return {\n firstMeasure: WIDTH,\n secondMeasure: HEIGHT\n };\n};\n\n/**\n *\n *\n * @param {*} i\n * @param {*} page\n *\n */\nconst findInPage = (i, page) => {\n let count = 0;\n for (const x in page) {\n if (i < page[x]) {\n count = x;\n break;\n }\n }\n return count;\n};\n\n/**\n * Creates a single matrix from two matrices\n *\n * @param {Array} matrix Input matrix\n * @return {Array} Joined matrix\n * @memberof VisualMatrix\n */\nexport const combineMatrices = (matrix, config) => {\n const { isTransposed } = config;\n let joinedMatrix = matrix[0].length > 0 ? matrix[0] : matrix[1];\n if (isTransposed) {\n joinedMatrix = matrix[0].length > 0 ? [...matrix[0]] : [];\n joinedMatrix = matrix[1].length > 0 ? [...joinedMatrix, ...matrix[1]] : joinedMatrix;\n } else {\n joinedMatrix = joinedMatrix.map((row, rowIndex) => {\n let rowData = [];\n if (matrix[0].length > 0) {\n rowData = [...matrix[0][rowIndex]];\n }\n if (matrix[1].length > 0) {\n rowData = [...rowData, ...matrix[1][rowIndex]];\n }\n return rowData;\n });\n }\n return joinedMatrix;\n};\n\n/**\n * Creates a hirachical tree from the context\n *\n * @param {Object} context context for creating tree\n * @return {Object} nested tree\n */\nexport const createTree = (context) => {\n let matrixTree = {};\n let lastLevelKey = 0;\n let facet = PRIMARY;\n const nestFn = nest();\n const keys = [];\n const layoutMatrix = context._layoutMatrix;\n const primaryMatrix = context.primaryMatrix();\n const secondaryMatrix = context.secondaryMatrix();\n const { isTransposed, breakPage } = context.config();\n\n if (!isTransposed) {\n if (primaryMatrix.length === 0) {\n facet = PRIMARY;\n } else if (secondaryMatrix.length === 0) {\n facet = SECONDARY;\n } else {\n facet = primaryMatrix.length >= secondaryMatrix.length ? PRIMARY : SECONDARY;\n }\n if (primaryMatrix.length > 0) {\n for (let i = 0; i < primaryMatrix[0].length - 1; i++) {\n keys.push(i);\n }\n keys.push(primaryMatrix[0].length - 1);\n if (facet === SECONDARY || secondaryMatrix.length === 0) {\n lastLevelKey = primaryMatrix[0].length - 1;\n }\n }\n if (secondaryMatrix.length > 0) {\n const keyLength = primaryMatrix.length > 0 ? primaryMatrix[0].length : 0;\n for (let i = secondaryMatrix[0].length - 1; i > 0; i--) {\n keys.push(i + keyLength);\n }\n keys.push(keyLength);\n\n if (facet === PRIMARY) {\n lastLevelKey = keyLength;\n }\n } else {\n lastLevelKey = primaryMatrix.length > 0 ? primaryMatrix[0].length - 1 : 0;\n }\n keys.forEach((key) => {\n let counter = -1;\n return nestFn.key((d) => {\n counter++;\n return `${d[key].valueOf()}-${findInPage(counter, breakPage)}`;\n });\n });\n matrixTree = nestFn.entries(layoutMatrix);\n } else {\n if (primaryMatrix.length === 0) {\n facet = PRIMARY;\n } else if (secondaryMatrix.length === 0) {\n facet = SECONDARY;\n } else {\n facet = primaryMatrix.length >= secondaryMatrix.length ? PRIMARY : SECONDARY;\n }\n if (primaryMatrix.length > 0) {\n for (let i = 0; i < primaryMatrix.length - 1; i++) {\n keys.push(i);\n }\n // if (facet === PRIMARY) {\n keys.push(primaryMatrix.length - 1);\n // } else {\n if (facet === SECONDARY) {\n lastLevelKey = primaryMatrix.length - 1;\n }\n }\n if (secondaryMatrix.length > 0) {\n const primaryMatrixLength = primaryMatrix.length;\n for (let i = secondaryMatrix.length - 1; i > 0; i--) {\n keys.push(i + primaryMatrixLength);\n }\n // if (facet === SECONDARY) {\n keys.push(primaryMatrixLength);\n // }\n if (facet === PRIMARY) {\n lastLevelKey = primaryMatrixLength;\n }\n }\n keys.forEach((key) => {\n let counter = -1;\n return nestFn.key((d) => {\n counter++;\n return `${d[key].valueOf()}-${findInPage(counter, breakPage)}`;\n });\n });\n let newMatrix = [];\n newMatrix = layoutMatrix[0].map((col, colIndex) => layoutMatrix.map(row => row[colIndex]));\n matrixTree = nestFn.entries(newMatrix);\n }\n return { tree: matrixTree, lastLevelKey };\n};\n\n/**\n * Gives the min measues\n *\n * @param {boolean} isTransposed is column matrix\n * @param {Object} unitMeasures min measures to be given to cells\n * @return {Object} dimension min cell\n */\nexport const getMinMeasures = (isTransposed, unitMeasures) => {\n if (!isTransposed) {\n return {\n height: unitMeasures.height,\n width: 0\n };\n }\n return {\n height: 0,\n width: unitMeasures.width\n };\n};\n\n/**\n * Get the logical space from the tree\n *\n * @param {Node} item tree to be calculated\n * @param {number} measures width and height\n * @param {Array} minMeasures min measures for a cell\n * @param {Array} maxMeasure max measures for a col/row\n * @return {Object} dimension\n */\nexport const getLogicalSpace = (item, measures, minMeasures, maxMeasure = []) => {\n const { firstMeasure, secondMeasure } = measures;\n let firstMeasureValue = 0;\n let secondMeasureValue = 0;\n item.values.forEach((valueArray) => {\n let fMeasure = 0;\n let sMeasure = 0;\n valueArray.forEach((placeholder, colIndex) => {\n placeholder.setAvailableSpace();\n const space = placeholder.getLogicalSpace();\n\n sMeasure = Math.max(sMeasure, +space[secondMeasure], minMeasures[secondMeasure]);\n maxMeasure[colIndex] = Math.max(maxMeasure[colIndex] || 0, space[firstMeasure]);\n fMeasure += +maxMeasure[colIndex];\n });\n secondMeasureValue += sMeasure;\n firstMeasureValue = Math.max(firstMeasureValue, fMeasure);\n item.space = {\n [secondMeasure]: Math.ceil(secondMeasureValue),\n [firstMeasure]: Math.ceil(firstMeasureValue)\n };\n });\n return {\n [secondMeasure]: secondMeasureValue,\n [firstMeasure]: firstMeasureValue\n };\n};\n\n/**\n * Computes the logical spcae taken by the matrix tree\n *\n * @param {*} [item={}] tree to be viewed\n * @param {boolean} [isTransposed=false] is column matrix\n * @param {*} unitMeasures min measues for a cell\n * @param {Array} maxMeasure max measures for a col/row\n * @return {Object} logical space taken\n */\nexport const computeLogicalSpace = (item = {}, config, maxMeasures) => {\n const { isTransposed = false, unitMeasures } = config;\n const { firstMeasure, secondMeasure } = getMeasureInfo(isTransposed);\n const { values } = item;\n const minMeasures = getMinMeasures(isTransposed, unitMeasures);\n if (values[0].key) {\n const logicalSpace = { [firstMeasure]: 0, [secondMeasure]: 0 };\n\n values.forEach((valueItem) => {\n // Compute logical space for lowest level\n const space = computeLogicalSpace(valueItem, config, maxMeasures);\n // Set logical space for first measure\n logicalSpace[firstMeasure] = Math.max(logicalSpace[firstMeasure], space[firstMeasure],\n minMeasures[firstMeasure]);\n // Set logical space for second measure\n logicalSpace[secondMeasure] += +space[secondMeasure];\n });\n item.space = logicalSpace;\n return logicalSpace;\n }\n return getLogicalSpace(item, { firstMeasure, secondMeasure }, minMeasures, maxMeasures);\n};\n\n/**\n * Gives the space taken by a row\n *\n * @param {Array} row matrix array of rows\n * @return {Object} dimension of the row\n */\nexport const spaceTakenByRow = (row) => {\n let height = 0;\n let width = 0;\n row.forEach((col) => {\n const spaces = col.getLogicalSpace();\n height = Math.max(height, spaces.height);\n width += spaces.width;\n });\n return {\n width,\n height\n };\n};\n\n/**\n * Gives the space taken by a column\n *\n * @param {Array} matrix column matrix\n * @param {number} colIndex column index\n * @return {Object} dimension of the column\n */\nexport const spaceTakenByColumn = (matrix, colIndex) => {\n let height = 0;\n let width = 0;\n matrix.forEach((row) => {\n const col = row[colIndex];\n const spaces = col.getLogicalSpace();\n width = Math.max(width, spaces.width);\n height += spaces.height;\n });\n return {\n width,\n height\n };\n};\n\n/**\n * Creates different level matrices\n *\n * @param {Object} item matrix tree\n * @param {boolean} isTransposed is column matrix\n * @return {Object} matrix of each level\n */\nexport const createMatrixEachLevel = (item, isTransposed) => {\n if (item.values[0].key) {\n const arr = [];\n item.values.forEach((child) => {\n if (!isTransposed) {\n arr.push(...createMatrixEachLevel(child, isTransposed));\n } else {\n const eachLevel = createMatrixEachLevel(child, isTransposed);\n eachLevel.forEach((e, i) => {\n arr[i] = arr[i] || [];\n arr[i].push(...e);\n });\n }\n });\n item.matrix = arr;\n return arr;\n }\n if (!isTransposed) {\n item.matrix = item.values;\n } else {\n item.matrix = item.values[0].map((col, colIndex) => item.values.map(row => row[colIndex]));\n }\n return item.matrix;\n};\n\n/**\n * Breaks the matrix into two part\n *\n * @param {Array} matrix input matrix\n * @param {boolean} isTransposed is column matrix\n * @param {number} breakPointer point in matrix where it is to be broken\n * @return {Array} two broken matrix\n */\nexport const breakMatrix = (matrix, isTransposed, breakPointer) => {\n const primaryMatrix = [];\n const secondaryMatrix = [];\n if (isTransposed) {\n matrix.forEach((row, rowIndex) => {\n if (rowIndex >= breakPointer) {\n secondaryMatrix.push(row);\n } else {\n primaryMatrix.push(row);\n }\n });\n } else {\n matrix.forEach((row, rowIndex) => {\n row.forEach((column, columnIndex) => {\n if (columnIndex >= breakPointer) {\n secondaryMatrix[rowIndex] = secondaryMatrix[rowIndex] || [];\n secondaryMatrix[rowIndex].push(column);\n } else {\n primaryMatrix[rowIndex] = primaryMatrix[rowIndex] || [];\n primaryMatrix[rowIndex].push(column);\n }\n });\n });\n }\n return [primaryMatrix, secondaryMatrix];\n};\n\n/**\n * Distributed width returned\n *\n * @param {Object} context context for the width distibution\n * @return {number} distributed widths\n */\nexport const getDistributedWidth = (context, layoutConfig) => {\n const {\n availableWidth,\n width,\n row\n } = context;\n const {\n isDistributionEqual,\n isTransposed,\n distribution\n } = layoutConfig;\n let distSum = 0;\n if (distribution && distribution[0]) {\n distSum = distribution.reduce((t, n) => {\n t += n;\n return t;\n });\n }\n return row.map((col, colIndex) => {\n const space = col.getLogicalSpace().width;\n let distWidth = (space + (availableWidth - width) * (space / width));\n if (isTransposed) {\n if (distribution.length > 0) {\n distWidth = (availableWidth * distribution[colIndex] / distSum);\n } else if (isDistributionEqual || width === 0) {\n const rowLen = row.length;\n distWidth = (availableWidth / rowLen);\n }\n }\n return Math.floor(distWidth);\n });\n};\n\n/**\n * Distributeed heights returned\n *\n * @param {Object} context input for the height distribution\n * @return {Object} distribured heights\n */\nexport const getDistributedHeight = (context) => {\n let distSum = 0;\n let gutterSum = 0;\n let heightWithoutGutter = 0;\n const {\n isTransposed,\n distribution,\n availableHeight,\n height,\n isDistributionEqual,\n gutter,\n matrix,\n cIdx\n } = context;\n\n if (distribution && distribution[0] !== undefined) {\n distSum = distribution.reduce((t, n) => {\n t += n;\n return t;\n });\n }\n if (gutter && gutter[0] !== undefined) {\n gutterSum = gutter.reduce((t, n) => {\n t += n;\n return t;\n });\n }\n heightWithoutGutter = availableHeight - Math.floor(availableHeight * gutterSum);\n\n const colLen = matrix.length;\n return matrix.map((row, rIdx) => {\n const col = row[cIdx];\n const space = col.getLogicalSpace().height;\n let distHeight = (space + (heightWithoutGutter - height) * (space / height));\n\n if (!isTransposed) {\n if (distribution.length > 0 && colLen === distribution.length) {\n distHeight = (heightWithoutGutter * distribution[rIdx] / distSum);\n } else if (isDistributionEqual || context.height === 0) {\n distHeight = (heightWithoutGutter / colLen);\n }\n }\n return Math.floor(distHeight);\n });\n};\n\n/**\n *\n *\n * @param {*} arr\n * @param {*} beg\n * @param {*} end\n */\nexport const extraCellsRemover = (arr, beg, end) => arr.slice(beg, -end);\n\n/**\n * Creates matrix instancess\n *\n * @param {Array} [arr=[]] mutated arry\n * @param {number} depth depth of the tree\n * @param {Array} matrixInfo Details about the matrix(tree, etc) to be inserted\n * @param {boolean} layout Instance of layout\n */\nexport const createMatrixInstances = (arr = [], depth, matrixInfo, layout) => {\n const breakPointer = layout._breakPointer;\n const config = layout.config();\n const {\n isTransposed\n } = config;\n const {\n tree,\n layoutMatrix\n } = matrixInfo;\n\n if (depth === 0) {\n const brokenMatrix = breakMatrix(tree.matrix, isTransposed, breakPointer);\n arr.push({\n matrix: tree.matrix,\n primaryMatrix: brokenMatrix[0],\n secondaryMatrix: brokenMatrix[1],\n space: tree.space\n });\n return arr;\n }\n const nextLevel = depth - 1;\n tree.values.forEach((e) => {\n createMatrixInstances(arr, nextLevel, {\n tree: e,\n layoutMatrix\n }, layout);\n });\n return arr;\n};\n","import { mergeRecursive } from 'muze-utils';\n\nexport const PROPS = {\n config: {\n sanitization: (context, value) => mergeRecursive(context._config || {}, value)\n },\n maxMeasures: {},\n availableSpace: {},\n logicalSpace: {}\n};\n","import { PRIMARY } from '../enums/constants';\n/**\n *\n *\n */\nexport const defaultConfig = {\n distribution: [],\n classPrefix: 'muze',\n isDistributionEqual: true,\n unitMeasures: {\n height: 100,\n width: 100,\n border: 1\n },\n isTransposed: false,\n facet: PRIMARY,\n extraCellLengths: []\n};\n","import { mergeRecursive, generateGetterSetters, ERROR_MSG } from 'muze-utils';\nimport {\n createTree,\n combineMatrices,\n createMatrixInstances\n } from '../utils';\nimport { PROPS } from './props';\nimport { HEIGHT, WIDTH } from '../enums/constants';\nimport { defaultConfig } from './default-config';\n\n/**\n * This class used to create column / row matrix for GridLayout\n *\n * @class VisualMatrix\n */\nexport default class VisualMatrix {\n\n /**\n *Creates an instance of VisualMatrix.\n * @param {any} matrix Two set of matrices\n * @param {any} [config={}] Configuration for VisualMatrix\n * @memberof VisualMatrix\n */\n constructor (matrix, config = {}) {\n // Prepare matrices\n this._lastLevelKey = 0;\n this._primaryMatrix = matrix[0] || [];\n this._secondaryMatrix = matrix[1] || [];\n this._maxMeasures = [];\n this._availableSpace = {};\n\n // Store the config\n generateGetterSetters(this, PROPS);\n const defCon = Object.assign({}, this.constructor.defaultConfig());\n this.config(mergeRecursive(defCon, config));\n\n this._layoutMatrix = combineMatrices([matrix[0] || [], matrix[1] || []], this.config());\n }\n\n /**\n * Computes the logical space taken by the entire matrixTree\n *\n * @return {Object} Logical space taken\n * @memberof VisualMatrix\n */\n computeLogicalSpace () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n computeViewableSpaces () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n *\n *\n * @return\n * @memberof VisualMatrix\n */\n removeExtraCells () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n getPriorityDistribution () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Calculates the depth of the tree that can be viewed\n *\n * @param {Array} widthMeasures array of widths\n * @param {Array} heightMeasures array of heights\n * @return {number} depth of the tree\n * @memberof VisualMatrix\n */\n calculateDepth () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Redistributes the provied space to all cells\n *\n * @param {*} viewableMatrix current viewport matrix\n * @param {*} width provied width\n * @param {*} height provied height\n * @return {Object} current viewports matrixes with measures\n * @memberof VisualMatrix\n */\n redistributeSpaces () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Distibutes the given space row wisely\n *\n * @param {Object} measures Redistribution information\n * @memberof VisualMatrix\n */\n redistributeViewSpaces () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Dispatch the calculated cell dimensions to all the cells\n *\n * @param {Object} measures cell dimension information\n * @return {Object} row and column heights / widths\n * @memberof VisualMatrix\n */\n getCellDimensions () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n *\n *\n * @param {*} params\n * @returns\n * @memberof VisualMatrix\n */\n primaryMatrix (...params) {\n if (params.length) {\n return this;\n }\n return this._primaryMatrix;\n }\n\n secondaryMatrix (...params) {\n if (params.length) {\n return this;\n }\n return this._secondaryMatrix;\n }\n\n tree (...params) {\n if (params.length) {\n return this;\n }\n return this._tree;\n }\n\n static defaultConfig () {\n return defaultConfig;\n }\n\n createTree () {\n const { tree, lastLevelKey } = createTree(this);\n this._lastLevelKey = lastLevelKey;\n return tree;\n }\n\n /**\n * Returns the space taken by visual matrix\n *\n * @return {Object} space taken by the matrix\n * @memberof VisualMatrix\n */\n getLogicalSpace () {\n return this.logicalSpace();\n }\n\n /**\n * Sets the provied space to the visual matrix\n *\n * @param {number} width width provided\n * @param {number} height height provided\n * @memberof VisualMatrix\n */\n setAvailableSpace (width, height) {\n this.availableSpace({ width, height });\n const tree = this.tree();\n const heightMeasures = this.populateMaxMeasures(HEIGHT, tree);\n const widthMeasures = this.populateMaxMeasures(WIDTH, tree);\n const depth = this.calculateDepth(widthMeasures, heightMeasures);\n\n this.viewableMatrix = this.createViewPortMatrix(depth);\n this.viewableMeasures = this.redistributeSpaces(width, height);\n return this;\n }\n\n /**\n * Populate the max measures in the array\n *\n * @param {Array} measures array to be filled with max measures\n * @param {Object} matrixTree matrix tree of visual matrix\n * @param {number} measure width or height\n * @param {number} [depth=0] depth of the tree that to be calculated\n * @memberof VisualMatrix\n */\n populateMaxMeasures (type, matrixTree, depth = 0, measures = []) {\n measures[depth] = Math.max(measures[depth] || 0, matrixTree.space[type]);\n if (matrixTree.values) {\n const childDepth = depth + 1;\n matrixTree.values.forEach((child) => {\n if (child.space) {\n measures = this.populateMaxMeasures(type, child, childDepth, measures);\n }\n });\n }\n return measures;\n }\n\n /**\n * Gets the viewable measures for the current viewable matrix\n *\n * @return {Object} Set of viewable measures\n * @memberof VisualMatrix\n */\n getViewableSpaces () {\n return this.viewableMeasures;\n }\n\n /**\n * Returns the matrix that can be viewed in the current viewport\n *\n * @return {Array} Set of matrices that can be viewed\n * @memberof VisualMatrix\n */\n getViewableMatrices () {\n return this.viewableMatrix;\n }\n\n /**\n * Creates the viewport that can be viewed together\n *\n * @param {number} depth maxDepth that can be viewed in the viewport\n * @return {Array} Set of matrices that can be viewed\n * @memberof VisualMatrix\n */\n createViewPortMatrix (depth) {\n const arr = [];\n createMatrixInstances(arr, depth, this.removeExtraCells(), this);\n return arr;\n }\n}\n\n","import { mergeRecursive } from 'muze-utils';\nimport {\n extraCellsRemover,\n combineMatrices,\n spaceTakenByColumn,\n getDistributedHeight,\n computeLogicalSpace,\n createMatrixEachLevel\n } from '../utils';\nimport { ROW_ROOT } from '../enums/constants';\nimport VisualMatrix from './visual-matrix';\n\n/**\n * This class used to create column / row matrix for GridLayout\n *\n * @class VisualMatrix\n */\nexport default class RowVisualMatrix extends VisualMatrix {\n\n /**\n *Creates an instance of VisualMatrix.\n * @param {any} matrix Two set of matrices\n * @param {any} [config={}] Configuration for VisualMatrix\n * @memberof VisualMatrix\n */\n constructor (matrix, config = {}) {\n super(matrix, config);\n\n this._breakPointer = (matrix[0].length > 0 ? matrix[0][0].length : 0);\n this._layoutMatrix = combineMatrices([matrix[0] || [], matrix[1] || []], this.config());\n\n // Create Tree\n this._tree = {\n key: ROW_ROOT,\n values: this.createTree()\n };\n this._logicalSpace = this.computeLogicalSpace();\n }\n\n /**\n * Computes the logical space taken by the entire matrixTree\n *\n * @return {Object} Logical space taken\n * @memberof VisualMatrix\n */\n computeLogicalSpace () {\n const matrixTree = this.tree();\n createMatrixEachLevel(matrixTree, false);\n return computeLogicalSpace(matrixTree, this.config(), this.maxMeasures());\n }\n\n computeViewableSpaces (measures) {\n const {\n maxHeights,\n maxWidths,\n height\n } = measures;\n return this.viewableMatrix.map((matrixInst, i) => {\n const cellDimOptions = { matrixInst, maxWidths, maxHeights, matrixIndex: i };\n const { widths, rowHeights, columnWidths } = this.getCellDimensions(cellDimOptions);\n const heightMeasures = [height, height];\n const columnMeasures = widths;\n\n return {\n rowHeights: {\n primary: rowHeights[0],\n secondary: rowHeights[1]\n },\n columnWidths: {\n primary: columnWidths[0],\n secondary: columnWidths[1]\n },\n height: {\n primary: heightMeasures[0],\n secondary: heightMeasures[1]\n },\n width: {\n primary: columnMeasures[0],\n secondary: columnMeasures[1]\n }\n };\n });\n }\n\n /**\n *\n *\n * @return\n * @memberof VisualMatrix\n */\n removeExtraCells () {\n const {\n isTransposed,\n extraCellLengths\n } = this.config();\n const matrix = this._layoutMatrix;\n const tree = mergeRecursive({}, this.tree());\n const begCellLen = extraCellLengths[0];\n const endCellLen = extraCellLengths[1] || Number.NEGATIVE_INFINITY;\n const layoutMatrix = !isTransposed ? extraCellsRemover(matrix, begCellLen, endCellLen) :\n matrix.slice(0).map(e => extraCellsRemover(e, begCellLen, endCellLen));\n\n tree.values = extraCellsRemover(tree.values, begCellLen, endCellLen);\n tree.matrix = extraCellsRemover(tree.matrix, begCellLen, endCellLen);\n\n return {\n tree,\n layoutMatrix\n };\n }\n\n getPriorityDistribution (measures) {\n let remainaingAvailWidth;\n let remainaingWidth;\n let cWidths = [];\n let conditions = [];\n let maxPrioritySpace = 0;\n const {\n matrix,\n width: availableWidth,\n maxMeasures: maxWidths,\n maxWidth: currentWidth,\n height\n } = measures;\n const priority = this.config().priority;\n const primaryMatrixLength = this.primaryMatrix().length ? this.primaryMatrix()[0].length : 0;\n\n const dist = [];\n\n remainaingAvailWidth = availableWidth;\n remainaingWidth = currentWidth;\n\n if (priority === 2) {\n conditions = [primaryMatrixLength - 1, primaryMatrixLength];\n // divider = Math.min(2, matrixLen);\n } else {\n conditions = priority === 0 ? [primaryMatrixLength - 1] : [primaryMatrixLength];\n // divider = Math.min(1, matrixLen);\n }\n conditions.forEach((i) => {\n dist[i] = maxWidths[i];\n maxPrioritySpace += maxWidths[i];\n remainaingAvailWidth -= dist[i];\n remainaingWidth -= dist[i];\n });\n matrix[0].forEach((e, i) => {\n if (conditions.indexOf(i) === -1) {\n dist[i] = remainaingAvailWidth * (maxWidths[i] / remainaingWidth);\n }\n });\n matrix.forEach(row => row.forEach((col, cIdx) => {\n if (conditions.indexOf(cIdx) === -1) {\n col.setAvailableSpace(dist[cIdx], height);\n\n cWidths[cIdx] = Math.max(cWidths[cIdx] || 0, Math.floor(col.getLogicalSpace().width));\n } else {\n cWidths[cIdx] = 0;\n }\n }));\n\n const prioritySpace = availableWidth - cWidths.reduce((t, n) => t + n);\n if (prioritySpace < 0) {\n cWidths = cWidths.map(() => 0);\n } else {\n conditions.forEach((i) => {\n cWidths[i] = Math.floor(prioritySpace * (dist[i] / maxPrioritySpace || 1));\n });\n }\n return cWidths;\n }\n\n /**\n * Calculates the depth of the tree that can be viewed\n *\n * @param {Array} widthMeasures array of widths\n * @param {Array} heightMeasures array of heights\n * @return {number} depth of the tree\n * @memberof VisualMatrix\n */\n calculateDepth (widthMeasures, heightMeasures) {\n let i;\n const { height } = this.availableSpace();\n\n for (i = 0; i < heightMeasures.length; i++) {\n if (heightMeasures[i] <= height) break;\n }\n\n return Math.min(widthMeasures.length - 1, i);\n }\n\n /**\n * Redistributes the provied space to all cells\n *\n * @param {*} viewableMatrix current viewport matrix\n * @param {*} width provied width\n * @param {*} height provied height\n * @return {Object} current viewports matrixes with measures\n * @memberof VisualMatrix\n */\n redistributeSpaces (width, height) {\n let maxHeights = [];\n let maxWidths = [];\n const maxMeasures = this.maxMeasures();\n\n const maxWidth = maxMeasures.reduce((t, n) => {\n t += n;\n return t;\n });\n const logicalWidths = this.getPriorityDistribution({\n matrix: this._layoutMatrix,\n maxWidth,\n maxMeasures,\n width,\n height\n });\n\n this.viewableMatrix.forEach((matrixInst) => {\n const matrix = matrixInst.matrix;\n const mWidth = 0;\n const mHeight = 0;\n const options = { mWidth, mHeight, matrix, width, height, maxHeights, maxWidths, logicalWidths };\n const measures = this.redistributeViewSpaces(options);\n maxWidths = measures.maxWidths;\n maxHeights = measures.maxHeights;\n });\n return this.computeViewableSpaces({ height, width, maxHeights, maxWidths });\n }\n\n /**\n * Distibutes the given space row wisely\n *\n * @param {Object} measures Redistribution information\n * @memberof VisualMatrix\n */\n redistributeViewSpaces (measures) {\n let cWidths = [];\n let rHeights = [];\n let mHeight = 0;\n const maxMeasures = this.maxMeasures();\n\n const {\n isDistributionEqual,\n distribution,\n isTransposed,\n gutter\n } = this.config();\n const { matrix, height, maxHeights, maxWidths, logicalWidths } = measures;\n mHeight = spaceTakenByColumn(matrix, this._lastLevelKey).height;\n\n const maxWidth = maxMeasures.reduce((t, n) => {\n t += n;\n return t;\n });\n measures.maxMeasures = maxMeasures;\n measures.maxWidth = maxWidth;\n if (maxWidth > 0) {\n cWidths = logicalWidths;\n } else {\n cWidths = maxMeasures.map(() => 0);\n }\n rHeights = getDistributedHeight({\n matrix,\n cIdx: this._lastLevelKey,\n height: mHeight,\n availableHeight: height,\n isDistributionEqual,\n distribution,\n isTransposed,\n gutter\n });\n if (maxWidths.length > 0) {\n cWidths = cWidths.map((e, i) => Math.max(e, maxWidths[0][i] || 0));\n }\n maxWidths.push(cWidths);\n for (let x = 0; x < maxWidths.length; x++) {\n maxWidths[x] = cWidths;\n }\n maxHeights.push(rHeights);\n return { maxWidths, maxHeights };\n }\n\n /**\n * Dispatch the calculated cell dimensions to all the cells\n *\n * @param {Object} measures cell dimension information\n * @return {Object} row and column heights / widths\n * @memberof VisualMatrix\n */\n getCellDimensions (measures) {\n const {\n unitMeasures\n } = this.config();\n const borderWidth = unitMeasures.border;\n const { matrixInst, maxWidths, maxHeights, matrixIndex } = measures;\n const matrix = matrixInst.matrix;\n const rowHeights = [[0], [0]];\n const columnWidths = [[0], [0]];\n const heights = [0, 0];\n const widths = [0, 0];\n const breakPointer = this._breakPointer;\n\n matrix.forEach((row, rIdx) => {\n row.forEach((cell, cIdx) => {\n const colHeight = maxHeights[matrixIndex][rIdx] || 0;\n const colWidth = maxWidths[matrixIndex][cIdx];\n\n cell.setAvailableSpace(colWidth, colHeight - borderWidth);\n\n if (rIdx === 0 && cIdx < breakPointer) {\n columnWidths[0][cIdx] = colWidth;\n widths[0] = (widths[0] || 0) + colWidth;\n } else if (rIdx === 0 && cIdx >= breakPointer) {\n columnWidths[1][cIdx - breakPointer] = colWidth;\n widths[1] = (widths[1] || 0) + colWidth;\n }\n if (cIdx === this._lastLevelKey) {\n rowHeights[0][rIdx] = colHeight;\n rowHeights[1][rIdx] = colHeight;\n }\n });\n });\n return {\n heights,\n widths,\n rowHeights,\n columnWidths\n };\n }\n}\n\n","import { mergeRecursive } from 'muze-utils';\nimport {\n extraCellsRemover,\n getDistributedWidth,\n spaceTakenByRow,\n createMatrixEachLevel,\n computeLogicalSpace\n } from '../utils';\nimport { COLUMN_ROOT } from '../enums/constants';\nimport VisualMatrix from './visual-matrix';\n\n/**\n * This class used to create column / row matrix for GridLayout\n *\n * @class VisualMatrix\n */\nexport default class ColumnVisualMatrix extends VisualMatrix {\n\n /**\n *Creates an instance of VisualMatrix.\n * @param {any} matrix Two set of matrices\n * @param {any} [config={}] Configuration for VisualMatrix\n * @memberof VisualMatrix\n */\n constructor (matrix, config = {}) {\n super(matrix, config);\n\n this._breakPointer = matrix[0].length;\n\n // Create Tree\n this._tree = {\n key: COLUMN_ROOT,\n values: this.createTree()\n };\n this._logicalSpace = this.computeLogicalSpace();\n }\n\n /**\n * Computes the logical space taken by the entire matrixTree\n *\n * @return {Object} Logical space taken\n * @memberof VisualMatrix\n */\n computeLogicalSpace () {\n const matrixTree = this.tree();\n createMatrixEachLevel(matrixTree, true);\n return computeLogicalSpace(matrixTree, this.config(), this.maxMeasures());\n }\n\n computeViewableSpaces (measures) {\n const {\n maxHeights,\n maxWidths,\n height,\n width\n } = measures;\n\n return this.viewableMatrix.map((matrixInst, i) => {\n const cellDimOptions = { matrixInst, maxWidths, maxHeights, matrixIndex: i, height };\n const {\n heights,\n rowHeights,\n columnWidths\n } = this.getCellDimensions(cellDimOptions);\n const heightMeasures = heights;\n const columnMeasures = [width, width];\n\n return {\n rowHeights: {\n primary: rowHeights[0],\n secondary: rowHeights[1]\n },\n columnWidths: {\n primary: columnWidths[0],\n secondary: columnWidths[1]\n },\n height: {\n primary: heightMeasures[0],\n secondary: heightMeasures[1]\n },\n width: {\n primary: columnMeasures[0],\n secondary: columnMeasures[1]\n }\n };\n });\n }\n\n /**\n *\n *\n * @return\n * @memberof VisualMatrix\n */\n removeExtraCells () {\n const {\n isTransposed,\n extraCellLengths\n } = this.config();\n const matrix = this._layoutMatrix;\n const tree = mergeRecursive({}, this.tree());\n const begCellLen = extraCellLengths[0];\n const endCellLen = extraCellLengths[1] || Number.NEGATIVE_INFINITY;\n const layoutMatrix = !isTransposed ? extraCellsRemover(matrix, begCellLen, endCellLen) :\n matrix.slice(0).map(e => extraCellsRemover(e, begCellLen, endCellLen));\n\n tree.values = extraCellsRemover(tree.values, begCellLen, endCellLen);\n\n tree.matrix = tree.matrix.map(e => extraCellsRemover(e, begCellLen, endCellLen));\n\n return {\n tree,\n layoutMatrix\n };\n }\n\n getPriorityDistribution (measures) {\n const {\n height,\n maxHeights\n } = measures;\n let remainaingHeight = height;\n let heightDist = [];\n let conditions = [];\n let divider = 2;\n const priority = this.config().priority;\n const primaryMatrixLength = this.primaryMatrix().length;\n\n if (priority === 2) {\n conditions = [primaryMatrixLength - 1, primaryMatrixLength];\n divider = 2;\n } else {\n conditions = priority === 0 ? [primaryMatrixLength - 1] : [primaryMatrixLength];\n divider = 1;\n }\n maxHeights.forEach((e, i) => {\n if (conditions.indexOf(i) === -1) {\n heightDist[i] = e;\n remainaingHeight -= e;\n }\n });\n if (remainaingHeight < 0) {\n heightDist = heightDist.map(() => 0);\n } else {\n conditions.forEach((e) => {\n if (remainaingHeight / divider < maxHeights[e]) {\n heightDist[e] = 0;\n } else {\n heightDist[e] = Math.min(maxHeights[e], (remainaingHeight) / divider);\n }\n });\n }\n return heightDist;\n }\n\n /**\n * Calculates the depth of the tree that can be viewed\n *\n * @param {Array} widthMeasures array of widths\n * @param {Array} heightMeasures array of heights\n * @return {number} depth of the tree\n * @memberof VisualMatrix\n */\n calculateDepth (widthMeasures) {\n let j;\n const { width } = this.availableSpace();\n\n for (j = 0; j < widthMeasures.length; j++) {\n if (widthMeasures[j] <= width) break;\n }\n return Math.min(widthMeasures.length - 1, j);\n }\n\n /**\n * Redistributes the provied space to all cells\n *\n * @param {*} viewableMatrix current viewport matrix\n * @param {*} width provied width\n * @param {*} height provied height\n * @return {Object} current viewports matrixes with measures\n * @memberof VisualMatrix\n */\n redistributeSpaces (width, height) {\n let maxHeights = [];\n let maxWidths = [];\n\n this.viewableMatrix.forEach((matrixInst) => {\n const matrix = matrixInst.matrix;\n const mWidth = 0;\n const mHeight = 0;\n const options = { mWidth, mHeight, matrix, width, height, maxHeights, maxWidths };\n const maxMeasures = this.redistributeViewSpaces(options);\n maxWidths = maxMeasures.maxWidths;\n maxHeights = maxMeasures.maxHeights;\n });\n\n return this.computeViewableSpaces({ height, width, maxHeights, maxWidths });\n }\n\n /**\n * Distibutes the given space column wisely\n *\n * @param {Object} measures Redistribution information\n * @memberof VisualMatrix\n */\n redistributeViewSpaces (measures) {\n let rHeights = [];\n const {\n matrix,\n width,\n maxHeights,\n maxWidths\n } = measures;\n const borderWidth = this.config().unitMeasures.border;\n\n const mWidth = spaceTakenByRow(matrix[this._lastLevelKey]).width;\n const cWidths = getDistributedWidth({\n row: matrix[this._lastLevelKey],\n width: mWidth,\n availableWidth: width\n }, this.config());\n\n matrix.forEach((row, rIdx) => row.forEach((col, cIdx) => {\n const oldLogicalSpace = col.getLogicalSpace();\n\n col.setAvailableSpace(cWidths[cIdx] - borderWidth, oldLogicalSpace.height);\n rHeights[rIdx] = Math.max(rHeights[rIdx] || 0, Math.floor(col.getLogicalSpace().height));\n }));\n if (maxHeights.length > 0) {\n rHeights = rHeights.map((e, i) => Math.max(e, maxHeights[0][i]));\n }\n maxHeights.push(rHeights);\n for (let x = 0; x < maxHeights.length; x++) {\n maxHeights[x] = rHeights;\n }\n maxWidths.push(cWidths);\n return { maxHeights, maxWidths };\n }\n\n /**\n * Dispatch the calculated cell dimensions to all the cells\n *\n * @param {Object} measures cell dimension information\n * @return {Object} row and column heights / widths\n * @memberof VisualMatrix\n */\n getCellDimensions (measures) {\n const {\n unitMeasures\n } = this.config();\n const borderWidth = unitMeasures.border;\n const { matrixInst, height, maxWidths, maxHeights, matrixIndex } = measures;\n const matrix = matrixInst.matrix;\n const rowHeights = [[0], [0]];\n const columnWidths = [[0], [0]];\n const heights = [0, 0];\n const widths = [0, 0];\n const breakPointer = this._breakPointer;\n\n const heightDistribution = this.getPriorityDistribution({ height, maxHeights: maxHeights[0] || [] });\n\n matrix.forEach((row, rIdx) => {\n row.forEach((cell, cIdx) => {\n const colHeight = heightDistribution[rIdx] || 0;\n const colWidth = maxWidths[matrixIndex][cIdx];\n\n cell.setAvailableSpace(colWidth - borderWidth, colHeight);\n\n if (cIdx === 0 && rIdx < breakPointer) {\n rowHeights[0][rIdx] = colHeight;\n heights[0] = (heights[0] || 0) + colHeight;\n } else if (cIdx === 0 && rIdx >= breakPointer) {\n rowHeights[1][rIdx - breakPointer] = colHeight;\n heights[1] = (heights[1] || 0) + colHeight;\n }\n if (rIdx === this._lastLevelKey) {\n columnWidths[0][cIdx] = colWidth;\n columnWidths[1][cIdx] = colWidth;\n }\n });\n });\n return {\n heights,\n widths,\n rowHeights,\n columnWidths\n };\n }\n}\n\n","import {\n HEIGHT, WIDTH, COLUMN, ROW, HORIZONTAL, VERTICAL, HOLISTIC,\n MAX_WIDTH_AVAIL_FOR_COL_MATRIX, COLUMN_MATRIX, MAX_HEIGHT_AVAIL_FOR_ROW_MATRIX, ROW_MATRIX, SCROLL\n} from '../enums/constants';\n\n/**\n * Gets measurement for an instance of visual matrix\n *\n * @param {Array} matrix instance of visual matrix\n * @param {string} type height/width\n * @return {Object} Logical height/width of the matrix\n */\nexport function getMatrixMeasurement (matrix, type) {\n if (matrix) {\n return matrix.getLogicalSpace()[type];\n }\n return 0;\n}\n\n/**\n * Sets available space for an instance of visual matrix\n *\n * @param {Array} matrix instance of visual matrix\n * @param {string} type height/width\n * @param {number} value Value of measurement\n */\nexport function setMatrixMeasurement (matrix, type, value) {\n if (matrix) {\n const spaces = matrix.getLogicalSpace();\n if (value && spaces[type] !== value) {\n type === HEIGHT ? matrix.setAvailableSpace(spaces.width, value) :\n matrix.setAvailableSpace(value, spaces.height);\n }\n }\n}\n\nconst setAvailableSpace = (matrix, widths, heights) => {\n matrix.forEach((row, rIdx) => {\n row.forEach((placeholder, cIdx) => {\n placeholder.setAvailableSpace(widths[cIdx], heights[rIdx]);\n });\n });\n};\n\nconst setViewSpaces = (layout, pointerType, viewSpaces) => {\n let pointer = layout.config()[`${pointerType}Pointer`];\n if (viewSpaces.length - 1 < pointer) {\n pointer = 0;\n layout.config({ [`${pointerType}Pointer`]: pointer });\n }\n return pointer;\n};\n\nconst paginationDetailsMap = {\n column: {\n maxMeasure: MAX_WIDTH_AVAIL_FOR_COL_MATRIX,\n matrix: COLUMN_MATRIX,\n measureType: WIDTH,\n scrollType: HORIZONTAL\n },\n row: {\n maxMeasure: MAX_HEIGHT_AVAIL_FOR_ROW_MATRIX,\n matrix: ROW_MATRIX,\n measureType: HEIGHT,\n scrollType: VERTICAL\n }\n};\n\n/**\n * This method provides the required width/height in the different pagination stages.\n * If the pagination is holistic, then only the max width/height will be provided for layouting\n * If scroll is enabled, then the entire width/height shall be provided for layouting\n * Note: width is required for scrolling the columns while height is required for scrolling rows\n *\n *\n * @param {Layout} layout Layout instance required for configuration details\n * @param {Object} measureDetails different measure details for row/column\n * @param {number} maxMeasure maximum width/height present for column/row respectively\n * @return {number} Provides the width/height based on which further calculation can occur\n */\nconst getMatrixMeasureForPagination = (layout, measureDetails, maxMeasure, buffer) => {\n const {\n pagination\n } = layout.config();\n const {\n matrix,\n measureType,\n scrollType\n } = measureDetails;\n\n switch (pagination) {\n case HOLISTIC:\n return maxMeasure;\n default: {\n const actualMeasure = getMatrixMeasurement(layout[matrix](), measureType) + buffer;\n\n if (actualMeasure > maxMeasure) {\n layout.scrollInfo({ [scrollType]: true });\n }\n return Math.max(maxMeasure, actualMeasure);\n }\n }\n};\n\n/**\n * This method uses the getMatrixMeasureForPagination function to calculate maximum measure\n * depending on the layouting algorithm used\n *\n *\n * @param {Layout} layout Layout instance required for configuration details\n * @param {string} matrixType row/column\n * @param {number} relatedMaxMeasure maximum width/height present for column/row respectively\n * @return {number} Provides the width/height based on which further calculation can occur\n */\nconst paginationMeasureGetter = (layout, matrixType, relatedMaxMeasure, buffer) =>\n getMatrixMeasureForPagination(layout, paginationDetailsMap[matrixType], relatedMaxMeasure, buffer);\n\nconst getMatrixWidthDetails = (layout) => {\n const rowMatrix = layout.rowMatrix();\n const {\n width\n } = layout.measurement();\n const {\n border,\n buffer\n } = layout.config();\n\n // Border adjustment for each cell in the central matrix\n const borderWidth = border.width;\n\n // Get width of row matrix\n const rowMatrixWidth = getMatrixMeasurement(rowMatrix, WIDTH);\n\n // Get maximum width allowed for the row matrix\n const maxRowMatrixWidth = Math.min(rowMatrixWidth + buffer, width / 2);\n\n // Get maximum width available for the column matrix\n const maxWidthAvailableForColumnMatrix = width - maxRowMatrixWidth - borderWidth;\n\n // Set width for column matrix\n const columnMatrixWidth = paginationMeasureGetter(layout, COLUMN, maxWidthAvailableForColumnMatrix, 0);\n\n return {\n rowMatrixWidth,\n maxRowMatrixWidth,\n columnMatrixWidth,\n maxWidthAvailableForColumnMatrix\n };\n};\n\nconst getHeightRequiredByColMatrix = (layout, columnMatrixWidth) => {\n const {\n height\n } = layout.measurement();\n const columnMatrix = layout.columnMatrix();\n\n // Get maximum allowed height for colum matrix\n const maxColumnMatrixHeight = Math.min(columnMatrix.getLogicalSpace().height, height / 2);\n\n // Set the computed width and max height to column matrix to determine the actual height\n // that will be taken by the column matrix\n columnMatrix.setAvailableSpace(columnMatrixWidth, maxColumnMatrixHeight);\n\n // Get the set of pages column view\n const columnViewPages = columnMatrix.getViewableSpaces();\n\n // Figuring out total space needed by current view space\n const columnViewSpace = columnViewPages[layout.config().columnPointer];\n\n // Getting height of column matrix\n const columnMatrixHeight = columnViewSpace.height.primary + columnViewSpace.height.secondary;\n\n return {\n columnMatrixHeight,\n maxColumnMatrixHeight\n };\n};\n\nconst getMatrixHeightDetails = (layout, columnMatrixWidth) => {\n const {\n height\n } = layout.measurement();\n const {\n buffer\n } = layout.config();\n\n // Get actual height required by column matrix\n const { columnMatrixHeight, maxColumnMatrixHeight } = getHeightRequiredByColMatrix(layout, columnMatrixWidth);\n\n // Based on column height, compute max height available for row matrix\n const maxHeightAvailableForRowMatrix = height - Math.min(maxColumnMatrixHeight, columnMatrixHeight);\n\n // Get height for row matrix\n const rowMatrixHeight = paginationMeasureGetter(layout, ROW, maxHeightAvailableForRowMatrix, buffer);\n\n return {\n columnMatrixHeight,\n maxColumnMatrixHeight,\n rowMatrixHeight,\n maxHeightAvailableForRowMatrix\n };\n};\n\nconst setValueMatrixMeasurements = (layout, rowViewableSpaces, columnViewableSpaces) => {\n const centerMatrix = layout.centerMatrix();\n\n const {\n border\n } = layout.config();\n const matrices = layout.matrices();\n const {\n top,\n bottom\n } = matrices;\n\n // Border adjustment for each cell in the central matrix\n const borderWidth = border.width;\n\n // Get the heights for each cell in the row matrix\n const rowHeights = [].concat(...rowViewableSpaces.map(e => e.rowHeights.primary));\n\n // Get the widths for each of the row matrix cells(primary and secondary)\n const rowWidthsPrimary = [].concat(...rowViewableSpaces.map(e => e.columnWidths.primary));\n const rowWidthsSecondary = [].concat(...rowViewableSpaces.map(e => e.columnWidths.secondary));\n\n // Get the widths for each cell in the column matrix\n const columnWidths = [].concat(...columnViewableSpaces.map(e => e.columnWidths.primary));\n\n // Get the widths for each of the column matrix cells(primary and secondary)\n const columnHeightsPrimary = columnViewableSpaces[0].rowHeights.primary;\n const columnHeightsSecondary = [].concat(...columnViewableSpaces.map(e => e.rowHeights.secondary));\n\n // Setting the available space for each cell in the centre matrix computed throught the row and\n // column matrices\n centerMatrix.forEach((matrix, rIdx) => {\n matrix.forEach((placeholder, cIdx) => {\n placeholder.setAvailableSpace(columnWidths[cIdx] - borderWidth, rowHeights[rIdx] - borderWidth);\n });\n });\n\n // Set the heights and widths for the corner matrices namely:\n // TOP_LEFT\n setAvailableSpace(top[0], rowWidthsPrimary, columnHeightsPrimary);\n // TOP_RIGHT\n setAvailableSpace(top[2], rowWidthsSecondary, columnHeightsPrimary);\n // BOTTOM_LEFT\n setAvailableSpace(bottom[0], rowWidthsPrimary, columnHeightsSecondary);\n // BOTTOM_RIGHT\n setAvailableSpace(bottom[2], rowWidthsSecondary, columnHeightsSecondary);\n};\n\nconst bufferCondition = {\n isScroll: true,\n pagination: SCROLL\n};\n\nconst getBufferFromCondition = (layout, type) => {\n const scrollInfo = layout.scrollInfo();\n const {\n pagination\n } = layout.config();\n\n const currentBufferType = {\n pagination,\n isScroll: scrollInfo[type]\n };\n\n return Object.keys(bufferCondition).every(e => bufferCondition[e] === currentBufferType[e]);\n};\n\nconst getActualBufferFromConfig = (layout) => {\n const {\n buffer\n } = layout.config();\n const [horizontalBuffer, verticalBuffer] = [HORIZONTAL, VERTICAL].map((type) => {\n if (getBufferFromCondition(layout, type)) {\n return buffer;\n }\n return 0;\n });\n\n return {\n horizontalBuffer,\n verticalBuffer\n };\n};\n/**\n * Computes the measurements of space for all matrices in the\n * layout\n *\n * @param {Object} layout Instance of grid layout\n * @return {Object} set of measurements for the layout\n */\nexport const computeLayoutMeasurements = (layout) => {\n const rowMatrix = layout.rowMatrix();\n const columnMatrix = layout.columnMatrix();\n\n // Compute the widths of the row and column matrices\n const {\n rowMatrixWidth,\n maxRowMatrixWidth,\n maxWidthAvailableForColumnMatrix,\n columnMatrixWidth\n } = getMatrixWidthDetails(layout);\n\n // Compute the heights of the row and column matrices\n const {\n columnMatrixHeight,\n rowMatrixHeight,\n maxHeightAvailableForRowMatrix\n } = getMatrixHeightDetails(layout, columnMatrixWidth);\n\n const {\n horizontalBuffer,\n verticalBuffer\n } = getActualBufferFromConfig(layout);\n rowMatrix.setAvailableSpace(maxRowMatrixWidth - verticalBuffer, rowMatrixHeight - horizontalBuffer);\n\n // Get row and columns viewable spaces\n const rowViewableSpaces = rowMatrix.getViewableSpaces();\n const columnViewableSpaces = columnMatrix.getViewableSpaces();\n\n // Set view spaces for row and columns\n setViewSpaces(layout, ROW, rowViewableSpaces);\n setViewSpaces(layout, COLUMN, columnViewableSpaces);\n\n // Set measures for each cell of the value matrix\n setValueMatrixMeasurements(layout, rowViewableSpaces, columnViewableSpaces);\n\n return {\n rowMatrixHeight: rowMatrixHeight - horizontalBuffer,\n rowMatrixWidth: rowMatrixWidth - verticalBuffer,\n maxHeightAvailableForRowMatrix: maxHeightAvailableForRowMatrix - horizontalBuffer,\n\n columnMatrixHeight,\n columnMatrixWidth,\n maxWidthAvailableForColumnMatrix\n };\n};\n","/**\n * Gets view matrices based on current pointers for row and column\n *\n * @param {Object} layout instance of layout\n * @param {number} rowPointer current row pointer\n * @param {number} columnPointer current column pointer\n * @return {Object} returns the view matrix and its relevant information\n */\nexport const getViewMatrices = (layout, rowPointer, columnPointer) => {\n const rowMatrix = layout.rowMatrix();\n const columnMatrix = layout.columnMatrix();\n const centerMatrix = layout.centerMatrix();\n const matrices = layout.matrices();\n const rowMatrices = rowMatrix.getViewableMatrices();\n const columnMatrices = columnMatrix.getViewableMatrices();\n const centralMatrixPointer = {\n row: 0,\n column: 0\n };\n\n for (let i = rowPointer - 1; i >= 0; i--) {\n const length = Math.max(rowMatrices[i].primaryMatrix.length,\n rowMatrices[i].secondaryMatrix.length);\n centralMatrixPointer.row += length;\n }\n /* istanbul ignore next */\n for (let i = columnPointer - 1; i >= 0; i--) {\n const matrix = columnMatrices[i];\n const { primaryMatrix, secondaryMatrix } = matrix;\n const length = Math.max(primaryMatrix[0] ? primaryMatrix[0].length : 0,\n secondaryMatrix[0] ? secondaryMatrix[0].length : 0);\n centralMatrixPointer.column += length;\n }\n\n matrices.top[1] = columnMatrices[columnPointer].primaryMatrix;\n matrices.bottom[1] = columnMatrices[columnPointer].secondaryMatrix;\n\n matrices.center[0] = rowMatrices[rowPointer].primaryMatrix;\n matrices.center[2] = rowMatrices[rowPointer].secondaryMatrix;\n\n const rowMatrixLen = Math.max(matrices.center[0].length, matrices.center[2].length);\n /* istanbul ignore next */\n const columnMatrixLen = Math.max(matrices.top[1][0] ? matrices.top[1][0].length : 0, matrices.bottom[1][0] ?\n matrices.bottom[1][0].length : 0);\n matrices.center[1] = centerMatrix.slice(centralMatrixPointer.row, centralMatrixPointer.row + rowMatrixLen)\n .map(matrix => matrix.slice(centralMatrixPointer.column, centralMatrixPointer.column + columnMatrixLen));\n\n return {\n matrices,\n rowPages: rowMatrices.length,\n columnPages: columnMatrices.length\n };\n};\n\nconst measureSum = measureArr => measureArr.reduce((total, measure) => total + measure, 0);\n/**\n * Returns measurements of the cells of the current matrix\n *\n * @param {Object} layout instance of layout\n * @return {Object} returns the measurements for current view matrix\n */\nexport const getViewMeasurements = (layout, maxRowHeight, maxColWidth) => {\n const rowMatrix = layout.rowMatrix();\n const columnMatrix = layout.columnMatrix();\n const {\n columnPointer,\n rowPointer\n } = layout.config();\n\n const rowSpaces = rowMatrix.getViewableSpaces()[rowPointer];\n const colSpaces = columnMatrix.getViewableSpaces()[columnPointer];\n\n const {\n rowHeights,\n width: rowMatrixWidth\n } = rowSpaces;\n const {\n columnWidths,\n height: columnMatrixHeight\n } = colSpaces;\n\n const { primary: leftWidth, secondary: rightWidth } = rowMatrixWidth;\n const { primary: topHeight, secondary: bottomHeight } = columnMatrixHeight;\n\n const centerHeight = measureSum(rowHeights.primary);\n const centerWidth = measureSum(columnWidths.primary);\n const viewWidth = [leftWidth, Math.min(centerWidth, maxColWidth), rightWidth];\n const viewHeight = [topHeight, Math.min(centerHeight, maxRowHeight), bottomHeight];\n\n return {\n viewWidth,\n viewHeight,\n actualCenterMeasures: {\n height: centerHeight,\n width: centerWidth\n },\n totalMeasures: {\n width: measureSum(viewWidth),\n height: measureSum(viewHeight)\n },\n unitHeights: rowHeights,\n unitWidths: columnWidths\n };\n};\n","/**\n * This file declares a table that can be extended to create a Datagrid, crosstab\n * and man other visualzations that require a tabular structure.\n */\n\nimport { getUniqueId, mergeRecursive } from 'muze-utils';\nimport GenericLayout from '../generic-layout';\nimport { DEFAULT_CONFIGURATION, DEFAULT_MEASUREMENTS } from './defaults';\nimport { generateVisualMatrices } from './layout-helper';\nimport { computeLayoutMeasurements } from './computations';\nimport { getViewMeasurements, getViewMatrices } from './view-info-getter';\n/**\n * This class is used to create a tabular structure that\n * can house charts and values.\n *\n * @class GridLayout\n */\nexport default class GridLayout extends GenericLayout {\n\n /**\n * Creates an instance of TableLayout.\n * @param {HTMLElement} matrices Set of upto 9 matrices containing the cells to be rendered\n * @param {HTMLElement} mountPoint DOM element/d3 selection where the layout is to be mounted\n * @param {Object} measurement The dimensions of the layout\n * @param {Object} config external configurations.\n * @memberof GenericLayout\n */\n constructor (matrices, mountPoint, measurement, config) {\n super(mountPoint, measurement, config);\n this.matrices(matrices);\n this.config(this.constructor.defaultConfig());\n this._layoutId = getUniqueId();\n this._viewInfo = this.constructor.defaultViewInfo();\n this._scrollInfo = { horizontal: false, vertical: false };\n }\n\n static defaultViewInfo () {\n return Object.assign({}, {\n layoutDimensions: {\n border: this.defaultConfig().border,\n viewHeight: [0, 0, 0],\n viewWidth: [0, 0, 0]\n },\n viewMatricesInfo: {\n columnPages: 0,\n rowPages: 0,\n matrices: { top: [], center: [], bottom: [] }\n }\n });\n }\n\n /**\n * Returns initial set of measurements for the grid layout\n *\n * @static\n * @return {Object} Returns initial set of measurements\n * @memberof GridLayout\n */\n static defaultMeasurement () {\n return DEFAULT_MEASUREMENTS;\n }\n\n /**\n * Returns initialconfiguration for grid layout\n *\n * @static\n * @return {Object} Returns initial configuration for grid layout\n * @memberof GridLayout\n */\n static defaultConfig () {\n return DEFAULT_CONFIGURATION;\n }\n\n /**\n * This function is used to return an instance of GridLayout\n *\n * @return {GridLayout} Instance of grid layout.\n * @static\n * @memberof GridLayout\n */\n static create () {\n return new GridLayout(null, null, this.defaultMeasurement(), this.defaultConfig());\n }\n\n /**\n * Sets/Gets the matrices for the layout\n *\n * @param {Array} matrices Set of matrices\n * @return {Object} Getter/Setter\n * @memberof GridLayout\n */\n matrices (matrices) {\n if (matrices) {\n this._matrices = generateVisualMatrices(this, matrices);\n return this;\n }\n return super.matrices(matrices);\n }\n\n /**\n * Triggers the computations for the layout based on the matrices available\n * This causes a reflow in the entire layout system.\n *\n * @return {Object} Layout instance\n * @memberof GridLayout\n */\n triggerReflow () {\n this.scrollInfo({ horizontal: false, vertical: false });\n const {\n maxHeightAvailableForRowMatrix,\n maxWidthAvailableForColumnMatrix\n } = computeLayoutMeasurements(this);\n\n this.setViewInformation(maxHeightAvailableForRowMatrix, maxWidthAvailableForColumnMatrix);\n return this;\n }\n\n gotoPage (type, pageNumber) {\n const pageType = type.toLowerCase();\n const { viewMatricesInfo } = this.viewInfo();\n const totalPages = viewMatricesInfo[`${pageType}Pages`];\n const pointer = Math.min(Math.max(1, pageNumber), totalPages);\n this.config({\n [`${pageType}Pointer`]: pointer - 1\n });\n this.setViewInformation();\n this.renderGrid();\n return this;\n }\n\n pages (type) {\n const { viewMatricesInfo } = this.viewInfo();\n const pageType = type.toLowerCase();\n return {\n totalPages: viewMatricesInfo[`${pageType}Pages`],\n currentPage: this.config()[`${pageType}Pointer`] + 1\n };\n }\n\n viewInfo (...viewInfo) {\n if (viewInfo.length) {\n this._viewInfo = viewInfo[0];\n return this;\n }\n return this._viewInfo;\n }\n\n scrollInfo (...scrollInfo) {\n if (scrollInfo.length) {\n this._scrollInfo = mergeRecursive(this._scrollInfo, scrollInfo[0]);\n return this;\n }\n return this._scrollInfo;\n }\n\n /**\n *\n *\n * @returns\n * @memberof GridLayout\n */\n setViewInformation (maxRowHeight, maxColWidth) {\n const {\n rowPointer,\n columnPointer,\n border\n } = this.config();\n const viewMatricesInfo = getViewMatrices(this, rowPointer, columnPointer);\n const layoutDimensions = getViewMeasurements(this, maxRowHeight, maxColWidth);\n layoutDimensions.border = border;\n this.viewInfo({\n viewMatricesInfo,\n layoutDimensions\n });\n return this;\n }\n}\n","import RowMatrix from '../visual-matrix/row-matrix';\nimport ColumnMatrix from '../visual-matrix/column-matrix';\n\nexport const generateVisualMatrices = (context, matrices) => {\n // Set of matrices for layout is generated starting with the left matrix\n let leftMatrix = [];\n let rightMatrix = [];\n let topMatrix = [];\n let bottomMatrix = [];\n let begColCells;\n let endColCells;\n const {\n isRowSizeEqual,\n isColumnSizeEqual,\n gutterSpace,\n distribution,\n border,\n breakPage,\n priority\n } = context.config();\n const {\n minUnitHeight,\n minUnitWidth\n } = context.measurement();\n const { top, center, bottom } = matrices;\n const [topLeft, topColumns, topRight] = top;\n const [leftRows, valueMatrix, rightRows] = center;\n const [bottomLeft, bottomColumns, bottomRight] = bottom;\n\n if (leftRows.length > 0) {\n // If no left matrix is present, context will be empty\n leftMatrix = [...topLeft, ...leftRows, ...bottomLeft];\n }\n if (rightRows.length > 0) {\n // If no right matrix is present, context will be empty\n rightMatrix = [...topRight, ...rightRows, ...bottomRight];\n }\n if (topColumns.length > 0 && topColumns[0].length > 0) {\n // If no top matrix is present, context will be empty\n topMatrix = topColumns.map((d, i) => [...topLeft[i], ...d, ...topRight[i]]);\n }\n if (bottomColumns.length > 0 && bottomColumns[0].length > 0) {\n // If no bottom matrix is present, context will be empty\n bottomMatrix = bottomColumns.map((d, i) => [...bottomLeft[i], ...d, ...bottomRight[i]]);\n }\n\n context.rowMatrix(new RowMatrix([leftMatrix, rightMatrix], {\n isDistributionEqual: isRowSizeEqual,\n distribution: distribution.rows,\n gutter: gutterSpace.rows,\n unitMeasures: {\n width: minUnitWidth,\n height: minUnitHeight,\n border: border.width\n },\n priority: priority.row,\n breakPage: breakPage.rows.map(e => e + Math.max(topLeft.length, topRight.length)),\n extraCellLengths: [topLeft.length, bottomLeft.length]\n }));\n\n if (topLeft.length > 0) {\n begColCells = topLeft[0].length;\n } else {\n begColCells = bottomLeft.length > 0 ? bottomLeft[0].length : 0;\n }\n\n if (topRight.length > 0) {\n endColCells = topRight[0].length;\n } else {\n endColCells = bottomRight.length > 0 ? bottomRight[0].length : 0;\n }\n\n context.columnMatrix(new ColumnMatrix([topMatrix, bottomMatrix], {\n isDistributionEqual: isColumnSizeEqual,\n distribution: distribution.columns,\n gutter: gutterSpace.columns,\n isTransposed: true,\n unitMeasures: {\n width: minUnitWidth,\n height: minUnitHeight,\n border: border.width\n },\n priority: priority.col,\n breakPage: breakPage.columns,\n extraCellLengths: [begColCells, endColCells]\n }));\n context.centerMatrix(valueMatrix);\n\n return matrices;\n};\n","import {\n TOP, BOTTOM, LEFT, RIGHT, CENTER, BLANK_BORDERS, COLUMN, ROW,\n VIEW_INDEX, ROW_MATRIX_INDEX, COLUMN_MATRIX_INDEX, MIDDLE, NO_BORDERS\n} from '../enums/constants';\n\nconst borderMap = {\n [`${TOP}-${LEFT}`]: NO_BORDERS,\n [`${TOP}-${MIDDLE}`]: COLUMN,\n [`${TOP}-${RIGHT}`]: NO_BORDERS,\n [`${CENTER}-${LEFT}`]: ROW,\n [`${CENTER}-${MIDDLE}`]: CENTER,\n [`${CENTER}-${RIGHT}`]: ROW,\n [`${BOTTOM}-${LEFT}`]: NO_BORDERS,\n [`${BOTTOM}-${MIDDLE}`]: COLUMN,\n [`${BOTTOM}-${RIGHT}`]: NO_BORDERS\n};\n\nconst applySpecificBorder = (cells, color, type, style) => {\n cells.style(`border-${type}`, `${style} ${color}`);\n};\n\nconst specificBorderApplier = (borderTypes, showBorders, cells, borderInfo) => {\n const {\n color,\n width,\n style\n } = borderInfo;\n const borderStyle = `${width}px ${style}`;\n\n borderTypes.forEach((borderType) => {\n applySpecificBorder(cells, showBorders[borderType] ? color : BLANK_BORDERS, borderType, borderStyle);\n });\n};\n\nconst borderApplier = (cells, borderInfo) => {\n const {\n showRowBorders,\n showColBorders,\n showValueBorders\n } = borderInfo;\n return {\n row: () => specificBorderApplier([TOP, BOTTOM], showRowBorders, cells, borderInfo),\n column: () => specificBorderApplier([LEFT, RIGHT], showColBorders, cells, borderInfo),\n center: () => specificBorderApplier([LEFT, RIGHT, TOP, BOTTOM], showValueBorders, cells, borderInfo)\n };\n};\n\nexport const applyBorders = (cells, border, row, column) => {\n const borderApplierFn = borderApplier(cells, border);\n const borderMapVal = borderMap[`${ROW_MATRIX_INDEX[VIEW_INDEX[row]]}-${COLUMN_MATRIX_INDEX[column]}`];\n if (borderMapVal) {\n borderApplierFn[borderMapVal]();\n }\n};\n","import { selectElement } from 'muze-utils';\nimport {\n TOP, BOTTOM, ROW_SPAN, COL_SPAN, CENTER, ROW, COLUMN\n} from '../enums/constants';\n\nconst orderMaker = arr => Array.from(Array(arr.length).keys());\n\nconst nestByStack = (stack, updateArr, optionalParams = {}) => {\n let {\n order,\n keyFn\n } = optionalParams;\n const arr = updateArr.slice();\n const currStack = stack.slice();\n const prevStack = currStack.slice();\n // Order in which element are to be checked for nesting, default normal looping\n // Order is always in the order of nest, i.e., left to right\n order = order || Array.from(Array(arr.length).keys());\n\n // Key function, if array of objects\n keyFn = keyFn || (v => v);\n\n // Return same array if stack is empty\n if (currStack.length === 0) {\n const newArr = [];\n order.forEach((e) => {\n newArr.push(arr[e]);\n });\n return { prevStack, currStack: arr, arr: newArr };\n }\n\n let arrVal = '';\n let stackVal = '';\n const newArr = [];\n\n // Loop in order\n for (let i = order.length - 1; i >= 0; i--) {\n // Get current element index from the order given\n const currElemIndex = order[i];\n\n // Crete a hashmap for the hierarchy by joining strings of the array for both stack and input array\n arrVal += keyFn(arr[currElemIndex]);\n stackVal += keyFn(currStack[currElemIndex]);\n\n // If the current value and value in stack is same, convert it to null\n if (arrVal === stackVal) {\n newArr[currElemIndex] = null;\n } else {\n stackVal = '';\n // Loop from the current index in order to the last element in order to change the\n // whole hierarchy\n for (let j = i; j < order.length; j++) {\n const newElem = order[j];\n const arrElem = arr[newElem];\n\n newArr[newElem] = arrElem;\n\n // Reset stack to new stack\n currStack[newElem] = arrElem;\n stackVal = arrVal;\n }\n }\n }\n const returnArr = [];\n order.forEach((e) => {\n returnArr.push(newArr[e]);\n });\n return { prevStack, currStack, arr: returnArr };\n};\n\nconst spanCalculator = (colData, colIdx, matrix, rIdx) => {\n // if data is not header cell then rowspan\n // has to be 1\n if (!colData) {\n return () => 1;\n }\n\n const conditions = {\n row: count => matrix[rIdx + count] && matrix[rIdx + count][colIdx],\n column: count => matrix[rIdx][colIdx + count]\n };\n\n return (type) => {\n let count = 1;\n let isNull = false;\n\n while (!isNull) {\n if (conditions[type](count) === null) {\n count += 1;\n } else {\n isNull = true;\n }\n }\n return count;\n };\n};\n\nconst maskCreator = (matrix, order) => ({\n row: () => {\n let stack = [];\n return matrix.map((e) => {\n const {\n currStack,\n arr\n } = nestByStack(stack, e, { keyFn: val => val.valueOf(), order });\n\n stack = currStack;\n return arr;\n });\n },\n column: () => {\n let stack = [];\n const viewMatrix = [];\n matrix.length && matrix[0].forEach((cell, colIndex) => {\n const hierarchy = [];\n matrix.forEach((row) => {\n hierarchy.push(row[colIndex]);\n });\n const {\n currStack,\n arr\n } = nestByStack(stack, hierarchy, { keyFn: val => val.valueOf(), order });\n stack = currStack;\n\n matrix.forEach((row, rowIndex) => {\n viewMatrix[rowIndex] = viewMatrix[rowIndex] || [];\n viewMatrix[rowIndex][colIndex] = arr[rowIndex];\n });\n });\n return viewMatrix;\n }\n});\n\nconst spanGenerator = viewMatrix => ({\n row: () => {\n const spans = [];\n viewMatrix.forEach((row, ridx) => {\n spans[ridx] = spans[ridx] || [];\n row.forEach((col, i) => {\n if (viewMatrix[ridx][i]) {\n const currSpan = spanCalculator(col, i, viewMatrix, ridx)('row');\n currSpan && spans[ridx].push(currSpan);\n }\n });\n });\n return spans;\n },\n column: () => viewMatrix.map((row, ridx) => row.map((col, i) => spanCalculator(col, i, viewMatrix, ridx)('column'))\n .filter(col => col !== 1))\n});\n\nconst getOrder = isReverse => ({\n row: (matrix) => {\n if (isReverse) {\n return orderMaker(matrix[0]).reverse();\n }\n return orderMaker(matrix[0]);\n },\n column: (matrix) => {\n if (isReverse) {\n return orderMaker(matrix).reverse();\n }\n return orderMaker(matrix);\n }\n});\n\nconst matrixSpanGeneratorMap = {\n [`${TOP}-1`]: {\n orderGetter: getOrder(false)[COLUMN],\n viewMatrixMaker: (...params) => maskCreator(...params)[COLUMN],\n spanMaker: (...params) => spanGenerator(...params)[COLUMN]\n },\n [`${BOTTOM}-1`]: {\n orderGetter: getOrder(true)[COLUMN],\n viewMatrixMaker: (...params) => maskCreator(...params)[COLUMN],\n spanMaker: (...params) => spanGenerator(...params)[COLUMN]\n },\n [`${CENTER}-0`]: {\n orderGetter: getOrder(false)[ROW],\n viewMatrixMaker: (...params) => maskCreator(...params)[ROW],\n spanMaker: (...params) => spanGenerator(...params)[ROW]\n },\n [`${CENTER}-2`]: {\n orderGetter: getOrder(true)[ROW],\n viewMatrixMaker: (...params) => maskCreator(...params)[ROW],\n spanMaker: (...params) => spanGenerator(...params)[ROW]\n }\n};\n\nconst matrixSpanGenerator = (type) => {\n const generator = matrixSpanGeneratorMap[type];\n if (generator) {\n return generator;\n }\n return {\n orderGetter: () => null,\n viewMatrixMaker: matrix => () => matrix,\n spanMaker: () => () => null\n };\n};\n\n/**\n * This function is used to set the col and row spans\n * for the matrices based on repeated/hierarchichal data\n *\n * @export\n * @param {Array} matrix The 2d array for which filtering is to be done\n * @param {string} type Type of array (center, top, bottom)\n * @param {number} index Index of array in the row\n * @return {Object} containing the view matrix and their spans\n */\nexport function cellSpanMaker (matrix, type, index) {\n let spans = null;\n let viewMatrix = matrix;\n const {\n orderGetter,\n viewMatrixMaker,\n spanMaker\n } = matrixSpanGenerator(`${type}-${index}`);\n\n if (matrix.length) {\n const order = orderGetter(matrix);\n viewMatrix = viewMatrixMaker(matrix, order)();\n spans = spanMaker(viewMatrix)();\n }\n return { viewMatrix, spans };\n}\n\nconst spaceAllocationDueToSpan = (span, placeholder, borderWidth) => {\n const height = placeholder.availHeight();\n const width = placeholder.availWidth();\n\n return {\n [ROW_SPAN] () {\n selectElement(this).style('height', `${height + borderWidth}px`);\n if (span > 1) {\n selectElement(this).style('height', `${height * span + borderWidth * (span)}px`);\n placeholder.setAvailableSpace(width, height * span);\n }\n },\n [COL_SPAN] () {\n if (span > 1) {\n placeholder.setAvailableSpace(width * span + borderWidth * (span - 1), height);\n }\n selectElement(this).style('height', `${height}px`);\n }\n };\n};\n\nconst spanApplier = (cells, spans, config, type) => {\n const borderWidth = config.border.width;\n\n cells.attr(type, function (cell, colIndex) {\n const span = spans[cell.rowIndex][colIndex];\n const placeholder = cell.placeholder;\n\n spaceAllocationDueToSpan(span, placeholder, borderWidth)[type].bind(this)();\n return span;\n });\n};\n\nconst spanApplierMap = {\n [`${TOP}-0`]: null,\n [`${TOP}-1`]: (...params) => spanApplier(...params, COL_SPAN),\n [`${TOP}-2`]: null,\n [`${CENTER}-0`]: (...params) => spanApplier(...params, ROW_SPAN),\n [`${CENTER}-1`]: null,\n [`${CENTER}-2`]: (...params) => spanApplier(...params, ROW_SPAN),\n [`${BOTTOM}-0`]: null,\n [`${BOTTOM}-1`]: (...params) => spanApplier(...params, COL_SPAN),\n [`${BOTTOM}-2`]: null\n};\n\nexport const applySpans = (cells, spans, config, type) => {\n const applier = spanApplierMap[type];\n if (applier) {\n applier(cells, spans, config);\n }\n};\n","import { ERROR_MSG } from 'muze-utils';\n/**\n * An Interface to be implemented if the transaction support is necessary. This class ensures reactivity to\n * global properties.\n */\nexport default class TransactionSupport {\n /**\n * Property accessor for data member of the class. Data is passed to the system by calling this method.\n */\n data () {\n throw new Error(ERROR_MSG.INTERFACE_IMPl);\n }\n\n /**\n * Property accessor for width of the class. Width is passed as an integer.\n */\n width () {\n throw new Error(ERROR_MSG.INTERFACE_IMPl);\n }\n\n /**\n * Property accessor for height of the class. Height is passed as an integer.\n */\n height () {\n throw new Error(ERROR_MSG.INTERFACE_IMPl);\n }\n\n /**\n * Property accessor for config of the class. Config is passed as an object.\n */\n config () {\n throw new Error(ERROR_MSG.INTERFACE_IMPl);\n }\n}\n","import { TOP, BOTTOM, LEFT, TITLE, SUB_TITLE, GROUP, LAYOUT, LEGEND } from '../constants';\n\n/**\n *\n *\n * @param {*} context\n *\n */\nexport const arrangeComponents = (context) => {\n const legendConfig = context.config().legend;\n const titleConfig = context.title()[1];\n const subtitleConfig = context.subtitle()[1];\n const titleLayouts = {\n [`${TOP}-${TOP}`]: [TITLE, SUB_TITLE, GROUP],\n [`${BOTTOM}-${BOTTOM}`]: [GROUP, SUB_TITLE, TITLE],\n [`${TOP}-${BOTTOM}`]: [TITLE, GROUP, SUB_TITLE],\n [`${BOTTOM}-${TOP}`]: [SUB_TITLE, GROUP, TITLE]\n };\n const legendLayouts = [\n [LEGEND, LAYOUT],\n [LAYOUT, LEGEND]\n ];\n const titlePosition = titleConfig.position || TOP;\n const subtitlePosition = subtitleConfig.position || TOP;\n\n return {\n headers: titleLayouts[`${titlePosition}-${subtitlePosition}`],\n legends: legendConfig.position === LEFT || legendConfig.position === TOP ?\n legendLayouts[0] : legendLayouts[1]\n };\n};\n","/**\n * Flag to specify whether direction is vertical.\n */\nexport const MARGIN = 'margin';\nexport const LEFT = 'left';\nexport const RIGHT = 'right';\nexport const BOTTOM = 'bottom';\nexport const TOP = 'top';\nexport const SPACE_FIXER = 'spaceFixer';\nexport const CLASSPREFIX = 'muze';\nexport const VERTICAL_ALIGN = 'verticalAlign';\nexport const TEXT_ALIGN = 'textAlign';\nexport const IS_OFFSET = 'isOffset';\nexport const MIDDLE = 'middle';\nexport const BASELINE = 'baseline';\nexport const SHOW = 'show';\nexport const CENTER = 'center';\nexport const TEXT = 'text';\nexport const HEADER = 'header';\nexport const HEIGHT = 'height';\nexport const WIDTH = 'width';\nexport const DATA = 'data';\nexport const AXES = 'axes';\nexport const FACET_BY_FIELDS = 'facetByFields';\nexport const FIELDS = 'fields';\nexport const TRANSFORM = 'transform';\nexport const LAYER_DEF = 'layerDef';\nexport const CONFIG = 'config';\nexport const DETAIL_FIELDS = 'detailFields';\nexport const MAX_LINES = 'maxLines';\nexport const MIN_CHARS = 'minCharacters';\nexport const ROTATION = 'rotation';\n\nexport const TEXT_CELL = 'text-cell';\nexport const AXIS_CELL = 'axis-cell';\nexport const GEOM_CELL = 'geom-cell';\nexport const BLANK_CELL = 'blank-cell';\n","// eneum to refer to simple cell\nexport const SIMPLE = 'simple';\n// eneum to refer to header cell\nexport const TEXT = 'text';\n// enum to refer to axis cell\nexport const AXIS = 'axis';\n// enum to refer to visual cell\nexport const GEOM = 'geom';\n// enum to refer blank cell\nexport const BLANK = 'blank';\n","import {\n ERROR_MSG,\n getUniqueId,\n mergeRecursive\n} from 'muze-utils';\nimport { SIMPLE } from './enums/cell-type';\n\n/**\n * This file declares a class that is used as an interface to create new\n * SimpleCell elements.\n * @module SimpleCell\n */\n/**\n * Base class for all table cells.\n *\n * @interface\n * @class SimpleCell\n */\nclass SimpleCell {\n\n /**\n * Creates an instance of SimpleCell.\n *\n * @param {*} config The input configuration.\n * @memberof SimpleCell\n */\n constructor (config) {\n this._id = getUniqueId();\n\n const defConfig = mergeRecursive({}, this.constructor.defaultConfig());\n this._config = mergeRecursive(defConfig, config || {});\n\n this._mount = null;\n }\n\n /**\n * Returns the type of the placehlder.\n *\n * @readonly\n * @memberof SimpleCell\n */\n get type () {\n return SIMPLE;\n }\n\n /**\n * Returns the type of the placehlder.\n *\n * @readonly\n * @memberof SimpleCell\n * @return {Object} Default config for the placeholder\n */\n static defaultConfig () {\n return {};\n }\n\n /**\n * Returns the value contained by the SimpleCell.\n *\n * @memberof SimpleCell\n */\n valueOf () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Returns a unique identifier for the instance used\n * to control selective rendering.\n *\n * @memberof SimpleCell\n */\n id () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Returns a serialized representation of the instance.\n *\n * @memberof SimpleCell\n */\n serialize () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Returns an object with width and height fields\n * specifying the space taken up by this metod.\n *\n * @memberof SimpleCell\n */\n getLogicalSpace () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Method used to set the space available to render the SimpleCell\n *\n * @param {number} width The available width.\n * @param {number} height The available height.\n * @memberof SimpleCell\n */\n setAvailableSpace () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Render the SimpleCell inthe supplied mount point.\n *\n * @param {HTMLElement} mount The mount point to render in.\n * @memberof SimpleCell\n */\n render () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Render the SimpleCell inthe supplied mount point.\n *\n * @param {HTMLElement} mount The mount point to render in.\n * @memberof SimpleCell\n */\n remove () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n}\n\nexport default SimpleCell;\n","/**\n * This file exports variables that are used as defaults for\n * the placeholders\n */\nimport * as CONSTANTS from './constants';\n\n /**\n * Default Configuration for the cells\n * @return {Object} Default configuration\n */\nexport const DEFAULT_CONFIG = {\n [CONSTANTS.MARGIN]: {\n [CONSTANTS.LEFT]: 0,\n [CONSTANTS.RIGHT]: 0,\n [CONSTANTS.TOP]: 0,\n [CONSTANTS.BOTTOM]: 0\n },\n [CONSTANTS.SPACE_FIXER]: 2,\n [CONSTANTS.IS_OFFSET]: false,\n [CONSTANTS.VERTICAL_ALIGN]: null,\n [CONSTANTS.TEXT_ALIGN]: CONSTANTS.CENTER,\n [CONSTANTS.SHOW]: true,\n [CONSTANTS.MAX_LINES]: 0,\n [CONSTANTS.MIN_CHARS]: 0,\n [CONSTANTS.ROTATION]: null\n};\n","import { mergeRecursive } from 'muze-utils';\nimport { GEOM, TEXT, AXIS, BLANK } from './enums/cell-type';\n\nconst DEFAULT_PROPS = {\n mount: {},\n availHeight: {},\n availWidth: {},\n config: {\n sanitization: (context, value) => mergeRecursive(context._config, value)\n },\n logicalSpace: {},\n minSpacing: {},\n source: {}\n};\n\nconst geomProps = {\n data: {},\n caption: {},\n config: {},\n axes: {\n sanitization: (context, value) => Object.assign(context._axes, value)\n },\n facetByFields: {},\n fields: {},\n transform: {},\n layerDef: {},\n detailFields: {}\n};\n\nconst textProps = {\n smartText: {}\n};\nexport const PROPS = {\n [GEOM]: mergeRecursive(geomProps, DEFAULT_PROPS),\n [TEXT]: mergeRecursive(textProps, DEFAULT_PROPS),\n [AXIS]: DEFAULT_PROPS,\n [BLANK]: DEFAULT_PROPS\n};\n","/**\n * This file declares a class that represents a table cell\n * used to house an axis.\n * @module VisualCell\n */\nimport { selectElement, makeElement, generateGetterSetters } from 'muze-utils';\nimport { CLASSPREFIX, HEIGHT, WIDTH, AXIS_CELL } from './enums/constants';\nimport SimpleCell from './simple-cell';\nimport { DEFAULT_CONFIG } from './enums/defaults';\nimport { AXIS } from './enums/cell-type';\nimport { PROPS } from './props';\n\n/**\n * Computes the logical space of the an axis instance within an axis cell\n *\n * @param {Object} context Required to get the needed parameters to compute axis space\n * @return {Object} Returns the logical space for axis\n */\nconst computeAxisSpace = (context) => {\n let logicalWidth;\n let logicalHeight;\n const axis = context.source();\n const {\n spaceFixer,\n margin\n } = context.config();\n const {\n width,\n height\n } = axis.getLogicalSpace();\n const {\n show\n } = axis.config();\n if (show === true) {\n logicalHeight = Math.floor(height + margin.top + margin.bottom + spaceFixer);\n logicalWidth = Math.floor(width + margin.left + margin.right + spaceFixer);\n } else {\n [logicalWidth, logicalHeight] = [width, height];\n }\n return {\n width: logicalWidth,\n height: logicalHeight\n };\n};\n\n/**\n * Represents an axis cell.\n *\n * @class Axis\n */\nclass AxisCell extends SimpleCell {\n\n /**\n * Creates an instance of AxisCell.\n *\n * @param {Object} config The input config.\n * @memberof AxisCell\n */\n constructor (config) {\n super(config);\n\n this._axis = null;\n this._availHeight = null;\n this._availWidth = null;\n this._logicalSpace = null;\n\n generateGetterSetters(this, PROPS[AXIS]);\n }\n\n /**\n * return the type pf SimpleCell cell.\n *\n * @readonly\n * @memberof AxisCell\n */\n get type () {\n return AXIS;\n }\n\n /**\n * This method return the value conatined by this SimpleCell.\n *\n * @return {SimpleAxis | ColorAxis} Instance of SimpleAxis or ColorAxis.\n * @memberof AxisCell\n */\n valueOf () {\n return this.source().id;\n }\n\n /**\n * This method return the unique identififer of the axis\n *\n * @return {string} Id of the axis.\n * @memberof AxisCell\n */\n get id () {\n return this._id;\n }\n\n /**\n * Retrns the serialized representation of this cell.\n *\n * @return {Object}Object with serializable props.\n * @memberof AxisCell\n */\n serialize () {\n return {\n type: AXIS,\n axis: this.source().serialize()\n };\n }\n\n /**\n * return the default configuration for the text cell\n *\n * @static\n * @return {Object} Default configuration of the cell\n * @memberof AxisCell\n */\n static defaultConfig () {\n return DEFAULT_CONFIG;\n }\n\n /**\n * return the space taken up by an axis element in the dom.\n *\n * @return {Object} Object with width and height fields.\n * @memberof AxisCell\n */\n getLogicalSpace () {\n if (!this.logicalSpace()) {\n this.logicalSpace(computeAxisSpace(this));\n }\n return this.logicalSpace();\n }\n\n /**\n * This method is used to set the space availiable to render\n * the SimpleCell.\n *\n * @param {number} width The width of SimpleCell.\n * @param {number} height The height of SimpleCell.\n * @return {Instance} Returns current Instance\n * @memberof AxisCell\n */\n setAvailableSpace (width, height) {\n this.availWidth(width);\n this.availHeight(height);\n const {\n margin,\n isOffset\n } = this.config();\n\n if (width || height) {\n this.source().setAvailableSpace(width, height, margin, isOffset);\n this.source().logicalSpace(null);\n } else {\n this.source().resetLogicalSpace();\n }\n this.logicalSpace(null);\n return this;\n }\n\n /**\n * This method is used to render the axis inside the axis cell.\n *\n * @param {HTMLElement} mount The mount point.\n * @return {Selection} node where axis mounted\n * @memberof AxisCell\n */\n /* istanbul ignore next */render (mount) {\n if (!mount) {\n return this;\n }\n const axis = this.source();\n const availHeight = this.availHeight();\n const availWidth = this.availWidth();\n const {\n margin\n } = this.config();\n const {\n top,\n bottom,\n left,\n right\n } = margin;\n const {\n show,\n orientation\n } = axis.config();\n const wrapperDiv = makeElement(selectElement(mount), 'div', [this], `${CLASSPREFIX}-${AXIS_CELL}`);\n const selection = makeElement(wrapperDiv, 'svg', [1], `${CLASSPREFIX}-axis-container`);\n selection.classed(`${CLASSPREFIX}-axis-container-${orientation}`, true);\n\n this.mount(mount);\n if (!availWidth) {\n selection.attr(WIDTH, `${0}px`);\n }\n if (!availHeight) {\n selection.attr(HEIGHT, `${0}px`);\n }\n wrapperDiv.style(WIDTH, `${show ? Math.floor(availWidth) : 0}px`)\n .style(HEIGHT, `${show ? Math.floor(availHeight) : 0}px`)\n .style('margin-top', top)\n .style('margin-bottom', bottom)\n .style('margin-left', left)\n .style('margin-right', right);\n\n axis.mount(selection.node());\n return selection;\n }\n\n /**\n * Disposes the cell\n *\n * @return {Instance} Current instance of AxisCell\n * @memberof AxisCell\n */\n remove () {\n this.source() && this.source().remove();\n this.mount() && this.mount().remove();\n return this;\n }\n}\n\nexport default AxisCell;\n\n","/**\n * This file declares a class that represents a BLANK element in a table.\n * @module VisualCell\n */\nimport {\n selectElement,\n makeElement,\n applyStyle,\n generateGetterSetters\n } from 'muze-utils';\nimport SimpleCell from './simple-cell';\nimport { CLASSPREFIX, BLANK_CELL } from './enums/constants';\nimport { BLANK } from './enums/cell-type';\nimport { DEFAULT_CONFIG } from './enums/defaults';\nimport { PROPS } from './props';\n\n/**\n * Represents a table haeder.\n *\n * @class BLANK\n */\nclass BlankCell extends SimpleCell {\n\n /**\n * Creates an instance of BLANK.\n * @param {Object} config The input configuration.\n * @memberof BLANK\n */\n constructor (config) {\n super(config);\n\n generateGetterSetters(this, PROPS[BLANK]);\n }\n\n /**\n * return the type pf SimpleCell cell.\n *\n * @readonly\n * @memberof BlankCell\n */\n get type () {\n return BLANK;\n }\n\n /**\n * This method return the value contained by this SimpleCell.\n *\n * @return {string} The text value contained by this cell.\n * @memberof BlankCell\n */\n valueOf () {\n return this.id;\n }\n\n /**\n * return the default configuration for the text cell\n *\n * @static\n * @return {Object} Default configuration of the cell\n * @memberof BlankCell\n */\n static defaultConfig () {\n return DEFAULT_CONFIG;\n }\n\n /**\n * This method is used to return a unique identifier for\n * the BLANK cell.\n *\n * @return {string} The unique identifier for the BLANK.\n * @memberof BlankCell\n */\n get id () {\n return this._id;\n }\n\n /**\n * This method is used to obtain a serialized representation of this instance.\n *\n * @return {Object} Object with serilizable props.\n * @memberof BLANK\n */\n serialize () {\n return {\n type: BLANK\n };\n }\n\n /**\n * This method return the space taken up\n * by the text with the style applied.\n *\n * @return {Object} width and height taken up by the text.\n * @memberof BLANK\n */\n getLogicalSpace () {\n if (!this.logicalSpace()) {\n return {\n width: this.width || 0,\n height: this.height || 0\n };\n }\n return this.logicalSpace();\n }\n\n /**\n * This method is used to set the available space.\n *\n * @param {number} width The available width.\n * @param {number} height The available height.\n * @return {Instance} Returns current Instance\n * @memberof BlankCell\n */\n setAvailableSpace (width, height) {\n this.availWidth(width);\n this.availHeight(height);\n this.logicalSpace(null);\n return this;\n }\n\n /**\n * This method is used to render the BLANK cell inside\n * the provided mount point.\n *\n * @param {HTMLElement} mount The mount point for this cell.\n * @return {Instance} Returns current Instance\n * @memberof BLANK\n */\n /* istanbul ignore next */render (mount) {\n if (mount) {\n const { style } = this.config();\n // append span element to mount point\n this.mount(mount);\n const container = selectElement(mount);\n const elem = makeElement(container, 'div', [this.id]);\n elem.classed(`${CLASSPREFIX}-${BLANK_CELL}`, true);\n elem.style('width', `${this.availWidth()}px`);\n elem.style('height', `${this.availHeight()}px`);\n elem.html('');\n // apply style on the returned element\n if (style) {\n applyStyle(elem, style);\n }\n } return this;\n }\n\n /**\n * Removes the cell(Disposal)\n *\n * @return {Instance} Returns current Instance\n * @memberof BlankCell\n */\n remove () {\n this.mount() && this.mount().remove();\n return this;\n }\n }\nexport default BlankCell;\n","/**\n * This file declares a class that represents a Text element in a table.\n * @module VisualCell\n */\n\nimport {\n selectElement,\n makeElement,\n getSmartComputedStyle,\n generateGetterSetters\n} from 'muze-utils';\nimport SimpleCell from './simple-cell';\nimport { TEXT } from './enums/cell-type';\nimport { PROPS } from './props';\nimport { DEFAULT_CONFIG } from './enums/defaults';\nimport { CLASSPREFIX, TOP, BOTTOM, LEFT, RIGHT, HEADER, WIDTH, TEXT_CELL } from './enums/constants';\nimport './text-cell.scss';\n\nconst setSmartText = (context) => {\n const source = context.source();\n const {\n height: minHeightSpace,\n width: minWidthSpace\n } = context.minSpacing();\n const {\n margin,\n rotation\n } = context.config();\n const {\n left,\n right,\n top,\n bottom\n } = margin;\n const paddedHeight = top + bottom + minHeightSpace;\n const paddedWidth = left + right + minWidthSpace;\n const availHeight = context.availHeight() - paddedHeight;\n const availWidth = context.availWidth() - paddedWidth;\n const labelManager = context.dependencies().labelManager;\n\n labelManager.setStyle(context._computedStyle);\n\n !rotation && context.smartText(labelManager.getSmartText(source, availWidth, availHeight, false));\n rotation && context.smartText(labelManager.getSmartText(source, availHeight, availWidth, true));\n\n return context;\n};\n\n/**\n* Computes the Logical Space for the text\n*\n* @param {Object} context Required to get the needed parameters to compute text space\n* @return {Object} Logical space taken up by text\n* @memberof TextCell\n*/\nconst computeTextSpace = (context) => {\n const { labelManager } = context.dependencies();\n const {\n height: minHeightSpace,\n width: minWidthSpace\n } = context.minSpacing();\n const {\n margin,\n show,\n maxLines,\n minCharacters\n } = context.config();\n const {\n left,\n right,\n top,\n bottom\n } = margin;\n const paddedHeight = top + bottom + minHeightSpace;\n const paddedWidth = left + right + minWidthSpace;\n const availHeight = context.availHeight() - paddedHeight;\n const availWidth = context.availWidth() - paddedWidth;\n const source = context.source();\n const space = context.smartText();\n const minText = new Array(minCharacters).fill('W').join('');\n const _minTextSpace = labelManager.getOriSize(minText);\n\n context.config({ rotation: false });\n if (space.width > (availWidth || 0) && maxLines) {\n space.height = space.oriTextHeight * maxLines;\n }\n if (availWidth && availWidth < space.width) {\n space.width = _minTextSpace.width;\n }\n if (availWidth && availWidth < Math.min(_minTextSpace.width, space.oriTextWidth)) {\n const smartSpace = labelManager.getSmartText(source, availHeight, _minTextSpace.height, true);\n space.width = smartSpace.height;\n space.height = smartSpace.width;\n context.config({ rotation: true });\n context.smartText(smartSpace);\n }\n\n if (show) {\n return {\n width: Math.ceil(space.width) + paddedWidth,\n height: Math.ceil(space.height) + paddedHeight\n };\n } return {\n width: 0,\n height: 0\n };\n};\n\n/**\n * Represents a table haeder.\n *\n * @class Text\n */\nclass TextCell extends SimpleCell {\n\n /**\n * Creates an instance of Text.\n * @param {Object} config The input configuration.\n * @param {string} dependencies Dependencies for the class(labelManager)\n * @memberof Text\n */\n constructor (config, dependencies) {\n super(config);\n\n this._dependencies = dependencies;\n this._className = this._config.className ||\n (this._config.type === HEADER ? `${CLASSPREFIX}-${HEADER}-cell` : `${CLASSPREFIX}-${TEXT}-cell`);\n this._computedStyle = getSmartComputedStyle(selectElement('body'), this._className);\n this._dependencies.labelManager.setStyle(this._computedStyle);\n generateGetterSetters(this, PROPS[TEXT]);\n const space = this._dependencies.labelManager.getOriSize('w');\n this.minSpacing({ width: Math.floor(space.width * 3 / 4), height: Math.floor(space.height / 2) });\n setSmartText(this);\n }\n\n /**\n * return the type pf SimpleCell cell.\n *\n * @readonly\n * @memberof TextCell\n */\n get type () {\n return TEXT;\n }\n\n /**\n * This method return the value contained by this SimpleCell.\n *\n * @return {string} The text value contained by this cell.\n * @memberof TextCell\n */\n valueOf () {\n return this.source();\n }\n\n /**\n * This method is used to return a unique identifier for\n * the Text cell.\n *\n * @return {string} The unique identifier for the Text.\n * @memberof TextCell\n */\n get id () {\n return this._id;\n }\n\n /**\n * Returns the dependencies of the instance\n *\n * @return {Object} Dependencies needed by the class\n * @memberof TextCell\n */\n dependencies () {\n return this._dependencies;\n }\n\n /**\n * This method is used to obtain a serialized representation of this instance.\n *\n * @return {Object} Object with serilizable props.\n * @memberof TextCell\n */\n serialize () {\n return {\n text: this.source(),\n type: TEXT\n };\n }\n\n /**\n * return the default configuration for the text cell\n *\n * @static\n * @return {Object} Default configuration of the cell\n * @memberof TextCell\n */\n static defaultConfig () {\n return DEFAULT_CONFIG;\n }\n\n /**\n * This method return the space taken up\n * by the text with the style applied.\n *\n * @return {Object} width and height taken up by the text.\n * @memberof Text\n */\n getLogicalSpace () {\n if (!this.logicalSpace()) {\n this.logicalSpace(computeTextSpace(this));\n }\n return this.logicalSpace();\n }\n\n /**\n * This method is used to set the available space.\n *\n * @param {number} width The available width.\n * @param {number} height The available height.\n * @return {Instance} Returns current Instance\n * @memberof TextCell\n */\n setAvailableSpace (width, height) {\n this.availWidth(width);\n this.availHeight(height);\n setSmartText(this);\n this.logicalSpace(null);\n return this;\n }\n\n /**\n * This method is used to render the Text cell inside\n * the provided mount point.\n *\n * @param {HTMLElement} mount The mount point for this cell.\n * @return {Instance} Returns current Instance\n * @memberof Text\n */\n render (mount) {\n const availWidth = this.availWidth();\n const availHeight = this.availHeight();\n const {\n margin,\n show,\n verticalAlign,\n textAlign,\n rotation\n } = this.config();\n\n this.mount(mount);\n if (show) {\n const container = selectElement(mount);\n const elem = makeElement(container, 'div', [this.id], `${CLASSPREFIX}-${TEXT_CELL}`);\n const vAlign = verticalAlign || rotation ? 'middle' : 'top';\n const {\n width,\n height\n } = this.smartText();\n const {\n height: minHeightSpace\n } = this.minSpacing();\n const translation = {\n top: width + minHeightSpace / 2,\n middle: width / 2 + minHeightSpace,\n bottom: minHeightSpace\n };\n\n container.style('vertical-align', vAlign);\n\n // Set class name\n elem.classed(this._className, true);\n\n // Apply styles\n elem.style('text-align', textAlign);\n elem.style('display', 'inline');\n elem.style('transform', rotation ? `translate(${height / 2}px,\n ${translation[vAlign]}px) rotate(-90deg)` : '');\n elem.style(WIDTH, availWidth ? `${availWidth}px` : '100%');\n [TOP, BOTTOM, LEFT, RIGHT].forEach((type) => {\n container.style(`margin-${type}`, `${margin[type]}px`);\n });\n elem.style('text-align', textAlign);\n elem.style('display', 'inline');\n // set the text as the innerHTML\n this._dependencies.labelManager.setStyle(this._computedStyle);\n elem.html(this._dependencies.labelManager.getSmartText(this.source(), availWidth, availHeight, true).text);\n }\n return this;\n }\n\n /**\n * Disposes the cell\n *\n * @return {Instance} Returns current Instance\n * @memberof TextCell\n */\n remove () {\n this.mount() && this.mount().remove();\n return this;\n }\n }\n\nexport default TextCell;\n","/**\n * This file declares a class that is used to represent a table cell\n * that houses a visual unit.\n * @module VisualCell\n */\n\nimport { selectElement, makeElement, generateGetterSetters } from 'muze-utils';\nimport SimpleCell from './simple-cell';\nimport { GEOM } from './enums/cell-type';\nimport { PROPS } from './props';\nimport {\n CLASSPREFIX, HEIGHT, WIDTH, DATA, AXES, FACET_BY_FIELDS, FIELDS, TRANSFORM, LAYER_DEF, CONFIG, GEOM_CELL,\n DETAIL_FIELDS\n} from './enums/constants';\nimport { DEFAULT_CONFIG } from './enums/defaults';\n\n/**\n * Calculates the logical space of the cell\n *\n * @param {Object} context Required to get the needed parameters to compute unit space\n * @return {Object} Logical space taken up by the unit\n * @memberof GeomCell\n */\nconst computeGeomSpace = (context) => {\n const config = context.source().config();\n const { width, height } = config;\n return {\n width: Math.ceil(width),\n height: Math.ceil(height + context.getCaptionSpace().height)\n };\n};\n\n /**\n * This class represents a SimpleCell for visual unit.\n *\n * @class GeomCell\n */\nclass GeomCell extends SimpleCell {\n\n /**\n * Creates an instance of GeomCell.\n * @param {Object} config The input configuration.\n * @memberof GeomCell\n */\n constructor (config) {\n super(config);\n\n this._unit = null;\n this._layers = null;\n this._axes = {};\n this._datamodel = {};\n this._facetByFields = {};\n this._fields = null;\n this._transform = null;\n this._caption = null;\n\n generateGetterSetters(this, PROPS[GEOM]);\n }\n\n /**\n * return the type pf SimpleCell cell.\n *\n * @readonly\n * @memberof GeomCell\n */\n get type () {\n return GEOM;\n }\n\n /**\n * This method return the value contained by this cell.\n *\n * @return {VisualUnit} Instance of visual unit contained by visual unit.\n * @memberof GeomCell\n */\n valueOf () {\n return this.source();\n }\n\n /**\n * This method is used to return the id of the\n * visual unit housed by this cell.\n *\n * @return {string} The unique id of the visual unit.\n * @memberof GeomCell\n */\n get id () {\n return this.source().id();\n }\n\n /**\n * This method return a serialized representation of\n * this instance.\n *\n * @return {Object} Object with serializable props.\n * @memberof GeomCell\n */\n serialize () {\n return {\n type: GEOM,\n unit: this.source().serialize(),\n caption: this.caption()\n };\n }\n\n /**\n * return the default configuration for the geom cell\n *\n * @static\n * @return {Object} Default configuration of the cell\n * @memberof GeomCell\n */\n static defaultConfig () {\n return DEFAULT_CONFIG;\n }\n\n /**\n * Updates the model based on the changed parameters\n *\n * @return {Instance} return instance\n * @memberof GeomCell\n */\n updateModel () {\n const unit = this.source();\n unit.lockModel();\n [LAYER_DEF, TRANSFORM, AXES, FIELDS, CONFIG, DATA, AXES, FACET_BY_FIELDS, DETAIL_FIELDS].forEach((prop) => {\n this[prop]() && unit[prop](this[prop]());\n });\n unit.unlockModel();\n return this;\n }\n\n /**\n * It gives the space taken by the caption of the unit\n *\n * @return {Object} return the space taken by caption\n * @memberof GeomCell\n */\n getCaptionSpace () {\n const caption = this.caption();\n\n let captionSpace = { width: 0, height: 0 };\n if (caption) {\n captionSpace = caption.getLogicalSpace();\n }\n return captionSpace;\n }\n\n /**\n * return the space taken up by the element in the dom.\n *\n * @return {Object} Object with width and height fields.\n * @memberof GeomCell\n */\n getLogicalSpace () {\n if (!this.logicalSpace()) {\n this.logicalSpace(computeGeomSpace(this));\n }\n return this.logicalSpace();\n }\n\n /**\n * This method is used to set the space available to\n * render the SimpleCell.\n *\n * @param {number} width The available width.\n * @param {number} height The available height.\n * @return {Instance} Returns current Instance\n * @memberof GeomCell\n */\n setAvailableSpace (width, height) {\n const unit = this.source();\n\n this.availWidth(width);\n this.availHeight(height);\n unit.lockModel();\n unit.width(width).height(height - this.getCaptionSpace().height);\n unit.unlockModel();\n this.logicalSpace(null);\n return this;\n }\n\n /**\n * his method is used to render the visual unit inside the provided cell.\n *\n * @param {HTMLElement} mount The mountpoint in the table.\n * @return {Instance} Returns current Instance\n * @memberof GeomCell\n */\n render (mount) {\n if (mount) {\n this.mount(mount);\n const availHeight = this.availHeight();\n const availWidth = this.availWidth();\n const caption = this.caption();\n const wrapperDiv = makeElement(selectElement(mount), 'div', [1], `${CLASSPREFIX}-${GEOM_CELL}`);\n\n if (caption) {\n const captionDom = makeElement(wrapperDiv, 'div', [caption], `${CLASSPREFIX}-unit-caption`).node();\n caption.render(captionDom);\n }\n const selection = makeElement(wrapperDiv, 'div', [1], `${CLASSPREFIX}-unit`);\n wrapperDiv.style(WIDTH, `${availWidth}px`).style(HEIGHT, `${availHeight}px`);\n selection.style(WIDTH, `${availWidth}px`)\n .style(HEIGHT, `${availHeight - this.getCaptionSpace().height}px`);\n this.source().mount(selection.node());\n }\n return this;\n }\n\n /**\n * Disposes the cell\n *\n * @return {Object} Current instance\n * @memberof GeomCell\n */\n remove () {\n this.mount() && this.mount().remove();\n this.source().remove();\n return this;\n }\n}\n\nexport default GeomCell;\n","import AxisCell from './axis-cell';\nimport BlankCell from './blank-cell';\nimport TextCell from './text-cell';\nimport GeomCell from './geom-cell';\nimport SimpleCell from './simple-cell';\n\nimport * as CONSTANTS from './constants';\n\nexport const DEFAULT_PLACEHOLDERS = {\n [CONSTANTS.SIMPLE_CELL]: SimpleCell,\n [CONSTANTS.TEXT_CELL]: TextCell,\n [CONSTANTS.AXIS_CELL]: AxisCell,\n [CONSTANTS.GEOM_CELL]: GeomCell,\n [CONSTANTS.BLANK_CELL]: BlankCell\n};\n\n","export const SIMPLE_CELL = 'SimpleCell';\nexport const TEXT_CELL = 'TextCell';\nexport const AXIS_CELL = 'AxisCell';\nexport const BLANK_CELL = 'BlankCell';\nexport const GEOM_CELL = 'GeomCell';\n\n","import { DEFAULT_PLACEHOLDERS } from './defaults';\n\n/**\n * Creates a registry for the cells, which can be used for\n * setting a new cell or getting the registered cells\n *\n * @return {Object} Setters and getters for registered cells\n */\nconst cellRegistry = () => {\n const reg = DEFAULT_PLACEHOLDERS;\n return {\n set: (key, def) => {\n if (key in reg) {\n reg[key] = def;\n }\n return cellRegistry;\n },\n get: () => reg\n };\n};\nexport default cellRegistry;\n","import { TextCell } from '@chartshq/visual-cell';\nimport { escapeHTML } from 'muze-utils';\nimport { TOP } from '../constants';\n\n/**\n *\n *\n * @param {*} rawContent\n *\n */\nconst resolveTitleSubTitleContent = (rawContent) => {\n if (typeof rawContent === 'function' && !rawContent._sanitize) {\n return rawContent();\n }\n return escapeHTML(rawContent());\n};\n\n/**\n *\n *\n * @param {*} config\n * @param {*} cellType\n * @param {*} labelManager\n * @param {*} prevCell\n *\n */\nconst headerCreator = (config, cellType, labelManager, prevCell) => {\n let margin = {};\n const {\n content,\n classPrefix,\n maxLines\n } = config;\n const cell = prevCell || new TextCell(\n {\n type: cellType === 'title' ? 'header' : 'text',\n className: `${classPrefix}-${cellType}-cell`\n }, {\n labelManager\n })\n .config({ maxLines }).minSpacing({ width: 0, height: 0 });\n\n cell.source(content);\n cell._minTickDiff = { height: 0, width: 0 };\n\n if (config.position === TOP) {\n margin = { top: 0, bottom: config.padding };\n } else {\n margin = { top: config.padding, bottom: 0 };\n }\n cell.config({ margin });\n\n return {\n height: cell.getLogicalSpace().height,\n cell\n };\n};\n\n/**\n *\n *\n * @param {*} config\n * @param {*} type\n * @param {*} labelManager\n * @param {*} cell\n *\n */\nconst createHeading = (config, type, labelManager, prevCell) => {\n if (!config) { return ''; }\n\n return headerCreator(\n config,\n type,\n labelManager,\n prevCell\n );\n};\n\n/**\n *\n *\n * @param {*} context\n */\nexport const createHeaders = (context, canvasHeight, canvasWidth) => {\n let headerHeight = 0;\n const headers = {};\n const subtitle = context.subtitle();\n const isSubtitle = resolveTitleSubTitleContent(subtitle[0]);\n\n canvasHeight >= 200 && canvasWidth >= 200 && ['title', 'subtitle'].forEach((type) => {\n const headerOptions = context[type]();\n const content = resolveTitleSubTitleContent(headerOptions[0]);\n if (content.length) {\n const config = headerOptions[1];\n\n config.width = context.width();\n config.height = context.height();\n config.classPrefix = context.config().classPrefix;\n config.content = content;\n config.padding = (type === 'title' && !isSubtitle.length) ? subtitle[1].padding : config.padding;\n\n const { height, cell } = createHeading(config, type, context.dependencies().smartlabel,\n context[`${type}Cell`]);\n\n headers[`${type}Cell`] = cell;\n context._composition[type] = cell;\n headerHeight += height;\n }\n });\n return { headerHeight, headers };\n};\n\n","import { TextCell, AxisCell } from '@chartshq/visual-cell';\nimport { getValueParser } from 'muze-utils';\nimport {\n VERTICAL, HORIZONTAL, LEFT, RIGHT, LEGEND_TYPE_MAP, PADDING, BORDER, MARGIN\n} from '../constants';\n\n/**\n *\n *\n * @param {*} legendConfig\n * @param {*} canvases\n *\n */\nexport const legendCreator = (canvas) => {\n let LegendCls;\n const dataset = [];\n const axes = canvas.getRetinalAxes();\n\n Object.entries(axes).forEach((axisInfo) => {\n const scale = axisInfo[1][0];\n const scaleType = axisInfo[0];\n const scaleProps = canvas[scaleType]();\n\n if (scaleProps.field && scale) {\n const {\n type,\n step\n } = scale.config();\n\n const stepMapper = typeof step === 'boolean' ? step : false;\n LegendCls = LEGEND_TYPE_MAP[`${type}-${stepMapper}-${scaleType}`];\n dataset.push({ scale, canvas, fieldName: scaleProps.field, LegendCls, scaleType });\n }\n });\n\n return dataset;\n};\n\n/**\n *\n *\n * @param {*} legendConfig\n * @param {*} canvases\n * @param {*} measurement\n * @param {*} prevLegends\n *\n */\nexport const legendInitializer = (legendConfig, canvas, measurement, prevLegends) => {\n const legends = [];\n const {\n height,\n width,\n headerHeight\n } = measurement;\n const {\n position,\n align\n } = legendConfig;\n\n const legendInfo = legendCreator(canvas);\n const { invalidValues } = canvas.config();\n\n const parser = getValueParser(invalidValues);\n legendInfo.forEach((dataInfo, index) => {\n let legend = {};\n\n const legendMeasures = {};\n const {\n LegendCls,\n scale,\n fieldName,\n scaleType\n } = dataInfo;\n const config = legendConfig[scaleType] || {};\n const title = config.title || {};\n title.text = title.text || fieldName;\n if (config.show) {\n config.position = position;\n config.align = align;\n\n if (prevLegends[index]) {\n legend = prevLegends[index].legend;\n } else {\n legend = LegendCls.create({\n labelManager: canvas._dependencies.smartlabel,\n cells: {\n AxisCell, TextCell\n }\n });\n }\n legendMeasures.maxHeight = align === VERTICAL ? (height - headerHeight) : height * 0.2;\n legendMeasures.maxWidth = align === HORIZONTAL ? width : width * 0.2;\n legendMeasures.width = Math.min(legendMeasures.maxWidth, config.width);\n legendMeasures.height = Math.min(legendMeasures.maxHeight, config.height);\n\n [PADDING, BORDER, MARGIN].forEach((e) => {\n legendMeasures[e] = config[e];\n });\n\n legend.scale(scale)\n .valueParser(parser)\n .title(title)\n .fieldName(fieldName)\n .config(config)\n .metaData(canvas.composition().visualGroup.getGroupByData().project([fieldName]))\n .measurement(legendMeasures)\n .canvasAlias(canvas.alias())\n .setLegendMeasures();\n\n legends.push({ canvas, legend, scaleType });\n }\n });\n return legends;\n};\n\n/**\n *\n *\n * @param {*} legends\n * @param {*} legendConfig\n * @param {*} availableHeight\n * @param {*} availableWidth\n *\n */\nexport const getLegendSpace = (legends, legendConfig, availableHeight, availableWidth) => {\n const legendMeasures = legends.map(legendInfo => legendInfo.legend.measurement());\n const legendSpace = { width: 0, height: 0 };\n\n legendMeasures.forEach((space) => {\n let height = 0;\n let width = 0;\n width = Math.min(space.width, space.maxWidth);\n height = Math.min(space.height, space.maxHeight);\n\n if (legendConfig.align === HORIZONTAL) {\n if (legendSpace.width + width > availableWidth) {\n legendSpace.width = availableWidth;\n legendSpace.height += height;\n } else {\n legendSpace.width += width;\n legendSpace.height = Math.max(legendSpace.height, height);\n }\n } else if (legendSpace.height + height > availableHeight) {\n legendSpace.height = height;\n legendSpace.width += width;\n } else {\n legendSpace.height += height;\n legendSpace.width = Math.max(legendSpace.width, width);\n }\n });\n if (legendConfig.align === HORIZONTAL) {\n legendSpace.width = availableWidth;\n }\n return legendSpace;\n};\n\n/**\n *\n *\n * @param {*} context\n * @param {*} headerHeight\n *\n */\nexport const createLegend = (context, headerHeight, height, width) => {\n const measurement = {\n height,\n width,\n headerHeight\n };\n const { legend } = context.config();\n const { show, position } = legend;\n\n legend.classPrefix = context.config().classPrefix;\n const align = (position === LEFT || position === RIGHT) ? VERTICAL : HORIZONTAL;\n\n legend.show = show ? ((align === VERTICAL && width > 200) || (align === HORIZONTAL && height > 200)) : show;\n legend.align = align;\n return legendInitializer(legend, context, measurement, context.legends || []);\n};\n","import { LayoutComponent } from '../../../../layout/src/tree-layout';\n\nexport default class MuzeComponent extends LayoutComponent {\n getLogicalSpace () {\n const { width, height } = this.boundBox();\n return { width, height };\n }\n\n setSpatialConfig (conf) {\n this.boundBox({ top: conf.y, left: conf.x });\n this.newDimensions = {\n width: conf.width,\n height: conf.height\n };\n this.renderAt(conf.renderAt);\n }\n\n getBoundBox () {\n return this.boundBox();\n }\n\n updateWrapper () {\n throw Error('Update is not implemented');\n }\n\n setParams () {\n throw Error('set params is not implemented');\n }\n}\n","import { selectElement } from 'muze-utils';\nimport MuzeComponent from './muze-chart-component';\nimport { LEFT } from '../../constants';\n\nexport default class HeaderComponent extends MuzeComponent {\n constructor (params) {\n super(params.name, params.component.getLogicalSpace(), 0);\n this.setParams(params);\n }\n\n renderHeader (container) {\n const layoutConfig = this.params.config;\n container = selectElement(container);\n const { align } = layoutConfig;\n const sel = container\n .selectAll(`.${layoutConfig.classPrefix}-inner-container`)\n .data([this.name]);\n sel.exit().remove();\n const selEnter = sel.enter().append('div');\n\n const cont = selEnter.merge(sel);\n cont.classed(`${layoutConfig.classPrefix}-inner-container`, true);\n const { height, width } = this.boundBox();\n this.component.setAvailableSpace(width, height);\n\n this.component && this.component.render(cont.node());\n\n cont.selectAll('div').classed(`${layoutConfig.classPrefix}-inner-content`, true);\n cont.style('width', `${100}%`);\n\n if (layoutConfig && this.component) {\n cont.style('float', LEFT)\n .style('text-align', align);\n // .style(`padding-${position === TOP ? BOTTOM : TOP}`, `${padding}px`);\n }\n }\n\n draw (container) {\n this.renderHeader(container || document.getElementById(this.renderAt()));\n }\n\n updateWrapper (params) {\n this.name(params.name);\n this.boundBox(params.component.getLogicalSpace());\n return this;\n }\n\n setParams (params) {\n this.component = params.component;\n this.params = params;\n this.target(params.config.target);\n this.position(params.config.position);\n this.className(params.config.className);\n this.alignWith(params.config.alignWith);\n this.alignment(params.config.alignment);\n }\n\n setSpatialConfig (conf) {\n this.boundBox({ top: conf.y,\n left: conf.x,\n width: conf.width,\n height: conf.height });\n this.renderAt(conf.renderAt);\n }\n}\n","import { makeElement, selectElement } from 'muze-utils';\nimport MuzeComponent from './muze-chart-component';\nimport {\n LEFT, RIGHT, VERTICAL, HORIZONTAL, TOP, BOTTOM, HORIZONTAL_CENTER, VERTICAL_CENTER\n} from '../../constants';\nimport { ROW_MATRIX_INDEX, COLUMN_MATRIX_INDEX } from '../../../../layout/src/enums/constants';\n\nfunction defaultAlignmentHelper (position) {\n let alignment = null;\n const alignWith = `${ROW_MATRIX_INDEX[1]}-${COLUMN_MATRIX_INDEX[1]}`;\n switch (position) {\n case TOP:\n case BOTTOM:\n alignment = HORIZONTAL_CENTER;\n break;\n case LEFT:\n case RIGHT:\n alignment = VERTICAL_CENTER;\n break;\n default:\n alignment = VERTICAL_CENTER;\n }\n return { alignment, alignWith };\n}\nexport default class LegendComponent extends MuzeComponent {\n constructor (params) {\n super(params.name, params.config.measurement.legendSpace, 0);\n this.setParams(params);\n }\n\n renderLegend (container) {\n container = selectElement(container);\n const sectionComponents = [];\n const { position, classPrefix } = this.params.config;\n const legendMount = makeElement(container, 'div', [this.components],\n `${classPrefix}-inner-content`, {}, d => d);\n legendMount.classed(`${classPrefix}-legend`, true);\n const align = (position === LEFT || position === RIGHT) ? VERTICAL : HORIZONTAL;\n const legWidth = this.newDimensions.width;\n const legHeight = this.newDimensions.height;\n\n [container, legendMount].forEach((elem) => {\n elem.style('width', `${Math.floor(legWidth)}px`)\n .style('height', `${legHeight}px`)\n .style('float', LEFT);\n });\n\n if (align === VERTICAL) {\n let sections = -1;\n let currHeight = legHeight;\n let currWidth = 0;\n\n this.components.forEach((legendInfo) => {\n const leg = legendInfo.legend;\n if (leg.measurement().height > currHeight) {\n sections++;\n currWidth = 0;\n currHeight = legHeight;\n } else {\n sections < 0 && sections++;\n }\n sectionComponents[sections] = sectionComponents[sections] || [];\n currHeight -= Math.min(leg.measurement().height, currHeight);\n currWidth = Math.max(Math.min(leg.measurement().width, leg.measurement().maxWidth), currWidth);\n sectionComponents[sections].push({\n legend: leg,\n legendHeight: legHeight,\n legendWidth: currWidth\n });\n });\n\n const mount = makeElement(legendMount, ['div'], sectionComponents, `${classPrefix}-legend-section`);\n // mount.each((d, i) => selectElement(this).classed(`${classPrefix}-legend-section-${i}`, true));\n mount.classed(`${classPrefix}-legend-vertical-section`, true)\n .style('width', d => `${d[0].legendWidth}px`);\n makeElement(mount, ['div'], d => d, `${classPrefix}-legend-components`, {}, d => d.legend.id())\n .each(function (d) {\n d.legend.mount(this);\n })\n .style('width', d => `${d.legendWidth}px`);\n } else {\n const mount = makeElement(legendMount, 'div', [1], `${classPrefix}-legend-section`);\n mount.classed(`${classPrefix}-legend-horizontal-section`, true);\n mount.classed(`${classPrefix}-legend-section-${0}`, true)\n .style('width', `${legWidth}px`);\n\n makeElement(mount, 'div', this.components, `${classPrefix}-legend-components`, {}, d => d.legend.id())\n .each(function (d) { d.legend.mount(this); })\n .style('width', d => `${d.legend.measurement().width}px`);\n }\n }\n\n draw (container) {\n this.renderLegend(container || document.getElementById(this.renderAt()));\n }\n\n updateWrapper (params) {\n this.name(params.name);\n this.boundBox(params.config.measurement.legendSpace);\n this.setParams(params);\n return this;\n }\n\n setParams (params) {\n this.components = params.component;\n this.params = params;\n this.target(params.config.target);\n this.position(params.config.position);\n const { alignWith, alignment } = defaultAlignmentHelper(params.config.position);\n this.className(params.config.className);\n this.alignWith(params.config.alignWith || alignWith);\n this.alignment(params.config.alignment || alignment);\n }\n\n}\n","import {\n selectElement,\n makeElement,\n getD3Drag,\n getEvent,\n getWindow,\n hasTouch\n} from 'muze-utils';\nimport './scroll-bar.scss';\nimport { WIDTH, HEIGHT } from '../../../constants';\n\nconst d3Drag = getD3Drag();\n\nconst arrowSizeMap = {\n left: WIDTH,\n right: WIDTH,\n top: HEIGHT,\n bottom: HEIGHT\n};\n\nexport const getUnitPositions = (unitMeasures, totalLength, viewLength) => {\n let currentLen = 0;\n const measures = unitMeasures.primary && unitMeasures.primary.length ?\n unitMeasures.primary : unitMeasures.secondary;\n\n return measures.map((e) => {\n const unitPosition = currentLen * 100 / (totalLength - viewLength);\n currentLen += e;\n return unitPosition;\n });\n};\n\nexport const createScrollBarArrow = (mount, type, config) => {\n const {\n classPrefix,\n thickness\n } = config;\n const arrow = makeElement(mount, 'div', [type], `${classPrefix}-scroll-arrow-${type}`);\n\n arrow.classed(`${classPrefix}-scroll-arrow`, true);\n arrow.style(arrowSizeMap[type], `${thickness}px`);\n\n const chevron = makeElement(arrow, 'div', [1], `${classPrefix}-scroll-arrow-chevron`);\n\n chevron.attr('id', `${classPrefix}-scroll-arrow-chevron-${type}`);\n\n return arrow;\n};\n\nexport const createScrollBarRect = (mount, config) => {\n const {\n classPrefix\n } = config;\n const rect = makeElement(mount, 'div', [1], `${classPrefix}-scroll-rect`);\n const mover = makeElement(rect, 'div', [1], `${classPrefix}-scroll-mover`);\n\n return { rect, mover };\n};\n\nexport const applyRectClick = (scrollMaker, moverRect) => {\n const {\n rect\n } = moverRect;\n\n rect.on('click', () => {\n const event = getEvent();\n scrollMaker.emptyScrollAreaClick(event);\n });\n};\n\nconst applyMoverDrag = (scrollMaker, moverRect) => {\n let startPos = {};\n let moverStartPos = 0;\n let endPos = {};\n const {\n mover,\n rect\n } = moverRect;\n const rectStartPos = rect.node().getBoundingClientRect();\n\n mover.call(d3Drag()\n .on('start', () => {\n const event = getEvent();\n\n moverStartPos = mover.node().getBoundingClientRect();\n startPos = {\n x: event.x,\n y: event.y\n };\n })\n .on('drag', () => {\n const event = getEvent();\n const window = getWindow();\n\n endPos = {\n x: event.x,\n y: event.y\n };\n const distanceMoved = {\n x: endPos.x - startPos.x,\n y: endPos.y - startPos.y\n };\n const actualPosition = {\n x: moverStartPos.x + distanceMoved.x - rectStartPos.x + window.pageXOffset,\n y: moverStartPos.y + distanceMoved.y - rectStartPos.y + window.pageYOffset\n };\n\n scrollMaker.changeMoverPosition(actualPosition);\n }));\n};\n\nconst applyScrollMouseDownAction = (moverRect, scrollMaker, speed) => {\n const {\n mover,\n rect\n } = moverRect;\n const { x, y } = mover.node().getBoundingClientRect();\n const { x: rectX, y: rectY } = rect.node().getBoundingClientRect();\n\n scrollMaker.changeMoverPosition({ x: x - rectX + speed, y: y - rectY + speed });\n};\n\nconst registerListenerOnArrow = (scrollMaker, moverRect, arrowType, speed) => {\n let timer = '';\n const arrow = scrollMaker._components[arrowType];\n const isTouchDevice = hasTouch();\n\n arrow.on(isTouchDevice ? 'touchstart' : 'mousedown', () => {\n const event = getEvent();\n\n event.preventDefault();\n\n timer = setInterval(() => {\n applyScrollMouseDownAction(moverRect, scrollMaker, speed);\n }, 100);\n }).on(isTouchDevice ? 'touchend' : 'mouseup', () => {\n const event = getEvent();\n\n event.preventDefault();\n\n clearInterval(timer);\n }).on('click', () => {\n applyScrollMouseDownAction(moverRect, scrollMaker, speed);\n });\n};\n\nexport const registerListeners = (scrollMaker) => {\n const {\n moverRect\n } = scrollMaker._components;\n\n const speed = scrollMaker.config().speed;\n\n registerListenerOnArrow(scrollMaker, moverRect, 'prevArrow', -speed);\n applyMoverDrag(scrollMaker, moverRect);\n applyRectClick(scrollMaker, moverRect);\n registerListenerOnArrow(scrollMaker, moverRect, 'nextArrow', speed);\n};\n\nexport const scrollContainerHelper = (mountPoint, config, dimensions, type) => {\n const {\n classPrefix\n } = config;\n const scrollBarContainer = makeElement(selectElement(mountPoint), 'div', [1], `#${classPrefix}-scroll-bar-${type}`);\n\n scrollBarContainer.classed(`${classPrefix}-scroll-bar`, true);\n scrollBarContainer.style(WIDTH, `${dimensions.width}px`);\n scrollBarContainer.style(HEIGHT, `${dimensions.height}px`);\n return scrollBarContainer;\n};\n\n","import { mergeRecursive } from 'muze-utils';\n\nexport const PROPS = {\n\n config: {\n sanitization: (context, value) => {\n value = mergeRecursive(context._config, value);\n return value;\n }\n },\n manager: {},\n unitPositions: {},\n logicalSpace: {}\n};\n\n","import { ERROR_MSG, generateGetterSetters } from 'muze-utils';\nimport {\n scrollContainerHelper,\n registerListeners\n} from './helper';\nimport { PROPS } from './props';\n\nexport class ScrollMaker {\n\n constructor () {\n this._components = {};\n this._logicalSpace = {};\n this._attachedScrollAction = () => {};\n this._config = {\n thickness: 10,\n speed: 2\n };\n this._unitPositions = null;\n\n generateGetterSetters(this, PROPS);\n }\n\n static type () {\n throw new ERROR_MSG('Method not implemented');\n }\n\n emptyScrollAreaClick () {\n throw new ERROR_MSG('Method not implemented');\n }\n\n changeMoverPosition () {\n throw new ERROR_MSG('Method not implemented');\n }\n\n scrollTo () {\n throw new ERROR_MSG('Method not implemented');\n }\n\n scrollDeltaTo () {\n throw new ERROR_MSG('Method not implemented');\n }\n\n createScroll (mountPoint) {\n const config = this.config();\n\n return {\n scrollBarContainer: scrollContainerHelper(mountPoint, config, this.logicalSpace(), this.constructor.type())\n };\n }\n\n attachScrollAction (externalScrollAction) {\n this._attachedScrollAction = externalScrollAction;\n return this;\n }\n\n detachScrollAction () {\n this._attachedScrollAction = () => {};\n return this;\n }\n\n getLogicalSpace () {\n return this.logicalSpace();\n }\n\n registerListeners () {\n registerListeners(this);\n return this;\n }\n\n remove () {\n this._components.scrollBarContainer.remove();\n return this;\n }\n}\n\n","import MuzeComponent from './muze-chart-component';\nimport { HorizontalScrollMaker } from './scroll-bar-maker/horizontal-scroll-maker';\nimport { VerticalScrollMaker } from './scroll-bar-maker/vertical-scroll-maker';\n\nconst scrollMakerMap = {\n horizontal: HorizontalScrollMaker,\n vertical: VerticalScrollMaker\n};\n\n/**\n * Scroll Component acts as a wrapper over the scoll bars created using the respective Scroll Makers\n * This provides a consistent API for layouting using the tree layout system.\n *\n *\n * @class\n * @public\n * @module ScrollComponent\n */\nexport default class ScrollComponent extends MuzeComponent {\n\n constructor (params) {\n const ScrollMaker = scrollMakerMap[params.config.type];\n\n params.component = new ScrollMaker();\n params.component.config(params.config.scrollBarComponentConfig);\n params.component.logicalSpace(params.dimensions);\n super(params.name, params.component.getLogicalSpace(), 0);\n this.setParams(params);\n }\n\n manager (...manager) {\n if (manager.length) {\n this.component.manager(manager[0]);\n return this;\n }\n return this.component.manager();\n }\n\n /**\n * Scrolls based on the actual pixel value provided. Since it's a delta change, the input will be\n * a delta between (-Infinity, Infinity), based on which the scroll will occur. Only a delta movement in\n * scroll occurs\n *\n * @public\n *\n * @param {number} delta Based on which the scroll will have a delta change in position\n * @return {ScrollComponent} Instance of the ScrollComponent\n */\n scrollDeltaTo (delta) {\n this.component.scrollDeltaTo(delta);\n return this;\n }\n\n /**\n * Scrolls to the specific point in the page. The input is provided as a percentage (0 - 100)\n *\n * @public\n *\n * @param {number} scrollPercentage Its the percentage based on which the scroll action will occur\n * @return {ScrollComponent} Instance of the ScrollComponent\n */\n scrollTo (scrollPercentage) {\n this.component.scrollTo(scrollPercentage);\n return this;\n }\n\n /**\n * Scrolls to the specific point in the page based on the unit index.\n * The input is provided as a number represting the index for the unit.\n * For vertical scroll, it's the row index that will be required.\n * For horizontal scroll, it's the column index that will be required\n *\n * @public\n *\n * @param {number} unitIndex Index of the unit appearing in the grid\n * @return {ScrollComponent} Instance of the ScrollComponent\n */\n scrollToUnitIndex (unitIndex) {\n const unitPositions = this.component.unitPositions();\n const sanitizedUnitIndex = Math.min(Math.max(0, unitIndex), unitPositions.length - 1);\n this.component.scrollTo(unitPositions[sanitizedUnitIndex]);\n return this;\n }\n\n /**\n * Provides the positions of the units(either horizontal or vertical based on the type\n * of scroll bar it wraps) relative to it's container. The position of the first unit starts at 0\n *\n *\n * @public\n *\n * @return {Array} Positions of units either horizontal or vertical\n */\n getScrollPositionsForUnits () {\n return this.component.unitPositions();\n }\n\n draw (container) {\n this.component.createScroll(container || document.getElementById(this.renderAt()));\n return this;\n }\n\n /**\n * Can be used to attach a scroll action whenever scrolling occurs in the canvas\n *\n * @public\n * @param {number} externalAction Action to be attached during scroll\n * @return {ScrollComponent} Instance of the ScrollComponent\n */\n attachScrollAction (externalAction) {\n this.component.attachScrollAction(externalAction);\n return this;\n }\n\n /**\n * Can be used to detach the scroll action already bound to the scroll bar\n *\n * @public\n * @return {ScrollComponent} Instance of the ScrollComponent\n */\n detachScrollAction () {\n this.component.detachScrollAction();\n return this;\n }\n\n updateWrapper (params) {\n this.name(params.name);\n this.component.config(params.config.scrollBarComponentConfig);\n this.component.logicalSpace(params.dimensions);\n this.boundBox(this.component.getLogicalSpace());\n this.setParams(params);\n return this;\n }\n\n setParams (params) {\n this.component = params.component || this.component;\n this.params = params;\n this.target(params.config.target);\n this.position(params.config.position);\n this.className(params.config.className);\n this.alignWith(params.config.alignWith);\n this.alignment(params.config.alignment);\n }\n\n remove () {\n this.component.remove();\n }\n}\n","import { ScrollMaker } from './scroll-maker';\nimport { createScrollBarRect, createScrollBarArrow, getUnitPositions } from './helper';\nimport { HORIZONTAL, HEIGHT, WIDTH, LEFT } from '../../../constants';\n\nexport class HorizontalScrollMaker extends ScrollMaker {\n\n /**\n * Describes the type of the ScrollMaker\n *\n * @public\n *\n * @return {String} Returns the type of scroll maker: horizontal\n */\n static type () {\n return HORIZONTAL;\n }\n\n createScroll (mountPoint, dimensions = this.logicalSpace()) {\n const config = this.config();\n const { scrollBarContainer } = super.createScroll(mountPoint, config, dimensions);\n const prevArrow = createScrollBarArrow(scrollBarContainer, 'left', config);\n const moverRect = createScrollBarRect(scrollBarContainer, config);\n const nextArrow = createScrollBarArrow(scrollBarContainer, 'right', config);\n const {\n mover,\n rect\n } = moverRect;\n\n const { height, width, totalLength, viewLength, unitWidths } = this.logicalSpace();\n const scrollBarWithouArrowLength = width - height * 2;\n\n rect.style(WIDTH, `${dimensions.width - height * 2}px`);\n rect.style(HEIGHT, `${100}%`);\n mover.style(WIDTH, `${(viewLength * scrollBarWithouArrowLength) / totalLength}px`);\n mover.style(HEIGHT, `${100}%`);\n mover.style(LEFT, `${0}px`);\n\n this._components = {\n prevArrow,\n nextArrow,\n moverRect,\n scrollBarContainer\n };\n this._scrollBarWithouArrowLength = scrollBarWithouArrowLength;\n this.unitPositions(getUnitPositions(unitWidths, totalLength, viewLength));\n this.registerListeners();\n }\n\n emptyScrollAreaClick (event) {\n const {\n mover,\n rect\n } = this._components.moverRect;\n const speed = this.config().speed;\n const { x, y } = mover.node().getBoundingClientRect();\n const { x: rectX, y: rectY } = rect.node().getBoundingClientRect();\n let positionAdjuster = speed * 10;\n if (event.x < x) {\n positionAdjuster = -speed * 10;\n }\n this.changeMoverPosition({ x: x - rectX + positionAdjuster, y: y - rectY + positionAdjuster });\n }\n\n changeMoverPosition (newPosition) {\n let currentPos;\n const {\n mover,\n rect\n } = this._components.moverRect;\n const rectStartPos = rect.node().getBoundingClientRect();\n const moverPos = mover.node().getBoundingClientRect();\n const {\n totalLength\n } = this.logicalSpace();\n\n if (newPosition.x < 0) {\n currentPos = 0;\n } else if (newPosition.x + moverPos.width > rectStartPos.width) {\n currentPos = rectStartPos.width - moverPos.width;\n } else {\n currentPos = newPosition.x;\n }\n\n mover.style(LEFT, `${currentPos}px`);\n const totalDistance = this._scrollBarWithouArrowLength;\n const movedViewLength = (currentPos * totalLength) / totalDistance;\n\n this.manager().performAttachedScrollFunction(this.constructor.type(), movedViewLength);\n }\n\n scrollDeltaTo (delta) {\n const {\n mover,\n rect\n } = this._components.moverRect;\n const moverPos = mover.node().getBoundingClientRect();\n const rectStartPos = rect.node().getBoundingClientRect();\n\n this.changeMoverPosition({ y: 0, x: moverPos.x - rectStartPos.x - delta });\n return this;\n }\n\n /**\n * Scrolls to the specific point in the page. The input is provided as a percentage (0 - 100)\n *\n * @public\n *\n * @param {number} scrollPercentage Its the percentage based on which the scroll action will occur\n * @return {HorizontalScrollMaker} Instance of the HorizontalScrollMaker\n */\n scrollTo (scrollPercentage) {\n const {\n mover\n } = this._components.moverRect;\n const moverPos = mover.node().getBoundingClientRect();\n const movement = (scrollPercentage * (this._scrollBarWithouArrowLength - moverPos.width)) / 100;\n\n this.changeMoverPosition({ y: 0, x: movement });\n return this;\n }\n\n}\n\n","import { ScrollMaker } from './scroll-maker';\nimport { createScrollBarRect, createScrollBarArrow, getUnitPositions } from './helper';\nimport { VERTICAL, TOP, HEIGHT, WIDTH } from '../../../constants';\n\nexport class VerticalScrollMaker extends ScrollMaker {\n\n /**\n * Describes the type of the ScrollMaker\n *\n * @public\n *\n * @return {String} Returns the type of scroll maker: vertical\n */\n static type () {\n return VERTICAL;\n }\n\n createScroll (mountPoint, dimensions = this.logicalSpace()) {\n const config = this.config();\n const { scrollBarContainer } = super.createScroll(mountPoint, dimensions);\n const prevArrow = createScrollBarArrow(scrollBarContainer, 'top', config);\n const moverRect = createScrollBarRect(scrollBarContainer, config);\n const nextArrow = createScrollBarArrow(scrollBarContainer, 'bottom', config);\n const {\n mover,\n rect\n } = moverRect;\n const { height, width, totalLength, viewLength, unitHeights } = this.logicalSpace();\n const scrollBarWithouArrowLength = height - width * 2;\n\n rect.style(HEIGHT, `${scrollBarWithouArrowLength}px`);\n rect.style(WIDTH, `${100}%`);\n mover.style(WIDTH, `${100}%`);\n mover.style(HEIGHT, `${(viewLength * scrollBarWithouArrowLength) / totalLength}px`);\n mover.style(TOP, `${0}px`);\n\n this._components = {\n prevArrow,\n nextArrow,\n moverRect,\n scrollBarContainer\n };\n this._scrollBarWithouArrowLength = scrollBarWithouArrowLength;\n\n this.unitPositions(getUnitPositions(unitHeights, totalLength, viewLength));\n this.registerListeners();\n }\n\n emptyScrollAreaClick (event) {\n const {\n mover,\n rect\n } = this._components.moverRect;\n const speed = this.config().speed;\n const { x, y } = mover.node().getBoundingClientRect();\n const { x: rectX, y: rectY } = rect.node().getBoundingClientRect();\n\n let positionAdjuster = speed * 10;\n if (event.y < y) {\n positionAdjuster = -speed * 10;\n }\n this.changeMoverPosition({ x: x - rectX + positionAdjuster, y: y - rectY + positionAdjuster });\n }\n\n changeMoverPosition (newPosition) {\n let currentPos;\n const {\n mover,\n rect\n } = this._components.moverRect;\n const {\n totalLength\n } = this.logicalSpace();\n const rectStartPos = rect.node().getBoundingClientRect();\n const moverPos = mover.node().getBoundingClientRect();\n\n if (newPosition.y < 0) {\n currentPos = 0;\n } else if (newPosition.y + moverPos.height > rectStartPos.height) {\n currentPos = rectStartPos.height - moverPos.height;\n } else {\n currentPos = newPosition.y;\n }\n mover.style(TOP, `${currentPos}px`);\n const totalDistance = this._scrollBarWithouArrowLength;\n const movedViewLength = (currentPos * totalLength) / totalDistance;\n\n this.manager().performAttachedScrollFunction(this.constructor.type(), movedViewLength);\n }\n\n /**\n * Scrolls based on the actual pixel value provided. Since it's a delta change, the input will be\n * a delta between (-Infinity, Infinity), based on which the scroll will occur. Only a delta movement in\n * scroll occurs\n *\n * @public\n *\n * @param {number} delta Based on which the scroll will have a delta change in position\n * @return {VerticalScrollMaker} Instance of the VerticalScrollMaker\n */\n scrollDeltaTo (delta) {\n const {\n mover,\n rect\n } = this._components.moverRect;\n const moverPos = mover.node().getBoundingClientRect();\n const rectStartPos = rect.node().getBoundingClientRect();\n\n this.changeMoverPosition({ y: moverPos.y - rectStartPos.y - delta, x: 0 });\n return this;\n }\n\n /**\n * Scrolls to the specific point in the page. The input is provided as a percentage (0 - 100)\n *\n * @public\n *\n * @param {number} scrollPercentage Its the percentage based on which the scroll action will occur\n * @return {VerticalScrollMaker} Instance of the VerticalScrollMaker\n */\n scrollTo (scrollPercentage) {\n const {\n mover\n } = this._components.moverRect;\n const moverPos = mover.node().getBoundingClientRect();\n const movement = (scrollPercentage * (this._scrollBarWithouArrowLength - moverPos.height)) / 100;\n\n this.changeMoverPosition({ x: 0, y: movement });\n return this;\n }\n\n}\n","import { makeElement } from 'muze-utils';\nimport { cellSpanMaker, applySpans } from '../../../../layout/src/grid-layout/span-maker';\nimport { applyBorders } from '../../../../layout/src/grid-layout/border-helper';\n\nimport {\n TOP, CENTER\n} from '../../../../layout/src/enums/constants';\nimport MuzeComponent from './muze-chart-component';\nimport { WIDTH, HEIGHT, HIDDEN, OVERFLOW, AUTO, VISIBLE } from '../../constants';\n\nconst renderPlaceholders = (cells) => {\n // Rendering content within placeholders\n cells.each(function (cell) {\n cell.placeholder.render(this);\n });\n};\n\nexport default class MatrixComponent extends MuzeComponent {\n\n constructor (params) {\n super(params.name, params.config.dimensions, 0);\n this.setParams(params);\n this.className(params.config.className);\n }\n\n applyScroll (container) {\n const row = this.params.config.row;\n const column = this.params.config.column;\n const { horizontal, vertical } = this.params.config.scrollInfo;\n container.style(OVERFLOW, VISIBLE);\n container.style(WIDTH, AUTO);\n container.style(HEIGHT, AUTO);\n\n if (horizontal && column === 1) {\n container.style(OVERFLOW, HIDDEN);\n container.style(WIDTH, '100%');\n }\n\n if (vertical && row === CENTER) {\n container.style(OVERFLOW, HIDDEN);\n container.style(HEIGHT, '100%');\n }\n }\n\n renderMatrix (mountPoint) {\n // Creating containers for each matrix individually\n const classPrefix = this.params.config.classPrefix;\n const row = this.params.config.row;\n const column = this.params.config.column;\n const dimensions = this.params.config.dimensions;\n const border = this.params.config.border;\n\n // Creating containers for each matrix individually\n const containerForMatrix = makeElement(mountPoint, 'div', [1], `${classPrefix}-grid-${row}-${column + 1}`)\n .classed(`${classPrefix}-grid-${row}`, true)\n .classed(`${classPrefix}-grid`, true);\n\n this.applyScroll(containerForMatrix);\n\n const {\n viewMatrix,\n spans\n } = cellSpanMaker(this.component, row, column);\n\n // Rendering the table components\n const { cells } = this.renderTable(containerForMatrix, `${classPrefix}-grid`, viewMatrix);\n\n applySpans(cells, spans, { dimensions, border }, `${row}-${column}`);\n renderPlaceholders(cells);\n\n cells.exit().each((cell) => {\n cell.placeholder.remove();\n });\n\n applyBorders(cells, border, row, column);\n }\n\n renderTable (mount, className, rowData) {\n const table = makeElement(mount, 'table', ['layout'], `${className}-table`);\n const body = makeElement(table, 'tbody', ['layout'], `${className}-body`);\n const rows = makeElement(body, 'tr', rowData, `${className}-tr`);\n const cells = makeElement(rows, 'td', (d, i) => d.filter(e => e !== null).map(e =>\n ({ placeholder: e, rowIndex: i })), `${className}-td`, {}, key => key.placeholder.id);\n\n return { table, body, rows, cells };\n }\n\n draw (container) {\n this.renderMatrix(container || document.getElementById(this.renderAt()));\n }\n\n updateWrapper (params) {\n this.name(params.name);\n this.boundBox(params.config.dimensions);\n this.setParams(params);\n return this;\n }\n\n setParams (params) {\n this.component = params.component;\n this.params = params;\n this.target(params.config.target);\n this.position(TOP);\n this.className(params.config.className);\n }\n}\n","import { selectElement, getEvent } from 'muze-utils';\nimport MuzeComponent from './muze-chart-component';\nimport MatrixComponent from './matrix-component';\nimport { ROW_MATRIX_INDEX, COLUMN_MATRIX_INDEX } from '../../../../layout/src/enums/constants';\n\n/**\n * Based on the type of scroll, it changes the scrollLeft/scrollTop property of the specific\n * elements based on the scroll distance provided\n *\n *\n */\nconst applyScrollAction = (elem, classPrefix, scollDistance, type) => {\n selectElement(elem)\n .selectAll(`.${classPrefix}-grid`)\n .property(type, scollDistance);\n};\n\n/**\n * Applies the action of the scroll by actually scrolling the respective matrices based on the\n * type of scroll. It returns a function which has both the scroll methods available\n *\n * @return {Object} contains the horizontal and vertical scroll actions on the grid component\n */\nconst scrollActionApplier = (movement, context) => {\n const classPrefix = context.params.config.classPrefix;\n\n return {\n horizontal: () => {\n [0, 1, 2].forEach(e =>\n applyScrollAction(`#${context.component[e][1].renderAt()}`, classPrefix, movement, 'scrollLeft'));\n },\n vertical: () => {\n [0, 1, 2].forEach(e =>\n applyScrollAction(`#${context.component[1][e].renderAt()}`, classPrefix, movement, 'scrollTop'));\n }\n };\n};\n\nexport default class GridComponent extends MuzeComponent {\n\n constructor (params) {\n super(params.name, params.config.dimensions, 0);\n this.gridComponents = [];\n this.setParams(params);\n }\n\n sanitizeGrid () {\n let height = 0;\n let width = 0;\n const { viewMatricesInfo, layoutDimensions } = this.component.viewInfo();\n const scrollInfo = this.component.scrollInfo();\n\n for (let i = 0; i < 3; i++) {\n if (!(this.gridComponents.length && this.gridComponents[i] instanceof Array)) {\n this.gridComponents[i] = [];\n }\n for (let j = 0; j < 3; j++) {\n const matrixDim = { height: layoutDimensions.viewHeight[i], width: layoutDimensions.viewWidth[j] };\n const matrix = viewMatricesInfo.matrices[`${ROW_MATRIX_INDEX[i]}`][j];\n const matrixName = `${ROW_MATRIX_INDEX[i]}-${COLUMN_MATRIX_INDEX[j]}`;\n const matrixConfig = {\n dimensions: matrixDim,\n border: layoutDimensions.border,\n classPrefix: this.params.config.classPrefix,\n scrollInfo,\n row: ROW_MATRIX_INDEX[i],\n column: j\n };\n if (this.gridComponents[i][j] instanceof MuzeComponent) {\n this.gridComponents[i][j].updateWrapper({\n name: matrixName,\n component: matrix,\n config: matrixConfig\n });\n } else {\n const matrixWrapper = new MatrixComponent({\n name: matrixName,\n component: matrix,\n config: matrixConfig\n });\n this.gridComponents[i].push(matrixWrapper);\n }\n if (i === 0) {\n width += matrixDim.width;\n }\n if (j === 0) {\n height += matrixDim.height;\n }\n }\n }\n this.boundBox({ height, width });\n\n this.component = this.gridComponents;\n this.allComponents = this.gridComponents;\n }\n\n scrollBarManager (...manager) {\n if (manager.length) {\n this._scrollBarManager = manager[0];\n return this;\n }\n return this._scrollBarManager;\n }\n\n /**\n * Attaches a mousewheel listener to the center matrix, based on which the scrolling can occur.\n * It uses the scroll component to change the position of the scroller, which ultimately scrolls the center matrix\n *\n *\n * @return {GridComponent} Instance of the GridComponent\n */\n attachScrollListener () {\n selectElement(`#${this.component[1][1].renderAt()}`)\n .on('wheel', () => {\n const event = getEvent();\n const {\n wheelDeltaX,\n wheelDeltaY\n } = event;\n\n // Prevent default behaviour and stop propagating\n event.preventDefault();\n event.stopPropagation();\n\n // Scrolling horizontally\n if (wheelDeltaX !== 0 && Math.abs(wheelDeltaX) > Math.abs(wheelDeltaY)) {\n this.scrollBarManager().triggerScrollBarAction('horizontal', wheelDeltaX);\n }\n\n // Scrolling Vertically\n if (wheelDeltaY !== 0 && Math.abs(wheelDeltaX) < Math.abs(wheelDeltaY)) {\n this.scrollBarManager().triggerScrollBarAction('vertical', wheelDeltaY);\n }\n });\n return this;\n }\n\n performScrollAction (direction, movedView) {\n scrollActionApplier(movedView, this)[direction]();\n return this;\n }\n\n getBoundBox () {\n const { top, left } = this.component[0][0].boundBox();\n const { height, width } = this.boundBox();\n\n return {\n top,\n left,\n height,\n width\n };\n }\n\n updateWrapper (params) {\n this.name(params.name);\n this.boundBox(params.config.dimensions);\n this.setParams(params);\n return this;\n }\n\n setParams (params) {\n this.component = params.component;\n this.params = params;\n this.target(params.config.target);\n this.className(params.config.className);\n this.sanitizeGrid();\n return this;\n }\n}\n","import { TITLE, SUB_TITLE, LEGEND, VERTICAL, HORIZONTAL, WIDTH, HEIGHT, TOP, LEFT, RIGHT } from '../constants';\nimport HeaderComponent from './components/headerComponent';\nimport LegendComponent from './components/legendComponent';\nimport ScrollComponent from './components/scroll-component';\nimport GridComponent from './components/grid-component';\nimport { TITLE_CONFIG, SUB_TITLE_CONFIG, GRID, CANVAS, LAYOUT_ALIGN } from './defaults';\nimport { ROW_MATRIX_INDEX, COLUMN_MATRIX_INDEX, CENTER } from '../../../layout/src/enums/constants';\n\n// Mapping between types of headers and their required configs for wrapper creation\nconst headerMap = {\n title: {\n headerCell: 'titleCell',\n configType: TITLE_CONFIG\n },\n subtitle: {\n headerCell: 'subtitleCell',\n configType: SUB_TITLE_CONFIG\n }\n};\n\n/**\n * Creates the wrapper for the header, i.e., title and subtitle to be used in the tree layout\n *\n *\n * @param {string} headerType type of header: title/subtite\n * @param {LayoutManager} layoutManager instance of Layout Manager which manages the layouting of the components\n * @param {Object} renderDetails Extra details required for rendering the headers\n * @return {Instance} Returns the respective wrappers\n */\nconst createHeaderWrapper = (headerType, layoutManager, renderDetails) => {\n let wrapper = null;\n\n const { components, layoutConfig } = renderDetails;\n const { headerCell, configType } = headerMap[headerType];\n const target = { target: CANVAS };\n\n if (components.headers && components.headers[headerCell]) {\n let headerConfig = layoutConfig[headerType];\n const header = components.headers[headerCell];\n\n headerConfig = Object.assign({}, headerConfig, {\n classPrefix: layoutConfig.classPrefix,\n ...target,\n alignWith: `${ROW_MATRIX_INDEX[0]}-${COLUMN_MATRIX_INDEX[1]}`,\n alignment: LAYOUT_ALIGN.LEFT,\n className: configType.className\n });\n\n if (headerConfig.align === CENTER) {\n headerConfig.alignment = null;\n headerConfig.alignWith = null;\n }\n if (headerConfig.align === RIGHT) {\n headerConfig.alignment = RIGHT;\n }\n\n const wrapperParams = {\n name: headerType,\n component: header,\n config: headerConfig\n };\n\n const existingComponent = layoutManager.getComponent(headerType);\n if (existingComponent) {\n wrapper = existingComponent\n .updateWrapper(wrapperParams);\n } else {\n wrapper = new HeaderComponent(wrapperParams);\n }\n }\n return wrapper;\n};\n\n// Mapping between types of scrollBars and their required configs for wrapper creation\nconst scrollBarMap = config => ({\n vertical: {\n componentName: 'verticalScrollBar',\n width: 'thickness',\n height: 'layoutBasedMeasure',\n layoutBasedMeasure: HEIGHT,\n viewMeasure: 'viewHeight',\n rowAlign: 1,\n colAlign: config.align === 'right' ? 2 : 0,\n position: config.align,\n alignment: TOP\n },\n horizontal: {\n componentName: 'horizontalScrollBar',\n width: 'layoutBasedMeasure',\n layoutBasedMeasure: WIDTH,\n viewMeasure: 'viewWidth',\n height: 'thickness',\n rowAlign: config.align === 'top' ? 0 : 2,\n colAlign: 1,\n position: config.align,\n alignment: LEFT\n }\n});\n\n/**\n * Creates the wrapper for the scroller, i.e., horizontal and vertical to be used in the tree layout\n *\n *\n * @param {string} scrollBarType type of scrollbar: horizontal/vertical\n * @param {LayoutManager} layoutManager instance of Layout Manager which manages the layouting of the components\n * @param {Object} renderDetails Extra details required for rendering the headers\n * @param {GridLayout} grid Instance of the grid layout\n * @return {Instance} Returns the respective wrappers\n */\nconst createScrollBarWrapper = (scrollBarType, layoutManager, renderDetails, grid) => {\n let scrollBarWrapper = null;\n const { layoutConfig } = renderDetails;\n const target = { target: CANVAS };\n const { scrollBar } = layoutConfig;\n const { layoutDimensions } = grid.viewInfo();\n const {\n actualCenterMeasures,\n unitHeights,\n unitWidths\n } = layoutDimensions;\n const {\n componentName, layoutBasedMeasure, width, height, rowAlign, colAlign,\n viewMeasure, position, alignment\n } = scrollBarMap(scrollBar[scrollBarType])[scrollBarType];\n const dimensions = {\n thickness: scrollBar.thickness,\n layoutBasedMeasure: layoutDimensions[viewMeasure][1]\n };\n const isScroll = grid.scrollInfo()[scrollBarType];\n const totalLength = actualCenterMeasures[layoutBasedMeasure];\n const viewLength = layoutDimensions[viewMeasure][1];\n\n const scrollConfig = Object.assign({}, {\n classPrefix: layoutConfig.classPrefix,\n ...target,\n scrollBarComponentConfig: {\n ...scrollBar,\n classPrefix: layoutConfig.classPrefix\n },\n\n type: scrollBarType,\n alignWith: `${ROW_MATRIX_INDEX[rowAlign]}-${COLUMN_MATRIX_INDEX[colAlign]}`,\n alignment,\n position\n });\n\n const wrapperParams = {\n name: componentName,\n config: scrollConfig,\n dimensions: {\n width: dimensions[width],\n height: dimensions[height],\n totalLength,\n viewLength,\n unitHeights,\n unitWidths\n }\n };\n\n const existingComponent = layoutManager.getComponent(componentName);\n\n if (!isScroll) {\n existingComponent && existingComponent.remove();\n return null;\n }\n\n if (existingComponent) {\n scrollBarWrapper = existingComponent\n .updateWrapper(wrapperParams);\n } else {\n scrollBarWrapper = new ScrollComponent(wrapperParams);\n }\n\n return scrollBarWrapper;\n};\n\n/**\n * Creates the wrapper for the legend to be used in the tree layout\n *\n *\n * @param {LayoutManager} layoutManager instance of Layout Manager which manages the layouting of the components\n * @param {Object} renderDetails Extra details required for rendering the headers\n * @return {Instance} Returns the respective wrappers\n */\nconst createLegendWrapper = (layoutManager, renderDetails) => {\n let legendWrapper = null;\n const { components, layoutConfig, measurement } = renderDetails;\n const target = { target: CANVAS };\n\n if (components.legends && components.legends.length) {\n const legendConfig = { ...layoutConfig.legend, ...target, measurement };\n const wrapperParams = {\n name: LEGEND,\n component: components.legends,\n config: legendConfig\n };\n\n const existingComponent = layoutManager.getComponent(LEGEND);\n\n if (existingComponent) {\n legendWrapper = existingComponent\n .updateWrapper(wrapperParams);\n } else {\n legendWrapper = new LegendComponent(wrapperParams);\n }\n }\n return legendWrapper;\n};\n\n/**\n * Creates the wrapper for the grid layout to be used in the tree layout\n *\n *\n * @param {LayoutManager} layoutManager instance of Layout Manager which manages the layouting of the components\n * @param {Object} renderDetails Extra details required for rendering the headers\n * @param {GridLayout} grid Instance of the grid layout\n * @return {Instance} Returns the respective wrappers\n */\nconst gridLayoutWrapper = (layoutManager, renderDetails, grid) => {\n let gridWrapper = null;\n const target = { target: CANVAS };\n const { layoutConfig } = renderDetails;\n\n const config = {\n ...target,\n pagination: layoutConfig.pagination,\n classPrefix: layoutConfig.classPrefix,\n dimensions: { height: 0, width: 0 }\n };\n const wrapperParams = {\n name: GRID,\n component: grid,\n config\n };\n const existingComponent = layoutManager.getComponent(GRID);\n if (existingComponent) {\n gridWrapper = existingComponent\n .updateWrapper(wrapperParams);\n } else {\n gridWrapper = new GridComponent(wrapperParams);\n }\n return gridWrapper;\n};\n\n/**\n * Responsible for providing the wrapper creators for every component in Muze.\n * This function, when called, returns the set of components and their respective wrappers.\n *\n *\n *\n * @param {LayoutManager} layoutManager instance of Layout Manager which manages the layouting of the components\n * @param {GridLayout} grid Instance of the grid layout\n * @param {Object} renderDetails Extra details required for rendering the headers\n * @return {Instance} Returns the respective wrappers for each component\n */\nexport const componentWrapperMaker = (layoutManager, grid, renderDetails) => ({\n title: createHeaderWrapper(TITLE, layoutManager, renderDetails),\n subtitle: createHeaderWrapper(SUB_TITLE, layoutManager, renderDetails),\n legend: createLegendWrapper(layoutManager, renderDetails),\n grid: gridLayoutWrapper(layoutManager, renderDetails, grid),\n verticalScrollBar: createScrollBarWrapper(VERTICAL, layoutManager, renderDetails, grid),\n horizontalScrollBar: createScrollBarWrapper(HORIZONTAL, layoutManager, renderDetails, grid)\n});\n","export class ScrollManager {\n\n constructor () {\n this._scrollBarComponents = {};\n this._attachedComponents = {};\n }\n\n scrollBarComponents (...sbc) {\n if (sbc.length) {\n this._scrollBarComponents = sbc[0];\n return this;\n }\n return this._scrollBarComponents;\n }\n\n attachedComponents (...abc) {\n if (abc.length) {\n this._attachedComponents = abc[0];\n return this;\n }\n return this._attachedComponents;\n }\n\n performAttachedScrollFunction (type, movedViewLength) {\n Object.values(this.attachedComponents()).forEach((e) => {\n e.performScrollAction(type, movedViewLength);\n });\n }\n\n triggerScrollBarAction (type, delta) {\n this.scrollBarComponents()[type] && this.scrollBarComponents()[type].scrollDeltaTo(delta);\n }\n}\n","import { mergeRecursive } from 'muze-utils';\nimport { arrangeComponents } from './component-resolver';\nimport { createHeaders } from './title-maker';\nimport { createLegend, getLegendSpace } from './legend-maker';\nimport { componentWrapperMaker } from './component-wrapper-maker';\nimport { TOP, BOTTOM, LEFT, RIGHT } from '../constants';\nimport { ScrollManager } from './scroll-manager';\n\n/**\n *\n *\n * @param {*} context\n *\n */\nexport const prepareLayout = (layout, renderDetails) => {\n const { components, layoutConfig, measurement } = renderDetails;\n const {\n rows,\n columns,\n values,\n cornerMatrices\n } = components;\n const {\n topLeft,\n topRight,\n bottomLeft,\n bottomRight\n } = cornerMatrices;\n if (rows && columns) {\n layout.measurement(measurement)\n .config(layoutConfig)\n .matrices({\n top: [topLeft, columns[0], topRight],\n center: [rows[0], values, rows[1]],\n bottom: [bottomLeft, columns[1], bottomRight]\n })\n .triggerReflow();\n }\n};\n\n/**\n *\n *\n * @param {*} context\n * @param {*} mount\n *\n */\nexport const getRenderDetails = (context, mount) => {\n let layoutConfig = mergeRecursive({}, context.config());\n // Get height width of the mount point\n let { height, width } = mount.getBoundingClientRect();\n const heightAttr = context.height();\n const widthAttr = context.width();\n const visGroup = context.composition().visualGroup;\n const {\n isColumnSizeEqual,\n isRowSizeEqual,\n priority,\n rows,\n columns,\n values\n } = visGroup.placeholderInfo();\n const {\n minWidth,\n minHeight,\n classPrefix,\n showHeaders,\n legend,\n pagination,\n scrollBar\n } = context.config();\n\n // Get title configuration\n const titleConfig = context.title()[1];\n // Get subtitle configuration\n const subtitleConfig = context.subtitle()[1];\n // Get legend position\n const legendPosition = legend.position;\n // Arrange components according to config\n const layoutArrangement = arrangeComponents(context);\n\n height = Math.floor(height);\n width = Math.floor(width);\n\n const availableHeightForCanvas = Math.max(heightAttr > 0 ? heightAttr : height, minHeight);\n const availableWidthForCanvas = Math.max(widthAttr > 0 ? widthAttr : width, minWidth);\n\n // Create headers and determine header height\n const { headers, headerHeight } = createHeaders(context, availableHeightForCanvas, availableWidthForCanvas);\n\n // Create legends and determine legend space\n const legends = createLegend(context, headerHeight, availableHeightForCanvas, availableWidthForCanvas);\n context._composition.legend = {};\n legends.forEach((e) => {\n context._composition.legend[e.scaleType] = e.legend;\n });\n\n const legendSpace = getLegendSpace(legends, legend, availableHeightForCanvas, availableWidthForCanvas);\n const legendWidth = (legendPosition === LEFT || legendPosition === RIGHT) ? legendSpace.width : 0;\n const legendHeight = (legendPosition === TOP || legendPosition === BOTTOM) ? legendSpace.height : 0;\n\n // Set components for layouting\n const components = {\n headers,\n legends,\n canvases: [context],\n rows,\n columns,\n values,\n cornerMatrices: visGroup.cornerMatrices()\n };\n\n const measurement = {\n mountSpace: {\n height,\n width\n },\n headerHeight,\n legendSpace,\n canvasWidth: availableWidthForCanvas,\n canvasHeight: availableHeightForCanvas,\n width: availableWidthForCanvas - legendWidth,\n height: availableHeightForCanvas - headerHeight - legendHeight,\n minUnitHeight: context.minUnitHeight(),\n minUnitWidth: context.minUnitWidth()\n };\n layoutConfig = mergeRecursive(layoutConfig, {\n classPrefix,\n showHeaders,\n border: mergeRecursive(visGroup.metaData().border, context.config().border),\n layoutArrangement,\n legend,\n buffer: scrollBar.thickness,\n pagination,\n title: titleConfig,\n subtitle: subtitleConfig,\n isColumnSizeEqual,\n isRowSizeEqual,\n mount,\n priority\n });\n return {\n layoutConfig,\n components,\n measurement\n };\n};\n\nconst componentIndexes = {\n title: 0,\n subtitle: 1,\n legend: 2,\n verticalScrollBar: 3,\n horizontalScrollBar: 4,\n grid: 5\n};\n\n/**\n * Responsible for creating a scroll manager that manages interactions between the grid\n * component and the scroll bar components\n *\n * @param {Array} componentWrappers Contains the wrappers for all the components\n * @param {Canvas} canvas Instance of the current canvas\n * @return {Array} Positions of units either horizontal or vertical\n */\nconst createScrollManager = (componentWrappers, canvas) => {\n const {\n horizontalScrollBar,\n verticalScrollBar,\n grid\n } = componentIndexes;\n\n const horizontalScrollWrapper = componentWrappers[horizontalScrollBar];\n const verticalScrollWrapper = componentWrappers[verticalScrollBar];\n const gridWrapper = componentWrappers[grid];\n const scrollBarManager = new ScrollManager();\n const scrollBarComponents = {};\n\n verticalScrollWrapper && (scrollBarComponents.vertical = verticalScrollWrapper);\n horizontalScrollWrapper && (scrollBarComponents.horizontal = horizontalScrollWrapper);\n\n scrollBarManager\n .scrollBarComponents(scrollBarComponents)\n .attachedComponents({\n grid: gridWrapper\n });\n canvas.composition().hScrollBar = horizontalScrollWrapper;\n canvas.composition().vScrollBar = verticalScrollWrapper;\n\n [horizontalScrollWrapper, verticalScrollWrapper].forEach((wrapper) => {\n wrapper && wrapper.manager(scrollBarManager);\n });\n\n gridWrapper.scrollBarManager(scrollBarManager);\n};\n\nexport const renderLayout = (canvas, renderDetails) => {\n const layoutManager = canvas._layoutManager;\n const gridLayout = canvas.layout();\n const {\n\n grid\n } = componentIndexes;\n\n // Get the component wrappers\n const compWrappers = componentWrapperMaker(layoutManager, gridLayout, renderDetails);\n const componentWrappers = Object.keys(componentIndexes).map(e => compWrappers[e]);\n const gridWrapper = componentWrappers[grid];\n createScrollManager(componentWrappers, canvas);\n\n layoutManager.registerComponents(componentWrappers).compute();\n gridWrapper.attachScrollListener();\n};\n\n","import {\n getDataModelFromIdentifiers,\n FieldType,\n mergeRecursive,\n isSimpleObject,\n CommonProps\n} from 'muze-utils';\nimport { Firebolt } from '@chartshq/muze-firebolt';\n\nimport { applyInteractionPolicy } from '../helper';\n\nconst defaultInteractionPolicy = (valueMatrix, firebolt) => {\n const isMeasure = field => field.type() === FieldType.MEASURE;\n const canvas = firebolt.context;\n const visualGroup = canvas.composition().visualGroup;\n const xFields = [].concat(...visualGroup.getFieldsFromChannel('x'));\n const yFields = [].concat(...visualGroup.getFieldsFromChannel('y'));\n const colDim = xFields.every(field => field.type() === FieldType.DIMENSION);\n const fieldInf = visualGroup.resolver().getAllFields();\n const rowFacets = fieldInf.rowFacets;\n const colFacets = fieldInf.colFacets;\n valueMatrix.each((cell) => {\n const unitFireBolt = cell.valueOf().firebolt();\n if (!(xFields.every(isMeasure) && yFields.every(isMeasure))) {\n const facetFields = cell.valueOf().facetByFields()[0];\n const unitColFacets = facetFields.filter(d => colFacets.findIndex(v => v.equals(d)) !== -1);\n const unitRowFacets = facetFields.filter(d => rowFacets.findIndex(v => v.equals(d)) !== -1);\n let propFields;\n if (colDim) {\n propFields = unitColFacets.map(d => `${d}`);\n } else {\n propFields = unitRowFacets.map(d => `${d}`);\n }\n\n unitFireBolt.propagateWith('*', propFields, true);\n }\n });\n};\n\nconst defaultCrossInteractionPolicy = {\n behaviours: {\n '*': (propagationPayload, context) => {\n const propagationCanvasAlias = propagationPayload.sourceCanvas;\n const canvasAlias = context.parentAlias();\n return propagationCanvasAlias ? canvasAlias === propagationCanvasAlias : true;\n }\n },\n sideEffects: {\n tooltip: (propagationPayload, context) => {\n const propagationUnit = propagationPayload.sourceUnit;\n const propagationCanvas = propagationPayload.sourceCanvas;\n const unitId = context.id();\n const canvasAlias = context.parentAlias();\n if (propagationCanvas) {\n return propagationCanvas !== canvasAlias ? true : unitId === propagationUnit;\n }\n return true;\n }\n }\n};\n\n/**\n * This class is responsible for dispatching any behavioural action to all the visual units housed by the canvas.\n * It is created by {@link Canvas}. This class does not handle any physical actions. Physical actions get triggered\n * in {@link VisualUnit} which is managed by it's own firebolt instance. The firebolt instance of canvas only\n * propagates the action to all the visual units in it's composition.\n *\n * To get the firebolt instance of {@link Canvas}\n * ```\n * const firebolt = canvas.firebolt();\n * ```\n *\n * @class GroupFireBolt\n * @public\n */\nexport default class GroupFireBolt extends Firebolt {\n constructor (...params) {\n super(...params);\n this._interactionPolicy = this.constructor.defaultInteractionPolicy();\n this.crossInteractionPolicy(this.constructor.defaultCrossInteractionPolicy());\n }\n\n static defaultInteractionPolicy () {\n return defaultInteractionPolicy;\n }\n\n static defaultCrossInteractionPolicy () {\n return defaultCrossInteractionPolicy;\n }\n\n interactionPolicy (...policy) {\n if (policy.length) {\n this._interactionPolicy = policy[0] || this.constructor.defaultInteractionPolicy();\n return this;\n }\n return this._interactionPolicy;\n }\n\n crossInteractionPolicy (...policy) {\n if (policy.length) {\n this._crossInteractionPolicy = mergeRecursive(mergeRecursive({},\n this.constructor.defaultCrossInteractionPolicy()), policy[0] || {});\n const context = this.context;\n applyInteractionPolicy(this);\n context._throwback.registerImmediateListener([CommonProps.MATRIX_CREATED], () => {\n applyInteractionPolicy(this);\n });\n return this;\n }\n return this._crossInteractionPolicy;\n }\n\n /**\n * Dispatches a behavioural action with a payload. It takes the name of the behavioural action and a payload\n * object which contains the criteria aend an array of side effects which determines what side effects are\n * going to be shown in each visual unit of the canvas. It prepares the datamodel from the given criteria\n * and initiates a propagation from the datamodel of canvas. Then all the visual units of canvas which listens\n * to the propagation gets informed on which rows got selected and dispatches the behavioural action sent during\n * propagation.\n *\n * To dispatch a behavioural action on the canvas\n * ```\n * // Get the firebolt instance of the canvas\n * const firebolt = canvas.firebolt();\n * // Dispatch a brush behaviour\n * firebolt.dispatchBehaviour('brush', {\n * // Selects all the rows with Horsepower having range between 100 and 200.\n * criteria: {\n * Horsepower: [100, 200]\n * }\n * });\n * // On dispatch of this behavioural action, a selection box gets created and plots gets faded out which are the\n * // default side effects mapped to this behavioural action.\n * ```\n *\n * ```\n * Additionally, it can also be passed an array of side effects in the payload.\n * // Dispatch a select behaviour with only crossline as side effect.\n * firebolt.dispatchBehaviour('select', {\n * criteria: {\n * Cylinders: ['8']\n * },\n * sideEffects: ['crossline']\n * });\n * ```\n *\n * @public\n *\n * @param {string} behaviour Name of the behavioural action\n * @param {Object} payload Object which contains the interaction information.\n * @param {Object | Array.} payload.criteria Identifiers by which the selection happens.\n * @param {Array.} payload.sideEffects Side effects which needs to be shown.\n *\n * @return {GroupFireBolt} Instance of firebolt.\n */\n dispatchBehaviour (behaviour, payload) {\n const propPayload = Object.assign(payload);\n const criteria = propPayload.criteria;\n const data = this.context.composition().visualGroup.getGroupByData();\n const fieldsConfig = data.getFieldsConfig();\n const model = getDataModelFromIdentifiers(data, criteria);\n const behaviouralAction = this._actions.behavioural[behaviour];\n\n if (behaviouralAction) {\n const fields = isSimpleObject(criteria) ? Object.keys(criteria) : (criteria ? criteria[0] : []);\n const validFields = fields.filter(field => field in fieldsConfig);\n const mutates = behaviouralAction.constructor.mutates();\n const propConfig = {\n payload: propPayload,\n action: behaviour,\n criteria: model,\n sourceId: this.context.alias(),\n isMutableAction: mutates,\n propagateInterpolatedValues: validFields.every(field => fieldsConfig[field].def.type ===\n FieldType.MEASURE)\n };\n data.propagate(model, propConfig, true);\n }\n return this;\n }\n\n registerSideEffects (sideEffects) {\n for (const key in sideEffects) {\n this._sideEffectDefinitions[sideEffects[key].formalName()] = sideEffects[key];\n }\n return this;\n }\n}\n","import GroupFireBolt from './group-firebolt';\n\nexport default GroupFireBolt;\n","export const APP_INITIAL_STATE = {\n app: {\n group: {},\n units: {},\n layers: {},\n canvas: {}\n },\n local: {\n canvas: {},\n group: {},\n units: {},\n layers: {}\n }\n};\n\n","import { GridLayout } from '@chartshq/layout';\nimport { transactor, Store, getUniqueId, selectElement, STATE_NAMESPACES, CommonProps } from 'muze-utils';\nimport { physicalActions, sideEffects, behaviouralActions, behaviourEffectMap } from '@chartshq/muze-firebolt';\nimport { RETINAL } from '../constants';\nimport TransactionSupport from '../transaction-support';\nimport { getRenderDetails, prepareLayout, renderLayout } from './layout-maker';\nimport { localOptions, canvasOptions } from './local-options';\nimport GroupFireBolt from './firebolt';\nimport options from '../options';\nimport { APP_INITIAL_STATE } from './app-state';\nimport { initCanvas,\n setupChangeListener,\n setLabelRotationForAxes,\n createGroupState,\n createLayoutManager,\n setLayoutInfForUnits\n} from './helper';\n/**\n * Canvas is a logical component which houses a visualization by taking multiple variable in different encoding channel.\n * Canvas manages lifecycle of many other logical component and exposes one consistent interface for creation of chart.\n * Canvas is intialized from environment with settings from environment and singleton dependencies.\n *\n * To create an instance of canvas\n * ```\n * const env = Muze();\n * const canvas = env.canvas()\n * ```\n *\n *\n * @class\n * @public\n * @module Canvas\n */\nexport default class Canvas extends TransactionSupport {\n\n /**\n * Creates reactive property accessors.\n * - data\n * - height\n * - width\n * - config\n * This configs are retrieved from options.\n */\n constructor (globalDependencies) {\n super();\n\n this._allOptions = Object.assign({}, options, localOptions);\n this._registry = {};\n this._composition = {};\n this._cachedProps = {};\n this._alias = null;\n this._renderedResolve = null;\n this._renderedPromise = new Promise((resolve) => {\n this._renderedResolve = resolve;\n });\n this._composition.layout = new GridLayout();\n this._store = new Store(APP_INITIAL_STATE);\n\n this._throwback = new Store({\n [CommonProps.MATRIX_CREATED]: false\n });\n\n // Setters and getters will be mounted on this. The object will be mutated.\n const namespace = STATE_NAMESPACES.CANVAS_LOCAL_NAMESPACE;\n const [, store] = transactor(this, options, this._store.model, {\n namespace\n });\n transactor(this, localOptions, store, {\n namespace\n });\n transactor(this, canvasOptions, store, {\n namespace\n });\n\n this.dependencies(Object.assign({}, globalDependencies, this._dependencies));\n this.firebolt(new GroupFireBolt(this, {\n behavioural: behaviouralActions,\n physical: physicalActions,\n physicalBehaviouralMap: {}\n }, sideEffects, behaviourEffectMap));\n this.alias(`canvas-${getUniqueId()}`);\n this.title('', {});\n this.subtitle('', {});\n this.legend({});\n this.color({});\n this.shape({});\n this.size({});\n setupChangeListener(this);\n // init layoutManager\n this._layoutManager = createLayoutManager();\n }\n\n /**\n * Retrieves an instance of layout which is responsible for layouting. Layout is responsible for creating faceted\n * presentation using table layout.\n *\n * @public\n *\n * @return {GridLayout} Instance of layout attached to canvas.\n */\n layout (...params) {\n if (params.length) {\n return this;\n }\n return this.composition().layout;\n }\n\n /**\n * Retrieves the composition for a canvas\n *\n * @public\n *\n * @return {object} Instances of the components which canvas requires to draw the full visualization.\n * ```\n * {\n * layout: // Instance of {@link GridLayout}\n * legend: // Instance of {@link Legend}\n * subtitle: // Instance of {@link TextCell} using which the title is rendered\n * title: // Instance of {@link TextCell} using which the title is rendered\n * visualGroup: // Instance of {@link visualGroup}\n * }\n * ```\n */\n composition (...params) {\n if (params.length) {\n return this;\n }\n return this._composition;\n }\n\n done () {\n return this._renderedPromise;\n }\n\n /**\n * Sets or gets the alias of the canvas. Alias is a name by which the canvas can be referred.\n *\n * When setter\n * @param {string} alias Name of the alias.\n *\n * @return {Canvas} Instance of the canvas.\n *\n * When getter\n *\n * @return {string} Alias of canvas.\n *\n * @public\n */\n alias (...params) {\n if (params.length) {\n const visualGroup = this.composition().visualGroup;\n this._alias = params[0];\n visualGroup && visualGroup.alias(this.alias());\n return this;\n }\n return this._alias;\n }\n\n /**\n * Creates an instance initiated with given settings.\n *\n * @param {Object} initialSettings Initial settings to be populated in the model\n * @param {Object} regEntry newly created instance with the initial settings\n * @param {Object} globalDependencies dependencies which will be created only once in the page\n *\n * @return {Object} newly created instance with the initial settings\n */\n static withSettings (initialSettings, regEntry, globalDependencies) {\n const instance = new Canvas(globalDependencies);\n\n for (const key in initialSettings) {\n instance[key](initialSettings[key]);\n }\n // set registry for instance\n instance.registry(regEntry);\n return instance;\n }\n\n /**\n *\n *\n * @static\n *\n * @memberof Canvas\n */\n static formalName () {\n return 'canvas';\n }\n\n /**\n * Returns the instance of firebolt associated with this canvas. The firebolt instance can be used to dispatch a\n * behaviour dynamically on the canvas. This firebolt does not handle any physical actions. It is just used to\n * propagate the action to all the visual units in it's composition.\n *\n * @public\n *\n * @return {GroupFireBolt} Instance of firebolt associated with canvas.\n */\n firebolt (...firebolt) {\n if (firebolt.length) {\n this._firebolt = firebolt[0];\n return this;\n }\n return this._firebolt;\n }\n\n /**\n * Registry peoperty accessor\n *\n * @param {Object} reg plain old javascript object keyvalue pairs. Key containing module name and value contains\n * module definition class. The reg object has to be flat object of level 1.\n */\n registry (...params) {\n if (params.length) {\n const components = Object.assign({}, params[0].components);\n const componentSubRegistry = Object.assign({}, params[0].componentSubRegistry);\n\n this._registry = { components, componentSubRegistry };\n const initedComponents = initCanvas(this);\n // @todo is it okay to continue this tight behaviour? If not use a resolver to resolve diff component type.\n this._composition.visualGroup = initedComponents[0];\n createGroupState(this);\n this.composition().visualGroup.alias(this.alias()).store(this._store);\n return this;\n }\n return this._registry;\n }\n\n /*\n * Prepare dependencies for top level elements\n */\n dependencies (...param) {\n if (param.length) {\n this._dependencies = param[0];\n return this;\n }\n // @todo prepare dependencies here.\n return this._dependencies;\n }\n\n /**\n *\n *\n * @param {*} lifeCycles\n *\n * @memberof Canvas\n */\n lifeCycle (lifeCycles) {\n const lifeCycleManager = this.dependencies().lifeCycleManager;\n if (lifeCycles) {\n lifeCycleManager.register(lifeCycles);\n return this;\n }\n return lifeCycleManager;\n }\n\n /**\n *\n *\n * @readonly\n * @memberof Canvas\n */\n legend (...params) {\n if (params.length) {\n return this;\n }\n return this.composition().legend;\n }\n\n /**\n * Returns a promise for various {@link LifecycleEvents} of the various components of canvas. The promise gets\n * resolved once the particular event gets completed.\n *\n * To use this,\n * ```\n * canvas.once('layer.drawn').then(() => {\n * // Do any post drawing work here.\n * });\n * ```\n * @public\n *\n * @param {string} eventName Name of the lifecycle event.\n *\n * @return {Promise} A pending promise waiting for resolve to be called.\n */\n once (eventName) {\n const lifeCycleManager = this.dependencies().lifeCycleManager;\n return lifeCycleManager.retrieve(eventName);\n }\n\n /**\n * Internal function to trigger render, this method is cognizant of all the properties of the core modules and\n * establish a passive reactivity. Passive reactivity is not always a bad thing :)\n * @internal\n */\n render () {\n const mount = this.mount();\n // removeChild(mount);\n const lifeCycleManager = this.dependencies().lifeCycleManager;\n // Get render details including arrangement and measurement\n const renderDetails = getRenderDetails(this, mount);\n lifeCycleManager.notify({ client: this, action: 'beforedraw' });\n // Prepare the layout by triggering the matrix calculation\n prepareLayout(this.layout(), renderDetails);\n\n this._layoutManager.dimension({\n height: renderDetails.measurement.canvasHeight,\n width: renderDetails.measurement.canvasWidth\n });\n\n this._layoutManager.renderAt(mount);\n\n // Render each component\n renderLayout(this, renderDetails);\n\n setLayoutInfForUnits(this);\n\n // setLabelRotation\n setLabelRotationForAxes(this);\n }\n\n /**\n * Returns the instances of x axis of the canvas. It returns the instances in a two dimensional array form.\n *\n * ```\n * // The first element in the sub array represents the top axis and the second element represents the bottom\n * // axis.\n * [\n * [X1, X2],\n * [X3, X4]\n * ]\n * ```\n * @public\n *\n * @return {Array.} Instances of x axis.\n */\n xAxes () {\n return this.composition().visualGroup.getAxes('x');\n }\n\n /**\n * Returns the instances of y axis of the canvas. It returns the instances in a two dimensional array form.\n *\n * ```\n * // The first element in the sub array represents the left axis and the second element represents the right\n * // axis.\n * [\n * [Y1, Y2],\n * [Y3, Y4]\n * ]\n * ```\n * @public\n * @return {Array.} Instances of y axis.\n */\n yAxes () {\n return this.composition().visualGroup.getAxes('y');\n }\n\n /**\n * Returns all the retinal axis of the canvas. Color, shape and size axis are combinedly called retinal axis.\n *\n * @public\n * @return {Object} Instances of retinal axis.\n * ```\n * {\n * color: [ColorAxis], // Array of color axis.\n * shape: [ShapeAxis], // Array of shape axis.\n * size: [SizeAxis] // Array of size axis.\n * }\n * ```\n */\n getRetinalAxes () {\n const visualGroup = this.composition().visualGroup;\n return visualGroup.getAxes(RETINAL);\n }\n\n mount (...params) {\n if (params.length) {\n let value = params[0];\n if (typeof params[0] === 'string') {\n value = selectElement(params[0]).node();\n }\n this._mount = value;\n return this;\n }\n return this._mount;\n }\n}\n","import { cellRegistry, SimpleCell } from '@chartshq/visual-cell';\nimport { VisualUnit } from '@chartshq/visual-unit';\nimport { layerRegistry } from '@chartshq/visual-layer';\nimport { SimpleGroup, VisualGroup } from '@chartshq/visual-group';\n\nexport const COMPONENTS = {\n VisualGroup,\n VisualUnit\n};\nexport const SUBREGISTRIES = {\n cellRegistry,\n layerRegistry\n};\nexport const INTERFACES = {\n SimpleGroup,\n SimpleCell\n};\n\n","import { DEFAULT_LAYERS } from './defaults';\n\nexport default () => {\n const reg = DEFAULT_LAYERS;\n const regObj = {\n set: (key, def) => {\n reg[key] = def;\n return regObj;\n },\n get: () => reg\n };\n return regObj;\n};\n","import {\n transactor,\n Smartlabel,\n enableChainedTransaction,\n LifeCycleManager,\n DataModel,\n makeElement,\n getClientPoint,\n selectElement,\n getEvent,\n require,\n DateTimeFormatter\n} from 'muze-utils';\n\nimport {\n SurrogateSideEffect,\n SpawnableSideEffect,\n sideEffects,\n PersistentBehaviour,\n GenericBehaviour,\n VolatileBehaviour,\n behaviouralActions,\n GenericSideEffect\n} from '@chartshq/muze-firebolt';\nimport { layerFactory } from '@chartshq/visual-layer';\nimport pkg from '../package.json';\nimport * as operators from './operators';\nimport { actionModel as ActionModel } from './action-model';\nimport options from './options';\nimport { Canvas } from './canvas';\nimport { COMPONENTS, SUBREGISTRIES } from './default-registry';\nimport './muze.scss';\n\n// Cache singleton instances which should be included only once in a page\nconst globalCache = {};\nconst defaultRegistry = COMPONENTS;\n\nconst overrideRegistryDefinitions = (overrideRegistry, registry) => {\n for (const prop in overrideRegistry) {\n registry.set(prop, overrideRegistry[prop]);\n }\n};\n\n/**\n * Entry point to renderer. Initializes an environment with settings and registries for canvas. This is a simple wrapper\n * over {@link Canvas} which enables common configuration passing to multiple such canvases.\n *\n * Everytime `muze()` is called it creates an environment. These environment supports subset of APIs of Canvas. If\n * common configuration is used to render multiple canvases then it can be set directly in the env. Like if data is\n * common across all the visulization then its better to set the data in env. When a canvas is created it receives all\n * those configuration from env.\n *\n * ```\n * // Creates an environment\n * const env = muze()\n * // Set data property in environment, so that all the canvas created from the same environment gets this data\n * // automatically\n * env.data(dm);\n * // Creates canvas, by default env pushes data to canvas instance\n * const canvas = env.canvas();\n * ```\n *\n * If a property is set on both environment and canvas instance, property set on canvas instance gets more priority.\n *\n * @public\n * @module muze\n * @namespace Muze\n *\n * @return {Env} Instance of an environment\n */\nconst muze = () => {\n // Setters and getters will be mounted on this. Object will be mutated.\n const [env, globalStore] = transactor({}, options);\n const components = Object.assign({}, COMPONENTS);\n const componentSubRegistryDef = Object.assign(SUBREGISTRIES);\n const componentSubRegistry = {};\n\n for (const prop in componentSubRegistryDef) {\n componentSubRegistry[prop] = componentSubRegistryDef[prop]();\n }\n\n // Apart form the setter getter, an instance method is injected to create real renderer instances\n env.canvas = () => {\n // Create a canvas instance with this settings\n const settings = globalStore.serialize();\n const canvas = Canvas.withSettings(settings, { /* registry */\n components,\n componentSubRegistry\n }, env.globalDependencies());\n\n // Whenever settings is changed canvas is updated\n enableChainedTransaction(globalStore, canvas, Object.keys(settings));\n\n return canvas;\n };\n\n // Global dependencies for for compositions. Only one copy of the same should be in the page\n env.globalDependencies = () => {\n if (!globalCache.smartlabel) {\n globalCache.smartlabel = new Smartlabel(1, 'body');\n }\n return {\n smartlabel: globalCache.smartlabel,\n lifeCycleManager: new LifeCycleManager()\n };\n };\n\n // Retrieves global settings. This getter is readonly so that user can't change this as change should happen\n // only from setter to avoid unwanted sync issues.\n env.settings = () => globalStore.serialize();\n\n env.registry = (...overrideRegistry) => {\n // Selectively copy the properties from COMPONENTS\n if (overrideRegistry.length) {\n for (const prop in overrideRegistry) {\n if (prop in defaultRegistry) {\n components[prop] = overrideRegistry[prop];\n }\n }\n return env;\n }\n return components;\n };\n\n env.cellRegistry = (...overrideRegistry) => {\n const cellRegistry = componentSubRegistry.cellRegistry;\n if (overrideRegistry.length) {\n overrideRegistryDefinitions(overrideRegistry[0], cellRegistry);\n return env;\n }\n return cellRegistry.get();\n };\n\n env.layerRegistry = (...overrideRegistry) => {\n const layerRegistry = componentSubRegistry.layerRegistry;\n if (overrideRegistry.length) {\n overrideRegistryDefinitions(overrideRegistry[0], layerRegistry);\n return env;\n }\n return layerRegistry.get();\n };\n\n return env;\n};\n\nconst SideEffects = {\n sideEffects,\n standards: {\n SurrogateSideEffect,\n SpawnableSideEffect,\n GenericSideEffect\n }\n};\n\nconst Behaviours = {\n behaviouralActions,\n standards: {\n GenericBehaviour,\n PersistentBehaviour,\n VolatileBehaviour\n }\n};\n\nmuze.DataModel = DataModel;\nmuze.version = pkg.version;\nmuze.SideEffects = SideEffects;\nmuze.ActionModel = ActionModel;\nmuze.layerFactory = layerFactory;\nmuze.Operators = operators;\nmuze.Behaviours = Behaviours;\nmuze.utils = {\n getClientPoint,\n getEvent,\n makeElement,\n selectElement,\n DateTimeFormatter,\n require\n};\n\nexport default muze;\n"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack://muze/webpack/universalModuleDefinition","webpack://muze/webpack/bootstrap","webpack://muze/webpack://DataModel/webpack/universalModuleDefinition","webpack://muze/webpack://DataModel/webpack/bootstrap","webpack://muze/webpack://DataModel/src/index.js","webpack://muze/webpack://DataModel/src/enums/data-format.js","webpack://muze/webpack://DataModel/src/enums/dimension-subtype.js","webpack://muze/webpack://DataModel/src/enums/measure-subtype.js","webpack://muze/webpack://DataModel/src/enums/field-type.js","webpack://muze/webpack://DataModel/src/enums/filtering-mode.js","webpack://muze/webpack://DataModel/src/enums/group-by-functions.js","webpack://muze/webpack://DataModel/src/utils/date-time-formatter.js","webpack://muze/webpack://DataModel/src/utils/column-major.js","webpack://muze/webpack://DataModel/src/utils/extend2.js","webpack://muze/webpack://DataModel/src/utils/helper.js","webpack://muze/webpack://DataModel/src/field-store.js","webpack://muze/webpack://DataModel/src/value.js","webpack://muze/webpack://DataModel/src/operator/row-diffset-iterator.js","webpack://muze/webpack://DataModel/src/invalid-aware-types.js","webpack://muze/webpack://DataModel/src/operator/compose.js","webpack://muze/webpack://DataModel/src/constants/index.js","webpack://muze/webpack://DataModel/src/operator/get-common-schema.js","webpack://muze/webpack://DataModel/src/operator/cross-product.js","webpack://muze/webpack://DataModel/src/operator/merge-sort.js","webpack://muze/webpack://DataModel/src/operator/data-builder.js","webpack://muze/webpack://DataModel/src/operator/difference.js","webpack://muze/webpack://DataModel/src/operator/group-by-function.js","webpack://muze/webpack://DataModel/src/utils/reducer-store.js","webpack://muze/webpack://DataModel/src/operator/natural-join-filter-function.js","webpack://muze/webpack://DataModel/src/operator/union.js","webpack://muze/webpack://DataModel/src/operator/outer-join.js","webpack://muze/webpack://DataModel/src/fields/field/index.js","webpack://muze/webpack://DataModel/src/fields/dimension/index.js","webpack://muze/webpack://DataModel/src/fields/categorical/index.js","webpack://muze/webpack://DataModel/src/fields/temporal/index.js","webpack://muze/webpack://DataModel/src/fields/binned/index.js","webpack://muze/webpack://DataModel/src/fields/measure/index.js","webpack://muze/webpack://DataModel/src/fields/continuous/index.js","webpack://muze/webpack://DataModel/src/fields/parsers/field-parser/index.js","webpack://muze/webpack://DataModel/src/fields/parsers/categorical-parser/index.js","webpack://muze/webpack://DataModel/src/fields/parsers/temporal-parser/index.js","webpack://muze/webpack://DataModel/src/fields/parsers/binned-parser/index.js","webpack://muze/webpack://DataModel/src/fields/parsers/continuous-parser/index.js","webpack://muze/webpack://DataModel/src/fields/partial-field/index.js","webpack://muze/webpack://DataModel/src/field-creator.js","webpack://muze/webpack://DataModel/src/default-config.js","webpack://muze/webpack://DataModel/src/converter/dsv-arr.js","webpack://muze/webpack://DataModel/node_modules/d3-dsv/src/dsv.js","webpack://muze/webpack://DataModel/node_modules/d3-dsv/src/csv.js","webpack://muze/webpack://DataModel/node_modules/d3-dsv/src/tsv.js","webpack://muze/webpack://DataModel/src/converter/dsv-str.js","webpack://muze/webpack://DataModel/src/converter/flat-json.js","webpack://muze/webpack://DataModel/src/converter/auto-resolver.js","webpack://muze/webpack://DataModel/src/helper.js","webpack://muze/webpack://DataModel/src/relation.js","webpack://muze/webpack://DataModel/src/datamodel.js","webpack://muze/webpack://DataModel/src/operator/group-by.js","webpack://muze/webpack://DataModel/src/operator/bucket-creator.js","webpack://muze/webpack://DataModel/src/stats/index.js","webpack://muze/webpack://DataModel/src/export.js","webpack://muze/webpack://DataModel/src/operator/pure-operators.js","webpack://muze/webpack://DataModel/src/operator/natural-join.js","webpack://muze/webpack://hyperdis/webpack/universalModuleDefinition","webpack://muze/webpack://hyperdis/webpack/bootstrap","webpack://muze/webpack://hyperdis/src/utils/set.js","webpack://muze/webpack://hyperdis/src/utils/index.js","webpack://muze/webpack://hyperdis/src/graph-node.js","webpack://muze/webpack://hyperdis/src/electric-node.js","webpack://muze/webpack://hyperdis/src/graph.js","webpack://muze/webpack://hyperdis/src/model.js","webpack://muze/webpack://hyperdis/src/index.js","webpack://muze/(webpack)/buildin/module.js","webpack://muze/./packages/muze-utils/node_modules/fusioncharts-smartlabel/lib/SmartlabelManager.js","webpack://muze/./packages/muze-utils/node_modules/fusioncharts-smartlabel/lib/lib.js","webpack://muze/./packages/muze/src/index.js","webpack://muze/./packages/muze-utils/node_modules/fusioncharts-smartlabel/lib/container-manager.js","webpack://muze/./packages/muze-utils/node_modules/d3-array/src/ascending.js","webpack://muze/./packages/muze-utils/node_modules/d3-array/src/bisector.js","webpack://muze/./packages/muze-utils/node_modules/d3-array/src/bisect.js","webpack://muze/./packages/muze-utils/node_modules/d3-array/src/cross.js","webpack://muze/./packages/muze-utils/node_modules/d3-array/src/number.js","webpack://muze/./packages/muze-utils/node_modules/d3-array/src/array.js","webpack://muze/./packages/muze-utils/node_modules/d3-array/src/range.js","webpack://muze/./packages/muze-utils/node_modules/d3-array/src/ticks.js","webpack://muze/./packages/muze-utils/node_modules/d3-array/src/threshold/sturges.js","webpack://muze/./packages/muze-utils/node_modules/d3-array/src/quantile.js","webpack://muze/./packages/muze-utils/node_modules/d3-collection/src/map.js","webpack://muze/./packages/muze-utils/node_modules/d3-collection/src/nest.js","webpack://muze/./packages/muze-utils/node_modules/d3-collection/src/set.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/array.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/ordinal.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/band.js","webpack://muze/./packages/muze-utils/node_modules/d3-color/src/define.js","webpack://muze/./packages/muze-utils/node_modules/d3-color/src/color.js","webpack://muze/./packages/muze-utils/node_modules/d3-color/src/math.js","webpack://muze/./packages/muze-utils/node_modules/d3-color/src/lab.js","webpack://muze/./packages/muze-utils/node_modules/d3-color/src/cubehelix.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/basis.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/constant.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/color.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/rgb.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/number.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/basisClosed.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/object.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/string.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/value.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/transform/parse.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/date.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/array.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/round.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/transform/decompose.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/transform/index.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/zoom.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/hsl.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/hcl.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/cubehelix.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/piecewise.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/quantize.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/constant.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/number.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/continuous.js","webpack://muze/./packages/muze-utils/node_modules/d3-format/src/formatDecimal.js","webpack://muze/./packages/muze-utils/node_modules/d3-format/src/exponent.js","webpack://muze/./packages/muze-utils/node_modules/d3-format/src/formatSpecifier.js","webpack://muze/./packages/muze-utils/node_modules/d3-format/src/formatTrim.js","webpack://muze/./packages/muze-utils/node_modules/d3-format/src/formatPrefixAuto.js","webpack://muze/./packages/muze-utils/node_modules/d3-format/src/defaultLocale.js","webpack://muze/./packages/muze-utils/node_modules/d3-format/src/formatRounded.js","webpack://muze/./packages/muze-utils/node_modules/d3-format/src/formatTypes.js","webpack://muze/./packages/muze-utils/node_modules/d3-format/src/identity.js","webpack://muze/./packages/muze-utils/node_modules/d3-format/src/locale.js","webpack://muze/./packages/muze-utils/node_modules/d3-format/src/formatGroup.js","webpack://muze/./packages/muze-utils/node_modules/d3-format/src/formatNumerals.js","webpack://muze/./packages/muze-utils/node_modules/d3-format/src/precisionFixed.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/tickFormat.js","webpack://muze/./packages/muze-utils/node_modules/d3-format/src/precisionPrefix.js","webpack://muze/./packages/muze-utils/node_modules/d3-format/src/precisionRound.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/linear.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/identity.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/nice.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/log.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/pow.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/quantile.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/quantize.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/threshold.js","webpack://muze/./packages/muze-utils/node_modules/d3-time/src/interval.js","webpack://muze/./packages/muze-utils/node_modules/d3-time/src/millisecond.js","webpack://muze/./packages/muze-utils/node_modules/d3-time/src/duration.js","webpack://muze/./packages/muze-utils/node_modules/d3-time/src/second.js","webpack://muze/./packages/muze-utils/node_modules/d3-time/src/minute.js","webpack://muze/./packages/muze-utils/node_modules/d3-time/src/hour.js","webpack://muze/./packages/muze-utils/node_modules/d3-time/src/day.js","webpack://muze/./packages/muze-utils/node_modules/d3-time/src/week.js","webpack://muze/./packages/muze-utils/node_modules/d3-time/src/month.js","webpack://muze/./packages/muze-utils/node_modules/d3-time/src/year.js","webpack://muze/./packages/muze-utils/node_modules/d3-time/src/utcMinute.js","webpack://muze/./packages/muze-utils/node_modules/d3-time/src/utcHour.js","webpack://muze/./packages/muze-utils/node_modules/d3-time/src/utcDay.js","webpack://muze/./packages/muze-utils/node_modules/d3-time/src/utcWeek.js","webpack://muze/./packages/muze-utils/node_modules/d3-time/src/utcMonth.js","webpack://muze/./packages/muze-utils/node_modules/d3-time/src/utcYear.js","webpack://muze/./packages/muze-utils/node_modules/d3-time-format/src/locale.js","webpack://muze/./packages/muze-utils/node_modules/d3-time-format/src/defaultLocale.js","webpack://muze/./packages/muze-utils/node_modules/d3-time-format/src/isoFormat.js","webpack://muze/./packages/muze-utils/node_modules/d3-time-format/src/isoParse.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/time.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/colors.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/category10.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/category20b.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/category20.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/category20c.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/cubehelix.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/rainbow.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/viridis.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/sequential.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/colors.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/categorical/Accent.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/categorical/category10.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/categorical/Dark2.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/categorical/Paired.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/categorical/Pastel1.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/categorical/Pastel2.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/categorical/Set1.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/categorical/Set2.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/categorical/Set3.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/ramp.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/diverging/BrBG.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/diverging/PRGn.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/diverging/PiYG.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/diverging/PuOr.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/diverging/RdBu.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/diverging/RdGy.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/diverging/RdYlBu.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/diverging/RdYlGn.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/diverging/Spectral.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-multi/BuGn.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-multi/BuPu.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-multi/GnBu.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-multi/OrRd.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-multi/PuBuGn.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-multi/PuBu.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-multi/PuRd.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-multi/RdPu.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-multi/YlGnBu.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-multi/YlGn.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-multi/YlOrBr.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-multi/YlOrRd.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-single/Blues.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-single/Greens.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-single/Greys.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-single/Purples.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-single/Reds.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-single/Oranges.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-multi/cubehelix.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-multi/rainbow.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-multi/sinebow.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-multi/viridis.js","webpack://muze/./packages/muze-utils/src/enums/namespace.js","webpack://muze/./packages/muze-utils/src/enums/reserved-fields.js","webpack://muze/./packages/muze-utils/src/enums/common-props.js","webpack://muze/./packages/muze-utils/src/enums/constants.js","webpack://muze/./packages/muze-utils/node_modules/d3-axis/src/array.js","webpack://muze/./packages/muze-utils/node_modules/d3-axis/src/identity.js","webpack://muze/./packages/muze-utils/node_modules/d3-axis/src/axis.js","webpack://muze/./packages/muze-utils/node_modules/d3-path/src/path.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/constant.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/math.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/arc.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/curve/linear.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/point.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/line.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/area.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/descending.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/identity.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/curve/radial.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/lineRadial.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/array.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/symbol/circle.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/symbol/cross.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/symbol/diamond.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/symbol/star.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/symbol/square.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/symbol/triangle.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/symbol/wye.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/noop.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/curve/basis.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/curve/basisClosed.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/curve/basisOpen.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/curve/bundle.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/curve/cardinal.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/curve/cardinalClosed.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/curve/cardinalOpen.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/curve/catmullRom.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/curve/catmullRomClosed.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/curve/catmullRomOpen.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/curve/linearClosed.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/curve/monotone.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/curve/natural.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/curve/step.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/offset/none.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/order/none.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/stack.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/order/ascending.js","webpack://muze/./packages/muze-utils/node_modules/d3-ease/src/cubic.js","webpack://muze/./packages/muze-utils/node_modules/d3-ease/src/poly.js","webpack://muze/./packages/muze-utils/node_modules/d3-ease/src/sin.js","webpack://muze/./packages/muze-utils/node_modules/d3-ease/src/bounce.js","webpack://muze/./packages/muze-utils/node_modules/d3-ease/src/back.js","webpack://muze/./packages/muze-utils/node_modules/d3-ease/src/elastic.js","webpack://muze/./packages/muze-utils/node_modules/d3-voronoi/src/constant.js","webpack://muze/./packages/muze-utils/node_modules/d3-voronoi/src/point.js","webpack://muze/./packages/muze-utils/node_modules/d3-voronoi/src/RedBlackTree.js","webpack://muze/./packages/muze-utils/node_modules/d3-voronoi/src/Edge.js","webpack://muze/./packages/muze-utils/node_modules/d3-voronoi/src/Cell.js","webpack://muze/./packages/muze-utils/node_modules/d3-voronoi/src/Circle.js","webpack://muze/./packages/muze-utils/node_modules/d3-voronoi/src/Beach.js","webpack://muze/./packages/muze-utils/node_modules/d3-voronoi/src/Diagram.js","webpack://muze/./packages/muze-utils/node_modules/d3-voronoi/src/voronoi.js","webpack://muze/./packages/muze-utils/src/DataSystem/selection.js","webpack://muze/./packages/muze-utils/src/enums/stack-config.js","webpack://muze/./packages/muze-utils/src/common-utils.js","webpack://muze/./packages/muze-utils/node_modules/d3-ease/src/linear.js","webpack://muze/./packages/muze-utils/node_modules/d3-ease/src/circle.js","webpack://muze/./packages/muze-utils/src/DataSystem/dataSelect.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/symbol.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/order/descending.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/offset/diverging.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/offset/expand.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/offset/wiggle.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/pie.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/namespaces.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/namespace.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/creator.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selector.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selectorAll.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/matcher.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/sparse.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/enter.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/constant.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/data.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/sort.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/attr.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/window.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/style.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/classed.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/text.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/html.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/raise.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/lower.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/insert.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/remove.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/clone.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/on.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/dispatch.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/index.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/select.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/selectAll.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/filter.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/exit.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/join.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/merge.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/order.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/call.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/nodes.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/node.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/size.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/empty.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/each.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/property.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/append.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/datum.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/select.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/local.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/sourceEvent.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/point.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/mouse.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/touch.js","webpack://muze/./packages/muze-utils/node_modules/d3-dispatch/src/dispatch.js","webpack://muze/./packages/muze-utils/node_modules/d3-drag/src/noevent.js","webpack://muze/./packages/muze-utils/node_modules/d3-drag/src/nodrag.js","webpack://muze/./packages/muze-utils/node_modules/d3-drag/src/constant.js","webpack://muze/./packages/muze-utils/node_modules/d3-drag/src/event.js","webpack://muze/./packages/muze-utils/node_modules/d3-drag/src/drag.js","webpack://muze/./packages/muze-utils/node_modules/d3-timer/src/timer.js","webpack://muze/./packages/muze-utils/node_modules/d3-timer/src/timeout.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/schedule.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/tween.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/interpolate.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/remove.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/selection.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/style.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/text.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/index.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/select.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/selectAll.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/filter.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/merge.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/transition.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/on.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/attr.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/attrTween.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/styleTween.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/delay.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/duration.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/ease.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/end.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/selection/transition.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/selection/index.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/selection/interrupt.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/interrupt.js","webpack://muze/./packages/muze-utils/src/renderer-utils.js","webpack://muze/./packages/muze-utils/src/lifecycle-manager/event-list.js","webpack://muze/./packages/muze-utils/src/lifecycle-manager/lifecycle-manager.js","webpack://muze/./packages/muze-utils/src/lifecycle-manager/index.js","webpack://muze/./packages/muze-utils/src/lifecycle-manager/helper.js","webpack://muze/./packages/muze-utils/src/index.js","webpack://muze/./packages/muze-firebolt/src/enums/actions.js","webpack://muze/./packages/muze-firebolt/src/enums/selection.js","webpack://muze/./packages/muze-firebolt/src/selection-set/index.js","webpack://muze/./packages/muze-firebolt/src/selection-set/selection-set.js","webpack://muze/./packages/muze-firebolt/src/helper/index.js","webpack://muze/./packages/muze-firebolt/src/firebolt.js","webpack://muze/./packages/muze-firebolt/src/actions/behavioural/generic.js","webpack://muze/./packages/muze-firebolt/src/actions/behavioural/volatile.js","webpack://muze/./packages/muze-firebolt/src/enums/behaviours.js","webpack://muze/./packages/muze-firebolt/src/actions/behavioural/highlight.js","webpack://muze/./packages/muze-firebolt/src/actions/behavioural/brush.js","webpack://muze/./packages/muze-firebolt/src/actions/behavioural/filter.js","webpack://muze/./packages/muze-firebolt/src/actions/behavioural/persistent.js","webpack://muze/./packages/muze-firebolt/src/actions/behavioural/select.js","webpack://muze/./packages/muze-firebolt/src/actions/physical/helpers/drag-action-config.js","webpack://muze/./packages/muze-firebolt/src/actions/physical/helpers/drag-event.js","webpack://muze/./packages/muze-firebolt/src/actions/physical/hover.js","webpack://muze/./packages/muze-firebolt/src/enums/constants.js","webpack://muze/./packages/muze-firebolt/src/actions/physical/helpers/index.js","webpack://muze/./packages/muze-firebolt/src/actions/physical/click.js","webpack://muze/./packages/muze-firebolt/src/actions/physical/index.js","webpack://muze/./packages/muze-firebolt/src/actions/physical/drag.js","webpack://muze/./packages/muze-firebolt/src/actions/physical/longtouch.js","webpack://muze/./packages/muze-firebolt/src/actions/physical/touch-drag.js","webpack://muze/./packages/muze-firebolt/src/side-effects/generic/props.js","webpack://muze/./packages/muze-firebolt/src/side-effects/generic/index.js","webpack://muze/./packages/muze-firebolt/src/side-effects/generic/generic-sideeffect.js","webpack://muze/./packages/muze-firebolt/src/side-effects/surrogate.js","webpack://muze/./packages/muze-firebolt/src/side-effects/spawnable.js","webpack://muze/./packages/muze-firebolt/src/side-effects/selection-box/helper.js","webpack://muze/./packages/muze-firebolt/src/side-effects/selection-box/index.js","webpack://muze/./packages/muze-firebolt/src/actions/physical/selection-box-drag.js","webpack://muze/./packages/muze-tooltip/src/constants.js","webpack://muze/./packages/muze-tooltip/src/default-config.js","webpack://muze/./packages/muze-tooltip/src/helper.js","webpack://muze/./packages/muze-tooltip/src/content.js","webpack://muze/./packages/muze-tooltip/src/tooltip.js","webpack://muze/./packages/muze-firebolt/src/side-effects/tooltip/strategies.js","webpack://muze/./packages/muze-firebolt/src/side-effects/tooltip/index.js","webpack://muze/./packages/muze-firebolt/src/side-effects/helper/index.js","webpack://muze/./packages/muze-firebolt/src/side-effects/crossline/index.js","webpack://muze/./packages/muze-firebolt/src/side-effects/plot-highlighter/strategy.js","webpack://muze/./packages/muze-firebolt/src/side-effects/plot-highlighter/index.js","webpack://muze/./packages/muze-firebolt/src/side-effects/filter/index.js","webpack://muze/./packages/muze-firebolt/src/side-effects/anchors/index.js","webpack://muze/./packages/muze-firebolt/src/side-effects/persistent-anchors.js","webpack://muze/./packages/muze-firebolt/src/side-effects/brush-anchors.js","webpack://muze/./packages/muze-firebolt/src/behaviour-effect-map.js","webpack://muze/./packages/visual-layer/src/enums/constants.js","webpack://muze/./packages/visual-layer/src/layers/area/default-config.js","webpack://muze/./packages/visual-layer/src/simple-layer/simple-layer.js","webpack://muze/./packages/visual-layer/src/base-layer/props.js","webpack://muze/./packages/muze-axis/src/enums/axis-orientation.js","webpack://muze/./packages/muze-axis/src/enums/scale-type.js","webpack://muze/./packages/muze-axis/src/enums/constants.js","webpack://muze/./packages/muze-axis/src/scale-creator.js","webpack://muze/./packages/muze-axis/src/cartesian-axis/default-config.js","webpack://muze/./packages/muze-axis/src/axis-renderer.js","webpack://muze/./packages/muze-axis/src/cartesian-axis/skip-ticks.js","webpack://muze/./packages/muze-axis/src/cartesian-axis/space-setter.js","webpack://muze/./packages/muze-axis/src/cartesian-axis/helper.js","webpack://muze/./packages/muze-axis/src/cartesian-axis/props.js","webpack://muze/./packages/muze-axis/src/cartesian-axis/simple-axis.js","webpack://muze/./packages/muze-axis/src/cartesian-axis/interpolators/linear.js","webpack://muze/./packages/muze-axis/src/cartesian-axis/interpolators/log.js","webpack://muze/./packages/muze-axis/src/cartesian-axis/interpolators/pow.js","webpack://muze/./packages/muze-axis/src/cartesian-axis/continous-axis.js","webpack://muze/./packages/muze-axis/src/cartesian-axis/band-axis.js","webpack://muze/./packages/muze-axis/src/cartesian-axis/time-axis.js","webpack://muze/./packages/muze-axis/src/color-axis/color-maps.js","webpack://muze/./packages/muze-axis/src/color-axis/defaults.js","webpack://muze/./packages/muze-axis/src/color-axis/props.js","webpack://muze/./packages/muze-axis/src/helper.js","webpack://muze/./packages/muze-axis/src/color-axis/color-strategy.js","webpack://muze/./packages/muze-axis/src/color-axis/color-axis.js","webpack://muze/./packages/muze-axis/src/size-axis/defaults.js","webpack://muze/./packages/muze-axis/src/size-axis/size-strategy.js","webpack://muze/./packages/muze-axis/src/size-axis/props.js","webpack://muze/./packages/muze-axis/src/size-axis/size-axis.js","webpack://muze/./packages/muze-axis/src/shape-axis/defaults.js","webpack://muze/./packages/muze-axis/src/shape-axis/props.js","webpack://muze/./packages/muze-axis/src/shape-axis/shape-axis.js","webpack://muze/./packages/muze-axis/src/shape-axis/helper.js","webpack://muze/./packages/muze-axis/src/polar-axis/props.js","webpack://muze/./packages/muze-axis/src/polar-axis/angle-axis.js","webpack://muze/./packages/visual-group/src/enums/constants.js","webpack://muze/./packages/muze-axis/src/polar-axis/radius-axis.js","webpack://muze/./packages/muze-axis/src/data-type-scale-map.js","webpack://muze/./packages/transform/src/group-transform/index.js","webpack://muze/./packages/transform/src/identity-transform/index.js","webpack://muze/./packages/transform/src/transform-factory/index.js","webpack://muze/./packages/transform/src/enums/transform-type.js","webpack://muze/./packages/transform/src/stack-transform/index.js","webpack://muze/./packages/visual-layer/src/helpers/index.js","webpack://muze/./packages/visual-layer/src/base-layer/listener-map.js","webpack://muze/./packages/visual-layer/src/enums/props.js","webpack://muze/./packages/visual-layer/src/base-layer/default-options.js","webpack://muze/./packages/visual-layer/src/base-layer/base-layer.js","webpack://muze/./packages/visual-layer/src/layers/line/renderer.js","webpack://muze/./packages/visual-layer/src/layers/line/default-config.js","webpack://muze/./packages/visual-layer/src/layers/line/line.js","webpack://muze/./packages/visual-layer/src/layers/area/renderer.js","webpack://muze/./packages/visual-layer/src/layers/area/area.js","webpack://muze/./packages/visual-layer/src/layers/arc/default-config.js","webpack://muze/./packages/visual-layer/src/layers/arc/arc.js","webpack://muze/./packages/visual-layer/src/layers/arc/arc-helper.js","webpack://muze/./packages/visual-layer/src/layers/text/renderer.js","webpack://muze/./packages/visual-layer/src/layers/text/default-config.js","webpack://muze/./packages/visual-layer/src/layers/text/text.js","webpack://muze/./packages/visual-layer/src/layers/point/renderer.js","webpack://muze/./packages/visual-layer/src/layers/point/default-config.js","webpack://muze/./packages/visual-layer/src/layers/point/point.js","webpack://muze/./packages/visual-layer/src/layers/bar/renderer.js","webpack://muze/./packages/visual-layer/src/layers/bar/default-config.js","webpack://muze/./packages/visual-layer/src/layers/bar/bar-helper.js","webpack://muze/./packages/visual-layer/src/layers/bar/bar.js","webpack://muze/./packages/visual-layer/src/layers/tick/default-config.js","webpack://muze/./packages/visual-layer/src/layers/tick/renderer.js","webpack://muze/./packages/visual-layer/src/layers/tick/tick.js","webpack://muze/./packages/visual-layer/src/enums/layer-types.js","webpack://muze/./packages/visual-layer/src/layer-factory/layer-factory.js","webpack://muze/./packages/visual-layer/src/layer-factory/index.js","webpack://muze/./packages/visual-layer/src/defaults.js","webpack://muze/./packages/visual-group/src/visual-group/local-options.js","webpack://muze/./packages/visual-group/src/simple-group/simple-group.js","webpack://muze/./packages/visual-group/src/variable/variable.js","webpack://muze/./packages/visual-group/src/variable/composed-vars.js","webpack://muze/./packages/visual-group/src/variable/simple-var.js","webpack://muze/./packages/visual-group/src/encoder/field-sanitizer.js","webpack://muze/./packages/visual-group/src/encoder/visual-encoder.js","webpack://muze/./packages/visual-group/src/enums/scale-maps.js","webpack://muze/./packages/visual-group/src/data-type-scale-map.js","webpack://muze/./packages/visual-group/src/encoder/encoder-helper.js","webpack://muze/./packages/visual-group/src/encoder/cartesian-encoder.js","webpack://muze/./packages/visual-group/src/encoder/polar-encoder.js","webpack://muze/./packages/visual-group/src/encoder/retinal-encoder.js","webpack://muze/./packages/visual-group/src/group-helper/group-utils.js","webpack://muze/./packages/visual-unit/src/firebolt/action-behaviour-map.js","webpack://muze/./packages/visual-unit/src/helper/index.js","webpack://muze/./packages/visual-unit/src/enums/constants.js","webpack://muze/./packages/visual-unit/src/helper/grid-lines.js","webpack://muze/./packages/visual-unit/src/default-config.js","webpack://muze/./packages/visual-unit/src/local-options.js","webpack://muze/./packages/visual-unit/src/enums/reactive-props.js","webpack://muze/./packages/visual-unit/src/listener-map.js","webpack://muze/./packages/visual-unit/src/props.js","webpack://muze/./packages/visual-unit/src/firebolt/helper.js","webpack://muze/./packages/visual-unit/src/firebolt/payload-generator.js","webpack://muze/./packages/visual-unit/src/firebolt/data-propagator.js","webpack://muze/./packages/visual-unit/src/firebolt/index.js","webpack://muze/./packages/visual-unit/src/visual-unit.js","webpack://muze/./packages/visual-group/src/group-helper/matrix-model.js","webpack://muze/./packages/visual-group/src/group-helper/cell-creator.js","webpack://muze/./packages/visual-group/src/group-helper/resolver-props.js","webpack://muze/./packages/visual-group/src/group-helper/matrix-resolver.js","webpack://muze/./packages/visual-group/src/visual-group/value-matrix.js","webpack://muze/./packages/visual-group/src/visual-group/helper.js","webpack://muze/./packages/visual-group/src/visual-group/change-listener.js","webpack://muze/./packages/visual-group/src/visual-group/props.js","webpack://muze/./packages/visual-group/src/visual-group/visual-group.js","webpack://muze/./packages/muze-legend/src/firebolt/behavioural/select.js","webpack://muze/./packages/muze-legend/src/firebolt/action-behaviour-map.js","webpack://muze/./packages/muze-legend/src/firebolt/behaviour-effect-map.js","webpack://muze/./packages/muze-legend/src/enums/behaviours.js","webpack://muze/./packages/muze-legend/src/enums/side-effects.js","webpack://muze/./packages/muze-legend/src/enums/constants.js","webpack://muze/./packages/muze-legend/src/firebolt/helper.js","webpack://muze/./packages/muze-legend/src/firebolt/legend-firebolt.js","webpack://muze/./packages/muze-legend/src/firebolt/physical/drag.js","webpack://muze/./packages/muze-legend/src/firebolt/physical/hover.js","webpack://muze/./packages/muze-legend/src/firebolt/physical/click.js","webpack://muze/./packages/muze-legend/src/firebolt/physical/index.js","webpack://muze/./packages/muze-legend/src/enums/actions.js","webpack://muze/./packages/muze-legend/src/firebolt/physical/selection-box-drag.js","webpack://muze/./packages/muze-legend/src/firebolt/side-effects/selection-box/index.js","webpack://muze/./packages/muze-legend/src/firebolt/side-effects/legend-highlighter/strategies.js","webpack://muze/./packages/muze-legend/src/firebolt/side-effects/legend-highlighter/index.js","webpack://muze/./packages/muze-legend/src/legend/props.js","webpack://muze/./packages/muze-legend/src/legend/defaults.js","webpack://muze/./packages/muze-legend/src/legend/legend-helper.js","webpack://muze/./packages/muze-legend/src/legend/simple-legend.js","webpack://muze/./packages/muze-legend/src/legend/position-config.js","webpack://muze/./packages/muze-legend/src/legend/renderer.js","webpack://muze/./packages/muze-legend/src/legend/discrete-legend.js","webpack://muze/./packages/muze-legend/src/legend/gradient-helper.js","webpack://muze/./packages/muze-legend/src/legend/gradient-legend.js","webpack://muze/./packages/muze-legend/src/legend/step-legend.js","webpack://muze/./packages/muze/src/constants.js","webpack://muze/./packages/muze/src/operators.js","webpack://muze/./packages/muze/src/action-model.js","webpack://muze/./packages/muze/src/canvas/defaults.js","webpack://muze/./packages/muze/src/canvas/local-options.js","webpack://muze/./packages/layout/src/tree-layout/layout-component/layoutComponent.js","webpack://muze/./packages/layout/src/tree-layout/layout-component/dummy-component.js","webpack://muze/./packages/muze/src/defaults.js","webpack://muze/./packages/layout/src/tree-layout/constants/defaults.js","webpack://muze/./packages/layout/src/tree-layout/layout-definition/definition-manager/definitionModel.js","webpack://muze/./packages/layout/src/tree-layout/layout-definition/helper/index.js","webpack://muze/./packages/layout/src/tree-layout/layout-definition/tree/index.js","webpack://muze/./packages/layout/src/tree-layout/layout-definition/layout-model/index.js","webpack://muze/./packages/layout/src/tree-layout/utils/index.js","webpack://muze/./packages/layout/src/tree-layout/data-adapters/data-point.js","webpack://muze/./packages/layout/src/tree-layout/data-adapters/data-parser.js","webpack://muze/./packages/layout/src/tree-layout/data-adapters/helper.js","webpack://muze/./packages/layout/src/tree-layout/data-adapters/html-data.js","webpack://muze/./packages/layout/src/tree-layout/renderers/renderer.js","webpack://muze/./packages/layout/src/tree-layout/renderers/html-renderer.js","webpack://muze/./packages/layout/src/tree-layout/drawing-manager/helper.js","webpack://muze/./packages/layout/src/tree-layout/drawing-manager/index.js","webpack://muze/./packages/layout/src/tree-layout/layout-definition/definition-manager/index.js","webpack://muze/./packages/layout/src/tree-layout/layout-manager/layout-def.js","webpack://muze/./packages/layout/src/tree-layout/layout-manager/helper.js","webpack://muze/./packages/layout/src/tree-layout/layout-manager/index.js","webpack://muze/./packages/muze/src/canvas/helper.js","webpack://muze/./packages/muze/src/options.js","webpack://muze/./packages/layout/src/enums/constants.js","webpack://muze/./packages/layout/src/generic-layout/index.js","webpack://muze/./packages/layout/src/grid-layout/defaults.js","webpack://muze/./packages/layout/src/utils/index.js","webpack://muze/./packages/layout/src/visual-matrix/props.js","webpack://muze/./packages/layout/src/visual-matrix/default-config.js","webpack://muze/./packages/layout/src/visual-matrix/visual-matrix.js","webpack://muze/./packages/layout/src/visual-matrix/row-matrix.js","webpack://muze/./packages/layout/src/visual-matrix/column-matrix.js","webpack://muze/./packages/layout/src/grid-layout/computations.js","webpack://muze/./packages/layout/src/grid-layout/view-info-getter.js","webpack://muze/./packages/layout/src/grid-layout/layout.js","webpack://muze/./packages/layout/src/grid-layout/layout-helper.js","webpack://muze/./packages/layout/src/grid-layout/border-helper.js","webpack://muze/./packages/layout/src/grid-layout/span-maker.js","webpack://muze/./packages/muze/src/transaction-support.js","webpack://muze/./packages/muze/src/canvas/component-resolver.js","webpack://muze/./packages/visual-cell/src/enums/constants.js","webpack://muze/./packages/visual-cell/src/enums/cell-type.js","webpack://muze/./packages/visual-cell/src/simple-cell.js","webpack://muze/./packages/visual-cell/src/enums/defaults.js","webpack://muze/./packages/visual-cell/src/props.js","webpack://muze/./packages/visual-cell/src/axis-cell.js","webpack://muze/./packages/visual-cell/src/blank-cell.js","webpack://muze/./packages/visual-cell/src/text-cell.js","webpack://muze/./packages/visual-cell/src/geom-cell.js","webpack://muze/./packages/visual-cell/src/defaults.js","webpack://muze/./packages/visual-cell/src/constants.js","webpack://muze/./packages/visual-cell/src/cell-registry.js","webpack://muze/./packages/muze/src/canvas/title-maker.js","webpack://muze/./packages/muze/src/canvas/legend-maker.js","webpack://muze/./packages/muze/src/canvas/components/muze-chart-component.js","webpack://muze/./packages/muze/src/canvas/components/headerComponent.js","webpack://muze/./packages/muze/src/canvas/components/legendComponent.js","webpack://muze/./packages/muze/src/canvas/components/scroll-bar-maker/helper.js","webpack://muze/./packages/muze/src/canvas/components/scroll-bar-maker/props.js","webpack://muze/./packages/muze/src/canvas/components/scroll-bar-maker/scroll-maker.js","webpack://muze/./packages/muze/src/canvas/components/scroll-component.js","webpack://muze/./packages/muze/src/canvas/components/scroll-bar-maker/horizontal-scroll-maker.js","webpack://muze/./packages/muze/src/canvas/components/scroll-bar-maker/vertical-scroll-maker.js","webpack://muze/./packages/muze/src/canvas/components/matrix-component.js","webpack://muze/./packages/muze/src/canvas/components/grid-component.js","webpack://muze/./packages/muze/src/enums/constants.js","webpack://muze/./packages/muze/src/canvas/component-wrapper-maker.js","webpack://muze/./packages/muze/src/canvas/scroll-manager.js","webpack://muze/./packages/muze/src/canvas/layout-maker.js","webpack://muze/./packages/muze/src/canvas/firebolt/group-firebolt.js","webpack://muze/./packages/muze/src/canvas/firebolt/index.js","webpack://muze/./packages/muze/src/canvas/app-state.js","webpack://muze/./packages/muze/src/canvas/canvas.js","webpack://muze/./packages/muze/src/default-registry.js","webpack://muze/./packages/visual-layer/src/layer-registry.js","webpack://muze/./packages/muze/src/muze.js"],"names":["webpackUniversalModuleDefinition","root","factory","exports","module","define","amd","window","installedModules","__webpack_require__","moduleId","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","getDefault","getModuleExports","object","property","prototype","hasOwnProperty","p","s","e","_typeof","a","default","description","homepage","version","license","main","keywords","author","repository","type","url","contributors","email","dependencies","d3-dsv","devDependencies","babel-cli","babel-core","babel-eslint","babel-loader","babel-plugin-transform-runtime","babel-preset-env","babel-preset-es2015","babel-preset-flow","chai","cross-env","eslint","eslint-config-airbnb","eslint-plugin-import","eslint-plugin-jsx-a11y","eslint-plugin-react","istanbul-instrumenter-loader","jsdoc","json2yaml","karma","karma-chai","karma-chrome-launcher","karma-coverage-istanbul-reporter","karma-mocha","karma-spec-reporter","karma-webpack","marked","mocha","mocha-webpack","transform-runtime","webpack","webpack-cli","webpack-dev-server","scripts","test","ut","utd","build","start","lint","lint-errors","docs","DataModel","require","DataFormat","FLAT_JSON","DSV_STR","DSV_ARR","AUTO","DimensionSubtype","CATEGORICAL","TEMPORAL","GEO","BINNED","MeasureSubtype","CONTINUOUS","FieldType","MEASURE","DIMENSION","FilteringMode","NORMAL","INVERSE","ALL","GROUP_BY_FUNCTIONS","SUM","AVG","MIN","MAX","FIRST","LAST","COUNT","STD","convertToNativeDate","date","Date","pad","DateTimeFormatter","format","this","dtParams","nativeDate","RegExp","escape","text","replace","TOKEN_PREFIX","DATETIME_PARAM_SEQUENCE","YEAR","MONTH","DAY","HOUR","MINUTE","SECOND","MILLISECOND","defaultNumberParser","defVal","val","parsedVal","isFinite","parseInt","defaultRangeParser","range","nVal","toLowerCase","length","getTokenDefinitions","daysDef","short","long","monthsDef","H","index","extract","parser","formatter","getHours","toString","hours","P","M","getMinutes","S","getSeconds","K","getMilliseconds","join","day","getDay","A","getDate","b","month","getMonth","B","y","result","substring","presentDate","presentYear","Math","trunc","getFullYear","year","Y","getTokenFormalNames","definitions","HOUR_12","AMPM_UPPERCASE","AMPM_LOWERCASE","SHORT_DAY","LONG_DAY","DAY_OF_MONTH","DAY_OF_MONTH_CONSTANT_WIDTH","SHORT_MONTH","LONG_MONTH","MONTH_OF_YEAR","SHORT_YEAR","LONG_YEAR","tokenResolver","defaultResolver","arg","targetParam","arguments","hourFormat24","hourFormat12","ampmLower","ampmUpper","amOrpm","isPM","findTokens","tokenPrefix","tokenLiterals","keys","occurrence","forwardChar","indexOf","push","token","formatAs","nDate","formattedStr","String","formattedVal","parse","dateTimeStamp","options","extractTokenValue","dtParamSeq","noBreak","dtParamArr","args","resolverKey","resolverParams","resolverFn","param","resolvedVal","splice","apply","checkIfOnlyYear","unshift","tokenObj","lastOccurrenceIndex","occObj","occIndex","targetText","regexFormat","tokenArr","map","obj","occurrenceLength","extractValues","match","shift","getNativeDate","Number","len","v","store","fields","Array","forEach","fieldIndex","from","OBJECTSTRING","objectToStrFn","objectToStr","arrayToStr","checkCyclicRef","parentArr","bIndex","extend2","obj1","obj2","skipUndef","merge","tgtArr","srcArr","item","srcVal","tgtVal","str","cRef","isArray","getUniqueId","getTime","round","random","isArrEqual","arr1","arr2","formatNumber","detectDataFormat","data","fieldStore","createNamespace","fieldArr","dataId","fieldsObj","_cachedFieldsObj","field","getMeasure","measureFields","_cachedMeasure","schema","getDimension","dimensionFields","_cachedDimension","Value","_classCallCheck","configurable","writable","_value","rowDiffsetIterator","rowDiffset","callback","split","diffStr","diffStsArr","end","InvalidAwareTypes","invalid_aware_types_classCallCheck","config","assign","_invalidAwareValsMap","invalidAwareVals","NULL","NA","NIL","invalid","nil","null","undefined","DM_DERIVATIVES","SELECT","PROJECT","GROUPBY","COMPOSE","CAL_VAR","BIN","SORT","JOINS","CROSS","LEFTOUTER","RIGHTOUTER","NATURAL","FULLOUTER","getCommonSchema","fs1","fs2","retArr","fs1Arr","defaultFilterFn","crossProduct","dm1","dm2","filterFn","replaceCommonSchema","jointype","applicableFilterFn","dm1FieldStore","getFieldspace","dm2FieldStore","dm1FieldStoreName","dm2FieldStoreName","commonSchemaList","Error","tmpSchema","_rowDiffset","rowAdded","rowPosition","ii","tuple","userArg","partialField","dm1Fields","prepareJoinData","dm2Fields","detachedRoot","tupleObj","cellVal","iii","defSortFn","a1","b1","mergeSort","arr","sortFn","sort","lo","hi","mid","floor","mainArr","auxArr","getSortFn","dataType","sortType","retFunc","groupData","hashMap","Map","groupedData","datum","fieldVal","has","set","createSortingFnArg","groupedDatum","targetFields","targetFieldDetails","label","reduce","acc","next","idx","difference","hashTable","schemaNameArr","dm1FieldStoreFieldObj","dm2FieldStoreFieldObj","_colIdentifier","prepareDataHelper","dm","addData","hashData","schemaName","fieldName","getFilteredValues","filter","sum","filteredNumber","curr","avg","totalSum","isNaN","fnList","filteredValues","min","max","sqrt","mean","pow","num","defaultReducerName","ReducerStore","TypeError","defReducer","entries","_this","he","reducer","_this2","__unregister","delete","Function","reducerStore","ye","iterator","u","done","return","naturalJoinFilter","commonSchemaArr","retainTuple","union","leftOuterJoin","dataModel1","dataModel2","rightOuterJoin","Field","field_classCallCheck","subtype","displayName","Se","Dimension","_cachedDomain","calculateDataDomain","Categorical","hash","Set","domain","add","Temporal","temporal_classCallCheck","_cachedMinDiff","sortedData","arrLn","minDiff","POSITIVE_INFINITY","prevDatum","nextDatum","processedCount","_this3","Binned","binsArr","bins","Measure","unit","defAggFn","numberFormat","Continuous","NEGATIVE_INFINITY","FieldParser","Ue","CategoricalParser","isInvalid","getInvalidType","trim","TemporalParser","temporal_parser_classCallCheck","_dtf","BinnedParser","matched","parseFloat","ContinuousParser","PartialField","partial_field_classCallCheck","_sanitize","createFields","dataColumn","headers","headersObj","header","qe","dataFormat","DSVArr","firstRowHeader","columns","columnMajor","EOL","EOF","QUOTE","NEWLINE","RETURN","objectConverter","JSON","stringify","inferColumns","rows","columnSet","row","column","width","delimiter","reFormat","DELIMITER","charCodeAt","parseRows","f","N","I","eof","eol","j","slice","preformatBody","formatValue","formatRow","formatDate","getUTCHours","minutes","getUTCMinutes","seconds","getUTCSeconds","milliseconds","getUTCMilliseconds","getUTCFullYear","getUTCMonth","getUTCDate","convert","concat","formatBody","formatRows","csv","dsv","tsv","DSVStr","fieldSeparator","d3Dsv","FlatJSON","insertionIndex","Auto","converters","resp","persistDerivations","sourceDm","model","operation","_model$_derivation","criteriaFn","_derivation","op","meta","criteria","newDm","_newDm$_ancestorDeriv","_ancestorDerivation","cloneWithAllFields","clonedDm","clone","partialFieldspace","getPartialFieldspace","__calculateFieldspace","calculateFieldsConfig","filterPropagationModel","propModels","filterByMeasure","fns","dataObj","dataModel","propModel","getData","fieldsConfig","getFieldsConfig","fieldsSpace","values","def","some","every","propField","valueOf","select","fn","saveChild","cloneWithSelect","selectFn","selectConfig","cloneConfig","cloned","selectHelper","newRowDiffSet","lastInsertedValue","li","cachedStore","cloneProvider","selectorHelperFn","_iteratorNormalCompletion","checker","cloneWithProject","projField","allFields","projectionSet","actualProjField","sanitizeUnitSchema","unitSchema","sanitizeAndValidateSchema","supportedMeasureSubTypes","supportedDimSubTypes","updateData","relation","defaultConfig","converterFn","converter","pt","formattedData","dataHeader","fieldNameAs","as","nameSpace","_partialFieldspace","_","_dataFormat","fieldInSchema","applyExistingOperationOnModel","derivations","getDerivations","selectionModel","rejectionModel","derivation","_selectionModel","params","groupByString","_rejectionModel","propagateIdentifiers","propModelInf","nonTraversingModel","excludeModels","handlePropagation","_children","child","propagateToAllDataModels","identifiers","rootModels","propagationInf","propagationNameSpace","propagateToSource","propagationSourceId","sourceId","propagateInterpolatedValues","criterias","persistent","actionCriterias","mutableActions","filteredCriteria","entry","action","sourceActionCriterias","actionInf","actionConf","applyOnSource","models","path","getPathToRootModel","_parent","_ref3","rootModel","propConfig","sourceIdentifiers","rootGroupByModel","groupByModel","inf","propagationModel","filteredModel","reverse","Relation","relation_classCallCheck","source","_fieldStoreName","_propagationNameSpace","immutableActions","Dt","_fieldspace","updateFields","fieldStoreName","colIdentifier","collID","partialFieldMap","newFields","coll","joinWith","unionWith","differenceWith","defConfig","oDm","constructor","setParent","fieldConfig","normalizedProjField","search","_fieldConfig","fieldObj","removeChild","findIndex","sibling","parent","ReferenceError","__proto__","getPrototypeOf","_onPropagation","setPrototypeOf","order","withUid","getAllFields","dataGenerated","dataBuilder","sortingDetails","retObj","uids","addUid","columnWise","reqSorting","tmpDataArr","colName","insertInd","sortMeta","fDetails","sortingFn","pop","tmpData","fieldNames","fmtFieldIdx","elem","fIdx","fmtFn","datumIdx","fieldsArr","reducers","newDataModel","groupBy","existingDataModel","sFieldArr","dimensions","reducerObj","measures","defaultReducer","measureName","reducerFn","resolve","fieldStoreObj","dbName","dimensionArr","measureArr","rowCount","rawData","dataInCSVArr","sortedDm","colData","rowsCount","serializedData","rowIdx","colIdx","fieldinst","dependency","replaceVar","depVars","retrieveFn","depFieldIndices","fieldSpec","fs","suppliedFields","computedValues","fieldsData","h","Mt","addField","addToNameSpace","isMutableAction","payload","find","sourceNamespace","filterImmutableAction","criteriaModel","eventName","measureFieldName","binFieldName","_createBinnedFieldDat","measureField","buckets","binsCount","binSize","dMin","dMax","ceil","abs","generateBuckets","bucketRanges","binnedData","findBucketRange","leftIdx","rightIdx","midIdx","binField","serialize","getSchema","first","last","count","sd","std","Operators","compose","operations","currentDM","firstChild","dispose","bin","project","calculateVariable","naturalJoin","fullOuterJoin","Stats","enums","makeEntry","sCon","_set","set1","set2","filteredKeys","s1","s2","ForeignSet","isSimpleObject","win","reqAnimFrame","requestAnimationFrame","webkitRequestAnimationFrame","mozRequestAnimationFrame","oRequestAnimationFrame","msRequestAnimationFrame","setTimeout","getTimeBasedId","__lastTime","__id","flat","res","scheduler","onFinishCallback","queue","animationFrame","listeners","tempQ","unique","fetch","node","namedNode","qualifiedName","seed","fetchAggregator","getUpstreamNodes","list","rec","qname","placedIndex","preArr","postArr","outgoingEdges","resolver","accumulate","nodeDetails","identity","CustomResolver","utils_classCallCheck","dep","_dep","graph_node_classCallCheck","edges","_seed","requireResolve","retriever","history","electricEdges","_edges","retrieveDetails","edge","head","hist","electric_node_classCallCheck","nextFrame","currentFrame","lstnrs","nodes","nFn","qualifiedNodeMap","graph_node","_wholeSet","_propagate","propagationOverride","currentFrameListeners","nextFrameListeners","_schedule","flushTarget","flush","mount","resolveReqList","objn","perv","addDependencies","_node","getDependencies","getResolvedList","prop","props","fnSpec","eNode","_ref","electric_node","addEdges","addElectricNode","changedSet","upstreamNodes","upstreamNode","append","__execUniqueElectricEdges","cfLstnrs","nfLstnrs","toArray","repeatHead","resetPropagationOverride","qnames","_this4","update","resolved","resolveDependencyOrder","resolveMap","neighbour","isRoot","model_classCallCheck","_graph","graph","_lockFlag","_reqQ","mountPoint","_addPropInModel","calculationConfig","customResolver","varName","fetchFn","_customResolver","createNodesFrom","instantCall","_graph$stopPropagatio","propsArr","unsub","createElectricNodeOf","stopPropagation","setPropagationOverride","resetNodeValue","_graph$stopPropagatio2","setProp","getNodeValue","getNodeFromQualifiedName","Model","__webpack_exports__","webpackPolyfill","deprecate","paths","children","_interopRequireDefault","_lib2","_containerManager2","slLib","init","doc","document","htmlSplCharSpace"," ","documentSupport","getDocumentSupport","SVG_BBOX_CORRECTION","isWebKit","SmartLabelManager","id","container","useEllipses","wrapper","prevInstance","isBrowserLess","maxCacheLimit","maxDefaultCacheLimit","getElementById","createContainer","innerHTML","testStrAvg","isHeadLess","isIE","offsetHeight","offsetWidth","parentContainerStyle","style","parentContainer","_containerManager","_showNoEllipses","_init","setStyle","textToLines","smartlabel","lines","_calCharDimWithCache","calculateDifference","size","csArr","tw","twi","cachedStyle","asymmetricDifference","maxAdvancedCacheLimit","_container","cache","_advancedCache","advancedCacheKey","_advancedCacheKey","cacheName","fontSize","fontFamily","fontWeight","fontStyle","cacheInitName","repeat","height","_getWidthFn","contObj","_containerObj","svgText","bbox","textContent","getBBox","_styleNotSet","setLineHeight","sCont","_context","context","_cache","charCache","_lineHeight","lineHeight","useEllipsesOnOverflow","getSmartText","maxWidth","maxHeight","noWrap","trimStr","tempArr","tmpText","maxWidthWithEll","toolText","oriWidth","oriHeight","newCharIndex","nearestChar","tempChar","getWidth","initialLeft","initialTop","getOriSizeImproveObj","spanArr","x","minWidth","chr","elemRightMostPoint","elemLowestPoint","lastBR","removeFromIndex","removeFromIndexForEllipses","hasHTMLTag","maxStrWidth","lastDash","lastSpace","lastIndexBroken","strWidth","strHeight","oriTextArr","ellipsesStr","ellipsesWidth","dotWidth","characterArr","dashIndex","spaceIndex","lastLineBreak","fastTrim","ws","charAt","smartLabel","oriTextWidth","oriTextHeight","oriText","isTruncated","xmlTagRegEx","ltgtRegex","getOriSize","substr","getNearestBreakIndex","detailObj","tooltext","lastIndexOf","spanAdditionRegx","spanAdditionReplacer","classNameWithTag","classNameWithTagBR","childRetriverFn","childRetriverString","noClassTesting","classNameReg","className","spaceIdx","dashIdx","offsetLeft","offsetTop","parentNode","insertBefore","createElement","classNameBrReg","spanRemovalRegx","error","detailedCalculationFlag","textArr","letter","lSize","cumulativeSize","indiSizeStore","lib","userAgent","navigator","clsNameSpace","containerClass","brReplaceRegex","position","top","whiteSpace","padding","overflow","supportedStyle","font","font-family","font-weight","font-size","line-height","font-style","getElementsByClassName","opera","hasSVG","Boolean","SVGAngle","implementation","hasFeature","containerParent","body","appendChild","setAttribute","getElementsByTagName","sl","charLen","increment","avgWidth","styleObj","fSize","Muze","ContainerManager","maxContainers","svg","containers","rootNode","createElementNS","setAttributeNS","svgRoot","diff","containerObj","keyStr","prev","removeContainer","addContainer","avgCharWidth","display","cObj","ascending","NaN","bisector","compare","ascendingComparator","left","right","ascendingBisect","bisectRight","number","array","src_range","stop","step","e10","e5","e2","src_ticks","ticks","tickIncrement","power","log","LN10","tickStep","step0","step1","quantile","valueof","i0","value0","each","remove","clear","empty","src_nest","sortValues","rollup","nest","sortKeys","depth","createResult","setResult","keyValue","valuesByKey","createObject","setObject","createMap","setMap","sortKey","k","proto","implicit","ordinal","unknown","scale","copy","band","bandwidth","ordinalRange","paddingInner","paddingOuter","align","rescale","sequence","rangeRound","invertExtent","r0","r1","hiIndex","getClosestIndexOf","invert","side","highVal","d1","low","high","extend","definition","Color","reI","reN","reP","reHex3","reHex6","reRgbInteger","reRgbPercent","reRgbaInteger","reRgbaPercent","reHslPercent","reHslaPercent","named","aliceblue","antiquewhite","aqua","aquamarine","azure","beige","bisque","black","blanchedalmond","blue","blueviolet","brown","burlywood","cadetblue","chartreuse","chocolate","coral","cornflowerblue","cornsilk","crimson","cyan","darkblue","darkcyan","darkgoldenrod","darkgray","darkgreen","darkgrey","darkkhaki","darkmagenta","darkolivegreen","darkorange","darkorchid","darkred","darksalmon","darkseagreen","darkslateblue","darkslategray","darkslategrey","darkturquoise","darkviolet","deeppink","deepskyblue","dimgray","dimgrey","dodgerblue","firebrick","floralwhite","forestgreen","fuchsia","gainsboro","ghostwhite","gold","goldenrod","gray","green","greenyellow","grey","honeydew","hotpink","indianred","indigo","ivory","khaki","lavender","lavenderblush","lawngreen","lemonchiffon","lightblue","lightcoral","lightcyan","lightgoldenrodyellow","lightgray","lightgreen","lightgrey","lightpink","lightsalmon","lightseagreen","lightskyblue","lightslategray","lightslategrey","lightsteelblue","lightyellow","lime","limegreen","linen","magenta","maroon","mediumaquamarine","mediumblue","mediumorchid","mediumpurple","mediumseagreen","mediumslateblue","mediumspringgreen","mediumturquoise","mediumvioletred","midnightblue","mintcream","mistyrose","moccasin","navajowhite","navy","oldlace","olive","olivedrab","orange","orangered","orchid","palegoldenrod","palegreen","paleturquoise","palevioletred","papayawhip","peachpuff","peru","pink","plum","powderblue","purple","rebeccapurple","red","rosybrown","royalblue","saddlebrown","salmon","sandybrown","seagreen","seashell","sienna","silver","skyblue","slateblue","slategray","slategrey","snow","springgreen","steelblue","tan","teal","thistle","tomato","turquoise","violet","wheat","white","whitesmoke","yellow","yellowgreen","color","exec","Rgb","rgbn","rgba","hsla","g","rgbConvert","rgb","opacity","hex","Hsl","hsl","hslConvert","hsl2rgb","m1","m2","displayable","brighter","darker","deg2rad","PI","rad2deg","Xn","Yn","Zn","t0","t1","t2","t3","labConvert","Lab","Hcl","cos","sin","z","rgb2lrgb","xyz2lab","lab","lab2xyz","lrgb2rgb","hclConvert","atan2","hcl","C","D","E","ED","EB","BC_DA","cubehelix","cubehelixConvert","Cubehelix","bl","basis","v0","v1","v2","v3","cosh","sinh","src_constant","linear","hue","constant","gamma","nogamma","exponential","src_rgb","rgbGamma","colorRgb","rgbSpline","spline","colors","rgbBasis","src_number","reA","reB","src_string","am","bm","bs","bi","lastIndex","q","one","zero","cssNode","cssRoot","cssView","svgNode","src_value","value_typeof","string","setTime","nb","na","src_round","degrees","translateX","translateY","rotate","skewX","scaleX","scaleY","decompose","atan","interpolateTransform","pxComma","pxParen","degParen","translate","xa","ya","xb","yb","interpolateTransformCss","parseCss","documentElement","defaultView","transform","getComputedStyle","getPropertyValue","interpolateTransformSvg","parseSvg","baseVal","consolidate","matrix","SQRT2","colorHsl","hslLong","colorHcl","cubehelixGamma","colorCubehelix","cubehelixLong","piecewise","interpolate","d3_scale_src_constant","d3_scale_src_number","deinterpolateLinear","bimap","deinterpolate","reinterpolate","d0","polymap","bisect","target","clamp","continuous","output","input","interpolateValue","deinterpolateClamp","reinterpolateClamp","interpolateRound","formatDecimal","toExponential","coefficient","src_exponent","re","formatSpecifier","specifier","FormatSpecifier","fill","sign","symbol","comma","precision","prefixExponent","locale","formatPrefix","formatTrim","out","i1","formatRounded","exponent","formatTypes","%","toFixed","toPrecision","X","toUpperCase","src_identity","prefixes","src_locale","group","grouping","thousands","formatGroup","currency","decimal","numerals","formatNumerals","percent","newFormat","prefix","suffix","formatType","maybeSuffix","valuePrefix","valueSuffix","valueNegative","Infinity","defaultLocale","formatLocale","src_tickFormat","precisionPrefix","precisionRound","precisionFixed","linearish","tickFormat","nice","interval","x0","x1","pow10","powp","base","exp","logp","log10","log2","reflect","logs","pows","raise","thresholds","threshold","quantiles","quantize","newInterval","floori","offseti","offset","previous","millisecond","durationMinute","durationWeek","second","minute","hour","setHours","setDate","getTimezoneOffset","weekday","sunday","monday","tuesday","wednesday","thursday","friday","saturday","setMonth","setFullYear","utcMinute","setUTCSeconds","utcHour","setUTCMinutes","utcDay","setUTCHours","setUTCDate","utcWeekday","getUTCDay","utcSunday","utcMonday","utcTuesday","utcWednesday","utcThursday","utcFriday","utcSaturday","utcMonth","setUTCMonth","utcYear","setUTCFullYear","localDate","L","utcDate","UTC","newYear","timeFormat","utcFormat","utcParse","pads","-","0","numberRe","percentRe","requoteRe","requote","formatRe","names","formatLookup","parseWeekdayNumberSunday","w","parseWeekdayNumberMonday","parseWeekNumberSunday","U","parseWeekNumberISO","V","parseWeekNumberMonday","W","parseFullYear","parseYear","parseZone","Z","parseMonthNumber","parseDayOfMonth","parseDayOfYear","parseHour24","parseMinutes","parseSeconds","parseMilliseconds","parseMicroseconds","parseLiteralPercent","parseUnixTimestamp","Q","parseUnixTimestampSeconds","formatDayOfMonth","formatHour24","formatHour12","formatDayOfYear","timeDay","timeYear","formatMilliseconds","formatMicroseconds","formatMonthNumber","formatMinutes","formatSeconds","formatWeekdayNumberMonday","formatWeekNumberSunday","timeSunday","formatWeekNumberISO","timeThursday","formatWeekdayNumberSunday","formatWeekNumberMonday","timeMonday","formatYear","formatFullYear","formatZone","formatUTCDayOfMonth","formatUTCHour24","formatUTCHour12","formatUTCDayOfYear","formatUTCMilliseconds","formatUTCMicroseconds","formatUTCMonthNumber","formatUTCMinutes","formatUTCSeconds","formatUTCWeekdayNumberMonday","dow","formatUTCWeekNumberSunday","formatUTCWeekNumberISO","formatUTCWeekdayNumberSunday","formatUTCWeekNumberMonday","formatUTCYear","formatUTCFullYear","formatUTCZone","formatLiteralPercent","formatUnixTimestamp","formatUnixTimestampSeconds","locale_dateTime","dateTime","locale_date","locale_time","time","locale_periods","periods","locale_weekdays","days","locale_shortWeekdays","shortDays","locale_months","months","locale_shortMonths","shortMonths","periodRe","periodLookup","weekdayRe","weekdayLookup","shortWeekdayRe","shortWeekdayLookup","monthRe","monthLookup","shortMonthRe","shortMonthLookup","formats","formatShortWeekday","formatWeekday","formatShortMonth","formatMonth","formatPeriod","utcFormats","formatUTCShortWeekday","formatUTCWeekday","formatUTCShortMonth","formatUTCMonth","formatUTCPeriod","parses","parseShortWeekday","parseWeekday","parseShortMonth","parseMonth","parseLocaleDateTime","parseSpecifier","parsePeriod","parseLocaleDate","parseLocaleTime","newParse","newDate","week","toISOString","durationSecond","durationHour","durationDay","durationMonth","durationYear","calendar","formatMillisecond","formatSecond","formatMinute","formatHour","formatDay","formatWeek","tickIntervals","tickInterval","src_time","timeMonth","timeWeek","timeHour","timeMinute","timeSecond","timeMillisecond","src_colors","interpolateCubehelixLong","ramp","sequential","interpolator","d3_scale_chromatic_src_colors","src_ramp","scheme","interpolateRgbBasis","warm","cool","sequential_multi_rainbow","ts","magma","inferno","plasma","UNIT_GLOBAL_NAMESPACE","UNIT_LOCAL_NAMESPACE","LAYER_LOCAL_NAMESPACE","LAYER_GLOBAL_NAMESPACE","GROUP_GLOBAL_NAMESPACE","GROUP_LOCAL_NAMESPACE","CANVAS_LOCAL_NAMESPACE","CANVAS_GLOBAL_NAMESPACE","ReservedFields","ROW_ID","CommonProps","ACTION_INF","ON_LAYER_DRAW","MATRIX_CREATED","COORD_TYPES","d3_axis_src_identity","bottom","epsilon","entering","__axis","axis","orient","tickArguments","tickValues","tickTransform","tickSizeInner","tickSizeOuter","tickPadding","spacing","range0","range1","center","selection","selectAll","tick","tickExit","exit","tickEnter","enter","attr","line","insert","transition","getAttribute","tickSize","pi","tau","tauEpsilon","Path","_x0","_y0","_x1","_y1","moveTo","closePath","lineTo","quadraticCurveTo","y1","bezierCurveTo","x2","y2","arcTo","y0","x21","y21","x01","y01","l01_2","x20","y20","l21_2","l20_2","l21","l01","acos","t01","t21","arc","a0","ccw","dx","dy","cw","da","rect","d3_shape_src_constant","halfPi","asin","arcInnerRadius","innerRadius","arcOuterRadius","outerRadius","arcStartAngle","startAngle","arcEndAngle","endAngle","arcPadAngle","padAngle","cornerTangents","rc","ox","oy","x11","y11","x10","y10","x00","y00","d2","cx0","cy0","cx1","cy1","dx0","dy0","dx1","dy1","cx","cy","Linear","areaStart","_line","areaEnd","lineStart","_point","lineEnd","point","curve_linear","src_line","pointX","pointY","defined","curve","curveLinear","buffer","defined0","src_area","area","x0z","y0z","arealine","lineX0","lineY0","lineY1","lineX1","src_descending","d3_shape_src_identity","curveRadial","Radial","_curve","radial","symbol_circle","draw","symbol_cross","tan30","tan30_2","diamond","kr","kx","ky","star","square","sqrt3","triangle","wye","noop","that","Basis","BasisClosed","_x2","_x3","_x4","_y2","_y3","_y4","BasisOpen","Bundle","beta","_basis","_beta","_x","_y","custom","bundle","_k","Cardinal","tension","cardinal","CardinalClosed","_x5","_y5","CardinalOpen","_l01_a","_l01_2a","_l12_a","_l12_2a","_l23_a","_l23_2a","CatmullRom","alpha","_alpha","x23","y23","curve_catmullRom","catmullRom","CatmullRomClosed","CatmullRomOpen","LinearClosed","slope3","h0","h1","s0","slope2","MonotoneX","MonotoneY","ReflectContext","Natural","controlPoints","_t0","px","py","Step","_t","curve_step","stepBefore","stepAfter","none","series","order_none","stackValue","order_ascending","sums","cubicInOut","polyIn","polyOut","polyInOut","b2","b3","b4","b5","b6","b7","b8","b9","b0","bounceOut","backIn","overshoot","backOut","backInOut","elasticOut","elasticIn","amplitude","period","d3_voronoi_src_constant","elasticInOut","RedBlackTree","RedBlackNode","R","RedBlackRotateLeft","tree","RedBlackRotateRight","RedBlackFirst","after","grandpa","uncle","createEdge","setEdgeEnd","cells","halfedges","createBorderEdge","vertex","clipEdge","ax","ay","connectEdge","fm","fb","lx","ly","rx","ry","fx","fy","cellHalfedgeAngle","cell","site","va","vb","cellHalfedgeStart","cellHalfedgeEnd","firstCircle","circlePool","attachCircle","lArc","rArc","lSite","cSite","rSite","bx","by","epsilon2","ha","hc","circle","Circle","before","circles","detachCircle","beachPool","createBeach","beach","Beach","detachBeach","beaches","removeBeach","disappearing","iArc","nArcs","addBeach","dxl","dxr","directrix","leftBreakPoint","rightBreakPoint","createCell","newArc","hb","rfocx","rfocy","pby2","lfocx","lfocy","plby2","hl","aby2","triangleArea","lexicographic","Diagram","sites","extent","sortCellHalfedges","clipEdges","clipCells","iCell","iHalfedge","nHalfedges","startX","startY","endX","endY","nCells","cover","dc","v00","v01","v11","v10","polygons","polygon","triangles","e1","links","radius","_found","vx","vy","src_voronoi","voronoi","Selection","idGetter","_dataObjects","_updatedata","_mode","_enterdata","_exitdata","_idGetter","newData","entryData","exitdata","tempMap","duplicateData","updatedData","newSelection","currentData","dataObjects","mergedObjects","mergedData","newdata","objects","HTMLElement","common_utils_typeof","sanitizeIP","typeObj","nonExistentKeys","checkExistence","getMax","_toConsumableArray","getMin","getDomainFromData","fieldType","domArr","_loop","_fields","_slicedToArray","field0","field1","arr0","firstMin","secondMin","firstMax","secondMax","sanitizeDomainWhenEqual","unionDomain","domains","_ref2","dom","symbolFns","symbolCircle","cross","symbolCross","symbolDiamond","symbolSquare","symbolStar","symbolWye","symbolTriangle","easeFns","cubic","easeCubic","bounce","easeBounce","elastic","easeElastic","back","easeBack","poly","easePoly","circleInOut","getNearestValue","filterData","getWindow","getQualifiedClassName","cancelAnimationFrame","cls","defaultValue","objectIterator","Voronoi","common_utils_classCallCheck","_voronoi","_voronoiFn","addListenerToNamespace","namespaceInf","namespace","_listeners","getObjProp","_len","_key","Store","propName","propNames","callBack","on","calculatedProp","intSanitizer","transactor","holder","conf","stateProps","addAsMethod","nameSpaceProp","nsProp","compareTo","_len2","_key2","paramsLen","prevVal","spreadParams","sanitization","typeCheck","typeExpected","preset","oldValues","generateGetterSetters","propInfo","typeChecker","isEqual","oldVal","newVal","arraysEqual","is","ERROR_MSG","INTERFACE_IMPL","mergeRecursive","sink","createSelection","sel","appendObj","idFn","dataSelect","mergedSelection","exitSelection","getObjects","inst","numberInterpolator","interpolateNumber","piecewiseInterpolator","rgbToHsv","detectColor","col","getDataModelFromRange","selFields","selFn","getDataModelFromIdentifiers","filteredDataModel","dataArr","filteredSchema","include","registerListeners","listenerMap","_len3","_key3","propListenerMap","local","mapObj","propType","listenerFn","listener","isValidValue","getSymbol","stackOrders","_defineProperty","_stackOrders","stackOrderNone","stackOrderAscending","stackOffsets","_stackOffsets","yp","yn","stackOffsetNone","si","sij0","s3","sk","stack","orderNone","offsetNone","oz","kz","sz","sij","ki","d3Stack","pathInterpolators","curveStepAfter","curveStepBefore","curveStep","curveCatmullRom","Symbols","axisLeft","axisRight","axisTop","axisBottom","pie","descending","arcs","pa","cornerRadius","padRadius","a01","a11","a00","a10","da0","da1","ap","rp","rc0","rc1","p0","p1","oc","intersect","x3","y3","x32","y32","kc","lc","centroid","Scales","scaleBand","getSmallestDiff","points","timeFormats","timeDurations","formatTemporal","nearestInterval","getNearestInterval","getValueParser","retrieveNearestGroupByReducers","_len4","measureFieldNames","_key4","filteredReducers","getAncestorDerivations","nearestReducers","derv","retrieveFieldDisplayName","xhtml","src_namespaces","xlink","xml","xmlns","src_namespace","namespaces","space","creator","fullname","creatorFixed","ownerDocument","creatorInherit","uri","namespaceURI","src_selector","selector","querySelector","selectorAll","querySelectorAll","matcher","matches","sparse","EnterNode","_next","__data__","keyPrefix","bindIndex","groupLength","dataLength","bindKey","nodeByKeyValue","keyValues","src_window","styleValue","classArray","classList","ClassList","_names","classedAdd","classedRemove","contains","textRemove","htmlRemove","nextSibling","lower","previousSibling","constantNull","selection_cloneShallow","cloneNode","selection_cloneDeep","filterEvents","event","mouseenter","mouseleave","filterContextListener","contextListener","related","relatedTarget","compareDocumentPosition","event1","event0","onRemove","typename","__on","removeEventListener","capture","onAdd","wrap","addEventListener","customEvent","sourceEvent","dispatchEvent","CustomEvent","createEvent","initEvent","bubbles","cancelable","detail","groups","parents","_groups","_parents","subgroups","subnode","subgroup","enterGroup","updateGroup","_enter","_exit","onenter","onupdate","onexit","groups0","groups1","m0","merges","group0","group1","compareNode","sortgroups","sortgroup","getAttributeNS","attrRemoveNS","removeAttributeNS","attrRemove","removeAttribute","attrFunctionNS","attrFunction","attrConstantNS","attrConstant","priority","styleRemove","removeProperty","styleFunction","setProperty","styleConstant","propertyRemove","propertyFunction","propertyConstant","classed","classedFunction","classedTrue","classedFalse","textFunction","textConstant","html","htmlFunction","htmlConstant","deep","typenames","parseTypenames","dispatch","dispatchFunction","dispatchConstant","src_select","nextId","Local","current","src_point","ownerSVGElement","createSVGPoint","clientX","clientY","matrixTransform","getScreenCTM","inverse","getBoundingClientRect","clientLeft","clientTop","mouse","changedTouches","src_touch","touches","identifier","touch","Dispatch","T","types","nopropagation","stopImmediatePropagation","noevent","preventDefault","nodrag","view","__noselect","MozUserSelect","d3_drag_src_constant","DragEvent","subject","active","defaultFilter","button","defaultContainer","defaultSubject","defaultTouchable","src_drag","mousedownx","mousedowny","mousemoving","touchending","touchable","gestures","clickDistance2","drag","mousedowned","touchstarted","touchmoved","touchended","gesture","beforestart","mousemoved","mouseupped","yesdrag","noclick","clearTimeout","sublisteners","clickDistance","taskHead","taskTail","frame","timeout","pokeDelay","clockLast","clockNow","clockSkew","clock","performance","timer_typeof","now","setFrame","clearNow","Timer","_call","_time","timer","delay","restart","wake","timerFlush","nap","sleep","poke","clearInterval","setInterval","src_timeout","elapsed","emptyOn","emptyTween","CREATED","SCHEDULED","STARTING","STARTED","RUNNING","ENDING","ENDED","transition_schedule","timing","schedules","__transition","self","tween","state","duration","ease","schedule","tweenValue","_id","transition_interpolate","interpolateRgb","interpolateString","Transition","_name","newId","selection_prototype","inherit","id0","id1","onFunction","on0","on1","sit","attrTween","string00","string10","interpolate0","string0","string1","value1","attrTweenNS","attrInterpolateNS","attrInterpolate","styleTween","styleNull","styleMaybeRemove","listener0","styleInterpolate","removeFunction","tweenRemove","tween0","tween1","tweenFunction","delayFunction","delayConstant","durationFunction","durationConstant","easeConstant","Promise","reject","cancel","interrupt","defaultTiming","easeCubicInOut","selectElement","element","makeElement","elemType","callbacks","keyFn","SVGElement","selectorVal","selectorType","actualSelector","enterSel","mergeSel","exitSel","applyStyle","setElementAttrs","attrs","setAttrs","setStyles","styles","createElements","getClientPoint","pos","clientPoint","getEvent","d3event","getD3Drag","d3drag","getSmartComputedStyle","css","textEl","mandatoryStyle","fill-opacity","renderer_utils_typeof","computedStyle","styleForSmartLabel","hasTouch","events","EVENT_LIST","composition","resolveFn","notification","hasOwn","LifeCycleManager","lifecycle_manager_classCallCheck","_eventList","_promises","_notifiers","_lifeCycles","_unreleasedLifeCycles","_boot","_preparePromises","promise","_makeNotifierPromise","createPromise","then","prm","formalName","client","_releasePromisesFromCache","_notify","stage","_resolvePromise","retrieve","_callLifeCycleCallback","_cachePromise","_resetTargetPromise","lifeCycles","DRAG","HOVER","SELECTIONDRAG","CLICK","LONGTOUCH","TOUCHDRAG","ALL_ACTIONS","SELECTION_NEW_ENTRY","SELECTION_NEW_EXIT","SELECTION_NULL","SELECTION_OLD_ENTRY","SELECTION_OLD_EXIT","SelectionSet","completeSet","_volatile","selection_set_classCallCheck","_completeSetCount","_lockedSelection","_resetted","ids","entrySet","exitSet","lockedSel","addSet","removeSet","updateSet","changeSideEffectAvailability","toEnable","sideEffects","change","enable","disable","getMergedSet","helper_toConsumableArray","conditionsMap","newEntry","SELECTION","oldEntry","mergedEnter","newExit","oldExit","mergedExit","complete","getSetInfo","selectionSet","propagationData","resetted","getModelFromSet","condition","Firebolt","actions","behaviourEffectMap","firebolt_classCallCheck","_sideEffectDefinitions","_sideEffects","_propagationInf","_actions","behavioural","physical","_selectionSet","_volatileSelectionSet","_propagationFields","_sourceSideEffects","selectionBox","_propagationBehaviourMap","_sourceBehaviours","_actionBehaviourMap","_config","_behaviourEffectMap","_entryExitSet","_actionHistory","_queuedSideEffects","mapSideEffects","registerBehaviouralActions","registerSideEffects","registerPhysicalBehaviouralMap","physicalBehaviouralMap","registerPhysicalActions","behEffectMap","preventDefaultActions","effectNames","effects","firebolt_toConsumableArray","behaviours","initializeBehaviouralActions","dispatchableBehaviours","Action","prepareSelectionSets","initializeSideEffects","sideEffectStore","actionHistory","queuedSideEffects","sideEffect","combinedSet","unionSets","behaviour","entryExitSet","existingModel","aggFns","effect","firebolt_typeof","sideEffectInstance","isEnabled","mutates","dispatchSideEffect","propagationInfo","propagate","getSideEffects","propagationSelectionSet","getPropagationSelectionSet","shouldApplySideEffects","sourceSelectionSet","applicableSideEffects","getApplicableSideEffects","applySideEffects","physicalAction","actionBehaviourMap","behaviourMap","mapActionsAndBehaviour","unsubscribe","onDataModelPropagation","propValue","dispatchBehaviour","uniqueIds","behaviouralActions","volatileSelectionSet","sideEffectDefinitions","sideEffectsMap","SideEffect","sideEffectConf","initedActions","initializePhysicalActions","physicalActions","phyAction","initedPhysicalActions","getDefaultTargetContainer","bindActionWithBehaviour","targets","behaviourList","xFields","yFields","xMeasures","yMeasures","_propModel$getData","fieldMap","getFullData","propagationSource","applicableSelectionSets","GenericBehaviour","firebolt","generic_classCallCheck","_enabled","selectionSets","getSelectionSets","_this$firebolt$getAdd","getAddSetFromCriteria","getPropagationInf","setSelectionSet","getEntryExitSet","_selectionSet$getSets","getSets","setConfig","isSourceFieldPresent","getSourceFields","VolatileBehaviour","reset","existingAddSet","updateExit","getCompleteSet","BRUSH","HIGHLIGHT","TOOLTIP","FILTER","HighlightBehaviour","BrushBehaviour","BEHAVIOURNAMES","FilterBehaviour","PersistentBehaviour","updateEntry","mergedExitSet","completeSetCount","SelectBehaviour","getDragActionConfig","sourceInfo","axes","xAxis","yAxis","axisFields","xField","getMembers","yField","xFieldType","yFieldType","stPos","startPos","endPos","dragDim","isXDimension","isYDimension","xRange","yRange","selectedDomains","rangeObj","xdom","ydom","snap","getNearestRange","attachDragEvent","targetEl","drawingInf","touchStart","d3Drag","getDrawingContext","getSourceInfo","beh","dragEnd","hover","interaction","tooltip","svgContainer","nearestPoint","getNearestPoint","getAllPoints","showInPosition","generatePayloadFromEvent","click","physical_defineProperty","_physicalActions","ACTIONNAMES","longtouch","touchEnd","touchdrag","PROPS","valueParser","GenericSideEffect","generic_sideeffect_classCallCheck","_strategy","_strategies","SurrogateSideEffect","interactionType","layers","layer","interactive","applyInteractionStyle","SpawnableSideEffect","_drawingContext","changeVisibility","sideEffectGroup","visible","defClassName","classPrefix","SelectionBox","boxConf","box","drawingContext","unitWidth","unitHeight","selectionGroupClassName","hide","sourceInf","_getBoxDimensionsFrom","getBoxDimensionsFromPayload","direction","xDim","yDim","xLinear","yLinear","xCriteria","yCriteria","x1Val","x2Val","bandScale","x1DomainIndex","x2DomainIndex","_sort2","helper_slicedToArray","getScaleValue","getUnitWidth","y1Val","y2Val","y1DomainIndex","y2DomainIndex","_sort4","_xDim","_yDim","dimension","show","selectionBoxDrag","onDrag","boxClassName","INITIAL_STYLE","connectorClassName","margin","content","iconContainerSize","iconScale","iconShape","iconColor","rowMargin","separator","parentClassName","arrow","disabled","getArrowPos","dim","measurement","arrowPos","boxHeight","boxWidth","arrowWidth","plotBottom","boxBottom","plotRight","boxRight","placeArrow","tooltipArrow","_tooltipArrow","tooltipBackground","_tooltipBackground","arrowConf","_arrowOrientation","Content","content_classCallCheck","_model","_formatter","ctx","_mount","displayFormat","table","tbody","margin-right","el","shape","Tooltip","htmlContainer","tooltip_classCallCheck","connectorContainer","tooltipConf","contentClass","_tooltipContainer","_contentContainer","_contents","_tooltipConnectorContainer","qualifiedClassName","addClass","defConf","contentConfig","reorderContainers","contentConf","render","_target","repositionArrow","arrowDisabled","arrowOrient","outsidePlot","connector","_offset","orientation","_extent","arrowSize","topSpace","dimX","rightSpace","leftSpace","positionTop","positionRight","positionLeft","positionHorizontal","positionVertical","_position","_arrowPos","formatters","strategies_defineProperty","getDefaultTooltipFormatterFn","defaultFormatter","getRowContent","fieldInf","dataInf","formattedValue","measureIndex","dimensionMeasureMap","timeDiffs","defFormatter","fieldspace","dataLen","formatterFn","uniqueVals","strategies_toConsumableArray","colorAxis","shapeAxis","sizeAxis","isRetinalField","associatedMeasures","icon","getColor","getShape","getSize","formattedKey","measure","measureFormatter","margin-left","buildTooltipData","fieldValues","detailFields","containsDetailField","getTabularData","allMeasures","_construct","strategies","selectionSummary","aggregatedModel","fieldsConf","measureNames","highlightSummary","configResolvers","specificConf","_default","_getPrototypeOf2","side_effects_tooltip_classCallCheck","tooltip_possibleConstructorReturn","tooltip_getPrototypeOf","_tooltips","sanitizeConfig","strategyObj","sanitizedConf","setStrategy","totalHeight","totalWidth","isEmpty","tooltips","boundBox","dataModels","fragmented","showVertically","tooltipPos","boxes","tooltip_toConsumableArray","sourceFields","indices","plotDimensions","getPlotPointsFromIdentifiers","strategy","strategyConf","dataTransform","projectFields","plotDim","dt","layoutContainer","parentContainerDimensions","layoutBoundBox","unitBoundBox","tooltipInst","TooltipRenderer","timeDiffsByField","strategyFn","positionRelativeTo","tooltipBoundBox","getContents","spaceOutBoxes","spaceOutIfOverlap","firstBox","secondBox","opposite","projectedFields","Crossline","bandWidth","_this$config","bandClass","lineClass","elemData","axisIndex","fieldInst","xOffset","plotWidth","crossline_toConsumableArray","getPlotSpan","getPlotPadding","startPx","endPx","dataPoint","parentGroup","fade","fadeFn","focus","highlight","PlotHighlighter","plot_highlighter_classCallCheck","plot_highlighter_possibleConstructorReturn","plot_highlighter_getPrototypeOf","FilterEffect","entryModel","clearCaching","resetData","enableCaching","addLayer","layerDefs","layerRegistry","layerDef","mark","layerCls","shouldDrawAnchors","depLayerEncoding","encoding","defaultSizeValue","layerObj","instances","getTransitionConfig","calculateDomain","linkedLayer","AnchorEffect","anchors_classCallCheck","anchors_possibleConstructorReturn","anchors_getPrototypeOf","_layersMap","addAnchorLayers","metaInf","registry","layerDefsVal","registerImmediateListener","STATE_NAMESPACES","anchors_slicedToArray","_layers","elems","_linkedLayer$getTrans2","getLayerByName","getTransformedDataFromIdentifiers","transformedData","transformedDataModel","PersistentAnchors","BrushAnchors","behaviour_effect_map_defineProperty","BEHAVIOURS","SIZE","COLOR","SHAPE","TEXT","ENCODING","X0","Y0","RADIUS","RADIUS0","ANGLE","ANGLE0","nearestPointThreshold","strokeOpacity","connectNullData","SimpleLayer","coord","BOTTOM","TOP","LEFT","RIGHT","axisOrientationMap","axis_orientation_defineProperty","_axisOrientationMap","AxisOrientation","LINEAR","BAND","TIME","ORDINAL","QUANTIZE","QUANTILE","LOG","POW","IDENTITY","SEQUENTIAL","THRESHOLD","CONTINOUS","DISCRETE","HIDDEN","DEFAULT_ANGLE_DOMAIN","scaleLinear","scales","scaleThreshold","scaleLog","scalePow","scaleIdentity","scaleOrdinal","scaleSequential","scaleQuantize","scaleQuantile","scaleTime","scaleMap","scale_creator_defineProperty","_scaleMap","ScaleType","createScale","scaleFactory","adjustRange","axisName","axisNamePadding","fixedBaseline","labels","rotation","smartTicks","numberOfTicks","showAxisName","showInnerTicks","showOuterTicks","yOffset","rotateAxis","instance","tickText","labelManager","renderConfig","getTickSize","yShift","xShift","tickLabelDim","quadrant","rotationNormalizer","angleToRadian","angle","changeTickOrientation","selectContainer","axisInstance","_smartTicks","isSmartTicks","registerAnimationDoneHook","setFixedBaseline","setAxisNamePos","textNode","axisNameHeight","labelOffset","availableSpace","longestWord","quarter","halfYearly","mintues","getTickIntervalFnBasedOnNumberOfTicks","possibleTickLevelIndex","maxPossibleTicks","tickIntervalLevelInfo","tickIntervalInfo","numOfPossibleTicks","getActualTickInterval","noOfTicks","minWidthBetweenTicks","_minTickDistance","getTickIntervalBasedOnCurrentLevel","_dependencies","longestWordType","applyTickSkipping","minTickDistance","minTickSpace","_minTickSpace","minTickWidth","maxTicks","getSkippedTicks","actualNumberOfTicks","_minDiff","millisecondInterval","numOfTicksAccordingToMinDiff","adjustHorizontalRange","adjustVerticalRange","rangeAdjustmentMap","space_setter_defineProperty","_rangeAdjustmentMap","setAxisRange","rangeBounds","getAdjustedRange","getAxisOffset","timeDiff","avWidth","bars","spaceSetter","spaceConfig","heightForTicks","_context$availableSpa2","availWidth","availHeight","isOffset","_context$renderConfig2","_context$getAxisDimen","getAxisDimensions","tickDimensions","allTickDimensions","axisNameDimensions","tickDimHeight","tickDimWidth","namePadding","labelConfig","minTickHeight","getTickValues","tickShifter","maxTickSpaces","widthForTicks","totalTickWidth","getRotatedSpaces","rotatedHeight","rotatedWidth","setOffset","logicalSpace","getAxisComponentDimensions","axisTicks","largestTick","largestTickDimensions","smartTick","_context$renderConfig","labelFunc","_tickLabelStyle","originalLabel","getFormattedText","_axisNameStyle","getHorizontalAxisSpace","axisDimensions","_context$config2","axisDimHeight","minTickDiff","getMinTickDifference","cartesian_axis_helper_toConsumableArray","getVerticalAxisSpace","_context$config3","calculateBandSpace","largestDimHeight","_getHorizontalAxisSpa","_getVerticalAxisSpace","getValidDomain","userDom","setContinousAxisDomain","_domain","axisComponentDimensions","oldConfig","mockedOldConfig","shouldAxesScaleUpdate","hasAxesConfigChanged","properties","tickFormatter","sanitizeTickFormatter","_scale","_axis","createAxis","_tickFormatter","resetRenderConfig","_renderConfig","_maxTickSpaces","SimpleAxis","simple_axis_classCallCheck","_range","_domainLock","_axisDimensions","defCon","simpleConfig","bodyElem","dist","_animationDonePromises","domainValue","setAxisComponentDimensions","smartAxisName","axisClass","_objectSpread","setTickConfig","setSmartAxisName","_this$config2","dimType","widthDim","getSmartAxisName","oriSize","domainVal","computeAxisDimensions","_getAxisComponentDime","labelHeight","labelWidth","calculateContinousSpace","_context$renderConfig6","axisNameWidth","_getHorizontalAxisSpa2","_getVerticalAxisSpace2","renderAxis","axisNameStyle","tickLabelStyle","axisTickFormatter","labelProps","axisNameSpace","all","LinearInterpolator","LogInterpolator","PowInterpolator","interpolatorMap","continous_axis_defineProperty","_interpolatorMap","ContinousAxis","continous_axis_classCallCheck","continous_axis_possibleConstructorReturn","continous_axis_getPrototypeOf","InterpolatorCls","_interpolator","_this$renderConfig","sanitizeDomain","_get2","_get","_this$renderConfig2","newTickValues","tickSpace","getNumberOfTicks","labelDim","numberOfValues","tickLength","_this$smartTicks$","BandAxis","_this$maxTickSpaces","_getRotatedSpaces","paddingNormalized","formatTickValue","TimeAxis","time_axis_classCallCheck","time_axis_possibleConstructorReturn","time_axis_getPrototypeOf","time_axis_get","rawTicks","resetTickInterval","_context$config8","_context$availableSpa","adjustedRange","x11Colors","Pink","LightPink","HotPink","DeepPink","PaleVioletRed","MediumVioletRed","LightSalmon","Salmon","DarkSalmon","LightCoral","IndianRed","Crimson","FireBrick","DarkRed","Red","OrangeRed","Tomato","Coral","DarkOrange","Orange","Gold","Yellow","LightYellow","LemonChiffon","LightGoldenrodYellow","PapayaWhip","Moccasin","PeachPuff","PaleGoldenrod","Khaki","DarkKhaki","Cornsilk","BlanchedAlmond","Bisque","NavajoWhite","Wheat","BurlyWood","Tan","RosyBrown","SandyBrown","Goldenrod","DarkGoldenrod","Peru","Chocolate","SaddleBrown","Sienna","Brown","Maroon","DarkOliveGreen","Olive","OliveDrab","YellowGreen","LimeGreen","Lime","LawnGreen","Chartreuse","GreenYellow","SpringGreen","MediumSpringGreen","LightGreen","PaleGreen","DarkSeaGreen","MediumSeaGreen","SeaGreen","ForestGreen","Green","DarkGreen","MediumAquamarine","Aqua","Cyan","LightCyan","PaleTurquoise","Aquamarine","Turquoise","MediumTurquoise","DarkTurquoise","LightSeaGreen","CadetBlue","DarkCyan","Teal","LightSteelBlue","PowderBlue","LightBlue","SkyBlue","LightSkyBlue","DeepSkyBlue","DodgerBlue","CornflowerBlue","SteelBlue","RoyalBlue","Blue","MediumBlue","DarkBlue","Navy","MidnightBlue","Lavender","Thistle","Plum","Violet","Orchid","Fuchsia","Magenta","MediumOrchid","MediumPurple","BlueViolet","DarkViolet","DarkOrchid","DarkMagenta","Purple","Indigo","DarkSlateBlue","SlateBlue","MediumSlateBlue","White","Snow","Honeydew","MintCream","Azure","AliceBlue","GhostWhite","WhiteSmoke","Seashell","Beige","OldLace","FloralWhite","Ivory","AntiqueWhite","Linen","LavenderBlush","MistyRose","Gainsboro","LightGray","Silver","DarkGrey","Grey","DimGrey","LightSlateGrey","SlateGrey","DarkSlateGrey","Black","palette","DEFAULT_GRADIENT_COLOR","DEFAULT_CONFIG","stops","getHslString","hslArr","convertToXllString","baseString","getActualHslColor","paletteColor","hexToHsv","props_toConsumableArray","newConfig","uniqueValues","treatNullMeasures","scaledVal","minDomainScaledVal","resolveAxisConfig","propVal","defaultVal","getStops","newStops","color_strategy_toConsumableArray","rangeStops","newStopsLength","newRange","hslInterpolator","interpolateHslLong","indexedDomain","scaleDomain","indexedDomainMeasure","normalDomain","steppedDomain","_getStops","continousSteppedDomain","_getStops2","uniqueRange","indexedRange","numVal","normalRange","strategyGetter","domainType","rangeType","schemeType","color_strategy_defineProperty","domainRange","ColorAxis","color_axis_classCallCheck","_domainType","_rangeType","_schemeType","getSchemeType","_colorStrategy","setColorStrategy","updateDomain","colorStrategy","getScheme","colorSchemes","hslColorArray","getRawColor","color_axis_toConsumableArray","scaleInfo","domainRangeFn","transformationArr","newH","newS","newL","newA","size_strategy_defineProperty","pieceWiseRange","size_strategy_toConsumableArray","intervals","newIntervals","discreteRange","SizeAxis","size_axis_classCallCheck","_sizeStrategy","domainInfo","domainFn","generator","ShapeAxis","shape_axis_classCallCheck","_generatedShapes","shapeType","shapeGenerator","generatorFn","generatedShapes","createAngleValues","angleData","_angleFn","_angleValues","AngleAxis","angle_axis_classCallCheck","customDomain","customRange","_this$_range","angle_axis_slicedToArray","ROWS","COLUMNS","COL","ROW","CELL","X_AXES","Y_AXES","ENTRY_CELLS","EXIT_CELLS","PRIMARY","SECONDARY","adjustDomain","minOuterRadius","RadiusAxis","radius_axis_classCallCheck","_radiusFactor","sanitizedRange","rangeVal","DATA_TYPES","group_transform","data_type_scale_map_defineProperty","_dataTypeScaleMap","groupByIndices","nestCollection","nestFn","identityTransform","transformMap","transform_factory_defineProperty","_transformMap","uniqueField","valueField","normalizedData","normalizeData","uniqueFieldIndex","valueFieldIndex","seriesKeyIndex","seriesKeys","tuples","rowObj","_tuple","seriesKey","newArr","orderBy","orderIndex","groupByIndex","localeCompare","stackData","seriesData","transformFactory","POLAR","CARTESIAN","transfromColor","styleType","intensity","stateColor","originalColor","fillColorInfo","transformColor","interactionStyles","elements","getPlotElementsFromSet","_d$meta","colorTransform","helpers_slicedToArray","getAxesScales","_map2","_map4","xScale","yScale","encodingFieldInfRetriever","helpers_defineProperty","_encodingFieldInfRetr","encodingInf","getIndividualClassName","individualClassName","classNameStr","dataNormalizers","_dataNormalizers","encodingFieldInf","radiusFieldIndex","angleFieldIndex","radius0FieldIndex","angle0FieldIndex","fieldsLen","pointObj","radius0","angle0","enc","rowId","transformType","xFieldIndex","yFieldIndex","x0FieldIndex","y0FieldIndex","domainCalculator","_domainCalculator","layerInst","angleValues","radius0Field","encodingFieldsInf","xFieldSubType","yFieldSubType","x0Field","y0Field","yEnc","xEnc","attachDataToVoronoi","helpers_toConsumableArray","updateStyle","positionPoints","positioner","encodingTransform","getPlotMeasurement","dimensionalValues","fieldInfo","_bandScale","span","groupSpan","offsetValues","actualGroupWidth","dataProps","innerPadding","getGroupSpan","isAxisBandScale","axisPadding","groupPadding","resolveInvalidTransformType","_context$encodingFiel","groupByField","groupByFieldMeasure","getValidTransformForAggFn","resolvedInvalidTransformType","_context$encodingFiel2","isCustomTransformTypeProvided","_customConfig","resolveEncodingValues","transformedValues","getColorMetaInf","getHslArray","getCoordValue","trig","coordValueGetter","toCartesianCoordinates","rangePlot","_point$update","_coordValueGetter","sortData","axisArr","listener_map_slicedToArray","encodingValue","resolveTransformType","_transformedData","getTransformedData","_normalizedData","getNormalizedData","calculateDomainFromData","_updateLock","getRenderProps","registerChangeListener","renderLayer","throwback","commit","defaultOptions","default_options_defineProperty","_defaultOptions","newConf","defaultPolicy","_cacheEnabled","_cachedData","BaseLayer","base_layer_classCallCheck","base_layer_possibleConstructorReturn","base_layer_getPrototypeOf","base_layer_assertThisInitialized","alias","_points","_measurement","_store","localNs","initializeGlobalState","globalState","getState","base_layer_defineProperty","global","unitRowIndex","unitColIndex","_encodingFieldsInf","_encodingTransform","_alias","transformData","encodingType","transformedDataArr","_transformType","getValidTransform","pointMap","_pointMap","_dataProps","_this$encodingFieldsI","base_layer_slicedToArray","xMeasure","yMeasure","_identifiers$","_identifiers$2","xMeasureIndex","yMeasureIndex","getAllAttrs","filteredPoints","base_layer_toConsumableArray","sizeVal","_identifiers$getData","identifierData","identifierSchema","_this$encodingFieldsI2","tupleArr","transformedVal","base_layer_construct","userConf","drawLine","curveInterpolatorFn","linepath","LineLayer","line_classCallCheck","line_possibleConstructorReturn","line_getPrototypeOf","isXDim","isYDim","xPx","yPx","resolvedEncodings","stroke","cachePoint","seriesClassName","containerSelection","colorField","colorFieldIndex","animateGroup","groupTransition","groupAnimateStyle","stroke-opacity","getPathStyle","translatePoints","colorValFn","colorVal","getDrawFn","searchRadius","_point$data$data","getIdentifiersFromData","layerId","drawArea","easeEffect","renderer_slicedToArray","enterAreaPath","updateAreaPath","selectionEnter","AreaLayer","area_get","area_getPrototypeOf","_getAxesScales","classNameFn","minYVal","basePos","y0Px","invalidY","invalidY0","resolvedValues","stroke-width","stroke-linejoin","states","fadeout","selected","ArcLayer","arc_classCallCheck","arc_possibleConstructorReturn","arc_getPrototypeOf","_prevPieData","_this$axes","radiusAxis","pieIndex","prevData","angleV","angles","_angles","uid","getOuterRadius","getInnerRadius","startAngle0","endAngle0","_previousInfo","getPreviousPoint","currIndex","prevArc","nextArc","_context$axes$angle$r2","arc_helper_slicedToArray","qualClassName","_arcFn","consecutiveExits","exitCounter","tweenPie","individualClass","tweenExit","exitArr","oldExitCounter","tweenExitPie","consecutiveExitArr","gElem","pieSlices","pieSliceInf","tData","drawText","selectionMerge","backgroundVal","textanchor","textStyle","background","backgroundPadding","_smartLabel$getOriSiz","backgroundEl","alignment-baseline","defaultEncoding","alignmentBaseLine","defRotation","pointTranslators","polar","textEncoding","angleAxis","textFormatter","backgroundEncoding","backgroundValue","cartesian","textField","textFieldIndex","textValue","text_slicedToArray","TextLayer","text-anchor","drawSymbols","createShape","groupElement","Element","newShape","nodeName","src","href","shapeElement","pathStr","checkPath","exitGroup","defColorStyle","fillOpacity","shapes","sizes","PointLayer","point_classCallCheck","point_possibleConstructorReturn","point_getPrototypeOf","_config$offset","offsetX","offsetY","point_slicedToArray","maxSize","generateDataPoints","point_toConsumableArray","drawFn","getMarkId","_maxSize","_getPlotMeasurement2","widthMetrics","heightMetrics","offsetXValues","offsetYValues","measurementConf","getMeasurementConfig","widthSpan","heightSpan","distanceLimit","drawRects","barEnterFn","transitionBars","selTransition","positionRetriever","isNegativeVal","barBasePos","resolveDimByField","axesInfo","spaceType","sizeEncoding","sizeConfig","sizeValue","enterSpace","minVal","maxVal","diffPx","minDomVal","_positionRetriever$ty2","bar_helper_slicedToArray","resolveDimensions","_resolveDimByField","enterWidth","enterX","xPos","_resolveDimByField2","enterHeight","BarLayer","bar_classCallCheck","bar_possibleConstructorReturn","bar_getPrototypeOf","_plotPadding","_plotSpan","bar_get","getTranslatedPoints","normalizedDataArr","clipElement","clipPathElement","bar_slicedToArray","barWidthMetrics","barHeightMetrics","barWidthOffsets","barHeightOffsets","barWidth","barWidthOffset","barHeight","barHeightOffset","uniqueFieldType","pointFound","bar_toConsumableArray","p2","tick_renderer","ticksEnter","angle0Axis","angle0V","angles0","_angles2","_layerInst$encodingFi","_config$span","xSpan","ySpan","x0Px","TickLayer","drawTicks","AREA_LAYER","ARC_LAYER","LINE_LAYER","TEXT_LAYER","POINT_LAYER","BAR_LAYER","TICK_LAYER","SIMPLE_LAYER","BASE_LAYER","sanitizeEncoding","layerFactory","compositeLayers","factoryObj","setLayerRegistry","reg","_layerRegistry","getSerializedConf","serializedDefs","defs","unitLayerDef","sDef","parseLayerDefinition","layerType","strs","layer_factory_toConsumableArray","getLayerInstance","layerConstructor","getLayerClass","composeLayers","sanitizeLayerConfig","DEFAULT_LAYERS","defaults_defineProperty","_DEFAULT_LAYERS","LAYER_TYPES","local_options","local_options_defineProperty","_CONFIG$ROWS$COLUMNS$","SimpleGroup","Variable","ComposedVars","composed_vars_classCallCheck","composed_vars_possibleConstructorReturn","composed_vars_getPrototypeOf","vars","_vars","_data","member","getMinDiff","SimpleVariable","simple_var_classCallCheck","simple_var_possibleConstructorReturn","simple_var_getPrototypeOf","oneVar","_oneVar","dtFormat","dateFormat","fieldDef","minimumConsecutiveDifference","varInst","convertToVar","datamodel","transformFields","field_sanitizer_slicedToArray","normalizedFields","normalizeFields","norFields","orderFields","fieldArray","temporalArr","categoricalArr","fieldList","numOfMeasures","allDimensions","field_sanitizer_toConsumableArray","temporal","categorical","rowsInfo","columnsInfo","rowDimensions","rowMeasures","rowTemporalFields","rowCategoricalFields","columnDimensions","columnMeasures","columnTemporalFields","columnCategoricalFields","VisualEncoder","_fieldInfo","_axisFrom","_headerFrom","__headerFrom","axisFrom","_getHeaderAxisFrom2","visual_encoder_slicedToArray","getHeaderAxisFrom","rowHeader","rowAxis","_getHeaderAxisFrom4","colHeader","colAxis","headerFrom","scaleMaps","dataTypeScaleMap","generateAxisFromMap","axisType","axesCreators","facetFields","axisKey","groupAxes","currentAxes","cacheMaps","commonAxisKey","getAxisKey","axisConfig","getAxisConfig","axisInfo","axisOrientation","rowIndex","columnIndex","rawUserAxisConfig","userAxisConfig","_rotationLock","createSimpleAxis","Cls","sanitizeIndividualLayerConfig","encodingConfigs","getIndex","arrIndex","CartesianEncoder","geomCellAxes","projections","rowFields","columnFields","geomCell","xAxes","yAxes","lock","unlock","units","1","rIdx","unitsArr","_loop2","cIdx","len2","encodingDomains","getDataDomain","axisTypeIndex","typeOfField","_resolver$axes","axesArr","adjustedDomain","typeOfAxis","alignZeroLine","getAdjustedDomain","y1ratio","y2ratio","allSameSign","currentFieldName","sortingOrder","facets","counter","primaryFacets","secondaryFacets","primaryFields","secondaryFields","primaryLen","secondaryLen","projArr","primaryField","secondaryField","facet","existIndex","axisFromIndex","cartesian_encoder_get","cartesian_encoder_getPrototypeOf","groupedModel","encodingObj","retriveDomainFromData","layerArray","serializedLayers","userLayerConfig","layerConfig","retinalConfig","colField","colFieldName","rowField","configs","rowFieldName","rowFieldType","getDefaultMark","colFieldType","defConfigs","layerConfigs","getLayerConfFromFields","colFields","encodingArr","encoder_helper_toConsumableArray","colFieldExist","rowFieldExist","layerConf","mergedLayerConf","serializedLayerConfig","cartesian_encoder_toConsumableArray","axesCls","polar_encoder_defineProperty","_axesCls","PolarEncoder","pieAxes","axesObj","matrixLayers","resolverAxes","varInstances","encType","userConfig","domainProps","matrixInstance","unitDomains","setRadiusFactor","sizeField","retinalFields","_context$axes","sizeFieldIndex","sizeMultiplier","getSizeMultiplier","sizeAxisDomain","encodingFields","sanitizedRows","sanitizedColumns","polar_encoder_get","polar_encoder_getPrototypeOf","sanitizedFields","typeIndex","fieldSet","polar_encoder_toConsumableArray","layerEncoding","sanitizedConfig","angleField","angle0Field","RetinalEncoder","newAxes","createRetinalAxis","fieldProps","getAxisType","isDistributionEqual","group_utils_toConsumableArray","rowType","initializeCacheMaps","cellMap","xAxesMap","yAxesMap","entryCellMap","exitCellMap","headerCreator","fieldHeaders","TextCell","getHeaderText","rowLength","getEncoder","encoder","hasPolarEncodings","userAxisFromConfig","group_utils_slicedToArray","firstField","secondField","firstFieldType","secondFieldType","setFacetsAndProjections","_encoder$simpleEncode","simpleEncoder","getFacetsAndProjections","group_utils_defineProperty","getBorders","matrices","showRowBorders","showColBorders","showValueBorders","valueMatrix","_rows","leftRows","rightRows","_columns","topColumns","bottomColumns","_encoder$fieldInfo","allDimensionLength","allMeasuresLength","allTemporalFieldsLength","getRowBorders","borders","getColumnsBorders","getValueBorders","borderTypeRow","borderTypeCol","sortFacetFields","facetName","action_behaviour_map_defineProperty","ACTIONS","sanitizeLayerDef","sanitizedDefs","sConf","unionDomainFromLayers","layerAxisIndex","domainValues","layerDomain","fieldDomain","encodingDomain","fieldStr","domain1","renderLayers","_lifeCycleManager","notify","orderedLayers","layerParentGroup","layerDepOrder","getDependencyOrder","dependencyOrder","visited","visit","_layerDepOrder","_timeDiffs","getLayersBy","searchBy","removeLayersBy","createRenderPromise","_renderedPromise","_renderedResolve","radiusAxes","getRadiusRange","GRID_BAND","GRID_LINE","getGridLayerDefinitions","getDefaultVisibilty","getLayerDefinition","_definition","_axes","_encoding","gridLines","gridBands","gridLineColor","zeroLineColor","gridBandColor","isLinearScale","grid_lines_defineProperty","isNegativeDomain","dimensionSubTypes","getValidSubtype","attachDataToGridLineLayers","_gridLines","_gridBands","gridLayerData","getGridLayerData","gridData","jsonData","_jsonData$push","grid_lines_toConsumableArray","trackerClassName","arcLayerClassName","sideEffectClassName","src_local_options","src_local_options_defineProperty","_CONFIG$LAYERDEFS$TRA","cachedData","local_options_toConsumableArray","oldData","src_listener_map_slicedToArray","fieldsVal","removeExitLayers","layersMap","markSet","colIndex","listenerInf","hasPlotSpan","_ref5","temporalFields","filteredFields","_ref6","_ref7","_ref8","_ref9","_ref10","_timeDiffsByField","createGridLineLayer","vuConf","_layerDeps","atomicDef","_ref11","_ref12","transformDataModels","transformVal","_ref15","_ref16","layerAxisIndexVal","_layerAxisIndex","axesVal","lyr","disableUpdate","attachDataToLayers","transformedDataModels","dataSource","enableUpdate","_dimensionMeasureMap","getDimensionMeasureMap","retinalEncodingsAndMeasures","_layer$encodingFields","shapeField","_retinalEncodingsAndM","src_helper_toConsumableArray","attachAxisToLayers","axisInf","props_defineProperty","_PROPS","createSelectionSet","originalData","attachPropagationListener","firebolt_helper_slicedToArray","dispatchQueuedSideEffects","firebolt_helper_toConsumableArray","clearActionHistory","payloadGenerator","brush","selectionDataModel","propPayload","getRangeFromData","propCriteria","isDimension","payload_generator_toConsumableArray","__default","propagateValues","propagationFieldInf","propagationFields","sideEfffects","mergedModel","sourceUnit","sourceCanvas","parentAlias","propagationBehaviour","propFields","facetByFields","getModelWithFacetData","schema1","data1","schema2","data2","data_propagator_toConsumableArray","groupId","behaviourInstance","propagationConf","sourceBehaviour","enabled","propConf","propInf","UnitFireBolt","src_firebolt_classCallCheck","firebolt_possibleConstructorReturn","firebolt_getPrototypeOf","firebolt_assertThisInitialized","unitId","aliasName","propagationSourceCanvas","sourceUnitId","sourceSideEffects","sideEffectInstances","actionOnSource","mappedEffects","se","sideEffectChecker","enabledFn","payloadFn","sourceIdentifierFields","sourceBehaviours","firebolt_get","VisualUnit","visual_unit_classCallCheck","visual_unit_defineProperty","lifeCycleManager","_gridLinesSelection","_gridBandsSelection","_layerNamespaces","_transformedDataModels","localOptions","_firebolt","_rootSvg","class","renderGridLineLayers","gridLineParentGroup","_entry","grid_lines_slicedToArray","parentGroupClass","_sideEffectGroup","createSideEffectGroup","initSideEffects","rootSvg","_this$parentContainer","parentContainerInf","layerDefinition","layerDefinitions","components","layerIndex","startIndex","visual_unit_toConsumableArray","layersArr","_layersArr","markId","defArr","getLayerFromDef","existingLayer","instanceArr","instanceValues","layerdeps","depArr","resolveEncodingTransform","resolvable","getLayerAxisIndex","_layer$config","specificField","encodingField","stateStore","calculateDomainListener","parentModel","dimValue","getNearestDimensionalValue","entryVal","pointInf","getMarkInfFromLayers","markInf","parsedIdentifiers","transposeArray","getPointsFromIdentifiers","visual_unit_construct","getFieldNames","fields1","matrix_model_toConsumableArray","createSelectedDataModel","uniqueKeyGenerator","keyArray","nextDepthUniqueValues","projectRows","allColumnProjections","rowProjections","optionalProjections","_getFieldNames2","matrix_model_slicedToArray","projFieldNames","colProjFieldNames","pushToMatrix","valueCellCreator","_matrix$rowIndex","facetInfo","colProjections","rowProj","projIdx","_getFieldNames4","rowProjFieldNames","projectedDm","formatKeys","formatterList","rKeys","createValueCells","suppliedLayers","GeomCell","horizontalAxis","verticalAxis","datamodelTransform","layerConfigArr","getLayerConfig","normalizedColumns","normalizedRows","allFacets","cell_creator_toConsumableArray","rowFacets","colFacets","facetField","geomCellKey","getCellKey","columnId","updateCells","facetKey","createAxisCells","currObj","axisInst","_axisInst$config","AxisCell","BlankCell","headerPlaceholderGn","selectionObj","selectionKeys","keySet","textCells","createTextCells","textCell","generatePlaceholders","facetsAndProjections","encoders","valuesMatrix","rowKeys","columnKeys","takeAxisFrom","takeHeaderFrom","axisPlaceholderGn","selObj","axesMatrix","selObjProp","axesForDraw","rowsPrimary","rowPrime","rowsSecondary","rowSec","columnsPrimary","colPrime","columnsSecondary","colSec","_selectionObj","section","hContext","getAxisFields","fieldHolder","ac","computeMatrices","componentRegistry","globalConfig","autoGroupBy","otherEncodings","matrixGnContext","getCellDef","isRowSizeEqual","isColumnSizeEqual","colCells","rowCells","resetSimpleAxes","newCacheMap","valueCellContext","serializeLayerConfig","extractFields","layerFields","_ref4","flattenArray","getFieldsFromSuppliedLayers","suppliedLayerConfig","aggregationFns","nearestAggFns","resolvedAggFns","valueMatrixInfo","getMatrixModel","rowDataModels","colProj","firstLevelRowKeys","_rowDataModels","rowFacetFieldNames","selectedDataModel","newProjectedDataModels","_rowDataModels2","colFacetNames","firstLevelColumnKeys","dme","rIndex","cIndex","rawFormat","transposedColKeys","sortDmTemporalFields","valueCellsCreator","placeholder","_mutateAxesFromMap","mutateAxesFromMap","xAxisSet","yAxisSet","axisId","createUnits","_generateMatrices","generateMatrices","leftHeaders","topHeaders","bottomHeaders","rightHeaders","cell_creator_slicedToArray","leftFacets","rightFacets","rowPriority","colPriority","leftMatrix","rightMatrix","topMatrix","bottomMatrix","currentBottomLength","setAvailableSpace","rowMatrix","columnMatrix","RESOLVER_PROPS","MatrixResolver","matrix_resolver_classCallCheck","_registry","_layerConfig","_matrixLayers","_rowMatrix","_columnMatrix","_valueMatrix","_facets","_projections","_datamodelTransform","_units","_cacheMaps","maps","matrix_resolver_toConsumableArray","_horizontalAxis","_verticalAxis","matrixType","_this5","sideEffectRegistry","_this$dependencies","unitConfig","extractUnitConfig","globalStates","_this$getAllFields","retContext","getRetinalFieldsDomain","retinalEncoder","setCommonDomain","_this6","retinalAxes","updateModel","placeholders","bottomLeft","bottomRight","_this$dependencies3","showHeaders","matrix_resolver_slicedToArray","topCols","bottomCols","rowHeaders","blankCellCreator","footers","topLeft","topRight","ValueMatrix","matrixArr","value_matrix_classCallCheck","instancesById","cellValue","_instancesById","_matrix","_filterFn","rowWidth","currentRowWidth","getLogicalSpace","rowHeight","currentRowHeight","setMatrixInstances","_composition","createMatrices","matrixConfig","unsubscribeChangeListeners","sanitizeRetinalConfig","retinalConf","confValue","groupType","fieldSanitizer","setAxisAndHeaders","placeholderInfo","getMatrices","_groupedDataModel","createRetinalAxes","setDomains","cornerMatrices","createHeaders","metaData","border","unionUnitDomains","registerDomainChangeListener","visual_group_props_defineProperty","visual_group_props_PROPS","cellRegistry","VisualGroup","visual_group_classCallCheck","visual_group_possibleConstructorReturn","visual_group_getPrototypeOf","componentSubRegistry","visual_group_assertThisInitialized","_selection","createUnitState","visual_group_helper_slicedToArray","createLayerState","setupChangeListeners","variable","findInGroup","channel","group_utils_this","facetType","projType","getRetinalAxes","getSimpleAxes","_this$resolver$getAll","visual_group_defineProperty","existingRemoveSet","select_toConsumableArray","firebolt_action_behaviour_map_defineProperty","action_behaviour_map_actionBehaviourMap","propagationBehaviourMap","_propagationBehaviour","firebolt_behaviour_effect_map_defineProperty","firebolt_behaviour_effect_map_behaviourEffectMap","propagationSideEffects","_propagationSideEffec","SCALE_FUNCTIONS","VALUE","canvasAlias","rawVal","check","assembleModelFromIdentifiers","temp","src_firebolt_helper_toConsumableArray","LegendFireBolt","_Firebolt","legend_firebolt_classCallCheck","legend_firebolt_possibleConstructorReturn","legend_firebolt_getPrototypeOf","legend_firebolt_inherits","legend_firebolt_createClass","behaviourName","getCriteriaFromData","firebolt_physical_defineProperty","physical_physicalActions","boundingBox","gradientDimensions","axisScale","rangeShifter","drag_defineProperty","getSelectionCriteria","selectionBoxMeasure","drawingInfMeasure","subjectStartPoint","gradientDimension","legendGradContainer","legendSelGroup","enterFn","getMousePos","boundingClientRect","selection_box_drag_defineProperty","fadeOut","brighten","LegendHighlighter","legend_highlighter_classCallCheck","legend_highlighter_possibleConstructorReturn","legend_highlighter_getPrototypeOf","legendContainer","resetLogicalSpace","title","_title","ALIGN","DEFAULT_MEASUREMENT","LEGEND_TITLE","borderStyle","borderColor","bounds","upper","ICON_MAP","getScaleInfo","scaleType","steps","scaleFn","getInterpolatedArrayData","domainForLegend","scaleParams","requiredWidth","requiredHeight","upperBound","maxTickDiff","alignment","smartLabelCalc","minimumTickSize","_smartLabelCalc$getOr","isInteger","getcomputedArray","computationhelper","requiredMeasure","availableMeasure","currentTickValue","nextTickValue","measureParam","pixelPerTick","getInterpolatedData","recomputeSteps","getTickMeasure","_scaleParams$measures","interpolatedFn","tickValue","getDomainBounds","domainBounds","domainLeg","ele","legend_helper_defineProperty","getScaleFactor","SimpleLegend","simple_legend_classCallCheck","_metaData","_fieldName","_labelManager","_cells","defaultMeasurement","_computedStyle","legendBehaviours","_canvasAlias","getItemMeasures","_labelManager$getOriS","_this$measurement","effPadding","effBorder","effMargin","dataFromScale","titleSpace","getTitleSpace","titleHeight","titleWidth","labelSpaces","getLabelSpaces","_computeItemSpaces","computeItemSpaces","maxItemSpaces","textOrientation","itemSpaces","iconSpaces","maxIconWidth","labelSpace","itemSpace","iconSpace","newLabelWidth","titleSpaces","_this$measurement2","_this$config3","titleCreator","titleContainer","marginPosition","_this$config4","_this$measurement3","renderTitle","simple_legend_defineProperty","legendOrientation","position_config_defineProperty","_legendOrientation","datasets","itemContainerMeasures","getStepSpacesInfo","iconHeight","iconWidth","stepPadding","horizontal","vertical","positionConfig","_positionConfig","alignmentMap","_alignmentMap","itemStack","_itemStack","createLegendSkeleton","gradWidth","gradHeight","maxGradHeight","maxGradWidth","legendBody","legendItem","getItemContainers","legendInstance","positionObj","createItemSkeleton","_context$config","itemSkeleton","alignClass","applyItemStyle","measureType","stepColorCheck","_context$measurement","renderIcon","defaultIcon","DiscreteLegend","_getScaleInfo","discrete_legend_toConsumableArray","_field$schema","discrete_legend_defineProperty","discrete_legend_get","discrete_legend_getPrototypeOf","renderDiscreteItem","_context$measurement2","_item$icon","text-align","getGradientDomain","accumulator","currentValue","MAX_VALUE","MIN_VALUE","legendGradSvg","legendGradCont","linearGradient","makeLinearGradient","legendRect","GradientLegend","gradient_legend_toConsumableArray","gradient_legend_defineProperty","newAxis","axisSpace","axisDomainLength","_legendGradientSvg","gradient_legend_get","gradient_legend_getPrototypeOf","renderGradient","_createLegendSkeleton","StepLegend","step_legend_toConsumableArray","step_legend_defineProperty","lowerBounds","upperBounds","step_legend_get","step_legend_getPrototypeOf","stepData","renderStepItem","_context$measurement3","_item$icon2","_positionConfig$posit","PADDING","BORDER","MARGIN","TITLE_TEMPLATE_NOT_ALLOWED_TAGS","LEGEND_TYPE_MAP","constants_defineProperty","_LEGEND_TYPE_MAP","HORIZONTAL_CENTER","VERTICAL_CENTER","share","operators_construct","operators_toConsumableArray","strings","htmlCode","expLn","frag","createDocumentFragment","treeShakeNode","nodeType","Node","ELEMENT_NODE","tagName","_didIteratorError","_iteratorError","_step","_iterator","childNodes","err","canvasIterator","canvases","iteratorFn","cFn","canvas","visualGroup","_throwback","actionModel","ActionModel","action_model_classCallCheck","_registrableComponents","registerPropagationBehaviourMap","dissociateBehaviour","_len5","_key5","dissociateSideEffect","policy","registrableComponents","mergedPolicy","aliases","comp","*","propagationPayload","propagationCanvas","crossInteractionPolicy","TITLE_CONFIG","SUB_TITLE_CONFIG","maxLines","LAYOUT_ALIGN","canvas_local_options_defineProperty","_localOptions","prevDm","sanitizedDm","canvasOptions","_canvasOptions","titleConfig","subtitle","sub","subtitleConfig","LayoutComponent","layoutComponent_classCallCheck","_boundBox","_renderAt","_alignWith","_alignment","_componentName","_className","DummyComponent","newDimensions","renderAt","component","componentName","pagination","scrollBar","thickness","speed","legend","minHeight","minCharacters","verticalAlign","collapse","invalidValues","DEFAULT_WIDTH","DEFAULT_HEIGHT","DEFAULT_CLASS_NAME","NODE_PREFIX","DefinitionModel","definitionModel_classCallCheck","_host","host","_cut","cut","_ratioWeight","ratioWeight","_preferred","preferred","_lanes","lanes","_remainingHeight","_remainingWidth","remainingHeight","remainingWidth","getNodeId","_uid","yExtraSpace","smallestHeight","getCutType","smallestExtraHeightHorizontally","MAX_SAFE_INTEGER","containerHeight","hostHeight","xExtraSpace","smallestWidth","smallestExtraWidthVertically","containerWidth","hostWidth","createPlaceHolderComponent","placeComponent","definitionModel","leftOvercomponentRationWidth","isPreferred","isGridComponent","componentRatioWidth","leftHeight","leftWidth","_component$getLogical","componentHeight","componentWidth","firstLaneConfig","firstLane","secondLane","tree_classCallCheck","_parentCut","_this$_children","tree_toConsumableArray","parentCut","bound","nodeconfig","searchNode","childNode","nodeId","deleteSearchNode","LayoutModel","measurements","layout_model_classCallCheck","_measurements","_root","createTree","setBoundBox","addChildren","lane","allocateBoundingBox","totalWeight","carry","lastSibling","ratio","setHostSpatialConfig","setHostPosition","negotiateDimension","alteredDim","nonAlteredDim","cumultiveExtraSpaceAmt","childrenLength","extraSpaceAmt","computePosition","determineBoundBox","bb","_lastSibling$boundBox","_top","_left","_height","_width","_instance$parent$boun","setSpatialConfig","Utils","utils_createClass","isDOMElement","getID","getElement","findContainer","coordinate","removeDiv","divId","DataPoint","data_point_classCallCheck","DataParser","data_parser_classCallCheck","data_parser_createClass","defaultDataPointLogic","nodepoints","getnodePoints","datapoint","HTMLDataAdapter","_DataParser","html_data_classCallCheck","html_data_possibleConstructorReturn","html_data_getPrototypeOf","html_data_inherits","html_data_createClass","getCoordinates","html_data_get","Renderer","renderer_classCallCheck","renderer_createClass","initRenderer","__logicalTree","HTMLRenderer","_Renderer","html_renderer_classCallCheck","html_renderer_possibleConstructorReturn","html_renderer_getPrototypeOf","_coordinates","html_renderer_inherits","html_renderer_createClass","createhtml","mainDiv","html_renderer_get","parentDiv","createAndCustomiseParent","hasHost","createAndPositionDiv","html_renderer_objectSpread","div","coordinates","findNode","nodeID","renderer","renderHTML","DrawingManager","drawing_manager_classCallCheck","_componentMap","componentMap","_layoutClassName","layoutClassName","_renderer","drawing_manager_createClass","drawLayout","resolveAligment","componentData","alignWith","newNodeConfig","refNode","drawComponent","DefinitionManager","definition_manager_classCallCheck","_prioritySequence","_totalHeight","_totalWidth","_targetComponentMap","prepareTargetComponentMap","targetComponentMap","canvasComponent","tempDefModel","componentRef","getComponent","placeGridComponent","gridComponents","iscolumnPreffered","_placeComponent","rowpreffred","LayoutDef","layout_def_classCallCheck","_layoutDefinition","layout_def_createClass","addComponent","layoutDefinition","addMultipleComponent","componentArray","sanitizedDefinition","hostObj","hostID","childHost","resetComponentMap","LayoutManager","layout_manager_classCallCheck","_dimension","_skeletonType","skeletonType","_layoutDef","_drawingManager","_rootNodeID","con","resetNode","updateNode","compute","_layout","calLayOutDef","_context$dimension","layoutDef","prioritySequence","generateConfigModel","negotiate","broadcast","layoutComponents","componentArr","compo","removeElement","elemID","setupChangeListener","allOptions","_allOptions","canvas_helper_toConsumableArray","nameSpaceProps","equalityChecker","option","updateChecker","dispatchProps","_cachedProps","notifyAnimationEnd","centerMatrix","layout","viewInfo","viewMatricesInfo","promises","cellArr","lifeCycle","animDonePromises","animationDone","applyInteractionPolicy","interactionPolicy","_interactionPolicy","_crossInteractionPolicy","unitFireBolt","changeBehaviourStateOnPropagation","changeSideEffectStateOnPropagation","createLayoutManager","src_options","minUnitWidth","minUnitHeight","oldConf","fixScrollBarConfig","VIEW_INDEX","ROW_MATRIX_INDEX","2","COLUMN_MATRIX_INDEX","HEIGHT","ROW_ROOT","COLUMN_ROOT","VERTICAL","HORIZONTAL","GenericLayout","generic_layout_classCallCheck","_matrices","_centerMatrix","_mountPoint","DEFAULT_CONFIGURATION","grid_layout_defaults_defineProperty","_DEFAULT_CONFIGURATIO","_FieldNames$BORDER","DEFAULT_MEASUREMENTS","_DEFAULT_MEASUREMENTS","findInPage","page","combineMatrices","isTransposed","joinedMatrix","utils_toConsumableArray","rowData","computeLogicalSpace","maxMeasures","_config$isTransposed","unitMeasures","_getMeasureInfo","getMeasureInfo","firstMeasure","secondMeasure","minMeasures","getMinMeasures","_logicalSpace","utils_defineProperty","valueItem","maxMeasure","firstMeasureValue","secondMeasureValue","valueArray","_item$space","fMeasure","sMeasure","minSecondMeasure","createMatrixEachLevel","_arr$i","extraCellsRemover","beg","distribution","extraCellLengths","VisualMatrix","visual_matrix_classCallCheck","_lastLevelKey","_primaryMatrix","_secondaryMatrix","_maxMeasures","_availableSpace","_layoutMatrix","_tree","_createTree2","matrixTree","lastLevelKey","layoutMatrix","primaryMatrix","secondaryMatrix","breakPage","primaryMatrixLength","newMatrix","keyLength","heightMeasures","populateMaxMeasures","widthMeasures","calculateDepth","viewableMatrix","createViewPortMatrix","viewableMeasures","redistributeSpaces","childDepth","createMatrixInstances","matrixInfo","breakPointer","_breakPointer","brokenMatrix","breakMatrix","nextLevel","removeExtraCells","RowVisualMatrix","row_matrix_classCallCheck","row_matrix_possibleConstructorReturn","row_matrix_getPrototypeOf","maxHeights","maxWidths","matrixInst","cellDimOptions","matrixIndex","_this2$getCellDimensi","getCellDimensions","widths","rowHeights","columnWidths","primary","secondary","begCellLen","endCellLen","remainingAvailWidth","cWidths","conditions","maxPrioritySpace","availableWidth","currentWidth","prioritySpace","logicalWidths","getPriorityDistribution","mWidth","mHeight","redistributeViewSpaces","computeViewableSpaces","rHeights","gutter","spaceTakenByColumn","spaces","getDistributedHeight","heightWithoutGutter","distSum","gutterSum","availableHeight","colLen","distHeight","borderWidth","colHeight","colWidth","heights","ColumnVisualMatrix","column_matrix_classCallCheck","column_matrix_possibleConstructorReturn","column_matrix_getPrototypeOf","heightDist","divider","spaceTakenByRow","getDistributedWidth","layoutConfig","distWidth","rowLen","oldLogicalSpace","heightDistribution","getMatrixMeasurement","setViewSpaces","pointerType","viewSpaces","pointer","computations_defineProperty","paginationDetailsMap","scrollType","paginationMeasureGetter","relatedMaxMeasure","getMatrixMeasureForPagination","measureDetails","actualMeasure","scrollInfo","getMatrixHeightDetails","columnMatrixWidth","_getHeightRequiredByC","getHeightRequiredByColMatrix","maxColumnMatrixHeight","columnViewSpace","getViewableSpaces","columnPointer","columnMatrixHeight","maxHeightAvailableForRowMatrix","rowMatrixHeight","bufferCondition","isScroll","getActualBufferFromConfig","computations_slicedToArray","getBufferFromCondition","currentBufferType","horizontalBuffer","verticalBuffer","computeLayoutMeasurements","_getMatrixWidthDetail","getMatrixWidthDetails","_layout$config3","rowMatrixWidth","maxRowMatrixWidth","maxWidthAvailableForColumnMatrix","_getMatrixHeightDetai","_getActualBufferFromC","rowViewableSpaces","columnViewableSpaces","setValueMatrixMeasurements","computations_toConsumableArray","rowWidthsPrimary","rowWidthsSecondary","columnHeightsPrimary","columnHeightsSecondary","measureSum","total","GridLayout","layout_classCallCheck","layout_possibleConstructorReturn","layout_getPrototypeOf","_layoutId","_viewInfo","defaultViewInfo","_scrollInfo","generateVisualMatrices","begColCells","endColCells","gutterSpace","layout_helper_slicedToArray","_center","_bottom","layout_helper_toConsumableArray","RowMatrix","ColumnMatrix","layout_get","_computeLayoutMeasure","setViewInformation","pageNumber","pageType","totalPages","layout_defineProperty","renderGrid","currentPage","maxRowHeight","maxColWidth","rowPointer","getViewMatrices","rowMatrices","getViewableMatrices","columnMatrices","centralMatrixPointer","rowMatrixLen","columnMatrixLen","rowPages","columnPages","layoutDimensions","getViewMeasurements","_layout$config","rowSpaces","colSpaces","rightWidth","topHeight","bottomHeight","centerHeight","centerWidth","viewWidth","viewHeight","actualCenterMeasures","totalMeasures","unitHeights","unitWidths","borderMap","border_helper_defineProperty","_borderMap","specificBorderApplier","borderTypes","showBorders","borderInfo","borderType","applySpecificBorder","applyBorders","borderApplierFn","borderApplier","borderMapVal","orderMaker","nestByStack","updateArr","optionalParams","currStack","prevStack","arrVal","stackVal","currElemIndex","newElem","arrElem","returnArr","spanCalculator","isNull","maskCreator","_nestByStack","viewMatrix","hierarchy","_nestByStack2","spanGenerator","spans","ridx","currSpan","getOrder","isReverse","matrixSpanGeneratorMap","span_maker_defineProperty","_matrixSpanGeneratorM","orderGetter","viewMatrixMaker","spanMaker","matrixSpanGenerator","spanApplier","cellCounter","spaceAllocationDueToSpan","cumulativeWidth","spanApplierMap","_spanApplierMap","TransactionSupport","INTERFACE_IMPl","CLASSPREFIX","HEADER","DATA","AXES","FACET_BY_FIELDS","FIELDS","TRANSFORM","LAYER_DEF","CONFIG","DETAIL_FIELDS","AXIS","GEOM","BLANK","SimpleCell","simple_cell_classCallCheck","enums_defaults_defineProperty","_DEFAULT_CONFIG","_CONSTANTS$MARGIN","CONSTANTS","DEFAULT_PROPS","minSpacing","src_props_defineProperty","visual_cell_src_props_PROPS","caption","smartText","axis_cell_classCallCheck","axis_cell_possibleConstructorReturn","axis_cell_getPrototypeOf","_availHeight","_availWidth","axis_cell_assertThisInitialized","computeAxisSpace","logicalWidth","logicalHeight","spaceFixer","_axis$getLogicalSpace","actualWidth","actualHeight","_axis$config2","wrapperDiv","blank_cell_classCallCheck","blank_cell_possibleConstructorReturn","blank_cell_getPrototypeOf","blank_cell_assertThisInitialized","setSmartText","_context$minSpacing","minHeightSpace","minWidthSpace","paddedHeight","paddedWidth","text_cell_classCallCheck","text_cell_possibleConstructorReturn","text_cell_getPrototypeOf","text_cell_assertThisInitialized","computeTextSpace","_context$minSpacing2","minText","_minTextSpace","smartSpace","textAlign","vAlign","_this$smartText","translation","middle","geom_cell_classCallCheck","geom_cell_possibleConstructorReturn","geom_cell_getPrototypeOf","_unit","_datamodel","_facetByFields","_transform","_caption","geom_cell_assertThisInitialized","lockModel","unlockModel","captionSpace","computeGeomSpace","getCaptionSpace","captionDom","DEFAULT_PLACEHOLDERS","src_defaults_defineProperty","_DEFAULT_PLACEHOLDERS","resolveTitleSubTitleContent","rawContent","escapeHTML","htmlEscapes","&","<",">","\"","'","/","createHeading","prevCell","cellType","_minTickDiff","legendInitializer","legendConfig","prevLegends","legends","headerHeight","legendInfo","legendCreator","LegendCls","dataset","scaleProps","_scale$config","stepMapper","dataInfo","legendMeasures","titleText","getGroupByData","setLegendMeasures","MuzeComponent","_this$boundBox","HeaderComponent","headerComponent_classCallCheck","headerComponent_possibleConstructorReturn","headerComponent_getPrototypeOf","setParams","cont","renderHeader","LegendComponent","legendComponent_classCallCheck","legendComponent_possibleConstructorReturn","legendComponent_getPrototypeOf","legendSpace","sectionComponents","_this$params$config","legendMount","legWidth","legHeight","sections","currHeight","currWidth","leg","legendHeight","legendWidth","renderLegend","_defaultAlignmentHelp","defaultAlignmentHelper","arrowSizeMap","getUnitPositions","totalLength","viewLength","currentLen","unitPosition","createScrollBarArrow","createScrollBarRect","mover","applyScrollMouseDownAction","moverRect","scrollMaker","_mover$node$getBoundi","_rect$node$getBoundin","rectX","rectY","changeMoverPosition","registerListenerOnArrow","arrowType","_components","isTouchDevice","applyMoverDrag","moverStartPos","rectStartPos","distanceMoved","actualPosition","pageXOffset","pageYOffset","applyRectClick","emptyScrollAreaClick","manager","unitPositions","ScrollMaker","scroll_maker_classCallCheck","_attachedScrollAction","_unitPositions","scroll_maker_createClass","scrollTo","scrollDeltaTo","createScroll","scrollBarContainer","scrollContainerHelper","attachScrollAction","externalScrollAction","detachScrollAction","scrollMakerMap","_ScrollMaker","HorizontalScrollMaker","horizontal_scroll_maker_classCallCheck","horizontal_scroll_maker_possibleConstructorReturn","horizontal_scroll_maker_getPrototypeOf","horizontal_scroll_maker_inherits","horizontal_scroll_maker_createClass","horizontal_scroll_maker_get","prevArrow","nextArrow","_this$logicalSpace","scrollBarWithouArrowLength","_scrollBarWithouArrowLength","_this$_components$mov","positionAdjuster","newPosition","currentPos","_this$_components$mov2","moverPos","movedViewLength","performAttachedScrollFunction","delta","_this$_components$mov3","scrollPercentage","movement","VerticalScrollMaker","vertical_scroll_maker_classCallCheck","vertical_scroll_maker_possibleConstructorReturn","vertical_scroll_maker_getPrototypeOf","vertical_scroll_maker_inherits","vertical_scroll_maker_createClass","vertical_scroll_maker_get","ScrollComponent","scroll_component_classCallCheck","scrollBarComponentConfig","scroll_component_possibleConstructorReturn","scroll_component_getPrototypeOf","unitIndex","sanitizedUnitIndex","externalAction","MatrixComponent","matrix_component_classCallCheck","matrix_component_possibleConstructorReturn","matrix_component_getPrototypeOf","_this$params$config$s","containerForMatrix","applyScroll","_cellSpanMaker","cellSpanMaker","_matrixSpanGenerator","renderTable","applySpans","applier","renderPlaceholders","renderMatrix","applyScrollAction","scollDistance","GridComponent","grid_component_classCallCheck","grid_component_possibleConstructorReturn","grid_component_getPrototypeOf","_this$component$viewI","matrixDim","matrixName","updateWrapper","matrixWrapper","allComponents","_scrollBarManager","wheelDeltaX","wheelDeltaY","scrollBarManager","triggerScrollBarAction","movedView","scrollActionApplier","_this$component$0$0$b","sanitizeGrid","headerMap","headerCell","configType","createHeaderWrapper","headerType","layoutManager","renderDetails","_headerMap$headerType","headerConfig","component_wrapper_maker_objectSpread","wrapperParams","existingComponent","createScrollBarWrapper","scrollBarType","grid","_scrollBarMap$scrollB","scrollBarMap","layoutBasedMeasure","viewMeasure","rowAlign","colAlign","componentWrapperMaker","createLegendWrapper","legendWrapper","gridLayoutWrapper","verticalScrollBar","horizontalScrollBar","ScrollManager","scroll_manager_classCallCheck","_scrollBarComponents","_attachedComponents","scroll_manager_createClass","scrollBarComponents","attachedComponents","performScrollAction","getRenderDetails","_mount$getBoundingCli","heightAttr","widthAttr","visGroup","_visGroup$placeholder","legendPosition","layoutArrangement","arrangeComponents","_titleLayouts","titleLayouts","component_resolver_defineProperty","legendLayouts","titlePosition","subtitlePosition","availableHeightForCanvas","availableWidthForCanvas","_createHeaders","canvasHeight","canvasWidth","isSubtitle","headerOptions","_createHeading","createLegend","getLegendSpace","mountSpace","componentIndexes","componentNames","3","4","5","renderLayout","_layoutManager","gridLayout","compWrappers","componentWrappers","gridWrapper","createScrollManager","horizontalScrollWrapper","verticalScrollWrapper","hScrollBar","vScrollBar","componentWrapper","deleteElementName","deleteElementId","removeComponent","registerComponents","attachScrollListener","defaultInteractionPolicy","isMeasure","group_firebolt_toConsumableArray","getFieldsFromChannel","colDim","unitColFacets","equals","unitRowFacets","propagateWith","defaultCrossInteractionPolicy","propagationCanvasAlias","propagationUnit","GroupFireBolt","group_firebolt_classCallCheck","group_firebolt_possibleConstructorReturn","group_firebolt_getPrototypeOf","behaviouralAction","validFields","APP_INITIAL_STATE","app","Canvas","globalDependencies","canvas_classCallCheck","canvas_possibleConstructorReturn","canvas_getPrototypeOf","canvas_defineProperty","canvas_assertThisInitialized","initedComponents","initCanvas","createGroupState","_VisualGroup$getState2","canvas_helper_slicedToArray","localState","register","prepareLayout","triggerReflow","setLayoutInfForUnits","getBoundBox","getRootNodeId","setLabelRotationForAxes","rotationVal","getAxes","initialSettings","regEntry","COMPONENTS","SUBREGISTRIES","regObj","globalCache","defaultRegistry","overrideRegistryDefinitions","overrideRegistry","muze","_transactor2","muze_slicedToArray","env","globalStore","componentSubRegistryDef","settings","withSettings","enableChainedTransaction","transactionModel","transactionEndpoint","transactionItems","Smartlabel","SideEffects","standards","Behaviours","pkg","operators","utils","lookupWhat","lookupDetails","lookupTarget","deps"],"mappings":"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","file":"muze.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"muze\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"muze\"] = factory();\n\telse\n\t\troot[\"muze\"] = factory();\n})(window, function() {\nreturn "," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 7);\n","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"DataModel\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"DataModel\"] = factory();\n\telse\n\t\troot[\"DataModel\"] = factory();\n})(window, function() {\nreturn "," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 1);\n","const DataModel = require('./export');\n\nmodule.exports = DataModel.default ? DataModel.default : DataModel;\n","/**\n * DataFormat Enum defines the format of the input data.\n * Based on the format of the data the respective adapter is loaded.\n *\n * @readonly\n * @enum {string}\n */\nconst DataFormat = {\n FLAT_JSON: 'FlatJSON',\n DSV_STR: 'DSVStr',\n DSV_ARR: 'DSVArr',\n AUTO: 'Auto'\n};\n\nexport default DataFormat;\n","/**\n * DimensionSubtype enum defines the sub types of the Dimensional Field.\n *\n * @readonly\n * @enum {string}\n */\nconst DimensionSubtype = {\n CATEGORICAL: 'categorical',\n TEMPORAL: 'temporal',\n GEO: 'geo',\n BINNED: 'binned'\n};\n\nexport default DimensionSubtype;\n","/**\n * MeasureSubtype enum defines the sub types of the Measure Field.\n *\n * @readonly\n * @enum {string}\n */\nconst MeasureSubtype = {\n CONTINUOUS: 'continuous'\n};\n\nexport default MeasureSubtype;\n","/**\n * FieldType enum defines the high level field based on which visuals are controlled.\n * Measure in a high level is numeric field and Dimension in a high level is string field.\n *\n * @readonly\n * @enum {string}\n */\nconst FieldType = {\n MEASURE: 'measure',\n DIMENSION: 'dimension'\n};\n\nexport default FieldType;\n","/**\n * Filtering mode enum defines the filering modes of DataModel.\n *\n * @readonly\n * @enum {string}\n */\nconst FilteringMode = {\n NORMAL: 'normal',\n INVERSE: 'inverse',\n ALL: 'all'\n};\n\nexport default FilteringMode;\n","/**\n * Group by function names\n *\n * @readonly\n * @enum {string}\n */\nconst GROUP_BY_FUNCTIONS = {\n SUM: 'sum',\n AVG: 'avg',\n MIN: 'min',\n MAX: 'max',\n FIRST: 'first',\n LAST: 'last',\n COUNT: 'count',\n STD: 'std'\n};\n\nexport default GROUP_BY_FUNCTIONS;\n","/**\n * Creates a JS native date object from input\n *\n * @param {string | number | Date} date Input using which date object to be created\n * @return {Date} : JS native date object\n */\nfunction convertToNativeDate (date) {\n if (date instanceof Date) {\n return date;\n }\n\n return new Date(date);\n}\n/**\n * Apply padding before a number if its less than 1o. This is used when constant digit's number to be returned\n * between 0 - 99\n *\n * @param {number} n Input to be padded\n * @return {string} Padded number\n */\nfunction pad (n) {\n return (n < 10) ? (`0${n}`) : n;\n}\n/*\n * DateFormatter utility to convert any date format to any other date format\n * DateFormatter parse a date time stamp specified by a user abiding by rules which are defined\n * by user in terms of token. It creates JS native date object from the user specified format.\n * That native date can also be displayed\n * in any specified format.\n * This utility class only takes care of format conversion only\n */\n\n/*\n * Escapes all the special character that are used in regular expression.\n * Like\n * RegExp.escape('sgfd-$') // Output: sgfd\\-\\$\n *\n * @param text {String} : text which is to be escaped\n */\nRegExp.escape = function (text) {\n return text.replace(/[-[\\]{}()*+?.,\\\\^$|#\\s]/g, '\\\\$&');\n};\n\n/**\n * DateTimeFormatter class to convert any user format of date time stamp to any other format\n * of date time stamp.\n *\n * @param {string} format Format of the date given. For the above date,\n * 'year: %Y, month: %b, day: %d'.\n * @class\n */\n/* istanbul ignore next */ function DateTimeFormatter (format) {\n this.format = format;\n this.dtParams = undefined;\n this.nativeDate = undefined;\n}\n\n// The identifier of the tokens\nDateTimeFormatter.TOKEN_PREFIX = '%';\n\n// JS native Date constructor takes the date params (year, month, etc) in a certail sequence.\n// This defines the sequence of the date parameters in the constructor.\nDateTimeFormatter.DATETIME_PARAM_SEQUENCE = {\n YEAR: 0,\n MONTH: 1,\n DAY: 2,\n HOUR: 3,\n MINUTE: 4,\n SECOND: 5,\n MILLISECOND: 6\n};\n\n/*\n * This is a default number parsing utility. It tries to parse a number in integer, if parsing is unsuccessful, it\n * gives back a default value.\n *\n * @param: defVal {Number} : Default no if the parsing to integer is not successful\n * @return {Function} : An closure function which is to be called by passing an the value which needs to be parsed.\n */\nDateTimeFormatter.defaultNumberParser = function (defVal) {\n return function (val) {\n let parsedVal;\n if (isFinite(parsedVal = parseInt(val, 10))) {\n return parsedVal;\n }\n\n return defVal;\n };\n};\n\n/*\n * This is a default number range utility. It tries to find an element in the range. If not found it returns a\n * default no as an index.\n *\n * @param: range {Array} : The list which is to be serached\n * @param: defVal {Number} : Default no if the serach and find does not return anything\n * @return {Function} : An closure function which is to be called by passing an the value which needs to be found\n */\nDateTimeFormatter.defaultRangeParser = function (range, defVal) {\n return (val) => {\n let i;\n let l;\n\n if (!val) { return defVal; }\n\n const nVal = val.toLowerCase();\n\n for (i = 0, l = range.length; i < l; i++) {\n if (range[i].toLowerCase() === nVal) {\n return i;\n }\n }\n\n if (i === undefined) {\n return defVal;\n }\n return null;\n };\n};\n\n/*\n * Defines the tokens which are supporter by the dateformatter. Using this definitation a value gets extracted from\n * the user specifed date string. This also formats the value for display purpose from native JS date.\n * The definition of each token contains the following named properties\n * {\n * %token_name% : {\n * name: name of the token, this is used in reverse lookup,\n * extract: a function that returns the regular expression to extract that piece of information. All the\n * regex should be gouped by using ()\n * parser: a function which receives value extracted by the above regex and parse it to get the date params\n * formatter: a formatter function that takes milliseconds or JS Date object and format the param\n * represented by the token only.\n * }\n * }\n *\n * @return {Object} : Definition of the all the supported tokens.\n */\nDateTimeFormatter.getTokenDefinitions = function () {\n const daysDef = {\n short: [\n 'Sun',\n 'Mon',\n 'Tue',\n 'Wed',\n 'Thu',\n 'Fri',\n 'Sat'\n ],\n long: [\n 'Sunday',\n 'Monday',\n 'Tuesday',\n 'Wednesday',\n 'Thursday',\n 'Friday',\n 'Saturday'\n ]\n };\n const monthsDef = {\n short: [\n 'Jan',\n 'Feb',\n 'Mar',\n 'Apr',\n 'May',\n 'Jun',\n 'Jul',\n 'Aug',\n 'Sep',\n 'Oct',\n 'Nov',\n 'Dec'\n ],\n long: [\n 'January',\n 'February',\n 'March',\n 'April',\n 'May',\n 'June',\n 'July',\n 'August',\n 'September',\n 'October',\n 'November',\n 'December'\n ]\n };\n\n const definitions = {\n H: {\n // 24 hours format\n name: 'H',\n index: 3,\n extract () { return '(\\\\d+)'; },\n parser: DateTimeFormatter.defaultNumberParser(),\n formatter (val) {\n const d = convertToNativeDate(val);\n\n return d.getHours().toString();\n }\n },\n l: {\n // 12 hours format\n name: 'l',\n index: 3,\n extract () { return '(\\\\d+)'; },\n parser: DateTimeFormatter.defaultNumberParser(),\n formatter (val) {\n const d = convertToNativeDate(val);\n const hours = d.getHours() % 12;\n\n return (hours === 0 ? 12 : hours).toString();\n }\n },\n p: {\n // AM or PM\n name: 'p',\n index: 3,\n extract () { return '(AM|PM)'; },\n parser: (val) => {\n if (val) {\n return val.toLowerCase();\n }\n return null;\n },\n formatter: (val) => {\n const d = convertToNativeDate(val);\n const hours = d.getHours();\n\n return (hours < 12 ? 'AM' : 'PM');\n }\n },\n P: {\n // am or pm\n name: 'P',\n index: 3,\n extract () { return '(am|pm)'; },\n parser: (val) => {\n if (val) {\n return val.toLowerCase();\n }\n return null;\n },\n formatter: (val) => {\n const d = convertToNativeDate(val);\n const hours = d.getHours();\n\n return (hours < 12 ? 'am' : 'pm');\n }\n },\n M: {\n // Two digit minutes 00 - 59\n name: 'M',\n index: 4,\n extract () { return '(\\\\d+)'; },\n parser: DateTimeFormatter.defaultNumberParser(),\n formatter (val) {\n const d = convertToNativeDate(val);\n const mins = d.getMinutes();\n\n return pad(mins);\n }\n },\n S: {\n // Two digit seconds 00 - 59\n name: 'S',\n index: 5,\n extract () { return '(\\\\d+)'; },\n parser: DateTimeFormatter.defaultNumberParser(),\n formatter (val) {\n const d = convertToNativeDate(val);\n const seconds = d.getSeconds();\n\n return pad(seconds);\n }\n },\n K: {\n // Milliseconds\n name: 'K',\n index: 6,\n extract () { return '(\\\\d+)'; },\n parser: DateTimeFormatter.defaultNumberParser(),\n formatter (val) {\n const d = convertToNativeDate(val);\n const ms = d.getMilliseconds();\n\n return ms.toString();\n }\n },\n a: {\n // Short name of day, like Mon\n name: 'a',\n index: 2,\n extract () { return `(${daysDef.short.join('|')})`; },\n parser: DateTimeFormatter.defaultRangeParser(daysDef.short),\n formatter (val) {\n const d = convertToNativeDate(val);\n const day = d.getDay();\n\n return (daysDef.short[day]).toString();\n }\n },\n A: {\n // Long name of day, like Monday\n name: 'A',\n index: 2,\n extract () { return `(${daysDef.long.join('|')})`; },\n parser: DateTimeFormatter.defaultRangeParser(daysDef.long),\n formatter (val) {\n const d = convertToNativeDate(val);\n const day = d.getDay();\n\n return (daysDef.long[day]).toString();\n }\n },\n e: {\n // 8 of March, 11 of November\n name: 'e',\n index: 2,\n extract () { return '(\\\\d+)'; },\n parser: DateTimeFormatter.defaultNumberParser(),\n formatter (val) {\n const d = convertToNativeDate(val);\n const day = d.getDate();\n\n return day.toString();\n }\n },\n d: {\n // 08 of March, 11 of November\n name: 'd',\n index: 2,\n extract () { return '(\\\\d+)'; },\n parser: DateTimeFormatter.defaultNumberParser(),\n formatter (val) {\n const d = convertToNativeDate(val);\n const day = d.getDate();\n\n return pad(day);\n }\n },\n b: {\n // Short month, like Jan\n name: 'b',\n index: 1,\n extract () { return `(${monthsDef.short.join('|')})`; },\n parser: DateTimeFormatter.defaultRangeParser(monthsDef.short),\n formatter (val) {\n const d = convertToNativeDate(val);\n const month = d.getMonth();\n\n return (monthsDef.short[month]).toString();\n }\n },\n B: {\n // Long month, like January\n name: 'B',\n index: 1,\n extract () { return `(${monthsDef.long.join('|')})`; },\n parser: DateTimeFormatter.defaultRangeParser(monthsDef.long),\n formatter (val) {\n const d = convertToNativeDate(val);\n const month = d.getMonth();\n\n return (monthsDef.long[month]).toString();\n }\n },\n m: {\n // Two digit month of year like 01 for January\n name: 'm',\n index: 1,\n extract () { return '(\\\\d+)'; },\n parser (val) { return DateTimeFormatter.defaultNumberParser()(val) - 1; },\n formatter (val) {\n const d = convertToNativeDate(val);\n const month = d.getMonth();\n\n return pad(month + 1);\n }\n },\n y: {\n // Short year like 90 for 1990\n name: 'y',\n index: 0,\n extract () { return '(\\\\d{2})'; },\n parser (val) {\n let result;\n if (val) {\n const l = val.length;\n val = val.substring(l - 2, l);\n }\n let parsedVal = DateTimeFormatter.defaultNumberParser()(val);\n let presentDate = new Date();\n let presentYear = Math.trunc((presentDate.getFullYear()) / 100);\n\n result = `${presentYear}${parsedVal}`;\n\n if (convertToNativeDate(result).getFullYear() > presentDate.getFullYear()) {\n result = `${presentYear - 1}${parsedVal}`;\n }\n return convertToNativeDate(result).getFullYear();\n },\n formatter (val) {\n const d = convertToNativeDate(val);\n let year = d.getFullYear().toString();\n let l;\n\n if (year) {\n l = year.length;\n year = year.substring(l - 2, l);\n }\n\n return year;\n }\n },\n Y: {\n // Long year like 1990\n name: 'Y',\n index: 0,\n extract () { return '(\\\\d{4})'; },\n parser: DateTimeFormatter.defaultNumberParser(),\n formatter (val) {\n const d = convertToNativeDate(val);\n const year = d.getFullYear().toString();\n\n return year;\n }\n }\n };\n\n return definitions;\n};\n\n/*\n * The tokens which works internally is not user friendly in terms of memorizing the names. This gives a formal\n * definition to the informal notations.\n *\n * @return {Object} : Formal definition of the tokens\n */\nDateTimeFormatter.getTokenFormalNames = function () {\n const definitions = DateTimeFormatter.getTokenDefinitions();\n\n return {\n HOUR: definitions.H,\n HOUR_12: definitions.l,\n AMPM_UPPERCASE: definitions.p,\n AMPM_LOWERCASE: definitions.P,\n MINUTE: definitions.M,\n SECOND: definitions.S,\n SHORT_DAY: definitions.a,\n LONG_DAY: definitions.A,\n DAY_OF_MONTH: definitions.e,\n DAY_OF_MONTH_CONSTANT_WIDTH: definitions.d,\n SHORT_MONTH: definitions.b,\n LONG_MONTH: definitions.B,\n MONTH_OF_YEAR: definitions.m,\n SHORT_YEAR: definitions.y,\n LONG_YEAR: definitions.Y\n };\n};\n\n/*\n * This defines the rules and declares dependencies that resolves a date parameter (year, month etc) from\n * the date time parameter array.\n *\n * @return {Object} : An object that contains dependencies and a resolver function. The dependencies values are fed\n * to the resolver function in that particular sequence only.\n */\nDateTimeFormatter.tokenResolver = function () {\n const definitions = DateTimeFormatter.getTokenDefinitions();\n const defaultResolver = (...args) => { // eslint-disable-line require-jsdoc\n let i = 0;\n let arg;\n let targetParam;\n const l = args.length;\n\n for (; i < l; i++) {\n arg = args[i];\n if (args[i]) {\n targetParam = arg;\n }\n }\n\n if (!targetParam) { return null; }\n\n return targetParam[0].parser(targetParam[1]);\n };\n\n return {\n YEAR: [definitions.y, definitions.Y,\n defaultResolver\n ],\n MONTH: [definitions.b, definitions.B, definitions.m,\n defaultResolver\n ],\n DAY: [definitions.a, definitions.A, definitions.e, definitions.d,\n defaultResolver\n ],\n HOUR: [definitions.H, definitions.l, definitions.p, definitions.P,\n function (hourFormat24, hourFormat12, ampmLower, ampmUpper) {\n let targetParam;\n let amOrpm;\n let isPM;\n let val;\n\n if (hourFormat12 && (amOrpm = (ampmLower || ampmUpper))) {\n if (amOrpm[0].parser(amOrpm[1]) === 'pm') {\n isPM = true;\n }\n\n targetParam = hourFormat12;\n } else if (hourFormat12) {\n targetParam = hourFormat12;\n } else {\n targetParam = hourFormat24;\n }\n\n if (!targetParam) { return null; }\n\n val = targetParam[0].parser(targetParam[1]);\n if (isPM) {\n val += 12;\n }\n return val;\n }\n ],\n MINUTE: [definitions.M,\n defaultResolver\n ],\n SECOND: [definitions.S,\n defaultResolver\n ]\n };\n};\n\n/*\n * Finds token from the format rule specified by a user.\n * @param format {String} : The format of the input date specified by the user\n * @return {Array} : An array of objects which contains the available token and their occurence index in the format\n */\nDateTimeFormatter.findTokens = function (format) {\n const tokenPrefix = DateTimeFormatter.TOKEN_PREFIX;\n const definitions = DateTimeFormatter.getTokenDefinitions();\n const tokenLiterals = Object.keys(definitions);\n const occurrence = [];\n let i;\n let forwardChar;\n\n while ((i = format.indexOf(tokenPrefix, i + 1)) >= 0) {\n forwardChar = format[i + 1];\n if (tokenLiterals.indexOf(forwardChar) === -1) { continue; }\n\n occurrence.push({\n index: i,\n token: forwardChar\n });\n }\n\n return occurrence;\n};\n\n/*\n * Format any JS date to a specified date given by user.\n *\n * @param date {Number | Date} : The date object which is to be formatted\n * @param format {String} : The format using which the date will be formatted for display\n */\nDateTimeFormatter.formatAs = function (date, format) {\n const nDate = convertToNativeDate(date);\n const occurrence = DateTimeFormatter.findTokens(format);\n const definitions = DateTimeFormatter.getTokenDefinitions();\n let formattedStr = String(format);\n const tokenPrefix = DateTimeFormatter.TOKEN_PREFIX;\n let token;\n let formattedVal;\n let i;\n let l;\n\n for (i = 0, l = occurrence.length; i < l; i++) {\n token = occurrence[i].token;\n formattedVal = definitions[token].formatter(nDate);\n formattedStr = formattedStr.replace(new RegExp(tokenPrefix + token, 'g'), formattedVal);\n }\n\n return formattedStr;\n};\n\n/*\n * Parses the user specified date string to extract the date time params.\n *\n * @return {Array} : Value of date time params in an array [year, month, day, hour, minutes, seconds, milli]\n */\nDateTimeFormatter.prototype.parse = function (dateTimeStamp, options) {\n const tokenResolver = DateTimeFormatter.tokenResolver();\n const dtParams = this.extractTokenValue(dateTimeStamp);\n const dtParamSeq = DateTimeFormatter.DATETIME_PARAM_SEQUENCE;\n const noBreak = options && options.noBreak;\n const dtParamArr = [];\n const args = [];\n let resolverKey;\n let resolverParams;\n let resolverFn;\n let val;\n let i;\n let param;\n let resolvedVal;\n let l;\n let result = [];\n\n for (resolverKey in tokenResolver) {\n if (!{}.hasOwnProperty.call(tokenResolver, resolverKey)) { continue; }\n\n args.length = 0;\n resolverParams = tokenResolver[resolverKey];\n resolverFn = resolverParams.splice(resolverParams.length - 1, 1)[0];\n\n for (i = 0, l = resolverParams.length; i < l; i++) {\n param = resolverParams[i];\n val = dtParams[param.name];\n\n if (val === undefined) {\n args.push(null);\n } else {\n args.push([param, val]);\n }\n }\n\n resolvedVal = resolverFn.apply(this, args);\n\n if ((resolvedVal === undefined || resolvedVal === null) && !noBreak) {\n break;\n }\n\n dtParamArr[dtParamSeq[resolverKey]] = resolvedVal;\n }\n\n if (dtParamArr.length && this.checkIfOnlyYear(dtParamArr.length))\n {\n result.unshift(dtParamArr[0], 0, 1); }\n else {\n result.unshift(...dtParamArr);\n }\n\n return result;\n};\n\n/*\n * Extract the value of the token from user specified date time string.\n *\n * @return {Object} : An key value pair which contains the tokens as key and value as pair\n */\nDateTimeFormatter.prototype.extractTokenValue = function (dateTimeStamp) {\n const format = this.format;\n const definitions = DateTimeFormatter.getTokenDefinitions();\n const tokenPrefix = DateTimeFormatter.TOKEN_PREFIX;\n const occurrence = DateTimeFormatter.findTokens(format);\n const tokenObj = {};\n\n let lastOccurrenceIndex;\n let occObj;\n let occIndex;\n let targetText;\n let regexFormat;\n\n let l;\n let i;\n\n regexFormat = String(format);\n\n const tokenArr = occurrence.map(obj => obj.token);\n const occurrenceLength = occurrence.length;\n for (i = occurrenceLength - 1; i >= 0; i--) {\n occIndex = occurrence[i].index;\n\n if (occIndex + 1 === regexFormat.length - 1) {\n lastOccurrenceIndex = occIndex;\n continue;\n }\n\n if (lastOccurrenceIndex === undefined) {\n lastOccurrenceIndex = regexFormat.length;\n }\n\n targetText = regexFormat.substring(occIndex + 2, lastOccurrenceIndex);\n regexFormat = regexFormat.substring(0, occIndex + 2) +\n RegExp.escape(targetText) +\n regexFormat.substring(lastOccurrenceIndex, regexFormat.length);\n\n lastOccurrenceIndex = occIndex;\n }\n\n for (i = 0; i < occurrenceLength; i++) {\n occObj = occurrence[i];\n regexFormat = regexFormat.replace(tokenPrefix + occObj.token, definitions[occObj.token].extract());\n }\n\n const extractValues = dateTimeStamp.match(new RegExp(regexFormat)) || [];\n extractValues.shift();\n\n for (i = 0, l = tokenArr.length; i < l; i++) {\n tokenObj[tokenArr[i]] = extractValues[i];\n }\n return tokenObj;\n};\n\n/*\n * Give back the JS native date formed from user specified date string\n *\n * @return {Date} : Native JS Date\n */\nDateTimeFormatter.prototype.getNativeDate = function (dateTimeStamp) {\n let date = null;\n if (Number.isFinite(dateTimeStamp)) {\n date = new Date(dateTimeStamp);\n } else if (!this.format && Date.parse(dateTimeStamp)) {\n date = new Date(dateTimeStamp);\n }\n else {\n const dtParams = this.dtParams = this.parse(dateTimeStamp);\n if (dtParams.length) {\n this.nativeDate = new Date(...dtParams);\n date = this.nativeDate;\n }\n }\n return date;\n};\n\nDateTimeFormatter.prototype.checkIfOnlyYear = function(len) {\n return len === 1 && this.format.match(/y|Y/g).length;\n};\n\n/*\n * Represents JS native date to a user specified format.\n *\n * @param format {String} : The format according to which the date is to be represented\n * @return {String} : The formatted date string\n */\nDateTimeFormatter.prototype.formatAs = function (format, dateTimeStamp) {\n let nativeDate;\n\n if (dateTimeStamp) {\n nativeDate = this.nativeDate = this.getNativeDate(dateTimeStamp);\n } else if (!(nativeDate = this.nativeDate)) {\n nativeDate = this.getNativeDate(dateTimeStamp);\n }\n\n return DateTimeFormatter.formatAs(nativeDate, format);\n};\n\nexport { DateTimeFormatter as default };\n","/**\n * The utility function to calculate major column.\n *\n * @param {Object} store - The store object.\n * @return {Function} Returns the push function.\n */\nexport default (store) => {\n let i = 0;\n return (...fields) => {\n fields.forEach((val, fieldIndex) => {\n if (!(store[fieldIndex] instanceof Array)) {\n store[fieldIndex] = Array.from({ length: i });\n }\n store[fieldIndex].push(val);\n });\n i++;\n };\n};\n","/* eslint-disable */\nconst OBJECTSTRING = 'object';\nconst objectToStrFn = Object.prototype.toString;\nconst objectToStr = '[object Object]';\nconst arrayToStr = '[object Array]';\n\nfunction checkCyclicRef(obj, parentArr) {\n let i = parentArr.length;\n let bIndex = -1;\n\n while (i) {\n if (obj === parentArr[i]) {\n bIndex = i;\n return bIndex;\n }\n i -= 1;\n }\n\n return bIndex;\n}\n\nfunction merge(obj1, obj2, skipUndef, tgtArr, srcArr) {\n var item,\n srcVal,\n tgtVal,\n str,\n cRef;\n // check whether obj2 is an array\n // if array then iterate through it's index\n // **** MOOTOOLS precution\n\n if (!srcArr) {\n tgtArr = [obj1];\n srcArr = [obj2];\n }\n else {\n tgtArr.push(obj1);\n srcArr.push(obj2);\n }\n\n if (obj2 instanceof Array) {\n for (item = 0; item < obj2.length; item += 1) {\n try {\n srcVal = obj1[item];\n tgtVal = obj2[item];\n }\n catch (e) {\n continue;\n }\n\n if (typeof tgtVal !== OBJECTSTRING) {\n if (!(skipUndef && tgtVal === undefined)) {\n obj1[item] = tgtVal;\n }\n }\n else {\n if (srcVal === null || typeof srcVal !== OBJECTSTRING) {\n srcVal = obj1[item] = tgtVal instanceof Array ? [] : {};\n }\n cRef = checkCyclicRef(tgtVal, srcArr);\n if (cRef !== -1) {\n srcVal = obj1[item] = tgtArr[cRef];\n }\n else {\n merge(srcVal, tgtVal, skipUndef, tgtArr, srcArr);\n }\n }\n }\n }\n else {\n for (item in obj2) {\n try {\n srcVal = obj1[item];\n tgtVal = obj2[item];\n }\n catch (e) {\n continue;\n }\n\n if (tgtVal !== null && typeof tgtVal === OBJECTSTRING) {\n // Fix for issue BUG: FWXT-602\n // IE < 9 Object.prototype.toString.call(null) gives\n // '[object Object]' instead of '[object Null]'\n // that's why null value becomes Object in IE < 9\n str = objectToStrFn.call(tgtVal);\n if (str === objectToStr) {\n if (srcVal === null || typeof srcVal !== OBJECTSTRING) {\n srcVal = obj1[item] = {};\n }\n cRef = checkCyclicRef(tgtVal, srcArr);\n if (cRef !== -1) {\n srcVal = obj1[item] = tgtArr[cRef];\n }\n else {\n merge(srcVal, tgtVal, skipUndef, tgtArr, srcArr);\n }\n }\n else if (str === arrayToStr) {\n if (srcVal === null || !(srcVal instanceof Array)) {\n srcVal = obj1[item] = [];\n }\n cRef = checkCyclicRef(tgtVal, srcArr);\n if (cRef !== -1) {\n srcVal = obj1[item] = tgtArr[cRef];\n }\n else {\n merge(srcVal, tgtVal, skipUndef, tgtArr, srcArr);\n }\n }\n else {\n obj1[item] = tgtVal;\n }\n }\n else {\n if (skipUndef && tgtVal === undefined) {\n continue;\n }\n obj1[item] = tgtVal;\n }\n }\n }\n return obj1;\n}\n\n\nfunction extend2 (obj1, obj2, skipUndef) {\n //if none of the arguments are object then return back\n if (typeof obj1 !== OBJECTSTRING && typeof obj2 !== OBJECTSTRING) {\n return null;\n }\n\n if (typeof obj2 !== OBJECTSTRING || obj2 === null) {\n return obj1;\n }\n\n if (typeof obj1 !== OBJECTSTRING) {\n obj1 = obj2 instanceof Array ? [] : {};\n }\n merge(obj1, obj2, skipUndef);\n return obj1;\n}\n\nexport { extend2 as default };\n","import { DataFormat } from '../enums';\n\n/**\n * Checks whether the value is an array.\n *\n * @param {*} val - The value to be checked.\n * @return {boolean} Returns true if the value is an array otherwise returns false.\n */\nexport function isArray (val) {\n return Array.isArray(val);\n}\n\n/**\n * Checks whether the value is an object.\n *\n * @param {*} val - The value to be checked.\n * @return {boolean} Returns true if the value is an object otherwise returns false.\n */\nexport function isObject (val) {\n return val === Object(val);\n}\n\n/**\n * Checks whether the value is a string value.\n *\n * @param {*} val - The value to be checked.\n * @return {boolean} Returns true if the value is a string value otherwise returns false.\n */\nexport function isString (val) {\n return typeof val === 'string';\n}\n\n/**\n * Checks whether the value is callable.\n *\n * @param {*} val - The value to be checked.\n * @return {boolean} Returns true if the value is callable otherwise returns false.\n */\nexport function isCallable (val) {\n return typeof val === 'function';\n}\n\n/**\n * Returns the unique values from the input array.\n *\n * @param {Array} data - The input array.\n * @return {Array} Returns a new array of unique values.\n */\nexport function uniqueValues (data) {\n return [...new Set(data)];\n}\n\nexport const getUniqueId = () => `id-${new Date().getTime()}${Math.round(Math.random() * 10000)}`;\n\n/**\n * Checks Whether two arrays have same content.\n *\n * @param {Array} arr1 - The first array.\n * @param {Array} arr2 - The 2nd array.\n * @return {boolean} Returns whether two array have same content.\n */\nexport function isArrEqual(arr1, arr2) {\n if (!isArray(arr1) || !isArray(arr2)) {\n return arr1 === arr2;\n }\n\n if (arr1.length !== arr2.length) {\n return false;\n }\n\n for (let i = 0; i < arr1.length; i++) {\n if (arr1[i] !== arr2[i]) {\n return false;\n }\n }\n\n return true;\n}\n\n/**\n * It is the default number format function for the measure field type.\n *\n * @param {any} val - The input value.\n * @return {number} Returns a number value.\n */\nexport function formatNumber(val) {\n return val;\n}\n\n/**\n * Returns the detected data format.\n *\n * @param {any} data - The input data to be tested.\n * @return {string} Returns the data format name.\n */\nexport const detectDataFormat = (data) => {\n if (isString(data)) {\n return DataFormat.DSV_STR;\n } else if (isArray(data) && isArray(data[0])) {\n return DataFormat.DSV_ARR;\n } else if (isArray(data) && (data.length === 0 || isObject(data[0]))) {\n return DataFormat.FLAT_JSON;\n }\n return null;\n};\n","import { FieldType } from './enums';\nimport { getUniqueId } from './utils';\n\nconst fieldStore = {\n data: {},\n\n createNamespace (fieldArr, name) {\n const dataId = name || getUniqueId();\n\n this.data[dataId] = {\n name: dataId,\n fields: fieldArr,\n\n fieldsObj () {\n let fieldsObj = this._cachedFieldsObj;\n\n if (!fieldsObj) {\n fieldsObj = this._cachedFieldsObj = {};\n this.fields.forEach((field) => {\n fieldsObj[field.name()] = field;\n });\n }\n return fieldsObj;\n },\n getMeasure () {\n let measureFields = this._cachedMeasure;\n\n if (!measureFields) {\n measureFields = this._cachedMeasure = {};\n this.fields.forEach((field) => {\n if (field.schema().type === FieldType.MEASURE) {\n measureFields[field.name()] = field;\n }\n });\n }\n return measureFields;\n },\n getDimension () {\n let dimensionFields = this._cachedDimension;\n\n if (!this._cachedDimension) {\n dimensionFields = this._cachedDimension = {};\n this.fields.forEach((field) => {\n if (field.schema().type === FieldType.DIMENSION) {\n dimensionFields[field.name()] = field;\n }\n });\n }\n return dimensionFields;\n },\n };\n return this.data[dataId];\n },\n};\n\nexport default fieldStore;\n","/**\n * The wrapper class on top of the primitive value of a field.\n *\n * @todo Need to have support for StringValue, NumberValue, DateTimeValue\n * and GeoValue. These types should expose predicate API mostly.\n */\nclass Value {\n\n /**\n * Creates new Value instance.\n *\n * @param {*} val - the primitive value from the field cell.\n * @param {string | Field} field - The field from which the value belongs.\n */\n constructor (val, field) {\n Object.defineProperty(this, '_value', {\n enumerable: false,\n configurable: false,\n writable: false,\n value: val\n });\n\n this.field = field;\n }\n\n /**\n * Returns the field value.\n *\n * @return {*} Returns the current value.\n */\n get value () {\n return this._value;\n }\n\n /**\n * Converts to human readable string.\n *\n * @override\n * @return {string} Returns a human readable string of the field value.\n *\n */\n toString () {\n return String(this.value);\n }\n\n /**\n * Returns the value of the field.\n *\n * @override\n * @return {*} Returns the field value.\n */\n valueOf () {\n return this.value;\n }\n}\n\nexport default Value;\n","/**\n * Iterates through the diffSet array and call the callback with the current\n * index.\n *\n * @param {string} rowDiffset - The row diffset string e.g. '0-4,6,10-13'.\n * @param {Function} callback - The callback function to be called with every index.\n */\nexport function rowDiffsetIterator (rowDiffset, callback) {\n if (rowDiffset.length > 0) {\n const rowDiffArr = rowDiffset.split(',');\n rowDiffArr.forEach((diffStr) => {\n const diffStsArr = diffStr.split('-');\n const start = +(diffStsArr[0]);\n const end = +(diffStsArr[1] || diffStsArr[0]);\n if (end >= start) {\n for (let i = start; i <= end; i += 1) {\n callback(i);\n }\n }\n });\n }\n}\n","/**\n * A parser to parser null, undefined, invalid and NIL values.\n *\n * @public\n * @class\n */\nclass InvalidAwareTypes {\n /**\n * Static method which gets/sets the invalid value registry.\n *\n * @public\n * @param {Object} config - The custom configuration supplied by user.\n * @return {Object} Returns the invalid values registry.\n */\n static invalidAwareVals (config) {\n if (!config) {\n return InvalidAwareTypes._invalidAwareValsMap;\n }\n return Object.assign(InvalidAwareTypes._invalidAwareValsMap, config);\n }\n\n /**\n * Initialize a new instance.\n *\n * @public\n * @param {string} value - The value of the invalid data type.\n */\n constructor (value) {\n this._value = value;\n }\n\n /**\n * Returns the current value of the instance.\n *\n * @public\n * @return {string} Returns the value of the invalid data type.\n */\n value () {\n return this._value;\n }\n\n /**\n * Returns the current value of the instance in string format.\n *\n * @public\n * @return {string} Returns the value of the invalid data type.\n */\n toString () {\n return String(this._value);\n }\n\n static isInvalid(val) {\n return (val instanceof InvalidAwareTypes) || !!InvalidAwareTypes.invalidAwareVals()[val];\n }\n\n static getInvalidType(val) {\n return val instanceof InvalidAwareTypes ? val : InvalidAwareTypes.invalidAwareVals()[val];\n }\n}\n\n/**\n * Enums for Invalid types.\n */\nInvalidAwareTypes.NULL = new InvalidAwareTypes('null');\nInvalidAwareTypes.NA = new InvalidAwareTypes('na');\nInvalidAwareTypes.NIL = new InvalidAwareTypes('nil');\n\n/**\n * Default Registry for mapping the invalid values.\n *\n * @private\n */\nInvalidAwareTypes._invalidAwareValsMap = {\n invalid: InvalidAwareTypes.NA,\n nil: InvalidAwareTypes.NIL,\n null: InvalidAwareTypes.NULL,\n undefined: InvalidAwareTypes.NA\n};\n\nexport default InvalidAwareTypes;\n","import { persistDerivations } from '../helper';\nimport { DM_DERIVATIVES } from '../constants';\n\n/**\n * DataModel's opearators are exposed as composable functional operators as well as chainable operators. Chainable\n * operators are called on the instances of {@link Datamodel} and {@link Relation} class.\n *\n * Those same operators can be used as composable operators from `DataModel.Operators` namespace.\n *\n * All these operators have similar behaviour. All these operators when called with the argument returns a function\n * which expects a DataModel instance.\n *\n * @public\n * @module Operators\n * @namespace DataModel\n */\n\n/**\n * This is functional version of selection operator. {@link link_to_selection | Selection} is a row filtering operation.\n * It takes {@link SelectionPredicate | predicate} for filtering criteria and returns a function.\n * The returned function is called with the DataModel instance on which the action needs to be performed.\n *\n * {@link SelectionPredicate} is a function which returns a boolean value. For selection opearation the selection\n * function is called for each row of DataModel instance with the current row passed as argument.\n *\n * After executing {@link SelectionPredicate} the rows are labeled as either an entry of selection set or an entry\n * of rejection set.\n *\n * {@link FilteringMode} operates on the selection and rejection set to determine which one would reflect in the\n * resulatant datamodel.\n *\n * @warning\n * [Warn] Selection and rejection set is only a logical idea for concept explanation purpose.\n *\n * @error\n * [Error] `FilteringMode.ALL` is not a valid working mode for functional version of `select`. Its only avialable on the\n * chained version.\n *\n * @example\n * const select = DataModel.Operators.select;\n * usaCarsFn = select(fields => fields.Origin.value === 'USA');\n * usaCarsDm = usaCarsFn(dm);\n * console.log(usaCarsDm);\n *\n * @public\n * @namespace DataModel\n * @module Operators\n *\n * @param {SelectionPredicate} selectFn - Predicate funciton which is called for each row with the current row\n * ```\n * function (row, i) { ... }\n * ```\n * @param {Object} [config] - The configuration object to control the inclusion exclusion of a row in resultant\n * DataModel instance\n * @param {FilteringMode} [config.mode=FilteringMode.NORMAL] - The mode of the selection\n *\n * @return {PreparatorFunction} Function which expects an instance of DataModel on which the operator needs to be\n * applied.\n */\nexport const select = (...args) => dm => dm.select(...args);\n\n/**\n * This is functional version of projection operator. {@link link_to_projection | Projection} is a column filtering\n * operation.It expects list of fields name and either include those or exclude those based on {@link FilteringMode} on\n * the resultant variable.It returns a function which is called with the DataModel instance on which the action needs\n * to be performed.\n *\n * Projection expects array of fields name based on which it creates the selection and rejection set. All the field\n * whose name is present in array goes in selection set and rest of the fields goes in rejection set.\n *\n * {@link FilteringMode} operates on the selection and rejection set to determine which one would reflect in the\n * resulatant datamodel.\n *\n * @warning\n * Selection and rejection set is only a logical idea for concept explanation purpose.\n *\n * @error\n * `FilteringMode.ALL` is not a valid working mode for functional version of `select`. Its only avialable on the\n * chained version.\n *\n * @public\n * @namespace DataModel\n * @module Operators\n *\n * @param {Array.} projField - An array of column names in string or regular expression.\n * @param {Object} [config] - An optional config to control the creation of new DataModel\n * @param {FilteringMode} [config.mode=FilteringMode.NORMAL] - Mode of the projection\n *\n * @return {PreparatorFunction} Function which expects an instance of DataModel on which the operator needs to be\n * applied.\n */\nexport const project = (...args) => dm => dm.project(...args);\n\n/**\n * This is functional version of binnig operator. Binning happens on a measure field based on a binning configuration.\n * Binning in DataModel does not aggregate the number of rows present in DataModel instance after binning, it just adds\n * a new field with the binned value. Refer binning {@link example_of_binning | example} to have a intuition of what\n * binning is and the use case.\n *\n * Binning can be configured by\n * - providing custom bin configuration with non uniform buckets\n * - providing bin count\n * - providing each bin size\n *\n * When custom buckets are provided as part of binning configuration\n * @example\n * // DataModel already prepared and assigned to dm vairable\n * const buckets = {\n * start: 30\n * stops: [80, 100, 110]\n * };\n * const config = { buckets, name: 'binnedHP' }\n * const binFn = bin('horsepower', config);\n * const binnedDm = binFn(dm);\n *\n * @text\n * When `binCount` is defined as part of binning configuration\n * @example\n * // DataModel already prepared and assigned to dm vairable\n * const config = { binCount: 5, name: 'binnedHP' }\n * const binFn = bin('horsepower', config);\n * const binnedDm = binFn(Dm);\n *\n * @text\n * When `binSize` is defined as part of binning configuration\n * @example\n * // DataModel already prepared and assigned to dm vairable\n * const config = { binSize: 200, name: 'binnedHorsepower' }\n * const binnedDm = dataModel.bin('horsepower', config);\n * const binnedDm = binFn(Dm);\n *\n * @public\n * @namespace DataModel\n * @module Operators\n *\n * @param {String} name Name of measure which will be used to create bin\n * @param {Object} config Config required for bin creation\n * @param {Array.} config.bucketObj.stops Defination of bucket ranges. Two subsequent number from arrays\n * are picked and a range is created. The first number from range is inclusive and the second number from range\n * is exclusive.\n * @param {Number} [config.bucketObj.startAt] Force the start of the bin from a particular number.\n * If not mentioned, the start of the bin or the lower domain of the data if stops is not mentioned, else its\n * the first value of the stop.\n * @param {Number} config.binSize Bucket size for each bin\n * @param {Number} config.binCount Number of bins which will be created\n * @param {String} config.name Name of the new binned field to be created\n *\n * @return {PreparatorFunction} Function which expects an instance of DataModel on which the operator needs to be\n * applied.\n */\nexport const bin = (...args) => dm => dm.bin(...args);\n\n/**\n * This is functional version of `groupBy` operator.Groups the data using particular dimensions and by reducing\n * measures. It expects a list of dimensions using which it projects the datamodel and perform aggregations to reduce\n * the duplicate tuples. Refer this {@link link_to_one_example_with_group_by | document} to know the intuition behind\n * groupBy.\n *\n * DataModel by default provides definition of few {@link reducer | Reducers}.\n * {@link ReducerStore | User defined reducers} can also be registered.\n *\n * This is the chained implementation of `groupBy`.\n * `groupBy` also supports {@link link_to_compose_groupBy | composability}\n *\n * @example\n * const groupBy = DataModel.Operators.groupBy;\n * const groupedFn = groupBy(['Year'], { horsepower: 'max' } );\n * groupedDM = groupByFn(dm);\n *\n * @public\n *\n * @param {Array.} fieldsArr - Array containing the name of dimensions\n * @param {Object} [reducers={}] - A map whose key is the variable name and value is the name of the reducer. If its\n * not passed, or any variable is ommitted from the object, default aggregation function is used from the\n * schema of the variable.\n *\n * @return {PreparatorFunction} Function which expects an instance of DataModel on which the operator needs to be\n * applied.\n */\nexport const groupBy = (...args) => dm => dm.groupBy(...args);\n\n/**\n * Enables composing operators to run multiple operations and save group of operataion as named opration on a DataModel.\n * The resulting DataModel will be the result of all the operation provided. The operations provided will be executed in\n * a serial manner ie. result of one operation will be the input for the next operations (like pipe operator in unix).\n *\n * Suported operations in compose are\n * - `select`\n * - `project`\n * - `groupBy`\n * - `bin`\n * - `compose`\n *\n * @example\n * const compose = DataModel.Operators.compose;\n * const select = DataModel.Operators.select;\n * const project = DataModel.Operators.project;\n *\n * let composedFn = compose(\n * select(fields => fields.netprofit.value <= 15),\n * project(['netprofit', 'netsales']));\n *\n * const dataModel = new DataModel(data1, schema1);\n *\n * let composedDm = composedFn(dataModel);\n *\n * @public\n * @namespace DataModel\n * @module Operators\n *\n * @param {Array.} operators: An array of operation that will be applied on the\n * datatable.\n *\n * @returns {DataModel} Instance of resultant DataModel\n */\nexport const compose = (...operations) =>\n (dm, config = { saveChild: true }) => {\n let currentDM = dm;\n let firstChild;\n const derivations = [];\n\n operations.forEach((operation) => {\n currentDM = operation(currentDM);\n derivations.push(...currentDM._derivation);\n if (!firstChild) {\n firstChild = currentDM;\n }\n });\n\n if (firstChild && firstChild !== currentDM) {\n firstChild.dispose();\n }\n\n // reset all ancestorDerivation saved in-between compose\n currentDM._ancestorDerivation = [];\n persistDerivations(\n dm,\n currentDM,\n DM_DERIVATIVES.COMPOSE,\n null,\n derivations\n );\n\n if (config.saveChild) {\n currentDM.setParent(dm);\n } else {\n currentDM.setParent(null);\n }\n\n return currentDM;\n };\n","export { DataFormat, FilteringMode } from '../enums';\n/**\n * The event name for data propagation.\n */\nexport const PROPAGATION = 'propagation';\n\n/**\n * The name of the unique row id column in DataModel.\n */\nexport const ROW_ID = '__id__';\n\n/**\n * The enums for operation names performed on DataModel.\n */\nexport const DM_DERIVATIVES = {\n SELECT: 'select',\n PROJECT: 'project',\n GROUPBY: 'group',\n COMPOSE: 'compose',\n CAL_VAR: 'calculatedVariable',\n BIN: 'bin',\n SORT: 'sort'\n};\n\nexport const JOINS = {\n CROSS: 'cross',\n LEFTOUTER: 'leftOuter',\n RIGHTOUTER: 'rightOuter',\n NATURAL: 'natural',\n FULLOUTER: 'fullOuter'\n};\n\nexport const LOGICAL_OPERATORS = {\n AND: 'and',\n OR: 'or'\n};\n","/**\n * The helper function that returns an array of common schema\n * from two fieldStore instances.\n *\n * @param {FieldStore} fs1 - The first FieldStore instance.\n * @param {FieldStore} fs2 - The second FieldStore instance.\n * @return {Array} An array containing the common schema.\n */\nexport function getCommonSchema (fs1, fs2) {\n const retArr = [];\n const fs1Arr = [];\n fs1.fields.forEach((field) => {\n fs1Arr.push(field.schema().name);\n });\n fs2.fields.forEach((field) => {\n if (fs1Arr.indexOf(field.schema().name) !== -1) {\n retArr.push(field.schema().name);\n }\n });\n return retArr;\n}\n","import DataModel from '../datamodel';\nimport { extend2 } from '../utils';\nimport { getCommonSchema } from './get-common-schema';\nimport { rowDiffsetIterator } from './row-diffset-iterator';\nimport { JOINS } from '../constants';\nimport { prepareJoinData } from '../helper';\n/**\n * Default filter function for crossProduct.\n *\n * @return {boolean} Always returns true.\n */\nfunction defaultFilterFn() { return true; }\n\n/**\n * Implementation of cross product operation between two DataModel instances.\n * It internally creates the data and schema for the new DataModel.\n *\n * @param {DataModel} dataModel1 - The left DataModel instance.\n * @param {DataModel} dataModel2 - The right DataModel instance.\n * @param {Function} filterFn - The filter function which is used to filter the tuples.\n * @param {boolean} [replaceCommonSchema=false] - The flag if the common name schema should be there.\n * @return {DataModel} Returns The newly created DataModel instance from the crossProduct operation.\n */\nexport function crossProduct (dm1, dm2, filterFn, replaceCommonSchema = false, jointype = JOINS.CROSS) {\n const schema = [];\n const data = [];\n const applicableFilterFn = filterFn || defaultFilterFn;\n const dm1FieldStore = dm1.getFieldspace();\n const dm2FieldStore = dm2.getFieldspace();\n const dm1FieldStoreName = dm1FieldStore.name;\n const dm2FieldStoreName = dm2FieldStore.name;\n const name = `${dm1FieldStore.name}.${dm2FieldStore.name}`;\n const commonSchemaList = getCommonSchema(dm1FieldStore, dm2FieldStore);\n\n if (dm1FieldStoreName === dm2FieldStoreName) {\n throw new Error('DataModels must have different alias names');\n }\n // Here prepare the schema\n dm1FieldStore.fields.forEach((field) => {\n const tmpSchema = extend2({}, field.schema());\n if (commonSchemaList.indexOf(tmpSchema.name) !== -1 && !replaceCommonSchema) {\n tmpSchema.name = `${dm1FieldStore.name}.${tmpSchema.name}`;\n }\n schema.push(tmpSchema);\n });\n dm2FieldStore.fields.forEach((field) => {\n const tmpSchema = extend2({}, field.schema());\n if (commonSchemaList.indexOf(tmpSchema.name) !== -1) {\n if (!replaceCommonSchema) {\n tmpSchema.name = `${dm2FieldStore.name}.${tmpSchema.name}`;\n schema.push(tmpSchema);\n }\n } else {\n schema.push(tmpSchema);\n }\n });\n\n // Here prepare Data\n rowDiffsetIterator(dm1._rowDiffset, (i) => {\n let rowAdded = false;\n let rowPosition;\n rowDiffsetIterator(dm2._rowDiffset, (ii) => {\n const tuple = [];\n const userArg = {};\n userArg[dm1FieldStoreName] = {};\n userArg[dm2FieldStoreName] = {};\n dm1FieldStore.fields.forEach((field) => {\n tuple.push(field.partialField.data[i]);\n userArg[dm1FieldStoreName][field.name()] = field.partialField.data[i];\n });\n dm2FieldStore.fields.forEach((field) => {\n if (!(commonSchemaList.indexOf(field.schema().name) !== -1 && replaceCommonSchema)) {\n tuple.push(field.partialField.data[ii]);\n }\n userArg[dm2FieldStoreName][field.name()] = field.partialField.data[ii];\n });\n\n let cachedStore = {};\n let cloneProvider1 = () => dm1.detachedRoot();\n let cloneProvider2 = () => dm2.detachedRoot();\n\n const dm1Fields = prepareJoinData(userArg[dm1FieldStoreName]);\n const dm2Fields = prepareJoinData(userArg[dm2FieldStoreName]);\n if (applicableFilterFn(dm1Fields, dm2Fields, cloneProvider1, cloneProvider2, cachedStore)) {\n const tupleObj = {};\n tuple.forEach((cellVal, iii) => {\n tupleObj[schema[iii].name] = cellVal;\n });\n if (rowAdded && JOINS.CROSS !== jointype) {\n data[rowPosition] = tupleObj;\n }\n else {\n data.push(tupleObj);\n rowAdded = true;\n rowPosition = i;\n }\n } else if ((jointype === JOINS.LEFTOUTER || jointype === JOINS.RIGHTOUTER) && !rowAdded) {\n const tupleObj = {};\n let len = dm1FieldStore.fields.length - 1;\n tuple.forEach((cellVal, iii) => {\n if (iii <= len) {\n tupleObj[schema[iii].name] = cellVal;\n }\n else {\n tupleObj[schema[iii].name] = null;\n }\n });\n rowAdded = true;\n rowPosition = i;\n data.push(tupleObj);\n }\n });\n });\n\n return new DataModel(data, schema, { name });\n}\n","/**\n * The default sort function.\n *\n * @param {*} a - The first value.\n * @param {*} b - The second value.\n * @return {number} Returns the comparison result e.g. 1 or 0 or -1.\n */\nfunction defSortFn (a, b) {\n const a1 = `${a}`;\n const b1 = `${b}`;\n if (a1 < b1) {\n return -1;\n }\n if (a1 > b1) {\n return 1;\n }\n return 0;\n}\n\n/**\n * The helper function for merge sort which creates the sorted array\n * from the two halves of the input array.\n *\n * @param {Array} arr - The target array which needs to be merged.\n * @param {number} lo - The starting index of the first array half.\n * @param {number} mid - The ending index of the first array half.\n * @param {number} hi - The ending index of the second array half.\n * @param {Function} sortFn - The sort function.\n */\nfunction merge (arr, lo, mid, hi, sortFn) {\n const mainArr = arr;\n const auxArr = [];\n for (let i = lo; i <= hi; i += 1) {\n auxArr[i] = mainArr[i];\n }\n let a = lo;\n let b = mid + 1;\n\n for (let i = lo; i <= hi; i += 1) {\n if (a > mid) {\n mainArr[i] = auxArr[b];\n b += 1;\n } else if (b > hi) {\n mainArr[i] = auxArr[a];\n a += 1;\n } else if (sortFn(auxArr[a], auxArr[b]) <= 0) {\n mainArr[i] = auxArr[a];\n a += 1;\n } else {\n mainArr[i] = auxArr[b];\n b += 1;\n }\n }\n}\n\n/**\n * The helper function for merge sort which would be called\n * recursively for sorting the array halves.\n *\n * @param {Array} arr - The target array which needs to be sorted.\n * @param {number} lo - The starting index of the array half.\n * @param {number} hi - The ending index of the array half.\n * @param {Function} sortFn - The sort function.\n * @return {Array} Returns the target array itself.\n */\nfunction sort (arr, lo, hi, sortFn) {\n if (hi === lo) { return arr; }\n\n const mid = lo + Math.floor((hi - lo) / 2);\n sort(arr, lo, mid, sortFn);\n sort(arr, mid + 1, hi, sortFn);\n merge(arr, lo, mid, hi, sortFn);\n\n return arr;\n}\n\n/**\n * The implementation of merge sort.\n * It is used in DataModel for stable sorting as it is not sure\n * what the sorting algorithm used by browsers is stable or not.\n *\n * @param {Array} arr - The target array which needs to be sorted.\n * @param {Function} [sortFn=defSortFn] - The sort function.\n * @return {Array} Returns the input array itself in sorted order.\n */\nexport function mergeSort (arr, sortFn = defSortFn) {\n if (arr.length > 1) {\n sort(arr, 0, arr.length - 1, sortFn);\n }\n return arr;\n}\n","import { DimensionSubtype, MeasureSubtype } from '../enums';\nimport { rowDiffsetIterator } from './row-diffset-iterator';\nimport { mergeSort } from './merge-sort';\nimport { fieldInSchema } from '../helper';\nimport { isCallable, isArray, } from '../utils';\n/**\n * Generates the sorting functions to sort the data of a DataModel instance\n * according to the input data type.\n *\n * @param {string} dataType - The data type e.g. 'measure', 'datetime' etc.\n * @param {string} sortType - The sorting order i.e. 'asc' or 'desc'.\n * @param {integer} index - The index of the data which will be sorted.\n * @return {Function} Returns the the sorting function.\n */\nfunction getSortFn (dataType, sortType, index) {\n let retFunc;\n switch (dataType) {\n case MeasureSubtype.CONTINUOUS:\n case DimensionSubtype.TEMPORAL:\n if (sortType === 'desc') {\n retFunc = (a, b) => b[index] - a[index];\n } else {\n retFunc = (a, b) => a[index] - b[index];\n }\n break;\n default:\n retFunc = (a, b) => {\n const a1 = `${a[index]}`;\n const b1 = `${b[index]}`;\n if (a1 < b1) {\n return sortType === 'desc' ? 1 : -1;\n }\n if (a1 > b1) {\n return sortType === 'desc' ? -1 : 1;\n }\n return 0;\n };\n }\n return retFunc;\n}\n\n/**\n * Groups the data according to the specified target field.\n *\n * @param {Array} data - The input data array.\n * @param {number} fieldIndex - The target field index within schema array.\n * @return {Array} Returns an array containing the grouped data.\n */\nfunction groupData(data, fieldIndex) {\n const hashMap = new Map();\n const groupedData = [];\n\n data.forEach((datum) => {\n const fieldVal = datum[fieldIndex];\n if (hashMap.has(fieldVal)) {\n groupedData[hashMap.get(fieldVal)][1].push(datum);\n } else {\n groupedData.push([fieldVal, [datum]]);\n hashMap.set(fieldVal, groupedData.length - 1);\n }\n });\n\n return groupedData;\n}\n\n/**\n * Creates the argument value used for sorting function when sort is done\n * with another fields.\n *\n * @param {Array} groupedDatum - The grouped datum for a single dimension field value.\n * @param {Array} targetFields - An array of the sorting fields.\n * @param {Array} targetFieldDetails - An array of the sorting field details in schema.\n * @return {Object} Returns an object containing the value of sorting fields and the target field name.\n */\nfunction createSortingFnArg(groupedDatum, targetFields, targetFieldDetails) {\n const arg = {\n label: groupedDatum[0]\n };\n\n targetFields.reduce((acc, next, idx) => {\n acc[next] = groupedDatum[1].map(datum => datum[targetFieldDetails[idx].index]);\n return acc;\n }, arg);\n\n return arg;\n}\n\n/**\n * Sorts the data before return in dataBuilder.\n *\n * @param {Object} dataObj - An object containing the data and schema.\n * @param {Array} sortingDetails - An array containing the sorting configs.\n */\nfunction sortData(dataObj, sortingDetails) {\n const { data, schema } = dataObj;\n let fieldName;\n let sortMeta;\n let fDetails;\n let i = sortingDetails.length - 1;\n\n for (; i >= 0; i--) {\n fieldName = sortingDetails[i][0];\n sortMeta = sortingDetails[i][1];\n fDetails = fieldInSchema(schema, fieldName);\n\n if (!fDetails) {\n // eslint-disable-next-line no-continue\n continue;\n }\n\n if (isCallable(sortMeta)) {\n // eslint-disable-next-line no-loop-func\n mergeSort(data, (a, b) => sortMeta(a[fDetails.index], b[fDetails.index]));\n } else if (isArray(sortMeta)) {\n const groupedData = groupData(data, fDetails.index);\n const sortingFn = sortMeta[sortMeta.length - 1];\n const targetFields = sortMeta.slice(0, sortMeta.length - 1);\n const targetFieldDetails = targetFields.map(f => fieldInSchema(schema, f));\n\n groupedData.forEach((groupedDatum) => {\n groupedDatum.push(createSortingFnArg(groupedDatum, targetFields, targetFieldDetails));\n });\n\n mergeSort(groupedData, (a, b) => {\n const m = a[2];\n const n = b[2];\n return sortingFn(m, n);\n });\n\n // Empty the array\n data.length = 0;\n groupedData.forEach((datum) => {\n data.push(...datum[1]);\n });\n } else {\n sortMeta = String(sortMeta).toLowerCase() === 'desc' ? 'desc' : 'asc';\n mergeSort(data, getSortFn(fDetails.type, sortMeta, fDetails.index));\n }\n }\n\n dataObj.uids = [];\n data.forEach((value) => {\n dataObj.uids.push(value.pop());\n });\n}\n\n\n/**\n * Builds the actual data array.\n *\n * @param {Array} fieldStore - An array of field.\n * @param {string} rowDiffset - A string consisting of which rows to be included eg. '0-2,4,6';\n * @param {string} colIdentifier - A string consisting of the details of which column\n * to be included eg 'date,sales,profit';\n * @param {Object} sortingDetails - An object containing the sorting details of the DataModel instance.\n * @param {Object} options - The options required to create the type of the data.\n * @return {Object} Returns an object containing the multidimensional array and the relative schema.\n */\nexport function dataBuilder (fieldStore, rowDiffset, colIdentifier, sortingDetails, options) {\n const defOptions = {\n addUid: false,\n columnWise: false\n };\n options = Object.assign({}, defOptions, options);\n\n const retObj = {\n schema: [],\n data: [],\n uids: []\n };\n const addUid = options.addUid;\n const reqSorting = sortingDetails && sortingDetails.length > 0;\n // It stores the fields according to the colIdentifier argument\n const tmpDataArr = [];\n // Stores the fields according to the colIdentifier argument\n const colIArr = colIdentifier.split(',');\n\n colIArr.forEach((colName) => {\n for (let i = 0; i < fieldStore.length; i += 1) {\n if (fieldStore[i].name() === colName) {\n tmpDataArr.push(fieldStore[i]);\n break;\n }\n }\n });\n\n // Inserts the schema to the schema object\n tmpDataArr.forEach((field) => {\n /** @todo Need to use extend2 here otherwise user can overwrite the schema. */\n retObj.schema.push(field.schema());\n });\n\n if (addUid) {\n retObj.schema.push({\n name: 'uid',\n type: 'identifier'\n });\n }\n\n rowDiffsetIterator(rowDiffset, (i) => {\n retObj.data.push([]);\n const insertInd = retObj.data.length - 1;\n let start = 0;\n tmpDataArr.forEach((field, ii) => {\n retObj.data[insertInd][ii + start] = field.partialField.data[i];\n });\n if (addUid) {\n retObj.data[insertInd][tmpDataArr.length] = i;\n }\n // Creates an array of unique identifiers for each row\n retObj.uids.push(i);\n\n // If sorting needed then there is the need to expose the index\n // mapping from the old index to its new index\n if (reqSorting) { retObj.data[insertInd].push(i); }\n });\n\n // Handles the sort functionality\n if (reqSorting) {\n sortData(retObj, sortingDetails);\n }\n\n if (options.columnWise) {\n const tmpData = Array(...Array(retObj.schema.length)).map(() => []);\n retObj.data.forEach((tuple) => {\n tuple.forEach((data, i) => {\n tmpData[i].push(data);\n });\n });\n retObj.data = tmpData;\n }\n\n return retObj;\n}\n","import DataModel from '../datamodel';\nimport { extend2 } from '../utils';\nimport { rowDiffsetIterator } from './row-diffset-iterator';\nimport { isArrEqual } from '../utils/helper';\n\n/**\n * Performs the union operation between two dm instances.\n *\n * @todo Fix the conflicts between union and difference terminology here.\n *\n * @param {dm} dm1 - The first dm instance.\n * @param {dm} dm2 - The second dm instance.\n * @return {dm} Returns the newly created dm after union operation.\n */\nexport function difference (dm1, dm2) {\n const hashTable = {};\n const schema = [];\n const schemaNameArr = [];\n const data = [];\n const dm1FieldStore = dm1.getFieldspace();\n const dm2FieldStore = dm2.getFieldspace();\n const dm1FieldStoreFieldObj = dm1FieldStore.fieldsObj();\n const dm2FieldStoreFieldObj = dm2FieldStore.fieldsObj();\n const name = `${dm1FieldStore.name} union ${dm2FieldStore.name}`;\n\n // For union the columns should match otherwise return a clone of the dm1\n if (!isArrEqual(dm1._colIdentifier.split(',').sort(), dm2._colIdentifier.split(',').sort())) {\n return null;\n }\n\n // Prepare the schema\n (dm1._colIdentifier.split(',')).forEach((fieldName) => {\n const field = dm1FieldStoreFieldObj[fieldName];\n schema.push(extend2({}, field.schema()));\n schemaNameArr.push(field.schema().name);\n });\n\n /**\n * The helper function to create the data.\n *\n * @param {dm} dm - The dm instance for which the data is inserted.\n * @param {Object} fieldsObj - The fieldStore object format.\n * @param {boolean} addData - If true only tuple will be added to the data.\n */\n function prepareDataHelper(dm, fieldsObj, addData) {\n rowDiffsetIterator(dm._rowDiffset, (i) => {\n const tuple = {};\n let hashData = '';\n schemaNameArr.forEach((schemaName) => {\n const value = fieldsObj[schemaName].partialField.data[i];\n hashData += `-${value}`;\n tuple[schemaName] = value;\n });\n if (!hashTable[hashData]) {\n if (addData) { data.push(tuple); }\n hashTable[hashData] = true;\n }\n });\n }\n\n // Prepare the data\n prepareDataHelper(dm2, dm2FieldStoreFieldObj, false);\n prepareDataHelper(dm1, dm1FieldStoreFieldObj, true);\n\n return new DataModel(data, schema, { name });\n}\n\n","import { isArray } from '../utils';\nimport InvalidAwareTypes from '../invalid-aware-types';\nimport { GROUP_BY_FUNCTIONS } from '../enums';\n\nconst { SUM, AVG, FIRST, LAST, COUNT, STD, MIN, MAX } = GROUP_BY_FUNCTIONS;\n\nfunction getFilteredValues(arr) {\n return arr.filter(item => !(item instanceof InvalidAwareTypes));\n}\n/**\n * Reducer function that returns the sum of all the values.\n *\n * @public\n * @param {Array.} arr - The input array.\n * @return {number} Returns the sum of the array.\n */\nfunction sum (arr) {\n if (isArray(arr) && !(arr[0] instanceof Array)) {\n const filteredNumber = getFilteredValues(arr);\n const totalSum = filteredNumber.length ?\n filteredNumber.reduce((acc, curr) => acc + curr, 0)\n : InvalidAwareTypes.NULL;\n return totalSum;\n }\n return InvalidAwareTypes.NULL;\n}\n\n/**\n * Reducer function that returns the average of all the values.\n *\n * @public\n * @param {Array.} arr - The input array.\n * @return {number} Returns the mean value of the array.\n */\nfunction avg (arr) {\n if (isArray(arr) && !(arr[0] instanceof Array)) {\n const totalSum = sum(arr);\n const len = arr.length || 1;\n return (Number.isNaN(totalSum) || totalSum instanceof InvalidAwareTypes) ?\n InvalidAwareTypes.NULL : totalSum / len;\n }\n return InvalidAwareTypes.NULL;\n}\n\n/**\n * Reducer function that gives the min value amongst all the values.\n *\n * @public\n * @param {Array.} arr - The input array.\n * @return {number} Returns the minimum value of the array.\n */\nfunction min (arr) {\n if (isArray(arr) && !(arr[0] instanceof Array)) {\n // Filter out undefined, null and NaN values\n const filteredValues = getFilteredValues(arr);\n\n return (filteredValues.length) ? Math.min(...filteredValues) : InvalidAwareTypes.NULL;\n }\n return InvalidAwareTypes.NULL;\n}\n\n/**\n * Reducer function that gives the max value amongst all the values.\n *\n * @public\n * @param {Array.} arr - The input array.\n * @return {number} Returns the maximum value of the array.\n */\nfunction max (arr) {\n if (isArray(arr) && !(arr[0] instanceof Array)) {\n // Filter out undefined, null and NaN values\n const filteredValues = getFilteredValues(arr);\n\n return (filteredValues.length) ? Math.max(...filteredValues) : InvalidAwareTypes.NULL;\n }\n return InvalidAwareTypes.NULL;\n}\n\n/**\n * Reducer function that gives the first value of the array.\n *\n * @public\n * @param {Array} arr - The input array.\n * @return {number} Returns the first value of the array.\n */\nfunction first (arr) {\n return arr[0];\n}\n\n/**\n * Reducer function that gives the last value of the array.\n *\n * @public\n * @param {Array} arr - The input array.\n * @return {number} Returns the last value of the array.\n */\nfunction last (arr) {\n return arr[arr.length - 1];\n}\n\n/**\n * Reducer function that gives the count value of the array.\n *\n * @public\n * @param {Array} arr - The input array.\n * @return {number} Returns the length of the array.\n */\nfunction count (arr) {\n if (isArray(arr)) {\n return arr.length;\n }\n return InvalidAwareTypes.NULL;\n}\n\n/**\n * Calculates the variance of the input array.\n *\n * @param {Array.} arr - The input array.\n * @return {number} Returns the variance of the input array.\n */\nfunction variance (arr) {\n let mean = avg(arr);\n return avg(arr.map(num => (num - mean) ** 2));\n}\n\n/**\n * Calculates the square root of the variance of the input array.\n *\n * @public\n * @param {Array.} arr - The input array.\n * @return {number} Returns the square root of the variance.\n */\nfunction std (arr) {\n return Math.sqrt(variance(arr));\n}\n\n\nconst fnList = {\n [SUM]: sum,\n [AVG]: avg,\n [MIN]: min,\n [MAX]: max,\n [FIRST]: first,\n [LAST]: last,\n [COUNT]: count,\n [STD]: std\n};\n\nconst defaultReducerName = SUM;\n\nexport {\n defaultReducerName,\n sum as defReducer,\n fnList,\n};\n","import { defReducer, fnList } from '../operator';\n\n/**\n * A page level storage which stores, registers, unregisters reducers for all the datamodel instances. There is only one\n * reducer store available in a page. All the datamodel instances receive same instance of reducer store. DataModel\n * out of the box provides handful of {@link reducer | reducers} which can be used as reducer funciton.\n *\n * @public\n * @namespace DataModel\n */\nclass ReducerStore {\n constructor () {\n this.store = new Map();\n this.store.set('defReducer', defReducer);\n\n Object.entries(fnList).forEach((key) => {\n this.store.set(key[0], key[1]);\n });\n }\n\n /**\n * Changes the `defaultReducer` globally. For all the fields which does not have `defAggFn` mentioned in schema, the\n * value of `defaultReducer` is used for aggregation.\n *\n * @public\n * @param {string} [reducer='sum'] - The name of the default reducer. It picks up the definition from store by doing\n * name lookup. If no name is found then it takes `sum` as the default reducer.\n * @return {ReducerStore} Returns instance of the singleton store in page.\n */\n defaultReducer (...params) {\n if (!params.length) {\n return this.store.get('defReducer');\n }\n\n let reducer = params[0];\n\n if (typeof reducer === 'function') {\n this.store.set('defReducer', reducer);\n } else {\n reducer = String(reducer);\n if (Object.keys(fnList).indexOf(reducer) !== -1) {\n this.store.set('defReducer', fnList[reducer]);\n } else {\n throw new Error(`Reducer ${reducer} not found in registry`);\n }\n }\n return this;\n }\n\n /**\n *\n * Registers a {@link reducer | reducer}.\n * A {@link reducer | reducer} has to be registered before it is used.\n *\n * @example\n * // find the mean squared value of a given set\n * const reducerStore = DataModel.Reducers();\n *\n * reducers.register('meanSquared', (arr) => {\n * const squaredVal = arr.map(item => item * item);\n * let sum = 0;\n * for (let i = 0, l = squaredVal.length; i < l; i++) {\n * sum += squaredVal[i++];\n * }\n *\n * return sum;\n * })\n *\n * // datamodel (dm) is already prepared with cars.json\n * const dm1 = dm.groupBy(['origin'], {\n * accleration: 'meanSquared'\n * });\n *\n * @public\n *\n * @param {string} name formal name for a reducer. If the given name already exists in store it is overridden by new\n * definition.\n * @param {Function} reducer definition of {@link reducer} function.\n *\n * @return {Function} function for unregistering the reducer.\n */\n register (name, reducer) {\n if (typeof reducer !== 'function') {\n throw new Error('Reducer should be a function');\n }\n\n name = String(name);\n this.store.set(name, reducer);\n\n return () => { this.__unregister(name); };\n }\n\n __unregister (name) {\n if (this.store.has(name)) {\n this.store.delete(name);\n }\n }\n\n resolve (name) {\n if (name instanceof Function) {\n return name;\n }\n return this.store.get(name);\n }\n}\n\nconst reducerStore = (function () {\n let store = null;\n\n function getStore () {\n if (store === null) {\n store = new ReducerStore();\n }\n return store;\n }\n return getStore();\n}());\n\nexport default reducerStore;\n","import { getCommonSchema } from './get-common-schema';\n\n/**\n * The filter function used in natural join.\n * It generates a function that will have the logic to join two\n * DataModel instances by the process of natural join.\n *\n * @param {DataModel} dm1 - The left DataModel instance.\n * @param {DataModel} dm2 - The right DataModel instance.\n * @return {Function} Returns a function that is used in cross-product operation.\n */\nexport function naturalJoinFilter (dm1, dm2) {\n const dm1FieldStore = dm1.getFieldspace();\n const dm2FieldStore = dm2.getFieldspace();\n // const dm1FieldStoreName = dm1FieldStore.name;\n // const dm2FieldStoreName = dm2FieldStore.name;\n const commonSchemaArr = getCommonSchema(dm1FieldStore, dm2FieldStore);\n\n return (dm1Fields, dm2Fields) => {\n let retainTuple = true;\n commonSchemaArr.forEach((fieldName) => {\n if (dm1Fields[fieldName].value ===\n dm2Fields[fieldName].value && retainTuple) {\n retainTuple = true;\n } else {\n retainTuple = false;\n }\n });\n return retainTuple;\n };\n}\n","import DataModel from '../export';\nimport { extend2 } from '../utils';\nimport { rowDiffsetIterator } from './row-diffset-iterator';\nimport { isArrEqual } from '../utils/helper';\n/**\n * Performs the union operation between two dm instances.\n *\n * @param {dm} dm1 - The first dm instance.\n * @param {dm} dm2 - The second dm instance.\n * @return {dm} Returns the newly created dm after union operation.\n */\nexport function union (dm1, dm2) {\n const hashTable = {};\n const schema = [];\n const schemaNameArr = [];\n const data = [];\n const dm1FieldStore = dm1.getFieldspace();\n const dm2FieldStore = dm2.getFieldspace();\n const dm1FieldStoreFieldObj = dm1FieldStore.fieldsObj();\n const dm2FieldStoreFieldObj = dm2FieldStore.fieldsObj();\n const name = `${dm1FieldStore.name} union ${dm2FieldStore.name}`;\n\n // For union the columns should match otherwise return a clone of the dm1\n if (!isArrEqual(dm1._colIdentifier.split(',').sort(), dm2._colIdentifier.split(',').sort())) {\n return null;\n }\n\n // Prepare the schema\n (dm1._colIdentifier.split(',')).forEach((fieldName) => {\n const field = dm1FieldStoreFieldObj[fieldName];\n schema.push(extend2({}, field.schema()));\n schemaNameArr.push(field.schema().name);\n });\n\n /**\n * The helper function to create the data.\n *\n * @param {dm} dm - The dm instance for which the data is inserted.\n * @param {Object} fieldsObj - The fieldStore object format.\n */\n function prepareDataHelper (dm, fieldsObj) {\n rowDiffsetIterator(dm._rowDiffset, (i) => {\n const tuple = {};\n let hashData = '';\n schemaNameArr.forEach((schemaName) => {\n const value = fieldsObj[schemaName].partialField.data[i];\n hashData += `-${value}`;\n tuple[schemaName] = value;\n });\n if (!hashTable[hashData]) {\n data.push(tuple);\n hashTable[hashData] = true;\n }\n });\n }\n\n // Prepare the data\n prepareDataHelper(dm1, dm1FieldStoreFieldObj);\n prepareDataHelper(dm2, dm2FieldStoreFieldObj);\n\n return new DataModel(data, schema, { name });\n}\n","import { crossProduct } from './cross-product';\nimport { JOINS } from '../constants';\nimport { union } from './union';\n\n\nexport function leftOuterJoin (dataModel1, dataModel2, filterFn) {\n return crossProduct(dataModel1, dataModel2, filterFn, false, JOINS.LEFTOUTER);\n}\n\nexport function rightOuterJoin (dataModel1, dataModel2, filterFn) {\n return crossProduct(dataModel2, dataModel1, filterFn, false, JOINS.RIGHTOUTER);\n}\n\nexport function fullOuterJoin (dataModel1, dataModel2, filterFn) {\n return union(leftOuterJoin(dataModel1, dataModel2, filterFn), rightOuterJoin(dataModel1, dataModel2, filterFn));\n}\n","import { rowDiffsetIterator } from '../../operator/row-diffset-iterator';\n\n/**\n * In {@link DataModel}, every tabular data consists of column, a column is stored as field.\n * Field contains all the data for a given column in an array.\n *\n * Each record consists of several fields; the fields of all records form the columns.\n * Examples of fields: name, gender, sex etc.\n *\n * In DataModel, each field can have multiple attributes which describes its data and behaviour.\n * A field can have two types of data: Measure and Dimension.\n *\n * A Dimension Field is the context on which a data is categorized and the measure is the numerical values that\n * quantify the data set.\n * In short a dimension is the lens through which you are looking at your measure data.\n *\n * Refer to {@link Schema} to get info about possible field attributes.\n *\n * @public\n * @class\n */\nexport default class Field {\n /**\n * Initialize a new instance.\n *\n * @public\n * @param {PartialField} partialField - The partialField instance which holds the whole data.\n * @param {string} rowDiffset - The data subset definition.\n */\n constructor (partialField, rowDiffset) {\n this.partialField = partialField;\n this.rowDiffset = rowDiffset;\n }\n\n /**\n * Generates the field type specific domain.\n *\n * @public\n * @abstract\n */\n domain () {\n throw new Error('Not yet implemented');\n }\n\n /**\n * Returns the the field schema.\n *\n * @public\n * @return {string} Returns the field schema.\n */\n schema () {\n return this.partialField.schema;\n }\n\n /**\n * Returns the name of the field.\n *\n * @public\n * @return {string} Returns the name of the field.\n */\n name () {\n return this.partialField.name;\n }\n\n /**\n * Returns the type of the field.\n *\n * @public\n * @return {string} Returns the type of the field.\n */\n type () {\n return this.partialField.schema.type;\n }\n\n /**\n * Returns the subtype of the field.\n *\n * @public\n * @return {string} Returns the subtype of the field.\n */\n subtype () {\n return this.partialField.schema.subtype;\n }\n\n /**\n * Returns the description of the field.\n *\n * @public\n * @return {string} Returns the description of the field.\n */\n description () {\n return this.partialField.schema.description;\n }\n\n /**\n * Returns the display name of the field.\n *\n * @public\n * @return {string} Returns the display name of the field.\n */\n displayName () {\n return this.partialField.schema.displayName || this.partialField.schema.name;\n }\n\n /**\n * Returns the data associated with the field.\n *\n * @public\n * @return {Array} Returns the data.\n */\n data () {\n const data = [];\n rowDiffsetIterator(this.rowDiffset, (i) => {\n data.push(this.partialField.data[i]);\n });\n return data;\n }\n\n /**\n * Returns the formatted version of the underlying field data.\n *\n * @public\n * @abstract\n */\n formattedData () {\n throw new Error('Not yet implemented');\n }\n}\n","import Field from '../field';\n\n/**\n * Represents dimension field type.\n *\n * @public\n * @class\n * @extends Field\n */\nexport default class Dimension extends Field {\n /**\n * Returns the domain for the dimension field.\n *\n * @override\n * @public\n * @return {any} Returns the calculated domain.\n */\n domain () {\n if (!this._cachedDomain) {\n this._cachedDomain = this.calculateDataDomain();\n }\n return this._cachedDomain;\n }\n\n /**\n * Calculates the corresponding field domain.\n *\n * @public\n * @abstract\n */\n calculateDataDomain () {\n throw new Error('Not yet implemented');\n }\n\n /**\n * Returns the formatted version of the underlying field data.\n *\n * @public\n * @override\n * @return {Array} Returns the formatted data.\n */\n formattedData () {\n return this.data();\n }\n}\n","import { rowDiffsetIterator } from '../../operator/row-diffset-iterator';\nimport { DimensionSubtype } from '../../enums';\nimport Dimension from '../dimension';\n/**\n * Represents categorical field subtype.\n *\n * @public\n * @class\n * @extends Dimension\n */\nexport default class Categorical extends Dimension {\n /**\n * Returns the subtype of the field.\n *\n * @public\n * @override\n * @return {string} Returns the subtype of the field.\n */\n subtype () {\n return DimensionSubtype.CATEGORICAL;\n }\n\n /**\n * Calculates the corresponding field domain.\n *\n * @public\n * @override\n * @return {Array} Returns the unique values.\n */\n calculateDataDomain () {\n const hash = new Set();\n const domain = [];\n\n // here don't use this.data() as the iteration will be occurred two times on same data.\n rowDiffsetIterator(this.rowDiffset, (i) => {\n const datum = this.partialField.data[i];\n if (!hash.has(datum)) {\n hash.add(datum);\n domain.push(datum);\n }\n });\n return domain;\n }\n}\n","import { rowDiffsetIterator } from '../../operator/row-diffset-iterator';\nimport Dimension from '../dimension';\nimport { DateTimeFormatter } from '../../utils';\nimport InvalidAwareTypes from '../../invalid-aware-types';\n\n/**\n * Represents temporal field subtype.\n *\n * @public\n * @class\n * @extends Dimension\n */\nexport default class Temporal extends Dimension {\n /**\n * Initialize a new instance.\n *\n * @public\n * @param {PartialField} partialField - The partialField instance which holds the whole data.\n * @param {string} rowDiffset - The data subset definition.\n */\n constructor (partialField, rowDiffset) {\n super(partialField, rowDiffset);\n\n this._cachedMinDiff = null;\n }\n\n /**\n * Calculates the corresponding field domain.\n *\n * @public\n * @override\n * @return {Array} Returns the unique values.\n */\n calculateDataDomain () {\n const hash = new Set();\n const domain = [];\n\n // here don't use this.data() as the iteration will be\n // occurred two times on same data.\n rowDiffsetIterator(this.rowDiffset, (i) => {\n const datum = this.partialField.data[i];\n if (!hash.has(datum)) {\n hash.add(datum);\n domain.push(datum);\n }\n });\n\n return domain;\n }\n\n\n /**\n * Calculates the minimum consecutive difference from the associated field data.\n *\n * @public\n * @return {number} Returns the minimum consecutive diff in milliseconds.\n */\n minimumConsecutiveDifference () {\n if (this._cachedMinDiff) {\n return this._cachedMinDiff;\n }\n\n const sortedData = this.data().filter(item => !(item instanceof InvalidAwareTypes)).sort((a, b) => a - b);\n const arrLn = sortedData.length;\n let minDiff = Number.POSITIVE_INFINITY;\n let prevDatum;\n let nextDatum;\n let processedCount = 0;\n\n for (let i = 1; i < arrLn; i++) {\n prevDatum = sortedData[i - 1];\n nextDatum = sortedData[i];\n\n if (nextDatum === prevDatum) {\n continue;\n }\n\n minDiff = Math.min(minDiff, nextDatum - sortedData[i - 1]);\n processedCount++;\n }\n\n if (!processedCount) {\n minDiff = null;\n }\n this._cachedMinDiff = minDiff;\n\n return this._cachedMinDiff;\n }\n\n /**\n * Returns the format specified in the input schema while creating field.\n *\n * @public\n * @return {string} Returns the datetime format.\n */\n format () {\n return this.partialField.schema.format;\n }\n\n /**\n * Returns the formatted version of the underlying field data.\n *\n * @public\n * @override\n * @return {Array} Returns the formatted data.\n */\n formattedData () {\n const data = [];\n rowDiffsetIterator(this.rowDiffset, (i) => {\n const datum = this.partialField.data[i];\n if (datum instanceof InvalidAwareTypes) {\n data.push(datum);\n } else {\n data.push(DateTimeFormatter.formatAs(datum, this.format()));\n }\n });\n return data;\n }\n}\n\n","import Dimension from '../dimension';\n\n/**\n * Represents binned field subtype.\n *\n * @public\n * @class\n * @extends Dimension\n */\nexport default class Binned extends Dimension {\n /**\n * Calculates the corresponding field domain.\n *\n * @public\n * @override\n * @return {Array} Returns the last and first values of bins config array.\n */\n calculateDataDomain () {\n const binsArr = this.partialField.schema.bins;\n return [binsArr[0], binsArr[binsArr.length - 1]];\n }\n\n /**\n * Returns the bins config provided while creating the field instance.\n *\n * @public\n * @return {Array} Returns the bins array config.\n */\n bins () {\n return this.partialField.schema.bins;\n }\n}\n","import { formatNumber } from '../../utils';\nimport { defaultReducerName } from '../../operator/group-by-function';\nimport Field from '../field';\n\n/**\n * Represents measure field type.\n *\n * @public\n * @class\n * @extends Field\n */\nexport default class Measure extends Field {\n /**\n * Returns the domain for the measure field.\n *\n * @override\n * @public\n * @return {any} Returns the calculated domain.\n */\n domain () {\n if (!this._cachedDomain) {\n this._cachedDomain = this.calculateDataDomain();\n }\n return this._cachedDomain;\n }\n\n /**\n * Returns the unit of the measure field.\n *\n * @public\n * @return {string} Returns unit of the field.\n */\n unit () {\n return this.partialField.schema.unit;\n }\n\n /**\n * Returns the aggregation function name of the measure field.\n *\n * @public\n * @return {string} Returns aggregation function name of the field.\n */\n defAggFn () {\n return this.partialField.schema.defAggFn || defaultReducerName;\n }\n\n /**\n * Returns the number format of the measure field.\n *\n * @public\n * @return {Function} Returns number format of the field.\n */\n numberFormat () {\n const { numberFormat } = this.partialField.schema;\n return numberFormat instanceof Function ? numberFormat : formatNumber;\n }\n\n /**\n * Calculates the corresponding field domain.\n *\n * @public\n * @abstract\n */\n calculateDataDomain () {\n throw new Error('Not yet implemented');\n }\n\n /**\n * Returns the formatted version of the underlying field data.\n *\n * @public\n * @override\n * @return {Array} Returns the formatted data.\n */\n formattedData () {\n return this.data();\n }\n}\n","import { rowDiffsetIterator } from '../../operator/row-diffset-iterator';\nimport { MeasureSubtype } from '../../enums';\nimport Measure from '../measure';\nimport InvalidAwareTypes from '../../invalid-aware-types';\n\n/**\n * Represents continuous field subtype.\n *\n * @public\n * @class\n * @extends Measure\n */\nexport default class Continuous extends Measure {\n /**\n * Returns the subtype of the field.\n *\n * @public\n * @override\n * @return {string} Returns the subtype of the field.\n */\n subtype () {\n return MeasureSubtype.CONTINUOUS;\n }\n\n /**\n * Calculates the corresponding field domain.\n *\n * @public\n * @override\n * @return {Array} Returns the min and max values.\n */\n calculateDataDomain () {\n let min = Number.POSITIVE_INFINITY;\n let max = Number.NEGATIVE_INFINITY;\n\n // here don't use this.data() as the iteration will be occurred two times on same data.\n rowDiffsetIterator(this.rowDiffset, (i) => {\n const datum = this.partialField.data[i];\n if (datum instanceof InvalidAwareTypes) {\n return;\n }\n\n if (datum < min) {\n min = datum;\n }\n if (datum > max) {\n max = datum;\n }\n });\n\n return [min, max];\n }\n}\n","/**\n * A interface to represent a parser which is responsible to parse the field.\n *\n * @public\n * @interface\n */\nexport default class FieldParser {\n /**\n * Parses a single value of a field and return the sanitized form.\n *\n * @public\n * @abstract\n */\n parse () {\n throw new Error('Not yet implemented');\n }\n}\n","import FieldParser from '../field-parser';\nimport InvalidAwareTypes from '../../../invalid-aware-types';\n\n/**\n * A FieldParser which parses the categorical values.\n *\n * @public\n * @class\n * @implements {FieldParser}\n */\nexport default class CategoricalParser extends FieldParser {\n /**\n * Parses a single value of a field and returns the stringified form.\n *\n * @public\n * @param {string|number} val - The value of the field.\n * @return {string} Returns the stringified value.\n */\n parse (val) {\n let result;\n // check if invalid date value\n if (!InvalidAwareTypes.isInvalid(val)) {\n result = String(val).trim();\n } else {\n result = InvalidAwareTypes.getInvalidType(val);\n }\n return result;\n }\n}\n","import { DateTimeFormatter } from '../../../utils';\nimport FieldParser from '../field-parser';\nimport InvalidAwareTypes from '../../../invalid-aware-types';\n\n/**\n * A FieldParser which parses the temporal values.\n *\n * @public\n * @class\n * @implements {FieldParser}\n */\nexport default class TemporalParser extends FieldParser {\n /**\n * Initialize a new instance.\n *\n * @public\n * @param {Object} schema - The schema object for the corresponding field.\n */\n constructor (schema) {\n super();\n this.schema = schema;\n this._dtf = new DateTimeFormatter(this.schema.format);\n }\n\n /**\n * Parses a single value of a field and returns the millisecond value.\n *\n * @public\n * @param {string|number} val - The value of the field.\n * @return {number} Returns the millisecond value.\n */\n parse (val) {\n let result;\n // check if invalid date value\n if (!InvalidAwareTypes.isInvalid(val)) {\n let nativeDate = this._dtf.getNativeDate(val);\n result = nativeDate ? nativeDate.getTime() : InvalidAwareTypes.NA;\n } else {\n result = InvalidAwareTypes.getInvalidType(val);\n }\n return result;\n }\n}\n","import FieldParser from '../field-parser';\nimport InvalidAwareTypes from '../../../invalid-aware-types';\n\n/**\n * A FieldParser which parses the binned values.\n *\n * @public\n * @class\n * @implements {FieldParser}\n */\nexport default class BinnedParser extends FieldParser {\n /**\n * Parses a single binned value of a field and returns the sanitized value.\n *\n * @public\n * @param {string} val - The value of the field.\n * @return {string} Returns the sanitized value.\n */\n parse (val) {\n const regex = /^\\s*([+-]?\\d+(?:\\.\\d+)?)\\s*-\\s*([+-]?\\d+(?:\\.\\d+)?)\\s*$/;\n val = String(val);\n let result;\n // check if invalid date value\n if (!InvalidAwareTypes.isInvalid(val)) {\n let matched = val.match(regex);\n result = matched ? `${Number.parseFloat(matched[1])}-${Number.parseFloat(matched[2])}`\n : InvalidAwareTypes.NA;\n } else {\n result = InvalidAwareTypes.getInvalidType(val);\n }\n return result;\n }\n}\n","import FieldParser from '../field-parser';\nimport InvalidAwareTypes from '../../../invalid-aware-types';\n\n/**\n * A FieldParser which parses the continuous values.\n *\n * @public\n * @class\n * @implements {FieldParser}\n */\nexport default class ContinuousParser extends FieldParser {\n /**\n * Parses a single value of a field and returns the number form.\n *\n * @public\n * @param {string|number} val - The value of the field.\n * @return {string} Returns the number value.\n */\n parse (val) {\n let result;\n // check if invalid date value\n if (!InvalidAwareTypes.isInvalid(val)) {\n let parsedVal = parseFloat(val, 10);\n result = Number.isNaN(parsedVal) ? InvalidAwareTypes.NA : parsedVal;\n } else {\n result = InvalidAwareTypes.getInvalidType(val);\n }\n return result;\n }\n}\n","/**\n * Stores the full data and the metadata of a field. It provides\n * a single source of data from which the future Field\n * instance can get a subset of it with a rowDiffset config.\n *\n * @class\n * @public\n */\nexport default class PartialField {\n /**\n * Initialize a new instance.\n *\n * @public\n * @param {string} name - The name of the field.\n * @param {Array} data - The data array.\n * @param {Object} schema - The schema object of the corresponding field.\n * @param {FieldParser} parser - The parser instance corresponding to that field.\n */\n constructor (name, data, schema, parser) {\n this.name = name;\n this.schema = schema;\n this.parser = parser;\n this.data = this._sanitize(data);\n }\n\n /**\n * Sanitizes the field data.\n *\n * @private\n * @param {Array} data - The actual input data.\n * @return {Array} Returns the sanitized data.\n */\n _sanitize (data) {\n return data.map(datum => this.parser.parse(datum));\n }\n}\n","import { FieldType, DimensionSubtype, MeasureSubtype } from './enums';\nimport {\n Categorical,\n Temporal,\n Binned,\n Continuous,\n CategoricalParser,\n TemporalParser,\n BinnedParser,\n ContinuousParser,\n PartialField\n} from './fields';\n\n/**\n * Creates a field instance according to the provided data and schema.\n *\n * @param {Array} data - The field data array.\n * @param {Object} schema - The field schema object.\n * @return {Field} Returns the newly created field instance.\n */\nfunction createUnitField(data, schema) {\n data = data || [];\n let partialField;\n\n switch (schema.type) {\n case FieldType.MEASURE:\n switch (schema.subtype) {\n case MeasureSubtype.CONTINUOUS:\n partialField = new PartialField(schema.name, data, schema, new ContinuousParser());\n return new Continuous(partialField, `0-${data.length - 1}`);\n default:\n partialField = new PartialField(schema.name, data, schema, new ContinuousParser());\n return new Continuous(partialField, `0-${data.length - 1}`);\n }\n case FieldType.DIMENSION:\n switch (schema.subtype) {\n case DimensionSubtype.CATEGORICAL:\n partialField = new PartialField(schema.name, data, schema, new CategoricalParser());\n return new Categorical(partialField, `0-${data.length - 1}`);\n case DimensionSubtype.TEMPORAL:\n partialField = new PartialField(schema.name, data, schema, new TemporalParser(schema));\n return new Temporal(partialField, `0-${data.length - 1}`);\n case DimensionSubtype.BINNED:\n partialField = new PartialField(schema.name, data, schema, new BinnedParser());\n return new Binned(partialField, `0-${data.length - 1}`);\n default:\n partialField = new PartialField(schema.name, data, schema, new CategoricalParser());\n return new Categorical(partialField, `0-${data.length - 1}`);\n }\n default:\n partialField = new PartialField(schema.name, data, schema, new CategoricalParser());\n return new Categorical(partialField, `0-${data.length - 1}`);\n }\n}\n\n\n/**\n * Creates a field instance from partialField and rowDiffset.\n *\n * @param {PartialField} partialField - The corresponding partial field.\n * @param {string} rowDiffset - The data subset config.\n * @return {Field} Returns the newly created field instance.\n */\nexport function createUnitFieldFromPartial(partialField, rowDiffset) {\n const { schema } = partialField;\n\n switch (schema.type) {\n case FieldType.MEASURE:\n switch (schema.subtype) {\n case MeasureSubtype.CONTINUOUS:\n return new Continuous(partialField, rowDiffset);\n default:\n return new Continuous(partialField, rowDiffset);\n }\n case FieldType.DIMENSION:\n switch (schema.subtype) {\n case DimensionSubtype.CATEGORICAL:\n return new Categorical(partialField, rowDiffset);\n case DimensionSubtype.TEMPORAL:\n return new Temporal(partialField, rowDiffset);\n case DimensionSubtype.BINNED:\n return new Binned(partialField, rowDiffset);\n default:\n return new Categorical(partialField, rowDiffset);\n }\n default:\n return new Categorical(partialField, rowDiffset);\n }\n}\n\n/**\n * Creates the field instances with input data and schema.\n *\n * @param {Array} dataColumn - The data array for fields.\n * @param {Array} schema - The schema array for fields.\n * @param {Array} headers - The array of header names.\n * @return {Array.} Returns an array of newly created field instances.\n */\nexport function createFields(dataColumn, schema, headers) {\n const headersObj = {};\n\n if (!(headers && headers.length)) {\n headers = schema.map(item => item.name);\n }\n\n headers.forEach((header, i) => {\n headersObj[header] = i;\n });\n\n return schema.map(item => createUnitField(dataColumn[headersObj[item.name]], item));\n}\n","import { DataFormat } from './enums';\n\nexport default {\n dataFormat: DataFormat.AUTO\n};\n","import { columnMajor } from '../utils';\n\n/**\n * Parses and converts data formatted in DSV array to a manageable internal format.\n *\n * @param {Array.} arr - A 2D array containing of the DSV data.\n * @param {Object} options - Option to control the behaviour of the parsing.\n * @param {boolean} [options.firstRowHeader=true] - Whether the first row of the dsv data is header or not.\n * @return {Array} Returns an array of headers and column major data.\n * @example\n *\n * // Sample input data:\n * const data = [\n * [\"a\", \"b\", \"c\"],\n * [1, 2, 3],\n * [4, 5, 6],\n * [7, 8, 9]\n * ];\n */\nfunction DSVArr (arr, options) {\n const defaultOption = {\n firstRowHeader: true,\n };\n options = Object.assign({}, defaultOption, options);\n\n let header;\n const columns = [];\n const push = columnMajor(columns);\n\n if (options.firstRowHeader) {\n // If header present then mutate the array.\n // Do in-place mutation to save space.\n header = arr.splice(0, 1)[0];\n } else {\n header = [];\n }\n\n arr.forEach(field => push(...field));\n\n return [header, columns];\n}\n\nexport default DSVArr;\n","var EOL = {},\n EOF = {},\n QUOTE = 34,\n NEWLINE = 10,\n RETURN = 13;\n\nfunction objectConverter(columns) {\n return new Function(\"d\", \"return {\" + columns.map(function(name, i) {\n return JSON.stringify(name) + \": d[\" + i + \"]\";\n }).join(\",\") + \"}\");\n}\n\nfunction customConverter(columns, f) {\n var object = objectConverter(columns);\n return function(row, i) {\n return f(object(row), i, columns);\n };\n}\n\n// Compute unique columns in order of discovery.\nfunction inferColumns(rows) {\n var columnSet = Object.create(null),\n columns = [];\n\n rows.forEach(function(row) {\n for (var column in row) {\n if (!(column in columnSet)) {\n columns.push(columnSet[column] = column);\n }\n }\n });\n\n return columns;\n}\n\nfunction pad(value, width) {\n var s = value + \"\", length = s.length;\n return length < width ? new Array(width - length + 1).join(0) + s : s;\n}\n\nfunction formatYear(year) {\n return year < 0 ? \"-\" + pad(-year, 6)\n : year > 9999 ? \"+\" + pad(year, 6)\n : pad(year, 4);\n}\n\nfunction formatDate(date) {\n var hours = date.getUTCHours(),\n minutes = date.getUTCMinutes(),\n seconds = date.getUTCSeconds(),\n milliseconds = date.getUTCMilliseconds();\n return isNaN(date) ? \"Invalid Date\"\n : formatYear(date.getUTCFullYear(), 4) + \"-\" + pad(date.getUTCMonth() + 1, 2) + \"-\" + pad(date.getUTCDate(), 2)\n + (milliseconds ? \"T\" + pad(hours, 2) + \":\" + pad(minutes, 2) + \":\" + pad(seconds, 2) + \".\" + pad(milliseconds, 3) + \"Z\"\n : seconds ? \"T\" + pad(hours, 2) + \":\" + pad(minutes, 2) + \":\" + pad(seconds, 2) + \"Z\"\n : minutes || hours ? \"T\" + pad(hours, 2) + \":\" + pad(minutes, 2) + \"Z\"\n : \"\");\n}\n\nexport default function(delimiter) {\n var reFormat = new RegExp(\"[\\\"\" + delimiter + \"\\n\\r]\"),\n DELIMITER = delimiter.charCodeAt(0);\n\n function parse(text, f) {\n var convert, columns, rows = parseRows(text, function(row, i) {\n if (convert) return convert(row, i - 1);\n columns = row, convert = f ? customConverter(row, f) : objectConverter(row);\n });\n rows.columns = columns || [];\n return rows;\n }\n\n function parseRows(text, f) {\n var rows = [], // output rows\n N = text.length,\n I = 0, // current character index\n n = 0, // current line number\n t, // current token\n eof = N <= 0, // current token followed by EOF?\n eol = false; // current token followed by EOL?\n\n // Strip the trailing newline.\n if (text.charCodeAt(N - 1) === NEWLINE) --N;\n if (text.charCodeAt(N - 1) === RETURN) --N;\n\n function token() {\n if (eof) return EOF;\n if (eol) return eol = false, EOL;\n\n // Unescape quotes.\n var i, j = I, c;\n if (text.charCodeAt(j) === QUOTE) {\n while (I++ < N && text.charCodeAt(I) !== QUOTE || text.charCodeAt(++I) === QUOTE);\n if ((i = I) >= N) eof = true;\n else if ((c = text.charCodeAt(I++)) === NEWLINE) eol = true;\n else if (c === RETURN) { eol = true; if (text.charCodeAt(I) === NEWLINE) ++I; }\n return text.slice(j + 1, i - 1).replace(/\"\"/g, \"\\\"\");\n }\n\n // Find next delimiter or newline.\n while (I < N) {\n if ((c = text.charCodeAt(i = I++)) === NEWLINE) eol = true;\n else if (c === RETURN) { eol = true; if (text.charCodeAt(I) === NEWLINE) ++I; }\n else if (c !== DELIMITER) continue;\n return text.slice(j, i);\n }\n\n // Return last token before EOF.\n return eof = true, text.slice(j, N);\n }\n\n while ((t = token()) !== EOF) {\n var row = [];\n while (t !== EOL && t !== EOF) row.push(t), t = token();\n if (f && (row = f(row, n++)) == null) continue;\n rows.push(row);\n }\n\n return rows;\n }\n\n function preformatBody(rows, columns) {\n return rows.map(function(row) {\n return columns.map(function(column) {\n return formatValue(row[column]);\n }).join(delimiter);\n });\n }\n\n function format(rows, columns) {\n if (columns == null) columns = inferColumns(rows);\n return [columns.map(formatValue).join(delimiter)].concat(preformatBody(rows, columns)).join(\"\\n\");\n }\n\n function formatBody(rows, columns) {\n if (columns == null) columns = inferColumns(rows);\n return preformatBody(rows, columns).join(\"\\n\");\n }\n\n function formatRows(rows) {\n return rows.map(formatRow).join(\"\\n\");\n }\n\n function formatRow(row) {\n return row.map(formatValue).join(delimiter);\n }\n\n function formatValue(value) {\n return value == null ? \"\"\n : value instanceof Date ? formatDate(value)\n : reFormat.test(value += \"\") ? \"\\\"\" + value.replace(/\"/g, \"\\\"\\\"\") + \"\\\"\"\n : value;\n }\n\n return {\n parse: parse,\n parseRows: parseRows,\n format: format,\n formatBody: formatBody,\n formatRows: formatRows\n };\n}\n","import dsv from \"./dsv\";\n\nvar csv = dsv(\",\");\n\nexport var csvParse = csv.parse;\nexport var csvParseRows = csv.parseRows;\nexport var csvFormat = csv.format;\nexport var csvFormatBody = csv.formatBody;\nexport var csvFormatRows = csv.formatRows;\n","import dsv from \"./dsv\";\n\nvar tsv = dsv(\"\\t\");\n\nexport var tsvParse = tsv.parse;\nexport var tsvParseRows = tsv.parseRows;\nexport var tsvFormat = tsv.format;\nexport var tsvFormatBody = tsv.formatBody;\nexport var tsvFormatRows = tsv.formatRows;\n","import { dsvFormat as d3Dsv } from 'd3-dsv';\nimport DSVArr from './dsv-arr';\n\n/**\n * Parses and converts data formatted in DSV string to a manageable internal format.\n *\n * @todo Support to be given for https://tools.ietf.org/html/rfc4180.\n * @todo Sample implementation https://github.com/knrz/CSV.js/.\n *\n * @param {string} str - The input DSV string.\n * @param {Object} options - Option to control the behaviour of the parsing.\n * @param {boolean} [options.firstRowHeader=true] - Whether the first row of the dsv string data is header or not.\n * @param {string} [options.fieldSeparator=\",\"] - The separator of two consecutive field.\n * @return {Array} Returns an array of headers and column major data.\n * @example\n *\n * // Sample input data:\n * const data = `\n * a,b,c\n * 1,2,3\n * 4,5,6\n * 7,8,9\n * `\n */\nfunction DSVStr (str, options) {\n const defaultOption = {\n firstRowHeader: true,\n fieldSeparator: ','\n };\n options = Object.assign({}, defaultOption, options);\n\n const dsv = d3Dsv(options.fieldSeparator);\n return DSVArr(dsv.parseRows(str), options);\n}\n\nexport default DSVStr;\n","import { columnMajor } from '../utils';\n\n/**\n * Parses and converts data formatted in JSON to a manageable internal format.\n *\n * @param {Array.} arr - The input data formatted in JSON.\n * @return {Array.} Returns an array of headers and column major data.\n * @example\n *\n * // Sample input data:\n * const data = [\n * {\n * \"a\": 1,\n * \"b\": 2,\n * \"c\": 3\n * },\n * {\n * \"a\": 4,\n * \"b\": 5,\n * \"c\": 6\n * },\n * {\n * \"a\": 7,\n * \"b\": 8,\n * \"c\": 9\n * }\n * ];\n */\nfunction FlatJSON (arr) {\n const header = {};\n let i = 0;\n let insertionIndex;\n const columns = [];\n const push = columnMajor(columns);\n\n arr.forEach((item) => {\n const fields = [];\n for (let key in item) {\n if (key in header) {\n insertionIndex = header[key];\n } else {\n header[key] = i++;\n insertionIndex = i - 1;\n }\n fields[insertionIndex] = item[key];\n }\n push(...fields);\n });\n\n return [Object.keys(header), columns];\n}\n\nexport default FlatJSON;\n","import FlatJSON from './flat-json';\nimport DSVArr from './dsv-arr';\nimport DSVStr from './dsv-str';\nimport { detectDataFormat } from '../utils';\n\n/**\n * Parses the input data and detect the format automatically.\n *\n * @param {string|Array} data - The input data.\n * @param {Object} options - An optional config specific to data format.\n * @return {Array.} Returns an array of headers and column major data.\n */\nfunction Auto (data, options) {\n const converters = { FlatJSON, DSVStr, DSVArr };\n const dataFormat = detectDataFormat(data);\n\n if (!dataFormat) {\n throw new Error('Couldn\\'t detect the data format');\n }\n\n return converters[dataFormat](data, options);\n}\n\nexport default Auto;\n","import { FieldType, FilteringMode, DimensionSubtype, MeasureSubtype, DataFormat } from './enums';\nimport fieldStore from './field-store';\nimport Value from './value';\nimport {\n rowDiffsetIterator\n} from './operator';\nimport { DM_DERIVATIVES, LOGICAL_OPERATORS } from './constants';\nimport { createFields, createUnitFieldFromPartial } from './field-creator';\nimport defaultConfig from './default-config';\nimport * as converter from './converter';\nimport { extend2, detectDataFormat } from './utils';\n\n/**\n * Prepares the selection data.\n */\nfunction prepareSelectionData (fields, i) {\n const resp = {};\n for (let field of fields) {\n resp[field.name()] = new Value(field.partialField.data[i], field);\n }\n return resp;\n}\n\nexport function prepareJoinData (fields) {\n const resp = {};\n Object.keys(fields).forEach((key) => { resp[key] = new Value(fields[key], key); });\n return resp;\n}\n\nexport const updateFields = ([rowDiffset, colIdentifier], partialFieldspace, fieldStoreName) => {\n let collID = colIdentifier.length ? colIdentifier.split(',') : [];\n let partialFieldMap = partialFieldspace.fieldsObj();\n let newFields = collID.map(coll => createUnitFieldFromPartial(partialFieldMap[coll].partialField, rowDiffset));\n return fieldStore.createNamespace(newFields, fieldStoreName);\n};\n\nexport const persistCurrentDerivation = (model, operation, config = {}, criteriaFn) => {\n if (operation === DM_DERIVATIVES.COMPOSE) {\n model._derivation.length = 0;\n model._derivation.push(...criteriaFn);\n } else {\n model._derivation.push({\n op: operation,\n meta: config,\n criteria: criteriaFn\n });\n }\n};\n\nexport const persistAncestorDerivation = (sourceDm, newDm) => {\n newDm._ancestorDerivation.push(...sourceDm._ancestorDerivation, ...sourceDm._derivation);\n};\n\nexport const persistDerivations = (sourceDm, model, operation, config = {}, criteriaFn) => {\n persistCurrentDerivation(model, operation, config, criteriaFn);\n persistAncestorDerivation(sourceDm, model);\n};\n\nexport const selectHelper = (rowDiffset, fields, selectFn, config, sourceDm) => {\n const newRowDiffSet = [];\n let lastInsertedValue = -1;\n let { mode } = config;\n let li;\n let cachedStore = {};\n let cloneProvider = () => sourceDm.detachedRoot();\n const selectorHelperFn = index => selectFn(\n prepareSelectionData(fields, index),\n index,\n cloneProvider,\n cachedStore\n );\n\n let checker;\n if (mode === FilteringMode.INVERSE) {\n checker = index => !selectorHelperFn(index);\n } else {\n checker = index => selectorHelperFn(index);\n }\n\n rowDiffsetIterator(rowDiffset, (i) => {\n if (checker(i)) {\n if (lastInsertedValue !== -1 && i === (lastInsertedValue + 1)) {\n li = newRowDiffSet.length - 1;\n newRowDiffSet[li] = `${newRowDiffSet[li].split('-')[0]}-${i}`;\n } else {\n newRowDiffSet.push(`${i}`);\n }\n lastInsertedValue = i;\n }\n });\n return newRowDiffSet.join(',');\n};\n\nexport const cloneWithAllFields = (model) => {\n const clonedDm = model.clone(false);\n const partialFieldspace = model.getPartialFieldspace();\n clonedDm._colIdentifier = partialFieldspace.fields.map(f => f.name()).join(',');\n\n // flush out cached namespace values on addition of new fields\n partialFieldspace._cachedFieldsObj = null;\n partialFieldspace._cachedDimension = null;\n partialFieldspace._cachedMeasure = null;\n clonedDm.__calculateFieldspace().calculateFieldsConfig();\n\n return clonedDm;\n};\n\nexport const filterPropagationModel = (model, propModels, config = {}) => {\n const operation = config.operation || LOGICAL_OPERATORS.AND;\n const filterByMeasure = config.filterByMeasure || false;\n let fns = [];\n if (!propModels.length) {\n fns = [() => false];\n } else {\n fns = propModels.map(propModel => ((dataModel) => {\n const dataObj = dataModel.getData();\n const schema = dataObj.schema;\n const fieldsConfig = dataModel.getFieldsConfig();\n const fieldsSpace = dataModel.getFieldspace().fieldsObj();\n const data = dataObj.data;\n const domain = Object.values(fieldsConfig).reduce((acc, v) => {\n acc[v.def.name] = fieldsSpace[v.def.name].domain();\n return acc;\n }, {});\n\n return (fields) => {\n const include = !data.length ? false : data.some(row => schema.every((propField) => {\n if (!(propField.name in fields)) {\n return true;\n }\n const value = fields[propField.name].valueOf();\n if (filterByMeasure && propField.type === FieldType.MEASURE) {\n return value >= domain[propField.name][0] && value <= domain[propField.name][1];\n }\n\n if (propField.type !== FieldType.DIMENSION) {\n return true;\n }\n const idx = fieldsConfig[propField.name].index;\n return row[idx] === fields[propField.name].valueOf();\n }));\n return include;\n };\n })(propModel));\n }\n\n let filteredModel;\n if (operation === LOGICAL_OPERATORS.AND) {\n filteredModel = cloneWithAllFields(model).select(fields => fns.every(fn => fn(fields)), {\n saveChild: false,\n mode: FilteringMode.ALL\n });\n } else {\n filteredModel = cloneWithAllFields(model).select(fields => fns.some(fn => fn(fields)), {\n mode: FilteringMode.ALL,\n saveChild: false\n });\n }\n\n return filteredModel;\n};\n\nexport const cloneWithSelect = (sourceDm, selectFn, selectConfig, cloneConfig) => {\n const cloned = sourceDm.clone(cloneConfig.saveChild);\n const rowDiffset = selectHelper(\n cloned._rowDiffset,\n cloned.getPartialFieldspace().fields,\n selectFn,\n selectConfig,\n sourceDm\n );\n cloned._rowDiffset = rowDiffset;\n cloned.__calculateFieldspace().calculateFieldsConfig();\n\n persistDerivations(\n sourceDm,\n cloned,\n DM_DERIVATIVES.SELECT,\n { config: selectConfig },\n selectFn\n );\n\n return cloned;\n};\n\nexport const cloneWithProject = (sourceDm, projField, config, allFields) => {\n const cloned = sourceDm.clone(config.saveChild);\n let projectionSet = projField;\n if (config.mode === FilteringMode.INVERSE) {\n projectionSet = allFields.filter(fieldName => projField.indexOf(fieldName) === -1);\n }\n // cloned._colIdentifier = sourceDm._colIdentifier.split(',')\n // .filter(coll => projectionSet.indexOf(coll) !== -1).join();\n cloned._colIdentifier = projectionSet.join(',');\n cloned.__calculateFieldspace().calculateFieldsConfig();\n\n persistDerivations(\n sourceDm,\n cloned,\n DM_DERIVATIVES.PROJECT,\n { projField, config, actualProjField: projectionSet },\n null\n );\n\n return cloned;\n};\n\nexport const sanitizeUnitSchema = (unitSchema) => {\n // Do deep clone of the unit schema as the user might change it later.\n unitSchema = extend2({}, unitSchema);\n if (!unitSchema.type) {\n unitSchema.type = FieldType.DIMENSION;\n }\n\n if (!unitSchema.subtype) {\n switch (unitSchema.type) {\n case FieldType.MEASURE:\n unitSchema.subtype = MeasureSubtype.CONTINUOUS;\n break;\n default:\n case FieldType.DIMENSION:\n unitSchema.subtype = DimensionSubtype.CATEGORICAL;\n break;\n }\n }\n\n return unitSchema;\n};\n\nexport const validateUnitSchema = (unitSchema) => {\n const supportedMeasureSubTypes = [MeasureSubtype.CONTINUOUS];\n const supportedDimSubTypes = [\n DimensionSubtype.CATEGORICAL,\n DimensionSubtype.BINNED,\n DimensionSubtype.TEMPORAL,\n DimensionSubtype.GEO\n ];\n const { type, subtype, name } = unitSchema;\n\n switch (type) {\n case FieldType.DIMENSION:\n if (supportedDimSubTypes.indexOf(subtype) === -1) {\n throw new Error(`DataModel doesn't support dimension field subtype ${subtype} used for ${name} field`);\n }\n break;\n case FieldType.MEASURE:\n if (supportedMeasureSubTypes.indexOf(subtype) === -1) {\n throw new Error(`DataModel doesn't support measure field subtype ${subtype} used for ${name} field`);\n }\n break;\n default:\n throw new Error(`DataModel doesn't support field type ${type} used for ${name} field`);\n }\n};\n\nexport const sanitizeAndValidateSchema = schema => schema.map((unitSchema) => {\n unitSchema = sanitizeUnitSchema(unitSchema);\n validateUnitSchema(unitSchema);\n return unitSchema;\n});\n\nexport const resolveFieldName = (schema, dataHeader) => {\n schema.forEach((unitSchema) => {\n const fieldNameAs = unitSchema.as;\n if (!fieldNameAs) { return; }\n\n const idx = dataHeader.indexOf(unitSchema.name);\n dataHeader[idx] = fieldNameAs;\n unitSchema.name = fieldNameAs;\n delete unitSchema.as;\n });\n};\n\nexport const updateData = (relation, data, schema, options) => {\n schema = sanitizeAndValidateSchema(schema);\n options = Object.assign(Object.assign({}, defaultConfig), options);\n const converterFn = converter[options.dataFormat];\n\n if (!(converterFn && typeof converterFn === 'function')) {\n throw new Error(`No converter function found for ${options.dataFormat} format`);\n }\n\n const [header, formattedData] = converterFn(data, options);\n resolveFieldName(schema, header);\n const fieldArr = createFields(formattedData, schema, header);\n\n // This will create a new fieldStore with the fields\n const nameSpace = fieldStore.createNamespace(fieldArr, options.name);\n relation._partialFieldspace = nameSpace;\n // If data is provided create the default colIdentifier and rowDiffset\n relation._rowDiffset = formattedData.length && formattedData[0].length ? `0-${formattedData[0].length - 1}` : '';\n relation._colIdentifier = (schema.map(_ => _.name)).join();\n relation._dataFormat = options.dataFormat === DataFormat.AUTO ? detectDataFormat(data) : options.dataFormat;\n return relation;\n};\n\nexport const fieldInSchema = (schema, field) => {\n let i = 0;\n\n for (; i < schema.length; ++i) {\n if (field === schema[i].name) {\n return {\n type: schema[i].subtype || schema[i].type,\n index: i\n };\n }\n }\n return null;\n};\n\n\nexport const getDerivationArguments = (derivation) => {\n let params = [];\n let operation;\n operation = derivation.op;\n switch (operation) {\n case DM_DERIVATIVES.SELECT:\n params = [derivation.criteria];\n break;\n case DM_DERIVATIVES.PROJECT:\n params = [derivation.meta.actualProjField];\n break;\n case DM_DERIVATIVES.GROUPBY:\n operation = 'groupBy';\n params = [derivation.meta.groupByString.split(','), derivation.criteria];\n break;\n default:\n operation = null;\n }\n\n return {\n operation,\n params\n };\n};\n\nconst applyExistingOperationOnModel = (propModel, dataModel) => {\n const derivations = dataModel.getDerivations();\n let selectionModel = propModel[0];\n let rejectionModel = propModel[1];\n\n derivations.forEach((derivation) => {\n if (!derivation) {\n return;\n }\n\n const { operation, params } = getDerivationArguments(derivation);\n if (operation) {\n selectionModel = selectionModel[operation](...params, {\n saveChild: false\n });\n rejectionModel = rejectionModel[operation](...params, {\n saveChild: false\n });\n }\n });\n\n return [selectionModel, rejectionModel];\n};\n\nconst getFilteredModel = (propModel, path) => {\n for (let i = 0, len = path.length; i < len; i++) {\n const model = path[i];\n propModel = applyExistingOperationOnModel(propModel, model);\n }\n return propModel;\n};\n\nconst propagateIdentifiers = (dataModel, propModel, config = {}, propModelInf = {}) => {\n const nonTraversingModel = propModelInf.nonTraversingModel;\n const excludeModels = propModelInf.excludeModels || [];\n\n if (dataModel === nonTraversingModel) {\n return;\n }\n\n const propagate = excludeModels.length ? excludeModels.indexOf(dataModel) === -1 : true;\n\n propagate && dataModel.handlePropagation(propModel, config);\n\n const children = dataModel._children;\n children.forEach((child) => {\n let [selectionModel, rejectionModel] = applyExistingOperationOnModel(propModel, child);\n propagateIdentifiers(child, [selectionModel, rejectionModel], config, propModelInf);\n });\n};\n\nexport const getRootGroupByModel = (model) => {\n while (model._parent && model._derivation.find(d => d.op !== DM_DERIVATIVES.GROUPBY)) {\n model = model._parent;\n }\n return model;\n};\n\nexport const getRootDataModel = (model) => {\n while (model._parent) {\n model = model._parent;\n }\n return model;\n};\n\nexport const getPathToRootModel = (model, path = []) => {\n while (model._parent) {\n path.push(model);\n model = model._parent;\n }\n return path;\n};\n\nexport const propagateToAllDataModels = (identifiers, rootModels, propagationInf, config) => {\n let criteria;\n let propModel;\n const { propagationNameSpace, propagateToSource } = propagationInf;\n const propagationSourceId = propagationInf.sourceId;\n const propagateInterpolatedValues = config.propagateInterpolatedValues;\n const filterFn = (entry) => {\n const filter = config.filterFn || (() => true);\n return filter(entry, config);\n };\n\n let criterias = [];\n\n if (identifiers === null && config.persistent !== true) {\n criterias = [{\n criteria: []\n }];\n } else {\n let actionCriterias = Object.values(propagationNameSpace.mutableActions);\n if (propagateToSource !== false) {\n actionCriterias = actionCriterias.filter(d => d.config.sourceId !== propagationSourceId);\n }\n\n const filteredCriteria = actionCriterias.filter(filterFn).map(action => action.config.criteria);\n\n const excludeModels = [];\n\n if (propagateToSource !== false) {\n const sourceActionCriterias = Object.values(propagationNameSpace.mutableActions);\n\n sourceActionCriterias.forEach((actionInf) => {\n const actionConf = actionInf.config;\n if (actionConf.applyOnSource === false && actionConf.action === config.action &&\n actionConf.sourceId !== propagationSourceId) {\n excludeModels.push(actionInf.model);\n criteria = sourceActionCriterias.filter(d => d !== actionInf).map(d => d.config.criteria);\n criteria.length && criterias.push({\n criteria,\n models: actionInf.model,\n path: getPathToRootModel(actionInf.model)\n });\n }\n });\n }\n\n\n criteria = [].concat(...[...filteredCriteria, identifiers]).filter(d => d !== null);\n criterias.push({\n criteria,\n excludeModels: [...excludeModels, ...config.excludeModels || []]\n });\n }\n\n const rootModel = rootModels.model;\n\n const propConfig = Object.assign({\n sourceIdentifiers: identifiers,\n propagationSourceId\n }, config);\n\n const rootGroupByModel = rootModels.groupByModel;\n if (propagateInterpolatedValues && rootGroupByModel) {\n propModel = filterPropagationModel(rootGroupByModel, criteria, {\n filterByMeasure: propagateInterpolatedValues\n });\n propagateIdentifiers(rootGroupByModel, propModel, propConfig);\n }\n\n criterias.forEach((inf) => {\n const propagationModel = filterPropagationModel(rootModel, inf.criteria);\n const path = inf.path;\n\n if (path) {\n const filteredModel = getFilteredModel(propagationModel, path.reverse());\n inf.models.handlePropagation(filteredModel, propConfig);\n } else {\n propagateIdentifiers(rootModel, propagationModel, propConfig, {\n excludeModels: inf.excludeModels,\n nonTraversingModel: propagateInterpolatedValues && rootGroupByModel\n });\n }\n });\n};\n\nexport const propagateImmutableActions = (propagationNameSpace, rootModels, propagationInf) => {\n const immutableActions = propagationNameSpace.immutableActions;\n\n for (const action in immutableActions) {\n const actionInf = immutableActions[action];\n const actionConf = actionInf.config;\n const propagationSourceId = propagationInf.config.sourceId;\n const filterImmutableAction = propagationInf.propConfig.filterImmutableAction ?\n propagationInf.propConfig.filterImmutableAction(actionConf, propagationInf.config) : true;\n if (actionConf.sourceId !== propagationSourceId && filterImmutableAction) {\n const criteriaModel = actionConf.criteria;\n propagateToAllDataModels(criteriaModel, rootModels, {\n propagationNameSpace,\n propagateToSource: false,\n sourceId: propagationSourceId\n }, actionConf);\n }\n }\n};\n\nexport const addToPropNamespace = (propagationNameSpace, config = {}, model) => {\n let sourceNamespace;\n const isMutableAction = config.isMutableAction;\n const criteria = config.criteria;\n const key = `${config.action}-${config.sourceId}`;\n\n if (isMutableAction) {\n sourceNamespace = propagationNameSpace.mutableActions;\n } else {\n sourceNamespace = propagationNameSpace.immutableActions;\n }\n\n if (criteria === null) {\n delete sourceNamespace[key];\n } else {\n sourceNamespace[key] = {\n model,\n config\n };\n }\n\n return this;\n};\n","import { FilteringMode } from './enums';\nimport { getUniqueId } from './utils';\nimport { updateFields, cloneWithSelect, cloneWithProject, updateData } from './helper';\nimport { crossProduct, difference, naturalJoinFilter, union } from './operator';\n\n/**\n * Relation provides the definitions of basic operators of relational algebra like *selection*, *projection*, *union*,\n * *difference* etc.\n *\n * It is extended by {@link DataModel} to inherit the functionalities of relational algebra concept.\n *\n * @class\n * @public\n * @module Relation\n * @namespace DataModel\n */\nclass Relation {\n\n /**\n * Creates a new Relation instance by providing underlying data and schema.\n *\n * @private\n *\n * @param {Object | string | Relation} data - The input tabular data in dsv or json format or\n * an existing Relation instance object.\n * @param {Array} schema - An array of data schema.\n * @param {Object} [options] - The optional options.\n */\n constructor (...params) {\n let source;\n\n this._parent = null;\n this._derivation = [];\n this._ancestorDerivation = [];\n this._children = [];\n\n if (params.length === 1 && ((source = params[0]) instanceof Relation)) {\n // parent datamodel was passed as part of source\n this._colIdentifier = source._colIdentifier;\n this._rowDiffset = source._rowDiffset;\n this._dataFormat = source._dataFormat;\n this._parent = source;\n this._partialFieldspace = this._parent._partialFieldspace;\n this._fieldStoreName = getUniqueId();\n this.__calculateFieldspace().calculateFieldsConfig();\n } else {\n updateData(this, ...params);\n this._fieldStoreName = this._partialFieldspace.name;\n this.__calculateFieldspace().calculateFieldsConfig();\n this._propagationNameSpace = {\n mutableActions: {},\n immutableActions: {}\n };\n }\n }\n\n /**\n * Retrieves the {@link Schema | schema} details for every {@link Field | field} as an array.\n *\n * @public\n *\n * @return {Array.} Array of fields schema.\n * ```\n * [\n * { name: 'Name', type: 'dimension' },\n * { name: 'Miles_per_Gallon', type: 'measure', numberFormat: (val) => `${val} miles / gallon` },\n * { name: 'Cylinder', type: 'dimension' },\n * { name: 'Displacement', type: 'measure', defAggFn: 'max' },\n * { name: 'HorsePower', type: 'measure', defAggFn: 'max' },\n * { name: 'Weight_in_lbs', type: 'measure', defAggFn: 'avg', },\n * { name: 'Acceleration', type: 'measure', defAggFn: 'avg' },\n * { name: 'Year', type: 'dimension', subtype: 'datetime', format: '%Y' },\n * { name: 'Origin' }\n * ]\n * ```\n */\n getSchema () {\n return this.getFieldspace().fields.map(d => d.schema());\n }\n\n /**\n * Returns the name of the {@link DataModel} instance. If no name was specified during {@link DataModel}\n * initialization, then it returns a auto-generated name.\n *\n * @public\n *\n * @return {string} Name of the DataModel instance.\n */\n getName() {\n return this._fieldStoreName;\n }\n\n getFieldspace () {\n return this._fieldspace;\n }\n\n __calculateFieldspace () {\n this._fieldspace = updateFields([this._rowDiffset, this._colIdentifier],\n this.getPartialFieldspace(), this._fieldStoreName);\n return this;\n }\n\n getPartialFieldspace () {\n return this._partialFieldspace;\n }\n\n /**\n * Performs {@link link_of_cross_product | cross-product} between two {@link DataModel} instances and returns a\n * new {@link DataModel} instance containing the results. This operation is also called theta join.\n *\n * Cross product takes two set and create one set where each value of one set is paired with each value of another\n * set.\n *\n * This method takes an optional predicate which filters the generated result rows. If the predicate returns true\n * the combined row is included in the resulatant table.\n *\n * @example\n * let originDM = dm.project(['Origin','Origin_Formal_Name']);\n * let carsDM = dm.project(['Name','Miles_per_Gallon','Origin'])\n *\n * console.log(carsDM.join(originDM)));\n *\n * console.log(carsDM.join(originDM,\n * obj => obj.[originDM.getName()].Origin === obj.[carsDM.getName()].Origin));\n *\n * @text\n * This is chained version of `join` operator. `join` can also be used as\n * {@link link_to_join_op | functional operator}.\n *\n * @public\n *\n * @param {DataModel} joinWith - The DataModel to be joined with the current instance DataModel.\n * @param {SelectionPredicate} filterFn - The predicate function that will filter the result of the crossProduct.\n *\n * @return {DataModel} New DataModel instance created after joining.\n */\n join (joinWith, filterFn) {\n return crossProduct(this, joinWith, filterFn);\n }\n\n /**\n * {@link natural_join | Natural join} is a special kind of cross-product join where filtering of rows are performed\n * internally by resolving common fields are from both table and the rows with common value are included.\n *\n * @example\n * let originDM = dm.project(['Origin','Origin_Formal_Name']);\n * let carsDM = dm.project(['Name','Miles_per_Gallon','Origin'])\n *\n * console.log(carsDM.naturalJoin(originDM));\n *\n * @text\n * This is chained version of `naturalJoin` operator. `naturalJoin` can also be used as\n * {@link link_to_join_op | functional operator}.\n *\n * @public\n *\n * @param {DataModel} joinWith - The DataModel with which the current instance of DataModel on which the method is\n * called will be joined.\n * @return {DataModel} New DataModel instance created after joining.\n */\n naturalJoin (joinWith) {\n return crossProduct(this, joinWith, naturalJoinFilter(this, joinWith), true);\n }\n\n /**\n * {@link link_to_union | Union} operation can be termed as vertical stacking of all rows from both the DataModel\n * instances, provided that both of the {@link DataModel} instances should have same column names.\n *\n * @example\n * console.log(EuropeanMakerDM.union(USAMakerDM));\n *\n * @text\n * This is chained version of `naturalJoin` operator. `naturalJoin` can also be used as\n * {@link link_to_join_op | functional operator}.\n *\n * @public\n *\n * @param {DataModel} unionWith - DataModel instance for which union has to be applied with the instance on which\n * the method is called\n *\n * @return {DataModel} New DataModel instance with the result of the operation\n */\n union (unionWith) {\n return union(this, unionWith);\n }\n\n /**\n * {@link link_to_difference | Difference } operation only include rows which are present in the datamodel on which\n * it was called but not on the one passed as argument.\n *\n * @example\n * console.log(highPowerDM.difference(highExpensiveDM));\n *\n * @text\n * This is chained version of `naturalJoin` operator. `naturalJoin` can also be used as\n * {@link link_to_join_op | functional operator}.\n *\n * @public\n *\n * @param {DataModel} differenceWith - DataModel instance for which difference has to be applied with the instance\n * on which the method is called\n * @return {DataModel} New DataModel instance with the result of the operation\n */\n difference (differenceWith) {\n return difference(this, differenceWith);\n }\n\n /**\n * {@link link_to_selection | Selection} is a row filtering operation. It expects a predicate and an optional mode\n * which control which all rows should be included in the resultant DataModel instance.\n *\n * {@link SelectionPredicate} is a function which returns a boolean value. For selection operation the selection\n * function is called for each row of DataModel instance with the current row passed as argument.\n *\n * After executing {@link SelectionPredicate} the rows are labeled as either an entry of selection set or an entry\n * of rejection set.\n *\n * {@link FilteringMode} operates on the selection and rejection set to determine which one would reflect in the\n * resultant datamodel.\n *\n * @warning\n * Selection and rejection set is only a logical idea for concept explanation purpose.\n *\n * @example\n * // with selection mode NORMAL:\n * const normDt = dt.select(fields => fields.Origin.value === \"USA\")\n * console.log(normDt));\n *\n * // with selection mode INVERSE:\n * const inverDt = dt.select(fields => fields.Origin.value === \"USA\", { mode: DataModel.FilteringMode.INVERSE })\n * console.log(inverDt);\n *\n * // with selection mode ALL:\n * const dtArr = dt.select(fields => fields.Origin.value === \"USA\", { mode: DataModel.FilteringMode.ALL })\n * // print the selected parts\n * console.log(dtArr[0]);\n * // print the inverted parts\n * console.log(dtArr[1]);\n *\n * @text\n * This is chained version of `select` operator. `select` can also be used as\n * {@link link_to_join_op | functional operator}.\n *\n * @public\n *\n * @param {Function} selectFn - The predicate function which is called for each row with the current row.\n * ```\n * function (row, i, cloneProvider, store) { ... }\n * ```\n * @param {Object} config - The configuration object to control the inclusion exclusion of a row in resultant\n * DataModel instance.\n * @param {FilteringMode} [config.mode=FilteringMode.NORMAL] - The mode of the selection.\n * @return {DataModel} Returns the new DataModel instance(s) after operation.\n */\n select (selectFn, config) {\n const defConfig = {\n mode: FilteringMode.NORMAL,\n saveChild: true\n };\n config = Object.assign({}, defConfig, config);\n\n const cloneConfig = { saveChild: config.saveChild };\n let oDm;\n\n if (config.mode === FilteringMode.ALL) {\n const selectDm = cloneWithSelect(\n this,\n selectFn,\n { mode: FilteringMode.NORMAL },\n cloneConfig\n );\n const rejectDm = cloneWithSelect(\n this,\n selectFn,\n { mode: FilteringMode.INVERSE },\n cloneConfig\n );\n oDm = [selectDm, rejectDm];\n } else {\n oDm = cloneWithSelect(\n this,\n selectFn,\n config,\n cloneConfig\n );\n }\n\n return oDm;\n }\n\n /**\n * Retrieves a boolean value if the current {@link DataModel} instance has data.\n *\n * @example\n * const schema = [\n * { name: 'CarName', type: 'dimension' },\n * { name: 'HorsePower', type: 'measure' },\n * { name: \"Origin\", type: 'dimension' }\n * ];\n * const data = [];\n *\n * const dt = new DataModel(data, schema);\n * console.log(dt.isEmpty());\n *\n * @public\n *\n * @return {Boolean} True if the datamodel has no data, otherwise false.\n */\n isEmpty () {\n return !this._rowDiffset.length || !this._colIdentifier.length;\n }\n\n /**\n * Creates a clone from the current DataModel instance with child parent relationship.\n *\n * @private\n * @param {boolean} [saveChild=true] - Whether the cloned instance would be recorded in the parent instance.\n * @return {DataModel} - Returns the newly cloned DataModel instance.\n */\n clone (saveChild = true) {\n const clonedDm = new this.constructor(this);\n if (saveChild) {\n clonedDm.setParent(this);\n } else {\n clonedDm.setParent(null);\n }\n return clonedDm;\n }\n\n /**\n * {@link Projection} is filter column (field) operation. It expects list of fields' name and either include those\n * or exclude those based on {@link FilteringMode} on the resultant variable.\n *\n * Projection expects array of fields name based on which it creates the selection and rejection set. All the field\n * whose name is present in array goes in selection set and rest of the fields goes in rejection set.\n *\n * {@link FilteringMode} operates on the selection and rejection set to determine which one would reflect in the\n * resulatant datamodel.\n *\n * @warning\n * Selection and rejection set is only a logical idea for concept explanation purpose.\n *\n * @example\n * const dm = new DataModel(data, schema);\n *\n * // with projection mode NORMAL:\n * const normDt = dt.project([\"Name\", \"HorsePower\"]);\n * console.log(normDt.getData());\n *\n * // with projection mode INVERSE:\n * const inverDt = dt.project([\"Name\", \"HorsePower\"], { mode: DataModel.FilteringMode.INVERSE })\n * console.log(inverDt.getData());\n *\n * // with selection mode ALL:\n * const dtArr = dt.project([\"Name\", \"HorsePower\"], { mode: DataModel.FilteringMode.ALL })\n * // print the normal parts\n * console.log(dtArr[0].getData());\n * // print the inverted parts\n * console.log(dtArr[1].getData());\n *\n * @text\n * This is chained version of `select` operator. `select` can also be used as\n * {@link link_to_join_op | functional operator}.\n *\n * @public\n *\n * @param {Array.} projField - An array of column names in string or regular expression.\n * @param {Object} [config] - An optional config to control the creation of new DataModel\n * @param {FilteringMode} [config.mode=FilteringMode.NORMAL] - Mode of the projection\n *\n * @return {DataModel} Returns the new DataModel instance after operation.\n */\n project (projField, config) {\n const defConfig = {\n mode: FilteringMode.NORMAL,\n saveChild: true\n };\n config = Object.assign({}, defConfig, config);\n const fieldConfig = this.getFieldsConfig();\n const allFields = Object.keys(fieldConfig);\n const { mode } = config;\n\n let normalizedProjField = projField.reduce((acc, field) => {\n if (field.constructor.name === 'RegExp') {\n acc.push(...allFields.filter(fieldName => fieldName.search(field) !== -1));\n } else if (field in fieldConfig) {\n acc.push(field);\n }\n return acc;\n }, []);\n\n normalizedProjField = Array.from(new Set(normalizedProjField)).map(field => field.trim());\n let dataModel;\n\n if (mode === FilteringMode.ALL) {\n let projectionClone = cloneWithProject(this, normalizedProjField, {\n mode: FilteringMode.NORMAL,\n saveChild: config.saveChild\n }, allFields);\n let rejectionClone = cloneWithProject(this, normalizedProjField, {\n mode: FilteringMode.INVERSE,\n saveChild: config.saveChild\n }, allFields);\n dataModel = [projectionClone, rejectionClone];\n } else {\n let projectionClone = cloneWithProject(this, normalizedProjField, config, allFields);\n dataModel = projectionClone;\n }\n\n return dataModel;\n }\n\n getFieldsConfig () {\n return this._fieldConfig;\n }\n\n calculateFieldsConfig () {\n this._fieldConfig = this._fieldspace.fields.reduce((acc, fieldObj, i) => {\n acc[fieldObj.name()] = {\n index: i,\n def: fieldObj.schema(),\n };\n return acc;\n }, {});\n return this;\n }\n\n\n /**\n * Frees up the resources associated with the current DataModel instance and breaks all the links instance has in\n * the DAG.\n *\n * @public\n */\n dispose () {\n this._parent && this._parent.removeChild(this);\n this._parent = null;\n this._children.forEach((child) => {\n child._parent = null;\n });\n this._children = [];\n }\n\n /**\n * Removes the specified child {@link DataModel} from the child list of the current {@link DataModel} instance.\n *\n * @example\n * const schema = [\n * { name: 'Name', type: 'dimension' },\n * { name: 'HorsePower', type: 'measure' },\n * { name: \"Origin\", type: 'dimension' }\n * ];\n *\n * const data = [\n * { Name: \"chevrolet chevelle malibu\", Horsepower: 130, Origin: \"USA\" },\n * { Name: \"citroen ds-21 pallas\", Horsepower: 115, Origin: \"Europe\" },\n * { Name: \"datsun pl510\", Horsepower: 88, Origin: \"Japan\" },\n * { Name: \"amc rebel sst\", Horsepower: 150, Origin: \"USA\"},\n * ]\n *\n * const dt = new DataModel(data, schema);\n *\n * const dt2 = dt.select(fields => fields.Origin.value === \"USA\")\n * dt.removeChild(dt2);\n *\n * @private\n *\n * @param {DataModel} child - Delegates the parent to remove this child.\n */\n removeChild (child) {\n let idx = this._children.findIndex(sibling => sibling === child);\n idx !== -1 ? this._children.splice(idx, 1) : true;\n }\n\n /**\n * Sets the specified {@link DataModel} as a parent for the current {@link DataModel} instance.\n *\n * @param {DataModel} parent - The datamodel instance which will act as parent.\n */\n setParent (parent) {\n this._parent && this._parent.removeChild(this);\n this._parent = parent;\n parent && parent._children.push(this);\n }\n\n /**\n * Returns the parent {@link DataModel} instance.\n *\n * @example\n * const schema = [\n * { name: 'Name', type: 'dimension' },\n * { name: 'HorsePower', type: 'measure' },\n * { name: \"Origin\", type: 'dimension' }\n * ];\n *\n * const data = [\n * { Name: \"chevrolet chevelle malibu\", Horsepower: 130, Origin: \"USA\" },\n * { Name: \"citroen ds-21 pallas\", Horsepower: 115, Origin: \"Europe\" },\n * { Name: \"datsun pl510\", Horsepower: 88, Origin: \"Japan\" },\n * { Name: \"amc rebel sst\", Horsepower: 150, Origin: \"USA\"},\n * ]\n *\n * const dt = new DataModel(data, schema);\n *\n * const dt2 = dt.select(fields => fields.Origin.value === \"USA\");\n * const parentDm = dt2.getParent();\n *\n * @return {DataModel} Returns the parent DataModel instance.\n */\n getParent () {\n return this._parent;\n }\n\n /**\n * Returns the immediate child {@link DataModel} instances.\n *\n * @example\n * const schema = [\n * { name: 'Name', type: 'dimension' },\n * { name: 'HorsePower', type: 'measure' },\n * { name: \"Origin\", type: 'dimension' }\n * ];\n *\n * const data = [\n * { Name: \"chevrolet chevelle malibu\", Horsepower: 130, Origin: \"USA\" },\n * { Name: \"citroen ds-21 pallas\", Horsepower: 115, Origin: \"Europe\" },\n * { Name: \"datsun pl510\", Horsepower: 88, Origin: \"Japan\" },\n * { Name: \"amc rebel sst\", Horsepower: 150, Origin: \"USA\"},\n * ]\n *\n * const dt = new DataModel(data, schema);\n *\n * const childDm1 = dt.select(fields => fields.Origin.value === \"USA\");\n * const childDm2 = dt.select(fields => fields.Origin.value === \"Japan\");\n * const childDm3 = dt.groupBy([\"Origin\"]);\n *\n * @return {DataModel[]} Returns the immediate child DataModel instances.\n */\n getChildren () {\n return this._children;\n }\n\n /**\n * Returns the in-between operation meta data while creating the current {@link DataModel} instance.\n *\n * @example\n * const schema = [\n * { name: 'Name', type: 'dimension' },\n * { name: 'HorsePower', type: 'measure' },\n * { name: \"Origin\", type: 'dimension' }\n * ];\n *\n * const data = [\n * { Name: \"chevrolet chevelle malibu\", Horsepower: 130, Origin: \"USA\" },\n * { Name: \"citroen ds-21 pallas\", Horsepower: 115, Origin: \"Europe\" },\n * { Name: \"datsun pl510\", Horsepower: 88, Origin: \"Japan\" },\n * { Name: \"amc rebel sst\", Horsepower: 150, Origin: \"USA\"},\n * ]\n *\n * const dt = new DataModel(data, schema);\n * const dt2 = dt.select(fields => fields.Origin.value === \"USA\");\n * const dt3 = dt2.groupBy([\"Origin\"]);\n * const derivations = dt3.getDerivations();\n *\n * @return {Any[]} Returns the derivation meta data.\n */\n getDerivations () {\n return this._derivation;\n }\n\n /**\n * Returns the in-between operation meta data happened from root {@link DataModel} to current instance.\n *\n * @example\n * const schema = [\n * { name: 'Name', type: 'dimension' },\n * { name: 'HorsePower', type: 'measure' },\n * { name: \"Origin\", type: 'dimension' }\n * ];\n *\n * const data = [\n * { Name: \"chevrolet chevelle malibu\", Horsepower: 130, Origin: \"USA\" },\n * { Name: \"citroen ds-21 pallas\", Horsepower: 115, Origin: \"Europe\" },\n * { Name: \"datsun pl510\", Horsepower: 88, Origin: \"Japan\" },\n * { Name: \"amc rebel sst\", Horsepower: 150, Origin: \"USA\"},\n * ]\n *\n * const dt = new DataModel(data, schema);\n * const dt2 = dt.select(fields => fields.Origin.value === \"USA\");\n * const dt3 = dt2.groupBy([\"Origin\"]);\n * const ancDerivations = dt3.getAncestorDerivations();\n *\n * @return {Any[]} Returns the previous derivation meta data.\n */\n getAncestorDerivations () {\n return this._ancestorDerivation;\n }\n}\n\nexport default Relation;\n","/* eslint-disable default-case */\n\nimport { FieldType, DimensionSubtype, DataFormat } from './enums';\nimport {\n persistDerivations,\n getRootGroupByModel,\n propagateToAllDataModels,\n getRootDataModel,\n propagateImmutableActions,\n addToPropNamespace,\n sanitizeUnitSchema\n} from './helper';\nimport { DM_DERIVATIVES, PROPAGATION } from './constants';\nimport {\n dataBuilder,\n rowDiffsetIterator,\n groupBy\n} from './operator';\nimport { createBinnedFieldData } from './operator/bucket-creator';\nimport Relation from './relation';\nimport reducerStore from './utils/reducer-store';\nimport { createFields } from './field-creator';\nimport InvalidAwareTypes from './invalid-aware-types';\n\n/**\n * DataModel is an in-browser representation of tabular data. It supports\n * {@link https://en.wikipedia.org/wiki/Relational_algebra | relational algebra} operators as well as generic data\n * processing opearators.\n * DataModel extends {@link Relation} class which defines all the relational algebra opreators. DataModel gives\n * definition of generic data processing operators which are not relational algebra complient.\n *\n * @public\n * @class\n * @extends Relation\n * @memberof Datamodel\n */\nclass DataModel extends Relation {\n /**\n * Creates a new DataModel instance by providing data and schema. Data could be in the form of\n * - Flat JSON\n * - DSV String\n * - 2D Array\n *\n * By default DataModel finds suitable adapter to serialize the data. DataModel also expects a\n * {@link Schema | schema} for identifying the variables present in data.\n *\n * @constructor\n * @example\n * const data = loadData('cars.csv');\n * const schema = [\n * { name: 'Name', type: 'dimension' },\n * { name: 'Miles_per_Gallon', type: 'measure', unit : 'cm', scale: '1000', numberformat: val => `${val}G`},\n * { name: 'Cylinders', type: 'dimension' },\n * { name: 'Displacement', type: 'measure' },\n * { name: 'Horsepower', type: 'measure' },\n * { name: 'Weight_in_lbs', type: 'measure' },\n * { name: 'Acceleration', type: 'measure' },\n * { name: 'Year', type: 'dimension', subtype: 'datetime', format: '%Y' },\n * { name: 'Origin', type: 'dimension' }\n * ];\n * const dm = new DataModel(data, schema, { name: 'Cars' });\n * table(dm);\n *\n * @public\n *\n * @param {Array. | string | Array.} data Input data in any of the mentioned formats\n * @param {Array.} schema Defination of the variables. Order of the variables in data and order of the\n * variables in schema has to be same.\n * @param {object} [options] Optional arguments to specify more settings regarding the creation part\n * @param {string} [options.name] Name of the datamodel instance. If no name is given an auto generated name is\n * assigned to the instance.\n * @param {string} [options.fieldSeparator=','] specify field separator type if the data is of type dsv string.\n */\n constructor (...args) {\n super(...args);\n\n this._onPropagation = [];\n }\n\n /**\n * Reducers are simple functions which reduces an array of numbers to a representative number of the set.\n * Like an array of numbers `[10, 20, 5, 15]` can be reduced to `12.5` if average / mean reducer function is\n * applied. All the measure fields in datamodel (variables in data) needs a reducer to handle aggregation.\n *\n * @public\n *\n * @return {ReducerStore} Singleton instance of {@link ReducerStore}.\n */\n static get Reducers () {\n return reducerStore;\n }\n\n /**\n * Configure null, undefined, invalid values in the source data\n *\n * @public\n *\n * @param {Object} [config] - Configuration to control how null, undefined and non-parsable values are\n * represented in DataModel.\n * @param {string} [config.undefined] - Define how an undefined value will be represented.\n * @param {string} [config.null] - Define how a null value will be represented.\n * @param {string} [config.invalid] - Define how a non-parsable value will be represented.\n */\n static configureInvalidAwareTypes (config) {\n return InvalidAwareTypes.invalidAwareVals(config);\n }\n\n /**\n * Retrieve the data attached to an instance in JSON format.\n *\n * @example\n * // DataModel instance is already prepared and assigned to dm variable\n * const data = dm.getData({\n * order: 'column',\n * formatter: {\n * origin: (val) => val === 'European Union' ? 'EU' : val;\n * }\n * });\n * console.log(data);\n *\n * @public\n *\n * @param {Object} [options] Options to control how the raw data is to be returned.\n * @param {string} [options.order='row'] Defines if data is retieved in row order or column order. Possible values\n * are `'rows'` and `'columns'`\n * @param {Function} [options.formatter=null] Formats the output data. This expects an object, where the keys are\n * the name of the variable needs to be formatted. The formatter function is called for each row passing the\n * value of the cell for a particular row as arguments. The formatter is a function in the form of\n * `function (value, rowId, schema) => { ... }`\n * Know more about {@link Fomatter}.\n *\n * @return {Array} Returns a multidimensional array of the data with schema. The return format looks like\n * ```\n * {\n * data,\n * schema\n * }\n * ```\n */\n getData (options) {\n const defOptions = {\n order: 'row',\n formatter: null,\n withUid: false,\n getAllFields: false,\n sort: []\n };\n options = Object.assign({}, defOptions, options);\n const fields = this.getPartialFieldspace().fields;\n\n const dataGenerated = dataBuilder.call(\n this,\n this.getPartialFieldspace().fields,\n this._rowDiffset,\n options.getAllFields ? fields.map(d => d.name()).join() : this._colIdentifier,\n options.sort,\n {\n columnWise: options.order === 'column',\n addUid: !!options.withUid\n }\n );\n\n if (!options.formatter) {\n return dataGenerated;\n }\n\n const { formatter } = options;\n const { data, schema, uids } = dataGenerated;\n const fieldNames = schema.map((e => e.name));\n const fmtFieldNames = Object.keys(formatter);\n const fmtFieldIdx = fmtFieldNames.reduce((acc, next) => {\n const idx = fieldNames.indexOf(next);\n if (idx !== -1) {\n acc.push([idx, formatter[next]]);\n }\n return acc;\n }, []);\n\n if (options.order === 'column') {\n fmtFieldIdx.forEach((elem) => {\n const fIdx = elem[0];\n const fmtFn = elem[1];\n\n data[fIdx].forEach((datum, datumIdx) => {\n data[fIdx][datumIdx] = fmtFn.call(\n undefined,\n datum,\n uids[datumIdx],\n schema[fIdx]\n );\n });\n });\n } else {\n data.forEach((datum, datumIdx) => {\n fmtFieldIdx.forEach((elem) => {\n const fIdx = elem[0];\n const fmtFn = elem[1];\n\n datum[fIdx] = fmtFn.call(\n undefined,\n datum[fIdx],\n uids[datumIdx],\n schema[fIdx]\n );\n });\n });\n }\n\n return dataGenerated;\n }\n\n /**\n * Groups the data using particular dimensions and by reducing measures. It expects a list of dimensions using which\n * it projects the datamodel and perform aggregations to reduce the duplicate tuples. Refer this\n * {@link link_to_one_example_with_group_by | document} to know the intuition behind groupBy.\n *\n * DataModel by default provides definition of few {@link reducer | Reducers}.\n * {@link ReducerStore | User defined reducers} can also be registered.\n *\n * This is the chained implementation of `groupBy`.\n * `groupBy` also supports {@link link_to_compose_groupBy | composability}\n *\n * @example\n * const groupedDM = dm.groupBy(['Year'], { horsepower: 'max' } );\n * console.log(groupedDm);\n *\n * @public\n *\n * @param {Array.} fieldsArr - Array containing the name of dimensions\n * @param {Object} [reducers={}] - A map whose key is the variable name and value is the name of the reducer. If its\n * not passed, or any variable is ommitted from the object, default aggregation function is used from the\n * schema of the variable.\n *\n * @return {DataModel} Returns a new DataModel instance after performing the groupby.\n */\n groupBy (fieldsArr, reducers = {}, config = { saveChild: true }) {\n const groupByString = `${fieldsArr.join()}`;\n let params = [this, fieldsArr, reducers];\n const newDataModel = groupBy(...params);\n\n persistDerivations(\n this,\n newDataModel,\n DM_DERIVATIVES.GROUPBY,\n { fieldsArr, groupByString, defaultReducer: reducerStore.defaultReducer() },\n reducers\n );\n\n if (config.saveChild) {\n newDataModel.setParent(this);\n } else {\n newDataModel.setParent(null);\n }\n\n return newDataModel;\n }\n\n /**\n * Performs sorting operation on the current {@link DataModel} instance according to the specified sorting details.\n * Like every other operator it doesn't mutate the current DataModel instance on which it was called, instead\n * returns a new DataModel instance containing the sorted data.\n *\n * DataModel support multi level sorting by listing the variables using which sorting needs to be performed and\n * the type of sorting `ASC` or `DESC`.\n *\n * In the following example, data is sorted by `Origin` field in `DESC` order in first level followed by another\n * level of sorting by `Acceleration` in `ASC` order.\n *\n * @example\n * // here dm is the pre-declared DataModel instance containing the data of 'cars.json' file\n * let sortedDm = dm.sort([\n * [\"Origin\", \"DESC\"]\n * [\"Acceleration\"] // Default value is ASC\n * ]);\n *\n * console.log(dm.getData());\n * console.log(sortedDm.getData());\n *\n * // Sort with a custom sorting function\n * sortedDm = dm.sort([\n * [\"Origin\", \"DESC\"]\n * [\"Acceleration\", (a, b) => a - b] // Custom sorting function\n * ]);\n *\n * console.log(dm.getData());\n * console.log(sortedDm.getData());\n *\n * @text\n * DataModel also provides another sorting mechanism out of the box where sort is applied to a variable using\n * another variable which determines the order.\n * Like the above DataModel contains three fields `Origin`, `Name` and `Acceleration`. Now, the data in this\n * model can be sorted by `Origin` field according to the average value of all `Acceleration` for a\n * particular `Origin` value.\n *\n * @example\n * // here dm is the pre-declared DataModel instance containing the data of 'cars.json' file\n * const sortedDm = dm.sort([\n * ['Origin', ['Acceleration', (a, b) => avg(...a.Acceleration) - avg(...b.Acceleration)]]\n * ]);\n *\n * console.log(dm.getData());\n * console.log(sortedDm.getData());\n *\n * @public\n *\n * @param {Array.} sortingDetails - Sorting details based on which the sorting will be performed.\n * @return {DataModel} Returns a new instance of DataModel with sorted data.\n */\n sort (sortingDetails, config = { saveChild: false }) {\n const rawData = this.getData({\n order: 'row',\n sort: sortingDetails\n });\n const header = rawData.schema.map(field => field.name);\n const dataInCSVArr = [header].concat(rawData.data);\n\n const sortedDm = new this.constructor(dataInCSVArr, rawData.schema, { dataFormat: 'DSVArr' });\n\n persistDerivations(\n this,\n sortedDm,\n DM_DERIVATIVES.SORT,\n config,\n sortingDetails\n );\n\n if (config.saveChild) {\n sortedDm.setParent(this);\n } else {\n sortedDm.setParent(null);\n }\n\n return sortedDm;\n }\n\n /**\n * Performs the serialization operation on the current {@link DataModel} instance according to the specified data\n * type. When an {@link DataModel} instance is created, it de-serializes the input data into its internal format,\n * and during its serialization process, it converts its internal data format to the specified data type and returns\n * that data regardless what type of data is used during the {@link DataModel} initialization.\n *\n * @example\n * // here dm is the pre-declared DataModel instance.\n * const csvData = dm.serialize(DataModel.DataFormat.DSV_STR, { fieldSeparator: \",\" });\n * console.log(csvData); // The csv formatted data.\n *\n * const jsonData = dm.serialize(DataModel.DataFormat.FLAT_JSON);\n * console.log(jsonData); // The json data.\n *\n * @public\n *\n * @param {string} type - The data type name for serialization.\n * @param {Object} options - The optional option object.\n * @param {string} options.fieldSeparator - The field separator character for DSV data type.\n * @return {Array|string} Returns the serialized data.\n */\n serialize (type, options) {\n type = type || this._dataFormat;\n options = Object.assign({}, { fieldSeparator: ',' }, options);\n\n const fields = this.getFieldspace().fields;\n const colData = fields.map(f => f.formattedData());\n const rowsCount = colData[0].length;\n let serializedData;\n let rowIdx;\n let colIdx;\n\n if (type === DataFormat.FLAT_JSON) {\n serializedData = [];\n for (rowIdx = 0; rowIdx < rowsCount; rowIdx++) {\n const row = {};\n for (colIdx = 0; colIdx < fields.length; colIdx++) {\n row[fields[colIdx].name()] = colData[colIdx][rowIdx];\n }\n serializedData.push(row);\n }\n } else if (type === DataFormat.DSV_STR) {\n serializedData = [fields.map(f => f.name()).join(options.fieldSeparator)];\n for (rowIdx = 0; rowIdx < rowsCount; rowIdx++) {\n const row = [];\n for (colIdx = 0; colIdx < fields.length; colIdx++) {\n row.push(colData[colIdx][rowIdx]);\n }\n serializedData.push(row.join(options.fieldSeparator));\n }\n serializedData = serializedData.join('\\n');\n } else if (type === DataFormat.DSV_ARR) {\n serializedData = [fields.map(f => f.name())];\n for (rowIdx = 0; rowIdx < rowsCount; rowIdx++) {\n const row = [];\n for (colIdx = 0; colIdx < fields.length; colIdx++) {\n row.push(colData[colIdx][rowIdx]);\n }\n serializedData.push(row);\n }\n } else {\n throw new Error(`Data type ${type} is not supported`);\n }\n\n return serializedData;\n }\n\n addField (field) {\n const fieldName = field.name();\n this._colIdentifier += `,${fieldName}`;\n const partialFieldspace = this._partialFieldspace;\n\n if (!partialFieldspace.fieldsObj()[field.name()]) {\n partialFieldspace.fields.push(field);\n } else {\n const fieldIndex = partialFieldspace.fields.findIndex(fieldinst => fieldinst.name() === fieldName);\n fieldIndex >= 0 && (partialFieldspace.fields[fieldIndex] = field);\n }\n\n // flush out cached namespace values on addition of new fields\n partialFieldspace._cachedFieldsObj = null;\n partialFieldspace._cachedDimension = null;\n partialFieldspace._cachedMeasure = null;\n\n this.__calculateFieldspace().calculateFieldsConfig();\n return this;\n }\n\n /**\n * Creates a new variable calculated from existing variables. This method expects the definition of the newly created\n * variable and a function which resolves the value of the new variable from existing variables.\n *\n * Can create a new measure based on existing variables:\n * @example\n * // DataModel already prepared and assigned to dm variable;\n * const newDm = dataModel.calculateVariable({\n * name: 'powerToWeight',\n * type: 'measure'\n * }, ['horsepower', 'weight_in_lbs', (hp, weight) => hp / weight ]);\n *\n *\n * Can create a new dimension based on existing variables:\n * @example\n * // DataModel already prepared and assigned to dm variable;\n * const child = dataModel.calculateVariable(\n * {\n * name: 'Efficiency',\n * type: 'dimension'\n * }, ['horsepower', (hp) => {\n * if (hp < 80) { return 'low'; },\n * else if (hp < 120) { return 'moderate'; }\n * else { return 'high' }\n * }]);\n *\n * @public\n *\n * @param {Object} schema - The schema of newly defined variable.\n * @param {Array.} dependency - An array containing the dependency variable names and a resolver\n * function as the last element.\n * @param {Object} config - An optional config object.\n * @param {boolean} [config.saveChild] - Whether the newly created DataModel will be a child.\n * @param {boolean} [config.replaceVar] - Whether the newly created variable will replace the existing variable.\n * @return {DataModel} Returns an instance of DataModel with the new field.\n */\n calculateVariable (schema, dependency, config) {\n schema = sanitizeUnitSchema(schema);\n config = Object.assign({}, { saveChild: true, replaceVar: false }, config);\n\n const fieldsConfig = this.getFieldsConfig();\n const depVars = dependency.slice(0, dependency.length - 1);\n const retrieveFn = dependency[dependency.length - 1];\n\n if (fieldsConfig[schema.name] && !config.replaceVar) {\n throw new Error(`${schema.name} field already exists in datamodel`);\n }\n\n const depFieldIndices = depVars.map((field) => {\n const fieldSpec = fieldsConfig[field];\n if (!fieldSpec) {\n // @todo dont throw error here, use warning in production mode\n throw new Error(`${field} is not a valid column name.`);\n }\n return fieldSpec.index;\n });\n\n const clone = this.clone(config.saveChild);\n\n const fs = clone.getFieldspace().fields;\n const suppliedFields = depFieldIndices.map(idx => fs[idx]);\n\n let cachedStore = {};\n let cloneProvider = () => this.detachedRoot();\n\n const computedValues = [];\n rowDiffsetIterator(clone._rowDiffset, (i) => {\n const fieldsData = suppliedFields.map(field => field.partialField.data[i]);\n computedValues[i] = retrieveFn(...fieldsData, i, cloneProvider, cachedStore);\n });\n const [field] = createFields([computedValues], [schema], [schema.name]);\n clone.addField(field);\n\n persistDerivations(\n this,\n clone,\n DM_DERIVATIVES.CAL_VAR,\n { config: schema, fields: depVars },\n retrieveFn\n );\n\n return clone;\n }\n\n /**\n * Propagates changes across all the connected DataModel instances.\n *\n * @param {Array} identifiers - A list of identifiers that were interacted with.\n * @param {Object} payload - The interaction specific details.\n *\n * @return {DataModel} DataModel instance.\n */\n propagate (identifiers, config = {}, addToNameSpace, propConfig = {}) {\n const isMutableAction = config.isMutableAction;\n const propagationSourceId = config.sourceId;\n const payload = config.payload;\n const rootModel = getRootDataModel(this);\n const propagationNameSpace = rootModel._propagationNameSpace;\n const rootGroupByModel = getRootGroupByModel(this);\n const rootModels = {\n groupByModel: rootGroupByModel,\n model: rootModel\n };\n\n addToNameSpace && addToPropNamespace(propagationNameSpace, config, this);\n propagateToAllDataModels(identifiers, rootModels, { propagationNameSpace, sourceId: propagationSourceId },\n Object.assign({\n payload\n }, config));\n\n if (isMutableAction) {\n propagateImmutableActions(propagationNameSpace, rootModels, {\n config,\n propConfig\n }, this);\n }\n\n return this;\n }\n\n /**\n * Associates a callback with an event name.\n *\n * @param {string} eventName - The name of the event.\n * @param {Function} callback - The callback to invoke.\n * @return {DataModel} Returns this current DataModel instance itself.\n */\n on (eventName, callback) {\n switch (eventName) {\n case PROPAGATION:\n this._onPropagation.push(callback);\n break;\n }\n return this;\n }\n\n /**\n * Unsubscribes the callbacks for the provided event name.\n *\n * @param {string} eventName - The name of the event to unsubscribe.\n * @return {DataModel} Returns the current DataModel instance itself.\n */\n unsubscribe (eventName) {\n switch (eventName) {\n case PROPAGATION:\n this._onPropagation = [];\n break;\n\n }\n return this;\n }\n\n /**\n * This method is used to invoke the method associated with propagation.\n *\n * @param {Object} payload The interaction payload.\n * @param {DataModel} identifiers The propagated DataModel.\n * @memberof DataModel\n */\n handlePropagation (propModel, payload) {\n let propListeners = this._onPropagation;\n propListeners.forEach(fn => fn.call(this, propModel, payload));\n }\n\n /**\n * Performs the binning operation on a measure field based on the binning configuration. Binning means discretizing\n * values of a measure. Binning configuration contains an array; subsequent values from the array marks the boundary\n * of buckets in [inclusive, exclusive) range format. This operation does not mutate the subject measure field,\n * instead, it creates a new field (variable) of type dimension and subtype binned.\n *\n * Binning can be configured by\n * - providing custom bin configuration with non-uniform buckets,\n * - providing bins count,\n * - providing each bin size,\n *\n * When custom `buckets` are provided as part of binning configuration:\n * @example\n * // DataModel already prepared and assigned to dm variable\n * const config = { name: 'binnedHP', buckets: [30, 80, 100, 110] }\n * const binnedDM = dataModel.bin('horsepower', config);\n *\n * @text\n * When `binsCount` is defined as part of binning configuration:\n * @example\n * // DataModel already prepared and assigned to dm variable\n * const config = { name: 'binnedHP', binsCount: 5, start: 0, end: 100 }\n * const binDM = dataModel.bin('horsepower', config);\n *\n * @text\n * When `binSize` is defined as part of binning configuration:\n * @example\n * // DataModel already prepared and assigned to dm variable\n * const config = { name: 'binnedHorsepower', binSize: 20, start: 5}\n * const binDM = dataModel.bin('horsepower', config);\n *\n * @public\n *\n * @param {string} measureFieldName - The name of the target measure field.\n * @param {Object} config - The config object.\n * @param {string} [config.name] - The name of the new field which will be created.\n * @param {string} [config.buckets] - An array containing the bucket ranges.\n * @param {string} [config.binSize] - The size of each bin. It is ignored when buckets are given.\n * @param {string} [config.binsCount] - The total number of bins to generate. It is ignored when buckets are given.\n * @param {string} [config.start] - The start value of the bucket ranges. It is ignored when buckets are given.\n * @param {string} [config.end] - The end value of the bucket ranges. It is ignored when buckets are given.\n * @return {DataModel} Returns a new {@link DataModel} instance with the new field.\n */\n bin (measureFieldName, config) {\n const fieldsConfig = this.getFieldsConfig();\n\n if (!fieldsConfig[measureFieldName]) {\n throw new Error(`Field ${measureFieldName} doesn't exist`);\n }\n\n const binFieldName = config.name || `${measureFieldName}_binned`;\n\n if (fieldsConfig[binFieldName]) {\n throw new Error(`Field ${binFieldName} already exists`);\n }\n\n const measureField = this.getFieldspace().fieldsObj()[measureFieldName];\n const { binnedData, bins } = createBinnedFieldData(measureField, this._rowDiffset, config);\n\n const binField = createFields([binnedData], [\n {\n name: binFieldName,\n type: FieldType.DIMENSION,\n subtype: DimensionSubtype.BINNED,\n bins\n }], [binFieldName])[0];\n\n const clone = this.clone(config.saveChild);\n clone.addField(binField);\n\n persistDerivations(\n this,\n clone,\n DM_DERIVATIVES.BIN,\n { measureFieldName, config, binFieldName },\n null\n );\n\n return clone;\n }\n\n /**\n * Creates a new {@link DataModel} instance with completely detached root from current {@link DataModel} instance,\n * the new {@link DataModel} instance has no parent-children relationship with the current one, but has same data as\n * the current one.\n * This API is useful when a completely different {@link DataModel} but with same data as the current instance is\n * needed.\n *\n * @example\n * const dm = new DataModel(data, schema);\n * const detachedDm = dm.detachedRoot();\n *\n * // has different namespace\n * console.log(dm.getPartialFieldspace().name);\n * console.log(detachedDm.getPartialFieldspace().name);\n *\n * // has same data\n * console.log(dm.getData());\n * console.log(detachedDm.getData());\n *\n * @public\n *\n * @return {DataModel} Returns a detached {@link DataModel} instance.\n */\n detachedRoot () {\n const data = this.serialize(DataFormat.FLAT_JSON);\n const schema = this.getSchema();\n\n return new DataModel(data, schema);\n }\n}\n\nexport default DataModel;\n","import { extend2 } from '../utils';\nimport { rowDiffsetIterator } from './row-diffset-iterator';\nimport DataModel from '../export';\nimport reducerStore from '../utils/reducer-store';\nimport { defaultReducerName } from './group-by-function';\nimport { FieldType } from '../enums';\n\n/**\n * This function sanitize the user given field and return a common Array structure field\n * list\n * @param {DataModel} dataModel the dataModel operating on\n * @param {Array} fieldArr user input of field Array\n * @return {Array} arrays of field name\n */\nfunction getFieldArr (dataModel, fieldArr) {\n const retArr = [];\n const fieldStore = dataModel.getFieldspace();\n const dimensions = fieldStore.getDimension();\n\n Object.entries(dimensions).forEach(([key]) => {\n if (fieldArr && fieldArr.length) {\n if (fieldArr.indexOf(key) !== -1) {\n retArr.push(key);\n }\n } else {\n retArr.push(key);\n }\n });\n\n return retArr;\n}\n\n/**\n * This sanitize the reducer provide by the user and create a common type of object.\n * user can give function Also\n * @param {DataModel} dataModel dataModel to worked on\n * @param {Object|function} [reducers={}] reducer provided by the users\n * @return {Object} object containing reducer function for every measure\n */\nfunction getReducerObj (dataModel, reducers = {}) {\n const retObj = {};\n const fieldStore = dataModel.getFieldspace();\n const measures = fieldStore.getMeasure();\n const defReducer = reducerStore.defaultReducer();\n\n Object.keys(measures).forEach((measureName) => {\n if (typeof reducers[measureName] !== 'string') {\n reducers[measureName] = measures[measureName].defAggFn();\n }\n const reducerFn = reducerStore.resolve(reducers[measureName]);\n if (reducerFn) {\n retObj[measureName] = reducerFn;\n } else {\n retObj[measureName] = defReducer;\n reducers[measureName] = defaultReducerName;\n }\n });\n return retObj;\n}\n\n/**\n * main function which perform the group-by operations which reduce the measures value is the\n * fields are common according to the reducer function provided\n * @param {DataModel} dataModel the dataModel to worked\n * @param {Array} fieldArr fields according to which the groupby should be worked\n * @param {Object|Function} reducers reducers function\n * @param {DataModel} existingDataModel Existing datamodel instance\n * @return {DataModel} new dataModel with the group by\n */\nfunction groupBy (dataModel, fieldArr, reducers, existingDataModel) {\n const sFieldArr = getFieldArr(dataModel, fieldArr);\n const reducerObj = getReducerObj(dataModel, reducers);\n const fieldStore = dataModel.getFieldspace();\n const fieldStoreObj = fieldStore.fieldsObj();\n const dbName = fieldStore.name;\n const dimensionArr = [];\n const measureArr = [];\n const schema = [];\n const hashMap = {};\n const data = [];\n let newDataModel;\n\n // Prepare the schema\n Object.entries(fieldStoreObj).forEach(([key, value]) => {\n if (sFieldArr.indexOf(key) !== -1 || reducerObj[key]) {\n schema.push(extend2({}, value.schema()));\n\n switch (value.schema().type) {\n case FieldType.MEASURE:\n measureArr.push(key);\n break;\n default:\n case FieldType.DIMENSION:\n dimensionArr.push(key);\n }\n }\n });\n // Prepare the data\n let rowCount = 0;\n rowDiffsetIterator(dataModel._rowDiffset, (i) => {\n let hash = '';\n dimensionArr.forEach((_) => {\n hash = `${hash}-${fieldStoreObj[_].partialField.data[i]}`;\n });\n if (hashMap[hash] === undefined) {\n hashMap[hash] = rowCount;\n data.push({});\n dimensionArr.forEach((_) => {\n data[rowCount][_] = fieldStoreObj[_].partialField.data[i];\n });\n measureArr.forEach((_) => {\n data[rowCount][_] = [fieldStoreObj[_].partialField.data[i]];\n });\n rowCount += 1;\n } else {\n measureArr.forEach((_) => {\n data[hashMap[hash]][_].push(fieldStoreObj[_].partialField.data[i]);\n });\n }\n });\n\n // reduction\n let cachedStore = {};\n let cloneProvider = () => dataModel.detachedRoot();\n data.forEach((row) => {\n const tuple = row;\n measureArr.forEach((_) => {\n tuple[_] = reducerObj[_](row[_], cloneProvider, cachedStore);\n });\n });\n if (existingDataModel) {\n existingDataModel.__calculateFieldspace();\n newDataModel = existingDataModel;\n }\n else {\n newDataModel = new DataModel(data, schema, { name: dbName });\n }\n return newDataModel;\n}\n\nexport { groupBy, getFieldArr, getReducerObj };\n","import { rowDiffsetIterator } from './row-diffset-iterator';\nimport InvalidAwareTypes from '../invalid-aware-types';\n\nconst generateBuckets = (binSize, start, end) => {\n const buckets = [];\n let next = start;\n\n while (next < end) {\n buckets.push(next);\n next += binSize;\n }\n buckets.push(next);\n\n return buckets;\n};\n\nconst findBucketRange = (bucketRanges, value) => {\n let leftIdx = 0;\n let rightIdx = bucketRanges.length - 1;\n let midIdx;\n let range;\n\n // Here use binary search as the bucketRanges is a sorted array\n while (leftIdx <= rightIdx) {\n midIdx = leftIdx + Math.floor((rightIdx - leftIdx) / 2);\n range = bucketRanges[midIdx];\n\n if (value >= range.start && value < range.end) {\n return range;\n } else if (value >= range.end) {\n leftIdx = midIdx + 1;\n } else if (value < range.start) {\n rightIdx = midIdx - 1;\n }\n }\n\n return null;\n};\n\n /**\n * Creates the bin data from input measure field and supplied configs.\n *\n * @param {Measure} measureField - The Measure field instance.\n * @param {string} rowDiffset - The datamodel rowDiffset values.\n * @param {Object} config - The config object.\n * @return {Object} Returns the binned data and the corresponding bins.\n */\nexport function createBinnedFieldData (measureField, rowDiffset, config) {\n let { buckets, binsCount, binSize, start, end } = config;\n const [dMin, dMax] = measureField.domain();\n\n if (!buckets) {\n start = (start !== 0 && (!start || start > dMin)) ? dMin : start;\n end = (end !== 0 && (!end || end < dMax)) ? (dMax + 1) : end;\n\n if (binsCount) {\n binSize = Math.ceil(Math.abs(end - start) / binsCount);\n }\n\n buckets = generateBuckets(binSize, start, end);\n }\n\n if (buckets[0] > dMin) {\n buckets.unshift(dMin);\n }\n if (buckets[buckets.length - 1] <= dMax) {\n buckets.push(dMax + 1);\n }\n\n const bucketRanges = [];\n for (let i = 0; i < buckets.length - 1; i++) {\n bucketRanges.push({\n start: buckets[i],\n end: buckets[i + 1]\n });\n }\n\n const binnedData = [];\n rowDiffsetIterator(rowDiffset, (i) => {\n const datum = measureField.partialField.data[i];\n if (datum instanceof InvalidAwareTypes) {\n binnedData.push(datum);\n return;\n }\n\n const range = findBucketRange(bucketRanges, datum);\n binnedData.push(`${range.start}-${range.end}`);\n });\n\n return { binnedData, bins: buckets };\n}\n","import { fnList } from '../operator/group-by-function';\n\nexport const { sum, avg, min, max, first, last, count, std: sd } = fnList;\n","import DataModel from './datamodel';\nimport {\n compose,\n bin,\n select,\n project,\n groupby as groupBy,\n calculateVariable,\n sort,\n crossProduct,\n difference,\n naturalJoin,\n leftOuterJoin,\n rightOuterJoin,\n fullOuterJoin,\n union\n} from './operator';\nimport * as Stats from './stats';\nimport * as enums from './enums';\nimport { DateTimeFormatter } from './utils';\nimport { DataFormat, FilteringMode, DM_DERIVATIVES } from './constants';\nimport InvalidAwareTypes from './invalid-aware-types';\nimport pkg from '../package.json';\n\nconst Operators = {\n compose,\n bin,\n select,\n project,\n groupBy,\n calculateVariable,\n sort,\n crossProduct,\n difference,\n naturalJoin,\n leftOuterJoin,\n rightOuterJoin,\n fullOuterJoin,\n union\n};\n\nconst version = pkg.version;\nObject.assign(DataModel, {\n Operators,\n Stats,\n DM_DERIVATIVES,\n DateTimeFormatter,\n DataFormat,\n FilteringMode,\n InvalidAwareTypes,\n version\n}, enums);\n\nexport default DataModel;\n","/**\n * Wrapper on calculateVariable() method of DataModel to behave\n * the pure-function functionality.\n *\n * @param {Array} args - The argument list.\n * @return {any} Returns the returned value of calling function.\n */\nexport const calculateVariable = (...args) => dm => dm.calculateVariable(...args);\n\n/**\n * Wrapper on sort() method of DataModel to behave\n * the pure-function functionality.\n *\n * @param {Array} args - The argument list.\n * @return {any} Returns the returned value of calling function.\n */\nexport const sort = (...args) => dm => dm.sort(...args);\n","import { crossProduct } from './cross-product';\nimport { naturalJoinFilter } from './natural-join-filter-function';\n\nexport function naturalJoin (dataModel1, dataModel2) {\n return crossProduct(dataModel1, dataModel2, naturalJoinFilter(dataModel1, dataModel2), true);\n}\n","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"hyperdis\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"hyperdis\"] = factory();\n\telse\n\t\troot[\"hyperdis\"] = factory();\n})(window, function() {\nreturn "," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 0);\n","const makeEntry = (arr, sCon) => {\n arr.forEach((elem) => {\n if (elem === undefined || elem === null) {\n return;\n }\n sCon[elem] = 1;\n });\n};\n\nexport default class ForeignSet {\n constructor (arr) {\n this._set = {};\n makeEntry(arr, this._set);\n }\n\n append (arr) {\n makeEntry(arr, this._set);\n return this;\n }\n\n toArray () {\n return Object.keys(this._set);\n }\n\n static difference (set1, set2) {\n let key;\n const filteredKeys = [],\n s1 = set1._set,\n s2 = set2._set;\n for (key in s1) {\n if (!({}).hasOwnProperty.call(s1, key)) {\n continue;\n }\n if (key in s2) {\n continue;\n }\n filteredKeys.push(key);\n }\n return new ForeignSet(filteredKeys);\n }\n}\n","/* global window */\n\nimport ForeignSet from './set';\n\nconst\n isSimpleObject = (obj) => {\n let token;\n if (typeof obj === 'object') {\n if (obj === null) { return false; }\n token = Object.prototype.toString.call(obj);\n if (token === '[object Object]') {\n return (obj.constructor.toString().match(/^function (.*)\\(\\)/m) || [])[1] === 'Object';\n }\n }\n return false;\n },\n minMsThreshold = 16,\n /* istanbul ignore next */win = typeof window === 'undefined' ? (this || {}) : window,\n /* istanbul ignore next */ reqAnimFrame = win.requestAnimationFrame || win.webkitRequestAnimationFrame ||\n win.mozRequestAnimationFrame || win.oRequestAnimationFrame ||\n win.msRequestAnimationFrame ||\n function (callback) {\n setTimeout(callback, minMsThreshold);\n },\n\n getTimeBasedId = () => {\n if (getTimeBasedId.__lastTime === new Date().getTime()) {\n return (getTimeBasedId.__lastTime).toString() + (getTimeBasedId.__id++).toString();\n }\n\n getTimeBasedId.__id = 0;\n getTimeBasedId.__lastTime = new Date().getTime();\n return (getTimeBasedId.__lastTime).toString() + (getTimeBasedId.__id++).toString();\n },\n pullableRecent = (nodes, fn) => {\n let nFn = () => {\n fn(...nodes.map((node) => {\n const\n hist = node.history,\n l = hist.length - 1;\n return [hist[l - 1 < 0 ? 0 : l - 1], hist[l]];\n }));\n };\n nFn.__id = getTimeBasedId();\n return nFn;\n },\n pullableEnd = (nodes, fn) => {\n let nFn = () => {\n fn(...nodes.map((node) => {\n const hist = node.history;\n return [hist[0], hist[hist.length - 1]];\n }));\n };\n nFn.__id = getTimeBasedId();\n return nFn;\n },\n unique = fns => fns\n .reduce((store, fn) => {\n // @warn function with side effect, it mutates the store passed during initialization\n if (fn.__id in store.map) {\n return store;\n }\n\n store.map[fn.__id] = 1;\n store.unique.push(fn);\n\n return store;\n }, { map: {}, unique: [] })\n .unique,\n compose = fns => () => {\n fns.forEach(fn => fn());\n },\n flat = (...params) => {\n const res = [];\n params.forEach(param => res.push(...param));\n return res;\n },\n identityMap = arrays => arrays,\n splitPathProp = (path) => {\n const pathArr = path.split('.'),\n len = pathArr.length;\n return [pathArr.slice(0, len - 1), pathArr[len - 1]];\n },\n scheduler = (onFinishCallback) => {\n let queue = [],\n animationFrame = null;\n\n onFinishCallback = onFinishCallback &&\n typeof onFinishCallback === 'function' && onFinishCallback || (() => { });\n\n return (listeners, payload) => {\n [].push.apply(queue, listeners);\n if (animationFrame === null) {\n animationFrame = reqAnimFrame(() => {\n const tempQ = queue.slice(0);\n queue.length = 0;\n animationFrame = null;\n\n unique(tempQ).forEach(fn => fn());\n onFinishCallback(payload);\n });\n }\n };\n },\n fetch = namedNode => (...params) => params.map((param) => {\n const node = namedNode[param];\n return {\n name: node.name,\n qualifiedName: node.qualifiedName,\n value: node.seed\n };\n }),\n fetchAggregator = (...params) => ({\n dependencies: params.slice(0, params.length - 1),\n fn: params[params.length - 1]\n }),\n getUpstreamNodes = (list) => {\n let res = [];\n const map = {};\n list.forEach(node => map[node.qualifiedName] = -1);\n function rec (arr) {\n arr.forEach((node) => {\n let qname,\n placedIndex,\n preArr,\n postArr;\n if (!((qname = node.qualifiedName) in map)) {\n map[qname] = res.push(node) - 1;\n } else {\n placedIndex = map[qname];\n if (placedIndex !== -1 && placedIndex !== res.length - 1) {\n // If not the last element, readjust the array so that the later dependency position is saved\n preArr = res.slice(0, placedIndex);\n postArr = res.slice(placedIndex + 1);\n res = preArr.concat(postArr);\n\n // reset the index in map\n postArr.forEach((elem, i) => map[elem.qualifiedName] = i + preArr.length);\n map[qname] = res.push(node) - 1;\n }\n }\n rec(node.outgoingEdges);\n });\n }\n rec(list);\n return res;\n },\n resolver = {\n accumulate: (...params) => {\n const resp = {};\n params.forEach((nodeDetails) => {\n Object.assign(resp, { [nodeDetails.name]: nodeDetails.value });\n });\n return resp;\n },\n identity: nodeDetails => nodeDetails.value\n };\n\nfunction resolveDependencyOrder (node, resolved, resolveMap) {\n let qname;\n node.edges.forEach((neighbour) => {\n resolveDependencyOrder(neighbour, resolved, resolveMap);\n });\n\n if (node.isRoot() || (qname = node.qualifiedName) in resolveMap) {\n return;\n }\n resolved.push(node);\n resolveMap[qname] = 1;\n}\n\nclass CustomResolver {\n constructor (resolver) {\n this.fn = resolver;\n this.dep = [];\n }\n\n addDependencies(...dep) {\n this.dep.push(...dep);\n return this;\n }\n\n getDependencies () {\n return this.dep;\n }\n\n get () {\n return this.fn;\n }\n}\n\nexport {\n isSimpleObject,\n scheduler,\n compose,\n flat,\n identityMap,\n pullableEnd,\n pullableRecent,\n unique,\n splitPathProp,\n resolver,\n ForeignSet,\n resolveDependencyOrder,\n fetch,\n fetchAggregator,\n CustomResolver,\n getUpstreamNodes\n};\n","export default class GraphNode {\n constructor (name, qualifiedName, options) {\n /* istanbul ignore next */options = options || {};\n this.name = name;\n this.qualifiedName = qualifiedName;\n this.edges = [];\n this.outgoingEdges = [];\n this._seed = null;\n this.requireResolve = true;\n this.retriever = options.retriever;\n this.history = [];\n this.resolver = null;\n this.electricEdges = [];\n }\n\n addDependencies (...dep) {\n this.edges.push(...dep);\n dep.forEach(entry => entry.outgoingEdges.push(this));\n return this;\n }\n\n addElectricNode (node) {\n this.electricEdges.push(node);\n return this;\n }\n\n get seed () {\n return this._seed;\n }\n\n set seed (value) {\n this._seed = value;\n this.requireResolve = true;\n return this;\n }\n\n resolve () {\n this.seed = this.resolver(...this.retrieveDetails());\n this.history.push(this.seed);\n this.requireResolve = false;\n return this;\n }\n\n retrieveDetails () {\n if (this.edges.length === 0) {\n return [{\n name: this.name,\n qualifiedName: this.qualifiedName,\n value: this.seed\n }];\n }\n return this.retriever(...this.edges.map(edge => edge.qualifiedName));\n }\n\n repeatHead () {\n const\n history = this.history,\n head = history[history.length - 1];\n // @todo- Akash, write test case if history.length === 0 to pass code coverage\n if (history.length === 0) {\n return this;\n }\n history.push(head);\n return this;\n }\n\n flush () {\n const hist = this.history,\n head = hist[hist.length - 1];\n hist.length = 0;\n hist.push(head);\n return this;\n }\n\n isRoot () {\n return this.name === null;\n }\n}\n","import {\n pullableRecent,\n pullableEnd\n} from './utils';\n\nexport default class ElectricNode {\n constructor () {\n this.edges = [];\n this.listeners = {\n nextFrame: [],\n currentFrame: []\n };\n }\n\n addEdges (...nodes) {\n this.edges.push(...nodes);\n return this;\n }\n\n regListenerForCurrFrame (fn) {\n const lstnrs = this.listeners.currentFrame;\n let index = lstnrs.push(pullableRecent(this.edges, fn)) - 1;\n\n return () => {\n this.listeners.currentFrame = lstnrs.filter((fn, i) => i !== index);\n };\n }\n\n regListenerForNextFrame (fn) {\n const lstnrs = this.listeners.nextFrame;\n let index = lstnrs.push(pullableEnd(this.edges, fn)) - 1;\n\n return () => {\n this.listeners.nextFrame = lstnrs.filter((fn, i) => i !== index);\n };\n }\n\n hasNextFrameListener () {\n return !!this.listeners.nextFrame.length;\n }\n}\n","import {\n isSimpleObject,\n resolver,\n // upstreamNodes,\n flat,\n resolveDependencyOrder,\n getUpstreamNodes,\n ForeignSet,\n fetch,\n CustomResolver,\n scheduler\n} from './utils';\nimport Node from './graph-node';\nimport ElectricNode from './electric-node';\n\nexport default class Graph {\n constructor () {\n this.qualifiedNodeMap = {};\n this.retriever = fetch(this.qualifiedNodeMap);\n this.root = new Node(null, null, { retriever: this.retriever });\n this.root.resolver = resolver.accumulate;\n\n this._wholeSet = null;\n this._propagate = true;\n this.propagationOverride = {\n currentFrameListeners: false,\n nextFrameListeners: false\n };\n\n this._schedule = scheduler((payload) => {\n let qname;\n for (qname in payload.flushTarget) {\n if (!({}).hasOwnProperty.call(this.qualifiedNodeMap, qname)) {\n return;\n }\n this.qualifiedNodeMap[qname].flush();\n }\n });\n }\n\n createNodesFrom (obj, mount) {\n let val,\n resolveReqList;\n const qualifiedNodeMap = this.qualifiedNodeMap,\n root = this.root,\n retriever = this.retriever;\n\n (function rec (objn, qualifiedName, history) {\n let key,\n qname,\n perv,\n node;\n\n for (key in objn) {\n if (!({}).hasOwnProperty.call(objn, key)) {\n continue;\n }\n qname = `${qualifiedName}${key}`;\n node = new Node(key, qname, { retriever });\n qualifiedNodeMap[qname] = node;\n\n if ((perv = history.perv) !== undefined) {\n perv.addDependencies(node);\n } else {\n // top most level entries\n root.addDependencies(node);\n }\n\n if (isSimpleObject(val = objn[key])) {\n rec(val, `${qualifiedName}${key}.`, { perv: node });\n node.resolver = resolver.accumulate;\n } else if (val instanceof CustomResolver) {\n node.resolver = val.get();\n node.addDependencies(...val.getDependencies().map(qname => qualifiedNodeMap[qname]));\n } else {\n node.resolver = resolver.identity;\n node.seed = val;\n // node.resolve();\n }\n }\n }(obj, mount === null ? '' : `${mount}.`, {\n perv: qualifiedNodeMap[mount]\n }));\n\n this._wholeSet = new ForeignSet(Object.keys(this.qualifiedNodeMap));\n\n // Recalculate the model without firing the listeners\n // @todo selective branch resolve. Currently resolve gets called even for a branch which was updated\n resolveReqList = this.constructor.getResolvedList(root).concat(root).filter(node => node.requireResolve);\n resolveReqList.forEach(node => node.resolve());\n getUpstreamNodes(resolveReqList).forEach(node => node.resolve());\n return this;\n }\n\n getNodeValue (prop) {\n if (prop in this.qualifiedNodeMap) {\n return this.qualifiedNodeMap[prop].seed;\n }\n return undefined;\n }\n\n createElectricNodeOf (props, fnSpec) {\n const nodes = props.map(prop => this.qualifiedNodeMap[prop]),\n eNode = new ElectricNode().addEdges(...nodes);\n\n nodes.forEach(node => node.addElectricNode(eNode));\n return eNode[`regListenerFor${fnSpec.type}`](fnSpec.fn);\n }\n\n update (...params) {\n let changedSet,\n upstreamNodes;\n const\n electricEdges = [],\n nodes = params.map((entry) => {\n entry[0].seed = entry[1];\n return entry[0];\n });\n nodes.forEach(node => node.resolve());\n electricEdges.push(...flat(...nodes.map(node => node.electricEdges)));\n changedSet = new ForeignSet(nodes.map(node => node.qualifiedName));\n\n if (!this._propagate) {\n this.__execUniqueElectricEdges(electricEdges);\n this._propagate = true;\n return this;\n }\n\n upstreamNodes = getUpstreamNodes(nodes);\n upstreamNodes.forEach(upstreamNode => upstreamNode.resolve());\n changedSet.append(upstreamNodes.map(node => node.qualifiedName));\n electricEdges.push(...flat(...upstreamNodes.map(node => node.electricEdges)));\n\n this.__execUniqueElectricEdges(Array.from(new Set(electricEdges)), changedSet);\n return this;\n }\n\n __execUniqueElectricEdges (electricEdges, changedSet) {\n const\n cfLstnrs = [], // current frame listeners\n nfLstnrs = []; // next frame listeners\n if (changedSet) {\n const\n differenceSet = ForeignSet.difference(this._wholeSet, changedSet),\n entries = differenceSet.toArray();\n\n entries.forEach(entry => this.qualifiedNodeMap[entry].repeatHead());\n }\n\n electricEdges.forEach((e) => {\n cfLstnrs.push(...e.listeners.currentFrame);\n });\n electricEdges.forEach((e) => {\n nfLstnrs.push(...e.listeners.nextFrame);\n });\n\n !this.propagationOverride.currentFrameListeners && cfLstnrs.forEach(fn => fn());\n !this.propagationOverride.nextFrameListeners && this._schedule(nfLstnrs, { flushTarget: changedSet });\n this.resetPropagationOverride();\n return this;\n }\n\n resetNodeValue (...qnames) {\n const nodes = qnames.map(qname => this.qualifiedNodeMap[qname]),\n args = nodes.map(node => [node, node.seed]);\n this.update(...args);\n return this;\n }\n\n static getResolvedList (node) {\n const resolved = [];\n resolveDependencyOrder(node, resolved, {});\n return resolved;\n }\n\n stopPropagation () {\n this._propagate = false;\n return this;\n }\n\n resetPropagationOverride () {\n this.propagationOverride.currentFrameListeners = false;\n this.propagationOverride.nextFrameListeners = false;\n return this;\n }\n\n setPropagationOverride (key) {\n this.propagationOverride[`${key}Listeners`] = true;\n return this;\n }\n\n getNodeFromQualifiedName (qname) {\n return this.qualifiedNodeMap[qname];\n }\n}\n","import Graph from './graph';\nimport { CustomResolver, fetchAggregator } from './utils';\n\n/**\n * The container class for Hyperdis. Hyperdis is an enabler for observable object with few interesting features like,\n * calculated property, next frame and same frame listeners, multiple listeners etc with a dependency resolving system.\n * It internally uses a graph to hold the hierarchial relationship of a object. Model is merely a container which\n * ties all the components together.\n *\n * @todo Circular dependency detection is not present\n *\n * @example check src/index.spec.js\n * @class\n */\nclass Model {\n constructor () {\n this._graph = new Graph();\n this._lockFlag = false;\n this._reqQ = [];\n }\n\n /**\n * Static method to create and init the model with an observable seed\n *\n * @param {Object} obj The target object which is required to be made observable\n * @return {Model} instance of the observable object model\n */\n static create (obj) {\n return new Model()._addPropInModel(null, obj);\n }\n\n /**\n * Appends more observable property on the already observable instance. This mutates the original model.\n *\n * This function works in two mode. One being\n * @param {String} mountPoint the property on which the new set of properties will be mounted. If its a nested\n * property then the mountPoint has to be written such a way so it feels like you are\n * accessing the object. If the mount point is not found then he obeservables are added in\n * the root.\n * @param {Object} The target object which is required to be made observable\n *\n * Another being\n * @param {Object} The target object which is required to be made observable\n *\n * @return {Model} instance of the observable object model\n */\n append (...params) {\n let mountPoint,\n obj;\n\n if (params.length === 1) {\n mountPoint = null;\n obj = params[0];\n } else {\n mountPoint = params[0];\n obj = params[1];\n }\n\n this._addPropInModel(mountPoint, obj);\n return this;\n }\n\n /**\n * Creates a calculated variable from existing variable. This variable can't be updated from outside.\n * @param {string} mountpoint property path on which the new variable will be placed\n * @param {string} name name of the variable. If the variable could have hierarchy like `limits.start`\n * @param {Function} fn funtion where the dependent variables are injected based on the dependency requirement\n */\n calculatedProp (...params) {\n let calculationConfig,\n customResolver,\n varName,\n mount,\n fetchFn;\n\n if (params.length > 2) {\n mount = params[0];\n varName = params[1];\n fetchFn = params[2];\n } else {\n mount = null;\n varName = params[0];\n fetchFn = params[1];\n }\n\n calculationConfig = fetchFn(fetchAggregator);\n customResolver = new CustomResolver(calculationConfig.fn);\n customResolver.addDependencies(...calculationConfig.dependencies);\n\n this._addPropInModel(mount, { [varName]: customResolver });\n return this;\n }\n\n // eslint-disable-next-line require-jsdoc\n _addPropInModel (mountPoint, obj) {\n this._graph.createNodesFrom(obj, mountPoint);\n return this;\n }\n\n /**\n * Register a listener in the current frame when a property or group of properties is changed.\n *\n * @example\n * This function takes a single or group of property and handler which is called when any of the properties are\n * changed.\n * When a single property is changed the handler is called with two parameter, what was the old value of the state\n * property and what is the new value.\n * myState.on('range.start', (oldValue, newValue) => {\n * console.log('Value before prop change', oldValue);\n * console.log('Value after prop change', newValue);\n * });\n *\n * myState.prop('range.start', 9);\n * // Output\n * Value before prop change 1\n * Value after prop change 9\n *\n * If a handler is registered on change of a property which has another state property as value, then the handler\n * gets called whenever any state property connected to it gets changed\n *\n * myState.on('range', (oldValue, newValue) => {\n * console.log('Value before prop change', oldValue);\n * console.log('Value after prop change', newValue);\n * });\n *\n * myState.prop('range.start', 10);\n * myState.prop('range.type.absolute', false);\n *\n * // Output\n * Value before prop change\n * range {\n * start: 9,\n * end: 5,\n * type: {\n * absolute: true\n * }\n * }\n * Value after prop change\n * range: {\n * start: 10,\n * end: 5,\n * type: {\n * absolute: false\n * }\n * }\n * If a handler is registered with more than one property change then, the handler is called when any of the\n * properties gets changed. In this cast the handler is called with more than one parameter: each for one state\n * property which is registered for listening. Each parameter is of type array containing [oldValue, newValue]\n *\n * myState.on('range.start', 'range.end', (start, end) => {\n * console.log('Start', start);\n * console.log('End', end);\n * });\n *\n * myState.prop('range.start', 12);\n *\n * // Output\n * Start [10, 12]\n * End [5, 5]\n *\n * myState.prop('range.end', 7);\n *\n * // Output\n * Start [12, 12]\n * End [5, 7]\n *\n * The on returns a function which is when called the listener registered gets unregistered\n *\n * let unsub = myState.on(['range.start', 'range.end'], (start, end) => {\n * console.log('Start', start);\n * console.log('End', end);\n * });\n *\n * // Unsubscribe\n * unsub()\n *\n * On takes an optional boolean value as the last parameter, which if passed as a true value the handler gets called\n * during registration itself.\n *\n * @param {Array.} props List of properties which is of interest\n * @param {Function} fn Listener to be executed when any of them is changed. The listener is called with the old\n * value and new value of the properties\n * @param {*} instantCall When registered if the function is to be triggered with the value of the property\n *\n * @return {Function} function to unsubscribe from the listeners registry\n */\n on (props, fn, instantCall) {\n const\n propsArr = props instanceof Array ? props : [props],\n // All there listeners will be executed in the current stack frame\n unsub = this._graph.createElectricNodeOf(propsArr, {\n type: 'CurrFrame',\n fn\n });\n\n if (instantCall) {\n // Bar current next frame listeners from getting fired\n this._graph.stopPropagation().setPropagationOverride('nextFrame').resetNodeValue(...props);\n }\n return unsub;\n }\n\n /**\n * Register a listener for the next frame when a property or group of properties is changed.\n *\n * @example\n * See the examples for the on listener\n *\n * @param {Array.} props List of properties which is of interest\n * @param {Function} fn Listener to be executed when any of them is changed. The listener is called with the old\n * value and new value of the properties. Here the oldvalue is last value of the last frame\n * @param {*} instantCall When registered if the function is to be triggered with the value of the property\n *\n * @return {Function} function to unsubscribe from the listeners registry\n */\n next (props, fn, instantCall) {\n const\n propsArr = props instanceof Array ? props : [props],\n // All there listeners will be executed at the tick of next animation frame\n unsub = this._graph.createElectricNodeOf(propsArr, {\n type: 'NextFrame',\n fn\n });\n\n // @todo check support for this from the graph side\n if (instantCall) {\n // Bar current frame listeners from getting fired\n this._graph.stopPropagation().setPropagationOverride('currentFrame').resetNodeValue(...props);\n }\n\n return unsub;\n }\n\n /**\n * Lock queues the request of property change and releases the change when unlock is called. This is helpful when\n * multiple property is getting called and the model listeners are to be fired once at the end of update.\n *\n * @return {Model} instance of the model\n */\n lock () {\n this._lockFlag = true;\n this._reqQ.length = 0;\n return this;\n }\n\n /**\n * Unlock unleashes the change done after the lock was called.\n\n * @return {Model} instance of the model\n */\n unlock () {\n this._lockFlag = false;\n this.setProp(...this._reqQ);\n this._reqQ.length = 0;\n return this;\n }\n\n /**\n * This acts as getter and setter. If the function is called by passing only one argument, it retrieve the value\n * associated with the property. If the same function is called using two parameters, first one being the property\n * and second one being the value, then the value is set for the property and the handlers are called (if any)\n * which got registered using the on function\n *\n * Getter\n * @param {string} prop property path whose value to be retrieved\n * @return {Object} value of the property at the time of call\n *\n * Setter\n * @param {string} property property path whose value to be ser\n * @return {Model} instance of the model\n */\n prop (...params) {\n let prop,\n val,\n len;\n\n switch (len = params.length) {\n case 1:\n prop = params[0];\n break;\n\n case 2:\n prop = params[0];\n val = params[1];\n break;\n\n default:\n return this;\n }\n\n if (len === 2) {\n this._lockFlag ? this._reqQ.push([prop, val]) : this.setProp([prop, val]);\n return this;\n }\n\n return this._graph.getNodeValue(prop);\n }\n\n // eslint-disable-next-line require-jsdoc\n setProp (...props) {\n // Filter out the calculated variables, so that it cant be changed from outside\n // @todo if a node is not leafValue, and change is called, ignore it too\n // props = props.filter(prop => !(VirtualObj.walkTill(prop[0].split('.'), this._vObj).leafValue()\n // instanceof CalculatedVar));\n\n if (props.length === 0) {\n return this;\n }\n\n this._graph.update(...props.map(prop => [this._graph.getNodeFromQualifiedName(prop[0]), prop[1]]));\n return this;\n }\n\n /**\n * Retrieves the graph representation of the object\n * @return {Graph} instance of the graph associated to the model\n */\n graph () {\n return this._graph;\n }\n\n /**\n * Get serialized data from the model\n *\n * @return {Object} Serialized data\n */\n serialize () {\n return this._graph.root.seed;\n }\n}\n\nexport default Model;\n","import Model from './model';\n\nexport default Model;\n","module.exports = function(module) {\n\tif (!module.webpackPolyfill) {\n\t\tmodule.deprecate = function() {};\n\t\tmodule.paths = [];\n\t\t// module.parent = undefined by default\n\t\tif (!module.children) module.children = [];\n\t\tObject.defineProperty(module, \"loaded\", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.l;\n\t\t\t}\n\t\t});\n\t\tObject.defineProperty(module, \"id\", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.i;\n\t\t\t}\n\t\t});\n\t\tmodule.webpackPolyfill = 1;\n\t}\n\treturn module;\n};\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _lib = require('./lib');\n\nvar _lib2 = _interopRequireDefault(_lib);\n\nvar _containerManager = require('./container-manager');\n\nvar _containerManager2 = _interopRequireDefault(_containerManager);\n\nvar slLib = _lib2['default'].init(typeof window !== \"undefined\" ? window : undefined),\n doc = slLib.win.document,\n M = slLib.win.Math,\n max = M.max,\n round = M.round,\n BLANK = '',\n htmlSplCharSpace = { ' ': ' ' },\n documentSupport = slLib.getDocumentSupport(),\n SVG_BBOX_CORRECTION = documentSupport.isWebKit ? 0 : 4.5;\n\n/*\n * Create new instance of SmartLabelManager.\n *\n * SmartLabelManager controls the lifetime of the execution space where the text's metrics will be calculated.\n * This takes a string for a given style and returns the height, width.\n * If a bound box is defined it wraps the text and returns the wrapped height and width.\n * It allows to append ellipsis at the end if the text is truncated.\n *\n * @param {String | Number} id - Id of the instance. If the same id is passed, it disposes the old instance and\n * save the new one;\n * @param {String | HTMLElement} container - The id or the instance of the container where the intermediate dom\n * elements are to be attached. If not passed, it appends in div\n *\n * @param {Boolean} useEllipses - This decides if a ellipses to be appended if the text is truncated.\n * @param {Object} options - Control options\n * {\n * maxCacheLimit: No of letter to be cached. Default: 500.\n * }\n * @constructor\n */\nfunction SmartLabelManager(id, container, useEllipses, options) {\n var wrapper,\n prop,\n max,\n prevInstance,\n isBrowserLess = false,\n store = SmartLabelManager.store;\n\n if (typeof id === 'undefined' || typeof id === 'object') {\n return;\n }\n\n if (prevInstance = store[id]) {\n prevInstance.dispose();\n }\n\n store[id] = this;\n options = options || {};\n options.maxCacheLimit = isFinite(max = options.maxCacheLimit) ? max : slLib.maxDefaultCacheLimit;\n\n if (typeof container === 'string') {\n container = doc.getElementById(container);\n }\n\n wrapper = slLib.createContainer(container);\n wrapper.innerHTML = slLib.testStrAvg;\n\n if (documentSupport.isHeadLess || !documentSupport.isIE && !wrapper.offsetHeight && !wrapper.offsetWidth) {\n isBrowserLess = true;\n }\n\n wrapper.innerHTML = '';\n for (prop in slLib.parentContainerStyle) {\n wrapper.style[prop] = slLib.parentContainerStyle[prop];\n }\n\n this.id = id;\n this.parentContainer = wrapper;\n\n this._containerManager = new _containerManager2['default'](wrapper, isBrowserLess, 10);\n this._showNoEllipses = !useEllipses;\n this._init = true;\n this.style = {};\n this.options = options;\n\n this.setStyle();\n}\n\n/*\n * getSmartText returns the text separated by
whenever a break is necessary. This is to recgonize one\n * generalized format independent of the implementation (canvas based solution, svg based solution). This method\n * converts the output of getSmartText().text to array of lines if the text is wrapped. It sets a named property\n * `lines` on the object passed as parameter.\n *\n * @param {Object} smartlabel - the object returned by getSmartText based on which line arr which to be formed.\n *\n * @return {Object} - The same object which was passed in the arguments. Also a named property `lines` is set.\n */\nSmartLabelManager.textToLines = function (smartlabel) {\n smartlabel = smartlabel || {};\n\n if (!smartlabel.text) {\n smartlabel.text = '';\n } else if (typeof smartlabel.text !== 'string') {\n smartlabel.text = smartlabel.text.toString();\n }\n\n smartlabel.lines = smartlabel.text.split(/\\n|/ig);\n return smartlabel;\n};\n\n// Saves all the instance created so far\nSmartLabelManager.store = {};\n\n// Calculates space taken by a character with an approximation value which is calculated by repeating the\n// character by string length times.\nSmartLabelManager.prototype._calCharDimWithCache = function (text, calculateDifference, length) {\n if (!this._init) {\n return false;\n }\n\n var size,\n csArr,\n tw,\n twi,\n cachedStyle,\n asymmetricDifference,\n maxAdvancedCacheLimit = this.options.maxCacheLimit,\n container = this._container,\n style = this.style || {},\n cache = this._advancedCache || (this._advancedCache = {}),\n advancedCacheKey = this._advancedCacheKey || (this._advancedCacheKey = []),\n cacheName = text + (style.fontSize || BLANK) + (style.fontFamily || BLANK) + (style.fontWeight || BLANK) + (style.fontStyle || BLANK),\n cacheInitName = text + 'init' + (style.fontSize || BLANK) + (style.fontFamily || BLANK) + (style.fontWeight || BLANK) + (style.fontStyle || BLANK);\n\n htmlSplCharSpace[text] && (text = htmlSplCharSpace[text]);\n\n if (!calculateDifference) {\n asymmetricDifference = 0;\n } else {\n if ((asymmetricDifference = cache[cacheInitName]) === undefined) {\n container.innerHTML = text.repeat ? text.repeat(length) : Array(length + 1).join(text); // jshint ignore:line\n tw = container.offsetWidth;\n\n container.innerHTML = text;\n twi = container.offsetWidth;\n\n asymmetricDifference = cache[cacheInitName] = (tw - length * twi) / (length + 1);\n advancedCacheKey.push(cacheInitName);\n if (advancedCacheKey.length > maxAdvancedCacheLimit) {\n delete cache[advancedCacheKey.shift()];\n }\n }\n }\n\n if (cachedStyle = cache[cacheName]) {\n csArr = cachedStyle.split(',');\n return {\n width: parseFloat(csArr[0], 10),\n height: parseFloat(csArr[1], 10)\n };\n }\n\n container.innerHTML = text;\n\n size = {\n height: container.offsetHeight,\n width: container.offsetWidth + asymmetricDifference\n };\n\n cache[cacheName] = size.width + ',' + size.height;\n advancedCacheKey.push(cacheName);\n if (advancedCacheKey.length > maxAdvancedCacheLimit) {\n delete cache[advancedCacheKey.shift()];\n }\n\n return size;\n};\n\n// Provide function to calculate the height and width based on the environment and available support from dom.\nSmartLabelManager.prototype._getWidthFn = function () {\n var contObj = this._containerObj,\n container = this._container,\n svgText = contObj.svgText;\n\n if (svgText) {\n return function (str) {\n var bbox, width;\n\n svgText.textContent = str;\n bbox = svgText.getBBox();\n width = bbox.width - SVG_BBOX_CORRECTION;\n if (width < 1) {\n width = bbox.width;\n }\n\n return width;\n };\n } else {\n return function (str) {\n container.innerHTML = str;\n return container.offsetWidth;\n };\n }\n};\n\n/*\n * Sets the style based on which the text's metrics to be calculated.\n *\n * @param {Object} style - The style object which affects the text size\n * {\n * fontSize / 'font-size' : MUST BE FOLLOWED BY PX (10px, 11px)\n * fontFamily / 'font-family'\n * fontWeight / 'font-weight'\n * fontStyle / 'font-style'\n * }\n *\n * @return {SmartLabelManager} - Current instance of SmartLabelManager\n */\nSmartLabelManager.prototype.setStyle = function (style) {\n if (!this._init) {\n return this;\n }\n\n var sCont;\n\n if (style === this.style && !this._styleNotSet) {\n return;\n }\n\n if (!style) {\n style = this.style;\n }\n\n slLib.setLineHeight(style);\n this.style = style;\n\n this._containerObj = sCont = this._containerManager.get(style);\n\n if (this._containerObj) {\n this._container = sCont.node;\n this._context = sCont.context;\n this._cache = sCont.charCache;\n this._lineHeight = sCont.lineHeight;\n this._styleNotSet = false;\n } else {\n this._styleNotSet = true;\n }\n\n return this;\n};\n\n/*\n * Decides whether ellipses to be shown if the node is truncated\n *\n * @param {Boolean} useEllipses - decides if a ellipses to be appended if the text is truncated. Default: false\n *\n * @return {SmartLabelManager} - Current instance of SmartLabelManager\n */\nSmartLabelManager.prototype.useEllipsesOnOverflow = function (useEllipses) {\n if (!this._init) {\n return this;\n }\n this._showNoEllipses = !useEllipses;\n return this;\n};\n\n/*\n * Get wrapped or truncated text if a bound box is defined around it. The result text would be separated by
\n * if wrapped\n *\n * @param {String} text - the subject text\n * @param {Number} maxWidth - width in px of the the bound box\n * @param {Number} maxHeight - height in px of the the bound box\n * @param {Boolean} noWrap - whether the text to be wrapped. Default false.\n *\n * @return {Object} - The metrics of the text bounded by the box\n * {\n * height : height of the wrapped text\n * width : width of the wrapped text\n * isTruncated : whether the text is truncated\n * maxHeight : Maximum height given\n * maxWidth : Maximum width given\n * oriText : Original text sent\n * oriTextHeight : Original text height\n * oriTextWidth : Original text width\n * text : SMART TEXT\n * }\n */\nSmartLabelManager.prototype.getSmartText = function (text, maxWidth, maxHeight, noWrap) {\n if (!this._init) {\n return false;\n }\n\n if (text === undefined || text === null) {\n text = '';\n } else if (typeof text !== 'string') {\n text = text.toString();\n }\n\n var len,\n trimStr,\n tempArr,\n tmpText,\n maxWidthWithEll,\n toolText,\n oriWidth,\n oriHeight,\n newCharIndex,\n nearestChar,\n tempChar,\n getWidth,\n initialLeft,\n initialTop,\n getOriSizeImproveObj,\n spanArr,\n x,\n y,\n minWidth,\n elem,\n chr,\n elemRightMostPoint,\n elemLowestPoint,\n lastBR,\n removeFromIndex,\n removeFromIndexForEllipses,\n hasHTMLTag = false,\n maxStrWidth = 0,\n lastDash = -1,\n lastSpace = -1,\n lastIndexBroken = -1,\n strWidth = 0,\n strHeight = 0,\n oriTextArr = [],\n i = 0,\n ellipsesStr = this._showNoEllipses ? '' : '...',\n lineHeight = this._lineHeight,\n context = this._context,\n container = this._container,\n sCont = this._containerObj,\n ellipsesWidth = sCont.ellipsesWidth,\n dotWidth = sCont.dotWidth,\n characterArr = [],\n dashIndex = -1,\n spaceIndex = -1,\n lastLineBreak = -1,\n fastTrim = function fastTrim(str) {\n str = str.replace(/^\\s\\s*/, '');\n var ws = /\\s/,\n i = str.length;\n while (ws.test(str.charAt(i -= 1))) {/* jshint noempty:false */}\n return str.slice(0, i + 1);\n },\n smartLabel = {\n text: text,\n maxWidth: maxWidth,\n maxHeight: maxHeight,\n width: null,\n height: null,\n oriTextWidth: null,\n oriTextHeight: null,\n oriText: text,\n isTruncated: false\n };\n\n getWidth = this._getWidthFn();\n\n // In some browsers, offsetheight of a single-line text is getting little (1 px) heigher value of the\n // lineheight. As a result, smartLabel is unable to return single-line text.\n // To fix this, increase the maxHeight a little amount. Hence maxHeight = lineHeight * 1.2\n if (maxHeight === lineHeight) {\n maxHeight *= 1.2;\n }\n\n if (container) {\n if (!documentSupport.isBrowserLess) {\n hasHTMLTag = slLib.xmlTagRegEx.test(text);\n if (!hasHTMLTag) {\n // Due to support of <,> for xml we convert <, > to <,> respectively so to get the correct\n // width it is required to convert the same before calculation for the new improve version of the\n // get text width.\n tmpText = text.replace(slLib.ltgtRegex, function (match) {\n return match === '<' ? '<' : '>';\n });\n getOriSizeImproveObj = this.getOriSize(tmpText, true);\n\n smartLabel.oriTextWidth = oriWidth = getOriSizeImproveObj.width;\n smartLabel.oriTextHeight = oriHeight = getOriSizeImproveObj.height;\n } else {\n container.innerHTML = text;\n smartLabel.oriTextWidth = oriWidth = container.offsetWidth;\n smartLabel.oriTextHeight = oriHeight = container.offsetHeight;\n }\n\n if (oriHeight <= maxHeight && oriWidth <= maxWidth) {\n smartLabel.width = smartLabel.oriTextWidth = oriWidth;\n smartLabel.height = smartLabel.oriTextHeight = oriHeight;\n return smartLabel;\n }\n\n if (lineHeight > maxHeight) {\n smartLabel.text = '';\n smartLabel.width = smartLabel.oriTextWidth = 0;\n smartLabel.height = smartLabel.oriTextHeight = 0;\n return smartLabel;\n }\n }\n\n // Calculate width with ellipses\n text = fastTrim(text).replace(/(\\s+)/g, ' ');\n maxWidthWithEll = this._showNoEllipses ? maxWidth : maxWidth - ellipsesWidth;\n\n if (!hasHTMLTag) {\n oriTextArr = text.split('');\n len = oriTextArr.length;\n trimStr = '', tempArr = [];\n tempChar = oriTextArr[0];\n\n if (this._cache[tempChar]) {\n minWidth = this._cache[tempChar].width;\n } else {\n minWidth = getWidth(tempChar);\n this._cache[tempChar] = { width: minWidth };\n }\n\n if (maxWidthWithEll > minWidth) {\n tempArr = text.substr(0, slLib.getNearestBreakIndex(text, maxWidthWithEll, this)).split('');\n i = tempArr.length;\n } else if (minWidth > maxWidth) {\n smartLabel.text = '';\n smartLabel.width = smartLabel.oriTextWidth = smartLabel.height = smartLabel.oriTextHeight = 0;\n return smartLabel;\n } else if (ellipsesStr) {\n maxWidthWithEll = maxWidth - 2 * dotWidth;\n if (maxWidthWithEll > minWidth) {\n ellipsesStr = '..';\n } else {\n maxWidthWithEll = maxWidth - dotWidth;\n if (maxWidthWithEll > minWidth) {\n ellipsesStr = '.';\n } else {\n maxWidthWithEll = 0;\n ellipsesStr = '';\n }\n }\n }\n\n strWidth = getWidth(tempArr.join(''));\n strHeight = this._lineHeight;\n\n if (noWrap) {\n for (; i < len; i += 1) {\n tempChar = tempArr[i] = oriTextArr[i];\n if (this._cache[tempChar]) {\n minWidth = this._cache[tempChar].width;\n } else {\n if (!getOriSizeImproveObj || !(minWidth = getOriSizeImproveObj.detailObj[tempChar])) {\n minWidth = getWidth(tempChar);\n }\n this._cache[tempChar] = {\n width: minWidth\n };\n }\n strWidth += minWidth;\n if (strWidth > maxWidthWithEll) {\n if (!trimStr) {\n trimStr = tempArr.slice(0, -1).join('');\n }\n if (strWidth > maxWidth) {\n smartLabel.text = fastTrim(trimStr) + ellipsesStr;\n smartLabel.tooltext = smartLabel.oriText;\n smartLabel.width = getWidth(smartLabel.text);\n smartLabel.height = this._lineHeight;\n return smartLabel;\n }\n }\n }\n\n smartLabel.text = tempArr.join('');\n smartLabel.width = strWidth;\n smartLabel.height = this._lineHeight;\n return smartLabel;\n } else {\n for (; i < len; i += 1) {\n tempChar = tempArr[i] = oriTextArr[i];\n if (tempChar === ' ' && !context) {\n tempChar = ' ';\n }\n\n if (this._cache[tempChar]) {\n minWidth = this._cache[tempChar].width;\n } else {\n if (!getOriSizeImproveObj || !(minWidth = getOriSizeImproveObj.detailObj[tempChar])) {\n minWidth = getWidth(tempChar);\n }\n this._cache[tempChar] = {\n width: minWidth\n };\n }\n strWidth += minWidth;\n\n if (strWidth > maxWidthWithEll) {\n if (!trimStr) {\n trimStr = tempArr.slice(0, -1).join('');\n }\n if (strWidth > maxWidth) {\n /** @todo use regular expressions for better performance. */\n lastSpace = text.substr(0, tempArr.length).lastIndexOf(' ');\n lastDash = text.substr(0, tempArr.length).lastIndexOf('-');\n if (lastSpace > lastIndexBroken) {\n strWidth = getWidth(tempArr.slice(lastIndexBroken + 1, lastSpace).join(''));\n tempArr.splice(lastSpace, 1, '
');\n lastIndexBroken = lastSpace;\n newCharIndex = lastSpace + 1;\n } else if (lastDash > lastIndexBroken) {\n if (lastDash === tempArr.length - 1) {\n strWidth = getWidth(tempArr.slice(lastIndexBroken + 1, lastSpace).join(''));\n tempArr.splice(lastDash, 1, '
-');\n } else {\n strWidth = getWidth(tempArr.slice(lastIndexBroken + 1, lastSpace).join(''));\n tempArr.splice(lastDash, 1, '-
');\n }\n lastIndexBroken = lastDash;\n newCharIndex = lastDash + 1;\n } else {\n tempArr.splice(tempArr.length - 1, 1, '
' + oriTextArr[i]);\n lastLineBreak = tempArr.length - 2;\n strWidth = getWidth(tempArr.slice(lastIndexBroken + 1, lastLineBreak + 1).join(''));\n lastIndexBroken = lastLineBreak;\n newCharIndex = i;\n }\n strHeight += this._lineHeight;\n if (strHeight > maxHeight) {\n smartLabel.text = fastTrim(trimStr) + ellipsesStr;\n smartLabel.tooltext = smartLabel.oriText;\n // The max width among all the lines will be the width of the string.\n smartLabel.width = maxWidth;\n smartLabel.height = strHeight - this._lineHeight;\n return smartLabel;\n } else {\n maxStrWidth = max(maxStrWidth, strWidth);\n trimStr = null;\n nearestChar = slLib.getNearestBreakIndex(text.substr(newCharIndex), maxWidthWithEll, this);\n strWidth = getWidth(text.substr(newCharIndex, nearestChar || 1));\n if (tempArr.length < newCharIndex + nearestChar) {\n tempArr = tempArr.concat(text.substr(tempArr.length, newCharIndex + nearestChar - tempArr.length).split(''));\n i = tempArr.length - 1;\n }\n }\n }\n }\n }\n\n maxStrWidth = max(maxStrWidth, strWidth);\n\n smartLabel.text = tempArr.join('');\n smartLabel.width = maxStrWidth;\n smartLabel.height = strHeight;\n return smartLabel;\n }\n } else {\n toolText = text.replace(slLib.spanAdditionRegx, '$2');\n text = text.replace(slLib.spanAdditionRegx, slLib.spanAdditionReplacer);\n text = text.replace(/()/g, '$1');\n\n container.innerHTML = text;\n\n spanArr = container[documentSupport.childRetriverFn](documentSupport.childRetriverString);\n\n for (x = 0, y = spanArr.length; x < y; x += 1) {\n elem = spanArr[x];\n //chech whether this span is temporary inserted span from it's class\n if (documentSupport.noClassTesting || slLib.classNameReg.test(elem.className)) {\n chr = elem.innerHTML;\n if (chr !== '') {\n if (chr === ' ') {\n spaceIndex = characterArr.length;\n } else if (chr === '-') {\n dashIndex = characterArr.length;\n }\n\n characterArr.push({\n spaceIdx: spaceIndex,\n dashIdx: dashIndex,\n elem: elem\n });\n oriTextArr.push(chr);\n }\n }\n }\n\n i = 0;\n len = characterArr.length;\n minWidth = characterArr[0].elem.offsetWidth;\n\n if (minWidth > maxWidth) {\n smartLabel.text = '';\n smartLabel.width = smartLabel.oriTextWidth = smartLabel.height = smartLabel.oriTextHeight = 0;\n\n return smartLabel;\n } else if (minWidth > maxWidthWithEll && !this._showNoEllipses) {\n\n maxWidthWithEll = maxWidth - 2 * dotWidth;\n if (maxWidthWithEll > minWidth) {\n ellipsesStr = '..';\n } else {\n maxWidthWithEll = maxWidth - dotWidth;\n if (maxWidthWithEll > minWidth) {\n ellipsesStr = '.';\n } else {\n maxWidthWithEll = 0;\n ellipsesStr = '';\n }\n }\n }\n\n initialLeft = characterArr[0].elem.offsetLeft;\n initialTop = characterArr[0].elem.offsetTop;\n\n if (noWrap) {\n for (; i < len; i += 1) {\n elem = characterArr[i].elem;\n elemRightMostPoint = elem.offsetLeft - initialLeft + elem.offsetWidth;\n\n if (elemRightMostPoint > maxWidthWithEll) {\n if (!removeFromIndexForEllipses) {\n removeFromIndexForEllipses = i;\n }\n if (container.offsetWidth > maxWidth) {\n removeFromIndex = i;\n i = len;\n }\n }\n }\n } else {\n for (; i < len; i += 1) {\n elem = characterArr[i].elem;\n elemLowestPoint = elem.offsetHeight + (elem.offsetTop - initialTop);\n elemRightMostPoint = elem.offsetLeft - initialLeft + elem.offsetWidth;\n\n lastBR = null;\n\n if (elemRightMostPoint > maxWidthWithEll) {\n if (!removeFromIndexForEllipses) {\n removeFromIndexForEllipses = i;\n }\n\n if (elemRightMostPoint > maxWidth) {\n lastSpace = characterArr[i].spaceIdx;\n lastDash = characterArr[i].dashIdx;\n if (lastSpace > lastIndexBroken) {\n characterArr[lastSpace].elem.innerHTML = '
';\n lastIndexBroken = lastSpace;\n } else if (lastDash > lastIndexBroken) {\n if (lastDash === i) {\n // in case the overflowing character itself is the '-'\n characterArr[lastDash].elem.innerHTML = '
-';\n } else {\n characterArr[lastDash].elem.innerHTML = '-
';\n }\n lastIndexBroken = lastDash;\n } else {\n elem.parentNode.insertBefore(lastBR = doc.createElement('br'), elem);\n }\n\n //check whether this break made current element outside the area height\n if (elem.offsetHeight + elem.offsetTop > maxHeight) {\n //remove the lastly inserted line break\n if (lastBR) {\n lastBR.parentNode.removeChild(lastBR);\n } else if (lastIndexBroken === lastDash) {\n characterArr[lastDash].elem.innerHTML = '-';\n } else {\n characterArr[lastSpace].elem.innerHTML = ' ';\n }\n removeFromIndex = i;\n //break the looping condition\n i = len;\n } else {\n removeFromIndexForEllipses = null;\n }\n }\n } else {\n //check whether this break made current element outside the area height\n if (elemLowestPoint > maxHeight) {\n removeFromIndex = i;\n i = len;\n }\n }\n }\n }\n\n if (removeFromIndex < len) {\n //set the trancated property of the smartlabel\n smartLabel.isTruncated = true;\n\n /** @todo is this really needed? */\n removeFromIndexForEllipses = removeFromIndexForEllipses ? removeFromIndexForEllipses : removeFromIndex;\n\n for (i = len - 1; i >= removeFromIndexForEllipses; i -= 1) {\n elem = characterArr[i].elem;\n //chech whether this span is temporary inserted span from it's class\n elem.parentNode.removeChild(elem);\n }\n\n for (; i >= 0; i -= 1) {\n elem = characterArr[i].elem;\n if (slLib.classNameBrReg.test(elem.className)) {\n //chech whether this span is temporary inserted span from it's class\n elem.parentNode.removeChild(elem);\n } else {\n i = 0;\n }\n }\n }\n\n //get the smart text\n smartLabel.text = container.innerHTML.replace(slLib.spanRemovalRegx, '$1').replace(/\\&\\;/g, '&');\n if (smartLabel.isTruncated) {\n smartLabel.text += ellipsesStr;\n smartLabel.tooltext = toolText;\n }\n }\n\n smartLabel.height = container.offsetHeight;\n smartLabel.width = container.offsetWidth;\n\n return smartLabel;\n } else {\n smartLabel.error = new Error('Body Tag Missing!');\n return smartLabel;\n }\n};\n\n/*\n * Get the height and width of a text.\n *\n * @param {String} text - Text whose metrics to be measured\n * @param {Boolean} Optional detailedCalculationFlag - this flag if set it calculates per letter position\n * information and returns it. Ideally you dont need it unless you want to post process the\n * string. And its an EXPENSIVE OPERATION.\n *\n * @return {Object} - If detailedCalculationFlag is set to true the returned object would be\n * {\n * height: height of the text\n * width: width of the text\n * detailObj: detail calculation of letters in the format {lettername: width}\n * }\n * If detailedCalculationFlag is set to false the returned object wont have the detailObj prop.\n */\nSmartLabelManager.prototype.getOriSize = function (text, detailedCalculationFlag) {\n if (!this._init) {\n return false;\n }\n\n var textArr,\n letter,\n lSize,\n i,\n l,\n cumulativeSize = 0,\n height = 0,\n indiSizeStore = {};\n\n if (!detailedCalculationFlag) {\n return this._calCharDimWithCache(text);\n }\n\n // Calculate the width of every letter with an approximation\n textArr = text.split('');\n for (i = 0, l = textArr.length; i < l; i++) {\n letter = textArr[i];\n lSize = this._calCharDimWithCache(letter, true, textArr.length);\n height = max(height, lSize.height);\n cumulativeSize += lSize.width;\n indiSizeStore[letter] = lSize.width;\n }\n\n return {\n width: round(cumulativeSize),\n height: height,\n detailObj: indiSizeStore\n };\n};\n\n/*\n * Dispose the container and object allocated by the smartlabel\n */\nSmartLabelManager.prototype.dispose = function () {\n if (!this._init) {\n return this;\n }\n\n this._containerManager && this._containerManager.dispose && this._containerManager.dispose();\n\n delete this._container;\n delete this._context;\n delete this._cache;\n delete this._containerManager;\n delete this._containerObj;\n delete this.id;\n delete this.style;\n delete this.parentContainer;\n delete this._showNoEllipses;\n\n return this;\n};\n\nexports['default'] = SmartLabelManager;\nmodule.exports = exports['default'];","'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n\tvalue: true\n});\nvar lib = {\n\tinit: function init(win) {\n\t\tvar doc = win.document,\n\t\t nav = win.navigator,\n\t\t userAgent = nav.userAgent,\n\t\t DIV = 'DIV',\n\t\t ceil = Math.ceil,\n\t\t floor = Math.floor,\n\t\t containerInstanceCount = 0,\n\t\t clsNameSpace = 'fusioncharts-smartlabel-',\n\t\t containerClass = clsNameSpace + 'container',\n\t\t classNameWithTag = clsNameSpace + 'tag',\n\t\t classNameWithTagBR = clsNameSpace + 'br';\n\n\t\tlib = {\n\t\t\twin: win,\n\n\t\t\tcontainerClass: containerClass,\n\n\t\t\tclassNameWithTag: classNameWithTag,\n\n\t\t\tclassNameWithTagBR: classNameWithTagBR,\n\n\t\t\tmaxDefaultCacheLimit: 500,\n\n\t\t\tclassNameReg: new RegExp('\\b' + classNameWithTag + '\\b'),\n\n\t\t\tclassNameBrReg: new RegExp('\\b' + classNameWithTagBR + '\\b'),\n\n\t\t\tspanAdditionRegx: /(<[^<\\>]+?\\>)|(&(?:[a-z]+|#[0-9]+);|.)/ig,\n\n\t\t\tspanAdditionReplacer: '$1$2',\n\n\t\t\tspanRemovalRegx: new RegExp('\\\\]+?' + classNameWithTag + '[^\\\\>]{0,}\\\\>(.*?)\\\\<\\\\/span\\\\>', 'ig'),\n\n\t\t\txmlTagRegEx: new RegExp('<[^>][^<]*[^>]+>', 'i'),\n\n\t\t\tltgtRegex: /<|>/g,\n\n\t\t\tbrReplaceRegex: //ig,\n\n\t\t\ttestStrAvg: 'WgI',\n\n\t\t\t// This style is applied over the parent smartlabel container. The container is kept hidden from the viewport\n\t\t\tparentContainerStyle: {\n\t\t\t\tposition: 'absolute',\n\t\t\t\ttop: '-9999em',\n\t\t\t\twhiteSpace: 'nowrap',\n\t\t\t\tpadding: '0px',\n\t\t\t\twidth: '1px',\n\t\t\t\theight: '1px',\n\t\t\t\toverflow: 'hidden'\n\t\t\t},\n\n\t\t\t// All the style which might affect the text metrics\n\t\t\tsupportedStyle: {\n\t\t\t\tfont: 'font',\n\t\t\t\tfontFamily: 'font-family',\n\t\t\t\t'font-family': 'font-family',\n\t\t\t\tfontWeight: 'font-weight',\n\t\t\t\t'font-weight': 'font-weight',\n\t\t\t\tfontSize: 'font-size',\n\t\t\t\t'font-size': 'font-size',\n\t\t\t\tlineHeight: 'line-height',\n\t\t\t\t'line-height': 'line-height',\n\t\t\t\tfontStyle: 'font-style',\n\t\t\t\t'font-style': 'font-style'\n\t\t\t},\n\n\t\t\t// Get the support list for html the document where the text calcution is to be done.\n\t\t\tgetDocumentSupport: function getDocumentSupport() {\n\t\t\t\tvar childRetriverFn, childRetriverString, noClassTesting;\n\n\t\t\t\tif (doc.getElementsByClassName) {\n\t\t\t\t\tchildRetriverFn = 'getElementsByClassName';\n\t\t\t\t\tchildRetriverString = classNameWithTag;\n\t\t\t\t\tnoClassTesting = true;\n\t\t\t\t} else {\n\t\t\t\t\tchildRetriverFn = 'getElementsByTagName';\n\t\t\t\t\tchildRetriverString = 'span';\n\t\t\t\t\tnoClassTesting = false;\n\t\t\t\t}\n\n\t\t\t\treturn {\n\t\t\t\t\tisIE: /msie/i.test(userAgent) && !win.opera,\n\t\t\t\t\thasSVG: Boolean(win.SVGAngle || doc.implementation.hasFeature('http://www.w3.org/TR/SVG11/feature#BasicStructure', '1.1')),\n\t\t\t\t\tisHeadLess: new RegExp(' HtmlUnit').test(userAgent),\n\t\t\t\t\tisWebKit: new RegExp(' AppleWebKit/').test(userAgent),\n\t\t\t\t\tchildRetriverFn: childRetriverFn,\n\t\t\t\t\tchildRetriverString: childRetriverString,\n\t\t\t\t\tnoClassTesting: noClassTesting\n\t\t\t\t};\n\t\t\t},\n\n\t\t\t/*\n * Create a html div element and attach it with a parent. All the subsequent operations are performed\n * by upding this dom tree only.\n *\n * @param {HTMLElement} - The html element where the newly created div is to be attached. If not passed,\n * the new div is appended on the body.\n */\n\t\t\tcreateContainer: function createContainer(containerParent) {\n\t\t\t\tvar body, container;\n\n\t\t\t\tif (containerParent && (containerParent.offsetWidth || containerParent.offsetHeight)) {\n\t\t\t\t\tif (containerParent.appendChild) {\n\t\t\t\t\t\tcontainerParent.appendChild(container = doc.createElement(DIV));\n\t\t\t\t\t\tcontainer.className = containerClass;\n\t\t\t\t\t\tcontainer.setAttribute('aria-hidden', 'true');\n\t\t\t\t\t\tcontainer.setAttribute('role', 'presentation');\n\t\t\t\t\t\treturn container;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tbody = doc.getElementsByTagName('body')[0];\n\n\t\t\t\t\tif (body && body.appendChild) {\n\t\t\t\t\t\tcontainer = doc.createElement(DIV);\n\t\t\t\t\t\tcontainer.className = containerClass;\n\t\t\t\t\t\tcontainer.setAttribute('aria-hidden', 'true');\n\t\t\t\t\t\tcontainer.setAttribute('role', 'presentation');\n\t\t\t\t\t\tcontainerInstanceCount += 1;\n\t\t\t\t\t\tbody.appendChild(container);\n\t\t\t\t\t\treturn container;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// Finds a approximate position where the text is to be broken\n\t\t\tgetNearestBreakIndex: function getNearestBreakIndex(text, maxWidth, sl) {\n\t\t\t\tif (!text || !text.length) {\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\n\t\t\t\tvar difference,\n\t\t\t\t getWidth = sl._getWidthFn(),\n\t\t\t\t charLen = 0,\n\t\t\t\t increment = 0,\n\t\t\t\t oriWidth = getWidth(text),\n\t\t\t\t avgWidth = oriWidth / text.length;\n\n\t\t\t\tdifference = maxWidth;\n\t\t\t\tcharLen = ceil(maxWidth / avgWidth);\n\n\t\t\t\tif (oriWidth < maxWidth) {\n\t\t\t\t\treturn text.length - 1;\n\t\t\t\t}\n\n\t\t\t\tif (charLen > text.length) {\n\t\t\t\t\tdifference = maxWidth - oriWidth;\n\t\t\t\t\tcharLen = text.length;\n\t\t\t\t}\n\n\t\t\t\twhile (difference > 0) {\n\t\t\t\t\tdifference = maxWidth - getWidth(text.substr(0, charLen));\n\t\t\t\t\tincrement = floor(difference / avgWidth);\n\t\t\t\t\tif (increment) {\n\t\t\t\t\t\tcharLen += increment;\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn charLen;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\twhile (difference < 0) {\n\t\t\t\t\tdifference = maxWidth - getWidth(text.substr(0, charLen));\n\t\t\t\t\tincrement = floor(difference / avgWidth);\n\t\t\t\t\tif (increment) {\n\t\t\t\t\t\tcharLen += increment;\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn charLen;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn charLen;\n\t\t\t},\n\n\t\t\t/*\n * Determine lineheight of a text for a given style. It adds propery lineHeight to the style passed\n *\n * @param {Object} - The style based on which the text's metric needs to be calculated. The calculation happens\n * based on fontSize property, if its not present a default font size is assumed.\n *\n * @return {Object} - The style that was passed with lineHeight as a named propery set on the object.\n */\n\t\t\tsetLineHeight: function setLineHeight(styleObj) {\n\t\t\t\tvar fSize = styleObj.fontSize = styleObj.fontSize || '12px';\n\t\t\t\tstyleObj.lineHeight = styleObj.lineHeight || styleObj['line-height'] || parseInt(fSize, 10) * 1.2 + 'px';\n\t\t\t\treturn styleObj;\n\t\t\t}\n\t\t};\n\n\t\treturn lib;\n\t}\n};\n\nexports['default'] = lib;\nmodule.exports = exports['default'];","const Muze = require('./muze');\n\nmodule.exports = Muze.default ? Muze.default : Muze;\n","'use strict';\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _lib = require('./lib');\n\nvar _lib2 = _interopRequireDefault(_lib);\n\nvar slLib = _lib2['default'].init(typeof window !== \"undefined\" ? window : undefined),\n doc = slLib.win.document,\n documentSupport = slLib.getDocumentSupport(),\n SVG_BBOX_CORRECTION = documentSupport.isWebKit ? 0 : 4.5;\n\nfunction ContainerManager(parentContainer, isBrowserLess, maxContainers) {\n var svg;\n\n maxContainers = maxContainers > 5 ? maxContainers : 5;\n maxContainers = maxContainers < 20 ? maxContainers : 20;\n\n this.maxContainers = maxContainers;\n this.first = null;\n this.last = null;\n this.containers = {};\n this.length = 0;\n this.rootNode = parentContainer;\n\n if (isBrowserLess) {\n svg = doc.createElementNS('http://www.w3.org/2000/svg', 'svg');\n svg.setAttributeNS('http://www.w3.org/2000/svg', 'xlink', 'http://www.w3.org/1999/xlink');\n svg.setAttributeNS('http://www.w3.org/2000/svg', 'height', '0');\n svg.setAttributeNS('http://www.w3.org/2000/svg', 'width', '0');\n this.svgRoot = svg;\n this.rootNode.appendChild(svg);\n }\n}\n\nContainerManager.prototype.get = function (style) {\n var diff,\n key,\n containerObj,\n containers = this.containers,\n len = this.length,\n max = this.maxContainers,\n keyStr = '';\n\n for (key in slLib.supportedStyle) {\n if (style[key] !== undefined) {\n keyStr += slLib.supportedStyle[key] + ':' + style[key] + ';';\n }\n }\n\n if (!keyStr) {\n return false;\n }\n\n if (containerObj = containers[keyStr]) {\n if (this.first !== containerObj) {\n containerObj.prev && (containerObj.prev.next = containerObj.next);\n containerObj.next && (containerObj.next.prev = containerObj.prev);\n containerObj.next = this.first;\n containerObj.next.prev = containerObj;\n this.last === containerObj && (this.last = containerObj.prev);\n containerObj.prev = null;\n this.first = containerObj;\n }\n } else {\n if (len >= max) {\n diff = len - max + 1;\n // +1 is to remove an extra entry to make space for the new container to be added.\n while (diff--) {\n this.removeContainer(this.last);\n }\n }\n containerObj = this.addContainer(keyStr);\n }\n\n return containerObj;\n};\n\nContainerManager.prototype.addContainer = function (keyStr) {\n var node, container;\n\n this.containers[keyStr] = container = {\n next: null,\n prev: null,\n node: null,\n ellipsesWidth: 0,\n lineHeight: 0,\n dotWidth: 0,\n avgCharWidth: 4,\n keyStr: keyStr,\n charCache: {}\n };\n\n // Since the container objects are arranged from most recent to least recent order, we need to add the new\n // object at the beginning of the list.\n container.next = this.first;\n container.next && (container.next.prev = container);\n this.first = container;\n if (!this.last) {\n this.last = container;\n }\n this.length += 1;\n\n node = container.node = doc.createElement('div');\n this.rootNode.appendChild(node);\n\n if (documentSupport.isIE && !documentSupport.hasSVG) {\n node.style.setAttribute('cssText', keyStr);\n } else {\n node.setAttribute('style', keyStr);\n }\n\n node.setAttribute('aria-hidden', 'true');\n node.setAttribute('role', 'presentation');\n node.style.display = 'inline-block';\n\n node.innerHTML = slLib.testStrAvg; // A test string.\n container.lineHeight = node.offsetHeight;\n container.avgCharWidth = node.offsetWidth / 3;\n\n if (documentSupport.isBrowserLess) {\n node = container.svgText = doc.createElementNS('http://www.w3.org/2000/svg', 'text');\n node.setAttribute('style', keyStr);\n this.svgRoot.appendChild(node);\n\n node.textContent = slLib.testStrAvg; // A test string.\n container.lineHeight = node.getBBox().height;\n container.avgCharWidth = (node.getBBox().width - SVG_BBOX_CORRECTION) / 3;\n\n node.textContent = '...';\n container.ellipsesWidth = node.getBBox().width - SVG_BBOX_CORRECTION;\n node.textContent = '.';\n container.dotWidth = node.getBBox().width - SVG_BBOX_CORRECTION;\n } else {\n node.innerHTML = '...';\n container.ellipsesWidth = node.offsetWidth;\n node.innerHTML = '.';\n container.dotWidth = node.offsetWidth;\n node.innerHTML = '';\n }\n\n return container;\n};\n\nContainerManager.prototype.removeContainer = function (cObj) {\n var keyStr = cObj.keyStr;\n\n if (!keyStr || !this.length || !cObj) {\n return;\n }\n this.length -= 1;\n\n cObj.prev && (cObj.prev.next = cObj.next);\n cObj.next && (cObj.next.prev = cObj.prev);\n this.first === cObj && (this.first = cObj.next);\n this.last === cObj && (this.last = cObj.prev);\n\n cObj.node.parentNode.removeChild(cObj.node);\n\n delete this.containers[keyStr];\n};\n\nContainerManager.prototype.dispose = function () {\n var key,\n containers = this.containers;\n\n this.maxContainers = null;\n for (key in containers) {\n this.removeContainer(containers[key]);\n }\n\n this.rootNode.parentNode.removeChild(this.rootNode);\n\n this.rootNode = null;\n this.first = null;\n this.last = null;\n};\n\nmodule.exports = ContainerManager;","export default function(a, b) {\n return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n","import ascending from \"./ascending\";\n\nexport default function(compare) {\n if (compare.length === 1) compare = ascendingComparator(compare);\n return {\n left: function(a, x, lo, hi) {\n if (lo == null) lo = 0;\n if (hi == null) hi = a.length;\n while (lo < hi) {\n var mid = lo + hi >>> 1;\n if (compare(a[mid], x) < 0) lo = mid + 1;\n else hi = mid;\n }\n return lo;\n },\n right: function(a, x, lo, hi) {\n if (lo == null) lo = 0;\n if (hi == null) hi = a.length;\n while (lo < hi) {\n var mid = lo + hi >>> 1;\n if (compare(a[mid], x) > 0) hi = mid;\n else lo = mid + 1;\n }\n return lo;\n }\n };\n}\n\nfunction ascendingComparator(f) {\n return function(d, x) {\n return ascending(f(d), x);\n };\n}\n","import ascending from \"./ascending\";\nimport bisector from \"./bisector\";\n\nvar ascendingBisect = bisector(ascending);\nexport var bisectRight = ascendingBisect.right;\nexport var bisectLeft = ascendingBisect.left;\nexport default bisectRight;\n","import {pair} from \"./pairs\";\n\nexport default function(values0, values1, reduce) {\n var n0 = values0.length,\n n1 = values1.length,\n values = new Array(n0 * n1),\n i0,\n i1,\n i,\n value0;\n\n if (reduce == null) reduce = pair;\n\n for (i0 = i = 0; i0 < n0; ++i0) {\n for (value0 = values0[i0], i1 = 0; i1 < n1; ++i1, ++i) {\n values[i] = reduce(value0, values1[i1]);\n }\n }\n\n return values;\n}\n","export default function(x) {\n return x === null ? NaN : +x;\n}\n","var array = Array.prototype;\n\nexport var slice = array.slice;\nexport var map = array.map;\n","export default function(start, stop, step) {\n start = +start, stop = +stop, step = (n = arguments.length) < 2 ? (stop = start, start = 0, 1) : n < 3 ? 1 : +step;\n\n var i = -1,\n n = Math.max(0, Math.ceil((stop - start) / step)) | 0,\n range = new Array(n);\n\n while (++i < n) {\n range[i] = start + i * step;\n }\n\n return range;\n}\n","var e10 = Math.sqrt(50),\n e5 = Math.sqrt(10),\n e2 = Math.sqrt(2);\n\nexport default function(start, stop, count) {\n var reverse,\n i = -1,\n n,\n ticks,\n step;\n\n stop = +stop, start = +start, count = +count;\n if (start === stop && count > 0) return [start];\n if (reverse = stop < start) n = start, start = stop, stop = n;\n if ((step = tickIncrement(start, stop, count)) === 0 || !isFinite(step)) return [];\n\n if (step > 0) {\n start = Math.ceil(start / step);\n stop = Math.floor(stop / step);\n ticks = new Array(n = Math.ceil(stop - start + 1));\n while (++i < n) ticks[i] = (start + i) * step;\n } else {\n start = Math.floor(start * step);\n stop = Math.ceil(stop * step);\n ticks = new Array(n = Math.ceil(start - stop + 1));\n while (++i < n) ticks[i] = (start - i) / step;\n }\n\n if (reverse) ticks.reverse();\n\n return ticks;\n}\n\nexport function tickIncrement(start, stop, count) {\n var step = (stop - start) / Math.max(0, count),\n power = Math.floor(Math.log(step) / Math.LN10),\n error = step / Math.pow(10, power);\n return power >= 0\n ? (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1) * Math.pow(10, power)\n : -Math.pow(10, -power) / (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1);\n}\n\nexport function tickStep(start, stop, count) {\n var step0 = Math.abs(stop - start) / Math.max(0, count),\n step1 = Math.pow(10, Math.floor(Math.log(step0) / Math.LN10)),\n error = step0 / step1;\n if (error >= e10) step1 *= 10;\n else if (error >= e5) step1 *= 5;\n else if (error >= e2) step1 *= 2;\n return stop < start ? -step1 : step1;\n}\n","export default function(values) {\n return Math.ceil(Math.log(values.length) / Math.LN2) + 1;\n}\n","import number from \"./number\";\n\nexport default function(values, p, valueof) {\n if (valueof == null) valueof = number;\n if (!(n = values.length)) return;\n if ((p = +p) <= 0 || n < 2) return +valueof(values[0], 0, values);\n if (p >= 1) return +valueof(values[n - 1], n - 1, values);\n var n,\n i = (n - 1) * p,\n i0 = Math.floor(i),\n value0 = +valueof(values[i0], i0, values),\n value1 = +valueof(values[i0 + 1], i0 + 1, values);\n return value0 + (value1 - value0) * (i - i0);\n}\n","export var prefix = \"$\";\n\nfunction Map() {}\n\nMap.prototype = map.prototype = {\n constructor: Map,\n has: function(key) {\n return (prefix + key) in this;\n },\n get: function(key) {\n return this[prefix + key];\n },\n set: function(key, value) {\n this[prefix + key] = value;\n return this;\n },\n remove: function(key) {\n var property = prefix + key;\n return property in this && delete this[property];\n },\n clear: function() {\n for (var property in this) if (property[0] === prefix) delete this[property];\n },\n keys: function() {\n var keys = [];\n for (var property in this) if (property[0] === prefix) keys.push(property.slice(1));\n return keys;\n },\n values: function() {\n var values = [];\n for (var property in this) if (property[0] === prefix) values.push(this[property]);\n return values;\n },\n entries: function() {\n var entries = [];\n for (var property in this) if (property[0] === prefix) entries.push({key: property.slice(1), value: this[property]});\n return entries;\n },\n size: function() {\n var size = 0;\n for (var property in this) if (property[0] === prefix) ++size;\n return size;\n },\n empty: function() {\n for (var property in this) if (property[0] === prefix) return false;\n return true;\n },\n each: function(f) {\n for (var property in this) if (property[0] === prefix) f(this[property], property.slice(1), this);\n }\n};\n\nfunction map(object, f) {\n var map = new Map;\n\n // Copy constructor.\n if (object instanceof Map) object.each(function(value, key) { map.set(key, value); });\n\n // Index array by numeric index or specified key function.\n else if (Array.isArray(object)) {\n var i = -1,\n n = object.length,\n o;\n\n if (f == null) while (++i < n) map.set(i, object[i]);\n else while (++i < n) map.set(f(o = object[i], i, object), o);\n }\n\n // Convert object to map.\n else if (object) for (var key in object) map.set(key, object[key]);\n\n return map;\n}\n\nexport default map;\n","import map from \"./map\";\n\nexport default function() {\n var keys = [],\n sortKeys = [],\n sortValues,\n rollup,\n nest;\n\n function apply(array, depth, createResult, setResult) {\n if (depth >= keys.length) {\n if (sortValues != null) array.sort(sortValues);\n return rollup != null ? rollup(array) : array;\n }\n\n var i = -1,\n n = array.length,\n key = keys[depth++],\n keyValue,\n value,\n valuesByKey = map(),\n values,\n result = createResult();\n\n while (++i < n) {\n if (values = valuesByKey.get(keyValue = key(value = array[i]) + \"\")) {\n values.push(value);\n } else {\n valuesByKey.set(keyValue, [value]);\n }\n }\n\n valuesByKey.each(function(values, key) {\n setResult(result, key, apply(values, depth, createResult, setResult));\n });\n\n return result;\n }\n\n function entries(map, depth) {\n if (++depth > keys.length) return map;\n var array, sortKey = sortKeys[depth - 1];\n if (rollup != null && depth >= keys.length) array = map.entries();\n else array = [], map.each(function(v, k) { array.push({key: k, values: entries(v, depth)}); });\n return sortKey != null ? array.sort(function(a, b) { return sortKey(a.key, b.key); }) : array;\n }\n\n return nest = {\n object: function(array) { return apply(array, 0, createObject, setObject); },\n map: function(array) { return apply(array, 0, createMap, setMap); },\n entries: function(array) { return entries(apply(array, 0, createMap, setMap), 0); },\n key: function(d) { keys.push(d); return nest; },\n sortKeys: function(order) { sortKeys[keys.length - 1] = order; return nest; },\n sortValues: function(order) { sortValues = order; return nest; },\n rollup: function(f) { rollup = f; return nest; }\n };\n}\n\nfunction createObject() {\n return {};\n}\n\nfunction setObject(object, key, value) {\n object[key] = value;\n}\n\nfunction createMap() {\n return map();\n}\n\nfunction setMap(map, key, value) {\n map.set(key, value);\n}\n","import {default as map, prefix} from \"./map\";\n\nfunction Set() {}\n\nvar proto = map.prototype;\n\nSet.prototype = set.prototype = {\n constructor: Set,\n has: proto.has,\n add: function(value) {\n value += \"\";\n this[prefix + value] = value;\n return this;\n },\n remove: proto.remove,\n clear: proto.clear,\n values: proto.keys,\n size: proto.size,\n empty: proto.empty,\n each: proto.each\n};\n\nfunction set(object, f) {\n var set = new Set;\n\n // Copy constructor.\n if (object instanceof Set) object.each(function(value) { set.add(value); });\n\n // Otherwise, assume it’s an array.\n else if (object) {\n var i = -1, n = object.length;\n if (f == null) while (++i < n) set.add(object[i]);\n else while (++i < n) set.add(f(object[i], i, object));\n }\n\n return set;\n}\n\nexport default set;\n","var array = Array.prototype;\n\nexport var map = array.map;\nexport var slice = array.slice;\n","import {map} from \"d3-collection\";\nimport {slice} from \"./array\";\n\nexport var implicit = {name: \"implicit\"};\n\nexport default function ordinal(range) {\n var index = map(),\n domain = [],\n unknown = implicit;\n\n range = range == null ? [] : slice.call(range);\n\n function scale(d) {\n var key = d + \"\", i = index.get(key);\n if (!i) {\n if (unknown !== implicit) return unknown;\n index.set(key, i = domain.push(d));\n }\n return range[(i - 1) % range.length];\n }\n\n scale.domain = function(_) {\n if (!arguments.length) return domain.slice();\n domain = [], index = map();\n var i = -1, n = _.length, d, key;\n while (++i < n) if (!index.has(key = (d = _[i]) + \"\")) index.set(key, domain.push(d));\n return scale;\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = slice.call(_), scale) : range.slice();\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n scale.copy = function() {\n return ordinal()\n .domain(domain)\n .range(range)\n .unknown(unknown);\n };\n\n return scale;\n}\n","import {range as sequence} from \"d3-array\";\nimport ordinal from \"./ordinal\";\n\nexport default function band() {\n var scale = ordinal().unknown(undefined),\n domain = scale.domain,\n ordinalRange = scale.range,\n range = [0, 1],\n step,\n bandwidth,\n round = false,\n paddingInner = 0,\n paddingOuter = 0,\n align = 0.5;\n\n delete scale.unknown;\n function rescale() {\n var n = domain().length,\n reverse = range[1] < range[0],\n start = range[reverse - 0],\n stop = range[1 - reverse];\n step = (stop - start) / Math.max(1, n - paddingInner + paddingOuter * 2);\n if (round) step = Math.floor(step);\n start += (stop - start - step * (n - paddingInner)) * align;\n bandwidth = step * (1 - paddingInner);\n if (round) start = Math.round(start), bandwidth = Math.round(bandwidth);\n var values = sequence(n).map(function(i) { return start + step * i; });\n return ordinalRange(reverse ? values.reverse() : values);\n }\n\n scale.domain = function(_) {\n return arguments.length ? (domain(_), rescale()) : domain();\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = [+_[0], +_[1]], rescale()) : range.slice();\n };\n\n scale.rangeRound = function(_) {\n return range = [+_[0], +_[1]], round = true, rescale();\n };\n\n scale.bandwidth = function() {\n return bandwidth;\n };\n\n scale.step = function() {\n return step;\n };\n\n scale.round = function(_) {\n return arguments.length ? (round = !!_, rescale()) : round;\n };\n\n scale.padding = function(_) {\n return arguments.length ? (paddingInner = paddingOuter = Math.max(0, Math.min(1, _)), rescale()) : paddingInner;\n };\n\n scale.paddingInner = function(_) {\n return arguments.length ? (paddingInner = Math.max(0, Math.min(1, _)), rescale()) : paddingInner;\n };\n\n scale.paddingOuter = function(_) {\n return arguments.length ? (paddingOuter = Math.max(0, Math.min(1, _)), rescale()) : paddingOuter;\n };\n\n scale.align = function(_) {\n return arguments.length ? (align = Math.max(0, Math.min(1, _)), rescale()) : align;\n };\n\n scale.copy = function() {\n return band()\n .domain(domain())\n .range(range)\n .round(round)\n .paddingInner(paddingInner)\n .paddingOuter(paddingOuter)\n .align(align);\n };\n\n scale.invertExtent = function(r0, r1) {\n var lo = +r0,\n hi = arguments.length > 1 ? +r1 : lo,\n reverse = range[1] < range[0],\n values = reverse ? ordinalRange().reverse() : ordinalRange(),\n n = values.length - 1, a, b, t,\n hiIndex;\n values.push(values[n] + this.step());\n // order range inputs, bail if outside of scale range\n if (hi < lo) t = lo, lo = hi, hi = t;\n if (hi < values[0] || lo > range[1-reverse]) return undefined;\n\n // binary search to index into scale range\n a = Math.max(0, getClosestIndexOf(values, lo));\n hiIndex = getClosestIndexOf(values, hi);\n b = lo===hi ? a : Math.max(a, hiIndex - 1);\n\n // increment index a if lo is within padding gap\n // if (lo - values[a] > bandwidth + 1e-10) ++a;\n\n if (reverse) t = a, a = n - b, b = n - t; // map + swap\n return (a > b) ? undefined : domain().slice(a, b+1);\n };\n\n scale.invert = function (r0, r1) {\n var lo = +r0,\n hi = arguments.length > 1 ? +r1 : lo,\n reverse = range[1] < range[0],\n values = reverse ? ordinalRange().reverse() : ordinalRange(),\n n = values.length - 1,\n a,\n t;\n\n // order range inputs, bail if outside of scale range\n if (hi < lo) t = lo, lo = hi, hi = t;\n if (hi < values[0] || lo > range[1-reverse]) return undefined;\n\n // binary search to index into scale range\n a = Math.max(0, getClosestIndexOf(values, lo, 'left'));\n\n // increment index a if lo is within padding gap\n // if (lo - values[a] > bandwidth + 1e-10) ++a;\n\n return domain()[reverse ? n - a : a];\n }\n return rescale();\n}\n\nfunction pointish(scale) {\n var copy = scale.copy;\n\n scale.padding = scale.paddingOuter;\n delete scale.paddingInner;\n delete scale.paddingOuter;\n\n scale.copy = function() {\n return pointish(copy());\n };\n\n return scale;\n}\n\nexport function point() {\n return pointish(band().paddingInner(1));\n}\n\nfunction getClosestIndexOf (arr, value, side) {\n var low = 0,\n arrLen = arr.length,\n high = arrLen - 1,\n highVal,\n mid,\n d1,\n d2;\n\n while (low < high) {\n mid = Math.floor((low + high) / 2);\n d1 = Math.abs(arr[mid] - value);\n d2 = Math.abs(arr[mid + 1] - value);\n\n if (d2 <= d1) {\n low = mid + 1;\n }\n else {\n high = mid;\n }\n }\n\n if (!side) {\n return high;\n }\n\n highVal = arr[high];\n if (highVal === value) {\n return high;\n } else if (highVal > value) {\n if (high === 0) { return high; }\n return side === 'left'? high - 1 : high;\n } else {\n if (high === arr.length - 1) { return high; }\n return side === 'left'? high : high + 1;\n }\n}","export default function(constructor, factory, prototype) {\n constructor.prototype = factory.prototype = prototype;\n prototype.constructor = constructor;\n}\n\nexport function extend(parent, definition) {\n var prototype = Object.create(parent.prototype);\n for (var key in definition) prototype[key] = definition[key];\n return prototype;\n}\n","import define, {extend} from \"./define\";\n\nexport function Color() {}\n\nexport var darker = 0.7;\nexport var brighter = 1 / darker;\n\nvar reI = \"\\\\s*([+-]?\\\\d+)\\\\s*\",\n reN = \"\\\\s*([+-]?\\\\d*\\\\.?\\\\d+(?:[eE][+-]?\\\\d+)?)\\\\s*\",\n reP = \"\\\\s*([+-]?\\\\d*\\\\.?\\\\d+(?:[eE][+-]?\\\\d+)?)%\\\\s*\",\n reHex3 = /^#([0-9a-f]{3})$/,\n reHex6 = /^#([0-9a-f]{6})$/,\n reRgbInteger = new RegExp(\"^rgb\\\\(\" + [reI, reI, reI] + \"\\\\)$\"),\n reRgbPercent = new RegExp(\"^rgb\\\\(\" + [reP, reP, reP] + \"\\\\)$\"),\n reRgbaInteger = new RegExp(\"^rgba\\\\(\" + [reI, reI, reI, reN] + \"\\\\)$\"),\n reRgbaPercent = new RegExp(\"^rgba\\\\(\" + [reP, reP, reP, reN] + \"\\\\)$\"),\n reHslPercent = new RegExp(\"^hsl\\\\(\" + [reN, reP, reP] + \"\\\\)$\"),\n reHslaPercent = new RegExp(\"^hsla\\\\(\" + [reN, reP, reP, reN] + \"\\\\)$\");\n\nvar named = {\n aliceblue: 0xf0f8ff,\n antiquewhite: 0xfaebd7,\n aqua: 0x00ffff,\n aquamarine: 0x7fffd4,\n azure: 0xf0ffff,\n beige: 0xf5f5dc,\n bisque: 0xffe4c4,\n black: 0x000000,\n blanchedalmond: 0xffebcd,\n blue: 0x0000ff,\n blueviolet: 0x8a2be2,\n brown: 0xa52a2a,\n burlywood: 0xdeb887,\n cadetblue: 0x5f9ea0,\n chartreuse: 0x7fff00,\n chocolate: 0xd2691e,\n coral: 0xff7f50,\n cornflowerblue: 0x6495ed,\n cornsilk: 0xfff8dc,\n crimson: 0xdc143c,\n cyan: 0x00ffff,\n darkblue: 0x00008b,\n darkcyan: 0x008b8b,\n darkgoldenrod: 0xb8860b,\n darkgray: 0xa9a9a9,\n darkgreen: 0x006400,\n darkgrey: 0xa9a9a9,\n darkkhaki: 0xbdb76b,\n darkmagenta: 0x8b008b,\n darkolivegreen: 0x556b2f,\n darkorange: 0xff8c00,\n darkorchid: 0x9932cc,\n darkred: 0x8b0000,\n darksalmon: 0xe9967a,\n darkseagreen: 0x8fbc8f,\n darkslateblue: 0x483d8b,\n darkslategray: 0x2f4f4f,\n darkslategrey: 0x2f4f4f,\n darkturquoise: 0x00ced1,\n darkviolet: 0x9400d3,\n deeppink: 0xff1493,\n deepskyblue: 0x00bfff,\n dimgray: 0x696969,\n dimgrey: 0x696969,\n dodgerblue: 0x1e90ff,\n firebrick: 0xb22222,\n floralwhite: 0xfffaf0,\n forestgreen: 0x228b22,\n fuchsia: 0xff00ff,\n gainsboro: 0xdcdcdc,\n ghostwhite: 0xf8f8ff,\n gold: 0xffd700,\n goldenrod: 0xdaa520,\n gray: 0x808080,\n green: 0x008000,\n greenyellow: 0xadff2f,\n grey: 0x808080,\n honeydew: 0xf0fff0,\n hotpink: 0xff69b4,\n indianred: 0xcd5c5c,\n indigo: 0x4b0082,\n ivory: 0xfffff0,\n khaki: 0xf0e68c,\n lavender: 0xe6e6fa,\n lavenderblush: 0xfff0f5,\n lawngreen: 0x7cfc00,\n lemonchiffon: 0xfffacd,\n lightblue: 0xadd8e6,\n lightcoral: 0xf08080,\n lightcyan: 0xe0ffff,\n lightgoldenrodyellow: 0xfafad2,\n lightgray: 0xd3d3d3,\n lightgreen: 0x90ee90,\n lightgrey: 0xd3d3d3,\n lightpink: 0xffb6c1,\n lightsalmon: 0xffa07a,\n lightseagreen: 0x20b2aa,\n lightskyblue: 0x87cefa,\n lightslategray: 0x778899,\n lightslategrey: 0x778899,\n lightsteelblue: 0xb0c4de,\n lightyellow: 0xffffe0,\n lime: 0x00ff00,\n limegreen: 0x32cd32,\n linen: 0xfaf0e6,\n magenta: 0xff00ff,\n maroon: 0x800000,\n mediumaquamarine: 0x66cdaa,\n mediumblue: 0x0000cd,\n mediumorchid: 0xba55d3,\n mediumpurple: 0x9370db,\n mediumseagreen: 0x3cb371,\n mediumslateblue: 0x7b68ee,\n mediumspringgreen: 0x00fa9a,\n mediumturquoise: 0x48d1cc,\n mediumvioletred: 0xc71585,\n midnightblue: 0x191970,\n mintcream: 0xf5fffa,\n mistyrose: 0xffe4e1,\n moccasin: 0xffe4b5,\n navajowhite: 0xffdead,\n navy: 0x000080,\n oldlace: 0xfdf5e6,\n olive: 0x808000,\n olivedrab: 0x6b8e23,\n orange: 0xffa500,\n orangered: 0xff4500,\n orchid: 0xda70d6,\n palegoldenrod: 0xeee8aa,\n palegreen: 0x98fb98,\n paleturquoise: 0xafeeee,\n palevioletred: 0xdb7093,\n papayawhip: 0xffefd5,\n peachpuff: 0xffdab9,\n peru: 0xcd853f,\n pink: 0xffc0cb,\n plum: 0xdda0dd,\n powderblue: 0xb0e0e6,\n purple: 0x800080,\n rebeccapurple: 0x663399,\n red: 0xff0000,\n rosybrown: 0xbc8f8f,\n royalblue: 0x4169e1,\n saddlebrown: 0x8b4513,\n salmon: 0xfa8072,\n sandybrown: 0xf4a460,\n seagreen: 0x2e8b57,\n seashell: 0xfff5ee,\n sienna: 0xa0522d,\n silver: 0xc0c0c0,\n skyblue: 0x87ceeb,\n slateblue: 0x6a5acd,\n slategray: 0x708090,\n slategrey: 0x708090,\n snow: 0xfffafa,\n springgreen: 0x00ff7f,\n steelblue: 0x4682b4,\n tan: 0xd2b48c,\n teal: 0x008080,\n thistle: 0xd8bfd8,\n tomato: 0xff6347,\n turquoise: 0x40e0d0,\n violet: 0xee82ee,\n wheat: 0xf5deb3,\n white: 0xffffff,\n whitesmoke: 0xf5f5f5,\n yellow: 0xffff00,\n yellowgreen: 0x9acd32\n};\n\ndefine(Color, color, {\n displayable: function() {\n return this.rgb().displayable();\n },\n hex: function() {\n return this.rgb().hex();\n },\n toString: function() {\n return this.rgb() + \"\";\n }\n});\n\nexport default function color(format) {\n var m;\n format = (format + \"\").trim().toLowerCase();\n return (m = reHex3.exec(format)) ? (m = parseInt(m[1], 16), new Rgb((m >> 8 & 0xf) | (m >> 4 & 0x0f0), (m >> 4 & 0xf) | (m & 0xf0), ((m & 0xf) << 4) | (m & 0xf), 1)) // #f00\n : (m = reHex6.exec(format)) ? rgbn(parseInt(m[1], 16)) // #ff0000\n : (m = reRgbInteger.exec(format)) ? new Rgb(m[1], m[2], m[3], 1) // rgb(255, 0, 0)\n : (m = reRgbPercent.exec(format)) ? new Rgb(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, 1) // rgb(100%, 0%, 0%)\n : (m = reRgbaInteger.exec(format)) ? rgba(m[1], m[2], m[3], m[4]) // rgba(255, 0, 0, 1)\n : (m = reRgbaPercent.exec(format)) ? rgba(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, m[4]) // rgb(100%, 0%, 0%, 1)\n : (m = reHslPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, 1) // hsl(120, 50%, 50%)\n : (m = reHslaPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, m[4]) // hsla(120, 50%, 50%, 1)\n : named.hasOwnProperty(format) ? rgbn(named[format])\n : format === \"transparent\" ? new Rgb(NaN, NaN, NaN, 0)\n : null;\n}\n\nfunction rgbn(n) {\n return new Rgb(n >> 16 & 0xff, n >> 8 & 0xff, n & 0xff, 1);\n}\n\nfunction rgba(r, g, b, a) {\n if (a <= 0) r = g = b = NaN;\n return new Rgb(r, g, b, a);\n}\n\nexport function rgbConvert(o) {\n if (!(o instanceof Color)) o = color(o);\n if (!o) return new Rgb;\n o = o.rgb();\n return new Rgb(o.r, o.g, o.b, o.opacity);\n}\n\nexport function rgb(r, g, b, opacity) {\n return arguments.length === 1 ? rgbConvert(r) : new Rgb(r, g, b, opacity == null ? 1 : opacity);\n}\n\nexport function Rgb(r, g, b, opacity) {\n this.r = +r;\n this.g = +g;\n this.b = +b;\n this.opacity = +opacity;\n}\n\ndefine(Rgb, rgb, extend(Color, {\n brighter: function(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n },\n darker: function(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n },\n rgb: function() {\n return this;\n },\n displayable: function() {\n return (0 <= this.r && this.r <= 255)\n && (0 <= this.g && this.g <= 255)\n && (0 <= this.b && this.b <= 255)\n && (0 <= this.opacity && this.opacity <= 1);\n },\n hex: function() {\n return \"#\" + hex(this.r) + hex(this.g) + hex(this.b);\n },\n toString: function() {\n var a = this.opacity; a = isNaN(a) ? 1 : Math.max(0, Math.min(1, a));\n return (a === 1 ? \"rgb(\" : \"rgba(\")\n + Math.max(0, Math.min(255, Math.round(this.r) || 0)) + \", \"\n + Math.max(0, Math.min(255, Math.round(this.g) || 0)) + \", \"\n + Math.max(0, Math.min(255, Math.round(this.b) || 0))\n + (a === 1 ? \")\" : \", \" + a + \")\");\n }\n}));\n\nfunction hex(value) {\n value = Math.max(0, Math.min(255, Math.round(value) || 0));\n return (value < 16 ? \"0\" : \"\") + value.toString(16);\n}\n\nfunction hsla(h, s, l, a) {\n if (a <= 0) h = s = l = NaN;\n else if (l <= 0 || l >= 1) h = s = NaN;\n else if (s <= 0) h = NaN;\n return new Hsl(h, s, l, a);\n}\n\nexport function hslConvert(o) {\n if (o instanceof Hsl) return new Hsl(o.h, o.s, o.l, o.opacity);\n if (!(o instanceof Color)) o = color(o);\n if (!o) return new Hsl;\n if (o instanceof Hsl) return o;\n o = o.rgb();\n var r = o.r / 255,\n g = o.g / 255,\n b = o.b / 255,\n min = Math.min(r, g, b),\n max = Math.max(r, g, b),\n h = NaN,\n s = max - min,\n l = (max + min) / 2;\n if (s) {\n if (r === max) h = (g - b) / s + (g < b) * 6;\n else if (g === max) h = (b - r) / s + 2;\n else h = (r - g) / s + 4;\n s /= l < 0.5 ? max + min : 2 - max - min;\n h *= 60;\n } else {\n s = l > 0 && l < 1 ? 0 : h;\n }\n return new Hsl(h, s, l, o.opacity);\n}\n\nexport function hsl(h, s, l, opacity) {\n return arguments.length === 1 ? hslConvert(h) : new Hsl(h, s, l, opacity == null ? 1 : opacity);\n}\n\nfunction Hsl(h, s, l, opacity) {\n this.h = +h;\n this.s = +s;\n this.l = +l;\n this.opacity = +opacity;\n}\n\ndefine(Hsl, hsl, extend(Color, {\n brighter: function(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Hsl(this.h, this.s, this.l * k, this.opacity);\n },\n darker: function(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Hsl(this.h, this.s, this.l * k, this.opacity);\n },\n rgb: function() {\n var h = this.h % 360 + (this.h < 0) * 360,\n s = isNaN(h) || isNaN(this.s) ? 0 : this.s,\n l = this.l,\n m2 = l + (l < 0.5 ? l : 1 - l) * s,\n m1 = 2 * l - m2;\n return new Rgb(\n hsl2rgb(h >= 240 ? h - 240 : h + 120, m1, m2),\n hsl2rgb(h, m1, m2),\n hsl2rgb(h < 120 ? h + 240 : h - 120, m1, m2),\n this.opacity\n );\n },\n displayable: function() {\n return (0 <= this.s && this.s <= 1 || isNaN(this.s))\n && (0 <= this.l && this.l <= 1)\n && (0 <= this.opacity && this.opacity <= 1);\n }\n}));\n\n/* From FvD 13.37, CSS Color Module Level 3 */\nfunction hsl2rgb(h, m1, m2) {\n return (h < 60 ? m1 + (m2 - m1) * h / 60\n : h < 180 ? m2\n : h < 240 ? m1 + (m2 - m1) * (240 - h) / 60\n : m1) * 255;\n}\n","export var deg2rad = Math.PI / 180;\nexport var rad2deg = 180 / Math.PI;\n","import define, {extend} from \"./define\";\nimport {Color, rgbConvert, Rgb} from \"./color\";\nimport {deg2rad, rad2deg} from \"./math\";\n\n// https://beta.observablehq.com/@mbostock/lab-and-rgb\nvar K = 18,\n Xn = 0.96422,\n Yn = 1,\n Zn = 0.82521,\n t0 = 4 / 29,\n t1 = 6 / 29,\n t2 = 3 * t1 * t1,\n t3 = t1 * t1 * t1;\n\nfunction labConvert(o) {\n if (o instanceof Lab) return new Lab(o.l, o.a, o.b, o.opacity);\n if (o instanceof Hcl) {\n if (isNaN(o.h)) return new Lab(o.l, 0, 0, o.opacity);\n var h = o.h * deg2rad;\n return new Lab(o.l, Math.cos(h) * o.c, Math.sin(h) * o.c, o.opacity);\n }\n if (!(o instanceof Rgb)) o = rgbConvert(o);\n var r = rgb2lrgb(o.r),\n g = rgb2lrgb(o.g),\n b = rgb2lrgb(o.b),\n y = xyz2lab((0.2225045 * r + 0.7168786 * g + 0.0606169 * b) / Yn), x, z;\n if (r === g && g === b) x = z = y; else {\n x = xyz2lab((0.4360747 * r + 0.3850649 * g + 0.1430804 * b) / Xn);\n z = xyz2lab((0.0139322 * r + 0.0971045 * g + 0.7141733 * b) / Zn);\n }\n return new Lab(116 * y - 16, 500 * (x - y), 200 * (y - z), o.opacity);\n}\n\nexport function gray(l, opacity) {\n return new Lab(l, 0, 0, opacity == null ? 1 : opacity);\n}\n\nexport default function lab(l, a, b, opacity) {\n return arguments.length === 1 ? labConvert(l) : new Lab(l, a, b, opacity == null ? 1 : opacity);\n}\n\nexport function Lab(l, a, b, opacity) {\n this.l = +l;\n this.a = +a;\n this.b = +b;\n this.opacity = +opacity;\n}\n\ndefine(Lab, lab, extend(Color, {\n brighter: function(k) {\n return new Lab(this.l + K * (k == null ? 1 : k), this.a, this.b, this.opacity);\n },\n darker: function(k) {\n return new Lab(this.l - K * (k == null ? 1 : k), this.a, this.b, this.opacity);\n },\n rgb: function() {\n var y = (this.l + 16) / 116,\n x = isNaN(this.a) ? y : y + this.a / 500,\n z = isNaN(this.b) ? y : y - this.b / 200;\n x = Xn * lab2xyz(x);\n y = Yn * lab2xyz(y);\n z = Zn * lab2xyz(z);\n return new Rgb(\n lrgb2rgb( 3.1338561 * x - 1.6168667 * y - 0.4906146 * z),\n lrgb2rgb(-0.9787684 * x + 1.9161415 * y + 0.0334540 * z),\n lrgb2rgb( 0.0719453 * x - 0.2289914 * y + 1.4052427 * z),\n this.opacity\n );\n }\n}));\n\nfunction xyz2lab(t) {\n return t > t3 ? Math.pow(t, 1 / 3) : t / t2 + t0;\n}\n\nfunction lab2xyz(t) {\n return t > t1 ? t * t * t : t2 * (t - t0);\n}\n\nfunction lrgb2rgb(x) {\n return 255 * (x <= 0.0031308 ? 12.92 * x : 1.055 * Math.pow(x, 1 / 2.4) - 0.055);\n}\n\nfunction rgb2lrgb(x) {\n return (x /= 255) <= 0.04045 ? x / 12.92 : Math.pow((x + 0.055) / 1.055, 2.4);\n}\n\nfunction hclConvert(o) {\n if (o instanceof Hcl) return new Hcl(o.h, o.c, o.l, o.opacity);\n if (!(o instanceof Lab)) o = labConvert(o);\n if (o.a === 0 && o.b === 0) return new Hcl(NaN, 0, o.l, o.opacity);\n var h = Math.atan2(o.b, o.a) * rad2deg;\n return new Hcl(h < 0 ? h + 360 : h, Math.sqrt(o.a * o.a + o.b * o.b), o.l, o.opacity);\n}\n\nexport function lch(l, c, h, opacity) {\n return arguments.length === 1 ? hclConvert(l) : new Hcl(h, c, l, opacity == null ? 1 : opacity);\n}\n\nexport function hcl(h, c, l, opacity) {\n return arguments.length === 1 ? hclConvert(h) : new Hcl(h, c, l, opacity == null ? 1 : opacity);\n}\n\nexport function Hcl(h, c, l, opacity) {\n this.h = +h;\n this.c = +c;\n this.l = +l;\n this.opacity = +opacity;\n}\n\ndefine(Hcl, hcl, extend(Color, {\n brighter: function(k) {\n return new Hcl(this.h, this.c, this.l + K * (k == null ? 1 : k), this.opacity);\n },\n darker: function(k) {\n return new Hcl(this.h, this.c, this.l - K * (k == null ? 1 : k), this.opacity);\n },\n rgb: function() {\n return labConvert(this).rgb();\n }\n}));\n","import define, {extend} from \"./define\";\nimport {Color, rgbConvert, Rgb, darker, brighter} from \"./color\";\nimport {deg2rad, rad2deg} from \"./math\";\n\nvar A = -0.14861,\n B = +1.78277,\n C = -0.29227,\n D = -0.90649,\n E = +1.97294,\n ED = E * D,\n EB = E * B,\n BC_DA = B * C - D * A;\n\nfunction cubehelixConvert(o) {\n if (o instanceof Cubehelix) return new Cubehelix(o.h, o.s, o.l, o.opacity);\n if (!(o instanceof Rgb)) o = rgbConvert(o);\n var r = o.r / 255,\n g = o.g / 255,\n b = o.b / 255,\n l = (BC_DA * b + ED * r - EB * g) / (BC_DA + ED - EB),\n bl = b - l,\n k = (E * (g - l) - C * bl) / D,\n s = Math.sqrt(k * k + bl * bl) / (E * l * (1 - l)), // NaN if l=0 or l=1\n h = s ? Math.atan2(k, bl) * rad2deg - 120 : NaN;\n return new Cubehelix(h < 0 ? h + 360 : h, s, l, o.opacity);\n}\n\nexport default function cubehelix(h, s, l, opacity) {\n return arguments.length === 1 ? cubehelixConvert(h) : new Cubehelix(h, s, l, opacity == null ? 1 : opacity);\n}\n\nexport function Cubehelix(h, s, l, opacity) {\n this.h = +h;\n this.s = +s;\n this.l = +l;\n this.opacity = +opacity;\n}\n\ndefine(Cubehelix, cubehelix, extend(Color, {\n brighter: function(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Cubehelix(this.h, this.s, this.l * k, this.opacity);\n },\n darker: function(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Cubehelix(this.h, this.s, this.l * k, this.opacity);\n },\n rgb: function() {\n var h = isNaN(this.h) ? 0 : (this.h + 120) * deg2rad,\n l = +this.l,\n a = isNaN(this.s) ? 0 : this.s * l * (1 - l),\n cosh = Math.cos(h),\n sinh = Math.sin(h);\n return new Rgb(\n 255 * (l + a * (A * cosh + B * sinh)),\n 255 * (l + a * (C * cosh + D * sinh)),\n 255 * (l + a * (E * cosh)),\n this.opacity\n );\n }\n}));\n","export function basis(t1, v0, v1, v2, v3) {\n var t2 = t1 * t1, t3 = t2 * t1;\n return ((1 - 3 * t1 + 3 * t2 - t3) * v0\n + (4 - 6 * t2 + 3 * t3) * v1\n + (1 + 3 * t1 + 3 * t2 - 3 * t3) * v2\n + t3 * v3) / 6;\n}\n\nexport default function(values) {\n var n = values.length - 1;\n return function(t) {\n var i = t <= 0 ? (t = 0) : t >= 1 ? (t = 1, n - 1) : Math.floor(t * n),\n v1 = values[i],\n v2 = values[i + 1],\n v0 = i > 0 ? values[i - 1] : 2 * v1 - v2,\n v3 = i < n - 1 ? values[i + 2] : 2 * v2 - v1;\n return basis((t - i / n) * n, v0, v1, v2, v3);\n };\n}\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","import constant from \"./constant\";\n\nfunction linear(a, d) {\n return function(t) {\n return a + t * d;\n };\n}\n\nfunction exponential(a, b, y) {\n return a = Math.pow(a, y), b = Math.pow(b, y) - a, y = 1 / y, function(t) {\n return Math.pow(a + t * b, y);\n };\n}\n\nexport function hue(a, b) {\n var d = b - a;\n return d ? linear(a, d > 180 || d < -180 ? d - 360 * Math.round(d / 360) : d) : constant(isNaN(a) ? b : a);\n}\n\nexport function gamma(y) {\n return (y = +y) === 1 ? nogamma : function(a, b) {\n return b - a ? exponential(a, b, y) : constant(isNaN(a) ? b : a);\n };\n}\n\nexport default function nogamma(a, b) {\n var d = b - a;\n return d ? linear(a, d) : constant(isNaN(a) ? b : a);\n}\n","import {rgb as colorRgb} from \"d3-color\";\nimport basis from \"./basis\";\nimport basisClosed from \"./basisClosed\";\nimport nogamma, {gamma} from \"./color\";\n\nexport default (function rgbGamma(y) {\n var color = gamma(y);\n\n function rgb(start, end) {\n var r = color((start = colorRgb(start)).r, (end = colorRgb(end)).r),\n g = color(start.g, end.g),\n b = color(start.b, end.b),\n opacity = nogamma(start.opacity, end.opacity);\n return function(t) {\n start.r = r(t);\n start.g = g(t);\n start.b = b(t);\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n\n rgb.gamma = rgbGamma;\n\n return rgb;\n})(1);\n\nfunction rgbSpline(spline) {\n return function(colors) {\n var n = colors.length,\n r = new Array(n),\n g = new Array(n),\n b = new Array(n),\n i, color;\n for (i = 0; i < n; ++i) {\n color = colorRgb(colors[i]);\n r[i] = color.r || 0;\n g[i] = color.g || 0;\n b[i] = color.b || 0;\n }\n r = spline(r);\n g = spline(g);\n b = spline(b);\n color.opacity = 1;\n return function(t) {\n color.r = r(t);\n color.g = g(t);\n color.b = b(t);\n return color + \"\";\n };\n };\n}\n\nexport var rgbBasis = rgbSpline(basis);\nexport var rgbBasisClosed = rgbSpline(basisClosed);\n","export default function(a, b) {\n return a = +a, b -= a, function(t) {\n return a + b * t;\n };\n}\n","import {basis} from \"./basis\";\n\nexport default function(values) {\n var n = values.length;\n return function(t) {\n var i = Math.floor(((t %= 1) < 0 ? ++t : t) * n),\n v0 = values[(i + n - 1) % n],\n v1 = values[i % n],\n v2 = values[(i + 1) % n],\n v3 = values[(i + 2) % n];\n return basis((t - i / n) * n, v0, v1, v2, v3);\n };\n}\n","import value from \"./value\";\n\nexport default function(a, b) {\n var i = {},\n c = {},\n k;\n\n if (a === null || typeof a !== \"object\") a = {};\n if (b === null || typeof b !== \"object\") b = {};\n\n for (k in b) {\n if (k in a) {\n i[k] = value(a[k], b[k]);\n } else {\n c[k] = b[k];\n }\n }\n\n return function(t) {\n for (k in i) c[k] = i[k](t);\n return c;\n };\n}\n","import number from \"./number\";\n\nvar reA = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n reB = new RegExp(reA.source, \"g\");\n\nfunction zero(b) {\n return function() {\n return b;\n };\n}\n\nfunction one(b) {\n return function(t) {\n return b(t) + \"\";\n };\n}\n\nexport default function(a, b) {\n var bi = reA.lastIndex = reB.lastIndex = 0, // scan index for next number in b\n am, // current match in a\n bm, // current match in b\n bs, // string preceding current number in b, if any\n i = -1, // index in s\n s = [], // string constants and placeholders\n q = []; // number interpolators\n\n // Coerce inputs to strings.\n a = a + \"\", b = b + \"\";\n\n // Interpolate pairs of numbers in a & b.\n while ((am = reA.exec(a))\n && (bm = reB.exec(b))) {\n if ((bs = bm.index) > bi) { // a string precedes the next number in b\n bs = b.slice(bi, bs);\n if (s[i]) s[i] += bs; // coalesce with previous string\n else s[++i] = bs;\n }\n if ((am = am[0]) === (bm = bm[0])) { // numbers in a & b match\n if (s[i]) s[i] += bm; // coalesce with previous string\n else s[++i] = bm;\n } else { // interpolate non-matching numbers\n s[++i] = null;\n q.push({i: i, x: number(am, bm)});\n }\n bi = reB.lastIndex;\n }\n\n // Add remains of b.\n if (bi < b.length) {\n bs = b.slice(bi);\n if (s[i]) s[i] += bs; // coalesce with previous string\n else s[++i] = bs;\n }\n\n // Special optimization for only a single match.\n // Otherwise, interpolate each of the numbers and rejoin the string.\n return s.length < 2 ? (q[0]\n ? one(q[0].x)\n : zero(b))\n : (b = q.length, function(t) {\n for (var i = 0, o; i < b; ++i) s[(o = q[i]).i] = o.x(t);\n return s.join(\"\");\n });\n}\n","import {color} from \"d3-color\";\nimport rgb from \"./rgb\";\nimport array from \"./array\";\nimport date from \"./date\";\nimport number from \"./number\";\nimport object from \"./object\";\nimport string from \"./string\";\nimport constant from \"./constant\";\n\nexport default function(a, b) {\n var t = typeof b, c;\n return b == null || t === \"boolean\" ? constant(b)\n : (t === \"number\" ? number\n : t === \"string\" ? ((c = color(b)) ? (b = c, rgb) : string)\n : b instanceof color ? rgb\n : b instanceof Date ? date\n : Array.isArray(b) ? array\n : typeof b.valueOf !== \"function\" && typeof b.toString !== \"function\" || isNaN(b) ? object\n : number)(a, b);\n}\n","import decompose, {identity} from \"./decompose\";\n\nvar cssNode,\n cssRoot,\n cssView,\n svgNode;\n\nexport function parseCss(value) {\n if (value === \"none\") return identity;\n if (!cssNode) cssNode = document.createElement(\"DIV\"), cssRoot = document.documentElement, cssView = document.defaultView;\n cssNode.style.transform = value;\n value = cssView.getComputedStyle(cssRoot.appendChild(cssNode), null).getPropertyValue(\"transform\");\n cssRoot.removeChild(cssNode);\n value = value.slice(7, -1).split(\",\");\n return decompose(+value[0], +value[1], +value[2], +value[3], +value[4], +value[5]);\n}\n\nexport function parseSvg(value) {\n if (value == null) return identity;\n if (!svgNode) svgNode = document.createElementNS(\"http://www.w3.org/2000/svg\", \"g\");\n svgNode.setAttribute(\"transform\", value);\n if (!(value = svgNode.transform.baseVal.consolidate())) return identity;\n value = value.matrix;\n return decompose(value.a, value.b, value.c, value.d, value.e, value.f);\n}\n","export default function(a, b) {\n var d = new Date;\n return a = +a, b -= a, function(t) {\n return d.setTime(a + b * t), d;\n };\n}\n","import value from \"./value\";\n\nexport default function(a, b) {\n var nb = b ? b.length : 0,\n na = a ? Math.min(nb, a.length) : 0,\n x = new Array(na),\n c = new Array(nb),\n i;\n\n for (i = 0; i < na; ++i) x[i] = value(a[i], b[i]);\n for (; i < nb; ++i) c[i] = b[i];\n\n return function(t) {\n for (i = 0; i < na; ++i) c[i] = x[i](t);\n return c;\n };\n}\n","export default function(a, b) {\n return a = +a, b -= a, function(t) {\n return Math.round(a + b * t);\n };\n}\n","var degrees = 180 / Math.PI;\n\nexport var identity = {\n translateX: 0,\n translateY: 0,\n rotate: 0,\n skewX: 0,\n scaleX: 1,\n scaleY: 1\n};\n\nexport default function(a, b, c, d, e, f) {\n var scaleX, scaleY, skewX;\n if (scaleX = Math.sqrt(a * a + b * b)) a /= scaleX, b /= scaleX;\n if (skewX = a * c + b * d) c -= a * skewX, d -= b * skewX;\n if (scaleY = Math.sqrt(c * c + d * d)) c /= scaleY, d /= scaleY, skewX /= scaleY;\n if (a * d < b * c) a = -a, b = -b, skewX = -skewX, scaleX = -scaleX;\n return {\n translateX: e,\n translateY: f,\n rotate: Math.atan2(b, a) * degrees,\n skewX: Math.atan(skewX) * degrees,\n scaleX: scaleX,\n scaleY: scaleY\n };\n}\n","import number from \"../number\";\nimport {parseCss, parseSvg} from \"./parse\";\n\nfunction interpolateTransform(parse, pxComma, pxParen, degParen) {\n\n function pop(s) {\n return s.length ? s.pop() + \" \" : \"\";\n }\n\n function translate(xa, ya, xb, yb, s, q) {\n if (xa !== xb || ya !== yb) {\n var i = s.push(\"translate(\", null, pxComma, null, pxParen);\n q.push({i: i - 4, x: number(xa, xb)}, {i: i - 2, x: number(ya, yb)});\n } else if (xb || yb) {\n s.push(\"translate(\" + xb + pxComma + yb + pxParen);\n }\n }\n\n function rotate(a, b, s, q) {\n if (a !== b) {\n if (a - b > 180) b += 360; else if (b - a > 180) a += 360; // shortest path\n q.push({i: s.push(pop(s) + \"rotate(\", null, degParen) - 2, x: number(a, b)});\n } else if (b) {\n s.push(pop(s) + \"rotate(\" + b + degParen);\n }\n }\n\n function skewX(a, b, s, q) {\n if (a !== b) {\n q.push({i: s.push(pop(s) + \"skewX(\", null, degParen) - 2, x: number(a, b)});\n } else if (b) {\n s.push(pop(s) + \"skewX(\" + b + degParen);\n }\n }\n\n function scale(xa, ya, xb, yb, s, q) {\n if (xa !== xb || ya !== yb) {\n var i = s.push(pop(s) + \"scale(\", null, \",\", null, \")\");\n q.push({i: i - 4, x: number(xa, xb)}, {i: i - 2, x: number(ya, yb)});\n } else if (xb !== 1 || yb !== 1) {\n s.push(pop(s) + \"scale(\" + xb + \",\" + yb + \")\");\n }\n }\n\n return function(a, b) {\n var s = [], // string constants and placeholders\n q = []; // number interpolators\n a = parse(a), b = parse(b);\n translate(a.translateX, a.translateY, b.translateX, b.translateY, s, q);\n rotate(a.rotate, b.rotate, s, q);\n skewX(a.skewX, b.skewX, s, q);\n scale(a.scaleX, a.scaleY, b.scaleX, b.scaleY, s, q);\n a = b = null; // gc\n return function(t) {\n var i = -1, n = q.length, o;\n while (++i < n) s[(o = q[i]).i] = o.x(t);\n return s.join(\"\");\n };\n };\n}\n\nexport var interpolateTransformCss = interpolateTransform(parseCss, \"px, \", \"px)\", \"deg)\");\nexport var interpolateTransformSvg = interpolateTransform(parseSvg, \", \", \")\", \")\");\n","var rho = Math.SQRT2,\n rho2 = 2,\n rho4 = 4,\n epsilon2 = 1e-12;\n\nfunction cosh(x) {\n return ((x = Math.exp(x)) + 1 / x) / 2;\n}\n\nfunction sinh(x) {\n return ((x = Math.exp(x)) - 1 / x) / 2;\n}\n\nfunction tanh(x) {\n return ((x = Math.exp(2 * x)) - 1) / (x + 1);\n}\n\n// p0 = [ux0, uy0, w0]\n// p1 = [ux1, uy1, w1]\nexport default function(p0, p1) {\n var ux0 = p0[0], uy0 = p0[1], w0 = p0[2],\n ux1 = p1[0], uy1 = p1[1], w1 = p1[2],\n dx = ux1 - ux0,\n dy = uy1 - uy0,\n d2 = dx * dx + dy * dy,\n i,\n S;\n\n // Special case for u0 ≅ u1.\n if (d2 < epsilon2) {\n S = Math.log(w1 / w0) / rho;\n i = function(t) {\n return [\n ux0 + t * dx,\n uy0 + t * dy,\n w0 * Math.exp(rho * t * S)\n ];\n }\n }\n\n // General case.\n else {\n var d1 = Math.sqrt(d2),\n b0 = (w1 * w1 - w0 * w0 + rho4 * d2) / (2 * w0 * rho2 * d1),\n b1 = (w1 * w1 - w0 * w0 - rho4 * d2) / (2 * w1 * rho2 * d1),\n r0 = Math.log(Math.sqrt(b0 * b0 + 1) - b0),\n r1 = Math.log(Math.sqrt(b1 * b1 + 1) - b1);\n S = (r1 - r0) / rho;\n i = function(t) {\n var s = t * S,\n coshr0 = cosh(r0),\n u = w0 / (rho2 * d1) * (coshr0 * tanh(rho * s + r0) - sinh(r0));\n return [\n ux0 + u * dx,\n uy0 + u * dy,\n w0 * coshr0 / cosh(rho * s + r0)\n ];\n }\n }\n\n i.duration = S * 1000;\n\n return i;\n}\n","import {hsl as colorHsl} from \"d3-color\";\nimport color, {hue} from \"./color\";\n\nfunction hsl(hue) {\n return function(start, end) {\n var h = hue((start = colorHsl(start)).h, (end = colorHsl(end)).h),\n s = color(start.s, end.s),\n l = color(start.l, end.l),\n opacity = color(start.opacity, end.opacity);\n return function(t) {\n start.h = h(t);\n start.s = s(t);\n start.l = l(t);\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n}\n\nexport default hsl(hue);\nexport var hslLong = hsl(color);\n","import {hcl as colorHcl} from \"d3-color\";\nimport color, {hue} from \"./color\";\n\nfunction hcl(hue) {\n return function(start, end) {\n var h = hue((start = colorHcl(start)).h, (end = colorHcl(end)).h),\n c = color(start.c, end.c),\n l = color(start.l, end.l),\n opacity = color(start.opacity, end.opacity);\n return function(t) {\n start.h = h(t);\n start.c = c(t);\n start.l = l(t);\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n}\n\nexport default hcl(hue);\nexport var hclLong = hcl(color);\n","import {cubehelix as colorCubehelix} from \"d3-color\";\nimport color, {hue} from \"./color\";\n\nfunction cubehelix(hue) {\n return (function cubehelixGamma(y) {\n y = +y;\n\n function cubehelix(start, end) {\n var h = hue((start = colorCubehelix(start)).h, (end = colorCubehelix(end)).h),\n s = color(start.s, end.s),\n l = color(start.l, end.l),\n opacity = color(start.opacity, end.opacity);\n return function(t) {\n start.h = h(t);\n start.s = s(t);\n start.l = l(Math.pow(t, y));\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n\n cubehelix.gamma = cubehelixGamma;\n\n return cubehelix;\n })(1);\n}\n\nexport default cubehelix(hue);\nexport var cubehelixLong = cubehelix(color);\n","export default function piecewise(interpolate, values) {\n var i = 0, n = values.length - 1, v = values[0], I = new Array(n < 0 ? 0 : n);\n while (i < n) I[i] = interpolate(v, v = values[++i]);\n return function(t) {\n var i = Math.max(0, Math.min(n - 1, Math.floor(t *= n)));\n return I[i](t - i);\n };\n}\n","export default function(interpolator, n) {\n var samples = new Array(n);\n for (var i = 0; i < n; ++i) samples[i] = interpolator(i / (n - 1));\n return samples;\n}\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","export default function(x) {\n return +x;\n}\n","import {bisect} from \"d3-array\";\nimport {interpolate as interpolateValue, interpolateRound} from \"d3-interpolate\";\nimport {map, slice} from \"./array\";\nimport constant from \"./constant\";\nimport number from \"./number\";\n\nvar unit = [0, 1];\n\nexport function deinterpolateLinear(a, b) {\n return (b -= (a = +a))\n ? function(x) { return (x - a) / b; }\n : constant(b);\n}\n\nfunction deinterpolateClamp(deinterpolate) {\n return function(a, b) {\n var d = deinterpolate(a = +a, b = +b);\n return function(x) { return x <= a ? 0 : x >= b ? 1 : d(x); };\n };\n}\n\nfunction reinterpolateClamp(reinterpolate) {\n return function(a, b) {\n var r = reinterpolate(a = +a, b = +b);\n return function(t) { return t <= 0 ? a : t >= 1 ? b : r(t); };\n };\n}\n\nfunction bimap(domain, range, deinterpolate, reinterpolate) {\n var d0 = domain[0], d1 = domain[1], r0 = range[0], r1 = range[1];\n if (d1 < d0) d0 = deinterpolate(d1, d0), r0 = reinterpolate(r1, r0);\n else d0 = deinterpolate(d0, d1), r0 = reinterpolate(r0, r1);\n return function(x) { return r0(d0(x)); };\n}\n\nfunction polymap(domain, range, deinterpolate, reinterpolate) {\n var j = Math.min(domain.length, range.length) - 1,\n d = new Array(j),\n r = new Array(j),\n i = -1;\n\n // Reverse descending domains.\n if (domain[j] < domain[0]) {\n domain = domain.slice().reverse();\n range = range.slice().reverse();\n }\n\n while (++i < j) {\n d[i] = deinterpolate(domain[i], domain[i + 1]);\n r[i] = reinterpolate(range[i], range[i + 1]);\n }\n\n return function(x) {\n var i = bisect(domain, x, 1, j) - 1;\n return r[i](d[i](x));\n };\n}\n\nexport function copy(source, target) {\n return target\n .domain(source.domain())\n .range(source.range())\n .interpolate(source.interpolate())\n .clamp(source.clamp());\n}\n\n// deinterpolate(a, b)(x) takes a domain value x in [a,b] and returns the corresponding parameter t in [0,1].\n// reinterpolate(a, b)(t) takes a parameter t in [0,1] and returns the corresponding domain value x in [a,b].\nexport default function continuous(deinterpolate, reinterpolate) {\n var domain = unit,\n range = unit,\n interpolate = interpolateValue,\n clamp = false,\n piecewise,\n output,\n input;\n\n function rescale() {\n piecewise = Math.min(domain.length, range.length) > 2 ? polymap : bimap;\n output = input = null;\n return scale;\n }\n\n function scale(x) {\n return (output || (output = piecewise(domain, range, clamp ? deinterpolateClamp(deinterpolate) : deinterpolate, interpolate)))(+x);\n }\n\n scale.invert = function(y) {\n return (input || (input = piecewise(range, domain, deinterpolateLinear, clamp ? reinterpolateClamp(reinterpolate) : reinterpolate)))(+y);\n };\n\n scale.domain = function(_) {\n return arguments.length ? (domain = map.call(_, number), rescale()) : domain.slice();\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = slice.call(_), rescale()) : range.slice();\n };\n\n scale.rangeRound = function(_) {\n return range = slice.call(_), interpolate = interpolateRound, rescale();\n };\n\n scale.clamp = function(_) {\n return arguments.length ? (clamp = !!_, rescale()) : clamp;\n };\n\n scale.interpolate = function(_) {\n return arguments.length ? (interpolate = _, rescale()) : interpolate;\n };\n\n return rescale();\n}\n","// Computes the decimal coefficient and exponent of the specified number x with\n// significant digits p, where x is positive and p is in [1, 21] or undefined.\n// For example, formatDecimal(1.23) returns [\"123\", 0].\nexport default function(x, p) {\n if ((i = (x = p ? x.toExponential(p - 1) : x.toExponential()).indexOf(\"e\")) < 0) return null; // NaN, ±Infinity\n var i, coefficient = x.slice(0, i);\n\n // The string returned by toExponential either has the form \\d\\.\\d+e[-+]\\d+\n // (e.g., 1.2e+3) or the form \\de[-+]\\d+ (e.g., 1e+3).\n return [\n coefficient.length > 1 ? coefficient[0] + coefficient.slice(2) : coefficient,\n +x.slice(i + 1)\n ];\n}\n","import formatDecimal from \"./formatDecimal\";\n\nexport default function(x) {\n return x = formatDecimal(Math.abs(x)), x ? x[1] : NaN;\n}\n","// [[fill]align][sign][symbol][0][width][,][.precision][~][type]\nvar re = /^(?:(.)?([<>=^]))?([+\\-( ])?([$#])?(0)?(\\d+)?(,)?(\\.\\d+)?(~)?([a-z%])?$/i;\n\nexport default function formatSpecifier(specifier) {\n return new FormatSpecifier(specifier);\n}\n\nformatSpecifier.prototype = FormatSpecifier.prototype; // instanceof\n\nfunction FormatSpecifier(specifier) {\n if (!(match = re.exec(specifier))) throw new Error(\"invalid format: \" + specifier);\n var match;\n this.fill = match[1] || \" \";\n this.align = match[2] || \">\";\n this.sign = match[3] || \"-\";\n this.symbol = match[4] || \"\";\n this.zero = !!match[5];\n this.width = match[6] && +match[6];\n this.comma = !!match[7];\n this.precision = match[8] && +match[8].slice(1);\n this.trim = !!match[9];\n this.type = match[10] || \"\";\n}\n\nFormatSpecifier.prototype.toString = function() {\n return this.fill\n + this.align\n + this.sign\n + this.symbol\n + (this.zero ? \"0\" : \"\")\n + (this.width == null ? \"\" : Math.max(1, this.width | 0))\n + (this.comma ? \",\" : \"\")\n + (this.precision == null ? \"\" : \".\" + Math.max(0, this.precision | 0))\n + (this.trim ? \"~\" : \"\")\n + this.type;\n};\n","// Trims insignificant zeros, e.g., replaces 1.2000k with 1.2k.\nexport default function(s) {\n out: for (var n = s.length, i = 1, i0 = -1, i1; i < n; ++i) {\n switch (s[i]) {\n case \".\": i0 = i1 = i; break;\n case \"0\": if (i0 === 0) i0 = i; i1 = i; break;\n default: if (i0 > 0) { if (!+s[i]) break out; i0 = 0; } break;\n }\n }\n return i0 > 0 ? s.slice(0, i0) + s.slice(i1 + 1) : s;\n}\n","import formatDecimal from \"./formatDecimal\";\n\nexport var prefixExponent;\n\nexport default function(x, p) {\n var d = formatDecimal(x, p);\n if (!d) return x + \"\";\n var coefficient = d[0],\n exponent = d[1],\n i = exponent - (prefixExponent = Math.max(-8, Math.min(8, Math.floor(exponent / 3))) * 3) + 1,\n n = coefficient.length;\n return i === n ? coefficient\n : i > n ? coefficient + new Array(i - n + 1).join(\"0\")\n : i > 0 ? coefficient.slice(0, i) + \".\" + coefficient.slice(i)\n : \"0.\" + new Array(1 - i).join(\"0\") + formatDecimal(x, Math.max(0, p + i - 1))[0]; // less than 1y!\n}\n","import formatLocale from \"./locale\";\n\nvar locale;\nexport var format;\nexport var formatPrefix;\n\ndefaultLocale({\n decimal: \".\",\n thousands: \",\",\n grouping: [3],\n currency: [\"$\", \"\"]\n});\n\nexport default function defaultLocale(definition) {\n locale = formatLocale(definition);\n format = locale.format;\n formatPrefix = locale.formatPrefix;\n return locale;\n}\n","import formatDecimal from \"./formatDecimal\";\n\nexport default function(x, p) {\n var d = formatDecimal(x, p);\n if (!d) return x + \"\";\n var coefficient = d[0],\n exponent = d[1];\n return exponent < 0 ? \"0.\" + new Array(-exponent).join(\"0\") + coefficient\n : coefficient.length > exponent + 1 ? coefficient.slice(0, exponent + 1) + \".\" + coefficient.slice(exponent + 1)\n : coefficient + new Array(exponent - coefficient.length + 2).join(\"0\");\n}\n","import formatPrefixAuto from \"./formatPrefixAuto\";\nimport formatRounded from \"./formatRounded\";\n\nexport default {\n \"%\": function(x, p) { return (x * 100).toFixed(p); },\n \"b\": function(x) { return Math.round(x).toString(2); },\n \"c\": function(x) { return x + \"\"; },\n \"d\": function(x) { return Math.round(x).toString(10); },\n \"e\": function(x, p) { return x.toExponential(p); },\n \"f\": function(x, p) { return x.toFixed(p); },\n \"g\": function(x, p) { return x.toPrecision(p); },\n \"o\": function(x) { return Math.round(x).toString(8); },\n \"p\": function(x, p) { return formatRounded(x * 100, p); },\n \"r\": formatRounded,\n \"s\": formatPrefixAuto,\n \"X\": function(x) { return Math.round(x).toString(16).toUpperCase(); },\n \"x\": function(x) { return Math.round(x).toString(16); }\n};\n","export default function(x) {\n return x;\n}\n","import exponent from \"./exponent\";\nimport formatGroup from \"./formatGroup\";\nimport formatNumerals from \"./formatNumerals\";\nimport formatSpecifier from \"./formatSpecifier\";\nimport formatTrim from \"./formatTrim\";\nimport formatTypes from \"./formatTypes\";\nimport {prefixExponent} from \"./formatPrefixAuto\";\nimport identity from \"./identity\";\n\nvar prefixes = [\"y\",\"z\",\"a\",\"f\",\"p\",\"n\",\"µ\",\"m\",\"\",\"k\",\"M\",\"G\",\"T\",\"P\",\"E\",\"Z\",\"Y\"];\n\nexport default function(locale) {\n var group = locale.grouping && locale.thousands ? formatGroup(locale.grouping, locale.thousands) : identity,\n currency = locale.currency,\n decimal = locale.decimal,\n numerals = locale.numerals ? formatNumerals(locale.numerals) : identity,\n percent = locale.percent || \"%\";\n\n function newFormat(specifier) {\n specifier = formatSpecifier(specifier);\n\n var fill = specifier.fill,\n align = specifier.align,\n sign = specifier.sign,\n symbol = specifier.symbol,\n zero = specifier.zero,\n width = specifier.width,\n comma = specifier.comma,\n precision = specifier.precision,\n trim = specifier.trim,\n type = specifier.type;\n\n // The \"n\" type is an alias for \",g\".\n if (type === \"n\") comma = true, type = \"g\";\n\n // The \"\" type, and any invalid type, is an alias for \".12~g\".\n else if (!formatTypes[type]) precision == null && (precision = 12), trim = true, type = \"g\";\n\n // If zero fill is specified, padding goes after sign and before digits.\n if (zero || (fill === \"0\" && align === \"=\")) zero = true, fill = \"0\", align = \"=\";\n\n // Compute the prefix and suffix.\n // For SI-prefix, the suffix is lazily computed.\n var prefix = symbol === \"$\" ? currency[0] : symbol === \"#\" && /[boxX]/.test(type) ? \"0\" + type.toLowerCase() : \"\",\n suffix = symbol === \"$\" ? currency[1] : /[%p]/.test(type) ? percent : \"\";\n\n // What format function should we use?\n // Is this an integer type?\n // Can this type generate exponential notation?\n var formatType = formatTypes[type],\n maybeSuffix = /[defgprs%]/.test(type);\n\n // Set the default precision if not specified,\n // or clamp the specified precision to the supported range.\n // For significant precision, it must be in [1, 21].\n // For fixed precision, it must be in [0, 20].\n precision = precision == null ? 6\n : /[gprs]/.test(type) ? Math.max(1, Math.min(21, precision))\n : Math.max(0, Math.min(20, precision));\n\n function format(value) {\n var valuePrefix = prefix,\n valueSuffix = suffix,\n i, n, c;\n\n if (type === \"c\") {\n valueSuffix = formatType(value) + valueSuffix;\n value = \"\";\n } else {\n value = +value;\n\n // Perform the initial formatting.\n var valueNegative = value < 0;\n value = formatType(Math.abs(value), precision);\n\n // Trim insignificant zeros.\n if (trim) value = formatTrim(value);\n\n // If a negative value rounds to zero during formatting, treat as positive.\n if (valueNegative && +value === 0) valueNegative = false;\n\n // Compute the prefix and suffix.\n valuePrefix = (valueNegative ? (sign === \"(\" ? sign : \"-\") : sign === \"-\" || sign === \"(\" ? \"\" : sign) + valuePrefix;\n valueSuffix = (type === \"s\" ? prefixes[8 + prefixExponent / 3] : \"\") + valueSuffix + (valueNegative && sign === \"(\" ? \")\" : \"\");\n\n // Break the formatted value into the integer “value” part that can be\n // grouped, and fractional or exponential “suffix” part that is not.\n if (maybeSuffix) {\n i = -1, n = value.length;\n while (++i < n) {\n if (c = value.charCodeAt(i), 48 > c || c > 57) {\n valueSuffix = (c === 46 ? decimal + value.slice(i + 1) : value.slice(i)) + valueSuffix;\n value = value.slice(0, i);\n break;\n }\n }\n }\n }\n\n // If the fill character is not \"0\", grouping is applied before padding.\n if (comma && !zero) value = group(value, Infinity);\n\n // Compute the padding.\n var length = valuePrefix.length + value.length + valueSuffix.length,\n padding = length < width ? new Array(width - length + 1).join(fill) : \"\";\n\n // If the fill character is \"0\", grouping is applied after padding.\n if (comma && zero) value = group(padding + value, padding.length ? width - valueSuffix.length : Infinity), padding = \"\";\n\n // Reconstruct the final output based on the desired alignment.\n switch (align) {\n case \"<\": value = valuePrefix + value + valueSuffix + padding; break;\n case \"=\": value = valuePrefix + padding + value + valueSuffix; break;\n case \"^\": value = padding.slice(0, length = padding.length >> 1) + valuePrefix + value + valueSuffix + padding.slice(length); break;\n default: value = padding + valuePrefix + value + valueSuffix; break;\n }\n\n return numerals(value);\n }\n\n format.toString = function() {\n return specifier + \"\";\n };\n\n return format;\n }\n\n function formatPrefix(specifier, value) {\n var f = newFormat((specifier = formatSpecifier(specifier), specifier.type = \"f\", specifier)),\n e = Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3,\n k = Math.pow(10, -e),\n prefix = prefixes[8 + e / 3];\n return function(value) {\n return f(k * value) + prefix;\n };\n }\n\n return {\n format: newFormat,\n formatPrefix: formatPrefix\n };\n}\n","export default function(grouping, thousands) {\n return function(value, width) {\n var i = value.length,\n t = [],\n j = 0,\n g = grouping[0],\n length = 0;\n\n while (i > 0 && g > 0) {\n if (length + g + 1 > width) g = Math.max(1, width - length);\n t.push(value.substring(i -= g, i + g));\n if ((length += g + 1) > width) break;\n g = grouping[j = (j + 1) % grouping.length];\n }\n\n return t.reverse().join(thousands);\n };\n}\n","export default function(numerals) {\n return function(value) {\n return value.replace(/[0-9]/g, function(i) {\n return numerals[+i];\n });\n };\n}\n","import exponent from \"./exponent\";\n\nexport default function(step) {\n return Math.max(0, -exponent(Math.abs(step)));\n}\n","import {tickStep} from \"d3-array\";\nimport {format, formatPrefix, formatSpecifier, precisionFixed, precisionPrefix, precisionRound} from \"d3-format\";\n\nexport default function(domain, count, specifier) {\n var start = domain[0],\n stop = domain[domain.length - 1],\n step = tickStep(start, stop, count == null ? 10 : count),\n precision;\n specifier = formatSpecifier(specifier == null ? \",f\" : specifier);\n switch (specifier.type) {\n case \"s\": {\n var value = Math.max(Math.abs(start), Math.abs(stop));\n if (specifier.precision == null && !isNaN(precision = precisionPrefix(step, value))) specifier.precision = precision;\n return formatPrefix(specifier, value);\n }\n case \"\":\n case \"e\":\n case \"g\":\n case \"p\":\n case \"r\": {\n if (specifier.precision == null && !isNaN(precision = precisionRound(step, Math.max(Math.abs(start), Math.abs(stop))))) specifier.precision = precision - (specifier.type === \"e\");\n break;\n }\n case \"f\":\n case \"%\": {\n if (specifier.precision == null && !isNaN(precision = precisionFixed(step))) specifier.precision = precision - (specifier.type === \"%\") * 2;\n break;\n }\n }\n return format(specifier);\n}\n","import exponent from \"./exponent\";\n\nexport default function(step, value) {\n return Math.max(0, Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3 - exponent(Math.abs(step)));\n}\n","import exponent from \"./exponent\";\n\nexport default function(step, max) {\n step = Math.abs(step), max = Math.abs(max) - step;\n return Math.max(0, exponent(max) - exponent(step)) + 1;\n}\n","import {ticks, tickIncrement} from \"d3-array\";\nimport {interpolateNumber as reinterpolate} from \"d3-interpolate\";\nimport {default as continuous, copy, deinterpolateLinear as deinterpolate} from \"./continuous\";\nimport tickFormat from \"./tickFormat\";\n\nexport function linearish(scale) {\n var domain = scale.domain;\n\n scale.ticks = function(count) {\n var d = domain();\n return ticks(d[0], d[d.length - 1], count == null ? 10 : count);\n };\n\n scale.tickFormat = function(count, specifier) {\n return tickFormat(domain(), count, specifier);\n };\n\n scale.nice = function(count) {\n if (count == null) count = 10;\n\n var d = domain(),\n i0 = 0,\n i1 = d.length - 1,\n start = d[i0],\n stop = d[i1],\n step;\n\n if (stop < start) {\n step = start, start = stop, stop = step;\n step = i0, i0 = i1, i1 = step;\n }\n\n step = tickIncrement(start, stop, count);\n\n if (step > 0) {\n start = Math.floor(start / step) * step;\n stop = Math.ceil(stop / step) * step;\n step = tickIncrement(start, stop, count);\n } else if (step < 0) {\n start = Math.ceil(start * step) / step;\n stop = Math.floor(stop * step) / step;\n step = tickIncrement(start, stop, count);\n }\n\n if (step > 0) {\n d[i0] = Math.floor(start / step) * step;\n d[i1] = Math.ceil(stop / step) * step;\n domain(d);\n } else if (step < 0) {\n d[i0] = Math.ceil(start * step) / step;\n d[i1] = Math.floor(stop * step) / step;\n domain(d);\n }\n\n return scale;\n };\n\n return scale;\n}\n\nexport default function linear() {\n var scale = continuous(deinterpolate, reinterpolate);\n\n scale.copy = function() {\n return copy(scale, linear());\n };\n\n return linearish(scale);\n}\n","import {map} from \"./array\";\nimport {linearish} from \"./linear\";\nimport number from \"./number\";\n\nexport default function identity() {\n var domain = [0, 1];\n\n function scale(x) {\n return +x;\n }\n\n scale.invert = scale;\n\n scale.domain = scale.range = function(_) {\n return arguments.length ? (domain = map.call(_, number), scale) : domain.slice();\n };\n\n scale.copy = function() {\n return identity().domain(domain);\n };\n\n return linearish(scale);\n}\n","export default function(domain, interval) {\n domain = domain.slice();\n\n var i0 = 0,\n i1 = domain.length - 1,\n x0 = domain[i0],\n x1 = domain[i1],\n t;\n\n if (x1 < x0) {\n t = i0, i0 = i1, i1 = t;\n t = x0, x0 = x1, x1 = t;\n }\n\n domain[i0] = interval.floor(x0);\n domain[i1] = interval.ceil(x1);\n return domain;\n}\n","import {ticks} from \"d3-array\";\nimport {format} from \"d3-format\";\nimport constant from \"./constant\";\nimport nice from \"./nice\";\nimport {default as continuous, copy} from \"./continuous\";\n\nfunction deinterpolate(a, b) {\n return (b = Math.log(b / a))\n ? function(x) { return Math.log(x / a) / b; }\n : constant(b);\n}\n\nfunction reinterpolate(a, b) {\n return a < 0\n ? function(t) { return -Math.pow(-b, t) * Math.pow(-a, 1 - t); }\n : function(t) { return Math.pow(b, t) * Math.pow(a, 1 - t); };\n}\n\nfunction pow10(x) {\n return isFinite(x) ? +(\"1e\" + x) : x < 0 ? 0 : x;\n}\n\nfunction powp(base) {\n return base === 10 ? pow10\n : base === Math.E ? Math.exp\n : function(x) { return Math.pow(base, x); };\n}\n\nfunction logp(base) {\n return base === Math.E ? Math.log\n : base === 10 && Math.log10\n || base === 2 && Math.log2\n || (base = Math.log(base), function(x) { return Math.log(x) / base; });\n}\n\nfunction reflect(f) {\n return function(x) {\n return -f(-x);\n };\n}\n\nexport default function log() {\n var scale = continuous(deinterpolate, reinterpolate).domain([1, 10]),\n domain = scale.domain,\n base = 10,\n logs = logp(10),\n pows = powp(10);\n\n function rescale() {\n logs = logp(base), pows = powp(base);\n if (domain()[0] < 0) logs = reflect(logs), pows = reflect(pows);\n return scale;\n }\n\n scale.base = function(_) {\n return arguments.length ? (base = +_, rescale()) : base;\n };\n\n scale.domain = function(_) {\n return arguments.length ? (domain(_), rescale()) : domain();\n };\n\n scale.ticks = function(count) {\n var d = domain(),\n u = d[0],\n v = d[d.length - 1],\n r;\n\n if (r = v < u) i = u, u = v, v = i;\n\n var i = logs(u),\n j = logs(v),\n p,\n k,\n t,\n n = count == null ? 10 : +count,\n z = [];\n\n if (!(base % 1) && j - i < n) {\n i = Math.round(i) - 1, j = Math.round(j) + 1;\n if (u > 0) for (; i < j; ++i) {\n for (k = 1, p = pows(i); k < base; ++k) {\n t = p * k;\n if (t < u) continue;\n if (t > v) break;\n z.push(t);\n }\n } else for (; i < j; ++i) {\n for (k = base - 1, p = pows(i); k >= 1; --k) {\n t = p * k;\n if (t < u) continue;\n if (t > v) break;\n z.push(t);\n }\n }\n } else {\n z = ticks(i, j, Math.min(j - i, n)).map(pows);\n }\n\n return r ? z.reverse() : z;\n };\n\n scale.tickFormat = function(count, specifier) {\n if (specifier == null) specifier = base === 10 ? \".0e\" : \",\";\n if (typeof specifier !== \"function\") specifier = format(specifier);\n if (count === Infinity) return specifier;\n if (count == null) count = 10;\n var k = Math.max(1, base * count / scale.ticks().length); // TODO fast estimate?\n return function(d) {\n var i = d / pows(Math.round(logs(d)));\n if (i * base < base - 0.5) i *= base;\n return i <= k ? specifier(d) : \"\";\n };\n };\n\n scale.nice = function() {\n return domain(nice(domain(), {\n floor: function(x) { return pows(Math.floor(logs(x))); },\n ceil: function(x) { return pows(Math.ceil(logs(x))); }\n }));\n };\n\n scale.copy = function() {\n return copy(scale, log().base(base));\n };\n\n return scale;\n}\n","import constant from \"./constant\";\nimport {linearish} from \"./linear\";\nimport {default as continuous, copy} from \"./continuous\";\n\nfunction raise(x, exponent) {\n return x < 0 ? -Math.pow(-x, exponent) : Math.pow(x, exponent);\n}\n\nexport default function pow() {\n var exponent = 1,\n scale = continuous(deinterpolate, reinterpolate),\n domain = scale.domain;\n\n function deinterpolate(a, b) {\n return (b = raise(b, exponent) - (a = raise(a, exponent)))\n ? function(x) { return (raise(x, exponent) - a) / b; }\n : constant(b);\n }\n\n function reinterpolate(a, b) {\n b = raise(b, exponent) - (a = raise(a, exponent));\n return function(t) { return raise(a + b * t, 1 / exponent); };\n }\n\n scale.exponent = function(_) {\n return arguments.length ? (exponent = +_, domain(domain())) : exponent;\n };\n\n scale.copy = function() {\n return copy(scale, pow().exponent(exponent));\n };\n\n return linearish(scale);\n}\n\nexport function sqrt() {\n return pow().exponent(0.5);\n}\n","import {ascending, bisect, quantile as threshold} from \"d3-array\";\nimport {slice} from \"./array\";\n\nexport default function quantile() {\n var domain = [],\n range = [],\n thresholds = [];\n\n function rescale() {\n var i = 0, n = Math.max(1, range.length);\n thresholds = new Array(n - 1);\n while (++i < n) thresholds[i - 1] = threshold(domain, i / n);\n return scale;\n }\n\n function scale(x) {\n if (!isNaN(x = +x)) return range[bisect(thresholds, x)];\n }\n\n scale.invertExtent = function(y) {\n var i = range.indexOf(y);\n return i < 0 ? [NaN, NaN] : [\n i > 0 ? thresholds[i - 1] : domain[0],\n i < thresholds.length ? thresholds[i] : domain[domain.length - 1]\n ];\n };\n\n scale.domain = function(_) {\n if (!arguments.length) return domain.slice();\n domain = [];\n for (var i = 0, n = _.length, d; i < n; ++i) if (d = _[i], d != null && !isNaN(d = +d)) domain.push(d);\n domain.sort(ascending);\n return rescale();\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = slice.call(_), rescale()) : range.slice();\n };\n\n scale.quantiles = function() {\n return thresholds.slice();\n };\n\n scale.copy = function() {\n return quantile()\n .domain(domain)\n .range(range);\n };\n\n return scale;\n}\n","import {bisect} from \"d3-array\";\nimport {slice} from \"./array\";\nimport {linearish} from \"./linear\";\n\nexport default function quantize() {\n var x0 = 0,\n x1 = 1,\n n = 1,\n domain = [0.5],\n range = [0, 1];\n\n function scale(x) {\n if (x <= x) return range[bisect(domain, x, 0, n)];\n }\n\n function rescale() {\n var i = -1;\n domain = new Array(n);\n while (++i < n) domain[i] = ((i + 1) * x1 - (i - n) * x0) / (n + 1);\n return scale;\n }\n\n scale.domain = function(_) {\n return arguments.length ? (x0 = +_[0], x1 = +_[1], rescale()) : [x0, x1];\n };\n\n scale.range = function(_) {\n return arguments.length ? (n = (range = slice.call(_)).length - 1, rescale()) : range.slice();\n };\n\n scale.invertExtent = function(y) {\n var i = range.indexOf(y);\n return i < 0 ? [NaN, NaN]\n : i < 1 ? [x0, domain[0]]\n : i >= n ? [domain[n - 1], x1]\n : [domain[i - 1], domain[i]];\n };\n\n scale.copy = function() {\n return quantize()\n .domain([x0, x1])\n .range(range);\n };\n\n return linearish(scale);\n}\n","import {bisect} from \"d3-array\";\nimport {slice} from \"./array\";\n\nexport default function threshold() {\n var domain = [0.5],\n range = [0, 1],\n n = 1;\n\n function scale(x) {\n if (x <= x) return range[bisect(domain, x, 0, n)];\n }\n\n scale.domain = function(_) {\n return arguments.length ? (domain = slice.call(_), n = Math.min(domain.length, range.length - 1), scale) : domain.slice();\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = slice.call(_), n = Math.min(domain.length, range.length - 1), scale) : range.slice();\n };\n\n scale.invertExtent = function(y) {\n var i = range.indexOf(y);\n return [domain[i - 1], domain[i]];\n };\n\n scale.copy = function() {\n return threshold()\n .domain(domain)\n .range(range);\n };\n\n return scale;\n}\n","var t0 = new Date,\n t1 = new Date;\n\nexport default function newInterval(floori, offseti, count, field) {\n\n function interval(date) {\n return floori(date = new Date(+date)), date;\n }\n\n interval.floor = interval;\n\n interval.ceil = function(date) {\n return floori(date = new Date(date - 1)), offseti(date, 1), floori(date), date;\n };\n\n interval.round = function(date) {\n var d0 = interval(date),\n d1 = interval.ceil(date);\n return date - d0 < d1 - date ? d0 : d1;\n };\n\n interval.offset = function(date, step) {\n return offseti(date = new Date(+date), step == null ? 1 : Math.floor(step)), date;\n };\n\n interval.range = function(start, stop, step) {\n var range = [], previous;\n start = interval.ceil(start);\n step = step == null ? 1 : Math.floor(step);\n if (!(start < stop) || !(step > 0)) return range; // also handles Invalid Date\n do range.push(previous = new Date(+start)), offseti(start, step), floori(start);\n while (previous < start && start < stop);\n return range;\n };\n\n interval.filter = function(test) {\n return newInterval(function(date) {\n if (date >= date) while (floori(date), !test(date)) date.setTime(date - 1);\n }, function(date, step) {\n if (date >= date) {\n if (step < 0) while (++step <= 0) {\n while (offseti(date, -1), !test(date)) {} // eslint-disable-line no-empty\n } else while (--step >= 0) {\n while (offseti(date, +1), !test(date)) {} // eslint-disable-line no-empty\n }\n }\n });\n };\n\n if (count) {\n interval.count = function(start, end) {\n t0.setTime(+start), t1.setTime(+end);\n floori(t0), floori(t1);\n return Math.floor(count(t0, t1));\n };\n\n interval.every = function(step) {\n step = Math.floor(step);\n return !isFinite(step) || !(step > 0) ? null\n : !(step > 1) ? interval\n : interval.filter(field\n ? function(d) { return field(d) % step === 0; }\n : function(d) { return interval.count(0, d) % step === 0; });\n };\n }\n\n return interval;\n}\n","import interval from \"./interval\";\n\nvar millisecond = interval(function() {\n // noop\n}, function(date, step) {\n date.setTime(+date + step);\n}, function(start, end) {\n return end - start;\n});\n\n// An optimized implementation for this simple case.\nmillisecond.every = function(k) {\n k = Math.floor(k);\n if (!isFinite(k) || !(k > 0)) return null;\n if (!(k > 1)) return millisecond;\n return interval(function(date) {\n date.setTime(Math.floor(date / k) * k);\n }, function(date, step) {\n date.setTime(+date + step * k);\n }, function(start, end) {\n return (end - start) / k;\n });\n};\n\nexport default millisecond;\nexport var milliseconds = millisecond.range;\n","export var durationSecond = 1e3;\nexport var durationMinute = 6e4;\nexport var durationHour = 36e5;\nexport var durationDay = 864e5;\nexport var durationWeek = 6048e5;\n","import interval from \"./interval\";\nimport {durationSecond} from \"./duration\";\n\nvar second = interval(function(date) {\n date.setTime(date - date.getMilliseconds());\n}, function(date, step) {\n date.setTime(+date + step * durationSecond);\n}, function(start, end) {\n return (end - start) / durationSecond;\n}, function(date) {\n return date.getUTCSeconds();\n});\n\nexport default second;\nexport var seconds = second.range;\n","import interval from \"./interval\";\nimport {durationMinute, durationSecond} from \"./duration\";\n\nvar minute = interval(function(date) {\n date.setTime(date - date.getMilliseconds() - date.getSeconds() * durationSecond);\n}, function(date, step) {\n date.setTime(+date + step * durationMinute);\n}, function(start, end) {\n return (end - start) / durationMinute;\n}, function(date) {\n return date.getMinutes();\n});\n\nexport default minute;\nexport var minutes = minute.range;\n","import interval from \"./interval\";\nimport {durationHour, durationMinute, durationSecond} from \"./duration\";\n\nvar hour = interval(function(date) {\n date.setTime(date - date.getMilliseconds() - date.getSeconds() * durationSecond - date.getMinutes() * durationMinute);\n}, function(date, step) {\n date.setTime(+date + step * durationHour);\n}, function(start, end) {\n return (end - start) / durationHour;\n}, function(date) {\n return date.getHours();\n});\n\nexport default hour;\nexport var hours = hour.range;\n","import interval from \"./interval\";\nimport {durationDay, durationMinute} from \"./duration\";\n\nvar day = interval(function(date) {\n date.setHours(0, 0, 0, 0);\n}, function(date, step) {\n date.setDate(date.getDate() + step);\n}, function(start, end) {\n return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationDay;\n}, function(date) {\n return date.getDate() - 1;\n});\n\nexport default day;\nexport var days = day.range;\n","import interval from \"./interval\";\nimport {durationMinute, durationWeek} from \"./duration\";\n\nfunction weekday(i) {\n return interval(function(date) {\n date.setDate(date.getDate() - (date.getDay() + 7 - i) % 7);\n date.setHours(0, 0, 0, 0);\n }, function(date, step) {\n date.setDate(date.getDate() + step * 7);\n }, function(start, end) {\n return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationWeek;\n });\n}\n\nexport var sunday = weekday(0);\nexport var monday = weekday(1);\nexport var tuesday = weekday(2);\nexport var wednesday = weekday(3);\nexport var thursday = weekday(4);\nexport var friday = weekday(5);\nexport var saturday = weekday(6);\n\nexport var sundays = sunday.range;\nexport var mondays = monday.range;\nexport var tuesdays = tuesday.range;\nexport var wednesdays = wednesday.range;\nexport var thursdays = thursday.range;\nexport var fridays = friday.range;\nexport var saturdays = saturday.range;\n","import interval from \"./interval\";\n\nvar month = interval(function(date) {\n date.setDate(1);\n date.setHours(0, 0, 0, 0);\n}, function(date, step) {\n date.setMonth(date.getMonth() + step);\n}, function(start, end) {\n return end.getMonth() - start.getMonth() + (end.getFullYear() - start.getFullYear()) * 12;\n}, function(date) {\n return date.getMonth();\n});\n\nexport default month;\nexport var months = month.range;\n","import interval from \"./interval\";\n\nvar year = interval(function(date) {\n date.setMonth(0, 1);\n date.setHours(0, 0, 0, 0);\n}, function(date, step) {\n date.setFullYear(date.getFullYear() + step);\n}, function(start, end) {\n return end.getFullYear() - start.getFullYear();\n}, function(date) {\n return date.getFullYear();\n});\n\n// An optimized implementation for this simple case.\nyear.every = function(k) {\n return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : interval(function(date) {\n date.setFullYear(Math.floor(date.getFullYear() / k) * k);\n date.setMonth(0, 1);\n date.setHours(0, 0, 0, 0);\n }, function(date, step) {\n date.setFullYear(date.getFullYear() + step * k);\n });\n};\n\nexport default year;\nexport var years = year.range;\n","import interval from \"./interval\";\nimport {durationMinute} from \"./duration\";\n\nvar utcMinute = interval(function(date) {\n date.setUTCSeconds(0, 0);\n}, function(date, step) {\n date.setTime(+date + step * durationMinute);\n}, function(start, end) {\n return (end - start) / durationMinute;\n}, function(date) {\n return date.getUTCMinutes();\n});\n\nexport default utcMinute;\nexport var utcMinutes = utcMinute.range;\n","import interval from \"./interval\";\nimport {durationHour} from \"./duration\";\n\nvar utcHour = interval(function(date) {\n date.setUTCMinutes(0, 0, 0);\n}, function(date, step) {\n date.setTime(+date + step * durationHour);\n}, function(start, end) {\n return (end - start) / durationHour;\n}, function(date) {\n return date.getUTCHours();\n});\n\nexport default utcHour;\nexport var utcHours = utcHour.range;\n","import interval from \"./interval\";\nimport {durationDay} from \"./duration\";\n\nvar utcDay = interval(function(date) {\n date.setUTCHours(0, 0, 0, 0);\n}, function(date, step) {\n date.setUTCDate(date.getUTCDate() + step);\n}, function(start, end) {\n return (end - start) / durationDay;\n}, function(date) {\n return date.getUTCDate() - 1;\n});\n\nexport default utcDay;\nexport var utcDays = utcDay.range;\n","import interval from \"./interval\";\nimport {durationWeek} from \"./duration\";\n\nfunction utcWeekday(i) {\n return interval(function(date) {\n date.setUTCDate(date.getUTCDate() - (date.getUTCDay() + 7 - i) % 7);\n date.setUTCHours(0, 0, 0, 0);\n }, function(date, step) {\n date.setUTCDate(date.getUTCDate() + step * 7);\n }, function(start, end) {\n return (end - start) / durationWeek;\n });\n}\n\nexport var utcSunday = utcWeekday(0);\nexport var utcMonday = utcWeekday(1);\nexport var utcTuesday = utcWeekday(2);\nexport var utcWednesday = utcWeekday(3);\nexport var utcThursday = utcWeekday(4);\nexport var utcFriday = utcWeekday(5);\nexport var utcSaturday = utcWeekday(6);\n\nexport var utcSundays = utcSunday.range;\nexport var utcMondays = utcMonday.range;\nexport var utcTuesdays = utcTuesday.range;\nexport var utcWednesdays = utcWednesday.range;\nexport var utcThursdays = utcThursday.range;\nexport var utcFridays = utcFriday.range;\nexport var utcSaturdays = utcSaturday.range;\n","import interval from \"./interval\";\n\nvar utcMonth = interval(function(date) {\n date.setUTCDate(1);\n date.setUTCHours(0, 0, 0, 0);\n}, function(date, step) {\n date.setUTCMonth(date.getUTCMonth() + step);\n}, function(start, end) {\n return end.getUTCMonth() - start.getUTCMonth() + (end.getUTCFullYear() - start.getUTCFullYear()) * 12;\n}, function(date) {\n return date.getUTCMonth();\n});\n\nexport default utcMonth;\nexport var utcMonths = utcMonth.range;\n","import interval from \"./interval\";\n\nvar utcYear = interval(function(date) {\n date.setUTCMonth(0, 1);\n date.setUTCHours(0, 0, 0, 0);\n}, function(date, step) {\n date.setUTCFullYear(date.getUTCFullYear() + step);\n}, function(start, end) {\n return end.getUTCFullYear() - start.getUTCFullYear();\n}, function(date) {\n return date.getUTCFullYear();\n});\n\n// An optimized implementation for this simple case.\nutcYear.every = function(k) {\n return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : interval(function(date) {\n date.setUTCFullYear(Math.floor(date.getUTCFullYear() / k) * k);\n date.setUTCMonth(0, 1);\n date.setUTCHours(0, 0, 0, 0);\n }, function(date, step) {\n date.setUTCFullYear(date.getUTCFullYear() + step * k);\n });\n};\n\nexport default utcYear;\nexport var utcYears = utcYear.range;\n","import {\n timeDay,\n timeSunday,\n timeMonday,\n timeThursday,\n timeYear,\n utcDay,\n utcSunday,\n utcMonday,\n utcThursday,\n utcYear\n} from \"d3-time\";\n\nfunction localDate(d) {\n if (0 <= d.y && d.y < 100) {\n var date = new Date(-1, d.m, d.d, d.H, d.M, d.S, d.L);\n date.setFullYear(d.y);\n return date;\n }\n return new Date(d.y, d.m, d.d, d.H, d.M, d.S, d.L);\n}\n\nfunction utcDate(d) {\n if (0 <= d.y && d.y < 100) {\n var date = new Date(Date.UTC(-1, d.m, d.d, d.H, d.M, d.S, d.L));\n date.setUTCFullYear(d.y);\n return date;\n }\n return new Date(Date.UTC(d.y, d.m, d.d, d.H, d.M, d.S, d.L));\n}\n\nfunction newYear(y) {\n return {y: y, m: 0, d: 1, H: 0, M: 0, S: 0, L: 0};\n}\n\nexport default function formatLocale(locale) {\n var locale_dateTime = locale.dateTime,\n locale_date = locale.date,\n locale_time = locale.time,\n locale_periods = locale.periods,\n locale_weekdays = locale.days,\n locale_shortWeekdays = locale.shortDays,\n locale_months = locale.months,\n locale_shortMonths = locale.shortMonths;\n\n var periodRe = formatRe(locale_periods),\n periodLookup = formatLookup(locale_periods),\n weekdayRe = formatRe(locale_weekdays),\n weekdayLookup = formatLookup(locale_weekdays),\n shortWeekdayRe = formatRe(locale_shortWeekdays),\n shortWeekdayLookup = formatLookup(locale_shortWeekdays),\n monthRe = formatRe(locale_months),\n monthLookup = formatLookup(locale_months),\n shortMonthRe = formatRe(locale_shortMonths),\n shortMonthLookup = formatLookup(locale_shortMonths);\n\n var formats = {\n \"a\": formatShortWeekday,\n \"A\": formatWeekday,\n \"b\": formatShortMonth,\n \"B\": formatMonth,\n \"c\": null,\n \"d\": formatDayOfMonth,\n \"e\": formatDayOfMonth,\n \"f\": formatMicroseconds,\n \"H\": formatHour24,\n \"I\": formatHour12,\n \"j\": formatDayOfYear,\n \"L\": formatMilliseconds,\n \"m\": formatMonthNumber,\n \"M\": formatMinutes,\n \"p\": formatPeriod,\n \"Q\": formatUnixTimestamp,\n \"s\": formatUnixTimestampSeconds,\n \"S\": formatSeconds,\n \"u\": formatWeekdayNumberMonday,\n \"U\": formatWeekNumberSunday,\n \"V\": formatWeekNumberISO,\n \"w\": formatWeekdayNumberSunday,\n \"W\": formatWeekNumberMonday,\n \"x\": null,\n \"X\": null,\n \"y\": formatYear,\n \"Y\": formatFullYear,\n \"Z\": formatZone,\n \"%\": formatLiteralPercent\n };\n\n var utcFormats = {\n \"a\": formatUTCShortWeekday,\n \"A\": formatUTCWeekday,\n \"b\": formatUTCShortMonth,\n \"B\": formatUTCMonth,\n \"c\": null,\n \"d\": formatUTCDayOfMonth,\n \"e\": formatUTCDayOfMonth,\n \"f\": formatUTCMicroseconds,\n \"H\": formatUTCHour24,\n \"I\": formatUTCHour12,\n \"j\": formatUTCDayOfYear,\n \"L\": formatUTCMilliseconds,\n \"m\": formatUTCMonthNumber,\n \"M\": formatUTCMinutes,\n \"p\": formatUTCPeriod,\n \"Q\": formatUnixTimestamp,\n \"s\": formatUnixTimestampSeconds,\n \"S\": formatUTCSeconds,\n \"u\": formatUTCWeekdayNumberMonday,\n \"U\": formatUTCWeekNumberSunday,\n \"V\": formatUTCWeekNumberISO,\n \"w\": formatUTCWeekdayNumberSunday,\n \"W\": formatUTCWeekNumberMonday,\n \"x\": null,\n \"X\": null,\n \"y\": formatUTCYear,\n \"Y\": formatUTCFullYear,\n \"Z\": formatUTCZone,\n \"%\": formatLiteralPercent\n };\n\n var parses = {\n \"a\": parseShortWeekday,\n \"A\": parseWeekday,\n \"b\": parseShortMonth,\n \"B\": parseMonth,\n \"c\": parseLocaleDateTime,\n \"d\": parseDayOfMonth,\n \"e\": parseDayOfMonth,\n \"f\": parseMicroseconds,\n \"H\": parseHour24,\n \"I\": parseHour24,\n \"j\": parseDayOfYear,\n \"L\": parseMilliseconds,\n \"m\": parseMonthNumber,\n \"M\": parseMinutes,\n \"p\": parsePeriod,\n \"Q\": parseUnixTimestamp,\n \"s\": parseUnixTimestampSeconds,\n \"S\": parseSeconds,\n \"u\": parseWeekdayNumberMonday,\n \"U\": parseWeekNumberSunday,\n \"V\": parseWeekNumberISO,\n \"w\": parseWeekdayNumberSunday,\n \"W\": parseWeekNumberMonday,\n \"x\": parseLocaleDate,\n \"X\": parseLocaleTime,\n \"y\": parseYear,\n \"Y\": parseFullYear,\n \"Z\": parseZone,\n \"%\": parseLiteralPercent\n };\n\n // These recursive directive definitions must be deferred.\n formats.x = newFormat(locale_date, formats);\n formats.X = newFormat(locale_time, formats);\n formats.c = newFormat(locale_dateTime, formats);\n utcFormats.x = newFormat(locale_date, utcFormats);\n utcFormats.X = newFormat(locale_time, utcFormats);\n utcFormats.c = newFormat(locale_dateTime, utcFormats);\n\n function newFormat(specifier, formats) {\n return function(date) {\n var string = [],\n i = -1,\n j = 0,\n n = specifier.length,\n c,\n pad,\n format;\n\n if (!(date instanceof Date)) date = new Date(+date);\n\n while (++i < n) {\n if (specifier.charCodeAt(i) === 37) {\n string.push(specifier.slice(j, i));\n if ((pad = pads[c = specifier.charAt(++i)]) != null) c = specifier.charAt(++i);\n else pad = c === \"e\" ? \" \" : \"0\";\n if (format = formats[c]) c = format(date, pad);\n string.push(c);\n j = i + 1;\n }\n }\n\n string.push(specifier.slice(j, i));\n return string.join(\"\");\n };\n }\n\n function newParse(specifier, newDate) {\n return function(string) {\n var d = newYear(1900),\n i = parseSpecifier(d, specifier, string += \"\", 0),\n week, day;\n if (i != string.length) return null;\n\n // If a UNIX timestamp is specified, return it.\n if (\"Q\" in d) return new Date(d.Q);\n\n // The am-pm flag is 0 for AM, and 1 for PM.\n if (\"p\" in d) d.H = d.H % 12 + d.p * 12;\n\n // Convert day-of-week and week-of-year to day-of-year.\n if (\"V\" in d) {\n if (d.V < 1 || d.V > 53) return null;\n if (!(\"w\" in d)) d.w = 1;\n if (\"Z\" in d) {\n week = utcDate(newYear(d.y)), day = week.getUTCDay();\n week = day > 4 || day === 0 ? utcMonday.ceil(week) : utcMonday(week);\n week = utcDay.offset(week, (d.V - 1) * 7);\n d.y = week.getUTCFullYear();\n d.m = week.getUTCMonth();\n d.d = week.getUTCDate() + (d.w + 6) % 7;\n } else {\n week = newDate(newYear(d.y)), day = week.getDay();\n week = day > 4 || day === 0 ? timeMonday.ceil(week) : timeMonday(week);\n week = timeDay.offset(week, (d.V - 1) * 7);\n d.y = week.getFullYear();\n d.m = week.getMonth();\n d.d = week.getDate() + (d.w + 6) % 7;\n }\n } else if (\"W\" in d || \"U\" in d) {\n if (!(\"w\" in d)) d.w = \"u\" in d ? d.u % 7 : \"W\" in d ? 1 : 0;\n day = \"Z\" in d ? utcDate(newYear(d.y)).getUTCDay() : newDate(newYear(d.y)).getDay();\n d.m = 0;\n d.d = \"W\" in d ? (d.w + 6) % 7 + d.W * 7 - (day + 5) % 7 : d.w + d.U * 7 - (day + 6) % 7;\n }\n\n // If a time zone is specified, all fields are interpreted as UTC and then\n // offset according to the specified time zone.\n if (\"Z\" in d) {\n d.H += d.Z / 100 | 0;\n d.M += d.Z % 100;\n return utcDate(d);\n }\n\n // Otherwise, all fields are in local time.\n return newDate(d);\n };\n }\n\n function parseSpecifier(d, specifier, string, j) {\n var i = 0,\n n = specifier.length,\n m = string.length,\n c,\n parse;\n\n while (i < n) {\n if (j >= m) return -1;\n c = specifier.charCodeAt(i++);\n if (c === 37) {\n c = specifier.charAt(i++);\n parse = parses[c in pads ? specifier.charAt(i++) : c];\n if (!parse || ((j = parse(d, string, j)) < 0)) return -1;\n } else if (c != string.charCodeAt(j++)) {\n return -1;\n }\n }\n\n return j;\n }\n\n function parsePeriod(d, string, i) {\n var n = periodRe.exec(string.slice(i));\n return n ? (d.p = periodLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n }\n\n function parseShortWeekday(d, string, i) {\n var n = shortWeekdayRe.exec(string.slice(i));\n return n ? (d.w = shortWeekdayLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n }\n\n function parseWeekday(d, string, i) {\n var n = weekdayRe.exec(string.slice(i));\n return n ? (d.w = weekdayLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n }\n\n function parseShortMonth(d, string, i) {\n var n = shortMonthRe.exec(string.slice(i));\n return n ? (d.m = shortMonthLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n }\n\n function parseMonth(d, string, i) {\n var n = monthRe.exec(string.slice(i));\n return n ? (d.m = monthLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n }\n\n function parseLocaleDateTime(d, string, i) {\n return parseSpecifier(d, locale_dateTime, string, i);\n }\n\n function parseLocaleDate(d, string, i) {\n return parseSpecifier(d, locale_date, string, i);\n }\n\n function parseLocaleTime(d, string, i) {\n return parseSpecifier(d, locale_time, string, i);\n }\n\n function formatShortWeekday(d) {\n return locale_shortWeekdays[d.getDay()];\n }\n\n function formatWeekday(d) {\n return locale_weekdays[d.getDay()];\n }\n\n function formatShortMonth(d) {\n return locale_shortMonths[d.getMonth()];\n }\n\n function formatMonth(d) {\n return locale_months[d.getMonth()];\n }\n\n function formatPeriod(d) {\n return locale_periods[+(d.getHours() >= 12)];\n }\n\n function formatUTCShortWeekday(d) {\n return locale_shortWeekdays[d.getUTCDay()];\n }\n\n function formatUTCWeekday(d) {\n return locale_weekdays[d.getUTCDay()];\n }\n\n function formatUTCShortMonth(d) {\n return locale_shortMonths[d.getUTCMonth()];\n }\n\n function formatUTCMonth(d) {\n return locale_months[d.getUTCMonth()];\n }\n\n function formatUTCPeriod(d) {\n return locale_periods[+(d.getUTCHours() >= 12)];\n }\n\n return {\n format: function(specifier) {\n var f = newFormat(specifier += \"\", formats);\n f.toString = function() { return specifier; };\n return f;\n },\n parse: function(specifier) {\n var p = newParse(specifier += \"\", localDate);\n p.toString = function() { return specifier; };\n return p;\n },\n utcFormat: function(specifier) {\n var f = newFormat(specifier += \"\", utcFormats);\n f.toString = function() { return specifier; };\n return f;\n },\n utcParse: function(specifier) {\n var p = newParse(specifier, utcDate);\n p.toString = function() { return specifier; };\n return p;\n }\n };\n}\n\nvar pads = {\"-\": \"\", \"_\": \" \", \"0\": \"0\"},\n numberRe = /^\\s*\\d+/, // note: ignores next directive\n percentRe = /^%/,\n requoteRe = /[\\\\^$*+?|[\\]().{}]/g;\n\nfunction pad(value, fill, width) {\n var sign = value < 0 ? \"-\" : \"\",\n string = (sign ? -value : value) + \"\",\n length = string.length;\n return sign + (length < width ? new Array(width - length + 1).join(fill) + string : string);\n}\n\nfunction requote(s) {\n return s.replace(requoteRe, \"\\\\$&\");\n}\n\nfunction formatRe(names) {\n return new RegExp(\"^(?:\" + names.map(requote).join(\"|\") + \")\", \"i\");\n}\n\nfunction formatLookup(names) {\n var map = {}, i = -1, n = names.length;\n while (++i < n) map[names[i].toLowerCase()] = i;\n return map;\n}\n\nfunction parseWeekdayNumberSunday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 1));\n return n ? (d.w = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekdayNumberMonday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 1));\n return n ? (d.u = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberSunday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.U = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberISO(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.V = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberMonday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.W = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseFullYear(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 4));\n return n ? (d.y = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseYear(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.y = +n[0] + (+n[0] > 68 ? 1900 : 2000), i + n[0].length) : -1;\n}\n\nfunction parseZone(d, string, i) {\n var n = /^(Z)|([+-]\\d\\d)(?::?(\\d\\d))?/.exec(string.slice(i, i + 6));\n return n ? (d.Z = n[1] ? 0 : -(n[2] + (n[3] || \"00\")), i + n[0].length) : -1;\n}\n\nfunction parseMonthNumber(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.m = n[0] - 1, i + n[0].length) : -1;\n}\n\nfunction parseDayOfMonth(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.d = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseDayOfYear(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 3));\n return n ? (d.m = 0, d.d = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseHour24(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.H = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseMinutes(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.M = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseSeconds(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.S = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseMilliseconds(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 3));\n return n ? (d.L = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseMicroseconds(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 6));\n return n ? (d.L = Math.floor(n[0] / 1000), i + n[0].length) : -1;\n}\n\nfunction parseLiteralPercent(d, string, i) {\n var n = percentRe.exec(string.slice(i, i + 1));\n return n ? i + n[0].length : -1;\n}\n\nfunction parseUnixTimestamp(d, string, i) {\n var n = numberRe.exec(string.slice(i));\n return n ? (d.Q = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseUnixTimestampSeconds(d, string, i) {\n var n = numberRe.exec(string.slice(i));\n return n ? (d.Q = (+n[0]) * 1000, i + n[0].length) : -1;\n}\n\nfunction formatDayOfMonth(d, p) {\n return pad(d.getDate(), p, 2);\n}\n\nfunction formatHour24(d, p) {\n return pad(d.getHours(), p, 2);\n}\n\nfunction formatHour12(d, p) {\n return pad(d.getHours() % 12 || 12, p, 2);\n}\n\nfunction formatDayOfYear(d, p) {\n return pad(1 + timeDay.count(timeYear(d), d), p, 3);\n}\n\nfunction formatMilliseconds(d, p) {\n return pad(d.getMilliseconds(), p, 3);\n}\n\nfunction formatMicroseconds(d, p) {\n return formatMilliseconds(d, p) + \"000\";\n}\n\nfunction formatMonthNumber(d, p) {\n return pad(d.getMonth() + 1, p, 2);\n}\n\nfunction formatMinutes(d, p) {\n return pad(d.getMinutes(), p, 2);\n}\n\nfunction formatSeconds(d, p) {\n return pad(d.getSeconds(), p, 2);\n}\n\nfunction formatWeekdayNumberMonday(d) {\n var day = d.getDay();\n return day === 0 ? 7 : day;\n}\n\nfunction formatWeekNumberSunday(d, p) {\n return pad(timeSunday.count(timeYear(d), d), p, 2);\n}\n\nfunction formatWeekNumberISO(d, p) {\n var day = d.getDay();\n d = (day >= 4 || day === 0) ? timeThursday(d) : timeThursday.ceil(d);\n return pad(timeThursday.count(timeYear(d), d) + (timeYear(d).getDay() === 4), p, 2);\n}\n\nfunction formatWeekdayNumberSunday(d) {\n return d.getDay();\n}\n\nfunction formatWeekNumberMonday(d, p) {\n return pad(timeMonday.count(timeYear(d), d), p, 2);\n}\n\nfunction formatYear(d, p) {\n return pad(d.getFullYear() % 100, p, 2);\n}\n\nfunction formatFullYear(d, p) {\n return pad(d.getFullYear() % 10000, p, 4);\n}\n\nfunction formatZone(d) {\n var z = d.getTimezoneOffset();\n return (z > 0 ? \"-\" : (z *= -1, \"+\"))\n + pad(z / 60 | 0, \"0\", 2)\n + pad(z % 60, \"0\", 2);\n}\n\nfunction formatUTCDayOfMonth(d, p) {\n return pad(d.getUTCDate(), p, 2);\n}\n\nfunction formatUTCHour24(d, p) {\n return pad(d.getUTCHours(), p, 2);\n}\n\nfunction formatUTCHour12(d, p) {\n return pad(d.getUTCHours() % 12 || 12, p, 2);\n}\n\nfunction formatUTCDayOfYear(d, p) {\n return pad(1 + utcDay.count(utcYear(d), d), p, 3);\n}\n\nfunction formatUTCMilliseconds(d, p) {\n return pad(d.getUTCMilliseconds(), p, 3);\n}\n\nfunction formatUTCMicroseconds(d, p) {\n return formatUTCMilliseconds(d, p) + \"000\";\n}\n\nfunction formatUTCMonthNumber(d, p) {\n return pad(d.getUTCMonth() + 1, p, 2);\n}\n\nfunction formatUTCMinutes(d, p) {\n return pad(d.getUTCMinutes(), p, 2);\n}\n\nfunction formatUTCSeconds(d, p) {\n return pad(d.getUTCSeconds(), p, 2);\n}\n\nfunction formatUTCWeekdayNumberMonday(d) {\n var dow = d.getUTCDay();\n return dow === 0 ? 7 : dow;\n}\n\nfunction formatUTCWeekNumberSunday(d, p) {\n return pad(utcSunday.count(utcYear(d), d), p, 2);\n}\n\nfunction formatUTCWeekNumberISO(d, p) {\n var day = d.getUTCDay();\n d = (day >= 4 || day === 0) ? utcThursday(d) : utcThursday.ceil(d);\n return pad(utcThursday.count(utcYear(d), d) + (utcYear(d).getUTCDay() === 4), p, 2);\n}\n\nfunction formatUTCWeekdayNumberSunday(d) {\n return d.getUTCDay();\n}\n\nfunction formatUTCWeekNumberMonday(d, p) {\n return pad(utcMonday.count(utcYear(d), d), p, 2);\n}\n\nfunction formatUTCYear(d, p) {\n return pad(d.getUTCFullYear() % 100, p, 2);\n}\n\nfunction formatUTCFullYear(d, p) {\n return pad(d.getUTCFullYear() % 10000, p, 4);\n}\n\nfunction formatUTCZone() {\n return \"+0000\";\n}\n\nfunction formatLiteralPercent() {\n return \"%\";\n}\n\nfunction formatUnixTimestamp(d) {\n return +d;\n}\n\nfunction formatUnixTimestampSeconds(d) {\n return Math.floor(+d / 1000);\n}\n","import formatLocale from \"./locale\";\n\nvar locale;\nexport var timeFormat;\nexport var timeParse;\nexport var utcFormat;\nexport var utcParse;\n\ndefaultLocale({\n dateTime: \"%x, %X\",\n date: \"%-m/%-d/%Y\",\n time: \"%-I:%M:%S %p\",\n periods: [\"AM\", \"PM\"],\n days: [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"],\n shortDays: [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"],\n months: [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"],\n shortMonths: [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"]\n});\n\nexport default function defaultLocale(definition) {\n locale = formatLocale(definition);\n timeFormat = locale.format;\n timeParse = locale.parse;\n utcFormat = locale.utcFormat;\n utcParse = locale.utcParse;\n return locale;\n}\n","import {utcFormat} from \"./defaultLocale\";\n\nexport var isoSpecifier = \"%Y-%m-%dT%H:%M:%S.%LZ\";\n\nfunction formatIsoNative(date) {\n return date.toISOString();\n}\n\nvar formatIso = Date.prototype.toISOString\n ? formatIsoNative\n : utcFormat(isoSpecifier);\n\nexport default formatIso;\n","import {isoSpecifier} from \"./isoFormat\";\nimport {utcParse} from \"./defaultLocale\";\n\nfunction parseIsoNative(string) {\n var date = new Date(string);\n return isNaN(date) ? null : date;\n}\n\nvar parseIso = +new Date(\"2000-01-01T00:00:00.000Z\")\n ? parseIsoNative\n : utcParse(isoSpecifier);\n\nexport default parseIso;\n","import {bisector, tickStep} from \"d3-array\";\nimport {interpolateNumber as reinterpolate} from \"d3-interpolate\";\nimport {timeYear, timeMonth, timeWeek, timeDay, timeHour, timeMinute, timeSecond, timeMillisecond} from \"d3-time\";\nimport {timeFormat} from \"d3-time-format\";\nimport {map} from \"./array\";\nimport {default as continuous, copy, deinterpolateLinear as deinterpolate} from \"./continuous\";\nimport nice from \"./nice\";\n\nvar durationSecond = 1000,\n durationMinute = durationSecond * 60,\n durationHour = durationMinute * 60,\n durationDay = durationHour * 24,\n durationWeek = durationDay * 7,\n durationMonth = durationDay * 30,\n durationYear = durationDay * 365;\n\nfunction date(t) {\n return new Date(t);\n}\n\nfunction number(t) {\n return t instanceof Date ? +t : +new Date(+t);\n}\n\nexport function calendar(year, month, week, day, hour, minute, second, millisecond, format) {\n var scale = continuous(deinterpolate, reinterpolate),\n invert = scale.invert,\n domain = scale.domain;\n\n var formatMillisecond = format(\".%L\"),\n formatSecond = format(\":%S\"),\n formatMinute = format(\"%I:%M\"),\n formatHour = format(\"%I %p\"),\n formatDay = format(\"%a %d\"),\n formatWeek = format(\"%b %d\"),\n formatMonth = format(\"%B\"),\n formatYear = format(\"%Y\");\n\n var tickIntervals = [\n [second, 1, durationSecond],\n [second, 5, 5 * durationSecond],\n [second, 15, 15 * durationSecond],\n [second, 30, 30 * durationSecond],\n [minute, 1, durationMinute],\n [minute, 5, 5 * durationMinute],\n [minute, 15, 15 * durationMinute],\n [minute, 30, 30 * durationMinute],\n [ hour, 1, durationHour ],\n [ hour, 3, 3 * durationHour ],\n [ hour, 6, 6 * durationHour ],\n [ hour, 12, 12 * durationHour ],\n [ day, 1, durationDay ],\n [ day, 2, 2 * durationDay ],\n [ week, 1, durationWeek ],\n [ month, 1, durationMonth ],\n [ month, 3, 3 * durationMonth ],\n [ year, 1, durationYear ]\n ];\n\n function tickFormat(date) {\n return (second(date) < date ? formatMillisecond\n : minute(date) < date ? formatSecond\n : hour(date) < date ? formatMinute\n : day(date) < date ? formatHour\n : month(date) < date ? (week(date) < date ? formatDay : formatWeek)\n : year(date) < date ? formatMonth\n : formatYear)(date);\n }\n\n function tickInterval(interval, start, stop, step) {\n if (interval == null) interval = 10;\n\n // If a desired tick count is specified, pick a reasonable tick interval\n // based on the extent of the domain and a rough estimate of tick size.\n // Otherwise, assume interval is already a time interval and use it.\n if (typeof interval === \"number\") {\n var target = Math.abs(stop - start) / interval,\n i = bisector(function(i) { return i[2]; }).right(tickIntervals, target);\n if (i === tickIntervals.length) {\n step = tickStep(start / durationYear, stop / durationYear, interval);\n interval = year;\n } else if (i) {\n i = tickIntervals[target / tickIntervals[i - 1][2] < tickIntervals[i][2] / target ? i - 1 : i];\n step = i[1];\n interval = i[0];\n } else {\n step = Math.max(tickStep(start, stop, interval), 1);\n interval = millisecond;\n }\n }\n\n return step == null ? interval : interval.every(step);\n }\n\n scale.invert = function(y) {\n return new Date(invert(y));\n };\n\n scale.domain = function(_) {\n return arguments.length ? domain(map.call(_, number)) : domain().map(date);\n };\n\n scale.ticks = function(interval, step) {\n var d = domain(),\n t0 = d[0],\n t1 = d[d.length - 1],\n r = t1 < t0,\n t;\n if (r) t = t0, t0 = t1, t1 = t;\n t = tickInterval(interval, t0, t1, step);\n t = t ? t.range(t0, t1 + 1) : []; // inclusive stop\n return r ? t.reverse() : t;\n };\n\n scale.tickFormat = function(count, specifier) {\n return specifier == null ? tickFormat : format(specifier);\n };\n\n scale.nice = function(interval, step) {\n var d = domain();\n return (interval = tickInterval(interval, d[0], d[d.length - 1], step))\n ? domain(nice(d, interval))\n : scale;\n };\n\n scale.copy = function() {\n return copy(scale, calendar(year, month, week, day, hour, minute, second, millisecond, format));\n };\n\n return scale;\n}\n\nexport default function() {\n return calendar(timeYear, timeMonth, timeWeek, timeDay, timeHour, timeMinute, timeSecond, timeMillisecond, timeFormat).domain([new Date(2000, 0, 1), new Date(2000, 0, 2)]);\n}\n","export default function(s) {\n return s.match(/.{6}/g).map(function(x) {\n return \"#\" + x;\n });\n}\n","import colors from \"./colors\";\n\nexport default colors(\"1f77b4ff7f0e2ca02cd627289467bd8c564be377c27f7f7fbcbd2217becf\");\n","import colors from \"./colors\";\n\nexport default colors(\"393b795254a36b6ecf9c9ede6379398ca252b5cf6bcedb9c8c6d31bd9e39e7ba52e7cb94843c39ad494ad6616be7969c7b4173a55194ce6dbdde9ed6\");\n","import colors from \"./colors\";\n\nexport default colors(\"1f77b4aec7e8ff7f0effbb782ca02c98df8ad62728ff98969467bdc5b0d58c564bc49c94e377c2f7b6d27f7f7fc7c7c7bcbd22dbdb8d17becf9edae5\");\n","import colors from \"./colors\";\n\nexport default colors(\"3182bd6baed69ecae1c6dbefe6550dfd8d3cfdae6bfdd0a231a35474c476a1d99bc7e9c0756bb19e9ac8bcbddcdadaeb636363969696bdbdbdd9d9d9\");\n","import {cubehelix} from \"d3-color\";\nimport {interpolateCubehelixLong} from \"d3-interpolate\";\n\nexport default interpolateCubehelixLong(cubehelix(300, 0.5, 0.0), cubehelix(-240, 0.5, 1.0));\n","import {cubehelix} from \"d3-color\";\nimport {interpolateCubehelixLong} from \"d3-interpolate\";\n\nexport var warm = interpolateCubehelixLong(cubehelix(-100, 0.75, 0.35), cubehelix(80, 1.50, 0.8));\n\nexport var cool = interpolateCubehelixLong(cubehelix(260, 0.75, 0.35), cubehelix(80, 1.50, 0.8));\n\nvar rainbow = cubehelix();\n\nexport default function(t) {\n if (t < 0 || t > 1) t -= Math.floor(t);\n var ts = Math.abs(t - 0.5);\n rainbow.h = 360 * t - 100;\n rainbow.s = 1.5 - 1.5 * ts;\n rainbow.l = 0.8 - 0.9 * ts;\n return rainbow + \"\";\n}\n","import colors from \"./colors\";\n\nfunction ramp(range) {\n var n = range.length;\n return function(t) {\n return range[Math.max(0, Math.min(n - 1, Math.floor(t * n)))];\n };\n}\n\nexport default ramp(colors(\"44015444025645045745055946075a46085c460a5d460b5e470d60470e6147106347116447136548146748166848176948186a481a6c481b6d481c6e481d6f481f70482071482173482374482475482576482677482878482979472a7a472c7a472d7b472e7c472f7d46307e46327e46337f463480453581453781453882443983443a83443b84433d84433e85423f854240864241864142874144874045884046883f47883f48893e49893e4a893e4c8a3d4d8a3d4e8a3c4f8a3c508b3b518b3b528b3a538b3a548c39558c39568c38588c38598c375a8c375b8d365c8d365d8d355e8d355f8d34608d34618d33628d33638d32648e32658e31668e31678e31688e30698e306a8e2f6b8e2f6c8e2e6d8e2e6e8e2e6f8e2d708e2d718e2c718e2c728e2c738e2b748e2b758e2a768e2a778e2a788e29798e297a8e297b8e287c8e287d8e277e8e277f8e27808e26818e26828e26828e25838e25848e25858e24868e24878e23888e23898e238a8d228b8d228c8d228d8d218e8d218f8d21908d21918c20928c20928c20938c1f948c1f958b1f968b1f978b1f988b1f998a1f9a8a1e9b8a1e9c891e9d891f9e891f9f881fa0881fa1881fa1871fa28720a38620a48621a58521a68522a78522a88423a98324aa8325ab8225ac8226ad8127ad8128ae8029af7f2ab07f2cb17e2db27d2eb37c2fb47c31b57b32b67a34b67935b77937b87838b9773aba763bbb753dbc743fbc7340bd7242be7144bf7046c06f48c16e4ac16d4cc26c4ec36b50c46a52c56954c56856c66758c7655ac8645cc8635ec96260ca6063cb5f65cb5e67cc5c69cd5b6ccd5a6ece5870cf5773d05675d05477d1537ad1517cd2507fd34e81d34d84d44b86d54989d5488bd6468ed64590d74393d74195d84098d83e9bd93c9dd93ba0da39a2da37a5db36a8db34aadc32addc30b0dd2fb2dd2db5de2bb8de29bade28bddf26c0df25c2df23c5e021c8e020cae11fcde11dd0e11cd2e21bd5e21ad8e219dae319dde318dfe318e2e418e5e419e7e419eae51aece51befe51cf1e51df4e61ef6e620f8e621fbe723fde725\"));\n\nexport var magma = ramp(colors(\"00000401000501010601010802010902020b02020d03030f03031204041405041606051806051a07061c08071e0907200a08220b09240c09260d0a290e0b2b100b2d110c2f120d31130d34140e36150e38160f3b180f3d19103f1a10421c10441d11471e114920114b21114e22115024125325125527125829115a2a115c2c115f2d11612f116331116533106734106936106b38106c390f6e3b0f703d0f713f0f72400f74420f75440f764510774710784910784a10794c117a4e117b4f127b51127c52137c54137d56147d57157e59157e5a167e5c167f5d177f5f187f601880621980641a80651a80671b80681c816a1c816b1d816d1d816e1e81701f81721f817320817521817621817822817922827b23827c23827e24828025828125818326818426818627818827818928818b29818c29818e2a81902a81912b81932b80942c80962c80982d80992d809b2e7f9c2e7f9e2f7fa02f7fa1307ea3307ea5317ea6317da8327daa337dab337cad347cae347bb0357bb2357bb3367ab5367ab73779b83779ba3878bc3978bd3977bf3a77c03a76c23b75c43c75c53c74c73d73c83e73ca3e72cc3f71cd4071cf4070d0416fd2426fd3436ed5446dd6456cd8456cd9466bdb476adc4869de4968df4a68e04c67e24d66e34e65e44f64e55064e75263e85362e95462ea5661eb5760ec5860ed5a5fee5b5eef5d5ef05f5ef1605df2625df2645cf3655cf4675cf4695cf56b5cf66c5cf66e5cf7705cf7725cf8745cf8765cf9785df9795df97b5dfa7d5efa7f5efa815ffb835ffb8560fb8761fc8961fc8a62fc8c63fc8e64fc9065fd9266fd9467fd9668fd9869fd9a6afd9b6bfe9d6cfe9f6dfea16efea36ffea571fea772fea973feaa74feac76feae77feb078feb27afeb47bfeb67cfeb77efeb97ffebb81febd82febf84fec185fec287fec488fec68afec88cfeca8dfecc8ffecd90fecf92fed194fed395fed597fed799fed89afdda9cfddc9efddea0fde0a1fde2a3fde3a5fde5a7fde7a9fde9aafdebacfcecaefceeb0fcf0b2fcf2b4fcf4b6fcf6b8fcf7b9fcf9bbfcfbbdfcfdbf\"));\n\nexport var inferno = ramp(colors(\"00000401000501010601010802010a02020c02020e03021004031204031405041706041907051b08051d09061f0a07220b07240c08260d08290e092b10092d110a30120a32140b34150b37160b39180c3c190c3e1b0c411c0c431e0c451f0c48210c4a230c4c240c4f260c51280b53290b552b0b572d0b592f0a5b310a5c320a5e340a5f3609613809623909633b09643d09653e0966400a67420a68440a68450a69470b6a490b6a4a0c6b4c0c6b4d0d6c4f0d6c510e6c520e6d540f6d550f6d57106e59106e5a116e5c126e5d126e5f136e61136e62146e64156e65156e67166e69166e6a176e6c186e6d186e6f196e71196e721a6e741a6e751b6e771c6d781c6d7a1d6d7c1d6d7d1e6d7f1e6c801f6c82206c84206b85216b87216b88226a8a226a8c23698d23698f24699025689225689326679526679727669827669a28659b29649d29649f2a63a02a63a22b62a32c61a52c60a62d60a82e5fa92e5eab2f5ead305dae305cb0315bb1325ab3325ab43359b63458b73557b93556ba3655bc3754bd3853bf3952c03a51c13a50c33b4fc43c4ec63d4dc73e4cc83f4bca404acb4149cc4248ce4347cf4446d04545d24644d34743d44842d54a41d74b3fd84c3ed94d3dda4e3cdb503bdd513ade5238df5337e05536e15635e25734e35933e45a31e55c30e65d2fe75e2ee8602de9612bea632aeb6429eb6628ec6726ed6925ee6a24ef6c23ef6e21f06f20f1711ff1731df2741cf3761bf37819f47918f57b17f57d15f67e14f68013f78212f78410f8850ff8870ef8890cf98b0bf98c0af98e09fa9008fa9207fa9407fb9606fb9706fb9906fb9b06fb9d07fc9f07fca108fca309fca50afca60cfca80dfcaa0ffcac11fcae12fcb014fcb216fcb418fbb61afbb81dfbba1ffbbc21fbbe23fac026fac228fac42afac62df9c72ff9c932f9cb35f8cd37f8cf3af7d13df7d340f6d543f6d746f5d949f5db4cf4dd4ff4df53f4e156f3e35af3e55df2e661f2e865f2ea69f1ec6df1ed71f1ef75f1f179f2f27df2f482f3f586f3f68af4f88ef5f992f6fa96f8fb9af9fc9dfafda1fcffa4\"));\n\nexport var plasma = ramp(colors(\"0d088710078813078916078a19068c1b068d1d068e20068f2206902406912605912805922a05932c05942e05952f059631059733059735049837049938049a3a049a3c049b3e049c3f049c41049d43039e44039e46039f48039f4903a04b03a14c02a14e02a25002a25102a35302a35502a45601a45801a45901a55b01a55c01a65e01a66001a66100a76300a76400a76600a76700a86900a86a00a86c00a86e00a86f00a87100a87201a87401a87501a87701a87801a87a02a87b02a87d03a87e03a88004a88104a78305a78405a78606a68707a68808a68a09a58b0aa58d0ba58e0ca48f0da4910ea3920fa39410a29511a19613a19814a099159f9a169f9c179e9d189d9e199da01a9ca11b9ba21d9aa31e9aa51f99a62098a72197a82296aa2395ab2494ac2694ad2793ae2892b02991b12a90b22b8fb32c8eb42e8db52f8cb6308bb7318ab83289ba3388bb3488bc3587bd3786be3885bf3984c03a83c13b82c23c81c33d80c43e7fc5407ec6417dc7427cc8437bc9447aca457acb4679cc4778cc4977cd4a76ce4b75cf4c74d04d73d14e72d24f71d35171d45270d5536fd5546ed6556dd7566cd8576bd9586ada5a6ada5b69db5c68dc5d67dd5e66de5f65de6164df6263e06363e16462e26561e26660e3685fe4695ee56a5de56b5de66c5ce76e5be76f5ae87059e97158e97257ea7457eb7556eb7655ec7754ed7953ed7a52ee7b51ef7c51ef7e50f07f4ff0804ef1814df1834cf2844bf3854bf3874af48849f48948f58b47f58c46f68d45f68f44f79044f79143f79342f89441f89540f9973ff9983ef99a3efa9b3dfa9c3cfa9e3bfb9f3afba139fba238fca338fca537fca636fca835fca934fdab33fdac33fdae32fdaf31fdb130fdb22ffdb42ffdb52efeb72dfeb82cfeba2cfebb2bfebd2afebe2afec029fdc229fdc328fdc527fdc627fdc827fdca26fdcb26fccd25fcce25fcd025fcd225fbd324fbd524fbd724fad824fada24f9dc24f9dd25f8df25f8e125f7e225f7e425f6e626f6e826f5e926f5eb27f4ed27f3ee27f3f027f2f227f1f426f1f525f0f724f0f921\"));\n","import {linearish} from \"./linear\";\n\nexport default function sequential(interpolator) {\n var x0 = 0,\n x1 = 1,\n clamp = false;\n\n function scale(x) {\n var t = (x - x0) / (x1 - x0);\n return interpolator(clamp ? Math.max(0, Math.min(1, t)) : t);\n }\n\n scale.domain = function(_) {\n return arguments.length ? (x0 = +_[0], x1 = +_[1], scale) : [x0, x1];\n };\n\n scale.clamp = function(_) {\n return arguments.length ? (clamp = !!_, scale) : clamp;\n };\n\n scale.interpolator = function(_) {\n return arguments.length ? (interpolator = _, scale) : interpolator;\n };\n\n scale.copy = function() {\n return sequential(interpolator).domain([x0, x1]).clamp(clamp);\n };\n\n return linearish(scale);\n}\n","export default function(specifier) {\n var n = specifier.length / 6 | 0, colors = new Array(n), i = 0;\n while (i < n) colors[i] = \"#\" + specifier.slice(i * 6, ++i * 6);\n return colors;\n}\n","import colors from \"../colors\";\n\nexport default colors(\"7fc97fbeaed4fdc086ffff99386cb0f0027fbf5b17666666\");\n","import colors from \"../colors\";\n\nexport default colors(\"1f77b4ff7f0e2ca02cd627289467bd8c564be377c27f7f7fbcbd2217becf\");\n","import colors from \"../colors\";\n\nexport default colors(\"1b9e77d95f027570b3e7298a66a61ee6ab02a6761d666666\");\n","import colors from \"../colors\";\n\nexport default colors(\"a6cee31f78b4b2df8a33a02cfb9a99e31a1cfdbf6fff7f00cab2d66a3d9affff99b15928\");\n","import colors from \"../colors\";\n\nexport default colors(\"fbb4aeb3cde3ccebc5decbe4fed9a6ffffcce5d8bdfddaecf2f2f2\");\n","import colors from \"../colors\";\n\nexport default colors(\"b3e2cdfdcdaccbd5e8f4cae4e6f5c9fff2aef1e2cccccccc\");\n","import colors from \"../colors\";\n\nexport default colors(\"e41a1c377eb84daf4a984ea3ff7f00ffff33a65628f781bf999999\");\n","import colors from \"../colors\";\n\nexport default colors(\"66c2a5fc8d628da0cbe78ac3a6d854ffd92fe5c494b3b3b3\");\n","import colors from \"../colors\";\n\nexport default colors(\"8dd3c7ffffb3bebadafb807280b1d3fdb462b3de69fccde5d9d9d9bc80bdccebc5ffed6f\");\n","import {interpolateRgbBasis} from \"d3-interpolate\";\n\nexport default function(scheme) {\n return interpolateRgbBasis(scheme[scheme.length - 1]);\n}\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"d8b365f5f5f55ab4ac\",\n \"a6611adfc27d80cdc1018571\",\n \"a6611adfc27df5f5f580cdc1018571\",\n \"8c510ad8b365f6e8c3c7eae55ab4ac01665e\",\n \"8c510ad8b365f6e8c3f5f5f5c7eae55ab4ac01665e\",\n \"8c510abf812ddfc27df6e8c3c7eae580cdc135978f01665e\",\n \"8c510abf812ddfc27df6e8c3f5f5f5c7eae580cdc135978f01665e\",\n \"5430058c510abf812ddfc27df6e8c3c7eae580cdc135978f01665e003c30\",\n \"5430058c510abf812ddfc27df6e8c3f5f5f5c7eae580cdc135978f01665e003c30\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"af8dc3f7f7f77fbf7b\",\n \"7b3294c2a5cfa6dba0008837\",\n \"7b3294c2a5cff7f7f7a6dba0008837\",\n \"762a83af8dc3e7d4e8d9f0d37fbf7b1b7837\",\n \"762a83af8dc3e7d4e8f7f7f7d9f0d37fbf7b1b7837\",\n \"762a839970abc2a5cfe7d4e8d9f0d3a6dba05aae611b7837\",\n \"762a839970abc2a5cfe7d4e8f7f7f7d9f0d3a6dba05aae611b7837\",\n \"40004b762a839970abc2a5cfe7d4e8d9f0d3a6dba05aae611b783700441b\",\n \"40004b762a839970abc2a5cfe7d4e8f7f7f7d9f0d3a6dba05aae611b783700441b\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"e9a3c9f7f7f7a1d76a\",\n \"d01c8bf1b6dab8e1864dac26\",\n \"d01c8bf1b6daf7f7f7b8e1864dac26\",\n \"c51b7de9a3c9fde0efe6f5d0a1d76a4d9221\",\n \"c51b7de9a3c9fde0eff7f7f7e6f5d0a1d76a4d9221\",\n \"c51b7dde77aef1b6dafde0efe6f5d0b8e1867fbc414d9221\",\n \"c51b7dde77aef1b6dafde0eff7f7f7e6f5d0b8e1867fbc414d9221\",\n \"8e0152c51b7dde77aef1b6dafde0efe6f5d0b8e1867fbc414d9221276419\",\n \"8e0152c51b7dde77aef1b6dafde0eff7f7f7e6f5d0b8e1867fbc414d9221276419\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"998ec3f7f7f7f1a340\",\n \"5e3c99b2abd2fdb863e66101\",\n \"5e3c99b2abd2f7f7f7fdb863e66101\",\n \"542788998ec3d8daebfee0b6f1a340b35806\",\n \"542788998ec3d8daebf7f7f7fee0b6f1a340b35806\",\n \"5427888073acb2abd2d8daebfee0b6fdb863e08214b35806\",\n \"5427888073acb2abd2d8daebf7f7f7fee0b6fdb863e08214b35806\",\n \"2d004b5427888073acb2abd2d8daebfee0b6fdb863e08214b358067f3b08\",\n \"2d004b5427888073acb2abd2d8daebf7f7f7fee0b6fdb863e08214b358067f3b08\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"ef8a62f7f7f767a9cf\",\n \"ca0020f4a58292c5de0571b0\",\n \"ca0020f4a582f7f7f792c5de0571b0\",\n \"b2182bef8a62fddbc7d1e5f067a9cf2166ac\",\n \"b2182bef8a62fddbc7f7f7f7d1e5f067a9cf2166ac\",\n \"b2182bd6604df4a582fddbc7d1e5f092c5de4393c32166ac\",\n \"b2182bd6604df4a582fddbc7f7f7f7d1e5f092c5de4393c32166ac\",\n \"67001fb2182bd6604df4a582fddbc7d1e5f092c5de4393c32166ac053061\",\n \"67001fb2182bd6604df4a582fddbc7f7f7f7d1e5f092c5de4393c32166ac053061\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"ef8a62ffffff999999\",\n \"ca0020f4a582bababa404040\",\n \"ca0020f4a582ffffffbababa404040\",\n \"b2182bef8a62fddbc7e0e0e09999994d4d4d\",\n \"b2182bef8a62fddbc7ffffffe0e0e09999994d4d4d\",\n \"b2182bd6604df4a582fddbc7e0e0e0bababa8787874d4d4d\",\n \"b2182bd6604df4a582fddbc7ffffffe0e0e0bababa8787874d4d4d\",\n \"67001fb2182bd6604df4a582fddbc7e0e0e0bababa8787874d4d4d1a1a1a\",\n \"67001fb2182bd6604df4a582fddbc7ffffffe0e0e0bababa8787874d4d4d1a1a1a\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"fc8d59ffffbf91bfdb\",\n \"d7191cfdae61abd9e92c7bb6\",\n \"d7191cfdae61ffffbfabd9e92c7bb6\",\n \"d73027fc8d59fee090e0f3f891bfdb4575b4\",\n \"d73027fc8d59fee090ffffbfe0f3f891bfdb4575b4\",\n \"d73027f46d43fdae61fee090e0f3f8abd9e974add14575b4\",\n \"d73027f46d43fdae61fee090ffffbfe0f3f8abd9e974add14575b4\",\n \"a50026d73027f46d43fdae61fee090e0f3f8abd9e974add14575b4313695\",\n \"a50026d73027f46d43fdae61fee090ffffbfe0f3f8abd9e974add14575b4313695\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"fc8d59ffffbf91cf60\",\n \"d7191cfdae61a6d96a1a9641\",\n \"d7191cfdae61ffffbfa6d96a1a9641\",\n \"d73027fc8d59fee08bd9ef8b91cf601a9850\",\n \"d73027fc8d59fee08bffffbfd9ef8b91cf601a9850\",\n \"d73027f46d43fdae61fee08bd9ef8ba6d96a66bd631a9850\",\n \"d73027f46d43fdae61fee08bffffbfd9ef8ba6d96a66bd631a9850\",\n \"a50026d73027f46d43fdae61fee08bd9ef8ba6d96a66bd631a9850006837\",\n \"a50026d73027f46d43fdae61fee08bffffbfd9ef8ba6d96a66bd631a9850006837\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"fc8d59ffffbf99d594\",\n \"d7191cfdae61abdda42b83ba\",\n \"d7191cfdae61ffffbfabdda42b83ba\",\n \"d53e4ffc8d59fee08be6f59899d5943288bd\",\n \"d53e4ffc8d59fee08bffffbfe6f59899d5943288bd\",\n \"d53e4ff46d43fdae61fee08be6f598abdda466c2a53288bd\",\n \"d53e4ff46d43fdae61fee08bffffbfe6f598abdda466c2a53288bd\",\n \"9e0142d53e4ff46d43fdae61fee08be6f598abdda466c2a53288bd5e4fa2\",\n \"9e0142d53e4ff46d43fdae61fee08bffffbfe6f598abdda466c2a53288bd5e4fa2\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"e5f5f999d8c92ca25f\",\n \"edf8fbb2e2e266c2a4238b45\",\n \"edf8fbb2e2e266c2a42ca25f006d2c\",\n \"edf8fbccece699d8c966c2a42ca25f006d2c\",\n \"edf8fbccece699d8c966c2a441ae76238b45005824\",\n \"f7fcfde5f5f9ccece699d8c966c2a441ae76238b45005824\",\n \"f7fcfde5f5f9ccece699d8c966c2a441ae76238b45006d2c00441b\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"e0ecf49ebcda8856a7\",\n \"edf8fbb3cde38c96c688419d\",\n \"edf8fbb3cde38c96c68856a7810f7c\",\n \"edf8fbbfd3e69ebcda8c96c68856a7810f7c\",\n \"edf8fbbfd3e69ebcda8c96c68c6bb188419d6e016b\",\n \"f7fcfde0ecf4bfd3e69ebcda8c96c68c6bb188419d6e016b\",\n \"f7fcfde0ecf4bfd3e69ebcda8c96c68c6bb188419d810f7c4d004b\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"e0f3dba8ddb543a2ca\",\n \"f0f9e8bae4bc7bccc42b8cbe\",\n \"f0f9e8bae4bc7bccc443a2ca0868ac\",\n \"f0f9e8ccebc5a8ddb57bccc443a2ca0868ac\",\n \"f0f9e8ccebc5a8ddb57bccc44eb3d32b8cbe08589e\",\n \"f7fcf0e0f3dbccebc5a8ddb57bccc44eb3d32b8cbe08589e\",\n \"f7fcf0e0f3dbccebc5a8ddb57bccc44eb3d32b8cbe0868ac084081\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"fee8c8fdbb84e34a33\",\n \"fef0d9fdcc8afc8d59d7301f\",\n \"fef0d9fdcc8afc8d59e34a33b30000\",\n \"fef0d9fdd49efdbb84fc8d59e34a33b30000\",\n \"fef0d9fdd49efdbb84fc8d59ef6548d7301f990000\",\n \"fff7ecfee8c8fdd49efdbb84fc8d59ef6548d7301f990000\",\n \"fff7ecfee8c8fdd49efdbb84fc8d59ef6548d7301fb300007f0000\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"ece2f0a6bddb1c9099\",\n \"f6eff7bdc9e167a9cf02818a\",\n \"f6eff7bdc9e167a9cf1c9099016c59\",\n \"f6eff7d0d1e6a6bddb67a9cf1c9099016c59\",\n \"f6eff7d0d1e6a6bddb67a9cf3690c002818a016450\",\n \"fff7fbece2f0d0d1e6a6bddb67a9cf3690c002818a016450\",\n \"fff7fbece2f0d0d1e6a6bddb67a9cf3690c002818a016c59014636\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"ece7f2a6bddb2b8cbe\",\n \"f1eef6bdc9e174a9cf0570b0\",\n \"f1eef6bdc9e174a9cf2b8cbe045a8d\",\n \"f1eef6d0d1e6a6bddb74a9cf2b8cbe045a8d\",\n \"f1eef6d0d1e6a6bddb74a9cf3690c00570b0034e7b\",\n \"fff7fbece7f2d0d1e6a6bddb74a9cf3690c00570b0034e7b\",\n \"fff7fbece7f2d0d1e6a6bddb74a9cf3690c00570b0045a8d023858\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"e7e1efc994c7dd1c77\",\n \"f1eef6d7b5d8df65b0ce1256\",\n \"f1eef6d7b5d8df65b0dd1c77980043\",\n \"f1eef6d4b9dac994c7df65b0dd1c77980043\",\n \"f1eef6d4b9dac994c7df65b0e7298ace125691003f\",\n \"f7f4f9e7e1efd4b9dac994c7df65b0e7298ace125691003f\",\n \"f7f4f9e7e1efd4b9dac994c7df65b0e7298ace125698004367001f\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"fde0ddfa9fb5c51b8a\",\n \"feebe2fbb4b9f768a1ae017e\",\n \"feebe2fbb4b9f768a1c51b8a7a0177\",\n \"feebe2fcc5c0fa9fb5f768a1c51b8a7a0177\",\n \"feebe2fcc5c0fa9fb5f768a1dd3497ae017e7a0177\",\n \"fff7f3fde0ddfcc5c0fa9fb5f768a1dd3497ae017e7a0177\",\n \"fff7f3fde0ddfcc5c0fa9fb5f768a1dd3497ae017e7a017749006a\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"edf8b17fcdbb2c7fb8\",\n \"ffffcca1dab441b6c4225ea8\",\n \"ffffcca1dab441b6c42c7fb8253494\",\n \"ffffccc7e9b47fcdbb41b6c42c7fb8253494\",\n \"ffffccc7e9b47fcdbb41b6c41d91c0225ea80c2c84\",\n \"ffffd9edf8b1c7e9b47fcdbb41b6c41d91c0225ea80c2c84\",\n \"ffffd9edf8b1c7e9b47fcdbb41b6c41d91c0225ea8253494081d58\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"f7fcb9addd8e31a354\",\n \"ffffccc2e69978c679238443\",\n \"ffffccc2e69978c67931a354006837\",\n \"ffffccd9f0a3addd8e78c67931a354006837\",\n \"ffffccd9f0a3addd8e78c67941ab5d238443005a32\",\n \"ffffe5f7fcb9d9f0a3addd8e78c67941ab5d238443005a32\",\n \"ffffe5f7fcb9d9f0a3addd8e78c67941ab5d238443006837004529\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"fff7bcfec44fd95f0e\",\n \"ffffd4fed98efe9929cc4c02\",\n \"ffffd4fed98efe9929d95f0e993404\",\n \"ffffd4fee391fec44ffe9929d95f0e993404\",\n \"ffffd4fee391fec44ffe9929ec7014cc4c028c2d04\",\n \"ffffe5fff7bcfee391fec44ffe9929ec7014cc4c028c2d04\",\n \"ffffe5fff7bcfee391fec44ffe9929ec7014cc4c02993404662506\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"ffeda0feb24cf03b20\",\n \"ffffb2fecc5cfd8d3ce31a1c\",\n \"ffffb2fecc5cfd8d3cf03b20bd0026\",\n \"ffffb2fed976feb24cfd8d3cf03b20bd0026\",\n \"ffffb2fed976feb24cfd8d3cfc4e2ae31a1cb10026\",\n \"ffffccffeda0fed976feb24cfd8d3cfc4e2ae31a1cb10026\",\n \"ffffccffeda0fed976feb24cfd8d3cfc4e2ae31a1cbd0026800026\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"deebf79ecae13182bd\",\n \"eff3ffbdd7e76baed62171b5\",\n \"eff3ffbdd7e76baed63182bd08519c\",\n \"eff3ffc6dbef9ecae16baed63182bd08519c\",\n \"eff3ffc6dbef9ecae16baed64292c62171b5084594\",\n \"f7fbffdeebf7c6dbef9ecae16baed64292c62171b5084594\",\n \"f7fbffdeebf7c6dbef9ecae16baed64292c62171b508519c08306b\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"e5f5e0a1d99b31a354\",\n \"edf8e9bae4b374c476238b45\",\n \"edf8e9bae4b374c47631a354006d2c\",\n \"edf8e9c7e9c0a1d99b74c47631a354006d2c\",\n \"edf8e9c7e9c0a1d99b74c47641ab5d238b45005a32\",\n \"f7fcf5e5f5e0c7e9c0a1d99b74c47641ab5d238b45005a32\",\n \"f7fcf5e5f5e0c7e9c0a1d99b74c47641ab5d238b45006d2c00441b\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"f0f0f0bdbdbd636363\",\n \"f7f7f7cccccc969696525252\",\n \"f7f7f7cccccc969696636363252525\",\n \"f7f7f7d9d9d9bdbdbd969696636363252525\",\n \"f7f7f7d9d9d9bdbdbd969696737373525252252525\",\n \"fffffff0f0f0d9d9d9bdbdbd969696737373525252252525\",\n \"fffffff0f0f0d9d9d9bdbdbd969696737373525252252525000000\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"efedf5bcbddc756bb1\",\n \"f2f0f7cbc9e29e9ac86a51a3\",\n \"f2f0f7cbc9e29e9ac8756bb154278f\",\n \"f2f0f7dadaebbcbddc9e9ac8756bb154278f\",\n \"f2f0f7dadaebbcbddc9e9ac8807dba6a51a34a1486\",\n \"fcfbfdefedf5dadaebbcbddc9e9ac8807dba6a51a34a1486\",\n \"fcfbfdefedf5dadaebbcbddc9e9ac8807dba6a51a354278f3f007d\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"fee0d2fc9272de2d26\",\n \"fee5d9fcae91fb6a4acb181d\",\n \"fee5d9fcae91fb6a4ade2d26a50f15\",\n \"fee5d9fcbba1fc9272fb6a4ade2d26a50f15\",\n \"fee5d9fcbba1fc9272fb6a4aef3b2ccb181d99000d\",\n \"fff5f0fee0d2fcbba1fc9272fb6a4aef3b2ccb181d99000d\",\n \"fff5f0fee0d2fcbba1fc9272fb6a4aef3b2ccb181da50f1567000d\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"fee6cefdae6be6550d\",\n \"feeddefdbe85fd8d3cd94701\",\n \"feeddefdbe85fd8d3ce6550da63603\",\n \"feeddefdd0a2fdae6bfd8d3ce6550da63603\",\n \"feeddefdd0a2fdae6bfd8d3cf16913d948018c2d04\",\n \"fff5ebfee6cefdd0a2fdae6bfd8d3cf16913d948018c2d04\",\n \"fff5ebfee6cefdd0a2fdae6bfd8d3cf16913d94801a636037f2704\"\n).map(colors);\n\nexport default ramp(scheme);\n","import {cubehelix} from \"d3-color\";\nimport {interpolateCubehelixLong} from \"d3-interpolate\";\n\nexport default interpolateCubehelixLong(cubehelix(300, 0.5, 0.0), cubehelix(-240, 0.5, 1.0));\n","import {cubehelix} from \"d3-color\";\nimport {interpolateCubehelixLong} from \"d3-interpolate\";\n\nexport var warm = interpolateCubehelixLong(cubehelix(-100, 0.75, 0.35), cubehelix(80, 1.50, 0.8));\n\nexport var cool = interpolateCubehelixLong(cubehelix(260, 0.75, 0.35), cubehelix(80, 1.50, 0.8));\n\nvar c = cubehelix();\n\nexport default function(t) {\n if (t < 0 || t > 1) t -= Math.floor(t);\n var ts = Math.abs(t - 0.5);\n c.h = 360 * t - 100;\n c.s = 1.5 - 1.5 * ts;\n c.l = 0.8 - 0.9 * ts;\n return c + \"\";\n}\n","import {rgb} from \"d3-color\";\n\nvar c = rgb(),\n pi_1_3 = Math.PI / 3,\n pi_2_3 = Math.PI * 2 / 3;\n\nexport default function(t) {\n var x;\n t = (0.5 - t) * Math.PI;\n c.r = 255 * (x = Math.sin(t)) * x;\n c.g = 255 * (x = Math.sin(t + pi_1_3)) * x;\n c.b = 255 * (x = Math.sin(t + pi_2_3)) * x;\n return c + \"\";\n}\n","import colors from \"../colors\";\n\nfunction ramp(range) {\n var n = range.length;\n return function(t) {\n return range[Math.max(0, Math.min(n - 1, Math.floor(t * n)))];\n };\n}\n\nexport default ramp(colors(\"44015444025645045745055946075a46085c460a5d460b5e470d60470e6147106347116447136548146748166848176948186a481a6c481b6d481c6e481d6f481f70482071482173482374482475482576482677482878482979472a7a472c7a472d7b472e7c472f7d46307e46327e46337f463480453581453781453882443983443a83443b84433d84433e85423f854240864241864142874144874045884046883f47883f48893e49893e4a893e4c8a3d4d8a3d4e8a3c4f8a3c508b3b518b3b528b3a538b3a548c39558c39568c38588c38598c375a8c375b8d365c8d365d8d355e8d355f8d34608d34618d33628d33638d32648e32658e31668e31678e31688e30698e306a8e2f6b8e2f6c8e2e6d8e2e6e8e2e6f8e2d708e2d718e2c718e2c728e2c738e2b748e2b758e2a768e2a778e2a788e29798e297a8e297b8e287c8e287d8e277e8e277f8e27808e26818e26828e26828e25838e25848e25858e24868e24878e23888e23898e238a8d228b8d228c8d228d8d218e8d218f8d21908d21918c20928c20928c20938c1f948c1f958b1f968b1f978b1f988b1f998a1f9a8a1e9b8a1e9c891e9d891f9e891f9f881fa0881fa1881fa1871fa28720a38620a48621a58521a68522a78522a88423a98324aa8325ab8225ac8226ad8127ad8128ae8029af7f2ab07f2cb17e2db27d2eb37c2fb47c31b57b32b67a34b67935b77937b87838b9773aba763bbb753dbc743fbc7340bd7242be7144bf7046c06f48c16e4ac16d4cc26c4ec36b50c46a52c56954c56856c66758c7655ac8645cc8635ec96260ca6063cb5f65cb5e67cc5c69cd5b6ccd5a6ece5870cf5773d05675d05477d1537ad1517cd2507fd34e81d34d84d44b86d54989d5488bd6468ed64590d74393d74195d84098d83e9bd93c9dd93ba0da39a2da37a5db36a8db34aadc32addc30b0dd2fb2dd2db5de2bb8de29bade28bddf26c0df25c2df23c5e021c8e020cae11fcde11dd0e11cd2e21bd5e21ad8e219dae319dde318dfe318e2e418e5e419e7e419eae51aece51befe51cf1e51df4e61ef6e620f8e621fbe723fde725\"));\n\nexport var magma = ramp(colors(\"00000401000501010601010802010902020b02020d03030f03031204041405041606051806051a07061c08071e0907200a08220b09240c09260d0a290e0b2b100b2d110c2f120d31130d34140e36150e38160f3b180f3d19103f1a10421c10441d11471e114920114b21114e22115024125325125527125829115a2a115c2c115f2d11612f116331116533106734106936106b38106c390f6e3b0f703d0f713f0f72400f74420f75440f764510774710784910784a10794c117a4e117b4f127b51127c52137c54137d56147d57157e59157e5a167e5c167f5d177f5f187f601880621980641a80651a80671b80681c816a1c816b1d816d1d816e1e81701f81721f817320817521817621817822817922827b23827c23827e24828025828125818326818426818627818827818928818b29818c29818e2a81902a81912b81932b80942c80962c80982d80992d809b2e7f9c2e7f9e2f7fa02f7fa1307ea3307ea5317ea6317da8327daa337dab337cad347cae347bb0357bb2357bb3367ab5367ab73779b83779ba3878bc3978bd3977bf3a77c03a76c23b75c43c75c53c74c73d73c83e73ca3e72cc3f71cd4071cf4070d0416fd2426fd3436ed5446dd6456cd8456cd9466bdb476adc4869de4968df4a68e04c67e24d66e34e65e44f64e55064e75263e85362e95462ea5661eb5760ec5860ed5a5fee5b5eef5d5ef05f5ef1605df2625df2645cf3655cf4675cf4695cf56b5cf66c5cf66e5cf7705cf7725cf8745cf8765cf9785df9795df97b5dfa7d5efa7f5efa815ffb835ffb8560fb8761fc8961fc8a62fc8c63fc8e64fc9065fd9266fd9467fd9668fd9869fd9a6afd9b6bfe9d6cfe9f6dfea16efea36ffea571fea772fea973feaa74feac76feae77feb078feb27afeb47bfeb67cfeb77efeb97ffebb81febd82febf84fec185fec287fec488fec68afec88cfeca8dfecc8ffecd90fecf92fed194fed395fed597fed799fed89afdda9cfddc9efddea0fde0a1fde2a3fde3a5fde5a7fde7a9fde9aafdebacfcecaefceeb0fcf0b2fcf2b4fcf4b6fcf6b8fcf7b9fcf9bbfcfbbdfcfdbf\"));\n\nexport var inferno = ramp(colors(\"00000401000501010601010802010a02020c02020e03021004031204031405041706041907051b08051d09061f0a07220b07240c08260d08290e092b10092d110a30120a32140b34150b37160b39180c3c190c3e1b0c411c0c431e0c451f0c48210c4a230c4c240c4f260c51280b53290b552b0b572d0b592f0a5b310a5c320a5e340a5f3609613809623909633b09643d09653e0966400a67420a68440a68450a69470b6a490b6a4a0c6b4c0c6b4d0d6c4f0d6c510e6c520e6d540f6d550f6d57106e59106e5a116e5c126e5d126e5f136e61136e62146e64156e65156e67166e69166e6a176e6c186e6d186e6f196e71196e721a6e741a6e751b6e771c6d781c6d7a1d6d7c1d6d7d1e6d7f1e6c801f6c82206c84206b85216b87216b88226a8a226a8c23698d23698f24699025689225689326679526679727669827669a28659b29649d29649f2a63a02a63a22b62a32c61a52c60a62d60a82e5fa92e5eab2f5ead305dae305cb0315bb1325ab3325ab43359b63458b73557b93556ba3655bc3754bd3853bf3952c03a51c13a50c33b4fc43c4ec63d4dc73e4cc83f4bca404acb4149cc4248ce4347cf4446d04545d24644d34743d44842d54a41d74b3fd84c3ed94d3dda4e3cdb503bdd513ade5238df5337e05536e15635e25734e35933e45a31e55c30e65d2fe75e2ee8602de9612bea632aeb6429eb6628ec6726ed6925ee6a24ef6c23ef6e21f06f20f1711ff1731df2741cf3761bf37819f47918f57b17f57d15f67e14f68013f78212f78410f8850ff8870ef8890cf98b0bf98c0af98e09fa9008fa9207fa9407fb9606fb9706fb9906fb9b06fb9d07fc9f07fca108fca309fca50afca60cfca80dfcaa0ffcac11fcae12fcb014fcb216fcb418fbb61afbb81dfbba1ffbbc21fbbe23fac026fac228fac42afac62df9c72ff9c932f9cb35f8cd37f8cf3af7d13df7d340f6d543f6d746f5d949f5db4cf4dd4ff4df53f4e156f3e35af3e55df2e661f2e865f2ea69f1ec6df1ed71f1ef75f1f179f2f27df2f482f3f586f3f68af4f88ef5f992f6fa96f8fb9af9fc9dfafda1fcffa4\"));\n\nexport var plasma = ramp(colors(\"0d088710078813078916078a19068c1b068d1d068e20068f2206902406912605912805922a05932c05942e05952f059631059733059735049837049938049a3a049a3c049b3e049c3f049c41049d43039e44039e46039f48039f4903a04b03a14c02a14e02a25002a25102a35302a35502a45601a45801a45901a55b01a55c01a65e01a66001a66100a76300a76400a76600a76700a86900a86a00a86c00a86e00a86f00a87100a87201a87401a87501a87701a87801a87a02a87b02a87d03a87e03a88004a88104a78305a78405a78606a68707a68808a68a09a58b0aa58d0ba58e0ca48f0da4910ea3920fa39410a29511a19613a19814a099159f9a169f9c179e9d189d9e199da01a9ca11b9ba21d9aa31e9aa51f99a62098a72197a82296aa2395ab2494ac2694ad2793ae2892b02991b12a90b22b8fb32c8eb42e8db52f8cb6308bb7318ab83289ba3388bb3488bc3587bd3786be3885bf3984c03a83c13b82c23c81c33d80c43e7fc5407ec6417dc7427cc8437bc9447aca457acb4679cc4778cc4977cd4a76ce4b75cf4c74d04d73d14e72d24f71d35171d45270d5536fd5546ed6556dd7566cd8576bd9586ada5a6ada5b69db5c68dc5d67dd5e66de5f65de6164df6263e06363e16462e26561e26660e3685fe4695ee56a5de56b5de66c5ce76e5be76f5ae87059e97158e97257ea7457eb7556eb7655ec7754ed7953ed7a52ee7b51ef7c51ef7e50f07f4ff0804ef1814df1834cf2844bf3854bf3874af48849f48948f58b47f58c46f68d45f68f44f79044f79143f79342f89441f89540f9973ff9983ef99a3efa9b3dfa9c3cfa9e3bfb9f3afba139fba238fca338fca537fca636fca835fca934fdab33fdac33fdae32fdaf31fdb130fdb22ffdb42ffdb52efeb72dfeb82cfeba2cfebb2bfebd2afebe2afec029fdc229fdc328fdc527fdc627fdc827fdca26fdcb26fccd25fcce25fcd025fcd225fbd324fbd524fbd724fad824fada24f9dc24f9dd25f8df25f8e125f7e225f7e425f6e626f6e826f5e926f5eb27f4ed27f3ee27f3f027f2f227f1f426f1f525f0f724f0f921\"));\n","export const UNIT_GLOBAL_NAMESPACE = 'app.units';\nexport const UNIT_LOCAL_NAMESPACE = 'local.units';\nexport const LAYER_LOCAL_NAMESPACE = 'local.layers';\nexport const LAYER_GLOBAL_NAMESPACE = 'app.layers';\nexport const GROUP_GLOBAL_NAMESPACE = 'app.group';\nexport const GROUP_LOCAL_NAMESPACE = 'local.group';\nexport const CANVAS_LOCAL_NAMESPACE = 'local.canvas';\nexport const CANVAS_GLOBAL_NAMESPACE = 'app.canvas';\n\n","const ReservedFields = {\n ROW_ID: '__id__'\n};\n\nexport default ReservedFields;\n","const CommonProps = {\n ACTION_INF: 'actionInf',\n ON_LAYER_DRAW: 'onLayerDraw',\n MATRIX_CREATED: 'matrixCreated'\n};\n\nexport default CommonProps;\n","export const COORD_TYPES = {\n POLAR: 'polar',\n CARTESIAN: 'cartesian'\n};\n","export var slice = Array.prototype.slice;\n","export default function(x) {\n return x;\n}\n","import {slice} from \"./array\";\nimport identity from \"./identity\";\n\nvar top = 1,\n right = 2,\n bottom = 3,\n left = 4,\n epsilon = 1e-6;\n\nfunction translateX(x) {\n return \"translate(\" + (x + 0.5) + \",0)\";\n}\n\nfunction translateY(y) {\n return \"translate(0,\" + (y + 0.5) + \")\";\n}\n\nfunction number(scale) {\n return function(d) {\n return +scale(d);\n };\n}\n\nfunction center(scale) {\n var offset = Math.max(0, scale.bandwidth() - 1) / 2; // Adjust for 0.5px offset.\n if (scale.round()) offset = Math.round(offset);\n return function(d) {\n return +scale(d) + offset;\n };\n}\n\nfunction entering() {\n return !this.__axis;\n}\n\nfunction axis(orient, scale) {\n var tickArguments = [],\n tickValues = null,\n tickFormat = null,\n tickTransform = null,\n tickSizeInner = 6,\n tickSizeOuter = 6,\n tickPadding = 3,\n k = orient === top || orient === left ? -1 : 1,\n x = orient === left || orient === right ? \"x\" : \"y\",\n transform = orient === top || orient === bottom ? translateX : translateY;\n\n function axis(context) {\n var values = tickValues == null ? (scale.ticks ? scale.ticks.apply(scale, tickArguments) : scale.domain()) : tickValues,\n format = tickFormat == null ? (scale.tickFormat ? scale.tickFormat.apply(scale, tickArguments) : identity) : tickFormat,\n spacing = Math.max(tickSizeInner, 0) + tickPadding,\n range = scale.range(),\n range0 = +range[0] + 0.5,\n range1 = +range[range.length - 1] + 0.5,\n position = (scale.bandwidth ? center : number)(scale.copy()),\n selection = context.selection ? context.selection() : context,\n path = selection.selectAll(\".domain\").data([null]),\n tick = selection.selectAll(\".tick\").data(values, scale).order(),\n tickExit = tick.exit(),\n tickEnter = tick.enter().append(\"g\").attr(\"class\", \"tick\"),\n line = tick.select(\"line\"),\n text = tick.select(\"text\");\n\n path = path.merge(path.enter().insert(\"path\", \".tick\")\n .attr(\"class\", \"domain\")\n .attr(\"stroke\", \"#000\"));\n\n tick = tick.merge(tickEnter);\n\n line = line.merge(tickEnter.append(\"line\")\n .attr(\"stroke\", \"#000\")\n .attr(x + \"2\", k * tickSizeInner));\n\n text = text.merge(tickEnter.append(\"text\")\n .attr(\"fill\", \"#000\")\n .attr(x, k * spacing)\n .attr(\"dy\", orient === top ? \"0em\" : orient === bottom ? \"0.71em\" : \"0.32em\"))\n .style('transform', tickTransform);\n\n if (context !== selection) {\n path = path.transition(context);\n tick = tick.transition(context);\n line = line.transition(context);\n text = text.transition(context);\n\n tickExit = tickExit.transition(context)\n .attr(\"opacity\", epsilon)\n .attr(\"transform\", function(d) { return isFinite(d = position(d)) ? transform(d) : this.getAttribute(\"transform\"); });\n\n tickEnter\n .attr(\"opacity\", epsilon)\n .attr(\"transform\", function(d) { var p = this.parentNode.__axis; return transform(p && isFinite(p = p(d)) ? p : position(d)); });\n }\n\n tickExit.remove();\n\n path\n .attr(\"d\", orient === left || orient == right\n ? \"M\" + k * tickSizeOuter + \",\" + range0 + \"H0.5V\" + range1 + \"H\" + k * tickSizeOuter\n : \"M\" + range0 + \",\" + k * tickSizeOuter + \"V0.5H\" + range1 + \"V\" + k * tickSizeOuter);\n\n tick\n .attr(\"opacity\", 1)\n .attr(\"transform\", function(d) { return transform(position(d)); });\n\n line\n .attr(x + \"2\", k * tickSizeInner);\n\n text\n .attr(x, k * spacing)\n .text(format);\n\n selection.filter(entering)\n .attr(\"fill\", \"none\")\n .attr(\"font-size\", 10)\n .attr(\"font-family\", \"sans-serif\")\n .attr(\"text-anchor\", orient === right ? \"start\" : orient === left ? \"end\" : \"middle\");\n\n selection\n .each(function() { this.__axis = position; });\n }\n\n axis.scale = function(_) {\n return arguments.length ? (scale = _, axis) : scale;\n };\n\n axis.tickTransform = function(_) {\n return arguments.length ? (tickTransform = _, axis) : tickTransform;\n };\n\n axis.ticks = function() {\n return tickArguments = slice.call(arguments), axis;\n };\n\n axis.tickArguments = function(_) {\n return arguments.length ? (tickArguments = _ == null ? [] : slice.call(_), axis) : tickArguments.slice();\n };\n\n axis.tickValues = function(_) {\n return arguments.length ? (tickValues = _ == null ? null : slice.call(_), axis) : tickValues && tickValues.slice();\n };\n\n axis.tickFormat = function(_) {\n return arguments.length ? (tickFormat = _, axis) : tickFormat;\n };\n\n axis.tickSize = function(_) {\n return arguments.length ? (tickSizeInner = tickSizeOuter = +_, axis) : tickSizeInner;\n };\n\n axis.tickSizeInner = function(_) {\n return arguments.length ? (tickSizeInner = +_, axis) : tickSizeInner;\n };\n\n axis.tickSizeOuter = function(_) {\n return arguments.length ? (tickSizeOuter = +_, axis) : tickSizeOuter;\n };\n\n axis.tickPadding = function(_) {\n return arguments.length ? (tickPadding = +_, axis) : tickPadding;\n };\n\n return axis;\n}\n\nexport function axisTop(scale) {\n return axis(top, scale);\n}\n\nexport function axisRight(scale) {\n return axis(right, scale);\n}\n\nexport function axisBottom(scale) {\n return axis(bottom, scale);\n}\n\nexport function axisLeft(scale) {\n return axis(left, scale);\n}\n","var pi = Math.PI,\n tau = 2 * pi,\n epsilon = 1e-6,\n tauEpsilon = tau - epsilon;\n\nfunction Path() {\n this._x0 = this._y0 = // start of current subpath\n this._x1 = this._y1 = null; // end of current subpath\n this._ = \"\";\n}\n\nfunction path() {\n return new Path;\n}\n\nPath.prototype = path.prototype = {\n constructor: Path,\n moveTo: function(x, y) {\n this._ += \"M\" + (this._x0 = this._x1 = +x) + \",\" + (this._y0 = this._y1 = +y);\n },\n closePath: function() {\n if (this._x1 !== null) {\n this._x1 = this._x0, this._y1 = this._y0;\n this._ += \"Z\";\n }\n },\n lineTo: function(x, y) {\n this._ += \"L\" + (this._x1 = +x) + \",\" + (this._y1 = +y);\n },\n quadraticCurveTo: function(x1, y1, x, y) {\n this._ += \"Q\" + (+x1) + \",\" + (+y1) + \",\" + (this._x1 = +x) + \",\" + (this._y1 = +y);\n },\n bezierCurveTo: function(x1, y1, x2, y2, x, y) {\n this._ += \"C\" + (+x1) + \",\" + (+y1) + \",\" + (+x2) + \",\" + (+y2) + \",\" + (this._x1 = +x) + \",\" + (this._y1 = +y);\n },\n arcTo: function(x1, y1, x2, y2, r) {\n x1 = +x1, y1 = +y1, x2 = +x2, y2 = +y2, r = +r;\n var x0 = this._x1,\n y0 = this._y1,\n x21 = x2 - x1,\n y21 = y2 - y1,\n x01 = x0 - x1,\n y01 = y0 - y1,\n l01_2 = x01 * x01 + y01 * y01;\n\n // Is the radius negative? Error.\n if (r < 0) throw new Error(\"negative radius: \" + r);\n\n // Is this path empty? Move to (x1,y1).\n if (this._x1 === null) {\n this._ += \"M\" + (this._x1 = x1) + \",\" + (this._y1 = y1);\n }\n\n // Or, is (x1,y1) coincident with (x0,y0)? Do nothing.\n else if (!(l01_2 > epsilon));\n\n // Or, are (x0,y0), (x1,y1) and (x2,y2) collinear?\n // Equivalently, is (x1,y1) coincident with (x2,y2)?\n // Or, is the radius zero? Line to (x1,y1).\n else if (!(Math.abs(y01 * x21 - y21 * x01) > epsilon) || !r) {\n this._ += \"L\" + (this._x1 = x1) + \",\" + (this._y1 = y1);\n }\n\n // Otherwise, draw an arc!\n else {\n var x20 = x2 - x0,\n y20 = y2 - y0,\n l21_2 = x21 * x21 + y21 * y21,\n l20_2 = x20 * x20 + y20 * y20,\n l21 = Math.sqrt(l21_2),\n l01 = Math.sqrt(l01_2),\n l = r * Math.tan((pi - Math.acos((l21_2 + l01_2 - l20_2) / (2 * l21 * l01))) / 2),\n t01 = l / l01,\n t21 = l / l21;\n\n // If the start tangent is not coincident with (x0,y0), line to.\n if (Math.abs(t01 - 1) > epsilon) {\n this._ += \"L\" + (x1 + t01 * x01) + \",\" + (y1 + t01 * y01);\n }\n\n this._ += \"A\" + r + \",\" + r + \",0,0,\" + (+(y01 * x20 > x01 * y20)) + \",\" + (this._x1 = x1 + t21 * x21) + \",\" + (this._y1 = y1 + t21 * y21);\n }\n },\n arc: function(x, y, r, a0, a1, ccw) {\n x = +x, y = +y, r = +r;\n var dx = r * Math.cos(a0),\n dy = r * Math.sin(a0),\n x0 = x + dx,\n y0 = y + dy,\n cw = 1 ^ ccw,\n da = ccw ? a0 - a1 : a1 - a0;\n\n // Is the radius negative? Error.\n if (r < 0) throw new Error(\"negative radius: \" + r);\n\n // Is this path empty? Move to (x0,y0).\n if (this._x1 === null) {\n this._ += \"M\" + x0 + \",\" + y0;\n }\n\n // Or, is (x0,y0) not coincident with the previous point? Line to (x0,y0).\n else if (Math.abs(this._x1 - x0) > epsilon || Math.abs(this._y1 - y0) > epsilon) {\n this._ += \"L\" + x0 + \",\" + y0;\n }\n\n // Is this arc empty? We’re done.\n if (!r) return;\n\n // Does the angle go the wrong way? Flip the direction.\n if (da < 0) da = da % tau + tau;\n\n // Is this a complete circle? Draw two arcs to complete the circle.\n if (da > tauEpsilon) {\n this._ += \"A\" + r + \",\" + r + \",0,1,\" + cw + \",\" + (x - dx) + \",\" + (y - dy) + \"A\" + r + \",\" + r + \",0,1,\" + cw + \",\" + (this._x1 = x0) + \",\" + (this._y1 = y0);\n }\n\n // Is this arc non-empty? Draw an arc!\n else if (da > epsilon) {\n this._ += \"A\" + r + \",\" + r + \",0,\" + (+(da >= pi)) + \",\" + cw + \",\" + (this._x1 = x + r * Math.cos(a1)) + \",\" + (this._y1 = y + r * Math.sin(a1));\n }\n },\n rect: function(x, y, w, h) {\n this._ += \"M\" + (this._x0 = this._x1 = +x) + \",\" + (this._y0 = this._y1 = +y) + \"h\" + (+w) + \"v\" + (+h) + \"h\" + (-w) + \"Z\";\n },\n toString: function() {\n return this._;\n }\n};\n\nexport default path;\n","export default function(x) {\n return function constant() {\n return x;\n };\n}\n","export var abs = Math.abs;\nexport var atan2 = Math.atan2;\nexport var cos = Math.cos;\nexport var max = Math.max;\nexport var min = Math.min;\nexport var sin = Math.sin;\nexport var sqrt = Math.sqrt;\n\nexport var epsilon = 1e-12;\nexport var pi = Math.PI;\nexport var halfPi = pi / 2;\nexport var tau = 2 * pi;\n\nexport function acos(x) {\n return x > 1 ? 0 : x < -1 ? pi : Math.acos(x);\n}\n\nexport function asin(x) {\n return x >= 1 ? halfPi : x <= -1 ? -halfPi : Math.asin(x);\n}\n","import {path} from \"d3-path\";\nimport constant from \"./constant\";\nimport {abs, acos, asin, atan2, cos, epsilon, halfPi, max, min, pi, sin, sqrt, tau} from \"./math\";\n\nfunction arcInnerRadius(d) {\n return d.innerRadius;\n}\n\nfunction arcOuterRadius(d) {\n return d.outerRadius;\n}\n\nfunction arcStartAngle(d) {\n return d.startAngle;\n}\n\nfunction arcEndAngle(d) {\n return d.endAngle;\n}\n\nfunction arcPadAngle(d) {\n return d && d.padAngle; // Note: optional!\n}\n\nfunction intersect(x0, y0, x1, y1, x2, y2, x3, y3) {\n var x10 = x1 - x0, y10 = y1 - y0,\n x32 = x3 - x2, y32 = y3 - y2,\n t = y32 * x10 - x32 * y10;\n if (t * t < epsilon) return;\n t = (x32 * (y0 - y2) - y32 * (x0 - x2)) / t;\n return [x0 + t * x10, y0 + t * y10];\n}\n\n// Compute perpendicular offset line of length rc.\n// http://mathworld.wolfram.com/Circle-LineIntersection.html\nfunction cornerTangents(x0, y0, x1, y1, r1, rc, cw) {\n var x01 = x0 - x1,\n y01 = y0 - y1,\n lo = (cw ? rc : -rc) / sqrt(x01 * x01 + y01 * y01),\n ox = lo * y01,\n oy = -lo * x01,\n x11 = x0 + ox,\n y11 = y0 + oy,\n x10 = x1 + ox,\n y10 = y1 + oy,\n x00 = (x11 + x10) / 2,\n y00 = (y11 + y10) / 2,\n dx = x10 - x11,\n dy = y10 - y11,\n d2 = dx * dx + dy * dy,\n r = r1 - rc,\n D = x11 * y10 - x10 * y11,\n d = (dy < 0 ? -1 : 1) * sqrt(max(0, r * r * d2 - D * D)),\n cx0 = (D * dy - dx * d) / d2,\n cy0 = (-D * dx - dy * d) / d2,\n cx1 = (D * dy + dx * d) / d2,\n cy1 = (-D * dx + dy * d) / d2,\n dx0 = cx0 - x00,\n dy0 = cy0 - y00,\n dx1 = cx1 - x00,\n dy1 = cy1 - y00;\n\n // Pick the closer of the two intersection points.\n // TODO Is there a faster way to determine which intersection to use?\n if (dx0 * dx0 + dy0 * dy0 > dx1 * dx1 + dy1 * dy1) cx0 = cx1, cy0 = cy1;\n\n return {\n cx: cx0,\n cy: cy0,\n x01: -ox,\n y01: -oy,\n x11: cx0 * (r1 / r - 1),\n y11: cy0 * (r1 / r - 1)\n };\n}\n\nexport default function() {\n var innerRadius = arcInnerRadius,\n outerRadius = arcOuterRadius,\n cornerRadius = constant(0),\n padRadius = null,\n startAngle = arcStartAngle,\n endAngle = arcEndAngle,\n padAngle = arcPadAngle,\n context = null;\n\n function arc() {\n var buffer,\n r,\n r0 = +innerRadius.apply(this, arguments),\n r1 = +outerRadius.apply(this, arguments),\n a0 = startAngle.apply(this, arguments) - halfPi,\n a1 = endAngle.apply(this, arguments) - halfPi,\n da = abs(a1 - a0),\n cw = a1 > a0;\n\n if (!context) context = buffer = path();\n\n // Ensure that the outer radius is always larger than the inner radius.\n if (r1 < r0) r = r1, r1 = r0, r0 = r;\n\n // Is it a point?\n if (!(r1 > epsilon)) context.moveTo(0, 0);\n\n // Or is it a circle or annulus?\n else if (da > tau - epsilon) {\n context.moveTo(r1 * cos(a0), r1 * sin(a0));\n context.arc(0, 0, r1, a0, a1, !cw);\n if (r0 > epsilon) {\n context.moveTo(r0 * cos(a1), r0 * sin(a1));\n context.arc(0, 0, r0, a1, a0, cw);\n }\n }\n\n // Or is it a circular or annular sector?\n else {\n var a01 = a0,\n a11 = a1,\n a00 = a0,\n a10 = a1,\n da0 = da,\n da1 = da,\n ap = padAngle.apply(this, arguments) / 2,\n rp = (ap > epsilon) && (padRadius ? +padRadius.apply(this, arguments) : sqrt(r0 * r0 + r1 * r1)),\n rc = min(abs(r1 - r0) / 2, +cornerRadius.apply(this, arguments)),\n rc0 = rc,\n rc1 = rc,\n t0,\n t1;\n\n // Apply padding? Note that since r1 ≥ r0, da1 ≥ da0.\n if (rp > epsilon) {\n var p0 = asin(rp / r0 * sin(ap)),\n p1 = asin(rp / r1 * sin(ap));\n if ((da0 -= p0 * 2) > epsilon) p0 *= (cw ? 1 : -1), a00 += p0, a10 -= p0;\n else da0 = 0, a00 = a10 = (a0 + a1) / 2;\n if ((da1 -= p1 * 2) > epsilon) p1 *= (cw ? 1 : -1), a01 += p1, a11 -= p1;\n else da1 = 0, a01 = a11 = (a0 + a1) / 2;\n }\n\n var x01 = r1 * cos(a01),\n y01 = r1 * sin(a01),\n x10 = r0 * cos(a10),\n y10 = r0 * sin(a10);\n\n // Apply rounded corners?\n if (rc > epsilon) {\n var x11 = r1 * cos(a11),\n y11 = r1 * sin(a11),\n x00 = r0 * cos(a00),\n y00 = r0 * sin(a00),\n oc;\n\n // Restrict the corner radius according to the sector angle.\n if (da < pi && (oc = intersect(x01, y01, x00, y00, x11, y11, x10, y10))) {\n var ax = x01 - oc[0],\n ay = y01 - oc[1],\n bx = x11 - oc[0],\n by = y11 - oc[1],\n kc = 1 / sin(acos((ax * bx + ay * by) / (sqrt(ax * ax + ay * ay) * sqrt(bx * bx + by * by))) / 2),\n lc = sqrt(oc[0] * oc[0] + oc[1] * oc[1]);\n rc0 = min(rc, (r0 - lc) / (kc - 1));\n rc1 = min(rc, (r1 - lc) / (kc + 1));\n }\n }\n\n // Is the sector collapsed to a line?\n if (!(da1 > epsilon)) context.moveTo(x01, y01);\n\n // Does the sector’s outer ring have rounded corners?\n else if (rc1 > epsilon) {\n t0 = cornerTangents(x00, y00, x01, y01, r1, rc1, cw);\n t1 = cornerTangents(x11, y11, x10, y10, r1, rc1, cw);\n\n context.moveTo(t0.cx + t0.x01, t0.cy + t0.y01);\n\n // Have the corners merged?\n if (rc1 < rc) context.arc(t0.cx, t0.cy, rc1, atan2(t0.y01, t0.x01), atan2(t1.y01, t1.x01), !cw);\n\n // Otherwise, draw the two corners and the ring.\n else {\n context.arc(t0.cx, t0.cy, rc1, atan2(t0.y01, t0.x01), atan2(t0.y11, t0.x11), !cw);\n context.arc(0, 0, r1, atan2(t0.cy + t0.y11, t0.cx + t0.x11), atan2(t1.cy + t1.y11, t1.cx + t1.x11), !cw);\n context.arc(t1.cx, t1.cy, rc1, atan2(t1.y11, t1.x11), atan2(t1.y01, t1.x01), !cw);\n }\n }\n\n // Or is the outer ring just a circular arc?\n else context.moveTo(x01, y01), context.arc(0, 0, r1, a01, a11, !cw);\n\n // Is there no inner ring, and it’s a circular sector?\n // Or perhaps it’s an annular sector collapsed due to padding?\n if (!(r0 > epsilon) || !(da0 > epsilon)) context.lineTo(x10, y10);\n\n // Does the sector’s inner ring (or point) have rounded corners?\n else if (rc0 > epsilon) {\n t0 = cornerTangents(x10, y10, x11, y11, r0, -rc0, cw);\n t1 = cornerTangents(x01, y01, x00, y00, r0, -rc0, cw);\n\n context.lineTo(t0.cx + t0.x01, t0.cy + t0.y01);\n\n // Have the corners merged?\n if (rc0 < rc) context.arc(t0.cx, t0.cy, rc0, atan2(t0.y01, t0.x01), atan2(t1.y01, t1.x01), !cw);\n\n // Otherwise, draw the two corners and the ring.\n else {\n context.arc(t0.cx, t0.cy, rc0, atan2(t0.y01, t0.x01), atan2(t0.y11, t0.x11), !cw);\n context.arc(0, 0, r0, atan2(t0.cy + t0.y11, t0.cx + t0.x11), atan2(t1.cy + t1.y11, t1.cx + t1.x11), cw);\n context.arc(t1.cx, t1.cy, rc0, atan2(t1.y11, t1.x11), atan2(t1.y01, t1.x01), !cw);\n }\n }\n\n // Or is the inner ring just a circular arc?\n else context.arc(0, 0, r0, a10, a00, cw);\n }\n\n context.closePath();\n\n if (buffer) return context = null, buffer + \"\" || null;\n }\n\n arc.centroid = function() {\n var r = (+innerRadius.apply(this, arguments) + +outerRadius.apply(this, arguments)) / 2,\n a = (+startAngle.apply(this, arguments) + +endAngle.apply(this, arguments)) / 2 - pi / 2;\n return [cos(a) * r, sin(a) * r];\n };\n\n arc.innerRadius = function(_) {\n return arguments.length ? (innerRadius = typeof _ === \"function\" ? _ : constant(+_), arc) : innerRadius;\n };\n\n arc.outerRadius = function(_) {\n return arguments.length ? (outerRadius = typeof _ === \"function\" ? _ : constant(+_), arc) : outerRadius;\n };\n\n arc.cornerRadius = function(_) {\n return arguments.length ? (cornerRadius = typeof _ === \"function\" ? _ : constant(+_), arc) : cornerRadius;\n };\n\n arc.padRadius = function(_) {\n return arguments.length ? (padRadius = _ == null ? null : typeof _ === \"function\" ? _ : constant(+_), arc) : padRadius;\n };\n\n arc.startAngle = function(_) {\n return arguments.length ? (startAngle = typeof _ === \"function\" ? _ : constant(+_), arc) : startAngle;\n };\n\n arc.endAngle = function(_) {\n return arguments.length ? (endAngle = typeof _ === \"function\" ? _ : constant(+_), arc) : endAngle;\n };\n\n arc.padAngle = function(_) {\n return arguments.length ? (padAngle = typeof _ === \"function\" ? _ : constant(+_), arc) : padAngle;\n };\n\n arc.context = function(_) {\n return arguments.length ? ((context = _ == null ? null : _), arc) : context;\n };\n\n return arc;\n}\n","function Linear(context) {\n this._context = context;\n}\n\nLinear.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; // proceed\n default: this._context.lineTo(x, y); break;\n }\n }\n};\n\nexport default function(context) {\n return new Linear(context);\n}\n","export function x(p) {\n return p[0];\n}\n\nexport function y(p) {\n return p[1];\n}\n","import {path} from \"d3-path\";\nimport constant from \"./constant\";\nimport curveLinear from \"./curve/linear\";\nimport {x as pointX, y as pointY} from \"./point\";\n\nexport default function() {\n var x = pointX,\n y = pointY,\n defined = constant(true),\n context = null,\n curve = curveLinear,\n output = null;\n\n function line(data) {\n var i,\n n = data.length,\n d,\n defined0 = false,\n buffer;\n\n if (context == null) output = curve(buffer = path());\n\n for (i = 0; i <= n; ++i) {\n if (!(i < n && defined(d = data[i], i, data)) === defined0) {\n if (defined0 = !defined0) output.lineStart();\n else output.lineEnd();\n }\n if (defined0) output.point(+x(d, i, data), +y(d, i, data));\n }\n\n if (buffer) return output = null, buffer + \"\" || null;\n }\n\n line.x = function(_) {\n return arguments.length ? (x = typeof _ === \"function\" ? _ : constant(+_), line) : x;\n };\n\n line.y = function(_) {\n return arguments.length ? (y = typeof _ === \"function\" ? _ : constant(+_), line) : y;\n };\n\n line.defined = function(_) {\n return arguments.length ? (defined = typeof _ === \"function\" ? _ : constant(!!_), line) : defined;\n };\n\n line.curve = function(_) {\n return arguments.length ? (curve = _, context != null && (output = curve(context)), line) : curve;\n };\n\n line.context = function(_) {\n return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), line) : context;\n };\n\n return line;\n}\n","import {path} from \"d3-path\";\nimport constant from \"./constant\";\nimport curveLinear from \"./curve/linear\";\nimport line from \"./line\";\nimport {x as pointX, y as pointY} from \"./point\";\n\nexport default function() {\n var x0 = pointX,\n x1 = null,\n y0 = constant(0),\n y1 = pointY,\n defined = constant(true),\n context = null,\n curve = curveLinear,\n output = null;\n\n function area(data) {\n var i,\n j,\n k,\n n = data.length,\n d,\n defined0 = false,\n buffer,\n x0z = new Array(n),\n y0z = new Array(n);\n\n if (context == null) output = curve(buffer = path());\n\n for (i = 0; i <= n; ++i) {\n if (!(i < n && defined(d = data[i], i, data)) === defined0) {\n if (defined0 = !defined0) {\n j = i;\n output.areaStart();\n output.lineStart();\n } else {\n output.lineEnd();\n output.lineStart();\n for (k = i - 1; k >= j; --k) {\n output.point(x0z[k], y0z[k]);\n }\n output.lineEnd();\n output.areaEnd();\n }\n }\n if (defined0) {\n x0z[i] = +x0(d, i, data), y0z[i] = +y0(d, i, data);\n output.point(x1 ? +x1(d, i, data) : x0z[i], y1 ? +y1(d, i, data) : y0z[i]);\n }\n }\n\n if (buffer) return output = null, buffer + \"\" || null;\n }\n\n function arealine() {\n return line().defined(defined).curve(curve).context(context);\n }\n\n area.x = function(_) {\n return arguments.length ? (x0 = typeof _ === \"function\" ? _ : constant(+_), x1 = null, area) : x0;\n };\n\n area.x0 = function(_) {\n return arguments.length ? (x0 = typeof _ === \"function\" ? _ : constant(+_), area) : x0;\n };\n\n area.x1 = function(_) {\n return arguments.length ? (x1 = _ == null ? null : typeof _ === \"function\" ? _ : constant(+_), area) : x1;\n };\n\n area.y = function(_) {\n return arguments.length ? (y0 = typeof _ === \"function\" ? _ : constant(+_), y1 = null, area) : y0;\n };\n\n area.y0 = function(_) {\n return arguments.length ? (y0 = typeof _ === \"function\" ? _ : constant(+_), area) : y0;\n };\n\n area.y1 = function(_) {\n return arguments.length ? (y1 = _ == null ? null : typeof _ === \"function\" ? _ : constant(+_), area) : y1;\n };\n\n area.lineX0 =\n area.lineY0 = function() {\n return arealine().x(x0).y(y0);\n };\n\n area.lineY1 = function() {\n return arealine().x(x0).y(y1);\n };\n\n area.lineX1 = function() {\n return arealine().x(x1).y(y0);\n };\n\n area.defined = function(_) {\n return arguments.length ? (defined = typeof _ === \"function\" ? _ : constant(!!_), area) : defined;\n };\n\n area.curve = function(_) {\n return arguments.length ? (curve = _, context != null && (output = curve(context)), area) : curve;\n };\n\n area.context = function(_) {\n return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), area) : context;\n };\n\n return area;\n}\n","export default function(a, b) {\n return b < a ? -1 : b > a ? 1 : b >= a ? 0 : NaN;\n}\n","export default function(d) {\n return d;\n}\n","import curveLinear from \"./linear\";\n\nexport var curveRadialLinear = curveRadial(curveLinear);\n\nfunction Radial(curve) {\n this._curve = curve;\n}\n\nRadial.prototype = {\n areaStart: function() {\n this._curve.areaStart();\n },\n areaEnd: function() {\n this._curve.areaEnd();\n },\n lineStart: function() {\n this._curve.lineStart();\n },\n lineEnd: function() {\n this._curve.lineEnd();\n },\n point: function(a, r) {\n this._curve.point(r * Math.sin(a), r * -Math.cos(a));\n }\n};\n\nexport default function curveRadial(curve) {\n\n function radial(context) {\n return new Radial(curve(context));\n }\n\n radial._curve = curve;\n\n return radial;\n}\n","import curveRadial, {curveRadialLinear} from \"./curve/radial\";\nimport line from \"./line\";\n\nexport function lineRadial(l) {\n var c = l.curve;\n\n l.angle = l.x, delete l.x;\n l.radius = l.y, delete l.y;\n\n l.curve = function(_) {\n return arguments.length ? c(curveRadial(_)) : c()._curve;\n };\n\n return l;\n}\n\nexport default function() {\n return lineRadial(line().curve(curveRadialLinear));\n}\n","export var slice = Array.prototype.slice;\n","import {pi, tau} from \"../math\";\n\nexport default {\n draw: function(context, size) {\n var r = Math.sqrt(size / pi);\n context.moveTo(r, 0);\n context.arc(0, 0, r, 0, tau);\n }\n};\n","export default {\n draw: function(context, size) {\n var r = Math.sqrt(size / 5) / 2;\n context.moveTo(-3 * r, -r);\n context.lineTo(-r, -r);\n context.lineTo(-r, -3 * r);\n context.lineTo(r, -3 * r);\n context.lineTo(r, -r);\n context.lineTo(3 * r, -r);\n context.lineTo(3 * r, r);\n context.lineTo(r, r);\n context.lineTo(r, 3 * r);\n context.lineTo(-r, 3 * r);\n context.lineTo(-r, r);\n context.lineTo(-3 * r, r);\n context.closePath();\n }\n};\n","var tan30 = Math.sqrt(1 / 3),\n tan30_2 = tan30 * 2;\n\nexport default {\n draw: function(context, size) {\n var y = Math.sqrt(size / tan30_2),\n x = y * tan30;\n context.moveTo(0, -y);\n context.lineTo(x, 0);\n context.lineTo(0, y);\n context.lineTo(-x, 0);\n context.closePath();\n }\n};\n","import {pi, tau} from \"../math\";\n\nvar ka = 0.89081309152928522810,\n kr = Math.sin(pi / 10) / Math.sin(7 * pi / 10),\n kx = Math.sin(tau / 10) * kr,\n ky = -Math.cos(tau / 10) * kr;\n\nexport default {\n draw: function(context, size) {\n var r = Math.sqrt(size * ka),\n x = kx * r,\n y = ky * r;\n context.moveTo(0, -r);\n context.lineTo(x, y);\n for (var i = 1; i < 5; ++i) {\n var a = tau * i / 5,\n c = Math.cos(a),\n s = Math.sin(a);\n context.lineTo(s * r, -c * r);\n context.lineTo(c * x - s * y, s * x + c * y);\n }\n context.closePath();\n }\n};\n","export default {\n draw: function(context, size) {\n var w = Math.sqrt(size),\n x = -w / 2;\n context.rect(x, x, w, w);\n }\n};\n","var sqrt3 = Math.sqrt(3);\n\nexport default {\n draw: function(context, size) {\n var y = -Math.sqrt(size / (sqrt3 * 3));\n context.moveTo(0, y * 2);\n context.lineTo(-sqrt3 * y, -y);\n context.lineTo(sqrt3 * y, -y);\n context.closePath();\n }\n};\n","var c = -0.5,\n s = Math.sqrt(3) / 2,\n k = 1 / Math.sqrt(12),\n a = (k / 2 + 1) * 3;\n\nexport default {\n draw: function(context, size) {\n var r = Math.sqrt(size / a),\n x0 = r / 2,\n y0 = r * k,\n x1 = x0,\n y1 = r * k + r,\n x2 = -x1,\n y2 = y1;\n context.moveTo(x0, y0);\n context.lineTo(x1, y1);\n context.lineTo(x2, y2);\n context.lineTo(c * x0 - s * y0, s * x0 + c * y0);\n context.lineTo(c * x1 - s * y1, s * x1 + c * y1);\n context.lineTo(c * x2 - s * y2, s * x2 + c * y2);\n context.lineTo(c * x0 + s * y0, c * y0 - s * x0);\n context.lineTo(c * x1 + s * y1, c * y1 - s * x1);\n context.lineTo(c * x2 + s * y2, c * y2 - s * x2);\n context.closePath();\n }\n};\n","export default function() {}\n","export function point(that, x, y) {\n that._context.bezierCurveTo(\n (2 * that._x0 + that._x1) / 3,\n (2 * that._y0 + that._y1) / 3,\n (that._x0 + 2 * that._x1) / 3,\n (that._y0 + 2 * that._y1) / 3,\n (that._x0 + 4 * that._x1 + x) / 6,\n (that._y0 + 4 * that._y1 + y) / 6\n );\n}\n\nexport function Basis(context) {\n this._context = context;\n}\n\nBasis.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 =\n this._y0 = this._y1 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 3: point(this, this._x1, this._y1); // proceed\n case 2: this._context.lineTo(this._x1, this._y1); break;\n }\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; this._context.lineTo((5 * this._x0 + this._x1) / 6, (5 * this._y0 + this._y1) / 6); // proceed\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = x;\n this._y0 = this._y1, this._y1 = y;\n }\n};\n\nexport default function(context) {\n return new Basis(context);\n}\n","import noop from \"../noop\";\nimport {point} from \"./basis\";\n\nfunction BasisClosed(context) {\n this._context = context;\n}\n\nBasisClosed.prototype = {\n areaStart: noop,\n areaEnd: noop,\n lineStart: function() {\n this._x0 = this._x1 = this._x2 = this._x3 = this._x4 =\n this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 1: {\n this._context.moveTo(this._x2, this._y2);\n this._context.closePath();\n break;\n }\n case 2: {\n this._context.moveTo((this._x2 + 2 * this._x3) / 3, (this._y2 + 2 * this._y3) / 3);\n this._context.lineTo((this._x3 + 2 * this._x2) / 3, (this._y3 + 2 * this._y2) / 3);\n this._context.closePath();\n break;\n }\n case 3: {\n this.point(this._x2, this._y2);\n this.point(this._x3, this._y3);\n this.point(this._x4, this._y4);\n break;\n }\n }\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._x2 = x, this._y2 = y; break;\n case 1: this._point = 2; this._x3 = x, this._y3 = y; break;\n case 2: this._point = 3; this._x4 = x, this._y4 = y; this._context.moveTo((this._x0 + 4 * this._x1 + x) / 6, (this._y0 + 4 * this._y1 + y) / 6); break;\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = x;\n this._y0 = this._y1, this._y1 = y;\n }\n};\n\nexport default function(context) {\n return new BasisClosed(context);\n}\n","import {point} from \"./basis\";\n\nfunction BasisOpen(context) {\n this._context = context;\n}\n\nBasisOpen.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 =\n this._y0 = this._y1 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; var x0 = (this._x0 + 4 * this._x1 + x) / 6, y0 = (this._y0 + 4 * this._y1 + y) / 6; this._line ? this._context.lineTo(x0, y0) : this._context.moveTo(x0, y0); break;\n case 3: this._point = 4; // proceed\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = x;\n this._y0 = this._y1, this._y1 = y;\n }\n};\n\nexport default function(context) {\n return new BasisOpen(context);\n}\n","import {Basis} from \"./basis\";\n\nfunction Bundle(context, beta) {\n this._basis = new Basis(context);\n this._beta = beta;\n}\n\nBundle.prototype = {\n lineStart: function() {\n this._x = [];\n this._y = [];\n this._basis.lineStart();\n },\n lineEnd: function() {\n var x = this._x,\n y = this._y,\n j = x.length - 1;\n\n if (j > 0) {\n var x0 = x[0],\n y0 = y[0],\n dx = x[j] - x0,\n dy = y[j] - y0,\n i = -1,\n t;\n\n while (++i <= j) {\n t = i / j;\n this._basis.point(\n this._beta * x[i] + (1 - this._beta) * (x0 + t * dx),\n this._beta * y[i] + (1 - this._beta) * (y0 + t * dy)\n );\n }\n }\n\n this._x = this._y = null;\n this._basis.lineEnd();\n },\n point: function(x, y) {\n this._x.push(+x);\n this._y.push(+y);\n }\n};\n\nexport default (function custom(beta) {\n\n function bundle(context) {\n return beta === 1 ? new Basis(context) : new Bundle(context, beta);\n }\n\n bundle.beta = function(beta) {\n return custom(+beta);\n };\n\n return bundle;\n})(0.85);\n","export function point(that, x, y) {\n that._context.bezierCurveTo(\n that._x1 + that._k * (that._x2 - that._x0),\n that._y1 + that._k * (that._y2 - that._y0),\n that._x2 + that._k * (that._x1 - x),\n that._y2 + that._k * (that._y1 - y),\n that._x2,\n that._y2\n );\n}\n\nexport function Cardinal(context, tension) {\n this._context = context;\n this._k = (1 - tension) / 6;\n}\n\nCardinal.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 = this._x2 =\n this._y0 = this._y1 = this._y2 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 2: this._context.lineTo(this._x2, this._y2); break;\n case 3: point(this, this._x1, this._y1); break;\n }\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; this._x1 = x, this._y1 = y; break;\n case 2: this._point = 3; // proceed\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(tension) {\n\n function cardinal(context) {\n return new Cardinal(context, tension);\n }\n\n cardinal.tension = function(tension) {\n return custom(+tension);\n };\n\n return cardinal;\n})(0);\n","import noop from \"../noop\";\nimport {point} from \"./cardinal\";\n\nexport function CardinalClosed(context, tension) {\n this._context = context;\n this._k = (1 - tension) / 6;\n}\n\nCardinalClosed.prototype = {\n areaStart: noop,\n areaEnd: noop,\n lineStart: function() {\n this._x0 = this._x1 = this._x2 = this._x3 = this._x4 = this._x5 =\n this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = this._y5 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 1: {\n this._context.moveTo(this._x3, this._y3);\n this._context.closePath();\n break;\n }\n case 2: {\n this._context.lineTo(this._x3, this._y3);\n this._context.closePath();\n break;\n }\n case 3: {\n this.point(this._x3, this._y3);\n this.point(this._x4, this._y4);\n this.point(this._x5, this._y5);\n break;\n }\n }\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._x3 = x, this._y3 = y; break;\n case 1: this._point = 2; this._context.moveTo(this._x4 = x, this._y4 = y); break;\n case 2: this._point = 3; this._x5 = x, this._y5 = y; break;\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(tension) {\n\n function cardinal(context) {\n return new CardinalClosed(context, tension);\n }\n\n cardinal.tension = function(tension) {\n return custom(+tension);\n };\n\n return cardinal;\n})(0);\n","import {point} from \"./cardinal\";\n\nexport function CardinalOpen(context, tension) {\n this._context = context;\n this._k = (1 - tension) / 6;\n}\n\nCardinalOpen.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 = this._x2 =\n this._y0 = this._y1 = this._y2 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; this._line ? this._context.lineTo(this._x2, this._y2) : this._context.moveTo(this._x2, this._y2); break;\n case 3: this._point = 4; // proceed\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(tension) {\n\n function cardinal(context) {\n return new CardinalOpen(context, tension);\n }\n\n cardinal.tension = function(tension) {\n return custom(+tension);\n };\n\n return cardinal;\n})(0);\n","import {epsilon} from \"../math\";\nimport {Cardinal} from \"./cardinal\";\n\nexport function point(that, x, y) {\n var x1 = that._x1,\n y1 = that._y1,\n x2 = that._x2,\n y2 = that._y2;\n\n if (that._l01_a > epsilon) {\n var a = 2 * that._l01_2a + 3 * that._l01_a * that._l12_a + that._l12_2a,\n n = 3 * that._l01_a * (that._l01_a + that._l12_a);\n x1 = (x1 * a - that._x0 * that._l12_2a + that._x2 * that._l01_2a) / n;\n y1 = (y1 * a - that._y0 * that._l12_2a + that._y2 * that._l01_2a) / n;\n }\n\n if (that._l23_a > epsilon) {\n var b = 2 * that._l23_2a + 3 * that._l23_a * that._l12_a + that._l12_2a,\n m = 3 * that._l23_a * (that._l23_a + that._l12_a);\n x2 = (x2 * b + that._x1 * that._l23_2a - x * that._l12_2a) / m;\n y2 = (y2 * b + that._y1 * that._l23_2a - y * that._l12_2a) / m;\n }\n\n that._context.bezierCurveTo(x1, y1, x2, y2, that._x2, that._y2);\n}\n\nfunction CatmullRom(context, alpha) {\n this._context = context;\n this._alpha = alpha;\n}\n\nCatmullRom.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 = this._x2 =\n this._y0 = this._y1 = this._y2 = NaN;\n this._l01_a = this._l12_a = this._l23_a =\n this._l01_2a = this._l12_2a = this._l23_2a =\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 2: this._context.lineTo(this._x2, this._y2); break;\n case 3: this.point(this._x2, this._y2); break;\n }\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n\n if (this._point) {\n var x23 = this._x2 - x,\n y23 = this._y2 - y;\n this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));\n }\n\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; // proceed\n default: point(this, x, y); break;\n }\n\n this._l01_a = this._l12_a, this._l12_a = this._l23_a;\n this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(alpha) {\n\n function catmullRom(context) {\n return alpha ? new CatmullRom(context, alpha) : new Cardinal(context, 0);\n }\n\n catmullRom.alpha = function(alpha) {\n return custom(+alpha);\n };\n\n return catmullRom;\n})(0.5);\n","import {CardinalClosed} from \"./cardinalClosed\";\nimport noop from \"../noop\";\nimport {point} from \"./catmullRom\";\n\nfunction CatmullRomClosed(context, alpha) {\n this._context = context;\n this._alpha = alpha;\n}\n\nCatmullRomClosed.prototype = {\n areaStart: noop,\n areaEnd: noop,\n lineStart: function() {\n this._x0 = this._x1 = this._x2 = this._x3 = this._x4 = this._x5 =\n this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = this._y5 = NaN;\n this._l01_a = this._l12_a = this._l23_a =\n this._l01_2a = this._l12_2a = this._l23_2a =\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 1: {\n this._context.moveTo(this._x3, this._y3);\n this._context.closePath();\n break;\n }\n case 2: {\n this._context.lineTo(this._x3, this._y3);\n this._context.closePath();\n break;\n }\n case 3: {\n this.point(this._x3, this._y3);\n this.point(this._x4, this._y4);\n this.point(this._x5, this._y5);\n break;\n }\n }\n },\n point: function(x, y) {\n x = +x, y = +y;\n\n if (this._point) {\n var x23 = this._x2 - x,\n y23 = this._y2 - y;\n this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));\n }\n\n switch (this._point) {\n case 0: this._point = 1; this._x3 = x, this._y3 = y; break;\n case 1: this._point = 2; this._context.moveTo(this._x4 = x, this._y4 = y); break;\n case 2: this._point = 3; this._x5 = x, this._y5 = y; break;\n default: point(this, x, y); break;\n }\n\n this._l01_a = this._l12_a, this._l12_a = this._l23_a;\n this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(alpha) {\n\n function catmullRom(context) {\n return alpha ? new CatmullRomClosed(context, alpha) : new CardinalClosed(context, 0);\n }\n\n catmullRom.alpha = function(alpha) {\n return custom(+alpha);\n };\n\n return catmullRom;\n})(0.5);\n","import {CardinalOpen} from \"./cardinalOpen\";\nimport {point} from \"./catmullRom\";\n\nfunction CatmullRomOpen(context, alpha) {\n this._context = context;\n this._alpha = alpha;\n}\n\nCatmullRomOpen.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 = this._x2 =\n this._y0 = this._y1 = this._y2 = NaN;\n this._l01_a = this._l12_a = this._l23_a =\n this._l01_2a = this._l12_2a = this._l23_2a =\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n\n if (this._point) {\n var x23 = this._x2 - x,\n y23 = this._y2 - y;\n this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));\n }\n\n switch (this._point) {\n case 0: this._point = 1; break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; this._line ? this._context.lineTo(this._x2, this._y2) : this._context.moveTo(this._x2, this._y2); break;\n case 3: this._point = 4; // proceed\n default: point(this, x, y); break;\n }\n\n this._l01_a = this._l12_a, this._l12_a = this._l23_a;\n this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(alpha) {\n\n function catmullRom(context) {\n return alpha ? new CatmullRomOpen(context, alpha) : new CardinalOpen(context, 0);\n }\n\n catmullRom.alpha = function(alpha) {\n return custom(+alpha);\n };\n\n return catmullRom;\n})(0.5);\n","import noop from \"../noop\";\n\nfunction LinearClosed(context) {\n this._context = context;\n}\n\nLinearClosed.prototype = {\n areaStart: noop,\n areaEnd: noop,\n lineStart: function() {\n this._point = 0;\n },\n lineEnd: function() {\n if (this._point) this._context.closePath();\n },\n point: function(x, y) {\n x = +x, y = +y;\n if (this._point) this._context.lineTo(x, y);\n else this._point = 1, this._context.moveTo(x, y);\n }\n};\n\nexport default function(context) {\n return new LinearClosed(context);\n}\n","function sign(x) {\n return x < 0 ? -1 : 1;\n}\n\n// Calculate the slopes of the tangents (Hermite-type interpolation) based on\n// the following paper: Steffen, M. 1990. A Simple Method for Monotonic\n// Interpolation in One Dimension. Astronomy and Astrophysics, Vol. 239, NO.\n// NOV(II), P. 443, 1990.\nfunction slope3(that, x2, y2) {\n var h0 = that._x1 - that._x0,\n h1 = x2 - that._x1,\n s0 = (that._y1 - that._y0) / (h0 || h1 < 0 && -0),\n s1 = (y2 - that._y1) / (h1 || h0 < 0 && -0),\n p = (s0 * h1 + s1 * h0) / (h0 + h1);\n return (sign(s0) + sign(s1)) * Math.min(Math.abs(s0), Math.abs(s1), 0.5 * Math.abs(p)) || 0;\n}\n\n// Calculate a one-sided slope.\nfunction slope2(that, t) {\n var h = that._x1 - that._x0;\n return h ? (3 * (that._y1 - that._y0) / h - t) / 2 : t;\n}\n\n// According to https://en.wikipedia.org/wiki/Cubic_Hermite_spline#Representations\n// \"you can express cubic Hermite interpolation in terms of cubic Bézier curves\n// with respect to the four values p0, p0 + m0 / 3, p1 - m1 / 3, p1\".\nfunction point(that, t0, t1) {\n var x0 = that._x0,\n y0 = that._y0,\n x1 = that._x1,\n y1 = that._y1,\n dx = (x1 - x0) / 3;\n that._context.bezierCurveTo(x0 + dx, y0 + dx * t0, x1 - dx, y1 - dx * t1, x1, y1);\n}\n\nfunction MonotoneX(context) {\n this._context = context;\n}\n\nMonotoneX.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 =\n this._y0 = this._y1 =\n this._t0 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 2: this._context.lineTo(this._x1, this._y1); break;\n case 3: point(this, this._t0, slope2(this, this._t0)); break;\n }\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n var t1 = NaN;\n\n x = +x, y = +y;\n if (x === this._x1 && y === this._y1) return; // Ignore coincident points.\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; point(this, slope2(this, t1 = slope3(this, x, y)), t1); break;\n default: point(this, this._t0, t1 = slope3(this, x, y)); break;\n }\n\n this._x0 = this._x1, this._x1 = x;\n this._y0 = this._y1, this._y1 = y;\n this._t0 = t1;\n }\n}\n\nfunction MonotoneY(context) {\n this._context = new ReflectContext(context);\n}\n\n(MonotoneY.prototype = Object.create(MonotoneX.prototype)).point = function(x, y) {\n MonotoneX.prototype.point.call(this, y, x);\n};\n\nfunction ReflectContext(context) {\n this._context = context;\n}\n\nReflectContext.prototype = {\n moveTo: function(x, y) { this._context.moveTo(y, x); },\n closePath: function() { this._context.closePath(); },\n lineTo: function(x, y) { this._context.lineTo(y, x); },\n bezierCurveTo: function(x1, y1, x2, y2, x, y) { this._context.bezierCurveTo(y1, x1, y2, x2, y, x); }\n};\n\nexport function monotoneX(context) {\n return new MonotoneX(context);\n}\n\nexport function monotoneY(context) {\n return new MonotoneY(context);\n}\n","function Natural(context) {\n this._context = context;\n}\n\nNatural.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x = [];\n this._y = [];\n },\n lineEnd: function() {\n var x = this._x,\n y = this._y,\n n = x.length;\n\n if (n) {\n this._line ? this._context.lineTo(x[0], y[0]) : this._context.moveTo(x[0], y[0]);\n if (n === 2) {\n this._context.lineTo(x[1], y[1]);\n } else {\n var px = controlPoints(x),\n py = controlPoints(y);\n for (var i0 = 0, i1 = 1; i1 < n; ++i0, ++i1) {\n this._context.bezierCurveTo(px[0][i0], py[0][i0], px[1][i0], py[1][i0], x[i1], y[i1]);\n }\n }\n }\n\n if (this._line || (this._line !== 0 && n === 1)) this._context.closePath();\n this._line = 1 - this._line;\n this._x = this._y = null;\n },\n point: function(x, y) {\n this._x.push(+x);\n this._y.push(+y);\n }\n};\n\n// See https://www.particleincell.com/2012/bezier-splines/ for derivation.\nfunction controlPoints(x) {\n var i,\n n = x.length - 1,\n m,\n a = new Array(n),\n b = new Array(n),\n r = new Array(n);\n a[0] = 0, b[0] = 2, r[0] = x[0] + 2 * x[1];\n for (i = 1; i < n - 1; ++i) a[i] = 1, b[i] = 4, r[i] = 4 * x[i] + 2 * x[i + 1];\n a[n - 1] = 2, b[n - 1] = 7, r[n - 1] = 8 * x[n - 1] + x[n];\n for (i = 1; i < n; ++i) m = a[i] / b[i - 1], b[i] -= m, r[i] -= m * r[i - 1];\n a[n - 1] = r[n - 1] / b[n - 1];\n for (i = n - 2; i >= 0; --i) a[i] = (r[i] - a[i + 1]) / b[i];\n b[n - 1] = (x[n] + a[n - 1]) / 2;\n for (i = 0; i < n - 1; ++i) b[i] = 2 * x[i + 1] - a[i + 1];\n return [a, b];\n}\n\nexport default function(context) {\n return new Natural(context);\n}\n","function Step(context, t) {\n this._context = context;\n this._t = t;\n}\n\nStep.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x = this._y = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n if (0 < this._t && this._t < 1 && this._point === 2) this._context.lineTo(this._x, this._y);\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n if (this._line >= 0) this._t = 1 - this._t, this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; // proceed\n default: {\n if (this._t <= 0) {\n this._context.lineTo(this._x, y);\n this._context.lineTo(x, y);\n } else {\n var x1 = this._x * (1 - this._t) + x * this._t;\n this._context.lineTo(x1, this._y);\n this._context.lineTo(x1, y);\n }\n break;\n }\n }\n this._x = x, this._y = y;\n }\n};\n\nexport default function(context) {\n return new Step(context, 0.5);\n}\n\nexport function stepBefore(context) {\n return new Step(context, 0);\n}\n\nexport function stepAfter(context) {\n return new Step(context, 1);\n}\n","export default function(series, order) {\n if (!((n = series.length) > 1)) return;\n for (var i = 1, j, s0, s1 = series[order[0]], n, m = s1.length; i < n; ++i) {\n s0 = s1, s1 = series[order[i]];\n for (j = 0; j < m; ++j) {\n s1[j][1] += s1[j][0] = isNaN(s0[j][1]) ? s0[j][0] : s0[j][1];\n }\n }\n}\n","export default function(series) {\n var n = series.length, o = new Array(n);\n while (--n >= 0) o[n] = n;\n return o;\n}\n","import {slice} from \"./array\";\nimport constant from \"./constant\";\nimport offsetNone from \"./offset/none\";\nimport orderNone from \"./order/none\";\n\nfunction stackValue(d, key) {\n return d[key];\n}\n\nexport default function() {\n var keys = constant([]),\n order = orderNone,\n offset = offsetNone,\n value = stackValue;\n\n function stack(data) {\n var kz = keys.apply(this, arguments),\n i,\n m = data.length,\n n = kz.length,\n sz = new Array(n),\n oz;\n\n for (i = 0; i < n; ++i) {\n for (var ki = kz[i], si = sz[i] = new Array(m), j = 0, sij; j < m; ++j) {\n si[j] = sij = [0, +value(data[j], ki, j, data)];\n sij.data = data[j];\n }\n si.key = ki;\n }\n\n for (i = 0, oz = order(sz); i < n; ++i) {\n sz[oz[i]].index = i;\n }\n\n offset(sz, oz);\n return sz;\n }\n\n stack.keys = function(_) {\n return arguments.length ? (keys = typeof _ === \"function\" ? _ : constant(slice.call(_)), stack) : keys;\n };\n\n stack.value = function(_) {\n return arguments.length ? (value = typeof _ === \"function\" ? _ : constant(+_), stack) : value;\n };\n\n stack.order = function(_) {\n return arguments.length ? (order = _ == null ? orderNone : typeof _ === \"function\" ? _ : constant(slice.call(_)), stack) : order;\n };\n\n stack.offset = function(_) {\n return arguments.length ? (offset = _ == null ? offsetNone : _, stack) : offset;\n };\n\n return stack;\n}\n","import none from \"./none\";\n\nexport default function(series) {\n var sums = series.map(sum);\n return none(series).sort(function(a, b) { return sums[a] - sums[b]; });\n}\n\nexport function sum(series) {\n var s = 0, i = -1, n = series.length, v;\n while (++i < n) if (v = +series[i][1]) s += v;\n return s;\n}\n","export function cubicIn(t) {\n return t * t * t;\n}\n\nexport function cubicOut(t) {\n return --t * t * t + 1;\n}\n\nexport function cubicInOut(t) {\n return ((t *= 2) <= 1 ? t * t * t : (t -= 2) * t * t + 2) / 2;\n}\n","var exponent = 3;\n\nexport var polyIn = (function custom(e) {\n e = +e;\n\n function polyIn(t) {\n return Math.pow(t, e);\n }\n\n polyIn.exponent = custom;\n\n return polyIn;\n})(exponent);\n\nexport var polyOut = (function custom(e) {\n e = +e;\n\n function polyOut(t) {\n return 1 - Math.pow(1 - t, e);\n }\n\n polyOut.exponent = custom;\n\n return polyOut;\n})(exponent);\n\nexport var polyInOut = (function custom(e) {\n e = +e;\n\n function polyInOut(t) {\n return ((t *= 2) <= 1 ? Math.pow(t, e) : 2 - Math.pow(2 - t, e)) / 2;\n }\n\n polyInOut.exponent = custom;\n\n return polyInOut;\n})(exponent);\n","var pi = Math.PI,\n halfPi = pi / 2;\n\nexport function sinIn(t) {\n return 1 - Math.cos(t * halfPi);\n}\n\nexport function sinOut(t) {\n return Math.sin(t * halfPi);\n}\n\nexport function sinInOut(t) {\n return (1 - Math.cos(pi * t)) / 2;\n}\n","var b1 = 4 / 11,\n b2 = 6 / 11,\n b3 = 8 / 11,\n b4 = 3 / 4,\n b5 = 9 / 11,\n b6 = 10 / 11,\n b7 = 15 / 16,\n b8 = 21 / 22,\n b9 = 63 / 64,\n b0 = 1 / b1 / b1;\n\nexport function bounceIn(t) {\n return 1 - bounceOut(1 - t);\n}\n\nexport function bounceOut(t) {\n return (t = +t) < b1 ? b0 * t * t : t < b3 ? b0 * (t -= b2) * t + b4 : t < b6 ? b0 * (t -= b5) * t + b7 : b0 * (t -= b8) * t + b9;\n}\n\nexport function bounceInOut(t) {\n return ((t *= 2) <= 1 ? 1 - bounceOut(1 - t) : bounceOut(t - 1) + 1) / 2;\n}\n","var overshoot = 1.70158;\n\nexport var backIn = (function custom(s) {\n s = +s;\n\n function backIn(t) {\n return t * t * ((s + 1) * t - s);\n }\n\n backIn.overshoot = custom;\n\n return backIn;\n})(overshoot);\n\nexport var backOut = (function custom(s) {\n s = +s;\n\n function backOut(t) {\n return --t * t * ((s + 1) * t + s) + 1;\n }\n\n backOut.overshoot = custom;\n\n return backOut;\n})(overshoot);\n\nexport var backInOut = (function custom(s) {\n s = +s;\n\n function backInOut(t) {\n return ((t *= 2) < 1 ? t * t * ((s + 1) * t - s) : (t -= 2) * t * ((s + 1) * t + s) + 2) / 2;\n }\n\n backInOut.overshoot = custom;\n\n return backInOut;\n})(overshoot);\n","var tau = 2 * Math.PI,\n amplitude = 1,\n period = 0.3;\n\nexport var elasticIn = (function custom(a, p) {\n var s = Math.asin(1 / (a = Math.max(1, a))) * (p /= tau);\n\n function elasticIn(t) {\n return a * Math.pow(2, 10 * --t) * Math.sin((s - t) / p);\n }\n\n elasticIn.amplitude = function(a) { return custom(a, p * tau); };\n elasticIn.period = function(p) { return custom(a, p); };\n\n return elasticIn;\n})(amplitude, period);\n\nexport var elasticOut = (function custom(a, p) {\n var s = Math.asin(1 / (a = Math.max(1, a))) * (p /= tau);\n\n function elasticOut(t) {\n return 1 - a * Math.pow(2, -10 * (t = +t)) * Math.sin((t + s) / p);\n }\n\n elasticOut.amplitude = function(a) { return custom(a, p * tau); };\n elasticOut.period = function(p) { return custom(a, p); };\n\n return elasticOut;\n})(amplitude, period);\n\nexport var elasticInOut = (function custom(a, p) {\n var s = Math.asin(1 / (a = Math.max(1, a))) * (p /= tau);\n\n function elasticInOut(t) {\n return ((t = t * 2 - 1) < 0\n ? a * Math.pow(2, 10 * t) * Math.sin((s - t) / p)\n : 2 - a * Math.pow(2, -10 * t) * Math.sin((s + t) / p)) / 2;\n }\n\n elasticInOut.amplitude = function(a) { return custom(a, p * tau); };\n elasticInOut.period = function(p) { return custom(a, p); };\n\n return elasticInOut;\n})(amplitude, period);\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","export function x(d) {\n return d[0];\n}\n\nexport function y(d) {\n return d[1];\n}\n","function RedBlackTree() {\n this._ = null; // root node\n}\n\nexport function RedBlackNode(node) {\n node.U = // parent node\n node.C = // color - true for red, false for black\n node.L = // left node\n node.R = // right node\n node.P = // previous node\n node.N = null; // next node\n}\n\nRedBlackTree.prototype = {\n constructor: RedBlackTree,\n\n insert: function(after, node) {\n var parent, grandpa, uncle;\n\n if (after) {\n node.P = after;\n node.N = after.N;\n if (after.N) after.N.P = node;\n after.N = node;\n if (after.R) {\n after = after.R;\n while (after.L) after = after.L;\n after.L = node;\n } else {\n after.R = node;\n }\n parent = after;\n } else if (this._) {\n after = RedBlackFirst(this._);\n node.P = null;\n node.N = after;\n after.P = after.L = node;\n parent = after;\n } else {\n node.P = node.N = null;\n this._ = node;\n parent = null;\n }\n node.L = node.R = null;\n node.U = parent;\n node.C = true;\n\n after = node;\n while (parent && parent.C) {\n grandpa = parent.U;\n if (parent === grandpa.L) {\n uncle = grandpa.R;\n if (uncle && uncle.C) {\n parent.C = uncle.C = false;\n grandpa.C = true;\n after = grandpa;\n } else {\n if (after === parent.R) {\n RedBlackRotateLeft(this, parent);\n after = parent;\n parent = after.U;\n }\n parent.C = false;\n grandpa.C = true;\n RedBlackRotateRight(this, grandpa);\n }\n } else {\n uncle = grandpa.L;\n if (uncle && uncle.C) {\n parent.C = uncle.C = false;\n grandpa.C = true;\n after = grandpa;\n } else {\n if (after === parent.L) {\n RedBlackRotateRight(this, parent);\n after = parent;\n parent = after.U;\n }\n parent.C = false;\n grandpa.C = true;\n RedBlackRotateLeft(this, grandpa);\n }\n }\n parent = after.U;\n }\n this._.C = false;\n },\n\n remove: function(node) {\n if (node.N) node.N.P = node.P;\n if (node.P) node.P.N = node.N;\n node.N = node.P = null;\n\n var parent = node.U,\n sibling,\n left = node.L,\n right = node.R,\n next,\n red;\n\n if (!left) next = right;\n else if (!right) next = left;\n else next = RedBlackFirst(right);\n\n if (parent) {\n if (parent.L === node) parent.L = next;\n else parent.R = next;\n } else {\n this._ = next;\n }\n\n if (left && right) {\n red = next.C;\n next.C = node.C;\n next.L = left;\n left.U = next;\n if (next !== right) {\n parent = next.U;\n next.U = node.U;\n node = next.R;\n parent.L = node;\n next.R = right;\n right.U = next;\n } else {\n next.U = parent;\n parent = next;\n node = next.R;\n }\n } else {\n red = node.C;\n node = next;\n }\n\n if (node) node.U = parent;\n if (red) return;\n if (node && node.C) { node.C = false; return; }\n\n do {\n if (node === this._) break;\n if (node === parent.L) {\n sibling = parent.R;\n if (sibling.C) {\n sibling.C = false;\n parent.C = true;\n RedBlackRotateLeft(this, parent);\n sibling = parent.R;\n }\n if ((sibling.L && sibling.L.C)\n || (sibling.R && sibling.R.C)) {\n if (!sibling.R || !sibling.R.C) {\n sibling.L.C = false;\n sibling.C = true;\n RedBlackRotateRight(this, sibling);\n sibling = parent.R;\n }\n sibling.C = parent.C;\n parent.C = sibling.R.C = false;\n RedBlackRotateLeft(this, parent);\n node = this._;\n break;\n }\n } else {\n sibling = parent.L;\n if (sibling.C) {\n sibling.C = false;\n parent.C = true;\n RedBlackRotateRight(this, parent);\n sibling = parent.L;\n }\n if ((sibling.L && sibling.L.C)\n || (sibling.R && sibling.R.C)) {\n if (!sibling.L || !sibling.L.C) {\n sibling.R.C = false;\n sibling.C = true;\n RedBlackRotateLeft(this, sibling);\n sibling = parent.L;\n }\n sibling.C = parent.C;\n parent.C = sibling.L.C = false;\n RedBlackRotateRight(this, parent);\n node = this._;\n break;\n }\n }\n sibling.C = true;\n node = parent;\n parent = parent.U;\n } while (!node.C);\n\n if (node) node.C = false;\n }\n};\n\nfunction RedBlackRotateLeft(tree, node) {\n var p = node,\n q = node.R,\n parent = p.U;\n\n if (parent) {\n if (parent.L === p) parent.L = q;\n else parent.R = q;\n } else {\n tree._ = q;\n }\n\n q.U = parent;\n p.U = q;\n p.R = q.L;\n if (p.R) p.R.U = p;\n q.L = p;\n}\n\nfunction RedBlackRotateRight(tree, node) {\n var p = node,\n q = node.L,\n parent = p.U;\n\n if (parent) {\n if (parent.L === p) parent.L = q;\n else parent.R = q;\n } else {\n tree._ = q;\n }\n\n q.U = parent;\n p.U = q;\n p.L = q.R;\n if (p.L) p.L.U = p;\n q.R = p;\n}\n\nfunction RedBlackFirst(node) {\n while (node.L) node = node.L;\n return node;\n}\n\nexport default RedBlackTree;\n","import {cells, edges, epsilon} from \"./Diagram\";\n\nexport function createEdge(left, right, v0, v1) {\n var edge = [null, null],\n index = edges.push(edge) - 1;\n edge.left = left;\n edge.right = right;\n if (v0) setEdgeEnd(edge, left, right, v0);\n if (v1) setEdgeEnd(edge, right, left, v1);\n cells[left.index].halfedges.push(index);\n cells[right.index].halfedges.push(index);\n return edge;\n}\n\nexport function createBorderEdge(left, v0, v1) {\n var edge = [v0, v1];\n edge.left = left;\n return edge;\n}\n\nexport function setEdgeEnd(edge, left, right, vertex) {\n if (!edge[0] && !edge[1]) {\n edge[0] = vertex;\n edge.left = left;\n edge.right = right;\n } else if (edge.left === right) {\n edge[1] = vertex;\n } else {\n edge[0] = vertex;\n }\n}\n\n// Liang–Barsky line clipping.\nfunction clipEdge(edge, x0, y0, x1, y1) {\n var a = edge[0],\n b = edge[1],\n ax = a[0],\n ay = a[1],\n bx = b[0],\n by = b[1],\n t0 = 0,\n t1 = 1,\n dx = bx - ax,\n dy = by - ay,\n r;\n\n r = x0 - ax;\n if (!dx && r > 0) return;\n r /= dx;\n if (dx < 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n } else if (dx > 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n }\n\n r = x1 - ax;\n if (!dx && r < 0) return;\n r /= dx;\n if (dx < 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n } else if (dx > 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n }\n\n r = y0 - ay;\n if (!dy && r > 0) return;\n r /= dy;\n if (dy < 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n } else if (dy > 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n }\n\n r = y1 - ay;\n if (!dy && r < 0) return;\n r /= dy;\n if (dy < 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n } else if (dy > 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n }\n\n if (!(t0 > 0) && !(t1 < 1)) return true; // TODO Better check?\n\n if (t0 > 0) edge[0] = [ax + t0 * dx, ay + t0 * dy];\n if (t1 < 1) edge[1] = [ax + t1 * dx, ay + t1 * dy];\n return true;\n}\n\nfunction connectEdge(edge, x0, y0, x1, y1) {\n var v1 = edge[1];\n if (v1) return true;\n\n var v0 = edge[0],\n left = edge.left,\n right = edge.right,\n lx = left[0],\n ly = left[1],\n rx = right[0],\n ry = right[1],\n fx = (lx + rx) / 2,\n fy = (ly + ry) / 2,\n fm,\n fb;\n\n if (ry === ly) {\n if (fx < x0 || fx >= x1) return;\n if (lx > rx) {\n if (!v0) v0 = [fx, y0];\n else if (v0[1] >= y1) return;\n v1 = [fx, y1];\n } else {\n if (!v0) v0 = [fx, y1];\n else if (v0[1] < y0) return;\n v1 = [fx, y0];\n }\n } else {\n fm = (lx - rx) / (ry - ly);\n fb = fy - fm * fx;\n if (fm < -1 || fm > 1) {\n if (lx > rx) {\n if (!v0) v0 = [(y0 - fb) / fm, y0];\n else if (v0[1] >= y1) return;\n v1 = [(y1 - fb) / fm, y1];\n } else {\n if (!v0) v0 = [(y1 - fb) / fm, y1];\n else if (v0[1] < y0) return;\n v1 = [(y0 - fb) / fm, y0];\n }\n } else {\n if (ly < ry) {\n if (!v0) v0 = [x0, fm * x0 + fb];\n else if (v0[0] >= x1) return;\n v1 = [x1, fm * x1 + fb];\n } else {\n if (!v0) v0 = [x1, fm * x1 + fb];\n else if (v0[0] < x0) return;\n v1 = [x0, fm * x0 + fb];\n }\n }\n }\n\n edge[0] = v0;\n edge[1] = v1;\n return true;\n}\n\nexport function clipEdges(x0, y0, x1, y1) {\n var i = edges.length,\n edge;\n\n while (i--) {\n if (!connectEdge(edge = edges[i], x0, y0, x1, y1)\n || !clipEdge(edge, x0, y0, x1, y1)\n || !(Math.abs(edge[0][0] - edge[1][0]) > epsilon\n || Math.abs(edge[0][1] - edge[1][1]) > epsilon)) {\n delete edges[i];\n }\n }\n}\n","import {createBorderEdge} from \"./Edge\";\nimport {cells, edges, epsilon} from \"./Diagram\";\n\nexport function createCell(site) {\n return cells[site.index] = {\n site: site,\n halfedges: []\n };\n}\n\nfunction cellHalfedgeAngle(cell, edge) {\n var site = cell.site,\n va = edge.left,\n vb = edge.right;\n if (site === vb) vb = va, va = site;\n if (vb) return Math.atan2(vb[1] - va[1], vb[0] - va[0]);\n if (site === va) va = edge[1], vb = edge[0];\n else va = edge[0], vb = edge[1];\n return Math.atan2(va[0] - vb[0], vb[1] - va[1]);\n}\n\nexport function cellHalfedgeStart(cell, edge) {\n return edge[+(edge.left !== cell.site)];\n}\n\nexport function cellHalfedgeEnd(cell, edge) {\n return edge[+(edge.left === cell.site)];\n}\n\nexport function sortCellHalfedges() {\n for (var i = 0, n = cells.length, cell, halfedges, j, m; i < n; ++i) {\n if ((cell = cells[i]) && (m = (halfedges = cell.halfedges).length)) {\n var index = new Array(m),\n array = new Array(m);\n for (j = 0; j < m; ++j) index[j] = j, array[j] = cellHalfedgeAngle(cell, edges[halfedges[j]]);\n index.sort(function(i, j) { return array[j] - array[i]; });\n for (j = 0; j < m; ++j) array[j] = halfedges[index[j]];\n for (j = 0; j < m; ++j) halfedges[j] = array[j];\n }\n }\n}\n\nexport function clipCells(x0, y0, x1, y1) {\n var nCells = cells.length,\n iCell,\n cell,\n site,\n iHalfedge,\n halfedges,\n nHalfedges,\n start,\n startX,\n startY,\n end,\n endX,\n endY,\n cover = true;\n\n for (iCell = 0; iCell < nCells; ++iCell) {\n if (cell = cells[iCell]) {\n site = cell.site;\n halfedges = cell.halfedges;\n iHalfedge = halfedges.length;\n\n // Remove any dangling clipped edges.\n while (iHalfedge--) {\n if (!edges[halfedges[iHalfedge]]) {\n halfedges.splice(iHalfedge, 1);\n }\n }\n\n // Insert any border edges as necessary.\n iHalfedge = 0, nHalfedges = halfedges.length;\n while (iHalfedge < nHalfedges) {\n end = cellHalfedgeEnd(cell, edges[halfedges[iHalfedge]]), endX = end[0], endY = end[1];\n start = cellHalfedgeStart(cell, edges[halfedges[++iHalfedge % nHalfedges]]), startX = start[0], startY = start[1];\n if (Math.abs(endX - startX) > epsilon || Math.abs(endY - startY) > epsilon) {\n halfedges.splice(iHalfedge, 0, edges.push(createBorderEdge(site, end,\n Math.abs(endX - x0) < epsilon && y1 - endY > epsilon ? [x0, Math.abs(startX - x0) < epsilon ? startY : y1]\n : Math.abs(endY - y1) < epsilon && x1 - endX > epsilon ? [Math.abs(startY - y1) < epsilon ? startX : x1, y1]\n : Math.abs(endX - x1) < epsilon && endY - y0 > epsilon ? [x1, Math.abs(startX - x1) < epsilon ? startY : y0]\n : Math.abs(endY - y0) < epsilon && endX - x0 > epsilon ? [Math.abs(startY - y0) < epsilon ? startX : x0, y0]\n : null)) - 1);\n ++nHalfedges;\n }\n }\n\n if (nHalfedges) cover = false;\n }\n }\n\n // If there weren’t any edges, have the closest site cover the extent.\n // It doesn’t matter which corner of the extent we measure!\n if (cover) {\n var dx, dy, d2, dc = Infinity;\n\n for (iCell = 0, cover = null; iCell < nCells; ++iCell) {\n if (cell = cells[iCell]) {\n site = cell.site;\n dx = site[0] - x0;\n dy = site[1] - y0;\n d2 = dx * dx + dy * dy;\n if (d2 < dc) dc = d2, cover = cell;\n }\n }\n\n if (cover) {\n var v00 = [x0, y0], v01 = [x0, y1], v11 = [x1, y1], v10 = [x1, y0];\n cover.halfedges.push(\n edges.push(createBorderEdge(site = cover.site, v00, v01)) - 1,\n edges.push(createBorderEdge(site, v01, v11)) - 1,\n edges.push(createBorderEdge(site, v11, v10)) - 1,\n edges.push(createBorderEdge(site, v10, v00)) - 1\n );\n }\n }\n\n // Lastly delete any cells with no edges; these were entirely clipped.\n for (iCell = 0; iCell < nCells; ++iCell) {\n if (cell = cells[iCell]) {\n if (!cell.halfedges.length) {\n delete cells[iCell];\n }\n }\n }\n}\n","import {RedBlackNode} from \"./RedBlackTree\";\nimport {circles, epsilon2} from \"./Diagram\";\n\nvar circlePool = [];\n\nexport var firstCircle;\n\nfunction Circle() {\n RedBlackNode(this);\n this.x =\n this.y =\n this.arc =\n this.site =\n this.cy = null;\n}\n\nexport function attachCircle(arc) {\n var lArc = arc.P,\n rArc = arc.N;\n\n if (!lArc || !rArc) return;\n\n var lSite = lArc.site,\n cSite = arc.site,\n rSite = rArc.site;\n\n if (lSite === rSite) return;\n\n var bx = cSite[0],\n by = cSite[1],\n ax = lSite[0] - bx,\n ay = lSite[1] - by,\n cx = rSite[0] - bx,\n cy = rSite[1] - by;\n\n var d = 2 * (ax * cy - ay * cx);\n if (d >= -epsilon2) return;\n\n var ha = ax * ax + ay * ay,\n hc = cx * cx + cy * cy,\n x = (cy * ha - ay * hc) / d,\n y = (ax * hc - cx * ha) / d;\n\n var circle = circlePool.pop() || new Circle;\n circle.arc = arc;\n circle.site = cSite;\n circle.x = x + bx;\n circle.y = (circle.cy = y + by) + Math.sqrt(x * x + y * y); // y bottom\n\n arc.circle = circle;\n\n var before = null,\n node = circles._;\n\n while (node) {\n if (circle.y < node.y || (circle.y === node.y && circle.x <= node.x)) {\n if (node.L) node = node.L;\n else { before = node.P; break; }\n } else {\n if (node.R) node = node.R;\n else { before = node; break; }\n }\n }\n\n circles.insert(before, circle);\n if (!before) firstCircle = circle;\n}\n\nexport function detachCircle(arc) {\n var circle = arc.circle;\n if (circle) {\n if (!circle.P) firstCircle = circle.N;\n circles.remove(circle);\n circlePool.push(circle);\n RedBlackNode(circle);\n arc.circle = null;\n }\n}\n","import {RedBlackNode} from \"./RedBlackTree\";\nimport {createCell} from \"./Cell\";\nimport {attachCircle, detachCircle} from \"./Circle\";\nimport {createEdge, setEdgeEnd} from \"./Edge\";\nimport {beaches, epsilon} from \"./Diagram\";\n\nvar beachPool = [];\n\nfunction Beach() {\n RedBlackNode(this);\n this.edge =\n this.site =\n this.circle = null;\n}\n\nfunction createBeach(site) {\n var beach = beachPool.pop() || new Beach;\n beach.site = site;\n return beach;\n}\n\nfunction detachBeach(beach) {\n detachCircle(beach);\n beaches.remove(beach);\n beachPool.push(beach);\n RedBlackNode(beach);\n}\n\nexport function removeBeach(beach) {\n var circle = beach.circle,\n x = circle.x,\n y = circle.cy,\n vertex = [x, y],\n previous = beach.P,\n next = beach.N,\n disappearing = [beach];\n\n detachBeach(beach);\n\n var lArc = previous;\n while (lArc.circle\n && Math.abs(x - lArc.circle.x) < epsilon\n && Math.abs(y - lArc.circle.cy) < epsilon) {\n previous = lArc.P;\n disappearing.unshift(lArc);\n detachBeach(lArc);\n lArc = previous;\n }\n\n disappearing.unshift(lArc);\n detachCircle(lArc);\n\n var rArc = next;\n while (rArc.circle\n && Math.abs(x - rArc.circle.x) < epsilon\n && Math.abs(y - rArc.circle.cy) < epsilon) {\n next = rArc.N;\n disappearing.push(rArc);\n detachBeach(rArc);\n rArc = next;\n }\n\n disappearing.push(rArc);\n detachCircle(rArc);\n\n var nArcs = disappearing.length,\n iArc;\n for (iArc = 1; iArc < nArcs; ++iArc) {\n rArc = disappearing[iArc];\n lArc = disappearing[iArc - 1];\n setEdgeEnd(rArc.edge, lArc.site, rArc.site, vertex);\n }\n\n lArc = disappearing[0];\n rArc = disappearing[nArcs - 1];\n rArc.edge = createEdge(lArc.site, rArc.site, null, vertex);\n\n attachCircle(lArc);\n attachCircle(rArc);\n}\n\nexport function addBeach(site) {\n var x = site[0],\n directrix = site[1],\n lArc,\n rArc,\n dxl,\n dxr,\n node = beaches._;\n\n while (node) {\n dxl = leftBreakPoint(node, directrix) - x;\n if (dxl > epsilon) node = node.L; else {\n dxr = x - rightBreakPoint(node, directrix);\n if (dxr > epsilon) {\n if (!node.R) {\n lArc = node;\n break;\n }\n node = node.R;\n } else {\n if (dxl > -epsilon) {\n lArc = node.P;\n rArc = node;\n } else if (dxr > -epsilon) {\n lArc = node;\n rArc = node.N;\n } else {\n lArc = rArc = node;\n }\n break;\n }\n }\n }\n\n createCell(site);\n var newArc = createBeach(site);\n beaches.insert(lArc, newArc);\n\n if (!lArc && !rArc) return;\n\n if (lArc === rArc) {\n detachCircle(lArc);\n rArc = createBeach(lArc.site);\n beaches.insert(newArc, rArc);\n newArc.edge = rArc.edge = createEdge(lArc.site, newArc.site);\n attachCircle(lArc);\n attachCircle(rArc);\n return;\n }\n\n if (!rArc) { // && lArc\n newArc.edge = createEdge(lArc.site, newArc.site);\n return;\n }\n\n // else lArc !== rArc\n detachCircle(lArc);\n detachCircle(rArc);\n\n var lSite = lArc.site,\n ax = lSite[0],\n ay = lSite[1],\n bx = site[0] - ax,\n by = site[1] - ay,\n rSite = rArc.site,\n cx = rSite[0] - ax,\n cy = rSite[1] - ay,\n d = 2 * (bx * cy - by * cx),\n hb = bx * bx + by * by,\n hc = cx * cx + cy * cy,\n vertex = [(cy * hb - by * hc) / d + ax, (bx * hc - cx * hb) / d + ay];\n\n setEdgeEnd(rArc.edge, lSite, rSite, vertex);\n newArc.edge = createEdge(lSite, site, null, vertex);\n rArc.edge = createEdge(site, rSite, null, vertex);\n attachCircle(lArc);\n attachCircle(rArc);\n}\n\nfunction leftBreakPoint(arc, directrix) {\n var site = arc.site,\n rfocx = site[0],\n rfocy = site[1],\n pby2 = rfocy - directrix;\n\n if (!pby2) return rfocx;\n\n var lArc = arc.P;\n if (!lArc) return -Infinity;\n\n site = lArc.site;\n var lfocx = site[0],\n lfocy = site[1],\n plby2 = lfocy - directrix;\n\n if (!plby2) return lfocx;\n\n var hl = lfocx - rfocx,\n aby2 = 1 / pby2 - 1 / plby2,\n b = hl / plby2;\n\n if (aby2) return (-b + Math.sqrt(b * b - 2 * aby2 * (hl * hl / (-2 * plby2) - lfocy + plby2 / 2 + rfocy - pby2 / 2))) / aby2 + rfocx;\n\n return (rfocx + lfocx) / 2;\n}\n\nfunction rightBreakPoint(arc, directrix) {\n var rArc = arc.N;\n if (rArc) return leftBreakPoint(rArc, directrix);\n var site = arc.site;\n return site[1] === directrix ? site[0] : Infinity;\n}\n","import {addBeach, removeBeach} from \"./Beach\";\nimport {sortCellHalfedges, cellHalfedgeStart, clipCells} from \"./Cell\";\nimport {firstCircle} from \"./Circle\";\nimport {clipEdges} from \"./Edge\";\nimport RedBlackTree from \"./RedBlackTree\";\n\nexport var epsilon = 1e-6;\nexport var epsilon2 = 1e-12;\nexport var beaches;\nexport var cells;\nexport var circles;\nexport var edges;\n\nfunction triangleArea(a, b, c) {\n return (a[0] - c[0]) * (b[1] - a[1]) - (a[0] - b[0]) * (c[1] - a[1]);\n}\n\nfunction lexicographic(a, b) {\n return b[1] - a[1]\n || b[0] - a[0];\n}\n\nexport default function Diagram(sites, extent) {\n var site = sites.sort(lexicographic).pop(),\n x,\n y,\n circle;\n\n edges = [];\n cells = new Array(sites.length);\n beaches = new RedBlackTree;\n circles = new RedBlackTree;\n\n while (true) {\n circle = firstCircle;\n if (site && (!circle || site[1] < circle.y || (site[1] === circle.y && site[0] < circle.x))) {\n if (site[0] !== x || site[1] !== y) {\n addBeach(site);\n x = site[0], y = site[1];\n }\n site = sites.pop();\n } else if (circle) {\n removeBeach(circle.arc);\n } else {\n break;\n }\n }\n\n sortCellHalfedges();\n\n if (extent) {\n var x0 = +extent[0][0],\n y0 = +extent[0][1],\n x1 = +extent[1][0],\n y1 = +extent[1][1];\n clipEdges(x0, y0, x1, y1);\n clipCells(x0, y0, x1, y1);\n }\n\n this.edges = edges;\n this.cells = cells;\n\n beaches =\n circles =\n edges =\n cells = null;\n}\n\nDiagram.prototype = {\n constructor: Diagram,\n\n polygons: function() {\n var edges = this.edges;\n\n return this.cells.map(function(cell) {\n var polygon = cell.halfedges.map(function(i) { return cellHalfedgeStart(cell, edges[i]); });\n polygon.data = cell.site.data;\n return polygon;\n });\n },\n\n triangles: function() {\n var triangles = [],\n edges = this.edges;\n\n this.cells.forEach(function(cell, i) {\n if (!(m = (halfedges = cell.halfedges).length)) return;\n var site = cell.site,\n halfedges,\n j = -1,\n m,\n s0,\n e1 = edges[halfedges[m - 1]],\n s1 = e1.left === site ? e1.right : e1.left;\n\n while (++j < m) {\n s0 = s1;\n e1 = edges[halfedges[j]];\n s1 = e1.left === site ? e1.right : e1.left;\n if (s0 && s1 && i < s0.index && i < s1.index && triangleArea(site, s0, s1) < 0) {\n triangles.push([site.data, s0.data, s1.data]);\n }\n }\n });\n\n return triangles;\n },\n\n links: function() {\n return this.edges.filter(function(edge) {\n return edge.right;\n }).map(function(edge) {\n return {\n source: edge.left.data,\n target: edge.right.data\n };\n });\n },\n\n find: function(x, y, radius) {\n var that = this, i0, i1 = that._found || 0, n = that.cells.length, cell;\n\n // Use the previously-found cell, or start with an arbitrary one.\n while (!(cell = that.cells[i1])) if (++i1 >= n) return null;\n var dx = x - cell.site[0], dy = y - cell.site[1], d2 = dx * dx + dy * dy;\n\n // Traverse the half-edges to find a closer cell, if any.\n do {\n cell = that.cells[i0 = i1], i1 = null;\n cell.halfedges.forEach(function(e) {\n var edge = that.edges[e], v = edge.left;\n if ((v === cell.site || !v) && !(v = edge.right)) return;\n var vx = x - v[0], vy = y - v[1], v2 = vx * vx + vy * vy;\n if (v2 < d2) d2 = v2, i1 = v.index;\n });\n } while (i1 !== null);\n\n that._found = i0;\n\n return radius == null || d2 <= radius * radius ? cell.site : null;\n }\n}\n","import constant from \"./constant\";\nimport {x as pointX, y as pointY} from \"./point\";\nimport Diagram, {epsilon} from \"./Diagram\";\n\nexport default function() {\n var x = pointX,\n y = pointY,\n extent = null;\n\n function voronoi(data) {\n return new Diagram(data.map(function(d, i) {\n var s = [Math.round(x(d, i, data) / epsilon) * epsilon, Math.round(y(d, i, data) / epsilon) * epsilon];\n s.index = i;\n s.data = d;\n return s;\n }), extent);\n }\n\n voronoi.polygons = function(data) {\n return voronoi(data).polygons();\n };\n\n voronoi.links = function(data) {\n return voronoi(data).links();\n };\n\n voronoi.triangles = function(data) {\n return voronoi(data).triangles();\n };\n\n voronoi.x = function(_) {\n return arguments.length ? (x = typeof _ === \"function\" ? _ : constant(+_), voronoi) : x;\n };\n\n voronoi.y = function(_) {\n return arguments.length ? (y = typeof _ === \"function\" ? _ : constant(+_), voronoi) : y;\n };\n\n voronoi.extent = function(_) {\n return arguments.length ? (extent = _ == null ? null : [[+_[0][0], +_[0][1]], [+_[1][0], +_[1][1]]], voronoi) : extent && [[extent[0][0], extent[0][1]], [extent[1][0], extent[1][1]]];\n };\n\n voronoi.size = function(_) {\n return arguments.length ? (extent = _ == null ? null : [[0, 0], [+_[0], +_[1]]], voronoi) : extent && [extent[1][0] - extent[0][0], extent[1][1] - extent[0][1]];\n };\n\n return voronoi;\n}\n","/**\n * This class represents a selection applied on a data array.\n *\n * @class Selection\n */\nclass Selection {\n /**\n * Creates an instance of Selection.\n * @param {Array} data Array of DataObjects.\n * @memberof Selection\n */\n constructor (idGetter) {\n this._dataObjects = new Map();\n this._updatedata = new Map();\n this._mode = '';\n this._enterdata = new Map();\n this._exitdata = new Map();\n this._idGetter = idGetter;\n }\n\n /**\n * This method is used to supply seed data to a selection.\n *\n * @param {Array} newData Seed data to create the enter selection.\n * @param {Functon | undefined } idGetter This function is used to uniqely identify a data entry.\n * @return {Selection} Modified selection.\n * @memberof Selection\n */\n data (newData) {\n const entryData = new Map();\n const exitdata = new Map();\n const tempMap = new Map();\n const duplicateData = new Map();\n const updatedData = this._updatedata;\n\n newData.forEach((...params) => {\n const key = this.idGetter ? this._idGetter(...params) : params[1];\n if (!tempMap.has(key)) {\n tempMap.set(key, params[0]);\n } else {\n duplicateData.push(key, params[0]);\n }\n });\n\n let val;\n // prepare enter data\n let entries = tempMap.entries();\n while (val = entries.next().value) {\n if (!updatedData.has(val[0])) {\n entryData.set(val[0], val[1]);\n } else {\n updatedData.set(val[0], val[1]);\n }\n }\n // prepare exit data\n entries = updatedData.entries();\n while (val = entries.next().value) {\n if (!tempMap.has(val[0])) {\n exitdata.set(val[0], val[1]);\n }\n }\n\n // put duplicate data to exit list\n entries = duplicateData.entries();\n while (val = entries.next().value) {\n exitdata.set(val[0], val[1]);\n }\n\n const newSelection = new Selection(this._idGetter);\n newSelection._updatedata = updatedData;\n newSelection._dataObjects = this._dataObjects;\n newSelection._enterdata = entryData;\n newSelection._exitdata = exitdata;\n\n return newSelection;\n }\n\n /**\n * Applies the supplied callback to each data element\n * and returns a new selection.\n *\n * @param {Function} callback Callback to execute on each item.\n * @return {Selection} New selection with data created using callback.\n * @memberof Selection\n */\n append (callback) {\n let currentData;\n let val;\n const dataObjects = new Map();\n const data = new Map();\n\n // select the data to create object\n switch (this._mode) {\n case 'enter':\n currentData = this._enterdata;\n break;\n case 'exit':\n currentData = this._exitdata;\n break;\n default:\n currentData = this._updatedata;\n }\n\n const entries = currentData.entries();\n\n while (val = entries.next().value) {\n dataObjects.set(val[0], callback(val[1]));\n data.set(val[0], val[1]);\n }\n\n const newSelection = new Selection(this._idGetter);\n newSelection._updatedata = data;\n newSelection._dataObjects = dataObjects;\n this._mode = '';\n\n return newSelection;\n }\n\n /**\n * This method returns an enter selection that\n * allows or update operations.\n *\n * @return {Selection} Instance of enter selection.\n * @memberof Selection\n */\n enter () {\n this._mode = 'enter';\n return this;\n }\n\n /**\n * Returns a selection with exit data.\n *\n * @return {Selection} Instance of selection.\n * @memberof Selection\n */\n exit () {\n this._mode = 'exit';\n return this;\n }\n\n /**\n * This method merges the data of one selection with another.\n *\n * @param {Selection} selection Instance of selection.\n * @return {Selection} Modified selection.\n * @memberof Selection\n */\n merge (target) {\n const mergedObjects = new Map();\n const mergedData = new Map();\n let val;\n let entries;\n\n // merge Object and data present in this selection\n entries = this._updatedata.entries();\n while (val = entries.next().value) {\n if (!this._exitdata.has(val[0])) {\n mergedData.set(val[0], val[1]);\n mergedObjects.set(val[0], this._dataObjects.get(val[0]));\n }\n }\n\n // merge object from target selection\n entries = target._updatedata.entries();\n while (val = entries.next().value) {\n if (!(mergedData.has(val[0]) || target._exitdata.has(val[0]))) {\n mergedData.set(val[0], val[1]);\n mergedObjects.set(val[0], target._dataObjects.get(val[0]));\n }\n }\n\n const newSelection = new Selection(this._idGetter);\n newSelection._updatedata = mergedData;\n newSelection._dataObjects = mergedObjects;\n\n return newSelection;\n }\n\n each (fn) {\n let val;\n const entries = this._dataObjects.entries();\n\n while (val = entries.next().value) {\n fn(val[1], this._updatedata.get(val[0]), val[0]);\n }\n }\n\n map (fn) {\n const newdata = new Map();\n let val;\n const entries = this._dataObjects.entries();\n\n while (val = entries.next().value) {\n newdata.set(val[0], fn(val[1], this._updatedata.get(val[0]), val[0]));\n }\n const newSelection = new Selection(this._idGetter);\n newSelection._updatedata = this._updatedata;\n newSelection._dataObjects = newdata;\n\n return newSelection;\n }\n\n remove () {\n let currentData;\n\n switch (this._mode) {\n case 'enter':\n currentData = this._enterdata;\n break;\n case 'exit':\n currentData = this._exitdata;\n break;\n default:\n currentData = this._updatedata;\n }\n\n currentData.clear();\n\n return this;\n }\n\n /**\n * Gets the object bound to a class\n *\n * @return {Object} current data set bound to the class\n * @memberof Selection\n */\n getObjects () {\n const objects = [];\n let val;\n const values = this._dataObjects.values();\n\n while (val = values.next().value) {\n objects.push(val);\n }\n return objects;\n }\n\n}\n\nexport default Selection;\n","export const ORDER_ASCENDING = 'ascending';\nexport const ORDER_DESCENDING = 'descending';\nexport const ORDER_NONE = 'none';\nexport const OFFSET_DIVERGING = 'diverging';\nexport const OFFSET_NONE = 'none';\nexport const OFFSET_EXPAND = 'expand';\nexport const OFFSET_WIGGLE = 'wiggle';\n","/* global window, requestAnimationFrame, cancelAnimationFrame */\nimport { FieldType, DimensionSubtype, DateTimeFormatter, DM_DERIVATIVES, default as DataModel } from 'datamodel';\nimport {\n axisLeft,\n axisRight,\n axisTop,\n axisBottom\n} from 'd3-axis';\nimport {\n symbolCircle,\n symbolCross,\n symbolDiamond,\n symbolSquare,\n symbolStar,\n symbolWye,\n symbolTriangle,\n symbol,\n stack as d3Stack,\n stackOffsetDiverging,\n stackOrderNone,\n stackOrderAscending,\n stackOrderDescending,\n stackOffsetNone,\n stackOffsetExpand,\n stackOffsetWiggle,\n pie,\n arc,\n line,\n curveLinear,\n curveStepAfter,\n curveStepBefore,\n curveStep,\n curveCatmullRom,\n area\n} from 'd3-shape';\nimport { scaleBand } from 'd3-scale';\nimport { nest } from 'd3-collection';\nimport {\n interpolate,\n interpolateRgb,\n piecewise,\n interpolateNumber,\n interpolateHslLong\n} from 'd3-interpolate';\nimport {\n easeCubic,\n easeBounce,\n easePoly,\n easeBack,\n easeCircle,\n easeLinear,\n easeElastic\n} from 'd3-ease';\nimport {\n color,\n rgb,\n hsl\n} from 'd3-color';\nimport { voronoi } from 'd3-voronoi';\nimport Model from 'hyperdis';\nimport { dataSelect } from './DataSystem';\nimport * as STACK_CONFIG from './enums/stack-config';\n\nconst { InvalidAwareTypes } = DataModel;\nconst HTMLElement = window.HTMLElement;\n\nconst isSimpleObject = (obj) => {\n let token;\n if (typeof obj === 'object') {\n if (obj === null) { return false; }\n token = Object.prototype.toString.call(obj);\n if (token === '[object Object]') {\n return (obj.constructor.toString().match(/^function (.*)\\(\\)/m) || [])[1] === 'Object';\n }\n }\n return false;\n};\n\n/**\n * Returns unique id\n * @return {string} Unique id string\n */\nconst\n getUniqueId = () => `id-${new Date().getTime()}${Math.round(Math.random() * 10000)}`;\n\n/**\n * Deep copies an object and returns a new object.\n * @param {Object} o Object to clone\n * @return {Object} New Object.\n */\nconst clone = (o) => {\n const output = {};\n let v;\n for (const key in o) {\n if ({}.hasOwnProperty.call(o, key)) {\n v = o[key];\n output[key] = isSimpleObject(v) ? clone(v) : v;\n }\n }\n return output;\n};\n\n/**\n* Checks the existence of keys in an object\n* @param {Array} keys Set of keys which are to be checked\n* @param {Object} obj whose keys are checked from the set of keys provided\n* @return {Object} Error if the keys are absent, or the object itself\n*/\nconst checkExistence = (keys, obj) => {\n const nonExistentKeys = [];\n keys.forEach((key) => {\n if (key in obj) {\n return;\n }\n nonExistentKeys.push(key);\n });\n return nonExistentKeys;\n};\n\nconst sanitizeIP = {\n typeObj: (keys, obj) => {\n if (typeof obj !== 'object') {\n return Error('Argument type object expected');\n }\n\n const nonExistentKeys = checkExistence(keys, obj);\n if (nonExistentKeys.length) {\n return Error(`Missing keys from parameter ${nonExistentKeys.join(', ')}`);\n }\n return obj;\n },\n\n /* istanbul ignore next */ htmlElem: (elem) => {\n if (!(elem instanceof HTMLElement)) {\n return Error('HTMLElement required');\n }\n return elem;\n }\n};\n\n/**\n * Gets the maximum value from an array of objects for a given property name\n * @param {Array.} data Array of objects\n * @param {string} field Field name\n * @return {number} Maximum value\n */\nconst getMax = (data, field) => Math.max(...data.map(d => d[field]));\n\n/**\n * Gets the minimum value from an array of objects for a given property name\n * @param {Array.} data Array of objects\n * @param {string} field Field name\n * @return {number} Minimum value\n */\nconst getMin = (data, field) => Math.min(...data.map(d => d[field]));\n\n/**\n * Gets the domain from the data based on the field name and type of field\n * @param {Array. | Array.} data Data Array\n * @param {Array.} fields Array of fields from where the domain will be calculated\n * @param {string} fieldType Type of field - nominal, quantitiative, temporal.\n * @return {Array} Usually contains a min and max value if field is quantitative or\n * an array of values if field type is nominal or ordinal\n */\nconst getDomainFromData = (data, fields, fieldType) => {\n let domain;\n const domArr = [];\n data = data[0] instanceof Array ? data : [data];\n switch (fieldType) {\n case DimensionSubtype.CATEGORICAL:\n domain = [].concat(...data.map(arr => arr.map(d => d[fields[0]]).filter(d => d !== undefined)));\n break;\n default:\n for (let i = 0, len = data.length; i < len; i++) {\n const arr = data[i];\n const [field0, field1] = fields;\n const arr0 = arr.filter(d => !isNaN(d[field0]));\n const arr1 = arr.filter(d => !isNaN(d[field1]));\n if (arr0.length || arr1.length) {\n const firstMin = getMin(arr0, field0);\n const secondMin = getMin(arr1, field1);\n const firstMax = getMax(arr0, field0);\n const secondMax = getMax(arr1, field1);\n domArr.push([Math.min(firstMin, secondMin), Math.max(firstMax, secondMax)]);\n }\n }\n domain = domArr.length ? [Math.min(...domArr.map(d => d[0])), Math.max(...domArr.map(d => d[1]))] : [];\n break;\n }\n return domain;\n};\n\nconst sanitizeDomainWhenEqual = (domain) => {\n if (domain[0] === domain[1]) {\n domain[0] = domain[0] > 0 ? 0 : domain[0];\n domain[1] = domain[1] > 0 ? domain[1] : 0;\n }\n return domain;\n};\n\n/**\n * Union Domain values\n * @param {Array.} domains Array of domain values\n * @param {string} fieldType type of field - dimension,measure or datetime.\n * @return {Array} Unioned domain of all domain values.\n */\nconst unionDomain = (domains, fieldType) => {\n let domain = [];\n domains = domains.filter(dom => dom && dom.length);\n if (domains.length) {\n if (fieldType === DimensionSubtype.CATEGORICAL) {\n domain = [].concat(...domains);\n } else {\n domain = [Math.min(...domains.map(d => d[0])), Math.max(...domains.map(d => d[1]))];\n }\n }\n\n return domain;\n};\n\nconst symbolFns = {\n circle: symbolCircle,\n cross: symbolCross,\n diamond: symbolDiamond,\n square: symbolSquare,\n star: symbolStar,\n wye: symbolWye,\n triangle: symbolTriangle\n};\n\nconst easeFns = {\n cubic: easeCubic,\n bounce: easeBounce,\n linear: easeLinear,\n elastic: easeElastic,\n back: easeBack,\n poly: easePoly,\n circle: easeCircle\n};\n\n/**\n * Returns the maximum or minimum points of a compare value from an array of objects.\n * @param {Array} points Array of objects\n * @param {string} compareValue Key in the object on which the comparing will be done.\n * @param {string} minOrMax minimum or maximum.\n * @return {Object} Minimum or maximum point.\n */\nconst getExtremePoint = (points, compareValue, minOrMax) => {\n let extremePoint;\n let point;\n const len = points.length;\n let minOrMaxVal = minOrMax === 'max' ? -Infinity : Infinity;\n let val;\n\n for (let i = 0; i < len; i++) {\n point = points[i];\n val = point[compareValue];\n if (minOrMax === 'min' ? val < minOrMaxVal : val > minOrMaxVal) {\n minOrMaxVal = val;\n extremePoint = point;\n }\n }\n\n return extremePoint;\n};\n\n/**\n * Returns the minimum point of a compare value from an array of objects.\n * @param {Array} points Array of objects\n * @param {string} compareValue Key in the object on which the comparing will be done.\n * @return {Object} Minimum point.\n */\nconst getMinPoint = (points, compareValue) => getExtremePoint(points, compareValue, 'min');\n\n/**\n * Returns the maximum point of a compare value from an array of objects.\n * @param {Array} points Array of objects\n * @param {string} compareValue Key in the object on which the comparing will be done.\n * @return {Object} Maximum point.\n */\nconst getMaxPoint = (points, compareValue) => getExtremePoint(points, compareValue, 'max');\n\n/**\n * Gets the index of the closest value of the given value from the array.\n * @param {Array} arr Array of values\n * @param {number} value Value from which the nearest value will be calculated.\n * @param {string} side side property.\n * @return {number} index of the closest value\n */\n/* istanbul ignore next */const getClosestIndexOf = (arr, value, side) => {\n let low = 0;\n const arrLen = arr.length;\n let high = arrLen - 1;\n\n let mid;\n let d1;\n let d2;\n\n while (low < high) {\n mid = Math.floor((low + high) / 2);\n d1 = Math.abs(arr[mid] - value);\n d2 = Math.abs(arr[mid + 1] - value);\n\n if (d2 <= d1) {\n low = mid + 1;\n } else {\n high = mid;\n }\n }\n\n if (!side) {\n return high;\n }\n\n const highVal = arr[high];\n if (highVal === value) {\n return high;\n } else if (highVal > value) {\n if (high === 0) { return high; }\n return side === 'left' ? high - 1 : high;\n }\n if (high === arr.length - 1) { return high; }\n return side === 'left' ? high : high + 1;\n};\n\nconst getNearestValue = (data, key) => {\n const filterData = data.filter(d => typeof d === 'number');\n return filterData[getClosestIndexOf(filterData, key)];\n};\n\n/**\n * Returns the browser window object\n * @return {Window} Window object\n*/\nconst getWindow = () => window;\n\n/**\n * Returns the browser window object\n * @return {Window} Window object\n*/\nconst reqAnimFrame = (() => requestAnimationFrame)();\n\nconst cancelAnimFrame = (() => cancelAnimationFrame)();\n\n/**\n * Capitalizes the first letter of the word\n * @param {string} text word\n * @return {string} Capitalized word\n */\nconst capitalizeFirst = (text) => {\n text = text.toLowerCase();\n\n return text.replace(/\\w\\S*/g, txt => txt.charAt(0).toUpperCase() + txt.substr(1));\n};\n\n/**\n *\n *\n * @param {*} arr\n */\nconst unique = arr => ([...new Set(arr)]);\n\n/**\n * Gets the minimum difference between two consecutive numbers in an array.\n * @param {Array} arr Array of numbers\n * @param {number} index index of the value\n * @return {number} minimum difference between values\n */\n/* istanbul ignore next */ const getMinDiff = (arr, index) => {\n let diff;\n let uniqueVals;\n if (index !== undefined) {\n uniqueVals = unique(arr.map(d => d[index]));\n } else {\n uniqueVals = unique(arr);\n }\n if (uniqueVals.length > 1) {\n diff = Math.abs(uniqueVals[1] - uniqueVals[0]);\n for (let i = 2, len = uniqueVals.length; i < len; i++) {\n diff = Math.min(diff, Math.abs(uniqueVals[i] - uniqueVals[i - 1]));\n }\n } else {\n diff = uniqueVals[0];\n }\n\n return diff;\n};\n\n/**\n * Returns the class name appended with a given id.\n * @param {string} cls class name\n * @param {string} id unique identifier\n * @param {string} prefix string needed to add before the classname\n * @return {string} qualified class name\n */\n/* istanbul ignore next */const getQualifiedClassName = (cls, id, prefix) => {\n cls = cls.replace(/^\\.*/, '');\n return [`${prefix}-${cls}`, `${prefix}-${cls}-${id}`];\n};\n\n/**\n * This method is used to set the default value for variables\n * without sullying the code with conditional statements.\n *\n * @export\n * @param {any} param The parameter to test.\n * @param {any} value The default value to assign.\n * @return {any} The value.\n */\n/* istanbul ignore next */ const defaultValue = (param, value) => {\n if (typeof param === 'undefined' || (typeof param === 'object' && !param)) {\n return value;\n }\n return param;\n};\n\n/**\n * DESCRIPTION TODO\n *\n * @export\n * @param {Object} graph graph whose dependency order has to be generated\n * @return {Object}\n */\nconst getDependencyOrder = (graph) => {\n const dependencyOrder = [];\n const visited = {};\n const keys = Object.keys(graph);\n /**\n * DESCRIPTION TODO\n *\n * @export\n * @param {Object} name\n * @return {Object}\n */\n const visit = (name) => {\n if (dependencyOrder.length === keys.length) {\n return true;\n }\n visited[name] = true;\n const edges = graph[name];\n for (let e = 0; e < edges.length; e++) {\n const dep = edges[e];\n if (!visited[dep]) {\n visit(dep);\n }\n }\n\n dependencyOrder.push(name);\n return false;\n };\n\n for (let i = 0; i < keys.length; i++) {\n if (visit(keys[i], i)) break;\n }\n\n return dependencyOrder;\n};\n\n/**\n * Iterates over the properties of an object and applies the function\n *\n * @param {any} obj object to be iterated upon\n * @param {any} fn function to be applied on it\n */\nconst objectIterator = (obj, fn) => {\n for (const key in obj) {\n if (Object.hasOwnProperty.call(obj, key)) {\n fn(key, obj);\n }\n }\n};\n\n/**\n * This class creates a d3 voronoi for retrieving the nearest neighbour of any point from a set of two\n * dimensional points\n * @class Voronoi\n */\n/* istanbul ignore next */ class Voronoi {\n /**\n * Initialize the voronoi with the data given.\n * @param {Array.} data Array of points.\n */\n constructor (data = []) {\n this._voronoi = voronoi().x(d => d.x).y(d => d.y);\n this.data(data);\n }\n\n /**\n * Sets the data to voronoi\n * @param {Array.} data Array of objects.\n * @return {Voronoi} Instance of voronoi.\n */\n data (data) {\n if (data) {\n this._voronoiFn = this._voronoi(data);\n }\n return this;\n }\n\n /**\n * Finds the closest point to the x and y position given.\n * @param {number} x x value\n * @param {number} y y value\n * @param {number} radius search radius.\n * @return {Object} Details of the nearest point.\n */\n find (x, y, radius) {\n return this._voronoiFn.find(x, y, radius);\n }\n}\n\nconst addListenerToNamespace = (namespaceInf, fn, context) => {\n let key = namespaceInf.key;\n const namespace = namespaceInf.namespace;\n if (namespace) {\n !context._listeners[namespace] && (context._listeners[namespace] = []);\n if (!key) {\n key = Object.keys(context._listeners[namespace]).length;\n }\n context._listeners[namespace][key] = fn;\n } else {\n key = Object.keys(context._listeners).length;\n context._listeners[key] = fn;\n }\n};\n\n/**\n *\n *\n * @param {*} obj\n * @param {*} fields\n *\n */\nconst getObjProp = (obj, ...fields) => {\n if (obj === undefined || obj === null) {\n return obj;\n }\n let retObj = obj;\n for (let i = 0, len = fields.length; i < len; i++) {\n retObj = retObj[fields[i]];\n if (retObj === undefined || retObj === null) {\n break;\n }\n }\n return retObj;\n};\n\n/**\n * Methods to handle changes to table configuration and reactivity are handled by this\n * class.\n */\n/**\n * Common store class\n *\n * @class Store\n */\nclass Store {\n /**\n * Creates an instance of Store.\n * @param {Object} config The object to create the state store with.\n * @memberof Store\n */\n constructor (config) {\n // create reactive model\n this.model = Model.create(config);\n this._listeners = {};\n }\n\n /**\n * This method returns a plain JSON object\n * with all the fields in the state store.\n *\n * @return {Object} Serialized representation of state store.\n * @memberof Store\n */\n serialize () {\n return this.model.serialize();\n }\n\n /**\n * This method is used to update the value of a property in the state store.\n *\n * @param {string} propName The name of the property.\n * @param {number} value The new value of the property.\n * @memberof Store\n */\n commit (propName, value) {\n // check if appropriate enum has been used\n this.model.prop(propName, value);\n }\n\n /**\n * This method is used to register a callbacl that will execute\n * when one or more properties change.\n *\n * @param {string | Array} propNames name of property or array of props.\n * @param {Function} callBack The callback to execute.\n * @memberof Store\n */\n /* istanbul ignore next */registerChangeListener (propNames, callBack, instantCall, namespaceInf = {}) {\n let props = propNames;\n if (!Array.isArray(propNames)) {\n props = [propNames];\n }\n const fn = this.model.next(props, callBack, instantCall);\n addListenerToNamespace(namespaceInf, fn, this);\n return this;\n }\n /**\n * This method is used to register a callbacl that will execute\n * when one or more properties change.\n *\n * @param {string | Array} propNames name of property or array of props.\n * @param {Function} callBack The callback to execute.\n * @memberof Store\n */\n /* istanbul ignore next */ registerImmediateListener (propNames, callBack, instantCall, namespaceInf = {}) {\n let props = propNames;\n if (!Array.isArray(propNames)) {\n props = [propNames];\n }\n const fn = this.model.on(props, callBack, instantCall);\n addListenerToNamespace(namespaceInf, fn, this);\n return this;\n }\n /**\n * This method is used to get the name of the property\n * from the state store.\n *\n * @param {string} propName The name of the field in state store.\n * @return {any} The value of the field.\n * @memberof Store\n */\n get (propName) {\n return this.model.prop(propName);\n }\n\n /**\n * This method is used to register a computed property that is computed every time\n * the store value changes.\n *\n * @param {string} propName The name of the property to create.\n * @param {Function} callBack The function to execute when depemdent props change.\n * @memberof Store\n */\n computed (propName, callBack) {\n return this.model.calculatedProp(propName, callBack);\n }\n\n append (propName, value) {\n this.model.append(propName, value);\n return this;\n }\n\n unsubscribeAll () {\n Object.values(this._listeners).forEach(fn => fn());\n return this;\n }\n\n unsubscribe (namespaceInf = {}) {\n const { namespace, key } = namespaceInf;\n const listeners = this._listeners[namespace];\n if (key) {\n const fn = getObjProp(listeners, key);\n fn && fn();\n } else {\n Object.values(listeners).forEach(fn => fn());\n this._listeners[namespace] = [];\n }\n return this;\n }\n}\n\n/**\n * Sanitize an input number / string mixed number. Currently dot in the no is not supported.\n *\n * @param {number | string} val pure number or string mixed number\n * @return {number | null} Number if it can be extracted. Otherwise null\n */\nconst intSanitizer = (val) => {\n const arr = val.toString().match(/(\\d+)(px)*/g);\n if (!arr) {\n // If only characters are passed\n return null;\n }\n\n return parseInt(arr[0], 10);\n};\n\n/**\n * Setter getter creator from config\n * Format\n * PROPERTRY_NAME: {\n * value: // default value of the property,\n * meta: {\n * typeCheck: // The setter value will be checked using this. If the value is function then the setter value\n * // is passed as args. (Optional)\n * typeExpected: // The output of typecheck action will be tested against this. Truthy value will set the\n * // value to the setter\n * sanitizaiton: // Need for sanitization before type is checked\n * }\n * }\n *\n * @param {Object} holder an empty object on which the getters and setters will be mounted\n * @param {Object} options options config based on which the getters and setters are determined.\n * @param {Hyperdis} model optional model to attach the property. If not sent new moel is created.\n * @return {Array}\n */\nconst transactor = (holder, options, model, namespaceInf = {}) => {\n let conf;\n const store = model && model instanceof Model ? model : Model.create({});\n const stateProps = {};\n for (const prop in options) {\n if ({}.hasOwnProperty.call(options, prop)) {\n conf = options[prop];\n const addAsMethod = conf.meta ? conf.meta.addAsMethod : true;\n let nameSpaceProp;\n const namespace = namespaceInf.namespace;\n if (namespace) {\n nameSpaceProp = `${namespace}.${prop}`;\n } else {\n nameSpaceProp = prop;\n }\n\n stateProps[prop] = conf.value;\n if (addAsMethod !== false) {\n holder[prop] = ((context, meta, nsProp) => (...params) => {\n let val;\n let compareTo;\n const paramsLen = params.length;\n const prevVal = store.prop(nsProp);\n if (paramsLen) {\n // If parameters are passed then it's a setter\n const spreadParams = meta && meta.spreadParams;\n val = params;\n const values = [];\n if (meta) {\n for (let i = 0; i < paramsLen; i++) {\n val = params[i];\n const sanitization = meta.sanitization && (spreadParams ? meta.sanitization[i] :\n meta.sanitization);\n const typeCheck = meta.typeCheck && (spreadParams ? meta.typeCheck[i] : meta.typeCheck);\n if (sanitization && typeof sanitization === 'function') {\n // Sanitize if required\n val = sanitization(val, prevVal, holder);\n }\n\n if (typeCheck) {\n // Checking if a setter is valid\n if (typeof typeCheck === 'function') {\n let typeExpected = meta.typeExpected;\n if (typeExpected && spreadParams) {\n typeExpected = typeExpected[i];\n }\n if (typeExpected) {\n compareTo = typeExpected;\n } else {\n compareTo = true;\n }\n\n if (typeCheck(val) === compareTo) {\n values.push(val);\n }\n } else if (typeof typeCheck === 'string') {\n if (typeCheck === 'constructor') {\n const typeExpected = spreadParams ? meta.typeExpected[i] :\n meta.typeExpected;\n if (val && (val.constructor.name === typeExpected)) {\n values.push(val);\n }\n }\n } else {\n // context.prop(key, val);\n values.push(val);\n }\n } else {\n values.push(val);\n }\n }\n const preset = meta.preset;\n const oldValues = context.prop(nsProp);\n preset && preset(values[0], holder);\n if (spreadParams) {\n oldValues.forEach((value, i) => {\n if (values[i] === undefined) {\n values[i] = value;\n }\n });\n }\n values.length && context.prop(nsProp, spreadParams ? values : values[0]);\n } else {\n context.prop(nsProp, spreadParams ? val : val[0]);\n }\n return holder;\n }\n // No parameters are passed hence its a getter\n return context.prop(nsProp);\n })(store, conf.meta, nameSpaceProp);\n }\n }\n }\n\n if (namespaceInf.namespace === undefined) {\n store.append(stateProps);\n } else {\n const namespace = namespaceInf.namespace;\n store.append(namespace, stateProps);\n }\n\n return [holder, store];\n};\n\n/**\n *\n *\n * @param {*} context\n * @param {*} props\n */\nconst generateGetterSetters = (context, props) => {\n Object.entries(props).forEach((propInfo) => {\n const prop = propInfo[0];\n const typeChecker = propInfo[1].typeChecker;\n const defVal = propInfo[1].defaultValue;\n const sanitization = propInfo[1].sanitization;\n const preset = propInfo[1].preset;\n const prototype = context.constructor.prototype;\n if (!(Object.hasOwnProperty.call(prototype, prop))) {\n if (defVal) {\n context[`_${prop}`] = defVal;\n }\n context[prop] = (...params) => {\n if (params.length) {\n let value = params[0];\n if (sanitization) {\n value = sanitization(context, params[0]);\n }\n if (preset) {\n preset(context, value);\n }\n if (typeChecker && !typeChecker(value)) {\n return context[`_${prop}`];\n }\n context[`_${prop}`] = value;\n return context;\n } return context[`_${prop}`];\n };\n }\n });\n};\n\n/**\n *\n *\n * @param {*} arr\n * @param {*} prop\n */\nconst getArraySum = (arr, prop) => arr.reduce((total, elem) => {\n total += prop ? elem[prop] : elem;\n return total;\n}, 0);\n\n/**\n *\n *\n * @param {*} arr1\n * @param {*} arr2\n *\n */\nconst arraysEqual = (arr1, arr2) => {\n if (arr1.length !== arr2.length) { return false; }\n for (let i = arr1.length; i >= 0; i--) {\n if (arr1[i] !== arr2[i]) { return false; }\n }\n\n return true;\n};\n\n/* eslint valid-typeof:0 */\n/**\n * Returns a validation function which can be used to validate variables against a type and value\n *\n * @param {any} type type of value that the object should have\n * @return {Object} validation function\n */\nconst isEqual = type => (oldVal, newVal) => {\n if (type === 'Array') {\n if (!oldVal) {\n return false;\n }\n return arraysEqual(oldVal, newVal);\n } else if (type === 'Object') {\n return Object.is(oldVal, newVal);\n } return oldVal === newVal;\n};\n\n/**\n * Description @todo\n *\n * @param {any} transactionModel @todo\n * @param {any} transactionEndpoint @todo\n * @param {any} transactionItems @todo\n * @return {any} @todo\n */\nconst enableChainedTransaction = (transactionModel, transactionEndpoint, transactionItems) =>\n transactionItems.forEach(item => transactionModel.on(item, ([, newVal]) => transactionEndpoint[item](newVal)));\n\n/**\n * Chceks if the element is istanceof HTMLElement\n *\n * @param {Object} elem any JS Object\n */\nconst isHTMLElem = elem => elem instanceof HTMLElement;\n\nconst ERROR_MSG = {\n INTERFACE_IMPL: 'Method not implemented'\n};\n\n/**\n * Merges the sink object in the source by recursively iterating through the object properties\n * @param {Object} source Source Object\n * @param {Object} sink Sink Object\n * @return {Object} Merged object\n */\nconst mergeRecursive = (source, sink) => {\n for (const prop in sink) {\n if (isSimpleObject(source[prop]) && isSimpleObject(sink[prop])) {\n mergeRecursive(source[prop], sink[prop]);\n } else if (sink[prop] instanceof Object && sink[prop].constructor === Object) {\n source[prop] = {};\n mergeRecursive(source[prop], sink[prop]);\n } else {\n source[prop] = sink[prop];\n }\n }\n return source;\n};\n\n/**\n * Creates a selection set from a data set with corresponding attributes\n *\n * @export\n * @param {Selection} sel contains previous selection\n * @param {Object} appendObj Object to be appended\n * @param {Array} data Data based on which the selection is entered/updated/removed\n * @param {Object} [attrs={}] Attributes to be set on the data\n * @return {Selection} Merged selection\n */\nconst createSelection = (sel, appendObj, data, idFn) => {\n let selection = sel || dataSelect(idFn);\n\n selection = selection.data(data);\n\n const enter = selection.enter().append(appendObj);\n const mergedSelection = enter.merge(selection);\n\n const exitSelection = selection.exit();\n exitSelection.getObjects().forEach(inst => inst.remove());\n exitSelection.remove();\n return mergedSelection;\n};\n\nconst interpolateArray = (data, fitCount) => {\n const linearInterpolate = function (before, after, atPoint) {\n return before + (after - before) * atPoint;\n };\n const newData = [];\n const springFactor = ((data.length - 1) / (fitCount - 1));\n newData[0] = data[0]; // for new allocation\n for (let i = 1; i < fitCount - 1; i++) {\n const tmp = i * springFactor;\n const before = (Math.floor(tmp)).toFixed();\n const after = (Math.ceil(tmp)).toFixed();\n const atPoint = tmp - before;\n newData[i] = linearInterpolate(data[before], data[after], atPoint);\n }\n newData[fitCount - 1] = data[data.length - 1]; // for new allocation\n return newData;\n};\n\n/**\n *\n *\n * @param {*} fn\n */\nconst nextFrame = (fn) => {\n setTimeout(() => {\n fn();\n }, 0);\n};\n\n/**\n *\n *\n * @param {*} angle\n */\nconst angleToRadian = angle => angle * Math.PI / 180;\n\n/**\n *\n *\n * @param {*} newName\n * @param {*} oldName\n */\nconst replaceCSSPrefix = () => {\n // @todo\n};\n\n/**\n * Gets the interpolator function from d3 color\n *\n */\nconst interpolator = () => interpolate;\n\n/**\n * Gets the number interpolator from d3 color\n *\n */\nconst numberInterpolator = () => interpolateNumber;\n\n/**\n * Gets the rgb interpolator from d3 color\n *\n */\nconst colorInterpolator = () => interpolateRgb;\n\n/**\n * Gets the hsl interpolator from d3 color\n *\n */\nconst hslInterpolator = () => interpolateHslLong;\n\nconst transformColors = () => ({\n color,\n rgb,\n hsl\n});\n\n/**\n * Gets the piecewise interpolator from d3 color\n *\n */\nconst piecewiseInterpolator = () => piecewise;\n\nfunction hue2rgb (p, q, t) {\n if (t < 0) t += 1;\n if (t > 1) t -= 1;\n if (t < 1 / 6) return p + (q - p) * 6 * t;\n if (t < 1 / 2) return q;\n if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;\n return p;\n}\n\n /**\n * Converts an HSL color value to RGB. Conversion formula\n * adapted from http://en.wikipedia.org/wiki/HSL_color_space.\n * Assumes h, s, and l are contained in the set [0, 1] and\n * returns r, g, and b in the set [0, 255].\n *\n * @param Number h The hue\n * @param Number s The saturation\n * @param Number l The lightness\n * @return Array The RGB representation\n */\nconst hslToRgb = (h, s, l, a = 1) => {\n let r;\n let g;\n let b;\n\n if (s === 0) {\n r = g = b = l; // achromatic\n } else {\n const q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n const p = 2 * l - q;\n\n r = hue2rgb(p, q, h + 1 / 3);\n g = hue2rgb(p, q, h);\n b = hue2rgb(p, q, h - 1 / 3);\n }\n\n return [r * 255, g * 255, b * 255, a];\n};\n\n /**\n * Converts an RGB color value to HSV. Conversion formula\n * adapted from http://en.wikipedia.org/wiki/HSV_color_space.\n * Assumes r, g, and b are contained in the set [0, 255] and\n * returns h, s, and v in the set [0, 1].\n *\n * @param Number r The red color value\n * @param Number g The green color value\n * @param Number b The blue color value\n * @return Array The HSV representation\n */\nconst rgbToHsv = (r, g, b, a = 1) => {\n r = +r; g = +g; b = +b; a = +a;\n r /= 255; g /= 255; b /= 255;\n const max = Math.max(r, g, b);\n const min = Math.min(r, g, b);\n let h;\n let s;\n const l = (max + min) / 2;\n\n if (max === min) {\n h = s = 0; // achromatic\n } else {\n const d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n switch (max) {\n case r: h = (g - b) / d + (g < b ? 6 : 0); break;\n case g: h = (b - r) / d + 2; break;\n case b: h = (r - g) / d + 4; break;\n default: break;\n }\n h /= 6;\n }\n return [h, s, l, a];\n};\n\n /**\n * Converts an HSV color value to RGB. Conversion formula\n * adapted from http://en.wikipedia.org/wiki/HSV_color_space.\n * Assumes h, s, and v are contained in the set [0, 1] and\n * returns r, g, and b in the set [0, 255].\n *\n * @param Number h The hue\n * @param Number s The saturation\n * @param Number v The value\n * @return Array The RGB representation\n */\nconst hsvToRgb = (h, s, v, a = 1) => {\n let r;\n let g;\n let b;\n\n const i = Math.floor(h * 6);\n const f = h * 6 - i;\n const p = v * (1 - s);\n const q = v * (1 - f * s);\n const t = v * (1 - (1 - f) * s);\n\n switch (i % 6) {\n case 0: r = v; g = t; b = p; break;\n case 1: r = q; g = v; b = p; break;\n case 2: r = p; g = v; b = t; break;\n case 3: r = p; g = q; b = v; break;\n case 4: r = t; g = p; b = v; break;\n case 5: r = v; g = p; b = q; break;\n default: break;\n }\n\n return [r * 255, g * 255, b * 255, a];\n};\n\nconst hexToHsv = (hex) => {\n const shorthandRegex = /^#?([a-f\\d])([a-f\\d])([a-f\\d])$/i;\n hex = hex.replace(shorthandRegex, (m, r, g, b) => r + r + g + g + b + b);\n\n const result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex);\n return result ? rgbToHsv(parseInt(result[1], 16), parseInt(result[2], 16), parseInt(result[3], 16)) : '';\n};\n\nconst detectColor = (col) => {\n const matchRgb = /rgb\\((\\d{1,3}), (\\d{1,3}), (\\d{1,3})\\)/;\n const matchHsl = /hsl\\((\\d+),\\s*([\\d.]+)%,\\s*([\\d.]+)%\\)/g;\n\n // Source : https://gist.github.com/sethlopezme/d072b945969a3cc2cc11\n // eslint-disable-next-line\n const matchRgba = /rgba?\\(((25[0-5]|2[0-4]\\d|1\\d{1,2}|\\d\\d?)\\s*,\\s*?){2}(25[0-5]|2[0-4]\\d|1\\d{1,2}|\\d\\d?)\\s*,?\\s*([01]\\.?\\d*?)?\\)/;\n // eslint-disable-next-line\n const matchHsla = /^hsla\\((\\d.+),\\s*([\\d.]+)%,\\s*([\\d.]+)%,\\s*(\\d*(?:\\.\\d+)?)\\)$/;\n const matchHex = /^#([0-9a-f]{3}){1,2}$/i;\n\n if (matchRgb.test(col) || matchRgba.test(col)) {\n return 'rgb';\n } else if (matchHsl.test(col) || matchHsla.test(col)) {\n return 'hsl';\n } else if (matchHex.test(col)) {\n return 'hex';\n } return col;\n};\n\n/**\n *\n *\n * @param {*} model\n * @param {*} propModel\n *\n */\nconst filterPropagationModel = (model, propModel, measures) => {\n const { data, schema } = propModel.getData();\n let filteredModel;\n if (schema.length) {\n const fieldMap = model.getFieldsConfig();\n filteredModel = model.select((fields) => {\n const include = data.some(row => schema.every((propField, idx) => {\n if (!measures && (!(propField.name in fieldMap) ||\n fieldMap[propField.name].def.type === FieldType.MEASURE)) {\n return true;\n }\n return row[idx] === fields[propField.name].valueOf();\n }));\n return include;\n }, {\n saveChild: false\n });\n } else {\n filteredModel = propModel;\n }\n\n return filteredModel;\n};\n\nconst assembleModelFromIdentifiers = (model, identifiers) => {\n let schema = [];\n let data;\n const fieldMap = model.getFieldsConfig();\n if (identifiers.length) {\n const fields = identifiers[0];\n const len = fields.length;\n for (let i = 0; i < len; i++) {\n const field = fields[i];\n const fieldObj = fieldMap[field] && Object.assign({}, fieldMap[field].def);\n if (fieldObj) {\n schema.push(Object.assign(fieldObj));\n }\n }\n\n data = [];\n const header = identifiers[0];\n for (let i = 1; i < identifiers.length; i += 1) {\n const vals = identifiers[i];\n const temp = {};\n vals.forEach((fieldVal, cIdx) => {\n temp[header[cIdx]] = fieldVal;\n });\n data.push(temp);\n }\n } else {\n data = [];\n schema = [];\n }\n\n return new model.constructor(data, schema);\n};\n\n/**\n *\n *\n * @param {*} dataModel\n * @param {*} criteria\n *\n */\nconst getDataModelFromRange = (dataModel, criteria, mode) => {\n if (criteria === null) {\n return null;\n }\n const selFields = Object.keys(criteria);\n const selFn = fields => selFields.every((field) => {\n const val = fields[field].value;\n const range = criteria[field][0] instanceof Array ? criteria[field][0] : criteria[field];\n if (typeof range[0] === 'string') {\n return range.find(d => d === val) !== undefined;\n }\n return range ? val >= range[0] && val <= range[1] : true;\n });\n\n return dataModel.select(selFn, {\n saveChild: false,\n mode\n });\n};\n\n/**\n *\n *\n * @param {*} dataModel\n * @param {*} identifiers\n *\n */\nconst getDataModelFromIdentifiers = (dataModel, identifiers, mode) => {\n let filteredDataModel;\n if (identifiers instanceof Array) {\n const fieldsConfig = dataModel.getFieldsConfig();\n\n const dataArr = identifiers.slice(1, identifiers.length);\n if (identifiers instanceof Function) {\n filteredDataModel = identifiers(dataModel, {}, false);\n } else if (identifiers instanceof Array && identifiers[0].length) {\n const filteredSchema = identifiers[0].filter(d => d in fieldsConfig);\n filteredDataModel = dataModel.select((fields) => {\n let include = true;\n filteredSchema.forEach((propField, idx) => {\n const value = fields[propField].valueOf();\n const index = dataArr.findIndex(d => d[idx] === value);\n include = include && index !== -1;\n });\n return include;\n }, {\n saveChild: false,\n mode\n });\n } else {\n filteredDataModel = dataModel.select(() => false, {\n saveChild: false,\n mode\n });\n }\n } else {\n filteredDataModel = getDataModelFromRange(dataModel, identifiers, mode);\n }\n return filteredDataModel;\n};\n\n/**\n *\n *\n * @param {*} context\n * @param {*} listenerMap\n */\nconst registerListeners = (context, listenerMap, ...params) => {\n const propListenerMap = listenerMap(context, ...params);\n for (const key in propListenerMap) {\n if ({}.hasOwnProperty.call(propListenerMap, key)) {\n const namespace = params[0];\n let ns = null;\n if (namespace) {\n ns = namespace.local;\n }\n const mapObj = propListenerMap[key];\n const propType = mapObj.type;\n const props = mapObj.props;\n const listenerFn = mapObj.listener;\n context.store()[propType](props, listenerFn, false, {\n namespace: ns\n });\n }\n }\n};\n\nconst isValidValue = value => !isNaN(value) && value !== -Infinity && value !== Infinity;\n/**\n *\n *\n * @param {*} str\n *\n */\nconst escapeHTML = (str) => {\n const htmlEscapes = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": ''',\n '/': '/'\n };\n const htmlEscaper = /[&<>\"'/]/g;\n return (`${str}`).replace(htmlEscaper, match => htmlEscapes[match]);\n};\n\n/**\n *\n *\n * @param {*} arr\n */\nconst transposeArray = arr => arr[0].map((col, i) => arr.map(row => row[i]));\nconst toArray = arr => (arr instanceof Array ? arr : [arr]);\nconst extendsClass = (cls, extendsFrom, found) => {\n if (!cls) {\n return false;\n }\n const prototype = cls.prototype;\n if (prototype instanceof extendsFrom) {\n found = true;\n } else {\n found = extendsClass(prototype, extendsFrom, found);\n }\n return found;\n};\n\n/**\n *\n * @param {*} dm1\n * @param {*} dm2\n */\nconst concatModels = (dm1, dm2) => {\n const dataObj1 = dm1.getData();\n const dataObj2 = dm2.getData();\n const data1 = dataObj1.data;\n const data2 = dataObj2.data;\n const schema1 = dataObj1.schema;\n const schema2 = dataObj2.schema;\n const tuples1 = {};\n const tuples2 = {};\n const commonTuples = {};\n for (let i = 0; i < data1.length; i++) {\n for (let ii = 0; ii < data2.length; ii++) {\n const row1 = data1[i];\n const row2 = data2[ii];\n const dim1Values = row1.filter((d, idx) => schema1[idx].type === FieldType.DIMENSION);\n const dim2Values = row2.filter((d, idx) => schema2[idx].type === FieldType.DIMENSION);\n const allDimSame = dim1Values.every(value => dim2Values.indexOf(value) !== -1);\n if (allDimSame) {\n const key = dim1Values.join();\n !commonTuples[key] && (commonTuples[key] = {});\n row1.forEach((value, idx) => {\n commonTuples[key][schema1[idx].name] = value;\n });\n row2.forEach((value, idx) => {\n commonTuples[key][schema2[idx].name] = value;\n });\n } else {\n const dm1Key = dim1Values.join();\n const dm2Key = dim2Values.join();\n if (!commonTuples[dm1Key] && !commonTuples[dm2Key]) {\n !tuples1[dm1Key] && (tuples1[dm1Key] = {});\n !tuples2[dm2Key] && (tuples2[dm2Key] = {});\n row1.forEach((value, idx) => {\n tuples1[dm1Key][schema1[idx].name] = value;\n });\n row2.forEach((value, idx) => {\n tuples2[dm2Key][schema2[idx].name] = value;\n });\n }\n }\n }\n }\n\n const commonSchema = [...schema1, ...schema2.filter(s2 => schema1.findIndex(s1 => s1.name === s2.name) === -1)];\n const data = [...Object.values(tuples1), ...Object.values(tuples2), ...Object.values(commonTuples)];\n return [data, commonSchema];\n};\n\nconst getSymbol = type => symbol().type(symbolFns[type]);\n\nconst stackOrders = {\n [STACK_CONFIG.ORDER_NONE]: stackOrderNone,\n [STACK_CONFIG.ORDER_ASCENDING]: stackOrderAscending,\n [STACK_CONFIG.ORDER_DESCENDING]: stackOrderDescending\n};\nconst stackOffsets = {\n [STACK_CONFIG.OFFSET_DIVERGING]: stackOffsetDiverging,\n [STACK_CONFIG.OFFSET_NONE]: stackOffsetNone,\n [STACK_CONFIG.OFFSET_EXPAND]: stackOffsetExpand,\n [STACK_CONFIG.OFFSET_WIGGLE]: stackOffsetWiggle\n};\n\n// eslint-disable-next-line require-jsdoc\nconst stack = params => d3Stack().keys(params.keys).offset(stackOffsets[params.offset])\n .order(stackOrders[params.order])(params.data);\n\n/**\n * Groups the data into a hierarchical tree structure based on one or more fields.\n * @param { Object } params Configuration properties for nesting data\n * @param { Array. } params.data Data which needs to be grouped\n * @param { Array. } params.keys Field indices by which the data will be grouped\n * @return { Array. } Grouped data array\n */\nconst nestCollection = (params) => {\n const nestFn = nest();\n params.keys.forEach(key => nestFn.key(d => d[key]));\n return nestFn.entries(params.data);\n};\n\nconst pathInterpolators = {\n curveLinear,\n curveStepAfter,\n curveStepBefore,\n curveStep,\n curveCatmullRom,\n stepAfter: curveStepAfter,\n catmullRom: curveCatmullRom,\n step: curveStep,\n stepBefore: curveStepBefore,\n linear: curveLinear\n};\n\nconst Symbols = {\n axisLeft,\n axisRight,\n axisTop,\n axisBottom,\n line,\n area,\n pie,\n arc,\n nest\n};\n\nconst Scales = {\n band: scaleBand\n};\n\nconst getSmallestDiff = (points) => {\n points = points.sort((a, b) => a - b);\n let minDiff = points[1] - points[0];\n for (let i = 2; i < points.length; i++) {\n minDiff = Math.min(minDiff, points[i] - points[i - 1]);\n }\n\n return minDiff;\n};\n\nconst timeFormats = {\n millisecond: '%A, %b %e, %H:%M:%S.%L',\n second: '%A, %b %e, %H:%M:%S',\n minute: '%A, %b %e, %H:%M',\n hour: '%A, %b %e, %H:%M',\n day: '%A, %b %e, %Y',\n month: '%B %Y',\n year: '%Y'\n};\n\nconst timeDurations = [\n ['millisecond', 'second', 'minute', 'hour', 'day', 'month', 'year'],\n [1, 1000, 60000, 3600000, 86400000, 2592000000, 31536000000]\n];\n\nconst getNearestInterval = (interval) => {\n const index = getClosestIndexOf(timeDurations[1], interval);\n return timeDurations[0][index];\n};\n\nconst formatTemporal = (value, interval) => {\n const nearestInterval = getNearestInterval(interval);\n return DateTimeFormatter.formatAs(value, timeFormats[nearestInterval]);\n};\n\nconst temporalFields = (dataModel) => {\n const filteredFields = {};\n Object.entries(dataModel.getFieldspace().getDimension()).forEach(([fieldName, fieldObj]) => {\n if (fieldObj.subtype() === DimensionSubtype.TEMPORAL) {\n filteredFields[fieldName] = fieldObj;\n }\n });\n return filteredFields;\n};\n\nconst require = (lookupWhat, lookupDetails) => ({\n resolvable: (store) => {\n const lookupTarget = store[lookupWhat];\n const depArr = lookupDetails.slice(0, lookupDetails.length - 1);\n const fn = lookupDetails[lookupDetails.length - 1]; // fn\n\n const deps = depArr.map(str => lookupTarget[str]);\n return {\n fn: fn(...deps),\n depArr\n };\n }\n});\n\nconst nextAnimFrame = window.requestAnimationFrame || window.webkitRequestAnimationFrame ||\n window.mozRequestAnimationFrame || window.oRequestAnimationFrame || window.msRequestAnimationFrame ||\n function (callback) {\n setTimeout(callback, 16);\n };\n\nconst getValueParser = config => (val) => {\n if (val instanceof InvalidAwareTypes) {\n return val in config ? config[val] : `${val}`;\n }\n return val;\n};\n\nconst retrieveNearestGroupByReducers = (dataModel, ...measureFieldNames) => {\n const filteredReducers = {};\n if (dataModel instanceof DataModel) {\n const derivations = [...dataModel.getDerivations().reverse(), ...dataModel.getAncestorDerivations().reverse()];\n const nearestReducers = defaultValue(\n getObjProp(derivations.find(derv => derv.op === DM_DERIVATIVES.GROUPBY), 'criteria'), {});\n\n const measures = dataModel.getFieldspace().getMeasure();\n measureFieldNames = measureFieldNames.length ? measureFieldNames : Object.keys(measures);\n measureFieldNames.forEach((measureName) => {\n if (nearestReducers[measureName]) {\n filteredReducers[measureName] = nearestReducers[measureName];\n } else {\n const measureField = measures[measureName];\n if (measureField) {\n filteredReducers[measureName] = measureField.defAggFn();\n }\n }\n });\n }\n return filteredReducers;\n};\n\nconst retrieveFieldDisplayName = (dm, fieldName) => dm.getFieldspace().fieldsObj()[fieldName].displayName();\n/**\n * Fetches the nearest sort operation details by traversing the chain of parent DataModels\n * @param {Object} dataModel Instance of DataModel\n *\n * @return {Array|null} sort criteria, null if no sort operation found\n */\nconst nearestSortingDetails = (dataModel) => {\n const allDerivations = [...dataModel.getAncestorDerivations(), ...dataModel.getDerivations()];\n const nearestSortDerivation = allDerivations.reverse().find(derivation => derivation.op === DM_DERIVATIVES.SORT);\n\n return nearestSortDerivation ? nearestSortDerivation.criteria : null;\n};\n\nexport {\n getValueParser,\n require,\n Scales,\n Symbols,\n pathInterpolators,\n stack,\n nestCollection,\n getSymbol,\n transformColors,\n detectColor,\n hexToHsv,\n hslToRgb,\n rgbToHsv,\n hsvToRgb,\n concatModels,\n toArray,\n angleToRadian,\n escapeHTML,\n generateGetterSetters,\n getArraySum,\n interpolator,\n piecewiseInterpolator,\n getDataModelFromIdentifiers,\n getDataModelFromRange,\n colorInterpolator,\n numberInterpolator,\n ERROR_MSG,\n reqAnimFrame,\n nextAnimFrame,\n filterPropagationModel,\n transposeArray,\n cancelAnimFrame,\n getMax,\n getMin,\n getDomainFromData,\n getUniqueId,\n mergeRecursive,\n unionDomain,\n symbolFns,\n easeFns,\n clone,\n isEqual,\n interpolateArray,\n getMinPoint,\n defaultValue,\n getMaxPoint,\n getClosestIndexOf,\n Voronoi,\n checkExistence,\n sanitizeIP,\n getMinDiff,\n capitalizeFirst,\n getWindow,\n getQualifiedClassName,\n Store,\n getDependencyOrder,\n objectIterator,\n intSanitizer,\n transactor,\n enableChainedTransaction,\n isHTMLElem,\n isSimpleObject,\n nextFrame,\n registerListeners,\n replaceCSSPrefix,\n getObjProp,\n extendsClass,\n assembleModelFromIdentifiers,\n isValidValue,\n hslInterpolator,\n getSmallestDiff,\n getNearestValue,\n retrieveNearestGroupByReducers,\n nearestSortingDetails,\n createSelection,\n formatTemporal,\n temporalFields,\n retrieveFieldDisplayName,\n sanitizeDomainWhenEqual\n};\n","export function linear(t) {\n return +t;\n}\n","export function circleIn(t) {\n return 1 - Math.sqrt(1 - t * t);\n}\n\nexport function circleOut(t) {\n return Math.sqrt(1 - --t * t);\n}\n\nexport function circleInOut(t) {\n return ((t *= 2) <= 1 ? 1 - Math.sqrt(1 - t * t) : Math.sqrt(1 - (t -= 2) * t) + 1) / 2;\n}\n","import Selection from './selection';\n/**\n * This function applies a selection operation on a data array.\n *\n * @export\n * @param {Array} [data=[]] The data array to be observed.\n * @return {Selection} Instance of a selection.\n */\nexport default function dataSelect (idFn) {\n return new Selection(idFn);\n}\n\n","import {path} from \"d3-path\";\nimport circle from \"./symbol/circle\";\nimport cross from \"./symbol/cross\";\nimport diamond from \"./symbol/diamond\";\nimport star from \"./symbol/star\";\nimport square from \"./symbol/square\";\nimport triangle from \"./symbol/triangle\";\nimport wye from \"./symbol/wye\";\nimport constant from \"./constant\";\n\nexport var symbols = [\n circle,\n cross,\n diamond,\n square,\n star,\n triangle,\n wye\n];\n\nexport default function() {\n var type = constant(circle),\n size = constant(64),\n context = null;\n\n function symbol() {\n var buffer;\n if (!context) context = buffer = path();\n type.apply(this, arguments).draw(context, +size.apply(this, arguments));\n if (buffer) return context = null, buffer + \"\" || null;\n }\n\n symbol.type = function(_) {\n return arguments.length ? (type = typeof _ === \"function\" ? _ : constant(_), symbol) : type;\n };\n\n symbol.size = function(_) {\n return arguments.length ? (size = typeof _ === \"function\" ? _ : constant(+_), symbol) : size;\n };\n\n symbol.context = function(_) {\n return arguments.length ? (context = _ == null ? null : _, symbol) : context;\n };\n\n return symbol;\n}\n","import ascending from \"./ascending\";\n\nexport default function(series) {\n return ascending(series).reverse();\n}\n","export default function(series, order) {\n if (!((n = series.length) > 0)) return;\n for (var i, j = 0, d, dy, yp, yn, n, m = series[order[0]].length; j < m; ++j) {\n for (yp = yn = 0, i = 0; i < n; ++i) {\n if ((dy = (d = series[order[i]][j])[1] - d[0]) >= 0) {\n d[0] = yp, d[1] = yp += dy;\n } else if (dy < 0) {\n d[1] = yn, d[0] = yn += dy;\n } else {\n d[0] = yp;\n }\n }\n }\n}\n","import none from \"./none\";\n\nexport default function(series, order) {\n if (!((n = series.length) > 0)) return;\n for (var i, n, j = 0, m = series[0].length, y; j < m; ++j) {\n for (y = i = 0; i < n; ++i) y += series[i][j][1] || 0;\n if (y) for (i = 0; i < n; ++i) series[i][j][1] /= y;\n }\n none(series, order);\n}\n","import none from \"./none\";\n\nexport default function(series, order) {\n if (!((n = series.length) > 0) || !((m = (s0 = series[order[0]]).length) > 0)) return;\n for (var y = 0, j = 1, s0, m, n; j < m; ++j) {\n for (var i = 0, s1 = 0, s2 = 0; i < n; ++i) {\n var si = series[order[i]],\n sij0 = si[j][1] || 0,\n sij1 = si[j - 1][1] || 0,\n s3 = (sij0 - sij1) / 2;\n for (var k = 0; k < i; ++k) {\n var sk = series[order[k]],\n skj0 = sk[j][1] || 0,\n skj1 = sk[j - 1][1] || 0;\n s3 += skj0 - skj1;\n }\n s1 += sij0, s2 += s3 * sij0;\n }\n s0[j - 1][1] += s0[j - 1][0] = y;\n if (s1) y -= s2 / s1;\n }\n s0[j - 1][1] += s0[j - 1][0] = y;\n none(series, order);\n}\n","import constant from \"./constant\";\nimport descending from \"./descending\";\nimport identity from \"./identity\";\nimport {tau} from \"./math\";\n\nexport default function() {\n var value = identity,\n sortValues = descending,\n sort = null,\n startAngle = constant(0),\n endAngle = constant(tau),\n padAngle = constant(0);\n\n function pie(data) {\n var i,\n n = data.length,\n j,\n k,\n sum = 0,\n index = new Array(n),\n arcs = new Array(n),\n a0 = +startAngle.apply(this, arguments),\n da = Math.min(tau, Math.max(-tau, endAngle.apply(this, arguments) - a0)),\n a1,\n p = Math.min(Math.abs(da) / n, padAngle.apply(this, arguments)),\n pa = p * (da < 0 ? -1 : 1),\n v;\n\n for (i = 0; i < n; ++i) {\n if ((v = arcs[index[i] = i] = +value(data[i], i, data)) > 0) {\n sum += v;\n }\n }\n\n // Optionally sort the arcs by previously-computed values or by data.\n if (sortValues != null) index.sort(function(i, j) { return sortValues(arcs[i], arcs[j]); });\n else if (sort != null) index.sort(function(i, j) { return sort(data[i], data[j]); });\n\n // Compute the arcs! They are stored in the original data's order.\n for (i = 0, k = sum ? (da - n * pa) / sum : 0; i < n; ++i, a0 = a1) {\n j = index[i], v = arcs[j], a1 = a0 + (v > 0 ? v * k : 0) + pa, arcs[j] = {\n data: data[j],\n index: i,\n value: v,\n startAngle: a0,\n endAngle: a1,\n padAngle: p\n };\n }\n\n return arcs;\n }\n\n pie.value = function(_) {\n return arguments.length ? (value = typeof _ === \"function\" ? _ : constant(+_), pie) : value;\n };\n\n pie.sortValues = function(_) {\n return arguments.length ? (sortValues = _, sort = null, pie) : sortValues;\n };\n\n pie.sort = function(_) {\n return arguments.length ? (sort = _, sortValues = null, pie) : sort;\n };\n\n pie.startAngle = function(_) {\n return arguments.length ? (startAngle = typeof _ === \"function\" ? _ : constant(+_), pie) : startAngle;\n };\n\n pie.endAngle = function(_) {\n return arguments.length ? (endAngle = typeof _ === \"function\" ? _ : constant(+_), pie) : endAngle;\n };\n\n pie.padAngle = function(_) {\n return arguments.length ? (padAngle = typeof _ === \"function\" ? _ : constant(+_), pie) : padAngle;\n };\n\n return pie;\n}\n","export var xhtml = \"http://www.w3.org/1999/xhtml\";\n\nexport default {\n svg: \"http://www.w3.org/2000/svg\",\n xhtml: xhtml,\n xlink: \"http://www.w3.org/1999/xlink\",\n xml: \"http://www.w3.org/XML/1998/namespace\",\n xmlns: \"http://www.w3.org/2000/xmlns/\"\n};\n","import namespaces from \"./namespaces\";\n\nexport default function(name) {\n var prefix = name += \"\", i = prefix.indexOf(\":\");\n if (i >= 0 && (prefix = name.slice(0, i)) !== \"xmlns\") name = name.slice(i + 1);\n return namespaces.hasOwnProperty(prefix) ? {space: namespaces[prefix], local: name} : name;\n}\n","import namespace from \"./namespace\";\nimport {xhtml} from \"./namespaces\";\n\nfunction creatorInherit(name) {\n return function() {\n var document = this.ownerDocument,\n uri = this.namespaceURI;\n return uri === xhtml && document.documentElement.namespaceURI === xhtml\n ? document.createElement(name)\n : document.createElementNS(uri, name);\n };\n}\n\nfunction creatorFixed(fullname) {\n return function() {\n return this.ownerDocument.createElementNS(fullname.space, fullname.local);\n };\n}\n\nexport default function(name) {\n var fullname = namespace(name);\n return (fullname.local\n ? creatorFixed\n : creatorInherit)(fullname);\n}\n","function none() {}\n\nexport default function(selector) {\n return selector == null ? none : function() {\n return this.querySelector(selector);\n };\n}\n","function empty() {\n return [];\n}\n\nexport default function(selector) {\n return selector == null ? empty : function() {\n return this.querySelectorAll(selector);\n };\n}\n","export default function(selector) {\n return function() {\n return this.matches(selector);\n };\n}\n","export default function(update) {\n return new Array(update.length);\n}\n","import sparse from \"./sparse\";\nimport {Selection} from \"./index\";\n\nexport default function() {\n return new Selection(this._enter || this._groups.map(sparse), this._parents);\n}\n\nexport function EnterNode(parent, datum) {\n this.ownerDocument = parent.ownerDocument;\n this.namespaceURI = parent.namespaceURI;\n this._next = null;\n this._parent = parent;\n this.__data__ = datum;\n}\n\nEnterNode.prototype = {\n constructor: EnterNode,\n appendChild: function(child) { return this._parent.insertBefore(child, this._next); },\n insertBefore: function(child, next) { return this._parent.insertBefore(child, next); },\n querySelector: function(selector) { return this._parent.querySelector(selector); },\n querySelectorAll: function(selector) { return this._parent.querySelectorAll(selector); }\n};\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","import {Selection} from \"./index\";\nimport {EnterNode} from \"./enter\";\nimport constant from \"../constant\";\n\nvar keyPrefix = \"$\"; // Protect against keys like “__proto__”.\n\nfunction bindIndex(parent, group, enter, update, exit, data) {\n var i = 0,\n node,\n groupLength = group.length,\n dataLength = data.length;\n\n // Put any non-null nodes that fit into update.\n // Put any null nodes into enter.\n // Put any remaining data into enter.\n for (; i < dataLength; ++i) {\n if (node = group[i]) {\n node.__data__ = data[i];\n update[i] = node;\n } else {\n enter[i] = new EnterNode(parent, data[i]);\n }\n }\n\n // Put any non-null nodes that don’t fit into exit.\n for (; i < groupLength; ++i) {\n if (node = group[i]) {\n exit[i] = node;\n }\n }\n}\n\nfunction bindKey(parent, group, enter, update, exit, data, key) {\n var i,\n node,\n nodeByKeyValue = {},\n groupLength = group.length,\n dataLength = data.length,\n keyValues = new Array(groupLength),\n keyValue;\n\n // Compute the key for each node.\n // If multiple nodes have the same key, the duplicates are added to exit.\n for (i = 0; i < groupLength; ++i) {\n if (node = group[i]) {\n keyValues[i] = keyValue = keyPrefix + key.call(node, node.__data__, i, group);\n if (keyValue in nodeByKeyValue) {\n exit[i] = node;\n } else {\n nodeByKeyValue[keyValue] = node;\n }\n }\n }\n\n // Compute the key for each datum.\n // If there a node associated with this key, join and add it to update.\n // If there is not (or the key is a duplicate), add it to enter.\n for (i = 0; i < dataLength; ++i) {\n keyValue = keyPrefix + key.call(parent, data[i], i, data);\n if (node = nodeByKeyValue[keyValue]) {\n update[i] = node;\n node.__data__ = data[i];\n nodeByKeyValue[keyValue] = null;\n } else {\n enter[i] = new EnterNode(parent, data[i]);\n }\n }\n\n // Add any remaining nodes that were not bound to data to exit.\n for (i = 0; i < groupLength; ++i) {\n if ((node = group[i]) && (nodeByKeyValue[keyValues[i]] === node)) {\n exit[i] = node;\n }\n }\n}\n\nexport default function(value, key) {\n if (!value) {\n data = new Array(this.size()), j = -1;\n this.each(function(d) { data[++j] = d; });\n return data;\n }\n\n var bind = key ? bindKey : bindIndex,\n parents = this._parents,\n groups = this._groups;\n\n if (typeof value !== \"function\") value = constant(value);\n\n for (var m = groups.length, update = new Array(m), enter = new Array(m), exit = new Array(m), j = 0; j < m; ++j) {\n var parent = parents[j],\n group = groups[j],\n groupLength = group.length,\n data = value.call(parent, parent && parent.__data__, j, parents),\n dataLength = data.length,\n enterGroup = enter[j] = new Array(dataLength),\n updateGroup = update[j] = new Array(dataLength),\n exitGroup = exit[j] = new Array(groupLength);\n\n bind(parent, group, enterGroup, updateGroup, exitGroup, data, key);\n\n // Now connect the enter nodes to their following update node, such that\n // appendChild can insert the materialized enter node before this node,\n // rather than at the end of the parent node.\n for (var i0 = 0, i1 = 0, previous, next; i0 < dataLength; ++i0) {\n if (previous = enterGroup[i0]) {\n if (i0 >= i1) i1 = i0 + 1;\n while (!(next = updateGroup[i1]) && ++i1 < dataLength);\n previous._next = next || null;\n }\n }\n }\n\n update = new Selection(update, parents);\n update._enter = enter;\n update._exit = exit;\n return update;\n}\n","import {Selection} from \"./index\";\n\nexport default function(compare) {\n if (!compare) compare = ascending;\n\n function compareNode(a, b) {\n return a && b ? compare(a.__data__, b.__data__) : !a - !b;\n }\n\n for (var groups = this._groups, m = groups.length, sortgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, sortgroup = sortgroups[j] = new Array(n), node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n sortgroup[i] = node;\n }\n }\n sortgroup.sort(compareNode);\n }\n\n return new Selection(sortgroups, this._parents).order();\n}\n\nfunction ascending(a, b) {\n return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n","import namespace from \"../namespace\";\n\nfunction attrRemove(name) {\n return function() {\n this.removeAttribute(name);\n };\n}\n\nfunction attrRemoveNS(fullname) {\n return function() {\n this.removeAttributeNS(fullname.space, fullname.local);\n };\n}\n\nfunction attrConstant(name, value) {\n return function() {\n this.setAttribute(name, value);\n };\n}\n\nfunction attrConstantNS(fullname, value) {\n return function() {\n this.setAttributeNS(fullname.space, fullname.local, value);\n };\n}\n\nfunction attrFunction(name, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) this.removeAttribute(name);\n else this.setAttribute(name, v);\n };\n}\n\nfunction attrFunctionNS(fullname, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) this.removeAttributeNS(fullname.space, fullname.local);\n else this.setAttributeNS(fullname.space, fullname.local, v);\n };\n}\n\nexport default function(name, value) {\n var fullname = namespace(name);\n\n if (arguments.length < 2) {\n var node = this.node();\n return fullname.local\n ? node.getAttributeNS(fullname.space, fullname.local)\n : node.getAttribute(fullname);\n }\n\n return this.each((value == null\n ? (fullname.local ? attrRemoveNS : attrRemove) : (typeof value === \"function\"\n ? (fullname.local ? attrFunctionNS : attrFunction)\n : (fullname.local ? attrConstantNS : attrConstant)))(fullname, value));\n}\n","export default function(node) {\n return (node.ownerDocument && node.ownerDocument.defaultView) // node is a Node\n || (node.document && node) // node is a Window\n || node.defaultView; // node is a Document\n}\n","import defaultView from \"../window\";\n\nfunction styleRemove(name) {\n return function() {\n this.style.removeProperty(name);\n };\n}\n\nfunction styleConstant(name, value, priority) {\n return function() {\n this.style.setProperty(name, value, priority);\n };\n}\n\nfunction styleFunction(name, value, priority) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) this.style.removeProperty(name);\n else this.style.setProperty(name, v, priority);\n };\n}\n\nexport default function(name, value, priority) {\n return arguments.length > 1\n ? this.each((value == null\n ? styleRemove : typeof value === \"function\"\n ? styleFunction\n : styleConstant)(name, value, priority == null ? \"\" : priority))\n : styleValue(this.node(), name);\n}\n\nexport function styleValue(node, name) {\n return node.style.getPropertyValue(name)\n || defaultView(node).getComputedStyle(node, null).getPropertyValue(name);\n}\n","function classArray(string) {\n return string.trim().split(/^|\\s+/);\n}\n\nfunction classList(node) {\n return node.classList || new ClassList(node);\n}\n\nfunction ClassList(node) {\n this._node = node;\n this._names = classArray(node.getAttribute(\"class\") || \"\");\n}\n\nClassList.prototype = {\n add: function(name) {\n var i = this._names.indexOf(name);\n if (i < 0) {\n this._names.push(name);\n this._node.setAttribute(\"class\", this._names.join(\" \"));\n }\n },\n remove: function(name) {\n var i = this._names.indexOf(name);\n if (i >= 0) {\n this._names.splice(i, 1);\n this._node.setAttribute(\"class\", this._names.join(\" \"));\n }\n },\n contains: function(name) {\n return this._names.indexOf(name) >= 0;\n }\n};\n\nfunction classedAdd(node, names) {\n var list = classList(node), i = -1, n = names.length;\n while (++i < n) list.add(names[i]);\n}\n\nfunction classedRemove(node, names) {\n var list = classList(node), i = -1, n = names.length;\n while (++i < n) list.remove(names[i]);\n}\n\nfunction classedTrue(names) {\n return function() {\n classedAdd(this, names);\n };\n}\n\nfunction classedFalse(names) {\n return function() {\n classedRemove(this, names);\n };\n}\n\nfunction classedFunction(names, value) {\n return function() {\n (value.apply(this, arguments) ? classedAdd : classedRemove)(this, names);\n };\n}\n\nexport default function(name, value) {\n var names = classArray(name + \"\");\n\n if (arguments.length < 2) {\n var list = classList(this.node()), i = -1, n = names.length;\n while (++i < n) if (!list.contains(names[i])) return false;\n return true;\n }\n\n return this.each((typeof value === \"function\"\n ? classedFunction : value\n ? classedTrue\n : classedFalse)(names, value));\n}\n","function textRemove() {\n this.textContent = \"\";\n}\n\nfunction textConstant(value) {\n return function() {\n this.textContent = value;\n };\n}\n\nfunction textFunction(value) {\n return function() {\n var v = value.apply(this, arguments);\n this.textContent = v == null ? \"\" : v;\n };\n}\n\nexport default function(value) {\n return arguments.length\n ? this.each(value == null\n ? textRemove : (typeof value === \"function\"\n ? textFunction\n : textConstant)(value))\n : this.node().textContent;\n}\n","function htmlRemove() {\n this.innerHTML = \"\";\n}\n\nfunction htmlConstant(value) {\n return function() {\n this.innerHTML = value;\n };\n}\n\nfunction htmlFunction(value) {\n return function() {\n var v = value.apply(this, arguments);\n this.innerHTML = v == null ? \"\" : v;\n };\n}\n\nexport default function(value) {\n return arguments.length\n ? this.each(value == null\n ? htmlRemove : (typeof value === \"function\"\n ? htmlFunction\n : htmlConstant)(value))\n : this.node().innerHTML;\n}\n","function raise() {\n if (this.nextSibling) this.parentNode.appendChild(this);\n}\n\nexport default function() {\n return this.each(raise);\n}\n","function lower() {\n if (this.previousSibling) this.parentNode.insertBefore(this, this.parentNode.firstChild);\n}\n\nexport default function() {\n return this.each(lower);\n}\n","import creator from \"../creator\";\nimport selector from \"../selector\";\n\nfunction constantNull() {\n return null;\n}\n\nexport default function(name, before) {\n var create = typeof name === \"function\" ? name : creator(name),\n select = before == null ? constantNull : typeof before === \"function\" ? before : selector(before);\n return this.select(function() {\n return this.insertBefore(create.apply(this, arguments), select.apply(this, arguments) || null);\n });\n}\n","function remove() {\n var parent = this.parentNode;\n if (parent) parent.removeChild(this);\n}\n\nexport default function() {\n return this.each(remove);\n}\n","function selection_cloneShallow() {\n return this.parentNode.insertBefore(this.cloneNode(false), this.nextSibling);\n}\n\nfunction selection_cloneDeep() {\n return this.parentNode.insertBefore(this.cloneNode(true), this.nextSibling);\n}\n\nexport default function(deep) {\n return this.select(deep ? selection_cloneDeep : selection_cloneShallow);\n}\n","var filterEvents = {};\n\nexport var event = null;\n\nif (typeof document !== \"undefined\") {\n var element = document.documentElement;\n if (!(\"onmouseenter\" in element)) {\n filterEvents = {mouseenter: \"mouseover\", mouseleave: \"mouseout\"};\n }\n}\n\nfunction filterContextListener(listener, index, group) {\n listener = contextListener(listener, index, group);\n return function(event) {\n var related = event.relatedTarget;\n if (!related || (related !== this && !(related.compareDocumentPosition(this) & 8))) {\n listener.call(this, event);\n }\n };\n}\n\nfunction contextListener(listener, index, group) {\n return function(event1) {\n var event0 = event; // Events can be reentrant (e.g., focus).\n event = event1;\n try {\n listener.call(this, this.__data__, index, group);\n } finally {\n event = event0;\n }\n };\n}\n\nfunction parseTypenames(typenames) {\n return typenames.trim().split(/^|\\s+/).map(function(t) {\n var name = \"\", i = t.indexOf(\".\");\n if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);\n return {type: t, name: name};\n });\n}\n\nfunction onRemove(typename) {\n return function() {\n var on = this.__on;\n if (!on) return;\n for (var j = 0, i = -1, m = on.length, o; j < m; ++j) {\n if (o = on[j], (!typename.type || o.type === typename.type) && o.name === typename.name) {\n this.removeEventListener(o.type, o.listener, o.capture);\n } else {\n on[++i] = o;\n }\n }\n if (++i) on.length = i;\n else delete this.__on;\n };\n}\n\nfunction onAdd(typename, value, capture) {\n var wrap = filterEvents.hasOwnProperty(typename.type) ? filterContextListener : contextListener;\n return function(d, i, group) {\n var on = this.__on, o, listener = wrap(value, i, group);\n if (on) for (var j = 0, m = on.length; j < m; ++j) {\n if ((o = on[j]).type === typename.type && o.name === typename.name) {\n this.removeEventListener(o.type, o.listener, o.capture);\n this.addEventListener(o.type, o.listener = listener, o.capture = capture);\n o.value = value;\n return;\n }\n }\n this.addEventListener(typename.type, listener, capture);\n o = {type: typename.type, name: typename.name, value: value, listener: listener, capture: capture};\n if (!on) this.__on = [o];\n else on.push(o);\n };\n}\n\nexport default function(typename, value, capture) {\n var typenames = parseTypenames(typename + \"\"), i, n = typenames.length, t;\n\n if (arguments.length < 2) {\n var on = this.node().__on;\n if (on) for (var j = 0, m = on.length, o; j < m; ++j) {\n for (i = 0, o = on[j]; i < n; ++i) {\n if ((t = typenames[i]).type === o.type && t.name === o.name) {\n return o.value;\n }\n }\n }\n return;\n }\n\n on = value ? onAdd : onRemove;\n if (capture == null) capture = false;\n for (i = 0; i < n; ++i) this.each(on(typenames[i], value, capture));\n return this;\n}\n\nexport function customEvent(event1, listener, that, args) {\n var event0 = event;\n event1.sourceEvent = event;\n event = event1;\n try {\n return listener.apply(that, args);\n } finally {\n event = event0;\n }\n}\n","import defaultView from \"../window\";\n\nfunction dispatchEvent(node, type, params) {\n var window = defaultView(node),\n event = window.CustomEvent;\n\n if (typeof event === \"function\") {\n event = new event(type, params);\n } else {\n event = window.document.createEvent(\"Event\");\n if (params) event.initEvent(type, params.bubbles, params.cancelable), event.detail = params.detail;\n else event.initEvent(type, false, false);\n }\n\n node.dispatchEvent(event);\n}\n\nfunction dispatchConstant(type, params) {\n return function() {\n return dispatchEvent(this, type, params);\n };\n}\n\nfunction dispatchFunction(type, params) {\n return function() {\n return dispatchEvent(this, type, params.apply(this, arguments));\n };\n}\n\nexport default function(type, params) {\n return this.each((typeof params === \"function\"\n ? dispatchFunction\n : dispatchConstant)(type, params));\n}\n","import selection_select from \"./select\";\nimport selection_selectAll from \"./selectAll\";\nimport selection_filter from \"./filter\";\nimport selection_data from \"./data\";\nimport selection_enter from \"./enter\";\nimport selection_exit from \"./exit\";\nimport selection_join from \"./join\";\nimport selection_merge from \"./merge\";\nimport selection_order from \"./order\";\nimport selection_sort from \"./sort\";\nimport selection_call from \"./call\";\nimport selection_nodes from \"./nodes\";\nimport selection_node from \"./node\";\nimport selection_size from \"./size\";\nimport selection_empty from \"./empty\";\nimport selection_each from \"./each\";\nimport selection_attr from \"./attr\";\nimport selection_style from \"./style\";\nimport selection_property from \"./property\";\nimport selection_classed from \"./classed\";\nimport selection_text from \"./text\";\nimport selection_html from \"./html\";\nimport selection_raise from \"./raise\";\nimport selection_lower from \"./lower\";\nimport selection_append from \"./append\";\nimport selection_insert from \"./insert\";\nimport selection_remove from \"./remove\";\nimport selection_clone from \"./clone\";\nimport selection_datum from \"./datum\";\nimport selection_on from \"./on\";\nimport selection_dispatch from \"./dispatch\";\n\nexport var root = [null];\n\nexport function Selection(groups, parents) {\n this._groups = groups;\n this._parents = parents;\n}\n\nfunction selection() {\n return new Selection([[document.documentElement]], root);\n}\n\nSelection.prototype = selection.prototype = {\n constructor: Selection,\n select: selection_select,\n selectAll: selection_selectAll,\n filter: selection_filter,\n data: selection_data,\n enter: selection_enter,\n exit: selection_exit,\n join: selection_join,\n merge: selection_merge,\n order: selection_order,\n sort: selection_sort,\n call: selection_call,\n nodes: selection_nodes,\n node: selection_node,\n size: selection_size,\n empty: selection_empty,\n each: selection_each,\n attr: selection_attr,\n style: selection_style,\n property: selection_property,\n classed: selection_classed,\n text: selection_text,\n html: selection_html,\n raise: selection_raise,\n lower: selection_lower,\n append: selection_append,\n insert: selection_insert,\n remove: selection_remove,\n clone: selection_clone,\n datum: selection_datum,\n on: selection_on,\n dispatch: selection_dispatch\n};\n\nexport default selection;\n","import {Selection} from \"./index\";\nimport selector from \"../selector\";\n\nexport default function(select) {\n if (typeof select !== \"function\") select = selector(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) {\n if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) {\n if (\"__data__\" in node) subnode.__data__ = node.__data__;\n subgroup[i] = subnode;\n }\n }\n }\n\n return new Selection(subgroups, this._parents);\n}\n","import {Selection} from \"./index\";\nimport selectorAll from \"../selectorAll\";\n\nexport default function(select) {\n if (typeof select !== \"function\") select = selectorAll(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n subgroups.push(select.call(node, node.__data__, i, group));\n parents.push(node);\n }\n }\n }\n\n return new Selection(subgroups, parents);\n}\n","import {Selection} from \"./index\";\nimport matcher from \"../matcher\";\n\nexport default function(match) {\n if (typeof match !== \"function\") match = matcher(match);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) {\n if ((node = group[i]) && match.call(node, node.__data__, i, group)) {\n subgroup.push(node);\n }\n }\n }\n\n return new Selection(subgroups, this._parents);\n}\n","import sparse from \"./sparse\";\nimport {Selection} from \"./index\";\n\nexport default function() {\n return new Selection(this._exit || this._groups.map(sparse), this._parents);\n}\n","export default function(onenter, onupdate, onexit) {\n var enter = this.enter(), update = this, exit = this.exit();\n enter = typeof onenter === \"function\" ? onenter(enter) : enter.append(onenter + \"\");\n if (onupdate != null) update = onupdate(update);\n if (onexit == null) exit.remove(); else onexit(exit);\n return enter && update ? enter.merge(update).order() : update;\n}\n","import {Selection} from \"./index\";\n\nexport default function(selection) {\n\n for (var groups0 = this._groups, groups1 = selection._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) {\n for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {\n if (node = group0[i] || group1[i]) {\n merge[i] = node;\n }\n }\n }\n\n for (; j < m0; ++j) {\n merges[j] = groups0[j];\n }\n\n return new Selection(merges, this._parents);\n}\n","export default function() {\n\n for (var groups = this._groups, j = -1, m = groups.length; ++j < m;) {\n for (var group = groups[j], i = group.length - 1, next = group[i], node; --i >= 0;) {\n if (node = group[i]) {\n if (next && node.compareDocumentPosition(next) ^ 4) next.parentNode.insertBefore(node, next);\n next = node;\n }\n }\n }\n\n return this;\n}\n","export default function() {\n var callback = arguments[0];\n arguments[0] = this;\n callback.apply(null, arguments);\n return this;\n}\n","export default function() {\n var nodes = new Array(this.size()), i = -1;\n this.each(function() { nodes[++i] = this; });\n return nodes;\n}\n","export default function() {\n\n for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n for (var group = groups[j], i = 0, n = group.length; i < n; ++i) {\n var node = group[i];\n if (node) return node;\n }\n }\n\n return null;\n}\n","export default function() {\n var size = 0;\n this.each(function() { ++size; });\n return size;\n}\n","export default function() {\n return !this.node();\n}\n","export default function(callback) {\n\n for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n for (var group = groups[j], i = 0, n = group.length, node; i < n; ++i) {\n if (node = group[i]) callback.call(node, node.__data__, i, group);\n }\n }\n\n return this;\n}\n","function propertyRemove(name) {\n return function() {\n delete this[name];\n };\n}\n\nfunction propertyConstant(name, value) {\n return function() {\n this[name] = value;\n };\n}\n\nfunction propertyFunction(name, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) delete this[name];\n else this[name] = v;\n };\n}\n\nexport default function(name, value) {\n return arguments.length > 1\n ? this.each((value == null\n ? propertyRemove : typeof value === \"function\"\n ? propertyFunction\n : propertyConstant)(name, value))\n : this.node()[name];\n}\n","import creator from \"../creator\";\n\nexport default function(name) {\n var create = typeof name === \"function\" ? name : creator(name);\n return this.select(function() {\n return this.appendChild(create.apply(this, arguments));\n });\n}\n","export default function(value) {\n return arguments.length\n ? this.property(\"__data__\", value)\n : this.node().__data__;\n}\n","import {Selection, root} from \"./selection/index\";\n\nexport default function(selector) {\n return typeof selector === \"string\"\n ? new Selection([[document.querySelector(selector)]], [document.documentElement])\n : new Selection([[selector]], root);\n}\n","var nextId = 0;\n\nexport default function local() {\n return new Local;\n}\n\nfunction Local() {\n this._ = \"@\" + (++nextId).toString(36);\n}\n\nLocal.prototype = local.prototype = {\n constructor: Local,\n get: function(node) {\n var id = this._;\n while (!(id in node)) if (!(node = node.parentNode)) return;\n return node[id];\n },\n set: function(node, value) {\n return node[this._] = value;\n },\n remove: function(node) {\n return this._ in node && delete node[this._];\n },\n toString: function() {\n return this._;\n }\n};\n","import {event} from \"./selection/on\";\n\nexport default function() {\n var current = event, source;\n while (source = current.sourceEvent) current = source;\n return current;\n}\n","export default function(node, event) {\n var svg = node.ownerSVGElement || node;\n\n if (svg.createSVGPoint) {\n var point = svg.createSVGPoint();\n point.x = event.clientX, point.y = event.clientY;\n point = point.matrixTransform(node.getScreenCTM().inverse());\n return [point.x, point.y];\n }\n\n var rect = node.getBoundingClientRect();\n return [event.clientX - rect.left - node.clientLeft, event.clientY - rect.top - node.clientTop];\n}\n","import sourceEvent from \"./sourceEvent\";\nimport point from \"./point\";\n\nexport default function(node) {\n var event = sourceEvent();\n if (event.changedTouches) event = event.changedTouches[0];\n return point(node, event);\n}\n","import sourceEvent from \"./sourceEvent\";\nimport point from \"./point\";\n\nexport default function(node, touches, identifier) {\n if (arguments.length < 3) identifier = touches, touches = sourceEvent().changedTouches;\n\n for (var i = 0, n = touches ? touches.length : 0, touch; i < n; ++i) {\n if ((touch = touches[i]).identifier === identifier) {\n return point(node, touch);\n }\n }\n\n return null;\n}\n","var noop = {value: function() {}};\n\nfunction dispatch() {\n for (var i = 0, n = arguments.length, _ = {}, t; i < n; ++i) {\n if (!(t = arguments[i] + \"\") || (t in _)) throw new Error(\"illegal type: \" + t);\n _[t] = [];\n }\n return new Dispatch(_);\n}\n\nfunction Dispatch(_) {\n this._ = _;\n}\n\nfunction parseTypenames(typenames, types) {\n return typenames.trim().split(/^|\\s+/).map(function(t) {\n var name = \"\", i = t.indexOf(\".\");\n if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);\n if (t && !types.hasOwnProperty(t)) throw new Error(\"unknown type: \" + t);\n return {type: t, name: name};\n });\n}\n\nDispatch.prototype = dispatch.prototype = {\n constructor: Dispatch,\n on: function(typename, callback) {\n var _ = this._,\n T = parseTypenames(typename + \"\", _),\n t,\n i = -1,\n n = T.length;\n\n // If no callback was specified, return the callback of the given type and name.\n if (arguments.length < 2) {\n while (++i < n) if ((t = (typename = T[i]).type) && (t = get(_[t], typename.name))) return t;\n return;\n }\n\n // If a type was specified, set the callback for the given type and name.\n // Otherwise, if a null callback was specified, remove callbacks of the given name.\n if (callback != null && typeof callback !== \"function\") throw new Error(\"invalid callback: \" + callback);\n while (++i < n) {\n if (t = (typename = T[i]).type) _[t] = set(_[t], typename.name, callback);\n else if (callback == null) for (t in _) _[t] = set(_[t], typename.name, null);\n }\n\n return this;\n },\n copy: function() {\n var copy = {}, _ = this._;\n for (var t in _) copy[t] = _[t].slice();\n return new Dispatch(copy);\n },\n call: function(type, that) {\n if ((n = arguments.length - 2) > 0) for (var args = new Array(n), i = 0, n, t; i < n; ++i) args[i] = arguments[i + 2];\n if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\n for (t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n },\n apply: function(type, that, args) {\n if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\n for (var t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n }\n};\n\nfunction get(type, name) {\n for (var i = 0, n = type.length, c; i < n; ++i) {\n if ((c = type[i]).name === name) {\n return c.value;\n }\n }\n}\n\nfunction set(type, name, callback) {\n for (var i = 0, n = type.length; i < n; ++i) {\n if (type[i].name === name) {\n type[i] = noop, type = type.slice(0, i).concat(type.slice(i + 1));\n break;\n }\n }\n if (callback != null) type.push({name: name, value: callback});\n return type;\n}\n\nexport default dispatch;\n","import {event} from \"d3-selection\";\n\nexport function nopropagation() {\n event.stopImmediatePropagation();\n}\n\nexport default function() {\n event.preventDefault();\n event.stopImmediatePropagation();\n}\n","import {select} from \"d3-selection\";\nimport noevent from \"./noevent\";\n\nexport default function(view) {\n var root = view.document.documentElement,\n selection = select(view).on(\"dragstart.drag\", noevent, true);\n if (\"onselectstart\" in root) {\n selection.on(\"selectstart.drag\", noevent, true);\n } else {\n root.__noselect = root.style.MozUserSelect;\n root.style.MozUserSelect = \"none\";\n }\n}\n\nexport function yesdrag(view, noclick) {\n var root = view.document.documentElement,\n selection = select(view).on(\"dragstart.drag\", null);\n if (noclick) {\n selection.on(\"click.drag\", noevent, true);\n setTimeout(function() { selection.on(\"click.drag\", null); }, 0);\n }\n if (\"onselectstart\" in root) {\n selection.on(\"selectstart.drag\", null);\n } else {\n root.style.MozUserSelect = root.__noselect;\n delete root.__noselect;\n }\n}\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","export default function DragEvent(target, type, subject, id, active, x, y, dx, dy, dispatch) {\n this.target = target;\n this.type = type;\n this.subject = subject;\n this.identifier = id;\n this.active = active;\n this.x = x;\n this.y = y;\n this.dx = dx;\n this.dy = dy;\n this._ = dispatch;\n}\n\nDragEvent.prototype.on = function() {\n var value = this._.on.apply(this._, arguments);\n return value === this._ ? this : value;\n};\n","import {dispatch} from \"d3-dispatch\";\nimport {event, customEvent, select, mouse, touch} from \"d3-selection\";\nimport nodrag, {yesdrag} from \"./nodrag\";\nimport noevent, {nopropagation} from \"./noevent\";\nimport constant from \"./constant\";\nimport DragEvent from \"./event\";\n\n// Ignore right-click, since that should open the context menu.\nfunction defaultFilter() {\n return !event.button;\n}\n\nfunction defaultContainer() {\n return this.parentNode;\n}\n\nfunction defaultSubject(d) {\n return d == null ? {x: event.x, y: event.y} : d;\n}\n\nfunction defaultTouchable() {\n return \"ontouchstart\" in this;\n}\n\nexport default function() {\n var filter = defaultFilter,\n container = defaultContainer,\n subject = defaultSubject,\n touchable = defaultTouchable,\n gestures = {},\n listeners = dispatch(\"start\", \"drag\", \"end\"),\n active = 0,\n mousedownx,\n mousedowny,\n mousemoving,\n touchending,\n clickDistance2 = 0;\n\n function drag(selection) {\n selection\n .on(\"mousedown.drag\", mousedowned)\n .filter(touchable)\n .on(\"touchstart.drag\", touchstarted)\n .on(\"touchmove.drag\", touchmoved)\n .on(\"touchend.drag touchcancel.drag\", touchended)\n .style(\"touch-action\", \"none\")\n .style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\");\n }\n\n function mousedowned() {\n if (touchending || !filter.apply(this, arguments)) return;\n var gesture = beforestart(\"mouse\", container.apply(this, arguments), mouse, this, arguments);\n if (!gesture) return;\n select(event.view).on(\"mousemove.drag\", mousemoved, true).on(\"mouseup.drag\", mouseupped, true);\n nodrag(event.view);\n nopropagation();\n mousemoving = false;\n mousedownx = event.clientX;\n mousedowny = event.clientY;\n gesture(\"start\");\n }\n\n function mousemoved() {\n noevent();\n if (!mousemoving) {\n var dx = event.clientX - mousedownx, dy = event.clientY - mousedowny;\n mousemoving = dx * dx + dy * dy > clickDistance2;\n }\n gestures.mouse(\"drag\");\n }\n\n function mouseupped() {\n select(event.view).on(\"mousemove.drag mouseup.drag\", null);\n yesdrag(event.view, mousemoving);\n noevent();\n gestures.mouse(\"end\");\n }\n\n function touchstarted() {\n if (!filter.apply(this, arguments)) return;\n var touches = event.changedTouches,\n c = container.apply(this, arguments),\n n = touches.length, i, gesture;\n\n for (i = 0; i < n; ++i) {\n if (gesture = beforestart(touches[i].identifier, c, touch, this, arguments)) {\n nopropagation();\n gesture(\"start\");\n }\n }\n }\n\n function touchmoved() {\n var touches = event.changedTouches,\n n = touches.length, i, gesture;\n\n for (i = 0; i < n; ++i) {\n if (gesture = gestures[touches[i].identifier]) {\n noevent();\n gesture(\"drag\");\n }\n }\n }\n\n function touchended() {\n var touches = event.changedTouches,\n n = touches.length, i, gesture;\n\n if (touchending) clearTimeout(touchending);\n touchending = setTimeout(function() { touchending = null; }, 500); // Ghost clicks are delayed!\n for (i = 0; i < n; ++i) {\n if (gesture = gestures[touches[i].identifier]) {\n nopropagation();\n gesture(\"end\");\n }\n }\n }\n\n function beforestart(id, container, point, that, args) {\n var p = point(container, id), s, dx, dy,\n sublisteners = listeners.copy();\n\n if (!customEvent(new DragEvent(drag, \"beforestart\", s, id, active, p[0], p[1], 0, 0, sublisteners), function() {\n if ((event.subject = s = subject.apply(that, args)) == null) return false;\n dx = s.x - p[0] || 0;\n dy = s.y - p[1] || 0;\n return true;\n })) return;\n\n return function gesture(type) {\n var p0 = p, n;\n switch (type) {\n case \"start\": gestures[id] = gesture, n = active++; break;\n case \"end\": delete gestures[id], --active; // nobreak\n case \"drag\": p = point(container, id), n = active; break;\n }\n customEvent(new DragEvent(drag, type, s, id, n, p[0] + dx, p[1] + dy, p[0] - p0[0], p[1] - p0[1], sublisteners), sublisteners.apply, sublisteners, [type, that, args]);\n };\n }\n\n drag.filter = function(_) {\n return arguments.length ? (filter = typeof _ === \"function\" ? _ : constant(!!_), drag) : filter;\n };\n\n drag.container = function(_) {\n return arguments.length ? (container = typeof _ === \"function\" ? _ : constant(_), drag) : container;\n };\n\n drag.subject = function(_) {\n return arguments.length ? (subject = typeof _ === \"function\" ? _ : constant(_), drag) : subject;\n };\n\n drag.touchable = function(_) {\n return arguments.length ? (touchable = typeof _ === \"function\" ? _ : constant(!!_), drag) : touchable;\n };\n\n drag.on = function() {\n var value = listeners.on.apply(listeners, arguments);\n return value === listeners ? drag : value;\n };\n\n drag.clickDistance = function(_) {\n return arguments.length ? (clickDistance2 = (_ = +_) * _, drag) : Math.sqrt(clickDistance2);\n };\n\n return drag;\n}\n","var frame = 0, // is an animation frame pending?\n timeout = 0, // is a timeout pending?\n interval = 0, // are any timers active?\n pokeDelay = 1000, // how frequently we check for clock skew\n taskHead,\n taskTail,\n clockLast = 0,\n clockNow = 0,\n clockSkew = 0,\n clock = typeof performance === \"object\" && performance.now ? performance : Date,\n setFrame = typeof window === \"object\" && window.requestAnimationFrame ? window.requestAnimationFrame.bind(window) : function(f) { setTimeout(f, 17); };\n\nexport function now() {\n return clockNow || (setFrame(clearNow), clockNow = clock.now() + clockSkew);\n}\n\nfunction clearNow() {\n clockNow = 0;\n}\n\nexport function Timer() {\n this._call =\n this._time =\n this._next = null;\n}\n\nTimer.prototype = timer.prototype = {\n constructor: Timer,\n restart: function(callback, delay, time) {\n if (typeof callback !== \"function\") throw new TypeError(\"callback is not a function\");\n time = (time == null ? now() : +time) + (delay == null ? 0 : +delay);\n if (!this._next && taskTail !== this) {\n if (taskTail) taskTail._next = this;\n else taskHead = this;\n taskTail = this;\n }\n this._call = callback;\n this._time = time;\n sleep();\n },\n stop: function() {\n if (this._call) {\n this._call = null;\n this._time = Infinity;\n sleep();\n }\n }\n};\n\nexport function timer(callback, delay, time) {\n var t = new Timer;\n t.restart(callback, delay, time);\n return t;\n}\n\nexport function timerFlush() {\n now(); // Get the current time, if not already set.\n ++frame; // Pretend we’ve set an alarm, if we haven’t already.\n var t = taskHead, e;\n while (t) {\n if ((e = clockNow - t._time) >= 0) t._call.call(null, e);\n t = t._next;\n }\n --frame;\n}\n\nfunction wake() {\n clockNow = (clockLast = clock.now()) + clockSkew;\n frame = timeout = 0;\n try {\n timerFlush();\n } finally {\n frame = 0;\n nap();\n clockNow = 0;\n }\n}\n\nfunction poke() {\n var now = clock.now(), delay = now - clockLast;\n if (delay > pokeDelay) clockSkew -= delay, clockLast = now;\n}\n\nfunction nap() {\n var t0, t1 = taskHead, t2, time = Infinity;\n while (t1) {\n if (t1._call) {\n if (time > t1._time) time = t1._time;\n t0 = t1, t1 = t1._next;\n } else {\n t2 = t1._next, t1._next = null;\n t1 = t0 ? t0._next = t2 : taskHead = t2;\n }\n }\n taskTail = t0;\n sleep(time);\n}\n\nfunction sleep(time) {\n if (frame) return; // Soonest alarm already set, or will be.\n if (timeout) timeout = clearTimeout(timeout);\n var delay = time - clockNow; // Strictly less than if we recomputed clockNow.\n if (delay > 24) {\n if (time < Infinity) timeout = setTimeout(wake, time - clock.now() - clockSkew);\n if (interval) interval = clearInterval(interval);\n } else {\n if (!interval) clockLast = clock.now(), interval = setInterval(poke, pokeDelay);\n frame = 1, setFrame(wake);\n }\n}\n","import {Timer} from \"./timer\";\n\nexport default function(callback, delay, time) {\n var t = new Timer;\n delay = delay == null ? 0 : +delay;\n t.restart(function(elapsed) {\n t.stop();\n callback(elapsed + delay);\n }, delay, time);\n return t;\n}\n","import {dispatch} from \"d3-dispatch\";\nimport {timer, timeout} from \"d3-timer\";\n\nvar emptyOn = dispatch(\"start\", \"end\", \"cancel\", \"interrupt\");\nvar emptyTween = [];\n\nexport var CREATED = 0;\nexport var SCHEDULED = 1;\nexport var STARTING = 2;\nexport var STARTED = 3;\nexport var RUNNING = 4;\nexport var ENDING = 5;\nexport var ENDED = 6;\n\nexport default function(node, name, id, index, group, timing) {\n var schedules = node.__transition;\n if (!schedules) node.__transition = {};\n else if (id in schedules) return;\n create(node, id, {\n name: name,\n index: index, // For context during callback.\n group: group, // For context during callback.\n on: emptyOn,\n tween: emptyTween,\n time: timing.time,\n delay: timing.delay,\n duration: timing.duration,\n ease: timing.ease,\n timer: null,\n state: CREATED\n });\n}\n\nexport function init(node, id) {\n var schedule = get(node, id);\n if (schedule.state > CREATED) throw new Error(\"too late; already scheduled\");\n return schedule;\n}\n\nexport function set(node, id) {\n var schedule = get(node, id);\n if (schedule.state > STARTED) throw new Error(\"too late; already running\");\n return schedule;\n}\n\nexport function get(node, id) {\n var schedule = node.__transition;\n if (!schedule || !(schedule = schedule[id])) throw new Error(\"transition not found\");\n return schedule;\n}\n\nfunction create(node, id, self) {\n var schedules = node.__transition,\n tween;\n\n // Initialize the self timer when the transition is created.\n // Note the actual delay is not known until the first callback!\n schedules[id] = self;\n self.timer = timer(schedule, 0, self.time);\n\n function schedule(elapsed) {\n self.state = SCHEDULED;\n self.timer.restart(start, self.delay, self.time);\n\n // If the elapsed delay is less than our first sleep, start immediately.\n if (self.delay <= elapsed) start(elapsed - self.delay);\n }\n\n function start(elapsed) {\n var i, j, n, o;\n\n // If the state is not SCHEDULED, then we previously errored on start.\n if (self.state !== SCHEDULED) return stop();\n\n for (i in schedules) {\n o = schedules[i];\n if (o.name !== self.name) continue;\n\n // While this element already has a starting transition during this frame,\n // defer starting an interrupting transition until that transition has a\n // chance to tick (and possibly end); see d3/d3-transition#54!\n if (o.state === STARTED) return timeout(start);\n\n // Interrupt the active transition, if any.\n if (o.state === RUNNING) {\n o.state = ENDED;\n o.timer.stop();\n o.on.call(\"interrupt\", node, node.__data__, o.index, o.group);\n delete schedules[i];\n }\n\n // Cancel any pre-empted transitions.\n else if (+i < id) {\n o.state = ENDED;\n o.timer.stop();\n o.on.call(\"cancel\", node, node.__data__, o.index, o.group);\n delete schedules[i];\n }\n }\n\n // Defer the first tick to end of the current frame; see d3/d3#1576.\n // Note the transition may be canceled after start and before the first tick!\n // Note this must be scheduled before the start event; see d3/d3-transition#16!\n // Assuming this is successful, subsequent callbacks go straight to tick.\n timeout(function() {\n if (self.state === STARTED) {\n self.state = RUNNING;\n self.timer.restart(tick, self.delay, self.time);\n tick(elapsed);\n }\n });\n\n // Dispatch the start event.\n // Note this must be done before the tween are initialized.\n self.state = STARTING;\n self.on.call(\"start\", node, node.__data__, self.index, self.group);\n if (self.state !== STARTING) return; // interrupted\n self.state = STARTED;\n\n // Initialize the tween, deleting null tween.\n tween = new Array(n = self.tween.length);\n for (i = 0, j = -1; i < n; ++i) {\n if (o = self.tween[i].value.call(node, node.__data__, self.index, self.group)) {\n tween[++j] = o;\n }\n }\n tween.length = j + 1;\n }\n\n function tick(elapsed) {\n var t = elapsed < self.duration ? self.ease.call(null, elapsed / self.duration) : (self.timer.restart(stop), self.state = ENDING, 1),\n i = -1,\n n = tween.length;\n\n while (++i < n) {\n tween[i].call(node, t);\n }\n\n // Dispatch the end event.\n if (self.state === ENDING) {\n self.on.call(\"end\", node, node.__data__, self.index, self.group);\n stop();\n }\n }\n\n function stop() {\n self.state = ENDED;\n self.timer.stop();\n delete schedules[id];\n for (var i in schedules) return; // eslint-disable-line no-unused-vars\n delete node.__transition;\n }\n}\n","import {get, set} from \"./schedule\";\n\nfunction tweenRemove(id, name) {\n var tween0, tween1;\n return function() {\n var schedule = set(this, id),\n tween = schedule.tween;\n\n // If this node shared tween with the previous node,\n // just assign the updated shared tween and we’re done!\n // Otherwise, copy-on-write.\n if (tween !== tween0) {\n tween1 = tween0 = tween;\n for (var i = 0, n = tween1.length; i < n; ++i) {\n if (tween1[i].name === name) {\n tween1 = tween1.slice();\n tween1.splice(i, 1);\n break;\n }\n }\n }\n\n schedule.tween = tween1;\n };\n}\n\nfunction tweenFunction(id, name, value) {\n var tween0, tween1;\n if (typeof value !== \"function\") throw new Error;\n return function() {\n var schedule = set(this, id),\n tween = schedule.tween;\n\n // If this node shared tween with the previous node,\n // just assign the updated shared tween and we’re done!\n // Otherwise, copy-on-write.\n if (tween !== tween0) {\n tween1 = (tween0 = tween).slice();\n for (var t = {name: name, value: value}, i = 0, n = tween1.length; i < n; ++i) {\n if (tween1[i].name === name) {\n tween1[i] = t;\n break;\n }\n }\n if (i === n) tween1.push(t);\n }\n\n schedule.tween = tween1;\n };\n}\n\nexport default function(name, value) {\n var id = this._id;\n\n name += \"\";\n\n if (arguments.length < 2) {\n var tween = get(this.node(), id).tween;\n for (var i = 0, n = tween.length, t; i < n; ++i) {\n if ((t = tween[i]).name === name) {\n return t.value;\n }\n }\n return null;\n }\n\n return this.each((value == null ? tweenRemove : tweenFunction)(id, name, value));\n}\n\nexport function tweenValue(transition, name, value) {\n var id = transition._id;\n\n transition.each(function() {\n var schedule = set(this, id);\n (schedule.value || (schedule.value = {}))[name] = value.apply(this, arguments);\n });\n\n return function(node) {\n return get(node, id).value[name];\n };\n}\n","import {color} from \"d3-color\";\nimport {interpolateNumber, interpolateRgb, interpolateString} from \"d3-interpolate\";\n\nexport default function(a, b) {\n var c;\n return (typeof b === \"number\" ? interpolateNumber\n : b instanceof color ? interpolateRgb\n : (c = color(b)) ? (b = c, interpolateRgb)\n : interpolateString)(a, b);\n}\n","function removeFunction(id) {\n return function() {\n var parent = this.parentNode;\n for (var i in this.__transition) if (+i !== id) return;\n if (parent) parent.removeChild(this);\n };\n}\n\nexport default function() {\n return this.on(\"end.remove\", removeFunction(this._id));\n}\n","import {selection} from \"d3-selection\";\n\nvar Selection = selection.prototype.constructor;\n\nexport default function() {\n return new Selection(this._groups, this._parents);\n}\n","import {interpolateTransformCss as interpolateTransform} from \"d3-interpolate\";\nimport {style} from \"d3-selection\";\nimport {set} from \"./schedule\";\nimport {tweenValue} from \"./tween\";\nimport interpolate from \"./interpolate\";\n\nfunction styleNull(name, interpolate) {\n var string00,\n string10,\n interpolate0;\n return function() {\n var string0 = style(this, name),\n string1 = (this.style.removeProperty(name), style(this, name));\n return string0 === string1 ? null\n : string0 === string00 && string1 === string10 ? interpolate0\n : interpolate0 = interpolate(string00 = string0, string10 = string1);\n };\n}\n\nfunction styleRemove(name) {\n return function() {\n this.style.removeProperty(name);\n };\n}\n\nfunction styleConstant(name, interpolate, value1) {\n var string00,\n string1 = value1 + \"\",\n interpolate0;\n return function() {\n var string0 = style(this, name);\n return string0 === string1 ? null\n : string0 === string00 ? interpolate0\n : interpolate0 = interpolate(string00 = string0, value1);\n };\n}\n\nfunction styleFunction(name, interpolate, value) {\n var string00,\n string10,\n interpolate0;\n return function() {\n var string0 = style(this, name),\n value1 = value(this),\n string1 = value1 + \"\";\n if (value1 == null) string1 = value1 = (this.style.removeProperty(name), style(this, name));\n return string0 === string1 ? null\n : string0 === string00 && string1 === string10 ? interpolate0\n : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));\n };\n}\n\nfunction styleMaybeRemove(id, name) {\n var on0, on1, listener0, key = \"style.\" + name, event = \"end.\" + key, remove;\n return function() {\n var schedule = set(this, id),\n on = schedule.on,\n listener = schedule.value[key] == null ? remove || (remove = styleRemove(name)) : undefined;\n\n // If this node shared a dispatch with the previous node,\n // just assign the updated shared dispatch and we’re done!\n // Otherwise, copy-on-write.\n if (on !== on0 || listener0 !== listener) (on1 = (on0 = on).copy()).on(event, listener0 = listener);\n\n schedule.on = on1;\n };\n}\n\nexport default function(name, value, priority) {\n var i = (name += \"\") === \"transform\" ? interpolateTransform : interpolate;\n return value == null ? this\n .styleTween(name, styleNull(name, i))\n .on(\"end.style.\" + name, styleRemove(name))\n : typeof value === \"function\" ? this\n .styleTween(name, styleFunction(name, i, tweenValue(this, \"style.\" + name, value)))\n .each(styleMaybeRemove(this._id, name))\n : this\n .styleTween(name, styleConstant(name, i, value), priority)\n .on(\"end.style.\" + name, null);\n}\n","import {tweenValue} from \"./tween\";\n\nfunction textConstant(value) {\n return function() {\n this.textContent = value;\n };\n}\n\nfunction textFunction(value) {\n return function() {\n var value1 = value(this);\n this.textContent = value1 == null ? \"\" : value1;\n };\n}\n\nexport default function(value) {\n return this.tween(\"text\", typeof value === \"function\"\n ? textFunction(tweenValue(this, \"text\", value))\n : textConstant(value == null ? \"\" : value + \"\"));\n}\n","import {selection} from \"d3-selection\";\nimport transition_attr from \"./attr\";\nimport transition_attrTween from \"./attrTween\";\nimport transition_delay from \"./delay\";\nimport transition_duration from \"./duration\";\nimport transition_ease from \"./ease\";\nimport transition_filter from \"./filter\";\nimport transition_merge from \"./merge\";\nimport transition_on from \"./on\";\nimport transition_remove from \"./remove\";\nimport transition_select from \"./select\";\nimport transition_selectAll from \"./selectAll\";\nimport transition_selection from \"./selection\";\nimport transition_style from \"./style\";\nimport transition_styleTween from \"./styleTween\";\nimport transition_text from \"./text\";\nimport transition_transition from \"./transition\";\nimport transition_tween from \"./tween\";\nimport transition_end from \"./end\";\n\nvar id = 0;\n\nexport function Transition(groups, parents, name, id) {\n this._groups = groups;\n this._parents = parents;\n this._name = name;\n this._id = id;\n}\n\nexport default function transition(name) {\n return selection().transition(name);\n}\n\nexport function newId() {\n return ++id;\n}\n\nvar selection_prototype = selection.prototype;\n\nTransition.prototype = transition.prototype = {\n constructor: Transition,\n select: transition_select,\n selectAll: transition_selectAll,\n filter: transition_filter,\n merge: transition_merge,\n selection: transition_selection,\n transition: transition_transition,\n call: selection_prototype.call,\n nodes: selection_prototype.nodes,\n node: selection_prototype.node,\n size: selection_prototype.size,\n empty: selection_prototype.empty,\n each: selection_prototype.each,\n on: transition_on,\n attr: transition_attr,\n attrTween: transition_attrTween,\n style: transition_style,\n styleTween: transition_styleTween,\n text: transition_text,\n remove: transition_remove,\n tween: transition_tween,\n delay: transition_delay,\n duration: transition_duration,\n ease: transition_ease,\n end: transition_end\n};\n","import {selector} from \"d3-selection\";\nimport {Transition} from \"./index\";\nimport schedule, {get} from \"./schedule\";\n\nexport default function(select) {\n var name = this._name,\n id = this._id;\n\n if (typeof select !== \"function\") select = selector(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) {\n if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) {\n if (\"__data__\" in node) subnode.__data__ = node.__data__;\n subgroup[i] = subnode;\n schedule(subgroup[i], name, id, i, subgroup, get(node, id));\n }\n }\n }\n\n return new Transition(subgroups, this._parents, name, id);\n}\n","import {selectorAll} from \"d3-selection\";\nimport {Transition} from \"./index\";\nimport schedule, {get} from \"./schedule\";\n\nexport default function(select) {\n var name = this._name,\n id = this._id;\n\n if (typeof select !== \"function\") select = selectorAll(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n for (var children = select.call(node, node.__data__, i, group), child, inherit = get(node, id), k = 0, l = children.length; k < l; ++k) {\n if (child = children[k]) {\n schedule(child, name, id, k, children, inherit);\n }\n }\n subgroups.push(children);\n parents.push(node);\n }\n }\n }\n\n return new Transition(subgroups, parents, name, id);\n}\n","import {matcher} from \"d3-selection\";\nimport {Transition} from \"./index\";\n\nexport default function(match) {\n if (typeof match !== \"function\") match = matcher(match);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) {\n if ((node = group[i]) && match.call(node, node.__data__, i, group)) {\n subgroup.push(node);\n }\n }\n }\n\n return new Transition(subgroups, this._parents, this._name, this._id);\n}\n","import {Transition} from \"./index\";\n\nexport default function(transition) {\n if (transition._id !== this._id) throw new Error;\n\n for (var groups0 = this._groups, groups1 = transition._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) {\n for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {\n if (node = group0[i] || group1[i]) {\n merge[i] = node;\n }\n }\n }\n\n for (; j < m0; ++j) {\n merges[j] = groups0[j];\n }\n\n return new Transition(merges, this._parents, this._name, this._id);\n}\n","import {Transition, newId} from \"./index\";\nimport schedule, {get} from \"./schedule\";\n\nexport default function() {\n var name = this._name,\n id0 = this._id,\n id1 = newId();\n\n for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n var inherit = get(node, id0);\n schedule(node, name, id1, i, group, {\n time: inherit.time + inherit.delay + inherit.duration,\n delay: 0,\n duration: inherit.duration,\n ease: inherit.ease\n });\n }\n }\n }\n\n return new Transition(groups, this._parents, name, id1);\n}\n","import {get, set, init} from \"./schedule\";\n\nfunction start(name) {\n return (name + \"\").trim().split(/^|\\s+/).every(function(t) {\n var i = t.indexOf(\".\");\n if (i >= 0) t = t.slice(0, i);\n return !t || t === \"start\";\n });\n}\n\nfunction onFunction(id, name, listener) {\n var on0, on1, sit = start(name) ? init : set;\n return function() {\n var schedule = sit(this, id),\n on = schedule.on;\n\n // If this node shared a dispatch with the previous node,\n // just assign the updated shared dispatch and we’re done!\n // Otherwise, copy-on-write.\n if (on !== on0) (on1 = (on0 = on).copy()).on(name, listener);\n\n schedule.on = on1;\n };\n}\n\nexport default function(name, listener) {\n var id = this._id;\n\n return arguments.length < 2\n ? get(this.node(), id).on.on(name)\n : this.each(onFunction(id, name, listener));\n}\n","import {interpolateTransformSvg as interpolateTransform} from \"d3-interpolate\";\nimport {namespace} from \"d3-selection\";\nimport {tweenValue} from \"./tween\";\nimport interpolate from \"./interpolate\";\n\nfunction attrRemove(name) {\n return function() {\n this.removeAttribute(name);\n };\n}\n\nfunction attrRemoveNS(fullname) {\n return function() {\n this.removeAttributeNS(fullname.space, fullname.local);\n };\n}\n\nfunction attrConstant(name, interpolate, value1) {\n var string00,\n string1 = value1 + \"\",\n interpolate0;\n return function() {\n var string0 = this.getAttribute(name);\n return string0 === string1 ? null\n : string0 === string00 ? interpolate0\n : interpolate0 = interpolate(string00 = string0, value1);\n };\n}\n\nfunction attrConstantNS(fullname, interpolate, value1) {\n var string00,\n string1 = value1 + \"\",\n interpolate0;\n return function() {\n var string0 = this.getAttributeNS(fullname.space, fullname.local);\n return string0 === string1 ? null\n : string0 === string00 ? interpolate0\n : interpolate0 = interpolate(string00 = string0, value1);\n };\n}\n\nfunction attrFunction(name, interpolate, value) {\n var string00,\n string10,\n interpolate0;\n return function() {\n var string0, value1 = value(this), string1;\n if (value1 == null) return void this.removeAttribute(name);\n string0 = this.getAttribute(name);\n string1 = value1 + \"\";\n return string0 === string1 ? null\n : string0 === string00 && string1 === string10 ? interpolate0\n : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));\n };\n}\n\nfunction attrFunctionNS(fullname, interpolate, value) {\n var string00,\n string10,\n interpolate0;\n return function() {\n var string0, value1 = value(this), string1;\n if (value1 == null) return void this.removeAttributeNS(fullname.space, fullname.local);\n string0 = this.getAttributeNS(fullname.space, fullname.local);\n string1 = value1 + \"\";\n return string0 === string1 ? null\n : string0 === string00 && string1 === string10 ? interpolate0\n : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));\n };\n}\n\nexport default function(name, value) {\n var fullname = namespace(name), i = fullname === \"transform\" ? interpolateTransform : interpolate;\n return this.attrTween(name, typeof value === \"function\"\n ? (fullname.local ? attrFunctionNS : attrFunction)(fullname, i, tweenValue(this, \"attr.\" + name, value))\n : value == null ? (fullname.local ? attrRemoveNS : attrRemove)(fullname)\n : (fullname.local ? attrConstantNS : attrConstant)(fullname, i, value));\n}\n","import {namespace} from \"d3-selection\";\n\nfunction attrInterpolate(name, i) {\n return function(t) {\n this.setAttribute(name, i(t));\n };\n}\n\nfunction attrInterpolateNS(fullname, i) {\n return function(t) {\n this.setAttributeNS(fullname.space, fullname.local, i(t));\n };\n}\n\nfunction attrTweenNS(fullname, value) {\n var t0, i0;\n function tween() {\n var i = value.apply(this, arguments);\n if (i !== i0) t0 = (i0 = i) && attrInterpolateNS(fullname, i);\n return t0;\n }\n tween._value = value;\n return tween;\n}\n\nfunction attrTween(name, value) {\n var t0, i0;\n function tween() {\n var i = value.apply(this, arguments);\n if (i !== i0) t0 = (i0 = i) && attrInterpolate(name, i);\n return t0;\n }\n tween._value = value;\n return tween;\n}\n\nexport default function(name, value) {\n var key = \"attr.\" + name;\n if (arguments.length < 2) return (key = this.tween(key)) && key._value;\n if (value == null) return this.tween(key, null);\n if (typeof value !== \"function\") throw new Error;\n var fullname = namespace(name);\n return this.tween(key, (fullname.local ? attrTweenNS : attrTween)(fullname, value));\n}\n","function styleInterpolate(name, i, priority) {\n return function(t) {\n this.style.setProperty(name, i(t), priority);\n };\n}\n\nfunction styleTween(name, value, priority) {\n var t, i0;\n function tween() {\n var i = value.apply(this, arguments);\n if (i !== i0) t = (i0 = i) && styleInterpolate(name, i, priority);\n return t;\n }\n tween._value = value;\n return tween;\n}\n\nexport default function(name, value, priority) {\n var key = \"style.\" + (name += \"\");\n if (arguments.length < 2) return (key = this.tween(key)) && key._value;\n if (value == null) return this.tween(key, null);\n if (typeof value !== \"function\") throw new Error;\n return this.tween(key, styleTween(name, value, priority == null ? \"\" : priority));\n}\n","import {get, init} from \"./schedule\";\n\nfunction delayFunction(id, value) {\n return function() {\n init(this, id).delay = +value.apply(this, arguments);\n };\n}\n\nfunction delayConstant(id, value) {\n return value = +value, function() {\n init(this, id).delay = value;\n };\n}\n\nexport default function(value) {\n var id = this._id;\n\n return arguments.length\n ? this.each((typeof value === \"function\"\n ? delayFunction\n : delayConstant)(id, value))\n : get(this.node(), id).delay;\n}\n","import {get, set} from \"./schedule\";\n\nfunction durationFunction(id, value) {\n return function() {\n set(this, id).duration = +value.apply(this, arguments);\n };\n}\n\nfunction durationConstant(id, value) {\n return value = +value, function() {\n set(this, id).duration = value;\n };\n}\n\nexport default function(value) {\n var id = this._id;\n\n return arguments.length\n ? this.each((typeof value === \"function\"\n ? durationFunction\n : durationConstant)(id, value))\n : get(this.node(), id).duration;\n}\n","import {get, set} from \"./schedule\";\n\nfunction easeConstant(id, value) {\n if (typeof value !== \"function\") throw new Error;\n return function() {\n set(this, id).ease = value;\n };\n}\n\nexport default function(value) {\n var id = this._id;\n\n return arguments.length\n ? this.each(easeConstant(id, value))\n : get(this.node(), id).ease;\n}\n","import {set} from \"./schedule\";\n\nexport default function() {\n var on0, on1, that = this, id = that._id, size = that.size();\n return new Promise(function(resolve, reject) {\n var cancel = {value: reject},\n end = {value: function() { if (--size === 0) resolve(); }};\n\n that.each(function() {\n var schedule = set(this, id),\n on = schedule.on;\n\n // If this node shared a dispatch with the previous node,\n // just assign the updated shared dispatch and we’re done!\n // Otherwise, copy-on-write.\n if (on !== on0) {\n on1 = (on0 = on).copy();\n on1._.cancel.push(cancel);\n on1._.interrupt.push(cancel);\n on1._.end.push(end);\n }\n\n schedule.on = on1;\n });\n });\n}\n","import {Transition, newId} from \"../transition/index\";\nimport schedule from \"../transition/schedule\";\nimport {easeCubicInOut} from \"d3-ease\";\nimport {now} from \"d3-timer\";\n\nvar defaultTiming = {\n time: null, // Set on use.\n delay: 0,\n duration: 250,\n ease: easeCubicInOut\n};\n\nfunction inherit(node, id) {\n var timing;\n while (!(timing = node.__transition) || !(timing = timing[id])) {\n if (!(node = node.parentNode)) {\n return defaultTiming.time = now(), defaultTiming;\n }\n }\n return timing;\n}\n\nexport default function(name) {\n var id,\n timing;\n\n if (name instanceof Transition) {\n id = name._id, name = name._name;\n } else {\n id = newId(), (timing = defaultTiming).time = now(), name = name == null ? null : name + \"\";\n }\n\n for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n schedule(node, name, id, i, group, timing || inherit(node, id));\n }\n }\n }\n\n return new Transition(groups, this._parents, name, id);\n}\n","import {selection} from \"d3-selection\";\nimport selection_interrupt from \"./interrupt\";\nimport selection_transition from \"./transition\";\n\nselection.prototype.interrupt = selection_interrupt;\nselection.prototype.transition = selection_transition;\n","import interrupt from \"../interrupt\";\n\nexport default function(name) {\n return this.each(function() {\n interrupt(this, name);\n });\n}\n","import {STARTING, ENDING, ENDED} from \"./transition/schedule\";\n\nexport default function(node, name) {\n var schedules = node.__transition,\n schedule,\n active,\n empty = true,\n i;\n\n if (!schedules) return;\n\n name = name == null ? null : name + \"\";\n\n for (i in schedules) {\n if ((schedule = schedules[i]).name !== name) { empty = false; continue; }\n active = schedule.state > STARTING && schedule.state < ENDING;\n schedule.state = ENDED;\n schedule.timer.stop();\n schedule.on.call(active ? \"interrupt\" : \"cancel\", node, node.__data__, schedule.index, schedule.group);\n delete schedules[i];\n }\n\n if (empty) delete node.__transition;\n}\n","import { select, event as d3event, selection, clientPoint } from 'd3-selection';\nimport { drag as d3drag } from 'd3-drag';\nimport 'd3-transition';\nimport { mergeRecursive } from './common-utils';\n/**\n * This function takes a raw DOM element or\n * a string and returns a d3 selection of that element.\n *\n * @param {HTMLElement | string} element The element to wrap in d3 selection.\n * @return {Selection} Instance of d3 selection.\n */\nconst selectElement = element => select(element);\n\n/**\n * It creates a new d3 element on the parent element\n * @param {Selection} parent Element to which the element is to be appended\n * @param {Object} elemType Type of the new element\n * @param {Array} data Data for the new element\n * @param {Object} selector classname/id/tagname for the element\n * @return {HTMLElement} Newly Created Element\n */\nconst makeElement = (parent, elemType, data, selector, callbacks = {}, keyFn) => {\n if ((parent instanceof HTMLElement || parent instanceof SVGElement)) {\n parent = selectElement(parent);\n }\n\n const selectorVal = selector ? selector[0] : null;\n let selectorType = null;\n let actualSelector = null;\n let element = null;\n let enterSel = null;\n let mergeSel = null;\n let filter;\n if (selectorVal) {\n if (selectorVal === '#') {\n selectorType = 'id';\n actualSelector = selector;\n } else {\n selectorType = 'class';\n actualSelector = selector[0] === '.' ? selector : `.${selector}`;\n }\n } else {\n actualSelector = elemType;\n filter = true;\n }\n element = parent.selectAll(actualSelector);\n\n filter && (element = element.filter(function () {\n return this.parentNode === parent.node();\n }));\n element = element.data(data, keyFn);\n\n enterSel = element.enter()\n .append(elemType || 'div');\n callbacks.enter && enterSel.each(function (...params) {\n callbacks.enter(selectElement(this), ...params);\n });\n\n mergeSel = enterSel.merge(element);\n callbacks.update && mergeSel.each(function (...params) {\n callbacks.update(selectElement(this), ...params);\n });\n if (selectorType === 'class') {\n mergeSel.classed(selectorVal === '.' ? selector.substring(1, selector.length) : selector, true);\n } else if (selectorType === 'id') {\n mergeSel.attr('id', selector.substring(1, selector.length));\n }\n const exitSel = element.exit();\n\n if (callbacks.exit) {\n exitSel.each(function (...params) {\n callbacks.exit(selectElement(this), ...params);\n });\n } else {\n exitSel.remove();\n }\n return mergeSel;\n};\n\n/**\n * This function applies styles to an element\n * @param {Object} elem Element Selection\n * @param {Object} styleObj Style Object to be applied\n * @return {Element} Newly Created Element\n*/\nconst applyStyle = (elem, styleObj) => {\n Object.entries(styleObj).forEach((d) => {\n elem.style(d[0], d[1]);\n }, this);\n return elem;\n};\n\n/**\n * This function appends a dom element in another element.\n * @param {HTMLElement | SVGElement} element1 The element in which to append the second element\n * @param {HTMLElement | SVGElement} element2 The element which will be appended.\n */\nconst appendElement = (element1, element2) => {\n element1.appendChild(element2);\n};\n\n/**\n * Sets the attributes to the element.\n * @param {HTMLElement | SVGElement} element Element on which attributes will be applied\n * @param {Object} attrs Attributes which need to be applied\n */\nconst setElementAttrs = (element, attrs) => {\n for (const key in attrs) {\n if ({}.hasOwnProperty.call(attrs, key)) {\n element.attr(key, attrs[key]);\n }\n }\n};\n\n/**\n * Sets attributes in the svg or html element\n * @param {SVGElement | HTMLElement} element The element on which attrs will be applied\n * @param {Array.} attrs Array of attributes\n * @param {string} className className of elements to select.\n * @return {SVGElement | HTMLElement} SVGElement or html element.\n */\nconst setAttrs = (element, attrs, className) => {\n if (!(element instanceof selection)) {\n element = selectElement(element);\n }\n className !== undefined ? element.selectAll(`.${className}`).each(function () {\n setElementAttrs(select(this), attrs);\n }) : setElementAttrs(element, attrs);\n return element;\n};\n\n/**\n * Adds a css class to elements which passes the filter function.If filter function is not given,\n * then all elements will be applied the class.\n * @param {HTMLElement | SVGElement} element element\n * @param {string} className css class\n * @param {string} selector css selector\n * @param {Function} filterFn filter method.\n */\nconst addClass = (element, className, selector, filterFn) => {\n select(element).selectAll(selector).each(function (data) {\n const elem = select(this);\n filterFn ? filterFn(data) && elem.classed(className, true) :\n elem.classed(className, true);\n });\n};\n\n/**\n * Removes the css class from elements which passes the filter function.If filter function is not given,\n * then all elements will be applied the class.\n * @param {HTMLElement | SVGElement} element element\n * @param {string} className css class\n * @param {string} selector css selector\n * @param {Function} filterFn filter method.\n */\nconst removeClass = (element, className, selector, filterFn) => {\n select(element).selectAll(selector).each(function (data) {\n const elem = select(this);\n filterFn ? filterFn(data) && elem.classed(className, false) :\n elem.classed(className, false);\n });\n};\n\n/**\n * Sets styles in the svg or html element\n * @param {SVGElement | HTMLElement} element The element on which styles will be applied\n * @param {Array.} styles Array of style attributes\n * @return {SVGElement | HTMLElement} SVGElement or html element.\n */\nconst setStyles = (element, styles) => {\n if (!(element instanceof selection)) {\n element = selectElement(element);\n }\n for (const key in styles) {\n if ({}.hasOwnProperty.call(styles, key)) {\n element.style(key, styles[key]);\n }\n }\n return element;\n};\n\n/**\n * Creates svg or html elements by binding data to the selection.Removes extra elements\n * on exit.\n * @param {Object} params Parameter object\n * @param {SVGElement | HTMLElement} params.container Container element where all elements will be appended\n * @param {string} params.selector Selector by which elements will be selected from dom\n * @param {string} params.append Append tag\n * @param {Function} params.each Function which will be executed for each data point and element.\n */\nconst createElements = (params) => {\n const container = select(params.container);\n let data;\n let sel;\n\n data = params.data;\n if (typeof data === 'number') {\n data = Array(data).fill().map((d, i) => i);\n }\n sel = container.selectAll(params.selector).data(data);\n\n sel = container.selectAll(params.selector).filter(function () {\n return this.parentNode === container.node();\n }).data(params.data);\n\n const selectionMerge = sel.enter().append(params.append).merge(sel).each(function (d, i) {\n params.each(d, select(this), i);\n });\n\n selectionMerge.attr('class', params.className || '');\n sel.exit().remove();\n};\n\n/**\n * Clips an element with given measurement. Basically it is used to hide overflowing portions\n * of any element.\n * @param {SVGElement} container svg element which needs to be clipped.\n * @param {Object} measurement Dimensions of the clipped rectangle.\n * @param {string} id Unique id of the clip element\n */\nconst clipElement = (container, measurement, id) => {\n const clipPathElement = makeElement(select(container), 'clipPath', [1], `#${id}`);\n const clipPathRect = makeElement(clipPathElement, 'rect', [1]);\n clipPathRect.attr('x', measurement.x)\n .attr('y', measurement.x)\n .attr('width', measurement.width)\n .attr('height', measurement.height);\n clipPathElement.attr('clip-path', `url(#${id})`);\n};\n\n/**\n * Returns the element of the corresponding classname.\n * @param {HTMLElement | SVGElement} node html or svg node element.\n * @param {string} className css class to be applied.\n * @return {HTMLElement | SVGElement} html or svg element.\n */\nconst getElementsByClassName = (node, className) => select(node).selectAll(className).nodes();\n\n/**\n * Gets the mouse position relative to an svg type of element\n * @param {SVGElement} element Any svg element like rect, circle, etc.\n * @param {Event} event Event object.\n * @return {Object} x and y position relative to the container element passed.\n */\nconst getMousePos = (element, event) => {\n const boundingClientRect = element.getBoundingClientRect();\n return {\n x: event.x - boundingClientRect.x,\n y: event.y - boundingClientRect.y\n };\n};\n\nconst getClientPoint = (...params) => {\n const pos = clientPoint(...params);\n return {\n x: pos[0],\n y: pos[1]\n };\n};\n\n/** This function appends a dom element in another element.\n * @param {Object} tag The tag name of the element to append\n * @param {Object} mount Mount point fo the element\n * @return {Object} selection of the appended element\n */\nconst createElement = (tag, mount) => select(mount).append(tag).node();\n\n/**\n * Gets the d3 event function\n * @return {Object} d3 event\n */\nconst getEvent = () => d3event;\n\n/**\n * Gets the d3 drag function\n * @return {Object} d3 drag\n */\nconst getD3Drag = () => d3drag;\n\nconst getSmartComputedStyle = (group, css) => {\n let textEl;\n const testText = 'W';\n const mandatoryStyle = {\n 'fill-opacity': 0\n };\n const className = typeof css === 'string' ? css : (css instanceof Array ? css.join(' ') : undefined);\n\n if (group.node() instanceof HTMLElement) {\n textEl = group.append('div').html(testText);\n } else {\n textEl = group.append('text').text(testText);\n }\n\n if (className) {\n textEl.attr('class', className);\n } else if (typeof css === 'object') {\n delete css['fill-opacity'];\n mergeRecursive(mandatoryStyle, css);\n }\n\n textEl.style(mandatoryStyle);\n const computedStyle = window.getComputedStyle(textEl.node());\n const styleForSmartLabel = {\n fontSize: computedStyle.fontSize,\n fontFamily: computedStyle.fontFamily,\n fontWeight: computedStyle.fontWeight,\n fontStyle: computedStyle.fontStyle\n };\n\n textEl.remove();\n\n return styleForSmartLabel;\n};\n\nconst hasTouch = () => 'ontouchstart' in document.documentElement;\n\nexport {\n hasTouch,\n selectElement,\n makeElement,\n applyStyle,\n addClass,\n removeClass,\n appendElement,\n setAttrs,\n setStyles,\n createElement,\n createElements,\n clipElement,\n getElementsByClassName,\n getMousePos,\n getEvent,\n getD3Drag,\n getSmartComputedStyle,\n getClientPoint\n};\n","const events = [\n 'initialized',\n 'beforeupdate',\n 'updated',\n 'beforedraw',\n 'drawn',\n 'beforeremove',\n 'removed',\n 'animationend'\n];\n\nconst compositions = [\n 'canvas',\n 'unit',\n 'layer',\n 'axis',\n 'facet-headers',\n 'legend',\n 'caption'\n];\n\nconst EVENT_LIST = [];\n\ncompositions.forEach((composition) => {\n events.forEach((event) => {\n EVENT_LIST.push(`${composition}.${event}`);\n });\n});\n\nexport default EVENT_LIST;\n","import EVENT_LIST from './event-list';\nimport { createPromise } from './helper';\n\n/**\n * At first call it accepts one function\n * calling it second time accepts notification object.\n * notification object then called with first accepted function\n *\n * @param {Function} resolveFn a promise's resolve function\n * @return {Function} a function to accept notification object\n */\nconst resolver = resolveFn => notification => resolveFn(notification);\n\n/**\n * Checks if the property string is present in the source object\n *\n * @param {Object} source source object whom you want to check the property\n * @param {string} property key name that need to be checked\n * @return {boolean} returns true if the property found in the source object\n */\nconst hasOwn = (source, property) => Object.prototype.hasOwnProperty.call(source, property);\n\n/**\n * LifeCycleManager which goes as a dependendecy to a muze\n * it accepts notification from the entire library throughout\n * the exeecution life\n *\n * @export\n * @class LifeCycleManager\n */\nexport default class LifeCycleManager {\n\n /**\n * Creates an instance of LifeCycleManager.\n * @memberof LifeCycleManager\n */\n constructor () {\n this._eventList = EVENT_LIST;\n this._promises = new Map();\n this._notifiers = {};\n this._lifeCycles = {};\n this._unreleasedLifeCycles = {};\n this._boot();\n }\n\n /**\n * Fills all the notifiers with resolver callback\n *\n * @memberof LifeCycleManager\n */\n _boot () {\n this._notifiers = this._eventList.reduce((acc, name) => {\n acc[name] = resolver;\n return acc;\n }, {});\n this._preparePromises();\n }\n\n /**\n * Public method which gives the promise corresponding\n * to the event name\n *\n * @param {string} eventName name of the event like `canvas.drawn`\n * @return {promise} promise that is passed to the user\n * @memberof LifeCycleManager\n */\n retrieve (eventName) {\n return this._promises.get(eventName);\n }\n\n /**\n * Creates a promise that will be passed to user's callback\n *\n * @param {string} eventName name of the event like `canvas.drawn`\n * @return {promise} a pending promise waiting for resolve to be called\n * @memberof LifeCycleManager\n */\n _makeNotifierPromise (eventName) {\n return new Promise((resolve) => {\n this._notifiers[eventName] = resolver(resolve);\n });\n }\n\n /**\n * Prepares the promise map with pending promises\n * all the promises are in a pending state where their's\n * resolve function waiting to be called with notification object\n * @memberof LifeCycleManager\n */\n _preparePromises () {\n this._eventList.forEach((eventName) => {\n const promise = this._makeNotifierPromise(eventName);\n this._promises.set(eventName, promise);\n createPromise(promise, eventName, this);\n });\n }\n\n /**\n * Resolves the promise with notification object\n *\n * @param {string} eventName name of the event in the system\n * @param {Object} notification notification object\n * @param {string} notification.formalName name of the sender creating the notification\n * @param {Object} notification.client instance or array of instances sending the notification\n * @param {string} notification.action the stage name when the event happened like `beforedraw`\n *\n * @memberof LifeCycleManager\n */\n _resolvePromise (eventName, notification) {\n this._notifiers[eventName](notification);\n }\n\n /**\n * Public method which is being called by different\n * subcompoents of the system at different execution atages\n * @param {Object} notification notification object\n * @param {string} notification.formalName name of the sender creating the notification\n * @param {Object} notification.client instance or array of instances sending the notification\n * @param {string} notification.action the stage name when the event happened like `beforedraw`\n * @memberof LifeCycleManager\n */\n notify (notification) {\n // get the composition name from notification\n // or from static formalName() method\n const composition = notification.formalName || notification.client.constructor.formalName();\n notification.formalName = composition;\n this._releasePromisesFromCache();\n this._notify(composition, notification);\n }\n\n /**\n * Notify user the with promsie in a callback\n * if callback not found then cache it\n *\n * @param {string} composition\n * @param {Object} notification notification object\n * @param {string} notification.formalName name of the sender creating the notification\n * @param {Object} notification.client instance or array of instances sending the notification\n * @param {string} notification.action the stage name when the event happened like `beforedraw`\n * @memberof LifeCycleManager\n */\n _notify (composition, notification) {\n const stage = notification.action;\n const eventName = `${composition}.${stage}`;\n\n // resolves promise with the notification object\n this._resolvePromise(eventName, notification);\n\n // get the promise from the promise map\n const promise = this.retrieve(eventName);\n\n if (this._lifeCycles[composition]) {\n if (this._lifeCycles[composition][stage]) {\n // if user given call back exists, then call with promise\n this._callLifeCycleCallback(composition, stage, promise);\n } else {\n // otherwise cache the promise\n this._cachePromise(composition, stage, promise);\n }\n } else {\n this._cachePromise(composition, stage, promise);\n }\n }\n\n /**\n * Calls the user's callback with callback\n *\n * @param {string} composition name of the compositon like `canvas`\n * @param {string} stage the stage name when the event happened like `beforedraw`\n * @param {promise} promise promise that is passed to the user\n * @memberof LifeCycleManager\n */\n _callLifeCycleCallback (composition, stage, promise) {\n const eventName = `${composition}.${stage}`;\n this._lifeCycles[composition][stage](promise);\n this._resetTargetPromise(eventName);\n }\n\n /**\n * Try to clear the cached promsies once we have\n * macthed callbacks from the user\n *\n * @memberof LifeCycleManager\n */\n _releasePromisesFromCache () {\n const compositions = Object.keys(this._unreleasedLifeCycles);\n compositions.forEach((composition) => {\n const stages = Object.keys(this._unreleasedLifeCycles[composition]);\n stages.forEach((stage) => {\n if (this._lifeCycles[composition]) {\n if (this._lifeCycles[composition][stage]) {\n // take the promise from unreleased lifeCycles\n const promise = this._unreleasedLifeCycles[composition][stage];\n // call the user given callback with that promise\n this._callLifeCycleCallback(composition, stage, promise);\n // delete promise from unreleased lifeCycles\n delete this._unreleasedLifeCycles[composition][stage];\n }\n }\n });\n });\n }\n\n /**\n * Cache the promise in the map. This cache\n * then get consumed if we get user callbacks\n * @param {string} composition name of the compositon like `canvas`\n * @param {string} stage the stage name when the event happened like `beforedraw`\n * @param {promise} promise promise that is passed to the user\n * @memberof LifeCycleManager\n */\n _cachePromise (composition, stage, promise) {\n if (!hasOwn(this._unreleasedLifeCycles, composition)) {\n this._unreleasedLifeCycles[composition] = {};\n }\n\n if (!hasOwn(this._unreleasedLifeCycles[composition], stage)) {\n this._unreleasedLifeCycles[composition][stage] = {};\n }\n this._unreleasedLifeCycles[composition][stage] = promise;\n }\n\n /**\n * It register's the callbacks gievn the user\n *\n * @param {Object} [lifeCycles={}] a object with list of callbacks\n * @memberof LifeCycleManager\n */\n register (lifeCycles = {}) {\n this._lifeCycles = lifeCycles;\n // as we get all the callbacks, try to call them\n // from unreleased promise map\n this._releasePromisesFromCache();\n }\n\n /**\n * Reset the promise into pending state\n *\n * @param {string} eventName name of the event happening\n * @memberof LifeCycleManager\n */\n _resetTargetPromise (eventName) {\n setTimeout(() => {\n this._notifiers[eventName] = resolver;\n this._promises.set(eventName, this._makeNotifierPromise(eventName));\n }, 0);\n }\n}\n","import LifeCycleManager from './lifecycle-manager';\n\nexport default LifeCycleManager;\n","/**\n * Creates a new promise when the given promise is resolved. This needs to be done so that after the lifecycle event\n * is completed, then again when the event gets completed, then a new promise gets resolved.\n *\n * @param {Promise} promise Instance of promise\n * @param {string} eventName name of event\n * @param {LifeCycleManager} context Instance of lifecyclemanager\n */\nexport const createPromise = (promise, eventName, context) => {\n promise.then(() => {\n const prm = context._makeNotifierPromise(eventName);\n context._promises.set(eventName, prm);\n createPromise(prm, eventName, context);\n });\n};\n","import { default as DataModel } from 'datamodel';\nimport * as scales from './scales';\nimport * as colorSchemes from './color-schemes';\nimport * as STATE_NAMESPACES from './enums/namespace';\n\nconst InvalidAwareTypes = DataModel.InvalidAwareTypes;\n\nexport {\n InvalidAwareTypes,\n DataModel\n};\n\nexport {\n ReservedFields,\n CommonProps,\n COORD_TYPES\n} from './enums';\n\nexport { STATE_NAMESPACES };\n\nexport {\n scales,\n colorSchemes\n};\n\nexport {\n getNearestValue,\n getValueParser,\n transformColors,\n detectColor,\n hslToRgb,\n rgbToHsv,\n hexToHsv,\n hsvToRgb,\n escapeHTML,\n angleToRadian,\n generateGetterSetters,\n getArraySum,\n ERROR_MSG,\n interpolator,\n colorInterpolator,\n numberInterpolator,\n piecewiseInterpolator,\n reqAnimFrame,\n cancelAnimFrame,\n nextAnimFrame,\n getMax,\n getMin,\n getDomainFromData,\n getUniqueId,\n mergeRecursive,\n unionDomain,\n replaceCSSPrefix,\n symbolFns,\n defaultValue,\n easeFns,\n clone,\n interpolateArray,\n getMinPoint,\n getMaxPoint,\n getClosestIndexOf,\n registerListeners,\n Voronoi,\n checkExistence,\n sanitizeIP,\n getMinDiff,\n capitalizeFirst,\n getWindow,\n getQualifiedClassName,\n Store,\n getDependencyOrder,\n objectIterator,\n intSanitizer,\n transactor,\n enableChainedTransaction,\n isHTMLElem,\n isEqual,\n isSimpleObject,\n nextFrame,\n filterPropagationModel,\n getObjProp,\n getDataModelFromIdentifiers,\n getDataModelFromRange,\n transposeArray,\n toArray,\n extendsClass,\n concatModels,\n assembleModelFromIdentifiers,\n isValidValue,\n nestCollection,\n stack,\n getSymbol,\n Scales,\n Symbols,\n pathInterpolators,\n hslInterpolator,\n getSmallestDiff,\n require,\n formatTemporal,\n nearestSortingDetails,\n createSelection,\n temporalFields,\n retrieveNearestGroupByReducers,\n retrieveFieldDisplayName,\n sanitizeDomainWhenEqual\n} from './common-utils';\n\nexport {\n selectElement,\n makeElement,\n applyStyle,\n addClass,\n removeClass,\n appendElement,\n setAttrs,\n setStyles,\n createElement,\n createElements,\n clipElement,\n getElementsByClassName,\n getMousePos,\n getEvent,\n getD3Drag,\n getSmartComputedStyle,\n getClientPoint,\n hasTouch\n} from './renderer-utils';\n\nexport {\n timeMillisecond,\n timeSecond,\n timeMinute,\n timeHour,\n timeDay,\n timeWeek,\n timeMonth,\n timeYear\n} from 'd3-time';\n\nexport { default as Smartlabel } from 'fusioncharts-smartlabel';\n\nexport { dataSelect } from './DataSystem';\n\nexport { default as LifeCycleManager } from './lifecycle-manager';\n\nexport {\n DimensionSubtype,\n FieldType,\n MeasureSubtype,\n DateTimeFormatter,\n DM_DERIVATIVES,\n GROUP_BY_FUNCTIONS\n} from 'datamodel';\n\n","export const DRAG = 'drag';\nexport const HOVER = 'hover';\nexport const SELECTIONDRAG = 'selectiondrag';\nexport const CLICK = 'click';\nexport const LONGTOUCH = 'longtouch';\nexport const TOUCHDRAG = 'touchdrag';\nexport const ALL_ACTIONS = '*';\n","const SELECTION_NEW_ENTRY = 1;\nconst SELECTION_NEW_EXIT = -1;\nconst SELECTION_NULL = 0;\nconst SELECTION_OLD_ENTRY = 2;\nconst SELECTION_OLD_EXIT = -2;\n\nexport {\n SELECTION_NEW_ENTRY,\n SELECTION_NEW_EXIT,\n SELECTION_NULL,\n SELECTION_OLD_ENTRY,\n SELECTION_OLD_EXIT\n};\n","import SelectionSet from './selection-set';\n\nexport default SelectionSet;\n","import {\n SELECTION_NEW_ENTRY, SELECTION_NEW_EXIT, SELECTION_NULL, SELECTION_OLD_ENTRY, SELECTION_OLD_EXIT\n} from '../enums/selection';\n/* eslint-disable guard-for-in */\n\n/**\n * This component is used to keep track of the row tuples of the data which gets added and removed. This keeps\n * information of which rows are in previous and new entry set and previous and new exit set. This is initialized by\n * {@link Firebolt}.\n *\n * @public\n *\n * @class SelectionSet\n */\nclass SelectionSet {\n /**\n * Creates an instance of selection set\n *\n * @param {Array.} completeSet Set of unique ids.\n */\n constructor (completeSet, _volatile) {\n this.completeSet = completeSet;\n this._set = completeSet.reduce((obj, key) => {\n obj[key] = SELECTION_NULL;\n return obj;\n }, {});\n this._volatile = _volatile;\n this._completeSetCount = completeSet.length;\n this._lockedSelection = {};\n this._resetted = true;\n }\n\n /**\n * Adds a set of ids to the selection set. This also moves the other rows to exit set.\n *\n * @public\n * @param {Array.} ids Array of unique ids.\n *\n * @return {SelectionSet} Instance of selection set.\n */\n add (ids) {\n this._resetted = false;\n\n const set = this._set;\n // from exitset to entryset\n ids.forEach((i) => {\n set[i] = SELECTION_NEW_ENTRY;\n });\n\n for (const key in set) {\n if (set[key] !== SELECTION_NEW_ENTRY && set[key] !== SELECTION_OLD_ENTRY) {\n set[key] = set[key] < 0 ? SELECTION_OLD_EXIT : SELECTION_NEW_EXIT;\n }\n }\n return this;\n }\n\n /**\n * Adds an array of ids to the old entry set.\n *\n * @param {Array.} ids Array of unique ids\n *\n * @return {SelectionSet} Instance of selection set.\n */\n update (ids) {\n const set = this._set;\n // from exitset to entryset\n ids.forEach((i) => {\n set[i] = SELECTION_OLD_ENTRY;\n });\n\n return this;\n }\n\n /**\n * Moves all ids which in new entry set to old entry set.\n *\n * @public\n * @param {Array.} ids Array of unique ids\n *\n * @return {SelectionSet} Instance of selection set.\n */\n updateEntry () {\n const set = this._set;\n\n // from exitset to entryset\n for (const key in set) {\n set[key] = set[key] === SELECTION_NEW_ENTRY ? SELECTION_OLD_ENTRY : set[key];\n }\n return this;\n }\n\n /**\n * Moves an array of ids which are in new exit set to old exit set.\n *\n * @public\n *\n * @param {Array.} ids Array of unique ids.\n *\n * @return {SelectionSet} Instance of selection set.\n */\n updateExit () {\n const set = this._set;\n // from exitset to entryset\n for (const key in set) {\n set[key] = set[key] === SELECTION_NEW_EXIT ? SELECTION_OLD_EXIT : set[key];\n }\n return this;\n }\n\n /**\n * Removes an array of ids from the selection set. It also moves the remaining row ids to entry set.\n *\n * @public\n * @param {Array.} ids Array of unique ids\n *\n * @return {SelectionSet} Instance of selection set\n */\n remove (ids) {\n this._resetted = false;\n\n const set = this._set;\n ids.forEach((i) => {\n set[i] = SELECTION_NEW_EXIT;\n });\n\n for (const key in set) {\n if (set[key] !== SELECTION_NEW_EXIT && set[key] !== SELECTION_OLD_EXIT) {\n set[key] = set[key] === 0 ? SELECTION_NEW_ENTRY : SELECTION_OLD_ENTRY;\n }\n }\n\n return this;\n }\n\n getSets () {\n const set = this._set;\n const retObj = {\n entrySet: [[], []],\n exitSet: [[], []],\n completeSet: []\n };\n\n for (const key in set) {\n if (set[key] > 0) {\n set[key] === SELECTION_OLD_ENTRY && retObj.entrySet[0].push(key);\n set[key] === SELECTION_NEW_ENTRY && retObj.entrySet[1].push(key);\n } else if (set[key] < 0) {\n set[key] === SELECTION_OLD_EXIT && retObj.exitSet[0].push(key);\n set[key] === SELECTION_NEW_EXIT && retObj.exitSet[1].push(key);\n }\n retObj.completeSet.push(key);\n }\n\n ['entrySet', 'exitSet'].forEach((type) => {\n retObj[type] = retObj[type].map(e => e.map(Number));\n });\n retObj.completeSet = retObj.completeSet.map(Number);\n\n return retObj;\n }\n\n /**\n * Resets an array of ids in the selection set to initial state. It sets the value of every unique id value to\n * null in the selection set which means they are neither in entry set nor in exit set. If no ids are passed,\n * then it resets all the ids to null.\n *\n * @public\n *\n * @param {Array} ids Array of unique ids.\n * @return {SelectionSet} Instance of selection set.\n */\n reset (ids) {\n const set = this._set;\n if (ids) {\n ids.forEach((i) => {\n set[i] = SELECTION_NULL;\n });\n } else {\n const lockedSel = this._lockedSelection;\n for (const key in set) {\n if (!(key in lockedSel)) {\n set[key] = SELECTION_NULL;\n }\n }\n }\n this._resetted = true;\n return this;\n }\n\n /**\n * Gets the set of ids which are added in the selection set.\n *\n * @public\n *\n * @return {Array.} Array of unique ids\n */\n getEntrySet () {\n const set = this._set;\n const addSet = [];\n\n for (const key in set) {\n set[key] === SELECTION_NEW_ENTRY && addSet.push(key);\n }\n\n return addSet;\n }\n\n /**\n * Returns a set of unique ids which are already present in entry set.\n *\n * @public\n * @param {Array} addSet Array of unique ids which are added\n *\n * @return {Array} Array of unique ids which are already in old entry set or new entry set\n */\n getExistingEntrySet (addSet) {\n const set = this._set;\n return addSet.filter(d => set[d] === SELECTION_NEW_ENTRY || set[d] === SELECTION_OLD_ENTRY);\n }\n\n /**\n * Returns a set of unique ids which are already present in exit set.\n *\n * @public\n * @param {Array} addSet Array of unique ids which are added\n *\n * @return {Array} Array of unique ids which are already in old exit set or new exit set\n */\n getExistingExitSet (removeSet) {\n const set = this._set;\n return removeSet.filter(d => set[d] === SELECTION_NEW_EXIT || set[d] === SELECTION_OLD_EXIT);\n }\n\n /**\n * Gets the set of ids which are added in the selection set.\n * @return {Array.} Array of unique ids\n */\n getOldEntry () {\n const set = this._set;\n const updateSet = [];\n\n for (const key in set) {\n set[key] === SELECTION_OLD_ENTRY && updateSet.push(key);\n }\n return updateSet;\n }\n\n /**\n * Gets the set of ids which are added in the selection set.\n * @return {Array.} Array of unique ids\n */\n getOldExit () {\n const set = this._set;\n const updateSet = [];\n\n for (const key in set) {\n set[key] === SELECTION_OLD_EXIT && updateSet.push(key);\n }\n\n return updateSet;\n }\n\n /**\n * Gets the array of ids which are in the exit set.\n *\n * @public\n * @return {Array.} Array of unique ids\n */\n getExitSet () {\n const set = this._set;\n const removeSet = [];\n\n for (const key in set) {\n set[key] === SELECTION_NEW_EXIT && removeSet.push(key);\n }\n return removeSet;\n }\n\n /**\n * Gets all the ids which are either in exit or entry set.\n *\n * @public\n * @return {Array} Array of unique ids\n */\n getCompleteSet () {\n const set = this._set;\n const completeSet = [];\n\n for (const key in set) {\n completeSet.push(key);\n }\n\n return completeSet;\n }\n\n getCompleteSetCount () {\n return this._completeSetCount;\n }\n\n resetted () {\n return this._resetted;\n }\n\n /**\n * Swaps the add set and remove set in the selection set.\n * @return {SelectionSet} Instance of selection set.\n */\n toggle () {\n const set = this._set;\n\n for (const key in set) {\n if (set[key] === SELECTION_NEW_ENTRY) {\n set[key] = SELECTION_NEW_EXIT;\n } else if (set[key] === SELECTION_NEW_EXIT) {\n set[key] = SELECTION_NEW_ENTRY;\n } else if (set[key] === SELECTION_OLD_ENTRY) {\n set[key] = SELECTION_OLD_EXIT;\n } else {\n set[key] = SELECTION_OLD_ENTRY;\n }\n }\n\n return this;\n }\n}\n\nexport default SelectionSet;\n","import { clone, retrieveNearestGroupByReducers } from 'muze-utils';\nimport * as SELECTION from '../enums/selection';\n\nexport const initializeSideEffects = (context, sideEffects) => {\n const sideEffectsMap = context._sideEffects;\n const config = context.config();\n sideEffects = sideEffects instanceof Array ? sideEffects : Object.values(sideEffects);\n sideEffects.forEach((SideEffect) => {\n const formalName = SideEffect.formalName();\n const sideEffectInstance = sideEffectsMap[formalName];\n sideEffectsMap[formalName] = sideEffectInstance || new SideEffect(context);\n const sideEffectConf = config[formalName];\n sideEffectConf && sideEffectsMap[formalName].config(sideEffectConf);\n });\n return sideEffectsMap;\n};\n\nexport const initializeBehaviouralActions = (context, actions) => {\n const dispatchableBehaviours = {};\n\n actions = actions instanceof Array ? actions : Object.values(actions);\n actions.forEach((Action) => {\n dispatchableBehaviours[Action.formalName()] = new Action(context);\n });\n return dispatchableBehaviours;\n};\n\nexport const initializePhysicalActions = (context, actions) => {\n const physicalActions = {};\n\n for (const name in actions) {\n if (!({}).hasOwnProperty.call(name, actions)) {\n physicalActions[name] = actions[name](context);\n }\n }\n return physicalActions;\n};\n\nexport const changeSideEffectAvailability = (context, fn, toEnable) => {\n const sideEffects = context.sideEffects();\n for (const key in sideEffects) {\n if ({}.hasOwnProperty.call(sideEffects, key)) {\n let change = true;\n if (fn && fn(key) === false) {\n change = false;\n }\n if (change) {\n toEnable ? sideEffects[key].enable() : sideEffects[key].disable();\n }\n }\n }\n};\n\nexport const getMergedSet = set => [...new Set([...set[0], ...set[1]])];\n\nexport const getSourceFields = (propagationInf, criteria = {}) => {\n const sourceIdentifiers = propagationInf.sourceIdentifiers;\n let sourceFields;\n if (sourceIdentifiers) {\n sourceFields = sourceIdentifiers.getSchema().map(d => d.name);\n } else if (criteria instanceof Array) {\n sourceFields = criteria[0];\n } else {\n sourceFields = Object.keys(criteria || {});\n }\n return sourceFields;\n};\n\nconst conditionsMap = {\n newEntry: [SELECTION.SELECTION_NEW_ENTRY],\n oldEntry: [SELECTION.SELECTION_OLD_ENTRY],\n mergedEnter: [SELECTION.SELECTION_NEW_ENTRY, SELECTION.SELECTION_OLD_ENTRY],\n newExit: [SELECTION.SELECTION_NEW_EXIT],\n oldExit: [SELECTION.SELECTION_OLD_EXIT],\n mergedExit: [SELECTION.SELECTION_NEW_EXIT, SELECTION.SELECTION_OLD_EXIT],\n complete: []\n};\n\nexport const getModelFromSet = (type, model, set) => {\n if (model) {\n return model.select((fields, i) =>\n (conditionsMap[type].some(condition => set[i] === condition)), {\n saveChild: false\n });\n }\n return null;\n};\n\nexport const getSetInfo = (type, set, config) => {\n let model = null;\n const filteredDataModel = config.filteredDataModel;\n const selectionSet = config.selectionSet;\n if (!config.propagationData) {\n if (selectionSet.resetted()) {\n model = null;\n } else {\n model = getModelFromSet(type, config.dataModel, config.selectionSet._set);\n }\n } else if (filteredDataModel) {\n model = type === 'mergedEnter' ? filteredDataModel[0] : filteredDataModel[1];\n }\n return {\n uids: set,\n length: set.length,\n model\n };\n};\n\nexport const getSideEffects = (behaviour, behaviourEffectMap) => {\n const sideEffects = [];\n for (const key in behaviourEffectMap) {\n const behaviours = key.split(',');\n const found = behaviours.some(d => d === behaviour);\n if (found) {\n sideEffects.push({\n effects: behaviourEffectMap[key],\n behaviours\n });\n }\n }\n return sideEffects;\n};\n\nexport const unionSets = (context, behaviours) => {\n let combinedSet = {};\n const models = {\n mergedEnter: null,\n mergedExit: null\n };\n behaviours.forEach((behaviour) => {\n const entryExitSet = context._entryExitSet[behaviour];\n if (entryExitSet) {\n combinedSet = Object.assign(combinedSet, clone(entryExitSet));\n ['mergedEnter', 'mergedExit'].forEach((type) => {\n const model = entryExitSet[type].model;\n let existingModel = models[type];\n let aggFns = retrieveNearestGroupByReducers(model);\n if (!existingModel) {\n existingModel = models[type] = model;\n } else if (`${model.getSchema().map(d => d.name).sort()}` ===\n `${existingModel.getSchema().map(d => d.name).sort()}`) {\n aggFns = Object.assign({}, retrieveNearestGroupByReducers(existingModel));\n existingModel = models[type] = model.union(existingModel);\n } else {\n existingModel = model;\n }\n combinedSet[type].model = existingModel;\n combinedSet[type].aggFns = aggFns;\n });\n }\n });\n return combinedSet;\n};\n","import {\n mergeRecursive,\n hasTouch,\n filterPropagationModel,\n FieldType,\n selectElement,\n isSimpleObject\n} from 'muze-utils';\nimport { ALL_ACTIONS } from './enums/actions';\nimport SelectionSet from './selection-set';\nimport {\n initializeBehaviouralActions,\n initializeSideEffects,\n changeSideEffectAvailability,\n initializePhysicalActions,\n unionSets,\n getSideEffects\n} from './helper';\n\n/**\n * This class is responsible for dispatching behavioural actions and side effects. It also keeps the information of\n * registered physical actions, behavioural actions and side effects. Also, it keeps the map of physical and behavioural\n * actions and behavioural actions and side effects. Whenever any behavioural action is dispatched, it also propagates\n * the rows which got affected to the other datamodels. This class is initialized by {@link VisualUnit} and legend to\n * manage it's interaction.\n *\n * @public\n * @class Firebolt\n * @module Firebolt\n */\nexport default class Firebolt {\n constructor (context, actions, sideEffects, behaviourEffectMap) {\n this.context = context;\n this._sideEffectDefinitions = {};\n this._sideEffects = {};\n this._propagationInf = {};\n this._actions = {\n behavioural: {},\n physical: {}\n };\n this._selectionSet = {};\n this._volatileSelectionSet = {};\n this._propagationFields = {};\n this._sourceSideEffects = {\n selectionBox: () => false\n };\n this._propagationBehaviourMap = {};\n this._sourceBehaviours = {};\n this._actionBehaviourMap = {};\n this._config = {};\n this._behaviourEffectMap = {};\n this._entryExitSet = {};\n this._actionHistory = {};\n this._queuedSideEffects = {};\n\n this.mapSideEffects(behaviourEffectMap);\n this.registerBehaviouralActions(actions.behavioural);\n this.registerSideEffects(sideEffects);\n this.registerPhysicalBehaviouralMap(actions.physicalBehaviouralMap);\n this.registerPhysicalActions(actions.physical);\n }\n\n config (...config) {\n if (config.length) {\n this._config = mergeRecursive(this._config, config[0]);\n return this;\n }\n return this._config;\n }\n\n mapSideEffects (behEffectMap) {\n const behaviourEffectMap = this._behaviourEffectMap;\n for (const key in behEffectMap) {\n if ({}.hasOwnProperty.call(behEffectMap, key)) {\n const sideEffects = behEffectMap[key] || [];\n let preventDefaultActions = false;\n let effectNames;\n if (isSimpleObject(sideEffects)) {\n effectNames = sideEffects.effects;\n preventDefaultActions = sideEffects.preventDefaultActions;\n } else {\n effectNames = sideEffects;\n }\n !behaviourEffectMap[key] && (behaviourEffectMap[key] = []);\n this._behaviourEffectMap[key] = [...new Set(preventDefaultActions ? effectNames :\n [...behaviourEffectMap[key], ...effectNames])];\n }\n }\n return this;\n }\n\n registerBehaviouralActions (actions) {\n const behaviours = initializeBehaviouralActions(this, actions);\n this.prepareSelectionSets(behaviours);\n Object.assign(this._actions.behavioural, behaviours);\n return this;\n }\n\n prepareSelectionSets () {\n return this;\n }\n\n registerSideEffects (sideEffects) {\n for (const key in sideEffects) {\n this._sideEffectDefinitions[sideEffects[key].formalName()] = sideEffects[key];\n }\n this.initializeSideEffects();\n return this;\n }\n\n applySideEffects (sideEffects, selectionSet, payload) {\n const sideEffectStore = this.sideEffects();\n const actionHistory = this._actionHistory;\n const queuedSideEffects = this._queuedSideEffects;\n sideEffects.forEach((sideEffect) => {\n let options;\n let name;\n const effects = sideEffect.effects;\n const behaviours = sideEffect.behaviours;\n const combinedSet = unionSets(this, behaviours, selectionSet);\n effects.forEach((effect) => {\n if (typeof effect === 'object') {\n name = effect.name;\n options = effect.options;\n } else {\n name = effect;\n }\n\n const sideEffectInstance = sideEffectStore[name];\n if (sideEffectInstance.isEnabled()) {\n if (!sideEffectInstance.constructor.mutates() &&\n Object.values(actionHistory).some(d => d.isMutableAction)) {\n queuedSideEffects[`${name}-${behaviours.join()}`] = {\n name,\n params: [combinedSet, payload, options]\n };\n } else {\n this.dispatchSideEffect(name, combinedSet, payload, options);\n }\n }\n });\n });\n return this;\n }\n\n dispatchSideEffect (name, selectionSet, payload, options = {}) {\n const sideEffectStore = this.sideEffects();\n const sideEffect = sideEffectStore[name];\n let disable = false;\n if (options.filter && options.filter(sideEffect)) {\n disable = true;\n }\n !disable && sideEffectStore[name].apply(selectionSet, payload, options);\n }\n\n registerPropagationBehaviourMap (map) {\n this._propagationBehaviourMap = Object.assign(this._propagationBehaviourMap, map || {});\n return this;\n }\n\n dispatchBehaviour (behaviour, payload, propagationInfo = {}) {\n const propagate = propagationInfo.propagate !== undefined ? propagationInfo.propagate : true;\n const behaviouralActions = this._actions.behavioural;\n const action = behaviouralActions[behaviour];\n const behaviourEffectMap = this._behaviourEffectMap;\n const sideEffects = getSideEffects(behaviour, behaviourEffectMap);\n this._propagationInf = propagationInfo;\n\n if (action) {\n const selectionSet = action.dispatch(payload);\n const propagationSelectionSet = this.getPropagationSelectionSet(selectionSet);\n this._entryExitSet[behaviour] = propagationSelectionSet;\n const shouldApplySideEffects = this.shouldApplySideEffects(propagate);\n\n if (propagate) {\n this.propagate(behaviour, payload, selectionSet.find(d => d.sourceSelectionSet), sideEffects);\n }\n if (shouldApplySideEffects) {\n const applicableSideEffects = this.getApplicableSideEffects(sideEffects, payload, propagationInfo);\n this.applySideEffects(applicableSideEffects, propagationSelectionSet, payload);\n }\n }\n\n return this;\n }\n\n getPropagationSelectionSet (selectionSet) {\n return selectionSet.find(d => !d.sourceSelectionSet);\n }\n\n shouldApplySideEffects () {\n return true;\n }\n\n changeBehaviourStateOnPropagation (behaviour, value) {\n if (value instanceof Function) {\n this._sourceBehaviours[behaviour] = value;\n } else {\n this._sourceBehaviours[behaviour] = () => value;\n }\n return this;\n }\n\n changeSideEffectStateOnPropagation (sideEffect, value) {\n if (value instanceof Function) {\n this._sourceSideEffects[sideEffect] = value;\n } else {\n this._sourceSideEffects[sideEffect] = () => value;\n }\n }\n\n propagate () {\n return this;\n }\n\n sideEffects (...sideEffects) {\n if (sideEffects.length) {\n this._sideEffects = sideEffects[0];\n return this;\n }\n return this._sideEffects;\n }\n\n enableSideEffects (fn) {\n changeSideEffectAvailability(this, fn, true);\n return this;\n }\n\n disableSideEffects (fn) {\n changeSideEffectAvailability(this, fn, false);\n return this;\n }\n\n dissociateBehaviour (behaviour, physicalAction) {\n const actionBehaviourMap = this._actionBehaviourMap;\n for (const key in actionBehaviourMap) {\n if (key === physicalAction) {\n const behaviourMap = actionBehaviourMap[key];\n behaviourMap.behaviours = behaviourMap.behaviours.filter(d => d !== behaviour);\n this.mapActionsAndBehaviour(key);\n }\n }\n\n return this;\n }\n\n dissociateSideEffect (sideEffect, behaviour) {\n const behaviourEffectMap = this._behaviourEffectMap;\n behaviourEffectMap[behaviour] = behaviourEffectMap[behaviour].filter(d => (d.name || d) !== sideEffect);\n return this;\n }\n\n getApplicableSideEffects (sideEffects) {\n return sideEffects;\n }\n\n attachPropagationListener (dataModel) {\n dataModel.unsubscribe('propagation');\n dataModel.on('propagation', this.onDataModelPropagation());\n return this;\n }\n\n onDataModelPropagation () {\n return (propValue) => {\n const payload = propValue.payload;\n const action = payload.action;\n\n this.dispatchBehaviour(action, payload, {\n propagate: false\n });\n };\n }\n\n createSelectionSet (uniqueIds, behaviouralActions) {\n const behaviours = behaviouralActions || this._actions.behavioural;\n const selectionSet = this._selectionSet;\n const volatileSelectionSet = this._volatileSelectionSet;\n\n for (const key in behaviours) {\n if ({}.hasOwnProperty.call(behaviours, key)) {\n selectionSet[key] = new SelectionSet(uniqueIds);\n volatileSelectionSet[key] = new SelectionSet(uniqueIds, true);\n }\n }\n this._volatileSelectionSet = volatileSelectionSet;\n this.selectionSet(selectionSet);\n return this;\n }\n\n selectionSet (...selectionSet) {\n if (selectionSet.length) {\n this._selectionSet = selectionSet[0];\n return this;\n }\n return this._selectionSet;\n }\n\n initializeSideEffects () {\n const sideEffectDefinitions = this._sideEffectDefinitions;\n this.sideEffects(initializeSideEffects(this, sideEffectDefinitions));\n return this;\n }\n\n registerPhysicalActions (actions) {\n const initedActions = initializePhysicalActions(this, actions);\n Object.assign(this._actions.physical, initedActions);\n return this;\n }\n\n /**\n * Allows to propagate the datamodel with only the supplied fields. When propagation is done, then the fields\n * which are supplied for the specified behavioural action is propagated.\n *\n * @public\n *\n * @param {string} action Name of behavioural action. If '*' is specified, then for all behavioural actions it is\n * applied.\n * @param {Array} fields Array of field names which will be propagated.\n * @param {boolean} append If true, then it is appended to the existing propagation data model fields else only\n * those fields are projected from propagation data model and propagated.\n *\n * @return {Firebolt} Instance of firebolt\n */\n propagateWith (action, fields, append = false) {\n const behaviouralActions = this._actions.behavioural;\n if (fields.length) {\n if (action === ALL_ACTIONS) {\n for (const key in behaviouralActions) {\n this._propagationFields[key] = {\n fields,\n append\n };\n }\n } else {\n this._propagationFields[action] = {\n fields,\n append\n };\n }\n return this;\n }\n return this._propagationFields;\n }\n\n /**\n * Map actions and behaviours\n * @return {Firebolt} Firebolt instance\n */\n mapActionsAndBehaviour (phyAction) {\n const initedPhysicalActions = this._actions.physical;\n const map = this._actionBehaviourMap;\n\n for (const action in map) {\n if (!({}).hasOwnProperty.call(action, map) && action === (phyAction || action)) {\n let target;\n const mapObj = map[action];\n target = mapObj.target;\n const touch = mapObj.touch;\n if (!target) {\n target = this.context.getDefaultTargetContainer();\n }\n const bind = hasTouch() ? touch === true || touch === undefined : !touch;\n bind && this.bindActionWithBehaviour(initedPhysicalActions[action],\n target, mapObj.behaviours);\n }\n }\n return this;\n }\n\n registerPhysicalBehaviouralMap (map) {\n this._actionBehaviourMap = mergeRecursive(this._actionBehaviourMap, map);\n return this;\n }\n\n /**\n * Binds a target element with an action.\n *\n * @param {Function} action Action method\n * @param {string} target Class name of element\n * @param {Array} behaviourList Array of behaviours\n * @return {FireBolt} Instance of firebolt\n */\n bindActionWithBehaviour (action, targets, behaviourList) {\n if (typeof (targets) === 'string') {\n targets = [targets];\n }\n targets.forEach((target) => {\n const mount = this.context.mount();\n const nodes = target.node instanceof Function ? target : selectElement(mount).selectAll(target);\n if (!nodes.empty()) {\n if (nodes instanceof Array) {\n nodes.forEach((node) => {\n action(selectElement(node), behaviourList);\n });\n } else {\n action(nodes, behaviourList);\n }\n }\n });\n return this;\n }\n\n getPropagationInf () {\n return this._propagationInf;\n }\n\n getAddSetFromCriteria (criteria, propagationInf = {}) {\n const context = this.context;\n const filteredDataModel = propagationInf.data ? propagationInf.data :\n context.getDataModelFromIdentifiers(criteria, 'all');\n const xFields = context.fields().x || [];\n const yFields = context.fields().y || [];\n const xMeasures = xFields.every(field => field.type() === FieldType.MEASURE);\n const yMeasures = yFields.every(field => field.type() === FieldType.MEASURE);\n return {\n model: filteredDataModel,\n uids: criteria === null ? null : (propagationInf.data ? filterPropagationModel(this.getFullData(),\n propagationInf.data[0], xMeasures && yMeasures).getData().uids : filteredDataModel[0].getData().uids)\n };\n }\n\n getSelectionSets (action) {\n const sourceId = this.context.id();\n const propagationInf = this._propagationInf || {};\n const propagationSource = propagationInf.sourceId;\n let applicableSelectionSets = [];\n if (propagationSource !== sourceId) {\n applicableSelectionSets = [this._volatileSelectionSet[action]];\n }\n\n if (propagationSource) {\n applicableSelectionSets.push(this.selectionSet()[action]);\n }\n return applicableSelectionSets;\n }\n\n getFullData () {\n return this.context.data();\n }\n\n resetted () {\n return this._resetted;\n }\n\n /**\n * Returns the entry and exit set information of the specified behavioural action.\n *\n * @public\n *\n * @param {string} behaviour Name of behavioural action.\n *\n * @return {Object} Entry exit set information.\n */\n getEntryExitSet (behaviour) {\n return this._entryExitSet[behaviour];\n }\n}\n","import { getSetInfo, getMergedSet, getSourceFields } from '../../helper';\n\n/**\n * This is the base class has all the common functionalities needed for all behavioural actions. Any other behavioural\n * action needs to extend this class.\n *\n * @public\n * @class GenericBehaviour\n * @module GenericBehaviour\n */\nexport default class GenericBehaviour {\n constructor (firebolt) {\n this.firebolt = firebolt;\n this._enabled = true;\n }\n\n /**\n * Returns entry and exit set information. This method is called by firebolt when ```dispatchBehaviour``` is called\n * dynamically or when any physical action is triggered on the chart.\n *\n * @param {Object} payload Payload information.\n * @param {Object|Array} payload.criteria Identifiers of data interacted with.\n *\n * @return {Array} Entry and exit set information.\n */\n dispatch (payload) {\n const criteria = payload.criteria;\n const firebolt = this.firebolt;\n const formalName = this.constructor.formalName();\n const selectionSets = firebolt.getSelectionSets(formalName);\n const {\n model: filteredDataModel,\n uids\n } = this.firebolt.getAddSetFromCriteria(criteria, this.firebolt.getPropagationInf());\n const entryExitSets = selectionSets.map((selectionSet) => {\n this.setSelectionSet(uids, selectionSet);\n return this.getEntryExitSet(selectionSet, filteredDataModel, payload);\n });\n\n return entryExitSets;\n }\n\n /**\n * Updates the selection set by adding uids to the instance of {@link SelectionSet} or removing them.\n * {@link SelectionSet} keeps the information of which rows are in the entry set and exit set.\n *\n * @public\n * @param {Array} addSet Array of row ids which got affected during interaction.\n * @param {SelectionSet} selectionSet Instance of selection set.\n *\n * @return {GenericBehaviour} Instance of behaviour.\n */\n setSelectionSet () {\n return this;\n }\n\n getEntryExitSet (selectionSet, filteredDataModel, payload) {\n const {\n entrySet,\n exitSet,\n completeSet\n } = selectionSet.getSets();\n const propagationInf = this.firebolt.getPropagationInf();\n const dataModel = this.firebolt.getFullData();\n const setConfig = {\n isSourceFieldPresent: propagationInf.isSourceFieldPresent,\n dataModel,\n filteredDataModel,\n propagationData: propagationInf.data,\n selectionSet\n };\n\n return {\n entrySet: [getSetInfo('oldEntry', entrySet[0], setConfig),\n getSetInfo('newEntry', entrySet[1], setConfig)],\n exitSet: [getSetInfo('oldEntry', exitSet[0], setConfig),\n getSetInfo('newExit', exitSet[1], setConfig)],\n mergedEnter: getSetInfo('mergedEnter', getMergedSet(entrySet), setConfig),\n mergedExit: getSetInfo('mergedExit', getMergedSet(exitSet), setConfig),\n completeSet: getSetInfo('complete', completeSet, setConfig),\n isSourceFieldPresent: propagationInf.isSourceFieldPresent,\n fields: getSourceFields(propagationInf, payload.criteria),\n sourceSelectionSet: selectionSet._volatile === true\n };\n }\n\n static mutates () {\n return false;\n }\n\n enable () {\n this._enabled = true;\n }\n\n disable () {\n this._enabled = false;\n }\n\n isEnabled () {\n return this._enabled;\n }\n}\n\n","import GenericBehaviour from './generic';\nimport { getMergedSet } from '../../helper';\nimport * as SELECTION from '../../enums/selection';\n\nexport default class VolatileBehaviour extends GenericBehaviour {\n setSelectionSet (addSet, selectionSet) {\n if (addSet === null) {\n selectionSet.reset();\n } else if (addSet.length) {\n // new add set\n const existingAddSet = addSet.filter(d => selectionSet._set[d] === SELECTION.SELECTION_NEW_ENTRY\n || selectionSet._set[d] === SELECTION.SELECTION_OLD_ENTRY);\n selectionSet.updateExit();\n const { entrySet } = selectionSet.getSets();\n selectionSet.reset(getMergedSet(entrySet));\n selectionSet.add(addSet);\n selectionSet.update(existingAddSet);\n } else {\n selectionSet.remove(selectionSet.getCompleteSet());\n }\n }\n}\n","export const BRUSH = 'brush';\nexport const HIGHLIGHT = 'highlight';\nexport const TOOLTIP = 'tooltip';\nexport const FILTER = 'filter';\nexport const SELECT = 'select';\n","import VolatileBehaviour from './volatile';\nimport { HIGHLIGHT } from '../../enums/behaviours';\n\nexport default class HighlightBehaviour extends VolatileBehaviour {\n static formalName () {\n return HIGHLIGHT;\n }\n}\n","import VolatileBehaviour from './volatile';\nimport * as BEHAVIOURNAMES from '../../enums/behaviours';\n\n/**\n * This is the behaviour for brushing a region on the chart. It accepts a payload\n * which contains the x and y range of the data and other configuration. It will then\n * create a selection box from the range and select the points which fall within the range.\n */\nexport default class BrushBehaviour extends VolatileBehaviour {\n static formalName () {\n return BEHAVIOURNAMES.BRUSH;\n }\n}\n","import VolatileBehaviour from './volatile';\nimport { FILTER } from '../../enums/behaviours';\n\nexport default class FilterBehaviour extends VolatileBehaviour {\n static formalName () {\n return FILTER;\n }\n\n static mutates () {\n return true;\n }\n}\n","import GenericBehaviour from './generic';\nimport { getMergedSet } from '../../helper';\nimport * as SELECTION from '../../enums/selection';\n\nexport default class PersistentBehaviour extends GenericBehaviour {\n setSelectionSet (addSet, selectionSet) {\n if (addSet === null) {\n selectionSet.reset();\n } else if (addSet.length) {\n const propagationInf = this.firebolt.getPropagationInf();\n // new add set\n const existingAddSet = addSet.filter(d => selectionSet._set[d] === SELECTION.SELECTION_NEW_ENTRY\n || selectionSet._set[d] === SELECTION.SELECTION_OLD_ENTRY);\n if (propagationInf.propagate === false) {\n selectionSet.updateExit();\n const { entrySet } = selectionSet.getSets();\n selectionSet.reset(getMergedSet(entrySet));\n selectionSet.add(addSet);\n selectionSet.update(existingAddSet);\n } else {\n // existing add set\n if (existingAddSet.length) {\n selectionSet.updateExit();\n selectionSet.remove(existingAddSet);\n } else {\n selectionSet.updateEntry();\n selectionSet.add(addSet);\n }\n const { exitSet } = selectionSet.getSets();\n const mergedExitSet = getMergedSet(exitSet);\n const completeSetCount = selectionSet.getCompleteSet().length;\n if (mergedExitSet.length === completeSetCount) {\n selectionSet.reset();\n }\n }\n } else {\n selectionSet.remove(selectionSet.getCompleteSet());\n }\n\n return this;\n }\n}\n","import PersistentBehaviour from './persistent';\nimport { SELECT } from '../../enums/behaviours';\n\nexport default class SelectBehaviour extends PersistentBehaviour {\n static formalName () {\n return SELECT;\n }\n}\n\n","import { DimensionSubtype, MeasureSubtype } from 'muze-utils';\n/**\n * Gets the drag action configuration\n * @param {VisualUnit} instance instance of visual unit\n * @param {Object} config x y positions\n * @return {Object} Payload of behaviour\n*/\n/* istanbul ignore next */ const getDragActionConfig = (sourceInfo, config, fieldsConfig) => {\n if (!(sourceInfo.axes.x || sourceInfo.axes.y)) {\n return {\n criteria: null\n };\n }\n\n const axes = sourceInfo.axes;\n const xAxis = axes.x[0];\n const yAxis = axes.y[0];\n const axisFields = sourceInfo.fields;\n const xField = axisFields.x[0].getMembers()[0];\n const yField = axisFields.y[0].getMembers()[0];\n const xFieldType = fieldsConfig[xField].def.subtype;\n const yFieldType = fieldsConfig[yField].def.subtype;\n const dimensions = {};\n const stPos = config.startPos;\n const endPos = config.endPos;\n\n if (stPos.x === endPos.x && stPos.y === endPos.y) {\n return {\n criteria: null\n };\n }\n\n const dragDim = xFieldType === MeasureSubtype.CONTINUOUS ? (yFieldType === MeasureSubtype.CONTINUOUS ?\n ['x', 'y'] : ['y']) : ['x'];\n const criteria = {};\n const isXDimension = xFieldType === DimensionSubtype.CATEGORICAL;\n const isYDimension = yFieldType === DimensionSubtype.CATEGORICAL;\n const xRange = xAxis.invertExtent(stPos.x, endPos.x);\n const yRange = yAxis.invertExtent(stPos.y, endPos.y);\n const selectedDomains = {\n x: stPos.x === endPos.x ? [] : (isXDimension ? xRange : xRange.sort((a, b) => a - b)),\n y: stPos.y === endPos.y ? [] : (isYDimension ? yRange : yRange.sort((a, b) => a - b))\n };\n const rangeObj = {};\n\n if (dragDim.length === 2) {\n rangeObj[xField] = selectedDomains.x;\n rangeObj[yField] = selectedDomains.y;\n if (xField === yField) {\n const xdom = selectedDomains.x;\n const ydom = selectedDomains.y;\n const min = xdom[0] > ydom[0] ? ydom : xdom;\n const max = min === ydom ? xdom : ydom;\n if (min[1] < max[0]) {\n rangeObj[xField] = [];\n } else {\n rangeObj[xField] = [max[0], min[1] < max[1] ? min[1] : max[1]];\n }\n dimensions.x = [stPos.x, endPos.x];\n dimensions.y = [stPos.y, endPos.y];\n }\n } else {\n criteria[dragDim[0]] = selectedDomains[dragDim[0]] || [];\n\n if (dragDim[0] === 'x') {\n rangeObj[xField] = criteria.x;\n if (xFieldType === DimensionSubtype.CATEGORICAL) {\n dimensions.x = (config.snap && stPos.x !== endPos.x) ? xAxis.getNearestRange(stPos.x, endPos.x) :\n [stPos.x, endPos.x];\n }\n } else {\n rangeObj[yField] = criteria.y;\n if (yFieldType === DimensionSubtype.CATEGORICAL) {\n dimensions.y = (config.snap && stPos.y !== endPos.y) ? yAxis.getNearestRange(stPos.y, endPos.y) :\n [stPos.y, endPos.y];\n }\n }\n }\n\n return {\n criteria: rangeObj,\n dimensions\n };\n};\n\nexport default getDragActionConfig;\n","import {\n getEvent,\n getD3Drag\n } from 'muze-utils';\n\nimport getDragActionConfig from './drag-action-config';\n\n/**\n * Adds dragging action to the target element.\n * @param {VisualUnit} instance Instance of visual unit.\n * @param {SVGElement} targetEl Element on which brushing action is needed.\n * @param {Array} behaviours Array of behaviours\n */\nexport const attachDragEvent = (targetEl, behaviours, firebolt, touch) => {\n let startPos = {};\n let endPos = {};\n let drawingInf;\n\n const d3Drag = getD3Drag();\n let touchStart;\n targetEl.call(d3Drag().on('start', () => {\n const event = getEvent();\n startPos = {\n x: event.x,\n y: event.y\n };\n drawingInf = firebolt.context.getDrawingContext();\n touchStart = new Date().getTime();\n }).on('drag', () => {\n const event = getEvent();\n endPos = {\n x: event.x,\n y: event.y\n };\n if (touch && Math.abs(startPos.x - endPos.x) <= 5) {\n return;\n }\n endPos.x = Math.max(0, Math.min(endPos.x, drawingInf.width));\n endPos.y = Math.max(0, Math.min(endPos.y, drawingInf.height));\n\n const payload = getDragActionConfig(firebolt.context.getSourceInfo(), {\n startPos,\n endPos\n }, firebolt.context.data().getFieldsConfig());\n behaviours.forEach(beh => firebolt.dispatchBehaviour(beh, payload));\n }).on('end', () => {\n const event = getEvent();\n endPos = {\n x: event.x,\n y: event.y\n };\n const duration = new Date().getTime() - touchStart;\n\n if (touch && duration > 100 && Math.abs(startPos.x - endPos.x) <= 5) {\n return;\n }\n endPos.x = Math.max(0, Math.min(endPos.x, drawingInf.width));\n endPos.y = Math.max(0, Math.min(endPos.y, drawingInf.height));\n\n const payload = getDragActionConfig(firebolt.context.getSourceInfo(), {\n startPos,\n endPos,\n snap: true\n }, firebolt.context.data().getFieldsConfig());\n payload.dragEnd = true;\n behaviours.forEach(beh => firebolt.dispatchBehaviour(beh, payload));\n }));\n};\n\n","import { getClientPoint, getEvent } from 'muze-utils';\nimport { CONSOLIDATED, FRAGMENTED } from '../../enums/constants';\n\n/**\n * Adds mouse interactions to target element.\n * @param {Firebolt} instance instance of firebolt.\n * @param {SVGElement} targetEl Element on which the event listeners will be attached.\n * @param {Array} behaviours Array of behaviours\n */\n/* istanbul ignore next */ const hover = firebolt => (targetEl, behaviours) => {\n const dispatchBehaviour = function (args) {\n const event = getEvent();\n const context = firebolt.context;\n const tooltipConf = context.config().interaction.tooltip;\n const mode = tooltipConf.mode;\n const pos = getClientPoint(context.getDrawingContext().svgContainer, event);\n const nearestPoint = context.getNearestPoint(pos.x, pos.y, {\n getAllPoints: mode === CONSOLIDATED || mode === FRAGMENTED,\n data: args,\n event\n });\n const payload = {\n criteria: nearestPoint ? nearestPoint.id : null,\n showInPosition: nearestPoint.showInPosition,\n target: nearestPoint.target,\n position: pos,\n mode\n };\n\n behaviours.forEach(beh => firebolt.dispatchBehaviour(beh, payload));\n event.stopPropagation();\n };\n\n targetEl.on('mouseover', dispatchBehaviour)\n .on('mousemove', dispatchBehaviour)\n .on('mouseout', () => {\n behaviours.forEach(beh => firebolt.dispatchBehaviour(beh, {\n criteria: null\n }));\n });\n};\n\nexport default hover;\n","export const CLASSPREFIX = 'muze';\nexport const CONSOLIDATED = 'consolidated';\nexport const FRAGMENTED = 'fragmented';\n\n","import { getClientPoint } from 'muze-utils';\n\nexport const generatePayloadFromEvent = function (args, event, firebolt) {\n const context = firebolt.context;\n const pos = getClientPoint(context.getDrawingContext().svgContainer, event.touches ? event.touches[0] : event);\n const nearestPoint = context.getNearestPoint(pos.x, pos.y, {\n data: args,\n event\n });\n return {\n criteria: nearestPoint ? nearestPoint.id : null,\n showInPosition: nearestPoint.showInPosition,\n target: nearestPoint.target,\n position: pos\n };\n};\n","import { getEvent } from 'muze-utils';\nimport { generatePayloadFromEvent } from './helpers';\n\n/**\n * Adds mouse interactions to target element.\n * @param {VisualUnit} instance instance of visual unit.\n * @param {SVGElement} targetEl Element on which the event listeners will be attached.\n * @param {Array} behaviours Array of behaviours\n */\n/* istanbul ignore next */ const click = firebolt => (targetEl, behaviours) => {\n const dispatchBehaviour = function (args) {\n const event = getEvent();\n const payload = generatePayloadFromEvent(args, event, firebolt);\n behaviours.forEach(beh => firebolt.dispatchBehaviour(beh, payload));\n event.stopPropagation();\n };\n\n targetEl.on('click', dispatchBehaviour);\n};\nexport default click;\n","import drag from './drag';\nimport hover from './hover';\nimport { longtouch } from './longtouch';\nimport { touchdrag } from './touch-drag';\nimport * as ACTIONNAMES from '../../enums/actions';\nimport click from './click';\n\nexport const physicalActions = {\n [ACTIONNAMES.DRAG]: drag,\n [ACTIONNAMES.HOVER]: hover,\n [ACTIONNAMES.CLICK]: click,\n [ACTIONNAMES.LONGTOUCH]: longtouch,\n [ACTIONNAMES.TOUCHDRAG]: touchdrag\n};\n\n","import { attachDragEvent } from './helpers/drag-event';\n\n/**\n * Adds dragging action to the target element.\n * @param {VisualUnit} instance Instance of visual unit.\n * @param {SVGElement} targetEl Element on which brushing action is needed.\n * @param {Array} behaviours Array of behaviours\n */\n/* istanbul ignore next */ const drag = firebolt => (targetEl, behaviours) => {\n attachDragEvent(targetEl, behaviours, firebolt);\n};\n\nexport default drag;\n","/* global setTimeout */\nimport { getEvent } from 'muze-utils';\nimport { generatePayloadFromEvent } from './helpers';\n\n/**\n * Adds mouse interactions to target element.\n * @param {VisualUnit} instance instance of visual unit.\n * @param {SVGElement} targetEl Element on which the event listeners will be attached.\n * @param {Array} behaviours Array of behaviours\n */\nexport const longtouch = firebolt => (targetEl, behaviours) => {\n let event;\n let touchEnd;\n const dispatchBehaviour = function (args) {\n const payload = generatePayloadFromEvent(args, event, firebolt);\n behaviours.forEach(beh => firebolt.dispatchBehaviour(beh, payload));\n event.stopPropagation();\n };\n\n touchEnd = false;\n event = getEvent();\n targetEl.on('touchstart', (args) => {\n event = getEvent();\n touchEnd = false;\n setTimeout(() => {\n if (!touchEnd) {\n dispatchBehaviour(args);\n } else {\n behaviours.forEach(beh => firebolt.dispatchBehaviour(beh, {\n criteria: null\n }));\n }\n }, 100);\n }).on('touchend', () => {\n touchEnd = true;\n });\n};\n","import { attachDragEvent } from './helpers/drag-event';\n\n/**\n * Adds dragging action to the target element.\n * @param {VisualUnit} instance Instance of visual unit.\n * @param {SVGElement} targetEl Element on which brushing action is needed.\n * @param {Array} behaviours Array of behaviours\n */\nexport const touchdrag = firebolt => (targetEl, behaviours) => {\n attachDragEvent(targetEl, behaviours, firebolt, true);\n};\n\n","export const PROPS = {\n valueParser: {\n defaultValue: val => val\n }\n};\n","import GenericSideEffect from './generic-sideeffect';\n\nexport default GenericSideEffect;\n","import { mergeRecursive, getUniqueId, generateGetterSetters } from 'muze-utils';\nimport { PROPS } from './props';\n\n/**\n * This is the base class of all side effects. It contains all common methods like setting configuration, disabling,\n * enabling side effect, etc. Every new side effect has to inherit this class or {@link SpawnableSideEffect} or\n * {@link SurrogateSideEffect} class. All side effects are initialized by firebolt. The instance of firebolt is\n * passed on initialization. The firebolt instance contains ```context``` which is the instance of visual unit with\n * which the firebolt is attached.\n *\n * @public\n * @class\n * @module GenericSideEffect\n */\nexport default class GenericSideEffect {\n constructor (firebolt) {\n this.firebolt = firebolt;\n this._enabled = true;\n this._strategy = 'default';\n this._config = {};\n this._id = getUniqueId();\n this._strategies = {};\n generateGetterSetters(this, PROPS);\n this.config(this.constructor.defaultConfig());\n }\n\n /**\n * Returns the default configuration of the side effect.\n *\n * @public\n * @return {Object} Default configuration of side effect.\n */\n static defaultConfig () {\n return {};\n }\n\n /**\n * Returns the formal name of a side effect. This method must be implemented by all side effects which changes\n * or adds any element in the visualization.\n *\n * @return {string} Formal name of side effect.\n */\n static formalName () {\n return 'generic';\n }\n\n static target () {\n return 'all';\n }\n\n /**\n * Returns true if the side effects mutates the data of chart.\n *\n * @public\n *\n * @return {boolean} If the side effect mutates the data of chart.\n */\n static mutates () {\n return false;\n }\n\n /**\n * Sets or gets the configuration of side effect.\n *\n * When setter,\n * @param {Object} config Configuration of side effect.\n * @return {GenericSideEffect} Side effect instance.\n *\n * When getter,\n * @return {Object} Side effect configuration.\n */\n config (...params) {\n if (params.length) {\n this._config = mergeRecursive(this._config, params[0]);\n return this;\n }\n return this._config;\n }\n\n disable () {\n this._enabled = false;\n return this;\n }\n\n enable () {\n this._enabled = true;\n return this;\n }\n\n isEnabled () {\n return this._enabled;\n }\n\n /**\n * Applies the interaction effect on the chart. This is where the implemntation of the side effect is defined.\n *\n * @param {Object} selectionSet Contains the entry and exit set of data which got affected during interaction.\n * @param {Object} selectionSet.mergedEnter Combined previous entry and new entry set.\n * @param {DataModel} selectionSet.mergedEnter.model Instance of data model containing all rows which got\n * affected during interaction.\n * @param {Array} selectionSet.mergedEnter.uids Ids of all rows which were affected during interaction.\n * @param {Object} selectionSet.mergedExit Combined previous exit and new exit set.\n * @param {DataModel} selectionSet.mergedExit.model Instance of data model containing rows which were not affected\n * during interaction.\n * @param {Array} selectionSet.mergedExit.uids Ids of all rows which were not affected during interaction.\n * @param {Object} selectionSet.entrySet Entry set information.\n * @param {Array} selectionSet.entrySet[0].uids All row ids which got affected during previous interaction.\n * @param {Array} selectionSet.entrySet[1].uids All row ids which got affected during current interaction.\n * @param {Array} selectionSet.exitSet[0].uids All row ids which were not affected during previous interaction.\n * @param {Array} selectionSet.exitSet[1].uids All row ids which were not affected during current interaction.\n * @param {Object} payload Payload information of the behavioural action on trigger of which this side effect\n * is applied.\n * @param {Object} options Optional information for side effect like strategy, etc.\n */\n apply () {\n return this;\n }\n\n /**\n * Adds a new strategy method for this side effect. The strategy method is implemented by side effect class.\n *\n * @param {string} name Name of the strategy.\n * @param {Function} fn Strategy method.\n *\n * @return {GenericSideEffect} Instance of side effect.\n */\n setStrategy (name, fn) {\n if (fn) {\n this._strategies[name] = fn;\n }\n return this;\n }\n}\n","import GenericSideEffect from './generic';\n\n/**\n * This class is inherited by all side effects which changes the look of any existing elements in the visualization.\n * For example, if a side effect wants to change the color of bar plots, then it is a surrogate side effect.\n *\n * To use this,\n * ```\n * const SurrogateSideEffect = muze.SideEffects.standards.SurrogateSideEffect;\n *\n * class BarColorChanger extends SurrogateSideEffect {\n * static formalName () {\n * return 'colorChanger';\n * }\n *\n * // Implement the logic of applying the style here.\n * apply () {\n * }\n * }\n * ```\n * @public\n *\n * @module SurrogateSideEffect\n * @class\n * @extends GenericSideEffect\n */\nexport default class SurrogateSideEffect extends GenericSideEffect {\n /**\n * Applies or removes interaction styles from plot elements. An array of row ids needs to be passed\n * which identifies the plot elements and applies styles to them.\n *\n * To apply the interaction style,\n * ```\n * const entryRowIds = entrySet[0].uids;\n * const interactionStyle = [{\n * type: 'fill',\n * intensity: [0, 0, 15, 0] // hsla configuration\n * }];\n *\n * this.applyInteractionStyle(entryRowIds, interactionStyle, 'brighten', true);\n * ```\n * @public\n * @param {Array} set Array of row ids.\n * @param {Array} config Style configuration.\n * @param {Object} config[0] fill or stroke configuration.\n * @param {string} config[0].type Type of style - fill or stroke.\n * @param {Array} config[0].intensity hsla configuration.\n * @param {string} interactionType Type of interaction. This is needed for storing the styles for\n * each type of interaction in the plot elements.\n * @param {boolean} apply Whether to apply or remove the interaction style.\n *\n * @return {SurrogateSideEffect} Instance of surrogate side effect.\n */\n applyInteractionStyle (set, config = {}, interactionType, apply) {\n const layers = this.firebolt.context.layers();\n layers.forEach(layer => layer.config().interactive !== false &&\n layer.applyInteractionStyle(interactionType, set.uids, apply));\n return this;\n }\n}\n","import { makeElement } from 'muze-utils';\n\nimport GenericSideEffect from './generic';\n\n/**\n * Any side effect which will add any new element to the chart like drawing a rectangular box or any annotation over\n * the chart needs to inherit this class. This class has methods which returns the container where the dom elements\n * needs to be created.\n *\n * To use this,\n * ```\n * const SpawnableSideEffect = muze.SideEffects.standards.SpawnableSideEffect;\n *\n * class SelectionBox extends SpawnableSideEffect {\n * static formalName () {\n * return 'selectionBox';\n * }\n *\n * // Implement the logic of applying the style here.\n * apply () {\n * }\n * }\n * ```\n * @public\n * @class\n * @extends GenericSideEffect\n * @module SpawnableSideEffect\n */\nexport default class SpawnableSideEffect extends GenericSideEffect {\n /**\n * Creates a html or svg element in the container.\n *\n * @public\n * @param {SVGElement|HTMLElement} container Container where the dom element will be rendered.\n * @param {string} elemType Type of dom element.\n * @param {Array} data Array of objects with which the dom elements will be binded.\n * @param {string} className class name of the element.\n *\n * @return {Selection} D3 Selection of the element.\n */\n createElement (container, elemType, data, className, callbacks) {\n return makeElement(container, elemType, data, className, callbacks);\n }\n\n /**\n * Returns the drawing information for side effect like svg container, dimensions of the visual unit.\n *\n * @public\n * @return {Object} Drawing information for side effect.\n * ```\n * sideEffectGroup: // svg container where the side effect needs to be appended.\n * svgContainer: // svg container of the {@link VisualUnit}.\n * htmlContainer: // html div container of the {@link VisualUnit}.\n * width: // Width of the {@link VisualUnit}\n * height: // Height of the {@link VisualUnit}\n * ```\n */\n drawingContext (...drawingContext) {\n if (drawingContext.length) {\n this._drawingContext = drawingContext[0];\n return this;\n }\n return this._drawingContext();\n }\n\n show () {\n return this;\n }\n\n hide () {\n return this;\n }\n}\n","import { selectElement } from 'muze-utils';\n\nexport const getBoxDimensionsFromPayload = (payload, axes, axisFields) => {\n let x1;\n let x2;\n let y1;\n let y2;\n let xRange;\n let yRange;\n let direction;\n const criteria = payload.criteria;\n const dimensions = payload.dimensions || {};\n const xDim = dimensions.x;\n const yDim = dimensions.y;\n\n if (criteria === null) {\n return null;\n }\n\n const xAxis = axes.x[0];\n const yAxis = axes.y[0];\n const xLinear = xAxis.constructor.type() === 'linear';\n const yLinear = yAxis.constructor.type() === 'linear';\n const xField = `${axisFields.x[0]}`;\n const yField = `${axisFields.y[0]}`;\n const xCriteria = criteria[xField];\n const yCriteria = criteria[yField];\n\n if (xCriteria && xCriteria[0] instanceof Array) {\n xRange = xCriteria[0];\n yRange = xCriteria[1];\n } else {\n xRange = xCriteria || [];\n yRange = yCriteria || [];\n }\n direction = xCriteria && yCriteria ? 'both' : (xCriteria ? 'vertical' : 'horizontal');\n if (xRange && xRange.length) {\n if ((yAxis.constructor.type() === 'band' && xLinear)) {\n x1 = x2 = undefined;\n direction = 'horizontal';\n } else {\n const domain = xAxis.domain();\n const bandScale = xAxis.constructor.type() === 'band';\n let x1Val;\n let x2Val;\n if (bandScale) {\n let x1DomainIndex = domain.indexOf(xRange[0]);\n let x2DomainIndex = domain.indexOf(xRange[xRange.length - 1]);\n [x1DomainIndex, x2DomainIndex] = [x1DomainIndex, x2DomainIndex].sort((a, b) => a - b);\n x1Val = domain[x1DomainIndex];\n x2Val = domain[x2DomainIndex];\n } else {\n x1Val = xRange[0];\n x2Val = xRange[xRange.length - 1];\n }\n x1 = xAxis.getScaleValue(x1Val);\n x2 = xAxis.getScaleValue(x2Val);\n x2 += bandScale ? xAxis.getUnitWidth() : 0;\n }\n } else {\n x1 = x2 = undefined;\n }\n if (yRange && yRange.length) {\n if ((xAxis.constructor.type() === 'band' && yLinear)) {\n y1 = y2 = undefined;\n direction = 'vertical';\n } else {\n const domain = yAxis.domain();\n const bandScale = yAxis.constructor.type() === 'band';\n let y1Val;\n let y2Val;\n if (bandScale) {\n let y1DomainIndex = domain.indexOf(yRange[0]);\n let y2DomainIndex = domain.indexOf(yRange[yRange.length - 1]);\n [y1DomainIndex, y2DomainIndex] = [y1DomainIndex, y2DomainIndex].sort(((a, b) => b - a));\n y1Val = domain[y1DomainIndex];\n y2Val = domain[y2DomainIndex];\n } else {\n y1Val = yRange[0];\n y2Val = yRange[yRange.length - 1];\n }\n y1 = yAxis.getScaleValue(y1Val);\n y2 = yAxis.getScaleValue(y2Val);\n y2 += yAxis.constructor.type() === 'band' ? yAxis.getUnitWidth() : 0;\n }\n } else {\n y1 = y2 = undefined;\n }\n\n if ((yLinear && xLinear) || !payload.dragEnd) {\n if (xDim) {\n [x1, x2] = xDim;\n }\n if (yDim) {\n [y1, y2] = yDim;\n }\n }\n\n return {\n dimension: {\n x1,\n x2,\n y1,\n y2\n },\n direction\n };\n};\n\nexport const changeVisibility = (context, sideEffectGroup, visible) => {\n const config = context.config();\n const className = config.defClassName;\n const classPrefix = config.classPrefix;\n selectElement(sideEffectGroup).selectAll(`.${classPrefix}-${className}`)\n .style('display', visible ? 'block' : 'none');\n};\n","import {\n getQualifiedClassName,\n selectElement,\n makeElement,\n isValidValue\n} from 'muze-utils';\nimport { CLASSPREFIX } from '../../enums/constants';\nimport './styles.scss';\nimport SpawnableSideEffect from '../spawnable';\nimport { selectionBoxDrag } from '../../actions/physical/selection-box-drag';\nimport { getBoxDimensionsFromPayload, changeVisibility } from './helper';\n\n/**\n * This class is used to create a selection box which is used by visual unit for brushing and\n * selection in the canvas.\n * @class SelectionBox\n */\nclass SelectionBox extends SpawnableSideEffect {\n /**\n * It returns the default configuration needed by selectionbox.\n * @return {Object} Default configuration of the selection box.\n */\n static defaultConfig () {\n return {\n defClassName: 'selection-box-group',\n className: '',\n classPrefix: CLASSPREFIX,\n box: {\n defClassName: 'selection-box',\n className: ''\n },\n transition: {\n duration: 200\n }\n };\n }\n\n static formalName () {\n return 'selectionBox';\n }\n\n /**\n * Draws the selectionbox with the specified dimensions.\n * @param {Object} dimension Dimensions of the selection box.\n * @param {number} dimension.x1 Starting x position\n * @param {number} dimension.x2 Ending x position\n * @param {number} dimension.y1 Starting y position\n * @param {number} dimension.y2 Ending y position\n * @param {Object} conf Configuration needed to draw the selection box\n * @param {number} unitWidth Width of the visual unit.\n * @param {number} unitHeight Height of the visual unit.\n */\n apply (selectionSet, payload) {\n let x;\n let y;\n let width;\n let height;\n const config = this._config;\n const boxConf = config.box;\n const firebolt = this.firebolt;\n const drawingInf = this.drawingContext();\n const mountPoint = drawingInf.sideEffectGroup;\n const unitWidth = drawingInf.width;\n const unitHeight = drawingInf.height;\n const classPrefix = config.classPrefix;\n const selectionGroupClassName = config.defClassName;\n\n if (payload.criteria === null) {\n this.hide(drawingInf);\n return this;\n }\n\n const sourceInf = firebolt.context.getSourceInfo();\n const { dimension, direction } = getBoxDimensionsFromPayload(payload, sourceInf.axes,\n sourceInf.fields);\n const transition = payload.dragEnd && config.transition;\n\n if (direction === 'both' || direction === 'vertical') {\n x = Math.min(dimension.x1, dimension.x2);\n width = Math.abs(dimension.x2 - dimension.x1);\n } else {\n x = 0;\n width = unitWidth;\n }\n if (direction === 'both' || direction === 'horizontal') {\n y = Math.min(dimension.y1, dimension.y2);\n height = Math.abs(dimension.y2 - dimension.y1);\n } else {\n height = unitHeight;\n y = 0;\n }\n this.show(drawingInf);\n // Create the data array for drawing the rectangle\n const points = [\n {\n x,\n y,\n width,\n height\n }\n ];\n // Create the container group for selection box.\n const selectionGroup = makeElement(selectElement(mountPoint), 'g', [1],\n `.${classPrefix}-${selectionGroupClassName}`);\n const sideEffect = this;\n const selection = selectionGroup.selectAll('rect').data(points);\n const selectionBox = selection.enter().append('rect')\n .each(function () {\n selectionBoxDrag(firebolt)(selectElement(this), ['brush'], sideEffect);\n })\n .merge(selection)\n .each(function (attrs) {\n let element = selectElement(this);\n transition && (element = element.transition().duration(transition.duration));\n for (const key in attrs) {\n if ({}.hasOwnProperty.call(attrs, key)) {\n isValidValue(attrs[key]) && element.attr(key, attrs[key]);\n }\n }\n });\n // Get the qualified class name for selection box rectangle\n const boxClassName = getQualifiedClassName(boxConf.defClassName, this._id, classPrefix);\n selectionBox.classed(boxClassName.join(' '), true);\n selectionBox.classed(boxConf.className, true);\n\n return this;\n }\n\n hide (drawingInf) {\n changeVisibility(this, drawingInf.sideEffectGroup, false);\n }\n\n show (drawingInf) {\n changeVisibility(this, drawingInf.sideEffectGroup, true);\n }\n}\n\nexport default SelectionBox;\n\n","import {\n getEvent,\n getD3Drag\n } from 'muze-utils';\n\nimport getDragActionConfig from './helpers/drag-action-config';\n\nexport const selectionBoxDrag = firebolt => (targetEl, behaviours) => {\n let subject;\n let drawingInf;\n const context = firebolt.context;\n const onDrag = (payload) => {\n behaviours.forEach(action => firebolt.dispatchBehaviour(action, payload));\n };\n const d3Drag = getD3Drag();\n\n targetEl.call(d3Drag().on('start', () => {\n const event = getEvent();\n drawingInf = context.getDrawingContext();\n subject = event.subject;\n }).on('drag', () => {\n const event = getEvent();\n subject.x += event.dx;\n subject.y += event.dy;\n const width = drawingInf.width;\n const height = drawingInf.height;\n const x = Math.min(width - subject.width, Math.max(subject.x, 0));\n const y = Math.min(height - subject.height, Math.max(subject.y, 0));\n const y2 = y + subject.height;\n const x2 = x + subject.width;\n\n if (x >= 0 && x2 <= width && y >= 0 && y2 <= height) {\n const payload = getDragActionConfig(context.getSourceInfo(), {\n startPos: {\n x,\n y\n },\n endPos: {\n x: x2,\n y: y2\n }\n }, context.data().getFieldsConfig());\n onDrag(payload);\n }\n }).on('end', () => {\n const width = drawingInf.width;\n const height = drawingInf.height;\n const x = Math.min(width - subject.width, Math.max(subject.x, 0));\n const y = Math.min(height - subject.height, Math.max(subject.y, 0));\n const y2 = y + subject.height;\n const x2 = x + subject.width;\n\n if (x >= 0 && x2 <= width && y >= 0 && y2 <= height) {\n const payload = getDragActionConfig(context.getSourceInfo(), {\n startPos: {\n x,\n y\n },\n endPos: {\n x: x2,\n y: y2\n },\n snap: true\n }, context.data().getFieldsConfig());\n payload.dragEnd = true;\n onDrag(payload);\n }\n }));\n};\n","export const CLASSPREFIX = 'muze';\nexport const ARROW_RIGHT = 'right';\nexport const ARROW_TOP = 'top';\nexport const ARROW_BOTTOM = 'bottom';\nexport const ARROW_LEFT = 'left';\nexport const TOOLTIP_LEFT = 'left';\nexport const TOOLTIP_RIGHT = 'right';\nexport const TOOLTIP_BOTTOM = 'bottom';\nexport const TOOLTIP_TOP = 'top';\nexport const INITIAL_STYLE = {\n position: 'absolute',\n width: 0,\n height: 0\n};\n","import { CLASSPREFIX } from './constants';\n\nexport const defaultConfig = {\n classPrefix: CLASSPREFIX,\n defClassName: 'tooltip-box',\n connectorClassName: 'tooltip-connectors',\n className: '',\n row: {\n margin: 0\n },\n content: {\n spacing: 5,\n iconContainerSize: 10,\n iconScale: 1,\n iconShape: 'circle',\n iconColor: '#ff0000',\n rowMargin: '0px',\n margin: 10,\n separator: ':',\n className: 'tooltip-content-container',\n parentClassName: 'tooltip-content-parent-container'\n },\n arrow: {\n size: 10,\n disabled: false,\n defClassName: 'tooltip-arrow',\n className: '',\n color: 'rgba(195,195,195,0.85)'\n }\n};\n","import { getQualifiedClassName } from 'muze-utils';\nimport { TOOLTIP_LEFT, TOOLTIP_RIGHT, ARROW_RIGHT, ARROW_LEFT, TOOLTIP_BOTTOM } from './constants';\n\nexport const getArrowPos = (orient, dim, measurement, config) => {\n let arrowPos;\n const { x, y, boxHeight, boxWidth } = measurement;\n const arrowDisabled = config.arrow.disabled;\n const arrowWidth = arrowDisabled ? 0 : config.arrow.size;\n\n if (orient === ARROW_LEFT || orient === ARROW_RIGHT) {\n let start = 0;\n let diff = boxHeight / 2;\n const plotBottom = dim.y + dim.height;\n const boxBottom = y + boxHeight;\n\n if (dim.y > y) {\n start = dim.y - y;\n diff = (plotBottom >= boxBottom ? (boxBottom - dim.y) : dim.height) / 2;\n } else if (boxBottom > plotBottom) {\n diff = Math.abs(y - (dim.y + dim.height)) / 2;\n }\n arrowPos = start + diff - arrowWidth / 2;\n } else {\n let start = 0;\n let diff = boxWidth / 2;\n const plotRight = dim.x + dim.width;\n const boxRight = x + boxWidth;\n\n if (dim.x > x) {\n start = dim.x - x;\n diff = (plotRight >= boxRight ? (boxRight - dim.x) : dim.width) / 2;\n } else if (boxRight > plotRight) {\n diff = Math.abs(x - (dim.x + dim.width)) / 2;\n }\n arrowPos = start + diff - arrowWidth / 2;\n }\n return arrowPos;\n};\n\n/**\n * Places the arrow in the specified arrow position. It also applies appropriate arrow\n * class name to the arrow element.\n * @param {string} position Left, bottom or right position of the arrow;\n * @param {number} arrowPos position of arrow in pixels\n * @return {Tooltip} Instance of tooltip.\n */\nexport const placeArrow = (context, position, arrowPos) => {\n const tooltipArrow = context._tooltipArrow;\n const tooltipBackground = context._tooltipBackground;\n const config = context._config;\n const classPrefix = config.classPrefix;\n const arrowConf = config.arrow;\n const className = getQualifiedClassName(arrowConf.defClassName, context._id, config.classPrefix);\n\n tooltipArrow.style('display', 'block');\n tooltipArrow.attr('class', `${className.join(' ')}`);\n if (position === TOOLTIP_LEFT || position === TOOLTIP_RIGHT) {\n tooltipArrow.style('top', `${arrowPos}px`);\n tooltipArrow.style('left', '');\n tooltipBackground.style('top', `${arrowPos}px`);\n tooltipBackground.style('left', '');\n } else {\n position === TOOLTIP_BOTTOM ? tooltipArrow.style('top', '100%') : tooltipArrow.style('top',\n `-${arrowConf.size}px`);\n tooltipArrow.style('left', `${arrowPos}px`);\n position === TOOLTIP_BOTTOM ? tooltipBackground.style('top', '100%') : tooltipBackground.style('top',\n `-${arrowConf.size + 3}px`);\n tooltipBackground.style('left', `${arrowPos}px`);\n }\n tooltipArrow.classed(`${classPrefix}-tooltip-arrow`, true);\n tooltipArrow.classed(`${classPrefix}-tooltip-arrow-${context._arrowOrientation}`, false);\n tooltipArrow.classed(`${classPrefix}-tooltip-arrow-${position}`, true);\n tooltipBackground.classed(`${classPrefix}-tooltip-background-arrow`, true);\n tooltipBackground.classed(`${classPrefix}-tooltip-background-arrow-${context._arrowOrientation}`, false);\n tooltipBackground.classed(`${classPrefix}-tooltip-background-arrow-${position}`, true);\n return this;\n};\n\nexport const reorderContainers = (parentContainer, className) => {\n parentContainer.selectAll(className).sort((a, b) => a - b);\n};\n","import {\n selectElement,\n mergeRecursive,\n makeElement,\n setAttrs,\n setStyles,\n getSymbol,\n isSimpleObject\n} from 'muze-utils';\nimport { defaultConfig } from './default-config';\n\n/**\n * This class is used to manage the content of tooltip.\n */\nexport default class Content {\n /**\n * Creates an instance of content.\n */\n constructor () {\n this._model = null;\n this._formatter = null;\n this._config = this.constructor.defaultConfig();\n }\n /**\n * Returns the default configuration of tooltip\n * @return {Object} Configuration of tooltip.\n */\n static defaultConfig () {\n const config = defaultConfig.content;\n config.classPrefix = defaultConfig.classPrefix;\n return config;\n }\n\n config (...c) {\n if (c.length > 0) {\n this._config = mergeRecursive(this._config, c[0]);\n return this;\n }\n return this._config;\n }\n\n /**\n * Update model. The format contains presentation strategy which determines how to show the content.\n * If no strategy is mentioned then default is to show key value pair\n */\n update (item) {\n this._model = item.model;\n this._formatter = item.formatter;\n return this;\n }\n\n context (ctx) {\n this._context = ctx;\n return this;\n }\n\n render (mount) {\n let data;\n const config = this._config;\n const iconContainerSize = config.iconContainerSize;\n const formatter = this._formatter;\n const rowMargin = config.rowMargin;\n const model = this._model;\n\n this._mount = mount;\n if (model instanceof Array) {\n data = model;\n } else {\n data = formatter(this._model, this.config(), this._context);\n }\n\n if (data instanceof Function) {\n mount.html(data());\n } else {\n let content = data;\n let displayFormat = 'default';\n\n if (isSimpleObject(data)) {\n content = data.content;\n displayFormat = data.displayFormat;\n }\n\n const body = makeElement(mount, 'div', [displayFormat], `${config.classPrefix}-tooltip-content`, {},\n d => d);\n\n if (displayFormat === 'table') {\n const table = makeElement(body, 'table', [1], `${config.classPrefix}-tooltip-table`);\n const tbody = makeElement(table, 'tbody', [1], `${config.classPrefix}-tooltip-table-tbody`);\n const rows = makeElement(tbody, 'tr', content, `${config.classPrefix}-tooltip-table-row`);\n rows.each(function (d, i) {\n selectElement(this).classed(`${config.classPrefix}-tooltip-table-row-${i}`, true);\n });\n const cells = makeElement(rows, 'td', d => d, `${config.classPrefix}-tooltip-table-cell`);\n cells.each(function (d) {\n selectElement(this).html(d);\n });\n } else {\n const rows = makeElement(body, 'div', content, `${config.classPrefix}-tooltip-row`);\n const cells = makeElement(rows, 'span', d => d, `${config.classPrefix}-tooltip-content`);\n cells.attr('class', `${config.classPrefix}-tooltip-content`);\n setStyles(rows, {\n margin: rowMargin\n });\n setStyles(cells, {\n display: 'inline-block',\n 'margin-right': `${config.spacing}px`\n });\n\n cells.each(function (d) {\n const el = selectElement(this);\n el.html('');\n if (d instanceof Object) {\n if (d.type === 'icon') {\n const svg = makeElement(el, 'svg', [1]);\n const path = makeElement(svg, 'path', [1]);\n const shape = d.shape instanceof Function ? d.shape : getSymbol(d.shape);\n\n setAttrs(svg, {\n x: 0,\n y: 0,\n width: iconContainerSize,\n height: iconContainerSize\n });\n setAttrs(path, {\n d: shape.size(d.size)(),\n transform: `translate(${iconContainerSize / 2}, ${iconContainerSize / 2})`\n });\n setStyles(path, {\n fill: d.color\n });\n setStyles(svg, {\n width: `${iconContainerSize}px`,\n height: `${iconContainerSize}px`\n });\n } else {\n el.html(d.value);\n d.className && el.classed(d.className, true);\n setStyles(el, d.style);\n }\n } else {\n el.html(d);\n }\n });\n }\n }\n return this;\n }\n\n clear () {\n this._model = null;\n return this;\n }\n}\n","import {\n mergeRecursive,\n getQualifiedClassName,\n getUniqueId,\n selectElement,\n setStyles,\n makeElement\n} from 'muze-utils';\nimport { ARROW_BOTTOM, ARROW_LEFT, ARROW_RIGHT, TOOLTIP_LEFT, TOOLTIP_RIGHT, TOOLTIP_BOTTOM, TOOLTIP_TOP,\n INITIAL_STYLE } from './constants';\nimport { defaultConfig } from './default-config';\nimport { getArrowPos, placeArrow, reorderContainers } from './helper';\nimport './styles.scss';\nimport Content from './content';\n\n/**\n * This component is responsible for creating a tooltip element. It appends the tooltip\n * in the body element.\n * @class Tooltip\n */\nexport default class Tooltip {\n /**\n * Initializes the tooltip with the container element and configuration\n * @param {HTMLElement} container container where the tooltip will be mounted.\n * @param {string} className Class name of the tooltip.\n */\n constructor (htmlContainer, svgContainer) {\n let connectorContainer = svgContainer;\n this._id = getUniqueId();\n this._config = {};\n this.config({});\n const tooltipConf = this._config;\n const classPrefix = tooltipConf.classPrefix;\n const contentClass = tooltipConf.content.parentClassName;\n const container = makeElement(htmlContainer, 'div', [1], `${classPrefix}-tooltip-container`);\n this._container = container;\n this._tooltipContainer = container.append('div').style('position', 'absolute');\n this._contentContainer = this._tooltipContainer.append('div').attr('class', `${classPrefix}-${contentClass}`);\n this._tooltipBackground = this._tooltipContainer.append('div').style('position', 'relative');\n this._tooltipArrow = this._tooltipContainer.append('div');\n\n if (!svgContainer) {\n connectorContainer = htmlContainer.append('svg').style('pointer-events', 'none');\n }\n this._contents = {};\n this._tooltipConnectorContainer = selectElement(connectorContainer)\n .append('g')\n .attr('class', `${tooltipConf.classPrefix}-${tooltipConf.connectorClassName}`);\n const id = this._id;\n const defClassName = tooltipConf.defClassName;\n const qualifiedClassName = getQualifiedClassName(defClassName, id, tooltipConf.classPrefix);\n\n setStyles(this._tooltipArrow, INITIAL_STYLE);\n setStyles(this._tooltipBackground, INITIAL_STYLE);\n this.addClass(qualifiedClassName.join(' '));\n this.addClass(tooltipConf.className);\n this.hide();\n }\n\n /**\n * Sets the configuration of tooltip.\n * @param {Object} config Configuration of tooltip\n * @return {Tooltip} Instance of tooltip\n */\n config (...config) {\n if (config.length > 0) {\n const defConf = mergeRecursive({}, this.constructor.defaultConfig());\n this._config = mergeRecursive(defConf, config[0]);\n return this;\n }\n return this._config;\n }\n\n /**\n * Returns the default configuration of tooltip\n * @return {Object} Configuration of tooltip.\n */\n static defaultConfig () {\n return defaultConfig;\n }\n /**\n * Sets the class name of tooltip\n * @param {string} className tooltip class name\n * @return {Tooltip} Instance of tooltip.\n */\n addClass (className) {\n this._tooltipContainer.classed(className, true);\n return this;\n }\n\n context (...ctx) {\n if (ctx.length) {\n this._context = ctx[0];\n return this;\n }\n return this._context;\n }\n\n content (name, data, contentConfig = {}) {\n const config = this.config();\n const { classPrefix } = config;\n const contentClass = config.content.className;\n const formatter = config.formatter;\n const className = contentConfig.className || `${classPrefix}-${contentClass}-${name}`;\n const content = this._contents[name] = this._contents[name] || new Content();\n const container = makeElement(this._contentContainer, 'div', [contentConfig.order], className);\n container.attr('class', `${classPrefix}-${contentClass} ${className}`);\n reorderContainers(this._contentContainer, `.${classPrefix}-${contentClass}`);\n const contentConf = config.content;\n contentConfig.classPrefix = this._config.classPrefix;\n content.config(contentConf);\n\n if (data === null) {\n content.clear();\n container.remove();\n delete this._contents[name];\n } else {\n content.update({\n model: data,\n formatter: contentConfig.formatter || formatter\n });\n content.context(this._context);\n content.render(container);\n }\n\n if (!Object.keys(this._contents).length) {\n this.hide();\n }\n return this;\n }\n\n getContents () {\n return Object.values(this._contents);\n }\n\n /**\n * Positions the tooltip at the given x and y position.\n * @param {number} x x position\n * @param {number} y y position\n * @return {Tooltip} Instance of tooltip.\n */\n position (x, y, conf = {}) {\n if (!Object.keys(this._contents).length) {\n this.hide();\n return this;\n }\n this.show();\n const target = this._target;\n const repositionArrow = conf.repositionArrow;\n\n if (target && repositionArrow) {\n const node = this._tooltipContainer.node();\n const config = this._config;\n const arrowDisabled = config.arrow.disabled;\n const arrowWidth = arrowDisabled ? 0 : config.arrow.size;\n const arrowOrient = this._arrowOrientation;\n const outsidePlot = arrowOrient === ARROW_LEFT || arrowOrient === ARROW_RIGHT ?\n (y + node.offsetHeight - arrowWidth) < target.y || y > (target.y + target.height) :\n (x + node.offsetWidth - arrowWidth) < target.x || x > (target.x + target.width);\n\n if (!arrowDisabled) {\n if (outsidePlot) {\n let path;\n this._tooltipArrow.style('display', 'none');\n this._tooltipBackground.style('display', 'none');\n this._tooltipConnectorContainer.style('display', 'block');\n const connector = this._tooltipConnectorContainer.selectAll('path').data([1]);\n const enter = connector.enter().append('path');\n if (arrowOrient === ARROW_LEFT) {\n path = `M ${x} ${y + node.offsetHeight / 2} L ${target.x + target.width}`\n + ` ${target.y + target.height / 2}`;\n } else if (arrowOrient === ARROW_RIGHT) {\n path = `M ${x + node.offsetWidth} ${y + node.offsetHeight / 2}`\n + ` L ${target.x} ${target.y + target.height / 2}`;\n } else if (arrowOrient === ARROW_BOTTOM) {\n path = `M ${x + node.offsetWidth / 2} ${y + node.offsetHeight}`\n + ` L ${target.x + target.width / 2} ${target.y}`;\n }\n enter.merge(connector).attr('d', path).style('display', 'block');\n } else {\n const arrowPos = getArrowPos(arrowOrient, target, {\n x,\n y,\n boxHeight: node.offsetHeight,\n boxWidth: node.offsetWidth\n }, this._config);\n\n placeArrow(this, this._arrowOrientation, arrowPos);\n this._tooltipConnectorContainer.style('display', 'none');\n }\n }\n }\n\n const offset = this._offset || {\n x: 0,\n y: 0\n };\n this._tooltipContainer.style('left', `${offset.x + x}px`).style('top',\n `${offset.y + y}px`);\n\n return this;\n }\n\n /**\n * Positions the tooltip relative to a rectangular box. It takes care of tooltip overflowing the\n * boundaries.\n * @param {Object} dim Dimensions of the plot.\n */\n positionRelativeTo (dim, tooltipConf = {}) {\n let obj;\n let orientation = tooltipConf.orientation;\n this.show();\n if (!dim) {\n this.hide();\n return this;\n }\n\n const extent = this._extent;\n const node = this._tooltipContainer.node();\n\n this._tooltipContainer.style('top', '0px')\n .style('left', '0px');\n const offsetWidth = node.offsetWidth + 2;\n const offsetHeight = node.offsetHeight + 2;\n const config = this._config;\n const offset = this._offset;\n const arrowDisabled = config.arrow.disabled;\n const arrowSize = arrowDisabled ? 0 : config.arrow.size;\n const draw = tooltipConf.draw !== undefined ? tooltipConf.draw : true;\n const topSpace = dim.y;\n // When there is no space in right\n const dimX = dim.x + dim.width + offset.x;\n const rightSpace = extent.width - dimX;\n const leftSpace = dim.x + offset.x - extent.x;\n const positionTop = topSpace > (offsetHeight + arrowSize);\n const positionRight = rightSpace >= offsetWidth + arrowSize;\n const positionLeft = leftSpace >= offsetWidth + arrowSize;\n\n const positionHorizontal = () => {\n let position;\n let x = dim.x + dim.width;\n let y = dim.y;\n\n if (positionRight) {\n position = TOOLTIP_LEFT;\n x += arrowSize;\n } else if (positionLeft) {\n x = dim.x - offsetWidth;\n position = TOOLTIP_RIGHT;\n x -= arrowSize;\n } else {\n position = 'left';\n x += arrowSize;\n }\n if (dim.height < offsetHeight) {\n y = Math.max(0, dim.y + dim.height / 2 - offsetHeight / 2);\n }\n\n const arrowPos = getArrowPos(position, dim, {\n x,\n y,\n boxHeight: offsetHeight,\n boxWidth: offsetWidth\n }, this._config);\n\n return {\n position,\n arrowPos,\n x,\n y\n };\n };\n\n const positionVertical = () => {\n let position;\n let y;\n // Position tooltip at the center of plot\n let x = dim.x - offsetWidth / 2 + dim.width / 2;\n\n // Overflows to the right\n if ((extent.width - (dim.x + offset.x)) < offsetWidth) {\n x = extent.width - offsetWidth - offset.x;\n } else if ((x + offset.x) < extent.x) { // Overflows to the left\n x = extent.x;\n }\n\n if (positionTop) {\n y = dim.y - offsetHeight - arrowSize;\n position = TOOLTIP_BOTTOM;\n } else {\n y = dim.y + dim.height + arrowSize;\n position = TOOLTIP_TOP;\n }\n\n const arrowPos = getArrowPos(position, dim, {\n x,\n y,\n boxHeight: offsetHeight,\n boxWidth: offsetWidth\n }, this._config);\n\n return {\n position,\n arrowPos,\n x,\n y\n };\n };\n\n this._target = dim;\n if (!orientation) {\n if (positionTop) {\n orientation = 'vertical';\n } else if (positionRight || positionLeft) {\n orientation = 'horizontal';\n } else {\n orientation = 'vertical';\n }\n }\n\n if (orientation === 'horizontal') {\n obj = positionHorizontal();\n } else if (orientation === 'vertical') {\n obj = positionVertical();\n }\n\n this._position = {\n x: obj.x,\n y: obj.y\n };\n\n this._arrowPos = obj.arrowPos;\n if (!arrowDisabled) {\n placeArrow(this, obj.position, obj.arrowPos);\n } else {\n this._tooltipArrow.style('display', 'none');\n this._tooltipBackground.style('display', 'none');\n }\n this._arrowOrientation = obj.position;\n draw && this.position(obj.x, obj.y);\n return this;\n }\n\n /**\n * Hides the tooltip element.\n * @return {Tooltip} Instance of tooltip.\n */\n hide () {\n this._tooltipContainer.style('display', 'none');\n this._tooltipConnectorContainer.style('display', 'none');\n return this;\n }\n\n /**\n * Shows the tooltip element.\n * @return {Tooltip} Instance of tooltip.\n */\n show () {\n this._tooltipContainer.style('display', 'block');\n return this;\n }\n\n extent (extent) {\n this._extent = extent;\n return this;\n }\n\n offset (offset) {\n this._offset = offset;\n return this;\n }\n\n remove () {\n this._tooltipContainer.remove();\n this._tooltipBackground.remove();\n this._tooltipConnectorContainer.remove();\n return this;\n }\n}\n","import {\n FieldType,\n GROUP_BY_FUNCTIONS,\n formatTemporal,\n DimensionSubtype,\n MeasureSubtype,\n DataModel,\n defaultValue,\n retrieveFieldDisplayName\n} from 'muze-utils';\n\nconst { SUM, COUNT } = GROUP_BY_FUNCTIONS;\nconst { InvalidAwareTypes } = DataModel;\n\nconst formatters = (formatter, interval, valueParser) => ({\n [DimensionSubtype.TEMPORAL]: (value) => {\n if (value instanceof InvalidAwareTypes) {\n return valueParser(value);\n }\n return formatTemporal(value, interval);\n },\n [MeasureSubtype.CONTINUOUS]: value => (value instanceof InvalidAwareTypes ? valueParser(value) :\n formatter(value.toFixed(2))),\n [DimensionSubtype.CATEGORICAL]: value => valueParser(value)\n});\n\nconst getDefaultTooltipFormatterFn = (formatter, defaultFormatter) => defaultValue(formatter, defaultFormatter);\n\nconst getTabularData = (dataObj, context, defaultFormatter) => {\n const rows = [];\n const { data, schema, fieldspace } = dataObj;\n rows.push(schema.map(d => d.name));\n const { valueParser, timeDiffs } = context;\n data.forEach((d) => {\n const row = [];\n schema.forEach((fieldObj, i) => {\n const interval = fieldObj.subtype === DimensionSubtype.TEMPORAL ? timeDiffs[fieldObj.name] : 0;\n const numberFormat = fieldObj.type === FieldType.MEASURE && fieldspace.fields[i].numberFormat();\n const formatterFn = getDefaultTooltipFormatterFn(formatters(numberFormat,\n interval, valueParser)[fieldObj.subtype], defaultFormatter);\n const value = formatterFn(d[i]);\n row.push(value);\n });\n rows.push(row);\n });\n return rows;\n};\n\nconst getRowContent = (fieldInf, context, dataInf, config) => {\n let value;\n let formattedValue;\n let measureIndex;\n\n const {\n valueParser,\n axes,\n dimensionMeasureMap,\n timeDiffs\n } = context;\n const { subtype: type, name: field } = fieldInf;\n\n const { fieldsConfig, defFormatter, data, fieldspace } = dataInf;\n const { separator, classPrefix } = config;\n const dataLen = data.length;\n const values = [];\n const index = fieldsConfig[field].index;\n const interval = fieldsConfig[field].def.subtype === DimensionSubtype.TEMPORAL ? timeDiffs[field] : 0;\n const formatterFn = getDefaultTooltipFormatterFn(formatters(val => val, interval, valueParser)[type],\n defFormatter);\n\n let uniqueVals = type === MeasureSubtype.CONTINUOUS ? data.map(d => d[index]) :\n [...new Set(data.map(d => d[index]))];\n uniqueVals = uniqueVals.filter(d => d !== '');\n const colorAxis = axes.color[0];\n const shapeAxis = axes.shape[0];\n const sizeAxis = axes.size[0];\n const isRetinalField = (colorAxis || shapeAxis || sizeAxis) && dataLen > 1 &&\n type !== MeasureSubtype.CONTINUOUS;\n\n uniqueVals.forEach((val, i) => {\n let key;\n let associatedMeasures = dimensionMeasureMap[field];\n\n if (associatedMeasures instanceof Array && dataLen > 1) {\n associatedMeasures = associatedMeasures.filter(d => d in fieldsConfig);\n key = val;\n let icon = {\n value: ''\n };\n\n if (isRetinalField) {\n icon = {\n type: 'icon',\n color: colorAxis.getColor(val),\n shape: shapeAxis.getShape(val),\n size: sizeAxis.getSize(val) * config.iconScale\n };\n }\n if (associatedMeasures.length > 1) {\n const formattedKey = type === DimensionSubtype.TEMPORAL ? formatterFn(key, interval) : key;\n values.push([icon, `${formattedKey}`]);\n associatedMeasures.forEach((measure) => {\n measureIndex = fieldsConfig[measure].index;\n value = data[i][measureIndex];\n const numberFormat = fieldspace.fields[measureIndex].numberFormat();\n const measureFormatter = getDefaultTooltipFormatterFn(\n formatters(numberFormat, interval, valueParser)[MeasureSubtype.CONTINUOUS]);\n formattedValue = measureFormatter(value);\n values.push([{\n value: `${retrieveFieldDisplayName(context.data, measure)}${separator}`,\n style: {\n 'margin-left': `${config.margin}px}`\n },\n className: `${classPrefix}-tooltip-key`\n }, {\n value: `${formattedValue}`,\n className: `${classPrefix}-tooltip-value`\n }]);\n });\n } else {\n measureIndex = fieldsConfig[associatedMeasures[0]].index;\n value = data[i][measureIndex];\n const numberFormat = fieldspace.fields[measureIndex].numberFormat();\n const measureFormatter = getDefaultTooltipFormatterFn(\n formatters(numberFormat, interval, valueParser)[MeasureSubtype.CONTINUOUS]);\n formattedValue = measureFormatter(value);\n const formattedKey = type === DimensionSubtype.TEMPORAL ? formatterFn(key, interval) : key;\n values.push([\n icon,\n {\n value: `${formattedKey}`,\n className: `${classPrefix}-tooltip-key`\n },\n {\n value: `${formattedValue}`,\n className: `${classPrefix}-tooltip-value`\n }\n ]);\n }\n } else {\n key = field;\n value = val;\n formattedValue = formatterFn(value);\n values.push([{\n value: `${retrieveFieldDisplayName(context.data, key)}${separator}`,\n className: `${config.classPrefix}-tooltip-key`\n }, {\n value: `${formattedValue}`,\n className: `${config.classPrefix}-tooltip-value`\n }]);\n }\n });\n return values;\n};\n\nexport const buildTooltipData = (dataModel, config = {}, context) => {\n let fieldValues = [];\n const dataObj = dataModel.getData();\n const data = dataObj.data;\n const schema = dataObj.schema;\n const fieldspace = dataModel.getFieldspace();\n const fieldsConfig = dataModel.getFieldsConfig();\n const detailFields = context.detailFields || [];\n const dimensions = schema.filter(d => d.type === FieldType.DIMENSION);\n const measures = schema.filter(d => d.type === FieldType.MEASURE);\n const containsDetailField = schema.find(d => detailFields.indexOf(d.name) !== -1);\n const dataLen = data.length;\n const {\n valueParser,\n dimensionMeasureMap\n } = context;\n const defFormatter = formatters(null, null, valueParser)[DimensionSubtype.CATEGORICAL];\n\n if (dataLen > 1 && containsDetailField) {\n fieldValues = getTabularData({\n data,\n schema,\n fieldspace\n }, context, defFormatter);\n } else {\n dimensions.forEach((item) => {\n fieldValues = [...fieldValues, ...getRowContent(item, context, {\n fieldsConfig,\n data,\n defFormatter,\n fieldspace\n }, config)];\n });\n\n const allMeasures = [...new Set(...Object.values(dimensionMeasureMap))];\n const filteredMeasures = dataLen > 1 ? measures.filter(d => allMeasures.indexOf(d.name) === -1)\n : measures;\n\n filteredMeasures.forEach((item) => {\n fieldValues = [...fieldValues, ...getRowContent(item, context, {\n fieldsConfig,\n data,\n defFormatter,\n fieldspace\n }, config)];\n });\n }\n\n return fieldValues;\n};\n\nexport const strategies = {\n selectionSummary: (dm, config, context) => {\n const { selectionSet } = context;\n const aggFns = selectionSet.mergedEnter.aggFns;\n const dataObj = dm.getData();\n const measures = dataObj.schema.filter(d => d.type === FieldType.MEASURE);\n const aggregatedModel = dm.groupBy([''], measures.reduce((acc, v) => {\n acc[v.name] = aggFns[v.name] === COUNT ? SUM : aggFns[v.name];\n return acc;\n }, {\n saveChild: false\n }));\n const fieldsConf = aggregatedModel.getFieldsConfig();\n let values = [[{\n value: `${dataObj.data.length}`,\n style: {\n 'font-weight': 'bold'\n }\n }, 'Items Selected']];\n const measureNames = measures.map(d => d.name);\n measureNames.forEach((measure) => {\n values.push([`(${aggFns[measure].toUpperCase()})`, `${retrieveFieldDisplayName(dm, measure)}`,\n {\n value: `${aggregatedModel.getData().data[0][fieldsConf[measure].index].toFixed(2)}`,\n style: {\n 'font-weight': 'bold'\n }\n }]);\n });\n if (measureNames.length === 1) {\n values = [[...values[0], ...values[1]]];\n }\n return values;\n },\n highlightSummary: (data, config, context) => {\n const values = buildTooltipData(data, config, context);\n return values;\n }\n};\n","import { Tooltip as TooltipRenderer } from '@chartshq/muze-tooltip';\nimport { FieldType, mergeRecursive, defaultValue } from 'muze-utils';\nimport { spaceOutBoxes } from '../helper';\nimport { strategies } from './strategies';\nimport { FRAGMENTED } from '../../enums/constants';\nimport SpawnableSideEffect from '../spawnable';\n\nimport './styles.scss';\n\nconst configResolvers = {\n highlightSummary: (specificConf, config) => defaultValue(specificConf, config),\n default: specificConf => defaultValue(specificConf, {})\n};\n\nconst sanitizeConfig = (config, context) => {\n const strategyObj = context._strategies;\n const sanitizedConf = Object.assign({}, config);\n for (const key in strategyObj) {\n sanitizedConf[key] = defaultValue(configResolvers[key], configResolvers.default)(config[key], config);\n }\n return sanitizedConf;\n};\n\nexport default class Tooltip extends SpawnableSideEffect {\n constructor (...params) {\n super(...params);\n this._tooltips = {};\n this._strategies = strategies;\n this._strategy = 'highlightSummary';\n }\n\n static defaultConfig () {\n return {\n padding: 5,\n offset: {\n x: 0,\n y: 0\n },\n highlightSummary: {\n dataTransform: (dt, fields) => (fields ? dt.project(fields, { saveChild: false }) : dt\n )\n },\n selectionSummary: {\n dataTransform: (dt, fields) => {\n const fieldspace = dt.getFieldspace();\n const dimensions = Object.keys(fieldspace.getDimension());\n const measures = Object.keys(fieldspace.getMeasure());\n const projectedFields = defaultValue(fields, measures.length ? [measures[0]] : []);\n return dt.project([...dimensions, ...projectedFields], {\n saveChild: false\n });\n }\n }\n };\n }\n\n static formalName () {\n return 'tooltip';\n }\n\n config (...params) {\n if (params.length) {\n const config = this._config = mergeRecursive(this._config, sanitizeConfig(params[0], this));\n const strategyObj = this._strategies;\n for (const key in strategyObj) {\n const formatter = config[key].formatter;\n this.setStrategy(key, formatter);\n }\n return this;\n }\n return this._config;\n }\n\n apply (selectionSet, payload, options = {}) {\n let totalHeight = 0;\n let totalWidth = 0;\n const dataModel = selectionSet.mergedEnter.model;\n const context = this.firebolt.context;\n const drawingInf = this.drawingContext();\n if ((dataModel.isEmpty() || payload.criteria === null) || selectionSet.isSourceFieldPresent === false) {\n this.hide(options, null);\n return this;\n }\n\n const tooltips = this._tooltips;\n const config = this.config();\n const boundBox = {\n width: drawingInf.width,\n height: drawingInf.height\n };\n const showInPosition = payload.showInPosition;\n const pad = config.padding;\n const dataModels = [];\n const fragmented = config.mode === FRAGMENTED;\n const sourceInf = context.getSourceInfo();\n const fields = sourceInf.fields;\n const xFieldDim = fields.x[0] ? fields.x[0].type() === FieldType.DIMENSION : false;\n const showVertically = !!xFieldDim;\n const tooltipPos = payload.position;\n const boxes = [];\n const enter = {};\n const uids = dataModel.getData().uids;\n if (fragmented) {\n dataModels.push(...uids.map(d => dataModel.select((fieldsArr, i) => i === d, {\n saveChild: false\n })));\n } else {\n dataModels.push(dataModel);\n }\n\n let target = payload.target;\n let targetFields = [];\n if (target) {\n targetFields = target[0] || [];\n const sourceFields = payload.sourceFields;\n const indices = [];\n for (let i = 0, len = targetFields.length; i < len; i++) {\n if (sourceFields.indexOf(targetFields[i]) !== -1) {\n indices.push(i);\n }\n }\n target = target.map(d => d.filter((v, i) => indices.indexOf(i) !== -1));\n }\n\n const plotDimensions = context.getPlotPointsFromIdentifiers(target || payload.criteria, {\n getBBox: true\n });\n\n const strategy = defaultValue(options.strategy, this._strategy);\n const strategyConf = config[strategy];\n const { dataTransform, fields: projectFields } = strategyConf;\n // Show tooltip for each datamodel\n for (let i = 0; i < dataModels.length; i++) {\n let plotDim = plotDimensions[i];\n if (fragmented) {\n const dimensions = dataModels[i].getData().schema.filter(d => d.type === FieldType.DIMENSION)\n .map(d => d.name);\n plotDim = context.getPlotPointsFromIdentifiers(dataModels[i].project(dimensions), { getBBox: true });\n plotDim = plotDim && plotDim[0];\n }\n\n const dt = dataTransform(dataModels[i], projectFields, this);\n\n enter[i] = true;\n const { parentContainer: layoutContainer, parentContainerDimensions } = drawingInf;\n const layoutBoundBox = layoutContainer.getBoundingClientRect();\n const unitBoundBox = drawingInf.htmlContainer.getBoundingClientRect();\n\n const offsetLeft = unitBoundBox.left - layoutBoundBox.left;\n const offsetTop = unitBoundBox.top - layoutBoundBox.top;\n const tooltipInst = tooltips[i] = tooltips[i] || new TooltipRenderer(layoutContainer,\n drawingInf.svgContainer);\n\n sourceInf.payload = payload;\n sourceInf.firebolt = this.firebolt;\n sourceInf.detailFields = context.detailFields();\n sourceInf.timeDiffs = context.timeDiffsByField();\n sourceInf.valueParser = context.valueParser();\n sourceInf.selectionSet = selectionSet;\n tooltipInst.context(sourceInf);\n const strategyFn = strategies[strategy];\n tooltipInst.content(strategy, dt, {\n formatter: strategyFn,\n order: options.order\n })\n .config(this.config())\n .extent({\n x: 0,\n y: 0,\n width: parentContainerDimensions.width,\n height: parentContainerDimensions.height\n })\n .offset({\n x: offsetLeft + (config.offset.x || 0),\n y: offsetTop + (config.offset.y || 0)\n });\n\n if (showInPosition) {\n tooltipInst.position(tooltipPos.x + pad, tooltipPos.y + pad);\n } else if (plotDim) {\n tooltipInst.positionRelativeTo({\n x: plotDim.x,\n y: plotDim.y,\n width: plotDim.width || 0,\n height: plotDim.height || 0\n }, {\n orientation: fragmented ?\n (showVertically ? 'horizontal' : 'vertical') : undefined\n });\n } else {\n tooltipInst.hide();\n break;\n }\n\n if (fragmented) {\n const position = tooltipInst._position;\n const tooltipBoundBox = tooltipInst._tooltipContainer.node().getBoundingClientRect();\n\n totalHeight += tooltipBoundBox.height + pad;\n totalWidth += tooltipBoundBox.width + pad;\n if (showVertically ? totalHeight > drawingInf.height : totalWidth > drawingInf.width) {\n break;\n }\n boxes.push({\n x: position.x,\n y: position.y,\n width: tooltipBoundBox.width,\n height: tooltipBoundBox.height,\n tooltip: tooltipInst\n });\n }\n }\n\n for (const key in tooltips) {\n if (!enter[key]) {\n const tooltip = tooltips[key];\n tooltip.content(payload.action, null);\n if (!tooltip.getContents().length) {\n tooltip.remove();\n delete tooltips[key];\n }\n }\n }\n if (fragmented) {\n spaceOutBoxes(boxes, boundBox, showVertically);\n boxes.forEach(box => box.tooltip.position(box.x, box.y, {\n repositionArrow: true\n }));\n }\n return this;\n }\n\n hide (options) {\n const tooltips = this._tooltips;\n for (const key in tooltips) {\n if ({}.hasOwnProperty.call(tooltips, key)) {\n const strategy = options.strategy || this._strategy;\n tooltips[key].content(strategy, null);\n tooltips[key].hide();\n }\n }\n }\n}\n","export const spaceOutBoxes = (boxes, extent, showVertically) => {\n let y;\n let height;\n let x;\n let width;\n let i;\n const pad = 5;\n const len = boxes.length;\n const spaceOutIfOverlap = (firstBox, secondBox, opposite) => {\n x = firstBox.x;\n width = firstBox.width;\n y = firstBox.y;\n height = firstBox.height;\n const bottom = y + height;\n const right = x + width;\n\n if (showVertically) {\n if (opposite ? y < (secondBox.y + secondBox.height) : bottom > secondBox.y) {\n secondBox.y = opposite ? firstBox.y - secondBox.height - pad :\n bottom + pad;\n }\n } else if (opposite ? x < (secondBox.x + secondBox.width) : right > secondBox.x) {\n secondBox.x = opposite ? firstBox.x - secondBox.width - pad :\n right + pad;\n }\n };\n\n boxes.sort((a, b) => (showVertically ? a.y - b.y : a.x - b.x));\n i = 0;\n\n for (i = 0; i < len - 1; i++) {\n spaceOutIfOverlap(boxes[i], boxes[i + 1]);\n }\n\n if ((boxes[i].y + boxes[i].height) > extent.height ||\n (boxes[i].x + boxes[i].width) > extent.width) {\n if (showVertically) {\n boxes[i].y -= (boxes[i].height + boxes[i].y) - extent.height;\n } else {\n boxes[i].x -= (boxes[i].width + boxes[i].x) - extent.width;\n }\n for (i = len - 1; i > 0; i--) {\n spaceOutIfOverlap(boxes[i], boxes[i - 1], true);\n }\n }\n return boxes;\n}\n;\n","import { selectElement, FieldType } from 'muze-utils';\n\nimport './styles.scss';\nimport { CLASSPREFIX } from '../../enums/constants';\nimport SpawnableSideEffect from '../spawnable';\n\nexport default class Crossline extends SpawnableSideEffect {\n static defaultConfig () {\n return {\n className: `${CLASSPREFIX}-crossline-group`,\n bandClass: `${CLASSPREFIX}-crossband`,\n lineClass: `${CLASSPREFIX}-crossline`\n };\n }\n\n static formalName () {\n return 'crossline';\n }\n\n apply (selectionSet, payload) {\n let height;\n let bandWidth;\n let px;\n let width;\n const {\n className,\n bandClass,\n lineClass\n } = this.config();\n const dataModel = selectionSet.mergedEnter.model;\n const drawingInf = this.drawingContext();\n if (payload.criteria && dataModel && dataModel.isEmpty()) {\n return this;\n }\n if (payload.criteria === null || !dataModel) {\n this.hide();\n return this;\n }\n\n const dataObj = dataModel.getData();\n const sourceInf = this.firebolt.context.getSourceInfo();\n const axes = sourceInf.axes;\n const axisFields = sourceInf.fields;\n const fields = selectionSet.fields;\n const data = dataObj.data;\n const fieldsConfig = dataModel.getFieldsConfig();\n const svgContainer = drawingInf.sideEffectGroup;\n\n const elemData = [];\n fields.forEach((field) => {\n const fieldIndex = fieldsConfig[field] && fieldsConfig[field].index;\n const dataArr = data.map(d => d[fieldIndex]);\n const axisIndex = [['x', 0], ['x', 1], ['y', 0], ['y', 1]].find((arr) => {\n const fieldInst = axisFields[arr[0]][arr[1]];\n return fieldInst && fieldInst.type() === FieldType.DIMENSION &&\n fieldInst.getMembers().indexOf(field) !== -1;\n });\n if (axisIndex !== undefined && data.length) {\n const type = axisIndex[0];\n const axis = axes[type][axisIndex[1]];\n const value = dataArr[0];\n bandWidth = axis.getUnitWidth() || 0;\n px = axis.getScaleValue(value) + bandWidth / 2 + drawingInf.xOffset;\n const layers = this.firebolt.context.layers();\n const plotWidth = Math.max(...layers.map(layer => layer.getPlotSpan()[type]));\n const pad = Math.max(...layers.map(layer => layer.getPlotPadding()[type]));\n height = drawingInf.height;\n width = drawingInf.width;\n const startPx = px - plotWidth / 2 - pad / 2;\n const endPx = px + plotWidth / 2 + pad / 2;\n const dataPoint = {};\n if (type === 'y') {\n dataPoint.d = `M 0 ${startPx} L 0 ${endPx} L ${width} ${endPx} L ${width} ${startPx} Z`;\n } else {\n dataPoint.d = `M ${startPx} 0 L ${endPx} 0 L ${endPx} ${height} L ${startPx} ${height} Z`;\n }\n dataPoint.className = plotWidth ? bandClass : lineClass;\n !isNaN(px) && elemData.push(dataPoint);\n }\n });\n if (elemData.length) {\n const parentGroup = this.createElement(svgContainer, 'g', [1], className);\n const elem = this.createElement(parentGroup, 'path', elemData);\n elem.attr('d', d => d.d).style('pointer-events', 'none')\n .attr('class', d => d.className);\n }\n return this;\n }\n\n hide () {\n const className = this.config().className;\n const drawingInf = this.drawingContext();\n selectElement(drawingInf.sideEffectGroup).selectAll(`.${className}`).remove();\n }\n}\n","const fadeFn = (set, context, strategy) => {\n const {\n mergedEnter,\n mergedExit,\n exitSet,\n completeSet\n } = set;\n\n if (!mergedEnter.length && !mergedExit.length) {\n context.applyInteractionStyle(completeSet, {}, strategy, false);\n } else {\n context.applyInteractionStyle(exitSet[1], {}, strategy, true);\n context.applyInteractionStyle(mergedEnter, {}, strategy, false);\n }\n};\n\nexport const strategies = {\n fade: fadeFn,\n focus: (set, context) => {\n const {\n mergedEnter,\n mergedExit,\n completeSet\n } = set;\n if (!mergedEnter.length && !mergedExit.length) {\n context.applyInteractionStyle(completeSet, {}, 'focus', false);\n } else {\n context.applyInteractionStyle(mergedExit, {}, 'focus', true);\n context.applyInteractionStyle(mergedEnter, {}, 'focus', false);\n }\n },\n highlight: (set, context) => {\n const {\n mergedEnter,\n mergedExit,\n entrySet,\n exitSet,\n completeSet\n } = set;\n if (!mergedEnter.length && !mergedExit.length) {\n context.applyInteractionStyle(completeSet, {}, 'highlight', false);\n } else {\n context.applyInteractionStyle(entrySet[1], {}, 'highlight', true);\n context.applyInteractionStyle(exitSet[1], {}, 'highlight', false);\n }\n }\n};\n","import SurrogateSideEffect from '../surrogate';\nimport { strategies } from './strategy';\n\nexport default class PlotHighlighter extends SurrogateSideEffect {\n constructor (...params) {\n super(...params);\n this._strategy = 'highlight';\n this._strategies = strategies;\n }\n\n static formalName () {\n return 'highlighter';\n }\n\n static target () {\n return 'visual-unit';\n }\n\n apply (selectionSet, payload, options = {}) {\n const strategy = this._strategies[options.strategy || this._strategy];\n\n if (selectionSet.isSourceFieldPresent !== false) {\n strategy(selectionSet, this, options.strategy || this._strategy);\n }\n\n return this;\n }\n}\n","import SurrogateSideEffect from '../surrogate';\n\nexport default class FilterEffect extends SurrogateSideEffect {\n static formalName () {\n return 'filter';\n }\n\n static target () {\n return 'visual-unit';\n }\n\n static mutates () {\n return true;\n }\n\n apply (selectionSet, payload) {\n const context = this.firebolt.context;\n const entryModel = selectionSet.mergedEnter.model;\n if (payload.criteria === null) {\n context.clearCaching().resetData();\n } else {\n context.enableCaching().data(entryModel);\n }\n return this;\n }\n}\n","import { DataModel, STATE_NAMESPACES, getObjProp } from 'muze-utils';\nimport { CLASSPREFIX } from '../../enums/constants';\nimport SpawnableSideEffect from '../spawnable';\n\nimport './styles.scss';\n\nconst addLayer = (layerDefs, layerRegistry, context, sideEffect) => {\n const layers = [];\n if (layerDefs) {\n layerDefs.forEach((layerDef) => {\n const mark = layerDef.mark;\n const layerCls = layerRegistry[mark];\n if (layerCls && layerCls.shouldDrawAnchors()) {\n const depLayerEncoding = layerDef.def.encoding;\n const encoding = {\n x: getObjProp(depLayerEncoding, 'x', 'field'),\n y: getObjProp(depLayerEncoding, 'y', 'field'),\n color: getObjProp(depLayerEncoding, 'color', 'field'),\n size: {\n field: getObjProp(depLayerEncoding, 'size', 'field'),\n value: sideEffect.defaultSizeValue()\n }\n };\n const name = `${layerDef.def.name}-${sideEffect.constructor.formalName()}`;\n const layerObj = {\n instances: context.addLayer({\n name,\n mark: 'point',\n className: sideEffect.constructor.defaultConfig().className,\n encoding,\n transform: {\n type: 'identity'\n },\n transition: sideEffect.getTransitionConfig(),\n calculateDomain: false,\n source: dm => dm.select(() => false, {\n saveChild: false\n }),\n interactive: false,\n render: false\n }),\n linkedLayer: layerDef.def.name\n };\n layers.push(layerObj);\n }\n });\n }\n return layers;\n};\n\nexport default class AnchorEffect extends SpawnableSideEffect {\n constructor (...params) {\n super(...params);\n this._layersMap = {};\n this.addAnchorLayers();\n }\n\n static target () {\n return 'visual-unit';\n }\n\n static defaultConfig () {\n return {\n className: `${CLASSPREFIX}-anchors-group`\n };\n }\n\n static formalName () {\n return 'anchors';\n }\n\n addAnchorLayers () {\n const context = this.firebolt.context;\n const metaInf = context.metaInf();\n const layerRegistry = context.registry().layerRegistry;\n const layerDefsVal = context.layerDef();\n context.store().registerImmediateListener(\n `${STATE_NAMESPACES.UNIT_LOCAL_NAMESPACE}.${metaInf.namespace}.layerDef`, ([, layerDefs]) => {\n this._layers = addLayer(layerDefs, layerRegistry, context, this);\n });\n this._layers = addLayer(layerDefsVal, layerRegistry, context, this);\n return this;\n }\n\n getTransitionConfig () {\n return {\n disabled: true\n };\n }\n\n /**\n * Returns the default area value of the anchor point.\n * @return { number } Default area value of anchor.\n */\n defaultSizeValue () {\n return 100;\n }\n\n apply (selectionSet) {\n const self = this;\n const dataModel = selectionSet.mergedEnter.model;\n if (selectionSet.isSourceFieldPresent !== false) {\n const drawingInf = this.drawingContext();\n const sideEffectGroup = drawingInf.sideEffectGroup;\n const className = `${this.config().className}`;\n const layers = this._layers;\n const parentGroup = this.createElement(sideEffectGroup, 'g', [1], `${className}-container`);\n const anchorGroups = this.createElement(parentGroup, 'g', Object.values(layers));\n anchorGroups.each(function (layer) {\n const instances = layer.instances;\n const elems = self.createElement(this, 'g', instances, className);\n const linkedLayer = self.firebolt.context.getLayerByName(layer.linkedLayer);\n const [transformedData, schema] = linkedLayer.getTransformedDataFromIdentifiers(dataModel);\n const transformedDataModel = new DataModel(transformedData, schema);\n elems.each(function (d, i) {\n instances[i].data(transformedDataModel).mount(this);\n });\n });\n }\n return this;\n }\n}\n","import AnchorEffect from './anchors';\nimport { CLASSPREFIX } from '../enums/constants';\n\nexport default class PersistentAnchors extends AnchorEffect {\n static formalName () {\n return 'persistent-anchors';\n }\n\n static defaultConfig () {\n return {\n className: `${CLASSPREFIX}-persistent-anchors`\n };\n }\n\n getTransitionConfig () {\n return {\n disabled: true\n };\n }\n}\n","import AnchorEffect from './anchors';\nimport { CLASSPREFIX } from '../enums/constants';\n\nexport default class BrushAnchors extends AnchorEffect {\n static formalName () {\n return 'brush-anchors';\n }\n\n static defaultConfig () {\n return {\n className: `${CLASSPREFIX}-brush-anchors`\n };\n }\n\n getTransitionConfig () {\n return {\n disabled: true\n };\n }\n}\n","import * as BEHAVIOURS from './enums/behaviours';\n\nexport const behaviourEffectMap = {\n [BEHAVIOURS.BRUSH]: ['selectionBox', {\n name: 'highlighter',\n options: {\n strategy: 'fade'\n }\n }, 'brush-anchors'],\n [`${BEHAVIOURS.BRUSH},${BEHAVIOURS.SELECT}`]: [{\n name: 'tooltip',\n options: {\n strategy: 'selectionSummary',\n order: 0,\n filter: context => context.config().mode === 'fragmented'\n }\n }],\n [BEHAVIOURS.HIGHLIGHT]: [{\n name: 'highlighter',\n options: {\n strategy: 'highlight'\n }\n }, 'crossline', {\n name: 'tooltip',\n options: {\n order: 9999\n }\n }, 'anchors'],\n [BEHAVIOURS.FILTER]: ['filter'],\n [BEHAVIOURS.SELECT]: [{\n name: 'highlighter',\n options: {\n strategy: 'focus'\n }\n }, 'persistent-anchors']\n};\n","export const CLASSPREFIX = 'muze';\nexport const STACK = 'stack';\nexport const GROUP = 'group';\nexport const IDENTITY = 'identity';\nexport const ANGLE = 'angle';\nexport const RADIUS = 'radius';\nexport const SIZE = 'size';\nexport const COLOR = 'color';\nexport const SHAPE = 'shape';\nexport const TEXT = 'text';\nexport const OUTER_RADIUS_VALUE = 'outerRadiusValue';\nexport const TEXT_ANCHOR_MIDDLE = 'middle';\nexport const ENCODING = {\n X: 'x',\n Y: 'y',\n X0: 'x0',\n Y0: 'y0',\n RADIUS: 'radius',\n RADIUS0: 'radius0',\n ANGLE: 'angle',\n ANGLE0: 'angle0'\n};\n\nexport const ASCENDING = 'asc';\n\nexport const AGG_FN_SUM = 'sum';\n\nexport const AREA_LAYER = 'area';\nexport const ARC_LAYER = 'arc';\nexport const LINE_LAYER = 'line';\nexport const TEXT_LAYER = 'text';\nexport const POINT_LAYER = 'point';\nexport const BAR_LAYER = 'bar';\nexport const TICK_LAYER = 'tick';\nexport const SIMPLE_LAYER = 'simple';\nexport const BASE_LAYER = 'base';\n","import { CLASSPREFIX, STACK } from '../../enums/constants';\n\nexport const defaultConfig = {\n classPrefix: CLASSPREFIX,\n defClassName: 'layer-area',\n className: '',\n interpolate: 'linear',\n transform: {\n type: STACK\n },\n interaction: {\n\n },\n nearestPointThreshold: 10,\n encoding: {\n color: {},\n x: {},\n y: {},\n y0: {},\n strokeOpacity: {\n value: 1\n }\n },\n transition: {\n effect: 'cubic',\n duration: 1000\n },\n connectNullData: false\n};\n","import { ERROR_MSG } from 'muze-utils';\n\n/**\n * This is an interface class which any new layer class has to extend.\n *\n * @example\n * class BarLayer extends BaseLayer {\n * update (params) {\n * // super.update(params);\n * // Update the bar layer\n * }\n * }\n * @class\n */\nexport default class SimpleLayer {\n\n formalName () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Sets or gets the dependencies.\n * @param {Object} dependencies Dependencies needed by layer\n * @return {BaseLayer} Instance of base layer.\n */\n dependencies () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Returns the config of the layer\n *\n * @param {Object} config Configuration of layer\n * @return {Object} configuration of layer\n */\n config () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Acts as a getter or setter function\n * When setter\n * Returns the datamodel of the layer\n * @param { DataModel } dataModel instance of DataModel\n * @return { DataModel } DataModel instance of the layer\n */\n data () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Returns a serialized schema of the layer\n * @return {Object} Serialized schema\n */\n serialize () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Returns the unique identifier of this layer\n * @return {string} id of the layer\n */\n id () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n /*\n * This method resolves the x, y, x0 and y0 values from the transformed data.\n * It also checks the type of transformed data for example, if it is a stacked data\n * then it fetches the y and y0 values from the stacked data.\n * @param {Array.} transformedData transformed data\n * @param {Object} fieldMap field definitions\n * @param {string} transformType type of transformed data - stack, group or identity.\n * @return {Array.} Normalized data\n * @private\n */\n normalizeTransformedData () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Gets the transform method from transform factory based on type of transform. It then calls the\n * transform method with the data and passes the configuration parameters of transform such as\n * groupBy, value field, etc.\n *\n * @param {DataModel} dataModel Instance of dataModel\n * @param {Object} config configuration for transforming data\n * @return {Array.} Transformed data.\n * @private\n */\n getTransformedData () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Calculates the domain from the data.\n * It checks the type of field and calculates the domain based on that. For example, if it\n * is a quantitative or temporal field, then it calculates the min and max from the data or\n * if it is a nominal field then it gets all the values from the data of that field.\n * @param {Array} data DataArray\n * @return {Array} Domain values array.\n */\n _calculateDomainFromData () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Returns the domain for the axis.\n *\n * @param {string} encodingType type of encoding x, y, color, etc.\n * @return {Object} Axis domains\n */\n getDomain () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Abstract method for getting nearest point\n * @return {BaseLayer} Instance of base layer\n */\n getNearestPoint () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Abstract method for highlighting points\n * @return {BaseLayer} Instance of base layer\n */\n highlightPoint () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Abstract method for deselecting points\n * @return {BaseLayer} Instance of base layer\n */\n dehighlightPoint () {\n return this;\n }\n\n linkLayerStore () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Sets the container element for the layer to be renderered.\n * @param {SVGElement} mountPoint SVG element or group element.\n */\n mount () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n render () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n}\n","import { COORD_TYPES } from 'muze-utils';\n\nconst { CARTESIAN } = COORD_TYPES;\nexport const props = {\n axes: {},\n mount: {},\n measurement: {},\n metaInf: {},\n data: {},\n config: {},\n valueParser: {\n defaultValue: val => val\n },\n coord: {\n defaultValue: CARTESIAN\n }\n};\n","/**\n * @module Axis\n * This file declares a class that is used to render an axis to add meaning to\n * plots.\n */\nimport { Symbols } from 'muze-utils';\nimport * as AxisOrientation from '../enums/axis-orientation';\n\n/**\n * @module Axis\n * This file exports constants that are used to reference axis orientations\n * in a consistent manner.\n */\nexport const BOTTOM = 'bottom';\nexport const TOP = 'top';\nexport const LEFT = 'left';\nexport const RIGHT = 'right';\n\n/**\n * This object is used to associate the axis orientation with the d3 class\n * used to represent that axis.\n */\nexport const axisOrientationMap = {\n [AxisOrientation.LEFT]: Symbols.axisLeft,\n [AxisOrientation.BOTTOM]: Symbols.axisBottom,\n [AxisOrientation.RIGHT]: Symbols.axisRight,\n [AxisOrientation.TOP]: Symbols.axisTop\n};\n","/**\n * @module axis\n * This file exports constants used to reference scale type\n * consistently throughout the project.\n */\nexport const LINEAR = 'linear';\nexport const BAND = 'band';\nexport const TIME = 'temporal';\nexport const COLOR = 'color';\nexport const ORDINAL = 'ordinal';\nexport const QUANTIZE = 'quantize';\nexport const QUANTILE = 'quantile';\nexport const LOG = 'log';\nexport const POW = 'pow';\nexport const IDENTITY = 'identity';\nexport const SEQUENTIAL = 'sequential';\nexport const THRESHOLD = 'threshold';\n","export const CLASSPREFIX = 'muze';\n\nexport const CONTINOUS = 'continous';\nexport const DISCRETE = 'discrete';\nexport const SEQUENTIAL = 'sequential';\nexport const ORDINAL = 'ordinal';\nexport const LINEAR = 'linear';\nexport const BAND = 'band';\nexport const THRESHOLD = 'threshold';\nexport const QUANTIZE = 'quantize';\nexport const QUANTILE = 'quantile';\n\nexport const COLOR = 'color';\nexport const SHAPE = 'shape';\nexport const SIZE = 'size';\n\nexport const DOMAIN = 'domain';\nexport const HIDDEN = 'hidden';\nexport const NUMBER = 'number';\nexport const BOTTOM = 'bottom';\nexport const TOP = 'top';\n\nexport const RGB = 'rgb';\nexport const HEX = 'hex';\nexport const HSLA = 'hsla';\nexport const HSL = 'hsl';\n\nexport const DEFAULT_ANGLE_DOMAIN = [1];\nexport const MIN_NO_OF_TICKS = 2;\nexport const DEFAULT_NO_OF_TICKS = 10;\n\n","import { scales, colorSchemes } from 'muze-utils';\n\nimport {\n SEQUENTIAL,\n ORDINAL,\n LINEAR,\n CONTINOUS,\n THRESHOLD,\n QUANTIZE\n} from './enums/constants';\n\nimport * as ScaleType from './enums/scale-type';\n\nconst {\n scaleLinear,\n scaleThreshold,\n scaleLog,\n scalePow,\n scaleIdentity,\n scaleOrdinal,\n scaleSequential,\n scaleQuantize,\n scaleQuantile,\n schemeCategory10,\n schemeCategory20,\n schemeCategory20b,\n scaleBand,\n scaleTime\n} = scales;\nexport const scaleMap = {\n [ScaleType.LINEAR]: scaleLinear,\n [ScaleType.BAND]: scaleBand,\n [ScaleType.QUANTIZE]: scaleQuantize,\n [ScaleType.QUANTILE]: scaleQuantile,\n [ScaleType.THRESHOLD]: scaleThreshold,\n [ScaleType.SEQUENTIAL]: scaleSequential,\n [ScaleType.LOG]: scaleLog,\n [ScaleType.POW]: scalePow,\n [ScaleType.IDENTITY]: scaleIdentity,\n [ScaleType.TIME]: scaleTime,\n [ScaleType.COLOR]: scaleLinear,\n [ScaleType.ORDINAL]: scaleOrdinal\n};\nexport const SCHEMES = {\n SCHEME1: schemeCategory10,\n SCHEME2: schemeCategory20,\n SCHEME3: schemeCategory20b\n};\n\n/**\n * Accepts a scheme in a string format and returns the scale from d3-scale-chromatic\n *\n * @export\n * @param {string} scheme a string representing the kind of scheme for the color axis\n * @return {Object} The corresponding scale from a scheme type from d3 chromatic scale\n */\nexport function getScheme (scheme) {\n if (scheme[0] === 'i') {\n return scaleSequential(colorSchemes[scheme]);\n }\n return scaleOrdinal(colorSchemes[scheme]);\n}\n\n/**\n *\n *\n * @export\n * @param {*} scheme\n *\n */\nexport function getSchemeType (scheme) {\n let schemeType = '';\n if (scheme && typeof (scheme) === 'string') {\n schemeType = scheme[0] === 'i' ? SEQUENTIAL : ORDINAL;\n } else {\n schemeType = ORDINAL;\n }\n return schemeType;\n}\n\n/**\n * This function is used to create a scale that is assigned to\n * an instance of axis.\n *\n * @export\n * @param {Object} params the input parameters to create a Scale object\n * @param {string} params.type the type of scale\n * @param {Array} params.range the range of scale\n * @return {Object} instance of scale\n */\nexport function createScale (params) {\n if (!params.type || !scaleMap[params.type]) {\n throw new Error(`${params.type} is not a valid scale type`);\n }\n if (!Array.isArray(params.range)) {\n throw new Error('range parameter must be an array');\n }\n let scaleFactory = null;\n const range = params.range;\n // @todo: do it using scale decorator\n if (params.type === LINEAR && params.interpolator) {\n scaleFactory = scaleMap[params.interpolator];\n if (params.interpolator === ScaleType.POW) {\n return scaleFactory().range(range).exponent(params.exponent);\n } else if (params.interpolator === ScaleType.LOG) {\n return scaleFactory().range(range).base([params.base]);\n }\n } else {\n scaleFactory = scaleMap[params.type];\n }\n\n if (params.type === QUANTIZE) {\n scaleFactory().nice();\n }\n return scaleFactory().range(range);\n}\n\n/**\n * This method is used to update the range of a scale\n * so that the core module can remain agnostic of the d3\n * scale api.\n *\n * @export\n * @param {Scale} scale Instance of d3 Scale.\n * @param {Array} range new range of the scale.\n * @return {Scale} Updated scale.\n */\nexport function updateScaleRange (scale, range) {\n return scale.range(range);\n}\n\n/**\n *\n *\n * @export\n * @param {*} domainType\n * @param {*} rangeType\n * @param {*} steps\n *\n */\nexport function getScaleType (domainType, rangeType, steps) {\n if (rangeType === CONTINOUS) {\n return LINEAR;\n }\n if (domainType === CONTINOUS) {\n if (steps instanceof Array) {\n return THRESHOLD;\n }\n return QUANTIZE;\n }\n return ORDINAL;\n}\n","import { getUniqueId } from 'muze-utils';\nimport { CLASSPREFIX } from '../enums/constants';\n\n/**\n *\n *\n */\nexport const defaultConfig = {\n id: getUniqueId(),\n adjustRange: false,\n axisName: {\n defClassName: 'axis-name'\n },\n axisNamePadding: 12,\n base: 10,\n classPrefix: CLASSPREFIX,\n className: `${CLASSPREFIX}-axis`,\n exponent: 1,\n interpolator: 'linear',\n fixedBaseline: true,\n labels: {\n rotation: null,\n smartTicks: null\n },\n orientation: 'left',\n numberFormat: val => val,\n padding: 0.3,\n nice: true,\n numberOfTicks: null,\n rotate: false,\n show: true,\n showAxisName: true,\n showInnerTicks: true,\n showOuterTicks: true,\n style: {},\n type: 'linear',\n tickFormat: null,\n tickValues: null,\n xOffset: 0,\n yOffset: 0\n};\n\n","/**\n * This file exports functionality that is used to render axis.\n */\nimport { selectElement, makeElement, angleToRadian } from 'muze-utils';\nimport * as AxisOrientation from './enums/axis-orientation';\nimport { LINEAR, HIDDEN, BOTTOM, TOP } from './enums/constants';\n\n/**\n *\n *\n * @param {*} instance\n * @param {*} container\n * @param {*} labelManager\n * @param {*} config\n */\nconst rotateAxis = (instance, tickText, labelManager) => {\n let rotation;\n const axis = instance.axis();\n const config = instance.config();\n const renderConfig = instance.renderConfig();\n const smartTicks = instance.smartTicks();\n const scale = axis.scale();\n const labelFunc = scale.ticks || scale.quantile || scale.domain;\n const ticks = labelFunc();\n const {\n orientation,\n fixedBaseline,\n type\n } = config;\n const {\n labels\n } = renderConfig;\n\n rotation = labels.rotation;\n\n const tickSize = instance.getTickSize();\n tickText.each(function (d, index) {\n let yShift;\n let xShift;\n let datum = smartTicks[index] ? smartTicks[index].text : d;\n\n datum = datum.toString();\n\n const tickLabelDim = labelManager.getOriSize(datum);\n\n const width = tickLabelDim.width * 0.5;\n const height = tickLabelDim.height * 0.5;\n\n if (rotation < 0) {\n rotation = 360 + rotation;\n }\n\n const quadrant = 4 - Math.floor(rotation / 90);\n const rotationNormalizer = ((quadrant % 2 === 0) ? rotation : 180 * Math.ceil(rotation / 180) - rotation) % 180;\n\n yShift = Math.sqrt(height ** 2 + width ** 2) * Math.sin(angleToRadian(rotationNormalizer));\n\n if ((quadrant === 3 || quadrant === 2) && !(rotationNormalizer > 67.5 && rotationNormalizer <= 90)) {\n yShift += height * 2;\n }\n xShift = width;\n\n if (rotation === 90) {\n xShift = height;\n } else if (rotation === 270) {\n xShift = -height;\n } else {\n xShift = 0;\n }\n\n if (orientation === AxisOrientation.TOP) {\n xShift = (fixedBaseline && ticks[0] === d && type === LINEAR) ? xShift + xShift / 2 : xShift;\n selectElement(this)\n .attr('transform', `translate(${-xShift + tickSize}\n ${-yShift - tickSize}) rotate(${rotation})`);\n } else {\n xShift = (fixedBaseline && ticks[0] === d && type === LINEAR) ? xShift - xShift / 2 : xShift;\n\n selectElement(this)\n .attr('transform', `translate(${xShift - tickSize}\n ${yShift + tickSize}) rotate(${rotation})`);\n }\n selectElement(this).transition()\n .duration(1000).text(datum);\n });\n return tickText;\n};\n\n/**\n *\n *\n * @param {*} tickText\n * @param {*} axisInstance\n */\nconst changeTickOrientation = (selectContainer, axisInstance, tickSize) => {\n const {\n _smartTicks\n } = axisInstance;\n const config = axisInstance.config();\n const renderConfig = axisInstance.renderConfig();\n const labelManager = axisInstance.dependencies().labelManager;\n const {\n orientation,\n classPrefix\n } = config;\n const {\n labels\n } = renderConfig;\n const {\n rotation,\n smartTicks: isSmartTicks\n } = labels;\n\n const tickText = selectContainer.selectAll('.tick text');\n tickText.selectAll('tspan').remove();\n\n // rotate labels if not enough space is available\n if (rotation && (orientation === TOP || orientation === BOTTOM)) {\n rotateAxis(axisInstance, tickText, labelManager);\n } else if (!rotation && !isSmartTicks) {\n tickText.attr('transform', '');\n } else {\n tickText.text('');\n if (orientation === TOP || orientation === BOTTOM) {\n tickText.attr('y', 0)\n .attr('x', 0)\n .attr('transform', '')\n .text('');\n const tspan = makeElement(tickText, 'tspan', (d, i) => {\n if (_smartTicks[i]) {\n return _smartTicks[i].lines;\n } return [];\n }, `${classPrefix}-smart-text`);\n\n tspan.attr('dy', '0')\n .style('opacity', '0')\n\n .transition()\n .duration(1000)\n .on('end', axisInstance.registerAnimationDoneHook())\n .attr('dy', (d, i) => {\n if (orientation === BOTTOM || i !== 0) {\n return _smartTicks[0].oriTextHeight;\n }\n return -_smartTicks[0].oriTextHeight * (_smartTicks[0].lines.length - 1) - tickSize;\n })\n .style('opacity', 1)\n .text(e => e)\n .attr('x', 0);\n } else {\n const tspan = makeElement(tickText, 'tspan', (d, i) => _smartTicks[i].lines, `${classPrefix}-smart-text`);\n tspan.text(e => e);\n }\n }\n\n return tickText;\n};\n\nconst setFixedBaseline = (axisInstance) => {\n const {\n fixedBaseline\n } = axisInstance.config();\n const {\n showInnerTicks\n } = axisInstance.renderConfig();\n const domain = axisInstance.domain();\n if (fixedBaseline && domain.length && showInnerTicks) {\n axisInstance.setFixedBaseline();\n }\n};\n\n/**\n *\n *\n * @param {*} textNode\n * @param {*} orientation\n * @param {*} measures\n */\nconst setAxisNamePos = (textNode, orientation, measures) => {\n const {\n axisNameHeight,\n yOffset,\n labelOffset,\n availableSpace\n } = measures;\n\n switch (orientation) {\n case AxisOrientation.LEFT:\n textNode.attr('transform',\n `translate(${-(availableSpace.width - axisNameHeight)},${yOffset + labelOffset})rotate(-90)`);\n break;\n case AxisOrientation.RIGHT:\n textNode.attr('transform',\n `translate(${(availableSpace.width - axisNameHeight)},${yOffset + labelOffset})rotate(90)`);\n break;\n case AxisOrientation.TOP:\n textNode.attr('transform',\n `translate(${availableSpace.width / 2},${-availableSpace.height + axisNameHeight})`);\n break;\n case AxisOrientation.BOTTOM:\n textNode.attr('transform',\n `translate(${availableSpace.width / 2},${availableSpace.height - axisNameHeight / 2})`);\n break;\n default:\n }\n return textNode;\n};\n\n/**\n * This method is used to render the axis inside an\n * svg container.\n *\n * @export\n * @param {Object} axisInstance the nput object required to render axis\n * @param {string} axisInstance.orientation the orientation of axis\n * @param {Object} axisInstance.scale instance of d3 scale\n * @param {SVGElement} axisInstance.container the container in which to render\n */\nexport function renderAxis (axisInstance) {\n const config = axisInstance.config();\n const renderConfig = axisInstance.renderConfig();\n const labelManager = axisInstance.dependencies().labelManager;\n const mount = axisInstance.mount();\n const range = axisInstance.range();\n const axis = axisInstance.axis();\n const scale = axisInstance.scale();\n const {\n _axisNameStyle: axisNameStyle,\n _tickLabelStyle: tickLabelStyle,\n _tickFormatter: axisTickFormatter\n } = axisInstance;\n const {\n orientation,\n name,\n\n axisNamePadding,\n className,\n id,\n classPrefix\n } = config;\n const {\n show,\n xOffset,\n yOffset,\n showAxisName,\n labels,\n smartAxisName\n } = renderConfig;\n\n if (!show) {\n return;\n }\n\n const tickSize = axisInstance.getTickSize();\n\n const selectContainer = makeElement(selectElement(mount), 'g', [axisInstance], `${className}`, {},\n key => key.config().id);\n\n // Set style for tick labels\n labelManager.setStyle(tickLabelStyle);\n\n const labelFunc = scale.ticks || scale.quantile || scale.domain;\n\n const ticks = axis.tickValues() || labelFunc();\n\n axis.tickFormat(axisTickFormatter(ticks));\n\n // Get range(length of range)\n const availableSpace = Math.abs(range[0] - range[1]);\n\n // Get width and height taken by axis labels\n const labelProps = axisInstance.axisComponentDimensions().largestTickDimensions;\n\n // Draw axis ticks\n selectContainer.attr('transform', `translate(${xOffset},${yOffset})`);\n setFixedBaseline(axisInstance);\n if (labels.smartTicks === false || tickSize === 0) {\n selectContainer.transition()\n .duration(1000)\n .on('end', axisInstance.registerAnimationDoneHook())\n .call(axis);\n } else {\n selectContainer.call(axis);\n }\n selectContainer.selectAll('.tick').classed(`${classPrefix}-ticks`, true);\n selectContainer.selectAll('.tick line').classed(`${classPrefix}-tick-lines`, true);\n\n // Set classes for ticks\n const tickText = selectContainer.selectAll('.tick text');\n tickText.classed(`${classPrefix}-ticks`, true)\n .classed(`${classPrefix}-ticks-${id}`, true);\n\n changeTickOrientation(selectContainer, axisInstance, tickSize);\n\n // Create axis name\n const textNode = makeElement(selectContainer, 'text', [smartAxisName], `${classPrefix}-axis-name`)\n .attr('text-anchor', 'middle')\n .classed(`${classPrefix}-axis-name-${id}`, true)\n .text(d => d.text);\n\n // Hide axis name if show is off\n textNode.classed(HIDDEN, !showAxisName);\n\n // render labels based on orientation of axis\n const labelOffset = availableSpace / 2;\n\n // Set style for axis name\n labelManager.setStyle(axisNameStyle);\n const axisNameSpace = labelManager.getOriSize(name);\n const measures = {\n labelProps,\n tickSize,\n axisNamePadding,\n axisNameHeight: axisNameSpace.height,\n axisNameWidth: axisNameSpace.width,\n yOffset,\n xOffset,\n labelOffset,\n availableSpace: axisInstance.availableSpace()\n };\n // Set position for axis name\n setAxisNamePos(textNode, orientation, measures);\n}\n","import {\n timeMillisecond,\n timeSecond,\n timeMinute,\n timeHour,\n timeDay,\n timeWeek,\n timeMonth,\n timeYear\n} from 'muze-utils';\n\nconst durationSecond = 1000;\nconst durationMinute = durationSecond * 60;\nconst durationHour = durationMinute * 60;\nconst durationDay = durationHour * 24;\nconst durationWeek = durationDay * 7;\nconst durationMonth = durationDay * 30;\nconst durationYear = durationDay * 365;\n\n// Longest Word for each level based on which tick skipping is decided\nconst longestWord = {\n month: 'September',\n quarter: 'October',\n halfYearly: 'July',\n year: 9999,\n day: 'September',\n hour: '24 AM',\n mintues: '60:60',\n seconds: ':60',\n week: 'Wed 31'\n};\n\n// These are the various levels of ticks that can be shown by Muze.\n// Each level is described as how frequently the ticks appear\n// The format is as follows:\n// [Frequency, Milliseconds, Name of Seconds, Tick Generator, Level Type]\nconst tickIntervals = [\n [1, 1, 'milliseconds', timeMillisecond.every(1), 'seconds'],\n [1, durationSecond, 'seconds', timeSecond.every(1), 'seconds'],\n [5, 5 * durationSecond, 'five seconds', timeSecond.every(5), 'seconds'],\n [10, 10 * durationSecond, 'ten seconds', timeSecond.every(10), 'seconds'],\n [15, 15 * durationSecond, 'fifteen seconds', timeSecond.every(15), 'seconds'],\n [30, 30 * durationSecond, 'thirty seconds', timeSecond.every(30), 'seconds'],\n [1, durationMinute, 'minute', timeMinute.every(1), 'minutes'],\n [5, 5 * durationMinute, 'five minutes', timeMinute.every(5), 'minutes'],\n [10, 10 * durationMinute, 'ten minutes', timeMinute.every(10), 'minutes'],\n [15, 15 * durationMinute, 'fifteen minutes', timeMinute.every(15), 'minutes'],\n [30, 30 * durationMinute, 'thirty minutes', timeMinute.every(30), 'minutes'],\n [1, durationHour, 'hour', timeHour.every(1), 'hour'],\n [3, 3 * durationHour, 'three hours', timeHour.every(3), 'hour'],\n [6, 6 * durationHour, 'six hours', timeHour.every(6), 'hour'],\n [12, 12 * durationHour, 'twelve hours', timeHour.every(12), 'hour'],\n [1, durationDay, 'daily', timeDay.every(1), 'day'],\n [1, durationWeek, 'weekly', timeWeek.every(1), 'week'],\n [1, durationMonth, 'monthly', timeMonth.every(1), 'week'],\n [3, 3 * durationMonth, 'quaterly', timeMonth.every(3), 'quarter'],\n [6, 6 * durationMonth, 'half yearly', timeMonth.every(6), 'halfYearly'],\n [1, durationYear, 'yearly', timeYear.every(1), 'year'],\n [2, 2 * durationYear, '2 year', timeYear.every(2), 'year'],\n [3, 3 * durationYear, '3 year', timeYear.every(3), 'year'],\n [5, 5 * durationYear, '5 year', timeYear.every(5), 'year'],\n [10, 10 * durationYear, 'decade', timeYear.every(10), 'year'],\n [100, 100 * durationYear, 'century', timeYear.every(100), 'year'],\n [1000, 1000 * durationYear, 'millenium', timeYear.every(1000), 'year']\n];\n/**\n * Get the actual tick interval based on the available width, number of ticks\n * and the distance between two ticks\n *\n * @param {Object} context Axis Context\n * @param {number} noOfTicks Number of Ticks based on which interval is calculated\n * @return {number} The width for the tick interval\n */\nconst getActualTickInterval = (context, noOfTicks) => {\n const minTickDistance = context._minTickDistance;\n const minWidthBetweenTicks = minTickDistance.width;\n\n const { width } = context.availableSpace();\n const actualTickInterval = Math.floor(((width - (noOfTicks - 1) * (minWidthBetweenTicks)) / noOfTicks));\n\n return actualTickInterval;\n};\n\n/**\n * Get the tick interval based on the current level of ticks. Levels are decided on\n * the number of ticks that are possible to show\n *\n * @param {Object} context Axis Context\n * @param {string} type Type of level (yearly, monthly, etc)\n * @return {number} The width for the tick interval\n */\nconst getTickIntervalBasedOnCurrentLevel = (context, type) => {\n const labelManager = context._dependencies.labelManager;\n const longestWordType = longestWord[type];\n const measure = labelManager.getOriSize(longestWordType);\n\n return measure.width;\n};\n\nconst getTickIntervalFnBasedOnNumberOfTicks = (interval, count, context) => {\n let possibleTickLevelIndex = tickIntervals.length - 1;\n let maxPossibleTicks = 1;\n let tickIntervalLevelInfo = null;\n\n // Decide possible tick level based on min tick width (with ellipses)\n for (let i = tickIntervals.length - 1; i >= 0; i--) {\n const tickIntervalInfo = tickIntervals[i];\n const numOfPossibleTicks = Math.floor(interval / tickIntervalInfo[1]);\n if (numOfPossibleTicks <= count) {\n possibleTickLevelIndex = i;\n maxPossibleTicks = numOfPossibleTicks;\n }\n }\n\n tickIntervalLevelInfo = tickIntervals[possibleTickLevelIndex];\n\n // Get actual tick interval based on the level of ticks generated\n const actualTickInterval = getActualTickInterval(context, maxPossibleTicks);\n\n // Maximum Possible tick Interval for a particular level based on a pre decided set of values\n const maxTickInterval = getTickIntervalBasedOnCurrentLevel(context, tickIntervalLevelInfo[4]);\n\n // Display the next level involving tick skipping if current level does not meet the requirement\n // for displaying max tick\n if (actualTickInterval < maxTickInterval && possibleTickLevelIndex < tickIntervals.length - 1) {\n tickIntervalLevelInfo = tickIntervals[possibleTickLevelIndex + 1];\n }\n return tickIntervalLevelInfo[3];\n};\n\nexport const getSkippedTicks = (context, maxPossibleTicks) => {\n let actualNumberOfTicks = maxPossibleTicks;\n const domain = context.domain();\n const minDiff = context._minDiff;\n // Get the interval in ms from the domain\n const millisecondInterval = domain[1] - domain[0];\n // Get number of ticks based on the minimum difference in the data\n const numOfTicksAccordingToMinDiff = Math.floor(millisecondInterval / minDiff);\n\n // Show ticks according to min diff if possible\n if (maxPossibleTicks >= numOfTicksAccordingToMinDiff) {\n actualNumberOfTicks = numOfTicksAccordingToMinDiff;\n }\n\n return getTickIntervalFnBasedOnNumberOfTicks(millisecondInterval, actualNumberOfTicks, context);\n};\n","import { BOTTOM, TOP, LEFT, RIGHT } from '../enums/axis-orientation';\nimport { getSkippedTicks } from './skip-ticks';\nimport { TIME, LINEAR, BAND } from '../enums/scale-type';\n\nexport const applyTickSkipping = (context) => {\n const minTickDistance = context._minTickDistance;\n const minTickSpace = context._minTickSpace;\n const minWidthBetweenTicks = minTickDistance.width;\n const minTickWidth = minTickSpace.width;\n\n const { width } = context.availableSpace();\n\n const maxTicks = Math.floor((width + minWidthBetweenTicks) / (minTickWidth + minWidthBetweenTicks));\n\n const ticks = context.scale().ticks(getSkippedTicks(context, maxTicks));\n\n context.renderConfig({\n tickValues: ticks\n });\n};\n\nconst adjustHorizontalRange = (range, diff) => {\n range[0] += diff;\n range[1] -= diff;\n return range;\n};\n\nconst adjustVerticalRange = (range, diff) => {\n range[0] -= diff;\n range[1] += diff;\n return range;\n};\n\nconst rangeAdjustmentMap = {\n [TOP]: adjustHorizontalRange,\n [BOTTOM]: adjustHorizontalRange,\n [LEFT]: adjustVerticalRange,\n [RIGHT]: adjustVerticalRange\n};\n\nexport const setAxisRange = (context, type, rangeBounds, offset) => {\n context.range(rangeBounds);\n offset && context.renderConfig({ [`${type}Offset`]: offset });\n};\n\nconst getAxisOffset = (timeDiff, range, domain) => {\n const avWidth = Math.abs(range[1] - range[0]);\n const pvr = avWidth / (domain[1] - domain[0]);\n const width = (pvr * timeDiff);\n const bars = avWidth / width;\n const barWidth = avWidth / (bars + 1);\n const diff = avWidth - barWidth * bars;\n\n return diff / 2;\n};\n\nexport const getAdjustedRange = (minDiff, range, domain, config) => {\n const {\n orientation,\n adjustRange\n } = config;\n const diff = getAxisOffset(minDiff, range, domain);\n\n if (adjustRange) {\n return rangeAdjustmentMap[orientation](range, diff);\n }\n return range;\n};\n\nexport const spaceSetter = (context, spaceConfig) => {\n let tickInterval;\n let heightForTicks;\n const config = context.config();\n const {\n width: availWidth,\n height: availHeight,\n padding\n } = context.availableSpace();\n const {\n top,\n left,\n bottom,\n right\n } = padding;\n const {\n isOffset\n } = spaceConfig;\n const {\n showAxisName,\n labels\n } = context.renderConfig();\n const {\n rotation\n } = labels;\n const {\n fixedBaseline,\n axisNamePadding,\n tickValues\n } = config;\n const {\n tickDimensions,\n allTickDimensions,\n axisNameDimensions,\n tickSize\n } = context.getAxisDimensions();\n const {\n height: tickDimHeight,\n width: tickDimWidth\n } = tickDimensions;\n\n const namePadding = showAxisName ? axisNamePadding : 0;\n const labelConfig = { smartTicks: true, rotation: labels.rotation };\n const minTickDistance = context._minTickDistance;\n const minTickSpace = context._minTickSpace;\n const minDiff = context._minDiff;\n const domain = context.domain();\n const axisNameHeight = axisNameDimensions.height;\n const minWidthBetweenTicks = minTickDistance.width;\n const minTickWidth = minTickSpace.width;\n const minTickHeight = minTickSpace.height;\n\n return {\n [TIME]: {\n x: () => {\n !tickValues && context.applyTickSkipping();\n const noOfTicks = context.getTickValues().length;\n\n // Get the Tick Interval\n tickInterval = ((availWidth - (noOfTicks - 1) * (minWidthBetweenTicks)) / noOfTicks);\n\n // Get height for ticks\n heightForTicks = availHeight - axisNameHeight - tickSize - namePadding;\n\n if (tickInterval < minTickWidth && rotation !== 0) {\n // set smart ticks and rotation config\n labelConfig.rotation = labels.rotation === null ? -90 : rotation;\n // Remove ticks if not enough height\n if (tickInterval < minTickHeight) {\n heightForTicks = availHeight;\n tickInterval = minTickHeight;\n context.renderConfig({ showInnerTicks: false, showOuterTicks: false });\n }\n }\n if (availHeight < axisNameHeight) {\n context.renderConfig({ show: false });\n }\n\n const tickShifter = Math.min(tickInterval, tickDimWidth);\n // set range for axis\n setAxisRange(context, 'y', getAdjustedRange(minDiff, [tickShifter / 2,\n availWidth - left - right - tickShifter / 2], domain, config),\n isOffset ? availHeight : null);\n\n context.maxTickSpaces({\n width: tickInterval,\n height: heightForTicks,\n noWrap: rotation !== null\n });\n\n return labelConfig;\n },\n y: () => {\n let widthForTicks = availWidth;\n const tickShifter = tickDimHeight / 2;\n\n setAxisRange(context, 'x', getAdjustedRange(minDiff,\n [availHeight - top - bottom - tickShifter, tickShifter], domain, config),\n isOffset ? availWidth : null);\n\n if ((availWidth - axisNameHeight - namePadding) <= minWidthBetweenTicks) {\n widthForTicks = 0;\n context.renderConfig({ showInnerTicks: false, showOuterTicks: false });\n }\n\n context.maxTickSpaces({\n width: widthForTicks,\n height: availHeight,\n noWrap: true\n });\n if (availWidth < axisNameHeight) {\n context.renderConfig({ show: false });\n }\n return labelConfig;\n }\n },\n [BAND]: {\n x: () => {\n setAxisRange(context, 'y', [0, availWidth - left - right], isOffset ? availHeight : null);\n const range = context.range();\n\n // Get Tick Interval\n tickInterval = ((range[1] - range[0]) / (tickValues || domain).length) - minWidthBetweenTicks * 2;\n\n // Get height available for ticks\n heightForTicks = availHeight - axisNameHeight - tickSize - namePadding;\n\n if (tickInterval < minTickWidth && rotation !== 0) {\n // set smart ticks and rotation config\n labelConfig.rotation = rotation === null ? -90 : rotation;\n labelConfig.smartTicks = false;\n\n // Ticks with overlapping height\n if (tickInterval < minTickHeight) {\n heightForTicks = 0;\n tickInterval = 0;\n context.renderConfig({ showInnerTicks: false, showOuterTicks: false });\n context.range([minTickHeight / 2, availWidth - minTickHeight / 2]);\n }\n } else if (tickValues) {\n const interval = (availWidth / domain.length) - minWidthBetweenTicks;\n if (interval < minTickWidth) {\n context.range([minTickHeight / 2, availWidth - minTickHeight / 2]);\n }\n }\n if (availHeight < axisNameHeight) {\n context.renderConfig({ show: false, showInnerTicks: false, showOuterTicks: false });\n }\n\n context.maxTickSpaces({\n width: tickInterval,\n height: heightForTicks,\n noWrap: rotation !== null\n });\n return labelConfig;\n },\n y: () => {\n setAxisRange(context, 'x', [availHeight - bottom, top], isOffset ? availWidth : null);\n\n let widthForTicks = availWidth - axisNameHeight - tickSize - namePadding;\n if (widthForTicks <= minWidthBetweenTicks) {\n widthForTicks = 0;\n context.renderConfig({ showInnerTicks: false, showOuterTicks: false });\n }\n\n context.maxTickSpaces({\n width: widthForTicks,\n height: availHeight,\n noWrap: true\n });\n if (availWidth < axisNameHeight) {\n context.renderConfig({ show: false });\n }\n return labelConfig;\n }\n },\n [LINEAR]: {\n x: () => {\n labelConfig.smartTicks = false;\n const tickShifter = tickDimWidth / 2;\n\n const baseline = fixedBaseline ? 0 : tickShifter;\n\n setAxisRange(context, 'y', [baseline + left, availWidth - right - tickShifter],\n isOffset ? availHeight : null);\n\n const range = context.range();\n\n // Get Tick widths and available space\n const totalTickWidth = allTickDimensions.length * (tickDimWidth + minWidthBetweenTicks);\n const availableWidth = range[1] - range[0];\n\n // Rotate labels if not enough width\n if (availableWidth < totalTickWidth && labels.rotation !== null) {\n if (availHeight - tickDimWidth - namePadding - tickSize > axisNameHeight) {\n labelConfig.rotation = null;\n context.renderConfig({\n showInnerTicks: true,\n showAxisName: true\n });\n } else {\n labelConfig.rotation = -90;\n context.renderConfig({\n showInnerTicks: true,\n showAxisName: false\n\n });\n }\n }\n\n if (availHeight < axisNameHeight) {\n context.renderConfig({ show: false });\n }\n return labelConfig;\n },\n y: () => {\n labelConfig.smartTicks = false;\n const tickShifter = tickDimensions.height / 2;\n const baseline = fixedBaseline ? 1 : tickShifter;\n\n setAxisRange(context, 'x', [availHeight - bottom - baseline, tickShifter + top],\n isOffset ? availWidth : null);\n\n // Remove display of ticks if no space is left\n if (availWidth < tickDimWidth + axisNameHeight + namePadding) {\n context.renderConfig({ showInnerTicks: false });\n if (availWidth < axisNameHeight) {\n context.renderConfig({ show: false });\n }\n }\n return labelConfig;\n }\n }\n };\n};\n","import { defaultValue } from 'muze-utils';\nimport { TOP, LEFT, BOTTOM } from '../enums/axis-orientation';\nimport { MIN_NO_OF_TICKS, DEFAULT_NO_OF_TICKS } from '../enums/constants';\nimport { setAxisRange, getAdjustedRange } from './space-setter';\n\nexport const getRotatedSpaces = (rotation = 0, width, height) => {\n let rotatedHeight = height;\n let rotatedWidth = width;\n if (rotation) {\n const angle = ((rotation || 0) * Math.PI) / 180;\n rotatedWidth = Math.abs(height * Math.sin(angle)) + Math.abs(width * Math.cos(angle));\n rotatedHeight = Math.abs(width * Math.sin(angle)) + Math.abs(height * Math.cos(angle));\n }\n return { width: rotatedWidth, height: rotatedHeight };\n};\n\nexport const setOffset = (context) => {\n let x = 0;\n let y = 0;\n const logicalSpace = context.logicalSpace();\n const config = context.config();\n const {\n orientation,\n xOffset,\n yOffset\n } = config;\n if (orientation === LEFT) {\n x = xOffset === undefined ? logicalSpace.width : xOffset;\n }\n if (orientation === TOP) {\n y = yOffset === undefined ? logicalSpace.height : yOffset;\n }\n context.renderConfig({ xOffset: x, yOffset: y });\n};\n\nexport const getNumberOfTicks = (availableSpace, labelDim, axis, axisInstance) => {\n let numberOfValues = 0;\n let tickValues = [];\n let { numberOfTicks } = axisInstance.config();\n const ticks = axis.scale().ticks();\n const tickLength = ticks.length;\n const minTickDistance = axisInstance._minTickDistance.width;\n\n numberOfValues = tickLength;\n\n if (tickLength * (labelDim + minTickDistance) > availableSpace) {\n numberOfValues = Math.floor(availableSpace / (labelDim + minTickDistance));\n }\n\n numberOfTicks = numberOfTicks || numberOfValues;\n numberOfValues = Math.min(numberOfTicks, Math.max(MIN_NO_OF_TICKS, numberOfValues));\n\n tickValues = axis.scale().ticks(numberOfValues);\n\n if (tickValues.length > numberOfValues) {\n tickValues = tickValues.filter((e, i) => i % 2 === 0);\n }\n\n if (numberOfValues === MIN_NO_OF_TICKS) {\n tickValues = axis.scale().ticks(DEFAULT_NO_OF_TICKS);\n tickValues = [tickValues[0], tickValues[tickValues.length - 1]];\n }\n return tickValues;\n};\n\nexport const getAxisComponentDimensions = (context) => {\n let largestTick = '';\n let largestTickDimensions = { width: 0, height: 0 };\n let smartTick = {};\n let axisTicks;\n const allTickDimensions = [];\n const scale = context.scale();\n const { tickValues, showAxisName } = context.renderConfig();\n const { name } = context.config();\n const { labelManager } = context.dependencies();\n const labelFunc = scale.ticks || scale.quantile || scale.domain;\n\n // set the style on the shared label manager instance\n labelManager.setStyle(context._tickLabelStyle);\n\n // get the values along the domain\n axisTicks = tickValues || labelFunc();\n\n // Get the tick labels\n axisTicks = axisTicks.map((originalLabel, i) => {\n const label = context.getFormattedText(originalLabel, i, axisTicks);\n\n // convert to string for quant values\n const tickDimensions = labelManager.getOriSize(label);\n\n // Get spaces for all labels\n allTickDimensions.push(tickDimensions);\n\n // Getting largest label\n if (tickDimensions.width > largestTickDimensions.width) {\n largestTick = label;\n smartTick = context.smartTicks() ? context.smartTicks()[i] : {};\n\n largestTickDimensions = tickDimensions;\n smartTick = smartTick || tickDimensions;\n }\n return label;\n });\n\n labelManager.setStyle(context._axisNameStyle);\n const axisNameDimensions = showAxisName ? labelManager.getOriSize(name) : { width: 0, height: 0 };\n\n return {\n axisNameDimensions,\n largestTick,\n largestTickDimensions,\n allTickDimensions,\n axisTicks,\n smartTick,\n tickSize: context.getTickSize()\n };\n};\n\nexport const computeAxisDimensions = (context) => {\n let tickDimensions = {};\n const { labels } = context.renderConfig();\n const { smartTicks, rotation } = labels;\n const {\n largestTickDimensions,\n axisTicks,\n smartTick,\n axisNameDimensions,\n allTickDimensions,\n tickSize\n } = getAxisComponentDimensions(context);\n const { height: labelHeight, width: labelWidth } = largestTickDimensions;\n\n // get the domain of axis\n const domain = context.domain();\n // const angle = ((rotation || 0) * Math.PI) / 180;\n\n if (domain.length === 0) {\n return null;\n }\n\n if (smartTicks) {\n tickDimensions = smartTick;\n } else {\n tickDimensions = { width: labelWidth, height: labelHeight };\n }\n tickDimensions = getRotatedSpaces(rotation, tickDimensions.width, tickDimensions.height);\n\n if (tickSize === 0) {\n tickDimensions = { width: 0, height: 0 };\n }\n return {\n allTickDimensions,\n tickSize,\n tickDimensions,\n axisNameDimensions,\n largestTickDimensions,\n axisTicks\n };\n};\n\n/**\n *\n *\n * @param {*} axisDimensions\n * @param {*} config\n * @param {*} range\n *\n */\nexport const getHorizontalAxisSpace = (context, axisDimensions, range) => {\n let width;\n let height;\n const domain = context.domain();\n const minTickDistance = context._minTickDistance.width;\n const { tickSize, tickDimensions, axisNameDimensions } = axisDimensions;\n const { axisNamePadding, tickValues } = context.config();\n const { showAxisName } = context.renderConfig();\n const { height: axisDimHeight } = axisNameDimensions;\n const { height: tickDimHeight, width: tickDimWidth } = tickDimensions;\n\n width = range && range.length ? range[1] - range[0] : ((tickDimWidth + minTickDistance) * 3);\n\n height = 0;\n if (tickValues) {\n const minTickDiff = context.getMinTickDifference();\n const [min, max] = [\n Math.min(...tickValues, ...domain),\n Math.max(...tickValues, ...domain)\n ];\n\n width = ((max - min) / Math.abs(minTickDiff)) * (tickDimWidth + context._minTickDistance.width);\n }\n if (!width || width === 0) {\n height = Math.max(tickDimWidth, tickDimHeight);\n } else {\n height = tickDimHeight;\n }\n\n height += (showAxisName ? axisDimHeight + axisNamePadding : 0) + tickSize;\n\n return {\n width,\n height\n };\n};\n\n/**\n *\n *\n * @param {*} axisDimensions\n * @param {*} config\n * @param {*} range\n *\n */\nexport const getVerticalAxisSpace = (context, axisDimensions) => {\n let height;\n let width;\n const domain = context.domain();\n const { tickSize, tickDimensions, axisNameDimensions } = axisDimensions;\n const { axisNamePadding, tickValues } = context.config();\n const { showAxisName } = context.renderConfig();\n const { height: axisDimHeight } = axisNameDimensions;\n const { height: tickDimHeight, width: tickDimWidth } = tickDimensions;\n\n height = 0;\n width = tickDimWidth;\n if (tickValues) {\n const minTickDiff = context.getMinTickDifference();\n const [min, max] = [\n Math.min(...tickValues, ...domain),\n Math.max(...tickValues, ...domain)\n ];\n\n height = ((max - min) / Math.abs(minTickDiff)) * tickDimHeight;\n }\n width += (showAxisName ? axisDimHeight : 0) + tickSize + axisNamePadding;\n\n return {\n height,\n width\n };\n};\n\n/**\n * Calculates the logical space of the axis\n * @return {Object} Width and height occupied by the axis.\n */\nexport const calculateBandSpace = (context) => {\n const range = context.range();\n const axisDimensions = context.getAxisDimensions();\n\n const { orientation } = context.config();\n const { show } = context.renderConfig();\n const { largestTickDimensions, axisTicks, allTickDimensions } = axisDimensions;\n const { height: largestDimHeight } = largestTickDimensions;\n const minTickWidth = context._minTickDistance.width;\n if (orientation === TOP || orientation === BOTTOM) {\n let {\n width,\n height\n } = getHorizontalAxisSpace(context, axisDimensions, range);\n\n if (!width || width === 0) {\n width = allTickDimensions.reduce((t, n) =>\n t + Math.min(n.width, n.height) + minTickWidth, 0);\n }\n if (show === false) {\n height = 0;\n width = 0;\n }\n\n return {\n width,\n height\n };\n }\n\n let {\n width,\n height\n } = getVerticalAxisSpace(context, axisDimensions, range);\n\n if (!height || height === 0) {\n height = axisTicks.length * (largestDimHeight + context._minTickDistance.height);\n }\n if (show === false) {\n width = 0;\n }\n return {\n width,\n height\n };\n};\n\n/**\n * Calculates the logical space of the axis\n * @return {Object} Width and height occupied by the axis.\n */\nexport const calculateContinousSpace = (context) => {\n const range = context.range();\n const axisDimensions = context.getAxisDimensions();\n const { orientation } = context.config();\n const { show, showAxisName } = context.renderConfig();\n const { axisNameDimensions } = axisDimensions;\n\n if (show === false) {\n return {\n width: 0,\n height: 0\n };\n }\n\n const { width: axisNameWidth } = axisNameDimensions;\n\n if (orientation === TOP || orientation === BOTTOM) {\n const {\n width,\n height\n } = getHorizontalAxisSpace(context, axisDimensions, range);\n const axisWidth = Math.max(width, axisNameWidth);\n\n return {\n width: axisWidth,\n height\n };\n }\n const {\n width,\n height\n } = getVerticalAxisSpace(context, axisDimensions, range);\n\n const effHeight = Math.max(height, showAxisName ? axisNameWidth : 0);\n\n return {\n width,\n height: effHeight\n };\n};\n\n/**\n * Overwrites domain with user defined domain (if present)\n * @param {Object} context reference to current axes\n * @param {Array} domain default domain\n *\n * @return {Array} domain\n */\nexport const getValidDomain = (context, domain) => {\n const { domain: userDom } = context.config();\n\n if (userDom) {\n domain = userDom;\n }\n\n return defaultValue(domain, []);\n};\n\nexport const setContinousAxisDomain = (context, domain) => {\n const { nice } = context.config();\n const scale = context.scale.bind(context);\n\n scale().domain(domain);\n nice && scale().nice();\n context._domain = scale().domain();\n};\n\n/**\n * Checks if any of the properties have changed between two objects\n * @param {Object} obj first object\n * @param {Object} obj1 second object\n * @param {Array} properties properties to be compared between two objects\n *\n * @return {Boolean} boolean value\n */\nexport const hasAxesConfigChanged = (obj = {}, obj1 = {}, properties) => {\n if (!Object.keys(obj).length || !Object.keys(obj1).length) {\n return false;\n }\n return properties.some(key => obj[key] !== obj1[key]);\n};\n\nexport const resetTickInterval = (context, domain) => {\n const {\n orientation,\n isOffset\n } = context.config();\n\n const minDiff = context._minDiff;\n // Set available space on interaction\n if (context.range().length && (orientation === TOP || orientation === BOTTOM)) {\n context.applyTickSkipping();\n const {\n largestTickDimensions\n } = context.getAxisDimensions();\n\n const noOfTicks = context.getTickValues().length;\n\n const { width, height, padding } = context.availableSpace();\n const {\n left,\n right\n } = padding;\n // Get the Tick Interval\n const tickInterval = Math.min(largestTickDimensions.width,\n ((width - (noOfTicks - 1) * (context._minTickDistance.width)) / noOfTicks));\n\n context.maxTickSpaces({\n width: tickInterval\n });\n\n const adjustedRange = getAdjustedRange(minDiff, [tickInterval / 2,\n width - left - right - tickInterval / 2], domain, context.config());\n\n // set range for axis\n setAxisRange(context, 'y', adjustedRange, isOffset ? height : null);\n\n context.setTickConfig();\n }\n};\n\nexport const getSmartAxisName = (name, width, labelManager) => {\n const oriSize = labelManager.getOriSize(name);\n\n labelManager.useEllipsesOnOverflow(true);\n\n return labelManager.getSmartText(name, width, oriSize.height, true);\n};\n","import { mergeRecursive } from 'muze-utils';\nimport { hasAxesConfigChanged } from './helper';\n\nexport const PROPS = {\n availableSpace: {},\n axisDimensions: {},\n axisComponentDimensions: {},\n config: {\n sanitization: (context, value) => {\n const oldConfig = Object.assign({}, context._config || {});\n const mockedOldConfig = mergeRecursive({}, oldConfig);\n value = mergeRecursive(mockedOldConfig, value);\n\n value.axisNamePadding = Math.max(value.axisNamePadding, 0);\n const shouldAxesScaleUpdate = hasAxesConfigChanged(\n value, oldConfig, ['interpolator', 'exponent', 'base', 'orientation']\n );\n const tickFormatter = context.sanitizeTickFormatter(value);\n\n if (shouldAxesScaleUpdate) {\n context._scale = context.createScale(value);\n context._axis = context.createAxis(value);\n }\n\n context._tickFormatter = ticks => tickFormatter(ticks);\n\n context.resetRenderConfig(value);\n return value;\n }\n },\n renderConfig: {\n sanitization: (context, value) => {\n const oldConfig = Object.assign({}, context._renderConfig || {});\n value = mergeRecursive(oldConfig, value);\n return value;\n }\n },\n logicalSpace: {},\n mount: {\n },\n range: {\n sanitization: (context, value) => {\n context.scale().range(value);\n context.logicalSpace(null);\n return value;\n }\n },\n\n smartTicks: {},\n tickSize: {},\n maxTickSpaces: {\n sanitization: (context, value) => {\n const oldConfig = Object.assign({}, context._maxTickSpaces || {});\n value = mergeRecursive(oldConfig, value);\n return value;\n }\n },\n valueParser: {\n defaultValue: val => val\n }\n};\n","import {\n mergeRecursive,\n getSmartComputedStyle,\n selectElement,\n generateGetterSetters,\n getUniqueId\n} from 'muze-utils';\nimport { createScale } from '../scale-creator';\nimport { axisOrientationMap, BOTTOM, TOP } from '../enums/axis-orientation';\nimport { defaultConfig } from './default-config';\nimport { renderAxis } from '../axis-renderer';\nimport { spaceSetter } from './space-setter';\nimport {\n getAxisComponentDimensions,\n computeAxisDimensions,\n calculateContinousSpace,\n setOffset,\n getValidDomain,\n getSmartAxisName\n} from './helper';\nimport { PROPS } from './props';\n\nexport default class SimpleAxis {\n\n /**\n * Creates an instance of SimpleAxis.\n * @memberof SimpleAxis\n */\n constructor (config, dependencies) {\n this._id = getUniqueId();\n\n this._dependencies = dependencies;\n this._mount = null;\n this._range = [];\n this._domain = [];\n this._domainLock = false;\n this._axisDimensions = {};\n this._smartTicks = [];\n\n const defCon = mergeRecursive({}, this.constructor.defaultConfig());\n const simpleConfig = mergeRecursive(defCon, config);\n\n const bodyElem = selectElement('body');\n const classPrefix = simpleConfig.classPrefix;\n this._tickLabelStyle = getSmartComputedStyle(bodyElem, `${classPrefix}-ticks`);\n this._axisNameStyle = getSmartComputedStyle(bodyElem, `${classPrefix}-axis-name`);\n\n dependencies.labelManager.setStyle(this._tickLabelStyle);\n const dist = dependencies.labelManager.getOriSize('w');\n\n this._minTickDistance = { width: dist.width * 3 / 4, height: dist.height / 2 };\n this._minTickSpace = dependencies.labelManager.getOriSize('www');\n\n generateGetterSetters(this, PROPS);\n this.config(simpleConfig);\n\n this._scale = this.createScale(this._config);\n this._axis = this.createAxis(this._config);\n this._animationDonePromises = [];\n }\n\n /**\n * Returns the default configuration of simple axis\n * @return {Object} default configurations\n */\n static defaultConfig () {\n return defaultConfig;\n }\n\n /**\n * Sets a fixed baseline for the first ticks so that they can render effectively within\n * the given area\n *\n * @param {*} tickText\n * @param {*} config\n * @param {*} labelManager\n */\n setFixedBaseline () {\n return this;\n }\n\n /**\n *\n *\n * @readonly\n * @memberof SimpleAxis\n */\n scale (...params) {\n if (params.length) {\n this._scale = params[0];\n return this;\n }\n return this._scale;\n }\n\n resetDomain () {\n this._domain = [];\n return this;\n }\n\n /**\n *\n *\n * @readonly\n * @memberof SimpleAxis\n */\n axis (...params) {\n if (params.length) {\n this._axis = params[0];\n return this;\n }\n return this._axis;\n }\n\n /**\n *\n *\n * @param {*} d\n *\n * @memberof SimpleAxis\n */\n domain (...domain) {\n if (domain.length) {\n const domainValue = getValidDomain(this, domain[0]);\n this.scale().domain(domainValue);\n this._domain = this.scale().domain();\n this.setAxisComponentDimensions();\n this.logicalSpace(null);\n return this;\n }\n return this._domain;\n }\n\n setAxisComponentDimensions () {\n this.axisComponentDimensions(getAxisComponentDimensions(this));\n }\n\n /**\n *\n *\n *\n * @memberof SimpleAxis\n */\n dependencies () {\n return this._dependencies;\n }\n\n /**\n *\n *\n *\n * @memberof SimpleAxis\n */\n createScale (config) {\n const {\n base,\n padding,\n interpolator,\n exponent\n } = config;\n const range = this.range();\n const scale = createScale({\n padding,\n interpolator,\n exponent,\n base,\n range,\n type: this.constructor.type()\n });\n\n return scale;\n }\n\n sanitizeTickFormatter (value) {\n const { tickFormat, numberFormat } = value;\n\n if (tickFormat) {\n return ticks => (val, i) => tickFormat(numberFormat(val), val, i, ticks);\n }\n\n return () => val => numberFormat(val);\n }\n\n resetRenderConfig (config) {\n const {\n labels,\n show,\n showInnerTicks,\n showOuterTicks,\n showAxisName,\n xOffset,\n yOffset,\n tickValues,\n smartAxisName\n } = config;\n this.renderConfig({\n labels,\n show,\n showInnerTicks,\n showOuterTicks,\n showAxisName,\n xOffset,\n yOffset,\n tickValues,\n smartAxisName\n });\n return this;\n }\n\n resetLogicalSpace () {\n this.logicalSpace(null);\n this.range([]);\n\n this.resetRenderConfig(this.config());\n }\n\n getFormattedText (text, index, axisTicks) {\n const formatter = this._tickFormatter;\n\n return formatter(axisTicks)(text, index);\n }\n\n /**\n *\n *\n *\n * @memberof SimpleAxis\n */\n createAxis (config) {\n const { orientation } = config;\n const axisClass = axisOrientationMap[orientation];\n\n if (axisClass) {\n const axis = axisClass(this.scale());\n return axis;\n }\n return null;\n }\n\n setTickValues (tickValues) {\n const renderConfig = this.renderConfig();\n this.config({ ...renderConfig, tickValues });\n this.tickValues = tickValues;\n this.axis().tickValues(tickValues);\n }\n\n /**\n * This method is used to set the space availiable to render\n * the SimpleCell.\n *\n * @param {number} width The width of SimpleCell.\n * @param {number} height The height of SimpleCell.\n * @memberof AxisCell\n */\n setAvailableSpace (width = 0, height, padding, isOffset) {\n let labelConfig = {};\n const {\n orientation\n } = this.config();\n\n this.availableSpace({ width, height, padding });\n const type = this.constructor.type();\n\n if (orientation === TOP || orientation === BOTTOM) {\n labelConfig = spaceSetter(this, { isOffset })[type].x();\n } else {\n labelConfig = spaceSetter(this, { isOffset })[type].y();\n }\n\n // Set config\n this.renderConfig({\n labels: labelConfig\n });\n this.setTickConfig();\n this.setSmartAxisName();\n return this;\n }\n\n setSmartAxisName () {\n const { orientation, name } = this.config();\n const dimType = (orientation === TOP || orientation === BOTTOM) ? 'width' : 'height';\n const widthDim = this.availableSpace()[dimType];\n const labelManager = this.dependencies().labelManager;\n labelManager.setStyle(this._axisNameStyle);\n this.renderConfig({\n smartAxisName: getSmartAxisName(name, widthDim, labelManager)\n });\n return this;\n }\n\n /**\n *\n *\n * @memberof SimpleAxis\n */\n setTickConfig () {\n return this;\n }\n\n getScaleValue (domainVal) {\n if (domainVal === null || domainVal === undefined) {\n return undefined;\n }\n return this.scale()(domainVal);\n }\n\n /**\n *\n *\n *\n * @memberof SimpleAxis\n */\n getTickSize () {\n return this.axis().tickSize();\n }\n\n /**\n * Gets the space occupied by the parts of an axis\n *\n * @return {Object} object with details about sizes of the axis.\n * @memberof SimpleAxis\n */\n getAxisDimensions (...params) {\n this.axisDimensions(computeAxisDimensions(this, ...params));\n return this.axisDimensions();\n }\n\n /**\n * Gets the space occupied by the axis\n *\n * @return {Object} object with details about size of the axis.\n * @memberof SimpleAxis\n */\n getLogicalSpace () {\n if (!this.logicalSpace()) {\n this.logicalSpace(calculateContinousSpace(this));\n }\n setOffset(this);\n\n return this.logicalSpace();\n }\n\n /**\n * Returns the value from the domain when given a value from the range.\n * @param {number} value Value from the range.\n * @return {number} Value\n */\n invert (value) {\n return this.scale().invert(value);\n }\n\n /**\n * Gets the nearest range value from the given range values.\n * @param {number} v1 Start range value\n * @param {number} v2 End range value\n *\n * @return {Array} range values\n */\n getNearestRange (v1, v2) {\n return [v1, v2];\n }\n\n invertExtent (v1, v2) {\n return [this.invert(v1), this.invert(v2)];\n }\n\n getMinTickDifference () {\n return this.domain();\n }\n\n getFormattedTickValues (tickValues) {\n return tickValues;\n }\n\n /**\n * This method returns the width in pixels for one\n * unit along the axis. It is only applicable to band scale\n * and returns undefined for other scale type.\n *\n * @return {number} the width of one band along band scale axis\n * @memberof SimpleAxis\n */\n getUnitWidth () {\n return 0;\n }\n\n /**\n * This method returns an object that can be used to\n * reconstruct this instance.\n *\n * @return {Object} the serializable props of axis\n * @memberof SimpleAxis\n */\n serialize () {\n return {\n name: this.name,\n type: this.type,\n range: this.range(),\n config: this.config()\n };\n }\n\n /**\n * Returns the id of the axis.\n * @return {string} Unique identifier of the axis.\n */\n get id () {\n return this._id;\n }\n\n /**\n * This method is used to render the axis inside\n * the supplied svg container.\n *\n * @param {SVGElement} svg the svg element in which to render the path\n * @memberof SimpleAxis\n */\n /* istanbul ignore next */render () {\n if (this.mount()) {\n this.setTickConfig();\n renderAxis(this);\n }\n return this;\n }\n\n /**\n *\n *\n *\n * @memberof SimpleAxis\n */\n remove () {\n selectElement(this.mount()).remove();\n return this;\n }\n\n /**\n *\n *\n * @memberof SimpleAxis\n */\n unsubscribe () {\n return this;\n }\n\n /**\n *\n *\n *\n * @memberof SimpleAxis\n */\n isReverse () {\n const range = this.range();\n return range[0] > range[1];\n }\n\n /**\n *\n *\n *\n * @memberof SimpleAxis\n */\n getPixelToValueRatio () {\n const scale = this.scale();\n const range = scale.range();\n const domain = scale.domain();\n\n return Math.abs(range[1] - range[0]) / (domain[1] - domain[0]);\n }\n\n /**\n * Notifies when all animations/transitions of the axis are completed.\n *\n * @public\n * @return {Promise} Returns a promise to notify the animation completion.\n */\n animationDone () {\n return Promise.all(this._animationDonePromises);\n }\n\n registerAnimationDoneHook () {\n let resolveFn;\n const promise = new Promise((resolve) => {\n resolveFn = resolve;\n });\n this._animationDonePromises.push(promise);\n\n return () => {\n resolveFn();\n };\n }\n}\n\n","import { sanitizeDomainWhenEqual } from 'muze-utils';\nimport { scaleMap } from '../../scale-creator';\n\nexport default class LinearInterpolator {\n\n createScale (config) {\n const {\n range\n } = config;\n const scaleFactory = scaleMap.linear;\n this._scale = scaleFactory().range(range);\n return this._scale;\n }\n\n getScaleValue (domainVal) {\n return this._scale(domainVal) + 0.5;\n }\n\n sanitizeDomain (domain) {\n if (domain.length) {\n domain = sanitizeDomainWhenEqual(domain);\n }\n return domain;\n }\n}\n","import { scaleMap } from '../../scale-creator';\n\nexport default class LogInterpolator {\n\n createScale (config) {\n const {\n range,\n base\n } = config;\n const scaleFactory = scaleMap.log;\n this._scale = scaleFactory().range(range).base(base);\n return this._scale;\n }\n\n getScaleValue (domainVal) {\n const scale = this._scale;\n if (domainVal <= 0) {\n return scale(scale.domain()[0]);\n }\n\n return scale(domainVal) + 0.5;\n }\n\n sanitizeDomain (domain) {\n if (domain[0] <= 0) {\n domain[0] = Math.max(1, domain[0]);\n }\n if (domain[1] <= 0) {\n domain[1] = Math.max(1, domain[1]);\n }\n return domain;\n }\n}\n","import { scaleMap } from '../../scale-creator';\n\nexport default class PowInterpolator {\n\n createScale (config) {\n const {\n range,\n exponent\n } = config;\n const scaleFactory = scaleMap.pow;\n this._scale = scaleFactory().range(range).exponent(exponent);\n return this._scale;\n }\n\n getScaleValue (domainVal) {\n return this._scale(domainVal) + 0.5;\n }\n\n sanitizeDomain (domain) {\n return domain;\n }\n}\n","import { getSmallestDiff } from 'muze-utils';\nimport SimpleAxis from './simple-axis';\nimport { BOTTOM, TOP, LEFT, RIGHT } from '../enums/axis-orientation';\nimport { LINEAR, LOG, POW } from '../enums/scale-type';\nimport { LogInterpolator, PowInterpolator, LinearInterpolator } from './interpolators';\nimport {\n getNumberOfTicks,\n getValidDomain,\n setContinousAxisDomain\n} from './helper';\n\nexport const interpolatorMap = {\n [LOG]: LogInterpolator,\n [POW]: PowInterpolator,\n [LINEAR]: LinearInterpolator\n};\n\nexport default class ContinousAxis extends SimpleAxis {\n constructor (config, dependencies) {\n config.tickFormat = config.tickFormat || (val => val);\n super(config, dependencies);\n }\n /**\n *\n *\n *\n * @memberof SimpleAxis\n */\n createScale (config) {\n const {\n base,\n padding,\n interpolator,\n exponent\n } = config;\n const range = this.range();\n const InterpolatorCls = interpolatorMap[interpolator];\n\n this._interpolator = new InterpolatorCls();\n let scale = this._interpolator.createScale({\n padding,\n exponent,\n base,\n range\n });\n\n scale = scale.nice();\n return scale;\n }\n\n /**\n *\n *\n * @static\n *\n * @memberof ContinousAxis\n */\n static type () {\n return LINEAR;\n }\n\n getScaleValue (domainVal) {\n if (domainVal === null || domainVal === undefined) {\n return undefined;\n }\n return this._interpolator.getScaleValue(domainVal);\n }\n /**\n *\n *\n *\n * @memberof SimpleAxis\n */\n getTickSize () {\n const {\n showInnerTicks,\n showOuterTicks\n } = this.renderConfig();\n const axis = this.axis();\n axis.tickSizeInner(showInnerTicks === false ? 0 : 6);\n axis.tickSizeOuter(showOuterTicks === false ? 0 : 6);\n\n return axis.tickSize();\n }\n\n /**\n *\n *\n * @param {*} d\n *\n * @memberof SimpleAxis\n */\n domain (...domain) {\n if (domain.length) {\n const domainVal = this._interpolator.sanitizeDomain(getValidDomain(this, domain[0]));\n setContinousAxisDomain(this, domainVal);\n this.setAxisComponentDimensions();\n this.logicalSpace(null);\n return this;\n }\n return this._domain;\n }\n\n /**\n * This method is used to set the space availiable to render\n * the SimpleCell.\n *\n * @param {number} width The width of SimpleCell.\n * @param {number} height The height of SimpleCell.\n * @memberof AxisCell\n */\n setAvailableSpace (...params) {\n super.setAvailableSpace(...params);\n this.getTickSize();\n return this;\n }\n\n /**\n *\n *\n * @param {*} tickValues\n *\n * @memberof SimpleAxis\n */\n setTickConfig () {\n const {\n tickValues,\n showInnerTicks\n } = this.renderConfig();\n const axis = this.axis();\n\n if (!showInnerTicks) {\n axis.tickValues([]);\n return this;\n }\n\n if (tickValues) {\n tickValues instanceof Array && this.axis().tickValues(tickValues);\n }\n const newTickValues = this.getTickValues();\n\n axis.tickValues(newTickValues);\n const smartLabel = this.dependencies().labelManager;\n smartLabel.setStyle(this._tickLabelStyle);\n const formatter = this._tickFormatter(newTickValues);\n const smartTicks = newTickValues.map((val, i) => {\n const text = formatter(val, i);\n const tickSpace = smartLabel.getOriSize(text);\n\n tickSpace.text = text;\n return tickSpace;\n });\n\n this.smartTicks(smartTicks);\n return this;\n }\n\n /**\n *\n *\n *\n * @memberof SimpleAxis\n */\n getTickValues () {\n let labelDim = 0;\n const {\n orientation\n\n } = this.config();\n const {\n tickValues\n } = this.renderConfig();\n const range = this.range();\n const axis = this.axis();\n\n const availableSpace = Math.abs(range[0] - range[1]);\n\n const labelProps = this.axisComponentDimensions().largestTickDimensions;\n\n if (tickValues) {\n return tickValues;\n }\n labelDim = labelProps[orientation === BOTTOM || orientation === TOP ? 'width' : 'height'];\n\n return getNumberOfTicks(availableSpace, labelDim, axis, this);\n }\n\n getMinTickDifference () {\n return getSmallestDiff(this.renderConfig().tickValues);\n }\n\n /**\n * Sets a fixed baseline for the first ticks so that they can render effectively within\n * the given area\n *\n * @param {*} tickText\n * @param {*} config\n * @param {*} labelManager\n */\n setFixedBaseline (tickText) {\n const {\n orientation\n } = this.config();\n const {\n labels\n } = this.renderConfig();\n\n const {\n rotation\n } = labels;\n const axis = this.axis();\n const ticks = axis.tickValues();\n const smartTicks = this.smartTicks();\n\n if (smartTicks && smartTicks.length) {\n const { width, height } = this.smartTicks()[0];\n\n axis.tickTransform((d) => {\n if (d === ticks[0]) {\n if ((orientation === LEFT || orientation === RIGHT)) {\n return `translate(0, -${(height) / 3}px)`;\n }\n\n if ((orientation === TOP || orientation === BOTTOM) && !rotation) {\n return `translate(${width / 2}px, ${0}px)`;\n }\n } return '';\n });\n }\n return tickText;\n }\n\n}\n","import SimpleAxis from './simple-axis';\nimport { BAND } from '../enums/scale-type';\nimport { calculateBandSpace, setOffset, getRotatedSpaces } from './helper';\n\nexport default class BandAxis extends SimpleAxis {\n /**\n *\n *\n * @static\n *\n * @memberof BandAxis\n */\n static type () {\n return BAND;\n }\n\n /**\n *\n *\n *\n * @memberof BandAxis\n */\n setTickConfig () {\n let smartTicks = '';\n let smartlabel;\n const domain = this.domain();\n const { labelManager } = this._dependencies;\n const { padding } = this.config();\n const { labels, tickValues } = this.renderConfig();\n const { height: availHeight, width: availWidth, noWrap } = this.maxTickSpaces();\n const { width, height } = getRotatedSpaces(labels.rotation, availWidth, availHeight);\n\n tickValues && this.axis().tickValues(tickValues);\n smartTicks = tickValues || domain;\n\n // set the style on the shared label manager instance\n labelManager.setStyle(this._tickLabelStyle);\n\n // Update padding between plots\n if (typeof padding === 'number') {\n const paddingNormalized = Math.min(1, Math.max(0, padding));\n this.scale().padding(paddingNormalized);\n }\n\n if (domain && domain.length) {\n const values = tickValues || domain;\n const tickFormatter = this._tickFormatter(values);\n smartTicks = values.map((d, i) => {\n labelManager.useEllipsesOnOverflow(true);\n\n smartlabel = labelManager.getSmartText(tickFormatter(d, i), width, height, noWrap);\n return labelManager.constructor.textToLines(smartlabel);\n });\n }\n this.smartTicks(smartTicks);\n return this;\n }\n\n /**\n * Gets the space occupied by the axis\n *\n * @return {Object} object with details about size of the axis.\n * @memberof SimpleAxis\n */\n getLogicalSpace () {\n if (!this.logicalSpace()) {\n this.logicalSpace(calculateBandSpace(this));\n }\n setOffset(this);\n\n return this.logicalSpace();\n }\n\n /**\n *\n *\n * @memberof BandAxis\n */\n getTickValues () {\n return this.axis().scale().domain();\n }\n\n formatTickValue (val) {\n return this.valueParser()(val);\n }\n\n sanitizeTickFormatter (value) {\n const { tickFormat } = value;\n\n if (tickFormat) {\n return ticks => (val, i) => tickFormat(this.formatTickValue(val), val, i, ticks);\n }\n return () => val => this.formatTickValue(val);\n }\n\n /**\n *\n *\n *\n * @memberof BandAxis\n */\n getUnitWidth () {\n return this.scale().bandwidth();\n }\n\n /**\n *\n *\n *\n * @memberof SimpleAxis\n */\n getTickSize () {\n const {\n showInnerTicks,\n showOuterTicks\n } = this.renderConfig();\n const axis = this.axis();\n\n axis.tickSizeInner(showInnerTicks ? 6 : 0);\n axis.tickSizeOuter(showOuterTicks ? 6 : 0);\n return axis.tickSize();\n }\n\n invertExtent (v1, v2) {\n return this.scale().invertExtent(v1, v2);\n }\n\n /**\n * Gets the nearest range value from the given range values.\n * @param {number} v1 Start range value\n * @param {number} v2 End range value\n * @return {Array} range values\n */\n getNearestRange (v1, v2) {\n const scale = this.scale();\n const range = scale.range();\n const reverse = range[0] > range[1];\n\n const extent = this.invertExtent(v1, v2);\n const p1 = scale(reverse ? extent[extent.length - 1] : extent[0]);\n const p2 = scale(reverse ? extent[0] : extent[extent.length - 1]) + scale.bandwidth();\n return [p1, p2];\n }\n}\n","import { getSmallestDiff } from 'muze-utils';\nimport SimpleAxis from './simple-axis';\nimport { TIME } from '../enums/scale-type';\nimport { calculateBandSpace, getRotatedSpaces, getValidDomain, setContinousAxisDomain, setOffset,\n resetTickInterval } from './helper';\nimport { applyTickSkipping } from './space-setter';\n\n/**\n *\n *\n * @export\n * @class TimeAxis\n * @extends {SimpleAxis}\n */\nexport default class TimeAxis extends SimpleAxis {\n\n constructor (...params) {\n super(...params);\n this._minDiff = Infinity;\n }\n\n /**\n *\n *\n * @param {*} range\n *\n * @memberof TimeAxis\n */\n createScale (range) {\n let scale = super.createScale(range);\n\n scale = scale.nice();\n return scale;\n }\n\n /**\n *\n *\n * @static\n *\n * @memberof TimeAxis\n */\n static type () {\n return TIME;\n }\n\n formatTickValue (val) {\n return this.scale().tickFormat()(val);\n }\n\n sanitizeTickFormatter (value) {\n const { tickFormat } = value;\n\n if (tickFormat) {\n return (ticks) => {\n const rawTicks = ticks.map(t => t.getTime());\n return (val, i) => tickFormat(this.formatTickValue(val), val.getTime(), i, rawTicks);\n };\n }\n return () => val => this.formatTickValue(val);\n }\n\n /**\n *\n *\n *\n * @memberof SimpleAxis\n */\n getTickSize () {\n const {\n showInnerTicks,\n showOuterTicks\n } = this.renderConfig();\n const axis = this.axis();\n axis.tickSizeInner(showInnerTicks === false ? 0 : 6);\n axis.tickSizeOuter(showOuterTicks === false ? 0 : 6);\n return super.getTickSize();\n }\n\n /**\n *\n *\n *\n * @memberof TimeAxis\n */\n getTickValues () {\n return this.renderConfig().tickValues || this.scale().ticks();\n }\n\n /**\n *\n *\n * @param {*} diff\n *\n * @memberof TimeAxis\n */\n minDiff (diff) {\n this._minDiff = Math.min(this._minDiff, diff);\n return this;\n }\n\n applyTickSkipping () {\n applyTickSkipping(this);\n }\n\n /**\n *\n *\n * @param {*} d\n *\n * @memberof SimpleAxis\n */\n domain (...domain) {\n if (domain.length) {\n const domainValue = getValidDomain(this, domain[0]);\n setContinousAxisDomain(this, domainValue);\n this.setAxisComponentDimensions();\n this.logicalSpace(null);\n\n resetTickInterval(this, domainValue);\n return this;\n }\n return this._domain;\n }\n\n /**\n * Gets the space occupied by the axis\n *\n * @return {Object} object with details about size of the axis.\n * @memberof SimpleAxis\n */\n getLogicalSpace () {\n if (!this.logicalSpace()) {\n this.logicalSpace(calculateBandSpace(this));\n }\n setOffset(this);\n\n return this.logicalSpace();\n }\n\n getMinTickDifference () {\n return getSmallestDiff(this.config().tickValues);\n }\n\n /**\n * This method is used to set the space availiable to render\n * the SimpleCell.\n *\n * @param {number} width The width of SimpleCell.\n * @param {number} height The height of SimpleCell.\n * @memberof AxisCell\n */\n setAvailableSpace (...params) {\n super.setAvailableSpace(...params);\n this.getTickSize();\n return this;\n }\n\n /**\n *\n *\n * @returns\n * @memberof BandAxis\n */\n setTickConfig () {\n let smartTicks;\n let smartlabel;\n\n const { labels, tickValues } = this.renderConfig();\n const { height: availHeight, width: availWidth, noWrap } = this.maxTickSpaces();\n const { labelManager } = this._dependencies;\n const domain = this.getTickValues();\n\n tickValues && this.axis().tickValues(tickValues);\n\n const { width, height } = getRotatedSpaces(labels.rotation, availWidth, availHeight);\n\n smartTicks = tickValues || domain;\n\n // set the style on the shared label manager instance\n labelManager.setStyle(this._tickLabelStyle);\n\n if (domain && domain.length) {\n const values = tickValues || domain;\n const tickFormatter = this._tickFormatter(values);\n smartTicks = values.map((d, i) => {\n labelManager.useEllipsesOnOverflow(true);\n\n smartlabel = labelManager.getSmartText(tickFormatter(d, i), width, height, noWrap);\n return labelManager.constructor.textToLines(smartlabel);\n });\n }\n\n this.smartTicks(smartTicks);\n return this;\n }\n}\n","export const x11Colors = {\n Pink: { hex: 'ffc0cb', rgb: '255,192,203' },\n LightPink: { hex: 'ffb6c1', rgb: '255,182,193' },\n HotPink: { hex: 'ff69b4', rgb: '255,105,180' },\n DeepPink: { hex: 'ff1493', rgb: '255,20,147' },\n PaleVioletRed: { hex: 'db7093', rgb: '219,112,147' },\n MediumVioletRed: { hex: 'c71585', rgb: '199,21,133' },\n LightSalmon: { hex: 'ffa07a', rgb: '255,160,122' },\n Salmon: { hex: 'fa8072', rgb: '250,128,114' },\n DarkSalmon: { hex: 'e9967a', rgb: '233,150,122' },\n LightCoral: { hex: 'f08080', rgb: '240,128,128' },\n IndianRed: { hex: 'cd5c5c', rgb: '205,92,92' },\n Crimson: { hex: 'dc143c', rgb: '220,20,60' },\n FireBrick: { hex: 'b22222', rgb: '178,34,34' },\n DarkRed: { hex: '8b0000', rgb: '139,0,0' },\n Red: { hex: 'ff0000', rgb: '255,0,0' },\n OrangeRed: { hex: 'ff4500', rgb: '255,69,0' },\n Tomato: { hex: 'ff6347', rgb: '255,99,71' },\n Coral: { hex: 'ff7f50', rgb: '255,127,80' },\n DarkOrange: { hex: 'ff8c00', rgb: '255,140,0' },\n Orange: { hex: 'ffa500', rgb: '255,165,0' },\n Gold: { hex: 'ffd700', rgb: '255,215,0' },\n Yellow: { hex: 'ffff00', rgb: '255,255,0' },\n LightYellow: { hex: 'ffffe0', rgb: '255,255,224' },\n LemonChiffon: { hex: 'fffacd', rgb: '255,250,205' },\n LightGoldenrodYellow: { hex: 'fafad2', rgb: '250,250,210' },\n PapayaWhip: { hex: 'ffefd5', rgb: '255,239,213' },\n Moccasin: { hex: 'ffe4b5', rgb: '255,228,181' },\n PeachPuff: { hex: 'ffdab9', rgb: '255,218,185' },\n PaleGoldenrod: { hex: 'eee8aa', rgb: '238,232,170' },\n Khaki: { hex: 'f0e68c', rgb: '240,230,140' },\n DarkKhaki: { hex: 'bdb76b', rgb: '189,183,107' },\n Cornsilk: { hex: 'fff8dc', rgb: '255,248,220' },\n BlanchedAlmond: { hex: 'ffebcd', rgb: '255,235,205' },\n Bisque: { hex: 'ffe4c4', rgb: '255,228,196' },\n NavajoWhite: { hex: 'ffdead', rgb: '255,222,173' },\n Wheat: { hex: 'f5deb3', rgb: '245,222,179' },\n BurlyWood: { hex: 'deb887', rgb: '222,184,135' },\n Tan: { hex: 'd2b48c', rgb: '210,180,140' },\n RosyBrown: { hex: 'bc8f8f', rgb: '188,143,143' },\n SandyBrown: { hex: 'f4a460', rgb: '244,164,96' },\n Goldenrod: { hex: 'daa520', rgb: '218,165,32' },\n DarkGoldenrod: { hex: 'b8860b', rgb: '184,134,11' },\n Peru: { hex: 'cd853f', rgb: '205,133,63' },\n Chocolate: { hex: 'd2691e', rgb: '210,105,30' },\n SaddleBrown: { hex: '8b4513', rgb: '139,69,19' },\n Sienna: { hex: 'a0522d', rgb: '160,82,45' },\n Brown: { hex: 'a52a2a', rgb: '165,42,42' },\n Maroon: { hex: '800000', rgb: '128,0,0' },\n DarkOliveGreen: { hex: '556b2f', rgb: '85,107,47' },\n Olive: { hex: '808000', rgb: '128,128,0' },\n OliveDrab: { hex: '6b8e23', rgb: '107,142,35' },\n YellowGreen: { hex: '9acd32', rgb: '154,205,50' },\n LimeGreen: { hex: '32cd32', rgb: '50,205,50' },\n Lime: { hex: '00ff00', rgb: '0,255,0' },\n LawnGreen: { hex: '7cfc00', rgb: '124,252,0' },\n Chartreuse: { hex: '7fff00', rgb: '127,255,0' },\n GreenYellow: { hex: 'adff2f', rgb: '173,255,47' },\n SpringGreen: { hex: '00ff7f', rgb: '0,255,127' },\n MediumSpringGreen: { hex: '00fa9a', rgb: '0,250,154' },\n LightGreen: { hex: '90ee90', rgb: '144,238,144' },\n PaleGreen: { hex: '98fb98', rgb: '152,251,152' },\n DarkSeaGreen: { hex: '8fbc8f', rgb: '143,188,143' },\n MediumSeaGreen: { hex: '3cb371', rgb: '60,179,113' },\n SeaGreen: { hex: '2e8b57', rgb: '46,139,87' },\n ForestGreen: { hex: '228b22', rgb: '34,139,34' },\n Green: { hex: '008000', rgb: '0,128,0' },\n DarkGreen: { hex: '006400', rgb: '0,100,0' },\n MediumAquamarine: { hex: '66cdaa', rgb: '102,205,170' },\n Aqua: { hex: '00ffff', rgb: '0,255,255' },\n Cyan: { hex: '00ffff', rgb: '0,255,255' },\n LightCyan: { hex: 'e0ffff', rgb: '224,255,255' },\n PaleTurquoise: { hex: 'afeeee', rgb: '175,238,238' },\n Aquamarine: { hex: '7fffd4', rgb: '127,255,212' },\n Turquoise: { hex: '40e0d0', rgb: '64,224,208' },\n MediumTurquoise: { hex: '48d1cc', rgb: '72,209,204' },\n DarkTurquoise: { hex: '00ced1', rgb: '0,206,209' },\n LightSeaGreen: { hex: '20b2aa', rgb: '32,178,170' },\n CadetBlue: { hex: '5f9ea0', rgb: '95,158,160' },\n DarkCyan: { hex: '008b8b', rgb: '0,139,139' },\n Teal: { hex: '008080', rgb: '0,128,128' },\n LightSteelBlue: { hex: 'b0c4de', rgb: '176,196,222' },\n PowderBlue: { hex: 'b0e0e6', rgb: '176,224,230' },\n LightBlue: { hex: 'add8e6', rgb: '173,216,230' },\n SkyBlue: { hex: '87ceeb', rgb: '135,206,235' },\n LightSkyBlue: { hex: '87cefa', rgb: '135,206,250' },\n DeepSkyBlue: { hex: '00bfff', rgb: '0,191,255' },\n DodgerBlue: { hex: '1e90ff', rgb: '30,144,255' },\n CornflowerBlue: { hex: '6495ed', rgb: '100,149,237' },\n SteelBlue: { hex: '4682b4', rgb: '70,130,180' },\n RoyalBlue: { hex: '4169e1', rgb: '65,105,225' },\n Blue: { hex: '0000ff', rgb: '0,0,255' },\n MediumBlue: { hex: '0000cd', rgb: '0,0,205' },\n DarkBlue: { hex: '00008b', rgb: '0,0,139' },\n Navy: { hex: '000080', rgb: '0,0,128' },\n MidnightBlue: { hex: '191970', rgb: '25,25,112' },\n Lavender: { hex: 'e6e6fa', rgb: '230,230,250' },\n Thistle: { hex: 'd8bfd8', rgb: '216,191,216' },\n Plum: { hex: 'dda0dd', rgb: '221,160,221' },\n Violet: { hex: 'ee82ee', rgb: '238,130,238' },\n Orchid: { hex: 'da70d6', rgb: '218,112,214' },\n Fuchsia: { hex: 'ff00ff', rgb: '255,0,255' },\n Magenta: { hex: 'ff00ff', rgb: '255,0,255' },\n MediumOrchid: { hex: 'ba55d3', rgb: '186,85,211' },\n MediumPurple: { hex: '9370db', rgb: '147,112,219' },\n BlueViolet: { hex: '8a2be2', rgb: '138,43,226' },\n DarkViolet: { hex: '9400d3', rgb: '148,0,211' },\n DarkOrchid: { hex: '9932cc', rgb: '153,50,204' },\n DarkMagenta: { hex: '8b008b', rgb: '139,0,139' },\n Purple: { hex: '800080', rgb: '128,0,128' },\n Indigo: { hex: '4b0082', rgb: '75,0,130' },\n DarkSlateBlue: { hex: '483d8b', rgb: '72,61,139' },\n SlateBlue: { hex: '6a5acd', rgb: '106,90,205' },\n MediumSlateBlue: { hex: '7b68ee', rgb: '123,104,238' },\n White: { hex: 'ffffff', rgb: '255,255,255' },\n Snow: { hex: 'fffafa', rgb: '255,250,250' },\n Honeydew: { hex: 'f0fff0', rgb: '240,255,240' },\n MintCream: { hex: 'f5fffa', rgb: '245,255,250' },\n Azure: { hex: 'f0ffff', rgb: '240,255,255' },\n AliceBlue: { hex: 'f0f8ff', rgb: '240,248,255' },\n GhostWhite: { hex: 'f8f8ff', rgb: '248,248,255' },\n WhiteSmoke: { hex: 'f5f5f5', rgb: '245,245,245' },\n Seashell: { hex: 'fff5ee', rgb: '255,245,238' },\n Beige: { hex: 'f5f5dc', rgb: '245,245,220' },\n OldLace: { hex: 'fdf5e6', rgb: '253,245,230' },\n FloralWhite: { hex: 'fffaf0', rgb: '255,250,240' },\n Ivory: { hex: 'fffff0', rgb: '255,255,240' },\n AntiqueWhite: { hex: 'faebd7', rgb: '250,235,215' },\n Linen: { hex: 'faf0e6', rgb: '250,240,230' },\n LavenderBlush: { hex: 'fff0f5', rgb: '255,240,245' },\n MistyRose: { hex: 'ffe4e1', rgb: '255,228,225' },\n Gainsboro: { hex: 'dcdcdc', rgb: '220,220,220' },\n LightGray: { hex: 'd3d3d3', rgb: '211,211,211' },\n Silver: { hex: 'c0c0c0', rgb: '192,192,192' },\n DarkGrey: { hex: 'a9a9a9', rgb: '169,169,169' },\n Grey: { hex: '808080', rgb: '128,128,128' },\n DimGrey: { hex: '696969', rgb: '105,105,105' },\n LightSlateGrey: { hex: '778899', rgb: '119,136,153' },\n SlateGrey: { hex: '708090', rgb: '112,128,144' },\n DarkSlateGrey: { hex: '2f4f4f', rgb: '47,79,79' },\n Black: { hex: '000000', rgb: '0,0,0' }\n};\n","import {\n LINEAR\n} from '../enums/constants';\n/**\n * Set of default colors\n */\nexport const palette = [\n '#086bb6',\n '#f37d45',\n '#f5ce02',\n '#67bda0',\n '#c54e4e',\n '#ae70af'\n];\n\nexport const DEFAULT_GRADIENT_COLOR = '#eaeaea';\n\nexport const DEFAULT_CONFIG = {\n range: palette,\n value: palette[0],\n step: false,\n stops: 5,\n type: LINEAR\n};\n","import { mergeRecursive, detectColor, hexToHsv, rgbToHsv } from 'muze-utils';\nimport { x11Colors } from './color-maps';\nimport { palette, DEFAULT_GRADIENT_COLOR } from './defaults';\nimport { LINEAR, RGB, HEX, HSL, HSLA } from '../enums/constants';\n\nexport const getHslString = hslArr => `hsla(${hslArr[0] * 360},${hslArr[1] * 100}%,${hslArr[2] * 100}%,\\\n${hslArr[3] || 1})`;\n\nexport const convertToXllString = baseString => (baseString.split(' ') || [])\n .reduce((x, e) => `${x}${e.charAt(0).toUpperCase()}${e.slice(1)}`, '');\n\nexport const getActualHslColor = (e, paletteColor) => {\n let color = '';\n if (typeof e === 'string') {\n e = e.replace(/ /g, '');\n e = e.toLowerCase();\n if (detectColor(e) === HSL || detectColor(e) === HSLA) {\n color = e.match(/(\\d+(\\.\\d+)?)/g);\n color = [color[0] / 360, color[1] / 100, color[2] / 100, color[3] || 1];\n } else if (detectColor(e) === HEX) {\n color = hexToHsv(e);\n } else if (detectColor(e) === RGB) {\n const col = e.substring(e.indexOf('(') + 1, e.lastIndexOf(')')).split(/,\\s*/);\n color = rgbToHsv(...col);\n } else if (x11Colors[convertToXllString(e)]) {\n color = rgbToHsv(...x11Colors[convertToXllString(e)].rgb.split(','));\n }\n } else if (!(e instanceof Array)) {\n color = rgbToHsv(paletteColor);\n } else {\n color = e;\n }\n return color;\n};\n\nexport const PROPS = {\n config: {\n sanitization: (context, config) => {\n const defCon = mergeRecursive({}, context.constructor.defaultConfig());\n if (config.type === LINEAR) {\n config.range = config.range || [defCon.range[0]];\n config.range = config.range.length > 1 ? config.range : [DEFAULT_GRADIENT_COLOR, ...config.range];\n }\n const oldConfig = mergeRecursive(defCon, context.config());\n const newConfig = mergeRecursive(oldConfig, config);\n\n if (newConfig.range instanceof Array) {\n newConfig.range = newConfig.range.map((e, i) => getActualHslColor(e, palette[i]));\n newConfig.stops = config.stops || newConfig.range.length;\n }\n newConfig.value = getActualHslColor(newConfig.value, newConfig.value);\n return newConfig;\n }\n },\n domain: {},\n scale: {},\n uniqueValues: {}\n};\n","import { InvalidAwareTypes, getObjProp } from 'muze-utils';\n\nexport const treatNullMeasures = (domainVal, scaledVal, minDomainScaledVal) => {\n if (domainVal instanceof InvalidAwareTypes) {\n return minDomainScaledVal;\n }\n return scaledVal;\n};\n\nexport const resolveAxisConfig = (propVal, defaultVal, context) => {\n const constructor = getObjProp(propVal, 'constructor');\n switch (constructor) {\n case Function:\n return propVal(defaultVal, context);\n case Array:\n return propVal;\n default:\n return defaultVal;\n }\n};\n","import { numberInterpolator, piecewiseInterpolator, hslInterpolator, sanitizeDomainWhenEqual } from 'muze-utils';\nimport { CONTINOUS, DISCRETE } from '../enums/constants';\nimport { LINEAR, SEQUENTIAL, ORDINAL, QUANTILE } from '../enums/scale-type';\nimport { getHslString } from './props';\nimport { treatNullMeasures } from '../helper';\n\nconst getStops = (domain, stops) => {\n let newStops = [];\n\n if (stops instanceof Array) {\n newStops = stops.slice().sort();\n newStops = [...new Set([domain[0], ...stops, domain[1]])].sort();\n } else {\n const interpolator = numberInterpolator()(...domain);\n for (let i = 0; i <= stops; i++) {\n newStops[i] = interpolator(i / stops);\n }\n }\n\n if (newStops[0] < domain[0]) {\n newStops.shift();\n }\n return { domain, newStops };\n};\n\nconst rangeStops = (newStopsLength, range) => {\n let newRange = [];\n const maxRangeLength = Math.min(range.length, 18);\n\n if (newStopsLength > maxRangeLength) {\n const interpolator = piecewiseInterpolator()(hslInterpolator(), range.map(e => getHslString(e)));\n for (let i = 0; i < newStopsLength; i++) {\n newRange[i] = interpolator(i / (newStopsLength - 1));\n }\n } else {\n newRange = range.slice(0, newStopsLength);\n }\n return { newRange };\n};\n\n/**\n*\n*\n* @param {*} domain\n*\n*/\nconst indexedDomain = (domain) => {\n const uniqueVals = domain;\n const retDomain = domain.map((d, i) => (i) / (domain.length - 1));\n return { domain: retDomain, uniqueVals, scaleDomain: [0, 1] };\n};\n\n/**\n *\n *\n * @param {*} domain\n *\n */\nconst indexedDomainMeasure = (domain, stops, range) => {\n const uniqueVals = domain;\n return { domain, uniqueVals, scaleDomain: [0, 1], range };\n};\n\n/**\n *\n *\n * @param {*} domain\n *\n */\nconst normalDomain = (domain, stops, range) => {\n const uniqueVals = domain;\n return { uniqueVals, domain, nice: true, range };\n};\n\n/**\n *\n *\n * @param {*} domain\n * @param {*} stops\n *\n */\nconst steppedDomain = (domain, stops, range) => {\n const { domain: uniqueVals, newStops } = getStops(domain, stops);\n const { newRange } = rangeStops(newStops.length - 1, range);\n\n return { uniqueVals, domain: newStops, nice: true, range: newRange };\n};\n\nconst continousSteppedDomain = (domain, stops, range) => {\n const { domain: uniqueVals, newStops } = getStops(sanitizeDomainWhenEqual(domain), range.length - 1);\n const hslRange = range.map(e => getHslString(e));\n return { uniqueVals, domain: newStops, nice: true, range: hslRange };\n};\n\n/**\n *\n *\n * @param {*} domainValue\n * @param {*} scale\n * @param {*} domain\n * @param {*} uniqueVals\n *\n */\nconst uniqueRange = (domainValue, scale, domain, uniqueVals) => {\n const index = uniqueVals.indexOf(domainValue);\n const numVal = domain[index];\n return scale(numVal);\n};\n\n/**\n *\n *\n * @param {*} domainValue\n * @param {*} scale\n * @param {*} domain\n *\n */\nconst indexedRange = (domainValue, scale, domain) => {\n const numVal = (domainValue - domain[0]) / (domain[domain.length - 1] - domain[0]);\n\n return treatNullMeasures(domainValue, scale(numVal), scale(0));\n};\n\n/**\n *\n *\n * @param {*} domainValue\n * @param {*} scale\n */\nconst normalRange = (domainValue, scale, domain) => treatNullMeasures(domainValue, scale(domainValue),\n scale(domain[0]));\n\n/**\n *\n *\n * @param {*} stops\n */\nconst strategies = () => ({\n [`${CONTINOUS}-${CONTINOUS}-${SEQUENTIAL}`]: {\n scale: SEQUENTIAL,\n domainRange: () => indexedDomainMeasure,\n value: () => indexedRange\n },\n [`${CONTINOUS}-${DISCRETE}-${SEQUENTIAL}`]: {\n scale: SEQUENTIAL,\n domainRange: () => indexedDomainMeasure,\n value: () => indexedRange\n },\n [`${DISCRETE}-${DISCRETE}-${SEQUENTIAL}`]: {\n scale: SEQUENTIAL,\n domainRange: () => indexedDomain,\n value: () => uniqueRange\n },\n [`${DISCRETE}-${DISCRETE}-${ORDINAL}`]: {\n scale: ORDINAL,\n domainRange: () => normalDomain,\n value: () => normalRange\n },\n [`${CONTINOUS}-${CONTINOUS}-${ORDINAL}`]: {\n scale: LINEAR,\n domainRange: () => continousSteppedDomain,\n value: () => normalRange\n },\n [`${CONTINOUS}-${DISCRETE}-${ORDINAL}`]: {\n scale: QUANTILE,\n domainRange: () => steppedDomain,\n value: () => normalRange\n\n }\n});\n\n/**\n *\n *\n * @param {*} domainType\n * @param {*} rangeType\n * @param {*} schemeType\n * @param {*} stops\n */\nexport const strategyGetter = (domainType, rangeType, schemeType) =>\n strategies()[`${domainType}-${rangeType}-${schemeType || ''}`];\n","/**\n * @module Axis\n * This file declares a class that is used to render an axis to add meaning to\n * plots.\n */\nimport { getUniqueId, generateGetterSetters, rgbToHsv } from 'muze-utils';\nimport { createScale, getScheme, getSchemeType } from '../scale-creator';\nimport { CONTINOUS, DISCRETE, COLOR } from '../enums/constants';\nimport { strategyGetter } from './color-strategy';\nimport { DEFAULT_CONFIG } from './defaults';\nimport { PROPS, getHslString, getActualHslColor } from './props';\n\n/**\n* This class is used to instantiate a SimpleAxis.\n* @class SimpleAxis\n*/\nexport default class ColorAxis {\n\n /**\n * Creates an instance of SimpleAxis.\n * @param {Object} config input parameters.\n * @param {Object | undefined} params.range Type of color range.\n * @param {string} params.name the label to show on axis.\n * @param {string} params.type The type of scale to handle.\n * @memberof ColorAxis\n */\n constructor (config) {\n generateGetterSetters(this, PROPS);\n this.config(config);\n\n this._domainType = this._config.type === 'linear' ? CONTINOUS : DISCRETE;\n this._rangeType = (this._config.type === 'linear' && !this._config.step) ? CONTINOUS : DISCRETE;\n\n this._schemeType = getSchemeType(this._config.range);\n\n this._colorStrategy = this.setColorStrategy(this._domainType, this._rangeType, this._schemeType);\n this._scale = this.createScale(this._colorStrategy);\n\n this._id = getUniqueId();\n\n this.updateDomain(config.domain);\n }\n\n /**\n *\n *\n * @static\n *\n * @memberof ColorAxis\n */\n static defaultConfig () {\n return DEFAULT_CONFIG;\n }\n\n /**\n *\n *\n * @static\n *\n * @memberof ColorAxis\n */\n static type () {\n return COLOR;\n }\n\n /**\n *\n *\n * @param {*} colorStrategy\n *\n * @memberof ColorAxis\n */\n createScale (colorStrategy) {\n const { range } = this.config();\n if (range && typeof (range) === 'string') {\n return getScheme(range);\n }\n return createScale({\n type: colorStrategy.scale,\n range\n });\n }\n\n /**\n *\n *\n * @param {*} domainType\n * @param {*} rangeType\n * @param {*} schemeType\n *\n * @memberof ColorAxis\n */\n setColorStrategy (domainType, rangeType, schemeType) {\n return strategyGetter(domainType, rangeType, schemeType);\n }\n\n /**\n *\n *\n * @param {*} domainVal\n *\n * @memberof ColorAxis\n */\n getHslString (hslColorArray) {\n return getHslString(hslColorArray);\n }\n /**\n *\n *\n * @param {*} domainVal\n *\n * @memberof ColorAxis\n */\n getColor (domainVal) {\n return this.getHslString(this.getRawColor(domainVal));\n }\n /**\n *\n *\n * @param {*} domainVal\n *\n * @memberof ColorAxis\n */\n getRawColor (domainVal) {\n if (this.domain() && domainVal !== undefined) {\n const scale = this.scale();\n const range = scale.range ? scale.range() : null;\n const color = this._colorStrategy.value(range)(domainVal, scale, this.domain(), this.uniqueValues());\n if (color) {\n if (typeof color === 'string') {\n const col = color.substring(color.indexOf('(') + 1, color.lastIndexOf(')')).split(/,\\s*/);\n return rgbToHsv(...col);\n }\n return [...color];\n }\n }\n return [...this.config().value];\n }\n\n /**\n *\n *\n * @param {*} [domain=[]]\n *\n * @memberof ColorAxis\n */\n updateDomain (domain = []) {\n if (domain.length) {\n const scale = this.scale();\n const range = scale.range ? scale.range() : null;\n const domainRangeFn = this._colorStrategy.domainRange();\n const scaleInfo = domainRangeFn(domain, this.config().stops, range);\n\n this.domain(scaleInfo.domain);\n scaleInfo.range && this.scale().range(scaleInfo.range);\n this.uniqueValues(scaleInfo.uniqueVals);\n this.scale().domain(scaleInfo.scaleDomain || this.domain());\n }\n return this;\n }\n\n /**\n * This method returns an object that can be used to\n * reconstruct this instance.\n *\n * @return {Object} the serializable props of axis\n * @memberof ShapeAxis\n */\n serialize () {\n return {\n type: this.constructor.type(),\n scale: this.scale(),\n domain: this.domain(),\n config: this.config()\n };\n }\n\n transformColor (color, transformationArr) {\n const h = color[0] * 360;\n const s = color[1] * 100;\n const l = color[2] * 100;\n const a = color[3] || 1;\n const newH = h + transformationArr[0];\n const newS = s + transformationArr[1];\n const newL = l + transformationArr[2];\n const newA = a + transformationArr[3] || 0;\n\n return { color: `hsla(${newH},${newS}%,${newL}%,${newA})`, hsla: [newH / 360, newS / 100, newL / 100, newA] };\n }\n\n /**\n * Returns the id of the axis.\n * @return {string} Unique identifier of the axis.\n */\n id () {\n return this._id;\n }\n\n getHslArray (color) {\n return getActualHslColor(color);\n }\n\n}\n","export const DEFAULT_CONFIG = {\n value: 36,\n range: [36, 1000]\n};\n","import { numberInterpolator, piecewiseInterpolator } from 'muze-utils';\nimport { CONTINOUS, DISCRETE } from '../enums/constants';\nimport { LINEAR, THRESHOLD } from '../enums/scale-type';\nimport { treatNullMeasures } from '../helper';\n\n/**\n *\n *\n * @param {*} domain\n *\n */\nconst indexedDomain = (domain) => {\n const uniqueVals = domain;\n const retDomain = domain.map((d, i) => (i) / (domain.length - 1));\n return { domain: retDomain, uniqueVals, scaleDomain: [0, 1] };\n};\n\n/**\n *\n *\n * @param {*} domain\n *\n */\nconst normalDomain = (domain) => {\n const uniqueVals = domain;\n return { uniqueVals, domain };\n};\n\n/**\n *\n *\n * @param {*} domain\n * @param {*} intervals\n *\n */\nconst steppedDomain = (domain, intervals) => {\n let newIntervals = [];\n if (intervals instanceof Array) {\n newIntervals = intervals.slice().sort();\n } else {\n const interpolator = numberInterpolator()(...domain);\n for (let i = 0; i < intervals; i++) {\n newIntervals[i] = interpolator(i / (intervals - 1));\n }\n }\n if (newIntervals[0] < domain[0]) {\n newIntervals.shift();\n }\n const retDomain = newIntervals;\n return { uniqueVals: newIntervals, domain: retDomain, nice: true };\n};\n\n/**\n *\n *\n * @param {*} domainValue\n * @param {*} scale\n * @param {*} domain\n * @param {*} uniqueVals\n *\n */\nconst discreteRange = (domainValue, scale, domain) => {\n const numVal = (domainValue - domain[0]) / (domain[domain.length - 1] - domain[0]);\n const interpolator = numberInterpolator()(...scale.range());\n return treatNullMeasures(domainValue, interpolator(numVal), interpolator(domain[0]));\n};\n\n/**\n *\n *\n * @param {*} domainValue\n * @param {*} scale\n * @param {*} domain\n *\n */\nconst pieceWiseRange = (domainValue, scale, domain, uniqueVals) => {\n const index = uniqueVals.indexOf(domainValue);\n const numVal = domain[index];\n const fn = piecewiseInterpolator()(numberInterpolator(), [...scale.range()]);\n return fn(numVal);\n};\n\n/**\n *\n *\n * @param {*} domainValue\n * @param {*} scale\n */\nconst normalRange = (domainValue, scale, domain) =>\n treatNullMeasures(domainValue, scale(domainValue), scale(domain[0]));\n\n/**\n *\n *\n * @param {*} intervals\n */\nconst strategies = {\n [`${DISCRETE}-${CONTINOUS}`]: {\n scale: LINEAR,\n domain: indexedDomain,\n range: pieceWiseRange\n },\n [`${CONTINOUS}-${CONTINOUS}`]: {\n scale: LINEAR,\n domain: normalDomain,\n range: normalRange\n },\n [`${CONTINOUS}-${DISCRETE}`]: {\n scale: THRESHOLD,\n domain: steppedDomain,\n range: discreteRange\n }\n};\n\n/**\n *\n *\n * @param {*} domainType\n * @param {*} rangeType\n * @param {*} schemeType\n * @param {*} intervals\n */\nexport const strategyGetter = (domainType, rangeType) =>\n strategies[`${domainType}-${rangeType}`];\n","export const PROPS = {\n config: {},\n domain: {\n sanitization: (context, value) => {\n context.scale().domain(value);\n return value;\n }\n },\n range: {},\n scale: {},\n uniqueValues: {}\n};\n","/**\n * @module Axis\n * This file declares a class that is used to render an axis to add meaning to\n * plots.\n */\nimport { getUniqueId, generateGetterSetters } from 'muze-utils';\nimport { createScale } from '../scale-creator';\nimport { DEFAULT_CONFIG } from './defaults';\nimport { SIZE, CONTINOUS, DISCRETE } from '../enums/constants';\nimport { strategyGetter } from './size-strategy';\nimport { PROPS } from './props';\n\n/**\n* This class is used to instantiate a SimpleAxis.\n* @class SimpleAxis\n*/\nexport default class SizeAxis {\n\n /**\n * Creates an instance of SimpleAxis.\n * @param {Object} config input parameters.\n * @memberof SizeAxis\n */\n constructor (config) {\n generateGetterSetters(this, PROPS);\n\n this._id = getUniqueId();\n this._config = Object.assign({}, this.constructor.defaultConfig(), config);\n // @todo: Will use configuration override using scale decorator\n this._domainType = this._config.type === 'linear' ? CONTINOUS : DISCRETE;\n this._rangeType = CONTINOUS;\n\n this._sizeStrategy = this.setStrategy(this._domainType, this._rangeType);\n this._scale = this.createScale(this._sizeStrategy);\n this._range = this._config.range;\n\n this.updateDomain(config.domain);\n }\n\n /**\n *\n *\n * @param {*} domainType\n * @param {*} rangeType\n * @param {*} schemeType\n *\n * @memberof ColorAxis\n */\n setStrategy (domainType, rangeType) {\n return strategyGetter(domainType, rangeType);\n }\n\n /**\n *\n *\n *\n * @memberof SizeAxis\n */\n createScale (strategy) {\n const {\n range\n } = this.config();\n return createScale({\n type: strategy.scale,\n range\n });\n }\n\n /**\n *\n *\n * @static\n *\n * @memberof ColorAxis\n */\n static defaultConfig () {\n return DEFAULT_CONFIG;\n }\n\n /**\n *\n *\n * @static\n *\n * @memberof ColorAxis\n */\n static type () {\n return SIZE;\n }\n\n /**\n *\n *\n * @param {*} domainVal\n *\n * @memberof SizeAxis\n */\n getSize (domainVal = 0) {\n let sizeVal = 1;\n const {\n value\n } = this.config();\n const scale = this.scale();\n const domain = this.domain() || [1, 1];\n\n if (!scale || domain[0] === domain[1]) {\n sizeVal = value;\n } else {\n return this._sizeStrategy.range(domainVal, scale, this.domain(), this.uniqueValues());\n }\n return sizeVal;\n }\n\n /**\n * This method is used to assign a domain to the axis.\n *\n * @param {Array} domain the domain of the scale\n * @memberof SizeAxis\n */\n updateDomain (domain) {\n if (domain) {\n const domainFn = this._sizeStrategy.domain;\n\n const domainInfo = domainFn(domain, this.config().intervals);\n\n this.domain(domainInfo.domain);\n this.uniqueValues(domainInfo.uniqueVals);\n\n this.scale().domain(domainInfo.scaleDomain || this.domain());\n }\n return this;\n }\n\n /**\n * This method returns an object that can be used to\n * reconstruct this instance.\n *\n * @return {Object} the serializable props of axis\n * @memberof ShapeAxis\n */\n serialize () {\n return {\n type: this.constructor.type(),\n scale: this.scale(),\n domain: this.domain(),\n range: this.range(),\n config: this.config()\n };\n }\n\n /**\n * Returns the id of the axis.\n * @return {string} Unique identifier of the axis.\n */\n id () {\n return this._id;\n }\n}\n","export const DEFAULT_CONFIG = {\n generator: null,\n value: 'circle',\n range: ['circle', 'diamond', 'star', 'cross', 'square', 'wye', 'triangle']\n};\n","export const PROPS = {\n config: {},\n domain: {},\n scale: {},\n uniqueValues: {},\n generator: {}\n};\n\n","/**\n * @module Axis\n * This file declares a class that is used to render an axis to add meaning to\n * plots.\n */\nimport { getUniqueId, getSymbol, generateGetterSetters, mergeRecursive, InvalidAwareTypes } from 'muze-utils';\nimport { createScale } from '../scale-creator';\nimport { DEFAULT_CONFIG } from './defaults';\nimport { SHAPE } from '../enums/constants';\nimport { shapeGenerator } from './helper';\nimport { PROPS } from './props';\n\n/**\n* This class is used to instantiate a SimpleAxis.\n* @class SimpleAxis\n*/\nexport default class ShapeAxis {\n /**\n * Creates an instance of SimpleAxis.\n * @param {Object} params input parameters.\n * @param {Object | undefined} params.range Type of color scheme.\n * @memberof ShapeAxis\n */\n constructor (config) {\n generateGetterSetters(this, PROPS);\n\n this._id = getUniqueId();\n this._config = Object.assign({}, this.constructor.defaultConfig());\n this._config = mergeRecursive(this._config, config);\n\n this._scale = createScale({\n type: 'ordinal',\n range: this._config.range\n });\n this.updateDomain(config.domain);\n }\n\n /**\n *\n *\n * @static\n *\n * @memberof ColorAxis\n */\n static defaultConfig () {\n return DEFAULT_CONFIG;\n }\n\n /**\n *\n *\n * @static\n *\n * @memberof ColorAxis\n */\n static type () {\n return SHAPE;\n }\n\n /**\n *\n *\n * @param {*} value\n *\n * @memberof ShapeAxis\n */\n getShape (value) {\n if (!this.scale() || !this.domain() || !value || value instanceof InvalidAwareTypes) {\n return this.config().value;\n }\n\n if (this._generatedShapes) {\n return this._generatedShapes[value];\n }\n\n const shapeType = this.scale()(value);\n if (shapeType === 'string') {\n return getSymbol(shapeType);\n }\n\n return shapeType;\n }\n\n /**\n * This method is used to assign a domain to the axis.\n *\n * @param {Array} domain the domain of the scale\n * @memberof ShapeAxis\n */\n updateDomain (domain = []) {\n if (domain.length) {\n this.uniqueValues(domain);\n this.domain(domain);\n this.scale().domain(domain);\n\n if (this.config().generator) {\n this._generatedShapes = shapeGenerator(domain, this.config().generator);\n }\n }\n return this;\n }\n\n /**\n * This method returns an object that can be used to\n * reconstruct this instance.\n *\n * @return {Object} the serializable props of axis\n * @memberof ShapeAxis\n */\n serialize () {\n return {\n type: this.constructor.type(),\n scale: this.scale(),\n domain: this.domain(),\n range: this.config().range,\n config: this.config()\n };\n }\n\n /**\n * Returns the id of the axis.\n * @return {string} Unique identifier of the axis.\n */\n id () {\n return this._id;\n }\n}\n","/**\n *\n *\n * @param {*} domain\n * @param {*} generatorFn\n *\n */\nexport const shapeGenerator = (domain, generatorFn) => {\n const generatedShapes = {};\n domain.forEach((value) => {\n generatedShapes[value] = generatorFn(value);\n });\n return generatedShapes;\n};\n","import { mergeRecursive } from 'muze-utils';\n\nexport const PROPS = {\n config: {\n sanitization: (context, config) => mergeRecursive(context.config(), config),\n preset: (context, config) => {\n const { range, domain } = config;\n range && context.range(range);\n domain && context.domain(domain);\n }\n },\n domain: {},\n range: {}\n};\n","/**\n * @module Axis\n * This file declares a class that is used to render an axis to add meaning to\n * plots.\n */\nimport { getUniqueId, Symbols, mergeRecursive, generateGetterSetters } from 'muze-utils';\nimport { createScale } from '../scale-creator';\nimport { DEFAULT_ANGLE_DOMAIN } from '../enums/constants';\nimport { PROPS } from './props';\nimport { resolveAxisConfig } from '../helper';\n\nconst { pie } = Symbols;\n\nconst createAngleValues = (context) => {\n const angleData = context._angleFn(context._domain);\n angleData.forEach((v) => {\n v.startAngle -= Math.PI / 2;\n v.endAngle -= Math.PI / 2;\n });\n context._angleValues = angleData.reduce((values, d) => {\n const key = d.data;\n !values[key] && (values[key] = []);\n values[key].push(d);\n return values;\n }, {});\n};\n\n/**\n* This class is used to instantiate a AngleAxis.\n* @class AngleAxis\n*/\nexport default class AngleAxis {\n\n /**\n * Creates an instance of AngleAxis.\n * @param {Object} config input parameters.\n * @memberof AngleAxis\n */\n constructor (config = {}) {\n this._id = getUniqueId();\n generateGetterSetters(this, PROPS);\n this._config = mergeRecursive({}, this.constructor.defaultConfig());\n this.config(config);\n this._range = [0, 360];\n this._angleFn = pie()\n .value(d => (typeof d === 'string' ? 1 : d))\n .sortValues(null);\n this._angleValues = {};\n }\n\n static defaultConfig () {\n return {};\n }\n\n createScale (strategy) {\n const {\n range\n } = this.config();\n return createScale({\n type: strategy.scale,\n range\n });\n }\n\n getScaleValue (domainVal) {\n return this._angleValues[domainVal];\n }\n\n padAngle (angle) {\n this._angleFn = this._angleFn.padAngle(angle);\n }\n\n domain (...domainVal) {\n if (domainVal.length) {\n const { domain: customDomain } = this.config();\n const domain = domainVal[0].length ? domainVal[0] : DEFAULT_ANGLE_DOMAIN;\n this._domain = resolveAxisConfig(customDomain, domain, this);\n createAngleValues(this);\n return this;\n }\n return this._domain;\n }\n\n range (...range) {\n if (range.length) {\n const { range: customRange } = this.config();\n this._range = resolveAxisConfig(customRange, range[0], this);\n const domain = this.domain();\n const [startAngle, endAngle] = this._range;\n this._angleFn\n .startAngle((startAngle / 180) * Math.PI)\n .endAngle(Math.PI * endAngle / 180);\n if (domain && domain.length) {\n createAngleValues(this);\n }\n return this;\n }\n return this._range;\n }\n}\n","/**\n * This file exports constants that are used as enums in the\n * crosstab group implementation.\n */\n/**\n * Width of the crosstab.\n */\nexport const X = 'x';\n/**\n * Width of the crosstab.\n */\nexport const Y = 'y';\n/**\n * Width of the crosstab.\n */\nexport const WIDTH = 'width';\n\n/**\n * Height of the crosstab.\n */\nexport const HEIGHT = 'height';\n\n/**\n * Field referring to object storing measurement configuration.\n */\nexport const MEASUREMENT = 'measurement';\n\n/**\n * Field referring to object storing configuration properties.\n */\nexport const CONFIG = 'config';\n\n/**\n * Width of visual unit in crosstab.\n */\nexport const MIN_UNIT_WIDTH = 'minUnitWidth';\n\n/**\n * Height of visual unit.\n */\nexport const MIN_UNIT_HEIGHT = 'minUnitHeight';\n\n/**\n * Field to store the array of dimensions to facet by.\n */\nexport const DIMENSIONS = 'dimensions';\n\n/**\n * Field to store array of measures to use as x axis.\n */\nexport const MEASURES = 'measures';\n\n/**\n * Field to store the array of dimensions to facet by.\n */\nexport const DIMENSION = 'dimension';\n\n/**\n * Field to store array of measures to use as x axis.\n */\nexport const MEASURE = 'measure';\n\n/**\n * Flag to specify if model should be pivoted.\n */\nexport const PIVOT = 'pivot';\n\n/**\n * Flag to specify format\n */\nexport const FORMAT = 'format';\n\n/**\n * Mount point where the variable will be hosted\n */\nexport const MOUNT = 'mount';\n\n/**\n * Data update flag\n */\nexport const HAS_DATA_UPDATED = 'hasDataUpdated';\n\n/**\n * Field referring to object storing set of rows\n */\nexport const ROWS = 'rows';\n\n/**\n * Field referring to object storing set of columns\n */\nexport const COLUMNS = 'columns';\n\n/**\n * Field referring to object storing set of columns\n */\nexport const COL = 'col';\n\n/**\n * Field referring to object storing set of rows\n */\nexport const ROW = 'row';\n\n/**\n * Field referring to object storing set of columns\n */\nexport const COLUMN = 'column';\n\n/**\n * Field referring to object storing color field\n */\nexport const COLOR = 'color';\n\n/**\n * Field referring to object storing shape field\n */\nexport const SHAPE = 'shape';\n\n/**\n * Field referring to object storing size field\n */\nexport const SIZE = 'size';\n\n/**\n * Field referring to object storing detail field\n */\nexport const DETAIL = 'detail';\n\n/**\n * Field referring to object storing set of layers\n */\nexport const LAYERS = 'layers';\n\n/**\n * Field referring to object storing the transforms\n */\nexport const TRANSFORM = 'transform';\n\n/**\n * Field referring to object storing the transforms\n */\nexport const ORDINAL = 'ordinal';\n\n/**\n * Field referring to object storing the transforms\n */\nexport const LINEAR = 'linear';\n/**\n * Field referring to object storing the transforms\n */\nexport const LEFT = 'left';\n/**\n * Field referring to object storing the transforms\n */\nexport const RIGHT = 'right';\n/**\n * Field referring to object storing the transforms\n */\nexport const TOP = 'top';\n/**\n * Field referring to object storing the transforms\n */\nexport const BOTTOM = 'bottom';\n\n/**\n * Field referring to object storing the transforms\n */\nexport const RETINAL = 'retinal';\n/**\n * Field referring to object storing the transforms\n */\nexport const CELL = 'cell';\n/**\n * Field referring to object storing the transforms\n */\nexport const X_AXES = 'xAxes';\n/**\n * Field referring to object storing the transforms\n */\nexport const Y_AXES = 'yAxes';\n/**\n * Field referring to object storing the transforms\n */\nexport const ENTRY_CELLS = 'entryCell';\n/**\n * Field referring to object storing the transforms\n */\nexport const INITIALIZED = 'initialized';\n/**\n * Field referring to object storing the transforms\n */\nexport const EXIT_CELLS = 'exitCell';\n/**\n * Field referring to object storing the transforms\n */\nexport const AXIS = 'axis';\n/**\n * Field referring to object storing the transforms\n */\nexport const UNIT = 'unit';\n/**\n * Field referring to object storing the transforms\n */\nexport const UPDATED = 'updated';\n/**\n * Field referring to object storing the transforms\n */\nexport const BEFORE_UPDATE = 'beforeupdate';\n/**\n * Field referring to object storing the transforms\n */\nexport const VALUE_MATRIX = 'valueMatrix';\n/**\n * Field referring to object storing the transforms\n */\nexport const FACET_HEADERS = 'facet-headers';\n/**\n * Field referring to object storing the transforms\n */\nexport const RADIUS = 'radius';\n/**\n * Field referring to object storing the transforms\n */\nexport const ANGLE = 'angle';\n\nexport const ANGLE0 = 'angle0';\n/**\n * Field referring to object storing the transforms\n */\nexport const ARC = 'arc';\n/**\n * Field referring to object storing the transforms\n */\nexport const CATEGORICAL = 'categorical';\n/**\n * Field referring to object storing the transforms\n */\nexport const TEMPORAL = 'temporal';\n/**\n * Field referring to object storing the transforms\n */\nexport const BAR = 'bar';\n/**\n * Field referring to object storing the transforms\n */\nexport const LINE = 'line';\n/**\n * Field referring to object storing the transforms\n */\nexport const POINT = 'point';\n/**\n * Field referring to object storing the transforms\n */\nexport const PRIMARY = 'Primary';\n/**\n * Field referring to object storing the transforms\n */\nexport const SECONDARY = 'Secondary';\n/**\n * Field referring to object storing the transforms\n */\nexport const BOTH = 'both';\n/**\n * Field referring to object storing the transforms\n */\nexport const INTERACTION = 'interaction';\n/**\n * Field referring to object storing the transforms\n */\nexport const GRID_LINES = 'gridLines';\n/**\n * Field referring to object storing the transforms\n */\nexport const GRID_BANDS = 'gridBands';\n/**\n * Field referring to object storing the transforms\n */\nexport const HEADER = 'header';\n/**\n * Field referring to object storing the transforms\n */\nexport const FACET = 'facet';\n/**\n * Ordering type\n */\nexport const ASCENDING = 'asc';\n/**\n * Ordering type\n */\nexport const DESCENDING = 'desc';\n","/**\n * @module Axis\n * This file declares a class that is used to render an axis to add meaning to\n * plots.\n */\nimport { getUniqueId, mergeRecursive, generateGetterSetters, sanitizeDomainWhenEqual } from 'muze-utils';\nimport { createScale } from '../scale-creator';\nimport { LINEAR } from '../../../visual-group/src/enums/constants';\nimport { PROPS } from './props';\nimport { resolveAxisConfig } from '../helper';\n\nconst adjustDomain = (context) => {\n const minOuterRadius = context.config().minOuterRadius;\n const domain = context._domain;\n if (context._range.length) {\n const scale = context._scale;\n const value = scale.invert(minOuterRadius) - scale.invert(0);\n context._domain = [domain[0] - value, domain[1]];\n scale.domain(context._domain);\n }\n};\n\n/**\n* This class is used to instantiate a RadiusAxis.\n* @class RadiusAxis\n*/\nexport default class RadiusAxis {\n\n /**\n * Creates an instance of RadiusAxis.\n * @param {Object} config input parameters.\n * @memberof RadiusAxis\n */\n constructor (config = {}) {\n this._id = getUniqueId();\n generateGetterSetters(this, PROPS);\n this._range = [];\n this._radiusFactor = 1;\n this._config = mergeRecursive({}, this.constructor.defaultConfig());\n this.config(config);\n this._scale = this.createScale({\n scale: LINEAR\n });\n }\n\n static defaultConfig () {\n return {\n padding: [0, 1],\n minOuterRadius: 10\n };\n }\n\n config (...params) {\n if (params.length) {\n const config = mergeRecursive(this.config(), params[0]);\n this._config = config;\n return this;\n }\n return this._config;\n }\n\n createScale (strategy) {\n return createScale({\n type: strategy.scale,\n range: this.range()\n });\n }\n\n domain (...domainVal) {\n if (domainVal.length) {\n const { domain: customDomain } = this.config();\n let domain = resolveAxisConfig(customDomain, domainVal[0], this);\n domain = sanitizeDomainWhenEqual(domain);\n this._scale.domain(domain);\n this._domain = domain;\n adjustDomain(this);\n }\n return this._domain;\n }\n\n getInnerRadius (domainVal) {\n if (domainVal === undefined) {\n return this.range()[0];\n }\n return this._scale(domainVal);\n }\n\n getOuterRadius (domainVal) {\n if (domainVal === undefined) {\n return this.range()[1];\n }\n const radius = this._scale(domainVal) * this._radiusFactor;\n return radius;\n }\n\n range (...range) {\n if (range.length) {\n const { padding, range: customRange } = this.config();\n const sanitizedRange = range[0].map((v, i) => v + (i ? -padding[i] : padding[i]));\n const rangeVal = resolveAxisConfig(customRange, sanitizedRange, this);\n this._range = rangeVal;\n this._scale.range(rangeVal);\n adjustDomain(this);\n }\n return this._range;\n }\n\n setRadiusFactor (val) {\n this._radiusFactor = val;\n return this;\n }\n}\n","import * as ScaleType from './enums/scale-type';\n\nconst DATA_TYPES = {\n DIMENSION: 'dimension',\n CATEGORICAL: 'categorical',\n MEASURE: 'measure',\n TEMPORAL: 'temporal'\n};\n\n/**\n * Map of DataModel types to associated field types.\n */\nexport const dataTypeScaleMap = {\n [DATA_TYPES.DIMENSION]: ScaleType.BAND,\n [DATA_TYPES.MEASURE]: ScaleType.LINEAR,\n [DATA_TYPES.TEMPORAL]: ScaleType.TIME\n};\n\n","import { nestCollection, InvalidAwareTypes } from 'muze-utils';\n\n/**\n * Create multiple datasets from a single dataset by grouping the data using\n * a dimensional field.\n * @param {Array} schema Name and type of fields are stored in schema\n * @param {Array} data Data array\n * @param {Object} config Configuration object\n * @return {Array} Grouped data array\n */\nexport default (schema, data, config) => {\n const groupBy = config.groupBy instanceof Array ? config.groupBy : [config.groupBy];\n const groupByIndices = groupBy.map(fieldName => schema.findIndex(d => d.name === fieldName));\n\n if (groupByIndices.find(d => d === -1) !== undefined) {\n throw new Error(`Groupby field ${groupBy} not found in schema`);\n }\n\n const groupedData = nestCollection({\n keys: groupByIndices,\n data\n });\n\n groupedData.forEach((d) => {\n const key = d.key;\n if (InvalidAwareTypes.isInvalid(key)) {\n d.key = InvalidAwareTypes.getInvalidType(key);\n }\n });\n return groupedData;\n};\n","/**\n * @module Transform\n * This file exports a function that is used to implement\n * the identity transform\n */\n /* eslint no-unused-vars: 0 */\n /**\n * This function accepts data and returns the data unchanged.\n * @param {Object} schema The schema.\n * @param {Array} data The data array.\n * @param {Object} config The config object.\n * @return {Array} The unchanged data.\n */\n function identityTransform (schema, data, config) {\n return data;\n }\n\n export default identityTransform;\n","/**\n * @module Transform\n * This file exports the transform factory.\n */\nimport * as TransformType from '../enums/transform-type';\nimport identity from '../identity-transform';\nimport group from '../group-transform';\nimport stack from '../stack-transform';\n\n/* istanbul ignore next */\nconst transformMap = {\n [TransformType.IDENTITY]: identity,\n [TransformType.GROUP]: group,\n [TransformType.STACK]: stack\n};\n\n/**\n * This function is used to retirn a transform associated\n * with the given type.\n *\n * @param {string} type The type of the transform.\n * @return {Function} The transform function.\n */\nfunction transformFactory (type) {\n const transform = transformMap[type];\n if (typeof transform !== 'function') {\n throw new Error('Invalid transform type supplied.');\n }\n return transform;\n}\n\nexport default transformFactory;\n","/**\n * @module Transform\n * This module exports constants that are used to reference transforms in\n * a consistent manner throughout the project.\n */\n/* eslint one-var: 0 */\n export const IDENTITY = 'identity';\n export const GROUP = 'group';\n export const STACK = 'stack';\n export const FRACTURE = 'fracture';\n","import { stack } from 'muze-utils';\n\nimport group from '../group-transform';\n/*\n Normalize the data to a form which can be given to d3 stack for stacking the data\n ['Product', 'Sales', 'Region'],\n 0 ['A', 2000, 'North'],\n 1 ['A', 3000, 'South'],\n 2 ['B', 3000, 'South'],\n 3 ['B', 2000, 'North'],\n 4 ['C', 3000, 'South'],\n 5 ['C', 2000, 'North']\n |\n |\n ['Product', 'North', 'South'],\n ['A', 2000, 3000],\n ['B', 2000, 3000],\n ['C', 2000, 3000]\n*/\n// eslint-disable-next-line require-jsdoc\nconst normalizeData = (data, schema, valueField, uniqueField, groupBy) => {\n const groupedData = group(schema, data, {\n groupBy: uniqueField\n });\n const uniqueFieldIndex = schema.findIndex(d => d.name === uniqueField);\n const valueFieldIndex = schema.findIndex(d => d.name === valueField);\n const seriesKeyIndex = schema.findIndex(d => d.name === groupBy);\n const seriesKeys = data.map(d => d[seriesKeyIndex]).filter((item, pos, arr) => arr.indexOf(item) === pos).sort();\n const fieldNames = schema.reduce((acc, obj, i) => {\n acc[i] = obj.name;\n return acc;\n }, {});\n const dataArr = groupedData.map((arr) => {\n const tuples = {};\n const rowObj = arr.values.reduce((acc, row) => {\n acc = row.reduce((obj, value, i) => {\n if (i === seriesKeyIndex) {\n obj[value] = row[valueFieldIndex];\n tuples[value] = row;\n } else if (i !== valueFieldIndex) {\n obj[fieldNames[i]] = value;\n }\n return obj;\n }, acc);\n return acc;\n }, {});\n rowObj._tuple = tuples;\n // Set missing values field to zero value\n seriesKeys.forEach((seriesKey) => {\n if (rowObj[seriesKey] === undefined) {\n rowObj[seriesKey] = 0;\n const newArr = new Array(arr.values[0].length);\n newArr[uniqueFieldIndex] = arr.key;\n newArr[seriesKeyIndex] = seriesKey;\n rowObj._tuple[seriesKey] = newArr;\n }\n });\n return rowObj;\n });\n\n return {\n data: dataArr,\n keys: seriesKeys\n };\n};\n/**\n * Generate a stacked representation of data\n * @param {Array} schema schema Array\n * @param {Array} data data array\n * @param {Object} config Configuration object\n * @return {Array} stacked data\n */\nexport default (schema, data, config) => {\n const uniqueField = config.uniqueField;\n const valueField = config.value;\n const groupBy = config.groupBy;\n const sort = config.sort || 'descending';\n const normalizedData = normalizeData(data, schema, valueField, uniqueField, groupBy);\n const keys = normalizedData.keys;\n const map = {};\n const orderBy = config.orderBy;\n const orderIndex = schema.findIndex(d => d.name === orderBy);\n const groupByIndex = schema.findIndex(d => d.name === groupBy);\n if (orderIndex !== -1) {\n keys.forEach((key) => {\n const name = data.find(d => d[groupByIndex] === key);\n map[key] = name[orderIndex];\n });\n normalizedData.keys.sort((a, b) => map[a].localeCompare(map[b]));\n }\n\n const stackData = stack({\n keys: normalizedData.keys,\n offset: config.offset || 'diverging',\n order: sort,\n data: normalizedData.data\n });\n stackData.forEach((seriesData) => {\n seriesData.forEach((dataObj) => {\n dataObj.data = dataObj.data._tuple[seriesData.key];\n });\n });\n return stackData;\n};\n\n","import {\n FieldType,\n getDomainFromData,\n setStyles,\n easeFns,\n selectElement,\n DimensionSubtype,\n STATE_NAMESPACES,\n retrieveNearestGroupByReducers,\n getObjProp,\n COORD_TYPES\n} from 'muze-utils';\nimport { ScaleType } from '@chartshq/muze-axis';\nimport { transformFactory } from '@chartshq/transform';\nimport { IDENTITY, STACK, GROUP, COLOR, SHAPE, SIZE, ENCODING, AGG_FN_SUM, ASCENDING, TEXT } from '../enums/constants';\n\nconst BAND = ScaleType.BAND;\nconst { POLAR, CARTESIAN } = COORD_TYPES;\n\nconst transfromColor = (colorAxis, datum, styleType, intensity) => {\n datum.meta.stateColor[styleType] = datum.meta.stateColor[styleType] || datum.meta.originalColor;\n const fillColorInfo = colorAxis.transformColor(datum.meta.stateColor[styleType], intensity);\n datum.meta.stateColor[styleType] = fillColorInfo.hsla;\n\n return fillColorInfo;\n};\n\nexport const applyInteractionStyle = (context, selectionSet, interactionStyles, config) => {\n const elements = context.getPlotElementsFromSet(selectionSet);\n const axes = context.axes();\n const colorAxis = axes.color;\n const apply = config.apply;\n const interactionType = config.interactionType;\n interactionStyles.forEach((style) => {\n const styleType = style.type;\n elements.style(styleType, ((d) => {\n const { colorTransform, stateColor, originalColor } = d.meta;\n colorTransform[interactionType] = colorTransform[interactionType] || {};\n if (apply && !colorTransform[interactionType][styleType]) {\n // fade selections\n colorTransform[interactionType][styleType] = style.intensity;\n const color = transfromColor(colorAxis, d, styleType, style.intensity).color;\n return color;\n }\n if (!apply && colorTransform[interactionType][styleType]) {\n // unfade selections\n colorTransform[interactionType][styleType] = null;\n return transfromColor(colorAxis, d, styleType, style.intensity.map(e => -e)).color;\n }\n const [h, s, l, a] = stateColor[styleType] ? stateColor[styleType] : originalColor;\n return `hsla(${h * 360},${s * 100}%,${l * 100}%, ${a || 1})`;\n }));\n });\n};\n\n/**\n *\n *\n * @param {*} selectionSet\n * @param {*} className\n * @param {*} hasFaded\n */\nexport const fadeUnfadeSelection = (context, selectionSet, hasFaded, interaction) => {\n const interactionConfig = { interaction, apply: hasFaded };\n applyInteractionStyle(context, selectionSet, 'fade', interactionConfig);\n};\n\n/**\n *\n *\n * @param {*} selectionSet\n * @param {*} className\n * @param {*} hasFaded\n */\nexport const focusUnfocusSelection = (context, selectionSet, isFocussed, interaction) => {\n const interactionConfig = { interaction, apply: isFocussed };\n applyInteractionStyle(context, selectionSet, 'focus', interactionConfig);\n};\n\n/**\n *\n *\n * @param {*} axes\n *\n */\nexport const getAxesScales = (axes) => {\n const [xAxis, yAxis] = [ENCODING.X, ENCODING.Y].map(e => axes[e]);\n const [xScale, yScale] = [xAxis, yAxis].map(e => e && e.scale());\n return {\n xAxis,\n yAxis,\n xScale,\n yScale\n };\n};\n\nexport const encodingFieldInfRetriever = {\n [POLAR]: (encoding, fieldsConfig) => {\n const encodingInf = {};\n [ENCODING.RADIUS, ENCODING.RADIUS0, ENCODING.ANGLE, ENCODING.ANGLE0, COLOR, SHAPE, SIZE, TEXT]\n .forEach((e) => {\n const field = getObjProp(encoding, e, 'field');\n encodingInf[`${e}Field`] = field;\n encodingInf[`${e}FieldIndex`] = getObjProp(fieldsConfig, field, 'index');\n });\n return encodingInf;\n },\n [CARTESIAN]: (encoding, fieldsConfig) => {\n const encodingInf = {};\n [ENCODING.X, ENCODING.Y, ENCODING.X0, ENCODING.Y0, COLOR, SHAPE, SIZE, TEXT].forEach((e) => {\n const field = getObjProp(encoding, e, 'field');\n encodingInf[`${e}Field`] = field;\n encodingInf[`${e}FieldIndex`] = getObjProp(fieldsConfig, field, 'index');\n encodingInf[`${e}FieldType`] = getObjProp(fieldsConfig, field, 'def', 'type');\n encodingInf[`${e}FieldSubType`] = getObjProp(fieldsConfig, field, 'def', 'subtype');\n });\n\n return encodingInf;\n }\n};\n\n/**\n *\n *\n * @param {*} dataModel\n * @param {*} config\n * @param {*} transformType\n *\n */\nexport const transformData = (dataModel, config, transformType, encodingFieldInf) => {\n const data = dataModel.getData({ withUid: true });\n const schema = data.schema;\n const transform = config.transform;\n const {\n xField,\n yField,\n xFieldType,\n yFieldType\n } = encodingFieldInf;\n const uniqueField = xFieldType === FieldType.MEASURE ? yField : xField;\n\n return transformFactory(transformType)(schema, data.data, {\n groupBy: transform.groupBy,\n uniqueField,\n sort: transform.sort || 'none',\n offset: transform.offset,\n orderBy: transform.orderBy,\n value: yFieldType === FieldType.MEASURE ? yField : xField\n }, data.uids);\n};\n\nexport const getIndividualClassName = (d, i, data, context) => {\n const className = context.config().individualClassName;\n let classNameStr = '';\n if (className instanceof Function) {\n classNameStr = className(d, i, data, context);\n }\n return classNameStr;\n};\n\nconst dataNormalizers = {\n [POLAR]: (transformedData, encodingFieldInf, fieldsConfig) => {\n const {\n radiusFieldIndex,\n angleFieldIndex,\n radius0FieldIndex,\n angle0FieldIndex\n } = encodingFieldInf;\n const fieldsLen = Object.keys(fieldsConfig).length;\n\n /**\n * Returns normalized data from transformed data. It recursively traverses through\n * the transformed data if there it is nested.\n */\n return transformedData.map(data => data.map((d) => {\n const pointObj = {\n radius: d[radiusFieldIndex],\n angle: angleFieldIndex !== undefined ? d[angleFieldIndex] : 1,\n radius0: d[radius0FieldIndex],\n angle0: d[angle0FieldIndex]\n };\n [COLOR, SHAPE, SIZE, TEXT].forEach((enc) => {\n pointObj[enc] = d[encodingFieldInf[`${enc}FieldIndex`]];\n });\n pointObj.source = d;\n pointObj.rowId = d[fieldsLen];\n return pointObj;\n })).filter(d => d.length);\n },\n [CARTESIAN]: (transformedData, encodingFieldInf, fieldsConfig, transformType) => {\n const {\n xFieldType,\n xFieldIndex,\n yFieldIndex,\n x0FieldIndex,\n y0FieldIndex\n } = encodingFieldInf;\n const fieldsLen = Object.keys(fieldsConfig).length;\n /**\n * Returns normalized data from transformed data. It recursively traverses through\n * the transformed data if there it is nested.\n */\n return transformedData.map((data) => {\n const values = transformType === GROUP ? data.values : data;\n return values.map((d) => {\n let pointObj = {};\n let tuple;\n if (transformType === STACK) {\n tuple = d.data || [];\n let y;\n let y0;\n let x;\n let x0;\n if (d[1] >= d[0]) {\n y = x0 = d[1];\n x = y0 = d[0];\n } else {\n y = x0 = d[0];\n x = y0 = d[1];\n }\n\n pointObj = xFieldType === FieldType.MEASURE ? {\n x,\n x0,\n y: tuple[yFieldIndex],\n y0: tuple[yFieldIndex]\n } : {\n x: tuple[xFieldIndex],\n x0: tuple[xFieldIndex],\n y,\n y0\n };\n pointObj.source = tuple;\n pointObj.rowId = tuple[fieldsLen];\n [COLOR, SHAPE, SIZE, TEXT].forEach((enc) => {\n pointObj[enc] = tuple[encodingFieldInf[`${enc}FieldIndex`]];\n });\n } else {\n pointObj = {\n x: d[xFieldIndex],\n y: d[yFieldIndex],\n x0: d[x0FieldIndex],\n y0: d[y0FieldIndex]\n };\n pointObj.source = d;\n pointObj.rowId = d[fieldsLen];\n [COLOR, SHAPE, SIZE, TEXT].forEach((enc) => {\n pointObj[enc] = d[encodingFieldInf[`${enc}FieldIndex`]];\n });\n }\n return pointObj;\n });\n }).filter(d => d.length);\n }\n};\n/*\n * This method resolves the x, y, x0 and y0 values from the transformed data.\n * It also checks the type of transformed data for example, if it is a stacked data\n * then it fetches the y and y0 values from the stacked data.\n * @param {Array.} transformedData transformed data\n * @param {Object} fieldsConfig field definitions\n * @param {string} transformType type of transformed data - stack, group or identity.\n * @return {Array.} Normalized data\n*/\nexport const getNormalizedData = (transformedData, context) => {\n const transformType = context.transformType();\n const transformedDataArr = transformType === IDENTITY ? [transformedData] : transformedData;\n const encodingFieldInf = context.encodingFieldsInf();\n const fieldsConfig = context.data().getFieldsConfig();\n return dataNormalizers[context.coord()](transformedDataArr, encodingFieldInf, fieldsConfig, transformType);\n};\n\nexport const domainCalculator = {\n [POLAR]: (data, layerInst) => {\n const config = layerInst.config();\n const { sort } = config;\n let angleValues = data[0];\n const radius0Field = getObjProp(config.encoding.radius0, 'field');\n if (sort) {\n angleValues = angleValues.sort((a, b) => (sort === ASCENDING ? a.radius - b.radius : b.radius - a.radius));\n }\n const radiusDomain = getDomainFromData(data, [ENCODING.RADIUS, radius0Field ?\n ENCODING.RADIUS0 : ENCODING.RADIUS]);\n return {\n radius: radiusDomain,\n angle: angleValues.map(d => d.angle),\n angle0: angleValues.map(d => d.angle0)\n };\n },\n [CARTESIAN]: (data, layerInst) => {\n const transformType = layerInst.transformType();\n const encodingFieldInf = layerInst.encodingFieldsInf();\n const {\n xFieldSubType,\n yFieldSubType,\n xField,\n yField,\n x0Field,\n y0Field\n } = encodingFieldInf;\n const domains = {};\n const yEnc = ENCODING.Y;\n const xEnc = ENCODING.X;\n if (xField) {\n domains.x = getDomainFromData(data, x0Field || transformType === STACK ? [xEnc, ENCODING.X0] : [xEnc, xEnc],\n xFieldSubType);\n }\n if (yField) {\n domains.y = getDomainFromData(data, y0Field || transformType === STACK ? [ENCODING.Y0, ENCODING.Y] :\n [yEnc, yEnc], yFieldSubType);\n }\n\n return domains;\n }\n};\n\nexport const attachDataToVoronoi = (voronoi, points) => {\n voronoi.data([].concat(...points).filter(d => d.rowId !== undefined).map((d) => {\n const point = d.update;\n return {\n x: point.x,\n y: point.y,\n data: d\n };\n }));\n};\n\n/**\n *\n *\n * @param {*} target\n * @param {*} styles\n * @param {*} remove\n */\nexport const updateStyle = (target, styles, remove) => {\n for (const key in styles) {\n if ({}.hasOwnProperty.call(styles, key)) {\n target.style(key, remove ? null : styles[key]);\n }\n }\n};\n\n/**\n *\n *\n * @param {*} mount\n * @param {*} context\n */\nexport const animateGroup = (mount, context) => {\n let groupTransition;\n let update;\n const { transition, groupAnimateStyle } = context;\n const { duration, effect, disabled } = transition;\n if (groupAnimateStyle) {\n setStyles(mount.node(), groupAnimateStyle.enter);\n update = groupAnimateStyle.update;\n if (!disabled) {\n groupTransition = mount.transition()\n .ease(easeFns[effect])\n .duration(duration)\n .on('end', function () {\n updateStyle(selectElement(this), update, true);\n });\n } else {\n groupTransition = mount;\n }\n updateStyle(groupTransition, update);\n }\n};\n\nexport const positionPoints = (context, points) => {\n const positioner = context.encodingTransform();\n if (positioner) {\n return positioner(points, context, { smartLabel: context._dependencies.smartLabel });\n }\n return points;\n};\n\n/**\n * Gets the width of each group. It gets the width from axis if it is available for\n * example when the scale is nominal else it calculates the width from the\n * range of the axis and number of data points.\n *\n * @param {SimpleAxis} axis instance of axis\n * @param {number} minDiff Minimum difference between data points\n * @return {number} width of each bar\n * @private\n*/\nexport const getGroupSpan = (axis, minDiff) => {\n let groupSpan;\n const width = axis.getUnitWidth();\n const scale = axis.scale();\n const range = scale.range();\n const domain = scale.domain();\n !width ? groupSpan = (Math.abs(range[1] - range[0]) / Math.abs(domain[1] - domain[0])) * minDiff :\n (groupSpan = width);\n\n return groupSpan;\n};\n\nexport const getPlotMeasurement = (context, dimensionalValues) => {\n const fieldInfo = context.encodingFieldsInf();\n const axes = context.axes();\n const transformType = context.transformType();\n const config = context.config();\n const bandScale = context._bandScale;\n\n return ['x', 'y'].map((type) => {\n let span = 0;\n let groupSpan = 0;\n let padding = 0;\n let offsetValues = [];\n if (fieldInfo[`${type}FieldType`] === FieldType.DIMENSION) {\n let actualGroupWidth;\n const isTemporal = fieldInfo[`${type}FieldSubType`] === DimensionSubtype.TEMPORAL;\n const timeDiff = isTemporal ? context.dataProps().timeDiffs[type] : 0;\n const axis = axes[type];\n const pad = config[`pad${type.toUpperCase()}`];\n const innerPadding = config.innerPadding;\n const keys = dimensionalValues;\n const scale = axis.scale();\n groupSpan = getGroupSpan(axis, timeDiff);\n const isAxisBandScale = axis.constructor.type() === BAND;\n const axisPadding = axis.config().padding;\n // If it is a grouped bar then the width of each bar in a grouping is retrieved from\n // a band scale. The band scale will have range equal to width of one group of bars and\n // the domain is set to series keys.\n if (transformType === 'group') {\n const groupPadding = isAxisBandScale ? 0 : axisPadding * groupSpan / 2;\n bandScale.range([groupPadding, groupSpan - groupPadding]).domain(keys).paddingInner(innerPadding);\n span = bandScale.bandwidth();\n actualGroupWidth = groupSpan - (isAxisBandScale ? 0 : axisPadding * groupSpan);\n offsetValues = keys.map(key => bandScale(key) - (isAxisBandScale ? 0 : (groupSpan / 2)));\n } else if (pad !== undefined) {\n let offset;\n if (isAxisBandScale) {\n const step = scale.step();\n offset = scale.padding() * step;\n span = scale.bandwidth() + offset;\n } else {\n span = groupSpan;\n }\n offsetValues = keys.map(() => (isAxisBandScale ? -(offset / 2) : -(span / 2)));\n } else {\n padding = isAxisBandScale ? 0 : axisPadding * groupSpan;\n span = groupSpan - padding;\n actualGroupWidth = span;\n offsetValues = keys.map(() => (isAxisBandScale ? 0 : -(span / 2)));\n }\n\n groupSpan = actualGroupWidth;\n padding = isAxisBandScale ? axisPadding * axis.scale().step() : axisPadding * groupSpan;\n }\n\n return {\n span,\n offsetValues,\n groupSpan,\n padding\n };\n });\n};\n\nexport const initializeGlobalState = (context) => {\n const store = context.store();\n const globalState = context.constructor.getState()[0];\n const namespace = context.metaInf().namespace;\n for (const prop in globalState) {\n store.append(`${STATE_NAMESPACES.LAYER_GLOBAL_NAMESPACE}.${prop}`, {\n [namespace]: null\n });\n }\n};\n\nexport const resolveInvalidTransformType = (context) => {\n const {\n xField,\n yField,\n xFieldType,\n yFieldType\n } = context.encodingFieldsInf();\n const groupByField = context.config().transform.groupBy;\n const fieldsConfig = context.data().getFieldsConfig();\n const groupByFieldMeasure = fieldsConfig[groupByField] && fieldsConfig[groupByField].def.type === FieldType.MEASURE;\n if (!xField || !yField || groupByFieldMeasure || !groupByField || xFieldType === FieldType.DIMENSION &&\n yFieldType === FieldType.DIMENSION) {\n return IDENTITY;\n }\n return null;\n};\n\nexport const getValidTransform = context => resolveInvalidTransformType(context) || context.config().transform.type;\n\nexport const getValidTransformForAggFn = (context) => {\n const resolvedInvalidTransformType = resolveInvalidTransformType(context);\n if (resolvedInvalidTransformType) {\n return resolvedInvalidTransformType;\n }\n\n const {\n xField,\n yField,\n xFieldType,\n yFieldType\n } = context.encodingFieldsInf();\n const groupByField = context.config().transform.groupBy;\n const isCustomTransformTypeProvided = !!getObjProp(context._customConfig, 'transform', 'type');\n let transformType = context.config().transform.type;\n\n if (!isCustomTransformTypeProvided && groupByField && xFieldType !== yFieldType) {\n const measureField = xFieldType === FieldType.MEASURE ? xField : yField;\n const { [measureField]: aggFn } = retrieveNearestGroupByReducers(context.data(), measureField);\n transformType = aggFn === AGG_FN_SUM ? STACK : GROUP;\n }\n\n return transformType;\n};\n\nexport const getMarkId = (source, schema) => source.filter((val, i) => schema[i] &&\n schema[i].type === FieldType.DIMENSION).join();\n\nexport const resolveEncodingValues = (data, i, dataArr, layerInst) => {\n const transformedValues = {};\n const values = data.values;\n const encoding = layerInst.config().encoding;\n for (const key in values) {\n const value = getObjProp(encoding[key], 'value');\n if (value instanceof Function) {\n transformedValues[key] = value(values, i, dataArr, layerInst);\n } else {\n transformedValues[key] = values[key];\n }\n }\n return transformedValues;\n};\n\nexport const getColorMetaInf = (color, colorAxis) => ({\n originalColor: colorAxis.getHslArray(color),\n stateColor: {},\n colorTransform: {}\n});\n\nconst getCoordValue = (radius, trig, angle, offset) => radius * Math[trig](angle) + offset;\nconst coordValueGetter = (radius, angle, xOffset, yOffset) => ({\n x: getCoordValue(radius, 'cos', angle, xOffset),\n y: getCoordValue(radius, 'sin', angle, yOffset)\n});\nexport const toCartesianCoordinates = (points, measurement, rangePlot = false) => {\n const xOffset = measurement.width / 2;\n const yOffset = measurement.height / 2;\n for (let i = 0, len = points.length; i < len; i++) {\n const point = points[i];\n const { angle, radius, radius0, angle0 } = point.update;\n point.update = coordValueGetter(radius, angle, xOffset, yOffset);\n if (rangePlot) {\n const update = point.update = coordValueGetter(radius0, angle0, xOffset, yOffset);\n const { x: x0, y: y0 } = coordValueGetter(radius, angle, xOffset, yOffset);\n update.x0 = x0;\n update.y0 = y0;\n }\n }\n return points;\n};\n\nexport const sortData = (data, axes) => {\n const { x: xAxis, y: yAxis } = axes;\n const axisArr = [xAxis, yAxis];\n for (let i = 0, len = axisArr.length; i < len; i++) {\n const axis = axisArr[i];\n if (axis.constructor.type() === BAND) {\n const key = i ? 'y' : 'x';\n const dom = axis.domain();\n const indices = dom.reduce((acc, v, idx) => {\n acc[v] = idx;\n return acc;\n }, {});\n data.sort((a, b) => indices[a[key]] - indices[b[key]]);\n break;\n }\n }\n return data;\n};\n","import { CommonProps, STATE_NAMESPACES } from 'muze-utils';\nimport { encodingFieldInfRetriever } from '../helpers';\nimport * as PROPS from '../enums/props';\n\nconst renderLayer = (context) => {\n const mount = context.mount();\n if (mount) {\n context.render(mount);\n context.dependencies().throwback.commit(CommonProps.ON_LAYER_DRAW, true);\n }\n};\n\nexport const listenerMap = (context, ns) => [\n {\n props: [`${ns.local}.${PROPS.DATA}`],\n listener: ([, data]) => {\n const config = context.config();\n const encodingValue = config.encoding;\n if (data && encodingValue) {\n const fieldsConfig = data.getFieldsConfig();\n const encodingFieldsInf = encodingFieldInfRetriever[context.coord()](encodingValue, fieldsConfig);\n context.encodingFieldsInf(encodingFieldsInf);\n context.resolveTransformType();\n context._transformedData = context.getTransformedData(data, config,\n context.transformType(), encodingFieldsInf);\n context._normalizedData = context.getNormalizedData(context._transformedData, fieldsConfig);\n const domain = context.calculateDomainFromData(context._normalizedData, context.encodingFieldsInf(),\n context.data().getFieldsConfig());\n context._domain = domain;\n !context._updateLock && context.domain(domain);\n }\n },\n type: 'registerImmediateListener'\n },\n {\n props: [`${ns.local}.${PROPS.CONFIG}`],\n listener: ([, config]) => {\n const calculateDomain = config.calculateDomain;\n const props = context.getRenderProps();\n const store = context.store();\n const namespaceInf = {\n namespace: `${STATE_NAMESPACES.LAYER_LOCAL_NAMESPACE}.${context.metaInf().namespace}`,\n key: 'renderListener'\n };\n store.unsubscribe(namespaceInf);\n if (calculateDomain === false) {\n props.push(`${ns.local}.${PROPS.DATA}`);\n }\n store.registerChangeListener(props,\n () => {\n renderLayer(context);\n }, false, namespaceInf);\n },\n type: 'registerImmediateListener'\n }\n];\n\n","export const DATA = 'data';\nexport const CONFIG = 'config';\nexport const MEASUREMENT = 'measurement';\nexport const DOMAIN = 'domain';\nexport const MOUNT = 'mount';\n","import { mergeRecursive } from 'muze-utils';\nimport * as PROPS from '../enums/props';\n\nexport const defaultOptions = {\n [PROPS.CONFIG]: {\n value: null,\n meta: {\n sanitization: (config, oldConfig, context) => {\n context._customConfig = config;\n const constructor = context.constructor;\n const newConf = mergeRecursive({}, constructor.defaultConfig());\n\n return constructor.defaultPolicy(newConf, config);\n }\n }\n },\n [PROPS.DATA]: {\n value: null,\n meta: {\n preset: (data, context) => {\n if (context._cacheEnabled) {\n context._cachedData.push(data);\n } else {\n context._cachedData = [data];\n }\n }\n }\n }\n};\n","import {\n getUniqueId,\n mergeRecursive,\n FieldType,\n selectElement,\n ReservedFields,\n registerListeners,\n transactor,\n DataModel,\n clone,\n generateGetterSetters,\n STATE_NAMESPACES,\n COORD_TYPES\n} from 'muze-utils';\nimport { SimpleLayer } from '../simple-layer';\nimport * as PROPS from '../enums/props';\nimport { props } from './props';\nimport {\n transformData,\n getNormalizedData,\n applyInteractionStyle,\n initializeGlobalState,\n getValidTransform,\n domainCalculator\n} from '../helpers';\nimport { listenerMap } from './listener-map';\nimport { defaultOptions } from './default-options';\n\n/**\n * An abstract class which gives definition of common layer functionality like\n * - transforming data for various modes. Supported modes: identity, group and stack.\n * - calculating data domain\n * - linking dependent layers\n * - merging policy of configuration\n * - interaction sideffect helpers\n * - retrieving dom elements from data using id\n * - retrieving the physical dimensions of marks\n * - disposing layer\n *\n * Every layer has to extend base layer and give concrete definition.\n * This layer does not have any default visual. A new layer has to define the logic of `render` for rendering the\n * visuals\n *\n * @public\n * @class\n * @module BaseLayer\n */\nexport default class BaseLayer extends SimpleLayer {\n\n /**\n * Creates a layer using a configuration and data.\n *\n * @public\n * @constructor\n * @param {DataModel} data Instance of DataModel to be used. This DataModel instance serves as the data for a layer.\n * @param {Object} axes Axes instances to be used for rendering the layer. Axes are used for mapping data from\n * value to px.\n * @param {SimpleAxis} axes.x X axis of the layer. Based on the type of variable it gets instance of BandAxis,\n * TimeAxis, ContinuousAxis\n * @param {SimpleAxis} axes.y X axis of the layer. Based on the type of variable it gets instance of BandAxis,\n * TimeAxis, ContinuousAxis\n * @param {ColorAxis} axes.color Axis for coloring a layer using color interpolators\n * @param {ShapeAxis} axes.shape Axis for providing a shape\n * @param {SizeAxis} axes.size Axis for determining size of a mark using size interpolator\n * @param {LayerConfig} config Configuration of the layer\n * @param {Object} dependencies Dependencies of the layer\n * @param {SmartLabel} dependencies.smartLabel Smartlabel singleton instance\n */\n constructor (data, axes, config, dependencies = {}) {\n super();\n\n generateGetterSetters(this, props);\n this.data(data);\n this.axes(axes);\n this.config(config);\n this.alias(this.constructor.formalName() + getUniqueId());\n this.dependencies(dependencies);\n this._points = [];\n this._cachedData = [];\n this._id = getUniqueId();\n this._measurement = {};\n this._animationDonePromises = [];\n this._customConfig = null;\n }\n\n static getState () {\n return [\n {\n domain: {}\n },\n {\n config: {},\n data: {}\n }\n ];\n }\n\n store (...params) {\n if (params.length) {\n this._store = params[0];\n const metaInf = this.metaInf();\n const localNs = `${STATE_NAMESPACES.LAYER_LOCAL_NAMESPACE}.${metaInf.namespace}`;\n initializeGlobalState(this);\n const store = this.store();\n store.append(`${STATE_NAMESPACES.LAYER_LOCAL_NAMESPACE}`, {\n [metaInf.namespace]: null\n });\n\n transactor(this, defaultOptions, store.model, {\n namespace: localNs\n });\n registerListeners(this, listenerMap, {\n local: localNs,\n global: STATE_NAMESPACES.LAYER_GLOBAL_NAMESPACE\n }, {\n unitRowIndex: metaInf.unitRowIndex,\n unitColIndex: metaInf.unitColIndex\n });\n return this;\n }\n return this._store;\n }\n\n domain (...dom) {\n const prop = `${STATE_NAMESPACES.LAYER_GLOBAL_NAMESPACE}.${PROPS.DOMAIN}.${this.metaInf().namespace}`;\n if (dom.length) {\n this.store().commit(prop, dom[0]);\n return this;\n }\n return this.store().get(prop);\n }\n\n /**\n * Creates a layer instance\n * @return {BaseLayer} Instance of a layer\n */\n static create (...params) {\n return new this(...params);\n }\n\n /**\n * Default configuration of the layer. This configuration gets merged to the user passed configuration using a\n * plolicy. Base layer only returns part of configuraion, any layer overridding base layer should return its own\n * configuration.\n *\n * @public\n * @static\n *\n * @return {Object} Default configuration\n */\n static defaultConfig () {\n return {\n transform: {\n type: 'identity'\n }\n };\n }\n\n /**\n * Policy defines how user config gets merged to default config. The default policy here does a deep copy\n * operation.\n * Any policy which does more than deep copying should define the policy as a static member.\n *\n * @static\n * @public\n *\n * @param {LayerConfig} conf Configuration with which the user config will be merged\n * @param {LayerConfig} userConf Configuration given by the user\n *\n * @return {LayerConfig} Merged layer configuration\n */\n static defaultPolicy (conf, userConf) {\n return mergeRecursive(conf, userConf);\n }\n\n /**\n * Determines a name for a layer. This name of the layer is used in the input data to refer to this layer.\n * ```\n * .layers([\n * mark: 'bar',\n * encoding: { ... }\n * ])\n * ```\n *\n * @static\n * @public\n *\n * @return {string} name of layer\n */\n static formalName () {\n return 'base';\n }\n\n encodingFieldsInf (...fieldsInf) {\n if (fieldsInf.length) {\n this._encodingFieldsInf = fieldsInf[0];\n return this;\n }\n return this._encodingFieldsInf;\n }\n\n encodingTransform (...encodingTransform) {\n if (encodingTransform.length) {\n this._encodingTransform = encodingTransform[0];\n return this;\n }\n return this._encodingTransform;\n }\n\n /**\n * Provides a alias for a layer. Like it's possible to have same layer (like bar) multiple times, but among multiple\n * layers of same type if one layer has to be referred, alias is used. If no alias is given then `formalName` is set\n * as the alias name.\n *\n *\n * If used as setter\n * @param {string} alias Name of the alias\n * @return {BaseLayer} Instance of current base layer\n *\n * If used as getter\n * @return {string} Alias of the current layer\n *\n * @public\n */\n alias (...params) {\n if (params.length) {\n this._alias = params[0];\n return this;\n }\n return this._alias || this.constructor.formalName();\n }\n\n dependencies (...params) {\n if (params.length) {\n this._dependencies = params[0];\n return this;\n }\n return this._dependencies;\n }\n\n enableCaching () {\n this._cacheEnabled = true;\n return this;\n }\n\n clearCaching () {\n this._cacheEnabled = false;\n return this.data(this._cachedData[0]);\n }\n\n /**\n * Serialize the schema. Merge config is used for serialization.\n *\n * @public\n *\n * @return {LayerConfig} Serialized schema\n */\n serialize () {\n return this.config();\n }\n\n /**\n * Returns the unique identifier of this layer. Id is auto generated during the creation proceess of a schema.\n *\n * @public\n *\n * @return {string} id of the layer\n */\n id () {\n return this._id;\n }\n\n /**\n * Returns the transformed data based on given transform type.\n * It first gets the transform method from transform factory based on type of transform. It then calls the\n * transform method with the data and passes the configuration parameters of transform such as\n * groupBy, value field, etc.\n *\n * @param {DataModel} dataModel Instance of DataModel\n * @param {Object} config Configuration for transforming data\n * @return {Array.} Transformed data.\n */\n getTransformedData (dataModel, config, transformType, encodingFieldsInf) {\n return transformData(dataModel, config, transformType, encodingFieldsInf);\n }\n\n /**\n * Calculates the domain from the data.\n * It checks the type of field and calculates the domain based on that. For example, if it\n * is a quantitative or temporal field, then it calculates the min and max from the data or\n * if it is a categorical field then it gets all the values from the data of that field.\n * @param {Array} data DataArray\n * @param {Object} fieldsConfig Configuration of fields\n * @return {Array} Domain values array.\n */\n calculateDomainFromData (data) {\n let domains = {};\n const isEmpty = this.data().isEmpty();\n\n if (!isEmpty) {\n domains = domainCalculator[this.coord()](data, this);\n }\n return domains;\n }\n\n static shouldDrawAnchors () {\n return false;\n }\n\n /**\n * Returns the domain for the axis.\n *\n * @param {string} encodingType type of encoding x, y, etc.\n * @return {Object} Axis domains\n */\n getDataDomain (encodingType) {\n const domains = this.store()\n .get(`${STATE_NAMESPACES.LAYER_GLOBAL_NAMESPACE}.${PROPS.DOMAIN}.${this.metaInf().namespace}`);\n return encodingType !== undefined ? domains[encodingType] || [] : domains;\n }\n\n /**\n * Normalizes the transformed data and returns it.\n *\n * @param {string} encodingType type of encoding x, y, etc.\n * @return {Object} Axis domains\n */\n getNormalizedData (transformedData) {\n return getNormalizedData(transformedData, this);\n }\n\n /**\n * Gets the nearest point closest to the given x and y coordinate. If no nearest point is found, then it returns\n * null.\n *\n * @public\n *\n * @param {number} x X Coordinate.\n * @param {number} y Y Coordinate.\n *\n * @return {Object} Information of the nearest point.\n * ```\n * {\n * // id property contains the field names and their corresponding values in a 2d array. This is the data\n * // associated with the nearest point.\n * id: // Example data: [['Origin'], ['USA']],\n * dimensions: // Physical dimensions of the point.\n * layerId: // Id of the layer instance.\n * }\n * ```\n */\n getNearestPoint () {\n return null;\n }\n\n applyInteractionStyle (interactionType, selectionSet, apply, styles) {\n const interactionConfig = this.config().interaction || {};\n\n let interactionStyles = interactionConfig[interactionType];\n interactionStyles = styles || interactionStyles;\n if (interactionStyles) {\n applyInteractionStyle(this, selectionSet, interactionStyles, {\n apply,\n interactionType\n });\n }\n }\n\n disableUpdate () {\n this._updateLock = true;\n return this;\n }\n\n enableUpdate () {\n this._updateLock = false;\n return this;\n }\n\n resolveTransformType () {\n this._transformType = getValidTransform(this);\n }\n\n transformType () {\n return this._transformType;\n }\n\n /**\n * Renders the layer\n * @return {BaseLayer} Instance of the layer.\n */\n render () {\n return this;\n }\n\n /**\n *\n *\n *\n * @memberof BaseLayer\n */\n elemType () {\n return 'g';\n }\n\n /**\n * Disposes the entire layer.\n *\n * @return {BaseLayer} Instance of layer.\n */\n remove () {\n this.store().unsubscribe({\n namespace: `${STATE_NAMESPACES.LAYER_LOCAL_NAMESPACE}.${this.metaInf().namespace}`\n });\n selectElement(this.mount()).remove();\n return this;\n }\n\n /**\n * Stores point in an object with key as the categorical value or temporal value\n *\n * @param {string} key categorical value or temporal value\n * @param {Object} data Information of the data point\n * @return {BarLayer} Instance of bar layer\n */\n cachePoint (key, data) {\n if (key === null) {\n return this;\n }\n const pointMap = this._pointMap;\n !pointMap[key] && (pointMap[key] = []);\n pointMap[key].push(data);\n return this;\n }\n\n /**\n *\n *\n * @param {*} dataProps\n *\n * @memberof BaseLayer\n */\n dataProps (...dataProps) {\n if (dataProps.length) {\n this._dataProps = dataProps[0];\n return this;\n }\n return this._dataProps;\n }\n\n /**\n *\n *\n * @param {*} data\n * @param {*} id\n *\n * @memberof BaseLayer\n */\n getIdentifiersFromData (data) {\n const schema = this.data().getData().schema;\n const fieldsConfig = this.data().getFieldsConfig();\n const identifiers = [[], []];\n const {\n xFieldType,\n yFieldType,\n xField,\n yField\n } = this.encodingFieldsInf();\n\n const [xMeasure, yMeasure] = [xFieldType, yFieldType].map(type => type === FieldType.MEASURE);\n schema.forEach((d, i) => {\n const name = d.name;\n if (fieldsConfig[name].def.type === FieldType.DIMENSION) {\n identifiers[0].push(name);\n identifiers[1].push(data[i]);\n }\n });\n\n if (xMeasure && yMeasure) {\n const xMeasureIndex = fieldsConfig[xField].index;\n const yMeasureIndex = fieldsConfig[yField].index;\n identifiers[0].push(...[xField, yField]);\n identifiers[1].push(...[data[xMeasureIndex], data[yMeasureIndex]]);\n }\n return identifiers;\n }\n\n hasPlotSpan () {\n return false;\n }\n\n getPlotSpan () {\n return {\n x: 0,\n y: 0\n };\n }\n\n getPlotPadding () {\n return {\n x: 0,\n y: 0\n };\n }\n\n /**\n * Returns the information of the marks corresponding to the supplied identifiers. Identifiers are a set of field\n * names and their corresponding values in an array. It can also be an instance of datamodel.\n *\n * For example,\n * ```\n * const identifiers = [\n * ['Origin', 'Cylinders'],\n * ['USA', '8']\n * ];\n * const points = barLayer.getPointsFromIdentifiers(identifiers);\n * ```\n * @public\n * @param {Array|DataModel} identifiers Identifiers of the marks.\n * @param {Object} config Optional configuration which describes how to get the information.\n * @param {boolean} config.getAllAttrs If true, then returns all the information of the points, else returns only\n * the positions of the points.\n * @param {boolean} config.getBBox If true, then returns the bounding box of all the marks.\n *\n * @return {Array} Array of points contains\n */\n getPointsFromIdentifiers (identifiers, config = {}) {\n const getAllAttrs = config.getAllAttrs;\n const getBBox = config.getBBox;\n if (!this.data()) {\n return [];\n }\n let fieldNames;\n let values;\n if (identifiers instanceof DataModel) {\n const dataObj = identifiers.getData();\n fieldNames = dataObj.schema.map(d => d.name);\n values = dataObj.data;\n } else {\n fieldNames = identifiers[0];\n values = identifiers.slice(1, identifiers.length);\n }\n\n const points = this._points;\n const fieldsConfig = this.data().getFieldsConfig();\n\n const filteredPoints = [].concat(...points).filter((point) => {\n const { source, rowId } = point;\n\n return fieldNames.every((field, idx) => {\n if (field in fieldsConfig && fieldsConfig[field].def.type === FieldType.DIMENSION) {\n return values.findIndex(d => d[idx] === source[fieldsConfig[field].index]) !== -1;\n } else if (field === ReservedFields.ROW_ID) {\n return values.findIndex(d => d[idx] === rowId) !== -1;\n } return true;\n });\n });\n return getAllAttrs ? filteredPoints : filteredPoints.map((d) => {\n const obj = clone(d);\n if (getBBox) {\n const update = obj.update || obj;\n if (obj.size !== undefined) {\n const sizeVal = Math.sqrt(obj.size / Math.PI) * 2;\n update.width = sizeVal;\n update.height = sizeVal;\n update.x -= sizeVal / 2;\n update.y -= sizeVal / 2;\n } else {\n if (update.width === undefined) {\n update.width = 2;\n }\n if (update.height === undefined) {\n update.height = 2;\n }\n }\n }\n\n return obj.update || obj;\n }).sort((a, b) => a.y - b.y);\n }\n\n getTransformedDataFromIdentifiers (identifiers) {\n const { data: identifierData, schema: identifierSchema } = identifiers.getData();\n const normalizedData = this._normalizedData;\n const fieldsConfig = this.data().getFieldsConfig();\n const {\n yField,\n xField,\n yFieldType,\n xFieldType\n } = this.encodingFieldsInf();\n let measureIndex;\n let enc;\n if (xFieldType === FieldType.MEASURE) {\n measureIndex = fieldsConfig[xField].index;\n enc = 'x';\n } else if (yFieldType === FieldType.MEASURE) {\n measureIndex = fieldsConfig[yField].index;\n enc = 'y';\n }\n\n const transformedData = [];\n normalizedData.forEach((dataArr) => {\n dataArr.forEach((dataObj) => {\n const tupleArr = dataObj.source;\n const exist = identifierSchema.every((obj, i) =>\n identifierData.findIndex(d => tupleArr[fieldsConfig[obj.name].index] === d[i]) !== -1);\n if (exist) {\n const transformedVal = dataObj[enc];\n const row = dataObj.source;\n const tuple = {};\n for (const key in fieldsConfig) {\n const index = fieldsConfig[key].index;\n tuple[key] = row[index];\n if (index === measureIndex) {\n tuple[key] = transformedVal;\n }\n }\n transformedData.push(tuple);\n }\n });\n });\n\n return [transformedData, this.data().getData().schema];\n }\n\n /**\n * Returns the dom elements associated with the supplied set of row ids.\n * Each element in the layer is mapped with a row of the datamodel. When given an array of row ids, it returns all\n * the elements which is mapped with those row ids.\n *\n * @public\n * @param {Array} set Array of row ids\n *\n * @return {Selection} D3 Selection of dom elements.\n */\n getPlotElementsFromSet (set) {\n return selectElement(this.mount()).selectAll(this.elemType()).filter(data =>\n (data ? set.indexOf(data.rowId) !== -1 : false));\n }\n\n /**\n * Notifies when all animations/transitions of the layer are completed.\n *\n * @public\n * @return {Promise} Returns a promise to notify the animation completion.\n */\n animationDone () {\n return Promise.all(this._animationDonePromises);\n }\n\n registerAnimationDoneHook () {\n let resolveFn;\n const promise = new Promise((resolve) => {\n resolveFn = resolve;\n });\n this._animationDonePromises.push(promise);\n\n return () => {\n resolveFn();\n };\n }\n\n getRenderProps () {\n const metaInf = this.metaInf();\n if (this.coord() === COORD_TYPES.POLAR) {\n return [`${STATE_NAMESPACES.GROUP_GLOBAL_NAMESPACE}.domain.radius`];\n }\n return [`${STATE_NAMESPACES.GROUP_GLOBAL_NAMESPACE}.domain.y.${metaInf.unitRowIndex}0`,\n `${STATE_NAMESPACES.GROUP_GLOBAL_NAMESPACE}.domain.x.${metaInf.unitColIndex}0`];\n }\n}\n","import {\n selectElement,\n makeElement,\n pathInterpolators,\n Symbols\n} from 'muze-utils';\nimport { updateStyle } from '../../helpers';\n\nconst line = Symbols.line;\n\nconst filterFn = (d) => {\n const { update } = d;\n return update.y !== null && update.x !== null;\n};\n\n/**\n * Draws a line from the points\n * Generates a svg path string\n * @param {Object} params Contains container, points and interpolate attribute.\n */\nexport const drawLine = (context) => {\n let filteredPoints;\n const { layer, container, points, interpolate, connectNullData, className, style, transition } = context;\n const mount = selectElement(container).attr('class', className);\n const curveInterpolatorFn = pathInterpolators[interpolate];\n const linepath = line()\n .curve(curveInterpolatorFn)\n .x(d => d.update.x)\n .y(d => d.update.y)\n .defined(filterFn);\n\n filteredPoints = points;\n if (connectNullData) {\n filteredPoints = points.filter(filterFn);\n }\n\n updateStyle(mount, style);\n let element = makeElement(mount, 'path', points.length ? [points[0].className] : []);\n element.attr('class', d => d);\n if (!transition.disabled) {\n element = element.transition()\n .duration(transition.duration)\n .on('end', layer.registerAnimationDoneHook());\n }\n element.attr('d', linepath(filteredPoints))\n .style('fill-opacity', 0);\n return element;\n};\n","import { CLASSPREFIX } from '../../enums/constants';\n\nexport const defaultConfig = {\n classPrefix: CLASSPREFIX,\n defClassName: 'layer-line',\n className: '',\n interpolate: 'linear',\n transform: {\n type: 'group'\n },\n interaction: {\n highlight: [{\n type: 'stroke',\n intensity: [0, 0, -15, 0]\n }],\n fade: [{\n type: 'stroke',\n intensity: [0, 0, +15, 0]\n }],\n focus: [{\n type: 'stroke',\n intensity: [0, 0, +15, 0]\n }]\n },\n nearestPointThreshold: 20,\n encoding: {\n color: {},\n x: {},\n y: {},\n strokeOpacity: {\n value: 1\n }\n },\n transition: {\n effect: 'cubic',\n duration: 1000\n },\n connectNullData: false\n};\n\n","import {\n Voronoi,\n getQualifiedClassName,\n selectElement,\n makeElement,\n FieldType,\n InvalidAwareTypes,\n getObjProp\n} from 'muze-utils';\nimport { BaseLayer } from '../../base-layer';\nimport { drawLine } from './renderer';\nimport { defaultConfig } from './default-config';\nimport { ENCODING } from '../../enums/constants';\nimport {\n attachDataToVoronoi,\n animateGroup,\n positionPoints,\n getIndividualClassName,\n getColorMetaInf,\n resolveEncodingValues,\n sortData\n} from '../../helpers';\n\nimport './styles.scss';\n\n/**\n * This layer is used to render straight or smoothed line paths. The mark type of this layer is ```line```.\n *\n * @public\n *\n * @class\n * @module LineLayer\n * @extends BaseLayer\n */\nexport default class LineLayer extends BaseLayer {\n\n /**\n * Creates an instance of LineLayer.\n * @param {*} args\n * @memberof LineLayer\n */\n constructor (...args) {\n super(...args);\n this._voronoi = new Voronoi();\n }\n\n static formalName () {\n return 'line';\n }\n\n elemType () {\n return 'path';\n }\n\n /**\n * Default configuration of line layer\n * @return {Object} Default configuration of layer\n */\n static defaultConfig () {\n return defaultConfig;\n }\n\n static defaultPolicy (conf, userConf) {\n const config = BaseLayer.defaultPolicy(conf, userConf);\n const encoding = config.encoding;\n const transform = config.transform;\n const colorField = encoding.color && encoding.color.field;\n\n if (colorField && !transform.groupBy) {\n transform.groupBy = colorField;\n }\n return config;\n }\n\n /**\n * Returns the draw method for line\n * @return {Function} Draw method of line layer\n */\n getDrawFn () {\n return drawLine;\n }\n\n static shouldDrawAnchors () {\n return true;\n }\n\n /**\n * Generates the x and y positions for each point\n * @param {Array} data Data Array\n * @param {Object} encoding Visual Encodings of the layer\n * @param {Object} axes Contains the axis\n * @param {number} seriesIndex index of series\n * @return {Array} Array of points\n */\n translatePoints (data) {\n let points = [];\n const axes = this.axes();\n const xAxis = axes.x;\n const yAxis = axes.y;\n const colorAxis = axes.color;\n const { xFieldType, yFieldType } = this.encodingFieldsInf();\n const isXDim = xFieldType === FieldType.DIMENSION;\n const isYDim = yFieldType === FieldType.DIMENSION;\n const key = isXDim ? ENCODING.X : (isYDim ? ENCODING.Y : null);\n sortData(data, axes);\n points = data.map((d, i) => {\n const xPx = xAxis.getScaleValue(d.x) + xAxis.getUnitWidth() / 2;\n const yPx = yAxis.getScaleValue(d.y) + yAxis.getUnitWidth() / 2;\n const color = colorAxis.getColor(d.color);\n\n const resolvedEncodings = resolveEncodingValues({\n values: {\n x: xPx,\n y: yPx,\n color\n },\n data: d\n }, i, data, this);\n\n const point = {\n enter: {},\n update: {\n x: d.x instanceof InvalidAwareTypes ? null : resolvedEncodings.x,\n y: d.y instanceof InvalidAwareTypes ? null : resolvedEncodings.y\n },\n style: {\n stroke: resolvedEncodings.color,\n 'fill-opacity': 0\n },\n rowId: d.rowId,\n source: d.source,\n meta: getColorMetaInf(resolvedEncodings.color, colorAxis)\n };\n point.className = getIndividualClassName(d, i, data, this);\n this.cachePoint(d[key], point);\n return point;\n });\n points = positionPoints(this, points);\n\n points = points.filter((point) => {\n const { update } = point;\n return !isNaN(update.x) && !isNaN(update.y);\n });\n return points;\n }\n\n /**\n * Renders the line plot\n * @param {SVGElement} container svg element\n * @return {LineLayer} instance of line layer\n */\n render (container) {\n let points;\n let seriesClassName;\n let style;\n\n const config = this.config();\n const {\n encoding,\n interpolate,\n className,\n defClassName,\n transition\n } = config;\n const normalizedData = this._normalizedData;\n const transformedData = this._transformedData;\n const fieldsConfig = this.data().getFieldsConfig();\n const axes = this.axes();\n const keys = transformedData.map(d => d.key);\n const qualifiedClassName = getQualifiedClassName(defClassName, this.id(), config.classPrefix);\n const containerSelection = selectElement(container);\n const colorField = encoding.color.field;\n const colorFieldIndex = fieldsConfig[colorField] && fieldsConfig[colorField].index;\n\n this._points = [];\n this._pointMap = {};\n containerSelection.classed(qualifiedClassName.join(' '), true);\n containerSelection.classed(className, true);\n makeElement(container, 'g', normalizedData, null, {\n enter: (group) => {\n animateGroup(group, {\n transition,\n groupAnimateStyle: {\n enter: {\n 'stroke-opacity': 0,\n 'fill-opacity': this.getPathStyle()['fill-opacity']\n },\n update: {\n 'stroke-opacity': encoding.strokeOpacity.value\n }\n }\n });\n },\n update: (group, dataArr, i) => {\n points = this.translatePoints(dataArr);\n this._points.push(points);\n seriesClassName = `${qualifiedClassName[0]}-${keys[i] || i}`.toLowerCase();\n\n let color;\n const colorValFn = encoding.color.value;\n const colorVal = points.find(d => d.source[colorFieldIndex] !== null &&\n d.source[colorFieldIndex] !== undefined);\n\n if (colorValFn) {\n color = colorValFn(dataArr, i, normalizedData);\n } else {\n color = axes.color.getColor(colorVal && colorVal.source[colorFieldIndex]);\n }\n\n style = this.getPathStyle(color);\n this.getDrawFn()({\n layer: this,\n container: group.node(),\n interpolate,\n points,\n className: seriesClassName,\n transition,\n style: style || {},\n connectNullData: config.connectNullData\n });\n }\n }, d => d[0].source[colorFieldIndex] || d[0].rowId);\n\n attachDataToVoronoi(this._voronoi, this._points);\n return this;\n }\n\n /**\n * Get the css styles need to be applied on the line path\n * @param {string} color Color value\n * @return {Object} Path styles\n */\n getPathStyle (color) {\n return {\n stroke: color,\n 'fill-opacity': '0'\n };\n }\n\n /**\n * Gets the nearest point closest to the given position\n * @param {number} x x position\n * @param {number} y y position\n * @return {Object} Nearest point information\n */\n getNearestPoint (x, y, config) {\n let searchRadius = config.searchRadius;\n const data = this.data();\n\n if (!data || (data && data.isEmpty())) {\n return null;\n }\n\n searchRadius = searchRadius !== undefined ? searchRadius : this.config().nearestPointThreshold;\n const point = this._voronoi.find(x, y, searchRadius);\n const dimensions = getObjProp(point, 'data', 'data', 'update');\n\n if (point) {\n const { source, rowId } = point.data.data;\n const identifiers = this.getIdentifiersFromData(source, rowId);\n return {\n id: identifiers,\n dimensions: [{\n x: dimensions.x,\n y: dimensions.y,\n width: 2,\n height: 2\n }],\n layerId: this.id()\n };\n }\n return null;\n }\n}\n","import {\n easeFns,\n selectElement,\n pathInterpolators,\n Symbols\n} from 'muze-utils';\n\nconst area = Symbols.area;\n/**\n * Draws a line from the points\n * Generates a svg path string\n * @param {Object} params Contains container, points and interpolate attribute.\n */\nconst /* istanbul ignore next */ drawArea = (params) => {\n let filteredPoints;\n const { layer, container, points, style, transition, className, connectNullData, interpolate } = params;\n\n const { effect: easeEffect, duration } = transition;\n const mount = selectElement(container);\n const curveInterpolatorFn = pathInterpolators[interpolate];\n const selection = mount.selectAll('path').data(points.length ? [points[0].className] : []);\n const [enterAreaPath, updateAreaPath] = ['enter', 'update'].map(e => area().curve(curveInterpolatorFn)\n .x(d => d[e].x)\n .y1(d => d[e].y)\n .y0(d => d[e].y0)\n .defined(d => d[e].y !== null\n ));\n\n filteredPoints = points;\n mount.attr('class', className);\n if (connectNullData) {\n filteredPoints = points.filter(d => d.update.y !== null);\n }\n const selectionEnter = selection.enter().append('path').attr('d', enterAreaPath(filteredPoints));\n selection.merge(selectionEnter).transition().ease(easeFns[easeEffect])\n .duration(duration)\n .on('end', layer.registerAnimationDoneHook())\n .attr('d', updateAreaPath(filteredPoints))\n .each(function (d) {\n const element = selectElement(this);\n element.attr('class', d);\n Object.keys(style).forEach(key => element.style(key, style[key]));\n });\n};\n\nexport default drawArea;\n","import { FieldType, InvalidAwareTypes } from 'muze-utils';\nimport { defaultConfig } from './default-config';\nimport { LineLayer } from '../line';\nimport drawArea from './renderer';\nimport './styles.scss';\nimport { STACK, ENCODING } from '../../enums/constants';\nimport {\n getAxesScales,\n positionPoints,\n getIndividualClassName,\n getValidTransformForAggFn,\n getColorMetaInf,\n resolveEncodingValues,\n sortData\n} from '../../helpers';\n\n/**\n * Area layer renders a closed path. The mark type of this layer is ```area```. This layer can be used\n * to create stacked or multi-series areas and vertical range area plots by using the encoding properties.\n *\n * To create this layer using layer configuration from canvas,\n * ```\n * canvas.layers([{\n * mark: 'area',\n * transform: {\n * type: 'stack' // Produces a stacked area.\n * }\n * }]);\n * ```\n *\n * @public\n *\n * @class\n * @module AreaLayer\n * @extends LineLayer\n */\nexport default class AreaLayer extends LineLayer {\n /** oation of line layer\n * @return {Object} Default configuration of layer\n */\n static defaultConfig () {\n return defaultConfig;\n }\n\n /**\n *\n *\n * @static\n *\n * @memberof AreaLayer\n */\n static formalName () {\n return 'area';\n }\n\n /**\n * Calculates the domain from data. It calls its parent class's method which is line layer\n * to get the domain and overwrites the domain according to its need.\n * @return {Array} Domain values\n */\n calculateDomainFromData (data, encodingFieldsInf, fieldsConfig) {\n const domains = super.calculateDomainFromData(data, fieldsConfig);\n [ENCODING.X, ENCODING.Y].forEach((type) => {\n const { [`${type}FieldType`]: fieldType } = encodingFieldsInf;\n if (fieldType === FieldType.MEASURE && domains[type] !== undefined) {\n domains[type][0] = Math.min(domains[type][0], 0);\n domains[type][1] = Math.max(0, domains[type][1]);\n }\n });\n return domains;\n }\n\n /**\n * Returns the drawing method of this layer\n * @return {Function} Draw method\n */\n getDrawFn () {\n return drawArea;\n }\n\n /**\n * Generates the x and y positions for each point\n * @param {Array} data Data Array\n * @param {Object} encoding Visual Encodings of the layer\n * @param {Object} axes Contains the axis\n * @return {Array} Array of points\n */\n translatePoints (data) {\n let points = [];\n const transformType = this.transformType();\n const axes = this.axes();\n const colorAxis = axes.color;\n const config = this.config();\n const fieldsConfig = this.data().getFieldsConfig();\n const { xField, yField, y0Field } = this.encodingFieldsInf();\n const {\n xAxis,\n yAxis\n } = getAxesScales(axes);\n const classNameFn = config.individualClassName;\n const isXDim = fieldsConfig[xField] && fieldsConfig[xField].def.type === FieldType.DIMENSION;\n const isYDim = fieldsConfig[yField] && fieldsConfig[yField].def.type === FieldType.DIMENSION;\n const key = isXDim ? 'x' : (isYDim ? 'y' : null);\n const minYVal = yAxis.domain()[0];\n const basePos = minYVal < 0 ? yAxis.getScaleValue(0) : yAxis.getScaleValue(minYVal);\n sortData(data, axes);\n points = data.map((d, i) => {\n let color;\n const xPx = xAxis.getScaleValue(d.x) + xAxis.getUnitWidth() / 2;\n const yPx = yAxis.getScaleValue(d.y);\n const y0Px = (y0Field || transformType === STACK) ? yAxis.getScaleValue(d.y0) : basePos;\n color = colorAxis.getColor(d.color);\n const invalidY = d.y instanceof InvalidAwareTypes;\n const invalidY0 = d.y0 instanceof InvalidAwareTypes;\n const resolvedValues = resolveEncodingValues({\n values: {\n x: xPx,\n y: yPx,\n y0: y0Px,\n color\n },\n data: d\n }, i, data, this);\n color = resolvedValues.color;\n const point = {\n enter: {\n x: xPx,\n y: invalidY ? null : basePos,\n y0: invalidY0 ? null : basePos\n },\n update: {\n x: xPx,\n y: invalidY ? null : resolvedValues.y,\n y0: invalidY0 ? null : resolvedValues.y0\n },\n source: d.source,\n rowId: d.rowId,\n className: classNameFn ? classNameFn(d, i, data, this) : '',\n style: {\n fill: color\n },\n meta: getColorMetaInf(color, colorAxis)\n };\n point.className = getIndividualClassName(d, i, data, this);\n this.cachePoint(d[key], point);\n return point;\n });\n points = positionPoints(this, points);\n points = points.filter((point) => {\n const update = point.update;\n return !isNaN(update.x) && !isNaN(update.y);\n });\n return points;\n }\n\n resolveTransformType () {\n this._transformType = getValidTransformForAggFn(this);\n }\n\n /**\n * Get the css styles need to be applied on the line path\n * @param {string} color Color value\n * @return {Object} Path styles\n */\n getPathStyle (color) {\n return {\n fill: color\n };\n }\n}\n\n","import { CLASSPREFIX } from '../../enums/constants';\n\nexport const defaultConfig = {\n classPrefix: CLASSPREFIX,\n defClassName: 'layer-arc',\n padding: { top: 1, bottom: 1, left: 1, right: 1 },\n className: '',\n interaction: {\n highlight: [{\n type: 'fill',\n intensity: [0, 0, -15, 0]\n }],\n fade: [{\n type: 'fill',\n intensity: [0, 0, +15, 0]\n }],\n focus: [{\n type: 'fill',\n intensity: [0, 0, +15, 0]\n }]\n },\n height: 100,\n width: 100,\n sort: '',\n colors: ['#F44336', 'blue', 'green', 'yellow', 'orange', 'purple'],\n transform: {\n type: 'identity'\n },\n encoding: {\n 'stroke-width': {\n value: '2px'\n },\n 'stroke-linejoin': {\n value: 'round'\n },\n angle: {\n value: '1'\n },\n radius: {\n value: '1'\n },\n opacity: {\n value: '1'\n },\n color: {\n value: '1'\n },\n shape: {\n value: '1'\n },\n size: {\n value: '1'\n }\n },\n transition: {\n effect: 'cubic',\n duration: 500\n },\n states: {\n highlight: {\n className: `${CLASSPREFIX}-layer-arc-highlight`\n },\n fadeout: {\n className: `${CLASSPREFIX}-layer-arc-fadeout`\n },\n selected: {\n className: `${CLASSPREFIX}-layer-arc-selected`\n }\n }\n};\n\n","import {\n makeElement,\n selectElement,\n getQualifiedClassName,\n isSimpleObject,\n Symbols,\n FieldType,\n ReservedFields\n} from 'muze-utils';\nimport { defaultConfig } from './default-config';\nimport { BaseLayer } from '../../base-layer';\nimport { getIndividualClassName, resolveEncodingValues, getColorMetaInf } from '../../helpers';\nimport { tweenPie, tweenExitPie, getPreviousPoint } from './arc-helper';\nimport './styles.scss';\n\nconst arc = Symbols.arc;\n\n/**\n * Arc Layer creates a plot with polar coordinates.\n *\n * @public\n *\n * @class\n * @module ArcLayer\n * @extends BaseLayer\n */\nexport default class ArcLayer extends BaseLayer {\n\n constructor (data, axes, config, dependencies) {\n super(data, axes, config, dependencies);\n this._prevPieData = {};\n }\n\n /**\n * returns the default configuration of the layer\n *\n * @static\n * @return {Object} Default configuration for arc layer\n * @memberof ArcLayer\n */\n static defaultConfig () {\n return defaultConfig;\n }\n\n static formalName () {\n return 'arc';\n }\n\n elemType () {\n return 'path';\n }\n\n /**\n *\n *\n * @param {Object} x\n * @param {Object} y\n * @return {}\n * @memberof ArcLayer\n */\n getNearestPoint (x, y, config = {}) {\n const dataPoint = selectElement(config.event.target).data()[0];\n if (isSimpleObject(dataPoint)) {\n const { source, rowId } = dataPoint;\n return {\n id: this.getIdentifiersFromData(source, rowId),\n layerId: this.id()\n };\n }\n return null;\n }\n\n /**\n *\n *\n * @param {*} set\n *\n * @memberof ArcLayer\n */\n getPlotElementsFromSet (set) {\n return selectElement(this.mount()).selectAll(this.elemType()).filter(d => set.indexOf(d.rowId) !== -1);\n }\n\n translatePoints (data) {\n const { angle, color: colorAxis, radius: radiusAxis } = this.axes();\n const pieIndex = {};\n const prevData = this._points[0] || [];\n const points = [];\n const angleV = {};\n\n this._prevPieData = {};\n prevData.forEach((e, index) => {\n this._prevPieData[e.rowId] = [e, index];\n pieIndex[e.index] = e;\n });\n data.forEach((d, i) => {\n const angles = angle.getScaleValue(d.angle);\n !angleV[d.angle] && (angleV[d.angle] = 0);\n const { startAngle, endAngle } = angles[angleV[d.angle]++];\n const uid = d.rowId;\n const resolvedEncodings = resolveEncodingValues({\n values: {\n radius: radiusAxis.getOuterRadius(d.radius),\n radius0: radiusAxis.getInnerRadius(d.radius0),\n color: colorAxis.getColor(d.color),\n angle0: startAngle,\n angle: endAngle,\n startAngle,\n endAngle,\n startAngle0: startAngle,\n endAngle0: endAngle\n },\n data: d\n }, i, data, this);\n const color = resolvedEncodings.color;\n points.push({\n source: d.source,\n index: i,\n enter: {},\n update: {\n angle0: resolvedEncodings.angle0,\n angle: resolvedEncodings.angle,\n radius0: resolvedEncodings.radius0,\n radius: resolvedEncodings.radius\n },\n color,\n meta: getColorMetaInf(resolvedEncodings.color, colorAxis),\n rowId: uid,\n _previousInfo: this._prevPieData[uid] ? this._prevPieData[uid][0] :\n getPreviousPoint(pieIndex, i, this)\n });\n });\n return points;\n }\n\n /**\n *\n *\n * @param {Object} container\n * @return {}\n * @memberof ArcLayer\n */\n render (container) {\n const measurement = this.measurement();\n const {\n classPrefix,\n defClassName,\n cornerRadius,\n padAngle,\n padRadius,\n transition\n } = this.config();\n const qualClassName = getQualifiedClassName(defClassName, this.id(), classPrefix);\n // This returns a function that generates the arc path based on the datum provided\n const path = this._arcFn = arc()\n .cornerRadius(cornerRadius)\n .startAngle(d => d.update.angle0 + Math.PI / 2)\n .endAngle(d => d.update.angle + Math.PI / 2)\n .padAngle(padAngle)\n .padRadius(padRadius)\n .outerRadius(d => d.update.radius)\n .innerRadius(d => d.update.radius0);\n\n this._points = this._normalizedData.map(arr => this.translatePoints(arr));\n\n // Creating the group that holds all the arcs\n const g = makeElement(selectElement(container), 'g', this._points, `${qualClassName[0]}-group`)\n .classed(`${qualClassName[1]}-group`, true)\n .attr('transform', `translate(${measurement.width / 2},\n ${measurement.height / 2})`);\n const tween = (elem) => {\n makeElement(elem, 'path', d => [d], `${qualClassName[0]}-path`)\n .style('fill', d => d.color)\n .transition()\n .duration(transition.duration)\n .on('end', this.registerAnimationDoneHook())\n .attrTween('d', (...params) => tweenPie(path, params))\n .attr('class', (d, i) => {\n const individualClass = getIndividualClassName(d, i, this._points, this);\n return `${qualClassName[0]}-path ${qualClassName[1]}-path-${d.index}\n ${individualClass}`;\n });\n };\n const consecutiveExits = [];\n let exitCounter = 0;\n const tweenExit = (elem, d) => {\n let exitArr = consecutiveExits[exitCounter];\n const oldExitCounter = exitCounter;\n if (!exitArr) {\n exitArr = [{ elem, datum: d }];\n } else if (exitArr[exitArr.length - 1].datum.index === d.index - 1) {\n exitArr.push({ elem, datum: d });\n } else {\n exitCounter++;\n }\n consecutiveExits[oldExitCounter] = exitArr;\n };\n // Creating groups for all the arcs present individually\n makeElement(g, 'g', d => d, `${qualClassName[0]}`,\n {\n update: tween,\n exit: tweenExit\n })\n .attr('class', (d, i) => `${qualClassName[0]} ${qualClassName[1]}-${i}`);\n tweenExitPie(consecutiveExits, transition, path);\n return this;\n }\n\n getPointsFromIdentifiers (identifiers) {\n if (!this.data()) {\n return [];\n }\n const fieldNames = identifiers[0];\n const values = identifiers.slice(1, identifiers.length);\n const pieSlices = selectElement(this.mount()).selectAll('path').data();\n const fieldsConfig = this.data().getFieldsConfig();\n\n const filteredPies = pieSlices.filter((tData) => {\n const { source, rowId } = tData;\n return fieldNames.every((field, idx) => {\n if (field in fieldsConfig && fieldsConfig[field].def.type === FieldType.DIMENSION) {\n return values.findIndex(d => d[idx] === source[fieldsConfig[field].index]) !== -1;\n } else if (field === ReservedFields.ROW_ID) {\n return values.findIndex(d => d[idx] === rowId) !== -1;\n } return true;\n });\n });\n\n const pieSliceInf = filteredPies[0];\n if (pieSliceInf) {\n const measurement = this.measurement();\n const centroid = this._arcFn.centroid(pieSliceInf);\n return [{\n x: centroid[0] + measurement.width / 2,\n y: centroid[1] + measurement.height / 2,\n width: 2,\n height: 2\n }];\n }\n return [];\n }\n}\n","import { getObjProp, interpolator, FieldType, selectElement } from 'muze-utils';\nimport { ANGLE, RADIUS, SIZE, COLOR } from '../../enums/constants';\n\nexport const getPreviousPoint = (prevData, currIndex, context) => {\n const prevArc = prevData[currIndex - 1];\n const nextArc = prevData[currIndex];\n const [startAngle, endAngle] = context.axes().angle.range();\n if (prevArc && nextArc) {\n return {\n update: {\n angle0: getObjProp(prevArc, 'update', 'angle'),\n angle: getObjProp(nextArc, 'update', 'angle0')\n }\n };\n } else if (!nextArc) {\n return {\n update: {\n angle0: (endAngle - 90) * Math.PI * 2 / 360,\n angle: (endAngle - 90) * Math.PI * 2 / 360\n }\n };\n }\n return {\n update: {\n angle0: (startAngle - 90) * Math.PI * 2 / 360,\n angle: (startAngle - 90) * Math.PI * 2 / 360\n }\n };\n};\n\nexport const tweenPie = (path, b) => {\n const datum = b[0];\n return function (t) {\n return path(interpolator()(datum._previousInfo, datum)(t));\n };\n};\n\nexport const tweenExitPie = (consecutiveExits, transition, path) => {\n if (consecutiveExits.length > 0) {\n consecutiveExits.forEach((consecutiveExitArr) => {\n const startAngle = consecutiveExitArr[0].datum.update.angle0;\n const endAngle = consecutiveExitArr[consecutiveExitArr.length - 1].datum.update.angle;\n const mid = (Math.PI * 2 * startAngle) / ((Math.PI * 2) + startAngle - endAngle);\n\n consecutiveExitArr.forEach((e) => {\n const { elem, datum } = e;\n\n elem.each(function () {\n const gElem = selectElement(this);\n gElem.selectAll('path')\n .transition()\n .duration(transition.duration)\n .attrTween('d', () => function (t) {\n return path(interpolator()(datum, {\n update: {\n angle0: mid,\n angle: mid,\n radius: datum.radius,\n radius0: datum.radius0\n }\n })(t));\n })\n .remove();\n gElem.remove();\n });\n });\n });\n }\n};\n\nexport const getFieldIndices = (encoding, fieldsConfig) => {\n const [angleField, radiusField, colorField, sizeField] = [ANGLE, RADIUS, COLOR, SIZE]\n .map(e => encoding[e].field);\n const [angleIndex, sizeIndex, radiusIndex] = [angleField, sizeField, radiusField]\n .map((e) => {\n const conf = fieldsConfig[e];\n if (conf && conf.def.type === FieldType.MEASURE) {\n return conf.index;\n }\n return null;\n });\n const colorIndex = getObjProp(fieldsConfig, colorField, 'index');\n return {\n angleIndex,\n sizeIndex,\n radiusIndex,\n colorIndex\n };\n};\n","import {\n setAttrs,\n setStyles,\n selectElement,\n makeElement,\n getSmartComputedStyle\n} from 'muze-utils';\n\n/**\n * Draws svg text in the specified container.\n * @param {SVGElement} container Container where labels will be appended.\n * @param {Array.} data Data of the elements.\n * @return {Selection} d3 selection of the elements.\n */\nconst drawText = (container, data, config, smartLabel) => {\n const selection = selectElement(container).selectAll('g').data(data);\n\n const selectionMerge = selection.enter().append('g')\n .each(function (dataObj) {\n setAttrs(this, dataObj.enter);\n })\n .merge(selection);\n const style = getSmartComputedStyle(selectElement(container), config.className);\n const fontSize = parseInt(style.fontSize, 10);\n\n smartLabel.setStyle(style);\n selectionMerge.each(function (dataObj) {\n const element = selectElement(this);\n const { update, text, color, textanchor, style: textStyle } = dataObj;\n const background = dataObj.background;\n let backgroundVal;\n if (backgroundVal = background.value) {\n const backgroundPadding = background.padding;\n let diff;\n const { width, height } = smartLabel.getOriSize(dataObj.text);\n const backgroundEl = makeElement(element, 'rect', [1]);\n\n if (textanchor === 'end') {\n diff = width;\n } else if (textanchor === 'start') {\n diff = 0;\n } else {\n diff = width / 2;\n }\n\n setAttrs(backgroundEl.node(), {\n x: update.x - diff - backgroundPadding / 2,\n y: update.y - fontSize - backgroundPadding / 2,\n width: width + backgroundPadding,\n height: height + backgroundPadding\n });\n background && setStyles(backgroundEl, {\n background: backgroundVal\n });\n }\n const textEl = makeElement(element, 'text', d => [d]).text(text);\n const textNode = textEl.node();\n textStyle && setStyles(textNode, textStyle);\n color && setStyles(textNode, {\n fill: color\n });\n dataObj.className && textEl.classed(dataObj.className, true);\n setAttrs(textNode, update);\n textEl.attr('text-anchor', textanchor);\n textEl.attr('alignment-baseline', dataObj['alignment-baseline']);\n textEl.attr('transform', `rotate(${dataObj.rotation} ${update.x} ${update.y})`);\n });\n selection.exit().remove();\n return selection;\n};\n\nexport default drawText;\n","import { CLASSPREFIX } from '../../enums/constants';\n\nexport const defaultConfig = {\n defClassName: 'layer-text',\n classPrefix: CLASSPREFIX,\n className: '',\n transform: {\n type: 'identity'\n },\n interaction: {\n highlight: [{\n type: 'fill',\n intensity: [0, 0, -15, 0]\n }],\n fade: [{\n type: 'fill',\n intensity: [0, 0, +15, 0]\n }],\n focus: [{\n type: 'fill',\n intensity: [0, 0, +15, 0]\n }]\n },\n transition: {\n effect: 'cubic',\n duration: 1000\n },\n encoding: {\n color: {},\n size: {},\n radius: {},\n angle: {},\n text: {\n value: '',\n formatter: (val, i, data, context) => {\n const valueParser = context.valueParser();\n return valueParser(val);\n },\n background: {\n padding: 10\n }\n },\n rotation: {\n value: 0\n },\n 'alignment-baseline': {\n value: 'middle'\n }\n },\n states: {\n highlight: {\n className: `${CLASSPREFIX}-layer-text-highlight`\n },\n fadeout: {\n className: `${CLASSPREFIX}-layer-text-fadeout`\n },\n selected: {\n className: `${CLASSPREFIX}-layer-text-selected`\n }\n }\n};\n","import {\n getQualifiedClassName,\n selectElement,\n setStyles,\n createElements\n} from 'muze-utils';\nimport { BaseLayer } from '../../base-layer';\nimport drawText from './renderer';\nimport { defaultConfig } from './default-config';\nimport { positionPoints, getIndividualClassName, resolveEncodingValues, getColorMetaInf, toCartesianCoordinates }\n from '../../helpers';\nimport { TEXT_ANCHOR_MIDDLE, ENCODING } from '../../enums/constants';\n\nimport './styles.scss';\n\nconst defaultEncoding = defaultConfig.encoding;\nconst alignmentBaseLine = defaultEncoding['alignment-baseline'].value;\nconst defRotation = defaultEncoding.rotation.value;\n\nconst pointTranslators = {\n polar: (data, config, layerInst) => {\n let points = [];\n const axes = layerInst.axes();\n const encoding = layerInst.config().encoding;\n const textEncoding = encoding.text;\n const { radius: radiusAxis, color: colorAxis, angle: angleAxis } = axes;\n const { formatter: textFormatter } = textEncoding;\n const backgroundEncoding = encoding.text.background;\n const backgroundPadding = backgroundEncoding.padding;\n const backgroundValue = backgroundEncoding.value;\n const angleV = {};\n for (let i = 0, len = data.length; i < len; i++) {\n const d = data[i];\n const source = d.source;\n const text = d.text;\n\n const color = colorAxis.getColor(d.color);\n const radius = radiusAxis.getOuterRadius(d.radius);\n const angles = angleAxis.getScaleValue(d.angle);\n !angleV[d.angle] && (angleV[d.angle] = 0);\n const { startAngle, endAngle } = angles[angleV[d.angle]++];\n\n const angle = (startAngle + endAngle) / 2;\n const resolvedVal = resolveEncodingValues({\n values: {\n angle,\n radius,\n color,\n text,\n startAngle,\n endAngle,\n rotation: defRotation,\n 'alignment-baseline': alignmentBaseLine\n },\n data: d\n }, i, data, layerInst);\n const point = {\n enter: {},\n update: {\n angle: resolvedVal.angle,\n radius: resolvedVal.radius\n },\n text: textFormatter ? textFormatter(text, i, data, layerInst) : resolvedVal.text,\n color: resolvedVal.color,\n rotation: resolvedVal.rotation,\n background: {\n value: backgroundValue instanceof Function ? backgroundValue(d, i, data, layerInst) : null,\n padding: backgroundPadding\n },\n 'alignment-baseline': resolvedVal['alignment-baseline'],\n meta: getColorMetaInf(resolvedVal.color, colorAxis),\n style: {},\n source,\n rowId: d.rowId\n };\n\n point.className = getIndividualClassName(d, i, data, layerInst);\n points.push(point);\n }\n\n points = toCartesianCoordinates(positionPoints(layerInst, points), layerInst.measurement());\n\n points = points.filter((d) => {\n const update = d.update;\n return !isNaN(update.x) && !isNaN(update.y);\n });\n return points;\n },\n cartesian: (data, config, layerInst) => {\n let points = [];\n const axes = layerInst.axes();\n const colorAxis = axes.color;\n const encoding = layerInst.config().encoding;\n const textEncoding = encoding.text;\n const { field: textField, value, formatter: textFormatter } = textEncoding;\n const fieldsConfig = layerInst.data().getFieldsConfig();\n\n const backgroundEncoding = encoding.text.background;\n const backgroundPadding = backgroundEncoding.padding;\n const backgroundValue = backgroundEncoding.value;\n const textFieldIndex = textField ? fieldsConfig[textField] && fieldsConfig[textField].index : -1;\n const xEnc = ENCODING.X;\n const yEnc = ENCODING.Y;\n for (let i = 0, len = data.length; i < len; i++) {\n const d = data[i];\n const row = d.source;\n const textValue = textField ? row[textFieldIndex] : value;\n\n const [xPx, yPx] = [xEnc, yEnc].map(type => (axes[type] ? axes[type].getScaleValue(d[type]) +\n axes[type].getUnitWidth() / 2 : 0));\n\n const color = colorAxis.getColor(d.color, colorAxis);\n const resolvedEncodings = resolveEncodingValues({\n values: {\n x: xPx,\n y: yPx,\n text: textValue,\n color,\n rotation: defRotation,\n 'alignment-baseline': alignmentBaseLine\n },\n data: d\n }, i, data, layerInst);\n const point = {\n enter: {},\n update: {\n x: resolvedEncodings.x,\n y: resolvedEncodings.y\n },\n text: textFormatter(resolvedEncodings.text, i, data, layerInst),\n color: resolvedEncodings.color,\n background: {\n value: backgroundValue instanceof Function ? backgroundValue(d, i, data, layerInst) : null,\n padding: backgroundPadding\n },\n 'alignment-baseline': resolvedEncodings['alignment-baseline'],\n rotation: resolvedEncodings.rotation,\n meta: getColorMetaInf(resolvedEncodings.color, colorAxis),\n style: {},\n source: d.source,\n rowId: d.rowId\n };\n\n point.className = getIndividualClassName(d, i, data, layerInst);\n points.push(point);\n }\n\n points = positionPoints(layerInst, points);\n points = points.filter((d) => {\n const update = d.update;\n return !isNaN(update.x) && !isNaN(update.y);\n });\n return points;\n }\n};\n\n/**\n * This layer is used to create labels for each data point. It has an encoding property ```text```\n * which determines from which field's data the value of the label will be taken. The text encoding\n * property is necessary for the layer to render the text.The mark type of this layer is ```text```.\n *\n * @public\n *\n * @class\n * @module TextLayer\n * @extends BaseLayer\n */\nexport default class TextLayer extends BaseLayer {\n /**\n * Returns the default configuration of the text layer\n * @return {Object} Default configuration of the text layer\n */\n static defaultConfig () {\n return defaultConfig;\n }\n\n static formalName () {\n return 'text';\n }\n\n elemType () {\n return 'text';\n }\n\n getPointTranslator (val) {\n return pointTranslators[val];\n }\n\n /**\n * Generates an array of objects containing x, y, width and height of the points from the data\n * @param {Array.} data Data Array\n * @param {Object} encoding Config\n * @param {Object} axes Axes object\n * @return {Array.} Array of points\n */\n translatePoints (data, config = {}) {\n return pointTranslators[this.coord()](data, config, this);\n }\n\n /**\n * Renders the plot in the given container\n * @param {SVGElement} container SVGElement which will hold the plot\n * @return {textLayer} Instance of text layer\n */\n render (container) {\n const config = this.config();\n const normalizedData = this._normalizedData;\n const className = config.className;\n const qualifiedClassName = getQualifiedClassName(config.defClassName, this.id(), config.classPrefix);\n const containerSelection = selectElement(container);\n\n containerSelection.classed(`${qualifiedClassName.join(' ')} ${className}`, true);\n createElements({\n data: normalizedData,\n append: 'g',\n selector: 'g',\n container,\n each: (dataArr, group) => {\n const node = group.node();\n const points = this.translatePoints(dataArr, {}, this);\n setStyles(node, {\n 'text-anchor': TEXT_ANCHOR_MIDDLE\n });\n drawText(node, points, {\n className: qualifiedClassName[0]\n }, this._dependencies.smartLabel);\n }\n });\n return this;\n }\n}\n","/* global Element, document */\nimport {\n makeElement,\n selectElement,\n easeFns,\n objectIterator,\n getSymbol\n} from 'muze-utils';\n\n/**\n *\n *\n * @param {*} str\n *\n */\nconst checkPath = (str) => {\n if (/^[mzlhvcsqta]\\s*[-+.0-9][^mlhvzcsqta]+/i.test(str) && /[\\dz]$/i.test(str) && str.length > 4) {\n return true;\n }\n return false;\n};\n\n/**\n *\n *\n * @param {*} d\n * @param {*} elem\n */\nconst createShape = function (d, groupElement) {\n const { shape, size, update } = d;\n\n if (shape instanceof Promise) {\n shape.then((res) => {\n d.shape = res;\n createShape(d, groupElement);\n });\n } else if (shape instanceof Element) {\n let newShape = shape.cloneNode(true);\n\n if (newShape.nodeName.toLowerCase() === 'img') {\n const src = newShape.src || newShape.href;\n newShape = document.createElementNS('http://www.w3.org/2000/svg', 'image');\n newShape.setAttribute('href', src);\n }\n const shapeElement = selectElement(newShape);\n if (newShape.nodeName === 'path' || newShape.nodeName === 'image') {\n shapeElement.attr('transform', `scale(${size / 100})`);\n } else {\n shapeElement.attr('height', size);\n shapeElement.attr('width', size);\n }\n shapeElement.attr('x', -size / 2);\n shapeElement.attr('y', -size / 2);\n makeElement(groupElement, () => newShape, [1]);\n } else if (typeof shape === 'string') {\n let pathStr;\n if (checkPath(shape)) {\n pathStr = shape;\n } else {\n pathStr = getSymbol(shape).size(size)(update);\n }\n makeElement(groupElement, 'path', data => [data]).attr('d', pathStr);\n } else {\n d.shape = 'circle';\n createShape(d, groupElement);\n }\n};\n\n/**\n * Draws symbols using d3 symbol api\n * @param {Object} params Contains the svg container, points and other symbol related attributes.\n */\n/* istanbul ignore next */ const drawSymbols = (params) => {\n const { layer, container, points, transition, className } = params;\n const { duration, effect, disabled } = transition;\n const mount = selectElement(container);\n\n mount.attr('class', className);\n return makeElement(mount, 'g', points, null, {\n enter: (group, d) => {\n const { enter } = d;\n group.attr('transform', `translate(${enter.x},${enter.y})`);\n },\n update: (group, d) => {\n createShape(d, group);\n const { update, style } = d;\n objectIterator(style, key => group.style(key, style[key]));\n group.attr('class', className);\n group.classed(d.className, true);\n if (!disabled) {\n group = group.transition()\n .duration(transition.duration)\n .on('end', layer.registerAnimationDoneHook());\n }\n group.attr('transform', `translate(${update.x},${update.y})`);\n },\n exit: (exitGroup) => {\n if (!disabled) {\n exitGroup.transition().ease(easeFns[effect])\n .duration(duration)\n .on('end', () => exitGroup.remove())\n .style('fill-opacity', 0)\n .style('stroke-opacity', 0);\n } else {\n exitGroup.remove();\n }\n }\n }, params.keyFn);\n};\n\nexport default drawSymbols;\n","import { CLASSPREFIX } from '../../enums/constants';\n\nexport const defaultConfig = {\n defClassName: 'layer-point',\n className: '',\n classPrefix: CLASSPREFIX,\n defColorStyle: 'stroke',\n interaction: {\n highlight: [{\n type: 'fill',\n intensity: [0, 0, -20, 0]\n }],\n fade: [{\n type: 'fill',\n intensity: [0, 0, +20, 0]\n }],\n focus: [{\n type: 'fill',\n intensity: [0, 0, +20, 0]\n }\n ]\n },\n innerPadding: 0.1,\n nearestPointThreshold: 10,\n transform: {\n type: 'identity'\n },\n transition: {\n effect: 'cubic',\n duration: 1000\n },\n encoding: {\n size: {\n value: 30\n },\n color: { },\n shape: {\n value: 'circle'\n },\n x: {},\n y: {},\n strokeOpacity: {\n value: 0.5\n },\n fillOpacity: {\n value: 0.5\n }\n },\n shapes: ['circle', 'cross', 'diamond', 'square', 'star', 'wye', 'triangle'],\n sizes: [20, 30, 40, 50, 60, 70]\n};\n","import {\n Voronoi,\n selectElement,\n getQualifiedClassName,\n makeElement,\n FieldType,\n Scales\n} from 'muze-utils';\nimport { BaseLayer } from '../../base-layer';\nimport drawSymbols from './renderer';\nimport { defaultConfig } from './default-config';\nimport { ENCODING } from '../../enums/constants';\nimport {\n attachDataToVoronoi,\n positionPoints,\n getPlotMeasurement,\n getIndividualClassName,\n getMarkId,\n getColorMetaInf,\n resolveEncodingValues\n} from '../../helpers';\n\nimport './styles.scss';\n\n/**\n * This layer is used to create various symbols for each data point. This is commonly used in\n * scatterplot visualizations. The mark type of this layer is ```point```.\n *\n * @public\n *\n * @class\n * @module PointLayer\n * @extends BaseLayer\n */\nexport default class PointLayer extends BaseLayer {\n\n /**\n * Creates an instance of PointLayer.\n * @param {*} args\n * @memberof PointLayer\n */\n constructor (...args) {\n super(...args);\n this._voronoi = new Voronoi();\n this._bandScale = Scales.band();\n }\n\n elemType () {\n return 'g';\n }\n\n /**\n * Returns the default configuration of the point layer\n * @return {Object} Default configuration of the point layer\n */\n static defaultConfig () {\n return defaultConfig;\n }\n\n static defaultPolicy (conf, userConf) {\n const config = BaseLayer.defaultPolicy(conf, userConf);\n const encoding = config.encoding;\n const transform = config.transform;\n const colorField = encoding.color && encoding.color.field;\n\n if (colorField) {\n transform.groupBy = colorField;\n }\n return config;\n }\n\n static formalName () {\n return 'point';\n }\n\n static drawFn () {\n return drawSymbols;\n }\n\n /**\n * Generates an array of objects containing x, y, width and height of the points from the data\n * @param {Array.} data Data Array\n * @param {Object} encoding Config\n * @param {Object} axes Axes object\n * @return {Array.} Array of points\n */\n translatePoints (data, config = {}) {\n let points = [];\n const encoding = this.config().encoding;\n const axes = this.axes();\n const {\n x,\n y\n } = encoding;\n const xField = x.field;\n const yField = y.field;\n const { size: sizeAxis, shape: shapeAxis } = axes;\n const fieldsConfig = this.data().getFieldsConfig();\n const isXDim = fieldsConfig[xField] && fieldsConfig[xField].def.type === FieldType.DIMENSION;\n const isYDim = fieldsConfig[yField] && fieldsConfig[yField].def.type === FieldType.DIMENSION;\n const key = isXDim ? ENCODING.X : (isYDim ? ENCODING.Y : null);\n const measurement = this.measurement();\n const colorAxis = axes.color;\n const { x: offsetX, y: offsetY } = config.offset;\n\n for (let i = 0, len = data.length; i < len; i++) {\n const d = data[i];\n const size = sizeAxis.getSize(d.size);\n const shape = shapeAxis.getShape(d.shape);\n\n let [xPx, yPx] = [ENCODING.X, ENCODING.Y].map((type) => {\n const value = d[type] === null ? undefined : d[type];\n const measure = type === ENCODING.X ? measurement.width : measurement.height;\n return !encoding[type].field ? measure / 2 : axes[type].getScaleValue(value);\n });\n\n xPx += offsetX;\n yPx += offsetY;\n\n let color = colorAxis.getColor(d.color);\n\n const resolvedEncodings = resolveEncodingValues({\n values: {\n x: xPx,\n y: yPx,\n color,\n shape,\n size,\n data: d\n },\n data: d\n }, i, data, this);\n color = resolvedEncodings.color;\n const style = {\n fill: color,\n stroke: color\n };\n const pos = {\n x: resolvedEncodings.x,\n y: resolvedEncodings.y\n };\n\n if (!isNaN(xPx) && !isNaN(yPx)) {\n const point = {\n enter: pos,\n update: pos,\n shape: resolvedEncodings.shape,\n size: Math.abs(resolvedEncodings.size),\n meta: getColorMetaInf(color, colorAxis),\n style,\n source: d.source,\n rowId: d.rowId\n };\n point.className = getIndividualClassName(d, i, data, this);\n points.push(point);\n this.cachePoint(d[key], point);\n }\n }\n points = positionPoints(this, points);\n return points;\n }\n\n /**\n * Renders the plot in the given container.\n *\n * @param {SVGElement} container SVGElement which will hold the plot\n * @return {BarLayer} Instance of bar layer\n */\n render (container) {\n let maxSize = 0;\n let seriesClassName;\n const config = this.config();\n const keys = this._transformedData.map(d => d.key);\n const { transition, className, defClassName, classPrefix } = config;\n const normalizedData = this._normalizedData;\n const containerSelection = selectElement(container);\n const qualifiedClassName = getQualifiedClassName(defClassName, this.id(), classPrefix);\n this._points = [];\n this._pointMap = {};\n\n containerSelection.classed(qualifiedClassName.join(' '), true).classed(className, true);\n\n this._points = this.generateDataPoints(normalizedData, keys);\n const schema = this.data().getSchema();\n makeElement(container, 'g', this._points, null, {\n update: (group, points) => {\n maxSize = Math.max(maxSize, ...points.map(d => d.size));\n seriesClassName = `${qualifiedClassName[0]}`;\n this.constructor.drawFn()({\n layer: this,\n container: group.node(),\n points,\n interpolate: config.interpolate,\n className: seriesClassName,\n transition,\n keyFn: v => getMarkId(v.source, schema)\n });\n }\n }, data => data[0].rowId);\n this._maxSize = Math.sqrt(maxSize / Math.PI) * 2;\n attachDataToVoronoi(this._voronoi, this._points);\n return this;\n }\n\n generateDataPoints (normalizedData, keys) {\n const [widthMetrics, heightMetrics] = getPlotMeasurement(this, keys);\n const offsetXValues = widthMetrics.offsetValues || [];\n const offsetYValues = heightMetrics.offsetValues || [];\n return normalizedData.map((dataArr, i) => {\n const measurementConf = this.getMeasurementConfig(offsetXValues[i], offsetYValues[i], widthMetrics.span,\n heightMetrics.span);\n return this.translatePoints(dataArr, measurementConf);\n }).filter(d => d.length);\n }\n\n getMeasurementConfig (offsetX, offsetY, widthSpan, heightSpan) {\n return {\n offset: {\n x: (offsetX || 0) + widthSpan / 2,\n y: (offsetY || 0) + heightSpan / 2\n },\n span: {\n x: widthSpan,\n y: heightSpan\n }\n };\n }\n\n /**\n * Gets the nearest point from a position.\n * @param {number} x x position\n * @param {number} y y position\n * @return {Object} Point details\n */\n getNearestPoint (x, y) {\n const distanceLimit = Math.max(this._maxSize, this.config().nearestPointThreshold);\n\n if (!this.data()) {\n return null;\n }\n\n const point = this._voronoi.find(x, y, distanceLimit);\n const dimensions = point && point.data.data.update;\n const radius = point ? Math.sqrt(point.data.data.size / Math.PI) : 0;\n\n if (point) {\n const { source, rowId } = point.data.data;\n const identifiers = this.getIdentifiersFromData(source, rowId);\n return {\n id: identifiers,\n dimensions: [{\n x: dimensions.x,\n y: dimensions.y,\n width: radius,\n height: radius\n }],\n layerId: this.id()\n };\n }\n return null;\n }\n}\n","import { makeElement, easeFns } from 'muze-utils';\n\n/**\n *\n *\n * @param {*} elem\n * @param {*} datum\n * @param {*} index\n * @param {*} context\n */\nconst transitionBars = (layer, elem, datum, index, context) => {\n const { transition } = context;\n const { duration, disabled, effect } = transition;\n const selection = elem;\n\n const selTransition = disabled ? selection :\n selection.transition()\n .duration(duration)\n .ease(easeFns[effect])\n .on('end', layer.registerAnimationDoneHook());\n const update = datum.update || datum;\n const updateStyle = datum.style || {};\n datum.className && selection.classed(datum.className, true);\n Object.entries(update).forEach(attr => (!isNaN(attr[1]) && selTransition.attr(attr[0], attr[1])));\n Object.entries(updateStyle).forEach(styleObj => selection.style(styleObj[0], styleObj[1]));\n};\n\n/**\n *\n *\n * @param {*} elem\n * @param {*} d\n */\nconst barEnterFn = (elem, d) => {\n const selection = elem;\n const enter = d.enter || {};\n Object.entries(enter).forEach(attr => (!isNaN(attr[1]) && selection.attr(attr[0], attr[1])));\n};\n\n/**\n * Draws rectangles by using d3 selection\n * @param {Object} params Contains container element and points\n * @return {Selection} Bar Selection\n */\n/* istanbul ignore next */ export const drawRects = (params) => {\n const { layer, points, container, keyFn } = params;\n const updateFns = {\n enter (elem, d) { barEnterFn(elem, d); },\n update (elem, d, i) { transitionBars(layer, elem, d, i, params); }\n };\n return makeElement(container, 'rect', points, null, updateFns, keyFn);\n};\n","import { CLASSPREFIX } from '../../enums/constants';\n\nexport const defaultConfig = {\n classPrefix: CLASSPREFIX,\n defClassName: 'layer-bar',\n className: '',\n interaction: {\n highlight: [{\n type: 'fill',\n intensity: [0, 0, -15, 0]\n }],\n fade: [{\n type: 'fill',\n intensity: [0, 0, +15, 0]\n }],\n focus: [{\n type: 'fill',\n intensity: [0, 0, +15, 0]\n }]\n },\n transform: {\n type: 'stack'\n },\n transition: {\n effect: 'cubic',\n duration: 1000\n },\n innerPadding: 0.1,\n encoding: {\n color: {},\n x: {},\n y: {},\n x0: {},\n y0: {}\n },\n states: {\n highlight: {\n className: `${CLASSPREFIX}-layer-bar-highlight`\n },\n fadeout: {\n className: `${CLASSPREFIX}-layer-bar-fadeout`\n },\n selected: {\n className: `${CLASSPREFIX}-layer-bar-selected`\n }\n }\n};\n\n","import { MeasureSubtype, DimensionSubtype } from 'muze-utils';\nimport { STACK } from '../../enums/constants';\nimport { positionPoints, getIndividualClassName, getColorMetaInf, resolveEncodingValues } from '../../helpers';\n\nconst positionRetriever = {\n x: (xPx, isNegativeVal, barBasePos) => (isNegativeVal ? [xPx, barBasePos] : [barBasePos, xPx]),\n y: (yPx, isNegativeVal, barBasePos) => (isNegativeVal ? [barBasePos, yPx] : [yPx, barBasePos])\n};\n\n/**\n *\n *\n * @param {*} type\n * @param {*} fieldInfo\n * @param {*} config\n * @param {*} data\n *\n */\nconst resolveDimByField = (type, axesInfo, config, data) => {\n const spaceType = type === 'x' ? 'width' : 'height';\n const [fieldType, axis] = [config[`${type}FieldType`], axesInfo[`${type}Axis`]];\n const {\n transformType,\n sizeEncoding,\n sizeConfig,\n measurement\n } = config;\n\n const sizeValue = sizeEncoding.value;\n let enter = 0;\n let pos;\n let space = 0;\n let enterSpace = 0;\n if (fieldType !== undefined) {\n if (config[`${type}0Field`]) {\n const minVal = data[type];\n const maxVal = data[`${type}0`];\n let min;\n let max;\n if (minVal === null || maxVal === null) {\n return {\n enterSpace: undefined,\n enter: undefined,\n pos: undefined,\n space: undefined\n };\n } else if (fieldType === MeasureSubtype.CONTINUOUS || fieldType === DimensionSubtype.TEMPORAL) {\n min = Math.min(minVal, maxVal);\n max = Math.max(minVal, maxVal);\n } else {\n min = minVal;\n max = maxVal;\n }\n const scales = type === 'x' ? [min, max] : [max, min];\n pos = axis.getScaleValue(scales[0]) + axis.getUnitWidth() / 2;\n space = Math.abs(axis.getScaleValue(scales[1]) - pos) + axis.getUnitWidth() / 2;\n\n enter = pos;\n enterSpace = 0;\n } else if (fieldType === DimensionSubtype.CATEGORICAL || fieldType === DimensionSubtype.TEMPORAL) {\n pos = axis.getScaleValue(data[type]) +\n (sizeConfig[type === 'x' ? 'barWidthOffset' : 'barHeightOffset'] || 0);\n\n space = sizeConfig[type === 'x' ? 'barWidth' : 'barHeight'];\n if (sizeValue !== undefined) {\n const diffPx = sizeValue * space;\n space -= diffPx;\n pos += diffPx / 2;\n }\n enter = pos;\n enterSpace = space;\n } else {\n const minDomVal = axis.domain()[0];\n const barBasePos = minDomVal < 0 ? axis.getScaleValue(0) : axis.getScaleValue(minDomVal);\n pos = axis.getScaleValue(data[type]);\n let endPos = axis.getScaleValue(data[`${type}0`]);\n\n enterSpace = 0;\n const isNegativeVal = data[type] < 0;\n if (transformType !== STACK) {\n [pos, endPos] = positionRetriever[type](pos, isNegativeVal, barBasePos);\n }\n space = Math.abs(pos - endPos);\n enter = barBasePos;\n }\n } else {\n pos = 0;\n space = measurement[spaceType];\n }\n\n return {\n enterSpace,\n enter,\n pos,\n space\n };\n};\n\n/**\n *\n *\n * @param {*} data\n * @param {*} config\n * @param {*} axes\n *\n */\nconst resolveDimensions = (data, config, axes) => {\n const axesInfo = {\n xAxis: axes.x,\n yAxis: axes.y\n };\n const {\n enterSpace: enterWidth,\n enter: enterX,\n pos: xPos,\n space: width\n } = resolveDimByField('x', axesInfo, config, data);\n\n const {\n enterSpace: enterHeight,\n enter: enterY,\n pos: yPos,\n space: height\n } = resolveDimByField('y', axesInfo, config, data);\n return {\n enter: {\n x: enterX,\n y: enterY,\n width: enterWidth,\n height: enterHeight\n },\n update: {\n x: xPos,\n y: yPos,\n width,\n height\n }\n };\n};\n\n/**\n * Generates an array of objects containing x, y, width and height of the bars from the data\n * @param {Array.} data Data Array\n * @param {Object} encoding Config\n * @param {Object} axes Axes object\n * @param {Object} conf config object for point generation\n * @return {Array.} Array of points\n */\nexport const getTranslatedPoints = (context, data, sizeConfig) => {\n let points = [];\n const encoding = context.config().encoding;\n const axes = context.axes();\n const colorAxis = axes.color;\n const sizeEncoding = encoding.size || {};\n const {\n x0Field,\n y0Field,\n xFieldSubType,\n yFieldSubType\n } = context.encodingFieldsInf();\n const measurement = context.measurement();\n const isXDim = xFieldSubType === DimensionSubtype.CATEGORICAL || xFieldSubType === DimensionSubtype.TEMPORAL;\n const isYDim = yFieldSubType === DimensionSubtype.CATEGORICAL || yFieldSubType === DimensionSubtype.TEMPORAL;\n const key = isXDim ? 'x' : (isYDim ? 'y' : null);\n const transformType = context.transformType();\n\n for (let i = 0, len = data.length; i < len; i++) {\n const d = data[i];\n const dimensions = resolveDimensions(d, {\n xFieldType: xFieldSubType,\n yFieldType: yFieldSubType,\n x0Field,\n y0Field,\n transformType,\n measurement,\n sizeConfig,\n sizeEncoding\n }, axes);\n\n let color = colorAxis.getColor(d.color);\n\n const update = dimensions.update;\n const resolvedEncodings = resolveEncodingValues({\n values: {\n x: update.x,\n y: update.y,\n width: update.width,\n height: update.height,\n color\n },\n data: d\n }, i, data, context);\n color = resolvedEncodings.color;\n const { x, y, width, height } = resolvedEncodings;\n if (!isNaN(x) && !isNaN(y) && d.rowId !== undefined) {\n let point = null;\n point = {\n enter: dimensions.enter,\n update: {\n x,\n y,\n width,\n height\n },\n source: d.source,\n rowId: d.rowId,\n style: {\n fill: color\n },\n meta: getColorMetaInf(color, colorAxis)\n };\n point.className = getIndividualClassName(d, i, data, context);\n points.push(point);\n // Store each point in a hashmap with key as the dimensional or temporal field value\n context.cachePoint(d[key], point);\n }\n }\n\n points = positionPoints(context, points);\n return points;\n};\n","import {\n getQualifiedClassName,\n selectElement,\n createElements,\n clipElement,\n DimensionSubtype,\n FieldType,\n MeasureSubtype,\n Scales,\n getNearestValue\n} from 'muze-utils';\nimport { BaseLayer } from '../../base-layer';\nimport { drawRects } from './renderer';\nimport { defaultConfig } from './default-config';\nimport { getPlotMeasurement, getValidTransformForAggFn } from '../../helpers';\nimport './styles.scss';\nimport { getTranslatedPoints } from './bar-helper';\n\nconst MEASURE = FieldType.MEASURE;\nconst scaleBand = Scales.band;\n\n/**\n * Bar layer creates rectangle marks. The mark type of this layer is ```bar```. This layer can be used\n * to create stacked or grouped bars, range bars, heatmap plots and also reference bands by using\n * the encoding properties.\n *\n * @public\n *\n * @class\n * @module BarLayer\n * @extends BaseLayer\n */\nexport default class BarLayer extends BaseLayer {\n /**\n * Creates an instance of bar layer\n */\n constructor (...params) {\n super(...params);\n this._bandScale = scaleBand();\n this._plotPadding = {\n x: 0,\n y: 0\n };\n this._plotSpan = {\n x: 0,\n y: 0\n };\n this._pointMap = {};\n }\n\n /**\n *\n *\n *\n * @memberof BarLayer\n */\n elemType () {\n return 'rect';\n }\n\n /**\n *\n *\n * @static\n *\n * @memberof BarLayer\n */\n static formalName () {\n return 'bar';\n }\n\n /**\n * Returns the default configuration of the bar layer\n * @return {Object} Default configuration of the bar layer\n */\n static defaultConfig () {\n return defaultConfig;\n }\n\n /**\n *\n *\n * @static\n * @param {*} conf\n * @param {*} userConf\n *\n * @memberof BarLayer\n */\n static defaultPolicy (conf, userConf) {\n const config = BaseLayer.defaultPolicy(conf, userConf);\n const encoding = config.encoding;\n const colorField = encoding.color.field;\n const transform = config.transform;\n\n if (colorField) {\n transform.groupBy = colorField;\n }\n return config;\n }\n\n /**\n *\n *\n * @param {*} data\n * @param {*} fieldsConfig\n *\n * @memberof BarLayer\n */\n calculateDomainFromData (data, encodingFieldInf, fieldsConfig) {\n const domain = super.calculateDomainFromData(data, encodingFieldInf, fieldsConfig);\n ['x', 'y'].forEach((d) => {\n if (encodingFieldInf[`${d}FieldType`] === MEASURE && domain[d]) {\n if (encodingFieldInf[`${d}0Field`]) {\n domain[d] = domain[d].sort((a, b) => a - b);\n } else {\n domain[d][0] = Math.min(domain[d][0], 0);\n domain[d][1] = Math.max(0, domain[d][1]);\n }\n }\n });\n return domain;\n }\n\n /**\n * Generates an array of objects containing x, y, width and height of the bars from the data\n * @param {Array.} data Data Array\n * @param {Object} encoding Config\n * @param {Object} axes Axes object\n * @param {Object} conf config object for point generation\n * @return {Array.} Array of points\n */\n translatePoints (data, sizeConfig) {\n return getTranslatedPoints(this, data, sizeConfig);\n }\n\n /**\n * Renders the plot in the given container\n * @param {SVGGroup} container SVGGroup where plot will be rendered.\n * @return {BarLayer} Instance of bar layer.\n */\n render (container) {\n const config = this.config();\n const transition = config.transition;\n const normalizedDataArr = this._normalizedData;\n const transformedData = this._transformedData;\n const keys = transformedData.map(d => d.key);\n const fieldsConfig = this.data().getFieldsConfig();\n const axes = this.axes();\n const height = axes.y && axes.y.scale().range()[0];\n const width = axes.x && axes.x.scale().range()[1];\n const defClassName = config.defClassName;\n const qualifiedClassName = getQualifiedClassName(defClassName, this.id(), config.classPrefix);\n const className = config.className;\n const containerSelection = selectElement(container);\n const dimensions = Object.values(fieldsConfig).filter(e => e.def.type === FieldType.DIMENSION)\n .map(e => e.index);\n containerSelection.classed(qualifiedClassName.join(' '), true);\n containerSelection.classed(className, true);\n clipElement(container, {\n x: 0,\n y: 0,\n width,\n height\n }, `id-${this.id()}`);\n\n this._points = this.generateDataPoints(normalizedDataArr, keys);\n\n createElements({\n data: this._points,\n container,\n selector: 'g',\n append: 'g',\n each: (points, group, i) => {\n const seriesClassName = `${qualifiedClassName[0]}-${keys[i] || i}`.toLowerCase();\n group.style('display', 'block');\n drawRects({\n layer: this,\n container: group.node(),\n points,\n className: seriesClassName,\n transition,\n style: {},\n keyFn: d => dimensions.map(key => d.source[key]).join('-')\n });\n }\n });\n return this;\n }\n\n /**\n *\n *\n * @param {*} normalizedData\n * @param {*} keys\n *\n * @memberof BarLayer\n */\n generateDataPoints (normalizedData, keys) {\n const [barWidthMetrics, barHeightMetrics] = getPlotMeasurement(this, keys);\n const barWidthOffsets = barWidthMetrics.offsetValues || [];\n const barHeightOffsets = barHeightMetrics.offsetValues || [];\n this._plotSpan = {\n x: barWidthMetrics.groupSpan || 0,\n y: barHeightMetrics.groupSpan || 0\n };\n this._plotPadding = {\n x: barWidthMetrics.padding || 0,\n y: barHeightMetrics.padding || 0\n };\n\n this._pointMap = {};\n return normalizedData.map((data, i) => this.translatePoints(data,\n {\n barWidth: barWidthMetrics.span,\n barWidthOffset: barWidthOffsets[i] || 0,\n barHeight: barHeightMetrics.span,\n barHeightOffset: barHeightOffsets[i] || 0\n }));\n }\n\n getPlotPadding () {\n return this._plotPadding;\n }\n\n resolveTransformType () {\n this._transformType = getValidTransformForAggFn(this);\n }\n\n /**\n * Gets the nearest point of the position passed.\n * @param {number} x x position\n * @param {number} y y position\n * @return {Object} Nearest point.\n */\n getNearestPoint (x, y) {\n if (!this.data()) {\n return null;\n }\n let axis;\n let value;\n let points;\n let uniqueFieldType;\n let uniqueFieldIndex;\n let filterData;\n let identifiers;\n let pointFound = null;\n const dataModel = this.data();\n const dataObj = dataModel.getData();\n const fieldsConfig = dataModel.getFieldsConfig();\n const axes = this.axes();\n const data = dataObj.data;\n const pointMap = this._pointMap;\n const {\n xField,\n yField,\n xFieldSubType,\n yFieldSubType\n } = this.encodingFieldsInf();\n\n if (xFieldSubType === MeasureSubtype.CONTINUOUS) {\n axis = axes.y;\n value = axis.invert(y);\n uniqueFieldIndex = fieldsConfig[yField].index;\n uniqueFieldType = yFieldSubType;\n } else {\n axis = axes.x;\n value = axis.invert(x);\n uniqueFieldIndex = fieldsConfig[xField].index;\n uniqueFieldType = xFieldSubType;\n }\n\n if (uniqueFieldType === DimensionSubtype.CATEGORICAL) {\n points = pointMap[value];\n }\n\n if (uniqueFieldType === DimensionSubtype.TEMPORAL) {\n filterData = [...new Set(data.map(d => d[uniqueFieldIndex]))];\n value = getNearestValue(filterData, value);\n points = pointMap[value];\n }\n const len = points && points.length;\n points && points.sort((p1, p2) => p1.update.y - p2.update.y);\n for (let i = 0; i < len; i++) {\n const point = points[i];\n const update = point.update;\n if (x >= update.x && x <= (update.width + update.x) && y >= update.y && y <= (update.height + update.y)) {\n pointFound = point;\n break;\n }\n pointFound = null;\n }\n\n const values = pointFound && pointFound.source;\n if (values) {\n identifiers = this.getIdentifiersFromData(values, pointFound.rowId);\n }\n return pointFound ? {\n dimensions: [pointFound.update],\n id: identifiers,\n layerId: this.id()\n } : pointFound;\n }\n\n getPlotSpan () {\n return this._plotSpan;\n }\n\n hasPlotSpan () {\n return true;\n }\n}\n","import { CLASSPREFIX } from '../../enums/constants';\n\nexport const defaultConfig = {\n defClassName: 'layer-tick',\n className: '',\n classPrefix: CLASSPREFIX,\n interaction: {\n highlight: [{\n type: 'stroke',\n intensity: [0, 0, -15, 0]\n }],\n fade: [{\n type: 'stroke',\n intensity: [0, 0, 15, 0]\n }],\n focus: [{\n type: 'stroke',\n intensity: [0, 0, 15, 0]\n }]\n },\n innerPadding: 0.1,\n transform: {\n type: 'identity'\n },\n transition: {\n effect: 'cubic',\n duration: 1000\n },\n interpolate: 'linear',\n encoding: {\n color: { },\n x: {},\n y: {},\n x0: {},\n y0: {},\n radius: {},\n radius0: {},\n angle: {},\n angle0: {},\n strokeOpacity: {\n value: 0.5\n },\n fillOpacity: {\n value: 0.5\n }\n },\n states: {\n highlight: {\n className: `${CLASSPREFIX}-layer-tick-highlight`\n },\n fadeout: {\n className: `${CLASSPREFIX}-layer-tick-fadeout`\n },\n selected: {\n className: `${CLASSPREFIX}-layer-tick-selected`\n }\n }\n};\n","import { selectElement, Symbols, pathInterpolators } from 'muze-utils';\n\nconst line = Symbols.line;\n\n/**\n * Draws ticks by using d3 selection\n * @param {Object} params Contains container element and points\n * @return {Selection} Ticks Selection\n */\nexport default /* istanbul ignore next */ (params) => {\n const { points, container, keyFn, className, interpolate } = params;\n const mount = selectElement(container);\n const ticks = mount.selectAll('path').data(points, keyFn);\n const ticksEnter = ticks.enter().append('path');\n\n mount.attr('class', className || '');\n ticksEnter.each(function (d) {\n const selection = selectElement(this);\n const enter = d.enter || {};\n Object.entries(enter).forEach(attr => (!isNaN(attr[1]) && selection.attr(attr[0], attr[1])));\n });\n\n ticks.exit().remove();\n return ticks.merge(ticksEnter)\n .each(function (d) {\n const selection = selectElement(this);\n const update = d.update;\n const updateStyle = d.style || {};\n const x0 = update.x0 !== undefined ? update.x0 : update.x;\n const y0 = update.y0 !== undefined ? update.y0 : update.y;\n const curveInterpolatorFn = pathInterpolators[interpolate];\n const linepath = line()\n .curve(curveInterpolatorFn)\n .x(e => e[0])\n .y(e => e[1]);\n d.className && selection.classed(d.className, true);\n selection.attr('d', linepath([[update.x, update.y], [x0, y0]]));\n Object.entries(updateStyle).forEach(styleObj => selection.style(styleObj[0], styleObj[1]));\n });\n};\n\n","import { FieldType } from 'muze-utils';\nimport { PointLayer } from '../point';\nimport { defaultConfig } from './default-config';\nimport { ENCODING } from '../../enums/constants';\nimport drawTicks from './renderer';\nimport './styles.scss';\nimport { getAxesScales, positionPoints, getIndividualClassName,\n getColorMetaInf, resolveEncodingValues, toCartesianCoordinates } from '../../helpers';\n\nconst pointTranslators = {\n polar: (data, config = {}, layerInst) => {\n const axes = layerInst.axes();\n let points = [];\n const { radius: radiusAxis, angle: angleAxis, angle0: angle0Axis } = axes;\n const measurement = layerInst.measurement();\n\n const colorAxis = axes.color;\n const angleV = {};\n const angle0V = {};\n for (let i = 0, len = data.length; i < len; i++) {\n const d = data[i];\n const color = colorAxis.getColor(d.color);\n const angles = angleAxis.getScaleValue(d.angle);\n !angleV[d.angle] && (angleV[d.angle] = 0);\n const { startAngle, endAngle } = angles[angleV[d.angle]++];\n const angles0 = angle0Axis.getScaleValue(d.angle0);\n !angle0V[d.angle0] && (angle0V[d.angle0] = 0);\n const { startAngle: startAngle0, endAngle: endAngle0 } = angles0[angle0V[d.angle0]++];\n const radius = radiusAxis.getOuterRadius(d.radius);\n const angle = (startAngle + endAngle) / 2;\n const angle0 = (startAngle0 + endAngle0) / 2;\n const resolvedVal = resolveEncodingValues({\n values: {\n radius,\n radius0: radiusAxis.getInnerRadius(d.radius0),\n color,\n angle,\n angle0,\n startAngle,\n endAngle,\n startAngle0,\n endAngle0\n },\n data: d\n }, i, data, layerInst);\n const point = {\n enter: {},\n update: {\n radius: resolvedVal.radius,\n radius0: resolvedVal.radius0,\n angle: resolvedVal.angle,\n angle0: resolvedVal.angle0\n },\n style: {\n stroke: resolvedVal.color\n },\n source: d.source,\n rowId: d.rowId,\n meta: getColorMetaInf(resolvedVal.color, colorAxis)\n };\n point.className = getIndividualClassName(d, i, data, layerInst);\n points.push(point);\n }\n points = toCartesianCoordinates(positionPoints(layerInst, points), measurement, true);\n return points;\n },\n cartesian: (data, config = {}, layerInst) => {\n const axes = layerInst.axes();\n let points = [];\n const {\n xAxis,\n yAxis\n } = getAxesScales(axes);\n const {\n xField,\n yField,\n x0Field,\n y0Field,\n xFieldType,\n yFieldType\n } = layerInst.encodingFieldsInf();\n const isXDim = xFieldType === FieldType.DIMENSION;\n const isYDim = yFieldType === FieldType.DIMENSION;\n const key = isXDim ? ENCODING.X : (isYDim ? ENCODING.Y : null);\n const measurement = layerInst.measurement();\n const colorAxis = axes.color;\n const { x: offsetX, y: offsetY } = config.offset;\n const { x: xSpan, y: ySpan } = config.span;\n for (let i = 0, len = data.length; i < len; i++) {\n let xPx;\n let x0Px;\n let y0Px;\n let yPx;\n const d = data[i];\n const row = d.source;\n if (xField) {\n xPx = xAxis.getScaleValue(d.x) + offsetX;\n x0Px = xPx + xSpan;\n }\n\n if (yField) {\n yPx = yAxis.getScaleValue(d.y) + offsetY;\n y0Px = yPx !== null ? yPx + ySpan : null;\n }\n\n if (!xField) {\n xPx = 0;\n x0Px = measurement.width;\n if (!isNaN(yPx)) {\n yPx += ySpan / 2;\n y0Px = yPx;\n }\n }\n\n if (!yField) {\n yPx = 0;\n y0Px = measurement.height;\n x0Px = xPx += xSpan / 2;\n }\n\n if (x0Field) {\n x0Px = xAxis.getScaleValue(d.x0) + xSpan;\n yPx += ySpan / 2;\n y0Px -= ySpan / 2;\n }\n\n if (y0Field) {\n y0Px = yAxis.getScaleValue(d.y0) + ySpan;\n xPx += xSpan / 2;\n x0Px -= xSpan / 2;\n }\n const color = colorAxis.getColor(d.color);\n const resolvedEncodings = resolveEncodingValues({\n values: {\n x: xPx,\n y: yPx,\n x0: x0Px,\n y0: y0Px,\n color\n },\n data: d\n }, i, data, layerInst);\n\n if (!isNaN(xPx) && !isNaN(yPx)) {\n const point = {\n enter: {},\n update: {\n x: resolvedEncodings.x,\n y: resolvedEncodings.y,\n x0: resolvedEncodings.x0,\n y0: resolvedEncodings.y0\n },\n style: {\n stroke: resolvedEncodings.color\n },\n source: row,\n rowId: d.rowId,\n meta: getColorMetaInf(resolvedEncodings.color, colorAxis)\n };\n point.className = getIndividualClassName(d, i, data, layerInst);\n points.push(point);\n layerInst.cachePoint(d[key], point);\n }\n }\n points = positionPoints(layerInst, points);\n return points;\n }\n};\n\n/**\n * This layer is used to create small lines. The orientation of the line is determined by the positional\n * encoding properties x0 and y0. The mark type of the layer is ```tick```.\n *\n * @public\n *\n * @class\n * @module TickLayer\n * @extends BaseLayer\n */\nexport default class TickLayer extends PointLayer {\n\n /**\n *\n *\n * @staticg\n *\n * @memberof TickLayer\n */\n static defaultConfig () {\n return defaultConfig;\n }\n\n /**\n *\n *\n * @static\n *\n * @memberof TickLayer\n */\n static formalName () {\n return 'tick';\n }\n\n /**\n *\n *\n * @static\n *\n * @memberof TickLayer\n */\n static drawFn () {\n return drawTicks;\n }\n\n /**\n *\n *\n *\n * @memberof TickLayer\n */\n elemType () {\n return 'path';\n }\n\n /**\n * Generates an array of objects containing x, y, width and height of the points from the data\n * @param {Array.} data Data Array\n * @param {Object} encoding Config\n * @param {Object} axes Axes object\n * @return {Array.} Array of points\n */\n translatePoints (data, config) {\n return pointTranslators[this.coord()](data, config, this);\n }\n\n getMeasurementConfig (offsetX, offsetY, widthSpan, heightSpan) {\n return {\n offset: {\n x: (offsetX || 0),\n y: (offsetY || 0)\n },\n span: {\n x: widthSpan,\n y: heightSpan\n }\n };\n }\n}\n","export const AREA_LAYER = 'area';\nexport const ARC_LAYER = 'arc';\nexport const LINE_LAYER = 'line';\nexport const TEXT_LAYER = 'text';\nexport const POINT_LAYER = 'point';\nexport const BAR_LAYER = 'bar';\nexport const TICK_LAYER = 'tick';\nexport const SIMPLE_LAYER = 'simple';\nexport const BASE_LAYER = 'base';\n","import { isSimpleObject, mergeRecursive, getObjProp } from 'muze-utils';\n\nconst parseLayerDefinition = (sink, definition, layerDef, layerType) => {\n for (const key in definition) {\n if (Object.hasOwnProperty.call(definition, key)) {\n let strs;\n let propValue;\n const def = definition[key];\n if (isSimpleObject(def)) {\n sink[key] = {};\n parseLayerDefinition(sink[key], def, layerDef, layerType);\n } else if (typeof def === 'string' && (strs = def.split('.')) && strs[0] === layerType) {\n propValue = getObjProp(layerDef, ...strs.slice(1, strs.length));\n if (propValue !== undefined) {\n sink[key] = propValue;\n }\n } else {\n sink[key] = def;\n }\n }\n }\n};\n\nconst sanitizeEncoding = (encoding) => {\n // Create object for each encoding value if encoding value is a string\n for (const key in encoding) {\n if (typeof encoding[key] === 'string') {\n encoding[key] = {\n field: encoding[key]\n };\n }\n }\n};\n\n/**\n * Layer Factory creates layers based on the layer type. All types of layers needs to register in\n * the layer factory. For getting a layer instance, getLayer method needs to invoked with the\n * layerType and other arguments. It also registers the definition of composite layers.\n *\n * @public\n *\n * @module LayerFactory\n */\nconst layerFactory = (() => {\n const compositeLayers = {};\n const factoryObj = {\n setLayerRegistry: (reg) => {\n factoryObj._layerRegistry = reg;\n },\n getSerializedConf: (mark, layerDef) => {\n let serializedDefs;\n const defs = compositeLayers[mark];\n const newConf = mergeRecursive({}, layerDef);\n\n // If it is a composite layer then resolve all the definitions of each unit layer\n if (defs) {\n serializedDefs = defs.map((unitLayerDef) => {\n const sDef = {};\n parseLayerDefinition(sDef, unitLayerDef, newConf, mark);\n sanitizeEncoding(sDef.encoding);\n return sDef;\n });\n } else {\n const encoding = newConf.encoding;\n // Create object for each encoding value if encoding value is a string\n sanitizeEncoding(encoding);\n serializedDefs = newConf;\n }\n\n return serializedDefs;\n },\n getLayerInstance: (layerDef, ...params) => {\n const layerRegistry = factoryObj._layerRegistry;\n layerDef = !(layerDef instanceof Array) ? [layerDef] : layerDef;\n const instances = layerDef.map((layerObj) => {\n const layerConstructor = layerRegistry[layerObj.mark];\n return layerConstructor.create(...params);\n });\n return instances.length === 1 ? instances[0] : instances;\n },\n getLayerClass: mark => factoryObj._layerRegistry[mark],\n /**\n * Registers a new composite layer definition in the layer factory.\n *\n * @public\n *\n * @param {string} layerType Mark type of the new composite layer.\n * @param {Array} layerDefs Layer definitions of the composite layer.\n */\n composeLayers: (layerType, layerDefs) => {\n compositeLayers[layerType] = layerDefs;\n },\n sanitizeLayerConfig: (layerDef) => {\n const newConf = mergeRecursive({}, layerDef);\n sanitizeEncoding(newConf.encoding);\n return newConf;\n }\n };\n return factoryObj;\n})();\n\nexport default layerFactory;\n","import layerFactory from './layer-factory';\n\nexport default layerFactory;\n","import { AreaLayer } from './layers/area';\nimport { ArcLayer } from './layers/arc';\nimport { LineLayer } from './layers/line';\nimport { TextLayer } from './layers/text';\nimport { PointLayer } from './layers/point';\nimport { BarLayer } from './layers/bar';\nimport { BaseLayer } from './base-layer';\nimport * as LAYER_TYPES from './enums/layer-types';\nimport { TickLayer } from './layers/tick';\n\nexport const DEFAULT_LAYERS = {\n [LAYER_TYPES.AREA_LAYER]: AreaLayer,\n [LAYER_TYPES.ARC_LAYER]: ArcLayer,\n [LAYER_TYPES.LINE_LAYER]: LineLayer,\n [LAYER_TYPES.TEXT_LAYER]: TextLayer,\n [LAYER_TYPES.POINT_LAYER]: PointLayer,\n [LAYER_TYPES.TICK_LAYER]: TickLayer,\n [LAYER_TYPES.BAR_LAYER]: BarLayer,\n [LAYER_TYPES.BASE_LAYER]: BaseLayer\n};\n","import { ROWS, COLUMNS, COLOR, SHAPE, SIZE, DETAIL, LAYERS, TRANSFORM, CONFIG } from '../enums/constants';\n\n/**\n * This is the local options semantics based on which setters getters are created and reactivity is initiated.\n * This local object is only valid for Artboard.\n * Artboard merges global and local object both to the model\n *\n * Format\n * PROPERTRY_NAME: {\n * value: // default value of the property,\n * meta: {\n * typeCheck: // The setter value will be checked using this. If the value is function then the setter value\n * // is passed as args.\n * typeExpected: // The output of typecheck action will be tested against this. Truthy value will set the\n * // value to the setter\n * sanitizaiton: // Need for sanitization before type is checked\n * }\n * }\n *\n * @module\n */\n\nexport default {\n [CONFIG]: {},\n [ROWS]: {},\n [COLUMNS]: {},\n [COLOR]: {},\n [SHAPE]: {},\n [SIZE]: {},\n [DETAIL]: {},\n [LAYERS]: {},\n [TRANSFORM]: {}\n};\n","import { ERROR_MSG } from 'muze-utils';\n\n/**\n * Interfaces for VisualGroup. Any new VisualGroup has to implement this class.\n * @class SimpleGroup\n */\nclass SimpleGroup {\n\n /**\n * This method is used to set or get the DataModel instance.\n *\n * @param {DataModel | undefined} dataModel Instance of datamodel.\n\n * @memberof SimpleGroup\n */\n data () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * This method is used to set or get the group specific configuration\n * properties\n *\n * @param {Object | undefined} configObj The input configuration.\n * or instance of visual group.\n * @memberof SimpleGroup\n */\n config () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * This method is used to return a serialized representation of the\n * instance's properties.\n *\n * @memberof SimpleGroup\n */\n serialize () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * This method is used to get or set the measurement object which houses\n * layout properties like width and height.\n *\n * @param {Object | undefined} mObj The measurement properties.\n * @memberof SimpleGroup\n */\n measurement () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n}\n\nexport default SimpleGroup;\n","import { ERROR_MSG } from 'muze-utils';\n\n/**\n *\n *\n * @export\n * @class Variable\n */\nexport default class Variable {\n\n /**\n *\n *\n * @memberof Variable\n */\n type () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n *\n *\n * @memberof Variable\n */\n toString () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n}\n","import Variable from './variable';\n\n/**\n * This is a wrapper on top of multiple variables which are of same type but they are shown in the same axis.This is\n * required in case of range plots or ohlc plots where one plot is mapped to multiple measure fields. At that time,\n * we need to create a composed variable from multiple variables. This class just wraps them into one variable instance\n * and provides methods to get the type and other common functionalities which can be performed on a simple variable\n * instance.\n *\n * @public\n * @class ComposeVars\n */\nclass ComposedVars extends Variable {\n\n /**\n * Creates an instance of ComposeVars.\n *\n * @param {Array} vars Array of SimpleVars.\n */\n constructor (...vars) {\n super();\n this.vars(vars);\n }\n\n vars (...params) {\n if (params.length) {\n this._vars = params[0];\n return this;\n }\n return this._vars;\n }\n\n data (...dm) {\n if (dm.length) {\n this.vars().forEach(d => d.data(dm[0]));\n this._data = dm[0];\n return this;\n }\n return this._data;\n }\n\n /**\n * Get all the field names from composed variable instance.\n *\n * @public\n * @return {Array} Array of field names.\n */\n getMembers () {\n const vars = this.vars();\n return vars.map(member => member.getMembers()[0]);\n }\n\n /**\n * Type of field associated with this composed variable.\n *\n * @return {string} Type of variable (Measure/Dimension).\n */\n type () {\n return this.vars()[0].type();\n }\n\n toString () {\n return this.vars().map(d => d.toString()).join(',');\n }\n\n /**\n * Returns the number formatter function of the variable.\n *\n * @return {Function} Number formatter function of the variable.\n */\n numberFormat () {\n return this.vars()[0].numberFormat();\n }\n\n format (values) {\n return this.vars()[0].format(values);\n }\n\n /**\n * Returns the subtype of the fields associated with this variable instance.\n *\n * @public\n * @return {string} Subtype of the variable.\n */\n subtype () {\n return this.vars()[0].subtype();\n }\n\n /**\n * Returns the consecutive minimum difference of the field values.\n *\n * @public\n * @return {number} Minimum consecutive difference.\n */\n getMinDiff () {\n return this.vars()[0].getMinDiff();\n }\n\n /**\n * Returns the display name of the fields.\n *\n * @return {string} returns the display name.\n */\n displayName () {\n return this.vars().map(d => d.displayName()).join(',');\n }\n}\n\nexport default ComposedVars;\n","import { DateTimeFormatter, retrieveFieldDisplayName, DimensionSubtype } from 'muze-utils';\nimport Variable from './variable';\n\n/**\n * This is a wrapper on top of fields passed in rows or columns in canvas. This is used to get the type of field or\n * get min difference from the field values.\n *\n * @public\n * @class SimpleVariable\n */\nexport default class SimpleVariable extends Variable {\n\n /**\n * Creates an instance of simple variable instance.\n *\n * @param {string} name Field name.\n */\n constructor (name) {\n super();\n this.oneVar(name);\n }\n\n /**\n * Gets the field name associated with this variable instance.\n *\n * @public\n * @return {string} Name of the field.\n */\n oneVar (...oneV) {\n if (oneV.length) {\n this._oneVar = oneV[0];\n return this;\n }\n return this._oneVar;\n }\n\n data (...dm) {\n if (dm.length) {\n this._data = dm[0];\n return this;\n }\n return this._data;\n }\n\n toString () {\n return this.oneVar();\n }\n\n /**\n * Gets the number formatter function of this variable.\n *\n * @public\n * @return {Function} Number formatter function.\n */\n numberFormat () {\n if (this.type() === 'measure') {\n const formatter = this.data().getFieldspace().getMeasure()[this.oneVar()];\n return formatter.numberFormat();\n } return val => val;\n }\n\n format (values) {\n if (values && this.subtype() === 'temporal') {\n const formatter = this.data().getFieldspace().getDimension()[this.oneVar()].schema().format;\n const dtFormat = new DateTimeFormatter(formatter);\n values = values.map(e => dtFormat.getNativeDate(e));\n }\n return values;\n }\n\n /**\n * Returns a formatter function which transforms the input value to its original form.\n *\n * @public\n * @return {Function} Returns raw formatter function.\n */\n rawFormat () {\n if (this.subtype() === DimensionSubtype.TEMPORAL) {\n const dateFormat = this.data().getFieldspace().getDimension()[this.oneVar()].schema().format;\n return val => DateTimeFormatter.formatAs(val, dateFormat);\n }\n return val => val;\n }\n\n /**\n * Return the field names associated with this variable instance.\n *\n * @public\n * @return {Array} Array of fields.\n */\n getMembers () {\n return [this.oneVar()];\n }\n\n /**\n * Returns the type of the variable. Whether it is measure or dimension.\n *\n * @public\n * @return {string} Type of variable.\n */\n type () {\n const fieldDef = this.data().getFieldsConfig()[this.oneVar()].def;\n return fieldDef.type;\n }\n\n /**\n * Returns the subtype of the variable. Subtype can be categorical or temporal. If no subtype is found, then it\n * returns the type of the variable.\n *\n * @public\n * @return {string} Subtype of variable.\n */\n subtype () {\n const fieldDef = this.data().getFieldsConfig()[this.oneVar()].def;\n return fieldDef.subtype || fieldDef.type;\n }\n\n /**\n * Returns the minimum consecutive difference between the data values of this variable.\n *\n * @return {number} Minimum consecutive difference.\n */\n getMinDiff () {\n const fieldSpace = this.data().getFieldspace();\n return fieldSpace.fieldsObj()[this.oneVar()].minimumConsecutiveDifference();\n }\n\n /**\n * Returns true if two variable instances are same.If both variable has the same field names, they are equal.\n *\n * @return {Boolean} Whether two variable instances are same.\n */\n equals (varInst) {\n return this.oneVar() === varInst.oneVar();\n }\n\n /**\n * Returns the display name of the field.\n *\n * @return {string} returns the display name.\n */\n displayName () {\n return retrieveFieldDisplayName(this.data(), this.oneVar());\n }\n}\n","import { ComposedVars, SimpleVariable } from '../variable';\nimport { DIMENSION, COLUMNS, ROWS, TEMPORAL } from '../enums/constants';\n\n/**\n * Gets the list of fields in a sorted order by measurement and dimension\n *\n * @param {Array} fieldList List of fields in the view\n * @param {Object} fieldMap Mapping of fields in the datamodel\n * @return {Array} fields sorted by measurement and dimensions\n */\nconst orderFields = (fieldArray, type) => {\n const dimensionArr = [[], []];\n const measureArr = [[], []];\n const temporalArr = [[], []];\n const categoricalArr = [[], []];\n\n fieldArray.forEach((fieldList, index) => {\n fieldList.forEach((field) => {\n if (field.type() === DIMENSION) {\n dimensionArr[index].push(field);\n field.subtype() === TEMPORAL ? temporalArr[index].push(field) : categoricalArr[index].push(field);\n } else {\n measureArr[index].push(field);\n }\n });\n });\n\n const numOfMeasures = measureArr[0].length + (measureArr[1] ? measureArr[1].length : 0);\n\n // Single array of fields\n if (!fieldArray[1]) {\n // Push measures to bottom\n measureArr[1] = type === COLUMNS ? measureArr[0] : [];\n // Push measures to left\n measureArr[0] = type !== COLUMNS ? measureArr[0] : [];\n // Bottom and right dimensions empty\n dimensionArr[1] = [];\n // Left and top filled with dimensions\n dimensionArr[0] = dimensionArr[0];\n if (numOfMeasures === 0) {\n const allDimensions = [...dimensionArr[0], ...dimensionArr[1]];\n if (type === COLUMNS) {\n dimensionArr[1] = allDimensions[allDimensions.length - 1] ? [allDimensions[allDimensions.length - 1]]\n : [];\n allDimensions.splice(-1, 1);\n } else {\n dimensionArr[1] = [];\n }\n dimensionArr[0] = [...allDimensions];\n }\n }\n\n if (dimensionArr[0].length && dimensionArr[1].length && numOfMeasures > 0) {\n dimensionArr[0] = [...dimensionArr[0], ...dimensionArr[1]];\n dimensionArr[1] = [];\n }\n return {\n fields: dimensionArr.map((list, i) => (i === 1 ?\n measureArr[i].concat(dimensionArr[i]) : dimensionArr[i].concat(measureArr[i]))),\n dimensions: [...dimensionArr[0], ...dimensionArr[1]],\n measures: [...measureArr[0], ...measureArr[1]],\n temporal: [...temporalArr[0], ...temporalArr[1]],\n categorical: [...categoricalArr[0], ...categoricalArr[1]]\n };\n};\n\n/**\n * Gets the list of normalized fields\n *\n * @param {Array} fields List of fields in the view\n * @param {Object} fieldMap Mapping of fields in the datamodel\n * @return {Array} fields normalized by measurement and dimensions\n */\nconst normalizeFields = (config, type) => {\n const fieldsArr = [];\n const fields = config[type];\n\n if (!(fields[0] instanceof Array)) {\n fieldsArr[0] = fields;\n } else {\n fieldsArr[0] = fields[0] || [];\n fieldsArr[1] = fields[1] || [];\n }\n return fieldsArr;\n};\n\n/**\n *\n *\n * @param {*} fields\n * @param {*} datamodel\n *\n */\nconst convertToVar = (datamodel, fields) => {\n const vars = [];\n\n fields && fields.forEach((field) => {\n if (field instanceof ComposedVars) {\n vars.push(field);\n field.data(datamodel);\n } else {\n vars.push(new SimpleVariable(field).data(datamodel));\n }\n });\n return vars;\n};\n\n/**\n *\n *\n * @param {*} rows\n * @param {*} columns\n * @param {*} datamodel\n *\n */\nexport const transformFields = (datamodel, config) => {\n const [rowsInfo, columnsInfo] = [ROWS, COLUMNS].map((fields) => {\n const normalizedFields = normalizeFields(config, fields);\n const norFields = [convertToVar(datamodel, normalizedFields[0])];\n\n if (normalizedFields[1]) {\n norFields[1] = convertToVar(datamodel, normalizedFields[1]);\n }\n return orderFields(norFields, fields);\n });\n const {\n fields: rows,\n dimensions: rowDimensions,\n measures: rowMeasures,\n temporal: rowTemporalFields,\n categorical: rowCategoricalFields\n } = rowsInfo;\n const {\n fields: columns,\n dimensions: columnDimensions,\n measures: columnMeasures,\n temporal: columnTemporalFields,\n categorical: columnCategoricalFields\n } = columnsInfo;\n return {\n rows,\n rowDimensions,\n rowMeasures,\n rowTemporalFields,\n rowCategoricalFields,\n columns,\n columnTemporalFields,\n columnCategoricalFields,\n columnDimensions,\n columnMeasures\n };\n};\n","import { ERROR_MSG, mergeRecursive } from 'muze-utils';\nimport { transformFields } from './field-sanitizer';\nimport { getHeaderAxisFrom } from '../group-helper/group-utils';\nimport { ROW, COLUMN } from '../enums/constants';\n\n/**\n *\n *\n * @export\n * @class VisualEncoder\n */\nexport default class VisualEncoder {\n\n /**\n *\n *\n * @memberof VisualEncoder\n */\n createAxis () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n *\n *\n * @memberof VisualEncoder\n */\n setCommonDomain () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n *\n *\n * @memberof VisualEncoder\n */\n getLayerConfig () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n fieldInfo (...info) {\n if (info.length) {\n this._fieldInfo = mergeRecursive(this._fieldInfo || {}, info[0]);\n return this;\n }\n return this._fieldInfo;\n }\n\n /**\n *\n *\n * @param {*} datamodel\n * @param {*} config\n *\n * @memberof VisualEncoder\n */\n fieldSanitizer (datamodel, config) {\n this.fieldInfo(transformFields(datamodel, config));\n return this.fieldInfo();\n }\n\n /**\n *\n *\n * @param {*} params\n *\n * @memberof VisualEncoder\n */\n axisFrom (...params) {\n if (params.length) {\n this._axisFrom = params[0];\n return this;\n }\n return this._axisFrom;\n }\n\n /**\n *\n *\n * @param {*} params\n *\n * @memberof VisualEncoder\n */\n headerFrom (...params) {\n if (params.length) {\n this._headerFrom = params[0];\n return this;\n }\n return this.__headerFrom;\n }\n\n /**\n *\n *\n * @param {*} axisFrom\n *\n * @memberof CartesianEncoder\n */\n setAxisAndHeaders (axisFrom = {}, fields) {\n const [rowHeader, rowAxis] = getHeaderAxisFrom(ROW, fields.rows, axisFrom);\n const [colHeader, colAxis] = getHeaderAxisFrom(COLUMN, fields.columns, axisFrom);\n\n this.axisFrom({\n row: rowAxis,\n column: colAxis\n });\n this.headerFrom({\n row: rowHeader,\n column: colHeader\n });\n return this;\n }\n}\n","import { ContinousAxis, BandAxis, TimeAxis, ColorAxis, SizeAxis, ShapeAxis } from '@chartshq/muze-axis';\n\nexport const scaleMaps = {\n linear: ContinousAxis,\n band: BandAxis,\n temporal: TimeAxis,\n size: SizeAxis,\n color: ColorAxis,\n shape: ShapeAxis\n};\n","import { ScaleType } from '@chartshq/muze-axis';\n\n/**\n * Map of DataModel types to associated field types.\n */\nexport const dataTypeScaleMap = {\n dimension: ScaleType.BAND,\n categorical: ScaleType.BAND,\n temporal: ScaleType.TIME,\n measure: ScaleType.LINEAR,\n continuous: ScaleType.LINEAR\n};\n","import { mergeRecursive, getObjProp } from 'muze-utils';\nimport { AxisOrientation } from '@chartshq/muze-axis';\nimport { ENCODING } from '@chartshq/visual-layer';\nimport { scaleMaps } from '../enums/scale-maps';\nimport { getAxisType, getAxisKey } from '../group-helper';\nimport { dataTypeScaleMap } from '../data-type-scale-map';\nimport { CATEGORICAL, TEMPORAL, BAR, LINE, POINT, BOTH, Y, COLOR, SHAPE, SIZE, ANGLE0 } from '../enums/constants';\n\n/**\n *\n *\n * @param {*} axisInfo\n * @param {*} field\n * @param {*} axesCreators\n *\n */\nconst getAxisConfig = (axisInfo, field, axesCreators, indices, facetFields) => {\n let axisOrientation;\n const { index, axisIndex, axisType } = axisInfo;\n const { config, position } = axesCreators;\n const { rowIndex, columnIndex } = indices;\n const rawUserAxisConfig = config.axes ? (config.axes[axisType] || {}) : {};\n\n // Change config object to a function if not already one\n const userAxisConfigFn = typeof rawUserAxisConfig !== 'function' ?\n () => rawUserAxisConfig : rawUserAxisConfig;\n const userAxisConfig = userAxisConfigFn(rowIndex, columnIndex, {\n axisFields: field.getMembers(),\n facetFields\n });\n\n // If current config does not specifes config for an axis, retain old config\n if (!userAxisConfig) {\n return {};\n }\n\n const {\n LEFT,\n RIGHT,\n TOP,\n BOTTOM\n } = AxisOrientation;\n const allOrientations = axisType === Y ? [LEFT, RIGHT] : [TOP, BOTTOM];\n\n if (position === BOTH) {\n axisOrientation = allOrientations[axisIndex];\n } else {\n axisOrientation = position;\n }\n const axisConfig = {\n id: `${axisType}-${index}-${axisIndex}`,\n name: field.displayName(),\n field: field.toString(),\n numberFormat: field.numberFormat(),\n orientation: axisOrientation,\n showAxisName: true,\n show: true,\n type: dataTypeScaleMap[field.subtype()]\n };\n userAxisConfig.tickValues = field.format(userAxisConfig.tickValues);\n userAxisConfig.domain = field.format(userAxisConfig.domain);\n\n return mergeRecursive(axisConfig, userAxisConfig);\n};\n\n/**\n *\n *\n * @param {*} axisInfo\n * @param {*} field\n * @param {*} axesCreators\n *\n */\nconst createSimpleAxis = (axisConfig, field, axesCreators) => {\n const { labelManager } = axesCreators;\n const Cls = scaleMaps[dataTypeScaleMap[field.subtype()]];\n const simpleAxis = new Cls(axisConfig, { labelManager });\n return simpleAxis;\n};\n\nexport const getAdjustedDomain = (max, min) => {\n const y1ratio = max[0] / (max[0] - min[0]);\n const y2ratio = max[1] / (max[1] - min[1]);\n\n // adjust min/max values for positive negative values zero line etc\n let allSameSign = false;\n\n // if all numbers are positive set floor to zero\n if (min[0] > 0 && min[1] > 0 && min[1] > 0 && max[1] > 0) {\n allSameSign = true;\n min[0] = 0;\n min[1] = 0;\n }\n\n // if all numbers are negative set ceiling to zero\n if (min[0] < 0 && min[1] < 0 && min[1] < 0 && max[1] < 0) {\n allSameSign = true;\n max[0] = 0;\n max[1] = 0;\n }\n\n // align zero line if necessary\n if (!allSameSign && y1ratio !== y2ratio) {\n if (y1ratio < y2ratio) {\n // adjust min[1]\n min[1] = min[0] / max[0] * max[1];\n } else {\n // adjust min[0]\n min[0] = min[1] / max[1] * max[0];\n }\n }\n return [\n [min[0], max[0]],\n [min[1], max[1]]\n ];\n};\n\n/**\n *\n *\n * @param {*} axisType\n * @param {*} fieldInfo\n * @param {*} axesCreators\n * @param {*} groupAxes\n *\n */\nexport const generateAxisFromMap = (axisType, fieldInfo, axesCreators, axesInfo, indices, facetFields) => {\n let axisKey;\n const { groupAxes, valueParser } = axesInfo;\n const currentAxes = [];\n const { fields, index } = fieldInfo;\n const { cacheMaps } = axesCreators;\n const map = cacheMaps[`${axisType}AxesMap`];\n\n const commonAxisKey = getAxisKey(axisType, index);\n fields.forEach((field, axisIndex) => {\n axisKey = getAxisKey(axisType, index, axisIndex, dataTypeScaleMap[field.subtype()]);\n const axisConfig = getAxisConfig({ index, axisIndex, axisType }, field, axesCreators, indices, facetFields);\n\n let axis;\n if (!map.has(axisKey)) {\n axis = createSimpleAxis(axisConfig, field, axesCreators);\n } else {\n axis = map.get(axisKey);\n axis._rotationLock = false;\n axis.config(axisConfig);\n }\n axis.valueParser(valueParser);\n currentAxes.push(axis);\n map.set(axisKey, axis);\n });\n\n if (currentAxes.length) {\n map.set(commonAxisKey, currentAxes);\n groupAxes.add(commonAxisKey);\n }\n\n return currentAxes;\n};\n\nexport const sanitizeIndividualLayerConfig = (encodingConfigs, def) => {\n [COLOR, SHAPE, SIZE].forEach((axis) => {\n if (encodingConfigs[axis] && encodingConfigs[axis].field) {\n def.forEach((conf) => {\n conf.encoding = conf.encoding || {};\n !conf.encoding[axis] && (conf.encoding[axis] = {});\n conf.encoding[axis].field = encodingConfigs[axis].field;\n });\n }\n });\n};\n\n/**\n *\n *\n * @memberof MatrixResolver\n */\nexport const mutateAxesFromMap = (cacheMaps, axes) => {\n const {\n xAxesMap,\n yAxesMap\n } = cacheMaps;\n const {\n x: xAxisSet,\n y: yAxisSet\n } = axes;\n const xAxes = [];\n const yAxes = [];\n\n xAxisSet.forEach((axisId) => {\n const xAxis = xAxesMap.get(axisId);\n xAxes.push(xAxis);\n });\n yAxisSet.forEach((axisId) => {\n const yAxis = yAxesMap.get(axisId);\n yAxes.push(yAxis);\n });\n return {\n xAxes, yAxes\n };\n};\n\n/**\n * return a default mark based on predefined set of rules of type and subtype of the fields\n *\n * @param {string} colFieldType dimension/measure - temporal/ordinal/nominal\n * @param {string} rowFieldType dimension/measure - temporal/ordinal/nominal\n * @return {Object} return mark type\n */\nexport const getDefaultMark = (colFieldType, rowFieldType) => {\n let mark;\n\n if (colFieldType === CATEGORICAL || rowFieldType === CATEGORICAL) {\n mark = BAR;\n } else if (colFieldType === TEMPORAL || rowFieldType === TEMPORAL) {\n mark = LINE;\n } else {\n mark = POINT;\n }\n\n return mark;\n};\n\n/**\n *\n *\n * @param {*} axesCreators\n * @param {*} [fieldInfo=[]]\n *\n */\nexport const createRetinalAxis = (axesCreators, fieldProps = {}) => {\n const { axisType, fieldsConfig } = axesCreators;\n const field = fieldProps.field;\n const axis = [];\n const Cls = scaleMaps[axisType];\n\n fieldProps.type = fieldProps.type ? fieldProps.type : getAxisType(fieldsConfig, field || null);\n axis.push(new Cls(fieldProps));\n return axis;\n};\n\n/**\n *\n *\n * @param {*} arr\n * @param {*} val\n *\n */\nexport const getIndex = (arr, val) => {\n let i = 0;\n let arrIndex = -1;\n\n while (arrIndex === -1 && i < arr.length) {\n if (arr[i].toString() === val.toString()) {\n arrIndex = i;\n }\n i++;\n }\n return arrIndex;\n};\n\n/**\n *\n *\n * @param {*} colFields\n * @param {*} rowFields\n * @param {*} userLayerConfig\n *\n * @memberof CartesianEncoder\n */\nexport const getLayerConfFromFields = (colFields, rowFields, userLayerConfig) => userLayerConfig.filter((conf) => {\n const userConf = conf instanceof Array ? conf : [conf];\n const encodingArr = [].concat(...userConf.map(d => d.encoding).filter(d => d !== undefined));\n\n if (!encodingArr.length) {\n return true;\n }\n\n const xFields = [].concat(...encodingArr.map(d => [d.x && d.x.field, d.x0 && d.x0.field]))\n .filter(d => d !== undefined && d !== null);\n const yFields = [].concat(...encodingArr.map(d => [d.y && d.y.field, d.y0 && d.y0.field]))\n .filter(d => d !== undefined && d !== null);\n\n if (!xFields.length && !yFields.length) {\n return true;\n }\n\n const colFieldExist = xFields.length ? xFields.every(d => colFields.indexOf(d) !== -1) : false;\n const rowFieldExist = yFields.length ? yFields.every(d => rowFields.indexOf(d) !== -1) : false;\n if (xFields.length && yFields.length) {\n return colFieldExist && rowFieldExist;\n }\n return colFieldExist || rowFieldExist;\n});\n\nexport const resolveAxisConfig = (context, fieldInf, axisInfo) => {\n const { rowIndex, columnIndex, axesObj } = axisInfo;\n const { config, facetFields, resolver } = context;\n const resolverAxes = resolver.axes();\n const { RADIUS, ANGLE } = ENCODING;\n [RADIUS, ANGLE, ANGLE0].forEach((enc) => {\n const axesArr = resolverAxes[enc];\n if (!axesArr[rowIndex]) {\n axesArr[rowIndex] = [];\n }\n axesArr[rowIndex][columnIndex] = axesObj[enc];\n const axisConfig = getObjProp(config.axes, enc) || {};\n\n axesObj[enc].forEach((axis, i) => {\n let userConfig = axisConfig;\n if (axisConfig instanceof Function) {\n userConfig = axisConfig(rowIndex, columnIndex, {\n axisFields: [fieldInf[enc][i]],\n facetFields\n });\n }\n axis.config(userConfig);\n });\n });\n};\n","import { layerFactory } from '@chartshq/visual-layer';\nimport {\n mergeRecursive,\n STATE_NAMESPACES,\n unionDomain,\n COORD_TYPES,\n toArray\n} from 'muze-utils';\nimport { ScaleType } from '@chartshq/muze-axis';\nimport {\n generateAxisFromMap,\n getDefaultMark,\n getIndex,\n getLayerConfFromFields,\n getAdjustedDomain,\n sanitizeIndividualLayerConfig\n} from './encoder-helper';\nimport { retriveDomainFromData } from '../group-helper';\n\nimport { ROW, COLUMN, COL, LEFT, TOP, MEASURE, BOTH, X, Y, ASCENDING, DESCENDING } from '../enums/constants';\nimport VisualEncoder from './visual-encoder';\n\nconst CARTESIAN = COORD_TYPES.CARTESIAN;\n\n/**\n *\n *\n * @export\n * @class CartesianEncoder\n * @extends {VisualEncoder}\n */\nexport default class CartesianEncoder extends VisualEncoder {\n\n /**\n *\n *\n *\n * @memberof CartesianEncoder\n */\n static type () {\n return CARTESIAN;\n }\n\n /**\n *\n *\n * @param {*} axesCreators\n * @param {*} fieldInfo\n *\n * @memberof CartesianEncoder\n */\n createAxis (axesCreators, fieldInfo, context) {\n const geomCellAxes = {};\n const {\n axes\n } = axesCreators;\n const {\n projections,\n indices\n } = fieldInfo;\n const {\n rowFields,\n columnFields\n } = projections;\n const {\n rowIndex,\n columnIndex\n } = indices;\n const axisFields = [{\n fields: rowFields,\n index: rowIndex\n }, {\n fields: columnFields,\n index: columnIndex\n }];\n const { resolver, facetFields, geomCell } = context;\n const xAxes = axes.x || [];\n const yAxes = axes.y || [];\n\n [rowFields, columnFields].forEach((fields, i) => {\n const type = i === 0 ? ROW : COLUMN;\n const axis = i === 0 ? Y : X;\n\n if (fields.length > 1) {\n axesCreators.position = BOTH;\n } else {\n axesCreators.position = this.axisFrom()[type];\n }\n geomCellAxes[axis] = generateAxisFromMap(axis, axisFields[i], axesCreators, {\n groupAxes: axis === X ? xAxes : yAxes,\n valueParser: resolver.valueParser()\n }, indices, facetFields);\n });\n geomCell.axes(geomCellAxes);\n return geomCellAxes;\n }\n\n updateDomains (store, axes) {\n const xAxes = axes.x;\n const yAxes = axes.y;\n store.model.lock();\n for (let i = 0; i < xAxes.length; i++) {\n for (let j = 0; j < xAxes[i].length; j++) {\n store.commit(`${STATE_NAMESPACES.GROUP_GLOBAL_NAMESPACE}.domain.x.${0}${i}0`, xAxes[i][j].domain());\n }\n }\n for (let i = 0; i < yAxes.length; i++) {\n for (let j = 0; j < yAxes[i].length; j++) {\n store.commit(`${STATE_NAMESPACES.GROUP_GLOBAL_NAMESPACE}.domain.y.${i}${0}0`, yAxes[i][j].domain());\n yAxes[i][j]._domainLock = false;\n }\n }\n\n store.model.unlock();\n }\n\n unionUnitDomains (context) {\n const store = context.store();\n const resolver = context.resolver();\n const units = resolver.units();\n const domains = {\n 0: {},\n 1: {}\n };\n // const sortingDetails = nearestSortingDetails(context.getGroupByData());\n const config = context.config();\n const fieldsObj = {\n 0: {},\n 1: {}\n };\n\n for (let rIdx = 0, len = units.length; rIdx < len; rIdx++) {\n const unitsArr = units[rIdx];\n for (let cIdx = 0, len2 = unitsArr.length; cIdx < len2; cIdx++) {\n const unit = unitsArr[cIdx];\n const axisFields = unit.fields();\n const encodingDomains = unit.getDataDomain();\n ['x', 'y'].forEach((axisType, axisTypeIndex) => {\n const fieldArr = axisFields[axisType];\n fieldArr.forEach((field, axisIndex) => {\n const key = !axisTypeIndex ? `0${cIdx}${axisIndex}` : `${rIdx}0${axisIndex}`;\n const dom = encodingDomains[axisType];\n const typeOfField = field.subtype();\n fieldsObj[axisTypeIndex][key] = field;\n\n if (dom && Object.keys(dom).length !== 0) {\n domains[axisTypeIndex][key] = unionDomain([(domains[axisTypeIndex] &&\n domains[axisTypeIndex][key]) || [], dom[`${field}`]], typeOfField);\n }\n });\n });\n }\n }\n\n const { x: xAxes, y: yAxes } = resolver.axes();\n store.model.lock();\n [xAxes, yAxes].forEach((axesArr, axisType) => {\n axesArr.forEach((axes, idx) => {\n let key;\n let domain = [];\n let adjustedDomain = [];\n const min = [];\n const max = [];\n const typeOfAxis = axes[0].constructor.type();\n\n if (axes.length > 1 && typeOfAxis === ScaleType.LINEAR && axes[0].config().alignZeroLine) {\n axes.forEach((axis, i) => {\n key = !axisType ? `0${idx}${i}` : `${idx}0${i}`;\n domain = domains[axisType][key];\n min[i] = domain[0];\n max[i] = domain[1];\n });\n adjustedDomain = getAdjustedDomain(max, min);\n } else if (typeOfAxis === ScaleType.BAND) {\n /* Sort categorical fields to ensure consistency across all rows\n only if field is categorical and is not explicitily sorted by user */\n key = !axisType ? `0${idx}0` : `${idx}00`;\n const currentFieldName = fieldsObj[axisType][key].oneVar();\n const sortingOrder = config.sort[currentFieldName];\n const isSortingDisabled = config.sort.disabled;\n\n if (!isSortingDisabled && sortingOrder) {\n if (sortingOrder === ASCENDING) {\n domains[axisType][key].sort();\n } else if (sortingOrder === DESCENDING) {\n domains[axisType][key].sort().reverse();\n }\n }\n }\n\n axes.forEach((axis, index) => {\n key = !axisType ? `0${idx}${index}` : `${idx}0${index}`;\n domain = adjustedDomain[index] || domains[axisType][key];\n\n domain && axis.domain(domain);\n const type = !axisType ? 'x' : 'y';\n store.commit(`${STATE_NAMESPACES.GROUP_GLOBAL_NAMESPACE}.domain.${type}.${idx}${index}`, domain);\n });\n });\n });\n store.model.unlock();\n }\n\n /**\n *\n *\n * @param {*} fields\n *\n * @memberof CartesianEncoder\n */\n getFacetsAndProjections (fields, type) {\n let facets = [];\n let projections = [];\n let counter = 0;\n const primaryFacets = [];\n const secondaryFacets = [];\n const primaryFields = fields[0];\n const secondaryFields = fields[1];\n const primaryLen = primaryFields.length;\n const secondaryLen = secondaryFields.length;\n const axisFrom = this.axisFrom();\n\n for (let i = 0; i < primaryLen; i++) {\n let projArr = [primaryFields[i]];\n const primaryField = primaryFields[i];\n\n if (primaryField.type() === MEASURE) {\n const secondaryField = secondaryFields[counter];\n if (secondaryField && secondaryField.type() === MEASURE) {\n counter++;\n projArr = [primaryField, secondaryField];\n }\n projections.push(projArr);\n } else {\n facets.push(primaryField);\n primaryFacets.push(primaryField);\n }\n }\n if (secondaryLen > counter) {\n for (let i = counter; i < secondaryLen; i++) {\n const secondaryField = secondaryFields[i];\n const projArr = [secondaryField];\n if (secondaryField.type() === MEASURE) {\n projections.push(projArr);\n } else {\n facets.push(secondaryField);\n secondaryFacets.push(secondaryField);\n }\n }\n }\n if ((primaryFacets.length || secondaryFacets.length) && !projections.length) {\n type = type === COL ? COLUMN : type;\n if ((axisFrom[type] === LEFT || axisFrom[type] === TOP) && primaryFacets.length) {\n const axisFromIndex = primaryFacets.length - 1;\n const facet = primaryFacets[axisFromIndex];\n projections = [[facet]];\n const existIndex = getIndex(secondaryFacets, facet);\n if (existIndex > -1) {\n projections = [[facet, facet]];\n secondaryFacets.splice(existIndex, 1);\n }\n primaryFacets.splice(axisFromIndex, 1);\n } else {\n const axisFromIndex = 0;\n const facet = secondaryFacets[axisFromIndex];\n projections = [[facet]];\n const existIndex = getIndex(primaryFacets, facet);\n if (existIndex > -1) {\n projections = [[facet, facet]];\n primaryFacets.splice(existIndex, 1);\n }\n secondaryFacets.splice(axisFromIndex, 1);\n }\n }\n\n facets = [...primaryFacets, ...secondaryFacets];\n facets = facets.filter((el, index, self) => index === self.findIndex(t => (t.toString() === el.toString())));\n return {\n facets,\n projections\n };\n }\n\n /**\n *\n *\n * @param {*} datamodel\n * @param {*} config\n *\n * @memberof CartesianEncoder\n */\n fieldSanitizer (datamodel, config) {\n return super.fieldSanitizer(datamodel, config);\n }\n\n /**\n *\n *\n * @param {*} datamodel\n *\n * @memberof CartesianEncoder\n */\n getRetinalFieldsDomain (dataModels, encoding) {\n const groupedModel = dataModels.groupedModel;\n const domains = {};\n for (const key in encoding) {\n if ({}.hasOwnProperty.call(encoding, key)) {\n const encodingObj = encoding[key];\n const field = encodingObj.field;\n if (!encodingObj.domain && field) {\n const domain = retriveDomainFromData(groupedModel, field);\n domains[field] = domain;\n }\n }\n }\n return domains;\n }\n\n /**\n *\n *\n * @param {*} layerArray\n * @memberof CartesianEncoder\n */\n serializeLayerConfig (layerArray) {\n const serializedLayers = [];\n // let currentLayerIndex = 0;\n layerArray.length && layerArray.forEach((layer, i) => {\n const def = layerFactory.sanitizeLayerConfig(layer);\n def.order = i;\n serializedLayers.push(def);\n });\n return serializedLayers;\n }\n\n sanitizeLayerConfig (encodingConfigs, userLayerConfig) {\n const layerConfig = [];\n userLayerConfig.forEach((config) => {\n const def = toArray(config.def);\n sanitizeIndividualLayerConfig(encodingConfigs, def);\n layerConfig.push(config);\n });\n return layerConfig;\n }\n\n /**\n *\n *\n * @param {*} fields\n * @param {*} userLayerConfig\n *\n * @memberof CartesianEncoder\n */\n getLayerConfig (fields, userLayerConfig, retinalConfig) {\n const layerConfig = [];\n const {\n columnFields,\n rowFields\n } = fields;\n\n // let currentLayerIndex = 0;\n columnFields.forEach((colField) => {\n const colFieldName = colField.toString();\n rowFields.forEach((rowField) => {\n let configs = [];\n const rowFieldName = rowField.toString();\n const encoding = {\n x: {\n field: colFieldName\n },\n y: {\n field: rowFieldName\n }\n };\n const rowFieldType = rowField.subtype();\n const colFieldType = colField.subtype();\n const mark = getDefaultMark(colFieldType, rowFieldType);\n\n const defConfigs = [{\n mark,\n def: {\n mark,\n encoding\n }\n }];\n\n const layerConfigs = getLayerConfFromFields(colField.getMembers(),\n rowField.getMembers(), userLayerConfig || []);\n if (layerConfigs.length) {\n configs = layerConfigs.map((layerConf) => {\n const mergedLayerConf = mergeRecursive(mergeRecursive({}, defConfigs[0].def), layerConf);\n const serializedLayerConfig = layerFactory.getSerializedConf(mergedLayerConf.mark,\n mergedLayerConf);\n return {\n mark: mergedLayerConf.mark,\n order: mergedLayerConf.order,\n def: serializedLayerConfig\n };\n });\n } else {\n configs = defConfigs;\n }\n\n layerConfig.push(...configs);\n });\n });\n return this.sanitizeLayerConfig(retinalConfig, layerConfig);\n }\n}\n","import { AngleAxis, RadiusAxis } from '@chartshq/muze-axis';\nimport { layerFactory, ENCODING } from '@chartshq/visual-layer';\nimport {\n mergeRecursive,\n STATE_NAMESPACES,\n GROUP_BY_FUNCTIONS,\n COORD_TYPES,\n toArray,\n getObjProp,\n defaultValue\n} from 'muze-utils';\nimport VisualEncoder from './visual-encoder';\nimport { SIZE, MEASURE, ARC, COLOR } from '../enums/constants';\nimport { sanitizeIndividualLayerConfig, resolveAxisConfig } from './encoder-helper';\nimport { SimpleVariable } from '../variable';\n\nconst POLAR = COORD_TYPES.POLAR;\nconst { RADIUS, ANGLE, ANGLE0 } = ENCODING;\n\nconst axesCls = {\n [RADIUS]: RadiusAxis,\n [ANGLE]: AngleAxis,\n [ANGLE0]: AngleAxis\n};\n\nconst getSizeMultiplier = (sizeVal, sizeAxis) => {\n const sizeAxisDomain = sizeAxis.domain();\n const sizeMultiplier = sizeAxis.getSize(sizeVal) / (sizeAxisDomain ? sizeAxis.range()[1] : sizeAxis.config().value);\n return sizeMultiplier;\n};\n\nconst setRadiusFactor = (context) => {\n const data = context.data();\n const sizeField = context.retinalFields().size.field;\n const { radius, size } = context.axes();\n\n if (sizeField && radius && radius.length) {\n const sizeFieldIndex = data.getFieldsConfig()[sizeField].index;\n const sizeVal = data.getData().data.reduce((acc, val) => acc + val[sizeFieldIndex], 1);\n const sizeMultiplier = getSizeMultiplier(sizeVal, size[0]);\n radius.forEach(axis => axis.setRadiusFactor(sizeMultiplier));\n }\n};\n\n/**\n *\n *\n * @export\n * @class PolarEncoder\n * @extends {VisualEncoder}\n */\nexport default class PolarEncoder extends VisualEncoder {\n\n /**\n *\n *\n * @param {*} axesCreators\n * @param {*} fieldInfo\n *\n * @memberof PolarEncoder\n */\n createAxis (axesCreators, fieldInfo, context) {\n const {\n axes\n } = axesCreators;\n const geomCellAxes = axes;\n const {\n indices\n } = fieldInfo;\n const {\n rowIndex,\n columnIndex\n } = indices;\n // Dummy axes for polar, to create blank cells\n const pieAxes = geomCellAxes.pie || [];\n\n pieAxes[rowIndex] = pieAxes[rowIndex] || [];\n pieAxes[rowIndex][columnIndex] = [];\n\n const axesObj = {};\n const { geomCell, resolver } = context;\n const layers = resolver.matrixLayers();\n const resolverAxes = resolver.axes();\n const cellLayers = layers[rowIndex][columnIndex];\n const fields = {\n radius: {},\n angle: {},\n angle0: {}\n };\n\n cellLayers.forEach((layerConf) => {\n const def = layerConf.def;\n [ANGLE, ANGLE0, RADIUS].forEach((enc) => {\n const field = getObjProp(def.encoding, enc, 'field');\n field && (fields[enc][field] = 0);\n });\n });\n const fieldInf = {};\n const varInstances = {};\n\n for (const encType in fields) {\n fieldInf[encType] = Object.keys(fields[encType]);\n axesObj[encType] = [];\n varInstances[encType] = [];\n fieldInf[encType].forEach((field, i) => {\n varInstances[encType][i] = new SimpleVariable(field);\n axesObj[encType][i] = new axesCls[encType]();\n });\n axesObj[encType][axesObj[encType].length] = new axesCls[encType]();\n }\n resolveAxisConfig(context, fieldInf, {\n axesObj,\n rowIndex,\n columnIndex\n });\n geomCell.axes(axesObj)\n .fields(Object.assign({}, varInstances, geomCell.fields()));\n resolverAxes.pie = pieAxes;\n return geomCellAxes;\n }\n\n /**\n *\n *\n * @param {*} fields\n *\n * @memberof CartesianEncoder\n */\n getFacetsAndProjections (fields) {\n let counter = 0;\n const facets = [];\n const projections = [];\n const primaryFields = fields[0];\n const secondaryFields = fields[1];\n const primaryLen = primaryFields.length;\n const secondaryLen = secondaryFields.length;\n\n for (let i = 0; i < primaryLen; i++) {\n const primaryField = primaryFields[i];\n if (primaryField.type() === MEASURE) {\n const secondaryField = secondaryFields[counter++];\n const projArr = secondaryField ? [primaryField, secondaryField] : [primaryField];\n projections.push(projArr);\n } else {\n facets.push(primaryField);\n }\n }\n if (secondaryLen > counter) {\n for (let i = counter; i < secondaryLen; i++) {\n const secondaryField = secondaryFields[i];\n const projArr = [secondaryField];\n if (secondaryField.type() === MEASURE) {\n projections.push(projArr);\n } else {\n facets.push(secondaryField);\n }\n }\n }\n return {\n facets,\n projections\n };\n }\n\n unionUnitDomains (context) {\n const store = context.store();\n const domainProps = {\n radius: [],\n angle: [],\n angle0: []\n };\n const axes = context.resolver().axes();\n context.matrixInstance().value.each((cell, rIdx, cIdx) => {\n const unit = cell.valueOf();\n const unitDomains = unit.getDataDomain();\n const fields = unit.fields();\n setRadiusFactor(unit);\n [RADIUS, ANGLE, ANGLE0].forEach((encType) => {\n const encodingFields = fields[encType];\n const domains = unitDomains[encType] || {};\n encodingFields.forEach((field, i) => {\n !domainProps[encType][rIdx] && (domainProps[encType][rIdx] = []);\n !domainProps[encType][rIdx][cIdx] && (domainProps[encType][rIdx][cIdx] = []);\n domainProps[encType][rIdx][cIdx][i] = domains[`${field}`] || [];\n });\n });\n });\n\n for (const key in domainProps) {\n const specificAxes = axes[key];\n specificAxes.forEach((axesArr, rIdx) => {\n axesArr.forEach((axisArr, cIdx) => {\n axisArr.forEach((axis, i) => {\n axis.domain(defaultValue(getObjProp(domainProps[key], rIdx, cIdx, i), []));\n });\n });\n });\n store.commit(`${STATE_NAMESPACES.GROUP_GLOBAL_NAMESPACE}.domain.${key}`, domainProps[key]);\n }\n }\n\n /**\n *\n *\n *\n * @memberof PolarEncoder\n */\n setCommonDomain () {\n // No domain to be set\n return this;\n }\n\n /**\n *\n *\n *\n * @memberof PolarEncoder\n */\n static type () {\n return POLAR;\n }\n\n layers (...layers) {\n if (layers.length) {\n this._layers = layers[0];\n return this;\n }\n return this._layers;\n }\n\n /**\n *\n *\n * @param {*} datamodel\n * @param {*} config\n * @memberof PolarEncoder\n */\n fieldSanitizer (datamodel, config) {\n let sanitizedRows = [[], []];\n let sanitizedColumns = [[], []];\n const fields = super.fieldSanitizer(datamodel, config);\n const {\n layers\n } = config;\n const {\n rows,\n columns\n } = fields;\n const layer = layers[0];\n const encoding = layer.encoding;\n const radius = encoding && encoding.radius ? encoding.radius.field : null;\n const angle = encoding && encoding.angle ? encoding.angle.field : null;\n const sanitizedFields = [sanitizedRows, sanitizedColumns];\n\n [rows, columns].forEach((fieldType, typeIndex) => {\n fieldType.forEach((fieldSet, i) => fieldSet.forEach((field) => {\n if (field.toString() !== radius && field.toString() !== angle && field.type() !== MEASURE) {\n sanitizedFields[typeIndex][i].push(field);\n }\n }));\n });\n sanitizedColumns = [...new Set(sanitizedColumns)];\n sanitizedRows = [...new Set(sanitizedRows)];\n this.fieldInfo({ rows: sanitizedRows, columns: sanitizedColumns });\n return this.fieldInfo();\n }\n\n getRetinalFieldsDomain (dataModels, encoding, facetFields, groupBy) {\n let sizeField;\n let colorField;\n const fields = [];\n const layers = this.layers();\n const dataModel = dataModels.groupedModel;\n const fieldsConfig = dataModel.getFieldsConfig();\n const domains = {};\n if (layers && layers[0]) {\n const layer = layers[0];\n const layerEncoding = layer.def.encoding || {};\n\n [RADIUS, ANGLE, SIZE, COLOR].forEach((encType) => {\n const field = layerEncoding[encType] ? layerEncoding[encType].field : '';\n const measureField = fieldsConfig[field] && fieldsConfig[field].def.type === MEASURE;\n if (encType === SIZE && measureField) {\n sizeField = field;\n }\n if (encType === COLOR) {\n colorField = field;\n }\n fieldsConfig[field] && !measureField && fields.push(field);\n });\n }\n\n if (sizeField) {\n domains[sizeField] = dataModel.groupBy(facetFields, {\n [sizeField]: GROUP_BY_FUNCTIONS.SUM\n }).getFieldspace().fieldsObj()[sizeField].domain();\n }\n\n if (colorField) {\n const dm = dataModel.groupBy([...facetFields, ...fields], groupBy.measures);\n domains[colorField] = dm.getFieldspace().fieldsObj()[colorField].domain();\n }\n return domains;\n }\n\n /**\n *\n *\n * @param {*} fields\n * @param {*} userLayerConfig\n *\n * @memberof PolarEncoder\n */\n getLayerConfig (fields, userLayerConfig, retinalConfig) {\n let layerConfig = [];\n const {\n columnFields,\n rowFields\n } = fields;\n const allFields = [...columnFields, ...rowFields];\n\n allFields.forEach(() => {\n const encoding = {};\n let config = {\n mark: ARC,\n def: {\n encoding\n }\n };\n if (userLayerConfig && userLayerConfig.length > 0) {\n config = mergeRecursive(config, userLayerConfig[0]);\n }\n layerConfig.push(config);\n });\n if (layerConfig.length === 0) {\n layerConfig = userLayerConfig;\n }\n const sanitizedConfig = this.sanitizeLayerConfig(retinalConfig, layerConfig);\n this.layers(sanitizedConfig);\n return sanitizedConfig;\n }\n\n /**\n *\n *\n * @param {*} layerArray\n *\n * @memberof PolarEncoder\n */\n serializeLayerConfig (layerArray) {\n const serializedLayers = [];\n\n layerArray.length && layerArray.forEach((layer) => {\n const def = layerFactory.getSerializedConf(layer.mark, layer);\n serializedLayers.push({\n mark: layer.mark,\n def\n });\n });\n return serializedLayers;\n }\n\n sanitizeLayerConfig (encodingConfigs, userLayerConfig) {\n const layerConfig = [];\n\n userLayerConfig.forEach((config) => {\n const def = toArray(config.def);\n sanitizeIndividualLayerConfig(encodingConfigs, def);\n def.forEach((conf) => {\n const encoding = conf.encoding || (conf.encoding = {});\n !encoding.angle && (encoding.angle = {});\n const angleField = getObjProp(encoding.angle, 'field');\n const angle0Field = getObjProp(encoding.angle0, 'field');\n if (!angleField) {\n Object.assign(encoding.angle, {\n field: encodingConfigs.color && encodingConfigs.color.field\n });\n }\n if (!angle0Field) {\n !encoding.angle0 && (encoding.angle0 = {});\n Object.assign(encoding.angle0, {\n field: encoding.angle.field\n });\n }\n });\n\n layerConfig.push(config);\n });\n return layerConfig;\n }\n}\n","import { createRetinalAxis } from './encoder-helper';\nimport { COLOR, SHAPE, SIZE } from '../enums/constants';\nimport VisualEncoder from './visual-encoder';\n\n/**\n *\n *\n * @export\n * @class RetinalEncoder\n * @extends {VisualEncoder}\n */\nexport default class RetinalEncoder extends VisualEncoder {\n\n /**\n *\n *\n * @param {*} axesCreators\n *\n * @memberof RetinalEncoder\n */\n createAxis (axesCreators) {\n const { fieldsConfig, config } = axesCreators;\n const newAxes = {};\n\n [COLOR, SHAPE, SIZE].forEach((axisType) => {\n newAxes[`${axisType}`] = createRetinalAxis({ axisType, fieldsConfig }, config[axisType]);\n });\n return newAxes;\n }\n\n /**\n *\n *\n * @static\n *\n * @memberof RetinalEncoder\n */\n static type () {\n return 'retinal';\n }\n\n /**\n *\n *\n * @param {*} context\n *\n * @memberof RetinalEncoder\n */\n setCommonDomain (context) {\n const { domains, axes, encoding } = context;\n\n Object.entries(encoding).forEach((enc) => {\n if (enc[1] && enc[1].field) {\n const encType = enc[0];\n const field = enc[1].field;\n\n if (field) {\n axes[encType].forEach((axis) => {\n const domain = domains[field];\n !enc[1].domain && axis.updateDomain(domain);\n });\n }\n }\n });\n return axes;\n }\n}\n","import { Store, FieldType, COORD_TYPES, getObjProp } from 'muze-utils';\nimport { DATA_UPDATE_COUNTER } from '../enums/defaults';\nimport { Variable } from '../variable';\nimport { PolarEncoder, CartesianEncoder } from '../encoder';\nimport {\n DIMENSION,\n MEASURE,\n ORDINAL,\n LINEAR,\n ROW,\n COLUMN,\n COL,\n LEFT,\n RIGHT,\n TOP,\n BOTTOM,\n COLOR,\n SIZE,\n TEMPORAL,\n SHAPE,\n INTERACTION,\n GRID_LINES,\n GRID_BANDS,\n HEADER,\n FACET,\n X,\n Y,\n ARC,\n RADIUS,\n ANGLE\n} from '../enums/constants';\n\nconst POLAR = COORD_TYPES.POLAR;\n\n/**\n * Creates an instance of a store which contains the arguments to make the class reactive\n *\n * @return {Object} instance of store\n * @memberof VisualGroup\n */\nexport const initStore = () => new Store({\n [DATA_UPDATE_COUNTER]: DATA_UPDATE_COUNTER\n});\n\n/**\n *\n *\n * @param {*} arr\n */\nexport const isDistributionEqual = arr => [...arr[0], ...arr[1]].reduce((isEqual, row) => {\n const rowType = row.type();\n\n if (rowType === MEASURE || rowType === TEMPORAL) {\n isEqual = true;\n }\n return isEqual;\n}, false);\n\n/**\n *\n *\n */\nexport const initializeCacheMaps = () => ({\n cellMap: new Map(),\n xAxesMap: new Map(),\n yAxesMap: new Map(),\n entryCellMap: new Map(),\n exitCellMap: new Map()\n});\n\n/**\n *\n *\n * @param {*} axisName\n * @param {*} id\n */\nexport const getAxisKey = (axisName, ...params) => `${axisName}-axis-${params.join('-')}`;\n\n/**\n *\n *\n * @param {*} rowId\n * @param {*} columnId\n */\nexport const getCellKey = (rowId, columnId) => `cell-${rowId}-${columnId}`;\n\n/**\n *\n *\n * @param {*} config\n *\n */\nexport const extractUnitConfig = (config) => {\n const unitConfig = {};\n const attrNames = [INTERACTION, GRID_LINES, GRID_BANDS];\n\n attrNames.forEach((attr) => {\n if (config[attr] !== undefined) {\n unitConfig[attr] = config[attr];\n }\n });\n return unitConfig;\n};\n\n/**\n *\n *\n * @param {*} headers\n * @param {*} index\n * @param {*} rowLength\n *\n * @memberof MatrixResolver\n */\nexport const getHeaderText = (headers, index, rowLength) => {\n let header = '';\n\n if (index === rowLength - 1 && headers.length > rowLength) {\n for (let i = index; i < headers.length - 1; i++) {\n header += `${headers[i].toString()} / `;\n }\n header += headers[headers.length - 1].toString();\n return header;\n } else if (headers[index]) {\n return headers[index].toString();\n }\n return '';\n};\n\n/**\n *\n *\n * @param {*} fields\n * @param {*} fieldHeaders\n * @param {*} TextCell\n * @param {*} labelManager\n *\n */\nexport const headerCreator = (fields, fieldHeaders, TextCell, { classPrefix, labelManager }) => {\n const headers = fields.length > 0 ? fields[0].map((cell, i) => new TextCell({\n type: HEADER,\n className: `${classPrefix}-grid-headers`\n }, {\n labelManager\n }).source(getHeaderText(fieldHeaders, i, fields[0].length))\n .config({ show: cell.config().show })) : [];\n return headers;\n};\n\n/**\n *\n *\n * @param {*} variable\n * @param {*} allFields\n *\n */\nexport const findInGroup = (variable, allFields) => {\n let channel = null;\n\n [COLOR, SIZE, SHAPE].forEach((e) => {\n if (this.store.get(e) && variable === this.store.get(e)[0]) {\n channel = e;\n }\n });\n\n if (channel) {\n return { channel };\n }\n [ROW, COL].forEach((facetType) => {\n allFields[`${facetType}Facets`].forEach((e) => {\n if (e.toString() === variable) {\n channel = { channel: FACET, type: facetType === COL ? COLUMN : ROW };\n }\n });\n });\n\n if (channel) {\n return channel;\n }\n\n [ROW, COL].forEach((projType) => {\n allFields[`${projType}Projections`].forEach((e) => {\n e.forEach((m) => {\n if (m.toString() === variable) {\n channel = projType === COL ? X : Y;\n }\n });\n });\n });\n\n if (channel) {\n return { channel };\n }\n return null;\n};\n\n/**\n *\n *\n * @param {*} datamodel\n * @param {*} field\n */\nexport const getAxisType = (fieldsConfig, field) => {\n let fieldType = ORDINAL;\n\n if (field && fieldsConfig[field].def.type !== DIMENSION) {\n fieldType = LINEAR;\n }\n return fieldType;\n};\n\n/**\n *\n *\n * @param {*} datamodel\n * @param {*} fieldName\n *\n */\nexport const retriveDomainFromData = (datamodel, fieldName) => {\n const field = datamodel.getFieldspace().fields.find(d => d.name() === fieldName.toString());\n return field.domain();\n};\n\n/**\n *\n *\n * @memberof MatrixResolver\n */\nexport const mutateAxesFromMap = (cacheMaps, axes) => {\n let xAxes = null;\n let yAxes = null;\n const {\n xAxesMap,\n yAxesMap\n } = cacheMaps;\n const {\n x: xAxisSet,\n y: yAxisSet\n } = axes;\n\n xAxisSet && xAxisSet.forEach((axisId) => {\n const xAxis = xAxesMap.get(axisId);\n xAxes = xAxes || [];\n xAxes.push(xAxis);\n });\n\n yAxisSet && yAxisSet.forEach((axisId) => {\n const yAxis = yAxesMap.get(axisId);\n yAxes = yAxes || [];\n yAxes.push(yAxis);\n });\n\n return {\n xAxes, yAxes\n };\n};\n\nconst hasPolarEncodings = layerConf => layerConf.mark === ARC || [RADIUS, ANGLE].some(field =>\n getObjProp(layerConf.encoding, field));\n\n/**\n *\n *\n * @param {*} layers\n *\n */\nexport const getEncoder = (layers) => {\n let encoder = new CartesianEncoder();\n\n if (layers.length) {\n // Figuring out the kind of layers the group will have\n encoder = layers.some(layerConf => hasPolarEncodings(layerConf)) ? new PolarEncoder() : encoder;\n }\n return encoder;\n};\n\n/**\n *\n *\n * @param {*} type\n * @param {*} fields\n * @param {*} userAxisFromConfig\n *\n */\nexport const getHeaderAxisFrom = (type, fields, userAxisFromConfig) => {\n let axisFrom = userAxisFromConfig[type];\n let headerFrom = '';\n const options = type === ROW ? [LEFT, RIGHT] : [BOTTOM, TOP];\n const [firstField, secondField] = fields;\n const firstFieldType = i => (firstField.length ? firstField[i].type() : null);\n const secondFieldType = i => (secondField.length ? secondField[i].type() : null);\n\n if (firstFieldType(firstField.length - 1) === DIMENSION && secondFieldType(0) === DIMENSION) {\n headerFrom = axisFrom ? options[1 - options.indexOf(axisFrom)] : options[1];\n\n if (type === COLUMN && (firstField[firstField.length - 1].toString() === secondField[0].toString())) {\n axisFrom = TOP;\n } else {\n axisFrom = axisFrom || options[0];\n }\n } else if (secondFieldType(secondField.length - 1) === DIMENSION) {\n headerFrom = type === ROW ? RIGHT : BOTTOM;\n axisFrom = type === ROW ? RIGHT : BOTTOM;\n } else {\n headerFrom = type === ROW ? LEFT : TOP;\n axisFrom = type === ROW ? LEFT : TOP;\n }\n if (firstFieldType(firstField.length - 1) === MEASURE && secondFieldType(0) === MEASURE) {\n axisFrom = type === ROW ? LEFT : TOP;\n } else if (secondFieldType(0) === MEASURE) {\n axisFrom = type === ROW ? RIGHT : BOTTOM;\n } else if (firstFieldType(firstField.length - 1) === MEASURE) {\n axisFrom = type === ROW ? LEFT : TOP;\n }\n return [headerFrom, axisFrom];\n};\n\n/**\n *\n *\n * @param {*} type\n * @param {*} fields\n * @param {*} layers\n *\n * @memberof MatrixResolver\n */\nexport const setFacetsAndProjections = (context, fieldInfo, encoder) => {\n const {\n fields,\n type\n } = fieldInfo;\n const { facets, projections } = encoder.simpleEncoder.getFacetsAndProjections(fields, type);\n\n context.facets({ [`${type}Facets`]: facets });\n context.projections({ [`${type}Projections`]: projections });\n\n return { facets, projections, fields };\n};\n\nconst getRowBorders = (left, right) => {\n const borders = {};\n borders.top = false;\n borders.bottom = false;\n if (left.length > 1 || right.length > 1) {\n borders.top = true;\n borders.bottom = true;\n }\n return borders;\n};\n\nconst getColumnsBorders = (top, bottom) => {\n const borders = {};\n borders.left = false;\n borders.right = false;\n if (top.length || bottom.length) {\n if ((top[0] && top[0].length > 1) || (bottom[0] && bottom[0].length > 1)) {\n borders.left = true;\n borders.right = true;\n }\n }\n return borders;\n};\n\nconst getValueBorders = (rows, columns) => {\n const borders = { top: true, left: true, bottom: true, right: true };\n const borderTypeRow = [LEFT, RIGHT];\n const borderTypeCol = [TOP, BOTTOM];\n rows.forEach((e, i) => {\n if (e[0] && e[0].length) {\n borders[borderTypeRow[i]] = true;\n } else {\n borders[borderTypeRow[i]] = false;\n }\n });\n columns.forEach((e, i) => {\n if (e.length) {\n borders[borderTypeCol[i]] = true;\n } else {\n borders[borderTypeCol[i]] = false;\n }\n });\n\n return borders;\n};\n\nexport const getBorders = (matrices, encoder) => {\n let showRowBorders = { top: false, bottom: false };\n let showColBorders = { left: false, right: false };\n let showValueBorders = { top: false, bottom: false, left: false, right: false };\n const {\n rows,\n columns,\n values: valueMatrix\n } = matrices;\n const [leftRows, rightRows] = rows;\n const [topColumns, bottomColumns] = columns;\n const {\n rowDimensions,\n columnDimensions,\n rowTemporalFields,\n columnTemporalFields,\n columnMeasures,\n rowMeasures\n } = encoder.fieldInfo();\n const allDimensionLength = rowDimensions.length + columnDimensions.length;\n const allMeasuresLength = rowMeasures.length + columnMeasures.length;\n const allTemporalFieldsLength = rowTemporalFields.length + columnTemporalFields.length;\n\n if (encoder.constructor.type() === POLAR) {\n if (!allDimensionLength) {\n return { showRowBorders, showColBorders, showValueBorders };\n }\n } else if (!allMeasuresLength && !allTemporalFieldsLength && allDimensionLength <= 2) {\n return { showRowBorders, showColBorders, showValueBorders };\n }\n\n showRowBorders = getRowBorders(leftRows, rightRows);\n showColBorders = getColumnsBorders(topColumns, bottomColumns);\n showValueBorders = getValueBorders([leftRows, rightRows], [topColumns, bottomColumns]);\n\n if (valueMatrix.length > 1) {\n showValueBorders.top = true;\n showValueBorders.bottom = true;\n }\n if (valueMatrix.length && valueMatrix[0].length > 1) {\n showValueBorders.left = true;\n showValueBorders.right = true;\n }\n return { showRowBorders, showColBorders, showValueBorders };\n};\n\nexport const getFieldsFromSuppliedLayers = (suppliedLayerConfig, fieldsConfig) => {\n let fields = [];\n const encodingArr = suppliedLayerConfig.map(conf => (conf.encoding || {}));\n fields = [...fields, [].concat(...encodingArr.map(enc => Object.values(enc).map(d => d.field)))];\n fields = fields.filter(field => fieldsConfig[field] && fieldsConfig[field].def.type === FieldType.DIMENSION);\n return fields;\n};\n\nexport const extractFields = (facetsAndProjections, layerFields) => {\n const fields = Object.values(facetsAndProjections).map((arr) => {\n const flattenArray = [].concat(...arr);\n return [].concat(...flattenArray.map((field) => {\n if (field instanceof Variable) {\n return field.getMembers();\n }\n return field;\n }));\n });\n return [].concat(...fields, ...layerFields);\n};\n\n/**\n * This method sorts the facets fields inplace if field is of categorical type\n * @param {Object} facet\n * @param {Array} keys Array of the facet field values\n */\nexport const sortFacetFields = (facet, keys, config) => {\n const facetName = `${facet}`;\n const type = facet.type();\n\n if (type === DIMENSION && config.sort[facetName]) {\n if (config.sort[facetName] === 'asc') {\n keys.sort((a, b) => a - b);\n } else {\n keys.sort((a, b) => b - a);\n }\n }\n};\n","import { BEHAVIOURS, ACTIONS } from '@chartshq/muze-firebolt';\n\nexport const actionBehaviourMap = {\n [ACTIONS.DRAG]: {\n behaviours: [BEHAVIOURS.BRUSH],\n touch: false\n },\n [ACTIONS.HOVER]: {\n behaviours: [BEHAVIOURS.HIGHLIGHT]\n },\n [ACTIONS.LONGTOUCH]: {\n behaviours: [BEHAVIOURS.SELECT],\n touch: true\n },\n [ACTIONS.TOUCHDRAG]: {\n behaviours: [BEHAVIOURS.BRUSH],\n touch: true\n },\n [ACTIONS.CLICK]: {\n behaviours: [BEHAVIOURS.SELECT],\n touch: false\n }\n};\n","import {\n FieldType,\n getDependencyOrder,\n getObjProp,\n defaultValue,\n objectIterator,\n unionDomain,\n makeElement,\n DimensionSubtype,\n toArray,\n MeasureSubtype,\n getNearestValue\n} from 'muze-utils';\nimport { layerFactory, ENCODING } from '@chartshq/visual-layer';\n\nexport const getDimensionMeasureMap = (layers, fieldsConfig) => {\n const retinalEncodingsAndMeasures = {};\n\n layers.forEach((layer) => {\n const {\n colorField,\n sizeField,\n shapeField,\n xField,\n yField\n } = layer.encodingFieldsInf();\n const measures = [xField, yField].filter(field => fieldsConfig[field] && fieldsConfig[field].def.type ===\n FieldType.MEASURE);\n [colorField, sizeField, shapeField].forEach((field) => {\n if (fieldsConfig[field] && fieldsConfig[field].def.type === FieldType.DIMENSION) {\n !retinalEncodingsAndMeasures[field] && (retinalEncodingsAndMeasures[field] = []);\n retinalEncodingsAndMeasures[field].push(...measures);\n }\n });\n });\n\n for (const key in retinalEncodingsAndMeasures) {\n if ({}.hasOwnProperty.call(retinalEncodingsAndMeasures, key)) {\n retinalEncodingsAndMeasures[key] = [...new Set(retinalEncodingsAndMeasures[key])];\n }\n }\n return retinalEncodingsAndMeasures;\n};\n\nexport const transformDataModels = (transform, dataModel) => {\n const dataModels = {};\n for (const key in transform) {\n if ({}.hasOwnProperty.call(transform, key)) {\n const transformVal = transform[key];\n dataModels[key] = transformVal(dataModel);\n }\n }\n\n return dataModels;\n};\n\nexport const getLayerFromDef = (context, definition, existingLayer, namespaces) => {\n let instances = existingLayer;\n const dependencies = context._layerDeps;\n const metaInf = context.metaInf();\n if (!existingLayer) {\n instances = layerFactory.getLayerInstance(definition);\n toArray(instances).forEach((inst, i) => {\n inst.metaInf({\n unitRowIndex: metaInf.rowIndex,\n unitColIndex: metaInf.colIndex,\n namespace: namespaces[i]\n });\n inst.store(context.store());\n });\n }\n const layers = {};\n const instanceArr = toArray(instances);\n definition = toArray(definition);\n definition.reduce((acc, def, idx) => {\n const instance = instanceArr[idx];\n instance.coord(context.coord());\n instance.config(def);\n instance.valueParser(context.valueParser());\n instance.dependencies(dependencies);\n instance.dataProps({\n timeDiffs: context._timeDiffs\n });\n if (def.name) {\n instance.alias(def.name);\n }\n layers[instance.alias()] = instance;\n return acc;\n }, {});\n return layers;\n};\n\nexport const resolveEncodingTransform = (layerInst, store) => {\n const encodingTransform = layerInst.config().encodingTransform || {};\n const resolvable = encodingTransform.resolvable;\n let depArr = [];\n if (resolvable) {\n const resolved = resolvable(store);\n depArr = resolved.depArr;\n layerInst.encodingTransform(resolved.fn);\n } else if (encodingTransform instanceof Function) {\n layerInst.encodingTransform(encodingTransform);\n }\n return depArr;\n};\n\nexport const sanitizeLayerDef = (layerDefs) => {\n const sanitizedDefs = [];\n layerDefs.forEach((layerDef, i) => {\n const def = layerDef.def;\n const mark = layerDef.mark;\n if (!def) {\n const sConf = layerFactory.getSerializedConf(layerDef.mark, layerDef);\n if (!sConf.name) {\n sConf.name = `${mark}-${i}`;\n }\n sanitizedDefs.push({\n mark: layerDef.mark,\n def: sConf\n });\n } else {\n if (!def.name) {\n def.name = `${mark}-${i}`;\n }\n sanitizedDefs.push(layerDef);\n }\n });\n return sanitizedDefs;\n};\n\nexport const attachDataToLayers = (layers, dm, transformedDataModels) => {\n layers.forEach((layer) => {\n const dataSource = layer.config().source;\n const dataModel = dataSource instanceof Function ? dataSource(dm) :\n (transformedDataModels[dataSource] || dm);\n if (layer.data() !== dataModel) {\n layer.data(dataModel);\n }\n });\n};\n\nexport const attachAxisToLayers = (axes, layers, layerAxisIndex) => {\n layers.forEach((layer) => {\n const layerId = layer.id();\n const axesObj = {};\n\n objectIterator(axes, (key) => {\n const axisInf = layerAxisIndex[layerId];\n if (axisInf) {\n const axisArr = axes[key] || [];\n const axisIndex = axisInf[key] >= 0 ? axisInf[key] : axisArr.length - 1;\n axes[key] && (axesObj[key] = defaultValue(axes[key][axisIndex]));\n }\n });\n Object.keys(axesObj).length && layer.axes(axesObj);\n });\n};\n\nconst { X, Y, RADIUS, ANGLE, ANGLE0, RADIUS0 } = ENCODING;\n\nexport const getLayerAxisIndex = (layers, fields) => {\n const layerAxisIndex = {};\n layers.forEach((layer) => {\n const { axis, encoding } = layer.config();\n const id = layer.id();\n [X, Y, ANGLE, ANGLE0, RADIUS].forEach((type) => {\n let index;\n const specificField = getObjProp(encoding, type, 'field');\n const encodingField = type === RADIUS ? defaultValue(specificField, getObjProp(encoding, RADIUS0, 'field'))\n : getObjProp(encoding, type, 'field');\n const field = defaultValue(getObjProp(axis, type), encodingField);\n if (fields[type] && fields[type].length) {\n index = fields[type].findIndex(fieldInst => fieldInst.getMembers().indexOf(field) !== -1);\n } else {\n index = 0;\n }\n !layerAxisIndex[id] && (layerAxisIndex[id] = {});\n layerAxisIndex[id][type] = index;\n });\n });\n return layerAxisIndex;\n};\n\nconst getValidDomain = (domain, domain1, encodingType, fieldType) => {\n if (encodingType === ANGLE || encodingType === ANGLE0) {\n return domain.concat(domain1.filter(d => domain.indexOf(d) === -1));\n }\n return unionDomain([domain, domain1], fieldType);\n};\n\nexport const unionDomainFromLayers = (layers, axisFields, layerAxisIndex, fieldsConfig) => {\n let domains = {};\n layers = layers.filter(layer => layer.getDataDomain() !== null);\n layers.forEach((layer) => {\n let domainValues = {};\n const config = layer.config();\n // const encoding = config.encoding;\n const layerDomain = layer.getDataDomain();\n const layerId = layer.id();\n\n if (layerDomain !== null && config.calculateDomain !== false) {\n domainValues = Object.entries(layerDomain);\n domains = domainValues.reduce((fieldDomain, domain) => {\n const encodingType = domain[0];\n const axisIndex = layerAxisIndex[layerId][encodingType];\n const field = getObjProp(axisFields, encodingType, axisIndex);\n !fieldDomain[encodingType] && (fieldDomain[encodingType] = {});\n const encodingDomain = fieldDomain[encodingType];\n if (field) {\n const fieldStr = `${field}`;\n encodingDomain[fieldStr] = encodingDomain[fieldStr] || [];\n encodingDomain[fieldStr] = getValidDomain(encodingDomain[fieldStr],\n domain[1], encodingType, fieldsConfig[field.getMembers()[0]].def.subtype);\n }\n return fieldDomain;\n }, domains);\n }\n });\n return domains;\n};\n\nexport const renderLayers = (context, container, layers, measurement) => {\n context._lifeCycleManager.notify({ client: layers, action: 'beforedraw', formalName: 'layer' });\n const config = context.config();\n const classPrefix = config.classPrefix;\n const orderedLayers = context.layers().sort((a, b) => a.config().order - b.config().order);\n const layerParentGroup = makeElement(container, 'g', [1], `${classPrefix}-layer-group`);\n const layerDepOrder = getDependencyOrder(context._layerDepOrder);\n const groups = {};\n makeElement(layerParentGroup, 'g', orderedLayers, null, {\n update: (group, layer) => {\n groups[layer.alias()] = {\n group,\n layer\n };\n }\n });\n const layerSeq = layerDepOrder.map(name => groups[name]);\n layerSeq.forEach((o) => {\n const layer = o.layer;\n const group = o.group;\n layer.measurement(measurement);\n layer.dataProps({\n timeDiffs: context._timeDiffs\n });\n layer.config().render !== false && layer.mount(group.node());\n });\n return this;\n};\n\nexport const getNearestDimensionalValue = (context, position) => {\n const fields = context.fields();\n if (!fields.x.length || !fields.y.length) {\n return null;\n }\n const data = context.data();\n const axes = context.axes();\n const fieldsConfig = data.getFieldsConfig();\n const xField = getObjProp(fields, 'x', 0).getMembers()[0];\n const yField = getObjProp(fields, 'y', 0).getMembers()[0];\n const xFieldType = fieldsConfig[xField].def.subtype;\n const yFieldType = fieldsConfig[yField].def.subtype;\n\n const entryVal = [['x', xFieldType, xField], ['y', yFieldType, yField]].find(entry =>\n entry[1] === DimensionSubtype.CATEGORICAL || entry[1] === DimensionSubtype.TEMPORAL);\n\n if (!entryVal || (xFieldType !== MeasureSubtype.CONTINUOUS && yFieldType !== MeasureSubtype.CONTINUOUS)) {\n return null;\n }\n const field = entryVal[2];\n const index = fieldsConfig[field].index;\n let key = axes[entryVal[0]][0].invert(position[entryVal[0]]);\n if (entryVal[1] === DimensionSubtype.TEMPORAL) {\n const filterData = [...new Set(data.getData().data.map(d => d[index]))];\n key = getNearestValue(filterData, key);\n }\n\n return key !== undefined ? [[field], [key]] : null;\n};\n\nexport const getLayersBy = (layers, searchBy, value) => layers.filter((layer) => {\n const name = searchBy === 'type' ? layer.constructor.formalName() : layer.alias();\n return name === value;\n});\n\nexport const removeLayersBy = (layers, searchBy, value) => {\n layers.filter((inst) => {\n const name = searchBy === 'type' ? inst.config().mark : inst.alias();\n if (name === value) {\n inst.remove();\n return false;\n }\n return true;\n });\n};\n\nexport const createSideEffectGroup = (container, className) => makeElement(container, 'g', [1], className).node();\n\nexport const createRenderPromise = (unit) => {\n const renderedPromise = unit._renderedPromise;\n renderedPromise.then(() => {\n unit._renderedPromise = new Promise((resolve) => {\n unit._renderedResolve = resolve;\n });\n createRenderPromise(unit);\n });\n};\n\nexport const getRadiusRange = (width, height, config = {}) => {\n const {\n innerRadius,\n outerRadius\n } = config;\n\n return [innerRadius || 0, outerRadius || Math.min(height,\n width) / 2];\n};\n\nexport const setAxisRange = (context) => {\n const axes = context.axes();\n const { radius: radiusAxes } = axes;\n if (radiusAxes) {\n radiusAxes.forEach((axis) => {\n axis.range(getRadiusRange(context.width(), context.height()));\n });\n }\n};\n","export const CLASSPREFIX = 'muze';\nexport const IDFIELD = '__id__';\nexport const GRID_LINE_PARENT_GROUP_CLASS = 'grid-lines';\nexport const GRID_BAND_PARENT_GROUP_CLASS = 'grid-bands';\nexport const GRID_PARENT_GROUP = 'grid-parent-group';\nexport const BAND = 'band';\nexport const TICK = 'tick';\nexport const GRID_BAND = 'gridBands';\nexport const GRID_LINE = 'gridLines';\nexport const CONSOLIDATED = 'consolidated';\nexport const FRAGMENTED = 'fragmented';\nexport const FACET_BY_FIELDS = 'facetByFields';\nexport const RETINAL_FIELDS = 'retinalFields';\nexport const PARENT_ALIAS = 'parentAlias';\nexport const LAYERS = 'layers';\nexport const CACHED_DATA = 'cachedData';\nexport const STORE = 'store';\n","import { getObjProp, defaultValue, makeElement, DimensionSubtype, DataModel, createSelection } from 'muze-utils';\nimport { ScaleType } from '@chartshq/muze-axis';\nimport { layerFactory, LAYER_TYPES } from '@chartshq/visual-layer';\nimport {\n GRID_BAND,\n GRID_LINE,\n GRID_BAND_PARENT_GROUP_CLASS,\n GRID_LINE_PARENT_GROUP_CLASS,\n GRID_PARENT_GROUP\n} from '../enums/constants';\n\nconst { BAR_LAYER, TICK_LAYER } = LAYER_TYPES;\n\nconst LINEAR = ScaleType.LINEAR;\n\nconst getLayerDefinition = (context, axes, type, orientation) => {\n let encoding;\n const config = context.config();\n const { classPrefix, gridLines, gridBands } = config;\n const gridLineColor = gridLines.color;\n const zeroLineColor = gridLines.zeroLineColor;\n const defClassName = type === GRID_BAND ? gridBands.defClassName : gridLines.defClassName;\n const gridBandColor = gridBands[orientation].color;\n const axis = axes[orientation][0];\n const isLinearScale = axis.constructor.type() === LINEAR;\n\n if (type === GRID_BAND && isLinearScale) {\n encoding = {\n [orientation]: `${orientation}value`,\n [`${orientation}0`]: `${orientation}value0`\n };\n } else {\n encoding = {\n [orientation]: isLinearScale ? `${orientation}value` : `${orientation}dim`\n };\n }\n encoding.color = {\n value: (data, i) => {\n const isNegativeDomain = isLinearScale && axis.domain()[0] < 0;\n if (type === GRID_BAND) {\n return gridBandColor[i % 2];\n }\n return isNegativeDomain && data[orientation] === 0 ? zeroLineColor : gridLineColor;\n }\n };\n const { color, shape, size } = context.axes();\n return {\n definition: {\n defClassName: `${defClassName}-${orientation}`,\n className: config.className,\n name: orientation,\n individualClassName: (data, i) => {\n let className;\n const isNegativeDomain = isLinearScale && axis.domain()[0] < 0;\n if (isNegativeDomain && data.y === 0 && type !== GRID_BAND) {\n className = `${classPrefix}-axis-zero-line`;\n } else {\n className = `${classPrefix}-grid-${type}-${orientation}-${i % 2}`;\n }\n return className;\n },\n [`pad${orientation.toUpperCase()}`]: type === GRID_BAND ? 0 : undefined,\n encoding\n },\n axes: {\n [orientation]: axis,\n color: color[0],\n shape: shape[0],\n size: size[0]\n },\n interactive: false\n };\n};\n\nconst getDefaultVisibilty = (show, axis) => {\n if (axis.constructor.type() === LINEAR) {\n return show;\n }\n return false;\n};\n\nexport const getGridLayerDefinitions = (context, config, type) => ['x', 'y'].map((axisType) => {\n const axes = context.axes();\n if (!axes[axisType]) {\n return null;\n }\n const show = defaultValue(config[axisType] && config[axisType].show,\n getDefaultVisibilty(config.show, axes[axisType][0]));\n\n return show ? getLayerDefinition(context, axes, type, axisType) : null;\n}).filter(d => d !== null);\n\nconst dimensionSubTypes = Object.values(DimensionSubtype).reduce((acc, v) => {\n acc[v] = 1;\n return acc;\n}, {});\nconst getValidSubtype = subtype => (!dimensionSubTypes[subtype] ? DimensionSubtype.CATEGORICAL : subtype);\n\nexport const getGridLayerData = (axes, fields, fieldsConfig) => {\n const gridData = {};\n\n ['x', 'y'].forEach((type) => {\n let ticks = axes[type][0].getTickValues();\n const subtype = getObjProp(fieldsConfig, getObjProp(fields, type, 0).getMembers()[0], 'def', 'subtype');\n const jsonData = [];\n const schema = [\n {\n name: 'yvalue',\n type: 'measure'\n }, {\n name: 'xvalue',\n type: 'measure'\n },\n {\n name: 'yvalue0',\n type: 'measure'\n }, {\n name: 'xvalue0',\n type: 'measure'\n }, {\n name: 'xdim',\n type: 'dimension',\n subtype: getValidSubtype(subtype)\n }, {\n name: 'ydim',\n type: 'dimension',\n subtype: getValidSubtype(subtype)\n }\n ];\n const len = Math.max(ticks.length);\n ticks = subtype === DimensionSubtype.TEMPORAL ? ticks.map(d => d.getTime()) : ticks;\n for (let i = 0; i < len; i += 1) {\n jsonData.push({\n [`${type}value`]: ticks[i],\n [`${type}value0`]: ticks[i + 1],\n [`${type}dim`]: ticks[i],\n [`${type}dim`]: ticks[i]\n });\n }\n gridData[type] = new DataModel(jsonData, schema);\n });\n return gridData;\n};\n\nexport const createGridLineLayer = (context) => {\n const vuConf = context.config();\n const metaInf = context.metaInf();\n const store = context.store();\n const timeDiffs = context._timeDiffs;\n [GRID_BAND, GRID_LINE].forEach((type) => {\n let mark;\n let config;\n if (type === GRID_BAND) {\n mark = BAR_LAYER;\n config = vuConf.gridBands;\n } else {\n mark = TICK_LAYER;\n config = vuConf.gridLines;\n }\n const definitions = getGridLayerDefinitions(context, config, type);\n\n const sel = `_${type}Selection`;\n context[sel] = createSelection(context[sel], () => {\n const inst = layerFactory.getLayerInstance({ mark });\n inst.dependencies(context._layerDeps);\n return inst;\n }, definitions, atomicDef => atomicDef.definition.name);\n context[sel].each((layer, atomicDef) => {\n const definition = atomicDef.definition;\n const name = definition.name;\n const sConf = layerFactory.getSerializedConf(mark, definition);\n const axesObj = atomicDef.axes;\n layer.metaInf({\n unitRowIndex: metaInf.rowIndex,\n unitColIndex: metaInf.colIndex,\n namespace: `${metaInf.namespace}${type}${name}`\n })\n .store(store)\n .config(sConf)\n .dataProps({\n timeDiffs\n })\n .axes(axesObj);\n });\n context[`_${type}`] = context[sel].getObjects();\n });\n};\n\nexport const attachDataToGridLineLayers = (context) => {\n const axes = context.axes();\n const measurement = {\n width: context.width(),\n height: context.height()\n };\n const gridLines = context._gridLines;\n const gridBands = context._gridBands;\n const gridLayerData = getGridLayerData(axes, context.fields(), context.data().getFieldsConfig());\n [].concat(...gridBands, ...gridLines).forEach((inst) => {\n inst.data(inst.axes().x ? gridLayerData.x : gridLayerData.y).measurement(measurement);\n });\n};\n\nexport const renderGridLineLayers = (context, container) => {\n const config = context.config();\n const classPrefix = config.classPrefix;\n const gridLines = context._gridLines;\n const gridBands = context._gridBands;\n\n const gridLineParentGroup = makeElement(container, 'g', [1], `${classPrefix}-${GRID_PARENT_GROUP}`);\n [[gridLines, `${classPrefix}-${GRID_LINE_PARENT_GROUP_CLASS}`],\n [gridBands, `${classPrefix}-${GRID_BAND_PARENT_GROUP_CLASS}`]].forEach((entry) => {\n const [instances, parentGroupClass] = entry;\n const mountPoint = makeElement(gridLineParentGroup, 'g', [1], `.${parentGroupClass}`);\n const className = `${parentGroupClass}-group`;\n makeElement(mountPoint, 'g', instances, `.${className}`, {\n update: (group, instance) => {\n instance.dataProps({ timeDiffs: context._timeDiffs }).mount(group.node());\n }\n });\n });\n};\n","import { CLASSPREFIX, CONSOLIDATED } from './enums/constants';\n\n/**\n * Returns the default configuration of the visual unit\n * @return {Object} Default configuration of visual unit\n */\nexport const defaultConfig = {\n classPrefix: CLASSPREFIX,\n defClassName: 'visual-unit',\n className: '',\n trackerClassName: 'visual-unit-tracker',\n minOuterRadius: 10,\n gridLines: {\n defClassName: 'axis-grid-lines',\n className: '',\n show: true,\n color: '#efefef',\n zeroLineColor: '#b6b6b6'\n },\n gridBands: {\n defClassName: 'axis-grid-bands',\n className: '',\n show: false,\n y: {\n color: ['#fff', '#fbfbfb']\n },\n x: {\n color: ['#fff', '#f9f9f9']\n }\n },\n arcLayerClassName: 'layer-arc',\n interaction: {\n tooltip: {\n mode: CONSOLIDATED\n }\n },\n sideEffectClassName: 'side-effect-container'\n};\n","import { mergeRecursive, DataModel } from 'muze-utils';\nimport { defaultConfig } from './default-config';\nimport { CONFIG, LAYERDEFS, TRANSFORM, DATA, LAYERS, TRANSFORMEDDATA } from './enums/reactive-props';\nimport { sanitizeLayerDef } from './helper';\n\nexport default {\n [CONFIG]: {\n value: null,\n meta: {\n sanitization: (config, oldConfig) => (\n mergeRecursive(oldConfig || mergeRecursive({}, defaultConfig), config)\n )\n }\n },\n [LAYERDEFS]: {\n value: null,\n meta: {\n preset: layerDef => sanitizeLayerDef(layerDef)\n }\n },\n [TRANSFORM]: {\n value: null\n },\n [LAYERS]: {\n value: null\n },\n [DATA]: {\n value: null,\n meta: {\n typeCheck: d => d instanceof DataModel,\n preset: (data, context) => {\n if (context._cache) {\n const cachedData = context.cachedData();\n context.cachedData([...cachedData, data]);\n } else {\n const oldData = context.cachedData()[0];\n oldData && oldData.unsubscribe('propagation');\n context.cachedData([data]);\n }\n }\n }\n },\n [TRANSFORMEDDATA]: {\n value: null,\n meta: {\n addAsMethod: false\n }\n }\n};\n","export const CONFIG = 'config';\nexport const DATA = 'data';\nexport const AXES = 'axes';\nexport const LAYERDEFS = 'layerDef';\nexport const WIDTH = 'width';\nexport const HEIGHT = 'height';\nexport const MOUNT = 'mount';\nexport const TRANSFORM = 'transform';\nexport const TRANSFORMEDDATA = 'transformedData';\nexport const DATADOMAIN = 'dataDomain';\nexport const FIELDS = 'fields';\nexport const LAYERAXISINDEX = 'layerAxisIndex';\nexport const LAYERS = 'layers';\nexport const DOMAIN = 'domain';\n\n","import { STATE_NAMESPACES, temporalFields, getObjProp, defaultValue } from 'muze-utils';\nimport * as PROPS from './enums/reactive-props';\nimport {\n transformDataModels,\n getDimensionMeasureMap,\n attachDataToLayers,\n attachAxisToLayers,\n unionDomainFromLayers\n} from './helper';\n\nimport { createGridLineLayer, attachDataToGridLineLayers } from './helper/grid-lines';\n\nconst removeExitLayers = (layerDefs, context) => {\n const layersMap = context._layersMap;\n const markSet = {};\n layerDefs.forEach((layerDef, i) => {\n const id = defaultValue(layerDef.name, `${layerDef.mark}-${i}`);\n markSet[id] = true;\n });\n\n for (const key in layersMap) {\n if (!(key in markSet)) {\n layersMap[key].forEach(layer => layer.remove());\n delete layersMap[key];\n }\n }\n};\n\nexport const calculateDomainListener = (context, namespace) => () => {\n const domain = unionDomainFromLayers(context.layers(), context.fields(), context._layerAxisIndex,\n context.data().getFieldsConfig());\n context.store().commit(`${STATE_NAMESPACES.UNIT_GLOBAL_NAMESPACE}.${PROPS.DOMAIN}.${namespace}`, domain);\n};\n\nexport const listenerMap = (context, namespace, metaInf) => ([\n {\n type: 'registerImmediateListener',\n props: [`${namespace.local}.${PROPS.CONFIG}`],\n listener: ([, config]) => {\n config && context.firebolt().config(config.interaction);\n }\n },\n {\n type: 'registerImmediateListener',\n props: [`${namespace.local}.${PROPS.LAYERDEFS}`],\n listener: ([, layerDefs]) => {\n const fieldsVal = context.fields();\n if (layerDefs && fieldsVal) {\n removeExitLayers(layerDefs, context);\n const axes = context.axes();\n if (axes.x || axes.y) {\n const props = [`${STATE_NAMESPACES.GROUP_GLOBAL_NAMESPACE}.domain.y.${metaInf.rowIndex}0`,\n `${STATE_NAMESPACES.GROUP_GLOBAL_NAMESPACE}.domain.x.${metaInf.colIndex}0`];\n const store = context.store();\n const listenerInf = {\n namespace: namespace.local,\n key: 'gridLineListener'\n };\n store.unsubscribe(listenerInf);\n store.registerChangeListener(props, () => {\n attachDataToGridLineLayers(context);\n }, false, listenerInf);\n }\n\n context.addLayer(layerDefs);\n const adjustRange = context.layers().some(inst => inst.hasPlotSpan());\n ['x', 'y'].forEach((type) => {\n const axisArr = defaultValue(getObjProp(context.axes(), type), []);\n axisArr.forEach((axis) => {\n axis.config({\n adjustRange\n });\n });\n });\n context._lifeCycleManager.notify({\n client: context.layers(),\n action: 'initialized',\n formalName: 'layer'\n });\n }\n }\n },\n {\n type: 'registerImmediateListener',\n props: [`${namespace.local}.${PROPS.DATA}`],\n listener: ([, dataModel]) => {\n const axesObj = context.axes();\n const timeDiffs = {};\n const timeDiffsByField = {};\n\n Object.entries(temporalFields(dataModel)).forEach(([fieldName, fieldObj]) => {\n timeDiffsByField[fieldName] = fieldObj.minimumConsecutiveDifference();\n });\n\n Object.entries(context.fields()).forEach(([type, [field]]) => {\n if (field) {\n const timeDiff = timeDiffsByField[`${field}`];\n if (timeDiff) {\n timeDiffs[type] = timeDiff;\n axesObj[type].forEach(axis => axis.minDiff(timeDiff));\n }\n }\n });\n\n context._timeDiffsByField = timeDiffsByField;\n context._timeDiffs = timeDiffs;\n }\n },\n {\n type: 'registerImmediateListener',\n props: [`${namespace.local}.${PROPS.CONFIG}`],\n listener: () => {\n createGridLineLayer(context);\n }\n },\n {\n type: 'registerImmediateListener',\n props: [`${namespace.local}.${PROPS.DATA}`,\n `${namespace.local}.${PROPS.TRANSFORM}`],\n listener: ([, dataModel], [, transform]) => {\n if (dataModel) {\n const dataModels = transformDataModels(transform, dataModel);\n context.store().commit(`${namespace.local}.${PROPS.TRANSFORMEDDATA}`, dataModels);\n }\n }\n },\n {\n type: 'registerImmediateListener',\n props: [`${namespace.local}.${PROPS.TRANSFORMEDDATA}`,\n `${namespace.local}.${PROPS.LAYERS}`],\n listener: ([, transformedData], [, layers]) => {\n const layerAxisIndexVal = context._layerAxisIndex;\n const axesVal = context.axes();\n const dataModel = context.data();\n if (transformedData && layers && axesVal && layerAxisIndexVal) {\n context._lifeCycleManager.notify({ client: layers, action: 'beforeupdate', formalName: 'layer' });\n const model = context.store().model;\n layers.forEach(lyr => lyr.disableUpdate());\n attachDataToLayers(layers, dataModel, transformedData);\n model.lock();\n layers.forEach((lyr) => {\n lyr.enableUpdate().domain(lyr._domain);\n });\n model.unlock();\n context._dimensionMeasureMap = getDimensionMeasureMap(layers,\n dataModel.getFieldsConfig(), context.retinalFields());\n attachAxisToLayers(axesVal, layers, layerAxisIndexVal);\n context._lifeCycleManager.notify({ client: layers, action: 'updated', formalName: 'layer' });\n }\n }\n }\n]);\n","import { FACET_BY_FIELDS, RETINAL_FIELDS, PARENT_ALIAS, LAYERS, CACHED_DATA } from './enums/constants';\n\nexport const PROPS = {\n [FACET_BY_FIELDS]: {},\n [RETINAL_FIELDS]: {},\n [PARENT_ALIAS]: {},\n [LAYERS]: {},\n [CACHED_DATA]: {},\n detailFields: {},\n axes: {\n defaultValue: {\n x: [],\n y: []\n }\n },\n fields: {},\n metaInf: {},\n registry: {},\n width: {},\n height: {},\n parentContainerInf: {},\n valueParser: {\n defaultValue: val => val\n },\n coord: {}\n};\n","import { CommonProps } from 'muze-utils';\nimport { SpawnableSideEffect } from '@chartshq/muze-firebolt';\nimport { DATA } from '../enums/reactive-props';\n\nexport const initSideEffects = (sideEffects, firebolt) => {\n for (const key in sideEffects) {\n if ({}.hasOwnProperty.call(sideEffects, key)) {\n sideEffects[key] instanceof SpawnableSideEffect && sideEffects[key].drawingContext(() => {\n const context = firebolt.context;\n return context.getDrawingContext();\n });\n sideEffects[key].valueParser(firebolt.context.valueParser());\n }\n }\n};\n\nexport const clearActionHistory = (context) => {\n const actionHistory = context._actionHistory;\n for (const key in actionHistory) {\n if (actionHistory[key].isMutableAction) {\n delete context._actionHistory[key];\n }\n }\n};\n\nexport const dispatchQueuedSideEffects = (context) => {\n const queuedSideEffects = context._queuedSideEffects;\n Object.entries(queuedSideEffects).forEach((entry) => {\n const sideEffect = entry[1];\n context.dispatchSideEffect(sideEffect.name, ...sideEffect.params);\n });\n context._queuedSideEffects = {};\n};\n\nexport const registerListeners = (firebolt) => {\n const context = firebolt.context;\n const store = context.store();\n\n store.registerImmediateListener([`local.units.${context.metaInf().namespace}.${DATA}`], (dataModel) => {\n const dm = dataModel[1];\n\n if (dm) {\n firebolt.createSelectionSet(firebolt.context.data().getData().uids);\n firebolt.initializeSideEffects();\n const originalData = firebolt.context.cachedData()[0];\n firebolt.attachPropagationListener(originalData);\n }\n });\n\n store.registerChangeListener([`local.units.${context.metaInf().namespace}.${DATA}`], () => {\n if (!firebolt.context.mount()) {\n const originalData = firebolt.context.cachedData()[0];\n originalData.unsubscribe('propagation');\n }\n });\n\n context._layerDeps.throwback.registerChangeListener([CommonProps.ON_LAYER_DRAW],\n ([, onlayerdraw]) => {\n if (onlayerdraw) {\n dispatchQueuedSideEffects(firebolt);\n clearActionHistory(firebolt);\n }\n });\n};\n","import { DimensionSubtype } from 'muze-utils';\n\nconst getRangeFromData = (instance, selectionDataModel, propConfig) => {\n let criteria;\n const dataObj = selectionDataModel[0].getData();\n const propCriteria = propConfig.payload.criteria;\n const sourceIdentifiers = propConfig.sourceIdentifiers;\n const schema = dataObj.schema;\n const fieldMap = instance.data().getFieldsConfig();\n const data = dataObj.data;\n const isActionSourceSame = instance.id() === propConfig.sourceId;\n\n if (isActionSourceSame) {\n criteria = propCriteria;\n } else {\n criteria = (sourceIdentifiers !== null) ? schema.reduce((acc, obj, index) => {\n let range;\n const field = obj.name;\n const fieldObj = fieldMap[field];\n const type = fieldObj && (fieldObj.def.subtype ? fieldObj.def.subtype : fieldObj.def.type);\n const isDimension = type === DimensionSubtype.CATEGORICAL;\n\n if (!fieldObj) {\n return acc;\n }\n\n if (!isDimension) {\n range = [Math.min(...data.map(d => d[index])), Math.max(...data.map(d => d[index]))];\n } else {\n range = data.map(d => d[index]);\n }\n acc[field] = range;\n return acc;\n }, {}) : null;\n }\n return criteria;\n};\n\nexport const payloadGenerator = {\n brush: (instance, selectionDataModel, propConfig) => {\n const propPayload = propConfig.payload;\n const criteria = getRangeFromData(instance, selectionDataModel, propConfig);\n const payload = Object.assign({}, propPayload);\n payload.criteria = criteria;\n return payload;\n },\n\n __default: (instance, selectionDataModel, propConfig) => {\n const propPayload = propConfig.payload;\n const sourceIdentifiers = propConfig.sourceIdentifiers;\n const dataObj = selectionDataModel[0].getData();\n let schema = dataObj.schema;\n const payload = Object.assign({}, propPayload);\n schema = dataObj.schema;\n const data = dataObj.data;\n const sourceFields = schema.map(d => d.name);\n payload.criteria = !sourceIdentifiers && selectionDataModel[0].isEmpty() ? null :\n [sourceFields, ...data];\n payload.sourceFields = sourceIdentifiers ? sourceIdentifiers.getSchema().map(d => d.name) : [];\n return payload;\n }\n};\n\n","import { isSimpleObject, FieldType, DataModel } from 'muze-utils';\n\nconst getModelWithFacetData = (dm, data) => {\n const dataObj = dm.getData();\n const schema1 = dataObj.schema;\n const data1 = dataObj.data;\n const jsonData = [];\n const schema2 = data[0].map(d => ({\n name: `${d}`,\n type: FieldType.DIMENSION\n }));\n const data2 = data[1];\n\n data1.forEach((d) => {\n const tuple = {};\n schema1.forEach((obj, i) => {\n tuple[obj.name] = d[i];\n });\n schema2.forEach((obj, i) => {\n tuple[obj.name] = data2[i];\n });\n jsonData.push(tuple);\n });\n\n return new DataModel(jsonData, [...schema1, ...schema2]);\n};\n\nexport const propagateValues = (instance, action, config = {}) => {\n let propagationData;\n const payload = config.payload;\n const selectionSet = config.selectionSet;\n const propagationFieldInf = config.propagationFields[action] || {};\n const propagationFields = propagationFieldInf.fields || [];\n const append = propagationFieldInf.append;\n const criteria = payload.criteria;\n const context = instance.context;\n const dataModel = context.cachedData()[0];\n const sourceId = context.id();\n const sideEfffects = instance.sideEffects();\n const behaviourEffectMap = instance._behaviourEffectMap;\n const mergedModel = selectionSet.mergedEnter.model;\n const fieldsConfig = dataModel.getFieldsConfig();\n payload.sourceUnit = sourceId;\n payload.action = action;\n payload.sourceCanvas = context.parentAlias();\n const propagationBehaviourMap = instance._propagationBehaviourMap;\n const propagationBehaviour = propagationBehaviourMap[action] || action;\n\n let propFields = [];\n if (criteria === null) {\n propagationData = null;\n } else if (isSimpleObject(criteria)) {\n propFields = Object.keys(criteria || {});\n propagationData = mergedModel ? mergedModel.project(propFields) : null;\n } else {\n propFields = criteria[0];\n propagationData = mergedModel ? mergedModel.project(propFields) : null;\n }\n\n const facetByFields = context.facetByFields();\n if (propagationData !== null && propagationFields.length) {\n const fields = propagationData.getData().schema.map(d => d.name);\n propagationData = getModelWithFacetData(propagationData, facetByFields);\n propFields = append ? [...fields, ...propagationFields] : propagationFields;\n propagationData = propagationData.project(propFields);\n }\n\n let propagateInterpolatedValues = false;\n if (propFields.length && propFields.every(field => fieldsConfig[field] &&\n fieldsConfig[field].def.type === FieldType.MEASURE)) {\n propagateInterpolatedValues = true;\n }\n\n const groupId = context.parentAlias();\n payload.action = action;\n const behaviourInstance = instance._actions.behavioural[propagationBehaviour];\n const isMutableAction = behaviourInstance ? behaviourInstance.constructor.mutates() : false;\n\n const filterFn = (entry, propagationConf) => {\n const effects = behaviourEffectMap[entry.config.action];\n const mutates = entry.config.groupId ?\n effects.some(d => sideEfffects[d.name || d].constructor.mutates()) : true;\n return entry.config.groupId !== propagationConf.groupId && mutates;\n };\n\n const sourceBehaviour = instance._actions.behavioural[action];\n const mutates = sourceBehaviour ? sourceBehaviour.constructor.mutates() : false;\n let propConfig = {\n payload,\n action,\n criteria: propagationData,\n isMutableAction: mutates,\n propagateInterpolatedValues,\n groupId,\n sourceId: mutates ? groupId : sourceId,\n filterFn,\n enabled: (propConf, firebolt) => (action !== propagationBehaviour ?\n propConf.payload.sourceCanvas === firebolt.context.parentAlias() : true)\n };\n\n dataModel.propagate(propagationData, propConfig, true);\n\n if (action !== propagationBehaviour) {\n propConfig = {\n payload,\n sourceId: isMutableAction ? groupId : sourceId,\n criteria: propagationData,\n isMutableAction,\n propagateInterpolatedValues,\n action: propagationBehaviour,\n groupId,\n applyOnSource: action === propagationBehaviour,\n enabled: (propConf, firebolt) => propConf.payload.sourceCanvas !== firebolt.context.parentAlias(),\n filterFn\n };\n\n dataModel.propagate(propagationData, propConfig, true, {\n filterImmutableAction: (actionInf, propInf) => actionInf.groupId !== propInf.groupId\n });\n }\n};\n","import { FieldType } from 'muze-utils';\nimport { Firebolt } from '@chartshq/muze-firebolt';\nimport { registerListeners } from './helper';\nimport { payloadGenerator } from './payload-generator';\nimport { propagateValues } from './data-propagator';\n\n/**\n * This class manages the interactions of visual unit. It associates physical actions with\n * behavioural actions. It also propagates the behavioural actions to other datamodels.\n */\nexport default class UnitFireBolt extends Firebolt {\n constructor (...params) {\n super(...params);\n registerListeners(this);\n }\n\n propagate (behaviour, payload, selectionSet, sideEffects) {\n propagateValues(this, behaviour, {\n payload,\n selectionSet,\n sideEffects,\n propagationFields: this._propagationFields\n });\n }\n\n getApplicableSideEffects (sideEffects, payload, propagationInf) {\n const context = this.context;\n const unitId = context.id();\n const aliasName = context.parentAlias();\n const propagationSourceCanvas = propagationInf.propPayload && propagationInf.propPayload.sourceCanvas;\n const sourceUnitId = propagationInf.propPayload && propagationInf.propPayload.sourceUnit;\n const sourceSideEffects = this._sourceSideEffects;\n const sideEffectInstances = this.sideEffects();\n const actionOnSource = sourceUnitId ? sourceUnitId === unitId : true;\n\n const applicableSideEffects = payload.sideEffects ? [{\n effects: payload.sideEffects,\n behaviours: [payload.action]\n }] : sideEffects;\n applicableSideEffects.forEach((d) => {\n let mappedEffects = d.effects;\n mappedEffects = mappedEffects.filter((se) => {\n const mutates = sideEffectInstances[se.name || se].constructor.mutates();\n if (mutates && propagationInf.isMutableAction === false) {\n return false;\n }\n if (!actionOnSource && payload.criteria !== null) {\n const sideEffectChecker = sourceSideEffects[se.name || se];\n return sideEffectChecker ? sideEffectChecker(propagationInf.propPayload, context) : true;\n }\n if (propagationSourceCanvas === aliasName || actionOnSource) {\n return se.applyOnSource !== false;\n }\n\n return true;\n });\n d.effects = mappedEffects;\n });\n return applicableSideEffects;\n }\n\n shouldApplySideEffects (propagate) {\n return propagate === false;\n }\n\n onDataModelPropagation () {\n return (data, config) => {\n let isSourceFieldPresent = true;\n let isMutableAction = false;\n const propPayload = config.payload;\n const sourceIdentifiers = config.sourceIdentifiers;\n const enabledFn = config.enabled;\n const action = config.action;\n const payloadFn = payloadGenerator[action] || payloadGenerator.__default;\n\n if (sourceIdentifiers) {\n const fieldsConfig = sourceIdentifiers.getFieldsConfig();\n const sourceIdentifierFields = Object.keys(fieldsConfig);\n const propFields = Object.keys(data[0].getFieldsConfig());\n if (!Object.values(fieldsConfig).some(d => d.def.type === FieldType.MEASURE)) {\n isSourceFieldPresent = sourceIdentifierFields.some(d => propFields.indexOf(d) !== -1);\n }\n }\n\n const payload = payloadFn(this.context, data, config);\n const sourceBehaviours = this._sourceBehaviours;\n const filterFn = sourceBehaviours[action] || sourceBehaviours['*'];\n let enabled = true;\n\n if (filterFn) {\n enabled = filterFn(propPayload || {}, this.context);\n }\n\n if (enabledFn) {\n enabled = enabledFn(config, this) && enabled !== false;\n }\n\n if (enabled) {\n const effects = this._behaviourEffectMap[action];\n const sideEffectInstances = this.sideEffects();\n isMutableAction = config.groupId ?\n effects.some(d => sideEffectInstances[d.name || d].constructor.mutates()) : config.isMutableAction;\n\n const propagationInf = {\n propagate: false,\n data,\n propPayload,\n sourceIdentifiers,\n persistent: false,\n isSourceFieldPresent,\n sourceId: config.propagationSourceId,\n isMutableAction: config.isMutableAction\n };\n\n this._actionHistory[action] = {\n payload,\n propagationInf,\n isMutableAction\n };\n this.dispatchBehaviour(action, payload, propagationInf);\n }\n };\n }\n\n prepareSelectionSets (behaviours) {\n const data = this.context.data();\n if (data) {\n this.createSelectionSet(data.getData().uids, behaviours);\n }\n return this;\n }\n\n initializeSideEffects () {\n if (this.context.data()) {\n super.initializeSideEffects();\n }\n return this;\n }\n\n remove () {\n this.context.cachedData()[0].unsubscribe('propagation');\n return this;\n }\n}\n","import { layerFactory } from '@chartshq/visual-layer';\nimport {\n Store,\n setAttrs,\n getUniqueId,\n getQualifiedClassName,\n selectElement,\n transactor,\n makeElement,\n registerListeners,\n generateGetterSetters,\n getDataModelFromIdentifiers,\n isSimpleObject,\n transposeArray,\n CommonProps,\n toArray,\n STATE_NAMESPACES\n} from 'muze-utils';\nimport { physicalActions, sideEffects, behaviouralActions, behaviourEffectMap } from '@chartshq/muze-firebolt';\nimport { actionBehaviourMap } from './firebolt/action-behaviour-map';\nimport {\n renderLayers,\n getNearestDimensionalValue,\n removeLayersBy,\n getLayersBy,\n getLayerFromDef,\n getLayerAxisIndex,\n sanitizeLayerDef,\n createSideEffectGroup,\n resolveEncodingTransform,\n createRenderPromise,\n setAxisRange\n} from './helper';\nimport { renderGridLineLayers } from './helper/grid-lines';\nimport localOptions from './local-options';\nimport { listenerMap, calculateDomainListener } from './listener-map';\nimport {\n DOMAIN\n} from './enums/reactive-props';\nimport { PROPS } from './props';\nimport UnitFireBolt from './firebolt';\nimport { initSideEffects } from './firebolt/helper';\nimport './styles.scss';\n\nconst FORMAL_NAME = 'unit';\n\n/**\n * Visual Unit is hierarchical component created by {@link VisualGroup}. This component accepts layer definitions\n * and creates concrete layer instances from them, binds data and attaches axis to them. It also retreives the domain\n * from the layers and unions them and sets them on corresponding axis instances. This also creates the parent svg\n * groups for all the layers and delegates the rendering to all the layers.\n *\n * @public\n * @module VisualUnit\n * @class\n */\nexport default class VisualUnit {\n\n /**\n * Creates instance of visualization unit.\n *\n * @param {Object} registry Component registry\n * @param {Object} dependencies Dependencies required by visual unit.\n */\n constructor (registry, dependencies) {\n this._id = getUniqueId();\n this._dependencies = dependencies;\n this._layerDeps = {\n throwback: new Store({\n [CommonProps.ON_LAYER_DRAW]: false\n }),\n smartLabel: dependencies.smartLabel,\n lifeCycleManager: dependencies.lifeCycleManager\n };\n this._renderedResolve = null;\n this._renderedPromise = new Promise((resolve) => {\n this._renderedResolve = resolve;\n });\n createRenderPromise(this);\n this._layerDeps.throwback.registerChangeListener([CommonProps.ON_LAYER_DRAW], () => {\n this._renderedResolve();\n this._lifeCycleManager.notify({ client: this.layers(), action: 'drawn', formalName: 'layer' });\n });\n\n this._lifeCycleManager = dependencies.lifeCycleManager;\n this._layersMap = {};\n this._gridLinesSelection = null;\n this._gridBandsSelection = null;\n this._gridLines = [];\n this._gridBands = [];\n this._layerNamespaces = {};\n this._layerAxisIndex = {};\n this._transformedDataModels = {};\n layerFactory.setLayerRegistry(registry.layerRegistry);\n generateGetterSetters(this, PROPS);\n this.registry(registry);\n this.cachedData([]);\n }\n\n static formalName () {\n return FORMAL_NAME;\n }\n\n static getState () {\n return [\n {\n domain: {}\n },\n localOptions\n ];\n }\n\n store (...params) {\n if (params.length) {\n this._store = params[0];\n const metaInf = this.metaInf();\n this.store().append(`${STATE_NAMESPACES.UNIT_LOCAL_NAMESPACE}`, {\n [`${metaInf.namespace}`]: null\n });\n const localNs = `${STATE_NAMESPACES.UNIT_LOCAL_NAMESPACE}.${metaInf.namespace}`;\n transactor(this, localOptions, this.store().model, {\n namespace: localNs\n });\n registerListeners(this, listenerMap, {\n local: localNs,\n global: STATE_NAMESPACES.UNIT_GLOBAL_NAMESPACE\n }, {\n rowIndex: metaInf.rowIndex,\n colIndex: metaInf.colIndex\n });\n this.firebolt(new UnitFireBolt(this, {\n physical: physicalActions,\n behavioural: behaviouralActions,\n physicalBehaviouralMap: actionBehaviourMap\n }, sideEffects, behaviourEffectMap));\n return this;\n }\n return this._store;\n }\n\n /**\n * Static helper for creates a unit instance\n *\n * @param {Object} [id] optional unique identifier for a unit; , id is calculated internally\n * @param {DataModel} data instance of datamodel\n * @param {Array.} layers layer configuration\n * @param {Object} config configurtion for the visual unit\n * @return {VisualUnit} Instance of a unit\n */\n static create (...params) {\n return new this(...params);\n }\n\n /**\n * Returns the instance of firebolt associated with this visual unit. Firebolt dispatches the behavioural actions\n * when any physical action happens on the elements of visual unit.\n *\n * @public\n *\n * @return {Firebolt} Instance of firebolt.\n */\n firebolt (...firebolt) {\n if (firebolt.length) {\n this._firebolt = firebolt[0];\n return this;\n }\n return this._firebolt;\n }\n\n /**\n * Returns the unique id of this visual unit.\n *\n * @public\n * @return {string} Unique identifier.\n */\n id () {\n return this._id;\n }\n\n lockModel () {\n this._store.model.lock();\n return this;\n }\n\n unlockModel () {\n this._store.model.unlock();\n return this;\n }\n\n timeDiffsByField (...params) {\n if (params.length) {\n return this;\n }\n return this._timeDiffsByField;\n }\n\n /**\n * Renders the visual unit. It creates the layout and renders the axes and layers.\n *\n * @return {VisualUnit} Instance of visual unit.\n */\n render (container) {\n const config = this.config();\n const { className, defClassName, sideEffectClassName, classPrefix } = config;\n const qualifiedClassName = getQualifiedClassName(defClassName, this.id(), config.classPrefix);\n const width = this.width();\n const height = this.height();\n const containerSelection = selectElement(container).style('position', 'relative');\n\n this._rootSvg = makeElement(containerSelection, 'svg', [null], className)\n .style('width', `${width}px`).style('height', `${height}px`);\n\n const node = this._rootSvg.node();\n setAttrs(node, {\n width,\n height,\n class: qualifiedClassName.join(' ')\n });\n\n setAxisRange(this);\n renderGridLineLayers(this, node);\n renderLayers(this, node, this.layers(), {\n width,\n height\n });\n this._sideEffectGroup = createSideEffectGroup(node, `${classPrefix}-${sideEffectClassName}`);\n const firebolt = this.firebolt();\n initSideEffects(firebolt.sideEffects(), firebolt);\n return this;\n }\n\n done () {\n return this._renderedPromise;\n }\n\n /**\n * Caches all the datamodels in an array from the next `data()` call on visual unit until `clearCaching()` or\n * `resetData()` is called on it.\n *\n * @public\n * @return {VisualUnit} Instance of visual unit.\n */\n\n enableCaching () {\n this._cache = true;\n return this;\n }\n\n /**\n * Clears all the previous cached data.\n *\n * @public\n * @segment VisualUnit\n * @return {VisualUnit} Instance of visual unit.\n */\n clearCaching () {\n this._cache = false;\n this.cachedData([this.cachedData()[0]]);\n return this;\n }\n\n /**\n * Returns the drawing information from visual unit.Drawing context contains the dimensions of unit and the svg\n * container of the visual unit.\n *\n * @public\n *\n * @return {Object} Drawing information.\n * ```\n * {\n * htmlContainer: // Html container of svg container of the visual unit\n * svgContainer: // Root svg container\n * width: // Width of the visual unit\n * height: // Height of the visual unit\n * sideEffectGroup: // Svg group for drawing side effect elements.\n * parentContainer: // Parent html container of the visual unit.\n * xOffset: // x offset space from the starting x position of the container,\n * yOffset: // y offset space from the starting y position of the container\n * }\n * ```\n */\n getDrawingContext () {\n const rootSvg = this._rootSvg && this._rootSvg.node();\n const width = this.width();\n const height = this.height();\n const { el, dimensions } = this.parentContainerInf();\n return {\n htmlContainer: this.mount(),\n svgContainer: rootSvg,\n width,\n height,\n sideEffectGroup: this._sideEffectGroup,\n parentContainer: el,\n parentContainerDimensions: dimensions,\n xOffset: 0,\n yOffset: 0\n };\n }\n\n /**\n * Returns the serialized configuration of visual unit.\n *\n * @return {Object} serialized configuration\n */\n serialize () {\n return {\n layers: this.layers().map(layer => layer.serialize()),\n config: this.config(),\n axes: this.axes().map(axis => axis.serialize())\n };\n }\n\n mount (...mount) {\n if (mount.length) {\n this._mount = mount[0];\n this.render(mount[0]);\n this.firebolt().mapActionsAndBehaviour();\n return this;\n }\n return this._mount;\n }\n\n /**\n * Adds a new layer to the visual unit. It takes a layer definition and creates layer instances from them. It does\n * not render the layers. It returns the layer instances in an array. If the layer definition is a composite layer,\n * then multiple layer instances will be returned in the array.\n *\n * To add a layer in the unit,\n * ```\n * unit.addLayer({\n * name: 'bullet',\n * mark: 'bar',\n * encoding: {\n * x: 'Year',\n * y: 'Acceleration',\n * color: 'Origin'\n * }\n * });\n * ```\n * @public\n * @param {Object} layerDef Definition of new layer.\n *\n * @return {Array} Array of layer instances.\n */\n addLayer (layerDefinition) {\n const layerDefinitions = sanitizeLayerDef(toArray(layerDefinition));\n\n const layersMap = this._layersMap;\n const markSet = {};\n const store = {\n layers: {},\n components: {\n unit: this\n }\n };\n let layerIndex = 0;\n let startIndex = [].concat(...Object.values(this._layersMap)).length;\n const metaInf = this.metaInf();\n const props = this._layerNamespaces;\n const layers = layerDefinitions.sort((a, b) => a.order - b.order).reduce((layersArr, layerDef) => {\n const definition = layerDef.def;\n const markId = definition.name;\n const defArr = toArray(definition);\n const namespaces = [];\n defArr.forEach((def) => {\n def.order = layerDef.order + layerIndex;\n const namespace = `${metaInf.namespace}${startIndex}`;\n if (!layersMap[markId]) {\n startIndex++;\n if (definition.calculateDomain !== false) {\n props[`${STATE_NAMESPACES.LAYER_GLOBAL_NAMESPACE}.${DOMAIN}.${namespace}`] = true;\n }\n }\n namespaces.push(namespace);\n });\n layerIndex += defArr.length;\n const instances = getLayerFromDef(this, definition, layersMap[markId], namespaces);\n store.layers = Object.assign(store.layers, instances);\n const instanceValues = Object.values(instances);\n layersArr = layersArr.concat(...instanceValues);\n layersMap[markId] = instanceValues;\n markSet[markId] = markId;\n return layersArr;\n }, []);\n\n store.unit = this;\n const layerdeps = {};\n const layersArr = [].concat(...Object.values(this._layersMap));\n layersArr.forEach((layer) => {\n const alias = layer.alias();\n store.layers[alias] = layer;\n layerdeps[alias] = [];\n });\n layers.forEach((layer) => {\n const depArr = resolveEncodingTransform(layer, store);\n layerdeps[layer.alias()] = depArr;\n });\n\n this._layerDepOrder = layerdeps;\n this._layerAxisIndex = Object.assign(this._layerAxisIndex, getLayerAxisIndex(layers, this.fields()));\n const stateStore = this.store();\n\n stateStore.unsubscribe({\n key: 'calculateDomainListener',\n namespace: `${STATE_NAMESPACES.UNIT_LOCAL_NAMESPACE}.${metaInf.namespace}`\n });\n stateStore.registerImmediateListener(Object.keys(props), calculateDomainListener(this, metaInf.namespace),\n false, {\n key: 'calculateDomainListener',\n namespace: `${STATE_NAMESPACES.UNIT_LOCAL_NAMESPACE}.${metaInf.namespace}`\n });\n this.layers(layersArr);\n return layers;\n }\n\n /**\n *\n *\n *\n * @memberof VisualUnit\n */\n remove () {\n const lifeCycleManager = this._dependencies.lifeCycleManager;\n lifeCycleManager.notify({ client: this, action: 'beforeremove', formalName: 'unit' });\n this.store().unsubscribe({\n namespace: `${STATE_NAMESPACES.UNIT_LOCAL_NAMESPACE}.${this.metaInf().namespace}`\n });\n selectElement(this.mount()).remove();\n this.firebolt().remove();\n // Remove layers\n lifeCycleManager.notify({ client: this.layers(), action: 'beforeremove', formalName: 'layer' });\n this.layers().forEach(layer => layer.remove());\n lifeCycleManager.notify({ client: this.layers(), action: 'removed', formalName: 'layer' });\n lifeCycleManager.notify({ client: this, action: 'removed', formalName: 'unit' });\n return this;\n }\n\n /**\n *\n *\n * @param {*} identifiers\n *\n * @memberof VisualUnit\n */\n getDataModelFromIdentifiers (identifiers, mode, parentModel) {\n if (identifiers === null) {\n return null;\n }\n const dataModel = parentModel || this.data();\n return getDataModelFromIdentifiers(dataModel, identifiers, mode);\n }\n\n /**\n * Resets the data of visual unit to original data model. It also clears the cached data.\n *\n * @public\n * @segment VisualUnit\n * @return {VisualUnit} Instance of visual unit.\n */\n resetData () {\n this.data(this.cachedData()[0]);\n return this;\n }\n\n /**\n *\n *\n *\n * @memberof VisualUnit\n */\n getSourceInfo () {\n return {\n dimensionMeasureMap: this._dimensionMeasureMap,\n fields: this.fields(),\n data: this.data(),\n axes: this.axes()\n };\n }\n\n getDataDomain () {\n return this.store().get(`${STATE_NAMESPACES.UNIT_GLOBAL_NAMESPACE}.domain.${this.metaInf().namespace}`);\n }\n\n /**\n *\n *\n *\n * @memberof VisualUnit\n */\n getDefaultTargetContainer () {\n const { classPrefix, defClassName } = this.config();\n return [`.${classPrefix}-${defClassName}`];\n }\n\n /**\n * Returns an array of layer instances which matches the supplied mark type.\n *\n * @public\n *\n * @param {string} type Mark type of layer.\n *\n * @return {Array} Array of layer instances.\n */\n getLayersByType (type) {\n const layers = getLayersBy(this.layers(), 'type', type);\n return layers;\n }\n\n /**\n * Returns the layer instance which matches the supplied layer name. If no layer is found, then it returns\n * undefined.\n *\n * @public\n * @param {string} name Name of layer.\n *\n * @return {VisualUnit} Layer instance.\n */\n getLayerByName (name) {\n const layers = getLayersBy(this.layers(), 'name', name);\n return layers[0];\n }\n\n /**\n * Returns the point located nearest to the supplied x and y position. It returns the unique identifiers of the\n * point. This function also accepts an additional configuration `getAllPoints` inside `config` object in the third\n * argument which if set to true, then it returns the identifiers of all the points which falls on the nearest\n * x value or y value if any one of the field is a dimension. Additionally, a target property is also returned\n * which contains the identifier of the nearest point. If no nearest point is found, then it returns identifier\n * as null.\n *\n * @public\n *\n * @param {number} x X Position of the point from where nearest point is to be found.\n * @param {number} y Y Position of the point from where nearest point is to be found.\n * @param {Object} config Additional configuration options.\n * @param {boolean} config.getAllPoints If true, then returns all the points nearest to the x value or y value if\n * it is dimension.\n * @param {Object} config.data Data associated with the nearest point.\n * @return {Object} Nearest point information\n * ```\n * {\n * id: [['Origin'], ['USA'], ['Japan']], // Identifiers of all the points closest to the x value.\n * target: [['Origin'], ['Japan']] // Identifier of the nearest point.\n * }\n * ```\n */\n getNearestPoint (x, y, config) {\n let pointObj = {\n id: null\n };\n const dimValue = getNearestDimensionalValue(this, {\n x,\n y\n });\n\n if (dimValue !== null && config.getAllPoints) {\n pointObj.id = dimValue;\n const pointInf = this.getMarkInfFromLayers(x, y, config);\n pointObj.target = pointInf && pointInf.id ? pointInf.id : pointObj.id;\n return pointObj;\n }\n\n const markInf = this.getMarkInfFromLayers(x, y, config) || { id: null };\n pointObj = Object.assign({}, markInf);\n\n pointObj.target = markInf.id;\n return pointObj;\n }\n\n getMarkInfFromLayers (x, y, args) {\n const layers = this.layers();\n const len = layers.length;\n let point = null;\n // Iterate through the layers array and fetch the nearest point from each layer. If a valid\n // nearest point is found from any layer, then return that point.\n for (let i = 0; i < len; i++) {\n const layer = layers[i];\n const config = layer.config();\n if (config.interactive !== false) {\n point = layer.getNearestPoint(x, y, args);\n }\n if (point) {\n return point;\n }\n }\n return point;\n }\n\n /**\n * Get the information of all the marks such as x, y position and size from supplied identifiers. It\n * returns an array of points whose data matches the given identifiers.\n *\n * @public\n *\n * @param {Array|Object} identifiers Field names and their corresponding values.\n * ```\n * identifiers can be given in an array of array,\n * ['Origin', 'Name'], // Names of the fields supplied in first array\n * ['USA', 'ford'], // Data values of each field supplied in rest of the arrays.\n * ['Japan', 'ford']\n * or in an object,\n * {\n * Origin: ['USA']\n * }\n * ```\n * @param {Object} config Optional configurations which decides which information of the mark will\n * be retrieved.\n * @param {boolean} [config.getAllAttrs = false] If true, then returns all the information of each mark.\n * @param {boolean} [config.getBBox = false] If true, then returns the bounding box of each mark.\n *\n * @return {Array} Array of objects containing the information of each point.\n * ```\n * By default, the method returns the array of points in this structure,\n * [\n * {\n * x: 20,\n * y: 100,\n * width: 200,\n * height: 100\n * }\n * ]\n * If 'config.getAllAttrs' is true, then it returns all the information of each mark,\n * [\n * // Positions of mark on initial state of transition.\n * enter: {\n * x: 0,\n * y: 0\n * },\n * // Final positions of the mark\n * update: {\n * x: 20,\n * y: 10\n * },\n * style: // css styles of each mark\n * source: [200, 'USA'] // Row information of each mark\n * id: 20 // Row id of each mark\n * ]\n * ```\n */\n getPlotPointsFromIdentifiers (identifiers, config = {}) {\n let points = [];\n let parsedIdentifiers = identifiers;\n if (identifiers === null) {\n return [];\n }\n const layers = this.layers();\n const len = layers.length;\n if (isSimpleObject(identifiers)) {\n parsedIdentifiers = [Object.keys(identifiers)];\n parsedIdentifiers = [...parsedIdentifiers, ...transposeArray(Object.values(identifiers))];\n }\n for (let i = 0; i < len; i++) {\n const layer = layers[i];\n if (layer.config().interactive !== false) {\n points = [...points, ...layer.getPointsFromIdentifiers(parsedIdentifiers, config)];\n }\n }\n return points;\n }\n\n /**\n * Removes the layer instance which matches the supplied layer name.\n *\n * @public\n * @param {string} name Name of layer\n *\n * @return {VisualUnit} Instance of visual unit.\n */\n removeLayerByName (name) {\n removeLayersBy('name', name);\n return this;\n }\n\n /**\n * Removes all the layer instances which matches the supplied mark type.\n *\n * @public\n * @param {string} type Mark type of layer.\n *\n * @return {VisualUnit} Instance of visual unit.\n */\n removeLayersByType (type) {\n removeLayersBy('type', type);\n return this;\n }\n}\n","import { DataModel } from 'muze-utils';\nimport { retriveDomainFromData, sortFacetFields } from './group-utils';\n\n/**\n * Gets name of fields form the variables\n *\n * @param {*} fields1\n * @param {*} [fields2=[]]\n *\n */\nconst getFieldNames = (fields1, fields2 = []) => [fields1, fields2].map(fields => fields.reduce((acc, d) => {\n acc = [...acc, ...d.getMembers()];\n return acc;\n}, []));\n\n/**\n * Creates a selected datamodel from a parent datamodel and a set of field names\n *\n * @param {Object} datamodel provided as input\n * @param {Array} fieldNames schema names\n * @param {Array} fieldValues values of those schema names to be selected\n * @return {Object} creates a new selected datamodel\n */\nconst createSelectedDataModel = (datamodel, fieldNames, fieldValues) =>\n datamodel.select(fields => fieldNames.every((field, k) => fields[field].value === fieldValues[k]));\n\n/**\n *\n *\n * @param {*} facets\n * @param {*} keyArray\n *\n */\nconst uniqueKeyGenerator = (keyArray, context, depth = 0, val = []) => {\n const {\n facets,\n dataModel,\n uniqueValues\n } = context;\n\n // Get unique keys for the next depth recursively if required\n if (facets[depth + 1]) {\n const field = facets[depth];\n uniqueValues.forEach((value) => {\n const newDm = dataModel.select(fields => fields[field].value === value);\n const nextDepthUniqueValues = retriveDomainFromData(newDm, facets[depth + 1]);\n const newContext = {\n facets,\n dataModel: newDm,\n uniqueValues: nextDepthUniqueValues\n };\n\n uniqueKeyGenerator(keyArray, newContext, depth + 1, [...val, value]);\n });\n } else {\n uniqueValues.forEach((value) => {\n keyArray.push([...val, value]);\n });\n }\n};\n\n/**\n * projects row model based on the set of row and/or column and other projection fields\n *\n * @param {Object} datamodel provided as input\n * @return {Object} Projected datamodel\n */\nconst projectRows = (datamodel, projections) => {\n const {\n allColumnProjections,\n rowProjections,\n optionalProjections\n } = projections;\n\n if (rowProjections.length > 0) {\n return rowProjections.map((projectFields) => {\n const [projFieldNames, colProjFieldNames] = getFieldNames(projectFields, allColumnProjections);\n return datamodel.project([...projFieldNames, ...colProjFieldNames, ...optionalProjections]);\n });\n }\n return [datamodel];\n};\n\n/**\n * Adds the datamodels to current row index based on column fields\n *\n * @param {Array} context current context\n * @param {Array} valueCellCreator List of facets applied to the current datamodel\n */\nconst pushToMatrix = (context, valueCellCreator) => {\n let cells = [];\n const {\n matrix,\n datamodel,\n facetInfo,\n fieldInfo\n } = context;\n // Get projected fields for current row\n const {\n rowProjections,\n colProjections,\n optionalProjections\n } = fieldInfo;\n const {\n rowIndex,\n columnIndex\n } = facetInfo;\n const rowProj = rowProjections[(rowIndex) % rowProjections.length] || [];\n\n // Get the cells for the matrix from the return function of the callback on the datamodel.\n // callback function -> (datamodel, {projections, indices}, facets)\n if (colProjections.length > 0) {\n cells = colProjections.map((projectFields, projIdx) => {\n const [colProjFieldNames, rowProjFieldNames] = getFieldNames(projectFields, rowProj);\n const projectedDm = datamodel.project([...colProjFieldNames, ...rowProjFieldNames, ...optionalProjections]);\n const projections = { rowFields: rowProj, columnFields: projectFields };\n const indices = { rowIndex, columnIndex: columnIndex * colProjections.length + projIdx };\n\n return valueCellCreator(projectedDm, { projections, indices }, facetInfo);\n });\n } else {\n const projections = { rowFields: rowProj, columnFields: [] };\n const indices = { rowIndex, columnIndex };\n\n cells = [valueCellCreator(datamodel, { projections, indices }, facetInfo)];\n }\n\n matrix[rowIndex] = matrix[rowIndex] || [];\n matrix[rowIndex].push(...cells);\n};\n\n/**\n * Formats row or columns keys with the provided formatter.\n *\n * @param {Array} keys - The collection of row or column keys.\n * @param {Array} formatterList - The list of corresponding formatter.\n */\nconst formatKeys = (keys, formatterList) => {\n keys.forEach((rKeys) => {\n rKeys.forEach((key, idx) => {\n rKeys[idx] = formatterList[idx](key);\n });\n });\n};\n\n/**\n * Gets Matrixes for corresponding datamodel, facets and projections\n *\n * @param {Object} dataModel input datamodel\n * @param {Array} facetsAndProjections contains the set of facets and projections for the matrices\n * @param {Function} valueCellCreator Callback executed after datamodels are prepared after sel/proj\n * @param {Object} globalConfig global config\n *\n * @return {Object} set of matrices with the corresponding row and column keys\n */\nexport const getMatrixModel = (dataModel, facetsAndProjections, valueCellCreator, globalConfig) => {\n let rowDataModels = [];\n const rowKeys = [];\n const columnKeys = [];\n const allColumnProjections = [];\n const matrix = [];\n const facetInfo = [];\n\n const fieldInfo = Object.assign({}, facetsAndProjections);\n const {\n rowFacets,\n colFacets,\n colProjections\n } = fieldInfo;\n\n colProjections.forEach((colProj) => {\n allColumnProjections.push(...colProj);\n });\n fieldInfo.allColumnProjections = allColumnProjections;\n\n // Performing row selection and projection\n if (rowFacets.length > 0) {\n // Get unique values for the root level of facet\n const field = rowFacets[0].toString();\n const firstLevelRowKeys = retriveDomainFromData(dataModel, field);\n\n sortFacetFields(rowFacets[0], firstLevelRowKeys, globalConfig);\n\n // Get unique keys in the form of an array of arrays for each row\n uniqueKeyGenerator(rowKeys, { facets: rowFacets, dataModel, uniqueValues: firstLevelRowKeys });\n\n // Apply selection -> projection -> row datamodels\n rowKeys.forEach((val) => {\n // Create faceted datamodel\n const [rowFacetFieldNames] = getFieldNames(rowFacets);\n const selectedDataModel = createSelectedDataModel(dataModel, rowFacetFieldNames, val);\n\n // Project the datamodel based on the number of projections (based on last levels)\n const newProjectedDataModels = projectRows(selectedDataModel, fieldInfo);\n rowDataModels.push(...newProjectedDataModels);\n\n newProjectedDataModels.forEach(() => {\n facetInfo.push([rowFacets, val]);\n });\n });\n } else {\n // No row facets, hence only row projection\n rowDataModels.push(...projectRows(dataModel, fieldInfo));\n }\n\n // Maintaining set of row datamodels for column resolution\n rowDataModels = rowDataModels.length > 0 ? rowDataModels : [[]];\n\n // Performing column selection and projection\n if (colFacets.length > 0) {\n const colFacetNames = colFacets.map(d => `${d}`);\n // Get unique values for the root level of facet\n const field = colFacetNames[0];\n const firstLevelColumnKeys = retriveDomainFromData(dataModel, field);\n\n sortFacetFields(colFacets[0], firstLevelColumnKeys, globalConfig);\n\n // Get unique keys to create faceted datamodels: this time for columns\n uniqueKeyGenerator(columnKeys, {\n facets: colFacetNames,\n dataModel,\n uniqueValues: firstLevelColumnKeys\n });\n // For each row in the datamodel, apply selection -> projection -> push the projection to matri\n rowDataModels.forEach((dme, rIndex) => {\n facetInfo[rIndex] = facetInfo[rIndex] || [[], []];\n columnKeys.forEach((val, cIndex) => {\n matrix[rIndex] = matrix[rIndex] || [];\n\n // If datamodel is not present in current row, choose parent datamodel\n const datamodel = dme instanceof DataModel ? dme : dataModel;\n\n // Selection is made on the datamodel for the current row\n const selectedDataModel = createSelectedDataModel(datamodel, colFacetNames, val);\n const context = {\n matrix,\n datamodel: selectedDataModel,\n facetInfo: {\n rowFacets: facetInfo[rIndex],\n colFacets: [colFacets, val],\n rowIndex: rIndex,\n columnIndex: cIndex\n },\n fieldInfo\n };\n pushToMatrix(context, valueCellCreator);\n });\n });\n } else {\n // No column facets, hence only row projection\n rowDataModels.forEach((dme, rIndex) => {\n facetInfo[rIndex] = facetInfo[rIndex] || [[], []];\n const context = {\n matrix,\n datamodel: dme || dataModel,\n facetInfo: {\n rowFacets: facetInfo[rIndex],\n colFacets: [[], []],\n rowIndex: rIndex,\n columnIndex: 0\n },\n fieldInfo\n };\n\n pushToMatrix(context, valueCellCreator);\n });\n }\n\n formatKeys(columnKeys, colFacets.map(facetField => facetField.rawFormat()));\n formatKeys(rowKeys, rowFacets.map(facetField => facetField.rawFormat()));\n\n // Getting column keys\n const transposedColKeys = columnKeys.length > 0 ? columnKeys[0].map((col, i) =>\n columnKeys.map(row => row[i])) : columnKeys;\n\n return { matrix, rowKeys, columnKeys: transposedColKeys };\n};\n","import { AxisOrientation } from '@chartshq/muze-axis';\nimport {\n getObjProp,\n FieldType,\n STATE_NAMESPACES,\n retrieveNearestGroupByReducers,\n mergeRecursive,\n createSelection\n} from 'muze-utils';\nimport { getMatrixModel } from './matrix-model';\nimport {\n getCellKey,\n isDistributionEqual,\n mutateAxesFromMap,\n getFieldsFromSuppliedLayers,\n extractFields\n} from './group-utils';\nimport { ROW, ROWS, COLUMNS, COL, LEFT, RIGHT, TOP,\n BOTTOM, PRIMARY, SECONDARY, X, Y, TEMPORAL } from '../enums/constants';\nimport { SimpleVariable } from '../variable';\n\n/**\n * Updates row and column cells with the geom cell corresponding to the facet keys\n *\n * @param {*} resolver\n * @param {*} facets\n */\nconst updateCells = (resolver, facets, geomCell) => {\n [ROW, COL].forEach((field) => {\n const cells = resolver[`${field}Cells`]();\n const facetKey = facets[`${field}Facets`][1].join();\n\n !cells[facetKey] && (cells[facetKey] = []);\n cells[facetKey].push(geomCell);\n resolver[`${field}Cells`](cells);\n });\n};\n\n/**\n *\n *\n * @param {*} context\n * @param {*} datamodel\n * @param {*} fieldInfo\n * @param {*} facets\n *\n */\nexport const createValueCells = (context, datamodel, fieldInfo, facets) => {\n const {\n projections,\n indices\n } = fieldInfo;\n const {\n rowFields,\n columnFields\n } = projections;\n const {\n rowIndex,\n columnIndex\n } = indices;\n const {\n suppliedLayers,\n cell: GeomCell,\n resolver,\n config,\n encoder,\n detailFields\n } = context;\n const axes = resolver.axes();\n const cacheMaps = resolver.cacheMaps();\n const matrixLayers = resolver.matrixLayers();\n const labelManager = resolver.dependencies().smartlabel;\n const horizontalAxis = resolver.horizontalAxis();\n const verticalAxis = resolver.verticalAxis();\n const datamodelTransform = resolver.datamodelTransform();\n const {\n entryCellMap,\n exitCellMap\n } = cacheMaps;\n const layerConfigArr = encoder.getLayerConfig({ columnFields, rowFields }, suppliedLayers || [],\n context.retinalConfig);\n const axesCreators = { config, labelManager, axes, cacheMaps };\n\n fieldInfo.normalizedColumns = verticalAxis.fields;\n fieldInfo.normalizedRows = horizontalAxis.fields;\n\n const allFacets = [\n [...facets.rowFacets[0], ...facets.colFacets[0]],\n [...facets.rowFacets[1], ...facets.colFacets[1]]\n ];\n const facetFields = allFacets.slice();\n facetFields[0] = facetFields[0].map(facetField => facetField.oneVar());\n\n matrixLayers[rowIndex] = matrixLayers[rowIndex] ? matrixLayers[rowIndex] : [];\n matrixLayers[rowIndex][columnIndex] = layerConfigArr;\n\n // return from map if already there otherwise create and put in map\n const geomCellKey = getCellKey(rowIndex, columnIndex);\n const fields = {\n y: rowFields,\n x: columnFields\n };\n\n const geomCell = !exitCellMap.has(geomCellKey) ? new GeomCell() : exitCellMap.get(geomCellKey);\n\n geomCell.data(datamodel)\n .fields(fields)\n .transform(datamodelTransform)\n .detailFields(detailFields)\n .facetByFields(allFacets);\n\n encoder.createAxis(axesCreators, fieldInfo, Object.assign({}, context, { geomCell, facetFields }));\n entryCellMap.set(geomCellKey, geomCell);\n exitCellMap.delete(geomCellKey);\n\n updateCells(resolver, facets, geomCell);\n\n return entryCellMap.get(geomCellKey);\n};\n\n/**\n * Creates axis cells based on the set of axes\n *\n * @param {Selection} selection Contains a selection of the axis units\n * @param {Array} axes Actual axis units\n * @param {number} axisIndex 0-> primary axis, 1-> secondary axis(when dual axis is made)\n * @param {Object} cells Contains a collection of the cells\n * @return {Object} return either set of axis/blank cells depending on the config\n */\n\nconst createAxisCells = (selection, axes, axisIndex, cells) =>\n createSelection(selection, axis => axis, axes, (item, i) => i + item.reduce((e, n) => {\n const id = n.id + axisIndex;\n return e + id;\n }, '')).map((currObj, axis) => {\n if (axis && axis[axisIndex]) {\n const axisInst = axis[axisIndex];\n const { orientation, show } = axisInst.config();\n\n return new cells.AxisCell().source(axisInst).config({\n isOffset: orientation === AxisOrientation.LEFT || orientation === AxisOrientation.TOP,\n show\n });\n }\n return new cells.BlankCell().config({ show: false });\n });\n\n/**\n *\n *\n * @param {*} context\n * @param {*} selectionObj\n * @param {*} cells\n * @retur\n */\nconst axisPlaceholderGn = (context, selObj, cells) => {\n const {\n matrices\n } = context;\n const {\n axesMatrix\n } = matrices;\n\n return (type, axisFrom) => {\n const axes = axesMatrix[`${type}`];\n\n if (axes && axes.length) {\n if (type === X || type === Y) {\n const fieldNames = type === Y ? ROWS : COLUMNS;\n\n [PRIMARY, SECONDARY].forEach((fieldType, index) => {\n const selObjProp = `${fieldNames}${fieldType}`;\n let axisIndex = index;\n let axesForDraw = axes;\n if (axisFrom === RIGHT || axisFrom === BOTTOM) {\n axisIndex = 1 - axisIndex;\n }\n if (!getObjProp(axes, 0, axisIndex)) {\n axesForDraw = [];\n }\n selObj[selObjProp] = createAxisCells(selObj[selObjProp], axesForDraw, axisIndex, cells);\n });\n } else {\n selObj.rowsPrimary = createAxisCells(selObj.rowPrime, axes.map(() => []), 0, cells);\n selObj.rowsSecondary = createAxisCells(selObj.rowSec, axes.map(() => []), 0, cells);\n selObj.columnsPrimary = createAxisCells(selObj.colPrime, axes[0], 0, cells);\n selObj.columnsSecondary = createAxisCells(selObj.colSec, axes[0], 0, cells);\n }\n }\n return selObj;\n };\n};\n\n/**\n * Creates header cells based on the set of headers\n *\n * @param {Object} selection Contains a selection of the header units\n * @param {string} headers Contains a list of the headers\n * @param {Object} cells Contains a collection of the cells\n * @param {Object} labelManager smart label instance\n * @return {Object} return either set of header cells depending on the config\n */\nconst createTextCells = (selection, headers, cells, labelManager) => createSelection(selection,\n (label) => {\n const textCell = new cells.TextCell({}, { labelManager });\n textCell.source(label);\n return textCell;\n }, headers, (key, i) => key + i);\n\n/**\n *\n *\n * @param {*} context\n * @param {*} selectionObj\n * @param {*} cells\n * @param {*} labelManager\n *\n */\nconst headerPlaceholderGn = (context, selectionObj, cells, labelManager) => {\n const {\n axis,\n keys,\n type,\n facet\n } = context;\n const counter = axis.length / keys.length;\n const selectionKeys = keys.length ? axis.map((d, i) => keys[Math.floor(i / counter)]) : [];\n\n const selObjUpdater = createSelection(selectionObj[`${type}Headers`], keySet => keySet, selectionKeys,\n (keySet, i) => `${keySet.join(',')}-${i}`);\n\n return selObjUpdater.map((keySet, data) => {\n let textCells = createTextCells(null, data, cells, labelManager);\n textCells = textCells.map((cell, k) => cell.source(k).config(facet));\n return textCells;\n });\n};\n\n/**\n * Creates a set of placeholders as a part of selection object\n *\n * @param {Array} normalizedOptions contains normalized rows and columns\n * @param {Array} matrices contains axis and value matrices\n * @param {aArrayny} projections contains set of row and column projections\n * @param {Object} cells Contains a collection of the cells\n * @param {Object} labelManager smart label instance\n * @return {Object} Creates a set of placeholders as a part of selections\n */\nconst generatePlaceholders = (context, cells, labelManager) => {\n let selectionObj;\n const {\n matrices,\n fields,\n facetsAndProjections,\n selection,\n facet,\n encoders,\n resolver\n } = context;\n const {\n rows,\n columns\n } = fields;\n const {\n valuesMatrix\n } = matrices;\n const {\n rowProjections,\n colProjections\n } = facetsAndProjections;\n const {\n rowKeys,\n columnKeys\n } = valuesMatrix;\n const takeAxisFrom = encoders.simpleEncoder._axisFrom;\n const takeHeaderFrom = encoders.simpleEncoder._headerFrom;\n\n selectionObj = selection || {};\n\n ['pie', X, Y].forEach((axis) => {\n const axisFrom = axis === X ? takeAxisFrom.column : takeAxisFrom.row;\n selectionObj = axisPlaceholderGn(context, selectionObj, cells)(axis, axisFrom);\n });\n\n const {\n rowsPrimary,\n rowsSecondary,\n columnsPrimary,\n columnsSecondary\n } = selectionObj;\n\n const rowAxis = rowsPrimary && rowsPrimary.getObjects().length ? rowsPrimary.getObjects() :\n (rowsSecondary && rowsSecondary.getObjects().length ? rowsSecondary.getObjects() : []);\n const colAxis = columnsPrimary && columnsPrimary.getObjects().length ? columnsPrimary.getObjects() :\n (columnsSecondary && columnsSecondary.getObjects().length ? columnsSecondary.getObjects() : []);\n\n const headerConfig = [\n { type: LEFT, section: rows[0], axis: rowAxis, headerFrom: takeHeaderFrom.row },\n { type: RIGHT, section: rows[1], axis: rowAxis, headerFrom: takeHeaderFrom.row },\n { type: TOP, section: columns[0], axis: colAxis, headerFrom: takeHeaderFrom.column },\n { type: BOTTOM, section: columns[1], axis: colAxis, headerFrom: takeHeaderFrom.column }\n ];\n\n headerConfig.forEach((config, index) => {\n let keys;\n let length;\n const {\n type,\n section,\n axis,\n headerFrom\n } = config;\n\n if (index < 2) {\n keys = rowKeys;\n length = rowProjections.length > 0 ? rowProjections.length : 1;\n } else {\n keys = columnKeys;\n length = colProjections.length > 0 ? colProjections.length : 1;\n }\n keys = keys.map(arr => arr.map(val => resolver.valueParser()(val)));\n if (section.length && headerFrom === type && axis && keys.length) {\n const hContext = { axis, length, type };\n let headers = [];\n if (index < 2) {\n hContext.keys = keys;\n hContext.facet = facet.rows;\n headers = headerPlaceholderGn(hContext, selectionObj, cells, labelManager);\n } else {\n hContext.facet = facet.columns;\n hContext.keys = keys[0].map((key, i) => keys.map(e => e[i]));\n\n headers = headerPlaceholderGn(hContext, selectionObj, cells, labelManager);\n }\n selectionObj[`${type}Headers`] = headers;\n } else {\n selectionObj[`${type}Headers`] = null;\n }\n });\n return selectionObj;\n};\n\n/**\n * Generates matrices\n *\n * @param {Object} config Configuration to generate matrices\n * @param {Array} matrices Matrices containing the set of visual units and axes units\n * @param {Object} cells Contains a collection of the cells\n * @param {Object} labelManager smart label instance\n * @return {Object} contains a collection of matrices\n */\nexport const generateMatrices = (context, matrices, cells, labelManager) => {\n const {\n unitHeight,\n unitWidth,\n facetsAndProjections,\n normalizedRows,\n normalizedColumns,\n selection,\n axisFrom,\n facet,\n encoders,\n resolver\n } = context;\n const placeholderContext = {\n fields: {\n rows: normalizedRows,\n columns: normalizedColumns\n },\n matrices,\n facetsAndProjections,\n selection,\n axisFrom,\n facet,\n encoders,\n resolver\n };\n // Generate placeholders for all matrices\n const selectionObj = generatePlaceholders(placeholderContext, cells, labelManager);\n const {\n columnsPrimary,\n columnsSecondary,\n rowsPrimary,\n rowsSecondary,\n leftHeaders,\n topHeaders,\n bottomHeaders,\n rightHeaders\n } = selectionObj;\n const [rowPrime, rowSec, colPrime, colSec] = [rowsPrimary, rowsSecondary, columnsPrimary, columnsSecondary]\n .map(d => (d ? d.getObjects() : []));\n const [leftFacets, rightFacets] = [leftHeaders, rightHeaders]\n .map(e => (e ? e.getObjects()\n .map(f => f.getObjects()) : []));\n let rowPriority = rowSec.length ? 1 : -1;\n rowPrime.length && rowPriority++;\n let colPriority = colSec.length ? 1 : -1;\n colPrime.length && colPriority++;\n\n // Compute left matrix using left headers and the axes on the rows\n let leftMatrix = leftFacets.length ? leftFacets.map((d, i) => {\n rowPrime[i] = rowPrime[i] ? [rowPrime[i]] : [];\n return [...d, ...rowPrime[i]];\n }) : (rowPrime ? rowPrime.map(d => [d]) : []);\n\n // Compute right matrix using right headers and the axes on the rows\n const rightMatrix = rowSec.length ? rowSec.map((d, i) => [d, ...(rightFacets[i] || [])]) : (rightFacets.length ?\n rightFacets.map(d => [...d]) : []);\n\n const topMatrix = [];\n if (topHeaders) {\n const headers = topHeaders.getObjects();\n headers.forEach((e) => {\n const innerHeaders = e.getObjects();\n innerHeaders.forEach((x, i) => {\n topMatrix[i] = topMatrix[i] || [];\n topMatrix[i].push(x);\n });\n });\n }\n // Compute top matrix using the top headers and axes on the columns\n if (colPrime.length) {\n topMatrix.push(colPrime);\n }\n\n // Bottom and right matrices are prepared using the user config.\n let bottomMatrix = [];\n if (colSec.length) {\n bottomMatrix.push(colSec);\n }\n const currentBottomLength = bottomMatrix.length;\n if (bottomHeaders) {\n const headers = bottomHeaders.getObjects();\n headers.forEach((e) => {\n const innerHeaders = e.getObjects();\n innerHeaders.forEach((x, i) => {\n bottomMatrix[i + currentBottomLength] = bottomMatrix[i + currentBottomLength] || [];\n bottomMatrix[i + currentBottomLength].push(x);\n });\n });\n }\n\n if (!leftMatrix.length && !rightMatrix.length) {\n const cell = new cells.BlankCell();\n cell.setAvailableSpace(unitWidth, unitHeight);\n leftMatrix = [[cell]];\n }\n\n if (!topMatrix.length && (!bottomMatrix.length || !bottomMatrix[0].length)) {\n const cell = new cells.BlankCell();\n cell.setAvailableSpace(unitWidth, unitHeight);\n bottomMatrix = [[cell]];\n }\n\n return {\n rows: [leftMatrix, rightMatrix],\n columns: [topMatrix, bottomMatrix],\n selectionObj,\n colPriority,\n rowPriority\n };\n};\nconst getAxisFields = (projections, fieldHolder = []) =>\n projections.reduce((acc, item) =>\n [...acc, ...item.reduce((ac, field) =>\n (field instanceof SimpleVariable ? [...ac, field.oneVar()] : ac), [])], fieldHolder);\n\nconst sortDmTemporalFields = (resolver, datamodel) => {\n let axisFields = [];\n const projections = resolver.projections();\n axisFields = getAxisFields(projections.rowProjections, getAxisFields(projections.colProjections));\n\n const fieldConfig = datamodel.getFieldsConfig();\n const temporalFields = axisFields.reduce((acc, field) =>\n ((fieldConfig[field].def.subtype === TEMPORAL) ? [...acc, [field]] : acc), []);\n return temporalFields.length ? datamodel.sort(temporalFields, { saveChild: true }) : datamodel;\n};\n\n/**\n * Computes matrices for a group\n *\n * @param {Object} datamodel on which the matrices are to be computed\n * @param {Object} config configuration of the matrices\n * @param {Object} layerRegistry contains the registered layers\n * @return {Object} conputed matrices\n * @memberof MatrixResolver\n */\nexport const computeMatrices = (context, config) => {\n const {\n resolver,\n datamodel,\n componentRegistry,\n encoders\n } = context;\n const {\n globalConfig,\n selection,\n transform\n } = config;\n const groupBy = globalConfig.autoGroupBy;\n const { smartlabel: labelManager } = resolver.dependencies();\n const fieldMap = datamodel.getFieldsConfig();\n const layerConfig = resolver.layerConfig();\n const registry = resolver.registry();\n const { fields: normalizedRows } = resolver.horizontalAxis();\n const { fields: normalizedColumns } = resolver.verticalAxis();\n const otherEncodings = resolver.optionalProjections(config, layerConfig);\n const facetsAndProjections = resolver.getAllFields();\n const matrixGnContext = {\n // Configuration to be passed to generate the different matrices.\n // A common config is used for both value matrices and other matrices\n normalizedColumns,\n normalizedRows,\n facetsAndProjections,\n layers: layerConfig,\n fieldMap,\n otherEncodings,\n encoders,\n facet: globalConfig.facet || {},\n axisFrom: globalConfig.axisFrom || {},\n selection,\n resolver\n };\n const cells = {\n GeomCell: resolver.getCellDef(registry.GeomCell),\n AxisCell: resolver.getCellDef(registry.AxisCell),\n BlankCell: resolver.getCellDef(registry.BlankCell),\n TextCell: resolver.getCellDef(registry.TextCell)\n };\n const isRowSizeEqual = isDistributionEqual(normalizedRows);\n const isColumnSizeEqual = isDistributionEqual(normalizedColumns);\n\n resolver.colCells({});\n resolver.rowCells({});\n resolver.datamodelTransform(transform || {});\n\n // Cell creation begins here\n resolver.resetSimpleAxes();\n\n const {\n entryCellMap\n } = resolver.cacheMaps();\n const newCacheMap = {\n exitCellMap: entryCellMap,\n entryCellMap: new Map()\n };\n\n resolver.cacheMaps(newCacheMap);\n\n const valueCellContext = {\n config: globalConfig,\n suppliedLayers: encoders.simpleEncoder.serializeLayerConfig(resolver.layerConfig()),\n resolver,\n cell: cells.GeomCell,\n encoder: encoders.simpleEncoder,\n newCacheMap,\n detailFields: config.detail,\n retinalConfig: {\n color: config.color,\n size: config.size,\n shape: config.shape\n }\n };\n const fieldsConfig = datamodel.getFieldsConfig();\n let groupedModel = datamodel;\n if (!groupBy.disabled) {\n const fields = getFieldsFromSuppliedLayers(valueCellContext.suppliedLayers, datamodel.getFieldsConfig());\n const allFields = extractFields(facetsAndProjections, fields);\n\n const dimensions = allFields.filter(field =>\n fieldsConfig[field] && fieldsConfig[field].def.type === FieldType.DIMENSION);\n const aggregationFns = groupBy.measures;\n const measureNames = Object.keys(datamodel.getFieldspace().getMeasure());\n const nearestAggFns = retrieveNearestGroupByReducers(datamodel, ...measureNames);\n const resolvedAggFns = mergeRecursive(nearestAggFns, aggregationFns);\n groupedModel = datamodel.groupBy(dimensions.length ? dimensions : [''], resolvedAggFns).project(allFields);\n }\n\n // sort temporal fields if any in the given rows and columns\n groupedModel = sortDmTemporalFields(resolver, groupedModel);\n // return a callback function to create the cells from the matrix\n const cellCreator = resolver.valueCellsCreator(valueCellContext);\n // Creates value matrices from the datamodel and configs\n const valueMatrixInfo = getMatrixModel(groupedModel, facetsAndProjections, cellCreator, globalConfig);\n\n resolver.cacheMaps().exitCellMap.forEach((placeholder) => {\n placeholder.remove();\n });\n resolver.cacheMaps().exitCellMap.clear();\n resolver.valueMatrix(valueMatrixInfo.matrix);\n\n const { xAxes, yAxes } = mutateAxesFromMap(resolver.cacheMaps(), resolver.axes());\n\n resolver.axes({\n x: xAxes,\n y: yAxes\n });\n const store = resolver.store();\n\n [xAxes, yAxes].forEach((axesArr, type) => {\n const stateProps = {};\n axesArr = axesArr || [];\n axesArr.forEach((axes, idx) => {\n axes.forEach((axis, axisIndex) => {\n stateProps[`${idx}${axisIndex}`] = null;\n });\n });\n store.append(`${STATE_NAMESPACES.GROUP_GLOBAL_NAMESPACE}.domain.${type ? 'y' : 'x'}`, stateProps);\n });\n resolver.createUnits(componentRegistry, config);\n\n const matrices = {\n valuesMatrix: valueMatrixInfo,\n axesMatrix: resolver.axes()\n };\n // Create all matrices\n const {\n rows,\n columns,\n selectionObj,\n rowPriority,\n colPriority\n } = generateMatrices(matrixGnContext, matrices, cells, labelManager);\n\n resolver.rowMatrix(rows);\n resolver.columnMatrix(columns);\n\n return {\n rows: resolver.rowMatrix(),\n columns: resolver.columnMatrix(),\n values: resolver.valueMatrix(),\n isColumnSizeEqual,\n isRowSizeEqual,\n priority: {\n row: rowPriority,\n col: colPriority\n },\n selection: selectionObj,\n dataModels: {\n groupedModel,\n parentModel: datamodel\n }\n };\n};\n","export const RESOLVER_PROPS = {\n dependencies: {},\n units: {},\n datamodelTransform: {},\n layerConfig: {},\n matrixLayers: {},\n colCells: {},\n rowCells: {},\n rowMatrix: {},\n columnMatrix: {},\n valueMatrix: {},\n encoder: {},\n valueParser: {}\n};\n","import { VisualUnit } from '@chartshq/visual-unit';\nimport { generateGetterSetters, STATE_NAMESPACES } from 'muze-utils';\nimport {\n initializeCacheMaps,\n headerCreator,\n extractUnitConfig,\n setFacetsAndProjections\n} from './group-utils';\nimport {\n ROW, COL, LEFT, RIGHT, COLOR, SIZE, SHAPE, DETAIL, CELL, X_AXES, Y_AXES, ENTRY_CELLS, EXIT_CELLS, INITIALIZED,\n AXIS, UNIT, BEFORE_UPDATE, UPDATED, VALUE_MATRIX, FACET_HEADERS\n} from '../enums/constants';\nimport { createValueCells, computeMatrices } from './cell-creator';\nimport { RESOLVER_PROPS } from './resolver-props';\n\n/**\n * Resolves the matrices from configuration provided\n *\n * @export\n * @class MatrixResolver\n */\nexport default class MatrixResolver {\n\n /**\n * Creates an instance of MatrixResolver.\n * @param {Object} dependencies needed to run the resolver\n * @memberof MatrixResolver\n */\n constructor (dependencies) {\n this._registry = {};\n this._layerConfig = [];\n this._matrixLayers = [];\n this._dependencies = dependencies;\n this._rowMatrix = [];\n this._columnMatrix = [];\n this._valueMatrix = [];\n this._facets = { rowFacets: [], colFacets: [] };\n this._projections = { rowProjections: [], colProjections: [] };\n this._datamodelTransform = {};\n this._units = [];\n this._cacheMaps = {};\n this._axes = {\n x: {},\n y: {},\n color: [],\n size: [],\n shape: [],\n radius: [],\n angle: [],\n angle0: []\n };\n generateGetterSetters(this, RESOLVER_PROPS);\n this.cacheMaps(initializeCacheMaps());\n }\n\n /**\n * Set: Registers placeholders, Get: return {Object} those placeholders\n *\n * @param {Object} placeholders cells that will construct the group\n * @return {Object} Either current instance or the set of placeholders\n * @memberof MatrixResolver\n */\n registry (...placeholders) {\n if (placeholders.length) {\n Object.entries(placeholders[0]).forEach((val) => {\n this._registry[val[0]] = val[1];\n });\n return this;\n }\n return this._registry;\n }\n\n /**\n * Used to set the layer config from outside or get current layer info\n *\n * @param {Object} type configuration of layer provided externally\n * @return {Object} either the layer or current instance\n * @memberof MatrixResolver\n */\n cacheMaps (...maps) {\n if (maps.length) {\n [CELL, X_AXES, Y_AXES, ENTRY_CELLS, EXIT_CELLS].forEach((e) => {\n this._cacheMaps[`${e}Map`] = maps[0][`${e}Map`] || this._cacheMaps[`${e}Map`];\n });\n return this;\n }\n return this._cacheMaps;\n }\n\n /**\n * Used to set the layer config from outside or get current layer info\n *\n * @param {Object} type configuration of layer provided externally\n * @return {Object} either the layer or current instance\n * @memberof MatrixResolver\n */\n axes (...axes) {\n if (axes.length) {\n this._axes = Object.assign({}, this._axes, axes[0]);\n return this;\n }\n return this._axes;\n }\n\n /**\n *\n *\n * @param {*} facets\n *\n * @memberof MatrixResolver\n */\n facets (...facets) {\n if (facets.length) {\n Object.entries(facets[0]).forEach((e) => {\n this._facets[e[0]] = e[1];\n });\n return this;\n }\n return this._facets;\n }\n\n /**\n *\n *\n * @param {*} projections\n *\n * @memberof MatrixResolver\n */\n projections (...projections) {\n if (projections.length) {\n Object.entries(projections[0]).forEach((e) => {\n this._projections[e[0]] = e[1];\n });\n return this;\n }\n return this._projections;\n }\n\n /**\n *\n *\n * @param {*} config\n * @param {*} layerConfig\n *\n * @memberof MatrixResolver\n */\n optionalProjections (config, layerConfig) {\n const otherEncodings = {};\n const optionalProjections = [];\n const otherEncodingTypes = [SIZE, COLOR, SHAPE];\n\n otherEncodingTypes.forEach((type) => {\n if (config[type] && config[type].field) {\n const enc = config[type];\n otherEncodings[type] = enc.field;\n optionalProjections.push(enc.field);\n }\n });\n\n if (config[DETAIL]) {\n optionalProjections.push(...config.detail);\n }\n\n if (layerConfig.length) {\n layerConfig.forEach((layer) => {\n if (layer.encoding) {\n Object.values(layer.encoding).forEach((enc) => {\n if (enc && optionalProjections.indexOf(enc.field) === -1) {\n optionalProjections.push(enc.field ? enc.field : enc);\n }\n });\n }\n });\n }\n this.projections({ optionalProjections });\n return otherEncodings;\n }\n\n /**\n * return the normalized set of rows and facets and projections\n *\n * @param {Object} rows parameters needed to set horizontal axis consisiting of rows\n * @return {Object} facets, projections and normalized rows\n * @memberof MatrixResolver\n */\n horizontalAxis (rows, encoder) {\n if (rows) {\n this._horizontalAxis = setFacetsAndProjections(this, { type: ROW, fields: rows }, encoder);\n return this;\n }\n return this._horizontalAxis;\n }\n\n /**\n * return the normalized set of columns and facets and projections\n *\n * @param {Object} columns parameters needed to set vertical axis consisiting of columns\n * @return {Object} facets, projections and normalized columns\n * @memberof MatrixResolver\n */\n verticalAxis (columns, encoder) {\n if (columns) {\n this._verticalAxis = setFacetsAndProjections(this, { type: COL, fields: columns }, encoder);\n return this;\n }\n return this._verticalAxis;\n }\n\n /**\n * Gets the class definition of a particular cell type(if the particular type has been extended, that particular\n * definition is returned)\n *\n * @param {Object} cell cell whose class definition is to be retrieved\n * @return {Object} cell definition\n * @memberof MatrixResolver\n */\n getCellDef (cell) {\n const registry = this.registry();\n\n Object.values(registry).forEach((e) => {\n if (e.prototype instanceof cell) {\n cell = e;\n }\n });\n return cell;\n }\n\n /**\n * return a visual cell creator along with its axis information to be injected to the datamodel creation\n * function\n *\n * @param {Object} GeomCell Type of cell to be created\n * @return {Object} Created cell\n * @memberof MatrixResolver\n */\n valueCellsCreator (context) {\n // reset matrix layers\n this.matrixLayers([]);\n\n return (datamodel, fieldInfo, facets) => createValueCells(context, datamodel, fieldInfo, facets);\n }\n\n /**\n * Callback to be applied on each cell of a matrix of a particular type\n *\n * @param {string} matrixType type of matrix on which callback is to be applied\n * @param {Function} callback function to be applied to each cell\n * @memberof MatrixResolver\n */\n forEach (matrixType, callback) {\n this[matrixType]().forEach((row, rIndex) => {\n row.forEach((col, cIndex) => {\n callback(rIndex, cIndex, col);\n });\n });\n }\n\n /**\n *\n *\n *\n * @memberof MatrixResolver\n */\n getAllFields () {\n const retObj = this.projections();\n\n Object.entries(this.facets()).forEach((e) => {\n retObj[e[0]] = e[1];\n });\n return retObj;\n }\n\n /**\n *\n *\n * @memberof MatrixResolver\n */\n resetSimpleAxes () {\n return this.axes({\n x: new Set(),\n y: new Set()\n });\n }\n\n /**\n *\n *\n * @param {*} componentRegistry\n * @param {*} config\n * @memberof MatrixResolver\n */\n createUnits (componentRegistry, config) {\n const {\n globalConfig,\n alias,\n coord\n } = config;\n const {\n layerRegistry,\n sideEffectRegistry\n } = componentRegistry;\n const {\n smartlabel: smartLabel,\n lifeCycleManager\n } = this.dependencies();\n // Provide the source for the matrix\n const units = [[]];\n // Setting unit configuration\n const unitConfig = extractUnitConfig(globalConfig || {});\n const globalState = VisualUnit.getState()[0];\n const globalStates = {};\n const store = this.store();\n this.forEach(VALUE_MATRIX, (i, j, el) => {\n let unit = el.source();\n if (!unit) {\n const namespace = `${i}${j}`;\n\n unit = VisualUnit.create({\n layerRegistry,\n sideEffectRegistry\n }, {\n smartLabel,\n lifeCycleManager\n });\n globalStates[namespace] = null;\n unit.metaInf({\n rowIndex: i,\n colIndex: j,\n namespace\n });\n unit.store(store);\n unit.coord(coord);\n el.source(unit);\n }\n !units[i] && (units[i] = []);\n units[i][j] = unit;\n unit.parentAlias(alias)\n .valueParser(this.valueParser())\n .coord(coord);\n el.config(unitConfig);\n });\n\n for (const key in globalState) {\n store.append(`${STATE_NAMESPACES.UNIT_GLOBAL_NAMESPACE}.${key}`, globalStates);\n }\n\n lifeCycleManager.notify({ client: units, action: INITIALIZED, formalName: UNIT });\n return this.units(units);\n }\n\n /**\n *\n *\n * @param {*} config\n * @memberof MatrixResolver\n */\n setDomains (config, datamodel, encoders) {\n const {\n color,\n shape,\n size,\n globalConfig\n } = config;\n const groupBy = globalConfig.autoGroupBy;\n const {\n rowFacets,\n colFacets\n } = this.getAllFields();\n const encoding = {\n color,\n shape,\n size\n };\n const facetFields = [...rowFacets.map(e => e.toString()), ...colFacets.map(e => e.toString())];\n const retContext = {\n domains: encoders.simpleEncoder.getRetinalFieldsDomain(datamodel, encoding, facetFields, groupBy),\n axes: this.axes(),\n encoding\n };\n encoders.retinalEncoder.setCommonDomain(retContext);\n return this;\n }\n\n resetFacetsAndProjections () {\n this._facets = {};\n this._projections = {};\n return this;\n }\n\n /**\n *\n *\n *\n * @memberof MatrixResolver\n */\n getRetinalAxes () {\n const {\n color,\n shape,\n size\n } = this.axes();\n\n return {\n color: [...color],\n shape: [...shape],\n size: [...size]\n };\n }\n\n /**\n *\n *\n * @param {*} type\n *\n * @memberof MatrixResolver\n */\n getSimpleAxes (type) {\n return this.axes()[`${type}`];\n }\n\n /**\n *\n *\n * @param {*} datamodel\n * @param {*} config\n * @memberof MatrixResolver\n */\n createRetinalAxes (fieldsConfig, config, encoders) {\n const layerConfig = this.layerConfig();\n this.optionalProjections(config, layerConfig);\n const retinalAxes = encoders.retinalEncoder.createAxis({\n fieldsConfig,\n config,\n axes: this.axes()\n });\n const {\n lifeCycleManager\n } = this.dependencies();\n\n [COLOR, SHAPE, SIZE].forEach((e) => {\n this.axes()[e] = retinalAxes[e];\n });\n\n lifeCycleManager.notify({ client: this.axes(), action: INITIALIZED, formalName: AXIS });\n lifeCycleManager.notify({ client: this.units(), action: BEFORE_UPDATE, formalName: UNIT });\n\n const units = [];\n const matrixLayers = this.matrixLayers();\n\n this.forEach(VALUE_MATRIX, (i, j, el) => {\n el.axes(Object.assign(el.axes(), retinalAxes));\n el.source() && el.source().retinalFields(config);\n el.layerDef(matrixLayers[i][j]);\n el.updateModel();\n\n units.push(el.source());\n });\n\n lifeCycleManager.notify({ client: units, action: UPDATED, formalName: UNIT });\n return this;\n }\n\n /**\n *\n *\n * @param {*} placeholders\n * @param {*} fieldNames\n *\n * @memberof MatrixResolver\n */\n createHeaders (placeholders, fieldNames, config) {\n let bottomLeft = [];\n let bottomRight = [];\n const {\n rows,\n columns\n } = placeholders;\n const {\n smartlabel: labelManager,\n lifeCycleManager\n } = this.dependencies();\n const {\n showHeaders,\n classPrefix\n } = config;\n const TextCell = this.getCellDef(this.registry().TextCell);\n const BlankCell = this.getCellDef(this.registry().BlankCell);\n const [leftRows, rightRows] = rows;\n const [topCols, bottomCols] = columns;\n const rowHeaders = fieldNames.rows;\n const blankCellCreator = cell => new BlankCell().config({ show: cell.config().show });\n\n // Headers and footers are created based on the rows. Thereafter, using the column information\n // they are tabularized into the current structure\n const headers = {\n left: headerCreator(leftRows, rowHeaders[0], showHeaders ? TextCell : BlankCell,\n { classPrefix, labelManager }),\n right: headerCreator(rightRows, rowHeaders[1], showHeaders ? TextCell : BlankCell,\n { classPrefix, labelManager })\n };\n const footers = {\n left: leftRows.length > 0 ? leftRows[0].map(blankCellCreator) : [],\n right: rightRows.length > 0 ? rightRows[0].map(blankCellCreator) : []\n };\n const [topLeft, topRight] = [LEFT, RIGHT].map(type => topCols.map((col, i) => {\n if (i === topCols.length - 1) {\n return headers[type];\n }\n return footers[type];\n }));\n\n // Creating only bottom matrices if there is no information on the top\n if (topCols.length === 0) {\n [bottomLeft, bottomRight] = [LEFT, RIGHT].map(type => bottomCols.map((col, i) => {\n if (i === 0) {\n return headers[type];\n }\n return footers[type];\n }));\n } else {\n bottomLeft = bottomCols.map(() => (leftRows.length > 0 ? leftRows[0].map(blankCellCreator) : []));\n bottomRight = bottomCols.map(() => (rightRows.length > 0 ? rightRows[0].map(blankCellCreator) : []));\n }\n\n lifeCycleManager.notify({\n client: [topLeft, topRight, bottomLeft, bottomRight],\n action: INITIALIZED,\n formalName: FACET_HEADERS\n });\n\n return { topLeft, topRight, bottomLeft, bottomRight };\n }\n\n /**\n *\n *\n * @param {*} datamodel\n * @param {*} config\n * @param {*} componentRegistry\n * @param {*} encoders\n *\n * @memberof MatrixResolver\n */\n getMatrices (datamodel, config, componentRegistry, encoders) {\n const context = {\n datamodel,\n componentRegistry,\n encoders,\n resolver: this\n };\n\n return computeMatrices(context, config);\n }\n\n store (...params) {\n if (params.length) {\n this._store = params[0];\n return this;\n }\n return this._store;\n }\n}\n","/**\n * This is a wrapper class over the matrix of cells which gets created in visual group. Visual Group creates left,\n * right, bottom and top and center matrices and wraps them using this class.\n *\n * @public\n * @class ValueMatrix\n */\nclass ValueMatrix {\n\n /**\n * Creates an instance of ValueMatrix.\n *\n * @param {Array} matrixArr Matrix array.\n */\n constructor (matrixArr) {\n const instancesById = {};\n\n this.matrix(matrixArr || []);\n this.filter(() => true);\n\n this.each((el, rIdx, cIdx) => {\n const cellValue = el.valueOf();\n if (cellValue && cellValue.id) {\n const id = cellValue.id();\n instancesById[id] = {\n instance: cellValue,\n rowIndex: rIdx,\n colIndex: cIdx\n };\n }\n });\n\n this.instancesById(instancesById);\n }\n\n instancesById (...id) {\n if (id.length) {\n this._instancesById = id[0];\n return this;\n }\n return this._instancesById;\n }\n\n /**\n * Returns the array of matrices contained in this instance.\n *\n * @public\n * @return {Array} Array of matrices.\n */\n matrix (...matrix) {\n if (matrix.length) {\n this._matrix = matrix[0];\n return this;\n }\n return this._matrix;\n }\n\n /**\n * Sets a filter criteria. This filter criteria gets applied when each function is called.\n *\n * @public\n * @param {Function} fn Filter function.\n *\n * @return {ValueMatrix} Instance of value matrix.\n */\n filter (...fn) {\n if (fn.length) {\n this._filterFn = fn[0];\n return this;\n }\n return this._filterFn;\n }\n\n /**\n * Returns the total width occupied by all the cells of the matrix.\n *\n * @return {Number} Width of the matrix.\n */\n width () {\n let rowWidth = 0;\n\n this.matrix().forEach((row) => {\n let currentRowWidth = 0;\n row.forEach((cell) => {\n currentRowWidth += cell.getLogicalSpace().width;\n });\n rowWidth = Math.max(rowWidth, currentRowWidth);\n });\n return rowWidth;\n }\n\n /**\n * Returns the total width occupied by all the cells of the matrix.\n *\n * @return {Number} Width of the matrix.\n */\n height () {\n let rowHeight = 0;\n\n this.matrix().forEach((row) => {\n let currentRowHeight = 0;\n row.forEach((cell) => {\n currentRowHeight = Math.max(currentRowHeight, cell.getLogicalSpace().height);\n });\n rowHeight += currentRowHeight;\n });\n return rowHeight;\n }\n\n /**\n * Iterates through the two dimensional matrix array and calls the given callback function with the cell instance,\n * row index, column index and the matrix array.\n *\n * @param {Function} fn Callback function which will get called for every cell.\n * @return {ValueMatrix} Instance of the value matrix.\n */\n each (fn) {\n const matrix = this.matrix();\n const filterFn = this.filter();\n\n matrix.forEach((row, rIndex) => {\n row.forEach((col, cIndex) => {\n if (filterFn(col)) {\n fn(col, rIndex, cIndex, matrix);\n }\n });\n });\n return this;\n }\n\n findPlaceHolderById (id) {\n return this.instancesById()[id];\n }\n}\n\nexport default ValueMatrix;\n","import { VisualUnit } from '@chartshq/visual-unit';\nimport { STATE_NAMESPACES, CommonProps } from 'muze-utils';\nimport { BaseLayer } from '@chartshq/visual-layer';\nimport { getEncoder, getBorders } from '../group-helper';\nimport { RetinalEncoder } from '../encoder';\nimport { registerDomainChangeListener, unsubscribeChangeListeners } from './change-listener';\nimport ValueMatrix from './value-matrix';\n\nexport const createUnitState = (context) => {\n const [globalState] = VisualUnit.getState();\n const store = context.store();\n store.append(STATE_NAMESPACES.UNIT_GLOBAL_NAMESPACE, globalState);\n};\n\nexport const initializeGlobalState = (context) => {\n const globalState = context.constructor.getState()[0];\n const store = context.store();\n store.append(STATE_NAMESPACES.GROUP_GLOBAL_NAMESPACE, globalState);\n};\n\nexport const createLayerState = (context) => {\n const [globalState] = BaseLayer.getState();\n context.store().append(STATE_NAMESPACES.LAYER_GLOBAL_NAMESPACE, globalState);\n};\n\nconst sanitizeRetinalConfig = (retinalConf) => {\n const conf = {};\n for (const key in retinalConf) {\n const confValue = retinalConf[key];\n if (typeof confValue === 'string' || !confValue) {\n conf[key] = {\n field: retinalConf[key]\n };\n } else {\n conf[key] = confValue;\n }\n }\n return conf;\n};\n\nexport const setMatrixInstances = (context, placeholder) => {\n let {\n values,\n rows,\n columns\n } = placeholder;\n values = values || [];\n rows = rows || [];\n columns = columns || [];\n context._composition.matrices = {\n value: new ValueMatrix(values),\n left: new ValueMatrix(rows[0]),\n right: new ValueMatrix(rows[1]),\n top: new ValueMatrix(columns[0]),\n bottom: new ValueMatrix(columns[1])\n };\n\n context._dependencies.throwback.commit(CommonProps.MATRIX_CREATED, true);\n return context;\n};\n\nexport const createMatrices = (context) => {\n const rows = context.rows();\n const columns = context.columns();\n const color = context.color();\n const datamodel = context.data();\n const size = context.size();\n const detail = context.detail();\n const layers = context.layers();\n const transform = context.transform();\n const config = context.config();\n const shape = context.shape();\n\n // Get the resolver for the matrices\n const resolver = context.resolver();\n resolver.store(context.store());\n resolver.valueParser(context.valueParser());\n // Prepare configuration for matrix preparation\n let matrixConfig = {\n selection: context.selection(),\n alias: context.alias(),\n globalConfig: config || {},\n rows,\n columns,\n detail,\n layers,\n transform\n };\n\n unsubscribeChangeListeners(context);\n\n const retinalConfig = sanitizeRetinalConfig({\n color,\n shape,\n size\n });\n\n matrixConfig = Object.assign(matrixConfig, retinalConfig);\n // Create the encoders for the group\n const encoders = {};\n encoders.retinalEncoder = new RetinalEncoder();\n encoders.simpleEncoder = getEncoder(layers);\n matrixConfig.coord = encoders.simpleEncoder.constructor.type();\n resolver.encoder(encoders.simpleEncoder);\n\n // Set the group type\n context.groupType(encoders.simpleEncoder.constructor.type());\n\n // Get sanitized fields as instances of the Vars Class\n const fields = encoders.simpleEncoder.fieldSanitizer(datamodel, matrixConfig);\n encoders.simpleEncoder.setAxisAndHeaders(config ? config.axisFrom : {}, fields);\n // Setting layers for the code\n layers && resolver.layerConfig(layers);\n // Set the row and column axes\n resolver.horizontalAxis(fields.rows, encoders).verticalAxis(fields.columns, encoders);\n // Getting the placeholders\n const placeholderInfo = resolver.getMatrices(datamodel, matrixConfig, context.registry(), encoders);\n context._groupedDataModel = placeholderInfo.dataModels.groupedModel;\n // Set the selection object\n context.selection(placeholderInfo.selection);\n\n // Create retinal axes\n resolver.createRetinalAxes(placeholderInfo.dataModels.parentModel.getFieldsConfig(), retinalConfig,\n encoders);\n\n // Domains are evaluated for each of the axes for commonality\n resolver.setDomains(matrixConfig, placeholderInfo.dataModels, encoders);\n\n // Create matrix instances\n setMatrixInstances(context, placeholderInfo);\n\n // Prepare corner matrices\n context.cornerMatrices(resolver.createHeaders(placeholderInfo, fields, config));\n\n // Set placeholder information\n context.placeholderInfo(placeholderInfo);\n\n context._composition.axes = resolver.axes();\n context.metaData({\n border: getBorders(placeholderInfo, encoders.simpleEncoder)\n });\n\n resolver.encoder().unionUnitDomains(context);\n\n registerDomainChangeListener(context);\n return context;\n};\n","import { STATE_NAMESPACES } from 'muze-utils';\n\nexport const setupChangeListeners = (context) => {\n const store = context.store();\n\n store.registerChangeListener([`${STATE_NAMESPACES.GROUP_GLOBAL_NAMESPACE}.domain.x`], () => {\n const groupAxes = context.resolver().axes();\n groupAxes.x.forEach(axes => axes.forEach((axis) => {\n axis.render();\n }));\n });\n\n store.registerChangeListener([`${STATE_NAMESPACES.GROUP_GLOBAL_NAMESPACE}.domain.y`], () => {\n const groupAxes = context.resolver().axes();\n groupAxes.y.forEach(axes => axes.forEach((axis) => {\n axis.render();\n }));\n });\n};\n\nexport const registerDomainChangeListener = (context) => {\n const store = context.store();\n store.registerChangeListener([`${STATE_NAMESPACES.UNIT_GLOBAL_NAMESPACE}.domain`], () => {\n context.resolver().encoder().unionUnitDomains(context);\n }, false, {\n namespace: 'group',\n key: 'unionDomain'\n });\n};\n\nexport const unsubscribeChangeListeners = (context) => {\n context.store().unsubscribe({\n namespace: 'group',\n key: 'unionDomain'\n });\n};\n","import { ROWS, COLUMNS, COLOR, SHAPE, SIZE, DETAIL, LAYERS, TRANSFORM, CONFIG } from '../enums/constants';\n\nexport const PROPS = {\n alias: {},\n data: {},\n cornerMatrices: {\n defaultValue: {\n topLeft: [],\n topRight: [],\n bottomLeft: [],\n bottomRight: []\n }\n },\n groupType: {},\n\n metaData: {\n defaultValue: {\n border: {}\n }\n },\n placeholderInfo: {\n defaultValue: {}\n },\n resolver: {},\n valueParser: {\n defaultValue: val => val\n },\n registry: {\n sanitization: (context, value) => {\n if (context.resolver) {\n context.resolver().registry(value.cellRegistry);\n }\n return value;\n }\n },\n selection: {},\n [CONFIG]: {},\n [ROWS]: {},\n [COLUMNS]: {},\n [COLOR]: {},\n [SHAPE]: {},\n [SIZE]: {},\n [DETAIL]: {},\n [LAYERS]: {},\n [TRANSFORM]: {}\n};\n","import { generateGetterSetters } from 'muze-utils';\nimport localOptions from './local-options';\nimport { SimpleGroup } from '../simple-group';\nimport {\n MatrixResolver,\n findInGroup\n} from '../group-helper';\nimport { createUnitState, initializeGlobalState, setMatrixInstances, createMatrices, createLayerState } from './helper';\nimport { setupChangeListeners } from './change-listener';\nimport { PROPS } from './props';\nimport {\n CONFIG,\n MOUNT,\n RETINAL,\n Y\n} from '../enums/constants';\n\n/**\n * VisualGroup is instantiated by canvas for creating {@link VisualUnit} and axes instances.It creates the\n * the matrix of visual units and axes. It also creates the layout instance which manages the allocation\n * of space of matrices.\n *\n * To get instance of visual group,\n * ```\n * const visualGroup = canvas.composition().visualGroup;\n * ```\n * @public\n *\n * @class VisualGroup\n */\nclass VisualGroup extends SimpleGroup {\n\n /**\n * Creates an instance of VisualGroup. Requires dependencies and other registry options for placeholders\n * and layers that create individual units.\n *\n * @param {Object} registry Key value pair of compostions for the group\n * @param {Object} dependencies Dependencies needed to run the group\n * @memberof VisualGroup\n */\n constructor (registry, dependencies) {\n super();\n\n const {\n componentSubRegistry\n } = registry;\n\n this._dependencies = dependencies;\n // Generate getter/setter methods for all properties of the class\n // One can get each property by calling the method and can set it\n // by passing paramaters for the same. Thus, one can chain setter\n // getter methods.\n generateGetterSetters(this, PROPS);\n generateGetterSetters(this, localOptions);\n // Populate the store with default values\n // initialize group compositions\n this._composition = {};\n // store reference to data\n this._data = [];\n // store reference to mountpoint\n this._mount = null;\n // selection object that takes care of updating of components\n this._selection = {};\n // Create instance of matrix resolver\n this.resolver(new MatrixResolver(this._dependencies));\n // matrix instance store each of the matrices\n setMatrixInstances(this, {});\n // Getting indiviual registered items\n this.registry({\n layerRegistry: componentSubRegistry.layerRegistry.get(),\n cellRegistry: componentSubRegistry.cellRegistry.get()\n });\n }\n\n static getState () {\n return [{\n domain: {\n x: {},\n y: {},\n radius: {},\n angle: {},\n angle0: {}\n }\n }, {}];\n }\n\n store (...params) {\n if (params.length) {\n this._store = params[0];\n initializeGlobalState(this);\n createUnitState(this);\n createLayerState(this);\n // Register listeners\n setupChangeListeners(this);\n return this;\n }\n return this._store;\n }\n\n /**\n * Return the instances of matrices created by the visual group.\n *\n * @return {Object} Instance of matrices.\n */\n matrixInstance (...matrices) {\n if (matrices.length) {\n return this;\n }\n return this.composition().matrices;\n }\n\n /**\n * Returns the composition of visual group.\n *\n * @public\n *\n * @return {Object} Composition of visual group. It contains instance of matrices {@link ValueMatrix}\n * and instances of axis.\n * ```\n * {\n * matrices: {\n * value: // Instance of center value matrix.\n * left: // Instance of left value matrix\n * right: // Instance of right value matrix\n * bottom: // Instance of bottom value matrix\n * top: // Instance of top value matrix.\n * },\n * axes: {\n * x: // Array of x axis.\n * y: // Array of y axis\n * color: // Array of color axis\n * shape: // Array of shape axis\n * size: // Array of size axis.\n * }\n * }\n * ```\n */\n composition (...params) {\n if (params.length) {\n return this;\n }\n return this._composition;\n }\n\n /**\n * Locks the model to prevent change listeners to be triggered until unlocked\n *\n * @return {Object} Instance of class VisualGroup\n * @memberof VisualGroup\n */\n lockModel () {\n this.store().model.lock();\n return this;\n }\n\n /**\n * Unlocks the model so that all change listeners can be triggered\n *\n * @return {Object} Instance of class VisualGroup\n */\n unlockModel () {\n this.store().model.unlock();\n return this;\n }\n\n /**\n * Returns the channel name of the variable. Channels are rows, columns, color, shape and size.\n *\n * @public\n * @param {string} variable Name of the variable.\n *\n * @return {string} Name of the channel.\n */\n where (variable) {\n return findInGroup(variable, this.resolver().getAllFields());\n }\n\n /**\n * Gets the axis instances of the visual group based on the given axis type.\n *\n * @public\n * @param {string} type Type of axis. X,Y or retinal axes.\n *\n * @return {Array} Array of axis instances.\n */\n getAxes (type) {\n if (type === RETINAL) {\n return this.resolver().getRetinalAxes();\n }\n return this.resolver().getSimpleAxes(type);\n }\n\n /**\n * Returns the instances of cells based on the given type. Type can be given as `row' or `col`.\n *\n * @public\n * @return {Array} Two dimensional array of cells.\n */\n getCells (type) {\n return this.resolver()[`${type}Cells`]();\n }\n\n getFieldsFromChannel (channel) {\n const {\n rowProjections,\n colProjections\n } = this.resolver().getAllFields();\n return channel === Y ? rowProjections : colProjections;\n }\n\n getCellsByFacetKey (facetKey) {\n const resolver = this.resolver();\n const cells = resolver.rowCells()[facetKey] || resolver.colCells()[facetKey] || [];\n return cells;\n }\n\n getAxesByFacetKey (axisType, facetKey) {\n const resolver = this.resolver();\n const cells = resolver.rowCells()[facetKey] || resolver.colCells()[facetKey];\n const axes = cells[0].valueOf().axes()[axisType] || [];\n\n return axes;\n }\n\n /**\n * This method is used to return a serialized representation of the instance's properties.\n *\n * @return {Object} Object with config proprties.\n * @memberof VisualGroup\n */\n serialize () {\n const store = this.store();\n\n return {\n [CONFIG]: store.get(CONFIG),\n [MOUNT]: store.get(MOUNT)\n };\n }\n\n /**\n * Returns the grouped datamodel prepared by visual group. If there is no group by performed, then it returns the\n * original data model passed to visual group.\n *\n * @return {DataModel} Grouped data model.\n */\n getGroupByData () {\n return this._groupedDataModel;\n }\n\n createMatrices () {\n createMatrices(this);\n }\n}\n\nexport default VisualGroup;\n","import { PersistentBehaviour, SELECTION } from '@chartshq/muze-firebolt';\n\nexport default class SelectBehaviour extends PersistentBehaviour {\n static formalName () {\n return 'select';\n }\n\n setSelectionSet (addSet, selectionSet) {\n if (addSet === null) {\n selectionSet.reset();\n } else if (addSet.length) {\n // new add set\n const existingRemoveSet = addSet.filter(d => selectionSet._set[d] === SELECTION.SELECTION_OLD_EXIT\n || selectionSet._set[d] === SELECTION.SELECTION_NEW_EXIT);\n // existing add set\n if (existingRemoveSet.length) {\n selectionSet.updateEntry();\n selectionSet.add(existingRemoveSet);\n } else {\n selectionSet.updateExit();\n selectionSet.remove(addSet);\n }\n const { exitSet } = selectionSet.getSets();\n const mergedExitSet = [...new Set(exitSet[1]), ...new Set(exitSet[0])];\n const completeSetCount = selectionSet.getCompleteSet().length;\n if (exitSet[1].length !== completeSetCount && mergedExitSet.length === completeSetCount) {\n selectionSet.reset();\n }\n } else {\n selectionSet.remove(selectionSet.getCompleteSet());\n }\n return this;\n }\n}\n","import { BEHAVIOURS, ACTIONS } from '@chartshq/muze-firebolt';\n\nconst CLASSPREFIX = 'muze';\n\nexport const actionBehaviourMap = {\n [ACTIONS.DRAG]: {\n target: `.${CLASSPREFIX}-gradient-rect`,\n behaviours: [BEHAVIOURS.BRUSH]\n },\n [ACTIONS.HOVER]: {\n target: [`.${CLASSPREFIX}-legend-columns`],\n behaviours: [BEHAVIOURS.HIGHLIGHT]\n },\n [ACTIONS.CLICK]: {\n target: [`.${CLASSPREFIX}-legend-columns`],\n behaviours: [BEHAVIOURS.SELECT]\n }\n};\n\nexport const propagationBehaviourMap = {\n [BEHAVIOURS.SELECT]: BEHAVIOURS.FILTER,\n [BEHAVIOURS.BRUSH]: BEHAVIOURS.HIGHLIGHT\n};\n","import * as BEHAVIOURS from '../enums/behaviours';\nimport * as sideEffects from '../enums/side-effects';\n\nexport const behaviourEffectMap = {\n [BEHAVIOURS.BRUSH]: [sideEffects.SELECTIONBOX, {\n name: sideEffects.Highlighter,\n options: {\n strategy: 'fade'\n }\n }],\n [BEHAVIOURS.HIGHLIGHT]: [sideEffects.Highlighter],\n select: [{\n name: sideEffects.Highlighter,\n options: {\n strategy: 'fade'\n }\n }]\n};\n\nexport const propagationSideEffects = {\n [BEHAVIOURS.BRUSH]: [{\n name: sideEffects.Highlighter,\n options: {\n strategy: 'fade'\n }\n }],\n [BEHAVIOURS.HIGHLIGHT]: [{\n name: sideEffects.Highlighter,\n options: {\n strategy: 'fade'\n }\n }],\n [BEHAVIOURS.SELECT]: ['filter']\n};\n\n","export const BRUSH = 'brush';\nexport const HIGHLIGHT = 'highlight';\nexport const TOOLTIP = 'tooltip';\nexport const FILTER = 'filter';\nexport const SELECT = 'select';\n\n","export const SELECTIONBOX = 'selectionBox';\nexport const Highlighter = 'highlighter';\n\n","export const CLASSPREFIX = 'muze';\nexport const IDFIELD = '__id__';\nexport const CONFIG = 'config';\nexport const DATAMODEL = 'dataModel';\nexport const AXES = 'axes';\nexport const LAYERDEFS = 'layerDef';\nexport const WIDTH = 'width';\nexport const MAXWIDTH = 'max-width';\nexport const HEIGHT = 'height';\nexport const MOUNTPOINT = 'mountPoint';\nexport const GRIDLINEPARENTGROUPCLASS = 'grid-lines';\nexport const TRANSFORM = 'transform';\nexport const CONSOLIDATED = 'consolidated';\nexport const FRAGMENTED = 'fragmented';\nexport const DEFAULTCOLOR = '#F44336';\nexport const DEFAULTSIZE = 50;\nexport const DEFAULTSHAPE = 'circle';\nexport const STEP = 'step';\nexport const GRADIENT = 'gradient';\nexport const ORDINAL = 'ordinal';\nexport const SCALE_FUNCTIONS = {\n size: 'getSize',\n shape: 'getShape',\n color: 'getColor'\n};\nexport const TOP = 'top';\nexport const LEFT = 'left';\nexport const RIGHT = 'right';\nexport const BOTTOM = 'bottom';\nexport const HORIZONTAL = 'horizontal';\nexport const VERTICAL = 'vertical';\nexport const CENTER = 'center';\nexport const VALUE = 'value';\nexport const PATH = 'path';\nexport const SHAPE = 'shape';\nexport const ICON = 'icon';\nexport const RECT = 'rect';\nexport const START = 'start';\nexport const UPPER = 'upper';\nexport const LOWER = 'lower';\nexport const END = 'end';\nexport const SIZE = 'size';\nexport const DISCRETE = 'discrete';\nexport const MEASURE = 'measure';\n\n","import { assembleModelFromIdentifiers, getDataModelFromRange } from 'muze-utils';\nimport { propagationBehaviourMap } from './action-behaviour-map';\nimport { propagationSideEffects } from './behaviour-effect-map';\nimport { STEP, GRADIENT, DISCRETE, MEASURE } from '../enums/constants';\n\nexport const propagate = (firebolt, action, selectionSet, config = {}) => {\n let propagationData;\n const type = firebolt.context.constructor.type();\n const payload = config.payload;\n const data = firebolt.context.data();\n const metaData = firebolt.context.metaData();\n const fieldType = metaData.getData().schema[0].type;\n\n const propPayload = {};\n const sourceId = firebolt.context._id;\n propPayload.action = propagationBehaviourMap[action] || action;\n propPayload.sideEffects = propagationSideEffects[action];\n propPayload.sourceCanvas = firebolt.context.canvasAlias();\n const isMutableAction = firebolt._actions.behavioural[propPayload.action].constructor.mutates();\n if (payload.criteria === null) {\n propagationData = null;\n } else {\n const entrySet = selectionSet.mergedEnter;\n let values = data.filter(d => entrySet.uids.indexOf(d.id) !== -1).map(d => d.rawVal);\n if (type === STEP || (type === DISCRETE && fieldType === MEASURE)) {\n const field = Object.keys(payload.criteria || {})[0];\n values = data.filter(d => entrySet.uids.indexOf(d.id) !== -1).map(d => d.range);\n propagationData = values.length ? metaData.select((fields) => {\n let check = false;\n for (let i = 0; i < values.length; i++) {\n check = fields[field].value >= values[i][0] && fields[field].value <= values[i][1];\n if (check === true) {\n break;\n }\n }\n return check;\n }, {\n saveChild: false\n }) : null;\n } else if (type === GRADIENT) {\n propagationData = getDataModelFromRange(metaData, payload.criteria);\n } else if (values.length) {\n propagationData = assembleModelFromIdentifiers(metaData, [payload.criteria[0], ...values.map(d => [d])]);\n } else {\n propPayload.criteria = null;\n propagationData = metaData.select(() => true, {\n saveChild: false\n });\n }\n }\n\n let propagateInterpolatedValues = false;\n\n if (propagationData) {\n const schema = propagationData.getSchema();\n propagateInterpolatedValues = schema.every(d => d.type === MEASURE);\n }\n\n const propConfig = {\n sourceId: `legend-${sourceId}`,\n payload: propPayload,\n criteria: propPayload.criteria === null ? null : propagationData,\n isMutableAction,\n propagateInterpolatedValues,\n action: propPayload.action\n };\n\n metaData.propagate(propagationData, propConfig, true);\n};\n","import { Firebolt } from '@chartshq/muze-firebolt';\nimport { propagate } from './helper';\nimport { STEP, GRADIENT } from '../enums/constants';\n\n/**\n * This class manages the interactions of legend.\n * @export\n * @class LegendFireBolt\n * @extends {Firebolt}\n */\nexport class LegendFireBolt extends Firebolt {\n constructor (...params) {\n super(...params);\n this.initializeSideEffects();\n }\n\n getPropagationSelectionSet (selectionSet) {\n return selectionSet[0];\n }\n\n propagate (behaviourName, payload, selectionSet) {\n propagate(this, behaviourName, selectionSet, {\n payload\n });\n }\n\n getAddSetFromCriteria (criteria) {\n let values;\n let uniqueIds;\n const type = this.context.constructor.type();\n\n if (criteria === null) {\n uniqueIds = null;\n } else if (type === STEP) {\n values = Object.values(criteria);\n uniqueIds = this.context.data().filter(d => values.indexOf(d.range) !== -1).map(d => d.id);\n } else if (type === GRADIENT) {\n uniqueIds = [];\n } else {\n values = criteria[1];\n if (values) {\n uniqueIds = this.context.data().filter(d => values.indexOf(d.rawVal) !== -1).map(d => d.id);\n } else {\n values = Object.values(criteria);\n uniqueIds = this.context.data().filter(d => values.indexOf(d.range) !== -1).map(d => d.id);\n }\n }\n return {\n uids: uniqueIds,\n model: null\n };\n }\n\n getFullData () {\n return null;\n }\n}\n","import {\n getEvent,\n getD3Drag\n } from 'muze-utils';\n\n/**\n * Adds dragging action to the target element.\n * @param {firebolt} firebolt firebolt\n * @param {SVGElement} targetEl Element on which brushing action is needed.\n * @param {Array} behaviours Array of behaviours\n */\n/* istanbul ignore next */ const drag = firebolt => (targetEl, behaviours) => {\n let startPos = {};\n let endPos = {};\n let payload;\n const d3Drag = getD3Drag();\n const context = firebolt.context;\n const boundingBox = context.measurement().gradientDimensions;\n const axisType = context.config().align === 'horizontal' ? 'x' : 'y';\n const axisScale = context.axis().source().scale();\n const rangeShifter = axisScale.range()[axisType === 'x' ? 0 : 1];\n\n targetEl.call(d3Drag().on('start', () => {\n const event = getEvent();\n startPos = {\n x: event.x,\n y: event.y\n };\n }).on('drag', () => {\n const event = getEvent();\n\n endPos = {\n x: event.x,\n y: event.y\n };\n endPos.x = Math.max(0, Math.min(endPos.x, boundingBox.width));\n endPos.y = Math.max(0, Math.min(endPos.y, boundingBox.height));\n\n payload = {\n criteria: {\n [context.fieldName()]: [axisScale.invert(startPos[axisType] + rangeShifter * 2),\n axisScale.invert(endPos[axisType] + rangeShifter * 2)].sort((a, b) => a - b)\n }\n };\n behaviours.forEach(behaviour => firebolt.dispatchBehaviour(behaviour, payload));\n }).on('end', () => {\n const event = getEvent();\n\n endPos = {\n x: event.x,\n y: event.y\n };\n endPos.x = Math.max(0, Math.min(endPos.x, boundingBox.width));\n endPos.y = Math.max(0, Math.min(endPos.y, boundingBox.height));\n if (startPos[axisType] === endPos[axisType]) {\n payload = {\n criteria: {}\n };\n } else {\n payload = {\n criteria: {\n [context.fieldName()]: [axisScale.invert(startPos[axisType] + rangeShifter * 2),\n axisScale.invert(endPos[axisType] + rangeShifter * 2)].sort((a, b) => a - b)\n }\n };\n }\n behaviours.forEach(behaviour => firebolt.dispatchBehaviour(behaviour, payload));\n }));\n};\n\nexport default drag;\n","import { getEvent } from 'muze-utils';\n\n/**\n * Adds mouse interactions to target element.\n * @param {Firebolt} Firebolt instance of firebolt.\n * @param {SVGElement} targetEl Element on which the event listeners will be attached.\n * @param {Array} behaviours Array of behaviours\n */\n/* istanbul ignore next */ const hover = firebolt => (targetEl, behaviours) => {\n const dispatchBehaviour = function (args) {\n const event = getEvent();\n const payload = {\n criteria: firebolt.context.getCriteriaFromData(args)\n };\n behaviours.forEach(behaviour => firebolt.dispatchBehaviour(behaviour, payload));\n event.stopPropagation();\n };\n\n targetEl.on('mouseover', dispatchBehaviour)\n .on('mousemove', dispatchBehaviour)\n .on('mouseout', () => {\n const event = getEvent();\n behaviours.forEach(behaviour => firebolt.dispatchBehaviour(behaviour, {\n criteria: null\n }));\n event.stopPropagation();\n });\n};\n\nexport default hover;\n","/**\n * Adds mouse interactions to target element.\n * @param {VisualUnit} instance instance of visual unit.\n * @param {SVGElement} targetEl Element on which the event listeners will be attached.\n * @param {Array} behaviours Array of behaviours\n */\nconst click = firebolt => (targetEl, behaviours) => {\n const dispatchBehaviour = function (args) {\n const payload = {\n criteria: firebolt.context.getCriteriaFromData(args)\n };\n behaviours.forEach(behaviour => firebolt.dispatchBehaviour(behaviour, payload));\n };\n\n targetEl.on('click', dispatchBehaviour);\n};\n\nexport default click;\n","import drag from './drag';\nimport hover from './hover';\nimport click from './click';\nimport * as ACTIONNAMES from '../../enums/actions';\n\nexport const physicalActions = {\n [ACTIONNAMES.DRAG]: drag,\n [ACTIONNAMES.HOVER]: hover,\n [ACTIONNAMES.CLICK]: click\n};\n\n","export const DRAG = 'drag';\nexport const HOVER = 'hover';\nexport const SELECTIONDRAG = 'selectiondrag';\nexport const CLICK = 'click';\n","import {\n getMousePos,\n getEvent,\n getD3Drag\n } from 'muze-utils';\nimport { HEIGHT, WIDTH, HORIZONTAL } from '../../enums/constants';\n\nconst getSelectionCriteria = (subject, axis, measures) => {\n let criteria = [];\n const {\n axisScale,\n axisType\n } = axis;\n const {\n startPos,\n endPos,\n selectionBoxMeasure,\n drawingInfMeasure,\n offset\n } = measures;\n const subjectStartPoint = subject[axisType];\n\n if (startPos[axisType] === endPos[axisType]) {\n criteria = [];\n } else if (subjectStartPoint + selectionBoxMeasure >= drawingInfMeasure + offset) {\n criteria = [axisScale.invert(drawingInfMeasure + offset - selectionBoxMeasure),\n axisScale.invert(drawingInfMeasure + offset)];\n } else if (subjectStartPoint - offset < offset) {\n criteria = [axisScale.invert(offset * 2), axisScale.invert(selectionBoxMeasure + offset * 2)];\n } else {\n criteria = [axisScale.invert(subjectStartPoint), axisScale.invert(subjectStartPoint + selectionBoxMeasure)];\n }\n axisType === 'x' ? criteria : criteria.reverse();\n return criteria;\n};\n\nexport const selectionBoxDrag = firebolt => (targetEl, behaviours) => {\n let startPos = {};\n let payload;\n const endPos = {};\n const d3Drag = getD3Drag();\n const context = firebolt.context;\n const axisScale = context.axis().source().scale();\n const axisType = context.config().align === HORIZONTAL ? 'x' : 'y';\n const drawingInfMeasure = context.measurement().gradientDimensions[axisType === 'x' ?\n WIDTH : HEIGHT];\n const offset = axisScale.range()[axisType === 'x' ? 0 : 1];\n const measures = {\n drawingInfMeasure,\n offset\n };\n let subject = {};\n\n targetEl.call(d3Drag().on('start', function () {\n const event = getEvent();\n startPos = getMousePos(this, event.sourceEvent);\n subject = event.subject;\n }).on('drag', () => {\n const event = getEvent();\n const selectionBoxMeasure = subject[axisType === 'x' ? WIDTH : HEIGHT];\n\n subject.x += event.dx;\n subject.y += event.dy;\n\n measures.selectionBoxMeasure = selectionBoxMeasure;\n measures.startPos = startPos;\n measures.endPos = endPos;\n const criteria = getSelectionCriteria(subject, { axisScale, axisType }, measures);\n\n payload = {\n criteria: {\n [context.fieldName()]: criteria\n },\n fadeOut: true\n };\n firebolt.dispatchBehaviour(behaviours[0], payload);\n }).on('end', () => {\n const event = getEvent();\n const selectionBoxMeasure = subject[axisType === 'x' ? WIDTH : HEIGHT];\n measures.selectionBoxMeasure = selectionBoxMeasure;\n measures.startPos = startPos;\n measures.endPos = endPos;\n const criteria = getSelectionCriteria(event, { axisScale, axisType }, measures);\n payload = {\n criteria: {\n [context.fieldName()]: criteria\n },\n fadeOut: true,\n config: {\n transition: {\n duration: 200\n }\n }\n };\n firebolt.dispatchBehaviour(behaviours[0], payload);\n }));\n};\n\n","import { makeElement } from 'muze-utils';\nimport { SpawnableSideEffect } from '@chartshq/muze-firebolt';\nimport { CLASSPREFIX, HEIGHT, WIDTH, HORIZONTAL, RECT } from '../../../enums/constants';\nimport { SELECTIONBOX } from '../../../enums/side-effects';\nimport { selectionBoxDrag } from '../../physical/selection-box-drag';\nimport './styles.scss';\n\n/**\n * This class is used to create a selection box which is used by visual unit for brushing and\n * selection in the canvas.\n * @class SelectionBox\n */\n/* istanbul ignore next */ class SelectionBox extends SpawnableSideEffect {\n static formalName () {\n return SELECTIONBOX;\n }\n\n /**\n * It returns the default configuration needed by selectionbox.\n * @return {Object} Default configuration of the selection box.\n */\n static defaultConfig () {\n return {\n className: 'legend-selection-box',\n classPrefix: CLASSPREFIX\n };\n }\n\n /**\n * Draws the selectionbox with the specified dimensions.\n */\n /* istanbul ignore next */ apply (selectionSet, payload) {\n let x;\n let y;\n let width;\n let height;\n const firebolt = this.firebolt;\n const context = firebolt.context;\n const config = this.config();\n const axis = context.axis().source();\n const className = `${config.classPrefix}-${config.className}`;\n\n const domain = payload.criteria[firebolt.context.fieldName()];\n const axisScale = axis.scale();\n const range = domain ? [axis.getScaleValue(domain[0]), axis.getScaleValue(domain[1])] : [];\n\n const axisType = context.config().align === HORIZONTAL ? 'x' : 'y';\n\n const gradientDimension = firebolt.context.measurement().gradientDimensions[axisType === 'x' ?\n HEIGHT : WIDTH];\n\n const rangeShifter = axisScale.range()[axisType === 'x' ? 0 : 1];\n const legendGradContainer = context.getDrawingContext().svgContainer;\n const legendSelGroup = makeElement(legendGradContainer, 'g', [1], `${config.classPrefix}-selection-box-group`);\n\n if (firebolt.context.config().align === HORIZONTAL) {\n x = range[0] - rangeShifter || 0;\n y = 0;\n width = range[1] - range[0] || 0;\n height = gradientDimension;\n } else {\n x = 0;\n y = range[1] - rangeShifter || 0;\n height = range[0] - range[1] || 0;\n width = gradientDimension;\n }\n const enterFn = function (el) {\n selectionBoxDrag(firebolt)(el, ['brush']);\n };\n const selBox = makeElement(legendSelGroup, RECT, [{ domain, x, y, width, height }], className,\n { enter: enterFn });\n selBox.attr('y', y)\n .attr('x', x)\n .attr(WIDTH, width)\n .attr(HEIGHT, height);\n }\n}\n\nexport default SelectionBox;\n\n","import { selectElement } from 'muze-utils';\n\nexport const strategies = (firebolt) => {\n const context = firebolt.context;\n const classed = (set, className, change) => {\n const classPrefix = context.config().classPrefix;\n selectElement(context.mount())\n .selectAll(`.${classPrefix}-legend-columns`)\n .filter(d => set.uids.indexOf(d.id) !== -1)\n .selectAll('div')\n .classed(className, change);\n };\n\n return {\n fade: (set, config = {}) => {\n const classPrefix = context.config().classPrefix;\n if (!set.mergedEnter.length && !set.mergedExit.length) {\n classed(set.completeSet, config.className || `${classPrefix}-legend-fadeout`, false);\n } else {\n classed(set.mergedExit, config.className || `${classPrefix}-legend-brighten`, false);\n classed(set.mergedExit, config.className || `${classPrefix}-legend-fadeout`, true);\n classed(set.mergedEnter, config.className || `${classPrefix}-legend-fadeout`, false);\n }\n },\n brighten: (set, config = {}) => {\n const classPrefix = context.config().classPrefix;\n if (!set.mergedEnter.length && !set.mergedExit.length) {\n classed(set.completeSet, config.className || `${classPrefix}-legend-brighten`, false);\n } else {\n classed(set.mergedEnter, config.className || `${classPrefix}-legend-brighten`, true);\n classed(set.mergedExit, config.className || `${classPrefix}-legend-brighten`, false);\n }\n }\n };\n};\n","import { GenericSideEffect } from '@chartshq/muze-firebolt';\nimport { strategies } from './strategies';\nimport { Highlighter } from '../../../enums/side-effects';\n\nexport default class LegendHighlighter extends GenericSideEffect {\n constructor (...params) {\n super(...params);\n this._strategies = strategies(this.firebolt);\n this._strategy = 'brighten';\n }\n\n static formalName () {\n return Highlighter;\n }\n\n apply (selectionSet, payload, options = {}) {\n const strategy = this._strategies[options.strategy || this._strategy];\n\n strategy(selectionSet, this);\n }\n}\n","import { mergeRecursive } from 'muze-utils';\n\nexport const PROPS = {\n config: {\n sanitization: (context, value) => mergeRecursive(context._config || {}, value)\n },\n data: {},\n fieldName: {},\n legendContainer: {},\n measurement: {\n sanitization: (context, value) => {\n const measurement = mergeRecursive(context._measurement, value);\n ['padding', 'border', 'margin'].forEach((space) => {\n measurement[space] = Math.min(measurement[space] > 0 ? measurement[space] : 0,\n measurement.maxWidth * 0.1, measurement.maxHeight * 0.1);\n });\n return measurement;\n }\n },\n logicalSpace: {},\n metaData: {},\n range: {\n sanitization: (context, value) => {\n context.scale().range(value);\n context.resetLogicalSpace();\n context.store().commit('range', value);\n return value;\n }\n },\n scale: {},\n smartTicks: {},\n store: {},\n title: {\n sanitization: (context, value) => mergeRecursive(context._title || {}, value)\n },\n labelManager: {},\n minTickDistance: {},\n valueParser: {\n defaultValue: val => val\n }\n};\n","import { getSymbol } from 'muze-utils';\nimport {\n CENTER,\n LEFT,\n RIGHT\n} from '../enums/constants';\n\nexport const ALIGN = {\n HORIZONTAL: 'horizontal',\n VERTICAL: 'vertical'\n};\n\nexport const DEFAULT_MEASUREMENT = {\n height: 30,\n width: 30,\n maxWidth: Infinity,\n maxHeight: Infinity,\n padding: 2,\n margin: 2,\n border: 1\n};\n\nexport const LEGEND_TITLE = {\n text: '',\n orientation: (pos) => {\n if (pos === LEFT || pos === RIGHT) {\n return LEFT;\n } return CENTER;\n }\n};\n\nexport const DEFAULT_CONFIG = {\n classPrefix: 'muze',\n borderStyle: 'solid',\n borderColor: 'rgba(0,0,0,0)',\n formatter: {\n bounds: {\n lower: 'less than',\n upper: 'more than'\n }\n },\n item: {\n text: {\n orientation: 'right',\n width: 10,\n formatter: (val, i, data, context) => context.valueParser()(val)\n },\n icon: {\n className: 'legend-icon',\n height: 20,\n width: 20,\n color: 'rgba(0,0,0,.5)',\n type: 'square'\n }\n }\n};\n\n/**\n * Creates a map of pre defined icons\n *\n * @param {string} icon Accepts a icon name like 'square', 'cross', 'diamond' etc\n * @return {Object} icon object which can be used to draw the icons\n */\nexport const ICON_MAP = (icon) => {\n if (icon && typeof (icon) === 'string') {\n return getSymbol(icon);\n } return icon;\n};\n","import { makeElement, numberInterpolator } from 'muze-utils';\n\nimport {\n SCALE_FUNCTIONS,\n WIDTH,\n HEIGHT,\n LEFT,\n RIGHT,\n TOP,\n BOTTOM,\n MAXWIDTH\n} from '../enums/constants';\n\n/**\n *\n *\n * @param {*} scale\n *\n */\nexport const getScaleInfo = (scale) => {\n const scaleType = scale.constructor.type();\n const domain = scale.uniqueValues();\n const steps = scale.config().stops || 1;\n const scaleFn = SCALE_FUNCTIONS[scaleType];\n\n return { scaleType, domain, steps, scaleFn };\n};\n\n/**\n * Function to recompute the stops in array in case to left and right alignment of legend.\n *\n * @param {string} param - parameter to measure\n * @param {Object} requiredMeasure - required measure parameters\n * @param {Object} availableMeasure - available meassure parameters\n * @param {Array} domainForLegend - array\n * @param {Object} smartLabelCalc - smartLabel Manager\n * @return {Array} - Array\n */\nconst getcomputedArray = (computationhelper, requiredMeasure, availableMeasure, domainForLegend) => {\n // declaring Current and Next Tick Value variable\n let currentTickValue;\n let nextTickValue;\n const upperBound = domainForLegend[domainForLegend.length - 1];\n const param = computationhelper.measureParam;\n const smartLabelCalc = computationhelper.smartLabelCalc;\n\n // calculating pixel required per Tick Values\n const pixelPerTick = (availableMeasure[param] / upperBound);\n\n // checking if available max width is smaller than required width for legend.\n if (availableMeasure[param] >= requiredMeasure[param]) {\n return domainForLegend;\n }\n\n currentTickValue = (smartLabelCalc.getOriSize((domainForLegend[0]))[param]);\n for (let i = 1; i < domainForLegend.length - 1; i++) {\n nextTickValue = Math.floor((currentTickValue / pixelPerTick) + domainForLegend[i - 1]);\n if (domainForLegend[i] < nextTickValue) {\n domainForLegend.splice(i, 1);\n i -= 1;\n }\n currentTickValue = (smartLabelCalc.getOriSize((domainForLegend[i]))[param]);\n }\n return domainForLegend;\n};\n\n/**\n * function to recompute the Stops Array provided to prevent the Overlapping of values\n * @param {Array} domainForLegend - Stops Array\n * @param {Object} scaleParams - Scale Parameters\n * @return {Array} - modified Stops Array\n */\nexport const getInterpolatedArrayData = (domainForLegend, scaleParams) => {\n // defining param for height/width selector\n let measureParam;\n\n // declaring variable for required Width\n let requiredWidth;\n\n // declaring variable for required height\n let requiredHeight;\n\n // declaring the variable for upperbound\n let upperBound = domainForLegend[domainForLegend.length - 1];\n\n // Initializing Minimum Tick Difference Variable and checking if it's less than 1 or not\n let minTickDiff = Math.ceil(domainForLegend[1] - domainForLegend[0]);\n\n // calculating max tick difference\n const maxTickDiff = Math.ceil(upperBound - domainForLegend[0]);\n\n // gradient Alignment\n const { alignment } = scaleParams;\n\n // getting SmartLabel Manager to calculate tick Params\n const smartLabelCalc = scaleParams.smartLabel;\n\n // scale Measurements (i.e MaxWidth and MaxHeight available)\n const availableSpace = scaleParams.measures;\n\n // getting minimum Tick size (i.e height and width)\n const minimumTickSize = scaleParams.minTickDistance;\n\n // getting domain upperbound dimensions\n const { height: tickDimHeight, width: tickDimWidth } = smartLabelCalc.getOriSize((upperBound));\n\n /* Checking if UpperBound of Domain is Floating or Not.\n In case of floating constricting it to 2 decimals after point. */\n if (!Number.isInteger(upperBound)) {\n upperBound = ((upperBound).toFixed(2));\n }\n\n // Calculating minimum tick difference\n minTickDiff = minTickDiff < 1 ? 1 : minTickDiff;\n\n // required width to render legend\n requiredWidth = (Math.abs(maxTickDiff) / Math.abs(minTickDiff)) * (tickDimWidth + (minimumTickSize.width));\n\n requiredWidth -= Math.abs(maxTickDiff);\n\n // require height to render legend\n requiredHeight = (Math.abs(maxTickDiff) / Math.abs(minTickDiff)) * tickDimHeight;\n\n requiredHeight -= Math.abs(maxTickDiff);\n\n // checking the alignment of legend\n if (alignment === TOP || alignment === BOTTOM) {\n measureParam = WIDTH;\n } else {\n measureParam = HEIGHT;\n }\n\n // calculating computed array\n domainForLegend = getcomputedArray({\n smartLabelCalc,\n measureParam\n }, {\n height: requiredHeight,\n width: requiredWidth\n }, {\n height: availableSpace.maxHeight,\n width: availableSpace.maxWidth\n }, domainForLegend);\n\n return domainForLegend;\n};\n\n/**\n * function to recalculate steps on providing more number of stops than canvas can accomodate.\n * @param {Array} domain - Array\n * @param {Array} steps - Array\n * @param {Object} scaleParams - Scale Parameters\n * @return {Array} - recalculated Step Array\n */\nexport const getInterpolatedData = (domain, steps, scaleParams) => {\n // declaring recomputeSteps Variable\n let recomputeSteps = 0;\n\n const getTickMeasure = scaleParams.smartLabel;\n const { maxWidth, maxHeight } = scaleParams.measures;\n const { alignment } = scaleParams;\n const domainForLegend = [];\n const interpolatedFn = numberInterpolator()(domain[0], domain[1]);\n\n // getting tick measure(i.e height and width)\n const tickValue = getTickMeasure.getOriSize(domain[1].toFixed(2));\n\n // To round the floating values to Integer and checking if value is 1.\n steps = Math.round(steps);\n steps = steps < 1 ? (steps + 1) : steps;\n\n // checking alignment of the Axis\n if (alignment === TOP || alignment === BOTTOM) {\n recomputeSteps = Math.floor(maxWidth / (tickValue.width));\n } else {\n recomputeSteps = Math.floor(maxHeight / (tickValue.height));\n }\n steps = Math.min(steps, recomputeSteps);\n\n // scaling the axis based on steps provided\n for (let i = 0; i <= steps; i++) {\n domainForLegend[i] = interpolatedFn(i / steps);\n }\n return domainForLegend;\n};\n\n/**\n *\n *\n * @param {*} container\n * @param {*} text\n * @param {*} measurement\n * @param {*} classPrefix\n */\nexport const titleCreator = (container, title, measurement, config) => {\n const titleWidth = Math.min(measurement.maxWidth, measurement.width);\n\n const titleContainer = makeElement(container, 'table', [1], `${config.classPrefix}-legend-title`)\n .style(WIDTH, `${titleWidth}px`)\n .style(HEIGHT, `${measurement.height}px`)\n .style('border-bottom', `${measurement.border}px ${config.borderStyle} ${config.borderColor}`)\n .style('text-align', title.orientation instanceof Function ?\n title.orientation(config.position) : title.orientation);\n return makeElement(titleContainer, 'td', [1], `${config.classPrefix}-legend-title-text`)\n .style(WIDTH, `${titleWidth}px`)\n .style(MAXWIDTH, `${titleWidth}px`)\n .style(HEIGHT, '100%')\n .style('line-height', 1)\n .style('padding', `${measurement.padding}px`)\n .text(title.text)\n .style('overflow-x', 'scroll')\n .node();\n};\n\n/**\n *\n *\n * @param {*} data\n * @param {*} prop\n * @param {*} labelManager\n *\n */\nexport const getMaxMeasures = (data, prop, labelManager) => {\n let maxHeight = -Infinity;\n let maxWidth = -Infinity;\n\n data.forEach((item) => {\n const value = prop ? item[prop] : item;\n const space = labelManager.getOriSize(value);\n maxHeight = Math.max(space.height + 2, maxHeight);\n maxWidth = Math.max(space.width + 2, maxWidth);\n });\n\n return { height: maxHeight, width: maxWidth };\n};\n\n/**\n *\n *\n * @param {*} data\n * @param {*} prop\n * @param {*} labelManager\n *\n */\nexport const getItemMeasures = (context, prop, formatter) => {\n const space = [];\n const data = context.data();\n const labelManager = context._labelManager;\n\n data.forEach((item, index) => {\n const value = prop ? item[prop] : item;\n const { height, width } = labelManager.getOriSize(formatter(value, index, data, context));\n space[index] = { height: height + 1, width: width + 1 };\n });\n return space;\n};\n\n/**\n *\n *\n * @param {*} textOrientation\n * @param {*} effPadding\n * @param {*} titleSpace\n *\n * @memberof Legend\n */\nexport const computeItemSpaces = (config, measures, data) => {\n let totalHeight = 0;\n let totalWidth = 0;\n let maxItemSpaces = {\n width: 0, height: 0\n };\n const {\n effPadding,\n titleWidth,\n labelSpaces,\n titleHeight,\n maxWidth\n } = measures;\n const {\n item,\n align\n } = config;\n const {\n icon,\n text\n } = item;\n const textOrientation = text.orientation;\n const itemSpaces = [];\n const iconSpaces = [];\n let maxIconWidth = 0;\n labelSpaces.forEach((labelSpace, i) => {\n const itemSpace = { width: 0, height: 0 };\n const iconSpace = { width: 0, height: 0 };\n const datum = data[i] || {};\n // Compute each legend item height/width\n if (textOrientation === LEFT || textOrientation === RIGHT) {\n // Get label, icon and item widths\n labelSpace.width += effPadding;\n iconSpace.width = (datum.size ? 2 * Math.sqrt(datum.size / Math.PI) : icon.width) + effPadding;\n maxIconWidth = Math.max(iconSpace.width, maxIconWidth);\n itemSpace.width = labelSpace.width + maxIconWidth;\n\n // Get label, icon and item heights\n labelSpace.height = Math.max(labelSpace.height, icon.height) + effPadding;\n iconSpace.height = labelSpace.height;\n itemSpace.height = labelSpace.height;\n } else {\n // Get label, icon and item widths\n labelSpace.width = Math.max(labelSpace.width, datum.size ? 2 * Math.sqrt(datum.size / Math.PI)\n : icon.width) + effPadding;\n iconSpace.width = labelSpace.width;\n itemSpace.width = labelSpace.width;\n maxIconWidth = Math.max(iconSpace.width, maxIconWidth);\n\n // Get label, icon and item heights\n labelSpace.height += effPadding;\n iconSpace.height = icon.height + effPadding;\n itemSpace.height = labelSpace.height + iconSpace.height;\n }\n // Compute height and width of legend for each alignment\n if (align === 'horizontal') {\n totalHeight = Math.max(totalHeight, itemSpace.height);\n } else {\n totalHeight += itemSpace.height;\n totalWidth = Math.max(totalWidth, itemSpace.width, titleWidth);\n }\n maxItemSpaces = {\n width: Math.max(itemSpace.width, maxItemSpaces.width),\n height: Math.max(itemSpace.height, maxItemSpaces.height)\n };\n itemSpaces.push(itemSpace);\n iconSpaces.push(iconSpace);\n });\n itemSpaces.forEach((itemSpace, i) => {\n if (align === 'horizontal') {\n itemSpace.height = totalHeight;\n iconSpaces[i].width = maxIconWidth;\n if (textOrientation === LEFT || textOrientation === RIGHT) {\n labelSpaces[i].height = totalHeight;\n iconSpaces[i].height = totalHeight;\n itemSpaces[i].width = labelSpaces[i].width + maxIconWidth;\n } else {\n labelSpaces[i].width = maxIconWidth;\n itemSpaces[i].width = maxIconWidth;\n labelSpaces[i].width = maxIconWidth;\n }\n totalWidth = Math.max(totalWidth + itemSpaces[i].width);\n } else {\n itemSpace.width = Math.max(totalWidth, maxWidth);\n if (textOrientation === TOP || textOrientation === BOTTOM) {\n labelSpaces[i].width = totalWidth;\n iconSpaces[i].width = totalWidth;\n maxIconWidth = totalWidth;\n } else {\n const labelWidth = labelSpaces[i].width;\n const newLabelWidth = (maxItemSpaces.width - maxIconWidth);\n iconSpaces[i].width = maxIconWidth;\n itemSpaces[i].width = labelSpaces[i].width + maxIconWidth;\n labelSpaces[i].width = Math.max(labelWidth, newLabelWidth);\n totalWidth = Math.max(totalWidth, itemSpace.width);\n }\n }\n });\n totalWidth = Math.ceil(Math.max(totalWidth, titleWidth)) + effPadding;\n totalHeight += titleHeight + effPadding;\n totalHeight = Math.ceil(totalHeight);\n return { totalHeight, totalWidth, itemSpaces, iconSpaces, maxItemSpaces, maxIconWidth };\n};\n\n/**\n *\n *\n * @param {*} type\n * @param {*} scaleInfo\n * @param {*} domainInfo\n *\n */\nexport const getDomainBounds = (type, scaleInfo, domainInfo) => {\n const {\n scaleFn,\n scaleType,\n scale\n } = scaleInfo;\n const {\n domain,\n domainBounds,\n domainLeg,\n steps\n } = domainInfo;\n const ele = domain[type === 'lower' ? 0 : domain.length - 1];\n const step = steps[type === 'lower' ? 0 : steps.length - 1];\n\n return {\n [scaleType]: scaleType === 'size' ? scale[scaleFn](ele) * scale.getScaleFactor() : scale[scaleFn](ele),\n value: domainBounds[type],\n id: type === 'lower' ? 0 : domainLeg.length + 2,\n range: [ele, step]\n };\n};\n","import {\n makeElement,\n selectElement,\n getUniqueId,\n getSmartComputedStyle,\n generateGetterSetters,\n mergeRecursive\n} from 'muze-utils';\nimport { behaviouralActions } from '@chartshq/muze-firebolt';\nimport * as legendBehaviours from '../firebolt/behavioural';\n\nimport { LegendFireBolt } from '../firebolt/legend-firebolt';\nimport { actionBehaviourMap } from '../firebolt/action-behaviour-map';\nimport { physicalActions } from '../firebolt/physical';\nimport * as sideEffects from '../firebolt/side-effects';\nimport { behaviourEffectMap } from '../firebolt/behaviour-effect-map';\nimport { VALUE, PATH, RIGHT, LEFT, TOP, BOTTOM } from '../enums/constants';\nimport { PROPS } from './props';\nimport { DEFAULT_MEASUREMENT, DEFAULT_CONFIG, LEGEND_TITLE } from './defaults';\nimport { getItemMeasures, titleCreator, computeItemSpaces } from './legend-helper';\n\n/**\n * Creates a Legend from the axes of a canvas\n *\n * @param {Object} dependencies : legend data\n * @class SimpleLegend\n */\nexport default class SimpleLegend {\n\n /**\n * Creates an instance of Legend.\n * @param {Object} dependencies Set of dependencies required by the legend\n * @memberof Legend\n */\n constructor (dependencies) {\n this._data = [];\n this._metaData = [];\n this._mount = null;\n this._fieldName = null;\n this._title = Object.assign({}, LEGEND_TITLE);\n this._metaData = null;\n this._labelManager = dependencies.labelManager;\n this._cells = dependencies.cells;\n this._id = getUniqueId();\n this._measurement = Object.assign({}, this.constructor.defaultMeasurement());\n this._config = mergeRecursive({}, this.constructor.defaultConfig());\n\n const dist = dependencies.labelManager.getOriSize('w');\n this._minTickDistance = { width: dist.width * 3 / 4, height: dist.height / 2 };\n\n generateGetterSetters(this, PROPS);\n this._computedStyle = getSmartComputedStyle(selectElement('body'),\n `${this.config().classPrefix}-legend-item-info`);\n\n this._firebolt = new LegendFireBolt(this, {\n behavioural: Object.assign({}, behaviouralActions, legendBehaviours),\n physical: physicalActions,\n physicalBehaviouralMap: actionBehaviourMap\n }, sideEffects, behaviourEffectMap);\n }\n\n id () {\n return this._id;\n }\n /**\n * Initializes an instance of the class\n *\n * @static\n * @param {Object} dependencies Set of dependencies required by the legend\n * @return {Instance} returns a new instance of Legend\n * @memberof Legend\n */\n static create (dependencies) {\n return new SimpleLegend(dependencies);\n }\n\n /**\n *\n *\n * @static\n *\n * @memberof SimpleLegend\n */\n static defaultConfig () {\n return DEFAULT_CONFIG;\n }\n\n /**\n *\n *\n * @static\n *\n * @memberof SimpleLegend\n */\n static defaultMeasurement () {\n return DEFAULT_MEASUREMENT;\n }\n\n /**\n *\n *\n * @readonly\n * @memberof SimpleLegend\n */\n firebolt (...params) {\n if (params.length) {\n return this;\n }\n return this._firebolt;\n }\n\n /**\n *\n *\n *\n * @memberof Legend\n */\n elemType () {\n return PATH;\n }\n\n canvasAlias (...alias) {\n if (alias.length) {\n this._canvasAlias = alias[0];\n return this;\n }\n return this._canvasAlias;\n }\n\n /**\n *\n *\n *\n * @memberof Legend\n */\n mount (...params) {\n if (params.length) {\n this._mount = params[0];\n this.render();\n return this;\n }\n return this._mount;\n }\n\n /**\n *\n *\n * @param {*} effPadding\n * @param {*} align\n *\n * @memberof Legend\n */\n getLabelSpaces () {\n const {\n item,\n classPrefix\n } = this.config();\n this._labelManager.setStyle(getSmartComputedStyle(selectElement('body'),\n `${classPrefix}-legend-item-info`));\n return getItemMeasures(this, VALUE, item.text.formatter);\n }\n\n /**\n * Sets the height and width of a legend based on provided max\n * height and width and based on its contents\n *\n * @return {Instance} Current instance\n * @memberof Legend\n */\n setLegendMeasures () {\n const {\n width,\n height,\n maxWidth,\n maxHeight,\n padding,\n margin,\n border\n } = this.measurement();\n const {\n align\n } = this.config();\n\n // Effective padding, margin and padding\n const effPadding = padding * 2;\n const effBorder = border * 2;\n const effMargin = margin * 2;\n\n this.data(this.dataFromScale());\n // Get space occupied by title\n const titleSpace = this.getTitleSpace();\n const titleHeight = titleSpace.height > 0 ? titleSpace.height + effPadding : 0;\n const titleWidth = titleSpace.width + effPadding;\n\n // Get space occupied by labels\n const labelSpaces = this.getLabelSpaces(effPadding, align);\n const {\n totalHeight, totalWidth, itemSpaces, iconSpaces, maxItemSpaces, maxIconWidth\n } = computeItemSpaces(this.config(),\n { effPadding, titleWidth, labelSpaces, titleHeight, maxWidth, maxHeight }, this.data());\n\n this.measurement({\n width: Math.max(totalWidth, width) + effMargin + effBorder,\n height: Math.max(totalHeight, height) + effMargin + effBorder,\n labelSpaces,\n iconSpaces,\n itemSpaces,\n maxItemSpaces,\n maxIconWidth,\n titleSpaces: {\n width: Math.min(maxWidth, this.measurement().width) - effMargin - effBorder,\n height: titleHeight\n }\n });\n return this;\n }\n\n /**\n * Returns the space occupied by the legend title\n *\n * @return {Object} Space occupied by title\n * @memberof Legend\n */\n getTitleSpace () {\n this._labelManager.setStyle(getSmartComputedStyle(selectElement('body'),\n `${this.config().classPrefix}-legend-title`));\n return this._labelManager.getOriSize(this.title().text ? this.title().text : '');\n }\n\n /**\n * Creates the title for the legend\n *\n * @param {DOM} container Container made for the title\n * @return {Selection} Title and it's node\n * @memberof Legend\n */\n renderTitle (container) {\n const { titleSpaces, border, padding, width, maxWidth } = this.measurement();\n const { borderStyle, borderColor } = this.config();\n return titleCreator(container, this.title(), {\n height: titleSpaces.height,\n width,\n maxWidth,\n border,\n padding,\n borderStyle,\n borderColor\n }, this.config());\n }\n\n /**\n * Render the legend with its title\n *\n * @param {DOM} mountPoint Point where the legend and title are to be appended\n * @return {Instance} Current instance of legend\n * @memberof Legend\n */\n render () {\n const firebolt = this.firebolt();\n const {\n classPrefix,\n borderStyle,\n borderColor,\n position\n } = this.config();\n const {\n maxWidth,\n maxHeight,\n width,\n height,\n margin,\n border\n } = this.measurement();\n const legendContainer = makeElement(selectElement(this.mount()), 'div', [1], `${classPrefix}-legend-box`);\n let marginPosition;\n switch (position) {\n case TOP:\n marginPosition = `margin-${BOTTOM}`;\n break;\n case LEFT:\n marginPosition = `margin-${RIGHT}`;\n break;\n case BOTTOM:\n marginPosition = `margin-${TOP}`;\n break;\n default:\n marginPosition = `margin-${LEFT}`;\n }\n legendContainer.classed(`${classPrefix}-legend-box-${this._id}`, true);\n legendContainer.style('float', 'left');\n // set height and width\n legendContainer.style('width', `${Math.min(maxWidth, width) - margin * 2}px`)\n .style('height', `${Math.min(maxHeight, height) - margin * 2}px`)\n .style(`${marginPosition}`, `${margin}px`)\n .style('border', `${border}px ${borderStyle} ${borderColor}`);\n this.legendContainer(legendContainer.node());\n\n // create title\n this.renderTitle(legendContainer);\n firebolt.createSelectionSet(this.data().map(d => d.id));\n return legendContainer;\n }\n /**\n *\n *\n * @param {*} data\n *\n * @memberof StepLegend\n */\n getCriteriaFromData (data) {\n const fieldName = this.fieldName();\n const type = this.metaData().getData().schema[0].type;\n if (type === 'measure') {\n return {\n [fieldName]: data.range\n };\n }\n return [[fieldName], [data.rawVal]];\n }\n}\n","import {\n LEFT,\n RIGHT,\n START,\n END,\n TOP,\n BOTTOM,\n HORIZONTAL,\n VERTICAL,\n CENTER,\n SHAPE,\n VALUE\n} from '../enums/constants';\n\nconst legendOrientation = {\n [HORIZONTAL]: {\n datasets: data => ({\n row: [1],\n column: data\n }),\n itemContainerMeasures: (measurement) => {\n const {\n itemSpaces,\n width\n } = measurement;\n return {\n row: {\n width: `${width}px`,\n padding: `${0}px`\n },\n column: {\n width: (d, i) => `${itemSpaces[i].width}px`,\n padding: `${0}px`\n }\n };\n },\n getStepSpacesInfo: (measurement) => {\n const { maxItemSpaces, height } = measurement;\n return {\n iconHeight: height,\n iconWidth: maxItemSpaces.width,\n stepPadding: {\n horizontal: true,\n vertical: false\n }\n };\n }\n },\n [VERTICAL]: {\n datasets: data => ({\n row: data,\n column: d => [d]\n }),\n itemContainerMeasures: (measurement, config) => {\n const {\n width\n } = measurement;\n const { padding } = config;\n\n return {\n row: {\n width: `${width}px`,\n padding: `${padding}px`\n },\n column: {\n width: `${width}px`,\n padding: `${0}px`\n }\n };\n },\n getStepSpacesInfo: (measurement) => {\n const { maxItemSpaces, width } = measurement;\n return {\n iconHeight: maxItemSpaces.height,\n iconWidth: width,\n stepPadding: {\n horizontal: false,\n vertical: true\n }\n };\n }\n }\n};\n\nexport const positionConfig = {\n [LEFT]: legendOrientation[VERTICAL],\n [RIGHT]: legendOrientation[VERTICAL],\n [TOP]: legendOrientation[HORIZONTAL],\n [BOTTOM]: legendOrientation[HORIZONTAL]\n};\n\nexport const alignmentMap = {\n [LEFT]: END,\n [RIGHT]: START,\n [TOP]: CENTER,\n [BOTTOM]: CENTER\n};\n\n// Reverses data for step legend\nexport const stepData = data => ({\n [LEFT]: data.reverse(),\n [RIGHT]: data.reverse(),\n [TOP]: data,\n [BOTTOM]: data\n});\n\n// Changes the item layout based on the position of the text\nexport const itemStack = {\n [LEFT]: [VALUE, SHAPE],\n [RIGHT]: [SHAPE, VALUE],\n [TOP]: [VALUE, SHAPE],\n [BOTTOM]: [SHAPE, VALUE]\n};\n","import { makeElement, selectElement, applyStyle } from 'muze-utils';\nimport { ICON_MAP } from './defaults';\nimport { positionConfig, alignmentMap, itemStack } from './position-config';\nimport {\n WIDTH,\n HEIGHT,\n CENTER,\n VALUE,\n RECT,\n LEFT,\n RIGHT\n} from '../enums/constants';\n\n/**\n *\n *\n * @param {*} container\n * @param {*} data\n * @param {*} legendInstance\n * @param {*} align\n *\n */\nexport const getItemContainers = (container, data, legendInstance) => {\n const measurement = legendInstance.measurement();\n const config = legendInstance.config();\n const {\n itemSpaces\n } = measurement;\n const {\n classPrefix,\n position\n } = config;\n const positionObj = positionConfig[position];\n const datasets = positionObj.datasets(data);\n const measures = positionObj.itemContainerMeasures(measurement, config);\n\n const rows = makeElement(container, 'div', datasets.row, `${classPrefix}-legend-row`);\n rows.style(HEIGHT, (d, i) => `${itemSpaces[i].height}px`);\n rows.style(WIDTH, measures.row.width);\n rows.style('padding', measures.row.padding);\n\n const columns = makeElement(rows, 'div', datasets.column, `${classPrefix}-legend-columns`);\n columns.style(WIDTH, measures.column.width);\n columns.style('padding', measures.column.padding);\n\n return columns;\n};\n\n/**\n *\n *\n * @param {*} container\n * @param {*} classPrefix\n * @param {*} data\n *\n * @memberof DiscreteLegend\n */\nexport const createLegendSkeleton = (context, container, classPrefix, data) => {\n let gradWidth = 0;\n let gradHeight = 0;\n let maxGradHeight = 0;\n let maxGradWidth = 0;\n const measurement = context.measurement();\n const {\n margin,\n border,\n titleSpaces,\n width,\n height,\n maxWidth,\n maxHeight\n } = measurement;\n\n gradHeight = height - (titleSpaces.height + 2 * margin + 2 * border);\n gradWidth = width - (margin * 2 + border * 2);\n\n maxGradHeight = maxHeight - (titleSpaces.height + margin * 2 + border * 2);\n maxGradWidth = maxWidth - (margin * 2 + border * 2);\n\n let legendBody = makeElement(container, 'div', [1], `${classPrefix}-legend-body`);\n legendBody.select(`.${classPrefix}-legend-overflow`).remove();\n // Create a div with scroll when overflow\n if (maxGradWidth && maxGradWidth < gradWidth) {\n legendBody = legendBody.style(WIDTH, `${maxGradWidth}px`).style('overflow-x', 'scroll');\n }\n // Create a div with scroll when overflow\n if (maxGradHeight && maxGradHeight < gradHeight) {\n legendBody.style(HEIGHT, `${maxGradHeight}px`).style('overflow-y', 'scroll');\n }\n\n legendBody = makeElement(legendBody, 'div', [1], `${classPrefix}-legend-overflow`);\n\n legendBody.style(WIDTH, `${gradWidth}px`);\n legendBody.style(HEIGHT, `${gradHeight}px`);\n\n const legendItem = getItemContainers(legendBody, data, context);\n return { legendItem };\n};\n\n/**\n * Creates legend item based on alignment and text orientation\n *\n * @param {Selection} container Point where items are to be mounted\n * @return {Instance} Current instance\n * @memberof Legend\n */\nexport const createItemSkeleton = (context, container) => {\n const {\n classPrefix,\n item\n } = context.config();\n const textOrientation = item.text.orientation;\n\n const stack = itemStack[textOrientation];\n const itemSkeleton = makeElement(container, 'div', (d, i) => stack.map(e => [e, d[e], d.color, d.size,\n d.value, context.fieldName(), i]), `${classPrefix}-legend-item-info`);\n\n const alignClass = alignmentMap[textOrientation];\n\n itemSkeleton.classed(alignClass, true);\n return { itemSkeleton };\n};\n\n/**\n *\n *\n * @param {*} measureType\n * @param {*} stepColorCheck\n */\nexport const applyItemStyle = (item, measureType, stepColorCheck, context) => {\n const {\n padding,\n labelSpaces,\n iconSpaces,\n maxIconWidth\n } = context.measurement();\n const diff = stepColorCheck ? -padding * 2 : 0;\n\n if (item[0] === VALUE) {\n return `${labelSpaces[item[6]][measureType]}px`;\n }\n return `${measureType === 'width' && !stepColorCheck ? maxIconWidth : iconSpaces[item[6]][measureType] - diff}px`;\n};\n\n/**\n *\n *\n * @param {*} str\n *\n */\nconst checkPath = (str) => {\n if (/^[mzlhvcsqta]\\s*[-+.0-9][^mlhvzcsqta]+/i.test(str) && /[\\dz]$/i.test(str) && str.length > 4) {\n return true;\n }\n return false;\n};\n\n/**\n *\n *\n * @param {*} d\n * @param {*} elem\n */\nconst createShape = function (d, elem, defaultIcon, width, height) {\n const groupElement = elem;\n // const { shape, size, update } = d;\n const size = d[3] || Math.min(width, height) * Math.PI;\n const shape = d[1] || defaultIcon;\n\n if (shape instanceof Promise) {\n shape.then((res) => {\n d.shape = res;\n return createShape(d, elem);\n });\n } else if (shape instanceof Element) {\n let newShape = shape.cloneNode(true);\n\n if (newShape.nodeName.toLowerCase() === 'img') {\n const src = newShape.src || newShape.href;\n newShape = document.createElementNS('http://www.w3.org/2000/svg', 'image');\n newShape.setAttribute('href', src);\n }\n const shapeElement = selectElement(newShape);\n shapeElement.attr('transform', `scale(${size / 100})`);\n return selectElement(groupElement.node().appendChild(newShape));\n } else if (typeof shape === 'string') {\n let pathStr;\n if (checkPath(shape)) {\n pathStr = shape;\n } else {\n pathStr = ICON_MAP(shape).size(size)();\n }\n return makeElement(groupElement, 'path', data => [data]).attr('d', pathStr);\n }\n d[1] = 'circle';\n return createShape(d, elem, 'circle');\n};\n\n/**\n * Returns the icon of the legend item\n *\n * @param {Object} datum Data property attached to the item\n * @param {number} width width of the item\n * @param {number} height height of the item\n * @return {Object|string} returns the path string or the string name of the icon\n * @memberof Legend\n */\nexport const getLegendIcon = (datum, width, height, defaultIcon) => {\n const icon = ICON_MAP(datum[1]);\n\n if (icon) {\n return icon.size(datum[3] || Math.min(width, height) * Math.PI);\n }\n return ICON_MAP(datum[3] ? 'circle' : defaultIcon).size(datum[3] || Math.min(width, height) * Math.PI);\n};\n\n/**\n *\n *\n */\nexport const renderIcon = (icon, container, datum, context) => {\n const {\n classPrefix,\n iconHeight,\n iconWidth,\n maxIconWidth,\n padding,\n color\n } = context;\n const svg = makeElement(container, 'svg', f => [f], `${classPrefix}-legend-icon-svg`)\n .attr(WIDTH, maxIconWidth)\n .attr(HEIGHT, iconHeight)\n .style(WIDTH, `${maxIconWidth}px`)\n .style(HEIGHT, `${iconHeight}px`);\n\n if (icon !== RECT) {\n const group = makeElement(svg, 'g', [datum[1]], `${classPrefix}-legend-icon`);\n createShape(datum, group, datum[3] ? 'circle' : 'square', iconWidth, iconHeight)\n .attr('transform', `translate(${maxIconWidth / 2 - padding} ${iconHeight / 2})`)\n .attr('fill', datum[2] || color);\n } else {\n makeElement(svg, RECT, [datum[1]], `${classPrefix}-legend-icon`)\n .attr('x', 0)\n .attr('y', 0)\n .attr(WIDTH, maxIconWidth)\n .attr(HEIGHT, iconHeight)\n .attr('fill', datum[2] || color);\n }\n};\n\n/**\n * Renders the items in the legend i.e, icon and text\n *\n * @param {DOM} container Point where item is to be mounted\n * @memberof Legend\n */\nexport const renderDiscreteItem = (context, container) => {\n const labelManager = context._labelManager;\n const {\n item,\n classPrefix\n } = context.config();\n const {\n maxIconWidth,\n padding\n } = context.measurement();\n const {\n width: iconWidth,\n height: iconHeight,\n color,\n className\n } = item.icon;\n\n const textOrientation = item.text.orientation;\n const formatter = item.text.formatter;\n\n labelManager.useEllipsesOnOverflow(true);\n applyStyle(container, {\n width: d => applyItemStyle(d, WIDTH, false, context),\n height: d => applyItemStyle(d, HEIGHT, false, context),\n 'text-align': CENTER,\n padding: `${padding}px`\n });\n\n labelManager.setStyle(context._computedStyle);\n const dataArr = container.data();\n container.each(function (d, i) {\n if (d[0] === VALUE) {\n selectElement(this).text(formatter(d[1], i, dataArr, context))\n .style(`padding-${textOrientation === RIGHT ? LEFT : RIGHT}`, '0px');\n } else {\n // const icon = getLegendIcon(d, iconWidth, iconHeight, type);\n selectElement(this).classed(`${classPrefix}-${className}`, true);\n selectElement(this).classed(`${classPrefix}-${className}-${i}`, true);\n renderIcon('circle', selectElement(this), d, {\n classPrefix,\n iconWidth,\n // iconWidth: 2 * Math.sqrt(d[3] / Math.PI) || iconWidth,\n iconHeight,\n maxIconWidth,\n padding,\n color\n });\n }\n });\n};\n\n/**\n* Renders the items in the legend i.e, icon and text\n*\n* @param {DOM} container Point where item is to be mounted\n* @memberof Legend\n*/\nexport const renderStepItem = (context, container) => {\n const labelManager = context._labelManager;\n const {\n item,\n position,\n classPrefix\n } = context.config();\n const {\n maxItemSpaces,\n maxIconWidth,\n padding\n } = context.measurement();\n const {\n width,\n height,\n color\n } = item.icon;\n const {\n formatter\n } = item.text;\n\n labelManager.useEllipsesOnOverflow(true);\n const { iconHeight, iconWidth, stepPadding } = positionConfig[position].getStepSpacesInfo({\n maxItemSpaces, height, width\n });\n\n applyStyle(container, {\n width: d => applyItemStyle(d, WIDTH, stepPadding.horizontal, context),\n height: d => applyItemStyle(d, HEIGHT, stepPadding.vertical, context),\n 'text-align': 'center',\n padding: `${padding}px`\n });\n\n labelManager.setStyle(context._computedStyle);\n const dataArr = container.data();\n container.each(function (d, i) {\n if (d[0] === VALUE) {\n selectElement(this).text(formatter(d[1], i, dataArr, context));\n } else {\n renderIcon(RECT, selectElement(this), d, {\n classPrefix,\n iconWidth,\n iconHeight,\n maxIconWidth,\n color\n });\n }\n });\n};\n","import {\n FieldType,\n DimensionSubtype,\n formatTemporal\n} from 'muze-utils';\nimport SimpleLegend from './simple-legend';\nimport { DISCRETE, LEFT, SIZE } from '../enums/constants';\nimport { getScaleInfo } from './legend-helper';\nimport { createLegendSkeleton, createItemSkeleton, renderDiscreteItem } from './renderer';\nimport '../styles.scss';\n\n/**\n * Creates a Legend from the axes of a canvas\n *\n * @param {Object} dependencies : legend data\n * @class Legend\n */\nexport default class DiscreteLegend extends SimpleLegend {\n\n /**\n * Initializes an instance of the class\n *\n * @static\n * @param {Object} dependencies Set of dependencies required by the legend\n * @return {Instance} returns a new instance of Legend\n * @memberof Legend\n */\n static create (dependencies) {\n return new DiscreteLegend(dependencies);\n }\n\n /**\n *\n *\n * @static\n *\n * @memberof DiscreteLegend\n */\n static type () {\n return DISCRETE;\n }\n\n /**\n *\n *\n * @param {*} scale\n *\n * @memberof DiscreteLegend\n */\n dataFromScale () {\n const scale = this.scale();\n const { scaleType, domain, scaleFn } = getScaleInfo(scale);\n let domainForLegend = [...new Set(domain)];\n const field = this.metaData().getFieldspace().fields[0];\n const { type, subtype } = field.schema();\n\n domainForLegend = domainForLegend.map((ele, i) => {\n let value = 0;\n let range = 0;\n const rawVal = domainForLegend[i];\n if (type === FieldType.MEASURE) {\n value = (+domainForLegend[i]).toFixed(0);\n const nextVal = domainForLegend[i + 1] ? +domainForLegend[i + 1] : +value;\n range = [value, nextVal.toFixed(0)];\n } else {\n let domainVal = rawVal;\n if (subtype === DimensionSubtype.TEMPORAL) {\n domainVal = formatTemporal(domainForLegend[i], field.minimumConsecutiveDifference());\n }\n value = domainVal;\n range = [domainVal];\n }\n return {\n [scaleType]: scale[scaleFn](ele),\n value,\n id: i,\n range,\n rawVal\n };\n }).filter(d => d.value !== null);\n\n domainForLegend = scaleType === SIZE ? domainForLegend.sort((a, b) => a[scaleType] - b[scaleType])\n : domainForLegend;\n return domainForLegend;\n }\n\n /**\n * Render the legend with its title\n *\n * @param {DOM} mountPoint Point where the legend and title are to be appended\n * @return {Instance} Current instance of legend\n * @memberof Legend\n */\n render () {\n const firebolt = this.firebolt();\n const data = this.data();\n const { classPrefix } = this.config();\n const legendContainer = super.render(this.mount());\n // create Legend\n const { legendItem } = createLegendSkeleton(this, legendContainer, classPrefix, data);\n const { itemSkeleton } = createItemSkeleton(this, legendItem);\n renderDiscreteItem(this, itemSkeleton);\n legendContainer.selectAll('div').style('float', LEFT);\n firebolt.mapActionsAndBehaviour();\n firebolt.createSelectionSet(this.data().map(d => d.id));\n return legendContainer;\n }\n}\n","import { makeElement, applyStyle } from 'muze-utils';\nimport { ContinousAxis } from '@chartshq/muze-axis';\nimport { BOTTOM, RIGHT } from '../enums/constants';\nimport { ALIGN } from './defaults';\nimport '../styles.scss';\n\n/**\n *\n *\n * @param {*} data\n *\n */\nexport const getGradientDomain = (data) => {\n if (typeof data[0].value === 'number') {\n return data.reduce((accumulator, currentValue) =>\n [Math.min(currentValue.value, accumulator[0]), Math.max(currentValue.value, accumulator[1])],\n [Number.MAX_VALUE, Number.MIN_VALUE]);\n }\n return data.map(e => e.value);\n};\n\n/**\n *\n *\n * @param {*} container\n * @param {*} data\n * @param {*} domain\n *\n */\nexport const makeLinearGradient = (container, data, domain) => {\n const defs = makeElement(container, 'defs', [1]);\n const linearGradient = makeElement(defs, 'linearGradient', [1])\n .attr('id', 'linear-gradient')\n .attr('x1', '0%')\n .attr('y2', '0%');\n\n makeElement(linearGradient, 'stop', data, 'stop-gradient')\n .attr('offset', d => `${(d.value - domain[0]) * 100 / (domain[1] - domain[0]) || 1}%`)\n .attr('stop-color', d => d.color);\n return linearGradient;\n};\n\n/**\n * Creates an axis cell with a linear axis for computing space and\n * creating gradient legend\n *\n * @return {AxisCell} Instance of Axis Cell for the gradient axis\n * @memberof Legend\n */\nexport const createAxis = (context) => {\n const data = context.data();\n const { align } = context.config();\n const AxisCell = context._cells.AxisCell;\n const newAxis = new ContinousAxis({\n id: `legend-${context._id}`,\n orientation: align === ALIGN.VERTICAL ? RIGHT : BOTTOM,\n style: context._computedStyle,\n nice: false,\n showAxisName: false,\n tickValues: data.map(d => d.value),\n fixedBaseline: false,\n labels: {\n rotation: null\n }\n }, { labelManager: context._labelManager });\n\n newAxis.domain(getGradientDomain(data));\n newAxis.range([1, 1]);\n return new AxisCell().source(newAxis).config({\n margin: { left: 0, bottom: 0, top: 0, right: 0 }\n });\n};\n\n/**\n *\n *\n * @param {*} container\n * @param {*} data\n * @param {*} classPrefix\n *\n * @memberof GradientLegend\n */\nconst createLegendSkeleton = (container, classPrefix, data) => {\n const domain = getGradientDomain(data);\n const legendContainer = makeElement(container, 'div', [1], `${classPrefix}-legend-body`);\n const legendGradSvg = makeElement(legendContainer, 'svg', [1], `${classPrefix}-gradient`);\n const legendGradCont = makeElement(legendGradSvg, 'g', [1], `${classPrefix}-gradient-group`);\n const linearGradient = makeLinearGradient(legendGradSvg, data, domain);\n const legendRect = makeElement(legendGradCont, 'rect', [1], `${classPrefix}-gradient-rect`);\n\n return {\n legendContainer,\n legendGradCont,\n legendGradSvg,\n linearGradient,\n legendRect\n };\n};\n\n/**\n * Renders the axis for the gradient\n *\n * @param {Selection} container Point where axis is to be mounted\n * @param {number} height Height for axis\n * @param {number} width Width for axis\n * @memberof Legend\n */\nexport const renderAxis = (context, container, height, width) => {\n const axis = context.axis();\n\n axis.setAvailableSpace(width, height);\n axis.render(container.node());\n axis.source().render();\n};\n\n/**\n * Renders gradient legends\n *\n * @param {Selection} container Point where the legend is to be appended\n * @memberof GradientLegend\n */\nexport const renderGradient = (context, container) => {\n let gradHeight = 0;\n let gradWidth = 0;\n const {\n align,\n classPrefix,\n item\n } = context.config();\n const data = context.data();\n // Create the skeleton for the legend\n const {\n legendContainer,\n legendGradSvg,\n legendGradCont,\n linearGradient,\n legendRect\n } = createLegendSkeleton(container, classPrefix, data);\n const labelDim = context.axis().source().getAxisDimensions().tickDimensions;\n const {\n padding,\n margin,\n border,\n titleSpaces,\n maxItemSpaces,\n maxHeight,\n maxWidth,\n height,\n width\n } = context.measurement();\n const gradientDimensions = {};\n\n gradHeight = Math.floor(Math.min(height, maxHeight) - (titleSpaces.height + 2 * margin + 2 * border));\n gradWidth = Math.floor(Math.min(width, maxWidth) - (margin * 2 + border * 2));\n\n if (align === ALIGN.HORIZONTAL) {\n gradientDimensions.height = item.icon.height;\n gradientDimensions.width = gradWidth - 2 * padding - labelDim.width / 2;\n linearGradient.attr('x2', '100%').attr('y1', '0%');\n legendGradCont.attr('transform', `translate( ${labelDim.width / 2} 0)`);\n renderAxis(context, legendContainer, gradHeight - item.icon.height - padding, gradWidth - 2 * padding - 1);\n\n applyStyle(legendContainer, {\n height: `${maxItemSpaces.height + border + padding}px`,\n width: `${Math.min(width, maxWidth)}px`,\n padding: `${padding}px`\n });\n\n legendRect.attr('height', gradientDimensions.height);\n legendRect.attr('width', gradientDimensions.width - labelDim.width / 2);\n } else {\n gradientDimensions.height = gradHeight - 2 * padding - labelDim.height / 2;\n gradientDimensions.width = item.icon.width;\n linearGradient.attr('x2', '0%').attr('y1', '100%');\n legendGradCont.attr('transform', `translate(0 ${labelDim.height / 2})`);\n renderAxis(context, legendContainer, gradHeight - 2 * padding - 1, gradWidth - item.icon.width - padding * 2);\n\n applyStyle(legendContainer, {\n height: `${Math.min(height, maxHeight)}px`,\n width: `${maxWidth}px`,\n padding: `${padding}px`\n });\n legendRect.attr('height', gradientDimensions.height - labelDim.height / 2);\n legendRect.attr('width', gradientDimensions.width);\n }\n\n // Apply Styles to the legend plot area\n applyStyle(legendGradSvg, {\n height: `${gradientDimensions.height}px`,\n width: `${gradientDimensions.width}px`\n });\n\n // Apply styles to the legend rect\n applyStyle(legendRect, {\n fill: 'url(#linear-gradient)'\n });\n legendGradSvg.attr('height', gradientDimensions.height);\n legendGradSvg.attr('width', gradientDimensions.width);\n\n context.measurement({\n gradientDimensions\n });\n context._legendGradientSvg = legendGradSvg;\n return context;\n};\n","import SimpleLegend from './simple-legend';\nimport { getScaleInfo, getInterpolatedData, getInterpolatedArrayData } from './legend-helper';\nimport { GRADIENT, LEFT, SIZE } from '../enums/constants';\nimport { renderGradient, createAxis } from './gradient-helper';\nimport '../styles.scss';\n\n/**\n * Creates a Legend from the axes of a canvas\n *\n * @param {Object} dependencies : legend data\n * @class Legend\n */\nexport default class GradientLegend extends SimpleLegend {\n\n /**\n * Initializes an instance of the class\n *\n * @static\n * @param {Object} dependencies Set of dependencies required by the legend\n * @return {Instance} returns a new instance of Legend\n * @memberof Legend\n */\n static create (dependencies) {\n return new GradientLegend(dependencies);\n }\n\n /**\n *\n *\n * @static\n *\n * @memberof GradientLegend\n */\n static type () {\n return GRADIENT;\n }\n\n /**\n *\n *\n * @param {*} axis\n *\n * @memberof GradientLegend\n */\n axis (...axis) {\n if (axis.length) {\n this._axis = axis[0];\n return this;\n }\n return this._axis;\n }\n\n /**\n *\n *\n * @param {*} scale\n *\n * @memberof GradientLegend\n */\n dataFromScale () {\n let domainForLegend = [];\n const scale = this.scale();\n const { scaleType, domain, steps, scaleFn } = getScaleInfo(scale);\n\n // defining scaleParams\n const scaleParams = {\n smartLabel: this.labelManager(),\n measures: this.measurement(),\n alignment: this.config().position,\n minTickDistance: this.minTickDistance()\n };\n\n if (steps instanceof Array) {\n if (domain[0] < steps[0]) {\n domainForLegend[0] = domain[0];\n }\n domainForLegend = [...domainForLegend, ...steps];\n if (domain[domain.length - 1] > steps[steps.length - 1]) {\n domainForLegend.push(domain[1]);\n }\n // Sorting the domain Array\n domainForLegend = [...new Set(domainForLegend)].sort((a, b) => a - b);\n\n domainForLegend = getInterpolatedArrayData(domainForLegend, scaleParams);\n } else {\n domainForLegend = getInterpolatedData(domain, steps - 1, scaleParams);\n }\n domainForLegend = [...new Set(domainForLegend)].sort((a, b) => a - b);\n\n return domainForLegend.map((ele, i) => {\n const value = domainForLegend[i];\n return {\n [scaleType]: scaleType === SIZE ? scale[scaleFn](ele) * scale.getScaleFactor()\n : scale[scaleFn](Math.floor(ele)),\n value: +value.toFixed(2),\n id: i\n };\n }).filter(d => d.value !== null);\n }\n\n /**\n *\n *\n * @param {*} effPadding\n * @param {*} align\n *\n * @memberof Legend\n */\n getLabelSpaces (effPadding) {\n this.config({\n item: {\n text: {\n orientation: this.config().position\n }\n }\n });\n const axis = createAxis(this);\n const axisSpace = axis.getLogicalSpace();\n const space = { width: axisSpace.width - effPadding, height: axisSpace.height - effPadding };\n const axisDomainLength = axis.source().domain().length;\n const labelSpaces = new Array(axisDomainLength).fill(space);\n\n this.axis(axis);\n return labelSpaces;\n }\n\n /**\n *\n *\n *\n * @memberof GradientLegend\n */\n getDrawingContext () {\n return {\n svgContainer: this._legendGradientSvg\n };\n }\n\n /**\n * Render the legend with its title\n *\n * @param {DOM} mountPoint Point where the legend and title are to be appended\n * @return {Instance} Current instance of legend\n * @memberof Legend\n */\n render () {\n const firebolt = this.firebolt();\n const legendContainer = super.render(this.mount());\n // create Legend\n renderGradient(this, legendContainer);\n legendContainer.selectAll('div').style('float', LEFT);\n firebolt.mapActionsAndBehaviour();\n firebolt.createSelectionSet(this.data().map(d => d.id));\n return legendContainer;\n }\n /**\n *\n *\n * @param {*} data\n *\n * @memberof SimpleLegend\n */\n getCriteriaFromData (data) {\n return [[this.fieldName()], [data.value]];\n }\n}\n","import SimpleLegend from './simple-legend';\nimport {\n getScaleInfo,\n getInterpolatedData,\n getDomainBounds\n} from './legend-helper';\nimport {\n createLegendSkeleton,\n createItemSkeleton,\n renderStepItem\n} from './renderer';\nimport { STEP, RECT, LEFT, SIZE, UPPER, LOWER } from '../enums/constants';\nimport { stepData } from './position-config';\nimport '../styles.scss';\n\n/**\n * Creates a Legend from the axes of a canvas\n *\n * @param {Object} dependencies : legend data\n * @class Legend\n */\nexport default class StepLegend extends SimpleLegend {\n\n /**\n * Initializes an instance of the class\n *\n * @static\n * @param {Object} dependencies Set of dependencies required by the legend\n * @return {Instance} returns a new instance of Legend\n * @memberof Legend\n */\n static create (dependencies) {\n return new StepLegend(dependencies);\n }\n\n /**\n *\n *\n * @static\n *\n * @memberof StepLegend\n */\n static type () {\n return STEP;\n }\n\n /**\n *\n *\n * @param {*} scale\n *\n * @memberof StepLegend\n */\n dataFromScale () {\n let domainLeg = [];\n const scale = this.scale();\n const { scaleType, domain, steps, scaleFn } = getScaleInfo(scale);\n\n const { formatter } = this.config();\n const domainBounds = {\n lower: null, upper: null\n };\n\n // defining scaleParams\n const scaleParams = {\n smartLabel: this.labelManager(),\n measures: this.measurement(),\n alignment: this.config().position,\n minTickDistance: this.minTickDistance()\n };\n\n if (steps instanceof Array) {\n if (domain[0] < steps[0]) {\n domainBounds.lower = [`${formatter.bounds.lower} ${steps[0]}`];\n }\n domainLeg = [...domainLeg, ...steps];\n if (domain[domain.length - 1] > steps[steps.length - 1]) {\n domainBounds.upper = [`${formatter.bounds.upper} ${steps[steps.length - 1]}`];\n }\n } else {\n domainLeg = getInterpolatedData(domain, steps, scaleParams);\n }\n\n domainLeg = [...new Set(domainLeg)].sort((a, b) => a - b);\n domainLeg = domainLeg.map((ele, i) => {\n let value = null;\n if (i < domainLeg.length - 1) {\n value = `${(ele.toFixed(1))} - ${(+domainLeg[i + 1].toFixed(1))}`;\n } else if (domainLeg.length === 1) {\n value = ele.toFixed(1);\n }\n return {\n [scaleType]: scaleType === SIZE ? scale[scaleFn](ele) * scale.getScaleFactor() : scale[scaleFn](ele),\n value,\n id: i + 1,\n range: [ele, domainLeg[i + 1]]\n };\n }).filter(d => d.value !== null);\n\n if (domainBounds.lower) {\n const lowerBounds = getDomainBounds(LOWER, { scale, scaleFn, scaleType },\n { domain, steps, domainBounds });\n domainLeg = [lowerBounds, ...domainLeg];\n }\n if (domainBounds.upper) {\n const upperBounds = getDomainBounds(UPPER, { scale, scaleFn, scaleType },\n { domain, steps, domainBounds, domainLeg });\n domainLeg = [...domainLeg, upperBounds];\n }\n\n return domainLeg;\n }\n\n /**\n *\n *\n * @param {*} effPadding\n * @param {*} align\n *\n * @memberof Legend\n */\n getLabelSpaces (effPadding, align) {\n this.config({\n item: {\n text: {\n orientation: this.config().position\n }\n }\n });\n return super.getLabelSpaces(effPadding, align);\n }\n\n /**\n *\n *\n *\n * @memberof Legend\n */\n elemType () {\n return RECT;\n }\n\n /**\n * Render the legend with its title\n *\n * @param {DOM} mountPoint Point where the legend and title are to be appended\n * @return {Instance} Current instance of legend\n * @memberof Legend\n */\n render () {\n const firebolt = this.firebolt();\n const { classPrefix, position } = this.config();\n const data = stepData(this.data())[position];\n\n const legendContainer = super.render(this.mount());\n\n // create Legend\n const { legendItem } = createLegendSkeleton(this, legendContainer, classPrefix, data);\n const { itemSkeleton } = createItemSkeleton(this, legendItem);\n\n renderStepItem(this, itemSkeleton);\n legendContainer.selectAll('div').style('float', LEFT);\n firebolt.mapActionsAndBehaviour();\n firebolt.createSelectionSet(this.data().map(d => d.id));\n return legendContainer;\n }\n\n /**\n *\n *\n * @param {*} data\n *\n * @memberof StepLegend\n */\n getCriteriaFromData (data) {\n const fieldName = this.fieldName();\n return {\n [fieldName]: data.range\n };\n }\n}\n","import { GradientLegend, DiscreteLegend, StepLegend } from '@chartshq/muze-legend';\n\n/**\n * Contants to be used as attr\n */\nexport const ROWS = 'rows';\nexport const COLUMNS = 'columns';\nexport const DATA = 'data';\nexport const COLOR = 'color';\nexport const SHAPE = 'shape';\nexport const SIZE = 'size';\nexport const DETAIL = 'detail';\nexport const LAYERS = 'layers';\nexport const TRANSFORM = 'transform';\nexport const INITIALIZED = 'isInitialized';\nexport const SOURCE = 'source';\nexport const WIDTH = 'width';\nexport const HEIGHT = 'height';\nexport const PADDING = 'padding';\nexport const BORDER = 'border';\nexport const MARGIN = 'margin';\nexport const CONFIG = 'config';\nexport const MOUNT = 'mount';\nexport const CANVAS_UPDATED = 'canvasUpdated';\nexport const CLASSPREFIX = 'classPrefix';\nexport const POLICIES = '_policies';\nexport const LEGEND = 'legend';\nexport const TITLE = 'title';\nexport const SUB_TITLE = 'subtitle';\nexport const RESOLVE = 'resolve';\nexport const DISCRETE = 'discrete';\nexport const STEP_COLOR = 'step-color';\nexport const GRADIENT = 'gradient';\nexport const LINEAR = 'linear';\nexport const ORDINAL = 'ordinal';\nexport const MUZE_PREFIX = 'muze';\n\nexport const TITLE_TEMPLATE_NOT_ALLOWED_TAGS = [\n 'script',\n 'style'\n];\n\nexport const LEGEND_TYPE_MAP = {\n [`${ORDINAL}-${true}-${COLOR}`]: DiscreteLegend,\n [`${ORDINAL}-${true}-${SIZE}`]: DiscreteLegend,\n [`${ORDINAL}-${true}-${SHAPE}`]: DiscreteLegend,\n [`${ORDINAL}-${false}-${COLOR}`]: DiscreteLegend,\n [`${ORDINAL}-${false}-${SHAPE}`]: DiscreteLegend,\n [`${ORDINAL}-${false}-${SIZE}`]: DiscreteLegend,\n [`${LINEAR}-${false}-${SIZE}`]: DiscreteLegend,\n [`${LINEAR}-${true}-${SIZE}`]: DiscreteLegend,\n [`${LINEAR}-${false}-${SHAPE}`]: DiscreteLegend,\n [`${LINEAR}-${true}-${COLOR}`]: StepLegend,\n [`${LINEAR}-${false}-${COLOR}`]: GradientLegend\n};\n\nexport const LEFT = 'left';\nexport const RIGHT = 'right';\nexport const BOTTOM = 'bottom';\nexport const TOP = 'top';\nexport const GROUP = 'group';\nexport const LAYOUT = 'layout';\nexport const RETINAL = 'retinal';\nexport const DIMENSION = 'dimension';\nexport const MEASURE = 'measure';\nexport const VERTICAL = 'vertical';\nexport const HORIZONTAL = 'horizontal';\nexport const HORIZONTAL_CENTER = 'h-center';\nexport const VERTICAL_CENTER = 'v-center';\nexport const HIDDEN = 'hidden';\nexport const OVERFLOW = 'overflow';\nexport const OVERFLOW_X = 'overflow-x';\nexport const OVERFLOW_Y = 'overflow-y';\nexport const AUTO = 'auto';\nexport const VISIBLE = 'visible';\nexport const VERTICAL_SCROLL_BAR = 'verticalScrollBar';\nexport const HORIZONTAL_SCROLL_BAR = 'horizontalScrollBar';\nexport const GRID = 'grid';\n","import { ComposedVars, SimpleVariable } from '@chartshq/visual-group';\nimport { TITLE_TEMPLATE_NOT_ALLOWED_TAGS } from './constants';\n\n/**\n * This method creates a new composed variable instance from multiple variables. This is required when we have multiple\n * variables on a single axis and the union of domain of all the variables needs to be set on the axis.\n *\n * To create a new composed variable from multiple fields,\n * ```\n * const sharedVar = share('open', 'high', 'low', 'close');\n * canvas.rows([sharedVar])\n * .columns(['date']);\n * ```\n *\n * @module Operators\n * @public\n * @function share\n * @param {Array} vars Variable names.\n *\n * @return {ComposedVars} Instance of composed variable\n */\nexport const share = (...vars) => new ComposedVars(...vars.map(variable => new SimpleVariable(variable)));\n\n/**\n *\n *\n * @param {*} node\n *\n */\nfunction treeShakeNode (node) {\n if (node.nodeType !== Node.ELEMENT_NODE) { return; }\n\n if (TITLE_TEMPLATE_NOT_ALLOWED_TAGS.indexOf(node.tagName.toLowerCase()) !== -1) {\n node.parentNode.removeChild(node);\n } else {\n for (const childNode of node.childNodes) {\n treeShakeNode(childNode);\n }\n }\n}\n\n/**\n * A string template tagged function which sanitizes input html formatted string according to the allowed html tags.\n * This is used to render html in canvas components like title and tooltip.\n *\n * To render html in canvas components,\n * ```\n * canvas.title(html`TITLE`);\n * ```\n *\n * @public\n * @module Operators\n * @function html\n * @param {Array.} strings - The string parts of the template.\n * @param {Array} exps - The list of evaluated expression values.\n *\n * @return {Function} Returns a function which returns the sanitized html string.\n */\nexport function html (strings, ...exps) {\n let htmlCode = '';\n const expLn = exps.length;\n let i = 0;\n\n for (; i < expLn; ++i) {\n htmlCode += strings[i] + exps[i];\n }\n htmlCode += strings[i];\n\n const frag = document.createDocumentFragment();\n const wrapper = document.createElement('div');\n\n frag.appendChild(wrapper);\n wrapper.innerHTML = htmlCode;\n\n treeShakeNode(wrapper);\n const { innerHTML } = wrapper;\n\n return () => innerHTML;\n}\n","import { mergeRecursive, CommonProps } from 'muze-utils';\n\nconst defaultPolicy = (registrableComponents) => {\n const aliases = registrableComponents.map(comp => comp.alias());\n return {\n behaviours: {\n '*': (propagationPayload) => {\n const propagationCanvas = propagationPayload.sourceCanvas;\n return propagationCanvas ? aliases.indexOf(propagationCanvas) !== -1 : true;\n }\n }\n };\n};\n\nconst listenerFn = (canvas, fn) => () => {\n const valueMatrix = canvas.composition().visualGroup.matrixInstance().value;\n valueMatrix.each(cell => fn(cell.valueOf().firebolt()));\n};\n\nconst canvasIterator = (canvases, iteratorFn, cFn) => {\n canvases.forEach((canvas) => {\n const matrix = canvas.composition().visualGroup.matrixInstance().value;\n matrix.each(cell => iteratorFn(cell.valueOf().firebolt()));\n cFn && cFn(canvas);\n // Also register actions on canvas update\n const throwback = canvas._throwback;\n\n throwback.registerImmediateListener([CommonProps.MATRIX_CREATED],\n listenerFn(canvas, iteratorFn));\n });\n};\n\n/**\n * This class is initiated only once in lifecycle and is reponsible for regisration of physical and behavioural\n * actions and side effects and the mapping between them.\n *\n * To get the instance of action model\n * ```\n * const ActionModel = muze.ActionModel;\n * ```\n *\n * @public\n * @module ActionModel\n */\nclass ActionModel {\n constructor () {\n this._registrableComponents = [];\n }\n\n /**\n * Takes an array of canvases on which the physical and behavioural actions will get registered.\n *\n * @public\n * @param {Canvas} components Array of canvases\n *\n * @return {ActionModel} Instance of action model.\n */\n for (...components) {\n this._registrableComponents = components;\n return this;\n }\n\n /**\n * Registers physical actions on the canvases. It takes an object with key as the name of action and value having\n * the definition of the action.\n *\n * To register a {@link PhysicalAction},\n * ```\n * const ActionModel = muze.ActionModel;\n * ActionModel\n * // Physical actions will be registered on these canvases.\n * .for(canvas)\n * .registerPhysicalActions({\n * // Key is the name of physical action.\n * ctrlClick: (firebolt) => (targetEl, behaviours) => {\n * targetEl.on('click', function (data) {\n * const event = utils.getEvent();\n * const pos = utils.getClientPoint(event, this);\n * // Get the data point nearest to the mouse position.\n * const nearestPoint = firebolt.context.getNearestPoint(pos, {\n * data\n * });\n * // Prepare the payload\n * const payload = {\n * criteria: nearestPoint.id\n * };\n * behaviours.forEach((behaviour) => firebolt.dispatchBehaviour(behaviour, payload));\n * });\n * }\n * });\n * ```\n * @public\n *\n * @param {Object} action Names of physical actions and their definitions.\n *\n * @return {ActionModel} Instance of the action model.\n */\n registerPhysicalActions (action) {\n canvasIterator(this._registrableComponents, (firebolt) => {\n firebolt.registerPhysicalActions(action);\n }, (canvas) => {\n canvas.firebolt().registerPhysicalActions(action);\n });\n\n return this;\n }\n\n /**\n * Registers behavioural actions on the canvases. It takes definitions of the behavioural actions and registers\n * them on the canvases. Every behavioural action must inherit the {@link GenericBehaviour} class.\n *\n * To register a behavioural action\n * ```\n * // Define a new behavioural action\n * class SingleSelectBehaviour extends GenericBehaviour {\n * static formalName () {\n * return 'singleSelect';\n * }\n *\n * setSelectionSet (addSet, selectionSet) {\n * if (addSet === null) {\n * selectionSet.reset();\n * } else if (addSet.length) {\n * const existingAddSet = selectionSet.getExistingEntrySet(addSet);\n * if (existingAddSet.length){\n * selectionSet.reset();\n * } else {\n * selectionSet.add(addSet);\n * }\n * } else {\n * selectionSet.reset();\n * }\n * }\n * }\n * muze.ActionModel.registerBehaviouralActions(SingleSelectBehaviour);\n * ```\n *\n * @public\n *\n * @param {GenericBehaviour} actions Definition of behavioural actions.\n *\n * @return {ActionModel} Instance of action model.\n */\n registerBehaviouralActions (...actions) {\n canvasIterator(this._registrableComponents, (firebolt) => {\n firebolt.registerBehaviouralActions(actions);\n }, (canvas) => {\n canvas.firebolt().registerBehaviouralActions(actions);\n });\n\n return this;\n }\n\n /**\n * Registers the mapping of physical and behavioural actions. This mapping is used to establish which behavioural\n * actions should be dispatched on any triggering of physical actions.\n *\n * To map physical actions with behavioural actions,\n * ```\n * muze.ActionModel.registerPhysicalBehaviouralMap({\n * ctrlClick: {\n * behaviours: ['select'] // This array must be the formal names of the behavioural actions.\n * }\n * });\n * ```\n *\n * @public\n * @param {Object} map Contains the physical and behavioural action map.\n * ```\n * {\n * // Name of the physical action\n * click: {\n * // Target element selector. This is an optional field. If not passed, then by default takes the\n * // container element of visual unit.\n * target: '.muze-layers-area path',\n * // Behaviours which should be dispatched on triggering of the mapped physical action.\n * behaviours: ['select']\n * }\n * }\n * ```\n *\n * @return {ActionModel} Instance of action model.\n */\n registerPhysicalBehaviouralMap (map) {\n canvasIterator(this._registrableComponents, (firebolt) => {\n firebolt.registerPhysicalBehaviouralMap(map);\n }, (canvas) => {\n canvas.firebolt().registerPhysicalBehaviouralMap(map);\n });\n return this;\n }\n\n /**\n * Registers what behaviour to propagate on dispatch of a certain behavioural action. By default, when any\n * behavioural action is dispatched, then the same behavioural action gets propagated to all the other canvases.\n * This can be changed using this api.\n *\n * To register what behaviour should be propagated on dispatch of any behavioural action,\n * ```\n * ActionModel.for(canvas1, canvas2).registerPropagationBehaviourMap({\n * select: 'filter',\n * brush: 'filter'\n * });\n * ```\n *\n * @public\n * @param {Object} map Propagation behaviour map.\n *\n * @return {ActionModel} Instance of action model.\n */\n registerPropagationBehaviourMap (map) {\n canvasIterator(this._registrableComponents, (firebolt) => {\n firebolt.registerPropagationBehaviourMap(map);\n }, (canvas) => {\n canvas.firebolt().registerPropagationBehaviourMap(map);\n });\n\n return this;\n }\n\n /**\n * Registers the mapping of side effects and behavioural actions. It takes an object which contains key as the\n * name of behavioural action and the side effects which will be linked to it.\n *\n * To map side effects to select behaviour,\n * ```\n * muze.ActionModel.mapSideEffects({\n * select: ['infoBox'] // This array must be the formal names of the side effects\n * });\n * ```\n *\n * To map side effects to select behaviour, but disable all the default side effects attached with this behaviour,\n * ```\n * muze.ActionModel.mapSideEffects({\n * select: {\n * effects: ['infoBox'],\n * preventDefaultActions: true\n * }\n * });\n * @public\n * @param {Object} map Mapping of behavioural actions and side effects.\n * ```\n * {\n * select: ['infoBox']\n * }\n * ```\n * @return {ActionModel} Instance of action model.\n */\n mapSideEffects (map) {\n canvasIterator(this._registrableComponents, (firebolt) => {\n firebolt.mapSideEffects(map);\n }, (canvas) => {\n canvas.firebolt().mapSideEffects(map);\n });\n return this;\n }\n\n /**\n * Registers the side effects on the registered canvases. It takes definitions of side effects and registers them\n * on the canvases. Every side effect must inherit the base class {@link GenericSideEffect} or\n * {@link SpawnableSideEffect} or {@link SurrogateSideEffect} class.\n *\n * ```\n * // Define a custom side effect\n * class InfoBox extends SpawnableSideEffect {\n * static formalName () {\n * return 'infoBox';\n * }\n *\n * apply (selectionSet) {\n * }\n * }\n * muze.ActionModel.registerSideEffects(InfoBox);\n * ```\n * @public\n * @param {GenericSideEffect} sideEffects Definition of side effects.\n *\n * @return {ActionModel} Instance of action model.\n */\n registerSideEffects (...sideEffects) {\n canvasIterator(this._registrableComponents, (firebolt) => {\n firebolt.registerSideEffects(sideEffects);\n }, (canvas) => {\n canvas.firebolt().registerSideEffects(sideEffects);\n });\n return this;\n }\n\n /**\n * Breaks the link between behavioural actions and physical actions. It takes an array of behavioural action\n * and it's physical action.\n *\n * To dissociate behavioural actions from physical actions\n * ```\n * muze.ActionModel.dissociateBehaviour(['select', 'click'], ['highlight', 'hover']);\n * ```\n * @public\n * @param {Array} maps Array of behavioural action and physical action.\n *\n * @return {ActionModel} Instance of action model.\n */\n dissociateBehaviour (...maps) {\n canvasIterator(this._registrableComponents, (firebolt) => {\n maps.forEach(val => firebolt.dissociateBehaviour(val[0], val[1]));\n }, (canvas) => {\n maps.forEach(val => canvas.firebolt().dissociateBehaviour(val[0], val[1]));\n });\n return this;\n }\n\n /**\n * Breaks the link between side effects and behavioural actions. It takes an array of formal names of the side\n * effects and it's linked behavioural action.\n *\n * To dissociate side effects from behavioural actions\n * ```\n * muze.ActionModel.dissociateSideEffect(['crossline', 'highlight'], ['selectionBox', 'brush']);\n * ```\n * @public\n * @param {Array} maps Array of side effects and behavioural actions.\n *\n * @return {ActionModel} Instance of action model.\n */\n dissociateSideEffect (...maps) {\n canvasIterator(this._registrableComponents, (firebolt) => {\n maps.forEach(val => firebolt.dissociateSideEffect(val[0], val[1]));\n }, (canvas) => {\n maps.forEach(val => canvas.firebolt().dissociateSideEffect(val[0], val[1]));\n });\n return this;\n }\n\n /**\n * By default cross interactivity is disabled between canvases. This enables cross interaction between the canvases\n * so that any action happening in one canvas gets dispatched on other canvases as well. An optional policy can also\n * be passed in this method. The policy can be used to control on which canvases the behavioural actions and\n * side effects gets dispatched.\n *\n * To just enable cross interactivity between two canvases,\n * ```\n * ActionModel.for(canvas1, canvas2)\n * .enableCrossInteractivity();\n * ```\n *\n * To enable cross interactivity but enable any behavioural action only when it is triggered from canvas1.\n * ```\n * ActionModel.for(canvas1, canvas2)\n * .enableCrossInteractivity({\n * behaviours: {\n * // Here * stands for any behavioural action name. We can also give any name of behavioural action\n * // in place of this.\n * '*': (propPayload, context) => {\n * return propPayload.sourceCanvas === canvas1.alias();\n * }\n * }\n * });\n * ```\n *\n * To enable cross interactivity but enable tooltip effect if the action is propagated from canvas1,\n * ```\n * ActionModel.for(canvas1, canvas2)\n * .enableCrossInteractivity({\n * sideEffects: {\n * tooltip: (propPayload, context) => {\n * return propPayload.sourceCanvas === canvas1.alias();\n * }\n * }\n * });\n * ```\n * @public\n * @param {Object} policy Policy definition.\n *\n * @return {ActionModel} Instance of action model.\n */\n enableCrossInteractivity (policy = {}) {\n const registrableComponents = this._registrableComponents;\n const mergedPolicy = mergeRecursive(mergeRecursive({}, defaultPolicy(registrableComponents)), policy);\n\n registrableComponents.forEach((canvas) => {\n canvas.firebolt().crossInteractionPolicy(mergedPolicy);\n });\n\n return this;\n }\n}\n\nexport const actionModel = (() => new ActionModel())();\n","import { MUZE_PREFIX } from '../constants';\n\nexport const TITLE_CONFIG = {\n position: 'top',\n align: 'left',\n padding: 4,\n className: `${MUZE_PREFIX}-title-container`\n};\n\nexport const SUB_TITLE_CONFIG = {\n position: 'top',\n align: 'left',\n padding: 16,\n maxLines: 2,\n className: `${MUZE_PREFIX}-subtitle-container`\n};\n\nexport const GRID = 'grid';\n\nexport const CANVAS = 'canvas';\n\nexport const LAYOUT_ALIGN = {\n TOP: 'top',\n LEFT: 'left',\n RIGHT: 'right',\n BOTTOM: 'bottom'\n};\n","import { mergeRecursive, DataModel } from 'muze-utils';\nimport {\n ROWS,\n COLUMNS,\n COLOR,\n SHAPE,\n SIZE,\n DETAIL,\n LAYERS,\n TRANSFORM,\n TITLE,\n SUB_TITLE\n} from '../constants';\nimport { TITLE_CONFIG, SUB_TITLE_CONFIG } from './defaults';\n/**\n * This is the local options semantics based on which setters getters are created and reactivity is initiated.\n * This local object is only valid for Canvas.\n * Canvas merges global and local object both to the model\n *\n * Format\n * PROPERTRY_NAME: {\n * value: // default value of the property,\n * meta: {\n * typeCheck: // The setter value will be checked using this. If the value is function then the setter value\n * // is passed as args.\n * typeExpected: // The output of typecheck action will be tested against this. Truthy value will set the\n * // value to the setter\n * sanitizaiton: // Need for sanitization before type is checked\n * }\n * }\n *\n * @module LocalOptions\n */\n\nexport const localOptions = {\n [ROWS]: {\n value: null,\n meta: {\n typeCheck: 'constructor',\n typeExpected: 'Array'\n }\n },\n [COLUMNS]: {\n value: null,\n meta: {\n typeCheck: 'constructor',\n typeExpected: 'Array'\n }\n },\n data: {\n value: null,\n meta: {\n typeCheck: d => d instanceof DataModel,\n sanitization: (dm, prevDm) => {\n prevDm && prevDm.dispose();\n let sanitizedDm = dm;\n if (dm instanceof DataModel) {\n sanitizedDm = dm.project(dm.getSchema().map(d => d.name));\n }\n return sanitizedDm;\n }\n }\n },\n [COLOR]: {\n value: null,\n meta: {\n typeCheck: 'constructor',\n typeExpected: 'Object',\n sanitization: (config) => {\n if (typeof config === 'string' || !config) {\n return {\n field: config\n };\n }\n return config;\n }\n }\n },\n [SHAPE]: {\n value: null,\n meta: {\n typeCheck: 'constructor',\n typeExpected: 'Object',\n sanitization: (config) => {\n if (typeof config === 'string' || !config) {\n return {\n field: config\n };\n }\n return config;\n }\n }\n },\n [SIZE]: {\n value: null,\n meta: {\n typeCheck: 'constructor',\n typeExpected: 'Object',\n sanitization: (config) => {\n if (typeof config === 'string' || !config) {\n return {\n field: config\n };\n }\n return config;\n }\n }\n },\n [DETAIL]: {\n value: [],\n meta: {\n typeCheck: 'constructor',\n typeExpected: 'Array'\n }\n },\n\n [LAYERS]: {\n value: [],\n meta: {\n typeCheck: 'constructor',\n typeExpected: 'Array'\n }\n },\n [TRANSFORM]: {\n value: null,\n meta: {\n typeCheck: 'constructor',\n typeExpected: 'Object'\n }\n }\n};\n\nexport const canvasOptions = {\n [TITLE]: {\n value: [null, null],\n meta: {\n typeCheck: ['constructor', 'constructor'],\n typeExpected: ['Function', 'Object'],\n spreadParams: true,\n sanitization: [(title) => {\n if (typeof title === 'string' || !title) {\n const t = () => title;\n return t;\n }\n return title;\n }, (titleConfig) => {\n const defConfig = mergeRecursive({}, TITLE_CONFIG);\n return mergeRecursive(defConfig, titleConfig);\n }]\n }\n },\n [SUB_TITLE]: {\n value: [null, null],\n meta: {\n typeCheck: ['constructor', 'constructor'],\n typeExpected: ['Function', 'Object'],\n spreadParams: true,\n sanitization: [(subtitle) => {\n if (typeof subtitle === 'string' || !subtitle) {\n const sub = () => subtitle;\n return sub;\n }\n return subtitle;\n }, (subtitleConfig) => {\n const defConfig = mergeRecursive({}, SUB_TITLE_CONFIG);\n return mergeRecursive(defConfig, subtitleConfig);\n }]\n }\n }\n};\n","export default class LayoutComponent {\n constructor (name, dimensions, seed) {\n this._seed = seed;\n this._boundBox = {\n height: dimensions.height,\n width: dimensions.width,\n top: null,\n left: null\n };\n this._renderAt = null;\n this._alignWith = null;\n this._alignment = null;\n this._target = null;\n this._position = null;\n this._componentName = name;\n this._className = null;\n }\n\n getLogicalSpace () {\n throw new Error('getLogicalSpace is not defined');\n }\n\n setSpatialConfig () {\n throw new Error('setSpatialSpace is not defined');\n }\n\n name (param) {\n if (param) {\n this._componentName = param;\n }\n return this._componentName;\n }\n\n target (param) {\n if (param) {\n this._target = param;\n }\n return this._target;\n }\n\n position (param) {\n if (param) {\n this._position = param;\n }\n return this._position;\n }\n\n alignment (param) {\n if (param) {\n this._alignment = param;\n }\n return this._alignment;\n }\n\n alignWith (param) {\n if (param) {\n this._alignWith = param;\n }\n return this._alignWith;\n }\n\n renderAt (param) {\n if (param) {\n this._renderAt = param;\n }\n return this._renderAt;\n }\n\n boundBox (param) {\n if (param) {\n Object.assign(this._boundBox, param);\n }\n return this._boundBox;\n }\n\n className (param) {\n if (param) {\n this._className = param;\n }\n return this._className;\n }\n\n draw () {\n throw new Error('draw is not defined');\n }\n }\n\n","import LayoutComponent from './layoutComponent';\n\nclass DummyComponent extends LayoutComponent {\n getLogicalSpace () {\n return {\n width: this.boundBox().width,\n height: this.boundBox().height\n };\n }\n\n setSpatialConfig (conf) {\n this.boundBox({ top: conf.y, left: conf.x });\n this.newDimensions = {\n width: conf.width,\n height: conf.height\n };\n this.renderAt(conf.renderAt);\n return this;\n }\n\n draw () {\n if (!this.component) {\n throw new Error(`Component not set for ${this.componentName}`);\n }\n this.component.mount(document.getElementById(this.renderAt)); // Change the draw method to component draw\n return this;\n }\n}\n\nexport default DummyComponent;\n","export const DEFAULT_CONFIG = {\n classPrefix: 'muze',\n interaction: {\n sideEffect: 'individual'\n },\n pagination: 'scroll',\n scrollBar: {\n thickness: 10,\n speed: 2,\n vertical: {\n align: 'right'\n },\n horizontal: {\n align: 'bottom'\n }\n },\n legend: {\n position: 'right',\n color: {\n show: true,\n padding: 1,\n margin: 3,\n border: 1,\n height: 20,\n width: 20\n },\n shape: {\n show: true,\n padding: 1,\n margin: 3,\n border: 1,\n height: 20,\n width: 20\n },\n size: {\n show: true,\n padding: 1,\n margin: 3,\n border: 1,\n height: 20,\n width: 20\n }\n },\n sort: {\n disabled: false\n },\n showHeaders: false,\n minWidth: 100,\n minHeight: 100,\n facet: {\n rows: {\n minCharacters: 3\n },\n columns: {\n maxLines: 2,\n verticalAlign: 'middle',\n minCharacters: 1\n }\n },\n border: {\n style: 'solid',\n color: '#d6d6d6',\n width: 2,\n collapse: true,\n spacing: 0\n },\n autoGroupBy: {\n disabled: false\n },\n invalidValues: {}\n};\n","import { DEFAULT_CONFIG } from '../../../../muze/src/defaults';\n\nconst DEFAULT_WIDTH = 600;\nconst DEFAULT_HEIGHT = 400;\nconst DEFAULT_CLASS_NAME = `${DEFAULT_CONFIG.classPrefix}-layout-container-component`;\nconst NODE_PREFIX = `${DEFAULT_CONFIG.classPrefix}-layout-container`;\n\nexport {\n DEFAULT_WIDTH,\n DEFAULT_HEIGHT,\n DEFAULT_CLASS_NAME,\n NODE_PREFIX\n};\n","export default class DefinitionModel {\n constructor (config) {\n this._host = config.host || null;\n this._cut = config.cut || null;\n this._ratioWeight = config.ratioWeight === 0 ? 0 : config.ratioWeight || 1;\n this._preferred = config.preferred || false;\n this._lanes = config.lanes || [];\n this._remainingHeight = 0;\n this._remainingWidth = 0;\n }\n\n host (host) {\n if (host) {\n this._host = host;\n }\n return this._host;\n }\n\n preferred (preferred) {\n if (preferred) {\n this._preferred = preferred;\n }\n return this._preferred;\n }\n\n cut (cut) {\n if (cut) {\n this._cut = cut;\n }\n return this._cut;\n }\n\n ratioWeight (ratioWeight) {\n if (ratioWeight) {\n this._ratioWeight = ratioWeight;\n }\n return this._ratioWeight;\n }\n\n lanes (lanes) {\n if (lanes) {\n this._lanes = lanes;\n }\n return this._lanes;\n }\n\n remainingHeight (remainingHeight) {\n if (remainingHeight) {\n this._remainingHeight = remainingHeight;\n }\n return this._remainingHeight;\n }\n\n remainingWidth (remainingWidth) {\n if (remainingWidth) {\n this._remainingWidth = remainingWidth;\n }\n return this._remainingWidth;\n }\n}\n","import { NODE_PREFIX } from '../../constants/defaults';\nimport DefinitionModel from '../definition-manager/definitionModel';\nimport DummyComponent from '../../layout-component/dummy-component';\n/**\n * Compares two strings in lowercase\n *\n * @export\n * @param {string} value the value to be compared\n * @param {string} compareTo whom the value would be compared\n * @return {boolean} true if values are equal\n */\nexport function isEqual (value, compareTo) {\n if (typeof value !== 'string' || typeof compareTo !== 'string') {\n throw new TypeError('value and compareTo must be string');\n }\n return value.toLowerCase() === compareTo.toLowerCase();\n}\n\nexport const getNodeId = (() => {\n let _uid = 0;\n return () => `${NODE_PREFIX}-${++_uid}`;\n})();\n\nexport function yExtraSpace (node) {\n let smallestHeight = 0;\n if (node.getCutType() === 'v') {\n smallestHeight = smallestExtraHeightHorizontally(node); // eslint-disable-line no-use-before-define\n } else if (node.getCutType() === 'h') {\n node.children().forEach((child) => {\n smallestHeight += yExtraSpace(child);\n });\n } else if (node.model().host() && node.model().host().getLogicalSpace) {\n const containerHeight = node.boundBox().height;\n const hostHeight = node.model().host().getLogicalSpace().height;\n\n smallestHeight = containerHeight - hostHeight;\n if (smallestHeight < 0) {\n smallestHeight = 0;\n }\n } else {\n smallestHeight = 0;\n }\n return smallestHeight;\n}\n\nexport function smallestExtraHeightHorizontally (node) {\n let smallestHeight = Number.MAX_SAFE_INTEGER;\n node.children().forEach((child) => {\n const h = yExtraSpace(child);\n if (h < smallestHeight) {\n smallestHeight = h;\n }\n });\n return smallestHeight;\n}\n\nexport function xExtraSpace (node) {\n let smallestWidth = 0;\n if (node.getCutType() === 'h') {\n smallestWidth = smallestExtraWidthVertically(node); // eslint-disable-line no-use-before-define\n } else if (node.getCutType() === 'v') {\n node.children().forEach((child) => {\n smallestWidth += xExtraSpace(child);\n });\n } else if (node.model().host() && node.model().host().getLogicalSpace) {\n const containerWidth = node.boundBox().width;\n const hostWidth = node.model().host().getLogicalSpace().width;\n smallestWidth = containerWidth - hostWidth;\n if (smallestWidth < 0) {\n smallestWidth = 0;\n }\n } else {\n smallestWidth = 0;\n }\n return smallestWidth;\n}\n\nexport function smallestExtraWidthVertically (node) {\n let smallestWidth = Number.MAX_SAFE_INTEGER;\n node.children().forEach((child) => {\n const w = xExtraSpace(child);\n if (w < smallestWidth) {\n smallestWidth = w;\n }\n });\n return smallestWidth;\n}\n\nexport function determineBoundBox (bb, i, arr, instance) {\n if (i) {\n // if not first sibling, take boundbox from previous sibling\n const lastSibling = arr[i - 1];\n const { top: _top, left: _left, height: _height, width: _width } = lastSibling.boundBox();\n return {\n width: bb.width,\n height: bb.height,\n\n top: instance.parentCut() === 'h'\n ? _top + _height : _top,\n\n left: instance.parentCut() === 'h'\n ? _left : _left + _width\n };\n }\n // if first sibling, take boundbox from parent\n const { top: _top, left: _left } = instance.parent().boundBox();\n return {\n width: bb.width,\n height: bb.height,\n top: _top,\n left: _left\n };\n}\n\n// prepares the targetComponent Map for target Mapping ie. where a component should lie\nexport function prepareTargetComponentMap (context) {\n context.targetComponentMap(new Map());\n context.componentMap().forEach((value) => {\n if (context.targetComponentMap().has(value.target())) {\n context.targetComponentMap().get(value.target()).push(value);\n } else {\n const temp = [];\n temp.push(value);\n context.targetComponentMap().set(value.target(), temp);\n }\n });\n}\n\nexport function getComponent (canvasComponent, componentName) {\n const comp = canvasComponent.find(component => component.name() === componentName);\n return (comp && comp !== -1) ? comp : null;\n}\nexport function createPlaceHolderComponent (height, width, position) {\n const comp = new DummyComponent(0, { height, width });\n comp.name('placeHolder');\n comp.position(position);\n return comp;\n}\n\nexport function placeComponent (definitionModel, component, isPreferred = false, isGridComponent = false) {\n let cut = '';\n let componentRatioWidth = 1;\n let leftOvercomponentRationWidth = 1;\n let leftHeight = 0;\n let leftWidth = 0;\n\n if (!component) {\n return { first: definitionModel, second: definitionModel };\n }\n\n const { height: componentHeight, width: componentWidth } = component.getLogicalSpace();\n const position = component.position();\n if (position === 'top' || position === 'bottom') {\n cut = 'h';\n componentRatioWidth = componentHeight / definitionModel.remainingHeight();\n leftHeight = definitionModel.remainingHeight() - componentHeight;\n leftWidth = definitionModel.remainingWidth();\n } else {\n cut = 'v';\n componentRatioWidth = componentWidth / definitionModel.remainingWidth();\n leftWidth = definitionModel.remainingWidth() - componentWidth;\n leftHeight = definitionModel.remainingHeight();\n }\n leftOvercomponentRationWidth = 1 - componentRatioWidth;\n\n// update parentModel\n definitionModel.cut(cut);\n const firstLaneConfig = {\n host: component.name(),\n cut: null,\n ratioWeight: componentRatioWidth,\n preferred: isGridComponent ? false : isPreferred,\n lanes: []\n };\n const firstLane = new DefinitionModel(firstLaneConfig);\n firstLane.remainingHeight(componentHeight);\n firstLane.remainingWidth(componentWidth);\n\n const secondLaneConfig = {\n host: null,\n cut: null,\n ratioWeight: leftOvercomponentRationWidth,\n preferred: isGridComponent ? false : !isPreferred,\n lanes: []\n };\n const secondLane = new DefinitionModel(secondLaneConfig);\n secondLane.remainingHeight(leftHeight);\n secondLane.remainingWidth(leftWidth);\n if (isPreferred) {\n definitionModel.lanes([firstLane]);\n } else if (position === 'top' || position === 'left') {\n definitionModel.lanes([firstLane, secondLane]);\n } else {\n definitionModel.lanes([secondLane, firstLane]);\n }\n return { first: firstLane, second: secondLane };\n}\n\nexport function placeGridComponent (definitionModel, gridComponents) {\n let tempDefModel = definitionModel;\n const rows = gridComponents.length;\n const column = rows ? gridComponents[0].length : 0;\n const height = gridComponents.reduce((acc, val) => (acc + val[0].getLogicalSpace().height), 0);\n\n for (let i = 0; i < column; i++) {\n const iscolumnPreffered = i === column - 1;\n const columnPlaceHolderComponent = createPlaceHolderComponent(height,\n gridComponents[0][i].getLogicalSpace().width, 'left');\n const { first, second } = placeComponent(tempDefModel, columnPlaceHolderComponent, iscolumnPreffered);\n tempDefModel = first;\n for (let j = 0; j < rows; j++) {\n const rowpreffred = j === (rows - 1);\n tempDefModel = placeComponent(tempDefModel, gridComponents[j][i], rowpreffred, true).second;\n }\n tempDefModel = second;\n }\n return tempDefModel;\n}\n\nexport function negotiateDimension (node) {\n let preferred;\n let cumultiveExtraSpaceAmt = 0;\n let alteredDim;\n let nonAlteredDim;\n\n const childrenLength = node.children().length;\n\n for (let index = 0; index < childrenLength; index++) {\n let fn;\n let extraSpaceAmt;\n const child = node.children()[index];\n\n if (child.parentCut() === 'h') {\n fn = yExtraSpace;\n alteredDim = 'height';\n nonAlteredDim = 'width';\n } else {\n fn = xExtraSpace;\n alteredDim = 'width';\n nonAlteredDim = 'height';\n }\n // if vertical then get extra height from other node and push it to the preferred node.\n // for horizontal cut the same thing is to be done with width\n if (child.isPreferred()) {\n // push extra space in sink. Execute it when all non preferred space are computed.\n preferred = child;\n\n continue; // eslint-disable-line no-continue\n }\n // reduce own height and save it in a var\n cumultiveExtraSpaceAmt += (extraSpaceAmt = fn(child));\n child.boundBox()[alteredDim] -= extraSpaceAmt;\n // update nonaltered dim from parent for any change which happened during negotiation\n child.boundBox()[nonAlteredDim] = child.parent().boundBox()[nonAlteredDim];\n\n negotiateDimension(child);\n }\n\n if (preferred) {\n preferred.boundBox()[alteredDim] += cumultiveExtraSpaceAmt;\n preferred.boundBox()[nonAlteredDim] = preferred.parent().boundBox()[nonAlteredDim];\n negotiateDimension(preferred);\n }\n}\n\nexport function computePosition (node) {\n node.children().forEach((child, i, children) => {\n const boundBox = determineBoundBox(child.boundBox(), i, children, child);\n child.boundBox(boundBox);\n computePosition(child);\n });\n}\n\nexport function allocateBoundingBox (node) {\n const totalWeight = node.children()\n .map(child => child.model().ratioWeight())\n .reduce((carry, val) => carry + val, 0);\n\n node.children().forEach((child, i, children) => {\n const lastSibling = children[i - 1];\n const ratio = child.model().ratioWeight() / totalWeight;\n\n if (child.parentCut() === 'h') {\n child.boundBox({\n top: i ? lastSibling.boundBox().top + lastSibling.boundBox().height : 0,\n left: child.parent().boundBox().left,\n height: child.parent().boundBox().height * ratio,\n width: child.parent().boundBox().width\n });\n } else {\n child.boundBox({\n top: child.parent().boundBox().top,\n left: i ? lastSibling.boundBox().left + lastSibling.boundBox().width : 0,\n height: child.parent().boundBox().height,\n width: child.parent().boundBox().width * ratio\n });\n }\n allocateBoundingBox(child);\n });\n}\n\n","import { getNodeId } from '../helper';\nimport { LayoutComponent } from '../../layout-component';\n\nclass Node {\n constructor (data) {\n this._model = data;\n this._parent = null;\n this._children = [];\n this._parentCut = null;\n this._boundBox = {\n top: null,\n left: null,\n height: null,\n width: null\n };\n\n this._id = this._model.host() instanceof LayoutComponent && this._model.host().renderAt() ?\n this._model.host().renderAt() :\n getNodeId();\n }\n\n addChildren (entries) {\n this._children.push(...entries);\n entries.forEach((e) => { e.parent(this); });\n }\n\n isRoot () {\n return this._parent === null;\n }\n\n isLeaf () {\n return !this._children.length;\n }\n\n getCutType () {\n return this._model.cut();\n }\n\n isPreferred () {\n return !!this._model.preferred();\n }\n\n children (children) {\n if (children) {\n this._children = children;\n }\n return this._children;\n }\n\n parent (parent) {\n if (parent) {\n this._parent = parent;\n }\n return this._parent;\n }\n\n parentCut (parentCut) {\n if (parentCut) {\n this._parentCut = parentCut;\n }\n return this._parentCut;\n }\n\n id (id) {\n if (id) {\n this._id = id;\n }\n return this._id;\n }\n\n model (model) {\n if (model) {\n this._model = model;\n }\n return this._model;\n }\n\n boundBox (bound) {\n if (bound) {\n this._boundBox = {\n top: bound.top,\n left: bound.left,\n height: bound.height,\n width: bound.width\n };\n }\n return this._boundBox;\n }\n /**\n * function to search a node and update it with the config provided.\n * @param {Object} nodeconfig\n */\n updateNode (nodeconfig) {\n if (this._id === nodeconfig._id) {\n this._model.cut(nodeconfig.cut);\n this._model.ratioWeight(nodeconfig.ratioWeight);\n } else {\n this._children.forEach((node) => {\n if (node._id === nodeconfig._id) {\n node.model.cut(nodeconfig.cut);\n node.model.ratioWeight(nodeconfig.ratioWeight);\n return;\n }\n this.searchNode(node, nodeconfig);\n });\n }\n }\n\n // Recursive function to search a node\n searchNode (node, nodeconfig) {\n node.children().forEach((childNode) => {\n if (childNode.id() === nodeconfig._id) {\n childNode.model().cut(nodeconfig.cut);\n childNode.model().ratioWeight(nodeconfig.ratioWeight);\n } else {\n this.searchNode(childNode, nodeconfig);\n }\n });\n }\n\n /**\n * function to delete a node from tree Structure.\n * @param {String} nodeId - node Id of the Node\n */\n delete (nodeId) {\n this._children.forEach((node) => {\n if (node.id() === nodeId) {\n const index = this._children.indexOf(node);\n this._model.lanes().splice(index, 1);\n }\n this.deleteSearchNode(node, nodeId);\n });\n }\n\n // Recursive function to search a node\n deleteSearchNode (node, nodeId) {\n node.children().forEach((childNode) => {\n if (childNode.id() === nodeId) {\n const index = node.children().indexOf(childNode);\n node.model().lanes().splice(index, 1);\n } else {\n this.deleteSearchNode(childNode, nodeId);\n }\n });\n }\n}\n\nexport default Node;\n","import Node from '../tree';\nimport {\n allocateBoundingBox,\n negotiateDimension,\n computePosition\n} from '../helper';\n\nexport default class LayoutModel {\n constructor (measurements, config) {\n this._measurements = measurements;\n this._config = config;\n this._root = this.createTree(this._config, null);\n this.setBoundBox();\n }\n\n createTree (config, parent) {\n const node = new Node(config);\n if (parent) {\n node.parentCut(parent.getCutType());\n parent.addChildren([node]);\n } else {\n this._root = node;\n }\n for (const lane of config.lanes()) {\n this.createTree(lane, node);\n }\n\n return this._root;\n }\n\n setBoundBox () {\n this._root.boundBox({\n top: 0,\n left: 0,\n width: this._measurements.width,\n height: this._measurements.height\n });\n allocateBoundingBox(this._root);\n }\n\n setHostPosition (node) {\n node.children().forEach((child) => {\n LayoutModel.setHostSpatialConfig(child);\n this.setHostPosition(child);\n });\n }\n\n static setHostSpatialConfig (node) {\n const bb = node.boundBox();\n const host = node.model().host();\n if (host && host.setSpatialConfig) {\n const conf = {\n x: bb.left,\n y: bb.top,\n width: bb.width,\n height: bb.height,\n renderAt: node.id()\n };\n host.setSpatialConfig(conf);\n }\n }\n\n negotiate () {\n negotiateDimension(this._root);\n computePosition(this._root);\n return this;\n }\n\n broadcast () {\n this.setHostPosition(this._root);\n return this;\n }\n\n tree () {\n return this._root;\n }\n}\n","/* eslint no-undef: \"off\" */\n/* eslint default-case: \"off\" */\nexport class Utils {\n static isDOMElement (element) {\n return element instanceof Element;\n }\n\n static getID (element) {\n return element.id;\n }\n\n static getElement (id) {\n return document.getElementById(id);\n }\n\n static findContainer (data) {\n return data.filter(coordinate => coordinate.parent == null)[0];\n }\n /**\n * static method to remove the div\n * @param {} divId - div ID to be removed.\n */\n static removeDiv (divId) {\n if (document.getElementById(divId) !== null) { document.getElementById(divId).remove(); }\n }\n}\n","import { DEFAULT_CLASS_NAME } from '../constants/defaults';\nimport { LayoutComponent } from '../layout-component';\n\nexport default class DataPoint {\n constructor (node) {\n this._node = node;\n this._className = node.model().host() instanceof LayoutComponent ?\n node.model().host().className() : DEFAULT_CLASS_NAME;\n }\n\n node () {\n return this._node;\n }\n\n hasHost () {\n return this._node.model().host() instanceof LayoutComponent;\n }\n\n className () {\n return this._className || DEFAULT_CLASS_NAME;\n }\n}\n","import { getnodePoints } from './helper';\n\nexport class DataParser {\n constructor (data) {\n this._data = data;\n }\n\n defaultDataPointLogic () {\n const nodepoints = [];\n getnodePoints(this._data, nodepoints);\n return nodepoints;\n }\n\n}\n","import DataPoint from './data-point';\n\nexport const getnodePoints = (node, nodepoints) => {\n const datapoint = new DataPoint(node);\n nodepoints.push(datapoint);\n node.children().forEach((child) => {\n getnodePoints(child, nodepoints);\n });\n};\n","import { DataParser } from './data-parser';\n\nexport class HTMLDataAdapter extends DataParser {\n getCoordinates () {\n return super.defaultDataPointLogic();\n }\n}\n","export class Renderer {\n\n initRenderer (node, tree) {\n node.__logicalTree = tree;\n }\n}\n","import { HTMLDataAdapter } from '../data-adapters/html-data';\nimport { Utils } from '../utils';\nimport { Renderer } from './renderer';\n\nexport class HTMLRenderer extends Renderer {\n constructor (data) {\n super();\n this._data = data;\n this._coordinates = new HTMLDataAdapter(this._data).getCoordinates();\n }\n\n createhtml (mount, className) {\n const mainDiv = mount;\n super.initRenderer(mainDiv, this._data); // Initialise node with layout id\n this.parentDiv = this.createAndCustomiseParent(className);\n this._coordinates.forEach((node) => {\n if (node.hasHost()) {\n const host = node.node();\n this.parentDiv.appendChild(this.createAndPositionDiv({ ...host.boundBox(),\n id: host.id(),\n className: node.className() }));\n }\n });\n mainDiv.appendChild(this.parentDiv);\n }\n\n createAndPositionDiv (config) {\n const { top, left, height, width, className, id } = config;\n const existingDiv = document.getElementById(id);\n const div = existingDiv || document.createElement('div');\n div.style.position = 'absolute';\n div.style.left = `${left}px`;\n div.style.top = `${top}px`;\n div.style.height = `${height}px`;\n div.style.width = `${width}px`;\n div.id = id;\n div.className = className;\n return div;\n }\n\n createAndCustomiseParent (className) {\n const container = Utils.findContainer(this._coordinates);\n const host = container.node();\n const parentDiv = this.createAndPositionDiv({ ...host.boundBox(),\n id: host.id(),\n className: container.className() });\n parentDiv.className = className;\n parentDiv.style.position = 'relative';\n return parentDiv;\n }\n\n coordinates () {\n return this._coordinates;\n }\n}\n","import { selectElement } from 'muze-utils';\nimport { HTMLRenderer } from '../renderers/html-renderer';\nimport { LayoutComponent } from '../layout-component';\n\nexport const getChildNode = (context, config) =>\n context.renderer().createAndPositionDiv(config);\n\nexport const findNode = (context, nodeID) =>\n context.renderer().coordinates().find(point => point.node().id() === nodeID);\n\nexport const renderHTML = (context) => {\n context.renderer(new HTMLRenderer(context.data()));\n context.renderer().createhtml(context.mount(), context.className());\n};\n\nexport const drawLayout = (context) => {\n switch (context.renderer()) {\n case 'html' :\n renderHTML(context);\n break;\n default:\n renderHTML(context);\n }\n};\n\nexport const drawComponent = (componentData) => {\n componentData.children().forEach((node) => {\n const host = node.model().host();\n if (host instanceof LayoutComponent) {\n host.draw();\n }\n drawComponent(node);\n });\n};\n\nexport const removeElement = (elemID) => {\n if (elemID) {\n selectElement(`#${elemID}`).remove();\n }\n};\n\nexport const resolveAligment = (context, componentData) => {\n componentData.children().forEach((component) => {\n const host = component.model().host();\n if (host instanceof LayoutComponent && host.alignWith()) {\n let newNodeConfig = {};\n const point = findNode(context, component.id()).node();\n const node = point.boundBox();\n const refNode = findNode(context, context.componentMap().get(host.alignWith()).renderAt())\n .node()\n .boundBox();\n switch (host.alignment()) {\n case 'left':\n newNodeConfig = {\n top: node.top,\n left: refNode.left,\n height: node.height,\n width: Math.abs(node.width - Math.abs(refNode.left - node.left))\n };\n break;\n\n case 'right':\n newNodeConfig = {\n top: node.top,\n left: node.left,\n height: node.height,\n width: Math.abs(node.width - Math.abs(node.left + node.width - (refNode.left + refNode.width)))\n };\n break;\n\n case 'top':\n newNodeConfig = {\n top: refNode.top,\n left: node.left,\n height: Math.abs(node.height - Math.abs(refNode.top - node.top)),\n width: node.width\n };\n break;\n\n case 'bottom':\n newNodeConfig = {\n top: node.top,\n left: node.left,\n height: Math.abs(node.top - refNode.top + refNode.height),\n width: node.width\n };\n break;\n\n case 'h-center':\n newNodeConfig = {\n top: node.top,\n left: refNode.left,\n height: node.height,\n width: refNode.width\n };\n break;\n\n case 'v-center':\n newNodeConfig = {\n top: refNode.top,\n left: node.left,\n height: refNode.top,\n width: node.width\n };\n break;\n default:\n break;\n }\n // check if model in parent component\n Object.assign(newNodeConfig, { id: point.id(), className: host.className() });\n context.renderer().createAndPositionDiv(newNodeConfig);\n context.componentMap().get(host.name()).setSpatialConfig({\n x: newNodeConfig.left,\n y: newNodeConfig.top,\n height: newNodeConfig.height,\n width: newNodeConfig.width\n\n });\n }\n resolveAligment(context, component);\n });\n};\n","import { Utils } from '../utils';\nimport { drawLayout, resolveAligment, drawComponent } from './helper';\n\nexport class DrawingManager {\n constructor (data, renderer, container) {\n this._data = data.tree;\n this._componentMap = data.componentMap;\n this._layoutClassName = data.layoutClassName;\n this._renderer = renderer;\n this._mount = Utils.isDOMElement(container) ? container : Utils.getElement(container);\n }\n\n draw () {\n drawLayout(this);\n resolveAligment(this, this._data);\n drawComponent(this._data);\n return this;\n }\n\n data (data) {\n if (data) {\n this._data = data;\n }\n return this._data;\n }\n\n componentMap (param) {\n if (param) {\n this._componentMap = param;\n }\n return this._componentMap;\n }\n\n className (param) {\n if (param) {\n this._layoutClassName = param;\n }\n return this._layoutClassName;\n }\n\n renderer (param) {\n if (param) {\n this._renderer = param;\n }\n return this._renderer;\n }\n\n mount (param) {\n if (param) {\n this._mount = param;\n }\n return this._mount;\n }\n}\n","import DefinitionModel from './definitionModel';\nimport { prepareTargetComponentMap, getComponent, placeComponent, placeGridComponent } from '../helper';\n\nexport default class DefinitionManager {\n constructor (componentMap, sequence, totalHeight, totalWidth) {\n this._componentMap = componentMap;\n this._prioritySequence = sequence;\n this._totalHeight = totalHeight;\n this._totalWidth = totalWidth;\n this._targetComponentMap = null;\n }\n\n // create the config model\n generateConfigModel () {\n prepareTargetComponentMap(this);\n const canvasComponent = this._targetComponentMap.get('canvas');\n const definitionModel = new DefinitionModel({});\n let tempDefModel = definitionModel;\n definitionModel.remainingHeight(this._totalHeight);\n definitionModel.remainingWidth(this._totalWidth);\n\n let componentRef = null;\n\n this._prioritySequence.forEach((name) => {\n componentRef = getComponent(canvasComponent, name);\n if (name !== 'grid') {\n tempDefModel = placeComponent(tempDefModel, componentRef).second;\n } else {\n tempDefModel = placeGridComponent(tempDefModel, componentRef.component);\n }\n });\n return definitionModel;\n }\n\n componentMap (param) {\n if (param) {\n this._componentMap = param;\n }\n return this._componentMap;\n }\n\n targetComponentMap (param) {\n if (param) {\n this._targetComponentMap = param;\n }\n return this._targetComponentMap;\n }\n}\n","import { sanitizeConfig } from './helper';\n\nexport class LayoutDef {\n constructor () {\n this._componentMap = new Map();\n this._layoutDefinition = null;\n }\n\n addComponent (component) {\n this._componentMap.set(component.name(), component);\n }\n\n layoutDefinition (def) {\n if (def) {\n this._layoutDefinition = def;\n }\n return this._layoutDefinition;\n }\n\n addMultipleComponent (componentArray) {\n componentArray.forEach((comp) => {\n this.addComponent(comp);\n });\n }\n\n sanitizedDefinition () {\n sanitizeConfig(this, this._layoutDefinition);\n return this.layoutDefinition();\n }\n\n componentMap () {\n return this._componentMap;\n }\n resetComponentMap () {\n this._componentMap.clear();\n }\n}\n","import DefinitionManager from '../layout-definition/definition-manager';\n\nexport function sanitizeConfig (context, hostObj) {\n const hostID = hostObj.host();\n if (hostObj.lanes() && hostObj.lanes().length) {\n hostObj.lanes().forEach(childHost => sanitizeConfig(context, childHost));\n }\n if (hostID != null && typeof (hostID) === 'string') {\n if (context.componentMap().get(hostID) !== undefined) {\n hostObj.host(context.componentMap().get(hostID));\n }\n }\n}\n\nexport function calLayOutDef (context) {\n const { height, width } = context.dimension();\n const defManager = new DefinitionManager(context.layoutDef().componentMap(),\n context.prioritySequence(),\n height,\n width);\n const genLayoutdef = defManager.generateConfigModel();\n return genLayoutdef;\n}\n","import {\n LayoutModel\n} from '../layout-definition';\n\nimport {\n DEFAULT_WIDTH,\n DEFAULT_HEIGHT\n} from '../constants/defaults';\n\nimport { DrawingManager } from '../drawing-manager';\nimport { removeElement } from '../drawing-manager/helper';\nimport { Utils } from '../utils';\nimport { LayoutDef } from './layout-def';\nimport { calLayOutDef } from './helper';\n\nexport default class LayoutManager {\n constructor (conf) {\n this._renderAt = conf.renderAt;\n this._layoutClassName = conf.className;\n this._dimension = {\n width: conf.width || DEFAULT_WIDTH,\n height: conf.height || DEFAULT_HEIGHT\n };\n\n this._skeletonType = conf.skeletonType || 'html';\n this._layoutDefinition = null;\n this._layoutDef = new LayoutDef();\n this._drawingManager = null;\n this._prioritySequence = [];\n this.tree = null;\n this._rootNodeID = null;\n }\n\n layoutDef (param) {\n if (param) {\n this._layoutDef = param;\n }\n return this._layoutDef;\n }\n\n prioritySequence (param) {\n if (param) {\n this._prioritySequence = param;\n }\n return this._prioritySequence;\n }\n\n dimension (param) {\n if (param) {\n Object.assign(this._dimension, param);\n }\n return this._dimension;\n }\n\n addComponent (component) {\n this._layoutDef.addComponent(component);\n }\n\n addMultipleComponent (componentArray) {\n this._layoutDef.addMultipleComponent(componentArray);\n }\n\n resetNode (node) {\n if (this.con) {\n this.con.resetNode(node);\n }\n }\n\n /**\n * function to update the node and rerender the layout.\n * @param {} config - node configuration to change.\n */\n updateNode (config) {\n this.tree.updateNode(config);\n this._layoutDefinition = this.tree.model;\n this.compute();\n }\n\n compute () {\n //----\n if (Utils.isDOMElement(this._renderAt)) {\n this._renderAt._layout = this;\n } else {\n document.getElementById(this._renderAt)._layout = this;\n }\n //-----\n this._layoutDefinition = calLayOutDef(this);\n this._layoutDef.layoutDefinition(this._layoutDefinition);\n this._layoutDefinition = this._layoutDef.sanitizedDefinition();\n this._layout = new LayoutModel({\n width: this._dimension.width,\n height: this._dimension.height\n },\n this._layoutDefinition);\n this.tree = this._layout.negotiate().tree();\n this._layout.broadcast();\n this._drawingManager = new DrawingManager({\n tree: this.tree,\n componentMap: this._layoutDef.componentMap(),\n layoutClassName: this._layoutClassName\n }, this._skeletonType, this._renderAt);\n\n if (this._rootNodeID) {\n this.tree.id(this._rootNodeID);\n } else {\n this._rootNodeID = this.tree.id();\n }\n // this will draw all the components by calling their draw method\n this._drawingManager.draw();\n }\n\n getRootNodeId () {\n return this._rootNodeID;\n }\n\n /**\n * This function takes the LayoutComponents and Register them in component store\n * @param {Array} layoutComponents\n */\n registerComponents (layoutComponents) {\n this._prioritySequence.length = 0;\n this._layoutDef.resetComponentMap();\n layoutComponents.forEach((container) => {\n if (container) {\n this._prioritySequence.push(container.name());\n this.addComponent(container);\n if (container.name() === 'grid') {\n container.component.forEach((componentArr) => {\n componentArr.forEach((compo) => {\n this.addComponent(compo);\n });\n });\n }\n }\n });\n return this;\n }\n\n getComponent (componentName) {\n return this._layoutDef.componentMap().get(componentName);\n }\n\n removeComponent (id) {\n return removeElement(id);\n }\n\n renderAt (mount) {\n if (mount) {\n this._renderAt = mount;\n }\n return this._renderAt;\n }\n}\n","import { isEqual, STATE_NAMESPACES, selectElement, getValueParser } from 'muze-utils';\nimport { VisualGroup } from '@chartshq/visual-group';\nimport { ROWS, COLUMNS, COLOR, SHAPE, SIZE, DETAIL, DATA, CONFIG }\n from '../constants';\nimport { canvasOptions } from './local-options';\nimport { LayoutManager } from '../../../layout/src/tree-layout';\n\n/**\n * Instantiate high level components. Canvas knows what all high level component it has.\n * @nice-to-have dynamic high level components.\n * - Is it even required ?\n * - Reactive to source (canvas) streaming ?\n * @param {*} context Canvas instance\n * @return {Object.} Arrays of Title, visualGroup, Legend\n */\nexport const initCanvas = (context) => {\n const reg = context._registry.components;\n\n return [new reg.VisualGroup(context._registry, Object.assign({\n throwback: context._throwback\n }, context.dependencies()))];\n};\n\nexport const fixScrollBarConfig = (config) => {\n config.scrollBar.thickness = Math.min(50, Math.max(10, config.scrollBar.thickness));\n return config;\n};\n\nexport const setLayoutInfForUnits = (context) => {\n const layoutManager = context._layoutManager;\n const boundBox = layoutManager.getComponent('grid').getBoundBox();\n const valueMatrix = context.composition().visualGroup.matrixInstance().value;\n const parentContainer = selectElement(`#${layoutManager.getRootNodeId()}`).node();\n valueMatrix.each((cell) => {\n cell.valueOf().parentContainerInf({\n el: parentContainer,\n dimensions: boundBox\n });\n });\n};\n\n/**\n *\n *\n * @memberof Canvas\n */\nexport const dispatchProps = (context) => {\n const lifeCycleManager = context.dependencies().lifeCycleManager;\n lifeCycleManager.notify({ client: context, action: 'beforeupdate' });\n const visualGroup = context.composition().visualGroup;\n\n const allOptions = context._allOptions;\n for (const key in allOptions) {\n const value = context[key]();\n if (value !== null) {\n visualGroup[key] && visualGroup[key](value);\n }\n }\n const { invalidValues } = context.config();\n\n visualGroup.valueParser(getValueParser(invalidValues));\n visualGroup.createMatrices();\n context._cachedProps = {};\n lifeCycleManager.notify({ client: context, action: 'initialized' });\n lifeCycleManager.notify({ client: context, action: 'updated' });\n};\n\nconst equalityChecker = (props, params) => {\n let checker = () => false;\n return !props.every((option, i) => {\n switch (option) {\n case ROWS:\n case COLUMNS:\n case DETAIL:\n checker = isEqual('Array');\n break;\n\n case SHAPE:\n case SIZE:\n case COLOR:\n case DATA:\n case CONFIG:\n checker = isEqual('Object');\n break;\n default:\n checker = () => true;\n break;\n }\n const oldVal = params[i][0];\n const newVal = params[i][1];\n\n return checker(oldVal, newVal);\n });\n};\n\nconst updateChecker = (props, params) => props.every((option, i) => {\n const val = params[i][1];\n switch (option) {\n case ROWS:\n case COLUMNS:\n return val !== null;\n\n case DATA:\n return val && !val.isEmpty();\n\n default:\n return true;\n\n }\n});\n\nexport const notifyAnimationEnd = (context) => {\n const centerMatrix = context.layout().viewInfo().viewMatricesInfo.matrices.center[1] || [];\n const promises = [];\n centerMatrix.forEach((cellArr) => {\n cellArr.forEach((cell) => {\n promises.push(cell.valueOf().done());\n });\n });\n const lifeCycleManager = context.lifeCycle();\n if (promises.length) {\n Promise.all(promises).then(() => {\n // Update life cycle\n lifeCycleManager.notify({ client: context, action: 'drawn' });\n const animDonePromises = [];\n\n centerMatrix.forEach((cellArr) => {\n cellArr.forEach((cell) => {\n cell.valueOf().layers().forEach((layer) => {\n animDonePromises.push(layer.animationDone());\n });\n });\n });\n\n [context.xAxes(), context.yAxes()].forEach((axisArr) => {\n axisArr = axisArr || [];\n axisArr.forEach((axes) => {\n axes.forEach((axisInst) => {\n animDonePromises.push(axisInst.animationDone());\n });\n });\n });\n\n Promise.all(animDonePromises).then(() => {\n lifeCycleManager.notify({ client: context, action: 'animationend' });\n });\n });\n } else {\n lifeCycleManager.notify({ client: context, action: 'animationend' });\n }\n};\n\nexport const setupChangeListener = (context) => {\n const store = context._store;\n\n const allOptions = Object.keys(context._allOptions);\n const props = [...allOptions, ...Object.keys(canvasOptions)];\n const nameSpaceProps = [...allOptions, ...Object.keys(canvasOptions)].map(prop =>\n `${STATE_NAMESPACES.CANVAS_LOCAL_NAMESPACE}.${prop}`);\n store.registerChangeListener(nameSpaceProps, (...params) => {\n let updateProps = equalityChecker(props, params);\n updateProps = updateChecker(props, params);\n\n // inform attached board to rerender\n if (updateProps && context.mount()) {\n dispatchProps(context);\n context.render();\n }\n notifyAnimationEnd(context);\n }, true);\n};\n\nexport const applyInteractionPolicy = (firebolt) => {\n const canvas = firebolt.context;\n const visualGroup = canvas.composition().visualGroup;\n if (visualGroup) {\n const valueMatrix = visualGroup.matrixInstance().value;\n const interactionPolicy = firebolt._interactionPolicy;\n interactionPolicy(valueMatrix, firebolt);\n const crossInteractionPolicy = firebolt._crossInteractionPolicy;\n const behaviours = crossInteractionPolicy.behaviours;\n const sideEffects = crossInteractionPolicy.sideEffects;\n valueMatrix.each((cell) => {\n const unitFireBolt = cell.valueOf().firebolt();\n for (const key in behaviours) {\n unitFireBolt.changeBehaviourStateOnPropagation(key, behaviours[key]);\n }\n for (const key in sideEffects) {\n unitFireBolt.changeSideEffectStateOnPropagation(key, sideEffects[key]);\n }\n });\n }\n};\n\n/**\n * Sets the rotation for all x axes if any axis has the rotation config set in the\n * entire view\n *\n * @param {Array} columns Column cells that contain the axes cells\n */\nexport const setLabelRotationForAxes = (context) => {\n let rotation = 0;\n\n const xAxes = context.xAxes() || [];\n\n (() => {\n for (let i = 0; i < xAxes.length; i++) {\n for (let j = 0; j < xAxes[i].length; j++) {\n const rotationVal = xAxes[i][j].renderConfig().labels.rotation;\n if (rotationVal && rotationVal !== 0) {\n rotation = rotationVal;\n return;\n }\n }\n }\n })();\n\n if (rotation) {\n xAxes.forEach((axes) => {\n axes.forEach((axis) => {\n axis.renderConfig({ labels: { rotation } });\n axis.smartTicks(axis.setTickConfig());\n });\n });\n }\n};\n\nexport const createGroupState = (context) => {\n const [globalState, localState] = VisualGroup.getState();\n const store = context._store;\n store.append('app.group', globalState);\n store.append('local.group', localState);\n};\n\nexport const removeChild = (mount) => {\n while (mount.firstChild) {\n mount.removeChild(mount.firstChild);\n }\n};\n\nexport const createLayoutManager = () => {\n const layoutManager = new LayoutManager({\n className: 'muze-group-container'\n });\n return layoutManager;\n};\n","/**\n * This is the global options semantics based on which setters getters are created and reactivity is initiated.\n * Format\n * PROPERTRY_NAME: {\n * value: // default value of the property,\n * meta: {\n * typeCheck: // The setter value will be checked using this. If the value is function then the setter value\n * // is passed as args.\n * typeExpected: // The output of typecheck action will be tested against this. Truthy value will set the\n * // value to the setter\n * sanitizaiton: // Need for sanitization before type is checked\n * }\n * }\n * @module GlobalOptions\n */\n\nimport { intSanitizer, mergeRecursive, DataModel } from 'muze-utils';\nimport { fixScrollBarConfig } from './canvas/helper';\nimport { DEFAULT_CONFIG } from './defaults';\n\nexport default {\n data: {\n value: null,\n meta: {\n typeCheck: d => d instanceof DataModel\n }\n },\n width: {\n value: 0,\n meta: {\n sanitization: intSanitizer,\n typeCheck: Number.isInteger\n }\n },\n height: {\n value: 0,\n meta: {\n sanitization: intSanitizer,\n typeCheck: Number.isInteger\n }\n },\n minUnitWidth: {\n value: 50,\n meta: {\n sanitization: intSanitizer,\n typeCheck: Number.isInteger\n }\n },\n minUnitHeight: {\n value: 50,\n meta: {\n sanitization: intSanitizer,\n typeCheck: Number.isInteger\n }\n },\n config: {\n value: null,\n meta: {\n typeCheck: 'constructor',\n typeExpected: 'Object',\n sanitization: (config, oldConfig) => {\n // Reset the configuration when null is passed\n const oldConf = mergeRecursive({}, config === null ? {} : oldConfig);\n const defConfig = mergeRecursive(oldConf, DEFAULT_CONFIG);\n let newConf = mergeRecursive(defConfig, config);\n newConf = fixScrollBarConfig(newConf);\n\n return newConf;\n }\n\n }\n }\n};\n","/**\n * This file exports constants that will be used to\n * create the state store of the table layout.\n */\n/**\n * The index of top, bottom and center in the matrix\n */\nexport const VIEW_INDEX = {\n top: 0,\n center: 1,\n bottom: 2\n};\n\nexport const ROW_MATRIX_INDEX = {\n 0: 'top',\n 1: 'center',\n 2: 'bottom'\n};\n\nexport const COLUMN_MATRIX_INDEX = {\n 0: 'left',\n 1: 'middle',\n 2: 'right'\n};\n\n/**\n * The width of the grid suppied by the user.\n */\nexport const GRID_WIDTH = 'width';\n\n/**\n * The height of the grid supplied by the user.\n */\nexport const GRID_HEIGHT = 'height';\n\n/**\n * The border for the grid\n */\nexport const BORDER = 'border';\n\n /**\n * The index of the first visible row in view matrix.\n */\nexport const ROW_POINTER = 'rowPointer';\n\n/**\n * The index of the first visible column in the view matrix.\n */\nexport const COLUMN_POINTER = 'columnPointer';\n\n/**\n * Flag to specify whether row sizes should be equal.\n */\nexport const ROW_SIZE_IS_EQUAL = 'isRowSizeEqual';\n\n/**\n * Flag to specify whether column sizes are equal.\n */\nexport const COLUMN_SIZE_IS_EQUAL = 'isColumnSizeEqual';\n\n/**\n * Field to store an array an of the widths of visible columns.\n * @computed\n */\nexport const COLUMN_WIDTHS = 'visibleColumnWidths';\n\n/**\n * Field to store an array of heights of visible rows.\n * @computed\n */\nexport const ROW_HEIGHTS = 'visibleRowHeights';\n\n/**\n * Field to store the width of the left matrix.\n * @computed\n */\nexport const LEFT_MATRIX_WIDTH = 'leftMatrixWidth';\n\n/**\n * Field to store the width of the right matrix.\n * @computed\n */\nexport const RIGHT_MATRIX_WIDTH = 'rightMatrixWidth';\n\n/**\n * Field to store the height of the top matrix.\n * @computed\n */\nexport const TOP_MATRIX_HEIGHT = 'topMatrixHeight';\n\n/**\n * Field to store the height of the bottom matrix.\n * @computed\n */\nexport const BOTTOM_MATRIX_HEIGHT = 'bottomMatrixHeight';\n\n/**\n * The dom element to render the layout inside.\n */\nexport const MOUNT_POINT = 'mount';\n\n/**\n * The id attribute of the left table element.\n */\nexport const LEFT_TABLE_ID = 'grid-left';\n\n/**\n * The id attribute of the right table element.\n */\nexport const RIGHT_TABLE_ID = 'grid-right';\n\n/**\n * The id attribute of the top table.\n */\nexport const TOP_TABLE_ID = 'grid-top';\n\n/**\n * The id attribute of the bottom table.\n */\nexport const BOTTOM_TABLE_ID = 'grid-bottom';\n\n/**\n * The id attribute of the center table.\n */\nexport const CENTER_TABLE_ID = 'grid-center';\n\n/**\n * The id attribute of the top div.\n */\nexport const TOP_DIV_ID = 'muze-div-top';\n\n/**\n * The id attribute of the bottom div.\n */\nexport const BOTTOM_DIV_ID = 'muze-div-bottom';\n\n/**\n * The id attribute of the center div.\n */\nexport const CENTER_DIV_ID = 'muze-div-center';\n\n/**\n * Field that indicates if the row configuration has changed\n */\nexport const HAVE_ROWS_CHANGED = 'haveRowsChanged';\n\n/**\n * Field that indicates if the column configuration has changed\n */\nexport const HAVE_COLUMNS_CHANGED = 'haveColumnsChanged';\n\n/**\n * Field that indicates if the values configuration for the center matrix has changed\n */\nexport const HAVE_VALUES_CHANGED = 'haveValuesChanged';\n\n/**\n * Field that indicates the width of row matrix\n */\nexport const ROW_MATRIX_WIDTH = 'rowMatrixWidth';\n\n/**\n * Field that indicates the height of row matrix\n */\nexport const COLUMN_MATRIX_HEIGHT = 'columnMatrixHeight';\n\n/**\n * Field that indicates the unit width of layout\n */\nexport const UNIT_WIDTH = 'unitWidth';\n\n/**\n * Field that indicates the unit height of layout\n */\nexport const UNIT_HEIGHT = 'unitHeight';\n\n/**\n * Field that indicates the style object\n */\nexport const STYLE = 'style';\n\n/**\n * Field that indicates the color configuration\n */\nexport const COLOR = 'color';\n\n/**\n * Field that indicates width\n */\nexport const WIDTH = 'width';\n\n/**\n * Field that indicates collpase property for border\n */\nexport const COLLAPSE = 'collapse';\n\n/**\n * Field that indicates spacing property for border\n */\nexport const SPACING = 'spacing';\n\n/**\n * Field that indicates spacing property for border\n */\nexport const DISTRIBUTION = 'distribution';\n\n/**\n * Field that indicates spacing property for border\n */\nexport const GUTTERSPACE = 'gutterSpace';\n\n/**\n * Field that indicates spacing property for border\n */\nexport const BREAK_PAGE = 'breakPage';\n\n/**\n * Field that indicates spacing property for border\n */\nexport const SHOW_ROW_BORDERS = 'showRowBorders';\n\n/**\n * Field that indicates spacing property for border\n */\nexport const SHOW_COL_BORDERS = 'showColBorders';\n\n/**\n * Field that indicates spacing property for border\n */\nexport const SHOW_VALUE_BORDERS = 'showValueBorders';\n\nexport const HEIGHT = 'height';\nexport const COLUMN = 'column';\nexport const ROW = 'row';\nexport const TOP = 'top';\nexport const LEFT = 'left';\nexport const RIGHT = 'right';\nexport const BOTTOM = 'bottom';\nexport const CENTER = 'center';\nexport const CLICK = 'click';\nexport const ROW_LEFT = 'rowLeft';\nexport const ROW_RIGHT = 'rowRight';\nexport const COLUMN_BOTTOM = 'colBottom';\nexport const COLUMN_TOP = 'colTop';\nexport const AUTO = 'auto';\nexport const ROW_SPAN = 'rowSpan';\nexport const COL_SPAN = 'colSpan';\nexport const ROW_ROOT = 'rowRoot';\nexport const COLUMN_ROOT = 'columnRoot';\nexport const PRIMARY = 'primary';\nexport const SECONDARY = 'secondary';\nexport const VERTICAL = 'vertical';\nexport const HORIZONTAL = 'horizontal';\n\nexport const BLANK_BORDERS = 'rgba(0,0,0,0)';\n\nexport const PAGINATION = 'pagination';\nexport const BUFFER = 'buffer';\nexport const HOLISTIC = 'holistic';\nexport const SCROLL = 'scroll';\nexport const MIDDLE = 'middle';\nexport const NO_BORDERS = null;\n\nexport const MAX_WIDTH_AVAIL_FOR_COL_MATRIX = 'maxWidthAvailableForColumnMatrix';\nexport const COLUMN_MATRIX = 'columnMatrix';\nexport const MAX_HEIGHT_AVAIL_FOR_ROW_MATRIX = 'maxHeightAvailableForRowMatrix';\nexport const ROW_MATRIX = 'rowMatrix';\n","import { sanitizeIP, mergeRecursive } from 'muze-utils';\nimport { TOP, CENTER, BOTTOM } from '../enums/constants';\n\n/*\n * This is the abstract implementation of the root layout. This takes care of common work which all the layouts\n * has to handle. The common work includes sanitizaion of inputs, update, rerender, dispose etc. This class can't be\n * used directly (as ofcourse this is an abstract implementaiton), the class which is implementing it has to implement\n * the necessary methods and gives its on visual.\n */\n\n/**\n * This class is used to create a generic layout. It can be extended to create layouts\n * of different types\n * @class GenericLayout\n */\nexport default class GenericLayout {\n\n /**\n * Creates an instance of TableLayout.\n * @param {HTMLElement} mountPoint DOM element/d3 selection where the layout is to be mounted\n * @param {Object} measurement The dimensions of the layout\n * @param {Object} config configuration to be given for the layout\n * @param {Object} dependencies external dependencies.\n *\n * @memberof GenericLayout\n *\n */\n constructor (mountPoint, measurement, config, dependencies) {\n this._config = {};\n this._measurement = {};\n this._matrices = [];\n // External dependencies to be included for the layout. This includes the ext global dependencies like\n // smartlabel which has one single implementation of throughout the page or per isntance\n this._dependencies = dependencies;\n\n this.measurement(measurement);\n this.mountPoint(mountPoint);\n this.config(config);\n }\n\n /**\n * Returns an object which is used to recreate the layout.\n * @return {Object} the serialized components\n */\n serialize () {\n return {\n measurement: this.measurement(),\n config: this.config(),\n matrices: this.matrices()\n };\n }\n\n /**\n * Sets/Gets the config for the layout\n * @param {Object} config configuration for the layout\n * @return {Layout|Object} Gets the Config/ Returns this instance when set\n */\n config (config) {\n if (config) {\n this._config = mergeRecursive(this._config || {}, config);\n this._config.border.width = Math.max(0, this._config.border.width);\n return this;\n }\n return this._config;\n }\n\n /**\n * Sets/Gets the measurement for the layout\n * @param {Object} measurement measurement for the layout\n * @return {Layout|Object} Gets the measurement/ Returns this instance when set\n */\n measurement (measurement) {\n if (measurement) {\n this._measurement = mergeRecursive(this._measurement || {}, measurement);\n\n return this;\n }\n return this._measurement;\n }\n\n /**\n * Sets/Gets the matrices for the layout\n * @param {Object} matrices matrices for the layout\n * @return {Layout|Object} Gets the matrices/ Returns this instance when set\n */\n matrices (matrices) {\n if (matrices) {\n this._matrices = sanitizeIP.typeObj([TOP, CENTER, BOTTOM], matrices);\n\n return this;\n }\n return this._matrices;\n }\n\n /**\n * Sets/Gets the matrix for row\n * @param {Object} matrix matrices for the layout\n * @return {Layout|Object} Gets the matrix/ Returns this instance when set\n */\n rowMatrix (matrix) {\n if (matrix) {\n this._rowMatrix = matrix;\n return this;\n }\n return this._rowMatrix;\n }\n\n /**\n * Sets/Gets the matrix for columns\n * @param {Object} matrix matrices for the layout\n * @return {Layout|Object} Gets the matrix/ Returns this instance when set\n */\n columnMatrix (matrix) {\n if (matrix) {\n this._columnMatrix = matrix;\n return this;\n }\n return this._columnMatrix;\n }\n\n /**\n * Sets/Gets the matrix for value\n * @param {Object} matrix matrices for the layout\n * @return {Layout|Object} Gets the matrix/ Returns this instance when set\n */\n centerMatrix (matrix) {\n if (matrix) {\n this._centerMatrix = matrix;\n return this;\n }\n return this._centerMatrix;\n }\n\n /**\n * Sets/Gets the mountPoint for the layout\n * @param {Object} mountPoint mountPoint for the layout\n * @return {Layout|Object} Gets the mountPoint/ Returns this instance when set\n */\n mountPoint (mountPoint) {\n if (mountPoint) {\n this._mountPoint = mountPoint;\n\n return this;\n }\n return this._mountPoint;\n }\n}\n","import * as FieldNames from '../enums/constants';\n\n/**\n * Default configuration of the layout\n * @return {Object} returns the default configuration\n */\nexport const DEFAULT_CONFIGURATION = {\n [FieldNames.BORDER]: {\n [FieldNames.STYLE]: 'solid',\n [FieldNames.COLOR]: '#d6d6d6',\n [FieldNames.WIDTH]: 2,\n [FieldNames.COLLAPSE]: true,\n [FieldNames.SPACING]: 0\n },\n [FieldNames.PAGINATION]: 'scroll',\n [FieldNames.BUFFER]: 20,\n [FieldNames.GUTTERSPACE]: { rows: [], columns: [] },\n [FieldNames.DISTRIBUTION]: { rows: [], columns: [] },\n [FieldNames.BREAK_PAGE]: { rows: [], columns: [] },\n [FieldNames.ROW_SIZE_IS_EQUAL]: false,\n [FieldNames.COLUMN_SIZE_IS_EQUAL]: false,\n [FieldNames.COLUMN_POINTER]: 0,\n [FieldNames.ROW_POINTER]: 0\n};\n\n/**\n * Default measurements for the layout\n * @return {Object} returns the default measurements\n */\nexport const DEFAULT_MEASUREMENTS = {\n [FieldNames.GRID_WIDTH]: 100,\n [FieldNames.GRID_HEIGHT]: 100,\n [FieldNames.UNIT_WIDTH]: 100,\n [FieldNames.UNIT_HEIGHT]: 100\n};\n\nexport const BLANK_BORDERS = 'rgba(0,0,0,0)';\n","/**\n * This file exports utility functions that are used across the layout module\n */\nimport { Symbols } from 'muze-utils';\nimport { PRIMARY, SECONDARY, HEIGHT, WIDTH } from '../enums/constants';\n\nconst nest = Symbols.nest;\n/**\n *\n *\n * @param {*} isTransposed\n *\n */\nconst getMeasureInfo = (isTransposed) => {\n if (isTransposed) {\n return {\n firstMeasure: HEIGHT,\n secondMeasure: WIDTH\n };\n }\n return {\n firstMeasure: WIDTH,\n secondMeasure: HEIGHT\n };\n};\n\n/**\n *\n *\n * @param {*} i\n * @param {*} page\n *\n */\nconst findInPage = (i, page) => {\n let count = 0;\n for (const x in page) {\n if (i < page[x]) {\n count = x;\n break;\n }\n }\n return count;\n};\n\n/**\n * Creates a single matrix from two matrices\n *\n * @param {Array} matrix Input matrix\n * @return {Array} Joined matrix\n * @memberof VisualMatrix\n */\nexport const combineMatrices = (matrix, config) => {\n const { isTransposed } = config;\n let joinedMatrix = matrix[0].length > 0 ? matrix[0] : matrix[1];\n if (isTransposed) {\n joinedMatrix = matrix[0].length > 0 ? [...matrix[0]] : [];\n joinedMatrix = matrix[1].length > 0 ? [...joinedMatrix, ...matrix[1]] : joinedMatrix;\n } else {\n joinedMatrix = joinedMatrix.map((row, rowIndex) => {\n let rowData = [];\n if (matrix[0].length > 0) {\n rowData = [...matrix[0][rowIndex]];\n }\n if (matrix[1].length > 0) {\n rowData = [...rowData, ...matrix[1][rowIndex]];\n }\n return rowData;\n });\n }\n return joinedMatrix;\n};\n\n/**\n * Creates a hirachical tree from the context\n *\n * @param {Object} context context for creating tree\n * @return {Object} nested tree\n */\nexport const createTree = (context) => {\n let matrixTree = {};\n let lastLevelKey = 0;\n let facet = PRIMARY;\n const nestFn = nest();\n const keys = [];\n const layoutMatrix = context._layoutMatrix;\n const primaryMatrix = context.primaryMatrix();\n const secondaryMatrix = context.secondaryMatrix();\n const { isTransposed, breakPage } = context.config();\n\n if (!isTransposed) {\n if (primaryMatrix.length === 0) {\n facet = PRIMARY;\n } else if (secondaryMatrix.length === 0) {\n facet = SECONDARY;\n } else {\n facet = primaryMatrix.length >= secondaryMatrix.length ? PRIMARY : SECONDARY;\n }\n if (primaryMatrix.length > 0) {\n for (let i = 0; i < primaryMatrix[0].length - 1; i++) {\n keys.push(i);\n }\n keys.push(primaryMatrix[0].length - 1);\n if (facet === SECONDARY || secondaryMatrix.length === 0) {\n lastLevelKey = primaryMatrix[0].length - 1;\n }\n }\n if (secondaryMatrix.length > 0) {\n const keyLength = primaryMatrix.length > 0 ? primaryMatrix[0].length : 0;\n for (let i = secondaryMatrix[0].length - 1; i > 0; i--) {\n keys.push(i + keyLength);\n }\n keys.push(keyLength);\n\n if (facet === PRIMARY) {\n lastLevelKey = keyLength;\n }\n } else {\n lastLevelKey = primaryMatrix.length > 0 ? primaryMatrix[0].length - 1 : 0;\n }\n keys.forEach((key) => {\n let counter = -1;\n return nestFn.key((d) => {\n counter++;\n return `${d[key].valueOf()}-${findInPage(counter, breakPage)}`;\n });\n });\n matrixTree = nestFn.entries(layoutMatrix);\n } else {\n if (primaryMatrix.length === 0) {\n facet = PRIMARY;\n } else if (secondaryMatrix.length === 0) {\n facet = SECONDARY;\n } else {\n facet = primaryMatrix.length >= secondaryMatrix.length ? PRIMARY : SECONDARY;\n }\n if (primaryMatrix.length > 0) {\n for (let i = 0; i < primaryMatrix.length - 1; i++) {\n keys.push(i);\n }\n // if (facet === PRIMARY) {\n keys.push(primaryMatrix.length - 1);\n // } else {\n if (facet === SECONDARY) {\n lastLevelKey = primaryMatrix.length - 1;\n }\n }\n if (secondaryMatrix.length > 0) {\n const primaryMatrixLength = primaryMatrix.length;\n for (let i = secondaryMatrix.length - 1; i > 0; i--) {\n keys.push(i + primaryMatrixLength);\n }\n // if (facet === SECONDARY) {\n keys.push(primaryMatrixLength);\n // }\n if (facet === PRIMARY) {\n lastLevelKey = primaryMatrixLength;\n }\n }\n keys.forEach((key) => {\n let counter = -1;\n return nestFn.key((d) => {\n counter++;\n return `${d[key].valueOf()}-${findInPage(counter, breakPage)}`;\n });\n });\n let newMatrix = [];\n newMatrix = layoutMatrix[0].map((col, colIndex) => layoutMatrix.map(row => row[colIndex]));\n matrixTree = nestFn.entries(newMatrix);\n }\n return { tree: matrixTree, lastLevelKey };\n};\n\n/**\n * Gives the min measues\n *\n * @param {boolean} isTransposed is column matrix\n * @param {Object} unitMeasures min measures to be given to cells\n * @return {Object} dimension min cell\n */\nexport const getMinMeasures = (isTransposed, unitMeasures) => {\n if (!isTransposed) {\n return {\n height: unitMeasures.height,\n width: 0\n };\n }\n return {\n height: 0,\n width: unitMeasures.width\n };\n};\n\n/**\n * Get the logical space from the tree\n *\n * @param {Node} item tree to be calculated\n * @param {number} measures width and height\n * @param {Array} minMeasures min measures for a cell\n * @param {Array} maxMeasure max measures for a col/row\n * @return {Object} dimension\n */\nexport const getLogicalSpace = (item, measures, minMeasures, maxMeasure = []) => {\n const { firstMeasure, secondMeasure } = measures;\n let firstMeasureValue = 0;\n let secondMeasureValue = 0;\n item.values.forEach((valueArray) => {\n let fMeasure = 0;\n let sMeasure = 0;\n valueArray.forEach((placeholder, colIndex) => {\n placeholder.setAvailableSpace();\n const space = placeholder.getLogicalSpace();\n const minSecondMeasure = placeholder.getMinMeasures(minMeasures[secondMeasure]);\n\n sMeasure = Math.max(sMeasure, +space[secondMeasure], minSecondMeasure);\n maxMeasure[colIndex] = Math.max(maxMeasure[colIndex] || 0, space[firstMeasure]);\n fMeasure += +maxMeasure[colIndex];\n });\n secondMeasureValue += sMeasure;\n firstMeasureValue = Math.max(firstMeasureValue, fMeasure);\n item.space = {\n [secondMeasure]: Math.ceil(secondMeasureValue),\n [firstMeasure]: Math.ceil(firstMeasureValue)\n };\n });\n return {\n [secondMeasure]: secondMeasureValue,\n [firstMeasure]: firstMeasureValue\n };\n};\n\n/**\n * Computes the logical spcae taken by the matrix tree\n *\n * @param {*} [item={}] tree to be viewed\n * @param {boolean} [isTransposed=false] is column matrix\n * @param {*} unitMeasures min measues for a cell\n * @param {Array} maxMeasure max measures for a col/row\n * @return {Object} logical space taken\n */\nexport const computeLogicalSpace = (item = {}, config, maxMeasures) => {\n const { isTransposed = false, unitMeasures } = config;\n const { firstMeasure, secondMeasure } = getMeasureInfo(isTransposed);\n const { values } = item;\n const minMeasures = getMinMeasures(isTransposed, unitMeasures);\n\n if (values[0].key) {\n const logicalSpace = { [firstMeasure]: 0, [secondMeasure]: 0 };\n\n values.forEach((valueItem) => {\n // Compute logical space for lowest level\n const space = computeLogicalSpace(valueItem, config, maxMeasures);\n // Set logical space for first measure\n logicalSpace[firstMeasure] = Math.max(logicalSpace[firstMeasure], space[firstMeasure],\n minMeasures[firstMeasure]);\n\n // Set logical space for second measure\n logicalSpace[secondMeasure] += +space[secondMeasure];\n });\n item.space = logicalSpace;\n return logicalSpace;\n }\n\n return getLogicalSpace(item, { firstMeasure, secondMeasure }, minMeasures, maxMeasures);\n};\n\n/**\n * Gives the space taken by a row\n *\n * @param {Array} row matrix array of rows\n * @return {Object} dimension of the row\n */\nexport const spaceTakenByRow = (row) => {\n let height = 0;\n let width = 0;\n row.forEach((col) => {\n const spaces = col.getLogicalSpace();\n height = Math.max(height, spaces.height);\n width += spaces.width;\n });\n return {\n width,\n height\n };\n};\n\n/**\n * Gives the space taken by a column\n *\n * @param {Array} matrix column matrix\n * @param {number} colIndex column index\n * @return {Object} dimension of the column\n */\nexport const spaceTakenByColumn = (matrix, colIndex) => {\n let height = 0;\n let width = 0;\n matrix.forEach((row) => {\n const col = row[colIndex];\n const spaces = col.getLogicalSpace();\n width = Math.max(width, spaces.width);\n height += spaces.height;\n });\n return {\n width,\n height\n };\n};\n\n/**\n * Creates different level matrices\n *\n * @param {Object} item matrix tree\n * @param {boolean} isTransposed is column matrix\n * @return {Object} matrix of each level\n */\nexport const createMatrixEachLevel = (item, isTransposed) => {\n if (item.values[0].key) {\n const arr = [];\n item.values.forEach((child) => {\n if (!isTransposed) {\n arr.push(...createMatrixEachLevel(child, isTransposed));\n } else {\n const eachLevel = createMatrixEachLevel(child, isTransposed);\n eachLevel.forEach((e, i) => {\n arr[i] = arr[i] || [];\n arr[i].push(...e);\n });\n }\n });\n item.matrix = arr;\n return arr;\n }\n if (!isTransposed) {\n item.matrix = item.values;\n } else {\n item.matrix = item.values[0].map((col, colIndex) => item.values.map(row => row[colIndex]));\n }\n return item.matrix;\n};\n\n/**\n * Breaks the matrix into two part\n *\n * @param {Array} matrix input matrix\n * @param {boolean} isTransposed is column matrix\n * @param {number} breakPointer point in matrix where it is to be broken\n * @return {Array} two broken matrix\n */\nexport const breakMatrix = (matrix, isTransposed, breakPointer) => {\n const primaryMatrix = [];\n const secondaryMatrix = [];\n if (isTransposed) {\n matrix.forEach((row, rowIndex) => {\n if (rowIndex >= breakPointer) {\n secondaryMatrix.push(row);\n } else {\n primaryMatrix.push(row);\n }\n });\n } else {\n matrix.forEach((row, rowIndex) => {\n row.forEach((column, columnIndex) => {\n if (columnIndex >= breakPointer) {\n secondaryMatrix[rowIndex] = secondaryMatrix[rowIndex] || [];\n secondaryMatrix[rowIndex].push(column);\n } else {\n primaryMatrix[rowIndex] = primaryMatrix[rowIndex] || [];\n primaryMatrix[rowIndex].push(column);\n }\n });\n });\n }\n return [primaryMatrix, secondaryMatrix];\n};\n\n/**\n * Distributed width returned\n *\n * @param {Object} context context for the width distibution\n * @return {number} distributed widths\n */\nexport const getDistributedWidth = (context, layoutConfig) => {\n const {\n availableWidth,\n width,\n row\n } = context;\n const {\n isDistributionEqual,\n isTransposed,\n distribution\n } = layoutConfig;\n let distSum = 0;\n if (distribution && distribution[0]) {\n distSum = distribution.reduce((t, n) => {\n t += n;\n return t;\n });\n }\n return row.map((col, colIndex) => {\n const space = col.getLogicalSpace().width;\n let distWidth = (space + (availableWidth - width) * (space / width));\n if (isTransposed) {\n if (distribution.length > 0) {\n distWidth = (availableWidth * distribution[colIndex] / distSum);\n } else if (isDistributionEqual || width === 0) {\n const rowLen = row.length;\n distWidth = (availableWidth / rowLen);\n }\n }\n return Math.floor(distWidth);\n });\n};\n\n/**\n * Distributeed heights returned\n *\n * @param {Object} context input for the height distribution\n * @return {Object} distribured heights\n */\nexport const getDistributedHeight = (context) => {\n let distSum = 0;\n let gutterSum = 0;\n let heightWithoutGutter = 0;\n const {\n isTransposed,\n distribution,\n availableHeight,\n height,\n isDistributionEqual,\n gutter,\n matrix,\n cIdx\n } = context;\n\n if (distribution && distribution[0] !== undefined) {\n distSum = distribution.reduce((t, n) => {\n t += n;\n return t;\n });\n }\n if (gutter && gutter[0] !== undefined) {\n gutterSum = gutter.reduce((t, n) => {\n t += n;\n return t;\n });\n }\n heightWithoutGutter = availableHeight - Math.floor(availableHeight * gutterSum);\n\n const colLen = matrix.length;\n return matrix.map((row, rIdx) => {\n const col = row[cIdx];\n const space = col.getLogicalSpace().height;\n let distHeight = (space + (heightWithoutGutter - height) * (space / height));\n\n if (!isTransposed) {\n if (distribution.length > 0 && colLen === distribution.length) {\n distHeight = (heightWithoutGutter * distribution[rIdx] / distSum);\n } else if (isDistributionEqual || context.height === 0) {\n distHeight = (heightWithoutGutter / colLen);\n }\n }\n return Math.floor(distHeight);\n });\n};\n\n/**\n *\n *\n * @param {*} arr\n * @param {*} beg\n * @param {*} end\n */\nexport const extraCellsRemover = (arr, beg, end) => arr.slice(beg, -end);\n\n/**\n * Creates matrix instancess\n *\n * @param {Array} [arr=[]] mutated arry\n * @param {number} depth depth of the tree\n * @param {Array} matrixInfo Details about the matrix(tree, etc) to be inserted\n * @param {boolean} layout Instance of layout\n */\nexport const createMatrixInstances = (arr = [], depth, matrixInfo, layout) => {\n const breakPointer = layout._breakPointer;\n const config = layout.config();\n const {\n isTransposed\n } = config;\n const {\n tree,\n layoutMatrix\n } = matrixInfo;\n\n if (depth === 0) {\n const brokenMatrix = breakMatrix(tree.matrix, isTransposed, breakPointer);\n arr.push({\n matrix: tree.matrix,\n primaryMatrix: brokenMatrix[0],\n secondaryMatrix: brokenMatrix[1],\n space: tree.space\n });\n return arr;\n }\n const nextLevel = depth - 1;\n tree.values.forEach((e) => {\n createMatrixInstances(arr, nextLevel, {\n tree: e,\n layoutMatrix\n }, layout);\n });\n return arr;\n};\n","import { mergeRecursive } from 'muze-utils';\n\nexport const PROPS = {\n config: {\n sanitization: (context, value) => mergeRecursive(context._config || {}, value)\n },\n maxMeasures: {},\n availableSpace: {},\n logicalSpace: {}\n};\n","import { PRIMARY } from '../enums/constants';\n/**\n *\n *\n */\nexport const defaultConfig = {\n distribution: [],\n classPrefix: 'muze',\n isDistributionEqual: true,\n unitMeasures: {\n height: 100,\n width: 100,\n border: 1\n },\n isTransposed: false,\n facet: PRIMARY,\n extraCellLengths: []\n};\n","import { mergeRecursive, generateGetterSetters, ERROR_MSG } from 'muze-utils';\nimport {\n createTree,\n combineMatrices,\n createMatrixInstances\n } from '../utils';\nimport { PROPS } from './props';\nimport { HEIGHT, WIDTH } from '../enums/constants';\nimport { defaultConfig } from './default-config';\n\n/**\n * This class used to create column / row matrix for GridLayout\n *\n * @class VisualMatrix\n */\nexport default class VisualMatrix {\n\n /**\n *Creates an instance of VisualMatrix.\n * @param {any} matrix Two set of matrices\n * @param {any} [config={}] Configuration for VisualMatrix\n * @memberof VisualMatrix\n */\n constructor (matrix, config = {}) {\n // Prepare matrices\n this._lastLevelKey = 0;\n this._primaryMatrix = matrix[0] || [];\n this._secondaryMatrix = matrix[1] || [];\n this._maxMeasures = [];\n this._availableSpace = {};\n\n // Store the config\n generateGetterSetters(this, PROPS);\n const defCon = Object.assign({}, this.constructor.defaultConfig());\n this.config(mergeRecursive(defCon, config));\n\n this._layoutMatrix = combineMatrices([matrix[0] || [], matrix[1] || []], this.config());\n }\n\n /**\n * Computes the logical space taken by the entire matrixTree\n *\n * @return {Object} Logical space taken\n * @memberof VisualMatrix\n */\n computeLogicalSpace () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n computeViewableSpaces () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n *\n *\n * @return\n * @memberof VisualMatrix\n */\n removeExtraCells () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n getPriorityDistribution () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Calculates the depth of the tree that can be viewed\n *\n * @param {Array} widthMeasures array of widths\n * @param {Array} heightMeasures array of heights\n * @return {number} depth of the tree\n * @memberof VisualMatrix\n */\n calculateDepth () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Redistributes the provied space to all cells\n *\n * @param {*} viewableMatrix current viewport matrix\n * @param {*} width provied width\n * @param {*} height provied height\n * @return {Object} current viewports matrixes with measures\n * @memberof VisualMatrix\n */\n redistributeSpaces () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Distibutes the given space row wisely\n *\n * @param {Object} measures Redistribution information\n * @memberof VisualMatrix\n */\n redistributeViewSpaces () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Dispatch the calculated cell dimensions to all the cells\n *\n * @param {Object} measures cell dimension information\n * @return {Object} row and column heights / widths\n * @memberof VisualMatrix\n */\n getCellDimensions () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n *\n *\n * @param {*} params\n * @returns\n * @memberof VisualMatrix\n */\n primaryMatrix (...params) {\n if (params.length) {\n return this;\n }\n return this._primaryMatrix;\n }\n\n secondaryMatrix (...params) {\n if (params.length) {\n return this;\n }\n return this._secondaryMatrix;\n }\n\n tree (...params) {\n if (params.length) {\n return this;\n }\n return this._tree;\n }\n\n static defaultConfig () {\n return defaultConfig;\n }\n\n createTree () {\n const { tree, lastLevelKey } = createTree(this);\n this._lastLevelKey = lastLevelKey;\n return tree;\n }\n\n /**\n * Returns the space taken by visual matrix\n *\n * @return {Object} space taken by the matrix\n * @memberof VisualMatrix\n */\n getLogicalSpace () {\n return this.logicalSpace();\n }\n\n /**\n * Sets the provied space to the visual matrix\n *\n * @param {number} width width provided\n * @param {number} height height provided\n * @memberof VisualMatrix\n */\n setAvailableSpace (width, height) {\n this.availableSpace({ width, height });\n const tree = this.tree();\n const heightMeasures = this.populateMaxMeasures(HEIGHT, tree);\n const widthMeasures = this.populateMaxMeasures(WIDTH, tree);\n const depth = this.calculateDepth(widthMeasures, heightMeasures);\n\n this.viewableMatrix = this.createViewPortMatrix(depth);\n this.viewableMeasures = this.redistributeSpaces(width, height);\n return this;\n }\n\n /**\n * Populate the max measures in the array\n *\n * @param {Array} measures array to be filled with max measures\n * @param {Object} matrixTree matrix tree of visual matrix\n * @param {number} measure width or height\n * @param {number} [depth=0] depth of the tree that to be calculated\n * @memberof VisualMatrix\n */\n populateMaxMeasures (type, matrixTree, depth = 0, measures = []) {\n measures[depth] = Math.max(measures[depth] || 0, matrixTree.space[type]);\n if (matrixTree.values) {\n const childDepth = depth + 1;\n matrixTree.values.forEach((child) => {\n if (child.space) {\n measures = this.populateMaxMeasures(type, child, childDepth, measures);\n }\n });\n }\n return measures;\n }\n\n /**\n * Gets the viewable measures for the current viewable matrix\n *\n * @return {Object} Set of viewable measures\n * @memberof VisualMatrix\n */\n getViewableSpaces () {\n return this.viewableMeasures;\n }\n\n /**\n * Returns the matrix that can be viewed in the current viewport\n *\n * @return {Array} Set of matrices that can be viewed\n * @memberof VisualMatrix\n */\n getViewableMatrices () {\n return this.viewableMatrix;\n }\n\n /**\n * Creates the viewport that can be viewed together\n *\n * @param {number} depth maxDepth that can be viewed in the viewport\n * @return {Array} Set of matrices that can be viewed\n * @memberof VisualMatrix\n */\n createViewPortMatrix (depth) {\n const arr = [];\n createMatrixInstances(arr, depth, this.removeExtraCells(), this);\n return arr;\n }\n}\n\n","import { mergeRecursive } from 'muze-utils';\nimport {\n extraCellsRemover,\n combineMatrices,\n spaceTakenByColumn,\n getDistributedHeight,\n computeLogicalSpace,\n createMatrixEachLevel\n } from '../utils';\nimport { ROW_ROOT } from '../enums/constants';\nimport VisualMatrix from './visual-matrix';\n\n/**\n * This class used to create column / row matrix for GridLayout\n *\n * @class VisualMatrix\n */\nexport default class RowVisualMatrix extends VisualMatrix {\n\n /**\n *Creates an instance of VisualMatrix.\n * @param {any} matrix Two set of matrices\n * @param {any} [config={}] Configuration for VisualMatrix\n * @memberof VisualMatrix\n */\n constructor (matrix, config = {}) {\n super(matrix, config);\n\n this._breakPointer = (matrix[0].length > 0 ? matrix[0][0].length : 0);\n this._layoutMatrix = combineMatrices([matrix[0] || [], matrix[1] || []], this.config());\n\n // Create Tree\n this._tree = {\n key: ROW_ROOT,\n values: this.createTree()\n };\n this._logicalSpace = this.computeLogicalSpace();\n }\n\n /**\n * Computes the logical space taken by the entire matrixTree\n *\n * @return {Object} Logical space taken\n * @memberof VisualMatrix\n */\n computeLogicalSpace () {\n const matrixTree = this.tree();\n createMatrixEachLevel(matrixTree, false);\n return computeLogicalSpace(matrixTree, this.config(), this.maxMeasures());\n }\n\n computeViewableSpaces (measures) {\n const {\n maxHeights,\n maxWidths,\n height\n } = measures;\n return this.viewableMatrix.map((matrixInst, i) => {\n const cellDimOptions = { matrixInst, maxWidths, maxHeights, matrixIndex: i };\n const { widths, rowHeights, columnWidths } = this.getCellDimensions(cellDimOptions);\n const heightMeasures = [height, height];\n const columnMeasures = widths;\n\n return {\n rowHeights: {\n primary: rowHeights[0],\n secondary: rowHeights[1]\n },\n columnWidths: {\n primary: columnWidths[0],\n secondary: columnWidths[1]\n },\n height: {\n primary: heightMeasures[0],\n secondary: heightMeasures[1]\n },\n width: {\n primary: columnMeasures[0],\n secondary: columnMeasures[1]\n }\n };\n });\n }\n\n /**\n *\n *\n * @return\n * @memberof VisualMatrix\n */\n removeExtraCells () {\n const {\n isTransposed,\n extraCellLengths\n } = this.config();\n const matrix = this._layoutMatrix;\n const tree = mergeRecursive({}, this.tree());\n const begCellLen = extraCellLengths[0];\n const endCellLen = extraCellLengths[1] || Number.NEGATIVE_INFINITY;\n const layoutMatrix = !isTransposed ? extraCellsRemover(matrix, begCellLen, endCellLen) :\n matrix.slice(0).map(e => extraCellsRemover(e, begCellLen, endCellLen));\n\n tree.values = extraCellsRemover(tree.values, begCellLen, endCellLen);\n tree.matrix = extraCellsRemover(tree.matrix, begCellLen, endCellLen);\n\n return {\n tree,\n layoutMatrix\n };\n }\n\n getPriorityDistribution (measures) {\n let remainingAvailWidth;\n let remainingWidth;\n let cWidths = [];\n let conditions = [];\n let maxPrioritySpace = 0;\n const {\n matrix,\n width: availableWidth,\n maxMeasures: maxWidths,\n maxWidth: currentWidth,\n height\n } = measures;\n const priority = this.config().priority;\n const primaryMatrixLength = this.primaryMatrix().length ? this.primaryMatrix()[0].length : 0;\n\n const dist = [];\n\n remainingAvailWidth = availableWidth;\n remainingWidth = currentWidth;\n\n if (priority === 2) {\n conditions = [primaryMatrixLength - 1, primaryMatrixLength];\n // divider = Math.min(2, matrixLen);\n } else {\n conditions = priority === 0 ? [primaryMatrixLength - 1] : [primaryMatrixLength];\n // divider = Math.min(1, matrixLen);\n }\n conditions.forEach((i) => {\n dist[i] = maxWidths[i];\n maxPrioritySpace += maxWidths[i];\n remainingAvailWidth -= dist[i];\n remainingWidth -= dist[i];\n });\n matrix[0].forEach((e, i) => {\n if (conditions.indexOf(i) === -1) {\n dist[i] = remainingAvailWidth * (maxWidths[i] / remainingWidth);\n }\n });\n matrix.forEach(row => row.forEach((col, cIdx) => {\n if (conditions.indexOf(cIdx) === -1) {\n col.setAvailableSpace(dist[cIdx], height);\n\n cWidths[cIdx] = Math.max(cWidths[cIdx] || 0, Math.floor(col.getLogicalSpace().width));\n } else {\n cWidths[cIdx] = 0;\n }\n }));\n\n const prioritySpace = availableWidth - cWidths.reduce((t, n) => t + n);\n if (prioritySpace < 0) {\n cWidths = cWidths.map(() => 0);\n } else {\n conditions.forEach((i) => {\n cWidths[i] = Math.floor(prioritySpace * (dist[i] / maxPrioritySpace || 1));\n });\n }\n return cWidths;\n }\n\n /**\n * Calculates the depth of the tree that can be viewed\n *\n * @param {Array} widthMeasures array of widths\n * @param {Array} heightMeasures array of heights\n * @return {number} depth of the tree\n * @memberof VisualMatrix\n */\n calculateDepth (widthMeasures, heightMeasures) {\n let i;\n const { height } = this.availableSpace();\n\n for (i = 0; i < heightMeasures.length; i++) {\n if (heightMeasures[i] <= height) break;\n }\n\n return Math.min(widthMeasures.length - 1, i);\n }\n\n /**\n * Redistributes the provied space to all cells\n *\n * @param {*} viewableMatrix current viewport matrix\n * @param {*} width provied width\n * @param {*} height provied height\n * @return {Object} current viewports matrixes with measures\n * @memberof VisualMatrix\n */\n redistributeSpaces (width, height) {\n let maxHeights = [];\n let maxWidths = [];\n const maxMeasures = this.maxMeasures();\n\n const maxWidth = maxMeasures.reduce((t, n) => {\n t += n;\n return t;\n });\n const logicalWidths = this.getPriorityDistribution({\n matrix: this._layoutMatrix,\n maxWidth,\n maxMeasures,\n width,\n height\n });\n\n this.viewableMatrix.forEach((matrixInst) => {\n const matrix = matrixInst.matrix;\n const mWidth = 0;\n const mHeight = 0;\n const options = { mWidth, mHeight, matrix, width, height, maxHeights, maxWidths, logicalWidths };\n const measures = this.redistributeViewSpaces(options);\n maxWidths = measures.maxWidths;\n maxHeights = measures.maxHeights;\n });\n return this.computeViewableSpaces({ height, width, maxHeights, maxWidths });\n }\n\n /**\n * Distibutes the given space row wisely\n *\n * @param {Object} measures Redistribution information\n * @memberof VisualMatrix\n */\n redistributeViewSpaces (measures) {\n let cWidths = [];\n let rHeights = [];\n let mHeight = 0;\n const maxMeasures = this.maxMeasures();\n\n const {\n isDistributionEqual,\n distribution,\n isTransposed,\n gutter\n } = this.config();\n const { matrix, height, maxHeights, maxWidths, logicalWidths } = measures;\n mHeight = spaceTakenByColumn(matrix, this._lastLevelKey).height;\n\n const maxWidth = maxMeasures.reduce((t, n) => {\n t += n;\n return t;\n });\n measures.maxMeasures = maxMeasures;\n measures.maxWidth = maxWidth;\n if (maxWidth > 0) {\n cWidths = logicalWidths;\n } else {\n cWidths = maxMeasures.map(() => 0);\n }\n rHeights = getDistributedHeight({\n matrix,\n cIdx: this._lastLevelKey,\n height: mHeight,\n availableHeight: height,\n isDistributionEqual,\n distribution,\n isTransposed,\n gutter\n });\n if (maxWidths.length > 0) {\n cWidths = cWidths.map((e, i) => Math.max(e, maxWidths[0][i] || 0));\n }\n maxWidths.push(cWidths);\n for (let x = 0; x < maxWidths.length; x++) {\n maxWidths[x] = cWidths;\n }\n maxHeights.push(rHeights);\n return { maxWidths, maxHeights };\n }\n\n /**\n * Dispatch the calculated cell dimensions to all the cells\n *\n * @param {Object} measures cell dimension information\n * @return {Object} row and column heights / widths\n * @memberof VisualMatrix\n */\n getCellDimensions (measures) {\n const {\n unitMeasures\n } = this.config();\n const borderWidth = unitMeasures.border;\n const { matrixInst, maxWidths, maxHeights, matrixIndex } = measures;\n const matrix = matrixInst.matrix;\n const rowHeights = [[0], [0]];\n const columnWidths = [[0], [0]];\n const heights = [0, 0];\n const widths = [0, 0];\n const breakPointer = this._breakPointer;\n\n matrix.forEach((row, rIdx) => {\n row.forEach((cell, cIdx) => {\n const colHeight = maxHeights[matrixIndex][rIdx] || 0;\n const colWidth = maxWidths[matrixIndex][cIdx];\n\n cell.setAvailableSpace(colWidth, colHeight - borderWidth);\n\n if (rIdx === 0 && cIdx < breakPointer) {\n columnWidths[0][cIdx] = colWidth;\n widths[0] = (widths[0] || 0) + colWidth;\n } else if (rIdx === 0 && cIdx >= breakPointer) {\n columnWidths[1][cIdx - breakPointer] = colWidth;\n widths[1] = (widths[1] || 0) + colWidth;\n }\n if (cIdx === this._lastLevelKey) {\n rowHeights[0][rIdx] = colHeight;\n rowHeights[1][rIdx] = colHeight;\n }\n });\n });\n return {\n heights,\n widths,\n rowHeights,\n columnWidths\n };\n }\n}\n\n","import { mergeRecursive } from 'muze-utils';\nimport {\n extraCellsRemover,\n getDistributedWidth,\n spaceTakenByRow,\n createMatrixEachLevel,\n computeLogicalSpace\n } from '../utils';\nimport { COLUMN_ROOT } from '../enums/constants';\nimport VisualMatrix from './visual-matrix';\n\n/**\n * This class used to create column / row matrix for GridLayout\n *\n * @class VisualMatrix\n */\nexport default class ColumnVisualMatrix extends VisualMatrix {\n\n /**\n *Creates an instance of VisualMatrix.\n * @param {any} matrix Two set of matrices\n * @param {any} [config={}] Configuration for VisualMatrix\n * @memberof VisualMatrix\n */\n constructor (matrix, config = {}) {\n super(matrix, config);\n\n this._breakPointer = matrix[0].length;\n\n // Create Tree\n this._tree = {\n key: COLUMN_ROOT,\n values: this.createTree()\n };\n this._logicalSpace = this.computeLogicalSpace();\n }\n\n /**\n * Computes the logical space taken by the entire matrixTree\n *\n * @return {Object} Logical space taken\n * @memberof VisualMatrix\n */\n computeLogicalSpace () {\n const matrixTree = this.tree();\n createMatrixEachLevel(matrixTree, true);\n return computeLogicalSpace(matrixTree, this.config(), this.maxMeasures());\n }\n\n computeViewableSpaces (measures) {\n const {\n maxHeights,\n maxWidths,\n height,\n width\n } = measures;\n\n return this.viewableMatrix.map((matrixInst, i) => {\n const cellDimOptions = { matrixInst, maxWidths, maxHeights, matrixIndex: i, height };\n const {\n heights,\n rowHeights,\n columnWidths\n } = this.getCellDimensions(cellDimOptions);\n const heightMeasures = heights;\n const columnMeasures = [width, width];\n\n return {\n rowHeights: {\n primary: rowHeights[0],\n secondary: rowHeights[1]\n },\n columnWidths: {\n primary: columnWidths[0],\n secondary: columnWidths[1]\n },\n height: {\n primary: heightMeasures[0],\n secondary: heightMeasures[1]\n },\n width: {\n primary: columnMeasures[0],\n secondary: columnMeasures[1]\n }\n };\n });\n }\n\n /**\n *\n *\n * @return\n * @memberof VisualMatrix\n */\n removeExtraCells () {\n const {\n isTransposed,\n extraCellLengths\n } = this.config();\n const matrix = this._layoutMatrix;\n const tree = mergeRecursive({}, this.tree());\n const begCellLen = extraCellLengths[0];\n const endCellLen = extraCellLengths[1] || Number.NEGATIVE_INFINITY;\n const layoutMatrix = !isTransposed ? extraCellsRemover(matrix, begCellLen, endCellLen) :\n matrix.slice(0).map(e => extraCellsRemover(e, begCellLen, endCellLen));\n\n tree.values = extraCellsRemover(tree.values, begCellLen, endCellLen);\n\n tree.matrix = tree.matrix.map(e => extraCellsRemover(e, begCellLen, endCellLen));\n\n return {\n tree,\n layoutMatrix\n };\n }\n\n getPriorityDistribution (measures) {\n const {\n height,\n maxHeights\n } = measures;\n let remainingHeight = height;\n let heightDist = [];\n let conditions = [];\n let divider = 2;\n const priority = this.config().priority;\n const primaryMatrixLength = this.primaryMatrix().length;\n\n if (priority === 2) {\n conditions = [primaryMatrixLength - 1, primaryMatrixLength];\n divider = 2;\n } else {\n conditions = priority === 0 ? [primaryMatrixLength - 1] : [primaryMatrixLength];\n divider = 1;\n }\n maxHeights.forEach((heights, index) => {\n if (conditions.indexOf(index) === -1) {\n heightDist[index] = heights;\n remainingHeight -= heights;\n }\n });\n if (remainingHeight < 0) {\n heightDist = heightDist.map(() => 0);\n } else {\n conditions.forEach((condition) => {\n heightDist[condition] = Math.min(maxHeights[condition], (remainingHeight) / divider);\n });\n }\n return heightDist;\n }\n\n /**\n * Calculates the depth of the tree that can be viewed\n *\n * @param {Array} widthMeasures array of widths\n * @param {Array} heightMeasures array of heights\n * @return {number} depth of the tree\n * @memberof VisualMatrix\n */\n calculateDepth (widthMeasures) {\n let j;\n const { width } = this.availableSpace();\n\n for (j = 0; j < widthMeasures.length; j++) {\n if (widthMeasures[j] <= width) break;\n }\n return Math.min(widthMeasures.length - 1, j);\n }\n\n /**\n * Redistributes the provied space to all cells\n *\n * @param {*} viewableMatrix current viewport matrix\n * @param {*} width provied width\n * @param {*} height provied height\n * @return {Object} current viewports matrixes with measures\n * @memberof VisualMatrix\n */\n redistributeSpaces (width, height) {\n let maxHeights = [];\n let maxWidths = [];\n\n this.viewableMatrix.forEach((matrixInst) => {\n const matrix = matrixInst.matrix;\n const mWidth = 0;\n const mHeight = 0;\n const options = { mWidth, mHeight, matrix, width, height, maxHeights, maxWidths };\n const maxMeasures = this.redistributeViewSpaces(options);\n maxWidths = maxMeasures.maxWidths;\n maxHeights = maxMeasures.maxHeights;\n });\n\n return this.computeViewableSpaces({ height, width, maxHeights, maxWidths });\n }\n\n /**\n * Distibutes the given space column wisely\n *\n * @param {Object} measures Redistribution information\n * @memberof VisualMatrix\n */\n redistributeViewSpaces (measures) {\n let rHeights = [];\n const {\n matrix,\n width,\n maxHeights,\n maxWidths\n } = measures;\n const borderWidth = this.config().unitMeasures.border;\n\n const mWidth = spaceTakenByRow(matrix[this._lastLevelKey]).width;\n const cWidths = getDistributedWidth({\n row: matrix[this._lastLevelKey],\n width: mWidth,\n availableWidth: width\n }, this.config());\n\n matrix.forEach((row, rIdx) => row.forEach((col, cIdx) => {\n const oldLogicalSpace = col.getLogicalSpace();\n\n col.setAvailableSpace(cWidths[cIdx] - borderWidth, oldLogicalSpace.height);\n rHeights[rIdx] = Math.max(rHeights[rIdx] || 0, Math.floor(col.getLogicalSpace().height));\n }));\n if (maxHeights.length > 0) {\n rHeights = rHeights.map((e, i) => Math.max(e, maxHeights[0][i]));\n }\n maxHeights.push(rHeights);\n for (let x = 0; x < maxHeights.length; x++) {\n maxHeights[x] = rHeights;\n }\n maxWidths.push(cWidths);\n return { maxHeights, maxWidths };\n }\n\n /**\n * Dispatch the calculated cell dimensions to all the cells\n *\n * @param {Object} measures cell dimension information\n * @return {Object} row and column heights / widths\n * @memberof VisualMatrix\n */\n getCellDimensions (measures) {\n const {\n unitMeasures\n } = this.config();\n const borderWidth = unitMeasures.border;\n const { matrixInst, height, maxWidths, maxHeights, matrixIndex } = measures;\n const matrix = matrixInst.matrix;\n const rowHeights = [[0], [0]];\n const columnWidths = [[0], [0]];\n const heights = [0, 0];\n const widths = [0, 0];\n const breakPointer = this._breakPointer;\n\n const heightDistribution = this.getPriorityDistribution({ height, maxHeights: maxHeights[0] || [] });\n\n matrix.forEach((row, rIdx) => {\n row.forEach((cell, cIdx) => {\n const colHeight = heightDistribution[rIdx] || 0;\n const colWidth = maxWidths[matrixIndex][cIdx];\n\n cell.setAvailableSpace(colWidth - borderWidth, colHeight);\n\n if (cIdx === 0 && rIdx < breakPointer) {\n rowHeights[0][rIdx] = colHeight;\n heights[0] = (heights[0] || 0) + colHeight;\n } else if (cIdx === 0 && rIdx >= breakPointer) {\n rowHeights[1][rIdx - breakPointer] = colHeight;\n heights[1] = (heights[1] || 0) + colHeight;\n }\n if (rIdx === this._lastLevelKey) {\n columnWidths[0][cIdx] = colWidth;\n columnWidths[1][cIdx] = colWidth;\n }\n });\n });\n return {\n heights,\n widths,\n rowHeights,\n columnWidths\n };\n }\n}\n\n","import {\n HEIGHT, WIDTH, COLUMN, ROW, HORIZONTAL, VERTICAL, HOLISTIC,\n MAX_WIDTH_AVAIL_FOR_COL_MATRIX, COLUMN_MATRIX, MAX_HEIGHT_AVAIL_FOR_ROW_MATRIX, ROW_MATRIX, SCROLL\n} from '../enums/constants';\n\n/**\n * Gets measurement for an instance of visual matrix\n *\n * @param {Array} matrix instance of visual matrix\n * @param {string} type height/width\n * @return {Object} Logical height/width of the matrix\n */\nexport function getMatrixMeasurement (matrix, type) {\n if (matrix) {\n return matrix.getLogicalSpace()[type];\n }\n return 0;\n}\n\n/**\n * Sets available space for an instance of visual matrix\n *\n * @param {Array} matrix instance of visual matrix\n * @param {string} type height/width\n * @param {number} value Value of measurement\n */\nexport function setMatrixMeasurement (matrix, type, value) {\n if (matrix) {\n const spaces = matrix.getLogicalSpace();\n if (value && spaces[type] !== value) {\n type === HEIGHT ? matrix.setAvailableSpace(spaces.width, value) :\n matrix.setAvailableSpace(value, spaces.height);\n }\n }\n}\n\nconst setAvailableSpace = (matrix, widths, heights) => {\n matrix.forEach((row, rIdx) => {\n row.forEach((placeholder, cIdx) => {\n placeholder.setAvailableSpace(widths[cIdx], heights[rIdx]);\n });\n });\n};\n\nconst setViewSpaces = (layout, pointerType, viewSpaces) => {\n let pointer = layout.config()[`${pointerType}Pointer`];\n if (viewSpaces.length - 1 < pointer) {\n pointer = 0;\n layout.config({ [`${pointerType}Pointer`]: pointer });\n }\n return pointer;\n};\n\nconst paginationDetailsMap = {\n column: {\n maxMeasure: MAX_WIDTH_AVAIL_FOR_COL_MATRIX,\n matrix: COLUMN_MATRIX,\n measureType: WIDTH,\n scrollType: HORIZONTAL\n },\n row: {\n maxMeasure: MAX_HEIGHT_AVAIL_FOR_ROW_MATRIX,\n matrix: ROW_MATRIX,\n measureType: HEIGHT,\n scrollType: VERTICAL\n }\n};\n\n/**\n * This method provides the required width/height in the different pagination stages.\n * If the pagination is holistic, then only the max width/height will be provided for layouting\n * If scroll is enabled, then the entire width/height shall be provided for layouting\n * Note: width is required for scrolling the columns while height is required for scrolling rows\n *\n *\n * @param {Layout} layout Layout instance required for configuration details\n * @param {Object} measureDetails different measure details for row/column\n * @param {number} maxMeasure maximum width/height present for column/row respectively\n * @return {number} Provides the width/height based on which further calculation can occur\n */\nconst getMatrixMeasureForPagination = (layout, measureDetails, maxMeasure, buffer) => {\n const {\n pagination\n } = layout.config();\n const {\n matrix,\n measureType,\n scrollType\n } = measureDetails;\n\n switch (pagination) {\n case HOLISTIC:\n return maxMeasure;\n default: {\n const actualMeasure = getMatrixMeasurement(layout[matrix](), measureType) + buffer;\n\n if (actualMeasure > maxMeasure) {\n layout.scrollInfo({ [scrollType]: true });\n }\n return Math.max(maxMeasure, actualMeasure);\n }\n }\n};\n\n/**\n * This method uses the getMatrixMeasureForPagination function to calculate maximum measure\n * depending on the layouting algorithm used\n *\n *\n * @param {Layout} layout Layout instance required for configuration details\n * @param {string} matrixType row/column\n * @param {number} relatedMaxMeasure maximum width/height present for column/row respectively\n * @return {number} Provides the width/height based on which further calculation can occur\n */\nconst paginationMeasureGetter = (layout, matrixType, relatedMaxMeasure, buffer) =>\n getMatrixMeasureForPagination(layout, paginationDetailsMap[matrixType], relatedMaxMeasure, buffer);\n\nconst getMatrixWidthDetails = (layout) => {\n const rowMatrix = layout.rowMatrix();\n const {\n width\n } = layout.measurement();\n const {\n border,\n buffer\n } = layout.config();\n\n // Border adjustment for each cell in the central matrix\n const borderWidth = border.width;\n\n // Get width of row matrix\n const rowMatrixWidth = getMatrixMeasurement(rowMatrix, WIDTH);\n\n // Get maximum width allowed for the row matrix\n const maxRowMatrixWidth = Math.min(rowMatrixWidth + buffer, width / 2);\n\n // Get maximum width available for the column matrix\n const maxWidthAvailableForColumnMatrix = width - maxRowMatrixWidth - borderWidth;\n\n // Set width for column matrix\n const columnMatrixWidth = paginationMeasureGetter(layout, COLUMN, maxWidthAvailableForColumnMatrix, 0);\n\n return {\n rowMatrixWidth,\n maxRowMatrixWidth,\n columnMatrixWidth,\n maxWidthAvailableForColumnMatrix\n };\n};\n\nconst getHeightRequiredByColMatrix = (layout, columnMatrixWidth) => {\n const {\n height\n } = layout.measurement();\n const columnMatrix = layout.columnMatrix();\n\n // Get maximum allowed height for colum matrix\n const maxColumnMatrixHeight = Math.min(columnMatrix.getLogicalSpace().height, height / 2);\n\n // Set the computed width and max height to column matrix to determine the actual height\n // that will be taken by the column matrix\n columnMatrix.setAvailableSpace(columnMatrixWidth, maxColumnMatrixHeight);\n\n // Get the set of pages column view\n const columnViewPages = columnMatrix.getViewableSpaces();\n\n // Figuring out total space needed by current view space\n const columnViewSpace = columnViewPages[layout.config().columnPointer];\n\n // Getting height of column matrix\n const columnMatrixHeight = columnViewSpace.height.primary + columnViewSpace.height.secondary;\n\n return {\n columnMatrixHeight,\n maxColumnMatrixHeight\n };\n};\n\nconst getMatrixHeightDetails = (layout, columnMatrixWidth) => {\n const {\n height\n } = layout.measurement();\n const {\n buffer\n } = layout.config();\n\n // Get actual height required by column matrix\n const { columnMatrixHeight, maxColumnMatrixHeight } = getHeightRequiredByColMatrix(layout, columnMatrixWidth);\n\n // Based on column height, compute max height available for row matrix\n const maxHeightAvailableForRowMatrix = height - Math.min(maxColumnMatrixHeight, columnMatrixHeight);\n\n // Get height for row matrix\n const rowMatrixHeight = paginationMeasureGetter(layout, ROW, maxHeightAvailableForRowMatrix, buffer);\n\n return {\n columnMatrixHeight,\n maxColumnMatrixHeight,\n rowMatrixHeight,\n maxHeightAvailableForRowMatrix\n };\n};\n\nconst setValueMatrixMeasurements = (layout, rowViewableSpaces, columnViewableSpaces) => {\n const centerMatrix = layout.centerMatrix();\n\n const {\n border\n } = layout.config();\n const matrices = layout.matrices();\n const {\n top,\n bottom\n } = matrices;\n\n // Border adjustment for each cell in the central matrix\n const borderWidth = border.width;\n\n // Get the heights for each cell in the row matrix\n const rowHeights = [].concat(...rowViewableSpaces.map(e => e.rowHeights.primary));\n\n // Get the widths for each of the row matrix cells(primary and secondary)\n const rowWidthsPrimary = [].concat(...rowViewableSpaces.map(e => e.columnWidths.primary));\n const rowWidthsSecondary = [].concat(...rowViewableSpaces.map(e => e.columnWidths.secondary));\n\n // Get the widths for each cell in the column matrix\n const columnWidths = [].concat(...columnViewableSpaces.map(e => e.columnWidths.primary));\n\n // Get the widths for each of the column matrix cells(primary and secondary)\n const columnHeightsPrimary = columnViewableSpaces[0].rowHeights.primary;\n const columnHeightsSecondary = [].concat(...columnViewableSpaces.map(e => e.rowHeights.secondary));\n\n // Setting the available space for each cell in the centre matrix computed throught the row and\n // column matrices\n centerMatrix.forEach((matrix, rIdx) => {\n matrix.forEach((placeholder, cIdx) => {\n placeholder.setAvailableSpace(columnWidths[cIdx] - borderWidth, rowHeights[rIdx] - borderWidth);\n });\n });\n\n // Set the heights and widths for the corner matrices namely:\n // TOP_LEFT\n setAvailableSpace(top[0], rowWidthsPrimary, columnHeightsPrimary);\n // TOP_RIGHT\n setAvailableSpace(top[2], rowWidthsSecondary, columnHeightsPrimary);\n // BOTTOM_LEFT\n setAvailableSpace(bottom[0], rowWidthsPrimary, columnHeightsSecondary);\n // BOTTOM_RIGHT\n setAvailableSpace(bottom[2], rowWidthsSecondary, columnHeightsSecondary);\n};\n\nconst bufferCondition = {\n isScroll: true,\n pagination: SCROLL\n};\n\nconst getBufferFromCondition = (layout, type) => {\n const scrollInfo = layout.scrollInfo();\n const {\n pagination\n } = layout.config();\n\n const currentBufferType = {\n pagination,\n isScroll: scrollInfo[type]\n };\n\n return Object.keys(bufferCondition).every(e => bufferCondition[e] === currentBufferType[e]);\n};\n\nconst getActualBufferFromConfig = (layout) => {\n const {\n buffer\n } = layout.config();\n const [horizontalBuffer, verticalBuffer] = [HORIZONTAL, VERTICAL].map((type) => {\n if (getBufferFromCondition(layout, type)) {\n return buffer;\n }\n return 0;\n });\n\n return {\n horizontalBuffer,\n verticalBuffer\n };\n};\n/**\n * Computes the measurements of space for all matrices in the\n * layout\n *\n * @param {Object} layout Instance of grid layout\n * @return {Object} set of measurements for the layout\n */\nexport const computeLayoutMeasurements = (layout) => {\n const rowMatrix = layout.rowMatrix();\n const columnMatrix = layout.columnMatrix();\n\n // Compute the widths of the row and column matrices\n const {\n rowMatrixWidth,\n maxRowMatrixWidth,\n maxWidthAvailableForColumnMatrix,\n columnMatrixWidth\n } = getMatrixWidthDetails(layout);\n\n // Compute the heights of the row and column matrices\n const {\n columnMatrixHeight,\n rowMatrixHeight,\n maxHeightAvailableForRowMatrix\n } = getMatrixHeightDetails(layout, columnMatrixWidth);\n\n const {\n horizontalBuffer,\n verticalBuffer\n } = getActualBufferFromConfig(layout);\n rowMatrix.setAvailableSpace(maxRowMatrixWidth - verticalBuffer, rowMatrixHeight - horizontalBuffer);\n\n // Get row and columns viewable spaces\n const rowViewableSpaces = rowMatrix.getViewableSpaces();\n const columnViewableSpaces = columnMatrix.getViewableSpaces();\n\n // Set view spaces for row and columns\n setViewSpaces(layout, ROW, rowViewableSpaces);\n setViewSpaces(layout, COLUMN, columnViewableSpaces);\n\n // Set measures for each cell of the value matrix\n setValueMatrixMeasurements(layout, rowViewableSpaces, columnViewableSpaces);\n\n return {\n rowMatrixHeight: rowMatrixHeight - horizontalBuffer,\n rowMatrixWidth: rowMatrixWidth - verticalBuffer,\n maxHeightAvailableForRowMatrix: maxHeightAvailableForRowMatrix - horizontalBuffer,\n\n columnMatrixHeight,\n columnMatrixWidth,\n maxWidthAvailableForColumnMatrix\n };\n};\n","/**\n * Gets view matrices based on current pointers for row and column\n *\n * @param {Object} layout instance of layout\n * @param {number} rowPointer current row pointer\n * @param {number} columnPointer current column pointer\n * @return {Object} returns the view matrix and its relevant information\n */\nexport const getViewMatrices = (layout, rowPointer, columnPointer) => {\n const rowMatrix = layout.rowMatrix();\n const columnMatrix = layout.columnMatrix();\n const centerMatrix = layout.centerMatrix();\n const matrices = layout.matrices();\n const rowMatrices = rowMatrix.getViewableMatrices();\n const columnMatrices = columnMatrix.getViewableMatrices();\n const centralMatrixPointer = {\n row: 0,\n column: 0\n };\n\n for (let i = rowPointer - 1; i >= 0; i--) {\n const length = Math.max(rowMatrices[i].primaryMatrix.length,\n rowMatrices[i].secondaryMatrix.length);\n centralMatrixPointer.row += length;\n }\n /* istanbul ignore next */\n for (let i = columnPointer - 1; i >= 0; i--) {\n const matrix = columnMatrices[i];\n const { primaryMatrix, secondaryMatrix } = matrix;\n const length = Math.max(primaryMatrix[0] ? primaryMatrix[0].length : 0,\n secondaryMatrix[0] ? secondaryMatrix[0].length : 0);\n centralMatrixPointer.column += length;\n }\n\n matrices.top[1] = columnMatrices[columnPointer].primaryMatrix;\n matrices.bottom[1] = columnMatrices[columnPointer].secondaryMatrix;\n\n matrices.center[0] = rowMatrices[rowPointer].primaryMatrix;\n matrices.center[2] = rowMatrices[rowPointer].secondaryMatrix;\n\n const rowMatrixLen = Math.max(matrices.center[0].length, matrices.center[2].length);\n /* istanbul ignore next */\n const columnMatrixLen = Math.max(matrices.top[1][0] ? matrices.top[1][0].length : 0, matrices.bottom[1][0] ?\n matrices.bottom[1][0].length : 0);\n matrices.center[1] = centerMatrix.slice(centralMatrixPointer.row, centralMatrixPointer.row + rowMatrixLen)\n .map(matrix => matrix.slice(centralMatrixPointer.column, centralMatrixPointer.column + columnMatrixLen));\n\n return {\n matrices,\n rowPages: rowMatrices.length,\n columnPages: columnMatrices.length\n };\n};\n\nconst measureSum = measureArr => measureArr.reduce((total, measure) => total + measure, 0);\n/**\n * Returns measurements of the cells of the current matrix\n *\n * @param {Object} layout instance of layout\n * @return {Object} returns the measurements for current view matrix\n */\nexport const getViewMeasurements = (layout, maxRowHeight, maxColWidth) => {\n const rowMatrix = layout.rowMatrix();\n const columnMatrix = layout.columnMatrix();\n const {\n columnPointer,\n rowPointer\n } = layout.config();\n\n const rowSpaces = rowMatrix.getViewableSpaces()[rowPointer];\n const colSpaces = columnMatrix.getViewableSpaces()[columnPointer];\n\n const {\n rowHeights,\n width: rowMatrixWidth\n } = rowSpaces;\n const {\n columnWidths,\n height: columnMatrixHeight\n } = colSpaces;\n\n const { primary: leftWidth, secondary: rightWidth } = rowMatrixWidth;\n const { primary: topHeight, secondary: bottomHeight } = columnMatrixHeight;\n\n const centerHeight = measureSum(rowHeights.primary);\n const centerWidth = measureSum(columnWidths.primary);\n const viewWidth = [leftWidth, Math.min(centerWidth, maxColWidth), rightWidth];\n const viewHeight = [topHeight, Math.min(centerHeight, maxRowHeight), bottomHeight];\n\n return {\n viewWidth,\n viewHeight,\n actualCenterMeasures: {\n height: centerHeight,\n width: centerWidth\n },\n totalMeasures: {\n width: measureSum(viewWidth),\n height: measureSum(viewHeight)\n },\n unitHeights: rowHeights,\n unitWidths: columnWidths\n };\n};\n","/**\n * This file declares a table that can be extended to create a Datagrid, crosstab\n * and man other visualzations that require a tabular structure.\n */\n\nimport { getUniqueId, mergeRecursive } from 'muze-utils';\nimport GenericLayout from '../generic-layout';\nimport { DEFAULT_CONFIGURATION, DEFAULT_MEASUREMENTS } from './defaults';\nimport { generateVisualMatrices } from './layout-helper';\nimport { computeLayoutMeasurements } from './computations';\nimport { getViewMeasurements, getViewMatrices } from './view-info-getter';\n/**\n * This class is used to create a tabular structure that\n * can house charts and values.\n *\n * @class GridLayout\n */\nexport default class GridLayout extends GenericLayout {\n\n /**\n * Creates an instance of TableLayout.\n * @param {HTMLElement} matrices Set of upto 9 matrices containing the cells to be rendered\n * @param {HTMLElement} mountPoint DOM element/d3 selection where the layout is to be mounted\n * @param {Object} measurement The dimensions of the layout\n * @param {Object} config external configurations.\n * @memberof GenericLayout\n */\n constructor (matrices, mountPoint, measurement, config) {\n super(mountPoint, measurement, config);\n this.matrices(matrices);\n this.config(this.constructor.defaultConfig());\n this._layoutId = getUniqueId();\n this._viewInfo = this.constructor.defaultViewInfo();\n this._scrollInfo = { horizontal: false, vertical: false };\n }\n\n static defaultViewInfo () {\n return Object.assign({}, {\n layoutDimensions: {\n border: this.defaultConfig().border,\n viewHeight: [0, 0, 0],\n viewWidth: [0, 0, 0]\n },\n viewMatricesInfo: {\n columnPages: 0,\n rowPages: 0,\n matrices: { top: [], center: [], bottom: [] }\n }\n });\n }\n\n /**\n * Returns initial set of measurements for the grid layout\n *\n * @static\n * @return {Object} Returns initial set of measurements\n * @memberof GridLayout\n */\n static defaultMeasurement () {\n return DEFAULT_MEASUREMENTS;\n }\n\n /**\n * Returns initialconfiguration for grid layout\n *\n * @static\n * @return {Object} Returns initial configuration for grid layout\n * @memberof GridLayout\n */\n static defaultConfig () {\n return DEFAULT_CONFIGURATION;\n }\n\n /**\n * This function is used to return an instance of GridLayout\n *\n * @return {GridLayout} Instance of grid layout.\n * @static\n * @memberof GridLayout\n */\n static create () {\n return new GridLayout(null, null, this.defaultMeasurement(), this.defaultConfig());\n }\n\n /**\n * Sets/Gets the matrices for the layout\n *\n * @param {Array} matrices Set of matrices\n * @return {Object} Getter/Setter\n * @memberof GridLayout\n */\n matrices (matrices) {\n if (matrices) {\n this._matrices = generateVisualMatrices(this, matrices);\n return this;\n }\n return super.matrices(matrices);\n }\n\n /**\n * Triggers the computations for the layout based on the matrices available\n * This causes a reflow in the entire layout system.\n *\n * @return {Object} Layout instance\n * @memberof GridLayout\n */\n triggerReflow () {\n this.scrollInfo({ horizontal: false, vertical: false });\n const {\n maxHeightAvailableForRowMatrix,\n maxWidthAvailableForColumnMatrix\n } = computeLayoutMeasurements(this);\n\n this.setViewInformation(maxHeightAvailableForRowMatrix, maxWidthAvailableForColumnMatrix);\n return this;\n }\n\n gotoPage (type, pageNumber) {\n const pageType = type.toLowerCase();\n const { viewMatricesInfo } = this.viewInfo();\n const totalPages = viewMatricesInfo[`${pageType}Pages`];\n const pointer = Math.min(Math.max(1, pageNumber), totalPages);\n this.config({\n [`${pageType}Pointer`]: pointer - 1\n });\n this.setViewInformation();\n this.renderGrid();\n return this;\n }\n\n pages (type) {\n const { viewMatricesInfo } = this.viewInfo();\n const pageType = type.toLowerCase();\n return {\n totalPages: viewMatricesInfo[`${pageType}Pages`],\n currentPage: this.config()[`${pageType}Pointer`] + 1\n };\n }\n\n viewInfo (...viewInfo) {\n if (viewInfo.length) {\n this._viewInfo = viewInfo[0];\n return this;\n }\n return this._viewInfo;\n }\n\n scrollInfo (...scrollInfo) {\n if (scrollInfo.length) {\n this._scrollInfo = mergeRecursive(this._scrollInfo, scrollInfo[0]);\n return this;\n }\n return this._scrollInfo;\n }\n\n /**\n *\n *\n * @returns\n * @memberof GridLayout\n */\n setViewInformation (maxRowHeight, maxColWidth) {\n const {\n rowPointer,\n columnPointer,\n border\n } = this.config();\n const viewMatricesInfo = getViewMatrices(this, rowPointer, columnPointer);\n const layoutDimensions = getViewMeasurements(this, maxRowHeight, maxColWidth);\n layoutDimensions.border = border;\n this.viewInfo({\n viewMatricesInfo,\n layoutDimensions\n });\n return this;\n }\n}\n","import RowMatrix from '../visual-matrix/row-matrix';\nimport ColumnMatrix from '../visual-matrix/column-matrix';\n\nexport const generateVisualMatrices = (context, matrices) => {\n // Set of matrices for layout is generated starting with the left matrix\n let leftMatrix = [];\n let rightMatrix = [];\n let topMatrix = [];\n let bottomMatrix = [];\n let begColCells;\n let endColCells;\n const {\n isRowSizeEqual,\n isColumnSizeEqual,\n gutterSpace,\n distribution,\n border,\n breakPage,\n priority\n } = context.config();\n const {\n minUnitHeight,\n minUnitWidth\n } = context.measurement();\n const { top, center, bottom } = matrices;\n const [topLeft, topColumns, topRight] = top;\n const [leftRows, valueMatrix, rightRows] = center;\n const [bottomLeft, bottomColumns, bottomRight] = bottom;\n\n if (leftRows.length > 0) {\n // If no left matrix is present, context will be empty\n leftMatrix = [...topLeft, ...leftRows, ...bottomLeft];\n }\n if (rightRows.length > 0) {\n // If no right matrix is present, context will be empty\n rightMatrix = [...topRight, ...rightRows, ...bottomRight];\n }\n if (topColumns.length > 0 && topColumns[0].length > 0) {\n // If no top matrix is present, context will be empty\n topMatrix = topColumns.map((d, i) => [...topLeft[i], ...d, ...topRight[i]]);\n }\n if (bottomColumns.length > 0 && bottomColumns[0].length > 0) {\n // If no bottom matrix is present, context will be empty\n bottomMatrix = bottomColumns.map((d, i) => [...bottomLeft[i], ...d, ...bottomRight[i]]);\n }\n\n context.rowMatrix(new RowMatrix([leftMatrix, rightMatrix], {\n isDistributionEqual: isRowSizeEqual,\n distribution: distribution.rows,\n gutter: gutterSpace.rows,\n unitMeasures: {\n width: minUnitWidth,\n height: minUnitHeight,\n border: border.width\n },\n priority: priority.row,\n breakPage: breakPage.rows.map(e => e + Math.max(topLeft.length, topRight.length)),\n extraCellLengths: [topLeft.length, bottomLeft.length]\n }));\n\n if (topLeft.length > 0) {\n begColCells = topLeft[0].length;\n } else {\n begColCells = bottomLeft.length > 0 ? bottomLeft[0].length : 0;\n }\n\n if (topRight.length > 0) {\n endColCells = topRight[0].length;\n } else {\n endColCells = bottomRight.length > 0 ? bottomRight[0].length : 0;\n }\n\n context.columnMatrix(new ColumnMatrix([topMatrix, bottomMatrix], {\n isDistributionEqual: isColumnSizeEqual,\n distribution: distribution.columns,\n gutter: gutterSpace.columns,\n isTransposed: true,\n unitMeasures: {\n width: minUnitWidth,\n height: minUnitHeight,\n border: border.width\n },\n priority: priority.col,\n breakPage: breakPage.columns,\n extraCellLengths: [begColCells, endColCells]\n }));\n context.centerMatrix(valueMatrix);\n\n return matrices;\n};\n","import {\n TOP, BOTTOM, LEFT, RIGHT, CENTER, BLANK_BORDERS, COLUMN, ROW,\n VIEW_INDEX, ROW_MATRIX_INDEX, COLUMN_MATRIX_INDEX, MIDDLE, NO_BORDERS\n} from '../enums/constants';\n\nconst borderMap = {\n [`${TOP}-${LEFT}`]: NO_BORDERS,\n [`${TOP}-${MIDDLE}`]: COLUMN,\n [`${TOP}-${RIGHT}`]: NO_BORDERS,\n [`${CENTER}-${LEFT}`]: ROW,\n [`${CENTER}-${MIDDLE}`]: CENTER,\n [`${CENTER}-${RIGHT}`]: ROW,\n [`${BOTTOM}-${LEFT}`]: NO_BORDERS,\n [`${BOTTOM}-${MIDDLE}`]: COLUMN,\n [`${BOTTOM}-${RIGHT}`]: NO_BORDERS\n};\n\nconst applySpecificBorder = (cells, color, type, style) => {\n cells.style(`border-${type}`, `${style} ${color}`);\n};\n\nconst specificBorderApplier = (borderTypes, showBorders, cells, borderInfo) => {\n const {\n color,\n width,\n style\n } = borderInfo;\n const borderStyle = `${width}px ${style}`;\n\n borderTypes.forEach((borderType) => {\n applySpecificBorder(cells, showBorders[borderType] ? color : BLANK_BORDERS, borderType, borderStyle);\n });\n};\n\nconst borderApplier = (cells, borderInfo) => {\n const {\n showRowBorders,\n showColBorders,\n showValueBorders\n } = borderInfo;\n return {\n row: () => specificBorderApplier([TOP, BOTTOM], showRowBorders, cells, borderInfo),\n column: () => specificBorderApplier([LEFT, RIGHT], showColBorders, cells, borderInfo),\n center: () => specificBorderApplier([LEFT, RIGHT, TOP, BOTTOM], showValueBorders, cells, borderInfo)\n };\n};\n\nexport const applyBorders = (cells, border, row, column) => {\n const borderApplierFn = borderApplier(cells, border);\n const borderMapVal = borderMap[`${ROW_MATRIX_INDEX[VIEW_INDEX[row]]}-${COLUMN_MATRIX_INDEX[column]}`];\n if (borderMapVal) {\n borderApplierFn[borderMapVal]();\n }\n};\n","import { selectElement } from 'muze-utils';\nimport {\n TOP, BOTTOM, ROW_SPAN, COL_SPAN, CENTER, ROW, COLUMN\n} from '../enums/constants';\n\nconst orderMaker = arr => Array.from(Array(arr.length).keys());\n\nconst nestByStack = (stack, updateArr, optionalParams = {}) => {\n let {\n order,\n keyFn\n } = optionalParams;\n const arr = updateArr.slice();\n const currStack = stack.slice();\n const prevStack = currStack.slice();\n // Order in which element are to be checked for nesting, default normal looping\n // Order is always in the order of nest, i.e., left to right\n order = order || Array.from(Array(arr.length).keys());\n\n // Key function, if array of objects\n keyFn = keyFn || (v => v);\n\n // Return same array if stack is empty\n if (currStack.length === 0) {\n const newArr = [];\n order.forEach((e) => {\n newArr.push(arr[e]);\n });\n return { prevStack, currStack: arr, arr: newArr };\n }\n\n let arrVal = '';\n let stackVal = '';\n const newArr = [];\n\n // Loop in order\n for (let i = order.length - 1; i >= 0; i--) {\n // Get current element index from the order given\n const currElemIndex = order[i];\n\n // Crete a hashmap for the hierarchy by joining strings of the array for both stack and input array\n arrVal += keyFn(arr[currElemIndex]);\n stackVal += keyFn(currStack[currElemIndex]);\n\n // If the current value and value in stack is same, convert it to null\n if (arrVal === stackVal) {\n newArr[currElemIndex] = null;\n } else {\n stackVal = '';\n // Loop from the current index in order to the last element in order to change the\n // whole hierarchy\n for (let j = i; j < order.length; j++) {\n const newElem = order[j];\n const arrElem = arr[newElem];\n\n newArr[newElem] = arrElem;\n\n // Reset stack to new stack\n currStack[newElem] = arrElem;\n stackVal = arrVal;\n }\n }\n }\n const returnArr = [];\n order.forEach((e) => {\n returnArr.push(newArr[e]);\n });\n return { prevStack, currStack, arr: returnArr };\n};\n\nconst spanCalculator = (colData, colIdx, matrix, rIdx) => {\n // if data is not header cell then rowspan\n // has to be 1\n if (!colData) {\n return () => 1;\n }\n\n const conditions = {\n row: count => matrix[rIdx + count] && matrix[rIdx + count][colIdx],\n column: count => matrix[rIdx][colIdx + count]\n };\n\n return (type) => {\n let count = 1;\n let isNull = false;\n\n while (!isNull) {\n if (conditions[type](count) === null) {\n count += 1;\n } else {\n isNull = true;\n }\n }\n return count;\n };\n};\n\nconst maskCreator = (matrix, order) => ({\n row: () => {\n let stack = [];\n return matrix.map((e) => {\n const {\n currStack,\n arr\n } = nestByStack(stack, e, { keyFn: val => val.valueOf(), order });\n\n stack = currStack;\n return arr;\n });\n },\n column: () => {\n let stack = [];\n const viewMatrix = [];\n matrix.length && matrix[0].forEach((cell, colIndex) => {\n const hierarchy = [];\n matrix.forEach((row) => {\n hierarchy.push(row[colIndex]);\n });\n const {\n currStack,\n arr\n } = nestByStack(stack, hierarchy, { keyFn: val => val.valueOf(), order });\n stack = currStack;\n\n matrix.forEach((row, rowIndex) => {\n viewMatrix[rowIndex] = viewMatrix[rowIndex] || [];\n viewMatrix[rowIndex][colIndex] = arr[rowIndex];\n });\n });\n return viewMatrix;\n }\n});\n\nconst spanGenerator = viewMatrix => ({\n row: () => {\n const spans = [];\n viewMatrix.forEach((row, ridx) => {\n spans[ridx] = spans[ridx] || [];\n row.forEach((col, i) => {\n if (viewMatrix[ridx][i]) {\n const currSpan = spanCalculator(col, i, viewMatrix, ridx)('row');\n currSpan && spans[ridx].push(currSpan);\n }\n });\n });\n return spans;\n },\n column: () => viewMatrix.map((row, ridx) => row.map((col, i) => spanCalculator(col, i, viewMatrix, ridx)('column'))\n .filter(col => col !== 1))\n});\n\nconst getOrder = isReverse => ({\n row: (matrix) => {\n if (isReverse) {\n return orderMaker(matrix[0]).reverse();\n }\n return orderMaker(matrix[0]);\n },\n column: (matrix) => {\n if (isReverse) {\n return orderMaker(matrix).reverse();\n }\n return orderMaker(matrix);\n }\n});\n\nconst matrixSpanGeneratorMap = {\n [`${TOP}-1`]: {\n orderGetter: getOrder(false)[COLUMN],\n viewMatrixMaker: (...params) => maskCreator(...params)[COLUMN],\n spanMaker: (...params) => spanGenerator(...params)[COLUMN]\n },\n [`${BOTTOM}-1`]: {\n orderGetter: getOrder(true)[COLUMN],\n viewMatrixMaker: (...params) => maskCreator(...params)[COLUMN],\n spanMaker: (...params) => spanGenerator(...params)[COLUMN]\n },\n [`${CENTER}-0`]: {\n orderGetter: getOrder(false)[ROW],\n viewMatrixMaker: (...params) => maskCreator(...params)[ROW],\n spanMaker: (...params) => spanGenerator(...params)[ROW]\n },\n [`${CENTER}-2`]: {\n orderGetter: getOrder(true)[ROW],\n viewMatrixMaker: (...params) => maskCreator(...params)[ROW],\n spanMaker: (...params) => spanGenerator(...params)[ROW]\n }\n};\n\nconst matrixSpanGenerator = (type) => {\n const generator = matrixSpanGeneratorMap[type];\n if (generator) {\n return generator;\n }\n return {\n orderGetter: () => null,\n viewMatrixMaker: matrix => () => matrix,\n spanMaker: () => () => null\n };\n};\n\n/**\n * This function is used to set the col and row spans\n * for the matrices based on repeated/hierarchichal data\n *\n * @export\n * @param {Array} matrix The 2d array for which filtering is to be done\n * @param {string} type Type of array (center, top, bottom)\n * @param {number} index Index of array in the row\n * @return {Object} containing the view matrix and their spans\n */\nexport function cellSpanMaker (matrix, type, index) {\n let spans = null;\n let viewMatrix = matrix;\n const {\n orderGetter,\n viewMatrixMaker,\n spanMaker\n } = matrixSpanGenerator(`${type}-${index}`);\n\n if (matrix.length) {\n const order = orderGetter(matrix);\n viewMatrix = viewMatrixMaker(matrix, order)();\n spans = spanMaker(viewMatrix)();\n }\n return { viewMatrix, spans };\n}\n\nconst spaceAllocationDueToSpan = (span = 1, placeholder, config, index) => {\n const height = placeholder.availHeight();\n const width = placeholder.availWidth();\n const borderWidth = config.border.width;\n const { unitWidths } = config.dimensions;\n const { col } = index;\n\n return {\n [ROW_SPAN] () {\n placeholder.setAvailableSpace(width, height * span);\n },\n [COL_SPAN] () {\n if (span > 1) {\n let cumulativeWidth = 0;\n for (let i = col; i < col + span; i++) {\n cumulativeWidth += unitWidths.primary[i] - borderWidth;\n }\n placeholder.setAvailableSpace(cumulativeWidth + borderWidth, height);\n }\n selectElement(this).style('height', `${height}px`);\n }\n };\n};\n\nconst spanApplier = (cells, spans, config, type) => {\n let cellCounter = 0;\n cells.attr(type, function (cell, colIndex) {\n const span = spans[cell.rowIndex][colIndex];\n const placeholder = cell.placeholder;\n const index = {\n row: cell.rowIndex,\n col: cellCounter\n };\n\n spaceAllocationDueToSpan(span, placeholder, config, index)[type].bind(this)();\n cellCounter += span;\n return span;\n });\n};\n\nconst spanApplierMap = {\n [`${TOP}-0`]: null,\n [`${TOP}-1`]: (...params) => spanApplier(...params, COL_SPAN),\n [`${TOP}-2`]: null,\n [`${CENTER}-0`]: (...params) => spanApplier(...params, ROW_SPAN),\n [`${CENTER}-1`]: null,\n [`${CENTER}-2`]: (...params) => spanApplier(...params, ROW_SPAN),\n [`${BOTTOM}-0`]: null,\n [`${BOTTOM}-1`]: (...params) => spanApplier(...params, COL_SPAN),\n [`${BOTTOM}-2`]: null\n};\n\nexport const applySpans = (cells, spans, config, type) => {\n const applier = spanApplierMap[type];\n if (applier) {\n applier(cells, spans, config);\n }\n};\n","import { ERROR_MSG } from 'muze-utils';\n/**\n * An Interface to be implemented if the transaction support is necessary. This class ensures reactivity to\n * global properties.\n */\nexport default class TransactionSupport {\n /**\n * Property accessor for data member of the class. Data is passed to the system by calling this method.\n */\n data () {\n throw new Error(ERROR_MSG.INTERFACE_IMPl);\n }\n\n /**\n * Property accessor for width of the class. Width is passed as an integer.\n */\n width () {\n throw new Error(ERROR_MSG.INTERFACE_IMPl);\n }\n\n /**\n * Property accessor for height of the class. Height is passed as an integer.\n */\n height () {\n throw new Error(ERROR_MSG.INTERFACE_IMPl);\n }\n\n /**\n * Property accessor for config of the class. Config is passed as an object.\n */\n config () {\n throw new Error(ERROR_MSG.INTERFACE_IMPl);\n }\n}\n","import { TOP, BOTTOM, LEFT, TITLE, SUB_TITLE, GROUP, LAYOUT, LEGEND } from '../constants';\n\n/**\n *\n *\n * @param {*} context\n *\n */\nexport const arrangeComponents = (context) => {\n const legendConfig = context.config().legend;\n const titleConfig = context.title()[1];\n const subtitleConfig = context.subtitle()[1];\n const titleLayouts = {\n [`${TOP}-${TOP}`]: [TITLE, SUB_TITLE, GROUP],\n [`${BOTTOM}-${BOTTOM}`]: [GROUP, SUB_TITLE, TITLE],\n [`${TOP}-${BOTTOM}`]: [TITLE, GROUP, SUB_TITLE],\n [`${BOTTOM}-${TOP}`]: [SUB_TITLE, GROUP, TITLE]\n };\n const legendLayouts = [\n [LEGEND, LAYOUT],\n [LAYOUT, LEGEND]\n ];\n const titlePosition = titleConfig.position || TOP;\n const subtitlePosition = subtitleConfig.position || TOP;\n\n return {\n headers: titleLayouts[`${titlePosition}-${subtitlePosition}`],\n legends: legendConfig.position === LEFT || legendConfig.position === TOP ?\n legendLayouts[0] : legendLayouts[1]\n };\n};\n","/**\n * Flag to specify whether direction is vertical.\n */\nexport const MARGIN = 'margin';\nexport const LEFT = 'left';\nexport const RIGHT = 'right';\nexport const BOTTOM = 'bottom';\nexport const TOP = 'top';\nexport const SPACE_FIXER = 'spaceFixer';\nexport const CLASSPREFIX = 'muze';\nexport const VERTICAL_ALIGN = 'verticalAlign';\nexport const TEXT_ALIGN = 'textAlign';\nexport const IS_OFFSET = 'isOffset';\nexport const MIDDLE = 'middle';\nexport const BASELINE = 'baseline';\nexport const SHOW = 'show';\nexport const CENTER = 'center';\nexport const TEXT = 'text';\nexport const HEADER = 'header';\nexport const HEIGHT = 'height';\nexport const WIDTH = 'width';\nexport const DATA = 'data';\nexport const AXES = 'axes';\nexport const FACET_BY_FIELDS = 'facetByFields';\nexport const FIELDS = 'fields';\nexport const TRANSFORM = 'transform';\nexport const LAYER_DEF = 'layerDef';\nexport const CONFIG = 'config';\nexport const DETAIL_FIELDS = 'detailFields';\nexport const MAX_LINES = 'maxLines';\nexport const MIN_CHARS = 'minCharacters';\nexport const ROTATION = 'rotation';\n\nexport const TEXT_CELL = 'text-cell';\nexport const AXIS_CELL = 'axis-cell';\nexport const GEOM_CELL = 'geom-cell';\nexport const BLANK_CELL = 'blank-cell';\n","// eneum to refer to simple cell\nexport const SIMPLE = 'simple';\n// eneum to refer to header cell\nexport const TEXT = 'text';\n// enum to refer to axis cell\nexport const AXIS = 'axis';\n// enum to refer to visual cell\nexport const GEOM = 'geom';\n// enum to refer blank cell\nexport const BLANK = 'blank';\n","import {\n ERROR_MSG,\n getUniqueId,\n mergeRecursive\n} from 'muze-utils';\nimport { SIMPLE } from './enums/cell-type';\n\n/**\n * This file declares a class that is used as an interface to create new\n * SimpleCell elements.\n * @module SimpleCell\n */\n/**\n * Base class for all table cells.\n *\n * @interface\n * @class SimpleCell\n */\nclass SimpleCell {\n\n /**\n * Creates an instance of SimpleCell.\n *\n * @param {*} config The input configuration.\n * @memberof SimpleCell\n */\n constructor (config) {\n this._id = getUniqueId();\n\n const defConfig = mergeRecursive({}, this.constructor.defaultConfig());\n this._config = mergeRecursive(defConfig, config || {});\n\n this._mount = null;\n }\n\n /**\n * Returns the type of the placehlder.\n *\n * @readonly\n * @memberof SimpleCell\n */\n get type () {\n return SIMPLE;\n }\n\n /**\n * Returns the type of the placehlder.\n *\n * @readonly\n * @memberof SimpleCell\n * @return {Object} Default config for the placeholder\n */\n static defaultConfig () {\n return {};\n }\n\n /**\n * Returns the value contained by the SimpleCell.\n *\n * @memberof SimpleCell\n */\n valueOf () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Returns a unique identifier for the instance used\n * to control selective rendering.\n *\n * @memberof SimpleCell\n */\n id () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Returns a serialized representation of the instance.\n *\n * @memberof SimpleCell\n */\n serialize () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Returns an object with width and height fields\n * specifying the space taken up by this metod.\n *\n * @memberof SimpleCell\n */\n getLogicalSpace () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Method used to set the space available to render the SimpleCell\n *\n * @param {number} width The available width.\n * @param {number} height The available height.\n * @memberof SimpleCell\n */\n setAvailableSpace () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Render the SimpleCell inthe supplied mount point.\n *\n * @param {HTMLElement} mount The mount point to render in.\n * @memberof SimpleCell\n */\n render () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Render the SimpleCell inthe supplied mount point.\n *\n * @param {HTMLElement} mount The mount point to render in.\n * @memberof SimpleCell\n */\n remove () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n getMinMeasures (providedMinMeasure = 0) {\n return providedMinMeasure;\n }\n\n}\n\nexport default SimpleCell;\n","/**\n * This file exports variables that are used as defaults for\n * the placeholders\n */\nimport * as CONSTANTS from './constants';\n\n /**\n * Default Configuration for the cells\n * @return {Object} Default configuration\n */\nexport const DEFAULT_CONFIG = {\n [CONSTANTS.MARGIN]: {\n [CONSTANTS.LEFT]: 0,\n [CONSTANTS.RIGHT]: 0,\n [CONSTANTS.TOP]: 0,\n [CONSTANTS.BOTTOM]: 0\n },\n [CONSTANTS.SPACE_FIXER]: 2,\n [CONSTANTS.IS_OFFSET]: false,\n [CONSTANTS.VERTICAL_ALIGN]: null,\n [CONSTANTS.TEXT_ALIGN]: CONSTANTS.CENTER,\n [CONSTANTS.SHOW]: true,\n [CONSTANTS.MAX_LINES]: 0,\n [CONSTANTS.MIN_CHARS]: 0,\n [CONSTANTS.ROTATION]: null\n};\n","import { mergeRecursive } from 'muze-utils';\nimport { GEOM, TEXT, AXIS, BLANK } from './enums/cell-type';\n\nconst DEFAULT_PROPS = {\n mount: {},\n availHeight: {},\n availWidth: {},\n config: {\n sanitization: (context, value) => mergeRecursive(context._config, value)\n },\n logicalSpace: {},\n minSpacing: {},\n source: {}\n};\n\nconst geomProps = {\n data: {},\n caption: {},\n config: {},\n axes: {},\n facetByFields: {},\n fields: {},\n transform: {},\n layerDef: {},\n detailFields: {}\n};\n\nconst textProps = {\n smartText: {}\n};\nexport const PROPS = {\n [GEOM]: mergeRecursive(geomProps, DEFAULT_PROPS),\n [TEXT]: mergeRecursive(textProps, DEFAULT_PROPS),\n [AXIS]: DEFAULT_PROPS,\n [BLANK]: DEFAULT_PROPS\n};\n","/**\n * This file declares a class that represents a table cell\n * used to house an axis.\n * @module VisualCell\n */\nimport { selectElement, makeElement, generateGetterSetters } from 'muze-utils';\nimport { CLASSPREFIX, HEIGHT, WIDTH, AXIS_CELL, BOTTOM, TOP } from './enums/constants';\nimport SimpleCell from './simple-cell';\nimport { DEFAULT_CONFIG } from './enums/defaults';\nimport { AXIS } from './enums/cell-type';\nimport { PROPS } from './props';\n\n/**\n * Computes the logical space of the an axis instance within an axis cell\n *\n * @param {Object} context Required to get the needed parameters to compute axis space\n * @return {Object} Returns the logical space for axis\n */\nconst computeAxisSpace = (context) => {\n let logicalWidth;\n let logicalHeight;\n const axis = context.source();\n const {\n spaceFixer,\n margin\n } = context.config();\n const {\n width,\n height\n } = axis.getLogicalSpace();\n const {\n show\n } = axis.config();\n if (show === true) {\n logicalHeight = Math.floor(height + margin.top + margin.bottom + spaceFixer);\n logicalWidth = Math.floor(width + margin.left + margin.right + spaceFixer);\n } else {\n [logicalWidth, logicalHeight] = [width, height];\n }\n return {\n width: logicalWidth,\n height: logicalHeight\n };\n};\n\n/**\n * Represents an axis cell.\n *\n * @class Axis\n */\nclass AxisCell extends SimpleCell {\n\n /**\n * Creates an instance of AxisCell.\n *\n * @param {Object} config The input config.\n * @memberof AxisCell\n */\n constructor (config) {\n super(config);\n\n this._axis = null;\n this._availHeight = null;\n this._availWidth = null;\n this._logicalSpace = null;\n\n generateGetterSetters(this, PROPS[AXIS]);\n }\n\n /**\n * return the type pf SimpleCell cell.\n *\n * @readonly\n * @memberof AxisCell\n */\n get type () {\n return AXIS;\n }\n\n /**\n * This method return the value conatined by this SimpleCell.\n *\n * @return {SimpleAxis | ColorAxis} Instance of SimpleAxis or ColorAxis.\n * @memberof AxisCell\n */\n valueOf () {\n return this.source().id;\n }\n\n /**\n * This method return the unique identififer of the axis\n *\n * @return {string} Id of the axis.\n * @memberof AxisCell\n */\n get id () {\n return this._id;\n }\n\n /**\n * Retrns the serialized representation of this cell.\n *\n * @return {Object}Object with serializable props.\n * @memberof AxisCell\n */\n serialize () {\n return {\n type: AXIS,\n axis: this.source().serialize()\n };\n }\n\n /**\n * return the default configuration for the text cell\n *\n * @static\n * @return {Object} Default configuration of the cell\n * @memberof AxisCell\n */\n static defaultConfig () {\n return DEFAULT_CONFIG;\n }\n\n /**\n * return the space taken up by an axis element in the dom.\n *\n * @return {Object} Object with width and height fields.\n * @memberof AxisCell\n */\n getLogicalSpace () {\n if (!this.logicalSpace()) {\n this.logicalSpace(computeAxisSpace(this));\n }\n return this.logicalSpace();\n }\n\n /**\n * This method is used to set the space availiable to render\n * the SimpleCell.\n *\n * @param {number} width The width of SimpleCell.\n * @param {number} height The height of SimpleCell.\n * @return {Instance} Returns current Instance\n * @memberof AxisCell\n */\n setAvailableSpace (width, height) {\n this.availWidth(width);\n this.availHeight(height);\n const {\n margin,\n isOffset\n } = this.config();\n\n if (width || height) {\n this.source().setAvailableSpace(width, height, margin, isOffset);\n this.source().logicalSpace(null);\n } else {\n this.source().resetLogicalSpace();\n }\n this.logicalSpace(null);\n return this;\n }\n\n /**\n * This method is used to render the axis inside the axis cell.\n *\n * @param {HTMLElement} mount The mount point.\n * @return {Selection} node where axis mounted\n * @memberof AxisCell\n */\n /* istanbul ignore next */render (mount) {\n if (!mount) {\n return this;\n }\n let actualWidth = 0;\n let actualHeight = 0;\n const axis = this.source();\n const availHeight = this.availHeight();\n const availWidth = this.availWidth();\n const {\n margin\n } = this.config();\n const {\n top,\n bottom,\n left,\n right\n } = margin;\n const {\n show,\n orientation\n } = axis.config();\n const wrapperDiv = makeElement(selectElement(mount), 'div', [this], `${CLASSPREFIX}-${AXIS_CELL}`);\n const selection = makeElement(wrapperDiv, 'svg', [1], `${CLASSPREFIX}-axis-container`);\n selection.classed(`${CLASSPREFIX}-axis-container-${orientation}`, true);\n\n this.mount(mount);\n if (!availWidth) {\n selection.attr(WIDTH, `${0}px`);\n }\n if (!availHeight) {\n selection.attr(HEIGHT, `${0}px`);\n }\n actualWidth = availWidth;\n actualHeight = availHeight;\n if (!show) {\n actualWidth = (orientation === TOP || orientation === BOTTOM) ? availWidth : 0;\n actualHeight = (orientation === TOP || orientation === BOTTOM) ? 0 : availHeight;\n }\n wrapperDiv.style(WIDTH, `${actualWidth}px`)\n .style(HEIGHT, `${actualHeight}px`)\n .style('margin-top', top)\n .style('margin-bottom', bottom)\n .style('margin-left', left)\n .style('margin-right', right);\n\n axis.mount(selection.node());\n return selection;\n }\n\n /**\n * Disposes the cell\n *\n * @return {Instance} Current instance of AxisCell\n * @memberof AxisCell\n */\n remove () {\n this.source() && this.source().remove();\n this.mount() && this.mount().remove();\n return this;\n }\n}\n\nexport default AxisCell;\n\n","/**\n * This file declares a class that represents a BLANK element in a table.\n * @module VisualCell\n */\nimport {\n selectElement,\n makeElement,\n applyStyle,\n generateGetterSetters\n } from 'muze-utils';\nimport SimpleCell from './simple-cell';\nimport { CLASSPREFIX, BLANK_CELL } from './enums/constants';\nimport { BLANK } from './enums/cell-type';\nimport { DEFAULT_CONFIG } from './enums/defaults';\nimport { PROPS } from './props';\n\n/**\n * Represents a table haeder.\n *\n * @class BLANK\n */\nclass BlankCell extends SimpleCell {\n\n /**\n * Creates an instance of BLANK.\n * @param {Object} config The input configuration.\n * @memberof BLANK\n */\n constructor (config) {\n super(config);\n\n generateGetterSetters(this, PROPS[BLANK]);\n }\n\n /**\n * return the type pf SimpleCell cell.\n *\n * @readonly\n * @memberof BlankCell\n */\n get type () {\n return BLANK;\n }\n\n /**\n * This method return the value contained by this SimpleCell.\n *\n * @return {string} The text value contained by this cell.\n * @memberof BlankCell\n */\n valueOf () {\n return this.id;\n }\n\n /**\n * return the default configuration for the text cell\n *\n * @static\n * @return {Object} Default configuration of the cell\n * @memberof BlankCell\n */\n static defaultConfig () {\n return DEFAULT_CONFIG;\n }\n\n /**\n * This method is used to return a unique identifier for\n * the BLANK cell.\n *\n * @return {string} The unique identifier for the BLANK.\n * @memberof BlankCell\n */\n get id () {\n return this._id;\n }\n\n /**\n * This method is used to obtain a serialized representation of this instance.\n *\n * @return {Object} Object with serilizable props.\n * @memberof BLANK\n */\n serialize () {\n return {\n type: BLANK\n };\n }\n\n /**\n * This method return the space taken up\n * by the text with the style applied.\n *\n * @return {Object} width and height taken up by the text.\n * @memberof BLANK\n */\n getLogicalSpace () {\n if (!this.logicalSpace()) {\n return {\n width: this.width || 0,\n height: this.height || 0\n };\n }\n return this.logicalSpace();\n }\n\n /**\n * This method is used to set the available space.\n *\n * @param {number} width The available width.\n * @param {number} height The available height.\n * @return {Instance} Returns current Instance\n * @memberof BlankCell\n */\n setAvailableSpace (width, height) {\n this.availWidth(width);\n this.availHeight(height);\n this.logicalSpace(null);\n return this;\n }\n\n /**\n * This method is used to render the BLANK cell inside\n * the provided mount point.\n *\n * @param {HTMLElement} mount The mount point for this cell.\n * @return {Instance} Returns current Instance\n * @memberof BLANK\n */\n /* istanbul ignore next */render (mount) {\n if (mount) {\n const { style } = this.config();\n // append span element to mount point\n this.mount(mount);\n const container = selectElement(mount);\n const elem = makeElement(container, 'div', [this.id]);\n elem.classed(`${CLASSPREFIX}-${BLANK_CELL}`, true);\n elem.style('width', `${this.availWidth()}px`);\n elem.style('height', `${this.availHeight()}px`);\n elem.html('');\n // apply style on the returned element\n if (style) {\n applyStyle(elem, style);\n }\n } return this;\n }\n\n /**\n * Removes the cell(Disposal)\n *\n * @return {Instance} Returns current Instance\n * @memberof BlankCell\n */\n remove () {\n this.mount() && this.mount().remove();\n return this;\n }\n\n getMinMeasures () {\n return 0;\n }\n }\nexport default BlankCell;\n","/**\n * This file declares a class that represents a Text element in a table.\n * @module VisualCell\n */\n\nimport {\n selectElement,\n makeElement,\n getSmartComputedStyle,\n generateGetterSetters\n} from 'muze-utils';\nimport SimpleCell from './simple-cell';\nimport { TEXT } from './enums/cell-type';\nimport { PROPS } from './props';\nimport { DEFAULT_CONFIG } from './enums/defaults';\nimport { CLASSPREFIX, TOP, BOTTOM, LEFT, RIGHT, HEADER, WIDTH, TEXT_CELL } from './enums/constants';\nimport './text-cell.scss';\n\nconst setSmartText = (context) => {\n const source = context.source();\n const {\n height: minHeightSpace,\n width: minWidthSpace\n } = context.minSpacing();\n const {\n margin,\n rotation\n } = context.config();\n const {\n left,\n right,\n top,\n bottom\n } = margin;\n const paddedHeight = top + bottom + minHeightSpace;\n const paddedWidth = left + right + minWidthSpace;\n const availHeight = context.availHeight() - paddedHeight;\n const availWidth = context.availWidth() - paddedWidth;\n const labelManager = context.dependencies().labelManager;\n\n labelManager.setStyle(context._computedStyle);\n\n !rotation && context.smartText(labelManager.getSmartText(source, availWidth, availHeight, false));\n rotation && context.smartText(labelManager.getSmartText(source, availHeight, availWidth, true));\n\n return context;\n};\n\n/**\n* Computes the Logical Space for the text\n*\n* @param {Object} context Required to get the needed parameters to compute text space\n* @return {Object} Logical space taken up by text\n* @memberof TextCell\n*/\nconst computeTextSpace = (context) => {\n const { labelManager } = context.dependencies();\n const {\n height: minHeightSpace,\n width: minWidthSpace\n } = context.minSpacing();\n const {\n margin,\n show,\n maxLines,\n minCharacters\n } = context.config();\n const {\n left,\n right,\n top,\n bottom\n } = margin;\n const paddedHeight = top + bottom + minHeightSpace;\n const paddedWidth = left + right + minWidthSpace;\n const availHeight = context.availHeight() - paddedHeight;\n const availWidth = context.availWidth() - paddedWidth;\n const source = context.source();\n const space = context.smartText();\n const minText = new Array(minCharacters).fill('W').join('');\n const _minTextSpace = labelManager.getOriSize(minText);\n\n context.config({ rotation: false });\n if (space.width > (availWidth || 0) && maxLines) {\n space.height = space.oriTextHeight * maxLines;\n }\n if (availWidth && availWidth < space.width) {\n space.width = _minTextSpace.width;\n }\n if (availWidth && availWidth < Math.min(_minTextSpace.width, space.oriTextWidth)) {\n const smartSpace = labelManager.getSmartText(source, availHeight, _minTextSpace.height, true);\n space.width = smartSpace.height;\n space.height = smartSpace.width;\n context.config({ rotation: true });\n context.smartText(smartSpace);\n }\n\n if (show) {\n return {\n width: Math.ceil(space.width) + paddedWidth,\n height: Math.ceil(space.height) + paddedHeight\n };\n } return {\n width: 0,\n height: 0\n };\n};\n\n/**\n * Represents a table haeder.\n *\n * @class Text\n */\nclass TextCell extends SimpleCell {\n\n /**\n * Creates an instance of Text.\n * @param {Object} config The input configuration.\n * @param {string} dependencies Dependencies for the class(labelManager)\n * @memberof Text\n */\n constructor (config, dependencies) {\n super(config);\n\n this._dependencies = dependencies;\n this._className = this._config.className ||\n (this._config.type === HEADER ? `${CLASSPREFIX}-${HEADER}-cell` : `${CLASSPREFIX}-${TEXT}-cell`);\n this._computedStyle = getSmartComputedStyle(selectElement('body'), this._className);\n this._dependencies.labelManager.setStyle(this._computedStyle);\n generateGetterSetters(this, PROPS[TEXT]);\n const space = this._dependencies.labelManager.getOriSize('w');\n this.minSpacing({ width: Math.floor(space.width * 3 / 4), height: Math.floor(space.height / 2) });\n setSmartText(this);\n }\n\n /**\n * return the type pf SimpleCell cell.\n *\n * @readonly\n * @memberof TextCell\n */\n get type () {\n return TEXT;\n }\n\n /**\n * This method return the value contained by this SimpleCell.\n *\n * @return {string} The text value contained by this cell.\n * @memberof TextCell\n */\n valueOf () {\n return this.source();\n }\n\n /**\n * This method is used to return a unique identifier for\n * the Text cell.\n *\n * @return {string} The unique identifier for the Text.\n * @memberof TextCell\n */\n get id () {\n return this._id;\n }\n\n /**\n * Returns the dependencies of the instance\n *\n * @return {Object} Dependencies needed by the class\n * @memberof TextCell\n */\n dependencies () {\n return this._dependencies;\n }\n\n /**\n * This method is used to obtain a serialized representation of this instance.\n *\n * @return {Object} Object with serilizable props.\n * @memberof TextCell\n */\n serialize () {\n return {\n text: this.source(),\n type: TEXT\n };\n }\n\n /**\n * return the default configuration for the text cell\n *\n * @static\n * @return {Object} Default configuration of the cell\n * @memberof TextCell\n */\n static defaultConfig () {\n return DEFAULT_CONFIG;\n }\n\n /**\n * This method return the space taken up\n * by the text with the style applied.\n *\n * @return {Object} width and height taken up by the text.\n * @memberof Text\n */\n getLogicalSpace () {\n if (!this.logicalSpace()) {\n this.logicalSpace(computeTextSpace(this));\n }\n return this.logicalSpace();\n }\n\n /**\n * This method is used to set the available space.\n *\n * @param {number} width The available width.\n * @param {number} height The available height.\n * @return {Instance} Returns current Instance\n * @memberof TextCell\n */\n setAvailableSpace (width, height) {\n this.availWidth(width);\n this.availHeight(height);\n setSmartText(this);\n this.logicalSpace(null);\n return this;\n }\n\n /**\n * This method is used to render the Text cell inside\n * the provided mount point.\n *\n * @param {HTMLElement} mount The mount point for this cell.\n * @return {Instance} Returns current Instance\n * @memberof Text\n */\n render (mount) {\n const availWidth = this.availWidth();\n const availHeight = this.availHeight();\n const {\n margin,\n show,\n verticalAlign,\n textAlign,\n rotation\n } = this.config();\n\n this.mount(mount);\n if (show) {\n const container = selectElement(mount);\n const elem = makeElement(container, 'div', [this.id], `${CLASSPREFIX}-${TEXT_CELL}`);\n const vAlign = verticalAlign || rotation ? 'middle' : 'top';\n const {\n width,\n height\n } = this.smartText();\n const {\n height: minHeightSpace\n } = this.minSpacing();\n const translation = {\n top: width + minHeightSpace / 2,\n middle: width / 2 + minHeightSpace,\n bottom: minHeightSpace\n };\n\n container.style('vertical-align', vAlign);\n\n // Set class name\n elem.classed(this._className, true);\n\n // Apply styles\n elem.style('text-align', textAlign);\n elem.style('display', 'inline');\n elem.style('transform', rotation ? `translate(${height / 2}px,\n ${translation[vAlign]}px) rotate(-90deg)` : '');\n elem.style(WIDTH, availWidth ? `${availWidth}px` : '100%');\n [TOP, BOTTOM, LEFT, RIGHT].forEach((type) => {\n container.style(`margin-${type}`, `${margin[type]}px`);\n });\n elem.style('text-align', textAlign);\n elem.style('display', 'inline');\n // set the text as the innerHTML\n this._dependencies.labelManager.setStyle(this._computedStyle);\n elem.html(this._dependencies.labelManager.getSmartText(this.source(), availWidth, availHeight, true).text);\n }\n return this;\n }\n\n /**\n * Disposes the cell\n *\n * @return {Instance} Returns current Instance\n * @memberof TextCell\n */\n remove () {\n this.mount() && this.mount().remove();\n return this;\n }\n }\n\nexport default TextCell;\n","/**\n * This file declares a class that is used to represent a table cell\n * that houses a visual unit.\n * @module VisualCell\n */\n\nimport { selectElement, makeElement, generateGetterSetters } from 'muze-utils';\nimport SimpleCell from './simple-cell';\nimport { GEOM } from './enums/cell-type';\nimport { PROPS } from './props';\nimport {\n CLASSPREFIX, HEIGHT, WIDTH, DATA, AXES, FACET_BY_FIELDS, FIELDS, TRANSFORM, LAYER_DEF, CONFIG, GEOM_CELL,\n DETAIL_FIELDS\n} from './enums/constants';\nimport { DEFAULT_CONFIG } from './enums/defaults';\n\n/**\n * Calculates the logical space of the cell\n *\n * @param {Object} context Required to get the needed parameters to compute unit space\n * @return {Object} Logical space taken up by the unit\n * @memberof GeomCell\n */\nconst computeGeomSpace = (context) => {\n const config = context.source().config();\n const { width, height } = config;\n return {\n width: Math.ceil(width),\n height: Math.ceil(height + context.getCaptionSpace().height)\n };\n};\n\n /**\n * This class represents a SimpleCell for visual unit.\n *\n * @class GeomCell\n */\nclass GeomCell extends SimpleCell {\n\n /**\n * Creates an instance of GeomCell.\n * @param {Object} config The input configuration.\n * @memberof GeomCell\n */\n constructor (config) {\n super(config);\n\n this._unit = null;\n this._layers = null;\n this._axes = {};\n this._datamodel = {};\n this._facetByFields = {};\n this._fields = null;\n this._transform = null;\n this._caption = null;\n\n generateGetterSetters(this, PROPS[GEOM]);\n }\n\n /**\n * return the type pf SimpleCell cell.\n *\n * @readonly\n * @memberof GeomCell\n */\n get type () {\n return GEOM;\n }\n\n /**\n * This method return the value contained by this cell.\n *\n * @return {VisualUnit} Instance of visual unit contained by visual unit.\n * @memberof GeomCell\n */\n valueOf () {\n return this.source();\n }\n\n /**\n * This method is used to return the id of the\n * visual unit housed by this cell.\n *\n * @return {string} The unique id of the visual unit.\n * @memberof GeomCell\n */\n get id () {\n return this.source().id();\n }\n\n /**\n * This method return a serialized representation of\n * this instance.\n *\n * @return {Object} Object with serializable props.\n * @memberof GeomCell\n */\n serialize () {\n return {\n type: GEOM,\n unit: this.source().serialize(),\n caption: this.caption()\n };\n }\n\n /**\n * return the default configuration for the geom cell\n *\n * @static\n * @return {Object} Default configuration of the cell\n * @memberof GeomCell\n */\n static defaultConfig () {\n return DEFAULT_CONFIG;\n }\n\n /**\n * Updates the model based on the changed parameters\n *\n * @return {Instance} return instance\n * @memberof GeomCell\n */\n updateModel () {\n const unit = this.source();\n unit.lockModel();\n unit.clearCaching();\n [LAYER_DEF, TRANSFORM, AXES, FIELDS, CONFIG, DATA, AXES, FACET_BY_FIELDS, DETAIL_FIELDS].forEach((prop) => {\n this[prop]() && unit[prop](this[prop]());\n });\n unit.unlockModel();\n return this;\n }\n\n /**\n * It gives the space taken by the caption of the unit\n *\n * @return {Object} return the space taken by caption\n * @memberof GeomCell\n */\n getCaptionSpace () {\n const caption = this.caption();\n\n let captionSpace = { width: 0, height: 0 };\n if (caption) {\n captionSpace = caption.getLogicalSpace();\n }\n return captionSpace;\n }\n\n /**\n * return the space taken up by the element in the dom.\n *\n * @return {Object} Object with width and height fields.\n * @memberof GeomCell\n */\n getLogicalSpace () {\n if (!this.logicalSpace()) {\n this.logicalSpace(computeGeomSpace(this));\n }\n return this.logicalSpace();\n }\n\n /**\n * This method is used to set the space available to\n * render the SimpleCell.\n *\n * @param {number} width The available width.\n * @param {number} height The available height.\n * @return {Instance} Returns current Instance\n * @memberof GeomCell\n */\n setAvailableSpace (width, height) {\n const unit = this.source();\n\n this.availWidth(width);\n this.availHeight(height);\n unit.lockModel();\n unit.width(width).height(height - this.getCaptionSpace().height);\n unit.unlockModel();\n this.logicalSpace(null);\n return this;\n }\n\n /**\n * his method is used to render the visual unit inside the provided cell.\n *\n * @param {HTMLElement} mount The mountpoint in the table.\n * @return {Instance} Returns current Instance\n * @memberof GeomCell\n */\n render (mount) {\n if (mount) {\n this.mount(mount);\n const availHeight = this.availHeight();\n const availWidth = this.availWidth();\n const caption = this.caption();\n const wrapperDiv = makeElement(selectElement(mount), 'div', [1], `${CLASSPREFIX}-${GEOM_CELL}`);\n\n if (caption) {\n const captionDom = makeElement(wrapperDiv, 'div', [caption], `${CLASSPREFIX}-unit-caption`).node();\n caption.render(captionDom);\n }\n const selection = makeElement(wrapperDiv, 'div', [1], `${CLASSPREFIX}-unit`);\n wrapperDiv.style(WIDTH, `${availWidth}px`).style(HEIGHT, `${availHeight}px`);\n selection.style(WIDTH, `${availWidth}px`)\n .style(HEIGHT, `${availHeight - this.getCaptionSpace().height}px`);\n this.source().mount(selection.node());\n }\n return this;\n }\n\n /**\n * Disposes the cell\n *\n * @return {Object} Current instance\n * @memberof GeomCell\n */\n remove () {\n this.mount() && this.mount().remove();\n this.source().remove();\n return this;\n }\n}\n\nexport default GeomCell;\n","import AxisCell from './axis-cell';\nimport BlankCell from './blank-cell';\nimport TextCell from './text-cell';\nimport GeomCell from './geom-cell';\nimport SimpleCell from './simple-cell';\n\nimport * as CONSTANTS from './constants';\n\nexport const DEFAULT_PLACEHOLDERS = {\n [CONSTANTS.SIMPLE_CELL]: SimpleCell,\n [CONSTANTS.TEXT_CELL]: TextCell,\n [CONSTANTS.AXIS_CELL]: AxisCell,\n [CONSTANTS.GEOM_CELL]: GeomCell,\n [CONSTANTS.BLANK_CELL]: BlankCell\n};\n\n","export const SIMPLE_CELL = 'SimpleCell';\nexport const TEXT_CELL = 'TextCell';\nexport const AXIS_CELL = 'AxisCell';\nexport const BLANK_CELL = 'BlankCell';\nexport const GEOM_CELL = 'GeomCell';\n\n","import { DEFAULT_PLACEHOLDERS } from './defaults';\n\n/**\n * Creates a registry for the cells, which can be used for\n * setting a new cell or getting the registered cells\n *\n * @return {Object} Setters and getters for registered cells\n */\nconst cellRegistry = () => {\n const reg = DEFAULT_PLACEHOLDERS;\n return {\n set: (key, def) => {\n if (key in reg) {\n reg[key] = def;\n }\n return cellRegistry;\n },\n get: () => reg\n };\n};\nexport default cellRegistry;\n","import { TextCell } from '@chartshq/visual-cell';\nimport { escapeHTML } from 'muze-utils';\nimport { TOP } from '../constants';\n\n/**\n *\n *\n * @param {*} rawContent\n *\n */\nconst resolveTitleSubTitleContent = (rawContent) => {\n if (typeof rawContent === 'function' && !rawContent._sanitize) {\n return rawContent();\n }\n return escapeHTML(rawContent());\n};\n\n/**\n *\n *\n * @param {*} config\n * @param {*} cellType\n * @param {*} labelManager\n * @param {*} prevCell\n *\n */\nconst headerCreator = (config, cellType, labelManager, prevCell) => {\n let margin = {};\n const {\n content,\n classPrefix,\n maxLines\n } = config;\n const cell = prevCell || new TextCell(\n {\n type: cellType === 'title' ? 'header' : 'text',\n className: `${classPrefix}-${cellType}-cell`\n }, {\n labelManager\n })\n .config({ maxLines }).minSpacing({ width: 0, height: 0 });\n\n cell.source(content);\n cell._minTickDiff = { height: 0, width: 0 };\n\n if (config.position === TOP) {\n margin = { top: 0, bottom: config.padding };\n } else {\n margin = { top: config.padding, bottom: 0 };\n }\n cell.config({ margin });\n\n return {\n height: cell.getLogicalSpace().height,\n cell\n };\n};\n\n/**\n *\n *\n * @param {*} config\n * @param {*} type\n * @param {*} labelManager\n * @param {*} cell\n *\n */\nconst createHeading = (config, type, labelManager, prevCell) => {\n if (!config) { return ''; }\n\n return headerCreator(\n config,\n type,\n labelManager,\n prevCell\n );\n};\n\n/**\n *\n *\n * @param {*} context\n */\nexport const createHeaders = (context, canvasHeight, canvasWidth) => {\n let headerHeight = 0;\n const headers = {};\n const subtitle = context.subtitle();\n const isSubtitle = resolveTitleSubTitleContent(subtitle[0]);\n\n canvasHeight >= 200 && canvasWidth >= 200 && ['title', 'subtitle'].forEach((type) => {\n const headerOptions = context[type]();\n const content = resolveTitleSubTitleContent(headerOptions[0]);\n if (content) {\n const config = headerOptions[1];\n\n config.width = context.width();\n config.height = context.height();\n config.classPrefix = context.config().classPrefix;\n config.content = content;\n config.padding = (type === 'title' && !isSubtitle.length) ? subtitle[1].padding : config.padding;\n\n const { height, cell } = createHeading(config, type, context.dependencies().smartlabel,\n context[`${type}Cell`]);\n\n headers[`${type}Cell`] = cell;\n context._composition[type] = cell;\n headerHeight += height;\n }\n });\n return { headerHeight, headers };\n};\n\n","import { TextCell, AxisCell } from '@chartshq/visual-cell';\nimport { getValueParser, retrieveFieldDisplayName } from 'muze-utils';\nimport {\n VERTICAL, HORIZONTAL, LEFT, RIGHT, LEGEND_TYPE_MAP, PADDING, BORDER, MARGIN\n} from '../constants';\n\n/**\n *\n *\n * @param {*} legendConfig\n * @param {*} canvases\n *\n */\nexport const legendCreator = (canvas) => {\n let LegendCls;\n const dataset = [];\n const axes = canvas.getRetinalAxes();\n\n Object.entries(axes).forEach((axisInfo) => {\n const scale = axisInfo[1][0];\n const scaleType = axisInfo[0];\n const scaleProps = canvas[scaleType]();\n\n if (scaleProps.field && scale) {\n const {\n type,\n step\n } = scale.config();\n\n const stepMapper = typeof step === 'boolean' ? step : false;\n LegendCls = LEGEND_TYPE_MAP[`${type}-${stepMapper}-${scaleType}`];\n dataset.push({\n scale,\n canvas,\n fieldName: scaleProps.field,\n title: retrieveFieldDisplayName(canvas.data(), scaleProps.field),\n LegendCls,\n scaleType\n });\n }\n });\n\n return dataset;\n};\n\n/**\n *\n *\n * @param {*} legendConfig\n * @param {*} canvases\n * @param {*} measurement\n * @param {*} prevLegends\n *\n */\nexport const legendInitializer = (legendConfig, canvas, measurement, prevLegends) => {\n const legends = [];\n const {\n height,\n width,\n headerHeight\n } = measurement;\n const {\n position,\n align\n } = legendConfig;\n\n const legendInfo = legendCreator(canvas);\n const { invalidValues } = canvas.config();\n\n const parser = getValueParser(invalidValues);\n legendInfo.forEach((dataInfo, index) => {\n let legend = {};\n\n const legendMeasures = {};\n const {\n LegendCls,\n scale,\n fieldName,\n title: titleText,\n scaleType\n } = dataInfo;\n const config = legendConfig[scaleType] || {};\n const title = config.title || {};\n title.text = title.text || titleText;\n if (config.show) {\n config.position = position;\n config.align = align;\n\n if (prevLegends[index]) {\n legend = prevLegends[index].legend;\n } else {\n legend = LegendCls.create({\n labelManager: canvas._dependencies.smartlabel,\n cells: {\n AxisCell, TextCell\n }\n });\n }\n legendMeasures.maxHeight = align === VERTICAL ? (height - headerHeight) : height * 0.2;\n legendMeasures.maxWidth = align === HORIZONTAL ? width : width * 0.2;\n legendMeasures.width = Math.min(legendMeasures.maxWidth, config.width);\n legendMeasures.height = Math.min(legendMeasures.maxHeight, config.height);\n\n [PADDING, BORDER, MARGIN].forEach((e) => {\n legendMeasures[e] = config[e];\n });\n legend.scale(scale)\n .valueParser(parser)\n .title(title)\n .fieldName(fieldName)\n .config(config)\n .metaData(canvas.composition().visualGroup.getGroupByData().project([fieldName]))\n .measurement(legendMeasures)\n .canvasAlias(canvas.alias())\n .setLegendMeasures();\n\n legends.push({ canvas, legend, scaleType });\n }\n });\n return legends;\n};\n\n/**\n *\n *\n * @param {*} legends\n * @param {*} legendConfig\n * @param {*} availableHeight\n * @param {*} availableWidth\n *\n */\nexport const getLegendSpace = (legends, legendConfig, availableHeight, availableWidth) => {\n const legendMeasures = legends.map(legendInfo => legendInfo.legend.measurement());\n const legendSpace = { width: 0, height: 0 };\n\n legendMeasures.forEach((space) => {\n let height = 0;\n let width = 0;\n width = Math.min(space.width, space.maxWidth);\n height = Math.min(space.height, space.maxHeight);\n\n if (legendConfig.align === HORIZONTAL) {\n if (legendSpace.width + width > availableWidth) {\n legendSpace.width = availableWidth;\n legendSpace.height += height;\n } else {\n legendSpace.width += width;\n legendSpace.height = Math.max(legendSpace.height, height);\n }\n } else if (legendSpace.height + height > availableHeight) {\n legendSpace.height = height;\n legendSpace.width += width;\n } else {\n legendSpace.height += height;\n legendSpace.width = Math.max(legendSpace.width, width);\n }\n });\n if (legendConfig.align === HORIZONTAL) {\n legendSpace.width = availableWidth;\n }\n return legendSpace;\n};\n\n/**\n *\n *\n * @param {*} context\n * @param {*} headerHeight\n *\n */\nexport const createLegend = (context, headerHeight, height, width) => {\n const measurement = {\n height,\n width,\n headerHeight\n };\n const { legend } = context.config();\n const { show, position } = legend;\n\n legend.classPrefix = context.config().classPrefix;\n const align = (position === LEFT || position === RIGHT) ? VERTICAL : HORIZONTAL;\n\n legend.show = show ? ((align === VERTICAL && width > 200) || (align === HORIZONTAL && height > 200)) : show;\n legend.align = align;\n return legendInitializer(legend, context, measurement, context.legends || []);\n};\n","import { LayoutComponent } from '../../../../layout/src/tree-layout';\n\nexport default class MuzeComponent extends LayoutComponent {\n getLogicalSpace () {\n const { width, height } = this.boundBox();\n return { width, height };\n }\n\n setSpatialConfig (conf) {\n this.boundBox({ top: conf.y, left: conf.x });\n this.newDimensions = {\n width: conf.width,\n height: conf.height\n };\n this.renderAt(conf.renderAt);\n }\n\n getBoundBox () {\n return this.boundBox();\n }\n\n updateWrapper () {\n throw Error('Update is not implemented');\n }\n\n setParams () {\n throw Error('set params is not implemented');\n }\n}\n","import { selectElement } from 'muze-utils';\nimport MuzeComponent from './muze-chart-component';\nimport { LEFT } from '../../constants';\n\nexport default class HeaderComponent extends MuzeComponent {\n constructor (params) {\n super(params.name, params.component.getLogicalSpace(), 0);\n this.setParams(params);\n }\n\n renderHeader (container) {\n const layoutConfig = this.params.config;\n container = selectElement(container);\n const { align } = layoutConfig;\n const sel = container\n .selectAll(`.${layoutConfig.classPrefix}-inner-container`)\n .data([this.name]);\n sel.exit().remove();\n const selEnter = sel.enter().append('div');\n\n const cont = selEnter.merge(sel);\n cont.classed(`${layoutConfig.classPrefix}-inner-container`, true);\n const { height, width } = this.boundBox();\n this.component.setAvailableSpace(width, height);\n\n this.component && this.component.render(cont.node());\n\n cont.selectAll('div').classed(`${layoutConfig.classPrefix}-inner-content`, true);\n cont.style('width', `${100}%`);\n\n if (layoutConfig && this.component) {\n cont.style('float', LEFT)\n .style('text-align', align);\n // .style(`padding-${position === TOP ? BOTTOM : TOP}`, `${padding}px`);\n }\n }\n\n draw (container) {\n this.renderHeader(container || document.getElementById(this.renderAt()));\n }\n\n updateWrapper (params) {\n this.setParams(params);\n this.name(params.name);\n this.boundBox(params.component.getLogicalSpace());\n return this;\n }\n\n setParams (params) {\n this.component = params.component;\n this.params = params;\n this.target(params.config.target);\n this.position(params.config.position);\n this.className(params.config.className);\n this.alignWith(params.config.alignWith);\n this.alignment(params.config.alignment);\n }\n\n setSpatialConfig (conf) {\n this.boundBox({ top: conf.y,\n left: conf.x,\n width: conf.width,\n height: conf.height });\n this.renderAt(conf.renderAt);\n }\n}\n","import { makeElement, selectElement } from 'muze-utils';\nimport MuzeComponent from './muze-chart-component';\nimport {\n LEFT, RIGHT, VERTICAL, HORIZONTAL, TOP, BOTTOM, HORIZONTAL_CENTER, VERTICAL_CENTER\n} from '../../constants';\nimport { ROW_MATRIX_INDEX, COLUMN_MATRIX_INDEX } from '../../../../layout/src/enums/constants';\n\nfunction defaultAlignmentHelper (position) {\n let alignment = null;\n const alignWith = `${ROW_MATRIX_INDEX[1]}-${COLUMN_MATRIX_INDEX[1]}`;\n switch (position) {\n case TOP:\n case BOTTOM:\n alignment = HORIZONTAL_CENTER;\n break;\n case LEFT:\n case RIGHT:\n alignment = VERTICAL_CENTER;\n break;\n default:\n alignment = VERTICAL_CENTER;\n }\n return { alignment, alignWith };\n}\nexport default class LegendComponent extends MuzeComponent {\n constructor (params) {\n super(params.name, params.config.measurement.legendSpace, 0);\n this.setParams(params);\n }\n\n renderLegend (container) {\n container = selectElement(container);\n const sectionComponents = [];\n const { position, classPrefix } = this.params.config;\n const legendMount = makeElement(container, 'div', [this.components],\n `${classPrefix}-inner-content`, {}, d => d);\n legendMount.classed(`${classPrefix}-legend`, true);\n const align = (position === LEFT || position === RIGHT) ? VERTICAL : HORIZONTAL;\n const legWidth = this.newDimensions.width;\n const legHeight = this.newDimensions.height;\n\n [container, legendMount].forEach((elem) => {\n elem.style('width', `${Math.floor(legWidth)}px`)\n .style('height', `${legHeight}px`)\n .style('float', LEFT);\n });\n\n if (align === VERTICAL) {\n let sections = -1;\n let currHeight = legHeight;\n let currWidth = 0;\n\n this.components.forEach((legendInfo) => {\n const leg = legendInfo.legend;\n if (leg.measurement().height > currHeight) {\n sections++;\n currWidth = 0;\n currHeight = legHeight;\n } else {\n sections < 0 && sections++;\n }\n sectionComponents[sections] = sectionComponents[sections] || [];\n currHeight -= Math.min(leg.measurement().height, currHeight);\n currWidth = Math.max(Math.min(leg.measurement().width, leg.measurement().maxWidth), currWidth);\n sectionComponents[sections].push({\n legend: leg,\n legendHeight: legHeight,\n legendWidth: currWidth\n });\n });\n\n const mount = makeElement(legendMount, ['div'], sectionComponents, `${classPrefix}-legend-section`);\n // mount.each((d, i) => selectElement(this).classed(`${classPrefix}-legend-section-${i}`, true));\n mount.classed(`${classPrefix}-legend-vertical-section`, true)\n .style('width', d => `${d[0].legendWidth}px`);\n makeElement(mount, ['div'], d => d, `${classPrefix}-legend-components`, {}, d => d.legend.id())\n .each(function (d) {\n d.legend.mount(this);\n })\n .style('width', d => `${d.legendWidth}px`);\n } else {\n const mount = makeElement(legendMount, 'div', [1], `${classPrefix}-legend-section`);\n mount.classed(`${classPrefix}-legend-horizontal-section`, true);\n mount.classed(`${classPrefix}-legend-section-${0}`, true)\n .style('width', `${legWidth}px`);\n\n makeElement(mount, 'div', this.components, `${classPrefix}-legend-components`, {}, d => d.legend.id())\n .each(function (d) { d.legend.mount(this); })\n .style('width', d => `${d.legend.measurement().width}px`);\n }\n }\n\n draw (container) {\n this.renderLegend(container || document.getElementById(this.renderAt()));\n }\n\n updateWrapper (params) {\n this.name(params.name);\n this.boundBox(params.config.measurement.legendSpace);\n this.setParams(params);\n return this;\n }\n\n setParams (params) {\n this.components = params.component;\n this.params = params;\n this.target(params.config.target);\n this.position(params.config.position);\n const { alignWith, alignment } = defaultAlignmentHelper(params.config.position);\n this.className(params.config.className);\n this.alignWith(params.config.alignWith || alignWith);\n this.alignment(params.config.alignment || alignment);\n }\n\n}\n","import {\n selectElement,\n makeElement,\n getD3Drag,\n getEvent,\n getWindow,\n hasTouch\n} from 'muze-utils';\nimport './scroll-bar.scss';\nimport { WIDTH, HEIGHT } from '../../../constants';\n\nconst d3Drag = getD3Drag();\n\nconst arrowSizeMap = {\n left: WIDTH,\n right: WIDTH,\n top: HEIGHT,\n bottom: HEIGHT\n};\n\nexport const getUnitPositions = (unitMeasures, totalLength, viewLength) => {\n let currentLen = 0;\n const measures = unitMeasures.primary && unitMeasures.primary.length ?\n unitMeasures.primary : unitMeasures.secondary;\n\n return measures.map((e) => {\n const unitPosition = currentLen * 100 / (totalLength - viewLength);\n currentLen += e;\n return unitPosition;\n });\n};\n\nexport const createScrollBarArrow = (mount, type, config) => {\n const {\n classPrefix,\n thickness\n } = config;\n const arrow = makeElement(mount, 'div', [type], `${classPrefix}-scroll-arrow-${type}`);\n\n arrow.classed(`${classPrefix}-scroll-arrow`, true);\n arrow.style(arrowSizeMap[type], `${thickness}px`);\n\n const chevron = makeElement(arrow, 'div', [1], `${classPrefix}-scroll-arrow-chevron`);\n\n chevron.attr('id', `${classPrefix}-scroll-arrow-chevron-${type}`);\n\n return arrow;\n};\n\nexport const createScrollBarRect = (mount, config) => {\n const {\n classPrefix\n } = config;\n const rect = makeElement(mount, 'div', [1], `${classPrefix}-scroll-rect`);\n const mover = makeElement(rect, 'div', [1], `${classPrefix}-scroll-mover`);\n\n return { rect, mover };\n};\n\nexport const applyRectClick = (scrollMaker, moverRect) => {\n const {\n rect\n } = moverRect;\n\n rect.on('click', () => {\n const event = getEvent();\n scrollMaker.emptyScrollAreaClick(event);\n });\n};\n\nconst applyMoverDrag = (scrollMaker, moverRect) => {\n let startPos = {};\n let moverStartPos = 0;\n let rectStartPos = 0;\n let endPos = {};\n const {\n mover,\n rect\n } = moverRect;\n\n mover.call(d3Drag()\n .on('start', () => {\n const event = getEvent();\n\n moverStartPos = mover.node().getBoundingClientRect();\n rectStartPos = rect.node().getBoundingClientRect();\n startPos = {\n x: event.x,\n y: event.y\n };\n })\n .on('drag', () => {\n const event = getEvent();\n const window = getWindow();\n\n endPos = {\n x: event.x,\n y: event.y\n };\n const distanceMoved = {\n x: endPos.x - startPos.x,\n y: endPos.y - startPos.y\n };\n const actualPosition = {\n x: moverStartPos.x + distanceMoved.x - rectStartPos.x + window.pageXOffset,\n y: moverStartPos.y + distanceMoved.y - rectStartPos.y + window.pageYOffset\n };\n\n scrollMaker.changeMoverPosition(actualPosition);\n }));\n};\n\nconst applyScrollMouseDownAction = (moverRect, scrollMaker, speed) => {\n const {\n mover,\n rect\n } = moverRect;\n const { x, y } = mover.node().getBoundingClientRect();\n const { x: rectX, y: rectY } = rect.node().getBoundingClientRect();\n\n scrollMaker.changeMoverPosition({ x: x - rectX + speed, y: y - rectY + speed });\n};\n\nconst registerListenerOnArrow = (scrollMaker, moverRect, arrowType, speed) => {\n let timer = '';\n const arrow = scrollMaker._components[arrowType];\n const isTouchDevice = hasTouch();\n\n arrow.on(isTouchDevice ? 'touchstart' : 'mousedown', () => {\n const event = getEvent();\n\n event.preventDefault();\n\n timer = setInterval(() => {\n applyScrollMouseDownAction(moverRect, scrollMaker, speed);\n }, 100);\n }).on(isTouchDevice ? 'touchend' : 'mouseup', () => {\n const event = getEvent();\n\n event.preventDefault();\n\n clearInterval(timer);\n }).on('click', () => {\n applyScrollMouseDownAction(moverRect, scrollMaker, speed);\n });\n};\n\nexport const registerListeners = (scrollMaker) => {\n const {\n moverRect\n } = scrollMaker._components;\n\n const speed = scrollMaker.config().speed;\n\n registerListenerOnArrow(scrollMaker, moverRect, 'prevArrow', -speed);\n applyMoverDrag(scrollMaker, moverRect);\n applyRectClick(scrollMaker, moverRect);\n registerListenerOnArrow(scrollMaker, moverRect, 'nextArrow', speed);\n};\n\nexport const scrollContainerHelper = (mountPoint, config, dimensions, type) => {\n const {\n classPrefix\n } = config;\n const scrollBarContainer = makeElement(selectElement(mountPoint), 'div', [1], `#${classPrefix}-scroll-bar-${type}`);\n\n scrollBarContainer.classed(`${classPrefix}-scroll-bar`, true);\n scrollBarContainer.style(WIDTH, `${dimensions.width}px`);\n scrollBarContainer.style(HEIGHT, `${dimensions.height}px`);\n return scrollBarContainer;\n};\n\n","import { mergeRecursive } from 'muze-utils';\n\nexport const PROPS = {\n\n config: {\n sanitization: (context, value) => {\n value = mergeRecursive(context._config, value);\n return value;\n }\n },\n manager: {},\n unitPositions: {},\n logicalSpace: {}\n};\n\n","import { ERROR_MSG, generateGetterSetters } from 'muze-utils';\nimport {\n scrollContainerHelper,\n registerListeners\n} from './helper';\nimport { PROPS } from './props';\n\nexport class ScrollMaker {\n\n constructor () {\n this._components = {};\n this._logicalSpace = {};\n this._attachedScrollAction = () => {};\n this._config = {\n thickness: 10,\n speed: 2\n };\n this._unitPositions = null;\n\n generateGetterSetters(this, PROPS);\n }\n\n static type () {\n throw new ERROR_MSG('Method not implemented');\n }\n\n emptyScrollAreaClick () {\n throw new ERROR_MSG('Method not implemented');\n }\n\n changeMoverPosition () {\n throw new ERROR_MSG('Method not implemented');\n }\n\n scrollTo () {\n throw new ERROR_MSG('Method not implemented');\n }\n\n scrollDeltaTo () {\n throw new ERROR_MSG('Method not implemented');\n }\n\n createScroll (mountPoint) {\n const config = this.config();\n\n return {\n scrollBarContainer: scrollContainerHelper(mountPoint, config, this.logicalSpace(), this.constructor.type())\n };\n }\n\n attachScrollAction (externalScrollAction) {\n this._attachedScrollAction = externalScrollAction;\n return this;\n }\n\n detachScrollAction () {\n this._attachedScrollAction = () => {};\n return this;\n }\n\n getLogicalSpace () {\n return this.logicalSpace();\n }\n\n registerListeners () {\n registerListeners(this);\n return this;\n }\n\n remove () {\n this._components.scrollBarContainer.remove();\n return this;\n }\n}\n\n","import MuzeComponent from './muze-chart-component';\nimport { HorizontalScrollMaker } from './scroll-bar-maker/horizontal-scroll-maker';\nimport { VerticalScrollMaker } from './scroll-bar-maker/vertical-scroll-maker';\n\nconst scrollMakerMap = {\n horizontal: HorizontalScrollMaker,\n vertical: VerticalScrollMaker\n};\n\n/**\n * Scroll Component acts as a wrapper over the scoll bars created using the respective Scroll Makers\n * This provides a consistent API for layouting using the tree layout system.\n *\n *\n * @class\n * @public\n * @module ScrollComponent\n */\nexport default class ScrollComponent extends MuzeComponent {\n\n constructor (params) {\n const ScrollMaker = scrollMakerMap[params.config.type];\n\n params.component = new ScrollMaker();\n params.component.config(params.config.scrollBarComponentConfig);\n params.component.logicalSpace(params.dimensions);\n super(params.name, params.component.getLogicalSpace(), 0);\n this.setParams(params);\n }\n\n manager (...manager) {\n if (manager.length) {\n this.component.manager(manager[0]);\n return this;\n }\n return this.component.manager();\n }\n\n /**\n * Scrolls based on the actual pixel value provided. Since it's a delta change, the input will be\n * a delta between (-Infinity, Infinity), based on which the scroll will occur. Only a delta movement in\n * scroll occurs\n *\n * @public\n *\n * @param {number} delta Based on which the scroll will have a delta change in position\n * @return {ScrollComponent} Instance of the ScrollComponent\n */\n scrollDeltaTo (delta) {\n this.component.scrollDeltaTo(delta);\n return this;\n }\n\n /**\n * Scrolls to the specific point in the page. The input is provided as a percentage (0 - 100)\n *\n * @public\n *\n * @param {number} scrollPercentage Its the percentage based on which the scroll action will occur\n * @return {ScrollComponent} Instance of the ScrollComponent\n */\n scrollTo (scrollPercentage) {\n this.component.scrollTo(scrollPercentage);\n return this;\n }\n\n /**\n * Scrolls to the specific point in the page based on the unit index.\n * The input is provided as a number represting the index for the unit.\n * For vertical scroll, it's the row index that will be required.\n * For horizontal scroll, it's the column index that will be required\n *\n * @public\n *\n * @param {number} unitIndex Index of the unit appearing in the grid\n * @return {ScrollComponent} Instance of the ScrollComponent\n */\n scrollToUnitIndex (unitIndex) {\n const unitPositions = this.component.unitPositions();\n const sanitizedUnitIndex = Math.min(Math.max(0, unitIndex), unitPositions.length - 1);\n this.component.scrollTo(unitPositions[sanitizedUnitIndex]);\n return this;\n }\n\n /**\n * Provides the positions of the units(either horizontal or vertical based on the type\n * of scroll bar it wraps) relative to it's container. The position of the first unit starts at 0\n *\n *\n * @public\n *\n * @return {Array} Positions of units either horizontal or vertical\n */\n getScrollPositionsForUnits () {\n return this.component.unitPositions();\n }\n\n draw (container) {\n this.component.createScroll(container || document.getElementById(this.renderAt()));\n return this;\n }\n\n /**\n * Can be used to attach a scroll action whenever scrolling occurs in the canvas\n *\n * @public\n * @param {number} externalAction Action to be attached during scroll\n * @return {ScrollComponent} Instance of the ScrollComponent\n */\n attachScrollAction (externalAction) {\n this.component.attachScrollAction(externalAction);\n return this;\n }\n\n /**\n * Can be used to detach the scroll action already bound to the scroll bar\n *\n * @public\n * @return {ScrollComponent} Instance of the ScrollComponent\n */\n detachScrollAction () {\n this.component.detachScrollAction();\n return this;\n }\n\n updateWrapper (params) {\n this.name(params.name);\n this.component.config(params.config.scrollBarComponentConfig);\n this.component.logicalSpace(params.dimensions);\n this.boundBox(this.component.getLogicalSpace());\n this.setParams(params);\n return this;\n }\n\n setParams (params) {\n this.component = params.component || this.component;\n this.params = params;\n this.target(params.config.target);\n this.position(params.config.position);\n this.className(params.config.className);\n this.alignWith(params.config.alignWith);\n this.alignment(params.config.alignment);\n }\n\n remove () {\n this.component.remove();\n }\n}\n","import { ScrollMaker } from './scroll-maker';\nimport { createScrollBarRect, createScrollBarArrow, getUnitPositions } from './helper';\nimport { HORIZONTAL, HEIGHT, WIDTH, LEFT } from '../../../constants';\n\nexport class HorizontalScrollMaker extends ScrollMaker {\n\n /**\n * Describes the type of the ScrollMaker\n *\n * @public\n *\n * @return {String} Returns the type of scroll maker: horizontal\n */\n static type () {\n return HORIZONTAL;\n }\n\n createScroll (mountPoint, dimensions = this.logicalSpace()) {\n const config = this.config();\n const { scrollBarContainer } = super.createScroll(mountPoint, config, dimensions);\n const prevArrow = createScrollBarArrow(scrollBarContainer, 'left', config);\n const moverRect = createScrollBarRect(scrollBarContainer, config);\n const nextArrow = createScrollBarArrow(scrollBarContainer, 'right', config);\n const {\n mover,\n rect\n } = moverRect;\n\n const { height, width, totalLength, viewLength, unitWidths } = this.logicalSpace();\n const scrollBarWithouArrowLength = width - height * 2;\n\n rect.style(WIDTH, `${dimensions.width - height * 2}px`);\n rect.style(HEIGHT, `${100}%`);\n mover.style(WIDTH, `${(viewLength * scrollBarWithouArrowLength) / totalLength}px`);\n mover.style(HEIGHT, `${100}%`);\n mover.style(LEFT, `${0}px`);\n\n this._components = {\n prevArrow,\n nextArrow,\n moverRect,\n scrollBarContainer\n };\n this._scrollBarWithouArrowLength = scrollBarWithouArrowLength;\n this.unitPositions(getUnitPositions(unitWidths, totalLength, viewLength));\n this.registerListeners();\n }\n\n emptyScrollAreaClick (event) {\n const {\n mover,\n rect\n } = this._components.moverRect;\n const speed = this.config().speed;\n const { x, y } = mover.node().getBoundingClientRect();\n const { x: rectX, y: rectY } = rect.node().getBoundingClientRect();\n let positionAdjuster = speed * 10;\n if (event.x < x) {\n positionAdjuster = -speed * 10;\n }\n this.changeMoverPosition({ x: x - rectX + positionAdjuster, y: y - rectY + positionAdjuster });\n }\n\n changeMoverPosition (newPosition) {\n let currentPos;\n const {\n mover,\n rect\n } = this._components.moverRect;\n const rectStartPos = rect.node().getBoundingClientRect();\n const moverPos = mover.node().getBoundingClientRect();\n const {\n totalLength\n } = this.logicalSpace();\n\n if (newPosition.x < 0) {\n currentPos = 0;\n } else if (newPosition.x + moverPos.width > rectStartPos.width) {\n currentPos = rectStartPos.width - moverPos.width;\n } else {\n currentPos = newPosition.x;\n }\n\n mover.style(LEFT, `${currentPos}px`);\n const totalDistance = this._scrollBarWithouArrowLength;\n const movedViewLength = (currentPos * totalLength) / totalDistance;\n\n this.manager().performAttachedScrollFunction(this.constructor.type(), movedViewLength);\n }\n\n scrollDeltaTo (delta) {\n const {\n mover,\n rect\n } = this._components.moverRect;\n const moverPos = mover.node().getBoundingClientRect();\n const rectStartPos = rect.node().getBoundingClientRect();\n\n this.changeMoverPosition({ y: 0, x: moverPos.x - rectStartPos.x - delta });\n return this;\n }\n\n /**\n * Scrolls to the specific point in the page. The input is provided as a percentage (0 - 100)\n *\n * @public\n *\n * @param {number} scrollPercentage Its the percentage based on which the scroll action will occur\n * @return {HorizontalScrollMaker} Instance of the HorizontalScrollMaker\n */\n scrollTo (scrollPercentage) {\n const {\n mover\n } = this._components.moverRect;\n const moverPos = mover.node().getBoundingClientRect();\n const movement = (scrollPercentage * (this._scrollBarWithouArrowLength - moverPos.width)) / 100;\n\n this.changeMoverPosition({ y: 0, x: movement });\n return this;\n }\n\n}\n\n","import { ScrollMaker } from './scroll-maker';\nimport { createScrollBarRect, createScrollBarArrow, getUnitPositions } from './helper';\nimport { VERTICAL, TOP, HEIGHT, WIDTH } from '../../../constants';\n\nexport class VerticalScrollMaker extends ScrollMaker {\n\n /**\n * Describes the type of the ScrollMaker\n *\n * @public\n *\n * @return {String} Returns the type of scroll maker: vertical\n */\n static type () {\n return VERTICAL;\n }\n\n createScroll (mountPoint, dimensions = this.logicalSpace()) {\n const config = this.config();\n const { scrollBarContainer } = super.createScroll(mountPoint, dimensions);\n const prevArrow = createScrollBarArrow(scrollBarContainer, 'top', config);\n const moverRect = createScrollBarRect(scrollBarContainer, config);\n const nextArrow = createScrollBarArrow(scrollBarContainer, 'bottom', config);\n const {\n mover,\n rect\n } = moverRect;\n const { height, width, totalLength, viewLength, unitHeights } = this.logicalSpace();\n const scrollBarWithouArrowLength = height - width * 2;\n\n rect.style(HEIGHT, `${scrollBarWithouArrowLength}px`);\n rect.style(WIDTH, `${100}%`);\n mover.style(WIDTH, `${100}%`);\n mover.style(HEIGHT, `${(viewLength * scrollBarWithouArrowLength) / totalLength}px`);\n mover.style(TOP, `${0}px`);\n\n this._components = {\n prevArrow,\n nextArrow,\n moverRect,\n scrollBarContainer\n };\n this._scrollBarWithouArrowLength = scrollBarWithouArrowLength;\n\n this.unitPositions(getUnitPositions(unitHeights, totalLength, viewLength));\n this.registerListeners();\n }\n\n emptyScrollAreaClick (event) {\n const {\n mover,\n rect\n } = this._components.moverRect;\n const speed = this.config().speed;\n const { x, y } = mover.node().getBoundingClientRect();\n const { x: rectX, y: rectY } = rect.node().getBoundingClientRect();\n\n let positionAdjuster = speed * 10;\n if (event.y < y) {\n positionAdjuster = -speed * 10;\n }\n this.changeMoverPosition({ x: x - rectX + positionAdjuster, y: y - rectY + positionAdjuster });\n }\n\n changeMoverPosition (newPosition) {\n let currentPos;\n const {\n mover,\n rect\n } = this._components.moverRect;\n const {\n totalLength\n } = this.logicalSpace();\n const rectStartPos = rect.node().getBoundingClientRect();\n const moverPos = mover.node().getBoundingClientRect();\n\n if (newPosition.y < 0) {\n currentPos = 0;\n } else if (newPosition.y + moverPos.height > rectStartPos.height) {\n currentPos = rectStartPos.height - moverPos.height;\n } else {\n currentPos = newPosition.y;\n }\n mover.style(TOP, `${currentPos}px`);\n const totalDistance = this._scrollBarWithouArrowLength;\n const movedViewLength = (currentPos * totalLength) / totalDistance;\n\n this.manager().performAttachedScrollFunction(this.constructor.type(), movedViewLength);\n }\n\n /**\n * Scrolls based on the actual pixel value provided. Since it's a delta change, the input will be\n * a delta between (-Infinity, Infinity), based on which the scroll will occur. Only a delta movement in\n * scroll occurs\n *\n * @public\n *\n * @param {number} delta Based on which the scroll will have a delta change in position\n * @return {VerticalScrollMaker} Instance of the VerticalScrollMaker\n */\n scrollDeltaTo (delta) {\n const {\n mover,\n rect\n } = this._components.moverRect;\n const moverPos = mover.node().getBoundingClientRect();\n const rectStartPos = rect.node().getBoundingClientRect();\n\n this.changeMoverPosition({ y: moverPos.y - rectStartPos.y - delta, x: 0 });\n return this;\n }\n\n /**\n * Scrolls to the specific point in the page. The input is provided as a percentage (0 - 100)\n *\n * @public\n *\n * @param {number} scrollPercentage Its the percentage based on which the scroll action will occur\n * @return {VerticalScrollMaker} Instance of the VerticalScrollMaker\n */\n scrollTo (scrollPercentage) {\n const {\n mover\n } = this._components.moverRect;\n const moverPos = mover.node().getBoundingClientRect();\n const movement = (scrollPercentage * (this._scrollBarWithouArrowLength - moverPos.height)) / 100;\n\n this.changeMoverPosition({ x: 0, y: movement });\n return this;\n }\n\n}\n","import { makeElement } from 'muze-utils';\nimport { cellSpanMaker, applySpans } from '../../../../layout/src/grid-layout/span-maker';\nimport { applyBorders } from '../../../../layout/src/grid-layout/border-helper';\n\nimport {\n TOP, CENTER\n} from '../../../../layout/src/enums/constants';\nimport MuzeComponent from './muze-chart-component';\nimport { WIDTH, HEIGHT, HIDDEN, OVERFLOW, AUTO, VISIBLE } from '../../constants';\n\nconst renderPlaceholders = (cells) => {\n // Rendering content within placeholders\n cells.each(function (cell) {\n cell.placeholder.render(this);\n });\n};\n\nexport default class MatrixComponent extends MuzeComponent {\n\n constructor (params) {\n super(params.name, params.config.dimensions, 0);\n this.setParams(params);\n this.className(params.config.className);\n }\n\n applyScroll (container) {\n const row = this.params.config.row;\n const column = this.params.config.column;\n const { horizontal, vertical } = this.params.config.scrollInfo;\n container.style(OVERFLOW, VISIBLE);\n container.style(WIDTH, AUTO);\n container.style(HEIGHT, AUTO);\n\n if (horizontal && column === 1) {\n container.style(OVERFLOW, HIDDEN);\n container.style(WIDTH, '100%');\n }\n\n if (vertical && row === CENTER) {\n container.style(OVERFLOW, HIDDEN);\n container.style(HEIGHT, '100%');\n }\n }\n\n renderMatrix (mountPoint) {\n // Creating containers for each matrix individually\n const classPrefix = this.params.config.classPrefix;\n const row = this.params.config.row;\n const column = this.params.config.column;\n const dimensions = this.params.config.dimensions;\n const border = this.params.config.border;\n\n // Creating containers for each matrix individually\n const containerForMatrix = makeElement(mountPoint, 'div', [1], `${classPrefix}-grid-${row}-${column + 1}`)\n .classed(`${classPrefix}-grid-${row}`, true)\n .classed(`${classPrefix}-grid`, true);\n\n this.applyScroll(containerForMatrix);\n\n const {\n viewMatrix,\n spans\n } = cellSpanMaker(this.component, row, column);\n\n // Rendering the table components\n const { cells } = this.renderTable(containerForMatrix, `${classPrefix}-grid`, viewMatrix);\n\n applySpans(cells, spans, { dimensions, border }, `${row}-${column}`);\n renderPlaceholders(cells);\n\n cells.exit().each((cell) => {\n cell.placeholder.remove();\n });\n\n applyBorders(cells, border, row, column);\n }\n\n renderTable (mount, className, rowData) {\n const table = makeElement(mount, 'table', ['layout'], `${className}-table`);\n const body = makeElement(table, 'tbody', ['layout'], `${className}-body`);\n const rows = makeElement(body, 'tr', rowData, `${className}-tr`);\n const cells = makeElement(rows, 'td', (d, i) => d.filter(e => e !== null).map(e =>\n ({ placeholder: e, rowIndex: i })), `${className}-td`, {}, key => key.placeholder.id);\n\n return { table, body, rows, cells };\n }\n\n draw (container) {\n this.renderMatrix(container || document.getElementById(this.renderAt()));\n }\n\n updateWrapper (params) {\n this.name(params.name);\n this.boundBox(params.config.dimensions);\n this.setParams(params);\n return this;\n }\n\n setParams (params) {\n this.component = params.component;\n this.params = params;\n this.target(params.config.target);\n this.position(TOP);\n this.className(params.config.className);\n }\n}\n","import { selectElement, getEvent } from 'muze-utils';\nimport MuzeComponent from './muze-chart-component';\nimport MatrixComponent from './matrix-component';\nimport { ROW_MATRIX_INDEX, COLUMN_MATRIX_INDEX } from '../../../../layout/src/enums/constants';\nimport { WHEEL_DELTA_MODIFIER } from '../../enums/constants';\n\n/**\n * Based on the type of scroll, it changes the scrollLeft/scrollTop property of the specific\n * elements based on the scroll distance provided\n *\n *\n */\nconst applyScrollAction = (elem, classPrefix, scollDistance, type) => {\n selectElement(elem)\n .selectAll(`.${classPrefix}-grid`)\n .property(type, scollDistance);\n};\n\n/**\n * Applies the action of the scroll by actually scrolling the respective matrices based on the\n * type of scroll. It returns a function which has both the scroll methods available\n *\n * @return {Object} contains the horizontal and vertical scroll actions on the grid component\n */\nconst scrollActionApplier = (movement, context) => {\n const classPrefix = context.params.config.classPrefix;\n\n return {\n horizontal: () => {\n [0, 1, 2].forEach(e =>\n applyScrollAction(`#${context.component[e][1].renderAt()}`, classPrefix, movement, 'scrollLeft'));\n },\n vertical: () => {\n [0, 1, 2].forEach(e =>\n applyScrollAction(`#${context.component[1][e].renderAt()}`, classPrefix, movement, 'scrollTop'));\n }\n };\n};\n\nexport default class GridComponent extends MuzeComponent {\n\n constructor (params) {\n super(params.name, params.config.dimensions, 0);\n this.gridComponents = [];\n this.setParams(params);\n }\n\n sanitizeGrid () {\n let height = 0;\n let width = 0;\n const { viewMatricesInfo, layoutDimensions } = this.component.viewInfo();\n const scrollInfo = this.component.scrollInfo();\n const {\n viewHeight,\n viewWidth,\n unitHeights,\n unitWidths\n } = layoutDimensions;\n\n for (let i = 0; i < 3; i++) {\n if (!(this.gridComponents.length && this.gridComponents[i] instanceof Array)) {\n this.gridComponents[i] = [];\n }\n for (let j = 0; j < 3; j++) {\n const matrixDim = {\n height: viewHeight[i],\n width: viewWidth[j],\n unitHeights,\n unitWidths\n };\n const matrix = viewMatricesInfo.matrices[`${ROW_MATRIX_INDEX[i]}`][j];\n const matrixName = `${ROW_MATRIX_INDEX[i]}-${COLUMN_MATRIX_INDEX[j]}`;\n const matrixConfig = {\n dimensions: matrixDim,\n border: layoutDimensions.border,\n classPrefix: this.params.config.classPrefix,\n scrollInfo,\n row: ROW_MATRIX_INDEX[i],\n column: j\n };\n if (this.gridComponents[i][j] instanceof MuzeComponent) {\n this.gridComponents[i][j].updateWrapper({\n name: matrixName,\n component: matrix,\n config: matrixConfig\n });\n } else {\n const matrixWrapper = new MatrixComponent({\n name: matrixName,\n component: matrix,\n config: matrixConfig\n });\n this.gridComponents[i].push(matrixWrapper);\n }\n if (i === 0) {\n width += matrixDim.width;\n }\n if (j === 0) {\n height += matrixDim.height;\n }\n }\n }\n this.boundBox({ height, width });\n\n this.component = this.gridComponents;\n this.allComponents = this.gridComponents;\n }\n\n scrollBarManager (...manager) {\n if (manager.length) {\n this._scrollBarManager = manager[0];\n return this;\n }\n return this._scrollBarManager;\n }\n\n /**\n * Attaches a mousewheel listener to the center matrix, based on which the scrolling can occur.\n * It uses the scroll component to change the position of the scroller, which ultimately scrolls the center matrix\n *\n *\n * @return {GridComponent} Instance of the GridComponent\n */\n attachScrollListener () {\n selectElement(`#${this.component[1][1].renderAt()}`)\n .on('wheel', () => {\n const event = getEvent();\n const {\n wheelDeltaX,\n wheelDeltaY\n } = event;\n\n // Prevent default behaviour and stop propagating\n event.preventDefault();\n event.stopPropagation();\n\n // Scrolling horizontally\n if (wheelDeltaX !== 0 && Math.abs(wheelDeltaX) > Math.abs(wheelDeltaY)) {\n this.scrollBarManager()\n .triggerScrollBarAction('horizontal', wheelDeltaX / WHEEL_DELTA_MODIFIER);\n }\n\n // Scrolling Vertically\n if (wheelDeltaY !== 0 && Math.abs(wheelDeltaX) < Math.abs(wheelDeltaY)) {\n this.scrollBarManager()\n .triggerScrollBarAction('vertical', wheelDeltaY / WHEEL_DELTA_MODIFIER);\n }\n });\n return this;\n }\n\n performScrollAction (direction, movedView) {\n scrollActionApplier(movedView, this)[direction]();\n return this;\n }\n\n getBoundBox () {\n const { top, left } = this.component[0][0].boundBox();\n const { height, width } = this.boundBox();\n\n return {\n top,\n left,\n height,\n width\n };\n }\n\n updateWrapper (params) {\n this.name(params.name);\n this.boundBox(params.config.dimensions);\n this.setParams(params);\n return this;\n }\n\n setParams (params) {\n this.component = params.component;\n this.params = params;\n this.target(params.config.target);\n this.className(params.config.className);\n this.sanitizeGrid();\n return this;\n }\n}\n","export const SIDE_EFFECT_COMMON = 'common';\nexport const SIDE_EFFECT_INDIVIDUAL = 'individual';\nexport const TOOLTIP_CONSOLIDATED = 'consolidated';\nexport const TOOLTIP_FRAGMENTED = 'fragmented';\nexport const WHEEL_DELTA_MODIFIER = 30;\n","import { TITLE, SUB_TITLE, LEGEND, VERTICAL, HORIZONTAL, WIDTH, HEIGHT, TOP, LEFT, RIGHT } from '../constants';\nimport HeaderComponent from './components/headerComponent';\nimport LegendComponent from './components/legendComponent';\nimport ScrollComponent from './components/scroll-component';\nimport GridComponent from './components/grid-component';\nimport { TITLE_CONFIG, SUB_TITLE_CONFIG, GRID, CANVAS, LAYOUT_ALIGN } from './defaults';\nimport { ROW_MATRIX_INDEX, COLUMN_MATRIX_INDEX, CENTER } from '../../../layout/src/enums/constants';\n\n// Mapping between types of headers and their required configs for wrapper creation\nconst headerMap = {\n title: {\n headerCell: 'titleCell',\n configType: TITLE_CONFIG\n },\n subtitle: {\n headerCell: 'subtitleCell',\n configType: SUB_TITLE_CONFIG\n }\n};\n\n/**\n * Creates the wrapper for the header, i.e., title and subtitle to be used in the tree layout\n *\n *\n * @param {string} headerType type of header: title/subtite\n * @param {LayoutManager} layoutManager instance of Layout Manager which manages the layouting of the components\n * @param {Object} renderDetails Extra details required for rendering the headers\n * @return {Instance} Returns the respective wrappers\n */\nconst createHeaderWrapper = (headerType, layoutManager, renderDetails) => {\n let wrapper = null;\n\n const { components, layoutConfig } = renderDetails;\n const { headerCell, configType } = headerMap[headerType];\n const target = { target: CANVAS };\n\n if (components.headers && components.headers[headerCell]) {\n let headerConfig = layoutConfig[headerType];\n const header = components.headers[headerCell];\n\n headerConfig = Object.assign({}, headerConfig, {\n classPrefix: layoutConfig.classPrefix,\n ...target,\n alignWith: `${ROW_MATRIX_INDEX[0]}-${COLUMN_MATRIX_INDEX[1]}`,\n alignment: LAYOUT_ALIGN.LEFT,\n className: configType.className\n });\n\n if (headerConfig.align === CENTER) {\n headerConfig.alignment = null;\n headerConfig.alignWith = null;\n }\n if (headerConfig.align === RIGHT) {\n headerConfig.alignment = RIGHT;\n }\n\n const wrapperParams = {\n name: headerType,\n component: header,\n config: headerConfig\n };\n\n const existingComponent = layoutManager.getComponent(headerType);\n if (existingComponent) {\n wrapper = existingComponent\n .updateWrapper(wrapperParams);\n } else {\n wrapper = new HeaderComponent(wrapperParams);\n }\n }\n return wrapper;\n};\n\n// Mapping between types of scrollBars and their required configs for wrapper creation\nconst scrollBarMap = config => ({\n vertical: {\n componentName: 'verticalScrollBar',\n width: 'thickness',\n height: 'layoutBasedMeasure',\n layoutBasedMeasure: HEIGHT,\n viewMeasure: 'viewHeight',\n rowAlign: 1,\n colAlign: config.align === 'right' ? 2 : 0,\n position: config.align,\n alignment: TOP\n },\n horizontal: {\n componentName: 'horizontalScrollBar',\n width: 'layoutBasedMeasure',\n layoutBasedMeasure: WIDTH,\n viewMeasure: 'viewWidth',\n height: 'thickness',\n rowAlign: config.align === 'top' ? 0 : 2,\n colAlign: 1,\n position: config.align,\n alignment: LEFT\n }\n});\n\n/**\n * Creates the wrapper for the scroller, i.e., horizontal and vertical to be used in the tree layout\n *\n *\n * @param {string} scrollBarType type of scrollbar: horizontal/vertical\n * @param {LayoutManager} layoutManager instance of Layout Manager which manages the layouting of the components\n * @param {Object} renderDetails Extra details required for rendering the headers\n * @param {GridLayout} grid Instance of the grid layout\n * @return {Instance} Returns the respective wrappers\n */\nconst createScrollBarWrapper = (scrollBarType, layoutManager, renderDetails, grid) => {\n let scrollBarWrapper = null;\n const { layoutConfig } = renderDetails;\n const target = { target: CANVAS };\n const { scrollBar } = layoutConfig;\n const { layoutDimensions } = grid.viewInfo();\n const {\n actualCenterMeasures,\n unitHeights,\n unitWidths\n } = layoutDimensions;\n const {\n componentName, layoutBasedMeasure, width, height, rowAlign, colAlign,\n viewMeasure, position, alignment\n } = scrollBarMap(scrollBar[scrollBarType])[scrollBarType];\n const dimensions = {\n thickness: scrollBar.thickness,\n layoutBasedMeasure: layoutDimensions[viewMeasure][1]\n };\n const isScroll = grid.scrollInfo()[scrollBarType];\n const totalLength = actualCenterMeasures[layoutBasedMeasure];\n const viewLength = layoutDimensions[viewMeasure][1];\n\n const scrollConfig = Object.assign({}, {\n classPrefix: layoutConfig.classPrefix,\n ...target,\n scrollBarComponentConfig: {\n ...scrollBar,\n classPrefix: layoutConfig.classPrefix\n },\n\n type: scrollBarType,\n alignWith: `${ROW_MATRIX_INDEX[rowAlign]}-${COLUMN_MATRIX_INDEX[colAlign]}`,\n alignment,\n position\n });\n\n const wrapperParams = {\n name: componentName,\n config: scrollConfig,\n dimensions: {\n width: dimensions[width],\n height: dimensions[height],\n totalLength,\n viewLength,\n unitHeights,\n unitWidths\n }\n };\n\n const existingComponent = layoutManager.getComponent(componentName);\n\n if (!isScroll) {\n existingComponent && existingComponent.remove();\n return null;\n }\n\n if (existingComponent) {\n scrollBarWrapper = existingComponent\n .updateWrapper(wrapperParams);\n } else {\n scrollBarWrapper = new ScrollComponent(wrapperParams);\n }\n\n return scrollBarWrapper;\n};\n\n/**\n * Creates the wrapper for the legend to be used in the tree layout\n *\n *\n * @param {LayoutManager} layoutManager instance of Layout Manager which manages the layouting of the components\n * @param {Object} renderDetails Extra details required for rendering the headers\n * @return {Instance} Returns the respective wrappers\n */\nconst createLegendWrapper = (layoutManager, renderDetails) => {\n let legendWrapper = null;\n const { components, layoutConfig, measurement } = renderDetails;\n const target = { target: CANVAS };\n\n if (components.legends && components.legends.length) {\n const legendConfig = { ...layoutConfig.legend, ...target, measurement };\n const wrapperParams = {\n name: LEGEND,\n component: components.legends,\n config: legendConfig\n };\n\n const existingComponent = layoutManager.getComponent(LEGEND);\n\n if (existingComponent) {\n legendWrapper = existingComponent\n .updateWrapper(wrapperParams);\n } else {\n legendWrapper = new LegendComponent(wrapperParams);\n }\n }\n return legendWrapper;\n};\n\n/**\n * Creates the wrapper for the grid layout to be used in the tree layout\n *\n *\n * @param {LayoutManager} layoutManager instance of Layout Manager which manages the layouting of the components\n * @param {Object} renderDetails Extra details required for rendering the headers\n * @param {GridLayout} grid Instance of the grid layout\n * @return {Instance} Returns the respective wrappers\n */\nconst gridLayoutWrapper = (layoutManager, renderDetails, grid) => {\n let gridWrapper = null;\n const target = { target: CANVAS };\n const { layoutConfig } = renderDetails;\n\n const config = {\n ...target,\n pagination: layoutConfig.pagination,\n classPrefix: layoutConfig.classPrefix,\n dimensions: { height: 0, width: 0 }\n };\n const wrapperParams = {\n name: GRID,\n component: grid,\n config\n };\n const existingComponent = layoutManager.getComponent(GRID);\n if (existingComponent) {\n gridWrapper = existingComponent\n .updateWrapper(wrapperParams);\n } else {\n gridWrapper = new GridComponent(wrapperParams);\n }\n return gridWrapper;\n};\n\n/**\n * Responsible for providing the wrapper creators for every component in Muze.\n * This function, when called, returns the set of components and their respective wrappers.\n *\n *\n *\n * @param {LayoutManager} layoutManager instance of Layout Manager which manages the layouting of the components\n * @param {GridLayout} grid Instance of the grid layout\n * @param {Object} renderDetails Extra details required for rendering the headers\n * @return {Instance} Returns the respective wrappers for each component\n */\nexport const componentWrapperMaker = (layoutManager, grid, renderDetails) => ({\n title: createHeaderWrapper(TITLE, layoutManager, renderDetails),\n subtitle: createHeaderWrapper(SUB_TITLE, layoutManager, renderDetails),\n legend: createLegendWrapper(layoutManager, renderDetails),\n grid: gridLayoutWrapper(layoutManager, renderDetails, grid),\n verticalScrollBar: createScrollBarWrapper(VERTICAL, layoutManager, renderDetails, grid),\n horizontalScrollBar: createScrollBarWrapper(HORIZONTAL, layoutManager, renderDetails, grid)\n});\n","export class ScrollManager {\n\n constructor () {\n this._scrollBarComponents = {};\n this._attachedComponents = {};\n }\n\n scrollBarComponents (...sbc) {\n if (sbc.length) {\n this._scrollBarComponents = sbc[0];\n return this;\n }\n return this._scrollBarComponents;\n }\n\n attachedComponents (...abc) {\n if (abc.length) {\n this._attachedComponents = abc[0];\n return this;\n }\n return this._attachedComponents;\n }\n\n performAttachedScrollFunction (type, movedViewLength) {\n Object.values(this.attachedComponents()).forEach((e) => {\n e.performScrollAction(type, movedViewLength);\n });\n }\n\n triggerScrollBarAction (type, delta) {\n this.scrollBarComponents()[type] && this.scrollBarComponents()[type].scrollDeltaTo(delta);\n }\n}\n","import { mergeRecursive } from 'muze-utils';\nimport { arrangeComponents } from './component-resolver';\nimport { createHeaders } from './title-maker';\nimport { createLegend, getLegendSpace } from './legend-maker';\nimport { componentWrapperMaker } from './component-wrapper-maker';\nimport {\n TOP,\n BOTTOM,\n LEFT,\n RIGHT,\n TITLE,\n SUB_TITLE,\n LEGEND,\n VERTICAL_SCROLL_BAR,\n HORIZONTAL_SCROLL_BAR,\n GRID\n} from '../constants';\nimport { ScrollManager } from './scroll-manager';\n\n/**\n *\n *\n * @param {*} context\n *\n */\nexport const prepareLayout = (layout, renderDetails) => {\n const { components, layoutConfig, measurement } = renderDetails;\n const {\n rows,\n columns,\n values,\n cornerMatrices\n } = components;\n const {\n topLeft,\n topRight,\n bottomLeft,\n bottomRight\n } = cornerMatrices;\n if (rows && columns) {\n layout.measurement(measurement)\n .config(layoutConfig)\n .matrices({\n top: [topLeft, columns[0], topRight],\n center: [rows[0], values, rows[1]],\n bottom: [bottomLeft, columns[1], bottomRight]\n })\n .triggerReflow();\n }\n};\n\n/**\n *\n *\n * @param {*} context\n * @param {*} mount\n *\n */\nexport const getRenderDetails = (context, mount) => {\n let layoutConfig = mergeRecursive({}, context.config());\n // Get height width of the mount point\n let { height, width } = mount.getBoundingClientRect();\n const heightAttr = context.height();\n const widthAttr = context.width();\n const visGroup = context.composition().visualGroup;\n const {\n isColumnSizeEqual,\n isRowSizeEqual,\n priority,\n rows,\n columns,\n values\n } = visGroup.placeholderInfo();\n const {\n minWidth,\n minHeight,\n classPrefix,\n showHeaders,\n legend,\n pagination,\n scrollBar\n } = context.config();\n\n // Get title configuration\n const titleConfig = context.title()[1];\n // Get subtitle configuration\n const subtitleConfig = context.subtitle()[1];\n // Get legend position\n const legendPosition = legend.position;\n // Arrange components according to config\n const layoutArrangement = arrangeComponents(context);\n\n height = Math.floor(height);\n width = Math.floor(width);\n\n const availableHeightForCanvas = Math.max(heightAttr > 0 ? heightAttr : height, minHeight);\n const availableWidthForCanvas = Math.max(widthAttr > 0 ? widthAttr : width, minWidth);\n\n // Create headers and determine header height\n const { headers, headerHeight } = createHeaders(context, availableHeightForCanvas, availableWidthForCanvas);\n\n // Create legends and determine legend space\n const legends = createLegend(context, headerHeight, availableHeightForCanvas, availableWidthForCanvas);\n context._composition.legend = {};\n legends.forEach((e) => {\n context._composition.legend[e.scaleType] = e.legend;\n });\n\n const legendSpace = getLegendSpace(legends, legend, availableHeightForCanvas, availableWidthForCanvas);\n const legendWidth = (legendPosition === LEFT || legendPosition === RIGHT) ? legendSpace.width : 0;\n const legendHeight = (legendPosition === TOP || legendPosition === BOTTOM) ? legendSpace.height : 0;\n\n // Set components for layouting\n const components = {\n headers,\n legends,\n canvases: [context],\n rows,\n columns,\n values,\n cornerMatrices: visGroup.cornerMatrices()\n };\n\n const measurement = {\n mountSpace: {\n height,\n width\n },\n headerHeight,\n legendSpace,\n canvasWidth: availableWidthForCanvas,\n canvasHeight: availableHeightForCanvas,\n width: availableWidthForCanvas - legendWidth,\n height: availableHeightForCanvas - headerHeight - legendHeight,\n minUnitHeight: context.minUnitHeight(),\n minUnitWidth: context.minUnitWidth()\n };\n layoutConfig = mergeRecursive(layoutConfig, {\n classPrefix,\n showHeaders,\n border: mergeRecursive(visGroup.metaData().border, context.config().border),\n layoutArrangement,\n legend,\n buffer: scrollBar.thickness,\n pagination,\n title: titleConfig,\n subtitle: subtitleConfig,\n isColumnSizeEqual,\n isRowSizeEqual,\n mount,\n priority\n });\n return {\n layoutConfig,\n components,\n measurement\n };\n};\n\nconst componentIndexes = {\n title: 0,\n subtitle: 1,\n legend: 2,\n verticalScrollBar: 3,\n horizontalScrollBar: 4,\n grid: 5\n};\n\nconst componentNames = {\n 0: TITLE,\n 1: SUB_TITLE,\n 2: LEGEND,\n 3: VERTICAL_SCROLL_BAR,\n 4: HORIZONTAL_SCROLL_BAR,\n 5: GRID\n};\n\n/**\n * Responsible for creating a scroll manager that manages interactions between the grid\n * component and the scroll bar components\n *\n * @param {Array} componentWrappers Contains the wrappers for all the components\n * @param {Canvas} canvas Instance of the current canvas\n * @return {Array} Positions of units either horizontal or vertical\n */\nconst createScrollManager = (componentWrappers, canvas) => {\n const {\n horizontalScrollBar,\n verticalScrollBar,\n grid\n } = componentIndexes;\n\n const horizontalScrollWrapper = componentWrappers[horizontalScrollBar];\n const verticalScrollWrapper = componentWrappers[verticalScrollBar];\n const gridWrapper = componentWrappers[grid];\n const scrollBarManager = new ScrollManager();\n const scrollBarComponents = {};\n\n verticalScrollWrapper && (scrollBarComponents.vertical = verticalScrollWrapper);\n horizontalScrollWrapper && (scrollBarComponents.horizontal = horizontalScrollWrapper);\n\n scrollBarManager\n .scrollBarComponents(scrollBarComponents)\n .attachedComponents({\n grid: gridWrapper\n });\n canvas.composition().hScrollBar = horizontalScrollWrapper;\n canvas.composition().vScrollBar = verticalScrollWrapper;\n\n [horizontalScrollWrapper, verticalScrollWrapper].forEach((wrapper) => {\n wrapper && wrapper.manager(scrollBarManager);\n });\n\n gridWrapper.scrollBarManager(scrollBarManager);\n};\n\nexport const renderLayout = (canvas, renderDetails) => {\n const layoutManager = canvas._layoutManager;\n const gridLayout = canvas.layout();\n const {\n\n grid\n } = componentIndexes;\n\n // Get the component wrappers\n const compWrappers = componentWrapperMaker(layoutManager, gridLayout, renderDetails);\n const componentWrappers = Object.keys(componentIndexes).map(e => compWrappers[e]);\n const gridWrapper = componentWrappers[grid];\n createScrollManager(componentWrappers, canvas);\n\n componentWrappers.forEach((componentWrapper, index) => {\n if (componentWrapper === null) {\n const deleteElementName = componentNames[index];\n const component = layoutManager.getComponent(deleteElementName);\n const deleteElementId = component ? component.renderAt() : null;\n layoutManager.removeComponent(deleteElementId);\n }\n });\n layoutManager.registerComponents(componentWrappers).compute();\n gridWrapper.attachScrollListener();\n};\n\n","import {\n getDataModelFromIdentifiers,\n FieldType,\n mergeRecursive,\n isSimpleObject,\n CommonProps\n} from 'muze-utils';\nimport { Firebolt } from '@chartshq/muze-firebolt';\n\nimport { applyInteractionPolicy } from '../helper';\n\nconst defaultInteractionPolicy = (valueMatrix, firebolt) => {\n const isMeasure = field => field.type() === FieldType.MEASURE;\n const canvas = firebolt.context;\n const visualGroup = canvas.composition().visualGroup;\n const xFields = [].concat(...visualGroup.getFieldsFromChannel('x'));\n const yFields = [].concat(...visualGroup.getFieldsFromChannel('y'));\n const colDim = xFields.every(field => field.type() === FieldType.DIMENSION);\n const fieldInf = visualGroup.resolver().getAllFields();\n const rowFacets = fieldInf.rowFacets;\n const colFacets = fieldInf.colFacets;\n valueMatrix.each((cell) => {\n const unitFireBolt = cell.valueOf().firebolt();\n if (!(xFields.every(isMeasure) && yFields.every(isMeasure))) {\n const facetFields = cell.valueOf().facetByFields()[0];\n const unitColFacets = facetFields.filter(d => colFacets.findIndex(v => v.equals(d)) !== -1);\n const unitRowFacets = facetFields.filter(d => rowFacets.findIndex(v => v.equals(d)) !== -1);\n let propFields;\n if (colDim) {\n propFields = unitColFacets.map(d => `${d}`);\n } else {\n propFields = unitRowFacets.map(d => `${d}`);\n }\n\n unitFireBolt.propagateWith('*', propFields, true);\n }\n });\n};\n\nconst defaultCrossInteractionPolicy = {\n behaviours: {\n '*': (propagationPayload, context) => {\n const propagationCanvasAlias = propagationPayload.sourceCanvas;\n const canvasAlias = context.parentAlias();\n return propagationCanvasAlias ? canvasAlias === propagationCanvasAlias : true;\n }\n },\n sideEffects: {\n tooltip: (propagationPayload, context) => {\n const propagationUnit = propagationPayload.sourceUnit;\n const propagationCanvas = propagationPayload.sourceCanvas;\n const unitId = context.id();\n const canvasAlias = context.parentAlias();\n if (propagationCanvas) {\n return propagationCanvas !== canvasAlias ? true : unitId === propagationUnit;\n }\n return true;\n }\n }\n};\n\n/**\n * This class is responsible for dispatching any behavioural action to all the visual units housed by the canvas.\n * It is created by {@link Canvas}. This class does not handle any physical actions. Physical actions get triggered\n * in {@link VisualUnit} which is managed by it's own firebolt instance. The firebolt instance of canvas only\n * propagates the action to all the visual units in it's composition.\n *\n * To get the firebolt instance of {@link Canvas}\n * ```\n * const firebolt = canvas.firebolt();\n * ```\n *\n * @class GroupFireBolt\n * @public\n */\nexport default class GroupFireBolt extends Firebolt {\n constructor (...params) {\n super(...params);\n this._interactionPolicy = this.constructor.defaultInteractionPolicy();\n this.crossInteractionPolicy(this.constructor.defaultCrossInteractionPolicy());\n }\n\n static defaultInteractionPolicy () {\n return defaultInteractionPolicy;\n }\n\n static defaultCrossInteractionPolicy () {\n return defaultCrossInteractionPolicy;\n }\n\n interactionPolicy (...policy) {\n if (policy.length) {\n this._interactionPolicy = policy[0] || this.constructor.defaultInteractionPolicy();\n return this;\n }\n return this._interactionPolicy;\n }\n\n crossInteractionPolicy (...policy) {\n if (policy.length) {\n this._crossInteractionPolicy = mergeRecursive(mergeRecursive({},\n this.constructor.defaultCrossInteractionPolicy()), policy[0] || {});\n const context = this.context;\n applyInteractionPolicy(this);\n context._throwback.registerImmediateListener([CommonProps.MATRIX_CREATED], () => {\n applyInteractionPolicy(this);\n });\n return this;\n }\n return this._crossInteractionPolicy;\n }\n\n /**\n * Dispatches a behavioural action with a payload. It takes the name of the behavioural action and a payload\n * object which contains the criteria aend an array of side effects which determines what side effects are\n * going to be shown in each visual unit of the canvas. It prepares the datamodel from the given criteria\n * and initiates a propagation from the datamodel of canvas. Then all the visual units of canvas which listens\n * to the propagation gets informed on which rows got selected and dispatches the behavioural action sent during\n * propagation.\n *\n * To dispatch a behavioural action on the canvas\n * ```\n * // Get the firebolt instance of the canvas\n * const firebolt = canvas.firebolt();\n * // Dispatch a brush behaviour\n * firebolt.dispatchBehaviour('brush', {\n * // Selects all the rows with Horsepower having range between 100 and 200.\n * criteria: {\n * Horsepower: [100, 200]\n * }\n * });\n * // On dispatch of this behavioural action, a selection box gets created and plots gets faded out which are the\n * // default side effects mapped to this behavioural action.\n * ```\n *\n * ```\n * Additionally, it can also be passed an array of side effects in the payload.\n * // Dispatch a select behaviour with only crossline as side effect.\n * firebolt.dispatchBehaviour('select', {\n * criteria: {\n * Cylinders: ['8']\n * },\n * sideEffects: ['crossline']\n * });\n * ```\n *\n * @public\n *\n * @param {string} behaviour Name of the behavioural action\n * @param {Object} payload Object which contains the interaction information.\n * @param {Object | Array.} payload.criteria Identifiers by which the selection happens.\n * @param {Array.} payload.sideEffects Side effects which needs to be shown.\n *\n * @return {GroupFireBolt} Instance of firebolt.\n */\n dispatchBehaviour (behaviour, payload) {\n const propPayload = Object.assign(payload);\n const criteria = propPayload.criteria;\n const data = this.context.composition().visualGroup.getGroupByData();\n const fieldsConfig = data.getFieldsConfig();\n const model = getDataModelFromIdentifiers(data, criteria);\n const behaviouralAction = this._actions.behavioural[behaviour];\n\n if (behaviouralAction) {\n const fields = isSimpleObject(criteria) ? Object.keys(criteria) : (criteria ? criteria[0] : []);\n const validFields = fields.filter(field => field in fieldsConfig);\n const mutates = behaviouralAction.constructor.mutates();\n const propConfig = {\n payload: propPayload,\n action: behaviour,\n criteria: model,\n sourceId: this.context.alias(),\n isMutableAction: mutates,\n propagateInterpolatedValues: validFields.every(field => fieldsConfig[field].def.type ===\n FieldType.MEASURE)\n };\n data.propagate(model, propConfig, true);\n }\n return this;\n }\n\n registerSideEffects (sideEffects) {\n for (const key in sideEffects) {\n this._sideEffectDefinitions[sideEffects[key].formalName()] = sideEffects[key];\n }\n return this;\n }\n}\n","import GroupFireBolt from './group-firebolt';\n\nexport default GroupFireBolt;\n","export const APP_INITIAL_STATE = {\n app: {\n group: {},\n units: {},\n layers: {},\n canvas: {}\n },\n local: {\n canvas: {},\n group: {},\n units: {},\n layers: {}\n }\n};\n\n","import { GridLayout } from '@chartshq/layout';\nimport { transactor, Store, getUniqueId, selectElement, STATE_NAMESPACES, CommonProps } from 'muze-utils';\nimport { physicalActions, sideEffects, behaviouralActions, behaviourEffectMap } from '@chartshq/muze-firebolt';\nimport { RETINAL } from '../constants';\nimport TransactionSupport from '../transaction-support';\nimport { getRenderDetails, prepareLayout, renderLayout } from './layout-maker';\nimport { localOptions, canvasOptions } from './local-options';\nimport GroupFireBolt from './firebolt';\nimport options from '../options';\nimport { APP_INITIAL_STATE } from './app-state';\nimport { initCanvas,\n setupChangeListener,\n setLabelRotationForAxes,\n createGroupState,\n createLayoutManager,\n setLayoutInfForUnits\n} from './helper';\n/**\n * Canvas is a logical component which houses a visualization by taking multiple variable in different encoding channel.\n * Canvas manages lifecycle of many other logical component and exposes one consistent interface for creation of chart.\n * Canvas is intialized from environment with settings from environment and singleton dependencies.\n *\n * To create an instance of canvas\n * ```\n * const env = Muze();\n * const canvas = env.canvas()\n * ```\n *\n *\n * @class\n * @public\n * @module Canvas\n */\nexport default class Canvas extends TransactionSupport {\n\n /**\n * Creates reactive property accessors.\n * - data\n * - height\n * - width\n * - config\n * This configs are retrieved from options.\n */\n constructor (globalDependencies) {\n super();\n\n this._allOptions = Object.assign({}, options, localOptions);\n this._registry = {};\n this._composition = {};\n this._cachedProps = {};\n this._alias = null;\n this._renderedResolve = null;\n this._renderedPromise = new Promise((resolve) => {\n this._renderedResolve = resolve;\n });\n this._composition.layout = new GridLayout();\n this._store = new Store(APP_INITIAL_STATE);\n\n this._throwback = new Store({\n [CommonProps.MATRIX_CREATED]: false\n });\n\n // Setters and getters will be mounted on this. The object will be mutated.\n const namespace = STATE_NAMESPACES.CANVAS_LOCAL_NAMESPACE;\n const allOptions = Object.assign({}, options, localOptions, canvasOptions);\n\n transactor(this, allOptions, this._store.model, {\n namespace\n });\n\n this.dependencies(Object.assign({}, globalDependencies, this._dependencies));\n this.firebolt(new GroupFireBolt(this, {\n behavioural: behaviouralActions,\n physical: physicalActions,\n physicalBehaviouralMap: {}\n }, sideEffects, behaviourEffectMap));\n this.alias(`canvas-${getUniqueId()}`);\n this.title('', {});\n this.subtitle('', {});\n this.legend({});\n this.color({});\n this.shape({});\n this.size({});\n setupChangeListener(this);\n // init layoutManager\n this._layoutManager = createLayoutManager();\n }\n\n /**\n * Retrieves an instance of layout which is responsible for layouting. Layout is responsible for creating faceted\n * presentation using table layout.\n *\n * @public\n *\n * @return {GridLayout} Instance of layout attached to canvas.\n */\n layout (...params) {\n if (params.length) {\n return this;\n }\n return this.composition().layout;\n }\n\n /**\n * Retrieves the composition for a canvas\n *\n * @public\n *\n * @return {object} Instances of the components which canvas requires to draw the full visualization.\n * ```\n * {\n * layout: // Instance of {@link GridLayout}\n * legend: // Instance of {@link Legend}\n * subtitle: // Instance of {@link TextCell} using which the title is rendered\n * title: // Instance of {@link TextCell} using which the title is rendered\n * visualGroup: // Instance of {@link visualGroup}\n * }\n * ```\n */\n composition (...params) {\n if (params.length) {\n return this;\n }\n return this._composition;\n }\n\n done () {\n return this._renderedPromise;\n }\n\n /**\n * Sets or gets the alias of the canvas. Alias is a name by which the canvas can be referred.\n *\n * When setter\n * @param {string} alias Name of the alias.\n *\n * @return {Canvas} Instance of the canvas.\n *\n * When getter\n *\n * @return {string} Alias of canvas.\n *\n * @public\n */\n alias (...params) {\n if (params.length) {\n const visualGroup = this.composition().visualGroup;\n this._alias = params[0];\n visualGroup && visualGroup.alias(this.alias());\n return this;\n }\n return this._alias;\n }\n\n /**\n * Creates an instance initiated with given settings.\n *\n * @param {Object} initialSettings Initial settings to be populated in the model\n * @param {Object} regEntry newly created instance with the initial settings\n * @param {Object} globalDependencies dependencies which will be created only once in the page\n *\n * @return {Object} newly created instance with the initial settings\n */\n static withSettings (initialSettings, regEntry, globalDependencies) {\n const instance = new Canvas(globalDependencies);\n\n for (const key in initialSettings) {\n instance[key](initialSettings[key]);\n }\n // set registry for instance\n instance.registry(regEntry);\n return instance;\n }\n\n /**\n *\n *\n * @static\n *\n * @memberof Canvas\n */\n static formalName () {\n return 'canvas';\n }\n\n /**\n * Returns the instance of firebolt associated with this canvas. The firebolt instance can be used to dispatch a\n * behaviour dynamically on the canvas. This firebolt does not handle any physical actions. It is just used to\n * propagate the action to all the visual units in it's composition.\n *\n * @public\n *\n * @return {GroupFireBolt} Instance of firebolt associated with canvas.\n */\n firebolt (...firebolt) {\n if (firebolt.length) {\n this._firebolt = firebolt[0];\n return this;\n }\n return this._firebolt;\n }\n\n /**\n * Registry peoperty accessor\n *\n * @param {Object} reg plain old javascript object keyvalue pairs. Key containing module name and value contains\n * module definition class. The reg object has to be flat object of level 1.\n */\n registry (...params) {\n if (params.length) {\n const components = Object.assign({}, params[0].components);\n const componentSubRegistry = Object.assign({}, params[0].componentSubRegistry);\n\n this._registry = { components, componentSubRegistry };\n const initedComponents = initCanvas(this);\n // @todo is it okay to continue this tight behaviour? If not use a resolver to resolve diff component type.\n this._composition.visualGroup = initedComponents[0];\n createGroupState(this);\n this.composition().visualGroup.alias(this.alias()).store(this._store);\n return this;\n }\n return this._registry;\n }\n\n /*\n * Prepare dependencies for top level elements\n */\n dependencies (...param) {\n if (param.length) {\n this._dependencies = param[0];\n return this;\n }\n // @todo prepare dependencies here.\n return this._dependencies;\n }\n\n /**\n *\n *\n * @param {*} lifeCycles\n *\n * @memberof Canvas\n */\n lifeCycle (lifeCycles) {\n const lifeCycleManager = this.dependencies().lifeCycleManager;\n if (lifeCycles) {\n lifeCycleManager.register(lifeCycles);\n return this;\n }\n return lifeCycleManager;\n }\n\n /**\n *\n *\n * @readonly\n * @memberof Canvas\n */\n legend (...params) {\n if (params.length) {\n return this;\n }\n return this.composition().legend;\n }\n\n /**\n * Returns a promise for various {@link LifecycleEvents} of the various components of canvas. The promise gets\n * resolved once the particular event gets completed.\n *\n * To use this,\n * ```\n * canvas.once('layer.drawn').then(() => {\n * // Do any post drawing work here.\n * });\n * ```\n * @public\n *\n * @param {string} eventName Name of the lifecycle event.\n *\n * @return {Promise} A pending promise waiting for resolve to be called.\n */\n once (eventName) {\n const lifeCycleManager = this.dependencies().lifeCycleManager;\n return lifeCycleManager.retrieve(eventName);\n }\n\n /**\n * Internal function to trigger render, this method is cognizant of all the properties of the core modules and\n * establish a passive reactivity. Passive reactivity is not always a bad thing :)\n * @internal\n */\n render () {\n const mount = this.mount();\n // removeChild(mount);\n const lifeCycleManager = this.dependencies().lifeCycleManager;\n // Get render details including arrangement and measurement\n const renderDetails = getRenderDetails(this, mount);\n lifeCycleManager.notify({ client: this, action: 'beforedraw' });\n // Prepare the layout by triggering the matrix calculation\n prepareLayout(this.layout(), renderDetails);\n\n this._layoutManager.dimension({\n height: renderDetails.measurement.canvasHeight,\n width: renderDetails.measurement.canvasWidth\n });\n\n this._layoutManager.renderAt(mount);\n\n // Render each component\n renderLayout(this, renderDetails);\n\n setLayoutInfForUnits(this);\n\n // setLabelRotation\n setLabelRotationForAxes(this);\n }\n\n /**\n * Returns the instances of x axis of the canvas. It returns the instances in a two dimensional array form.\n *\n * ```\n * // The first element in the sub array represents the top axis and the second element represents the bottom\n * // axis.\n * [\n * [X1, X2],\n * [X3, X4]\n * ]\n * ```\n * @public\n *\n * @return {Array.} Instances of x axis.\n */\n xAxes () {\n return this.composition().visualGroup.getAxes('x');\n }\n\n /**\n * Returns the instances of y axis of the canvas. It returns the instances in a two dimensional array form.\n *\n * ```\n * // The first element in the sub array represents the left axis and the second element represents the right\n * // axis.\n * [\n * [Y1, Y2],\n * [Y3, Y4]\n * ]\n * ```\n * @public\n * @return {Array.} Instances of y axis.\n */\n yAxes () {\n return this.composition().visualGroup.getAxes('y');\n }\n\n /**\n * Returns all the retinal axis of the canvas. Color, shape and size axis are combinedly called retinal axis.\n *\n * @public\n * @return {Object} Instances of retinal axis.\n * ```\n * {\n * color: [ColorAxis], // Array of color axis.\n * shape: [ShapeAxis], // Array of shape axis.\n * size: [SizeAxis] // Array of size axis.\n * }\n * ```\n */\n getRetinalAxes () {\n const visualGroup = this.composition().visualGroup;\n return visualGroup.getAxes(RETINAL);\n }\n\n mount (...params) {\n if (params.length) {\n let value = params[0];\n if (typeof params[0] === 'string') {\n value = selectElement(params[0]).node();\n }\n this._mount = value;\n return this;\n }\n return this._mount;\n }\n}\n","import { cellRegistry, SimpleCell } from '@chartshq/visual-cell';\nimport { VisualUnit } from '@chartshq/visual-unit';\nimport { layerRegistry } from '@chartshq/visual-layer';\nimport { SimpleGroup, VisualGroup } from '@chartshq/visual-group';\n\nexport const COMPONENTS = {\n VisualGroup,\n VisualUnit\n};\nexport const SUBREGISTRIES = {\n cellRegistry,\n layerRegistry\n};\nexport const INTERFACES = {\n SimpleGroup,\n SimpleCell\n};\n\n","import { DEFAULT_LAYERS } from './defaults';\n\nexport default () => {\n const reg = DEFAULT_LAYERS;\n const regObj = {\n set: (key, def) => {\n reg[key] = def;\n return regObj;\n },\n get: () => reg\n };\n return regObj;\n};\n","import {\n transactor,\n Smartlabel,\n enableChainedTransaction,\n LifeCycleManager,\n DataModel,\n makeElement,\n getClientPoint,\n selectElement,\n getEvent,\n require,\n DateTimeFormatter\n} from 'muze-utils';\n\nimport {\n SurrogateSideEffect,\n SpawnableSideEffect,\n sideEffects,\n PersistentBehaviour,\n GenericBehaviour,\n VolatileBehaviour,\n behaviouralActions,\n GenericSideEffect\n} from '@chartshq/muze-firebolt';\nimport { layerFactory } from '@chartshq/visual-layer';\nimport pkg from '../package.json';\nimport * as operators from './operators';\nimport { actionModel as ActionModel } from './action-model';\nimport options from './options';\nimport { Canvas } from './canvas';\nimport { COMPONENTS, SUBREGISTRIES } from './default-registry';\nimport './muze.scss';\n\n// Cache singleton instances which should be included only once in a page\nconst globalCache = {};\nconst defaultRegistry = COMPONENTS;\n\nconst overrideRegistryDefinitions = (overrideRegistry, registry) => {\n for (const prop in overrideRegistry) {\n registry.set(prop, overrideRegistry[prop]);\n }\n};\n\n/**\n * Entry point to renderer. Initializes an environment with settings and registries for canvas. This is a simple wrapper\n * over {@link Canvas} which enables common configuration passing to multiple such canvases.\n *\n * Everytime `muze()` is called it creates an environment. These environment supports subset of APIs of Canvas. If\n * common configuration is used to render multiple canvases then it can be set directly in the env. Like if data is\n * common across all the visulization then its better to set the data in env. When a canvas is created it receives all\n * those configuration from env.\n *\n * ```\n * // Creates an environment\n * const env = muze()\n * // Set data property in environment, so that all the canvas created from the same environment gets this data\n * // automatically\n * env.data(dm);\n * // Creates canvas, by default env pushes data to canvas instance\n * const canvas = env.canvas();\n * ```\n *\n * If a property is set on both environment and canvas instance, property set on canvas instance gets more priority.\n *\n * @public\n * @module muze\n * @namespace Muze\n *\n * @return {Env} Instance of an environment\n */\nconst muze = () => {\n // Setters and getters will be mounted on this. Object will be mutated.\n const [env, globalStore] = transactor({}, options);\n const components = Object.assign({}, COMPONENTS);\n const componentSubRegistryDef = Object.assign(SUBREGISTRIES);\n const componentSubRegistry = {};\n\n for (const prop in componentSubRegistryDef) {\n componentSubRegistry[prop] = componentSubRegistryDef[prop]();\n }\n\n // Apart form the setter getter, an instance method is injected to create real renderer instances\n env.canvas = () => {\n // Create a canvas instance with this settings\n const settings = globalStore.serialize();\n const canvas = Canvas.withSettings(settings, { /* registry */\n components,\n componentSubRegistry\n }, env.globalDependencies());\n\n // Whenever settings is changed canvas is updated\n enableChainedTransaction(globalStore, canvas, Object.keys(settings));\n\n return canvas;\n };\n\n // Global dependencies for for compositions. Only one copy of the same should be in the page\n env.globalDependencies = () => {\n if (!globalCache.smartlabel) {\n globalCache.smartlabel = new Smartlabel(1, 'body');\n }\n return {\n smartlabel: globalCache.smartlabel,\n lifeCycleManager: new LifeCycleManager()\n };\n };\n\n // Retrieves global settings. This getter is readonly so that user can't change this as change should happen\n // only from setter to avoid unwanted sync issues.\n env.settings = () => globalStore.serialize();\n\n env.registry = (...overrideRegistry) => {\n // Selectively copy the properties from COMPONENTS\n if (overrideRegistry.length) {\n for (const prop in overrideRegistry) {\n if (prop in defaultRegistry) {\n components[prop] = overrideRegistry[prop];\n }\n }\n return env;\n }\n return components;\n };\n\n env.cellRegistry = (...overrideRegistry) => {\n const cellRegistry = componentSubRegistry.cellRegistry;\n if (overrideRegistry.length) {\n overrideRegistryDefinitions(overrideRegistry[0], cellRegistry);\n return env;\n }\n return cellRegistry.get();\n };\n\n env.layerRegistry = (...overrideRegistry) => {\n const layerRegistry = componentSubRegistry.layerRegistry;\n if (overrideRegistry.length) {\n overrideRegistryDefinitions(overrideRegistry[0], layerRegistry);\n return env;\n }\n return layerRegistry.get();\n };\n\n return env;\n};\n\nconst SideEffects = {\n sideEffects,\n standards: {\n SurrogateSideEffect,\n SpawnableSideEffect,\n GenericSideEffect\n }\n};\n\nconst Behaviours = {\n behaviouralActions,\n standards: {\n GenericBehaviour,\n PersistentBehaviour,\n VolatileBehaviour\n }\n};\n\nmuze.DataModel = DataModel;\nmuze.version = pkg.version;\nmuze.SideEffects = SideEffects;\nmuze.ActionModel = ActionModel;\nmuze.layerFactory = layerFactory;\nmuze.Operators = operators;\nmuze.Behaviours = Behaviours;\nmuze.utils = {\n getClientPoint,\n getEvent,\n makeElement,\n selectElement,\n DateTimeFormatter,\n require\n};\n\nexport default muze;\n"],"sourceRoot":""} \ No newline at end of file diff --git a/examples/data/bank.csv b/examples/data/bank.csv new file mode 100644 index 00000000..4fce3250 --- /dev/null +++ b/examples/data/bank.csv @@ -0,0 +1,11163 @@ +age,job,marital,education,default,balance,housing,loan,contact,day,month,duration,campaign,pdays,previous,poutcome,deposit +59,admin.,married,secondary,no,2343,yes,no,unknown,5,may,1042,1,-1,0,unknown,yes +56,admin.,married,secondary,no,45,no,no,unknown,5,may,1467,1,-1,0,unknown,yes +41,technician,married,secondary,no,1270,yes,no,unknown,5,may,1389,1,-1,0,unknown,yes +55,services,married,secondary,no,2476,yes,no,unknown,5,may,579,1,-1,0,unknown,yes +54,admin.,married,tertiary,no,184,no,no,unknown,5,may,673,2,-1,0,unknown,yes +42,management,single,tertiary,no,0,yes,yes,unknown,5,may,562,2,-1,0,unknown,yes +56,management,married,tertiary,no,830,yes,yes,unknown,6,may,1201,1,-1,0,unknown,yes +60,retired,divorced,secondary,no,545,yes,no,unknown,6,may,1030,1,-1,0,unknown,yes +37,technician,married,secondary,no,1,yes,no,unknown,6,may,608,1,-1,0,unknown,yes +28,services,single,secondary,no,5090,yes,no,unknown,6,may,1297,3,-1,0,unknown,yes +38,admin.,single,secondary,no,100,yes,no,unknown,7,may,786,1,-1,0,unknown,yes +30,blue-collar,married,secondary,no,309,yes,no,unknown,7,may,1574,2,-1,0,unknown,yes +29,management,married,tertiary,no,199,yes,yes,unknown,7,may,1689,4,-1,0,unknown,yes +46,blue-collar,single,tertiary,no,460,yes,no,unknown,7,may,1102,2,-1,0,unknown,yes +31,technician,single,tertiary,no,703,yes,no,unknown,8,may,943,2,-1,0,unknown,yes +35,management,divorced,tertiary,no,3837,yes,no,unknown,8,may,1084,1,-1,0,unknown,yes +32,blue-collar,single,primary,no,611,yes,no,unknown,8,may,541,3,-1,0,unknown,yes +49,services,married,secondary,no,-8,yes,no,unknown,8,may,1119,1,-1,0,unknown,yes +41,admin.,married,secondary,no,55,yes,no,unknown,8,may,1120,2,-1,0,unknown,yes +49,admin.,divorced,secondary,no,168,yes,yes,unknown,8,may,513,1,-1,0,unknown,yes +28,admin.,divorced,secondary,no,785,yes,no,unknown,8,may,442,2,-1,0,unknown,yes +43,management,single,tertiary,no,2067,yes,no,unknown,8,may,756,1,-1,0,unknown,yes +43,management,divorced,tertiary,no,388,yes,no,unknown,8,may,2087,2,-1,0,unknown,yes +43,blue-collar,married,primary,no,-192,yes,no,unknown,8,may,1120,2,-1,0,unknown,yes +37,unemployed,single,secondary,no,381,yes,no,unknown,8,may,985,2,-1,0,unknown,yes +35,blue-collar,single,secondary,no,40,yes,no,unknown,9,may,617,4,-1,0,unknown,yes +31,technician,single,tertiary,no,22,yes,no,unknown,9,may,483,3,-1,0,unknown,yes +43,blue-collar,single,secondary,no,3,yes,no,unknown,9,may,929,3,-1,0,unknown,yes +31,admin.,married,secondary,no,307,yes,no,unknown,9,may,538,1,-1,0,unknown,yes +28,blue-collar,single,secondary,no,759,yes,no,unknown,9,may,710,1,-1,0,unknown,yes +32,blue-collar,married,secondary,yes,-1,yes,no,unknown,9,may,653,1,-1,0,unknown,yes +60,technician,married,primary,no,65,yes,no,unknown,9,may,1028,2,-1,0,unknown,yes +26,blue-collar,single,secondary,no,82,yes,no,unknown,9,may,654,1,-1,0,unknown,yes +40,blue-collar,married,secondary,no,10,yes,no,unknown,9,may,1692,2,-1,0,unknown,yes +33,blue-collar,divorced,primary,no,390,yes,no,unknown,9,may,665,2,-1,0,unknown,yes +32,management,single,tertiary,no,311,no,no,unknown,12,may,757,2,-1,0,unknown,yes +35,blue-collar,married,primary,no,414,no,no,unknown,13,may,504,4,-1,0,unknown,yes +33,management,divorced,secondary,no,5,yes,no,unknown,13,may,1346,1,-1,0,unknown,yes +38,management,married,tertiary,no,119,yes,no,unknown,13,may,568,4,-1,0,unknown,yes +23,entrepreneur,single,primary,no,4,yes,no,unknown,13,may,395,2,-1,0,unknown,yes +60,blue-collar,married,primary,no,1262,yes,yes,unknown,13,may,1015,1,-1,0,unknown,yes +48,management,married,tertiary,no,1949,yes,no,unknown,13,may,683,2,-1,0,unknown,yes +45,entrepreneur,divorced,tertiary,no,-395,yes,no,unknown,13,may,470,1,-1,0,unknown,yes +36,blue-collar,married,secondary,no,1165,yes,no,unknown,13,may,1001,4,-1,0,unknown,yes +52,management,married,unknown,no,2240,yes,no,unknown,13,may,845,1,-1,0,unknown,yes +35,blue-collar,divorced,primary,no,300,yes,no,unknown,13,may,945,2,-1,0,unknown,yes +43,technician,married,secondary,no,3285,yes,no,unknown,13,may,1721,2,-1,0,unknown,yes +52,housemaid,married,secondary,no,3923,yes,no,unknown,14,may,942,3,-1,0,unknown,yes +53,technician,divorced,primary,no,1443,yes,no,unknown,14,may,476,1,-1,0,unknown,yes +48,blue-collar,divorced,primary,no,24,yes,no,unknown,14,may,832,1,-1,0,unknown,yes +41,blue-collar,single,primary,no,1618,yes,no,unknown,14,may,1553,1,-1,0,unknown,yes +39,management,divorced,tertiary,no,517,yes,yes,unknown,14,may,1328,1,-1,0,unknown,yes +59,retired,married,secondary,no,1521,yes,yes,unknown,14,may,1125,2,-1,0,unknown,yes +41,blue-collar,married,secondary,no,2823,yes,no,unknown,14,may,858,1,-1,0,unknown,yes +48,blue-collar,married,secondary,no,1405,yes,no,unknown,14,may,629,2,-1,0,unknown,yes +40,admin.,married,secondary,no,1535,yes,no,unknown,14,may,704,1,-1,0,unknown,yes +48,blue-collar,married,secondary,no,1596,yes,no,unknown,14,may,760,1,-1,0,unknown,yes +60,retired,married,primary,no,1542,yes,no,unknown,14,may,930,1,-1,0,unknown,yes +40,technician,single,unknown,no,3652,yes,no,unknown,14,may,1028,2,-1,0,unknown,yes +57,technician,married,tertiary,no,-1,no,no,unknown,14,may,850,2,-1,0,unknown,yes +51,blue-collar,married,secondary,no,7180,yes,no,unknown,14,may,927,1,-1,0,unknown,yes +41,blue-collar,divorced,secondary,no,5291,yes,no,unknown,14,may,1423,3,-1,0,unknown,yes +41,blue-collar,married,secondary,no,1384,yes,no,unknown,15,may,1162,4,-1,0,unknown,yes +52,blue-collar,divorced,primary,no,-191,yes,no,unknown,15,may,755,1,-1,0,unknown,yes +59,blue-collar,married,primary,no,320,yes,no,unknown,15,may,695,1,-1,0,unknown,yes +44,blue-collar,married,unknown,no,146,yes,no,unknown,15,may,483,1,-1,0,unknown,yes +49,unknown,married,primary,no,341,yes,yes,unknown,15,may,520,2,-1,0,unknown,yes +40,services,married,primary,no,-9,yes,no,unknown,15,may,920,2,-1,0,unknown,yes +41,admin.,married,primary,no,-306,yes,no,unknown,15,may,500,1,-1,0,unknown,yes +44,technician,married,tertiary,no,4580,yes,no,unknown,15,may,911,2,-1,0,unknown,yes +60,services,single,primary,no,313,yes,no,unknown,15,may,920,2,-1,0,unknown,yes +29,management,married,tertiary,no,10576,no,no,unknown,15,may,1224,2,-1,0,unknown,yes +41,retired,divorced,primary,no,-233,yes,no,unknown,15,may,1156,2,-1,0,unknown,yes +41,blue-collar,married,primary,no,2453,yes,no,unknown,15,may,1052,1,-1,0,unknown,yes +42,technician,single,secondary,no,1364,yes,no,unknown,15,may,1867,6,-1,0,unknown,yes +36,services,single,unknown,no,281,yes,no,unknown,16,may,515,1,-1,0,unknown,yes +39,technician,married,tertiary,no,94,yes,yes,unknown,16,may,813,1,-1,0,unknown,yes +31,self-employed,single,tertiary,no,144,yes,no,unknown,16,may,676,1,-1,0,unknown,yes +26,blue-collar,married,secondary,no,246,yes,no,unknown,16,may,1143,3,-1,0,unknown,yes +31,blue-collar,married,secondary,no,92,yes,no,unknown,16,may,688,1,-1,0,unknown,yes +29,admin.,single,secondary,no,163,yes,yes,unknown,16,may,803,1,-1,0,unknown,yes +37,services,divorced,secondary,no,49,yes,no,unknown,16,may,619,2,-1,0,unknown,yes +33,blue-collar,single,secondary,no,-416,yes,no,unknown,16,may,767,2,-1,0,unknown,yes +24,technician,single,secondary,no,409,yes,no,unknown,16,may,912,1,-1,0,unknown,yes +50,admin.,divorced,secondary,no,363,yes,no,unknown,16,may,1340,1,-1,0,unknown,yes +27,technician,single,tertiary,no,3706,yes,no,unknown,16,may,897,1,-1,0,unknown,yes +54,management,single,tertiary,no,4393,yes,no,unknown,16,may,1297,3,-1,0,unknown,yes +30,technician,single,secondary,no,863,yes,no,unknown,16,may,1193,5,-1,0,unknown,yes +34,blue-collar,married,primary,no,695,yes,yes,unknown,16,may,1064,4,-1,0,unknown,yes +37,management,single,secondary,no,792,yes,no,unknown,16,may,1187,4,-1,0,unknown,yes +41,admin.,single,secondary,no,1020,yes,no,unknown,19,may,882,1,-1,0,unknown,yes +47,blue-collar,married,secondary,no,863,yes,no,unknown,19,may,943,2,-1,0,unknown,yes +31,admin.,married,secondary,no,97,yes,no,unknown,19,may,607,1,-1,0,unknown,yes +31,blue-collar,married,secondary,no,754,yes,no,unknown,19,may,1022,4,-1,0,unknown,yes +43,services,divorced,secondary,no,1040,yes,no,unknown,19,may,552,3,-1,0,unknown,yes +37,management,divorced,tertiary,no,122,yes,no,unknown,19,may,1622,2,-1,0,unknown,yes +30,technician,single,tertiary,no,880,yes,yes,unknown,19,may,967,6,-1,0,unknown,yes +41,technician,married,secondary,no,501,yes,no,unknown,19,may,579,5,-1,0,unknown,yes +36,blue-collar,married,secondary,no,4438,yes,no,unknown,20,may,446,1,-1,0,unknown,yes +35,blue-collar,divorced,secondary,no,0,yes,no,unknown,20,may,1205,1,-1,0,unknown,yes +29,services,single,secondary,no,271,yes,no,unknown,20,may,1882,2,-1,0,unknown,yes +35,blue-collar,married,primary,no,102,yes,no,unknown,20,may,1334,1,-1,0,unknown,yes +31,blue-collar,married,secondary,no,2,yes,no,unknown,20,may,182,2,-1,0,unknown,yes +35,services,married,secondary,no,4170,yes,no,unknown,20,may,1777,1,-1,0,unknown,yes +34,technician,single,secondary,no,85,yes,no,unknown,20,may,1182,4,-1,0,unknown,yes +31,admin.,single,secondary,no,431,yes,yes,unknown,20,may,1045,1,-1,0,unknown,yes +44,technician,divorced,secondary,no,982,yes,no,unknown,20,may,650,3,-1,0,unknown,yes +36,blue-collar,married,primary,no,408,yes,yes,unknown,20,may,1063,2,-1,0,unknown,yes +35,blue-collar,married,unknown,no,4822,yes,no,unknown,20,may,843,2,-1,0,unknown,yes +41,blue-collar,married,primary,no,1250,yes,no,unknown,20,may,1392,2,-1,0,unknown,yes +31,blue-collar,single,primary,no,216,yes,no,unknown,21,may,565,1,-1,0,unknown,yes +34,blue-collar,married,secondary,no,1207,yes,no,unknown,21,may,905,1,-1,0,unknown,yes +32,technician,married,secondary,no,791,yes,no,unknown,21,may,783,2,-1,0,unknown,yes +36,management,married,tertiary,no,849,yes,yes,unknown,21,may,958,2,-1,0,unknown,yes +30,blue-collar,single,secondary,yes,239,yes,no,unknown,21,may,412,1,-1,0,unknown,yes +37,technician,single,secondary,no,1211,yes,no,unknown,21,may,795,1,-1,0,unknown,yes +36,blue-collar,married,primary,no,599,yes,no,unknown,21,may,649,2,-1,0,unknown,yes +31,management,single,tertiary,no,825,yes,no,unknown,21,may,506,2,-1,0,unknown,yes +27,technician,married,secondary,no,2183,yes,yes,unknown,21,may,857,1,-1,0,unknown,yes +34,retired,married,primary,no,4499,no,no,unknown,21,may,1681,1,-1,0,unknown,yes +30,technician,single,tertiary,no,1289,yes,no,unknown,21,may,1697,2,-1,0,unknown,yes +32,technician,single,tertiary,no,4665,yes,no,unknown,21,may,860,2,-1,0,unknown,yes +37,technician,single,secondary,no,3326,yes,no,unknown,21,may,799,1,-1,0,unknown,yes +32,blue-collar,married,secondary,no,783,yes,no,unknown,21,may,923,3,-1,0,unknown,yes +33,blue-collar,married,secondary,no,0,yes,no,unknown,21,may,521,3,-1,0,unknown,yes +35,blue-collar,married,primary,no,994,yes,no,unknown,23,may,1349,8,-1,0,unknown,yes +35,self-employed,divorced,tertiary,no,1354,yes,no,unknown,23,may,736,2,-1,0,unknown,yes +30,blue-collar,single,secondary,no,239,yes,no,unknown,23,may,785,1,-1,0,unknown,yes +45,blue-collar,divorced,primary,no,-311,yes,no,unknown,23,may,1030,1,-1,0,unknown,yes +45,admin.,married,secondary,no,149,yes,no,unknown,23,may,893,3,-1,0,unknown,yes +33,blue-collar,married,secondary,no,1464,yes,no,unknown,23,may,588,3,-1,0,unknown,yes +44,management,divorced,tertiary,no,5773,no,no,unknown,23,may,597,6,-1,0,unknown,yes +40,blue-collar,married,primary,no,278,yes,no,unknown,23,may,1015,3,-1,0,unknown,yes +31,blue-collar,married,secondary,no,2910,yes,no,unknown,23,may,1392,2,-1,0,unknown,yes +30,technician,married,tertiary,no,541,yes,no,unknown,26,may,414,2,-1,0,unknown,yes +44,technician,divorced,secondary,no,1262,yes,no,unknown,26,may,788,11,-1,0,unknown,yes +34,services,married,secondary,no,-538,yes,no,unknown,26,may,682,1,-1,0,unknown,yes +37,blue-collar,married,secondary,no,125,no,no,unknown,26,may,679,2,-1,0,unknown,yes +28,self-employed,single,tertiary,no,0,yes,no,unknown,26,may,1560,2,-1,0,unknown,yes +32,admin.,single,secondary,no,620,yes,no,unknown,26,may,1234,3,-1,0,unknown,yes +37,blue-collar,divorced,secondary,no,316,yes,no,unknown,26,may,642,2,-1,0,unknown,yes +34,management,married,tertiary,no,2287,yes,no,unknown,26,may,895,4,-1,0,unknown,yes +38,admin.,divorced,secondary,no,198,yes,no,unknown,26,may,431,2,-1,0,unknown,yes +28,admin.,single,secondary,no,460,yes,no,unknown,26,may,741,6,-1,0,unknown,yes +31,management,divorced,tertiary,no,1145,yes,no,unknown,26,may,1272,4,-1,0,unknown,yes +59,services,married,secondary,no,-22,yes,no,unknown,26,may,748,3,-1,0,unknown,yes +24,blue-collar,married,secondary,no,685,yes,no,unknown,26,may,896,3,-1,0,unknown,yes +26,services,single,secondary,no,901,yes,no,unknown,26,may,764,2,-1,0,unknown,yes +59,retired,single,secondary,no,351,yes,no,unknown,27,may,1063,5,-1,0,unknown,yes +30,entrepreneur,single,primary,no,0,yes,yes,unknown,27,may,1051,1,-1,0,unknown,yes +37,admin.,married,secondary,no,274,yes,no,unknown,27,may,731,3,-1,0,unknown,yes +30,admin.,single,secondary,no,-213,yes,yes,unknown,27,may,751,1,-1,0,unknown,yes +25,blue-collar,married,secondary,no,97,yes,no,unknown,27,may,709,1,-1,0,unknown,yes +44,services,divorced,secondary,no,51,yes,yes,unknown,27,may,3094,2,-1,0,unknown,yes +29,management,married,tertiary,no,314,no,no,unknown,28,may,938,2,-1,0,unknown,yes +26,management,single,tertiary,no,6840,yes,no,unknown,28,may,1560,2,-1,0,unknown,yes +26,technician,single,secondary,no,668,yes,no,unknown,28,may,576,3,-1,0,unknown,yes +27,services,single,secondary,no,54,yes,no,unknown,28,may,543,2,-1,0,unknown,yes +25,self-employed,single,secondary,no,1242,yes,no,unknown,28,may,615,2,-1,0,unknown,yes +28,management,married,secondary,no,292,yes,no,unknown,28,may,507,1,-1,0,unknown,yes +23,services,single,secondary,no,665,yes,no,unknown,28,may,1183,1,-1,0,unknown,yes +34,management,single,tertiary,no,1058,yes,no,unknown,28,may,864,2,-1,0,unknown,yes +28,student,single,secondary,no,949,yes,no,unknown,28,may,1730,1,-1,0,unknown,yes +51,entrepreneur,married,unknown,no,606,yes,no,unknown,28,may,560,9,-1,0,unknown,yes +35,blue-collar,married,secondary,no,0,yes,yes,unknown,29,may,543,1,-1,0,unknown,yes +35,admin.,married,secondary,no,404,yes,no,unknown,29,may,539,1,-1,0,unknown,yes +56,blue-collar,married,secondary,no,249,yes,no,unknown,29,may,791,2,-1,0,unknown,yes +45,unemployed,divorced,secondary,no,3354,yes,no,unknown,29,may,746,1,-1,0,unknown,yes +60,blue-collar,divorced,secondary,no,0,yes,no,unknown,29,may,1207,1,-1,0,unknown,yes +56,technician,married,secondary,no,589,yes,no,unknown,29,may,535,2,-1,0,unknown,yes +27,management,single,tertiary,no,12956,yes,no,unknown,29,may,789,3,-1,0,unknown,yes +30,admin.,married,secondary,no,873,yes,no,unknown,29,may,792,3,-1,0,unknown,yes +45,blue-collar,divorced,primary,no,594,yes,no,unknown,29,may,833,2,-1,0,unknown,yes +29,blue-collar,single,secondary,no,-20,yes,no,unknown,29,may,814,2,-1,0,unknown,yes +38,management,divorced,tertiary,no,4692,yes,no,unknown,29,may,1363,2,-1,0,unknown,yes +30,blue-collar,married,secondary,no,486,yes,no,unknown,29,may,1109,3,-1,0,unknown,yes +44,blue-collar,single,primary,no,1593,yes,no,unknown,29,may,828,3,-1,0,unknown,yes +36,management,single,tertiary,no,7606,yes,no,unknown,30,may,917,1,-1,0,unknown,yes +38,technician,married,secondary,no,226,yes,no,unknown,30,may,762,3,-1,0,unknown,yes +36,blue-collar,single,secondary,no,366,yes,yes,unknown,30,may,1133,2,-1,0,unknown,yes +37,management,divorced,secondary,no,16,yes,no,unknown,30,may,638,1,-1,0,unknown,yes +35,management,single,tertiary,no,565,yes,no,unknown,30,may,763,1,-1,0,unknown,yes +38,admin.,divorced,secondary,no,19,yes,no,unknown,30,may,604,2,-1,0,unknown,yes +40,services,married,primary,no,1082,yes,no,unknown,30,may,854,2,-1,0,unknown,yes +42,unemployed,divorced,secondary,no,1713,yes,no,unknown,30,may,855,2,-1,0,unknown,yes +46,management,divorced,tertiary,no,14481,yes,no,unknown,30,may,1269,1,-1,0,unknown,yes +35,technician,divorced,secondary,no,5724,yes,no,unknown,30,may,691,10,-1,0,unknown,yes +34,technician,divorced,secondary,no,1451,yes,no,unknown,30,may,1097,15,-1,0,unknown,yes +32,services,married,secondary,no,-34,yes,no,unknown,30,may,1236,2,-1,0,unknown,yes +50,unemployed,married,secondary,no,3674,yes,no,unknown,30,may,886,3,-1,0,unknown,yes +35,blue-collar,married,secondary,no,698,yes,yes,unknown,30,may,1343,3,-1,0,unknown,yes +36,technician,single,secondary,no,4136,yes,no,unknown,30,may,812,3,-1,0,unknown,yes +53,blue-collar,divorced,primary,no,2656,yes,no,unknown,30,may,1980,2,-1,0,unknown,yes +46,management,single,tertiary,no,2904,yes,no,unknown,30,may,984,2,-1,0,unknown,yes +26,management,single,tertiary,no,1004,yes,no,unknown,30,may,228,2,-1,0,unknown,yes +45,technician,single,secondary,no,410,yes,no,unknown,30,may,891,4,-1,0,unknown,yes +31,unemployed,divorced,primary,no,0,yes,no,unknown,30,may,745,12,-1,0,unknown,yes +29,management,single,tertiary,no,0,yes,no,unknown,30,may,539,12,-1,0,unknown,yes +53,entrepreneur,single,secondary,no,62,yes,no,unknown,30,may,1044,5,-1,0,unknown,yes +27,blue-collar,married,primary,no,416,yes,no,unknown,30,may,1193,2,-1,0,unknown,yes +39,management,married,tertiary,no,2763,yes,no,unknown,2,jun,526,2,-1,0,unknown,yes +36,services,married,secondary,no,2984,yes,no,unknown,2,jun,394,1,-1,0,unknown,yes +41,blue-collar,married,primary,no,143,yes,yes,unknown,2,jun,659,2,-1,0,unknown,yes +36,services,married,primary,no,0,yes,no,unknown,2,jun,1036,1,-1,0,unknown,yes +32,technician,married,secondary,no,696,yes,no,unknown,2,jun,815,1,-1,0,unknown,yes +35,services,married,secondary,no,152,yes,no,unknown,2,jun,563,1,-1,0,unknown,yes +36,management,single,tertiary,no,-78,yes,no,unknown,2,jun,1068,1,-1,0,unknown,yes +35,management,married,tertiary,no,867,yes,no,unknown,2,jun,230,3,-1,0,unknown,yes +30,blue-collar,single,secondary,no,953,yes,no,unknown,2,jun,747,2,-1,0,unknown,yes +42,blue-collar,married,secondary,no,443,yes,no,unknown,2,jun,671,5,-1,0,unknown,yes +42,technician,single,secondary,yes,-1129,yes,no,unknown,2,jun,555,5,-1,0,unknown,yes +32,blue-collar,married,primary,no,415,yes,no,unknown,2,jun,777,4,-1,0,unknown,yes +29,blue-collar,single,secondary,no,260,yes,no,unknown,2,jun,707,14,-1,0,unknown,yes +44,management,divorced,tertiary,yes,-411,yes,no,unknown,2,jun,432,4,-1,0,unknown,yes +32,technician,single,secondary,no,1279,yes,no,unknown,3,jun,1173,3,-1,0,unknown,yes +31,unemployed,married,secondary,no,86,yes,yes,unknown,3,jun,963,2,-1,0,unknown,yes +40,self-employed,married,secondary,yes,-754,yes,yes,unknown,3,jun,941,3,-1,0,unknown,yes +43,entrepreneur,married,secondary,no,0,no,no,unknown,3,jun,1025,7,-1,0,unknown,yes +27,management,single,secondary,no,178,yes,no,unknown,3,jun,732,2,-1,0,unknown,yes +37,services,single,secondary,no,278,yes,no,unknown,3,jun,1045,3,-1,0,unknown,yes +23,services,single,secondary,no,425,yes,no,unknown,3,jun,768,1,-1,0,unknown,yes +25,management,married,primary,no,168,yes,no,unknown,3,jun,801,1,-1,0,unknown,yes +26,blue-collar,single,secondary,yes,-36,yes,no,unknown,3,jun,482,2,-1,0,unknown,yes +47,blue-collar,divorced,primary,no,126,yes,no,unknown,3,jun,2456,2,-1,0,unknown,yes +35,admin.,married,secondary,no,-87,yes,no,unknown,3,jun,1363,7,-1,0,unknown,yes +32,technician,single,tertiary,no,6281,yes,no,unknown,3,jun,1336,4,-1,0,unknown,yes +45,management,divorced,secondary,no,644,yes,no,unknown,4,jun,633,1,-1,0,unknown,yes +30,admin.,divorced,secondary,no,377,yes,no,unknown,4,jun,524,15,-1,0,unknown,yes +29,services,single,secondary,no,-271,yes,no,unknown,4,jun,578,1,-1,0,unknown,yes +38,blue-collar,married,primary,no,5839,yes,no,unknown,4,jun,984,2,-1,0,unknown,yes +23,blue-collar,single,secondary,no,492,yes,no,unknown,4,jun,638,1,-1,0,unknown,yes +27,management,single,tertiary,no,99,yes,no,unknown,4,jun,767,2,-1,0,unknown,yes +27,management,single,tertiary,yes,-713,yes,no,unknown,4,jun,525,2,-1,0,unknown,yes +29,services,single,secondary,no,32,yes,no,unknown,4,jun,563,1,-1,0,unknown,yes +30,self-employed,married,tertiary,no,543,yes,yes,unknown,4,jun,1449,6,-1,0,unknown,yes +36,blue-collar,married,primary,no,403,yes,no,unknown,4,jun,920,1,-1,0,unknown,yes +35,admin.,divorced,secondary,no,437,yes,no,unknown,4,jun,908,1,-1,0,unknown,yes +36,blue-collar,married,secondary,no,1772,no,no,unknown,5,jun,208,1,-1,0,unknown,yes +59,retired,divorced,primary,no,-88,yes,no,unknown,5,jun,910,2,-1,0,unknown,yes +47,entrepreneur,married,secondary,no,0,no,no,unknown,5,jun,1446,1,-1,0,unknown,yes +58,entrepreneur,married,tertiary,no,853,no,no,unknown,5,jun,1149,2,-1,0,unknown,yes +37,management,single,tertiary,no,240,no,no,unknown,5,jun,1123,1,-1,0,unknown,yes +46,admin.,single,secondary,no,849,yes,no,unknown,5,jun,508,2,-1,0,unknown,yes +43,blue-collar,single,secondary,no,318,yes,no,unknown,5,jun,736,2,-1,0,unknown,yes +27,management,single,tertiary,no,703,yes,no,unknown,5,jun,590,3,-1,0,unknown,yes +38,services,divorced,secondary,no,61,no,no,unknown,5,jun,636,1,-1,0,unknown,yes +53,housemaid,married,primary,no,104,no,yes,unknown,5,jun,701,1,-1,0,unknown,yes +47,blue-collar,married,secondary,no,1996,no,no,unknown,5,jun,761,2,-1,0,unknown,yes +56,housemaid,divorced,primary,yes,1238,no,no,unknown,5,jun,1558,1,-1,0,unknown,yes +41,housemaid,married,secondary,no,879,no,no,unknown,5,jun,1053,2,-1,0,unknown,yes +29,self-employed,married,secondary,no,425,yes,no,unknown,5,jun,562,15,-1,0,unknown,yes +50,technician,married,secondary,no,416,yes,no,unknown,5,jun,494,5,-1,0,unknown,yes +45,blue-collar,divorced,primary,no,844,no,no,unknown,5,jun,1018,3,-1,0,unknown,yes +35,blue-collar,married,secondary,no,860,yes,no,unknown,5,jun,884,4,-1,0,unknown,yes +26,technician,single,secondary,no,639,yes,no,unknown,6,jun,709,5,-1,0,unknown,yes +26,admin.,married,secondary,no,710,yes,yes,unknown,6,jun,1276,2,-1,0,unknown,yes +37,blue-collar,married,unknown,no,1508,no,yes,unknown,6,jun,381,2,-1,0,unknown,yes +30,admin.,single,secondary,no,223,yes,no,unknown,6,jun,862,11,-1,0,unknown,yes +38,management,single,tertiary,no,619,yes,no,unknown,6,jun,460,4,-1,0,unknown,yes +37,services,divorced,secondary,no,319,yes,no,unknown,6,jun,467,3,-1,0,unknown,yes +53,technician,married,secondary,no,480,no,no,unknown,6,jun,648,2,-1,0,unknown,yes +29,blue-collar,single,primary,no,213,yes,no,unknown,6,jun,2653,3,-1,0,unknown,yes +35,management,single,tertiary,no,68,no,no,unknown,6,jun,1085,1,-1,0,unknown,yes +28,blue-collar,married,secondary,no,2788,yes,no,unknown,6,jun,369,2,-1,0,unknown,yes +55,blue-collar,married,unknown,no,7561,no,no,unknown,6,jun,685,3,-1,0,unknown,yes +49,management,divorced,secondary,no,-46,yes,no,unknown,9,jun,1055,10,-1,0,unknown,yes +50,services,married,secondary,no,1595,no,no,unknown,9,jun,882,1,-1,0,unknown,yes +43,management,single,tertiary,no,1046,no,no,unknown,9,jun,901,1,-1,0,unknown,yes +58,self-employed,divorced,tertiary,no,1382,no,no,unknown,9,jun,700,1,-1,0,unknown,yes +38,technician,married,primary,no,217,yes,no,unknown,9,jun,491,6,-1,0,unknown,yes +48,blue-collar,divorced,primary,no,183,no,no,unknown,9,jun,940,1,-1,0,unknown,yes +59,management,married,secondary,no,1321,no,no,unknown,9,jun,3881,3,-1,0,unknown,yes +58,blue-collar,married,secondary,no,25,no,no,unknown,9,jun,486,3,-1,0,unknown,yes +36,self-employed,single,tertiary,no,4844,no,no,unknown,9,jun,1137,3,-1,0,unknown,yes +42,entrepreneur,married,tertiary,no,5345,no,no,unknown,11,jun,878,3,-1,0,unknown,yes +41,admin.,single,secondary,no,812,no,yes,unknown,11,jun,583,4,-1,0,unknown,yes +42,admin.,married,secondary,no,105,no,no,unknown,11,jun,1159,4,-1,0,unknown,yes +39,management,married,tertiary,no,-190,no,yes,unknown,11,jun,893,8,-1,0,unknown,yes +57,housemaid,married,primary,no,625,no,yes,unknown,11,jun,867,1,-1,0,unknown,yes +52,retired,married,unknown,no,293,no,no,unknown,11,jun,706,1,-1,0,unknown,yes +59,retired,married,unknown,no,1033,no,no,unknown,11,jun,1199,1,-1,0,unknown,yes +56,blue-collar,married,secondary,no,1210,no,no,unknown,11,jun,935,1,-1,0,unknown,yes +49,management,married,tertiary,no,64,no,no,unknown,11,jun,586,1,-1,0,unknown,yes +35,blue-collar,divorced,unknown,no,164,no,no,unknown,11,jun,967,2,-1,0,unknown,yes +36,unemployed,married,secondary,no,1766,no,no,unknown,11,jun,595,2,-1,0,unknown,yes +40,admin.,single,tertiary,no,1248,no,no,unknown,11,jun,1290,2,-1,0,unknown,yes +55,blue-collar,married,secondary,no,0,no,no,unknown,12,jun,614,2,-1,0,unknown,yes +58,admin.,married,secondary,no,826,no,no,unknown,12,jun,885,1,-1,0,unknown,yes +39,self-employed,married,tertiary,no,2630,no,no,unknown,12,jun,651,5,-1,0,unknown,yes +47,housemaid,single,tertiary,no,3727,no,no,unknown,12,jun,993,6,-1,0,unknown,yes +40,management,married,secondary,no,406,yes,no,unknown,12,jun,577,2,-1,0,unknown,yes +35,blue-collar,married,tertiary,no,2999,no,no,unknown,12,jun,1141,6,-1,0,unknown,yes +48,blue-collar,married,secondary,no,1000,yes,no,unknown,12,jun,1268,2,-1,0,unknown,yes +48,management,divorced,tertiary,no,503,no,yes,unknown,12,jun,1243,7,-1,0,unknown,yes +24,blue-collar,single,secondary,yes,-203,yes,no,unknown,12,jun,465,3,-1,0,unknown,yes +49,blue-collar,married,primary,no,361,yes,no,unknown,16,jun,513,2,-1,0,unknown,yes +36,blue-collar,married,secondary,no,274,yes,no,unknown,16,jun,686,11,-1,0,unknown,yes +52,retired,divorced,tertiary,no,3687,yes,yes,unknown,16,jun,741,4,-1,0,unknown,yes +42,entrepreneur,single,unknown,no,323,no,no,unknown,16,jun,617,1,-1,0,unknown,yes +36,services,married,secondary,no,981,no,no,unknown,16,jun,1093,1,-1,0,unknown,yes +36,blue-collar,divorced,secondary,no,638,yes,no,unknown,16,jun,1395,2,-1,0,unknown,yes +48,unemployed,single,tertiary,no,3229,no,no,unknown,16,jun,1089,1,-1,0,unknown,yes +51,management,single,secondary,no,1610,yes,no,unknown,16,jun,1248,3,-1,0,unknown,yes +51,blue-collar,married,secondary,no,33,no,yes,unknown,16,jun,721,3,-1,0,unknown,yes +46,technician,married,secondary,no,536,yes,no,unknown,16,jun,750,2,-1,0,unknown,yes +37,management,married,tertiary,no,0,no,no,unknown,16,jun,637,6,-1,0,unknown,yes +36,entrepreneur,married,tertiary,no,3057,no,no,unknown,16,jun,2769,4,-1,0,unknown,yes +47,management,married,secondary,no,2892,no,no,unknown,17,jun,556,1,-1,0,unknown,yes +40,technician,divorced,tertiary,no,0,no,no,unknown,17,jun,522,1,-1,0,unknown,yes +38,student,single,tertiary,no,3316,no,no,unknown,17,jun,1345,3,-1,0,unknown,yes +40,management,married,secondary,no,106,no,no,unknown,17,jun,676,2,-1,0,unknown,yes +39,blue-collar,married,primary,no,2303,yes,no,unknown,17,jun,775,3,-1,0,unknown,yes +60,management,married,tertiary,no,3301,no,no,unknown,17,jun,2621,3,-1,0,unknown,yes +39,self-employed,single,tertiary,no,426,no,no,unknown,18,jun,1029,1,-1,0,unknown,yes +51,services,divorced,secondary,no,9,no,no,unknown,18,jun,371,2,-1,0,unknown,yes +27,admin.,married,secondary,no,-97,yes,no,unknown,18,jun,1528,2,-1,0,unknown,yes +41,management,single,tertiary,no,11008,no,no,unknown,18,jun,1540,1,-1,0,unknown,yes +42,blue-collar,single,primary,no,4930,no,no,unknown,18,jun,973,1,-1,0,unknown,yes +41,entrepreneur,married,secondary,no,707,no,no,unknown,18,jun,707,1,-1,0,unknown,yes +33,technician,married,secondary,no,4,yes,yes,unknown,18,jun,625,2,-1,0,unknown,yes +46,admin.,married,secondary,no,126,no,no,unknown,18,jun,1255,1,-1,0,unknown,yes +31,blue-collar,married,secondary,no,671,yes,no,unknown,18,jun,704,4,-1,0,unknown,yes +41,blue-collar,married,primary,no,219,no,yes,unknown,18,jun,1574,3,-1,0,unknown,yes +41,blue-collar,divorced,secondary,no,3622,no,no,unknown,19,jun,1135,4,-1,0,unknown,yes +55,retired,divorced,secondary,no,1580,no,yes,unknown,19,jun,1007,1,-1,0,unknown,yes +53,technician,married,secondary,no,1319,no,no,unknown,19,jun,1318,3,-1,0,unknown,yes +55,housemaid,married,primary,no,2152,no,no,unknown,19,jun,922,2,-1,0,unknown,yes +39,services,married,secondary,no,2843,yes,no,unknown,19,jun,585,1,-1,0,unknown,yes +40,entrepreneur,married,tertiary,yes,0,no,no,unknown,19,jun,952,4,-1,0,unknown,yes +59,retired,married,primary,no,1115,no,no,unknown,19,jun,834,1,-1,0,unknown,yes +42,blue-collar,single,secondary,no,625,no,no,unknown,19,jun,651,3,-1,0,unknown,yes +41,blue-collar,married,primary,no,246,no,no,unknown,19,jun,683,3,-1,0,unknown,yes +27,blue-collar,married,secondary,no,61,yes,no,unknown,19,jun,1012,1,-1,0,unknown,yes +25,blue-collar,single,secondary,no,-191,yes,no,unknown,19,jun,958,7,-1,0,unknown,yes +43,unemployed,married,primary,no,519,no,no,unknown,20,jun,973,2,-1,0,unknown,yes +44,services,married,secondary,no,522,no,yes,unknown,20,jun,911,1,-1,0,unknown,yes +26,blue-collar,single,secondary,no,-46,yes,no,unknown,20,jun,382,7,-1,0,unknown,yes +52,retired,married,tertiary,no,2269,no,no,unknown,20,jun,1210,1,-1,0,unknown,yes +54,services,married,unknown,no,386,no,yes,unknown,20,jun,838,1,-1,0,unknown,yes +56,management,married,tertiary,no,0,no,yes,unknown,20,jun,422,1,-1,0,unknown,yes +57,management,married,tertiary,no,9103,no,yes,unknown,20,jun,1098,2,-1,0,unknown,yes +29,blue-collar,single,secondary,no,908,yes,no,unknown,20,jun,1663,1,-1,0,unknown,yes +47,technician,married,tertiary,no,1694,no,yes,unknown,20,jun,560,3,-1,0,unknown,yes +57,management,married,tertiary,no,-92,yes,yes,unknown,20,jun,1617,1,-1,0,unknown,yes +40,blue-collar,married,secondary,no,188,yes,yes,unknown,20,jun,570,2,-1,0,unknown,yes +46,services,divorced,secondary,no,0,no,no,unknown,20,jun,1023,3,-1,0,unknown,yes +43,blue-collar,single,secondary,no,740,yes,no,unknown,20,jun,585,2,-1,0,unknown,yes +45,management,married,tertiary,no,655,no,no,unknown,20,jun,693,3,-1,0,unknown,yes +24,management,married,secondary,no,867,yes,no,unknown,20,jun,546,10,-1,0,unknown,yes +40,blue-collar,married,secondary,no,1009,yes,yes,unknown,20,jun,1036,5,-1,0,unknown,yes +38,services,divorced,unknown,no,6360,no,no,unknown,20,jun,1409,2,-1,0,unknown,yes +36,unemployed,married,tertiary,no,4145,no,no,unknown,20,jun,988,4,-1,0,unknown,yes +27,blue-collar,single,secondary,yes,-27,no,no,unknown,23,jun,498,2,-1,0,unknown,yes +26,admin.,single,primary,no,-122,yes,no,unknown,23,jun,670,3,-1,0,unknown,yes +43,management,married,tertiary,no,149,yes,no,unknown,23,jun,662,2,-1,0,unknown,yes +25,blue-collar,single,primary,no,52,yes,no,unknown,24,jun,528,2,-1,0,unknown,yes +27,blue-collar,married,tertiary,no,335,yes,no,unknown,26,jun,519,3,-1,0,unknown,yes +30,technician,married,tertiary,no,526,yes,yes,unknown,26,jun,677,3,-1,0,unknown,yes +28,admin.,single,secondary,no,-7,no,yes,unknown,26,jun,3183,2,-1,0,unknown,yes +27,blue-collar,married,primary,no,-413,no,yes,unknown,27,jun,422,6,-1,0,unknown,yes +32,admin.,divorced,secondary,no,-241,no,yes,unknown,27,jun,856,2,-1,0,unknown,yes +41,blue-collar,single,secondary,no,75,yes,no,unknown,1,jul,479,9,-1,0,unknown,yes +37,technician,single,tertiary,no,0,no,no,unknown,1,jul,1135,2,-1,0,unknown,yes +27,technician,single,secondary,no,158,no,no,unknown,1,jul,650,2,-1,0,unknown,yes +29,services,single,secondary,no,84,no,yes,unknown,3,jul,587,3,-1,0,unknown,yes +33,services,married,secondary,no,114,no,yes,unknown,3,jul,676,1,-1,0,unknown,yes +36,technician,married,primary,no,0,no,no,unknown,4,jul,584,1,-1,0,unknown,yes +28,blue-collar,single,secondary,no,-127,yes,no,cellular,4,jul,1044,3,-1,0,unknown,yes +55,blue-collar,married,secondary,no,49,yes,no,cellular,7,jul,494,4,-1,0,unknown,yes +51,technician,married,secondary,no,216,no,no,cellular,7,jul,615,2,-1,0,unknown,yes +39,technician,single,secondary,no,506,yes,no,cellular,7,jul,718,2,-1,0,unknown,yes +42,blue-collar,divorced,primary,no,213,yes,no,cellular,7,jul,434,3,-1,0,unknown,yes +33,services,single,secondary,no,170,no,no,cellular,7,jul,782,1,-1,0,unknown,yes +36,entrepreneur,divorced,tertiary,no,776,no,yes,cellular,7,jul,722,3,-1,0,unknown,yes +45,technician,married,secondary,no,879,no,no,cellular,7,jul,621,2,-1,0,unknown,yes +37,self-employed,married,secondary,no,1633,no,no,cellular,7,jul,629,2,-1,0,unknown,yes +46,unemployed,married,secondary,no,926,no,no,cellular,7,jul,385,5,-1,0,unknown,yes +32,self-employed,single,tertiary,no,2559,no,no,cellular,7,jul,889,1,-1,0,unknown,yes +28,technician,single,secondary,no,909,no,yes,cellular,7,jul,532,1,-1,0,unknown,yes +45,admin.,divorced,secondary,no,-176,no,yes,cellular,7,jul,574,1,-1,0,unknown,yes +41,blue-collar,single,secondary,yes,1085,yes,yes,cellular,7,jul,599,1,-1,0,unknown,yes +59,blue-collar,divorced,primary,no,1265,no,yes,cellular,7,jul,849,1,-1,0,unknown,yes +47,technician,single,secondary,no,-239,yes,yes,cellular,7,jul,973,3,-1,0,unknown,yes +31,blue-collar,single,secondary,no,726,no,no,cellular,7,jul,719,2,-1,0,unknown,yes +31,management,single,tertiary,no,296,no,yes,cellular,8,jul,509,4,-1,0,unknown,yes +33,entrepreneur,married,secondary,no,-627,yes,yes,cellular,8,jul,740,1,-1,0,unknown,yes +52,entrepreneur,married,tertiary,yes,-468,no,no,cellular,8,jul,534,1,-1,0,unknown,yes +26,self-employed,single,secondary,no,551,no,no,cellular,8,jul,531,1,-1,0,unknown,yes +25,technician,single,secondary,no,0,no,yes,cellular,8,jul,634,1,-1,0,unknown,yes +25,blue-collar,married,secondary,no,101,no,yes,cellular,8,jul,460,3,-1,0,unknown,yes +28,blue-collar,single,secondary,no,517,no,yes,cellular,8,jul,681,1,-1,0,unknown,yes +33,entrepreneur,divorced,tertiary,no,37,no,yes,cellular,8,jul,1082,1,-1,0,unknown,yes +45,management,divorced,tertiary,no,854,no,yes,cellular,8,jul,730,1,-1,0,unknown,yes +36,services,married,secondary,no,30,no,yes,cellular,8,jul,716,5,-1,0,unknown,yes +26,blue-collar,single,secondary,yes,81,no,yes,cellular,8,jul,803,2,-1,0,unknown,yes +38,technician,married,secondary,no,0,no,no,cellular,8,jul,635,1,-1,0,unknown,yes +56,blue-collar,single,secondary,no,663,no,yes,cellular,8,jul,819,3,-1,0,unknown,yes +26,admin.,single,secondary,no,102,no,yes,cellular,8,jul,658,2,-1,0,unknown,yes +26,technician,married,secondary,no,370,no,yes,cellular,8,jul,1061,4,-1,0,unknown,yes +25,blue-collar,single,secondary,no,189,no,yes,cellular,8,jul,687,2,-1,0,unknown,yes +26,unemployed,single,secondary,no,111,no,no,cellular,9,jul,537,1,-1,0,unknown,yes +40,blue-collar,married,primary,no,665,yes,no,cellular,9,jul,781,1,-1,0,unknown,yes +37,admin.,married,primary,no,214,yes,no,cellular,9,jul,645,1,-1,0,unknown,yes +43,blue-collar,single,primary,no,0,no,no,cellular,9,jul,1242,1,-1,0,unknown,yes +41,services,divorced,tertiary,no,1583,yes,no,cellular,9,jul,662,1,-1,0,unknown,yes +49,blue-collar,married,secondary,no,0,no,yes,cellular,9,jul,625,1,-1,0,unknown,yes +29,admin.,divorced,tertiary,yes,0,no,yes,cellular,9,jul,426,3,-1,0,unknown,yes +39,services,divorced,secondary,no,687,yes,no,cellular,9,jul,869,1,-1,0,unknown,yes +38,management,married,tertiary,yes,327,yes,yes,cellular,9,jul,556,5,-1,0,unknown,yes +26,technician,married,secondary,no,-119,no,yes,cellular,9,jul,359,5,-1,0,unknown,yes +32,management,married,tertiary,no,794,yes,yes,cellular,9,jul,1014,1,-1,0,unknown,yes +33,blue-collar,married,primary,no,-191,yes,yes,cellular,9,jul,1290,4,-1,0,unknown,yes +31,management,single,tertiary,no,409,no,yes,cellular,9,jul,564,5,-1,0,unknown,yes +49,blue-collar,married,primary,no,3,no,yes,cellular,9,jul,1439,6,-1,0,unknown,yes +27,unemployed,single,primary,no,9,no,yes,cellular,9,jul,919,2,-1,0,unknown,yes +30,blue-collar,single,secondary,no,155,yes,yes,cellular,9,jul,1426,3,-1,0,unknown,yes +35,blue-collar,married,secondary,no,1330,no,no,cellular,10,jul,901,1,-1,0,unknown,yes +26,blue-collar,single,secondary,no,-29,yes,no,cellular,10,jul,998,4,-1,0,unknown,yes +45,entrepreneur,married,unknown,no,3133,yes,yes,cellular,10,jul,804,1,-1,0,unknown,yes +34,admin.,married,secondary,no,-33,yes,yes,cellular,10,jul,961,1,-1,0,unknown,yes +28,admin.,single,secondary,no,-170,no,yes,cellular,10,jul,720,2,-1,0,unknown,yes +25,blue-collar,single,secondary,no,1243,no,yes,cellular,10,jul,1341,7,-1,0,unknown,yes +30,blue-collar,single,secondary,no,1598,yes,no,cellular,10,jul,634,1,-1,0,unknown,yes +30,services,married,secondary,no,5,no,yes,cellular,10,jul,829,5,-1,0,unknown,yes +47,services,married,secondary,no,367,yes,no,cellular,10,jul,476,4,-1,0,unknown,yes +57,admin.,divorced,secondary,no,658,no,no,cellular,10,jul,724,1,-1,0,unknown,yes +38,management,married,tertiary,no,1722,yes,no,cellular,10,jul,500,1,-1,0,unknown,yes +54,technician,married,secondary,no,-315,no,yes,cellular,10,jul,2029,1,-1,0,unknown,yes +25,blue-collar,single,primary,no,2483,no,no,cellular,10,jul,1499,3,-1,0,unknown,yes +30,blue-collar,married,secondary,no,0,yes,yes,cellular,10,jul,1399,1,-1,0,unknown,yes +26,management,single,tertiary,no,45,no,no,cellular,10,jul,1187,3,-1,0,unknown,yes +31,student,married,primary,no,46,yes,no,cellular,10,jul,487,1,-1,0,unknown,yes +29,blue-collar,single,secondary,no,482,no,yes,cellular,10,jul,1097,3,-1,0,unknown,yes +49,blue-collar,married,secondary,no,3728,yes,no,cellular,11,jul,1060,2,-1,0,unknown,yes +60,retired,divorced,secondary,no,1099,no,no,cellular,11,jul,764,2,-1,0,unknown,yes +60,management,married,tertiary,no,2222,yes,no,cellular,11,jul,1120,2,-1,0,unknown,yes +29,management,single,tertiary,no,983,yes,no,cellular,11,jul,963,2,-1,0,unknown,yes +55,management,divorced,secondary,no,204,yes,no,cellular,11,jul,1973,2,-1,0,unknown,yes +44,admin.,married,secondary,no,1074,yes,no,cellular,11,jul,911,2,-1,0,unknown,yes +47,technician,married,secondary,no,3466,yes,no,cellular,11,jul,853,2,-1,0,unknown,yes +35,admin.,married,secondary,no,-203,yes,no,cellular,11,jul,1649,2,-1,0,unknown,yes +35,entrepreneur,married,secondary,no,2436,no,yes,cellular,14,jul,1397,3,-1,0,unknown,yes +38,technician,married,secondary,no,976,yes,no,cellular,14,jul,766,3,-1,0,unknown,yes +34,entrepreneur,married,tertiary,no,146,yes,no,cellular,14,jul,788,2,-1,0,unknown,yes +50,technician,married,secondary,no,156,no,yes,cellular,14,jul,1130,3,-1,0,unknown,yes +43,admin.,married,tertiary,no,189,yes,no,cellular,14,jul,1062,4,-1,0,unknown,yes +44,admin.,divorced,secondary,no,163,yes,no,cellular,14,jul,1669,2,-1,0,unknown,yes +51,services,divorced,secondary,no,242,no,yes,cellular,14,jul,1336,4,-1,0,unknown,yes +31,technician,married,secondary,no,1173,yes,no,cellular,14,jul,444,3,-1,0,unknown,yes +39,technician,married,tertiary,no,0,yes,no,cellular,14,jul,894,7,-1,0,unknown,yes +59,management,married,tertiary,no,296,no,yes,cellular,15,jul,805,3,-1,0,unknown,yes +25,services,single,secondary,no,333,no,yes,cellular,15,jul,1056,2,-1,0,unknown,yes +58,management,married,tertiary,no,3864,yes,no,cellular,15,jul,815,4,-1,0,unknown,yes +30,entrepreneur,married,primary,no,2686,yes,no,cellular,15,jul,808,3,-1,0,unknown,yes +34,blue-collar,single,primary,no,-109,yes,no,cellular,15,jul,860,4,-1,0,unknown,yes +51,services,divorced,secondary,no,65,no,yes,cellular,15,jul,881,1,-1,0,unknown,yes +60,retired,married,secondary,no,597,no,no,cellular,15,jul,981,1,-1,0,unknown,yes +51,entrepreneur,married,secondary,no,-799,no,yes,cellular,15,jul,1001,3,-1,0,unknown,yes +37,management,divorced,tertiary,no,1775,no,no,cellular,15,jul,514,5,-1,0,unknown,yes +30,blue-collar,single,primary,no,0,no,no,cellular,15,jul,716,3,-1,0,unknown,yes +46,entrepreneur,divorced,secondary,no,-563,no,yes,cellular,15,jul,769,4,-1,0,unknown,yes +29,student,single,tertiary,no,5,no,no,cellular,15,jul,889,5,-1,0,unknown,yes +27,entrepreneur,married,tertiary,no,139,no,no,cellular,15,jul,448,5,-1,0,unknown,yes +28,management,single,tertiary,no,0,yes,no,cellular,16,jul,767,5,-1,0,unknown,yes +34,blue-collar,single,secondary,no,855,yes,no,cellular,16,jul,578,1,-1,0,unknown,yes +29,blue-collar,single,unknown,no,694,yes,yes,cellular,16,jul,1806,4,-1,0,unknown,yes +27,management,single,tertiary,no,151,yes,no,cellular,16,jul,496,1,-1,0,unknown,yes +26,technician,single,secondary,no,354,no,no,cellular,16,jul,586,1,-1,0,unknown,yes +36,management,married,tertiary,no,673,yes,no,cellular,16,jul,689,1,-1,0,unknown,yes +44,blue-collar,married,primary,no,1265,yes,no,cellular,16,jul,555,1,-1,0,unknown,yes +39,blue-collar,married,tertiary,no,597,no,no,cellular,16,jul,686,6,-1,0,unknown,yes +30,technician,married,secondary,no,-393,yes,yes,cellular,16,jul,435,1,-1,0,unknown,yes +31,unemployed,divorced,tertiary,no,256,yes,no,cellular,16,jul,873,2,-1,0,unknown,yes +56,blue-collar,married,primary,no,0,yes,no,cellular,16,jul,1222,1,-1,0,unknown,yes +29,blue-collar,married,secondary,no,2870,yes,no,cellular,16,jul,988,1,-1,0,unknown,yes +43,blue-collar,married,secondary,no,184,no,yes,cellular,16,jul,1019,11,-1,0,unknown,yes +32,blue-collar,married,secondary,no,1905,yes,no,cellular,16,jul,709,2,-1,0,unknown,yes +30,admin.,single,secondary,no,-36,no,no,cellular,16,jul,561,9,-1,0,unknown,yes +40,blue-collar,married,secondary,no,-839,yes,yes,cellular,16,jul,1018,2,-1,0,unknown,yes +42,services,married,secondary,no,3465,yes,yes,cellular,16,jul,1039,2,-1,0,unknown,yes +27,student,married,secondary,no,119,yes,no,cellular,16,jul,781,2,-1,0,unknown,yes +35,management,married,tertiary,no,36,no,yes,cellular,16,jul,1656,5,-1,0,unknown,yes +35,housemaid,married,primary,no,113,yes,no,cellular,17,jul,923,2,-1,0,unknown,yes +32,blue-collar,single,secondary,no,118,yes,no,cellular,17,jul,1275,1,-1,0,unknown,yes +39,technician,married,secondary,no,251,yes,no,cellular,17,jul,342,2,-1,0,unknown,yes +31,blue-collar,divorced,secondary,no,-277,yes,no,telephone,17,jul,1008,2,-1,0,unknown,yes +26,services,single,secondary,no,-189,no,yes,cellular,17,jul,538,2,-1,0,unknown,yes +42,management,married,tertiary,no,4,yes,no,cellular,17,jul,795,1,-1,0,unknown,yes +27,services,single,secondary,no,1820,yes,no,cellular,17,jul,1027,1,-1,0,unknown,yes +33,self-employed,divorced,secondary,no,1904,yes,no,cellular,17,jul,1584,2,-1,0,unknown,yes +51,blue-collar,married,primary,no,201,yes,no,cellular,17,jul,582,2,-1,0,unknown,yes +33,admin.,married,secondary,no,0,yes,no,telephone,17,jul,1448,7,-1,0,unknown,yes +30,technician,single,tertiary,no,178,no,no,cellular,17,jul,656,3,-1,0,unknown,yes +52,housemaid,married,primary,no,3798,yes,no,cellular,17,jul,1208,1,-1,0,unknown,yes +42,blue-collar,divorced,primary,no,301,yes,no,cellular,17,jul,1175,2,-1,0,unknown,yes +31,management,divorced,tertiary,no,294,yes,no,cellular,17,jul,536,5,-1,0,unknown,yes +27,services,married,secondary,no,0,yes,no,cellular,17,jul,991,5,-1,0,unknown,yes +44,blue-collar,single,secondary,no,292,no,yes,cellular,17,jul,1153,4,-1,0,unknown,yes +40,entrepreneur,divorced,secondary,no,2998,yes,no,cellular,18,jul,623,3,-1,0,unknown,yes +46,housemaid,divorced,primary,no,2084,yes,no,cellular,18,jul,1081,2,-1,0,unknown,yes +32,services,divorced,secondary,no,454,yes,no,cellular,18,jul,978,1,-1,0,unknown,yes +56,technician,divorced,secondary,no,179,no,no,cellular,18,jul,536,1,-1,0,unknown,yes +33,blue-collar,married,secondary,no,661,yes,no,cellular,18,jul,968,1,-1,0,unknown,yes +33,blue-collar,married,secondary,no,89,yes,no,cellular,18,jul,278,2,-1,0,unknown,yes +32,self-employed,married,primary,no,102,yes,no,cellular,18,jul,560,1,-1,0,unknown,yes +41,blue-collar,divorced,primary,no,138,yes,no,cellular,18,jul,640,3,-1,0,unknown,yes +31,admin.,single,secondary,no,622,no,no,cellular,18,jul,420,1,-1,0,unknown,yes +30,admin.,divorced,secondary,no,10,yes,no,cellular,18,jul,658,2,-1,0,unknown,yes +34,admin.,divorced,secondary,no,-251,no,no,cellular,18,jul,641,1,-1,0,unknown,yes +43,entrepreneur,married,secondary,no,104,yes,no,cellular,18,jul,635,3,-1,0,unknown,yes +28,blue-collar,married,secondary,no,173,no,no,cellular,18,jul,588,7,-1,0,unknown,yes +32,admin.,divorced,secondary,no,-46,no,yes,cellular,18,jul,1373,4,-1,0,unknown,yes +31,blue-collar,divorced,secondary,no,0,yes,yes,cellular,18,jul,913,4,-1,0,unknown,yes +35,entrepreneur,single,tertiary,no,145,yes,no,cellular,18,jul,799,2,-1,0,unknown,yes +31,management,married,tertiary,no,325,yes,no,cellular,18,jul,1139,2,-1,0,unknown,yes +25,services,single,secondary,no,2311,no,yes,cellular,21,jul,1105,2,-1,0,unknown,yes +56,retired,divorced,tertiary,no,158,no,yes,cellular,21,jul,854,1,-1,0,unknown,yes +47,technician,married,secondary,no,1981,yes,no,cellular,21,jul,919,2,-1,0,unknown,yes +39,management,married,tertiary,no,1423,yes,no,telephone,21,jul,733,3,-1,0,unknown,yes +51,management,married,tertiary,no,2455,yes,no,cellular,21,jul,553,1,-1,0,unknown,yes +54,technician,divorced,secondary,no,859,no,yes,cellular,21,jul,710,1,-1,0,unknown,yes +58,retired,married,unknown,no,9004,no,no,cellular,21,jul,891,4,-1,0,unknown,yes +42,unemployed,married,unknown,no,970,yes,no,telephone,21,jul,691,10,-1,0,unknown,yes +56,services,married,primary,no,486,no,yes,telephone,21,jul,1877,1,-1,0,unknown,yes +55,housemaid,married,secondary,no,127,yes,no,telephone,21,jul,1130,8,-1,0,unknown,yes +26,blue-collar,single,primary,no,409,yes,no,cellular,21,jul,577,2,-1,0,unknown,yes +40,admin.,single,secondary,no,664,no,no,cellular,21,jul,1342,2,-1,0,unknown,yes +26,technician,single,secondary,no,223,no,yes,cellular,21,jul,1002,3,-1,0,unknown,yes +35,management,single,tertiary,no,-324,no,yes,cellular,21,jul,985,11,-1,0,unknown,yes +34,services,single,secondary,no,-30,no,no,cellular,21,jul,1360,3,-1,0,unknown,yes +41,management,single,tertiary,no,1253,no,no,cellular,21,jul,1134,5,-1,0,unknown,yes +44,management,married,primary,no,4758,yes,no,cellular,22,jul,712,6,-1,0,unknown,yes +33,management,single,tertiary,no,30,yes,no,cellular,22,jul,1077,1,-1,0,unknown,yes +36,management,divorced,tertiary,no,81,no,yes,cellular,22,jul,560,1,-1,0,unknown,yes +38,technician,married,secondary,no,0,yes,no,cellular,22,jul,1545,1,-1,0,unknown,yes +35,technician,married,tertiary,no,328,yes,no,cellular,22,jul,654,2,-1,0,unknown,yes +41,technician,single,tertiary,no,145,no,no,cellular,22,jul,1833,2,-1,0,unknown,yes +41,management,divorced,unknown,no,465,yes,no,cellular,22,jul,1508,1,-1,0,unknown,yes +28,blue-collar,married,secondary,no,751,yes,no,cellular,22,jul,598,5,-1,0,unknown,yes +26,services,married,secondary,no,-379,yes,yes,cellular,22,jul,1237,7,-1,0,unknown,yes +39,blue-collar,single,secondary,no,0,no,no,cellular,22,jul,864,4,-1,0,unknown,yes +25,admin.,married,unknown,no,349,yes,no,cellular,22,jul,1037,8,-1,0,unknown,yes +37,admin.,married,secondary,no,1110,yes,no,telephone,22,jul,802,11,-1,0,unknown,yes +25,management,married,secondary,no,2228,yes,no,cellular,23,jul,754,1,-1,0,unknown,yes +46,management,divorced,tertiary,no,2166,yes,no,cellular,23,jul,870,1,-1,0,unknown,yes +25,blue-collar,single,secondary,no,-247,yes,no,cellular,23,jul,633,1,-1,0,unknown,yes +28,technician,single,tertiary,no,-123,no,yes,cellular,23,jul,690,1,-1,0,unknown,yes +33,services,divorced,secondary,no,44,no,yes,cellular,23,jul,529,1,-1,0,unknown,yes +32,management,single,secondary,no,131,yes,yes,cellular,23,jul,1152,2,-1,0,unknown,yes +32,blue-collar,married,secondary,no,476,yes,no,cellular,23,jul,956,9,-1,0,unknown,yes +47,technician,single,secondary,no,1101,yes,no,cellular,23,jul,957,3,-1,0,unknown,yes +50,entrepreneur,married,tertiary,no,-168,yes,no,cellular,23,jul,1327,2,-1,0,unknown,yes +27,technician,married,secondary,no,-392,yes,no,cellular,23,jul,228,2,-1,0,unknown,yes +45,admin.,married,secondary,no,524,yes,no,cellular,23,jul,808,1,-1,0,unknown,yes +51,admin.,single,secondary,no,895,no,no,cellular,23,jul,638,2,-1,0,unknown,yes +36,admin.,married,secondary,no,212,yes,yes,cellular,23,jul,1201,6,-1,0,unknown,yes +51,self-employed,married,secondary,no,95,yes,no,cellular,23,jul,1309,4,-1,0,unknown,yes +33,services,single,tertiary,no,395,yes,no,cellular,23,jul,1359,6,-1,0,unknown,yes +59,technician,married,secondary,no,135,yes,yes,cellular,23,jul,416,4,-1,0,unknown,yes +38,entrepreneur,married,tertiary,no,0,no,no,cellular,23,jul,532,2,-1,0,unknown,yes +40,services,married,secondary,no,471,yes,no,cellular,24,jul,430,4,-1,0,unknown,yes +51,blue-collar,married,primary,no,603,yes,no,cellular,24,jul,853,2,-1,0,unknown,yes +41,entrepreneur,single,secondary,no,663,no,no,cellular,24,jul,1204,1,-1,0,unknown,yes +38,entrepreneur,married,secondary,no,593,yes,yes,cellular,24,jul,1484,24,-1,0,unknown,yes +31,management,married,tertiary,no,1224,yes,yes,cellular,24,jul,1441,2,-1,0,unknown,yes +28,admin.,single,secondary,no,2,yes,no,cellular,24,jul,454,1,-1,0,unknown,yes +41,blue-collar,married,secondary,yes,720,no,yes,cellular,24,jul,651,1,-1,0,unknown,yes +33,management,divorced,tertiary,no,990,yes,no,cellular,24,jul,1491,2,-1,0,unknown,yes +25,student,single,secondary,no,1747,yes,no,cellular,24,jul,903,1,-1,0,unknown,yes +45,admin.,divorced,secondary,no,59,yes,no,cellular,24,jul,873,8,-1,0,unknown,yes +31,blue-collar,married,primary,no,33,yes,no,cellular,24,jul,901,2,-1,0,unknown,yes +28,services,single,secondary,no,340,yes,no,cellular,24,jul,821,2,-1,0,unknown,yes +49,technician,divorced,secondary,no,305,no,no,cellular,24,jul,367,2,-1,0,unknown,yes +25,services,married,secondary,no,0,yes,no,cellular,24,jul,458,9,-1,0,unknown,yes +28,unemployed,single,tertiary,no,497,yes,no,cellular,24,jul,1602,6,-1,0,unknown,yes +54,retired,married,secondary,no,1371,no,no,telephone,25,jul,1492,2,-1,0,unknown,yes +28,technician,single,tertiary,no,1628,yes,no,cellular,25,jul,1422,2,-1,0,unknown,yes +27,technician,single,tertiary,no,372,yes,yes,cellular,25,jul,728,2,-1,0,unknown,yes +49,blue-collar,single,primary,no,566,yes,no,cellular,25,jul,979,2,-1,0,unknown,yes +53,blue-collar,married,primary,no,343,yes,no,cellular,25,jul,616,5,-1,0,unknown,yes +26,technician,single,secondary,no,941,no,yes,cellular,25,jul,784,1,-1,0,unknown,yes +37,services,married,secondary,no,775,no,yes,cellular,25,jul,1000,1,-1,0,unknown,yes +34,blue-collar,single,secondary,no,1759,no,yes,cellular,25,jul,695,1,-1,0,unknown,yes +51,retired,married,primary,no,1495,no,no,telephone,25,jul,1946,4,-1,0,unknown,yes +39,housemaid,married,secondary,no,1444,no,no,telephone,25,jul,362,8,-1,0,unknown,yes +35,technician,single,tertiary,no,470,yes,no,cellular,25,jul,743,13,-1,0,unknown,yes +51,unemployed,married,primary,no,1162,yes,no,cellular,25,jul,2015,1,-1,0,unknown,yes +30,management,single,tertiary,no,2,yes,yes,cellular,25,jul,1031,8,-1,0,unknown,yes +42,blue-collar,single,primary,no,1628,yes,no,cellular,25,jul,590,8,-1,0,unknown,yes +54,management,married,secondary,no,1134,yes,no,cellular,25,jul,1330,3,-1,0,unknown,yes +51,blue-collar,married,primary,no,0,yes,yes,cellular,25,jul,946,3,-1,0,unknown,yes +57,retired,divorced,primary,no,63,no,yes,cellular,25,jul,1448,17,-1,0,unknown,yes +30,management,married,tertiary,no,1221,yes,no,telephone,25,jul,279,4,-1,0,unknown,yes +37,blue-collar,single,secondary,no,5024,no,yes,cellular,25,jul,661,4,-1,0,unknown,yes +39,technician,married,secondary,no,10685,yes,no,cellular,25,jul,1369,9,-1,0,unknown,yes +35,technician,married,tertiary,no,1629,no,no,cellular,25,jul,653,4,-1,0,unknown,yes +48,management,married,secondary,no,268,yes,no,cellular,28,jul,458,7,-1,0,unknown,yes +31,management,married,tertiary,no,0,yes,yes,cellular,28,jul,664,8,-1,0,unknown,yes +35,self-employed,married,secondary,no,5613,yes,no,cellular,28,jul,699,3,-1,0,unknown,yes +48,housemaid,married,secondary,no,513,no,yes,cellular,28,jul,939,3,-1,0,unknown,yes +53,housemaid,married,primary,no,362,no,no,cellular,28,jul,1169,2,-1,0,unknown,yes +27,technician,single,secondary,no,3933,no,no,cellular,28,jul,837,3,-1,0,unknown,yes +55,technician,married,secondary,no,3899,yes,no,telephone,28,jul,596,4,-1,0,unknown,yes +40,services,married,secondary,no,473,yes,no,cellular,28,jul,383,3,-1,0,unknown,yes +40,self-employed,single,tertiary,no,1616,no,no,telephone,28,jul,1009,7,-1,0,unknown,yes +38,blue-collar,divorced,secondary,no,1817,yes,no,cellular,28,jul,1096,4,-1,0,unknown,yes +54,retired,single,secondary,no,129,no,yes,cellular,28,jul,867,2,-1,0,unknown,yes +54,technician,married,secondary,no,1938,no,yes,cellular,28,jul,551,3,-1,0,unknown,yes +50,admin.,single,secondary,no,133,no,no,cellular,28,jul,890,4,-1,0,unknown,yes +48,management,divorced,tertiary,no,2263,no,no,cellular,29,jul,874,2,-1,0,unknown,yes +41,services,married,unknown,no,1538,no,no,cellular,29,jul,710,2,-1,0,unknown,yes +51,blue-collar,divorced,primary,no,5,no,no,cellular,29,jul,600,2,-1,0,unknown,yes +42,technician,single,tertiary,no,2625,no,no,cellular,29,jul,2516,2,-1,0,unknown,yes +58,retired,divorced,secondary,no,1080,yes,no,cellular,29,jul,1058,2,-1,0,unknown,yes +47,unemployed,married,secondary,no,312,no,no,cellular,29,jul,884,1,-1,0,unknown,yes +58,admin.,married,secondary,no,145,yes,no,telephone,29,jul,616,13,-1,0,unknown,yes +41,blue-collar,married,secondary,no,-190,no,yes,cellular,29,jul,808,3,-1,0,unknown,yes +50,admin.,married,secondary,no,2678,no,no,telephone,30,jul,1011,6,-1,0,unknown,yes +46,housemaid,married,secondary,no,271,yes,no,cellular,30,jul,1013,29,-1,0,unknown,yes +44,blue-collar,married,secondary,no,0,no,no,cellular,30,jul,684,2,-1,0,unknown,yes +36,services,married,secondary,no,0,no,no,cellular,30,jul,843,2,-1,0,unknown,yes +58,management,divorced,secondary,no,3161,no,no,telephone,30,jul,542,2,-1,0,unknown,yes +44,unemployed,single,primary,yes,-4,no,yes,cellular,30,jul,788,2,-1,0,unknown,yes +49,entrepreneur,divorced,unknown,yes,-701,yes,no,cellular,30,jul,988,2,-1,0,unknown,yes +55,management,married,tertiary,no,-375,no,no,cellular,30,jul,814,2,-1,0,unknown,yes +52,unemployed,married,primary,no,959,no,no,telephone,30,jul,694,2,-1,0,unknown,yes +60,retired,divorced,secondary,no,1091,no,no,cellular,30,jul,441,5,-1,0,unknown,yes +41,services,married,unknown,yes,-1,no,yes,cellular,30,jul,1171,4,-1,0,unknown,yes +36,management,married,tertiary,no,96,no,no,cellular,30,jul,729,4,-1,0,unknown,yes +41,blue-collar,divorced,primary,no,0,no,no,cellular,30,jul,509,2,-1,0,unknown,yes +50,entrepreneur,married,tertiary,no,230,no,no,telephone,30,jul,1089,4,-1,0,unknown,yes +44,housemaid,married,primary,no,-156,no,yes,cellular,30,jul,1211,2,-1,0,unknown,yes +54,technician,married,secondary,no,114,no,no,cellular,30,jul,458,3,-1,0,unknown,yes +35,management,married,tertiary,no,-468,yes,no,cellular,30,jul,540,8,-1,0,unknown,yes +59,retired,divorced,secondary,no,679,no,no,cellular,30,jul,761,4,-1,0,unknown,yes +42,entrepreneur,married,unknown,no,206,yes,no,cellular,30,jul,695,2,-1,0,unknown,yes +27,management,single,tertiary,no,1,yes,no,cellular,30,jul,764,4,-1,0,unknown,yes +59,housemaid,divorced,primary,no,2518,no,no,cellular,30,jul,675,3,-1,0,unknown,yes +43,admin.,married,secondary,no,378,no,no,cellular,30,jul,782,8,-1,0,unknown,yes +39,technician,single,secondary,no,391,no,yes,cellular,30,jul,962,4,-1,0,unknown,yes +33,unemployed,married,secondary,no,-144,no,no,cellular,30,jul,481,3,-1,0,unknown,yes +36,self-employed,single,tertiary,no,1240,no,no,cellular,31,jul,812,3,-1,0,unknown,yes +35,blue-collar,divorced,primary,no,1792,yes,no,cellular,31,jul,630,6,-1,0,unknown,yes +50,blue-collar,married,unknown,no,2284,yes,no,telephone,31,jul,1088,17,-1,0,unknown,yes +55,technician,married,secondary,no,264,yes,yes,cellular,31,jul,1150,5,-1,0,unknown,yes +51,unemployed,divorced,tertiary,no,0,no,no,cellular,31,jul,574,2,-1,0,unknown,yes +48,entrepreneur,married,tertiary,yes,-392,no,no,cellular,31,jul,725,4,-1,0,unknown,yes +55,housemaid,divorced,primary,no,77,no,no,cellular,31,jul,463,6,-1,0,unknown,yes +30,services,married,secondary,no,48,yes,no,cellular,31,jul,662,13,-1,0,unknown,yes +53,blue-collar,married,primary,no,252,no,no,cellular,31,jul,727,4,-1,0,unknown,yes +40,blue-collar,married,secondary,no,1954,no,no,cellular,31,jul,1107,2,-1,0,unknown,yes +44,technician,married,primary,no,755,no,yes,cellular,31,jul,829,4,-1,0,unknown,yes +49,management,divorced,tertiary,no,755,no,no,cellular,31,jul,1212,4,-1,0,unknown,yes +40,admin.,married,secondary,no,341,no,no,cellular,31,jul,1142,5,-1,0,unknown,yes +58,unemployed,married,primary,no,1183,no,no,cellular,31,jul,1721,5,-1,0,unknown,yes +49,services,married,secondary,no,388,no,no,telephone,31,jul,1032,4,-1,0,unknown,yes +38,technician,married,secondary,no,1919,no,no,cellular,4,aug,846,1,-1,0,unknown,yes +51,housemaid,divorced,tertiary,no,1613,no,no,cellular,4,aug,870,1,-1,0,unknown,yes +36,management,divorced,tertiary,no,0,no,no,cellular,4,aug,1165,1,-1,0,unknown,yes +55,retired,married,secondary,no,0,no,no,cellular,4,aug,1110,1,-1,0,unknown,yes +43,technician,married,tertiary,no,0,no,no,cellular,4,aug,1488,2,-1,0,unknown,yes +60,management,divorced,secondary,no,0,no,no,cellular,5,aug,603,3,-1,0,unknown,yes +57,retired,married,secondary,no,466,no,no,cellular,5,aug,641,2,-1,0,unknown,yes +41,technician,married,tertiary,no,515,no,no,cellular,5,aug,837,2,-1,0,unknown,yes +50,technician,married,tertiary,no,2313,no,no,cellular,5,aug,553,1,-1,0,unknown,yes +53,blue-collar,married,secondary,no,-8,no,no,cellular,5,aug,794,1,-1,0,unknown,yes +59,retired,married,primary,no,1634,yes,yes,cellular,5,aug,836,1,-1,0,unknown,yes +59,housemaid,married,primary,no,100,no,no,cellular,5,aug,1134,1,-1,0,unknown,yes +52,unknown,married,unknown,no,5361,no,no,cellular,5,aug,607,3,-1,0,unknown,yes +58,management,divorced,tertiary,no,1257,no,no,cellular,5,aug,1536,1,-1,0,unknown,yes +59,retired,married,primary,no,3400,yes,no,cellular,5,aug,515,3,-1,0,unknown,yes +49,technician,single,secondary,no,1377,no,no,cellular,5,aug,935,1,-1,0,unknown,yes +33,management,divorced,tertiary,no,2885,no,no,cellular,5,aug,1051,2,-1,0,unknown,yes +55,blue-collar,married,primary,no,512,no,no,cellular,5,aug,1200,2,-1,0,unknown,yes +42,technician,married,tertiary,no,921,no,no,cellular,5,aug,531,3,-1,0,unknown,yes +52,services,married,secondary,no,1000,no,no,cellular,5,aug,766,2,-1,0,unknown,yes +38,technician,married,tertiary,no,202,no,no,cellular,5,aug,1311,2,-1,0,unknown,yes +55,technician,married,tertiary,no,169,no,yes,cellular,5,aug,618,2,-1,0,unknown,yes +49,technician,married,tertiary,no,3726,no,no,cellular,5,aug,875,2,-1,0,unknown,yes +56,technician,divorced,secondary,no,146,yes,no,cellular,5,aug,419,3,-1,0,unknown,yes +46,technician,married,secondary,no,940,no,no,cellular,5,aug,1227,2,-1,0,unknown,yes +57,retired,divorced,tertiary,no,734,no,no,cellular,6,aug,1357,4,-1,0,unknown,yes +61,retired,married,secondary,no,77,no,no,cellular,6,aug,455,4,-1,0,unknown,yes +45,admin.,married,secondary,no,925,no,no,cellular,6,aug,406,2,-1,0,unknown,yes +39,management,married,tertiary,no,1836,no,no,cellular,6,aug,902,3,-1,0,unknown,yes +46,admin.,married,secondary,no,660,no,no,cellular,6,aug,740,2,-1,0,unknown,yes +43,management,single,tertiary,no,1304,no,no,cellular,6,aug,501,2,-1,0,unknown,yes +34,services,married,secondary,no,2956,no,no,cellular,6,aug,835,2,-1,0,unknown,yes +35,management,divorced,tertiary,no,146,no,no,cellular,6,aug,720,2,-1,0,unknown,yes +36,management,divorced,tertiary,yes,36,no,no,cellular,6,aug,836,4,-1,0,unknown,yes +45,management,divorced,tertiary,no,1,no,no,cellular,6,aug,490,2,-1,0,unknown,yes +47,technician,married,secondary,no,2480,no,no,cellular,6,aug,763,2,-1,0,unknown,yes +42,technician,married,tertiary,no,14282,yes,no,cellular,6,aug,649,4,-1,0,unknown,yes +40,management,single,tertiary,no,0,no,no,cellular,6,aug,641,6,-1,0,unknown,yes +40,technician,divorced,secondary,no,311,no,no,cellular,6,aug,738,2,-1,0,unknown,yes +32,technician,married,secondary,no,560,no,no,cellular,6,aug,1044,4,-1,0,unknown,yes +33,technician,single,secondary,no,3059,no,yes,cellular,6,aug,482,2,-1,0,unknown,yes +32,self-employed,married,tertiary,no,1423,no,no,cellular,6,aug,1249,4,-1,0,unknown,yes +46,blue-collar,married,primary,no,874,no,no,cellular,6,aug,996,1,-1,0,unknown,yes +50,admin.,married,secondary,no,706,yes,no,cellular,6,aug,1250,4,-1,0,unknown,yes +51,blue-collar,married,primary,no,7098,no,no,cellular,6,aug,1471,7,-1,0,unknown,yes +30,management,single,tertiary,no,5389,no,no,cellular,6,aug,1456,3,-1,0,unknown,yes +39,technician,single,secondary,no,1104,no,no,cellular,7,aug,395,2,-1,0,unknown,yes +47,admin.,married,secondary,no,3070,no,no,cellular,7,aug,663,4,-1,0,unknown,yes +40,technician,divorced,secondary,no,0,no,no,cellular,7,aug,674,2,-1,0,unknown,yes +50,blue-collar,married,primary,no,4108,yes,no,cellular,7,aug,526,2,-1,0,unknown,yes +60,management,married,tertiary,no,0,no,no,cellular,7,aug,401,3,-1,0,unknown,yes +32,management,single,tertiary,no,4291,no,no,cellular,7,aug,1321,9,-1,0,unknown,yes +57,technician,married,tertiary,no,6822,no,no,cellular,7,aug,797,2,-1,0,unknown,yes +41,self-employed,married,tertiary,no,231,no,no,cellular,7,aug,352,2,-1,0,unknown,yes +50,technician,married,secondary,no,3176,no,no,cellular,7,aug,670,1,-1,0,unknown,yes +46,technician,divorced,secondary,no,-824,yes,no,cellular,7,aug,429,3,-1,0,unknown,yes +31,management,married,tertiary,no,676,no,no,cellular,7,aug,1182,1,-1,0,unknown,yes +36,technician,single,secondary,no,651,no,no,cellular,7,aug,876,1,-1,0,unknown,yes +45,technician,divorced,secondary,no,2657,no,no,cellular,7,aug,895,3,-1,0,unknown,yes +33,technician,divorced,secondary,no,801,no,no,cellular,7,aug,341,5,-1,0,unknown,yes +47,services,married,secondary,no,405,no,yes,cellular,8,aug,994,2,-1,0,unknown,yes +35,management,married,tertiary,no,82,no,no,cellular,8,aug,507,4,-1,0,unknown,yes +38,management,married,tertiary,no,179,no,no,unknown,8,aug,317,4,-1,0,unknown,yes +33,management,married,tertiary,no,1047,no,no,cellular,8,aug,512,4,-1,0,unknown,yes +44,technician,single,secondary,no,7138,no,no,cellular,8,aug,809,2,-1,0,unknown,yes +31,management,single,tertiary,no,165,no,yes,cellular,8,aug,523,2,-1,0,unknown,yes +31,management,single,tertiary,no,37,no,no,cellular,8,aug,669,2,-1,0,unknown,yes +49,services,married,secondary,no,823,no,no,cellular,8,aug,780,4,-1,0,unknown,yes +52,services,married,primary,no,1625,no,no,cellular,8,aug,459,2,-1,0,unknown,yes +31,technician,married,tertiary,no,120,no,no,cellular,8,aug,1000,1,-1,0,unknown,yes +35,management,married,tertiary,no,2957,yes,yes,cellular,8,aug,733,3,-1,0,unknown,yes +31,management,single,tertiary,no,2,no,no,cellular,8,aug,848,1,-1,0,unknown,yes +36,technician,divorced,secondary,no,1,no,no,cellular,8,aug,1242,3,-1,0,unknown,yes +39,management,married,tertiary,no,1795,no,no,cellular,8,aug,922,7,-1,0,unknown,yes +46,management,married,tertiary,no,4,no,no,cellular,8,aug,1206,4,-1,0,unknown,yes +48,blue-collar,married,primary,no,476,no,no,cellular,11,aug,856,3,-1,0,unknown,yes +36,management,married,tertiary,no,9,no,no,cellular,11,aug,386,4,-1,0,unknown,yes +30,management,married,tertiary,no,131,yes,no,cellular,11,aug,384,6,-1,0,unknown,yes +33,management,single,tertiary,no,1120,no,no,cellular,11,aug,1070,2,-1,0,unknown,yes +57,housemaid,married,primary,no,2785,no,no,cellular,11,aug,610,4,-1,0,unknown,yes +33,management,single,tertiary,no,0,no,no,cellular,11,aug,699,7,-1,0,unknown,yes +35,management,married,tertiary,no,43,no,no,cellular,11,aug,917,4,-1,0,unknown,yes +53,management,married,tertiary,no,0,no,no,cellular,11,aug,608,2,-1,0,unknown,yes +41,management,married,secondary,no,456,yes,no,cellular,11,aug,734,4,-1,0,unknown,yes +32,management,single,secondary,no,2018,no,no,cellular,11,aug,1238,1,-1,0,unknown,yes +41,management,married,tertiary,no,0,no,no,cellular,11,aug,1242,5,-1,0,unknown,yes +35,technician,single,secondary,no,354,no,no,cellular,11,aug,444,3,-1,0,unknown,yes +48,blue-collar,married,primary,no,719,no,yes,cellular,11,aug,418,5,-1,0,unknown,yes +34,management,married,tertiary,no,828,no,yes,cellular,11,aug,1080,3,-1,0,unknown,yes +47,blue-collar,married,secondary,no,2787,no,no,cellular,11,aug,479,1,-1,0,unknown,yes +46,unemployed,married,secondary,no,2551,no,no,cellular,12,aug,645,2,-1,0,unknown,yes +60,retired,married,secondary,no,2722,no,no,cellular,12,aug,506,2,-1,0,unknown,yes +39,management,married,secondary,no,1880,no,no,cellular,12,aug,768,2,-1,0,unknown,yes +57,blue-collar,married,primary,no,2112,no,no,cellular,12,aug,1134,2,-1,0,unknown,yes +36,unemployed,divorced,secondary,no,871,no,no,cellular,12,aug,396,3,-1,0,unknown,yes +30,management,married,secondary,no,850,no,no,cellular,12,aug,507,2,-1,0,unknown,yes +33,technician,married,secondary,no,3243,no,no,cellular,12,aug,439,4,-1,0,unknown,yes +30,management,married,tertiary,no,1567,yes,no,cellular,12,aug,1133,4,-1,0,unknown,yes +36,technician,single,secondary,yes,12,no,no,cellular,12,aug,587,2,-1,0,unknown,yes +49,blue-collar,married,primary,no,128,no,no,cellular,12,aug,696,2,-1,0,unknown,yes +49,blue-collar,married,secondary,no,553,no,no,cellular,12,aug,645,8,-1,0,unknown,yes +40,unemployed,divorced,secondary,no,1694,no,no,cellular,12,aug,473,6,-1,0,unknown,yes +49,blue-collar,married,primary,no,408,no,no,cellular,12,aug,559,4,-1,0,unknown,yes +38,management,married,tertiary,no,1223,no,no,cellular,12,aug,1092,5,-1,0,unknown,yes +31,management,single,tertiary,no,1858,no,no,cellular,12,aug,453,3,-1,0,unknown,yes +34,management,married,tertiary,no,520,yes,no,cellular,12,aug,1307,4,-1,0,unknown,yes +39,management,married,tertiary,no,271,yes,no,cellular,12,aug,1344,1,-1,0,unknown,yes +40,management,married,secondary,no,4396,no,no,cellular,12,aug,432,3,-1,0,unknown,yes +47,technician,married,secondary,no,568,yes,no,cellular,12,aug,1613,1,-1,0,unknown,yes +37,technician,single,secondary,no,3665,no,no,cellular,12,aug,664,3,-1,0,unknown,yes +44,technician,single,secondary,no,244,yes,no,cellular,12,aug,1735,4,-1,0,unknown,yes +55,management,married,tertiary,no,568,no,no,cellular,12,aug,940,10,-1,0,unknown,yes +40,technician,married,secondary,no,42,no,no,cellular,13,aug,1842,2,-1,0,unknown,yes +54,retired,married,primary,no,309,no,no,cellular,13,aug,969,2,-1,0,unknown,yes +35,technician,married,secondary,no,-180,no,yes,cellular,13,aug,823,2,-1,0,unknown,yes +32,technician,single,tertiary,no,34646,no,no,telephone,13,aug,618,9,-1,0,unknown,yes +36,management,divorced,tertiary,no,59,no,no,cellular,13,aug,526,2,-1,0,unknown,yes +37,management,married,tertiary,no,4436,no,no,cellular,13,aug,846,5,-1,0,unknown,yes +37,technician,single,secondary,no,-242,yes,no,cellular,13,aug,1149,6,-1,0,unknown,yes +50,self-employed,married,secondary,no,10052,no,no,cellular,13,aug,665,2,-1,0,unknown,yes +58,retired,married,tertiary,no,0,no,no,cellular,13,aug,641,4,-1,0,unknown,yes +52,technician,divorced,secondary,no,152,no,no,cellular,13,aug,404,6,-1,0,unknown,yes +31,management,married,tertiary,no,156,no,no,cellular,13,aug,657,7,-1,0,unknown,yes +40,management,married,tertiary,no,66,no,no,cellular,13,aug,737,4,-1,0,unknown,yes +34,management,single,tertiary,no,9827,yes,no,cellular,13,aug,871,4,-1,0,unknown,yes +53,services,married,secondary,no,6170,no,no,cellular,13,aug,838,4,-1,0,unknown,yes +43,management,married,tertiary,no,2383,no,no,cellular,13,aug,379,6,-1,0,unknown,yes +30,technician,single,tertiary,no,635,no,no,cellular,13,aug,851,8,-1,0,unknown,yes +34,technician,single,secondary,no,16,no,no,cellular,13,aug,990,1,-1,0,unknown,yes +48,admin.,divorced,secondary,no,362,no,no,cellular,13,aug,529,1,-1,0,unknown,yes +33,management,married,tertiary,no,191,no,no,cellular,13,aug,1148,2,-1,0,unknown,yes +37,management,single,tertiary,no,455,yes,no,cellular,13,aug,904,6,-1,0,unknown,yes +57,technician,divorced,secondary,no,3043,no,no,cellular,14,aug,707,2,-1,0,unknown,yes +55,retired,married,primary,no,3334,no,no,cellular,14,aug,632,4,-1,0,unknown,yes +34,technician,married,tertiary,no,8029,yes,no,cellular,14,aug,593,4,-1,0,unknown,yes +44,entrepreneur,married,tertiary,no,624,no,no,telephone,14,aug,552,2,-1,0,unknown,yes +35,management,single,tertiary,no,331,no,no,cellular,14,aug,857,2,-1,0,unknown,yes +34,housemaid,married,primary,no,2929,no,no,cellular,14,aug,518,2,-1,0,unknown,yes +49,services,married,secondary,no,1314,no,no,cellular,14,aug,834,14,-1,0,unknown,yes +30,technician,married,secondary,no,289,yes,no,cellular,14,aug,1184,4,-1,0,unknown,yes +32,management,single,tertiary,no,20,no,no,cellular,14,aug,1151,2,-1,0,unknown,yes +56,blue-collar,married,primary,no,8163,no,no,cellular,14,aug,1231,4,-1,0,unknown,yes +50,management,single,tertiary,no,1200,no,no,cellular,14,aug,904,3,-1,0,unknown,yes +32,technician,single,secondary,no,1732,yes,no,cellular,14,aug,1871,3,-1,0,unknown,yes +45,technician,single,tertiary,no,0,no,no,cellular,18,aug,773,4,-1,0,unknown,yes +52,management,married,tertiary,no,576,no,no,cellular,18,aug,762,3,-1,0,unknown,yes +60,blue-collar,married,primary,no,493,no,no,cellular,18,aug,671,4,-1,0,unknown,yes +47,management,married,tertiary,no,682,no,no,cellular,18,aug,638,6,-1,0,unknown,yes +32,technician,single,secondary,no,0,no,no,cellular,18,aug,594,4,-1,0,unknown,yes +55,blue-collar,married,primary,no,3485,no,no,cellular,18,aug,625,4,-1,0,unknown,yes +36,management,single,tertiary,no,2944,no,no,cellular,18,aug,882,8,-1,0,unknown,yes +46,technician,married,secondary,no,1353,no,no,cellular,18,aug,528,5,-1,0,unknown,yes +55,management,divorced,tertiary,no,0,no,no,cellular,18,aug,309,4,-1,0,unknown,yes +30,management,single,tertiary,no,1541,no,no,cellular,18,aug,471,8,-1,0,unknown,yes +54,blue-collar,married,secondary,no,548,no,no,cellular,18,aug,520,7,-1,0,unknown,yes +31,management,divorced,tertiary,no,254,no,no,cellular,18,aug,1576,8,-1,0,unknown,yes +46,technician,single,tertiary,no,4414,no,no,cellular,18,aug,504,7,-1,0,unknown,yes +61,management,married,secondary,no,985,no,no,cellular,18,aug,998,6,-1,0,unknown,yes +58,retired,married,primary,no,1241,no,no,cellular,18,aug,194,2,-1,0,unknown,yes +38,technician,single,secondary,no,3278,no,no,cellular,19,aug,645,14,-1,0,unknown,yes +49,technician,married,secondary,no,412,no,no,cellular,19,aug,1293,8,-1,0,unknown,yes +43,management,single,tertiary,no,483,no,no,cellular,19,aug,950,6,-1,0,unknown,yes +52,management,married,tertiary,no,7135,no,no,cellular,19,aug,1032,3,-1,0,unknown,yes +33,self-employed,single,tertiary,no,61,no,no,cellular,19,aug,836,3,-1,0,unknown,yes +33,management,married,tertiary,no,1412,yes,no,unknown,19,aug,480,1,-1,0,unknown,yes +53,management,married,tertiary,no,15,no,no,cellular,20,aug,921,2,-1,0,unknown,yes +40,admin.,single,tertiary,no,27,no,no,cellular,20,aug,467,2,-1,0,unknown,yes +44,self-employed,married,tertiary,no,1196,no,no,cellular,20,aug,552,5,-1,0,unknown,yes +42,technician,divorced,secondary,no,19,no,no,cellular,20,aug,875,4,-1,0,unknown,yes +33,management,single,tertiary,no,432,no,no,telephone,20,aug,588,6,-1,0,unknown,yes +53,technician,married,tertiary,no,988,no,no,cellular,20,aug,1408,5,-1,0,unknown,yes +60,admin.,married,tertiary,no,1614,no,no,cellular,20,aug,921,6,-1,0,unknown,yes +33,technician,single,secondary,no,163,yes,no,cellular,20,aug,627,2,-1,0,unknown,yes +37,technician,married,tertiary,no,247,no,no,cellular,20,aug,625,6,-1,0,unknown,yes +45,admin.,married,secondary,no,236,no,no,cellular,20,aug,703,2,-1,0,unknown,yes +34,technician,single,secondary,no,666,no,no,cellular,21,aug,1503,2,-1,0,unknown,yes +56,technician,married,tertiary,no,73,no,no,cellular,21,aug,644,4,-1,0,unknown,yes +57,technician,divorced,tertiary,no,96,no,no,cellular,21,aug,913,4,-1,0,unknown,yes +32,management,single,tertiary,no,46,no,no,cellular,21,aug,788,6,-1,0,unknown,yes +50,services,married,secondary,no,1501,no,no,cellular,21,aug,946,4,-1,0,unknown,yes +30,services,single,tertiary,no,-477,no,yes,cellular,21,aug,1532,2,-1,0,unknown,yes +56,admin.,married,secondary,no,1694,no,no,cellular,21,aug,793,10,-1,0,unknown,yes +55,blue-collar,married,secondary,no,196,no,no,cellular,21,aug,81,1,-1,0,unknown,yes +34,self-employed,single,tertiary,no,462,no,no,cellular,21,aug,1877,3,-1,0,unknown,yes +52,management,married,tertiary,no,1227,no,no,cellular,22,aug,1123,4,-1,0,unknown,yes +32,management,single,tertiary,no,522,no,no,cellular,22,aug,576,2,-1,0,unknown,yes +31,self-employed,married,tertiary,no,94,no,no,cellular,22,aug,579,2,-1,0,unknown,yes +44,technician,married,secondary,no,267,no,no,cellular,22,aug,520,2,-1,0,unknown,yes +33,management,married,tertiary,no,4570,no,no,cellular,22,aug,1258,2,-1,0,unknown,yes +53,blue-collar,married,secondary,no,25,no,no,cellular,22,aug,528,2,-1,0,unknown,yes +46,management,single,tertiary,no,0,no,no,cellular,22,aug,686,2,-1,0,unknown,yes +46,entrepreneur,married,tertiary,no,1920,no,no,cellular,22,aug,604,6,-1,0,unknown,yes +59,admin.,married,secondary,no,1575,yes,no,cellular,22,aug,1241,11,-1,0,unknown,yes +51,unemployed,married,secondary,no,234,no,no,cellular,22,aug,735,1,-1,0,unknown,yes +57,retired,married,primary,no,3518,yes,no,cellular,25,aug,626,3,-1,0,unknown,yes +43,technician,married,secondary,no,136,no,no,cellular,25,aug,363,7,-1,0,unknown,yes +48,management,single,tertiary,no,830,no,no,cellular,25,aug,961,4,-1,0,unknown,yes +33,housemaid,married,primary,no,2054,no,no,cellular,25,aug,472,6,-1,0,unknown,yes +59,blue-collar,married,primary,no,-546,no,no,cellular,25,aug,1152,6,-1,0,unknown,yes +58,blue-collar,married,primary,no,5188,yes,no,cellular,25,aug,606,6,-1,0,unknown,yes +32,management,single,tertiary,no,1882,no,no,cellular,25,aug,497,5,-1,0,unknown,yes +44,management,married,tertiary,no,792,no,no,cellular,25,aug,630,7,-1,0,unknown,yes +47,blue-collar,married,unknown,yes,162,no,no,cellular,25,aug,366,3,-1,0,unknown,yes +34,technician,married,secondary,no,1035,no,no,cellular,25,aug,1374,10,-1,0,unknown,yes +51,retired,married,tertiary,no,746,no,no,cellular,25,aug,372,5,-1,0,unknown,yes +60,unknown,married,unknown,no,17297,no,no,cellular,26,aug,664,11,-1,0,unknown,yes +46,admin.,married,secondary,no,22,no,no,cellular,26,aug,388,6,-1,0,unknown,yes +41,technician,married,tertiary,no,231,no,no,cellular,26,aug,428,2,-1,0,unknown,yes +34,self-employed,single,secondary,no,296,no,no,cellular,27,aug,609,13,-1,0,unknown,yes +31,technician,divorced,tertiary,no,0,no,no,cellular,27,aug,581,6,-1,0,unknown,yes +37,management,married,tertiary,no,40,no,no,cellular,27,aug,1033,4,-1,0,unknown,yes +59,retired,married,secondary,no,2396,no,no,cellular,27,aug,1040,6,-1,0,unknown,yes +55,services,married,unknown,no,2944,no,no,cellular,27,aug,672,6,-1,0,unknown,yes +33,management,single,tertiary,no,7084,no,no,cellular,27,aug,512,8,-1,0,unknown,yes +30,technician,married,tertiary,no,569,no,no,cellular,27,aug,976,12,-1,0,unknown,yes +36,management,married,tertiary,no,0,no,no,telephone,27,aug,645,9,-1,0,unknown,yes +44,management,married,tertiary,no,1138,no,no,cellular,27,aug,523,3,-1,0,unknown,yes +36,technician,divorced,secondary,no,54,yes,no,cellular,27,aug,1642,3,-1,0,unknown,yes +33,management,single,tertiary,no,2637,no,no,cellular,28,aug,583,17,-1,0,unknown,yes +36,technician,married,secondary,no,2473,no,no,cellular,28,aug,965,4,-1,0,unknown,yes +53,blue-collar,married,primary,no,5603,no,no,cellular,28,aug,2372,6,-1,0,unknown,yes +47,admin.,divorced,secondary,no,225,no,no,cellular,28,aug,1126,4,-1,0,unknown,yes +39,management,married,tertiary,no,-17,yes,yes,cellular,28,aug,908,1,-1,0,unknown,yes +35,technician,single,secondary,no,3490,yes,no,cellular,29,aug,643,2,-1,0,unknown,yes +32,management,single,tertiary,no,769,no,no,cellular,29,aug,695,2,-1,0,unknown,yes +46,technician,divorced,secondary,no,-90,no,yes,telephone,17,oct,270,1,-1,0,unknown,yes +30,self-employed,married,tertiary,no,1785,no,no,unknown,17,oct,235,1,-1,0,unknown,yes +36,self-employed,single,tertiary,no,-103,yes,yes,telephone,17,oct,3253,1,-1,0,unknown,yes +47,admin.,divorced,secondary,no,555,yes,yes,telephone,17,oct,478,1,-1,0,unknown,yes +52,technician,married,secondary,no,5303,yes,no,unknown,19,oct,133,1,-1,0,unknown,yes +43,management,married,tertiary,no,1258,no,no,unknown,20,oct,312,1,-1,0,unknown,yes +44,technician,single,secondary,no,1679,no,no,telephone,20,oct,718,1,-1,0,unknown,yes +30,blue-collar,married,secondary,no,1664,yes,no,telephone,20,oct,2016,1,-1,0,unknown,yes +32,admin.,married,secondary,no,8749,yes,yes,unknown,21,oct,294,1,-1,0,unknown,yes +42,admin.,single,secondary,no,-247,yes,yes,telephone,21,oct,519,1,166,1,other,yes +33,services,married,secondary,no,3444,yes,no,telephone,21,oct,144,1,91,4,failure,yes +45,admin.,married,secondary,no,5346,yes,yes,unknown,21,oct,187,1,-1,0,unknown,yes +45,blue-collar,married,secondary,no,1144,yes,no,unknown,22,oct,676,1,-1,0,unknown,yes +28,student,single,secondary,no,2351,no,no,telephone,22,oct,157,1,-1,0,unknown,yes +32,technician,single,tertiary,no,5514,no,no,telephone,22,oct,181,1,-1,0,unknown,yes +28,self-employed,married,secondary,no,123,no,yes,telephone,22,oct,313,1,-1,0,unknown,yes +44,admin.,divorced,primary,no,429,yes,no,telephone,23,oct,80,1,-1,0,unknown,yes +51,entrepreneur,married,tertiary,no,5254,yes,no,unknown,23,oct,134,1,-1,0,unknown,yes +56,technician,married,secondary,no,589,yes,no,unknown,23,oct,518,1,147,2,success,yes +40,technician,divorced,tertiary,no,568,yes,no,unknown,24,oct,112,1,-1,0,unknown,yes +49,admin.,married,secondary,no,10250,yes,no,telephone,24,oct,97,1,-1,0,unknown,yes +50,management,single,tertiary,no,3537,no,no,unknown,24,oct,305,1,-1,0,unknown,yes +58,admin.,divorced,secondary,no,1947,no,no,telephone,26,oct,228,1,-1,0,unknown,yes +37,admin.,married,secondary,no,1967,no,no,telephone,27,oct,376,1,-1,0,unknown,yes +27,entrepreneur,married,secondary,no,2329,no,no,telephone,27,oct,131,1,-1,0,unknown,yes +47,management,divorced,tertiary,no,12026,yes,no,telephone,27,oct,251,1,-1,0,unknown,yes +39,admin.,married,secondary,no,1757,no,no,telephone,28,oct,125,1,-1,0,unknown,yes +43,management,married,secondary,no,107,yes,yes,telephone,28,oct,135,1,-1,0,unknown,yes +34,technician,married,secondary,no,1012,yes,yes,telephone,28,oct,540,1,-1,0,unknown,yes +35,management,divorced,tertiary,no,0,yes,no,telephone,29,oct,171,1,-1,0,unknown,yes +58,management,divorced,tertiary,no,372,no,yes,unknown,29,oct,11,1,-1,0,unknown,yes +35,management,single,tertiary,no,7506,yes,no,unknown,30,oct,248,1,-1,0,unknown,yes +42,technician,divorced,secondary,no,314,yes,no,unknown,30,oct,234,1,-1,0,unknown,yes +43,retired,married,secondary,no,860,no,no,telephone,30,oct,132,1,-1,0,unknown,yes +34,housemaid,married,secondary,no,0,yes,no,unknown,30,oct,154,1,-1,0,unknown,yes +35,blue-collar,single,secondary,no,3623,no,no,telephone,30,oct,160,1,-1,0,unknown,yes +38,admin.,single,secondary,no,2470,no,no,telephone,31,oct,227,1,-1,0,unknown,yes +39,blue-collar,married,secondary,no,1307,yes,no,telephone,31,oct,158,1,-1,0,unknown,yes +58,retired,divorced,tertiary,no,3237,no,no,telephone,31,oct,615,1,-1,0,unknown,yes +60,management,married,tertiary,no,5041,no,no,telephone,4,nov,399,1,-1,0,unknown,yes +56,technician,married,secondary,no,6619,yes,no,telephone,4,nov,465,1,-1,0,unknown,yes +31,management,married,tertiary,no,1331,no,no,unknown,5,nov,268,1,-1,0,unknown,yes +37,services,married,secondary,no,1970,yes,no,telephone,5,nov,253,1,-1,0,unknown,yes +59,retired,divorced,secondary,no,1026,no,no,unknown,5,nov,669,1,-1,0,unknown,yes +49,management,married,secondary,no,249,no,no,telephone,6,nov,234,1,-1,0,unknown,yes +30,management,single,tertiary,no,12857,yes,no,cellular,6,nov,150,1,-1,0,unknown,yes +31,technician,single,tertiary,no,2807,no,no,unknown,8,nov,154,1,-1,0,unknown,yes +40,blue-collar,married,secondary,no,5060,no,no,unknown,9,nov,299,1,-1,0,unknown,yes +43,admin.,married,secondary,no,2271,no,no,telephone,10,nov,524,1,-1,0,unknown,yes +48,management,married,tertiary,no,1,no,no,telephone,10,nov,248,1,-1,0,unknown,yes +34,management,married,tertiary,no,676,no,no,telephone,11,nov,486,1,-1,0,unknown,yes +28,self-employed,single,tertiary,no,160,no,no,unknown,11,nov,158,1,-1,0,unknown,yes +34,admin.,married,tertiary,no,899,yes,no,unknown,12,nov,114,1,170,3,failure,yes +47,blue-collar,married,secondary,no,1230,yes,no,telephone,12,nov,378,1,-1,0,unknown,yes +59,housemaid,married,tertiary,no,0,no,no,telephone,13,nov,494,1,-1,0,unknown,yes +32,blue-collar,single,tertiary,no,700,no,no,unknown,13,nov,90,1,-1,0,unknown,yes +31,entrepreneur,single,secondary,no,0,no,no,telephone,13,nov,160,1,-1,0,unknown,yes +27,student,single,secondary,no,67,no,no,telephone,14,nov,239,1,-1,0,unknown,yes +35,unemployed,single,secondary,no,127,yes,no,telephone,14,nov,162,1,-1,0,unknown,yes +32,blue-collar,married,secondary,no,2089,yes,no,cellular,14,nov,132,1,-1,0,unknown,yes +57,blue-collar,married,unknown,no,3585,no,no,telephone,14,nov,172,1,-1,0,unknown,yes +58,management,married,tertiary,no,4152,yes,no,telephone,14,nov,160,1,-1,0,unknown,yes +30,technician,single,secondary,no,816,yes,no,unknown,14,nov,179,1,-1,0,unknown,yes +37,management,married,secondary,no,5447,yes,yes,cellular,17,nov,1789,1,-1,0,unknown,yes +44,technician,divorced,secondary,no,275,no,no,cellular,17,nov,1077,1,-1,0,unknown,yes +57,blue-collar,married,secondary,no,1540,yes,no,cellular,17,nov,564,1,-1,0,unknown,yes +34,blue-collar,married,secondary,no,751,yes,yes,cellular,17,nov,1303,1,-1,0,unknown,yes +54,unemployed,single,secondary,no,380,no,no,cellular,17,nov,696,2,-1,0,unknown,yes +55,retired,married,secondary,no,1504,yes,yes,cellular,17,nov,761,1,-1,0,unknown,yes +59,management,married,tertiary,no,1783,no,yes,cellular,17,nov,540,2,-1,0,unknown,yes +53,retired,married,tertiary,no,2269,no,no,cellular,17,nov,1091,2,150,1,success,yes +37,technician,married,secondary,no,5115,yes,no,cellular,17,nov,1210,2,171,4,failure,yes +45,entrepreneur,married,secondary,no,781,no,yes,cellular,17,nov,652,2,126,2,failure,yes +49,technician,single,secondary,no,-188,yes,yes,cellular,17,nov,454,1,-1,0,unknown,yes +31,blue-collar,single,tertiary,no,761,no,no,telephone,18,nov,514,2,-1,0,unknown,yes +31,admin.,single,secondary,no,19,yes,no,cellular,18,nov,1978,1,-1,0,unknown,yes +35,technician,married,secondary,no,4508,yes,no,cellular,18,nov,854,1,-1,0,unknown,yes +37,entrepreneur,divorced,tertiary,no,66,no,no,cellular,18,nov,1164,2,-1,0,unknown,yes +48,management,married,tertiary,no,2266,no,no,cellular,18,nov,676,1,-1,0,unknown,yes +39,technician,single,secondary,no,4646,yes,no,cellular,18,nov,486,1,-1,0,unknown,yes +34,management,single,tertiary,no,1494,yes,no,cellular,18,nov,596,1,182,1,other,yes +49,management,married,tertiary,no,1050,yes,no,cellular,18,nov,924,1,-1,0,unknown,yes +41,management,married,tertiary,no,0,yes,no,cellular,18,nov,897,3,-1,0,unknown,yes +46,management,married,secondary,no,0,no,no,cellular,18,nov,1855,1,-1,0,unknown,yes +54,management,divorced,tertiary,no,2171,yes,yes,telephone,18,nov,1034,1,-1,0,unknown,yes +38,technician,married,tertiary,no,3234,no,no,cellular,18,nov,578,2,-1,0,unknown,yes +39,entrepreneur,married,secondary,no,11887,no,no,cellular,18,nov,1181,2,-1,0,unknown,yes +46,management,married,tertiary,no,0,no,no,cellular,18,nov,716,2,110,3,other,yes +58,management,divorced,tertiary,no,5037,yes,no,cellular,18,nov,1437,2,-1,0,unknown,yes +32,self-employed,single,tertiary,no,386,yes,no,cellular,18,nov,482,1,-1,0,unknown,yes +30,admin.,married,secondary,no,8781,yes,no,cellular,18,nov,898,1,-1,0,unknown,yes +51,entrepreneur,married,primary,no,538,no,no,cellular,18,nov,1122,4,-1,0,unknown,yes +30,management,single,tertiary,no,5561,yes,no,cellular,19,nov,511,1,-1,0,unknown,yes +35,management,divorced,tertiary,no,859,yes,yes,cellular,19,nov,1554,1,-1,0,unknown,yes +30,services,single,primary,no,0,yes,yes,cellular,19,nov,686,1,-1,0,unknown,yes +30,self-employed,single,secondary,no,-617,no,yes,cellular,19,nov,925,1,-1,0,unknown,yes +43,management,married,tertiary,no,1429,yes,no,cellular,19,nov,1015,1,198,2,other,yes +47,management,married,unknown,no,4189,yes,no,cellular,19,nov,489,3,-1,0,unknown,yes +51,retired,married,tertiary,no,580,no,no,cellular,19,nov,694,2,-1,0,unknown,yes +32,services,single,secondary,no,2615,no,no,cellular,19,nov,853,1,-1,0,unknown,yes +53,unemployed,divorced,secondary,no,587,no,no,cellular,19,nov,561,1,-1,0,unknown,yes +33,technician,single,tertiary,no,149,yes,no,cellular,19,nov,424,2,182,1,other,yes +40,blue-collar,single,secondary,no,3,no,no,cellular,19,nov,998,1,-1,0,unknown,yes +42,blue-collar,married,primary,no,807,yes,no,cellular,19,nov,1057,1,-1,0,unknown,yes +46,unemployed,divorced,secondary,no,3354,yes,no,cellular,19,nov,522,1,174,1,success,yes +32,self-employed,single,tertiary,no,1249,yes,no,cellular,19,nov,472,1,-1,0,unknown,yes +38,blue-collar,married,primary,no,190,yes,no,telephone,19,nov,623,1,175,1,other,yes +32,technician,single,tertiary,no,550,no,no,cellular,19,nov,337,1,-1,0,unknown,yes +30,entrepreneur,married,secondary,no,12737,no,yes,cellular,19,nov,589,2,-1,0,unknown,yes +35,technician,married,secondary,no,0,yes,no,cellular,19,nov,644,4,-1,0,unknown,yes +36,admin.,married,secondary,no,1207,yes,no,cellular,19,nov,1792,2,-1,0,unknown,yes +43,self-employed,divorced,secondary,no,347,no,no,cellular,19,nov,1468,3,-1,0,unknown,yes +42,management,married,tertiary,no,3713,no,no,cellular,19,nov,709,2,-1,0,unknown,yes +40,management,married,tertiary,no,3352,yes,no,cellular,19,nov,639,2,27,1,success,yes +32,blue-collar,married,secondary,no,254,yes,no,cellular,19,nov,1720,3,-1,0,unknown,yes +32,technician,married,tertiary,no,4654,yes,yes,cellular,20,nov,276,1,128,2,failure,yes +41,blue-collar,single,secondary,yes,-386,no,yes,cellular,20,nov,477,1,-1,0,unknown,yes +34,blue-collar,single,secondary,no,3043,yes,yes,cellular,20,nov,670,1,-1,0,unknown,yes +40,services,single,secondary,no,1547,yes,no,cellular,20,nov,405,1,-1,0,unknown,yes +32,services,single,tertiary,no,945,no,no,cellular,20,nov,531,1,-1,0,unknown,yes +32,technician,single,secondary,no,6402,yes,no,cellular,20,nov,628,1,-1,0,unknown,yes +36,self-employed,single,secondary,no,1295,no,no,cellular,20,nov,1192,1,-1,0,unknown,yes +45,technician,married,secondary,no,6993,yes,no,cellular,20,nov,283,1,-1,0,unknown,yes +47,self-employed,married,secondary,no,4420,yes,yes,cellular,20,nov,454,1,-1,0,unknown,yes +35,management,divorced,tertiary,no,141,no,yes,cellular,20,nov,728,1,-1,0,unknown,yes +36,services,married,secondary,no,11462,yes,no,cellular,20,nov,993,1,-1,0,unknown,yes +33,technician,married,tertiary,no,6843,no,no,cellular,20,nov,755,1,100,10,other,yes +30,blue-collar,married,secondary,no,501,yes,yes,cellular,20,nov,994,1,177,1,failure,yes +32,services,single,secondary,no,5806,yes,no,cellular,20,nov,1503,2,-1,0,unknown,yes +45,entrepreneur,married,tertiary,no,20138,yes,no,cellular,20,nov,871,5,-1,0,unknown,yes +47,services,married,secondary,no,1315,no,no,cellular,20,nov,329,4,-1,0,unknown,yes +46,technician,married,tertiary,no,0,no,no,cellular,20,nov,531,1,167,1,failure,yes +39,unemployed,single,tertiary,no,7,yes,no,cellular,20,nov,931,4,-1,0,unknown,yes +30,services,married,secondary,no,3929,yes,no,cellular,20,nov,593,1,-1,0,unknown,yes +45,self-employed,married,secondary,no,7,no,no,cellular,20,nov,691,1,-1,0,unknown,yes +43,blue-collar,married,secondary,no,699,yes,yes,cellular,20,nov,1258,2,122,2,other,yes +53,blue-collar,married,primary,no,421,yes,no,cellular,20,nov,677,1,-1,0,unknown,yes +43,technician,married,tertiary,no,4333,yes,no,cellular,20,nov,1490,3,-1,0,unknown,yes +54,management,divorced,secondary,no,300,yes,no,cellular,20,nov,562,2,-1,0,unknown,yes +30,blue-collar,single,secondary,no,7773,yes,no,cellular,20,nov,705,1,-1,0,unknown,yes +30,admin.,married,secondary,no,1794,no,no,cellular,20,nov,1035,1,-1,0,unknown,yes +36,management,single,tertiary,no,2032,no,yes,cellular,20,nov,736,1,-1,0,unknown,yes +33,management,married,tertiary,no,3401,no,no,cellular,20,nov,253,1,-1,0,unknown,yes +38,entrepreneur,married,tertiary,no,1110,yes,no,cellular,20,nov,888,2,183,2,failure,yes +37,technician,divorced,secondary,no,3068,yes,yes,cellular,20,nov,370,2,195,1,other,yes +32,services,married,secondary,no,983,yes,no,cellular,20,nov,500,2,133,1,failure,yes +59,technician,divorced,secondary,no,2396,no,no,cellular,20,nov,488,1,-1,0,unknown,yes +59,retired,married,secondary,no,6888,no,no,telephone,20,nov,1025,2,-1,0,unknown,yes +46,admin.,divorced,secondary,no,2087,no,no,cellular,20,nov,768,3,-1,0,unknown,yes +32,blue-collar,single,primary,no,121,yes,no,cellular,20,nov,758,1,-1,0,unknown,yes +52,entrepreneur,single,tertiary,no,3469,yes,no,cellular,20,nov,653,1,-1,0,unknown,yes +45,blue-collar,married,primary,no,5461,yes,no,cellular,20,nov,841,2,-1,0,unknown,yes +52,blue-collar,married,secondary,no,7119,no,yes,telephone,20,nov,871,3,-1,0,unknown,yes +31,blue-collar,married,tertiary,no,-35,no,no,cellular,20,nov,952,2,-1,0,unknown,yes +31,unemployed,married,secondary,no,314,yes,no,cellular,20,nov,1341,3,178,7,failure,yes +39,technician,single,secondary,no,18508,no,no,cellular,20,nov,1598,4,-1,0,unknown,yes +35,blue-collar,married,secondary,no,5639,yes,no,cellular,20,nov,945,2,-1,0,unknown,yes +33,services,married,secondary,no,2918,no,yes,cellular,20,nov,1059,2,-1,0,unknown,yes +50,blue-collar,married,primary,no,12519,yes,no,cellular,21,nov,615,3,34,1,failure,yes +36,management,married,tertiary,no,4069,no,no,cellular,21,nov,517,1,-1,0,unknown,yes +34,admin.,single,tertiary,no,4254,yes,no,cellular,21,nov,714,1,-1,0,unknown,yes +46,blue-collar,divorced,primary,no,219,yes,no,cellular,21,nov,729,1,-1,0,unknown,yes +47,technician,married,secondary,no,0,no,no,cellular,21,nov,591,1,10,1,failure,yes +39,admin.,single,secondary,no,2263,yes,yes,telephone,21,nov,1158,9,-1,0,unknown,yes +31,self-employed,single,tertiary,no,2589,no,no,cellular,21,nov,614,1,-1,0,unknown,yes +41,management,single,tertiary,no,1982,no,no,cellular,21,nov,558,1,-1,0,unknown,yes +59,management,married,tertiary,no,7049,no,no,cellular,21,nov,530,1,163,2,failure,yes +39,management,divorced,tertiary,no,1968,no,no,cellular,21,nov,648,1,-1,0,unknown,yes +48,housemaid,married,primary,no,7195,no,no,cellular,21,nov,609,2,-1,0,unknown,yes +50,admin.,married,secondary,no,4117,no,no,cellular,21,nov,530,1,-1,0,unknown,yes +31,admin.,single,secondary,no,3950,yes,no,cellular,21,nov,529,1,-1,0,unknown,yes +30,services,single,secondary,no,495,yes,no,cellular,21,nov,641,1,-1,0,unknown,yes +31,management,married,secondary,no,8629,yes,no,cellular,21,nov,957,1,184,2,failure,yes +30,technician,married,secondary,no,455,yes,no,cellular,21,nov,758,1,-1,0,unknown,yes +34,blue-collar,single,secondary,no,4536,yes,no,cellular,21,nov,963,1,-1,0,unknown,yes +53,blue-collar,married,secondary,no,1777,yes,no,cellular,21,nov,796,5,154,1,failure,yes +34,blue-collar,married,primary,no,3527,yes,no,cellular,21,nov,1022,1,-1,0,unknown,yes +57,management,married,tertiary,no,372,no,no,cellular,21,nov,553,3,-1,0,unknown,yes +41,services,single,secondary,no,92,no,no,cellular,21,nov,372,1,-1,0,unknown,yes +40,admin.,married,primary,no,72,yes,yes,cellular,21,nov,849,1,-1,0,unknown,yes +37,admin.,divorced,secondary,no,1533,yes,no,cellular,21,nov,555,4,-1,0,unknown,yes +31,management,married,tertiary,no,4148,yes,no,cellular,21,nov,316,3,99,9,other,yes +58,management,married,tertiary,no,96,no,no,cellular,21,nov,850,1,-1,0,unknown,yes +39,unemployed,married,secondary,no,2245,no,no,cellular,21,nov,749,2,-1,0,unknown,yes +47,technician,married,secondary,no,834,no,yes,cellular,21,nov,902,1,133,2,other,yes +44,management,married,tertiary,no,4119,yes,yes,telephone,21,nov,1074,1,-1,0,unknown,yes +45,technician,married,tertiary,no,-525,no,yes,cellular,21,nov,980,2,-1,0,unknown,yes +41,entrepreneur,married,primary,no,39,yes,no,cellular,21,nov,549,2,-1,0,unknown,yes +33,technician,single,tertiary,no,0,yes,no,cellular,21,nov,654,1,-1,0,unknown,yes +30,student,single,tertiary,no,2766,no,no,cellular,21,nov,834,1,-1,0,unknown,yes +30,student,single,tertiary,no,3300,no,no,cellular,21,nov,1571,1,-1,0,unknown,yes +42,management,married,tertiary,no,36,no,no,cellular,21,nov,664,3,-1,0,unknown,yes +49,management,married,tertiary,no,22520,no,no,cellular,21,nov,579,9,-1,0,unknown,yes +59,unemployed,single,primary,no,7724,no,no,cellular,21,nov,373,3,-1,0,unknown,yes +31,unknown,married,secondary,no,111,no,no,cellular,21,nov,504,2,93,2,failure,yes +43,management,married,tertiary,no,2640,no,no,cellular,21,nov,314,4,-1,0,unknown,yes +38,management,married,tertiary,no,3436,no,no,cellular,21,nov,663,4,-1,0,unknown,yes +30,services,married,secondary,no,0,yes,no,cellular,21,nov,681,4,-1,0,unknown,yes +35,admin.,divorced,secondary,no,3636,no,yes,cellular,21,nov,808,2,-1,0,unknown,yes +43,technician,married,secondary,no,3288,yes,no,cellular,21,nov,775,3,-1,0,unknown,yes +34,management,single,tertiary,no,2633,yes,no,cellular,21,nov,705,6,-1,0,unknown,yes +52,blue-collar,married,secondary,no,580,no,no,cellular,21,nov,965,2,-1,0,unknown,yes +46,management,married,secondary,no,149,no,no,cellular,21,nov,1222,2,-1,0,unknown,yes +46,services,divorced,secondary,no,4329,no,no,cellular,21,nov,534,2,-1,0,unknown,yes +37,admin.,single,secondary,no,1097,yes,no,cellular,21,nov,1555,2,-1,0,unknown,yes +42,management,married,tertiary,no,1275,yes,yes,cellular,21,nov,925,5,-1,0,unknown,yes +23,unemployed,single,primary,no,1003,no,no,telephone,27,nov,8,1,-1,0,unknown,yes +53,management,divorced,secondary,no,1004,no,yes,telephone,22,dec,119,1,-1,0,unknown,yes +26,unemployed,single,tertiary,no,814,no,no,cellular,28,jan,1387,1,-1,0,unknown,yes +49,technician,married,secondary,no,808,yes,no,cellular,28,jan,1232,1,-1,0,unknown,yes +34,unknown,single,secondary,no,859,no,no,cellular,28,jan,829,1,-1,0,unknown,yes +28,unknown,single,secondary,no,4465,no,no,cellular,28,jan,769,1,-1,0,unknown,yes +46,technician,divorced,tertiary,no,0,no,no,cellular,28,jan,1199,2,-1,0,unknown,yes +26,unemployed,single,secondary,no,622,no,no,cellular,28,jan,1451,2,-1,0,unknown,yes +31,services,single,secondary,no,1709,no,yes,telephone,28,jan,944,3,-1,0,unknown,yes +51,admin.,single,tertiary,no,394,no,no,telephone,28,jan,968,2,-1,0,unknown,yes +47,blue-collar,married,secondary,no,1125,yes,no,cellular,29,jan,1101,1,-1,0,unknown,yes +53,blue-collar,married,primary,yes,-462,no,no,cellular,29,jan,470,1,-1,0,unknown,yes +29,unemployed,single,primary,no,550,no,no,cellular,29,jan,801,1,-1,0,unknown,yes +32,technician,single,secondary,no,540,no,yes,cellular,29,jan,750,1,-1,0,unknown,yes +26,blue-collar,single,primary,no,941,no,no,cellular,29,jan,1165,1,-1,0,unknown,yes +40,management,single,tertiary,no,1361,no,no,cellular,29,jan,1473,1,-1,0,unknown,yes +33,services,single,tertiary,no,-452,no,no,cellular,29,jan,692,2,-1,0,unknown,yes +49,unemployed,married,primary,no,518,no,no,cellular,29,jan,1917,2,-1,0,unknown,yes +60,technician,married,tertiary,no,-71,yes,yes,cellular,30,jan,1451,1,-1,0,unknown,yes +41,management,single,secondary,no,3234,yes,no,cellular,30,jan,2770,1,-1,0,unknown,yes +36,technician,single,secondary,no,98,no,no,cellular,30,jan,771,1,-1,0,unknown,yes +29,services,single,unknown,no,196,no,no,cellular,30,jan,726,2,-1,0,unknown,yes +42,admin.,divorced,secondary,no,936,no,no,cellular,30,jan,931,1,-1,0,unknown,yes +33,entrepreneur,single,tertiary,no,300,yes,yes,cellular,30,jan,922,5,-1,0,unknown,yes +31,admin.,divorced,secondary,no,217,yes,no,cellular,30,jan,1776,2,-1,0,unknown,yes +31,unemployed,single,primary,no,163,no,no,cellular,30,jan,707,2,2,1,other,yes +26,services,single,secondary,no,110,no,no,cellular,30,jan,1136,2,-1,0,unknown,yes +40,technician,single,tertiary,no,1646,yes,no,cellular,2,feb,215,1,242,2,failure,yes +45,unemployed,married,secondary,no,2040,no,no,telephone,2,feb,803,1,-1,0,unknown,yes +55,technician,married,secondary,yes,-308,no,no,cellular,2,feb,781,1,-1,0,unknown,yes +29,technician,single,tertiary,no,2325,no,no,cellular,2,feb,125,1,-1,0,unknown,yes +47,management,single,tertiary,no,86,no,no,cellular,2,feb,1086,1,-1,0,unknown,yes +50,unemployed,divorced,unknown,no,1088,no,no,cellular,2,feb,749,1,-1,0,unknown,yes +44,unemployed,married,secondary,no,0,yes,no,cellular,2,feb,699,1,272,1,failure,yes +56,unemployed,married,secondary,no,0,no,no,telephone,2,feb,492,1,-1,0,unknown,yes +39,student,single,tertiary,no,2103,no,no,cellular,2,feb,588,1,-1,0,unknown,yes +59,retired,single,secondary,no,2,no,no,telephone,2,feb,935,1,-1,0,unknown,yes +43,management,divorced,secondary,no,51,no,no,cellular,2,feb,430,1,-1,0,unknown,yes +36,admin.,married,secondary,no,96,no,no,cellular,2,feb,302,1,-1,0,unknown,yes +29,admin.,single,secondary,no,1027,yes,no,cellular,2,feb,177,1,-1,0,unknown,yes +38,management,married,tertiary,no,1308,yes,no,cellular,2,feb,626,1,-1,0,unknown,yes +41,services,divorced,secondary,no,840,yes,no,cellular,2,feb,938,1,-1,0,unknown,yes +58,management,divorced,tertiary,no,5701,no,no,cellular,2,feb,521,1,-1,0,unknown,yes +61,management,married,tertiary,no,6016,no,no,cellular,2,feb,670,3,-1,0,unknown,yes +36,management,married,tertiary,no,630,no,no,cellular,2,feb,285,1,-1,0,unknown,yes +30,self-employed,single,tertiary,no,432,yes,no,cellular,2,feb,402,1,-1,0,unknown,yes +43,admin.,single,secondary,no,-247,yes,yes,cellular,2,feb,751,2,76,4,failure,yes +39,services,married,secondary,no,52,no,no,telephone,2,feb,1420,3,-1,0,unknown,yes +48,blue-collar,single,primary,no,623,yes,no,cellular,2,feb,1425,2,-1,0,unknown,yes +26,student,single,secondary,no,0,no,no,cellular,2,feb,1223,2,-1,0,unknown,yes +51,technician,married,secondary,no,100,no,no,cellular,2,feb,467,2,-1,0,unknown,yes +37,management,married,tertiary,no,4089,yes,no,cellular,2,feb,289,2,174,4,other,yes +29,technician,single,tertiary,no,1669,no,no,cellular,3,feb,297,1,-1,0,unknown,yes +57,admin.,married,secondary,no,169,no,no,cellular,3,feb,369,1,-1,0,unknown,yes +25,admin.,single,secondary,no,483,no,yes,cellular,3,feb,189,1,-1,0,unknown,yes +68,retired,divorced,primary,no,250,no,no,cellular,3,feb,360,1,-1,0,unknown,yes +34,management,married,tertiary,no,0,yes,no,cellular,3,feb,251,1,-1,0,unknown,yes +38,technician,divorced,secondary,no,902,yes,no,cellular,3,feb,650,1,-1,0,unknown,yes +54,technician,divorced,secondary,no,2156,yes,no,cellular,3,feb,261,1,195,4,failure,yes +32,management,single,tertiary,no,2360,no,no,cellular,3,feb,152,2,160,5,other,yes +41,blue-collar,married,primary,no,201,yes,no,cellular,3,feb,157,1,-1,0,unknown,yes +48,technician,single,secondary,no,-92,yes,no,cellular,3,feb,1393,1,-1,0,unknown,yes +59,retired,divorced,secondary,no,514,no,no,cellular,3,feb,261,1,-1,0,unknown,yes +39,unemployed,single,secondary,no,-114,yes,no,cellular,3,feb,372,1,-1,0,unknown,yes +31,management,married,tertiary,no,1331,no,no,cellular,3,feb,182,2,90,1,success,yes +30,entrepreneur,single,secondary,no,732,no,no,cellular,3,feb,1404,4,-1,0,unknown,yes +40,management,married,tertiary,no,1308,no,no,telephone,3,feb,1776,2,-1,0,unknown,yes +28,self-employed,married,tertiary,no,0,yes,no,cellular,4,feb,546,3,196,4,failure,yes +52,management,married,tertiary,no,-970,yes,no,cellular,4,feb,489,1,-1,0,unknown,yes +32,technician,single,tertiary,no,1246,yes,no,cellular,4,feb,192,2,-1,0,unknown,yes +34,management,married,tertiary,no,73,no,no,cellular,4,feb,426,2,-1,0,unknown,yes +31,unemployed,single,primary,no,406,no,no,cellular,4,feb,736,1,-1,0,unknown,yes +57,admin.,married,secondary,no,4391,no,no,telephone,4,feb,1416,1,-1,0,unknown,yes +31,self-employed,married,tertiary,no,168,no,no,cellular,4,feb,193,2,-1,0,unknown,yes +29,management,married,tertiary,no,1441,yes,no,cellular,4,feb,80,2,-1,0,unknown,yes +75,retired,divorced,primary,no,3881,yes,no,cellular,4,feb,136,3,-1,0,unknown,yes +32,admin.,single,secondary,no,678,yes,no,cellular,4,feb,1579,1,246,4,failure,yes +31,management,married,tertiary,no,141,yes,no,cellular,4,feb,572,2,238,7,other,yes +41,self-employed,single,tertiary,no,-94,yes,no,cellular,4,feb,1164,1,203,1,failure,yes +22,admin.,single,tertiary,no,897,yes,no,cellular,4,feb,133,4,-1,0,unknown,yes +31,unemployed,single,secondary,no,1214,no,no,cellular,4,feb,974,1,-1,0,unknown,yes +69,retired,married,primary,no,324,no,no,cellular,4,feb,136,4,-1,0,unknown,yes +30,self-employed,married,tertiary,no,2666,no,no,cellular,4,feb,467,1,-1,0,unknown,yes +49,blue-collar,divorced,secondary,no,10613,no,yes,cellular,4,feb,1226,1,-1,0,unknown,yes +29,management,single,tertiary,no,697,no,no,cellular,4,feb,206,1,-1,0,unknown,yes +43,blue-collar,married,secondary,no,953,yes,no,cellular,4,feb,765,2,-1,0,unknown,yes +28,services,single,primary,no,198,no,no,cellular,4,feb,976,2,-1,0,unknown,yes +56,unemployed,single,primary,no,1110,no,no,cellular,4,feb,945,2,-1,0,unknown,yes +39,admin.,married,secondary,no,130,yes,yes,cellular,4,feb,1290,2,-1,0,unknown,yes +33,blue-collar,married,secondary,no,315,no,no,cellular,4,feb,146,3,-1,0,unknown,yes +38,technician,married,tertiary,no,4383,no,no,cellular,4,feb,1381,4,-1,0,unknown,yes +30,admin.,single,secondary,no,313,yes,no,cellular,4,feb,1121,2,-1,0,unknown,yes +29,technician,married,secondary,no,273,no,no,cellular,4,feb,2775,2,-1,0,unknown,yes +69,management,married,tertiary,no,840,no,no,telephone,5,feb,128,3,-1,0,unknown,yes +44,management,married,tertiary,no,309,yes,no,cellular,5,feb,676,1,-1,0,unknown,yes +35,management,single,tertiary,no,2707,no,no,cellular,5,feb,699,1,-1,0,unknown,yes +31,technician,single,tertiary,no,1109,no,no,cellular,5,feb,642,1,167,2,failure,yes +26,entrepreneur,single,secondary,no,101,yes,no,cellular,5,feb,810,1,268,1,failure,yes +26,entrepreneur,single,tertiary,no,725,no,no,cellular,5,feb,1916,2,189,29,other,yes +34,unemployed,married,primary,no,309,no,no,cellular,5,feb,578,1,-1,0,unknown,yes +42,technician,single,secondary,no,541,yes,no,cellular,5,feb,656,1,-1,0,unknown,yes +54,services,married,unknown,no,0,yes,no,cellular,5,feb,686,2,267,1,other,yes +53,management,married,tertiary,no,1624,no,no,cellular,5,feb,158,3,-1,0,unknown,yes +54,technician,married,secondary,no,0,no,no,telephone,5,feb,744,3,-1,0,unknown,yes +48,entrepreneur,single,tertiary,no,318,yes,no,cellular,5,feb,1017,4,-1,0,unknown,yes +40,unemployed,married,primary,no,1908,yes,no,cellular,5,feb,1661,2,-1,0,unknown,yes +28,technician,single,tertiary,no,676,no,no,cellular,5,feb,1138,2,-1,0,unknown,yes +34,entrepreneur,married,tertiary,no,1076,yes,no,cellular,5,feb,136,10,-1,0,unknown,yes +34,management,single,tertiary,no,1228,no,no,cellular,5,feb,263,8,-1,0,unknown,yes +32,management,single,tertiary,no,0,no,no,cellular,5,feb,550,4,-1,0,unknown,yes +31,services,single,secondary,no,13,no,yes,cellular,6,feb,1019,2,-1,0,unknown,yes +31,management,single,tertiary,no,12857,yes,no,cellular,6,feb,158,1,92,1,success,yes +66,technician,married,secondary,no,0,no,no,cellular,6,feb,751,1,-1,0,unknown,yes +37,technician,single,tertiary,no,6101,no,no,cellular,6,feb,141,1,-1,0,unknown,yes +33,management,married,tertiary,no,158,no,no,cellular,6,feb,192,2,-1,0,unknown,yes +50,management,married,tertiary,no,346,no,no,cellular,6,feb,178,1,-1,0,unknown,yes +33,blue-collar,single,secondary,no,697,no,no,cellular,6,feb,860,2,-1,0,unknown,yes +56,management,married,tertiary,no,616,no,no,cellular,6,feb,156,1,-1,0,unknown,yes +26,services,single,tertiary,no,1140,yes,no,cellular,6,feb,984,2,-1,0,unknown,yes +59,retired,divorced,tertiary,no,3444,no,no,cellular,6,feb,241,2,-1,0,unknown,yes +32,blue-collar,married,secondary,no,1879,no,no,cellular,6,feb,591,8,-1,0,unknown,yes +22,student,single,secondary,no,0,no,no,cellular,6,feb,229,6,-1,0,unknown,yes +34,management,married,tertiary,no,0,no,no,cellular,6,feb,787,3,9,1,other,yes +39,services,married,tertiary,no,1493,no,no,cellular,9,feb,912,3,-1,0,unknown,yes +28,technician,single,secondary,no,313,no,no,cellular,9,feb,1183,2,-1,0,unknown,yes +31,self-employed,single,tertiary,no,1815,no,no,telephone,9,feb,1541,1,-1,0,unknown,yes +33,blue-collar,single,tertiary,no,700,no,no,cellular,9,feb,126,1,88,1,success,yes +66,retired,married,primary,no,206,no,no,cellular,9,feb,479,1,-1,0,unknown,yes +26,admin.,single,secondary,no,255,no,no,cellular,9,feb,190,1,-1,0,unknown,yes +30,admin.,single,secondary,no,270,no,no,cellular,9,feb,123,1,-1,0,unknown,yes +28,technician,single,tertiary,no,4987,no,no,cellular,9,feb,253,21,-1,0,unknown,yes +29,technician,single,tertiary,no,673,yes,no,cellular,9,feb,835,3,-1,0,unknown,yes +49,services,married,secondary,no,320,no,no,telephone,9,feb,1971,4,-1,0,unknown,yes +34,admin.,married,secondary,no,0,yes,no,cellular,10,feb,97,1,85,1,failure,yes +47,blue-collar,married,secondary,no,292,no,no,cellular,10,feb,277,1,-1,0,unknown,yes +42,technician,married,tertiary,no,757,no,no,cellular,10,feb,154,1,-1,0,unknown,yes +43,management,married,tertiary,no,40,no,no,cellular,10,feb,147,1,-1,0,unknown,yes +61,retired,married,tertiary,no,1257,no,no,cellular,10,feb,503,1,-1,0,unknown,yes +35,technician,single,secondary,no,1693,yes,no,cellular,10,feb,515,1,-1,0,unknown,yes +40,blue-collar,married,secondary,no,5060,no,no,cellular,10,feb,154,2,93,1,success,yes +31,management,divorced,tertiary,no,373,no,no,cellular,10,feb,132,6,-1,0,unknown,yes +33,management,married,secondary,no,369,no,no,cellular,11,feb,446,1,-1,0,unknown,yes +69,retired,married,primary,no,2346,no,no,cellular,11,feb,354,2,-1,0,unknown,yes +30,services,single,secondary,no,1599,no,no,cellular,11,feb,152,2,-1,0,unknown,yes +41,technician,married,secondary,no,1066,no,no,cellular,11,feb,109,3,-1,0,unknown,yes +31,management,married,tertiary,no,2603,yes,no,cellular,11,feb,280,4,-1,0,unknown,yes +22,student,single,secondary,no,381,no,no,cellular,12,feb,227,1,-1,0,unknown,yes +37,admin.,married,secondary,no,1314,yes,no,cellular,12,feb,118,4,210,3,failure,yes +48,management,single,tertiary,no,5689,no,no,cellular,12,feb,262,1,-1,0,unknown,yes +85,retired,married,primary,no,12114,no,no,telephone,12,feb,165,2,-1,0,unknown,yes +72,retired,married,tertiary,no,0,no,no,cellular,13,feb,99,1,-1,0,unknown,yes +46,admin.,divorced,secondary,no,2232,no,no,cellular,13,feb,121,1,-1,0,unknown,yes +26,technician,single,tertiary,no,11862,no,no,cellular,13,feb,119,1,-1,0,unknown,yes +37,technician,married,tertiary,no,127,yes,no,cellular,13,feb,71,1,-1,0,unknown,yes +53,management,divorced,tertiary,no,2152,no,no,cellular,13,feb,75,3,-1,0,unknown,yes +33,management,single,tertiary,no,3552,no,no,cellular,13,feb,158,2,85,3,failure,yes +90,retired,divorced,secondary,no,1,no,no,cellular,13,feb,152,3,-1,0,unknown,yes +54,admin.,divorced,secondary,no,1872,no,no,cellular,13,feb,439,5,-1,0,unknown,yes +67,retired,married,tertiary,no,1341,no,no,cellular,13,feb,706,1,-1,0,unknown,yes +42,management,divorced,unknown,no,7702,no,no,cellular,16,feb,138,2,-1,0,unknown,yes +71,retired,married,primary,no,4657,no,no,cellular,16,feb,93,5,-1,0,unknown,yes +44,admin.,divorced,secondary,no,397,yes,yes,cellular,16,feb,127,1,257,1,other,yes +47,entrepreneur,married,tertiary,no,0,no,no,cellular,16,feb,261,2,-1,0,unknown,yes +44,admin.,married,tertiary,no,348,yes,yes,cellular,16,feb,170,2,-1,0,unknown,yes +37,technician,single,secondary,no,2442,no,no,cellular,16,feb,91,3,-1,0,unknown,yes +37,services,married,secondary,no,1543,yes,no,cellular,16,feb,138,2,-1,0,unknown,yes +28,self-employed,single,tertiary,no,805,no,no,cellular,16,feb,331,1,-1,0,unknown,yes +21,blue-collar,single,secondary,no,2265,no,no,cellular,17,feb,92,2,-1,0,unknown,yes +32,management,single,tertiary,no,312,no,no,cellular,17,feb,232,2,-1,0,unknown,yes +51,technician,married,secondary,no,196,yes,yes,cellular,17,feb,88,1,-1,0,unknown,yes +26,student,single,secondary,no,620,no,no,cellular,17,feb,104,1,-1,0,unknown,yes +74,retired,married,secondary,no,1714,no,no,telephone,17,feb,127,1,-1,0,unknown,yes +65,retired,married,tertiary,no,2416,no,no,cellular,17,feb,221,2,-1,0,unknown,yes +47,technician,married,secondary,no,335,no,no,cellular,17,feb,226,1,-1,0,unknown,yes +38,admin.,married,secondary,no,755,yes,no,cellular,17,feb,120,1,-1,0,unknown,yes +71,retired,married,secondary,no,2850,no,no,cellular,17,feb,185,1,-1,0,unknown,yes +29,services,married,secondary,no,1135,yes,no,cellular,17,feb,323,1,-1,0,unknown,yes +61,retired,married,primary,no,197,no,no,cellular,17,feb,113,1,-1,0,unknown,yes +57,retired,divorced,primary,no,720,no,no,telephone,17,feb,202,4,-1,0,unknown,yes +37,management,married,tertiary,no,5355,no,no,telephone,17,feb,466,4,-1,0,unknown,yes +68,retired,married,secondary,no,445,no,no,cellular,18,feb,475,1,-1,0,unknown,yes +29,management,single,tertiary,no,5359,no,no,cellular,18,feb,147,1,-1,0,unknown,yes +51,entrepreneur,married,primary,no,1443,no,no,cellular,18,feb,172,10,-1,0,unknown,yes +41,technician,divorced,secondary,no,4047,yes,no,cellular,18,feb,343,1,-1,0,unknown,yes +24,student,single,secondary,no,23878,no,no,cellular,18,feb,185,1,-1,0,unknown,yes +24,blue-collar,single,secondary,no,167,no,yes,cellular,18,feb,134,2,-1,0,unknown,yes +59,unemployed,married,secondary,no,1047,no,no,cellular,18,feb,83,3,-1,0,unknown,yes +85,retired,divorced,primary,no,7613,no,no,cellular,18,feb,355,3,-1,0,unknown,yes +51,technician,married,secondary,no,117,no,no,cellular,18,feb,442,2,-1,0,unknown,yes +39,technician,married,secondary,no,2266,no,no,cellular,18,feb,208,4,-1,0,unknown,yes +44,management,married,primary,no,558,no,no,cellular,19,feb,268,5,-1,0,unknown,yes +26,admin.,single,secondary,no,2509,no,no,cellular,19,feb,654,3,-1,0,unknown,yes +48,management,married,tertiary,no,1808,yes,no,cellular,26,feb,245,1,-1,0,unknown,yes +37,technician,single,secondary,no,1130,no,no,cellular,26,feb,152,1,-1,0,unknown,yes +71,retired,married,tertiary,no,653,no,no,telephone,26,feb,367,1,-1,0,unknown,yes +62,housemaid,married,unknown,no,2021,no,no,telephone,26,feb,361,1,-1,0,unknown,yes +26,admin.,single,tertiary,no,313,no,yes,cellular,26,feb,210,2,-1,0,unknown,yes +43,unemployed,single,tertiary,no,983,yes,no,cellular,26,feb,97,1,-1,0,unknown,yes +30,management,single,tertiary,no,5561,yes,no,cellular,27,feb,195,1,100,1,success,yes +50,management,married,unknown,no,8345,no,no,cellular,27,feb,194,1,261,1,failure,yes +25,technician,single,secondary,no,1231,yes,no,cellular,27,feb,412,5,-1,0,unknown,yes +25,admin.,single,tertiary,no,3730,yes,no,cellular,27,feb,353,1,-1,0,unknown,yes +31,management,single,tertiary,no,924,no,no,cellular,27,feb,172,1,-1,0,unknown,yes +28,technician,single,tertiary,no,2489,yes,no,telephone,27,feb,342,2,-1,0,unknown,yes +66,retired,married,secondary,no,995,no,no,cellular,27,feb,131,2,-1,0,unknown,yes +41,management,married,secondary,no,280,yes,no,cellular,27,feb,87,2,-1,0,unknown,yes +46,technician,married,secondary,no,3434,no,yes,cellular,27,feb,115,1,-1,0,unknown,yes +42,unemployed,married,tertiary,no,576,no,no,cellular,27,feb,156,1,-1,0,unknown,yes +28,technician,single,secondary,no,1363,no,no,cellular,27,feb,79,1,-1,0,unknown,yes +39,blue-collar,single,primary,no,581,yes,no,cellular,27,feb,233,1,270,1,other,yes +42,services,married,secondary,no,1376,yes,no,cellular,2,mar,712,4,-1,0,unknown,yes +35,services,married,secondary,no,52,yes,no,cellular,2,mar,378,4,-1,0,unknown,yes +55,technician,married,secondary,no,0,yes,yes,cellular,2,mar,116,1,-1,0,unknown,yes +37,technician,married,tertiary,no,549,no,no,cellular,2,mar,239,1,-1,0,unknown,yes +29,management,single,tertiary,no,92,no,no,cellular,2,mar,175,5,-1,0,unknown,yes +49,management,married,tertiary,no,2881,no,no,cellular,2,mar,120,3,-1,0,unknown,yes +44,technician,single,secondary,no,250,no,no,telephone,2,mar,382,2,-1,0,unknown,yes +54,admin.,married,secondary,no,602,no,no,cellular,3,mar,143,2,-1,0,unknown,yes +28,management,single,tertiary,no,730,yes,no,cellular,3,mar,631,1,-1,0,unknown,yes +30,admin.,single,secondary,no,523,no,yes,cellular,3,mar,83,1,-1,0,unknown,yes +47,technician,married,secondary,no,293,no,no,cellular,3,mar,499,1,-1,0,unknown,yes +34,blue-collar,single,secondary,no,215,no,no,cellular,3,mar,350,3,-1,0,unknown,yes +37,unknown,single,tertiary,no,0,no,no,cellular,3,mar,426,1,-1,0,unknown,yes +25,self-employed,single,tertiary,no,42,yes,no,cellular,3,mar,320,1,-1,0,unknown,yes +29,technician,single,secondary,no,316,yes,no,cellular,3,mar,156,1,-1,0,unknown,yes +62,management,married,secondary,no,4562,yes,no,cellular,3,mar,168,1,-1,0,unknown,yes +58,management,divorced,secondary,no,10180,no,no,cellular,3,mar,180,2,-1,0,unknown,yes +46,management,married,tertiary,no,0,no,no,cellular,3,mar,305,13,-1,0,unknown,yes +56,retired,married,tertiary,no,281,no,no,cellular,3,mar,96,2,-1,0,unknown,yes +33,management,married,tertiary,no,250,no,no,cellular,4,mar,377,6,-1,0,unknown,yes +27,student,single,tertiary,no,0,no,no,cellular,5,mar,82,3,-1,0,unknown,yes +60,retired,married,secondary,no,404,no,no,cellular,5,mar,308,2,196,2,failure,yes +32,management,single,tertiary,no,506,no,no,cellular,5,mar,63,2,-1,0,unknown,yes +83,retired,divorced,primary,no,1097,no,no,telephone,5,mar,181,1,-1,0,unknown,yes +35,self-employed,married,tertiary,no,3698,yes,no,cellular,5,mar,106,1,-1,0,unknown,yes +31,management,divorced,tertiary,no,883,yes,no,cellular,5,mar,112,2,106,1,failure,yes +30,student,single,tertiary,no,2539,no,no,telephone,5,mar,199,5,-1,0,unknown,yes +29,technician,married,secondary,no,2326,no,no,cellular,6,mar,195,1,-1,0,unknown,yes +36,management,single,tertiary,no,811,no,no,cellular,6,mar,229,1,-1,0,unknown,yes +57,management,married,tertiary,no,256,no,no,cellular,6,mar,227,1,-1,0,unknown,yes +21,blue-collar,single,secondary,no,682,no,no,cellular,6,mar,266,1,-1,0,unknown,yes +44,management,single,tertiary,no,483,no,no,cellular,6,mar,207,2,199,6,success,yes +23,management,single,tertiary,no,1506,no,no,cellular,9,mar,131,4,-1,0,unknown,yes +34,management,single,tertiary,no,575,no,no,cellular,9,mar,116,1,-1,0,unknown,yes +32,self-employed,married,secondary,no,409,no,no,cellular,9,mar,217,2,-1,0,unknown,yes +37,unemployed,single,tertiary,no,1316,yes,no,cellular,10,mar,350,2,112,3,failure,yes +35,management,single,tertiary,no,671,yes,no,cellular,10,mar,112,1,-1,0,unknown,yes +47,management,married,tertiary,no,2351,no,no,cellular,10,mar,80,1,-1,0,unknown,yes +61,management,married,tertiary,no,997,no,no,cellular,10,mar,106,1,-1,0,unknown,yes +30,management,single,tertiary,no,4808,no,no,cellular,10,mar,272,1,-1,0,unknown,yes +70,retired,married,secondary,no,6422,no,no,cellular,10,mar,122,1,-1,0,unknown,yes +52,management,married,tertiary,no,31,no,no,cellular,10,mar,135,1,-1,0,unknown,yes +28,management,single,secondary,no,171,no,no,cellular,10,mar,93,1,-1,0,unknown,yes +57,management,married,tertiary,no,2681,no,no,cellular,11,mar,266,2,-1,0,unknown,yes +24,admin.,single,tertiary,no,-61,no,no,cellular,11,mar,95,4,-1,0,unknown,yes +32,management,married,tertiary,no,8929,no,no,cellular,11,mar,126,1,-1,0,unknown,yes +65,housemaid,married,primary,no,715,no,no,cellular,11,mar,323,1,-1,0,unknown,yes +44,management,married,tertiary,no,1058,no,no,cellular,11,mar,188,3,-1,0,unknown,yes +32,entrepreneur,single,tertiary,no,-34,yes,no,cellular,11,mar,101,1,-1,0,unknown,yes +33,technician,single,tertiary,no,258,no,no,cellular,12,mar,80,4,-1,0,unknown,yes +53,services,divorced,secondary,no,0,no,no,cellular,12,mar,80,2,-1,0,unknown,yes +31,management,divorced,tertiary,no,71,no,no,cellular,12,mar,119,1,-1,0,unknown,yes +58,self-employed,married,tertiary,no,5810,no,no,cellular,12,mar,139,1,-1,0,unknown,yes +30,management,single,tertiary,no,3473,no,no,cellular,12,mar,1209,2,-1,0,unknown,yes +47,blue-collar,married,secondary,no,238,yes,yes,cellular,13,mar,3076,1,-1,0,unknown,yes +60,technician,married,secondary,no,1740,no,no,cellular,13,mar,296,2,-1,0,unknown,yes +36,entrepreneur,divorced,tertiary,no,3407,no,no,cellular,16,mar,392,4,-1,0,unknown,yes +37,services,single,secondary,no,1045,no,no,cellular,17,mar,406,2,41,1,failure,yes +43,admin.,married,secondary,no,132,no,no,cellular,17,mar,220,1,-1,0,unknown,yes +37,admin.,single,tertiary,no,1000,yes,no,cellular,17,mar,195,1,-1,0,unknown,yes +31,management,single,tertiary,no,115,no,no,cellular,17,mar,187,1,-1,0,unknown,yes +31,technician,married,secondary,no,180,no,no,cellular,17,mar,299,2,-1,0,unknown,yes +30,management,single,tertiary,no,201,yes,no,cellular,17,mar,325,2,-1,0,unknown,yes +30,management,married,tertiary,no,8089,yes,no,cellular,18,mar,232,2,294,2,failure,yes +32,admin.,single,tertiary,no,8866,no,no,cellular,18,mar,278,2,-1,0,unknown,yes +35,admin.,married,secondary,no,2,yes,no,cellular,18,mar,194,1,-1,0,unknown,yes +59,technician,married,secondary,no,259,no,no,cellular,18,mar,224,1,-1,0,unknown,yes +33,housemaid,single,tertiary,no,1107,yes,no,cellular,18,mar,201,1,-1,0,unknown,yes +37,management,single,tertiary,no,1730,no,no,cellular,19,mar,167,1,-1,0,unknown,yes +31,services,married,secondary,no,447,no,no,cellular,19,mar,220,3,-1,0,unknown,yes +26,management,single,tertiary,no,2786,no,no,cellular,23,mar,415,1,-1,0,unknown,yes +53,technician,married,secondary,no,10185,no,no,cellular,23,mar,115,1,-1,0,unknown,yes +34,unemployed,married,secondary,no,978,no,no,cellular,24,mar,132,1,-1,0,unknown,yes +46,management,divorced,tertiary,no,-130,yes,no,cellular,24,mar,144,2,-1,0,unknown,yes +76,retired,divorced,primary,no,3049,no,no,cellular,24,mar,170,3,-1,0,unknown,yes +46,management,married,tertiary,no,11385,no,no,cellular,24,mar,269,3,-1,0,unknown,yes +83,retired,divorced,primary,no,46,no,no,cellular,25,mar,115,1,-1,0,unknown,yes +23,student,single,secondary,no,4126,no,no,cellular,25,mar,96,2,-1,0,unknown,yes +34,management,single,tertiary,no,212,no,no,cellular,25,mar,278,8,-1,0,unknown,yes +24,student,single,secondary,no,1250,no,no,cellular,25,mar,411,2,-1,0,unknown,yes +41,management,divorced,tertiary,no,25,yes,yes,cellular,26,mar,117,2,-1,0,unknown,yes +28,admin.,single,secondary,no,1277,no,no,cellular,26,mar,475,1,-1,0,unknown,yes +34,technician,married,secondary,no,390,yes,no,cellular,27,mar,95,2,231,2,failure,yes +77,retired,married,secondary,no,9601,no,no,telephone,27,mar,515,1,-1,0,unknown,yes +36,management,married,secondary,no,565,no,no,cellular,27,mar,300,1,-1,0,unknown,yes +58,management,married,tertiary,no,1384,yes,no,cellular,27,mar,342,1,-1,0,unknown,yes +46,admin.,married,secondary,no,-522,yes,no,cellular,27,mar,243,3,239,13,other,yes +59,retired,married,tertiary,no,9676,no,no,telephone,27,mar,234,2,-1,0,unknown,yes +19,student,single,primary,no,134,no,no,cellular,27,mar,271,2,-1,0,unknown,yes +23,management,single,tertiary,no,2143,no,no,cellular,30,mar,180,2,-1,0,unknown,yes +27,management,single,tertiary,no,831,no,no,cellular,30,mar,1081,2,-1,0,unknown,yes +73,retired,divorced,primary,no,2308,no,no,telephone,30,mar,163,2,-1,0,unknown,yes +41,management,married,tertiary,no,1468,yes,no,cellular,31,mar,237,3,-1,0,unknown,yes +30,admin.,single,tertiary,no,311,no,no,cellular,31,mar,158,2,-1,0,unknown,yes +26,admin.,single,secondary,no,274,no,no,cellular,1,apr,351,3,-1,0,unknown,yes +38,blue-collar,single,tertiary,no,172,yes,no,cellular,1,apr,1176,1,-1,0,unknown,yes +46,management,divorced,tertiary,no,507,yes,no,cellular,1,apr,1196,1,-1,0,unknown,yes +27,technician,single,tertiary,no,393,no,no,cellular,1,apr,165,2,-1,0,unknown,yes +63,self-employed,married,tertiary,no,-39,no,no,cellular,1,apr,387,2,-1,0,unknown,yes +34,admin.,married,secondary,no,1474,no,no,cellular,2,apr,739,2,-1,0,unknown,yes +32,admin.,single,secondary,no,471,no,yes,cellular,2,apr,243,3,-1,0,unknown,yes +33,management,single,tertiary,no,3161,yes,no,cellular,2,apr,313,3,-1,0,unknown,yes +47,blue-collar,married,secondary,no,1612,yes,no,cellular,2,apr,1164,1,-1,0,unknown,yes +48,admin.,divorced,secondary,no,4099,no,no,cellular,2,apr,397,2,-1,0,unknown,yes +58,unknown,married,unknown,no,68,no,no,cellular,2,apr,268,1,-1,0,unknown,yes +50,management,married,tertiary,no,414,yes,no,cellular,3,apr,707,1,302,3,failure,yes +26,blue-collar,single,secondary,no,5005,no,yes,cellular,3,apr,117,1,-1,0,unknown,yes +39,blue-collar,married,secondary,no,1756,yes,no,cellular,3,apr,939,1,-1,0,unknown,yes +55,blue-collar,divorced,secondary,no,1613,yes,no,cellular,3,apr,296,1,270,3,failure,yes +41,self-employed,married,secondary,no,3123,yes,no,cellular,3,apr,1203,2,135,2,failure,yes +54,entrepreneur,divorced,unknown,no,4736,yes,no,telephone,6,apr,475,6,307,5,failure,yes +33,technician,single,tertiary,no,127,yes,no,cellular,6,apr,583,2,222,17,failure,yes +42,management,single,tertiary,no,11891,no,no,cellular,6,apr,158,1,-1,0,unknown,yes +50,blue-collar,married,primary,no,4979,no,no,telephone,6,apr,180,1,-1,0,unknown,yes +40,management,married,secondary,no,754,no,yes,cellular,6,apr,635,1,-1,0,unknown,yes +37,admin.,married,secondary,no,1207,yes,no,telephone,6,apr,1353,2,138,2,success,yes +44,blue-collar,single,secondary,no,712,yes,yes,cellular,6,apr,740,3,-1,0,unknown,yes +30,blue-collar,single,tertiary,no,297,no,no,cellular,7,apr,465,4,-1,0,unknown,yes +26,self-employed,single,secondary,no,3676,no,no,cellular,7,apr,148,1,-1,0,unknown,yes +47,unemployed,married,secondary,no,817,no,no,cellular,7,apr,721,4,-1,0,unknown,yes +46,blue-collar,single,tertiary,no,283,no,no,cellular,7,apr,299,1,-1,0,unknown,yes +25,admin.,single,secondary,no,82,no,yes,cellular,7,apr,104,2,-1,0,unknown,yes +56,technician,married,secondary,no,2847,no,no,cellular,8,apr,327,1,-1,0,unknown,yes +36,blue-collar,single,secondary,no,1822,yes,no,cellular,8,apr,952,1,323,1,other,yes +35,technician,single,secondary,no,16,yes,no,cellular,8,apr,903,1,-1,0,unknown,yes +54,unemployed,married,secondary,no,377,no,no,cellular,8,apr,1134,1,-1,0,unknown,yes +48,management,married,secondary,no,4415,yes,no,cellular,8,apr,1032,3,141,7,failure,yes +32,technician,married,secondary,no,303,yes,no,cellular,8,apr,150,1,267,4,failure,yes +60,admin.,divorced,secondary,no,12039,no,no,telephone,8,apr,236,1,-1,0,unknown,yes +67,retired,married,secondary,no,1443,no,no,cellular,8,apr,245,1,-1,0,unknown,yes +32,management,single,tertiary,no,1781,no,no,cellular,8,apr,321,1,-1,0,unknown,yes +26,admin.,married,secondary,no,3415,no,no,cellular,8,apr,209,1,-1,0,unknown,yes +33,management,single,tertiary,no,318,yes,no,cellular,8,apr,1190,1,141,3,other,yes +21,student,single,primary,no,423,no,no,cellular,8,apr,104,5,-1,0,unknown,yes +30,technician,single,secondary,no,2544,no,no,cellular,8,apr,108,2,-1,0,unknown,yes +27,student,single,secondary,no,2614,no,no,cellular,8,apr,143,2,-1,0,unknown,yes +30,services,single,secondary,no,1268,yes,no,cellular,8,apr,105,4,320,8,other,yes +36,blue-collar,married,secondary,no,536,yes,no,cellular,8,apr,274,3,-1,0,unknown,yes +27,admin.,married,secondary,no,1293,yes,no,cellular,8,apr,1665,3,-1,0,unknown,yes +29,management,single,tertiary,no,1377,no,no,cellular,8,apr,548,2,-1,0,unknown,yes +38,blue-collar,single,secondary,no,2580,yes,no,cellular,8,apr,1691,2,264,3,failure,yes +23,admin.,single,tertiary,no,314,no,yes,cellular,8,apr,142,4,-1,0,unknown,yes +38,technician,married,tertiary,no,206,no,no,cellular,8,apr,350,2,-1,0,unknown,yes +30,technician,single,secondary,no,3286,yes,no,cellular,9,apr,743,1,-1,0,unknown,yes +41,services,married,secondary,no,803,yes,no,cellular,9,apr,592,4,316,3,failure,yes +33,technician,single,secondary,no,719,yes,no,cellular,9,apr,448,2,316,6,failure,yes +35,admin.,married,secondary,no,898,yes,no,cellular,9,apr,214,1,-1,0,unknown,yes +29,admin.,married,tertiary,no,332,no,no,cellular,9,apr,179,1,-1,0,unknown,yes +68,retired,divorced,primary,no,695,no,no,cellular,9,apr,233,1,-1,0,unknown,yes +20,student,single,secondary,no,1819,no,no,cellular,9,apr,245,3,-1,0,unknown,yes +30,management,single,tertiary,no,2544,no,no,cellular,9,apr,152,2,-1,0,unknown,yes +32,blue-collar,married,secondary,no,759,yes,no,cellular,9,apr,317,5,-1,0,unknown,yes +28,management,divorced,tertiary,no,229,yes,no,cellular,9,apr,1042,2,315,2,other,yes +45,blue-collar,married,secondary,no,96,yes,no,cellular,13,apr,348,3,256,2,failure,yes +29,technician,single,secondary,no,110,yes,no,cellular,13,apr,1036,1,-1,0,unknown,yes +31,blue-collar,married,secondary,no,1406,yes,yes,cellular,13,apr,1091,2,-1,0,unknown,yes +39,services,divorced,secondary,no,0,yes,no,cellular,13,apr,1006,2,-1,0,unknown,yes +42,blue-collar,married,primary,no,2103,yes,no,cellular,13,apr,384,2,-1,0,unknown,yes +35,management,single,tertiary,no,1599,yes,yes,cellular,13,apr,407,1,-1,0,unknown,yes +34,technician,single,tertiary,no,925,yes,no,cellular,13,apr,709,1,-1,0,unknown,yes +26,management,single,tertiary,no,-3,no,no,cellular,13,apr,1022,2,-1,0,unknown,yes +29,services,divorced,secondary,no,84,yes,no,cellular,13,apr,1101,2,-1,0,unknown,yes +44,self-employed,single,tertiary,no,1367,yes,no,cellular,13,apr,1232,3,146,1,other,yes +34,management,married,tertiary,no,703,yes,no,cellular,14,apr,342,1,-1,0,unknown,yes +33,management,married,tertiary,no,0,yes,no,cellular,14,apr,535,3,328,1,failure,yes +34,management,single,tertiary,no,2646,no,no,cellular,14,apr,142,1,-1,0,unknown,yes +33,admin.,single,secondary,no,572,yes,no,cellular,14,apr,344,1,74,2,failure,yes +22,student,single,secondary,no,107,no,no,cellular,14,apr,125,1,-1,0,unknown,yes +32,technician,married,secondary,no,765,yes,yes,cellular,14,apr,850,2,-1,0,unknown,yes +36,services,single,secondary,no,-253,yes,no,cellular,14,apr,1073,1,-1,0,unknown,yes +44,admin.,divorced,secondary,no,0,no,no,cellular,14,apr,1594,1,148,1,failure,yes +65,retired,married,secondary,no,2,no,no,cellular,14,apr,450,1,-1,0,unknown,yes +61,self-employed,divorced,tertiary,no,6,yes,no,cellular,14,apr,133,2,-1,0,unknown,yes +41,housemaid,married,primary,no,0,no,no,cellular,14,apr,168,1,-1,0,unknown,yes +24,management,married,unknown,no,448,no,no,cellular,14,apr,324,1,-1,0,unknown,yes +77,retired,divorced,tertiary,no,4659,no,no,cellular,14,apr,161,1,-1,0,unknown,yes +62,housemaid,married,tertiary,no,1528,no,no,cellular,14,apr,496,1,-1,0,unknown,yes +30,unemployed,married,tertiary,no,330,no,no,cellular,14,apr,111,1,-1,0,unknown,yes +29,admin.,single,secondary,no,731,no,no,cellular,14,apr,107,3,-1,0,unknown,yes +29,unemployed,single,secondary,no,25,no,no,cellular,14,apr,207,2,-1,0,unknown,yes +65,management,married,secondary,no,587,no,no,cellular,15,apr,223,2,-1,0,unknown,yes +43,services,married,primary,no,2557,yes,no,telephone,15,apr,165,2,327,3,failure,yes +70,retired,divorced,primary,no,275,no,no,cellular,15,apr,82,1,-1,0,unknown,yes +32,services,married,secondary,no,1129,yes,no,cellular,15,apr,903,2,341,2,failure,yes +46,technician,married,secondary,no,2149,yes,no,cellular,15,apr,282,2,-1,0,unknown,yes +33,admin.,married,secondary,no,855,no,no,cellular,15,apr,110,1,-1,0,unknown,yes +57,services,married,primary,no,491,yes,no,cellular,15,apr,1217,3,-1,0,unknown,yes +62,blue-collar,married,secondary,no,180,no,no,cellular,15,apr,389,2,-1,0,unknown,yes +32,services,single,secondary,no,133,no,no,cellular,15,apr,171,1,-1,0,unknown,yes +39,blue-collar,single,secondary,no,649,yes,no,cellular,15,apr,668,1,-1,0,unknown,yes +76,housemaid,divorced,primary,no,1411,no,no,telephone,15,apr,170,3,-1,0,unknown,yes +36,admin.,single,secondary,no,11174,yes,no,cellular,15,apr,953,1,-1,0,unknown,yes +27,technician,single,secondary,no,439,yes,no,cellular,15,apr,1038,2,-1,0,unknown,yes +38,management,single,tertiary,no,6158,yes,no,cellular,15,apr,139,5,145,9,failure,yes +56,blue-collar,married,primary,no,3498,no,no,cellular,15,apr,264,2,-1,0,unknown,yes +51,unemployed,married,tertiary,no,1801,no,no,cellular,16,apr,838,3,-1,0,unknown,yes +39,management,married,tertiary,no,937,no,no,cellular,16,apr,144,4,-1,0,unknown,yes +35,management,divorced,tertiary,no,26,no,no,cellular,16,apr,78,2,-1,0,unknown,yes +32,blue-collar,married,secondary,yes,-53,yes,no,cellular,16,apr,648,1,272,1,other,yes +51,housemaid,married,unknown,no,2337,yes,no,cellular,16,apr,251,2,266,3,other,yes +37,technician,married,secondary,no,1762,no,no,cellular,16,apr,334,2,-1,0,unknown,yes +52,entrepreneur,single,tertiary,no,3469,yes,no,cellular,16,apr,583,1,147,1,success,yes +35,technician,married,secondary,no,545,yes,no,cellular,16,apr,1579,1,234,4,failure,yes +47,admin.,married,secondary,no,3480,no,no,cellular,16,apr,443,1,-1,0,unknown,yes +31,technician,married,secondary,no,183,no,no,cellular,16,apr,495,1,-1,0,unknown,yes +49,services,married,secondary,no,2416,yes,no,cellular,16,apr,1366,1,-1,0,unknown,yes +30,management,single,tertiary,no,424,no,no,cellular,16,apr,298,4,-1,0,unknown,yes +35,blue-collar,single,secondary,no,0,yes,no,cellular,16,apr,1174,1,345,4,other,yes +44,management,married,primary,no,294,no,no,cellular,16,apr,165,3,-1,0,unknown,yes +42,blue-collar,married,secondary,no,1598,yes,yes,cellular,16,apr,1463,2,-1,0,unknown,yes +29,management,single,tertiary,no,268,no,no,cellular,16,apr,667,1,-1,0,unknown,yes +42,technician,divorced,secondary,no,214,no,no,cellular,16,apr,127,1,-1,0,unknown,yes +43,management,married,tertiary,no,240,yes,no,cellular,16,apr,453,1,-1,0,unknown,yes +36,technician,single,secondary,no,2511,yes,no,cellular,16,apr,700,5,-1,0,unknown,yes +36,technician,married,tertiary,no,4596,yes,no,cellular,16,apr,901,2,-1,0,unknown,yes +32,services,married,secondary,no,1273,yes,no,cellular,16,apr,1365,2,328,1,failure,yes +54,technician,married,secondary,no,3994,no,yes,cellular,16,apr,299,2,-1,0,unknown,yes +50,management,married,tertiary,no,469,no,no,cellular,16,apr,161,1,-1,0,unknown,yes +32,technician,single,tertiary,no,932,yes,no,cellular,16,apr,944,1,318,1,failure,yes +28,student,single,tertiary,no,844,no,no,cellular,16,apr,551,2,-1,0,unknown,yes +40,services,divorced,primary,no,471,yes,no,cellular,16,apr,1156,1,345,2,failure,yes +34,admin.,single,secondary,no,63,yes,no,cellular,17,apr,678,1,-1,0,unknown,yes +52,retired,divorced,primary,no,-779,yes,yes,cellular,17,apr,709,1,-1,0,unknown,yes +35,blue-collar,married,secondary,no,293,yes,no,cellular,17,apr,1017,1,325,1,other,yes +32,management,divorced,tertiary,no,294,yes,no,cellular,17,apr,1095,1,274,5,success,yes +60,management,married,tertiary,no,13546,no,no,cellular,17,apr,452,3,-1,0,unknown,yes +34,blue-collar,married,primary,no,329,yes,no,cellular,17,apr,952,1,343,1,failure,yes +30,admin.,single,secondary,no,69,yes,no,cellular,17,apr,997,1,-1,0,unknown,yes +39,self-employed,married,tertiary,no,-3058,yes,yes,cellular,17,apr,882,3,-1,0,unknown,yes +40,services,single,secondary,no,224,yes,no,cellular,17,apr,875,2,-1,0,unknown,yes +38,management,married,tertiary,no,165,yes,no,cellular,17,apr,526,1,260,2,other,yes +35,management,single,tertiary,no,397,yes,no,cellular,17,apr,594,1,-1,0,unknown,yes +37,blue-collar,married,primary,no,3154,yes,no,cellular,17,apr,404,1,305,3,failure,yes +29,technician,married,secondary,no,1180,yes,no,cellular,17,apr,367,3,323,3,failure,yes +36,technician,single,secondary,yes,-487,yes,no,cellular,17,apr,1080,1,-1,0,unknown,yes +34,management,married,secondary,yes,879,yes,no,cellular,17,apr,712,1,344,1,failure,yes +33,technician,married,secondary,no,806,no,no,cellular,17,apr,108,1,-1,0,unknown,yes +29,technician,single,secondary,no,674,no,no,cellular,17,apr,170,5,-1,0,unknown,yes +33,management,married,tertiary,no,0,yes,no,cellular,17,apr,378,1,-1,0,unknown,yes +41,self-employed,married,secondary,no,323,yes,no,cellular,17,apr,949,2,254,6,other,yes +74,retired,married,secondary,no,921,no,no,telephone,17,apr,394,2,-1,0,unknown,yes +53,technician,married,secondary,no,5303,yes,no,telephone,17,apr,320,3,180,1,success,yes +38,admin.,married,secondary,no,0,yes,yes,cellular,17,apr,547,2,-1,0,unknown,yes +41,technician,married,secondary,no,4004,no,no,cellular,17,apr,314,2,-1,0,unknown,yes +52,technician,married,secondary,no,386,no,no,cellular,20,apr,438,1,-1,0,unknown,yes +40,technician,married,primary,no,284,yes,no,cellular,20,apr,1332,2,-1,0,unknown,yes +32,entrepreneur,married,secondary,no,-242,yes,no,cellular,20,apr,1202,3,-1,0,unknown,yes +28,technician,married,secondary,no,1086,yes,no,cellular,20,apr,1112,3,-1,0,unknown,yes +28,management,single,secondary,no,2840,no,no,cellular,20,apr,227,5,-1,0,unknown,yes +35,management,married,tertiary,no,43,yes,no,cellular,20,apr,860,1,-1,0,unknown,yes +46,management,married,primary,no,3229,yes,no,cellular,20,apr,1550,1,-1,0,unknown,yes +50,unknown,married,primary,no,341,yes,yes,cellular,20,apr,670,4,340,2,success,yes +44,blue-collar,single,secondary,no,0,no,no,cellular,20,apr,133,1,-1,0,unknown,yes +29,blue-collar,divorced,secondary,no,-19,yes,no,cellular,20,apr,712,4,-1,0,unknown,yes +61,retired,married,secondary,no,243,no,no,cellular,20,apr,194,1,-1,0,unknown,yes +70,retired,married,secondary,no,2575,no,no,telephone,20,apr,216,2,-1,0,unknown,yes +44,blue-collar,married,secondary,yes,105,yes,no,cellular,20,apr,586,1,-1,0,unknown,yes +59,management,married,tertiary,no,0,yes,yes,cellular,20,apr,392,1,-1,0,unknown,yes +45,blue-collar,married,primary,yes,-443,yes,yes,cellular,20,apr,691,1,-1,0,unknown,yes +39,technician,married,tertiary,no,1524,no,no,cellular,20,apr,567,1,-1,0,unknown,yes +36,blue-collar,married,primary,no,1925,yes,no,cellular,20,apr,904,2,-1,0,unknown,yes +78,retired,married,primary,no,240,no,no,cellular,20,apr,325,1,-1,0,unknown,yes +28,technician,single,tertiary,no,387,yes,no,cellular,20,apr,205,1,82,1,failure,yes +50,self-employed,divorced,tertiary,no,13,yes,no,cellular,20,apr,76,1,-1,0,unknown,yes +73,retired,divorced,tertiary,no,3203,no,no,cellular,20,apr,148,1,-1,0,unknown,yes +34,management,married,tertiary,no,606,no,no,cellular,20,apr,97,1,-1,0,unknown,yes +28,student,single,secondary,no,0,no,no,cellular,20,apr,185,1,-1,0,unknown,yes +42,admin.,divorced,secondary,no,527,no,yes,cellular,20,apr,112,1,-1,0,unknown,yes +54,unemployed,divorced,secondary,no,309,no,no,cellular,20,apr,241,1,-1,0,unknown,yes +27,blue-collar,married,secondary,no,4333,no,no,cellular,20,apr,163,1,-1,0,unknown,yes +73,retired,married,primary,no,253,no,no,cellular,20,apr,345,1,-1,0,unknown,yes +33,management,single,tertiary,no,6807,no,no,cellular,20,apr,163,1,-1,0,unknown,yes +51,entrepreneur,married,tertiary,no,83,no,no,cellular,20,apr,267,2,-1,0,unknown,yes +32,management,single,tertiary,no,819,yes,no,cellular,20,apr,114,2,-1,0,unknown,yes +33,technician,married,secondary,no,1968,yes,no,cellular,20,apr,1817,3,-1,0,unknown,yes +26,services,single,secondary,no,136,no,no,cellular,20,apr,120,1,-1,0,unknown,yes +32,technician,single,secondary,no,1995,yes,no,cellular,20,apr,121,1,-1,0,unknown,yes +41,blue-collar,divorced,primary,no,285,yes,no,cellular,20,apr,1272,2,-1,0,unknown,yes +39,blue-collar,married,unknown,no,621,yes,no,cellular,20,apr,1333,5,-1,0,unknown,yes +24,student,single,secondary,no,597,yes,no,cellular,20,apr,943,3,-1,0,unknown,yes +37,blue-collar,divorced,secondary,no,0,yes,no,cellular,21,apr,146,4,-1,0,unknown,yes +35,management,single,tertiary,no,1750,yes,no,cellular,21,apr,333,3,-1,0,unknown,yes +26,student,single,tertiary,no,10086,no,no,cellular,21,apr,110,2,-1,0,unknown,yes +29,technician,single,secondary,no,3466,no,no,cellular,21,apr,274,1,-1,0,unknown,yes +63,retired,married,unknown,no,2193,no,no,telephone,21,apr,1348,4,-1,0,unknown,yes +95,retired,divorced,primary,no,2282,no,no,telephone,21,apr,207,17,-1,0,unknown,yes +65,retired,married,tertiary,no,1973,no,no,telephone,21,apr,396,3,-1,0,unknown,yes +59,technician,married,secondary,no,10925,no,no,cellular,21,apr,100,1,-1,0,unknown,yes +35,management,single,tertiary,no,704,no,no,cellular,21,apr,164,1,-1,0,unknown,yes +74,retired,married,secondary,no,9480,no,no,cellular,21,apr,211,1,-1,0,unknown,yes +56,unemployed,married,primary,no,3391,no,no,cellular,21,apr,243,1,-1,0,unknown,yes +26,student,single,tertiary,no,1134,no,no,cellular,21,apr,464,4,-1,0,unknown,yes +30,blue-collar,single,unknown,no,6281,no,no,cellular,21,apr,149,2,-1,0,unknown,yes +29,self-employed,married,secondary,no,123,no,yes,cellular,21,apr,158,2,181,1,success,yes +78,retired,married,primary,no,8556,no,no,telephone,21,apr,137,2,-1,0,unknown,yes +45,unknown,divorced,unknown,no,0,no,no,cellular,21,apr,278,3,-1,0,unknown,yes +29,blue-collar,single,secondary,no,2,yes,yes,cellular,21,apr,379,5,-1,0,unknown,yes +39,admin.,married,tertiary,no,1108,no,no,cellular,21,apr,204,1,-1,0,unknown,yes +45,management,married,tertiary,no,212,no,no,cellular,21,apr,65,2,-1,0,unknown,yes +45,technician,married,tertiary,no,5110,no,no,cellular,22,apr,341,2,-1,0,unknown,yes +36,student,single,secondary,no,17,no,no,cellular,22,apr,621,1,-1,0,unknown,yes +41,unknown,single,unknown,no,942,no,no,cellular,22,apr,219,1,-1,0,unknown,yes +38,technician,married,secondary,no,0,yes,no,cellular,22,apr,315,1,-1,0,unknown,yes +33,admin.,married,tertiary,no,882,no,no,cellular,22,apr,104,1,183,4,failure,yes +30,services,married,tertiary,no,81,no,no,cellular,22,apr,145,1,-1,0,unknown,yes +65,retired,married,primary,no,276,no,no,cellular,22,apr,229,1,-1,0,unknown,yes +75,retired,married,tertiary,no,2991,no,no,cellular,22,apr,240,1,-1,0,unknown,yes +65,management,divorced,tertiary,no,90,yes,no,cellular,22,apr,416,1,-1,0,unknown,yes +53,management,married,tertiary,no,3754,no,no,cellular,22,apr,307,1,278,2,failure,yes +40,management,married,primary,no,395,yes,no,cellular,22,apr,232,4,-1,0,unknown,yes +31,admin.,single,tertiary,no,676,yes,no,cellular,22,apr,124,2,343,2,other,yes +25,student,single,secondary,no,8,no,no,cellular,22,apr,107,2,-1,0,unknown,yes +37,technician,married,secondary,no,0,yes,no,cellular,22,apr,1288,3,-1,0,unknown,yes +32,management,single,tertiary,no,2069,no,no,cellular,22,apr,545,1,-1,0,unknown,yes +45,management,married,tertiary,no,506,no,no,cellular,23,apr,229,2,-1,0,unknown,yes +35,management,married,tertiary,no,8,no,no,cellular,23,apr,93,3,-1,0,unknown,yes +74,retired,married,primary,no,670,no,no,cellular,23,apr,266,5,-1,0,unknown,yes +37,management,married,tertiary,no,0,yes,no,cellular,23,apr,242,5,153,7,failure,yes +59,blue-collar,married,primary,no,1939,no,no,cellular,23,apr,172,1,-1,0,unknown,yes +76,management,married,unknown,no,1780,yes,no,telephone,23,apr,413,3,-1,0,unknown,yes +25,blue-collar,single,secondary,no,0,no,no,cellular,23,apr,163,1,-1,0,unknown,yes +27,services,single,secondary,no,955,no,no,cellular,23,apr,206,1,-1,0,unknown,yes +39,admin.,married,secondary,no,732,no,no,cellular,23,apr,522,4,-1,0,unknown,yes +24,services,single,unknown,no,2022,no,no,cellular,23,apr,159,4,-1,0,unknown,yes +28,blue-collar,single,tertiary,no,4099,no,no,cellular,23,apr,116,4,-1,0,unknown,yes +51,management,married,tertiary,no,4917,no,no,cellular,23,apr,113,1,-1,0,unknown,yes +66,retired,married,primary,no,2883,no,no,cellular,23,apr,158,1,-1,0,unknown,yes +28,unemployed,single,primary,no,1374,no,no,cellular,23,apr,203,4,-1,0,unknown,yes +30,management,single,tertiary,no,398,no,no,cellular,24,apr,235,2,-1,0,unknown,yes +58,blue-collar,married,secondary,no,3027,yes,no,cellular,24,apr,160,1,-1,0,unknown,yes +32,management,single,tertiary,no,2974,yes,no,cellular,24,apr,227,1,4,1,failure,yes +31,technician,single,tertiary,no,1081,no,no,cellular,24,apr,202,5,261,2,failure,yes +71,technician,married,tertiary,no,383,no,no,cellular,27,apr,388,3,-1,0,unknown,yes +37,admin.,married,tertiary,no,3913,yes,no,cellular,27,apr,124,1,-1,0,unknown,yes +56,management,divorced,tertiary,no,3287,no,no,cellular,27,apr,497,1,-1,0,unknown,yes +65,retired,married,primary,no,3629,no,no,cellular,27,apr,148,1,-1,0,unknown,yes +72,self-employed,married,tertiary,no,132,no,no,cellular,27,apr,444,1,-1,0,unknown,yes +51,admin.,single,secondary,no,726,yes,no,cellular,27,apr,89,8,-1,0,unknown,yes +35,blue-collar,married,secondary,no,149,yes,no,cellular,29,apr,507,3,349,1,other,yes +34,blue-collar,married,secondary,no,640,yes,no,cellular,29,apr,636,2,-1,0,unknown,yes +29,admin.,married,secondary,no,7707,yes,no,cellular,29,apr,961,2,334,2,failure,yes +30,technician,single,tertiary,no,53,no,no,cellular,29,apr,375,1,-1,0,unknown,yes +39,technician,single,secondary,no,15,yes,no,cellular,30,apr,510,1,-1,0,unknown,yes +45,management,married,tertiary,no,242,no,no,cellular,30,apr,587,1,-1,0,unknown,yes +28,admin.,single,secondary,no,377,no,no,cellular,30,apr,571,1,-1,0,unknown,yes +52,unemployed,married,secondary,no,94,no,no,cellular,30,apr,244,1,-1,0,unknown,yes +59,retired,married,primary,no,363,no,no,cellular,30,apr,400,1,-1,0,unknown,yes +38,services,married,secondary,no,1970,yes,no,cellular,30,apr,701,1,176,1,success,yes +47,technician,married,secondary,no,1167,yes,no,cellular,30,apr,968,1,87,5,failure,yes +52,management,married,tertiary,no,193,no,no,cellular,30,apr,381,1,269,1,failure,yes +38,management,married,tertiary,no,0,yes,no,cellular,30,apr,571,1,-1,0,unknown,yes +29,student,single,secondary,no,78,no,no,cellular,30,apr,239,1,-1,0,unknown,yes +36,unemployed,single,tertiary,no,1291,no,no,cellular,30,apr,195,1,86,1,success,yes +58,retired,married,tertiary,no,1425,no,no,cellular,30,apr,224,1,-1,0,unknown,yes +31,technician,married,tertiary,no,3382,no,no,cellular,30,apr,739,1,-1,0,unknown,yes +59,retired,divorced,secondary,no,5583,yes,no,cellular,30,apr,720,1,-1,0,unknown,yes +47,blue-collar,married,secondary,no,1230,yes,no,cellular,30,apr,412,1,169,1,success,yes +36,admin.,married,secondary,no,96,no,no,cellular,30,apr,208,1,87,1,success,yes +21,student,single,secondary,no,224,no,no,cellular,30,apr,871,1,-1,0,unknown,yes +23,student,single,secondary,no,0,no,no,cellular,30,apr,297,1,83,6,success,yes +47,blue-collar,married,secondary,no,1730,yes,no,cellular,30,apr,231,1,-1,0,unknown,yes +29,management,single,tertiary,no,697,no,no,cellular,30,apr,365,1,85,1,success,yes +25,management,single,tertiary,no,943,no,no,cellular,30,apr,512,1,-1,0,unknown,yes +37,technician,married,secondary,no,1458,no,no,cellular,30,apr,281,1,-1,0,unknown,yes +33,admin.,married,secondary,no,95,yes,no,cellular,30,apr,335,1,-1,0,unknown,yes +59,technician,married,secondary,no,2308,no,no,cellular,30,apr,815,1,87,1,other,yes +58,management,divorced,tertiary,no,5701,no,no,cellular,30,apr,354,1,87,1,success,yes +44,blue-collar,married,unknown,no,1529,yes,no,cellular,30,apr,347,1,-1,0,unknown,yes +48,blue-collar,married,secondary,no,292,no,no,cellular,30,apr,271,1,79,1,success,yes +34,self-employed,married,primary,no,7468,yes,yes,cellular,30,apr,383,1,-1,0,unknown,yes +42,technician,married,unknown,no,1559,no,no,cellular,30,apr,368,1,-1,0,unknown,yes +54,admin.,divorced,secondary,no,1693,no,no,cellular,30,apr,1277,1,87,2,other,yes +42,technician,married,tertiary,no,757,no,no,cellular,30,apr,354,1,79,1,success,yes +42,blue-collar,married,primary,no,201,yes,no,cellular,30,apr,841,1,85,2,failure,yes +44,self-employed,divorced,tertiary,no,1070,yes,no,cellular,30,apr,381,1,160,2,other,yes +37,blue-collar,married,secondary,no,1330,no,no,cellular,30,apr,390,1,-1,0,unknown,yes +29,student,single,secondary,no,314,no,no,cellular,30,apr,465,1,-1,0,unknown,yes +47,unknown,married,unknown,no,677,no,no,cellular,30,apr,900,2,86,2,failure,yes +24,management,single,tertiary,no,2845,no,no,cellular,30,apr,779,2,-1,0,unknown,yes +34,admin.,single,secondary,no,-32,no,yes,cellular,30,apr,246,2,-1,0,unknown,yes +30,management,single,tertiary,no,398,no,no,cellular,30,apr,554,1,6,2,success,yes +46,technician,married,secondary,no,0,no,no,cellular,30,apr,200,1,259,2,other,yes +34,services,married,secondary,no,1337,no,no,cellular,30,apr,442,1,-1,0,unknown,yes +59,retired,married,secondary,no,493,no,no,cellular,30,apr,237,1,-1,0,unknown,yes +35,management,single,tertiary,no,1750,yes,no,cellular,30,apr,687,1,9,3,success,yes +33,technician,married,tertiary,no,4401,no,no,cellular,30,apr,439,1,-1,0,unknown,yes +35,management,married,tertiary,no,193,yes,no,cellular,30,apr,565,1,13,1,failure,yes +37,management,married,tertiary,no,5106,no,no,cellular,30,apr,244,1,-1,0,unknown,yes +35,admin.,single,tertiary,no,994,no,no,cellular,30,apr,400,1,87,2,failure,yes +38,technician,single,tertiary,no,1101,no,no,cellular,30,apr,800,1,-1,0,unknown,yes +33,blue-collar,single,unknown,no,129,yes,yes,cellular,30,apr,482,1,161,1,failure,yes +42,management,married,tertiary,no,6060,yes,no,cellular,30,apr,316,1,350,2,failure,yes +33,management,married,tertiary,no,55,no,no,cellular,30,apr,526,2,87,3,failure,yes +53,management,married,tertiary,no,1624,no,no,cellular,30,apr,284,3,84,3,success,yes +53,services,married,secondary,no,341,no,no,cellular,30,apr,423,2,-1,0,unknown,yes +31,management,single,tertiary,no,2016,no,no,cellular,30,apr,209,1,-1,0,unknown,yes +26,admin.,single,secondary,no,255,no,no,cellular,30,apr,457,1,80,1,success,yes +30,technician,single,secondary,no,4684,yes,no,cellular,30,apr,268,3,-1,0,unknown,yes +24,admin.,single,secondary,no,1052,no,no,cellular,30,apr,354,1,-1,0,unknown,yes +28,management,single,tertiary,no,1808,no,no,cellular,30,apr,309,1,-1,0,unknown,yes +26,unemployed,single,tertiary,no,3511,no,no,cellular,30,apr,439,2,-1,0,unknown,yes +35,technician,married,secondary,no,518,yes,no,cellular,30,apr,616,1,-1,0,unknown,yes +28,technician,single,secondary,no,227,no,no,cellular,30,apr,278,1,-1,0,unknown,yes +30,admin.,single,secondary,no,270,no,no,cellular,30,apr,437,1,80,1,success,yes +32,management,married,tertiary,no,4733,no,no,cellular,30,apr,532,1,-1,0,unknown,yes +52,self-employed,married,tertiary,no,6657,no,no,telephone,30,apr,917,1,-1,0,unknown,yes +38,management,married,tertiary,no,613,no,no,cellular,30,apr,242,1,86,1,success,yes +34,self-employed,single,tertiary,no,5462,no,no,cellular,30,apr,430,1,-1,0,unknown,yes +29,technician,single,secondary,no,674,no,no,cellular,30,apr,483,1,13,5,success,yes +30,management,single,tertiary,no,364,no,no,cellular,30,apr,306,2,-1,0,unknown,yes +31,services,single,secondary,no,181,no,no,cellular,30,apr,325,1,-1,0,unknown,yes +24,student,single,primary,no,474,no,no,cellular,30,apr,551,1,-1,0,unknown,yes +25,management,single,tertiary,no,219,no,no,cellular,30,apr,458,1,-1,0,unknown,yes +47,management,single,tertiary,no,86,no,no,cellular,30,apr,387,3,87,1,success,yes +33,student,single,unknown,no,1170,no,no,cellular,30,apr,352,1,-1,0,unknown,yes +34,admin.,single,tertiary,no,18,yes,yes,cellular,30,apr,359,1,-1,0,unknown,yes +36,technician,single,tertiary,no,197,no,no,cellular,30,apr,260,1,-1,0,unknown,yes +50,management,married,tertiary,no,938,no,no,cellular,30,apr,780,1,-1,0,unknown,yes +34,management,single,tertiary,no,1228,no,no,cellular,30,apr,580,2,84,8,success,yes +54,technician,divorced,secondary,no,2156,yes,no,cellular,30,apr,258,1,86,5,success,yes +47,technician,married,tertiary,no,2408,no,no,cellular,30,apr,376,1,-1,0,unknown,yes +31,admin.,married,secondary,no,35,no,no,cellular,30,apr,615,1,-1,0,unknown,yes +36,management,married,tertiary,no,393,yes,no,cellular,30,apr,555,2,-1,0,unknown,yes +35,services,married,unknown,no,618,no,no,cellular,30,apr,951,1,-1,0,unknown,yes +25,student,single,secondary,no,1608,no,no,cellular,30,apr,664,2,-1,0,unknown,yes +46,management,married,tertiary,no,699,no,no,cellular,30,apr,970,1,87,1,failure,yes +49,entrepreneur,single,secondary,no,5802,no,no,cellular,30,apr,618,2,-1,0,unknown,yes +47,blue-collar,married,primary,no,2749,yes,no,cellular,30,apr,774,2,164,1,failure,yes +35,management,single,tertiary,no,1162,no,no,cellular,30,apr,175,1,-1,0,unknown,yes +30,technician,married,secondary,no,776,no,no,cellular,30,apr,861,2,-1,0,unknown,yes +31,management,single,tertiary,no,1619,no,no,cellular,30,apr,327,2,-1,0,unknown,yes +55,admin.,married,secondary,no,139,no,no,cellular,30,apr,241,1,-1,0,unknown,yes +25,admin.,single,secondary,no,2816,no,no,cellular,30,apr,327,1,-1,0,unknown,yes +26,technician,single,secondary,no,507,no,no,cellular,30,apr,380,1,-1,0,unknown,yes +85,retired,married,primary,no,98,no,no,cellular,30,apr,416,1,-1,0,unknown,yes +29,management,single,tertiary,no,2753,no,no,cellular,30,apr,645,1,-1,0,unknown,yes +39,management,married,tertiary,no,0,no,no,cellular,30,apr,342,3,22,3,other,yes +33,blue-collar,single,secondary,no,498,no,no,cellular,30,apr,301,1,-1,0,unknown,yes +33,blue-collar,single,tertiary,no,700,no,no,cellular,30,apr,169,1,80,2,success,yes +58,management,married,tertiary,no,4152,yes,no,cellular,30,apr,750,2,164,4,other,yes +61,retired,divorced,secondary,no,927,no,no,cellular,30,apr,427,3,-1,0,unknown,yes +50,admin.,single,secondary,no,2252,no,no,cellular,30,apr,652,2,-1,0,unknown,yes +54,technician,married,secondary,no,0,no,no,telephone,30,apr,766,3,84,3,success,yes +33,technician,married,tertiary,no,0,no,no,cellular,30,apr,227,2,-1,0,unknown,yes +36,admin.,single,secondary,no,728,no,no,cellular,30,apr,230,1,-1,0,unknown,yes +31,management,single,tertiary,no,354,no,no,cellular,30,apr,502,1,9,2,success,yes +24,student,single,secondary,no,382,no,no,cellular,30,apr,567,2,-1,0,unknown,yes +29,management,single,tertiary,no,36252,yes,no,cellular,30,apr,501,1,-1,0,unknown,yes +40,management,married,tertiary,no,158,no,no,telephone,30,apr,712,2,-1,0,unknown,yes +29,blue-collar,single,secondary,no,734,yes,yes,cellular,30,apr,259,1,296,1,other,yes +30,admin.,single,tertiary,no,305,no,no,cellular,30,apr,633,1,85,2,success,yes +45,blue-collar,married,secondary,no,10252,no,no,cellular,4,may,675,2,-1,0,unknown,yes +37,management,single,tertiary,no,3141,no,no,cellular,4,may,384,2,-1,0,unknown,yes +28,unemployed,single,primary,no,236,no,no,cellular,4,may,193,1,87,3,failure,yes +33,management,single,tertiary,no,5437,no,no,cellular,4,may,267,1,91,1,failure,yes +33,technician,married,secondary,no,133,no,no,cellular,4,may,218,1,-1,0,unknown,yes +45,blue-collar,married,secondary,no,640,yes,no,cellular,4,may,447,1,-1,0,unknown,yes +25,student,single,tertiary,no,253,no,no,cellular,4,may,597,1,-1,0,unknown,yes +41,blue-collar,married,secondary,no,5060,no,no,cellular,4,may,963,1,83,3,success,yes +38,technician,divorced,secondary,no,902,yes,no,cellular,4,may,301,3,90,1,success,yes +47,technician,married,secondary,no,335,no,no,cellular,4,may,417,1,76,1,success,yes +49,management,married,tertiary,no,1,no,no,telephone,4,may,1076,3,175,1,success,yes +42,admin.,single,secondary,no,1451,yes,no,cellular,4,may,251,4,-1,0,unknown,yes +33,technician,single,tertiary,no,1636,yes,no,cellular,4,may,592,1,66,1,success,yes +36,admin.,married,tertiary,no,3221,no,no,cellular,4,may,322,11,-1,0,unknown,yes +60,technician,married,secondary,no,316,no,no,cellular,4,may,545,2,263,4,failure,yes +33,technician,married,secondary,no,2044,yes,no,cellular,4,may,532,3,-1,0,unknown,yes +33,technician,married,secondary,no,557,no,no,cellular,4,may,367,1,-1,0,unknown,yes +33,services,single,secondary,no,489,yes,no,cellular,4,may,297,4,334,1,other,yes +32,student,single,tertiary,no,1138,no,no,cellular,4,may,214,3,83,3,success,yes +36,self-employed,married,secondary,no,188,yes,yes,cellular,4,may,1046,3,333,2,success,yes +45,technician,married,secondary,no,1998,no,no,cellular,4,may,237,5,-1,0,unknown,yes +35,management,married,tertiary,no,520,yes,no,cellular,4,may,458,3,17,5,failure,yes +38,management,divorced,tertiary,no,6368,yes,no,cellular,4,may,922,4,-1,0,unknown,yes +30,self-employed,married,tertiary,no,2666,no,no,cellular,4,may,781,3,89,1,success,yes +31,technician,married,secondary,no,4182,yes,no,cellular,4,may,347,2,-1,0,unknown,yes +32,self-employed,divorced,tertiary,no,3271,no,no,cellular,4,may,949,3,-1,0,unknown,yes +44,self-employed,married,unknown,no,163,yes,no,cellular,4,may,364,3,-1,0,unknown,yes +39,management,single,tertiary,no,1515,yes,no,cellular,4,may,815,6,167,6,failure,yes +45,blue-collar,married,primary,no,803,yes,no,cellular,4,may,742,4,-1,0,unknown,yes +32,blue-collar,single,secondary,no,400,no,no,cellular,4,may,268,3,-1,0,unknown,yes +39,management,single,tertiary,no,2454,yes,no,cellular,4,may,716,3,263,2,failure,yes +30,management,single,tertiary,no,533,no,no,cellular,4,may,365,4,-1,0,unknown,yes +63,management,married,unknown,no,2352,no,no,telephone,4,may,475,7,-1,0,unknown,yes +56,retired,married,primary,no,9367,no,no,cellular,4,may,617,2,-1,0,unknown,yes +26,technician,single,secondary,no,237,yes,no,cellular,4,may,1091,3,-1,0,unknown,yes +37,student,single,unknown,no,444,no,no,cellular,4,may,1063,5,-1,0,unknown,yes +29,management,single,tertiary,no,9407,no,no,cellular,4,may,267,6,-1,0,unknown,yes +24,student,single,secondary,no,387,no,no,telephone,4,may,340,8,-1,0,unknown,yes +35,entrepreneur,married,secondary,no,2971,no,no,cellular,4,may,429,4,164,2,failure,yes +43,technician,married,tertiary,no,2643,no,no,telephone,4,may,331,5,-1,0,unknown,yes +39,blue-collar,married,secondary,no,261,no,no,cellular,4,may,841,4,-1,0,unknown,yes +59,retired,divorced,secondary,no,514,no,no,cellular,4,may,673,6,90,1,success,yes +50,blue-collar,married,primary,no,5872,yes,no,cellular,5,may,762,3,-1,0,unknown,yes +44,services,divorced,secondary,no,-368,yes,no,cellular,5,may,895,1,-1,0,unknown,yes +35,student,single,secondary,no,188,yes,no,cellular,5,may,863,1,78,8,success,yes +30,blue-collar,married,secondary,no,61,yes,no,cellular,5,may,525,1,-1,0,unknown,yes +58,admin.,married,secondary,no,2160,yes,yes,cellular,5,may,1090,1,-1,0,unknown,yes +37,management,married,tertiary,no,658,yes,no,cellular,5,may,838,1,-1,0,unknown,yes +39,management,married,tertiary,no,0,yes,no,cellular,5,may,811,2,-1,0,unknown,yes +31,blue-collar,single,secondary,no,196,yes,no,cellular,5,may,568,1,341,7,failure,yes +33,self-employed,single,tertiary,no,94,yes,no,cellular,5,may,955,2,-1,0,unknown,yes +41,management,married,tertiary,no,326,yes,no,cellular,5,may,788,1,-1,0,unknown,yes +44,services,married,secondary,no,-395,yes,no,cellular,5,may,894,1,-1,0,unknown,yes +46,blue-collar,married,unknown,no,9328,yes,no,cellular,5,may,725,3,-1,0,unknown,yes +30,technician,single,secondary,no,-522,yes,yes,cellular,5,may,670,2,286,6,failure,yes +35,admin.,married,secondary,no,1286,yes,no,cellular,5,may,862,3,337,1,other,yes +27,admin.,married,secondary,no,710,yes,yes,cellular,6,may,653,1,334,2,success,yes +39,technician,divorced,tertiary,yes,3,no,no,cellular,6,may,488,1,-1,0,unknown,yes +32,self-employed,single,tertiary,no,0,yes,no,cellular,6,may,767,1,-1,0,unknown,yes +37,technician,divorced,secondary,no,141,yes,no,cellular,6,may,848,1,364,3,failure,yes +31,technician,single,secondary,no,53,yes,yes,cellular,6,may,530,1,-1,0,unknown,yes +30,management,divorced,tertiary,no,415,yes,yes,cellular,6,may,984,1,343,4,failure,yes +34,entrepreneur,married,tertiary,no,0,yes,no,cellular,6,may,611,1,183,1,failure,yes +31,blue-collar,single,secondary,no,1979,yes,yes,cellular,6,may,1205,1,-1,0,unknown,yes +27,admin.,married,secondary,no,0,yes,no,cellular,6,may,837,1,-1,0,unknown,yes +36,management,single,tertiary,no,7506,yes,no,cellular,6,may,839,2,188,1,success,yes +32,admin.,married,secondary,no,752,yes,no,cellular,6,may,519,2,166,5,failure,yes +49,management,married,secondary,no,99,yes,no,cellular,6,may,687,2,343,1,failure,yes +29,admin.,single,secondary,no,266,yes,no,cellular,6,may,540,1,-1,0,unknown,yes +29,admin.,single,secondary,no,27,yes,no,cellular,6,may,754,1,-1,0,unknown,yes +28,blue-collar,single,secondary,no,524,yes,no,cellular,6,may,554,2,-1,0,unknown,yes +60,management,married,tertiary,no,5990,yes,no,cellular,6,may,396,3,-1,0,unknown,yes +33,management,married,secondary,no,3935,yes,no,cellular,6,may,765,1,342,2,failure,yes +35,management,married,tertiary,no,991,yes,no,cellular,6,may,1489,3,-1,0,unknown,yes +31,management,single,tertiary,no,59,yes,yes,cellular,6,may,1347,2,363,1,failure,yes +40,management,married,tertiary,no,1598,yes,yes,cellular,6,may,1074,4,344,3,failure,yes +29,management,married,tertiary,no,0,yes,no,cellular,6,may,667,2,-1,0,unknown,yes +35,management,married,tertiary,no,802,yes,no,cellular,6,may,686,2,-1,0,unknown,yes +32,management,married,tertiary,no,2465,yes,yes,cellular,7,may,923,1,-1,0,unknown,yes +26,management,single,tertiary,no,114,yes,no,cellular,7,may,457,1,-1,0,unknown,yes +42,blue-collar,married,primary,no,1461,yes,no,cellular,7,may,757,2,170,3,failure,yes +33,admin.,single,tertiary,no,475,yes,no,cellular,7,may,1046,1,-1,0,unknown,yes +36,management,single,tertiary,no,4,yes,no,cellular,7,may,855,2,342,1,failure,yes +35,management,single,tertiary,no,1618,yes,yes,cellular,7,may,542,1,-1,0,unknown,yes +30,services,single,secondary,no,-271,yes,no,cellular,7,may,609,1,337,1,success,yes +59,admin.,single,secondary,no,2166,yes,yes,cellular,7,may,574,1,-1,0,unknown,yes +44,blue-collar,married,primary,no,4031,yes,no,cellular,7,may,983,4,-1,0,unknown,yes +50,services,married,primary,no,5024,yes,yes,cellular,7,may,661,1,267,11,other,yes +51,technician,married,secondary,no,-1944,yes,no,cellular,7,may,623,1,-1,0,unknown,yes +51,admin.,married,secondary,no,3025,no,no,cellular,7,may,476,1,352,1,other,yes +60,blue-collar,married,unknown,no,2090,yes,no,cellular,7,may,957,2,-1,0,unknown,yes +29,technician,single,tertiary,no,0,yes,no,cellular,7,may,347,2,337,6,failure,yes +43,management,married,tertiary,no,1429,yes,no,cellular,7,may,1030,1,169,3,success,yes +31,admin.,single,secondary,no,0,yes,no,cellular,7,may,895,2,295,2,failure,yes +26,blue-collar,single,secondary,no,311,yes,no,cellular,7,may,798,2,-1,0,unknown,yes +23,housemaid,married,tertiary,no,66,yes,no,cellular,7,may,1391,2,-1,0,unknown,yes +49,blue-collar,single,primary,no,2146,yes,no,cellular,7,may,1516,2,353,2,other,yes +42,unemployed,married,secondary,no,356,yes,no,cellular,7,may,787,3,356,2,failure,yes +39,blue-collar,married,secondary,no,62,yes,no,cellular,7,may,877,3,-1,0,unknown,yes +45,admin.,married,secondary,yes,-106,yes,yes,cellular,7,may,553,3,288,1,other,yes +45,services,divorced,secondary,no,608,yes,yes,cellular,7,may,1135,3,323,30,failure,yes +39,technician,divorced,secondary,no,291,yes,no,cellular,7,may,882,2,-1,0,unknown,yes +45,blue-collar,divorced,secondary,no,-184,yes,no,cellular,7,may,878,3,170,5,failure,yes +39,admin.,single,secondary,no,2345,yes,no,cellular,8,may,491,2,344,2,failure,yes +23,technician,single,secondary,no,4,yes,no,cellular,8,may,763,1,-1,0,unknown,yes +57,admin.,married,secondary,no,6005,yes,no,cellular,8,may,704,1,323,6,failure,yes +32,blue-collar,married,secondary,no,333,yes,no,cellular,8,may,501,2,-1,0,unknown,yes +29,management,single,tertiary,no,3041,yes,no,cellular,8,may,606,3,-1,0,unknown,yes +42,management,married,tertiary,no,4,yes,no,cellular,8,may,579,2,295,1,success,yes +47,blue-collar,divorced,primary,no,603,yes,yes,cellular,8,may,1080,1,-1,0,unknown,yes +36,management,married,tertiary,no,0,yes,no,cellular,8,may,308,3,-1,0,unknown,yes +57,management,married,tertiary,no,830,yes,yes,cellular,8,may,662,1,367,1,success,yes +36,technician,single,tertiary,no,962,yes,no,cellular,8,may,568,1,-1,0,unknown,yes +53,technician,single,tertiary,no,185,yes,no,cellular,8,may,1448,2,-1,0,unknown,yes +56,blue-collar,divorced,primary,no,-9,yes,yes,cellular,8,may,728,1,-1,0,unknown,yes +33,admin.,divorced,tertiary,no,891,no,no,cellular,8,may,398,2,-1,0,unknown,yes +59,retired,married,tertiary,no,148,yes,yes,cellular,8,may,685,2,366,1,other,yes +47,retired,married,primary,no,1374,no,yes,telephone,8,may,479,2,359,3,failure,yes +42,management,married,tertiary,no,-556,yes,yes,cellular,8,may,682,3,347,3,failure,yes +38,self-employed,single,tertiary,no,1612,yes,no,cellular,8,may,423,1,-1,0,unknown,yes +40,self-employed,married,secondary,no,0,yes,no,cellular,11,may,657,1,-1,0,unknown,yes +41,admin.,single,secondary,no,-109,yes,yes,cellular,11,may,1038,1,370,1,failure,yes +43,management,divorced,tertiary,no,580,yes,no,cellular,11,may,1514,1,284,2,failure,yes +24,services,married,secondary,no,4500,yes,no,cellular,11,may,733,2,-1,0,unknown,yes +40,services,married,secondary,no,-192,yes,no,cellular,11,may,666,1,-1,0,unknown,yes +40,blue-collar,married,secondary,no,-438,no,no,cellular,11,may,1017,1,-1,0,unknown,yes +34,services,single,secondary,no,-701,yes,no,cellular,11,may,610,2,-1,0,unknown,yes +36,management,single,tertiary,no,1400,yes,no,cellular,11,may,608,3,-1,0,unknown,yes +38,services,married,secondary,no,5293,yes,no,cellular,11,may,475,1,171,6,failure,yes +39,blue-collar,married,secondary,no,785,yes,no,cellular,11,may,1232,2,-1,0,unknown,yes +25,student,single,primary,no,373,yes,no,cellular,11,may,819,2,-1,0,unknown,yes +39,management,married,tertiary,no,763,yes,no,cellular,11,may,877,7,300,2,other,yes +41,blue-collar,married,secondary,no,1236,yes,no,cellular,11,may,911,3,-1,0,unknown,yes +36,admin.,divorced,secondary,no,-811,yes,no,cellular,12,may,365,2,-1,0,unknown,yes +34,entrepreneur,married,primary,no,7279,yes,no,cellular,12,may,882,1,-1,0,unknown,yes +34,admin.,divorced,secondary,no,479,yes,no,cellular,12,may,515,1,350,5,failure,yes +38,housemaid,single,primary,no,199,yes,no,cellular,12,may,1203,1,306,1,failure,yes +40,blue-collar,married,secondary,no,1808,yes,no,cellular,12,may,560,1,-1,0,unknown,yes +31,admin.,married,secondary,no,2,yes,yes,cellular,12,may,703,4,-1,0,unknown,yes +37,blue-collar,married,primary,no,-106,yes,yes,cellular,12,may,690,1,-1,0,unknown,yes +58,entrepreneur,married,secondary,no,670,yes,no,cellular,12,may,1272,1,-1,0,unknown,yes +48,services,divorced,secondary,no,-361,yes,no,cellular,12,may,1062,3,349,3,other,yes +35,blue-collar,married,primary,no,159,yes,yes,cellular,12,may,826,1,-1,0,unknown,yes +34,admin.,single,secondary,no,151,yes,no,cellular,12,may,590,1,370,1,other,yes +51,blue-collar,married,secondary,no,518,yes,no,cellular,12,may,918,1,-1,0,unknown,yes +39,management,single,tertiary,no,5073,yes,no,cellular,12,may,1182,1,286,4,failure,yes +39,admin.,married,secondary,no,607,yes,no,cellular,12,may,454,2,364,3,failure,yes +36,blue-collar,divorced,primary,no,-308,yes,no,cellular,12,may,725,1,-1,0,unknown,yes +47,services,married,secondary,no,367,yes,no,cellular,12,may,309,1,306,4,success,yes +35,blue-collar,single,secondary,no,855,yes,no,cellular,12,may,549,1,300,1,success,yes +33,blue-collar,married,secondary,no,1240,yes,no,cellular,12,may,844,1,-1,0,unknown,yes +47,admin.,married,secondary,no,663,yes,yes,cellular,12,may,409,1,274,6,other,yes +38,services,single,secondary,no,895,yes,no,cellular,12,may,1531,1,-1,0,unknown,yes +46,blue-collar,married,primary,no,804,yes,no,cellular,12,may,1063,2,361,1,success,yes +42,blue-collar,married,primary,no,-407,yes,yes,cellular,12,may,829,7,-1,0,unknown,yes +47,blue-collar,married,secondary,no,802,yes,yes,cellular,12,may,289,2,-1,0,unknown,yes +37,admin.,single,primary,no,912,yes,no,cellular,12,may,637,3,328,22,other,yes +31,admin.,single,tertiary,no,355,yes,no,cellular,12,may,609,1,-1,0,unknown,yes +46,technician,married,secondary,no,3,yes,yes,cellular,12,may,614,3,-1,0,unknown,yes +36,services,single,secondary,no,0,yes,no,cellular,12,may,398,6,-1,0,unknown,yes +40,services,married,secondary,no,1836,yes,no,cellular,12,may,750,2,-1,0,unknown,yes +39,management,married,tertiary,no,1425,yes,no,cellular,12,may,775,3,-1,0,unknown,yes +45,self-employed,divorced,tertiary,no,963,yes,no,cellular,12,may,528,5,-1,0,unknown,yes +59,admin.,married,secondary,no,145,yes,no,telephone,12,may,556,2,287,13,success,yes +34,blue-collar,married,secondary,no,634,no,yes,cellular,12,may,737,3,-1,0,unknown,yes +40,blue-collar,married,unknown,no,87,yes,no,cellular,13,may,477,3,-1,0,unknown,yes +50,blue-collar,married,primary,no,-522,yes,no,cellular,13,may,863,3,-1,0,unknown,yes +36,blue-collar,married,primary,no,319,yes,no,cellular,13,may,774,2,301,1,failure,yes +35,admin.,single,secondary,no,0,yes,no,cellular,13,may,1073,1,-1,0,unknown,yes +36,blue-collar,single,secondary,no,478,yes,no,cellular,13,may,610,1,-1,0,unknown,yes +35,blue-collar,single,primary,no,-276,yes,no,cellular,13,may,850,1,-1,0,unknown,yes +47,blue-collar,married,primary,no,4227,yes,no,cellular,13,may,659,1,-1,0,unknown,yes +47,housemaid,single,primary,no,2785,yes,no,cellular,13,may,570,1,-1,0,unknown,yes +38,blue-collar,married,primary,no,1401,no,no,cellular,13,may,516,1,-1,0,unknown,yes +33,management,single,tertiary,no,0,yes,no,cellular,13,may,585,1,-1,0,unknown,yes +38,blue-collar,married,primary,no,1852,yes,no,cellular,13,may,606,1,-1,0,unknown,yes +39,blue-collar,married,secondary,no,462,yes,no,cellular,13,may,590,1,-1,0,unknown,yes +43,housemaid,single,primary,no,800,yes,no,cellular,13,may,902,1,-1,0,unknown,yes +33,technician,married,secondary,no,221,yes,no,cellular,13,may,669,1,355,4,failure,yes +34,blue-collar,married,secondary,no,1089,yes,no,cellular,13,may,394,3,-1,0,unknown,yes +28,admin.,divorced,secondary,no,451,yes,no,cellular,13,may,302,1,301,1,success,yes +34,blue-collar,married,secondary,no,496,yes,no,cellular,13,may,333,1,-1,0,unknown,yes +42,blue-collar,single,secondary,no,1080,yes,yes,cellular,13,may,951,3,370,4,failure,yes +33,management,married,tertiary,no,1064,yes,no,cellular,13,may,562,1,-1,0,unknown,yes +39,management,married,tertiary,no,297,yes,no,cellular,13,may,734,2,-1,0,unknown,yes +32,management,single,tertiary,no,3,yes,no,cellular,13,may,568,1,-1,0,unknown,yes +34,management,single,tertiary,no,76,yes,no,cellular,13,may,747,2,371,3,failure,yes +32,blue-collar,single,primary,no,398,yes,no,cellular,13,may,716,1,-1,0,unknown,yes +48,admin.,divorced,secondary,no,83,yes,no,cellular,13,may,1101,1,-1,0,unknown,yes +31,admin.,married,secondary,no,879,yes,no,cellular,13,may,394,1,-1,0,unknown,yes +33,services,married,secondary,no,210,yes,no,cellular,13,may,1207,2,-1,0,unknown,yes +48,services,divorced,secondary,no,-276,yes,yes,cellular,13,may,674,1,-1,0,unknown,yes +33,blue-collar,single,primary,no,863,yes,no,telephone,13,may,622,3,-1,0,unknown,yes +30,student,single,tertiary,no,228,yes,no,cellular,13,may,314,2,-1,0,unknown,yes +35,management,single,tertiary,no,1396,yes,no,cellular,13,may,809,1,300,1,failure,yes +51,blue-collar,divorced,primary,no,-19,yes,no,cellular,13,may,829,1,296,11,failure,yes +38,services,single,secondary,no,2253,yes,no,cellular,13,may,937,3,-1,0,unknown,yes +39,blue-collar,single,primary,no,0,yes,yes,cellular,13,may,1975,5,-1,0,unknown,yes +27,blue-collar,single,primary,no,265,yes,no,cellular,13,may,1119,2,-1,0,unknown,yes +50,technician,divorced,secondary,no,-54,yes,yes,cellular,13,may,698,2,292,1,failure,yes +34,management,single,tertiary,no,3821,yes,no,cellular,13,may,649,2,-1,0,unknown,yes +38,blue-collar,divorced,primary,no,0,yes,no,cellular,13,may,531,2,-1,0,unknown,yes +29,services,divorced,secondary,no,-7,yes,no,cellular,13,may,1279,3,-1,0,unknown,yes +40,blue-collar,married,primary,no,830,yes,no,cellular,13,may,873,3,370,2,failure,yes +32,technician,single,tertiary,no,0,yes,yes,cellular,13,may,440,2,-1,0,unknown,yes +38,blue-collar,married,primary,no,4406,yes,no,telephone,13,may,689,2,-1,0,unknown,yes +36,admin.,divorced,secondary,no,437,yes,no,cellular,14,may,722,2,344,1,success,yes +28,blue-collar,single,primary,no,54,yes,no,cellular,14,may,533,1,371,1,other,yes +49,blue-collar,married,secondary,no,-454,yes,no,cellular,14,may,558,1,-1,0,unknown,yes +26,blue-collar,single,secondary,no,1006,yes,no,cellular,14,may,667,1,-1,0,unknown,yes +44,admin.,divorced,secondary,no,2999,yes,no,cellular,14,may,717,1,-1,0,unknown,yes +49,management,married,tertiary,no,85,yes,no,cellular,14,may,590,5,359,1,other,yes +31,self-employed,single,tertiary,no,17924,yes,no,cellular,14,may,745,1,174,3,failure,yes +55,blue-collar,divorced,primary,no,8180,no,no,cellular,14,may,854,2,360,1,failure,yes +32,management,married,tertiary,no,2431,yes,no,cellular,14,may,646,5,-1,0,unknown,yes +35,services,married,secondary,no,341,yes,no,cellular,14,may,345,1,-1,0,unknown,yes +35,blue-collar,single,secondary,no,4963,yes,no,cellular,14,may,456,1,300,1,failure,yes +31,admin.,married,secondary,no,8781,yes,no,cellular,14,may,680,1,177,1,success,yes +28,admin.,divorced,secondary,no,-504,yes,yes,cellular,14,may,578,1,-1,0,unknown,yes +39,management,married,tertiary,no,1738,yes,no,cellular,14,may,633,1,358,1,other,yes +48,blue-collar,married,primary,no,214,yes,yes,cellular,14,may,307,1,177,2,failure,yes +32,admin.,married,secondary,no,684,yes,no,cellular,14,may,607,3,-1,0,unknown,yes +41,blue-collar,married,secondary,no,580,yes,no,cellular,14,may,874,1,363,1,failure,yes +34,management,married,tertiary,no,273,yes,no,cellular,14,may,492,1,175,2,failure,yes +32,blue-collar,single,secondary,no,811,yes,no,cellular,14,may,563,1,-1,0,unknown,yes +34,admin.,married,primary,no,0,yes,yes,cellular,14,may,1020,1,-1,0,unknown,yes +36,self-employed,divorced,tertiary,no,1354,yes,no,cellular,14,may,1723,1,356,2,success,yes +29,admin.,divorced,secondary,no,-254,yes,no,cellular,14,may,406,2,-1,0,unknown,yes +54,management,divorced,tertiary,no,-449,yes,no,cellular,14,may,691,1,-1,0,unknown,yes +29,blue-collar,married,secondary,no,7863,yes,no,cellular,14,may,1129,1,-1,0,unknown,yes +35,blue-collar,divorced,secondary,no,336,yes,no,cellular,14,may,191,1,346,2,failure,yes +36,blue-collar,married,secondary,no,1049,yes,no,cellular,14,may,224,4,-1,0,unknown,yes +37,services,married,secondary,no,6089,yes,no,cellular,14,may,616,2,-1,0,unknown,yes +37,management,divorced,tertiary,no,-42,yes,no,cellular,14,may,668,2,-1,0,unknown,yes +31,blue-collar,single,secondary,no,953,yes,no,cellular,14,may,479,1,346,2,success,yes +33,admin.,single,secondary,no,315,yes,yes,cellular,14,may,888,3,-1,0,unknown,yes +59,retired,divorced,secondary,no,5845,no,no,cellular,14,may,1060,2,-1,0,unknown,yes +30,blue-collar,married,secondary,no,378,yes,no,cellular,14,may,566,2,-1,0,unknown,yes +53,services,divorced,secondary,no,765,yes,no,cellular,14,may,959,3,174,7,other,yes +26,blue-collar,married,secondary,no,5795,yes,no,cellular,14,may,1094,2,-1,0,unknown,yes +30,admin.,single,secondary,no,315,yes,no,cellular,14,may,884,3,346,4,failure,yes +35,management,single,tertiary,no,916,yes,no,cellular,14,may,460,2,-1,0,unknown,yes +34,admin.,married,secondary,no,124,yes,no,telephone,14,may,604,4,366,2,other,yes +33,services,married,secondary,no,207,yes,no,cellular,14,may,629,4,-1,0,unknown,yes +59,retired,married,tertiary,no,422,yes,no,cellular,14,may,647,4,-1,0,unknown,yes +36,technician,single,secondary,no,125,yes,no,cellular,15,may,676,3,-1,0,unknown,yes +34,services,single,secondary,no,2,yes,no,cellular,15,may,153,2,-1,0,unknown,yes +39,services,single,secondary,no,7066,yes,no,cellular,15,may,667,3,357,3,other,yes +42,services,married,secondary,no,146,yes,yes,cellular,15,may,670,4,346,1,failure,yes +60,retired,divorced,secondary,no,496,yes,no,cellular,15,may,655,2,-1,0,unknown,yes +56,services,single,secondary,no,-40,yes,no,cellular,15,may,311,1,368,2,failure,yes +30,services,single,secondary,no,140,yes,no,cellular,15,may,760,1,-1,0,unknown,yes +26,services,married,secondary,no,77,yes,no,cellular,15,may,619,1,340,4,failure,yes +35,blue-collar,married,primary,no,22,yes,no,cellular,15,may,1190,2,302,2,other,yes +22,blue-collar,single,secondary,no,-51,yes,no,cellular,15,may,859,1,-1,0,unknown,yes +26,blue-collar,single,secondary,no,26,yes,yes,cellular,15,may,899,1,-1,0,unknown,yes +28,admin.,single,secondary,no,154,yes,no,cellular,15,may,536,1,364,1,other,yes +35,admin.,divorced,secondary,no,534,no,no,cellular,15,may,669,1,312,3,failure,yes +35,housemaid,married,tertiary,no,1265,yes,no,cellular,15,may,326,5,179,4,failure,yes +55,technician,married,tertiary,no,-466,yes,no,cellular,15,may,901,1,-1,0,unknown,yes +32,services,married,secondary,no,38,yes,no,cellular,15,may,744,1,-1,0,unknown,yes +28,management,single,secondary,no,703,yes,no,cellular,15,may,485,1,88,1,other,yes +31,admin.,married,secondary,no,685,yes,no,cellular,15,may,552,1,329,3,failure,yes +23,blue-collar,single,secondary,no,780,yes,no,cellular,15,may,416,1,-1,0,unknown,yes +26,technician,single,tertiary,no,-67,yes,no,cellular,15,may,637,1,-1,0,unknown,yes +46,blue-collar,married,primary,no,1085,yes,yes,cellular,15,may,523,2,353,58,other,yes +34,blue-collar,married,secondary,no,29,yes,no,cellular,15,may,285,5,-1,0,unknown,yes +60,management,single,tertiary,no,560,no,no,cellular,15,may,730,5,-1,0,unknown,yes +28,student,single,tertiary,no,22,yes,no,cellular,15,may,536,2,-1,0,unknown,yes +29,services,married,secondary,no,6567,yes,no,cellular,15,may,792,2,298,1,failure,yes +39,entrepreneur,married,secondary,no,2139,yes,no,cellular,15,may,576,4,371,1,failure,yes +54,unemployed,married,secondary,no,582,yes,no,cellular,15,may,693,5,372,2,failure,yes +34,technician,single,secondary,no,194,yes,yes,cellular,15,may,1015,1,-1,0,unknown,yes +27,services,single,secondary,no,353,yes,no,cellular,15,may,663,1,-1,0,unknown,yes +28,services,single,secondary,no,341,yes,no,cellular,15,may,437,3,347,3,other,yes +39,entrepreneur,married,tertiary,yes,-172,yes,no,cellular,15,may,562,2,-1,0,unknown,yes +60,retired,divorced,secondary,no,-639,yes,no,cellular,15,may,585,1,-1,0,unknown,yes +26,student,single,secondary,no,864,yes,no,cellular,15,may,659,1,-1,0,unknown,yes +32,management,married,secondary,no,134,yes,yes,cellular,15,may,532,3,-1,0,unknown,yes +40,admin.,single,secondary,no,50,no,no,cellular,15,may,837,1,-1,0,unknown,yes +25,admin.,single,secondary,no,507,yes,no,cellular,15,may,832,1,367,3,failure,yes +48,blue-collar,married,secondary,no,480,yes,no,cellular,15,may,830,1,352,2,failure,yes +37,entrepreneur,single,secondary,no,-22,yes,no,cellular,15,may,317,1,-1,0,unknown,yes +39,admin.,divorced,secondary,no,878,yes,no,cellular,15,may,611,5,-1,0,unknown,yes +40,admin.,married,secondary,no,2574,yes,no,cellular,15,may,432,1,176,1,failure,yes +31,management,single,tertiary,no,2734,yes,no,cellular,15,may,858,3,-1,0,unknown,yes +42,admin.,divorced,secondary,no,241,yes,no,cellular,15,may,1012,3,-1,0,unknown,yes +51,blue-collar,married,primary,no,129,yes,no,cellular,15,may,611,2,-1,0,unknown,yes +28,management,single,tertiary,no,41,yes,no,cellular,15,may,885,3,352,2,other,yes +32,management,married,tertiary,no,3387,yes,no,cellular,15,may,1111,5,-1,0,unknown,yes +36,admin.,single,secondary,no,148,yes,no,cellular,15,may,1357,4,374,2,failure,yes +36,blue-collar,married,secondary,no,249,yes,no,cellular,15,may,709,5,-1,0,unknown,yes +38,self-employed,single,tertiary,no,5774,yes,no,cellular,15,may,406,4,359,5,other,yes +36,services,single,secondary,no,0,yes,no,cellular,15,may,1002,4,-1,0,unknown,yes +40,blue-collar,married,primary,no,1841,yes,no,cellular,15,may,880,4,-1,0,unknown,yes +37,blue-collar,married,primary,no,2120,yes,no,cellular,15,may,655,3,175,4,failure,yes +51,management,single,tertiary,no,297,yes,no,cellular,15,may,415,4,375,1,failure,yes +34,services,divorced,secondary,no,89,yes,no,cellular,15,may,1871,4,-1,0,unknown,yes +56,blue-collar,married,primary,no,827,yes,no,telephone,15,may,462,4,-1,0,unknown,yes +35,blue-collar,married,secondary,no,205,yes,yes,cellular,15,may,1313,7,312,1,failure,yes +34,technician,married,tertiary,no,3743,yes,no,cellular,18,may,722,4,-1,0,unknown,yes +39,services,married,secondary,no,117,yes,no,cellular,18,may,1032,2,-1,0,unknown,yes +29,blue-collar,married,secondary,no,-493,yes,no,cellular,18,may,536,2,334,4,failure,yes +33,management,single,tertiary,no,62,yes,no,cellular,18,may,473,3,-1,0,unknown,yes +40,admin.,single,secondary,no,2040,yes,no,cellular,18,may,906,2,350,2,failure,yes +22,services,single,secondary,no,344,yes,no,cellular,18,may,347,1,-1,0,unknown,yes +32,technician,single,secondary,no,230,yes,no,cellular,18,may,442,1,266,8,failure,yes +33,admin.,single,secondary,no,1277,yes,no,cellular,18,may,827,1,-1,0,unknown,yes +29,blue-collar,married,secondary,no,104,yes,no,cellular,18,may,903,4,-1,0,unknown,yes +29,technician,single,secondary,no,706,yes,no,cellular,18,may,1340,1,-1,0,unknown,yes +24,blue-collar,single,secondary,no,174,yes,yes,cellular,18,may,487,1,-1,0,unknown,yes +31,blue-collar,single,secondary,no,239,yes,no,cellular,18,may,666,1,360,1,success,yes +27,blue-collar,single,secondary,no,513,yes,yes,cellular,18,may,351,1,-1,0,unknown,yes +32,management,single,tertiary,no,7290,yes,no,cellular,18,may,357,1,-1,0,unknown,yes +30,blue-collar,single,secondary,no,5909,yes,no,cellular,18,may,420,2,-1,0,unknown,yes +27,services,single,secondary,no,-195,yes,no,cellular,18,may,391,1,-1,0,unknown,yes +55,blue-collar,married,secondary,no,3917,yes,no,cellular,18,may,565,1,-1,0,unknown,yes +28,admin.,single,secondary,no,352,yes,yes,cellular,18,may,431,1,-1,0,unknown,yes +29,technician,single,tertiary,no,615,yes,no,cellular,18,may,373,1,-1,0,unknown,yes +55,retired,divorced,tertiary,no,0,no,no,cellular,18,may,616,1,370,1,success,yes +25,blue-collar,single,secondary,no,217,yes,no,cellular,18,may,504,1,-1,0,unknown,yes +36,housemaid,single,secondary,no,1015,yes,no,cellular,18,may,1008,1,347,2,success,yes +27,blue-collar,married,unknown,no,409,yes,no,cellular,18,may,525,1,-1,0,unknown,yes +25,services,single,secondary,no,1119,yes,no,cellular,18,may,1063,1,-1,0,unknown,yes +32,blue-collar,single,primary,no,12198,yes,no,cellular,18,may,178,1,-1,0,unknown,yes +33,admin.,single,tertiary,no,235,yes,no,cellular,18,may,525,1,-1,0,unknown,yes +38,entrepreneur,married,tertiary,no,170,yes,no,cellular,18,may,442,1,-1,0,unknown,yes +45,technician,divorced,secondary,no,-357,yes,yes,cellular,18,may,618,1,355,2,failure,yes +30,blue-collar,single,secondary,no,2145,yes,no,cellular,18,may,727,2,-1,0,unknown,yes +32,blue-collar,married,primary,no,-454,yes,yes,cellular,18,may,801,5,355,2,failure,yes +26,blue-collar,single,primary,no,-887,yes,no,cellular,18,may,827,2,-1,0,unknown,yes +25,blue-collar,single,primary,no,292,yes,yes,cellular,18,may,1027,2,-1,0,unknown,yes +33,blue-collar,married,secondary,no,139,yes,yes,cellular,18,may,732,2,291,5,failure,yes +32,technician,single,tertiary,no,2684,yes,no,cellular,18,may,542,2,-1,0,unknown,yes +34,blue-collar,married,primary,no,-1,yes,no,cellular,18,may,1057,6,355,1,other,yes +29,management,married,tertiary,no,1387,yes,no,cellular,18,may,256,2,-1,0,unknown,yes +28,self-employed,married,secondary,no,-522,yes,yes,cellular,18,may,638,2,-1,0,unknown,yes +38,technician,single,secondary,no,-242,yes,no,cellular,18,may,1173,3,278,6,success,yes +35,services,single,secondary,no,719,yes,no,cellular,18,may,1359,3,368,3,failure,yes +28,admin.,single,secondary,no,0,yes,yes,cellular,18,may,390,5,-1,0,unknown,yes +29,unemployed,single,tertiary,no,497,yes,no,cellular,18,may,642,3,298,6,success,yes +20,blue-collar,single,secondary,no,76,yes,no,cellular,18,may,639,2,-1,0,unknown,yes +45,admin.,divorced,secondary,no,397,yes,yes,cellular,22,may,582,1,95,2,success,yes +37,management,married,tertiary,no,3723,no,no,cellular,22,may,354,1,-1,0,unknown,yes +32,technician,single,tertiary,no,1625,no,no,cellular,22,may,796,1,109,1,failure,yes +59,admin.,married,secondary,no,106,no,no,cellular,22,may,186,1,-1,0,unknown,yes +37,services,married,secondary,no,1543,yes,no,cellular,22,may,298,1,10,6,failure,yes +59,management,married,tertiary,no,2239,no,no,cellular,22,may,431,1,-1,0,unknown,yes +27,technician,divorced,secondary,no,1977,yes,no,cellular,22,may,449,1,-1,0,unknown,yes +39,management,single,tertiary,no,0,yes,no,cellular,22,may,271,1,93,3,success,yes +43,services,married,secondary,no,2145,no,no,cellular,22,may,271,1,183,3,failure,yes +39,technician,married,secondary,no,116,no,no,cellular,22,may,554,2,-1,0,unknown,yes +26,student,single,secondary,no,620,no,no,cellular,22,may,223,1,94,1,success,yes +39,management,single,tertiary,no,307,no,no,cellular,22,may,182,2,-1,0,unknown,yes +43,management,divorced,unknown,no,7702,no,no,cellular,22,may,460,1,95,2,success,yes +27,student,single,tertiary,no,3733,yes,no,cellular,22,may,198,1,98,6,success,yes +32,services,single,secondary,no,3993,no,no,cellular,22,may,148,2,-1,0,unknown,yes +29,management,single,tertiary,no,428,no,no,cellular,22,may,293,2,-1,0,unknown,yes +42,management,married,primary,no,5310,yes,no,cellular,22,may,545,2,186,1,success,yes +53,blue-collar,married,unknown,no,2509,no,no,telephone,22,may,231,2,-1,0,unknown,yes +36,management,married,tertiary,no,255,no,no,cellular,22,may,970,2,92,2,other,yes +27,management,single,tertiary,no,616,yes,no,cellular,22,may,685,1,101,1,other,yes +43,admin.,single,secondary,no,733,yes,no,cellular,25,may,282,1,187,3,success,yes +60,retired,divorced,tertiary,no,439,no,yes,cellular,25,may,464,1,321,1,failure,yes +29,technician,single,secondary,no,590,no,no,cellular,25,may,124,1,-1,0,unknown,yes +26,blue-collar,single,tertiary,no,567,no,no,cellular,25,may,421,1,-1,0,unknown,yes +26,student,single,unknown,no,689,no,no,cellular,25,may,678,2,-1,0,unknown,yes +28,technician,single,tertiary,no,386,no,no,cellular,25,may,867,1,-1,0,unknown,yes +28,technician,single,tertiary,no,0,yes,no,cellular,25,may,269,1,40,2,failure,yes +28,management,single,tertiary,no,957,no,no,cellular,25,may,915,2,-1,0,unknown,yes +40,technician,married,secondary,no,312,no,no,cellular,25,may,612,7,-1,0,unknown,yes +24,blue-collar,single,secondary,no,167,no,yes,cellular,25,may,288,1,96,2,success,yes +56,retired,divorced,tertiary,no,13094,no,no,cellular,25,may,1064,1,-1,0,unknown,yes +34,management,single,tertiary,no,5086,no,no,cellular,25,may,213,4,-1,0,unknown,yes +28,admin.,single,secondary,no,707,yes,no,cellular,25,may,226,1,-1,0,unknown,yes +37,services,married,secondary,no,466,yes,yes,cellular,25,may,377,1,-1,0,unknown,yes +32,services,single,secondary,no,152,yes,no,cellular,25,may,158,2,-1,0,unknown,yes +43,technician,divorced,secondary,no,1612,no,no,cellular,25,may,262,2,353,1,other,yes +36,technician,married,tertiary,no,911,yes,yes,cellular,25,may,117,2,21,3,failure,yes +35,technician,single,secondary,no,27,yes,no,cellular,25,may,214,1,305,1,other,yes +29,technician,single,secondary,no,6,no,no,cellular,25,may,315,1,-1,0,unknown,yes +27,student,single,secondary,no,253,no,no,cellular,25,may,242,2,-1,0,unknown,yes +32,technician,single,tertiary,no,705,yes,no,cellular,25,may,414,2,35,4,failure,yes +33,technician,single,tertiary,no,109,yes,yes,cellular,25,may,601,2,10,7,failure,yes +24,student,single,secondary,no,23878,no,no,cellular,26,may,133,1,97,1,success,yes +58,technician,married,secondary,no,3399,no,no,cellular,26,may,1078,1,97,7,other,yes +43,management,married,tertiary,no,79,no,no,cellular,26,may,640,1,-1,0,unknown,yes +26,management,married,tertiary,no,243,no,no,cellular,26,may,482,1,-1,0,unknown,yes +31,technician,single,secondary,no,138,no,no,cellular,26,may,91,1,285,2,other,yes +25,management,single,tertiary,no,1317,no,no,cellular,26,may,176,1,-1,0,unknown,yes +58,retired,married,secondary,no,2714,no,no,cellular,26,may,165,1,287,2,failure,yes +48,management,divorced,tertiary,no,17964,yes,no,cellular,26,may,208,2,96,3,other,yes +60,retired,married,tertiary,no,846,no,no,telephone,26,may,1346,1,-1,0,unknown,yes +25,student,single,tertiary,no,326,no,no,cellular,26,may,390,1,-1,0,unknown,yes +26,student,single,secondary,no,100,no,no,cellular,26,may,445,1,-1,0,unknown,yes +25,student,single,secondary,no,304,no,no,cellular,26,may,226,2,-1,0,unknown,yes +26,student,single,tertiary,no,39,no,no,cellular,26,may,396,3,-1,0,unknown,yes +32,management,single,tertiary,no,312,no,no,cellular,26,may,208,2,98,2,success,yes +25,admin.,married,tertiary,no,906,no,no,cellular,26,may,253,1,-1,0,unknown,yes +21,admin.,single,secondary,no,524,no,no,cellular,26,may,185,1,-1,0,unknown,yes +41,self-employed,single,tertiary,no,1081,no,no,cellular,27,may,229,3,-1,0,unknown,yes +30,admin.,single,secondary,no,983,yes,no,cellular,27,may,189,2,-1,0,unknown,yes +47,admin.,divorced,secondary,no,2232,no,no,cellular,27,may,439,1,103,1,success,yes +37,admin.,married,secondary,no,1967,no,no,cellular,27,may,242,1,212,1,success,yes +34,admin.,married,secondary,no,1406,yes,no,cellular,27,may,145,1,-1,0,unknown,yes +28,admin.,single,secondary,no,157,no,no,cellular,27,may,155,3,-1,0,unknown,yes +24,admin.,single,tertiary,no,0,yes,no,cellular,27,may,122,2,-1,0,unknown,yes +26,admin.,single,secondary,no,2509,no,no,cellular,27,may,776,3,97,3,success,yes +35,technician,married,secondary,no,1368,no,no,cellular,27,may,329,1,41,2,other,yes +54,retired,divorced,tertiary,no,3076,no,no,cellular,27,may,367,2,-1,0,unknown,yes +44,management,married,tertiary,no,7818,no,no,cellular,27,may,412,1,-1,0,unknown,yes +56,admin.,single,secondary,no,4118,no,no,telephone,27,may,165,1,-1,0,unknown,yes +25,admin.,single,tertiary,no,760,yes,no,cellular,27,may,223,3,89,2,failure,yes +25,student,single,unknown,no,277,no,no,cellular,27,may,311,2,-1,0,unknown,yes +50,management,married,tertiary,no,253,no,no,cellular,28,may,513,9,-1,0,unknown,yes +55,admin.,married,secondary,no,602,no,no,cellular,1,jun,324,3,90,2,success,yes +57,management,married,tertiary,no,473,no,no,cellular,1,jun,295,1,-1,0,unknown,yes +48,management,married,tertiary,no,1167,yes,yes,cellular,1,jun,264,1,-1,0,unknown,yes +25,unemployed,single,tertiary,no,343,no,no,cellular,1,jun,377,1,-1,0,unknown,yes +49,management,married,tertiary,no,1808,yes,no,cellular,1,jun,205,1,95,1,success,yes +25,technician,single,secondary,no,1199,no,no,cellular,1,jun,287,1,-1,0,unknown,yes +38,housemaid,divorced,secondary,no,70,no,no,cellular,1,jun,263,1,-1,0,unknown,yes +45,blue-collar,married,secondary,no,1723,no,no,cellular,1,jun,166,2,-1,0,unknown,yes +33,management,married,tertiary,no,1323,no,no,cellular,1,jun,327,1,-1,0,unknown,yes +45,admin.,married,tertiary,no,2552,no,no,cellular,1,jun,69,1,293,7,failure,yes +26,management,single,secondary,no,2613,no,no,cellular,1,jun,326,1,-1,0,unknown,yes +49,admin.,married,secondary,no,0,no,no,cellular,1,jun,1460,1,-1,0,unknown,yes +25,technician,single,secondary,no,938,no,no,cellular,1,jun,1048,1,-1,0,unknown,yes +53,technician,married,secondary,no,284,no,no,cellular,1,jun,781,1,-1,0,unknown,yes +43,management,married,tertiary,no,1059,no,yes,cellular,1,jun,335,2,-1,0,unknown,yes +49,technician,married,secondary,no,1684,no,yes,cellular,1,jun,412,2,-1,0,unknown,yes +54,management,married,tertiary,no,534,no,no,cellular,1,jun,177,2,-1,0,unknown,yes +47,technician,married,secondary,no,293,no,no,cellular,1,jun,251,1,90,1,success,yes +34,blue-collar,married,secondary,no,262,no,no,cellular,1,jun,339,1,-1,0,unknown,yes +54,services,divorced,secondary,no,0,no,no,cellular,1,jun,174,1,81,2,success,yes +43,management,divorced,tertiary,no,2367,no,no,cellular,1,jun,114,1,38,2,other,yes +23,services,single,secondary,no,31,no,no,cellular,1,jun,192,1,-1,0,unknown,yes +48,management,married,tertiary,no,3842,no,no,cellular,1,jun,215,2,-1,0,unknown,yes +30,self-employed,single,tertiary,no,3343,no,no,cellular,1,jun,235,1,-1,0,unknown,yes +38,unemployed,single,secondary,no,804,no,no,cellular,1,jun,1087,1,-1,0,unknown,yes +34,student,single,unknown,no,1011,no,no,cellular,1,jun,253,1,-1,0,unknown,yes +52,admin.,single,secondary,no,-528,yes,yes,cellular,1,jun,1144,2,-1,0,unknown,yes +27,management,single,tertiary,no,1840,no,no,cellular,1,jun,220,1,28,8,other,yes +40,blue-collar,married,secondary,no,1451,no,no,cellular,1,jun,314,1,-1,0,unknown,yes +47,management,married,tertiary,no,2351,no,no,cellular,2,jun,163,2,84,1,success,yes +26,management,single,tertiary,no,1623,no,no,cellular,2,jun,479,1,-1,0,unknown,yes +37,admin.,married,secondary,no,597,no,no,cellular,2,jun,395,1,-1,0,unknown,yes +34,management,married,tertiary,no,611,no,no,cellular,2,jun,350,1,-1,0,unknown,yes +26,admin.,single,tertiary,no,313,no,yes,cellular,2,jun,199,1,96,2,success,yes +44,management,married,tertiary,no,1954,no,no,cellular,2,jun,294,1,-1,0,unknown,yes +29,management,single,tertiary,no,307,yes,no,cellular,2,jun,690,1,-1,0,unknown,yes +40,unemployed,single,tertiary,no,7968,no,no,cellular,2,jun,596,1,-1,0,unknown,yes +43,blue-collar,married,secondary,no,2160,no,no,cellular,2,jun,169,1,-1,0,unknown,yes +52,technician,divorced,secondary,no,1005,yes,no,cellular,2,jun,195,1,-1,0,unknown,yes +38,admin.,married,tertiary,no,1988,no,no,cellular,2,jun,103,1,67,4,success,yes +33,services,divorced,secondary,no,1117,no,no,cellular,2,jun,417,1,-1,0,unknown,yes +50,technician,married,secondary,no,3370,no,no,cellular,2,jun,160,2,-1,0,unknown,yes +53,admin.,married,secondary,no,109,no,no,telephone,2,jun,270,1,-1,0,unknown,yes +42,services,married,secondary,no,1376,yes,no,cellular,2,jun,271,2,92,4,success,yes +49,technician,married,tertiary,no,523,yes,no,cellular,2,jun,712,1,60,3,failure,yes +27,technician,single,tertiary,no,15161,no,no,cellular,2,jun,74,1,120,1,success,yes +32,admin.,married,tertiary,no,653,no,no,cellular,2,jun,84,1,-1,0,unknown,yes +31,student,single,tertiary,no,64,no,no,cellular,2,jun,261,2,-1,0,unknown,yes +29,technician,single,secondary,no,1165,no,no,cellular,2,jun,245,1,-1,0,unknown,yes +49,services,married,secondary,no,7019,yes,no,cellular,2,jun,263,1,368,3,failure,yes +46,blue-collar,married,secondary,no,1568,yes,no,cellular,2,jun,310,1,55,6,other,yes +57,blue-collar,married,primary,no,3109,no,no,cellular,2,jun,482,2,-1,0,unknown,yes +28,technician,single,tertiary,no,4987,no,no,cellular,2,jun,924,2,113,21,success,yes +37,entrepreneur,married,tertiary,no,189,no,no,cellular,2,jun,253,2,-1,0,unknown,yes +38,blue-collar,married,secondary,no,2467,no,no,cellular,2,jun,192,1,-1,0,unknown,yes +49,management,married,tertiary,no,5887,no,no,cellular,2,jun,181,3,293,2,failure,yes +35,technician,married,tertiary,no,1354,no,no,cellular,2,jun,250,2,-1,0,unknown,yes +29,technician,married,secondary,no,23,yes,no,cellular,2,jun,163,1,55,2,failure,yes +52,technician,married,secondary,no,0,no,no,cellular,2,jun,541,3,-1,0,unknown,yes +34,unemployed,married,secondary,no,978,no,no,cellular,3,jun,262,2,71,1,success,yes +60,technician,married,secondary,no,294,no,no,telephone,3,jun,206,4,-1,0,unknown,yes +32,self-employed,married,secondary,no,409,no,no,cellular,3,jun,115,2,86,2,success,yes +27,admin.,single,secondary,no,261,yes,yes,cellular,3,jun,592,4,-1,0,unknown,yes +55,entrepreneur,married,secondary,no,27624,no,no,telephone,3,jun,437,1,-1,0,unknown,yes +29,management,single,tertiary,no,3846,no,no,cellular,3,jun,313,2,-1,0,unknown,yes +42,blue-collar,married,secondary,no,2913,no,no,cellular,3,jun,705,1,195,1,failure,yes +33,management,divorced,tertiary,no,2240,no,no,cellular,3,jun,198,1,-1,0,unknown,yes +29,blue-collar,married,primary,no,5,no,no,cellular,3,jun,321,1,-1,0,unknown,yes +39,admin.,married,secondary,no,150,no,no,cellular,3,jun,296,4,-1,0,unknown,yes +31,technician,single,tertiary,no,882,no,no,cellular,3,jun,411,1,-1,0,unknown,yes +60,management,divorced,tertiary,no,366,no,no,cellular,3,jun,593,1,-1,0,unknown,yes +25,student,single,tertiary,no,1189,no,no,cellular,3,jun,165,1,-1,0,unknown,yes +45,admin.,married,secondary,no,204,yes,no,cellular,3,jun,224,2,-1,0,unknown,yes +29,management,single,tertiary,no,637,yes,no,cellular,3,jun,340,1,119,1,failure,yes +55,management,divorced,tertiary,no,2383,no,no,cellular,3,jun,591,2,-1,0,unknown,yes +26,technician,single,secondary,no,1231,yes,no,cellular,3,jun,385,2,96,5,success,yes +30,management,single,tertiary,no,3340,no,no,cellular,3,jun,238,3,-1,0,unknown,yes +54,admin.,divorced,secondary,no,200,no,no,cellular,3,jun,170,1,-1,0,unknown,yes +39,blue-collar,single,tertiary,no,48,no,no,cellular,3,jun,539,1,-1,0,unknown,yes +26,management,single,tertiary,no,2786,no,no,cellular,3,jun,300,2,72,1,success,yes +57,retired,married,secondary,no,5313,no,no,cellular,3,jun,200,1,-1,0,unknown,yes +39,unemployed,married,tertiary,no,201,no,no,cellular,3,jun,699,1,119,1,failure,yes +25,blue-collar,single,secondary,no,389,no,no,cellular,3,jun,837,1,-1,0,unknown,yes +43,blue-collar,married,primary,no,3917,no,no,cellular,3,jun,725,2,93,1,success,yes +32,blue-collar,married,secondary,no,889,yes,no,cellular,3,jun,1076,2,85,3,other,yes +43,management,divorced,tertiary,no,481,yes,no,cellular,3,jun,187,1,20,1,other,yes +50,management,divorced,tertiary,no,810,no,no,cellular,4,jun,510,3,-1,0,unknown,yes +35,services,married,secondary,no,52,yes,no,cellular,4,jun,328,2,94,4,success,yes +37,management,married,tertiary,no,108,yes,yes,cellular,4,jun,262,2,-1,0,unknown,yes +42,admin.,single,secondary,no,684,no,no,cellular,4,jun,207,1,-1,0,unknown,yes +27,management,married,secondary,no,2071,no,no,cellular,4,jun,449,1,-1,0,unknown,yes +27,services,single,secondary,no,339,no,no,cellular,4,jun,182,1,-1,0,unknown,yes +29,management,single,tertiary,no,572,no,no,cellular,4,jun,224,1,-1,0,unknown,yes +29,student,single,secondary,no,1779,no,no,cellular,4,jun,400,1,-1,0,unknown,yes +26,student,single,secondary,no,132,no,no,cellular,4,jun,217,1,-1,0,unknown,yes +39,admin.,single,tertiary,no,22086,no,no,cellular,4,jun,160,1,-1,0,unknown,yes +41,services,married,secondary,no,0,yes,yes,cellular,4,jun,352,2,122,2,failure,yes +29,management,married,tertiary,no,205,no,no,cellular,4,jun,787,1,-1,0,unknown,yes +33,technician,single,tertiary,no,317,yes,no,cellular,4,jun,323,1,80,14,other,yes +32,management,married,tertiary,no,4945,no,no,cellular,4,jun,160,1,119,2,other,yes +30,management,married,tertiary,no,419,yes,no,cellular,4,jun,194,1,-1,0,unknown,yes +38,technician,single,secondary,no,1130,no,no,cellular,4,jun,96,2,98,1,success,yes +55,admin.,married,secondary,no,1662,no,no,cellular,4,jun,94,2,-1,0,unknown,yes +25,admin.,single,secondary,no,1871,no,no,cellular,4,jun,136,1,-1,0,unknown,yes +38,entrepreneur,divorced,secondary,no,1190,yes,no,cellular,4,jun,81,2,391,3,failure,yes +35,blue-collar,married,secondary,no,563,no,yes,cellular,4,jun,147,1,119,3,failure,yes +31,unemployed,married,secondary,no,6,no,no,cellular,4,jun,121,4,-1,0,unknown,yes +25,services,single,secondary,no,594,no,no,cellular,4,jun,89,2,-1,0,unknown,yes +31,management,single,tertiary,no,617,no,no,cellular,4,jun,1161,1,97,2,success,yes +27,student,single,secondary,no,538,no,no,cellular,4,jun,124,2,-1,0,unknown,yes +34,admin.,single,secondary,no,303,no,no,cellular,4,jun,282,3,126,3,failure,yes +40,admin.,single,secondary,no,985,yes,no,cellular,4,jun,592,3,50,8,failure,yes +27,admin.,married,secondary,no,897,no,no,cellular,5,jun,397,1,-1,0,unknown,yes +28,management,single,secondary,no,171,no,no,cellular,5,jun,324,1,87,1,success,yes +28,management,single,secondary,no,1633,no,no,cellular,5,jun,275,1,-1,0,unknown,yes +35,admin.,divorced,secondary,no,1085,no,no,cellular,5,jun,199,1,86,7,success,yes +58,retired,married,primary,no,1980,no,no,cellular,5,jun,255,1,-1,0,unknown,yes +44,technician,married,tertiary,no,1933,no,no,cellular,5,jun,462,1,-1,0,unknown,yes +57,retired,married,secondary,no,1841,no,no,telephone,5,jun,302,1,-1,0,unknown,yes +25,self-employed,single,tertiary,no,42,yes,no,cellular,5,jun,149,1,94,1,success,yes +21,student,single,secondary,no,794,no,no,cellular,5,jun,191,1,-1,0,unknown,yes +49,technician,married,secondary,no,905,no,no,cellular,5,jun,1543,1,-1,0,unknown,yes +54,management,married,tertiary,no,8295,no,no,cellular,5,jun,207,1,-1,0,unknown,yes +59,retired,married,primary,no,0,no,no,cellular,5,jun,493,2,-1,0,unknown,yes +28,management,single,tertiary,no,874,yes,no,cellular,5,jun,509,1,-1,0,unknown,yes +37,blue-collar,married,secondary,no,4321,no,no,cellular,5,jun,657,1,-1,0,unknown,yes +30,technician,single,tertiary,no,0,yes,no,cellular,5,jun,159,2,-1,0,unknown,yes +35,housemaid,single,primary,no,745,no,no,telephone,5,jun,522,3,-1,0,unknown,yes +31,management,single,tertiary,no,924,no,no,cellular,5,jun,207,2,98,1,success,yes +41,unemployed,single,primary,no,216,no,no,cellular,5,jun,577,3,-1,0,unknown,yes +30,unemployed,single,tertiary,no,1159,no,no,telephone,5,jun,366,1,-1,0,unknown,yes +28,self-employed,single,tertiary,no,3290,no,no,cellular,5,jun,201,2,-1,0,unknown,yes +31,unemployed,single,secondary,no,582,yes,no,cellular,5,jun,548,2,-1,0,unknown,yes +53,management,divorced,tertiary,no,380,no,yes,cellular,5,jun,438,2,-1,0,unknown,yes +22,blue-collar,single,secondary,no,682,no,no,cellular,5,jun,126,2,91,1,success,yes +36,services,married,primary,no,92,yes,no,cellular,5,jun,244,7,-1,0,unknown,yes +33,technician,single,secondary,no,66,no,no,cellular,5,jun,157,2,-1,0,unknown,yes +31,technician,single,tertiary,no,252,no,no,cellular,8,jun,107,3,-1,0,unknown,yes +49,admin.,married,tertiary,no,6574,no,no,cellular,8,jun,138,3,-1,0,unknown,yes +51,self-employed,married,unknown,no,2094,no,no,cellular,8,jun,458,6,-1,0,unknown,yes +34,technician,married,secondary,no,294,yes,no,cellular,8,jun,301,3,-1,0,unknown,yes +35,blue-collar,married,primary,no,1177,no,no,cellular,8,jun,243,4,-1,0,unknown,yes +32,admin.,single,tertiary,no,8866,no,no,cellular,9,jun,234,2,83,2,success,yes +36,entrepreneur,divorced,tertiary,no,3407,no,no,cellular,9,jun,993,4,85,4,success,yes +31,management,single,tertiary,no,5205,no,no,cellular,9,jun,529,2,-1,0,unknown,yes +25,technician,single,tertiary,no,3630,no,no,telephone,9,jun,221,7,-1,0,unknown,yes +25,services,single,tertiary,no,12,no,no,cellular,12,jun,126,6,-1,0,unknown,yes +60,management,married,secondary,no,544,no,no,cellular,12,jun,95,7,357,2,failure,yes +40,self-employed,single,tertiary,no,10346,no,no,cellular,15,jun,491,2,207,1,other,yes +50,management,married,tertiary,no,1612,no,no,cellular,15,jun,532,2,98,2,other,yes +32,management,single,tertiary,no,718,yes,no,cellular,15,jun,95,1,-1,0,unknown,yes +60,admin.,married,secondary,no,3547,no,no,telephone,15,jun,351,6,-1,0,unknown,yes +32,services,married,secondary,no,914,no,no,cellular,15,jun,372,1,-1,0,unknown,yes +52,entrepreneur,married,secondary,no,1306,no,no,cellular,15,jun,288,1,-1,0,unknown,yes +59,technician,married,secondary,no,259,no,no,cellular,15,jun,415,1,89,1,success,yes +56,retired,married,secondary,no,-1206,yes,no,cellular,15,jun,382,2,-1,0,unknown,yes +47,management,single,tertiary,no,372,no,no,cellular,15,jun,257,1,-1,0,unknown,yes +43,management,married,tertiary,no,3518,no,no,cellular,15,jun,181,2,-1,0,unknown,yes +25,services,single,secondary,no,505,no,no,cellular,15,jun,284,1,-1,0,unknown,yes +31,student,single,secondary,no,1776,no,no,cellular,15,jun,220,1,207,1,other,yes +27,management,single,tertiary,no,20585,no,no,cellular,15,jun,188,1,-1,0,unknown,yes +26,admin.,married,secondary,no,1595,no,no,cellular,15,jun,155,1,105,1,failure,yes +37,admin.,single,tertiary,no,1000,yes,no,cellular,15,jun,322,1,90,1,success,yes +27,admin.,single,tertiary,no,138,no,no,cellular,15,jun,89,2,-1,0,unknown,yes +49,management,married,tertiary,no,561,no,no,cellular,15,jun,173,1,-1,0,unknown,yes +26,management,single,tertiary,no,170,no,no,cellular,15,jun,129,1,-1,0,unknown,yes +28,management,single,tertiary,no,502,no,no,cellular,16,jun,136,2,-1,0,unknown,yes +33,blue-collar,married,secondary,no,379,yes,yes,cellular,16,jun,263,2,-1,0,unknown,yes +31,technician,married,unknown,no,14533,no,no,cellular,16,jun,245,2,-1,0,unknown,yes +32,services,married,secondary,no,689,yes,yes,cellular,16,jun,162,3,-1,0,unknown,yes +30,technician,single,secondary,no,2567,no,no,cellular,18,jun,813,4,-1,0,unknown,yes +34,management,married,tertiary,no,443,no,no,cellular,18,jun,235,3,-1,0,unknown,yes +58,retired,married,primary,no,2074,no,no,cellular,18,jun,259,2,-1,0,unknown,yes +34,management,married,tertiary,no,2374,yes,yes,cellular,18,jun,270,2,314,2,failure,yes +26,services,single,secondary,no,1347,no,no,telephone,18,jun,280,6,92,5,other,yes +49,management,single,tertiary,no,7443,no,no,telephone,19,jun,293,5,211,2,failure,yes +57,management,married,tertiary,no,10583,no,no,cellular,22,jun,295,3,-1,0,unknown,yes +83,retired,married,primary,no,425,no,no,telephone,22,jun,883,1,140,1,failure,yes +61,management,married,tertiary,no,997,no,no,cellular,22,jun,269,1,104,1,success,yes +64,retired,married,secondary,no,5966,yes,no,cellular,22,jun,983,1,-1,0,unknown,yes +37,admin.,married,secondary,no,2061,yes,yes,cellular,22,jun,459,1,109,3,failure,yes +68,retired,married,secondary,no,0,no,no,cellular,22,jun,586,1,-1,0,unknown,yes +71,retired,married,tertiary,no,2887,no,no,cellular,30,jun,128,1,-1,0,unknown,yes +54,management,married,tertiary,no,1464,no,no,cellular,30,jun,157,1,-1,0,unknown,yes +37,management,married,tertiary,no,1315,no,no,cellular,30,jun,224,1,-1,0,unknown,yes +22,student,single,unknown,no,466,no,no,cellular,30,jun,377,1,-1,0,unknown,yes +44,management,married,tertiary,no,2383,no,no,cellular,1,jul,571,2,-1,0,unknown,yes +37,entrepreneur,married,tertiary,no,1649,no,yes,cellular,1,jul,140,3,-1,0,unknown,yes +72,self-employed,married,tertiary,no,132,no,no,cellular,1,jul,260,2,65,1,success,yes +69,retired,divorced,primary,no,482,no,no,cellular,2,jul,260,2,-1,0,unknown,yes +41,blue-collar,married,secondary,no,203,no,no,cellular,2,jul,342,2,-1,0,unknown,yes +44,blue-collar,married,secondary,no,88,yes,no,cellular,2,jul,275,1,-1,0,unknown,yes +32,services,single,secondary,no,2881,no,no,cellular,2,jul,356,1,-1,0,unknown,yes +79,retired,married,secondary,no,668,no,no,telephone,2,jul,363,1,-1,0,unknown,yes +33,technician,married,secondary,no,73,yes,no,cellular,2,jul,218,1,-1,0,unknown,yes +45,management,married,tertiary,no,1309,no,no,cellular,2,jul,367,1,-1,0,unknown,yes +40,management,married,tertiary,no,2763,yes,no,cellular,2,jul,566,1,395,2,success,yes +42,entrepreneur,married,secondary,no,2959,yes,no,telephone,2,jul,711,1,342,1,failure,yes +30,technician,single,secondary,no,930,no,no,cellular,2,jul,396,1,-1,0,unknown,yes +28,management,single,tertiary,no,12956,yes,no,cellular,2,jul,940,1,399,3,success,yes +58,housemaid,divorced,secondary,no,0,no,no,cellular,2,jul,478,2,-1,0,unknown,yes +39,admin.,divorced,secondary,no,19,yes,no,cellular,2,jul,503,2,147,5,success,yes +31,blue-collar,married,secondary,no,625,yes,no,cellular,2,jul,135,2,49,3,failure,yes +45,admin.,married,unknown,no,5511,no,no,cellular,2,jul,272,1,-1,0,unknown,yes +56,blue-collar,married,primary,no,1137,no,no,telephone,2,jul,176,1,-1,0,unknown,yes +46,management,divorced,tertiary,no,1329,no,no,cellular,3,jul,247,2,-1,0,unknown,yes +56,retired,married,secondary,no,1044,no,no,telephone,3,jul,353,2,-1,0,unknown,yes +27,services,single,secondary,no,302,no,no,cellular,3,jul,203,1,-1,0,unknown,yes +30,unemployed,married,tertiary,no,330,no,no,cellular,3,jul,264,1,80,1,success,yes +26,self-employed,single,tertiary,no,2857,no,no,cellular,3,jul,446,1,-1,0,unknown,yes +35,unemployed,single,primary,no,68,no,no,cellular,3,jul,175,1,-1,0,unknown,yes +52,blue-collar,married,primary,no,1524,no,no,cellular,3,jul,1007,6,-1,0,unknown,yes +54,admin.,married,secondary,no,1633,no,no,cellular,3,jul,409,2,-1,0,unknown,yes +41,entrepreneur,married,primary,no,0,no,no,cellular,3,jul,438,2,389,1,other,yes +24,management,single,tertiary,no,507,no,no,cellular,3,jul,257,1,-1,0,unknown,yes +28,blue-collar,single,secondary,no,643,no,no,cellular,3,jul,308,2,-1,0,unknown,yes +62,management,married,tertiary,no,2785,no,no,cellular,6,jul,270,3,-1,0,unknown,yes +52,technician,married,secondary,no,137,no,no,cellular,6,jul,227,2,-1,0,unknown,yes +23,services,single,secondary,no,870,no,no,cellular,6,jul,316,4,-1,0,unknown,yes +82,retired,married,primary,no,8603,no,no,cellular,7,jul,429,1,-1,0,unknown,yes +63,retired,married,secondary,no,18016,no,no,cellular,7,jul,371,1,-1,0,unknown,yes +32,admin.,married,secondary,no,51,yes,yes,cellular,7,jul,297,1,-1,0,unknown,yes +31,management,married,tertiary,no,1032,no,no,cellular,7,jul,284,1,-1,0,unknown,yes +37,services,married,secondary,no,981,no,no,cellular,7,jul,682,2,386,1,success,yes +40,technician,single,tertiary,no,431,no,no,cellular,7,jul,180,2,-1,0,unknown,yes +66,retired,married,secondary,no,203,no,no,cellular,7,jul,376,1,-1,0,unknown,yes +37,management,married,tertiary,no,3737,no,no,cellular,7,jul,224,1,-1,0,unknown,yes +38,unemployed,married,primary,no,7005,yes,no,cellular,7,jul,370,1,412,1,failure,yes +27,student,single,secondary,no,111,no,no,cellular,7,jul,495,2,-1,0,unknown,yes +58,retired,married,primary,no,565,no,no,telephone,7,jul,876,1,-1,0,unknown,yes +49,housemaid,married,primary,no,889,no,no,telephone,7,jul,388,1,-1,0,unknown,yes +31,management,single,secondary,no,202,yes,no,cellular,8,jul,167,1,62,1,failure,yes +31,management,single,tertiary,no,307,no,no,cellular,8,jul,361,1,229,2,failure,yes +38,student,married,unknown,no,0,no,no,cellular,8,jul,341,1,385,1,failure,yes +79,retired,married,primary,no,429,no,no,telephone,8,jul,1006,2,-1,0,unknown,yes +71,retired,married,tertiary,no,4388,no,no,cellular,8,jul,896,2,-1,0,unknown,yes +52,technician,married,tertiary,no,2557,no,no,cellular,8,jul,340,1,156,1,other,yes +55,management,married,unknown,no,3122,no,no,cellular,8,jul,349,1,-1,0,unknown,yes +46,blue-collar,married,secondary,no,922,yes,no,telephone,8,jul,576,1,-1,0,unknown,yes +28,management,single,tertiary,no,3796,no,no,cellular,8,jul,315,2,-1,0,unknown,yes +22,student,single,secondary,no,185,no,no,cellular,8,jul,153,1,-1,0,unknown,yes +49,management,single,tertiary,no,151,yes,no,cellular,8,jul,97,3,-1,0,unknown,yes +20,student,single,unknown,no,829,no,no,cellular,9,jul,253,2,-1,0,unknown,yes +19,student,single,primary,no,103,no,no,cellular,10,jul,104,2,-1,0,unknown,yes +34,blue-collar,single,primary,no,79,no,no,telephone,10,jul,336,4,-1,0,unknown,yes +73,management,married,tertiary,no,1609,no,no,cellular,14,jul,169,2,-1,0,unknown,yes +27,management,single,tertiary,no,2489,no,no,cellular,15,jul,323,2,163,2,other,yes +59,blue-collar,divorced,primary,no,989,no,no,cellular,20,jul,125,2,-1,0,unknown,yes +25,student,single,tertiary,no,58,no,no,cellular,24,jul,139,5,-1,0,unknown,yes +44,entrepreneur,single,unknown,no,323,no,no,cellular,28,jul,332,2,181,2,failure,yes +28,management,single,tertiary,no,5474,no,no,cellular,28,jul,486,5,-1,0,unknown,yes +25,management,single,tertiary,no,219,no,no,cellular,4,aug,576,1,96,1,success,yes +28,management,married,tertiary,no,1240,no,no,cellular,4,aug,849,1,-1,0,unknown,yes +52,admin.,married,secondary,no,1228,yes,yes,cellular,4,aug,218,1,-1,0,unknown,yes +57,management,married,tertiary,no,1660,no,no,cellular,4,aug,642,1,-1,0,unknown,yes +49,management,divorced,tertiary,no,914,no,no,cellular,4,aug,185,1,-1,0,unknown,yes +33,technician,married,tertiary,no,1699,no,no,cellular,4,aug,600,1,-1,0,unknown,yes +47,technician,married,secondary,no,1167,yes,no,cellular,4,aug,505,1,96,6,success,yes +68,retired,married,secondary,no,19317,yes,no,cellular,4,aug,249,1,-1,0,unknown,yes +40,technician,single,tertiary,no,1646,yes,no,cellular,4,aug,173,1,92,5,success,yes +46,management,married,tertiary,no,242,no,no,cellular,4,aug,120,2,96,1,success,yes +29,technician,single,secondary,no,382,no,no,cellular,5,aug,409,4,-1,0,unknown,yes +55,management,divorced,tertiary,no,2383,no,no,cellular,5,aug,1019,2,63,2,success,yes +30,self-employed,married,tertiary,no,2666,no,no,cellular,5,aug,475,2,93,4,success,yes +49,admin.,divorced,secondary,no,1718,no,yes,cellular,5,aug,211,1,-1,0,unknown,yes +48,management,married,tertiary,no,1147,no,no,cellular,5,aug,389,1,64,2,success,yes +21,student,single,secondary,no,216,no,no,cellular,5,aug,414,1,-1,0,unknown,yes +45,admin.,married,secondary,no,153,no,no,cellular,5,aug,277,1,-1,0,unknown,yes +43,management,married,tertiary,no,1791,no,no,cellular,5,aug,254,1,-1,0,unknown,yes +47,management,single,tertiary,no,86,no,no,cellular,5,aug,253,1,97,4,success,yes +27,management,single,tertiary,no,6791,no,no,cellular,5,aug,179,2,69,26,other,yes +20,student,married,unknown,no,292,no,no,cellular,5,aug,385,2,93,1,failure,yes +37,unemployed,single,tertiary,no,1291,no,no,cellular,5,aug,150,1,97,2,success,yes +61,management,married,tertiary,no,175,no,no,telephone,5,aug,270,2,-1,0,unknown,yes +57,services,single,secondary,no,0,no,no,cellular,6,aug,355,1,-1,0,unknown,yes +40,management,married,tertiary,no,0,no,no,cellular,6,aug,131,2,98,6,success,yes +53,admin.,divorced,secondary,no,0,yes,yes,cellular,6,aug,1452,1,98,2,failure,yes +65,unknown,married,unknown,no,4717,no,no,telephone,6,aug,256,1,-1,0,unknown,yes +67,retired,married,tertiary,no,701,no,no,cellular,6,aug,254,2,-1,0,unknown,yes +66,retired,married,tertiary,no,3,no,no,cellular,6,aug,550,1,-1,0,unknown,yes +67,management,married,tertiary,no,405,no,no,cellular,7,aug,345,2,-1,0,unknown,yes +57,retired,married,secondary,no,168,no,no,cellular,7,aug,342,1,-1,0,unknown,yes +38,admin.,married,tertiary,no,4297,no,no,cellular,7,aug,206,2,-1,0,unknown,yes +56,management,divorced,tertiary,no,10532,no,no,cellular,7,aug,324,1,-1,0,unknown,yes +46,management,married,tertiary,no,4693,no,yes,cellular,7,aug,79,1,394,2,failure,yes +69,technician,married,secondary,no,9064,no,no,cellular,7,aug,714,1,-1,0,unknown,yes +32,services,single,secondary,no,6983,no,no,cellular,7,aug,255,1,-1,0,unknown,yes +72,retired,married,tertiary,no,2,no,no,cellular,7,aug,147,2,-1,0,unknown,yes +41,admin.,married,tertiary,no,1536,no,no,cellular,7,aug,273,1,95,2,failure,yes +72,retired,married,primary,no,1612,no,no,cellular,7,aug,530,2,-1,0,unknown,yes +33,unemployed,married,secondary,no,1211,no,no,cellular,7,aug,456,1,-1,0,unknown,yes +37,admin.,married,secondary,no,96,no,no,cellular,7,aug,155,1,99,2,success,yes +34,management,married,tertiary,no,0,yes,no,cellular,7,aug,262,1,99,2,success,yes +44,admin.,single,secondary,no,1534,no,no,cellular,7,aug,166,1,99,2,other,yes +42,services,single,secondary,no,3403,yes,no,cellular,7,aug,215,1,99,1,failure,yes +58,unemployed,married,secondary,no,687,yes,no,cellular,7,aug,221,1,99,2,success,yes +34,technician,married,tertiary,no,7050,no,no,cellular,7,aug,130,1,-1,0,unknown,yes +55,entrepreneur,divorced,secondary,no,538,yes,no,cellular,7,aug,353,2,-1,0,unknown,yes +71,retired,married,primary,no,2600,no,no,cellular,7,aug,212,1,-1,0,unknown,yes +23,student,single,secondary,no,0,no,no,cellular,7,aug,217,1,99,7,success,yes +60,management,single,tertiary,no,1034,yes,no,cellular,7,aug,231,3,-1,0,unknown,yes +18,student,single,unknown,no,108,no,no,cellular,10,aug,167,1,-1,0,unknown,yes +54,technician,married,secondary,no,10185,no,no,cellular,10,aug,559,1,70,2,other,yes +59,retired,divorced,tertiary,no,3444,no,no,cellular,10,aug,252,1,185,2,success,yes +32,self-employed,single,tertiary,no,1815,no,no,telephone,10,aug,235,1,102,2,failure,yes +61,self-employed,divorced,tertiary,no,52587,no,no,cellular,10,aug,290,1,-1,0,unknown,yes +31,management,married,tertiary,no,10884,no,no,cellular,10,aug,294,3,98,2,success,yes +42,blue-collar,married,primary,no,201,yes,no,cellular,11,aug,265,1,103,3,success,yes +42,unemployed,married,unknown,no,190,no,no,cellular,11,aug,704,2,-1,0,unknown,yes +42,services,single,tertiary,no,94,yes,no,cellular,11,aug,176,2,90,4,failure,yes +70,housemaid,divorced,primary,no,1311,no,no,cellular,11,aug,651,1,-1,0,unknown,yes +57,technician,married,secondary,no,589,yes,no,cellular,11,aug,167,1,190,5,failure,yes +60,retired,married,secondary,no,1853,no,no,cellular,11,aug,408,1,-1,0,unknown,yes +53,blue-collar,divorced,primary,no,4401,no,no,telephone,11,aug,254,1,-1,0,unknown,yes +48,unemployed,divorced,secondary,no,201,no,no,cellular,11,aug,140,1,-1,0,unknown,yes +30,management,single,tertiary,no,533,no,no,cellular,11,aug,229,2,99,4,success,yes +39,management,single,tertiary,no,3840,yes,no,cellular,11,aug,315,2,-1,0,unknown,yes +42,technician,married,secondary,no,994,yes,no,cellular,11,aug,149,1,78,5,failure,yes +26,admin.,single,secondary,no,96,no,no,cellular,11,aug,349,1,70,3,failure,yes +46,management,married,tertiary,no,1600,yes,yes,cellular,11,aug,1244,1,-1,0,unknown,yes +40,admin.,single,secondary,no,100,yes,no,cellular,11,aug,221,1,461,1,success,yes +39,admin.,married,secondary,no,260,yes,no,cellular,11,aug,175,2,116,2,failure,yes +58,self-employed,married,primary,no,1013,yes,no,cellular,11,aug,206,1,461,1,failure,yes +42,blue-collar,married,secondary,no,413,yes,no,cellular,11,aug,589,2,-1,0,unknown,yes +31,services,single,secondary,no,181,no,no,cellular,12,aug,182,1,104,1,success,yes +21,student,single,secondary,no,123,no,no,telephone,12,aug,449,1,-1,0,unknown,yes +35,self-employed,single,tertiary,no,353,no,no,cellular,12,aug,582,1,-1,0,unknown,yes +50,technician,divorced,unknown,no,2794,no,no,cellular,12,aug,1336,2,-1,0,unknown,yes +36,management,single,tertiary,no,3850,yes,no,cellular,12,aug,239,2,100,4,failure,yes +75,retired,married,primary,no,2970,no,no,cellular,12,aug,641,1,-1,0,unknown,yes +20,student,single,primary,no,6991,no,no,cellular,12,aug,178,2,-1,0,unknown,yes +57,admin.,single,secondary,no,2223,no,no,cellular,12,aug,1064,1,-1,0,unknown,yes +41,management,married,tertiary,no,27696,no,no,cellular,12,aug,147,2,104,1,failure,yes +59,technician,married,secondary,no,116,no,no,cellular,12,aug,398,4,422,3,failure,yes +36,management,married,tertiary,no,2987,yes,no,cellular,12,aug,307,1,-1,0,unknown,yes +18,student,single,primary,no,608,no,no,cellular,12,aug,267,1,-1,0,unknown,yes +34,management,single,tertiary,no,48,yes,no,cellular,12,aug,810,3,93,6,failure,yes +55,management,married,primary,no,113,no,no,cellular,12,aug,306,1,457,3,failure,yes +33,blue-collar,single,secondary,no,498,no,no,cellular,12,aug,338,2,104,1,success,yes +43,technician,married,tertiary,no,2643,no,no,cellular,12,aug,188,3,100,5,success,yes +34,services,married,secondary,no,1337,no,no,cellular,12,aug,255,2,104,1,success,yes +35,services,married,unknown,no,618,no,no,cellular,12,aug,293,1,104,1,success,yes +43,technician,single,secondary,no,451,no,no,cellular,12,aug,289,2,-1,0,unknown,yes +74,retired,married,primary,no,0,no,no,telephone,13,aug,562,2,-1,0,unknown,yes +45,unemployed,divorced,primary,yes,11,no,no,cellular,13,aug,489,5,-1,0,unknown,yes +38,blue-collar,married,secondary,no,1165,yes,no,cellular,13,aug,784,3,94,10,failure,yes +32,management,single,tertiary,no,2465,no,no,cellular,13,aug,414,1,-1,0,unknown,yes +29,admin.,single,tertiary,no,41,yes,no,cellular,13,aug,148,2,-1,0,unknown,yes +31,admin.,married,secondary,no,35,no,no,cellular,13,aug,315,2,105,1,success,yes +50,services,married,secondary,no,3169,no,no,cellular,13,aug,399,1,430,1,failure,yes +44,technician,divorced,secondary,no,14,no,no,cellular,13,aug,234,1,-1,0,unknown,yes +23,student,single,secondary,no,431,no,no,cellular,13,aug,496,2,-1,0,unknown,yes +56,management,married,tertiary,no,616,no,no,cellular,13,aug,293,2,105,2,success,yes +76,retired,married,primary,no,3324,no,no,cellular,13,aug,227,2,192,1,failure,yes +28,technician,single,secondary,no,113,no,no,cellular,13,aug,204,3,105,1,failure,yes +34,management,single,tertiary,no,13014,no,no,cellular,13,aug,738,1,-1,0,unknown,yes +56,retired,married,primary,no,9367,no,no,cellular,13,aug,320,2,101,2,success,yes +45,management,single,tertiary,no,2067,yes,no,cellular,13,aug,393,2,462,1,success,yes +36,technician,single,secondary,no,376,no,no,cellular,13,aug,479,1,-1,0,unknown,yes +57,retired,single,tertiary,no,842,no,no,cellular,13,aug,284,3,-1,0,unknown,yes +49,technician,married,tertiary,no,1235,no,no,cellular,13,aug,354,3,-1,0,unknown,yes +49,management,married,tertiary,no,1,no,no,telephone,13,aug,640,2,101,4,success,yes +37,management,married,tertiary,no,1276,no,no,cellular,14,aug,156,2,-1,0,unknown,yes +46,unemployed,single,tertiary,no,44,no,no,cellular,14,aug,225,1,-1,0,unknown,yes +26,admin.,single,secondary,no,255,no,no,cellular,14,aug,209,2,106,2,success,yes +47,unemployed,married,secondary,no,926,no,no,cellular,14,aug,436,1,403,5,success,yes +36,management,married,primary,no,1506,no,no,cellular,14,aug,326,3,-1,0,unknown,yes +37,student,single,unknown,no,444,no,no,cellular,14,aug,137,1,102,5,success,yes +62,management,married,tertiary,no,557,no,no,cellular,14,aug,185,1,-1,0,unknown,yes +26,blue-collar,single,secondary,no,535,no,no,cellular,14,aug,125,1,-1,0,unknown,yes +45,management,married,tertiary,no,2671,no,no,cellular,14,aug,94,4,-1,0,unknown,yes +63,technician,married,secondary,no,896,yes,no,cellular,14,aug,276,2,-1,0,unknown,yes +25,management,single,tertiary,no,528,no,no,cellular,14,aug,201,1,-1,0,unknown,yes +60,retired,married,unknown,no,209,no,no,cellular,14,aug,391,3,106,1,failure,yes +44,management,married,tertiary,no,226,yes,no,cellular,14,aug,190,3,270,3,failure,yes +33,unemployed,single,tertiary,no,1974,no,no,cellular,14,aug,498,2,191,1,failure,yes +39,entrepreneur,married,tertiary,no,942,yes,no,cellular,14,aug,880,3,267,1,other,yes +46,blue-collar,married,unknown,no,336,yes,no,cellular,14,aug,260,3,457,1,other,yes +42,admin.,married,primary,no,-306,yes,no,cellular,17,aug,308,1,459,1,success,yes +56,management,married,unknown,no,4623,no,no,cellular,17,aug,348,1,-1,0,unknown,yes +82,retired,married,secondary,no,276,no,no,telephone,17,aug,199,1,-1,0,unknown,yes +77,retired,married,tertiary,no,0,no,no,cellular,17,aug,286,1,-1,0,unknown,yes +36,services,single,tertiary,no,1189,no,no,cellular,17,aug,220,1,-1,0,unknown,yes +35,management,single,tertiary,no,431,no,no,cellular,17,aug,343,2,397,1,failure,yes +50,technician,married,secondary,no,2218,yes,no,cellular,17,aug,711,1,-1,0,unknown,yes +62,retired,married,secondary,no,1495,no,no,cellular,17,aug,606,1,196,1,success,yes +26,management,single,tertiary,no,828,yes,no,cellular,17,aug,156,1,199,1,failure,yes +55,management,married,tertiary,no,12972,no,no,telephone,18,aug,205,1,-1,0,unknown,yes +22,student,single,secondary,no,948,no,no,telephone,18,aug,215,1,197,2,failure,yes +30,student,single,secondary,no,48,no,no,cellular,18,aug,161,1,173,1,failure,yes +34,housemaid,married,tertiary,no,0,no,no,cellular,18,aug,148,1,84,2,failure,yes +31,management,married,tertiary,no,537,yes,no,cellular,18,aug,216,1,-1,0,unknown,yes +55,technician,married,secondary,no,1938,no,yes,cellular,18,aug,193,1,386,3,success,yes +49,technician,single,secondary,no,9131,yes,no,cellular,18,aug,532,1,461,5,failure,yes +67,retired,divorced,tertiary,no,443,no,no,cellular,18,aug,441,1,-1,0,unknown,yes +43,admin.,married,secondary,no,132,no,no,cellular,19,aug,574,1,84,3,success,yes +25,technician,single,tertiary,no,3411,no,no,cellular,19,aug,225,2,-1,0,unknown,yes +59,retired,divorced,secondary,no,1,no,no,cellular,19,aug,335,1,-1,0,unknown,yes +44,admin.,married,secondary,no,10905,no,no,cellular,19,aug,240,2,271,1,other,yes +42,management,married,tertiary,no,976,no,no,cellular,19,aug,164,1,-1,0,unknown,yes +29,management,single,tertiary,no,2531,no,no,cellular,19,aug,634,1,-1,0,unknown,yes +32,management,married,tertiary,no,1270,no,no,cellular,19,aug,232,3,-1,0,unknown,yes +30,management,single,tertiary,no,5359,no,no,cellular,19,aug,145,1,84,2,success,yes +38,technician,married,secondary,no,10596,no,no,cellular,19,aug,195,1,197,4,other,yes +22,student,single,tertiary,no,691,no,no,cellular,19,aug,338,1,-1,0,unknown,yes +25,entrepreneur,single,tertiary,no,347,no,no,cellular,20,aug,267,1,-1,0,unknown,yes +34,self-employed,single,tertiary,no,9962,no,no,cellular,20,aug,474,1,-1,0,unknown,yes +27,technician,single,tertiary,no,11862,no,no,cellular,20,aug,217,1,87,6,failure,yes +35,management,single,tertiary,no,1756,no,no,cellular,20,aug,195,1,-1,0,unknown,yes +45,housemaid,married,secondary,no,4068,no,no,cellular,20,aug,184,1,-1,0,unknown,yes +42,management,married,primary,no,5310,yes,no,cellular,20,aug,273,1,90,3,success,yes +20,student,single,secondary,no,215,no,no,cellular,21,aug,228,4,183,1,other,yes +60,admin.,married,secondary,no,106,no,no,cellular,21,aug,216,3,91,1,success,yes +47,management,married,tertiary,no,0,no,yes,cellular,21,aug,374,1,-1,0,unknown,yes +25,student,single,secondary,no,469,no,no,cellular,21,aug,273,1,86,1,other,yes +65,retired,married,secondary,no,2326,no,yes,cellular,21,aug,276,1,-1,0,unknown,yes +50,technician,married,secondary,no,3370,no,no,cellular,21,aug,531,2,80,2,success,yes +22,student,single,secondary,no,144,no,no,cellular,21,aug,116,1,-1,0,unknown,yes +43,admin.,single,secondary,no,733,yes,no,cellular,21,aug,126,1,88,4,success,yes +53,retired,divorced,tertiary,no,-309,yes,no,cellular,21,aug,343,2,428,2,success,yes +71,retired,divorced,secondary,no,5584,no,no,cellular,21,aug,534,3,-1,0,unknown,yes +28,blue-collar,married,secondary,no,61,yes,no,cellular,21,aug,744,1,109,3,success,yes +59,unemployed,married,secondary,no,1047,no,no,cellular,21,aug,438,1,184,3,success,yes +29,management,single,tertiary,no,265,no,no,cellular,24,aug,130,2,94,1,success,yes +51,technician,married,secondary,no,117,no,no,cellular,24,aug,467,2,88,4,other,yes +48,housemaid,married,tertiary,no,5473,no,no,cellular,24,aug,232,2,-1,0,unknown,yes +37,blue-collar,married,primary,no,106,yes,no,cellular,25,aug,511,1,392,13,failure,yes +37,technician,married,tertiary,no,127,yes,no,cellular,25,aug,192,1,193,1,success,yes +64,retired,married,tertiary,no,380,no,no,cellular,25,aug,479,1,-1,0,unknown,yes +69,retired,married,secondary,no,0,no,no,cellular,25,aug,412,2,-1,0,unknown,yes +36,management,married,tertiary,no,255,no,no,cellular,25,aug,242,6,95,4,success,yes +43,services,married,secondary,no,2145,no,no,cellular,25,aug,291,2,95,4,success,yes +63,housemaid,married,primary,no,91,no,no,telephone,26,aug,128,3,-1,0,unknown,yes +70,retired,married,secondary,no,1853,no,no,telephone,26,aug,314,1,-1,0,unknown,yes +60,technician,single,primary,no,11262,no,no,cellular,26,aug,323,1,-1,0,unknown,yes +86,retired,divorced,primary,no,0,no,no,telephone,26,aug,189,1,-1,0,unknown,yes +72,retired,married,secondary,no,1129,no,no,cellular,26,aug,186,1,-1,0,unknown,yes +60,retired,married,tertiary,no,108,no,no,cellular,26,aug,624,1,-1,0,unknown,yes +43,management,single,tertiary,no,1696,yes,no,cellular,26,aug,257,1,474,3,failure,yes +57,management,divorced,unknown,no,854,no,no,cellular,27,aug,700,4,92,1,failure,yes +28,management,single,tertiary,no,223,yes,no,telephone,27,aug,157,2,119,1,other,yes +36,blue-collar,single,secondary,no,40,yes,no,cellular,27,aug,259,3,475,4,success,yes +66,retired,married,secondary,no,2048,no,no,cellular,27,aug,212,1,-1,0,unknown,yes +33,technician,single,tertiary,no,3689,no,no,cellular,27,aug,445,3,-1,0,unknown,yes +36,technician,single,secondary,no,539,yes,no,cellular,27,aug,398,2,477,1,failure,yes +29,technician,single,secondary,no,590,no,no,cellular,27,aug,81,1,94,1,success,yes +62,unemployed,married,secondary,no,780,no,no,cellular,28,aug,162,2,-1,0,unknown,yes +34,blue-collar,married,secondary,no,1464,yes,no,cellular,28,aug,207,3,130,5,other,yes +29,unemployed,single,tertiary,no,1311,no,no,cellular,28,aug,622,1,-1,0,unknown,yes +30,management,married,tertiary,no,7,yes,no,cellular,28,aug,173,1,164,4,other,yes +32,technician,married,tertiary,no,636,yes,no,cellular,28,aug,370,1,116,4,success,yes +39,blue-collar,single,primary,no,24277,no,no,cellular,28,aug,261,1,-1,0,unknown,yes +55,admin.,divorced,secondary,no,1872,no,no,cellular,28,aug,155,2,93,8,failure,yes +36,management,single,tertiary,no,490,no,no,cellular,28,aug,207,8,98,1,failure,yes +27,student,single,tertiary,no,118,no,no,cellular,31,aug,160,3,98,1,failure,yes +45,management,married,tertiary,no,4119,yes,yes,telephone,31,aug,473,2,283,1,success,yes +55,management,married,unknown,no,1504,yes,no,cellular,31,aug,186,3,101,2,success,yes +52,blue-collar,married,secondary,no,2087,yes,no,cellular,31,aug,267,1,474,1,failure,yes +49,management,single,tertiary,no,5689,no,no,cellular,31,aug,470,1,97,3,failure,yes +30,blue-collar,married,primary,no,201,yes,no,cellular,31,aug,219,1,157,12,failure,yes +39,management,married,tertiary,no,119,yes,no,cellular,1,sep,265,2,476,4,success,yes +48,management,divorced,tertiary,no,17964,yes,no,cellular,1,sep,120,1,98,5,success,yes +36,management,married,tertiary,no,1113,no,no,cellular,1,sep,212,1,-1,0,unknown,yes +27,admin.,married,secondary,no,1596,no,no,cellular,1,sep,82,1,-1,0,unknown,yes +51,management,married,tertiary,no,2635,no,no,cellular,1,sep,181,1,98,2,failure,yes +48,technician,married,secondary,no,568,yes,no,cellular,2,sep,378,2,386,1,success,yes +70,retired,married,secondary,no,2626,no,no,cellular,2,sep,140,2,-1,0,unknown,yes +63,retired,married,secondary,no,4752,no,no,cellular,2,sep,233,2,-1,0,unknown,yes +34,services,single,secondary,no,528,yes,no,cellular,2,sep,121,3,100,5,other,yes +46,admin.,married,tertiary,no,2552,no,no,cellular,3,sep,260,1,94,8,success,yes +31,self-employed,single,tertiary,no,3343,no,no,cellular,3,sep,365,1,94,1,success,yes +32,admin.,married,secondary,no,995,no,no,cellular,3,sep,331,1,99,2,other,yes +40,unemployed,single,tertiary,no,7968,no,no,cellular,3,sep,733,1,93,1,success,yes +30,admin.,single,secondary,no,0,no,no,cellular,4,sep,316,3,-1,0,unknown,yes +55,management,married,primary,no,2587,no,no,cellular,4,sep,328,2,94,2,success,yes +57,management,divorced,tertiary,no,6468,yes,no,cellular,4,sep,730,1,157,4,failure,yes +59,admin.,single,secondary,no,4744,no,no,cellular,4,sep,879,1,-1,0,unknown,yes +26,technician,single,secondary,no,1231,yes,no,cellular,4,sep,230,1,93,7,success,yes +73,retired,married,unknown,no,3443,no,no,telephone,4,sep,770,3,-1,0,unknown,yes +30,admin.,single,secondary,no,2568,no,no,cellular,4,sep,563,1,100,4,other,yes +64,retired,married,tertiary,no,1644,no,no,telephone,7,sep,569,4,-1,0,unknown,yes +36,technician,married,tertiary,no,1354,no,no,cellular,7,sep,281,3,97,2,success,yes +55,admin.,married,secondary,no,602,no,no,cellular,7,sep,350,1,98,5,success,yes +63,retired,married,tertiary,no,1795,no,no,cellular,7,sep,219,1,-1,0,unknown,yes +52,technician,married,secondary,no,0,yes,no,cellular,7,sep,211,1,294,1,failure,yes +34,management,single,tertiary,no,268,no,no,cellular,7,sep,587,1,-1,0,unknown,yes +36,services,married,secondary,no,52,yes,no,cellular,7,sep,351,1,95,6,success,yes +31,management,single,tertiary,no,924,no,no,cellular,7,sep,231,1,94,3,success,yes +47,retired,single,primary,no,3033,no,no,cellular,8,sep,293,1,-1,0,unknown,yes +50,admin.,married,tertiary,no,6574,no,no,cellular,8,sep,495,1,92,3,success,yes +70,retired,divorced,secondary,no,0,no,no,cellular,8,sep,206,1,-1,0,unknown,yes +18,student,single,unknown,no,108,no,no,cellular,8,sep,169,1,-1,0,unknown,yes +33,self-employed,married,secondary,no,409,no,no,cellular,8,sep,165,1,97,4,success,yes +24,technician,single,secondary,no,726,no,no,cellular,8,sep,445,2,-1,0,unknown,yes +25,admin.,single,secondary,no,1871,no,no,cellular,8,sep,260,1,96,1,success,yes +26,management,single,tertiary,no,1094,yes,no,cellular,8,sep,137,1,-1,0,unknown,yes +32,management,single,tertiary,no,2915,no,no,cellular,8,sep,519,1,131,2,failure,yes +25,student,single,unknown,no,480,no,no,cellular,8,sep,140,1,-1,0,unknown,yes +58,management,married,tertiary,no,1227,no,no,cellular,8,sep,400,2,95,1,success,yes +42,management,married,tertiary,no,1205,no,no,telephone,8,sep,376,2,-1,0,unknown,yes +30,blue-collar,single,secondary,no,161,no,yes,telephone,8,sep,298,3,-1,0,unknown,yes +76,retired,divorced,primary,no,802,no,no,cellular,9,sep,475,5,-1,0,unknown,yes +79,retired,married,secondary,no,723,no,no,telephone,9,sep,276,1,79,3,failure,yes +70,retired,married,primary,no,6538,no,no,cellular,9,sep,394,1,-1,0,unknown,yes +30,management,single,tertiary,no,147,no,no,cellular,9,sep,234,1,100,1,failure,yes +60,retired,married,secondary,no,0,no,no,cellular,9,sep,408,1,-1,0,unknown,yes +51,unemployed,married,secondary,no,1416,no,no,cellular,9,sep,345,1,-1,0,unknown,yes +71,retired,married,tertiary,no,14220,yes,no,cellular,9,sep,397,1,-1,0,unknown,yes +31,management,single,tertiary,no,12569,no,no,cellular,9,sep,344,1,295,1,failure,yes +32,admin.,single,secondary,no,555,yes,no,cellular,9,sep,344,1,-1,0,unknown,yes +34,management,married,tertiary,no,158,no,no,cellular,9,sep,278,2,132,4,failure,yes +28,admin.,single,secondary,no,261,yes,yes,cellular,9,sep,259,2,98,4,success,yes +45,management,married,tertiary,no,786,no,no,cellular,10,sep,84,3,-1,0,unknown,yes +53,entrepreneur,married,primary,no,27,yes,no,telephone,10,sep,230,3,-1,0,unknown,yes +38,unknown,single,tertiary,no,0,no,no,cellular,11,sep,260,3,95,3,success,yes +56,admin.,single,secondary,no,2815,yes,no,cellular,11,sep,212,1,-1,0,unknown,yes +42,technician,married,secondary,no,3082,no,no,cellular,11,sep,285,1,-1,0,unknown,yes +47,technician,married,secondary,no,1233,yes,no,unknown,11,sep,91,1,100,2,other,yes +73,retired,married,unknown,no,739,no,no,cellular,11,sep,210,1,-1,0,unknown,yes +46,blue-collar,married,secondary,no,640,yes,no,cellular,11,sep,108,2,129,2,failure,yes +73,retired,married,tertiary,no,1843,no,no,cellular,11,sep,106,2,-1,0,unknown,yes +28,blue-collar,single,secondary,no,322,no,no,telephone,11,sep,240,2,95,3,other,yes +46,management,married,tertiary,no,7331,no,no,cellular,11,sep,658,4,95,2,other,yes +74,retired,married,primary,no,1765,no,no,telephone,11,sep,290,2,-1,0,unknown,yes +71,retired,divorced,tertiary,yes,1236,yes,no,cellular,14,sep,335,4,-1,0,unknown,yes +41,admin.,divorced,secondary,no,6046,yes,yes,telephone,14,sep,185,2,-1,0,unknown,yes +73,retired,married,primary,no,934,no,no,cellular,14,sep,961,5,-1,0,unknown,yes +47,technician,divorced,secondary,no,1013,no,no,cellular,15,sep,170,1,92,3,failure,yes +49,technician,divorced,tertiary,no,596,yes,no,telephone,15,sep,722,1,-1,0,unknown,yes +40,admin.,married,secondary,no,4775,no,no,cellular,15,sep,215,1,-1,0,unknown,yes +57,blue-collar,married,primary,no,3109,no,no,cellular,15,sep,107,2,105,2,success,yes +50,housemaid,married,secondary,no,388,no,no,cellular,15,sep,173,2,99,4,failure,yes +34,blue-collar,married,secondary,no,262,no,no,cellular,15,sep,89,2,106,1,success,yes +56,services,married,secondary,no,654,no,no,cellular,15,sep,875,1,-1,0,unknown,yes +32,technician,single,tertiary,no,1855,no,no,cellular,15,sep,126,2,134,1,other,yes +50,management,divorced,tertiary,no,810,no,no,cellular,15,sep,91,1,103,3,success,yes +54,unemployed,divorced,secondary,no,1664,no,no,cellular,15,sep,106,1,105,3,success,yes +26,management,single,tertiary,no,362,no,no,cellular,15,sep,925,1,104,2,success,yes +40,technician,married,tertiary,no,1293,no,no,cellular,16,sep,1702,3,105,2,success,yes +29,management,single,tertiary,no,874,yes,no,cellular,16,sep,152,1,103,1,success,yes +52,housemaid,married,primary,no,10943,no,no,cellular,16,sep,292,1,-1,0,unknown,yes +38,technician,married,secondary,no,4539,no,no,cellular,16,sep,387,1,-1,0,unknown,yes +46,management,married,tertiary,no,2817,no,no,cellular,17,sep,543,1,-1,0,unknown,yes +26,management,single,tertiary,no,1646,no,no,cellular,18,sep,890,5,-1,0,unknown,yes +25,management,single,tertiary,no,808,no,no,cellular,18,sep,267,2,114,2,failure,yes +70,retired,married,tertiary,no,44,no,no,cellular,18,sep,1104,2,88,2,other,yes +83,retired,married,primary,no,425,no,no,telephone,22,sep,773,1,92,2,success,yes +43,management,divorced,tertiary,no,2367,no,no,cellular,22,sep,83,1,113,3,success,yes +45,blue-collar,married,secondary,no,10252,no,no,cellular,22,sep,173,1,141,2,success,yes +37,admin.,single,tertiary,no,1000,yes,no,cellular,22,sep,239,1,99,2,success,yes +71,retired,divorced,secondary,no,4380,no,no,cellular,22,sep,369,1,-1,0,unknown,yes +27,management,single,tertiary,no,20585,no,no,cellular,23,sep,299,1,100,1,success,yes +47,admin.,married,secondary,no,2601,no,no,cellular,24,sep,261,1,-1,0,unknown,yes +42,management,divorced,tertiary,no,238,no,no,cellular,25,sep,692,1,-1,0,unknown,yes +77,retired,divorced,secondary,no,0,no,no,cellular,25,sep,210,1,-1,0,unknown,yes +61,management,married,tertiary,no,3371,no,no,cellular,28,sep,299,2,-1,0,unknown,yes +57,management,married,tertiary,no,10583,no,no,cellular,28,sep,341,3,98,3,success,yes +34,management,married,tertiary,no,16,yes,no,telephone,29,sep,316,1,119,1,other,yes +40,blue-collar,married,secondary,no,1451,no,no,cellular,30,sep,117,1,121,1,success,yes +84,entrepreneur,married,secondary,no,0,no,no,telephone,30,sep,992,2,-1,0,unknown,yes +26,student,single,secondary,no,132,no,no,cellular,1,oct,194,1,119,1,success,yes +37,technician,married,unknown,no,189,no,no,cellular,1,oct,238,1,107,2,success,yes +47,management,married,tertiary,no,288,no,no,cellular,1,oct,101,1,-1,0,unknown,yes +37,management,single,tertiary,no,1027,yes,no,cellular,1,oct,137,1,119,1,failure,yes +28,management,single,tertiary,no,6784,no,no,cellular,1,oct,502,1,115,3,other,yes +54,management,married,tertiary,no,1464,no,no,cellular,2,oct,194,2,94,1,success,yes +54,management,married,tertiary,no,8295,no,no,cellular,2,oct,849,2,119,1,success,yes +61,retired,married,secondary,no,2917,no,no,cellular,6,oct,215,1,-1,0,unknown,yes +30,technician,single,secondary,no,158,no,no,cellular,6,oct,144,1,-1,0,unknown,yes +60,retired,married,primary,no,1588,no,no,cellular,6,oct,728,1,-1,0,unknown,yes +44,management,married,unknown,no,282,no,no,cellular,6,oct,296,3,-1,0,unknown,yes +33,management,single,tertiary,no,5437,no,no,cellular,7,oct,201,1,58,3,failure,yes +25,admin.,single,tertiary,no,1185,no,no,cellular,7,oct,290,1,114,1,failure,yes +54,unknown,married,unknown,no,895,no,no,cellular,7,oct,335,1,-1,0,unknown,yes +24,blue-collar,single,secondary,no,1857,yes,no,cellular,8,oct,147,1,92,5,other,yes +36,technician,married,tertiary,no,4596,yes,no,cellular,8,oct,234,2,175,2,success,yes +58,retired,married,primary,no,565,no,no,telephone,8,oct,153,1,93,1,success,yes +33,management,single,tertiary,no,1781,no,no,cellular,8,oct,611,2,183,1,success,yes +27,admin.,married,secondary,no,3415,no,no,cellular,9,oct,266,3,184,1,success,yes +60,admin.,divorced,secondary,no,12039,no,no,telephone,12,oct,261,1,187,1,success,yes +56,unemployed,married,secondary,no,12,no,no,cellular,12,oct,511,3,187,1,failure,yes +25,technician,single,secondary,no,139,no,yes,cellular,12,oct,138,1,-1,0,unknown,yes +21,student,single,secondary,no,2488,no,no,cellular,12,oct,180,1,-1,0,unknown,yes +73,retired,divorced,secondary,no,7111,yes,no,cellular,12,oct,146,1,-1,0,unknown,yes +67,management,divorced,tertiary,no,361,no,no,cellular,13,oct,411,2,-1,0,unknown,yes +51,entrepreneur,divorced,tertiary,no,2109,no,no,cellular,13,oct,79,2,-1,0,unknown,yes +48,management,married,tertiary,no,1093,yes,yes,cellular,13,oct,1226,2,-1,0,unknown,yes +35,management,single,tertiary,no,2646,no,no,cellular,13,oct,221,1,182,1,success,yes +61,self-employed,divorced,tertiary,no,6,yes,no,cellular,13,oct,210,1,182,2,success,yes +35,technician,single,tertiary,no,670,no,no,cellular,13,oct,301,2,-1,0,unknown,yes +36,admin.,divorced,secondary,no,592,no,no,cellular,13,oct,204,2,99,5,failure,yes +83,retired,single,primary,no,1965,no,no,telephone,13,oct,1003,3,-1,0,unknown,yes +50,management,married,primary,no,313,no,no,telephone,14,oct,958,1,-1,0,unknown,yes +66,housemaid,married,primary,no,40,no,no,telephone,14,oct,290,2,-1,0,unknown,yes +58,technician,married,primary,no,4198,no,no,cellular,15,oct,441,5,246,5,failure,yes +30,management,single,tertiary,no,536,no,no,cellular,15,oct,244,1,105,1,success,yes +54,blue-collar,married,primary,no,1311,no,no,telephone,15,oct,485,3,184,3,failure,yes +26,admin.,single,secondary,no,766,no,no,cellular,15,oct,457,2,-1,0,unknown,yes +43,services,married,primary,no,2557,yes,no,telephone,15,oct,166,3,183,5,success,yes +40,unemployed,single,tertiary,no,79,no,no,cellular,15,oct,570,1,135,1,failure,yes +57,management,married,tertiary,no,1318,no,no,cellular,16,oct,115,1,185,2,failure,yes +75,retired,married,secondary,no,3771,no,no,telephone,16,oct,186,1,183,1,failure,yes +77,retired,married,tertiary,no,0,no,no,cellular,16,oct,847,1,60,1,success,yes +31,management,married,tertiary,no,6138,no,no,cellular,16,oct,154,2,119,5,failure,yes +22,services,single,secondary,no,129,no,no,cellular,16,oct,258,1,-1,0,unknown,yes +50,management,married,tertiary,no,469,no,no,cellular,16,oct,170,1,183,1,success,yes +27,management,married,tertiary,no,893,no,no,cellular,16,oct,154,2,-1,0,unknown,yes +73,retired,married,unknown,no,519,no,no,telephone,16,oct,434,1,57,1,failure,yes +37,services,married,secondary,no,4017,no,no,cellular,16,oct,156,1,-1,0,unknown,yes +44,technician,single,tertiary,no,643,no,no,cellular,16,oct,324,1,143,3,failure,yes +40,technician,married,secondary,no,2338,no,no,cellular,16,oct,717,2,-1,0,unknown,yes +61,management,married,tertiary,no,0,no,no,cellular,16,oct,136,2,-1,0,unknown,yes +61,technician,divorced,secondary,no,6481,no,no,cellular,19,oct,131,1,-1,0,unknown,yes +47,blue-collar,married,secondary,no,820,no,no,cellular,19,oct,98,1,-1,0,unknown,yes +47,services,single,unknown,no,1784,no,no,cellular,19,oct,385,2,-1,0,unknown,yes +76,housemaid,divorced,primary,no,1411,no,no,telephone,19,oct,233,2,187,3,success,yes +30,student,single,tertiary,no,7529,no,no,cellular,19,oct,328,1,-1,0,unknown,yes +39,technician,married,tertiary,no,206,no,no,cellular,20,oct,148,2,195,2,success,yes +72,retired,married,primary,no,1388,no,no,telephone,20,oct,513,1,-1,0,unknown,yes +77,retired,married,unknown,no,1807,no,no,telephone,20,oct,373,1,-1,0,unknown,yes +36,technician,married,secondary,no,480,no,no,cellular,20,oct,213,1,-1,0,unknown,yes +65,retired,married,secondary,no,571,yes,no,cellular,20,oct,349,1,183,2,success,yes +54,technician,married,secondary,no,3994,no,yes,cellular,20,oct,595,2,187,2,success,yes +46,admin.,single,secondary,no,1693,yes,no,cellular,20,oct,427,1,-1,0,unknown,yes +28,management,single,tertiary,no,80,no,no,cellular,20,oct,676,2,146,2,failure,yes +61,management,married,tertiary,no,267,no,no,cellular,21,oct,192,3,184,1,success,yes +53,housemaid,married,primary,no,2581,no,no,cellular,21,oct,828,1,189,1,failure,yes +27,student,single,tertiary,no,1134,no,no,cellular,21,oct,825,1,183,4,success,yes +55,unemployed,divorced,secondary,no,309,no,no,cellular,21,oct,467,2,184,1,success,yes +33,management,single,tertiary,no,6807,no,no,cellular,21,oct,512,2,184,1,success,yes +87,retired,divorced,primary,no,6746,no,no,telephone,21,oct,749,1,-1,0,unknown,yes +57,management,married,tertiary,no,375,no,no,cellular,21,oct,135,1,-1,0,unknown,yes +33,self-employed,single,tertiary,no,658,yes,no,cellular,21,oct,307,1,208,1,success,yes +51,technician,married,secondary,no,371,yes,yes,cellular,21,oct,287,1,-1,0,unknown,yes +76,retired,divorced,primary,no,2693,no,no,cellular,21,oct,107,2,-1,0,unknown,yes +19,student,single,secondary,no,329,no,no,cellular,22,oct,252,2,-1,0,unknown,yes +33,admin.,married,tertiary,no,79,yes,no,cellular,22,oct,249,2,335,2,failure,yes +55,management,divorced,tertiary,no,0,no,no,cellular,22,oct,360,5,-1,0,unknown,yes +31,blue-collar,single,unknown,no,6281,no,no,cellular,22,oct,257,1,128,3,other,yes +92,retired,married,unknown,no,775,no,no,cellular,22,oct,313,3,-1,0,unknown,yes +30,technician,single,tertiary,no,411,no,no,cellular,22,oct,127,3,149,2,failure,yes +68,retired,single,tertiary,no,2144,no,no,cellular,22,oct,277,1,184,2,success,yes +41,technician,single,tertiary,no,431,no,no,cellular,22,oct,133,1,107,2,success,yes +29,self-employed,married,secondary,no,123,no,yes,cellular,22,oct,247,1,184,3,success,yes +27,blue-collar,single,secondary,no,3792,no,no,cellular,22,oct,504,1,183,2,success,yes +78,retired,married,unknown,no,4807,no,no,telephone,22,oct,1002,4,-1,0,unknown,yes +82,retired,married,primary,no,8603,no,no,cellular,22,oct,306,3,107,1,success,yes +29,technician,single,tertiary,no,2178,no,no,cellular,22,oct,260,2,139,1,other,yes +76,retired,married,tertiary,no,2991,no,no,cellular,22,oct,344,1,183,1,success,yes +38,management,married,tertiary,no,4174,no,no,cellular,23,oct,336,2,184,5,failure,yes +60,technician,married,secondary,no,10925,no,no,cellular,23,oct,270,3,185,1,success,yes +33,services,divorced,secondary,no,2411,yes,no,cellular,23,oct,130,1,161,1,failure,yes +43,blue-collar,married,secondary,no,14646,no,no,cellular,23,oct,210,1,-1,0,unknown,yes +61,retired,married,secondary,no,86,no,no,cellular,23,oct,149,1,-1,0,unknown,yes +43,technician,single,unknown,no,11115,no,no,cellular,23,oct,476,1,74,2,success,yes +57,management,married,primary,no,6900,no,no,cellular,23,oct,255,4,185,2,failure,yes +33,management,married,tertiary,no,5878,no,no,cellular,23,oct,438,1,430,2,failure,yes +77,management,married,unknown,no,1780,yes,no,cellular,23,oct,221,2,183,3,success,yes +35,technician,single,secondary,no,183,no,no,cellular,23,oct,281,1,52,4,failure,yes +59,retired,married,primary,no,3648,no,no,telephone,23,oct,257,2,126,3,success,yes +76,retired,married,secondary,no,4112,no,no,telephone,23,oct,282,2,-1,0,unknown,yes +73,retired,married,primary,no,542,no,no,cellular,26,oct,355,1,180,5,failure,yes +81,retired,married,primary,no,243,no,no,cellular,27,oct,131,1,-1,0,unknown,yes +41,unknown,single,unknown,no,942,no,no,cellular,27,oct,143,1,188,1,success,yes +57,technician,married,secondary,no,254,no,no,cellular,27,oct,207,1,-1,0,unknown,yes +28,technician,single,unknown,no,0,yes,no,cellular,27,oct,96,1,267,1,failure,yes +38,blue-collar,single,secondary,no,0,no,no,cellular,27,oct,297,1,75,3,failure,yes +52,services,married,secondary,no,992,yes,no,cellular,27,oct,424,1,515,1,failure,yes +22,student,single,secondary,no,23,no,no,cellular,27,oct,137,1,-1,0,unknown,yes +53,unknown,married,primary,no,732,no,no,cellular,27,oct,759,2,-1,0,unknown,yes +60,admin.,married,unknown,no,4629,yes,no,cellular,27,oct,624,1,-1,0,unknown,yes +56,management,married,secondary,no,0,no,no,cellular,27,oct,298,1,111,8,other,yes +38,housemaid,divorced,secondary,no,70,no,no,cellular,27,oct,255,3,148,1,success,yes +44,management,single,tertiary,no,5063,no,no,cellular,27,oct,418,2,-1,0,unknown,yes +69,retired,divorced,secondary,no,4572,no,no,telephone,27,oct,146,2,56,1,other,yes +36,student,single,tertiary,no,129,no,no,cellular,27,oct,149,1,-1,0,unknown,yes +75,self-employed,married,unknown,no,4984,no,no,telephone,28,oct,509,1,-1,0,unknown,yes +65,retired,married,primary,no,1004,no,no,cellular,28,oct,371,1,-1,0,unknown,yes +64,retired,married,secondary,no,4787,no,no,cellular,28,oct,501,1,-1,0,unknown,yes +30,admin.,single,secondary,no,914,yes,no,cellular,28,oct,524,3,272,1,failure,yes +57,housemaid,married,tertiary,no,2326,no,no,cellular,28,oct,207,1,194,1,success,yes +31,management,married,tertiary,no,81,yes,no,cellular,29,oct,164,2,-1,0,unknown,yes +36,management,married,tertiary,no,203,no,no,cellular,29,oct,139,1,-1,0,unknown,yes +64,management,married,tertiary,no,3951,no,no,cellular,29,oct,164,1,-1,0,unknown,yes +54,technician,married,unknown,no,240,yes,no,cellular,29,oct,142,1,-1,0,unknown,yes +26,admin.,single,secondary,no,338,no,no,cellular,29,oct,209,1,188,2,unknown,yes +51,self-employed,single,secondary,no,0,no,no,cellular,29,oct,1707,2,-1,0,unknown,yes +72,retired,married,secondary,no,0,no,no,cellular,29,oct,189,3,-1,0,unknown,yes +30,management,married,tertiary,no,944,no,no,cellular,29,oct,251,2,-1,0,unknown,yes +60,blue-collar,married,primary,no,5,no,no,cellular,29,oct,401,1,-1,0,unknown,yes +30,management,single,tertiary,no,697,no,no,cellular,29,oct,215,3,80,5,success,yes +66,retired,married,tertiary,no,1948,no,no,cellular,29,oct,106,2,269,2,failure,yes +50,technician,married,secondary,no,3654,no,no,cellular,29,oct,215,2,78,2,other,yes +47,management,single,tertiary,no,551,no,no,cellular,29,oct,124,1,-1,0,unknown,yes +80,retired,married,primary,no,997,no,no,cellular,29,oct,746,2,86,1,other,yes +61,management,married,tertiary,no,477,yes,no,cellular,29,oct,377,1,520,1,other,yes +47,management,married,tertiary,no,3663,no,no,cellular,29,oct,424,2,213,3,success,yes +30,technician,single,secondary,no,853,no,no,cellular,29,oct,279,1,148,1,failure,yes +21,student,single,primary,no,8278,no,no,cellular,29,oct,445,1,-1,0,unknown,yes +62,management,married,tertiary,no,7458,no,no,cellular,30,oct,212,2,-1,0,unknown,yes +26,technician,single,secondary,no,44,no,no,cellular,30,oct,217,1,-1,0,unknown,yes +36,blue-collar,married,secondary,no,1193,no,no,cellular,30,oct,640,1,-1,0,unknown,yes +87,retired,married,primary,no,230,no,no,cellular,30,oct,144,1,-1,0,unknown,yes +61,retired,married,primary,no,8729,no,no,cellular,30,oct,480,1,-1,0,unknown,yes +70,retired,married,secondary,no,2384,no,no,cellular,30,oct,196,2,-1,0,unknown,yes +60,management,married,tertiary,no,3401,no,no,cellular,30,oct,294,1,270,1,failure,yes +41,services,married,tertiary,no,881,no,no,cellular,30,oct,257,3,-1,0,unknown,yes +22,student,single,secondary,no,1522,no,no,cellular,30,oct,368,2,-1,0,unknown,yes +60,retired,divorced,secondary,no,4243,no,no,cellular,30,oct,416,2,-1,0,unknown,yes +54,technician,married,secondary,no,473,no,yes,cellular,2,nov,182,1,81,1,failure,yes +35,self-employed,single,tertiary,no,5462,no,no,cellular,2,nov,188,1,186,1,success,yes +59,management,married,secondary,no,4412,no,no,cellular,2,nov,162,2,-1,0,unknown,yes +29,student,single,unknown,no,10332,no,no,cellular,2,nov,46,3,-1,0,unknown,yes +48,management,married,secondary,no,0,yes,yes,cellular,3,nov,1233,1,351,2,failure,yes +37,management,married,tertiary,no,238,no,no,cellular,3,nov,149,1,-1,0,unknown,yes +36,management,single,tertiary,no,62,yes,no,cellular,3,nov,566,1,182,7,failure,yes +52,admin.,single,secondary,no,2398,yes,no,cellular,3,nov,412,1,-1,0,unknown,yes +67,retired,divorced,secondary,no,704,no,no,cellular,3,nov,537,1,-1,0,unknown,yes +36,self-employed,married,tertiary,no,506,no,no,cellular,3,nov,217,1,70,2,failure,yes +64,management,married,unknown,no,2352,no,no,cellular,3,nov,181,4,183,7,success,yes +29,technician,single,secondary,no,938,no,no,cellular,3,nov,358,1,-1,0,unknown,yes +27,management,single,tertiary,no,1720,no,no,cellular,3,nov,284,2,273,1,failure,yes +76,retired,married,primary,no,1492,no,no,telephone,3,nov,383,1,-1,0,unknown,yes +34,management,married,tertiary,no,1778,no,no,cellular,4,nov,358,1,162,2,failure,yes +54,technician,married,secondary,no,0,no,no,cellular,6,nov,464,5,192,8,other,yes +67,retired,married,primary,no,942,no,no,cellular,6,nov,455,2,84,2,other,yes +24,technician,married,secondary,no,556,yes,no,cellular,6,nov,368,2,80,2,success,yes +53,admin.,married,secondary,no,10541,no,no,cellular,9,nov,178,1,-1,0,unknown,yes +33,student,married,secondary,no,1536,no,no,cellular,9,nov,262,1,94,2,success,yes +24,student,single,tertiary,no,235,no,no,cellular,9,nov,118,1,-1,0,unknown,yes +32,management,single,tertiary,no,935,no,no,cellular,9,nov,165,1,91,7,success,yes +60,self-employed,married,tertiary,no,10861,no,no,cellular,9,nov,98,1,91,2,failure,yes +64,entrepreneur,married,tertiary,no,2331,no,no,telephone,9,nov,201,1,-1,0,unknown,yes +35,management,single,tertiary,no,1228,no,no,cellular,9,nov,696,2,88,12,failure,yes +24,student,single,secondary,no,125,no,no,cellular,9,nov,263,1,90,1,failure,yes +42,management,married,tertiary,no,2816,no,no,cellular,10,nov,193,2,-1,0,unknown,yes +40,management,married,tertiary,no,0,no,no,cellular,10,nov,147,1,96,8,success,yes +33,management,married,tertiary,no,22867,yes,no,cellular,10,nov,266,2,92,3,failure,yes +71,housemaid,divorced,primary,no,1311,no,no,cellular,10,nov,301,2,91,1,success,yes +52,unemployed,married,secondary,no,94,no,no,cellular,10,nov,293,3,190,10,failure,yes +47,admin.,married,secondary,no,0,no,no,cellular,10,nov,213,1,190,1,other,yes +49,management,married,primary,no,3371,no,no,cellular,11,nov,269,2,-1,0,unknown,yes +26,management,single,tertiary,no,943,no,no,cellular,11,nov,166,1,195,1,success,yes +40,management,married,tertiary,no,9366,no,no,cellular,11,nov,69,3,-1,0,unknown,yes +32,technician,single,tertiary,no,6746,no,no,cellular,11,nov,199,1,-1,0,unknown,yes +33,services,married,secondary,no,1076,no,no,cellular,11,nov,131,1,96,5,failure,yes +35,management,married,tertiary,no,0,yes,no,cellular,11,nov,229,2,96,3,success,yes +53,management,married,tertiary,no,1624,no,no,cellular,11,nov,166,3,97,7,success,yes +20,student,single,unknown,no,801,no,no,cellular,11,nov,244,2,-1,0,unknown,yes +44,self-employed,divorced,tertiary,no,1070,yes,no,cellular,11,nov,172,1,91,5,success,yes +21,student,single,secondary,no,123,no,no,telephone,11,nov,513,1,91,1,success,yes +36,blue-collar,single,secondary,no,3623,no,no,unknown,12,nov,71,1,378,1,success,yes +31,management,single,tertiary,no,533,no,no,cellular,12,nov,90,3,93,6,success,yes +42,technician,married,secondary,no,994,yes,no,cellular,12,nov,227,3,93,6,success,yes +33,services,married,secondary,no,386,no,no,cellular,12,nov,253,1,92,4,failure,yes +29,management,single,tertiary,no,1026,no,no,cellular,12,nov,226,1,92,1,other,yes +30,unemployed,single,secondary,no,2424,no,no,cellular,12,nov,110,1,279,1,failure,yes +32,management,married,tertiary,no,1331,no,no,cellular,12,nov,126,1,92,5,failure,yes +54,unknown,married,secondary,no,2206,no,no,cellular,12,nov,104,1,99,2,other,yes +82,retired,divorced,tertiary,no,0,no,no,telephone,12,nov,226,1,-1,0,unknown,yes +47,management,married,tertiary,no,4693,no,yes,cellular,12,nov,89,1,97,3,success,yes +48,blue-collar,married,secondary,no,1230,yes,no,cellular,12,nov,169,1,196,2,success,yes +77,retired,divorced,secondary,no,3417,no,no,cellular,12,nov,134,1,-1,0,unknown,yes +38,admin.,married,secondary,no,1767,yes,no,cellular,12,nov,893,7,-1,0,unknown,yes +27,student,single,tertiary,no,5291,no,no,cellular,12,nov,192,2,92,2,failure,yes +43,services,single,secondary,no,3403,yes,no,cellular,12,nov,707,2,97,2,success,yes +33,technician,married,secondary,no,133,no,no,cellular,12,nov,627,2,192,1,success,yes +27,admin.,single,secondary,no,4745,no,no,telephone,12,nov,411,4,192,1,other,yes +76,retired,married,primary,no,3324,no,no,cellular,13,nov,122,1,92,3,success,yes +81,retired,married,primary,no,5220,no,no,telephone,13,nov,135,1,94,2,other,yes +71,retired,married,primary,no,2600,no,no,cellular,13,nov,186,2,98,1,success,yes +39,admin.,married,secondary,no,260,yes,no,cellular,13,nov,226,1,94,4,success,yes +18,student,single,primary,no,608,no,no,cellular,13,nov,210,1,93,1,success,yes +58,services,divorced,secondary,no,462,no,no,cellular,13,nov,495,1,93,1,success,yes +44,technician,divorced,secondary,no,14,no,no,cellular,13,nov,167,1,92,1,success,yes +67,retired,married,secondary,no,1146,no,no,cellular,13,nov,259,1,92,2,failure,yes +31,services,single,secondary,no,181,no,no,cellular,13,nov,239,2,93,2,success,yes +61,retired,married,secondary,no,3114,no,no,cellular,13,nov,381,1,-1,0,unknown,yes +36,technician,single,secondary,no,376,no,no,cellular,13,nov,193,1,92,1,success,yes +56,retired,married,primary,no,9367,no,no,telephone,13,nov,271,2,92,4,success,yes +24,student,single,secondary,no,382,no,no,cellular,13,nov,256,2,92,3,failure,yes +33,admin.,married,secondary,no,920,no,no,cellular,16,nov,130,1,95,2,failure,yes +34,blue-collar,single,unknown,no,129,yes,yes,cellular,16,nov,295,1,200,2,success,yes +58,admin.,married,secondary,no,169,no,no,cellular,16,nov,301,1,94,3,failure,yes +64,retired,married,unknown,no,679,no,no,telephone,16,nov,167,1,-1,0,unknown,yes +27,blue-collar,single,secondary,no,535,no,no,cellular,16,nov,183,1,94,1,success,yes +63,management,married,tertiary,no,3115,no,no,cellular,16,nov,432,5,-1,0,unknown,yes +23,student,single,secondary,no,1234,no,no,cellular,16,nov,250,1,-1,0,unknown,yes +37,technician,single,tertiary,no,197,no,no,cellular,16,nov,175,1,200,1,success,yes +43,management,married,tertiary,no,3186,no,no,cellular,16,nov,380,1,88,1,failure,yes +35,technician,married,tertiary,no,3160,yes,no,cellular,16,nov,445,2,95,1,failure,yes +33,blue-collar,married,primary,no,195,no,no,cellular,16,nov,984,5,-1,0,unknown,yes +75,retired,married,tertiary,no,6027,no,no,cellular,16,nov,1248,2,94,2,failure,yes +40,admin.,married,tertiary,no,764,yes,no,unknown,17,nov,85,1,-1,0,unknown,yes +52,management,married,tertiary,no,583,no,no,cellular,17,nov,209,1,91,2,failure,yes +55,technician,divorced,tertiary,no,0,no,no,cellular,17,nov,134,2,91,1,success,yes +71,retired,married,secondary,no,5715,no,no,cellular,17,nov,747,2,-1,0,unknown,yes +78,retired,married,tertiary,no,1204,no,no,telephone,17,nov,135,1,-1,0,unknown,yes +35,technician,married,secondary,no,4922,yes,no,cellular,17,nov,393,4,201,17,other,yes +52,technician,married,secondary,no,234,no,no,cellular,17,nov,255,1,-1,0,unknown,yes +31,management,single,tertiary,no,9421,no,no,cellular,25,nov,372,1,-1,0,unknown,yes +31,admin.,single,secondary,no,4198,no,no,cellular,25,nov,234,1,-1,0,unknown,yes +38,management,married,unknown,no,3576,no,no,cellular,25,nov,349,2,183,1,success,yes +28,student,single,secondary,no,1925,no,no,cellular,25,nov,487,1,97,2,failure,yes +72,retired,married,secondary,no,1129,no,no,cellular,25,nov,208,1,91,1,success,yes +29,admin.,single,secondary,no,265,yes,no,cellular,25,nov,414,1,184,1,failure,yes +46,housemaid,married,secondary,no,38,no,no,cellular,25,nov,541,1,-1,0,unknown,yes +53,technician,married,secondary,no,1982,yes,yes,cellular,27,nov,160,1,-1,0,unknown,yes +58,technician,married,secondary,no,3399,no,no,telephone,30,nov,1628,2,188,8,success,yes +22,student,single,tertiary,no,691,no,no,cellular,30,nov,260,5,103,1,success,yes +28,admin.,married,secondary,no,330,no,no,cellular,2,dec,357,1,188,3,other,yes +31,technician,married,secondary,no,318,no,no,cellular,2,dec,310,1,-1,0,unknown,yes +26,blue-collar,single,tertiary,no,644,no,no,cellular,2,dec,346,1,-1,0,unknown,yes +60,retired,divorced,tertiary,no,4,yes,no,cellular,2,dec,415,1,190,5,failure,yes +29,technician,single,secondary,no,1165,no,no,cellular,3,dec,244,2,184,1,success,yes +36,admin.,divorced,tertiary,no,4708,no,no,cellular,3,dec,284,1,171,1,failure,yes +68,retired,married,tertiary,no,2820,no,no,cellular,3,dec,154,1,97,2,failure,yes +48,management,married,tertiary,no,1147,no,no,cellular,3,dec,155,1,120,3,success,yes +53,unemployed,married,primary,no,980,yes,no,cellular,3,dec,352,1,-1,0,unknown,yes +39,technician,married,secondary,no,2983,no,no,cellular,3,dec,472,1,-1,0,unknown,yes +28,services,single,secondary,no,339,no,no,cellular,3,dec,350,1,182,1,success,yes +72,retired,married,unknown,no,1940,no,no,telephone,4,dec,705,2,-1,0,unknown,yes +29,management,single,tertiary,no,1445,no,no,cellular,4,dec,271,2,-1,0,unknown,yes +26,student,single,tertiary,no,294,no,no,cellular,4,dec,208,2,-1,0,unknown,yes +49,management,married,tertiary,no,5887,no,no,cellular,4,dec,439,3,185,5,success,yes +43,management,single,tertiary,no,11891,no,no,cellular,4,dec,821,5,242,1,success,yes +28,student,single,unknown,no,78,no,no,cellular,4,dec,232,3,310,2,failure,yes +44,admin.,single,secondary,no,733,yes,no,cellular,4,dec,360,2,105,5,success,yes +73,retired,divorced,primary,no,5028,no,no,cellular,4,dec,696,10,-1,0,unknown,yes +39,management,married,tertiary,no,481,no,no,cellular,7,dec,929,5,189,1,other,yes +29,student,single,secondary,no,314,no,no,cellular,7,dec,415,2,116,4,failure,yes +31,technician,married,secondary,no,684,yes,no,cellular,7,dec,620,3,-1,0,unknown,yes +30,student,single,secondary,no,1681,no,no,cellular,7,dec,329,2,-1,0,unknown,yes +50,admin.,married,secondary,no,10250,yes,no,cellular,7,dec,254,3,385,2,other,yes +42,management,married,tertiary,no,254,no,no,cellular,9,dec,288,7,183,4,success,yes +37,admin.,married,secondary,no,0,yes,no,cellular,9,dec,179,1,190,1,success,yes +49,technician,married,secondary,no,307,no,no,cellular,9,dec,854,1,-1,0,unknown,yes +59,unemployed,married,secondary,no,957,no,no,cellular,9,dec,479,2,-1,0,unknown,yes +80,retired,married,primary,no,155,no,no,telephone,9,dec,343,2,-1,0,unknown,yes +86,retired,single,secondary,no,614,no,no,telephone,9,dec,595,1,-1,0,unknown,yes +69,retired,married,unknown,no,426,no,no,telephone,9,dec,395,1,-1,0,unknown,yes +79,retired,married,secondary,no,8304,no,no,cellular,9,dec,456,2,275,9,success,yes +36,services,married,secondary,no,4721,no,no,cellular,9,dec,149,3,-1,0,unknown,yes +49,management,married,tertiary,no,395,no,no,cellular,10,dec,336,5,-1,0,unknown,yes +69,retired,married,secondary,no,3588,yes,no,cellular,10,dec,429,1,-1,0,unknown,yes +66,retired,married,unknown,no,2540,no,no,telephone,10,dec,441,2,156,1,other,yes +32,management,divorced,tertiary,no,883,yes,no,cellular,10,dec,798,1,185,5,other,yes +47,management,single,tertiary,no,4402,no,no,telephone,10,dec,805,1,190,1,other,yes +58,management,married,tertiary,no,256,no,no,cellular,10,dec,422,1,188,3,success,yes +64,retired,married,primary,no,43,no,no,cellular,10,dec,232,1,-1,0,unknown,yes +72,retired,married,primary,no,3856,no,no,cellular,10,dec,582,4,115,1,other,yes +79,retired,married,primary,no,3025,no,no,cellular,11,dec,166,3,126,3,other,yes +30,technician,married,secondary,no,2326,no,no,cellular,14,dec,420,1,175,2,failure,yes +36,management,married,tertiary,no,925,no,no,cellular,14,dec,321,3,189,4,success,yes +53,entrepreneur,married,tertiary,no,1961,no,no,cellular,15,dec,351,1,-1,0,unknown,yes +34,management,married,tertiary,no,2037,no,no,cellular,15,dec,324,2,-1,0,unknown,yes +29,student,single,secondary,no,459,no,no,cellular,15,dec,279,3,189,19,other,yes +29,management,single,tertiary,no,572,no,no,cellular,16,dec,314,1,195,1,success,yes +81,retired,divorced,secondary,no,452,no,no,telephone,16,dec,443,1,-1,0,unknown,yes +57,retired,married,secondary,no,5313,no,no,cellular,16,dec,283,2,196,1,success,yes +72,retired,married,secondary,no,1533,no,no,cellular,16,dec,546,2,-1,0,unknown,yes +34,services,married,secondary,no,1337,no,no,cellular,17,dec,330,2,127,3,success,yes +57,management,divorced,unknown,no,2986,no,no,cellular,17,dec,222,2,231,1,failure,yes +66,housemaid,married,primary,no,1230,no,no,cellular,17,dec,726,3,-1,0,unknown,yes +27,student,single,secondary,no,538,no,no,cellular,18,dec,170,4,197,2,success,yes +50,management,married,tertiary,no,5108,yes,no,cellular,18,dec,406,1,182,2,failure,yes +75,retired,divorced,secondary,no,1341,no,no,cellular,18,dec,415,7,-1,0,unknown,yes +50,services,married,secondary,no,320,no,no,telephone,21,dec,294,3,315,4,success,yes +32,admin.,single,secondary,no,131,yes,no,cellular,21,dec,322,1,189,1,success,yes +59,retired,married,primary,no,2074,no,no,cellular,21,dec,467,1,186,2,success,yes +68,retired,married,secondary,no,1443,no,no,telephone,21,dec,2062,2,257,1,success,yes +31,technician,married,tertiary,no,3338,yes,no,cellular,21,dec,264,2,-1,0,unknown,yes +64,self-employed,married,tertiary,no,661,no,no,cellular,21,dec,367,2,294,2,failure,yes +30,unemployed,divorced,secondary,no,7105,no,no,cellular,22,dec,321,2,-1,0,unknown,yes +60,admin.,married,secondary,no,3735,no,no,cellular,22,dec,190,1,188,9,success,yes +35,management,single,tertiary,no,538,no,no,cellular,22,dec,410,3,165,2,other,yes +72,retired,married,primary,no,4657,no,no,cellular,22,dec,305,3,309,5,success,yes +30,blue-collar,married,primary,no,5,no,no,cellular,23,dec,282,1,203,1,success,yes +52,unemployed,divorced,secondary,no,230,no,no,cellular,24,dec,422,2,-1,0,unknown,yes +33,management,married,tertiary,no,1808,no,no,cellular,28,dec,250,3,-1,0,unknown,yes +84,retired,married,secondary,no,81204,no,no,telephone,28,dec,679,1,313,2,other,yes +43,management,married,tertiary,no,3518,no,no,cellular,28,dec,206,2,196,2,success,yes +39,technician,single,tertiary,no,25,yes,no,cellular,28,dec,315,1,210,2,success,yes +25,technician,married,tertiary,no,2551,no,no,cellular,28,dec,400,3,-1,0,unknown,yes +38,admin.,married,secondary,no,11303,no,no,cellular,28,dec,473,2,216,2,failure,yes +44,management,married,unknown,no,2724,no,no,cellular,28,dec,893,1,-1,0,unknown,yes +20,student,single,unknown,no,755,no,no,cellular,29,dec,284,1,-1,0,unknown,yes +32,management,single,tertiary,no,718,yes,no,cellular,29,dec,155,1,197,1,success,yes +23,services,single,secondary,no,870,no,no,cellular,29,dec,296,1,176,4,success,yes +35,unemployed,married,secondary,no,978,no,no,cellular,29,dec,1370,3,209,3,success,yes +61,management,married,secondary,no,544,no,no,cellular,29,dec,63,3,200,9,success,yes +46,management,divorced,tertiary,no,461,no,no,cellular,30,dec,369,2,-1,0,unknown,yes +70,retired,married,primary,no,2795,no,no,cellular,8,jan,301,2,-1,0,unknown,yes +25,technician,single,secondary,no,139,no,yes,cellular,11,jan,202,1,91,1,success,yes +57,retired,married,secondary,no,1044,no,no,telephone,11,jan,585,1,192,2,success,yes +55,admin.,married,secondary,no,1633,no,no,cellular,11,jan,210,1,192,2,success,yes +33,management,married,tertiary,no,6513,yes,no,cellular,11,jan,170,1,343,1,other,yes +73,retired,married,primary,no,1388,no,no,telephone,11,jan,767,2,83,1,success,yes +34,unemployed,single,secondary,no,15,no,no,cellular,12,jan,377,1,-1,0,unknown,yes +31,technician,single,secondary,no,2544,no,no,cellular,12,jan,229,1,279,2,success,yes +25,blue-collar,single,secondary,no,2007,no,no,cellular,12,jan,265,2,-1,0,unknown,yes +30,technician,married,tertiary,no,2166,no,no,cellular,12,jan,316,2,-1,0,unknown,yes +28,self-employed,single,tertiary,no,4579,no,no,cellular,12,jan,409,2,-1,0,unknown,yes +21,student,single,secondary,no,2488,no,no,telephone,12,jan,661,2,92,1,success,yes +87,retired,married,primary,no,2190,no,no,telephone,12,jan,512,2,-1,0,unknown,yes +22,student,single,secondary,no,254,no,no,cellular,13,jan,143,2,-1,0,unknown,yes +28,self-employed,single,tertiary,no,1579,no,no,cellular,13,jan,163,1,91,3,failure,yes +31,unemployed,married,tertiary,no,330,no,no,cellular,13,jan,260,1,194,2,success,yes +60,retired,married,secondary,no,938,no,no,cellular,13,jan,380,3,-1,0,unknown,yes +41,technician,single,unknown,no,5372,yes,no,cellular,13,jan,248,3,-1,0,unknown,yes +24,student,single,secondary,no,3176,no,no,cellular,13,jan,108,2,-1,0,unknown,yes +54,management,divorced,tertiary,no,496,no,no,cellular,13,jan,452,3,-1,0,unknown,yes +35,technician,single,tertiary,no,0,no,no,cellular,14,jan,187,7,-1,0,unknown,yes +70,retired,divorced,primary,no,482,no,no,telephone,14,jan,372,1,196,2,success,yes +62,blue-collar,married,secondary,no,180,no,no,cellular,14,jan,183,1,90,4,other,yes +59,technician,married,primary,no,4198,no,no,cellular,14,jan,309,1,91,10,success,yes +48,unemployed,married,secondary,no,817,no,no,cellular,14,jan,517,1,282,4,success,yes +45,admin.,married,secondary,no,5021,no,no,cellular,14,jan,233,1,-1,0,unknown,yes +36,admin.,married,unknown,no,991,no,no,cellular,14,jan,589,2,-1,0,unknown,yes +33,services,single,secondary,no,133,no,no,cellular,14,jan,305,2,274,1,success,yes +32,admin.,married,secondary,no,366,no,no,cellular,14,jan,366,2,-1,0,unknown,yes +60,retired,divorced,tertiary,no,979,yes,no,cellular,15,jan,295,3,347,1,failure,yes +39,management,married,tertiary,no,2939,no,no,cellular,15,jan,348,2,-1,0,unknown,yes +37,admin.,single,secondary,no,4803,no,no,cellular,15,jan,396,2,-1,0,unknown,yes +85,retired,married,primary,no,1255,no,no,cellular,15,jan,233,3,-1,0,unknown,yes +79,retired,married,primary,no,8556,no,no,telephone,18,jan,326,2,272,2,success,yes +64,retired,married,secondary,no,588,no,no,cellular,18,jan,366,1,91,2,failure,yes +42,technician,married,secondary,no,994,yes,no,cellular,18,jan,453,1,67,9,success,yes +47,blue-collar,married,secondary,no,820,no,no,cellular,18,jan,262,1,91,1,success,yes +66,retired,married,secondary,no,203,no,no,cellular,18,jan,353,1,195,1,success,yes +61,retired,married,secondary,no,86,no,no,cellular,25,jan,639,1,94,1,success,yes +27,admin.,married,tertiary,no,2855,no,no,cellular,25,jan,240,1,301,3,failure,yes +63,retired,married,secondary,no,474,no,no,cellular,25,jan,423,1,-1,0,unknown,yes +36,management,married,tertiary,no,203,no,no,cellular,25,jan,255,1,88,1,success,yes +38,unemployed,married,primary,no,7005,yes,no,cellular,25,jan,696,1,202,2,success,yes +92,retired,married,unknown,no,775,no,no,cellular,26,jan,164,4,96,3,success,yes +77,retired,married,secondary,no,4112,no,no,telephone,26,jan,1616,1,95,2,success,yes +30,admin.,single,secondary,no,255,no,no,cellular,27,jan,143,1,-1,0,unknown,yes +81,retired,married,primary,no,243,no,no,cellular,27,jan,340,1,92,1,success,yes +42,unknown,single,unknown,no,942,no,no,cellular,27,jan,245,1,92,2,success,yes +48,admin.,divorced,secondary,no,1180,no,no,cellular,27,jan,142,1,238,3,other,yes +52,services,married,secondary,no,992,yes,no,cellular,27,jan,342,1,92,2,success,yes +38,housemaid,divorced,secondary,no,70,no,no,cellular,27,jan,164,4,92,4,success,yes +61,admin.,married,unknown,no,4629,yes,no,cellular,27,jan,181,1,92,1,success,yes +20,student,single,unknown,no,829,no,no,cellular,27,jan,196,3,202,2,success,yes +39,admin.,married,secondary,no,0,no,no,cellular,27,jan,366,1,436,10,failure,yes +44,technician,married,secondary,no,2776,yes,no,cellular,27,jan,701,1,-1,0,unknown,yes +73,retired,married,primary,no,279,no,no,cellular,28,jan,399,3,-1,0,unknown,yes +36,student,single,tertiary,no,129,no,no,cellular,28,jan,918,1,93,1,success,yes +48,management,married,tertiary,no,157,no,no,cellular,28,jan,417,4,-1,0,unknown,yes +52,services,married,secondary,no,659,no,no,cellular,28,jan,390,4,93,1,success,yes +30,blue-collar,married,secondary,no,2493,no,no,cellular,28,jan,293,2,-1,0,unknown,yes +36,management,married,tertiary,no,3949,no,no,cellular,28,jan,130,2,-1,0,unknown,yes +80,retired,married,primary,no,997,no,no,cellular,28,jan,151,1,91,3,success,yes +33,technician,married,tertiary,no,1699,no,no,cellular,28,jan,202,1,83,3,success,yes +56,technician,married,tertiary,no,1181,no,no,cellular,28,jan,186,1,433,1,failure,yes +54,admin.,married,secondary,no,0,no,no,cellular,28,jan,161,1,98,2,failure,yes +34,admin.,married,tertiary,no,0,no,no,cellular,28,jan,155,2,-1,0,unknown,yes +66,retired,married,tertiary,no,1948,no,no,cellular,28,jan,216,1,91,4,success,yes +52,blue-collar,married,primary,no,306,no,no,cellular,28,jan,223,1,-1,0,unknown,yes +60,retired,married,secondary,no,18967,yes,no,cellular,29,jan,177,2,-1,0,unknown,yes +28,admin.,single,secondary,no,261,yes,yes,cellular,29,jan,254,3,142,6,success,yes +56,retired,divorced,primary,no,694,no,no,cellular,29,jan,144,1,102,1,other,yes +36,technician,married,tertiary,no,202,no,no,cellular,29,jan,313,1,120,3,failure,yes +45,management,single,tertiary,no,4831,no,no,cellular,29,jan,479,11,-1,0,unknown,yes +60,management,married,unknown,no,264,no,no,telephone,1,feb,265,1,-1,0,unknown,yes +33,entrepreneur,single,secondary,no,278,no,no,cellular,1,feb,563,5,-1,0,unknown,yes +77,retired,married,tertiary,no,7802,no,no,telephone,1,feb,483,2,-1,0,unknown,yes +66,retired,married,primary,no,3629,no,no,cellular,2,feb,474,1,172,2,other,yes +45,management,married,tertiary,no,547,no,no,cellular,2,feb,577,1,-1,0,unknown,yes +30,student,single,unknown,no,4468,no,no,cellular,2,feb,204,1,-1,0,unknown,yes +56,services,married,secondary,no,1989,no,no,cellular,3,feb,336,2,281,2,failure,yes +64,housemaid,married,unknown,no,2645,no,no,telephone,3,feb,219,2,-1,0,unknown,yes +30,technician,single,tertiary,no,4060,no,no,cellular,3,feb,179,1,93,1,other,yes +33,technician,married,secondary,no,303,yes,no,cellular,3,feb,355,1,301,5,success,yes +72,retired,married,primary,no,2600,no,no,cellular,3,feb,443,2,82,3,success,yes +44,technician,married,tertiary,no,1818,yes,yes,cellular,3,feb,508,1,92,4,failure,yes +37,admin.,single,secondary,no,728,no,no,cellular,3,feb,129,1,174,2,other,yes +52,blue-collar,married,secondary,no,955,no,yes,cellular,3,feb,153,1,48,3,success,yes +37,technician,single,secondary,no,265,yes,yes,cellular,3,feb,140,1,366,2,failure,yes +34,management,married,tertiary,no,123,no,no,cellular,3,feb,301,3,-1,0,unknown,yes +78,retired,married,unknown,no,4807,no,no,telephone,3,feb,892,2,104,4,success,yes +45,admin.,married,secondary,no,205,no,no,cellular,3,feb,373,1,92,1,success,yes +68,retired,married,tertiary,no,2812,no,no,cellular,3,feb,279,2,181,1,failure,yes +53,management,married,tertiary,no,6571,no,no,cellular,3,feb,208,1,-1,0,unknown,yes +39,services,married,secondary,no,2758,no,no,cellular,4,feb,658,3,-1,0,unknown,yes +55,management,divorced,tertiary,no,2037,no,no,cellular,4,feb,305,2,94,3,success,yes +32,student,single,tertiary,no,0,no,no,cellular,4,feb,233,3,276,2,failure,yes +76,retired,married,primary,no,2223,no,no,telephone,4,feb,429,1,-1,0,unknown,yes +35,admin.,divorced,secondary,no,1085,no,no,cellular,4,feb,195,6,97,12,other,yes +55,admin.,married,secondary,no,602,no,no,cellular,4,feb,390,2,150,6,success,yes +41,technician,single,tertiary,no,1646,yes,no,cellular,4,feb,261,1,184,6,success,yes +35,unemployed,single,tertiary,no,415,no,no,cellular,4,feb,649,1,176,1,failure,yes +80,retired,married,secondary,no,2354,no,no,telephone,4,feb,739,1,181,2,failure,yes +38,technician,married,secondary,no,318,no,no,cellular,4,feb,383,1,181,5,failure,yes +48,blue-collar,married,secondary,no,1730,yes,no,cellular,4,feb,489,1,178,2,failure,yes +25,management,married,unknown,no,448,no,no,cellular,5,feb,151,1,297,1,success,yes +36,admin.,single,tertiary,no,994,no,no,cellular,5,feb,195,1,176,5,failure,yes +29,housemaid,single,tertiary,no,19,no,no,cellular,5,feb,110,2,64,2,success,yes +58,unemployed,married,secondary,no,1625,no,no,cellular,5,feb,286,2,-1,0,unknown,yes +46,blue-collar,married,secondary,no,1144,yes,no,cellular,8,feb,376,2,129,3,other,yes +23,admin.,single,tertiary,no,897,yes,no,cellular,8,feb,190,2,280,8,failure,yes +67,retired,divorced,secondary,no,704,no,no,cellular,8,feb,186,2,97,1,success,yes +30,management,married,tertiary,no,1996,no,no,cellular,8,feb,1133,3,101,1,other,yes +22,student,single,secondary,no,216,no,no,cellular,8,feb,363,1,187,1,success,yes +45,admin.,married,secondary,no,1206,no,no,telephone,8,feb,309,1,446,3,failure,yes +40,management,married,tertiary,no,1855,no,no,telephone,8,feb,78,6,-1,0,unknown,yes +35,management,married,tertiary,no,62,no,no,cellular,8,feb,469,2,185,2,failure,yes +33,student,married,secondary,no,1536,no,no,cellular,9,feb,359,1,92,3,success,yes +60,technician,married,secondary,no,824,yes,no,cellular,9,feb,127,1,558,7,other,yes +24,student,single,tertiary,no,235,no,no,cellular,9,feb,98,1,92,1,success,yes +18,student,single,unknown,no,108,no,no,cellular,9,feb,92,1,183,1,success,yes +65,entrepreneur,married,tertiary,no,2331,no,no,telephone,9,feb,290,1,92,1,success,yes +27,management,single,tertiary,no,390,no,no,cellular,9,feb,120,2,104,2,failure,yes +35,admin.,single,secondary,no,-32,no,yes,cellular,9,feb,63,4,182,5,failure,yes +39,blue-collar,single,tertiary,no,172,yes,no,cellular,9,feb,125,2,183,2,failure,yes +53,admin.,married,secondary,no,10541,no,no,cellular,9,feb,164,2,92,1,success,yes +23,student,single,secondary,no,480,no,no,cellular,9,feb,742,2,182,1,failure,yes +34,admin.,married,secondary,no,2374,yes,no,cellular,9,feb,243,2,92,3,success,yes +36,management,single,tertiary,no,479,no,no,cellular,9,feb,629,2,-1,0,unknown,yes +52,unemployed,married,secondary,no,94,no,no,cellular,10,feb,153,1,92,13,success,yes +36,student,single,unknown,no,417,no,no,cellular,10,feb,151,1,-1,0,unknown,yes +61,retired,married,tertiary,no,2557,yes,no,cellular,10,feb,158,2,92,5,success,yes +58,technician,married,secondary,no,589,yes,no,cellular,10,feb,511,3,183,6,success,yes +48,unemployed,divorced,secondary,no,201,no,no,cellular,10,feb,406,2,92,2,success,yes +34,management,divorced,tertiary,no,2885,no,no,cellular,10,feb,314,2,156,4,other,yes +58,management,married,secondary,no,2155,no,yes,cellular,10,feb,135,2,92,5,success,yes +39,technician,divorced,secondary,no,902,yes,no,cellular,10,feb,691,2,180,5,failure,yes +44,management,married,tertiary,no,1791,no,no,cellular,11,feb,71,1,190,1,success,yes +54,unknown,married,secondary,no,2206,no,no,cellular,11,feb,449,1,91,3,success,yes +27,student,single,tertiary,no,5291,no,no,cellular,11,feb,293,1,91,4,success,yes +77,retired,married,secondary,no,638,no,no,cellular,11,feb,288,1,188,1,success,yes +30,admin.,single,secondary,no,4448,no,no,cellular,11,feb,112,8,-1,0,unknown,yes +61,retired,married,tertiary,no,5267,no,no,cellular,11,feb,226,3,-1,0,unknown,yes +76,retired,married,primary,no,3324,no,no,cellular,11,feb,309,1,90,4,success,yes +28,blue-collar,married,secondary,no,61,yes,no,cellular,11,feb,253,1,174,4,success,yes +35,management,married,tertiary,no,0,yes,no,cellular,11,feb,391,2,92,5,success,yes +59,technician,married,secondary,no,116,no,no,cellular,11,feb,268,1,183,7,success,yes +42,blue-collar,married,secondary,no,413,yes,no,cellular,11,feb,456,2,184,2,success,yes +35,self-employed,single,tertiary,no,353,no,no,cellular,11,feb,352,1,183,1,success,yes +71,retired,married,secondary,no,1712,no,no,cellular,11,feb,660,1,-1,0,unknown,yes +60,retired,married,secondary,no,523,no,no,cellular,11,feb,467,1,182,3,success,yes +34,blue-collar,married,secondary,no,1454,yes,no,cellular,11,feb,231,2,297,2,failure,yes +57,retired,married,primary,no,9367,no,no,cellular,11,feb,981,1,90,6,success,yes +75,retired,married,secondary,no,291,no,no,cellular,11,feb,515,1,183,1,failure,yes +64,retired,married,tertiary,no,846,no,no,cellular,11,feb,671,1,181,3,failure,yes +36,technician,married,tertiary,no,341,no,no,cellular,12,feb,419,2,183,1,success,yes +29,technician,single,secondary,no,113,no,no,cellular,12,feb,328,2,183,4,success,yes +34,management,single,tertiary,no,13014,no,no,cellular,12,feb,637,1,183,1,success,yes +26,unemployed,single,secondary,no,632,no,no,cellular,12,feb,218,1,-1,0,unknown,yes +41,management,married,tertiary,no,27696,no,no,cellular,12,feb,138,2,184,3,success,yes +47,blue-collar,married,secondary,no,3715,no,no,cellular,12,feb,171,2,182,4,other,yes +52,management,married,tertiary,no,4675,no,no,cellular,12,feb,181,3,-1,0,unknown,yes +32,technician,married,secondary,no,3271,no,no,cellular,12,feb,375,1,374,1,other,yes +21,student,single,secondary,no,123,no,no,telephone,12,feb,379,5,93,2,success,yes +54,technician,married,secondary,no,10185,no,no,cellular,12,feb,251,1,186,3,success,yes +29,management,single,tertiary,no,1026,no,no,cellular,12,feb,138,2,92,2,success,yes +32,management,married,tertiary,no,905,no,no,cellular,12,feb,666,4,-1,0,unknown,yes +38,services,married,secondary,no,775,no,no,cellular,12,feb,1835,3,182,2,success,yes +48,unemployed,married,secondary,no,926,no,no,cellular,15,feb,382,4,185,6,success,yes +46,management,married,tertiary,no,349,no,no,cellular,15,feb,295,2,616,1,failure,yes +32,technician,married,secondary,no,484,yes,no,cellular,15,feb,83,6,187,3,success,yes +49,services,married,primary,no,1830,yes,no,cellular,15,feb,136,1,-1,0,unknown,yes +37,management,married,tertiary,no,2987,yes,no,cellular,15,feb,93,1,91,9,failure,yes +37,technician,single,tertiary,no,197,no,no,cellular,15,feb,531,1,91,2,success,yes +23,student,single,secondary,no,431,no,no,cellular,15,feb,201,3,186,2,success,yes +58,admin.,married,secondary,no,169,no,no,cellular,15,feb,216,1,91,4,success,yes +45,management,married,tertiary,no,226,yes,no,cellular,15,feb,91,4,185,6,success,yes +30,unemployed,single,secondary,no,2424,no,no,cellular,15,feb,337,1,95,2,success,yes +23,student,single,secondary,no,1234,no,no,cellular,15,feb,379,1,91,1,success,yes +34,management,married,tertiary,no,271,yes,no,cellular,15,feb,308,1,94,4,success,yes +27,management,single,tertiary,no,-69,yes,no,cellular,15,feb,205,3,-1,0,unknown,yes +28,student,single,tertiary,no,1562,no,no,cellular,15,feb,659,4,-1,0,unknown,yes +61,self-employed,divorced,tertiary,no,52587,no,no,cellular,15,feb,394,3,189,1,success,yes +27,blue-collar,single,secondary,no,535,no,no,cellular,15,feb,171,1,91,2,success,yes +34,management,single,tertiary,no,2159,no,no,unknown,18,feb,386,1,-1,0,unknown,yes +52,technician,married,secondary,no,195,yes,no,cellular,18,feb,220,1,63,5,failure,yes +28,technician,single,secondary,no,154,yes,no,cellular,18,feb,416,2,-1,0,unknown,yes +35,management,single,tertiary,no,681,no,no,cellular,18,feb,737,1,561,2,success,yes +66,retired,married,secondary,no,2326,no,yes,cellular,18,feb,232,1,181,1,success,yes +52,services,married,secondary,no,961,no,yes,cellular,18,feb,222,1,553,4,failure,yes +26,admin.,single,tertiary,no,2532,yes,yes,cellular,18,feb,269,1,-1,0,unknown,yes +38,management,single,tertiary,no,455,yes,no,cellular,19,feb,255,2,555,6,success,yes +59,self-employed,married,tertiary,no,2013,no,no,cellular,19,feb,222,4,94,2,success,yes +47,blue-collar,married,secondary,no,1568,yes,no,cellular,19,feb,388,1,262,7,success,yes +22,student,single,unknown,no,1215,no,no,cellular,19,feb,145,3,192,1,failure,yes +82,retired,married,secondary,no,121,no,no,telephone,19,feb,330,1,-1,0,unknown,yes +60,retired,divorced,secondary,no,1,no,no,cellular,19,feb,302,1,184,1,success,yes +53,management,married,tertiary,no,597,no,no,unknown,22,feb,392,1,-1,0,unknown,yes +39,management,single,tertiary,no,763,no,no,cellular,22,feb,543,1,189,1,failure,yes +27,unknown,single,unknown,no,326,no,no,cellular,22,feb,326,1,-1,0,unknown,yes +35,management,married,tertiary,no,1380,no,no,cellular,23,feb,155,1,-1,0,unknown,yes +80,housemaid,married,primary,no,0,no,no,cellular,23,feb,639,1,189,1,failure,yes +47,admin.,married,secondary,no,368,no,no,cellular,23,feb,269,1,187,5,success,yes +72,retired,divorced,tertiary,no,438,no,no,cellular,23,feb,279,1,-1,0,unknown,yes +45,management,single,tertiary,no,483,no,no,cellular,23,feb,95,2,265,11,other,yes +37,unemployed,married,tertiary,no,7620,no,no,telephone,23,feb,367,1,176,6,failure,yes +29,self-employed,single,tertiary,no,805,no,no,cellular,23,feb,132,1,103,7,failure,yes +40,management,single,tertiary,no,0,yes,no,cellular,23,feb,228,2,182,6,failure,yes +32,management,married,tertiary,no,302,yes,yes,unknown,23,feb,61,1,384,2,failure,yes +20,student,single,secondary,no,215,no,no,cellular,24,feb,175,1,92,6,success,yes +48,housemaid,married,tertiary,no,5473,no,no,cellular,24,feb,127,2,184,2,success,yes +60,admin.,married,secondary,no,106,no,no,cellular,24,feb,137,1,187,4,success,yes +70,retired,married,primary,no,2346,no,no,cellular,24,feb,694,1,184,5,failure,yes +78,retired,divorced,secondary,no,3219,no,no,cellular,24,feb,151,1,-1,0,unknown,yes +52,admin.,single,unknown,no,2227,no,no,cellular,24,feb,242,2,-1,0,unknown,yes +61,self-employed,divorced,tertiary,no,6610,no,no,cellular,24,feb,481,2,-1,0,unknown,yes +27,services,single,secondary,no,195,yes,no,cellular,25,feb,416,3,-1,0,unknown,yes +63,technician,married,secondary,no,973,no,no,cellular,25,feb,318,1,388,1,success,yes +59,technician,married,secondary,no,7766,yes,no,cellular,25,feb,1422,1,461,1,failure,yes +22,student,single,secondary,no,948,no,no,telephone,25,feb,169,1,191,3,success,yes +66,management,married,unknown,no,2149,yes,no,cellular,25,feb,98,1,87,10,failure,yes +74,retired,married,primary,no,1413,no,no,cellular,25,feb,385,2,-1,0,unknown,yes +52,technician,married,secondary,no,117,no,no,cellular,26,feb,959,3,186,6,success,yes +71,retired,divorced,secondary,no,0,no,no,cellular,26,feb,771,1,171,1,success,yes +33,management,married,tertiary,no,71,no,no,cellular,26,feb,335,3,102,2,failure,yes +56,technician,married,secondary,no,1938,no,yes,cellular,26,feb,229,1,192,4,success,yes +30,management,single,tertiary,no,5359,no,no,cellular,26,feb,427,1,191,3,success,yes +73,retired,married,unknown,no,519,no,no,telephone,26,feb,270,3,133,2,success,yes +28,blue-collar,single,secondary,no,-46,yes,no,cellular,2,mar,525,1,89,11,failure,yes +27,technician,single,tertiary,no,1075,no,no,cellular,2,mar,658,1,-1,0,unknown,yes +38,services,single,secondary,no,91,no,no,cellular,2,mar,207,1,-1,0,unknown,yes +28,technician,single,secondary,no,598,yes,no,cellular,2,mar,177,1,288,2,failure,yes +37,management,single,tertiary,no,1027,yes,no,cellular,2,mar,313,1,152,2,success,yes +47,technician,married,primary,no,235,no,no,cellular,2,mar,136,2,203,1,other,yes +60,retired,divorced,tertiary,no,2,no,no,cellular,2,mar,228,4,390,2,other,yes +42,technician,married,secondary,no,4945,yes,no,cellular,2,mar,311,2,-1,0,unknown,yes +27,student,single,tertiary,no,311,no,no,telephone,2,mar,187,3,322,1,other,yes +25,student,single,secondary,no,154,no,no,cellular,3,mar,141,1,180,2,failure,yes +90,retired,divorced,primary,no,712,no,no,telephone,3,mar,557,1,-1,0,unknown,yes +29,student,single,unknown,no,7585,no,no,cellular,3,mar,145,2,198,1,failure,yes +29,technician,single,tertiary,no,2489,yes,no,cellular,3,mar,355,1,86,5,failure,yes +63,retired,married,secondary,no,2896,no,no,cellular,4,mar,180,2,-1,0,unknown,yes +32,management,single,tertiary,no,354,no,no,cellular,4,mar,177,2,133,5,other,yes +32,management,married,tertiary,no,2667,yes,no,cellular,4,mar,251,1,181,4,failure,yes +42,management,married,tertiary,no,144,no,no,cellular,4,mar,148,1,87,4,failure,yes +26,admin.,single,tertiary,no,760,yes,no,cellular,4,mar,456,2,281,5,success,yes +73,retired,single,secondary,no,1050,no,no,cellular,4,mar,562,3,181,2,failure,yes +26,student,single,secondary,no,5296,no,no,cellular,5,mar,229,1,205,1,failure,yes +60,admin.,married,secondary,no,12980,no,no,cellular,5,mar,115,1,-1,0,unknown,yes +25,blue-collar,single,secondary,no,509,no,no,cellular,5,mar,418,1,-1,0,unknown,yes +64,retired,married,tertiary,no,1644,no,no,telephone,5,mar,341,4,179,4,success,yes +68,retired,married,primary,no,451,no,no,cellular,5,mar,373,1,-1,0,unknown,yes +39,services,married,secondary,no,53,no,no,unknown,5,mar,257,1,394,1,failure,yes +40,unemployed,single,secondary,no,334,no,no,cellular,5,mar,219,1,91,6,other,yes +37,management,married,tertiary,no,6771,no,no,cellular,5,mar,319,1,-1,0,unknown,yes +36,services,married,secondary,no,52,yes,no,cellular,5,mar,498,2,179,7,success,yes +33,management,divorced,tertiary,no,2240,no,no,cellular,8,mar,264,2,278,1,success,yes +83,retired,married,tertiary,no,4761,no,no,telephone,8,mar,659,1,-1,0,unknown,yes +31,technician,married,tertiary,no,1570,yes,no,cellular,8,mar,277,4,286,1,failure,yes +64,unemployed,divorced,secondary,no,588,no,no,cellular,8,mar,409,1,-1,0,unknown,yes +59,unemployed,married,secondary,no,957,no,no,cellular,8,mar,301,1,89,2,success,yes +33,management,single,tertiary,no,224,no,no,cellular,8,mar,241,2,-1,0,unknown,yes +35,management,married,tertiary,no,2161,no,no,cellular,9,mar,139,2,181,3,success,yes +69,retired,married,unknown,no,426,no,no,telephone,9,mar,225,1,90,1,success,yes +31,management,single,tertiary,no,147,no,no,cellular,9,mar,469,1,181,2,success,yes +73,retired,married,primary,no,508,no,no,cellular,9,mar,176,1,-1,0,unknown,yes +35,technician,married,secondary,no,294,yes,no,cellular,9,mar,301,1,90,4,success,yes +28,management,single,tertiary,no,1825,no,no,cellular,9,mar,236,1,-1,0,unknown,yes +34,management,married,tertiary,no,158,no,no,cellular,9,mar,212,3,181,6,success,yes +33,management,married,tertiary,no,0,yes,no,cellular,9,mar,305,1,326,1,success,yes +36,services,married,secondary,no,4721,no,no,cellular,9,mar,288,2,90,3,success,yes +44,management,married,unknown,no,282,no,no,cellular,9,mar,700,2,154,3,success,yes +19,student,single,unknown,no,108,no,no,cellular,9,mar,273,2,182,1,success,yes +28,management,single,tertiary,no,187,no,no,cellular,9,mar,295,1,-1,0,unknown,yes +51,blue-collar,married,primary,no,3764,no,no,telephone,9,mar,450,3,181,6,success,yes +52,unemployed,married,secondary,no,1416,no,no,cellular,10,mar,436,2,182,1,success,yes +61,retired,married,secondary,no,2801,yes,yes,cellular,10,mar,239,1,-1,0,unknown,yes +39,management,married,tertiary,no,494,no,no,cellular,10,mar,106,2,478,3,failure,yes +37,unemployed,married,secondary,no,1978,no,no,cellular,11,mar,335,1,-1,0,unknown,yes +80,retired,married,primary,no,155,no,no,telephone,12,mar,290,1,93,2,success,yes +61,admin.,married,secondary,no,4608,no,no,cellular,12,mar,212,1,-1,0,unknown,yes +72,retired,married,secondary,no,951,no,yes,cellular,12,mar,229,3,339,1,failure,yes +36,management,married,tertiary,no,495,no,no,cellular,12,mar,213,3,182,6,success,yes +74,retired,married,tertiary,no,1843,no,no,cellular,15,mar,192,1,185,2,success,yes +35,blue-collar,married,secondary,no,262,no,no,cellular,15,mar,427,1,181,3,success,yes +82,retired,divorced,primary,no,0,no,no,telephone,15,mar,506,2,195,1,other,yes +71,retired,married,tertiary,no,3561,no,no,telephone,15,mar,577,7,-1,0,unknown,yes +38,housemaid,single,secondary,no,465,yes,no,cellular,16,mar,180,1,302,3,success,yes +38,management,married,unknown,no,76,no,no,cellular,16,mar,261,1,-1,0,unknown,yes +53,admin.,married,secondary,no,1796,no,no,telephone,16,mar,295,1,91,2,success,yes +29,management,single,tertiary,no,874,yes,no,cellular,16,mar,231,1,181,2,success,yes +64,retired,married,primary,no,2140,no,no,cellular,16,mar,881,3,155,2,failure,yes +35,unemployed,single,secondary,no,295,no,no,unknown,17,mar,473,1,-1,0,unknown,yes +35,admin.,married,secondary,no,304,no,no,cellular,18,mar,237,1,-1,0,unknown,yes +46,management,divorced,tertiary,no,624,no,no,cellular,18,mar,420,1,276,1,other,yes +25,blue-collar,single,secondary,no,303,no,no,cellular,18,mar,265,1,-1,0,unknown,yes +46,management,married,tertiary,no,273,yes,no,cellular,18,mar,910,2,184,4,success,yes +59,management,married,tertiary,no,3342,no,no,cellular,18,mar,467,2,188,6,other,yes +35,technician,single,secondary,no,1227,no,no,cellular,18,mar,593,4,90,6,other,yes +22,technician,single,secondary,no,283,yes,no,cellular,22,mar,254,2,-1,0,unknown,yes +31,management,single,tertiary,no,3384,no,no,cellular,22,mar,247,3,187,3,success,yes +43,management,divorced,tertiary,no,2367,no,no,cellular,22,mar,173,2,181,4,success,yes +35,management,single,tertiary,no,5958,yes,no,cellular,22,mar,215,1,-1,0,unknown,yes +60,admin.,married,secondary,no,3735,no,no,cellular,22,mar,248,1,90,10,success,yes +54,management,married,secondary,no,2693,no,no,cellular,22,mar,222,1,188,6,other,yes +29,self-employed,single,tertiary,no,655,no,no,cellular,23,mar,273,1,-1,0,unknown,yes +30,student,single,secondary,no,1681,no,no,cellular,23,mar,128,1,106,2,success,yes +28,management,single,tertiary,no,866,no,no,cellular,23,mar,191,2,-1,0,unknown,yes +43,services,married,secondary,no,774,no,no,cellular,25,mar,101,1,421,1,success,yes +37,services,married,secondary,no,2678,no,no,cellular,25,mar,156,1,-1,0,unknown,yes +62,management,married,tertiary,no,3371,no,no,cellular,25,mar,187,1,178,2,success,yes +57,management,married,tertiary,no,10583,no,no,cellular,25,mar,272,1,178,6,success,yes +33,management,single,tertiary,no,4176,no,no,cellular,26,mar,288,3,-1,0,unknown,yes +47,management,single,tertiary,no,334,yes,no,cellular,26,mar,360,1,326,8,failure,yes +39,technician,single,tertiary,no,393,no,no,cellular,26,mar,281,1,-1,0,unknown,yes +30,self-employed,single,tertiary,no,916,no,no,cellular,29,mar,92,2,90,2,success,yes +28,admin.,single,tertiary,no,832,no,no,telephone,29,mar,433,3,342,1,failure,yes +57,management,divorced,tertiary,no,3287,no,no,cellular,30,mar,277,2,337,1,success,yes +23,services,single,secondary,no,488,no,no,cellular,30,mar,236,1,92,2,other,yes +56,housemaid,single,tertiary,no,1947,no,no,unknown,30,mar,110,1,-1,0,unknown,yes +44,admin.,divorced,tertiary,no,558,yes,no,cellular,31,mar,262,2,-1,0,unknown,yes +80,retired,divorced,primary,no,235,no,no,cellular,31,mar,577,1,223,3,other,yes +47,management,married,tertiary,no,288,no,no,cellular,31,mar,193,1,181,1,success,yes +27,student,single,secondary,no,6036,no,no,cellular,31,mar,175,1,181,1,failure,yes +26,management,single,tertiary,no,3,yes,yes,cellular,1,apr,149,1,350,1,success,yes +50,technician,divorced,secondary,no,0,no,no,cellular,1,apr,280,1,184,3,success,yes +84,retired,married,secondary,no,81204,no,no,telephone,1,apr,390,1,94,3,success,yes +86,retired,married,primary,no,5236,no,no,telephone,1,apr,558,2,-1,0,unknown,yes +46,management,married,unknown,no,2466,no,no,telephone,1,apr,216,3,370,1,failure,yes +45,technician,married,secondary,no,1348,no,yes,cellular,1,apr,358,2,-1,0,unknown,yes +60,blue-collar,married,primary,no,7929,no,no,unknown,1,apr,111,1,-1,0,unknown,yes +47,admin.,married,secondary,no,70,yes,no,cellular,5,apr,144,4,374,2,success,yes +53,admin.,married,secondary,no,459,no,no,cellular,5,apr,558,1,-1,0,unknown,yes +54,technician,married,secondary,no,2102,yes,no,cellular,5,apr,547,1,626,2,failure,yes +19,student,single,secondary,no,394,no,no,cellular,5,apr,327,3,-1,0,unknown,yes +24,student,single,secondary,no,4126,no,no,cellular,5,apr,907,4,185,7,failure,yes +39,management,divorced,tertiary,no,224,no,no,cellular,5,apr,208,1,-1,0,unknown,yes +53,technician,married,tertiary,no,9001,no,no,cellular,5,apr,170,1,-1,0,unknown,yes +29,management,single,unknown,no,560,no,no,cellular,5,apr,459,1,307,1,failure,yes +30,management,married,tertiary,no,102,yes,no,cellular,5,apr,470,7,426,3,other,yes +32,management,single,secondary,no,1088,yes,no,cellular,6,apr,317,1,363,2,success,yes +33,self-employed,single,tertiary,no,562,yes,yes,cellular,6,apr,196,1,363,1,failure,yes +33,management,single,tertiary,no,718,yes,no,cellular,6,apr,122,1,98,2,success,yes +57,retired,married,unknown,no,230,no,no,cellular,6,apr,177,2,210,3,failure,yes +27,technician,single,tertiary,no,-67,yes,no,cellular,6,apr,604,3,236,2,failure,yes +55,management,married,tertiary,no,3848,yes,no,cellular,8,apr,222,2,-1,0,unknown,yes +36,management,single,tertiary,no,579,no,no,unknown,12,apr,481,1,-1,0,unknown,yes +26,management,single,tertiary,no,1646,no,no,cellular,12,apr,524,4,206,5,success,yes +31,admin.,married,secondary,no,1229,no,no,cellular,12,apr,176,1,-1,0,unknown,yes +25,unemployed,single,primary,no,129,no,no,cellular,12,apr,176,3,-1,0,unknown,yes +49,admin.,married,secondary,no,197,yes,no,cellular,13,apr,223,1,182,2,failure,yes +30,management,single,tertiary,no,3779,no,no,cellular,13,apr,1093,1,-1,0,unknown,yes +32,management,single,tertiary,no,2016,no,no,cellular,13,apr,232,1,348,1,success,yes +36,management,single,tertiary,no,436,no,no,cellular,13,apr,567,1,595,2,failure,yes +38,management,married,tertiary,no,413,no,no,cellular,13,apr,240,1,179,2,failure,yes +45,blue-collar,single,primary,no,116,no,no,unknown,13,apr,122,1,-1,0,unknown,yes +36,management,single,unknown,no,62,no,no,cellular,13,apr,398,2,-1,0,unknown,yes +23,student,single,secondary,no,107,no,no,cellular,13,apr,256,5,181,2,success,yes +38,technician,married,secondary,no,497,no,no,unknown,14,apr,173,1,-1,0,unknown,yes +44,services,married,primary,no,2557,yes,no,cellular,14,apr,250,1,181,8,success,yes +35,management,single,tertiary,no,2646,no,no,cellular,14,apr,133,8,183,2,success,yes +75,retired,married,secondary,no,3771,no,no,telephone,15,apr,185,1,181,2,success,yes +26,technician,single,tertiary,no,1066,no,no,cellular,15,apr,200,1,-1,0,unknown,yes +59,technician,married,secondary,no,1,no,no,cellular,15,apr,159,2,378,3,failure,yes +30,management,single,tertiary,no,232,no,no,cellular,15,apr,141,1,-1,0,unknown,yes +36,blue-collar,married,primary,no,1177,no,no,cellular,15,apr,330,1,311,4,success,yes +39,technician,married,secondary,no,603,no,yes,cellular,15,apr,214,1,-1,0,unknown,yes +24,management,single,tertiary,no,736,yes,no,cellular,15,apr,442,2,246,2,other,yes +22,services,single,secondary,no,129,no,no,cellular,15,apr,218,2,181,1,success,yes +36,management,married,tertiary,no,-115,yes,no,cellular,16,apr,297,4,182,2,other,yes +22,management,single,tertiary,no,104,no,yes,cellular,16,apr,330,3,-1,0,unknown,yes +34,management,married,tertiary,no,589,no,no,cellular,19,apr,125,2,-1,0,unknown,yes +22,student,single,primary,no,3472,no,no,cellular,19,apr,529,1,181,4,success,yes +57,management,married,tertiary,no,2845,yes,no,telephone,19,apr,1143,5,-1,0,unknown,yes +30,student,single,tertiary,no,7529,no,no,cellular,20,apr,175,6,183,1,success,yes +55,unemployed,divorced,secondary,no,309,no,no,cellular,20,apr,167,1,181,3,success,yes +38,blue-collar,divorced,secondary,no,0,yes,no,telephone,20,apr,162,1,181,5,success,yes +39,blue-collar,single,secondary,no,1672,yes,no,cellular,20,apr,462,1,648,1,failure,yes +38,technician,single,secondary,no,1711,no,no,cellular,20,apr,379,3,202,1,success,yes +24,admin.,single,secondary,no,1295,no,no,cellular,21,apr,476,1,-1,0,unknown,yes +30,student,single,secondary,no,2046,no,no,telephone,21,apr,595,3,254,1,failure,yes +29,blue-collar,single,tertiary,no,455,no,no,telephone,21,apr,403,1,-1,0,unknown,yes +25,student,single,unknown,no,722,no,no,telephone,21,apr,623,2,-1,0,unknown,yes +52,technician,married,secondary,no,371,yes,yes,cellular,21,apr,224,2,182,1,success,yes +62,management,married,tertiary,no,997,no,no,cellular,22,apr,554,1,304,2,success,yes +40,technician,married,tertiary,no,206,no,no,cellular,23,apr,499,6,185,4,success,yes +76,retired,married,secondary,no,820,no,no,telephone,23,apr,263,4,-1,0,unknown,yes +31,admin.,single,secondary,no,410,no,no,cellular,23,apr,342,1,-1,0,unknown,yes +42,self-employed,married,secondary,no,1216,yes,no,cellular,23,apr,296,1,521,1,failure,yes +43,technician,single,unknown,no,11115,no,no,cellular,23,apr,291,1,182,3,success,yes +73,retired,married,primary,no,796,no,no,cellular,23,apr,888,1,182,3,success,yes +41,management,divorced,tertiary,no,5037,no,no,cellular,23,apr,252,9,185,5,other,yes +77,management,married,unknown,no,1780,yes,no,cellular,23,apr,361,2,182,5,success,yes +46,admin.,divorced,primary,no,429,yes,no,cellular,26,apr,465,2,369,2,success,yes +35,technician,married,secondary,no,2779,no,no,cellular,26,apr,182,2,186,2,success,yes +26,management,single,tertiary,no,222,no,no,cellular,26,apr,192,1,334,1,failure,yes +45,blue-collar,single,secondary,no,0,yes,no,cellular,26,apr,1472,1,192,4,failure,yes +29,management,single,tertiary,no,1445,no,no,cellular,26,apr,328,2,143,2,success,yes +30,technician,single,tertiary,no,655,no,no,cellular,26,apr,212,1,202,2,success,yes +26,unemployed,single,tertiary,no,77,no,no,cellular,26,apr,175,1,-1,0,unknown,yes +63,blue-collar,married,primary,no,115,no,no,telephone,27,apr,325,1,180,7,failure,yes +37,unemployed,single,secondary,no,2722,no,no,telephone,27,apr,426,2,179,3,other,yes +26,management,single,tertiary,no,1438,no,no,cellular,27,apr,321,1,449,1,other,yes +54,admin.,married,unknown,no,140,no,no,telephone,27,apr,473,2,182,2,failure,yes +30,admin.,single,secondary,no,915,yes,no,unknown,27,apr,370,1,-1,0,unknown,yes +61,retired,married,secondary,no,1058,no,no,cellular,27,apr,159,3,-1,0,unknown,yes +69,retired,married,secondary,no,0,no,no,cellular,28,apr,184,2,126,2,other,yes +76,self-employed,married,unknown,no,4984,no,no,telephone,28,apr,403,1,182,1,success,yes +30,management,single,tertiary,no,697,no,no,cellular,28,apr,545,2,181,8,success,yes +64,retired,married,secondary,no,4787,no,no,cellular,28,apr,392,1,182,1,success,yes +55,housemaid,married,secondary,no,962,yes,no,cellular,28,apr,623,1,181,3,success,yes +55,technician,married,tertiary,no,1320,no,no,cellular,28,apr,387,2,-1,0,unknown,yes +29,management,single,tertiary,no,2955,no,no,cellular,29,apr,226,2,-1,0,unknown,yes +41,unemployed,married,tertiary,no,0,no,no,cellular,29,apr,882,1,181,3,success,yes +63,retired,married,primary,no,12067,no,no,telephone,29,apr,660,1,191,1,failure,yes +45,admin.,married,secondary,no,3006,no,no,cellular,29,apr,388,2,-1,0,unknown,yes +32,technician,single,tertiary,no,388,no,no,cellular,29,apr,250,3,-1,0,unknown,yes +41,self-employed,married,tertiary,no,0,yes,no,telephone,29,apr,395,3,426,1,other,yes +37,management,married,secondary,no,565,no,no,cellular,29,apr,449,1,398,1,success,yes +19,student,single,secondary,no,329,no,no,cellular,30,apr,169,1,190,2,success,yes +61,retired,divorced,secondary,no,4243,no,no,cellular,30,apr,315,1,182,2,success,yes +40,unemployed,single,tertiary,no,72,no,no,cellular,30,apr,463,1,-1,0,unknown,yes +30,management,married,tertiary,no,4328,no,no,cellular,30,apr,262,3,189,11,other,yes +54,technician,married,tertiary,no,395,no,no,cellular,30,apr,183,1,183,2,success,yes +49,admin.,married,secondary,no,0,no,no,cellular,30,apr,551,1,-1,0,unknown,yes +45,admin.,married,secondary,no,205,no,no,cellular,4,may,552,1,90,2,success,yes +48,blue-collar,married,secondary,no,1730,yes,no,cellular,4,may,361,1,89,3,success,yes +60,blue-collar,married,primary,no,5,no,no,cellular,4,may,494,1,95,2,success,yes +34,unemployed,single,secondary,no,1965,no,no,telephone,4,may,714,1,-1,0,unknown,yes +29,housemaid,single,tertiary,no,19,no,no,cellular,4,may,268,1,88,4,success,yes +77,retired,married,tertiary,no,7802,no,no,telephone,4,may,421,1,92,2,success,yes +64,management,married,unknown,no,2352,no,no,cellular,4,may,153,2,182,11,success,yes +80,retired,married,primary,no,155,no,no,telephone,4,may,209,1,53,3,success,yes +26,technician,single,tertiary,no,401,no,no,cellular,5,may,188,2,-1,0,unknown,yes +33,admin.,married,tertiary,no,79,yes,no,cellular,5,may,389,1,195,4,success,yes +41,technician,single,tertiary,no,1646,yes,no,cellular,5,may,258,1,90,7,success,yes +28,management,single,tertiary,no,437,no,no,cellular,5,may,338,1,-1,0,unknown,yes +74,retired,married,secondary,no,935,no,no,cellular,5,may,226,1,99,2,failure,yes +29,student,single,unknown,no,2929,no,no,cellular,5,may,232,1,89,4,other,yes +72,retired,married,primary,no,2304,no,no,telephone,5,may,510,4,-1,0,unknown,yes +18,student,single,unknown,no,348,no,no,cellular,5,may,443,4,-1,0,unknown,yes +46,blue-collar,married,secondary,no,640,yes,no,cellular,6,may,246,1,55,5,success,yes +37,technician,married,tertiary,no,88,no,no,cellular,6,may,195,1,90,3,other,yes +37,management,married,tertiary,no,2283,no,no,cellular,6,may,243,2,98,2,failure,yes +32,technician,married,secondary,no,473,no,yes,cellular,7,may,292,3,-1,0,unknown,yes +51,technician,married,tertiary,no,0,no,no,cellular,7,may,662,2,66,2,success,yes +77,unknown,married,unknown,no,397,no,no,telephone,7,may,300,3,-1,0,unknown,yes +35,management,married,tertiary,no,62,no,no,cellular,7,may,226,2,88,4,success,yes +53,management,married,tertiary,no,3634,no,no,cellular,7,may,211,4,88,8,success,yes +46,management,married,tertiary,no,273,yes,no,cellular,10,may,583,6,53,6,success,yes +78,retired,divorced,secondary,no,3417,no,no,cellular,12,may,309,1,181,1,success,yes +34,technician,married,secondary,no,133,no,no,cellular,12,may,171,2,181,3,success,yes +54,management,married,tertiary,no,1624,no,no,cellular,12,may,166,3,182,10,success,yes +33,services,married,secondary,no,386,no,no,cellular,12,may,317,1,181,5,success,yes +23,student,single,unknown,no,2530,no,no,cellular,12,may,411,1,-1,0,unknown,yes +34,technician,single,tertiary,no,2838,yes,no,cellular,13,may,620,3,-1,0,unknown,yes +32,unemployed,single,secondary,no,1026,yes,no,cellular,13,may,289,1,-1,0,unknown,yes +54,unknown,married,secondary,no,2206,no,no,cellular,13,may,260,1,91,4,success,yes +40,admin.,married,secondary,no,260,yes,no,cellular,13,may,306,1,181,5,success,yes +63,retired,divorced,tertiary,no,0,no,no,cellular,13,may,263,1,181,2,success,yes +37,management,married,tertiary,no,2987,yes,no,cellular,13,may,216,1,87,10,success,yes +48,blue-collar,married,secondary,no,1230,yes,no,cellular,13,may,328,2,182,3,success,yes +28,technician,single,secondary,no,2335,no,no,cellular,13,may,624,1,-1,0,unknown,yes +35,management,married,tertiary,no,8000,no,no,cellular,13,may,331,1,90,3,success,yes +29,management,single,tertiary,no,-27,no,no,cellular,13,may,270,1,-1,0,unknown,yes +68,retired,married,secondary,no,1146,no,no,cellular,13,may,356,1,71,5,success,yes +53,blue-collar,single,secondary,no,1004,no,no,cellular,13,may,393,1,84,1,other,yes +37,technician,single,tertiary,no,197,no,no,cellular,13,may,234,1,87,3,success,yes +58,admin.,married,secondary,no,169,no,no,cellular,13,may,336,3,87,5,success,yes +37,management,married,tertiary,no,393,yes,no,cellular,14,may,567,3,275,4,failure,yes +37,admin.,married,tertiary,no,29,no,no,cellular,14,may,404,2,183,2,other,yes +34,admin.,married,secondary,no,920,no,no,cellular,14,may,526,3,179,3,success,yes +50,admin.,married,secondary,no,3608,yes,no,cellular,14,may,196,8,182,4,success,yes +56,management,married,primary,no,870,no,no,cellular,14,may,220,1,179,1,success,yes +57,retired,married,primary,no,9367,no,no,cellular,14,may,700,4,92,7,success,yes +29,unemployed,single,primary,no,1374,no,no,cellular,14,may,1205,2,178,7,success,yes +75,retired,married,tertiary,no,6027,no,no,cellular,14,may,809,1,179,4,success,yes +24,management,single,tertiary,no,1,no,no,cellular,14,may,396,5,-1,0,unknown,yes +46,management,married,tertiary,no,349,no,no,cellular,14,may,466,4,88,3,success,yes +27,student,single,tertiary,no,39,no,no,cellular,17,may,379,1,258,10,other,yes +52,management,married,tertiary,no,583,no,no,cellular,17,may,376,1,181,3,success,yes +38,management,married,tertiary,no,1276,no,no,cellular,17,may,272,2,182,3,success,yes +33,management,single,tertiary,no,2364,no,no,cellular,17,may,508,1,-1,0,unknown,yes +53,admin.,married,secondary,no,53,yes,no,cellular,18,may,387,1,-1,0,unknown,yes +64,retired,married,secondary,no,1612,no,no,cellular,18,may,336,1,89,5,failure,yes +84,retired,divorced,primary,no,639,no,no,telephone,18,may,353,3,-1,0,unknown,yes +62,retired,married,secondary,no,3114,no,no,cellular,18,may,243,2,186,1,success,yes +41,admin.,married,tertiary,no,1,yes,no,telephone,18,may,327,2,361,3,failure,yes +29,admin.,single,secondary,no,1070,yes,no,unknown,19,may,30,1,357,1,other,yes +53,technician,married,secondary,no,195,yes,no,cellular,19,may,472,1,90,6,success,yes +30,technician,single,secondary,no,3144,no,no,cellular,19,may,212,2,-1,0,unknown,yes +37,management,married,tertiary,no,3236,no,no,cellular,20,may,291,2,202,5,other,yes +78,retired,married,unknown,no,3208,no,no,telephone,20,may,351,3,-1,0,unknown,yes +47,blue-collar,married,secondary,no,1568,yes,no,cellular,21,may,226,3,91,8,success,yes +61,technician,married,secondary,no,1191,no,no,cellular,21,may,214,4,-1,0,unknown,yes +46,self-employed,married,secondary,no,706,no,no,cellular,21,may,588,1,386,3,failure,yes +31,unemployed,single,secondary,no,2616,no,no,cellular,21,may,374,1,185,2,other,yes +21,student,single,secondary,no,215,no,no,cellular,24,may,382,1,89,7,success,yes +71,retired,married,primary,no,3230,no,no,cellular,24,may,341,2,133,3,failure,yes +52,admin.,single,secondary,no,726,yes,no,cellular,24,may,699,1,378,9,failure,yes +25,student,single,secondary,no,3713,no,no,cellular,24,may,323,2,353,3,other,yes +60,technician,married,secondary,no,0,no,no,cellular,25,may,641,4,-1,0,unknown,yes +30,admin.,single,secondary,no,265,yes,no,cellular,25,may,681,1,181,2,success,yes +29,unemployed,single,tertiary,no,70,no,no,cellular,25,may,393,1,-1,0,unknown,yes +52,management,married,tertiary,no,388,no,no,cellular,25,may,272,1,-1,0,unknown,yes +59,management,married,primary,no,1727,no,no,telephone,25,may,500,4,358,2,failure,yes +38,technician,married,secondary,no,205,no,no,cellular,26,may,332,1,-1,0,unknown,yes +33,services,single,secondary,no,2881,no,no,cellular,26,may,289,1,328,1,success,yes +31,technician,single,secondary,no,846,no,no,cellular,26,may,405,3,205,2,failure,yes +40,technician,married,secondary,no,2266,no,no,cellular,26,may,175,3,89,7,other,yes +28,technician,married,secondary,no,742,no,no,cellular,26,may,236,1,-1,0,unknown,yes +66,management,married,unknown,no,2149,yes,no,cellular,26,may,135,2,90,11,success,yes +32,admin.,single,secondary,no,344,no,no,cellular,26,may,530,2,-1,0,unknown,yes +67,retired,married,primary,no,1430,no,no,telephone,26,may,283,2,135,5,success,yes +39,unemployed,divorced,secondary,no,265,yes,no,unknown,27,may,93,1,555,2,other,yes +46,housemaid,married,secondary,no,38,no,no,cellular,27,may,181,3,183,1,success,yes +54,retired,married,secondary,no,3538,no,no,cellular,27,may,820,1,-1,0,unknown,yes +47,services,divorced,unknown,no,973,no,no,cellular,27,may,489,1,479,1,failure,yes +45,technician,married,secondary,no,1831,no,no,cellular,27,may,275,2,-1,0,unknown,yes +63,blue-collar,married,secondary,no,641,no,no,cellular,27,may,417,2,-1,0,unknown,yes +60,unemployed,married,secondary,no,1047,no,no,cellular,27,may,173,3,279,4,success,yes +29,management,married,tertiary,no,8103,no,no,cellular,28,may,473,3,-1,0,unknown,yes +33,services,single,unknown,no,523,yes,no,unknown,28,may,86,1,-1,0,unknown,yes +48,housemaid,married,secondary,no,0,no,no,cellular,28,may,270,5,-1,0,unknown,yes +26,technician,single,tertiary,no,515,no,no,cellular,31,may,775,1,-1,0,unknown,yes +55,admin.,married,secondary,no,8304,no,no,cellular,1,jun,201,1,-1,0,unknown,yes +36,technician,married,secondary,no,1368,no,no,cellular,1,jun,516,1,292,5,failure,yes +33,admin.,single,tertiary,no,272,yes,no,cellular,1,jun,326,1,237,2,failure,yes +28,blue-collar,single,secondary,no,-46,yes,no,cellular,1,jun,154,2,91,12,success,yes +28,services,single,secondary,no,168,no,no,cellular,1,jun,347,3,140,2,success,yes +31,management,single,tertiary,no,515,no,no,cellular,1,jun,296,5,-1,0,unknown,yes +28,management,single,tertiary,no,223,yes,no,cellular,1,jun,303,1,278,3,success,yes +49,admin.,single,tertiary,no,228,yes,no,cellular,2,jun,407,1,92,1,success,yes +27,blue-collar,single,tertiary,no,644,no,no,cellular,2,jun,657,1,182,1,success,yes +28,admin.,married,secondary,no,330,no,no,cellular,2,jun,226,2,182,4,success,yes +65,admin.,married,secondary,no,952,no,no,cellular,2,jun,310,1,-1,0,unknown,yes +30,technician,single,secondary,no,1165,no,no,cellular,4,jun,204,2,183,3,success,yes +38,admin.,married,secondary,no,0,yes,no,cellular,8,jun,187,1,181,2,success,yes +36,technician,divorced,secondary,no,2823,yes,no,cellular,8,jun,215,1,371,6,failure,yes +63,retired,divorced,secondary,no,1490,no,no,cellular,8,jun,506,1,-1,0,unknown,yes +63,retired,married,primary,no,48,no,no,cellular,9,jun,251,1,-1,0,unknown,yes +28,management,single,tertiary,no,187,no,no,cellular,9,jun,206,1,92,1,success,yes +80,retired,married,secondary,no,8304,no,no,telephone,9,jun,712,1,64,12,failure,yes +39,blue-collar,married,secondary,no,276,no,no,cellular,9,jun,334,2,-1,0,unknown,yes +31,management,single,tertiary,no,147,no,no,cellular,9,jun,163,2,92,3,success,yes +39,services,married,secondary,no,323,no,no,cellular,9,jun,874,2,188,6,failure,yes +30,blue-collar,single,secondary,no,799,no,no,unknown,13,jun,674,1,-1,0,unknown,yes +67,retired,married,unknown,no,2540,no,no,telephone,14,jun,278,5,116,4,other,yes +29,blue-collar,single,secondary,no,322,no,no,unknown,14,jun,434,1,96,6,other,yes +36,management,married,tertiary,no,495,no,no,cellular,14,jun,187,1,94,9,success,yes +24,student,single,unknown,no,358,no,no,cellular,14,jun,245,1,384,1,other,yes +30,technician,single,secondary,no,2371,no,no,cellular,14,jun,661,1,384,2,other,yes +21,student,single,unknown,no,53,no,no,cellular,14,jun,270,1,-1,0,unknown,yes +27,admin.,single,unknown,no,861,no,no,cellular,14,jun,212,4,-1,0,unknown,yes +56,admin.,married,secondary,no,602,no,no,cellular,14,jun,458,1,130,8,success,yes +66,admin.,married,secondary,no,4041,no,no,cellular,14,jun,713,2,-1,0,unknown,yes +71,retired,divorced,primary,no,275,no,no,cellular,14,jun,293,1,425,1,success,yes +26,services,single,tertiary,no,12,no,no,cellular,14,jun,563,1,181,10,failure,yes +62,retired,married,primary,no,1742,no,no,cellular,14,jun,167,2,98,6,other,yes +32,self-employed,single,tertiary,no,46,yes,no,cellular,14,jun,485,2,-1,0,unknown,yes +68,retired,divorced,primary,no,2027,no,no,cellular,15,jun,619,2,92,2,success,yes +37,admin.,married,tertiary,no,3221,no,no,cellular,15,jun,379,2,376,13,other,yes +27,management,single,tertiary,no,1720,no,no,cellular,15,jun,910,1,224,3,success,yes +45,technician,single,tertiary,no,2033,no,no,cellular,15,jun,243,5,285,2,success,yes +64,retired,married,secondary,no,3189,no,no,telephone,15,jun,208,1,-1,0,unknown,yes +38,student,divorced,tertiary,no,2946,no,no,cellular,16,jun,605,3,-1,0,unknown,yes +66,housemaid,married,primary,no,1230,no,no,cellular,16,jun,288,6,181,3,success,yes +30,management,single,tertiary,no,572,no,no,cellular,17,jun,339,3,183,2,success,yes +39,technician,single,secondary,no,1435,no,no,cellular,17,jun,383,1,296,19,other,yes +24,technician,single,secondary,no,403,no,no,unknown,17,jun,247,1,-1,0,unknown,yes +49,technician,married,tertiary,no,1071,no,no,cellular,17,jun,169,1,-1,0,unknown,yes +34,management,married,tertiary,no,3301,yes,no,cellular,17,jun,485,2,227,4,failure,yes +46,blue-collar,married,secondary,no,1723,no,no,cellular,17,jun,176,2,52,7,failure,yes +32,technician,single,tertiary,no,705,no,no,cellular,17,jun,544,1,-1,0,unknown,yes +52,blue-collar,married,secondary,no,955,no,yes,cellular,17,jun,301,2,134,4,success,yes +25,blue-collar,single,secondary,no,303,no,no,cellular,18,jun,252,1,92,1,success,yes +57,management,divorced,tertiary,no,3287,no,no,cellular,22,jun,867,1,84,3,success,yes +64,retired,divorced,primary,no,109,no,no,cellular,23,jun,706,1,225,2,success,yes +33,management,single,tertiary,no,224,no,no,cellular,23,jun,342,2,107,2,success,yes +36,management,single,tertiary,no,538,no,no,cellular,23,jun,339,1,183,5,success,yes +59,management,married,tertiary,no,5397,no,no,cellular,23,jun,671,3,-1,0,unknown,yes +25,student,single,secondary,no,1957,no,no,cellular,24,jun,1207,4,385,1,failure,yes +43,services,married,secondary,no,774,no,no,cellular,24,jun,482,1,91,2,success,yes +37,self-employed,single,tertiary,no,1188,no,no,cellular,24,jun,310,1,-1,0,unknown,yes +49,management,married,tertiary,no,1167,yes,yes,cellular,25,jun,213,6,150,8,failure,yes +42,technician,divorced,tertiary,no,2611,yes,no,cellular,25,jun,300,1,389,3,failure,yes +27,blue-collar,single,secondary,no,3145,no,no,cellular,25,jun,374,1,179,2,success,yes +29,technician,single,secondary,no,825,no,no,cellular,25,jun,472,2,-1,0,unknown,yes +37,technician,married,tertiary,no,122,no,no,cellular,25,jun,266,2,318,3,other,yes +47,management,single,tertiary,no,334,yes,no,cellular,28,jun,614,3,94,9,success,yes +38,management,single,tertiary,no,623,no,no,cellular,28,jun,297,4,144,4,other,yes +48,management,single,tertiary,no,86,no,no,cellular,28,jun,281,3,186,6,other,yes +55,housemaid,divorced,primary,no,976,no,no,cellular,28,jun,345,1,94,3,other,yes +39,technician,single,tertiary,no,393,no,no,cellular,28,jun,325,1,94,1,success,yes +49,admin.,single,secondary,no,293,no,no,cellular,28,jun,452,1,-1,0,unknown,yes +68,retired,divorced,primary,no,476,no,no,telephone,28,jun,363,1,-1,0,unknown,yes +45,management,married,unknown,no,2724,no,no,cellular,28,jun,359,2,182,1,success,yes +67,retired,married,primary,no,2391,no,no,cellular,28,jun,737,6,186,10,other,yes +60,retired,married,secondary,no,11,no,no,cellular,29,jun,265,1,586,2,failure,yes +31,blue-collar,single,secondary,no,54,yes,no,cellular,29,jun,401,1,-1,0,unknown,yes +58,blue-collar,married,primary,no,3109,no,no,cellular,29,jun,295,1,287,4,success,yes +41,admin.,married,secondary,no,3126,yes,no,cellular,29,jun,222,1,91,7,failure,yes +23,services,single,secondary,no,488,no,no,cellular,29,jun,205,1,91,3,success,yes +35,unemployed,married,secondary,no,978,no,no,cellular,29,jun,660,2,182,6,success,yes +33,management,single,tertiary,no,718,yes,no,cellular,29,jun,271,1,84,3,success,yes +32,technician,divorced,tertiary,no,3255,no,no,cellular,29,jun,167,2,-1,0,unknown,yes +48,admin.,single,secondary,no,1544,yes,no,telephone,30,jun,263,1,450,2,failure,yes +43,management,single,tertiary,no,0,no,no,cellular,30,jun,275,2,296,1,failure,yes +32,technician,single,tertiary,no,4071,no,no,cellular,30,jun,319,2,-1,0,unknown,yes +74,retired,divorced,primary,no,29080,no,no,cellular,30,jun,301,5,93,4,other,yes +32,management,single,tertiary,no,12569,no,no,cellular,1,jul,561,2,295,2,success,yes +63,retired,married,secondary,no,2896,no,no,cellular,1,jul,304,1,119,2,success,yes +28,student,single,secondary,no,196,no,no,cellular,2,jul,423,3,-1,0,unknown,yes +31,services,single,secondary,no,1027,no,no,cellular,2,jul,217,3,-1,0,unknown,yes +26,blue-collar,single,secondary,no,463,no,yes,cellular,2,jul,248,2,-1,0,unknown,yes +31,student,single,secondary,no,3511,no,no,cellular,2,jul,667,1,-1,0,unknown,yes +39,management,divorced,tertiary,no,224,no,no,cellular,2,jul,194,2,88,1,success,yes +28,services,single,secondary,no,198,no,no,cellular,5,jul,128,2,-1,0,unknown,yes +30,technician,single,tertiary,no,0,yes,no,cellular,5,jul,140,1,424,8,success,yes +24,admin.,single,tertiary,no,674,yes,no,cellular,6,jul,267,1,-1,0,unknown,yes +32,management,single,tertiary,no,623,no,no,cellular,6,jul,335,3,194,2,failure,yes +46,management,divorced,tertiary,no,558,no,no,cellular,6,jul,319,1,-1,0,unknown,yes +60,technician,married,secondary,no,259,no,no,cellular,6,jul,396,1,386,2,success,yes +37,technician,married,secondary,no,432,yes,no,cellular,6,jul,386,3,776,55,failure,yes +48,management,single,tertiary,no,159,no,no,telephone,7,jul,229,1,251,6,success,yes +52,services,married,secondary,no,657,no,no,telephone,7,jul,398,2,460,2,failure,yes +29,management,single,tertiary,no,1808,no,no,cellular,7,jul,273,2,433,1,success,yes +71,retired,divorced,unknown,no,392,no,no,telephone,7,jul,276,2,-1,0,unknown,yes +47,management,single,tertiary,no,6651,no,no,cellular,8,jul,229,1,412,2,failure,yes +70,retired,married,primary,no,2795,no,no,cellular,8,jul,480,1,181,2,success,yes +28,management,single,tertiary,yes,1414,yes,no,cellular,8,jul,294,1,521,1,failure,yes +31,self-employed,married,tertiary,no,2666,no,no,telephone,8,jul,411,2,148,9,other,yes +80,retired,married,secondary,no,668,no,no,telephone,8,jul,250,1,371,1,success,yes +29,management,single,tertiary,no,502,no,no,cellular,8,jul,968,1,87,5,failure,yes +23,student,single,secondary,no,1809,no,no,cellular,8,jul,414,2,-1,0,unknown,yes +34,services,single,secondary,no,267,no,no,cellular,8,jul,449,2,-1,0,unknown,yes +69,retired,married,secondary,no,2473,no,no,cellular,8,jul,967,3,-1,0,unknown,yes +19,student,single,secondary,no,372,no,no,telephone,8,jul,444,3,-1,0,unknown,yes +35,blue-collar,single,unknown,no,484,no,no,cellular,8,jul,344,1,87,3,failure,yes +38,admin.,married,secondary,no,1767,yes,no,cellular,9,jul,483,4,239,7,success,yes +32,technician,single,unknown,no,491,no,no,cellular,9,jul,474,7,-1,0,unknown,yes +50,unknown,married,unknown,no,558,no,no,cellular,9,jul,464,1,683,6,failure,yes +27,technician,single,secondary,no,337,no,no,unknown,9,jul,23,1,-1,0,unknown,yes +53,admin.,single,secondary,no,654,no,no,unknown,10,jul,67,1,-1,0,unknown,yes +35,self-employed,married,tertiary,no,2427,no,no,cellular,12,jul,210,3,158,7,other,yes +43,admin.,single,secondary,no,386,no,no,cellular,12,jul,220,3,529,1,failure,yes +30,self-employed,single,tertiary,no,251,no,no,cellular,12,jul,537,1,-1,0,unknown,yes +57,retired,married,secondary,no,1044,no,no,telephone,12,jul,567,1,182,3,success,yes +31,management,single,tertiary,no,2907,yes,no,cellular,12,jul,248,1,194,3,failure,yes +65,retired,divorced,secondary,no,828,no,no,cellular,13,jul,305,1,-1,0,unknown,yes +25,blue-collar,single,secondary,no,1857,yes,no,cellular,13,jul,195,2,91,10,success,yes +33,management,single,tertiary,no,1962,no,no,cellular,13,jul,363,1,181,1,failure,yes +79,retired,divorced,primary,no,2787,no,no,telephone,13,jul,617,1,377,1,success,yes +24,student,single,secondary,no,1123,no,no,cellular,13,jul,475,1,412,1,other,yes +27,technician,single,secondary,no,643,no,no,cellular,13,jul,317,1,-1,0,unknown,yes +36,management,single,unknown,no,62,no,no,cellular,13,jul,311,1,91,2,success,yes +26,blue-collar,single,secondary,no,2007,no,no,cellular,13,jul,272,3,182,2,success,yes +51,management,married,tertiary,no,3463,no,yes,cellular,13,jul,371,2,166,3,other,yes +70,retired,divorced,primary,no,482,no,no,telephone,14,jul,413,1,181,3,success,yes +23,student,single,secondary,no,1298,no,no,cellular,14,jul,603,1,-1,0,unknown,yes +41,technician,single,secondary,no,5329,no,no,cellular,14,jul,397,2,-1,0,unknown,yes +53,technician,married,primary,no,6181,no,no,cellular,14,jul,817,2,209,3,other,yes +86,retired,married,primary,no,1255,no,no,telephone,14,jul,247,1,180,3,success,yes +27,student,single,unknown,no,132,no,no,cellular,14,jul,276,1,-1,0,unknown,yes +34,technician,single,tertiary,no,2733,no,no,cellular,14,jul,604,1,-1,0,unknown,yes +68,retired,divorced,secondary,no,4189,no,no,telephone,14,jul,897,2,-1,0,unknown,yes +35,management,married,secondary,no,724,yes,no,cellular,14,jul,287,2,415,1,failure,yes +28,student,single,secondary,no,205,no,no,cellular,14,jul,87,3,184,2,other,yes +66,retired,married,secondary,no,154,no,no,cellular,15,jul,268,5,181,2,failure,yes +30,management,single,tertiary,no,232,no,no,cellular,15,jul,219,1,91,1,success,yes +60,retired,divorced,tertiary,no,979,yes,no,cellular,15,jul,346,1,181,4,success,yes +46,admin.,married,secondary,no,5021,no,no,cellular,15,jul,957,1,182,1,success,yes +68,retired,married,secondary,no,2469,yes,no,telephone,15,jul,552,2,-1,0,unknown,yes +63,blue-collar,married,secondary,no,180,no,no,cellular,15,jul,390,2,182,5,success,yes +29,student,single,secondary,no,658,no,no,cellular,15,jul,198,2,244,4,other,yes +35,services,married,secondary,no,2918,no,yes,cellular,16,jul,815,2,407,3,success,yes +64,retired,married,secondary,no,588,no,no,cellular,16,jul,574,1,179,3,success,yes +22,student,single,primary,no,423,no,no,cellular,16,jul,316,1,179,10,success,yes +19,student,single,secondary,no,302,no,no,cellular,16,jul,205,1,-1,0,unknown,yes +31,management,divorced,tertiary,no,414,no,yes,cellular,16,jul,241,1,-1,0,unknown,yes +48,unemployed,married,secondary,no,817,no,no,cellular,16,jul,806,3,183,5,success,yes +33,technician,married,secondary,no,183,no,no,cellular,16,jul,457,2,182,3,other,yes +34,technician,married,secondary,no,806,no,no,cellular,19,jul,253,3,458,1,success,yes +46,technician,married,secondary,no,9299,no,no,cellular,19,jul,1148,1,276,2,other,yes +60,admin.,married,unknown,no,478,no,no,cellular,19,jul,173,2,311,8,failure,yes +36,management,divorced,tertiary,no,1057,no,no,cellular,19,jul,230,2,164,2,failure,yes +32,entrepreneur,married,tertiary,no,762,no,no,cellular,19,jul,187,11,-1,0,unknown,yes +45,management,married,tertiary,no,31472,no,no,cellular,19,jul,568,7,-1,0,unknown,yes +44,management,single,tertiary,no,1090,no,no,cellular,19,jul,204,4,532,2,other,yes +57,retired,married,secondary,no,3738,yes,no,cellular,20,jul,178,2,92,8,failure,yes +29,admin.,single,secondary,no,1277,no,no,cellular,20,jul,165,2,481,1,success,yes +31,unemployed,divorced,tertiary,no,756,no,no,cellular,20,jul,355,2,-1,0,unknown,yes +54,blue-collar,married,secondary,no,1636,no,no,telephone,20,jul,1008,2,-1,0,unknown,yes +49,management,divorced,tertiary,no,300,no,no,cellular,21,jul,316,1,-1,0,unknown,yes +35,admin.,single,secondary,no,321,no,no,cellular,21,jul,143,1,412,3,other,yes +24,admin.,single,secondary,no,1295,no,no,cellular,22,jul,355,2,92,1,success,yes +43,management,married,tertiary,no,839,no,no,cellular,22,jul,942,1,-1,0,unknown,yes +34,unemployed,single,tertiary,no,1974,no,no,cellular,22,jul,355,1,342,3,success,yes +27,admin.,married,tertiary,no,2855,no,no,cellular,22,jul,138,2,178,4,success,yes +54,management,divorced,tertiary,no,5475,no,no,cellular,22,jul,321,4,-1,0,unknown,yes +38,management,married,tertiary,no,536,yes,no,cellular,22,jul,248,1,-1,0,unknown,yes +34,technician,single,secondary,no,1279,yes,no,cellular,22,jul,174,2,160,8,other,yes +93,retired,married,unknown,no,775,no,no,cellular,22,jul,860,2,177,7,success,yes +36,management,married,tertiary,no,203,no,no,cellular,23,jul,608,3,179,2,success,yes +33,admin.,single,tertiary,no,146,no,no,cellular,23,jul,351,3,-1,0,unknown,yes +35,management,married,tertiary,no,4124,yes,no,cellular,23,jul,350,2,445,7,other,yes +41,admin.,married,secondary,no,14968,no,no,cellular,23,jul,1360,4,-1,0,unknown,yes +36,technician,divorced,secondary,no,1451,yes,no,cellular,23,jul,192,4,93,17,other,yes +30,student,single,tertiary,no,3026,no,no,cellular,23,jul,251,1,535,1,failure,yes +41,technician,single,tertiary,no,431,no,no,cellular,23,jul,196,1,88,5,failure,yes +29,management,single,tertiary,no,985,yes,no,cellular,23,jul,396,2,-1,0,unknown,yes +82,retired,married,primary,no,243,no,no,cellular,26,jul,275,1,180,2,success,yes +37,technician,married,secondary,no,1707,yes,no,cellular,26,jul,546,2,784,3,failure,yes +46,admin.,married,unknown,no,5511,no,no,cellular,26,jul,414,2,389,1,success,yes +44,self-employed,divorced,secondary,no,8,no,no,cellular,26,jul,423,4,-1,0,unknown,yes +61,self-employed,married,tertiary,no,10861,no,no,cellular,26,jul,336,2,259,3,success,yes +33,management,single,tertiary,no,373,no,yes,cellular,27,jul,267,1,180,4,failure,yes +23,management,single,tertiary,no,1807,no,no,cellular,27,jul,606,1,-1,0,unknown,yes +45,technician,married,secondary,no,2776,yes,no,cellular,27,jul,287,2,181,1,success,yes +61,retired,married,secondary,no,1058,no,no,cellular,27,jul,218,2,91,3,success,yes +40,admin.,married,secondary,no,0,no,no,cellular,28,jul,496,2,182,11,success,yes +82,housemaid,divorced,primary,no,1381,no,no,cellular,28,jul,844,5,181,4,failure,yes +27,technician,single,secondary,no,204,no,no,cellular,28,jul,471,2,-1,0,unknown,yes +26,technician,married,secondary,no,267,yes,no,cellular,28,jul,817,2,-1,0,unknown,yes +27,student,single,tertiary,no,311,no,no,cellular,28,jul,462,1,148,4,success,yes +53,blue-collar,married,primary,no,306,no,no,cellular,28,jul,388,3,181,1,success,yes +54,management,married,tertiary,no,752,no,no,telephone,29,jul,211,5,491,4,other,yes +64,retired,married,secondary,no,1574,no,no,telephone,29,jul,301,3,-1,0,unknown,yes +57,technician,married,tertiary,no,1181,no,no,cellular,29,jul,169,2,182,2,success,yes +31,management,single,tertiary,no,1761,yes,no,telephone,29,jul,332,3,440,3,failure,yes +61,admin.,married,unknown,no,4629,yes,no,cellular,29,jul,349,3,183,2,success,yes +35,unemployed,single,tertiary,no,154,no,no,cellular,29,jul,200,4,181,2,failure,yes +77,retired,married,secondary,no,4112,no,no,telephone,29,jul,426,1,184,3,success,yes +36,services,married,secondary,no,11650,yes,no,telephone,29,jul,268,1,-1,0,unknown,yes +32,management,married,tertiary,no,6138,no,no,cellular,29,jul,519,2,90,9,failure,yes +61,management,married,unknown,no,264,no,no,telephone,29,jul,270,1,178,1,success,yes +69,retired,single,tertiary,no,2144,no,no,cellular,29,jul,417,1,184,4,success,yes +69,technician,married,tertiary,no,482,no,no,cellular,29,jul,478,1,267,1,failure,yes +34,admin.,married,tertiary,no,0,no,no,cellular,30,jul,292,1,183,2,success,yes +45,management,single,tertiary,no,4831,no,no,cellular,30,jul,852,3,182,11,success,yes +64,retired,married,primary,no,12067,no,no,telephone,30,jul,367,2,92,2,success,yes +35,technician,single,secondary,no,1227,no,no,cellular,30,jul,1005,5,134,10,success,yes +22,student,single,unknown,no,1232,no,no,cellular,30,jul,283,1,430,2,other,yes +34,management,single,tertiary,no,275,no,no,cellular,2,aug,196,2,455,23,other,yes +34,management,married,secondary,no,369,no,no,cellular,2,aug,868,3,342,4,failure,yes +55,technician,married,unknown,no,240,yes,no,cellular,2,aug,108,3,277,1,success,yes +53,admin.,single,secondary,no,2398,yes,no,cellular,2,aug,317,1,180,2,failure,yes +63,management,married,tertiary,no,2785,no,no,cellular,2,aug,341,2,392,3,success,yes +37,management,single,tertiary,no,62,yes,no,cellular,2,aug,428,2,272,8,success,yes +29,student,single,secondary,no,1377,yes,no,cellular,3,aug,248,1,446,2,success,yes +29,student,single,tertiary,no,163,no,no,cellular,3,aug,249,1,-1,0,unknown,yes +38,management,married,tertiary,no,1199,no,no,cellular,3,aug,482,1,-1,0,unknown,yes +62,retired,married,secondary,no,569,no,no,cellular,3,aug,187,2,180,6,success,yes +34,technician,married,secondary,no,0,yes,no,cellular,3,aug,261,1,470,2,failure,yes +56,services,married,secondary,no,1989,no,no,cellular,3,aug,279,4,181,4,success,yes +48,housemaid,single,primary,no,46,no,no,cellular,3,aug,113,2,180,1,failure,yes +42,management,married,tertiary,no,372,yes,no,cellular,3,aug,654,2,-1,0,unknown,yes +68,retired,married,tertiary,no,2812,no,no,cellular,3,aug,392,4,181,3,success,yes +43,blue-collar,married,primary,no,2952,no,no,cellular,3,aug,417,2,95,1,other,yes +62,retired,married,secondary,no,569,no,no,cellular,4,aug,288,1,1,8,success,yes +68,retired,married,tertiary,no,2812,no,no,cellular,4,aug,651,1,1,7,success,yes +38,management,married,tertiary,no,1199,no,no,cellular,4,aug,178,1,1,1,success,yes +63,entrepreneur,married,secondary,no,3904,no,no,telephone,4,aug,250,2,187,2,success,yes +48,admin.,married,secondary,no,156,no,no,cellular,4,aug,291,1,-1,0,unknown,yes +45,admin.,married,secondary,no,205,no,no,cellular,4,aug,180,1,92,3,success,yes +59,unemployed,married,secondary,no,1625,no,no,cellular,4,aug,198,1,180,2,success,yes +35,unemployed,single,tertiary,no,415,no,no,cellular,4,aug,462,1,92,4,success,yes +32,management,married,tertiary,no,1812,no,no,cellular,4,aug,296,1,182,4,other,yes +93,retired,married,unknown,no,775,no,no,cellular,4,aug,476,2,13,9,success,yes +33,technician,married,secondary,no,180,no,no,cellular,4,aug,561,1,435,3,failure,yes +48,housemaid,single,primary,no,46,no,no,cellular,4,aug,118,1,1,3,success,yes +38,services,married,secondary,no,4017,no,no,cellular,4,aug,470,1,96,3,success,yes +29,management,single,tertiary,no,437,no,no,cellular,5,aug,504,1,92,1,success,yes +38,technician,married,secondary,no,318,no,no,cellular,5,aug,274,1,182,6,success,yes +41,technician,single,tertiary,no,1646,yes,no,cellular,5,aug,172,3,92,8,success,yes +57,technician,divorced,secondary,no,470,no,no,cellular,5,aug,480,3,-1,0,unknown,yes +53,management,married,tertiary,no,3591,yes,no,cellular,5,aug,306,2,181,2,other,yes +56,management,divorced,tertiary,no,2037,no,no,cellular,5,aug,318,1,91,6,failure,yes +33,technician,single,secondary,no,2979,no,no,cellular,5,aug,326,2,437,1,failure,yes +41,management,married,tertiary,no,1092,no,no,cellular,5,aug,736,1,-1,0,unknown,yes +34,admin.,divorced,secondary,no,661,yes,no,cellular,5,aug,245,2,183,10,failure,yes +29,housemaid,single,tertiary,no,2196,no,no,cellular,5,aug,215,1,-1,0,unknown,yes +34,management,single,tertiary,no,417,yes,no,cellular,5,aug,270,1,174,15,failure,yes +21,entrepreneur,single,tertiary,no,2077,no,no,cellular,5,aug,323,1,-1,0,unknown,yes +37,management,married,tertiary,no,2283,no,no,cellular,6,aug,303,2,92,4,success,yes +33,student,married,secondary,no,1536,no,no,cellular,6,aug,258,2,178,4,success,yes +45,management,married,secondary,no,446,no,no,cellular,6,aug,304,3,-1,0,unknown,yes +61,blue-collar,married,primary,no,5,no,no,cellular,6,aug,562,2,94,3,success,yes +22,student,single,secondary,no,216,no,no,cellular,6,aug,178,1,179,2,success,yes +37,management,married,secondary,no,565,no,no,cellular,6,aug,174,1,93,3,failure,yes +45,admin.,married,secondary,no,476,no,no,cellular,6,aug,356,1,364,1,other,yes +35,admin.,single,secondary,no,-32,no,yes,cellular,6,aug,366,2,178,9,success,yes +28,blue-collar,single,secondary,no,1348,yes,no,cellular,6,aug,221,2,-1,0,unknown,yes +31,blue-collar,single,secondary,no,228,no,no,cellular,6,aug,744,1,88,4,other,yes +62,management,married,tertiary,no,1859,no,no,telephone,6,aug,245,3,-1,0,unknown,yes +47,management,married,tertiary,no,2306,no,no,telephone,6,aug,239,4,-1,0,unknown,yes +57,admin.,married,unknown,no,2038,no,no,cellular,9,aug,628,1,182,2,failure,yes +60,technician,married,secondary,no,824,yes,no,cellular,9,aug,265,1,181,8,success,yes +25,student,single,secondary,no,348,no,no,cellular,10,aug,245,1,-1,0,unknown,yes +40,blue-collar,married,secondary,no,1515,yes,no,cellular,10,aug,503,1,-1,0,unknown,yes +33,management,married,tertiary,no,1514,no,no,cellular,10,aug,447,1,728,2,failure,yes +53,unemployed,married,secondary,no,94,no,no,cellular,10,aug,493,1,181,14,success,yes +30,technician,single,tertiary,no,2325,no,no,cellular,10,aug,263,1,127,7,failure,yes +36,student,single,unknown,no,417,no,no,cellular,10,aug,304,1,181,1,success,yes +56,technician,divorced,secondary,no,3450,no,no,cellular,10,aug,507,1,181,2,success,yes +38,entrepreneur,single,secondary,no,2543,no,no,cellular,10,aug,223,1,414,4,failure,yes +29,admin.,single,secondary,no,464,no,no,cellular,10,aug,317,2,518,1,failure,yes +61,retired,married,secondary,no,1853,no,no,telephone,10,aug,520,1,181,2,success,yes +62,blue-collar,married,secondary,no,272,no,no,cellular,11,aug,146,1,286,2,failure,yes +24,student,single,secondary,no,1925,no,no,cellular,11,aug,1363,1,-1,0,unknown,yes +65,entrepreneur,married,tertiary,no,2331,no,no,telephone,11,aug,425,1,183,2,success,yes +70,retired,married,primary,no,324,no,no,cellular,11,aug,632,1,308,6,other,yes +60,technician,married,secondary,no,116,no,no,cellular,11,aug,329,2,181,8,success,yes +30,student,single,secondary,no,1779,no,no,cellular,11,aug,233,1,433,1,success,yes +51,management,married,tertiary,no,346,no,no,cellular,11,aug,237,1,180,6,success,yes +36,self-employed,single,tertiary,no,353,no,no,cellular,11,aug,361,2,181,2,success,yes +42,management,married,tertiary,no,27696,no,no,cellular,11,aug,370,1,91,7,success,yes +58,management,married,secondary,no,2155,no,yes,cellular,11,aug,248,2,182,7,success,yes +43,blue-collar,married,secondary,no,413,yes,no,cellular,12,aug,235,2,182,4,success,yes +77,retired,married,primary,no,2590,no,no,telephone,12,aug,345,1,178,20,failure,yes +34,blue-collar,married,secondary,no,320,yes,no,cellular,12,aug,352,1,828,2,failure,yes +35,blue-collar,married,secondary,no,1454,yes,no,cellular,12,aug,323,1,182,4,success,yes +39,blue-collar,married,secondary,no,1382,yes,no,cellular,12,aug,357,1,182,2,success,yes +35,self-employed,married,tertiary,no,2427,no,no,cellular,12,aug,175,3,31,10,success,yes +41,admin.,married,secondary,no,2498,no,no,cellular,12,aug,411,1,-1,0,unknown,yes +25,student,single,unknown,no,1003,no,no,cellular,12,aug,361,1,-1,0,unknown,yes +51,blue-collar,married,secondary,no,2007,yes,no,cellular,12,aug,1226,3,-1,0,unknown,yes +48,unemployed,married,secondary,no,926,no,no,cellular,12,aug,504,2,178,10,success,yes +26,unemployed,single,secondary,no,632,no,no,cellular,12,aug,312,3,181,1,success,yes +55,unknown,married,secondary,no,2206,no,no,cellular,12,aug,265,1,91,5,success,yes +49,services,married,primary,no,1830,yes,no,cellular,13,aug,261,1,179,1,success,yes +29,self-employed,single,tertiary,no,814,no,no,unknown,13,aug,461,1,-1,0,unknown,yes +67,housemaid,divorced,secondary,no,5275,no,no,cellular,13,aug,222,4,-1,0,unknown,yes +42,admin.,divorced,secondary,no,2129,no,no,cellular,13,aug,633,1,182,2,other,yes +35,management,married,tertiary,no,2717,no,no,cellular,13,aug,394,6,-1,0,unknown,yes +37,technician,married,tertiary,no,341,no,no,cellular,13,aug,287,3,182,3,success,yes +35,management,divorced,tertiary,no,2885,no,no,cellular,13,aug,199,3,43,8,other,yes +61,retired,married,secondary,no,523,no,no,cellular,13,aug,211,3,183,4,success,yes +60,services,married,tertiary,no,4256,yes,no,cellular,16,aug,239,3,761,1,other,yes +33,technician,married,secondary,no,484,yes,no,cellular,16,aug,205,3,182,9,success,yes +27,blue-collar,single,secondary,no,535,no,no,cellular,16,aug,265,3,95,4,success,yes +24,student,single,secondary,no,431,no,no,cellular,19,aug,418,11,185,5,success,yes +57,retired,married,tertiary,no,1269,no,no,cellular,31,aug,1120,1,-1,0,unknown,yes +63,admin.,married,secondary,no,0,yes,no,cellular,31,aug,253,5,-1,0,unknown,yes +61,housemaid,married,primary,no,211,no,no,cellular,31,aug,443,2,186,3,failure,yes +52,self-employed,married,tertiary,no,4012,no,no,cellular,31,aug,634,3,92,5,other,yes +34,admin.,single,tertiary,no,625,no,yes,unknown,31,aug,34,1,-1,0,unknown,yes +28,management,single,tertiary,no,1584,yes,no,cellular,1,sep,222,2,-1,0,unknown,yes +60,management,married,tertiary,no,315,no,no,cellular,1,sep,840,1,183,3,success,yes +32,admin.,married,secondary,no,200,no,no,cellular,1,sep,729,1,29,3,failure,yes +34,management,married,tertiary,no,589,no,no,cellular,1,sep,300,1,44,3,other,yes +31,services,single,secondary,no,-205,no,no,cellular,1,sep,481,1,579,1,failure,yes +28,blue-collar,single,secondary,no,-46,yes,no,cellular,1,sep,199,1,92,14,success,yes +55,admin.,married,secondary,no,8304,no,no,cellular,1,sep,193,1,92,1,success,yes +65,retired,married,primary,no,308,no,no,cellular,1,sep,400,1,-1,0,unknown,yes +37,management,married,tertiary,no,1113,no,no,cellular,1,sep,265,2,183,2,success,yes +35,management,single,tertiary,no,992,no,yes,cellular,1,sep,238,1,-1,0,unknown,yes +33,admin.,single,tertiary,no,272,yes,no,cellular,1,sep,293,2,92,3,success,yes +75,retired,married,primary,no,1413,no,no,cellular,1,sep,532,2,188,2,success,yes +48,unknown,single,unknown,no,1819,no,no,cellular,2,sep,1440,1,458,1,failure,yes +33,entrepreneur,single,tertiary,no,1623,yes,no,cellular,2,sep,291,3,-1,0,unknown,yes +38,management,married,tertiary,no,630,no,no,cellular,2,sep,362,1,388,3,other,yes +25,student,single,secondary,no,2975,no,no,cellular,2,sep,799,2,-1,0,unknown,yes +41,unemployed,single,tertiary,no,7968,no,no,cellular,2,sep,404,1,184,4,success,yes +25,student,single,secondary,no,154,no,no,cellular,2,sep,382,1,183,3,success,yes +27,student,single,tertiary,no,5169,yes,no,cellular,3,sep,431,1,466,3,success,yes +49,admin.,single,tertiary,no,228,yes,no,cellular,3,sep,252,2,93,2,success,yes +43,technician,married,secondary,no,4945,yes,no,cellular,3,sep,219,3,185,2,success,yes +52,management,married,unknown,no,1708,no,no,unknown,6,sep,310,1,75,4,failure,yes +48,management,married,tertiary,no,0,yes,no,cellular,6,sep,194,2,125,6,failure,yes +29,unemployed,single,unknown,no,1584,no,no,cellular,6,sep,245,1,-1,0,unknown,yes +43,admin.,single,secondary,no,1707,yes,no,cellular,6,sep,369,3,504,5,other,yes +65,admin.,married,secondary,no,952,no,no,cellular,6,sep,255,1,96,1,success,yes +72,retired,married,secondary,no,1978,no,no,cellular,6,sep,312,1,-1,0,unknown,yes +26,technician,single,secondary,no,1105,yes,no,cellular,6,sep,415,1,297,3,other,yes +37,services,married,secondary,no,52,yes,no,cellular,6,sep,908,1,185,9,success,yes +37,management,married,tertiary,no,6771,no,no,cellular,7,sep,337,1,186,1,success,yes +28,management,single,tertiary,no,890,yes,no,cellular,7,sep,201,1,-1,0,unknown,yes +61,retired,married,primary,no,56,no,no,cellular,7,sep,288,3,-1,0,unknown,yes +32,blue-collar,married,primary,no,1644,no,no,cellular,7,sep,492,3,102,5,other,yes +51,management,single,tertiary,no,151,yes,no,cellular,8,sep,638,1,427,3,success,yes +38,admin.,married,secondary,no,0,yes,no,cellular,8,sep,210,1,92,3,success,yes +34,management,divorced,tertiary,no,2240,no,no,cellular,8,sep,220,2,184,3,success,yes +60,unemployed,married,secondary,no,957,no,no,cellular,8,sep,246,1,184,3,success,yes +24,student,single,secondary,no,689,no,no,cellular,8,sep,630,1,-1,0,unknown,yes +36,management,married,tertiary,no,2161,no,no,cellular,8,sep,708,2,183,5,success,yes +46,student,single,unknown,no,1527,no,no,cellular,8,sep,358,3,184,1,success,yes +80,retired,married,secondary,no,8304,no,no,telephone,8,sep,606,3,91,13,success,yes +37,management,single,tertiary,no,698,no,no,cellular,8,sep,1081,2,-1,0,unknown,yes +39,management,married,tertiary,no,494,no,no,cellular,9,sep,216,1,183,5,success,yes +62,retired,married,secondary,no,2801,yes,yes,cellular,9,sep,261,1,183,1,success,yes +84,retired,married,tertiary,no,4761,no,no,telephone,9,sep,1405,1,92,3,failure,yes +24,student,single,tertiary,no,834,no,no,cellular,9,sep,679,1,-1,0,unknown,yes +24,student,single,secondary,no,139,no,no,cellular,9,sep,430,4,-1,0,unknown,yes +28,management,married,tertiary,no,12,yes,no,cellular,9,sep,202,1,-1,0,unknown,yes +31,management,married,tertiary,no,877,no,no,cellular,9,sep,209,1,92,8,success,yes +33,unemployed,single,secondary,no,2066,no,yes,cellular,9,sep,305,1,749,2,failure,yes +33,admin.,single,secondary,no,555,yes,no,cellular,9,sep,204,1,365,1,success,yes +64,retired,married,primary,no,48,no,no,cellular,9,sep,167,3,92,1,success,yes +48,technician,married,primary,no,235,no,no,cellular,9,sep,386,2,191,3,success,yes +28,admin.,married,secondary,no,1595,no,no,cellular,9,sep,268,1,254,4,success,yes +28,student,single,tertiary,no,5741,no,no,cellular,10,sep,1042,5,200,3,failure,yes +69,retired,married,unknown,no,426,no,no,telephone,10,sep,211,2,185,2,success,yes +28,management,single,tertiary,no,187,no,no,cellular,10,sep,255,1,93,2,success,yes +24,admin.,single,secondary,no,166,no,no,cellular,10,sep,256,2,-1,0,unknown,yes +52,unemployed,married,secondary,no,1416,no,no,cellular,13,sep,218,3,187,3,success,yes +37,services,single,tertiary,no,1189,no,no,cellular,13,sep,323,9,199,4,other,yes +25,student,single,secondary,no,486,no,no,cellular,13,sep,273,3,199,4,failure,yes +58,management,married,tertiary,no,0,no,no,cellular,14,sep,358,2,-1,0,unknown,yes +62,retired,married,tertiary,no,2557,yes,no,cellular,14,sep,211,1,216,7,success,yes +41,admin.,married,secondary,no,3138,no,no,cellular,14,sep,409,1,398,1,failure,yes +28,management,single,tertiary,no,1720,no,no,cellular,14,sep,230,1,91,4,success,yes +75,retired,married,primary,no,1765,no,no,telephone,14,sep,808,1,187,4,failure,yes +21,student,single,unknown,no,1506,no,no,cellular,14,sep,340,1,-1,0,unknown,yes +40,entrepreneur,married,tertiary,no,3585,no,no,cellular,15,sep,506,3,-1,0,unknown,yes +35,blue-collar,married,secondary,no,262,no,no,cellular,15,sep,331,1,75,6,failure,yes +49,management,married,tertiary,no,1093,yes,yes,cellular,15,sep,316,1,246,4,success,yes +39,management,married,unknown,no,76,no,no,cellular,15,sep,200,1,183,1,success,yes +63,admin.,divorced,secondary,no,4680,no,no,cellular,15,sep,953,2,-1,0,unknown,yes +38,management,married,tertiary,no,1477,no,no,cellular,15,sep,385,3,769,2,failure,yes +72,retired,married,tertiary,no,3561,no,no,telephone,15,sep,511,3,184,7,success,yes +31,management,single,tertiary,no,3340,no,no,cellular,15,sep,213,2,469,3,success,yes +49,technician,married,tertiary,no,1071,no,no,cellular,16,sep,225,1,91,1,success,yes +29,management,married,tertiary,no,247,no,no,cellular,16,sep,143,2,587,3,failure,yes +39,admin.,divorced,secondary,no,112,no,no,cellular,16,sep,574,3,-1,0,unknown,yes +78,retired,divorced,primary,no,527,no,no,cellular,16,sep,193,1,-1,0,unknown,yes +61,housemaid,married,primary,no,2580,no,no,cellular,16,sep,270,3,202,7,other,yes +60,retired,married,secondary,no,975,no,no,cellular,16,sep,303,1,792,1,failure,yes +58,management,divorced,unknown,no,2986,no,no,cellular,16,sep,414,1,91,5,other,yes +67,retired,married,secondary,no,2048,no,no,cellular,16,sep,452,5,195,4,other,yes +20,student,single,unknown,no,2785,no,no,cellular,16,sep,327,2,-1,0,unknown,yes +28,admin.,single,secondary,no,127,no,no,cellular,16,sep,1334,2,-1,0,unknown,yes +41,management,married,tertiary,no,0,no,no,cellular,17,sep,294,4,63,11,other,yes +31,student,single,tertiary,no,4951,no,no,cellular,17,sep,285,3,81,3,failure,yes +37,management,divorced,tertiary,no,488,yes,no,cellular,17,sep,328,1,854,2,failure,yes +81,retired,married,primary,no,1154,no,no,telephone,17,sep,231,1,-1,0,unknown,yes +46,management,divorced,tertiary,no,624,no,no,cellular,17,sep,336,2,183,2,success,yes +46,services,married,primary,no,4343,yes,no,unknown,20,sep,185,1,-1,0,unknown,yes +44,management,divorced,tertiary,no,2367,no,no,cellular,22,sep,263,1,184,6,success,yes +23,technician,single,secondary,no,283,yes,no,cellular,22,sep,175,1,184,2,success,yes +40,entrepreneur,married,secondary,no,6403,no,no,cellular,22,sep,208,2,-1,0,unknown,yes +27,management,married,tertiary,no,802,no,no,cellular,22,sep,569,1,-1,0,unknown,yes +60,admin.,married,secondary,no,3735,no,no,cellular,22,sep,183,1,184,11,success,yes +55,management,married,secondary,no,2693,no,no,cellular,22,sep,182,1,184,7,success,yes +43,unemployed,married,secondary,no,0,yes,yes,cellular,23,sep,183,2,184,13,failure,yes +26,management,single,tertiary,no,1027,no,no,cellular,23,sep,744,1,-1,0,unknown,yes +25,management,single,tertiary,no,3902,no,no,cellular,23,sep,856,1,-1,0,unknown,yes +31,housemaid,married,secondary,no,243,yes,no,cellular,23,sep,305,2,842,1,failure,yes +54,services,single,secondary,no,0,no,no,cellular,23,sep,209,1,-1,0,unknown,yes +29,unemployed,single,secondary,no,1055,no,no,cellular,23,sep,427,1,603,1,failure,yes +36,admin.,single,secondary,no,60,yes,no,cellular,23,sep,156,2,-1,0,unknown,yes +59,management,married,tertiary,no,5397,no,no,cellular,23,sep,244,1,92,3,success,yes +37,blue-collar,single,unknown,no,217,no,no,cellular,23,sep,272,2,-1,0,unknown,yes +28,management,single,tertiary,no,6551,no,no,cellular,23,sep,203,1,-1,0,unknown,yes +35,admin.,single,secondary,no,303,no,no,cellular,24,sep,173,2,190,10,other,yes +32,blue-collar,single,secondary,no,2093,no,no,cellular,24,sep,224,2,444,1,failure,yes +49,management,married,tertiary,no,1167,yes,yes,cellular,24,sep,249,1,91,14,success,yes +50,services,married,secondary,no,2376,yes,no,cellular,24,sep,395,1,-1,0,unknown,yes +55,services,divorced,secondary,no,0,no,no,cellular,27,sep,262,6,193,4,success,yes +81,retired,divorced,primary,no,949,no,no,cellular,27,sep,188,2,280,1,other,yes +24,management,single,tertiary,no,393,no,no,cellular,27,sep,1298,1,-1,0,unknown,yes +38,services,married,secondary,no,2678,no,no,cellular,28,sep,282,2,187,1,success,yes +61,retired,married,secondary,no,11,no,no,cellular,29,sep,232,1,92,3,success,yes +67,retired,married,primary,no,4416,no,no,cellular,29,sep,245,3,-1,0,unknown,yes +28,management,single,tertiary,no,390,no,no,cellular,29,sep,845,1,232,4,success,yes +29,services,single,secondary,no,1934,no,no,cellular,29,sep,271,1,-1,0,unknown,yes +31,student,single,secondary,no,3511,no,no,cellular,6,oct,311,1,96,1,success,yes +71,retired,married,secondary,no,1696,no,no,cellular,6,oct,486,1,-1,0,unknown,yes +33,self-employed,married,tertiary,no,1278,no,no,cellular,6,oct,649,1,-1,0,unknown,yes +47,self-employed,married,tertiary,no,1011,no,no,cellular,6,oct,808,1,-1,0,unknown,yes +39,management,married,tertiary,no,2939,no,no,cellular,6,oct,608,1,99,3,failure,yes +26,unemployed,single,tertiary,no,3466,no,no,cellular,6,oct,275,2,-1,0,unknown,yes +22,admin.,single,secondary,no,372,no,no,cellular,6,oct,218,1,-1,0,unknown,yes +34,management,single,tertiary,no,549,no,no,cellular,6,oct,1246,2,-1,0,unknown,yes +32,student,single,secondary,no,1102,no,no,telephone,8,oct,194,1,-1,0,unknown,yes +48,services,divorced,unknown,no,973,no,no,cellular,8,oct,319,1,134,2,success,yes +32,technician,single,unknown,no,491,no,no,cellular,8,oct,251,2,91,7,success,yes +58,admin.,divorced,secondary,no,3337,yes,no,telephone,8,oct,369,2,690,3,failure,yes +48,admin.,married,secondary,no,368,no,no,cellular,8,oct,363,2,140,7,success,yes +28,unknown,single,unknown,no,326,no,no,cellular,11,oct,450,1,231,1,success,yes +36,technician,single,secondary,no,12264,no,no,cellular,11,oct,285,1,182,2,success,yes +67,retired,married,secondary,no,203,no,no,cellular,11,oct,405,1,266,2,success,yes +30,management,single,tertiary,no,502,no,no,cellular,11,oct,463,3,95,6,success,yes +27,admin.,married,tertiary,no,346,no,no,cellular,11,oct,212,1,-1,0,unknown,yes +31,management,married,tertiary,no,4328,no,no,cellular,12,oct,203,4,165,14,success,yes +27,student,single,secondary,no,279,no,no,cellular,12,oct,323,1,-1,0,unknown,yes +33,management,single,tertiary,no,131,yes,no,cellular,12,oct,209,3,427,2,failure,yes +36,management,single,tertiary,no,2646,no,no,cellular,13,oct,169,1,182,10,success,yes +62,self-employed,divorced,tertiary,no,6,yes,no,cellular,13,oct,216,1,183,4,success,yes +29,self-employed,single,tertiary,no,1579,no,no,cellular,13,oct,190,1,92,5,success,yes +26,blue-collar,single,secondary,no,2007,no,no,cellular,13,oct,194,1,92,5,success,yes +59,technician,married,secondary,no,1,no,no,cellular,14,oct,585,1,182,5,success,yes +51,management,married,tertiary,no,469,no,no,cellular,14,oct,491,1,182,3,success,yes +27,technician,single,secondary,no,643,no,no,telephone,14,oct,301,1,93,1,success,yes +60,retired,divorced,secondary,no,514,no,no,cellular,15,oct,187,2,213,10,success,yes +42,unemployed,married,secondary,no,1289,no,no,cellular,15,oct,1176,3,92,6,success,yes +47,admin.,married,secondary,no,3676,no,no,cellular,18,oct,567,1,95,3,success,yes +43,unemployed,married,tertiary,no,0,no,no,cellular,18,oct,464,1,94,2,success,yes +22,management,single,tertiary,no,104,no,yes,cellular,18,oct,509,1,185,3,success,yes +34,technician,married,secondary,no,159,yes,no,cellular,18,oct,252,1,-1,0,unknown,yes +39,admin.,divorced,secondary,no,728,yes,yes,cellular,18,oct,222,1,-1,0,unknown,yes +27,management,single,tertiary,no,107,no,no,cellular,18,oct,767,3,-1,0,unknown,yes +49,blue-collar,married,secondary,no,1946,no,no,cellular,19,oct,192,1,95,1,success,yes +42,management,married,unknown,no,1519,no,no,cellular,19,oct,230,1,92,1,success,yes +64,management,married,tertiary,no,5112,no,no,telephone,19,oct,898,7,137,11,other,yes +44,management,single,tertiary,no,1090,no,no,cellular,20,oct,178,4,93,6,success,yes +64,retired,divorced,secondary,no,4833,no,no,cellular,20,oct,621,1,181,3,failure,yes +29,student,single,secondary,no,1925,no,no,cellular,21,oct,150,3,149,5,success,yes +52,management,married,secondary,no,335,no,no,cellular,21,oct,411,1,182,1,failure,yes +52,technician,married,secondary,no,371,yes,yes,cellular,21,oct,453,1,183,3,success,yes +54,management,divorced,tertiary,no,5475,no,no,cellular,21,oct,1032,1,91,4,success,yes +37,management,married,tertiary,no,203,no,no,cellular,21,oct,759,1,90,5,success,yes +48,admin.,married,secondary,no,50,no,yes,cellular,21,oct,419,1,-1,0,unknown,yes +28,technician,single,tertiary,no,11862,no,no,cellular,21,oct,549,2,238,13,other,yes +77,retired,married,secondary,no,820,no,no,telephone,21,oct,330,2,181,4,success,yes +63,retired,single,tertiary,no,791,no,no,cellular,21,oct,212,2,-1,0,unknown,yes +34,technician,single,secondary,no,1279,yes,no,cellular,21,oct,339,3,91,10,success,yes +29,blue-collar,single,tertiary,no,455,no,no,cellular,22,oct,542,4,148,3,success,yes +38,management,married,tertiary,no,536,yes,no,cellular,22,oct,234,1,92,1,success,yes +47,admin.,single,secondary,no,1693,yes,no,cellular,22,oct,608,2,92,4,other,yes +63,retired,married,secondary,no,1495,no,no,cellular,25,oct,389,1,195,4,other,yes +30,management,single,tertiary,no,985,yes,no,cellular,25,oct,304,1,94,2,success,yes +74,retired,married,secondary,no,935,no,no,cellular,25,oct,400,1,173,3,success,yes +31,admin.,single,secondary,no,410,no,no,cellular,25,oct,182,1,185,1,success,yes +33,admin.,married,secondary,no,51,yes,yes,cellular,25,oct,253,1,284,3,success,yes +25,student,single,secondary,no,679,no,no,cellular,25,oct,297,5,94,6,other,yes +78,management,married,unknown,no,1780,yes,no,cellular,25,oct,211,2,185,7,success,yes +26,management,single,tertiary,no,222,no,no,cellular,26,oct,318,1,120,3,success,yes +47,admin.,married,secondary,no,1210,no,no,cellular,26,oct,604,1,91,4,failure,yes +56,admin.,divorced,secondary,no,1693,no,no,cellular,26,oct,238,4,442,4,failure,yes +54,technician,married,tertiary,no,876,no,no,cellular,27,oct,269,3,541,3,success,yes +46,technician,married,unknown,no,3308,no,no,cellular,27,oct,171,1,91,2,success,yes +47,management,married,tertiary,no,0,no,no,cellular,27,oct,508,1,-1,0,unknown,yes +24,student,single,secondary,no,822,no,no,cellular,27,oct,184,1,91,2,failure,yes +70,retired,married,secondary,no,0,no,no,cellular,27,oct,258,1,92,5,success,yes +63,entrepreneur,married,secondary,no,3904,no,no,telephone,8,nov,360,1,96,4,success,yes +22,student,single,secondary,no,2488,no,no,cellular,8,nov,449,2,38,10,other,yes +38,technician,married,tertiary,no,88,no,no,cellular,8,nov,282,2,186,4,success,yes +44,entrepreneur,married,tertiary,no,121,no,no,cellular,9,nov,248,1,91,1,success,yes +52,technician,married,tertiary,no,0,no,no,cellular,9,nov,467,3,92,7,failure,yes +35,technician,married,secondary,no,0,yes,no,cellular,9,nov,524,1,96,5,success,yes +29,admin.,single,secondary,no,464,no,no,cellular,9,nov,208,2,91,3,success,yes +41,unemployed,single,tertiary,no,79,no,no,telephone,9,nov,394,1,390,2,success,yes +62,retired,married,tertiary,no,2557,yes,no,cellular,10,nov,404,1,57,8,success,yes +62,blue-collar,married,secondary,no,272,no,no,cellular,11,nov,289,1,92,3,success,yes +38,entrepreneur,single,secondary,no,2543,no,no,cellular,11,nov,357,3,93,5,success,yes +36,admin.,divorced,secondary,no,1224,yes,no,cellular,12,nov,482,1,374,1,success,yes +34,blue-collar,married,secondary,no,320,yes,no,cellular,12,nov,413,1,92,3,success,yes +60,services,married,tertiary,no,4256,yes,no,cellular,16,nov,200,1,92,4,success,yes +32,services,single,secondary,no,1168,yes,no,cellular,16,nov,411,1,-1,0,unknown,yes +29,management,single,secondary,no,703,yes,no,cellular,16,nov,236,1,550,2,success,yes +32,blue-collar,married,secondary,no,136,no,no,cellular,16,nov,206,1,188,3,success,yes +75,retired,divorced,tertiary,no,3810,yes,no,cellular,16,nov,262,1,183,1,failure,yes +29,management,single,tertiary,no,765,no,no,cellular,16,nov,238,1,-1,0,unknown,yes +68,retired,married,secondary,no,1146,no,no,cellular,16,nov,212,1,187,6,success,yes +25,student,single,secondary,no,358,no,no,cellular,16,nov,330,1,-1,0,unknown,yes +36,management,single,secondary,no,1511,yes,no,cellular,16,nov,270,1,-1,0,unknown,yes +38,technician,married,secondary,no,557,yes,no,cellular,16,nov,1556,4,-1,0,unknown,yes +53,management,married,tertiary,no,583,no,no,cellular,17,nov,226,1,184,4,success,yes +34,admin.,single,secondary,no,557,no,no,cellular,17,nov,224,1,-1,0,unknown,yes +23,student,single,tertiary,no,113,no,no,cellular,17,nov,266,1,-1,0,unknown,yes +73,retired,married,secondary,no,2850,no,no,cellular,17,nov,300,1,40,8,failure,yes +25,technician,single,secondary,no,505,no,yes,cellular,17,nov,386,2,-1,0,unknown,yes +51,technician,married,tertiary,no,825,no,no,cellular,17,nov,977,3,-1,0,unknown,yes +72,retired,married,secondary,no,5715,no,no,cellular,17,nov,1127,5,184,3,success,yes +42,technician,married,tertiary,no,-215,no,no,unknown,20,jun,1573,5,-1,0,unknown,yes +59,management,married,tertiary,no,2239,no,no,cellular,20,aug,377,6,90,1,success,yes +32,management,married,tertiary,no,376,yes,no,cellular,23,mar,248,4,-1,0,unknown,yes +36,technician,married,secondary,no,15485,no,no,cellular,14,apr,461,1,-1,0,unknown,yes +34,services,married,secondary,no,2918,no,yes,cellular,4,jun,246,1,196,2,success,yes +28,student,single,secondary,no,67,no,no,cellular,20,aug,329,3,199,2,other,yes +54,unemployed,divorced,secondary,no,1664,no,no,cellular,2,jun,257,3,-1,0,unknown,yes +27,admin.,single,secondary,no,192,no,no,telephone,28,jul,1076,17,-1,0,unknown,yes +42,management,married,unknown,no,1519,no,no,cellular,19,jul,268,1,-1,0,unknown,yes +31,admin.,single,secondary,no,0,no,no,cellular,17,apr,188,3,-1,0,unknown,yes +41,unemployed,married,secondary,no,0,yes,yes,cellular,5,may,400,1,-1,0,unknown,yes +37,admin.,divorced,tertiary,no,4708,no,no,cellular,2,jun,238,1,181,2,success,yes +31,management,single,tertiary,no,3283,no,no,cellular,2,feb,258,1,73,1,failure,yes +33,unemployed,married,secondary,no,1211,no,no,cellular,11,feb,535,1,188,1,success,yes +27,self-employed,single,tertiary,no,347,no,no,cellular,6,aug,385,4,-1,0,unknown,yes +44,management,married,tertiary,no,423,no,no,cellular,12,mar,2330,5,-1,0,unknown,yes +22,student,single,secondary,no,3982,no,no,cellular,20,apr,206,1,-1,0,unknown,yes +25,management,single,tertiary,no,2506,no,no,cellular,17,feb,485,1,-1,0,unknown,yes +30,management,single,tertiary,no,697,no,no,cellular,10,aug,179,3,102,2,success,yes +46,blue-collar,married,secondary,no,456,no,yes,cellular,18,aug,618,6,-1,0,unknown,yes +32,technician,single,secondary,no,324,no,yes,cellular,23,feb,432,1,-1,0,unknown,yes +57,admin.,single,secondary,no,5768,yes,no,unknown,19,jun,512,1,-1,0,unknown,yes +41,technician,married,tertiary,no,1517,no,no,cellular,8,aug,193,3,-1,0,unknown,yes +62,management,married,tertiary,no,0,no,no,cellular,3,sep,299,1,-1,0,unknown,yes +28,unemployed,married,tertiary,no,482,no,no,cellular,25,may,119,1,-1,0,unknown,yes +77,retired,married,secondary,no,638,no,no,cellular,7,aug,453,1,-1,0,unknown,yes +47,housemaid,married,secondary,no,2524,no,no,cellular,12,oct,105,1,-1,0,unknown,yes +40,management,married,tertiary,no,4539,no,no,cellular,13,jul,256,3,439,1,failure,yes +41,blue-collar,married,secondary,no,2039,yes,no,cellular,8,may,729,1,-1,0,unknown,yes +28,services,single,tertiary,no,128,no,no,cellular,27,may,460,1,414,1,failure,yes +51,blue-collar,married,secondary,no,4787,yes,no,cellular,7,apr,895,1,-1,0,unknown,yes +47,management,married,tertiary,no,1147,no,no,cellular,2,jun,654,1,95,1,failure,yes +37,unemployed,married,secondary,no,1978,no,no,cellular,9,sep,404,1,182,1,success,yes +29,management,married,tertiary,no,51,yes,no,cellular,17,jul,1319,5,-1,0,unknown,yes +24,services,single,secondary,yes,-122,yes,no,unknown,13,may,1000,1,-1,0,unknown,yes +27,blue-collar,single,secondary,no,294,yes,yes,unknown,28,may,694,2,-1,0,unknown,yes +23,student,single,secondary,no,922,no,no,cellular,28,may,538,2,184,9,failure,yes +32,admin.,married,secondary,no,51,yes,yes,cellular,14,jan,203,1,87,2,other,yes +40,technician,married,secondary,no,694,yes,no,cellular,3,jun,431,2,119,9,failure,yes +32,management,married,tertiary,no,607,yes,no,unknown,18,jun,1060,5,-1,0,unknown,yes +57,management,married,secondary,no,2155,no,yes,cellular,10,nov,144,3,91,2,failure,yes +28,self-employed,single,tertiary,no,159,no,no,cellular,14,oct,246,2,420,2,other,yes +35,technician,married,tertiary,no,7050,no,no,cellular,10,feb,278,3,187,1,success,yes +35,blue-collar,married,secondary,no,1055,no,no,unknown,18,nov,150,2,-1,0,unknown,yes +24,student,single,secondary,no,8165,no,no,cellular,15,sep,216,1,-1,0,unknown,yes +36,technician,married,tertiary,no,376,no,no,cellular,16,sep,173,1,-1,0,unknown,yes +66,housemaid,divorced,primary,no,3701,no,no,telephone,3,mar,834,1,-1,0,unknown,yes +45,management,divorced,secondary,no,644,yes,no,cellular,19,nov,418,1,168,1,success,yes +28,technician,single,tertiary,no,3623,no,no,cellular,10,mar,261,1,-1,0,unknown,yes +45,housemaid,married,secondary,no,360,no,no,cellular,3,nov,215,1,-1,0,unknown,yes +31,unemployed,single,secondary,no,284,yes,no,cellular,2,feb,855,1,-1,0,unknown,yes +45,services,single,primary,no,1893,yes,no,unknown,3,jun,1259,6,-1,0,unknown,yes +34,admin.,married,tertiary,no,69,no,yes,cellular,4,aug,120,3,1,6,success,yes +39,technician,single,secondary,no,1355,yes,no,cellular,14,may,1180,1,-1,0,unknown,yes +24,management,single,tertiary,no,1506,no,no,cellular,12,jun,239,2,95,4,success,yes +33,technician,single,tertiary,no,1393,yes,no,cellular,18,jul,1127,3,-1,0,unknown,yes +54,management,divorced,tertiary,no,487,yes,no,unknown,21,may,828,4,-1,0,unknown,yes +26,student,single,secondary,no,655,no,no,cellular,16,sep,190,1,-1,0,unknown,yes +30,services,single,tertiary,no,1788,no,no,cellular,4,aug,288,1,181,2,failure,yes +37,admin.,married,secondary,no,0,yes,no,cellular,2,jun,107,1,-1,0,unknown,yes +32,management,single,tertiary,no,41,no,no,cellular,21,aug,686,5,-1,0,unknown,yes +39,management,married,secondary,no,215,no,no,cellular,11,aug,1141,4,-1,0,unknown,yes +27,unknown,single,secondary,no,1187,no,no,telephone,26,feb,232,1,101,1,failure,yes +54,admin.,married,secondary,no,0,no,no,cellular,27,jan,565,1,-1,0,unknown,yes +54,housemaid,single,secondary,no,1213,no,no,cellular,12,nov,241,1,-1,0,unknown,yes +71,retired,married,tertiary,no,653,no,no,telephone,3,sep,471,1,189,1,success,yes +41,management,divorced,tertiary,no,3426,no,no,cellular,4,jun,102,2,297,3,failure,yes +29,admin.,married,tertiary,no,238,no,no,cellular,25,may,344,2,88,1,failure,yes +60,retired,married,secondary,no,1690,no,no,unknown,20,jun,1467,4,-1,0,unknown,yes +60,unemployed,married,primary,no,0,no,no,cellular,22,jul,1193,1,412,1,other,yes +36,technician,single,secondary,no,27,yes,no,cellular,9,feb,631,1,260,2,success,yes +34,management,single,tertiary,no,681,no,no,cellular,6,aug,637,2,-1,0,unknown,yes +27,admin.,single,secondary,no,18188,yes,no,unknown,12,jun,541,17,-1,0,unknown,yes +34,management,married,tertiary,no,1006,yes,no,cellular,19,nov,783,3,195,2,other,yes +36,management,married,tertiary,no,1352,no,no,unknown,19,jun,2028,1,-1,0,unknown,yes +32,technician,single,tertiary,no,2340,no,no,cellular,18,feb,89,2,-1,0,unknown,yes +55,housemaid,married,unknown,no,366,no,no,cellular,5,jun,365,3,57,2,other,yes +34,services,single,secondary,no,-374,yes,no,cellular,11,may,672,1,-1,0,unknown,yes +25,technician,single,tertiary,no,1231,no,no,cellular,31,aug,271,2,-1,0,unknown,yes +51,technician,married,tertiary,no,1347,yes,yes,cellular,10,feb,160,1,243,1,failure,yes +33,management,married,tertiary,no,1778,no,no,cellular,12,feb,388,1,-1,0,unknown,yes +35,technician,married,secondary,no,2201,no,no,telephone,12,apr,350,1,-1,0,unknown,yes +55,housemaid,married,primary,no,0,yes,no,cellular,17,jul,1303,2,-1,0,unknown,yes +61,retired,married,tertiary,no,2557,yes,no,cellular,11,aug,139,3,190,1,success,yes +34,technician,married,secondary,no,0,yes,no,cellular,5,aug,231,2,2,3,success,yes +55,technician,married,tertiary,no,1320,no,no,cellular,28,jul,340,1,91,2,success,yes +23,student,single,tertiary,no,0,no,no,cellular,10,aug,213,1,-1,0,unknown,yes +69,retired,married,secondary,no,0,no,no,cellular,27,jul,666,1,90,4,success,yes +37,management,single,tertiary,no,22125,no,yes,cellular,21,nov,331,2,-1,0,unknown,yes +49,entrepreneur,married,primary,no,6188,no,no,cellular,18,nov,453,1,-1,0,unknown,yes +41,unemployed,married,secondary,no,1077,yes,yes,telephone,9,dec,207,3,387,2,failure,yes +39,technician,single,unknown,no,45248,yes,no,unknown,6,may,1623,1,-1,0,unknown,yes +30,technician,single,tertiary,no,3291,yes,no,unknown,19,may,1218,3,-1,0,unknown,yes +32,technician,single,secondary,no,562,yes,no,unknown,30,may,722,3,-1,0,unknown,yes +61,admin.,married,secondary,no,1046,yes,no,cellular,21,aug,158,1,-1,0,unknown,yes +33,management,single,tertiary,no,87,no,no,cellular,12,aug,978,1,-1,0,unknown,yes +32,management,single,tertiary,no,10281,no,no,cellular,22,apr,400,1,-1,0,unknown,yes +45,admin.,divorced,primary,no,429,yes,no,cellular,22,apr,147,1,181,1,success,yes +59,retired,married,primary,no,3648,no,no,telephone,19,jun,1321,3,-1,0,unknown,yes +48,blue-collar,married,secondary,no,863,yes,no,telephone,4,may,412,5,350,2,success,yes +18,student,single,unknown,no,3,no,no,cellular,25,aug,130,2,-1,0,unknown,yes +27,management,single,tertiary,no,2648,no,no,cellular,5,feb,917,1,-1,0,unknown,yes +32,management,single,tertiary,no,0,yes,no,cellular,30,apr,370,3,-1,0,unknown,yes +50,technician,divorced,secondary,no,0,no,no,cellular,29,sep,159,1,120,2,failure,yes +30,self-employed,single,tertiary,no,655,no,no,cellular,23,sep,272,4,184,1,success,yes +23,student,single,unknown,no,854,yes,no,unknown,28,may,664,2,-1,0,unknown,yes +40,management,divorced,tertiary,no,858,no,no,cellular,26,oct,202,2,-1,0,unknown,yes +27,blue-collar,single,tertiary,no,567,no,no,cellular,26,may,523,3,182,3,success,yes +35,technician,single,secondary,no,399,yes,no,cellular,13,may,496,2,345,3,failure,yes +53,admin.,divorced,unknown,no,257,no,no,cellular,11,jul,1310,2,-1,0,unknown,yes +59,admin.,married,secondary,no,3735,no,no,cellular,18,mar,203,4,121,2,failure,yes +37,management,married,tertiary,no,57,no,no,cellular,5,feb,345,1,-1,0,unknown,yes +24,student,single,primary,no,1235,no,no,cellular,14,jul,334,4,93,6,other,yes +42,services,divorced,secondary,no,257,yes,no,cellular,12,may,955,2,-1,0,unknown,yes +27,technician,single,tertiary,no,401,no,no,cellular,6,aug,218,3,93,2,success,yes +29,self-employed,single,tertiary,no,3290,no,no,cellular,23,mar,136,1,291,2,success,yes +30,management,single,tertiary,no,297,no,no,cellular,8,nov,188,1,-1,0,unknown,yes +22,admin.,single,secondary,no,33,no,no,cellular,12,feb,369,1,-1,0,unknown,yes +39,services,married,secondary,no,1179,no,no,cellular,25,may,284,1,-1,0,unknown,yes +35,management,single,tertiary,no,471,no,no,cellular,5,jun,276,2,-1,0,unknown,yes +61,retired,married,secondary,no,938,no,no,cellular,15,jul,392,2,183,3,success,yes +33,technician,single,tertiary,no,1636,yes,no,cellular,27,feb,165,1,-1,0,unknown,yes +42,management,divorced,tertiary,no,1243,no,no,cellular,26,aug,1000,4,-1,0,unknown,yes +30,admin.,single,tertiary,no,0,yes,no,cellular,4,feb,730,2,-1,0,unknown,yes +51,retired,divorced,secondary,no,1679,no,no,cellular,12,aug,417,1,365,9,other,yes +25,services,single,unknown,no,2022,no,no,cellular,29,jul,276,8,97,12,other,yes +44,technician,single,tertiary,no,2033,no,no,cellular,3,sep,444,1,99,1,failure,yes +34,admin.,married,secondary,no,869,no,no,unknown,6,may,1677,1,-1,0,unknown,yes +28,management,single,tertiary,no,3611,no,no,cellular,26,feb,141,2,-1,0,unknown,yes +61,retired,divorced,primary,no,3624,no,no,cellular,25,nov,342,1,-1,0,unknown,yes +21,student,single,secondary,no,2488,no,no,cellular,30,jun,258,6,169,3,success,yes +53,technician,divorced,tertiary,no,2228,no,no,cellular,17,nov,890,1,-1,0,unknown,yes +46,services,married,secondary,no,4,no,no,cellular,30,apr,268,1,261,5,other,yes +52,technician,married,tertiary,no,2557,no,no,cellular,28,jan,134,5,204,2,success,yes +56,management,married,tertiary,no,1390,yes,no,cellular,18,nov,543,1,-1,0,unknown,yes +36,technician,single,secondary,no,1228,yes,no,cellular,4,may,303,3,-1,0,unknown,yes +30,admin.,married,secondary,no,1265,yes,yes,unknown,26,may,414,2,-1,0,unknown,yes +41,admin.,divorced,secondary,no,6046,yes,yes,telephone,15,mar,300,6,182,2,success,yes +33,management,single,tertiary,no,816,yes,no,cellular,11,oct,383,2,503,2,failure,yes +28,student,single,tertiary,no,0,no,no,cellular,28,sep,294,2,105,7,other,yes +54,technician,single,tertiary,no,118,no,no,cellular,5,apr,280,1,-1,0,unknown,yes +50,management,married,secondary,no,1165,no,no,cellular,16,jul,455,1,-1,0,unknown,yes +58,technician,married,secondary,no,99,no,no,telephone,22,sep,396,2,-1,0,unknown,yes +33,services,married,secondary,no,1697,no,no,cellular,4,may,489,1,182,1,success,yes +36,entrepreneur,single,secondary,no,866,yes,no,cellular,11,may,629,1,173,1,failure,yes +51,technician,married,tertiary,no,0,no,no,cellular,2,mar,539,2,-1,0,unknown,yes +35,technician,single,tertiary,no,5301,no,no,cellular,21,nov,937,2,-1,0,unknown,yes +35,management,single,tertiary,no,7918,no,no,cellular,7,sep,497,1,-1,0,unknown,yes +34,technician,married,secondary,no,1,no,no,cellular,28,aug,535,2,-1,0,unknown,yes +45,management,married,tertiary,no,160,no,no,cellular,30,apr,619,1,-1,0,unknown,yes +24,services,single,secondary,no,414,yes,no,cellular,18,may,493,1,370,1,other,yes +45,unknown,married,tertiary,no,406,no,no,cellular,7,sep,314,1,-1,0,unknown,yes +42,entrepreneur,married,secondary,no,0,yes,no,cellular,9,apr,331,1,140,4,failure,yes +30,technician,single,tertiary,no,655,no,no,cellular,6,oct,384,2,-1,0,unknown,yes +60,retired,divorced,secondary,no,514,no,no,cellular,16,mar,263,1,124,9,other,yes +40,technician,married,tertiary,no,11766,yes,no,cellular,13,apr,218,2,242,9,failure,yes +25,blue-collar,married,secondary,no,0,no,yes,cellular,15,jul,1424,4,-1,0,unknown,yes +48,management,married,secondary,no,2892,no,no,cellular,7,jul,407,1,385,1,success,yes +28,admin.,single,secondary,no,762,no,no,cellular,18,sep,115,3,-1,0,unknown,yes +55,management,divorced,tertiary,no,2037,no,no,cellular,2,nov,209,2,273,1,failure,yes +47,management,single,tertiary,no,255,no,yes,cellular,30,jul,802,4,-1,0,unknown,yes +32,student,married,secondary,no,1536,no,no,cellular,7,aug,289,2,-1,0,unknown,yes +55,technician,divorced,tertiary,no,0,no,no,cellular,18,aug,237,1,-1,0,unknown,yes +27,technician,single,secondary,no,2,yes,yes,cellular,6,may,554,2,356,1,failure,yes +42,management,married,tertiary,no,1435,yes,no,cellular,7,may,1148,1,-1,0,unknown,yes +47,technician,married,secondary,no,1219,no,no,cellular,18,aug,697,4,-1,0,unknown,yes +36,entrepreneur,married,secondary,no,2971,no,no,cellular,12,nov,247,1,97,8,failure,yes +64,retired,married,primary,no,440,no,no,cellular,6,feb,495,1,-1,0,unknown,yes +34,management,married,tertiary,no,3301,yes,no,cellular,17,sep,164,5,92,6,success,yes +72,admin.,married,primary,no,2321,no,no,cellular,14,sep,221,2,64,12,failure,yes +27,student,single,secondary,no,213,no,no,cellular,27,mar,378,1,-1,0,unknown,yes +54,services,divorced,secondary,no,0,no,no,cellular,18,mar,362,1,290,3,success,yes +19,student,single,unknown,no,108,no,no,cellular,10,aug,168,1,182,2,success,yes +33,admin.,married,secondary,no,920,no,no,cellular,30,apr,344,1,-1,0,unknown,yes +36,admin.,married,secondary,no,1031,no,no,cellular,17,jun,282,4,-1,0,unknown,yes +26,student,single,tertiary,no,294,no,no,cellular,5,mar,87,1,91,2,success,yes +42,admin.,divorced,secondary,no,527,no,yes,cellular,22,oct,181,1,185,1,success,yes +24,management,single,tertiary,no,1030,no,no,cellular,4,mar,396,2,-1,0,unknown,yes +28,self-employed,single,tertiary,no,2503,no,no,cellular,25,may,426,1,-1,0,unknown,yes +58,unknown,married,unknown,no,1547,no,no,telephone,5,aug,1186,4,-1,0,unknown,yes +59,management,married,tertiary,no,1,yes,no,cellular,29,apr,210,1,-1,0,unknown,yes +46,technician,married,secondary,no,1167,yes,no,cellular,21,nov,1540,2,-1,0,unknown,yes +49,technician,married,tertiary,no,523,yes,no,cellular,3,mar,152,2,-1,0,unknown,yes +45,blue-collar,divorced,primary,no,-207,no,no,cellular,15,jul,878,2,-1,0,unknown,yes +32,management,single,tertiary,no,3283,no,no,cellular,12,aug,623,2,191,2,success,yes +46,blue-collar,married,secondary,no,1147,yes,no,cellular,20,apr,720,1,-1,0,unknown,yes +29,management,single,tertiary,no,1170,no,no,cellular,20,apr,453,1,-1,0,unknown,yes +30,management,single,secondary,no,4642,yes,no,cellular,21,nov,528,1,-1,0,unknown,yes +31,self-employed,married,tertiary,no,2666,no,no,cellular,10,nov,318,2,97,6,success,yes +31,management,married,tertiary,no,792,no,no,cellular,20,aug,763,14,-1,0,unknown,yes +33,blue-collar,single,primary,no,127,yes,no,unknown,29,may,1059,2,-1,0,unknown,yes +49,services,divorced,secondary,no,0,no,no,cellular,28,jul,412,2,-1,0,unknown,yes +30,admin.,married,secondary,no,0,no,no,cellular,1,jun,318,1,-1,0,unknown,yes +29,self-employed,single,tertiary,no,121,yes,no,unknown,30,may,1500,2,-1,0,unknown,yes +44,services,single,secondary,no,618,no,no,cellular,12,may,193,1,-1,0,unknown,yes +34,blue-collar,married,secondary,no,2495,yes,no,unknown,23,may,924,1,-1,0,unknown,yes +62,retired,married,secondary,no,569,no,no,cellular,4,feb,94,5,184,1,success,yes +58,management,married,tertiary,no,473,no,no,cellular,18,feb,1109,1,262,1,success,yes +60,management,married,tertiary,no,474,no,no,cellular,31,aug,415,5,186,3,other,yes +62,retired,divorced,tertiary,no,0,no,no,cellular,13,nov,227,2,-1,0,unknown,yes +53,admin.,married,secondary,no,1796,no,no,telephone,15,dec,476,1,193,1,failure,yes +32,management,single,tertiary,no,520,no,no,cellular,3,feb,443,2,-1,0,unknown,yes +39,blue-collar,married,primary,no,118,no,no,cellular,3,feb,906,1,-1,0,unknown,yes +58,management,married,tertiary,no,3342,no,no,cellular,5,feb,344,5,-1,0,unknown,yes +38,admin.,single,secondary,no,3239,no,no,unknown,5,jun,817,2,-1,0,unknown,yes +56,technician,married,secondary,no,23,no,no,cellular,20,nov,857,3,-1,0,unknown,yes +52,management,married,tertiary,no,40,no,no,cellular,19,nov,1265,3,-1,0,unknown,yes +45,management,married,tertiary,no,226,yes,no,cellular,13,aug,177,6,179,10,success,yes +28,management,single,tertiary,no,939,yes,no,unknown,27,may,740,1,-1,0,unknown,yes +29,blue-collar,single,secondary,no,-20,no,yes,cellular,21,jul,574,1,-1,0,unknown,yes +29,blue-collar,married,secondary,no,940,yes,yes,cellular,15,may,382,1,-1,0,unknown,yes +60,blue-collar,married,primary,no,5,no,no,cellular,29,jan,533,1,92,1,success,yes +31,management,married,secondary,no,0,no,no,cellular,11,aug,720,1,-1,0,unknown,yes +31,services,married,secondary,no,447,no,no,cellular,4,jun,327,3,77,3,success,yes +57,technician,divorced,tertiary,no,126,no,no,telephone,4,jun,166,2,-1,0,unknown,yes +25,technician,single,secondary,no,4718,no,no,cellular,24,jul,709,1,-1,0,unknown,yes +27,management,single,secondary,no,843,no,no,cellular,8,jan,187,1,-1,0,unknown,yes +24,blue-collar,married,primary,no,656,yes,no,unknown,16,may,894,1,-1,0,unknown,yes +39,services,single,secondary,no,91,no,no,cellular,3,sep,213,1,185,1,success,yes +27,services,married,secondary,no,0,yes,no,cellular,22,jul,1608,13,-1,0,unknown,yes +24,self-employed,single,tertiary,no,2984,yes,no,unknown,27,may,935,1,-1,0,unknown,yes +56,management,married,primary,no,870,no,no,cellular,16,nov,257,1,-1,0,unknown,yes +33,admin.,single,tertiary,no,7608,no,no,cellular,30,mar,238,4,-1,0,unknown,yes +38,technician,married,secondary,no,5115,yes,no,cellular,2,jun,318,1,95,7,success,yes +34,admin.,married,secondary,no,247,no,no,cellular,8,oct,401,2,-1,0,unknown,yes +45,blue-collar,married,secondary,no,154,yes,no,unknown,7,may,1138,1,-1,0,unknown,yes +35,management,married,tertiary,no,1731,no,no,cellular,31,jul,361,4,-1,0,unknown,yes +52,management,married,tertiary,no,3634,no,no,cellular,8,feb,341,8,-1,0,unknown,yes +38,admin.,divorced,secondary,no,19,yes,no,cellular,5,feb,1130,3,251,2,success,yes +23,technician,single,tertiary,no,1129,yes,no,unknown,28,may,806,1,-1,0,unknown,yes +38,blue-collar,divorced,secondary,no,0,yes,no,cellular,21,oct,576,1,183,4,success,yes +36,technician,single,secondary,no,12264,no,no,cellular,12,apr,158,2,-1,0,unknown,yes +33,services,married,secondary,no,478,no,no,cellular,30,apr,475,2,-1,0,unknown,yes +43,management,single,tertiary,no,2081,no,no,cellular,22,oct,554,3,-1,0,unknown,yes +41,technician,married,secondary,no,965,no,no,cellular,22,aug,336,10,-1,0,unknown,yes +46,technician,married,secondary,no,332,yes,no,unknown,9,may,772,1,-1,0,unknown,yes +60,housemaid,married,primary,no,1163,no,no,cellular,30,apr,470,8,-1,0,unknown,yes +40,unemployed,married,secondary,no,1960,yes,no,unknown,2,jun,605,6,-1,0,unknown,yes +33,admin.,divorced,secondary,no,294,yes,no,cellular,8,may,763,1,-1,0,unknown,yes +35,self-employed,married,secondary,no,188,yes,yes,unknown,5,jun,1865,2,-1,0,unknown,yes +36,management,married,tertiary,no,254,no,no,cellular,3,feb,303,2,-1,0,unknown,yes +28,student,single,secondary,no,1377,yes,no,cellular,14,may,688,2,-1,0,unknown,yes +60,retired,married,secondary,no,523,no,no,cellular,13,aug,192,3,-1,0,unknown,yes +47,management,married,tertiary,no,600,no,no,cellular,19,aug,290,15,-1,0,unknown,yes +35,student,married,tertiary,no,387,yes,no,cellular,8,may,1024,3,347,3,failure,yes +53,admin.,married,secondary,no,849,yes,no,cellular,6,feb,3102,3,-1,0,unknown,yes +39,blue-collar,divorced,primary,no,1317,yes,no,cellular,20,nov,543,1,170,4,other,yes +46,services,married,secondary,no,273,no,no,cellular,22,aug,565,2,-1,0,unknown,yes +34,management,married,tertiary,no,0,yes,no,cellular,30,apr,300,1,86,1,success,yes +58,retired,divorced,primary,no,2538,yes,no,cellular,19,nov,680,2,111,6,failure,yes +34,technician,married,secondary,no,133,no,no,cellular,15,nov,401,2,187,5,success,yes +33,admin.,single,tertiary,no,146,no,no,cellular,22,oct,380,1,91,3,success,yes +42,technician,single,unknown,no,11115,no,no,cellular,30,apr,328,1,-1,0,unknown,yes +32,services,single,secondary,no,486,no,no,cellular,29,jan,1181,1,-1,0,unknown,yes +47,management,single,tertiary,no,159,no,no,telephone,29,oct,220,3,155,3,other,yes +35,blue-collar,married,unknown,no,1201,no,no,unknown,18,jun,537,1,-1,0,unknown,yes +77,retired,married,primary,no,2590,no,no,telephone,13,nov,212,3,277,12,failure,yes +62,retired,married,unknown,no,800,no,no,cellular,17,feb,737,1,-1,0,unknown,yes +62,self-employed,divorced,secondary,no,0,yes,no,cellular,20,aug,158,1,-1,0,unknown,yes +38,management,married,tertiary,no,385,yes,no,telephone,28,oct,154,1,-1,0,unknown,yes +37,management,married,tertiary,no,238,no,no,cellular,3,feb,185,1,92,1,success,yes +38,management,married,tertiary,no,238,no,no,cellular,4,aug,139,1,92,3,failure,yes +31,management,married,tertiary,no,1812,no,no,cellular,30,apr,461,1,-1,0,unknown,yes +38,management,married,tertiary,no,413,no,no,cellular,13,oct,252,2,183,3,success,yes +31,blue-collar,married,secondary,no,152,yes,yes,cellular,8,jul,831,1,-1,0,unknown,yes +34,blue-collar,married,primary,no,1031,yes,no,unknown,29,may,751,3,-1,0,unknown,yes +33,management,single,tertiary,no,3143,no,no,cellular,29,jun,421,2,-1,0,unknown,yes +38,management,married,tertiary,no,613,no,no,cellular,3,feb,239,1,-1,0,unknown,yes +28,services,single,secondary,no,168,no,no,cellular,12,jan,387,1,194,1,other,yes +67,retired,single,tertiary,no,2144,no,no,telephone,21,apr,847,2,-1,0,unknown,yes +31,management,married,tertiary,no,1331,no,no,cellular,30,apr,297,1,86,3,success,yes +49,technician,married,tertiary,no,2611,no,no,cellular,20,apr,194,2,-1,0,unknown,yes +53,technician,single,secondary,no,925,no,no,cellular,25,aug,930,3,-1,0,unknown,yes +31,technician,single,tertiary,no,985,yes,no,cellular,17,apr,997,1,57,2,failure,yes +60,technician,divorced,secondary,no,367,no,no,cellular,16,aug,318,2,-1,0,unknown,yes +30,unemployed,single,tertiary,no,302,no,no,cellular,11,feb,528,3,-1,0,unknown,yes +38,admin.,married,secondary,no,47,yes,no,cellular,4,may,288,5,-1,0,unknown,yes +49,blue-collar,married,secondary,no,1946,no,no,cellular,16,jul,486,1,-1,0,unknown,yes +40,technician,married,secondary,no,2266,no,no,cellular,16,oct,447,1,147,5,failure,yes +34,technician,single,tertiary,no,992,yes,no,cellular,5,feb,71,2,-1,0,unknown,yes +35,management,single,tertiary,no,3544,yes,no,cellular,8,jun,380,1,-1,0,unknown,yes +33,blue-collar,single,secondary,no,76,yes,no,unknown,4,jun,1141,4,-1,0,unknown,yes +34,management,single,unknown,no,6013,yes,no,cellular,18,may,612,1,-1,0,unknown,yes +28,housemaid,single,tertiary,no,19,no,no,cellular,17,apr,149,1,-1,0,unknown,yes +27,blue-collar,single,primary,no,232,yes,no,cellular,26,oct,701,2,-1,0,unknown,yes +22,unemployed,single,tertiary,no,993,no,no,cellular,28,jul,115,3,93,1,other,yes +27,blue-collar,single,secondary,no,535,no,no,cellular,13,may,159,1,87,3,success,yes +34,technician,married,tertiary,no,127,no,no,cellular,3,jun,117,1,-1,0,unknown,yes +62,housemaid,married,tertiary,no,1528,no,no,cellular,15,oct,134,2,184,1,success,yes +36,blue-collar,married,secondary,no,324,yes,yes,cellular,16,jul,830,1,-1,0,unknown,yes +47,services,divorced,tertiary,no,1639,no,no,cellular,12,jan,349,1,-1,0,unknown,yes +32,admin.,married,secondary,no,0,yes,no,cellular,30,apr,177,2,-1,0,unknown,yes +33,admin.,married,secondary,no,-370,yes,no,cellular,7,may,261,1,345,1,failure,yes +27,technician,single,tertiary,no,11862,no,no,cellular,25,nov,285,2,97,7,success,yes +35,management,married,tertiary,no,323,no,no,cellular,11,jan,261,2,-1,0,unknown,yes +47,housemaid,married,secondary,no,3940,yes,no,cellular,5,aug,226,3,97,2,failure,yes +57,management,divorced,tertiary,no,8897,yes,no,cellular,12,aug,865,2,-1,0,unknown,yes +26,technician,single,secondary,no,2002,no,no,cellular,29,jan,146,1,-1,0,unknown,yes +46,blue-collar,married,secondary,no,668,yes,no,unknown,15,may,1263,2,-1,0,unknown,yes +58,services,married,primary,no,2946,yes,no,cellular,14,may,467,1,-1,0,unknown,yes +43,services,married,tertiary,no,4216,no,no,cellular,24,dec,150,2,195,2,success,yes +49,services,married,primary,no,0,yes,no,cellular,6,may,445,2,166,3,failure,yes +34,technician,married,tertiary,no,23076,no,no,cellular,26,may,243,2,35,6,other,yes +28,unemployed,married,primary,no,7459,yes,no,cellular,2,feb,981,5,269,2,failure,yes +33,blue-collar,married,primary,no,5,yes,no,cellular,17,apr,1007,2,-1,0,unknown,yes +25,student,single,secondary,no,4147,no,no,cellular,14,aug,211,3,-1,0,unknown,yes +26,services,single,tertiary,no,0,no,yes,telephone,1,jul,261,4,-1,0,unknown,yes +32,admin.,single,secondary,no,131,yes,no,cellular,22,jun,522,1,183,2,success,yes +29,management,married,secondary,no,231,no,no,cellular,14,may,1075,1,14,1,failure,yes +30,management,single,tertiary,no,720,no,no,cellular,15,jan,1265,4,210,4,other,yes +23,technician,single,secondary,no,598,no,no,cellular,11,nov,406,1,195,1,failure,yes +41,technician,married,secondary,no,1819,no,no,cellular,22,sep,397,1,371,3,failure,yes +66,management,married,secondary,no,587,no,no,cellular,12,may,457,2,392,2,success,yes +62,retired,married,secondary,no,1495,no,no,cellular,13,oct,896,1,57,2,success,yes +28,self-employed,single,tertiary,no,442,no,no,cellular,19,jun,474,3,95,3,other,yes +33,management,married,tertiary,no,271,yes,no,cellular,13,nov,182,2,91,2,success,yes +77,retired,married,primary,no,29340,no,no,cellular,15,mar,257,1,91,2,other,yes +54,management,married,tertiary,no,1014,no,yes,cellular,30,apr,240,1,162,2,failure,yes +50,management,married,tertiary,no,2366,no,no,cellular,28,jan,816,2,149,1,other,yes +31,housemaid,single,primary,no,26965,no,no,cellular,21,apr,654,2,-1,0,unknown,yes +45,management,single,tertiary,no,1411,no,no,cellular,7,sep,800,2,102,3,failure,yes +30,management,single,tertiary,no,617,no,no,cellular,27,feb,192,2,-1,0,unknown,yes +40,technician,divorced,tertiary,no,4736,yes,no,cellular,11,feb,285,2,-1,0,unknown,yes +67,retired,married,unknown,no,2540,no,no,telephone,14,sep,279,3,92,9,success,yes +39,services,single,secondary,no,403,yes,no,cellular,7,may,1262,3,-1,0,unknown,yes +20,blue-collar,single,secondary,no,423,yes,no,cellular,16,apr,498,1,-1,0,unknown,yes +31,management,married,tertiary,no,131,no,no,cellular,18,feb,332,2,-1,0,unknown,yes +31,admin.,single,tertiary,no,4041,no,no,cellular,30,apr,1034,2,-1,0,unknown,yes +33,management,married,tertiary,no,273,yes,no,unknown,16,may,803,1,-1,0,unknown,yes +45,blue-collar,married,primary,no,101,yes,no,unknown,12,may,460,5,-1,0,unknown,yes +45,admin.,married,secondary,no,0,no,yes,telephone,15,jul,533,3,-1,0,unknown,yes +31,technician,single,secondary,no,2544,no,no,cellular,15,jul,252,1,184,3,success,yes +33,technician,married,tertiary,no,1699,no,no,cellular,6,nov,178,2,94,1,success,yes +41,blue-collar,married,secondary,no,2689,yes,no,cellular,15,apr,135,1,-1,0,unknown,yes +31,management,married,tertiary,no,3160,yes,no,cellular,26,apr,688,2,-1,0,unknown,yes +50,housemaid,married,secondary,no,388,no,no,cellular,11,mar,203,2,-1,0,unknown,yes +56,retired,married,secondary,no,393,no,yes,cellular,26,jul,183,1,221,2,failure,yes +28,student,single,secondary,no,69,no,no,cellular,30,jan,532,2,-1,0,unknown,yes +35,technician,single,tertiary,no,2658,yes,no,cellular,19,aug,768,2,141,3,failure,yes +30,services,single,secondary,yes,-366,yes,no,cellular,18,jul,516,1,-1,0,unknown,yes +64,retired,married,secondary,no,466,yes,no,cellular,18,oct,526,1,-1,0,unknown,yes +32,student,single,tertiary,no,64,no,no,cellular,30,jun,598,4,105,5,failure,yes +29,blue-collar,married,secondary,no,580,yes,yes,cellular,17,apr,1311,2,-1,0,unknown,yes +29,management,single,secondary,no,3317,no,yes,telephone,4,may,640,7,-1,0,unknown,yes +51,blue-collar,married,secondary,no,955,no,yes,cellular,17,dec,221,3,-1,0,unknown,yes +40,housemaid,single,tertiary,no,7441,no,no,cellular,31,jul,1461,6,-1,0,unknown,yes +45,technician,married,tertiary,no,377,yes,no,unknown,19,jun,835,3,-1,0,unknown,yes +36,admin.,single,tertiary,no,994,no,no,cellular,6,may,211,1,90,6,success,yes +31,blue-collar,married,secondary,no,1766,no,yes,cellular,5,jun,166,2,-1,0,unknown,yes +43,services,married,secondary,no,-236,yes,no,cellular,28,jul,745,7,-1,0,unknown,yes +42,services,married,secondary,no,774,no,no,cellular,28,jan,997,1,-1,0,unknown,yes +46,admin.,married,secondary,no,659,yes,no,telephone,29,jul,1127,11,-1,0,unknown,yes +34,technician,married,tertiary,no,149,no,no,cellular,22,aug,739,2,-1,0,unknown,yes +52,blue-collar,married,secondary,no,1405,no,yes,cellular,17,jul,753,2,-1,0,unknown,yes +47,admin.,married,secondary,no,290,yes,no,cellular,22,jul,1352,2,-1,0,unknown,yes +40,student,single,secondary,no,595,yes,no,cellular,3,jun,406,2,-1,0,unknown,yes +26,student,single,secondary,no,4613,no,no,cellular,28,may,663,3,196,2,other,yes +45,technician,married,secondary,no,0,yes,no,cellular,7,dec,344,1,-1,0,unknown,yes +55,retired,divorced,secondary,no,2204,no,no,cellular,22,feb,261,1,264,1,failure,yes +42,unemployed,married,tertiary,no,576,no,no,cellular,3,jun,447,2,96,1,success,yes +40,management,single,tertiary,no,3840,yes,no,cellular,24,sep,232,2,409,2,success,yes +43,technician,married,secondary,no,1358,no,no,cellular,10,mar,159,3,-1,0,unknown,yes +26,student,single,tertiary,no,5169,yes,no,cellular,25,may,397,1,35,2,failure,yes +31,blue-collar,married,secondary,no,0,yes,no,unknown,10,aug,97,1,782,1,other,yes +31,management,single,tertiary,no,533,no,no,cellular,11,feb,144,1,91,9,success,yes +29,services,single,tertiary,no,1788,no,no,cellular,27,oct,353,1,-1,0,unknown,yes +44,self-employed,divorced,tertiary,no,1070,yes,no,cellular,12,aug,137,2,104,3,success,yes +35,management,single,tertiary,no,80,no,no,cellular,4,sep,434,2,94,1,other,yes +36,technician,single,secondary,no,3254,yes,no,unknown,27,oct,207,1,-1,0,unknown,yes +30,admin.,single,secondary,no,1309,no,no,cellular,28,jan,622,1,-1,0,unknown,yes +48,management,married,tertiary,no,0,no,yes,cellular,19,feb,204,4,182,1,success,yes +33,management,single,unknown,no,1534,yes,no,cellular,11,jul,1041,2,-1,0,unknown,yes +36,management,married,tertiary,no,535,no,no,cellular,20,apr,150,2,-1,0,unknown,yes +46,admin.,married,secondary,no,368,no,no,cellular,20,aug,293,1,90,4,other,yes +35,unemployed,single,tertiary,no,415,no,no,cellular,4,may,164,2,89,2,success,yes +46,technician,married,secondary,no,3434,no,yes,cellular,8,jun,148,2,101,1,success,yes +32,admin.,married,secondary,no,35,no,no,cellular,17,dec,324,3,126,3,success,yes +46,services,married,secondary,no,2948,no,no,cellular,21,nov,893,1,-1,0,unknown,yes +54,housemaid,married,tertiary,no,2473,no,no,cellular,5,mar,607,2,-1,0,unknown,yes +36,management,married,tertiary,no,1133,yes,no,cellular,4,aug,293,1,181,2,other,yes +29,admin.,single,secondary,no,306,yes,no,cellular,18,may,774,4,-1,0,unknown,yes +58,management,married,secondary,no,-382,no,no,cellular,31,jul,644,12,-1,0,unknown,yes +35,admin.,divorced,secondary,no,1224,yes,no,cellular,3,nov,187,1,-1,0,unknown,yes +30,management,single,tertiary,no,5359,no,no,cellular,27,may,119,1,98,1,success,yes +31,technician,married,tertiary,no,2166,no,no,cellular,13,jul,577,6,182,2,success,yes +35,management,married,tertiary,no,925,no,no,cellular,8,jun,200,4,-1,0,unknown,yes +36,management,married,tertiary,no,495,no,no,cellular,5,aug,157,3,97,2,success,yes +34,admin.,married,secondary,no,2374,yes,no,cellular,9,nov,161,1,209,2,failure,yes +28,student,single,secondary,no,1925,no,no,cellular,25,may,252,1,88,4,failure,yes +23,services,single,secondary,no,279,yes,no,cellular,18,may,843,1,370,1,failure,yes +46,blue-collar,married,unknown,no,842,yes,no,telephone,8,may,833,1,-1,0,unknown,yes +33,unemployed,single,tertiary,no,6748,no,no,cellular,14,aug,1579,2,-1,0,unknown,yes +25,management,married,tertiary,no,-242,yes,yes,cellular,18,may,600,4,332,4,other,yes +43,blue-collar,married,primary,no,3917,no,no,cellular,2,mar,154,1,-1,0,unknown,yes +38,technician,single,secondary,no,1711,no,no,telephone,30,sep,234,1,-1,0,unknown,yes +62,retired,married,secondary,no,298,no,no,cellular,17,nov,709,2,-1,0,unknown,yes +33,unknown,married,secondary,no,335,no,no,cellular,4,feb,891,2,177,7,failure,yes +53,management,married,unknown,no,2240,yes,no,cellular,2,jun,282,2,385,1,success,yes +38,technician,married,secondary,no,1478,no,no,cellular,12,aug,926,4,-1,0,unknown,yes +32,entrepreneur,married,secondary,no,390,no,no,cellular,6,sep,440,1,280,1,failure,yes +24,student,single,secondary,no,1234,no,no,cellular,21,jul,314,1,156,2,success,yes +26,management,single,tertiary,no,3704,no,no,cellular,19,aug,238,4,-1,0,unknown,yes +55,blue-collar,married,unknown,no,890,no,no,cellular,22,aug,1329,2,-1,0,unknown,yes +47,management,married,tertiary,no,3663,no,no,cellular,30,mar,364,3,-1,0,unknown,yes +58,blue-collar,single,secondary,no,119,yes,yes,cellular,12,may,985,1,-1,0,unknown,yes +30,blue-collar,married,secondary,no,167,yes,no,cellular,10,jul,255,1,-1,0,unknown,yes +39,technician,single,secondary,no,1022,yes,no,unknown,20,may,1410,2,-1,0,unknown,yes +30,admin.,single,tertiary,no,305,no,no,cellular,4,feb,227,2,-1,0,unknown,yes +34,blue-collar,divorced,unknown,no,172,no,no,cellular,15,jun,177,1,-1,0,unknown,yes +34,management,married,tertiary,no,3047,no,no,cellular,30,apr,317,1,160,5,other,yes +56,management,married,tertiary,no,616,no,no,cellular,30,apr,225,1,83,1,success,yes +27,services,single,secondary,no,453,no,no,cellular,19,apr,142,2,-1,0,unknown,yes +46,self-employed,single,secondary,no,526,no,no,cellular,30,apr,523,1,87,2,other,yes +32,management,married,tertiary,no,169,no,no,telephone,14,aug,698,2,-1,0,unknown,yes +27,services,single,secondary,no,1347,no,no,telephone,28,dec,824,1,193,11,success,yes +36,blue-collar,married,primary,no,378,yes,no,cellular,5,may,1240,1,-1,0,unknown,yes +46,admin.,single,tertiary,no,2889,yes,no,cellular,5,may,494,1,-1,0,unknown,yes +46,technician,married,secondary,no,57,no,no,unknown,28,may,796,1,-1,0,unknown,yes +49,management,married,tertiary,no,0,no,no,telephone,17,oct,223,1,-1,0,unknown,yes +39,technician,married,tertiary,no,1293,no,no,cellular,3,jun,140,2,-1,0,unknown,yes +33,technician,single,secondary,no,2085,no,no,cellular,9,feb,501,2,-1,0,unknown,yes +48,entrepreneur,single,secondary,no,315,no,no,unknown,11,feb,271,1,-1,0,unknown,yes +38,blue-collar,married,secondary,no,1627,no,no,unknown,16,jun,1323,9,-1,0,unknown,yes +60,retired,married,secondary,no,1853,no,no,cellular,10,feb,234,1,183,1,success,yes +33,technician,single,secondary,no,1429,yes,no,cellular,31,aug,268,8,-1,0,unknown,yes +64,management,married,tertiary,no,3951,no,no,cellular,28,jan,134,1,91,1,success,yes +22,self-employed,single,tertiary,no,780,no,no,cellular,17,mar,272,3,-1,0,unknown,yes +34,technician,divorced,tertiary,no,674,yes,no,cellular,7,aug,587,2,-1,0,unknown,yes +36,blue-collar,married,secondary,no,218,yes,no,cellular,4,may,619,6,-1,0,unknown,yes +72,retired,married,primary,no,763,no,no,cellular,24,apr,384,2,-1,0,unknown,yes +37,services,married,secondary,no,4151,yes,yes,cellular,30,jul,543,4,-1,0,unknown,yes +78,retired,divorced,primary,no,2787,no,no,telephone,1,jul,372,1,-1,0,unknown,yes +31,technician,married,tertiary,no,26,no,yes,cellular,18,nov,419,1,127,6,other,yes +20,student,single,secondary,no,153,no,no,unknown,21,jun,100,1,-1,0,unknown,yes +60,self-employed,married,primary,no,362,no,yes,cellular,29,jul,816,6,-1,0,unknown,yes +36,self-employed,married,secondary,no,1184,yes,no,cellular,6,apr,1063,1,-1,0,unknown,yes +51,technician,married,secondary,no,6840,no,no,telephone,7,jul,257,1,-1,0,unknown,yes +26,blue-collar,single,secondary,no,3145,no,no,cellular,28,dec,1141,1,209,1,other,yes +48,admin.,married,secondary,no,660,no,no,cellular,18,feb,318,1,561,2,success,yes +49,management,married,tertiary,no,1311,yes,no,cellular,8,may,813,1,-1,0,unknown,yes +20,student,single,secondary,no,215,no,no,cellular,24,nov,325,1,95,5,success,yes +77,retired,married,primary,no,3324,no,no,cellular,13,may,289,1,91,5,success,yes +42,management,single,tertiary,yes,0,yes,no,cellular,21,nov,824,1,-1,0,unknown,yes +31,admin.,single,secondary,no,747,yes,no,unknown,26,may,543,2,-1,0,unknown,yes +56,blue-collar,married,secondary,no,448,yes,yes,cellular,17,may,556,1,181,2,other,yes +32,technician,single,tertiary,no,1246,yes,no,cellular,30,apr,509,1,85,2,success,yes +33,management,married,tertiary,no,271,yes,no,cellular,14,aug,801,2,-1,0,unknown,yes +33,management,single,tertiary,no,1271,yes,no,cellular,15,apr,636,3,330,1,failure,yes +54,housemaid,married,secondary,no,962,yes,no,cellular,29,oct,288,3,-1,0,unknown,yes +28,student,single,tertiary,no,3054,no,no,cellular,30,apr,384,1,80,6,other,yes +41,unemployed,married,tertiary,no,0,no,no,cellular,30,oct,373,3,-1,0,unknown,yes +51,management,married,tertiary,no,346,no,no,cellular,12,nov,134,2,192,3,failure,yes +43,blue-collar,divorced,primary,no,3550,no,no,cellular,20,nov,1154,1,-1,0,unknown,yes +36,management,single,tertiary,no,1379,no,no,cellular,25,may,189,1,186,1,failure,yes +49,management,married,tertiary,no,1093,yes,yes,cellular,12,jan,243,2,91,2,success,yes +47,admin.,divorced,secondary,no,295,yes,no,unknown,6,jun,94,2,-1,0,unknown,yes +30,services,married,secondary,no,129,yes,no,unknown,26,may,1446,7,-1,0,unknown,yes +31,technician,married,tertiary,no,636,yes,no,cellular,4,may,352,4,-1,0,unknown,yes +39,technician,married,secondary,no,4101,yes,no,cellular,18,feb,146,2,264,1,other,yes +40,management,married,tertiary,no,3352,yes,no,telephone,23,oct,138,1,-1,0,unknown,yes +48,management,single,tertiary,no,334,yes,no,cellular,28,sep,600,2,92,12,success,yes +30,services,divorced,secondary,no,341,yes,no,cellular,20,nov,478,1,-1,0,unknown,yes +41,entrepreneur,married,secondary,no,8491,yes,no,cellular,18,nov,929,1,-1,0,unknown,yes +33,services,married,secondary,no,227,yes,yes,cellular,13,aug,477,2,-1,0,unknown,yes +25,student,single,secondary,no,125,no,no,cellular,9,feb,215,1,92,2,success,yes +49,admin.,married,secondary,no,3608,yes,no,unknown,13,nov,231,1,-1,0,unknown,yes +32,management,single,tertiary,no,2536,yes,no,cellular,26,aug,958,6,-1,0,unknown,yes +64,management,married,tertiary,no,4688,no,no,cellular,21,oct,200,1,-1,0,unknown,yes +28,student,single,secondary,no,0,no,no,cellular,18,feb,209,20,-1,0,unknown,yes +37,management,married,tertiary,no,1113,no,no,cellular,2,mar,229,1,182,1,success,yes +25,blue-collar,single,secondary,no,1857,yes,no,cellular,13,apr,295,4,187,6,success,yes +53,admin.,single,secondary,no,2892,no,no,cellular,9,apr,527,3,-1,0,unknown,yes +62,self-employed,divorced,tertiary,no,6,yes,no,cellular,13,apr,103,1,182,3,success,yes +34,services,married,secondary,no,1076,no,no,cellular,12,may,152,1,182,6,success,yes +26,admin.,single,secondary,yes,-930,yes,no,cellular,14,may,786,1,-1,0,unknown,yes +39,blue-collar,married,secondary,no,1382,yes,no,cellular,11,feb,397,2,-1,0,unknown,yes +45,management,single,tertiary,no,2048,yes,no,cellular,18,oct,310,1,804,1,failure,yes +19,student,single,primary,no,608,no,no,cellular,12,may,236,1,180,2,success,yes +33,blue-collar,divorced,unknown,yes,-274,yes,yes,cellular,17,apr,715,2,329,2,failure,yes +43,admin.,married,secondary,no,132,no,no,cellular,27,may,187,2,71,1,success,yes +35,technician,single,secondary,no,344,no,no,cellular,27,aug,519,16,-1,0,unknown,yes +52,blue-collar,married,secondary,no,2230,no,no,cellular,29,oct,423,3,-1,0,unknown,yes +28,self-employed,single,secondary,no,5679,yes,no,cellular,9,feb,701,4,-1,0,unknown,yes +35,blue-collar,single,secondary,no,885,yes,no,cellular,15,jul,632,6,-1,0,unknown,yes +50,blue-collar,married,primary,no,3764,no,no,telephone,9,sep,214,2,99,4,failure,yes +37,services,married,secondary,no,4017,no,no,cellular,30,apr,665,2,196,1,success,yes +36,technician,married,secondary,no,368,yes,yes,unknown,6,may,1597,2,-1,0,unknown,yes +61,retired,married,secondary,no,569,no,no,cellular,4,aug,219,1,-1,0,unknown,yes +24,blue-collar,married,secondary,no,272,no,no,cellular,16,nov,105,2,94,2,success,yes +35,services,single,primary,no,167,no,yes,cellular,11,jul,614,2,-1,0,unknown,yes +32,management,married,tertiary,no,1388,yes,no,cellular,30,apr,753,1,-1,0,unknown,yes +45,blue-collar,married,secondary,no,7895,yes,no,cellular,4,feb,872,1,-1,0,unknown,yes +43,blue-collar,married,secondary,no,2160,no,no,cellular,8,sep,261,1,98,1,success,yes +39,technician,married,secondary,no,1587,yes,no,cellular,2,jun,171,3,-1,0,unknown,yes +35,management,divorced,tertiary,no,1723,yes,no,cellular,25,jul,862,1,-1,0,unknown,yes +23,student,single,tertiary,no,691,no,no,cellular,27,may,1178,1,178,6,success,yes +34,blue-collar,married,secondary,no,243,yes,no,cellular,18,may,507,1,-1,0,unknown,yes +47,admin.,single,secondary,no,3696,no,no,cellular,12,jan,758,4,-1,0,unknown,yes +21,student,single,secondary,no,71,no,no,cellular,13,jan,169,2,-1,0,unknown,yes +37,unknown,single,tertiary,no,0,no,no,cellular,8,jun,257,2,97,1,success,yes +53,admin.,married,secondary,no,3765,no,no,unknown,20,jun,1094,3,-1,0,unknown,yes +46,blue-collar,married,primary,no,977,no,yes,telephone,2,feb,436,3,-1,0,unknown,yes +26,technician,single,tertiary,no,15161,no,no,cellular,2,feb,280,1,-1,0,unknown,yes +51,admin.,married,tertiary,no,0,yes,yes,cellular,8,mar,124,2,-1,0,unknown,yes +58,entrepreneur,married,tertiary,no,776,yes,no,telephone,9,jul,990,1,-1,0,unknown,yes +51,admin.,single,secondary,no,1994,no,no,unknown,18,jun,771,2,-1,0,unknown,yes +33,admin.,married,secondary,no,616,no,no,cellular,6,sep,250,3,-1,0,unknown,yes +46,housemaid,married,primary,no,3512,no,no,cellular,30,oct,175,1,197,1,failure,yes +34,technician,single,tertiary,no,6529,no,no,cellular,14,aug,505,2,-1,0,unknown,yes +40,blue-collar,married,primary,no,0,yes,no,cellular,21,jul,1080,4,-1,0,unknown,yes +40,admin.,divorced,secondary,no,2129,no,no,cellular,30,apr,452,1,-1,0,unknown,yes +46,technician,single,secondary,no,874,no,no,cellular,19,nov,819,3,-1,0,unknown,yes +59,entrepreneur,married,secondary,no,496,no,no,cellular,22,oct,738,3,183,1,success,yes +34,technician,married,tertiary,no,1539,yes,no,cellular,15,jun,441,1,56,1,other,yes +49,management,divorced,tertiary,no,348,no,no,cellular,30,oct,125,1,-1,0,unknown,yes +28,management,single,tertiary,no,1287,yes,no,cellular,26,feb,65,1,-1,0,unknown,yes +56,management,married,tertiary,no,12356,yes,no,cellular,26,may,410,1,551,5,other,yes +28,technician,single,secondary,no,5763,no,yes,cellular,5,mar,196,2,-1,0,unknown,yes +33,blue-collar,married,secondary,no,-267,yes,no,cellular,20,apr,1030,3,-1,0,unknown,yes +37,unemployed,single,secondary,no,443,no,no,cellular,29,jan,1600,1,-1,0,unknown,yes +38,services,married,secondary,no,934,yes,no,cellular,14,may,715,1,-1,0,unknown,yes +25,technician,single,secondary,no,4859,no,no,cellular,12,jan,227,1,-1,0,unknown,yes +74,retired,married,tertiary,no,1843,no,no,cellular,15,sep,251,2,184,3,success,yes +42,unemployed,married,secondary,no,1289,no,no,cellular,15,jul,250,4,415,2,failure,yes +29,housemaid,single,tertiary,no,19,no,no,cellular,3,dec,274,1,230,1,success,yes +60,retired,married,secondary,no,8332,no,no,cellular,16,mar,279,1,194,7,other,yes +41,blue-collar,married,secondary,no,5517,yes,no,cellular,10,jul,584,1,-1,0,unknown,yes +51,admin.,married,secondary,no,949,no,no,cellular,5,aug,1092,1,-1,0,unknown,yes +49,blue-collar,married,primary,no,-157,yes,no,cellular,7,jul,491,3,-1,0,unknown,yes +41,management,married,tertiary,no,254,no,no,cellular,9,jun,183,2,294,2,failure,yes +31,blue-collar,married,secondary,no,136,no,no,cellular,12,may,228,2,267,1,failure,yes +25,admin.,single,secondary,no,285,no,no,cellular,3,jul,658,3,-1,0,unknown,yes +32,management,divorced,tertiary,no,874,no,no,cellular,12,aug,1282,6,-1,0,unknown,yes +73,retired,married,tertiary,no,1641,yes,no,cellular,27,feb,49,2,-1,0,unknown,yes +31,management,single,secondary,no,1088,yes,no,cellular,8,apr,575,2,-1,0,unknown,yes +32,student,single,tertiary,no,1138,no,no,telephone,10,feb,402,3,-1,0,unknown,yes +27,student,single,tertiary,no,13107,yes,no,cellular,6,apr,661,1,314,2,failure,yes +60,retired,married,tertiary,no,2557,yes,no,cellular,2,feb,415,1,-1,0,unknown,yes +34,admin.,married,tertiary,no,142,yes,no,cellular,13,may,459,1,-1,0,unknown,yes +43,admin.,single,secondary,no,733,yes,no,cellular,19,nov,1102,3,-1,0,unknown,yes +31,entrepreneur,single,tertiary,yes,-405,yes,yes,cellular,13,aug,703,2,-1,0,unknown,yes +42,management,single,tertiary,no,11008,no,no,cellular,28,jul,822,6,405,1,success,yes +27,services,single,secondary,no,246,no,no,cellular,17,jun,453,2,-1,0,unknown,yes +57,retired,married,tertiary,no,0,yes,yes,unknown,28,may,648,1,-1,0,unknown,yes +30,management,single,tertiary,no,536,no,no,cellular,14,jan,362,2,91,2,success,yes +45,admin.,divorced,tertiary,no,1506,no,no,cellular,28,jul,365,4,-1,0,unknown,yes +49,admin.,single,secondary,no,716,yes,no,unknown,15,may,1257,3,-1,0,unknown,yes +31,management,single,tertiary,no,354,no,no,cellular,21,apr,242,2,-1,0,unknown,yes +41,management,divorced,tertiary,no,1757,no,no,cellular,22,apr,314,1,239,13,failure,yes +57,technician,married,secondary,no,7554,no,no,telephone,28,oct,141,1,-1,0,unknown,yes +57,management,divorced,unknown,no,854,no,no,cellular,6,oct,480,1,40,5,success,yes +58,retired,married,secondary,no,1230,no,no,cellular,20,may,420,1,87,1,failure,yes +54,management,married,tertiary,no,1303,no,no,cellular,3,feb,1635,1,-1,0,unknown,yes +36,management,married,tertiary,no,93,no,no,cellular,12,jul,262,2,182,7,failure,yes +53,services,divorced,primary,no,-291,yes,yes,unknown,7,may,591,1,-1,0,unknown,yes +34,admin.,married,tertiary,no,69,no,yes,cellular,3,aug,263,3,251,3,success,yes +27,unemployed,single,secondary,no,771,no,no,cellular,21,oct,181,1,302,3,other,yes +41,services,single,secondary,no,-675,yes,yes,cellular,18,mar,147,4,-1,0,unknown,yes +62,technician,married,secondary,no,973,no,no,cellular,2,feb,326,1,-1,0,unknown,yes +27,blue-collar,single,primary,no,377,no,no,cellular,19,feb,645,2,-1,0,unknown,yes +37,technician,married,secondary,no,480,no,no,cellular,22,oct,344,2,182,8,other,yes +22,student,single,secondary,no,552,no,no,cellular,1,sep,327,1,-1,0,unknown,yes +27,student,single,tertiary,no,3733,yes,no,telephone,13,feb,299,6,-1,0,unknown,yes +30,services,single,secondary,no,-158,yes,no,cellular,12,may,426,1,370,2,failure,yes +28,admin.,single,secondary,no,136,no,no,cellular,16,jun,355,1,-1,0,unknown,yes +27,admin.,single,secondary,no,4590,yes,no,cellular,10,nov,131,4,89,3,failure,yes +42,management,divorced,secondary,no,283,yes,no,cellular,23,jul,761,1,-1,0,unknown,yes +36,management,married,tertiary,no,0,yes,no,telephone,23,oct,140,1,143,3,failure,yes +27,blue-collar,married,secondary,no,419,yes,no,unknown,4,jun,1181,2,-1,0,unknown,yes +58,services,divorced,secondary,no,462,no,no,cellular,12,aug,332,1,-1,0,unknown,yes +55,technician,divorced,secondary,yes,4,no,no,cellular,28,jan,1048,1,-1,0,unknown,yes +52,admin.,divorced,secondary,no,363,yes,no,cellular,21,aug,168,1,462,1,success,yes +42,management,single,tertiary,no,7560,no,no,cellular,28,jan,132,1,-1,0,unknown,yes +46,management,divorced,tertiary,no,1297,no,no,cellular,11,aug,716,3,-1,0,unknown,yes +32,technician,single,secondary,no,40,no,no,cellular,8,aug,419,2,-1,0,unknown,yes +52,technician,single,secondary,no,436,no,yes,unknown,22,mar,95,1,-1,0,unknown,yes +57,admin.,married,secondary,no,403,yes,no,cellular,18,may,603,1,340,2,other,yes +40,technician,single,secondary,no,5637,yes,no,unknown,30,may,553,3,-1,0,unknown,yes +30,self-employed,single,tertiary,no,916,no,no,cellular,29,dec,449,2,-1,0,unknown,yes +30,management,married,tertiary,no,1942,yes,yes,cellular,21,nov,436,2,178,3,other,yes +39,technician,divorced,secondary,no,385,no,no,cellular,13,oct,242,1,48,2,failure,yes +28,technician,single,secondary,yes,-1042,yes,no,unknown,6,jun,712,2,-1,0,unknown,yes +34,management,married,tertiary,no,3696,no,no,cellular,8,apr,758,2,160,5,other,yes +30,management,single,tertiary,no,3384,no,no,cellular,4,jun,578,2,-1,0,unknown,yes +24,technician,married,secondary,no,556,yes,no,cellular,8,feb,278,1,94,4,success,yes +59,management,married,tertiary,no,315,no,no,cellular,2,mar,591,1,176,2,failure,yes +38,unemployed,married,tertiary,no,2812,yes,no,cellular,30,apr,830,1,-1,0,unknown,yes +47,unemployed,married,primary,no,324,no,no,cellular,21,nov,462,2,-1,0,unknown,yes +52,blue-collar,married,secondary,no,-519,yes,no,unknown,9,jun,442,8,-1,0,unknown,yes +35,student,single,secondary,no,188,yes,no,cellular,16,feb,75,3,200,5,failure,yes +61,management,married,tertiary,no,267,no,no,cellular,20,apr,190,1,-1,0,unknown,yes +46,self-employed,divorced,tertiary,no,21,no,no,cellular,30,jul,566,2,-1,0,unknown,yes +55,admin.,married,unknown,no,2038,no,no,cellular,9,apr,394,1,-1,0,unknown,yes +42,technician,single,unknown,no,11115,no,no,cellular,10,aug,187,1,102,1,success,yes +26,management,single,tertiary,no,194,no,no,cellular,22,apr,407,2,-1,0,unknown,yes +58,admin.,married,secondary,no,169,no,no,cellular,13,aug,880,1,92,8,success,yes +46,management,divorced,secondary,no,0,no,no,cellular,27,aug,763,5,-1,0,unknown,yes +39,management,married,secondary,no,2981,no,no,cellular,26,mar,200,1,-1,0,unknown,yes +29,student,single,secondary,no,67,no,no,cellular,23,feb,211,1,187,5,success,yes +21,technician,single,unknown,no,360,no,no,cellular,26,may,131,2,-1,0,unknown,yes +57,technician,married,primary,no,3376,yes,no,telephone,2,jun,421,2,-1,0,unknown,yes +31,management,single,tertiary,no,4718,yes,no,cellular,21,nov,536,1,-1,0,unknown,yes +49,technician,divorced,unknown,no,387,no,no,cellular,28,jan,325,1,-1,0,unknown,yes +56,management,divorced,tertiary,no,4266,yes,no,unknown,17,jun,490,4,-1,0,unknown,yes +30,admin.,married,secondary,no,396,yes,no,cellular,13,may,366,3,348,2,failure,yes +34,technician,single,secondary,no,2085,no,no,cellular,10,aug,356,3,182,2,success,yes +35,management,single,tertiary,no,62,yes,no,cellular,20,apr,213,3,-1,0,unknown,yes +55,retired,divorced,secondary,no,-268,no,yes,cellular,24,jul,1417,1,-1,0,unknown,yes +44,blue-collar,married,secondary,no,1697,yes,no,unknown,4,jul,150,2,-1,0,unknown,yes +36,technician,married,tertiary,no,341,no,no,cellular,13,aug,282,1,-1,0,unknown,yes +63,retired,divorced,primary,no,109,no,no,cellular,10,nov,406,2,-1,0,unknown,yes +37,management,married,tertiary,no,0,no,no,cellular,15,jan,426,2,196,1,other,yes +58,retired,married,primary,no,4158,no,no,cellular,13,aug,455,2,-1,0,unknown,yes +37,management,married,tertiary,no,156,no,no,cellular,19,nov,366,3,-1,0,unknown,yes +26,management,single,tertiary,no,390,no,no,cellular,7,aug,325,1,-1,0,unknown,yes +44,blue-collar,single,primary,no,36,yes,no,cellular,15,may,551,1,371,2,failure,yes +37,technician,single,tertiary,no,0,yes,no,cellular,23,jul,366,6,-1,0,unknown,yes +53,management,divorced,tertiary,no,50,yes,no,cellular,15,may,669,1,337,3,failure,yes +37,management,single,tertiary,no,102,yes,no,cellular,6,may,445,1,258,2,failure,yes +40,blue-collar,married,primary,no,57,yes,no,cellular,31,jul,1007,9,-1,0,unknown,yes +40,blue-collar,divorced,secondary,no,973,no,no,cellular,14,may,449,1,-1,0,unknown,yes +31,management,married,tertiary,no,3,yes,yes,cellular,11,feb,331,1,-1,0,unknown,yes +36,self-employed,married,secondary,no,1245,yes,no,unknown,6,jun,1469,9,-1,0,unknown,yes +36,blue-collar,married,primary,no,828,no,no,cellular,13,may,1512,1,345,8,failure,yes +52,blue-collar,married,unknown,no,0,yes,no,cellular,9,jul,1486,1,-1,0,unknown,yes +39,blue-collar,married,secondary,no,167,yes,yes,cellular,12,may,612,1,-1,0,unknown,yes +47,admin.,married,unknown,no,66,no,no,cellular,7,aug,358,1,-1,0,unknown,yes +49,entrepreneur,married,secondary,no,687,yes,no,cellular,17,apr,772,1,-1,0,unknown,yes +32,technician,married,tertiary,no,2688,no,no,cellular,14,oct,216,1,57,1,failure,yes +36,management,married,tertiary,no,625,yes,no,cellular,18,jul,1360,9,-1,0,unknown,yes +27,technician,single,secondary,no,1742,yes,no,unknown,16,may,787,1,-1,0,unknown,yes +71,retired,divorced,primary,no,1729,no,no,cellular,17,nov,456,2,-1,0,unknown,yes +32,blue-collar,married,secondary,no,889,yes,no,cellular,10,sep,185,1,99,5,success,yes +29,management,single,tertiary,no,224,yes,no,cellular,24,apr,65,2,81,3,failure,yes +64,housemaid,married,primary,no,768,no,no,cellular,14,jan,371,1,-1,0,unknown,yes +24,student,single,secondary,no,1809,no,no,cellular,11,oct,165,1,95,2,success,yes +21,student,single,primary,no,423,no,no,telephone,18,jan,287,5,285,5,success,yes +42,entrepreneur,divorced,secondary,no,335,yes,no,cellular,12,may,580,1,-1,0,unknown,yes +47,blue-collar,married,secondary,no,182,yes,no,telephone,10,jul,39,1,-1,0,unknown,yes +53,blue-collar,divorced,primary,no,4401,no,no,telephone,11,nov,241,1,92,1,success,yes +33,admin.,single,secondary,no,607,no,no,cellular,27,feb,110,2,-1,0,unknown,yes +62,retired,married,primary,no,1084,no,no,cellular,14,apr,505,1,-1,0,unknown,yes +33,blue-collar,married,secondary,no,0,no,no,cellular,29,jul,454,6,-1,0,unknown,yes +58,unemployed,married,secondary,no,687,yes,no,cellular,30,apr,341,2,-1,0,unknown,yes +52,services,married,secondary,no,659,no,no,cellular,27,oct,113,1,-1,0,unknown,yes +37,technician,single,secondary,no,1435,no,no,cellular,18,aug,724,16,-1,0,unknown,yes +37,management,single,tertiary,no,8828,no,no,unknown,12,jun,1010,3,-1,0,unknown,yes +34,admin.,married,tertiary,no,69,no,yes,cellular,25,nov,296,1,205,2,failure,yes +79,retired,divorced,primary,no,79,no,no,cellular,9,oct,1106,2,-1,0,unknown,yes +54,self-employed,married,tertiary,no,990,no,no,cellular,3,jun,244,2,-1,0,unknown,yes +28,admin.,single,secondary,no,2290,yes,no,cellular,18,may,2301,1,-1,0,unknown,yes +33,management,married,tertiary,no,679,no,no,cellular,5,aug,1109,2,-1,0,unknown,yes +21,blue-collar,married,primary,no,-172,yes,yes,cellular,15,may,409,1,361,3,failure,yes +46,self-employed,married,secondary,no,548,no,no,cellular,12,aug,1181,4,-1,0,unknown,yes +38,technician,single,secondary,no,565,yes,no,cellular,30,apr,1143,1,-1,0,unknown,yes +32,services,married,primary,no,228,yes,no,cellular,21,jul,1017,6,-1,0,unknown,yes +34,self-employed,married,tertiary,no,0,no,no,cellular,28,aug,730,11,-1,0,unknown,yes +49,admin.,single,tertiary,no,228,yes,no,cellular,2,mar,368,1,-1,0,unknown,yes +31,technician,single,tertiary,no,454,no,no,cellular,30,apr,266,1,-1,0,unknown,yes +32,self-employed,married,secondary,no,514,yes,no,cellular,11,jul,812,1,-1,0,unknown,yes +38,blue-collar,single,tertiary,no,2885,yes,no,unknown,20,jun,1422,10,-1,0,unknown,yes +27,blue-collar,single,tertiary,no,567,no,no,cellular,25,nov,238,2,184,1,success,yes +78,unknown,married,unknown,no,2235,no,no,telephone,14,apr,300,3,-1,0,unknown,yes +60,retired,married,secondary,no,5267,no,no,cellular,4,sep,520,1,-1,0,unknown,yes +36,admin.,married,tertiary,no,29,no,no,cellular,12,aug,576,1,-1,0,unknown,yes +75,retired,married,secondary,no,291,no,no,cellular,12,aug,350,1,182,2,success,yes +30,management,single,tertiary,no,4889,no,no,cellular,11,aug,545,2,-1,0,unknown,yes +30,management,single,tertiary,no,502,no,yes,cellular,18,jul,572,1,-1,0,unknown,yes +50,admin.,married,secondary,no,3608,yes,no,cellular,13,nov,176,2,197,2,success,yes +37,management,married,tertiary,no,3556,no,no,cellular,9,nov,268,1,-1,0,unknown,yes +60,admin.,divorced,secondary,no,-41,yes,yes,cellular,6,feb,1658,1,262,1,failure,yes +26,management,single,tertiary,no,3944,yes,no,cellular,14,may,974,2,-1,0,unknown,yes +49,services,married,secondary,no,202,yes,no,cellular,17,nov,651,2,104,1,failure,yes +40,technician,single,tertiary,no,1175,no,no,cellular,14,apr,184,1,-1,0,unknown,yes +46,admin.,married,secondary,no,974,no,no,cellular,17,mar,178,1,-1,0,unknown,yes +38,management,single,tertiary,no,3141,no,no,cellular,9,nov,347,4,189,2,success,yes +74,retired,divorced,secondary,no,4079,no,no,cellular,19,oct,343,3,-1,0,unknown,yes +35,services,single,tertiary,no,0,no,no,cellular,3,jul,704,1,-1,0,unknown,yes +50,unemployed,married,secondary,no,3357,no,no,cellular,9,jun,239,4,-1,0,unknown,yes +54,management,married,primary,no,2587,no,no,cellular,2,jun,236,2,-1,0,unknown,yes +35,management,divorced,tertiary,no,434,yes,no,cellular,13,aug,1314,2,-1,0,unknown,yes +36,unemployed,single,tertiary,no,1291,no,no,cellular,3,feb,298,1,-1,0,unknown,yes +30,blue-collar,single,secondary,no,315,no,no,cellular,23,jun,1407,1,-1,0,unknown,yes +36,services,married,secondary,no,394,no,no,cellular,5,aug,324,1,-1,0,unknown,yes +41,management,married,tertiary,no,5561,no,no,cellular,20,aug,649,2,-1,0,unknown,yes +30,admin.,single,secondary,no,3528,no,no,cellular,4,aug,250,1,92,2,failure,yes +39,entrepreneur,married,primary,no,437,yes,no,unknown,27,oct,150,1,-1,0,unknown,yes +34,services,single,tertiary,no,3119,no,no,cellular,16,oct,306,1,-1,0,unknown,yes +32,services,married,secondary,no,264,yes,yes,cellular,19,nov,1502,1,-1,0,unknown,yes +35,unemployed,married,primary,no,3285,no,no,cellular,21,nov,1555,2,-1,0,unknown,yes +50,management,married,tertiary,no,1396,no,no,cellular,25,aug,731,6,-1,0,unknown,yes +28,services,married,secondary,no,510,yes,yes,cellular,8,jul,1767,2,-1,0,unknown,yes +44,blue-collar,married,primary,no,-101,yes,no,cellular,15,may,679,1,366,4,failure,yes +32,blue-collar,married,primary,no,634,no,no,cellular,29,jan,696,1,-1,0,unknown,yes +30,management,single,tertiary,no,4210,no,no,cellular,12,aug,796,4,-1,0,unknown,yes +59,retired,married,secondary,no,0,no,no,unknown,5,jun,812,1,-1,0,unknown,yes +35,technician,divorced,secondary,no,84,yes,yes,cellular,6,may,954,1,-1,0,unknown,yes +30,blue-collar,married,secondary,no,278,yes,yes,unknown,23,may,1073,1,-1,0,unknown,yes +42,management,married,unknown,no,849,yes,no,cellular,8,oct,667,1,321,1,other,yes +63,retired,married,secondary,no,1612,no,no,telephone,17,feb,233,2,-1,0,unknown,yes +35,technician,single,secondary,no,204,yes,no,cellular,25,may,236,1,-1,0,unknown,yes +43,unemployed,divorced,secondary,no,1854,no,no,cellular,30,apr,323,1,-1,0,unknown,yes +27,technician,single,tertiary,no,4661,no,no,cellular,8,apr,114,1,-1,0,unknown,yes +29,self-employed,single,tertiary,no,1579,no,no,cellular,13,jul,178,1,181,4,success,yes +54,unemployed,married,secondary,no,1561,no,no,cellular,25,may,352,3,186,2,failure,yes +80,retired,married,primary,no,1468,no,no,cellular,13,jan,330,3,-1,0,unknown,yes +57,blue-collar,married,secondary,no,2887,no,no,cellular,21,aug,819,10,-1,0,unknown,yes +33,management,single,tertiary,no,224,no,no,cellular,23,sep,409,2,92,4,success,yes +65,retired,married,primary,no,1760,no,no,cellular,18,aug,855,4,-1,0,unknown,yes +59,admin.,married,secondary,no,3735,no,no,cellular,17,jun,243,3,91,6,success,yes +30,housemaid,single,tertiary,no,19,no,no,cellular,4,aug,139,1,92,5,success,yes +28,blue-collar,married,secondary,no,61,yes,no,cellular,4,may,226,2,319,1,success,yes +29,technician,married,secondary,no,95,no,yes,cellular,3,feb,172,3,-1,0,unknown,yes +31,self-employed,married,tertiary,no,5,yes,yes,cellular,21,nov,635,1,135,2,failure,yes +31,management,single,secondary,no,360,yes,no,cellular,18,may,309,1,-1,0,unknown,yes +49,blue-collar,married,secondary,no,1730,yes,no,cellular,4,aug,605,2,92,4,success,yes +43,unemployed,married,tertiary,no,0,no,no,cellular,16,jul,745,1,281,1,failure,yes +40,unemployed,single,tertiary,no,7968,no,no,cellular,2,mar,263,2,180,2,success,yes +39,unemployed,married,primary,no,7005,yes,no,cellular,28,jul,429,2,184,3,success,yes +71,technician,married,secondary,no,3020,no,no,telephone,30,jul,304,1,270,3,failure,yes +38,self-employed,single,tertiary,no,605,no,no,telephone,18,jun,1603,10,-1,0,unknown,yes +30,management,single,tertiary,no,376,yes,no,cellular,21,nov,710,1,-1,0,unknown,yes +45,unemployed,married,secondary,no,891,yes,no,unknown,7,jan,118,1,-1,0,unknown,yes +67,retired,divorced,secondary,no,704,no,no,cellular,6,may,613,1,87,3,success,yes +58,admin.,married,secondary,no,4348,yes,no,cellular,23,jun,790,4,141,1,other,yes +45,admin.,divorced,secondary,no,2353,yes,no,cellular,5,mar,182,1,107,2,other,yes +34,management,married,tertiary,no,8000,no,no,cellular,12,feb,291,1,260,2,failure,yes +27,technician,single,tertiary,no,2781,yes,no,cellular,24,may,168,1,389,1,failure,yes +51,blue-collar,married,primary,no,541,no,no,cellular,11,aug,663,3,-1,0,unknown,yes +38,management,married,unknown,no,3576,no,no,cellular,26,may,579,1,-1,0,unknown,yes +28,management,single,tertiary,no,2725,no,no,cellular,16,jun,292,1,504,1,failure,yes +25,student,single,secondary,no,2354,no,no,cellular,5,feb,226,7,-1,0,unknown,yes +37,services,married,secondary,no,775,no,no,cellular,14,aug,150,2,-1,0,unknown,yes +38,blue-collar,married,secondary,no,622,yes,no,unknown,21,may,611,2,-1,0,unknown,yes +37,technician,single,secondary,no,4,no,no,cellular,11,aug,933,1,-1,0,unknown,yes +34,management,single,tertiary,no,5,no,no,cellular,18,aug,370,2,-1,0,unknown,yes +37,technician,single,tertiary,no,3943,no,no,cellular,6,apr,1138,2,138,1,failure,yes +76,retired,divorced,primary,no,802,no,no,cellular,9,mar,241,1,181,5,success,yes +48,management,married,tertiary,no,2351,no,no,cellular,15,sep,150,1,105,3,success,yes +49,technician,divorced,tertiary,no,1807,yes,no,cellular,12,mar,229,1,-1,0,unknown,yes +62,housemaid,married,secondary,no,2,no,no,cellular,3,nov,322,1,-1,0,unknown,yes +33,services,single,unknown,no,2297,no,no,cellular,27,jul,527,1,-1,0,unknown,yes +19,student,single,unknown,no,779,no,no,cellular,1,apr,184,4,-1,0,unknown,yes +25,student,single,secondary,no,108,no,no,cellular,29,apr,305,3,-1,0,unknown,yes +31,services,divorced,primary,no,459,yes,no,cellular,7,may,623,1,293,1,success,yes +38,technician,single,tertiary,no,110,no,no,unknown,17,jun,1051,3,-1,0,unknown,yes +31,technician,single,tertiary,no,13711,yes,no,cellular,20,nov,1532,3,-1,0,unknown,yes +24,student,single,tertiary,no,3415,no,no,cellular,27,apr,97,1,-1,0,unknown,yes +24,self-employed,single,tertiary,no,2376,no,no,cellular,27,apr,122,1,-1,0,unknown,yes +26,technician,single,secondary,no,181,no,no,cellular,20,apr,158,2,-1,0,unknown,yes +73,retired,married,tertiary,no,448,no,no,cellular,24,mar,136,1,-1,0,unknown,yes +29,entrepreneur,married,secondary,no,714,yes,yes,cellular,13,may,482,2,-1,0,unknown,yes +49,admin.,married,secondary,no,3608,yes,no,cellular,30,apr,252,1,168,1,success,yes +42,management,married,primary,no,5310,yes,no,cellular,25,nov,968,2,97,4,success,yes +68,retired,single,tertiary,no,2144,no,no,cellular,26,jan,708,1,96,3,success,yes +60,management,married,tertiary,no,2281,no,no,cellular,5,feb,230,2,-1,0,unknown,yes +53,management,divorced,tertiary,no,2679,no,no,cellular,20,nov,295,3,-1,0,unknown,yes +62,retired,married,secondary,no,1495,no,no,cellular,2,feb,265,1,-1,0,unknown,yes +33,management,single,tertiary,no,1304,yes,no,cellular,18,may,536,2,-1,0,unknown,yes +36,housemaid,married,primary,no,78,yes,no,telephone,30,jul,2692,9,-1,0,unknown,yes +46,services,married,primary,no,437,yes,no,cellular,13,may,546,3,-1,0,unknown,yes +37,housemaid,married,secondary,no,7433,no,yes,cellular,5,feb,630,3,-1,0,unknown,yes +53,blue-collar,married,secondary,no,6112,no,no,cellular,3,feb,211,1,-1,0,unknown,yes +34,admin.,married,secondary,no,155,no,no,cellular,5,feb,696,2,-1,0,unknown,yes +24,blue-collar,single,secondary,no,9883,no,no,cellular,8,jul,210,5,-1,0,unknown,yes +36,management,married,tertiary,no,495,no,no,cellular,11,sep,91,1,37,5,success,yes +34,technician,married,secondary,no,294,yes,no,cellular,9,dec,265,1,184,3,success,yes +48,blue-collar,single,primary,no,8990,no,no,telephone,2,feb,1790,2,-1,0,unknown,yes +43,self-employed,single,unknown,no,3173,no,no,unknown,15,may,746,1,-1,0,unknown,yes +32,technician,divorced,tertiary,no,53,no,no,cellular,22,aug,671,2,-1,0,unknown,yes +46,blue-collar,married,secondary,no,640,yes,no,cellular,12,mar,215,1,182,4,success,yes +32,blue-collar,single,secondary,no,217,yes,no,cellular,15,may,692,3,-1,0,unknown,yes +45,blue-collar,married,primary,no,804,yes,no,unknown,16,may,528,1,-1,0,unknown,yes +29,unemployed,single,primary,no,1374,no,no,cellular,17,nov,309,3,208,4,success,yes +25,management,single,tertiary,no,3,yes,yes,cellular,16,apr,1034,1,-1,0,unknown,yes +20,student,single,secondary,no,502,no,no,cellular,30,apr,261,1,-1,0,unknown,yes +45,blue-collar,married,secondary,no,61,yes,no,unknown,26,may,745,4,-1,0,unknown,yes +42,admin.,divorced,secondary,no,153,yes,no,unknown,16,may,844,1,-1,0,unknown,yes +29,blue-collar,married,secondary,no,8,yes,yes,cellular,10,jul,627,1,-1,0,unknown,yes +23,self-employed,single,tertiary,no,780,no,no,cellular,16,sep,393,1,183,3,success,yes +37,management,married,tertiary,no,630,no,no,cellular,30,apr,315,1,87,1,success,yes +35,management,married,tertiary,no,2161,no,no,cellular,9,sep,569,3,-1,0,unknown,yes +61,retired,married,tertiary,no,32685,no,no,cellular,2,mar,1447,2,-1,0,unknown,yes +31,management,single,tertiary,no,3384,no,no,cellular,16,sep,153,1,104,2,success,yes +41,management,married,primary,no,5310,yes,no,cellular,17,nov,984,1,-1,0,unknown,yes +34,blue-collar,divorced,secondary,no,383,yes,no,unknown,13,may,2231,1,-1,0,unknown,yes +32,services,single,secondary,no,772,yes,no,unknown,15,may,697,3,-1,0,unknown,yes +32,technician,married,tertiary,no,2976,yes,no,cellular,5,feb,783,1,175,5,failure,yes +34,technician,single,secondary,no,2729,yes,no,cellular,18,nov,835,1,-1,0,unknown,yes +35,blue-collar,married,unknown,no,520,yes,no,cellular,17,apr,476,1,-1,0,unknown,yes +44,admin.,married,secondary,no,205,no,no,cellular,3,nov,289,1,-1,0,unknown,yes +32,services,single,unknown,no,2378,no,no,cellular,17,nov,1132,2,-1,0,unknown,yes +34,admin.,married,secondary,no,48,yes,no,cellular,7,may,1806,2,287,3,other,yes +50,entrepreneur,married,primary,no,461,yes,no,unknown,15,may,651,32,-1,0,unknown,yes +32,technician,single,secondary,no,116,yes,no,cellular,20,aug,718,2,-1,0,unknown,yes +23,blue-collar,married,secondary,no,272,no,no,cellular,14,aug,100,2,-1,0,unknown,yes +32,blue-collar,single,secondary,no,799,no,yes,cellular,23,jul,2078,6,-1,0,unknown,yes +60,housemaid,married,secondary,no,0,no,no,telephone,3,aug,676,2,181,5,failure,yes +44,admin.,single,secondary,no,1534,no,no,cellular,10,nov,95,1,95,3,success,yes +30,admin.,married,secondary,no,4457,yes,no,cellular,21,nov,566,4,-1,0,unknown,yes +37,technician,married,unknown,no,189,no,no,cellular,16,jun,162,2,-1,0,unknown,yes +35,technician,single,tertiary,no,1880,no,no,cellular,20,may,154,1,-1,0,unknown,yes +36,services,divorced,secondary,yes,0,no,yes,cellular,15,jul,687,7,-1,0,unknown,yes +39,management,married,secondary,no,11835,yes,no,cellular,11,aug,744,2,-1,0,unknown,yes +25,technician,married,tertiary,no,839,yes,no,cellular,18,may,700,3,-1,0,unknown,yes +33,management,single,tertiary,no,952,yes,no,cellular,29,apr,1241,5,-1,0,unknown,yes +28,blue-collar,single,secondary,no,-197,yes,no,unknown,9,may,2016,2,-1,0,unknown,yes +31,self-employed,single,tertiary,no,1657,yes,yes,cellular,28,jan,872,1,-1,0,unknown,yes +56,retired,married,primary,no,1947,no,no,cellular,2,mar,225,2,123,5,failure,yes +41,entrepreneur,married,secondary,no,30,no,no,cellular,30,apr,460,1,-1,0,unknown,yes +68,retired,divorced,primary,no,2027,no,no,cellular,14,sep,404,2,91,4,success,yes +61,admin.,married,tertiary,no,1332,no,no,cellular,12,mar,156,1,-1,0,unknown,yes +37,management,single,tertiary,no,72,yes,yes,cellular,20,apr,885,5,150,7,failure,yes +28,student,single,secondary,no,153,no,no,cellular,23,jul,1124,2,-1,0,unknown,yes +46,admin.,married,secondary,no,70,yes,no,cellular,27,mar,229,2,-1,0,unknown,yes +53,services,divorced,secondary,no,36,yes,yes,unknown,2,jul,25,1,417,1,success,yes +32,services,single,secondary,no,-198,yes,no,unknown,21,may,681,3,-1,0,unknown,yes +33,admin.,single,secondary,no,5,yes,no,cellular,15,may,934,2,368,2,failure,yes +57,housemaid,married,tertiary,no,2326,no,no,cellular,17,apr,378,1,-1,0,unknown,yes +41,technician,married,tertiary,no,67,yes,no,cellular,19,nov,814,1,-1,0,unknown,yes +24,technician,single,secondary,no,598,no,no,cellular,12,may,762,1,182,2,success,yes +45,student,single,unknown,no,1527,no,no,cellular,8,mar,132,1,-1,0,unknown,yes +49,management,married,secondary,no,1623,yes,no,cellular,19,nov,1081,2,-1,0,unknown,yes +30,blue-collar,single,primary,no,253,yes,no,cellular,5,may,259,1,-1,0,unknown,yes +26,services,single,secondary,no,1445,no,no,telephone,23,oct,171,1,-1,0,unknown,yes +57,management,married,tertiary,no,256,no,no,cellular,5,jun,304,2,91,1,success,yes +39,blue-collar,married,unknown,no,1181,yes,no,cellular,30,jul,650,2,-1,0,unknown,yes +40,technician,single,tertiary,no,1646,yes,no,cellular,4,may,392,2,91,3,success,yes +52,retired,divorced,tertiary,no,-309,yes,no,unknown,19,jun,500,2,-1,0,unknown,yes +35,technician,single,tertiary,no,670,no,no,cellular,13,apr,278,4,182,2,success,yes +46,admin.,divorced,secondary,no,2196,no,no,cellular,28,jul,573,5,-1,0,unknown,yes +49,services,divorced,secondary,no,947,no,no,unknown,20,jun,808,2,-1,0,unknown,yes +22,student,single,secondary,no,71,no,no,cellular,13,jul,337,1,181,2,success,yes +36,technician,married,tertiary,no,521,no,no,cellular,20,oct,347,3,-1,0,unknown,yes +38,technician,married,secondary,no,5115,yes,no,cellular,27,feb,99,1,102,6,success,yes +40,management,married,tertiary,no,-17,yes,yes,cellular,11,may,474,1,256,1,success,yes +24,technician,married,secondary,no,556,yes,no,cellular,18,aug,460,2,-1,0,unknown,yes +78,retired,divorced,primary,no,229,no,no,telephone,22,oct,97,1,-1,0,unknown,yes +25,technician,single,secondary,no,325,no,no,cellular,22,oct,716,3,-1,0,unknown,yes +63,management,married,tertiary,no,5112,no,no,telephone,13,nov,2184,2,95,3,failure,yes +31,management,single,tertiary,no,11821,no,no,cellular,18,aug,384,11,-1,0,unknown,yes +41,technician,single,secondary,no,650,yes,no,cellular,20,nov,2420,3,-1,0,unknown,yes +50,retired,married,secondary,no,8648,no,no,cellular,12,may,731,3,176,1,failure,yes +27,self-employed,single,tertiary,no,168,no,no,cellular,12,nov,123,1,196,1,success,yes +27,blue-collar,single,secondary,no,2486,yes,no,unknown,29,may,733,1,-1,0,unknown,yes +50,technician,divorced,secondary,no,396,no,no,unknown,20,jun,716,2,-1,0,unknown,yes +44,management,married,tertiary,no,1791,no,no,telephone,12,aug,201,1,182,2,success,yes +26,self-employed,single,tertiary,no,168,no,no,cellular,30,apr,394,1,-1,0,unknown,yes +46,technician,married,unknown,no,3308,no,no,cellular,28,jul,219,2,-1,0,unknown,yes +36,services,married,secondary,no,4721,no,no,cellular,9,jun,150,1,92,5,success,yes +35,management,single,tertiary,no,18111,no,no,cellular,14,aug,172,4,-1,0,unknown,yes +68,retired,married,secondary,no,1146,no,no,cellular,3,mar,153,2,110,3,success,yes +50,admin.,divorced,secondary,no,237,no,yes,telephone,5,nov,169,1,-1,0,unknown,yes +36,services,married,unknown,no,618,no,no,cellular,13,jul,360,1,335,2,success,yes +34,admin.,divorced,secondary,no,1085,no,no,cellular,11,mar,101,7,-1,0,unknown,yes +30,management,single,tertiary,no,1028,no,no,cellular,4,feb,1294,2,-1,0,unknown,yes +22,admin.,single,secondary,no,114,no,no,cellular,30,mar,517,1,-1,0,unknown,yes +59,admin.,married,secondary,no,0,yes,no,cellular,10,jul,982,1,-1,0,unknown,yes +60,blue-collar,married,primary,no,631,no,no,cellular,12,aug,429,2,-1,0,unknown,yes +32,technician,married,secondary,no,660,no,no,cellular,25,oct,226,2,490,1,failure,yes +46,self-employed,married,tertiary,no,2421,no,no,cellular,19,nov,1084,1,100,4,failure,yes +23,student,single,secondary,no,794,no,no,cellular,26,jul,607,3,171,3,other,yes +22,self-employed,single,secondary,no,2138,no,yes,cellular,10,aug,164,1,109,2,other,yes +59,services,married,secondary,no,2965,yes,no,cellular,13,may,1970,3,-1,0,unknown,yes +26,management,single,tertiary,no,222,no,no,cellular,28,jun,247,1,63,2,success,yes +35,management,divorced,tertiary,no,6997,yes,no,cellular,9,jul,1121,1,-1,0,unknown,yes +53,retired,married,secondary,no,665,yes,no,cellular,22,apr,371,2,-1,0,unknown,yes +39,management,married,tertiary,no,285,yes,no,cellular,15,jul,838,3,-1,0,unknown,yes +32,technician,married,secondary,no,473,no,yes,cellular,10,aug,1064,1,95,3,success,yes +41,management,married,tertiary,no,2226,no,no,cellular,7,aug,182,2,99,1,failure,yes +37,admin.,single,secondary,no,245,yes,yes,unknown,7,may,732,2,-1,0,unknown,yes +35,management,married,tertiary,no,1133,yes,no,cellular,3,nov,102,1,-1,0,unknown,yes +42,management,married,tertiary,no,294,no,no,cellular,26,aug,513,1,-1,0,unknown,yes +27,admin.,divorced,secondary,no,451,yes,no,cellular,16,jul,652,1,-1,0,unknown,yes +57,unknown,married,unknown,no,19268,no,no,unknown,23,oct,301,1,-1,0,unknown,yes +41,blue-collar,married,primary,no,1461,yes,no,unknown,6,jun,554,2,-1,0,unknown,yes +37,housemaid,single,secondary,no,465,yes,no,cellular,18,may,899,3,-1,0,unknown,yes +44,unemployed,divorced,tertiary,no,0,no,no,cellular,5,feb,1960,3,-1,0,unknown,yes +32,technician,single,tertiary,no,654,yes,no,cellular,25,may,615,4,-1,0,unknown,yes +34,admin.,married,tertiary,no,79,yes,no,cellular,5,aug,203,1,92,5,success,yes +42,services,married,tertiary,no,4216,no,no,cellular,12,jun,186,2,-1,0,unknown,yes +54,admin.,married,secondary,no,66,yes,no,cellular,11,nov,167,1,-1,0,unknown,yes +48,self-employed,married,tertiary,no,0,no,no,cellular,29,jan,1249,3,-1,0,unknown,yes +73,retired,married,primary,no,5539,no,no,telephone,6,aug,338,1,-1,0,unknown,yes +33,management,married,tertiary,no,2599,no,no,cellular,30,apr,1373,2,-1,0,unknown,yes +42,management,married,tertiary,no,2187,yes,no,cellular,17,nov,525,3,-1,0,unknown,yes +57,admin.,married,secondary,no,2120,no,no,cellular,19,aug,687,4,-1,0,unknown,yes +29,services,single,primary,no,339,no,no,unknown,4,jul,1576,3,-1,0,unknown,yes +47,blue-collar,married,secondary,no,8229,no,no,cellular,8,aug,784,2,-1,0,unknown,yes +51,management,married,tertiary,no,346,no,no,cellular,12,feb,122,1,92,5,success,yes +34,management,married,tertiary,no,158,no,no,cellular,9,jun,190,1,92,9,success,yes +25,technician,single,secondary,no,7103,yes,no,cellular,28,may,188,3,10,1,failure,yes +50,admin.,married,secondary,no,4855,no,no,cellular,5,aug,720,2,-1,0,unknown,yes +47,admin.,single,secondary,no,3696,no,no,cellular,12,jul,250,2,181,4,success,yes +40,technician,married,secondary,no,-357,yes,no,cellular,16,jul,700,4,-1,0,unknown,yes +79,retired,married,secondary,no,8304,no,no,telephone,9,mar,303,9,-1,0,unknown,yes +30,student,single,secondary,no,48,no,no,cellular,25,feb,217,1,191,2,success,yes +54,self-employed,single,tertiary,no,384,no,yes,cellular,27,may,200,1,-1,0,unknown,yes +53,blue-collar,married,primary,no,751,yes,no,cellular,3,feb,1528,2,-1,0,unknown,yes +33,blue-collar,divorced,secondary,no,3546,yes,no,unknown,23,may,777,2,-1,0,unknown,yes +60,management,married,tertiary,no,73,no,no,telephone,8,aug,243,2,-1,0,unknown,yes +35,self-employed,single,tertiary,no,71,no,no,cellular,15,jun,651,1,-1,0,unknown,yes +46,admin.,married,secondary,no,974,no,no,cellular,5,jun,174,2,80,1,success,yes +52,services,married,primary,no,306,yes,no,cellular,13,may,650,5,-1,0,unknown,yes +50,management,married,tertiary,no,3463,no,yes,cellular,28,oct,96,1,-1,0,unknown,yes +47,admin.,married,secondary,no,3676,no,no,cellular,15,jul,415,2,342,1,other,yes +73,retired,married,tertiary,no,459,no,no,cellular,17,feb,281,1,-1,0,unknown,yes +35,admin.,married,tertiary,no,286,no,no,cellular,30,apr,949,2,-1,0,unknown,yes +26,blue-collar,married,secondary,no,-11,yes,yes,cellular,17,jul,1150,3,-1,0,unknown,yes +46,management,married,tertiary,no,273,yes,no,cellular,15,sep,1962,1,105,3,failure,yes +42,management,married,tertiary,no,2665,yes,no,cellular,4,jun,280,2,126,11,failure,yes +29,self-employed,single,tertiary,no,3290,no,no,cellular,12,may,430,1,50,3,success,yes +30,management,single,tertiary,no,8535,no,no,cellular,18,jun,393,2,-1,0,unknown,yes +37,management,married,tertiary,no,1276,no,no,cellular,16,nov,146,1,94,2,success,yes +28,admin.,single,unknown,no,2736,no,no,cellular,8,jul,705,1,-1,0,unknown,yes +32,blue-collar,married,secondary,no,10287,yes,no,cellular,27,may,281,4,188,1,failure,yes +53,management,married,tertiary,no,1624,no,no,cellular,6,aug,107,1,98,6,success,yes +41,self-employed,married,secondary,yes,0,yes,no,cellular,17,nov,789,1,-1,0,unknown,yes +40,services,married,secondary,no,446,yes,no,unknown,16,may,1252,1,-1,0,unknown,yes +53,technician,married,tertiary,no,395,no,no,cellular,29,oct,136,1,148,1,failure,yes +64,retired,divorced,primary,no,315,no,no,cellular,17,feb,154,1,-1,0,unknown,yes +32,technician,married,secondary,no,484,yes,no,cellular,12,aug,668,2,463,1,success,yes +48,technician,married,secondary,yes,0,no,no,unknown,30,may,682,1,-1,0,unknown,yes +35,admin.,single,secondary,no,507,yes,no,cellular,22,jul,560,2,-1,0,unknown,yes +43,management,married,tertiary,no,2987,no,no,cellular,4,jun,156,1,85,3,failure,yes +25,services,single,secondary,no,801,no,no,cellular,5,jun,255,2,-1,0,unknown,yes +43,management,married,tertiary,no,0,no,no,cellular,14,jul,1153,3,-1,0,unknown,yes +29,management,single,tertiary,no,572,yes,no,telephone,8,nov,319,1,-1,0,unknown,yes +61,management,single,tertiary,no,2,no,no,cellular,12,aug,131,1,114,3,failure,yes +64,retired,married,unknown,no,34,no,no,cellular,26,aug,244,2,-1,0,unknown,yes +27,technician,single,tertiary,no,1075,no,no,cellular,2,sep,529,2,184,1,success,yes +38,technician,single,tertiary,no,508,yes,yes,cellular,12,aug,1103,2,-1,0,unknown,yes +36,management,married,tertiary,no,926,no,no,cellular,14,apr,216,1,-1,0,unknown,yes +61,self-employed,married,tertiary,no,10861,no,no,cellular,25,oct,225,1,91,5,success,yes +49,blue-collar,divorced,primary,no,24,yes,no,cellular,11,may,701,1,362,1,success,yes +33,blue-collar,single,primary,no,611,no,no,telephone,16,sep,390,2,-1,0,unknown,yes +25,blue-collar,single,secondary,no,1857,yes,no,cellular,12,oct,187,1,91,12,success,yes +33,blue-collar,single,secondary,no,329,no,no,cellular,6,sep,224,1,145,2,other,yes +51,management,married,tertiary,no,2635,no,no,cellular,21,may,407,3,74,5,failure,yes +32,blue-collar,married,secondary,no,225,yes,no,cellular,17,apr,574,1,150,1,failure,yes +32,admin.,married,secondary,no,1604,no,yes,cellular,7,jul,625,1,-1,0,unknown,yes +72,retired,married,primary,no,4657,no,no,telephone,23,mar,255,1,91,8,success,yes +34,admin.,married,secondary,no,1406,yes,no,cellular,20,aug,63,2,85,1,success,yes +38,technician,married,secondary,no,6728,no,no,cellular,25,nov,232,1,96,4,success,yes +35,management,married,tertiary,no,611,no,no,cellular,1,oct,305,2,121,1,success,yes +38,technician,divorced,tertiary,no,1805,no,no,unknown,9,jun,952,2,-1,0,unknown,yes +43,blue-collar,single,primary,no,-399,no,yes,cellular,28,jul,662,3,-1,0,unknown,yes +31,technician,single,tertiary,no,208,no,no,cellular,12,aug,1344,7,-1,0,unknown,yes +30,management,married,tertiary,no,10884,no,no,cellular,4,may,333,2,-1,0,unknown,yes +22,student,single,primary,no,3472,no,no,cellular,20,oct,332,1,183,3,failure,yes +46,admin.,married,secondary,no,556,yes,yes,unknown,15,may,646,3,-1,0,unknown,yes +52,management,married,tertiary,no,7192,no,no,cellular,4,aug,1486,1,-1,0,unknown,yes +35,technician,single,tertiary,no,13460,yes,no,cellular,15,may,1068,3,-1,0,unknown,yes +71,retired,married,primary,no,2988,no,no,telephone,17,apr,130,1,-1,0,unknown,yes +30,management,single,tertiary,no,102,yes,no,cellular,18,dec,364,3,-1,0,unknown,yes +25,student,single,secondary,no,1868,no,no,cellular,26,oct,259,1,103,2,other,yes +34,management,single,tertiary,no,-578,yes,no,cellular,18,may,767,2,-1,0,unknown,yes +51,admin.,married,secondary,no,241,no,no,cellular,7,dec,308,2,-1,0,unknown,yes +25,services,single,secondary,no,162,yes,no,cellular,1,sep,531,2,-1,0,unknown,yes +48,management,married,tertiary,no,5320,yes,no,unknown,20,jun,792,1,-1,0,unknown,yes +42,blue-collar,married,secondary,no,366,yes,no,cellular,22,may,324,1,106,1,failure,yes +55,management,married,unknown,no,1504,yes,no,cellular,22,may,338,2,-1,0,unknown,yes +38,admin.,single,secondary,no,262,no,no,cellular,3,feb,315,2,180,6,failure,yes +26,blue-collar,single,secondary,no,191,yes,no,cellular,6,may,550,1,-1,0,unknown,yes +27,admin.,married,tertiary,no,73,no,no,cellular,10,feb,159,1,-1,0,unknown,yes +75,retired,married,primary,no,358,no,no,cellular,17,feb,364,11,-1,0,unknown,yes +32,technician,single,secondary,no,483,no,no,cellular,8,aug,580,3,-1,0,unknown,yes +39,management,single,tertiary,no,5047,no,no,cellular,29,apr,218,4,-1,0,unknown,yes +46,technician,single,secondary,no,5862,no,no,cellular,1,jun,84,1,-1,0,unknown,yes +40,management,married,tertiary,no,0,yes,no,cellular,25,mar,506,2,-1,0,unknown,yes +36,blue-collar,divorced,secondary,no,2843,no,no,cellular,14,aug,186,1,-1,0,unknown,yes +54,self-employed,divorced,primary,no,351,yes,no,unknown,6,jun,642,2,-1,0,unknown,yes +42,management,married,tertiary,no,372,yes,no,cellular,4,aug,153,3,1,2,success,yes +42,management,married,tertiary,no,27696,no,no,cellular,12,may,176,2,89,5,success,yes +37,blue-collar,single,secondary,no,133,yes,no,cellular,11,may,1388,2,-1,0,unknown,yes +25,student,single,unknown,no,3,no,no,cellular,26,may,170,1,-1,0,unknown,yes +29,management,single,tertiary,no,15459,no,no,cellular,18,feb,264,7,-1,0,unknown,yes +32,management,single,tertiary,no,2551,yes,no,cellular,21,jul,638,3,-1,0,unknown,yes +64,retired,married,secondary,no,571,yes,no,cellular,20,apr,1422,2,-1,0,unknown,yes +55,management,married,tertiary,no,7803,no,no,cellular,15,jan,441,1,-1,0,unknown,yes +56,management,married,primary,no,0,no,no,cellular,3,feb,996,1,-1,0,unknown,yes +28,admin.,single,unknown,no,24,yes,no,cellular,18,jul,415,2,-1,0,unknown,yes +52,management,divorced,tertiary,no,2104,no,no,cellular,3,jun,210,2,-1,0,unknown,yes +36,technician,divorced,secondary,no,3158,yes,no,cellular,3,jun,144,2,-1,0,unknown,yes +25,student,married,tertiary,no,10,yes,no,cellular,21,jul,857,4,-1,0,unknown,yes +66,self-employed,married,tertiary,no,147,no,no,telephone,12,jan,411,1,-1,0,unknown,yes +31,management,single,tertiary,no,12857,yes,no,telephone,4,may,483,4,87,2,success,yes +43,technician,divorced,unknown,no,4389,no,no,telephone,2,jul,632,2,85,1,success,yes +59,management,married,tertiary,no,474,no,no,cellular,21,aug,252,1,-1,0,unknown,yes +35,management,married,unknown,no,2326,yes,yes,cellular,16,sep,319,1,-1,0,unknown,yes +48,admin.,married,primary,no,3644,yes,yes,telephone,31,jul,1039,9,-1,0,unknown,yes +38,admin.,married,tertiary,no,1988,no,no,cellular,27,mar,164,2,130,2,failure,yes +27,admin.,married,secondary,no,1595,no,no,cellular,29,dec,196,2,197,2,success,yes +25,student,single,secondary,no,331,no,no,telephone,26,aug,170,4,-1,0,unknown,yes +56,management,married,unknown,no,4623,no,no,cellular,25,feb,305,1,192,1,success,yes +54,management,divorced,tertiary,no,12018,yes,no,cellular,21,dec,267,2,-1,0,unknown,yes +36,unemployed,married,tertiary,no,154,no,no,cellular,26,aug,556,7,-1,0,unknown,yes +31,admin.,single,secondary,no,190,no,no,cellular,30,apr,514,1,-1,0,unknown,yes +62,entrepreneur,married,secondary,no,3904,no,no,telephone,29,jan,403,2,-1,0,unknown,yes +31,technician,single,tertiary,no,882,no,no,cellular,4,sep,293,1,93,1,success,yes +66,retired,divorced,unknown,no,53,no,no,cellular,12,jul,562,4,-1,0,unknown,yes +32,management,single,tertiary,no,6542,yes,no,cellular,15,may,1598,4,175,5,failure,yes +40,services,divorced,secondary,no,687,yes,no,cellular,2,feb,531,1,208,1,success,yes +43,blue-collar,married,primary,no,3064,yes,no,cellular,20,nov,2453,2,-1,0,unknown,yes +51,housemaid,divorced,secondary,no,9228,no,no,cellular,18,jul,655,4,-1,0,unknown,yes +34,blue-collar,married,secondary,no,800,no,no,cellular,5,apr,144,1,-1,0,unknown,yes +47,management,married,tertiary,no,3505,no,no,cellular,17,nov,434,2,-1,0,unknown,yes +36,management,single,tertiary,no,5958,yes,no,cellular,22,sep,155,1,184,1,success,yes +27,technician,single,tertiary,no,667,no,no,cellular,29,jan,866,2,-1,0,unknown,yes +52,services,divorced,secondary,no,36,yes,yes,cellular,11,may,930,1,-1,0,unknown,yes +44,housemaid,single,primary,no,1059,no,no,unknown,18,jun,2093,1,-1,0,unknown,yes +26,technician,married,secondary,no,915,no,no,cellular,2,jun,384,1,-1,0,unknown,yes +32,technician,married,secondary,no,1547,no,no,cellular,26,oct,289,1,805,4,other,yes +34,management,married,tertiary,no,3050,yes,no,cellular,13,may,469,1,-1,0,unknown,yes +35,technician,married,tertiary,no,7050,no,no,cellular,11,aug,222,3,182,4,success,yes +32,management,single,tertiary,no,2,yes,no,cellular,11,sep,100,2,-1,0,unknown,yes +43,self-employed,married,secondary,no,14144,yes,no,cellular,21,nov,504,1,-1,0,unknown,yes +50,unemployed,married,primary,no,705,no,no,unknown,5,jun,504,1,-1,0,unknown,yes +40,blue-collar,married,primary,no,1758,yes,no,unknown,16,may,1230,3,-1,0,unknown,yes +29,self-employed,single,tertiary,no,476,yes,no,cellular,18,may,427,1,-1,0,unknown,yes +32,technician,married,secondary,no,348,yes,no,cellular,17,jul,926,1,-1,0,unknown,yes +50,management,married,tertiary,no,5969,no,no,cellular,25,jan,455,1,544,2,failure,yes +65,unemployed,married,secondary,no,3195,no,no,telephone,2,mar,904,1,-1,0,unknown,yes +59,self-employed,married,tertiary,no,2013,no,no,cellular,17,nov,409,2,-1,0,unknown,yes +44,entrepreneur,married,tertiary,no,121,no,no,cellular,10,aug,412,1,-1,0,unknown,yes +33,admin.,married,secondary,no,82,yes,no,cellular,25,jul,735,1,-1,0,unknown,yes +33,management,single,tertiary,no,935,no,no,cellular,9,feb,385,2,92,8,success,yes +57,unemployed,married,secondary,no,3754,no,no,cellular,5,feb,1063,2,-1,0,unknown,yes +38,management,single,tertiary,no,104,yes,no,cellular,6,may,606,3,-1,0,unknown,yes +49,management,married,tertiary,no,4751,no,no,cellular,12,aug,884,4,-1,0,unknown,yes +45,blue-collar,married,unknown,no,1529,yes,no,cellular,13,nov,181,1,197,1,success,yes +25,technician,single,secondary,no,102,no,yes,cellular,8,jul,574,2,-1,0,unknown,yes +22,housemaid,single,secondary,no,1796,no,no,cellular,28,jun,369,3,-1,0,unknown,yes +32,management,single,tertiary,no,935,no,no,cellular,10,aug,161,2,375,5,failure,yes +36,services,single,secondary,no,365,no,no,cellular,4,may,643,1,-1,0,unknown,yes +32,management,divorced,tertiary,no,222,no,yes,cellular,15,jul,820,4,-1,0,unknown,yes +45,blue-collar,single,secondary,no,0,no,no,cellular,5,aug,374,2,472,1,success,yes +35,housemaid,single,secondary,no,1015,yes,no,unknown,5,jun,406,2,-1,0,unknown,yes +23,student,single,secondary,no,107,no,no,cellular,14,oct,84,1,183,1,success,yes +50,blue-collar,married,primary,no,82,no,no,telephone,5,apr,456,1,-1,0,unknown,yes +31,management,married,tertiary,no,877,no,no,cellular,9,jun,192,1,93,7,other,yes +61,retired,married,tertiary,no,2557,yes,no,cellular,10,nov,89,1,91,4,success,yes +42,blue-collar,married,primary,no,1673,yes,no,cellular,17,apr,636,3,-1,0,unknown,yes +39,blue-collar,married,secondary,no,2467,no,no,cellular,19,jul,207,2,276,3,other,yes +37,technician,single,secondary,no,980,no,no,cellular,8,aug,1306,5,-1,0,unknown,yes +30,blue-collar,single,secondary,no,183,yes,no,cellular,18,jul,610,1,-1,0,unknown,yes +55,unemployed,divorced,secondary,no,387,yes,no,unknown,6,may,918,1,-1,0,unknown,yes +30,services,divorced,primary,no,459,yes,no,cellular,18,jul,494,1,-1,0,unknown,yes +57,management,married,tertiary,no,1227,no,no,cellular,5,jun,232,1,-1,0,unknown,yes +31,unemployed,single,tertiary,no,302,no,no,cellular,3,feb,349,1,357,3,success,yes +37,entrepreneur,divorced,secondary,no,175,yes,yes,unknown,13,may,753,6,-1,0,unknown,yes +34,blue-collar,married,secondary,no,182,no,no,cellular,6,aug,938,2,-1,0,unknown,yes +31,technician,married,secondary,yes,-367,yes,no,cellular,18,jul,474,2,-1,0,unknown,yes +52,technician,married,tertiary,no,876,no,no,cellular,4,may,601,3,-1,0,unknown,yes +48,unemployed,divorced,secondary,no,201,no,no,cellular,10,nov,594,1,91,1,success,yes +73,retired,married,primary,no,796,no,no,cellular,23,oct,427,1,182,2,failure,yes +54,retired,divorced,tertiary,no,0,no,no,unknown,13,may,618,1,-1,0,unknown,yes +38,admin.,married,secondary,no,1559,no,no,cellular,3,mar,136,2,280,1,failure,yes +39,blue-collar,married,primary,no,70,no,no,unknown,8,may,813,1,-1,0,unknown,yes +44,self-employed,single,tertiary,no,2734,yes,no,cellular,12,may,897,4,-1,0,unknown,yes +29,admin.,single,secondary,no,3528,no,no,cellular,8,oct,137,1,-1,0,unknown,yes +51,management,married,tertiary,no,469,no,no,cellular,15,apr,200,1,181,2,success,yes +31,blue-collar,married,secondary,no,3311,yes,no,unknown,20,may,719,1,-1,0,unknown,yes +33,services,single,secondary,no,152,yes,no,cellular,25,may,202,2,365,2,success,yes +39,self-employed,married,tertiary,no,1047,no,no,unknown,6,jun,554,1,-1,0,unknown,yes +30,technician,married,secondary,no,484,yes,no,unknown,6,may,703,1,-1,0,unknown,yes +39,technician,married,secondary,no,1587,yes,no,cellular,8,sep,108,2,98,3,success,yes +25,management,married,tertiary,no,4461,no,no,cellular,11,mar,796,5,-1,0,unknown,yes +57,admin.,single,secondary,no,3551,yes,no,cellular,12,may,458,1,-1,0,unknown,yes +35,management,married,tertiary,no,495,no,no,cellular,30,apr,266,1,87,1,failure,yes +27,blue-collar,single,secondary,no,3792,no,no,cellular,22,apr,279,2,-1,0,unknown,yes +27,technician,single,secondary,no,489,yes,no,cellular,30,jul,356,4,-1,0,unknown,yes +28,self-employed,single,tertiary,no,159,no,no,cellular,16,nov,449,2,33,4,success,yes +41,admin.,single,secondary,no,985,yes,no,cellular,30,jun,274,2,391,11,success,yes +46,blue-collar,married,primary,no,369,yes,no,unknown,13,may,916,2,-1,0,unknown,yes +38,management,divorced,secondary,no,257,yes,no,cellular,30,apr,435,1,-1,0,unknown,yes +35,technician,married,secondary,no,2779,no,no,cellular,22,oct,118,2,-1,0,unknown,yes +24,services,single,secondary,no,638,yes,yes,cellular,7,may,792,3,-1,0,unknown,yes +24,blue-collar,single,secondary,no,833,yes,no,cellular,15,may,956,1,-1,0,unknown,yes +28,management,single,tertiary,no,9314,no,no,cellular,2,jul,276,2,-1,0,unknown,yes +28,admin.,single,secondary,no,4745,no,no,telephone,12,may,360,1,181,5,success,yes +53,management,married,secondary,no,2693,no,no,cellular,5,mar,90,1,104,1,failure,yes +45,management,married,tertiary,no,160,no,no,cellular,10,nov,182,2,194,1,success,yes +33,services,married,secondary,no,1697,no,no,cellular,3,nov,179,1,-1,0,unknown,yes +51,management,married,tertiary,no,0,no,no,unknown,7,jun,302,1,-1,0,unknown,yes +32,technician,single,tertiary,no,-770,yes,no,cellular,18,may,618,1,-1,0,unknown,yes +65,retired,married,secondary,no,20806,no,no,telephone,8,apr,523,2,-1,0,unknown,yes +32,blue-collar,married,primary,no,3136,yes,no,cellular,19,nov,820,1,-1,0,unknown,yes +67,retired,married,primary,no,1430,no,no,cellular,11,jan,499,2,91,3,failure,yes +53,technician,married,secondary,no,6831,no,no,cellular,13,may,1130,2,-1,0,unknown,yes +41,blue-collar,divorced,primary,no,664,no,yes,cellular,15,jul,955,5,-1,0,unknown,yes +30,blue-collar,single,secondary,no,49,no,no,cellular,30,jan,808,2,-1,0,unknown,yes +37,blue-collar,married,secondary,no,604,yes,no,cellular,7,oct,371,1,495,1,failure,yes +27,technician,single,tertiary,no,931,yes,no,cellular,4,feb,1078,1,-1,0,unknown,yes +77,retired,married,tertiary,no,699,no,no,cellular,13,aug,425,2,-1,0,unknown,yes +32,admin.,single,secondary,no,212,no,no,cellular,7,jul,830,5,-1,0,unknown,yes +25,management,single,tertiary,no,362,no,no,cellular,3,jun,617,2,-1,0,unknown,yes +32,management,single,tertiary,no,2667,yes,no,cellular,12,aug,971,2,-1,0,unknown,yes +43,technician,married,secondary,no,-754,yes,yes,cellular,9,jul,727,3,-1,0,unknown,yes +30,services,married,secondary,no,517,no,no,cellular,11,dec,141,2,-1,0,unknown,yes +59,management,divorced,tertiary,no,258,yes,no,telephone,29,oct,266,1,-1,0,unknown,yes +61,retired,married,tertiary,no,3140,yes,yes,cellular,6,aug,975,4,98,1,unknown,yes +32,self-employed,single,tertiary,no,658,yes,no,cellular,27,mar,283,1,-1,0,unknown,yes +37,management,married,tertiary,no,255,no,no,cellular,24,feb,562,2,183,10,success,yes +51,self-employed,married,tertiary,no,5350,yes,yes,cellular,31,jul,612,4,-1,0,unknown,yes +55,management,divorced,tertiary,no,9756,yes,no,cellular,5,jun,103,2,95,1,other,yes +38,management,single,tertiary,no,3646,yes,no,cellular,12,may,1710,2,286,1,other,yes +47,admin.,married,secondary,no,368,no,no,cellular,21,may,403,1,87,6,success,yes +59,services,divorced,secondary,no,1,yes,no,cellular,28,jan,602,1,253,5,other,yes +51,retired,married,secondary,no,1435,no,no,unknown,11,jun,587,1,-1,0,unknown,yes +25,admin.,single,secondary,no,122,yes,no,cellular,7,may,481,2,-1,0,unknown,yes +67,retired,divorced,primary,no,2027,no,no,cellular,15,mar,161,2,-1,0,unknown,yes +58,entrepreneur,married,secondary,no,496,no,no,cellular,22,apr,132,1,-1,0,unknown,yes +52,management,single,tertiary,no,83,no,no,cellular,26,aug,1223,6,-1,0,unknown,yes +54,technician,single,tertiary,no,467,yes,no,cellular,18,jul,674,3,-1,0,unknown,yes +27,technician,single,secondary,yes,0,no,yes,cellular,8,jul,732,1,-1,0,unknown,yes +41,services,married,secondary,no,471,yes,no,cellular,13,may,954,2,293,4,success,yes +72,retired,married,secondary,no,5715,no,no,cellular,17,may,1114,1,181,2,success,yes +24,blue-collar,married,secondary,no,-389,yes,yes,unknown,4,jun,1242,1,-1,0,unknown,yes +36,admin.,single,tertiary,no,364,no,yes,cellular,31,aug,185,1,123,1,failure,yes +39,services,married,secondary,no,25,yes,yes,cellular,12,may,658,1,351,3,failure,yes +55,technician,divorced,secondary,no,3450,no,no,cellular,10,feb,169,1,183,1,failure,yes +35,admin.,married,secondary,no,2374,yes,no,cellular,11,aug,765,2,183,5,success,yes +32,technician,single,tertiary,no,5514,no,no,cellular,22,apr,319,1,182,1,success,yes +29,blue-collar,single,tertiary,no,455,no,no,telephone,27,may,214,2,36,1,success,yes +59,services,single,secondary,no,739,no,no,cellular,14,jan,408,1,-1,0,unknown,yes +33,management,married,secondary,no,336,no,no,cellular,15,apr,179,3,-1,0,unknown,yes +30,services,divorced,secondary,no,436,yes,no,cellular,17,jun,1720,1,-1,0,unknown,yes +30,management,single,tertiary,no,536,no,no,cellular,2,jul,309,1,-1,0,unknown,yes +37,management,married,tertiary,no,0,no,no,cellular,16,jul,268,2,182,3,success,yes +39,management,single,tertiary,no,0,yes,no,cellular,18,feb,224,3,-1,0,unknown,yes +40,blue-collar,married,unknown,no,1181,yes,no,cellular,4,feb,718,2,189,2,success,yes +29,management,single,tertiary,no,265,no,no,cellular,22,may,491,1,-1,0,unknown,yes +24,unemployed,single,secondary,no,2573,no,no,cellular,24,may,375,2,-1,0,unknown,yes +31,blue-collar,married,primary,no,-537,yes,yes,cellular,21,jul,1039,7,-1,0,unknown,yes +62,management,married,secondary,no,1128,no,no,cellular,2,sep,236,1,290,3,other,yes +33,admin.,married,unknown,no,2780,no,no,cellular,19,nov,485,1,-1,0,unknown,yes +67,management,married,tertiary,no,405,no,no,cellular,10,nov,344,2,95,2,success,yes +44,self-employed,married,secondary,no,706,no,no,unknown,5,nov,204,1,-1,0,unknown,yes +79,retired,married,secondary,no,2661,no,no,cellular,10,nov,254,5,-1,0,unknown,yes +30,technician,single,secondary,no,2734,no,no,cellular,21,nov,459,3,-1,0,unknown,yes +38,housemaid,married,primary,no,196,no,no,cellular,30,apr,574,1,-1,0,unknown,yes +31,management,single,tertiary,no,533,no,no,telephone,12,may,372,1,90,10,success,yes +38,technician,married,secondary,no,6728,no,no,cellular,21,aug,252,4,-1,0,unknown,yes +36,services,single,secondary,no,1227,yes,yes,cellular,4,may,775,5,341,3,failure,yes +30,blue-collar,married,secondary,no,5,no,no,cellular,17,apr,840,3,-1,0,unknown,yes +34,technician,married,tertiary,no,197,no,no,cellular,20,aug,78,3,-1,0,unknown,yes +27,management,single,primary,yes,13,no,no,cellular,30,jan,475,3,-1,0,unknown,yes +32,admin.,married,tertiary,no,284,yes,no,cellular,29,apr,717,3,-1,0,unknown,yes +37,management,single,tertiary,no,33,yes,no,cellular,12,mar,186,1,-1,0,unknown,yes +56,management,married,tertiary,no,2333,no,no,cellular,4,may,244,1,-1,0,unknown,yes +28,blue-collar,single,secondary,no,1705,no,no,cellular,17,dec,412,2,-1,0,unknown,yes +49,blue-collar,married,secondary,no,2039,yes,no,cellular,6,may,451,1,169,2,failure,yes +23,student,single,secondary,no,381,no,no,cellular,23,feb,696,1,189,2,other,yes +56,retired,married,secondary,no,3738,yes,no,cellular,17,apr,156,1,305,6,other,yes +54,blue-collar,divorced,primary,no,4401,no,no,telephone,13,may,414,1,183,2,success,yes +59,management,married,tertiary,no,553,yes,no,cellular,7,jul,1272,3,-1,0,unknown,yes +53,technician,married,secondary,no,-725,yes,no,unknown,27,may,1205,1,-1,0,unknown,yes +51,retired,married,primary,no,67,no,no,unknown,18,jun,835,1,-1,0,unknown,yes +31,unemployed,married,tertiary,no,330,no,no,cellular,13,jul,309,1,181,3,success,yes +62,management,divorced,tertiary,no,5943,no,no,telephone,17,feb,196,4,-1,0,unknown,yes +38,technician,single,tertiary,no,25,yes,no,cellular,1,jun,232,2,-1,0,unknown,yes +25,management,single,tertiary,no,316,no,no,cellular,27,mar,347,2,-1,0,unknown,yes +43,technician,divorced,unknown,no,4389,no,no,cellular,8,apr,618,1,-1,0,unknown,yes +45,admin.,divorced,secondary,no,0,no,no,cellular,29,oct,264,1,-1,0,unknown,yes +78,retired,divorced,primary,no,1389,no,no,cellular,8,apr,335,1,-1,0,unknown,yes +30,management,single,tertiary,no,398,no,no,cellular,27,oct,102,1,180,3,success,yes +69,retired,divorced,tertiary,no,247,no,no,cellular,22,apr,138,2,-1,0,unknown,yes +48,entrepreneur,married,secondary,no,0,no,yes,cellular,28,jul,431,2,-1,0,unknown,yes +31,admin.,single,secondary,no,131,yes,no,cellular,15,jun,151,1,-1,0,unknown,yes +57,retired,single,primary,no,604,no,no,cellular,19,nov,187,1,-1,0,unknown,no +45,admin.,divorced,secondary,no,0,yes,no,cellular,17,nov,102,1,-1,0,unknown,no +48,blue-collar,married,secondary,no,238,yes,yes,cellular,2,jun,118,2,81,1,success,no +34,admin.,single,secondary,no,673,yes,no,cellular,29,jan,89,1,260,2,failure,no +37,entrepreneur,married,tertiary,no,7944,no,no,cellular,21,nov,102,1,-1,0,unknown,no +32,management,married,tertiary,no,3696,no,no,unknown,21,may,315,3,-1,0,unknown,no +35,self-employed,married,secondary,no,347,no,no,unknown,20,jun,231,1,-1,0,unknown,no +31,blue-collar,married,primary,no,-199,yes,yes,telephone,12,may,149,5,299,10,failure,no +54,technician,married,tertiary,yes,337,yes,no,unknown,28,may,302,2,-1,0,unknown,no +52,unemployed,married,secondary,no,5091,no,no,cellular,26,may,309,1,-1,0,unknown,no +29,self-employed,single,secondary,no,970,yes,no,cellular,13,may,240,1,-1,0,unknown,no +34,services,single,secondary,no,258,yes,no,unknown,4,jun,131,2,-1,0,unknown,no +37,blue-collar,divorced,secondary,no,614,yes,no,unknown,20,may,185,1,-1,0,unknown,no +66,housemaid,married,secondary,no,1929,no,no,cellular,2,feb,169,1,-1,0,unknown,no +33,technician,married,secondary,no,2362,yes,no,cellular,26,aug,271,4,-1,0,unknown,no +60,retired,married,secondary,no,8121,yes,yes,cellular,18,aug,98,7,-1,0,unknown,no +55,management,divorced,tertiary,no,608,yes,no,cellular,7,may,161,2,-1,0,unknown,no +34,blue-collar,single,secondary,no,3723,yes,no,unknown,27,may,47,5,-1,0,unknown,no +52,blue-collar,married,primary,no,117,no,yes,cellular,24,jul,164,2,-1,0,unknown,no +29,services,married,secondary,no,363,yes,no,cellular,15,may,164,1,-1,0,unknown,no +43,services,divorced,secondary,no,130,yes,no,unknown,8,may,193,1,-1,0,unknown,no +57,services,divorced,primary,no,2225,yes,no,cellular,18,may,8,4,-1,0,unknown,no +32,blue-collar,married,primary,no,-105,yes,yes,telephone,31,jul,454,19,-1,0,unknown,no +67,unknown,married,tertiary,no,7687,no,no,telephone,30,oct,70,3,-1,0,unknown,no +45,services,married,secondary,no,222,no,no,cellular,25,aug,119,11,-1,0,unknown,no +47,technician,single,secondary,no,736,no,no,cellular,29,jul,212,2,-1,0,unknown,no +31,self-employed,single,tertiary,no,84,no,no,cellular,6,aug,157,4,-1,0,unknown,no +52,blue-collar,divorced,primary,no,196,yes,no,unknown,7,may,119,3,-1,0,unknown,no +41,technician,married,secondary,no,2123,no,no,cellular,8,aug,130,2,-1,0,unknown,no +35,blue-collar,single,secondary,no,-482,yes,no,unknown,27,may,472,1,-1,0,unknown,no +48,management,divorced,tertiary,no,700,yes,no,cellular,29,aug,488,2,-1,0,unknown,no +53,blue-collar,married,primary,no,1388,no,no,cellular,7,aug,139,4,-1,0,unknown,no +59,entrepreneur,married,primary,no,222,no,no,cellular,18,nov,97,1,-1,0,unknown,no +26,blue-collar,single,secondary,no,592,yes,yes,unknown,27,may,174,1,-1,0,unknown,no +30,management,married,tertiary,no,0,no,no,cellular,14,aug,95,2,-1,0,unknown,no +56,self-employed,married,tertiary,no,411,no,no,unknown,19,jun,145,4,-1,0,unknown,no +41,blue-collar,divorced,secondary,no,-104,yes,no,unknown,16,may,32,3,-1,0,unknown,no +52,technician,married,secondary,no,475,yes,no,cellular,28,jul,121,3,-1,0,unknown,no +35,admin.,single,secondary,no,181,yes,no,cellular,18,may,217,4,301,1,failure,no +41,management,married,tertiary,no,653,yes,no,telephone,17,nov,60,2,-1,0,unknown,no +39,management,married,tertiary,no,0,yes,no,unknown,2,jun,46,2,-1,0,unknown,no +51,management,married,tertiary,no,0,yes,yes,cellular,19,aug,263,1,84,1,other,no +46,blue-collar,married,secondary,no,942,no,no,cellular,18,nov,240,3,119,2,failure,no +43,technician,divorced,primary,no,13,no,yes,cellular,9,jul,977,4,-1,0,unknown,no +31,technician,single,secondary,no,200,no,no,cellular,6,aug,315,2,-1,0,unknown,no +56,unemployed,married,secondary,no,660,yes,no,unknown,6,jun,72,3,-1,0,unknown,no +35,entrepreneur,married,secondary,no,1309,yes,no,cellular,18,nov,73,3,-1,0,unknown,no +58,self-employed,married,tertiary,no,-364,yes,no,unknown,5,may,355,1,-1,0,unknown,no +33,technician,married,secondary,no,-616,yes,yes,unknown,27,may,320,1,-1,0,unknown,no +36,blue-collar,single,secondary,no,2596,no,no,unknown,18,jun,60,6,-1,0,unknown,no +49,entrepreneur,single,secondary,no,5802,no,no,cellular,12,aug,175,3,104,2,success,no +47,technician,married,secondary,no,568,yes,no,telephone,14,jul,256,2,-1,0,unknown,no +61,retired,married,primary,no,296,yes,yes,unknown,3,jun,323,2,-1,0,unknown,no +45,services,married,secondary,no,561,yes,no,unknown,29,may,340,7,-1,0,unknown,no +53,management,divorced,tertiary,no,2894,yes,no,cellular,5,may,163,1,-1,0,unknown,no +31,management,married,tertiary,no,2344,yes,no,cellular,14,aug,221,6,-1,0,unknown,no +35,admin.,married,secondary,no,1345,yes,no,cellular,23,jul,135,1,-1,0,unknown,no +55,management,married,tertiary,no,171,yes,no,cellular,8,aug,73,6,-1,0,unknown,no +50,technician,married,secondary,no,1838,yes,yes,cellular,13,aug,221,8,-1,0,unknown,no +53,unknown,married,unknown,no,549,no,no,telephone,28,jan,74,2,-1,0,unknown,no +45,admin.,married,secondary,no,1097,yes,yes,cellular,2,feb,174,1,208,1,failure,no +45,unemployed,married,tertiary,no,1148,no,no,cellular,19,nov,782,2,-1,0,unknown,no +32,technician,single,tertiary,no,3818,no,no,cellular,18,aug,100,4,-1,0,unknown,no +33,blue-collar,married,primary,no,934,yes,no,unknown,4,jun,244,2,-1,0,unknown,no +51,blue-collar,married,primary,no,-637,yes,yes,cellular,19,nov,233,2,-1,0,unknown,no +27,housemaid,married,secondary,yes,65,yes,yes,cellular,17,jul,59,1,-1,0,unknown,no +37,technician,married,secondary,no,24,yes,no,cellular,13,aug,136,1,105,2,failure,no +45,blue-collar,married,primary,no,907,no,no,cellular,18,aug,230,8,-1,0,unknown,no +40,blue-collar,married,secondary,no,100,yes,no,unknown,29,may,218,2,-1,0,unknown,no +41,blue-collar,married,primary,no,686,yes,no,cellular,21,nov,888,3,-1,0,unknown,no +35,management,single,tertiary,no,3,yes,yes,cellular,6,feb,217,1,-1,0,unknown,no +62,retired,married,tertiary,no,4692,yes,no,cellular,15,oct,73,1,-1,0,unknown,no +42,technician,married,secondary,yes,-197,yes,no,cellular,6,aug,66,7,-1,0,unknown,no +38,management,divorced,tertiary,no,4335,yes,no,cellular,20,nov,640,1,-1,0,unknown,no +36,technician,single,secondary,no,664,no,no,cellular,22,aug,309,3,-1,0,unknown,no +59,services,married,secondary,no,307,yes,yes,unknown,6,may,250,7,-1,0,unknown,no +46,services,divorced,secondary,no,5,yes,yes,cellular,29,jan,305,2,-1,0,unknown,no +42,blue-collar,married,primary,no,-67,yes,no,unknown,9,may,128,1,-1,0,unknown,no +27,student,single,secondary,no,3754,no,no,cellular,15,mar,106,3,98,1,other,no +44,technician,married,secondary,no,1139,yes,no,cellular,30,jan,64,1,-1,0,unknown,no +32,services,married,secondary,no,250,yes,no,unknown,29,may,202,1,-1,0,unknown,no +32,self-employed,divorced,tertiary,no,3695,yes,no,cellular,15,may,34,1,353,3,other,no +43,blue-collar,married,secondary,no,1025,yes,no,cellular,2,jun,106,1,-1,0,unknown,no +38,management,married,tertiary,no,328,no,no,cellular,8,aug,230,2,-1,0,unknown,no +40,services,married,secondary,no,0,yes,no,cellular,2,jun,297,1,28,3,failure,no +44,management,married,tertiary,no,6203,yes,yes,unknown,13,may,129,1,-1,0,unknown,no +49,management,divorced,tertiary,no,1904,no,yes,cellular,17,nov,131,2,-1,0,unknown,no +37,management,married,tertiary,no,347,yes,no,cellular,22,jul,282,1,-1,0,unknown,no +40,unemployed,married,secondary,no,1289,no,no,cellular,26,may,260,2,-1,0,unknown,no +54,management,divorced,tertiary,no,129,yes,no,unknown,30,may,132,1,-1,0,unknown,no +38,blue-collar,married,primary,no,178,yes,no,unknown,20,may,245,1,-1,0,unknown,no +45,management,married,tertiary,no,81,no,yes,cellular,30,jul,61,3,-1,0,unknown,no +49,self-employed,married,tertiary,no,599,no,no,cellular,12,aug,174,1,-1,0,unknown,no +46,technician,married,secondary,no,190,yes,no,cellular,12,aug,370,2,-1,0,unknown,no +39,blue-collar,married,secondary,no,0,yes,no,unknown,6,may,262,1,-1,0,unknown,no +56,management,married,tertiary,no,563,yes,no,cellular,6,may,100,2,168,1,failure,no +37,blue-collar,married,secondary,no,105,yes,no,unknown,8,may,69,2,-1,0,unknown,no +39,management,married,tertiary,no,3518,yes,no,cellular,8,may,440,1,-1,0,unknown,no +53,self-employed,married,secondary,no,248,no,yes,cellular,17,nov,99,1,126,3,failure,no +38,blue-collar,married,secondary,no,961,yes,no,unknown,16,may,346,1,-1,0,unknown,no +25,technician,single,tertiary,no,640,yes,no,unknown,13,may,492,2,-1,0,unknown,no +35,technician,married,secondary,no,1144,no,no,cellular,20,aug,197,13,-1,0,unknown,no +47,unemployed,married,primary,no,0,no,no,unknown,18,jun,308,1,-1,0,unknown,no +40,management,married,tertiary,no,4381,no,no,telephone,29,jul,126,2,-1,0,unknown,no +31,self-employed,married,tertiary,no,1134,no,no,cellular,6,feb,174,2,-1,0,unknown,no +50,technician,married,primary,no,570,no,no,unknown,20,jun,21,3,-1,0,unknown,no +40,blue-collar,married,secondary,no,0,yes,no,unknown,16,may,167,2,-1,0,unknown,no +55,retired,married,tertiary,no,357,yes,no,cellular,11,aug,526,1,103,1,failure,no +31,services,married,secondary,no,593,yes,no,cellular,19,nov,391,2,-1,0,unknown,no +59,blue-collar,married,primary,no,229,yes,yes,unknown,7,may,19,1,-1,0,unknown,no +52,management,married,primary,no,0,no,no,unknown,5,jun,85,3,-1,0,unknown,no +55,unknown,married,secondary,no,1157,no,no,cellular,12,jul,289,1,412,2,failure,no +49,management,married,tertiary,no,234,no,no,cellular,22,aug,55,6,-1,0,unknown,no +31,self-employed,married,tertiary,no,322,yes,no,unknown,8,may,159,1,-1,0,unknown,no +55,entrepreneur,married,secondary,no,113,yes,no,unknown,12,jun,186,1,-1,0,unknown,no +38,entrepreneur,married,secondary,no,2139,yes,no,unknown,9,may,576,1,-1,0,unknown,no +52,unemployed,married,secondary,no,2251,yes,no,unknown,3,jun,58,9,-1,0,unknown,no +57,management,divorced,unknown,no,0,no,no,unknown,13,may,95,1,-1,0,unknown,no +65,management,divorced,tertiary,no,2756,no,no,cellular,23,sep,1353,2,-1,0,unknown,no +53,retired,married,tertiary,no,7132,no,no,cellular,13,aug,88,2,-1,0,unknown,no +34,technician,single,tertiary,no,2047,yes,no,cellular,28,jul,57,5,-1,0,unknown,no +41,self-employed,single,tertiary,no,0,no,no,cellular,18,nov,256,1,-1,0,unknown,no +44,unemployed,married,tertiary,no,1151,yes,no,unknown,5,jun,127,2,-1,0,unknown,no +49,technician,married,secondary,no,5244,no,no,cellular,25,aug,60,4,-1,0,unknown,no +39,technician,married,secondary,no,1,yes,no,unknown,26,may,506,2,-1,0,unknown,no +54,management,married,tertiary,no,203,no,no,cellular,21,nov,70,1,-1,0,unknown,no +22,student,single,secondary,no,2162,no,no,telephone,2,feb,168,1,-1,0,unknown,no +31,admin.,married,secondary,no,337,no,no,unknown,12,may,51,1,-1,0,unknown,no +53,housemaid,married,unknown,no,0,no,no,cellular,22,aug,207,1,-1,0,unknown,no +59,technician,divorced,secondary,no,2,no,no,cellular,26,aug,164,2,-1,0,unknown,no +59,admin.,married,secondary,no,1365,no,no,unknown,19,jun,327,1,-1,0,unknown,no +56,management,married,tertiary,no,2366,yes,yes,cellular,3,feb,538,2,188,4,failure,no +52,management,divorced,tertiary,no,-803,yes,no,cellular,7,aug,131,3,-1,0,unknown,no +57,entrepreneur,divorced,tertiary,no,873,no,no,unknown,17,jun,441,3,-1,0,unknown,no +41,admin.,married,secondary,no,-76,yes,no,cellular,16,apr,263,1,-1,0,unknown,no +39,housemaid,married,tertiary,no,2990,no,no,telephone,30,apr,127,4,-1,0,unknown,no +35,management,divorced,tertiary,no,538,yes,no,unknown,12,may,66,4,-1,0,unknown,no +53,management,divorced,tertiary,no,6388,yes,no,telephone,23,jul,203,2,-1,0,unknown,no +35,technician,married,secondary,no,840,yes,no,cellular,29,jul,281,4,-1,0,unknown,no +25,technician,single,secondary,no,1847,no,no,cellular,26,may,137,2,-1,0,unknown,no +34,services,married,secondary,no,40,yes,no,cellular,17,jul,302,2,-1,0,unknown,no +38,self-employed,married,secondary,no,30,no,no,unknown,16,jun,91,1,-1,0,unknown,no +42,management,married,primary,no,860,yes,no,unknown,15,may,90,3,-1,0,unknown,no +28,self-employed,single,secondary,no,123,yes,no,unknown,9,may,97,1,-1,0,unknown,no +35,blue-collar,married,secondary,no,667,yes,no,cellular,14,may,10,5,324,27,other,no +34,admin.,single,secondary,no,601,no,no,cellular,17,nov,184,3,-1,0,unknown,no +32,technician,married,secondary,no,616,yes,no,cellular,27,aug,118,7,-1,0,unknown,no +38,entrepreneur,married,unknown,no,259,no,no,cellular,18,nov,63,1,-1,0,unknown,no +32,management,single,tertiary,no,307,no,no,cellular,25,jan,96,1,201,3,success,no +41,management,married,tertiary,no,-29,no,no,cellular,29,jan,41,2,266,2,failure,no +41,blue-collar,married,secondary,no,849,yes,yes,cellular,12,may,100,4,-1,0,unknown,no +26,management,single,tertiary,no,47,yes,no,cellular,18,may,63,1,-1,0,unknown,no +60,retired,married,tertiary,no,2194,yes,no,telephone,20,apr,31,3,263,9,failure,no +51,services,married,unknown,no,3413,no,no,cellular,27,aug,146,7,-1,0,unknown,no +24,services,single,secondary,no,1299,yes,yes,cellular,18,may,113,2,-1,0,unknown,no +37,blue-collar,married,unknown,no,622,yes,no,cellular,11,may,175,1,-1,0,unknown,no +44,technician,married,secondary,no,1901,no,no,cellular,6,aug,165,2,-1,0,unknown,no +74,retired,divorced,primary,no,166,no,no,cellular,13,aug,99,1,-1,0,unknown,no +50,technician,married,secondary,no,1717,no,no,telephone,7,jul,416,8,-1,0,unknown,no +31,management,single,tertiary,no,-160,yes,no,unknown,28,may,202,2,-1,0,unknown,no +31,admin.,married,secondary,no,89,no,no,unknown,7,may,297,3,-1,0,unknown,no +25,management,single,tertiary,no,493,yes,no,unknown,4,jun,301,1,-1,0,unknown,no +39,entrepreneur,married,tertiary,no,2644,yes,no,unknown,20,may,253,1,-1,0,unknown,no +30,management,single,tertiary,no,596,no,no,cellular,4,jun,125,2,-1,0,unknown,no +60,management,married,secondary,no,0,no,no,cellular,20,may,321,4,87,8,failure,no +48,technician,married,secondary,no,606,yes,no,cellular,19,aug,231,4,-1,0,unknown,no +30,entrepreneur,married,secondary,no,-346,yes,yes,cellular,22,jul,88,1,-1,0,unknown,no +43,services,single,secondary,no,550,yes,no,cellular,13,may,107,2,-1,0,unknown,no +44,technician,single,primary,no,237,yes,no,cellular,25,jul,54,1,-1,0,unknown,no +29,blue-collar,single,secondary,no,415,no,yes,cellular,28,jan,161,1,-1,0,unknown,no +46,unemployed,married,secondary,no,-125,yes,no,unknown,6,may,23,1,-1,0,unknown,no +28,blue-collar,single,tertiary,no,1984,yes,no,cellular,4,may,32,2,14,1,failure,no +34,entrepreneur,married,tertiary,no,121,yes,no,telephone,18,may,57,6,-1,0,unknown,no +42,management,divorced,tertiary,no,266,no,yes,cellular,28,jan,228,1,-1,0,unknown,no +59,retired,married,secondary,no,1723,no,no,unknown,19,jun,70,1,-1,0,unknown,no +27,blue-collar,single,secondary,no,1049,no,no,telephone,29,jan,389,3,-1,0,unknown,no +36,blue-collar,married,primary,no,21,no,no,telephone,20,nov,35,1,-1,0,unknown,no +34,blue-collar,single,secondary,no,341,yes,no,unknown,8,may,195,1,-1,0,unknown,no +30,management,married,tertiary,no,233,yes,no,unknown,14,may,382,10,-1,0,unknown,no +50,technician,married,tertiary,no,247,no,no,unknown,23,may,173,1,-1,0,unknown,no +50,technician,married,tertiary,no,3117,no,no,cellular,20,nov,44,2,164,1,failure,no +45,entrepreneur,married,secondary,no,242,no,yes,cellular,4,feb,510,1,198,4,failure,no +40,blue-collar,single,unknown,no,24,yes,no,unknown,5,may,185,1,-1,0,unknown,no +49,management,married,tertiary,no,7007,no,no,cellular,17,nov,325,2,-1,0,unknown,no +54,retired,married,secondary,no,1851,no,no,unknown,11,jun,296,3,-1,0,unknown,no +31,blue-collar,single,secondary,no,573,yes,no,telephone,5,feb,58,1,269,2,failure,no +35,self-employed,married,tertiary,no,1178,yes,yes,cellular,15,apr,220,2,183,5,failure,no +34,blue-collar,married,tertiary,no,748,yes,yes,cellular,6,may,161,1,-1,0,unknown,no +48,admin.,divorced,secondary,no,-407,yes,no,cellular,14,may,210,2,352,1,failure,no +51,blue-collar,married,secondary,no,4695,no,no,cellular,29,aug,8,10,-1,0,unknown,no +47,unemployed,single,tertiary,no,2500,no,no,cellular,30,jan,240,1,-1,0,unknown,no +45,retired,single,secondary,yes,86,no,no,cellular,21,nov,64,5,-1,0,unknown,no +33,management,married,tertiary,no,968,no,yes,cellular,28,aug,95,10,-1,0,unknown,no +33,services,single,secondary,no,192,no,no,cellular,24,jul,255,1,-1,0,unknown,no +27,unemployed,single,primary,no,93,no,no,unknown,11,oct,4,1,-1,0,unknown,no +47,technician,married,secondary,no,0,yes,no,cellular,25,may,234,1,-1,0,unknown,no +54,self-employed,divorced,tertiary,no,0,yes,yes,cellular,29,jan,309,3,-1,0,unknown,no +37,management,married,tertiary,no,-491,yes,no,cellular,5,feb,80,2,-1,0,unknown,no +43,unknown,married,unknown,no,1517,no,no,unknown,20,jun,45,1,-1,0,unknown,no +49,management,married,tertiary,no,0,yes,no,cellular,18,nov,102,1,-1,0,unknown,no +43,unemployed,married,secondary,no,775,no,no,cellular,14,aug,98,1,106,1,failure,no +27,admin.,single,secondary,no,276,yes,no,unknown,19,may,311,2,-1,0,unknown,no +44,services,married,secondary,no,5781,yes,yes,cellular,15,may,195,1,-1,0,unknown,no +37,management,divorced,tertiary,no,0,yes,no,cellular,11,may,217,6,-1,0,unknown,no +50,services,married,secondary,no,901,yes,no,unknown,20,jun,8,6,-1,0,unknown,no +50,entrepreneur,married,primary,no,431,yes,no,cellular,20,apr,12,5,-1,0,unknown,no +52,services,married,primary,no,911,no,no,unknown,20,jun,29,2,-1,0,unknown,no +26,admin.,single,secondary,no,96,no,no,cellular,6,may,606,1,345,1,failure,no +35,technician,married,secondary,no,0,yes,yes,cellular,17,nov,199,1,-1,0,unknown,no +47,services,divorced,secondary,no,-288,yes,no,unknown,28,may,107,7,-1,0,unknown,no +55,services,divorced,primary,no,2923,yes,no,unknown,15,may,104,2,-1,0,unknown,no +26,blue-collar,single,primary,no,16,no,yes,cellular,8,jul,249,2,-1,0,unknown,no +37,self-employed,married,secondary,no,744,yes,yes,cellular,21,aug,161,3,-1,0,unknown,no +56,blue-collar,married,primary,no,551,no,no,unknown,29,may,27,1,-1,0,unknown,no +33,management,married,tertiary,no,322,yes,no,cellular,16,apr,77,3,-1,0,unknown,no +36,blue-collar,married,secondary,no,199,yes,no,cellular,9,jul,183,1,-1,0,unknown,no +32,management,single,tertiary,no,0,no,no,cellular,22,aug,360,2,-1,0,unknown,no +30,technician,single,tertiary,no,0,no,no,cellular,28,aug,262,6,-1,0,unknown,no +39,management,single,tertiary,no,633,no,no,cellular,19,nov,105,2,133,3,failure,no +28,management,single,tertiary,no,203,no,no,cellular,29,jan,145,2,-1,0,unknown,no +36,self-employed,single,tertiary,no,583,no,no,cellular,30,jan,859,1,235,1,other,no +39,admin.,single,secondary,no,2749,yes,no,cellular,19,nov,128,1,-1,0,unknown,no +48,management,divorced,secondary,no,769,no,yes,cellular,28,jan,58,2,184,15,other,no +34,blue-collar,married,secondary,no,1924,yes,yes,cellular,1,apr,161,2,253,1,failure,no +50,blue-collar,married,primary,no,1064,yes,no,cellular,8,aug,31,2,-1,0,unknown,no +26,admin.,single,secondary,no,1099,no,no,cellular,15,jan,99,2,225,13,other,no +35,entrepreneur,married,secondary,no,2971,no,no,cellular,21,nov,112,2,-1,0,unknown,no +44,blue-collar,married,primary,no,2657,yes,no,unknown,20,jun,202,2,-1,0,unknown,no +47,management,married,secondary,no,21,yes,no,cellular,18,nov,229,2,-1,0,unknown,no +62,management,married,tertiary,no,0,no,no,cellular,13,apr,113,3,182,3,failure,no +55,management,single,tertiary,no,0,no,no,cellular,3,nov,222,3,187,3,failure,no +26,management,single,tertiary,no,9447,no,no,cellular,4,sep,113,1,100,2,other,no +88,retired,married,secondary,no,433,no,no,telephone,15,sep,161,1,274,1,failure,no +28,technician,single,tertiary,no,375,yes,no,cellular,14,may,43,1,350,1,other,no +41,services,married,secondary,no,2399,yes,no,cellular,15,may,303,2,351,2,failure,no +25,technician,single,tertiary,no,148,no,no,cellular,23,jul,421,1,-1,0,unknown,no +40,entrepreneur,divorced,tertiary,no,224,no,no,unknown,20,jun,606,1,-1,0,unknown,no +35,blue-collar,married,primary,no,147,yes,no,cellular,5,may,358,1,337,3,failure,no +65,retired,divorced,secondary,no,744,no,no,cellular,5,jul,182,1,-1,0,unknown,no +40,self-employed,single,tertiary,no,-94,yes,no,cellular,16,jul,90,1,-1,0,unknown,no +43,management,divorced,tertiary,no,9,yes,no,cellular,26,aug,89,5,401,1,failure,no +29,management,single,tertiary,no,1218,no,no,cellular,30,jan,258,2,-1,0,unknown,no +48,management,single,secondary,no,1106,no,yes,cellular,8,jul,265,1,-1,0,unknown,no +35,blue-collar,married,secondary,no,0,yes,no,cellular,9,jul,277,1,-1,0,unknown,no +30,technician,single,secondary,no,167,no,no,unknown,14,sep,9,1,-1,0,unknown,no +32,management,single,tertiary,no,0,yes,no,cellular,20,apr,415,2,-1,0,unknown,no +30,student,married,tertiary,no,324,no,no,cellular,25,aug,585,4,-1,0,unknown,no +30,admin.,single,secondary,no,127,yes,no,cellular,18,may,16,6,368,1,other,no +24,admin.,married,secondary,no,230,yes,no,cellular,15,may,73,1,-1,0,unknown,no +29,technician,married,secondary,no,344,yes,yes,unknown,28,may,279,2,-1,0,unknown,no +44,management,married,tertiary,no,105,yes,no,unknown,6,may,1529,2,-1,0,unknown,no +42,blue-collar,married,secondary,no,634,yes,no,cellular,24,jul,256,2,-1,0,unknown,no +45,housemaid,married,primary,no,317,yes,no,cellular,8,apr,325,2,-1,0,unknown,no +57,housemaid,married,primary,no,2234,no,no,unknown,11,jun,201,5,-1,0,unknown,no +36,blue-collar,married,primary,no,223,yes,no,unknown,14,jul,12,3,-1,0,unknown,no +49,technician,married,primary,no,230,yes,no,unknown,8,may,96,1,-1,0,unknown,no +30,technician,single,tertiary,no,0,no,no,cellular,15,sep,214,2,-1,0,unknown,no +48,management,divorced,tertiary,no,313,no,no,cellular,8,may,208,1,-1,0,unknown,no +32,services,married,secondary,no,289,yes,no,cellular,2,feb,63,1,257,2,failure,no +35,technician,married,secondary,no,0,yes,no,cellular,6,apr,139,1,-1,0,unknown,no +40,entrepreneur,married,primary,no,3676,yes,yes,unknown,15,may,101,1,-1,0,unknown,no +32,housemaid,married,primary,no,-184,yes,no,cellular,6,feb,129,2,197,1,failure,no +37,admin.,single,tertiary,no,3954,yes,no,cellular,12,aug,87,1,117,2,failure,no +37,management,married,tertiary,no,2951,no,no,cellular,21,nov,101,3,-1,0,unknown,no +43,management,married,tertiary,no,78,yes,no,cellular,21,nov,36,1,109,1,other,no +48,technician,married,secondary,no,1526,no,no,cellular,6,aug,273,2,-1,0,unknown,no +36,technician,married,secondary,no,0,yes,no,cellular,21,jul,193,5,-1,0,unknown,no +33,unemployed,single,secondary,no,233,yes,no,unknown,8,may,221,4,-1,0,unknown,no +33,management,married,secondary,no,67,yes,yes,unknown,23,may,316,4,-1,0,unknown,no +36,services,single,primary,no,38,no,no,unknown,6,jun,308,4,-1,0,unknown,no +65,retired,married,tertiary,no,1948,no,no,cellular,2,feb,102,2,-1,0,unknown,no +50,housemaid,married,primary,no,5296,no,no,cellular,19,nov,64,7,-1,0,unknown,no +34,management,single,tertiary,no,612,no,no,cellular,30,apr,192,1,-1,0,unknown,no +35,entrepreneur,married,secondary,no,4872,yes,no,cellular,15,may,34,3,-1,0,unknown,no +32,management,single,tertiary,no,131,yes,no,cellular,11,aug,112,1,81,1,other,no +34,technician,single,secondary,no,4943,yes,yes,cellular,19,nov,117,2,-1,0,unknown,no +34,blue-collar,married,secondary,no,-257,yes,no,cellular,15,may,160,1,368,4,failure,no +33,blue-collar,married,primary,no,331,yes,no,unknown,30,may,139,3,-1,0,unknown,no +45,blue-collar,married,secondary,no,105,yes,yes,unknown,13,may,119,1,-1,0,unknown,no +35,blue-collar,married,secondary,no,1160,no,yes,telephone,19,nov,62,1,-1,0,unknown,no +53,technician,married,secondary,no,4930,no,yes,cellular,2,feb,228,2,-1,0,unknown,no +39,services,divorced,primary,no,471,yes,no,unknown,6,may,161,2,-1,0,unknown,no +38,blue-collar,married,secondary,no,35,yes,no,unknown,28,may,130,2,-1,0,unknown,no +35,management,single,tertiary,no,1750,yes,no,cellular,22,oct,422,1,175,4,success,no +52,blue-collar,married,secondary,no,5275,no,yes,cellular,22,jul,1029,3,-1,0,unknown,no +30,technician,single,secondary,no,728,yes,no,cellular,5,feb,393,1,261,1,other,no +37,self-employed,married,tertiary,no,0,no,no,unknown,6,jun,143,1,-1,0,unknown,no +33,self-employed,married,tertiary,no,263,no,no,cellular,16,nov,79,4,94,3,failure,no +52,management,married,tertiary,no,601,yes,no,unknown,14,may,249,2,-1,0,unknown,no +29,admin.,married,secondary,no,6429,yes,yes,cellular,14,may,535,1,352,2,failure,no +28,admin.,single,secondary,no,1076,yes,no,unknown,2,jun,537,5,-1,0,unknown,no +37,blue-collar,married,secondary,no,-57,yes,yes,cellular,7,may,55,5,-1,0,unknown,no +33,admin.,single,tertiary,no,2,no,no,cellular,29,jan,132,2,-1,0,unknown,no +32,technician,married,tertiary,no,514,yes,no,unknown,20,may,414,2,-1,0,unknown,no +25,blue-collar,single,secondary,no,-375,yes,no,cellular,14,jul,61,2,-1,0,unknown,no +37,technician,married,secondary,no,28,no,no,cellular,21,aug,101,2,-1,0,unknown,no +34,management,single,tertiary,no,404,yes,no,cellular,5,feb,10,6,-1,0,unknown,no +40,unemployed,married,secondary,no,3430,yes,no,cellular,20,nov,1855,3,-1,0,unknown,no +40,management,married,secondary,no,99,no,no,cellular,9,feb,15,5,-1,0,unknown,no +38,services,married,secondary,no,2669,yes,no,cellular,20,apr,208,2,-1,0,unknown,no +39,management,single,tertiary,no,202,yes,no,cellular,12,may,59,1,301,1,other,no +37,management,single,unknown,no,715,yes,no,unknown,20,may,247,2,-1,0,unknown,no +35,blue-collar,married,secondary,no,674,yes,no,unknown,30,may,274,2,-1,0,unknown,no +33,management,single,tertiary,no,312,no,no,cellular,11,aug,271,1,369,3,failure,no +38,management,married,tertiary,no,1463,yes,no,cellular,25,aug,425,4,-1,0,unknown,no +37,management,married,tertiary,no,789,yes,yes,cellular,11,aug,93,1,190,2,other,no +29,unemployed,single,tertiary,no,7,no,no,cellular,6,may,51,1,179,1,failure,no +42,services,married,primary,no,473,yes,no,cellular,30,jan,54,1,-1,0,unknown,no +45,management,divorced,tertiary,no,3150,yes,no,cellular,17,nov,101,2,-1,0,unknown,no +42,services,married,tertiary,no,12223,yes,no,cellular,19,nov,36,1,-1,0,unknown,no +33,blue-collar,married,secondary,no,1541,yes,no,unknown,23,may,423,2,-1,0,unknown,no +35,blue-collar,single,secondary,no,142,yes,no,cellular,7,may,266,2,168,1,failure,no +30,technician,single,tertiary,no,3,yes,no,unknown,7,may,174,1,-1,0,unknown,no +31,blue-collar,single,secondary,no,1207,yes,no,cellular,17,apr,163,2,-1,0,unknown,no +45,technician,married,secondary,no,351,yes,no,telephone,29,aug,18,2,-1,0,unknown,no +44,admin.,divorced,secondary,no,777,yes,no,cellular,18,may,517,3,350,2,failure,no +31,services,married,primary,no,997,yes,no,cellular,3,feb,256,1,190,3,failure,no +30,admin.,married,secondary,no,15,yes,no,unknown,9,may,257,1,-1,0,unknown,no +54,management,married,tertiary,no,2819,no,no,cellular,7,aug,123,3,-1,0,unknown,no +35,blue-collar,married,secondary,no,126,yes,no,cellular,16,apr,472,1,-1,0,unknown,no +36,admin.,married,secondary,no,953,yes,no,cellular,17,feb,38,1,-1,0,unknown,no +55,housemaid,married,primary,no,10,no,no,cellular,4,feb,174,3,-1,0,unknown,no +45,management,married,tertiary,yes,-577,yes,yes,cellular,24,jul,204,1,-1,0,unknown,no +30,unemployed,single,tertiary,no,1159,no,no,cellular,12,aug,95,1,68,1,success,no +57,unemployed,married,secondary,no,1350,no,no,cellular,25,jun,131,1,388,1,failure,no +59,housemaid,married,primary,no,88,yes,no,cellular,28,jul,63,5,-1,0,unknown,no +47,blue-collar,married,primary,no,-245,yes,yes,unknown,12,jun,67,4,-1,0,unknown,no +34,technician,single,secondary,no,161,no,yes,cellular,8,aug,61,2,-1,0,unknown,no +46,unemployed,divorced,secondary,no,41,yes,no,unknown,12,may,249,4,-1,0,unknown,no +56,services,divorced,secondary,no,450,no,no,unknown,9,jun,47,1,-1,0,unknown,no +24,student,single,unknown,no,782,no,no,cellular,4,may,12,7,91,1,other,no +40,admin.,married,secondary,no,-666,yes,no,unknown,27,may,107,2,-1,0,unknown,no +50,management,married,tertiary,no,-151,yes,no,cellular,18,nov,63,2,-1,0,unknown,no +31,blue-collar,married,primary,no,55,yes,yes,cellular,17,apr,340,2,-1,0,unknown,no +37,management,married,tertiary,no,-666,yes,no,cellular,18,nov,204,2,-1,0,unknown,no +45,blue-collar,married,secondary,no,87,yes,no,cellular,14,may,96,1,360,3,failure,no +45,management,married,primary,no,4629,no,no,telephone,2,apr,285,2,-1,0,unknown,no +36,blue-collar,single,primary,no,2176,yes,no,unknown,28,may,52,2,-1,0,unknown,no +57,management,married,tertiary,no,3431,yes,no,cellular,21,nov,55,2,189,1,failure,no +39,management,married,tertiary,no,208,no,no,cellular,20,aug,170,4,-1,0,unknown,no +47,services,married,secondary,no,0,yes,no,cellular,9,jul,173,1,-1,0,unknown,no +44,services,divorced,secondary,no,240,yes,no,unknown,8,may,155,2,-1,0,unknown,no +39,admin.,married,secondary,no,1388,yes,no,cellular,15,jul,150,5,-1,0,unknown,no +40,services,married,secondary,no,5807,yes,no,unknown,20,jun,98,1,-1,0,unknown,no +48,management,divorced,secondary,no,17,yes,no,cellular,17,nov,195,1,-1,0,unknown,no +56,services,married,secondary,no,0,no,no,cellular,13,aug,112,4,-1,0,unknown,no +50,blue-collar,single,primary,no,1743,yes,no,unknown,6,jun,49,5,-1,0,unknown,no +29,services,single,secondary,no,1008,yes,no,unknown,23,may,426,9,-1,0,unknown,no +33,technician,single,secondary,no,151,yes,no,cellular,20,apr,104,3,236,6,failure,no +57,blue-collar,married,unknown,no,3196,no,no,cellular,28,aug,161,4,-1,0,unknown,no +54,management,married,tertiary,no,1411,no,no,cellular,12,aug,56,2,-1,0,unknown,no +64,retired,divorced,secondary,no,630,no,no,cellular,21,aug,97,1,-1,0,unknown,no +61,retired,married,primary,no,0,yes,yes,telephone,18,aug,280,13,-1,0,unknown,no +36,blue-collar,married,secondary,no,561,yes,no,unknown,9,jun,198,2,-1,0,unknown,no +50,management,married,secondary,no,0,yes,no,unknown,14,may,94,4,-1,0,unknown,no +30,technician,single,secondary,no,281,no,no,cellular,12,aug,105,2,-1,0,unknown,no +40,technician,married,secondary,no,40,yes,no,cellular,21,nov,73,1,-1,0,unknown,no +40,management,married,tertiary,no,0,no,no,cellular,14,jul,109,8,-1,0,unknown,no +30,admin.,divorced,primary,no,1032,yes,no,unknown,29,may,52,5,-1,0,unknown,no +55,management,divorced,tertiary,no,-207,no,no,cellular,2,feb,211,1,-1,0,unknown,no +59,housemaid,married,primary,no,235,no,no,cellular,13,aug,119,2,-1,0,unknown,no +37,admin.,married,tertiary,no,0,yes,no,cellular,17,nov,65,2,119,1,failure,no +53,services,married,secondary,no,367,yes,yes,cellular,29,jan,155,1,261,2,failure,no +56,management,married,tertiary,no,505,yes,yes,cellular,5,may,221,1,169,3,failure,no +33,services,married,secondary,no,804,yes,yes,unknown,8,may,266,1,-1,0,unknown,no +49,services,married,secondary,no,-301,yes,no,cellular,12,may,187,4,-1,0,unknown,no +47,technician,married,tertiary,yes,-813,yes,yes,unknown,16,jun,179,25,-1,0,unknown,no +34,admin.,married,secondary,no,79,yes,no,unknown,23,may,83,1,-1,0,unknown,no +33,blue-collar,married,primary,no,50,yes,no,cellular,7,may,246,2,-1,0,unknown,no +31,blue-collar,single,secondary,no,1205,yes,no,cellular,16,apr,462,1,328,2,other,no +44,technician,single,secondary,no,365,yes,no,unknown,8,may,169,2,-1,0,unknown,no +50,admin.,married,secondary,no,-1415,no,no,cellular,19,aug,358,2,-1,0,unknown,no +39,admin.,single,secondary,no,223,no,no,cellular,4,feb,277,1,-1,0,unknown,no +41,management,married,tertiary,no,1897,yes,no,unknown,19,may,335,3,-1,0,unknown,no +33,management,married,tertiary,no,22867,yes,no,cellular,10,aug,73,1,440,2,failure,no +40,housemaid,married,secondary,no,949,no,no,cellular,8,aug,182,1,-1,0,unknown,no +42,services,married,secondary,no,1165,yes,no,cellular,18,may,485,6,-1,0,unknown,no +37,management,divorced,secondary,no,1655,yes,no,cellular,12,may,178,1,175,2,failure,no +56,blue-collar,married,unknown,no,260,yes,no,telephone,30,jul,250,2,-1,0,unknown,no +49,blue-collar,divorced,primary,no,0,yes,no,cellular,29,jul,468,2,-1,0,unknown,no +35,entrepreneur,single,tertiary,no,-880,no,yes,cellular,24,jul,77,3,-1,0,unknown,no +41,management,divorced,tertiary,no,107,yes,no,cellular,17,jul,122,17,-1,0,unknown,no +52,blue-collar,married,primary,no,1624,no,no,unknown,20,jun,114,3,-1,0,unknown,no +33,technician,single,tertiary,no,1257,yes,no,cellular,22,jul,66,1,-1,0,unknown,no +40,admin.,single,unknown,no,355,yes,no,cellular,7,apr,345,2,138,6,other,no +44,blue-collar,divorced,secondary,no,579,yes,no,unknown,6,may,198,2,-1,0,unknown,no +39,blue-collar,married,secondary,no,1403,no,no,cellular,11,may,214,8,326,2,failure,no +39,blue-collar,married,primary,no,-176,no,no,cellular,9,jul,176,1,-1,0,unknown,no +28,management,single,secondary,no,-513,no,yes,cellular,29,jul,95,8,-1,0,unknown,no +45,technician,single,secondary,no,586,no,yes,cellular,28,jul,32,3,-1,0,unknown,no +63,retired,divorced,primary,no,1840,no,no,cellular,12,mar,71,3,-1,0,unknown,no +32,technician,single,tertiary,no,720,no,no,cellular,12,aug,234,4,-1,0,unknown,no +28,blue-collar,single,secondary,no,97,yes,no,unknown,7,may,67,1,-1,0,unknown,no +36,management,single,tertiary,no,13,no,yes,cellular,18,nov,106,1,-1,0,unknown,no +34,admin.,divorced,secondary,no,140,yes,no,cellular,8,may,81,2,365,1,failure,no +45,blue-collar,married,secondary,no,521,yes,no,unknown,17,jun,259,3,-1,0,unknown,no +30,blue-collar,married,secondary,no,364,yes,yes,cellular,4,feb,331,1,-1,0,unknown,no +59,blue-collar,married,primary,no,416,no,no,unknown,16,jun,92,3,-1,0,unknown,no +54,housemaid,married,primary,no,3304,no,yes,cellular,25,jul,90,7,-1,0,unknown,no +47,unknown,married,unknown,no,1880,no,no,unknown,18,jun,64,2,-1,0,unknown,no +41,admin.,single,tertiary,no,982,no,no,cellular,23,jul,105,1,-1,0,unknown,no +35,technician,divorced,secondary,no,0,no,no,cellular,25,aug,124,4,-1,0,unknown,no +38,services,married,secondary,no,173,yes,no,unknown,20,may,130,2,-1,0,unknown,no +36,technician,married,tertiary,no,911,yes,yes,cellular,4,may,275,3,-1,0,unknown,no +39,admin.,single,unknown,no,0,yes,no,cellular,11,may,62,1,-1,0,unknown,no +48,management,divorced,unknown,no,549,yes,no,unknown,6,may,427,1,-1,0,unknown,no +42,blue-collar,married,primary,no,704,yes,yes,telephone,31,jul,88,10,-1,0,unknown,no +24,blue-collar,single,secondary,no,476,yes,no,unknown,4,jun,161,1,-1,0,unknown,no +57,retired,married,secondary,no,3738,yes,no,cellular,19,apr,220,1,367,7,success,no +35,unknown,married,primary,no,634,no,no,cellular,7,jul,185,2,-1,0,unknown,no +32,management,single,tertiary,no,1134,no,no,cellular,28,aug,85,4,-1,0,unknown,no +26,blue-collar,single,secondary,no,-128,no,yes,cellular,8,jul,392,2,-1,0,unknown,no +27,technician,married,secondary,no,7102,yes,no,unknown,30,may,141,9,-1,0,unknown,no +47,entrepreneur,divorced,secondary,no,186,no,no,cellular,2,feb,112,2,-1,0,unknown,no +32,blue-collar,single,primary,no,1918,yes,no,cellular,8,may,318,1,172,1,failure,no +48,self-employed,single,unknown,no,0,no,no,unknown,18,jun,453,1,-1,0,unknown,no +43,blue-collar,married,primary,no,250,yes,no,cellular,12,may,144,5,342,16,failure,no +30,student,single,tertiary,no,31,yes,no,cellular,14,may,23,1,-1,0,unknown,no +28,technician,single,secondary,no,631,no,no,cellular,29,apr,835,7,-1,0,unknown,no +32,management,married,tertiary,no,62,yes,no,cellular,14,may,166,1,-1,0,unknown,no +26,self-employed,married,tertiary,no,479,yes,no,cellular,9,feb,133,3,-1,0,unknown,no +38,blue-collar,single,secondary,no,1121,no,no,unknown,18,jun,203,1,-1,0,unknown,no +30,services,single,unknown,no,138,yes,no,cellular,20,apr,187,1,-1,0,unknown,no +33,management,single,tertiary,no,0,yes,no,telephone,5,may,399,2,358,5,other,no +37,services,divorced,secondary,no,239,yes,no,unknown,23,may,140,2,-1,0,unknown,no +47,management,married,tertiary,no,866,no,no,unknown,20,jun,7,7,-1,0,unknown,no +36,technician,married,secondary,no,1466,yes,no,unknown,29,may,441,1,-1,0,unknown,no +48,housemaid,married,secondary,no,3570,no,no,cellular,5,jun,58,2,-1,0,unknown,no +47,technician,divorced,secondary,no,440,no,no,cellular,29,jan,147,1,-1,0,unknown,no +34,entrepreneur,single,tertiary,no,714,yes,no,unknown,12,may,166,4,-1,0,unknown,no +28,blue-collar,married,primary,no,674,yes,no,telephone,14,may,921,4,-1,0,unknown,no +54,housemaid,married,primary,no,127,no,no,cellular,19,aug,176,4,-1,0,unknown,no +33,management,married,secondary,no,588,yes,no,cellular,18,may,11,5,-1,0,unknown,no +41,entrepreneur,divorced,tertiary,no,-413,yes,no,unknown,8,may,170,2,-1,0,unknown,no +41,admin.,single,secondary,no,882,yes,yes,unknown,28,may,145,2,-1,0,unknown,no +42,management,married,tertiary,no,877,yes,no,unknown,14,may,238,1,-1,0,unknown,no +32,admin.,married,secondary,no,337,no,no,cellular,15,may,51,3,368,1,failure,no +47,self-employed,married,tertiary,no,192,no,no,telephone,30,jul,120,6,-1,0,unknown,no +36,technician,married,primary,no,3350,yes,no,cellular,16,apr,86,1,269,3,other,no +34,management,married,tertiary,no,99,no,yes,cellular,3,feb,264,2,-1,0,unknown,no +36,management,married,tertiary,no,806,yes,no,cellular,3,feb,106,2,259,1,failure,no +50,management,married,tertiary,no,6739,yes,no,cellular,14,jul,68,3,-1,0,unknown,no +53,admin.,married,primary,no,228,yes,no,unknown,16,may,97,1,-1,0,unknown,no +49,blue-collar,married,primary,no,-232,no,yes,cellular,11,aug,106,2,-1,0,unknown,no +39,technician,single,secondary,no,556,yes,no,unknown,29,may,322,1,-1,0,unknown,no +47,management,married,tertiary,no,761,yes,no,cellular,11,jul,80,2,-1,0,unknown,no +57,retired,married,primary,no,207,yes,no,unknown,8,may,193,1,-1,0,unknown,no +30,unemployed,married,secondary,no,221,no,no,cellular,8,aug,61,4,-1,0,unknown,no +54,admin.,married,secondary,no,865,yes,no,cellular,17,nov,71,1,-1,0,unknown,no +35,management,single,tertiary,no,0,no,no,cellular,18,aug,276,5,-1,0,unknown,no +47,technician,divorced,secondary,no,1851,yes,no,unknown,19,may,140,2,-1,0,unknown,no +38,entrepreneur,married,secondary,no,-272,no,yes,unknown,17,jun,143,2,-1,0,unknown,no +40,admin.,married,secondary,no,367,yes,no,telephone,5,feb,89,1,274,1,failure,no +51,blue-collar,married,primary,no,0,no,no,cellular,20,nov,85,1,-1,0,unknown,no +51,blue-collar,married,primary,no,230,yes,no,unknown,6,may,673,1,-1,0,unknown,no +57,housemaid,married,primary,no,0,no,no,cellular,13,aug,189,2,-1,0,unknown,no +41,blue-collar,married,secondary,no,1954,no,no,cellular,18,nov,65,1,110,2,success,no +31,entrepreneur,single,secondary,no,379,yes,no,cellular,18,jul,570,2,-1,0,unknown,no +59,retired,single,secondary,yes,-341,no,yes,cellular,14,jul,94,3,-1,0,unknown,no +26,services,single,primary,no,179,yes,yes,cellular,28,jul,333,4,-1,0,unknown,no +41,technician,married,tertiary,no,13,no,no,unknown,5,jun,189,2,-1,0,unknown,no +39,management,married,tertiary,no,839,no,yes,cellular,11,oct,365,2,774,11,failure,no +25,blue-collar,single,secondary,no,192,no,no,telephone,4,jul,112,2,-1,0,unknown,no +33,management,single,tertiary,no,576,no,no,cellular,25,may,220,1,111,2,other,no +35,management,single,tertiary,no,643,yes,no,unknown,23,may,322,1,-1,0,unknown,no +49,management,married,tertiary,no,342,no,no,cellular,30,jan,433,2,228,1,failure,no +31,blue-collar,married,secondary,no,1329,yes,yes,unknown,9,may,134,1,-1,0,unknown,no +40,unemployed,married,secondary,no,219,yes,no,unknown,5,may,357,1,-1,0,unknown,no +32,management,married,tertiary,no,141,yes,no,cellular,4,may,78,3,89,9,success,no +42,blue-collar,married,primary,no,402,no,no,cellular,13,may,31,7,330,17,failure,no +33,technician,married,tertiary,no,8023,no,no,cellular,30,nov,107,1,105,3,failure,no +48,admin.,married,secondary,no,1131,no,yes,cellular,8,may,49,1,-1,0,unknown,no +28,student,single,secondary,no,1925,no,no,cellular,26,feb,139,1,93,3,success,no +43,blue-collar,single,primary,no,0,no,no,unknown,9,may,71,3,-1,0,unknown,no +30,blue-collar,single,secondary,no,103,yes,no,cellular,17,apr,2053,2,317,1,other,no +41,admin.,married,secondary,no,1395,yes,yes,cellular,11,may,85,1,308,2,failure,no +55,management,married,primary,no,621,no,yes,cellular,2,feb,114,1,208,1,failure,no +55,management,married,tertiary,no,1161,yes,no,cellular,20,nov,8,6,-1,0,unknown,no +54,management,married,unknown,no,24,no,no,cellular,31,jul,12,10,-1,0,unknown,no +55,retired,married,primary,no,2,no,no,unknown,27,jun,392,4,-1,0,unknown,no +57,technician,married,secondary,no,295,no,no,cellular,19,aug,151,11,-1,0,unknown,no +27,blue-collar,single,secondary,no,-208,yes,no,unknown,21,may,127,2,-1,0,unknown,no +28,management,married,tertiary,no,258,no,yes,cellular,17,apr,93,1,-1,0,unknown,no +51,management,divorced,tertiary,no,119,no,no,cellular,17,nov,200,1,165,2,failure,no +27,management,single,secondary,no,967,yes,no,unknown,21,may,162,1,-1,0,unknown,no +40,blue-collar,divorced,secondary,no,-90,yes,no,unknown,28,may,130,1,-1,0,unknown,no +56,retired,married,secondary,no,0,no,no,cellular,26,jan,413,2,-1,0,unknown,no +35,services,married,secondary,no,0,yes,no,cellular,30,jul,251,3,-1,0,unknown,no +47,entrepreneur,divorced,secondary,no,392,yes,yes,cellular,19,nov,125,1,-1,0,unknown,no +49,blue-collar,married,primary,no,23,yes,no,unknown,23,may,247,1,-1,0,unknown,no +35,management,single,tertiary,no,2486,yes,no,cellular,25,may,265,1,-1,0,unknown,no +50,admin.,divorced,secondary,no,81,no,yes,cellular,21,nov,64,1,-1,0,unknown,no +55,housemaid,married,primary,no,1563,yes,no,cellular,17,nov,128,2,-1,0,unknown,no +56,blue-collar,married,secondary,no,1602,yes,no,unknown,6,may,427,1,-1,0,unknown,no +35,technician,single,secondary,no,2144,yes,no,unknown,13,may,188,2,-1,0,unknown,no +42,blue-collar,married,secondary,no,273,no,no,unknown,12,jun,315,1,-1,0,unknown,no +34,blue-collar,married,primary,no,455,yes,no,unknown,20,jun,372,3,-1,0,unknown,no +40,services,single,secondary,no,1038,no,no,unknown,5,jun,741,1,-1,0,unknown,no +33,services,married,secondary,no,-384,yes,no,cellular,9,jul,125,1,-1,0,unknown,no +33,management,married,tertiary,no,307,no,no,unknown,16,may,806,4,-1,0,unknown,no +59,retired,divorced,secondary,no,93,no,no,unknown,26,may,193,2,-1,0,unknown,no +51,housemaid,divorced,primary,no,127,no,no,unknown,13,sep,69,1,-1,0,unknown,no +47,services,married,secondary,no,-150,no,no,cellular,14,aug,52,4,-1,0,unknown,no +48,management,married,tertiary,no,20718,yes,no,unknown,14,may,125,1,-1,0,unknown,no +31,admin.,single,tertiary,no,-218,yes,no,unknown,2,jun,227,15,-1,0,unknown,no +39,blue-collar,married,secondary,no,5222,yes,no,cellular,21,nov,239,2,177,1,failure,no +52,admin.,married,secondary,no,484,yes,no,unknown,6,may,128,1,-1,0,unknown,no +28,technician,single,tertiary,no,75,yes,yes,cellular,5,may,233,2,-1,0,unknown,no +56,technician,divorced,secondary,no,1480,yes,yes,cellular,5,feb,576,1,-1,0,unknown,no +47,services,married,secondary,no,1111,no,no,unknown,20,jun,415,4,-1,0,unknown,no +77,retired,divorced,primary,no,639,no,no,telephone,16,apr,127,7,-1,0,unknown,no +39,blue-collar,single,secondary,no,29,yes,no,unknown,7,may,214,2,-1,0,unknown,no +31,services,single,secondary,no,6374,yes,no,unknown,23,may,922,2,-1,0,unknown,no +39,management,married,secondary,no,363,yes,yes,cellular,17,jul,184,1,-1,0,unknown,no +32,blue-collar,married,primary,no,-94,yes,yes,cellular,11,may,308,1,-1,0,unknown,no +59,admin.,married,secondary,no,92,yes,no,cellular,12,may,139,2,350,1,failure,no +42,unknown,married,unknown,no,222,no,no,cellular,26,aug,80,16,-1,0,unknown,no +50,technician,married,primary,no,249,yes,no,unknown,6,may,129,1,-1,0,unknown,no +44,services,married,secondary,no,1450,yes,no,cellular,14,apr,356,1,314,2,failure,no +47,housemaid,married,tertiary,no,2290,no,no,cellular,15,apr,54,1,-1,0,unknown,no +51,technician,married,tertiary,no,0,no,no,telephone,17,nov,81,1,-1,0,unknown,no +34,technician,married,secondary,no,1026,no,no,cellular,12,nov,319,1,100,6,failure,no +36,management,married,primary,no,3953,yes,no,cellular,19,nov,277,1,-1,0,unknown,no +32,blue-collar,single,primary,no,1426,yes,no,cellular,20,nov,114,1,-1,0,unknown,no +28,blue-collar,single,secondary,no,53,yes,no,cellular,13,may,93,1,-1,0,unknown,no +34,management,married,tertiary,no,160,yes,yes,cellular,15,jul,130,1,-1,0,unknown,no +40,management,single,tertiary,no,171,no,no,cellular,19,aug,1241,3,-1,0,unknown,no +49,management,married,tertiary,no,3237,yes,no,unknown,5,may,232,3,-1,0,unknown,no +30,self-employed,single,secondary,no,192,no,no,cellular,22,jul,423,1,-1,0,unknown,no +56,self-employed,married,tertiary,yes,0,no,no,cellular,19,nov,122,1,-1,0,unknown,no +28,management,single,tertiary,no,385,no,yes,cellular,9,feb,79,4,193,7,failure,no +31,blue-collar,married,secondary,no,2591,yes,no,cellular,20,nov,55,1,-1,0,unknown,no +28,blue-collar,single,secondary,no,39,no,no,cellular,31,jul,22,7,-1,0,unknown,no +53,technician,married,primary,no,44,no,no,unknown,6,jun,256,1,-1,0,unknown,no +38,management,married,tertiary,no,5432,yes,yes,cellular,17,apr,707,1,149,2,failure,no +54,retired,divorced,tertiary,no,349,yes,no,cellular,12,may,176,2,175,1,failure,no +36,management,single,tertiary,no,20,yes,no,cellular,20,apr,766,2,150,3,other,no +60,retired,divorced,tertiary,no,381,yes,no,cellular,17,apr,208,2,344,4,failure,no +40,management,married,secondary,no,4025,yes,no,cellular,15,jul,107,4,-1,0,unknown,no +50,admin.,single,secondary,no,167,no,yes,cellular,28,jul,201,3,-1,0,unknown,no +28,management,single,tertiary,no,278,no,yes,cellular,29,jan,194,1,-1,0,unknown,no +33,blue-collar,married,secondary,no,263,yes,no,unknown,21,may,206,3,-1,0,unknown,no +53,retired,married,secondary,no,4968,no,no,cellular,6,may,109,1,87,2,failure,no +38,technician,married,secondary,no,581,yes,no,unknown,6,may,79,1,-1,0,unknown,no +34,management,single,tertiary,no,682,no,no,cellular,27,aug,472,3,-1,0,unknown,no +41,unknown,married,unknown,no,779,no,no,cellular,30,jul,647,10,-1,0,unknown,no +64,retired,married,tertiary,no,2139,no,no,cellular,14,oct,632,2,-1,0,unknown,no +45,management,married,secondary,no,5888,yes,no,unknown,26,may,45,5,-1,0,unknown,no +38,technician,married,secondary,no,0,yes,yes,cellular,15,jul,146,4,-1,0,unknown,no +57,management,married,tertiary,no,3431,yes,no,unknown,16,may,73,1,-1,0,unknown,no +34,management,married,tertiary,no,188,no,no,cellular,5,may,399,1,-1,0,unknown,no +36,blue-collar,single,primary,no,3214,yes,no,unknown,16,jun,124,2,-1,0,unknown,no +30,admin.,married,secondary,no,873,yes,no,telephone,12,nov,119,1,167,3,success,no +32,blue-collar,married,secondary,no,-32,yes,no,cellular,12,may,145,1,-1,0,unknown,no +42,blue-collar,married,secondary,no,1958,yes,no,unknown,30,may,124,3,-1,0,unknown,no +35,admin.,married,secondary,yes,76,no,yes,unknown,17,jun,107,1,-1,0,unknown,no +42,technician,married,secondary,no,1013,no,yes,cellular,28,aug,117,8,-1,0,unknown,no +50,entrepreneur,married,secondary,no,2731,no,no,cellular,8,aug,111,2,-1,0,unknown,no +38,management,married,secondary,no,93,no,no,unknown,3,jul,515,2,-1,0,unknown,no +38,self-employed,married,secondary,no,173,no,no,cellular,18,aug,205,4,-1,0,unknown,no +55,management,married,primary,no,384,no,no,telephone,4,feb,75,1,-1,0,unknown,no +60,housemaid,married,unknown,no,491,no,no,cellular,14,aug,503,4,-1,0,unknown,no +33,management,married,tertiary,no,728,yes,no,cellular,13,aug,275,5,-1,0,unknown,no +30,technician,single,secondary,no,411,yes,no,cellular,16,apr,948,1,-1,0,unknown,no +30,management,single,tertiary,no,265,no,no,cellular,25,nov,295,1,93,3,success,no +51,management,married,tertiary,no,-3,no,no,cellular,21,aug,79,2,-1,0,unknown,no +37,management,married,tertiary,no,586,yes,no,cellular,11,jul,141,2,-1,0,unknown,no +37,blue-collar,married,primary,no,-196,yes,no,unknown,26,may,166,2,-1,0,unknown,no +45,blue-collar,married,primary,no,700,yes,no,telephone,13,may,29,4,-1,0,unknown,no +37,blue-collar,married,secondary,no,-67,no,no,cellular,2,feb,157,1,-1,0,unknown,no +48,management,married,tertiary,no,1600,no,no,cellular,18,nov,448,1,-1,0,unknown,no +42,services,married,secondary,no,508,yes,no,unknown,30,may,70,1,-1,0,unknown,no +49,technician,married,primary,no,486,no,no,telephone,7,jul,229,5,-1,0,unknown,no +36,management,single,tertiary,no,243,yes,no,cellular,7,may,160,2,360,3,failure,no +54,self-employed,married,secondary,no,203,yes,no,telephone,7,jul,238,8,-1,0,unknown,no +52,management,married,tertiary,no,1944,yes,no,cellular,15,apr,238,3,323,2,failure,no +30,management,married,tertiary,no,882,no,no,cellular,22,aug,102,6,-1,0,unknown,no +37,blue-collar,married,secondary,no,2924,no,no,cellular,31,jul,74,2,-1,0,unknown,no +31,unemployed,married,secondary,no,20,no,no,telephone,18,nov,52,1,-1,0,unknown,no +26,admin.,married,secondary,no,1417,yes,no,unknown,6,jun,60,3,-1,0,unknown,no +51,admin.,divorced,secondary,no,340,yes,no,unknown,8,may,186,1,-1,0,unknown,no +34,services,single,secondary,no,4062,yes,yes,cellular,15,may,29,1,-1,0,unknown,no +26,blue-collar,married,primary,no,133,no,yes,cellular,25,jul,57,3,-1,0,unknown,no +32,management,single,tertiary,no,0,yes,yes,cellular,17,nov,107,2,-1,0,unknown,no +38,services,married,secondary,no,8876,no,no,cellular,2,feb,280,1,75,1,failure,no +52,admin.,married,secondary,no,423,yes,yes,cellular,20,oct,139,2,96,7,failure,no +44,management,married,tertiary,no,58,yes,no,cellular,14,jul,72,3,-1,0,unknown,no +31,services,married,secondary,no,5,yes,no,unknown,16,may,216,1,-1,0,unknown,no +38,services,married,primary,no,175,no,no,unknown,17,jun,132,2,-1,0,unknown,no +32,housemaid,married,primary,no,1349,yes,no,cellular,7,aug,132,2,-1,0,unknown,no +41,blue-collar,married,primary,no,6596,yes,no,cellular,20,nov,88,1,-1,0,unknown,no +48,management,married,tertiary,no,1741,yes,yes,telephone,18,nov,40,1,-1,0,unknown,no +29,blue-collar,married,primary,no,25,yes,no,unknown,4,jun,188,2,-1,0,unknown,no +41,management,married,tertiary,no,0,yes,no,unknown,13,may,161,1,-1,0,unknown,no +49,management,married,tertiary,no,4374,yes,no,cellular,31,jul,68,3,-1,0,unknown,no +40,management,married,tertiary,no,16,no,yes,cellular,9,feb,47,4,-1,0,unknown,no +27,management,single,tertiary,no,574,yes,no,cellular,18,may,196,3,-1,0,unknown,no +45,blue-collar,single,secondary,no,615,yes,no,cellular,15,may,133,1,-1,0,unknown,no +48,entrepreneur,divorced,tertiary,no,0,yes,yes,unknown,20,jun,139,1,-1,0,unknown,no +31,services,married,secondary,no,395,no,no,cellular,25,jul,174,3,-1,0,unknown,no +45,blue-collar,married,primary,no,678,no,no,cellular,5,aug,104,3,-1,0,unknown,no +43,housemaid,married,primary,no,25,no,no,cellular,12,aug,121,2,-1,0,unknown,no +31,admin.,single,secondary,no,626,yes,no,unknown,21,may,211,1,-1,0,unknown,no +37,management,married,tertiary,no,165,no,no,cellular,24,aug,315,1,83,1,other,no +38,self-employed,married,secondary,no,746,no,no,unknown,20,jun,256,3,-1,0,unknown,no +29,services,married,secondary,no,376,no,yes,telephone,28,jan,49,3,183,4,failure,no +28,blue-collar,married,primary,no,-55,yes,no,unknown,7,may,361,2,-1,0,unknown,no +55,housemaid,divorced,primary,no,0,no,no,unknown,20,jun,398,2,-1,0,unknown,no +27,technician,divorced,secondary,no,21,yes,no,cellular,18,may,336,1,356,1,failure,no +43,self-employed,married,tertiary,no,3003,no,no,cellular,8,aug,358,3,-1,0,unknown,no +29,management,single,tertiary,no,92,no,no,cellular,2,jun,101,1,92,5,success,no +52,technician,divorced,secondary,no,511,no,yes,cellular,20,aug,98,4,-1,0,unknown,no +33,services,married,primary,no,6904,no,no,telephone,20,nov,114,2,-1,0,unknown,no +27,services,single,secondary,no,795,no,no,cellular,6,feb,101,3,-1,0,unknown,no +27,technician,single,secondary,no,0,no,no,cellular,6,feb,161,1,-1,0,unknown,no +31,management,married,tertiary,no,166,no,no,cellular,25,aug,392,6,-1,0,unknown,no +31,self-employed,married,secondary,no,157,yes,no,unknown,19,may,285,1,-1,0,unknown,no +45,technician,divorced,secondary,no,0,no,no,cellular,26,aug,64,2,-1,0,unknown,no +34,technician,single,secondary,no,0,no,no,cellular,28,aug,195,6,-1,0,unknown,no +48,management,divorced,tertiary,no,174,no,no,cellular,6,aug,290,2,-1,0,unknown,no +47,blue-collar,married,secondary,no,1536,yes,no,cellular,17,apr,41,1,301,4,other,no +49,services,married,secondary,no,1114,no,no,cellular,17,nov,283,1,-1,0,unknown,no +55,retired,divorced,tertiary,no,816,no,no,cellular,18,nov,113,3,-1,0,unknown,no +51,management,single,tertiary,no,1202,yes,no,cellular,18,nov,99,1,-1,0,unknown,no +37,management,single,tertiary,no,600,yes,no,cellular,17,nov,116,2,196,1,failure,no +33,technician,divorced,secondary,yes,6,no,no,cellular,22,aug,239,2,-1,0,unknown,no +33,blue-collar,married,unknown,no,2655,yes,no,cellular,21,nov,195,1,-1,0,unknown,no +29,management,single,tertiary,no,499,yes,no,cellular,15,may,338,1,-1,0,unknown,no +57,housemaid,divorced,primary,no,0,no,no,unknown,9,jun,97,1,-1,0,unknown,no +60,retired,married,secondary,no,197,no,no,cellular,7,oct,1386,1,-1,0,unknown,no +51,housemaid,married,primary,no,289,no,no,unknown,14,may,97,5,-1,0,unknown,no +45,technician,single,tertiary,no,5336,no,no,unknown,28,may,99,2,-1,0,unknown,no +45,admin.,married,secondary,no,434,no,no,cellular,26,aug,76,4,-1,0,unknown,no +39,management,married,tertiary,no,691,yes,yes,cellular,16,apr,517,1,255,1,failure,no +25,blue-collar,single,secondary,no,-250,yes,no,unknown,13,may,456,1,-1,0,unknown,no +47,blue-collar,married,secondary,no,3696,yes,no,cellular,19,nov,635,3,170,2,failure,no +34,blue-collar,married,secondary,no,2595,yes,yes,cellular,17,apr,126,1,336,2,other,no +40,unemployed,married,secondary,no,1077,yes,yes,cellular,17,nov,148,2,-1,0,unknown,no +48,blue-collar,divorced,secondary,no,501,yes,no,cellular,15,may,12,5,-1,0,unknown,no +39,technician,single,tertiary,no,21,yes,no,unknown,23,may,58,1,-1,0,unknown,no +38,services,married,secondary,no,797,yes,no,cellular,20,apr,62,4,-1,0,unknown,no +32,services,single,secondary,no,1659,yes,no,unknown,30,may,120,6,-1,0,unknown,no +27,entrepreneur,married,secondary,no,97,yes,yes,cellular,18,may,13,3,-1,0,unknown,no +47,blue-collar,married,primary,no,2,yes,yes,cellular,20,nov,661,4,190,1,failure,no +40,management,married,tertiary,no,384,no,no,cellular,20,apr,200,3,327,2,failure,no +41,technician,married,tertiary,no,63,no,no,cellular,25,aug,36,3,-1,0,unknown,no +40,admin.,married,secondary,no,1327,yes,yes,unknown,26,may,76,2,-1,0,unknown,no +39,blue-collar,married,secondary,no,284,yes,yes,cellular,17,apr,1426,2,318,6,failure,no +45,technician,married,secondary,no,3395,yes,no,cellular,18,nov,92,1,188,1,failure,no +31,services,single,secondary,no,2038,yes,no,unknown,20,may,148,1,-1,0,unknown,no +27,admin.,single,secondary,no,15,no,yes,cellular,21,jul,177,1,-1,0,unknown,no +56,blue-collar,single,secondary,no,1187,yes,no,cellular,5,feb,47,2,-1,0,unknown,no +39,admin.,married,secondary,no,3047,yes,no,cellular,11,may,279,1,370,2,failure,no +52,management,married,tertiary,no,11650,yes,no,cellular,17,nov,48,1,-1,0,unknown,no +58,management,single,tertiary,no,1387,yes,no,unknown,5,may,174,5,-1,0,unknown,no +48,technician,single,tertiary,no,0,no,no,unknown,16,jun,73,4,-1,0,unknown,no +33,blue-collar,single,secondary,no,1387,no,no,cellular,5,feb,185,1,-1,0,unknown,no +38,services,divorced,secondary,no,446,yes,no,unknown,18,jun,373,4,-1,0,unknown,no +42,technician,single,secondary,no,275,no,no,cellular,26,aug,31,8,-1,0,unknown,no +36,management,divorced,secondary,no,1655,yes,no,cellular,18,nov,155,2,-1,0,unknown,no +35,technician,single,secondary,no,196,yes,no,cellular,21,nov,318,1,-1,0,unknown,no +45,technician,single,tertiary,no,0,no,no,cellular,22,aug,87,4,-1,0,unknown,no +51,technician,married,secondary,no,1327,no,no,cellular,7,jul,21,2,-1,0,unknown,no +43,housemaid,married,primary,no,0,yes,no,cellular,25,aug,152,3,-1,0,unknown,no +45,technician,divorced,tertiary,no,206,no,no,cellular,13,aug,376,4,-1,0,unknown,no +30,admin.,single,secondary,no,523,no,yes,cellular,12,jun,136,3,101,1,success,no +40,management,married,tertiary,no,0,no,no,cellular,22,aug,61,4,-1,0,unknown,no +56,services,married,primary,no,444,yes,no,unknown,6,jun,432,1,-1,0,unknown,no +48,management,divorced,tertiary,no,1401,yes,no,unknown,20,jun,72,3,-1,0,unknown,no +32,admin.,married,secondary,no,205,no,no,cellular,18,jul,197,3,-1,0,unknown,no +47,admin.,single,secondary,no,3957,yes,no,telephone,11,may,58,3,334,3,other,no +30,technician,single,secondary,no,9645,no,yes,cellular,26,aug,130,10,-1,0,unknown,no +37,management,married,tertiary,no,620,yes,no,cellular,17,nov,93,3,-1,0,unknown,no +52,blue-collar,single,secondary,no,1541,yes,no,unknown,14,may,243,1,-1,0,unknown,no +49,retired,married,primary,no,-37,no,no,unknown,4,jul,191,2,-1,0,unknown,no +53,management,married,tertiary,no,-601,yes,no,unknown,30,may,509,2,-1,0,unknown,no +53,services,married,secondary,no,197,yes,no,cellular,17,apr,307,1,-1,0,unknown,no +34,technician,divorced,secondary,no,-276,yes,no,unknown,29,may,175,3,-1,0,unknown,no +40,admin.,married,secondary,no,824,yes,no,cellular,17,apr,359,1,-1,0,unknown,no +39,services,married,secondary,no,636,yes,no,telephone,12,may,15,1,-1,0,unknown,no +33,blue-collar,married,secondary,no,19,yes,no,cellular,4,feb,56,1,271,1,other,no +41,blue-collar,married,secondary,no,641,yes,no,unknown,13,may,161,1,-1,0,unknown,no +31,management,single,tertiary,no,2983,yes,no,cellular,2,jul,153,1,-1,0,unknown,no +45,services,divorced,secondary,no,0,yes,yes,cellular,21,nov,173,1,192,1,failure,no +23,admin.,single,secondary,no,252,yes,no,cellular,15,may,56,1,-1,0,unknown,no +51,management,divorced,tertiary,no,119,no,no,unknown,5,jun,112,2,-1,0,unknown,no +34,management,single,tertiary,no,171,yes,no,cellular,7,may,191,1,294,1,failure,no +36,management,married,tertiary,no,0,yes,no,unknown,27,may,145,2,-1,0,unknown,no +42,admin.,divorced,secondary,no,-249,yes,no,cellular,14,jul,149,3,-1,0,unknown,no +33,management,married,tertiary,no,455,yes,yes,unknown,29,may,122,10,-1,0,unknown,no +46,management,married,secondary,no,10,yes,no,cellular,29,jul,122,7,-1,0,unknown,no +37,admin.,married,secondary,no,529,yes,no,cellular,16,sep,234,1,149,2,other,no +33,management,single,tertiary,no,1859,yes,no,cellular,30,jan,1169,4,-1,0,unknown,no +30,admin.,single,secondary,no,613,yes,no,cellular,17,apr,180,2,302,1,failure,no +53,technician,divorced,secondary,no,751,yes,no,unknown,16,may,343,4,-1,0,unknown,no +46,management,married,secondary,no,0,no,no,cellular,27,aug,38,6,-1,0,unknown,no +35,management,married,tertiary,no,1471,yes,yes,cellular,13,aug,236,3,-1,0,unknown,no +36,technician,single,secondary,no,7503,yes,no,unknown,4,jun,25,1,-1,0,unknown,no +46,technician,married,secondary,no,68,yes,yes,unknown,16,jun,87,3,-1,0,unknown,no +31,blue-collar,single,secondary,no,530,no,yes,cellular,18,nov,251,2,-1,0,unknown,no +52,management,married,tertiary,no,1319,yes,no,cellular,17,nov,113,1,-1,0,unknown,no +48,admin.,single,secondary,no,479,yes,yes,unknown,18,jun,533,3,-1,0,unknown,no +45,blue-collar,married,primary,no,360,no,no,unknown,20,jun,98,2,-1,0,unknown,no +36,management,single,tertiary,no,2163,no,no,cellular,5,jun,317,1,-1,0,unknown,no +53,retired,married,primary,no,136,yes,no,unknown,6,may,267,2,-1,0,unknown,no +35,management,married,tertiary,no,-196,yes,no,cellular,22,jul,216,2,-1,0,unknown,no +44,management,married,tertiary,no,4087,yes,no,unknown,19,may,457,5,-1,0,unknown,no +38,management,married,tertiary,no,1354,yes,no,cellular,29,jan,50,2,-1,0,unknown,no +44,blue-collar,married,primary,no,2,no,yes,telephone,7,jul,46,2,-1,0,unknown,no +51,housemaid,married,unknown,no,2337,yes,no,cellular,27,may,133,2,41,5,success,no +32,technician,single,tertiary,no,514,yes,yes,cellular,7,may,138,1,168,1,failure,no +59,blue-collar,married,primary,no,6212,yes,no,cellular,5,may,574,2,-1,0,unknown,no +31,management,single,tertiary,no,424,no,yes,cellular,7,aug,224,2,-1,0,unknown,no +52,management,married,tertiary,no,499,no,no,cellular,6,aug,115,4,-1,0,unknown,no +26,technician,married,tertiary,no,8,yes,yes,unknown,13,may,262,2,-1,0,unknown,no +40,services,married,secondary,no,1305,no,no,cellular,22,jul,255,1,-1,0,unknown,no +35,technician,single,secondary,no,300,yes,no,unknown,9,may,338,4,-1,0,unknown,no +54,admin.,married,primary,no,976,yes,no,unknown,3,jun,137,3,-1,0,unknown,no +36,entrepreneur,married,tertiary,no,2700,no,no,cellular,4,feb,99,3,-1,0,unknown,no +45,self-employed,married,tertiary,no,-497,yes,yes,cellular,20,nov,260,1,-1,0,unknown,no +29,unemployed,single,secondary,no,2424,no,no,cellular,6,feb,93,1,-1,0,unknown,no +49,management,divorced,tertiary,no,-2049,yes,no,unknown,30,may,169,3,-1,0,unknown,no +52,services,married,secondary,no,2081,yes,no,unknown,29,may,150,1,-1,0,unknown,no +52,management,married,secondary,no,189,no,no,cellular,22,aug,90,2,-1,0,unknown,no +47,unemployed,divorced,secondary,no,0,no,yes,cellular,30,jan,127,2,233,8,other,no +33,services,divorced,secondary,no,327,yes,no,unknown,7,may,109,1,-1,0,unknown,no +30,technician,single,secondary,no,426,yes,no,telephone,17,nov,127,4,111,6,failure,no +52,self-employed,divorced,secondary,no,1291,yes,no,cellular,19,nov,559,1,169,2,failure,no +54,management,divorced,tertiary,no,3473,yes,no,cellular,12,aug,306,2,-1,0,unknown,no +59,retired,married,secondary,no,434,yes,no,unknown,12,may,63,3,-1,0,unknown,no +35,management,married,tertiary,no,105,yes,no,cellular,6,may,36,1,365,3,failure,no +29,blue-collar,married,secondary,no,975,yes,no,unknown,27,may,265,2,-1,0,unknown,no +33,technician,single,secondary,no,-479,no,no,cellular,7,aug,235,1,-1,0,unknown,no +32,technician,married,primary,no,62,yes,yes,unknown,13,may,120,1,-1,0,unknown,no +50,blue-collar,married,primary,no,0,no,no,unknown,9,jun,199,4,-1,0,unknown,no +54,entrepreneur,married,secondary,no,0,no,no,unknown,9,jun,96,1,-1,0,unknown,no +49,technician,single,secondary,no,1202,yes,no,unknown,18,jun,122,1,-1,0,unknown,no +39,admin.,single,secondary,no,2854,yes,no,unknown,2,jun,64,1,-1,0,unknown,no +34,management,single,tertiary,no,9,no,no,cellular,11,jul,439,2,-1,0,unknown,no +31,self-employed,single,secondary,no,203,no,yes,cellular,19,nov,177,1,-1,0,unknown,no +46,technician,divorced,tertiary,no,0,yes,no,cellular,11,aug,249,5,-1,0,unknown,no +59,retired,married,secondary,no,2467,no,no,cellular,20,nov,972,2,-1,0,unknown,no +32,technician,married,tertiary,no,3850,yes,no,cellular,20,apr,63,4,-1,0,unknown,no +39,admin.,married,secondary,no,47,yes,no,cellular,16,aug,143,2,371,6,failure,no +54,blue-collar,married,primary,no,1895,yes,no,cellular,17,apr,345,1,-1,0,unknown,no +33,technician,divorced,secondary,no,522,no,yes,cellular,7,jul,559,4,-1,0,unknown,no +59,blue-collar,married,secondary,yes,-918,yes,no,unknown,16,jun,253,2,-1,0,unknown,no +28,blue-collar,single,secondary,no,-193,no,no,cellular,18,jul,580,7,-1,0,unknown,no +48,blue-collar,married,secondary,no,48,yes,yes,unknown,29,may,144,1,-1,0,unknown,no +39,management,married,tertiary,no,0,yes,yes,cellular,17,jul,301,1,-1,0,unknown,no +41,technician,married,secondary,no,201,no,yes,cellular,14,jul,53,8,-1,0,unknown,no +33,admin.,single,secondary,no,598,yes,no,unknown,28,may,189,1,-1,0,unknown,no +37,management,married,primary,no,1506,no,no,cellular,2,nov,101,3,80,3,success,no +30,admin.,married,tertiary,no,26,yes,no,cellular,16,apr,62,1,323,1,failure,no +36,management,married,tertiary,no,1582,no,no,telephone,3,feb,26,2,197,1,failure,no +53,blue-collar,divorced,primary,no,559,no,no,telephone,9,feb,16,5,-1,0,unknown,no +26,admin.,single,secondary,yes,0,yes,no,cellular,16,jul,157,2,-1,0,unknown,no +59,retired,married,primary,no,-411,no,no,cellular,29,jan,225,1,-1,0,unknown,no +44,blue-collar,single,secondary,no,36,yes,no,unknown,8,may,712,1,-1,0,unknown,no +55,unemployed,married,secondary,no,512,no,no,cellular,28,jan,70,1,-1,0,unknown,no +26,blue-collar,single,secondary,no,786,yes,yes,unknown,14,may,103,5,-1,0,unknown,no +41,blue-collar,married,primary,no,3658,yes,no,cellular,9,apr,268,1,330,1,failure,no +28,management,single,tertiary,no,-227,yes,no,unknown,4,jun,298,2,-1,0,unknown,no +40,management,married,tertiary,no,423,yes,no,cellular,30,jul,134,24,-1,0,unknown,no +47,unemployed,divorced,secondary,no,947,no,no,cellular,5,feb,124,2,-1,0,unknown,no +39,services,married,primary,no,324,yes,no,cellular,8,may,340,2,312,4,failure,no +38,blue-collar,married,secondary,no,0,yes,no,unknown,9,jun,254,1,-1,0,unknown,no +37,services,married,secondary,no,1694,yes,yes,cellular,29,jan,404,2,251,6,failure,no +36,blue-collar,married,secondary,no,2894,yes,no,cellular,17,jul,747,1,-1,0,unknown,no +53,management,married,secondary,no,2693,no,no,cellular,21,nov,140,1,-1,0,unknown,no +47,technician,married,secondary,no,644,no,no,telephone,28,jan,54,3,160,13,failure,no +28,management,single,tertiary,no,185,no,no,cellular,30,jan,651,2,-1,0,unknown,no +32,student,single,unknown,no,1583,yes,no,unknown,20,may,57,1,-1,0,unknown,no +25,management,single,tertiary,no,2399,yes,no,unknown,3,jun,193,2,-1,0,unknown,no +39,admin.,married,tertiary,no,1322,yes,no,cellular,24,sep,157,3,486,1,other,no +60,retired,married,secondary,no,194,no,yes,cellular,30,jul,61,5,-1,0,unknown,no +39,admin.,married,secondary,no,1221,no,no,unknown,12,jun,97,1,-1,0,unknown,no +31,admin.,single,secondary,no,-302,yes,yes,unknown,27,may,235,5,-1,0,unknown,no +45,admin.,married,secondary,no,256,no,no,cellular,21,nov,135,2,-1,0,unknown,no +36,technician,single,secondary,yes,0,no,yes,cellular,26,aug,109,14,-1,0,unknown,no +44,services,married,secondary,no,1335,yes,no,cellular,30,jul,94,5,-1,0,unknown,no +33,unemployed,single,secondary,no,682,no,no,cellular,5,feb,251,1,-1,0,unknown,no +31,management,married,tertiary,no,0,no,no,cellular,26,aug,76,2,-1,0,unknown,no +38,admin.,divorced,secondary,no,3834,yes,no,cellular,13,apr,363,2,327,1,failure,no +50,self-employed,married,secondary,no,5312,no,no,cellular,23,jul,106,3,-1,0,unknown,no +40,management,divorced,unknown,no,4095,yes,no,cellular,20,apr,281,1,-1,0,unknown,no +33,technician,married,secondary,no,0,no,no,cellular,13,aug,78,2,-1,0,unknown,no +42,admin.,married,secondary,no,-1386,yes,yes,cellular,15,jul,56,4,-1,0,unknown,no +42,management,single,tertiary,no,525,no,no,cellular,13,aug,127,2,-1,0,unknown,no +33,blue-collar,married,secondary,yes,2,no,no,unknown,23,may,74,4,-1,0,unknown,no +40,technician,married,unknown,no,0,no,yes,cellular,7,jul,161,1,-1,0,unknown,no +52,blue-collar,married,secondary,no,1500,no,yes,unknown,20,jun,109,3,-1,0,unknown,no +49,technician,married,secondary,no,378,no,no,unknown,9,jun,189,2,-1,0,unknown,no +30,management,single,tertiary,no,552,yes,no,cellular,5,aug,648,2,-1,0,unknown,no +26,blue-collar,single,secondary,no,-84,yes,yes,cellular,29,jul,63,5,-1,0,unknown,no +40,management,married,secondary,no,-240,no,yes,unknown,28,may,160,3,-1,0,unknown,no +30,blue-collar,married,secondary,no,501,yes,yes,unknown,27,may,514,1,-1,0,unknown,no +55,unemployed,married,tertiary,no,5345,no,no,unknown,6,may,278,1,-1,0,unknown,no +48,self-employed,married,secondary,no,1559,no,no,cellular,24,dec,520,3,133,3,failure,no +28,technician,single,tertiary,no,0,yes,no,cellular,15,apr,217,2,-1,0,unknown,no +54,admin.,married,secondary,no,0,yes,yes,cellular,23,jul,117,1,-1,0,unknown,no +36,management,married,secondary,no,1989,no,no,unknown,17,jun,344,2,-1,0,unknown,no +34,admin.,single,secondary,no,598,yes,no,cellular,17,apr,365,1,324,1,failure,no +39,housemaid,married,tertiary,no,94,no,no,cellular,6,aug,181,2,-1,0,unknown,no +66,retired,married,secondary,no,3473,no,no,cellular,14,apr,441,2,-1,0,unknown,no +42,blue-collar,married,secondary,no,349,yes,no,cellular,7,apr,226,2,-1,0,unknown,no +55,retired,married,primary,no,3876,no,no,cellular,21,nov,54,1,-1,0,unknown,no +85,retired,married,unknown,no,1934,no,no,telephone,12,jan,140,1,-1,0,unknown,no +63,housemaid,married,secondary,no,2,no,no,cellular,4,feb,45,2,93,1,success,no +37,admin.,single,secondary,no,9,yes,no,cellular,14,may,165,1,-1,0,unknown,no +24,services,single,secondary,no,11,yes,no,unknown,27,jun,114,4,-1,0,unknown,no +34,technician,single,secondary,no,60,no,no,cellular,7,aug,274,2,-1,0,unknown,no +28,management,single,tertiary,no,882,no,yes,cellular,8,jul,107,2,-1,0,unknown,no +58,retired,divorced,tertiary,no,499,yes,yes,cellular,29,jan,181,1,-1,0,unknown,no +49,housemaid,divorced,primary,no,198,yes,no,unknown,13,may,205,3,-1,0,unknown,no +31,blue-collar,single,secondary,no,2093,no,no,cellular,7,jul,103,1,-1,0,unknown,no +56,retired,married,secondary,no,74,yes,no,unknown,26,may,152,2,-1,0,unknown,no +43,services,married,secondary,no,1220,no,no,cellular,28,jul,307,2,-1,0,unknown,no +32,blue-collar,single,secondary,no,1342,yes,no,unknown,23,may,109,2,-1,0,unknown,no +55,blue-collar,married,unknown,no,6134,no,no,cellular,6,aug,127,2,-1,0,unknown,no +55,housemaid,married,primary,no,3680,no,no,unknown,16,jun,131,1,-1,0,unknown,no +31,blue-collar,married,primary,no,605,yes,no,unknown,15,may,334,10,-1,0,unknown,no +49,management,married,secondary,no,104,yes,no,unknown,8,may,285,1,-1,0,unknown,no +41,admin.,married,secondary,no,683,no,yes,cellular,20,nov,77,1,-1,0,unknown,no +56,retired,divorced,primary,no,48,yes,no,cellular,14,may,132,2,-1,0,unknown,no +50,blue-collar,divorced,primary,no,15,yes,no,cellular,12,may,173,2,350,7,failure,no +37,technician,single,secondary,no,6714,yes,no,unknown,23,may,90,1,-1,0,unknown,no +35,blue-collar,married,primary,no,623,yes,no,cellular,6,may,97,2,-1,0,unknown,no +52,housemaid,married,secondary,no,234,no,no,cellular,20,nov,208,1,-1,0,unknown,no +33,technician,married,tertiary,no,599,yes,no,cellular,29,aug,461,2,-1,0,unknown,no +42,management,married,tertiary,no,9916,yes,no,cellular,21,nov,306,1,-1,0,unknown,no +33,admin.,single,secondary,no,3160,no,no,unknown,18,jun,719,13,-1,0,unknown,no +35,admin.,single,secondary,no,0,yes,no,cellular,8,may,376,3,-1,0,unknown,no +28,student,single,tertiary,no,2306,no,no,cellular,29,oct,140,2,-1,0,unknown,no +41,admin.,divorced,secondary,no,2550,yes,no,cellular,15,may,894,2,347,2,failure,no +44,blue-collar,married,secondary,no,701,no,yes,unknown,3,jul,269,2,-1,0,unknown,no +26,technician,single,secondary,no,3244,no,no,cellular,2,feb,141,1,5,1,failure,no +40,management,single,tertiary,no,402,yes,no,unknown,30,may,243,3,-1,0,unknown,no +37,management,married,tertiary,no,6014,yes,no,cellular,15,jul,163,6,-1,0,unknown,no +33,blue-collar,married,secondary,no,-81,yes,no,cellular,29,jan,339,2,-1,0,unknown,no +36,admin.,married,secondary,no,898,no,no,cellular,15,jul,118,5,-1,0,unknown,no +28,unemployed,married,secondary,no,863,yes,yes,unknown,27,may,355,1,-1,0,unknown,no +37,self-employed,single,primary,no,235,yes,no,cellular,17,apr,191,4,323,9,failure,no +32,technician,single,secondary,no,12,no,no,cellular,7,aug,173,2,-1,0,unknown,no +49,blue-collar,married,secondary,no,298,yes,no,cellular,30,apr,264,2,86,3,failure,no +36,blue-collar,married,secondary,no,3463,yes,no,telephone,21,nov,29,4,-1,0,unknown,no +39,housemaid,married,primary,no,13338,no,no,cellular,11,aug,103,4,-1,0,unknown,no +34,blue-collar,married,unknown,no,391,yes,yes,unknown,23,may,34,2,-1,0,unknown,no +32,technician,single,tertiary,no,569,no,yes,cellular,29,jan,348,1,-1,0,unknown,no +26,services,married,secondary,no,54,yes,no,unknown,13,may,116,1,-1,0,unknown,no +46,admin.,divorced,secondary,no,875,yes,yes,cellular,11,may,269,3,353,2,failure,no +78,retired,divorced,secondary,no,631,no,no,telephone,11,aug,95,1,-1,0,unknown,no +47,admin.,married,secondary,no,3434,yes,yes,telephone,9,jul,337,1,-1,0,unknown,no +80,retired,married,secondary,no,1610,no,no,cellular,12,aug,71,1,-1,0,unknown,no +25,student,single,tertiary,no,505,yes,no,cellular,6,may,37,1,-1,0,unknown,no +50,management,married,tertiary,no,11528,yes,no,unknown,30,may,57,1,-1,0,unknown,no +36,management,divorced,tertiary,no,102,yes,no,cellular,14,apr,114,1,-1,0,unknown,no +42,unemployed,married,primary,yes,-581,yes,no,cellular,13,may,224,1,370,2,failure,no +54,management,married,tertiary,no,0,yes,no,cellular,24,jul,140,2,-1,0,unknown,no +43,retired,married,primary,no,7298,no,no,unknown,11,jun,36,2,-1,0,unknown,no +29,blue-collar,married,secondary,no,0,no,no,cellular,10,jul,45,1,-1,0,unknown,no +36,management,married,tertiary,no,909,yes,yes,cellular,25,jul,250,3,-1,0,unknown,no +59,blue-collar,married,unknown,no,337,no,no,unknown,18,jun,100,4,-1,0,unknown,no +47,admin.,married,secondary,no,829,yes,yes,cellular,18,nov,48,1,188,1,failure,no +36,technician,single,secondary,no,301,yes,yes,cellular,29,jul,367,1,-1,0,unknown,no +56,technician,married,secondary,no,147,no,no,cellular,12,apr,203,1,-1,0,unknown,no +55,retired,divorced,secondary,no,282,yes,no,unknown,5,jun,99,2,-1,0,unknown,no +38,technician,divorced,secondary,no,1294,yes,no,unknown,29,may,565,1,-1,0,unknown,no +39,blue-collar,divorced,secondary,no,0,yes,no,cellular,11,may,275,2,307,1,other,no +35,management,single,tertiary,no,995,no,no,cellular,5,feb,39,1,-1,0,unknown,no +54,blue-collar,married,primary,no,532,no,no,telephone,31,jul,73,2,-1,0,unknown,no +32,services,single,tertiary,no,785,no,no,cellular,3,jun,273,1,-1,0,unknown,no +30,technician,divorced,secondary,no,3028,yes,no,cellular,28,aug,65,5,-1,0,unknown,no +51,blue-collar,married,secondary,no,1022,yes,no,cellular,8,may,311,3,-1,0,unknown,no +39,management,married,primary,no,0,no,no,unknown,11,jun,308,7,-1,0,unknown,no +46,technician,married,secondary,no,792,no,no,unknown,5,jun,170,2,-1,0,unknown,no +33,admin.,single,tertiary,no,490,yes,no,cellular,7,may,31,1,363,2,failure,no +34,management,married,tertiary,no,417,yes,no,cellular,18,nov,138,1,-1,0,unknown,no +33,management,married,tertiary,no,2071,no,no,cellular,8,aug,106,2,-1,0,unknown,no +55,blue-collar,single,primary,no,1187,yes,no,unknown,2,jun,193,2,-1,0,unknown,no +49,services,married,secondary,no,280,yes,no,telephone,14,jul,162,3,-1,0,unknown,no +37,unemployed,married,tertiary,no,1236,no,no,cellular,29,jul,300,2,-1,0,unknown,no +29,technician,single,tertiary,no,910,yes,no,cellular,11,may,278,1,-1,0,unknown,no +28,management,single,secondary,no,-994,yes,yes,cellular,18,jul,174,2,-1,0,unknown,no +21,unemployed,single,secondary,no,1333,no,no,cellular,2,feb,120,1,-1,0,unknown,no +44,services,married,secondary,no,850,no,yes,cellular,16,jul,220,5,-1,0,unknown,no +30,management,single,tertiary,no,3773,yes,no,unknown,27,may,99,1,-1,0,unknown,no +46,management,married,tertiary,no,460,no,no,cellular,28,jan,56,1,-1,0,unknown,no +33,entrepreneur,married,secondary,no,3140,yes,yes,cellular,21,nov,7,5,-1,0,unknown,no +40,blue-collar,married,secondary,no,1028,yes,yes,cellular,17,apr,319,1,-1,0,unknown,no +42,management,single,tertiary,no,4264,yes,no,unknown,28,may,882,1,-1,0,unknown,no +44,management,divorced,tertiary,no,3932,yes,no,unknown,8,may,40,2,-1,0,unknown,no +32,admin.,married,secondary,no,-1,no,no,cellular,8,jul,228,2,-1,0,unknown,no +34,blue-collar,married,secondary,no,1682,yes,yes,cellular,28,jul,123,3,-1,0,unknown,no +55,entrepreneur,married,secondary,no,814,no,yes,cellular,28,jul,69,12,-1,0,unknown,no +35,services,married,secondary,no,819,yes,no,telephone,14,jul,102,14,-1,0,unknown,no +47,admin.,married,secondary,no,1265,no,no,cellular,7,aug,137,2,-1,0,unknown,no +29,admin.,single,tertiary,no,514,no,no,cellular,2,feb,270,1,-1,0,unknown,no +47,services,married,secondary,no,1764,no,yes,cellular,26,aug,119,6,-1,0,unknown,no +39,blue-collar,married,primary,no,275,yes,no,unknown,16,jun,189,2,-1,0,unknown,no +40,blue-collar,married,primary,no,592,yes,no,cellular,18,may,80,3,350,2,failure,no +42,admin.,single,secondary,no,1143,yes,yes,telephone,17,nov,106,1,-1,0,unknown,no +31,management,married,tertiary,no,546,no,no,cellular,7,aug,147,2,-1,0,unknown,no +31,management,married,tertiary,no,1164,yes,yes,cellular,18,jul,238,3,-1,0,unknown,no +82,housemaid,divorced,primary,no,1381,no,no,cellular,28,jan,86,3,93,1,failure,no +44,management,divorced,tertiary,no,0,no,no,unknown,6,jun,373,1,-1,0,unknown,no +32,services,single,secondary,no,659,yes,no,cellular,20,apr,12,6,-1,0,unknown,no +40,technician,married,secondary,no,192,yes,yes,cellular,15,may,16,8,351,5,failure,no +26,admin.,single,secondary,no,-12,yes,no,unknown,4,jun,98,1,-1,0,unknown,no +30,admin.,single,secondary,no,186,yes,no,cellular,13,may,390,1,-1,0,unknown,no +45,blue-collar,married,secondary,no,2246,yes,yes,cellular,21,nov,197,2,99,2,other,no +32,management,single,tertiary,no,124,no,no,cellular,4,feb,87,2,-1,0,unknown,no +56,admin.,married,secondary,no,2087,yes,no,unknown,12,may,146,1,-1,0,unknown,no +58,blue-collar,married,secondary,no,1298,yes,no,unknown,29,may,516,4,-1,0,unknown,no +28,management,single,unknown,yes,101,yes,no,unknown,9,may,224,3,-1,0,unknown,no +43,management,married,tertiary,no,46,no,no,cellular,27,aug,63,8,-1,0,unknown,no +34,entrepreneur,divorced,tertiary,no,262,no,no,cellular,20,nov,371,1,-1,0,unknown,no +40,services,married,secondary,no,0,yes,no,cellular,21,nov,43,1,185,2,failure,no +31,self-employed,single,tertiary,no,17924,yes,no,cellular,21,nov,608,3,-1,0,unknown,no +28,admin.,married,tertiary,no,167,yes,yes,cellular,18,feb,126,2,-1,0,unknown,no +45,admin.,married,secondary,no,967,no,no,unknown,9,jun,63,1,-1,0,unknown,no +33,blue-collar,married,secondary,no,0,yes,no,telephone,14,jul,305,3,-1,0,unknown,no +42,admin.,married,primary,no,1547,yes,yes,unknown,27,may,272,3,-1,0,unknown,no +32,blue-collar,married,primary,no,388,yes,no,cellular,15,apr,171,2,-1,0,unknown,no +41,self-employed,married,secondary,no,1,no,no,cellular,19,aug,55,4,-1,0,unknown,no +32,admin.,married,secondary,no,0,no,no,cellular,25,jul,209,1,-1,0,unknown,no +37,unemployed,married,secondary,no,80,no,no,cellular,3,feb,248,2,-1,0,unknown,no +57,admin.,married,secondary,no,4168,yes,yes,unknown,16,may,47,1,-1,0,unknown,no +56,management,married,tertiary,no,0,no,no,cellular,19,nov,844,2,-1,0,unknown,no +37,admin.,single,secondary,no,781,no,no,cellular,20,aug,75,1,-1,0,unknown,no +34,admin.,married,secondary,no,804,yes,no,cellular,23,jul,256,9,-1,0,unknown,no +46,blue-collar,married,tertiary,no,993,yes,no,unknown,16,jun,78,1,-1,0,unknown,no +40,blue-collar,married,primary,no,34,yes,no,cellular,6,may,350,2,344,1,failure,no +32,technician,single,tertiary,no,0,no,no,cellular,20,aug,72,4,-1,0,unknown,no +28,admin.,single,secondary,no,520,yes,no,cellular,15,jun,29,1,-1,0,unknown,no +46,self-employed,married,secondary,no,567,no,no,cellular,18,jul,142,10,-1,0,unknown,no +44,management,married,tertiary,no,7177,no,no,unknown,19,jun,89,2,-1,0,unknown,no +55,management,divorced,primary,no,3629,yes,no,unknown,30,may,87,1,-1,0,unknown,no +75,retired,divorced,secondary,no,2199,no,no,telephone,13,nov,137,1,-1,0,unknown,no +41,management,married,tertiary,no,223,yes,no,unknown,16,may,124,1,-1,0,unknown,no +30,blue-collar,single,primary,no,185,no,no,unknown,26,jun,11,1,-1,0,unknown,no +33,entrepreneur,married,secondary,no,5809,yes,no,cellular,22,aug,219,4,-1,0,unknown,no +43,unemployed,married,secondary,no,210,yes,no,unknown,12,may,88,5,-1,0,unknown,no +49,self-employed,married,secondary,no,-199,yes,yes,cellular,29,jan,385,1,-1,0,unknown,no +32,blue-collar,married,secondary,no,897,yes,no,cellular,7,apr,293,3,322,2,failure,no +26,blue-collar,divorced,secondary,no,0,yes,no,unknown,19,may,48,3,-1,0,unknown,no +55,blue-collar,divorced,secondary,no,7378,no,no,unknown,14,may,316,3,-1,0,unknown,no +46,management,single,tertiary,no,593,yes,no,cellular,29,jan,190,3,-1,0,unknown,no +31,management,married,tertiary,no,1224,yes,yes,cellular,20,nov,75,2,119,2,success,no +34,management,married,tertiary,no,3031,no,no,cellular,14,aug,94,6,-1,0,unknown,no +37,blue-collar,married,primary,no,708,yes,no,telephone,2,feb,51,1,-1,0,unknown,no +29,technician,single,tertiary,no,542,yes,no,unknown,9,may,338,3,-1,0,unknown,no +24,admin.,single,tertiary,no,1141,yes,no,unknown,23,may,230,1,-1,0,unknown,no +46,admin.,married,secondary,no,-42,no,yes,telephone,28,jul,181,12,-1,0,unknown,no +41,management,married,tertiary,no,-556,yes,yes,unknown,26,may,127,3,-1,0,unknown,no +52,services,married,unknown,no,482,yes,yes,cellular,28,jul,83,7,-1,0,unknown,no +27,services,single,tertiary,no,1501,yes,no,cellular,24,jul,187,1,-1,0,unknown,no +44,management,married,tertiary,no,1850,yes,no,cellular,6,may,274,1,-1,0,unknown,no +39,technician,married,secondary,no,2266,no,no,cellular,22,may,86,1,93,4,success,no +52,housemaid,married,primary,no,3283,no,no,unknown,11,jun,553,1,-1,0,unknown,no +77,retired,single,primary,no,300,no,no,cellular,9,sep,511,1,-1,0,unknown,no +35,technician,married,secondary,no,1,yes,yes,unknown,21,may,85,1,-1,0,unknown,no +49,management,divorced,tertiary,no,178,no,no,cellular,6,aug,174,2,-1,0,unknown,no +37,housemaid,married,secondary,no,187,no,no,unknown,12,jun,165,1,-1,0,unknown,no +46,management,married,tertiary,no,229,yes,no,unknown,5,may,197,1,-1,0,unknown,no +43,entrepreneur,single,tertiary,no,42,no,no,cellular,7,jul,285,1,-1,0,unknown,no +35,blue-collar,married,primary,no,-367,yes,no,cellular,11,may,77,1,350,1,failure,no +29,admin.,single,tertiary,no,8,no,yes,cellular,2,mar,107,1,-1,0,unknown,no +52,housemaid,married,primary,no,256,no,no,cellular,6,aug,137,1,-1,0,unknown,no +55,management,married,secondary,no,2410,yes,no,cellular,17,nov,135,1,-1,0,unknown,no +33,technician,married,tertiary,no,2976,yes,no,cellular,9,nov,465,2,95,12,other,no +40,blue-collar,divorced,secondary,no,-426,no,yes,unknown,26,may,245,1,-1,0,unknown,no +39,blue-collar,married,secondary,no,39,yes,no,unknown,18,jun,34,6,-1,0,unknown,no +61,blue-collar,divorced,primary,no,1428,yes,no,unknown,5,may,82,2,-1,0,unknown,no +63,retired,married,secondary,no,2030,no,no,cellular,6,apr,61,6,-1,0,unknown,no +44,management,married,tertiary,no,-1636,yes,yes,cellular,11,may,257,1,-1,0,unknown,no +52,services,married,secondary,no,108,yes,no,unknown,15,may,543,12,-1,0,unknown,no +58,unemployed,single,tertiary,no,2094,no,no,cellular,1,jun,161,2,-1,0,unknown,no +38,admin.,married,secondary,no,47,yes,yes,cellular,31,jul,50,11,-1,0,unknown,no +51,housemaid,married,primary,no,618,yes,yes,cellular,4,feb,69,1,-1,0,unknown,no +29,self-employed,single,tertiary,no,162,no,yes,cellular,25,jul,324,1,-1,0,unknown,no +42,management,married,tertiary,no,-671,no,no,cellular,28,aug,80,2,-1,0,unknown,no +56,blue-collar,married,primary,no,136,no,no,cellular,4,aug,270,1,-1,0,unknown,no +55,technician,married,secondary,no,6958,yes,yes,unknown,13,may,178,2,-1,0,unknown,no +43,blue-collar,married,primary,no,953,yes,no,unknown,19,may,135,1,-1,0,unknown,no +27,blue-collar,married,secondary,no,821,yes,yes,unknown,16,sep,23,1,778,41,other,no +54,services,married,secondary,no,131,no,no,cellular,14,aug,252,2,-1,0,unknown,no +25,management,single,secondary,no,1272,yes,no,cellular,24,jul,342,2,-1,0,unknown,no +33,blue-collar,married,primary,no,-306,yes,yes,unknown,13,may,851,4,-1,0,unknown,no +46,admin.,divorced,secondary,no,3201,yes,no,telephone,13,may,157,3,-1,0,unknown,no +26,services,single,secondary,no,1114,no,no,cellular,9,feb,44,2,-1,0,unknown,no +30,admin.,married,tertiary,no,4168,no,no,cellular,3,jun,198,1,-1,0,unknown,no +39,technician,married,secondary,no,0,yes,no,unknown,5,may,203,1,-1,0,unknown,no +58,admin.,married,unknown,no,0,yes,no,cellular,17,nov,219,1,186,2,failure,no +49,blue-collar,married,secondary,no,3309,yes,no,cellular,15,may,349,2,-1,0,unknown,no +49,services,married,secondary,no,1377,yes,no,unknown,7,may,1101,1,-1,0,unknown,no +43,housemaid,married,secondary,no,150,no,no,telephone,28,jul,290,7,-1,0,unknown,no +60,management,married,tertiary,no,553,yes,no,cellular,2,feb,343,1,210,3,success,no +57,technician,married,secondary,no,458,no,yes,cellular,15,jul,177,3,-1,0,unknown,no +38,technician,married,secondary,no,565,no,no,cellular,20,aug,93,2,-1,0,unknown,no +56,technician,married,secondary,no,0,yes,yes,cellular,29,apr,152,1,223,3,other,no +45,self-employed,married,secondary,no,2278,no,no,unknown,17,nov,1735,2,-1,0,unknown,no +45,management,married,tertiary,no,210,yes,no,cellular,21,jul,623,1,-1,0,unknown,no +44,blue-collar,married,unknown,no,15578,yes,no,unknown,29,may,401,1,-1,0,unknown,no +40,blue-collar,married,primary,no,236,yes,no,unknown,20,may,167,2,-1,0,unknown,no +38,management,single,tertiary,no,1704,no,no,cellular,1,sep,222,1,-1,0,unknown,no +55,admin.,divorced,secondary,no,1693,no,no,cellular,10,aug,247,1,102,3,success,no +40,technician,married,secondary,no,372,yes,no,cellular,21,nov,365,1,100,2,failure,no +35,blue-collar,single,primary,no,1147,yes,yes,telephone,7,may,29,1,-1,0,unknown,no +32,blue-collar,married,secondary,no,3166,yes,no,cellular,20,nov,418,3,-1,0,unknown,no +31,self-employed,married,primary,no,1074,yes,no,unknown,23,may,1438,2,-1,0,unknown,no +49,blue-collar,divorced,secondary,no,23,no,no,cellular,17,nov,221,2,-1,0,unknown,no +55,retired,married,secondary,no,1431,no,yes,cellular,28,jan,107,1,-1,0,unknown,no +51,blue-collar,married,secondary,no,814,yes,no,cellular,14,may,17,8,-1,0,unknown,no +30,unemployed,married,secondary,no,142,yes,no,unknown,20,may,350,4,-1,0,unknown,no +37,admin.,single,secondary,no,810,yes,no,cellular,8,apr,376,1,295,1,failure,no +36,management,married,tertiary,no,1604,yes,no,unknown,11,jun,47,3,-1,0,unknown,no +51,management,divorced,tertiary,no,0,yes,no,cellular,28,jul,534,4,-1,0,unknown,no +29,admin.,single,secondary,no,488,yes,no,cellular,4,jun,105,1,-1,0,unknown,no +32,student,single,unknown,no,4110,no,no,cellular,6,feb,119,8,-1,0,unknown,no +36,services,married,secondary,no,1746,yes,no,cellular,7,apr,15,1,316,1,failure,no +32,blue-collar,married,secondary,no,-208,yes,yes,unknown,9,may,325,1,-1,0,unknown,no +56,retired,married,primary,no,152,yes,yes,cellular,30,jul,65,7,-1,0,unknown,no +46,services,married,secondary,no,0,no,no,cellular,18,aug,74,4,-1,0,unknown,no +39,admin.,divorced,secondary,no,399,yes,yes,cellular,14,aug,133,2,-1,0,unknown,no +57,retired,married,primary,no,318,no,no,cellular,22,aug,371,4,-1,0,unknown,no +53,management,married,tertiary,no,9072,no,no,cellular,18,nov,117,2,-1,0,unknown,no +33,technician,married,secondary,no,3071,yes,yes,cellular,21,jul,323,1,-1,0,unknown,no +43,blue-collar,divorced,primary,no,177,no,no,cellular,3,feb,124,1,-1,0,unknown,no +40,management,married,tertiary,no,10786,no,no,unknown,20,jun,111,3,-1,0,unknown,no +44,admin.,married,secondary,yes,0,no,yes,unknown,30,jun,76,3,-1,0,unknown,no +59,admin.,married,primary,no,879,yes,no,cellular,30,jan,126,5,259,7,failure,no +59,retired,married,secondary,no,1887,no,no,cellular,28,aug,88,8,-1,0,unknown,no +28,services,single,secondary,no,3331,yes,no,unknown,28,may,229,2,-1,0,unknown,no +26,management,single,tertiary,no,3,yes,no,cellular,23,jul,106,1,-1,0,unknown,no +59,management,single,tertiary,no,7668,no,no,cellular,5,aug,124,1,-1,0,unknown,no +78,retired,divorced,primary,no,55,no,no,telephone,5,nov,143,3,90,1,other,no +33,services,married,primary,no,0,yes,no,cellular,7,may,227,2,-1,0,unknown,no +38,blue-collar,divorced,secondary,no,2998,yes,no,unknown,11,jun,91,1,-1,0,unknown,no +35,self-employed,married,secondary,no,524,yes,no,cellular,21,nov,484,4,-1,0,unknown,no +30,technician,single,tertiary,no,106,yes,no,cellular,13,may,119,3,-1,0,unknown,no +31,services,single,secondary,no,85,no,no,cellular,16,jul,151,1,-1,0,unknown,no +35,technician,married,secondary,no,249,no,no,cellular,21,aug,205,8,-1,0,unknown,no +45,management,married,tertiary,no,10,no,no,cellular,26,aug,133,7,-1,0,unknown,no +40,admin.,married,secondary,no,523,yes,yes,unknown,8,may,598,3,-1,0,unknown,no +50,services,married,secondary,no,1321,no,no,unknown,17,jun,271,2,-1,0,unknown,no +29,admin.,single,secondary,no,-194,yes,no,cellular,7,may,127,1,-1,0,unknown,no +41,unemployed,single,tertiary,no,4517,yes,no,cellular,20,nov,137,1,-1,0,unknown,no +44,technician,married,tertiary,no,964,no,no,cellular,29,jul,158,2,-1,0,unknown,no +29,unknown,single,secondary,no,923,no,no,cellular,26,may,333,1,-1,0,unknown,no +49,technician,divorced,secondary,no,2677,yes,yes,cellular,31,jul,67,3,-1,0,unknown,no +30,admin.,single,secondary,no,873,no,no,cellular,7,oct,301,1,216,2,failure,no +37,blue-collar,married,unknown,no,-1050,yes,no,unknown,2,jun,548,2,-1,0,unknown,no +52,admin.,divorced,secondary,no,361,no,yes,cellular,20,nov,147,1,-1,0,unknown,no +30,management,single,tertiary,no,1466,no,no,cellular,12,aug,111,4,-1,0,unknown,no +40,admin.,single,secondary,no,782,yes,no,cellular,21,dec,94,5,202,17,failure,no +33,blue-collar,married,secondary,no,3576,yes,no,cellular,2,apr,124,1,308,2,other,no +34,self-employed,single,secondary,no,3,yes,no,unknown,5,may,301,1,-1,0,unknown,no +33,blue-collar,married,secondary,no,-112,yes,no,unknown,28,may,132,1,-1,0,unknown,no +35,unemployed,married,secondary,no,759,no,no,cellular,19,nov,556,3,-1,0,unknown,no +54,management,married,tertiary,no,195,no,yes,cellular,4,feb,47,1,265,6,other,no +32,services,married,secondary,no,15,yes,no,cellular,15,may,391,1,-1,0,unknown,no +32,technician,married,tertiary,no,-1053,yes,no,cellular,21,jul,357,3,-1,0,unknown,no +44,management,married,secondary,no,488,no,yes,cellular,29,jan,138,2,183,11,failure,no +53,technician,married,secondary,no,287,no,no,telephone,6,feb,13,5,-1,0,unknown,no +53,admin.,married,secondary,no,578,no,no,cellular,29,aug,59,2,-1,0,unknown,no +40,management,single,tertiary,no,1509,no,no,cellular,12,may,333,1,58,3,failure,no +29,admin.,single,secondary,no,3794,no,no,cellular,30,apr,249,1,-1,0,unknown,no +36,housemaid,married,primary,no,4324,yes,no,cellular,14,jul,565,4,-1,0,unknown,no +40,blue-collar,divorced,secondary,no,793,yes,no,unknown,15,may,109,1,-1,0,unknown,no +58,services,married,primary,no,943,yes,no,unknown,3,jun,243,3,-1,0,unknown,no +34,management,married,tertiary,no,0,yes,yes,cellular,10,jul,129,1,-1,0,unknown,no +60,blue-collar,married,secondary,no,19447,yes,no,telephone,9,jul,196,1,-1,0,unknown,no +23,student,single,unknown,no,565,no,no,cellular,28,may,162,7,-1,0,unknown,no +59,unknown,married,unknown,no,1541,no,no,cellular,5,aug,790,1,-1,0,unknown,no +42,technician,married,tertiary,no,1079,no,no,cellular,31,jul,61,2,-1,0,unknown,no +50,management,married,tertiary,no,0,no,no,cellular,10,aug,232,3,130,3,other,no +31,management,single,secondary,no,1310,yes,no,cellular,18,may,12,2,-1,0,unknown,no +31,management,single,tertiary,no,98,no,no,cellular,11,aug,69,2,-1,0,unknown,no +28,admin.,married,secondary,no,5,yes,no,cellular,18,jul,121,1,-1,0,unknown,no +56,admin.,married,primary,no,0,yes,no,cellular,3,apr,353,2,227,4,failure,no +23,student,single,secondary,no,9216,no,no,cellular,5,jun,471,2,-1,0,unknown,no +30,entrepreneur,married,secondary,no,2551,yes,no,unknown,5,jun,142,2,-1,0,unknown,no +54,technician,married,secondary,no,0,no,no,telephone,14,aug,159,2,106,6,success,no +35,blue-collar,married,secondary,no,154,yes,no,unknown,23,may,211,4,-1,0,unknown,no +29,admin.,married,secondary,no,-150,yes,no,unknown,6,may,328,1,-1,0,unknown,no +48,management,married,primary,no,427,no,no,cellular,17,nov,62,1,-1,0,unknown,no +43,admin.,single,tertiary,no,664,yes,no,cellular,17,apr,119,1,-1,0,unknown,no +40,management,single,tertiary,no,0,no,no,cellular,26,aug,58,7,-1,0,unknown,no +38,entrepreneur,married,secondary,no,680,yes,no,unknown,19,may,144,2,-1,0,unknown,no +30,admin.,married,secondary,no,4,no,no,unknown,20,jun,7,2,-1,0,unknown,no +60,blue-collar,married,secondary,no,196,no,no,unknown,20,jun,583,3,-1,0,unknown,no +31,entrepreneur,divorced,secondary,no,290,yes,no,cellular,13,apr,230,1,-1,0,unknown,no +28,student,single,tertiary,no,221,yes,no,cellular,15,may,176,1,-1,0,unknown,no +31,technician,married,secondary,no,180,no,no,cellular,26,may,222,1,70,2,success,no +48,services,single,primary,no,-139,no,no,cellular,13,may,75,2,-1,0,unknown,no +36,blue-collar,single,primary,no,79,no,no,unknown,20,jun,9,3,-1,0,unknown,no +41,management,divorced,tertiary,no,236,no,no,cellular,3,feb,159,2,-1,0,unknown,no +35,management,single,tertiary,no,1120,no,no,unknown,21,sep,4,1,771,2,success,no +51,management,divorced,tertiary,no,-2282,yes,yes,cellular,14,jul,301,6,-1,0,unknown,no +35,blue-collar,married,secondary,no,2200,yes,no,cellular,17,apr,14,1,-1,0,unknown,no +51,management,single,unknown,no,-461,yes,no,unknown,28,may,33,2,-1,0,unknown,no +56,blue-collar,married,secondary,no,385,no,no,cellular,20,aug,210,3,-1,0,unknown,no +59,retired,married,secondary,no,2291,no,yes,cellular,14,jul,127,3,-1,0,unknown,no +27,services,married,secondary,no,54,yes,no,cellular,18,may,97,1,370,1,failure,no +48,services,married,secondary,no,2850,yes,no,cellular,6,aug,107,3,-1,0,unknown,no +24,admin.,single,secondary,no,1235,yes,yes,unknown,30,may,76,3,-1,0,unknown,no +56,admin.,married,secondary,no,360,yes,yes,cellular,24,jul,98,2,-1,0,unknown,no +34,management,married,tertiary,no,1352,no,no,cellular,8,aug,265,2,-1,0,unknown,no +35,technician,married,secondary,no,905,no,yes,cellular,21,aug,114,2,-1,0,unknown,no +57,retired,married,tertiary,no,138,no,no,unknown,26,may,157,5,-1,0,unknown,no +30,blue-collar,single,secondary,no,0,yes,no,cellular,14,jul,768,2,-1,0,unknown,no +40,admin.,divorced,secondary,no,221,yes,no,unknown,13,may,154,2,-1,0,unknown,no +48,blue-collar,married,primary,no,-254,no,yes,cellular,29,aug,134,4,-1,0,unknown,no +35,management,married,tertiary,no,1510,yes,no,unknown,9,may,61,1,-1,0,unknown,no +46,services,married,secondary,no,1757,yes,no,unknown,14,may,380,4,-1,0,unknown,no +30,blue-collar,married,primary,no,0,yes,no,cellular,6,may,239,2,-1,0,unknown,no +37,services,single,secondary,no,934,yes,no,unknown,16,may,242,3,-1,0,unknown,no +30,unemployed,married,tertiary,no,0,yes,no,cellular,18,nov,756,1,-1,0,unknown,no +46,management,married,tertiary,no,1217,yes,no,unknown,15,may,236,1,-1,0,unknown,no +43,blue-collar,divorced,primary,no,-57,yes,no,unknown,16,may,221,2,-1,0,unknown,no +40,blue-collar,single,secondary,no,82,yes,no,cellular,13,may,135,6,370,5,failure,no +34,unemployed,married,secondary,no,438,yes,yes,cellular,9,apr,272,1,323,1,failure,no +43,admin.,divorced,secondary,no,729,yes,no,unknown,30,may,668,2,-1,0,unknown,no +31,services,married,secondary,no,0,yes,no,cellular,29,jan,224,2,-1,0,unknown,no +37,blue-collar,married,secondary,no,374,yes,no,unknown,7,may,944,3,-1,0,unknown,no +49,self-employed,single,tertiary,no,-341,no,yes,cellular,18,nov,920,2,-1,0,unknown,no +38,blue-collar,married,secondary,no,-367,yes,yes,cellular,12,may,354,1,-1,0,unknown,no +27,admin.,single,secondary,no,592,yes,yes,cellular,5,feb,466,3,-1,0,unknown,no +35,management,divorced,tertiary,no,457,yes,no,cellular,5,feb,114,3,-1,0,unknown,no +47,unemployed,single,secondary,no,4819,no,no,cellular,18,nov,144,1,-1,0,unknown,no +56,blue-collar,married,primary,no,-85,yes,yes,unknown,26,may,118,1,-1,0,unknown,no +26,self-employed,single,secondary,no,467,yes,yes,unknown,4,jun,90,2,-1,0,unknown,no +29,admin.,single,secondary,no,-309,yes,yes,unknown,4,jun,215,1,-1,0,unknown,no +53,blue-collar,married,secondary,no,21522,no,no,unknown,24,jun,146,4,-1,0,unknown,no +38,blue-collar,married,primary,no,467,yes,no,unknown,16,may,379,1,-1,0,unknown,no +33,blue-collar,married,tertiary,no,870,no,yes,cellular,8,jul,545,3,-1,0,unknown,no +30,blue-collar,single,secondary,no,-93,yes,no,unknown,27,may,149,2,-1,0,unknown,no +36,admin.,married,secondary,no,75,yes,no,unknown,4,jul,52,4,-1,0,unknown,no +37,blue-collar,single,secondary,no,292,no,no,unknown,8,sep,9,1,-1,0,unknown,no +60,blue-collar,married,secondary,no,0,no,yes,unknown,5,jun,124,1,-1,0,unknown,no +48,management,married,tertiary,no,263,yes,no,unknown,5,may,350,2,-1,0,unknown,no +32,management,married,tertiary,no,134,no,yes,cellular,29,aug,162,2,-1,0,unknown,no +31,self-employed,single,tertiary,no,91,no,no,unknown,23,may,206,1,-1,0,unknown,no +54,management,married,tertiary,no,0,no,yes,cellular,19,nov,307,3,-1,0,unknown,no +31,self-employed,married,tertiary,no,229,no,no,cellular,29,jan,184,1,-1,0,unknown,no +31,blue-collar,married,secondary,no,892,yes,no,cellular,29,jul,25,22,-1,0,unknown,no +29,services,single,secondary,no,197,yes,no,cellular,5,may,19,2,-1,0,unknown,no +23,blue-collar,married,primary,no,-213,no,no,unknown,13,may,165,2,-1,0,unknown,no +51,management,married,tertiary,no,-321,no,no,cellular,6,feb,470,2,9,2,other,no +32,blue-collar,single,secondary,no,604,no,no,cellular,30,jan,410,2,196,2,other,no +48,management,married,primary,no,606,no,no,cellular,5,mar,77,6,-1,0,unknown,no +32,blue-collar,married,primary,no,1518,yes,no,telephone,6,feb,35,3,-1,0,unknown,no +44,housemaid,married,secondary,no,192,no,no,unknown,11,jun,232,2,-1,0,unknown,no +35,management,married,tertiary,no,0,yes,yes,cellular,25,jul,86,4,-1,0,unknown,no +46,technician,married,secondary,yes,289,no,no,unknown,7,may,51,3,-1,0,unknown,no +31,admin.,married,secondary,no,535,no,no,unknown,9,may,249,3,-1,0,unknown,no +31,blue-collar,single,secondary,no,33,yes,no,unknown,15,may,214,4,-1,0,unknown,no +36,blue-collar,married,primary,no,243,yes,yes,unknown,30,may,118,2,-1,0,unknown,no +35,services,married,tertiary,no,0,yes,no,unknown,2,jun,312,2,-1,0,unknown,no +35,services,married,secondary,no,1279,yes,no,unknown,16,jun,114,5,-1,0,unknown,no +36,technician,married,tertiary,no,1327,no,no,cellular,29,oct,174,2,-1,0,unknown,no +52,blue-collar,married,tertiary,no,297,yes,no,cellular,18,nov,62,2,195,1,failure,no +27,technician,single,secondary,no,740,yes,no,cellular,5,may,294,1,-1,0,unknown,no +47,services,married,secondary,no,278,yes,no,cellular,7,may,51,1,366,1,other,no +43,unemployed,married,secondary,no,553,no,no,telephone,4,feb,125,1,-1,0,unknown,no +41,entrepreneur,married,primary,no,406,no,no,unknown,6,jun,272,1,-1,0,unknown,no +18,student,single,secondary,no,5,no,no,cellular,24,aug,143,2,-1,0,unknown,no +45,blue-collar,married,secondary,no,2071,no,yes,telephone,22,jul,1148,2,-1,0,unknown,no +41,technician,married,secondary,no,0,no,no,cellular,28,jan,411,2,156,8,other,no +34,technician,married,tertiary,no,932,yes,no,cellular,4,jun,218,1,-1,0,unknown,no +46,services,married,secondary,no,-119,yes,no,cellular,22,jul,151,3,-1,0,unknown,no +38,technician,married,secondary,no,381,yes,no,unknown,29,may,126,2,-1,0,unknown,no +23,services,married,secondary,no,1309,yes,no,unknown,3,jun,349,2,-1,0,unknown,no +73,retired,married,primary,no,542,no,no,telephone,29,apr,107,5,-1,0,unknown,no +41,technician,married,unknown,no,30,yes,no,cellular,10,jul,151,1,-1,0,unknown,no +43,management,single,tertiary,no,0,no,no,cellular,11,aug,155,2,-1,0,unknown,no +51,management,married,tertiary,no,-15,no,no,cellular,25,jul,212,2,-1,0,unknown,no +45,services,married,unknown,no,318,no,no,cellular,16,jul,63,2,-1,0,unknown,no +47,housemaid,divorced,primary,no,1405,no,no,unknown,12,jun,127,1,-1,0,unknown,no +35,blue-collar,married,tertiary,no,5271,yes,no,cellular,14,apr,119,2,-1,0,unknown,no +38,admin.,divorced,secondary,no,-51,no,yes,cellular,30,jan,102,1,-1,0,unknown,no +31,management,married,tertiary,no,3914,no,yes,cellular,29,jan,266,1,-1,0,unknown,no +49,entrepreneur,married,tertiary,no,4976,yes,no,cellular,21,nov,105,1,-1,0,unknown,no +29,blue-collar,single,secondary,no,16,no,no,unknown,12,may,197,3,-1,0,unknown,no +39,admin.,married,secondary,no,1595,yes,no,unknown,5,jun,102,2,-1,0,unknown,no +41,entrepreneur,married,tertiary,no,306,yes,no,unknown,20,jun,102,3,-1,0,unknown,no +34,blue-collar,single,secondary,no,215,no,no,cellular,5,jun,329,1,94,3,success,no +39,management,single,tertiary,no,0,yes,no,cellular,12,may,561,4,369,3,failure,no +78,retired,divorced,unknown,no,2628,no,no,telephone,14,apr,129,2,-1,0,unknown,no +33,management,married,tertiary,no,1778,no,no,cellular,26,may,134,1,103,1,success,no +59,retired,married,primary,no,1423,yes,no,unknown,15,may,584,2,-1,0,unknown,no +52,management,married,tertiary,no,659,no,no,cellular,23,jul,517,4,-1,0,unknown,no +35,entrepreneur,married,tertiary,no,-31,yes,no,cellular,21,nov,171,2,-1,0,unknown,no +43,admin.,married,secondary,yes,-204,yes,no,unknown,26,may,163,2,-1,0,unknown,no +43,technician,single,secondary,no,1462,no,no,unknown,9,jun,75,2,-1,0,unknown,no +36,blue-collar,married,secondary,no,723,yes,no,cellular,31,jul,101,2,-1,0,unknown,no +36,admin.,single,tertiary,no,3954,yes,no,unknown,21,may,432,1,-1,0,unknown,no +45,unemployed,single,secondary,no,33,no,no,cellular,5,feb,437,1,-1,0,unknown,no +47,management,married,primary,no,4151,yes,no,unknown,14,may,114,1,-1,0,unknown,no +38,admin.,divorced,secondary,yes,0,no,yes,cellular,21,jul,126,3,-1,0,unknown,no +45,entrepreneur,married,tertiary,no,219,yes,yes,cellular,28,jul,118,4,-1,0,unknown,no +33,technician,married,tertiary,no,2728,no,no,cellular,5,aug,295,2,-1,0,unknown,no +38,management,divorced,tertiary,no,76,no,no,cellular,30,jan,220,3,-1,0,unknown,no +36,technician,married,tertiary,no,4388,no,no,cellular,8,aug,52,3,-1,0,unknown,no +38,blue-collar,married,secondary,no,-210,yes,no,unknown,8,may,21,1,-1,0,unknown,no +34,self-employed,married,tertiary,no,2427,no,no,telephone,11,aug,90,3,70,3,failure,no +32,admin.,single,secondary,no,45,yes,yes,cellular,14,may,908,3,344,7,other,no +49,technician,married,secondary,yes,-74,yes,no,cellular,19,nov,114,1,-1,0,unknown,no +37,management,single,tertiary,no,2173,no,no,cellular,21,nov,158,3,114,1,failure,no +47,technician,divorced,tertiary,no,8422,no,no,cellular,8,aug,200,4,-1,0,unknown,no +28,self-employed,married,tertiary,no,120,yes,yes,unknown,8,may,130,3,-1,0,unknown,no +29,admin.,divorced,secondary,no,1320,yes,yes,unknown,8,may,489,1,-1,0,unknown,no +30,services,single,secondary,no,245,no,yes,cellular,8,jul,187,2,-1,0,unknown,no +34,admin.,divorced,primary,no,9569,yes,no,unknown,9,may,43,2,-1,0,unknown,no +39,technician,single,unknown,no,0,yes,no,unknown,7,may,130,1,-1,0,unknown,no +26,blue-collar,married,secondary,no,2770,yes,no,unknown,8,may,141,1,-1,0,unknown,no +38,technician,divorced,secondary,no,1221,yes,yes,cellular,18,aug,73,7,-1,0,unknown,no +47,admin.,married,secondary,no,298,yes,no,cellular,11,may,183,1,-1,0,unknown,no +61,management,married,secondary,no,967,no,no,cellular,20,aug,180,1,-1,0,unknown,no +35,technician,married,secondary,no,0,no,no,cellular,14,jul,125,2,-1,0,unknown,no +34,admin.,married,secondary,no,0,yes,no,cellular,9,feb,30,4,-1,0,unknown,no +34,entrepreneur,married,secondary,no,1368,yes,no,cellular,18,nov,252,2,-1,0,unknown,no +56,technician,single,secondary,no,751,yes,no,cellular,15,may,43,8,177,5,failure,no +47,services,married,secondary,no,2597,yes,no,unknown,16,may,323,1,-1,0,unknown,no +36,unemployed,married,secondary,no,-35,no,no,cellular,30,jan,339,3,-1,0,unknown,no +43,technician,married,secondary,no,629,no,no,cellular,5,aug,196,1,-1,0,unknown,no +51,admin.,married,primary,no,1330,yes,no,unknown,15,may,415,8,-1,0,unknown,no +40,technician,single,secondary,no,277,yes,no,unknown,14,may,274,2,-1,0,unknown,no +38,services,married,tertiary,no,1018,no,no,unknown,16,jun,325,3,-1,0,unknown,no +34,management,married,tertiary,no,11,yes,no,cellular,17,jul,654,1,-1,0,unknown,no +47,self-employed,married,tertiary,no,0,no,no,telephone,21,nov,28,1,-1,0,unknown,no +57,entrepreneur,married,secondary,no,905,no,no,cellular,7,aug,121,1,-1,0,unknown,no +35,technician,married,secondary,no,15474,no,no,cellular,21,nov,89,1,92,2,other,no +45,management,married,tertiary,no,54,yes,no,telephone,13,may,107,3,-1,0,unknown,no +55,unemployed,married,secondary,no,-246,no,yes,cellular,8,jul,305,2,-1,0,unknown,no +54,management,married,secondary,no,0,no,no,cellular,19,nov,106,1,-1,0,unknown,no +39,services,married,primary,no,1951,yes,no,unknown,23,may,208,2,-1,0,unknown,no +58,services,married,primary,no,65,no,no,unknown,27,jun,162,1,-1,0,unknown,no +31,admin.,married,secondary,no,368,yes,no,cellular,5,may,414,5,361,3,other,no +35,blue-collar,married,primary,no,51,yes,no,unknown,28,may,593,2,-1,0,unknown,no +45,technician,married,secondary,no,3492,yes,yes,unknown,20,jun,46,4,-1,0,unknown,no +44,admin.,divorced,secondary,no,21,yes,no,cellular,13,apr,681,3,-1,0,unknown,no +57,blue-collar,married,primary,no,8403,no,no,unknown,20,jun,11,11,-1,0,unknown,no +41,technician,married,secondary,no,978,no,no,cellular,29,jul,55,2,-1,0,unknown,no +42,blue-collar,married,secondary,no,165,yes,no,unknown,23,may,333,2,-1,0,unknown,no +49,technician,single,unknown,no,350,no,no,cellular,28,jan,91,3,-1,0,unknown,no +52,self-employed,divorced,secondary,no,385,no,yes,cellular,26,aug,96,4,-1,0,unknown,no +57,blue-collar,married,secondary,no,2058,yes,no,telephone,18,may,23,2,-1,0,unknown,no +29,management,single,tertiary,no,-11,yes,no,cellular,14,may,164,2,-1,0,unknown,no +34,blue-collar,single,primary,no,505,yes,no,unknown,13,may,351,1,-1,0,unknown,no +36,management,married,tertiary,no,-547,yes,no,cellular,30,apr,267,1,259,2,failure,no +39,management,married,tertiary,no,562,no,no,cellular,13,sep,303,2,-1,0,unknown,no +53,blue-collar,divorced,primary,no,4222,no,no,unknown,9,jun,112,1,-1,0,unknown,no +40,services,married,secondary,no,105,yes,no,cellular,9,jul,161,1,-1,0,unknown,no +38,services,single,secondary,no,0,yes,no,unknown,27,may,166,2,-1,0,unknown,no +34,admin.,single,secondary,no,66,yes,no,unknown,26,may,237,1,-1,0,unknown,no +40,services,married,secondary,no,0,yes,yes,cellular,2,feb,226,2,-1,0,unknown,no +39,management,married,secondary,no,13578,yes,no,cellular,21,nov,185,2,-1,0,unknown,no +51,technician,single,tertiary,no,11222,yes,no,cellular,21,nov,126,2,171,7,failure,no +33,admin.,married,secondary,no,1737,no,no,cellular,30,apr,524,2,-1,0,unknown,no +59,management,divorced,tertiary,no,59,yes,no,unknown,5,may,273,1,-1,0,unknown,no +30,technician,single,secondary,no,54,no,no,cellular,11,aug,194,2,-1,0,unknown,no +61,technician,married,primary,no,2282,no,no,cellular,25,nov,1092,1,-1,0,unknown,no +24,admin.,married,secondary,no,299,yes,no,cellular,6,may,209,1,321,1,failure,no +36,management,married,tertiary,no,396,no,no,cellular,13,aug,67,5,-1,0,unknown,no +34,technician,single,tertiary,no,184,yes,no,cellular,30,jul,87,3,-1,0,unknown,no +47,blue-collar,married,primary,no,475,yes,yes,cellular,29,jan,99,2,251,7,other,no +40,technician,married,secondary,no,-496,no,no,telephone,28,jul,22,2,-1,0,unknown,no +46,technician,divorced,secondary,no,117,no,no,cellular,29,aug,94,2,-1,0,unknown,no +32,management,married,tertiary,no,713,yes,no,cellular,11,aug,76,7,-1,0,unknown,no +39,management,married,tertiary,no,45,no,no,cellular,28,aug,148,4,-1,0,unknown,no +35,management,single,tertiary,no,1496,yes,no,cellular,22,aug,73,4,-1,0,unknown,no +37,services,single,primary,no,0,no,yes,cellular,6,feb,155,6,245,5,other,no +45,technician,married,unknown,no,886,yes,no,cellular,13,oct,75,2,42,1,failure,no +38,blue-collar,married,primary,no,4592,yes,no,cellular,12,may,360,1,-1,0,unknown,no +52,technician,married,secondary,no,-38,no,no,unknown,6,jun,613,1,-1,0,unknown,no +28,blue-collar,single,primary,no,431,yes,no,cellular,13,may,68,2,363,2,failure,no +35,management,single,tertiary,no,-292,yes,no,cellular,18,may,166,2,272,6,failure,no +45,technician,married,secondary,no,2571,no,no,unknown,18,jun,146,2,-1,0,unknown,no +33,management,single,tertiary,no,191,no,yes,cellular,3,feb,678,4,209,1,failure,no +42,technician,divorced,secondary,no,1689,yes,no,cellular,31,jul,50,2,-1,0,unknown,no +23,student,single,secondary,no,8494,no,no,cellular,25,aug,158,2,-1,0,unknown,no +49,entrepreneur,divorced,secondary,no,159,yes,no,unknown,13,may,95,3,-1,0,unknown,no +52,technician,married,tertiary,no,7,no,yes,unknown,5,may,175,1,-1,0,unknown,no +27,management,single,secondary,no,35,no,no,cellular,4,jul,255,1,-1,0,unknown,no +34,management,married,secondary,no,1007,yes,no,cellular,21,jul,240,2,-1,0,unknown,no +31,technician,married,secondary,no,106,yes,no,unknown,13,may,101,13,-1,0,unknown,no +45,admin.,married,secondary,no,0,yes,no,cellular,18,nov,108,5,-1,0,unknown,no +32,admin.,married,secondary,no,0,no,no,unknown,23,may,206,3,-1,0,unknown,no +51,blue-collar,married,primary,no,216,yes,no,cellular,17,apr,666,3,274,3,failure,no +56,management,married,tertiary,no,746,no,no,cellular,30,apr,193,1,-1,0,unknown,no +44,admin.,married,secondary,no,764,yes,no,cellular,3,sep,232,1,213,1,failure,no +41,blue-collar,married,secondary,no,193,yes,no,unknown,29,may,130,1,-1,0,unknown,no +54,self-employed,married,tertiary,no,368,no,no,telephone,31,jul,7,4,-1,0,unknown,no +31,technician,single,secondary,no,205,yes,no,unknown,3,jun,342,2,-1,0,unknown,no +25,admin.,single,secondary,no,96,yes,no,unknown,9,may,176,2,-1,0,unknown,no +50,technician,divorced,secondary,no,8016,no,no,cellular,17,jul,903,4,-1,0,unknown,no +41,entrepreneur,married,tertiary,no,221,yes,no,unknown,14,may,57,2,-1,0,unknown,no +33,unemployed,single,tertiary,no,157,yes,no,unknown,26,may,897,5,-1,0,unknown,no +49,blue-collar,married,primary,no,4830,yes,no,unknown,6,jun,350,1,-1,0,unknown,no +34,technician,single,tertiary,no,1039,no,no,cellular,11,aug,342,3,-1,0,unknown,no +60,retired,married,primary,no,71,no,no,cellular,10,jul,121,3,-1,0,unknown,no +45,admin.,married,secondary,no,1214,yes,no,cellular,2,feb,150,2,189,2,failure,no +40,self-employed,married,secondary,no,0,no,no,unknown,19,jun,61,1,-1,0,unknown,no +50,admin.,divorced,secondary,no,0,yes,no,unknown,20,jun,174,1,-1,0,unknown,no +27,management,single,secondary,no,116,yes,no,cellular,6,feb,138,2,-1,0,unknown,no +53,technician,married,secondary,no,100,no,no,cellular,13,aug,205,4,-1,0,unknown,no +31,services,single,secondary,no,91,yes,no,cellular,18,may,111,2,-1,0,unknown,no +24,blue-collar,single,secondary,no,-398,yes,no,cellular,18,may,14,3,355,4,other,no +68,retired,married,tertiary,no,2820,no,no,cellular,5,mar,158,1,92,3,success,no +27,services,single,secondary,no,223,yes,yes,cellular,13,may,297,2,-1,0,unknown,no +46,management,single,tertiary,no,2278,no,no,cellular,12,aug,218,5,-1,0,unknown,no +23,technician,single,secondary,no,-782,yes,yes,unknown,19,jun,197,10,-1,0,unknown,no +76,retired,married,unknown,no,8919,no,no,cellular,28,jan,231,1,-1,0,unknown,no +48,entrepreneur,married,secondary,no,104,yes,yes,cellular,18,nov,55,1,-1,0,unknown,no +60,management,married,tertiary,no,3387,no,no,cellular,14,aug,636,2,-1,0,unknown,no +46,entrepreneur,married,secondary,no,0,no,yes,cellular,18,jul,115,1,-1,0,unknown,no +36,admin.,single,secondary,no,449,yes,no,unknown,20,jun,136,3,-1,0,unknown,no +30,technician,single,secondary,no,4787,yes,no,cellular,18,nov,266,1,167,2,failure,no +33,management,single,tertiary,no,1240,yes,no,cellular,4,feb,505,2,260,1,other,no +36,admin.,single,secondary,no,191,yes,no,cellular,25,jul,18,7,-1,0,unknown,no +44,blue-collar,married,tertiary,no,2185,yes,no,unknown,16,may,698,1,-1,0,unknown,no +36,admin.,single,secondary,no,0,yes,no,cellular,21,nov,139,2,-1,0,unknown,no +44,technician,married,secondary,no,2857,no,no,cellular,5,aug,318,2,-1,0,unknown,no +70,retired,married,primary,no,3782,no,no,cellular,16,mar,618,1,-1,0,unknown,no +48,technician,divorced,tertiary,no,83,no,yes,cellular,19,aug,243,6,-1,0,unknown,no +52,management,married,tertiary,no,6,no,no,telephone,19,oct,57,1,-1,0,unknown,no +34,admin.,single,secondary,no,88,yes,no,unknown,27,may,169,2,-1,0,unknown,no +35,technician,married,secondary,no,294,yes,no,cellular,15,jun,238,6,98,5,success,no +54,entrepreneur,married,tertiary,no,84,no,no,cellular,29,jul,34,2,-1,0,unknown,no +47,technician,divorced,secondary,no,84,no,no,cellular,8,aug,49,2,-1,0,unknown,no +38,blue-collar,married,secondary,no,602,yes,no,unknown,30,may,161,12,-1,0,unknown,no +41,management,divorced,secondary,no,0,no,no,cellular,6,aug,438,2,-1,0,unknown,no +28,blue-collar,married,secondary,no,-470,yes,no,cellular,7,may,275,2,-1,0,unknown,no +58,services,married,secondary,no,-37,no,yes,telephone,6,feb,150,2,205,6,failure,no +59,admin.,married,secondary,no,2145,no,no,telephone,17,nov,273,2,-1,0,unknown,no +32,management,married,tertiary,no,937,no,no,cellular,26,may,61,1,190,1,failure,no +55,blue-collar,married,secondary,no,2059,yes,no,cellular,11,may,149,1,259,4,failure,no +38,blue-collar,married,secondary,no,3598,no,no,unknown,6,jun,154,1,-1,0,unknown,no +40,blue-collar,married,primary,no,1206,no,yes,telephone,16,jul,201,5,-1,0,unknown,no +45,entrepreneur,divorced,tertiary,no,1273,yes,yes,cellular,20,nov,206,2,162,3,failure,no +42,entrepreneur,married,secondary,no,46,no,no,cellular,2,feb,1013,1,-1,0,unknown,no +53,self-employed,married,secondary,no,534,yes,no,cellular,29,jul,115,4,-1,0,unknown,no +32,technician,married,secondary,no,-300,no,no,cellular,28,aug,226,9,-1,0,unknown,no +55,housemaid,married,primary,no,4,no,no,cellular,21,nov,85,3,-1,0,unknown,no +54,services,married,unknown,no,386,no,yes,cellular,19,nov,74,1,152,1,success,no +46,blue-collar,married,secondary,no,-396,no,yes,cellular,4,aug,115,1,-1,0,unknown,no +39,management,married,tertiary,no,0,yes,no,cellular,11,may,112,1,-1,0,unknown,no +36,management,divorced,tertiary,no,14930,no,no,cellular,23,jul,190,1,-1,0,unknown,no +44,management,married,tertiary,no,-600,yes,no,cellular,18,aug,360,1,-1,0,unknown,no +28,student,single,tertiary,no,3733,yes,no,cellular,21,aug,419,5,91,7,success,no +36,admin.,married,secondary,no,465,yes,no,unknown,20,may,160,1,-1,0,unknown,no +43,technician,married,secondary,no,994,yes,yes,cellular,5,may,51,1,-1,0,unknown,no +25,blue-collar,married,secondary,no,758,yes,no,unknown,28,may,504,3,-1,0,unknown,no +31,management,married,tertiary,no,256,yes,no,cellular,7,jul,28,24,-1,0,unknown,no +60,retired,married,tertiary,no,3461,no,no,cellular,3,feb,128,2,-1,0,unknown,no +29,technician,divorced,secondary,no,124,no,no,unknown,27,may,125,1,-1,0,unknown,no +46,services,divorced,secondary,no,355,yes,no,cellular,8,may,122,2,338,8,other,no +31,management,married,tertiary,no,1514,no,no,cellular,12,aug,284,2,-1,0,unknown,no +31,management,married,tertiary,no,40,no,no,cellular,2,feb,118,2,-1,0,unknown,no +45,blue-collar,married,unknown,no,-320,yes,no,unknown,28,may,204,3,-1,0,unknown,no +60,retired,married,primary,no,566,no,yes,cellular,23,jul,423,1,-1,0,unknown,no +50,housemaid,married,secondary,no,388,no,no,cellular,8,jun,152,2,89,2,success,no +34,management,married,tertiary,no,577,yes,no,cellular,20,apr,243,2,153,1,failure,no +33,admin.,married,secondary,no,17,yes,no,cellular,13,may,74,1,351,1,failure,no +57,housemaid,married,primary,no,260,yes,no,unknown,16,may,38,3,-1,0,unknown,no +38,self-employed,divorced,secondary,no,0,yes,no,cellular,20,apr,84,1,-1,0,unknown,no +42,management,married,tertiary,no,1823,yes,no,unknown,13,may,31,1,-1,0,unknown,no +54,self-employed,married,primary,no,1463,no,no,unknown,20,jun,60,1,-1,0,unknown,no +46,services,divorced,unknown,no,3390,no,no,unknown,20,jun,152,3,-1,0,unknown,no +59,management,married,primary,no,2769,yes,no,cellular,19,nov,104,1,131,2,failure,no +38,self-employed,married,secondary,no,215,yes,no,cellular,20,nov,70,1,167,1,failure,no +49,technician,married,secondary,no,12531,no,no,cellular,13,aug,77,8,-1,0,unknown,no +49,technician,married,tertiary,no,80,no,no,cellular,17,jul,123,1,-1,0,unknown,no +30,technician,divorced,tertiary,no,317,yes,no,cellular,25,jul,67,5,-1,0,unknown,no +52,self-employed,single,primary,no,217,no,yes,cellular,15,jul,193,6,-1,0,unknown,no +38,admin.,married,secondary,no,4874,no,no,unknown,6,jun,1291,3,-1,0,unknown,no +44,admin.,single,secondary,no,275,yes,no,cellular,14,may,7,5,367,4,failure,no +39,management,married,primary,no,738,yes,yes,cellular,18,jul,215,3,-1,0,unknown,no +38,admin.,married,secondary,no,1839,no,no,unknown,23,may,63,2,-1,0,unknown,no +36,technician,divorced,secondary,no,556,yes,no,cellular,18,nov,154,3,189,1,failure,no +32,services,married,secondary,no,207,yes,no,unknown,23,may,360,1,-1,0,unknown,no +57,admin.,divorced,secondary,no,-461,yes,yes,unknown,4,jun,145,8,-1,0,unknown,no +45,blue-collar,married,primary,no,789,no,yes,cellular,29,jan,79,1,-1,0,unknown,no +43,management,divorced,tertiary,no,1133,yes,no,cellular,5,may,131,1,-1,0,unknown,no +42,admin.,single,secondary,no,4253,yes,no,cellular,13,may,146,1,-1,0,unknown,no +58,retired,married,secondary,no,255,no,no,unknown,28,may,362,3,-1,0,unknown,no +53,unemployed,married,secondary,no,582,yes,no,unknown,8,may,96,2,-1,0,unknown,no +30,technician,married,secondary,no,743,no,no,cellular,29,jan,142,2,-1,0,unknown,no +40,blue-collar,married,primary,no,570,yes,no,unknown,12,may,109,3,-1,0,unknown,no +35,admin.,married,secondary,no,786,no,yes,cellular,25,jul,322,1,-1,0,unknown,no +34,services,married,secondary,no,295,yes,yes,cellular,4,jul,64,1,-1,0,unknown,no +35,management,married,tertiary,no,2583,no,no,cellular,19,nov,210,1,-1,0,unknown,no +28,blue-collar,single,secondary,no,1285,no,no,telephone,30,jan,199,2,2,17,other,no +39,technician,single,secondary,no,287,yes,no,cellular,14,jul,84,3,-1,0,unknown,no +51,admin.,married,primary,no,658,yes,no,unknown,14,may,369,1,-1,0,unknown,no +29,blue-collar,married,secondary,no,246,yes,no,cellular,28,jul,194,5,-1,0,unknown,no +44,entrepreneur,married,tertiary,no,3463,yes,yes,cellular,28,aug,210,3,-1,0,unknown,no +32,blue-collar,divorced,unknown,no,291,yes,yes,unknown,27,jun,120,6,-1,0,unknown,no +28,admin.,single,secondary,no,19,no,no,cellular,8,jul,78,4,-1,0,unknown,no +53,blue-collar,married,secondary,no,5700,yes,no,unknown,14,may,97,1,-1,0,unknown,no +81,retired,divorced,unknown,no,0,no,no,telephone,16,oct,128,1,-1,0,unknown,no +33,blue-collar,married,secondary,no,-346,yes,yes,unknown,23,may,29,3,-1,0,unknown,no +37,entrepreneur,married,tertiary,yes,-456,yes,yes,unknown,20,jun,42,7,-1,0,unknown,no +37,technician,married,secondary,no,5953,no,no,cellular,5,aug,1113,1,-1,0,unknown,no +35,technician,single,secondary,no,1693,yes,no,cellular,26,may,58,1,105,1,success,no +30,admin.,married,secondary,no,350,no,yes,cellular,9,jul,171,5,-1,0,unknown,no +43,blue-collar,married,primary,no,-181,yes,no,cellular,17,apr,351,1,337,3,failure,no +45,retired,divorced,secondary,no,1735,no,yes,unknown,17,jun,306,1,-1,0,unknown,no +34,blue-collar,married,secondary,no,157,yes,no,cellular,11,jul,254,2,-1,0,unknown,no +40,admin.,married,secondary,no,67,no,yes,cellular,19,nov,359,2,152,5,failure,no +60,admin.,married,primary,no,-444,no,yes,cellular,16,jul,227,1,-1,0,unknown,no +54,self-employed,married,primary,no,0,no,yes,telephone,9,jul,130,2,-1,0,unknown,no +39,blue-collar,married,secondary,no,171,yes,yes,cellular,8,may,153,1,353,1,failure,no +44,admin.,married,secondary,no,262,yes,no,cellular,9,jul,74,1,-1,0,unknown,no +32,technician,married,tertiary,no,0,yes,no,cellular,19,nov,231,4,-1,0,unknown,no +34,blue-collar,married,secondary,no,965,yes,no,cellular,20,apr,372,2,332,2,other,no +44,management,married,tertiary,no,0,no,no,unknown,13,may,27,1,-1,0,unknown,no +30,management,single,tertiary,no,6392,yes,no,cellular,5,may,335,1,-1,0,unknown,no +47,unknown,married,unknown,no,194,no,no,cellular,4,aug,108,1,-1,0,unknown,no +74,retired,divorced,primary,no,2308,no,no,telephone,16,sep,251,2,535,2,success,no +27,admin.,married,secondary,no,941,yes,no,cellular,11,jul,124,1,-1,0,unknown,no +34,housemaid,divorced,primary,no,46,yes,no,telephone,11,jul,31,2,-1,0,unknown,no +52,housemaid,divorced,secondary,no,131,yes,yes,cellular,11,may,87,1,-1,0,unknown,no +32,services,married,secondary,no,1844,yes,yes,cellular,3,feb,158,4,201,6,failure,no +42,admin.,married,secondary,no,281,yes,no,unknown,15,may,118,1,-1,0,unknown,no +31,technician,single,secondary,no,109,yes,no,unknown,21,may,419,1,-1,0,unknown,no +31,technician,divorced,secondary,no,268,no,no,unknown,16,may,118,2,-1,0,unknown,no +31,admin.,married,secondary,no,298,yes,yes,unknown,26,may,518,1,-1,0,unknown,no +57,entrepreneur,married,secondary,yes,-525,no,yes,cellular,25,jul,337,1,-1,0,unknown,no +40,management,married,primary,no,738,yes,yes,cellular,2,apr,399,2,258,3,failure,no +23,blue-collar,married,secondary,no,94,yes,no,unknown,5,may,193,1,-1,0,unknown,no +43,management,divorced,unknown,no,7702,no,no,cellular,1,sep,108,7,102,3,success,no +45,admin.,divorced,unknown,no,857,no,no,telephone,8,jul,49,7,-1,0,unknown,no +58,technician,divorced,secondary,no,-354,yes,yes,cellular,7,jul,98,1,-1,0,unknown,no +38,blue-collar,married,unknown,no,0,yes,no,cellular,2,apr,477,2,267,1,failure,no +48,admin.,married,secondary,no,112,no,no,cellular,18,aug,139,5,-1,0,unknown,no +47,technician,divorced,secondary,no,5735,no,no,unknown,19,jun,282,4,-1,0,unknown,no +49,technician,divorced,tertiary,no,1807,yes,no,cellular,2,jun,225,1,82,1,success,no +28,blue-collar,single,primary,no,-30,yes,no,cellular,31,jul,108,5,-1,0,unknown,no +31,student,single,secondary,no,216,no,no,cellular,3,jun,138,1,-1,0,unknown,no +38,technician,married,tertiary,no,127,yes,no,cellular,14,oct,113,1,50,2,success,no +43,blue-collar,married,secondary,no,1096,no,yes,unknown,30,may,180,1,-1,0,unknown,no +52,management,married,secondary,no,5193,no,no,cellular,23,apr,477,2,-1,0,unknown,no +43,admin.,single,secondary,no,6,no,no,unknown,16,may,244,1,-1,0,unknown,no +29,blue-collar,married,secondary,no,339,yes,no,cellular,15,may,63,3,354,2,failure,no +45,services,married,secondary,no,0,no,no,cellular,11,jul,106,2,-1,0,unknown,no +59,blue-collar,married,primary,no,625,no,no,cellular,9,jul,133,1,-1,0,unknown,no +48,blue-collar,married,secondary,no,3776,no,no,telephone,4,may,254,4,-1,0,unknown,no +30,management,married,tertiary,no,1239,no,no,cellular,28,aug,125,5,-1,0,unknown,no +23,housemaid,single,primary,no,93,yes,no,cellular,18,may,70,3,-1,0,unknown,no +38,technician,divorced,tertiary,no,304,yes,no,cellular,20,apr,8,2,-1,0,unknown,no +52,blue-collar,married,primary,no,1409,yes,no,unknown,19,jun,224,1,-1,0,unknown,no +44,services,married,secondary,no,191,yes,yes,cellular,7,may,490,1,-1,0,unknown,no +34,blue-collar,single,secondary,no,79,no,yes,cellular,20,nov,104,1,-1,0,unknown,no +32,blue-collar,married,secondary,no,2263,no,no,cellular,7,may,113,2,-1,0,unknown,no +41,technician,married,secondary,no,10438,yes,no,telephone,15,jul,141,4,-1,0,unknown,no +31,admin.,single,secondary,no,81,yes,no,cellular,23,apr,215,2,165,11,other,no +40,management,married,tertiary,no,964,yes,no,telephone,13,may,95,3,-1,0,unknown,no +52,blue-collar,divorced,primary,no,0,no,no,cellular,20,nov,19,1,-1,0,unknown,no +32,services,married,secondary,no,3839,yes,no,cellular,18,nov,100,2,189,1,failure,no +26,admin.,single,secondary,no,586,yes,yes,unknown,12,may,215,1,-1,0,unknown,no +29,management,single,tertiary,no,600,yes,no,cellular,18,oct,170,5,-1,0,unknown,no +31,management,married,tertiary,no,1343,yes,yes,unknown,21,may,85,1,-1,0,unknown,no +48,blue-collar,married,unknown,no,113,no,no,cellular,11,aug,104,13,-1,0,unknown,no +27,blue-collar,single,secondary,no,240,yes,no,cellular,18,may,166,4,-1,0,unknown,no +30,blue-collar,married,secondary,no,194,yes,no,cellular,8,may,475,3,-1,0,unknown,no +28,blue-collar,married,primary,no,278,yes,yes,telephone,15,may,31,9,373,4,other,no +35,blue-collar,married,secondary,no,260,yes,no,telephone,13,may,155,6,-1,0,unknown,no +47,technician,divorced,secondary,no,1013,no,no,cellular,15,jun,54,3,-1,0,unknown,no +35,blue-collar,married,primary,no,0,yes,no,cellular,8,may,265,1,290,2,failure,no +31,technician,married,secondary,no,2363,yes,no,unknown,13,may,247,1,-1,0,unknown,no +53,blue-collar,married,secondary,no,913,yes,no,cellular,23,jul,730,1,-1,0,unknown,no +26,technician,single,tertiary,no,686,yes,no,unknown,30,may,98,2,-1,0,unknown,no +35,technician,married,secondary,no,149,yes,no,cellular,29,jan,99,1,245,2,failure,no +29,admin.,married,secondary,no,500,yes,no,cellular,8,may,8,8,-1,0,unknown,no +39,technician,married,tertiary,no,11766,yes,no,cellular,14,aug,313,4,102,5,failure,no +31,technician,single,secondary,no,137,no,no,cellular,27,aug,27,14,-1,0,unknown,no +48,management,single,tertiary,no,0,no,no,unknown,18,jun,96,3,-1,0,unknown,no +36,management,single,tertiary,no,335,no,no,unknown,10,oct,5,1,772,4,failure,no +27,admin.,married,secondary,no,16,yes,no,cellular,3,feb,54,3,-1,0,unknown,no +49,admin.,married,secondary,no,0,no,no,cellular,22,aug,115,2,-1,0,unknown,no +34,technician,single,tertiary,no,9851,yes,no,cellular,20,nov,128,5,-1,0,unknown,no +28,services,single,secondary,no,525,no,no,cellular,23,jul,81,1,-1,0,unknown,no +49,technician,married,secondary,no,788,no,no,unknown,17,jun,162,7,-1,0,unknown,no +35,blue-collar,married,tertiary,no,1016,yes,no,cellular,17,jul,294,2,-1,0,unknown,no +53,housemaid,divorced,secondary,no,292,no,no,unknown,12,jun,92,2,-1,0,unknown,no +58,retired,single,primary,no,999,no,no,cellular,25,jul,188,6,-1,0,unknown,no +37,blue-collar,married,secondary,no,2870,yes,no,unknown,6,jun,94,2,-1,0,unknown,no +27,admin.,single,tertiary,no,689,no,no,cellular,26,jan,98,1,307,1,failure,no +30,services,single,secondary,no,-100,yes,yes,cellular,15,may,292,1,-1,0,unknown,no +35,blue-collar,married,unknown,no,1084,yes,no,cellular,10,jul,1019,1,-1,0,unknown,no +32,management,single,tertiary,no,154,no,yes,cellular,21,aug,301,3,-1,0,unknown,no +53,blue-collar,married,secondary,no,1653,no,no,unknown,17,jun,88,2,-1,0,unknown,no +34,admin.,married,secondary,no,2378,yes,yes,telephone,10,jul,92,1,-1,0,unknown,no +38,management,single,tertiary,no,1515,yes,no,telephone,31,jul,42,5,-1,0,unknown,no +34,admin.,married,tertiary,no,1636,yes,yes,cellular,6,sep,136,1,521,2,failure,no +40,self-employed,married,secondary,no,1516,yes,yes,unknown,23,may,373,1,-1,0,unknown,no +48,services,married,secondary,no,127,no,no,cellular,8,jul,117,1,-1,0,unknown,no +30,management,single,tertiary,no,2876,no,no,cellular,6,aug,103,4,-1,0,unknown,no +31,management,married,tertiary,no,1384,yes,no,cellular,30,jan,203,2,2,3,other,no +37,technician,single,secondary,no,228,yes,no,cellular,20,aug,1740,2,-1,0,unknown,no +32,technician,single,tertiary,no,2481,no,no,cellular,18,aug,547,11,-1,0,unknown,no +40,blue-collar,married,secondary,no,475,yes,no,unknown,5,may,332,2,-1,0,unknown,no +41,management,divorced,tertiary,no,1401,no,no,unknown,16,jun,110,4,-1,0,unknown,no +52,technician,married,unknown,no,425,yes,no,cellular,28,jan,219,2,254,3,failure,no +29,blue-collar,single,secondary,no,244,yes,no,cellular,15,may,19,2,-1,0,unknown,no +49,management,married,tertiary,yes,-6847,no,yes,cellular,21,jul,206,1,-1,0,unknown,no +43,management,married,tertiary,yes,0,no,no,cellular,27,aug,25,19,-1,0,unknown,no +42,management,married,tertiary,no,386,yes,no,unknown,7,may,168,1,-1,0,unknown,no +37,management,married,tertiary,no,332,yes,no,cellular,14,aug,190,2,84,7,failure,no +57,services,divorced,primary,no,1367,no,no,unknown,9,jun,144,3,-1,0,unknown,no +25,admin.,single,secondary,no,120,yes,no,unknown,3,jun,542,1,-1,0,unknown,no +30,technician,single,secondary,no,19,yes,no,cellular,18,aug,16,15,-1,0,unknown,no +31,admin.,married,secondary,no,3,yes,no,cellular,28,jul,37,12,-1,0,unknown,no +49,blue-collar,married,primary,yes,-98,yes,no,cellular,20,nov,182,2,-1,0,unknown,no +47,blue-collar,married,secondary,no,303,no,no,unknown,11,jun,261,1,-1,0,unknown,no +57,services,divorced,secondary,no,-752,yes,no,unknown,28,may,102,1,-1,0,unknown,no +26,student,single,tertiary,no,97,no,no,cellular,27,aug,382,1,-1,0,unknown,no +40,retired,married,tertiary,no,794,no,no,unknown,9,may,138,1,-1,0,unknown,no +34,admin.,single,secondary,no,1880,yes,no,unknown,23,may,297,1,-1,0,unknown,no +41,blue-collar,married,unknown,no,732,yes,no,unknown,16,may,25,1,-1,0,unknown,no +53,management,married,tertiary,no,5261,no,yes,cellular,25,jul,1209,3,-1,0,unknown,no +26,admin.,single,secondary,no,712,yes,no,unknown,6,may,232,1,-1,0,unknown,no +28,student,single,secondary,no,28,no,no,cellular,29,jan,220,2,-1,0,unknown,no +54,retired,married,primary,no,0,yes,no,cellular,11,jul,159,2,-1,0,unknown,no +42,technician,married,secondary,no,827,no,no,cellular,25,aug,153,3,-1,0,unknown,no +29,student,single,secondary,no,110,yes,no,unknown,7,may,169,3,-1,0,unknown,no +49,unemployed,married,tertiary,no,377,no,no,cellular,22,may,158,1,59,2,failure,no +32,services,married,secondary,no,-344,no,yes,cellular,4,feb,44,1,-1,0,unknown,no +29,admin.,single,tertiary,no,261,no,no,cellular,17,mar,136,19,-1,0,unknown,no +60,blue-collar,married,unknown,no,104,yes,no,unknown,5,may,22,1,-1,0,unknown,no +51,retired,married,primary,no,610,no,no,unknown,9,jun,86,2,-1,0,unknown,no +40,housemaid,divorced,secondary,no,4328,no,no,cellular,20,aug,133,2,-1,0,unknown,no +44,blue-collar,married,tertiary,no,1371,no,no,cellular,13,may,788,3,363,4,other,no +47,blue-collar,married,primary,no,193,yes,no,cellular,29,aug,171,2,-1,0,unknown,no +32,blue-collar,single,unknown,no,258,yes,no,cellular,18,may,291,2,-1,0,unknown,no +43,blue-collar,married,primary,no,56,no,no,cellular,12,may,365,2,-1,0,unknown,no +59,retired,married,secondary,no,136,no,no,cellular,6,aug,301,4,-1,0,unknown,no +24,blue-collar,married,secondary,no,1222,yes,no,cellular,20,apr,369,1,-1,0,unknown,no +26,admin.,single,tertiary,no,3672,yes,no,unknown,29,may,360,5,-1,0,unknown,no +37,blue-collar,single,unknown,no,2188,no,no,unknown,16,may,193,8,-1,0,unknown,no +27,management,single,secondary,no,924,yes,no,cellular,3,feb,84,1,-1,0,unknown,no +32,technician,married,secondary,no,11431,no,no,cellular,12,aug,141,5,-1,0,unknown,no +44,blue-collar,married,primary,no,140,yes,no,unknown,15,may,7,9,-1,0,unknown,no +34,technician,divorced,secondary,no,27,yes,no,unknown,26,may,133,3,-1,0,unknown,no +39,management,married,tertiary,no,-468,yes,yes,cellular,8,aug,88,2,-1,0,unknown,no +30,services,single,secondary,no,438,yes,no,cellular,18,may,98,1,178,1,failure,no +44,admin.,divorced,secondary,no,-43,yes,yes,cellular,20,apr,206,1,-1,0,unknown,no +22,student,single,tertiary,no,1161,no,yes,cellular,16,jun,119,1,-1,0,unknown,no +28,services,single,secondary,no,458,no,no,cellular,4,feb,112,4,201,3,failure,no +41,blue-collar,married,primary,no,-441,yes,no,cellular,5,may,352,1,-1,0,unknown,no +30,technician,married,secondary,no,2278,no,yes,telephone,19,nov,47,1,-1,0,unknown,no +36,technician,single,secondary,no,0,no,no,cellular,28,aug,8,13,-1,0,unknown,no +39,services,married,secondary,no,702,yes,no,cellular,8,apr,303,1,300,1,failure,no +38,technician,single,tertiary,no,69,yes,no,cellular,13,may,253,3,-1,0,unknown,no +31,services,married,secondary,no,182,no,no,cellular,20,aug,231,2,-1,0,unknown,no +29,management,married,tertiary,no,318,yes,no,cellular,18,may,1434,2,356,4,failure,no +42,blue-collar,married,primary,no,-181,yes,no,unknown,15,may,297,3,-1,0,unknown,no +27,technician,single,secondary,no,261,yes,no,cellular,29,jan,236,2,247,2,failure,no +55,services,married,secondary,no,244,yes,no,cellular,8,may,171,1,-1,0,unknown,no +28,technician,married,secondary,no,880,yes,no,unknown,26,may,188,1,-1,0,unknown,no +47,technician,married,secondary,no,2283,yes,no,cellular,21,nov,170,2,-1,0,unknown,no +49,technician,married,secondary,no,550,yes,no,unknown,5,jun,412,2,-1,0,unknown,no +38,entrepreneur,married,tertiary,no,7752,yes,no,cellular,15,jul,138,4,-1,0,unknown,no +53,technician,married,secondary,no,6,yes,no,unknown,5,may,517,1,-1,0,unknown,no +31,blue-collar,married,secondary,no,4471,yes,no,unknown,9,may,296,2,-1,0,unknown,no +57,housemaid,married,primary,no,1969,no,no,cellular,14,aug,286,3,-1,0,unknown,no +36,management,single,tertiary,no,219,no,no,cellular,3,feb,22,6,196,6,failure,no +38,management,married,tertiary,no,76,yes,no,cellular,20,apr,167,2,287,3,failure,no +30,admin.,single,secondary,no,60,no,no,cellular,29,jan,55,2,-1,0,unknown,no +36,management,single,tertiary,no,8,no,no,cellular,29,jul,858,7,-1,0,unknown,no +29,services,married,secondary,no,19,yes,no,cellular,29,jul,327,6,-1,0,unknown,no +32,admin.,married,secondary,no,20011,no,no,cellular,20,apr,234,1,-1,0,unknown,no +48,unemployed,married,primary,no,608,no,no,cellular,30,jul,362,2,-1,0,unknown,no +53,retired,married,primary,no,1068,no,no,cellular,28,jan,200,1,-1,0,unknown,no +35,technician,married,tertiary,no,-269,yes,yes,cellular,14,may,344,4,-1,0,unknown,no +48,management,married,tertiary,no,494,no,no,cellular,29,aug,81,8,-1,0,unknown,no +31,entrepreneur,single,secondary,no,159,yes,no,cellular,21,nov,66,1,182,1,failure,no +30,technician,single,secondary,no,-754,yes,yes,unknown,26,may,974,1,-1,0,unknown,no +28,admin.,married,secondary,no,157,yes,yes,cellular,28,jul,164,2,-1,0,unknown,no +42,management,married,tertiary,no,2110,no,yes,cellular,31,jul,106,2,-1,0,unknown,no +31,housemaid,married,primary,no,2603,yes,no,cellular,18,nov,224,1,-1,0,unknown,no +36,management,single,secondary,no,992,no,no,unknown,6,jun,351,1,-1,0,unknown,no +43,technician,single,secondary,no,593,yes,no,unknown,5,may,55,1,-1,0,unknown,no +28,student,married,tertiary,no,327,yes,no,cellular,15,may,104,3,-1,0,unknown,no +34,management,single,tertiary,no,6766,no,no,cellular,28,aug,210,5,-1,0,unknown,no +36,technician,married,secondary,no,432,yes,yes,unknown,4,aug,94,1,-1,0,unknown,no +28,admin.,single,secondary,no,25,yes,no,unknown,5,jun,109,2,-1,0,unknown,no +34,blue-collar,married,primary,no,5299,yes,no,unknown,26,jun,75,5,-1,0,unknown,no +53,admin.,single,secondary,no,291,no,no,unknown,23,jul,145,1,-1,0,unknown,no +52,self-employed,married,secondary,no,517,no,no,cellular,26,aug,77,4,-1,0,unknown,no +44,unemployed,married,primary,no,97,yes,no,unknown,5,jun,105,3,-1,0,unknown,no +58,self-employed,married,tertiary,no,1636,no,no,cellular,15,apr,187,1,-1,0,unknown,no +47,admin.,married,secondary,no,996,no,no,telephone,29,aug,247,2,-1,0,unknown,no +40,blue-collar,single,secondary,no,0,yes,no,unknown,27,may,59,4,-1,0,unknown,no +39,management,married,tertiary,no,710,yes,no,cellular,11,jul,211,2,-1,0,unknown,no +33,self-employed,single,tertiary,no,1049,no,no,cellular,4,may,126,4,-1,0,unknown,no +23,student,single,secondary,no,556,yes,no,cellular,15,may,170,2,-1,0,unknown,no +31,services,single,secondary,no,629,yes,no,unknown,21,may,369,2,-1,0,unknown,no +39,blue-collar,married,primary,no,186,yes,no,unknown,16,may,208,3,-1,0,unknown,no +42,management,divorced,tertiary,no,0,no,no,unknown,19,may,131,2,-1,0,unknown,no +46,admin.,married,secondary,no,1264,no,no,telephone,28,jan,100,2,-1,0,unknown,no +22,student,single,secondary,no,64,no,no,cellular,4,jun,112,1,-1,0,unknown,no +50,technician,married,secondary,no,2497,yes,no,cellular,21,nov,35,1,176,1,failure,no +50,technician,single,secondary,no,-97,yes,no,cellular,8,apr,425,1,306,2,failure,no +34,management,married,tertiary,no,161,yes,no,cellular,11,jul,378,1,-1,0,unknown,no +40,admin.,married,secondary,no,732,no,no,cellular,9,sep,71,1,139,4,success,no +39,blue-collar,married,secondary,no,94,yes,yes,cellular,19,nov,181,1,-1,0,unknown,no +51,blue-collar,married,tertiary,no,2404,yes,no,telephone,20,nov,30,1,-1,0,unknown,no +45,management,married,secondary,no,21,yes,no,unknown,3,jun,788,2,-1,0,unknown,no +34,technician,single,tertiary,no,2658,yes,no,cellular,31,mar,265,1,230,2,failure,no +30,self-employed,married,secondary,no,131,yes,no,unknown,8,may,306,1,-1,0,unknown,no +57,unemployed,married,primary,no,0,yes,no,cellular,20,nov,231,2,-1,0,unknown,no +42,blue-collar,married,secondary,no,351,yes,no,unknown,16,may,76,21,-1,0,unknown,no +51,technician,married,secondary,no,564,no,yes,cellular,8,jul,187,2,-1,0,unknown,no +38,blue-collar,married,primary,no,2240,yes,no,cellular,19,nov,551,1,183,1,failure,no +60,self-employed,married,primary,no,46,yes,no,unknown,6,may,202,4,-1,0,unknown,no +38,blue-collar,married,primary,no,132,yes,no,cellular,14,may,797,2,-1,0,unknown,no +37,retired,married,secondary,no,71,no,yes,cellular,8,may,254,1,-1,0,unknown,no +34,management,single,tertiary,no,0,yes,yes,cellular,26,may,197,2,98,1,other,no +39,housemaid,married,primary,no,267,no,no,unknown,9,jun,1151,5,-1,0,unknown,no +55,services,married,secondary,no,841,yes,no,cellular,15,may,140,9,372,4,failure,no +48,blue-collar,married,primary,no,51,no,yes,telephone,9,jul,76,1,-1,0,unknown,no +42,blue-collar,married,primary,no,7735,yes,no,cellular,13,apr,166,1,144,2,failure,no +29,housemaid,married,primary,no,417,no,no,cellular,23,jul,108,2,-1,0,unknown,no +33,blue-collar,single,secondary,no,-14,yes,no,cellular,14,may,223,2,-1,0,unknown,no +35,blue-collar,married,primary,no,2490,yes,no,cellular,18,may,170,1,180,3,failure,no +28,admin.,married,secondary,no,0,yes,no,cellular,7,may,47,1,-1,0,unknown,no +26,blue-collar,single,secondary,no,184,no,no,cellular,3,feb,110,2,6,1,other,no +40,services,single,secondary,no,19343,yes,no,cellular,21,nov,13,4,179,4,failure,no +42,admin.,married,secondary,no,947,no,no,cellular,30,jul,158,2,-1,0,unknown,no +49,blue-collar,married,secondary,no,90,yes,no,unknown,7,may,127,1,-1,0,unknown,no +32,admin.,single,secondary,no,10218,yes,no,cellular,19,nov,149,2,-1,0,unknown,no +33,technician,married,secondary,yes,72,yes,no,unknown,6,may,623,1,-1,0,unknown,no +30,technician,single,secondary,no,120,yes,no,cellular,18,may,74,1,-1,0,unknown,no +20,student,single,secondary,no,130,no,no,telephone,4,may,75,3,-1,0,unknown,no +51,blue-collar,married,unknown,no,41,yes,no,telephone,9,jul,16,43,-1,0,unknown,no +38,blue-collar,single,primary,no,0,yes,no,cellular,7,may,350,2,-1,0,unknown,no +53,technician,married,tertiary,no,673,yes,no,cellular,9,jul,182,1,-1,0,unknown,no +34,blue-collar,divorced,secondary,no,-131,yes,no,cellular,7,may,132,1,356,1,failure,no +30,blue-collar,married,primary,no,2607,yes,no,unknown,28,may,158,10,-1,0,unknown,no +36,unemployed,divorced,secondary,no,5,yes,no,cellular,8,jul,305,1,-1,0,unknown,no +36,management,married,tertiary,no,23,no,no,cellular,26,aug,133,11,-1,0,unknown,no +39,blue-collar,married,secondary,no,180,yes,no,cellular,16,apr,237,1,-1,0,unknown,no +33,technician,single,tertiary,no,68,no,no,cellular,14,aug,96,2,-1,0,unknown,no +42,management,married,tertiary,no,0,no,no,cellular,13,aug,325,2,-1,0,unknown,no +30,management,single,tertiary,no,565,yes,no,cellular,26,oct,104,1,-1,0,unknown,no +23,technician,single,secondary,no,598,no,no,cellular,30,apr,166,1,-1,0,unknown,no +37,technician,single,tertiary,no,1609,no,yes,unknown,20,jun,10,19,-1,0,unknown,no +77,retired,married,tertiary,no,1047,no,no,cellular,30,jun,108,5,-1,0,unknown,no +33,technician,married,tertiary,no,5641,no,no,cellular,18,aug,168,2,-1,0,unknown,no +33,blue-collar,single,primary,no,557,yes,no,cellular,17,apr,91,2,331,2,failure,no +40,blue-collar,single,secondary,no,1066,yes,no,unknown,21,may,171,1,-1,0,unknown,no +58,retired,married,secondary,no,35,no,no,cellular,29,jul,336,7,-1,0,unknown,no +29,management,single,tertiary,no,54,yes,yes,unknown,26,may,257,3,-1,0,unknown,no +43,management,single,tertiary,no,1806,yes,no,cellular,12,aug,161,2,-1,0,unknown,no +34,blue-collar,single,secondary,no,39,no,no,cellular,13,may,254,2,299,3,failure,no +38,admin.,divorced,secondary,no,0,yes,no,cellular,21,jul,93,1,-1,0,unknown,no +38,admin.,divorced,secondary,no,930,yes,no,cellular,5,may,46,1,-1,0,unknown,no +40,blue-collar,married,primary,no,0,no,no,cellular,24,jul,313,1,-1,0,unknown,no +59,management,married,tertiary,no,2764,no,no,cellular,18,feb,459,1,56,3,failure,no +44,admin.,single,secondary,no,4492,no,yes,cellular,31,jul,19,13,-1,0,unknown,no +60,retired,divorced,tertiary,no,2166,no,no,unknown,20,jun,8,9,-1,0,unknown,no +37,management,single,tertiary,no,0,no,no,cellular,20,oct,107,1,258,3,other,no +50,admin.,married,secondary,no,1575,no,no,cellular,17,nov,407,1,-1,0,unknown,no +50,management,divorced,tertiary,no,201,yes,no,cellular,24,jul,248,1,-1,0,unknown,no +35,admin.,married,tertiary,no,318,yes,yes,cellular,1,oct,142,1,-1,0,unknown,no +39,management,single,tertiary,no,1682,yes,no,cellular,19,nov,147,1,170,1,failure,no +29,self-employed,married,tertiary,no,242,yes,no,cellular,18,jul,73,4,-1,0,unknown,no +34,management,divorced,secondary,no,291,no,no,cellular,7,aug,91,2,-1,0,unknown,no +31,technician,divorced,secondary,no,304,no,no,cellular,2,feb,133,2,-1,0,unknown,no +51,housemaid,married,primary,no,108,no,no,unknown,16,jun,278,2,-1,0,unknown,no +46,blue-collar,married,primary,no,1303,no,no,cellular,4,aug,174,1,-1,0,unknown,no +27,admin.,single,secondary,no,292,yes,no,cellular,12,may,53,9,362,8,other,no +61,retired,married,secondary,no,89,no,no,cellular,28,oct,154,1,181,2,failure,no +34,admin.,married,tertiary,no,788,yes,no,cellular,5,feb,269,1,-1,0,unknown,no +30,blue-collar,single,secondary,no,573,yes,no,unknown,12,may,116,2,-1,0,unknown,no +58,management,married,tertiary,no,1318,no,no,cellular,16,jul,184,1,179,5,failure,no +30,technician,single,secondary,no,151,no,no,cellular,3,feb,276,2,-1,0,unknown,no +50,blue-collar,married,primary,no,-37,yes,no,unknown,12,may,78,3,-1,0,unknown,no +30,blue-collar,single,secondary,no,522,no,no,cellular,6,feb,197,3,-1,0,unknown,no +43,entrepreneur,married,primary,no,2315,yes,yes,cellular,14,may,42,1,-1,0,unknown,no +35,services,divorced,secondary,no,-718,yes,no,cellular,21,nov,47,1,-1,0,unknown,no +36,management,single,tertiary,no,4,yes,no,cellular,7,jul,529,1,61,3,success,no +46,entrepreneur,married,tertiary,no,-43,no,no,unknown,12,may,138,8,-1,0,unknown,no +46,admin.,single,secondary,no,596,yes,no,cellular,20,apr,138,3,-1,0,unknown,no +29,unemployed,single,secondary,no,670,yes,no,unknown,26,sep,6,1,-1,0,unknown,no +48,blue-collar,married,primary,no,430,no,no,cellular,14,may,340,3,371,8,failure,no +50,management,divorced,tertiary,no,60,no,no,cellular,19,aug,255,2,-1,0,unknown,no +53,admin.,divorced,secondary,no,0,yes,yes,cellular,30,apr,586,2,-1,0,unknown,no +38,entrepreneur,married,tertiary,no,678,no,yes,cellular,18,nov,82,2,152,1,failure,no +27,management,married,tertiary,no,159,yes,no,cellular,25,jul,295,2,-1,0,unknown,no +36,technician,married,secondary,no,1345,yes,no,cellular,18,nov,82,1,172,3,failure,no +48,services,married,primary,no,483,no,no,cellular,6,aug,119,2,-1,0,unknown,no +59,unknown,married,unknown,no,2443,no,no,unknown,20,jun,8,8,-1,0,unknown,no +21,student,single,tertiary,no,1258,no,no,cellular,7,jul,404,1,-1,0,unknown,no +56,retired,divorced,secondary,no,389,yes,no,unknown,18,jun,379,5,-1,0,unknown,no +57,admin.,divorced,secondary,no,0,no,no,cellular,9,sep,121,2,-1,0,unknown,no +41,blue-collar,married,secondary,no,2067,yes,no,unknown,20,jun,120,4,-1,0,unknown,no +36,management,married,tertiary,no,332,yes,no,cellular,22,may,566,7,-1,0,unknown,no +45,management,married,tertiary,no,80,no,yes,cellular,19,nov,157,1,-1,0,unknown,no +40,housemaid,married,secondary,no,84,yes,yes,unknown,12,jun,230,7,-1,0,unknown,no +30,admin.,single,secondary,no,2702,yes,no,cellular,24,jul,129,2,-1,0,unknown,no +75,retired,divorced,primary,no,37127,no,no,cellular,11,feb,505,1,-1,0,unknown,no +35,technician,single,tertiary,no,0,yes,no,telephone,28,aug,46,2,-1,0,unknown,no +58,admin.,married,secondary,no,1813,yes,no,telephone,17,jul,15,1,-1,0,unknown,no +29,technician,single,secondary,no,1612,yes,no,unknown,26,may,375,2,-1,0,unknown,no +54,technician,single,secondary,no,198,yes,yes,cellular,17,nov,120,1,171,2,failure,no +28,blue-collar,single,secondary,no,1106,yes,no,cellular,17,apr,73,2,-1,0,unknown,no +33,student,single,unknown,no,2321,no,no,cellular,15,apr,699,2,381,2,failure,no +56,admin.,married,secondary,no,33,no,yes,cellular,19,nov,111,1,-1,0,unknown,no +50,management,married,tertiary,no,101,yes,no,unknown,15,may,348,1,-1,0,unknown,no +37,technician,single,secondary,no,-59,yes,no,cellular,22,jul,70,1,-1,0,unknown,no +49,services,married,secondary,no,486,yes,yes,unknown,30,may,43,2,-1,0,unknown,no +54,retired,married,primary,no,136,yes,no,cellular,3,apr,352,1,332,2,failure,no +40,management,married,tertiary,no,193,no,no,cellular,18,aug,105,6,-1,0,unknown,no +33,technician,married,secondary,no,5083,no,no,cellular,27,oct,161,1,96,2,other,no +48,management,married,unknown,no,0,yes,no,cellular,8,may,612,1,344,1,other,no +43,management,married,tertiary,no,8,no,no,cellular,11,aug,95,4,-1,0,unknown,no +35,blue-collar,single,primary,no,21,yes,no,unknown,27,may,129,1,-1,0,unknown,no +55,technician,married,secondary,no,570,no,no,cellular,27,aug,94,6,-1,0,unknown,no +33,management,married,tertiary,no,644,yes,yes,cellular,3,feb,124,2,271,2,failure,no +41,technician,single,tertiary,no,1104,no,no,unknown,9,jun,352,1,-1,0,unknown,no +57,blue-collar,married,secondary,no,6004,yes,no,cellular,12,aug,157,6,-1,0,unknown,no +50,self-employed,married,tertiary,no,1503,no,no,cellular,27,aug,128,12,-1,0,unknown,no +63,technician,married,secondary,no,896,yes,no,cellular,28,jan,115,3,91,4,other,no +33,technician,single,secondary,no,177,yes,no,unknown,23,may,293,1,-1,0,unknown,no +47,blue-collar,married,secondary,no,665,no,no,cellular,18,aug,885,3,-1,0,unknown,no +36,services,married,secondary,no,380,yes,no,unknown,20,may,26,1,-1,0,unknown,no +23,student,single,secondary,no,151,yes,no,unknown,9,may,97,1,-1,0,unknown,no +33,technician,single,tertiary,no,179,yes,no,cellular,18,nov,432,2,181,4,other,no +36,management,married,tertiary,no,4,no,yes,cellular,29,jul,261,6,-1,0,unknown,no +47,blue-collar,married,secondary,no,116,yes,no,unknown,8,may,376,2,-1,0,unknown,no +39,management,married,tertiary,no,0,no,no,cellular,28,aug,93,25,-1,0,unknown,no +44,blue-collar,divorced,primary,no,-57,yes,no,cellular,7,may,234,1,356,2,failure,no +60,retired,married,primary,no,894,yes,no,unknown,15,may,65,7,-1,0,unknown,no +42,management,married,tertiary,no,478,no,yes,cellular,8,jul,165,1,-1,0,unknown,no +32,technician,single,secondary,no,10,no,no,cellular,19,aug,190,2,-1,0,unknown,no +33,admin.,married,secondary,no,30,yes,no,telephone,5,may,125,2,-1,0,unknown,no +37,management,married,tertiary,no,578,yes,no,cellular,8,aug,401,4,-1,0,unknown,no +33,management,single,tertiary,no,2360,yes,no,cellular,20,nov,268,1,-1,0,unknown,no +59,retired,married,primary,no,-47,yes,no,cellular,27,aug,84,4,-1,0,unknown,no +42,technician,married,tertiary,no,-805,no,no,cellular,8,aug,103,6,-1,0,unknown,no +59,management,married,tertiary,yes,782,no,yes,cellular,13,aug,127,2,-1,0,unknown,no +31,technician,single,secondary,no,1282,no,no,cellular,12,may,144,1,460,2,failure,no +50,self-employed,single,secondary,no,766,yes,no,cellular,7,may,253,2,304,4,failure,no +29,blue-collar,single,secondary,no,348,yes,no,unknown,9,may,185,2,-1,0,unknown,no +36,entrepreneur,single,secondary,no,296,no,no,cellular,18,nov,67,2,111,2,failure,no +33,services,married,primary,no,908,yes,yes,cellular,14,jul,184,2,-1,0,unknown,no +38,admin.,divorced,secondary,no,0,no,no,unknown,5,jun,56,1,-1,0,unknown,no +33,management,single,tertiary,no,5276,no,no,cellular,4,nov,572,1,-1,0,unknown,no +36,entrepreneur,single,tertiary,no,658,yes,no,unknown,16,jun,61,3,-1,0,unknown,no +36,management,single,tertiary,no,1089,yes,no,unknown,30,may,126,1,-1,0,unknown,no +44,admin.,married,secondary,no,1042,yes,no,cellular,18,may,136,1,-1,0,unknown,no +29,blue-collar,married,primary,no,544,no,yes,cellular,21,jul,121,4,-1,0,unknown,no +44,blue-collar,married,primary,no,134,yes,no,cellular,7,may,378,1,-1,0,unknown,no +55,management,married,tertiary,no,73,yes,no,unknown,5,may,142,2,-1,0,unknown,no +38,blue-collar,single,secondary,no,13156,yes,no,cellular,17,apr,291,4,331,1,failure,no +39,management,divorced,tertiary,no,30,no,yes,cellular,3,feb,265,4,-1,0,unknown,no +45,blue-collar,married,primary,no,-66,yes,no,unknown,6,may,263,2,-1,0,unknown,no +36,management,single,tertiary,no,1373,yes,no,unknown,20,may,144,2,-1,0,unknown,no +36,management,married,tertiary,no,8564,yes,no,unknown,23,may,125,1,-1,0,unknown,no +59,retired,divorced,primary,no,81,yes,no,unknown,5,may,107,1,-1,0,unknown,no +41,admin.,married,tertiary,no,5426,yes,no,unknown,14,may,149,2,-1,0,unknown,no +29,self-employed,single,tertiary,no,16,yes,no,unknown,6,may,43,1,-1,0,unknown,no +50,management,single,tertiary,no,297,yes,no,unknown,5,may,119,1,-1,0,unknown,no +51,blue-collar,divorced,secondary,no,734,yes,yes,cellular,5,may,17,1,-1,0,unknown,no +29,management,single,tertiary,no,1514,yes,no,telephone,5,may,363,1,333,7,other,no +40,technician,single,secondary,no,153,no,no,cellular,7,aug,125,2,-1,0,unknown,no +36,student,married,primary,no,3503,no,no,unknown,6,jun,31,1,-1,0,unknown,no +49,technician,married,secondary,no,-849,yes,yes,unknown,27,may,197,1,-1,0,unknown,no +45,technician,married,secondary,no,1441,yes,no,cellular,18,nov,93,1,113,2,other,no +40,management,married,tertiary,no,2487,no,no,cellular,30,apr,126,1,-1,0,unknown,no +31,management,married,tertiary,no,927,no,no,cellular,18,aug,100,4,-1,0,unknown,no +32,entrepreneur,married,tertiary,no,598,no,no,cellular,18,aug,135,6,-1,0,unknown,no +44,admin.,married,secondary,no,345,yes,no,telephone,16,jul,208,8,-1,0,unknown,no +27,blue-collar,married,secondary,no,197,no,no,telephone,23,jul,222,1,-1,0,unknown,no +25,admin.,single,tertiary,no,220,no,no,cellular,26,may,68,1,-1,0,unknown,no +56,services,married,secondary,no,9,no,yes,cellular,20,aug,285,2,-1,0,unknown,no +59,retired,married,secondary,no,5678,yes,no,unknown,14,may,238,2,-1,0,unknown,no +31,management,single,tertiary,no,0,no,no,cellular,25,aug,9,12,-1,0,unknown,no +49,admin.,divorced,secondary,no,169,yes,no,unknown,30,may,447,1,-1,0,unknown,no +50,blue-collar,divorced,primary,no,388,no,no,cellular,5,feb,701,1,-1,0,unknown,no +42,unknown,single,unknown,yes,61,no,no,unknown,20,jun,115,1,-1,0,unknown,no +37,management,married,tertiary,no,7100,no,no,cellular,20,nov,757,2,-1,0,unknown,no +36,blue-collar,single,secondary,no,219,yes,yes,cellular,11,may,270,2,347,1,failure,no +53,blue-collar,married,secondary,no,-76,no,no,cellular,29,jan,173,1,164,4,other,no +51,blue-collar,married,unknown,no,1432,no,no,cellular,9,jul,388,1,-1,0,unknown,no +42,blue-collar,married,secondary,no,879,yes,no,cellular,18,nov,140,1,-1,0,unknown,no +47,housemaid,married,primary,no,0,yes,no,telephone,24,jul,193,1,-1,0,unknown,no +40,self-employed,married,tertiary,no,1498,no,no,cellular,4,feb,62,1,-1,0,unknown,no +25,blue-collar,single,secondary,no,543,yes,no,cellular,15,may,302,1,-1,0,unknown,no +36,blue-collar,married,secondary,no,1797,yes,yes,cellular,17,nov,166,1,181,2,failure,no +80,retired,married,primary,no,2994,no,no,cellular,6,aug,320,1,-1,0,unknown,no +60,self-employed,married,secondary,no,1690,no,no,cellular,28,aug,64,11,-1,0,unknown,no +51,management,married,secondary,no,1573,no,no,cellular,28,aug,72,18,-1,0,unknown,no +59,housemaid,married,tertiary,no,0,no,yes,cellular,29,jul,376,2,-1,0,unknown,no +80,retired,married,secondary,no,173,no,no,cellular,2,aug,87,3,-1,0,unknown,no +47,admin.,married,unknown,no,989,no,no,unknown,19,jun,116,1,-1,0,unknown,no +36,services,married,secondary,no,335,yes,no,unknown,9,may,339,2,-1,0,unknown,no +31,blue-collar,single,unknown,yes,17,yes,no,cellular,6,may,72,1,-1,0,unknown,no +33,technician,married,secondary,no,-74,yes,no,cellular,25,jul,198,4,-1,0,unknown,no +45,services,married,unknown,no,8319,no,no,cellular,15,jun,75,2,-1,0,unknown,no +33,blue-collar,single,secondary,no,15341,no,no,cellular,20,apr,335,1,334,3,failure,no +51,technician,married,secondary,no,52,no,no,cellular,13,aug,114,2,-1,0,unknown,no +51,unemployed,divorced,secondary,no,-56,yes,no,cellular,19,nov,544,3,-1,0,unknown,no +48,blue-collar,married,primary,no,1670,no,no,unknown,17,jun,145,1,-1,0,unknown,no +34,technician,single,tertiary,no,370,no,no,cellular,11,aug,116,2,-1,0,unknown,no +28,management,single,tertiary,no,466,yes,no,cellular,23,jul,170,2,-1,0,unknown,no +33,technician,single,secondary,no,2583,no,no,cellular,25,may,241,1,108,1,failure,no +36,services,married,secondary,no,1177,yes,yes,cellular,3,feb,50,5,-1,0,unknown,no +40,self-employed,married,secondary,no,311,yes,no,unknown,20,may,723,2,-1,0,unknown,no +34,entrepreneur,married,tertiary,no,842,yes,no,cellular,6,may,141,2,-1,0,unknown,no +31,technician,single,tertiary,no,2744,yes,no,cellular,8,aug,309,2,-1,0,unknown,no +49,technician,married,tertiary,no,503,no,no,unknown,1,jul,297,2,-1,0,unknown,no +35,management,single,tertiary,no,62,yes,no,cellular,5,may,214,4,15,3,success,no +38,management,single,tertiary,no,4841,no,no,cellular,22,may,580,3,-1,0,unknown,no +32,technician,married,secondary,no,253,yes,no,cellular,21,nov,76,1,170,3,failure,no +33,blue-collar,married,secondary,no,842,no,no,cellular,29,aug,111,4,-1,0,unknown,no +39,admin.,married,unknown,no,378,no,no,unknown,20,jun,17,5,-1,0,unknown,no +30,services,married,secondary,no,637,yes,no,cellular,15,may,69,5,-1,0,unknown,no +53,admin.,divorced,secondary,no,-372,yes,no,unknown,26,may,104,1,-1,0,unknown,no +24,technician,single,secondary,no,135,yes,yes,cellular,18,may,250,1,-1,0,unknown,no +52,entrepreneur,divorced,secondary,no,7,no,no,cellular,24,jul,150,5,-1,0,unknown,no +27,management,single,tertiary,no,446,no,no,cellular,23,jun,205,3,-1,0,unknown,no +36,admin.,single,secondary,no,1328,no,no,cellular,30,jul,69,9,-1,0,unknown,no +29,admin.,married,secondary,no,252,yes,no,cellular,15,may,1223,3,371,1,failure,no +47,blue-collar,married,secondary,no,125,no,no,cellular,8,jul,210,2,-1,0,unknown,no +43,blue-collar,married,secondary,no,1324,yes,no,telephone,12,may,179,5,-1,0,unknown,no +48,management,divorced,tertiary,no,-244,yes,no,unknown,5,may,253,1,-1,0,unknown,no +57,entrepreneur,married,unknown,no,657,no,no,unknown,12,jun,344,1,-1,0,unknown,no +25,management,single,tertiary,no,2140,no,no,cellular,1,oct,81,1,-1,0,unknown,no +43,services,divorced,secondary,no,5571,no,no,unknown,9,jun,149,1,-1,0,unknown,no +50,technician,married,secondary,no,103,yes,no,unknown,12,may,79,6,-1,0,unknown,no +54,technician,divorced,tertiary,no,2133,no,no,cellular,18,nov,176,1,-1,0,unknown,no +38,services,married,secondary,no,8876,no,no,cellular,19,nov,636,1,-1,0,unknown,no +41,housemaid,divorced,primary,no,22,yes,no,cellular,18,nov,238,3,126,4,other,no +35,admin.,married,secondary,no,3854,yes,no,cellular,5,may,131,1,-1,0,unknown,no +33,management,married,tertiary,no,32,no,no,cellular,29,aug,27,7,-1,0,unknown,no +51,technician,married,secondary,no,337,yes,no,cellular,20,aug,687,4,-1,0,unknown,no +29,blue-collar,single,secondary,no,228,no,no,cellular,5,feb,355,1,-1,0,unknown,no +34,blue-collar,divorced,secondary,no,1125,yes,yes,cellular,19,nov,141,2,-1,0,unknown,no +51,management,married,tertiary,no,1612,yes,no,cellular,18,nov,61,2,131,1,failure,no +58,housemaid,married,primary,no,1310,yes,yes,cellular,22,jul,1226,2,-1,0,unknown,no +50,services,divorced,secondary,yes,-210,no,yes,cellular,21,aug,153,7,-1,0,unknown,no +38,housemaid,married,secondary,no,0,yes,no,cellular,23,jul,157,1,-1,0,unknown,no +57,entrepreneur,married,unknown,no,975,yes,yes,cellular,22,jul,236,4,-1,0,unknown,no +49,services,married,tertiary,no,306,yes,no,cellular,18,aug,285,7,-1,0,unknown,no +42,blue-collar,married,primary,no,170,yes,no,unknown,19,may,51,41,-1,0,unknown,no +33,technician,single,tertiary,no,154,no,no,cellular,18,mar,159,2,-1,0,unknown,no +34,self-employed,married,tertiary,no,1972,yes,no,cellular,23,jul,61,2,-1,0,unknown,no +36,admin.,single,tertiary,no,994,no,no,cellular,13,aug,185,2,105,3,success,no +60,retired,divorced,tertiary,no,380,no,no,cellular,21,jul,219,1,-1,0,unknown,no +37,services,single,secondary,no,54,yes,no,cellular,10,jul,118,1,-1,0,unknown,no +41,blue-collar,married,primary,no,512,yes,no,unknown,6,may,233,2,-1,0,unknown,no +36,management,single,tertiary,no,1027,yes,no,cellular,4,jun,151,1,-1,0,unknown,no +56,unemployed,divorced,primary,no,1770,no,no,cellular,5,feb,916,3,-1,0,unknown,no +34,management,married,tertiary,no,13,yes,no,cellular,30,jul,99,3,-1,0,unknown,no +33,unemployed,married,secondary,no,438,yes,yes,unknown,21,may,129,1,-1,0,unknown,no +29,blue-collar,married,secondary,no,162,yes,no,cellular,15,jul,126,3,-1,0,unknown,no +43,management,married,tertiary,no,-183,no,no,cellular,24,jul,65,1,-1,0,unknown,no +29,management,single,unknown,no,698,no,no,cellular,8,feb,186,1,-1,0,unknown,no +36,admin.,married,secondary,no,165,yes,no,unknown,23,may,456,4,-1,0,unknown,no +33,technician,single,secondary,no,3499,yes,no,cellular,11,may,143,3,356,1,other,no +39,management,married,tertiary,no,378,yes,yes,unknown,5,may,127,2,-1,0,unknown,no +26,technician,single,secondary,no,855,yes,no,unknown,28,may,87,2,-1,0,unknown,no +41,technician,single,secondary,no,32,yes,no,cellular,7,may,162,1,-1,0,unknown,no +36,unemployed,divorced,primary,no,0,no,no,telephone,4,jul,304,3,-1,0,unknown,no +31,management,single,tertiary,no,0,no,no,cellular,25,aug,191,5,-1,0,unknown,no +34,blue-collar,married,secondary,no,2994,yes,no,cellular,15,may,358,1,176,1,failure,no +28,blue-collar,married,secondary,no,1238,yes,no,unknown,14,may,246,1,-1,0,unknown,no +47,services,married,secondary,no,1717,no,no,cellular,20,aug,216,9,-1,0,unknown,no +41,admin.,single,secondary,no,224,yes,no,cellular,12,may,22,8,-1,0,unknown,no +39,technician,single,secondary,no,1048,yes,yes,cellular,8,apr,201,2,-1,0,unknown,no +53,admin.,divorced,secondary,no,592,yes,no,unknown,13,may,151,1,-1,0,unknown,no +45,self-employed,married,secondary,no,396,no,no,cellular,28,aug,238,1,-1,0,unknown,no +30,services,single,secondary,no,268,no,no,unknown,24,jul,86,1,-1,0,unknown,no +39,services,married,secondary,no,0,yes,no,cellular,8,may,503,1,-1,0,unknown,no +30,self-employed,single,secondary,no,5223,no,no,cellular,14,oct,404,2,-1,0,unknown,no +32,admin.,divorced,secondary,no,1611,yes,yes,unknown,13,may,93,1,-1,0,unknown,no +66,retired,married,secondary,no,780,no,no,cellular,12,feb,388,4,-1,0,unknown,no +26,blue-collar,married,primary,no,399,yes,no,cellular,22,jul,1288,2,-1,0,unknown,no +30,services,single,secondary,no,1649,yes,no,unknown,23,may,206,1,-1,0,unknown,no +42,services,single,unknown,no,974,no,no,cellular,30,jul,73,2,-1,0,unknown,no +44,management,married,tertiary,no,22,yes,no,cellular,6,aug,265,2,-1,0,unknown,no +38,services,married,secondary,no,507,yes,no,cellular,17,apr,55,1,344,1,failure,no +31,technician,divorced,secondary,no,10787,yes,no,unknown,4,jun,135,2,-1,0,unknown,no +34,technician,married,secondary,no,-259,yes,no,unknown,27,may,124,2,-1,0,unknown,no +42,blue-collar,married,secondary,no,414,yes,no,cellular,17,apr,400,3,-1,0,unknown,no +34,admin.,divorced,secondary,no,67,yes,no,unknown,6,may,90,1,-1,0,unknown,no +31,blue-collar,single,tertiary,no,328,yes,no,cellular,14,may,414,1,175,1,failure,no +30,technician,married,secondary,no,4,yes,no,cellular,8,may,17,5,-1,0,unknown,no +31,management,single,tertiary,no,471,no,no,cellular,29,aug,153,2,-1,0,unknown,no +47,blue-collar,married,primary,no,3038,yes,no,cellular,14,jul,151,2,-1,0,unknown,no +52,blue-collar,married,secondary,no,2276,no,no,unknown,20,jun,83,3,-1,0,unknown,no +31,blue-collar,married,primary,no,-848,yes,no,unknown,23,may,559,3,-1,0,unknown,no +51,admin.,married,secondary,no,2662,no,no,telephone,28,jan,148,2,-1,0,unknown,no +48,services,married,secondary,no,2597,yes,no,cellular,6,may,182,2,355,1,failure,no +47,blue-collar,married,primary,no,550,yes,no,unknown,7,may,113,1,-1,0,unknown,no +55,retired,married,tertiary,no,357,yes,no,cellular,30,apr,878,1,-1,0,unknown,no +58,entrepreneur,married,primary,no,1153,yes,yes,telephone,12,may,206,6,337,6,failure,no +74,retired,married,tertiary,no,4912,no,no,telephone,21,oct,129,3,-1,0,unknown,no +30,technician,single,secondary,no,194,no,yes,cellular,27,aug,60,3,-1,0,unknown,no +40,management,married,tertiary,yes,0,no,no,cellular,28,jul,165,5,-1,0,unknown,no +50,blue-collar,married,primary,no,565,yes,yes,cellular,28,aug,36,3,-1,0,unknown,no +36,management,divorced,tertiary,no,649,no,no,cellular,16,jul,237,2,91,1,failure,no +26,admin.,divorced,secondary,no,-45,yes,no,unknown,4,jun,357,2,-1,0,unknown,no +30,admin.,married,secondary,no,1310,no,no,telephone,27,oct,3284,1,-1,0,unknown,no +34,blue-collar,married,secondary,no,2308,yes,no,unknown,7,may,1062,1,-1,0,unknown,no +53,unemployed,single,secondary,no,4,no,no,cellular,30,jul,259,3,-1,0,unknown,no +42,blue-collar,married,secondary,no,1297,yes,no,cellular,3,apr,697,2,-1,0,unknown,no +33,management,married,tertiary,no,1808,yes,no,unknown,4,jun,99,4,-1,0,unknown,no +35,unemployed,married,secondary,no,2080,yes,no,telephone,14,apr,266,3,-1,0,unknown,no +33,services,married,secondary,no,5034,yes,no,unknown,8,may,207,3,-1,0,unknown,no +41,admin.,divorced,secondary,no,322,yes,no,unknown,6,may,87,4,-1,0,unknown,no +40,blue-collar,married,secondary,no,679,yes,no,cellular,17,apr,642,2,304,1,failure,no +32,management,single,tertiary,no,1742,no,no,unknown,5,jun,231,2,-1,0,unknown,no +54,management,married,tertiary,no,154,no,no,unknown,9,may,155,3,-1,0,unknown,no +31,unemployed,single,tertiary,no,140,yes,no,telephone,7,may,11,2,-1,0,unknown,no +35,services,married,secondary,no,377,no,yes,cellular,31,jul,30,13,-1,0,unknown,no +47,services,single,secondary,no,3644,no,no,unknown,9,jun,83,2,-1,0,unknown,no +48,blue-collar,married,primary,yes,-50,yes,no,cellular,14,may,212,6,-1,0,unknown,no +50,management,married,tertiary,no,453,no,yes,unknown,4,jul,608,1,-1,0,unknown,no +33,blue-collar,single,secondary,no,45,no,no,unknown,20,jun,13,12,-1,0,unknown,no +40,blue-collar,married,primary,no,46,yes,no,unknown,6,may,119,1,-1,0,unknown,no +60,retired,married,secondary,no,2060,no,no,cellular,29,jun,135,4,95,4,failure,no +68,retired,married,secondary,no,1316,no,no,telephone,4,mar,92,5,-1,0,unknown,no +54,blue-collar,married,unknown,no,-361,yes,no,unknown,26,may,227,1,-1,0,unknown,no +30,management,single,tertiary,no,349,no,no,cellular,12,aug,180,3,-1,0,unknown,no +42,blue-collar,single,primary,no,-68,yes,yes,unknown,26,may,167,1,-1,0,unknown,no +57,retired,married,unknown,no,-157,no,no,cellular,28,aug,31,9,-1,0,unknown,no +28,management,single,tertiary,no,320,yes,no,cellular,30,apr,239,1,-1,0,unknown,no +55,management,married,tertiary,no,86,no,no,telephone,16,jun,64,1,-1,0,unknown,no +42,blue-collar,married,secondary,no,681,yes,no,cellular,18,nov,203,1,-1,0,unknown,no +49,housemaid,married,primary,no,0,yes,no,cellular,25,jul,42,3,-1,0,unknown,no +41,management,divorced,tertiary,no,4567,yes,yes,cellular,16,jul,106,1,-1,0,unknown,no +31,technician,single,secondary,no,40,no,no,cellular,7,aug,123,2,-1,0,unknown,no +33,blue-collar,single,secondary,no,706,yes,no,cellular,7,apr,329,1,322,1,failure,no +55,admin.,married,secondary,no,420,yes,no,unknown,30,may,41,3,-1,0,unknown,no +34,technician,single,tertiary,no,0,yes,no,cellular,17,apr,158,2,-1,0,unknown,no +38,entrepreneur,married,secondary,no,65,no,no,cellular,5,feb,173,1,-1,0,unknown,no +46,blue-collar,married,secondary,no,-27,yes,no,cellular,11,may,254,1,-1,0,unknown,no +49,services,single,primary,no,114,yes,no,unknown,7,may,99,2,-1,0,unknown,no +44,technician,single,tertiary,no,678,no,no,cellular,3,feb,111,1,124,2,other,no +57,technician,divorced,secondary,no,3105,yes,no,unknown,14,may,173,11,-1,0,unknown,no +44,housemaid,married,secondary,no,281,yes,no,unknown,8,may,604,1,-1,0,unknown,no +42,self-employed,married,tertiary,no,1932,yes,no,unknown,16,may,192,32,-1,0,unknown,no +37,management,divorced,tertiary,no,481,yes,no,cellular,19,aug,97,6,-1,0,unknown,no +42,blue-collar,single,primary,no,156,yes,no,telephone,15,may,7,4,371,5,failure,no +33,blue-collar,married,secondary,no,0,yes,yes,cellular,31,jul,16,43,-1,0,unknown,no +31,blue-collar,married,secondary,no,557,yes,yes,unknown,27,may,185,1,-1,0,unknown,no +34,admin.,married,secondary,no,1467,yes,no,cellular,17,apr,113,1,332,2,failure,no +26,blue-collar,single,secondary,no,428,no,yes,cellular,7,jul,575,1,-1,0,unknown,no +42,technician,married,secondary,no,994,yes,no,cellular,25,may,365,5,-1,0,unknown,no +41,technician,single,secondary,no,769,no,yes,cellular,20,nov,222,4,98,4,other,no +35,technician,married,tertiary,no,108,yes,no,cellular,31,jul,65,3,-1,0,unknown,no +26,student,single,unknown,no,19,no,no,telephone,30,apr,268,1,-1,0,unknown,no +42,management,married,tertiary,no,199,yes,no,cellular,9,jul,497,1,-1,0,unknown,no +36,blue-collar,married,primary,no,448,yes,no,unknown,5,may,286,1,-1,0,unknown,no +60,admin.,single,secondary,no,473,no,no,cellular,5,feb,175,2,8,1,other,no +51,entrepreneur,married,primary,no,726,yes,yes,cellular,15,apr,87,2,-1,0,unknown,no +32,management,single,tertiary,no,0,no,no,cellular,22,aug,148,2,-1,0,unknown,no +46,blue-collar,married,secondary,no,536,yes,no,unknown,15,may,164,2,-1,0,unknown,no +31,blue-collar,single,secondary,no,2194,no,no,cellular,13,may,275,2,357,1,other,no +42,housemaid,divorced,secondary,no,1406,yes,no,cellular,22,jul,178,1,-1,0,unknown,no +45,technician,married,secondary,no,44,yes,no,unknown,5,may,95,4,-1,0,unknown,no +31,management,divorced,tertiary,no,-6,no,yes,cellular,22,aug,119,6,-1,0,unknown,no +41,technician,divorced,secondary,no,1631,yes,no,cellular,12,aug,173,2,-1,0,unknown,no +28,blue-collar,single,secondary,no,4054,yes,no,cellular,11,may,133,2,-1,0,unknown,no +41,technician,divorced,secondary,no,75,no,no,cellular,20,aug,351,2,-1,0,unknown,no +36,student,single,unknown,no,172,no,no,unknown,12,jun,81,1,-1,0,unknown,no +41,blue-collar,married,secondary,no,356,yes,no,cellular,14,may,90,5,-1,0,unknown,no +40,blue-collar,married,secondary,no,1508,no,no,cellular,3,nov,177,2,85,3,failure,no +40,services,divorced,secondary,no,49,no,yes,cellular,18,jul,191,1,-1,0,unknown,no +58,blue-collar,married,secondary,no,544,no,no,unknown,17,jun,97,1,-1,0,unknown,no +32,management,married,tertiary,no,-383,yes,no,unknown,27,may,241,1,-1,0,unknown,no +30,technician,married,tertiary,no,606,yes,no,cellular,30,apr,551,1,-1,0,unknown,no +43,management,divorced,tertiary,no,-410,no,yes,cellular,9,jul,189,1,-1,0,unknown,no +33,technician,single,tertiary,no,469,no,no,cellular,26,aug,158,9,-1,0,unknown,no +30,management,single,tertiary,no,2,no,no,cellular,23,mar,269,1,-1,0,unknown,no +37,services,divorced,secondary,no,241,yes,no,cellular,14,may,189,1,371,1,failure,no +40,technician,divorced,secondary,no,0,no,no,cellular,29,aug,299,3,-1,0,unknown,no +39,services,single,secondary,no,322,yes,no,cellular,11,may,35,1,350,1,failure,no +39,management,divorced,tertiary,no,2193,yes,yes,unknown,2,jun,550,3,-1,0,unknown,no +26,entrepreneur,married,tertiary,yes,144,no,yes,cellular,25,jul,730,1,-1,0,unknown,no +35,services,married,secondary,no,0,yes,no,cellular,24,jul,810,1,-1,0,unknown,no +59,management,married,unknown,no,3428,yes,yes,cellular,19,nov,103,1,-1,0,unknown,no +31,entrepreneur,married,secondary,no,10,yes,yes,cellular,29,jan,161,3,188,9,failure,no +36,management,single,tertiary,no,1841,yes,no,cellular,25,aug,141,4,-1,0,unknown,no +26,technician,single,secondary,no,84,yes,no,cellular,29,jul,70,3,-1,0,unknown,no +36,housemaid,married,primary,no,622,no,no,unknown,20,jun,55,5,-1,0,unknown,no +59,technician,married,primary,no,309,no,yes,cellular,29,jul,25,5,-1,0,unknown,no +42,services,married,secondary,no,154,yes,no,telephone,14,may,346,5,372,1,other,no +35,blue-collar,married,secondary,no,1949,yes,no,unknown,2,jun,200,3,-1,0,unknown,no +59,blue-collar,married,secondary,no,2605,no,no,cellular,30,jan,85,2,-1,0,unknown,no +44,technician,married,secondary,no,5163,no,no,cellular,11,aug,48,2,-1,0,unknown,no +34,management,married,tertiary,no,557,yes,no,cellular,16,jul,513,1,-1,0,unknown,no +36,technician,divorced,tertiary,no,119,no,no,cellular,23,jul,127,8,-1,0,unknown,no +43,management,married,tertiary,no,0,yes,no,cellular,5,feb,280,2,-1,0,unknown,no +45,unknown,married,unknown,no,356,no,no,cellular,11,aug,212,2,-1,0,unknown,no +29,technician,single,secondary,no,1395,yes,no,unknown,26,may,61,1,-1,0,unknown,no +29,services,single,secondary,no,20,yes,no,unknown,15,may,431,1,-1,0,unknown,no +40,technician,married,tertiary,no,84,no,no,cellular,28,aug,715,8,-1,0,unknown,no +31,blue-collar,single,secondary,no,609,yes,no,cellular,14,apr,1126,1,335,1,failure,no +29,technician,single,secondary,no,1856,yes,yes,cellular,18,may,134,1,-1,0,unknown,no +37,services,single,secondary,no,608,no,no,cellular,14,may,380,3,-1,0,unknown,no +35,admin.,single,secondary,no,0,no,yes,cellular,7,jul,480,1,-1,0,unknown,no +35,entrepreneur,married,tertiary,no,1859,yes,no,cellular,14,jul,227,2,-1,0,unknown,no +39,services,divorced,secondary,no,282,yes,no,cellular,17,jul,243,1,-1,0,unknown,no +28,student,single,secondary,no,154,yes,no,unknown,20,may,21,9,-1,0,unknown,no +31,services,single,secondary,no,222,yes,no,cellular,13,may,168,2,-1,0,unknown,no +34,housemaid,married,tertiary,no,897,no,no,cellular,12,aug,197,4,-1,0,unknown,no +31,entrepreneur,single,secondary,no,131,yes,no,cellular,21,jul,157,1,-1,0,unknown,no +51,blue-collar,married,primary,no,0,no,no,unknown,8,may,384,1,-1,0,unknown,no +53,management,married,tertiary,no,37,no,no,cellular,28,aug,51,9,-1,0,unknown,no +34,admin.,single,secondary,no,1704,yes,no,unknown,15,may,218,2,-1,0,unknown,no +42,technician,married,secondary,no,314,no,no,cellular,27,aug,11,22,-1,0,unknown,no +33,technician,married,secondary,no,399,yes,no,cellular,7,may,143,1,-1,0,unknown,no +29,self-employed,single,tertiary,no,300,no,no,cellular,3,feb,125,1,-1,0,unknown,no +25,services,single,secondary,no,382,yes,no,unknown,13,may,392,1,-1,0,unknown,no +42,services,married,secondary,no,1301,yes,no,cellular,21,jul,510,6,-1,0,unknown,no +46,unemployed,divorced,secondary,no,0,no,no,cellular,30,jul,638,3,-1,0,unknown,no +52,technician,married,secondary,no,930,yes,no,unknown,2,jun,94,16,-1,0,unknown,no +60,management,divorced,primary,no,21,no,yes,telephone,14,jul,113,3,-1,0,unknown,no +25,services,single,secondary,no,111,no,yes,cellular,7,jul,316,1,-1,0,unknown,no +55,technician,single,secondary,no,1199,no,yes,telephone,4,may,159,10,-1,0,unknown,no +37,unemployed,divorced,tertiary,no,1085,no,no,cellular,25,aug,146,4,-1,0,unknown,no +49,blue-collar,married,primary,no,230,no,yes,unknown,30,jun,176,1,-1,0,unknown,no +42,entrepreneur,married,primary,no,558,yes,no,cellular,6,may,186,2,-1,0,unknown,no +32,technician,single,tertiary,no,127,yes,no,cellular,27,aug,20,17,-1,0,unknown,no +43,technician,married,primary,no,4844,yes,no,cellular,19,nov,434,1,-1,0,unknown,no +26,student,single,unknown,no,826,no,no,cellular,29,jan,177,1,-1,0,unknown,no +41,technician,single,secondary,no,30,no,no,unknown,23,may,1003,1,-1,0,unknown,no +30,management,single,tertiary,no,2708,no,no,cellular,19,nov,479,1,-1,0,unknown,no +42,services,married,secondary,no,108,yes,yes,cellular,13,may,225,2,365,7,failure,no +34,blue-collar,married,secondary,no,577,no,no,unknown,14,may,337,1,-1,0,unknown,no +20,student,single,tertiary,no,2764,yes,no,unknown,29,may,139,2,-1,0,unknown,no +45,unknown,married,unknown,no,2834,no,no,cellular,4,aug,112,1,-1,0,unknown,no +58,retired,married,secondary,no,-324,yes,no,cellular,7,may,229,2,-1,0,unknown,no +51,management,married,tertiary,no,4,yes,no,cellular,21,nov,58,2,-1,0,unknown,no +55,management,married,unknown,no,559,no,no,cellular,28,jan,271,2,-1,0,unknown,no +31,technician,single,secondary,no,271,yes,no,cellular,5,may,269,1,-1,0,unknown,no +42,housemaid,single,primary,no,5774,yes,no,unknown,15,may,54,2,-1,0,unknown,no +48,blue-collar,married,primary,no,816,yes,no,cellular,31,jul,114,7,-1,0,unknown,no +62,retired,married,secondary,no,3,no,no,cellular,4,aug,151,1,-1,0,unknown,no +40,admin.,divorced,secondary,no,274,yes,yes,cellular,25,jul,53,4,-1,0,unknown,no +37,management,married,tertiary,no,11265,no,no,unknown,18,jun,417,1,-1,0,unknown,no +39,housemaid,divorced,secondary,no,70,no,no,cellular,4,jun,346,2,128,8,success,no +34,blue-collar,married,secondary,no,405,yes,no,unknown,21,may,103,1,-1,0,unknown,no +52,technician,married,secondary,no,22755,yes,no,unknown,29,may,70,2,-1,0,unknown,no +35,admin.,married,secondary,no,557,yes,no,cellular,17,jun,54,4,-1,0,unknown,no +56,admin.,married,secondary,no,1554,yes,yes,cellular,6,feb,15,6,190,27,other,no +37,blue-collar,married,primary,no,89,no,yes,telephone,8,jul,336,4,-1,0,unknown,no +35,blue-collar,married,secondary,no,444,yes,no,cellular,15,apr,244,3,-1,0,unknown,no +31,student,single,tertiary,no,4951,no,no,cellular,28,jun,150,3,-1,0,unknown,no +42,admin.,single,secondary,no,30,yes,no,cellular,4,feb,98,1,266,3,failure,no +27,services,married,secondary,no,1,no,no,cellular,29,jan,528,3,-1,0,unknown,no +33,technician,single,secondary,no,0,no,no,unknown,3,jul,1106,2,-1,0,unknown,no +31,management,single,tertiary,no,0,yes,no,cellular,30,apr,97,2,87,2,other,no +53,blue-collar,married,secondary,no,1093,yes,yes,unknown,16,jun,244,3,-1,0,unknown,no +56,technician,divorced,secondary,no,1561,no,no,cellular,13,aug,75,1,-1,0,unknown,no +80,retired,married,primary,no,1861,no,no,telephone,14,apr,563,2,-1,0,unknown,no +63,housemaid,married,primary,no,333,no,no,telephone,1,oct,321,1,-1,0,unknown,no +37,entrepreneur,married,tertiary,no,342,yes,no,unknown,6,jun,212,1,-1,0,unknown,no +43,admin.,married,secondary,no,388,yes,no,cellular,19,nov,111,2,-1,0,unknown,no +62,retired,married,primary,no,1515,yes,no,cellular,19,oct,131,1,187,2,failure,no +25,admin.,single,secondary,no,654,no,no,cellular,8,apr,216,1,-1,0,unknown,no +51,services,married,secondary,no,-467,no,no,unknown,9,jun,216,5,-1,0,unknown,no +39,blue-collar,married,primary,no,398,yes,no,cellular,12,may,256,1,-1,0,unknown,no +47,technician,married,secondary,no,0,no,no,unknown,11,nov,74,1,-1,0,unknown,no +39,blue-collar,married,primary,no,12848,yes,no,unknown,5,jun,337,2,-1,0,unknown,no +32,technician,single,secondary,no,5205,no,no,cellular,20,nov,352,1,-1,0,unknown,no +30,management,married,tertiary,no,-181,yes,no,cellular,19,nov,621,2,-1,0,unknown,no +34,management,married,tertiary,no,250,no,no,cellular,9,dec,787,1,188,8,other,no +41,admin.,divorced,secondary,no,110,yes,yes,cellular,5,feb,76,2,-1,0,unknown,no +44,management,married,tertiary,no,445,no,yes,telephone,6,feb,135,2,9,7,other,no +43,management,married,tertiary,no,175,yes,no,cellular,17,apr,129,4,337,1,other,no +30,technician,single,secondary,no,458,no,no,cellular,20,nov,51,7,-1,0,unknown,no +46,management,married,secondary,no,5127,no,no,cellular,6,aug,472,1,-1,0,unknown,no +36,blue-collar,married,secondary,no,928,no,no,cellular,17,apr,224,3,-1,0,unknown,no +56,admin.,married,secondary,no,105,no,no,telephone,15,jul,80,2,-1,0,unknown,no +44,self-employed,single,tertiary,no,18558,yes,no,cellular,20,nov,51,1,190,4,other,no +37,technician,single,secondary,yes,375,no,no,unknown,9,jun,223,2,-1,0,unknown,no +36,management,divorced,tertiary,no,133,yes,no,unknown,9,may,117,1,-1,0,unknown,no +24,management,married,secondary,no,2278,yes,no,unknown,27,may,77,4,-1,0,unknown,no +49,technician,single,unknown,no,443,no,no,unknown,20,jun,25,11,-1,0,unknown,no +69,services,married,unknown,no,23592,no,no,cellular,3,jul,837,3,-1,0,unknown,no +47,housemaid,divorced,primary,no,61,no,no,cellular,29,jul,69,5,-1,0,unknown,no +29,services,single,secondary,no,192,no,no,cellular,30,jan,327,4,-1,0,unknown,no +31,technician,single,secondary,no,628,yes,no,unknown,12,may,1083,2,-1,0,unknown,no +42,management,married,secondary,no,372,yes,no,telephone,31,jul,130,8,-1,0,unknown,no +30,management,single,tertiary,no,222,no,yes,cellular,4,feb,111,1,204,2,other,no +26,admin.,married,secondary,no,2469,no,no,cellular,16,jul,136,8,-1,0,unknown,no +37,unemployed,married,secondary,no,459,no,no,cellular,20,nov,109,4,-1,0,unknown,no +28,blue-collar,married,primary,no,254,yes,no,cellular,20,apr,149,2,-1,0,unknown,no +36,management,divorced,tertiary,no,563,no,no,unknown,20,jun,10,4,-1,0,unknown,no +46,blue-collar,married,primary,no,-29,yes,no,unknown,12,may,322,1,-1,0,unknown,no +58,blue-collar,married,primary,no,494,no,no,cellular,14,aug,171,10,-1,0,unknown,no +46,blue-collar,married,secondary,no,781,no,no,unknown,13,may,152,1,-1,0,unknown,no +47,management,married,primary,no,2793,yes,no,telephone,25,jul,102,4,-1,0,unknown,no +50,services,married,secondary,no,1134,no,no,unknown,18,jun,53,2,-1,0,unknown,no +47,technician,married,tertiary,no,4568,no,no,unknown,9,jun,100,1,-1,0,unknown,no +26,student,single,secondary,no,0,yes,no,unknown,5,may,610,2,-1,0,unknown,no +42,technician,married,tertiary,no,1189,no,no,unknown,5,jun,323,3,-1,0,unknown,no +34,technician,single,secondary,no,692,yes,no,unknown,20,may,254,1,-1,0,unknown,no +46,management,married,tertiary,no,716,yes,yes,cellular,8,may,557,1,172,1,failure,no +51,admin.,divorced,secondary,no,520,no,yes,cellular,10,jul,157,1,-1,0,unknown,no +52,unemployed,married,tertiary,no,2133,no,yes,cellular,18,jul,90,1,-1,0,unknown,no +38,technician,single,secondary,no,0,no,no,cellular,22,aug,305,2,-1,0,unknown,no +44,management,married,tertiary,no,70,no,no,cellular,20,aug,165,3,-1,0,unknown,no +52,admin.,single,unknown,no,872,yes,no,telephone,18,may,82,6,335,1,other,no +32,management,married,tertiary,no,2458,yes,no,cellular,4,may,77,2,-1,0,unknown,no +35,self-employed,single,tertiary,no,-30,no,no,cellular,4,feb,218,2,-1,0,unknown,no +36,blue-collar,married,primary,no,409,yes,no,unknown,11,jun,81,3,-1,0,unknown,no +37,self-employed,divorced,tertiary,no,60,no,yes,unknown,4,jul,426,3,-1,0,unknown,no +26,management,divorced,tertiary,no,667,no,no,telephone,19,jun,177,2,-1,0,unknown,no +32,admin.,single,secondary,no,620,no,no,cellular,17,apr,211,2,343,3,failure,no +46,admin.,divorced,secondary,no,-60,no,no,cellular,17,nov,117,1,-1,0,unknown,no +50,entrepreneur,married,primary,no,237,yes,yes,unknown,30,may,184,4,-1,0,unknown,no +43,management,married,secondary,no,373,yes,no,unknown,28,may,54,1,-1,0,unknown,no +55,unemployed,married,primary,no,1221,no,yes,cellular,8,jul,108,1,-1,0,unknown,no +35,blue-collar,married,secondary,no,0,yes,yes,cellular,8,apr,519,1,-1,0,unknown,no +45,technician,married,secondary,no,999,yes,no,unknown,16,may,656,2,-1,0,unknown,no +48,technician,married,unknown,no,67,yes,no,unknown,14,may,328,4,-1,0,unknown,no +31,technician,married,secondary,yes,-463,yes,no,unknown,28,may,210,1,-1,0,unknown,no +46,blue-collar,married,primary,no,7934,yes,no,unknown,19,may,123,1,-1,0,unknown,no +50,entrepreneur,divorced,tertiary,no,816,no,no,cellular,19,nov,630,1,-1,0,unknown,no +53,technician,married,tertiary,no,2557,no,no,cellular,29,jul,95,4,182,7,success,no +36,entrepreneur,married,secondary,no,546,no,no,cellular,9,feb,297,3,-1,0,unknown,no +50,entrepreneur,married,secondary,no,78,no,no,telephone,4,jun,143,1,-1,0,unknown,no +40,management,married,tertiary,no,24450,no,no,cellular,25,aug,73,2,-1,0,unknown,no +39,admin.,divorced,secondary,no,765,no,no,unknown,9,jun,155,3,-1,0,unknown,no +38,management,single,tertiary,no,91,yes,no,unknown,19,may,492,9,-1,0,unknown,no +32,technician,single,tertiary,no,703,yes,no,cellular,3,feb,489,2,271,2,success,no +31,technician,married,secondary,no,589,yes,yes,unknown,21,may,151,1,-1,0,unknown,no +41,admin.,married,secondary,no,0,no,no,unknown,20,jun,89,1,-1,0,unknown,no +41,self-employed,single,tertiary,no,1755,no,no,unknown,11,jun,152,10,-1,0,unknown,no +58,retired,married,primary,no,269,yes,no,unknown,16,may,38,2,-1,0,unknown,no +36,technician,married,secondary,no,432,yes,no,cellular,11,may,61,3,255,2,failure,no +54,self-employed,divorced,primary,no,4382,yes,no,telephone,18,may,193,4,-1,0,unknown,no +32,services,married,secondary,no,109,yes,no,unknown,2,jun,364,13,-1,0,unknown,no +54,retired,divorced,primary,no,52,no,no,unknown,19,jun,184,3,-1,0,unknown,no +46,blue-collar,married,secondary,no,922,no,yes,cellular,14,jul,151,2,-1,0,unknown,no +31,blue-collar,married,secondary,no,1779,yes,no,unknown,5,jun,85,2,-1,0,unknown,no +34,technician,divorced,secondary,no,8,yes,no,cellular,6,may,569,2,-1,0,unknown,no +46,blue-collar,married,primary,no,-271,yes,no,cellular,25,jul,65,2,-1,0,unknown,no +45,admin.,married,secondary,no,0,no,no,cellular,19,aug,145,10,-1,0,unknown,no +30,management,married,tertiary,no,14,no,no,cellular,24,jul,90,2,-1,0,unknown,no +38,admin.,married,secondary,no,215,yes,yes,unknown,6,jun,173,2,-1,0,unknown,no +31,student,single,tertiary,no,307,no,no,cellular,20,nov,597,2,-1,0,unknown,no +30,entrepreneur,single,secondary,no,265,yes,yes,unknown,3,jun,67,10,-1,0,unknown,no +43,admin.,married,secondary,no,323,yes,yes,cellular,12,may,43,3,369,2,failure,no +26,management,single,tertiary,no,800,yes,no,cellular,30,jan,405,2,-1,0,unknown,no +32,technician,single,tertiary,no,392,yes,no,cellular,21,nov,148,2,-1,0,unknown,no +33,services,single,secondary,no,406,yes,no,cellular,5,feb,61,1,275,1,failure,no +40,blue-collar,married,primary,no,104,yes,no,unknown,26,may,470,2,-1,0,unknown,no +47,housemaid,divorced,secondary,no,1453,no,no,unknown,12,jun,303,1,-1,0,unknown,no +34,blue-collar,single,tertiary,no,1168,no,no,cellular,6,feb,163,2,-1,0,unknown,no +39,blue-collar,married,primary,no,766,yes,no,unknown,3,jun,350,3,-1,0,unknown,no +49,blue-collar,married,tertiary,no,1784,no,no,unknown,12,jun,753,1,-1,0,unknown,no +41,blue-collar,divorced,secondary,no,3,yes,no,cellular,31,jul,228,4,-1,0,unknown,no +45,technician,married,secondary,no,1412,yes,no,cellular,11,may,764,4,-1,0,unknown,no +45,technician,married,secondary,no,-312,yes,no,cellular,16,jul,268,1,-1,0,unknown,no +54,housemaid,married,primary,no,167,yes,no,cellular,22,jul,106,2,-1,0,unknown,no +34,services,single,secondary,no,1239,yes,no,unknown,23,may,164,1,-1,0,unknown,no +44,blue-collar,married,secondary,no,776,yes,no,unknown,29,may,306,1,-1,0,unknown,no +56,admin.,single,secondary,no,-13,no,no,unknown,16,jun,52,3,-1,0,unknown,no +60,admin.,divorced,secondary,no,4519,no,no,cellular,2,feb,152,1,-1,0,unknown,no +56,retired,married,tertiary,no,5769,no,no,unknown,20,jun,15,3,-1,0,unknown,no +60,retired,married,primary,no,414,no,no,unknown,8,may,395,1,-1,0,unknown,no +57,entrepreneur,married,tertiary,no,958,no,no,unknown,6,jun,250,2,-1,0,unknown,no +29,blue-collar,single,secondary,no,922,yes,no,cellular,18,may,72,1,-1,0,unknown,no +39,management,married,secondary,no,1585,yes,no,cellular,30,jan,82,2,-1,0,unknown,no +33,blue-collar,single,primary,no,910,yes,no,cellular,20,apr,42,1,-1,0,unknown,no +61,retired,married,primary,no,3738,no,no,telephone,6,feb,188,1,-1,0,unknown,no +58,management,single,tertiary,no,1387,yes,no,telephone,3,feb,140,6,6,6,other,no +27,blue-collar,single,secondary,yes,-3,yes,no,unknown,19,may,265,5,-1,0,unknown,no +37,services,married,secondary,no,144,yes,no,cellular,20,apr,724,2,-1,0,unknown,no +34,technician,single,secondary,yes,103,yes,yes,cellular,24,jul,147,1,-1,0,unknown,no +35,admin.,married,secondary,no,0,yes,no,cellular,20,apr,18,5,-1,0,unknown,no +35,management,married,tertiary,no,-547,yes,no,cellular,14,aug,101,2,-1,0,unknown,no +49,management,divorced,tertiary,no,9326,yes,no,unknown,3,jun,166,1,-1,0,unknown,no +34,services,divorced,secondary,no,1281,no,no,cellular,5,feb,237,1,-1,0,unknown,no +34,blue-collar,married,primary,no,267,yes,no,unknown,7,may,362,1,-1,0,unknown,no +48,management,married,tertiary,yes,0,no,yes,cellular,9,feb,18,8,-1,0,unknown,no +55,admin.,married,secondary,no,512,no,no,cellular,18,aug,115,4,-1,0,unknown,no +47,admin.,single,secondary,no,3531,yes,no,cellular,7,jul,49,6,-1,0,unknown,no +52,management,married,tertiary,no,4358,no,no,telephone,31,jul,30,7,-1,0,unknown,no +30,management,single,tertiary,no,222,yes,no,cellular,12,aug,112,4,-1,0,unknown,no +54,retired,divorced,primary,no,22,no,no,unknown,20,jun,23,4,-1,0,unknown,no +40,management,divorced,tertiary,no,37,yes,no,unknown,16,may,412,1,-1,0,unknown,no +43,technician,married,tertiary,no,591,yes,no,cellular,8,aug,889,2,-1,0,unknown,no +53,management,married,tertiary,no,12,no,no,cellular,27,aug,345,10,-1,0,unknown,no +25,admin.,single,secondary,no,131,yes,yes,unknown,9,may,237,1,-1,0,unknown,no +51,admin.,divorced,secondary,no,228,yes,no,unknown,6,may,136,1,-1,0,unknown,no +45,blue-collar,married,primary,no,1794,yes,no,unknown,14,may,174,2,-1,0,unknown,no +42,management,married,secondary,yes,-34,no,no,cellular,5,feb,176,1,-1,0,unknown,no +35,technician,married,tertiary,no,416,no,no,cellular,11,aug,591,4,-1,0,unknown,no +37,management,divorced,tertiary,no,1170,yes,yes,cellular,18,may,106,1,-1,0,unknown,no +43,blue-collar,married,primary,no,0,yes,no,unknown,12,may,3,1,-1,0,unknown,no +42,services,divorced,secondary,no,466,no,no,cellular,28,jan,48,1,-1,0,unknown,no +58,technician,married,secondary,no,1463,yes,no,cellular,12,aug,110,3,-1,0,unknown,no +43,technician,divorced,secondary,no,6835,no,no,cellular,19,nov,187,1,152,2,failure,no +29,technician,single,secondary,yes,-397,yes,no,unknown,28,may,114,1,-1,0,unknown,no +39,blue-collar,married,secondary,no,5222,yes,no,unknown,28,may,102,1,-1,0,unknown,no +59,retired,married,primary,no,0,yes,no,cellular,28,jul,20,4,-1,0,unknown,no +36,services,married,secondary,no,526,yes,no,cellular,17,apr,333,2,324,1,other,no +44,management,divorced,tertiary,no,2422,yes,no,cellular,16,apr,399,2,269,2,failure,no +34,admin.,married,secondary,no,430,yes,no,cellular,21,jul,82,4,-1,0,unknown,no +49,management,married,tertiary,no,20,yes,no,cellular,4,feb,117,1,-1,0,unknown,no +26,technician,single,secondary,no,-211,yes,no,unknown,23,may,164,3,-1,0,unknown,no +51,housemaid,married,primary,no,1337,no,no,telephone,30,jul,74,6,-1,0,unknown,no +37,entrepreneur,married,tertiary,no,4798,yes,no,unknown,20,may,156,2,-1,0,unknown,no +33,admin.,married,secondary,no,1077,yes,no,cellular,18,may,432,3,374,3,other,no +36,services,single,secondary,no,9713,yes,no,unknown,27,may,72,3,-1,0,unknown,no +34,technician,married,tertiary,no,5547,yes,no,cellular,19,aug,73,6,-1,0,unknown,no +45,blue-collar,married,primary,no,2433,no,no,cellular,6,aug,133,2,-1,0,unknown,no +38,services,married,secondary,no,105,no,no,cellular,30,jul,244,2,-1,0,unknown,no +40,technician,divorced,secondary,no,275,no,no,cellular,13,aug,409,4,-1,0,unknown,no +54,management,married,primary,no,366,yes,no,unknown,15,may,589,1,-1,0,unknown,no +34,services,married,secondary,no,-315,yes,no,unknown,8,may,56,2,-1,0,unknown,no +51,management,single,tertiary,yes,-55,yes,no,cellular,11,may,281,2,266,6,failure,no +46,technician,married,secondary,no,0,no,no,cellular,28,aug,63,2,-1,0,unknown,no +52,services,married,secondary,no,2993,no,no,cellular,11,mar,96,6,-1,0,unknown,no +38,services,single,primary,no,3715,yes,no,telephone,13,may,41,2,327,17,failure,no +26,management,single,tertiary,no,-8,no,no,cellular,13,aug,402,2,-1,0,unknown,no +39,admin.,married,secondary,no,1577,yes,no,unknown,4,jun,282,15,-1,0,unknown,no +54,management,married,tertiary,no,588,no,no,cellular,13,aug,327,1,-1,0,unknown,no +44,self-employed,married,primary,no,0,no,no,cellular,20,nov,843,3,-1,0,unknown,no +52,management,divorced,secondary,no,944,no,yes,unknown,9,jun,119,1,-1,0,unknown,no +43,unemployed,married,primary,no,9,yes,yes,cellular,6,may,472,1,-1,0,unknown,no +45,technician,married,secondary,no,144,yes,yes,cellular,14,jul,154,4,-1,0,unknown,no +38,services,single,tertiary,no,1222,yes,no,unknown,5,jun,237,2,-1,0,unknown,no +59,technician,married,secondary,no,0,no,no,cellular,29,aug,62,2,-1,0,unknown,no +40,blue-collar,married,secondary,no,668,yes,no,cellular,17,apr,156,2,318,1,other,no +34,blue-collar,married,unknown,no,568,yes,no,cellular,25,jul,256,1,-1,0,unknown,no +41,technician,married,secondary,no,0,no,no,cellular,29,aug,141,2,-1,0,unknown,no +36,management,married,tertiary,no,-861,yes,yes,cellular,28,jul,53,2,-1,0,unknown,no +40,admin.,single,secondary,no,877,yes,no,cellular,21,nov,12,3,177,6,failure,no +39,student,single,tertiary,no,1107,yes,no,telephone,20,apr,407,4,-1,0,unknown,no +34,management,single,tertiary,no,757,no,no,cellular,18,aug,37,4,-1,0,unknown,no +31,management,single,tertiary,no,30,no,no,cellular,8,aug,161,2,-1,0,unknown,no +32,technician,single,secondary,no,287,yes,no,unknown,21,may,59,8,-1,0,unknown,no +53,blue-collar,married,secondary,no,3079,no,no,cellular,5,apr,759,1,-1,0,unknown,no +28,management,single,tertiary,no,3238,yes,no,unknown,19,may,7,1,-1,0,unknown,no +38,blue-collar,single,secondary,no,1012,yes,yes,telephone,17,nov,69,1,-1,0,unknown,no +50,blue-collar,divorced,secondary,no,203,yes,no,telephone,19,nov,265,1,127,4,other,no +36,housemaid,married,secondary,no,2880,no,no,unknown,12,jun,283,1,-1,0,unknown,no +23,student,single,secondary,no,486,no,no,cellular,3,mar,87,1,-1,0,unknown,no +51,management,married,unknown,no,1708,no,no,telephone,29,jan,92,3,-1,0,unknown,no +51,management,married,tertiary,no,10635,yes,no,unknown,5,may,336,1,-1,0,unknown,no +35,services,married,secondary,no,1728,yes,no,cellular,17,apr,865,1,-1,0,unknown,no +32,self-employed,married,secondary,no,67,no,no,cellular,5,aug,153,1,-1,0,unknown,no +60,housemaid,divorced,secondary,no,387,yes,no,unknown,4,jun,235,1,-1,0,unknown,no +34,management,married,secondary,no,56,yes,no,cellular,20,nov,311,3,183,1,failure,no +58,unemployed,married,secondary,no,18,no,no,cellular,31,jul,70,1,-1,0,unknown,no +58,management,married,tertiary,no,0,no,no,unknown,20,jun,22,4,-1,0,unknown,no +34,technician,single,secondary,no,174,no,no,telephone,11,may,259,4,-1,0,unknown,no +38,management,divorced,tertiary,no,162,no,no,cellular,25,aug,323,4,-1,0,unknown,no +34,services,married,secondary,no,-16,yes,yes,unknown,5,may,78,1,-1,0,unknown,no +31,admin.,married,secondary,no,113,yes,no,cellular,18,nov,474,3,-1,0,unknown,no +46,unemployed,married,secondary,no,2940,yes,no,unknown,29,may,195,2,-1,0,unknown,no +36,admin.,married,secondary,no,1954,yes,yes,cellular,20,nov,158,2,174,3,failure,no +35,admin.,single,secondary,no,182,yes,no,unknown,3,jun,117,1,-1,0,unknown,no +42,services,single,secondary,no,247,yes,no,cellular,31,jul,114,2,-1,0,unknown,no +28,technician,married,primary,no,-58,yes,no,unknown,8,may,74,1,-1,0,unknown,no +39,technician,single,secondary,no,1685,yes,no,cellular,8,may,319,1,368,1,failure,no +39,services,single,tertiary,no,410,no,no,unknown,19,jun,266,4,-1,0,unknown,no +39,admin.,married,secondary,no,-367,yes,no,cellular,16,apr,667,2,-1,0,unknown,no +43,technician,divorced,secondary,no,6835,no,no,unknown,20,jun,262,2,-1,0,unknown,no +69,retired,married,primary,no,2398,no,no,cellular,12,apr,161,1,186,1,failure,no +43,blue-collar,married,secondary,no,-312,yes,no,unknown,20,jun,26,11,-1,0,unknown,no +36,blue-collar,married,primary,no,2079,yes,yes,unknown,19,may,403,2,-1,0,unknown,no +38,technician,married,unknown,no,573,yes,no,unknown,6,may,87,1,-1,0,unknown,no +38,management,single,secondary,no,399,yes,no,cellular,11,aug,367,4,-1,0,unknown,no +37,management,married,tertiary,no,57,no,no,cellular,30,apr,96,2,84,1,success,no +37,admin.,married,secondary,no,641,yes,no,unknown,5,jun,42,1,-1,0,unknown,no +31,management,married,tertiary,no,1575,no,no,cellular,12,aug,178,4,-1,0,unknown,no +31,services,single,secondary,no,-475,yes,no,telephone,12,may,232,3,-1,0,unknown,no +32,management,married,tertiary,no,128,yes,no,cellular,28,jul,320,3,-1,0,unknown,no +42,technician,divorced,secondary,no,305,yes,no,cellular,28,aug,82,4,-1,0,unknown,no +46,self-employed,married,tertiary,no,-80,yes,no,unknown,12,may,112,2,-1,0,unknown,no +35,technician,married,secondary,no,198,no,no,cellular,27,aug,282,13,-1,0,unknown,no +31,management,married,tertiary,no,1170,no,no,cellular,20,aug,200,4,-1,0,unknown,no +60,admin.,divorced,secondary,no,683,no,no,cellular,8,nov,507,1,-1,0,unknown,no +55,retired,married,secondary,no,2312,no,no,unknown,12,jun,60,1,-1,0,unknown,no +45,blue-collar,married,secondary,no,28,no,yes,cellular,4,feb,215,1,222,1,other,no +33,admin.,single,secondary,no,-15,no,no,telephone,12,may,326,3,350,2,failure,no +48,admin.,married,secondary,no,476,no,no,unknown,5,jun,489,3,-1,0,unknown,no +36,blue-collar,divorced,primary,no,0,no,no,cellular,14,may,543,2,-1,0,unknown,no +37,services,married,secondary,no,217,yes,no,cellular,11,may,152,1,-1,0,unknown,no +37,technician,married,secondary,no,157,yes,no,unknown,7,may,238,2,-1,0,unknown,no +54,technician,divorced,secondary,no,83,yes,no,unknown,6,may,190,3,-1,0,unknown,no +40,technician,divorced,tertiary,no,1871,yes,no,cellular,17,nov,64,1,-1,0,unknown,no +44,technician,married,secondary,no,11016,no,no,unknown,9,jun,252,3,-1,0,unknown,no +46,technician,married,secondary,no,4023,yes,no,cellular,7,aug,131,2,-1,0,unknown,no +37,management,married,tertiary,no,-57,yes,no,cellular,31,jul,37,20,-1,0,unknown,no +57,retired,married,secondary,no,91,no,yes,unknown,3,jul,256,3,-1,0,unknown,no +43,admin.,married,secondary,no,506,no,no,unknown,20,jun,398,1,-1,0,unknown,no +33,technician,single,secondary,no,161,no,no,cellular,25,aug,66,9,-1,0,unknown,no +38,management,single,tertiary,no,633,no,no,cellular,9,jul,171,3,-1,0,unknown,no +31,management,single,tertiary,no,41,yes,no,cellular,18,aug,392,2,-1,0,unknown,no +44,technician,married,unknown,yes,-375,yes,yes,telephone,6,may,149,4,-1,0,unknown,no +28,blue-collar,single,secondary,no,-284,yes,no,unknown,12,may,162,1,-1,0,unknown,no +31,management,single,tertiary,no,0,no,no,cellular,25,aug,11,16,-1,0,unknown,no +42,blue-collar,married,unknown,no,0,no,no,unknown,26,may,270,2,-1,0,unknown,no +41,blue-collar,married,secondary,no,2413,no,no,unknown,16,jun,64,3,-1,0,unknown,no +20,student,single,primary,no,134,no,no,cellular,12,jul,273,1,277,3,other,no +29,admin.,single,secondary,no,127,yes,yes,cellular,20,apr,314,1,-1,0,unknown,no +33,blue-collar,married,secondary,no,-253,yes,no,cellular,12,may,89,3,-1,0,unknown,no +36,management,married,tertiary,no,659,no,no,cellular,28,aug,90,13,-1,0,unknown,no +42,housemaid,divorced,secondary,no,314,no,no,unknown,9,jun,249,2,-1,0,unknown,no +57,technician,married,secondary,no,6362,yes,yes,cellular,18,nov,66,1,-1,0,unknown,no +35,technician,single,tertiary,no,33,no,no,cellular,29,aug,300,2,-1,0,unknown,no +33,services,divorced,unknown,no,392,yes,no,cellular,15,jul,753,4,-1,0,unknown,no +37,blue-collar,married,secondary,no,454,yes,no,unknown,12,may,115,1,-1,0,unknown,no +55,blue-collar,married,unknown,no,23,no,no,cellular,30,jan,143,1,2,3,other,no +28,technician,single,secondary,no,2034,yes,no,unknown,21,may,196,1,-1,0,unknown,no +38,technician,married,secondary,no,185,no,yes,cellular,29,aug,44,16,-1,0,unknown,no +38,management,married,tertiary,no,0,yes,no,unknown,20,jun,211,2,-1,0,unknown,no +60,admin.,married,unknown,no,738,no,no,unknown,19,may,529,3,-1,0,unknown,no +55,management,married,secondary,no,0,yes,no,unknown,13,may,309,2,-1,0,unknown,no +48,technician,married,secondary,no,862,no,no,cellular,30,jul,160,2,-1,0,unknown,no +30,services,married,secondary,no,1256,yes,no,cellular,18,may,123,3,-1,0,unknown,no +31,services,married,secondary,no,371,yes,yes,cellular,17,apr,654,1,-1,0,unknown,no +25,student,single,unknown,no,2503,no,no,cellular,26,feb,100,2,-1,0,unknown,no +37,management,married,tertiary,no,393,yes,no,cellular,12,aug,62,2,104,2,success,no +26,blue-collar,married,secondary,no,557,yes,yes,unknown,27,may,282,2,-1,0,unknown,no +45,blue-collar,married,secondary,no,61,yes,yes,unknown,23,may,208,1,-1,0,unknown,no +76,retired,married,tertiary,no,2991,no,no,cellular,25,jan,195,1,95,2,success,no +32,technician,married,secondary,no,557,yes,no,cellular,6,may,91,2,-1,0,unknown,no +52,management,married,secondary,no,173,no,no,unknown,23,may,48,5,-1,0,unknown,no +35,entrepreneur,divorced,secondary,no,80,no,no,cellular,20,aug,67,5,-1,0,unknown,no +54,unemployed,single,secondary,no,3611,yes,no,cellular,5,feb,81,1,-1,0,unknown,no +33,technician,married,tertiary,no,-482,yes,no,cellular,29,jul,90,3,-1,0,unknown,no +44,management,married,unknown,no,2982,no,no,unknown,16,jun,55,2,-1,0,unknown,no +34,admin.,single,tertiary,no,458,yes,no,unknown,20,may,211,1,-1,0,unknown,no +38,technician,single,tertiary,no,11,no,no,unknown,18,jun,78,3,-1,0,unknown,no +33,admin.,married,secondary,no,0,yes,no,cellular,17,nov,78,1,-1,0,unknown,no +32,blue-collar,married,secondary,no,328,yes,no,unknown,20,may,132,1,-1,0,unknown,no +36,blue-collar,single,secondary,no,111,yes,no,cellular,6,may,174,3,-1,0,unknown,no +77,retired,married,primary,no,2223,no,no,telephone,10,aug,365,2,187,1,success,no +26,services,single,secondary,no,37,no,yes,cellular,2,feb,219,5,-1,0,unknown,no +33,blue-collar,single,primary,yes,-15,no,yes,cellular,7,jul,326,2,-1,0,unknown,no +45,management,married,unknown,no,9051,yes,no,unknown,19,may,124,63,-1,0,unknown,no +55,technician,divorced,secondary,yes,284,yes,no,cellular,7,aug,78,2,-1,0,unknown,no +55,admin.,married,secondary,no,183,yes,no,unknown,6,may,150,1,-1,0,unknown,no +35,management,married,tertiary,no,109,no,yes,cellular,21,aug,257,2,-1,0,unknown,no +28,admin.,married,secondary,no,934,yes,no,unknown,4,jul,53,2,-1,0,unknown,no +55,blue-collar,married,secondary,no,93,no,yes,cellular,28,jan,111,1,-1,0,unknown,no +37,blue-collar,divorced,secondary,no,811,yes,yes,cellular,6,apr,185,3,-1,0,unknown,no +35,management,married,tertiary,no,753,no,no,cellular,27,aug,111,9,-1,0,unknown,no +33,technician,single,tertiary,no,538,yes,no,unknown,29,may,359,2,-1,0,unknown,no +35,blue-collar,married,secondary,no,1098,yes,no,unknown,26,may,19,17,-1,0,unknown,no +30,technician,single,tertiary,no,3086,yes,no,cellular,7,may,84,3,168,1,failure,no +35,blue-collar,married,secondary,no,2054,yes,no,unknown,20,may,447,1,-1,0,unknown,no +49,admin.,married,secondary,no,2501,yes,no,unknown,30,may,50,2,-1,0,unknown,no +26,services,single,secondary,no,209,yes,no,cellular,22,jul,319,2,-1,0,unknown,no +26,blue-collar,single,secondary,no,972,yes,no,unknown,20,may,177,10,-1,0,unknown,no +31,unknown,married,secondary,no,3,no,no,cellular,20,jul,91,2,-1,0,unknown,no +38,admin.,married,secondary,no,326,yes,no,cellular,17,apr,69,2,-1,0,unknown,no +54,technician,married,secondary,no,3323,yes,yes,cellular,8,apr,59,3,-1,0,unknown,no +50,blue-collar,married,primary,no,4121,yes,yes,cellular,20,nov,177,1,-1,0,unknown,no +37,blue-collar,married,secondary,no,13849,yes,no,unknown,23,may,252,5,-1,0,unknown,no +29,blue-collar,married,primary,no,630,yes,no,cellular,30,jul,219,5,-1,0,unknown,no +35,blue-collar,married,primary,no,624,yes,no,unknown,7,may,163,1,-1,0,unknown,no +36,technician,single,secondary,no,7503,yes,no,telephone,5,may,193,1,335,1,failure,no +57,blue-collar,married,primary,no,0,no,no,unknown,9,jun,73,2,-1,0,unknown,no +72,retired,married,secondary,no,2850,no,no,cellular,16,oct,131,2,241,1,success,no +27,student,single,secondary,no,672,no,no,cellular,18,mar,236,2,-1,0,unknown,no +48,blue-collar,married,primary,no,492,no,yes,cellular,21,aug,139,2,-1,0,unknown,no +30,technician,single,secondary,no,778,yes,no,cellular,18,may,22,2,346,2,failure,no +27,blue-collar,married,primary,no,106,yes,no,unknown,30,may,150,5,-1,0,unknown,no +57,management,married,tertiary,no,4929,yes,no,telephone,31,jul,91,4,-1,0,unknown,no +38,management,married,tertiary,no,0,no,no,cellular,24,sep,246,12,197,6,failure,no +47,technician,married,tertiary,no,545,yes,no,cellular,12,aug,588,3,-1,0,unknown,no +57,services,married,primary,no,1728,yes,no,telephone,16,jul,164,1,-1,0,unknown,no +43,blue-collar,married,primary,no,1401,yes,no,unknown,12,may,195,2,-1,0,unknown,no +43,unemployed,married,secondary,no,1943,yes,no,cellular,18,nov,202,2,-1,0,unknown,no +32,management,single,tertiary,no,11,yes,yes,cellular,5,may,399,1,-1,0,unknown,no +37,entrepreneur,married,secondary,no,-170,yes,no,unknown,28,may,39,1,-1,0,unknown,no +49,blue-collar,married,primary,no,239,no,no,cellular,22,aug,90,3,-1,0,unknown,no +32,admin.,single,tertiary,no,272,yes,no,cellular,7,oct,73,2,-1,0,unknown,no +40,services,married,secondary,no,113,yes,no,unknown,4,jun,126,1,-1,0,unknown,no +43,blue-collar,married,primary,no,-120,yes,no,unknown,3,jun,46,1,-1,0,unknown,no +46,blue-collar,married,primary,no,-388,yes,yes,cellular,10,jul,207,1,-1,0,unknown,no +49,blue-collar,married,unknown,no,51,yes,no,unknown,7,may,984,1,-1,0,unknown,no +37,management,married,tertiary,no,1689,yes,no,unknown,29,may,645,2,-1,0,unknown,no +40,housemaid,divorced,secondary,no,108,no,no,unknown,9,may,93,1,-1,0,unknown,no +56,management,married,tertiary,no,25290,no,no,cellular,31,jul,81,12,-1,0,unknown,no +30,blue-collar,divorced,primary,no,1,yes,no,unknown,6,jun,63,9,-1,0,unknown,no +40,blue-collar,married,primary,no,-22,yes,no,unknown,19,may,84,3,-1,0,unknown,no +29,admin.,married,tertiary,no,167,yes,yes,cellular,13,oct,357,2,237,2,failure,no +37,blue-collar,married,primary,no,1796,yes,yes,cellular,17,apr,232,2,-1,0,unknown,no +38,self-employed,single,secondary,no,677,yes,no,cellular,14,may,114,2,-1,0,unknown,no +28,technician,single,secondary,no,593,yes,no,unknown,19,jun,202,1,-1,0,unknown,no +40,services,single,secondary,no,316,no,no,unknown,11,jun,122,5,-1,0,unknown,no +58,admin.,married,secondary,no,855,no,no,cellular,14,aug,81,2,-1,0,unknown,no +41,management,married,secondary,no,3096,yes,no,cellular,24,jul,273,6,-1,0,unknown,no +55,blue-collar,single,tertiary,no,325,yes,no,unknown,8,may,693,1,-1,0,unknown,no +40,blue-collar,married,secondary,no,1023,yes,no,cellular,13,may,64,5,336,11,other,no +40,unemployed,divorced,secondary,no,991,yes,no,unknown,12,jun,316,2,-1,0,unknown,no +27,technician,married,secondary,no,876,yes,no,cellular,18,may,268,1,355,1,failure,no +52,blue-collar,married,primary,no,1271,no,no,cellular,18,aug,131,3,-1,0,unknown,no +31,technician,married,tertiary,no,165,no,no,cellular,15,may,218,4,-1,0,unknown,no +30,self-employed,single,tertiary,no,578,yes,no,unknown,2,jun,142,4,-1,0,unknown,no +59,technician,divorced,secondary,no,2595,yes,no,cellular,29,aug,398,2,-1,0,unknown,no +47,management,divorced,tertiary,no,8226,yes,no,cellular,30,jul,137,2,-1,0,unknown,no +57,management,married,secondary,no,657,yes,no,telephone,11,may,20,5,-1,0,unknown,no +43,management,married,tertiary,no,0,yes,no,cellular,21,jul,474,1,-1,0,unknown,no +38,management,married,tertiary,no,1875,no,no,cellular,17,nov,286,1,-1,0,unknown,no +27,self-employed,married,secondary,yes,254,yes,yes,cellular,29,jan,194,1,188,1,failure,no +46,admin.,married,secondary,no,1252,yes,yes,cellular,17,nov,59,1,-1,0,unknown,no +42,blue-collar,married,secondary,no,790,yes,no,unknown,29,may,356,2,-1,0,unknown,no +51,management,married,tertiary,no,656,yes,no,cellular,25,jul,268,2,-1,0,unknown,no +42,admin.,married,secondary,no,329,no,no,cellular,19,aug,347,3,-1,0,unknown,no +42,services,divorced,secondary,no,83,no,no,cellular,13,may,300,5,358,6,failure,no +38,self-employed,married,secondary,no,138,no,no,unknown,9,may,182,3,-1,0,unknown,no +43,blue-collar,married,primary,no,0,yes,no,unknown,20,may,592,1,-1,0,unknown,no +34,blue-collar,single,secondary,no,39,no,no,cellular,18,jul,138,3,-1,0,unknown,no +28,blue-collar,single,primary,no,426,yes,no,cellular,18,may,953,3,-1,0,unknown,no +43,management,divorced,secondary,no,693,yes,no,unknown,5,may,124,3,-1,0,unknown,no +55,blue-collar,married,secondary,no,2854,yes,no,cellular,7,may,312,1,-1,0,unknown,no +32,management,divorced,tertiary,no,787,yes,no,cellular,11,aug,72,2,-1,0,unknown,no +49,blue-collar,married,secondary,no,102,no,no,cellular,29,aug,210,2,-1,0,unknown,no +48,unemployed,married,secondary,no,855,yes,no,unknown,9,may,241,2,-1,0,unknown,no +30,management,single,tertiary,no,1675,no,no,cellular,4,sep,181,1,-1,0,unknown,no +43,admin.,married,secondary,no,1996,no,yes,cellular,31,jul,34,3,-1,0,unknown,no +42,technician,married,secondary,no,473,yes,no,cellular,7,jul,216,5,-1,0,unknown,no +30,technician,single,tertiary,no,1,no,no,cellular,20,aug,88,2,-1,0,unknown,no +31,management,married,secondary,no,1064,no,no,telephone,20,nov,60,1,-1,0,unknown,no +33,self-employed,married,secondary,no,215,yes,no,cellular,29,jul,543,12,-1,0,unknown,no +46,blue-collar,divorced,secondary,no,138,no,no,cellular,19,nov,277,1,-1,0,unknown,no +38,technician,single,tertiary,no,221,no,no,cellular,20,aug,79,3,-1,0,unknown,no +53,management,single,tertiary,no,720,yes,no,unknown,17,nov,99,1,-1,0,unknown,no +45,management,divorced,secondary,no,51,yes,no,cellular,31,jul,67,8,-1,0,unknown,no +56,blue-collar,married,primary,no,0,no,no,cellular,7,aug,152,6,-1,0,unknown,no +33,entrepreneur,married,tertiary,no,606,yes,no,cellular,2,feb,194,1,-1,0,unknown,no +28,technician,single,secondary,no,6551,no,no,cellular,26,may,362,1,77,1,failure,no +39,blue-collar,divorced,primary,yes,-294,yes,no,unknown,5,jun,181,2,-1,0,unknown,no +38,student,single,unknown,no,64,no,no,cellular,6,aug,789,1,-1,0,unknown,no +32,management,married,tertiary,no,169,no,yes,cellular,20,aug,119,2,-1,0,unknown,no +52,blue-collar,married,primary,no,230,yes,no,cellular,6,may,198,2,170,2,failure,no +29,technician,single,tertiary,no,2485,no,no,telephone,24,jul,48,6,-1,0,unknown,no +29,admin.,single,secondary,no,209,no,no,cellular,5,feb,605,2,-1,0,unknown,no +33,management,married,tertiary,no,71,no,no,cellular,16,nov,136,1,287,1,failure,no +46,self-employed,married,tertiary,no,137,yes,yes,unknown,5,may,246,1,-1,0,unknown,no +36,management,married,tertiary,no,2547,no,no,cellular,31,jul,292,1,-1,0,unknown,no +35,entrepreneur,single,tertiary,no,1800,yes,no,unknown,5,jun,53,1,-1,0,unknown,no +39,admin.,single,secondary,no,6512,no,no,unknown,20,jun,16,6,-1,0,unknown,no +56,technician,married,tertiary,no,1476,no,no,telephone,31,jul,40,3,-1,0,unknown,no +42,technician,married,secondary,no,534,no,no,cellular,5,aug,314,1,-1,0,unknown,no +44,admin.,married,secondary,no,1696,no,no,unknown,16,jun,139,3,-1,0,unknown,no +50,admin.,married,secondary,no,219,yes,no,cellular,15,jul,419,7,-1,0,unknown,no +46,blue-collar,married,primary,no,557,no,no,unknown,18,jun,89,1,-1,0,unknown,no +50,management,single,unknown,no,1277,no,no,cellular,4,may,63,1,-1,0,unknown,no +48,admin.,married,secondary,no,-30,yes,no,cellular,7,may,133,1,-1,0,unknown,no +39,technician,single,secondary,no,175,no,yes,unknown,16,jun,757,2,-1,0,unknown,no +26,admin.,married,secondary,no,1595,no,no,cellular,2,mar,54,1,-1,0,unknown,no +32,technician,single,tertiary,no,723,no,no,cellular,28,aug,68,27,-1,0,unknown,no +36,services,married,secondary,no,297,yes,yes,cellular,15,jul,157,5,-1,0,unknown,no +56,management,divorced,tertiary,no,310,no,no,unknown,20,jun,75,4,-1,0,unknown,no +30,blue-collar,single,secondary,no,1012,yes,no,cellular,17,apr,22,3,329,1,failure,no +39,self-employed,divorced,secondary,yes,-103,no,yes,unknown,5,jun,210,3,-1,0,unknown,no +33,management,married,tertiary,no,621,no,no,cellular,12,aug,913,5,-1,0,unknown,no +43,blue-collar,single,primary,no,548,yes,no,unknown,7,may,98,1,-1,0,unknown,no +32,services,single,secondary,no,182,yes,no,cellular,6,may,145,1,-1,0,unknown,no +27,blue-collar,single,secondary,no,484,yes,no,cellular,15,apr,309,2,-1,0,unknown,no +46,admin.,divorced,secondary,no,1342,yes,no,cellular,4,feb,135,1,-1,0,unknown,no +42,technician,single,secondary,no,0,yes,no,unknown,6,may,293,1,-1,0,unknown,no +43,self-employed,married,primary,no,66,yes,no,unknown,7,may,175,5,-1,0,unknown,no +59,retired,divorced,secondary,no,21,yes,no,telephone,19,nov,121,2,-1,0,unknown,no +44,services,divorced,secondary,no,608,yes,yes,unknown,18,jun,19,30,-1,0,unknown,no +31,blue-collar,married,secondary,no,5345,yes,no,cellular,18,nov,260,1,-1,0,unknown,no +26,unemployed,single,secondary,no,461,no,no,cellular,28,jan,214,1,-1,0,unknown,no +51,services,married,unknown,no,5801,yes,no,unknown,29,may,147,2,-1,0,unknown,no +24,admin.,married,secondary,no,0,yes,no,cellular,16,apr,284,1,-1,0,unknown,no +26,blue-collar,single,secondary,no,78,no,no,telephone,28,jan,43,1,-1,0,unknown,no +54,management,married,tertiary,no,-1415,yes,yes,cellular,17,nov,135,1,-1,0,unknown,no +31,blue-collar,married,secondary,no,30,yes,no,unknown,11,jun,172,14,-1,0,unknown,no +33,services,single,secondary,no,100,yes,no,cellular,14,may,11,8,297,7,other,no +42,housemaid,married,primary,no,1371,no,no,unknown,18,jun,125,8,-1,0,unknown,no +33,management,married,tertiary,no,62,yes,no,cellular,2,feb,102,1,264,1,failure,no +40,admin.,single,tertiary,no,1005,yes,no,cellular,21,jul,449,1,-1,0,unknown,no +46,admin.,married,secondary,no,517,yes,no,cellular,5,may,29,3,-1,0,unknown,no +33,management,married,tertiary,no,0,no,no,cellular,29,aug,60,2,-1,0,unknown,no +56,management,divorced,tertiary,no,382,no,no,cellular,19,nov,117,2,-1,0,unknown,no +38,blue-collar,married,secondary,no,468,yes,no,unknown,8,may,101,2,-1,0,unknown,no +35,management,married,tertiary,no,178,no,no,cellular,14,aug,76,2,-1,0,unknown,no +32,technician,divorced,secondary,no,211,yes,yes,unknown,29,may,230,4,-1,0,unknown,no +51,management,married,primary,yes,57,yes,yes,unknown,8,may,61,1,-1,0,unknown,no +33,entrepreneur,married,tertiary,no,114,no,yes,cellular,28,jul,57,3,-1,0,unknown,no +31,technician,single,secondary,no,1222,yes,no,cellular,20,apr,186,3,-1,0,unknown,no +31,blue-collar,married,secondary,no,1660,yes,no,cellular,20,apr,342,1,-1,0,unknown,no +49,blue-collar,divorced,primary,no,-9,yes,yes,unknown,5,may,389,1,-1,0,unknown,no +43,technician,divorced,secondary,no,0,yes,no,cellular,5,may,150,2,342,2,failure,no +40,management,married,tertiary,no,30,yes,no,cellular,28,jul,609,6,-1,0,unknown,no +27,blue-collar,married,secondary,no,0,yes,no,cellular,17,jul,444,6,-1,0,unknown,no +33,management,single,tertiary,no,369,no,no,cellular,25,aug,143,10,-1,0,unknown,no +47,technician,married,secondary,no,1571,yes,no,cellular,11,may,261,1,369,2,failure,no +59,housemaid,married,primary,no,-187,yes,no,telephone,21,jul,118,7,-1,0,unknown,no +52,technician,married,secondary,no,0,yes,no,cellular,1,jun,144,1,83,1,failure,no +35,admin.,married,secondary,no,-257,no,no,cellular,28,jan,117,3,-1,0,unknown,no +32,services,single,secondary,no,2459,yes,yes,unknown,23,may,162,1,-1,0,unknown,no +49,blue-collar,married,secondary,no,1219,yes,no,cellular,26,aug,168,5,-1,0,unknown,no +54,entrepreneur,divorced,tertiary,no,5784,no,no,cellular,21,nov,75,5,-1,0,unknown,no +30,management,single,tertiary,no,162,yes,no,unknown,20,may,186,4,-1,0,unknown,no +33,management,single,tertiary,no,1909,no,no,cellular,8,aug,191,2,-1,0,unknown,no +50,admin.,married,secondary,no,-195,no,no,cellular,22,aug,119,4,-1,0,unknown,no +40,services,divorced,primary,no,4,yes,no,cellular,7,may,171,2,-1,0,unknown,no +38,entrepreneur,married,primary,no,350,yes,no,cellular,8,may,75,1,-1,0,unknown,no +34,housemaid,married,primary,no,87,yes,no,unknown,15,may,139,2,-1,0,unknown,no +33,blue-collar,single,primary,no,777,no,no,cellular,7,jul,263,1,-1,0,unknown,no +41,blue-collar,married,primary,no,3140,yes,no,unknown,13,may,87,9,-1,0,unknown,no +30,services,single,secondary,no,1510,yes,no,cellular,18,nov,191,1,-1,0,unknown,no +45,blue-collar,divorced,secondary,no,756,yes,no,unknown,6,may,179,2,-1,0,unknown,no +28,management,single,tertiary,no,1086,yes,no,unknown,29,may,128,2,-1,0,unknown,no +35,management,married,secondary,no,339,yes,no,unknown,23,may,317,1,-1,0,unknown,no +31,services,single,secondary,no,205,yes,no,cellular,15,apr,465,1,-1,0,unknown,no +41,blue-collar,married,secondary,no,2717,yes,yes,cellular,24,jul,559,2,-1,0,unknown,no +32,blue-collar,single,secondary,no,138,yes,no,cellular,15,may,215,2,-1,0,unknown,no +34,self-employed,single,tertiary,no,1943,yes,no,cellular,16,apr,478,2,-1,0,unknown,no +26,technician,married,secondary,no,744,no,no,cellular,15,apr,609,1,-1,0,unknown,no +29,blue-collar,married,primary,no,79,yes,no,unknown,27,may,22,2,-1,0,unknown,no +49,technician,married,secondary,no,2400,no,no,cellular,21,oct,262,3,-1,0,unknown,no +30,admin.,divorced,secondary,no,419,no,no,cellular,3,sep,72,2,-1,0,unknown,no +44,self-employed,married,primary,no,414,yes,no,cellular,4,feb,138,1,272,2,other,no +42,technician,married,secondary,no,27,no,no,cellular,14,aug,259,4,-1,0,unknown,no +35,technician,divorced,secondary,no,2823,yes,no,cellular,2,feb,229,1,-1,0,unknown,no +39,management,divorced,tertiary,no,4692,yes,no,telephone,19,nov,214,2,174,2,success,no +34,self-employed,single,secondary,no,1261,yes,no,cellular,9,apr,169,2,-1,0,unknown,no +58,technician,married,secondary,no,0,yes,no,cellular,15,jul,53,1,-1,0,unknown,no +35,admin.,divorced,secondary,no,0,no,no,cellular,30,jul,186,6,-1,0,unknown,no +32,technician,single,secondary,no,483,yes,yes,cellular,18,may,35,6,-1,0,unknown,no +31,technician,married,secondary,no,7369,no,no,cellular,19,aug,204,4,-1,0,unknown,no +41,services,married,secondary,no,804,yes,no,unknown,20,may,127,8,-1,0,unknown,no +39,management,single,secondary,no,2644,no,no,cellular,19,aug,192,7,-1,0,unknown,no +39,blue-collar,single,secondary,no,175,no,no,cellular,12,may,17,1,365,2,other,no +38,blue-collar,married,secondary,no,0,no,no,unknown,20,jun,152,5,-1,0,unknown,no +46,admin.,single,secondary,no,272,no,no,cellular,31,jul,149,4,-1,0,unknown,no +54,unemployed,single,tertiary,no,252,yes,no,cellular,21,jul,101,1,-1,0,unknown,no +34,technician,married,unknown,no,4053,yes,no,unknown,23,may,123,2,-1,0,unknown,no +40,blue-collar,married,secondary,no,2158,no,no,cellular,10,jul,277,1,-1,0,unknown,no +40,blue-collar,married,secondary,no,299,yes,no,cellular,15,jul,180,4,-1,0,unknown,no +30,technician,single,primary,no,2731,yes,no,cellular,14,apr,314,1,-1,0,unknown,no +37,services,single,secondary,no,50,no,no,cellular,19,nov,244,1,154,8,other,no +34,admin.,married,secondary,no,36,no,no,cellular,22,aug,192,6,-1,0,unknown,no +66,admin.,divorced,secondary,no,220,no,no,cellular,28,aug,283,1,-1,0,unknown,no +30,services,single,primary,no,5746,yes,no,telephone,20,nov,125,2,-1,0,unknown,no +59,housemaid,divorced,tertiary,no,0,no,no,cellular,20,apr,379,1,332,2,other,no +56,management,married,secondary,no,238,yes,no,cellular,19,nov,808,1,-1,0,unknown,no +25,blue-collar,single,secondary,no,76,no,yes,cellular,28,jul,50,4,-1,0,unknown,no +36,blue-collar,married,primary,no,679,yes,yes,cellular,13,may,115,1,-1,0,unknown,no +33,blue-collar,single,primary,no,1390,yes,no,unknown,21,may,192,1,-1,0,unknown,no +30,technician,married,secondary,no,418,yes,no,unknown,3,jun,112,1,-1,0,unknown,no +29,blue-collar,single,secondary,no,2891,yes,no,cellular,7,may,293,1,-1,0,unknown,no +52,services,married,secondary,no,497,yes,no,telephone,15,jul,265,5,-1,0,unknown,no +54,blue-collar,married,primary,no,2933,yes,no,unknown,15,may,144,2,-1,0,unknown,no +28,blue-collar,married,secondary,no,948,yes,no,unknown,9,may,455,1,-1,0,unknown,no +58,self-employed,married,secondary,no,0,yes,no,unknown,15,may,272,9,-1,0,unknown,no +23,blue-collar,single,secondary,no,0,yes,no,cellular,8,may,6,5,350,2,failure,no +49,entrepreneur,married,secondary,no,687,no,no,cellular,18,aug,65,6,-1,0,unknown,no +47,management,single,tertiary,no,-230,no,no,cellular,4,feb,293,1,-1,0,unknown,no +73,retired,married,tertiary,no,2575,no,no,cellular,17,aug,152,1,-1,0,unknown,no +44,technician,married,secondary,no,7649,no,no,cellular,20,aug,188,6,-1,0,unknown,no +29,blue-collar,married,primary,no,59,yes,yes,cellular,29,jul,665,4,-1,0,unknown,no +48,technician,married,secondary,no,23495,no,no,cellular,22,aug,63,8,-1,0,unknown,no +35,technician,single,secondary,no,365,yes,no,unknown,8,may,256,2,-1,0,unknown,no +41,blue-collar,married,secondary,no,97,no,yes,cellular,8,jul,212,2,-1,0,unknown,no +40,entrepreneur,single,secondary,no,5,no,yes,cellular,15,jul,117,3,-1,0,unknown,no +57,blue-collar,single,primary,no,739,yes,no,cellular,14,may,172,2,364,1,failure,no +43,housemaid,married,secondary,no,-177,yes,no,unknown,21,may,172,2,-1,0,unknown,no +31,blue-collar,married,primary,no,-454,yes,yes,unknown,28,may,861,2,-1,0,unknown,no +51,management,divorced,tertiary,no,1267,yes,no,unknown,30,may,254,2,-1,0,unknown,no +52,unemployed,married,secondary,no,1639,no,no,cellular,8,aug,93,1,-1,0,unknown,no +31,services,single,secondary,no,900,yes,no,cellular,9,apr,221,2,140,6,failure,no +26,services,single,secondary,no,-481,yes,yes,cellular,6,may,595,5,-1,0,unknown,no +36,services,single,secondary,no,528,no,no,cellular,3,feb,225,2,-1,0,unknown,no +43,technician,single,secondary,no,34,no,no,telephone,30,jul,29,1,-1,0,unknown,no +32,admin.,single,secondary,no,223,yes,yes,unknown,27,may,236,4,-1,0,unknown,no +26,technician,single,secondary,no,218,yes,no,unknown,27,may,436,1,-1,0,unknown,no +25,services,single,tertiary,no,130,yes,no,cellular,16,jul,49,1,-1,0,unknown,no +34,blue-collar,single,secondary,no,1156,yes,no,unknown,23,may,234,2,-1,0,unknown,no +30,management,married,tertiary,no,314,no,no,cellular,19,nov,364,2,175,2,success,no +35,admin.,single,tertiary,no,1374,yes,no,cellular,15,may,319,1,-1,0,unknown,no +42,admin.,single,unknown,no,22,no,no,unknown,19,jun,246,3,-1,0,unknown,no +53,entrepreneur,married,tertiary,no,1129,no,yes,cellular,28,jul,241,8,-1,0,unknown,no +52,services,divorced,primary,no,130,yes,no,unknown,29,may,103,2,-1,0,unknown,no +35,management,single,secondary,yes,-202,yes,no,unknown,20,may,268,3,-1,0,unknown,no +29,management,single,secondary,no,293,yes,no,unknown,28,may,188,2,-1,0,unknown,no +43,management,married,unknown,no,275,no,no,cellular,9,apr,109,2,339,2,failure,no +81,retired,divorced,unknown,no,9224,no,no,telephone,9,nov,235,2,-1,0,unknown,no +35,technician,divorced,secondary,no,515,yes,yes,cellular,29,aug,114,3,-1,0,unknown,no +36,services,single,secondary,no,760,no,no,unknown,20,jun,9,13,-1,0,unknown,no +76,retired,married,secondary,no,2302,no,no,telephone,5,feb,110,1,87,2,failure,no +44,services,divorced,secondary,no,-389,yes,yes,unknown,5,jun,52,1,-1,0,unknown,no +38,services,married,secondary,no,133,yes,no,unknown,27,may,267,1,-1,0,unknown,no +37,technician,married,secondary,no,1580,no,no,cellular,22,aug,92,12,-1,0,unknown,no +41,blue-collar,married,secondary,no,1020,yes,no,unknown,29,may,276,1,-1,0,unknown,no +49,blue-collar,married,secondary,no,298,yes,no,cellular,3,feb,392,3,-1,0,unknown,no +53,management,married,primary,no,13901,yes,no,cellular,21,nov,59,1,-1,0,unknown,no +34,technician,married,secondary,no,563,yes,yes,cellular,29,aug,32,15,-1,0,unknown,no +30,management,married,tertiary,no,-27,yes,no,unknown,27,may,29,2,-1,0,unknown,no +43,unknown,married,primary,no,2113,no,no,cellular,29,jul,33,2,-1,0,unknown,no +36,admin.,single,tertiary,no,980,no,no,cellular,30,jul,156,3,179,4,failure,no +60,housemaid,married,primary,no,352,no,yes,unknown,17,jun,81,2,-1,0,unknown,no +45,management,married,tertiary,no,96,yes,no,cellular,16,jul,202,1,-1,0,unknown,no +49,management,married,tertiary,no,3842,no,no,cellular,5,apr,163,1,186,3,failure,no +39,services,married,secondary,no,3870,yes,no,cellular,20,apr,72,1,-1,0,unknown,no +57,technician,married,secondary,no,589,yes,no,cellular,28,jan,198,1,244,1,other,no +49,admin.,single,secondary,no,7426,no,no,telephone,20,nov,65,2,-1,0,unknown,no +39,admin.,divorced,secondary,no,1,no,yes,cellular,7,jul,281,1,-1,0,unknown,no +37,technician,single,tertiary,no,6101,no,no,cellular,4,may,60,5,87,1,success,no +45,admin.,married,secondary,no,231,yes,no,unknown,18,jun,151,3,-1,0,unknown,no +36,management,single,tertiary,no,876,yes,no,unknown,23,may,241,2,-1,0,unknown,no +58,technician,married,secondary,no,86,no,no,cellular,30,jul,95,3,-1,0,unknown,no +48,blue-collar,married,primary,no,363,yes,no,unknown,18,jun,257,6,-1,0,unknown,no +52,entrepreneur,married,primary,no,8298,yes,yes,unknown,28,may,123,18,-1,0,unknown,no +32,services,single,secondary,no,0,no,yes,cellular,11,jul,333,2,-1,0,unknown,no +51,management,divorced,tertiary,no,93,yes,yes,cellular,6,may,221,1,-1,0,unknown,no +31,management,married,tertiary,no,596,no,no,cellular,12,aug,192,4,-1,0,unknown,no +30,management,single,tertiary,no,168,no,no,cellular,27,aug,35,13,-1,0,unknown,no +34,management,single,tertiary,no,29,yes,no,cellular,13,may,248,2,-1,0,unknown,no +53,self-employed,married,primary,no,6,yes,no,unknown,27,may,233,2,-1,0,unknown,no +32,entrepreneur,divorced,secondary,no,-934,yes,no,cellular,18,nov,50,1,-1,0,unknown,no +52,blue-collar,married,tertiary,no,297,yes,no,unknown,7,may,55,1,-1,0,unknown,no +50,blue-collar,married,primary,no,533,no,no,cellular,21,aug,212,4,-1,0,unknown,no +30,technician,single,secondary,no,175,no,no,cellular,25,aug,167,4,-1,0,unknown,no +34,management,single,tertiary,no,-292,yes,no,cellular,19,aug,181,6,-1,0,unknown,no +51,technician,married,secondary,no,2,yes,yes,cellular,4,feb,71,1,205,3,failure,no +34,management,married,tertiary,no,39,no,no,cellular,13,aug,160,1,-1,0,unknown,no +26,blue-collar,single,secondary,no,396,yes,no,unknown,28,may,302,1,-1,0,unknown,no +51,admin.,divorced,secondary,no,-338,yes,no,cellular,29,jul,97,2,-1,0,unknown,no +31,services,married,secondary,no,2050,yes,no,cellular,18,nov,271,5,-1,0,unknown,no +29,technician,single,secondary,no,510,yes,no,unknown,16,jun,179,15,-1,0,unknown,no +29,technician,divorced,secondary,no,477,yes,yes,cellular,11,may,58,1,305,1,failure,no +46,technician,married,tertiary,no,4176,yes,no,unknown,12,jun,153,6,-1,0,unknown,no +35,blue-collar,married,primary,no,0,no,no,cellular,31,jul,57,4,-1,0,unknown,no +44,management,married,tertiary,no,0,yes,no,cellular,31,jul,49,5,-1,0,unknown,no +34,management,married,tertiary,no,297,yes,no,cellular,26,aug,63,4,-1,0,unknown,no +27,services,single,secondary,no,167,no,yes,cellular,8,jul,606,2,-1,0,unknown,no +28,unemployed,single,secondary,yes,-353,yes,no,unknown,12,may,89,3,-1,0,unknown,no +59,admin.,divorced,secondary,no,1525,no,no,telephone,29,jul,90,2,-1,0,unknown,no +38,technician,single,secondary,no,211,yes,no,cellular,29,jan,236,2,-1,0,unknown,no +34,management,single,tertiary,no,416,no,no,cellular,14,aug,1217,4,-1,0,unknown,no +44,services,married,secondary,no,0,yes,yes,cellular,11,may,161,1,-1,0,unknown,no +35,technician,single,secondary,no,1001,no,yes,cellular,24,jul,178,2,-1,0,unknown,no +45,self-employed,divorced,tertiary,yes,75,yes,yes,cellular,4,feb,236,1,-1,0,unknown,no +34,self-employed,married,tertiary,no,7602,no,no,cellular,20,nov,222,1,-1,0,unknown,no +57,retired,married,secondary,no,0,yes,no,cellular,5,may,127,1,363,4,failure,no +76,retired,married,primary,no,163,no,no,telephone,13,oct,120,1,-1,0,unknown,no +30,blue-collar,married,secondary,no,673,yes,no,unknown,20,may,610,2,-1,0,unknown,no +48,technician,divorced,secondary,no,-154,no,no,unknown,3,jun,342,3,-1,0,unknown,no +43,technician,married,secondary,no,3723,yes,no,cellular,11,aug,134,4,-1,0,unknown,no +34,technician,single,secondary,no,559,no,no,cellular,22,aug,259,2,-1,0,unknown,no +30,management,single,tertiary,no,13774,no,no,cellular,14,sep,380,1,-1,0,unknown,no +33,management,married,tertiary,no,403,yes,no,unknown,26,may,114,2,-1,0,unknown,no +38,technician,married,secondary,no,1696,no,no,cellular,20,nov,267,2,-1,0,unknown,no +52,admin.,married,secondary,no,722,no,no,cellular,26,oct,99,2,185,3,failure,no +34,admin.,single,secondary,no,296,no,no,cellular,20,nov,68,1,136,4,failure,no +40,management,single,tertiary,no,257,no,no,cellular,1,feb,147,1,209,1,failure,no +36,services,divorced,primary,no,418,yes,no,cellular,8,may,156,2,-1,0,unknown,no +56,retired,married,secondary,no,488,no,no,telephone,6,feb,146,4,-1,0,unknown,no +29,admin.,single,secondary,no,900,yes,no,unknown,14,may,339,1,-1,0,unknown,no +34,entrepreneur,single,tertiary,no,2945,yes,no,cellular,17,apr,266,1,-1,0,unknown,no +31,services,married,secondary,no,-327,yes,no,unknown,28,may,408,1,-1,0,unknown,no +36,unemployed,single,secondary,no,115,no,no,cellular,9,feb,71,2,-1,0,unknown,no +30,management,single,tertiary,no,218,no,no,unknown,3,jun,75,1,-1,0,unknown,no +36,admin.,married,secondary,no,286,yes,no,cellular,22,jul,167,9,-1,0,unknown,no +25,student,single,secondary,no,293,yes,no,telephone,5,may,170,2,-1,0,unknown,no +32,services,married,secondary,no,201,yes,no,unknown,18,jun,110,2,-1,0,unknown,no +31,management,single,tertiary,no,4331,yes,no,cellular,22,jul,318,1,-1,0,unknown,no +49,blue-collar,married,secondary,no,388,no,no,telephone,17,jul,265,2,-1,0,unknown,no +37,services,married,secondary,no,483,yes,no,cellular,30,jan,188,1,-1,0,unknown,no +26,student,single,secondary,no,502,yes,no,telephone,7,may,82,1,-1,0,unknown,no +41,blue-collar,married,secondary,no,306,yes,no,telephone,11,may,86,1,369,2,failure,no +47,blue-collar,married,secondary,no,-337,yes,yes,cellular,12,may,366,1,-1,0,unknown,no +57,technician,married,secondary,no,950,yes,no,cellular,9,jul,1272,1,-1,0,unknown,no +50,entrepreneur,married,tertiary,no,2410,no,no,cellular,21,nov,65,1,-1,0,unknown,no +36,management,married,tertiary,no,-633,yes,no,cellular,17,jul,106,1,-1,0,unknown,no +42,admin.,divorced,secondary,no,0,yes,no,unknown,7,may,229,2,-1,0,unknown,no +30,management,married,tertiary,no,265,yes,no,unknown,26,may,45,4,-1,0,unknown,no +43,unemployed,single,primary,no,698,yes,no,unknown,14,may,322,1,-1,0,unknown,no +49,services,single,secondary,no,459,yes,no,unknown,19,may,58,10,-1,0,unknown,no +35,technician,divorced,tertiary,no,0,yes,no,unknown,15,may,759,1,-1,0,unknown,no +32,technician,single,secondary,no,1307,yes,no,unknown,28,may,267,2,-1,0,unknown,no +36,admin.,single,secondary,no,8785,yes,no,cellular,20,nov,425,2,-1,0,unknown,no +42,housemaid,married,unknown,no,302,yes,no,cellular,11,jul,342,2,-1,0,unknown,no +34,technician,married,secondary,no,484,no,no,unknown,9,may,84,4,-1,0,unknown,no +33,services,married,secondary,no,7,yes,no,unknown,20,may,217,1,-1,0,unknown,no +55,services,single,secondary,no,1539,no,no,unknown,20,jun,65,2,-1,0,unknown,no +46,admin.,married,secondary,no,3098,yes,no,telephone,21,nov,192,9,-1,0,unknown,no +34,admin.,single,secondary,no,745,yes,yes,cellular,25,aug,76,1,-1,0,unknown,no +50,management,married,tertiary,no,2050,no,no,cellular,6,aug,158,3,-1,0,unknown,no +30,management,single,tertiary,no,2766,yes,yes,cellular,20,nov,244,1,-1,0,unknown,no +53,blue-collar,married,primary,no,4641,no,no,unknown,16,jun,356,2,-1,0,unknown,no +48,management,married,tertiary,no,1167,yes,yes,cellular,26,jan,122,4,50,4,other,no +55,services,divorced,secondary,no,322,yes,no,cellular,28,jan,342,1,-1,0,unknown,no +35,management,married,tertiary,no,750,yes,no,cellular,18,aug,233,12,-1,0,unknown,no +48,self-employed,married,secondary,no,1559,no,no,cellular,4,feb,130,2,-1,0,unknown,no +45,services,married,secondary,no,0,no,no,unknown,4,jun,153,6,-1,0,unknown,no +31,blue-collar,married,primary,no,0,yes,yes,unknown,12,may,59,4,-1,0,unknown,no +55,admin.,married,tertiary,no,46,no,no,cellular,29,aug,59,4,-1,0,unknown,no +41,technician,married,tertiary,no,0,no,no,unknown,20,jun,95,1,-1,0,unknown,no +33,self-employed,married,primary,no,1862,yes,no,unknown,12,may,65,1,-1,0,unknown,no +40,blue-collar,married,primary,no,7831,yes,no,unknown,14,may,78,1,-1,0,unknown,no +51,blue-collar,married,primary,no,21614,no,no,cellular,29,aug,47,20,-1,0,unknown,no +31,blue-collar,single,secondary,no,2137,no,no,unknown,29,may,413,1,-1,0,unknown,no +26,unknown,single,secondary,no,3247,no,no,telephone,6,feb,341,3,-1,0,unknown,no +39,admin.,single,secondary,no,14,yes,yes,unknown,13,may,19,9,-1,0,unknown,no +30,technician,married,secondary,no,0,yes,no,cellular,14,may,47,3,-1,0,unknown,no +28,management,single,tertiary,no,637,yes,no,cellular,4,feb,324,1,-1,0,unknown,no +48,technician,married,secondary,no,10655,no,no,telephone,31,jul,5,3,-1,0,unknown,no +56,management,married,tertiary,no,94,no,no,cellular,23,jul,530,3,-1,0,unknown,no +45,management,single,tertiary,no,997,no,yes,cellular,19,nov,152,1,-1,0,unknown,no +38,self-employed,married,tertiary,no,2084,yes,no,cellular,16,apr,71,2,330,2,failure,no +28,entrepreneur,single,secondary,no,1734,yes,no,unknown,3,jun,161,3,-1,0,unknown,no +51,entrepreneur,married,primary,no,805,yes,no,cellular,8,aug,132,4,-1,0,unknown,no +32,technician,single,unknown,no,317,yes,no,unknown,21,may,394,2,-1,0,unknown,no +31,blue-collar,married,secondary,no,369,yes,yes,unknown,14,may,89,2,-1,0,unknown,no +34,technician,married,tertiary,no,100,no,no,cellular,20,aug,196,2,-1,0,unknown,no +46,blue-collar,married,primary,no,-44,no,yes,telephone,22,aug,16,13,-1,0,unknown,no +36,technician,divorced,secondary,no,3296,yes,no,cellular,17,nov,130,1,-1,0,unknown,no +39,blue-collar,married,primary,no,-50,yes,no,cellular,15,may,100,1,-1,0,unknown,no +42,technician,single,tertiary,no,-411,yes,no,cellular,24,jul,212,3,-1,0,unknown,no +32,student,single,tertiary,no,922,no,no,cellular,18,oct,338,2,-1,0,unknown,no +35,management,married,unknown,no,1128,yes,no,unknown,4,jun,457,1,-1,0,unknown,no +50,blue-collar,married,tertiary,no,5423,yes,no,cellular,21,nov,75,3,-1,0,unknown,no +55,housemaid,married,primary,no,1537,no,no,unknown,19,jun,359,1,-1,0,unknown,no +51,entrepreneur,married,secondary,no,0,no,no,unknown,30,may,510,3,-1,0,unknown,no +43,services,married,tertiary,no,519,yes,no,cellular,18,may,715,6,-1,0,unknown,no +46,admin.,married,secondary,no,186,yes,no,cellular,11,may,643,2,-1,0,unknown,no +31,management,married,tertiary,no,83,no,no,cellular,29,jan,300,1,-1,0,unknown,no +38,management,married,primary,no,1365,yes,no,unknown,5,jun,224,1,-1,0,unknown,no +40,retired,single,secondary,no,1734,yes,no,unknown,3,jun,123,4,-1,0,unknown,no +53,management,married,secondary,no,51,yes,no,cellular,17,apr,109,1,-1,0,unknown,no +41,unknown,single,tertiary,no,1567,no,no,cellular,1,jul,291,2,-1,0,unknown,no +46,blue-collar,single,primary,no,96,yes,no,cellular,19,nov,217,1,-1,0,unknown,no +48,blue-collar,single,secondary,no,8982,yes,no,unknown,14,may,628,1,-1,0,unknown,no +31,blue-collar,divorced,secondary,no,-209,yes,no,cellular,8,may,154,3,367,2,failure,no +29,management,married,tertiary,no,-6,yes,no,unknown,9,may,324,1,-1,0,unknown,no +37,management,married,tertiary,no,355,no,no,cellular,4,aug,340,1,-1,0,unknown,no +37,self-employed,married,primary,no,0,no,no,unknown,7,may,112,4,-1,0,unknown,no +56,self-employed,married,unknown,no,0,no,no,cellular,19,aug,130,1,-1,0,unknown,no +60,blue-collar,divorced,secondary,no,1310,no,no,unknown,7,may,152,2,-1,0,unknown,no +46,services,married,tertiary,no,2520,yes,no,cellular,19,nov,144,1,-1,0,unknown,no +31,services,single,secondary,no,1629,yes,no,unknown,19,may,344,2,-1,0,unknown,no +51,technician,married,unknown,no,573,yes,yes,unknown,14,may,231,1,-1,0,unknown,no +38,technician,single,secondary,no,1655,no,no,cellular,29,jul,392,2,-1,0,unknown,no +39,services,single,secondary,no,26,yes,no,cellular,14,may,166,3,-1,0,unknown,no +30,management,single,secondary,no,186,yes,no,cellular,20,nov,235,3,-1,0,unknown,no +35,technician,married,secondary,no,13658,yes,no,telephone,9,dec,220,2,-1,0,unknown,no +31,technician,single,tertiary,no,23,no,no,cellular,25,aug,121,3,-1,0,unknown,no +27,blue-collar,single,secondary,no,87,no,no,telephone,10,jul,245,1,-1,0,unknown,no +42,technician,single,secondary,no,49,no,no,cellular,9,feb,7,10,-1,0,unknown,no +67,retired,married,tertiary,no,3810,no,no,cellular,21,oct,1206,1,-1,0,unknown,no +32,admin.,married,secondary,no,56,yes,no,cellular,2,feb,275,1,258,1,other,no +49,entrepreneur,married,tertiary,no,384,no,no,unknown,11,jun,64,1,-1,0,unknown,no +56,blue-collar,divorced,primary,no,8,yes,no,unknown,5,may,157,2,-1,0,unknown,no +34,technician,single,tertiary,no,2671,no,no,cellular,19,aug,119,9,-1,0,unknown,no +50,admin.,divorced,secondary,no,3240,no,no,cellular,21,nov,144,2,-1,0,unknown,no +27,self-employed,single,tertiary,no,147,no,no,cellular,22,jun,111,5,-1,0,unknown,no +56,retired,married,primary,no,63,no,no,cellular,19,aug,122,2,-1,0,unknown,no +44,technician,married,secondary,no,7863,no,no,cellular,26,aug,59,6,-1,0,unknown,no +45,admin.,single,secondary,no,946,yes,no,cellular,21,nov,56,2,175,4,failure,no +45,management,married,secondary,yes,237,yes,no,cellular,21,nov,526,1,-1,0,unknown,no +37,student,divorced,tertiary,no,0,no,no,telephone,30,jul,100,6,-1,0,unknown,no +26,blue-collar,married,secondary,no,245,yes,no,unknown,28,may,146,2,-1,0,unknown,no +32,services,married,secondary,no,315,no,no,cellular,4,aug,149,1,-1,0,unknown,no +25,student,single,secondary,no,1139,yes,no,unknown,15,may,22,3,-1,0,unknown,no +48,management,married,secondary,no,0,yes,no,telephone,23,jul,90,2,-1,0,unknown,no +29,services,married,primary,no,-102,no,no,unknown,4,jul,134,1,-1,0,unknown,no +46,management,married,tertiary,no,3984,no,no,cellular,13,aug,77,2,-1,0,unknown,no +34,blue-collar,married,secondary,no,1988,yes,no,telephone,29,jan,53,1,266,2,failure,no +46,management,married,tertiary,no,125,yes,no,telephone,12,may,81,5,-1,0,unknown,no +31,blue-collar,married,secondary,no,505,yes,no,cellular,17,apr,218,4,329,2,other,no +39,technician,married,secondary,no,834,yes,yes,cellular,20,apr,390,1,-1,0,unknown,no +29,admin.,married,secondary,no,494,yes,no,unknown,26,may,341,2,-1,0,unknown,no +38,blue-collar,single,primary,no,947,yes,no,cellular,12,may,361,2,-1,0,unknown,no +40,unemployed,divorced,secondary,no,262,yes,no,unknown,14,may,163,5,-1,0,unknown,no +39,management,married,tertiary,no,141,yes,no,cellular,13,may,788,2,331,6,other,no +49,technician,divorced,secondary,no,-236,yes,no,unknown,26,may,204,2,-1,0,unknown,no +34,management,single,tertiary,no,2555,yes,no,cellular,26,may,129,2,-1,0,unknown,no +30,technician,single,secondary,no,298,yes,no,unknown,16,may,164,2,-1,0,unknown,no +57,entrepreneur,married,secondary,no,1179,no,no,cellular,19,aug,189,2,-1,0,unknown,no +34,services,married,primary,no,31,no,yes,cellular,9,jul,53,3,-1,0,unknown,no +21,student,single,secondary,no,357,no,no,cellular,2,sep,115,3,-1,0,unknown,no +35,self-employed,single,tertiary,no,1129,yes,no,cellular,21,nov,64,2,184,2,failure,no +39,technician,single,tertiary,no,861,no,no,unknown,20,jun,32,5,-1,0,unknown,no +42,housemaid,married,primary,yes,16,no,no,unknown,11,jun,79,1,-1,0,unknown,no +25,services,single,secondary,no,895,yes,no,unknown,3,jun,167,1,-1,0,unknown,no +27,services,single,secondary,no,504,yes,no,cellular,18,may,106,5,362,8,other,no +33,management,single,secondary,no,2955,yes,no,cellular,18,may,178,2,-1,0,unknown,no +51,services,married,secondary,no,122,no,yes,cellular,6,aug,499,2,-1,0,unknown,no +32,management,married,tertiary,no,2204,no,no,cellular,27,aug,123,4,-1,0,unknown,no +53,blue-collar,married,unknown,no,111,no,no,unknown,20,jun,39,3,-1,0,unknown,no +29,management,single,tertiary,no,1566,yes,no,unknown,4,jun,233,1,-1,0,unknown,no +33,admin.,divorced,secondary,no,661,yes,no,cellular,4,may,90,4,167,3,failure,no +33,management,single,tertiary,no,2485,yes,no,cellular,2,nov,91,2,-1,0,unknown,no +32,services,married,secondary,no,3756,yes,no,unknown,4,jun,85,3,-1,0,unknown,no +31,blue-collar,married,secondary,no,43,yes,no,unknown,19,may,405,3,-1,0,unknown,no +45,management,married,tertiary,no,1529,no,no,cellular,30,jun,160,1,-1,0,unknown,no +57,services,married,secondary,no,84,yes,no,unknown,15,may,59,1,-1,0,unknown,no +47,services,married,secondary,no,311,yes,yes,cellular,12,may,238,1,301,3,failure,no +52,blue-collar,married,secondary,no,408,no,no,cellular,29,jan,338,2,-1,0,unknown,no +56,housemaid,divorced,secondary,no,1866,no,yes,cellular,1,oct,760,1,-1,0,unknown,no +51,blue-collar,married,primary,no,42,yes,no,cellular,12,may,51,2,342,3,failure,no +40,student,married,secondary,no,260,no,no,cellular,19,nov,52,1,152,6,failure,no +30,management,married,tertiary,no,2994,yes,no,cellular,26,mar,156,1,137,1,other,no +39,management,married,tertiary,no,0,no,no,unknown,27,may,205,8,-1,0,unknown,no +42,admin.,married,secondary,no,1133,yes,no,cellular,4,feb,161,4,212,3,failure,no +25,management,single,tertiary,no,2305,no,no,cellular,3,feb,207,1,-1,0,unknown,no +60,retired,married,secondary,no,143,no,no,telephone,30,jan,345,1,-1,0,unknown,no +37,management,married,primary,no,4721,no,no,telephone,28,jan,46,1,-1,0,unknown,no +48,blue-collar,married,primary,no,5366,yes,no,unknown,21,may,248,3,-1,0,unknown,no +32,management,married,tertiary,no,71,no,no,cellular,2,feb,75,1,-1,0,unknown,no +33,admin.,single,secondary,no,1437,yes,no,unknown,21,may,641,1,-1,0,unknown,no +51,housemaid,married,primary,no,1093,no,yes,unknown,18,jun,18,1,-1,0,unknown,no +43,admin.,married,secondary,no,817,yes,yes,cellular,21,nov,51,1,-1,0,unknown,no +31,blue-collar,married,primary,no,196,no,no,cellular,7,aug,248,1,-1,0,unknown,no +36,housemaid,married,secondary,no,205,yes,no,telephone,18,nov,176,4,-1,0,unknown,no +58,self-employed,married,secondary,no,0,yes,no,telephone,3,feb,702,3,264,9,failure,no +33,blue-collar,married,primary,no,1002,yes,no,unknown,30,may,201,4,-1,0,unknown,no +31,technician,single,secondary,no,2916,no,no,cellular,14,aug,174,2,-1,0,unknown,no +28,technician,single,tertiary,no,4513,yes,no,unknown,27,may,167,3,-1,0,unknown,no +29,blue-collar,married,primary,no,7,yes,no,cellular,12,may,69,3,-1,0,unknown,no +34,technician,married,secondary,no,0,no,no,cellular,28,aug,183,10,-1,0,unknown,no +31,technician,single,secondary,no,253,no,no,cellular,13,jan,262,1,-1,0,unknown,no +31,services,married,secondary,no,28,yes,no,unknown,8,may,101,1,-1,0,unknown,no +37,admin.,divorced,tertiary,no,-65,no,no,cellular,21,jul,226,1,-1,0,unknown,no +32,services,divorced,tertiary,no,376,yes,no,unknown,20,may,102,2,-1,0,unknown,no +42,management,married,secondary,no,1018,no,no,cellular,29,jul,305,2,-1,0,unknown,no +34,technician,married,secondary,no,260,yes,no,cellular,17,apr,20,2,238,2,failure,no +74,retired,married,primary,no,5539,no,no,cellular,12,jul,390,2,159,3,failure,no +60,services,divorced,secondary,no,758,no,no,cellular,3,feb,282,1,-1,0,unknown,no +32,unemployed,married,secondary,no,262,no,no,cellular,29,jan,203,1,-1,0,unknown,no +47,technician,divorced,secondary,no,236,no,no,cellular,18,aug,263,4,-1,0,unknown,no +45,services,divorced,secondary,no,396,yes,yes,cellular,1,apr,251,4,329,4,failure,no +50,entrepreneur,married,secondary,no,1857,no,yes,unknown,19,jun,26,2,-1,0,unknown,no +39,self-employed,married,secondary,no,4722,yes,no,unknown,17,jun,483,1,-1,0,unknown,no +60,retired,divorced,secondary,no,935,no,no,cellular,31,jul,8,17,-1,0,unknown,no +47,management,married,unknown,no,4567,no,no,telephone,31,jul,921,4,-1,0,unknown,no +40,admin.,divorced,secondary,no,220,yes,no,cellular,18,may,197,2,-1,0,unknown,no +26,blue-collar,single,secondary,no,8,yes,no,cellular,13,may,167,1,-1,0,unknown,no +43,management,single,secondary,no,109,yes,no,unknown,27,may,64,3,-1,0,unknown,no +30,unemployed,single,secondary,no,0,yes,no,cellular,16,apr,137,1,-1,0,unknown,no +34,entrepreneur,married,secondary,no,456,yes,yes,cellular,28,aug,137,8,-1,0,unknown,no +35,technician,married,secondary,no,5553,yes,no,cellular,6,apr,371,3,136,7,failure,no +21,student,single,unknown,no,137,yes,no,unknown,12,may,198,3,-1,0,unknown,no +52,admin.,married,secondary,no,299,no,no,cellular,19,nov,310,4,-1,0,unknown,no +31,admin.,single,secondary,no,162,yes,no,unknown,28,may,247,1,-1,0,unknown,no +42,technician,divorced,secondary,no,1533,no,yes,cellular,5,aug,86,1,-1,0,unknown,no +31,entrepreneur,single,unknown,no,301,yes,no,cellular,4,feb,371,1,-1,0,unknown,no +58,management,married,tertiary,no,1697,no,no,unknown,20,jun,55,2,-1,0,unknown,no +51,management,married,secondary,no,441,yes,no,cellular,7,may,189,2,167,2,other,no +38,entrepreneur,married,tertiary,no,898,yes,no,unknown,6,may,132,2,-1,0,unknown,no +32,technician,single,secondary,no,945,no,no,cellular,4,may,312,3,-1,0,unknown,no +31,entrepreneur,divorced,tertiary,no,0,yes,no,cellular,18,nov,164,1,-1,0,unknown,no +36,blue-collar,single,tertiary,no,1830,no,no,cellular,14,oct,183,1,91,11,failure,no +33,blue-collar,married,tertiary,no,6138,yes,no,unknown,20,may,369,1,-1,0,unknown,no +47,technician,divorced,unknown,no,442,yes,no,cellular,11,may,85,1,-1,0,unknown,no +52,management,married,tertiary,no,0,no,no,cellular,12,aug,106,2,-1,0,unknown,no +42,blue-collar,married,primary,no,1556,no,yes,cellular,8,jul,113,1,-1,0,unknown,no +39,admin.,divorced,secondary,no,83,yes,no,cellular,30,jul,69,6,-1,0,unknown,no +31,admin.,single,secondary,no,430,yes,no,cellular,15,apr,103,2,-1,0,unknown,no +52,services,married,secondary,no,-336,no,yes,unknown,12,jun,111,8,-1,0,unknown,no +40,blue-collar,divorced,unknown,no,528,yes,no,cellular,13,may,340,2,357,5,failure,no +29,blue-collar,married,primary,no,111,yes,no,cellular,6,may,14,11,-1,0,unknown,no +49,management,single,tertiary,no,1556,yes,no,cellular,28,jul,674,3,-1,0,unknown,no +57,management,divorced,tertiary,no,408,yes,no,cellular,13,may,402,2,351,1,failure,no +35,technician,married,secondary,no,1067,no,yes,cellular,12,aug,179,6,-1,0,unknown,no +26,blue-collar,single,secondary,no,277,no,no,unknown,14,may,514,2,-1,0,unknown,no +35,blue-collar,married,secondary,no,257,yes,no,cellular,14,may,186,1,-1,0,unknown,no +31,management,single,tertiary,no,0,yes,yes,cellular,14,may,117,3,352,3,failure,no +57,management,divorced,tertiary,no,2549,no,no,cellular,17,jul,193,2,-1,0,unknown,no +32,services,divorced,secondary,no,4612,yes,no,cellular,24,jul,937,4,-1,0,unknown,no +87,retired,married,secondary,no,433,no,no,telephone,15,dec,150,1,-1,0,unknown,no +44,self-employed,married,unknown,no,680,yes,no,telephone,30,jul,84,4,-1,0,unknown,no +41,blue-collar,single,secondary,no,3851,no,no,cellular,19,nov,130,1,-1,0,unknown,no +36,management,single,tertiary,no,442,yes,yes,cellular,29,jul,102,3,-1,0,unknown,no +56,services,married,secondary,no,642,yes,no,cellular,30,jan,16,1,2,3,other,no +35,blue-collar,single,secondary,no,487,yes,no,unknown,15,may,117,1,-1,0,unknown,no +46,admin.,married,secondary,no,171,yes,yes,cellular,11,oct,251,1,430,1,failure,no +32,technician,single,tertiary,no,13711,yes,no,cellular,14,may,638,1,175,3,success,no +41,entrepreneur,married,secondary,no,187,no,yes,cellular,21,jul,354,1,-1,0,unknown,no +34,management,married,tertiary,no,101,yes,no,cellular,13,aug,209,5,-1,0,unknown,no +48,blue-collar,married,primary,no,343,no,no,unknown,19,jun,136,1,-1,0,unknown,no +31,unemployed,single,secondary,no,315,no,no,cellular,30,jan,130,1,2,1,other,no +41,services,married,secondary,no,205,yes,no,unknown,8,may,91,1,-1,0,unknown,no +36,blue-collar,married,primary,no,106,yes,no,cellular,29,jul,171,13,-1,0,unknown,no +31,technician,married,secondary,no,477,no,no,cellular,30,apr,146,1,-1,0,unknown,no +37,management,single,tertiary,no,2875,no,no,cellular,20,nov,110,2,-1,0,unknown,no +48,technician,married,secondary,no,1000,no,no,cellular,21,nov,104,2,-1,0,unknown,no +31,unemployed,married,secondary,no,-825,yes,no,unknown,7,may,179,2,-1,0,unknown,no +42,admin.,married,secondary,no,534,yes,no,unknown,16,may,139,2,-1,0,unknown,no +50,blue-collar,married,unknown,no,452,no,no,cellular,20,aug,181,2,-1,0,unknown,no +47,management,married,secondary,no,623,yes,no,cellular,13,may,102,6,-1,0,unknown,no +43,technician,married,secondary,no,310,yes,no,unknown,29,may,291,1,-1,0,unknown,no +59,housemaid,married,secondary,no,454,no,no,cellular,21,aug,162,1,-1,0,unknown,no +35,management,single,tertiary,no,2306,no,no,cellular,18,aug,86,7,-1,0,unknown,no +24,technician,single,secondary,no,-126,yes,yes,unknown,13,may,382,2,-1,0,unknown,no +49,blue-collar,married,primary,no,399,no,no,cellular,29,jan,679,1,-1,0,unknown,no +47,services,married,secondary,no,0,yes,no,telephone,9,jul,250,1,-1,0,unknown,no +57,self-employed,married,secondary,no,2109,no,no,cellular,21,aug,107,6,-1,0,unknown,no +29,management,married,tertiary,no,0,yes,yes,cellular,15,jul,218,1,-1,0,unknown,no +50,management,married,tertiary,no,-470,yes,no,cellular,19,nov,130,2,160,1,failure,no +32,management,married,tertiary,no,81,yes,no,cellular,17,nov,120,1,-1,0,unknown,no +23,admin.,single,secondary,no,1104,yes,no,unknown,12,may,120,2,-1,0,unknown,no +41,technician,married,secondary,no,457,yes,yes,unknown,26,may,181,2,-1,0,unknown,no +48,blue-collar,divorced,primary,no,0,no,no,unknown,6,jun,248,2,-1,0,unknown,no +29,management,married,tertiary,no,941,yes,no,unknown,4,jun,570,11,-1,0,unknown,no +42,admin.,married,primary,no,-466,no,yes,telephone,31,jul,94,15,-1,0,unknown,no +38,admin.,single,secondary,no,2600,yes,no,cellular,19,nov,67,1,-1,0,unknown,no +31,management,single,tertiary,no,3,no,no,cellular,4,feb,406,2,-1,0,unknown,no +38,technician,married,unknown,no,90,yes,yes,unknown,8,may,20,2,-1,0,unknown,no +50,management,married,tertiary,no,2570,no,no,cellular,18,nov,273,2,-1,0,unknown,no +36,management,single,tertiary,no,181,yes,no,cellular,13,may,159,2,278,4,failure,no +52,blue-collar,married,primary,no,66653,no,no,cellular,14,aug,109,3,-1,0,unknown,no +50,entrepreneur,married,secondary,no,556,yes,no,unknown,16,may,130,2,-1,0,unknown,no +38,housemaid,married,secondary,no,110,no,no,cellular,25,may,167,1,-1,0,unknown,no +30,services,single,secondary,no,9,no,yes,cellular,29,jan,194,2,205,2,failure,no +46,management,married,secondary,no,0,no,no,unknown,12,jun,155,1,-1,0,unknown,no +54,management,married,secondary,yes,5249,yes,no,cellular,17,nov,108,1,-1,0,unknown,no +46,blue-collar,married,primary,no,2499,yes,no,unknown,16,may,42,3,-1,0,unknown,no +49,management,married,tertiary,no,276,no,no,cellular,27,aug,62,5,-1,0,unknown,no +36,management,single,tertiary,no,3343,no,no,cellular,18,nov,307,1,-1,0,unknown,no +58,self-employed,married,secondary,no,9994,no,no,cellular,10,jul,400,1,-1,0,unknown,no +29,admin.,single,secondary,no,613,yes,no,unknown,19,jun,779,1,-1,0,unknown,no +41,blue-collar,single,secondary,no,925,yes,no,telephone,13,may,43,1,-1,0,unknown,no +32,management,married,tertiary,no,393,no,no,cellular,28,jan,458,2,-1,0,unknown,no +33,services,divorced,secondary,yes,339,yes,no,unknown,23,may,496,4,-1,0,unknown,no +31,entrepreneur,married,tertiary,no,1216,no,no,cellular,8,aug,150,4,-1,0,unknown,no +44,technician,married,tertiary,no,1818,yes,yes,cellular,30,apr,247,1,-1,0,unknown,no +51,entrepreneur,divorced,tertiary,no,2109,no,no,cellular,12,apr,119,1,181,2,success,no +38,admin.,married,secondary,no,46,no,no,cellular,7,aug,48,2,-1,0,unknown,no +38,management,married,tertiary,no,980,no,no,unknown,3,jun,662,5,-1,0,unknown,no +27,unemployed,single,tertiary,no,3060,no,no,cellular,30,jan,533,1,-1,0,unknown,no +41,housemaid,married,primary,no,46,no,no,cellular,22,aug,268,1,-1,0,unknown,no +32,blue-collar,married,primary,no,274,yes,no,unknown,9,may,21,3,-1,0,unknown,no +45,admin.,married,secondary,no,805,yes,no,unknown,15,may,186,3,-1,0,unknown,no +54,housemaid,married,primary,no,3151,no,no,unknown,18,jun,350,7,-1,0,unknown,no +36,technician,divorced,secondary,no,160,yes,no,unknown,26,may,142,1,-1,0,unknown,no +33,management,married,tertiary,no,0,yes,no,cellular,28,jul,54,3,-1,0,unknown,no +40,services,divorced,secondary,no,694,yes,no,cellular,31,jul,75,14,-1,0,unknown,no +37,blue-collar,married,secondary,no,509,yes,no,cellular,20,apr,172,1,-1,0,unknown,no +48,blue-collar,married,primary,no,237,yes,no,unknown,19,jun,18,18,-1,0,unknown,no +36,management,married,tertiary,no,0,yes,no,cellular,29,jan,86,1,237,17,other,no +46,management,married,tertiary,no,16,yes,no,cellular,6,may,304,1,-1,0,unknown,no +29,admin.,divorced,secondary,no,504,yes,no,cellular,7,may,203,1,-1,0,unknown,no +41,technician,married,secondary,no,-274,yes,no,unknown,27,may,182,3,-1,0,unknown,no +44,management,married,tertiary,no,0,yes,no,unknown,28,may,260,1,-1,0,unknown,no +40,management,married,tertiary,no,0,yes,no,cellular,2,feb,279,1,-1,0,unknown,no +33,technician,single,tertiary,no,2565,yes,no,cellular,13,may,128,2,-1,0,unknown,no +60,technician,married,tertiary,no,91,no,no,cellular,27,aug,105,4,-1,0,unknown,no +48,blue-collar,married,secondary,no,558,yes,no,telephone,5,feb,708,8,-1,0,unknown,no +37,unemployed,single,tertiary,no,1032,no,no,telephone,4,feb,63,1,-1,0,unknown,no +39,management,married,tertiary,no,351,yes,no,unknown,20,may,999,3,-1,0,unknown,no +28,student,single,secondary,no,231,yes,no,cellular,8,may,55,1,-1,0,unknown,no +44,housemaid,married,primary,no,3706,no,no,unknown,17,jun,209,3,-1,0,unknown,no +37,management,married,tertiary,no,5,no,no,cellular,29,aug,36,2,-1,0,unknown,no +58,management,single,tertiary,no,342,no,yes,cellular,11,jul,564,2,-1,0,unknown,no +50,unemployed,single,secondary,no,588,no,no,cellular,31,jul,649,3,-1,0,unknown,no +38,services,married,secondary,no,3165,yes,no,unknown,12,may,152,2,-1,0,unknown,no +31,management,single,tertiary,no,0,no,no,cellular,25,aug,101,6,-1,0,unknown,no +33,technician,divorced,secondary,no,464,no,no,cellular,4,feb,207,4,-1,0,unknown,no +35,management,single,tertiary,no,837,no,no,cellular,4,aug,329,1,-1,0,unknown,no +53,management,married,tertiary,no,34230,yes,yes,cellular,7,may,279,1,358,9,other,no +58,retired,married,secondary,no,5435,yes,no,unknown,6,may,118,1,-1,0,unknown,no +26,blue-collar,single,primary,no,102,yes,no,unknown,16,may,46,1,-1,0,unknown,no +34,admin.,married,secondary,no,641,yes,yes,unknown,16,may,467,1,-1,0,unknown,no +50,blue-collar,married,primary,no,334,no,no,cellular,27,aug,79,3,-1,0,unknown,no +42,blue-collar,married,unknown,no,149,yes,no,telephone,23,jul,329,3,-1,0,unknown,no +46,admin.,married,secondary,no,179,yes,no,cellular,29,jan,194,4,436,1,other,no +45,blue-collar,married,primary,no,61,no,no,cellular,17,apr,108,1,-1,0,unknown,no +46,services,married,secondary,no,375,no,no,telephone,31,jul,172,6,-1,0,unknown,no +31,technician,single,secondary,no,2088,no,no,cellular,9,feb,15,14,-1,0,unknown,no +44,technician,single,secondary,no,29,yes,no,unknown,5,may,151,1,-1,0,unknown,no +36,management,married,tertiary,no,3839,no,no,cellular,19,nov,146,1,-1,0,unknown,no +50,management,married,secondary,no,2910,no,no,telephone,29,jul,790,1,-1,0,unknown,no +33,management,single,tertiary,no,3770,no,no,cellular,28,jan,757,2,-1,0,unknown,no +33,blue-collar,married,primary,no,141,yes,no,unknown,21,may,578,2,-1,0,unknown,no +55,management,single,tertiary,no,0,no,no,cellular,30,apr,156,3,-1,0,unknown,no +40,services,single,secondary,no,65,yes,no,cellular,15,may,15,3,-1,0,unknown,no +30,technician,married,secondary,no,-306,yes,yes,cellular,18,nov,372,1,186,1,failure,no +36,services,married,secondary,no,3740,yes,no,cellular,7,apr,254,1,-1,0,unknown,no +34,services,divorced,secondary,no,0,yes,yes,unknown,20,may,203,1,-1,0,unknown,no +46,entrepreneur,married,secondary,no,131,yes,no,cellular,20,apr,69,2,-1,0,unknown,no +55,management,married,tertiary,no,23189,yes,no,unknown,14,may,77,1,-1,0,unknown,no +56,blue-collar,divorced,primary,yes,-1,no,no,cellular,18,jul,304,3,-1,0,unknown,no +34,admin.,single,secondary,no,6979,yes,no,cellular,15,may,14,5,-1,0,unknown,no +42,management,married,tertiary,no,187,no,no,cellular,11,aug,64,1,-1,0,unknown,no +48,blue-collar,married,primary,no,1203,no,no,cellular,6,aug,61,5,-1,0,unknown,no +51,management,married,primary,no,6298,yes,no,unknown,20,jun,14,3,-1,0,unknown,no +45,blue-collar,single,tertiary,no,-243,no,yes,cellular,8,jul,171,2,-1,0,unknown,no +35,self-employed,single,primary,no,181,yes,no,unknown,15,may,19,8,-1,0,unknown,no +63,self-employed,married,tertiary,no,661,no,no,cellular,2,mar,56,2,-1,0,unknown,no +35,blue-collar,married,secondary,no,270,yes,yes,cellular,6,apr,332,2,335,1,failure,no +25,student,single,secondary,no,1919,yes,no,cellular,15,may,264,1,351,4,failure,no +26,self-employed,married,secondary,no,492,yes,yes,cellular,15,may,439,4,-1,0,unknown,no +29,management,single,tertiary,no,91,no,no,cellular,30,apr,99,1,274,4,other,no +26,management,married,tertiary,no,775,no,no,unknown,19,may,35,3,-1,0,unknown,no +26,blue-collar,single,secondary,no,2669,yes,no,cellular,16,apr,242,1,-1,0,unknown,no +23,management,single,tertiary,no,2605,yes,no,unknown,7,may,278,6,-1,0,unknown,no +51,management,single,unknown,no,1277,no,no,cellular,22,feb,143,5,294,1,failure,no +51,blue-collar,married,secondary,no,568,yes,no,unknown,4,jun,37,1,-1,0,unknown,no +43,technician,married,secondary,no,2344,yes,no,unknown,27,may,111,2,-1,0,unknown,no +81,retired,divorced,primary,no,4321,no,no,cellular,11,aug,163,3,-1,0,unknown,no +42,management,divorced,tertiary,no,1064,no,no,cellular,18,aug,101,2,-1,0,unknown,no +41,services,married,secondary,no,241,yes,yes,unknown,4,jun,144,1,-1,0,unknown,no +35,technician,single,secondary,no,183,no,no,cellular,1,sep,516,2,130,2,failure,no +32,management,married,tertiary,no,9214,no,yes,unknown,18,oct,71,1,-1,0,unknown,no +51,services,single,secondary,no,513,yes,no,cellular,29,jul,331,2,-1,0,unknown,no +33,technician,married,secondary,no,14850,yes,no,cellular,5,feb,122,5,-1,0,unknown,no +38,self-employed,married,secondary,no,279,yes,no,unknown,28,may,110,5,-1,0,unknown,no +48,retired,married,tertiary,no,4,no,yes,cellular,23,jul,70,5,-1,0,unknown,no +50,technician,divorced,secondary,no,-298,yes,no,cellular,6,feb,68,8,-1,0,unknown,no +39,blue-collar,single,secondary,no,522,yes,no,telephone,14,may,225,7,350,2,failure,no +30,services,single,secondary,no,0,yes,no,cellular,7,jul,161,2,-1,0,unknown,no +39,technician,married,secondary,no,8,no,yes,cellular,17,nov,333,2,96,2,failure,no +35,technician,married,tertiary,no,432,no,no,cellular,12,aug,104,8,-1,0,unknown,no +41,technician,married,secondary,no,-378,yes,no,cellular,5,feb,361,1,253,2,failure,no +41,admin.,married,secondary,no,338,yes,no,unknown,16,may,121,1,-1,0,unknown,no +35,blue-collar,married,primary,no,2878,yes,no,cellular,18,nov,140,2,-1,0,unknown,no +43,management,married,primary,no,62,yes,no,cellular,14,may,133,1,300,3,failure,no +27,services,married,secondary,no,1303,yes,yes,unknown,21,may,364,1,-1,0,unknown,no +32,technician,married,secondary,no,255,no,yes,cellular,25,aug,63,5,-1,0,unknown,no +39,technician,divorced,secondary,no,0,yes,yes,cellular,30,apr,85,1,-1,0,unknown,no +37,management,married,tertiary,no,1125,yes,no,unknown,3,jun,301,1,-1,0,unknown,no +40,entrepreneur,married,secondary,no,1238,yes,no,telephone,21,jul,50,2,-1,0,unknown,no +33,blue-collar,married,secondary,no,370,yes,no,cellular,8,apr,249,1,-1,0,unknown,no +29,management,married,tertiary,no,2417,yes,no,cellular,7,may,126,2,-1,0,unknown,no +50,housemaid,married,primary,no,4,no,no,unknown,16,jun,51,1,-1,0,unknown,no +39,admin.,married,primary,no,444,yes,no,cellular,8,may,374,2,-1,0,unknown,no +32,technician,single,secondary,no,28,yes,no,cellular,18,nov,368,1,-1,0,unknown,no +49,management,married,tertiary,no,2139,no,no,cellular,5,aug,278,1,-1,0,unknown,no +37,blue-collar,married,secondary,no,194,yes,no,unknown,12,may,566,7,-1,0,unknown,no +57,blue-collar,married,primary,yes,195,no,yes,telephone,30,jul,185,4,-1,0,unknown,no +44,management,married,secondary,no,0,no,no,cellular,21,aug,167,2,-1,0,unknown,no +36,self-employed,married,secondary,no,189,yes,no,cellular,22,jul,632,1,-1,0,unknown,no +55,management,single,secondary,no,220,yes,no,unknown,6,may,328,2,-1,0,unknown,no +40,admin.,married,primary,no,189,yes,no,unknown,27,may,160,2,-1,0,unknown,no +40,blue-collar,married,secondary,no,746,yes,yes,cellular,2,feb,241,1,262,3,other,no +44,management,married,secondary,no,13054,yes,no,cellular,11,may,471,2,174,12,other,no +41,services,married,primary,no,0,yes,no,cellular,17,jul,18,11,-1,0,unknown,no +65,retired,married,secondary,no,23421,no,no,cellular,2,feb,432,1,-1,0,unknown,no +31,blue-collar,married,secondary,no,41,yes,no,unknown,19,may,265,1,-1,0,unknown,no +48,blue-collar,married,secondary,no,7408,no,yes,cellular,4,feb,101,2,-1,0,unknown,no +55,retired,married,tertiary,no,101,yes,no,cellular,9,jul,111,1,-1,0,unknown,no +34,admin.,married,secondary,no,384,yes,no,cellular,14,may,551,2,-1,0,unknown,no +36,admin.,single,secondary,no,2556,yes,no,cellular,13,apr,342,1,-1,0,unknown,no +33,management,married,tertiary,no,808,yes,no,cellular,19,aug,12,16,-1,0,unknown,no +46,management,married,tertiary,no,0,no,no,cellular,26,may,401,1,-1,0,unknown,no +52,management,married,tertiary,no,1158,no,no,cellular,27,aug,57,4,-1,0,unknown,no +33,management,married,tertiary,no,334,no,no,cellular,25,nov,87,1,-1,0,unknown,no +29,blue-collar,married,secondary,no,296,yes,no,unknown,4,jun,153,1,-1,0,unknown,no +36,technician,married,primary,no,1653,yes,yes,unknown,27,may,336,10,-1,0,unknown,no +37,admin.,married,secondary,no,1283,yes,no,unknown,20,may,209,1,-1,0,unknown,no +53,blue-collar,married,primary,no,2295,no,no,cellular,21,aug,65,10,-1,0,unknown,no +28,unemployed,married,secondary,no,-42,yes,yes,cellular,31,jul,143,4,-1,0,unknown,no +19,student,single,secondary,no,55,no,no,telephone,6,oct,89,2,193,1,other,no +41,housemaid,married,primary,no,365,no,no,cellular,8,aug,203,5,-1,0,unknown,no +33,services,single,secondary,no,772,yes,no,cellular,29,jan,323,2,259,3,success,no +28,management,single,tertiary,no,334,yes,no,unknown,14,may,438,4,-1,0,unknown,no +40,admin.,married,secondary,no,1060,yes,no,cellular,17,apr,14,3,-1,0,unknown,no +78,retired,married,unknown,no,38,no,no,telephone,4,aug,156,1,1,3,other,no +29,services,single,secondary,no,146,yes,no,unknown,19,may,104,2,-1,0,unknown,no +36,unemployed,married,secondary,no,439,yes,no,telephone,6,feb,18,6,-1,0,unknown,no +59,entrepreneur,married,primary,no,124,yes,no,cellular,18,nov,531,3,134,7,failure,no +34,services,married,secondary,no,190,yes,no,cellular,15,may,121,3,-1,0,unknown,no +82,retired,married,unknown,no,211,no,no,telephone,22,apr,195,3,-1,0,unknown,no +36,management,married,tertiary,no,871,no,no,cellular,18,nov,170,1,-1,0,unknown,no +48,management,married,primary,no,1513,no,no,cellular,29,jan,166,2,-1,0,unknown,no +36,blue-collar,married,primary,no,871,yes,yes,telephone,18,nov,2,1,-1,0,unknown,no +25,technician,single,secondary,no,1298,no,no,cellular,2,sep,206,7,94,2,other,no +40,technician,single,secondary,no,360,yes,no,unknown,9,may,73,1,-1,0,unknown,no +33,services,married,tertiary,no,597,no,no,cellular,4,feb,134,1,-1,0,unknown,no +30,blue-collar,divorced,secondary,yes,457,yes,no,unknown,20,jun,115,20,-1,0,unknown,no +27,services,single,secondary,no,2457,yes,no,unknown,29,may,123,4,-1,0,unknown,no +34,technician,married,tertiary,no,2069,no,no,cellular,20,aug,328,2,-1,0,unknown,no +28,services,single,secondary,no,47,no,no,cellular,22,jul,405,2,-1,0,unknown,no +40,blue-collar,married,primary,no,13,yes,no,unknown,4,jul,178,1,-1,0,unknown,no +47,retired,married,secondary,no,-71,yes,no,cellular,11,aug,293,5,-1,0,unknown,no +59,unknown,divorced,unknown,no,27,no,no,unknown,5,may,347,3,-1,0,unknown,no +30,services,single,secondary,no,-114,yes,no,cellular,21,jul,396,2,-1,0,unknown,no +39,unemployed,single,secondary,no,2645,yes,no,unknown,21,may,339,3,-1,0,unknown,no +44,blue-collar,married,secondary,no,1025,yes,no,unknown,18,jun,200,1,-1,0,unknown,no +46,management,single,tertiary,no,2044,no,no,telephone,4,feb,25,1,-1,0,unknown,no +32,housemaid,married,tertiary,no,10,yes,no,unknown,2,jun,658,2,-1,0,unknown,no +35,admin.,divorced,secondary,no,0,no,yes,cellular,14,jul,245,2,-1,0,unknown,no +35,management,single,tertiary,no,644,yes,no,unknown,30,may,120,2,-1,0,unknown,no +38,management,married,tertiary,no,4293,yes,no,cellular,6,may,92,2,250,2,failure,no +27,housemaid,married,primary,yes,-238,no,no,cellular,14,jul,132,4,-1,0,unknown,no +32,housemaid,divorced,secondary,no,-613,yes,no,cellular,15,apr,266,2,-1,0,unknown,no +37,admin.,divorced,secondary,no,1573,yes,no,cellular,12,may,639,3,326,10,failure,no +59,entrepreneur,married,tertiary,no,1728,no,no,cellular,7,jul,575,2,-1,0,unknown,no +32,technician,married,tertiary,no,15,no,no,cellular,14,may,226,1,346,1,failure,no +31,technician,married,secondary,no,-160,yes,no,cellular,14,jul,126,6,-1,0,unknown,no +55,technician,married,secondary,no,312,no,no,cellular,6,feb,13,8,9,3,other,no +26,technician,single,secondary,no,33,no,no,cellular,23,jul,91,7,-1,0,unknown,no +30,blue-collar,single,secondary,no,80,yes,yes,cellular,5,may,145,1,337,4,failure,no +34,admin.,married,secondary,no,445,no,no,cellular,19,aug,256,2,-1,0,unknown,no +83,retired,divorced,primary,no,4565,no,no,cellular,13,sep,175,2,-1,0,unknown,no +46,self-employed,married,primary,no,3262,no,no,cellular,14,aug,77,8,-1,0,unknown,no +48,blue-collar,married,primary,no,559,yes,no,unknown,15,may,1231,2,-1,0,unknown,no +47,blue-collar,married,secondary,no,4840,no,no,unknown,16,jun,53,1,-1,0,unknown,no +31,technician,married,secondary,no,-302,no,no,cellular,13,aug,195,2,-1,0,unknown,no +32,entrepreneur,married,unknown,no,73,yes,no,cellular,21,nov,158,1,135,1,failure,no +32,technician,married,secondary,no,4790,yes,no,cellular,22,jul,314,2,-1,0,unknown,no +39,admin.,single,secondary,no,1078,no,no,unknown,3,jun,199,3,-1,0,unknown,no +54,management,married,tertiary,no,284,yes,yes,telephone,15,may,65,5,-1,0,unknown,no +55,retired,married,secondary,no,493,yes,no,unknown,13,may,647,7,-1,0,unknown,no +28,technician,single,secondary,no,100,yes,no,cellular,13,may,70,5,-1,0,unknown,no +48,housemaid,single,secondary,no,1042,no,no,telephone,18,nov,129,2,-1,0,unknown,no +44,management,married,tertiary,no,3665,no,no,cellular,17,mar,325,1,-1,0,unknown,no +47,technician,married,secondary,no,-9,no,no,cellular,14,aug,457,2,-1,0,unknown,no +43,blue-collar,married,secondary,no,576,yes,yes,unknown,13,may,148,1,-1,0,unknown,no +53,housemaid,married,primary,yes,945,no,no,cellular,29,jan,82,2,-1,0,unknown,no +42,blue-collar,married,secondary,no,108,yes,no,telephone,31,jul,51,21,-1,0,unknown,no +39,management,single,tertiary,no,93,yes,yes,cellular,13,may,196,2,331,3,failure,no +37,blue-collar,married,secondary,no,-97,yes,no,unknown,5,jun,135,2,-1,0,unknown,no +58,management,married,tertiary,no,3768,yes,no,unknown,18,jun,316,1,-1,0,unknown,no +31,services,single,secondary,no,8,no,no,cellular,7,jul,340,3,-1,0,unknown,no +40,technician,married,secondary,no,66,yes,no,unknown,12,may,29,8,-1,0,unknown,no +38,services,married,secondary,no,0,no,yes,cellular,16,jul,1473,6,-1,0,unknown,no +46,admin.,divorced,secondary,no,-637,yes,no,cellular,17,nov,153,1,-1,0,unknown,no +31,technician,married,secondary,no,0,yes,yes,cellular,28,jan,71,1,223,9,other,no +32,management,married,tertiary,no,26,no,no,cellular,22,aug,222,6,-1,0,unknown,no +46,entrepreneur,married,tertiary,no,4726,yes,no,cellular,8,apr,405,1,-1,0,unknown,no +25,blue-collar,married,secondary,no,1782,yes,no,unknown,19,jun,549,1,-1,0,unknown,no +28,blue-collar,single,secondary,no,3430,yes,no,unknown,6,jun,72,6,-1,0,unknown,no +40,blue-collar,married,primary,no,332,yes,no,cellular,12,may,339,2,369,3,failure,no +31,admin.,single,secondary,no,554,yes,no,cellular,5,feb,94,1,-1,0,unknown,no +39,management,married,secondary,no,0,yes,no,cellular,24,jul,21,21,-1,0,unknown,no +36,admin.,married,secondary,no,542,yes,no,unknown,18,jun,604,6,-1,0,unknown,no +37,services,married,secondary,no,393,yes,yes,cellular,13,may,95,1,357,1,failure,no +48,blue-collar,married,primary,no,134,yes,no,unknown,28,may,315,2,-1,0,unknown,no +34,technician,married,tertiary,no,178,yes,no,cellular,18,nov,85,1,-1,0,unknown,no +24,student,single,primary,no,0,no,no,unknown,5,jun,25,26,-1,0,unknown,no +33,management,single,tertiary,no,23,no,no,cellular,20,aug,216,3,-1,0,unknown,no +54,technician,married,secondary,no,0,no,no,telephone,16,nov,986,1,94,8,failure,no +56,admin.,married,primary,no,202,yes,no,unknown,9,may,178,2,-1,0,unknown,no +41,management,divorced,tertiary,no,647,yes,no,unknown,16,may,270,1,-1,0,unknown,no +46,blue-collar,married,primary,no,143,yes,no,unknown,7,may,279,1,-1,0,unknown,no +27,services,single,secondary,no,1928,no,yes,cellular,15,jul,513,5,-1,0,unknown,no +32,admin.,single,secondary,no,1630,yes,no,cellular,30,jan,122,1,-1,0,unknown,no +40,retired,married,secondary,no,102,no,no,cellular,6,may,168,1,-1,0,unknown,no +38,blue-collar,divorced,primary,no,0,no,no,unknown,12,jun,49,2,-1,0,unknown,no +36,blue-collar,married,secondary,no,1790,yes,no,cellular,16,apr,386,2,-1,0,unknown,no +33,management,single,tertiary,no,0,no,no,unknown,27,may,277,1,-1,0,unknown,no +31,management,single,tertiary,no,1675,no,no,cellular,2,sep,114,2,363,1,failure,no +34,blue-collar,married,secondary,yes,-745,yes,yes,cellular,11,jul,131,2,-1,0,unknown,no +34,self-employed,married,secondary,no,-56,yes,no,unknown,19,may,248,3,-1,0,unknown,no +45,admin.,married,secondary,no,0,no,no,cellular,14,aug,113,2,-1,0,unknown,no +52,blue-collar,married,primary,no,2396,yes,no,cellular,15,may,48,7,-1,0,unknown,no +37,services,single,tertiary,no,223,yes,no,unknown,28,may,25,1,-1,0,unknown,no +30,blue-collar,married,primary,no,5956,yes,yes,cellular,20,nov,405,1,139,1,failure,no +35,technician,single,tertiary,no,122,no,no,cellular,20,apr,49,5,328,5,failure,no +31,technician,single,secondary,no,4888,yes,no,telephone,5,may,475,4,166,2,failure,no +47,housemaid,married,primary,no,183,no,no,cellular,13,aug,144,1,-1,0,unknown,no +32,entrepreneur,married,tertiary,no,0,yes,yes,cellular,18,nov,95,1,-1,0,unknown,no +32,technician,divorced,secondary,no,-262,yes,no,telephone,28,aug,85,24,-1,0,unknown,no +39,blue-collar,single,secondary,no,169,yes,no,unknown,9,may,38,1,-1,0,unknown,no +31,blue-collar,married,secondary,no,3364,yes,no,cellular,20,nov,290,1,-1,0,unknown,no +31,technician,married,tertiary,no,15,no,no,unknown,2,jun,389,1,-1,0,unknown,no +44,management,married,tertiary,no,126,yes,no,unknown,13,may,92,1,-1,0,unknown,no +40,entrepreneur,married,tertiary,no,1953,yes,no,unknown,6,jun,112,5,-1,0,unknown,no +77,retired,married,primary,no,1385,no,no,telephone,8,sep,160,4,-1,0,unknown,no +34,blue-collar,married,secondary,no,261,yes,no,cellular,3,feb,88,5,251,3,failure,no +48,technician,married,secondary,no,178,yes,no,unknown,17,jun,320,4,-1,0,unknown,no +31,technician,single,secondary,no,1819,yes,no,unknown,15,may,226,2,-1,0,unknown,no +31,management,single,tertiary,no,0,no,no,cellular,19,aug,155,4,-1,0,unknown,no +32,blue-collar,single,secondary,no,6337,yes,no,cellular,19,nov,126,2,-1,0,unknown,no +42,admin.,married,secondary,no,214,yes,no,unknown,28,may,21,24,-1,0,unknown,no +35,management,single,tertiary,no,0,no,no,cellular,25,aug,81,6,-1,0,unknown,no +57,entrepreneur,married,primary,no,1153,yes,yes,unknown,9,jun,238,6,-1,0,unknown,no +56,retired,married,secondary,no,415,no,no,cellular,22,aug,158,2,-1,0,unknown,no +34,management,married,tertiary,no,101,no,no,cellular,8,aug,472,2,-1,0,unknown,no +52,technician,married,secondary,no,1490,no,yes,unknown,17,jun,420,4,-1,0,unknown,no +31,admin.,single,secondary,no,779,yes,yes,cellular,3,apr,219,2,-1,0,unknown,no +42,technician,single,secondary,no,2036,yes,no,cellular,19,nov,259,2,-1,0,unknown,no +46,blue-collar,married,primary,no,333,yes,no,cellular,31,jul,284,4,-1,0,unknown,no +32,technician,married,secondary,no,963,no,no,cellular,28,aug,15,13,-1,0,unknown,no +47,blue-collar,married,secondary,no,4709,no,no,cellular,22,aug,78,4,-1,0,unknown,no +46,blue-collar,divorced,secondary,no,1074,yes,no,cellular,14,may,277,2,-1,0,unknown,no +41,admin.,single,secondary,no,90,yes,no,cellular,15,may,77,2,347,4,failure,no +42,admin.,single,secondary,no,243,yes,no,unknown,14,may,46,5,-1,0,unknown,no +31,self-employed,married,tertiary,no,414,no,no,cellular,14,aug,169,5,-1,0,unknown,no +47,admin.,single,tertiary,no,0,no,no,cellular,29,jan,137,1,-1,0,unknown,no +60,retired,married,tertiary,no,2196,no,no,cellular,15,jun,318,3,-1,0,unknown,no +35,entrepreneur,single,tertiary,no,1416,yes,no,cellular,6,may,100,1,169,12,other,no +46,services,divorced,secondary,no,281,yes,yes,cellular,6,may,267,1,-1,0,unknown,no +40,services,married,secondary,no,518,no,no,telephone,17,jul,84,1,-1,0,unknown,no +48,unknown,married,unknown,no,3,no,no,cellular,19,aug,104,2,-1,0,unknown,no +52,blue-collar,married,primary,no,36,no,no,cellular,13,aug,109,2,-1,0,unknown,no +50,blue-collar,married,primary,no,9301,yes,no,cellular,7,jul,136,4,-1,0,unknown,no +34,technician,married,secondary,no,883,no,no,telephone,3,feb,166,2,173,3,failure,no +34,admin.,married,tertiary,no,21,no,yes,cellular,2,jun,269,1,92,2,failure,no +44,management,married,tertiary,no,3091,yes,no,unknown,17,jun,331,4,-1,0,unknown,no +44,blue-collar,married,primary,no,2791,no,no,unknown,18,jun,335,1,-1,0,unknown,no +28,services,single,secondary,no,217,yes,no,cellular,9,feb,379,3,-1,0,unknown,no +28,self-employed,single,tertiary,no,1579,no,no,cellular,14,oct,122,3,-1,0,unknown,no +29,management,married,secondary,no,0,yes,no,unknown,2,jun,85,4,-1,0,unknown,no +29,student,single,secondary,no,314,no,no,cellular,13,aug,485,3,105,1,success,no +55,management,married,tertiary,no,655,no,no,cellular,28,jul,167,6,-1,0,unknown,no +31,admin.,married,secondary,no,212,yes,no,cellular,18,jul,191,3,-1,0,unknown,no +31,admin.,single,secondary,no,523,no,yes,cellular,2,feb,323,1,109,5,failure,no +32,management,single,tertiary,no,111,yes,no,unknown,8,may,162,2,-1,0,unknown,no +31,technician,single,tertiary,no,1166,yes,no,unknown,3,jun,207,1,-1,0,unknown,no +47,housemaid,married,secondary,no,582,no,no,cellular,13,aug,73,1,-1,0,unknown,no +34,technician,single,secondary,no,513,yes,no,cellular,5,may,165,3,169,5,other,no +53,management,married,tertiary,no,75,no,no,cellular,20,aug,216,2,-1,0,unknown,no +29,admin.,single,secondary,no,1992,no,no,cellular,12,apr,119,2,-1,0,unknown,no +50,management,married,secondary,no,2910,no,no,telephone,19,nov,433,1,113,1,failure,no +49,services,married,secondary,no,66,yes,yes,cellular,21,nov,59,4,-1,0,unknown,no +32,technician,married,secondary,no,599,no,no,cellular,19,nov,79,1,-1,0,unknown,no +42,technician,married,secondary,no,89,yes,no,cellular,5,may,159,1,-1,0,unknown,no +37,admin.,single,secondary,no,796,yes,no,telephone,29,jan,143,3,-1,0,unknown,no +36,technician,married,tertiary,no,571,yes,yes,cellular,31,jul,46,3,-1,0,unknown,no +33,blue-collar,married,secondary,no,215,no,no,cellular,15,apr,166,1,-1,0,unknown,no +36,blue-collar,married,secondary,no,1088,yes,no,cellular,13,may,77,2,345,2,failure,no +30,services,married,secondary,no,271,yes,no,unknown,15,may,365,1,-1,0,unknown,no +57,self-employed,married,secondary,no,11494,no,no,cellular,19,nov,198,1,-1,0,unknown,no +37,admin.,married,tertiary,no,2741,no,no,unknown,16,jun,204,4,-1,0,unknown,no +25,services,divorced,secondary,no,1694,no,no,cellular,7,jul,159,2,-1,0,unknown,no +70,retired,divorced,primary,no,383,no,no,cellular,28,apr,50,2,-1,0,unknown,no +41,management,married,tertiary,no,298,no,no,cellular,4,may,63,3,272,1,other,no +26,management,single,tertiary,no,155,yes,no,cellular,27,may,74,4,43,5,other,no +53,entrepreneur,married,primary,no,694,yes,no,unknown,14,may,157,1,-1,0,unknown,no +55,management,married,unknown,no,179,no,no,unknown,19,jun,97,1,-1,0,unknown,no +23,technician,single,secondary,no,356,yes,no,cellular,18,may,224,2,356,2,failure,no +45,management,married,tertiary,no,0,yes,no,cellular,5,may,469,2,342,1,failure,no +34,self-employed,married,secondary,no,179,yes,yes,cellular,24,jul,137,4,-1,0,unknown,no +35,management,married,tertiary,no,244,yes,no,cellular,19,nov,138,1,-1,0,unknown,no +30,management,divorced,tertiary,no,46,no,no,cellular,13,aug,382,3,-1,0,unknown,no +36,admin.,divorced,secondary,no,246,yes,no,unknown,16,may,206,2,-1,0,unknown,no +48,self-employed,married,tertiary,no,7,yes,no,unknown,5,may,286,1,-1,0,unknown,no +67,retired,divorced,primary,no,1746,no,no,cellular,5,aug,134,1,-1,0,unknown,no +35,technician,single,tertiary,no,992,yes,no,cellular,26,aug,79,1,114,3,failure,no +38,housemaid,divorced,tertiary,no,4312,no,no,cellular,15,may,67,4,175,6,failure,no +44,blue-collar,married,primary,no,103,yes,no,cellular,12,may,79,1,329,2,failure,no +54,blue-collar,married,secondary,no,506,yes,no,cellular,18,nov,172,2,104,2,failure,no +42,management,divorced,tertiary,no,461,yes,no,unknown,3,jun,72,1,-1,0,unknown,no +36,technician,single,tertiary,no,268,no,no,cellular,29,aug,54,12,-1,0,unknown,no +26,technician,single,secondary,yes,-454,no,yes,cellular,18,jul,652,2,-1,0,unknown,no +35,management,married,tertiary,no,365,no,no,cellular,21,nov,168,2,-1,0,unknown,no +33,technician,divorced,secondary,no,2,yes,no,cellular,7,may,600,2,330,17,failure,no +58,services,married,secondary,no,1667,yes,yes,unknown,6,may,85,1,-1,0,unknown,no +21,blue-collar,single,secondary,no,2265,no,no,cellular,27,may,156,4,99,2,success,no +34,blue-collar,married,secondary,no,4622,yes,yes,unknown,20,may,217,1,-1,0,unknown,no +38,blue-collar,single,secondary,no,0,no,no,cellular,13,aug,255,2,105,1,failure,no +41,technician,married,secondary,no,188,no,yes,telephone,31,jul,15,25,-1,0,unknown,no +36,management,single,secondary,no,0,no,no,cellular,13,aug,333,5,-1,0,unknown,no +38,self-employed,single,secondary,no,592,no,no,cellular,6,may,275,1,-1,0,unknown,no +25,technician,married,secondary,no,-276,yes,no,unknown,4,jun,105,1,-1,0,unknown,no +34,technician,married,secondary,no,1254,no,no,cellular,6,may,77,3,-1,0,unknown,no +34,technician,married,secondary,no,652,yes,yes,cellular,18,jul,50,4,-1,0,unknown,no +45,blue-collar,married,secondary,no,192,yes,no,cellular,13,may,154,5,176,1,other,no +30,technician,single,secondary,no,148,yes,yes,cellular,15,may,115,5,-1,0,unknown,no +42,technician,married,secondary,no,1812,yes,no,cellular,31,jul,84,2,-1,0,unknown,no +50,unemployed,married,secondary,no,3478,yes,no,unknown,13,may,342,3,-1,0,unknown,no +33,technician,married,secondary,no,264,no,no,cellular,28,aug,180,4,-1,0,unknown,no +35,management,married,tertiary,no,71,yes,no,cellular,30,apr,510,2,-1,0,unknown,no +59,blue-collar,married,secondary,no,1376,no,yes,unknown,9,may,61,4,-1,0,unknown,no +38,blue-collar,married,primary,no,668,no,no,unknown,8,may,238,1,-1,0,unknown,no +33,services,married,secondary,no,703,no,no,cellular,18,nov,160,2,-1,0,unknown,no +45,technician,divorced,unknown,yes,-25,no,yes,unknown,3,jul,158,3,-1,0,unknown,no +37,unemployed,single,secondary,no,48,no,no,cellular,31,jul,40,10,-1,0,unknown,no +35,technician,single,tertiary,no,2453,yes,no,cellular,13,aug,119,2,-1,0,unknown,no +41,blue-collar,single,primary,no,0,yes,no,unknown,16,may,522,5,-1,0,unknown,no +33,management,married,tertiary,no,133,yes,no,unknown,26,may,308,4,-1,0,unknown,no +30,management,single,tertiary,no,277,yes,no,cellular,8,may,166,1,42,1,other,no +49,housemaid,married,primary,no,78,no,no,telephone,10,jul,139,1,-1,0,unknown,no +39,management,married,secondary,no,517,yes,no,cellular,18,nov,387,3,196,2,failure,no +44,entrepreneur,divorced,secondary,no,1,no,no,cellular,31,jul,388,4,-1,0,unknown,no +38,blue-collar,married,primary,no,7944,no,no,unknown,17,jun,116,3,-1,0,unknown,no +27,admin.,single,secondary,no,3,yes,no,cellular,8,may,346,2,-1,0,unknown,no +45,management,married,tertiary,no,623,no,no,cellular,9,sep,405,3,-1,0,unknown,no +40,management,divorced,tertiary,no,290,yes,no,unknown,27,may,184,1,-1,0,unknown,no +53,services,married,primary,no,8918,yes,no,telephone,23,jul,173,2,-1,0,unknown,no +32,management,single,tertiary,no,41,yes,no,cellular,7,may,449,1,338,1,other,no +34,blue-collar,married,secondary,no,199,yes,no,unknown,8,may,627,3,-1,0,unknown,no +29,blue-collar,married,secondary,no,100,yes,yes,cellular,6,may,152,4,344,2,failure,no +34,services,single,secondary,no,313,yes,no,cellular,14,jul,634,3,-1,0,unknown,no +40,admin.,married,secondary,no,419,yes,yes,cellular,12,may,92,1,369,1,failure,no +44,technician,married,secondary,no,0,yes,no,unknown,30,may,243,3,-1,0,unknown,no +36,management,single,tertiary,no,0,no,yes,cellular,18,nov,300,1,96,4,failure,no +39,technician,married,tertiary,no,437,no,no,telephone,27,may,186,2,-1,0,unknown,no +58,blue-collar,married,primary,no,1357,yes,no,unknown,13,may,150,2,-1,0,unknown,no +37,technician,married,secondary,no,1610,no,no,unknown,16,jun,140,2,-1,0,unknown,no +31,management,married,tertiary,no,0,yes,no,cellular,4,may,108,2,167,1,failure,no +46,blue-collar,divorced,secondary,no,709,yes,no,cellular,18,jul,100,4,-1,0,unknown,no +26,student,single,tertiary,no,10086,no,no,cellular,8,jul,475,3,78,2,success,no +37,services,married,secondary,no,0,yes,no,cellular,14,jul,330,4,-1,0,unknown,no +39,services,married,secondary,no,-311,yes,no,cellular,6,may,55,2,345,2,other,no +36,management,married,tertiary,no,9324,yes,no,cellular,30,mar,138,8,-1,0,unknown,no +29,management,married,tertiary,no,7832,yes,no,unknown,27,may,304,2,-1,0,unknown,no +47,technician,divorced,secondary,no,191,no,no,cellular,19,aug,228,5,-1,0,unknown,no +47,management,married,tertiary,no,6637,yes,no,cellular,17,apr,174,2,-1,0,unknown,no +44,services,single,secondary,no,0,yes,no,unknown,14,may,198,1,-1,0,unknown,no +24,admin.,single,secondary,no,172,no,no,cellular,3,feb,114,1,-1,0,unknown,no +30,blue-collar,married,secondary,no,1131,yes,yes,cellular,18,nov,189,1,144,5,failure,no +55,management,single,tertiary,no,797,no,no,cellular,29,jul,24,2,-1,0,unknown,no +41,admin.,married,secondary,no,120,no,yes,cellular,8,jul,489,1,-1,0,unknown,no +57,admin.,married,primary,no,215,yes,yes,cellular,17,jul,210,2,-1,0,unknown,no +34,blue-collar,married,primary,no,425,yes,no,cellular,16,jul,1389,7,-1,0,unknown,no +31,admin.,single,secondary,no,476,no,no,cellular,9,feb,284,2,-1,0,unknown,no +56,entrepreneur,divorced,primary,no,29,no,no,cellular,29,jan,52,2,227,1,failure,no +53,management,married,unknown,no,527,yes,no,cellular,23,jul,71,3,-1,0,unknown,no +33,management,single,tertiary,no,0,no,no,cellular,27,aug,191,4,-1,0,unknown,no +67,admin.,married,primary,no,1093,no,no,telephone,8,jul,64,3,-1,0,unknown,no +53,housemaid,married,primary,no,70,no,no,cellular,21,aug,77,8,-1,0,unknown,no +41,housemaid,married,primary,no,39,no,no,cellular,21,aug,299,4,-1,0,unknown,no +46,housemaid,married,primary,no,296,yes,no,unknown,20,jun,205,4,-1,0,unknown,no +58,admin.,married,secondary,no,1464,yes,yes,unknown,5,jun,53,29,-1,0,unknown,no +39,blue-collar,married,primary,no,2226,yes,no,unknown,6,may,158,1,-1,0,unknown,no +30,technician,single,secondary,no,1286,no,no,telephone,28,aug,44,12,-1,0,unknown,no +37,blue-collar,married,primary,no,-738,yes,no,cellular,5,may,303,1,-1,0,unknown,no +45,management,married,tertiary,no,3643,no,no,cellular,21,nov,162,1,-1,0,unknown,no +50,housemaid,married,tertiary,no,5260,yes,no,cellular,24,jul,51,2,-1,0,unknown,no +30,technician,single,secondary,no,3096,yes,no,cellular,11,aug,272,4,-1,0,unknown,no +29,blue-collar,married,secondary,no,-312,yes,yes,cellular,14,may,130,2,-1,0,unknown,no +32,self-employed,married,primary,no,286,yes,no,cellular,6,aug,175,1,-1,0,unknown,no +37,management,married,tertiary,no,89,yes,no,unknown,19,may,162,10,-1,0,unknown,no +26,services,single,secondary,no,-72,yes,no,unknown,30,jun,82,9,-1,0,unknown,no +51,management,single,tertiary,no,4305,yes,no,cellular,4,may,126,1,-1,0,unknown,no +38,admin.,married,primary,no,1487,no,no,unknown,9,jun,332,2,-1,0,unknown,no +72,retired,divorced,primary,no,0,no,no,telephone,28,aug,359,1,-1,0,unknown,no +42,technician,divorced,secondary,no,-78,yes,yes,cellular,29,jul,10,23,-1,0,unknown,no +57,blue-collar,single,primary,no,3495,no,yes,cellular,19,nov,362,3,-1,0,unknown,no +22,student,single,unknown,no,3317,no,no,cellular,10,aug,148,1,-1,0,unknown,no +46,management,married,tertiary,no,1906,no,no,cellular,28,aug,44,6,-1,0,unknown,no +32,unemployed,married,secondary,no,2996,yes,no,unknown,19,may,68,1,-1,0,unknown,no +42,technician,married,tertiary,no,446,no,no,cellular,6,aug,286,3,-1,0,unknown,no +37,blue-collar,married,secondary,no,1590,no,no,unknown,12,jun,305,2,-1,0,unknown,no +27,self-employed,single,tertiary,no,5214,yes,no,unknown,28,may,94,1,-1,0,unknown,no +30,management,married,tertiary,no,134,yes,no,unknown,19,may,70,1,-1,0,unknown,no +34,management,married,tertiary,no,8,no,no,cellular,25,aug,169,4,-1,0,unknown,no +56,management,married,tertiary,no,3120,yes,no,cellular,7,aug,666,2,-1,0,unknown,no +54,services,married,secondary,no,171,no,yes,cellular,14,jul,673,8,-1,0,unknown,no +57,management,married,secondary,no,39,yes,no,cellular,15,may,114,2,-1,0,unknown,no +56,management,married,tertiary,no,171,no,yes,telephone,17,jul,610,2,-1,0,unknown,no +41,services,married,secondary,no,-140,no,yes,unknown,6,jun,190,1,-1,0,unknown,no +32,management,single,tertiary,no,728,yes,no,unknown,21,may,125,1,-1,0,unknown,no +34,services,married,secondary,no,1637,yes,no,cellular,21,nov,107,4,-1,0,unknown,no +30,services,single,secondary,no,-143,yes,no,cellular,15,may,85,1,-1,0,unknown,no +42,technician,divorced,tertiary,no,802,no,no,telephone,28,jan,119,2,-1,0,unknown,no +40,housemaid,married,tertiary,no,795,yes,no,unknown,29,may,725,3,-1,0,unknown,no +36,technician,single,secondary,no,265,yes,yes,unknown,5,may,348,1,-1,0,unknown,no +42,services,married,primary,no,2567,yes,no,unknown,19,may,401,2,-1,0,unknown,no +34,management,married,tertiary,no,3402,no,no,cellular,3,jun,88,2,-1,0,unknown,no +30,services,divorced,secondary,no,1336,yes,no,cellular,18,may,13,3,355,5,failure,no +35,blue-collar,married,secondary,no,306,no,no,unknown,20,jun,12,8,-1,0,unknown,no +44,blue-collar,single,primary,no,10984,no,no,unknown,20,jun,258,18,-1,0,unknown,no +46,admin.,married,secondary,no,526,no,yes,cellular,31,jul,251,3,-1,0,unknown,no +38,services,married,tertiary,no,563,yes,no,cellular,7,may,251,2,-1,0,unknown,no +32,services,single,tertiary,no,0,no,no,cellular,28,aug,23,12,-1,0,unknown,no +34,management,married,tertiary,no,0,no,no,cellular,29,aug,120,2,-1,0,unknown,no +53,services,divorced,primary,no,3107,no,no,unknown,5,jun,152,1,-1,0,unknown,no +38,services,married,primary,no,0,no,no,cellular,28,jul,33,3,-1,0,unknown,no +54,management,married,tertiary,no,1146,yes,no,cellular,12,aug,205,2,-1,0,unknown,no +32,blue-collar,single,secondary,no,5252,yes,no,cellular,20,nov,232,2,183,2,failure,no +33,management,married,tertiary,no,1195,yes,no,telephone,13,may,355,4,-1,0,unknown,no +46,technician,married,secondary,no,488,no,no,unknown,5,jun,92,1,-1,0,unknown,no +49,management,married,tertiary,no,1887,no,no,cellular,18,nov,244,3,-1,0,unknown,no +37,management,married,tertiary,no,49,no,yes,cellular,22,aug,132,1,-1,0,unknown,no +40,blue-collar,married,secondary,no,280,yes,no,cellular,8,may,435,2,340,3,failure,no +35,blue-collar,married,secondary,no,-461,no,no,unknown,23,may,339,1,-1,0,unknown,no +26,services,divorced,primary,no,633,yes,no,unknown,27,may,326,2,-1,0,unknown,no +27,blue-collar,single,primary,no,3955,yes,no,unknown,28,may,205,3,-1,0,unknown,no +39,management,married,tertiary,no,-233,yes,no,cellular,19,nov,249,1,-1,0,unknown,no +31,services,single,tertiary,no,1626,no,no,unknown,31,jul,15,1,-1,0,unknown,no +53,blue-collar,married,secondary,no,1103,yes,yes,cellular,4,feb,101,2,250,4,failure,no +50,entrepreneur,divorced,tertiary,no,223,no,no,cellular,7,jul,264,5,-1,0,unknown,no +36,blue-collar,single,secondary,no,-175,yes,no,unknown,15,may,180,2,-1,0,unknown,no +46,blue-collar,married,secondary,no,-3,yes,no,unknown,9,may,92,2,-1,0,unknown,no +36,services,married,tertiary,no,0,yes,no,cellular,8,may,52,1,-1,0,unknown,no +38,housemaid,married,primary,no,3918,no,no,cellular,27,aug,101,3,-1,0,unknown,no +44,management,married,tertiary,no,284,yes,yes,cellular,10,jul,109,5,-1,0,unknown,no +56,retired,married,secondary,no,4577,no,no,cellular,29,aug,133,2,-1,0,unknown,no +37,management,single,tertiary,no,876,yes,no,cellular,15,apr,140,4,327,2,failure,no +51,blue-collar,married,primary,no,3754,no,yes,cellular,13,aug,202,3,-1,0,unknown,no +41,technician,married,secondary,no,128,yes,no,cellular,27,aug,100,2,-1,0,unknown,no +55,technician,divorced,tertiary,no,0,yes,no,unknown,30,may,234,1,-1,0,unknown,no +38,management,divorced,tertiary,no,547,yes,no,unknown,14,may,137,4,-1,0,unknown,no +21,management,single,tertiary,no,243,no,yes,cellular,17,jun,181,2,-1,0,unknown,no +40,entrepreneur,married,tertiary,no,3571,no,no,unknown,9,jun,222,3,-1,0,unknown,no +39,technician,married,secondary,no,130,no,no,cellular,8,jul,202,2,-1,0,unknown,no +30,blue-collar,married,secondary,no,-529,yes,no,cellular,12,may,416,4,-1,0,unknown,no +28,services,single,secondary,no,1636,yes,no,cellular,18,may,97,1,355,2,failure,no +58,services,married,secondary,no,12180,no,no,unknown,16,jun,121,5,-1,0,unknown,no +50,unemployed,married,secondary,no,297,yes,no,cellular,31,jul,29,10,-1,0,unknown,no +32,blue-collar,single,secondary,no,413,yes,no,cellular,19,nov,270,1,-1,0,unknown,no +44,technician,single,secondary,no,285,yes,no,cellular,12,may,373,3,-1,0,unknown,no +47,technician,married,secondary,no,19,yes,no,unknown,6,may,105,2,-1,0,unknown,no +45,unknown,married,primary,no,44,no,no,unknown,11,jun,81,1,-1,0,unknown,no +48,services,divorced,secondary,no,62,yes,no,cellular,8,may,561,1,-1,0,unknown,no +60,management,married,tertiary,no,79,no,no,unknown,11,jun,48,3,-1,0,unknown,no +45,blue-collar,married,secondary,no,226,no,no,telephone,4,feb,170,2,212,2,failure,no +31,technician,single,secondary,no,2388,no,no,cellular,5,aug,123,1,-1,0,unknown,no +30,admin.,single,secondary,no,98,yes,no,cellular,23,jul,100,5,-1,0,unknown,no +52,management,married,primary,no,48,no,no,unknown,9,jun,135,2,-1,0,unknown,no +31,blue-collar,married,secondary,no,255,yes,yes,cellular,18,may,295,1,-1,0,unknown,no +53,blue-collar,married,secondary,no,2,yes,no,unknown,16,may,851,2,-1,0,unknown,no +47,blue-collar,married,primary,no,643,yes,no,unknown,20,jun,18,6,-1,0,unknown,no +42,technician,married,tertiary,no,13410,no,yes,cellular,14,aug,149,2,-1,0,unknown,no +57,admin.,married,unknown,no,0,yes,no,unknown,15,may,215,2,-1,0,unknown,no +35,self-employed,divorced,secondary,no,3443,no,no,cellular,30,jul,409,4,-1,0,unknown,no +47,unemployed,married,primary,no,2946,no,no,unknown,5,jun,60,1,-1,0,unknown,no +37,management,married,tertiary,no,21,yes,no,unknown,29,may,52,2,-1,0,unknown,no +55,unemployed,married,primary,no,1212,no,no,cellular,31,aug,241,1,92,1,failure,no +58,management,married,tertiary,no,2183,yes,no,cellular,22,jul,209,1,-1,0,unknown,no +33,entrepreneur,married,secondary,no,135,yes,no,cellular,17,apr,114,1,345,2,failure,no +29,blue-collar,married,secondary,no,5903,yes,no,unknown,8,may,194,1,-1,0,unknown,no +41,unemployed,divorced,secondary,no,271,yes,no,unknown,19,jun,196,2,-1,0,unknown,no +53,retired,married,secondary,no,303,yes,no,unknown,6,may,593,2,-1,0,unknown,no +41,entrepreneur,single,primary,no,7264,no,yes,unknown,1,jul,125,3,-1,0,unknown,no +42,unemployed,married,tertiary,no,0,no,no,cellular,8,oct,113,1,-1,0,unknown,no +52,admin.,married,primary,no,204,no,no,cellular,19,aug,123,2,-1,0,unknown,no +42,services,divorced,secondary,no,444,no,no,cellular,21,nov,171,1,-1,0,unknown,no +33,services,single,secondary,no,-27,yes,no,unknown,26,may,165,1,-1,0,unknown,no +44,blue-collar,single,primary,no,287,no,no,cellular,29,jan,301,1,-1,0,unknown,no +53,management,married,tertiary,no,800,no,no,cellular,18,nov,90,1,-1,0,unknown,no +35,technician,single,secondary,no,4645,yes,no,cellular,11,jan,502,3,270,40,other,no +47,entrepreneur,married,unknown,no,1481,yes,no,cellular,6,may,64,2,364,3,failure,no +59,admin.,married,secondary,no,1575,yes,no,cellular,12,may,301,3,263,11,success,no +31,management,single,tertiary,no,5691,yes,no,cellular,21,nov,37,2,123,1,failure,no +40,management,married,tertiary,no,294,yes,no,cellular,23,jul,97,5,-1,0,unknown,no +55,management,married,tertiary,no,154,no,no,telephone,11,may,70,2,367,3,failure,no +41,self-employed,single,tertiary,no,3950,yes,no,unknown,30,may,96,2,-1,0,unknown,no +46,blue-collar,married,secondary,no,624,yes,no,cellular,16,apr,201,1,-1,0,unknown,no +35,services,divorced,secondary,no,-504,no,no,cellular,10,jul,228,1,-1,0,unknown,no +46,technician,divorced,secondary,no,111,yes,no,cellular,19,nov,178,3,183,2,other,no +31,blue-collar,married,secondary,no,1131,yes,yes,cellular,15,apr,126,1,148,6,failure,no +49,management,married,tertiary,no,322,no,no,cellular,6,aug,72,4,-1,0,unknown,no +37,technician,married,secondary,no,0,yes,no,cellular,16,apr,657,4,149,1,other,no +41,technician,single,tertiary,no,-89,yes,no,cellular,3,feb,195,4,251,4,failure,no +42,blue-collar,married,secondary,no,3,yes,no,unknown,14,may,34,1,-1,0,unknown,no +34,technician,single,secondary,no,1313,no,no,cellular,19,apr,237,4,-1,0,unknown,no +55,technician,married,secondary,no,462,no,no,cellular,11,aug,116,2,-1,0,unknown,no +49,unemployed,married,primary,yes,11,yes,no,telephone,31,jul,166,8,-1,0,unknown,no +59,technician,married,primary,no,3163,yes,no,unknown,29,may,240,2,-1,0,unknown,no +26,technician,single,secondary,no,2,yes,yes,unknown,15,may,461,1,-1,0,unknown,no +43,self-employed,married,tertiary,no,3157,no,no,cellular,21,apr,381,2,330,17,other,no +35,management,single,tertiary,no,4348,yes,no,cellular,2,apr,1074,3,217,8,failure,no +43,management,married,tertiary,no,-391,yes,no,cellular,28,jul,193,8,-1,0,unknown,no +51,blue-collar,married,tertiary,no,7816,yes,no,unknown,12,may,76,2,-1,0,unknown,no +29,technician,single,secondary,no,5763,no,yes,cellular,5,jun,271,2,92,2,success,no +42,self-employed,married,secondary,no,240,yes,no,cellular,4,feb,183,1,189,16,other,no +73,retired,married,primary,no,508,no,no,cellular,14,jun,154,4,97,1,success,no +39,services,married,secondary,no,2,yes,no,cellular,25,jul,174,10,-1,0,unknown,no +39,management,married,tertiary,no,1654,no,yes,cellular,21,nov,151,1,-1,0,unknown,no +44,entrepreneur,married,secondary,no,860,yes,yes,cellular,6,may,96,2,295,5,failure,no +30,admin.,single,secondary,no,154,yes,no,cellular,21,nov,24,2,-1,0,unknown,no +32,admin.,married,tertiary,no,281,yes,no,unknown,6,may,226,1,-1,0,unknown,no +57,retired,married,secondary,no,427,no,no,cellular,29,jan,246,1,-1,0,unknown,no +55,blue-collar,married,secondary,no,467,no,no,cellular,25,aug,129,5,-1,0,unknown,no +24,self-employed,single,tertiary,no,91,yes,no,cellular,15,may,134,2,-1,0,unknown,no +41,services,married,secondary,no,1319,yes,no,cellular,11,may,305,1,-1,0,unknown,no +39,admin.,married,tertiary,no,259,yes,no,unknown,19,may,27,1,-1,0,unknown,no +52,self-employed,married,secondary,no,-488,yes,no,unknown,29,may,322,1,-1,0,unknown,no +28,services,single,secondary,no,60,no,yes,cellular,29,jan,248,1,-1,0,unknown,no +56,management,married,primary,no,405,no,no,cellular,21,jul,251,2,-1,0,unknown,no +33,technician,married,secondary,no,177,yes,yes,cellular,12,may,22,8,-1,0,unknown,no +41,management,married,tertiary,no,-412,yes,no,cellular,29,jan,85,1,195,5,other,no +32,management,married,tertiary,no,282,no,no,cellular,22,aug,92,2,-1,0,unknown,no +50,housemaid,married,tertiary,no,6181,no,no,unknown,17,jun,1162,2,-1,0,unknown,no +28,services,single,secondary,no,373,yes,no,cellular,18,may,115,2,-1,0,unknown,no +36,management,married,tertiary,no,-92,no,yes,cellular,18,nov,196,3,-1,0,unknown,no +36,blue-collar,married,primary,no,49,yes,no,cellular,15,may,232,2,365,5,other,no +53,housemaid,married,primary,no,0,no,no,unknown,24,jun,51,8,-1,0,unknown,no +40,admin.,married,secondary,no,-283,no,no,unknown,20,jun,253,2,-1,0,unknown,no +34,technician,single,secondary,no,1313,no,no,cellular,12,aug,176,1,21,6,failure,no +35,admin.,single,secondary,no,2452,yes,no,unknown,5,jun,91,2,-1,0,unknown,no +55,technician,married,secondary,no,517,yes,yes,unknown,19,may,61,4,-1,0,unknown,no +49,management,married,tertiary,no,350,no,no,cellular,12,aug,238,6,-1,0,unknown,no +57,retired,married,primary,no,1623,yes,yes,cellular,18,jul,246,1,-1,0,unknown,no +44,blue-collar,single,secondary,no,-435,yes,no,unknown,27,may,141,2,-1,0,unknown,no +57,retired,married,primary,no,333,no,no,unknown,22,aug,336,2,-1,0,unknown,no +36,management,married,tertiary,no,3770,yes,no,cellular,31,jul,150,4,-1,0,unknown,no +53,services,divorced,primary,no,778,yes,no,cellular,17,apr,221,2,-1,0,unknown,no +25,admin.,single,secondary,no,483,no,yes,cellular,30,apr,68,1,86,1,success,no +26,unemployed,single,tertiary,no,2170,no,no,cellular,3,feb,317,1,-1,0,unknown,no +33,management,single,tertiary,no,541,yes,yes,unknown,21,may,572,1,-1,0,unknown,no +33,admin.,married,tertiary,no,205,no,no,unknown,1,jul,156,2,-1,0,unknown,no +29,technician,single,tertiary,no,2269,yes,no,cellular,20,apr,53,1,346,1,failure,no +34,admin.,divorced,secondary,no,0,yes,no,cellular,6,may,153,1,-1,0,unknown,no +46,services,divorced,unknown,no,973,no,no,cellular,2,feb,297,1,-1,0,unknown,no +25,admin.,married,secondary,no,894,yes,no,unknown,28,may,328,1,-1,0,unknown,no +57,retired,married,primary,no,-12,no,yes,cellular,12,aug,80,8,-1,0,unknown,no +50,management,married,tertiary,no,0,no,no,cellular,30,jan,199,1,205,1,failure,no +48,blue-collar,married,primary,no,5154,yes,no,unknown,14,may,70,1,-1,0,unknown,no +32,admin.,single,secondary,no,-32,no,no,cellular,29,jan,320,1,185,5,other,no +45,blue-collar,single,primary,no,999,no,no,cellular,29,jan,182,2,-1,0,unknown,no +32,services,married,secondary,no,24,yes,yes,cellular,12,may,185,1,-1,0,unknown,no +34,management,married,tertiary,no,0,yes,no,unknown,20,may,150,1,-1,0,unknown,no +56,blue-collar,married,secondary,no,771,yes,yes,unknown,19,jun,254,1,-1,0,unknown,no +49,management,single,tertiary,no,1350,yes,yes,cellular,11,may,716,1,-1,0,unknown,no +54,admin.,married,tertiary,no,19,no,no,cellular,26,aug,131,2,-1,0,unknown,no +44,management,single,tertiary,no,709,yes,no,cellular,19,nov,54,1,-1,0,unknown,no +35,blue-collar,single,primary,no,2040,no,no,cellular,21,nov,258,1,157,4,failure,no +31,management,married,tertiary,no,303,yes,no,unknown,14,may,143,1,-1,0,unknown,no +34,management,married,secondary,no,-311,yes,no,unknown,27,may,305,2,-1,0,unknown,no +38,management,single,tertiary,no,690,yes,no,unknown,20,may,34,1,-1,0,unknown,no +56,management,married,tertiary,no,2551,yes,no,cellular,17,nov,150,2,-1,0,unknown,no +49,technician,married,secondary,no,-142,yes,yes,cellular,23,jul,73,4,-1,0,unknown,no +44,blue-collar,married,secondary,no,-448,yes,no,unknown,18,jun,149,2,-1,0,unknown,no +33,admin.,married,tertiary,no,99,yes,yes,cellular,18,nov,55,2,-1,0,unknown,no +33,technician,single,secondary,no,18,no,no,cellular,22,aug,93,2,-1,0,unknown,no +29,services,single,secondary,no,37,no,yes,cellular,17,jul,309,2,-1,0,unknown,no +34,blue-collar,married,primary,no,3868,yes,no,cellular,18,may,134,1,350,1,failure,no +57,blue-collar,divorced,primary,no,5041,yes,no,cellular,16,apr,284,1,336,1,failure,no +34,admin.,married,secondary,no,260,no,no,cellular,28,jan,50,1,-1,0,unknown,no +55,blue-collar,married,secondary,yes,67,no,no,cellular,8,jul,267,2,-1,0,unknown,no +47,technician,divorced,secondary,no,157,yes,no,cellular,25,aug,163,8,-1,0,unknown,no +48,blue-collar,married,secondary,no,1513,no,yes,cellular,17,jul,1171,1,-1,0,unknown,no +36,technician,single,secondary,no,1044,yes,no,cellular,20,aug,15,19,-1,0,unknown,no +34,blue-collar,married,secondary,no,113,yes,no,cellular,13,may,16,2,-1,0,unknown,no +43,blue-collar,married,unknown,no,245,yes,no,cellular,16,apr,829,1,-1,0,unknown,no +55,management,married,tertiary,no,505,yes,no,cellular,17,apr,58,1,316,1,other,no +58,admin.,married,secondary,no,92,yes,no,unknown,27,may,180,1,-1,0,unknown,no +62,self-employed,married,tertiary,no,3685,no,no,cellular,3,feb,181,3,-1,0,unknown,no +32,management,married,tertiary,no,1636,yes,no,cellular,18,nov,124,1,-1,0,unknown,no +35,management,married,tertiary,no,0,yes,no,cellular,5,may,310,1,-1,0,unknown,no +33,management,single,tertiary,no,349,no,no,cellular,22,aug,182,1,-1,0,unknown,no +54,technician,married,primary,no,3067,yes,no,telephone,29,jul,222,3,-1,0,unknown,no +41,blue-collar,married,secondary,no,338,yes,no,unknown,14,may,87,1,-1,0,unknown,no +58,retired,married,primary,no,282,yes,no,cellular,28,jul,40,4,-1,0,unknown,no +34,management,single,tertiary,no,1190,no,no,cellular,3,feb,18,7,-1,0,unknown,no +58,blue-collar,married,primary,no,73,no,no,unknown,17,jun,116,1,-1,0,unknown,no +30,technician,married,secondary,no,384,no,no,cellular,25,aug,73,3,-1,0,unknown,no +40,blue-collar,married,primary,no,-388,yes,no,cellular,4,may,195,3,340,1,failure,no +35,management,married,tertiary,no,354,no,yes,cellular,9,feb,117,4,12,2,other,no +37,admin.,single,secondary,no,192,yes,no,unknown,23,may,105,2,-1,0,unknown,no +32,blue-collar,single,secondary,no,70,yes,no,unknown,26,may,118,6,-1,0,unknown,no +33,services,married,secondary,no,22,yes,no,unknown,5,may,71,1,-1,0,unknown,no +48,technician,married,secondary,no,335,no,no,unknown,17,jun,214,3,-1,0,unknown,no +46,blue-collar,divorced,primary,no,2775,no,yes,cellular,8,jul,188,1,-1,0,unknown,no +35,management,single,tertiary,no,592,no,yes,unknown,14,may,192,1,-1,0,unknown,no +32,management,single,tertiary,no,1271,yes,no,unknown,20,may,51,1,-1,0,unknown,no +30,self-employed,single,tertiary,no,48,no,no,cellular,27,may,144,2,187,1,failure,no +46,technician,married,tertiary,no,0,no,no,unknown,6,jun,159,1,-1,0,unknown,no +27,student,single,tertiary,no,4869,yes,no,cellular,15,may,258,2,343,4,other,no +40,blue-collar,married,secondary,no,737,yes,no,unknown,30,may,135,2,-1,0,unknown,no +60,entrepreneur,married,primary,no,83,yes,no,cellular,17,jul,302,2,-1,0,unknown,no +28,admin.,single,tertiary,no,1104,yes,no,cellular,28,jul,73,7,-1,0,unknown,no +27,admin.,single,unknown,no,5,yes,no,cellular,17,jul,225,2,-1,0,unknown,no +31,blue-collar,single,secondary,no,23,no,no,cellular,21,nov,116,1,-1,0,unknown,no +28,blue-collar,married,secondary,no,1137,no,no,cellular,6,feb,129,4,211,3,other,no +27,blue-collar,single,secondary,no,181,no,no,unknown,13,may,147,1,-1,0,unknown,no +36,unemployed,divorced,secondary,no,8267,no,no,unknown,18,jun,321,2,-1,0,unknown,no +41,technician,married,secondary,no,871,yes,no,unknown,6,may,145,1,-1,0,unknown,no +30,services,single,secondary,no,1824,yes,no,cellular,21,jul,153,2,-1,0,unknown,no +52,management,single,tertiary,no,4,no,yes,cellular,28,jul,30,9,-1,0,unknown,no +35,admin.,married,secondary,no,421,yes,no,cellular,18,nov,350,1,-1,0,unknown,no +37,housemaid,single,tertiary,no,561,no,no,cellular,18,nov,188,1,165,2,failure,no +37,services,married,secondary,no,1498,yes,no,cellular,20,apr,107,1,-1,0,unknown,no +48,management,divorced,tertiary,no,657,no,yes,cellular,29,jan,251,2,-1,0,unknown,no +38,unemployed,married,secondary,no,0,no,no,cellular,24,jul,168,2,-1,0,unknown,no +44,technician,divorced,tertiary,no,9192,yes,no,unknown,6,jun,59,3,-1,0,unknown,no +43,technician,married,secondary,no,7876,yes,no,cellular,11,aug,209,2,-1,0,unknown,no +35,blue-collar,single,secondary,no,0,yes,no,cellular,9,feb,226,3,280,1,other,no +40,technician,married,secondary,no,192,no,no,cellular,7,aug,266,2,-1,0,unknown,no +42,blue-collar,married,primary,no,803,yes,no,unknown,7,may,171,2,-1,0,unknown,no +51,blue-collar,married,primary,no,1694,no,no,cellular,13,aug,186,2,-1,0,unknown,no +46,management,married,secondary,no,5559,no,no,unknown,17,jun,483,1,-1,0,unknown,no +40,blue-collar,divorced,primary,no,737,yes,yes,unknown,12,may,102,1,-1,0,unknown,no +51,housemaid,married,unknown,no,174,no,no,telephone,29,jul,308,3,-1,0,unknown,no +24,self-employed,single,tertiary,no,931,yes,no,unknown,28,may,200,4,-1,0,unknown,no +31,technician,married,tertiary,no,95,no,no,cellular,21,nov,48,6,-1,0,unknown,no +41,entrepreneur,married,primary,no,0,no,no,unknown,16,jun,630,2,-1,0,unknown,no +34,technician,single,secondary,no,4367,no,no,cellular,13,aug,121,2,-1,0,unknown,no +31,blue-collar,married,primary,no,68,yes,no,unknown,8,may,226,1,-1,0,unknown,no +31,management,single,tertiary,no,1308,no,no,cellular,22,aug,323,3,-1,0,unknown,no +52,retired,divorced,primary,no,353,no,no,cellular,31,jul,395,4,-1,0,unknown,no +38,blue-collar,married,secondary,no,-40,yes,no,unknown,23,may,227,1,-1,0,unknown,no +31,blue-collar,married,secondary,no,0,yes,no,unknown,9,may,133,1,-1,0,unknown,no +34,admin.,married,secondary,no,-312,yes,no,unknown,9,may,232,1,-1,0,unknown,no +22,student,single,unknown,no,549,no,no,cellular,2,sep,154,1,-1,0,unknown,no +60,services,married,secondary,no,8837,yes,no,unknown,16,may,144,4,-1,0,unknown,no +28,blue-collar,married,secondary,no,1020,yes,no,unknown,28,may,251,1,-1,0,unknown,no +31,admin.,married,secondary,no,3540,yes,no,cellular,21,nov,441,1,-1,0,unknown,no +32,management,married,tertiary,no,663,no,yes,cellular,22,jul,62,3,-1,0,unknown,no +77,retired,married,primary,no,2590,no,no,telephone,15,feb,112,5,94,15,success,no +70,retired,married,primary,no,4982,no,no,cellular,4,may,794,2,-1,0,unknown,no +29,services,married,tertiary,no,6,yes,no,unknown,28,may,143,2,-1,0,unknown,no +34,management,married,tertiary,no,118,no,yes,telephone,17,jul,171,3,-1,0,unknown,no +38,blue-collar,divorced,primary,no,-258,yes,no,cellular,14,may,134,2,370,4,other,no +45,blue-collar,married,secondary,no,-221,yes,yes,unknown,3,jun,170,1,-1,0,unknown,no +40,management,married,secondary,no,2596,no,no,unknown,12,jun,236,1,-1,0,unknown,no +34,blue-collar,married,secondary,no,467,yes,no,cellular,13,may,195,2,357,2,failure,no +30,technician,divorced,secondary,no,3100,yes,no,cellular,20,nov,125,1,183,4,failure,no +56,management,divorced,tertiary,no,722,no,no,cellular,19,feb,134,3,94,2,failure,no +50,technician,married,secondary,no,797,yes,no,unknown,6,may,354,1,-1,0,unknown,no +53,technician,married,tertiary,no,476,yes,no,cellular,28,jan,160,1,-1,0,unknown,no +48,unknown,married,unknown,no,558,no,no,cellular,25,aug,433,6,-1,0,unknown,no +53,entrepreneur,married,secondary,no,162,yes,no,cellular,7,may,270,2,-1,0,unknown,no +27,technician,single,secondary,no,1842,yes,yes,cellular,18,may,687,2,300,1,failure,no +46,blue-collar,married,secondary,no,2348,no,no,cellular,17,nov,182,1,-1,0,unknown,no +54,retired,married,primary,no,11,yes,yes,cellular,18,aug,48,10,-1,0,unknown,no +36,blue-collar,married,secondary,no,2103,no,yes,unknown,26,jun,71,1,-1,0,unknown,no +31,technician,single,tertiary,no,967,no,no,cellular,21,nov,210,3,-1,0,unknown,no +58,technician,married,secondary,no,116,no,no,unknown,16,jun,580,3,-1,0,unknown,no +48,services,divorced,primary,no,2805,no,yes,cellular,23,jul,212,2,-1,0,unknown,no +29,services,married,secondary,no,1386,yes,no,unknown,28,may,166,1,-1,0,unknown,no +57,management,divorced,unknown,no,0,no,no,cellular,27,mar,102,1,-1,0,unknown,no +37,admin.,married,secondary,no,0,yes,no,cellular,22,jul,185,1,-1,0,unknown,no +53,management,married,secondary,no,90,yes,no,telephone,20,apr,67,5,-1,0,unknown,no +58,management,married,secondary,no,37,no,no,cellular,18,aug,84,11,-1,0,unknown,no +33,admin.,married,secondary,no,7,yes,no,cellular,17,apr,612,1,148,1,failure,no +38,management,married,tertiary,no,676,no,no,cellular,15,may,59,3,-1,0,unknown,no +28,blue-collar,single,secondary,no,3817,yes,no,cellular,4,may,528,3,-1,0,unknown,no +28,admin.,single,secondary,no,144,no,yes,cellular,8,jul,136,1,-1,0,unknown,no +37,management,single,tertiary,no,230,yes,yes,cellular,2,feb,120,2,272,1,failure,no +27,management,single,tertiary,yes,0,yes,no,unknown,19,may,352,1,-1,0,unknown,no +36,technician,married,tertiary,no,1109,no,no,cellular,13,aug,328,2,-1,0,unknown,no +53,services,married,secondary,no,2925,yes,no,unknown,15,may,1392,4,-1,0,unknown,no +26,services,single,secondary,no,397,no,no,cellular,29,jan,268,1,-1,0,unknown,no +59,unemployed,single,secondary,no,865,no,no,cellular,4,feb,1086,1,-1,0,unknown,no +31,technician,single,secondary,no,816,no,no,cellular,9,jun,100,2,-1,0,unknown,no +59,management,married,primary,no,396,yes,no,unknown,2,jun,72,3,-1,0,unknown,no +40,blue-collar,divorced,secondary,no,0,yes,no,unknown,6,may,121,2,-1,0,unknown,no +27,technician,married,secondary,no,241,no,yes,unknown,26,feb,889,1,-1,0,unknown,no +32,services,married,secondary,no,243,yes,yes,unknown,6,may,144,1,-1,0,unknown,no +42,entrepreneur,married,tertiary,no,233,no,no,cellular,5,feb,446,1,-1,0,unknown,no +43,services,married,secondary,no,43,yes,no,cellular,18,may,199,1,-1,0,unknown,no +53,self-employed,married,tertiary,no,290,no,yes,cellular,24,jul,303,3,-1,0,unknown,no +30,services,single,secondary,no,101,yes,no,cellular,19,nov,85,2,-1,0,unknown,no +53,admin.,divorced,secondary,no,1151,yes,no,unknown,5,may,412,1,-1,0,unknown,no +53,technician,divorced,secondary,no,45,no,no,unknown,28,may,171,6,-1,0,unknown,no +57,management,married,tertiary,no,1410,yes,no,cellular,10,jul,185,1,-1,0,unknown,no +33,technician,married,secondary,no,1234,no,no,telephone,9,nov,61,1,-1,0,unknown,no +38,technician,married,secondary,no,2767,yes,no,cellular,21,nov,711,2,-1,0,unknown,no +33,student,single,unknown,no,5969,no,no,cellular,30,apr,110,1,83,7,failure,no +42,management,divorced,secondary,no,-272,no,no,cellular,8,jul,186,1,-1,0,unknown,no +32,blue-collar,single,secondary,no,1036,yes,yes,unknown,30,may,62,2,-1,0,unknown,no +42,technician,married,secondary,no,9324,no,no,cellular,27,aug,67,4,-1,0,unknown,no +41,technician,married,secondary,no,1043,yes,yes,unknown,14,may,225,1,-1,0,unknown,no +35,technician,married,tertiary,no,1473,yes,no,unknown,12,may,84,3,-1,0,unknown,no +48,entrepreneur,married,secondary,no,183,yes,no,unknown,3,jun,203,9,-1,0,unknown,no +24,management,single,secondary,no,86,no,no,unknown,2,jun,1075,2,-1,0,unknown,no +59,blue-collar,married,secondary,no,0,yes,no,unknown,20,may,217,4,-1,0,unknown,no +45,blue-collar,married,primary,no,2388,no,no,cellular,11,aug,317,2,-1,0,unknown,no +39,admin.,divorced,secondary,no,160,yes,no,cellular,5,aug,156,1,-1,0,unknown,no +46,management,married,tertiary,no,385,yes,no,unknown,29,may,52,4,-1,0,unknown,no +38,entrepreneur,married,tertiary,no,4,yes,no,cellular,16,jul,158,1,-1,0,unknown,no +30,management,single,tertiary,no,119,no,no,cellular,28,jan,430,1,-1,0,unknown,no +52,technician,married,tertiary,no,0,no,yes,cellular,5,aug,409,1,-1,0,unknown,no +42,management,divorced,tertiary,no,742,yes,no,unknown,5,may,58,3,-1,0,unknown,no +46,self-employed,divorced,secondary,no,0,no,no,unknown,10,aug,6,1,-1,0,unknown,no +33,management,single,tertiary,no,1724,no,no,cellular,3,feb,252,6,-1,0,unknown,no +52,retired,married,secondary,no,0,no,no,cellular,22,aug,351,5,-1,0,unknown,no +49,self-employed,married,tertiary,no,503,yes,no,cellular,6,feb,310,4,200,1,failure,no +59,management,single,tertiary,no,68,yes,no,unknown,28,may,176,2,-1,0,unknown,no +58,management,divorced,primary,no,5914,no,no,unknown,17,jun,69,4,-1,0,unknown,no +26,technician,single,tertiary,no,192,yes,no,unknown,15,may,477,1,-1,0,unknown,no +41,management,married,tertiary,no,15,no,no,unknown,20,jun,13,5,-1,0,unknown,no +41,blue-collar,married,secondary,no,2157,yes,no,unknown,14,may,154,2,-1,0,unknown,no +39,technician,married,secondary,no,3494,yes,no,cellular,19,nov,139,1,92,4,failure,no +27,housemaid,married,primary,no,275,yes,no,cellular,14,may,196,2,-1,0,unknown,no +47,self-employed,married,secondary,no,318,no,no,cellular,21,nov,83,1,-1,0,unknown,no +52,retired,married,tertiary,no,350,no,yes,cellular,9,jul,156,1,-1,0,unknown,no +37,technician,married,secondary,no,588,yes,no,cellular,14,aug,65,4,-1,0,unknown,no +38,blue-collar,married,secondary,no,2008,yes,no,cellular,18,nov,354,1,-1,0,unknown,no +42,technician,single,tertiary,no,35,yes,yes,cellular,17,nov,38,1,115,5,other,no +41,technician,married,secondary,no,2152,no,no,cellular,30,sep,134,1,121,1,other,no +46,entrepreneur,married,secondary,no,122,no,no,cellular,6,feb,1047,2,1,7,failure,no +40,services,divorced,secondary,no,160,no,no,cellular,14,jul,123,3,-1,0,unknown,no +41,student,single,secondary,no,1934,yes,no,cellular,21,nov,162,2,-1,0,unknown,no +60,retired,married,tertiary,no,0,yes,no,unknown,13,may,34,4,-1,0,unknown,no +59,retired,married,unknown,no,613,no,no,cellular,19,aug,75,2,-1,0,unknown,no +59,retired,married,primary,no,574,no,no,cellular,18,aug,197,6,-1,0,unknown,no +28,blue-collar,single,primary,no,0,yes,yes,unknown,3,jun,380,4,-1,0,unknown,no +45,admin.,single,secondary,no,341,yes,yes,cellular,5,may,77,2,-1,0,unknown,no +31,blue-collar,divorced,primary,no,158,yes,no,unknown,28,may,157,1,-1,0,unknown,no +31,unemployed,single,tertiary,no,1489,yes,no,cellular,3,feb,678,1,-1,0,unknown,no +46,unknown,married,unknown,no,2911,no,no,telephone,7,jul,41,9,-1,0,unknown,no +51,self-employed,married,secondary,no,1178,no,no,cellular,6,aug,530,2,-1,0,unknown,no +37,admin.,married,secondary,no,96,no,no,cellular,5,feb,102,1,182,3,success,no +40,services,married,secondary,no,4157,yes,no,unknown,15,may,735,1,-1,0,unknown,no +31,blue-collar,single,secondary,yes,-575,yes,no,unknown,2,jun,153,9,-1,0,unknown,no +38,blue-collar,married,primary,no,3419,yes,no,unknown,20,jun,324,5,-1,0,unknown,no +39,technician,single,secondary,no,1104,no,no,cellular,20,nov,333,2,105,2,success,no +29,services,married,secondary,no,57,yes,no,telephone,21,jul,342,9,-1,0,unknown,no +65,retired,married,primary,no,343,no,no,telephone,5,feb,159,2,-1,0,unknown,no +26,admin.,single,secondary,no,-326,yes,no,unknown,19,may,128,3,-1,0,unknown,no +44,admin.,married,secondary,no,0,no,no,cellular,31,jul,209,1,-1,0,unknown,no +27,management,single,tertiary,no,3104,yes,no,unknown,28,may,160,2,-1,0,unknown,no +35,management,married,tertiary,no,648,no,no,cellular,30,jul,674,2,-1,0,unknown,no +36,admin.,single,secondary,no,10041,yes,no,cellular,20,nov,91,2,184,1,other,no +36,management,single,tertiary,yes,-508,yes,no,cellular,17,apr,832,2,-1,0,unknown,no +24,blue-collar,single,secondary,no,327,yes,no,unknown,28,may,333,2,-1,0,unknown,no +33,management,single,tertiary,no,1150,yes,no,telephone,12,may,109,2,-1,0,unknown,no +53,management,single,tertiary,no,1074,yes,no,unknown,15,may,523,2,-1,0,unknown,no +45,services,married,secondary,no,27,yes,yes,cellular,31,jul,43,2,-1,0,unknown,no +37,technician,married,secondary,no,3720,yes,no,cellular,28,jan,561,1,-1,0,unknown,no +60,blue-collar,divorced,primary,no,92,yes,no,unknown,6,jun,70,3,-1,0,unknown,no +30,management,single,tertiary,no,7845,yes,no,unknown,3,jun,59,1,-1,0,unknown,no +37,blue-collar,married,primary,no,157,yes,no,unknown,30,may,833,8,-1,0,unknown,no +34,unemployed,married,secondary,no,428,yes,no,cellular,7,apr,221,2,267,3,other,no +28,blue-collar,married,secondary,no,0,yes,no,cellular,15,may,6,4,-1,0,unknown,no +44,technician,single,secondary,no,54,no,yes,cellular,19,aug,199,2,-1,0,unknown,no +34,management,married,tertiary,no,13,yes,no,cellular,21,jul,47,1,-1,0,unknown,no +70,retired,married,primary,no,3230,no,no,cellular,24,nov,112,1,-1,0,unknown,no +38,management,single,tertiary,no,1637,no,yes,cellular,5,aug,231,1,-1,0,unknown,no +32,admin.,single,secondary,no,6981,yes,no,cellular,2,jun,154,1,194,3,failure,no +39,entrepreneur,married,tertiary,yes,1,yes,yes,unknown,29,may,102,1,-1,0,unknown,no +38,technician,divorced,secondary,no,631,yes,no,cellular,25,aug,343,2,-1,0,unknown,no +36,housemaid,divorced,tertiary,no,7296,yes,no,cellular,18,aug,108,6,-1,0,unknown,no +32,blue-collar,single,tertiary,no,3014,yes,no,cellular,7,may,291,2,-1,0,unknown,no +34,technician,single,secondary,no,920,yes,no,cellular,29,oct,250,1,342,5,failure,no +49,management,married,tertiary,no,735,yes,no,unknown,13,may,50,3,-1,0,unknown,no +45,management,married,tertiary,no,1300,no,no,cellular,30,jul,135,3,-1,0,unknown,no +24,admin.,married,secondary,no,541,yes,no,unknown,5,jun,622,4,-1,0,unknown,no +47,management,married,tertiary,no,0,no,no,cellular,19,aug,213,2,-1,0,unknown,no +36,management,married,tertiary,no,1257,no,no,cellular,8,feb,108,9,101,1,other,no +25,services,married,secondary,no,4522,yes,no,cellular,18,may,177,4,-1,0,unknown,no +30,admin.,single,secondary,no,585,no,yes,cellular,2,feb,7,6,-1,0,unknown,no +29,unemployed,single,tertiary,no,150,yes,no,cellular,5,may,165,1,-1,0,unknown,no +27,services,married,secondary,no,202,yes,no,telephone,8,jul,212,2,-1,0,unknown,no +57,admin.,married,secondary,no,2137,no,no,telephone,8,jul,132,7,-1,0,unknown,no +38,self-employed,divorced,secondary,no,2674,yes,no,unknown,19,jun,163,2,-1,0,unknown,no +43,blue-collar,married,secondary,no,625,yes,no,unknown,30,sep,175,1,-1,0,unknown,no +35,management,single,secondary,no,73,yes,no,unknown,28,may,79,2,-1,0,unknown,no +38,management,married,tertiary,no,2656,no,no,cellular,8,jul,230,2,-1,0,unknown,no +71,retired,married,secondary,no,3,no,no,cellular,13,aug,1175,3,189,1,other,no +36,blue-collar,married,secondary,no,0,no,no,cellular,15,jul,794,1,-1,0,unknown,no +40,blue-collar,married,secondary,no,95,no,yes,unknown,20,jun,61,4,-1,0,unknown,no +50,blue-collar,married,primary,no,106,no,no,cellular,12,aug,460,2,-1,0,unknown,no +31,management,married,tertiary,no,477,yes,no,cellular,21,nov,77,5,-1,0,unknown,no +33,services,divorced,secondary,no,1529,yes,no,telephone,18,nov,41,1,-1,0,unknown,no +57,technician,married,secondary,no,28,yes,no,cellular,8,may,163,1,358,1,failure,no +32,services,single,tertiary,no,1743,yes,no,cellular,1,apr,1156,1,261,3,other,no +52,blue-collar,married,primary,no,924,no,no,cellular,21,aug,93,4,-1,0,unknown,no +30,admin.,single,secondary,no,457,no,no,cellular,27,apr,90,2,-1,0,unknown,no +40,admin.,married,secondary,no,0,yes,no,cellular,3,feb,561,1,201,1,failure,no +50,admin.,married,secondary,no,736,yes,no,unknown,14,may,74,1,-1,0,unknown,no +32,management,married,tertiary,no,0,no,no,cellular,29,aug,183,2,-1,0,unknown,no +36,admin.,single,secondary,no,787,no,no,unknown,17,jun,92,1,-1,0,unknown,no +60,admin.,married,secondary,no,-396,yes,no,cellular,11,may,443,1,350,1,failure,no +48,services,married,secondary,no,1573,no,no,cellular,5,aug,165,1,-1,0,unknown,no +72,retired,married,primary,no,0,no,no,cellular,29,dec,215,2,-1,0,unknown,no +46,blue-collar,married,secondary,no,524,yes,no,telephone,5,may,15,7,-1,0,unknown,no +45,blue-collar,married,primary,no,1558,yes,no,cellular,6,may,179,1,-1,0,unknown,no +50,admin.,married,secondary,no,159,yes,no,unknown,7,may,216,2,-1,0,unknown,no +29,management,married,tertiary,yes,53,yes,no,cellular,31,jul,27,17,-1,0,unknown,no +40,management,single,unknown,no,838,yes,no,unknown,12,may,619,3,-1,0,unknown,no +49,technician,married,secondary,no,3144,no,no,cellular,31,jul,349,2,-1,0,unknown,no +42,services,married,secondary,no,737,yes,no,unknown,14,may,762,2,-1,0,unknown,no +43,technician,married,secondary,no,4056,no,no,cellular,4,may,13,6,89,2,failure,no +36,admin.,married,secondary,no,162,yes,yes,cellular,20,apr,340,2,-1,0,unknown,no +37,technician,married,primary,no,0,yes,no,unknown,6,may,76,4,-1,0,unknown,no +59,retired,divorced,primary,no,217,yes,no,unknown,26,may,574,3,-1,0,unknown,no +75,retired,married,primary,no,3324,no,no,cellular,2,feb,149,1,-1,0,unknown,no +53,management,married,secondary,no,2895,yes,no,unknown,29,may,74,1,-1,0,unknown,no +53,management,married,tertiary,no,0,yes,no,cellular,14,jul,85,3,-1,0,unknown,no +57,retired,married,tertiary,no,11254,no,no,cellular,30,jul,229,2,-1,0,unknown,no +30,technician,married,secondary,no,-280,yes,no,cellular,17,apr,609,2,266,2,failure,no +44,services,married,secondary,no,808,yes,no,unknown,2,jun,67,2,-1,0,unknown,no +51,blue-collar,married,primary,no,0,no,no,unknown,9,jun,166,2,-1,0,unknown,no +30,blue-collar,married,secondary,no,246,yes,no,cellular,18,nov,166,2,113,5,failure,no +42,blue-collar,married,secondary,no,-972,yes,no,unknown,29,may,146,1,-1,0,unknown,no +48,blue-collar,married,secondary,no,750,no,no,cellular,5,feb,85,2,8,2,other,no +40,unemployed,married,tertiary,no,2430,no,no,cellular,24,aug,87,2,-1,0,unknown,no +36,technician,married,secondary,no,-179,yes,no,cellular,17,jul,144,1,-1,0,unknown,no +40,admin.,married,secondary,no,1412,no,no,cellular,31,jul,48,3,-1,0,unknown,no +47,housemaid,married,secondary,yes,-1531,yes,no,cellular,31,jul,156,8,-1,0,unknown,no +39,management,married,tertiary,no,51,no,no,cellular,20,aug,140,2,-1,0,unknown,no +41,services,married,unknown,no,88,yes,no,cellular,11,may,105,1,336,2,failure,no +42,housemaid,married,primary,no,-209,no,yes,cellular,11,aug,90,2,-1,0,unknown,no +50,housemaid,single,secondary,no,799,no,no,telephone,28,jan,63,1,-1,0,unknown,no +58,retired,married,tertiary,no,4048,no,yes,cellular,15,jul,270,5,-1,0,unknown,no +70,retired,married,secondary,no,1310,no,no,cellular,15,oct,634,1,-1,0,unknown,no +29,management,single,tertiary,no,573,yes,yes,unknown,16,jun,190,4,-1,0,unknown,no +56,management,married,tertiary,no,6798,yes,no,cellular,17,nov,250,1,-1,0,unknown,no +32,self-employed,married,tertiary,no,1214,no,no,cellular,11,aug,104,2,-1,0,unknown,no +39,technician,single,unknown,no,75,no,no,unknown,6,jun,26,1,-1,0,unknown,no +33,management,divorced,tertiary,no,387,no,no,cellular,6,feb,17,5,-1,0,unknown,no +47,technician,married,secondary,no,2246,yes,no,cellular,10,jul,330,1,-1,0,unknown,no +39,blue-collar,divorced,primary,no,3,no,yes,unknown,1,jul,625,1,-1,0,unknown,no +34,technician,married,secondary,no,883,no,no,cellular,14,aug,163,3,-1,0,unknown,no +36,blue-collar,married,primary,no,1503,no,no,cellular,19,nov,138,1,-1,0,unknown,no +40,blue-collar,married,primary,no,-322,yes,yes,unknown,6,may,144,1,-1,0,unknown,no +34,technician,married,primary,no,1301,no,no,cellular,2,feb,56,1,-1,0,unknown,no +54,blue-collar,married,primary,no,950,yes,no,unknown,15,may,285,2,-1,0,unknown,no +36,management,married,tertiary,no,2326,yes,no,cellular,20,nov,7,5,-1,0,unknown,no +34,blue-collar,married,primary,no,-78,yes,no,unknown,9,may,198,1,-1,0,unknown,no +50,admin.,divorced,secondary,yes,2405,yes,no,cellular,6,may,114,1,287,8,failure,no +48,technician,divorced,tertiary,no,113,no,yes,cellular,22,jul,38,1,-1,0,unknown,no +35,services,married,tertiary,no,4564,no,no,cellular,18,aug,45,6,-1,0,unknown,no +33,services,married,secondary,no,387,yes,no,cellular,7,apr,327,2,138,2,failure,no +42,technician,married,secondary,no,1865,yes,no,unknown,15,may,164,1,-1,0,unknown,no +31,technician,single,secondary,no,4105,no,no,cellular,30,apr,264,1,-1,0,unknown,no +54,blue-collar,married,primary,no,258,no,no,telephone,25,may,86,1,88,1,failure,no +55,management,married,primary,no,19,yes,no,unknown,16,may,56,3,-1,0,unknown,no +30,management,single,tertiary,no,3773,yes,no,cellular,9,feb,75,4,258,1,failure,no +30,services,married,secondary,no,1808,yes,no,cellular,18,may,83,2,-1,0,unknown,no +59,management,divorced,tertiary,no,1304,no,no,unknown,18,jun,220,1,-1,0,unknown,no +50,admin.,single,secondary,no,3702,no,no,cellular,16,oct,109,5,-1,0,unknown,no +59,retired,married,secondary,no,163,no,no,cellular,24,jul,464,1,-1,0,unknown,no +27,services,single,secondary,no,-151,no,no,cellular,8,jul,283,2,-1,0,unknown,no +25,management,single,tertiary,no,1602,yes,no,cellular,26,may,154,1,-1,0,unknown,no +37,admin.,married,secondary,no,1314,yes,no,cellular,22,may,74,1,14,9,failure,no +36,technician,married,secondary,no,84,yes,no,unknown,20,may,67,1,-1,0,unknown,no +56,retired,married,primary,no,1906,no,yes,unknown,19,jun,45,9,-1,0,unknown,no +52,management,married,tertiary,no,291,no,no,cellular,21,aug,150,3,-1,0,unknown,no +36,services,divorced,secondary,no,223,yes,yes,cellular,11,may,80,1,-1,0,unknown,no +30,technician,married,secondary,no,207,yes,no,unknown,23,may,72,2,-1,0,unknown,no +31,management,single,tertiary,no,518,yes,no,cellular,18,may,399,1,-1,0,unknown,no +55,retired,married,secondary,no,241,yes,no,unknown,20,jun,14,6,-1,0,unknown,no +28,admin.,single,secondary,no,-126,no,yes,cellular,8,jul,360,4,-1,0,unknown,no +44,management,single,secondary,no,421,no,yes,cellular,5,aug,307,1,-1,0,unknown,no +28,blue-collar,single,secondary,no,38,yes,no,unknown,23,may,31,1,-1,0,unknown,no +25,technician,single,tertiary,no,800,yes,no,unknown,13,may,151,4,-1,0,unknown,no +39,admin.,divorced,secondary,no,32,no,yes,unknown,20,jun,8,10,-1,0,unknown,no +32,management,married,secondary,no,1477,yes,no,cellular,18,nov,111,1,-1,0,unknown,no +42,blue-collar,married,secondary,no,160,yes,yes,unknown,26,jun,190,1,-1,0,unknown,no +31,blue-collar,single,secondary,no,4415,yes,no,unknown,2,jun,329,1,-1,0,unknown,no +38,technician,divorced,secondary,no,-397,yes,yes,cellular,21,jul,91,9,-1,0,unknown,no +30,admin.,married,secondary,no,590,no,no,cellular,11,aug,443,3,-1,0,unknown,no +50,technician,married,secondary,no,778,no,no,cellular,23,jul,16,1,-1,0,unknown,no +50,management,married,tertiary,no,19,no,yes,cellular,23,jul,205,1,-1,0,unknown,no +47,unemployed,married,secondary,yes,0,no,no,cellular,18,nov,81,2,-1,0,unknown,no +29,blue-collar,married,secondary,no,-28,yes,no,unknown,12,may,393,1,-1,0,unknown,no +34,entrepreneur,married,secondary,no,3119,yes,no,unknown,21,may,250,4,-1,0,unknown,no +54,management,married,tertiary,no,122,yes,no,cellular,22,jul,126,3,-1,0,unknown,no +43,admin.,married,secondary,no,0,no,no,unknown,20,jun,804,12,-1,0,unknown,no +47,blue-collar,married,primary,no,4157,no,no,unknown,11,jun,90,3,-1,0,unknown,no +55,retired,married,secondary,no,102,yes,no,unknown,7,may,74,1,-1,0,unknown,no +35,services,married,secondary,no,437,yes,no,unknown,26,may,240,1,-1,0,unknown,no +32,blue-collar,married,secondary,no,1,yes,no,cellular,18,nov,77,3,-1,0,unknown,no +49,blue-collar,married,primary,yes,-354,no,yes,cellular,7,jul,455,1,-1,0,unknown,no +39,management,single,tertiary,no,1234,no,no,telephone,29,jul,64,4,-1,0,unknown,no +32,technician,married,secondary,no,901,yes,no,unknown,21,may,102,3,-1,0,unknown,no +49,blue-collar,married,primary,no,247,no,yes,cellular,22,jul,283,1,-1,0,unknown,no +32,blue-collar,single,primary,no,180,yes,no,cellular,13,may,804,1,-1,0,unknown,no +47,management,married,tertiary,no,274,no,yes,cellular,4,feb,313,2,-1,0,unknown,no +42,blue-collar,single,primary,no,92,no,no,cellular,30,jul,86,2,-1,0,unknown,no +52,admin.,married,primary,no,813,no,yes,cellular,5,aug,113,2,-1,0,unknown,no +31,technician,single,secondary,no,1170,yes,no,unknown,2,jun,120,2,-1,0,unknown,no +52,blue-collar,divorced,primary,yes,-183,yes,no,unknown,6,may,145,1,-1,0,unknown,no +38,management,married,tertiary,no,0,no,no,cellular,28,aug,77,18,-1,0,unknown,no +53,blue-collar,married,secondary,no,136,yes,no,unknown,15,may,99,1,-1,0,unknown,no +40,technician,married,tertiary,no,103,yes,no,unknown,8,may,135,2,-1,0,unknown,no +31,admin.,married,secondary,no,23,no,no,cellular,28,aug,322,7,-1,0,unknown,no +53,technician,married,unknown,no,2242,no,no,cellular,10,jul,154,14,-1,0,unknown,no +46,blue-collar,married,secondary,no,137,no,no,unknown,20,jun,252,3,-1,0,unknown,no +49,admin.,married,secondary,no,1047,no,no,cellular,8,aug,133,4,-1,0,unknown,no +34,technician,single,secondary,no,5731,yes,no,cellular,21,jul,101,3,-1,0,unknown,no +63,entrepreneur,married,tertiary,no,2707,no,no,telephone,16,nov,57,4,-1,0,unknown,no +41,technician,married,secondary,no,-329,no,no,telephone,5,feb,13,8,238,9,other,no +55,blue-collar,married,primary,no,158,yes,no,unknown,15,may,176,18,-1,0,unknown,no +29,entrepreneur,single,tertiary,no,219,yes,no,cellular,18,may,76,2,356,1,failure,no +47,blue-collar,married,secondary,no,2775,no,no,unknown,14,may,262,1,-1,0,unknown,no +37,blue-collar,married,primary,no,461,yes,no,unknown,30,may,272,2,-1,0,unknown,no +38,technician,single,secondary,no,145,yes,no,unknown,27,may,109,2,-1,0,unknown,no +29,technician,single,secondary,no,309,yes,no,unknown,13,may,214,1,-1,0,unknown,no +41,management,married,primary,no,733,yes,no,cellular,7,may,69,1,335,7,failure,no +53,technician,married,secondary,no,8417,yes,no,unknown,14,may,435,1,-1,0,unknown,no +40,retired,single,secondary,no,1400,no,no,unknown,20,jun,20,7,-1,0,unknown,no +56,services,divorced,secondary,no,72,yes,yes,cellular,7,may,263,1,357,4,failure,no +34,management,single,tertiary,no,0,yes,no,unknown,21,may,759,1,-1,0,unknown,no +28,management,single,tertiary,no,9710,no,no,cellular,14,oct,786,2,-1,0,unknown,no +41,self-employed,married,unknown,no,1377,yes,no,cellular,15,may,111,4,371,2,other,no +32,unemployed,married,unknown,no,881,no,no,cellular,9,feb,79,5,-1,0,unknown,no +51,blue-collar,married,secondary,no,0,yes,no,unknown,5,may,173,2,-1,0,unknown,no +33,blue-collar,married,secondary,no,285,no,yes,unknown,3,jul,267,1,-1,0,unknown,no +34,blue-collar,single,secondary,no,550,yes,no,cellular,20,apr,90,3,346,1,failure,no +26,unemployed,married,secondary,no,285,yes,no,cellular,6,may,265,2,342,2,failure,no +31,technician,married,secondary,no,-360,yes,no,unknown,27,may,93,2,-1,0,unknown,no +39,entrepreneur,married,secondary,no,0,no,no,cellular,21,nov,108,7,-1,0,unknown,no +50,management,married,tertiary,yes,72,no,no,cellular,22,aug,171,13,-1,0,unknown,no +33,services,married,secondary,no,930,no,yes,cellular,24,jul,149,2,-1,0,unknown,no +44,technician,married,tertiary,no,717,no,no,cellular,3,jun,150,2,-1,0,unknown,no +38,blue-collar,married,secondary,no,67,no,no,cellular,28,jan,74,1,239,2,failure,no +33,blue-collar,married,secondary,no,6227,yes,no,unknown,23,may,76,2,-1,0,unknown,no +32,blue-collar,single,secondary,no,5252,yes,no,unknown,21,may,1162,2,-1,0,unknown,no +33,management,single,tertiary,no,561,no,no,cellular,7,apr,104,1,-1,0,unknown,no +55,technician,married,unknown,no,1393,yes,yes,telephone,21,nov,55,5,-1,0,unknown,no +27,blue-collar,married,secondary,no,-330,yes,yes,cellular,14,may,88,1,353,2,failure,no +39,management,divorced,tertiary,no,3261,yes,no,unknown,9,jun,150,17,-1,0,unknown,no +21,services,single,secondary,no,361,no,no,telephone,5,jun,329,1,95,1,other,no +57,blue-collar,married,unknown,no,807,yes,no,unknown,6,may,211,2,-1,0,unknown,no +29,self-employed,married,tertiary,no,2305,no,no,cellular,27,may,82,2,-1,0,unknown,no +45,admin.,single,secondary,no,-11,yes,no,cellular,5,may,247,1,-1,0,unknown,no +46,management,single,tertiary,no,2223,no,no,unknown,12,jun,67,3,-1,0,unknown,no +47,admin.,married,secondary,no,29,no,yes,cellular,22,aug,150,8,-1,0,unknown,no +44,blue-collar,single,primary,no,1308,no,yes,unknown,19,jun,161,1,-1,0,unknown,no +43,self-employed,single,primary,no,1337,yes,yes,cellular,20,nov,632,2,-1,0,unknown,no +44,management,married,tertiary,no,17361,no,no,unknown,18,jun,476,1,-1,0,unknown,no +52,retired,married,primary,no,6,no,no,cellular,22,aug,82,2,-1,0,unknown,no +33,technician,divorced,secondary,no,370,yes,no,cellular,11,aug,145,4,-1,0,unknown,no +27,technician,married,tertiary,no,8,yes,yes,cellular,18,may,398,1,370,2,failure,no +43,management,divorced,tertiary,no,666,no,no,cellular,13,aug,160,3,-1,0,unknown,no +29,admin.,married,secondary,no,0,yes,no,unknown,9,may,121,1,-1,0,unknown,no +43,management,married,tertiary,no,1336,yes,yes,cellular,27,may,82,2,309,1,failure,no +34,blue-collar,married,tertiary,no,17672,no,no,cellular,20,nov,548,1,-1,0,unknown,no +30,management,single,tertiary,yes,35,no,no,cellular,30,jul,185,4,-1,0,unknown,no +56,management,married,tertiary,no,705,no,no,cellular,19,nov,164,2,-1,0,unknown,no +46,admin.,divorced,secondary,no,2087,no,no,cellular,1,jun,111,1,119,4,other,no +42,technician,married,secondary,no,4466,no,no,cellular,17,nov,158,2,-1,0,unknown,no +51,blue-collar,married,primary,no,844,yes,no,unknown,29,may,184,3,-1,0,unknown,no +30,blue-collar,married,secondary,no,321,yes,no,cellular,20,nov,738,2,-1,0,unknown,no +41,management,married,tertiary,no,2781,yes,no,cellular,12,aug,95,2,-1,0,unknown,no +57,retired,married,tertiary,no,34,no,yes,cellular,28,jan,139,1,-1,0,unknown,no +36,blue-collar,married,secondary,no,29,yes,yes,cellular,31,jul,345,1,-1,0,unknown,no +47,blue-collar,single,unknown,no,2443,no,no,unknown,18,jun,422,1,-1,0,unknown,no +37,admin.,divorced,secondary,no,3975,yes,no,cellular,11,may,163,2,-1,0,unknown,no +33,technician,married,secondary,no,256,yes,no,cellular,18,nov,76,1,-1,0,unknown,no +49,management,divorced,tertiary,no,696,yes,no,unknown,2,jun,310,3,-1,0,unknown,no +34,management,married,tertiary,no,63,no,no,cellular,18,nov,83,1,102,2,failure,no +54,blue-collar,married,primary,no,316,yes,no,cellular,14,may,240,1,-1,0,unknown,no +39,blue-collar,married,primary,no,-119,no,no,unknown,17,jun,135,6,-1,0,unknown,no +58,retired,single,primary,no,6570,no,no,cellular,21,jul,106,3,-1,0,unknown,no +36,blue-collar,married,secondary,no,418,yes,yes,cellular,13,may,132,2,-1,0,unknown,no +46,management,married,tertiary,no,0,yes,no,cellular,14,jul,247,2,-1,0,unknown,no +31,admin.,married,secondary,no,8784,yes,no,unknown,21,may,63,2,-1,0,unknown,no +31,technician,single,secondary,no,1970,no,no,telephone,17,apr,284,3,-1,0,unknown,no +50,blue-collar,divorced,secondary,no,204,yes,yes,unknown,14,may,421,1,-1,0,unknown,no +40,management,married,secondary,no,643,yes,no,cellular,17,apr,74,2,256,1,failure,no +47,blue-collar,married,primary,no,304,yes,no,unknown,12,may,185,1,-1,0,unknown,no +26,management,single,tertiary,no,1177,no,no,cellular,19,oct,116,1,-1,0,unknown,no +29,technician,single,secondary,no,544,yes,no,unknown,13,may,360,1,-1,0,unknown,no +38,management,married,tertiary,no,-498,no,no,cellular,14,aug,85,6,-1,0,unknown,no +57,services,married,secondary,no,0,yes,no,cellular,14,may,16,9,282,3,other,no +47,blue-collar,married,primary,no,209,no,no,cellular,27,aug,77,6,-1,0,unknown,no +56,blue-collar,married,unknown,no,665,yes,no,unknown,20,jun,109,2,-1,0,unknown,no +37,entrepreneur,married,tertiary,no,310,no,no,cellular,1,sep,76,1,-1,0,unknown,no +66,management,married,unknown,no,2149,yes,no,cellular,30,nov,151,6,103,4,other,no +49,unemployed,married,secondary,no,13818,no,no,cellular,21,nov,201,1,113,2,failure,no +31,unknown,married,tertiary,no,526,no,no,cellular,26,aug,130,13,-1,0,unknown,no +30,management,single,tertiary,no,-218,yes,no,cellular,27,aug,13,15,-1,0,unknown,no +42,blue-collar,divorced,primary,no,419,yes,yes,unknown,14,may,96,4,-1,0,unknown,no +55,technician,married,secondary,no,517,yes,yes,cellular,6,feb,47,3,263,4,failure,no +33,admin.,single,secondary,no,61,no,no,cellular,24,jul,286,4,-1,0,unknown,no +33,management,married,tertiary,no,0,yes,yes,cellular,14,may,83,2,-1,0,unknown,no +43,blue-collar,married,secondary,no,514,yes,yes,cellular,20,apr,34,2,-1,0,unknown,no +32,unemployed,married,secondary,no,365,yes,no,cellular,30,jan,210,3,-1,0,unknown,no +42,blue-collar,married,primary,no,480,yes,no,unknown,6,jun,288,12,-1,0,unknown,no +53,entrepreneur,single,unknown,no,717,no,no,cellular,30,jul,594,2,-1,0,unknown,no +42,management,married,tertiary,no,24780,no,no,cellular,6,aug,184,2,-1,0,unknown,no +37,admin.,married,secondary,no,1396,yes,no,cellular,22,jul,199,2,-1,0,unknown,no +31,services,married,secondary,no,414,yes,no,unknown,7,may,215,1,-1,0,unknown,no +57,admin.,divorced,secondary,no,3100,no,yes,cellular,29,jul,165,2,-1,0,unknown,no +33,admin.,married,secondary,no,0,no,yes,cellular,6,feb,214,5,-1,0,unknown,no +57,management,married,tertiary,yes,1218,yes,no,cellular,18,jul,317,6,-1,0,unknown,no +30,technician,divorced,secondary,no,789,yes,no,cellular,12,may,356,1,-1,0,unknown,no +31,management,married,tertiary,no,859,yes,yes,cellular,4,aug,182,3,-1,0,unknown,no +33,technician,married,secondary,no,0,no,no,cellular,25,aug,296,8,-1,0,unknown,no +33,blue-collar,married,primary,no,3868,yes,no,unknown,2,jun,445,1,-1,0,unknown,no +53,management,married,tertiary,no,232,yes,no,telephone,29,jan,32,1,-1,0,unknown,no +38,blue-collar,divorced,secondary,no,1686,yes,no,unknown,19,jun,9,28,-1,0,unknown,no +60,blue-collar,married,primary,no,29184,no,no,telephone,15,jun,94,2,-1,0,unknown,no +36,technician,single,secondary,no,144,no,no,cellular,26,may,87,1,308,2,failure,no +27,services,single,secondary,no,194,yes,no,unknown,16,may,326,1,-1,0,unknown,no +32,entrepreneur,single,tertiary,no,7641,yes,yes,cellular,21,nov,39,10,-1,0,unknown,no +45,blue-collar,married,primary,no,351,yes,no,unknown,19,jun,66,1,-1,0,unknown,no +28,management,single,tertiary,no,150,yes,no,unknown,8,may,491,1,-1,0,unknown,no +57,retired,married,primary,no,1532,no,no,telephone,6,feb,286,3,-1,0,unknown,no +37,self-employed,married,secondary,no,1549,yes,no,unknown,20,jun,161,7,-1,0,unknown,no +47,management,married,tertiary,no,1057,no,no,cellular,4,aug,488,2,-1,0,unknown,no +35,management,married,secondary,no,839,yes,no,unknown,23,may,50,3,-1,0,unknown,no +32,blue-collar,divorced,secondary,no,880,yes,yes,unknown,4,jun,112,1,-1,0,unknown,no +41,admin.,single,secondary,no,4464,yes,no,telephone,21,jul,1425,2,-1,0,unknown,no +35,technician,married,tertiary,no,6,yes,no,cellular,18,nov,47,1,-1,0,unknown,no +26,technician,single,secondary,no,0,no,yes,cellular,30,jul,65,26,-1,0,unknown,no +47,technician,divorced,tertiary,no,694,yes,no,cellular,11,may,1001,4,-1,0,unknown,no +36,blue-collar,married,secondary,no,153,yes,no,cellular,8,may,263,1,171,2,failure,no +46,management,married,tertiary,no,110,yes,yes,cellular,20,aug,243,5,-1,0,unknown,no +30,management,single,tertiary,no,640,no,no,cellular,6,feb,124,4,213,2,failure,no +44,blue-collar,married,secondary,no,3060,yes,no,cellular,20,nov,113,1,189,2,failure,no +47,technician,divorced,secondary,no,2836,no,yes,cellular,14,aug,10,2,-1,0,unknown,no +49,blue-collar,married,secondary,no,1127,yes,yes,cellular,17,apr,162,2,281,1,failure,no +55,technician,married,tertiary,no,11,no,no,cellular,21,aug,588,2,-1,0,unknown,no +56,blue-collar,married,unknown,no,982,yes,yes,cellular,7,may,135,2,-1,0,unknown,no +28,services,married,secondary,no,222,yes,no,unknown,29,may,101,23,-1,0,unknown,no +34,admin.,divorced,secondary,no,627,yes,no,unknown,7,may,283,2,-1,0,unknown,no +55,management,married,tertiary,no,5010,no,no,cellular,18,nov,530,1,-1,0,unknown,no +27,student,single,unknown,no,468,no,no,cellular,4,feb,270,2,-1,0,unknown,no +38,management,divorced,tertiary,no,155,yes,no,unknown,20,jun,25,26,-1,0,unknown,no +43,services,married,secondary,no,2478,yes,no,cellular,28,jan,347,1,230,1,failure,no +55,management,divorced,tertiary,no,668,no,no,cellular,28,aug,25,6,-1,0,unknown,no +30,blue-collar,married,primary,no,35,yes,no,cellular,11,jul,366,2,-1,0,unknown,no +48,blue-collar,married,primary,no,3304,no,no,unknown,11,jun,409,3,-1,0,unknown,no +30,blue-collar,married,secondary,no,0,yes,no,unknown,26,may,30,1,-1,0,unknown,no +58,housemaid,married,primary,no,237,no,no,telephone,18,jul,200,3,-1,0,unknown,no +39,unknown,single,unknown,no,0,no,no,telephone,28,jan,28,1,-1,0,unknown,no +35,technician,single,secondary,no,-54,yes,no,unknown,30,may,70,2,-1,0,unknown,no +41,blue-collar,married,secondary,no,0,no,no,unknown,5,jun,85,2,-1,0,unknown,no +32,technician,married,tertiary,no,240,yes,yes,cellular,14,jul,86,3,-1,0,unknown,no +48,technician,married,secondary,no,759,yes,no,cellular,28,jul,84,5,-1,0,unknown,no +76,retired,married,unknown,no,992,no,no,cellular,27,oct,139,2,-1,0,unknown,no +43,management,married,tertiary,no,1379,yes,no,unknown,27,may,383,3,-1,0,unknown,no +46,unknown,married,tertiary,no,8564,no,no,cellular,2,aug,397,2,342,1,failure,no +59,retired,married,unknown,no,0,no,no,cellular,25,aug,213,4,-1,0,unknown,no +29,management,single,tertiary,no,119,yes,no,unknown,28,may,136,2,-1,0,unknown,no +31,technician,married,secondary,no,450,no,yes,cellular,20,nov,111,2,129,4,failure,no +36,admin.,married,secondary,no,746,yes,no,cellular,17,nov,581,3,-1,0,unknown,no +46,self-employed,single,primary,no,2032,no,no,cellular,30,jul,424,2,-1,0,unknown,no +37,management,married,tertiary,no,636,no,yes,unknown,5,jun,338,2,-1,0,unknown,no +48,technician,married,secondary,no,-938,yes,no,cellular,7,may,134,1,344,2,failure,no +31,management,single,tertiary,no,2007,yes,no,unknown,20,may,253,1,-1,0,unknown,no +39,blue-collar,divorced,secondary,no,33,no,no,cellular,29,jan,593,4,-1,0,unknown,no +39,management,single,unknown,no,2887,yes,no,unknown,7,may,42,2,-1,0,unknown,no +39,housemaid,married,secondary,no,1444,no,no,cellular,19,nov,100,1,117,8,success,no +55,management,married,tertiary,no,42,yes,no,telephone,11,may,386,2,-1,0,unknown,no +54,retired,married,secondary,no,522,no,yes,cellular,14,jul,81,3,-1,0,unknown,no +32,housemaid,married,secondary,no,0,no,no,cellular,21,aug,435,2,-1,0,unknown,no +37,blue-collar,married,secondary,no,3884,yes,no,cellular,20,apr,28,5,-1,0,unknown,no +36,services,married,secondary,no,472,yes,no,unknown,19,jun,1017,1,-1,0,unknown,no +60,retired,married,secondary,no,2060,no,no,cellular,26,mar,454,1,88,3,other,no +25,services,single,secondary,no,628,no,no,cellular,8,jul,266,1,-1,0,unknown,no +50,management,married,tertiary,no,398,no,no,telephone,30,jul,1567,5,-1,0,unknown,no +59,retired,married,secondary,no,417,yes,no,cellular,7,may,476,2,-1,0,unknown,no +58,unemployed,married,secondary,no,610,yes,no,telephone,29,jul,246,2,-1,0,unknown,no +49,technician,single,tertiary,no,2585,no,no,unknown,11,jun,64,1,-1,0,unknown,no +47,technician,married,secondary,no,321,yes,yes,unknown,4,jul,111,1,-1,0,unknown,no +38,services,married,primary,no,0,yes,no,cellular,17,nov,960,2,-1,0,unknown,no +32,management,single,tertiary,yes,4,no,no,cellular,29,jan,181,1,-1,0,unknown,no +40,blue-collar,single,unknown,no,29,no,no,telephone,7,jul,118,2,-1,0,unknown,no +50,technician,married,secondary,no,892,yes,yes,unknown,15,may,234,1,-1,0,unknown,no +35,management,single,tertiary,no,0,no,yes,cellular,14,aug,370,4,-1,0,unknown,no +47,admin.,married,secondary,no,1387,yes,no,cellular,14,oct,158,1,826,1,failure,no +27,admin.,single,secondary,no,454,no,yes,cellular,15,jul,331,2,-1,0,unknown,no +48,housemaid,single,secondary,no,71,no,no,cellular,28,aug,97,3,-1,0,unknown,no +40,blue-collar,married,primary,no,-35,yes,no,cellular,18,may,194,3,-1,0,unknown,no +35,self-employed,married,secondary,no,2251,no,no,cellular,19,aug,151,8,-1,0,unknown,no +39,housemaid,married,primary,no,2460,no,no,cellular,11,jul,194,3,-1,0,unknown,no +34,blue-collar,married,secondary,no,34,no,no,cellular,30,jan,379,1,-1,0,unknown,no +36,admin.,single,secondary,no,1281,no,no,telephone,24,jul,119,2,-1,0,unknown,no +56,blue-collar,divorced,primary,no,3021,no,no,unknown,9,jun,419,2,-1,0,unknown,no +30,technician,married,tertiary,no,141,no,no,cellular,29,jan,166,2,-1,0,unknown,no +51,blue-collar,married,secondary,no,500,no,no,cellular,14,may,471,1,-1,0,unknown,no +41,blue-collar,married,secondary,no,1459,no,no,unknown,5,jun,82,1,-1,0,unknown,no +35,admin.,married,secondary,no,-244,yes,yes,cellular,6,may,118,1,-1,0,unknown,no +53,management,married,tertiary,no,1356,yes,no,cellular,9,nov,371,2,96,4,failure,no +25,blue-collar,single,primary,no,-289,yes,no,telephone,13,may,56,2,-1,0,unknown,no +34,management,single,tertiary,no,1396,yes,no,cellular,17,jul,630,1,-1,0,unknown,no +29,services,single,secondary,no,9,no,yes,cellular,8,jul,202,2,-1,0,unknown,no +33,services,married,secondary,no,70,yes,no,cellular,21,jul,333,3,-1,0,unknown,no +43,admin.,married,secondary,no,877,yes,no,cellular,2,feb,135,1,-1,0,unknown,no +47,blue-collar,married,primary,no,113,yes,no,unknown,13,may,276,1,-1,0,unknown,no +35,admin.,single,secondary,no,368,yes,no,unknown,16,may,218,3,-1,0,unknown,no +49,entrepreneur,married,secondary,no,89,yes,no,cellular,12,may,351,1,-1,0,unknown,no +41,services,married,primary,no,450,yes,no,unknown,14,may,374,2,-1,0,unknown,no +49,services,married,unknown,no,463,yes,no,telephone,15,jul,541,2,-1,0,unknown,no +44,blue-collar,married,secondary,no,1397,no,no,cellular,20,nov,326,1,-1,0,unknown,no +32,services,single,secondary,no,310,yes,no,unknown,6,may,144,1,-1,0,unknown,no +27,self-employed,single,tertiary,no,270,yes,no,unknown,27,may,470,2,-1,0,unknown,no +53,technician,married,secondary,no,65,no,no,cellular,25,nov,99,1,92,2,failure,no +55,admin.,married,secondary,no,865,yes,no,cellular,8,jul,105,1,82,2,failure,no +60,retired,married,secondary,no,7,no,yes,cellular,18,aug,87,5,-1,0,unknown,no +27,management,single,secondary,no,145,yes,no,cellular,5,may,121,4,89,3,failure,no +58,self-employed,married,tertiary,no,327,no,yes,cellular,14,jul,145,2,-1,0,unknown,no +42,blue-collar,married,secondary,no,429,yes,no,cellular,18,may,110,1,370,1,failure,no +31,services,married,secondary,no,1167,yes,yes,cellular,20,nov,279,1,-1,0,unknown,no +30,management,single,tertiary,no,2995,yes,no,cellular,18,nov,329,1,-1,0,unknown,no +32,management,single,tertiary,no,974,yes,no,unknown,3,jun,228,1,-1,0,unknown,no +56,self-employed,married,secondary,no,784,no,yes,cellular,30,jul,149,2,-1,0,unknown,no +57,retired,divorced,secondary,no,316,no,no,cellular,28,jan,935,2,-1,0,unknown,no +57,management,married,tertiary,no,0,yes,no,cellular,21,nov,67,1,-1,0,unknown,no +39,technician,married,secondary,no,211,no,no,telephone,6,feb,53,2,-1,0,unknown,no +37,blue-collar,married,secondary,no,342,yes,no,cellular,12,may,340,2,175,1,failure,no +32,management,married,tertiary,no,628,no,no,cellular,30,apr,280,1,-1,0,unknown,no +41,blue-collar,married,secondary,no,0,yes,no,cellular,1,apr,625,2,-1,0,unknown,no +49,unemployed,married,secondary,no,769,yes,no,unknown,14,may,257,1,-1,0,unknown,no +36,blue-collar,divorced,secondary,no,2278,yes,no,unknown,23,may,152,2,-1,0,unknown,no +58,retired,married,primary,no,1351,yes,no,telephone,17,apr,392,3,-1,0,unknown,no +58,technician,married,unknown,no,49,yes,no,unknown,15,may,75,2,-1,0,unknown,no +33,services,married,secondary,no,1082,yes,yes,cellular,19,nov,351,1,-1,0,unknown,no +31,management,single,tertiary,no,5691,yes,no,cellular,21,jul,357,1,-1,0,unknown,no +46,blue-collar,divorced,primary,no,916,yes,no,cellular,11,may,472,2,-1,0,unknown,no +42,unemployed,divorced,secondary,no,325,yes,no,unknown,28,may,97,4,-1,0,unknown,no +46,admin.,married,secondary,no,0,yes,yes,cellular,20,apr,239,2,259,2,failure,no +47,management,married,tertiary,no,2475,yes,no,cellular,20,nov,1476,4,-1,0,unknown,no +42,self-employed,married,primary,no,3717,no,no,unknown,20,jun,235,1,-1,0,unknown,no +53,entrepreneur,married,secondary,no,288,no,no,unknown,6,may,69,1,-1,0,unknown,no +31,admin.,married,secondary,no,1130,yes,no,cellular,23,jul,236,5,-1,0,unknown,no +39,blue-collar,married,primary,no,2715,yes,no,unknown,2,jun,201,3,-1,0,unknown,no +57,blue-collar,married,primary,no,23,yes,no,telephone,31,jul,25,8,-1,0,unknown,no +29,blue-collar,single,secondary,no,0,no,no,cellular,6,feb,437,2,-1,0,unknown,no +32,blue-collar,single,secondary,no,-84,yes,no,cellular,11,may,426,1,-1,0,unknown,no +38,self-employed,married,secondary,no,290,yes,no,unknown,20,may,369,1,-1,0,unknown,no +34,self-employed,single,tertiary,no,36,no,no,telephone,28,jan,55,1,-1,0,unknown,no +35,admin.,married,secondary,no,-488,yes,no,unknown,2,jun,97,4,-1,0,unknown,no +55,blue-collar,married,secondary,no,-473,yes,no,unknown,26,may,233,1,-1,0,unknown,no +42,management,married,tertiary,no,1272,yes,no,cellular,5,may,117,1,169,1,failure,no +32,management,married,secondary,no,0,no,no,cellular,20,aug,162,4,-1,0,unknown,no +50,management,divorced,primary,no,-6,yes,no,unknown,19,may,92,2,-1,0,unknown,no +56,admin.,married,secondary,no,510,yes,no,cellular,10,jul,288,1,-1,0,unknown,no +36,technician,single,secondary,no,818,yes,yes,cellular,19,aug,96,4,-1,0,unknown,no +49,management,married,secondary,no,543,yes,no,unknown,20,may,213,3,-1,0,unknown,no +48,management,married,tertiary,no,7867,yes,yes,unknown,30,may,306,3,-1,0,unknown,no +32,technician,single,tertiary,no,1212,yes,no,unknown,23,may,463,2,-1,0,unknown,no +35,management,married,secondary,no,533,no,no,cellular,6,aug,221,12,-1,0,unknown,no +48,management,married,tertiary,no,291,yes,no,telephone,23,jul,350,2,-1,0,unknown,no +40,services,single,secondary,no,573,yes,no,cellular,14,may,329,1,-1,0,unknown,no +55,retired,married,secondary,no,1279,yes,no,cellular,13,may,446,3,357,8,other,no +50,blue-collar,married,primary,no,280,yes,no,unknown,18,jun,61,23,-1,0,unknown,no +55,technician,married,unknown,no,574,yes,no,cellular,29,jan,243,2,-1,0,unknown,no +26,blue-collar,single,secondary,no,658,no,yes,telephone,23,jul,34,4,-1,0,unknown,no +34,technician,married,secondary,no,2019,yes,yes,unknown,27,jun,102,1,-1,0,unknown,no +45,management,married,tertiary,no,22815,no,no,cellular,26,aug,653,8,-1,0,unknown,no +44,entrepreneur,married,secondary,no,887,yes,no,cellular,17,apr,519,1,14,2,failure,no +34,management,married,tertiary,no,303,yes,no,cellular,29,jan,50,1,195,2,failure,no +39,services,single,secondary,no,326,yes,no,unknown,27,may,115,1,-1,0,unknown,no +31,management,single,secondary,no,453,yes,no,unknown,9,may,384,2,-1,0,unknown,no +27,management,single,tertiary,yes,0,no,yes,cellular,8,jul,46,1,-1,0,unknown,no +41,management,married,tertiary,no,4063,yes,no,cellular,12,may,14,5,172,2,failure,no +45,technician,married,secondary,no,2403,no,no,cellular,21,nov,207,1,-1,0,unknown,no +28,services,single,secondary,no,123,yes,no,cellular,6,may,115,1,359,3,failure,no +39,unemployed,married,secondary,no,270,yes,no,unknown,3,jun,116,1,-1,0,unknown,no +31,technician,single,tertiary,no,424,no,no,cellular,29,jan,106,1,161,2,failure,no +31,management,married,tertiary,no,1230,yes,no,unknown,27,may,290,4,-1,0,unknown,no +31,admin.,single,secondary,no,387,yes,no,cellular,13,may,228,2,370,1,failure,no +35,technician,single,primary,no,744,yes,no,cellular,7,apr,1096,1,-1,0,unknown,no +32,technician,single,tertiary,no,696,no,yes,cellular,13,aug,101,4,105,4,failure,no +49,management,married,tertiary,no,4594,no,no,cellular,11,aug,157,3,-1,0,unknown,no +42,entrepreneur,married,secondary,no,1002,no,no,unknown,20,jun,109,3,-1,0,unknown,no +31,management,single,tertiary,no,-173,yes,no,unknown,6,may,396,2,-1,0,unknown,no +35,services,single,secondary,no,1239,yes,no,cellular,5,may,60,2,347,1,failure,no +31,technician,single,secondary,no,354,no,yes,cellular,22,aug,186,2,-1,0,unknown,no +45,admin.,single,secondary,no,375,no,yes,unknown,22,sep,10,1,594,6,failure,no +24,blue-collar,single,secondary,no,3,yes,no,cellular,15,may,311,1,-1,0,unknown,no +49,self-employed,divorced,secondary,no,6116,yes,no,cellular,21,nov,43,1,-1,0,unknown,no +36,self-employed,married,tertiary,no,4515,yes,no,unknown,17,jun,408,2,-1,0,unknown,no +28,blue-collar,single,tertiary,no,727,yes,no,unknown,6,jun,144,4,-1,0,unknown,no +54,retired,married,secondary,no,3846,yes,yes,unknown,19,jun,216,2,-1,0,unknown,no +27,blue-collar,single,primary,no,1128,yes,no,unknown,30,jun,88,4,-1,0,unknown,no +34,management,divorced,tertiary,no,1173,no,yes,cellular,18,jul,93,1,-1,0,unknown,no +40,management,single,tertiary,no,27,no,no,cellular,27,aug,165,6,-1,0,unknown,no +32,admin.,single,tertiary,no,328,yes,yes,unknown,26,jun,271,1,-1,0,unknown,no +41,admin.,married,secondary,no,0,yes,no,cellular,17,nov,595,2,-1,0,unknown,no +38,services,single,primary,no,-87,yes,no,cellular,13,may,531,1,-1,0,unknown,no +35,admin.,single,secondary,no,2830,no,no,unknown,20,jun,22,12,-1,0,unknown,no +31,technician,married,secondary,no,4,no,no,unknown,20,may,199,4,-1,0,unknown,no +47,entrepreneur,married,secondary,no,0,no,no,unknown,19,jun,563,2,-1,0,unknown,no +41,admin.,married,secondary,no,80,no,no,cellular,19,nov,202,1,-1,0,unknown,no +29,admin.,single,secondary,no,2768,yes,no,unknown,2,jun,121,4,-1,0,unknown,no +33,management,married,tertiary,no,5,yes,no,unknown,7,aug,12,1,-1,0,unknown,no +89,retired,married,tertiary,no,553,no,no,telephone,19,aug,2027,5,-1,0,unknown,no +54,blue-collar,married,secondary,no,-102,yes,no,cellular,27,aug,164,7,-1,0,unknown,no +72,retired,married,primary,no,2079,no,no,cellular,13,aug,100,1,191,3,other,no +29,blue-collar,married,secondary,no,1,yes,no,unknown,6,may,215,1,-1,0,unknown,no +41,blue-collar,married,secondary,no,598,yes,no,cellular,12,may,69,3,364,11,failure,no +39,housemaid,married,primary,no,34,yes,no,cellular,14,jul,377,3,-1,0,unknown,no +41,services,divorced,secondary,no,-19,yes,no,unknown,19,may,201,1,-1,0,unknown,no +31,blue-collar,married,primary,no,292,yes,yes,unknown,30,may,30,18,-1,0,unknown,no +32,services,married,secondary,no,144,yes,no,unknown,19,may,260,11,-1,0,unknown,no +52,admin.,married,secondary,no,1113,no,yes,cellular,8,jul,83,1,-1,0,unknown,no +41,entrepreneur,married,tertiary,no,121,yes,no,cellular,5,may,456,1,287,1,failure,no +45,management,married,tertiary,no,904,yes,yes,unknown,20,jun,14,9,-1,0,unknown,no +29,admin.,single,secondary,no,-498,yes,no,cellular,2,feb,99,3,227,14,failure,no +32,admin.,married,tertiary,no,0,yes,no,unknown,5,may,138,1,-1,0,unknown,no +35,blue-collar,married,secondary,no,67,no,no,unknown,20,may,60,6,-1,0,unknown,no +54,technician,married,secondary,no,3967,no,yes,cellular,29,jul,90,3,-1,0,unknown,no +41,self-employed,married,secondary,no,305,yes,no,cellular,13,may,174,2,-1,0,unknown,no +42,blue-collar,married,primary,no,260,yes,no,telephone,31,jul,175,2,-1,0,unknown,no +59,management,divorced,tertiary,no,258,yes,no,cellular,20,apr,33,1,173,1,success,no +58,retired,married,primary,no,0,no,no,cellular,4,aug,506,1,-1,0,unknown,no +32,services,single,secondary,no,72,no,no,cellular,28,jul,88,9,-1,0,unknown,no +56,technician,single,primary,no,145,yes,no,telephone,6,feb,124,2,9,2,other,no +50,management,divorced,tertiary,no,2564,yes,no,cellular,21,nov,124,4,113,8,failure,no +45,services,married,primary,no,7811,no,no,unknown,16,jun,143,2,-1,0,unknown,no +59,retired,married,secondary,no,5744,no,no,unknown,18,jun,632,1,-1,0,unknown,no +47,blue-collar,married,primary,no,673,yes,yes,unknown,6,jun,118,4,-1,0,unknown,no +54,management,single,secondary,no,602,no,no,cellular,30,jul,101,2,-1,0,unknown,no +40,services,married,secondary,no,9374,yes,no,cellular,21,nov,7,8,185,1,failure,no +37,management,married,tertiary,no,5016,no,no,cellular,8,aug,119,1,-1,0,unknown,no +29,blue-collar,married,secondary,no,508,yes,yes,unknown,19,jun,262,5,-1,0,unknown,no +36,blue-collar,married,primary,no,156,yes,no,cellular,21,nov,219,2,-1,0,unknown,no +33,management,married,tertiary,no,0,yes,no,cellular,9,jul,310,1,-1,0,unknown,no +32,management,divorced,tertiary,no,12,no,no,cellular,17,jul,321,1,-1,0,unknown,no +53,technician,married,secondary,no,7984,yes,no,cellular,2,feb,151,1,-1,0,unknown,no +33,services,married,secondary,no,255,yes,yes,cellular,21,nov,588,2,184,2,failure,no +36,admin.,married,tertiary,no,211,yes,no,unknown,5,may,146,2,-1,0,unknown,no +43,unemployed,divorced,secondary,no,1854,no,no,cellular,13,nov,131,2,197,1,success,no +45,self-employed,married,tertiary,no,-497,yes,yes,cellular,15,may,217,1,176,1,failure,no +52,services,married,secondary,no,431,no,no,cellular,26,aug,73,17,-1,0,unknown,no +48,blue-collar,divorced,secondary,no,-314,yes,no,cellular,18,may,7,5,-1,0,unknown,no +40,management,married,tertiary,no,552,no,no,cellular,28,jul,761,8,-1,0,unknown,no +31,technician,married,secondary,no,465,yes,no,cellular,12,may,259,3,-1,0,unknown,no +34,services,single,secondary,no,544,yes,no,unknown,27,may,257,2,-1,0,unknown,no +54,blue-collar,married,primary,no,-636,yes,no,unknown,30,may,324,3,-1,0,unknown,no +40,management,married,tertiary,no,7780,no,no,telephone,4,may,364,1,355,1,other,no +55,unemployed,single,primary,no,274,no,no,cellular,9,feb,7,5,-1,0,unknown,no +33,management,married,tertiary,no,1148,no,no,cellular,19,nov,299,1,-1,0,unknown,no +50,management,married,tertiary,no,67,no,yes,unknown,20,jun,156,3,-1,0,unknown,no +59,retired,divorced,secondary,no,914,no,no,cellular,28,jan,192,1,-1,0,unknown,no +40,services,married,secondary,no,1293,yes,no,cellular,13,apr,128,3,-1,0,unknown,no +45,admin.,married,secondary,no,111,yes,no,cellular,11,aug,173,1,-1,0,unknown,no +32,management,married,tertiary,no,937,no,no,cellular,28,aug,90,1,94,2,failure,no +50,blue-collar,married,unknown,no,605,yes,no,unknown,15,may,200,1,-1,0,unknown,no +58,blue-collar,married,secondary,no,1457,yes,no,cellular,8,jul,144,4,-1,0,unknown,no +38,management,married,tertiary,no,1617,yes,no,cellular,16,apr,691,1,-1,0,unknown,no +57,technician,married,secondary,no,29207,yes,no,telephone,21,nov,232,2,-1,0,unknown,no +31,blue-collar,married,secondary,no,812,yes,no,cellular,23,sep,245,1,-1,0,unknown,no +69,retired,married,primary,no,324,no,no,cellular,12,aug,875,1,189,4,success,no +26,admin.,single,secondary,no,1327,no,no,cellular,30,mar,171,4,-1,0,unknown,no +30,admin.,married,secondary,no,482,no,no,cellular,23,apr,86,1,-1,0,unknown,no +49,blue-collar,married,secondary,no,134,yes,yes,unknown,27,may,265,2,-1,0,unknown,no +36,blue-collar,married,primary,no,347,no,no,cellular,4,feb,167,2,-1,0,unknown,no +37,technician,married,secondary,no,1824,yes,no,cellular,3,jul,112,2,324,2,other,no +55,blue-collar,divorced,primary,no,410,no,yes,cellular,11,jul,221,2,-1,0,unknown,no +36,management,single,tertiary,no,-38,yes,no,unknown,14,may,784,1,-1,0,unknown,no +31,self-employed,married,secondary,no,581,yes,no,cellular,13,oct,845,1,152,6,failure,no +30,technician,divorced,secondary,no,3100,yes,no,unknown,21,may,154,4,-1,0,unknown,no +36,services,married,secondary,no,0,yes,yes,cellular,15,jul,201,4,-1,0,unknown,no +50,self-employed,married,secondary,no,1138,no,no,cellular,14,aug,219,10,-1,0,unknown,no +53,unknown,married,unknown,no,0,no,no,cellular,25,aug,209,5,-1,0,unknown,no +39,services,married,secondary,no,304,yes,yes,unknown,9,may,323,1,-1,0,unknown,no +31,technician,married,tertiary,no,313,yes,no,cellular,27,aug,114,2,-1,0,unknown,no +49,blue-collar,married,primary,no,1898,no,no,cellular,21,aug,159,1,-1,0,unknown,no +35,services,married,secondary,no,142,yes,no,cellular,20,nov,315,2,196,4,failure,no +45,blue-collar,married,primary,no,4696,no,no,unknown,17,jun,99,1,-1,0,unknown,no +30,management,single,secondary,no,135,no,no,cellular,14,aug,112,2,-1,0,unknown,no +47,self-employed,married,primary,no,574,yes,no,cellular,20,nov,137,5,-1,0,unknown,no +37,blue-collar,married,primary,no,1322,yes,no,cellular,21,nov,14,8,185,1,other,no +35,technician,married,tertiary,no,703,no,no,cellular,20,apr,169,1,-1,0,unknown,no +41,management,single,tertiary,no,0,no,no,cellular,7,aug,91,2,-1,0,unknown,no +35,unemployed,married,secondary,no,1,yes,no,cellular,28,jul,173,8,-1,0,unknown,no +60,retired,married,primary,no,55,no,no,cellular,4,jun,207,1,-1,0,unknown,no +58,technician,married,secondary,no,786,yes,no,unknown,7,may,165,3,-1,0,unknown,no +28,management,married,tertiary,no,22,yes,no,cellular,31,jul,59,3,-1,0,unknown,no +57,unemployed,married,secondary,no,890,no,no,cellular,5,feb,343,4,-1,0,unknown,no +35,management,married,tertiary,no,451,yes,no,cellular,17,apr,220,6,-1,0,unknown,no +54,admin.,married,tertiary,no,59,yes,no,cellular,10,jul,268,1,-1,0,unknown,no +31,management,single,tertiary,no,15,no,no,cellular,11,aug,119,2,-1,0,unknown,no +32,blue-collar,single,secondary,no,15341,no,no,unknown,21,may,738,3,-1,0,unknown,no +56,admin.,single,secondary,no,-273,no,no,cellular,8,jul,119,2,-1,0,unknown,no +35,self-employed,married,tertiary,yes,28,no,yes,cellular,8,jul,259,1,-1,0,unknown,no +33,blue-collar,married,secondary,no,58,no,no,unknown,16,may,144,2,-1,0,unknown,no +50,technician,married,secondary,no,103,yes,no,cellular,3,feb,109,4,267,6,failure,no +46,management,single,secondary,no,244,yes,no,unknown,15,may,244,1,-1,0,unknown,no +35,services,married,secondary,no,0,no,no,unknown,9,jun,115,4,-1,0,unknown,no +49,admin.,married,secondary,no,880,yes,yes,cellular,18,may,22,3,-1,0,unknown,no +56,management,divorced,tertiary,no,-141,no,no,cellular,28,jul,101,4,-1,0,unknown,no +33,blue-collar,single,primary,no,447,yes,no,unknown,9,may,180,2,-1,0,unknown,no +37,entrepreneur,married,primary,no,62,no,no,cellular,31,jul,404,2,-1,0,unknown,no +30,blue-collar,single,secondary,no,148,no,no,cellular,2,apr,206,1,-1,0,unknown,no +34,admin.,single,secondary,no,79,yes,no,cellular,28,jul,219,3,-1,0,unknown,no +29,blue-collar,single,secondary,no,9,yes,no,cellular,11,may,262,3,-1,0,unknown,no +32,management,married,tertiary,no,578,no,yes,cellular,22,jul,29,2,-1,0,unknown,no +29,blue-collar,married,primary,no,-382,yes,no,cellular,28,jul,35,2,-1,0,unknown,no +50,blue-collar,married,primary,no,888,no,yes,telephone,10,jul,160,3,-1,0,unknown,no +58,technician,single,secondary,no,382,no,no,cellular,13,aug,460,2,-1,0,unknown,no +30,management,married,tertiary,no,1390,no,no,cellular,20,aug,552,4,-1,0,unknown,no +52,entrepreneur,married,primary,no,-104,no,yes,cellular,10,jul,124,1,-1,0,unknown,no +39,management,married,tertiary,no,22,yes,no,unknown,2,jun,493,1,-1,0,unknown,no +43,technician,divorced,secondary,no,-36,yes,no,cellular,17,nov,190,1,104,1,failure,no +51,technician,married,secondary,no,130,no,no,cellular,22,aug,547,3,-1,0,unknown,no +38,admin.,single,secondary,no,77,no,no,cellular,20,nov,441,4,-1,0,unknown,no +30,self-employed,single,secondary,no,1031,no,no,unknown,20,oct,7,1,-1,0,unknown,no +52,management,divorced,primary,no,92,no,yes,cellular,16,jul,469,7,-1,0,unknown,no +40,technician,married,tertiary,no,1063,yes,yes,cellular,19,aug,264,2,-1,0,unknown,no +37,technician,married,secondary,no,0,yes,yes,cellular,15,jul,101,3,-1,0,unknown,no +30,blue-collar,married,secondary,no,282,yes,yes,unknown,23,may,148,2,-1,0,unknown,no +51,management,married,tertiary,no,1394,yes,no,cellular,5,aug,115,1,-1,0,unknown,no +27,technician,single,secondary,no,16,no,no,unknown,19,may,193,1,-1,0,unknown,no +35,blue-collar,married,secondary,no,975,yes,no,cellular,16,jul,102,1,-1,0,unknown,no +47,admin.,married,tertiary,no,12276,no,no,unknown,20,jun,77,5,-1,0,unknown,no +29,blue-collar,married,secondary,no,313,yes,no,cellular,20,apr,172,2,343,3,other,no +52,admin.,married,secondary,no,1648,yes,no,cellular,19,nov,172,3,-1,0,unknown,no +43,admin.,single,secondary,no,6,no,no,cellular,4,feb,58,1,264,1,failure,no +31,blue-collar,married,primary,no,1127,yes,no,telephone,13,may,43,1,349,1,failure,no +54,blue-collar,married,secondary,no,1070,no,no,cellular,18,nov,373,4,-1,0,unknown,no +59,housemaid,married,secondary,no,1040,no,no,cellular,5,aug,123,2,-1,0,unknown,no +51,blue-collar,married,secondary,no,50,yes,yes,unknown,6,may,121,1,-1,0,unknown,no +32,management,married,tertiary,no,62,yes,no,telephone,13,nov,45,1,-1,0,unknown,no +42,blue-collar,married,secondary,no,-755,yes,yes,unknown,2,jun,312,1,-1,0,unknown,no +46,blue-collar,married,secondary,no,4707,yes,no,unknown,23,may,93,8,-1,0,unknown,no +30,technician,single,secondary,no,925,no,no,cellular,20,nov,240,1,-1,0,unknown,no +42,management,divorced,primary,no,0,yes,no,cellular,19,nov,73,5,-1,0,unknown,no +39,blue-collar,married,primary,no,867,yes,no,unknown,7,may,481,1,-1,0,unknown,no +31,management,single,tertiary,no,-201,yes,no,cellular,22,aug,81,4,-1,0,unknown,no +35,blue-collar,married,secondary,no,120,yes,no,unknown,28,may,245,2,-1,0,unknown,no +34,admin.,married,secondary,no,61,no,yes,unknown,5,may,21,1,-1,0,unknown,no +42,technician,divorced,secondary,no,0,yes,no,unknown,28,may,471,2,-1,0,unknown,no +57,management,married,primary,no,687,yes,yes,telephone,21,jul,107,3,-1,0,unknown,no +38,management,single,tertiary,no,38,no,no,cellular,20,aug,105,2,-1,0,unknown,no +29,blue-collar,single,secondary,no,2806,no,no,cellular,15,oct,294,1,93,5,other,no +46,management,married,secondary,no,-27,yes,no,cellular,6,may,289,1,-1,0,unknown,no +48,management,married,tertiary,no,2498,no,no,cellular,14,aug,98,2,-1,0,unknown,no +33,technician,married,secondary,no,390,no,no,cellular,13,aug,460,2,-1,0,unknown,no +59,admin.,single,secondary,no,-423,yes,yes,cellular,20,apr,84,1,-1,0,unknown,no +23,technician,single,secondary,no,1587,yes,yes,cellular,14,may,502,2,-1,0,unknown,no +37,blue-collar,married,secondary,no,288,yes,no,cellular,5,may,159,6,-1,0,unknown,no +40,technician,single,secondary,no,822,yes,yes,cellular,29,jan,155,2,245,3,failure,no +44,blue-collar,divorced,secondary,no,-222,yes,no,unknown,27,may,112,3,-1,0,unknown,no +37,blue-collar,single,secondary,no,197,yes,no,unknown,16,may,251,3,-1,0,unknown,no +28,services,single,secondary,no,159,yes,no,telephone,12,may,345,2,-1,0,unknown,no +39,technician,single,secondary,no,681,yes,no,unknown,5,jun,170,1,-1,0,unknown,no +57,retired,divorced,primary,yes,0,no,yes,cellular,24,jul,125,2,-1,0,unknown,no +38,blue-collar,single,unknown,no,495,yes,no,unknown,8,may,297,1,-1,0,unknown,no +60,blue-collar,married,secondary,no,414,no,no,cellular,4,feb,147,1,-1,0,unknown,no +38,management,divorced,tertiary,no,151,yes,no,cellular,17,jul,50,1,-1,0,unknown,no +26,student,single,secondary,no,2572,yes,no,cellular,5,may,620,1,-1,0,unknown,no +32,blue-collar,married,secondary,no,320,yes,no,unknown,6,may,198,2,-1,0,unknown,no +35,management,single,tertiary,no,304,yes,no,cellular,19,nov,274,2,-1,0,unknown,no +30,management,single,secondary,no,1299,no,no,cellular,14,aug,515,2,-1,0,unknown,no +37,blue-collar,married,secondary,no,740,yes,no,cellular,7,may,434,3,342,2,failure,no +36,blue-collar,married,secondary,no,537,no,yes,cellular,7,jul,206,6,-1,0,unknown,no +34,admin.,single,secondary,no,1581,yes,yes,unknown,20,may,52,11,-1,0,unknown,no +28,blue-collar,married,secondary,no,708,yes,no,unknown,6,jun,339,5,-1,0,unknown,no +37,blue-collar,married,primary,no,178,yes,yes,unknown,9,jun,72,1,-1,0,unknown,no +31,services,single,secondary,no,671,yes,no,unknown,7,may,193,3,-1,0,unknown,no +34,blue-collar,married,primary,no,3,yes,no,telephone,8,may,26,1,-1,0,unknown,no +28,technician,single,secondary,no,981,yes,no,cellular,24,jul,225,1,-1,0,unknown,no +38,technician,married,tertiary,no,1042,yes,no,cellular,4,feb,419,2,-1,0,unknown,no +80,retired,married,primary,no,1021,no,no,telephone,26,feb,37,1,-1,0,unknown,no +59,retired,married,secondary,no,1035,yes,yes,cellular,5,aug,223,1,-1,0,unknown,no +54,management,married,tertiary,no,1114,yes,no,cellular,21,nov,1195,2,175,1,other,no +29,blue-collar,single,tertiary,no,98,no,no,cellular,10,aug,170,2,-1,0,unknown,no +39,technician,married,secondary,no,24,yes,no,cellular,28,jan,79,4,-1,0,unknown,no +30,technician,single,secondary,no,486,no,no,cellular,28,jan,335,3,-1,0,unknown,no +41,services,divorced,secondary,no,727,yes,no,cellular,11,may,246,1,-1,0,unknown,no +48,technician,married,secondary,no,-205,yes,yes,cellular,9,jul,112,1,-1,0,unknown,no +26,blue-collar,married,secondary,no,895,yes,no,cellular,4,feb,820,3,-1,0,unknown,no +55,admin.,married,primary,no,319,no,no,cellular,21,nov,124,3,-1,0,unknown,no +36,admin.,single,secondary,no,206,yes,no,unknown,8,may,183,1,-1,0,unknown,no +31,services,married,secondary,no,-414,yes,no,cellular,6,may,1369,3,-1,0,unknown,no +35,blue-collar,married,primary,yes,-1489,yes,yes,unknown,29,may,177,1,-1,0,unknown,no +30,management,married,tertiary,no,0,no,no,cellular,7,aug,74,1,-1,0,unknown,no +26,blue-collar,single,secondary,no,249,yes,no,cellular,29,jan,235,3,262,5,failure,no +32,management,married,tertiary,no,927,no,no,cellular,8,oct,282,1,-1,0,unknown,no +43,blue-collar,divorced,primary,no,515,yes,no,cellular,18,nov,182,1,-1,0,unknown,no +48,admin.,married,secondary,no,1060,yes,no,cellular,20,apr,87,2,318,3,failure,no +49,technician,married,secondary,no,308,no,no,cellular,27,jul,266,5,-1,0,unknown,no +34,blue-collar,married,secondary,no,808,yes,yes,cellular,17,jul,20,3,-1,0,unknown,no +27,blue-collar,single,primary,no,431,yes,no,unknown,15,may,286,2,-1,0,unknown,no +31,admin.,single,secondary,no,396,yes,no,unknown,19,may,104,1,-1,0,unknown,no +35,technician,single,secondary,no,-89,yes,no,cellular,15,may,75,1,368,1,failure,no +40,admin.,married,secondary,no,-253,yes,no,cellular,9,jul,177,1,-1,0,unknown,no +39,services,married,secondary,no,0,yes,no,unknown,20,may,793,2,-1,0,unknown,no +19,student,single,unknown,no,60,no,no,cellular,14,aug,253,1,-1,0,unknown,no +40,services,married,secondary,no,695,yes,no,cellular,11,may,270,1,348,10,failure,no +25,admin.,single,tertiary,no,1141,yes,no,cellular,5,may,718,1,347,1,failure,no +38,technician,divorced,tertiary,no,791,yes,no,unknown,26,may,89,2,-1,0,unknown,no +62,blue-collar,married,primary,no,1381,no,no,cellular,19,oct,1020,1,-1,0,unknown,no +27,services,married,secondary,no,0,yes,no,cellular,23,jul,198,13,-1,0,unknown,no +40,technician,married,secondary,no,-28,yes,yes,unknown,30,may,289,2,-1,0,unknown,no +56,management,married,tertiary,no,412,no,no,telephone,20,nov,179,6,-1,0,unknown,no +33,management,married,tertiary,no,310,no,no,cellular,29,aug,179,2,-1,0,unknown,no +52,blue-collar,married,secondary,no,1319,no,no,telephone,30,apr,37,2,-1,0,unknown,no +33,blue-collar,married,secondary,no,0,yes,yes,cellular,28,jul,83,12,-1,0,unknown,no +38,services,married,secondary,no,-314,yes,no,unknown,28,may,66,2,-1,0,unknown,no +27,services,married,secondary,no,511,yes,no,unknown,30,jun,85,5,-1,0,unknown,no +54,retired,married,secondary,no,-152,yes,yes,unknown,26,may,14,11,-1,0,unknown,no +35,admin.,married,secondary,no,907,no,yes,unknown,2,jul,97,4,-1,0,unknown,no +41,blue-collar,single,primary,no,22,yes,no,unknown,14,may,152,1,-1,0,unknown,no +28,blue-collar,single,secondary,no,0,no,yes,cellular,31,jul,11,21,-1,0,unknown,no +55,management,divorced,tertiary,no,8044,yes,no,cellular,11,may,175,5,333,19,other,no +56,admin.,single,secondary,no,1854,yes,no,telephone,7,may,45,1,342,2,failure,no +33,blue-collar,single,secondary,no,1794,yes,no,cellular,12,may,360,1,173,1,other,no +42,technician,married,secondary,no,2,no,no,unknown,29,may,249,2,-1,0,unknown,no +34,student,single,unknown,no,2321,no,no,cellular,9,nov,600,2,99,5,failure,no +35,technician,single,secondary,no,144,no,no,cellular,22,jul,163,2,-1,0,unknown,no +46,technician,divorced,secondary,no,1,yes,yes,unknown,26,may,200,3,-1,0,unknown,no +31,self-employed,single,secondary,no,762,no,no,cellular,11,aug,312,3,-1,0,unknown,no +48,self-employed,married,tertiary,no,16,yes,yes,cellular,18,nov,214,1,-1,0,unknown,no +38,technician,married,secondary,no,20,no,no,cellular,2,feb,147,1,-1,0,unknown,no +47,services,married,secondary,no,2070,yes,yes,unknown,26,may,136,1,-1,0,unknown,no +48,management,married,tertiary,no,308,yes,no,cellular,14,jul,125,5,-1,0,unknown,no +57,technician,married,unknown,no,1617,yes,no,unknown,7,may,96,2,-1,0,unknown,no +30,admin.,married,secondary,no,39,yes,no,cellular,28,jul,101,3,-1,0,unknown,no +39,blue-collar,married,primary,no,332,yes,no,unknown,8,may,277,3,-1,0,unknown,no +31,management,single,tertiary,no,713,no,no,cellular,28,aug,162,1,-1,0,unknown,no +44,blue-collar,married,secondary,no,2885,yes,no,unknown,30,may,63,3,-1,0,unknown,no +38,services,married,secondary,no,968,yes,no,cellular,6,apr,272,1,-1,0,unknown,no +58,unknown,married,tertiary,no,4150,no,no,unknown,6,jun,363,1,-1,0,unknown,no +42,management,married,tertiary,no,687,no,no,cellular,11,aug,667,2,-1,0,unknown,no +33,management,married,secondary,no,333,no,no,cellular,28,aug,80,6,-1,0,unknown,no +55,retired,married,primary,no,1821,no,no,cellular,8,aug,224,2,-1,0,unknown,no +34,blue-collar,married,secondary,no,-436,yes,no,unknown,26,may,317,1,-1,0,unknown,no +30,unknown,single,unknown,no,6929,no,no,cellular,19,nov,341,1,-1,0,unknown,no +35,technician,single,secondary,no,126,no,no,cellular,22,aug,112,2,-1,0,unknown,no +35,technician,married,secondary,no,2019,yes,yes,cellular,18,nov,83,2,144,1,failure,no +56,retired,married,secondary,no,878,no,no,unknown,20,jun,123,3,-1,0,unknown,no +27,management,single,tertiary,no,6791,no,no,telephone,22,mar,174,2,229,28,success,no +39,self-employed,divorced,secondary,no,0,yes,no,unknown,23,may,210,2,-1,0,unknown,no +36,admin.,married,secondary,no,110,yes,no,telephone,4,feb,185,1,-1,0,unknown,no +35,self-employed,married,secondary,no,28,no,yes,unknown,2,jul,159,3,-1,0,unknown,no +34,housemaid,single,primary,no,443,no,no,cellular,30,jan,10,1,2,1,other,no +28,unemployed,single,primary,no,236,no,no,cellular,6,feb,460,3,-1,0,unknown,no +37,technician,married,secondary,no,2707,yes,no,telephone,16,jul,109,1,-1,0,unknown,no +57,technician,married,secondary,no,1753,yes,no,cellular,7,may,539,1,-1,0,unknown,no +34,services,married,secondary,no,1182,yes,no,unknown,28,may,124,1,-1,0,unknown,no +38,management,single,tertiary,no,427,yes,no,cellular,18,nov,253,1,182,1,failure,no +48,technician,married,primary,no,788,no,no,telephone,9,jul,36,2,-1,0,unknown,no +35,admin.,married,secondary,no,0,no,no,cellular,7,jul,78,11,-1,0,unknown,no +40,blue-collar,married,primary,yes,-509,yes,no,unknown,23,may,298,1,-1,0,unknown,no +48,services,divorced,primary,no,-110,no,yes,unknown,19,jun,164,2,-1,0,unknown,no +54,blue-collar,married,primary,no,244,yes,no,cellular,29,jul,337,2,-1,0,unknown,no +49,services,divorced,secondary,no,933,no,yes,cellular,29,jul,92,33,-1,0,unknown,no +38,technician,married,tertiary,no,940,no,no,cellular,12,aug,191,7,-1,0,unknown,no +44,entrepreneur,married,tertiary,no,1631,yes,no,cellular,17,nov,81,1,195,2,failure,no +44,unemployed,married,secondary,yes,-505,yes,no,unknown,3,jun,113,11,-1,0,unknown,no +60,admin.,married,secondary,no,7336,no,no,cellular,31,mar,494,1,-1,0,unknown,no +55,services,single,secondary,no,-40,yes,no,unknown,12,may,178,2,-1,0,unknown,no +27,student,single,primary,yes,25,no,no,unknown,28,aug,8,1,-1,0,unknown,no +33,management,single,secondary,no,0,no,no,unknown,20,may,190,2,-1,0,unknown,no +32,technician,married,secondary,no,5,yes,no,cellular,17,nov,114,1,-1,0,unknown,no +51,blue-collar,married,secondary,no,-92,yes,no,unknown,4,jun,28,4,-1,0,unknown,no +44,admin.,married,secondary,no,497,yes,no,cellular,3,feb,321,3,270,2,other,no +49,blue-collar,married,primary,no,2356,no,yes,telephone,14,jul,236,2,-1,0,unknown,no +42,blue-collar,married,secondary,no,3,yes,no,cellular,12,may,118,1,-1,0,unknown,no +35,services,married,secondary,no,128,yes,no,cellular,12,may,136,1,-1,0,unknown,no +32,admin.,married,tertiary,no,390,yes,yes,cellular,5,may,100,1,243,1,other,no +39,technician,single,secondary,no,300,no,no,cellular,10,sep,315,6,394,1,failure,no +54,technician,married,secondary,no,827,no,yes,unknown,20,jun,294,2,-1,0,unknown,no +35,technician,married,tertiary,no,25,no,no,cellular,27,aug,219,2,-1,0,unknown,no +41,technician,single,primary,no,340,yes,no,cellular,13,may,262,1,349,1,failure,no +35,management,married,tertiary,no,867,yes,no,cellular,20,nov,298,2,171,3,success,no +41,blue-collar,married,secondary,no,140,yes,no,cellular,29,jan,636,2,-1,0,unknown,no +36,technician,married,secondary,no,3,no,no,cellular,20,aug,100,4,-1,0,unknown,no +51,self-employed,married,secondary,no,4920,no,no,telephone,2,jun,392,2,-1,0,unknown,no +59,unknown,single,secondary,no,3237,no,no,unknown,6,jun,100,3,-1,0,unknown,no +44,blue-collar,married,primary,no,0,yes,yes,cellular,21,nov,32,2,116,3,other,no +49,admin.,married,secondary,no,1096,yes,no,cellular,17,apr,609,1,303,5,failure,no +37,admin.,single,tertiary,no,869,no,no,cellular,30,jul,60,8,-1,0,unknown,no +60,technician,divorced,tertiary,no,1900,yes,no,unknown,29,may,77,3,-1,0,unknown,no +40,management,married,tertiary,no,413,yes,no,unknown,14,may,150,1,-1,0,unknown,no +27,blue-collar,married,primary,yes,-588,no,no,unknown,13,may,531,2,-1,0,unknown,no +34,housemaid,married,secondary,yes,0,no,no,cellular,21,aug,398,2,-1,0,unknown,no +41,technician,married,secondary,no,2490,yes,no,unknown,21,may,115,2,-1,0,unknown,no +39,services,married,secondary,no,20928,no,no,cellular,14,may,1166,1,352,1,other,no +34,admin.,married,secondary,no,560,yes,no,unknown,5,may,198,3,-1,0,unknown,no +38,blue-collar,divorced,secondary,no,0,yes,no,cellular,11,may,580,1,173,1,failure,no +56,blue-collar,married,primary,no,826,yes,no,cellular,21,jul,853,1,-1,0,unknown,no +42,services,married,secondary,no,115,yes,yes,cellular,17,apr,161,1,149,2,failure,no +47,student,single,unknown,no,107,no,no,telephone,15,jul,119,8,-1,0,unknown,no +32,blue-collar,married,secondary,no,320,yes,yes,cellular,3,feb,22,4,-1,0,unknown,no +37,blue-collar,married,secondary,yes,-399,yes,yes,unknown,3,jun,21,3,-1,0,unknown,no +25,student,single,secondary,no,703,no,no,cellular,5,may,1100,3,-1,0,unknown,no +29,technician,divorced,secondary,no,328,yes,yes,cellular,4,feb,25,1,-1,0,unknown,no +48,management,divorced,tertiary,no,148,no,no,cellular,12,aug,152,2,-1,0,unknown,no +39,self-employed,single,tertiary,no,2298,yes,yes,cellular,20,apr,13,2,319,18,other,no +31,blue-collar,married,secondary,no,64,yes,no,cellular,18,jul,302,3,-1,0,unknown,no +28,management,single,tertiary,no,4013,yes,no,unknown,4,jun,386,1,-1,0,unknown,no +32,management,married,tertiary,no,0,no,no,unknown,9,may,280,1,-1,0,unknown,no +35,technician,married,tertiary,no,633,yes,yes,cellular,2,feb,76,3,5,3,other,no +51,admin.,married,unknown,no,-1137,yes,yes,telephone,11,may,567,3,325,1,failure,no +32,blue-collar,married,primary,no,902,yes,no,unknown,27,may,106,2,-1,0,unknown,no +30,blue-collar,married,secondary,no,2850,no,no,unknown,8,may,181,2,-1,0,unknown,no +54,management,married,tertiary,no,313,yes,no,unknown,5,may,83,2,-1,0,unknown,no +41,blue-collar,married,secondary,no,923,yes,no,unknown,14,may,249,2,-1,0,unknown,no +35,admin.,single,primary,no,8,yes,no,unknown,16,may,148,18,-1,0,unknown,no +44,technician,married,secondary,no,945,yes,no,cellular,4,aug,190,1,-1,0,unknown,no +58,management,married,tertiary,no,2261,yes,no,cellular,3,jun,1361,1,391,1,failure,no +43,blue-collar,married,primary,no,18,yes,no,cellular,14,may,131,2,370,3,other,no +52,blue-collar,married,secondary,no,5828,yes,no,telephone,13,may,276,2,-1,0,unknown,no +60,retired,married,primary,no,6307,yes,no,unknown,11,jun,362,1,-1,0,unknown,no +32,management,single,tertiary,no,537,no,no,unknown,29,may,187,3,-1,0,unknown,no +41,blue-collar,married,secondary,no,393,yes,yes,cellular,10,jul,122,1,-1,0,unknown,no +54,blue-collar,divorced,primary,no,215,yes,no,unknown,4,jun,71,5,-1,0,unknown,no +30,blue-collar,single,secondary,no,132,yes,no,unknown,16,may,329,1,-1,0,unknown,no +36,technician,single,secondary,no,35,no,no,cellular,29,aug,493,2,-1,0,unknown,no +27,admin.,single,secondary,no,125,no,no,cellular,21,jul,104,1,288,8,failure,no +32,technician,single,secondary,no,129,yes,no,cellular,7,may,213,1,-1,0,unknown,no +34,management,married,tertiary,no,0,no,no,cellular,6,aug,139,2,-1,0,unknown,no +43,admin.,married,secondary,no,315,no,no,cellular,23,jul,129,2,-1,0,unknown,no +43,services,married,primary,no,2567,yes,no,cellular,14,may,109,1,360,2,failure,no +31,management,divorced,tertiary,no,883,yes,no,cellular,19,nov,168,1,-1,0,unknown,no +37,technician,married,secondary,no,1120,yes,no,unknown,30,may,103,5,-1,0,unknown,no +51,technician,divorced,secondary,no,0,yes,no,unknown,28,may,463,2,-1,0,unknown,no +52,blue-collar,married,secondary,no,1117,yes,no,cellular,13,may,365,1,-1,0,unknown,no +57,blue-collar,married,secondary,no,773,yes,yes,unknown,18,jun,97,8,-1,0,unknown,no +32,technician,single,tertiary,no,390,yes,no,unknown,23,may,85,1,-1,0,unknown,no +47,admin.,married,secondary,no,1358,yes,no,cellular,14,may,80,4,-1,0,unknown,no +31,management,married,tertiary,no,216,no,no,cellular,22,jul,47,1,-1,0,unknown,no +27,blue-collar,single,secondary,no,317,yes,no,unknown,20,may,16,10,-1,0,unknown,no +31,blue-collar,single,primary,no,2369,yes,no,cellular,18,may,87,1,-1,0,unknown,no +36,admin.,divorced,tertiary,no,125,yes,no,unknown,26,may,172,1,-1,0,unknown,no +44,blue-collar,married,primary,no,6,no,no,cellular,10,jul,338,9,-1,0,unknown,no +34,blue-collar,married,primary,no,15841,yes,no,cellular,20,apr,423,5,-1,0,unknown,no +32,housemaid,married,primary,no,51,yes,no,cellular,12,may,324,1,-1,0,unknown,no +52,management,married,secondary,no,0,yes,yes,unknown,27,may,62,13,-1,0,unknown,no +60,retired,divorced,primary,no,-79,yes,yes,cellular,29,jan,192,1,-1,0,unknown,no +30,services,single,secondary,no,1881,no,yes,unknown,26,jun,29,1,-1,0,unknown,no +48,blue-collar,married,primary,no,456,yes,yes,unknown,19,may,289,1,-1,0,unknown,no +39,management,married,primary,no,1873,no,no,unknown,9,jun,161,2,-1,0,unknown,no +59,management,divorced,tertiary,no,0,yes,no,cellular,31,jul,52,8,-1,0,unknown,no +42,admin.,married,secondary,no,445,yes,no,unknown,7,may,202,2,-1,0,unknown,no +77,retired,married,secondary,no,2123,no,no,telephone,4,feb,141,4,-1,0,unknown,no +29,technician,married,secondary,no,767,yes,no,cellular,5,feb,253,1,-1,0,unknown,no +49,technician,divorced,secondary,no,229,no,no,cellular,8,aug,219,2,-1,0,unknown,no +57,retired,married,secondary,no,3783,yes,no,unknown,6,jun,198,3,-1,0,unknown,no +37,blue-collar,married,secondary,no,140,yes,yes,cellular,7,may,490,1,-1,0,unknown,no +35,technician,married,secondary,no,6,yes,no,cellular,11,may,204,2,348,2,failure,no +63,retired,divorced,secondary,no,859,no,no,cellular,13,feb,92,1,-1,0,unknown,no +37,technician,married,secondary,no,261,no,no,cellular,29,aug,301,4,-1,0,unknown,no +37,services,married,secondary,no,50,yes,no,unknown,8,may,352,3,-1,0,unknown,no +52,admin.,married,secondary,no,-462,yes,no,cellular,9,feb,172,5,-1,0,unknown,no +60,retired,married,secondary,no,0,no,no,cellular,5,aug,143,3,-1,0,unknown,no +36,technician,married,secondary,no,283,yes,yes,unknown,27,jun,56,2,-1,0,unknown,no +48,self-employed,married,secondary,no,91,no,no,cellular,21,aug,136,8,-1,0,unknown,no +47,entrepreneur,married,tertiary,no,0,no,no,telephone,18,nov,103,2,-1,0,unknown,no +56,management,divorced,tertiary,no,442,no,no,unknown,28,may,77,3,-1,0,unknown,no +45,blue-collar,married,secondary,no,0,no,no,cellular,30,jul,25,2,-1,0,unknown,no +53,housemaid,married,secondary,no,1182,yes,no,cellular,7,sep,82,1,293,1,failure,no +56,blue-collar,married,secondary,no,316,yes,no,unknown,19,may,27,1,-1,0,unknown,no +59,technician,married,secondary,no,316,no,no,cellular,14,aug,200,4,-1,0,unknown,no +34,management,married,tertiary,no,402,no,no,cellular,26,may,147,1,-1,0,unknown,no +45,unemployed,single,primary,no,8725,no,no,cellular,8,jul,286,2,-1,0,unknown,no +32,technician,married,unknown,no,102,yes,no,unknown,21,may,12,11,-1,0,unknown,no +60,self-employed,married,secondary,no,0,no,no,unknown,6,jun,97,1,-1,0,unknown,no +54,blue-collar,divorced,secondary,no,615,no,yes,cellular,20,nov,230,1,-1,0,unknown,no +41,services,married,secondary,no,0,yes,no,unknown,5,may,114,2,-1,0,unknown,no +44,blue-collar,married,secondary,no,3060,yes,no,cellular,20,apr,87,2,151,3,failure,no +40,technician,married,secondary,no,990,yes,no,cellular,6,feb,252,3,-1,0,unknown,no +40,services,divorced,primary,no,1937,yes,no,unknown,2,jun,86,1,-1,0,unknown,no +29,technician,married,secondary,no,428,no,no,cellular,14,jul,131,4,-1,0,unknown,no +28,technician,married,secondary,no,655,yes,no,unknown,9,may,179,2,-1,0,unknown,no +35,management,married,tertiary,no,16,no,no,cellular,19,nov,185,1,-1,0,unknown,no +33,management,married,tertiary,no,2044,yes,no,cellular,15,may,102,3,177,1,failure,no +33,management,single,tertiary,no,20,no,no,cellular,21,aug,329,2,-1,0,unknown,no +50,retired,married,primary,no,29,no,no,unknown,20,jun,135,5,-1,0,unknown,no +56,management,married,primary,no,-155,yes,no,cellular,17,nov,282,1,-1,0,unknown,no +37,management,single,tertiary,no,340,no,no,cellular,11,aug,90,4,-1,0,unknown,no +53,technician,married,secondary,no,1776,no,no,unknown,18,jun,443,7,-1,0,unknown,no +27,blue-collar,single,secondary,no,23,no,no,cellular,26,feb,590,2,-1,0,unknown,no +46,technician,married,secondary,no,863,yes,no,cellular,3,feb,67,3,-1,0,unknown,no +36,blue-collar,divorced,secondary,no,7051,no,yes,cellular,15,jul,106,13,-1,0,unknown,no +37,admin.,married,secondary,no,1049,no,no,cellular,31,jul,126,5,-1,0,unknown,no +28,admin.,married,tertiary,no,174,yes,yes,cellular,11,feb,56,1,184,2,failure,no +40,blue-collar,married,primary,no,137,no,yes,cellular,10,jul,214,1,-1,0,unknown,no +48,blue-collar,married,primary,no,783,no,yes,cellular,6,aug,90,2,-1,0,unknown,no +46,services,married,primary,no,116,yes,no,cellular,18,may,267,4,341,3,failure,no +39,technician,married,primary,no,2118,yes,no,cellular,17,apr,266,2,-1,0,unknown,no +37,management,single,tertiary,no,10269,yes,no,cellular,18,may,28,2,-1,0,unknown,no +26,admin.,single,secondary,no,141,yes,no,cellular,18,may,19,4,349,6,other,no +35,blue-collar,divorced,primary,no,13,no,yes,cellular,9,jul,364,1,-1,0,unknown,no +37,management,single,tertiary,no,0,no,no,cellular,7,jul,643,3,-1,0,unknown,no +32,entrepreneur,married,secondary,no,1996,yes,no,cellular,18,nov,271,1,-1,0,unknown,no +31,admin.,single,secondary,no,1129,yes,no,cellular,18,may,145,3,-1,0,unknown,no +36,housemaid,single,tertiary,no,561,no,no,unknown,6,jun,274,2,-1,0,unknown,no +36,management,married,tertiary,no,539,no,no,cellular,11,aug,176,1,-1,0,unknown,no +38,services,married,secondary,no,-349,yes,no,cellular,20,apr,111,2,328,5,failure,no +45,admin.,married,secondary,no,6971,no,no,cellular,22,may,119,1,-1,0,unknown,no +58,housemaid,married,tertiary,no,497,no,no,unknown,11,jun,138,5,-1,0,unknown,no +34,management,married,tertiary,no,362,yes,no,unknown,30,may,38,3,-1,0,unknown,no +51,blue-collar,married,primary,no,4497,yes,no,unknown,15,may,276,3,-1,0,unknown,no +38,technician,single,tertiary,no,2496,no,no,unknown,17,jun,193,1,-1,0,unknown,no +73,retired,married,secondary,no,2850,no,no,cellular,8,oct,512,1,144,7,failure,no +57,technician,married,primary,no,0,no,no,unknown,5,jun,58,8,-1,0,unknown,no +45,management,married,tertiary,no,1199,no,no,telephone,3,feb,221,2,-1,0,unknown,no +34,technician,divorced,tertiary,no,66,no,yes,cellular,5,feb,102,1,170,2,failure,no +48,admin.,married,unknown,no,3756,no,no,cellular,14,aug,65,10,-1,0,unknown,no +39,blue-collar,single,secondary,no,1170,no,no,unknown,6,jun,383,1,-1,0,unknown,no +35,technician,married,tertiary,no,944,no,no,cellular,8,aug,351,2,-1,0,unknown,no +58,management,divorced,tertiary,no,50,yes,no,unknown,3,jun,109,4,-1,0,unknown,no +36,management,single,tertiary,no,171,no,no,unknown,17,jun,398,4,-1,0,unknown,no +43,services,married,secondary,no,122,yes,no,cellular,5,may,355,2,-1,0,unknown,no +34,blue-collar,divorced,secondary,no,1780,yes,no,unknown,2,jun,187,9,-1,0,unknown,no +52,technician,married,secondary,no,136,no,no,cellular,28,aug,88,5,-1,0,unknown,no +36,unknown,married,secondary,no,179,no,no,cellular,8,aug,14,8,-1,0,unknown,no +32,blue-collar,single,secondary,no,232,no,no,unknown,13,dec,232,1,-1,0,unknown,no +23,student,single,tertiary,no,82,no,no,cellular,4,may,289,4,-1,0,unknown,no +57,blue-collar,married,primary,no,630,yes,no,unknown,29,may,52,1,-1,0,unknown,no +43,blue-collar,married,primary,yes,1202,no,no,unknown,30,may,295,1,-1,0,unknown,no +33,admin.,single,tertiary,no,867,yes,no,cellular,14,apr,247,1,-1,0,unknown,no +45,management,divorced,tertiary,no,6200,no,no,cellular,29,jul,103,2,-1,0,unknown,no +31,admin.,single,secondary,no,-422,yes,no,cellular,18,may,64,2,329,15,other,no +41,self-employed,single,unknown,no,426,yes,no,unknown,19,jun,75,1,-1,0,unknown,no +47,management,divorced,tertiary,no,107,no,no,unknown,15,may,246,1,-1,0,unknown,no +39,services,divorced,secondary,yes,-96,yes,yes,telephone,12,may,38,6,-1,0,unknown,no +47,blue-collar,married,secondary,no,581,yes,no,cellular,26,aug,79,6,-1,0,unknown,no +57,technician,married,secondary,no,402,yes,no,unknown,6,may,153,3,-1,0,unknown,no +52,blue-collar,married,secondary,no,555,yes,no,cellular,12,may,314,2,-1,0,unknown,no +45,admin.,married,secondary,no,67,no,no,cellular,5,feb,326,2,-1,0,unknown,no +42,management,married,tertiary,no,72,yes,no,cellular,20,apr,124,2,348,3,failure,no +32,self-employed,married,secondary,no,1942,yes,no,unknown,30,may,84,9,-1,0,unknown,no +31,technician,single,secondary,no,373,no,no,cellular,22,aug,346,5,-1,0,unknown,no +25,blue-collar,single,secondary,no,84,yes,no,cellular,18,may,6,2,-1,0,unknown,no +30,technician,married,secondary,no,394,no,no,cellular,22,aug,216,13,-1,0,unknown,no +33,blue-collar,married,primary,no,925,no,no,cellular,20,nov,884,3,-1,0,unknown,no +29,blue-collar,married,secondary,no,0,yes,no,cellular,11,may,116,6,-1,0,unknown,no +55,retired,married,secondary,no,6690,no,no,cellular,30,apr,534,1,-1,0,unknown,no +51,admin.,married,secondary,no,4178,yes,no,unknown,30,may,556,1,-1,0,unknown,no +68,retired,married,secondary,no,20723,yes,no,cellular,28,apr,318,2,-1,0,unknown,no +29,services,single,secondary,no,887,no,no,cellular,4,feb,343,1,-1,0,unknown,no +35,self-employed,married,secondary,no,598,yes,no,cellular,20,apr,245,1,-1,0,unknown,no +38,technician,married,secondary,no,1,yes,no,cellular,21,nov,57,5,199,1,success,no +39,management,divorced,secondary,no,4314,yes,no,cellular,20,nov,141,4,-1,0,unknown,no +47,technician,married,tertiary,no,2155,no,no,unknown,20,jun,178,3,-1,0,unknown,no +22,management,single,tertiary,no,760,no,no,telephone,7,dec,6,1,-1,0,unknown,no +44,admin.,married,secondary,no,1248,yes,yes,cellular,8,may,428,3,-1,0,unknown,no +38,technician,single,tertiary,no,5122,yes,no,cellular,20,nov,370,1,184,1,failure,no +56,services,divorced,secondary,no,191,no,no,cellular,23,jul,335,3,-1,0,unknown,no +56,management,married,secondary,no,230,no,no,unknown,9,may,73,4,-1,0,unknown,no +54,management,divorced,tertiary,no,7010,no,no,cellular,11,mar,275,2,-1,0,unknown,no +39,services,married,secondary,no,1970,yes,no,unknown,8,jun,30,1,404,2,success,no +36,blue-collar,married,secondary,no,3935,yes,yes,unknown,27,may,220,6,-1,0,unknown,no +42,admin.,married,secondary,no,437,yes,no,cellular,11,aug,120,3,190,1,failure,no +51,technician,divorced,secondary,no,2323,yes,yes,cellular,18,aug,151,10,-1,0,unknown,no +32,management,married,tertiary,no,2213,no,no,cellular,29,jan,125,2,154,7,failure,no +31,management,married,tertiary,no,84,no,yes,unknown,1,jul,143,1,-1,0,unknown,no +23,technician,single,secondary,no,4545,no,no,cellular,3,jun,200,1,-1,0,unknown,no +21,student,single,unknown,no,200,no,no,unknown,1,jun,8,1,-1,0,unknown,no +45,admin.,single,secondary,no,206,yes,no,unknown,5,may,193,1,-1,0,unknown,no +51,technician,married,secondary,no,2937,no,no,telephone,21,nov,30,3,-1,0,unknown,no +36,unemployed,single,tertiary,no,221,no,no,cellular,3,feb,225,4,-1,0,unknown,no +56,blue-collar,married,secondary,no,1521,yes,yes,cellular,21,nov,19,2,179,3,other,no +41,technician,married,secondary,no,102,yes,yes,unknown,14,may,387,9,-1,0,unknown,no +57,retired,married,secondary,no,519,yes,no,unknown,3,jun,393,3,-1,0,unknown,no +55,blue-collar,married,secondary,no,660,no,no,unknown,5,jun,348,1,-1,0,unknown,no +34,management,divorced,tertiary,no,500,yes,no,unknown,29,may,399,1,-1,0,unknown,no +32,admin.,married,secondary,no,1661,yes,no,cellular,5,feb,76,1,209,2,failure,no +41,blue-collar,single,unknown,no,961,yes,no,unknown,29,may,117,1,-1,0,unknown,no +32,admin.,divorced,secondary,no,-273,yes,no,cellular,5,may,64,1,-1,0,unknown,no +53,management,married,tertiary,no,7067,no,no,unknown,6,jun,82,3,-1,0,unknown,no +43,blue-collar,married,unknown,no,285,yes,no,cellular,15,may,22,6,-1,0,unknown,no +27,services,married,secondary,no,221,no,yes,cellular,7,jul,554,1,-1,0,unknown,no +48,technician,single,secondary,no,479,no,no,unknown,20,may,148,5,-1,0,unknown,no +33,services,single,tertiary,no,1595,yes,no,unknown,26,may,296,1,-1,0,unknown,no +41,management,married,tertiary,no,65,yes,no,unknown,6,may,524,2,-1,0,unknown,no +33,admin.,married,tertiary,no,640,no,no,cellular,24,jul,318,1,-1,0,unknown,no +25,management,single,tertiary,no,490,no,no,cellular,7,sep,394,1,-1,0,unknown,no +38,management,married,tertiary,no,1440,no,no,cellular,11,aug,111,2,-1,0,unknown,no +43,self-employed,married,secondary,no,918,yes,no,unknown,6,may,193,1,-1,0,unknown,no +56,management,single,tertiary,no,6507,yes,yes,cellular,29,jan,134,1,196,1,failure,no +28,services,married,secondary,no,4,yes,no,unknown,27,jun,133,5,-1,0,unknown,no +52,self-employed,married,tertiary,no,2289,yes,yes,cellular,21,nov,81,1,-1,0,unknown,no +32,management,single,tertiary,no,131,no,no,unknown,3,jun,267,3,-1,0,unknown,no +33,services,single,secondary,no,1852,no,no,telephone,25,feb,371,1,204,3,other,no +31,technician,single,tertiary,no,-749,yes,yes,cellular,29,jul,82,4,-1,0,unknown,no +54,technician,married,secondary,no,719,yes,no,cellular,2,feb,242,1,264,1,failure,no +36,technician,married,secondary,no,4613,no,no,cellular,2,apr,320,1,134,2,failure,no +40,admin.,single,secondary,no,664,no,no,cellular,19,nov,188,2,121,2,success,no +32,admin.,single,tertiary,no,291,no,no,telephone,28,jan,223,6,275,5,other,no +27,student,single,tertiary,no,24,yes,no,cellular,2,feb,344,2,-1,0,unknown,no +42,technician,single,secondary,no,823,yes,no,cellular,28,jan,137,1,-1,0,unknown,no +30,management,married,tertiary,no,1235,yes,no,cellular,28,jul,104,3,-1,0,unknown,no +43,technician,single,secondary,no,1195,yes,no,unknown,15,may,516,9,-1,0,unknown,no +44,management,married,unknown,no,21,no,no,cellular,24,aug,323,2,-1,0,unknown,no +46,technician,married,secondary,no,363,yes,no,cellular,6,aug,209,3,-1,0,unknown,no +36,blue-collar,single,secondary,no,0,no,no,unknown,19,jun,238,1,-1,0,unknown,no +44,blue-collar,single,primary,no,0,yes,no,cellular,24,jul,184,1,-1,0,unknown,no +30,management,single,tertiary,no,136,yes,no,unknown,23,may,152,1,-1,0,unknown,no +34,admin.,single,secondary,no,846,yes,no,cellular,17,apr,758,2,-1,0,unknown,no +20,student,single,primary,no,0,no,no,cellular,1,feb,143,5,91,8,failure,no +31,services,married,secondary,no,505,no,no,cellular,11,jul,773,3,-1,0,unknown,no +34,blue-collar,married,primary,no,3986,yes,no,cellular,17,apr,345,2,-1,0,unknown,no +27,technician,single,tertiary,no,11862,no,no,telephone,25,may,281,5,101,1,success,no +47,management,married,primary,yes,145,no,yes,unknown,1,jul,163,1,-1,0,unknown,no +56,management,divorced,tertiary,no,2037,no,no,cellular,6,may,160,1,91,5,success,no +45,technician,divorced,secondary,no,441,yes,no,cellular,2,feb,535,1,-1,0,unknown,no +35,blue-collar,married,primary,no,105,yes,no,unknown,8,may,369,2,-1,0,unknown,no +32,technician,married,secondary,no,465,yes,no,cellular,12,may,210,2,-1,0,unknown,no +44,entrepreneur,married,secondary,no,320,yes,yes,cellular,5,feb,269,3,234,2,other,no +38,services,married,secondary,no,-762,yes,yes,unknown,30,may,408,2,-1,0,unknown,no +32,management,single,tertiary,no,316,yes,no,cellular,29,jan,215,3,-1,0,unknown,no +58,admin.,married,unknown,no,903,no,no,cellular,28,jan,56,1,-1,0,unknown,no +35,management,single,tertiary,no,123,yes,no,unknown,9,may,83,3,-1,0,unknown,no +40,blue-collar,married,secondary,no,273,yes,no,unknown,19,jun,1082,1,-1,0,unknown,no +36,technician,married,secondary,no,1345,yes,no,unknown,30,may,231,3,-1,0,unknown,no +52,blue-collar,married,secondary,no,1027,no,no,cellular,23,jul,59,1,-1,0,unknown,no +35,technician,single,secondary,no,1855,yes,no,unknown,7,may,138,1,-1,0,unknown,no +38,services,single,secondary,no,1315,no,no,unknown,20,jun,23,12,-1,0,unknown,no +43,admin.,married,secondary,no,59,yes,no,cellular,15,jul,60,3,-1,0,unknown,no +43,admin.,married,secondary,no,2682,no,no,cellular,30,jul,103,8,-1,0,unknown,no +35,management,married,tertiary,no,2682,yes,no,cellular,9,jul,156,1,-1,0,unknown,no +40,services,married,secondary,no,3164,yes,no,cellular,3,apr,329,2,-1,0,unknown,no +49,technician,divorced,secondary,no,342,no,yes,cellular,19,nov,58,3,-1,0,unknown,no +35,services,single,secondary,no,1742,yes,no,cellular,31,jul,39,2,-1,0,unknown,no +42,technician,divorced,secondary,no,-106,yes,no,unknown,29,may,95,1,-1,0,unknown,no +29,unemployed,single,unknown,no,67,no,no,cellular,28,jan,330,2,-1,0,unknown,no +26,technician,single,secondary,no,430,no,no,cellular,5,feb,450,2,-1,0,unknown,no +44,blue-collar,single,primary,no,-234,yes,yes,cellular,15,may,71,3,347,1,failure,no +29,management,single,tertiary,no,0,yes,no,cellular,13,may,155,1,351,1,failure,no +36,blue-collar,married,secondary,no,-206,yes,no,unknown,8,may,177,2,-1,0,unknown,no +30,technician,single,secondary,no,656,no,yes,unknown,4,jul,523,1,-1,0,unknown,no +52,retired,married,secondary,no,603,no,yes,unknown,9,jun,79,1,-1,0,unknown,no +55,admin.,married,secondary,no,1102,yes,no,unknown,15,may,126,2,-1,0,unknown,no +30,services,single,secondary,no,117,no,no,cellular,28,jan,135,1,-1,0,unknown,no +29,technician,single,secondary,no,-13,yes,no,cellular,14,may,512,3,-1,0,unknown,no +27,admin.,single,tertiary,no,1993,yes,no,cellular,5,may,102,5,-1,0,unknown,no +58,retired,divorced,unknown,no,5920,yes,no,cellular,21,nov,96,1,121,1,failure,no +33,services,married,secondary,no,881,yes,no,unknown,21,may,67,5,-1,0,unknown,no +48,admin.,married,secondary,no,0,yes,no,cellular,17,jul,109,4,-1,0,unknown,no +39,housemaid,married,secondary,no,953,no,no,cellular,30,jan,23,6,232,3,other,no +55,blue-collar,married,primary,no,781,yes,no,cellular,3,feb,112,3,270,2,failure,no +40,blue-collar,single,primary,no,1530,yes,no,cellular,20,apr,8,3,315,1,failure,no +33,management,single,tertiary,no,2667,yes,no,cellular,18,may,57,1,180,3,failure,no +56,admin.,married,secondary,no,5310,no,no,unknown,19,jun,74,1,-1,0,unknown,no +42,blue-collar,married,secondary,no,1468,yes,no,unknown,28,may,136,1,-1,0,unknown,no +43,unknown,married,primary,no,0,yes,no,cellular,9,jul,132,1,-1,0,unknown,no +41,management,married,tertiary,no,144,no,no,cellular,27,feb,123,3,-1,0,unknown,no +58,admin.,single,secondary,no,247,no,yes,unknown,20,jun,66,6,-1,0,unknown,no +29,blue-collar,married,primary,no,258,yes,no,unknown,26,may,130,1,-1,0,unknown,no +38,management,married,tertiary,no,595,yes,no,cellular,18,nov,70,1,-1,0,unknown,no +49,blue-collar,divorced,secondary,yes,259,no,no,unknown,16,may,283,2,-1,0,unknown,no +55,self-employed,married,secondary,no,2408,no,no,telephone,9,apr,327,2,140,1,failure,no +53,management,married,tertiary,no,1356,yes,no,cellular,5,aug,397,2,93,2,failure,no +56,admin.,married,secondary,no,292,yes,no,unknown,28,may,228,9,-1,0,unknown,no +31,management,single,tertiary,no,2384,yes,no,cellular,14,apr,608,2,-1,0,unknown,no +29,technician,single,secondary,no,307,yes,no,cellular,3,feb,216,1,-1,0,unknown,no +48,admin.,married,secondary,no,292,yes,yes,cellular,29,jul,164,6,-1,0,unknown,no +43,blue-collar,married,primary,no,3131,yes,no,unknown,3,jun,441,3,-1,0,unknown,no +29,technician,married,secondary,no,0,no,no,unknown,12,may,33,2,-1,0,unknown,no +39,management,single,tertiary,no,2258,yes,no,cellular,31,jul,255,2,-1,0,unknown,no +53,management,married,tertiary,no,1348,no,yes,cellular,17,jul,120,3,-1,0,unknown,no +48,blue-collar,married,secondary,no,741,yes,no,cellular,16,apr,227,1,-1,0,unknown,no +34,management,married,tertiary,no,0,no,no,cellular,22,apr,176,1,-1,0,unknown,no +52,management,single,tertiary,no,741,no,no,cellular,7,aug,63,2,-1,0,unknown,no +30,admin.,married,secondary,no,521,yes,no,cellular,19,nov,648,1,-1,0,unknown,no +45,entrepreneur,married,primary,no,5315,yes,yes,cellular,15,may,262,2,-1,0,unknown,no +54,management,married,secondary,no,1660,no,no,cellular,20,nov,337,3,-1,0,unknown,no +44,self-employed,married,unknown,no,163,yes,no,cellular,12,aug,44,1,100,3,success,no +35,entrepreneur,married,secondary,no,1163,yes,no,unknown,20,may,284,1,-1,0,unknown,no +34,technician,single,tertiary,no,122,no,no,unknown,27,may,73,5,-1,0,unknown,no +22,student,single,unknown,no,1,no,no,telephone,15,jun,263,4,-1,0,unknown,no +65,retired,married,primary,no,493,no,no,cellular,16,oct,622,1,182,1,failure,no +49,management,married,unknown,no,0,no,no,cellular,19,nov,99,2,-1,0,unknown,no +38,management,single,unknown,no,715,yes,no,cellular,2,apr,951,1,132,3,failure,no +28,technician,single,tertiary,no,558,yes,no,cellular,15,may,300,1,-1,0,unknown,no +33,technician,married,tertiary,no,16992,yes,no,unknown,29,may,58,1,-1,0,unknown,no +34,management,married,tertiary,no,179,yes,no,cellular,20,nov,184,1,-1,0,unknown,no +26,student,single,unknown,no,198,no,no,cellular,5,feb,161,1,-1,0,unknown,no +37,blue-collar,married,primary,no,152,yes,no,cellular,17,apr,252,2,-1,0,unknown,no +40,blue-collar,married,primary,no,2805,yes,no,cellular,14,may,173,6,353,23,failure,no +28,services,single,secondary,no,6332,yes,no,telephone,7,may,149,1,343,4,failure,no +31,technician,married,secondary,no,2420,yes,no,cellular,19,nov,166,1,-1,0,unknown,no +42,management,married,secondary,no,580,no,no,cellular,22,aug,67,2,-1,0,unknown,no +34,technician,divorced,secondary,no,259,no,no,cellular,11,aug,316,2,-1,0,unknown,no +34,services,married,secondary,no,-451,yes,yes,cellular,23,jul,498,1,-1,0,unknown,no +53,management,married,tertiary,no,261,no,no,cellular,19,aug,100,2,-1,0,unknown,no +55,entrepreneur,married,tertiary,no,323,yes,yes,cellular,13,may,200,1,-1,0,unknown,no +51,entrepreneur,single,tertiary,no,0,no,no,cellular,30,jan,643,1,-1,0,unknown,no +58,retired,married,secondary,no,235,no,no,cellular,27,aug,88,4,-1,0,unknown,no +35,blue-collar,married,primary,no,526,yes,no,cellular,2,feb,914,2,-1,0,unknown,no +35,blue-collar,married,primary,no,4366,yes,no,unknown,28,may,173,3,-1,0,unknown,no +31,technician,married,tertiary,no,0,yes,yes,unknown,13,may,164,2,-1,0,unknown,no +32,student,married,secondary,no,833,yes,no,telephone,2,nov,227,5,164,3,other,no +59,retired,married,primary,yes,-13,no,no,cellular,11,aug,77,1,-1,0,unknown,no +50,management,divorced,tertiary,no,405,no,no,cellular,2,apr,82,6,-1,0,unknown,no +37,blue-collar,married,primary,no,3517,yes,no,unknown,23,may,445,1,-1,0,unknown,no +30,services,married,secondary,no,699,yes,no,unknown,29,may,544,1,-1,0,unknown,no +41,blue-collar,married,primary,no,943,yes,no,unknown,29,may,242,3,-1,0,unknown,no +43,blue-collar,married,primary,no,794,yes,no,cellular,13,may,38,3,-1,0,unknown,no +34,blue-collar,married,primary,no,503,yes,no,unknown,26,may,120,2,-1,0,unknown,no +42,management,married,tertiary,no,-700,yes,no,unknown,14,may,110,1,-1,0,unknown,no +33,management,married,tertiary,no,644,no,no,cellular,11,aug,99,2,-1,0,unknown,no +26,services,single,secondary,no,335,no,no,telephone,29,jan,393,2,-1,0,unknown,no +32,technician,single,secondary,no,719,yes,no,unknown,28,may,79,6,-1,0,unknown,no +41,management,married,tertiary,no,-195,no,yes,cellular,20,nov,112,1,-1,0,unknown,no +49,technician,divorced,secondary,no,972,no,no,cellular,16,nov,104,3,175,2,failure,no +51,blue-collar,married,primary,no,5050,no,yes,unknown,16,jun,75,7,-1,0,unknown,no +43,blue-collar,married,primary,no,232,no,yes,cellular,15,may,45,1,-1,0,unknown,no +45,services,married,primary,no,2406,yes,yes,cellular,20,apr,108,2,-1,0,unknown,no +42,entrepreneur,married,secondary,no,324,yes,no,cellular,15,jul,528,3,-1,0,unknown,no +37,blue-collar,married,secondary,no,168,yes,no,cellular,17,apr,266,2,-1,0,unknown,no +59,retired,married,secondary,no,374,no,no,cellular,29,aug,272,2,-1,0,unknown,no +31,services,single,secondary,no,658,no,no,cellular,22,may,100,1,-1,0,unknown,no +22,admin.,single,secondary,no,-1,yes,no,unknown,9,may,136,1,-1,0,unknown,no +30,self-employed,single,secondary,no,280,no,no,telephone,5,may,92,3,-1,0,unknown,no +52,admin.,divorced,unknown,no,0,no,no,cellular,26,aug,168,4,-1,0,unknown,no +50,self-employed,married,primary,no,0,no,no,cellular,22,aug,125,4,-1,0,unknown,no +34,admin.,married,secondary,no,2064,yes,no,unknown,26,may,165,2,-1,0,unknown,no +30,blue-collar,married,secondary,no,128,yes,no,unknown,14,may,273,1,-1,0,unknown,no +56,blue-collar,married,primary,no,0,yes,no,cellular,17,jul,82,1,-1,0,unknown,no +31,technician,single,secondary,no,863,yes,no,cellular,3,feb,146,1,263,5,success,no +51,admin.,married,secondary,no,50,no,no,cellular,26,aug,178,2,-1,0,unknown,no +33,services,single,secondary,no,187,yes,no,cellular,20,apr,168,3,326,1,failure,no +47,blue-collar,married,secondary,yes,-614,yes,no,unknown,26,may,118,2,-1,0,unknown,no +46,technician,married,tertiary,no,841,yes,no,unknown,6,may,158,1,-1,0,unknown,no +44,services,divorced,secondary,no,206,yes,no,cellular,14,may,78,1,365,1,failure,no +51,blue-collar,married,secondary,no,984,yes,no,telephone,7,apr,353,4,-1,0,unknown,no +39,technician,single,secondary,no,201,no,yes,unknown,6,jun,148,4,-1,0,unknown,no +41,technician,married,tertiary,no,585,yes,no,telephone,20,apr,60,1,-1,0,unknown,no +33,management,single,tertiary,no,8514,no,no,cellular,20,aug,131,1,-1,0,unknown,no +31,admin.,married,secondary,no,728,yes,yes,cellular,15,may,152,1,352,4,failure,no +60,entrepreneur,divorced,secondary,no,80,yes,no,unknown,15,may,397,1,-1,0,unknown,no +34,technician,married,secondary,no,1246,no,no,unknown,28,may,88,3,-1,0,unknown,no +58,services,married,secondary,no,818,no,no,cellular,22,aug,283,1,-1,0,unknown,no +36,admin.,single,unknown,no,1815,no,no,unknown,5,jun,387,1,-1,0,unknown,no +42,technician,married,secondary,no,0,no,no,cellular,30,jul,351,2,-1,0,unknown,no +44,services,divorced,secondary,no,210,no,yes,unknown,12,may,111,2,-1,0,unknown,no +31,services,married,secondary,no,71,yes,no,cellular,17,jul,740,2,-1,0,unknown,no +51,blue-collar,married,primary,no,1869,no,no,unknown,17,jun,30,3,-1,0,unknown,no +59,admin.,married,primary,no,1040,no,no,telephone,31,jul,733,1,-1,0,unknown,no +33,admin.,married,secondary,no,920,no,no,cellular,13,aug,111,1,105,1,success,no +47,blue-collar,married,secondary,no,668,yes,no,cellular,4,may,230,6,354,2,success,no +43,management,divorced,tertiary,no,36,no,no,cellular,13,feb,61,1,193,1,failure,no +44,housemaid,married,primary,yes,-972,yes,yes,unknown,16,may,114,2,-1,0,unknown,no +29,admin.,single,secondary,no,382,yes,no,unknown,12,may,460,1,-1,0,unknown,no +30,admin.,married,secondary,no,-170,yes,yes,unknown,26,may,130,1,-1,0,unknown,no +43,management,married,unknown,no,5172,yes,no,unknown,29,may,57,3,-1,0,unknown,no +53,technician,single,tertiary,no,1,no,no,cellular,21,aug,190,1,-1,0,unknown,no +46,blue-collar,married,secondary,no,922,yes,no,telephone,18,nov,296,2,-1,0,unknown,no +41,management,married,tertiary,no,3016,yes,no,cellular,14,jul,80,3,-1,0,unknown,no +44,blue-collar,married,primary,no,0,yes,no,cellular,30,jul,83,2,-1,0,unknown,no +38,management,married,tertiary,no,1101,yes,no,telephone,9,nov,43,1,-1,0,unknown,no +43,management,divorced,tertiary,no,3578,no,no,cellular,29,jan,376,2,-1,0,unknown,no +41,blue-collar,married,primary,no,0,yes,yes,unknown,6,may,238,1,-1,0,unknown,no +44,blue-collar,married,secondary,no,0,yes,no,cellular,21,jul,90,1,-1,0,unknown,no +31,blue-collar,married,secondary,no,-190,yes,yes,cellular,8,may,299,3,-1,0,unknown,no +59,self-employed,married,tertiary,no,185,no,no,cellular,4,feb,283,1,-1,0,unknown,no +30,management,single,tertiary,no,156,yes,no,unknown,9,jun,174,9,-1,0,unknown,no +35,blue-collar,married,secondary,no,503,yes,yes,unknown,9,may,57,2,-1,0,unknown,no +57,retired,married,secondary,no,485,no,no,cellular,2,feb,79,2,187,2,failure,no +53,technician,divorced,secondary,no,392,yes,no,cellular,28,jan,70,1,245,1,failure,no +35,blue-collar,married,secondary,no,625,no,no,cellular,13,may,267,1,-1,0,unknown,no +49,services,married,primary,no,468,no,no,cellular,5,aug,608,2,-1,0,unknown,no +41,management,married,secondary,no,280,yes,no,cellular,2,jun,88,1,95,2,success,no +40,services,married,secondary,no,181,yes,no,unknown,16,may,370,1,-1,0,unknown,no +57,admin.,married,unknown,no,1401,no,no,cellular,21,aug,91,22,-1,0,unknown,no +38,management,married,unknown,no,1349,yes,no,unknown,6,may,100,1,-1,0,unknown,no +49,services,married,primary,no,5737,yes,no,unknown,29,may,417,2,-1,0,unknown,no +38,management,married,tertiary,no,1187,yes,yes,cellular,2,feb,157,1,-1,0,unknown,no +26,admin.,married,secondary,no,5231,no,yes,cellular,17,jul,222,2,-1,0,unknown,no +34,admin.,married,secondary,no,3185,yes,no,unknown,13,may,520,1,-1,0,unknown,no +58,management,married,tertiary,no,3228,no,no,cellular,19,aug,58,2,-1,0,unknown,no +30,services,married,secondary,no,80,yes,no,unknown,8,may,185,2,-1,0,unknown,no +52,blue-collar,divorced,primary,no,2800,no,no,unknown,19,jun,149,1,-1,0,unknown,no +30,technician,single,tertiary,no,10,no,no,cellular,26,aug,276,8,-1,0,unknown,no +52,blue-collar,married,secondary,no,331,no,no,cellular,8,aug,84,4,-1,0,unknown,no +34,entrepreneur,married,secondary,no,223,no,yes,cellular,11,aug,103,6,-1,0,unknown,no +33,blue-collar,married,primary,no,0,no,no,cellular,8,may,174,1,-1,0,unknown,no +34,admin.,married,tertiary,no,35,yes,no,cellular,15,oct,76,1,69,2,failure,no +23,admin.,married,secondary,no,299,yes,no,unknown,19,jun,104,1,-1,0,unknown,no +37,blue-collar,married,primary,no,240,yes,no,cellular,11,may,259,1,370,2,other,no +59,management,married,unknown,no,3534,no,no,cellular,21,nov,216,4,-1,0,unknown,no +42,management,married,tertiary,no,223,no,no,cellular,6,aug,92,6,-1,0,unknown,no +50,admin.,divorced,secondary,no,-194,yes,no,cellular,13,apr,238,2,-1,0,unknown,no +41,technician,divorced,secondary,no,1545,no,yes,cellular,13,aug,183,2,-1,0,unknown,no +34,technician,single,secondary,no,440,yes,no,cellular,6,may,445,2,345,2,failure,no +57,management,married,primary,no,2538,no,yes,telephone,17,jul,485,2,-1,0,unknown,no +52,services,married,unknown,no,337,yes,no,unknown,19,may,85,3,-1,0,unknown,no +61,retired,married,unknown,no,-492,no,yes,unknown,4,jul,333,1,-1,0,unknown,no +31,technician,single,tertiary,no,53,no,no,cellular,28,jan,97,2,-1,0,unknown,no +27,student,single,secondary,no,91,no,no,telephone,4,dec,157,6,95,37,other,no +48,blue-collar,single,primary,no,316,no,no,unknown,5,jun,560,2,-1,0,unknown,no +27,management,single,unknown,no,3196,no,no,cellular,9,feb,10,2,-1,0,unknown,no +37,blue-collar,married,secondary,no,2697,yes,no,cellular,20,apr,430,1,-1,0,unknown,no +28,student,single,tertiary,no,3,no,no,cellular,11,nov,135,2,148,1,other,no +34,services,married,secondary,no,244,no,no,cellular,4,feb,696,2,-1,0,unknown,no +42,services,single,unknown,no,410,no,no,cellular,21,nov,34,2,-1,0,unknown,no +39,admin.,married,secondary,no,159,no,no,cellular,19,nov,177,1,-1,0,unknown,no +30,management,married,tertiary,no,6432,yes,no,cellular,21,nov,206,2,119,3,other,no +35,blue-collar,married,secondary,no,-701,yes,yes,cellular,7,may,531,3,-1,0,unknown,no +43,housemaid,single,primary,no,24,no,no,cellular,31,jul,35,2,-1,0,unknown,no +33,management,married,tertiary,no,296,no,no,cellular,16,jul,90,2,-1,0,unknown,no +24,blue-collar,single,secondary,no,1,yes,no,cellular,11,may,79,2,-1,0,unknown,no +39,technician,married,secondary,no,1965,yes,no,unknown,2,jun,65,1,-1,0,unknown,no +27,technician,single,tertiary,no,501,no,yes,telephone,30,jan,370,4,-1,0,unknown,no +50,blue-collar,married,secondary,no,3558,no,no,cellular,26,aug,84,10,-1,0,unknown,no +30,blue-collar,married,secondary,no,177,yes,no,cellular,9,apr,62,2,332,3,failure,no +52,technician,divorced,secondary,no,204,no,no,cellular,7,aug,134,2,-1,0,unknown,no +30,admin.,married,secondary,no,46,yes,no,unknown,6,may,114,2,-1,0,unknown,no +35,technician,divorced,secondary,no,2047,yes,no,cellular,1,oct,66,1,-1,0,unknown,no +36,admin.,single,secondary,no,810,yes,no,unknown,17,jun,296,1,-1,0,unknown,no +39,management,single,tertiary,no,1914,no,no,cellular,18,aug,94,4,-1,0,unknown,no +43,admin.,single,secondary,no,56831,no,no,unknown,15,may,243,1,-1,0,unknown,no +43,admin.,single,secondary,no,386,no,no,cellular,12,oct,242,1,92,4,success,no +46,admin.,married,primary,no,469,yes,no,cellular,2,feb,75,1,264,10,other,no +33,admin.,married,tertiary,no,69,no,yes,cellular,4,may,77,2,-1,0,unknown,no +56,entrepreneur,married,tertiary,no,-124,yes,no,unknown,15,may,374,5,-1,0,unknown,no +60,retired,married,primary,no,600,no,no,cellular,19,aug,99,6,-1,0,unknown,no +48,management,married,tertiary,no,3842,no,no,cellular,1,oct,168,1,122,2,success,no +31,blue-collar,married,secondary,no,-720,yes,yes,unknown,15,may,112,2,-1,0,unknown,no +36,blue-collar,single,secondary,no,1127,yes,no,cellular,10,jul,455,1,-1,0,unknown,no +24,student,single,secondary,no,423,yes,no,unknown,5,may,226,3,-1,0,unknown,no +27,blue-collar,married,secondary,no,-59,no,yes,cellular,8,jul,154,3,-1,0,unknown,no +36,admin.,married,secondary,no,0,yes,yes,cellular,11,may,94,1,-1,0,unknown,no +29,technician,married,tertiary,no,1489,yes,no,unknown,28,may,430,1,-1,0,unknown,no +42,self-employed,married,secondary,no,0,no,no,cellular,14,aug,277,4,-1,0,unknown,no +44,management,married,tertiary,no,1451,yes,no,cellular,5,feb,80,7,80,15,failure,no +42,blue-collar,married,unknown,no,452,yes,no,cellular,17,nov,359,2,-1,0,unknown,no +39,entrepreneur,married,secondary,no,283,yes,no,unknown,26,may,126,2,-1,0,unknown,no +45,management,single,tertiary,no,16,no,no,cellular,31,jul,59,2,-1,0,unknown,no +36,blue-collar,married,primary,no,973,yes,yes,unknown,23,may,293,1,-1,0,unknown,no +34,blue-collar,married,secondary,no,1257,yes,no,unknown,26,may,109,7,-1,0,unknown,no +43,technician,married,secondary,no,-1701,yes,no,unknown,26,may,285,1,-1,0,unknown,no +32,blue-collar,single,secondary,no,567,yes,no,cellular,7,may,275,2,342,4,other,no +38,technician,married,tertiary,no,-1,no,no,cellular,8,aug,188,4,-1,0,unknown,no +29,blue-collar,married,secondary,no,3310,no,no,cellular,1,sep,367,1,91,4,failure,no +28,blue-collar,married,primary,no,115,yes,no,unknown,28,may,78,4,-1,0,unknown,no +33,management,single,tertiary,no,321,no,no,cellular,22,aug,227,2,-1,0,unknown,no +43,admin.,married,secondary,no,71,no,no,unknown,7,may,180,5,-1,0,unknown,no +42,unemployed,divorced,secondary,no,759,no,no,cellular,28,jan,97,1,169,3,failure,no +33,management,married,tertiary,no,23,yes,yes,cellular,6,feb,150,1,-1,0,unknown,no +32,technician,single,secondary,no,3297,no,no,cellular,11,aug,99,2,-1,0,unknown,no +42,housemaid,single,secondary,no,578,no,no,telephone,28,jan,44,1,-1,0,unknown,no +42,housemaid,married,primary,no,4279,yes,no,cellular,22,jul,98,1,-1,0,unknown,no +29,blue-collar,single,secondary,no,234,yes,no,cellular,8,may,139,1,345,1,other,no +27,management,single,tertiary,no,1137,yes,no,cellular,8,may,26,1,-1,0,unknown,no +38,management,single,tertiary,no,8669,yes,no,telephone,20,apr,5,3,150,6,failure,no +45,entrepreneur,married,primary,no,488,yes,no,telephone,28,jul,90,11,-1,0,unknown,no +32,management,single,tertiary,no,1077,no,no,cellular,5,aug,200,1,717,4,failure,no +33,technician,married,secondary,no,4790,yes,no,cellular,20,apr,137,1,272,2,failure,no +48,technician,married,secondary,no,256,yes,no,unknown,29,may,150,4,-1,0,unknown,no +53,blue-collar,married,secondary,no,974,yes,no,unknown,26,may,197,2,-1,0,unknown,no +23,technician,single,unknown,no,231,yes,no,cellular,7,may,560,3,367,1,other,no +41,blue-collar,married,secondary,no,196,yes,no,unknown,13,may,488,1,-1,0,unknown,no +41,admin.,single,secondary,no,2002,yes,no,cellular,15,may,172,2,350,1,failure,no +50,services,married,tertiary,no,218,yes,no,unknown,9,may,388,2,-1,0,unknown,no +28,blue-collar,single,secondary,no,1011,yes,no,cellular,20,apr,204,3,-1,0,unknown,no +54,retired,divorced,secondary,no,2761,no,no,cellular,16,jul,771,1,-1,0,unknown,no +38,services,divorced,primary,no,92,yes,yes,unknown,29,may,118,3,-1,0,unknown,no +27,self-employed,married,tertiary,no,10005,yes,no,cellular,14,apr,163,3,271,2,failure,no +54,management,married,tertiary,no,1168,no,no,telephone,4,may,150,5,-1,0,unknown,no +28,services,single,secondary,no,168,yes,no,cellular,7,may,128,1,-1,0,unknown,no +32,technician,single,tertiary,no,1710,yes,no,cellular,15,may,439,1,175,3,other,no +39,services,married,secondary,no,207,no,no,unknown,6,jun,78,2,-1,0,unknown,no +29,technician,single,secondary,no,18,no,no,cellular,3,feb,206,3,-1,0,unknown,no +46,admin.,single,unknown,no,306,yes,no,cellular,11,may,289,5,-1,0,unknown,no +37,entrepreneur,married,primary,no,8,yes,yes,cellular,16,jul,46,1,-1,0,unknown,no +30,management,married,tertiary,no,-250,yes,no,unknown,20,jun,11,6,-1,0,unknown,no +41,blue-collar,married,secondary,no,449,yes,yes,cellular,12,may,313,2,-1,0,unknown,no +39,unemployed,married,secondary,no,1654,no,no,unknown,20,jun,264,6,-1,0,unknown,no +38,blue-collar,married,primary,no,714,yes,no,unknown,29,may,225,3,-1,0,unknown,no +55,management,single,tertiary,no,1498,no,no,cellular,25,aug,340,5,-1,0,unknown,no +29,services,single,secondary,no,695,no,no,unknown,3,jul,97,1,-1,0,unknown,no +36,technician,single,secondary,no,-15,yes,no,unknown,6,may,341,3,-1,0,unknown,no +60,blue-collar,married,primary,no,14,yes,yes,cellular,15,may,781,4,178,3,failure,no +43,services,divorced,secondary,no,-287,yes,no,cellular,20,apr,580,4,-1,0,unknown,no +45,blue-collar,married,primary,no,0,yes,no,cellular,24,jul,137,1,-1,0,unknown,no +36,management,divorced,tertiary,no,-978,yes,no,cellular,13,may,62,3,-1,0,unknown,no +53,blue-collar,married,secondary,no,0,yes,no,cellular,7,may,407,2,-1,0,unknown,no +41,self-employed,married,secondary,no,20,no,no,unknown,5,jun,333,1,-1,0,unknown,no +51,blue-collar,married,secondary,no,700,no,no,cellular,8,aug,237,4,-1,0,unknown,no +34,blue-collar,married,secondary,no,-58,yes,yes,unknown,28,may,157,2,-1,0,unknown,no +29,management,single,tertiary,no,841,no,no,cellular,5,feb,217,1,-1,0,unknown,no +35,self-employed,single,secondary,no,951,yes,no,cellular,19,nov,220,2,-1,0,unknown,no +40,management,married,tertiary,no,-63,no,yes,cellular,2,jul,196,1,-1,0,unknown,no +26,student,single,tertiary,no,641,yes,no,cellular,15,may,55,1,368,1,failure,no +32,technician,single,tertiary,no,195,yes,no,cellular,22,aug,239,2,-1,0,unknown,no +31,technician,married,tertiary,no,11,no,no,cellular,27,aug,651,2,-1,0,unknown,no +39,management,single,secondary,no,120,no,no,unknown,12,jun,66,1,-1,0,unknown,no +30,technician,married,secondary,no,450,no,yes,cellular,14,jul,72,4,-1,0,unknown,no +40,technician,married,secondary,no,8379,no,no,unknown,12,jun,52,6,-1,0,unknown,no +32,blue-collar,married,primary,no,206,yes,no,unknown,20,may,205,2,-1,0,unknown,no +46,admin.,single,secondary,no,1544,yes,no,unknown,29,may,609,1,-1,0,unknown,no +41,technician,married,secondary,no,2990,yes,no,unknown,30,may,62,3,-1,0,unknown,no +35,entrepreneur,single,secondary,no,866,yes,no,cellular,19,nov,147,1,-1,0,unknown,no +40,unemployed,single,secondary,no,1744,yes,no,unknown,21,may,465,11,-1,0,unknown,no +58,management,married,secondary,no,-382,no,no,telephone,5,feb,398,4,189,12,success,no +48,blue-collar,married,primary,no,214,yes,yes,cellular,18,nov,246,1,162,1,failure,no +37,technician,single,tertiary,no,147,no,no,unknown,7,may,416,2,-1,0,unknown,no +59,management,divorced,tertiary,no,81,no,no,cellular,26,may,140,1,-1,0,unknown,no +33,blue-collar,married,secondary,no,202,yes,no,cellular,17,apr,377,1,-1,0,unknown,no +36,admin.,married,secondary,no,1314,yes,no,cellular,17,jul,330,3,-1,0,unknown,no +40,blue-collar,married,secondary,no,-60,yes,no,cellular,21,jul,250,1,-1,0,unknown,no +53,admin.,single,primary,no,0,yes,no,cellular,7,may,176,1,322,5,other,no +32,admin.,divorced,secondary,no,-331,yes,yes,unknown,26,may,130,3,-1,0,unknown,no +32,blue-collar,married,primary,no,1504,yes,no,cellular,17,apr,131,2,-1,0,unknown,no +43,services,divorced,unknown,no,2363,yes,no,cellular,17,nov,229,1,-1,0,unknown,no +30,services,single,secondary,no,773,yes,yes,unknown,4,jun,29,1,-1,0,unknown,no +31,admin.,married,secondary,no,941,yes,no,cellular,8,apr,213,4,-1,0,unknown,no +35,unemployed,single,secondary,no,2116,yes,no,cellular,13,may,409,2,-1,0,unknown,no +39,services,married,secondary,no,-971,yes,yes,unknown,28,may,104,2,-1,0,unknown,no +57,management,married,tertiary,no,5,yes,no,cellular,8,jul,96,1,-1,0,unknown,no +33,self-employed,divorced,tertiary,no,454,no,yes,cellular,18,nov,134,1,-1,0,unknown,no +35,management,married,secondary,no,53,yes,no,cellular,18,nov,378,1,-1,0,unknown,no +53,management,married,tertiary,no,2578,no,no,cellular,19,nov,299,4,107,2,failure,no +50,entrepreneur,married,secondary,no,854,no,no,cellular,16,apr,198,1,-1,0,unknown,no +46,unemployed,married,secondary,no,16397,no,no,cellular,18,nov,641,1,-1,0,unknown,no +35,management,single,tertiary,no,687,yes,no,unknown,30,may,166,2,-1,0,unknown,no +56,retired,married,secondary,no,1894,yes,no,unknown,15,may,189,1,-1,0,unknown,no +54,admin.,divorced,secondary,no,0,yes,yes,cellular,4,feb,330,1,182,3,success,no +56,services,married,secondary,no,1150,no,yes,cellular,17,nov,107,1,117,3,failure,no +43,management,married,tertiary,no,136,no,no,cellular,6,aug,120,2,-1,0,unknown,no +40,technician,married,secondary,no,7313,yes,no,cellular,18,nov,241,2,182,1,failure,no +38,management,married,tertiary,no,-239,yes,no,unknown,2,jun,221,2,-1,0,unknown,no +43,management,married,tertiary,no,182,no,no,cellular,28,jan,152,1,-1,0,unknown,no +46,technician,married,secondary,no,1590,yes,no,cellular,15,jul,59,2,-1,0,unknown,no +29,blue-collar,married,secondary,no,-565,yes,no,unknown,18,jun,164,3,-1,0,unknown,no +33,technician,single,secondary,no,930,yes,no,cellular,15,may,163,5,359,1,failure,no +49,technician,married,secondary,no,1091,no,no,telephone,30,jul,47,2,-1,0,unknown,no +53,blue-collar,divorced,secondary,no,640,yes,no,cellular,11,may,321,2,-1,0,unknown,no +54,retired,single,primary,no,767,no,no,unknown,9,jun,42,2,-1,0,unknown,no +33,technician,married,secondary,no,480,yes,no,cellular,30,jan,272,1,270,1,other,no +39,management,married,tertiary,no,1363,no,no,cellular,21,aug,294,3,-1,0,unknown,no +38,admin.,single,unknown,no,446,yes,no,unknown,13,may,386,1,-1,0,unknown,no +49,admin.,married,secondary,no,167,no,yes,cellular,9,jul,51,1,-1,0,unknown,no +33,technician,married,secondary,no,0,no,no,cellular,19,aug,78,3,-1,0,unknown,no +59,admin.,married,secondary,no,4196,no,no,telephone,31,jul,10,2,-1,0,unknown,no +35,admin.,married,secondary,no,725,yes,no,cellular,20,nov,219,7,133,1,failure,no +40,technician,married,secondary,no,1716,yes,no,cellular,12,aug,226,8,-1,0,unknown,no +31,services,single,secondary,no,-45,no,no,unknown,7,may,246,2,-1,0,unknown,no +35,technician,married,secondary,no,410,yes,no,cellular,20,nov,67,2,-1,0,unknown,no +42,blue-collar,married,primary,no,-97,yes,no,cellular,3,feb,216,4,271,5,failure,no +55,self-employed,married,secondary,no,12159,yes,no,cellular,20,nov,142,2,174,2,failure,no +33,blue-collar,married,secondary,no,395,yes,no,unknown,2,jun,122,1,-1,0,unknown,no +31,technician,single,tertiary,no,969,no,no,cellular,15,jun,95,1,-1,0,unknown,no +30,technician,single,secondary,no,86,no,no,unknown,20,aug,45,1,-1,0,unknown,no +30,blue-collar,single,primary,no,395,no,no,cellular,21,nov,429,1,-1,0,unknown,no +37,blue-collar,married,secondary,no,0,yes,no,cellular,2,apr,473,1,-1,0,unknown,no +30,technician,single,tertiary,no,0,no,no,cellular,22,aug,34,2,-1,0,unknown,no +47,admin.,married,secondary,no,829,yes,yes,unknown,14,may,339,1,-1,0,unknown,no +41,technician,married,tertiary,no,-15,yes,no,cellular,6,may,33,1,-1,0,unknown,no +44,technician,married,secondary,no,135,yes,no,cellular,8,may,262,3,-1,0,unknown,no +59,management,married,tertiary,no,1585,no,no,telephone,28,aug,91,5,-1,0,unknown,no +29,technician,married,secondary,no,-910,yes,no,cellular,21,jul,260,1,-1,0,unknown,no +51,services,married,primary,no,8806,yes,no,unknown,19,may,131,1,-1,0,unknown,no +32,blue-collar,married,secondary,no,43,yes,no,unknown,21,may,173,2,-1,0,unknown,no +36,blue-collar,married,secondary,no,136,yes,no,unknown,4,jun,38,2,-1,0,unknown,no +30,management,married,tertiary,no,1195,no,no,cellular,18,jul,146,2,-1,0,unknown,no +34,housemaid,married,tertiary,no,11219,no,no,cellular,25,may,112,1,-1,0,unknown,no +42,blue-collar,married,primary,no,2003,yes,no,cellular,17,apr,177,3,-1,0,unknown,no +37,technician,married,secondary,no,494,yes,no,cellular,2,feb,247,2,269,3,failure,no +42,blue-collar,single,secondary,no,419,no,no,cellular,7,jul,88,3,-1,0,unknown,no +31,services,married,unknown,no,-82,yes,no,cellular,31,jul,543,31,-1,0,unknown,no +34,admin.,single,tertiary,no,64,yes,no,cellular,28,jul,76,2,-1,0,unknown,no +32,self-employed,married,tertiary,no,14522,no,no,cellular,21,nov,221,7,-1,0,unknown,no +46,technician,divorced,secondary,no,3455,yes,no,unknown,14,may,566,2,-1,0,unknown,no +32,blue-collar,married,primary,no,1076,yes,no,unknown,19,may,67,1,-1,0,unknown,no +37,admin.,single,secondary,no,-261,no,yes,cellular,10,jul,259,1,-1,0,unknown,no +39,management,married,tertiary,no,309,no,no,cellular,26,aug,94,14,-1,0,unknown,no +37,management,single,secondary,no,655,no,yes,cellular,4,feb,258,6,-1,0,unknown,no +32,self-employed,married,tertiary,no,102,no,no,cellular,22,aug,398,5,-1,0,unknown,no +41,blue-collar,married,secondary,no,213,yes,no,unknown,8,may,10,2,-1,0,unknown,no +50,self-employed,married,tertiary,no,202,yes,no,cellular,15,apr,107,1,148,4,failure,no +57,management,married,unknown,no,0,no,no,cellular,30,sep,585,1,-1,0,unknown,no +37,admin.,single,secondary,no,22,yes,no,cellular,7,may,28,2,289,5,failure,no +56,entrepreneur,divorced,secondary,no,179,no,no,cellular,14,aug,47,2,-1,0,unknown,no +37,unemployed,married,secondary,no,4769,no,no,cellular,29,jan,124,1,-1,0,unknown,no +32,blue-collar,married,primary,no,-6,yes,no,cellular,6,may,169,2,-1,0,unknown,no +30,management,single,tertiary,no,19358,no,no,cellular,19,nov,258,2,-1,0,unknown,no +27,blue-collar,single,secondary,no,5563,yes,no,unknown,30,may,435,2,-1,0,unknown,no +36,management,married,tertiary,no,6641,no,no,cellular,30,jul,105,4,-1,0,unknown,no +34,management,single,tertiary,no,747,no,no,cellular,31,aug,72,2,98,1,failure,no +53,services,married,primary,no,49,no,no,unknown,28,may,152,1,-1,0,unknown,no +58,management,married,tertiary,no,287,yes,no,cellular,21,aug,676,8,-1,0,unknown,no +31,admin.,single,secondary,no,437,yes,yes,unknown,4,jun,173,14,-1,0,unknown,no +38,services,married,secondary,no,1313,no,no,unknown,17,jun,33,2,-1,0,unknown,no +32,management,single,tertiary,no,597,no,yes,cellular,24,jul,869,1,-1,0,unknown,no +31,services,married,secondary,no,418,yes,yes,cellular,9,jul,219,1,-1,0,unknown,no +59,admin.,divorced,secondary,no,-41,yes,yes,unknown,20,may,171,1,-1,0,unknown,no +41,blue-collar,married,primary,no,449,yes,no,cellular,20,apr,10,6,-1,0,unknown,no +33,technician,married,secondary,no,3572,yes,no,cellular,18,nov,85,2,-1,0,unknown,no +52,management,married,tertiary,no,2428,yes,no,cellular,21,nov,294,1,116,3,failure,no +36,entrepreneur,married,primary,no,177,yes,no,unknown,12,may,63,5,-1,0,unknown,no +37,management,married,secondary,no,80,no,no,cellular,27,aug,155,3,-1,0,unknown,no +39,services,single,secondary,no,1048,yes,no,cellular,14,may,149,1,-1,0,unknown,no +36,management,married,tertiary,no,3874,no,no,cellular,25,aug,425,6,-1,0,unknown,no +30,management,married,tertiary,no,5381,no,no,cellular,17,nov,375,1,-1,0,unknown,no +32,management,single,tertiary,no,17,no,no,cellular,22,aug,72,4,-1,0,unknown,no +47,blue-collar,married,primary,no,4040,no,no,cellular,11,aug,53,5,-1,0,unknown,no +38,management,single,tertiary,no,427,yes,no,cellular,6,may,17,3,169,2,failure,no +51,management,married,tertiary,no,385,no,no,cellular,11,aug,39,2,-1,0,unknown,no +27,services,single,secondary,no,266,no,yes,cellular,7,jul,232,1,-1,0,unknown,no +58,retired,single,tertiary,no,1411,yes,no,cellular,13,may,425,2,-1,0,unknown,no +56,management,married,primary,no,7747,no,no,unknown,5,jun,103,2,-1,0,unknown,no +40,blue-collar,married,primary,no,2129,yes,no,cellular,20,apr,1156,3,-1,0,unknown,no +47,entrepreneur,married,secondary,no,318,no,no,cellular,4,aug,299,2,-1,0,unknown,no +23,blue-collar,single,secondary,no,105,yes,no,unknown,16,may,498,2,-1,0,unknown,no +46,blue-collar,married,secondary,no,2603,yes,yes,cellular,11,may,50,3,277,2,failure,no +57,services,married,primary,no,443,no,no,telephone,17,jul,167,1,-1,0,unknown,no +40,services,married,secondary,no,-116,yes,no,unknown,29,may,176,3,-1,0,unknown,no +30,admin.,married,tertiary,no,285,no,no,cellular,5,feb,693,2,-1,0,unknown,no +58,retired,married,primary,no,5092,no,no,unknown,11,jun,199,6,-1,0,unknown,no +36,blue-collar,divorced,secondary,no,719,yes,no,unknown,13,may,1052,1,-1,0,unknown,no +37,blue-collar,married,primary,no,0,yes,no,unknown,26,may,24,1,-1,0,unknown,no +51,blue-collar,married,primary,no,2095,yes,yes,cellular,2,feb,438,4,-1,0,unknown,no +30,blue-collar,single,secondary,no,-390,yes,no,cellular,5,may,275,1,-1,0,unknown,no +39,technician,married,tertiary,no,108,no,no,cellular,28,may,589,3,28,2,other,no +33,blue-collar,married,secondary,no,1134,yes,no,unknown,23,may,304,2,-1,0,unknown,no +60,blue-collar,married,primary,no,228,yes,no,unknown,28,may,249,11,-1,0,unknown,no +29,self-employed,married,tertiary,no,1,no,no,cellular,18,jul,167,3,-1,0,unknown,no +31,admin.,married,secondary,no,0,yes,yes,cellular,18,nov,79,3,-1,0,unknown,no +52,management,married,tertiary,no,1453,no,no,telephone,29,jul,254,21,-1,0,unknown,no +30,admin.,single,secondary,no,28,no,no,unknown,20,aug,107,1,-1,0,unknown,no +47,blue-collar,married,secondary,no,1388,yes,no,cellular,17,apr,119,2,-1,0,unknown,no +46,management,divorced,tertiary,no,0,no,yes,cellular,29,aug,38,6,-1,0,unknown,no +31,technician,married,tertiary,no,0,no,no,cellular,29,aug,70,2,-1,0,unknown,no +29,blue-collar,married,secondary,no,15,no,no,cellular,3,jun,136,1,-1,0,unknown,no +34,services,married,secondary,no,22,yes,no,unknown,6,may,344,1,-1,0,unknown,no +44,services,married,secondary,no,983,no,no,cellular,28,jan,123,1,-1,0,unknown,no +60,blue-collar,married,secondary,no,2879,yes,no,cellular,5,aug,122,1,-1,0,unknown,no +51,services,married,primary,no,-553,yes,no,unknown,4,jun,149,8,-1,0,unknown,no +31,housemaid,single,tertiary,no,596,no,no,telephone,28,jan,30,1,-1,0,unknown,no +33,blue-collar,married,secondary,no,1402,no,no,cellular,20,nov,63,5,-1,0,unknown,no +53,admin.,divorced,secondary,no,223,yes,yes,cellular,22,jul,534,1,-1,0,unknown,no +45,admin.,married,secondary,no,46,yes,no,cellular,5,may,234,1,-1,0,unknown,no +51,management,married,tertiary,no,0,yes,yes,unknown,29,may,410,5,-1,0,unknown,no +30,management,single,tertiary,no,1636,no,no,unknown,6,jun,301,2,-1,0,unknown,no +58,blue-collar,married,primary,no,96,no,no,unknown,16,jun,76,3,-1,0,unknown,no +26,blue-collar,single,primary,no,-295,yes,no,cellular,6,may,138,1,-1,0,unknown,no +37,services,married,secondary,no,1,no,no,unknown,15,may,395,2,-1,0,unknown,no +47,management,married,tertiary,no,60,no,no,unknown,2,jun,282,7,-1,0,unknown,no +28,management,married,tertiary,yes,84,no,yes,cellular,28,jul,48,21,-1,0,unknown,no +28,blue-collar,married,secondary,no,4287,no,no,cellular,30,apr,171,1,-1,0,unknown,no +43,management,divorced,tertiary,no,1,yes,yes,unknown,2,jun,28,8,-1,0,unknown,no +43,services,married,secondary,no,192,yes,yes,unknown,30,may,273,2,-1,0,unknown,no +57,management,married,tertiary,no,1172,yes,no,cellular,20,nov,72,1,-1,0,unknown,no +34,entrepreneur,married,tertiary,no,105,yes,no,unknown,28,may,249,2,-1,0,unknown,no +36,admin.,divorced,tertiary,no,4708,no,no,cellular,15,jun,104,1,-1,0,unknown,no +32,technician,single,secondary,no,-1,yes,no,cellular,12,may,37,1,-1,0,unknown,no +46,management,married,unknown,no,802,yes,no,telephone,25,jul,417,1,-1,0,unknown,no +36,technician,married,secondary,no,22,no,no,unknown,6,jun,464,1,-1,0,unknown,no +33,management,married,tertiary,no,3301,yes,no,cellular,2,nov,131,2,171,2,failure,no +48,blue-collar,married,primary,no,2227,no,no,cellular,18,aug,98,12,-1,0,unknown,no +58,entrepreneur,married,secondary,no,2,no,no,unknown,16,jun,684,1,-1,0,unknown,no +56,housemaid,married,primary,no,445,no,no,cellular,21,nov,13,6,-1,0,unknown,no +53,management,married,tertiary,no,241,yes,no,cellular,19,nov,137,1,-1,0,unknown,no +41,blue-collar,married,secondary,no,429,yes,no,unknown,13,may,244,1,-1,0,unknown,no +35,admin.,married,secondary,no,11,yes,no,cellular,23,jul,103,4,-1,0,unknown,no +31,management,married,tertiary,no,50,no,no,cellular,19,aug,37,5,-1,0,unknown,no +51,admin.,divorced,secondary,no,2195,yes,no,unknown,13,may,59,1,-1,0,unknown,no +40,technician,married,secondary,no,1270,no,no,cellular,17,apr,342,2,-1,0,unknown,no +40,technician,divorced,secondary,no,2394,no,no,unknown,9,jun,75,4,-1,0,unknown,no +44,services,married,secondary,no,3536,no,no,cellular,31,jul,106,6,-1,0,unknown,no +37,blue-collar,married,secondary,no,-4,yes,yes,unknown,29,may,381,1,-1,0,unknown,no +49,entrepreneur,married,secondary,no,-1965,no,yes,telephone,10,jul,317,2,-1,0,unknown,no +56,retired,married,secondary,no,5879,no,no,unknown,20,jun,237,3,-1,0,unknown,no +25,student,single,secondary,no,469,no,no,cellular,24,feb,524,1,187,2,success,no +29,management,single,tertiary,no,502,no,no,cellular,12,apr,366,2,199,3,other,no +35,admin.,single,tertiary,no,777,no,yes,cellular,28,may,85,1,-1,0,unknown,no +41,entrepreneur,divorced,secondary,no,1588,yes,yes,unknown,20,jun,10,8,-1,0,unknown,no +38,blue-collar,married,secondary,no,376,yes,no,unknown,7,may,1521,1,-1,0,unknown,no +61,housemaid,married,primary,no,848,no,no,cellular,27,apr,605,1,187,1,other,no +36,technician,married,secondary,no,-393,no,no,telephone,14,aug,119,4,-1,0,unknown,no +52,blue-collar,married,primary,no,4660,no,no,cellular,18,aug,82,3,-1,0,unknown,no +31,technician,single,tertiary,no,176,no,no,cellular,21,aug,241,4,-1,0,unknown,no +33,unemployed,married,tertiary,no,3335,no,no,cellular,15,jun,92,1,301,6,failure,no +49,blue-collar,married,primary,no,-167,no,no,cellular,7,jul,51,1,-1,0,unknown,no +45,technician,single,tertiary,no,1591,no,no,cellular,15,jul,392,4,-1,0,unknown,no +71,retired,married,secondary,no,2064,no,no,cellular,9,nov,379,2,92,3,failure,no +34,management,single,tertiary,no,1310,no,yes,cellular,20,nov,90,3,-1,0,unknown,no +33,admin.,single,secondary,no,1221,yes,no,unknown,23,may,245,1,-1,0,unknown,no +28,blue-collar,married,secondary,no,-26,no,yes,cellular,30,jan,81,1,-1,0,unknown,no +52,technician,married,secondary,no,337,yes,no,cellular,8,may,247,1,261,4,failure,no +54,blue-collar,married,primary,no,2440,no,yes,cellular,17,nov,334,1,-1,0,unknown,no +51,blue-collar,married,unknown,no,0,yes,no,telephone,7,may,10,4,-1,0,unknown,no +59,retired,married,secondary,no,25947,no,no,cellular,13,aug,292,2,-1,0,unknown,no +25,admin.,single,tertiary,no,1734,no,no,cellular,19,oct,366,1,-1,0,unknown,no +35,technician,married,tertiary,no,4,yes,no,cellular,14,may,88,1,-1,0,unknown,no +49,blue-collar,married,primary,no,1032,yes,no,unknown,2,jun,41,5,-1,0,unknown,no +33,technician,married,secondary,no,8,no,no,cellular,29,aug,462,2,-1,0,unknown,no +30,self-employed,single,tertiary,no,3137,yes,no,cellular,31,jul,368,7,-1,0,unknown,no +46,services,married,secondary,no,-522,yes,no,cellular,31,jul,61,2,-1,0,unknown,no +43,services,single,secondary,no,21,no,no,cellular,3,feb,203,3,-1,0,unknown,no +28,blue-collar,single,secondary,no,455,yes,no,cellular,11,jul,166,1,-1,0,unknown,no +41,blue-collar,married,primary,no,4,no,no,cellular,23,jul,74,5,-1,0,unknown,no +60,housemaid,divorced,primary,no,1412,no,no,cellular,22,jul,127,4,-1,0,unknown,no +49,blue-collar,married,secondary,no,141,no,no,cellular,6,aug,275,1,-1,0,unknown,no +30,technician,single,tertiary,no,6619,yes,no,cellular,21,aug,239,8,-1,0,unknown,no +45,unemployed,married,primary,no,0,yes,no,cellular,2,feb,570,2,-1,0,unknown,no +47,management,single,tertiary,no,0,no,no,cellular,21,aug,136,2,-1,0,unknown,no +29,blue-collar,single,secondary,no,202,no,no,cellular,30,jan,128,2,-1,0,unknown,no +59,admin.,married,secondary,no,2552,no,yes,cellular,5,aug,125,3,-1,0,unknown,no +27,technician,married,tertiary,no,276,no,no,unknown,16,may,218,2,-1,0,unknown,no +37,technician,married,secondary,yes,0,no,no,unknown,18,jun,236,1,-1,0,unknown,no +25,technician,divorced,secondary,no,86,no,yes,cellular,8,jul,483,2,-1,0,unknown,no +39,technician,divorced,secondary,no,507,no,no,cellular,20,aug,173,4,-1,0,unknown,no +35,blue-collar,married,primary,no,602,yes,no,cellular,14,may,467,6,-1,0,unknown,no +77,retired,married,primary,no,1492,no,no,telephone,1,sep,663,1,208,2,other,no +58,retired,divorced,secondary,no,0,no,no,unknown,17,jun,436,5,-1,0,unknown,no +38,management,single,tertiary,no,2117,no,no,cellular,14,aug,81,2,-1,0,unknown,no +50,blue-collar,married,primary,no,71,yes,no,unknown,6,may,678,1,-1,0,unknown,no +27,management,single,secondary,no,843,no,no,cellular,12,jul,123,2,185,1,success,no +46,blue-collar,married,secondary,no,229,yes,no,cellular,17,apr,191,1,-1,0,unknown,no +51,admin.,married,secondary,no,176,no,no,cellular,28,jan,214,1,183,2,failure,no +58,retired,married,secondary,no,13,no,no,cellular,7,aug,92,4,-1,0,unknown,no +42,entrepreneur,married,secondary,no,169,yes,no,telephone,15,may,87,4,-1,0,unknown,no +27,technician,married,secondary,no,58,yes,no,unknown,28,may,82,1,-1,0,unknown,no +34,technician,single,secondary,no,179,no,no,cellular,19,aug,294,3,-1,0,unknown,no +31,admin.,single,secondary,no,50,no,no,cellular,29,jan,395,1,-1,0,unknown,no +39,blue-collar,married,secondary,no,11854,yes,no,cellular,15,may,15,9,-1,0,unknown,no +42,admin.,single,secondary,no,1022,yes,no,unknown,5,may,146,2,-1,0,unknown,no +44,entrepreneur,married,secondary,no,692,no,no,unknown,18,jun,73,4,-1,0,unknown,no +51,management,divorced,tertiary,no,1937,yes,no,cellular,18,nov,185,4,152,11,other,no +50,admin.,single,secondary,no,26,no,yes,telephone,24,jul,179,4,-1,0,unknown,no +32,blue-collar,married,primary,no,0,yes,yes,cellular,8,may,82,2,361,4,failure,no +45,blue-collar,married,primary,no,900,yes,no,unknown,9,jun,213,1,-1,0,unknown,no +29,admin.,single,secondary,no,260,yes,no,cellular,4,feb,453,2,273,2,failure,no +53,blue-collar,married,secondary,yes,-634,no,no,cellular,19,aug,695,3,-1,0,unknown,no +29,services,married,secondary,no,30,yes,no,cellular,23,jul,74,3,-1,0,unknown,no +57,admin.,married,primary,no,1694,yes,no,telephone,17,nov,378,1,-1,0,unknown,no +41,blue-collar,married,secondary,no,167,no,no,unknown,20,jun,48,1,-1,0,unknown,no +58,technician,married,secondary,no,4299,yes,no,unknown,29,may,348,3,-1,0,unknown,no +52,housemaid,married,primary,no,135,no,no,cellular,8,aug,172,9,-1,0,unknown,no +44,admin.,married,unknown,no,40,no,yes,unknown,6,may,160,2,-1,0,unknown,no +34,blue-collar,married,primary,no,479,no,no,cellular,11,jul,772,1,-1,0,unknown,no +44,management,married,tertiary,no,1945,no,no,unknown,14,may,191,1,-1,0,unknown,no +56,technician,married,tertiary,no,1062,no,no,unknown,20,jun,37,2,-1,0,unknown,no +36,entrepreneur,married,tertiary,no,0,no,no,unknown,2,jun,87,3,-1,0,unknown,no +45,management,divorced,tertiary,no,2406,no,no,cellular,8,aug,248,2,-1,0,unknown,no +57,management,married,tertiary,no,337,no,no,cellular,5,feb,59,2,-1,0,unknown,no +49,management,married,tertiary,no,413,no,yes,cellular,31,jul,196,4,-1,0,unknown,no +37,blue-collar,married,secondary,no,362,yes,no,unknown,20,may,277,2,-1,0,unknown,no +44,blue-collar,divorced,unknown,no,284,no,no,cellular,3,feb,167,4,187,5,other,no +40,blue-collar,married,primary,no,-66,yes,no,unknown,6,may,288,1,-1,0,unknown,no +28,technician,single,secondary,no,922,yes,no,cellular,7,apr,304,1,-1,0,unknown,no +39,services,married,secondary,no,93,yes,no,cellular,11,may,72,4,-1,0,unknown,no +40,technician,single,tertiary,no,693,no,no,cellular,30,jan,427,1,-1,0,unknown,no +33,management,single,tertiary,no,307,no,no,cellular,23,jul,113,6,179,4,failure,no +37,management,single,tertiary,no,427,yes,no,unknown,20,may,121,1,-1,0,unknown,no +36,services,married,secondary,no,5024,no,no,unknown,21,may,139,1,-1,0,unknown,no +39,blue-collar,divorced,unknown,no,463,yes,no,cellular,18,may,169,1,-1,0,unknown,no +26,technician,single,tertiary,no,4130,no,no,cellular,28,jan,104,2,-1,0,unknown,no +48,management,married,tertiary,no,190,no,no,cellular,25,aug,14,22,-1,0,unknown,no +51,technician,married,secondary,no,2682,no,no,unknown,18,jun,56,1,-1,0,unknown,no +35,technician,single,tertiary,no,144,yes,yes,cellular,4,feb,202,4,113,20,failure,no +40,blue-collar,married,secondary,no,1938,yes,no,cellular,7,may,228,1,-1,0,unknown,no +40,admin.,single,secondary,no,90,yes,no,unknown,2,jun,252,4,-1,0,unknown,no +37,admin.,married,secondary,no,10465,no,no,unknown,17,jun,144,6,-1,0,unknown,no +43,blue-collar,married,secondary,no,917,yes,no,cellular,8,may,87,2,-1,0,unknown,no +48,management,married,primary,no,1744,no,no,unknown,9,jun,181,1,-1,0,unknown,no +46,admin.,divorced,secondary,no,1198,yes,yes,cellular,7,apr,837,1,307,1,other,no +34,services,single,tertiary,no,371,no,no,unknown,20,may,77,1,-1,0,unknown,no +52,management,married,tertiary,no,575,no,no,unknown,3,jun,315,1,-1,0,unknown,no +57,management,married,secondary,no,123,no,no,cellular,2,feb,154,2,-1,0,unknown,no +36,services,married,secondary,no,145,yes,no,cellular,2,feb,109,1,252,2,other,no +33,blue-collar,married,secondary,no,312,yes,no,unknown,4,jun,151,2,-1,0,unknown,no +30,technician,single,secondary,no,893,no,no,cellular,26,aug,45,3,-1,0,unknown,no +34,management,married,tertiary,no,105,yes,no,unknown,6,may,314,3,-1,0,unknown,no +35,management,single,tertiary,no,0,yes,no,unknown,2,jun,184,1,-1,0,unknown,no +34,blue-collar,single,secondary,no,186,no,no,cellular,2,feb,342,1,-1,0,unknown,no +32,technician,single,secondary,no,-114,no,no,cellular,12,aug,155,2,-1,0,unknown,no +30,blue-collar,single,secondary,no,228,no,no,cellular,5,feb,232,1,365,1,failure,no +33,housemaid,married,primary,no,0,no,no,cellular,11,aug,237,2,-1,0,unknown,no +31,technician,single,tertiary,no,279,yes,no,unknown,13,may,198,1,-1,0,unknown,no +33,admin.,single,secondary,no,241,no,no,cellular,22,jul,490,1,-1,0,unknown,no +48,technician,divorced,tertiary,no,2328,no,no,cellular,27,aug,129,7,-1,0,unknown,no +38,technician,married,secondary,no,728,yes,no,cellular,18,nov,286,1,181,2,other,no +53,blue-collar,married,secondary,no,4380,no,no,telephone,19,aug,223,7,-1,0,unknown,no +36,blue-collar,married,secondary,no,0,no,no,cellular,4,feb,235,1,244,1,failure,no +37,management,married,tertiary,no,5432,yes,yes,unknown,20,may,774,1,-1,0,unknown,no +36,blue-collar,married,secondary,no,222,yes,no,unknown,23,may,188,1,-1,0,unknown,no +39,blue-collar,married,secondary,no,3832,yes,no,unknown,20,jun,14,13,-1,0,unknown,no +50,admin.,married,secondary,no,715,no,no,cellular,28,aug,131,13,-1,0,unknown,no +49,blue-collar,married,primary,no,6215,yes,no,cellular,11,may,549,1,-1,0,unknown,no +41,services,married,secondary,no,2085,yes,no,unknown,26,may,125,4,-1,0,unknown,no +32,services,married,secondary,no,1398,yes,yes,cellular,15,may,233,1,-1,0,unknown,no +30,unemployed,single,tertiary,no,463,no,no,cellular,22,aug,374,4,-1,0,unknown,no +46,management,married,tertiary,yes,-337,no,yes,cellular,21,aug,120,2,-1,0,unknown,no +25,self-employed,married,tertiary,no,1182,yes,no,unknown,26,may,141,2,-1,0,unknown,no +27,services,married,secondary,no,94,yes,no,unknown,15,may,352,2,-1,0,unknown,no +28,student,single,secondary,no,5916,no,no,cellular,22,may,259,1,63,5,failure,no +47,management,divorced,tertiary,no,4556,yes,no,unknown,14,may,146,1,-1,0,unknown,no +39,management,divorced,tertiary,no,373,no,no,cellular,26,aug,148,4,-1,0,unknown,no +28,admin.,married,secondary,no,170,yes,yes,unknown,21,may,492,1,-1,0,unknown,no +45,technician,divorced,secondary,no,146,no,no,cellular,8,jul,216,1,-1,0,unknown,no +30,management,married,tertiary,no,1384,yes,no,telephone,14,aug,60,2,-1,0,unknown,no +48,blue-collar,married,primary,no,595,no,no,cellular,24,jul,464,1,-1,0,unknown,no +60,blue-collar,married,primary,no,4903,no,yes,unknown,9,jun,290,1,-1,0,unknown,no +48,entrepreneur,married,secondary,no,4037,no,no,unknown,6,jun,23,1,-1,0,unknown,no +38,management,single,tertiary,no,1746,yes,no,unknown,21,may,139,1,-1,0,unknown,no +31,management,single,tertiary,no,18,no,no,cellular,8,aug,82,2,-1,0,unknown,no +52,unemployed,married,primary,no,1724,no,no,cellular,29,jan,73,1,-1,0,unknown,no +28,blue-collar,single,secondary,no,1735,yes,no,cellular,20,apr,89,1,-1,0,unknown,no +51,blue-collar,married,unknown,no,0,no,no,unknown,2,jun,61,7,-1,0,unknown,no +32,technician,married,secondary,no,367,yes,no,cellular,11,may,214,2,276,3,failure,no +52,entrepreneur,divorced,secondary,no,105,no,yes,telephone,22,jul,275,4,-1,0,unknown,no +23,blue-collar,single,secondary,no,537,yes,no,cellular,7,may,172,1,353,2,other,no +51,management,married,tertiary,yes,0,no,yes,cellular,29,jul,204,6,-1,0,unknown,no +49,services,married,secondary,no,653,no,no,cellular,11,aug,317,2,-1,0,unknown,no +37,self-employed,married,secondary,no,487,no,yes,cellular,27,aug,155,15,-1,0,unknown,no +32,management,single,tertiary,no,1434,no,no,cellular,11,aug,1144,3,-1,0,unknown,no +32,management,married,tertiary,no,1683,yes,yes,cellular,20,apr,72,2,-1,0,unknown,no +56,services,married,secondary,no,530,yes,no,unknown,20,may,51,7,-1,0,unknown,no +49,technician,married,unknown,no,-287,yes,no,unknown,26,may,49,1,-1,0,unknown,no +49,management,married,tertiary,no,271,yes,no,cellular,5,feb,18,6,-1,0,unknown,no +53,management,married,tertiary,no,1945,no,no,telephone,7,aug,262,7,-1,0,unknown,no +32,admin.,married,secondary,no,57,no,yes,cellular,22,jul,50,2,-1,0,unknown,no +60,retired,married,secondary,no,5632,yes,no,cellular,30,jul,380,7,-1,0,unknown,no +40,blue-collar,married,secondary,no,750,yes,yes,cellular,16,apr,340,1,281,1,failure,no +41,services,married,secondary,no,3992,yes,no,telephone,20,nov,281,2,-1,0,unknown,no +55,blue-collar,married,primary,no,11,no,no,unknown,17,jun,150,2,-1,0,unknown,no +33,management,single,tertiary,no,383,yes,no,cellular,9,jul,125,1,-1,0,unknown,no +49,blue-collar,married,secondary,no,598,yes,no,cellular,15,may,219,6,-1,0,unknown,no +26,management,single,tertiary,no,3178,no,no,cellular,2,jun,64,1,-1,0,unknown,no +56,management,divorced,tertiary,no,505,no,no,cellular,9,feb,108,2,199,3,other,no +27,admin.,single,tertiary,no,73,no,no,cellular,29,jan,242,1,-1,0,unknown,no +55,unemployed,married,secondary,no,1436,yes,no,cellular,4,feb,969,2,-1,0,unknown,no +55,technician,divorced,tertiary,no,264,yes,no,unknown,30,may,34,2,-1,0,unknown,no +26,management,single,tertiary,no,1720,no,no,cellular,3,feb,383,1,-1,0,unknown,no +34,technician,married,secondary,no,-25,no,no,cellular,15,may,207,1,-1,0,unknown,no +38,housemaid,married,secondary,no,634,no,no,unknown,11,jun,105,4,-1,0,unknown,no +88,retired,married,primary,no,648,no,no,telephone,3,sep,318,1,-1,0,unknown,no +38,admin.,married,secondary,no,0,yes,no,telephone,16,jul,284,8,-1,0,unknown,no +44,technician,divorced,secondary,no,314,yes,no,unknown,12,aug,18,1,651,1,success,no +43,admin.,married,secondary,no,2,yes,yes,cellular,22,jul,254,1,-1,0,unknown,no +48,blue-collar,divorced,primary,no,2677,no,no,unknown,20,jun,23,3,-1,0,unknown,no +35,admin.,single,secondary,no,855,yes,no,unknown,12,may,241,3,-1,0,unknown,no +49,services,married,tertiary,no,411,no,no,telephone,14,may,9,6,-1,0,unknown,no +33,unemployed,single,tertiary,no,4874,no,no,telephone,22,feb,363,2,-1,0,unknown,no +77,unknown,married,unknown,no,397,no,no,telephone,8,nov,207,1,185,3,success,no +56,housemaid,divorced,primary,no,61,no,no,cellular,2,jun,144,1,-1,0,unknown,no +33,admin.,married,secondary,no,177,yes,no,cellular,11,may,100,1,-1,0,unknown,no +44,admin.,single,secondary,no,985,yes,yes,cellular,11,may,9,7,325,19,failure,no +40,admin.,married,secondary,no,767,yes,no,cellular,6,feb,168,1,-1,0,unknown,no +55,blue-collar,divorced,secondary,no,496,no,yes,cellular,28,jul,93,4,-1,0,unknown,no +31,management,married,tertiary,no,459,no,no,cellular,28,aug,13,14,-1,0,unknown,no +42,services,married,unknown,no,1340,no,yes,cellular,30,jul,88,5,-1,0,unknown,no +45,entrepreneur,divorced,secondary,no,1187,no,yes,cellular,20,nov,157,1,-1,0,unknown,no +38,admin.,single,secondary,no,4023,no,no,unknown,11,jun,339,2,-1,0,unknown,no +32,admin.,single,secondary,no,184,yes,no,unknown,8,may,230,4,-1,0,unknown,no +35,management,single,tertiary,no,688,no,no,cellular,2,feb,504,1,-1,0,unknown,no +70,retired,married,secondary,no,2064,no,no,cellular,22,oct,334,1,-1,0,unknown,no +41,technician,married,secondary,no,862,no,no,cellular,18,nov,474,2,-1,0,unknown,no +27,blue-collar,single,secondary,no,137,no,yes,cellular,25,jul,359,1,-1,0,unknown,no +56,entrepreneur,married,tertiary,no,51439,no,yes,cellular,8,jul,325,1,-1,0,unknown,no +59,management,divorced,tertiary,no,893,yes,no,cellular,16,apr,206,4,-1,0,unknown,no +31,management,married,tertiary,no,607,no,no,cellular,27,aug,200,5,-1,0,unknown,no +59,retired,married,primary,no,5521,yes,yes,unknown,13,may,94,1,-1,0,unknown,no +32,management,single,tertiary,no,1966,no,no,cellular,18,aug,176,3,-1,0,unknown,no +37,technician,single,secondary,no,363,yes,no,cellular,21,nov,39,4,182,3,failure,no +59,retired,divorced,unknown,no,-49,yes,no,unknown,13,may,248,2,-1,0,unknown,no +51,technician,married,tertiary,no,1533,no,no,unknown,18,jun,242,2,-1,0,unknown,no +42,blue-collar,married,primary,no,250,yes,no,unknown,4,jun,46,16,-1,0,unknown,no +38,admin.,divorced,secondary,no,407,yes,yes,cellular,19,aug,89,1,-1,0,unknown,no +35,technician,divorced,secondary,no,3549,yes,no,cellular,13,aug,250,4,-1,0,unknown,no +42,blue-collar,married,primary,no,0,yes,yes,cellular,7,may,209,2,-1,0,unknown,no +43,technician,single,tertiary,no,1017,yes,no,unknown,19,may,257,2,-1,0,unknown,no +31,management,married,tertiary,no,2652,no,no,cellular,25,aug,9,9,-1,0,unknown,no +56,blue-collar,married,primary,no,2442,no,yes,cellular,18,aug,111,7,-1,0,unknown,no +43,management,married,tertiary,no,0,yes,no,cellular,7,may,240,3,293,5,failure,no +39,management,married,tertiary,no,0,no,no,cellular,29,aug,94,2,-1,0,unknown,no +52,blue-collar,married,secondary,no,665,yes,no,unknown,15,may,57,4,-1,0,unknown,no +32,services,single,secondary,no,-1139,yes,no,cellular,7,jul,201,1,-1,0,unknown,no +37,self-employed,married,secondary,no,3396,no,no,cellular,18,aug,69,6,-1,0,unknown,no +35,entrepreneur,married,tertiary,no,542,yes,yes,unknown,27,may,591,5,-1,0,unknown,no +39,services,divorced,secondary,no,1957,yes,yes,cellular,20,nov,47,1,-1,0,unknown,no +44,self-employed,married,secondary,no,304,yes,no,telephone,9,feb,15,5,-1,0,unknown,no +41,entrepreneur,married,secondary,no,353,no,no,cellular,19,nov,90,2,-1,0,unknown,no +26,student,single,tertiary,no,13107,yes,no,cellular,27,may,112,2,-1,0,unknown,no +50,admin.,married,secondary,no,1138,yes,yes,cellular,31,jul,73,8,-1,0,unknown,no +33,technician,married,secondary,no,0,yes,yes,cellular,19,nov,163,2,-1,0,unknown,no +26,services,married,secondary,no,199,no,no,cellular,24,jul,139,6,-1,0,unknown,no +31,admin.,single,tertiary,no,383,no,yes,cellular,6,feb,119,1,214,1,failure,no +56,admin.,divorced,primary,no,0,no,yes,cellular,10,jul,542,1,-1,0,unknown,no +40,blue-collar,married,secondary,no,1844,yes,no,cellular,11,may,231,1,-1,0,unknown,no +27,technician,single,secondary,no,42,no,no,cellular,28,jan,251,1,-1,0,unknown,no +41,technician,married,secondary,no,1788,no,no,cellular,28,aug,222,1,-1,0,unknown,no +78,retired,married,primary,no,680,no,no,telephone,24,may,838,1,89,9,failure,no +60,housemaid,married,primary,no,517,no,no,unknown,12,jun,1178,3,-1,0,unknown,no +46,management,married,tertiary,no,3,no,no,cellular,18,aug,92,4,-1,0,unknown,no +25,blue-collar,single,primary,no,17,yes,no,unknown,13,may,97,2,-1,0,unknown,no +30,management,married,tertiary,no,-328,yes,no,unknown,14,may,242,5,-1,0,unknown,no +37,self-employed,divorced,tertiary,no,1513,no,no,unknown,30,may,510,1,-1,0,unknown,no +45,blue-collar,married,secondary,no,603,no,no,cellular,22,may,204,1,-1,0,unknown,no +31,management,single,tertiary,no,307,no,no,cellular,21,nov,86,2,-1,0,unknown,no +35,technician,married,tertiary,no,22,no,no,cellular,11,aug,109,1,-1,0,unknown,no +47,management,married,tertiary,no,0,no,no,unknown,5,jun,265,2,-1,0,unknown,no +55,services,married,secondary,no,283,yes,no,unknown,19,may,156,1,-1,0,unknown,no +28,self-employed,single,tertiary,no,5215,no,no,cellular,2,jun,673,1,-1,0,unknown,no +37,blue-collar,single,secondary,no,847,no,no,unknown,20,jun,54,1,-1,0,unknown,no +34,student,single,unknown,no,5827,no,no,cellular,17,nov,97,2,-1,0,unknown,no +45,blue-collar,single,secondary,no,0,yes,no,cellular,16,oct,283,1,165,3,failure,no +35,blue-collar,single,primary,no,-759,yes,no,cellular,31,jul,142,2,-1,0,unknown,no +32,technician,divorced,tertiary,no,267,no,no,cellular,26,may,128,1,-1,0,unknown,no +26,student,single,unknown,no,2503,no,no,cellular,30,apr,121,1,63,2,failure,no +47,blue-collar,married,secondary,no,3630,yes,no,unknown,14,may,133,4,-1,0,unknown,no +33,technician,married,secondary,no,218,yes,yes,telephone,2,mar,169,4,-1,0,unknown,no +42,management,single,tertiary,no,1146,yes,no,unknown,15,may,98,2,-1,0,unknown,no +31,unemployed,single,unknown,no,167,no,no,cellular,20,nov,316,1,-1,0,unknown,no +30,blue-collar,single,secondary,yes,447,no,no,cellular,19,nov,426,2,189,6,failure,no +40,management,single,secondary,no,10378,yes,no,cellular,17,nov,523,3,-1,0,unknown,no +52,management,married,tertiary,no,-2712,yes,yes,cellular,2,apr,253,1,-1,0,unknown,no +48,admin.,married,secondary,no,191,yes,no,cellular,5,feb,238,3,-1,0,unknown,no +36,blue-collar,divorced,primary,no,17,yes,no,cellular,16,jul,329,1,-1,0,unknown,no +36,blue-collar,single,secondary,no,2235,yes,no,cellular,20,nov,287,2,-1,0,unknown,no +47,blue-collar,married,primary,no,292,no,yes,telephone,28,jul,210,3,-1,0,unknown,no +31,technician,single,secondary,no,433,no,no,cellular,11,aug,1504,2,-1,0,unknown,no +60,retired,married,primary,no,364,yes,no,unknown,6,may,631,2,-1,0,unknown,no +49,blue-collar,married,secondary,no,30,yes,no,unknown,5,may,135,4,-1,0,unknown,no +41,technician,married,secondary,no,335,no,no,cellular,18,aug,169,3,-1,0,unknown,no +67,management,married,secondary,no,1287,no,no,cellular,2,feb,511,1,-1,0,unknown,no +35,technician,married,secondary,no,128,no,yes,cellular,29,jan,456,1,205,2,other,no +34,management,married,tertiary,no,133,yes,no,unknown,8,may,65,1,-1,0,unknown,no +49,technician,married,tertiary,no,-888,no,yes,cellular,21,jul,298,1,-1,0,unknown,no +33,management,divorced,tertiary,yes,280,no,yes,cellular,18,nov,155,1,-1,0,unknown,no +37,blue-collar,divorced,secondary,no,719,yes,no,cellular,13,may,118,1,365,1,failure,no +29,admin.,single,secondary,no,1261,no,no,cellular,5,feb,605,1,-1,0,unknown,no +53,housemaid,married,primary,no,1903,no,no,unknown,5,jun,827,1,-1,0,unknown,no +36,technician,married,tertiary,no,202,no,no,cellular,1,jun,206,1,192,1,failure,no +54,unknown,married,unknown,no,390,no,no,cellular,20,aug,68,5,-1,0,unknown,no +55,blue-collar,divorced,unknown,no,103,yes,no,cellular,21,jul,769,3,-1,0,unknown,no +38,blue-collar,married,primary,no,362,yes,no,unknown,8,may,100,5,-1,0,unknown,no +50,blue-collar,married,secondary,no,907,no,yes,cellular,16,jul,68,1,-1,0,unknown,no +50,entrepreneur,married,primary,no,199,no,no,cellular,11,may,228,2,363,2,failure,no +35,management,married,tertiary,no,4943,yes,no,cellular,18,nov,295,1,124,2,failure,no +35,management,single,tertiary,no,6659,yes,no,unknown,21,may,83,1,-1,0,unknown,no +51,retired,single,tertiary,no,730,yes,no,unknown,18,nov,287,2,-1,0,unknown,no +34,technician,single,secondary,no,664,yes,yes,cellular,11,may,88,2,343,2,other,no +28,blue-collar,single,primary,no,442,no,no,cellular,30,jan,157,2,-1,0,unknown,no +57,management,married,secondary,no,7162,no,no,cellular,17,nov,83,1,-1,0,unknown,no +38,entrepreneur,married,secondary,no,61,yes,yes,unknown,28,may,170,5,-1,0,unknown,no +41,retired,single,primary,no,2579,no,no,cellular,13,oct,213,1,-1,0,unknown,no +38,blue-collar,single,primary,no,1583,yes,no,cellular,15,may,386,1,-1,0,unknown,no +54,technician,single,secondary,no,224,no,no,cellular,5,aug,134,2,-1,0,unknown,no +52,technician,married,secondary,no,851,no,no,unknown,17,jun,87,2,-1,0,unknown,no +35,housemaid,married,tertiary,no,2880,no,no,cellular,29,jan,42,1,-1,0,unknown,no +40,admin.,married,secondary,no,1597,yes,no,unknown,30,may,633,1,-1,0,unknown,no +33,technician,divorced,tertiary,no,0,yes,no,cellular,2,jun,72,1,-1,0,unknown,no +35,management,divorced,tertiary,no,771,yes,yes,cellular,18,aug,221,5,-1,0,unknown,no +41,management,married,tertiary,no,30,no,no,cellular,19,aug,171,7,-1,0,unknown,no +33,technician,married,secondary,no,346,yes,yes,cellular,24,jul,379,1,-1,0,unknown,no +25,admin.,single,secondary,no,184,no,yes,telephone,11,jul,437,7,-1,0,unknown,no +34,management,married,tertiary,no,580,yes,no,cellular,10,jul,380,1,-1,0,unknown,no +28,blue-collar,single,unknown,no,913,yes,no,unknown,27,may,580,2,-1,0,unknown,no +41,admin.,divorced,secondary,no,1967,yes,no,cellular,18,may,115,1,341,1,failure,no +29,student,single,unknown,no,2929,no,no,cellular,11,aug,91,1,-1,0,unknown,no +38,technician,single,secondary,no,103,yes,no,cellular,2,feb,159,1,187,3,failure,no +39,blue-collar,married,secondary,no,661,yes,no,cellular,3,feb,84,4,267,4,failure,no +58,retired,married,secondary,no,19,no,yes,cellular,15,jul,106,3,-1,0,unknown,no +36,self-employed,single,tertiary,no,258,no,no,cellular,5,feb,230,1,-1,0,unknown,no +46,management,divorced,secondary,no,361,yes,no,unknown,19,may,86,7,-1,0,unknown,no +36,management,married,secondary,no,1898,yes,yes,unknown,30,may,233,1,-1,0,unknown,no +59,management,divorced,tertiary,no,0,no,no,telephone,30,jul,196,3,-1,0,unknown,no +36,technician,married,secondary,no,3579,no,no,cellular,14,aug,308,2,-1,0,unknown,no +34,housemaid,married,tertiary,no,1265,yes,no,unknown,6,jun,397,3,-1,0,unknown,no +29,technician,single,tertiary,no,940,yes,no,cellular,15,may,757,1,330,1,failure,no +39,blue-collar,married,secondary,no,854,yes,yes,cellular,6,may,181,1,-1,0,unknown,no +32,self-employed,married,tertiary,no,1464,no,no,telephone,14,aug,133,2,-1,0,unknown,no +29,services,married,secondary,no,3748,no,no,cellular,28,may,322,3,-1,0,unknown,no +53,technician,married,primary,no,6839,yes,no,cellular,19,nov,77,1,-1,0,unknown,no +29,blue-collar,married,primary,no,-235,yes,no,cellular,22,jul,189,1,-1,0,unknown,no +44,management,single,tertiary,yes,12,yes,no,cellular,19,nov,126,2,-1,0,unknown,no +28,student,single,tertiary,no,61,yes,no,cellular,16,jul,401,8,-1,0,unknown,no +37,technician,married,tertiary,no,0,no,no,cellular,28,aug,76,1,-1,0,unknown,no +45,management,divorced,tertiary,no,6269,yes,no,cellular,29,jul,20,2,-1,0,unknown,no +39,blue-collar,married,secondary,no,142,no,yes,cellular,14,jul,424,4,-1,0,unknown,no +34,services,married,secondary,no,24,yes,no,unknown,28,may,124,1,-1,0,unknown,no +32,blue-collar,married,unknown,no,1267,yes,no,cellular,18,may,66,2,-1,0,unknown,no +40,services,married,secondary,no,2346,no,no,unknown,16,jun,182,3,-1,0,unknown,no +30,technician,single,secondary,no,133,yes,no,cellular,29,jan,113,2,-1,0,unknown,no +55,management,married,tertiary,no,16786,no,no,cellular,18,nov,90,1,-1,0,unknown,no +50,management,married,tertiary,no,400,no,no,cellular,13,aug,343,2,-1,0,unknown,no +45,admin.,married,unknown,no,2033,no,no,cellular,28,may,48,4,-1,0,unknown,no +54,management,married,tertiary,no,1938,yes,no,telephone,31,jul,81,7,-1,0,unknown,no +37,admin.,married,secondary,yes,0,no,no,unknown,9,jun,89,1,-1,0,unknown,no +40,entrepreneur,married,tertiary,no,-164,no,no,cellular,7,may,87,1,-1,0,unknown,no +39,management,married,tertiary,no,1241,yes,no,cellular,5,jun,138,2,-1,0,unknown,no +59,entrepreneur,married,primary,no,0,no,no,unknown,19,jun,239,1,-1,0,unknown,no +40,technician,married,secondary,no,214,no,no,cellular,25,aug,59,6,-1,0,unknown,no +48,management,single,tertiary,no,399,no,yes,cellular,7,aug,126,1,-1,0,unknown,no +73,retired,married,primary,no,1388,no,no,cellular,20,jul,146,3,190,3,success,no +28,self-employed,single,tertiary,no,805,no,no,cellular,12,nov,116,5,170,2,failure,no +50,services,single,secondary,no,1716,yes,no,cellular,7,apr,272,1,-1,0,unknown,no +35,unemployed,married,secondary,no,2228,no,no,unknown,19,jun,461,2,-1,0,unknown,no +45,services,single,secondary,no,1515,no,no,unknown,20,jun,14,4,-1,0,unknown,no +51,self-employed,married,secondary,no,44,yes,yes,telephone,21,jul,79,1,-1,0,unknown,no +47,admin.,single,primary,no,683,no,no,cellular,20,nov,101,1,-1,0,unknown,no +54,blue-collar,divorced,unknown,no,-473,yes,no,cellular,14,may,239,1,351,2,failure,no +54,services,married,secondary,no,4482,yes,no,unknown,20,may,97,2,-1,0,unknown,no +35,blue-collar,married,secondary,no,911,yes,no,cellular,20,nov,434,2,181,5,other,no +74,retired,married,secondary,no,3771,no,no,telephone,16,apr,159,1,-1,0,unknown,no +32,technician,married,secondary,no,1119,no,no,cellular,19,nov,371,2,-1,0,unknown,no +56,management,married,tertiary,no,-6,no,no,telephone,31,jul,29,16,-1,0,unknown,no +57,retired,divorced,secondary,no,-663,yes,no,cellular,13,may,210,1,351,2,failure,no +33,blue-collar,married,secondary,no,686,yes,yes,telephone,14,may,30,6,343,12,other,no +44,blue-collar,married,primary,no,112,yes,no,unknown,14,may,225,2,-1,0,unknown,no +30,admin.,divorced,secondary,no,83,yes,yes,unknown,6,may,310,1,-1,0,unknown,no +48,blue-collar,married,primary,no,418,yes,no,unknown,9,may,102,3,-1,0,unknown,no +38,management,married,secondary,no,3840,yes,yes,cellular,17,nov,62,1,-1,0,unknown,no +26,management,single,tertiary,no,7628,no,no,cellular,1,apr,263,1,-1,0,unknown,no +24,blue-collar,single,secondary,no,-10,yes,no,unknown,13,may,106,1,-1,0,unknown,no +28,management,married,secondary,no,3,yes,no,cellular,14,sep,112,2,24,2,other,no +55,management,married,tertiary,no,1433,no,no,unknown,12,jun,298,3,-1,0,unknown,no +40,technician,married,secondary,no,0,yes,yes,cellular,26,jul,105,2,172,1,failure,no +39,management,married,tertiary,no,756,yes,no,unknown,2,jun,268,1,-1,0,unknown,no +43,services,divorced,secondary,no,313,yes,no,cellular,8,may,155,2,-1,0,unknown,no +32,blue-collar,married,secondary,no,4996,yes,no,unknown,20,may,205,2,-1,0,unknown,no +35,blue-collar,married,secondary,no,74,no,no,cellular,23,jul,248,2,-1,0,unknown,no +53,technician,married,tertiary,no,431,yes,no,cellular,5,may,55,1,328,1,failure,no +44,unemployed,divorced,secondary,no,522,no,no,cellular,7,apr,411,1,-1,0,unknown,no +42,housemaid,married,primary,no,0,no,yes,cellular,11,jul,83,2,-1,0,unknown,no +59,retired,married,tertiary,no,1296,no,no,cellular,11,aug,862,11,-1,0,unknown,no +32,blue-collar,single,secondary,no,435,yes,no,unknown,21,may,373,2,-1,0,unknown,no +47,blue-collar,married,secondary,no,2128,yes,no,telephone,17,apr,98,1,-1,0,unknown,no +30,management,single,secondary,no,-383,yes,no,cellular,18,may,170,1,-1,0,unknown,no +38,technician,single,secondary,no,1019,yes,no,cellular,6,may,249,1,-1,0,unknown,no +40,blue-collar,single,primary,no,1780,no,yes,unknown,11,jun,114,1,-1,0,unknown,no +34,management,single,tertiary,no,431,no,no,cellular,16,jul,401,1,-1,0,unknown,no +33,technician,single,tertiary,no,8097,no,yes,cellular,21,aug,500,2,-1,0,unknown,no +27,unemployed,single,secondary,no,0,yes,no,cellular,21,jul,53,6,-1,0,unknown,no +39,blue-collar,married,secondary,no,138,no,no,unknown,9,jun,61,2,-1,0,unknown,no +38,blue-collar,married,secondary,no,292,yes,yes,unknown,6,jun,84,2,-1,0,unknown,no +55,services,married,tertiary,no,606,no,yes,cellular,18,nov,114,2,-1,0,unknown,no +59,blue-collar,married,secondary,no,0,yes,no,unknown,5,may,226,1,-1,0,unknown,no +37,management,married,tertiary,no,26,no,no,cellular,17,jun,151,7,62,4,failure,no +38,services,single,secondary,no,322,yes,no,unknown,26,may,61,1,-1,0,unknown,no +20,admin.,single,secondary,no,336,no,yes,cellular,5,jun,133,1,-1,0,unknown,no +51,entrepreneur,married,tertiary,no,36935,yes,no,cellular,21,nov,41,1,-1,0,unknown,no +48,admin.,married,unknown,no,0,yes,no,cellular,8,may,85,1,168,2,failure,no +36,management,married,tertiary,no,928,yes,no,cellular,20,apr,239,1,-1,0,unknown,no +30,management,single,tertiary,no,2,no,no,cellular,27,aug,19,21,-1,0,unknown,no +45,management,married,tertiary,no,2220,yes,no,cellular,11,jul,128,2,-1,0,unknown,no +31,blue-collar,divorced,secondary,no,1125,no,yes,unknown,15,may,548,1,-1,0,unknown,no +40,technician,married,secondary,no,503,yes,no,unknown,14,may,127,3,-1,0,unknown,no +58,entrepreneur,married,tertiary,no,2920,yes,no,unknown,9,jun,136,1,-1,0,unknown,no +35,blue-collar,married,primary,no,4319,no,no,cellular,16,apr,266,1,-1,0,unknown,no +42,management,married,tertiary,no,0,no,no,cellular,6,aug,81,3,-1,0,unknown,no +48,blue-collar,married,primary,no,1080,yes,no,cellular,11,may,197,2,-1,0,unknown,no +52,technician,single,secondary,no,36,yes,no,unknown,16,may,335,1,-1,0,unknown,no +30,services,single,tertiary,no,803,no,no,cellular,30,apr,243,1,-1,0,unknown,no +43,blue-collar,married,primary,no,8,no,no,telephone,7,jul,245,5,-1,0,unknown,no +43,blue-collar,married,secondary,no,833,no,no,cellular,17,jul,156,1,-1,0,unknown,no +30,management,single,tertiary,no,3410,yes,no,cellular,18,may,140,1,-1,0,unknown,no +46,technician,married,unknown,no,605,yes,no,cellular,20,apr,780,2,-1,0,unknown,no +43,entrepreneur,married,tertiary,no,13342,yes,no,cellular,18,nov,465,1,-1,0,unknown,no +36,admin.,married,tertiary,no,586,yes,no,cellular,28,jan,126,1,-1,0,unknown,no +42,management,married,tertiary,no,559,no,no,cellular,19,aug,88,1,-1,0,unknown,no +41,blue-collar,married,secondary,no,4910,yes,no,cellular,3,apr,1090,1,-1,0,unknown,no +50,management,single,secondary,no,4527,yes,no,cellular,14,may,140,1,-1,0,unknown,no +25,blue-collar,single,primary,no,-221,yes,no,unknown,23,may,250,1,-1,0,unknown,no +36,management,married,tertiary,no,242,yes,no,cellular,14,may,20,1,-1,0,unknown,no +59,retired,divorced,primary,no,20,no,no,cellular,10,jul,298,1,-1,0,unknown,no +50,admin.,divorced,secondary,no,797,yes,no,telephone,25,jul,72,8,-1,0,unknown,no +45,management,married,primary,no,321,yes,no,cellular,30,jul,918,4,-1,0,unknown,no +49,entrepreneur,married,tertiary,no,313,yes,no,cellular,17,nov,42,2,188,2,failure,no +54,technician,divorced,secondary,no,136,no,yes,cellular,10,jul,151,4,-1,0,unknown,no +33,admin.,married,secondary,no,0,yes,yes,cellular,9,jul,160,1,-1,0,unknown,no +67,technician,married,secondary,no,0,no,no,cellular,13,aug,1152,2,188,1,success,no +31,admin.,married,secondary,no,54,yes,no,cellular,21,nov,226,1,-1,0,unknown,no +59,blue-collar,divorced,secondary,no,0,no,yes,cellular,15,jul,237,4,-1,0,unknown,no +28,admin.,single,tertiary,no,373,yes,no,cellular,4,feb,126,1,-1,0,unknown,no +58,management,divorced,tertiary,no,577,no,no,unknown,15,may,1244,3,-1,0,unknown,no +30,services,divorced,secondary,no,0,no,no,cellular,29,jan,89,1,-1,0,unknown,no +53,retired,married,secondary,no,1296,yes,no,unknown,17,jun,115,1,-1,0,unknown,no +51,unknown,married,unknown,no,2642,no,no,cellular,29,jul,52,6,-1,0,unknown,no +47,blue-collar,married,secondary,no,3237,yes,no,unknown,15,may,198,3,-1,0,unknown,no +30,management,single,tertiary,no,1191,no,no,cellular,11,aug,381,4,-1,0,unknown,no +38,management,married,tertiary,no,2278,yes,yes,cellular,13,may,244,1,-1,0,unknown,no +53,technician,single,secondary,no,-165,yes,no,cellular,9,jul,89,1,-1,0,unknown,no +59,retired,married,unknown,no,178,yes,no,telephone,11,jul,330,2,-1,0,unknown,no +57,unemployed,married,tertiary,no,209,no,no,unknown,19,jun,453,1,-1,0,unknown,no +36,self-employed,single,tertiary,no,3560,no,no,unknown,2,jun,409,2,-1,0,unknown,no +42,blue-collar,married,secondary,no,490,yes,no,unknown,5,may,386,2,-1,0,unknown,no +56,technician,single,secondary,no,3499,yes,no,unknown,29,may,248,3,-1,0,unknown,no +38,unemployed,married,secondary,no,995,no,no,unknown,26,jul,84,1,-1,0,unknown,no +47,management,married,unknown,no,1128,no,no,cellular,28,jan,65,2,-1,0,unknown,no +30,self-employed,married,tertiary,no,163,yes,no,cellular,18,may,149,1,362,8,other,no +42,entrepreneur,single,primary,no,103,yes,no,unknown,19,may,156,5,-1,0,unknown,no +34,management,divorced,tertiary,no,70,yes,no,unknown,22,jul,5,1,701,6,other,no +29,services,married,secondary,no,191,yes,no,cellular,17,apr,87,1,-1,0,unknown,no +49,management,married,secondary,no,1601,no,no,cellular,29,jul,47,5,-1,0,unknown,no +59,management,married,tertiary,no,287,yes,no,cellular,20,apr,818,2,242,8,failure,no +30,management,single,tertiary,no,199,no,yes,cellular,28,jul,131,7,-1,0,unknown,no +37,technician,married,secondary,no,177,yes,no,cellular,16,jul,464,3,-1,0,unknown,no +27,admin.,single,tertiary,no,832,no,no,cellular,21,apr,336,1,-1,0,unknown,no +24,student,single,secondary,no,493,yes,no,cellular,13,may,85,4,358,1,other,no +55,management,married,tertiary,no,13578,no,no,cellular,29,oct,247,2,-1,0,unknown,no +60,technician,divorced,secondary,no,-50,no,no,cellular,28,aug,433,12,-1,0,unknown,no +30,services,married,secondary,no,292,yes,yes,cellular,15,apr,651,4,-1,0,unknown,no +34,blue-collar,divorced,secondary,no,0,yes,no,cellular,5,may,150,1,-1,0,unknown,no +36,admin.,married,secondary,no,0,no,yes,cellular,29,jul,113,8,-1,0,unknown,no +44,blue-collar,married,secondary,no,294,yes,no,unknown,19,may,66,2,-1,0,unknown,no +38,management,married,tertiary,no,-558,yes,no,cellular,21,jul,533,1,-1,0,unknown,no +60,management,married,tertiary,yes,-311,no,no,cellular,25,aug,151,6,-1,0,unknown,no +58,services,married,secondary,no,688,no,no,cellular,6,aug,152,2,-1,0,unknown,no +30,admin.,single,secondary,no,-548,yes,yes,cellular,28,jul,70,2,-1,0,unknown,no +39,technician,married,tertiary,no,94,no,no,cellular,7,aug,70,2,-1,0,unknown,no +44,housemaid,single,secondary,no,299,no,no,cellular,20,nov,186,1,-1,0,unknown,no +32,management,married,secondary,no,6217,yes,yes,cellular,18,nov,486,2,181,2,failure,no +32,blue-collar,married,primary,no,494,yes,no,unknown,26,may,252,2,-1,0,unknown,no +47,admin.,single,secondary,no,594,yes,no,unknown,7,may,161,1,-1,0,unknown,no +37,technician,married,tertiary,yes,0,yes,no,unknown,14,may,93,14,-1,0,unknown,no +86,retired,divorced,unknown,no,157,no,no,telephone,7,sep,147,1,-1,0,unknown,no +38,technician,married,secondary,no,183,yes,no,cellular,16,apr,256,3,339,2,failure,no +31,management,married,tertiary,no,22867,yes,no,unknown,27,may,241,2,-1,0,unknown,no +49,services,single,secondary,no,1884,yes,no,cellular,8,may,43,1,-1,0,unknown,no +53,retired,married,primary,no,0,no,yes,unknown,27,jun,747,1,-1,0,unknown,no +55,management,divorced,tertiary,no,446,no,no,cellular,2,feb,159,1,-1,0,unknown,no +30,management,single,tertiary,no,114,no,no,cellular,14,aug,65,4,-1,0,unknown,no +41,management,married,tertiary,no,217,no,no,cellular,19,nov,328,1,-1,0,unknown,no +31,services,married,secondary,no,1783,yes,yes,cellular,6,may,219,1,-1,0,unknown,no +39,services,married,secondary,no,208,no,yes,cellular,9,feb,122,2,-1,0,unknown,no +43,blue-collar,married,secondary,no,1311,yes,no,unknown,14,may,746,1,-1,0,unknown,no +45,management,divorced,tertiary,no,2813,yes,no,cellular,13,may,43,1,-1,0,unknown,no +42,management,married,tertiary,no,783,yes,no,cellular,19,nov,77,2,128,3,failure,no +35,management,single,tertiary,no,243,yes,no,unknown,12,may,102,3,-1,0,unknown,no +43,self-employed,married,secondary,no,5704,yes,no,cellular,6,aug,139,2,-1,0,unknown,no +54,management,married,secondary,no,2895,yes,no,cellular,9,feb,20,2,256,1,failure,no +43,blue-collar,married,primary,no,377,no,yes,unknown,20,jun,11,5,-1,0,unknown,no +33,admin.,married,secondary,no,2,yes,no,unknown,20,may,201,1,-1,0,unknown,no +31,management,single,tertiary,no,153,no,no,cellular,9,feb,65,3,-1,0,unknown,no +42,unemployed,married,secondary,no,-165,yes,yes,unknown,27,may,179,3,-1,0,unknown,no +34,blue-collar,single,secondary,no,2764,yes,no,cellular,13,may,158,1,357,1,failure,no +36,blue-collar,married,secondary,no,6699,yes,no,cellular,20,apr,201,3,-1,0,unknown,no +51,services,married,secondary,no,7,yes,no,cellular,31,jul,8,30,-1,0,unknown,no +50,blue-collar,married,primary,no,2590,yes,no,unknown,9,may,257,6,-1,0,unknown,no +32,student,single,secondary,no,14,no,no,cellular,19,aug,144,3,136,1,other,no +37,management,married,tertiary,no,2672,yes,no,cellular,11,aug,549,1,-1,0,unknown,no +50,blue-collar,divorced,secondary,no,881,yes,yes,cellular,20,apr,162,1,-1,0,unknown,no +52,blue-collar,married,primary,no,4793,yes,no,unknown,6,jun,176,2,-1,0,unknown,no +30,admin.,divorced,secondary,no,370,yes,no,unknown,15,may,160,1,-1,0,unknown,no +38,management,single,tertiary,no,6836,yes,no,unknown,29,may,374,4,-1,0,unknown,no +50,blue-collar,married,primary,no,859,yes,yes,telephone,9,feb,56,5,196,7,failure,no +32,blue-collar,single,secondary,no,1940,yes,yes,unknown,13,may,299,3,-1,0,unknown,no +24,blue-collar,single,primary,no,1033,yes,no,cellular,24,nov,283,1,-1,0,unknown,no +36,management,married,tertiary,no,532,yes,no,cellular,14,may,603,1,-1,0,unknown,no +42,technician,single,secondary,no,-321,no,no,cellular,28,jan,230,2,-1,0,unknown,no +50,blue-collar,married,primary,no,383,no,no,telephone,2,oct,382,2,-1,0,unknown,no +41,blue-collar,married,primary,no,865,no,yes,unknown,19,may,19,5,-1,0,unknown,no +34,admin.,single,secondary,no,1352,yes,no,cellular,20,apr,126,1,334,3,other,no +29,technician,married,tertiary,no,-722,no,yes,unknown,27,jun,121,4,-1,0,unknown,no +47,management,married,secondary,no,1144,no,yes,cellular,29,jan,324,1,-1,0,unknown,no +44,blue-collar,married,secondary,no,794,yes,no,cellular,5,feb,342,1,252,1,other,no +49,self-employed,married,secondary,no,2061,yes,yes,unknown,30,may,137,3,-1,0,unknown,no +39,blue-collar,divorced,secondary,no,36,yes,no,unknown,12,may,109,2,-1,0,unknown,no +31,entrepreneur,single,tertiary,no,734,yes,no,cellular,7,may,295,1,168,4,other,no +36,services,single,secondary,no,99,no,no,unknown,17,jun,256,9,-1,0,unknown,no +44,blue-collar,married,secondary,no,879,yes,no,cellular,3,apr,383,1,-1,0,unknown,no +29,management,married,tertiary,no,0,yes,no,telephone,15,jul,91,2,-1,0,unknown,no +33,management,single,tertiary,no,4128,yes,no,unknown,12,may,456,6,-1,0,unknown,no +40,admin.,married,secondary,no,0,yes,no,unknown,23,may,193,2,-1,0,unknown,no +33,management,single,tertiary,no,275,no,no,cellular,18,nov,348,1,-1,0,unknown,no +54,management,married,tertiary,no,6525,yes,no,cellular,19,nov,133,1,170,3,failure,no +32,management,single,tertiary,no,9317,no,no,cellular,2,nov,92,3,-1,0,unknown,no +57,management,married,tertiary,no,350,no,no,telephone,4,may,87,3,-1,0,unknown,no +46,management,married,tertiary,no,699,no,no,cellular,2,feb,241,1,-1,0,unknown,no +30,blue-collar,single,secondary,no,906,yes,yes,unknown,21,may,218,7,-1,0,unknown,no +35,management,married,secondary,no,97,yes,no,unknown,29,may,135,4,-1,0,unknown,no +36,admin.,single,secondary,no,115,no,no,cellular,4,may,134,3,91,1,failure,no +37,admin.,married,secondary,no,36,yes,no,unknown,13,may,428,1,-1,0,unknown,no +41,admin.,divorced,secondary,no,1076,yes,no,cellular,3,jun,77,2,391,2,other,no +38,blue-collar,single,secondary,no,-56,yes,yes,unknown,6,jun,247,2,-1,0,unknown,no +34,admin.,single,secondary,no,1504,yes,no,unknown,12,may,395,3,-1,0,unknown,no +45,services,single,secondary,no,482,yes,yes,unknown,30,may,637,2,-1,0,unknown,no +53,blue-collar,married,secondary,no,208,no,no,unknown,20,jun,333,15,-1,0,unknown,no +42,management,married,tertiary,no,441,no,no,cellular,7,aug,296,9,-1,0,unknown,no +55,admin.,married,secondary,no,-2,no,no,cellular,28,aug,76,1,-1,0,unknown,no +57,housemaid,divorced,primary,no,8278,no,no,cellular,17,nov,408,3,-1,0,unknown,no +58,management,married,secondary,no,407,yes,no,cellular,29,jul,145,2,-1,0,unknown,no +48,technician,married,secondary,no,197,no,yes,cellular,3,feb,47,2,222,3,other,no +33,technician,married,secondary,no,348,yes,no,cellular,7,may,263,2,294,1,success,no +43,technician,divorced,tertiary,no,101,no,no,cellular,19,aug,173,3,-1,0,unknown,no +29,blue-collar,married,secondary,no,294,yes,no,unknown,14,may,594,2,-1,0,unknown,no +26,admin.,single,tertiary,no,3730,yes,no,cellular,11,mar,93,1,98,4,other,no +56,management,divorced,tertiary,no,3885,yes,no,cellular,10,jul,51,1,-1,0,unknown,no +54,technician,married,tertiary,no,4582,yes,no,unknown,15,may,165,1,-1,0,unknown,no +33,services,married,secondary,no,403,yes,no,unknown,20,may,274,2,-1,0,unknown,no +36,entrepreneur,single,tertiary,no,145,yes,no,cellular,18,may,450,2,304,2,success,no +46,technician,single,secondary,no,834,yes,no,cellular,11,jul,196,2,-1,0,unknown,no +40,services,married,secondary,no,664,yes,yes,cellular,18,may,29,5,-1,0,unknown,no +50,management,divorced,tertiary,no,299,no,no,cellular,17,nov,666,3,-1,0,unknown,no +55,entrepreneur,divorced,primary,no,29,no,no,unknown,16,jun,500,1,-1,0,unknown,no +41,admin.,married,secondary,no,124,yes,no,cellular,12,may,191,3,-1,0,unknown,no +26,technician,single,secondary,no,124,yes,no,unknown,12,may,57,8,-1,0,unknown,no +35,management,single,tertiary,no,0,no,no,cellular,29,aug,131,2,-1,0,unknown,no +53,self-employed,married,tertiary,no,20,yes,no,cellular,7,aug,218,2,-1,0,unknown,no +31,technician,single,secondary,no,31868,no,no,telephone,14,aug,34,6,-1,0,unknown,no +59,retired,married,secondary,no,599,yes,no,cellular,7,may,31,1,-1,0,unknown,no +42,technician,divorced,secondary,no,248,no,no,cellular,19,aug,163,4,-1,0,unknown,no +45,technician,married,secondary,no,0,no,no,telephone,13,aug,99,1,-1,0,unknown,no +58,admin.,married,primary,no,879,yes,no,unknown,16,may,242,7,-1,0,unknown,no +33,technician,single,tertiary,no,34,no,no,cellular,28,aug,13,30,-1,0,unknown,no +47,blue-collar,married,secondary,no,2548,yes,no,cellular,11,may,577,1,368,1,other,no +31,services,single,secondary,no,3,yes,no,cellular,5,may,41,1,-1,0,unknown,no +40,admin.,married,secondary,no,1395,yes,yes,cellular,7,jul,122,2,-1,0,unknown,no +28,blue-collar,married,primary,no,-196,no,no,cellular,7,jul,209,1,-1,0,unknown,no +42,blue-collar,married,primary,no,205,yes,no,cellular,17,apr,582,1,-1,0,unknown,no +53,blue-collar,single,secondary,no,1442,no,no,telephone,9,dec,137,8,188,2,other,no +33,admin.,married,secondary,no,393,yes,no,unknown,28,may,383,1,-1,0,unknown,no +28,blue-collar,married,secondary,no,-185,yes,yes,unknown,13,may,170,1,-1,0,unknown,no +50,housemaid,single,primary,no,1158,yes,no,cellular,3,feb,116,3,265,3,failure,no +30,blue-collar,single,secondary,no,1165,yes,no,cellular,18,may,365,2,-1,0,unknown,no +37,blue-collar,married,secondary,no,10721,yes,no,unknown,18,jun,394,3,-1,0,unknown,no +39,technician,divorced,secondary,no,1270,yes,no,unknown,29,may,245,4,-1,0,unknown,no +29,management,married,tertiary,no,16,yes,no,cellular,16,jul,605,6,-1,0,unknown,no +32,technician,single,secondary,no,930,yes,no,unknown,21,may,122,1,-1,0,unknown,no +38,technician,single,tertiary,no,0,no,no,cellular,28,aug,247,2,-1,0,unknown,no +55,technician,married,secondary,no,0,no,no,cellular,27,jul,506,2,-1,0,unknown,no +38,admin.,married,primary,no,-175,yes,no,telephone,21,jul,86,9,-1,0,unknown,no +47,blue-collar,married,primary,no,328,yes,no,cellular,7,may,58,1,-1,0,unknown,no +57,management,married,secondary,no,0,no,no,cellular,28,jan,132,1,-1,0,unknown,no +32,technician,married,secondary,no,2556,no,no,cellular,6,aug,269,3,-1,0,unknown,no +37,unemployed,married,secondary,no,4969,yes,no,cellular,6,may,169,1,-1,0,unknown,no +30,management,single,tertiary,no,726,yes,no,cellular,16,apr,39,1,342,3,failure,no +39,technician,married,secondary,no,-1451,yes,yes,cellular,30,jul,65,5,-1,0,unknown,no +45,housemaid,divorced,primary,no,221,no,no,cellular,2,feb,93,1,235,1,failure,no +25,student,single,secondary,no,3090,no,no,cellular,21,aug,139,1,-1,0,unknown,no +53,services,married,unknown,no,257,yes,no,unknown,5,may,209,2,-1,0,unknown,no +39,management,single,tertiary,no,139,no,no,cellular,22,aug,109,2,-1,0,unknown,no +35,management,married,tertiary,no,3168,no,no,cellular,22,aug,24,30,-1,0,unknown,no +58,housemaid,married,primary,no,260,yes,no,telephone,15,may,71,5,364,3,failure,no +27,self-employed,single,tertiary,no,4574,no,no,cellular,12,aug,187,2,-1,0,unknown,no +39,housemaid,single,primary,no,109,yes,no,unknown,6,may,699,3,-1,0,unknown,no +41,blue-collar,married,secondary,no,140,yes,no,cellular,3,jun,96,1,125,2,failure,no +56,management,married,tertiary,no,-45,yes,no,unknown,30,may,116,6,-1,0,unknown,no +54,technician,married,tertiary,no,6507,no,no,cellular,26,may,145,1,-1,0,unknown,no +46,blue-collar,married,primary,no,1291,yes,no,cellular,14,may,142,3,259,17,failure,no +35,management,married,tertiary,yes,-10,yes,no,cellular,15,may,168,2,364,1,other,no +41,admin.,single,secondary,no,0,no,no,telephone,25,jul,286,2,-1,0,unknown,no +36,blue-collar,married,primary,no,-20,yes,no,unknown,7,may,353,3,-1,0,unknown,no +37,admin.,single,secondary,no,309,yes,no,cellular,15,may,58,3,-1,0,unknown,no +28,technician,single,secondary,no,250,no,yes,cellular,29,jan,133,1,-1,0,unknown,no +49,management,single,tertiary,no,370,no,no,cellular,19,aug,386,3,-1,0,unknown,no +41,unemployed,married,primary,no,183,yes,no,cellular,29,jul,271,1,-1,0,unknown,no +60,retired,married,secondary,no,8590,no,no,unknown,5,jun,85,1,-1,0,unknown,no +30,technician,married,secondary,no,1011,yes,no,unknown,16,may,109,1,-1,0,unknown,no +48,services,married,secondary,no,1355,no,no,cellular,12,aug,409,7,-1,0,unknown,no +35,technician,single,secondary,no,1609,yes,no,unknown,30,may,288,3,-1,0,unknown,no +28,blue-collar,single,secondary,no,75,no,no,unknown,1,jun,7,1,-1,0,unknown,no +42,admin.,married,secondary,no,12,yes,no,cellular,16,apr,466,4,-1,0,unknown,no +32,admin.,married,secondary,no,3540,yes,no,cellular,18,may,213,1,178,1,failure,no +40,management,married,secondary,no,8486,no,no,unknown,6,may,260,3,-1,0,unknown,no +53,management,married,tertiary,no,20772,no,no,cellular,4,feb,715,1,-1,0,unknown,no +55,blue-collar,married,primary,no,3297,yes,yes,telephone,30,apr,96,1,-1,0,unknown,no +41,management,married,tertiary,no,9,yes,no,cellular,22,jul,82,3,-1,0,unknown,no +33,management,married,tertiary,no,-139,no,no,cellular,8,jul,290,1,-1,0,unknown,no +58,blue-collar,married,secondary,no,381,no,no,cellular,11,nov,79,4,-1,0,unknown,no +32,blue-collar,single,secondary,no,760,yes,no,cellular,16,apr,445,1,148,2,other,no +36,blue-collar,married,unknown,no,722,yes,no,unknown,20,may,268,2,-1,0,unknown,no +31,technician,single,tertiary,yes,24,no,no,cellular,21,aug,246,2,-1,0,unknown,no +33,management,married,tertiary,no,148,no,no,unknown,20,may,717,1,-1,0,unknown,no +45,blue-collar,married,primary,no,6691,no,no,cellular,13,aug,211,2,-1,0,unknown,no +40,housemaid,married,primary,no,0,no,no,cellular,28,aug,16,20,-1,0,unknown,no +29,blue-collar,married,primary,no,787,yes,no,cellular,24,jul,257,2,-1,0,unknown,no +53,self-employed,married,primary,no,4576,no,no,telephone,30,jul,82,2,-1,0,unknown,no +53,technician,divorced,unknown,no,629,yes,no,cellular,8,may,298,1,-1,0,unknown,no +35,management,married,tertiary,no,1193,yes,no,unknown,2,jun,101,2,-1,0,unknown,no +33,blue-collar,married,primary,no,-132,yes,yes,cellular,18,may,170,6,-1,0,unknown,no +38,entrepreneur,married,tertiary,no,1438,no,no,cellular,13,nov,122,5,-1,0,unknown,no +31,blue-collar,single,secondary,no,-159,no,yes,telephone,21,nov,49,1,-1,0,unknown,no +48,admin.,married,secondary,no,2235,yes,yes,unknown,15,may,755,2,-1,0,unknown,no +25,services,married,secondary,no,10,yes,no,cellular,7,may,51,1,294,1,failure,no +35,management,single,tertiary,no,805,no,no,cellular,17,sep,613,1,-1,0,unknown,no +55,blue-collar,married,primary,no,-79,no,yes,unknown,27,jun,293,3,-1,0,unknown,no +31,blue-collar,married,secondary,no,1664,yes,no,cellular,7,may,603,2,17,2,failure,no +43,unemployed,divorced,secondary,no,0,yes,no,cellular,24,jul,229,2,-1,0,unknown,no +31,admin.,single,secondary,no,690,no,no,cellular,4,may,10,4,87,12,failure,no +56,services,married,unknown,no,616,no,no,unknown,18,jun,1812,1,-1,0,unknown,no +34,unemployed,married,secondary,no,200,yes,no,unknown,26,may,155,6,-1,0,unknown,no +55,unemployed,married,primary,no,8585,no,no,telephone,28,jan,201,2,-1,0,unknown,no +25,technician,single,secondary,no,173,yes,no,cellular,15,may,186,2,-1,0,unknown,no +57,admin.,married,secondary,no,808,no,no,cellular,14,jul,417,3,-1,0,unknown,no +47,services,married,unknown,no,4822,yes,no,unknown,21,may,154,5,-1,0,unknown,no +46,technician,married,secondary,no,966,yes,yes,cellular,19,aug,40,2,-1,0,unknown,no +41,management,married,tertiary,no,141,yes,yes,unknown,8,may,146,3,-1,0,unknown,no +26,services,single,secondary,no,531,yes,yes,cellular,6,feb,184,1,-1,0,unknown,no +42,blue-collar,married,unknown,no,1154,yes,no,cellular,16,apr,341,2,336,3,other,no +37,admin.,married,secondary,no,68,yes,yes,cellular,13,may,151,2,351,1,failure,no +34,admin.,married,secondary,no,1499,yes,no,cellular,13,apr,186,1,327,2,failure,no +49,entrepreneur,divorced,secondary,no,2908,no,no,unknown,6,jun,322,1,-1,0,unknown,no +32,blue-collar,married,secondary,yes,-238,yes,no,unknown,27,may,427,1,-1,0,unknown,no +38,technician,single,secondary,no,1685,yes,no,unknown,5,may,185,1,-1,0,unknown,no +37,self-employed,married,secondary,yes,0,yes,no,cellular,17,jul,158,1,-1,0,unknown,no +32,admin.,single,secondary,no,4344,yes,no,cellular,17,nov,79,2,118,3,failure,no +43,technician,married,secondary,no,0,no,no,cellular,19,aug,313,3,-1,0,unknown,no +39,technician,married,primary,no,1846,no,no,cellular,5,feb,306,5,-1,0,unknown,no +34,technician,married,secondary,no,4,yes,no,cellular,2,feb,105,2,263,1,failure,no +38,blue-collar,married,secondary,no,360,yes,no,unknown,14,may,220,2,-1,0,unknown,no +40,management,divorced,tertiary,no,205,no,no,cellular,25,jul,357,1,-1,0,unknown,no +34,technician,single,secondary,no,18777,yes,no,cellular,18,nov,535,1,-1,0,unknown,no +34,blue-collar,married,primary,no,218,yes,yes,unknown,21,may,260,1,-1,0,unknown,no +46,housemaid,married,primary,no,312,yes,yes,cellular,25,jul,137,7,-1,0,unknown,no +31,entrepreneur,married,secondary,no,15,no,yes,cellular,29,jan,190,2,-1,0,unknown,no +42,blue-collar,married,primary,no,0,no,no,unknown,20,jun,19,2,-1,0,unknown,no +45,self-employed,single,primary,no,112,no,no,unknown,20,jun,298,4,-1,0,unknown,no +54,housemaid,divorced,tertiary,no,9,no,yes,cellular,29,jul,136,3,-1,0,unknown,no +45,unemployed,divorced,secondary,no,-44,yes,no,cellular,7,jul,256,2,-1,0,unknown,no +36,blue-collar,married,unknown,no,1023,yes,no,cellular,4,feb,184,2,-1,0,unknown,no +28,technician,single,secondary,no,3,no,no,telephone,18,may,40,8,349,6,failure,no +50,services,married,secondary,no,77,no,no,cellular,27,may,138,2,-1,0,unknown,no +39,admin.,single,secondary,no,0,no,yes,unknown,19,jun,142,1,-1,0,unknown,no +33,entrepreneur,married,secondary,no,137,yes,no,cellular,15,jul,136,3,-1,0,unknown,no +30,technician,single,secondary,no,-232,no,yes,cellular,7,aug,118,2,-1,0,unknown,no +32,services,married,secondary,no,0,no,no,cellular,31,jul,105,6,-1,0,unknown,no +27,services,single,secondary,no,139,no,no,cellular,25,jul,165,3,-1,0,unknown,no +34,technician,married,secondary,no,47,no,no,cellular,25,aug,132,6,-1,0,unknown,no +47,blue-collar,married,primary,no,-58,yes,no,cellular,18,jul,92,2,-1,0,unknown,no +39,blue-collar,married,primary,no,34,yes,no,unknown,27,may,114,1,-1,0,unknown,no +30,technician,married,secondary,no,590,yes,no,unknown,23,may,242,3,-1,0,unknown,no +31,blue-collar,married,secondary,no,435,yes,no,unknown,21,may,204,1,-1,0,unknown,no +38,management,divorced,tertiary,no,441,yes,no,cellular,30,jan,67,1,-1,0,unknown,no +54,housemaid,married,primary,no,212,no,no,cellular,12,aug,81,4,-1,0,unknown,no +34,management,single,tertiary,yes,621,no,no,cellular,28,aug,205,3,-1,0,unknown,no +26,services,single,secondary,no,162,yes,no,cellular,2,mar,185,2,130,8,other,no +41,self-employed,divorced,tertiary,no,4418,yes,no,cellular,21,nov,855,3,-1,0,unknown,no +31,technician,married,secondary,no,522,yes,yes,cellular,27,aug,308,4,-1,0,unknown,no +31,management,divorced,tertiary,no,-547,yes,yes,cellular,31,jul,101,10,-1,0,unknown,no +33,blue-collar,married,secondary,no,0,yes,no,cellular,19,nov,330,2,-1,0,unknown,no +35,technician,single,unknown,no,726,yes,no,cellular,5,may,163,1,-1,0,unknown,no +58,housemaid,married,primary,no,435,yes,no,telephone,28,jul,122,6,-1,0,unknown,no +38,blue-collar,married,secondary,no,530,yes,no,cellular,20,apr,59,3,-1,0,unknown,no +35,blue-collar,married,secondary,no,106,yes,no,cellular,14,apr,252,5,-1,0,unknown,no +38,management,married,tertiary,no,590,no,no,cellular,31,jul,49,2,-1,0,unknown,no +55,retired,married,tertiary,no,2929,no,no,unknown,16,jun,556,3,-1,0,unknown,no +31,technician,single,secondary,no,147,yes,no,unknown,7,may,374,1,-1,0,unknown,no +28,technician,single,secondary,no,2000,no,no,telephone,3,feb,226,2,-1,0,unknown,no +40,management,married,tertiary,no,143,no,no,cellular,13,aug,832,6,-1,0,unknown,no +33,admin.,single,tertiary,no,193,no,no,unknown,5,may,132,2,-1,0,unknown,no +33,self-employed,single,tertiary,no,658,yes,no,cellular,12,apr,93,1,173,2,success,no +31,management,single,tertiary,yes,-365,yes,no,unknown,30,may,319,6,-1,0,unknown,no +25,services,married,secondary,no,50,yes,no,unknown,5,may,342,1,-1,0,unknown,no +41,technician,single,unknown,no,356,yes,no,unknown,13,may,93,2,-1,0,unknown,no +34,blue-collar,married,primary,no,6718,no,no,cellular,13,jan,278,4,97,1,other,no +37,management,married,tertiary,no,21,no,no,cellular,21,aug,50,12,-1,0,unknown,no +41,management,married,tertiary,no,3872,no,no,cellular,15,oct,231,1,-1,0,unknown,no +52,services,married,secondary,no,820,yes,no,cellular,2,feb,135,2,-1,0,unknown,no +54,retired,divorced,tertiary,no,6102,yes,yes,unknown,21,may,86,6,-1,0,unknown,no +33,management,married,tertiary,no,516,yes,no,cellular,19,nov,245,4,-1,0,unknown,no +60,retired,married,tertiary,no,0,no,no,cellular,25,aug,101,3,-1,0,unknown,no +25,services,single,secondary,no,199,no,no,cellular,16,aug,111,2,95,3,other,no +33,management,married,tertiary,no,584,yes,no,cellular,7,aug,269,3,-1,0,unknown,no +37,management,single,tertiary,no,1449,no,no,unknown,3,jun,291,1,-1,0,unknown,no +50,management,single,tertiary,no,490,no,no,cellular,14,aug,273,5,-1,0,unknown,no +40,blue-collar,married,primary,no,919,yes,no,unknown,3,jun,327,2,-1,0,unknown,no +60,technician,married,primary,no,4243,yes,no,cellular,4,feb,387,1,251,1,failure,no +42,admin.,married,secondary,no,6445,yes,no,unknown,2,jun,20,8,-1,0,unknown,no +40,technician,single,tertiary,no,47,yes,no,cellular,5,may,159,1,365,1,failure,no +27,management,single,tertiary,no,390,no,no,cellular,28,oct,190,1,82,1,success,no +44,blue-collar,single,secondary,no,25,yes,no,cellular,12,may,244,3,-1,0,unknown,no +34,services,single,secondary,no,2257,no,yes,telephone,30,jan,568,2,-1,0,unknown,no +34,housemaid,married,tertiary,no,677,no,no,cellular,9,feb,37,2,-1,0,unknown,no +38,services,married,tertiary,no,0,yes,no,cellular,17,apr,239,1,147,4,failure,no +31,unemployed,single,secondary,no,209,yes,no,cellular,6,may,193,1,-1,0,unknown,no +57,unemployed,married,primary,no,2743,no,no,cellular,29,jan,89,1,-1,0,unknown,no +31,blue-collar,married,primary,no,50,yes,no,unknown,8,may,300,2,-1,0,unknown,no +31,student,single,secondary,no,0,no,no,cellular,22,sep,173,1,-1,0,unknown,no +56,management,married,primary,no,21,no,no,cellular,7,jul,118,1,-1,0,unknown,no +46,management,married,secondary,no,21,yes,no,cellular,7,may,124,1,338,2,failure,no +31,management,single,tertiary,no,78,yes,no,cellular,22,jul,369,2,-1,0,unknown,no +40,technician,married,tertiary,no,1034,yes,no,cellular,18,may,368,2,-1,0,unknown,no +54,blue-collar,married,primary,no,6242,yes,no,cellular,7,may,162,1,-1,0,unknown,no +26,admin.,married,secondary,no,714,yes,no,unknown,28,may,183,1,-1,0,unknown,no +51,management,married,primary,no,98,yes,no,unknown,7,may,114,2,-1,0,unknown,no +30,blue-collar,single,secondary,no,971,yes,no,cellular,17,apr,283,1,317,2,other,no +54,entrepreneur,married,tertiary,no,0,no,no,cellular,30,jul,250,5,-1,0,unknown,no +32,technician,divorced,secondary,no,1097,yes,no,unknown,12,may,298,2,-1,0,unknown,no +54,admin.,married,primary,no,0,no,no,cellular,30,jul,255,2,-1,0,unknown,no +45,admin.,married,secondary,no,25,yes,no,unknown,28,may,82,4,-1,0,unknown,no +31,blue-collar,married,secondary,no,604,yes,no,cellular,18,nov,394,2,-1,0,unknown,no +35,retired,single,primary,no,434,no,no,unknown,5,may,138,1,-1,0,unknown,no +42,blue-collar,married,primary,no,784,no,no,cellular,28,apr,428,3,-1,0,unknown,no +37,technician,married,secondary,no,95,no,no,cellular,6,feb,454,3,-1,0,unknown,no +43,admin.,married,secondary,no,616,yes,no,unknown,9,may,168,2,-1,0,unknown,no +30,blue-collar,married,secondary,no,631,yes,no,cellular,19,nov,174,2,-1,0,unknown,no +49,blue-collar,married,primary,no,67,no,yes,cellular,13,aug,269,4,-1,0,unknown,no +37,entrepreneur,married,tertiary,no,555,no,no,cellular,7,jul,104,2,-1,0,unknown,no +54,management,married,tertiary,no,184,no,no,cellular,6,feb,13,6,-1,0,unknown,no +45,unemployed,single,secondary,no,382,yes,yes,cellular,18,may,182,1,-1,0,unknown,no +39,management,married,tertiary,no,-974,no,yes,cellular,13,aug,130,4,-1,0,unknown,no +50,management,married,tertiary,no,-516,yes,no,unknown,15,may,226,2,-1,0,unknown,no +30,management,single,tertiary,no,0,no,no,cellular,18,aug,124,3,-1,0,unknown,no +49,technician,divorced,secondary,no,5,no,no,cellular,19,aug,131,2,-1,0,unknown,no +31,services,married,secondary,no,428,yes,no,unknown,21,may,272,1,-1,0,unknown,no +42,retired,married,primary,no,0,yes,no,unknown,8,may,186,2,-1,0,unknown,no +40,blue-collar,divorced,primary,no,54,yes,no,cellular,13,may,10,5,362,3,other,no +35,unemployed,married,secondary,yes,1054,yes,yes,cellular,21,nov,106,1,-1,0,unknown,no +30,management,single,tertiary,no,115,no,no,cellular,12,aug,154,2,-1,0,unknown,no +40,blue-collar,married,primary,no,2171,yes,no,unknown,9,may,97,1,-1,0,unknown,no +39,entrepreneur,married,tertiary,no,350,yes,no,cellular,24,jul,230,2,-1,0,unknown,no +46,unemployed,married,secondary,no,594,no,no,cellular,4,feb,197,2,-1,0,unknown,no +55,technician,married,secondary,no,276,yes,no,unknown,12,may,486,1,-1,0,unknown,no +32,blue-collar,married,secondary,no,-325,yes,yes,unknown,21,may,171,1,-1,0,unknown,no +37,management,married,tertiary,no,1594,yes,no,cellular,17,apr,110,1,260,5,failure,no +58,self-employed,married,tertiary,no,2596,no,no,telephone,18,nov,15,2,-1,0,unknown,no +36,services,divorced,secondary,no,115,no,no,unknown,6,jun,201,1,-1,0,unknown,no +31,management,single,tertiary,no,0,yes,no,cellular,8,sep,76,1,-1,0,unknown,no +49,retired,married,unknown,no,247,no,no,unknown,15,may,213,2,-1,0,unknown,no +32,technician,married,secondary,no,235,yes,no,telephone,28,aug,688,6,-1,0,unknown,no +30,self-employed,single,tertiary,no,2593,no,no,unknown,27,may,662,7,-1,0,unknown,no +55,services,divorced,secondary,no,2166,yes,no,unknown,28,may,23,17,-1,0,unknown,no +32,blue-collar,married,secondary,no,130,yes,no,cellular,6,may,302,2,-1,0,unknown,no +52,admin.,divorced,secondary,no,48,no,yes,cellular,17,nov,591,1,-1,0,unknown,no +38,unemployed,divorced,secondary,no,189,yes,yes,cellular,21,jul,105,2,-1,0,unknown,no +60,retired,married,secondary,no,0,yes,no,unknown,15,may,229,1,-1,0,unknown,no +60,retired,divorced,tertiary,no,-134,no,no,cellular,12,may,243,1,271,4,failure,no +30,admin.,married,secondary,yes,23,no,yes,cellular,4,feb,149,2,-1,0,unknown,no +44,unemployed,married,secondary,no,0,no,no,cellular,21,nov,175,4,-1,0,unknown,no +32,blue-collar,married,secondary,no,1,yes,no,unknown,8,may,102,1,-1,0,unknown,no +46,entrepreneur,married,secondary,no,3317,no,no,cellular,19,nov,231,2,-1,0,unknown,no +34,management,married,secondary,no,355,no,no,cellular,21,aug,314,3,-1,0,unknown,no +40,management,married,tertiary,no,917,yes,no,unknown,20,may,292,1,-1,0,unknown,no +34,housemaid,married,secondary,no,390,yes,no,cellular,15,jul,659,3,-1,0,unknown,no +43,admin.,single,secondary,no,35,no,no,telephone,9,nov,208,1,-1,0,unknown,no +52,technician,married,tertiary,no,523,yes,yes,cellular,8,jul,113,1,-1,0,unknown,no +35,blue-collar,married,secondary,no,80,yes,yes,cellular,21,nov,38,2,172,2,failure,no +34,blue-collar,single,secondary,no,-72,yes,no,cellular,7,jul,273,5,-1,0,unknown,no +33,blue-collar,single,primary,no,1,yes,no,cellular,20,apr,257,1,-1,0,unknown,no +39,services,married,secondary,no,733,no,no,unknown,16,jun,83,4,-1,0,unknown,no +32,technician,single,secondary,no,29,no,no,cellular,19,aug,156,2,-1,0,unknown,no +43,technician,married,secondary,no,0,no,yes,cellular,8,may,9,2,172,5,failure,no +34,technician,married,secondary,no,0,no,no,cellular,9,jul,628,1,-1,0,unknown,no diff --git a/examples/data/lineCrossTab.json b/examples/data/lineCrossTab.json new file mode 100644 index 00000000..0b194849 --- /dev/null +++ b/examples/data/lineCrossTab.json @@ -0,0 +1,3122 @@ +[ + { + "date": 1262284200000, + "value": 1402251, + "quarter": "Q1", + "quarterYear": "Q1 2010" + }, + { + "date": 1264962600000, + "value": 1397824, + "quarter": "Q2", + "quarterYear": "Q2 2010" + }, + { + "date": 1267381800000, + "value": 1402729, + "quarter": "Q3", + "quarterYear": "Q3 2010" + }, + { + "date": 1270060200000, + "value": 1399834, + "quarter": "Q4", + "quarterYear": "Q4 2010" + }, + { + "date": 1272652200000, + "value": 1408800, + "quarter": "Q1", + "quarterYear": "Q1 2010" + }, + { + "date": 1275330600000, + "value": 1405231, + "quarter": "Q2", + "quarterYear": "Q2 2010" + }, + { + "date": 1277922600000, + "value": 1396497, + "quarter": "Q3", + "quarterYear": "Q3 2010" + }, + { + "date": 1280601000000, + "value": 1393338, + "quarter": "Q4", + "quarterYear": "Q4 2010" + }, + { + "date": 1283279400000, + "value": 1391461, + "quarter": "Q1", + "quarterYear": "Q1 2010" + }, + { + "date": 1285871400000, + "value": 1394725, + "quarter": "Q2", + "quarterYear": "Q2 2010" + }, + { + "date": 1288549800000, + "value": 1400952, + "quarter": "Q3", + "quarterYear": "Q3 2010" + }, + { + "date": 1291141800000, + "value": 1400129, + "quarter": "Q4", + "quarterYear": "Q4 2010" + }, + { + "date": 1293820200000, + "value": 1398575, + "quarter": "Q1", + "quarterYear": "Q1 2010" + }, + { + "date": 1296498600000, + "value": 1399106, + "quarter": "Q2", + "quarterYear": "Q2 2010" + }, + { + "date": 1298917800000, + "value": 1391711, + "quarter": "Q3", + "quarterYear": "Q3 2010" + }, + { + "date": 1301596200000, + "value": 1393891, + "quarter": "Q4", + "quarterYear": "Q4 2010" + }, + { + "date": 1304188200000, + "value": 1385064, + "quarter": "Q1", + "quarterYear": "Q1 2010" + }, + { + "date": 1306866600000, + "value": 1390155, + "quarter": "Q2", + "quarterYear": "Q2 2010" + }, + { + "date": 1309458600000, + "value": 1387469, + "quarter": "Q3", + "quarterYear": "Q3 2010" + }, + { + "date": 1312137000000, + "value": 1395117, + "quarter": "Q4", + "quarterYear": "Q4 2010" + }, + { + "date": 1314815400000, + "value": 1386542, + "quarter": "Q1", + "quarterYear": "Q1 2010" + }, + { + "date": 1317407400000, + "value": 1395143, + "quarter": "Q2", + "quarterYear": "Q2 2010" + }, + { + "date": 1320085800000, + "value": 1400252, + "quarter": "Q3", + "quarterYear": "Q3 2010" + }, + { + "date": 1322677800000, + "value": 1410227, + "quarter": "Q4", + "quarterYear": "Q4 2010" + }, + { + "date": 1325356200000, + "value": 1415694, + "quarter": "Q1", + "quarterYear": "Q1 2010" + }, + { + "date": 1328034600000, + "value": 1406441, + "quarter": "Q2", + "quarterYear": "Q2 2010" + }, + { + "date": 1330540200000, + "value": 1412404, + "quarter": "Q3", + "quarterYear": "Q3 2010" + }, + { + "date": 1333218600000, + "value": 1415028, + "quarter": "Q4", + "quarterYear": "Q4 2010" + }, + { + "date": 1335810600000, + "value": 1422377, + "quarter": "Q1", + "quarterYear": "Q1 2010" + }, + { + "date": 1338489000000, + "value": 1413387, + "quarter": "Q2", + "quarterYear": "Q2 2010" + }, + { + "date": 1341081000000, + "value": 1404770, + "quarter": "Q3", + "quarterYear": "Q3 2010" + }, + { + "date": 1343759400000, + "value": 1414727, + "quarter": "Q4", + "quarterYear": "Q4 2010" + }, + { + "date": 1346437800000, + "value": 1415710, + "quarter": "Q1", + "quarterYear": "Q1 2010" + }, + { + "date": 1349029800000, + "value": 1417613, + "quarter": "Q2", + "quarterYear": "Q2 2010" + }, + { + "date": 1351708200000, + "value": 1414605, + "quarter": "Q3", + "quarterYear": "Q3 2010" + }, + { + "date": 1354300200000, + "value": 1424234, + "quarter": "Q4", + "quarterYear": "Q4 2010" + }, + { + "date": 1356978600000, + "value": 1416643, + "quarter": "Q1", + "quarterYear": "Q1 2010" + }, + { + "date": 1359657000000, + "value": 1423295, + "quarter": "Q2", + "quarterYear": "Q2 2010" + }, + { + "date": 1362076200000, + "value": 1426947, + "quarter": "Q3", + "quarterYear": "Q3 2010" + }, + { + "date": 1364754600000, + "value": 1420930, + "quarter": "Q4", + "quarterYear": "Q4 2010" + }, + { + "date": 1367346600000, + "value": 1417783, + "quarter": "Q1", + "quarterYear": "Q1 2010" + }, + { + "date": 1370025000000, + "value": 1409033, + "quarter": "Q2", + "quarterYear": "Q2 2010" + }, + { + "date": 1372617000000, + "value": 1408174, + "quarter": "Q3", + "quarterYear": "Q3 2010" + }, + { + "date": 1375295400000, + "value": 1413457, + "quarter": "Q4", + "quarterYear": "Q4 2010" + }, + { + "date": 1377973800000, + "value": 1421499, + "quarter": "Q1", + "quarterYear": "Q1 2010" + }, + { + "date": 1380565800000, + "value": 1416061, + "quarter": "Q2", + "quarterYear": "Q2 2010" + }, + { + "date": 1383244200000, + "value": 1424917, + "quarter": "Q3", + "quarterYear": "Q3 2010" + }, + { + "date": 1385836200000, + "value": 1417851, + "quarter": "Q4", + "quarterYear": "Q4 2010" + }, + { + "date": 1388514600000, + "value": 1420812, + "quarter": "Q1", + "quarterYear": "Q1 2010" + }, + { + "date": 1391193000000, + "value": 1426504, + "quarter": "Q2", + "quarterYear": "Q2 2010" + }, + { + "date": 1393612200000, + "value": 1427701, + "quarter": "Q3", + "quarterYear": "Q3 2010" + }, + { + "date": 1396290600000, + "value": 1419673, + "quarter": "Q4", + "quarterYear": "Q4 2010" + }, + { + "date": 1293820200000, + "value": 1321136, + "quarter": "Q1", + "quarterYear": "Q1 2011" + }, + { + "date": 1296498600000, + "value": 1317117, + "quarter": "Q2", + "quarterYear": "Q2 2011" + }, + { + "date": 1298917800000, + "value": 1313458, + "quarter": "Q3", + "quarterYear": "Q3 2011" + }, + { + "date": 1301596200000, + "value": 1310098, + "quarter": "Q4", + "quarterYear": "Q4 2011" + }, + { + "date": 1304188200000, + "value": 1314209, + "quarter": "Q1", + "quarterYear": "Q1 2011" + }, + { + "date": 1306866600000, + "value": 1308111, + "quarter": "Q2", + "quarterYear": "Q2 2011" + }, + { + "date": 1309458600000, + "value": 1304675, + "quarter": "Q3", + "quarterYear": "Q3 2011" + }, + { + "date": 1312137000000, + "value": 1298071, + "quarter": "Q4", + "quarterYear": "Q4 2011" + }, + { + "date": 1314815400000, + "value": 1303314, + "quarter": "Q1", + "quarterYear": "Q1 2011" + }, + { + "date": 1317407400000, + "value": 1309368, + "quarter": "Q2", + "quarterYear": "Q2 2011" + }, + { + "date": 1320085800000, + "value": 1305810, + "quarter": "Q3", + "quarterYear": "Q3 2011" + }, + { + "date": 1322677800000, + "value": 1304267, + "quarter": "Q4", + "quarterYear": "Q4 2011" + }, + { + "date": 1325356200000, + "value": 1294335, + "quarter": "Q1", + "quarterYear": "Q1 2011" + }, + { + "date": 1328034600000, + "value": 1301632, + "quarter": "Q2", + "quarterYear": "Q2 2011" + }, + { + "date": 1330540200000, + "value": 1305417, + "quarter": "Q3", + "quarterYear": "Q3 2011" + }, + { + "date": 1333218600000, + "value": 1312754, + "quarter": "Q4", + "quarterYear": "Q4 2011" + }, + { + "date": 1335810600000, + "value": 1321987, + "quarter": "Q1", + "quarterYear": "Q1 2011" + }, + { + "date": 1338489000000, + "value": 1328735, + "quarter": "Q2", + "quarterYear": "Q2 2011" + }, + { + "date": 1341081000000, + "value": 1335117, + "quarter": "Q3", + "quarterYear": "Q3 2011" + }, + { + "date": 1343759400000, + "value": 1330362, + "quarter": "Q4", + "quarterYear": "Q4 2011" + }, + { + "date": 1346437800000, + "value": 1321193, + "quarter": "Q1", + "quarterYear": "Q1 2011" + }, + { + "date": 1349029800000, + "value": 1312961, + "quarter": "Q2", + "quarterYear": "Q2 2011" + }, + { + "date": 1351708200000, + "value": 1321330, + "quarter": "Q3", + "quarterYear": "Q3 2011" + }, + { + "date": 1354300200000, + "value": 1317682, + "quarter": "Q4", + "quarterYear": "Q4 2011" + }, + { + "date": 1356978600000, + "value": 1323491, + "quarter": "Q1", + "quarterYear": "Q1 2011" + }, + { + "date": 1359657000000, + "value": 1313725, + "quarter": "Q2", + "quarterYear": "Q2 2011" + }, + { + "date": 1362076200000, + "value": 1305855, + "quarter": "Q3", + "quarterYear": "Q3 2011" + }, + { + "date": 1364754600000, + "value": 1297593, + "quarter": "Q4", + "quarterYear": "Q4 2011" + }, + { + "date": 1367346600000, + "value": 1289843, + "quarter": "Q1", + "quarterYear": "Q1 2011" + }, + { + "date": 1370025000000, + "value": 1282594, + "quarter": "Q2", + "quarterYear": "Q2 2011" + }, + { + "date": 1372617000000, + "value": 1286921, + "quarter": "Q3", + "quarterYear": "Q3 2011" + }, + { + "date": 1375295400000, + "value": 1286627, + "quarter": "Q4", + "quarterYear": "Q4 2011" + }, + { + "date": 1377973800000, + "value": 1294234, + "quarter": "Q1", + "quarterYear": "Q1 2011" + }, + { + "date": 1380565800000, + "value": 1296323, + "quarter": "Q2", + "quarterYear": "Q2 2011" + }, + { + "date": 1383244200000, + "value": 1290748, + "quarter": "Q3", + "quarterYear": "Q3 2011" + }, + { + "date": 1385836200000, + "value": 1289801, + "quarter": "Q4", + "quarterYear": "Q4 2011" + }, + { + "date": 1388514600000, + "value": 1288290, + "quarter": "Q1", + "quarterYear": "Q1 2011" + }, + { + "date": 1391193000000, + "value": 1282220, + "quarter": "Q2", + "quarterYear": "Q2 2011" + }, + { + "date": 1393612200000, + "value": 1272611, + "quarter": "Q3", + "quarterYear": "Q3 2011" + }, + { + "date": 1396290600000, + "value": 1277924, + "quarter": "Q4", + "quarterYear": "Q4 2011" + }, + { + "date": 1398882600000, + "value": 1283902, + "quarter": "Q1", + "quarterYear": "Q1 2011" + }, + { + "date": 1401561000000, + "value": 1286137, + "quarter": "Q2", + "quarterYear": "Q2 2011" + }, + { + "date": 1404153000000, + "value": 1294789, + "quarter": "Q3", + "quarterYear": "Q3 2011" + }, + { + "date": 1406831400000, + "value": 1292258, + "quarter": "Q4", + "quarterYear": "Q4 2011" + }, + { + "date": 1409509800000, + "value": 1287402, + "quarter": "Q1", + "quarterYear": "Q1 2011" + }, + { + "date": 1412101800000, + "value": 1292634, + "quarter": "Q2", + "quarterYear": "Q2 2011" + }, + { + "date": 1414780200000, + "value": 1287097, + "quarter": "Q3", + "quarterYear": "Q3 2011" + }, + { + "date": 1417372200000, + "value": 1293091, + "quarter": "Q4", + "quarterYear": "Q4 2011" + }, + { + "date": 1420050600000, + "value": 1297812, + "quarter": "Q1", + "quarterYear": "Q1 2011" + }, + { + "date": 1422729000000, + "value": 1293260, + "quarter": "Q2", + "quarterYear": "Q2 2011" + }, + { + "date": 1425148200000, + "value": 1300730, + "quarter": "Q3", + "quarterYear": "Q3 2011" + }, + { + "date": 1427826600000, + "value": 1301218, + "quarter": "Q4", + "quarterYear": "Q4 2011" + }, + { + "date": 1325356200000, + "value": 1355994, + "quarter": "Q1", + "quarterYear": "Q1 2012" + }, + { + "date": 1328034600000, + "value": 1363342, + "quarter": "Q2", + "quarterYear": "Q2 2012" + }, + { + "date": 1330540200000, + "value": 1355769, + "quarter": "Q3", + "quarterYear": "Q3 2012" + }, + { + "date": 1333218600000, + "value": 1365459, + "quarter": "Q4", + "quarterYear": "Q4 2012" + }, + { + "date": 1335810600000, + "value": 1374720, + "quarter": "Q1", + "quarterYear": "Q1 2012" + }, + { + "date": 1338489000000, + "value": 1374892, + "quarter": "Q2", + "quarterYear": "Q2 2012" + }, + { + "date": 1341081000000, + "value": 1370211, + "quarter": "Q3", + "quarterYear": "Q3 2012" + }, + { + "date": 1343759400000, + "value": 1370017, + "quarter": "Q4", + "quarterYear": "Q4 2012" + }, + { + "date": 1346437800000, + "value": 1370596, + "quarter": "Q1", + "quarterYear": "Q1 2012" + }, + { + "date": 1349029800000, + "value": 1376921, + "quarter": "Q2", + "quarterYear": "Q2 2012" + }, + { + "date": 1351708200000, + "value": 1380299, + "quarter": "Q3", + "quarterYear": "Q3 2012" + }, + { + "date": 1354300200000, + "value": 1373200, + "quarter": "Q4", + "quarterYear": "Q4 2012" + }, + { + "date": 1356978600000, + "value": 1374023, + "quarter": "Q1", + "quarterYear": "Q1 2012" + }, + { + "date": 1359657000000, + "value": 1373471, + "quarter": "Q2", + "quarterYear": "Q2 2012" + }, + { + "date": 1362076200000, + "value": 1367178, + "quarter": "Q3", + "quarterYear": "Q3 2012" + }, + { + "date": 1364754600000, + "value": 1370236, + "quarter": "Q4", + "quarterYear": "Q4 2012" + }, + { + "date": 1367346600000, + "value": 1360970, + "quarter": "Q1", + "quarterYear": "Q1 2012" + }, + { + "date": 1370025000000, + "value": 1361190, + "quarter": "Q2", + "quarterYear": "Q2 2012" + }, + { + "date": 1372617000000, + "value": 1368800, + "quarter": "Q3", + "quarterYear": "Q3 2012" + }, + { + "date": 1375295400000, + "value": 1369816, + "quarter": "Q4", + "quarterYear": "Q4 2012" + }, + { + "date": 1377973800000, + "value": 1364360, + "quarter": "Q1", + "quarterYear": "Q1 2012" + }, + { + "date": 1380565800000, + "value": 1368034, + "quarter": "Q2", + "quarterYear": "Q2 2012" + }, + { + "date": 1383244200000, + "value": 1367120, + "quarter": "Q3", + "quarterYear": "Q3 2012" + }, + { + "date": 1385836200000, + "value": 1374457, + "quarter": "Q4", + "quarterYear": "Q4 2012" + }, + { + "date": 1388514600000, + "value": 1382098, + "quarter": "Q1", + "quarterYear": "Q1 2012" + }, + { + "date": 1391193000000, + "value": 1386833, + "quarter": "Q2", + "quarterYear": "Q2 2012" + }, + { + "date": 1393612200000, + "value": 1388631, + "quarter": "Q3", + "quarterYear": "Q3 2012" + }, + { + "date": 1396290600000, + "value": 1378933, + "quarter": "Q4", + "quarterYear": "Q4 2012" + }, + { + "date": 1398882600000, + "value": 1385411, + "quarter": "Q1", + "quarterYear": "Q1 2012" + }, + { + "date": 1401561000000, + "value": 1394755, + "quarter": "Q2", + "quarterYear": "Q2 2012" + }, + { + "date": 1404153000000, + "value": 1399497, + "quarter": "Q3", + "quarterYear": "Q3 2012" + }, + { + "date": 1406831400000, + "value": 1400225, + "quarter": "Q4", + "quarterYear": "Q4 2012" + }, + { + "date": 1409509800000, + "value": 1408300, + "quarter": "Q1", + "quarterYear": "Q1 2012" + }, + { + "date": 1412101800000, + "value": 1415913, + "quarter": "Q2", + "quarterYear": "Q2 2012" + }, + { + "date": 1414780200000, + "value": 1412473, + "quarter": "Q3", + "quarterYear": "Q3 2012" + }, + { + "date": 1417372200000, + "value": 1403835, + "quarter": "Q4", + "quarterYear": "Q4 2012" + }, + { + "date": 1420050600000, + "value": 1401268, + "quarter": "Q1", + "quarterYear": "Q1 2012" + }, + { + "date": 1422729000000, + "value": 1410062, + "quarter": "Q2", + "quarterYear": "Q2 2012" + }, + { + "date": 1425148200000, + "value": 1408552, + "quarter": "Q3", + "quarterYear": "Q3 2012" + }, + { + "date": 1427826600000, + "value": 1415374, + "quarter": "Q4", + "quarterYear": "Q4 2012" + }, + { + "date": 1430418600000, + "value": 1418398, + "quarter": "Q1", + "quarterYear": "Q1 2012" + }, + { + "date": 1433097000000, + "value": 1410907, + "quarter": "Q2", + "quarterYear": "Q2 2012" + }, + { + "date": 1435689000000, + "value": 1416914, + "quarter": "Q3", + "quarterYear": "Q3 2012" + }, + { + "date": 1438367400000, + "value": 1419691, + "quarter": "Q4", + "quarterYear": "Q4 2012" + }, + { + "date": 1441045800000, + "value": 1429515, + "quarter": "Q1", + "quarterYear": "Q1 2012" + }, + { + "date": 1443637800000, + "value": 1438568, + "quarter": "Q2", + "quarterYear": "Q2 2012" + }, + { + "date": 1446316200000, + "value": 1428730, + "quarter": "Q3", + "quarterYear": "Q3 2012" + }, + { + "date": 1448908200000, + "value": 1433414, + "quarter": "Q4", + "quarterYear": "Q4 2012" + }, + { + "date": 1451586600000, + "value": 1435017, + "quarter": "Q1", + "quarterYear": "Q1 2012" + }, + { + "date": 1454265000000, + "value": 1443786, + "quarter": "Q2", + "quarterYear": "Q2 2012" + }, + { + "date": 1456770600000, + "value": 1441573, + "quarter": "Q3", + "quarterYear": "Q3 2012" + }, + { + "date": 1459449000000, + "value": 1431739, + "quarter": "Q4", + "quarterYear": "Q4 2012" + }, + { + "date": 1356978600000, + "value": 1511897.5, + "quarter": "Q1", + "quarterYear": "Q1 2013" + }, + { + "date": 1359657000000, + "value": 1504874.5, + "quarter": "Q2", + "quarterYear": "Q2 2013" + }, + { + "date": 1362076200000, + "value": 1507518.5, + "quarter": "Q3", + "quarterYear": "Q3 2013" + }, + { + "date": 1364754600000, + "value": 1503825.5, + "quarter": "Q4", + "quarterYear": "Q4 2013" + }, + { + "date": 1367346600000, + "value": 1510798.5, + "quarter": "Q1", + "quarterYear": "Q1 2013" + }, + { + "date": 1370025000000, + "value": 1506832.5, + "quarter": "Q2", + "quarterYear": "Q2 2013" + }, + { + "date": 1372617000000, + "value": 1512180.5, + "quarter": "Q3", + "quarterYear": "Q3 2013" + }, + { + "date": 1375295400000, + "value": 1515629.5, + "quarter": "Q4", + "quarterYear": "Q4 2013" + }, + { + "date": 1377973800000, + "value": 1510764.5, + "quarter": "Q1", + "quarterYear": "Q1 2013" + }, + { + "date": 1380565800000, + "value": 1512761.5, + "quarter": "Q2", + "quarterYear": "Q2 2013" + }, + { + "date": 1383244200000, + "value": 1514534.5, + "quarter": "Q3", + "quarterYear": "Q3 2013" + }, + { + "date": 1385836200000, + "value": 1515281.5, + "quarter": "Q4", + "quarterYear": "Q4 2013" + }, + { + "date": 1388514600000, + "value": 1513479.5, + "quarter": "Q1", + "quarterYear": "Q1 2013" + }, + { + "date": 1391193000000, + "value": 1512626.5, + "quarter": "Q2", + "quarterYear": "Q2 2013" + }, + { + "date": 1393612200000, + "value": 1503691.5, + "quarter": "Q3", + "quarterYear": "Q3 2013" + }, + { + "date": 1396290600000, + "value": 1511279.5, + "quarter": "Q4", + "quarterYear": "Q4 2013" + }, + { + "date": 1398882600000, + "value": 1507093.5, + "quarter": "Q1", + "quarterYear": "Q1 2013" + }, + { + "date": 1401561000000, + "value": 1512948.5, + "quarter": "Q2", + "quarterYear": "Q2 2013" + }, + { + "date": 1404153000000, + "value": 1510111.5, + "quarter": "Q3", + "quarterYear": "Q3 2013" + }, + { + "date": 1406831400000, + "value": 1519769.5, + "quarter": "Q4", + "quarterYear": "Q4 2013" + }, + { + "date": 1409509800000, + "value": 1514042.5, + "quarter": "Q1", + "quarterYear": "Q1 2013" + }, + { + "date": 1412101800000, + "value": 1518475.5, + "quarter": "Q2", + "quarterYear": "Q2 2013" + }, + { + "date": 1414780200000, + "value": 1511306.5, + "quarter": "Q3", + "quarterYear": "Q3 2013" + }, + { + "date": 1417372200000, + "value": 1502756.5, + "quarter": "Q4", + "quarterYear": "Q4 2013" + }, + { + "date": 1420050600000, + "value": 1506297.5, + "quarter": "Q1", + "quarterYear": "Q1 2013" + }, + { + "date": 1422729000000, + "value": 1506952.5, + "quarter": "Q2", + "quarterYear": "Q2 2013" + }, + { + "date": 1425148200000, + "value": 1507630.5, + "quarter": "Q3", + "quarterYear": "Q3 2013" + }, + { + "date": 1427826600000, + "value": 1514911.5, + "quarter": "Q4", + "quarterYear": "Q4 2013" + }, + { + "date": 1430418600000, + "value": 1513597.5, + "quarter": "Q1", + "quarterYear": "Q1 2013" + }, + { + "date": 1433097000000, + "value": 1513979.5, + "quarter": "Q2", + "quarterYear": "Q2 2013" + }, + { + "date": 1435689000000, + "value": 1519181.5, + "quarter": "Q3", + "quarterYear": "Q3 2013" + }, + { + "date": 1438367400000, + "value": 1516533.5, + "quarter": "Q4", + "quarterYear": "Q4 2013" + }, + { + "date": 1441045800000, + "value": 1513799.5, + "quarter": "Q1", + "quarterYear": "Q1 2013" + }, + { + "date": 1443637800000, + "value": 1516104.5, + "quarter": "Q2", + "quarterYear": "Q2 2013" + }, + { + "date": 1446316200000, + "value": 1515638.5, + "quarter": "Q3", + "quarterYear": "Q3 2013" + }, + { + "date": 1448908200000, + "value": 1513404.5, + "quarter": "Q4", + "quarterYear": "Q4 2013" + }, + { + "date": 1451586600000, + "value": 1511503.5, + "quarter": "Q1", + "quarterYear": "Q1 2013" + }, + { + "date": 1454265000000, + "value": 1519695.5, + "quarter": "Q2", + "quarterYear": "Q2 2013" + }, + { + "date": 1456770600000, + "value": 1509754.5, + "quarter": "Q3", + "quarterYear": "Q3 2013" + }, + { + "date": 1459449000000, + "value": 1503983.5, + "quarter": "Q4", + "quarterYear": "Q4 2013" + }, + { + "date": 1462041000000, + "value": 1512228.5, + "quarter": "Q1", + "quarterYear": "Q1 2013" + }, + { + "date": 1464719400000, + "value": 1512321.5, + "quarter": "Q2", + "quarterYear": "Q2 2013" + }, + { + "date": 1467311400000, + "value": 1502933.5, + "quarter": "Q3", + "quarterYear": "Q3 2013" + }, + { + "date": 1469989800000, + "value": 1494591.5, + "quarter": "Q4", + "quarterYear": "Q4 2013" + }, + { + "date": 1472668200000, + "value": 1488226.5, + "quarter": "Q1", + "quarterYear": "Q1 2013" + }, + { + "date": 1475260200000, + "value": 1490727.5, + "quarter": "Q2", + "quarterYear": "Q2 2013" + }, + { + "date": 1477938600000, + "value": 1481400.5, + "quarter": "Q3", + "quarterYear": "Q3 2013" + }, + { + "date": 1480530600000, + "value": 1478567.5, + "quarter": "Q4", + "quarterYear": "Q4 2013" + }, + { + "date": 1483209000000, + "value": 1484948.5, + "quarter": "Q1", + "quarterYear": "Q1 2013" + }, + { + "date": 1485887400000, + "value": 1487572.5, + "quarter": "Q2", + "quarterYear": "Q2 2013" + }, + { + "date": 1488306600000, + "value": 1484662.5, + "quarter": "Q3", + "quarterYear": "Q3 2013" + }, + { + "date": 1490985000000, + "value": 1492707.5, + "quarter": "Q4", + "quarterYear": "Q4 2013" + }, + { + "date": 1388514600000, + "value": 1573380.5, + "quarter": "Q1", + "quarterYear": "Q1 2014" + }, + { + "date": 1391193000000, + "value": 1566102.5, + "quarter": "Q2", + "quarterYear": "Q2 2014" + }, + { + "date": 1393612200000, + "value": 1566876.5, + "quarter": "Q3", + "quarterYear": "Q3 2014" + }, + { + "date": 1396290600000, + "value": 1562887.5, + "quarter": "Q4", + "quarterYear": "Q4 2014" + }, + { + "date": 1398882600000, + "value": 1557890.5, + "quarter": "Q1", + "quarterYear": "Q1 2014" + }, + { + "date": 1401561000000, + "value": 1567730.5, + "quarter": "Q2", + "quarterYear": "Q2 2014" + }, + { + "date": 1404153000000, + "value": 1562702.5, + "quarter": "Q3", + "quarterYear": "Q3 2014" + }, + { + "date": 1406831400000, + "value": 1556074.5, + "quarter": "Q4", + "quarterYear": "Q4 2014" + }, + { + "date": 1409509800000, + "value": 1557958.5, + "quarter": "Q1", + "quarterYear": "Q1 2014" + }, + { + "date": 1412101800000, + "value": 1562474.5, + "quarter": "Q2", + "quarterYear": "Q2 2014" + }, + { + "date": 1414780200000, + "value": 1569178.5, + "quarter": "Q3", + "quarterYear": "Q3 2014" + }, + { + "date": 1417372200000, + "value": 1574680.5, + "quarter": "Q4", + "quarterYear": "Q4 2014" + }, + { + "date": 1420050600000, + "value": 1564682.5, + "quarter": "Q1", + "quarterYear": "Q1 2014" + }, + { + "date": 1422729000000, + "value": 1574002.5, + "quarter": "Q2", + "quarterYear": "Q2 2014" + }, + { + "date": 1425148200000, + "value": 1583518.5, + "quarter": "Q3", + "quarterYear": "Q3 2014" + }, + { + "date": 1427826600000, + "value": 1576976.5, + "quarter": "Q4", + "quarterYear": "Q4 2014" + }, + { + "date": 1430418600000, + "value": 1568018.5, + "quarter": "Q1", + "quarterYear": "Q1 2014" + }, + { + "date": 1433097000000, + "value": 1570484.5, + "quarter": "Q2", + "quarterYear": "Q2 2014" + }, + { + "date": 1435689000000, + "value": 1561800.5, + "quarter": "Q3", + "quarterYear": "Q3 2014" + }, + { + "date": 1438367400000, + "value": 1567911.5, + "quarter": "Q4", + "quarterYear": "Q4 2014" + }, + { + "date": 1441045800000, + "value": 1572444.5, + "quarter": "Q1", + "quarterYear": "Q1 2014" + }, + { + "date": 1443637800000, + "value": 1574619.5, + "quarter": "Q2", + "quarterYear": "Q2 2014" + }, + { + "date": 1446316200000, + "value": 1573374.5, + "quarter": "Q3", + "quarterYear": "Q3 2014" + }, + { + "date": 1448908200000, + "value": 1568690.5, + "quarter": "Q4", + "quarterYear": "Q4 2014" + }, + { + "date": 1451586600000, + "value": 1572225.5, + "quarter": "Q1", + "quarterYear": "Q1 2014" + }, + { + "date": 1454265000000, + "value": 1572270.5, + "quarter": "Q2", + "quarterYear": "Q2 2014" + }, + { + "date": 1456770600000, + "value": 1571311.5, + "quarter": "Q3", + "quarterYear": "Q3 2014" + }, + { + "date": 1459449000000, + "value": 1573954.5, + "quarter": "Q4", + "quarterYear": "Q4 2014" + }, + { + "date": 1462041000000, + "value": 1582047.5, + "quarter": "Q1", + "quarterYear": "Q1 2014" + }, + { + "date": 1464719400000, + "value": 1581344.5, + "quarter": "Q2", + "quarterYear": "Q2 2014" + }, + { + "date": 1467311400000, + "value": 1579522.5, + "quarter": "Q3", + "quarterYear": "Q3 2014" + }, + { + "date": 1469989800000, + "value": 1582605.5, + "quarter": "Q4", + "quarterYear": "Q4 2014" + }, + { + "date": 1472668200000, + "value": 1587898.5, + "quarter": "Q1", + "quarterYear": "Q1 2014" + }, + { + "date": 1475260200000, + "value": 1586469.5, + "quarter": "Q2", + "quarterYear": "Q2 2014" + }, + { + "date": 1477938600000, + "value": 1594345.5, + "quarter": "Q3", + "quarterYear": "Q3 2014" + }, + { + "date": 1480530600000, + "value": 1594516.5, + "quarter": "Q4", + "quarterYear": "Q4 2014" + }, + { + "date": 1483209000000, + "value": 1602467.5, + "quarter": "Q1", + "quarterYear": "Q1 2014" + }, + { + "date": 1485887400000, + "value": 1604660.5, + "quarter": "Q2", + "quarterYear": "Q2 2014" + }, + { + "date": 1488306600000, + "value": 1596098.5, + "quarter": "Q3", + "quarterYear": "Q3 2014" + }, + { + "date": 1490985000000, + "value": 1591239.5, + "quarter": "Q4", + "quarterYear": "Q4 2014" + }, + { + "date": 1493577000000, + "value": 1594655.5, + "quarter": "Q1", + "quarterYear": "Q1 2014" + }, + { + "date": 1496255400000, + "value": 1594370.5, + "quarter": "Q2", + "quarterYear": "Q2 2014" + }, + { + "date": 1498847400000, + "value": 1593235.5, + "quarter": "Q3", + "quarterYear": "Q3 2014" + }, + { + "date": 1501525800000, + "value": 1585585.5, + "quarter": "Q4", + "quarterYear": "Q4 2014" + }, + { + "date": 1504204200000, + "value": 1584854.5, + "quarter": "Q1", + "quarterYear": "Q1 2014" + }, + { + "date": 1506796200000, + "value": 1591768.5, + "quarter": "Q2", + "quarterYear": "Q2 2014" + }, + { + "date": 1509474600000, + "value": 1592504.5, + "quarter": "Q3", + "quarterYear": "Q3 2014" + }, + { + "date": 1512066600000, + "value": 1589540.5, + "quarter": "Q4", + "quarterYear": "Q4 2014" + }, + { + "date": 1514745000000, + "value": 1588776.5, + "quarter": "Q1", + "quarterYear": "Q1 2014" + }, + { + "date": 1517423400000, + "value": 1596767.5, + "quarter": "Q2", + "quarterYear": "Q2 2014" + }, + { + "date": 1519842600000, + "value": 1589505.5, + "quarter": "Q3", + "quarterYear": "Q3 2014" + }, + { + "date": 1522521000000, + "value": 1588614.5, + "quarter": "Q4", + "quarterYear": "Q4 2014" + }, + { + "date": 1420050600000, + "value": 1659960, + "quarter": "Q1", + "quarterYear": "Q1 2015" + }, + { + "date": 1422729000000, + "value": 1652946, + "quarter": "Q2", + "quarterYear": "Q2 2015" + }, + { + "date": 1425148200000, + "value": 1662210, + "quarter": "Q3", + "quarterYear": "Q3 2015" + }, + { + "date": 1427826600000, + "value": 1668223, + "quarter": "Q4", + "quarterYear": "Q4 2015" + }, + { + "date": 1430418600000, + "value": 1660069, + "quarter": "Q1", + "quarterYear": "Q1 2015" + }, + { + "date": 1433097000000, + "value": 1663063, + "quarter": "Q2", + "quarterYear": "Q2 2015" + }, + { + "date": 1435689000000, + "value": 1660532, + "quarter": "Q3", + "quarterYear": "Q3 2015" + }, + { + "date": 1438367400000, + "value": 1661084, + "quarter": "Q4", + "quarterYear": "Q4 2015" + }, + { + "date": 1441045800000, + "value": 1653870, + "quarter": "Q1", + "quarterYear": "Q1 2015" + }, + { + "date": 1443637800000, + "value": 1660620, + "quarter": "Q2", + "quarterYear": "Q2 2015" + }, + { + "date": 1446316200000, + "value": 1665211, + "quarter": "Q3", + "quarterYear": "Q3 2015" + }, + { + "date": 1448908200000, + "value": 1670519, + "quarter": "Q4", + "quarterYear": "Q4 2015" + }, + { + "date": 1451586600000, + "value": 1670607, + "quarter": "Q1", + "quarterYear": "Q1 2015" + }, + { + "date": 1454265000000, + "value": 1679222, + "quarter": "Q2", + "quarterYear": "Q2 2015" + }, + { + "date": 1456770600000, + "value": 1687291, + "quarter": "Q3", + "quarterYear": "Q3 2015" + }, + { + "date": 1459449000000, + "value": 1677771, + "quarter": "Q4", + "quarterYear": "Q4 2015" + }, + { + "date": 1462041000000, + "value": 1679919, + "quarter": "Q1", + "quarterYear": "Q1 2015" + }, + { + "date": 1464719400000, + "value": 1688566, + "quarter": "Q2", + "quarterYear": "Q2 2015" + }, + { + "date": 1467311400000, + "value": 1683123, + "quarter": "Q3", + "quarterYear": "Q3 2015" + }, + { + "date": 1469989800000, + "value": 1687308, + "quarter": "Q4", + "quarterYear": "Q4 2015" + }, + { + "date": 1472668200000, + "value": 1695939, + "quarter": "Q1", + "quarterYear": "Q1 2015" + }, + { + "date": 1475260200000, + "value": 1697182, + "quarter": "Q2", + "quarterYear": "Q2 2015" + }, + { + "date": 1477938600000, + "value": 1693957, + "quarter": "Q3", + "quarterYear": "Q3 2015" + }, + { + "date": 1480530600000, + "value": 1690620, + "quarter": "Q4", + "quarterYear": "Q4 2015" + }, + { + "date": 1483209000000, + "value": 1682719, + "quarter": "Q1", + "quarterYear": "Q1 2015" + }, + { + "date": 1485887400000, + "value": 1688929, + "quarter": "Q2", + "quarterYear": "Q2 2015" + }, + { + "date": 1488306600000, + "value": 1697298, + "quarter": "Q3", + "quarterYear": "Q3 2015" + }, + { + "date": 1490985000000, + "value": 1697608, + "quarter": "Q4", + "quarterYear": "Q4 2015" + }, + { + "date": 1493577000000, + "value": 1705302, + "quarter": "Q1", + "quarterYear": "Q1 2015" + }, + { + "date": 1496255400000, + "value": 1702989, + "quarter": "Q2", + "quarterYear": "Q2 2015" + }, + { + "date": 1498847400000, + "value": 1698572, + "quarter": "Q3", + "quarterYear": "Q3 2015" + }, + { + "date": 1501525800000, + "value": 1694807, + "quarter": "Q4", + "quarterYear": "Q4 2015" + }, + { + "date": 1504204200000, + "value": 1691873, + "quarter": "Q1", + "quarterYear": "Q1 2015" + }, + { + "date": 1506796200000, + "value": 1693792, + "quarter": "Q2", + "quarterYear": "Q2 2015" + }, + { + "date": 1509474600000, + "value": 1703202, + "quarter": "Q3", + "quarterYear": "Q3 2015" + }, + { + "date": 1512066600000, + "value": 1709099, + "quarter": "Q4", + "quarterYear": "Q4 2015" + }, + { + "date": 1514745000000, + "value": 1704132, + "quarter": "Q1", + "quarterYear": "Q1 2015" + }, + { + "date": 1517423400000, + "value": 1702775, + "quarter": "Q2", + "quarterYear": "Q2 2015" + }, + { + "date": 1519842600000, + "value": 1703065, + "quarter": "Q3", + "quarterYear": "Q3 2015" + }, + { + "date": 1522521000000, + "value": 1703422, + "quarter": "Q4", + "quarterYear": "Q4 2015" + }, + { + "date": 1525113000000, + "value": 1706310, + "quarter": "Q1", + "quarterYear": "Q1 2015" + }, + { + "date": 1527791400000, + "value": 1715127, + "quarter": "Q2", + "quarterYear": "Q2 2015" + }, + { + "date": 1530383400000, + "value": 1706896, + "quarter": "Q3", + "quarterYear": "Q3 2015" + }, + { + "date": 1533061800000, + "value": 1707197, + "quarter": "Q4", + "quarterYear": "Q4 2015" + }, + { + "date": 1535740200000, + "value": 1716474, + "quarter": "Q1", + "quarterYear": "Q1 2015" + }, + { + "date": 1538332200000, + "value": 1717140, + "quarter": "Q2", + "quarterYear": "Q2 2015" + }, + { + "date": 1541010600000, + "value": 1723331, + "quarter": "Q3", + "quarterYear": "Q3 2015" + }, + { + "date": 1543602600000, + "value": 1732102, + "quarter": "Q4", + "quarterYear": "Q4 2015" + }, + { + "date": 1546281000000, + "value": 1739029, + "quarter": "Q1", + "quarterYear": "Q1 2015" + }, + { + "date": 1548959400000, + "value": 1737712, + "quarter": "Q2", + "quarterYear": "Q2 2015" + }, + { + "date": 1551378600000, + "value": 1741643, + "quarter": "Q3", + "quarterYear": "Q3 2015" + }, + { + "date": 1554057000000, + "value": 1750435, + "quarter": "Q4", + "quarterYear": "Q4 2015" + }, + { + "date": 1451586600000, + "value": 1842022, + "quarter": "Q1", + "quarterYear": "Q1 2016" + }, + { + "date": 1454265000000, + "value": 1840849, + "quarter": "Q2", + "quarterYear": "Q2 2016" + }, + { + "date": 1456770600000, + "value": 1844032, + "quarter": "Q3", + "quarterYear": "Q3 2016" + }, + { + "date": 1459449000000, + "value": 1842475, + "quarter": "Q4", + "quarterYear": "Q4 2016" + }, + { + "date": 1462041000000, + "value": 1833045, + "quarter": "Q1", + "quarterYear": "Q1 2016" + }, + { + "date": 1464719400000, + "value": 1823609, + "quarter": "Q2", + "quarterYear": "Q2 2016" + }, + { + "date": 1467311400000, + "value": 1824380, + "quarter": "Q3", + "quarterYear": "Q3 2016" + }, + { + "date": 1469989800000, + "value": 1833843, + "quarter": "Q4", + "quarterYear": "Q4 2016" + }, + { + "date": 1472668200000, + "value": 1841509, + "quarter": "Q1", + "quarterYear": "Q1 2016" + }, + { + "date": 1475260200000, + "value": 1847167, + "quarter": "Q2", + "quarterYear": "Q2 2016" + }, + { + "date": 1477938600000, + "value": 1854413, + "quarter": "Q3", + "quarterYear": "Q3 2016" + }, + { + "date": 1480530600000, + "value": 1863527, + "quarter": "Q4", + "quarterYear": "Q4 2016" + }, + { + "date": 1483209000000, + "value": 1873237, + "quarter": "Q1", + "quarterYear": "Q1 2016" + }, + { + "date": 1485887400000, + "value": 1875444, + "quarter": "Q2", + "quarterYear": "Q2 2016" + }, + { + "date": 1488306600000, + "value": 1885271, + "quarter": "Q3", + "quarterYear": "Q3 2016" + }, + { + "date": 1490985000000, + "value": 1876033, + "quarter": "Q4", + "quarterYear": "Q4 2016" + }, + { + "date": 1493577000000, + "value": 1866928, + "quarter": "Q1", + "quarterYear": "Q1 2016" + }, + { + "date": 1496255400000, + "value": 1872047, + "quarter": "Q2", + "quarterYear": "Q2 2016" + }, + { + "date": 1498847400000, + "value": 1866314, + "quarter": "Q3", + "quarterYear": "Q3 2016" + }, + { + "date": 1501525800000, + "value": 1872264, + "quarter": "Q4", + "quarterYear": "Q4 2016" + }, + { + "date": 1504204200000, + "value": 1874764, + "quarter": "Q1", + "quarterYear": "Q1 2016" + }, + { + "date": 1506796200000, + "value": 1878084, + "quarter": "Q2", + "quarterYear": "Q2 2016" + }, + { + "date": 1509474600000, + "value": 1870236, + "quarter": "Q3", + "quarterYear": "Q3 2016" + }, + { + "date": 1512066600000, + "value": 1880026, + "quarter": "Q4", + "quarterYear": "Q4 2016" + }, + { + "date": 1514745000000, + "value": 1888402, + "quarter": "Q1", + "quarterYear": "Q1 2016" + }, + { + "date": 1517423400000, + "value": 1886412, + "quarter": "Q2", + "quarterYear": "Q2 2016" + }, + { + "date": 1519842600000, + "value": 1895677, + "quarter": "Q3", + "quarterYear": "Q3 2016" + }, + { + "date": 1522521000000, + "value": 1890782, + "quarter": "Q4", + "quarterYear": "Q4 2016" + }, + { + "date": 1525113000000, + "value": 1892470, + "quarter": "Q1", + "quarterYear": "Q1 2016" + }, + { + "date": 1527791400000, + "value": 1897989, + "quarter": "Q2", + "quarterYear": "Q2 2016" + }, + { + "date": 1530383400000, + "value": 1895760, + "quarter": "Q3", + "quarterYear": "Q3 2016" + }, + { + "date": 1533061800000, + "value": 1903021, + "quarter": "Q4", + "quarterYear": "Q4 2016" + }, + { + "date": 1535740200000, + "value": 1909865, + "quarter": "Q1", + "quarterYear": "Q1 2016" + }, + { + "date": 1538332200000, + "value": 1904148, + "quarter": "Q2", + "quarterYear": "Q2 2016" + }, + { + "date": 1541010600000, + "value": 1908996, + "quarter": "Q3", + "quarterYear": "Q3 2016" + }, + { + "date": 1543602600000, + "value": 1903733, + "quarter": "Q4", + "quarterYear": "Q4 2016" + }, + { + "date": 1546281000000, + "value": 1902624, + "quarter": "Q1", + "quarterYear": "Q1 2016" + }, + { + "date": 1548959400000, + "value": 1896907, + "quarter": "Q2", + "quarterYear": "Q2 2016" + }, + { + "date": 1551378600000, + "value": 1898167, + "quarter": "Q3", + "quarterYear": "Q3 2016" + }, + { + "date": 1554057000000, + "value": 1888394, + "quarter": "Q4", + "quarterYear": "Q4 2016" + }, + { + "date": 1556649000000, + "value": 1896936, + "quarter": "Q1", + "quarterYear": "Q1 2016" + }, + { + "date": 1559327400000, + "value": 1891130, + "quarter": "Q2", + "quarterYear": "Q2 2016" + }, + { + "date": 1561919400000, + "value": 1889823, + "quarter": "Q3", + "quarterYear": "Q3 2016" + }, + { + "date": 1564597800000, + "value": 1891327, + "quarter": "Q4", + "quarterYear": "Q4 2016" + }, + { + "date": 1567276200000, + "value": 1896093, + "quarter": "Q1", + "quarterYear": "Q1 2016" + }, + { + "date": 1569868200000, + "value": 1905014, + "quarter": "Q2", + "quarterYear": "Q2 2016" + }, + { + "date": 1572546600000, + "value": 1911705, + "quarter": "Q3", + "quarterYear": "Q3 2016" + }, + { + "date": 1575138600000, + "value": 1910535, + "quarter": "Q4", + "quarterYear": "Q4 2016" + }, + { + "date": 1577817000000, + "value": 1917687, + "quarter": "Q1", + "quarterYear": "Q1 2016" + }, + { + "date": 1580495400000, + "value": 1924671, + "quarter": "Q2", + "quarterYear": "Q2 2016" + }, + { + "date": 1583001000000, + "value": 1927108, + "quarter": "Q3", + "quarterYear": "Q3 2016" + }, + { + "date": 1585679400000, + "value": 1925339, + "quarter": "Q4", + "quarterYear": "Q4 2016" + }, + { + "date": 1483209000000, + "value": 1827772.5, + "quarter": "Q1", + "quarterYear": "Q1 2017" + }, + { + "date": 1485887400000, + "value": 1826125.5, + "quarter": "Q2", + "quarterYear": "Q2 2017" + }, + { + "date": 1488306600000, + "value": 1826526.5, + "quarter": "Q3", + "quarterYear": "Q3 2017" + }, + { + "date": 1490985000000, + "value": 1835355.5, + "quarter": "Q4", + "quarterYear": "Q4 2017" + }, + { + "date": 1493577000000, + "value": 1825565.5, + "quarter": "Q1", + "quarterYear": "Q1 2017" + }, + { + "date": 1496255400000, + "value": 1835273.5, + "quarter": "Q2", + "quarterYear": "Q2 2017" + }, + { + "date": 1498847400000, + "value": 1828382.5, + "quarter": "Q3", + "quarterYear": "Q3 2017" + }, + { + "date": 1501525800000, + "value": 1824137.5, + "quarter": "Q4", + "quarterYear": "Q4 2017" + }, + { + "date": 1504204200000, + "value": 1830817.5, + "quarter": "Q1", + "quarterYear": "Q1 2017" + }, + { + "date": 1506796200000, + "value": 1824741.5, + "quarter": "Q2", + "quarterYear": "Q2 2017" + }, + { + "date": 1509474600000, + "value": 1825810.5, + "quarter": "Q3", + "quarterYear": "Q3 2017" + }, + { + "date": 1512066600000, + "value": 1816102.5, + "quarter": "Q4", + "quarterYear": "Q4 2017" + }, + { + "date": 1514745000000, + "value": 1809530.5, + "quarter": "Q1", + "quarterYear": "Q1 2017" + }, + { + "date": 1517423400000, + "value": 1809037.5, + "quarter": "Q2", + "quarterYear": "Q2 2017" + }, + { + "date": 1519842600000, + "value": 1814618.5, + "quarter": "Q3", + "quarterYear": "Q3 2017" + }, + { + "date": 1522521000000, + "value": 1820248.5, + "quarter": "Q4", + "quarterYear": "Q4 2017" + }, + { + "date": 1525113000000, + "value": 1819911.5, + "quarter": "Q1", + "quarterYear": "Q1 2017" + }, + { + "date": 1527791400000, + "value": 1812665.5, + "quarter": "Q2", + "quarterYear": "Q2 2017" + }, + { + "date": 1530383400000, + "value": 1818079.5, + "quarter": "Q3", + "quarterYear": "Q3 2017" + }, + { + "date": 1533061800000, + "value": 1813848.5, + "quarter": "Q4", + "quarterYear": "Q4 2017" + }, + { + "date": 1535740200000, + "value": 1819901.5, + "quarter": "Q1", + "quarterYear": "Q1 2017" + }, + { + "date": 1538332200000, + "value": 1814306.5, + "quarter": "Q2", + "quarterYear": "Q2 2017" + }, + { + "date": 1541010600000, + "value": 1816200.5, + "quarter": "Q3", + "quarterYear": "Q3 2017" + }, + { + "date": 1543602600000, + "value": 1809471.5, + "quarter": "Q4", + "quarterYear": "Q4 2017" + }, + { + "date": 1546281000000, + "value": 1801360.5, + "quarter": "Q1", + "quarterYear": "Q1 2017" + }, + { + "date": 1548959400000, + "value": 1796378.5, + "quarter": "Q2", + "quarterYear": "Q2 2017" + }, + { + "date": 1551378600000, + "value": 1791444.5, + "quarter": "Q3", + "quarterYear": "Q3 2017" + }, + { + "date": 1554057000000, + "value": 1782074.5, + "quarter": "Q4", + "quarterYear": "Q4 2017" + }, + { + "date": 1556649000000, + "value": 1781880.5, + "quarter": "Q1", + "quarterYear": "Q1 2017" + }, + { + "date": 1559327400000, + "value": 1773271.5, + "quarter": "Q2", + "quarterYear": "Q2 2017" + }, + { + "date": 1561919400000, + "value": 1780850.5, + "quarter": "Q3", + "quarterYear": "Q3 2017" + }, + { + "date": 1564597800000, + "value": 1773132.5, + "quarter": "Q4", + "quarterYear": "Q4 2017" + }, + { + "date": 1567276200000, + "value": 1765158.5, + "quarter": "Q1", + "quarterYear": "Q1 2017" + }, + { + "date": 1569868200000, + "value": 1767159.5, + "quarter": "Q2", + "quarterYear": "Q2 2017" + }, + { + "date": 1572546600000, + "value": 1769727.5, + "quarter": "Q3", + "quarterYear": "Q3 2017" + }, + { + "date": 1575138600000, + "value": 1769610.5, + "quarter": "Q4", + "quarterYear": "Q4 2017" + }, + { + "date": 1577817000000, + "value": 1762648.5, + "quarter": "Q1", + "quarterYear": "Q1 2017" + }, + { + "date": 1580495400000, + "value": 1767589.5, + "quarter": "Q2", + "quarterYear": "Q2 2017" + }, + { + "date": 1583001000000, + "value": 1769949.5, + "quarter": "Q3", + "quarterYear": "Q3 2017" + }, + { + "date": 1585679400000, + "value": 1778607.5, + "quarter": "Q4", + "quarterYear": "Q4 2017" + }, + { + "date": 1588271400000, + "value": 1771829.5, + "quarter": "Q1", + "quarterYear": "Q1 2017" + }, + { + "date": 1590949800000, + "value": 1777651.5, + "quarter": "Q2", + "quarterYear": "Q2 2017" + }, + { + "date": 1593541800000, + "value": 1771120.5, + "quarter": "Q3", + "quarterYear": "Q3 2017" + }, + { + "date": 1596220200000, + "value": 1765333.5, + "quarter": "Q4", + "quarterYear": "Q4 2017" + }, + { + "date": 1598898600000, + "value": 1764829.5, + "quarter": "Q1", + "quarterYear": "Q1 2017" + }, + { + "date": 1601490600000, + "value": 1761245.5, + "quarter": "Q2", + "quarterYear": "Q2 2017" + }, + { + "date": 1604169000000, + "value": 1752868.5, + "quarter": "Q3", + "quarterYear": "Q3 2017" + }, + { + "date": 1606761000000, + "value": 1754712.5, + "quarter": "Q4", + "quarterYear": "Q4 2017" + }, + { + "date": 1609439400000, + "value": 1763900.5, + "quarter": "Q1", + "quarterYear": "Q1 2017" + }, + { + "date": 1612117800000, + "value": 1769015.5, + "quarter": "Q2", + "quarterYear": "Q2 2017" + }, + { + "date": 1614537000000, + "value": 1766968.5, + "quarter": "Q3", + "quarterYear": "Q3 2017" + }, + { + "date": 1617215400000, + "value": 1771168.5, + "quarter": "Q4", + "quarterYear": "Q4 2017" + }, + { + "date": 1514745000000, + "value": 1668286, + "quarter": "Q1", + "quarterYear": "Q1 2018" + }, + { + "date": 1517423400000, + "value": 1659396, + "quarter": "Q2", + "quarterYear": "Q2 2018" + }, + { + "date": 1519842600000, + "value": 1650936, + "quarter": "Q3", + "quarterYear": "Q3 2018" + }, + { + "date": 1522521000000, + "value": 1648997, + "quarter": "Q4", + "quarterYear": "Q4 2018" + }, + { + "date": 1525113000000, + "value": 1641441, + "quarter": "Q1", + "quarterYear": "Q1 2018" + }, + { + "date": 1527791400000, + "value": 1632460, + "quarter": "Q2", + "quarterYear": "Q2 2018" + }, + { + "date": 1530383400000, + "value": 1626315, + "quarter": "Q3", + "quarterYear": "Q3 2018" + }, + { + "date": 1533061800000, + "value": 1627469, + "quarter": "Q4", + "quarterYear": "Q4 2018" + }, + { + "date": 1535740200000, + "value": 1631457, + "quarter": "Q1", + "quarterYear": "Q1 2018" + }, + { + "date": 1538332200000, + "value": 1638788, + "quarter": "Q2", + "quarterYear": "Q2 2018" + }, + { + "date": 1541010600000, + "value": 1648498, + "quarter": "Q3", + "quarterYear": "Q3 2018" + }, + { + "date": 1543602600000, + "value": 1658215, + "quarter": "Q4", + "quarterYear": "Q4 2018" + }, + { + "date": 1546281000000, + "value": 1666382, + "quarter": "Q1", + "quarterYear": "Q1 2018" + }, + { + "date": 1548959400000, + "value": 1660301, + "quarter": "Q2", + "quarterYear": "Q2 2018" + }, + { + "date": 1551378600000, + "value": 1666392, + "quarter": "Q3", + "quarterYear": "Q3 2018" + }, + { + "date": 1554057000000, + "value": 1673273, + "quarter": "Q4", + "quarterYear": "Q4 2018" + }, + { + "date": 1556649000000, + "value": 1671711, + "quarter": "Q1", + "quarterYear": "Q1 2018" + }, + { + "date": 1559327400000, + "value": 1665096, + "quarter": "Q2", + "quarterYear": "Q2 2018" + }, + { + "date": 1561919400000, + "value": 1658035, + "quarter": "Q3", + "quarterYear": "Q3 2018" + }, + { + "date": 1564597800000, + "value": 1651309, + "quarter": "Q4", + "quarterYear": "Q4 2018" + }, + { + "date": 1567276200000, + "value": 1642220, + "quarter": "Q1", + "quarterYear": "Q1 2018" + }, + { + "date": 1569868200000, + "value": 1634844, + "quarter": "Q2", + "quarterYear": "Q2 2018" + }, + { + "date": 1572546600000, + "value": 1631492, + "quarter": "Q3", + "quarterYear": "Q3 2018" + }, + { + "date": 1575138600000, + "value": 1621647, + "quarter": "Q4", + "quarterYear": "Q4 2018" + }, + { + "date": 1577817000000, + "value": 1616981, + "quarter": "Q1", + "quarterYear": "Q1 2018" + }, + { + "date": 1580495400000, + "value": 1611262, + "quarter": "Q2", + "quarterYear": "Q2 2018" + }, + { + "date": 1583001000000, + "value": 1606980, + "quarter": "Q3", + "quarterYear": "Q3 2018" + }, + { + "date": 1585679400000, + "value": 1614948, + "quarter": "Q4", + "quarterYear": "Q4 2018" + }, + { + "date": 1588271400000, + "value": 1624456, + "quarter": "Q1", + "quarterYear": "Q1 2018" + }, + { + "date": 1590949800000, + "value": 1628606, + "quarter": "Q2", + "quarterYear": "Q2 2018" + }, + { + "date": 1593541800000, + "value": 1626833, + "quarter": "Q3", + "quarterYear": "Q3 2018" + }, + { + "date": 1596220200000, + "value": 1627676, + "quarter": "Q4", + "quarterYear": "Q4 2018" + }, + { + "date": 1598898600000, + "value": 1627420, + "quarter": "Q1", + "quarterYear": "Q1 2018" + }, + { + "date": 1601490600000, + "value": 1629880, + "quarter": "Q2", + "quarterYear": "Q2 2018" + }, + { + "date": 1604169000000, + "value": 1627630, + "quarter": "Q3", + "quarterYear": "Q3 2018" + }, + { + "date": 1606761000000, + "value": 1622555, + "quarter": "Q4", + "quarterYear": "Q4 2018" + }, + { + "date": 1609439400000, + "value": 1623710, + "quarter": "Q1", + "quarterYear": "Q1 2018" + }, + { + "date": 1612117800000, + "value": 1627155, + "quarter": "Q2", + "quarterYear": "Q2 2018" + }, + { + "date": 1614537000000, + "value": 1626498, + "quarter": "Q3", + "quarterYear": "Q3 2018" + }, + { + "date": 1617215400000, + "value": 1620508, + "quarter": "Q4", + "quarterYear": "Q4 2018" + }, + { + "date": 1619807400000, + "value": 1621852, + "quarter": "Q1", + "quarterYear": "Q1 2018" + }, + { + "date": 1622485800000, + "value": 1623110, + "quarter": "Q2", + "quarterYear": "Q2 2018" + }, + { + "date": 1625077800000, + "value": 1617621, + "quarter": "Q3", + "quarterYear": "Q3 2018" + }, + { + "date": 1627756200000, + "value": 1609958, + "quarter": "Q4", + "quarterYear": "Q4 2018" + }, + { + "date": 1630434600000, + "value": 1618725, + "quarter": "Q1", + "quarterYear": "Q1 2018" + }, + { + "date": 1633026600000, + "value": 1626057, + "quarter": "Q2", + "quarterYear": "Q2 2018" + }, + { + "date": 1635705000000, + "value": 1624250, + "quarter": "Q3", + "quarterYear": "Q3 2018" + }, + { + "date": 1638297000000, + "value": 1616459, + "quarter": "Q4", + "quarterYear": "Q4 2018" + }, + { + "date": 1640975400000, + "value": 1608795, + "quarter": "Q1", + "quarterYear": "Q1 2018" + }, + { + "date": 1643653800000, + "value": 1605154, + "quarter": "Q2", + "quarterYear": "Q2 2018" + }, + { + "date": 1646073000000, + "value": 1607413, + "quarter": "Q3", + "quarterYear": "Q3 2018" + }, + { + "date": 1648751400000, + "value": 1600964, + "quarter": "Q4", + "quarterYear": "Q4 2018" + }, + { + "date": 1546281000000, + "value": 1687434.5, + "quarter": "Q1", + "quarterYear": "Q1 2019" + }, + { + "date": 1548959400000, + "value": 1694356.5, + "quarter": "Q2", + "quarterYear": "Q2 2019" + }, + { + "date": 1551378600000, + "value": 1691413.5, + "quarter": "Q3", + "quarterYear": "Q3 2019" + }, + { + "date": 1554057000000, + "value": 1697647.5, + "quarter": "Q4", + "quarterYear": "Q4 2019" + }, + { + "date": 1556649000000, + "value": 1693192.5, + "quarter": "Q1", + "quarterYear": "Q1 2019" + }, + { + "date": 1559327400000, + "value": 1697600.5, + "quarter": "Q2", + "quarterYear": "Q2 2019" + }, + { + "date": 1561919400000, + "value": 1703348.5, + "quarter": "Q3", + "quarterYear": "Q3 2019" + }, + { + "date": 1564597800000, + "value": 1693549.5, + "quarter": "Q4", + "quarterYear": "Q4 2019" + }, + { + "date": 1567276200000, + "value": 1690461.5, + "quarter": "Q1", + "quarterYear": "Q1 2019" + }, + { + "date": 1569868200000, + "value": 1687852.5, + "quarter": "Q2", + "quarterYear": "Q2 2019" + }, + { + "date": 1572546600000, + "value": 1680603.5, + "quarter": "Q3", + "quarterYear": "Q3 2019" + }, + { + "date": 1575138600000, + "value": 1677570.5, + "quarter": "Q4", + "quarterYear": "Q4 2019" + }, + { + "date": 1577817000000, + "value": 1673607.5, + "quarter": "Q1", + "quarterYear": "Q1 2019" + }, + { + "date": 1580495400000, + "value": 1680087.5, + "quarter": "Q2", + "quarterYear": "Q2 2019" + }, + { + "date": 1583001000000, + "value": 1672369.5, + "quarter": "Q3", + "quarterYear": "Q3 2019" + }, + { + "date": 1585679400000, + "value": 1677093.5, + "quarter": "Q4", + "quarterYear": "Q4 2019" + }, + { + "date": 1588271400000, + "value": 1668178.5, + "quarter": "Q1", + "quarterYear": "Q1 2019" + }, + { + "date": 1590949800000, + "value": 1664964.5, + "quarter": "Q2", + "quarterYear": "Q2 2019" + }, + { + "date": 1593541800000, + "value": 1674929.5, + "quarter": "Q3", + "quarterYear": "Q3 2019" + }, + { + "date": 1596220200000, + "value": 1665003.5, + "quarter": "Q4", + "quarterYear": "Q4 2019" + }, + { + "date": 1598898600000, + "value": 1662081.5, + "quarter": "Q1", + "quarterYear": "Q1 2019" + }, + { + "date": 1601490600000, + "value": 1659839.5, + "quarter": "Q2", + "quarterYear": "Q2 2019" + }, + { + "date": 1604169000000, + "value": 1654707.5, + "quarter": "Q3", + "quarterYear": "Q3 2019" + }, + { + "date": 1606761000000, + "value": 1655975.5, + "quarter": "Q4", + "quarterYear": "Q4 2019" + }, + { + "date": 1609439400000, + "value": 1660976.5, + "quarter": "Q1", + "quarterYear": "Q1 2019" + }, + { + "date": 1612117800000, + "value": 1661391.5, + "quarter": "Q2", + "quarterYear": "Q2 2019" + }, + { + "date": 1614537000000, + "value": 1669313.5, + "quarter": "Q3", + "quarterYear": "Q3 2019" + }, + { + "date": 1617215400000, + "value": 1675881.5, + "quarter": "Q4", + "quarterYear": "Q4 2019" + }, + { + "date": 1619807400000, + "value": 1667272.5, + "quarter": "Q1", + "quarterYear": "Q1 2019" + }, + { + "date": 1622485800000, + "value": 1658530.5, + "quarter": "Q2", + "quarterYear": "Q2 2019" + }, + { + "date": 1625077800000, + "value": 1650487.5, + "quarter": "Q3", + "quarterYear": "Q3 2019" + }, + { + "date": 1627756200000, + "value": 1647633.5, + "quarter": "Q4", + "quarterYear": "Q4 2019" + }, + { + "date": 1630434600000, + "value": 1654685.5, + "quarter": "Q1", + "quarterYear": "Q1 2019" + }, + { + "date": 1633026600000, + "value": 1660500.5, + "quarter": "Q2", + "quarterYear": "Q2 2019" + }, + { + "date": 1635705000000, + "value": 1669901.5, + "quarter": "Q3", + "quarterYear": "Q3 2019" + }, + { + "date": 1638297000000, + "value": 1669108.5, + "quarter": "Q4", + "quarterYear": "Q4 2019" + }, + { + "date": 1640975400000, + "value": 1673108.5, + "quarter": "Q1", + "quarterYear": "Q1 2019" + }, + { + "date": 1643653800000, + "value": 1668405.5, + "quarter": "Q2", + "quarterYear": "Q2 2019" + }, + { + "date": 1646073000000, + "value": 1671248.5, + "quarter": "Q3", + "quarterYear": "Q3 2019" + }, + { + "date": 1648751400000, + "value": 1671988.5, + "quarter": "Q4", + "quarterYear": "Q4 2019" + }, + { + "date": 1651343400000, + "value": 1670189.5, + "quarter": "Q1", + "quarterYear": "Q1 2019" + }, + { + "date": 1654021800000, + "value": 1662319.5, + "quarter": "Q2", + "quarterYear": "Q2 2019" + }, + { + "date": 1656613800000, + "value": 1666281.5, + "quarter": "Q3", + "quarterYear": "Q3 2019" + }, + { + "date": 1659292200000, + "value": 1658348.5, + "quarter": "Q4", + "quarterYear": "Q4 2019" + }, + { + "date": 1661970600000, + "value": 1657146.5, + "quarter": "Q1", + "quarterYear": "Q1 2019" + }, + { + "date": 1664562600000, + "value": 1661607.5, + "quarter": "Q2", + "quarterYear": "Q2 2019" + }, + { + "date": 1667241000000, + "value": 1668361.5, + "quarter": "Q3", + "quarterYear": "Q3 2019" + }, + { + "date": 1669833000000, + "value": 1676371.5, + "quarter": "Q4", + "quarterYear": "Q4 2019" + }, + { + "date": 1672511400000, + "value": 1673432.5, + "quarter": "Q1", + "quarterYear": "Q1 2019" + }, + { + "date": 1675189800000, + "value": 1679713.5, + "quarter": "Q2", + "quarterYear": "Q2 2019" + }, + { + "date": 1677609000000, + "value": 1670047.5, + "quarter": "Q3", + "quarterYear": "Q3 2019" + }, + { + "date": 1680287400000, + "value": 1678960.5, + "quarter": "Q4", + "quarterYear": "Q4 2019" + } +] \ No newline at end of file diff --git a/examples/data/sp500.csv b/examples/data/sp500.csv new file mode 100644 index 00000000..0eb287fb --- /dev/null +++ b/examples/data/sp500.csv @@ -0,0 +1,124 @@ +date,price +Jan 1 2000,1394.46 +Feb 1 2000,1366.42 +Mar 1 2000,1498.58 +Apr 1 2000,1452.43 +May 1 2000,1420.6 +Jun 1 2000,1454.6 +Jul 1 2000,1430.83 +Aug 1 2000,1517.68 +Sep 1 2000,1436.51 +Oct 1 2000,1429.4 +Nov 1 2000,1314.95 +Dec 1 2000,1320.28 +Jan 1 2001,1366.01 +Feb 1 2001,1239.94 +Mar 1 2001,1160.33 +Apr 1 2001,1249.46 +May 1 2001,1255.82 +Jun 1 2001,1224.38 +Jul 1 2001,1211.23 +Aug 1 2001,1133.58 +Sep 1 2001,1040.94 +Oct 1 2001,1059.78 +Nov 1 2001,1139.45 +Dec 1 2001,1148.08 +Jan 1 2002,1130.2 +Feb 1 2002,1106.73 +Mar 1 2002,1147.39 +Apr 1 2002,1076.92 +May 1 2002,1067.14 +Jun 1 2002,989.82 +Jul 1 2002,911.62 +Aug 1 2002,916.07 +Sep 1 2002,815.28 +Oct 1 2002,885.76 +Nov 1 2002,936.31 +Dec 1 2002,879.82 +Jan 1 2003,855.7 +Feb 1 2003,841.15 +Mar 1 2003,848.18 +Apr 1 2003,916.92 +May 1 2003,963.59 +Jun 1 2003,974.5 +Jul 1 2003,990.31 +Aug 1 2003,1008.01 +Sep 1 2003,995.97 +Oct 1 2003,1050.71 +Nov 1 2003,1058.2 +Dec 1 2003,1111.92 +Jan 1 2004,1131.13 +Feb 1 2004,1144.94 +Mar 1 2004,1126.21 +Apr 1 2004,1107.3 +May 1 2004,1120.68 +Jun 1 2004,1140.84 +Jul 1 2004,1101.72 +Aug 1 2004,1104.24 +Sep 1 2004,1114.58 +Oct 1 2004,1130.2 +Nov 1 2004,1173.82 +Dec 1 2004,1211.92 +Jan 1 2005,1181.27 +Feb 1 2005,1203.6 +Mar 1 2005,1180.59 +Apr 1 2005,1156.85 +May 1 2005,1191.5 +Jun 1 2005,1191.33 +Jul 1 2005,1234.18 +Aug 1 2005,1220.33 +Sep 1 2005,1228.81 +Oct 1 2005,1207.01 +Nov 1 2005,1249.48 +Dec 1 2005,1248.29 +Jan 1 2006,1280.08 +Feb 1 2006,1280.66 +Mar 1 2006,1294.87 +Apr 1 2006,1310.61 +May 1 2006,1270.09 +Jun 1 2006,1270.2 +Jul 1 2006,1276.66 +Aug 1 2006,1303.82 +Sep 1 2006,1335.85 +Oct 1 2006,1377.94 +Nov 1 2006,1400.63 +Dec 1 2006,1418.3 +Jan 1 2007,1438.24 +Feb 1 2007,1406.82 +Mar 1 2007,1420.86 +Apr 1 2007,1482.37 +May 1 2007,1530.62 +Jun 1 2007,1503.35 +Jul 1 2007,1455.27 +Aug 1 2007,1473.99 +Sep 1 2007,1526.75 +Oct 1 2007,1549.38 +Nov 1 2007,1481.14 +Dec 1 2007,1468.36 +Jan 1 2008,1378.55 +Feb 1 2008,1330.63 +Mar 1 2008,1322.7 +Apr 1 2008,1385.59 +May 1 2008,1400.38 +Jun 1 2008,1280 +Jul 1 2008,1267.38 +Aug 1 2008,1282.83 +Sep 1 2008,1166.36 +Oct 1 2008,968.75 +Nov 1 2008,896.24 +Dec 1 2008,903.25 +Jan 1 2009,825.88 +Feb 1 2009,735.09 +Mar 1 2009,797.87 +Apr 1 2009,872.81 +May 1 2009,919.14 +Jun 1 2009,919.32 +Jul 1 2009,987.48 +Aug 1 2009,1020.62 +Sep 1 2009,1057.08 +Oct 1 2009,1036.19 +Nov 1 2009,1095.63 +Dec 1 2009,1115.1 +Jan 1 2010,1073.87 +Feb 1 2010,1104.49 +Mar 1 2010,1140.45 diff --git a/examples/index-clock.html b/examples/index-clock.html new file mode 100644 index 00000000..26266cac --- /dev/null +++ b/examples/index-clock.html @@ -0,0 +1,34 @@ + + + + + + + + Muze + + + + + + + +
+ + +
+
+ + + + + + \ No newline at end of file diff --git a/examples/index.html b/examples/index.html index 5e2d54e5..c703b6bc 100644 --- a/examples/index.html +++ b/examples/index.html @@ -6,57 +6,24 @@ Muze - - - - - - - - - + + + - +
-
-
-
-
-
- + +
+
- + \ No newline at end of file diff --git a/examples/index1.html b/examples/index1.html index cbffad65..11996d48 100644 --- a/examples/index1.html +++ b/examples/index1.html @@ -19,7 +19,8 @@
- + + \ No newline at end of file diff --git a/examples/index2.html b/examples/index2.html new file mode 100644 index 00000000..b1ba920f --- /dev/null +++ b/examples/index2.html @@ -0,0 +1,84 @@ + + + + + + + + Muze + + + + + + + + + + + + + + +
+
+
+
+
+ + + + + + + + + +
+ + + + + + + + \ No newline at end of file diff --git a/examples/index4.html b/examples/index4.html new file mode 100644 index 00000000..5e2d54e5 --- /dev/null +++ b/examples/index4.html @@ -0,0 +1,62 @@ + + + + + + + + Muze + + + + + + + + + + + + + + +
+
+
+
+
+ + + + + + + \ No newline at end of file diff --git a/examples/index5.html b/examples/index5.html new file mode 100644 index 00000000..59aeb006 --- /dev/null +++ b/examples/index5.html @@ -0,0 +1,26 @@ + + + + + + + + Muze + + + + + + +
+ + + + + + + \ No newline at end of file diff --git a/examples/js/aa1.js b/examples/js/aa1.js new file mode 100644 index 00000000..3e6c7135 --- /dev/null +++ b/examples/js/aa1.js @@ -0,0 +1,96 @@ +/* eslint-disable */ + +(function () { + let env = window.muze(); + const DataModel = window.muze.DataModel; + + d3.json('/data/cars.json', (data) => { + let jsonData = data, + schema = [{ + name: 'Name', + type: 'dimension' + }, { + name: 'Maker', + type: 'dimension' + }, { + name: 'Miles_per_Gallon', + type: 'measure' + }, { + name: 'Displacement', + type: 'measure' + }, { + name: 'Horsepower', + type: 'measure' + }, { + name: 'Weight_in_lbs', + type: 'measure' + }, { + name: 'Acceleration', + type: 'measure' + }, { + name: 'Origin', + type: 'dimension' + }, { + name: 'Cylinders', + type: 'dimension' + }, { + name: 'Year', + type: 'dimension', + subtype: 'temporal', + format: '%Y-%m-%d' + }]; + let dm = new DataModel(jsonData, schema); + + dm = dm.groupBy(['Year', 'Origin', 'Cylinders', 'Maker'], { + Horsepower: 'mean', + Acceleration: 'mean' + }); + + env = env.data(dm).minUnitHeight(40).minUnitWidth(40); + var mountPoint = document.getElementById('chart'); + window.canvas = env.canvas(); + var canvas2 = env.canvas(); + var canvas3 = env.canvas(); + var rows = ['Origin'], + columns = ['Cylinders']; + canvas = canvas.rows(rows).columns(columns).data(dm).color('Maker').layers([{ + mark: 'arc' + }]).height(300).width(300).config({ + scrollBar: { + horizontal: { + align: 'bottom' + } + } + }).mount('#chart') + + // canvas + // .data(dm) + // .width(600) + // .height(400) + // .rows(['Horsepower']) + // .columns(['Cylinders']) + // // .detail(['Name']) + // .mount('#chart') /* Attaching the canvas to DOM element */ + // .config({ + // axes: { + // y: { + // interpolator: 'pow', + // exponent: 2, + // }, + // } + // }) + + // setTimeout(() => { + // canvas + // .config({ + // axes: { + // y: { + // tickFormat: (d) => `${d/1000}K`, + // interpolator: 'linear', + // base: 2, + // } + // } + // }); + // }, 2000); + }); +}()); diff --git a/examples/js/box-plot.js b/examples/js/box-plot.js index 8a1ae7e1..07372ff2 100644 --- a/examples/js/box-plot.js +++ b/examples/js/box-plot.js @@ -1,157 +1,157 @@ -/* eslint disable */ - -const DataModel = window.muze.DataModel; - -const share = window.muze.Operators.share; -const layerFactory = window.muze.layerFactory; - -const schema = [{ - name: 'organ', - type: 'dimension' -}, -{ - name: 'minValue', - type: 'measure' -}, -{ - name: 'meanValue', - type: 'measure' -}, -{ - name: 'maxValue', - type: 'measure' -}, -{ - name: 'quarter', - type: 'measure' -}, -{ - name: 'thirdQuarter', - type: 'measure' -} -]; - -layerFactory.composeLayers('boxMark', [ - { - name: 'leftTick', - className: 'leftTick', - mark: 'tick', - encoding: { - x: 'boxMark.encoding.quarter', - x0: 'boxMark.encoding.minValue' - }, - interactive: false - }, - { - name: 'lowerBand', - mark: 'bar', - className: 'lowerBand', - encoding: { - x0: 'boxMark.encoding.meanValue', - x: 'boxMark.encoding.quarter' - }, - transform: { - type: 'identity' +/* eslint-disable */ +d3.json('../data/iris.cleared.json', function (data) { + // load data and schema from url + var schema = [ + { + "name": "organ", + "type": "dimension", + displayName: "organ2" }, - transition: { - disabled: true + { + "name": "minValue", + "type": "measure", + displayName: "minValue2" + }, { + "name": "meanValue", + "type": "measure", + displayName: "meanValue2" + }, { + "name": "maxValue", + "type": "measure", + displayName: "maxValue2" + }, { + "name": "quarter", + "type": "measure", + displayName: "quarter2" + }, { + "name": "thirdQuarter", + "type": "measure", + displayName: "thirdQuarter2" } - }, - { - name: 'upperBand', - mark: 'bar', - className: 'upperBand', - encoding: { - x: 'boxMark.encoding.thirdQuarter', - x0: 'boxMark.encoding.meanValue' - }, - transform: { - type: 'identity' - }, - - transition: { - disabled: true - } - }, - { - name: 'rightTick', - mark: 'tick', - className: 'boxTicks', - encoding: { - x: 'boxMark.encoding.maxValue', - x0: 'boxMark.encoding.thirdQuarter' - }, - interactive: false - }, - { - name: 'minTick', - mark: 'tick', - className: 'boxTicks', - encoding: { - x: 'boxMark.encoding.minValue', - y: 'boxMark.encoding.y', - shape: { - value: 'line' + ]; + var layers = [ + { + "name": "maxTick", + "mark": "tick", + "className": "boxTicks", + "encoding": { + "y": "boxMark.encoding.maxValue", + "x": "boxMark.encoding.x" + }, + "interactive": false + }, { + "name": "upperTick", + "className": "upper-tick", + "mark": "tick", + "encoding": { + "y": "boxMark.encoding.quarter", + "x": "boxMark.encoding.x", + "y0": "boxMark.encoding.minValue" + }, + "interactive": false + }, { + "name": "upperBand", + "mark": "bar", + "className": "upperBand", + "encoding": { + "y": "boxMark.encoding.thirdQuarter", + "x": "boxMark.encoding.x", + "y0": "boxMark.encoding.meanValue", + "color": "boxMark.encoding.color" + }, + "transform": { + "type": "identity" } - }, - interactive: false - }, - { - name: 'maxTick', - mark: 'tick', - className: 'boxTicks', - encoding: { - x: 'boxMark.encoding.maxValue', - y: 'boxMark.encoding.y' - }, - interactive: false - }, - { - name: 'meanTick', - mark: 'tick', - className: 'boxTicks', - encoding: { - x: 'boxMark.encoding.meanValue', - y: 'boxMark.encoding.y' - }, - interactive: false - } -]); + }, { + "name": "meanTick", + "mark": "tick", + "className": "boxTicks", + "encoding": { + "y": "boxMark.encoding.meanValue", + "x": "boxMark.encoding.x" + }, + "interactive": false + }, { + "name": "lowerBand", + "mark": "bar", + "className": "lowerBand", + "encoding": { + "y0": "boxMark.encoding.meanValue", + "x": "boxMark.encoding.x", + "y": "boxMark.encoding.quarter", + "color": "boxMark.encoding.color" + }, + "transform": { + "type": "identity" + } + }, { + "name": "lowerTick", + "mark": "tick", + "className": "boxTicks", + "encoding": { + "y": "boxMark.encoding.maxValue", + "x": "boxMark.encoding.x", + "y0": "boxMark.encoding.thirdQuarter" + }, + "interactive": false + }, { + "name": "minTick", + "mark": "tick", + "className": "boxTicks", + "encoding": { + "y": "boxMark.encoding.minValue", + "x": "boxMark.encoding.x" + }, + "interactive": false + }]; + + var DataModel = window.muze.DataModel; + var rootData = new DataModel(data, schema); + // Registry for user defined layers + var layerFactory = muze.layerFactory; + // Compose share operator for plotting multiple variable in one Y-axis + var share = muze.Operators.share; -let sharedField; -const columns = [sharedField = share('minValue', 'meanValue', 'maxValue', 'quarter', 'thirdQuarter')]; -const rows = ['organ']; + var html = window.muze.Operators.html; -// Create a muze instance -let env = window.muze(); + // Create a global environment to share common configs across charts + var env = window.muze(); + // Set height, width and data to env, so that every instance of canvas which gets created from the environment + // receives this + env.width(600).height(600).data(rootData); -d3.json('../data/iris.cleared.json', (data) => { - const dt = new DataModel(data, schema); - // Specify some global chart configurations - env = env.width(800) - .height(600) - .data(dt); + var canvas = env.canvas(); + + // Use the custom layer definition to register a new layer and name it boxMark + layerFactory.composeLayers('boxMark', layers); + var sharedField = void 0; + // Create a combined field which gets plotted in the Y-axis. Value of all those variables will be passed + // to layers + var columns = [sharedField = share('minValue', 'meanValue', 'maxValue', 'quarter', 'thirdQuarter')]; + var rows = ['organ']; + + canvas.rows(columns).columns(rows).color('organ').config({ + axes: { + y: { + showAxisName: true, + name: 'Measure' + } + } + }).layers([{ + mark: 'boxMark', + encoding: { // Map the encoding with variables. These custom encodings are used in the composite layers. + minValue: 'minValue', + meanValue: 'meanValue', + x: 'organ', + maxValue: 'maxValue', + quarter: 'quarter', + thirdQuarter: 'thirdQuarter' + } + }]).mount(document.getElementById('chart')); - let canvas = env.canvas(); + canvas.once('canvas.animationend').then(function (client) { - // Takes the rest of the config from global renderer - canvas = canvas - .rows(rows) - .columns(columns) - .layers([{ - mark: 'boxMark', - encoding: { - minValue: 'minValue', - meanValue: 'meanValue', - y: 'organ', - maxValue: 'maxValue', - quarter: 'quarter', - thirdQuarter: 'thirdQuarter' - }, - transform: { - type: 'identity' - } -}]) -.color('organ') - .mount(document.getElementById('chart')); -}); + var element = document.getElementById('chart'); + element.classList.add('animateon'); + }); +}); \ No newline at end of file diff --git a/examples/js/clock.js b/examples/js/clock.js new file mode 100644 index 00000000..9483a62a --- /dev/null +++ b/examples/js/clock.js @@ -0,0 +1,283 @@ +const env = muze(); +const DataModel = muze.DataModel; + +const jsonData = []; +for (let i = 1; i <= 60; i++) { + jsonData.push({ + name: i === 60 ? 60 : i + }); +} +const schema2 = [{ + name: 'name', + type: 'dimension' +}, { + name: 'hour', + type: 'measure' +}, { + name: 'tick', + type: 'measure' +}]; +const rootData = new DataModel(jsonData, schema2); + +const makeZeroSixty = (val) => { + if (val == 0) { + return '60'; + } return val; +}; + +const tickMap = { + hours: { + low: { + stroke: 'white', + width: '4px', + inner: 0, + outer: -120 + }, + middle: { + stroke: '#c41400', + width: '8px', + inner: 30, + outer: -120 + }, + high: { + stroke: 'white', + width: '12px', + inner: 30, + outer: -120 + } + }, + minutes: { + low: { + stroke: 'white', + width: '4px', + inner: 0, + outer: -70 + }, + middle: { + stroke: '#c41400', + width: '8px', + inner: 30, + outer: -70 + }, + high: { + stroke: 'white', + width: '12px', + inner: 30, + outer: -70 + } + } +}; + +const generateTick = (type, tickType, source) => { + const tick = tickMap[type][tickType]; + return { + mark: 'tick', + source, + encoding: { + angle: 'name', + color: { + value: () => tick.stroke + } + }, + interactive: false, + interpolate: 'catmullRom', + encodingTransform: (points) => { + points.forEach((point) => { + point.update.radius0 = point.update.radius + tick.outer; + point.update.radius = tick.inner; + point.style['stroke-width'] = tick.width; + point.style['stroke-linecap'] = 'round'; + point.style['stroke-opacity'] = '1'; + }); + return points; + } + }; +}; + +window.canvas = env.canvas() + .data(rootData) + .rows([]) + .columns([]) + .height(500) + .width(1200) + .config({ + axes: { + radius: { + range: range => [range[0], range[1] - 15] + } + } + }) + .transform({ + bigTicks: dm => dm.select(fields => fields.name.value % 5 == 0), + smallTicks: dm => dm.select(fields => fields.name.value % 5 !== 0), + tickHours: dm => dm.select(fields => fields.name.value === `${(new Date().getHours() % 12 * 5)}`), + tickMinutes: dm => dm.select(fields => fields.name.value === `${makeZeroSixty(new Date().getMinutes())}`), + tickSeconds: dm => dm.select(fields => fields.name.value === `${makeZeroSixty(new Date().getSeconds())}`) + }) + .config({ + axes: { + radius: () => ({ + range: defRange => [defRange[0], defRange[1] - 20] + }) + } + }) + .layers([ + { + mark: 'text', + encoding: { + angle: 'name', + text: { + field: 'name', + formatter: (val) => { + if (val % 5 === 0) { + // return val / 5; + } return ''; + } + + }, + color: { + value: () => 'white' + } + }, + encodingTransform: (points) => { + points.forEach((point) => { + point.update.radius += 10; + }); + return points; + } + }, + + { + mark: 'tick', + source: 'bigTicks', + encoding: { + angle: 'name', + color: { + value: () => 'white' + } + }, + interpolate: 'catmullRom', + encodingTransform: (points) => { + points.forEach((point) => { + point.update.radius0 = point.update.radius - 40; + point.style['stroke-width'] = '4px'; + point.style['stroke-linecap'] = 'round'; + }); + return points; + } + }, + + // { + // mark: 'tick', + // source: 'smallTicks', + // encoding: { + // angle: 'name', + // color: { + // value: () => 'white' + // } + // }, + // interpolate: 'catmullRom', + // encodingTransform: (points) => { + // points.forEach((point) => { + // point.update.radius0 = point.update.radius - 20; + // }); + // return points; + // } + // }, + generateTick('hours', 'low', 'tickHours'), + generateTick('hours', 'high', 'tickHours'), + generateTick('hours', 'middle', 'tickHours'), + generateTick('minutes', 'low', 'tickMinutes'), + generateTick('minutes', 'high', 'tickMinutes'), + generateTick('minutes', 'middle', 'tickMinutes'), + + { + mark: 'tick', + source: 'tickSeconds', + encoding: { + angle: 'name', + + color: { + value: () => 'white' + } + }, + interpolate: 'catmullRom', + encodingTransform: (points) => { + points.forEach((point) => { + point.update.radius0 = point.update.radius - 45; + point.update.radius = 0; + }); + return points; + } + }, + { + mark: 'arc', + source: dt => dt.select((e, i) => i === 0), + encoding: { + radius: { + value: () => 8 + }, + color: { + value: () => 'white' + } + }, + encodingTransform: (points) => { + points.forEach((point) => { + point.update.radius = 0; + }); + return points; + } + }, + { + mark: 'arc', + source: dt => dt.select((e, i) => i === 0), + encoding: { + radius: { + value: () => 6 + }, + color: { + value: () => '#c41400' + } + }, + encodingTransform: (points) => { + points.forEach((point) => { + point.update.radius = 0; + }); + return points; + } + }, + { + mark: 'arc', + source: dt => dt.select((e, i) => i === 0), + encoding: { + radius: { + value: () => 226 + }, + radius0: { + value: () => 226 - 40 + }, + color: { + value: () => '#ffffff11' + } + }, + interactive: false, + encodingTransform: (points) => { + points.forEach((point) => { + point.radius = 0; + }); + return points; + } + } + + ]) + .mount('#chart'); + +setInterval(() => { + // canvas.transform({ + // bigTicks: dm => dm.select(fields => fields.name.value % 5 === 0), + // smallTicks: dm => dm.select(fields => fields.name.value % 5 !== 0), + // tickHours: dm => dm.select(fields => fields.name.value === `${(new Date().getHours() % 12 * 5)}`), + // tickMinutes: dm => dm.select(fields => fields.name.value === `${makeZeroSixty(new Date().getMinutes())}`), + // tickSeconds: dm => dm.select(fields => fields.name.value === `${makeZeroSixty(new Date().getSeconds())}`) + // }); +}, 500); diff --git a/examples/js/crosstab-sorted.js b/examples/js/crosstab-sorted.js new file mode 100644 index 00000000..f77af0f6 --- /dev/null +++ b/examples/js/crosstab-sorted.js @@ -0,0 +1,73 @@ +/* eslint-disable */ + +(function () { + let env = window.muze(); + const DataModel = window.muze.DataModel; + + d3.json('/data/cars.json', (data) => { + let jsonData = data, + schema = [{ + name: 'Name', + type: 'dimension' + }, { + name: 'Maker', + type: 'dimension' + }, { + name: 'Miles_per_Gallon', + type: 'measure' + }, { + name: 'Displacement', + type: 'measure' + }, { + name: 'Horsepower', + type: 'measure' + }, { + name: 'Weight_in_lbs', + type: 'measure' + }, { + name: 'Acceleration', + type: 'measure' + }, { + name: 'Origin', + type: 'dimension' + }, { + name: 'Cylinders', + type: 'dimension' + }, { + name: 'Year', + type: 'dimension', + subtype: 'temporal', + format: '%Y-%m-%d' + }]; + window.dm = new DataModel(jsonData, schema); + // const dm2 = dm.sort([ + // ['Origin', 'desc'], + // ]); + const canvas = env.canvas(); + + canvas + .data(dm) + .width(550) + .height(500) + // .columns(['Horsepower', 'Origin', 'Maker']) + // .rows(['Origin', 'Year', 'Maker']) + .rows(['Year', 'Origin']) + // .rows(['Maker', 'Year']) + .columns(['Horsepower']) + // .detail(['Name']) + .mount('#chart') + .config({ + showHeaders: true, + sort: { + Year: 'desc', + Origin: 'desc' + }, + axes: { + x: { + name: 'aaa' + } + } + }) + }); +}()); + diff --git a/examples/js/dual-axis-domain.js b/examples/js/dual-axis-domain.js new file mode 100644 index 00000000..d5b890af --- /dev/null +++ b/examples/js/dual-axis-domain.js @@ -0,0 +1,92 @@ +/* eslint-disable */ + +(function () { + let env = window.muze(); + const DataModel = window.muze.DataModel; + + d3.json('/data/cars.json', (data) => { + const schema = [{ + name: 'Name', + type: 'dimension' + }, { + name: 'Maker', + type: 'dimension' + }, { + name: 'Miles_per_Gallon', + type: 'measure' + }, { + name: 'Displacement', + type: 'measure' + }, { + name: 'Horsepower', + type: 'measure' + }, { + name: 'Weight_in_lbs', + type: 'measure' + }, { + name: 'Acceleration', + type: 'measure' + }, { + name: 'Origin', + type: 'dimension' + }, { + name: 'Cylinders', + type: 'dimension' + }, { + name: 'Year', + type: 'dimension', + subtype: 'temporal', + format: '%Y-%m-%d' + }]; + const dm = new DataModel(data, schema); + const canvas = env.canvas(); + + canvas + .columns(['Displacement', 'Acceleration', 'Origin']) + .rows(['Cylinders']) + .minUnitHeight(10) + .minUnitHeight(10) + .width(1000) + .height(400) + .data(dm) + .mount('#chart') + .config({ + axes: { + x: function (rowIndex, columnIndex, context) { + console.log(context); + if (context.facetFields[0][0] === 'Origin' && context.facetFields[1][0] === 'USA') { + return { + tickFormat: (d) => `${d}K`, + } + } + // Apply to all y-axes + return { + // name: 'hello world', + tickFormat: (d) => `${d / 1000}K`, + }; + } + } + }); + + setTimeout(() => { + canvas + .config({ + axes: { + x: function (rowIndex, columnIndex, context) { + // Update only one axis + // Using any of the below if statements + // if (rowIndex === 1 && columnIndex === 0) {} OR + if (context.axisFields[0] === 'Displacement' && context.facetFields[1][0] === 'USA') { + console.log(context); + return { + domain: [0, 14000], + name: 'New Name' + }; + } + return null; + }, + } + }); + }, 2000); + }); +})(); diff --git a/examples/js/label-placement.js b/examples/js/label-placement.js index 2a9922a9..58251698 100644 --- a/examples/js/label-placement.js +++ b/examples/js/label-placement.js @@ -60,8 +60,8 @@ d3.json('../data/cars.json', (data) => { .width(600) .height(400) // @preamble_end - // DataModel instance is created from https://www.charts.com/static/cars.json data, - // https://www.charts.com/static/cars-schema.json schema and assigned to variable dm. + // DataModel instance is created from https://muzejs.org/static/cars.json data, + // https://muzejs.org/static/cars-schema.json schema and assigned to variable dm. // This is part view of the whole code. Click on copy icon to copy the whole code. .data(dm) .layers([ diff --git a/examples/js/lineCrossTab.js b/examples/js/lineCrossTab.js new file mode 100644 index 00000000..4faca58a --- /dev/null +++ b/examples/js/lineCrossTab.js @@ -0,0 +1,265 @@ +/* eslint-disable */ +(function () { + let env = muze(); + let dataModel = muze.DataModel, + share = muze.Operators.share, + html = muze.Operators.html; + const require = muze.utils.require; + function convertToDollar(data, decimalValue){ + if (data > 1000 && data < 1000000) return `$${(data / 1000).toFixed(decimalValue)}K` + if (data >= 1000000) return `$${(data / 1000000).toFixed(decimalValue)}M` + return `$${data.toFixed(decimalValue)}` + } + + d3.json('../data/lineCrossTab.json', (data) => { + const jsonData = data, + schema = [{ + "name": "date", + "type": "dimension", + "subtype": "temporal" + }, { + "name": "value", + "type": "measure", + "defAggFn": "avg" + + }, { + "name": "quarter", + "type": "dimension" + }, { + "name": "quarterYear", + "type": "dimension" + } + ] + + let rootData = new dataModel(data, schema); + rootData = rootData.calculateVariable({ + name: 'estimatedParam', + type: 'dimension' + }, ['quarterYear', (quarterYear) => { + if(quarterYear.indexOf('2019') !== -1){ + return 'ESTIMATED' + } + return; + }]); + const quartileReference = { + q1:{ + min:0, + max:0, + minKey:0, + maxKey:0 + }, + q2:{ + min:0, + max:0, + minKey:0, + maxKey:0 + }, + q3:{ + min:0, + max:0, + minKey:0, + maxKey:0 + }, + q4:{ + min:0, + max:0, + minKey:0, + maxKey:0 + }, + }; + const quarterYearGrouped = rootData.groupBy(['quarterYear']); + const dataChange = quarterYearGrouped.getData().data; + for(let i in dataChange){ + let index = dataChange[i][1].indexOf(2019); + let str = dataChange[i][1].substr(0,2).toLowerCase(); + if(quartileReference[str].max < Math.round(dataChange[i][0])){ + quartileReference[str].max = Math.round(dataChange[i][0]) + quartileReference[str].maxKey = dataChange[i][1]; + } + if(quartileReference[str].min > Math.round(dataChange[i][0]) || quartileReference[str].min === 0){ + quartileReference[str].min = Math.round(dataChange[i][0]) + quartileReference[str].minKey = dataChange[i][1]; + } + } + rootData = rootData.calculateVariable({ + name: 'colorParam', + type: 'dimension' + }, ['quarterYear', (quarterYear) => { + let index = quarterYear.indexOf(2019); + if(index !== -1){ + return 'average'; + } else{ + // console.log(index, quarterYear.substr(0,2).toLowerCase(), quartileReference[str].min) + let str = quarterYear.substr(0,2).toLowerCase(); + if(quartileReference[str].minKey === quarterYear) + return 'bad'; + else if(quartileReference[str].maxKey === quarterYear) + return 'great'; + return 'normal'; + } + }]); + env = env.data(rootData).minUnitWidth(40); + let mountPoint = document.getElementById('chart'); + window.canvas = env.canvas(); + canvas + .rows(['value']) + .columns([[],[ 'date', 'quarterYear']]) + .data(rootData.select((fields) => fields.quarter.value === 'Q4')) + .width(850) + .height(600) + .detail(['quarterYear']) + .transform({ + avg: (dm) => dm.groupBy(['']), + estd :(dt) => dt.select(fields => fields.estimatedParam.value === 'ESTIMATED').groupBy(['estimatedParam']) + }) + .layers([{ + mark: 'line', + className: 'line-plot-item', + interpolate: 'catmullRom', + }, { + mark: 'text', + className: 'text-layer', + source: 'avg', + encoding: { + x: { field: null }, + text: { + field: 'value', + formatter: val => Math.round(val) + }, + color: { + value: () => '#fff' + } + }, + encodingTransform: require('layers', ['line-0', (lineLayer) => { + return (points, layerInst, dependencies) => { + const domain = lineLayer.data().getFieldspace().fieldsObj().value.domain(); + const maxVal = domain[1]; + const maxYPos = lineLayer.axes().y.getScaleValue(maxVal); + const measurement = layerInst.measurement(); + points[0].update.x = measurement.width / 2; + const smartLabel = dependencies.smartLabel; + const textHeight = smartLabel.getOriSize(points[0].text).height; + points[0].update.y = maxYPos - textHeight / 2; + points[0].text = convertToDollar(points[0].text, 2); + return points; + } + }]) + },{ + mark: 'text', + className: 'estimatedText', + encoding: { + x: { field: null }, + text: { + field: 'estimatedParam', + }, + color: { + value: () => '#fff' + } + }, + source: 'estd', + encodingTransform: (points, layer, dependencies) => { + let width = layer.measurement().width; + let height = layer.measurement().height; + let smartLabel = dependencies.smartLabel; + for (let i = 0; i < points.length; i++) { + points[i].update.x = width-40; + points[i].update.y = height-5; + points[i].color = '#fff'; + points[i].style['font-weight'] = 'bold'; + } + return points; + }, + calculateDomain: false + }]) + .color({ + field: 'colorParam', + domain: ['normal', 'average', 'great', 'bad'], + range: ['#33adff', 'yellow', 'green', 'red'] + + }) + .config({ + legend: { + color: { + show: false + } + }, + border:{ + color: 'rgb(239, 239, 239)', + width: 1 + }, + axes: { + x: { show: false }, + y: { + tickFormat: (d) => { + return convertToDollar(d, 1); + }, + numberOfTicks: 5, + showAxisName: false + } + }, + interaction: { + tooltip: { + arrow: { + disabled: true + }, + offset: { + x: -85 + }, + mode: 'fragmented', + formatter: (dataModel, context) => { + const tooltipData = dataModel.getData().data; + const fieldConfig = dataModel.getFieldsConfig(); + let tooltipContent = ''; + tooltipData.forEach((dataArray) => { + const date = fieldConfig.date.index; + const value = fieldConfig.value.index; + const quarterYear = fieldConfig.quarterYear.index; + tooltipContent += `

${dataArray[quarterYear]}

`; + tooltipContent += `

Average Value: ${dataArray[value]}

`; + }); + return html`${tooltipContent}`; + } + } + } + }) + .title('Q4 comparison from 2010 until 2019', { position: "top", align: "center", color: 'white' }) + .mount(mountPoint); + + async function wait(ms) { + return new Promise(resolve => { + setTimeout(resolve, ms); + }); + }; + function quartile1(){ + canvas.data(rootData.select((fields) => fields.quarter.value === 'Q1')) + .title('Q1 comparison from 2010 until 2019', { position: "top", align: "center", color: 'white' }); + } + function quartile2(){ + canvas.data(rootData.select((fields) => fields.quarter.value === 'Q2')) + .title('Q2 comparison from 2010 until 2019', { position: "top", align: "center", color: 'white' }); + } + function quartile3(){ + canvas.data(rootData.select((fields) => fields.quarter.value === 'Q3')) + .title('Q3 comparison from 2010 until 2019', { position: "top", align: "center", color: 'white' }); + } + function quartile4(){ + canvas.data(rootData.select((fields) => fields.quarter.value === 'Q4')) + .title('Q4 comparison from 2010 until 2019', { position: "top", align: "center", color: 'white' }); + } + async function renderChart() { + while(1){ + quartile1(); + await wait(5000); + quartile2(); + await wait(5000); + quartile3(); + await wait(5000); + quartile4(); + await wait(5000); + } + } + renderChart(); + + + }) +})() \ No newline at end of file diff --git a/examples/js/overview-zoom.js b/examples/js/overview-zoom.js new file mode 100644 index 00000000..31d32abe --- /dev/null +++ b/examples/js/overview-zoom.js @@ -0,0 +1,109 @@ +/* eslint-disable */ +let i = 0; +for (i = 0; i < 2; i++) { + const newDomNode = document.createElement('div'); + newDomNode.id = `chart${i + 1}`; + document.getElementById('chart').appendChild(newDomNode); +} + +d3.csv('../data/sp500.csv', (data) => { + const schema = [ + { + name: 'date', + type: 'dimension', + subtype: 'temporal', + format: '%b %e %Y' + }, + { + name: 'price', + type: 'measure' + } + ]; + + let env = window.muze(); + const DataModel = window.muze.DataModel; + + const rootData = new DataModel(data, schema) + // .select(fields=>{ + // const date = new Date(fields.date.value); + // const year = date.getFullYear(); + // const month = date.getMonth(); + // return year === 2002 && (month === 5 || month === 6); + // // return fields.date.value >new Date('2002', 5, 1).getTime() && fields.date.value < new Date('2002', 6, 1).getTime() + // }); + + env = env.data(rootData); + const chartConf = { + axes: { + x: { + nice: false, + name: 'Date', + // tickFormat: (a, val)=>{ + // return `${new Date(val).getFullYear()}-akdnjaskjdn` + // } + }, + y: { + name: 'Price' + } + } + }; + + const detail = env.canvas() + .rows(['price']) + .columns(['date']) + .width(550) + .height(400) + .config(chartConf) + .layers([{ + // mark: 'area', + transition: { + duration: 0 + } + }]) + .title('Select a range from the bottom chart to get a detailed view for that range') + .mount('#chart1'); +window.detail = detail + const overview = env.canvas() + .rows(['price']) + .columns(['date']) + .width(550) + .height(160) + .config(chartConf) + .layers([{ + // mark: 'area', + interpolate: 'catmullRom' + }]) + .mount('#chart2'); + overview.once('canvas.animationend').then(()=>{ + // overview.firebolt().dispatchBehaviour('filter', { + // criteria:{ + // date: [new Date('2002', 5, 1).getTime(),new Date('2002', 6, 1).getTime()] + // } + // }) + }) + const overview2= env.canvas() + .rows(['price']) + .data(rootData.select((f,i)=>i<=12)) + .columns(['date']) + .width(550) + .height(160) + .config(chartConf) + .layers([{ + // mark: 'area', + interpolate: 'catmullRom' + }]) + .mount('#chart2'); + overview.once('canvas.animationend').then(()=>{ + // overview.firebolt().dispatchBehaviour('filter', { + // criteria:{ + // date: [new Date('2002', 5, 1).getTime(),new Date('2002', 6, 1).getTime()] + // } + // }) + }) + + muze.ActionModel + .for(detail, overview).enableCrossInteractivity() + .for(overview).registerPropagationBehaviourMap({ + brush: 'filter' + }); +}); diff --git a/examples/js/random-temporal.js b/examples/js/random-temporal.js new file mode 100644 index 00000000..04657313 --- /dev/null +++ b/examples/js/random-temporal.js @@ -0,0 +1,105 @@ +/* eslint-disable */ +let i = 0; +for (i = 0; i < 2; i++) { + const newDomNode = document.createElement('div'); + newDomNode.id = `chart${i + 1}`; + document.getElementById('chart').appendChild(newDomNode); +} + +const durationSecond = 1000; +const durationMinute = durationSecond * 60; +const durationHour = durationMinute * 60; +const durationDay = durationHour * 24; +const durationWeek = durationDay * 7; +const durationMonth = durationDay * 30; +const durationYear = durationDay * 365; +const timeDurations = { + millisecond: 1, + second: durationSecond, + minute: durationMinute, + hour: durationHour, + week: durationWeek, + day: durationDay, + month: durationMonth, + year: durationYear +}; + +function generateDate (interval, points) { + const timeMillisecondsArr = []; + let newTime = 0; + for (let i = 0; i < points; i++) { + newTime += timeDurations[interval]; + timeMillisecondsArr.push({ + dateTime: newTime, + profit: Math.floor(Math.random() * 1000 + 1) + }); + } + return timeMillisecondsArr; +} + +// d3.json('../data/test.json', (data) => { + const schema = [ + { + name: 'dateTime', + type: 'dimension', + subtype: 'temporal', + }, + { + name: 'profit', + type: 'measure' + } + ]; + + let env = window.muze(); + const DataModel = window.muze.DataModel; + + + const chartConf = { + axes: { + x: { + nice: false, + name: 'dateTime' + }, + y: { + name: 'profit' + } + } + }; + // Object.keys(timeDurations).forEach(e=>{ + + window.rootData = new DataModel(generateDate('year',Math.floor(Math.random()* 10000)+1), schema) + + const canvas = env.canvas().data(rootData) + .rows(['profit']) + .columns(['dateTime']) + .width(4100) + .height(400) + .config(chartConf) + .layers([{ + // mark: 'area', + transition: { + duration: 0 + } + }]) + .title('Select a range from the bottom chart to get a detailed view for that range') + .mount(d3.select('#chart1').append('div').node()); + // }) + + // const overview = env.canvas() + // .rows(['profit']) + // .columns(['dateTime']) + // .width(750) + // .height(160) + // .config(chartConf) + // .layers([{ + // // mark: 'area', + // // interpolate: 'catmullRom' + // }]) + // .mount('#chart2'); + + // muze.ActionModel + // .for(detail, overview).enableCrossInteractivity() + // .for(overview).registerPropagationBehaviourMap({ + // brush: 'filter' + // }); +// }); \ No newline at end of file diff --git a/examples/js/sample2.js b/examples/js/sample2.js index 9263c9bf..b3f4841e 100644 --- a/examples/js/sample2.js +++ b/examples/js/sample2.js @@ -1,94 +1,70 @@ -/* global muze, d3 */ - -let env = muze(); -const SpawnableSideEffect = muze.SideEffects.standards.SpawnableSideEffect; +/* eslint-disable */ +const env = muze(); const DataModel = muze.DataModel; -d3.json('../data/cars.json', (data) => { - const jsonData = data; - const schema = [ - { - name: 'Name', - type: 'dimension' - }, - { - name: 'Maker', - type: 'dimension' - }, - { - name: 'Miles_per_Gallon', - type: 'measure', - defAggFn: 'avg' - }]; - - const dm = new DataModel(res, schema); - canvas - .data(dm) - .width(600) - .height(400) - .config({ - axes: { y: { name: 'Value in percentage' } } - }) - .rows(['value']) /* Plots against y-axis + provides panel split */ - .columns(['Year']) /* Plots against x-axis */ - .color({ - field: 'Media', - range: ['red', 'orange', 'yellow', '#33b5e91', '#31a6ea', 'grey', 'red', 'green'] - }) - .layers([ - { - mark: 'line', - connectNullData: true - }, - { mark: 'point' } - ]) - .title('Shifts of teenagers in social media usage') - .mount('#chart-container'); +d3.json('../../data/cars.json', (data) => { + let jsonData = data; + const schema = [{ + name: 'Name', + type: 'dimension' + }, + { + name: 'Maker', + type: 'dimension' + }, + { + name: 'Miles_per_Gallon', + type: 'measure' + }, - // Create a new variable which will keep count of cars per cylinder for a particular origin - const rootData = dataModel.calculateVariable( - { - name: 'CountVehicle', - type: 'measure', - defAggFn: 'count', // When ever aggregation happens, it counts the number of elements in the bin - numberFormat: val => parseInt(val, 10) - }, - ['Name', () => 1] - ); + { + name: 'Displacement', + type: 'measure' + }, + { + name: 'Horsepower', + type: 'measure' + }, + { + name: 'Weight_in_lbs', + type: 'measure' + }, + { + name: 'Acceleration', + type: 'measure', + // numberFormat: (val) => "$" + val + }, + { + name: 'Origin', + type: 'dimension' + }, + { + name: 'Cylinders', + type: 'dimension' + }, + { + name: 'Year', + type: 'dimension', + subtype: 'temporal', + format: '%Y-%m-%d' + } + ]; - env = env - .data(rootData) - .minUnitHeight(10) - .minUnitWidth(10); + // jsonData = [ + // { Origin: "India", Year: "2018-02-22", Acceleration: 1000 }, + // { Origin: "India", Year: "2018-03-12", Acceleration: 2000 }, + // { Origin: "India", Year: "2018-04-01", Acceleration: 3000 }, + // { Origin: "Japan", Year: "2018-02-22", Acceleration: 4000 }, + // { Origin: "Japan", Year: "2018-03-12", Acceleration: 2000 }, + // { Origin: "Japan", Year: "2018-04-01", Acceleration: 4000 }, + // ]; - const canvas = env - .canvas(); - window.canvas = canvas - .data(rootData) - .minUnitHeight(30) - .minUnitWidth(10) - .width(1200) - .height(800) - .rows(['Origin']) - /* Year is a temporal field */ - .title('asdsd') - .subtitle('asdasd') - // .config({ - // gridLines: { - // show: false - // } - // }) - .layers([{ - mark: 'arc', - encoding: { - angle: 'Year', - radius: 'Acceleration' - } - }]) - .color('Origin') - .size('Horsepower') - // .detail(['Maker']) + let rootData = new DataModel(jsonData, schema); + // rootData = rootData.groupBy(["Origin", "Year"], { + // Acceleration: "avg" + // }); - .columns(['Cylinders']) /* Attaching the canvas to DOM element */ - .mount('#chart2'); + canvas = env.canvas().data(rootData).rows(['Acceleration']).columns([['Year'], ['Year']]).data(rootData).height(400).width(400).color('Origin').config({ + legend: { position: 'bottom' }}).mount('#chart') }); + diff --git a/examples/js/sample3.js b/examples/js/sample3.js index bc75196b..2b8f117b 100644 --- a/examples/js/sample3.js +++ b/examples/js/sample3.js @@ -2,8 +2,18 @@ const env = muze(); const DataModel = muze.DataModel; +function shuffleArray(array) { + for (var i = array.length - 1; i > 0; i--) { + var j = Math.floor(Math.random() * (i + 1)); + var temp = array[i]; + array[i] = array[j]; + array[j] = temp; + } +} + + d3.json('../../data/cars.json', (data) => { - const jsonData = data; + let jsonData = data; const schema = [{ name: 'Name', type: 'dimension' @@ -19,7 +29,8 @@ d3.json('../../data/cars.json', (data) => { { name: 'Displacement', - type: 'measure' + type: 'measure', + defAggFn: 'min' }, { name: 'Horsepower', @@ -31,11 +42,13 @@ d3.json('../../data/cars.json', (data) => { }, { name: 'Acceleration', - type: 'measure' + type: 'measure', + numberFormat: (val) => "$" + val }, { name: 'Origin', - type: 'dimension' + type: 'dimension', + displayName: "Origin2" }, { name: 'Cylinders', @@ -49,19 +62,25 @@ d3.json('../../data/cars.json', (data) => { } ]; - let rootData = new DataModel(jsonData, schema); - rootData = rootData.groupBy(["Origin", "Year"], { - Acceleration: "avg" - }) + // function shuffleArray(array) { + // for (var i = array.length - 1; i > 0; i--) { + // var j = Math.floor(Math.random() * (i + 1)); + // var temp = array[i]; + // array[i] = array[j]; + // array[j] = temp; + // } + // } + // shuffleArray(jsonData) + let rootData = new DataModel(jsonData, schema) + // .select(fields=>fields.Year.value === '1972-01-01'); - env.canvas() - .data(rootData) - .rows(['Acceleration']) - .columns(["Year"]) - .color("Origin") - .height(500) - .width(600) - .title("Year wise average car Acceleration") - .mount('#chart'); -}); + var rows = ['Acceleration', 'Horsepower', 'Weight_in_lbs'], + columns = rows.reverse(); + const canvas = env.canvas().columns(['Origin', 'Cylinders', 'Acceleration']).rows(columns).data(rootData).height(400).width(400).title('The car acceleration respective to origin', { position: 'bottom', align: 'center' }).color({ + field: 'Origin' + }).mount('#chart').once('canvas.animationend').then(function (client) { + var element = document.getElementById('chart'); + element.classList.add('animateon'); + }); +}); diff --git a/examples/js/sample4.js b/examples/js/sample4.js index 54343da4..071e3686 100644 --- a/examples/js/sample4.js +++ b/examples/js/sample4.js @@ -27,7 +27,7 @@ const canvas = env .canvas() .data(rootData) - .rows(['Acceleration']) + .rows([['Acceleration']]) .columns(['Year']) .color("Origin") .width(600) diff --git a/examples/js/sample5.js b/examples/js/sample5.js index 2f8f0306..6bf4dd77 100644 --- a/examples/js/sample5.js +++ b/examples/js/sample5.js @@ -66,29 +66,65 @@ d3.json('../data/cars.json', (data) => { env.data(rootData); // line chart - env.canvas() - .rows(['CountVehicle']) - .columns(['Year']) - .data(rootData) + window.canvas = env.canvas() + .columns(['Origin', 'Year']) + .rows(['Horsepower']) .width(450) .height(300) + // .layers([{ + // mark: 'line' + // }]) .title('Line Chart') .mount('#chart'); // stacked bar chart env.canvas() - .rows(['CountVehicle']) - .columns(['Year']) - .data(rootData) + .rows([]) + .columns([]) .width(600) .color('Origin') .layers([{ - mark: 'bar', + mark: 'arc', + encoding: { + angle: 'Maker', + radius: 'Acceleration' + }, transform: { type: 'stack' } + }, { + mark: 'text', + encoding: { + angle: 'Maker', + radius: 'Acceleration', + text: { + field: 'Acceleration', + formatter: (d) => d.toFixed(2) + }, + rotation: { + value: () => 40 + } + } + }, { + mark: 'tick', + encoding: { + angle: 'Maker', + radius0: { + value: (d) => { + return d.radius + 20; + } + }, + radius: 'Acceleration', + text: { + field: 'Acceleration', + formatter: (d) => d.toFixed(2) + }, + rotation: { + value: () => 40 + } + } }]) - .height(300) + .height(500) .title('Stacked Bar Chart') .mount('#chart2'); @@ -96,7 +132,6 @@ d3.json('../data/cars.json', (data) => { env.canvas() .rows(['Miles_per_Gallon']) .columns(['Year']) - .data(rootData) .width(1050) .color('Origin') .layers([{ diff --git a/examples/js/stackBarChart.js b/examples/js/stackBarChart.js index b908d982..83e66011 100644 --- a/examples/js/stackBarChart.js +++ b/examples/js/stackBarChart.js @@ -1,68 +1,60 @@ +/* global d3, muze */ d3.json('../data/cars.json', (data) => { - schema = [ - { - name: 'Name', - type: 'dimension' - }, - { - name: 'Maker', - type: 'dimension' - }, - { - name: 'Miles_per_Gallon', - type: 'measure' - }, - - { - name: 'Displacement', - type: 'measure' - }, - { - name: 'Horsepower', - type: 'measure' - }, - { - name: 'Weight_in_lbs', - type: 'measure' - }, - { - name: 'Acceleration', - type: 'measure' - }, - { - name: 'Origin', - type: 'dimension' - }, - { - name: 'Cylinders', - type: 'dimension' - }, - { - name: 'Year', - type: 'dimension', - subtype: 'temporal', - format: '%Y-%m-%d' - - } - + const schema = [{ + name: 'Name', + type: 'dimension' + }, + { + name: 'Maker', + type: 'dimension' + }, + { + name: 'Miles_per_Gallon', + type: 'measure' + }, + { + name: 'Displacement', + type: 'measure' + }, + { + name: 'Horsepower', + type: 'measure' + }, + { + name: 'Weight_in_lbs', + type: 'measure' + }, + { + name: 'Acceleration', + type: 'measure' + }, + { + name: 'Origin', + type: 'dimension' + }, + { + name: 'Cylinders', + type: 'dimension' + }, + { + name: 'Year', + type: 'dimension', + subtype: 'temporal', + format: '%Y-%m-%d' + } ]; - const DataModel = muze.DataModel; const rootData = new DataModel(data, schema); - const env = muze(); const canvas = env.canvas(); - canvas - .rows(['Acceleration']) // CountVehicle goes in y axis - .columns(['Maker']) // Cylinders goes in x-axis - .color({ - field: 'Acceleration', - step: true - }) - .shape('Name') - .size('Name') - + .rows(['Acceleration']) // Acceleration goes in y axis + .columns(['Maker']) // Maker goes in x-axis + .color({ + field: 'Acceleration', + stops: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 17, 40, 35, 38, 27, 56, 73, 45, 67, 48, 120, 130, 110, + 115, 125, 567, 234, 123, 456, 67, 90, 150, 670, 700] + }) .data(rootData) .layers({ // Draw a bar plot, by default stack transform is used Acceleration: { @@ -78,5 +70,10 @@ d3.json('../data/cars.json', (data) => { .height(500) .title('Stacked bar chart', { position: 'top', align: 'right' }) .subtitle('Count of cars per cylinder per origin', { position: 'top', align: 'right' }) - .mount('#chart'); // Set the chart mount point + .mount('#chart'); // Set the chart mount point + + setTimeout(() => { + canvas.title('Updated Title') + .subtitle('Updated Subtitle'); + }, 5000); }); diff --git a/examples/js/tickFix.js b/examples/js/tickFix.js new file mode 100644 index 00000000..53e8c3a9 --- /dev/null +++ b/examples/js/tickFix.js @@ -0,0 +1,66 @@ +/* global muze, d3 */ + +const env = muze(); +const SpawnableSideEffect = muze.SideEffects.standards.SpawnableSideEffect; +const DataModel = muze.DataModel; + +d3.csv('../data/bank.csv', (data) => { + const schema = [ + { + name: 'age', + type: 'dimension' + }, + { + name: 'job', + type: 'dimension' + }, + { + name: 'marital', + type: 'dimension' + }, + { + name: 'education', + type: 'dimension' + }, + { + name: 'balance', + type: 'measure' + } + ]; + const env = muze(); + const DataModel = muze.DataModel; + + const rootData = new DataModel(data, schema); + + env.canvas() + .width(600).height(500).layers([{ + mark: 'bar' + }]).rows(['balance']).columns(['age']).data(rootData.groupBy(['age', 'marital'], { + balance: 'min' + }).sort([['age']])).color('marital') + .config({ + axes: { + x: { + tickFormat: val => `${val}sadasuiahdfoiuaGDFILUASBFIUasbdkausbdiaSBDLIAGSB` + } + } + }) + .mount('#chart'); +}); + + // setTimeout(() => { + // canvas.layers([{ + // mark: 'bar' + // }]); + // setTimeout(() => { + // canvas.layers([{ + // mark: 'point', + // encoding: { + // y: 'Horsepower', + // color: { + // value: '#000' + // } + // } + // }]); + // }, 5000); + // }, 5000); diff --git a/examples/js/twitter-purge.js b/examples/js/twitter-purge.js new file mode 100644 index 00000000..f1528f21 --- /dev/null +++ b/examples/js/twitter-purge.js @@ -0,0 +1,134 @@ +function _taggedTemplateLiteral (strings, raw) { return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); } + +const _templateObject = _taggedTemplateLiteral([''], ['']); + +const style = 'body,\nhtml {\n font-family: \'Source Sans Pro\', "Helvetica Neue", Helvetica, Arial, sans-serif;\n width: 100%;\n height: 100%;\n}\n\n.chart {\n margin-left: 20px;\n}\n\n.muze-grid-lines path {\n opacity: 0.1;\n}\n\n.muze-grid .muze-text-cell {\n font-size: 12px !important;\n}\n\n.muze-layer-text text {\n alignment-baseline: central;\n}\n\n.chart-div {\n float: left;\n padding: 15px;\n}\n\n.muze-layer-point {\n fill-opacity: 1 !important;\n}\n\n#chart-container {\n overflow-y: auto !important;\n text-align: center;\n padding: 0px 10px 10px 10px;\n height: auto;\n min-height: 350px;\n}\n\n.twitter-link {\n text-decoration: none;\n color: #3182bd;\n font-weight: 700;\n}\n\n.twitter-link:hover {\n text-decoration: underline;\n}\n\n.chart-header {\n font-size: 24px !important;\n margin-bottom: 10px;\n color: #5f5f5f !important;\n}'; +const node = document.createElement('style'); +node.innerHTML = style; +document.body.appendChild(node); + +d3.json('../data/twitter-purge.json', (data) => { + // load data and schema from url + const schema = [{ + name: 'user', + type: 'dimension' + }, { + name: 'followers', + type: 'measure', + defAggFn: 'avg' + }, { + name: 'time', + type: 'dimension', + subtype: 'temporal' + }]; + const users = ['aplusk', 'barackobama', 'c_nyakundih', 'd_copperfield', 'elonmusk', 'hilaryr', 'hillaryclinton', 'iamcardib', 'jack', 'jashkenas', 'johnleguizamo', 'kathyireland', 'katyperry', 'kyliejenner', 'lucaspeterson', 'marthalanefox', 'michaeldell', 'nickconfessore', 'nickywhelan', 'nytimes', 'paulhollywood', 'paulkagame', 'poppy', 'porszag', 'rambodonkeykong', 'realalexjones', 'realdonaldtrump', 'samiralrifai', 'seanhannity', 'senjohnmccain', 'taylorswift13', 'twitter']; + const env = window.muze(); + const DataModel = window.muze.DataModel; + const html = muze.Operators.html; + const require = muze.utils.require; + + const _formatter = function _formatter (val) { + if (val > 1000000) { + return `${(val / 1000000).toFixed(2)} M`; + } else if (val > 1000) { + return `${(val / 1000).toFixed(2)} K`; + } return val.toFixed(2); + }; + + const rootData = new DataModel(data, schema); + const canvases = []; + + const div = document.createElement('div'); + div.className = 'chart-header muze-header-cell'; + div.innerHTML = 'Charting the Great Twitter Bot Purge of 2018 (A Trellis Example)'; + document.getElementById('chart').appendChild(div); + + users.forEach((user, i) => { + const newDomNode = document.createElement('div'); + newDomNode.className = 'chart-div'; + newDomNode.id = `chart${i + 1}`; + newDomNode.style.overflow = 'auto'; + document.getElementById('chart').appendChild(newDomNode); + + const canvas = env.canvas().rows([[], ['followers']]).columns(['time']).data(rootData.select(f => f.user.value === user)).width(250).height(200).transform({ + lastPoint: function lastPoint (dt) { + const dataLength = dt.getData().data.length; + return dt.select((fields, i) => { + if (i === dataLength - 1) { + return true; + } return false; + }); + } + }).layers([{ + mark: 'line', + name: 'lineLayer' + }, { + mark: 'point', + source: 'lastPoint' + }, { + mark: 'text', + encoding: { + text: { + field: 'followers', + formatter: function formatter (val) { + return _formatter(val); + } + }, + color: { + value: function value () { + return '#858585'; + } + } + }, + encodingTransform: require('layers', ['lineLayer', function () { + return function (points, layer, dep) { + const width = layer.measurement().width; + const height = layer.measurement().height; + const smartlabel = dep.smartLabel; + + return points.map((point) => { + const size = smartlabel.getOriSize(point.text); + if (point.update.y + size.height > height) { + point.update.y -= size.height / 2; + } else { + point.update.y += size.height / 2; + } + if (point.update.x + size.width / 2 > width) { + point.update.x -= size.width / 2 + 1; + } + return point; + }); + }; + }]), + source: 'lastPoint' + }]).config({ + border: { + showValueBorders: { + right: false, + bottom: false + } + }, + gridLines: { + y: { + show: false + } + }, + axes: { + y: { + tickFormat: function tickFormat (val, parsedVal, j, labels) { + if (j === 0 || j === labels.length - 1) { + return _formatter(val); + } return ''; + }, + showAxisName: false + }, + x: { + show: false + } + } + }) + .title('The car acceleration respective to origin', { position: 'bottom', align: 'center' }) + .subtitle(html(_templateObject, user, user), { position: 'bottom', align: 'center' }) + .mount(`#chart${i + 1}`); + }); +}); diff --git a/karma.conf.tpl.js b/karma.conf.tpl.js new file mode 100644 index 00000000..db74a2ee --- /dev/null +++ b/karma.conf.tpl.js @@ -0,0 +1,102 @@ +module.exports = function (config) { + config.set({ + basePath: './', + frameworks: ['mocha', 'chai'], + files: [ + 'packages/<%= packageName %>/src/**/*.spec.js' + ], + webpack: { + devtool: 'inline-source-map', + module: { + rules: [ + { + test: /\.(s*)css$/, + use: [ + { + loader: 'style-loader', + options: { singleton: true } + }, + { loader: 'css-loader' }, + { loader: 'sass-loader' } + ], + exclude: /node_modules/ + }, + { + test: /\.js$|\.jsx$/, + use: { + loader: 'istanbul-instrumenter-loader', + options: { esModules: true } + }, + enforce: 'pre', + exclude: /node_modules|src\/renderer\/|\.spec\.js$/ + } + ] + } + }, + webpackMiddleware: { + noInfo: true, + stats: { + chunks: false + } + }, + preprocessors: { + 'packages/<%= packageName %>/src/**/*.spec.js': ['webpack'] + }, + exclude: [ + '**/*.swp' + ], + + coverageIstanbulReporter: { + dir: 'coverage/', + thresholds: { + emitWarning: false, // set to `true` to not fail the test command when thresholds are not met + global: { // thresholds for all files + statements: 80, + lines: 80, + branches: 80, + functions: 80 + }, + each: { // thresholds per file + statements: 80, + lines: 80, + branches: 80, + functions: 80, + overrides: { + 'baz/component/**/*.js': { + statements: 80 + } + } + } + }, + reports: ['html', 'lcov', 'text-summary'], + fixWebpackSourcePaths: true, + reporters: [ + { type: 'text' }, + { type: 'html', subdir: 'report-html', file: 'report.html' }, + { type: 'lcov', subdir: 'report-lcov', file: 'report.txt' } + ] + }, + reporters: ['spec', 'coverage-istanbul'], + specReporter: { + maxLogLines: 5, // limit number of lines logged per test + suppressErrorSummary: true, // do not print error summary + suppressFailed: false, // do not print information about failed tests + suppressPassed: false, // do not print information about passed tests + suppressSkipped: true, // do not print information about skipped tests + showSpecTiming: false // print the time elapsed for each spec + }, + port: 9876, + colors: true, + logLevel: config.LOG_INFO, + autoWatch: false, + browsers: ['ChromeHeadlessNoSandbox'], + customLaunchers: { + ChromeHeadlessNoSandbox: { + base: 'ChromeHeadless', + flags: ['--no-sandbox'] + } + }, + singleRun: true, + concurrency: Infinity + }); +}; diff --git a/package-lock.json b/package-lock.json index 018e7fab..9ea674c0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -31,22 +31,22 @@ } }, "@babel/core": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.2.2.tgz", - "integrity": "sha512-59vB0RWt09cAct5EIe58+NzGP4TFSD3Bz//2/ELy3ZeTeKF6VTD1AXlH8BGGbCX0PuobZBsIzO7IAI9PH67eKw==", + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.4.0.tgz", + "integrity": "sha512-Dzl7U0/T69DFOTwqz/FJdnOSWS57NpjNfCwMKHABr589Lg8uX1RrlBIJ7L5Dubt/xkLsx0xH5EBFzlBVes1ayA==", "dev": true, "requires": { "@babel/code-frame": "^7.0.0", - "@babel/generator": "^7.2.2", - "@babel/helpers": "^7.2.0", - "@babel/parser": "^7.2.2", - "@babel/template": "^7.2.2", - "@babel/traverse": "^7.2.2", - "@babel/types": "^7.2.2", + "@babel/generator": "^7.4.0", + "@babel/helpers": "^7.4.0", + "@babel/parser": "^7.4.0", + "@babel/template": "^7.4.0", + "@babel/traverse": "^7.4.0", + "@babel/types": "^7.4.0", "convert-source-map": "^1.1.0", "debug": "^4.1.0", "json5": "^2.1.0", - "lodash": "^4.17.10", + "lodash": "^4.17.11", "resolve": "^1.3.2", "semver": "^5.4.1", "source-map": "^0.5.0" @@ -70,14 +70,14 @@ } }, "@babel/generator": { - "version": "7.3.0", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.3.0.tgz", - "integrity": "sha512-dZTwMvTgWfhmibq4V9X+LMf6Bgl7zAodRn9PvcPdhlzFMbvUutx74dbEv7Atz3ToeEpevYEJtAwfxq/bDCzHWg==", + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.4.0.tgz", + "integrity": "sha512-/v5I+a1jhGSKLgZDcmAUZ4K/VePi43eRkUs3yePW1HB1iANOD5tqJXwGSG4BZhSksP8J9ejSlwGeTiiOFZOrXQ==", "dev": true, "requires": { - "@babel/types": "^7.3.0", + "@babel/types": "^7.4.0", "jsesc": "^2.5.1", - "lodash": "^4.17.10", + "lodash": "^4.17.11", "source-map": "^0.5.0", "trim-right": "^1.0.1" } @@ -102,25 +102,25 @@ } }, "@babel/helper-call-delegate": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@babel/helper-call-delegate/-/helper-call-delegate-7.1.0.tgz", - "integrity": "sha512-YEtYZrw3GUK6emQHKthltKNZwszBcHK58Ygcis+gVUrF4/FmTVr5CCqQNSfmvg2y+YDEANyYoaLz/SHsnusCwQ==", + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@babel/helper-call-delegate/-/helper-call-delegate-7.4.0.tgz", + "integrity": "sha512-SdqDfbVdNQCBp3WhK2mNdDvHd3BD6qbmIc43CAyjnsfCmgHMeqgDcM3BzY2lchi7HBJGJ2CVdynLWbezaE4mmQ==", "dev": true, "requires": { - "@babel/helper-hoist-variables": "^7.0.0", - "@babel/traverse": "^7.1.0", - "@babel/types": "^7.0.0" + "@babel/helper-hoist-variables": "^7.4.0", + "@babel/traverse": "^7.4.0", + "@babel/types": "^7.4.0" } }, "@babel/helper-define-map": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.1.0.tgz", - "integrity": "sha512-yPPcW8dc3gZLN+U1mhYV91QU3n5uTbx7DUdf8NnPbjS0RMwBuHi9Xt2MUgppmNz7CJxTBWsGczTiEp1CSOTPRg==", + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.4.0.tgz", + "integrity": "sha512-wAhQ9HdnLIywERVcSvX40CEJwKdAa1ID4neI9NXQPDOHwwA+57DqwLiPEVy2AIyWzAk0CQ8qx4awO0VUURwLtA==", "dev": true, "requires": { "@babel/helper-function-name": "^7.1.0", - "@babel/types": "^7.0.0", - "lodash": "^4.17.10" + "@babel/types": "^7.4.0", + "lodash": "^4.17.11" } }, "@babel/helper-explode-assignable-expression": { @@ -154,12 +154,12 @@ } }, "@babel/helper-hoist-variables": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.0.0.tgz", - "integrity": "sha512-Ggv5sldXUeSKsuzLkddtyhyHe2YantsxWKNi7A+7LeD12ExRDWTRk29JCXpaHPAbMaIPZSil7n+lq78WY2VY7w==", + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.4.0.tgz", + "integrity": "sha512-/NErCuoe/et17IlAQFKWM24qtyYYie7sFIrW/tIQXpck6vAu2hhtYYsKLBWQV+BQZMbcIYPU/QMYuTufrY4aQw==", "dev": true, "requires": { - "@babel/types": "^7.0.0" + "@babel/types": "^7.4.0" } }, "@babel/helper-member-expression-to-functions": { @@ -232,15 +232,15 @@ } }, "@babel/helper-replace-supers": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.2.3.tgz", - "integrity": "sha512-GyieIznGUfPXPWu0yLS6U55Mz67AZD9cUk0BfirOWlPrXlBcan9Gz+vHGz+cPfuoweZSnPzPIm67VtQM0OWZbA==", + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.4.0.tgz", + "integrity": "sha512-PVwCVnWWAgnal+kJ+ZSAphzyl58XrFeSKSAJRiqg5QToTsjL+Xu1f9+RJ+d+Q0aPhPfBGaYfkox66k86thxNSg==", "dev": true, "requires": { "@babel/helper-member-expression-to-functions": "^7.0.0", "@babel/helper-optimise-call-expression": "^7.0.0", - "@babel/traverse": "^7.2.3", - "@babel/types": "^7.0.0" + "@babel/traverse": "^7.4.0", + "@babel/types": "^7.4.0" } }, "@babel/helper-simple-access": { @@ -254,12 +254,12 @@ } }, "@babel/helper-split-export-declaration": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.0.0.tgz", - "integrity": "sha512-MXkOJqva62dfC0w85mEf/LucPPS/1+04nmmRMPEBUB++hiiThQ2zPtX/mEWQ3mtzCEjIJvPY8nuwxXtQeQwUag==", + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.4.0.tgz", + "integrity": "sha512-7Cuc6JZiYShaZnybDmfwhY4UYHzI6rlqhWjaIqbsJGsIqPimEYy5uh3akSRLMg65LSdSEnJ8a8/bWQN6u2oMGw==", "dev": true, "requires": { - "@babel/types": "^7.0.0" + "@babel/types": "^7.4.0" } }, "@babel/helper-wrap-function": { @@ -275,14 +275,14 @@ } }, "@babel/helpers": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.3.1.tgz", - "integrity": "sha512-Q82R3jKsVpUV99mgX50gOPCWwco9Ec5Iln/8Vyu4osNIOQgSrd9RFrQeUvmvddFNoLwMyOUWU+5ckioEKpDoGA==", + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.4.2.tgz", + "integrity": "sha512-gQR1eQeroDzFBikhrCccm5Gs2xBjZ57DNjGbqTaHo911IpmSxflOQWMAHPw/TXk8L3isv7s9lYzUkexOeTQUYg==", "dev": true, "requires": { - "@babel/template": "^7.1.2", - "@babel/traverse": "^7.1.5", - "@babel/types": "^7.3.0" + "@babel/template": "^7.4.0", + "@babel/traverse": "^7.4.0", + "@babel/types": "^7.4.0" } }, "@babel/highlight": { @@ -297,9 +297,9 @@ } }, "@babel/parser": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.3.1.tgz", - "integrity": "sha512-ATz6yX/L8LEnC3dtLQnIx4ydcPxhLcoy9Vl6re00zb2w5lG6itY6Vhnr1KFRPq/FHNsgl/gh2mjNN20f9iJTTA==", + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.4.2.tgz", + "integrity": "sha512-9fJTDipQFvlfSVdD/JBtkiY0br9BtfvW2R8wo6CX/Ej2eMuV0gWPk1M67Mt3eggQvBqYW1FCEk8BN7WvGm/g5g==", "dev": true }, "@babel/plugin-proposal-async-generator-functions": { @@ -324,9 +324,9 @@ } }, "@babel/plugin-proposal-object-rest-spread": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.3.1.tgz", - "integrity": "sha512-Nmmv1+3LqxJu/V5jU9vJmxR/KIRWFk2qLHmbB56yRRRFhlaSuOVXscX3gUmhaKgUhzA3otOHVubbIEVYsZ0eZg==", + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.4.0.tgz", + "integrity": "sha512-uTNi8pPYyUH2eWHyYWWSYJKwKg34hhgl4/dbejEjL+64OhbHjTX7wEVWMQl82tEmdDsGeu77+s8HHLS627h6OQ==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.0.0", @@ -344,14 +344,14 @@ } }, "@babel/plugin-proposal-unicode-property-regex": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.2.0.tgz", - "integrity": "sha512-LvRVYb7kikuOtIoUeWTkOxQEV1kYvL5B6U3iWEGCzPNRus1MzJweFqORTj+0jkxozkTSYNJozPOddxmqdqsRpw==", + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.4.0.tgz", + "integrity": "sha512-h/KjEZ3nK9wv1P1FSNb9G079jXrNYR0Ko+7XkOx85+gM24iZbPn0rh4vCftk+5QKY7y1uByFataBTmX7irEF1w==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.0.0", "@babel/helper-regex": "^7.0.0", - "regexpu-core": "^4.2.0" + "regexpu-core": "^4.5.4" } }, "@babel/plugin-syntax-async-generators": { @@ -400,9 +400,9 @@ } }, "@babel/plugin-transform-async-to-generator": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.2.0.tgz", - "integrity": "sha512-CEHzg4g5UraReozI9D4fblBYABs7IM6UerAVG7EJVrTLC5keh00aEuLUT+O40+mJCEzaXkYfTCUKIyeDfMOFFQ==", + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.4.0.tgz", + "integrity": "sha512-EeaFdCeUULM+GPFEsf7pFcNSxM7hYjoj5fiYbyuiXobW4JhFnjAv9OWzNwHyHcKoPNpAfeRDuW6VyaXEDUBa7g==", "dev": true, "requires": { "@babel/helper-module-imports": "^7.0.0", @@ -420,28 +420,28 @@ } }, "@babel/plugin-transform-block-scoping": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.2.0.tgz", - "integrity": "sha512-vDTgf19ZEV6mx35yiPJe4fS02mPQUUcBNwWQSZFXSzTSbsJFQvHt7DqyS3LK8oOWALFOsJ+8bbqBgkirZteD5Q==", + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.4.0.tgz", + "integrity": "sha512-AWyt3k+fBXQqt2qb9r97tn3iBwFpiv9xdAiG+Gr2HpAZpuayvbL55yWrsV3MyHvXk/4vmSiedhDRl1YI2Iy5nQ==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.0.0", - "lodash": "^4.17.10" + "lodash": "^4.17.11" } }, "@babel/plugin-transform-classes": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.2.2.tgz", - "integrity": "sha512-gEZvgTy1VtcDOaQty1l10T3jQmJKlNVxLDCs+3rCVPr6nMkODLELxViq5X9l+rfxbie3XrfrMCYYY6eX3aOcOQ==", + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.4.0.tgz", + "integrity": "sha512-XGg1Mhbw4LDmrO9rSTNe+uI79tQPdGs0YASlxgweYRLZqo/EQktjaOV4tchL/UZbM0F+/94uOipmdNGoaGOEYg==", "dev": true, "requires": { "@babel/helper-annotate-as-pure": "^7.0.0", - "@babel/helper-define-map": "^7.1.0", + "@babel/helper-define-map": "^7.4.0", "@babel/helper-function-name": "^7.1.0", "@babel/helper-optimise-call-expression": "^7.0.0", "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-replace-supers": "^7.1.0", - "@babel/helper-split-export-declaration": "^7.0.0", + "@babel/helper-replace-supers": "^7.4.0", + "@babel/helper-split-export-declaration": "^7.4.0", "globals": "^11.1.0" } }, @@ -455,9 +455,9 @@ } }, "@babel/plugin-transform-destructuring": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.2.0.tgz", - "integrity": "sha512-coVO2Ayv7g0qdDbrNiadE4bU7lvCd9H539m2gMknyVjjMdwF/iCOM7R+E8PkntoqLkltO0rk+3axhpp/0v68VQ==", + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.4.0.tgz", + "integrity": "sha512-HySkoatyYTY3ZwLI8GGvkRWCFrjAGXUHur5sMecmCIdIharnlcWWivOqDJI76vvmVZfzwb6G08NREsrY96RhGQ==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.0.0" @@ -494,9 +494,9 @@ } }, "@babel/plugin-transform-for-of": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.2.0.tgz", - "integrity": "sha512-Kz7Mt0SsV2tQk6jG5bBv5phVbkd0gd27SgYD4hH1aLMJRchM0dzHaXvrWhVZ+WxAlDoAKZ7Uy3jVTW2mKXQ1WQ==", + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.4.0.tgz", + "integrity": "sha512-vWdfCEYLlYSxbsKj5lGtzA49K3KANtb8qCPQ1em07txJzsBwY+cKJzBHizj5fl3CCx7vt+WPdgDLTHmydkbQSQ==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.0.0" @@ -532,9 +532,9 @@ } }, "@babel/plugin-transform-modules-commonjs": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.2.0.tgz", - "integrity": "sha512-V6y0uaUQrQPXUrmj+hgnks8va2L0zcZymeU7TtWEgdRLNkceafKXEduv7QzgQAE4lT+suwooG9dC7LFhdRAbVQ==", + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.4.0.tgz", + "integrity": "sha512-iWKAooAkipG7g1IY0eah7SumzfnIT3WNhT4uYB2kIsvHnNSB6MDYVa5qyICSwaTBDBY2c4SnJ3JtEa6ltJd6Jw==", "dev": true, "requires": { "@babel/helper-module-transforms": "^7.1.0", @@ -543,12 +543,12 @@ } }, "@babel/plugin-transform-modules-systemjs": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.2.0.tgz", - "integrity": "sha512-aYJwpAhoK9a+1+O625WIjvMY11wkB/ok0WClVwmeo3mCjcNRjt+/8gHWrB5i+00mUju0gWsBkQnPpdvQ7PImmQ==", + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.4.0.tgz", + "integrity": "sha512-gjPdHmqiNhVoBqus5qK60mWPp1CmYWp/tkh11mvb0rrys01HycEGD7NvvSoKXlWEfSM9TcL36CpsK8ElsADptQ==", "dev": true, "requires": { - "@babel/helper-hoist-variables": "^7.0.0", + "@babel/helper-hoist-variables": "^7.4.0", "@babel/helper-plugin-utils": "^7.0.0" } }, @@ -563,18 +563,18 @@ } }, "@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.3.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.3.0.tgz", - "integrity": "sha512-NxIoNVhk9ZxS+9lSoAQ/LM0V2UEvARLttEHUrRDGKFaAxOYQcrkN/nLRE+BbbicCAvZPl7wMP0X60HsHE5DtQw==", + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.4.2.tgz", + "integrity": "sha512-NsAuliSwkL3WO2dzWTOL1oZJHm0TM8ZY8ZSxk2ANyKkt5SQlToGA4pzctmq1BEjoacurdwZ3xp2dCQWJkME0gQ==", "dev": true, "requires": { "regexp-tree": "^0.1.0" } }, "@babel/plugin-transform-new-target": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.0.0.tgz", - "integrity": "sha512-yin069FYjah+LbqfGeTfzIBODex/e++Yfa0rH0fpfam9uTbuEeEOx5GLGr210ggOV77mVRNoeqSYqeuaqSzVSw==", + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.4.0.tgz", + "integrity": "sha512-6ZKNgMQmQmrEX/ncuCwnnw1yVGoaOW5KpxNhoWI7pCQdA0uZ0HqHGqenCUIENAnxRjy2WwNQ30gfGdIgqJXXqw==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.0.0" @@ -591,23 +591,23 @@ } }, "@babel/plugin-transform-parameters": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.2.0.tgz", - "integrity": "sha512-kB9+hhUidIgUoBQ0MsxMewhzr8i60nMa2KgeJKQWYrqQpqcBYtnpR+JgkadZVZoaEZ/eKu9mclFaVwhRpLNSzA==", + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.4.0.tgz", + "integrity": "sha512-Xqv6d1X+doyiuCGDoVJFtlZx0onAX0tnc3dY8w71pv/O0dODAbusVv2Ale3cGOwfiyi895ivOBhYa9DhAM8dUA==", "dev": true, "requires": { - "@babel/helper-call-delegate": "^7.1.0", + "@babel/helper-call-delegate": "^7.4.0", "@babel/helper-get-function-arity": "^7.0.0", "@babel/helper-plugin-utils": "^7.0.0" } }, "@babel/plugin-transform-regenerator": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.0.0.tgz", - "integrity": "sha512-sj2qzsEx8KDVv1QuJc/dEfilkg3RRPvPYx/VnKLtItVQRWt1Wqf5eVCOLZm29CiGFfYYsA3VPjfizTCV0S0Dlw==", + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.4.0.tgz", + "integrity": "sha512-SZ+CgL4F0wm4npojPU6swo/cK4FcbLgxLd4cWpHaNXY/NJ2dpahODCqBbAwb2rDmVszVb3SSjnk9/vik3AYdBw==", "dev": true, "requires": { - "regenerator-transform": "^0.13.3" + "regenerator-transform": "^0.13.4" } }, "@babel/plugin-transform-shorthand-properties": { @@ -669,82 +669,84 @@ } }, "@babel/preset-env": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.3.1.tgz", - "integrity": "sha512-FHKrD6Dxf30e8xgHQO0zJZpUPfVZg+Xwgz5/RdSWCbza9QLNk4Qbp40ctRoqDxml3O8RMzB1DU55SXeDG6PqHQ==", + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.4.2.tgz", + "integrity": "sha512-OEz6VOZaI9LW08CWVS3d9g/0jZA6YCn1gsKIy/fut7yZCJti5Lm1/Hi+uo/U+ODm7g4I6gULrCP+/+laT8xAsA==", "dev": true, "requires": { "@babel/helper-module-imports": "^7.0.0", "@babel/helper-plugin-utils": "^7.0.0", "@babel/plugin-proposal-async-generator-functions": "^7.2.0", "@babel/plugin-proposal-json-strings": "^7.2.0", - "@babel/plugin-proposal-object-rest-spread": "^7.3.1", + "@babel/plugin-proposal-object-rest-spread": "^7.4.0", "@babel/plugin-proposal-optional-catch-binding": "^7.2.0", - "@babel/plugin-proposal-unicode-property-regex": "^7.2.0", + "@babel/plugin-proposal-unicode-property-regex": "^7.4.0", "@babel/plugin-syntax-async-generators": "^7.2.0", "@babel/plugin-syntax-json-strings": "^7.2.0", "@babel/plugin-syntax-object-rest-spread": "^7.2.0", "@babel/plugin-syntax-optional-catch-binding": "^7.2.0", "@babel/plugin-transform-arrow-functions": "^7.2.0", - "@babel/plugin-transform-async-to-generator": "^7.2.0", + "@babel/plugin-transform-async-to-generator": "^7.4.0", "@babel/plugin-transform-block-scoped-functions": "^7.2.0", - "@babel/plugin-transform-block-scoping": "^7.2.0", - "@babel/plugin-transform-classes": "^7.2.0", + "@babel/plugin-transform-block-scoping": "^7.4.0", + "@babel/plugin-transform-classes": "^7.4.0", "@babel/plugin-transform-computed-properties": "^7.2.0", - "@babel/plugin-transform-destructuring": "^7.2.0", + "@babel/plugin-transform-destructuring": "^7.4.0", "@babel/plugin-transform-dotall-regex": "^7.2.0", "@babel/plugin-transform-duplicate-keys": "^7.2.0", "@babel/plugin-transform-exponentiation-operator": "^7.2.0", - "@babel/plugin-transform-for-of": "^7.2.0", + "@babel/plugin-transform-for-of": "^7.4.0", "@babel/plugin-transform-function-name": "^7.2.0", "@babel/plugin-transform-literals": "^7.2.0", "@babel/plugin-transform-modules-amd": "^7.2.0", - "@babel/plugin-transform-modules-commonjs": "^7.2.0", - "@babel/plugin-transform-modules-systemjs": "^7.2.0", + "@babel/plugin-transform-modules-commonjs": "^7.4.0", + "@babel/plugin-transform-modules-systemjs": "^7.4.0", "@babel/plugin-transform-modules-umd": "^7.2.0", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.3.0", - "@babel/plugin-transform-new-target": "^7.0.0", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.4.2", + "@babel/plugin-transform-new-target": "^7.4.0", "@babel/plugin-transform-object-super": "^7.2.0", - "@babel/plugin-transform-parameters": "^7.2.0", - "@babel/plugin-transform-regenerator": "^7.0.0", + "@babel/plugin-transform-parameters": "^7.4.0", + "@babel/plugin-transform-regenerator": "^7.4.0", "@babel/plugin-transform-shorthand-properties": "^7.2.0", "@babel/plugin-transform-spread": "^7.2.0", "@babel/plugin-transform-sticky-regex": "^7.2.0", "@babel/plugin-transform-template-literals": "^7.2.0", "@babel/plugin-transform-typeof-symbol": "^7.2.0", "@babel/plugin-transform-unicode-regex": "^7.2.0", - "browserslist": "^4.3.4", + "@babel/types": "^7.4.0", + "browserslist": "^4.4.2", + "core-js-compat": "^3.0.0", "invariant": "^2.2.2", "js-levenshtein": "^1.1.3", "semver": "^5.3.0" } }, "@babel/template": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.2.2.tgz", - "integrity": "sha512-zRL0IMM02AUDwghf5LMSSDEz7sBCO2YnNmpg3uWTZj/v1rcG2BmQUvaGU8GhU8BvfMh1k2KIAYZ7Ji9KXPUg7g==", + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.4.0.tgz", + "integrity": "sha512-SOWwxxClTTh5NdbbYZ0BmaBVzxzTh2tO/TeLTbF6MO6EzVhHTnff8CdBXx3mEtazFBoysmEM6GU/wF+SuSx4Fw==", "dev": true, "requires": { "@babel/code-frame": "^7.0.0", - "@babel/parser": "^7.2.2", - "@babel/types": "^7.2.2" + "@babel/parser": "^7.4.0", + "@babel/types": "^7.4.0" } }, "@babel/traverse": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.2.3.tgz", - "integrity": "sha512-Z31oUD/fJvEWVR0lNZtfgvVt512ForCTNKYcJBGbPb1QZfve4WGH8Wsy7+Mev33/45fhP/hwQtvgusNdcCMgSw==", + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.4.0.tgz", + "integrity": "sha512-/DtIHKfyg2bBKnIN+BItaIlEg5pjAnzHOIQe5w+rHAw/rg9g0V7T4rqPX8BJPfW11kt3koyjAnTNwCzb28Y1PA==", "dev": true, "requires": { "@babel/code-frame": "^7.0.0", - "@babel/generator": "^7.2.2", + "@babel/generator": "^7.4.0", "@babel/helper-function-name": "^7.1.0", - "@babel/helper-split-export-declaration": "^7.0.0", - "@babel/parser": "^7.2.3", - "@babel/types": "^7.2.2", + "@babel/helper-split-export-declaration": "^7.4.0", + "@babel/parser": "^7.4.0", + "@babel/types": "^7.4.0", "debug": "^4.1.0", "globals": "^11.1.0", - "lodash": "^4.17.10" + "lodash": "^4.17.11" }, "dependencies": { "debug": { @@ -765,67 +767,69 @@ } }, "@babel/types": { - "version": "7.3.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.3.0.tgz", - "integrity": "sha512-QkFPw68QqWU1/RVPyBe8SO7lXbPfjtqAxRYQKpFpaB8yMq7X2qAqfwK5LKoQufEkSmO5NQ70O6Kc3Afk03RwXw==", + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.4.0.tgz", + "integrity": "sha512-aPvkXyU2SPOnztlgo8n9cEiXW755mgyvueUPcpStqdzoSPm0fjO0vQBjLkt3JKJW7ufikfcnMTTPsN1xaTsBPA==", "dev": true, "requires": { "esutils": "^2.0.2", - "lodash": "^4.17.10", + "lodash": "^4.17.11", "to-fast-properties": "^2.0.0" } }, "@lerna/add": { - "version": "3.10.6", - "resolved": "https://registry.npmjs.org/@lerna/add/-/add-3.10.6.tgz", - "integrity": "sha512-FxQ5Bmyb5fF+3BQiNffM6cTeGCrl4uaAuGvxFIWF6Pgz6U14tUc1e16xgKDvVb1CurzJgIV5sLOT5xmCOqv1kA==", + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/@lerna/add/-/add-3.13.1.tgz", + "integrity": "sha512-cXk42YbuhzEnADCK8Qte5laC9Qo03eJLVnr0qKY85jQUM/T4URe3IIUemqpg0CpVATrB+Vz+iNdeqw9ng1iALw==", "dev": true, "requires": { - "@lerna/bootstrap": "3.10.6", - "@lerna/command": "3.10.6", - "@lerna/filter-options": "3.10.6", - "@lerna/npm-conf": "3.7.0", - "@lerna/validation-error": "3.6.0", + "@lerna/bootstrap": "3.13.1", + "@lerna/command": "3.13.1", + "@lerna/filter-options": "3.13.0", + "@lerna/npm-conf": "3.13.0", + "@lerna/validation-error": "3.13.0", "dedent": "^0.7.0", - "libnpm": "^2.0.1", + "npm-package-arg": "^6.1.0", "p-map": "^1.2.0", + "pacote": "^9.5.0", "semver": "^5.5.0" } }, "@lerna/batch-packages": { - "version": "3.10.6", - "resolved": "https://registry.npmjs.org/@lerna/batch-packages/-/batch-packages-3.10.6.tgz", - "integrity": "sha512-sInr3ZQJFMh9Zq+ZUoVjX8R67j9ViRkVy0uEMsOfG+jZlXj1lRPRMPRiRgU0jXSYEwCdwuAB5pTd9tTx0VCJUw==", + "version": "3.13.0", + "resolved": "https://registry.npmjs.org/@lerna/batch-packages/-/batch-packages-3.13.0.tgz", + "integrity": "sha512-TgLBTZ7ZlqilGnzJ3xh1KdAHcySfHytgNRTdG9YomfriTU6kVfp1HrXxKJYVGs7ClPUNt2CTFEOkw0tMBronjw==", "dev": true, "requires": { - "@lerna/package-graph": "3.10.6", - "@lerna/validation-error": "3.6.0", - "libnpm": "^2.0.1" + "@lerna/package-graph": "3.13.0", + "@lerna/validation-error": "3.13.0", + "npmlog": "^4.1.2" } }, "@lerna/bootstrap": { - "version": "3.10.6", - "resolved": "https://registry.npmjs.org/@lerna/bootstrap/-/bootstrap-3.10.6.tgz", - "integrity": "sha512-qbGjAxRpV/eiI9CboUIpsPPGpSogs8mN2/iDaAUBTaWVFVz/YyU64nui84Gll0kbdaHOyPput+kk2S8NCSCCdg==", - "dev": true, - "requires": { - "@lerna/batch-packages": "3.10.6", - "@lerna/command": "3.10.6", - "@lerna/filter-options": "3.10.6", - "@lerna/has-npm-version": "3.10.0", - "@lerna/npm-install": "3.10.0", - "@lerna/package-graph": "3.10.6", - "@lerna/pulse-till-done": "3.7.1", - "@lerna/rimraf-dir": "3.10.0", - "@lerna/run-lifecycle": "3.10.5", - "@lerna/run-parallel-batches": "3.0.0", - "@lerna/symlink-binary": "3.10.0", - "@lerna/symlink-dependencies": "3.10.0", - "@lerna/validation-error": "3.6.0", + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/@lerna/bootstrap/-/bootstrap-3.13.1.tgz", + "integrity": "sha512-mKdi5Ds5f82PZwEFyB9/W60I3iELobi1i87sTeVrbJh/um7GvqpSPy7kG/JPxyOdMpB2njX6LiJgw+7b6BEPWw==", + "dev": true, + "requires": { + "@lerna/batch-packages": "3.13.0", + "@lerna/command": "3.13.1", + "@lerna/filter-options": "3.13.0", + "@lerna/has-npm-version": "3.13.0", + "@lerna/npm-install": "3.13.0", + "@lerna/package-graph": "3.13.0", + "@lerna/pulse-till-done": "3.13.0", + "@lerna/rimraf-dir": "3.13.0", + "@lerna/run-lifecycle": "3.13.0", + "@lerna/run-parallel-batches": "3.13.0", + "@lerna/symlink-binary": "3.13.0", + "@lerna/symlink-dependencies": "3.13.0", + "@lerna/validation-error": "3.13.0", "dedent": "^0.7.0", "get-port": "^3.2.0", - "libnpm": "^2.0.1", "multimatch": "^2.1.0", + "npm-package-arg": "^6.1.0", + "npmlog": "^4.1.2", "p-finally": "^1.0.0", "p-map": "^1.2.0", "p-map-series": "^1.0.0", @@ -835,32 +839,32 @@ } }, "@lerna/changed": { - "version": "3.10.6", - "resolved": "https://registry.npmjs.org/@lerna/changed/-/changed-3.10.6.tgz", - "integrity": "sha512-nZDVq/sKdhgoAg1BVnpqjqUUz5+zedG+AnU+6mjEN2f23YVtRCsW55N4I9eEdW2pxXUaCY85Hj/HPSA74BYaFg==", + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/@lerna/changed/-/changed-3.13.1.tgz", + "integrity": "sha512-BRXitEJGOkoudbxEewW7WhjkLxFD+tTk4PrYpHLyCBk63pNTWtQLRE6dc1hqwh4emwyGncoyW6RgXfLgMZgryw==", "dev": true, "requires": { - "@lerna/collect-updates": "3.10.1", - "@lerna/command": "3.10.6", - "@lerna/listable": "3.10.6", - "@lerna/output": "3.6.0", - "@lerna/version": "3.10.6" + "@lerna/collect-updates": "3.13.0", + "@lerna/command": "3.13.1", + "@lerna/listable": "3.13.0", + "@lerna/output": "3.13.0", + "@lerna/version": "3.13.1" } }, "@lerna/check-working-tree": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/@lerna/check-working-tree/-/check-working-tree-3.10.0.tgz", - "integrity": "sha512-NdIPhDgEtGHfeGjB9F0oAoPLywgMpjnJhLLwTNQkelDHo2xNAVpG8kV+A2UJ+cU5UXCZA4RZFxKNmw86rO+Drw==", + "version": "3.13.0", + "resolved": "https://registry.npmjs.org/@lerna/check-working-tree/-/check-working-tree-3.13.0.tgz", + "integrity": "sha512-dsdO15NXX5To+Q53SYeCrBEpiqv4m5VkaPZxbGQZNwoRen1MloXuqxSymJANQn+ZLEqarv5V56gydebeROPH5A==", "dev": true, "requires": { - "@lerna/describe-ref": "3.10.0", - "@lerna/validation-error": "3.6.0" + "@lerna/describe-ref": "3.13.0", + "@lerna/validation-error": "3.13.0" } }, "@lerna/child-process": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/@lerna/child-process/-/child-process-3.3.0.tgz", - "integrity": "sha512-q2d/OPlNX/cBXB6Iz1932RFzOmOHq6ZzPjqebkINNaTojHWuuRpvJJY4Uz3NGpJ3kEtPDvBemkZqUBTSO5wb1g==", + "version": "3.13.0", + "resolved": "https://registry.npmjs.org/@lerna/child-process/-/child-process-3.13.0.tgz", + "integrity": "sha512-0iDS8y2jiEucD4fJHEzKoc8aQJgm7s+hG+0RmDNtfT0MM3n17pZnf5JOMtS1FJp+SEXOjMKQndyyaDIPFsnp6A==", "dev": true, "requires": { "chalk": "^2.3.1", @@ -869,43 +873,43 @@ } }, "@lerna/clean": { - "version": "3.10.6", - "resolved": "https://registry.npmjs.org/@lerna/clean/-/clean-3.10.6.tgz", - "integrity": "sha512-MuL8HOwnyvVtr6GOiAN/Ofjbx+BJdCrtjrM1Uuh8FFnbnZTPVf+0MPxL2jVzPMo0PmoIrX3fvlwvzKNk/lH0Ug==", + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/@lerna/clean/-/clean-3.13.1.tgz", + "integrity": "sha512-myGIaXv7RUO2qCFZXvx8SJeI+eN6y9SUD5zZ4/LvNogbOiEIlujC5lUAqK65rAHayQ9ltSa/yK6Xv510xhZXZQ==", "dev": true, "requires": { - "@lerna/command": "3.10.6", - "@lerna/filter-options": "3.10.6", - "@lerna/prompt": "3.6.0", - "@lerna/pulse-till-done": "3.7.1", - "@lerna/rimraf-dir": "3.10.0", + "@lerna/command": "3.13.1", + "@lerna/filter-options": "3.13.0", + "@lerna/prompt": "3.13.0", + "@lerna/pulse-till-done": "3.13.0", + "@lerna/rimraf-dir": "3.13.0", "p-map": "^1.2.0", "p-map-series": "^1.0.0", "p-waterfall": "^1.0.0" } }, "@lerna/cli": { - "version": "3.10.7", - "resolved": "https://registry.npmjs.org/@lerna/cli/-/cli-3.10.7.tgz", - "integrity": "sha512-yuoz/24mIfYit3neKqoE5NVs42Rj9A6A6SlkNPDfsy3v/Vh7SgYkU3cwiGyvwBGzIdhqL4/SWYo8H7YJLs0C+g==", + "version": "3.13.0", + "resolved": "https://registry.npmjs.org/@lerna/cli/-/cli-3.13.0.tgz", + "integrity": "sha512-HgFGlyCZbYaYrjOr3w/EsY18PdvtsTmDfpUQe8HwDjXlPeCCUgliZjXLOVBxSjiOvPeOSwvopwIHKWQmYbwywg==", "dev": true, "requires": { - "@lerna/global-options": "3.10.6", + "@lerna/global-options": "3.13.0", "dedent": "^0.7.0", - "libnpm": "^2.0.1", + "npmlog": "^4.1.2", "yargs": "^12.0.1" } }, "@lerna/collect-updates": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/@lerna/collect-updates/-/collect-updates-3.10.1.tgz", - "integrity": "sha512-vb0wEJ8k63G+2CR/ud1WeVHNJ21Fs6Ew6lbdGZXnF4ZvaFWxWJZpoHeWwzjhMdJ75QdTzUaIhTG1hnH9faQNMw==", + "version": "3.13.0", + "resolved": "https://registry.npmjs.org/@lerna/collect-updates/-/collect-updates-3.13.0.tgz", + "integrity": "sha512-uR3u6uTzrS1p46tHQ/mlHog/nRJGBqskTHYYJbgirujxm6FqNh7Do+I1Q/7zSee407G4lzsNxZdm8IL927HemQ==", "dev": true, "requires": { - "@lerna/child-process": "3.3.0", - "@lerna/describe-ref": "3.10.0", - "libnpm": "^2.0.1", + "@lerna/child-process": "3.13.0", + "@lerna/describe-ref": "3.13.0", "minimatch": "^3.0.4", + "npmlog": "^4.1.2", "slash": "^1.0.0" }, "dependencies": { @@ -918,56 +922,67 @@ } }, "@lerna/command": { - "version": "3.10.6", - "resolved": "https://registry.npmjs.org/@lerna/command/-/command-3.10.6.tgz", - "integrity": "sha512-jPZswMZXOpAaIuSF5hrz+eaWQzbDrvwbrkCoRJKfiAHx7URAkE6MQe9DeAnqrTKMqwfg0RciSrZLc8kWYfrzCQ==", + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/@lerna/command/-/command-3.13.1.tgz", + "integrity": "sha512-SYWezxX+iheWvzRoHCrbs8v5zHPaxAx3kWvZhqi70vuGsdOVAWmaG4IvHLn11ztS+Vpd5PM+ztBWSbnykpLFKQ==", "dev": true, "requires": { - "@lerna/child-process": "3.3.0", - "@lerna/package-graph": "3.10.6", - "@lerna/project": "3.10.0", - "@lerna/validation-error": "3.6.0", - "@lerna/write-log-file": "3.6.0", + "@lerna/child-process": "3.13.0", + "@lerna/package-graph": "3.13.0", + "@lerna/project": "3.13.1", + "@lerna/validation-error": "3.13.0", + "@lerna/write-log-file": "3.13.0", "dedent": "^0.7.0", "execa": "^1.0.0", "is-ci": "^1.0.10", - "libnpm": "^2.0.1", - "lodash": "^4.17.5" + "lodash": "^4.17.5", + "npmlog": "^4.1.2" } }, "@lerna/conventional-commits": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/@lerna/conventional-commits/-/conventional-commits-3.10.0.tgz", - "integrity": "sha512-8FvO0eR8g/tEgkb6eRVYaD39TsqMKsOXp17EV48jciciEqcrF/d1Ypu6ilK1GDp6R/1m2mbjt/b52a/qrO+xaw==", + "version": "3.13.0", + "resolved": "https://registry.npmjs.org/@lerna/conventional-commits/-/conventional-commits-3.13.0.tgz", + "integrity": "sha512-BeAgcNXuocmLhPxnmKU2Vy8YkPd/Uo+vu2i/p3JGsUldzrPC8iF3IDxH7fuXpEFN2Nfogu7KHachd4tchtOppA==", "dev": true, "requires": { - "@lerna/validation-error": "3.6.0", - "conventional-changelog-angular": "^5.0.2", - "conventional-changelog-core": "^3.1.5", + "@lerna/validation-error": "3.13.0", + "conventional-changelog-angular": "^5.0.3", + "conventional-changelog-core": "^3.1.6", "conventional-recommended-bump": "^4.0.4", "fs-extra": "^7.0.0", "get-stream": "^4.0.0", - "libnpm": "^2.0.1", + "npm-package-arg": "^6.1.0", + "npmlog": "^4.1.2", + "pify": "^3.0.0", "semver": "^5.5.0" + }, + "dependencies": { + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + } } }, "@lerna/create": { - "version": "3.10.6", - "resolved": "https://registry.npmjs.org/@lerna/create/-/create-3.10.6.tgz", - "integrity": "sha512-OddQtGBHM2/eJONggLWoTE6275XGbnJ6dIVF+fLsKS93o4GC6g+qcc6Y7lUWHm5bfpeOwNOVKwj0tvqBZ6MgoA==", + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/@lerna/create/-/create-3.13.1.tgz", + "integrity": "sha512-pLENMXgTkQuvKxAopjKeoLOv9fVUCnpTUD7aLrY5d95/1xqSZlnsOcQfUYcpMf3GpOvHc8ILmI5OXkPqjAf54g==", "dev": true, "requires": { - "@lerna/child-process": "3.3.0", - "@lerna/command": "3.10.6", - "@lerna/npm-conf": "3.7.0", - "@lerna/validation-error": "3.6.0", - "camelcase": "^4.1.0", + "@lerna/child-process": "3.13.0", + "@lerna/command": "3.13.1", + "@lerna/npm-conf": "3.13.0", + "@lerna/validation-error": "3.13.0", + "camelcase": "^5.0.0", "dedent": "^0.7.0", "fs-extra": "^7.0.0", "globby": "^8.0.1", "init-package-json": "^1.10.3", - "libnpm": "^2.0.1", + "npm-package-arg": "^6.1.0", "p-reduce": "^1.0.0", + "pacote": "^9.5.0", "pify": "^3.0.0", "semver": "^5.5.0", "slash": "^1.0.0", @@ -977,9 +992,15 @@ }, "dependencies": { "camelcase": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", - "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.2.0.tgz", + "integrity": "sha512-IXFsBS2pC+X0j0N/GE7Dm7j3bsEBp+oTpb7F50dwEVX7rf3IgwO9XatnegTsDtniKCUtEJH4fSU6Asw7uoVLfQ==", + "dev": true + }, + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", "dev": true }, "slash": { @@ -991,87 +1012,87 @@ } }, "@lerna/create-symlink": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/@lerna/create-symlink/-/create-symlink-3.6.0.tgz", - "integrity": "sha512-YG3lTb6zylvmGqKU+QYA3ylSnoLn+FyLH5XZmUsD0i85R884+EyJJeHx/zUk+yrL2ZwHS4RBUgJfC24fqzgPoA==", + "version": "3.13.0", + "resolved": "https://registry.npmjs.org/@lerna/create-symlink/-/create-symlink-3.13.0.tgz", + "integrity": "sha512-PTvg3jAAJSAtLFoZDsuTMv1wTOC3XYIdtg54k7uxIHsP8Ztpt+vlilY/Cni0THAqEMHvfiToel76Xdta4TU21Q==", "dev": true, "requires": { "cmd-shim": "^2.0.2", "fs-extra": "^7.0.0", - "libnpm": "^2.0.1" + "npmlog": "^4.1.2" } }, "@lerna/describe-ref": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/@lerna/describe-ref/-/describe-ref-3.10.0.tgz", - "integrity": "sha512-fouh3FQS07QxJJp/mW8LkGnH0xMRAzpBlejtZaiRwfDkW2kd6EuHaj8I/2/p21Wsprcvuu4dqmyia2YS1xFb/w==", + "version": "3.13.0", + "resolved": "https://registry.npmjs.org/@lerna/describe-ref/-/describe-ref-3.13.0.tgz", + "integrity": "sha512-UJefF5mLxLae9I2Sbz5RLYGbqbikRuMqdgTam0MS5OhXnyuuKYBUpwBshCURNb1dPBXTQhSwc7+oUhORx8ojCg==", "dev": true, "requires": { - "@lerna/child-process": "3.3.0", - "libnpm": "^2.0.1" + "@lerna/child-process": "3.13.0", + "npmlog": "^4.1.2" } }, "@lerna/diff": { - "version": "3.10.6", - "resolved": "https://registry.npmjs.org/@lerna/diff/-/diff-3.10.6.tgz", - "integrity": "sha512-0MqFhosjrqsIdXiKIu7t3CiJELqiU9mkjFBhYPB7JruAzpPwjMXJnC6/Ur5/7LXJYYVpqGQwZI9ZaZlOYJhhrw==", + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/@lerna/diff/-/diff-3.13.1.tgz", + "integrity": "sha512-cKqmpONO57mdvxtp8e+l5+tjtmF04+7E+O0QEcLcNUAjC6UR2OSM77nwRCXDukou/1h72JtWs0jjcdYLwAmApg==", "dev": true, "requires": { - "@lerna/child-process": "3.3.0", - "@lerna/command": "3.10.6", - "@lerna/validation-error": "3.6.0", - "libnpm": "^2.0.1" + "@lerna/child-process": "3.13.0", + "@lerna/command": "3.13.1", + "@lerna/validation-error": "3.13.0", + "npmlog": "^4.1.2" } }, "@lerna/exec": { - "version": "3.10.6", - "resolved": "https://registry.npmjs.org/@lerna/exec/-/exec-3.10.6.tgz", - "integrity": "sha512-cdHqaRBMYceJu8rZLO8b4ZeR27O+xKPHgzi13OOOfBJQjrTuacjMWyHgmpy8jWc/0f7QnTl4VsHks7VJ3UK+vw==", + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/@lerna/exec/-/exec-3.13.1.tgz", + "integrity": "sha512-I34wEP9lrAqqM7tTXLDxv/6454WFzrnXDWpNDbiKQiZs6SIrOOjmm6I4FiQsx+rU3o9d+HkC6tcUJRN5mlJUgA==", "dev": true, "requires": { - "@lerna/batch-packages": "3.10.6", - "@lerna/child-process": "3.3.0", - "@lerna/command": "3.10.6", - "@lerna/filter-options": "3.10.6", - "@lerna/run-parallel-batches": "3.0.0", - "@lerna/validation-error": "3.6.0" + "@lerna/batch-packages": "3.13.0", + "@lerna/child-process": "3.13.0", + "@lerna/command": "3.13.1", + "@lerna/filter-options": "3.13.0", + "@lerna/run-parallel-batches": "3.13.0", + "@lerna/validation-error": "3.13.0" } }, "@lerna/filter-options": { - "version": "3.10.6", - "resolved": "https://registry.npmjs.org/@lerna/filter-options/-/filter-options-3.10.6.tgz", - "integrity": "sha512-r/dQbqN+RGFKZNn+DyWehswFmAkny/fkdMB2sRM2YVe7zRTtSl95YxD9DtdYnpJTG/jbOVICS/L5QJakrI6SSw==", + "version": "3.13.0", + "resolved": "https://registry.npmjs.org/@lerna/filter-options/-/filter-options-3.13.0.tgz", + "integrity": "sha512-SRp7DCo9zrf+7NkQxZMkeyO1GRN6GICoB9UcBAbXhLbWisT37Cx5/6+jh49gYB63d/0/WYHSEPMlheUrpv1Srw==", "dev": true, "requires": { - "@lerna/collect-updates": "3.10.1", - "@lerna/filter-packages": "3.10.0", + "@lerna/collect-updates": "3.13.0", + "@lerna/filter-packages": "3.13.0", "dedent": "^0.7.0" } }, "@lerna/filter-packages": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/@lerna/filter-packages/-/filter-packages-3.10.0.tgz", - "integrity": "sha512-3Acdj+jbany6LnQSuImU4ttcK5ULHSVug8Gh/EvwTewKCDpHAuoI3eyuzZOnSBdMvDOjE03uIESQK0dNNsn6Ow==", + "version": "3.13.0", + "resolved": "https://registry.npmjs.org/@lerna/filter-packages/-/filter-packages-3.13.0.tgz", + "integrity": "sha512-RWiZWyGy3Mp7GRVBn//CacSnE3Kw82PxE4+H6bQ3pDUw/9atXn7NRX+gkBVQIYeKamh7HyumJtyOKq3Pp9BADQ==", "dev": true, "requires": { - "@lerna/validation-error": "3.6.0", - "libnpm": "^2.0.1", - "multimatch": "^2.1.0" + "@lerna/validation-error": "3.13.0", + "multimatch": "^2.1.0", + "npmlog": "^4.1.2" } }, "@lerna/get-npm-exec-opts": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/@lerna/get-npm-exec-opts/-/get-npm-exec-opts-3.6.0.tgz", - "integrity": "sha512-ruH6KuLlt75aCObXfUIdVJqmfVq7sgWGq5mXa05vc1MEqxTIiU23YiJdWzofQOOUOACaZkzZ4K4Nu7wXEg4Xgg==", + "version": "3.13.0", + "resolved": "https://registry.npmjs.org/@lerna/get-npm-exec-opts/-/get-npm-exec-opts-3.13.0.tgz", + "integrity": "sha512-Y0xWL0rg3boVyJk6An/vurKzubyJKtrxYv2sj4bB8Mc5zZ3tqtv0ccbOkmkXKqbzvNNF7VeUt1OJ3DRgtC/QZw==", "dev": true, "requires": { - "libnpm": "^2.0.1" + "npmlog": "^4.1.2" } }, "@lerna/get-packed": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@lerna/get-packed/-/get-packed-3.7.0.tgz", - "integrity": "sha512-yuFtjsUZIHjeIvIYQ/QuytC+FQcHwo3peB+yGBST2uWCLUCR5rx6knoQcPzbxdFDCuUb5IFccFGd3B1fHFg3RQ==", + "version": "3.13.0", + "resolved": "https://registry.npmjs.org/@lerna/get-packed/-/get-packed-3.13.0.tgz", + "integrity": "sha512-EgSim24sjIjqQDC57bgXD9l22/HCS93uQBbGpkzEOzxAVzEgpZVm7Fm1t8BVlRcT2P2zwGnRadIvxTbpQuDPTg==", "dev": true, "requires": { "fs-extra": "^7.0.0", @@ -1102,60 +1123,73 @@ } } }, + "@lerna/github-client": { + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/@lerna/github-client/-/github-client-3.13.1.tgz", + "integrity": "sha512-iPLUp8FFoAKGURksYEYZzfuo9TRA+NepVlseRXFaWlmy36dCQN20AciINpoXiXGoHcEUHXUKHQvY3ARFdMlf3w==", + "dev": true, + "requires": { + "@lerna/child-process": "3.13.0", + "@octokit/plugin-enterprise-rest": "^2.1.1", + "@octokit/rest": "^16.16.0", + "git-url-parse": "^11.1.2", + "npmlog": "^4.1.2" + } + }, "@lerna/global-options": { - "version": "3.10.6", - "resolved": "https://registry.npmjs.org/@lerna/global-options/-/global-options-3.10.6.tgz", - "integrity": "sha512-k5Xkq1M/uREFC2R9uwN5gcvIgjj4iOXo0YyeEXCMWBiW3j2GL9xN4d1MmAIcrYlAzVYh6kLlWaFWl/rNIneHIw==", + "version": "3.13.0", + "resolved": "https://registry.npmjs.org/@lerna/global-options/-/global-options-3.13.0.tgz", + "integrity": "sha512-SlZvh1gVRRzYLVluz9fryY1nJpZ0FHDGB66U9tFfvnnxmueckRQxLopn3tXj3NU1kc3QANT2I5BsQkOqZ4TEFQ==", "dev": true }, "@lerna/has-npm-version": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/@lerna/has-npm-version/-/has-npm-version-3.10.0.tgz", - "integrity": "sha512-N4RRYxGeivuaKgPDzrhkQOQs1Sg4tOnxnEe3akfqu1wDA4Ng5V6Y2uW3DbkAjFL3aNJhWF5Vbf7sBsGtfgDQ8w==", + "version": "3.13.0", + "resolved": "https://registry.npmjs.org/@lerna/has-npm-version/-/has-npm-version-3.13.0.tgz", + "integrity": "sha512-Oqu7DGLnrMENPm+bPFGOHnqxK8lCnuYr6bk3g/CoNn8/U0qgFvHcq6Iv8/Z04TsvleX+3/RgauSD2kMfRmbypg==", "dev": true, "requires": { - "@lerna/child-process": "3.3.0", + "@lerna/child-process": "3.13.0", "semver": "^5.5.0" } }, "@lerna/import": { - "version": "3.10.6", - "resolved": "https://registry.npmjs.org/@lerna/import/-/import-3.10.6.tgz", - "integrity": "sha512-LlGxhfDhovoNoBJLF3PYd3j/G2GFTnfLh0V38+hBQ6lomMNJbjkACfiLVomQxPWWpYLk0GTlpWYR8YGv6L7Ifw==", + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/@lerna/import/-/import-3.13.1.tgz", + "integrity": "sha512-A1Vk1siYx1XkRl6w+zkaA0iptV5TIynVlHPR9S7NY0XAfhykjztYVvwtxarlh6+VcNrO9We6if0+FXCrfDEoIg==", "dev": true, "requires": { - "@lerna/child-process": "3.3.0", - "@lerna/command": "3.10.6", - "@lerna/prompt": "3.6.0", - "@lerna/pulse-till-done": "3.7.1", - "@lerna/validation-error": "3.6.0", + "@lerna/child-process": "3.13.0", + "@lerna/command": "3.13.1", + "@lerna/prompt": "3.13.0", + "@lerna/pulse-till-done": "3.13.0", + "@lerna/validation-error": "3.13.0", "dedent": "^0.7.0", "fs-extra": "^7.0.0", "p-map-series": "^1.0.0" } }, "@lerna/init": { - "version": "3.10.6", - "resolved": "https://registry.npmjs.org/@lerna/init/-/init-3.10.6.tgz", - "integrity": "sha512-RIlEx+ofWLYRNjxCkkV3G0XQPM+/KA5RXRDb5wKQLYO1f+tZAaHoUh8fHDIvxGf/ohY/OIjYYGSsU+ysimfwiQ==", + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/@lerna/init/-/init-3.13.1.tgz", + "integrity": "sha512-M59WACqim8WkH5FQEGOCEZ89NDxCKBfFTx4ZD5ig3LkGyJ8RdcJq5KEfpW/aESuRE9JrZLzVr0IjKbZSxzwEMA==", "dev": true, "requires": { - "@lerna/child-process": "3.3.0", - "@lerna/command": "3.10.6", + "@lerna/child-process": "3.13.0", + "@lerna/command": "3.13.1", "fs-extra": "^7.0.0", "p-map": "^1.2.0", "write-json-file": "^2.3.0" } }, "@lerna/link": { - "version": "3.10.6", - "resolved": "https://registry.npmjs.org/@lerna/link/-/link-3.10.6.tgz", - "integrity": "sha512-dwD6qftRWitgLDYbqtDrgO7c8uF5C0fHVew5M6gU5m9tBJidqd7cDwHv/bXboLEI63U7tt5y6LY+wEpYUFsBRw==", + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/@lerna/link/-/link-3.13.1.tgz", + "integrity": "sha512-N3h3Fj1dcea+1RaAoAdy4g2m3fvU7m89HoUn5X/Zcw5n2kPoK8kTO+NfhNAatfRV8VtMXst8vbNrWQQtfm0FFw==", "dev": true, "requires": { - "@lerna/command": "3.10.6", - "@lerna/package-graph": "3.10.6", - "@lerna/symlink-dependencies": "3.10.0", + "@lerna/command": "3.13.1", + "@lerna/package-graph": "3.13.0", + "@lerna/symlink-dependencies": "3.13.0", "p-map": "^1.2.0", "slash": "^1.0.0" }, @@ -1169,118 +1203,140 @@ } }, "@lerna/list": { - "version": "3.10.6", - "resolved": "https://registry.npmjs.org/@lerna/list/-/list-3.10.6.tgz", - "integrity": "sha512-3ElQBj2dOB4uUkpsjC1bxdeZwEzRBuV1pBBs5E1LncwsZf7D9D99Z32fuZsDaCHpEMgHAD4/j8juI3/7m5dkaQ==", + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/@lerna/list/-/list-3.13.1.tgz", + "integrity": "sha512-635iRbdgd9gNvYLLIbYdQCQLr+HioM5FGJLFS0g3DPGygr6iDR8KS47hzCRGH91LU9NcM1mD1RoT/AChF+QbiA==", "dev": true, "requires": { - "@lerna/command": "3.10.6", - "@lerna/filter-options": "3.10.6", - "@lerna/listable": "3.10.6", - "@lerna/output": "3.6.0" + "@lerna/command": "3.13.1", + "@lerna/filter-options": "3.13.0", + "@lerna/listable": "3.13.0", + "@lerna/output": "3.13.0" } }, "@lerna/listable": { - "version": "3.10.6", - "resolved": "https://registry.npmjs.org/@lerna/listable/-/listable-3.10.6.tgz", - "integrity": "sha512-F7ZuvesSgeuMiJf99eOum5p1MQGQStykcmHH1ek+LQRMiGGF1o3PkBxPvHTZBADGOFarek8bFA5TVmRAMX7NIw==", + "version": "3.13.0", + "resolved": "https://registry.npmjs.org/@lerna/listable/-/listable-3.13.0.tgz", + "integrity": "sha512-liYJ/WBUYP4N4MnSVZuLUgfa/jy3BZ02/1Om7xUY09xGVSuNVNEeB8uZUMSC+nHqFHIsMPZ8QK9HnmZb1E/eTA==", "dev": true, "requires": { - "@lerna/batch-packages": "3.10.6", + "@lerna/batch-packages": "3.13.0", "chalk": "^2.3.1", "columnify": "^1.5.4" } }, "@lerna/log-packed": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/@lerna/log-packed/-/log-packed-3.6.0.tgz", - "integrity": "sha512-T/J41zMkzpWB5nbiTRS5PmYTFn74mJXe6RQA2qhkdLi0UqnTp97Pux1loz3jsJf2yJtiQUnyMM7KuKIAge0Vlw==", + "version": "3.13.0", + "resolved": "https://registry.npmjs.org/@lerna/log-packed/-/log-packed-3.13.0.tgz", + "integrity": "sha512-Rmjrcz+6aM6AEcEVWmurbo8+AnHOvYtDpoeMMJh9IZ9SmZr2ClXzmD7wSvjTQc8BwOaiWjjC/ukcT0UYA2m7wg==", "dev": true, "requires": { "byte-size": "^4.0.3", "columnify": "^1.5.4", "has-unicode": "^2.0.1", - "libnpm": "^2.0.1" + "npmlog": "^4.1.2" } }, "@lerna/npm-conf": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@lerna/npm-conf/-/npm-conf-3.7.0.tgz", - "integrity": "sha512-+WSMDfPKcKzMfqq283ydz9RRpOU6p9wfx0wy4hVSUY/6YUpsyuk8SShjcRtY8zTM5AOrxvFBuuV90H4YpZ5+Ng==", + "version": "3.13.0", + "resolved": "https://registry.npmjs.org/@lerna/npm-conf/-/npm-conf-3.13.0.tgz", + "integrity": "sha512-Jg2kANsGnhg+fbPEzE0X9nX5oviEAvWj0nYyOkcE+cgWuT7W0zpnPXC4hA4C5IPQGhwhhh0IxhWNNHtjTuw53g==", "dev": true, "requires": { "config-chain": "^1.1.11", "pify": "^3.0.0" + }, + "dependencies": { + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + } } }, "@lerna/npm-dist-tag": { - "version": "3.8.5", - "resolved": "https://registry.npmjs.org/@lerna/npm-dist-tag/-/npm-dist-tag-3.8.5.tgz", - "integrity": "sha512-VO57yKTB4NC2LZuTd4w0LmlRpoFm/gejQ1gqqLGzSJuSZaBXmieElFovzl21S07cqiy7FNVdz75x7/a6WCZ6XA==", + "version": "3.13.0", + "resolved": "https://registry.npmjs.org/@lerna/npm-dist-tag/-/npm-dist-tag-3.13.0.tgz", + "integrity": "sha512-mcuhw34JhSRFrbPn0vedbvgBTvveG52bR2lVE3M3tfE8gmR/cKS/EJFO4AUhfRKGCTFn9rjaSEzlFGYV87pemQ==", "dev": true, "requires": { "figgy-pudding": "^3.5.1", - "libnpm": "^2.0.1" + "npm-package-arg": "^6.1.0", + "npm-registry-fetch": "^3.9.0", + "npmlog": "^4.1.2" } }, "@lerna/npm-install": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/@lerna/npm-install/-/npm-install-3.10.0.tgz", - "integrity": "sha512-/6/XyLY9/4jaMPBOVYUr4wZxQURIfwoELY0qCQ8gZ5zv4cOiFiiCUxZ0i4fxqFtD7nJ084zq1DsZW0aH0CIWYw==", + "version": "3.13.0", + "resolved": "https://registry.npmjs.org/@lerna/npm-install/-/npm-install-3.13.0.tgz", + "integrity": "sha512-qNyfts//isYQxore6fsPorNYJmPVKZ6tOThSH97tP0aV91zGMtrYRqlAoUnDwDdAjHPYEM16hNujg2wRmsqqIw==", "dev": true, "requires": { - "@lerna/child-process": "3.3.0", - "@lerna/get-npm-exec-opts": "3.6.0", + "@lerna/child-process": "3.13.0", + "@lerna/get-npm-exec-opts": "3.13.0", "fs-extra": "^7.0.0", - "libnpm": "^2.0.1", + "npm-package-arg": "^6.1.0", + "npmlog": "^4.1.2", "signal-exit": "^3.0.2", "write-pkg": "^3.1.0" } }, "@lerna/npm-publish": { - "version": "3.10.7", - "resolved": "https://registry.npmjs.org/@lerna/npm-publish/-/npm-publish-3.10.7.tgz", - "integrity": "sha512-oU3/Q+eHC1fRjh7bk6Nn4tRD1OLR6XZVs3v+UWMWMrF4hVSV61pxcP5tpeI1n4gDQjSgh7seI4EzKVJe/WfraA==", + "version": "3.13.0", + "resolved": "https://registry.npmjs.org/@lerna/npm-publish/-/npm-publish-3.13.0.tgz", + "integrity": "sha512-y4WO0XTaf9gNRkI7as6P2ItVDOxmYHwYto357fjybcnfXgMqEA94c3GJ++jU41j0A9vnmYC6/XxpTd9sVmH9tA==", "dev": true, "requires": { - "@lerna/run-lifecycle": "3.10.5", + "@lerna/run-lifecycle": "3.13.0", "figgy-pudding": "^3.5.1", "fs-extra": "^7.0.0", - "libnpm": "^2.0.1" + "libnpmpublish": "^1.1.1", + "npmlog": "^4.1.2", + "pify": "^3.0.0", + "read-package-json": "^2.0.13" + }, + "dependencies": { + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + } } }, "@lerna/npm-run-script": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/@lerna/npm-run-script/-/npm-run-script-3.10.0.tgz", - "integrity": "sha512-c21tBXLF1Wje4tx/Td9jKIMrlZo/8QQiyyadjdKpwyyo7orSMsVNXGyJwvZ4JVVDcwC3GPU6HQvkt63v7rcyaw==", + "version": "3.13.0", + "resolved": "https://registry.npmjs.org/@lerna/npm-run-script/-/npm-run-script-3.13.0.tgz", + "integrity": "sha512-hiL3/VeVp+NFatBjkGN8mUdX24EfZx9rQlSie0CMgtjc7iZrtd0jCguLomSCRHYjJuvqgbp+LLYo7nHVykfkaQ==", "dev": true, "requires": { - "@lerna/child-process": "3.3.0", - "@lerna/get-npm-exec-opts": "3.6.0", - "libnpm": "^2.0.1" + "@lerna/child-process": "3.13.0", + "@lerna/get-npm-exec-opts": "3.13.0", + "npmlog": "^4.1.2" } }, "@lerna/output": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/@lerna/output/-/output-3.6.0.tgz", - "integrity": "sha512-9sjQouf6p7VQtVCRnzoTGlZyURd48i3ha3WBHC/UBJnHZFuXMqWVPKNuvnMf2kRXDyoQD+2mNywpmEJg5jOnRg==", + "version": "3.13.0", + "resolved": "https://registry.npmjs.org/@lerna/output/-/output-3.13.0.tgz", + "integrity": "sha512-7ZnQ9nvUDu/WD+bNsypmPG5MwZBwu86iRoiW6C1WBuXXDxM5cnIAC1m2WxHeFnjyMrYlRXM9PzOQ9VDD+C15Rg==", "dev": true, "requires": { - "libnpm": "^2.0.1" + "npmlog": "^4.1.2" } }, "@lerna/pack-directory": { - "version": "3.10.5", - "resolved": "https://registry.npmjs.org/@lerna/pack-directory/-/pack-directory-3.10.5.tgz", - "integrity": "sha512-Ulj24L9XdgjJIxBr6ZjRJEoBULVH3c10lqunUdW41bswXhzhirRtQIxv0+5shngNjDwgMmJfOBcuCVKPSez4tg==", + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/@lerna/pack-directory/-/pack-directory-3.13.1.tgz", + "integrity": "sha512-kXnyqrkQbCIZOf1054N88+8h0ItC7tUN5v9ca/aWpx298gsURpxUx/1TIKqijL5TOnHMyIkj0YJmnH/PyBVLKA==", "dev": true, "requires": { - "@lerna/get-packed": "3.7.0", - "@lerna/package": "3.7.2", - "@lerna/run-lifecycle": "3.10.5", + "@lerna/get-packed": "3.13.0", + "@lerna/package": "3.13.0", + "@lerna/run-lifecycle": "3.13.0", "figgy-pudding": "^3.5.1", - "libnpm": "^2.0.1", - "npm-packlist": "^1.1.12", + "npm-packlist": "^1.4.1", + "npmlog": "^4.1.2", "tar": "^4.4.8", "temp-write": "^3.4.0" }, @@ -1309,13 +1365,13 @@ } }, "@lerna/package": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/@lerna/package/-/package-3.7.2.tgz", - "integrity": "sha512-8A5hN2CekM1a0Ix4VUO/g+REo+MsnXb8lnQ0bGjr1YGWzSL5NxYJ0Z9+0pwTfDpvRDYlFYO0rMVwBUW44b4dUw==", + "version": "3.13.0", + "resolved": "https://registry.npmjs.org/@lerna/package/-/package-3.13.0.tgz", + "integrity": "sha512-kSKO0RJQy093BufCQnkhf1jB4kZnBvL7kK5Ewolhk5gwejN+Jofjd8DGRVUDUJfQ0CkW1o6GbUeZvs8w8VIZDg==", "dev": true, "requires": { - "libnpm": "^2.0.1", "load-json-file": "^4.0.0", + "npm-package-arg": "^6.1.0", "write-pkg": "^3.1.0" }, "dependencies": { @@ -1340,35 +1396,41 @@ "error-ex": "^1.3.1", "json-parse-better-errors": "^1.0.1" } + }, + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true } } }, "@lerna/package-graph": { - "version": "3.10.6", - "resolved": "https://registry.npmjs.org/@lerna/package-graph/-/package-graph-3.10.6.tgz", - "integrity": "sha512-mpIOJbhi+xLqT9BcUrLVD4We8WUdousQf/QndbEWl8DWAW1ethtRHVsCm9ufdBB3F9nj4PH/hqnDWWwqE+rS4w==", + "version": "3.13.0", + "resolved": "https://registry.npmjs.org/@lerna/package-graph/-/package-graph-3.13.0.tgz", + "integrity": "sha512-3mRF1zuqFE1HEFmMMAIggXy+f+9cvHhW/jzaPEVyrPNLKsyfJQtpTNzeI04nfRvbAh+Gd2aNksvaW/w3xGJnnw==", "dev": true, "requires": { - "@lerna/validation-error": "3.6.0", - "libnpm": "^2.0.1", + "@lerna/validation-error": "3.13.0", + "npm-package-arg": "^6.1.0", "semver": "^5.5.0" } }, "@lerna/project": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/@lerna/project/-/project-3.10.0.tgz", - "integrity": "sha512-9QRl8aGHuyU4zVEELQmNPnJTlS7XHqX7w9I9isCXdnilKc2R0MyvUs21lj6Yyt6xTuQnqD158TR9tbS4QufYQQ==", + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/@lerna/project/-/project-3.13.1.tgz", + "integrity": "sha512-/GoCrpsCCTyb9sizk1+pMBrIYchtb+F1uCOn3cjn9yenyG/MfYEnlfrbV5k/UDud0Ei75YBLbmwCbigHkAKazQ==", "dev": true, "requires": { - "@lerna/package": "3.7.2", - "@lerna/validation-error": "3.6.0", - "cosmiconfig": "^5.0.2", + "@lerna/package": "3.13.0", + "@lerna/validation-error": "3.13.0", + "cosmiconfig": "^5.1.0", "dedent": "^0.7.0", "dot-prop": "^4.2.0", "glob-parent": "^3.1.0", "globby": "^8.0.1", - "libnpm": "^2.0.1", "load-json-file": "^4.0.0", + "npmlog": "^4.1.2", "p-map": "^1.2.0", "resolve-from": "^4.0.0", "write-json-file": "^2.3.0" @@ -1396,6 +1458,12 @@ "json-parse-better-errors": "^1.0.1" } }, + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + }, "resolve-from": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", @@ -1405,13 +1473,13 @@ } }, "@lerna/prompt": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/@lerna/prompt/-/prompt-3.6.0.tgz", - "integrity": "sha512-nyAjPMolJ/ZRAAVcXrUH89C4n1SiWvLh4xWNvWYKLcf3PI5yges35sDFP/HYrM4+cEbkNFuJCRq6CxaET4PRsg==", + "version": "3.13.0", + "resolved": "https://registry.npmjs.org/@lerna/prompt/-/prompt-3.13.0.tgz", + "integrity": "sha512-P+lWSFokdyvYpkwC3it9cE0IF2U5yy2mOUbGvvE4iDb9K7TyXGE+7lwtx2thtPvBAfIb7O13POMkv7df03HJeA==", "dev": true, "requires": { "inquirer": "^6.2.0", - "libnpm": "^2.0.1" + "npmlog": "^4.1.2" }, "dependencies": { "ansi-escapes": { @@ -1421,9 +1489,9 @@ "dev": true }, "ansi-regex": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.0.0.tgz", - "integrity": "sha512-iB5Dda8t/UqpPI/IjsejXu5jOGDrzn41wJyljwPH65VCIbk6+1BzFIMJGFwTNrYXT1CrD+B4l19U7awiQ8rk7w==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", "dev": true }, "figures": { @@ -1456,6 +1524,12 @@ "through": "^2.3.6" } }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, "mute-stream": { "version": "0.0.7", "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", @@ -1471,115 +1545,132 @@ "is-promise": "^2.1.0" } }, - "strip-ansi": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.0.0.tgz", - "integrity": "sha512-Uu7gQyZI7J7gn5qLn1Np3G9vcYGTVqB+lFTytnDJv83dd8T22aGH451P3jueT2/QemInJDfxHB5Tde5OzgG1Ow==", + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", "dev": true, "requires": { - "ansi-regex": "^4.0.0" + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + }, + "dependencies": { + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + } } } } }, "@lerna/publish": { - "version": "3.10.7", - "resolved": "https://registry.npmjs.org/@lerna/publish/-/publish-3.10.7.tgz", - "integrity": "sha512-Qd8pml2l9s6GIvNX1pTnia+Ddjsm9LF3pRRoOQeugAdv2IJNf45c/83AAEyE9M2ShG5VjgxEITNW4Lg49zipjQ==", - "dev": true, - "requires": { - "@lerna/batch-packages": "3.10.6", - "@lerna/check-working-tree": "3.10.0", - "@lerna/child-process": "3.3.0", - "@lerna/collect-updates": "3.10.1", - "@lerna/command": "3.10.6", - "@lerna/describe-ref": "3.10.0", - "@lerna/log-packed": "3.6.0", - "@lerna/npm-conf": "3.7.0", - "@lerna/npm-dist-tag": "3.8.5", - "@lerna/npm-publish": "3.10.7", - "@lerna/output": "3.6.0", - "@lerna/pack-directory": "3.10.5", - "@lerna/prompt": "3.6.0", - "@lerna/pulse-till-done": "3.7.1", - "@lerna/run-lifecycle": "3.10.5", - "@lerna/run-parallel-batches": "3.0.0", - "@lerna/validation-error": "3.6.0", - "@lerna/version": "3.10.6", + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/@lerna/publish/-/publish-3.13.1.tgz", + "integrity": "sha512-KhCJ9UDx76HWCF03i5TD7z5lX+2yklHh5SyO8eDaLptgdLDQ0Z78lfGj3JhewHU2l46FztmqxL/ss0IkWHDL+g==", + "dev": true, + "requires": { + "@lerna/batch-packages": "3.13.0", + "@lerna/check-working-tree": "3.13.0", + "@lerna/child-process": "3.13.0", + "@lerna/collect-updates": "3.13.0", + "@lerna/command": "3.13.1", + "@lerna/describe-ref": "3.13.0", + "@lerna/log-packed": "3.13.0", + "@lerna/npm-conf": "3.13.0", + "@lerna/npm-dist-tag": "3.13.0", + "@lerna/npm-publish": "3.13.0", + "@lerna/output": "3.13.0", + "@lerna/pack-directory": "3.13.1", + "@lerna/prompt": "3.13.0", + "@lerna/pulse-till-done": "3.13.0", + "@lerna/run-lifecycle": "3.13.0", + "@lerna/run-parallel-batches": "3.13.0", + "@lerna/validation-error": "3.13.0", + "@lerna/version": "3.13.1", "figgy-pudding": "^3.5.1", "fs-extra": "^7.0.0", - "libnpm": "^2.0.1", + "libnpmaccess": "^3.0.1", + "npm-package-arg": "^6.1.0", + "npm-registry-fetch": "^3.9.0", + "npmlog": "^4.1.2", "p-finally": "^1.0.0", "p-map": "^1.2.0", "p-pipe": "^1.2.0", "p-reduce": "^1.0.0", + "pacote": "^9.5.0", "semver": "^5.5.0" } }, "@lerna/pulse-till-done": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/@lerna/pulse-till-done/-/pulse-till-done-3.7.1.tgz", - "integrity": "sha512-MzpesZeW3Mc+CiAq4zUt9qTXI9uEBBKrubYHE36voQTSkHvu/Rox6YOvfUr+U7P6k8frFPeCgGpfMDTLhiqe6w==", + "version": "3.13.0", + "resolved": "https://registry.npmjs.org/@lerna/pulse-till-done/-/pulse-till-done-3.13.0.tgz", + "integrity": "sha512-1SOHpy7ZNTPulzIbargrgaJX387csN7cF1cLOGZiJQA6VqnS5eWs2CIrG8i8wmaUavj2QlQ5oEbRMVVXSsGrzA==", "dev": true, "requires": { - "libnpm": "^2.0.1" + "npmlog": "^4.1.2" } }, "@lerna/resolve-symlink": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/@lerna/resolve-symlink/-/resolve-symlink-3.6.0.tgz", - "integrity": "sha512-TVOAEqHJSQVhNDMFCwEUZPaOETqHDQV1TQWQfC8ZlOqyaUQ7veZUbg0yfG7RPNzlSpvF0ZaGFeR0YhYDAW03GA==", + "version": "3.13.0", + "resolved": "https://registry.npmjs.org/@lerna/resolve-symlink/-/resolve-symlink-3.13.0.tgz", + "integrity": "sha512-Lc0USSFxwDxUs5JvIisS8JegjA6SHSAWJCMvi2osZx6wVRkEDlWG2B1JAfXUzCMNfHoZX0/XX9iYZ+4JIpjAtg==", "dev": true, "requires": { "fs-extra": "^7.0.0", - "libnpm": "^2.0.1", + "npmlog": "^4.1.2", "read-cmd-shim": "^1.0.1" } }, "@lerna/rimraf-dir": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/@lerna/rimraf-dir/-/rimraf-dir-3.10.0.tgz", - "integrity": "sha512-RSKSfxPURc58ERCD/PuzorR86lWEvIWNclXYGvIYM76yNGrWiDF44pGHQvB4J+Lxa5M+52ZtZC/eOC7A7YCH4g==", + "version": "3.13.0", + "resolved": "https://registry.npmjs.org/@lerna/rimraf-dir/-/rimraf-dir-3.13.0.tgz", + "integrity": "sha512-kte+pMemulre8cmPqljxIYjCmdLByz8DgHBHXB49kz2EiPf8JJ+hJFt0PzEubEyJZ2YE2EVAx5Tv5+NfGNUQyQ==", "dev": true, "requires": { - "@lerna/child-process": "3.3.0", - "libnpm": "^2.0.1", + "@lerna/child-process": "3.13.0", + "npmlog": "^4.1.2", "path-exists": "^3.0.0", "rimraf": "^2.6.2" } }, "@lerna/run": { - "version": "3.10.6", - "resolved": "https://registry.npmjs.org/@lerna/run/-/run-3.10.6.tgz", - "integrity": "sha512-KS2lWbu/8WUUscQPi9U8sPO6yYpzf/0GmODjpruR1nRi1u/tuncdjTiG+hjGAeFC1BD7YktT9Za6imIpE8RXmA==", - "dev": true, - "requires": { - "@lerna/batch-packages": "3.10.6", - "@lerna/command": "3.10.6", - "@lerna/filter-options": "3.10.6", - "@lerna/npm-run-script": "3.10.0", - "@lerna/output": "3.6.0", - "@lerna/run-parallel-batches": "3.0.0", - "@lerna/timer": "3.5.0", - "@lerna/validation-error": "3.6.0", + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/@lerna/run/-/run-3.13.1.tgz", + "integrity": "sha512-nv1oj7bsqppWm1M4ifN+/IIbVu9F4RixrbQD2okqDGYne4RQPAXyb5cEZuAzY/wyGTWWiVaZ1zpj5ogPWvH0bw==", + "dev": true, + "requires": { + "@lerna/batch-packages": "3.13.0", + "@lerna/command": "3.13.1", + "@lerna/filter-options": "3.13.0", + "@lerna/npm-run-script": "3.13.0", + "@lerna/output": "3.13.0", + "@lerna/run-parallel-batches": "3.13.0", + "@lerna/timer": "3.13.0", + "@lerna/validation-error": "3.13.0", "p-map": "^1.2.0" } }, "@lerna/run-lifecycle": { - "version": "3.10.5", - "resolved": "https://registry.npmjs.org/@lerna/run-lifecycle/-/run-lifecycle-3.10.5.tgz", - "integrity": "sha512-YPmXviaxVlhcKM6IkDTIpTq24mxOuMCilo+MTr1RLoafgB9ZTmP2AHRiFt/sy14wOsq2Zqr0wJyj8KFlDYLTkA==", + "version": "3.13.0", + "resolved": "https://registry.npmjs.org/@lerna/run-lifecycle/-/run-lifecycle-3.13.0.tgz", + "integrity": "sha512-oyiaL1biZdjpmjh6X/5C4w07wNFyiwXSSHH5GQB4Ay4BPwgq9oNhCcxRoi0UVZlZ1YwzSW8sTwLgj8emkIo3Yg==", "dev": true, "requires": { - "@lerna/npm-conf": "3.7.0", + "@lerna/npm-conf": "3.13.0", "figgy-pudding": "^3.5.1", - "libnpm": "^2.0.1" + "npm-lifecycle": "^2.1.0", + "npmlog": "^4.1.2" } }, "@lerna/run-parallel-batches": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@lerna/run-parallel-batches/-/run-parallel-batches-3.0.0.tgz", - "integrity": "sha512-Mj1ravlXF7AkkewKd9YFq9BtVrsStNrvVLedD/b2wIVbNqcxp8lS68vehXVOzoL/VWNEDotvqCQtyDBilCodGw==", + "version": "3.13.0", + "resolved": "https://registry.npmjs.org/@lerna/run-parallel-batches/-/run-parallel-batches-3.13.0.tgz", + "integrity": "sha512-bICFBR+cYVF1FFW+Tlm0EhWDioTUTM6dOiVziDEGE1UZha1dFkMYqzqdSf4bQzfLS31UW/KBd/2z8jy2OIjEjg==", "dev": true, "requires": { "p-map": "^1.2.0", @@ -1587,26 +1678,26 @@ } }, "@lerna/symlink-binary": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/@lerna/symlink-binary/-/symlink-binary-3.10.0.tgz", - "integrity": "sha512-6mQsG+iVjBo8cD8s24O+YgFrwDyUGfUQbK4ryalAXFHI817Zd4xlI3tjg3W99whCt6rt6D0s1fpf8eslMN6dSw==", + "version": "3.13.0", + "resolved": "https://registry.npmjs.org/@lerna/symlink-binary/-/symlink-binary-3.13.0.tgz", + "integrity": "sha512-obc4Y6jxywkdaCe+DB0uTxYqP0IQ8mFWvN+k/YMbwH4G2h7M7lCBWgPy8e7xw/50+1II9tT2sxgx+jMus1sTJg==", "dev": true, "requires": { - "@lerna/create-symlink": "3.6.0", - "@lerna/package": "3.7.2", + "@lerna/create-symlink": "3.13.0", + "@lerna/package": "3.13.0", "fs-extra": "^7.0.0", "p-map": "^1.2.0" } }, "@lerna/symlink-dependencies": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/@lerna/symlink-dependencies/-/symlink-dependencies-3.10.0.tgz", - "integrity": "sha512-vGpg5ydwGgQCuWNX5y7CRL38mGpuLhf1GRq9wMm7IGwnctEsdSNqvvE+LDgqtwEZASu5+vffYUkL0VlFXl8uWA==", + "version": "3.13.0", + "resolved": "https://registry.npmjs.org/@lerna/symlink-dependencies/-/symlink-dependencies-3.13.0.tgz", + "integrity": "sha512-7CyN5WYEPkbPLbqHBIQg/YiimBzb5cIGQB0E9IkLs3+racq2vmUNQZn38LOaazQacAA83seB+zWSxlI6H+eXSg==", "dev": true, "requires": { - "@lerna/create-symlink": "3.6.0", - "@lerna/resolve-symlink": "3.6.0", - "@lerna/symlink-binary": "3.10.0", + "@lerna/create-symlink": "3.13.0", + "@lerna/resolve-symlink": "3.13.0", + "@lerna/symlink-binary": "3.13.0", "fs-extra": "^7.0.0", "p-finally": "^1.0.0", "p-map": "^1.2.0", @@ -1614,40 +1705,41 @@ } }, "@lerna/timer": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/@lerna/timer/-/timer-3.5.0.tgz", - "integrity": "sha512-TAb99hqQN6E3JBGtG9iyZNPq1/DbmqgBOeNrKtdJsGvIeX/NGLgUDWMrj2h04V4O+jpBFmSf6HIld6triKmxCA==", + "version": "3.13.0", + "resolved": "https://registry.npmjs.org/@lerna/timer/-/timer-3.13.0.tgz", + "integrity": "sha512-RHWrDl8U4XNPqY5MQHkToWS9jHPnkLZEt5VD+uunCKTfzlxGnRCr3/zVr8VGy/uENMYpVP3wJa4RKGY6M0vkRw==", "dev": true }, "@lerna/validation-error": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/@lerna/validation-error/-/validation-error-3.6.0.tgz", - "integrity": "sha512-MWltncGO5VgMS0QedTlZCjFUMF/evRjDMMHrtVorkIB2Cp5xy0rkKa8iDBG43qpUWeG1giwi58yUlETBcWfILw==", + "version": "3.13.0", + "resolved": "https://registry.npmjs.org/@lerna/validation-error/-/validation-error-3.13.0.tgz", + "integrity": "sha512-SiJP75nwB8GhgwLKQfdkSnDufAaCbkZWJqEDlKOUPUvVOplRGnfL+BPQZH5nvq2BYSRXsksXWZ4UHVnQZI/HYA==", "dev": true, "requires": { - "libnpm": "^2.0.1" + "npmlog": "^4.1.2" } }, "@lerna/version": { - "version": "3.10.6", - "resolved": "https://registry.npmjs.org/@lerna/version/-/version-3.10.6.tgz", - "integrity": "sha512-77peW2ROlHHl1e/tHBUmhpb8tsO6CIdlx34XapZhUuIVykrkOuqVFFxqMecrGG8SJe0e3l1G+Fah7bJTQcG0kw==", - "dev": true, - "requires": { - "@lerna/batch-packages": "3.10.6", - "@lerna/check-working-tree": "3.10.0", - "@lerna/child-process": "3.3.0", - "@lerna/collect-updates": "3.10.1", - "@lerna/command": "3.10.6", - "@lerna/conventional-commits": "3.10.0", - "@lerna/output": "3.6.0", - "@lerna/prompt": "3.6.0", - "@lerna/run-lifecycle": "3.10.5", - "@lerna/validation-error": "3.6.0", + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/@lerna/version/-/version-3.13.1.tgz", + "integrity": "sha512-WpfKc5jZBBOJ6bFS4atPJEbHSiywQ/Gcd+vrwaEGyQHWHQZnPTvhqLuq3q9fIb9sbuhH5pSY6eehhuBrKqTnjg==", + "dev": true, + "requires": { + "@lerna/batch-packages": "3.13.0", + "@lerna/check-working-tree": "3.13.0", + "@lerna/child-process": "3.13.0", + "@lerna/collect-updates": "3.13.0", + "@lerna/command": "3.13.1", + "@lerna/conventional-commits": "3.13.0", + "@lerna/github-client": "3.13.1", + "@lerna/output": "3.13.0", + "@lerna/prompt": "3.13.0", + "@lerna/run-lifecycle": "3.13.0", + "@lerna/validation-error": "3.13.0", "chalk": "^2.3.1", "dedent": "^0.7.0", - "libnpm": "^2.0.1", "minimatch": "^3.0.4", + "npmlog": "^4.1.2", "p-map": "^1.2.0", "p-pipe": "^1.2.0", "p-reduce": "^1.0.0", @@ -1666,12 +1758,12 @@ } }, "@lerna/write-log-file": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/@lerna/write-log-file/-/write-log-file-3.6.0.tgz", - "integrity": "sha512-OkLK99V6sYXsJsYg+O9wtiFS3z6eUPaiz2e6cXJt80mfIIdI1t2dnmyua0Ib5cZWExQvx2z6Y32Wlf0MnsoNsA==", + "version": "3.13.0", + "resolved": "https://registry.npmjs.org/@lerna/write-log-file/-/write-log-file-3.13.0.tgz", + "integrity": "sha512-RibeMnDPvlL8bFYW5C8cs4mbI3AHfQef73tnJCQ/SgrXZHehmHnsyWUiE7qDQCAo+B1RfTapvSyFF69iPj326A==", "dev": true, "requires": { - "libnpm": "^2.0.1", + "npmlog": "^4.1.2", "write-file-atomic": "^2.3.0" } }, @@ -1691,182 +1783,237 @@ "integrity": "sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw==", "dev": true }, + "@octokit/endpoint": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-3.2.3.tgz", + "integrity": "sha512-yUPCt4vMIOclox13CUxzuKiPJIFo46b/6GhUnUTw5QySczN1L0DtSxgmIZrZV4SAb9EyAqrceoyrWoYVnfF2AA==", + "dev": true, + "requires": { + "deepmerge": "3.2.0", + "is-plain-object": "^2.0.4", + "universal-user-agent": "^2.0.1", + "url-template": "^2.0.8" + } + }, + "@octokit/plugin-enterprise-rest": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/@octokit/plugin-enterprise-rest/-/plugin-enterprise-rest-2.2.2.tgz", + "integrity": "sha512-CTZr64jZYhGWNTDGlSJ2mvIlFsm9OEO3LqWn9I/gmoHI4jRBp4kpHoFYNemG4oA75zUAcmbuWblb7jjP877YZw==", + "dev": true + }, + "@octokit/request": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/@octokit/request/-/request-2.4.2.tgz", + "integrity": "sha512-lxVlYYvwGbKSHXfbPk5vxEA8w4zHOH1wobado4a9EfsyD3Cbhuhus1w0Ye9Ro0eMubGO8kNy5d+xNFisM3Tvaw==", + "dev": true, + "requires": { + "@octokit/endpoint": "^3.2.0", + "deprecation": "^1.0.1", + "is-plain-object": "^2.0.4", + "node-fetch": "^2.3.0", + "once": "^1.4.0", + "universal-user-agent": "^2.0.1" + } + }, + "@octokit/rest": { + "version": "16.20.0", + "resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-16.20.0.tgz", + "integrity": "sha512-tN5j64P6QymlMzKo94DG1LRNHCwMnLg5poZlVhsCfkHhEWKpofZ1qBDr2/0w6qDLav4EA1XXMmZdNpvGhc9BDQ==", + "dev": true, + "requires": { + "@octokit/request": "2.4.2", + "before-after-hook": "^1.4.0", + "btoa-lite": "^1.0.0", + "deprecation": "^1.0.1", + "lodash.get": "^4.4.2", + "lodash.set": "^4.3.2", + "lodash.uniq": "^4.5.0", + "octokit-pagination-methods": "^1.1.0", + "once": "^1.4.0", + "universal-user-agent": "^2.0.0", + "url-template": "^2.0.8" + } + }, "@types/q": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.1.tgz", - "integrity": "sha512-eqz8c/0kwNi/OEHQfvIuJVLTst3in0e7uTKeuY+WL/zfKn0xVujOTp42bS/vUUokhK5P2BppLd9JXMOMHcgbjA==", + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.2.tgz", + "integrity": "sha512-ce5d3q03Ex0sy4R14722Rmt6MT07Ua+k4FwDfdcToYJcMKNtRVQvJ6JCAPdAmAnbRb6CsX6aYb9m96NGod9uTw==", "dev": true }, "@webassemblyjs/ast": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.7.11.tgz", - "integrity": "sha512-ZEzy4vjvTzScC+SH8RBssQUawpaInUdMTYwYYLh54/s8TuT0gBLuyUnppKsVyZEi876VmmStKsUs28UxPgdvrA==", + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.8.5.tgz", + "integrity": "sha512-aJMfngIZ65+t71C3y2nBBg5FFG0Okt9m0XEgWZ7Ywgn1oMAT8cNwx00Uv1cQyHtidq0Xn94R4TAywO+LCQ+ZAQ==", "dev": true, "requires": { - "@webassemblyjs/helper-module-context": "1.7.11", - "@webassemblyjs/helper-wasm-bytecode": "1.7.11", - "@webassemblyjs/wast-parser": "1.7.11" + "@webassemblyjs/helper-module-context": "1.8.5", + "@webassemblyjs/helper-wasm-bytecode": "1.8.5", + "@webassemblyjs/wast-parser": "1.8.5" } }, "@webassemblyjs/floating-point-hex-parser": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.7.11.tgz", - "integrity": "sha512-zY8dSNyYcgzNRNT666/zOoAyImshm3ycKdoLsyDw/Bwo6+/uktb7p4xyApuef1dwEBo/U/SYQzbGBvV+nru2Xg==", + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.8.5.tgz", + "integrity": "sha512-9p+79WHru1oqBh9ewP9zW95E3XAo+90oth7S5Re3eQnECGq59ly1Ri5tsIipKGpiStHsUYmY3zMLqtk3gTcOtQ==", "dev": true }, "@webassemblyjs/helper-api-error": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.7.11.tgz", - "integrity": "sha512-7r1qXLmiglC+wPNkGuXCvkmalyEstKVwcueZRP2GNC2PAvxbLYwLLPr14rcdJaE4UtHxQKfFkuDFuv91ipqvXg==", + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.8.5.tgz", + "integrity": "sha512-Za/tnzsvnqdaSPOUXHyKJ2XI7PDX64kWtURyGiJJZKVEdFOsdKUCPTNEVFZq3zJ2R0G5wc2PZ5gvdTRFgm81zA==", "dev": true }, "@webassemblyjs/helper-buffer": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.7.11.tgz", - "integrity": "sha512-MynuervdylPPh3ix+mKZloTcL06P8tenNH3sx6s0qE8SLR6DdwnfgA7Hc9NSYeob2jrW5Vql6GVlsQzKQCa13w==", + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.8.5.tgz", + "integrity": "sha512-Ri2R8nOS0U6G49Q86goFIPNgjyl6+oE1abW1pS84BuhP1Qcr5JqMwRFT3Ah3ADDDYGEgGs1iyb1DGX+kAi/c/Q==", "dev": true }, "@webassemblyjs/helper-code-frame": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.7.11.tgz", - "integrity": "sha512-T8ESC9KMXFTXA5urJcyor5cn6qWeZ4/zLPyWeEXZ03hj/x9weSokGNkVCdnhSabKGYWxElSdgJ+sFa9G/RdHNw==", + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.8.5.tgz", + "integrity": "sha512-VQAadSubZIhNpH46IR3yWO4kZZjMxN1opDrzePLdVKAZ+DFjkGD/rf4v1jap744uPVU6yjL/smZbRIIJTOUnKQ==", "dev": true, "requires": { - "@webassemblyjs/wast-printer": "1.7.11" + "@webassemblyjs/wast-printer": "1.8.5" } }, "@webassemblyjs/helper-fsm": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.7.11.tgz", - "integrity": "sha512-nsAQWNP1+8Z6tkzdYlXT0kxfa2Z1tRTARd8wYnc/e3Zv3VydVVnaeePgqUzFrpkGUyhUUxOl5ML7f1NuT+gC0A==", + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.8.5.tgz", + "integrity": "sha512-kRuX/saORcg8se/ft6Q2UbRpZwP4y7YrWsLXPbbmtepKr22i8Z4O3V5QE9DbZK908dh5Xya4Un57SDIKwB9eow==", "dev": true }, "@webassemblyjs/helper-module-context": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.7.11.tgz", - "integrity": "sha512-JxfD5DX8Ygq4PvXDucq0M+sbUFA7BJAv/GGl9ITovqE+idGX+J3QSzJYz+LwQmL7fC3Rs+utvWoJxDb6pmC0qg==", - "dev": true + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.8.5.tgz", + "integrity": "sha512-/O1B236mN7UNEU4t9X7Pj38i4VoU8CcMHyy3l2cV/kIF4U5KoHXDVqcDuOs1ltkac90IM4vZdHc52t1x8Yfs3g==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.8.5", + "mamacro": "^0.0.3" + } }, "@webassemblyjs/helper-wasm-bytecode": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.7.11.tgz", - "integrity": "sha512-cMXeVS9rhoXsI9LLL4tJxBgVD/KMOKXuFqYb5oCJ/opScWpkCMEz9EJtkonaNcnLv2R3K5jIeS4TRj/drde1JQ==", + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.8.5.tgz", + "integrity": "sha512-Cu4YMYG3Ddl72CbmpjU/wbP6SACcOPVbHN1dI4VJNJVgFwaKf1ppeFJrwydOG3NDHxVGuCfPlLZNyEdIYlQ6QQ==", "dev": true }, "@webassemblyjs/helper-wasm-section": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.7.11.tgz", - "integrity": "sha512-8ZRY5iZbZdtNFE5UFunB8mmBEAbSI3guwbrsCl4fWdfRiAcvqQpeqd5KHhSWLL5wuxo53zcaGZDBU64qgn4I4Q==", + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.8.5.tgz", + "integrity": "sha512-VV083zwR+VTrIWWtgIUpqfvVdK4ff38loRmrdDBgBT8ADXYsEZ5mPQ4Nde90N3UYatHdYoDIFb7oHzMncI02tA==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.7.11", - "@webassemblyjs/helper-buffer": "1.7.11", - "@webassemblyjs/helper-wasm-bytecode": "1.7.11", - "@webassemblyjs/wasm-gen": "1.7.11" + "@webassemblyjs/ast": "1.8.5", + "@webassemblyjs/helper-buffer": "1.8.5", + "@webassemblyjs/helper-wasm-bytecode": "1.8.5", + "@webassemblyjs/wasm-gen": "1.8.5" } }, "@webassemblyjs/ieee754": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.7.11.tgz", - "integrity": "sha512-Mmqx/cS68K1tSrvRLtaV/Lp3NZWzXtOHUW2IvDvl2sihAwJh4ACE0eL6A8FvMyDG9abes3saB6dMimLOs+HMoQ==", + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.8.5.tgz", + "integrity": "sha512-aaCvQYrvKbY/n6wKHb/ylAJr27GglahUO89CcGXMItrOBqRarUMxWLJgxm9PJNuKULwN5n1csT9bYoMeZOGF3g==", "dev": true, "requires": { "@xtuc/ieee754": "^1.2.0" } }, "@webassemblyjs/leb128": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.7.11.tgz", - "integrity": "sha512-vuGmgZjjp3zjcerQg+JA+tGOncOnJLWVkt8Aze5eWQLwTQGNgVLcyOTqgSCxWTR4J42ijHbBxnuRaL1Rv7XMdw==", + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.8.5.tgz", + "integrity": "sha512-plYUuUwleLIziknvlP8VpTgO4kqNaH57Y3JnNa6DLpu/sGcP6hbVdfdX5aHAV716pQBKrfuU26BJK29qY37J7A==", "dev": true, "requires": { - "@xtuc/long": "4.2.1" + "@xtuc/long": "4.2.2" } }, "@webassemblyjs/utf8": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.7.11.tgz", - "integrity": "sha512-C6GFkc7aErQIAH+BMrIdVSmW+6HSe20wg57HEC1uqJP8E/xpMjXqQUxkQw07MhNDSDcGpxI9G5JSNOQCqJk4sA==", + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.8.5.tgz", + "integrity": "sha512-U7zgftmQriw37tfD934UNInokz6yTmn29inT2cAetAsaU9YeVCveWEwhKL1Mg4yS7q//NGdzy79nlXh3bT8Kjw==", "dev": true }, "@webassemblyjs/wasm-edit": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.7.11.tgz", - "integrity": "sha512-FUd97guNGsCZQgeTPKdgxJhBXkUbMTY6hFPf2Y4OedXd48H97J+sOY2Ltaq6WGVpIH8o/TGOVNiVz/SbpEMJGg==", + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.8.5.tgz", + "integrity": "sha512-A41EMy8MWw5yvqj7MQzkDjU29K7UJq1VrX2vWLzfpRHt3ISftOXqrtojn7nlPsZ9Ijhp5NwuODuycSvfAO/26Q==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.7.11", - "@webassemblyjs/helper-buffer": "1.7.11", - "@webassemblyjs/helper-wasm-bytecode": "1.7.11", - "@webassemblyjs/helper-wasm-section": "1.7.11", - "@webassemblyjs/wasm-gen": "1.7.11", - "@webassemblyjs/wasm-opt": "1.7.11", - "@webassemblyjs/wasm-parser": "1.7.11", - "@webassemblyjs/wast-printer": "1.7.11" + "@webassemblyjs/ast": "1.8.5", + "@webassemblyjs/helper-buffer": "1.8.5", + "@webassemblyjs/helper-wasm-bytecode": "1.8.5", + "@webassemblyjs/helper-wasm-section": "1.8.5", + "@webassemblyjs/wasm-gen": "1.8.5", + "@webassemblyjs/wasm-opt": "1.8.5", + "@webassemblyjs/wasm-parser": "1.8.5", + "@webassemblyjs/wast-printer": "1.8.5" } }, "@webassemblyjs/wasm-gen": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.7.11.tgz", - "integrity": "sha512-U/KDYp7fgAZX5KPfq4NOupK/BmhDc5Kjy2GIqstMhvvdJRcER/kUsMThpWeRP8BMn4LXaKhSTggIJPOeYHwISA==", + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.8.5.tgz", + "integrity": "sha512-BCZBT0LURC0CXDzj5FXSc2FPTsxwp3nWcqXQdOZE4U7h7i8FqtFK5Egia6f9raQLpEKT1VL7zr4r3+QX6zArWg==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.7.11", - "@webassemblyjs/helper-wasm-bytecode": "1.7.11", - "@webassemblyjs/ieee754": "1.7.11", - "@webassemblyjs/leb128": "1.7.11", - "@webassemblyjs/utf8": "1.7.11" + "@webassemblyjs/ast": "1.8.5", + "@webassemblyjs/helper-wasm-bytecode": "1.8.5", + "@webassemblyjs/ieee754": "1.8.5", + "@webassemblyjs/leb128": "1.8.5", + "@webassemblyjs/utf8": "1.8.5" } }, "@webassemblyjs/wasm-opt": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.7.11.tgz", - "integrity": "sha512-XynkOwQyiRidh0GLua7SkeHvAPXQV/RxsUeERILmAInZegApOUAIJfRuPYe2F7RcjOC9tW3Cb9juPvAC/sCqvg==", + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.8.5.tgz", + "integrity": "sha512-HKo2mO/Uh9A6ojzu7cjslGaHaUU14LdLbGEKqTR7PBKwT6LdPtLLh9fPY33rmr5wcOMrsWDbbdCHq4hQUdd37Q==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.7.11", - "@webassemblyjs/helper-buffer": "1.7.11", - "@webassemblyjs/wasm-gen": "1.7.11", - "@webassemblyjs/wasm-parser": "1.7.11" + "@webassemblyjs/ast": "1.8.5", + "@webassemblyjs/helper-buffer": "1.8.5", + "@webassemblyjs/wasm-gen": "1.8.5", + "@webassemblyjs/wasm-parser": "1.8.5" } }, "@webassemblyjs/wasm-parser": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.7.11.tgz", - "integrity": "sha512-6lmXRTrrZjYD8Ng8xRyvyXQJYUQKYSXhJqXOBLw24rdiXsHAOlvw5PhesjdcaMadU/pyPQOJ5dHreMjBxwnQKg==", + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.8.5.tgz", + "integrity": "sha512-pi0SYE9T6tfcMkthwcgCpL0cM9nRYr6/6fjgDtL6q/ZqKHdMWvxitRi5JcZ7RI4SNJJYnYNaWy5UUrHQy998lw==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.7.11", - "@webassemblyjs/helper-api-error": "1.7.11", - "@webassemblyjs/helper-wasm-bytecode": "1.7.11", - "@webassemblyjs/ieee754": "1.7.11", - "@webassemblyjs/leb128": "1.7.11", - "@webassemblyjs/utf8": "1.7.11" + "@webassemblyjs/ast": "1.8.5", + "@webassemblyjs/helper-api-error": "1.8.5", + "@webassemblyjs/helper-wasm-bytecode": "1.8.5", + "@webassemblyjs/ieee754": "1.8.5", + "@webassemblyjs/leb128": "1.8.5", + "@webassemblyjs/utf8": "1.8.5" } }, "@webassemblyjs/wast-parser": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.7.11.tgz", - "integrity": "sha512-lEyVCg2np15tS+dm7+JJTNhNWq9yTZvi3qEhAIIOaofcYlUp0UR5/tVqOwa/gXYr3gjwSZqw+/lS9dscyLelbQ==", + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.8.5.tgz", + "integrity": "sha512-daXC1FyKWHF1i11obK086QRlsMsY4+tIOKgBqI1lxAnkp9xe9YMcgOxm9kLe+ttjs5aWV2KKE1TWJCN57/Btsg==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.7.11", - "@webassemblyjs/floating-point-hex-parser": "1.7.11", - "@webassemblyjs/helper-api-error": "1.7.11", - "@webassemblyjs/helper-code-frame": "1.7.11", - "@webassemblyjs/helper-fsm": "1.7.11", - "@xtuc/long": "4.2.1" + "@webassemblyjs/ast": "1.8.5", + "@webassemblyjs/floating-point-hex-parser": "1.8.5", + "@webassemblyjs/helper-api-error": "1.8.5", + "@webassemblyjs/helper-code-frame": "1.8.5", + "@webassemblyjs/helper-fsm": "1.8.5", + "@xtuc/long": "4.2.2" } }, "@webassemblyjs/wast-printer": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.7.11.tgz", - "integrity": "sha512-m5vkAsuJ32QpkdkDOUPGSltrg8Cuk3KBx4YrmAGQwCZPRdUHXxG4phIOuuycLemHFr74sWL9Wthqss4fzdzSwg==", + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.8.5.tgz", + "integrity": "sha512-w0U0pD4EhlnvRyeJzBqaVSJAo9w/ce7/WPogeXLzGkO6hzhr4GnQIZ4W4uUt5b9ooAaXPtnXlj0gzsXEOUNYMg==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.7.11", - "@webassemblyjs/wast-parser": "1.7.11", - "@xtuc/long": "4.2.1" + "@webassemblyjs/ast": "1.8.5", + "@webassemblyjs/wast-parser": "1.8.5", + "@xtuc/long": "4.2.2" } }, "@xtuc/ieee754": { @@ -1876,9 +2023,9 @@ "dev": true }, "@xtuc/long": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.1.tgz", - "integrity": "sha512-FZdkNBDqBRHKQ2MEbSC17xnPFOhZxeJ2YGSfr2BKf3sujG49Qe3bB+rGCwQfIaA7WHnGeGkSijX4FuBCdrzW/g==", + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", "dev": true }, "JSONStream": { @@ -2006,9 +2153,9 @@ "dev": true }, "ansi-colors": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.3.tgz", - "integrity": "sha512-LEHHyuhlPY3TmuUYMh2oz89lTShfvgbmzaBcxve9t/9Wuy7Dwf4yoAKcND7KFT1HAQfqZ12qtc+DUrBMeKF9nw==", + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.4.tgz", + "integrity": "sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA==", "dev": true }, "ansi-escapes": { @@ -2024,9 +2171,9 @@ "dev": true }, "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" }, "ansi-styles": { "version": "3.2.1", @@ -2044,6 +2191,17 @@ "requires": { "micromatch": "^3.1.4", "normalize-path": "^2.1.1" + }, + "dependencies": { + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "requires": { + "remove-trailing-separator": "^1.0.1" + } + } } }, "append-transform": { @@ -2258,18 +2416,18 @@ "dev": true }, "async": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.1.tgz", - "integrity": "sha512-fNEiL2+AZt6AlAw/29Cr0UDe4sRAHCpEHh54WMz+Bb7QfNcFw4h3loofyJpLeQs4Yx7yuqu/2dLgM5hKOs6HlQ==", + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.2.tgz", + "integrity": "sha512-H1qVYh1MYhEEFLsP97cVKqCGo7KfCyTt6uEWqsTBr9SO84oK9Uwbyd/yCW+6rKJLHksBNUVWZDAjfS+Ccx0Bbg==", "dev": true, "requires": { - "lodash": "^4.17.10" + "lodash": "^4.17.11" } }, "async-each": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.1.tgz", - "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0=", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.2.tgz", + "integrity": "sha512-6xrbvN0MOBKSJDdonmSSz2OwFSgxRaVtBDes26mj9KIGtDo+g9xosFRSC+i1gQh2oAN/tQ62AI/pGZGQjVOiRg==", "dev": true }, "async-foreach": { @@ -2296,13 +2454,13 @@ "dev": true }, "autoprefixer": { - "version": "9.4.7", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.4.7.tgz", - "integrity": "sha512-qS5wW6aXHkm53Y4z73tFGsUhmZu4aMPV9iHXYlF0c/wxjknXNHuj/1cIQb+6YH692DbJGGWcckAXX+VxKvahMA==", + "version": "9.5.0", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.5.0.tgz", + "integrity": "sha512-hMKcyHsZn5+qL6AUeP3c8OyuteZ4VaUlg+fWbyl8z7PqsKHF/Bf8/px3K6AT8aMzDkBo8Bc11245MM+itDBOxQ==", "dev": true, "requires": { - "browserslist": "^4.4.1", - "caniuse-lite": "^1.0.30000932", + "browserslist": "^4.4.2", + "caniuse-lite": "^1.0.30000947", "normalize-range": "^0.1.2", "num2fraction": "^1.2.2", "postcss": "^7.0.14", @@ -2466,6 +2624,14 @@ "requires": { "core-js": "^2.4.0", "regenerator-runtime": "^0.11.0" + }, + "dependencies": { + "core-js": { + "version": "2.6.5", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.5.tgz", + "integrity": "sha512-klh/kDpwX8hryYL14M9w/xei6vrv6sE8gTHDG7/T/+SEovB/G4ejwcfE/CBzO6Edsu+OETZMZ3wcX/EjUkrl5A==", + "dev": true + } } }, "babel-template": { @@ -2632,6 +2798,12 @@ "tweetnacl": "^0.14.3" } }, + "before-after-hook": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-1.4.0.tgz", + "integrity": "sha512-l5r9ir56nda3qu14nAXIlyq1MmUSs0meCIaFAh8HwkFwP1F8eToOuS3ah2VAHHcY04jaYD7FpJC5JTXHYRbkzg==", + "dev": true + }, "better-assert": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/better-assert/-/better-assert-1.0.2.tgz", @@ -2658,23 +2830,10 @@ "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", "dev": true }, - "bin-links": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/bin-links/-/bin-links-1.1.2.tgz", - "integrity": "sha512-8eEHVgYP03nILphilltWjeIjMbKyJo3wvp9K816pHbhP301ismzw15mxAAEVQ/USUwcP++1uNrbERbp8lOA6Fg==", - "dev": true, - "requires": { - "bluebird": "^3.5.0", - "cmd-shim": "^2.0.2", - "gentle-fs": "^2.0.0", - "graceful-fs": "^4.1.11", - "write-file-atomic": "^2.3.0" - } - }, "binary-extensions": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.12.0.tgz", - "integrity": "sha512-DYWGk01lDcxeS/K9IHPGWfT8PsJmbXRtRd2Sx72Tnb8pcYZQFF1oSDb8hJtS1vhp212q1Rzi5dUf9+nq0o9UIg==", + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.0.tgz", + "integrity": "sha512-EgmjVLMn22z7eGGv3kcnHwSnJXmFHjISTY9E/S5lIcTD3Oxw05QTcBLNkJFzcb3cNueUdF/IN4U+d78V0zO8Hw==", "dev": true }, "blob": { @@ -2873,16 +3032,22 @@ } }, "browserslist": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.4.1.tgz", - "integrity": "sha512-pEBxEXg7JwaakBXjATYw/D1YZh4QUSCX/Mnd/wnqSRPPSi1U39iDhDoKGoBUcraKdxDlrYqJxSI5nNvD+dWP2A==", + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.5.2.tgz", + "integrity": "sha512-zmJVLiKLrzko0iszd/V4SsjTaomFeoVzQGYYOYgRgsbh7WNh95RgDB0CmBdFWYs/3MyFSt69NypjL/h3iaddKQ==", "dev": true, "requires": { - "caniuse-lite": "^1.0.30000929", - "electron-to-chromium": "^1.3.103", - "node-releases": "^1.1.3" + "caniuse-lite": "^1.0.30000951", + "electron-to-chromium": "^1.3.116", + "node-releases": "^1.1.11" } }, + "btoa-lite": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/btoa-lite/-/btoa-lite-1.0.0.tgz", + "integrity": "sha1-M3dm2hWAEhD92VbCLpxokaudAzc=", + "dev": true + }, "buffer": { "version": "4.9.1", "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz", @@ -3071,9 +3236,9 @@ "dev": true }, "camelcase": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.0.0.tgz", - "integrity": "sha512-faqwZqnWxbxn+F1d399ygeamQNy3lPp/H9H6rNrqYh4FSVCtcY+3cub1MxA8o9mDd55mM8Aghuu/kuyYA6VTsA==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", + "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", "dev": true }, "camelcase-keys": { @@ -3085,14 +3250,6 @@ "camelcase": "^4.1.0", "map-obj": "^2.0.0", "quick-lru": "^1.0.0" - }, - "dependencies": { - "camelcase": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", - "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", - "dev": true - } } }, "caniuse-api": { @@ -3120,15 +3277,15 @@ } }, "caniuse-db": { - "version": "1.0.30000933", - "resolved": "https://registry.npmjs.org/caniuse-db/-/caniuse-db-1.0.30000933.tgz", - "integrity": "sha512-DdIlPHIGtjUS2sH/yioeS9CS0JsWk8zGqid0OdfYhwJvufYZKZPcgerEX9E7PWOnshDc9IndnEJDoqauv+JUHA==", + "version": "1.0.30000953", + "resolved": "https://registry.npmjs.org/caniuse-db/-/caniuse-db-1.0.30000953.tgz", + "integrity": "sha512-MP00apZPeFphU+Ecm/9eBIvg38oyNsmoSl8Nzws3e4BpGT0EZi2q9MZhu+PZzSoPQ06JsJyTnjJfM9QeMpC4Xg==", "dev": true }, "caniuse-lite": { - "version": "1.0.30000933", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000933.tgz", - "integrity": "sha512-d3QXv7eFTU40DSedSP81dV/ajcGSKpT+GW+uhtWmLvQm9bPk0KK++7i1e2NSW/CXGZhWFt2mFbFtCJ5I5bMuVA==", + "version": "1.0.30000953", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000953.tgz", + "integrity": "sha512-2stdF/q5MZTDhQ6uC65HWbSgI9UMKbc7+HKvlwH5JBIslKoD/J9dvabP4J4Uiifu3NljbHj3iMpfYflLSNt09A==", "dev": true }, "caseless": { @@ -3180,24 +3337,23 @@ "dev": true }, "chokidar": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.0.4.tgz", - "integrity": "sha512-z9n7yt9rOvIJrMhvDtDictKrkFHeihkNl6uWMmZlmL6tJtX9Cs+87oK+teBx+JIgzvbX3yZHT3eF8vpbDxHJXQ==", + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.5.tgz", + "integrity": "sha512-i0TprVWp+Kj4WRPtInjexJ8Q+BqTE909VpH8xVhXrJkoc5QC8VO9TryGOqTr+2hljzc1sC62t22h5tZePodM/A==", "dev": true, "requires": { "anymatch": "^2.0.0", - "async-each": "^1.0.0", - "braces": "^2.3.0", - "fsevents": "^1.2.2", + "async-each": "^1.0.1", + "braces": "^2.3.2", + "fsevents": "^1.2.7", "glob-parent": "^3.1.0", - "inherits": "^2.0.1", + "inherits": "^2.0.3", "is-binary-path": "^1.0.0", "is-glob": "^4.0.0", - "lodash.debounce": "^4.0.8", - "normalize-path": "^2.1.1", + "normalize-path": "^3.0.0", "path-is-absolute": "^1.0.0", - "readdirp": "^2.0.0", - "upath": "^1.0.5" + "readdirp": "^2.2.1", + "upath": "^1.1.1" } }, "chownr": { @@ -3320,20 +3476,9 @@ } }, "cli-spinners": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-1.3.1.tgz", - "integrity": "sha512-1QL4544moEsDVH9T/l6Cemov/37iv1RtoKf7NJ04A60+4MREXNfx/QvavbH6QoGdsD4N4Mwy49cmaINR/o2mdg==" - }, - "cli-table3": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.5.1.tgz", - "integrity": "sha512-7Qg2Jrep1S/+Q3EceiZtQcDPWxhAvBw+ERf1162v4sikJrvojMHFqXt8QIVha8UlH9rgU0BeWPytZ9/TzYqlUw==", - "dev": true, - "requires": { - "colors": "^1.1.2", - "object-assign": "^4.1.0", - "string-width": "^2.1.1" - } + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.0.0.tgz", + "integrity": "sha512-yiEBmhaKPPeBj7wWm4GEdtPZK940p9pl3EANIrnJ3JnvWyrPjcFcsEq6qRUuQ7fzB0+Y82ld3p6B34xo95foWw==" }, "cli-width": { "version": "2.2.0", @@ -3350,6 +3495,39 @@ "string-width": "^2.1.1", "strip-ansi": "^4.0.0", "wrap-ansi": "^2.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + } } }, "clone": { @@ -3466,9 +3644,9 @@ } }, "colors": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.3.3.tgz", - "integrity": "sha512-mmGt/1pZqYRjMxB1axhTo16/snVZ5krrKkcmMeVKxzECMMXoCgnvTPp10QgHfcbQZw8Dq2jMNG6je4JlWU0gWg==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz", + "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=", "dev": true }, "columnify": { @@ -3567,25 +3745,25 @@ "dev": true }, "compressible": { - "version": "2.0.15", - "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.15.tgz", - "integrity": "sha512-4aE67DL33dSW9gw4CI2H/yTxqHLNcxp0yS6jB+4h+wr3e43+1z7vm0HU9qXOH8j+qjKuL8+UtkOxYQSMq60Ylw==", + "version": "2.0.16", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.16.tgz", + "integrity": "sha512-JQfEOdnI7dASwCuSPWIeVYwc/zMsu/+tRhoUvEfXz2gxOA2DNjmG5vhtFdBlhWPPGo+RdT9S3tgc/uH5qgDiiA==", "dev": true, "requires": { - "mime-db": ">= 1.36.0 < 2" + "mime-db": ">= 1.38.0 < 2" } }, "compression": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.3.tgz", - "integrity": "sha512-HSjyBG5N1Nnz7tF2+O7A9XUhyjru71/fwgNb7oIsEVHR0WShfs2tIS/EySLgiTe98aOK18YDlMXpzjCXY/n9mg==", + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", + "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", "dev": true, "requires": { "accepts": "~1.3.5", "bytes": "3.0.0", - "compressible": "~2.0.14", + "compressible": "~2.0.16", "debug": "2.6.9", - "on-headers": "~1.0.1", + "on-headers": "~1.0.2", "safe-buffer": "5.1.2", "vary": "~1.1.2" }, @@ -3688,9 +3866,9 @@ "dev": true }, "conventional-changelog-angular": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-5.0.2.tgz", - "integrity": "sha512-yx7m7lVrXmt4nKWQgWZqxSALEiAKZhOAcbxdUaU9575mB0CzXVbgrgpfSnSP7OqWDUTYGD0YVJ0MSRdyOPgAwA==", + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-5.0.3.tgz", + "integrity": "sha512-YD1xzH7r9yXQte/HF9JBuEDfvjxxwDGGwZU1+ndanbY0oFgA+Po1T9JDSpPLdP0pZT6MhCAsdvFKC4TJ4MTJTA==", "dev": true, "requires": { "compare-func": "^1.3.1", @@ -3698,12 +3876,12 @@ } }, "conventional-changelog-core": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/conventional-changelog-core/-/conventional-changelog-core-3.1.5.tgz", - "integrity": "sha512-iwqAotS4zk0wA4S84YY1JCUG7X3LxaRjJxuUo6GI4dZuIy243j5nOg/Ora35ExT4DOiw5dQbMMQvw2SUjh6moQ==", + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/conventional-changelog-core/-/conventional-changelog-core-3.1.6.tgz", + "integrity": "sha512-5teTAZOtJ4HLR6384h50nPAaKdDr+IaU0rnD2Gg2C3MS7hKsEPH8pZxrDNqam9eOSPQg9tET6uZY79zzgSz+ig==", "dev": true, "requires": { - "conventional-changelog-writer": "^4.0.2", + "conventional-changelog-writer": "^4.0.3", "conventional-commits-parser": "^3.0.1", "dateformat": "^3.0.0", "get-pkg-repo": "^1.0.0", @@ -3792,6 +3970,12 @@ "pify": "^3.0.0" } }, + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + }, "read-pkg": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", @@ -3822,15 +4006,15 @@ "dev": true }, "conventional-changelog-writer": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/conventional-changelog-writer/-/conventional-changelog-writer-4.0.2.tgz", - "integrity": "sha512-d8/FQY/fix2xXEBUhOo8u3DCbyEw3UOQgYHxLsPDw+wHUDma/GQGAGsGtoH876WyNs32fViHmTOUrgRKVLvBug==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/conventional-changelog-writer/-/conventional-changelog-writer-4.0.3.tgz", + "integrity": "sha512-bIlpSiQtQZ1+nDVHEEh798Erj2jhN/wEjyw9sfxY9es6h7pREE5BNJjfv0hXGH/FTrAsEpHUq4xzK99eePpwuA==", "dev": true, "requires": { "compare-func": "^1.3.1", "conventional-commits-filter": "^2.0.1", "dateformat": "^3.0.0", - "handlebars": "^4.0.2", + "handlebars": "^4.1.0", "json-stringify-safe": "^5.0.1", "lodash": "^4.2.1", "meow": "^4.0.0", @@ -3922,9 +4106,27 @@ "dev": true }, "core-js": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.3.tgz", - "integrity": "sha512-l00tmFFZOBHtYhN4Cz7k32VM7vTn3rE2ANjQDxdEN6zmXZ/xq1jQuutnmHvMG1ZJ7xd72+TA5YpUK8wz3rWsfQ==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.0.0.tgz", + "integrity": "sha512-WBmxlgH2122EzEJ6GH8o9L/FeoUKxxxZ6q6VUxoTlsE4EvbTWKJb447eyVxTEuq0LpXjlq/kCB2qgBvsYRkLvQ==", + "dev": true + }, + "core-js-compat": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.0.0.tgz", + "integrity": "sha512-W/Ppz34uUme3LmXWjMgFlYyGnbo1hd9JvA0LNQ4EmieqVjg2GPYbj3H6tcdP2QGPGWdRKUqZVbVKLNIFVs/HiA==", + "dev": true, + "requires": { + "browserslist": "^4.5.1", + "core-js": "3.0.0", + "core-js-pure": "3.0.0", + "semver": "^5.6.0" + } + }, + "core-js-pure": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.0.0.tgz", + "integrity": "sha512-yPiS3fQd842RZDgo/TAKGgS0f3p2nxssF1H65DIZvZv0Od5CygP8puHXn3IQiM/39VAvgCbdaMQpresrbGgt9g==", "dev": true }, "core-util-is": { @@ -3934,14 +4136,14 @@ "dev": true }, "cosmiconfig": { - "version": "5.0.7", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.0.7.tgz", - "integrity": "sha512-PcLqxTKiDmNT6pSpy4N6KtuPwb53W+2tzNvwOZw0WH9N6O0vLIBq0x8aj8Oj75ere4YcGi48bDFCL+3fRJdlNA==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.0.tgz", + "integrity": "sha512-nxt+Nfc3JAqf4WIWd0jXLjTJZmsPLrA9DDc4nRw2KFJQJK7DNooqSXrNI7tzLG50CF8axczly5UV929tBmh/7g==", "dev": true, "requires": { "import-fresh": "^2.0.0", "is-directory": "^0.3.1", - "js-yaml": "^3.9.0", + "js-yaml": "^3.13.0", "parse-json": "^4.0.0" }, "dependencies": { @@ -3952,9 +4154,9 @@ "dev": true }, "js-yaml": { - "version": "3.12.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.1.tgz", - "integrity": "sha512-um46hB9wNOKlwkHgiuyEVAybXBjwFUV0Z/RaHJblRd9DXltue9FTYvzCr9ErQrK9Adz5MU4gHWVaNUfdmrC8qA==", + "version": "3.13.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.0.tgz", + "integrity": "sha512-pZZoSxcCYco+DIKBTimr67J6Hy+EYGZDY/HCWC+iAEA9h1ByhMXAIVUXMcMFpOCxQ/xjXmPI2MkDL5HRm5eFrQ==", "dev": true, "requires": { "argparse": "^1.0.7", @@ -4247,9 +4449,9 @@ "dev": true }, "css-what": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.2.tgz", - "integrity": "sha512-wan8dMWQ0GUeF7DGEPVjhHemVW/vy6xUYmFzRY8RYqgA0JtXC9rJmbScBjqSu6dg9q0lwPQy6ZAmJVr3PPTvqQ==", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.3.tgz", + "integrity": "sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg==", "dev": true }, "cssesc": { @@ -4394,40 +4596,40 @@ } }, "cssnano-preset-default": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-4.0.6.tgz", - "integrity": "sha512-UPboYbFaJFtDUhJ4fqctThWbbyF4q01/7UhsZbLzp35l+nUxtzh1SifoVlEfyLM3n3Z0htd8B1YlCxy9i+bQvg==", + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-4.0.7.tgz", + "integrity": "sha512-x0YHHx2h6p0fCl1zY9L9roD7rnlltugGu7zXSKQx6k2rYw0Hi3IqxcoAGF7u9Q5w1nt7vK0ulxV8Lo+EvllGsA==", "dev": true, "requires": { "css-declaration-sorter": "^4.0.1", "cssnano-util-raw-cache": "^4.0.1", "postcss": "^7.0.0", - "postcss-calc": "^7.0.0", - "postcss-colormin": "^4.0.2", + "postcss-calc": "^7.0.1", + "postcss-colormin": "^4.0.3", "postcss-convert-values": "^4.0.1", - "postcss-discard-comments": "^4.0.1", + "postcss-discard-comments": "^4.0.2", "postcss-discard-duplicates": "^4.0.2", "postcss-discard-empty": "^4.0.1", "postcss-discard-overridden": "^4.0.1", - "postcss-merge-longhand": "^4.0.10", - "postcss-merge-rules": "^4.0.2", + "postcss-merge-longhand": "^4.0.11", + "postcss-merge-rules": "^4.0.3", "postcss-minify-font-values": "^4.0.2", - "postcss-minify-gradients": "^4.0.1", - "postcss-minify-params": "^4.0.1", - "postcss-minify-selectors": "^4.0.1", + "postcss-minify-gradients": "^4.0.2", + "postcss-minify-params": "^4.0.2", + "postcss-minify-selectors": "^4.0.2", "postcss-normalize-charset": "^4.0.1", - "postcss-normalize-display-values": "^4.0.1", - "postcss-normalize-positions": "^4.0.1", - "postcss-normalize-repeat-style": "^4.0.1", - "postcss-normalize-string": "^4.0.1", - "postcss-normalize-timing-functions": "^4.0.1", + "postcss-normalize-display-values": "^4.0.2", + "postcss-normalize-positions": "^4.0.2", + "postcss-normalize-repeat-style": "^4.0.2", + "postcss-normalize-string": "^4.0.2", + "postcss-normalize-timing-functions": "^4.0.2", "postcss-normalize-unicode": "^4.0.1", "postcss-normalize-url": "^4.0.1", - "postcss-normalize-whitespace": "^4.0.1", - "postcss-ordered-values": "^4.1.1", - "postcss-reduce-initial": "^4.0.2", - "postcss-reduce-transforms": "^4.0.1", - "postcss-svgo": "^4.0.1", + "postcss-normalize-whitespace": "^4.0.2", + "postcss-ordered-values": "^4.1.2", + "postcss-reduce-initial": "^4.0.3", + "postcss-reduce-transforms": "^4.0.2", + "postcss-svgo": "^4.0.2", "postcss-unique-selectors": "^4.0.1" }, "dependencies": { @@ -4474,12 +4676,6 @@ "simple-swizzle": "^0.2.2" } }, - "colors": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz", - "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=", - "dev": true - }, "cssesc": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-2.0.0.tgz", @@ -4523,9 +4719,9 @@ } }, "js-yaml": { - "version": "3.12.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.1.tgz", - "integrity": "sha512-um46hB9wNOKlwkHgiuyEVAybXBjwFUV0Z/RaHJblRd9DXltue9FTYvzCr9ErQrK9Adz5MU4gHWVaNUfdmrC8qA==", + "version": "3.13.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.0.tgz", + "integrity": "sha512-pZZoSxcCYco+DIKBTimr67J6Hy+EYGZDY/HCWC+iAEA9h1ByhMXAIVUXMcMFpOCxQ/xjXmPI2MkDL5HRm5eFrQ==", "dev": true, "requires": { "argparse": "^1.0.7", @@ -4551,9 +4747,9 @@ } }, "postcss-colormin": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-4.0.2.tgz", - "integrity": "sha512-1QJc2coIehnVFsz0otges8kQLsryi4lo19WD+U5xCWvXd0uw/Z+KKYnbiNDCnO9GP+PvErPHCG0jNvWTngk9Rw==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-4.0.3.tgz", + "integrity": "sha512-WyQFAdDZpExQh32j0U0feWisZ0dmOtPl44qYmJKkq9xFWY3p+4qnRzCHeNrkeRhwPHz9bQ3mo0/yVkaply0MNw==", "dev": true, "requires": { "browserslist": "^4.0.0", @@ -4574,9 +4770,9 @@ } }, "postcss-discard-comments": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-4.0.1.tgz", - "integrity": "sha512-Ay+rZu1Sz6g8IdzRjUgG2NafSNpp2MSMOQUb+9kkzzzP+kh07fP0yNbhtFejURnyVXSX3FYy2nVNW1QTnNjgBQ==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-4.0.2.tgz", + "integrity": "sha512-RJutN259iuRf3IW7GZyLM5Sw4GLTOH8FmsXBnv8Ab/Tc2k4SR4qbV4DNbyyY4+Sjo362SyDmW2DQ7lBSChrpkg==", "dev": true, "requires": { "postcss": "^7.0.0" @@ -4610,9 +4806,9 @@ } }, "postcss-merge-longhand": { - "version": "4.0.10", - "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-4.0.10.tgz", - "integrity": "sha512-hME10s6CSjm9nlVIcO1ukR7Jr5RisTaaC1y83jWCivpuBtPohA3pZE7cGTIVSYjXvLnXozHTiVOkG4dnnl756g==", + "version": "4.0.11", + "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-4.0.11.tgz", + "integrity": "sha512-alx/zmoeXvJjp7L4mxEMjh8lxVlDFX1gqWHzaaQewwMZiVhLo42TEClKaeHbRf6J7j82ZOdTJ808RtN0ZOZwvw==", "dev": true, "requires": { "css-color-names": "0.0.4", @@ -4622,9 +4818,9 @@ } }, "postcss-merge-rules": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-4.0.2.tgz", - "integrity": "sha512-UiuXwCCJtQy9tAIxsnurfF0mrNHKc4NnNx6NxqmzNNjXpQwLSukUxELHTRF0Rg1pAmcoKLih8PwvZbiordchag==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-4.0.3.tgz", + "integrity": "sha512-U7e3r1SbvYzO0Jr3UT/zKBVgYYyhAz0aitvGIYOYK5CPmkNih+WDSsS5tvPrJ8YMQYlEMvsZIiqmn7HdFUaeEQ==", "dev": true, "requires": { "browserslist": "^4.0.0", @@ -4659,9 +4855,9 @@ } }, "postcss-minify-gradients": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-4.0.1.tgz", - "integrity": "sha512-pySEW3E6Ly5mHm18rekbWiAjVi/Wj8KKt2vwSfVFAWdW6wOIekgqxKxLU7vJfb107o3FDNPkaYFCxGAJBFyogA==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-4.0.2.tgz", + "integrity": "sha512-qKPfwlONdcf/AndP1U8SJ/uzIJtowHlMaSioKzebAXSG4iJthlWC9iSWznQcX4f66gIWX44RSA841HTHj3wK+Q==", "dev": true, "requires": { "cssnano-util-get-arguments": "^4.0.0", @@ -4671,9 +4867,9 @@ } }, "postcss-minify-params": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-4.0.1.tgz", - "integrity": "sha512-h4W0FEMEzBLxpxIVelRtMheskOKKp52ND6rJv+nBS33G1twu2tCyurYj/YtgU76+UDCvWeNs0hs8HFAWE2OUFg==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-4.0.2.tgz", + "integrity": "sha512-G7eWyzEx0xL4/wiBBJxJOz48zAKV2WG3iZOqVhPet/9geefm/Px5uo1fzlHu+DOjT+m0Mmiz3jkQzVHe6wxAWg==", "dev": true, "requires": { "alphanum-sort": "^1.0.0", @@ -4685,9 +4881,9 @@ } }, "postcss-minify-selectors": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-4.0.1.tgz", - "integrity": "sha512-8+plQkomve3G+CodLCgbhAKrb5lekAnLYuL1d7Nz+/7RANpBEVdgBkPNwljfSKvZ9xkkZTZITd04KP+zeJTJqg==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-4.0.2.tgz", + "integrity": "sha512-D5S1iViljXBj9kflQo4YutWnJmwm8VvIsU1GeXJGiG9j8CIg9zs4voPMdQDUmIxetUOh60VilsNzCiAFTOqu3g==", "dev": true, "requires": { "alphanum-sort": "^1.0.0", @@ -4731,9 +4927,9 @@ } }, "postcss-ordered-values": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-4.1.1.tgz", - "integrity": "sha512-PeJiLgJWPzkVF8JuKSBcylaU+hDJ/TX3zqAMIjlghgn1JBi6QwQaDZoDIlqWRcCAI8SxKrt3FCPSRmOgKRB97Q==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-4.1.2.tgz", + "integrity": "sha512-2fCObh5UanxvSxeXrtLtlwVThBvHn6MQcu4ksNT2tsaV2Fg76R2CV98W7wNSlX+5/pFwEyaDwKLLoEV7uRybAw==", "dev": true, "requires": { "cssnano-util-get-arguments": "^4.0.0", @@ -4742,9 +4938,9 @@ } }, "postcss-reduce-initial": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-4.0.2.tgz", - "integrity": "sha512-epUiC39NonKUKG+P3eAOKKZtm5OtAtQJL7Ye0CBN1f+UQTHzqotudp+hki7zxXm7tT0ZAKDMBj1uihpPjP25ug==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-4.0.3.tgz", + "integrity": "sha512-gKWmR5aUulSjbzOfD9AlJiHCGH6AEVLaM0AV+aSioxUDd16qXP1PCh8d1/BGVvpdWn8k/HiK7n6TjeoXN1F7DA==", "dev": true, "requires": { "browserslist": "^4.0.0", @@ -4754,9 +4950,9 @@ } }, "postcss-reduce-transforms": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-4.0.1.tgz", - "integrity": "sha512-sZVr3QlGs0pjh6JAIe6DzWvBaqYw05V1t3d9Tp+VnFRT5j+rsqoWsysh/iSD7YNsULjq9IAylCznIwVd5oU/zA==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-4.0.2.tgz", + "integrity": "sha512-EEVig1Q2QJ4ELpJXMZR8Vt5DQx8/mo+dGWSR7vWXqcob2gQLyQGsionYcGKATXvQzMPn6DSN1vTN7yFximdIAg==", "dev": true, "requires": { "cssnano-util-get-match": "^4.0.0", @@ -4777,9 +4973,9 @@ } }, "postcss-svgo": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-4.0.1.tgz", - "integrity": "sha512-YD5uIk5NDRySy0hcI+ZJHwqemv2WiqqzDgtvgMzO8EGSkK5aONyX8HMVFRFJSdO8wUWTuisUFn/d7yRRbBr5Qw==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-4.0.2.tgz", + "integrity": "sha512-C6wyjo3VwFm0QgBy+Fu7gCYOkCmgmClghO+pjcxvrcBKtiKt0uCF+hvbMO1fyv5BMImRK90SMb+dwUnfbGd+jw==", "dev": true, "requires": { "is-svg": "^3.0.0", @@ -4800,23 +4996,23 @@ } }, "svgo": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.1.1.tgz", - "integrity": "sha512-GBkJbnTuFpM4jFbiERHDWhZc/S/kpHToqmZag3aEBjPYK44JAN2QBjvrGIxLOoCyMZjuFQIfTO2eJd8uwLY/9g==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.2.0.tgz", + "integrity": "sha512-xBfxJxfk4UeVN8asec9jNxHiv3UAMv/ujwBWGYvQhhMb2u3YTGKkiybPcLFDLq7GLLWE9wa73e0/m8L5nTzQbw==", "dev": true, "requires": { - "coa": "~2.0.1", - "colors": "~1.1.2", + "chalk": "^2.4.1", + "coa": "^2.0.2", "css-select": "^2.0.0", - "css-select-base-adapter": "~0.1.0", + "css-select-base-adapter": "^0.1.1", "css-tree": "1.0.0-alpha.28", "css-url-regex": "^1.1.0", - "csso": "^3.5.0", + "csso": "^3.5.1", "js-yaml": "^3.12.0", "mkdirp": "~0.5.1", - "object.values": "^1.0.4", + "object.values": "^1.1.0", "sax": "~1.2.4", - "stable": "~0.1.6", + "stable": "^0.1.8", "unquote": "~1.1.1", "util.promisify": "~1.0.0" } @@ -5006,37 +5202,20 @@ "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", "dev": true }, + "deepmerge": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-3.2.0.tgz", + "integrity": "sha512-6+LuZGU7QCNUnAJyX8cIrlzoEgggTM6B7mm+znKOX4t5ltluT9KLjN6g61ECMS0LTsLW7yDpNoxhix5FZcrIow==", + "dev": true + }, "default-gateway": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-2.7.2.tgz", - "integrity": "sha512-lAc4i9QJR0YHSDFdzeBQKfZ1SRDG3hsJNEkrpcZa8QhBfidLAilT60BDEIVUUGqosFp425KOgB3uYqcnQrWafQ==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-4.2.0.tgz", + "integrity": "sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA==", "dev": true, "requires": { - "execa": "^0.10.0", + "execa": "^1.0.0", "ip-regex": "^2.1.0" - }, - "dependencies": { - "execa": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-0.10.0.tgz", - "integrity": "sha512-7XOMnz8Ynx1gGo/3hyV9loYNPWM94jG3+3T3Y8tsfSstFmETmENCMU/A/zj8Lyaj1lkgEepKepvd6240tBRvlw==", - "dev": true, - "requires": { - "cross-spawn": "^6.0.0", - "get-stream": "^3.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - } - }, - "get-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", - "dev": true - } } }, "default-require-extensions": { @@ -5157,6 +5336,12 @@ "dev": true } } + }, + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true } } }, @@ -5177,6 +5362,12 @@ "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", "dev": true }, + "deprecation": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/deprecation/-/deprecation-1.0.1.tgz", + "integrity": "sha512-ccVHpE72+tcIKaGMql33x5MAjKQIZrk+3x2GbJ7TeraUCZWHoT+KSZpoC+JQFsUBlSTXUrBaGiF0j6zVTepPLg==", + "dev": true + }, "des.js": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.0.tgz", @@ -5265,6 +5456,12 @@ "requires": { "pify": "^3.0.0" } + }, + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true } } }, @@ -5315,21 +5512,13 @@ } }, "dom-serializer": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.0.tgz", - "integrity": "sha1-BzxpdUbOB4DOI75KKOKT5AvDDII=", + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.1.tgz", + "integrity": "sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA==", "dev": true, "requires": { - "domelementtype": "~1.1.1", - "entities": "~1.1.1" - }, - "dependencies": { - "domelementtype": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.1.3.tgz", - "integrity": "sha1-vSh3PiZCiBrsUVRJJCmcXNgiGFs=", - "dev": true - } + "domelementtype": "^1.3.0", + "entities": "^1.1.1" } }, "domain-browser": { @@ -5370,9 +5559,9 @@ "dev": true }, "duplexify": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.6.1.tgz", - "integrity": "sha512-vM58DwdnKmty+FSPzT14K9JXb90H+j5emaR4KYbr2KTIz00WHGbWOe5ghQTx233ZCLZtrGDALzKwcjEtSt35mA==", + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", + "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", "dev": true, "requires": { "end-of-stream": "^1.0.0", @@ -5404,9 +5593,9 @@ "dev": true }, "electron-to-chromium": { - "version": "1.3.111", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.111.tgz", - "integrity": "sha512-I2QjmmxWULp89fEHlFwRpKXSw4Y/Igo3u41py4MkzJTrgDOf/S4oq/IMuTUHze/5TTPpwem74oQiPMEgFtuDRA==", + "version": "1.3.119", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.119.tgz", + "integrity": "sha512-3mtqcAWa4HgG+Djh/oNXlPH0cOH6MmtwxN1nHSaReb9P0Vn51qYPqYwLeoSuAX9loU1wrOBhFbiX3CkeIxPfgg==", "dev": true }, "elliptic": { @@ -5615,14 +5804,14 @@ } }, "es5-ext": { - "version": "0.10.47", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.47.tgz", - "integrity": "sha512-/1TItLfj+TTfWoeRcDn/0FbGV6SNo4R+On2GGVucPU/j3BWnXE2Co8h8CTo4Tu34gFJtnmwS9xiScKs4EjZhdw==", + "version": "0.10.49", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.49.tgz", + "integrity": "sha512-3NMEhi57E31qdzmYp2jwRArIUsj1HI/RxbQ4bgnSB+AIKIxsAmTiK83bYMifIcpWvEc3P1X30DhUKOqEtF/kvg==", "dev": true, "requires": { "es6-iterator": "~2.0.3", "es6-symbol": "~3.1.1", - "next-tick": "1" + "next-tick": "^1.0.0" } }, "es6-iterator": { @@ -5651,9 +5840,9 @@ } }, "es6-promise": { - "version": "4.2.5", - "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.5.tgz", - "integrity": "sha512-n6wvpdE43VFtJq+lUDYDBFUwV8TZbuGXLV4D6wKafg13ldznKsyEvatubnmUe31zcvelSzOHF+XbaT+Bl9ObDg==", + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.6.tgz", + "integrity": "sha512-aRVgGdnmW2OiySVPUC9e6m+plolMAJKjZnQlCwNSuK5yQ0JN61DZSO1X1Ufd1foqWRAlig0rhduTCHe7sVtK5Q==", "dev": true }, "es6-promisify": { @@ -6616,22 +6805,16 @@ } }, "find-cache-dir": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.0.0.tgz", - "integrity": "sha512-LDUY6V1Xs5eFskUVYtIwatojt6+9xC9Chnlk/jYOOvn3FAFfSaWddxahDGyNHh0b2dMXa6YW2m0tk8TdVaXHlA==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", + "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", "dev": true, "requires": { "commondir": "^1.0.1", - "make-dir": "^1.0.0", + "make-dir": "^2.0.0", "pkg-dir": "^3.0.0" } }, - "find-npm-prefix": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/find-npm-prefix/-/find-npm-prefix-1.0.2.tgz", - "integrity": "sha512-KEftzJ+H90x6pcKtdXZEPsQse8/y/UnvzRKrOSQFprnrGaFuJ62fVkP34Iu2IYuMvyauCyoLTNkJZgrrGA2wkA==", - "dev": true - }, "find-up": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", @@ -6683,32 +6866,38 @@ "dev": true }, "flush-write-stream": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.0.3.tgz", - "integrity": "sha512-calZMC10u0FMUqoiunI2AiGIIUtUIvifNwkHhNupZH4cbNnW1Itkoh/Nf5HFYmDrwWPjrUxpkZT0KhuCq0jmGw==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz", + "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==", "dev": true, "requires": { - "inherits": "^2.0.1", - "readable-stream": "^2.0.4" + "inherits": "^2.0.3", + "readable-stream": "^2.3.6" } }, "follow-redirects": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.6.1.tgz", - "integrity": "sha512-t2JCjbzxQpWvbhts3l6SH1DKzSrx8a+SsaVf4h6bG4kOXUuPYS/kg2Lr4gQSb7eemaHqJkOThF1BGyjlUkO1GQ==", + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.7.0.tgz", + "integrity": "sha512-m/pZQy4Gj287eNy94nivy5wchN3Kp+Q5WgUPNy5lJSZ3sgkVKSYV/ZChMAQVIgx1SqfZ2zBZtPA2YlXIWxxJOQ==", "dev": true, "requires": { - "debug": "=3.1.0" + "debug": "^3.2.6" }, "dependencies": { "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", "dev": true, "requires": { - "ms": "2.0.0" + "ms": "^2.1.1" } + }, + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "dev": true } } }, @@ -6808,17 +6997,6 @@ "integrity": "sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA==", "dev": true }, - "fs-vacuum": { - "version": "1.2.10", - "resolved": "https://registry.npmjs.org/fs-vacuum/-/fs-vacuum-1.2.10.tgz", - "integrity": "sha1-t2Kb7AekAxolSP35n17PHMizHjY=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "path-is-inside": "^1.0.1", - "rimraf": "^2.5.2" - } - }, "fs-write-stream-atomic": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz", @@ -7406,26 +7584,6 @@ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", "dev": true }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "dev": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dev": true, - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - }, "strip-ansi": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", @@ -7470,22 +7628,6 @@ "integrity": "sha512-KGDOARWVga7+rnB3z9Sd2Letx515owfk0hSxHGuqjANb1M+x2bGZGqHLiozPsYMdM2OubeMni/Hpwmjq6qIUhA==", "dev": true }, - "gentle-fs": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/gentle-fs/-/gentle-fs-2.0.1.tgz", - "integrity": "sha512-cEng5+3fuARewXktTEGbwsktcldA+YsnUEaXZwcK/3pjSE1X9ObnTs+/8rYf8s+RnIcQm2D5x3rwpN7Zom8Bew==", - "dev": true, - "requires": { - "aproba": "^1.1.2", - "fs-vacuum": "^1.2.10", - "graceful-fs": "^4.1.11", - "iferr": "^0.1.5", - "mkdirp": "^0.5.1", - "path-is-inside": "^1.0.2", - "read-cmd-shim": "^1.0.1", - "slide": "^1.1.6" - } - }, "get-caller-file": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", @@ -7743,6 +7885,25 @@ "semver": "^5.5.0" } }, + "git-up": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/git-up/-/git-up-4.0.1.tgz", + "integrity": "sha512-LFTZZrBlrCrGCG07/dm1aCjjpL1z9L3+5aEeI9SBhAqSc+kiA9Or1bgZhQFNppJX6h/f5McrvJt1mQXTFm6Qrw==", + "dev": true, + "requires": { + "is-ssh": "^1.3.0", + "parse-url": "^5.0.0" + } + }, + "git-url-parse": { + "version": "11.1.2", + "resolved": "https://registry.npmjs.org/git-url-parse/-/git-url-parse-11.1.2.tgz", + "integrity": "sha512-gZeLVGY8QVKMIkckncX+iCq2/L8PlwncvDFKiWkBn9EtCfYDbliRTTp6qzyQ1VMdITUfq7293zDzfpjdiGASSQ==", + "dev": true, + "requires": { + "git-up": "^4.0.0" + } + }, "gitconfiglocal": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/gitconfiglocal/-/gitconfiglocal-1.0.0.tgz", @@ -7840,12 +8001,6 @@ "resolve-dir": "^1.0.0" } }, - "global-modules-path": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/global-modules-path/-/global-modules-path-2.3.1.tgz", - "integrity": "sha512-y+shkf4InI7mPRHSo2b/k6ix6+NLDtyccYv86whhxrSGX9wjPX1VMITmrDbE1eh7zkzhiWtW2sHklJYoQ62Cxg==", - "dev": true - }, "global-prefix": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", @@ -7860,9 +8015,9 @@ } }, "globals": { - "version": "11.10.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.10.0.tgz", - "integrity": "sha512-0GZF1RiPKU97IHUO5TORo9w1PwrH/NBPl+fS7oMLdaTRiYmYbwK4NWoZWrAdd0/abG9R2BU+OiwyQpTpE6pdfQ==", + "version": "11.11.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.11.0.tgz", + "integrity": "sha512-WHq43gS+6ufNOEqlrDBxVEbb8ntfXrfAUU2ZOpCxrBdGKW3gyv8mCxAfIBD0DroPKGrJ2eSsXsLtY9MPntsyTw==", "dev": true }, "globby": { @@ -7880,6 +8035,12 @@ "slash": "^1.0.0" }, "dependencies": { + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + }, "slash": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", @@ -7924,6 +8085,14 @@ "requires": { "duplexer": "^0.1.1", "pify": "^3.0.0" + }, + "dependencies": { + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + } } }, "handle-thing": { @@ -7933,12 +8102,12 @@ "dev": true }, "handlebars": { - "version": "4.0.12", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.0.12.tgz", - "integrity": "sha512-RhmTekP+FZL+XNhwS1Wf+bTTZpdLougwt5pcgA1tuz6Jcx0fpH/7z0qd71RKnZHBCxIRBHfBOnio4gViPemNzA==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.1.1.tgz", + "integrity": "sha512-3Zhi6C0euYZL5sM0Zcy7lInLXKQ+YLcF/olbN010mzGQ4XVm50JeyBnMqofHh696GrciGruC7kCcApPDJvVgwA==", "dev": true, "requires": { - "async": "^2.5.0", + "neo-async": "^2.6.0", "optimist": "^0.6.1", "source-map": "^0.6.1", "uglify-js": "^3.1.4" @@ -7969,9 +8138,9 @@ }, "dependencies": { "ajv": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.7.0.tgz", - "integrity": "sha512-RZXPviBTtfmtka9n9sy1N5M5b82CbxWIR6HIis4s3WQTXDJamc/0gpCWNGz6EWdWp4DOfjzJfhz/AS9zVPjjWg==", + "version": "6.10.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.0.tgz", + "integrity": "sha512-nffhOpkymDECQyR0mnsUtoCE8RlX38G0rYP+wgLWFyZuUyuuojSSvi/+euOiQBIn63whYwYVIIH1TvE3tu4OEg==", "dev": true, "requires": { "fast-deep-equal": "^2.0.1", @@ -8118,9 +8287,9 @@ } }, "homedir-polyfill": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.1.tgz", - "integrity": "sha1-TCu8inWJmP7r9e1oWA921GdotLw=", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", + "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==", "dev": true, "requires": { "parse-passwd": "^1.0.0" @@ -8231,15 +8400,15 @@ } }, "http-proxy-middleware": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.18.0.tgz", - "integrity": "sha512-Fs25KVMPAIIcgjMZkVHJoKg9VcXcC1C8yb9JUgeDvVXY0S/zgVIhMb+qVswDIgtJe2DfckMSY2d6TuTEutlk6Q==", + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz", + "integrity": "sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q==", "dev": true, "requires": { - "http-proxy": "^1.16.2", + "http-proxy": "^1.17.0", "is-glob": "^4.0.0", - "lodash": "^4.17.5", - "micromatch": "^3.1.9" + "lodash": "^4.17.11", + "micromatch": "^3.1.10" } }, "http-signature": { @@ -8254,9 +8423,9 @@ } }, "http-status-codes": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/http-status-codes/-/http-status-codes-1.3.0.tgz", - "integrity": "sha1-nNDnE5F3PQZxtInUHLxQlKpBY7Y=" + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/http-status-codes/-/http-status-codes-1.3.2.tgz", + "integrity": "sha512-nDUtj0ltIt08tGi2VWSpSzNNFye0v3YSe9lX3lIqLTuVvvRiYCvs4QQBSHo0eomFYw1wlUuofurUAlTm+vHnXg==" }, "https-browserify": { "version": "1.0.0", @@ -8344,9 +8513,9 @@ } }, "ieee754": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.12.tgz", - "integrity": "sha512-GguP+DRY+pJ3soyIiGPTvdiVXjZ+DbXOxGpXn3eMvNW4x4irjqXm4wHKscC+TfxSJ0yw/S1F24tqdMNsMZTiLA==", + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", + "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==", "dev": true }, "iferr": { @@ -8610,15 +8779,6 @@ "restore-cursor": "^1.0.1" } }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "dev": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, "onetime": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz", @@ -8635,17 +8795,6 @@ "onetime": "^1.0.0" } }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dev": true, - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - }, "strip-ansi": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", @@ -8664,13 +8813,21 @@ } }, "internal-ip": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-3.0.1.tgz", - "integrity": "sha512-NXXgESC2nNVtU+pqmC9e6R8B1GpKxzsAQhffvh5AL79qKnodd+L7tnEQmTiUAVngqLalPbSqRA7XGIEL5nCd0Q==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-4.2.0.tgz", + "integrity": "sha512-ZY8Rk+hlvFeuMmG5uH1MXhhdeMntmIaxaInvAmzMq/SHV8rv4Kh+6GiQNNDQd0wZFrcO+FiTBo8lui/osKOyJw==", "dev": true, "requires": { - "default-gateway": "^2.6.0", - "ipaddr.js": "^1.5.2" + "default-gateway": "^4.0.1", + "ipaddr.js": "^1.9.0" + }, + "dependencies": { + "ipaddr.js": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.0.tgz", + "integrity": "sha512-M4Sjn6N/+O6/IXSJseKqHoFc+5FdGJ22sXqnjTpdZweHK64MzEPAyQZyEU3R/KRv2GLoa7nNtg/C2Ev6m7z+eA==", + "dev": true + } } }, "interpret": { @@ -8759,15 +8916,6 @@ "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", "dev": true }, - "is-builtin-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", - "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", - "dev": true, - "requires": { - "builtin-modules": "^1.0.0" - } - }, "is-callable": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz", @@ -8885,10 +9033,13 @@ } }, "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dev": true, + "requires": { + "number-is-nan": "^1.0.0" + } }, "is-glob": { "version": "4.0.0", @@ -9022,6 +9173,15 @@ "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==", "dev": true }, + "is-ssh": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/is-ssh/-/is-ssh-1.3.1.tgz", + "integrity": "sha512-0eRIASHZt1E68/ixClI8bp2YK2wmBPVWEismTs6M+M099jKgrzl/3E976zIbImSIob48N2/XGe9y7ZiYdImSlg==", + "dev": true, + "requires": { + "protocols": "^1.1.0" + } + }, "is-stream": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", @@ -9556,6 +9716,12 @@ "readdirp": "^2.0.0" } }, + "core-js": { + "version": "2.6.5", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.5.tgz", + "integrity": "sha512-klh/kDpwX8hryYL14M9w/xei6vrv6sE8gTHDG7/T/+SEovB/G4ejwcfE/CBzO6Edsu+OETZMZ3wcX/EjUkrl5A==", + "dev": true + }, "expand-brackets": { "version": "0.1.5", "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", @@ -9633,6 +9799,15 @@ "parse-glob": "^3.0.4", "regex-cache": "^0.4.2" } + }, + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "requires": { + "remove-trailing-separator": "^1.0.1" + } } } }, @@ -9728,152 +9903,73 @@ "resolved": "https://registry.npmjs.org/klaw/-/klaw-2.0.0.tgz", "integrity": "sha1-WcEo4Nxc5BAgEVEZTuucv4WGUPY=", "dev": true, - "requires": { - "graceful-fs": "^4.1.9" - } - }, - "last-call-webpack-plugin": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/last-call-webpack-plugin/-/last-call-webpack-plugin-3.0.0.tgz", - "integrity": "sha512-7KI2l2GIZa9p2spzPIVZBYyNKkN+e/SQPpnjlTiPhdbDW3F86tdKKELxKpzJ5sgU19wQWsACULZmpTPYHeWO5w==", - "dev": true, - "requires": { - "lodash": "^4.17.5", - "webpack-sources": "^1.1.0" - } - }, - "lcid": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz", - "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==", - "dev": true, - "requires": { - "invert-kv": "^2.0.0" - } - }, - "lerna": { - "version": "3.10.7", - "resolved": "https://registry.npmjs.org/lerna/-/lerna-3.10.7.tgz", - "integrity": "sha512-ha/dehl/L3Nw0pbdir5z6Hrv2oYBg5ym2fTcuk8HCLe7Zdb/ylIHdrgW8CU9eTVZkwr4et8RdVtxFA/+xa65/Q==", - "dev": true, - "requires": { - "@lerna/add": "3.10.6", - "@lerna/bootstrap": "3.10.6", - "@lerna/changed": "3.10.6", - "@lerna/clean": "3.10.6", - "@lerna/cli": "3.10.7", - "@lerna/create": "3.10.6", - "@lerna/diff": "3.10.6", - "@lerna/exec": "3.10.6", - "@lerna/import": "3.10.6", - "@lerna/init": "3.10.6", - "@lerna/link": "3.10.6", - "@lerna/list": "3.10.6", - "@lerna/publish": "3.10.7", - "@lerna/run": "3.10.6", - "@lerna/version": "3.10.6", - "import-local": "^1.0.0", - "libnpm": "^2.0.1" - } - }, - "levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", - "dev": true, - "requires": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" - } - }, - "libnpm": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/libnpm/-/libnpm-2.0.1.tgz", - "integrity": "sha512-qTKoxyJvpBxHZQB6k0AhSLajyXq9ZE/lUsZzuHAplr2Bpv9G+k4YuYlExYdUCeVRRGqcJt8hvkPh4tBwKoV98w==", - "dev": true, - "requires": { - "bin-links": "^1.1.2", - "bluebird": "^3.5.3", - "find-npm-prefix": "^1.0.2", - "libnpmaccess": "^3.0.1", - "libnpmconfig": "^1.2.1", - "libnpmhook": "^5.0.2", - "libnpmorg": "^1.0.0", - "libnpmpublish": "^1.1.0", - "libnpmsearch": "^2.0.0", - "libnpmteam": "^1.0.1", - "lock-verify": "^2.0.2", - "npm-lifecycle": "^2.1.0", - "npm-logical-tree": "^1.2.1", - "npm-package-arg": "^6.1.0", - "npm-profile": "^4.0.1", - "npm-registry-fetch": "^3.8.0", - "npmlog": "^4.1.2", - "pacote": "^9.2.3", - "read-package-json": "^2.0.13", - "stringify-package": "^1.0.0" - } - }, - "libnpmaccess": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/libnpmaccess/-/libnpmaccess-3.0.1.tgz", - "integrity": "sha512-RlZ7PNarCBt+XbnP7R6PoVgOq9t+kou5rvhaInoNibhPO7eMlRfS0B8yjatgn2yaHIwWNyoJDolC/6Lc5L/IQA==", - "dev": true, - "requires": { - "aproba": "^2.0.0", - "get-stream": "^4.0.0", - "npm-package-arg": "^6.1.0", - "npm-registry-fetch": "^3.8.0" - }, - "dependencies": { - "aproba": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", - "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==", - "dev": true - } + "requires": { + "graceful-fs": "^4.1.9" } }, - "libnpmconfig": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/libnpmconfig/-/libnpmconfig-1.2.1.tgz", - "integrity": "sha512-9esX8rTQAHqarx6qeZqmGQKBNZR5OIbl/Ayr0qQDy3oXja2iFVQQI81R6GZ2a02bSNZ9p3YOGX1O6HHCb1X7kA==", + "last-call-webpack-plugin": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/last-call-webpack-plugin/-/last-call-webpack-plugin-3.0.0.tgz", + "integrity": "sha512-7KI2l2GIZa9p2spzPIVZBYyNKkN+e/SQPpnjlTiPhdbDW3F86tdKKELxKpzJ5sgU19wQWsACULZmpTPYHeWO5w==", "dev": true, "requires": { - "figgy-pudding": "^3.5.1", - "find-up": "^3.0.0", - "ini": "^1.3.5" + "lodash": "^4.17.5", + "webpack-sources": "^1.1.0" } }, - "libnpmhook": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/libnpmhook/-/libnpmhook-5.0.2.tgz", - "integrity": "sha512-vLenmdFWhRfnnZiNFPNMog6CK7Ujofy2TWiM2CrpZUjBRIhHkJeDaAbJdYCT6W4lcHtyrJR8yXW8KFyq6UAp1g==", + "lcid": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz", + "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==", "dev": true, "requires": { - "aproba": "^2.0.0", - "figgy-pudding": "^3.4.1", - "get-stream": "^4.0.0", - "npm-registry-fetch": "^3.8.0" - }, - "dependencies": { - "aproba": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", - "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==", - "dev": true - } + "invert-kv": "^2.0.0" } }, - "libnpmorg": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/libnpmorg/-/libnpmorg-1.0.0.tgz", - "integrity": "sha512-o+4eVJBoDGMgRwh2lJY0a8pRV2c/tQM/SxlqXezjcAg26Qe9jigYVs+Xk0vvlYDWCDhP0g74J8UwWeAgsB7gGw==", + "lerna": { + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/lerna/-/lerna-3.13.1.tgz", + "integrity": "sha512-7kSz8LLozVsoUNTJzJzy+b8TnV9YdviR2Ee2PwGZSlVw3T1Rn7kOAPZjEi+3IWnOPC96zMPHVmjCmzQ4uubalw==", + "dev": true, + "requires": { + "@lerna/add": "3.13.1", + "@lerna/bootstrap": "3.13.1", + "@lerna/changed": "3.13.1", + "@lerna/clean": "3.13.1", + "@lerna/cli": "3.13.0", + "@lerna/create": "3.13.1", + "@lerna/diff": "3.13.1", + "@lerna/exec": "3.13.1", + "@lerna/import": "3.13.1", + "@lerna/init": "3.13.1", + "@lerna/link": "3.13.1", + "@lerna/list": "3.13.1", + "@lerna/publish": "3.13.1", + "@lerna/run": "3.13.1", + "@lerna/version": "3.13.1", + "import-local": "^1.0.0", + "npmlog": "^4.1.2" + } + }, + "levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "dev": true, + "requires": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + } + }, + "libnpmaccess": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/libnpmaccess/-/libnpmaccess-3.0.1.tgz", + "integrity": "sha512-RlZ7PNarCBt+XbnP7R6PoVgOq9t+kou5rvhaInoNibhPO7eMlRfS0B8yjatgn2yaHIwWNyoJDolC/6Lc5L/IQA==", "dev": true, "requires": { "aproba": "^2.0.0", - "figgy-pudding": "^3.4.1", "get-stream": "^4.0.0", + "npm-package-arg": "^6.1.0", "npm-registry-fetch": "^3.8.0" }, "dependencies": { @@ -9910,43 +10006,6 @@ } } }, - "libnpmsearch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/libnpmsearch/-/libnpmsearch-2.0.0.tgz", - "integrity": "sha512-vd+JWbTGzOSfiOc+72MU6y7WqmBXn49egCCrIXp27iE/88bX8EpG64ST1blWQI1bSMUr9l1AKPMVsqa2tS5KWA==", - "dev": true, - "requires": { - "figgy-pudding": "^3.5.1", - "get-stream": "^4.0.0", - "npm-registry-fetch": "^3.8.0" - } - }, - "libnpmteam": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/libnpmteam/-/libnpmteam-1.0.1.tgz", - "integrity": "sha512-gDdrflKFCX7TNwOMX1snWojCoDE5LoRWcfOC0C/fqF7mBq8Uz9zWAX4B2RllYETNO7pBupBaSyBDkTAC15cAMg==", - "dev": true, - "requires": { - "aproba": "^2.0.0", - "figgy-pudding": "^3.4.1", - "get-stream": "^4.0.0", - "npm-registry-fetch": "^3.8.0" - }, - "dependencies": { - "aproba": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", - "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==", - "dev": true - } - } - }, - "lightercollective": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/lightercollective/-/lightercollective-0.1.0.tgz", - "integrity": "sha512-J9tg5uraYoQKaWbmrzDDexbG6hHnMcWS1qLYgJSWE+mpA3U5OCSeMUhb+K55otgZJ34oFdR0ECvdIb3xuO5JOQ==", - "dev": true - }, "load-json-file": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", @@ -10011,16 +10070,6 @@ "path-exists": "^3.0.0" } }, - "lock-verify": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/lock-verify/-/lock-verify-2.0.2.tgz", - "integrity": "sha512-QNVwK0EGZBS4R3YQ7F1Ox8p41Po9VGl2QG/2GsuvTbkJZYSsPeWHKMbbH6iZMCHWSMww5nrJroZYnGzI4cePuw==", - "dev": true, - "requires": { - "npm-package-arg": "^5.1.2 || 6", - "semver": "^5.4.1" - } - }, "lodash": { "version": "4.17.11", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", @@ -10102,10 +10151,10 @@ "lodash._isiterateecall": "^3.0.0" } }, - "lodash.debounce": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=", + "lodash.get": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", + "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=", "dev": true }, "lodash.isarguments": { @@ -10143,6 +10192,12 @@ "integrity": "sha512-eWw5r+PYICtEBgrBE5hhlT6aAa75f411bgDz/ZL2KZqYV03USvucsxcHUIlGTDTECs1eunpI7HOV7U+WLDvNdQ==", "dev": true }, + "lodash.set": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/lodash.set/-/lodash.set-4.3.2.tgz", + "integrity": "sha1-2HV7HagH3eJIFrDWqEvqGnYjCyM=", + "dev": true + }, "lodash.sortby": { "version": "4.7.0", "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", @@ -10275,13 +10330,20 @@ "yallist": "^2.1.2" } }, + "macos-release": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/macos-release/-/macos-release-2.1.0.tgz", + "integrity": "sha512-8TCbwvN1mfNxbBv0yBtfyIFMo3m1QsNbKHv7PYIp/abRBKVQBXN7ecu3aeGGgT18VC/Tf397LBDGZF9KBGJFFw==", + "dev": true + }, "make-dir": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", - "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", "dev": true, "requires": { - "pify": "^3.0.0" + "pify": "^4.0.1", + "semver": "^5.6.0" } }, "make-fetch-happen": { @@ -10303,6 +10365,12 @@ "ssri": "^6.0.0" } }, + "mamacro": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/mamacro/-/mamacro-0.0.3.tgz", + "integrity": "sha512-qMEwh+UujcQ+kbz3T6V+wAmO2U8veoq2w+3wY8MquqwVA3jChfwY+Tk52GZKDfACEPjuZ7r2oJLejwpt8jtwTA==", + "dev": true + }, "map-age-cleaner": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", @@ -10375,14 +10443,22 @@ "dev": true }, "mem": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/mem/-/mem-4.1.0.tgz", - "integrity": "sha512-I5u6Q1x7wxO0kdOpYBB28xueHADYps5uty/zg936CiG8NTe5sJL8EjrCuLneuDW3PlMdZBGDIn8BirEVdovZvg==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/mem/-/mem-4.2.0.tgz", + "integrity": "sha512-5fJxa68urlY0Ir8ijatKa3eRz5lwXnRCTvo9+TbTGAuTFJOwpGcY0X05moBd0nW45965Njt4CDI2GFQoG8DvqA==", "dev": true, "requires": { "map-age-cleaner": "^0.1.1", - "mimic-fn": "^1.0.0", + "mimic-fn": "^2.0.0", "p-is-promise": "^2.0.0" + }, + "dependencies": { + "mimic-fn": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.0.0.tgz", + "integrity": "sha512-jbex9Yd/3lmICXwYT6gA/j2mNQGU48wCh/VzRd+/Y/PjYQtlg1gLMdZqvu9s/xH7qKvngxRObl56XZR609IMbA==", + "dev": true + } } }, "memory-fs": { @@ -10492,6 +10568,12 @@ "pify": "^3.0.0" } }, + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + }, "read-pkg": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", @@ -10571,16 +10653,16 @@ "dev": true }, "mime-db": { - "version": "1.37.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.37.0.tgz", - "integrity": "sha512-R3C4db6bgQhlIhPU48fUtdVmKnflq+hRdad7IyKhtFj06VPNVdk2RhiYL3UjQIlso8L+YxAtFkobT0VK+S/ybg==" + "version": "1.38.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.38.0.tgz", + "integrity": "sha512-bqVioMFFzc2awcdJZIzR3HjZFX20QhilVS7hytkKrv7xFAn8bM1gzc/FOX2awLISvWe0PV8ptFKcon+wZ5qYkg==" }, "mime-types": { - "version": "2.1.21", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.21.tgz", - "integrity": "sha512-3iL6DbwpyLzjR3xHSFNFeb9Nz/M8WDkX33t1GFQnFOllWk8pOrh/LSrB5OXlnlW5P9LH73X6loW/eogc+F5lJg==", + "version": "2.1.22", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.22.tgz", + "integrity": "sha512-aGl6TZGnhm/li6F7yx82bJiBZwgiEa4Hf6CNr8YO+r5UHr53tSTYZb102zyU50DOWWKeOv0uQLRL0/9EiKWCog==", "requires": { - "mime-db": "~1.37.0" + "mime-db": "~1.38.0" } }, "mimic-fn": { @@ -10600,9 +10682,9 @@ }, "dependencies": { "ajv": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.7.0.tgz", - "integrity": "sha512-RZXPviBTtfmtka9n9sy1N5M5b82CbxWIR6HIis4s3WQTXDJamc/0gpCWNGz6EWdWp4DOfjzJfhz/AS9zVPjjWg==", + "version": "6.10.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.0.tgz", + "integrity": "sha512-nffhOpkymDECQyR0mnsUtoCE8RlX38G0rYP+wgLWFyZuUyuuojSSvi/+euOiQBIn63whYwYVIIH1TvE3tu4OEg==", "dev": true, "requires": { "fast-deep-equal": "^2.0.1", @@ -10612,9 +10694,9 @@ } }, "ajv-keywords": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.3.0.tgz", - "integrity": "sha512-CMzN9S62ZOO4sA/mJZIO4S++ZM7KFWzH3PPWkveLhy4OZ9i1/VatgwWMD46w/XbGCBy7Ye0gCk+Za6mmyfKK7g==", + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.4.0.tgz", + "integrity": "sha512-aUjdRFISbuFOl0EIZc+9e4FfZp0bDZgAdOOf30bJmw8VM9v84SHyVyxDfbWxpGYbdZD/9XoKxfHVNmxPkhwyGw==", "dev": true }, "schema-utils": { @@ -10982,15 +11064,6 @@ "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", "dev": true }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "dev": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, "is-glob": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", @@ -11088,6 +11161,15 @@ "regex-cache": "^0.4.2" } }, + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "requires": { + "remove-trailing-separator": "^1.0.1" + } + }, "os-locale": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", @@ -11150,17 +11232,6 @@ "integrity": "sha1-xVCyq1Qn9rPyH1r+rYjE9Vh7IQY=", "dev": true }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dev": true, - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - }, "strip-ansi": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", @@ -11296,9 +11367,9 @@ "dev": true }, "nan": { - "version": "2.12.1", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.12.1.tgz", - "integrity": "sha512-JY7V6lRkStKcKTvHO5NVSQRv+RV+FIL5pvDoLiAtSL9pKlC5x9PKQcZDsq7m4FO4d57mkhC6Z+QhAh3Jdk5JFw==", + "version": "2.13.2", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.13.2.tgz", + "integrity": "sha512-TghvYc72wlMGMVMluVo9WRJc0mB8KxxF/gZ4YYFy7V2ZQX9l7rgbPg7vjS9mt6U5HXODVFVI2bOduCzwOMv/lw==", "dev": true }, "nanomatch": { @@ -11350,6 +11421,12 @@ "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", "dev": true }, + "node-fetch": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.3.0.tgz", + "integrity": "sha512-MOd8pV3fxENbryESLgVIeaGKrdl+uaYhCSSVkjeOb/31/njTpcis5aWfdqgNlHIrKOLRbMnfPINPOML2CIFeXA==", + "dev": true + }, "node-fetch-npm": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/node-fetch-npm/-/node-fetch-npm-2.0.2.tgz", @@ -11435,9 +11512,9 @@ } }, "node-releases": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.6.tgz", - "integrity": "sha512-lODUVHEIZutZx+TDdOk47qLik8FJMXzJ+WnyUGci1MTvTOyzZrz5eVPIIpc5Hb3NfHZGeGHeuwrRYVI1PEITWg==", + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.11.tgz", + "integrity": "sha512-8v1j5KfP+s5WOTa1spNUAOfreajQPN12JXbRR0oDE+YrJBQCXBnNqUDj27EKpPLOoSiU3tKi3xGPB+JaOdUEQQ==", "dev": true, "requires": { "semver": "^5.3.0" @@ -11691,25 +11768,22 @@ } }, "normalize-package-data": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.2.tgz", - "integrity": "sha512-YcMnjqeoUckXTPKZSAsPjUPLxH85XotbpqK3w4RyCwdFQSU5FxxBys8buehkSfg0j9fKvV1hn7O0+8reEgkAiw==", + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", "dev": true, "requires": { "hosted-git-info": "^2.1.4", - "is-builtin-module": "^1.0.0", + "resolve": "^1.10.0", "semver": "2 || 3 || 4 || 5", "validate-npm-package-license": "^3.0.1" } }, "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "dev": true, - "requires": { - "remove-trailing-separator": "^1.0.1" - } + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true }, "normalize-range": { "version": "0.1.2", @@ -11730,9 +11804,9 @@ } }, "npm-bundled": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.0.5.tgz", - "integrity": "sha512-m/e6jgWu8/v5niCUKQi9qQl8QdeEduFA96xHDDzFGqly0OOjI7c+60KM/2sppfnUU9JJagf+zs+yGhqSOFj71g==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.0.6.tgz", + "integrity": "sha512-8/JCaftHwbd//k6y2rEWp6k1wxVfpFzB6t1p825+cUb7Ym2XQfhwIC5KwhrvzZRJu+LtDE585zVaS32+CGtf0g==", "dev": true }, "npm-lifecycle": { @@ -11759,12 +11833,6 @@ } } }, - "npm-logical-tree": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/npm-logical-tree/-/npm-logical-tree-1.2.1.tgz", - "integrity": "sha512-AJI/qxDB2PWI4LG1CYN579AY1vCiNyWfkiquCsJWqntRu/WwimVrC8yXeILBFHDwxfOejxewlmnvW9XXjMlYIg==", - "dev": true - }, "npm-package-arg": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-6.1.0.tgz", @@ -11778,9 +11846,9 @@ } }, "npm-packlist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-1.2.0.tgz", - "integrity": "sha512-7Mni4Z8Xkx0/oegoqlcao/JpPCPEMtUvsmB0q7mgvlMinykJLSRTYuFqoQLYgGY8biuxIeiHO+QNJKbCfljewQ==", + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-1.4.1.tgz", + "integrity": "sha512-+TcdO7HJJ8peiiYhvPxsEDhF3PJFGUGRcFsGve3vxvxdcpO2Z4Z7rkosRM0kWj6LfbK/P0gu3dzk5RU1ffvFcw==", "dev": true, "requires": { "ignore-walk": "^3.0.1", @@ -11798,17 +11866,6 @@ "semver": "^5.4.1" } }, - "npm-profile": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-profile/-/npm-profile-4.0.1.tgz", - "integrity": "sha512-NQ1I/1Q7YRtHZXkcuU1/IyHeLy6pd+ScKg4+DQHdfsm769TGq6HPrkbuNJVJS4zwE+0mvvmeULzQdWn2L2EsVA==", - "dev": true, - "requires": { - "aproba": "^1.1.2 || 2", - "figgy-pudding": "^3.4.1", - "npm-registry-fetch": "^3.8.0" - } - }, "npm-registry-fetch": { "version": "3.9.0", "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-3.9.0.tgz", @@ -11927,9 +11984,9 @@ "dev": true }, "object-keys": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.12.tgz", - "integrity": "sha512-FTMyFUm2wBcGHnH2eXmz7tC6IwlqQZ6mVZ+6dm6vZ4IQIHjs6FdNsQBuKGPuUUUY6NfJw2PshC08Tn6LzLDOag==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.0.tgz", + "integrity": "sha512-6OO5X1+2tYkNyNEx6TsCxEqFfRWaqx6EtMiSbGrw8Ob8v9Ne+Hl8rBAgLBZn5wjEz3s/s6U1WXFUFOcxxAwUpg==", "dev": true }, "object-visit": { @@ -12000,6 +12057,12 @@ "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", "dev": true }, + "octokit-pagination-methods": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/octokit-pagination-methods/-/octokit-pagination-methods-1.1.0.tgz", + "integrity": "sha512-fZ4qZdQ2nxJvtcasX7Ghl+WlWS/d9IgnBIwFZXVNNZUmzpno91SX5bc5vuxiuKoCtK78XxGGNuSCrDC7xYB3OQ==", + "dev": true + }, "on-finished": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", @@ -12010,9 +12073,9 @@ } }, "on-headers": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.1.tgz", - "integrity": "sha1-ko9dD0cNSTQmUepnlLCFfBAGk/c=", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", "dev": true }, "once": { @@ -12039,9 +12102,9 @@ "dev": true }, "opn": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/opn/-/opn-5.4.0.tgz", - "integrity": "sha512-YF9MNdVy/0qvJvDtunAOzFw9iasOQHpVthTCvGzxt61Il64AYSGdK+rYwld7NAfk9qJ7dt+hymBNSc9LNYS+Sw==", + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/opn/-/opn-5.5.0.tgz", + "integrity": "sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA==", "dev": true, "requires": { "is-wsl": "^1.1.0" @@ -12076,13 +12139,13 @@ }, "dependencies": { "cssnano": { - "version": "4.1.8", - "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-4.1.8.tgz", - "integrity": "sha512-5GIY0VzAHORpbKiL3rMXp4w4M1Ki+XlXgEXyuWXVd3h6hlASb+9Vo76dNP56/elLMVBBsUfusCo1q56uW0UWig==", + "version": "4.1.10", + "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-4.1.10.tgz", + "integrity": "sha512-5wny+F6H4/8RgNlaqab4ktc3e0/blKutmq8yNlBFXA//nSFFAqAngjNVRzUvCgYROULmZZUoosL/KSoZo5aUaQ==", "dev": true, "requires": { "cosmiconfig": "^5.0.0", - "cssnano-preset-default": "^4.0.6", + "cssnano-preset-default": "^4.0.7", "is-resolvable": "^1.0.0", "postcss": "^7.0.0" } @@ -12110,15 +12173,15 @@ "dev": true }, "ora": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ora/-/ora-3.0.0.tgz", - "integrity": "sha512-LBS97LFe2RV6GJmXBi6OKcETKyklHNMV0xw7BtsVn2MlsgsydyZetSCbCANr+PFLmDyv4KV88nn0eCKza665Mg==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ora/-/ora-3.2.0.tgz", + "integrity": "sha512-XHMZA5WieCbtg+tu0uPF8CjvwQdNzKCX6BVh3N6GFsEXH40mTk5dsw/ya1lBTUGJslcEFJFQ8cBhOgkkZXQtMA==", "requires": { - "chalk": "^2.3.1", + "chalk": "^2.4.2", "cli-cursor": "^2.1.0", - "cli-spinners": "^1.1.0", + "cli-spinners": "^2.0.0", "log-symbols": "^2.2.0", - "strip-ansi": "^4.0.0", + "strip-ansi": "^5.0.0", "wcwidth": "^1.0.1" } }, @@ -12154,6 +12217,16 @@ "mem": "^4.0.0" } }, + "os-name": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/os-name/-/os-name-3.0.0.tgz", + "integrity": "sha512-7c74tib2FsdFbQ3W+qj8Tyd1R3Z6tuVRNNxXjJcZ4NgjIEQU9N/prVMqcW29XZPXGACqaXN3jq58/6hoaoXH6g==", + "dev": true, + "requires": { + "macos-release": "^2.0.0", + "windows-release": "^3.1.0" + } + }, "os-tmpdir": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", @@ -12200,9 +12273,9 @@ "dev": true }, "p-limit": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.1.0.tgz", - "integrity": "sha512-NhURkNcrVB+8hNfLuysU8enY5xn2KXphsHBaC2YmRNTZRc7RWusw6apSpdEj3jo4CMb6W9nrF6tTnsJsJeyu6g==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.0.tgz", + "integrity": "sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ==", "dev": true, "requires": { "p-try": "^2.0.0" @@ -12245,9 +12318,9 @@ "dev": true }, "p-try": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.0.0.tgz", - "integrity": "sha512-hMp0onDKIajHfIkdRk3P4CdCmErkYAxxDtP3Wx/4nZ3aGlau2VKh3mZpcuFkH27WQkL/3WBCPOktzA9ZOAnMQQ==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.1.0.tgz", + "integrity": "sha512-H2RyIJ7+A3rjkwKC2l5GGtU4H1vkxKCAGsWasNVd0Set+6i4znxbWy6/j16YDPJDWxhsgZiKAstMEP8wCdSpjA==", "dev": true }, "p-waterfall": { @@ -12260,9 +12333,9 @@ } }, "pacote": { - "version": "9.4.1", - "resolved": "https://registry.npmjs.org/pacote/-/pacote-9.4.1.tgz", - "integrity": "sha512-YKSRsQqmeHxgra0KCdWA2FtVxDPUlBiCdmew+mSe44pzlx5t1ViRMWiQg18T+DREA+vSqYfKzynaToFR4hcKHw==", + "version": "9.5.0", + "resolved": "https://registry.npmjs.org/pacote/-/pacote-9.5.0.tgz", + "integrity": "sha512-aUplXozRbzhaJO48FaaeClmN+2Mwt741MC6M3bevIGZwdCaP7frXzbUOfOWa91FPHoLITzG0hYaKY363lxO3bg==", "dev": true, "requires": { "bluebird": "^3.5.3", @@ -12327,9 +12400,9 @@ } }, "pako": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.8.tgz", - "integrity": "sha512-6i0HVbUfcKaTv+EG8ZTr75az7GFXcLYk9UyLEg7Notv/Ma+z/UG3TCoz6GiNeOrn1E/e63I0X/Hpw18jHOTUnA==", + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.10.tgz", + "integrity": "sha512-0DTvPVU3ed8+HNXOu5Bs+o//Mbdj9VNQMUOe9oKCwh8l0GNwpTDMKCWbRjgtD291AWnkAgkqA/LOnQS8AmS1tw==", "dev": true }, "parallel-transform": { @@ -12344,9 +12417,9 @@ } }, "parse-asn1": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.3.tgz", - "integrity": "sha512-VrPoetlz7B/FqjBLD2f5wBVZvsZVLnRUrxVLfRYhGXCODa/NWE4p3Wp+6+aV3ZPL3KM7/OZmxDIwwijD7yuucg==", + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.4.tgz", + "integrity": "sha512-Qs5duJcuvNExRfFZ99HDD3z4mAi3r9Wl/FOjEOijlxwCZs7E7mW2vjTpgQ4J8LpTF8x5v+1Vn5UQFejmWT11aw==", "dev": true, "requires": { "asn1.js": "^4.0.0", @@ -12407,6 +12480,36 @@ "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=", "dev": true }, + "parse-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/parse-path/-/parse-path-4.0.1.tgz", + "integrity": "sha512-d7yhga0Oc+PwNXDvQ0Jv1BuWkLVPXcAoQ/WREgd6vNNoKYaW52KI+RdOFjI63wjkmps9yUE8VS4veP+AgpQ/hA==", + "dev": true, + "requires": { + "is-ssh": "^1.3.0", + "protocols": "^1.4.0" + } + }, + "parse-url": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/parse-url/-/parse-url-5.0.1.tgz", + "integrity": "sha512-flNUPP27r3vJpROi0/R3/2efgKkyXqnXwyP1KQ2U0SfFRgdizOdWfvrrvJg1LuOoxs7GQhmxJlq23IpQ/BkByg==", + "dev": true, + "requires": { + "is-ssh": "^1.3.0", + "normalize-url": "^3.3.0", + "parse-path": "^4.0.0", + "protocols": "^1.4.0" + }, + "dependencies": { + "normalize-url": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-3.3.0.tgz", + "integrity": "sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg==", + "dev": true + } + } + }, "parsejson": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/parsejson/-/parsejson-0.0.3.tgz", @@ -12531,9 +12634,9 @@ "dev": true }, "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", "dev": true }, "pinkie": { @@ -13374,9 +13477,9 @@ "dev": true }, "js-yaml": { - "version": "3.12.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.1.tgz", - "integrity": "sha512-um46hB9wNOKlwkHgiuyEVAybXBjwFUV0Z/RaHJblRd9DXltue9FTYvzCr9ErQrK9Adz5MU4gHWVaNUfdmrC8qA==", + "version": "3.13.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.0.tgz", + "integrity": "sha512-pZZoSxcCYco+DIKBTimr67J6Hy+EYGZDY/HCWC+iAEA9h1ByhMXAIVUXMcMFpOCxQ/xjXmPI2MkDL5HRm5eFrQ==", "dev": true, "requires": { "argparse": "^1.0.7", @@ -13408,9 +13511,9 @@ }, "dependencies": { "ajv": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.7.0.tgz", - "integrity": "sha512-RZXPviBTtfmtka9n9sy1N5M5b82CbxWIR6HIis4s3WQTXDJamc/0gpCWNGz6EWdWp4DOfjzJfhz/AS9zVPjjWg==", + "version": "6.10.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.0.tgz", + "integrity": "sha512-nffhOpkymDECQyR0mnsUtoCE8RlX38G0rYP+wgLWFyZuUyuuojSSvi/+euOiQBIn63whYwYVIIH1TvE3tu4OEg==", "dev": true, "requires": { "fast-deep-equal": "^2.0.1", @@ -13420,9 +13523,9 @@ } }, "ajv-keywords": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.3.0.tgz", - "integrity": "sha512-CMzN9S62ZOO4sA/mJZIO4S++ZM7KFWzH3PPWkveLhy4OZ9i1/VatgwWMD46w/XbGCBy7Ye0gCk+Za6mmyfKK7g==", + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.4.0.tgz", + "integrity": "sha512-aUjdRFISbuFOl0EIZc+9e4FfZp0bDZgAdOOf30bJmw8VM9v84SHyVyxDfbWxpGYbdZD/9XoKxfHVNmxPkhwyGw==", "dev": true }, "schema-utils": { @@ -14225,9 +14328,9 @@ } }, "postcss-normalize-display-values": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.1.tgz", - "integrity": "sha512-R5mC4vaDdvsrku96yXP7zak+O3Mm9Y8IslUobk7IMP+u/g+lXvcN4jngmHY5zeJnrQvE13dfAg5ViU05ZFDwdg==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.2.tgz", + "integrity": "sha512-3F2jcsaMW7+VtRMAqf/3m4cPFhPD3EFRgNs18u+k3lTJJlVe7d0YPO+bnwqo2xg8YiRpDXJI2u8A0wqJxMsQuQ==", "dev": true, "requires": { "cssnano-util-get-match": "^4.0.0", @@ -14236,9 +14339,9 @@ } }, "postcss-normalize-positions": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-4.0.1.tgz", - "integrity": "sha512-GNoOaLRBM0gvH+ZRb2vKCIujzz4aclli64MBwDuYGU2EY53LwiP7MxOZGE46UGtotrSnmarPPZ69l2S/uxdaWA==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-4.0.2.tgz", + "integrity": "sha512-Dlf3/9AxpxE+NF1fJxYDeggi5WwV35MXGFnnoccP/9qDtFrTArZ0D0R+iKcg5WsUd8nUYMIl8yXDCtcrT8JrdA==", "dev": true, "requires": { "cssnano-util-get-arguments": "^4.0.0", @@ -14248,9 +14351,9 @@ } }, "postcss-normalize-repeat-style": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-4.0.1.tgz", - "integrity": "sha512-fFHPGIjBUyUiswY2rd9rsFcC0t3oRta4wxE1h3lpwfQZwFeFjXFSiDtdJ7APCmHQOnUZnqYBADNRPKPwFAONgA==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-4.0.2.tgz", + "integrity": "sha512-qvigdYYMpSuoFs3Is/f5nHdRLJN/ITA7huIoCyqqENJe9PvPmLhNLMu7QTjPdtnVf6OcYYO5SHonx4+fbJE1+Q==", "dev": true, "requires": { "cssnano-util-get-arguments": "^4.0.0", @@ -14260,9 +14363,9 @@ } }, "postcss-normalize-string": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-4.0.1.tgz", - "integrity": "sha512-IJoexFTkAvAq5UZVxWXAGE0yLoNN/012v7TQh5nDo6imZJl2Fwgbhy3J2qnIoaDBrtUP0H7JrXlX1jjn2YcvCQ==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-4.0.2.tgz", + "integrity": "sha512-RrERod97Dnwqq49WNz8qo66ps0swYZDSb6rM57kN2J+aoyEAJfZ6bMx0sx/F9TIEX0xthPGCmeyiam/jXif0eA==", "dev": true, "requires": { "has": "^1.0.0", @@ -14271,9 +14374,9 @@ } }, "postcss-normalize-timing-functions": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-4.0.1.tgz", - "integrity": "sha512-1nOtk7ze36+63ONWD8RCaRDYsnzorrj+Q6fxkQV+mlY5+471Qx9kspqv0O/qQNMeApg8KNrRf496zHwJ3tBZ7w==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-4.0.2.tgz", + "integrity": "sha512-acwJY95edP762e++00Ehq9L4sZCEcOPyaHwoaFOhIwWCDfik6YvqsYNxckee65JHLKzuNSSmAdxwD2Cud1Z54A==", "dev": true, "requires": { "cssnano-util-get-match": "^4.0.0", @@ -14376,9 +14479,9 @@ } }, "postcss-normalize-whitespace": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-4.0.1.tgz", - "integrity": "sha512-U8MBODMB2L+nStzOk6VvWWjZgi5kQNShCyjRhMT3s+W9Jw93yIjOnrEkKYD3Ul7ChWbEcjDWmXq0qOL9MIAnAw==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-4.0.2.tgz", + "integrity": "sha512-tO8QIgrsI3p95r8fyqKV+ufKlSHh9hMJqACqbv2XknufqEDhDvbguXGBBqxw9nsQoXWf0qOqppziKJKHMD4GtA==", "dev": true, "requires": { "postcss": "^7.0.0", @@ -15041,13 +15144,14 @@ } }, "prop-types": { - "version": "15.6.2", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.6.2.tgz", - "integrity": "sha512-3pboPvLiWD7dkI3qf3KbUe6hKFKa52w+AE0VCqECtf+QHAKgOL37tTaNCnuX1nAAQ4ZhyP+kYVKf8rLmJ/feDQ==", + "version": "15.7.2", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz", + "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==", "dev": true, "requires": { - "loose-envify": "^1.3.1", - "object-assign": "^4.1.1" + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.8.1" } }, "proto-list": { @@ -15056,6 +15160,12 @@ "integrity": "sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk=", "dev": true }, + "protocols": { + "version": "1.4.7", + "resolved": "https://registry.npmjs.org/protocols/-/protocols-1.4.7.tgz", + "integrity": "sha512-Fx65lf9/YDn3hUX08XUc0J8rSux36rEsyiv21ZGUC1mOyeM3lTRpZLcrm8aAolzS4itwVfm7TAPyxC2E5zd6xg==", + "dev": true + }, "protoduck": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/protoduck/-/protoduck-5.0.1.tgz", @@ -15187,9 +15297,9 @@ "dev": true }, "querystringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.1.0.tgz", - "integrity": "sha512-sluvZZ1YiTLD5jsqZcDmFyV2EwToyXZBfpoVOmktMmW+VEnhgakFHnasVph65fOjGPTWN0Nw3+XQaSeMayr0kg==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.1.1.tgz", + "integrity": "sha512-w7fLxIRCRT7U8Qu53jQnJyPkYZIaR4n5151KMfcJlO/A9397Wxb1amJvROTK6TOnp7PfoAmg/qXiNHI+08jRfA==", "dev": true }, "quick-lru": { @@ -15218,9 +15328,9 @@ } }, "randombytes": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.0.6.tgz", - "integrity": "sha512-CIQ5OFxf4Jou6uOKe9t1AOgqpeU5fd70A8NPdHSGeYXqXsPe6peOwI0cUl88RWZ6sP1vPMV3avd/R6cZ5/sP1A==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", "dev": true, "requires": { "safe-buffer": "^5.1.0" @@ -15254,6 +15364,12 @@ "unpipe": "1.0.0" } }, + "react-is": { + "version": "16.8.5", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.8.5.tgz", + "integrity": "sha512-sudt2uq5P/2TznPV4Wtdi+Lnq3yaYW8LfvPKLM9BKD8jJNBkxMVyB0C9/GmVhLw7Jbdmndk/73n7XQGeN9A3QQ==", + "dev": true + }, "read": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/read/-/read-1.0.7.tgz", @@ -15294,9 +15410,9 @@ } }, "read-package-tree": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/read-package-tree/-/read-package-tree-5.2.1.tgz", - "integrity": "sha512-2CNoRoh95LxY47LvqrehIAfUVda2JbuFE/HaGYs42bNrGG+ojbw1h3zOcPcQ+1GQ3+rkzNndZn85u1XyZ3UsIA==", + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/read-package-tree/-/read-package-tree-5.2.2.tgz", + "integrity": "sha512-rW3XWUUkhdKmN2JKB4FL563YAgtINifso5KShykufR03nJ5loGFlkUMe1g/yxmqX073SoYYTsgXu7XdDinKZuA==", "dev": true, "requires": { "debuglog": "^1.0.1", @@ -15419,17 +15535,6 @@ "code-point-at": "^1.0.0", "is-fullwidth-code-point": "^1.0.0", "mute-stream": "0.0.5" - }, - "dependencies": { - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "dev": true, - "requires": { - "number-is-nan": "^1.0.0" - } - } } }, "rechoir": { @@ -15494,9 +15599,9 @@ "dev": true }, "regenerate-unicode-properties": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-7.0.0.tgz", - "integrity": "sha512-s5NGghCE4itSlUS+0WUj88G6cfMVMmH8boTPNvABf8od+2dhT9WDlWu8n01raQAJZMOK8Ch6jSexaRO7swd6aw==", + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.0.2.tgz", + "integrity": "sha512-SbA/iNrBUf6Pv2zU8Ekv1Qbhv92yxL4hiDa2siuxs4KKn4oOoMDHXjAf7+Nz9qinUQ46B1LcWEi/PhJfPWpZWQ==", "dev": true, "requires": { "regenerate": "^1.4.0" @@ -15509,9 +15614,9 @@ "dev": true }, "regenerator-transform": { - "version": "0.13.3", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.13.3.tgz", - "integrity": "sha512-5ipTrZFSq5vU2YoGoww4uaRVAK4wyYC4TSICibbfEPOruUu8FFP7ErV0BjmbIOEpn3O/k9na9UEdYR/3m7N6uA==", + "version": "0.13.4", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.13.4.tgz", + "integrity": "sha512-T0QMBjK3J0MtxjPmdIMXm72Wvj2Abb0Bd4HADdfijwMdoIsyQZ6fWC7kDFhk2YinBBEMZDL7Y7wh0J1sGx3S4A==", "dev": true, "requires": { "private": "^0.1.6" @@ -15537,28 +15642,23 @@ } }, "regexp-tree": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/regexp-tree/-/regexp-tree-0.1.1.tgz", - "integrity": "sha512-HwRjOquc9QOwKTgbxvZTcddS5mlNlwePMQ3NFL8broajMLD5CXDAqas8Y5yxJH5QtZp5iRor3YCILd5pz71Cgw==", - "dev": true, - "requires": { - "cli-table3": "^0.5.0", - "colors": "^1.1.2", - "yargs": "^12.0.5" - } + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/regexp-tree/-/regexp-tree-0.1.5.tgz", + "integrity": "sha512-nUmxvfJyAODw+0B13hj8CFVAxhe7fDEAgJgaotBu3nnR+IgGgZq59YedJP5VYTlkEfqjuK6TuRpnymKdatLZfQ==", + "dev": true }, "regexpu-core": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.4.0.tgz", - "integrity": "sha512-eDDWElbwwI3K0Lo6CqbQbA6FwgtCz4kYTarrri1okfkRLZAqstU+B3voZBCjg8Fl6iq0gXrJG6MvRgLthfvgOA==", + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.5.4.tgz", + "integrity": "sha512-BtizvGtFQKGPUcTy56o3nk1bGRp4SZOTYrDtGNlqCQufptV5IkkLN6Emw+yunAJjzf+C9FQFtvq7IoA3+oMYHQ==", "dev": true, "requires": { "regenerate": "^1.4.0", - "regenerate-unicode-properties": "^7.0.0", + "regenerate-unicode-properties": "^8.0.2", "regjsgen": "^0.5.0", "regjsparser": "^0.6.0", "unicode-match-property-ecmascript": "^1.0.4", - "unicode-match-property-value-ecmascript": "^1.0.2" + "unicode-match-property-value-ecmascript": "^1.1.0" } }, "regjsgen": { @@ -15901,15 +16001,6 @@ "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=", "dev": true }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "dev": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, "lcid": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", @@ -15984,19 +16075,8 @@ "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", "dev": true, "requires": { - "find-up": "^1.0.0", - "read-pkg": "^1.0.0" - } - }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dev": true, - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" + "find-up": "^1.0.0", + "read-pkg": "^1.0.0" } }, "strip-ansi": { @@ -16073,6 +16153,14 @@ "neo-async": "^2.5.0", "pify": "^3.0.0", "semver": "^5.5.0" + }, + "dependencies": { + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + } } }, "sax": { @@ -16092,9 +16180,9 @@ }, "dependencies": { "ajv": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.7.0.tgz", - "integrity": "sha512-RZXPviBTtfmtka9n9sy1N5M5b82CbxWIR6HIis4s3WQTXDJamc/0gpCWNGz6EWdWp4DOfjzJfhz/AS9zVPjjWg==", + "version": "6.10.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.0.tgz", + "integrity": "sha512-nffhOpkymDECQyR0mnsUtoCE8RlX38G0rYP+wgLWFyZuUyuuojSSvi/+euOiQBIn63whYwYVIIH1TvE3tu4OEg==", "dev": true, "requires": { "fast-deep-equal": "^2.0.1", @@ -16104,9 +16192,9 @@ } }, "ajv-keywords": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.3.0.tgz", - "integrity": "sha512-CMzN9S62ZOO4sA/mJZIO4S++ZM7KFWzH3PPWkveLhy4OZ9i1/VatgwWMD46w/XbGCBy7Ye0gCk+Za6mmyfKK7g==", + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.4.0.tgz", + "integrity": "sha512-aUjdRFISbuFOl0EIZc+9e4FfZp0bDZgAdOOf30bJmw8VM9v84SHyVyxDfbWxpGYbdZD/9XoKxfHVNmxPkhwyGw==", "dev": true } } @@ -16675,9 +16763,9 @@ } }, "socks": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/socks/-/socks-2.2.3.tgz", - "integrity": "sha512-+2r83WaRT3PXYoO/1z+RDEBE7Z2f9YcdQnJ0K/ncXXbV5gJ6wYfNAebYFYiiUjM6E4JyXnPY8cimwyvFYHVUUA==", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.3.2.tgz", + "integrity": "sha512-pCpjxQgOByDHLlNqlnh/mNSAxIUkyBBuwwhTcV+enZGbDaClPvHdvm6uvOwZfFJkam7cGhBNbb4JxiP8UZkRvQ==", "dev": true, "requires": { "ip": "^1.1.5", @@ -16685,13 +16773,13 @@ } }, "socks-proxy-agent": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-4.0.1.tgz", - "integrity": "sha512-Kezx6/VBguXOsEe5oU3lXYyKMi4+gva72TwJ7pQY5JfqUx2nMk7NXA6z/mpNqIlfQjWYVfeuNvQjexiTaTn6Nw==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-4.0.2.tgz", + "integrity": "sha512-NT6syHhI9LmuEMSK6Kd2V7gNv5KFZoLE7V5udWmn0de+3Mkj3UMA/AJPLyeNUVmElCurSHtUdM3ETpR3z770Wg==", "dev": true, "requires": { - "agent-base": "~4.2.0", - "socks": "~2.2.0" + "agent-base": "~4.2.1", + "socks": "~2.3.2" } }, "sort-keys": { @@ -16729,9 +16817,9 @@ } }, "source-map-support": { - "version": "0.5.10", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.10.tgz", - "integrity": "sha512-YfQ3tQFTK/yzlGJuX8pTwa4tifQj4QS2Mj7UegOu8jAz59MqIiMGPXxQhVQiIMNzayuUSF/jEuVnfFF5JqybmQ==", + "version": "0.5.11", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.11.tgz", + "integrity": "sha512-//sajEx/fGL3iw6fltKMdPvy8kL3kJ2O3iuYlRoT3k9Kb4BjOoZ+BZzaNHeuaruSt+Kf3Zk9tnfAQg9/AJqUVQ==", "dev": true, "requires": { "buffer-from": "^1.0.0", @@ -16844,9 +16932,9 @@ "dev": true }, "readable-stream": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.1.1.tgz", - "integrity": "sha512-DkN66hPyqDhnIQ6Jcsvx9bFjhw214O4poMBcIMgPVpQvNy9a0e0Uhg5SqySyDKAmUlwt8LonTBz1ezOnM8pUdA==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.2.0.tgz", + "integrity": "sha512-RV20kLjdmpZuTF1INEb9IA3L68Nmi+Ri7ppZqo78wj//Pn62fCoJyV9zalccNzDD/OuJpMG4f+pfMl8+L6QdGw==", "dev": true, "requires": { "inherits": "^2.0.3", @@ -17003,13 +17091,31 @@ "dev": true }, "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", "dev": true, "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + } } }, "string_decoder": { @@ -17021,18 +17127,12 @@ "safe-buffer": "~5.1.0" } }, - "stringify-package": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/stringify-package/-/stringify-package-1.0.0.tgz", - "integrity": "sha512-JIQqiWmLiEozOC0b0BtxZ/AOUtdUZHCBPgqIZ2kSJJqGwgb9neo44XdTHUC4HZSGqi03hOeB7W/E8rAlKnGe9g==", - "dev": true - }, "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", "requires": { - "ansi-regex": "^3.0.0" + "ansi-regex": "^4.1.0" } }, "strip-bom": { @@ -17089,9 +17189,9 @@ } }, "stylehacks": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-4.0.1.tgz", - "integrity": "sha512-TK5zEPeD9NyC1uPIdjikzsgWxdQQN/ry1X3d1iOz1UkYDCmcr928gWD1KHgyC27F50UnE0xCTrBOO1l6KR8M4w==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-4.0.3.tgz", + "integrity": "sha512-7GlLk9JwlElY4Y6a/rmbH2MhVlTyVmiJd1PfTCqFaIBEGMYNsrO/v3SeGTdhBThLg4Z+NbOk/qFMwCa+J+3p/g==", "dev": true, "requires": { "browserslist": "^4.0.0", @@ -17133,14 +17233,6 @@ "mkdirp": "~0.5.1", "sax": "~1.2.1", "whet.extend": "~0.9.9" - }, - "dependencies": { - "colors": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz", - "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=", - "dev": true - } } }, "table": { @@ -17182,6 +17274,39 @@ "supports-color": "^2.0.0" } }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + } + } + }, "strip-ansi": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", @@ -17240,25 +17365,36 @@ "pify": "^3.0.0", "temp-dir": "^1.0.0", "uuid": "^3.0.1" + }, + "dependencies": { + "make-dir": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", + "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", + "dev": true, + "requires": { + "pify": "^3.0.0" + } + }, + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + } } }, "terser": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/terser/-/terser-3.14.1.tgz", - "integrity": "sha512-NSo3E99QDbYSMeJaEk9YW2lTg3qS9V0aKGlb+PlOrei1X02r1wSBHCNX/O+yeTRFSWPKPIGj6MqvvdqV4rnVGw==", + "version": "3.17.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-3.17.0.tgz", + "integrity": "sha512-/FQzzPJmCpjAH9Xvk2paiWrFq+5M6aVOf+2KRbwhByISDX/EujxsK+BAvrhb6H+2rtrLCHK9N01wO014vrIwVQ==", "dev": true, "requires": { - "commander": "~2.17.1", + "commander": "^2.19.0", "source-map": "~0.6.1", - "source-map-support": "~0.5.6" + "source-map-support": "~0.5.10" }, "dependencies": { - "commander": { - "version": "2.17.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz", - "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==", - "dev": true - }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -17268,9 +17404,9 @@ } }, "terser-webpack-plugin": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.2.1.tgz", - "integrity": "sha512-GGSt+gbT0oKcMDmPx4SRSfJPE1XaN3kQRWG4ghxKQw9cn5G9x6aCKSsgYdvyM0na9NJ4Drv0RG6jbBByZ5CMjw==", + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.2.3.tgz", + "integrity": "sha512-GOK7q85oAb/5kE12fMuLdn2btOS9OBZn4VsecpHDywoUC/jLhSAKOiYo0ezx7ss2EXPMzyEWFoE0s1WLE+4+oA==", "dev": true, "requires": { "cacache": "^11.0.2", @@ -17278,15 +17414,15 @@ "schema-utils": "^1.0.0", "serialize-javascript": "^1.4.0", "source-map": "^0.6.1", - "terser": "^3.8.1", + "terser": "^3.16.1", "webpack-sources": "^1.1.0", "worker-farm": "^1.5.2" }, "dependencies": { "ajv": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.7.0.tgz", - "integrity": "sha512-RZXPviBTtfmtka9n9sy1N5M5b82CbxWIR6HIis4s3WQTXDJamc/0gpCWNGz6EWdWp4DOfjzJfhz/AS9zVPjjWg==", + "version": "6.10.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.0.tgz", + "integrity": "sha512-nffhOpkymDECQyR0mnsUtoCE8RlX38G0rYP+wgLWFyZuUyuuojSSvi/+euOiQBIn63whYwYVIIH1TvE3tu4OEg==", "dev": true, "requires": { "fast-deep-equal": "^2.0.1", @@ -17296,9 +17432,9 @@ } }, "ajv-keywords": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.3.0.tgz", - "integrity": "sha512-CMzN9S62ZOO4sA/mJZIO4S++ZM7KFWzH3PPWkveLhy4OZ9i1/VatgwWMD46w/XbGCBy7Ye0gCk+Za6mmyfKK7g==", + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.4.0.tgz", + "integrity": "sha512-aUjdRFISbuFOl0EIZc+9e4FfZp0bDZgAdOOf30bJmw8VM9v84SHyVyxDfbWxpGYbdZD/9XoKxfHVNmxPkhwyGw==", "dev": true }, "schema-utils": { @@ -17563,23 +17699,16 @@ "dev": true }, "uglify-js": { - "version": "3.4.9", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.4.9.tgz", - "integrity": "sha512-8CJsbKOtEbnJsTyv6LE6m6ZKniqMiFWmm9sRbopbkGs3gMPPfd3Fh8iIA4Ykv5MgaTbqHr4BaoGLJLZNhsrW1Q==", + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.5.2.tgz", + "integrity": "sha512-imog1WIsi9Yb56yRt5TfYVxGmnWs3WSGU73ieSOlMVFwhJCA9W8fqFFMMj4kgDqiS/80LGdsYnWL7O9UcjEBlg==", "dev": true, "optional": true, "requires": { - "commander": "~2.17.1", + "commander": "~2.19.0", "source-map": "~0.6.1" }, "dependencies": { - "commander": { - "version": "2.17.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz", - "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==", - "dev": true, - "optional": true - }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -17662,6 +17791,15 @@ "path-exists": "^3.0.0" } }, + "make-dir": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", + "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", + "dev": true, + "requires": { + "pify": "^3.0.0" + } + }, "mississippi": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-2.0.0.tgz", @@ -17704,6 +17842,12 @@ "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", "dev": true }, + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + }, "pkg-dir": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz", @@ -17808,15 +17952,15 @@ } }, "unicode-match-property-value-ecmascript": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.0.2.tgz", - "integrity": "sha512-Rx7yODZC1L/T8XKo/2kNzVAQaRE88AaMvI1EF/Xnj3GW2wzN6fop9DDWuFAKUVFH7vozkz26DzP0qyWLKLIVPQ==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.1.0.tgz", + "integrity": "sha512-hDTHvaBk3RmFzvSl0UVrUmC3PuW9wKVnpoUDYH0JDkSIovzw+J5viQmeYHxVSBptubnr7PbH2e0fnpDRQnQl5g==", "dev": true }, "unicode-property-aliases-ecmascript": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.0.4.tgz", - "integrity": "sha512-2WSLa6OdYd2ng8oqiGIWnJqyFArvhn+5vgx5GTxMbUYjCYKUcuKS62YLFF0R/BDGlB1yzXjQOLtPAfHsgirEpg==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.0.5.tgz", + "integrity": "sha512-L5RAqCfXqAwR3RriF8pM0lU0w4Ryf/GgzONwi6KnL1taJQa7x1TCxdJnILX59WIGOwR57IVxn7Nej0fz1Ny6fw==", "dev": true }, "union-value": { @@ -17884,6 +18028,15 @@ "imurmurhash": "^0.1.4" } }, + "universal-user-agent": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-2.0.3.tgz", + "integrity": "sha512-eRHEHhChCBHrZsA4WEhdgiOKgdvgrMIHwnwnqD0r5C6AO8kwKcG7qSku3iXdhvHL3YvsS9ZkSGN8h/hIpoFC8g==", + "dev": true, + "requires": { + "os-name": "^3.0.0" + } + }, "universalify": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", @@ -17942,9 +18095,9 @@ } }, "upath": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/upath/-/upath-1.1.0.tgz", - "integrity": "sha512-bzpH/oBhoS/QI/YtbkqCg6VEiPYjSZtrHQM6/QnJS6OL9pKUFLqb3aFh4Scvwm45+7iAgiMkLhSbaZxUqmrprw==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.1.2.tgz", + "integrity": "sha512-kXpym8nmDmlCBr7nKdIx8P2jNBa+pBpIUFRnKJ4dr8htyYGJFokkr2ZvERRtUN+9SY+JqXouNgUPtv6JQva/2Q==", "dev": true }, "uri-js": { @@ -17996,6 +18149,12 @@ "requires-port": "^1.0.0" } }, + "url-template": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/url-template/-/url-template-2.0.8.tgz", + "integrity": "sha1-/FZaPMy/93MMd19WQflVV5FDnyE=", + "dev": true + }, "use": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", @@ -18156,15 +18315,15 @@ "dev": true }, "webpack": { - "version": "4.29.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.29.0.tgz", - "integrity": "sha512-pxdGG0keDBtamE1mNvT5zyBdx+7wkh6mh7uzMOo/uRQ/fhsdj5FXkh/j5mapzs060forql1oXqXN9HJGju+y7w==", + "version": "4.29.6", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.29.6.tgz", + "integrity": "sha512-MwBwpiE1BQpMDkbnUUaW6K8RFZjljJHArC6tWQJoFm0oQtfoSebtg4Y7/QHnJ/SddtjYLHaKGX64CFjG5rehJw==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.7.11", - "@webassemblyjs/helper-module-context": "1.7.11", - "@webassemblyjs/wasm-edit": "1.7.11", - "@webassemblyjs/wasm-parser": "1.7.11", + "@webassemblyjs/ast": "1.8.5", + "@webassemblyjs/helper-module-context": "1.8.5", + "@webassemblyjs/wasm-edit": "1.8.5", + "@webassemblyjs/wasm-parser": "1.8.5", "acorn": "^6.0.5", "acorn-dynamic-import": "^4.0.0", "ajv": "^6.1.0", @@ -18180,7 +18339,7 @@ "mkdirp": "~0.5.0", "neo-async": "^2.5.0", "node-libs-browser": "^2.0.0", - "schema-utils": "^0.4.4", + "schema-utils": "^1.0.0", "tapable": "^1.1.0", "terser-webpack-plugin": "^1.1.0", "watchpack": "^1.5.0", @@ -18188,15 +18347,15 @@ }, "dependencies": { "acorn": { - "version": "6.0.6", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.0.6.tgz", - "integrity": "sha512-5M3G/A4uBSMIlfJ+h9W125vJvPFH/zirISsW5qfxF5YzEvXJCtolLoQvM5yZft0DvMcUrPGKPOlgEu55I6iUtA==", + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.1.1.tgz", + "integrity": "sha512-jPTiwtOxaHNaAPg/dmrJ/beuzLRnXtB0kQPQ8JpotKJgTB6rX6c8mlf315941pyjBSaPg8NHXS9fhP4u17DpGA==", "dev": true }, "ajv": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.7.0.tgz", - "integrity": "sha512-RZXPviBTtfmtka9n9sy1N5M5b82CbxWIR6HIis4s3WQTXDJamc/0gpCWNGz6EWdWp4DOfjzJfhz/AS9zVPjjWg==", + "version": "6.10.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.0.tgz", + "integrity": "sha512-nffhOpkymDECQyR0mnsUtoCE8RlX38G0rYP+wgLWFyZuUyuuojSSvi/+euOiQBIn63whYwYVIIH1TvE3tu4OEg==", "dev": true, "requires": { "fast-deep-equal": "^2.0.1", @@ -18206,20 +18365,31 @@ } }, "ajv-keywords": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.3.0.tgz", - "integrity": "sha512-CMzN9S62ZOO4sA/mJZIO4S++ZM7KFWzH3PPWkveLhy4OZ9i1/VatgwWMD46w/XbGCBy7Ye0gCk+Za6mmyfKK7g==", + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.4.0.tgz", + "integrity": "sha512-aUjdRFISbuFOl0EIZc+9e4FfZp0bDZgAdOOf30bJmw8VM9v84SHyVyxDfbWxpGYbdZD/9XoKxfHVNmxPkhwyGw==", "dev": true }, "eslint-scope": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.0.tgz", - "integrity": "sha512-1G6UTDi7Jc1ELFwnR58HV4fK9OQK4S6N985f166xqXxpjU6plxFISJa2Ba9KCQuFa8RCnj/lSFJbHo7UFDBnUA==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz", + "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==", "dev": true, "requires": { "esrecurse": "^4.1.0", "estraverse": "^4.1.1" } + }, + "schema-utils": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", + "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "dev": true, + "requires": { + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" + } } } }, @@ -18256,9 +18426,9 @@ } }, "webpack-cli": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-3.2.1.tgz", - "integrity": "sha512-jeJveHwz/vwpJ3B8bxEL5a/rVKIpRNJDsKggfKnxuYeohNDW4Y/wB9N/XHJA093qZyS0r6mYL+/crLsIol4WKA==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-3.3.0.tgz", + "integrity": "sha512-t1M7G4z5FhHKJ92WRKwZ1rtvi7rHc0NZoZRbSkol0YKl4HvcC8+DsmGDmK7MmZxHSAetHagiOsjOB6MmzC2TUw==", "dev": true, "requires": { "chalk": "^2.4.1", @@ -18266,14 +18436,12 @@ "enhanced-resolve": "^4.1.0", "findup-sync": "^2.0.0", "global-modules": "^1.0.0", - "global-modules-path": "^2.3.0", "import-local": "^2.0.0", "interpret": "^1.1.0", - "lightercollective": "^0.1.0", "loader-utils": "^1.1.0", "supports-color": "^5.5.0", "v8-compile-cache": "^2.0.2", - "yargs": "^12.0.4" + "yargs": "^12.0.5" }, "dependencies": { "import-local": { @@ -18312,9 +18480,9 @@ } }, "webpack-dev-server": { - "version": "3.1.14", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-3.1.14.tgz", - "integrity": "sha512-mGXDgz5SlTxcF3hUpfC8hrQ11yhAttuUQWf1Wmb+6zo3x6rb7b9mIfuQvAPLdfDRCGRGvakBWHdHOa0I9p/EVQ==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-3.2.1.tgz", + "integrity": "sha512-sjuE4mnmx6JOh9kvSbPYw3u/6uxCLHNWfhWaIPwcXWsvWOPN+nc5baq4i9jui3oOBRXGonK9+OI0jVkaz6/rCw==", "dev": true, "requires": { "ansi-html": "0.0.7", @@ -18322,13 +18490,13 @@ "chokidar": "^2.0.0", "compression": "^1.5.2", "connect-history-api-fallback": "^1.3.0", - "debug": "^3.1.0", + "debug": "^4.1.1", "del": "^3.0.0", "express": "^4.16.2", "html-entities": "^1.2.0", - "http-proxy-middleware": "~0.18.0", + "http-proxy-middleware": "^0.19.1", "import-local": "^2.0.0", - "internal-ip": "^3.0.1", + "internal-ip": "^4.2.0", "ip": "^1.1.5", "killable": "^1.0.0", "loglevel": "^1.4.1", @@ -18342,17 +18510,17 @@ "sockjs-client": "1.3.0", "spdy": "^4.0.0", "strip-ansi": "^3.0.0", - "supports-color": "^5.1.0", + "supports-color": "^6.1.0", "url": "^0.11.0", - "webpack-dev-middleware": "3.4.0", + "webpack-dev-middleware": "^3.5.1", "webpack-log": "^2.0.0", "yargs": "12.0.2" }, "dependencies": { "ajv": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.7.0.tgz", - "integrity": "sha512-RZXPviBTtfmtka9n9sy1N5M5b82CbxWIR6HIis4s3WQTXDJamc/0gpCWNGz6EWdWp4DOfjzJfhz/AS9zVPjjWg==", + "version": "6.10.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.0.tgz", + "integrity": "sha512-nffhOpkymDECQyR0mnsUtoCE8RlX38G0rYP+wgLWFyZuUyuuojSSvi/+euOiQBIn63whYwYVIIH1TvE3tu4OEg==", "dev": true, "requires": { "fast-deep-equal": "^2.0.1", @@ -18362,9 +18530,9 @@ } }, "ajv-keywords": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.3.0.tgz", - "integrity": "sha512-CMzN9S62ZOO4sA/mJZIO4S++ZM7KFWzH3PPWkveLhy4OZ9i1/VatgwWMD46w/XbGCBy7Ye0gCk+Za6mmyfKK7g==", + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.4.0.tgz", + "integrity": "sha512-aUjdRFISbuFOl0EIZc+9e4FfZp0bDZgAdOOf30bJmw8VM9v84SHyVyxDfbWxpGYbdZD/9XoKxfHVNmxPkhwyGw==", "dev": true }, "ansi-regex": { @@ -18373,16 +18541,10 @@ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", "dev": true }, - "camelcase": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", - "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", - "dev": true - }, "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", "dev": true, "requires": { "ms": "^2.1.1" @@ -18407,6 +18569,12 @@ "resolve-cwd": "^2.0.0" } }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, "mime": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.0.tgz", @@ -18430,6 +18598,33 @@ "ajv-keywords": "^3.1.0" } }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + } + } + }, "strip-ansi": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", @@ -18439,13 +18634,22 @@ "ansi-regex": "^2.0.0" } }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + }, "webpack-dev-middleware": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-3.4.0.tgz", - "integrity": "sha512-Q9Iyc0X9dP9bAsYskAVJ/hmIZZQwf/3Sy4xCAZgL5cUkjZmUZLt4l5HpbST/Pdgjn3u6pE7u5OdGd1apgzRujA==", + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-3.6.1.tgz", + "integrity": "sha512-XQmemun8QJexMEvNFbD2BIg4eSKrmSIMrTfnl2nql2Sc6OGAYFyb8rwuYrCjl/IiEYYuyTEiimMscu7EXji/Dw==", "dev": true, "requires": { - "memory-fs": "~0.4.1", + "memory-fs": "^0.4.1", "mime": "^2.3.1", "range-parser": "^1.0.3", "webpack-log": "^2.0.0" @@ -18636,6 +18840,38 @@ "integrity": "sha1-tDFbtCFKPXBY6+7okuE/ok2YsHU=", "dev": true }, + "windows-release": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/windows-release/-/windows-release-3.1.0.tgz", + "integrity": "sha512-hBb7m7acFgQPQc222uEQTmdcGLeBmQLNLFIh0rDk3CwFOBrfjefLzEfEfmpMq8Af/n/GnFf3eYf203FY1PmudA==", + "dev": true, + "requires": { + "execa": "^0.10.0" + }, + "dependencies": { + "execa": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-0.10.0.tgz", + "integrity": "sha512-7XOMnz8Ynx1gGo/3hyV9loYNPWM94jG3+3T3Y8tsfSstFmETmENCMU/A/zj8Lyaj1lkgEepKepvd6240tBRvlw==", + "dev": true, + "requires": { + "cross-spawn": "^6.0.0", + "get-stream": "^3.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + } + }, + "get-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", + "dev": true + } + } + }, "wordwrap": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", @@ -18667,26 +18903,6 @@ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", "dev": true }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "dev": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dev": true, - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - }, "strip-ansi": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", @@ -18744,6 +18960,21 @@ "integrity": "sha1-OHHMCmoALow+Wzz38zYmRnXwa50=", "dev": true }, + "make-dir": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", + "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", + "dev": true, + "requires": { + "pify": "^3.0.0" + } + }, + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + }, "sort-keys": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-2.0.0.tgz", @@ -18856,6 +19087,39 @@ "which-module": "^2.0.0", "y18n": "^3.2.1 || ^4.0.0", "yargs-parser": "^11.1.1" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + } } }, "yargs-parser": { @@ -18866,6 +19130,14 @@ "requires": { "camelcase": "^5.0.0", "decamelize": "^1.2.0" + }, + "dependencies": { + "camelcase": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.2.0.tgz", + "integrity": "sha512-IXFsBS2pC+X0j0N/GE7Dm7j3bsEBp+oTpb7F50dwEVX7rf3IgwO9XatnegTsDtniKCUtEJH4fSU6Asw7uoVLfQ==", + "dev": true + } } }, "yeast": { diff --git a/packages/layout/README.md b/packages/layout/README.md index fbe912b7..375bc094 100644 --- a/packages/layout/README.md +++ b/packages/layout/README.md @@ -11,7 +11,7 @@ $ npm install --save @chartshq/layout ## Docs -Please refer to [this](https://www.charts.com/muze/docs) for detailed documentation. +Please refer to [this](https://muzejs.org/docs) for detailed documentation. ## Contributing diff --git a/packages/layout/package.json b/packages/layout/package.json index 341a6d4e..9fd8b672 100644 --- a/packages/layout/package.json +++ b/packages/layout/package.json @@ -2,40 +2,37 @@ "name": "@chartshq/layout", "version": "1.0.0", "description": "Layout module for Muze renderer", - "homepage": "https://www.charts.com/muze", + "homepage": "https://muzejs.org", "license": "MIT", - "author": "Charts.com ", "contributors": [ { "name": "Akash Ghoswami", - "email": "akash@charts.com" + "email": "akashgoswami90s@gmail.com" }, { "name": "Ranajit Banerjee", - "email": "ranajit.banerjee@charts.com", + "email": "ranajit.113124@gmail.com", "url": "https://github.com/ranajitbanerjee" }, { "name": "Mridul Meharia", - "email": "mridul@charts.com", + "email": "mehariamridul@gmail.com", "url": "https://github.com/mridulmeh" }, { - "name": "Subhash Haldar", - "email": "subhash@charts.com" + "name": "Subhash Haldar" }, { - "name": "Sandeep Acharya", - "email": "sandeep@charts.com" + "name": "Sandeep Acharya" }, { "name": "Rousan Ali", - "email": "rousan@charts.com", + "email": "rousanali786@gmail.com", "url": "https://rousan.io" }, { "name": "Ujjal Kumar Dutta", - "email": "ujjal@charts.com" + "email": "duttaujjalkumar@live.com" } ], "main": "src/index.js", diff --git a/packages/layout/src/grid-layout/span-maker.js b/packages/layout/src/grid-layout/span-maker.js index 593ecd5d..733916d3 100644 --- a/packages/layout/src/grid-layout/span-maker.js +++ b/packages/layout/src/grid-layout/span-maker.js @@ -226,21 +226,24 @@ export function cellSpanMaker (matrix, type, index) { return { viewMatrix, spans }; } -const spaceAllocationDueToSpan = (span, placeholder, borderWidth) => { +const spaceAllocationDueToSpan = (span = 1, placeholder, config, index) => { const height = placeholder.availHeight(); const width = placeholder.availWidth(); + const borderWidth = config.border.width; + const { unitWidths } = config.dimensions; + const { col } = index; return { [ROW_SPAN] () { - selectElement(this).style('height', `${height + borderWidth}px`); - if (span > 1) { - selectElement(this).style('height', `${height * span + borderWidth * (span)}px`); - placeholder.setAvailableSpace(width, height * span); - } + placeholder.setAvailableSpace(width, height * span); }, [COL_SPAN] () { if (span > 1) { - placeholder.setAvailableSpace(width * span + borderWidth * (span - 1), height); + let cumulativeWidth = 0; + for (let i = col; i < col + span; i++) { + cumulativeWidth += unitWidths.primary[i] - borderWidth; + } + placeholder.setAvailableSpace(cumulativeWidth + borderWidth, height); } selectElement(this).style('height', `${height}px`); } @@ -248,13 +251,17 @@ const spaceAllocationDueToSpan = (span, placeholder, borderWidth) => { }; const spanApplier = (cells, spans, config, type) => { - const borderWidth = config.border.width; - + let cellCounter = 0; cells.attr(type, function (cell, colIndex) { const span = spans[cell.rowIndex][colIndex]; const placeholder = cell.placeholder; + const index = { + row: cell.rowIndex, + col: cellCounter + }; - spaceAllocationDueToSpan(span, placeholder, borderWidth)[type].bind(this)(); + spaceAllocationDueToSpan(span, placeholder, config, index)[type].bind(this)(); + cellCounter += span; return span; }); }; diff --git a/packages/layout/src/tree-layout/drawing-manager/helper.js b/packages/layout/src/tree-layout/drawing-manager/helper.js index 399e7113..ce1bf71a 100644 --- a/packages/layout/src/tree-layout/drawing-manager/helper.js +++ b/packages/layout/src/tree-layout/drawing-manager/helper.js @@ -1,3 +1,4 @@ +import { selectElement } from 'muze-utils'; import { HTMLRenderer } from '../renderers/html-renderer'; import { LayoutComponent } from '../layout-component'; @@ -33,7 +34,9 @@ export const drawComponent = (componentData) => { }; export const removeElement = (elemID) => { - document.removeElement(document.getElementById(elemID)); + if (elemID) { + selectElement(`#${elemID}`).remove(); + } }; export const resolveAligment = (context, componentData) => { diff --git a/packages/layout/src/tree-layout/layout-manager/index.js b/packages/layout/src/tree-layout/layout-manager/index.js index 4d2823aa..61dbeccf 100644 --- a/packages/layout/src/tree-layout/layout-manager/index.js +++ b/packages/layout/src/tree-layout/layout-manager/index.js @@ -8,6 +8,7 @@ import { } from '../constants/defaults'; import { DrawingManager } from '../drawing-manager'; +import { removeElement } from '../drawing-manager/helper'; import { Utils } from '../utils'; import { LayoutDef } from './layout-def'; import { calLayOutDef } from './helper'; @@ -139,6 +140,10 @@ export default class LayoutManager { return this._layoutDef.componentMap().get(componentName); } + removeComponent (id) { + return removeElement(id); + } + renderAt (mount) { if (mount) { this._renderAt = mount; diff --git a/packages/layout/src/utils/index.js b/packages/layout/src/utils/index.js index 8e56634a..f4646681 100644 --- a/packages/layout/src/utils/index.js +++ b/packages/layout/src/utils/index.js @@ -209,8 +209,9 @@ export const getLogicalSpace = (item, measures, minMeasures, maxMeasure = []) => valueArray.forEach((placeholder, colIndex) => { placeholder.setAvailableSpace(); const space = placeholder.getLogicalSpace(); + const minSecondMeasure = placeholder.getMinMeasures(minMeasures[secondMeasure]); - sMeasure = Math.max(sMeasure, +space[secondMeasure], minMeasures[secondMeasure]); + sMeasure = Math.max(sMeasure, +space[secondMeasure], minSecondMeasure); maxMeasure[colIndex] = Math.max(maxMeasure[colIndex] || 0, space[firstMeasure]); fMeasure += +maxMeasure[colIndex]; }); @@ -241,6 +242,7 @@ export const computeLogicalSpace = (item = {}, config, maxMeasures) => { const { firstMeasure, secondMeasure } = getMeasureInfo(isTransposed); const { values } = item; const minMeasures = getMinMeasures(isTransposed, unitMeasures); + if (values[0].key) { const logicalSpace = { [firstMeasure]: 0, [secondMeasure]: 0 }; @@ -250,12 +252,14 @@ export const computeLogicalSpace = (item = {}, config, maxMeasures) => { // Set logical space for first measure logicalSpace[firstMeasure] = Math.max(logicalSpace[firstMeasure], space[firstMeasure], minMeasures[firstMeasure]); + // Set logical space for second measure logicalSpace[secondMeasure] += +space[secondMeasure]; }); item.space = logicalSpace; return logicalSpace; } + return getLogicalSpace(item, { firstMeasure, secondMeasure }, minMeasures, maxMeasures); }; diff --git a/packages/layout/src/visual-matrix/column-matrix.js b/packages/layout/src/visual-matrix/column-matrix.js index fba8bde4..ea712386 100644 --- a/packages/layout/src/visual-matrix/column-matrix.js +++ b/packages/layout/src/visual-matrix/column-matrix.js @@ -119,7 +119,7 @@ export default class ColumnVisualMatrix extends VisualMatrix { height, maxHeights } = measures; - let remainaingHeight = height; + let remainingHeight = height; let heightDist = []; let conditions = []; let divider = 2; @@ -133,21 +133,17 @@ export default class ColumnVisualMatrix extends VisualMatrix { conditions = priority === 0 ? [primaryMatrixLength - 1] : [primaryMatrixLength]; divider = 1; } - maxHeights.forEach((e, i) => { - if (conditions.indexOf(i) === -1) { - heightDist[i] = e; - remainaingHeight -= e; + maxHeights.forEach((heights, index) => { + if (conditions.indexOf(index) === -1) { + heightDist[index] = heights; + remainingHeight -= heights; } }); - if (remainaingHeight < 0) { + if (remainingHeight < 0) { heightDist = heightDist.map(() => 0); } else { - conditions.forEach((e) => { - if (remainaingHeight / divider < maxHeights[e]) { - heightDist[e] = 0; - } else { - heightDist[e] = Math.min(maxHeights[e], (remainaingHeight) / divider); - } + conditions.forEach((condition) => { + heightDist[condition] = Math.min(maxHeights[condition], (remainingHeight) / divider); }); } return heightDist; diff --git a/packages/layout/src/visual-matrix/row-matrix.js b/packages/layout/src/visual-matrix/row-matrix.js index a52765f2..4683d394 100644 --- a/packages/layout/src/visual-matrix/row-matrix.js +++ b/packages/layout/src/visual-matrix/row-matrix.js @@ -110,8 +110,8 @@ export default class RowVisualMatrix extends VisualMatrix { } getPriorityDistribution (measures) { - let remainaingAvailWidth; - let remainaingWidth; + let remainingAvailWidth; + let remainingWidth; let cWidths = []; let conditions = []; let maxPrioritySpace = 0; @@ -127,8 +127,8 @@ export default class RowVisualMatrix extends VisualMatrix { const dist = []; - remainaingAvailWidth = availableWidth; - remainaingWidth = currentWidth; + remainingAvailWidth = availableWidth; + remainingWidth = currentWidth; if (priority === 2) { conditions = [primaryMatrixLength - 1, primaryMatrixLength]; @@ -140,12 +140,12 @@ export default class RowVisualMatrix extends VisualMatrix { conditions.forEach((i) => { dist[i] = maxWidths[i]; maxPrioritySpace += maxWidths[i]; - remainaingAvailWidth -= dist[i]; - remainaingWidth -= dist[i]; + remainingAvailWidth -= dist[i]; + remainingWidth -= dist[i]; }); matrix[0].forEach((e, i) => { if (conditions.indexOf(i) === -1) { - dist[i] = remainaingAvailWidth * (maxWidths[i] / remainaingWidth); + dist[i] = remainingAvailWidth * (maxWidths[i] / remainingWidth); } }); matrix.forEach(row => row.forEach((col, cIdx) => { diff --git a/packages/muze-axis/README.md b/packages/muze-axis/README.md index 302ea0bd..e5cb0aa2 100644 --- a/packages/muze-axis/README.md +++ b/packages/muze-axis/README.md @@ -10,7 +10,7 @@ $ npm install --save @chartshq/muze-axis ## Docs -Please refer to [this](https://www.charts.com/muze/docs) for detailed documentation. +Please refer to [this](https://muzejs.org/docs) for detailed documentation. ## Contributing diff --git a/packages/muze-axis/package.json b/packages/muze-axis/package.json index 395475d4..621c1605 100644 --- a/packages/muze-axis/package.json +++ b/packages/muze-axis/package.json @@ -2,40 +2,37 @@ "name": "@chartshq/muze-axis", "version": "1.0.0", "description": "This contains wrapper classes over d3 axis", - "homepage": "https://www.charts.com/muze", + "homepage": "https:/muzejs.org", "license": "MIT", - "author": "Charts.com ", "contributors": [ { "name": "Akash Ghoswami", - "email": "akash@charts.com" + "email": "akashgoswami90s@gmail.com" }, { "name": "Ranajit Banerjee", - "email": "ranajit.banerjee@charts.com", + "email": "ranajit.113124@gmail.com", "url": "https://github.com/ranajitbanerjee" }, { "name": "Mridul Meharia", - "email": "mridul@charts.com", + "email": "mehariamridul@gmail.com", "url": "https://github.com/mridulmeh" }, { - "name": "Subhash Haldar", - "email": "subhash@charts.com" + "name": "Subhash Haldar" }, { - "name": "Sandeep Acharya", - "email": "sandeep@charts.com" + "name": "Sandeep Acharya" }, { "name": "Rousan Ali", - "email": "rousan@charts.com", + "email": "rousanali786@gmail.com", "url": "https://rousan.io" }, { "name": "Ujjal Kumar Dutta", - "email": "ujjal@charts.com" + "email": "duttaujjalkumar@live.com" } ], "main": "src/index.js", diff --git a/packages/muze-axis/src/axis-renderer.js b/packages/muze-axis/src/axis-renderer.js index c5435684..c0f87bd5 100644 --- a/packages/muze-axis/src/axis-renderer.js +++ b/packages/muze-axis/src/axis-renderer.js @@ -39,11 +39,7 @@ const rotateAxis = (instance, tickText, labelManager) => { let xShift; let datum = smartTicks[index] ? smartTicks[index].text : d; - const tickFormatter = axis.tickFormat() ? axis.tickFormat : null; - - const temp = tickSize ? (tickFormatter ? tickFormatter()(d) : datum) : ''; - - datum = temp.toString(); + datum = datum.toString(); const tickLabelDim = labelManager.getOriSize(datum); @@ -118,7 +114,7 @@ const changeTickOrientation = (selectContainer, axisInstance, tickSize) => { const tickText = selectContainer.selectAll('.tick text'); tickText.selectAll('tspan').remove(); - // rotate labels if not enough space is available + // rotate labels if not enough space is available if (rotation && (orientation === TOP || orientation === BOTTOM)) { rotateAxis(axisInstance, tickText, labelManager); } else if (!rotation && !isSmartTicks) { @@ -164,8 +160,11 @@ const setFixedBaseline = (axisInstance) => { const { fixedBaseline } = axisInstance.config(); + const { + showInnerTicks + } = axisInstance.renderConfig(); const domain = axisInstance.domain(); - if (fixedBaseline && domain.length) { + if (fixedBaseline && domain.length && showInnerTicks) { axisInstance.setFixedBaseline(); } }; @@ -184,6 +183,7 @@ const setAxisNamePos = (textNode, orientation, measures) => { labelOffset, availableSpace } = measures; + switch (orientation) { case AxisOrientation.LEFT: textNode.attr('transform', @@ -227,14 +227,12 @@ export function renderAxis (axisInstance) { const { _axisNameStyle: axisNameStyle, _tickLabelStyle: tickLabelStyle, - _tickFormatter: axisTickFormatter, - tickValues + _tickFormatter: axisTickFormatter } = axisInstance; const { orientation, name, - xOffset, - yOffset, + axisNamePadding, className, id, @@ -242,8 +240,11 @@ export function renderAxis (axisInstance) { } = config; const { show, + xOffset, + yOffset, showAxisName, - labels + labels, + smartAxisName } = renderConfig; if (!show) { @@ -260,7 +261,9 @@ export function renderAxis (axisInstance) { const labelFunc = scale.ticks || scale.quantile || scale.domain; - axis.tickFormat(axisTickFormatter(tickValues || axis.tickValues() || labelFunc())); + const ticks = axis.tickValues() || labelFunc(); + + axis.tickFormat(axisTickFormatter(ticks)); // Get range(length of range) const availableSpace = Math.abs(range[0] - range[1]); @@ -290,15 +293,15 @@ export function renderAxis (axisInstance) { changeTickOrientation(selectContainer, axisInstance, tickSize); // Create axis name - const textNode = makeElement(selectContainer, 'text', [name], `${classPrefix}-axis-name`) + const textNode = makeElement(selectContainer, 'text', [smartAxisName], `${classPrefix}-axis-name`) .attr('text-anchor', 'middle') .classed(`${classPrefix}-axis-name-${id}`, true) - .text(d => d); + .text(d => d.text); // Hide axis name if show is off textNode.classed(HIDDEN, !showAxisName); - // render labels based on orientation of axis + // render labels based on orientation of axis const labelOffset = availableSpace / 2; // Set style for axis name diff --git a/packages/muze-axis/src/cartesian-axis/band-axis.js b/packages/muze-axis/src/cartesian-axis/band-axis.js index d29bda64..d89862e6 100644 --- a/packages/muze-axis/src/cartesian-axis/band-axis.js +++ b/packages/muze-axis/src/cartesian-axis/band-axis.js @@ -1,22 +1,8 @@ import SimpleAxis from './simple-axis'; import { BAND } from '../enums/scale-type'; -import { TOP, BOTTOM } from '../enums/axis-orientation'; import { calculateBandSpace, setOffset, getRotatedSpaces } from './helper'; -import { spaceSetter } from './space-setter'; export default class BandAxis extends SimpleAxis { - - /** - * - * - * @param {*} config axes configuration - * - * @memberof BandAxis - */ - createScale (config) { - return super.createScale(config); - } - /** * * @@ -28,36 +14,6 @@ export default class BandAxis extends SimpleAxis { return BAND; } - /** - * This method is used to set the space availiable to render - * the SimpleCell. - * - * @param {number} width The width of SimpleCell. - * @param {number} height The height of SimpleCell. - * @memberof AxisCell - */ - setAvailableSpace (width = 0, height, padding, isOffset) { - let labelConfig = {}; - const { - orientation - } = this.config(); - - this.availableSpace({ width, height, padding }); - - if (orientation === TOP || orientation === BOTTOM) { - labelConfig = spaceSetter(this, { isOffset }).band.x(); - } else { - labelConfig = spaceSetter(this, { isOffset }).band.y(); - } - - // Set config - this.renderConfig({ - labels: labelConfig - }); - this.setTickConfig(); - return this; - } - /** * * @@ -69,8 +25,8 @@ export default class BandAxis extends SimpleAxis { let smartlabel; const domain = this.domain(); const { labelManager } = this._dependencies; - const { tickValues, padding } = this.config(); - const { labels } = this.renderConfig(); + const { padding } = this.config(); + const { labels, tickValues } = this.renderConfig(); const { height: availHeight, width: availWidth, noWrap } = this.maxTickSpaces(); const { width, height } = getRotatedSpaces(labels.rotation, availWidth, availHeight); @@ -81,8 +37,9 @@ export default class BandAxis extends SimpleAxis { labelManager.setStyle(this._tickLabelStyle); // Update padding between plots - if (typeof padding === 'number' && padding >= 0 && padding <= 1) { - this.scale().padding(padding); + if (typeof padding === 'number') { + const paddingNormalized = Math.min(1, Math.max(0, padding)); + this.scale().padding(paddingNormalized); } if (domain && domain.length) { @@ -108,9 +65,9 @@ export default class BandAxis extends SimpleAxis { getLogicalSpace () { if (!this.logicalSpace()) { this.logicalSpace(calculateBandSpace(this)); - setOffset(this); - this.logicalSpace(); } + setOffset(this); + return this.logicalSpace(); } @@ -123,13 +80,17 @@ export default class BandAxis extends SimpleAxis { return this.axis().scale().domain(); } + formatTickValue (val) { + return this.valueParser()(val); + } + sanitizeTickFormatter (value) { const { tickFormat } = value; if (tickFormat) { - return ticks => (val, i) => tickFormat(val, val, i, ticks); + return ticks => (val, i) => tickFormat(this.formatTickValue(val), val, i, ticks); } - return () => val => this.valueParser()(val); + return () => val => this.formatTickValue(val); } /** diff --git a/packages/muze-axis/src/cartesian-axis/continous-axis.js b/packages/muze-axis/src/cartesian-axis/continous-axis.js index 083fc062..c5dee2d4 100644 --- a/packages/muze-axis/src/cartesian-axis/continous-axis.js +++ b/packages/muze-axis/src/cartesian-axis/continous-axis.js @@ -1,7 +1,6 @@ import { getSmallestDiff } from 'muze-utils'; import SimpleAxis from './simple-axis'; import { BOTTOM, TOP, LEFT, RIGHT } from '../enums/axis-orientation'; -import { spaceSetter } from './space-setter'; import { LINEAR, LOG, POW } from '../enums/scale-type'; import { LogInterpolator, PowInterpolator, LinearInterpolator } from './interpolators'; import { @@ -110,25 +109,8 @@ export default class ContinousAxis extends SimpleAxis { * @param {number} height The height of SimpleCell. * @memberof AxisCell */ - setAvailableSpace (width = 0, height, padding, isOffset) { - let labelConfig = {}; - const { - orientation - } = this.config(); - - this.availableSpace({ width, height, padding }); - - if (orientation === TOP || orientation === BOTTOM) { - labelConfig = spaceSetter(this, { isOffset }).continous.x(); - } else { - labelConfig = spaceSetter(this, { isOffset }).continous.y(); - } - - // Set config - this.renderConfig({ - labels: labelConfig - }); - this.setTickConfig(); + setAvailableSpace (...params) { + super.setAvailableSpace(...params); this.getTickSize(); return this; } @@ -142,9 +124,7 @@ export default class ContinousAxis extends SimpleAxis { */ setTickConfig () { const { - tickValues - } = this.config(); - const { + tickValues, showInnerTicks } = this.renderConfig(); const axis = this.axis(); @@ -156,10 +136,22 @@ export default class ContinousAxis extends SimpleAxis { if (tickValues) { tickValues instanceof Array && this.axis().tickValues(tickValues); - return this; } - axis.tickValues(this.getTickValues()); + const newTickValues = this.getTickValues(); + + axis.tickValues(newTickValues); + const smartLabel = this.dependencies().labelManager; + smartLabel.setStyle(this._tickLabelStyle); + const formatter = this._tickFormatter(newTickValues); + const smartTicks = newTickValues.map((val, i) => { + const text = formatter(val, i); + const tickSpace = smartLabel.getOriSize(text); + + tickSpace.text = text; + return tickSpace; + }); + this.smartTicks(smartTicks); return this; } @@ -172,9 +164,12 @@ export default class ContinousAxis extends SimpleAxis { getTickValues () { let labelDim = 0; const { - orientation, - tickValues + orientation + } = this.config(); + const { + tickValues + } = this.renderConfig(); const range = this.range(); const axis = this.axis(); @@ -183,7 +178,7 @@ export default class ContinousAxis extends SimpleAxis { const labelProps = this.axisComponentDimensions().largestTickDimensions; if (tickValues) { - return axis.scale().ticks(tickValues); + return tickValues; } labelDim = labelProps[orientation === BOTTOM || orientation === TOP ? 'width' : 'height']; @@ -191,7 +186,7 @@ export default class ContinousAxis extends SimpleAxis { } getMinTickDifference () { - return getSmallestDiff(this.config().tickValues); + return getSmallestDiff(this.renderConfig().tickValues); } /** @@ -214,18 +209,24 @@ export default class ContinousAxis extends SimpleAxis { rotation } = labels; const axis = this.axis(); - const ticks = axis.scale().ticks(); - const { width, height } = this.axisComponentDimensions().allTickDimensions[0]; - axis.tickTransform((d) => { - if (d === ticks[0]) { - if ((orientation === LEFT || orientation === RIGHT)) { - return `translate(0, -${(height) / 3}px)`; - } - if ((orientation === TOP || orientation === BOTTOM) && !rotation) { - return `translate(${width / 2}px, ${0}px)`; - } - } return ''; - }); + const ticks = axis.tickValues(); + const smartTicks = this.smartTicks(); + + if (smartTicks && smartTicks.length) { + const { width, height } = this.smartTicks()[0]; + + axis.tickTransform((d) => { + if (d === ticks[0]) { + if ((orientation === LEFT || orientation === RIGHT)) { + return `translate(0, -${(height) / 3}px)`; + } + + if ((orientation === TOP || orientation === BOTTOM) && !rotation) { + return `translate(${width / 2}px, ${0}px)`; + } + } return ''; + }); + } return tickText; } diff --git a/packages/muze-axis/src/cartesian-axis/default-config.js b/packages/muze-axis/src/cartesian-axis/default-config.js index 7407557f..c0bbe342 100644 --- a/packages/muze-axis/src/cartesian-axis/default-config.js +++ b/packages/muze-axis/src/cartesian-axis/default-config.js @@ -7,6 +7,7 @@ import { CLASSPREFIX } from '../enums/constants'; */ export const defaultConfig = { id: getUniqueId(), + adjustRange: false, axisName: { defClassName: 'axis-name' }, @@ -25,7 +26,7 @@ export const defaultConfig = { numberFormat: val => val, padding: 0.3, nice: true, - numberOfTicks: 10, + numberOfTicks: null, rotate: false, show: true, showAxisName: true, diff --git a/packages/muze-axis/src/cartesian-axis/helper.js b/packages/muze-axis/src/cartesian-axis/helper.js index 3eb5e826..252b0e55 100644 --- a/packages/muze-axis/src/cartesian-axis/helper.js +++ b/packages/muze-axis/src/cartesian-axis/helper.js @@ -1,5 +1,7 @@ import { defaultValue } from 'muze-utils'; import { TOP, LEFT, BOTTOM } from '../enums/axis-orientation'; +import { MIN_NO_OF_TICKS, DEFAULT_NO_OF_TICKS } from '../enums/constants'; +import { setAxisRange, getAdjustedRange } from './space-setter'; export const getRotatedSpaces = (rotation = 0, width, height) => { let rotatedHeight = height; @@ -28,22 +30,37 @@ export const setOffset = (context) => { if (orientation === TOP) { y = yOffset === undefined ? logicalSpace.height : yOffset; } - context.config({ xOffset: x, yOffset: y }); + context.renderConfig({ xOffset: x, yOffset: y }); }; export const getNumberOfTicks = (availableSpace, labelDim, axis, axisInstance) => { + let numberOfValues = 0; + let tickValues = []; + let { numberOfTicks } = axisInstance.config(); const ticks = axis.scale().ticks(); - const { numberOfTicks } = axisInstance.config(); const tickLength = ticks.length; - let numberOfValues = tickLength; + const minTickDistance = axisInstance._minTickDistance.width; - if (tickLength * (labelDim * 1.5) > availableSpace) { - numberOfValues = Math.floor(availableSpace / (labelDim * 1.5)); + numberOfValues = tickLength; + + if (tickLength * (labelDim + minTickDistance) > availableSpace) { + numberOfValues = Math.floor(availableSpace / (labelDim + minTickDistance)); } - numberOfValues = Math.min(numberOfTicks, Math.max(2, numberOfValues)); + numberOfTicks = numberOfTicks || numberOfValues; + numberOfValues = Math.min(numberOfTicks, Math.max(MIN_NO_OF_TICKS, numberOfValues)); + + tickValues = axis.scale().ticks(numberOfValues); + + if (tickValues.length > numberOfValues) { + tickValues = tickValues.filter((e, i) => i % 2 === 0); + } - return axis.scale().ticks(numberOfValues); + if (numberOfValues === MIN_NO_OF_TICKS) { + tickValues = axis.scale().ticks(DEFAULT_NO_OF_TICKS); + tickValues = [tickValues[0], tickValues[tickValues.length - 1]]; + } + return tickValues; }; export const getAxisComponentDimensions = (context) => { @@ -53,8 +70,8 @@ export const getAxisComponentDimensions = (context) => { let axisTicks; const allTickDimensions = []; const scale = context.scale(); - const { showAxisName } = context.renderConfig(); - const { tickValues, name } = context.config(); + const { tickValues, showAxisName } = context.renderConfig(); + const { name } = context.config(); const { labelManager } = context.dependencies(); const labelFunc = scale.ticks || scale.quantile || scale.domain; @@ -78,7 +95,9 @@ export const getAxisComponentDimensions = (context) => { if (tickDimensions.width > largestTickDimensions.width) { largestTick = label; smartTick = context.smartTicks() ? context.smartTicks()[i] : {}; + largestTickDimensions = tickDimensions; + smartTick = smartTick || tickDimensions; } return label; }); @@ -118,6 +137,7 @@ export const computeAxisDimensions = (context) => { if (domain.length === 0) { return null; } + if (smartTicks) { tickDimensions = smartTick; } else { @@ -150,13 +170,14 @@ export const getHorizontalAxisSpace = (context, axisDimensions, range) => { let width; let height; const domain = context.domain(); + const minTickDistance = context._minTickDistance.width; const { tickSize, tickDimensions, axisNameDimensions } = axisDimensions; const { axisNamePadding, tickValues } = context.config(); const { showAxisName } = context.renderConfig(); const { height: axisDimHeight } = axisNameDimensions; const { height: tickDimHeight, width: tickDimWidth } = tickDimensions; - width = range && range.length ? range[1] - range[0] : 0; + width = range && range.length ? range[1] - range[0] : ((tickDimWidth + minTickDistance) * 3); height = 0; if (tickValues) { @@ -173,6 +194,7 @@ export const getHorizontalAxisSpace = (context, axisDimensions, range) => { } else { height = tickDimHeight; } + height += (showAxisName ? axisDimHeight + axisNamePadding : 0) + tickSize; return { @@ -225,6 +247,7 @@ export const getVerticalAxisSpace = (context, axisDimensions) => { export const calculateBandSpace = (context) => { const range = context.range(); const axisDimensions = context.getAxisDimensions(); + const { orientation } = context.config(); const { show } = context.renderConfig(); const { largestTickDimensions, axisTicks, allTickDimensions } = axisDimensions; @@ -257,12 +280,11 @@ export const calculateBandSpace = (context) => { } = getVerticalAxisSpace(context, axisDimensions, range); if (!height || height === 0) { - height = axisTicks.length * (largestDimHeight + context._minTickDistance.height) + largestDimHeight; + height = axisTicks.length * (largestDimHeight + context._minTickDistance.height); } if (show === false) { width = 0; } - return { width, height @@ -354,3 +376,50 @@ export const hasAxesConfigChanged = (obj = {}, obj1 = {}, properties) => { } return properties.some(key => obj[key] !== obj1[key]); }; + +export const resetTickInterval = (context, domain) => { + const { + orientation, + isOffset + } = context.config(); + + const minDiff = context._minDiff; + // Set available space on interaction + if (context.range().length && (orientation === TOP || orientation === BOTTOM)) { + context.applyTickSkipping(); + const { + largestTickDimensions + } = context.getAxisDimensions(); + + const noOfTicks = context.getTickValues().length; + + const { width, height, padding } = context.availableSpace(); + const { + left, + right + } = padding; + // Get the Tick Interval + const tickInterval = Math.min(largestTickDimensions.width, + ((width - (noOfTicks - 1) * (context._minTickDistance.width)) / noOfTicks)); + + context.maxTickSpaces({ + width: tickInterval + }); + + const adjustedRange = getAdjustedRange(minDiff, [tickInterval / 2, + width - left - right - tickInterval / 2], domain, context.config()); + + // set range for axis + setAxisRange(context, 'y', adjustedRange, isOffset ? height : null); + + context.setTickConfig(); + } +}; + +export const getSmartAxisName = (name, width, labelManager) => { + const oriSize = labelManager.getOriSize(name); + + labelManager.useEllipsesOnOverflow(true); + + return labelManager.getSmartText(name, width, oriSize.height, true); +}; diff --git a/packages/muze-axis/src/cartesian-axis/interpolators/linear.js b/packages/muze-axis/src/cartesian-axis/interpolators/linear.js index a81b661b..b6333f42 100644 --- a/packages/muze-axis/src/cartesian-axis/interpolators/linear.js +++ b/packages/muze-axis/src/cartesian-axis/interpolators/linear.js @@ -1,3 +1,4 @@ +import { sanitizeDomainWhenEqual } from 'muze-utils'; import { scaleMap } from '../../scale-creator'; export default class LinearInterpolator { @@ -16,8 +17,8 @@ export default class LinearInterpolator { } sanitizeDomain (domain) { - if (domain.length && domain[0] === domain[1]) { - domain = [0, +domain[0] * 2]; + if (domain.length) { + domain = sanitizeDomainWhenEqual(domain); } return domain; } diff --git a/packages/muze-axis/src/cartesian-axis/interpolators/log.js b/packages/muze-axis/src/cartesian-axis/interpolators/log.js index d413aae2..0a73913b 100644 --- a/packages/muze-axis/src/cartesian-axis/interpolators/log.js +++ b/packages/muze-axis/src/cartesian-axis/interpolators/log.js @@ -13,16 +13,21 @@ export default class LogInterpolator { } getScaleValue (domainVal) { + const scale = this._scale; if (domainVal <= 0) { - return 1; + return scale(scale.domain()[0]); } - return this._scale(domainVal) + 0.5; + return scale(domainVal) + 0.5; } sanitizeDomain (domain) { if (domain[0] <= 0) { - return [Math.max(1, domain[0]), Math.max(1, domain[1])]; - } return domain; + domain[0] = Math.max(1, domain[0]); + } + if (domain[1] <= 0) { + domain[1] = Math.max(1, domain[1]); + } + return domain; } } diff --git a/packages/muze-axis/src/cartesian-axis/props.js b/packages/muze-axis/src/cartesian-axis/props.js index 5e5ee9cb..4931e974 100644 --- a/packages/muze-axis/src/cartesian-axis/props.js +++ b/packages/muze-axis/src/cartesian-axis/props.js @@ -24,20 +24,7 @@ export const PROPS = { context._tickFormatter = ticks => tickFormatter(ticks); - const { - labels, - show, - showInnerTicks, - showOuterTicks, - showAxisName - } = value; - context.renderConfig({ - labels, - show, - showInnerTicks, - showOuterTicks, - showAxisName - }); + context.resetRenderConfig(value); return value; } }, @@ -61,7 +48,13 @@ export const PROPS = { smartTicks: {}, tickSize: {}, - maxTickSpaces: {}, + maxTickSpaces: { + sanitization: (context, value) => { + const oldConfig = Object.assign({}, context._maxTickSpaces || {}); + value = mergeRecursive(oldConfig, value); + return value; + } + }, valueParser: { defaultValue: val => val } diff --git a/packages/muze-axis/src/cartesian-axis/simple-axis.js b/packages/muze-axis/src/cartesian-axis/simple-axis.js index 2873def9..2985732d 100644 --- a/packages/muze-axis/src/cartesian-axis/simple-axis.js +++ b/packages/muze-axis/src/cartesian-axis/simple-axis.js @@ -15,7 +15,8 @@ import { computeAxisDimensions, calculateContinousSpace, setOffset, - getValidDomain + getValidDomain, + getSmartAxisName } from './helper'; import { PROPS } from './props'; @@ -180,23 +181,37 @@ export default class SimpleAxis { return () => val => numberFormat(val); } - resetLogicalSpace () { - this.logicalSpace(null); - this.range([]); + resetRenderConfig (config) { const { labels, show, showInnerTicks, showOuterTicks, - showAxisName - } = this.config(); + showAxisName, + xOffset, + yOffset, + tickValues, + smartAxisName + } = config; this.renderConfig({ labels, show, showInnerTicks, showOuterTicks, - showAxisName + showAxisName, + xOffset, + yOffset, + tickValues, + smartAxisName }); + return this; + } + + resetLogicalSpace () { + this.logicalSpace(null); + this.range([]); + + this.resetRenderConfig(this.config()); } getFormattedText (text, index, axisTicks) { @@ -222,6 +237,13 @@ export default class SimpleAxis { return null; } + setTickValues (tickValues) { + const renderConfig = this.renderConfig(); + this.config({ ...renderConfig, tickValues }); + this.tickValues = tickValues; + this.axis().tickValues(tickValues); + } + /** * This method is used to set the space availiable to render * the SimpleCell. @@ -237,11 +259,12 @@ export default class SimpleAxis { } = this.config(); this.availableSpace({ width, height, padding }); + const type = this.constructor.type(); if (orientation === TOP || orientation === BOTTOM) { - labelConfig = spaceSetter(this, { isOffset }).continous.x(); + labelConfig = spaceSetter(this, { isOffset })[type].x(); } else { - labelConfig = spaceSetter(this, { isOffset }).continous.y(); + labelConfig = spaceSetter(this, { isOffset })[type].y(); } // Set config @@ -249,7 +272,19 @@ export default class SimpleAxis { labels: labelConfig }); this.setTickConfig(); - this.getTickSize(); + this.setSmartAxisName(); + return this; + } + + setSmartAxisName () { + const { orientation, name } = this.config(); + const dimType = (orientation === TOP || orientation === BOTTOM) ? 'width' : 'height'; + const widthDim = this.availableSpace()[dimType]; + const labelManager = this.dependencies().labelManager; + labelManager.setStyle(this._axisNameStyle); + this.renderConfig({ + smartAxisName: getSmartAxisName(name, widthDim, labelManager) + }); return this; } @@ -299,9 +334,8 @@ export default class SimpleAxis { getLogicalSpace () { if (!this.logicalSpace()) { this.logicalSpace(calculateContinousSpace(this)); - this.logicalSpace(); - setOffset(this); } + setOffset(this); return this.logicalSpace(); } diff --git a/packages/muze-axis/src/cartesian-axis/skip-ticks.js b/packages/muze-axis/src/cartesian-axis/skip-ticks.js new file mode 100644 index 00000000..daf193ec --- /dev/null +++ b/packages/muze-axis/src/cartesian-axis/skip-ticks.js @@ -0,0 +1,146 @@ +import { + timeMillisecond, + timeSecond, + timeMinute, + timeHour, + timeDay, + timeWeek, + timeMonth, + timeYear +} from 'muze-utils'; + +const durationSecond = 1000; +const durationMinute = durationSecond * 60; +const durationHour = durationMinute * 60; +const durationDay = durationHour * 24; +const durationWeek = durationDay * 7; +const durationMonth = durationDay * 30; +const durationYear = durationDay * 365; + +// Longest Word for each level based on which tick skipping is decided +const longestWord = { + month: 'September', + quarter: 'October', + halfYearly: 'July', + year: 9999, + day: 'September', + hour: '24 AM', + mintues: '60:60', + seconds: ':60', + week: 'Wed 31' +}; + +// These are the various levels of ticks that can be shown by Muze. +// Each level is described as how frequently the ticks appear +// The format is as follows: +// [Frequency, Milliseconds, Name of Seconds, Tick Generator, Level Type] +const tickIntervals = [ + [1, 1, 'milliseconds', timeMillisecond.every(1), 'seconds'], + [1, durationSecond, 'seconds', timeSecond.every(1), 'seconds'], + [5, 5 * durationSecond, 'five seconds', timeSecond.every(5), 'seconds'], + [10, 10 * durationSecond, 'ten seconds', timeSecond.every(10), 'seconds'], + [15, 15 * durationSecond, 'fifteen seconds', timeSecond.every(15), 'seconds'], + [30, 30 * durationSecond, 'thirty seconds', timeSecond.every(30), 'seconds'], + [1, durationMinute, 'minute', timeMinute.every(1), 'minutes'], + [5, 5 * durationMinute, 'five minutes', timeMinute.every(5), 'minutes'], + [10, 10 * durationMinute, 'ten minutes', timeMinute.every(10), 'minutes'], + [15, 15 * durationMinute, 'fifteen minutes', timeMinute.every(15), 'minutes'], + [30, 30 * durationMinute, 'thirty minutes', timeMinute.every(30), 'minutes'], + [1, durationHour, 'hour', timeHour.every(1), 'hour'], + [3, 3 * durationHour, 'three hours', timeHour.every(3), 'hour'], + [6, 6 * durationHour, 'six hours', timeHour.every(6), 'hour'], + [12, 12 * durationHour, 'twelve hours', timeHour.every(12), 'hour'], + [1, durationDay, 'daily', timeDay.every(1), 'day'], + [1, durationWeek, 'weekly', timeWeek.every(1), 'week'], + [1, durationMonth, 'monthly', timeMonth.every(1), 'week'], + [3, 3 * durationMonth, 'quaterly', timeMonth.every(3), 'quarter'], + [6, 6 * durationMonth, 'half yearly', timeMonth.every(6), 'halfYearly'], + [1, durationYear, 'yearly', timeYear.every(1), 'year'], + [2, 2 * durationYear, '2 year', timeYear.every(2), 'year'], + [3, 3 * durationYear, '3 year', timeYear.every(3), 'year'], + [5, 5 * durationYear, '5 year', timeYear.every(5), 'year'], + [10, 10 * durationYear, 'decade', timeYear.every(10), 'year'], + [100, 100 * durationYear, 'century', timeYear.every(100), 'year'], + [1000, 1000 * durationYear, 'millenium', timeYear.every(1000), 'year'] +]; +/** + * Get the actual tick interval based on the available width, number of ticks + * and the distance between two ticks + * + * @param {Object} context Axis Context + * @param {number} noOfTicks Number of Ticks based on which interval is calculated + * @return {number} The width for the tick interval + */ +const getActualTickInterval = (context, noOfTicks) => { + const minTickDistance = context._minTickDistance; + const minWidthBetweenTicks = minTickDistance.width; + + const { width } = context.availableSpace(); + const actualTickInterval = Math.floor(((width - (noOfTicks - 1) * (minWidthBetweenTicks)) / noOfTicks)); + + return actualTickInterval; +}; + +/** + * Get the tick interval based on the current level of ticks. Levels are decided on + * the number of ticks that are possible to show + * + * @param {Object} context Axis Context + * @param {string} type Type of level (yearly, monthly, etc) + * @return {number} The width for the tick interval + */ +const getTickIntervalBasedOnCurrentLevel = (context, type) => { + const labelManager = context._dependencies.labelManager; + const longestWordType = longestWord[type]; + const measure = labelManager.getOriSize(longestWordType); + + return measure.width; +}; + +const getTickIntervalFnBasedOnNumberOfTicks = (interval, count, context) => { + let possibleTickLevelIndex = tickIntervals.length - 1; + let maxPossibleTicks = 1; + let tickIntervalLevelInfo = null; + + // Decide possible tick level based on min tick width (with ellipses) + for (let i = tickIntervals.length - 1; i >= 0; i--) { + const tickIntervalInfo = tickIntervals[i]; + const numOfPossibleTicks = Math.floor(interval / tickIntervalInfo[1]); + if (numOfPossibleTicks <= count) { + possibleTickLevelIndex = i; + maxPossibleTicks = numOfPossibleTicks; + } + } + + tickIntervalLevelInfo = tickIntervals[possibleTickLevelIndex]; + + // Get actual tick interval based on the level of ticks generated + const actualTickInterval = getActualTickInterval(context, maxPossibleTicks); + + // Maximum Possible tick Interval for a particular level based on a pre decided set of values + const maxTickInterval = getTickIntervalBasedOnCurrentLevel(context, tickIntervalLevelInfo[4]); + + // Display the next level involving tick skipping if current level does not meet the requirement + // for displaying max tick + if (actualTickInterval < maxTickInterval && possibleTickLevelIndex < tickIntervals.length - 1) { + tickIntervalLevelInfo = tickIntervals[possibleTickLevelIndex + 1]; + } + return tickIntervalLevelInfo[3]; +}; + +export const getSkippedTicks = (context, maxPossibleTicks) => { + let actualNumberOfTicks = maxPossibleTicks; + const domain = context.domain(); + const minDiff = context._minDiff; + // Get the interval in ms from the domain + const millisecondInterval = domain[1] - domain[0]; + // Get number of ticks based on the minimum difference in the data + const numOfTicksAccordingToMinDiff = Math.floor(millisecondInterval / minDiff); + + // Show ticks according to min diff if possible + if (maxPossibleTicks >= numOfTicksAccordingToMinDiff) { + actualNumberOfTicks = numOfTicksAccordingToMinDiff; + } + + return getTickIntervalFnBasedOnNumberOfTicks(millisecondInterval, actualNumberOfTicks, context); +}; diff --git a/packages/muze-axis/src/cartesian-axis/space-setter.js b/packages/muze-axis/src/cartesian-axis/space-setter.js index b481f284..de806f49 100644 --- a/packages/muze-axis/src/cartesian-axis/space-setter.js +++ b/packages/muze-axis/src/cartesian-axis/space-setter.js @@ -1,14 +1,52 @@ -import { BOTTOM, TOP } from '../enums/axis-orientation'; +import { BOTTOM, TOP, LEFT, RIGHT } from '../enums/axis-orientation'; +import { getSkippedTicks } from './skip-ticks'; +import { TIME, LINEAR, BAND } from '../enums/scale-type'; -const setAxisRange = (context, type, rangeBounds, offset) => { +export const applyTickSkipping = (context) => { + const minTickDistance = context._minTickDistance; + const minTickSpace = context._minTickSpace; + const minWidthBetweenTicks = minTickDistance.width; + const minTickWidth = minTickSpace.width; + + const { width } = context.availableSpace(); + + const maxTicks = Math.floor((width + minWidthBetweenTicks) / (minTickWidth + minWidthBetweenTicks)); + + const ticks = context.scale().ticks(getSkippedTicks(context, maxTicks)); + + context.renderConfig({ + tickValues: ticks + }); +}; + +const adjustHorizontalRange = (range, diff) => { + range[0] += diff; + range[1] -= diff; + return range; +}; + +const adjustVerticalRange = (range, diff) => { + range[0] -= diff; + range[1] += diff; + return range; +}; + +const rangeAdjustmentMap = { + [TOP]: adjustHorizontalRange, + [BOTTOM]: adjustHorizontalRange, + [LEFT]: adjustVerticalRange, + [RIGHT]: adjustVerticalRange +}; + +export const setAxisRange = (context, type, rangeBounds, offset) => { context.range(rangeBounds); - offset && context.config({ [`${type}Offset`]: offset }); + offset && context.renderConfig({ [`${type}Offset`]: offset }); }; const getAxisOffset = (timeDiff, range, domain) => { - const pvr = Math.abs(range[1] - range[0]) / (domain[1] - domain[0]); + const avWidth = Math.abs(range[1] - range[0]); + const pvr = avWidth / (domain[1] - domain[0]); const width = (pvr * timeDiff); - const avWidth = (range[1] - range[0]); const bars = avWidth / width; const barWidth = avWidth / (bars + 1); const diff = avWidth - barWidth * bars; @@ -16,15 +54,15 @@ const getAxisOffset = (timeDiff, range, domain) => { return diff / 2; }; -export const adjustRange = (minDiff, range, domain, orientation) => { +export const getAdjustedRange = (minDiff, range, domain, config) => { + const { + orientation, + adjustRange + } = config; const diff = getAxisOffset(minDiff, range, domain); - if (orientation === TOP || orientation === BOTTOM) { - range[0] += diff; - range[1] -= diff; - } else { - range[0] -= diff; - range[1] += diff; + if (adjustRange) { + return rangeAdjustmentMap[orientation](range, diff); } return range; }; @@ -32,6 +70,7 @@ export const adjustRange = (minDiff, range, domain, orientation) => { export const spaceSetter = (context, spaceConfig) => { let tickInterval; let heightForTicks; + const config = context.config(); const { width: availWidth, height: availHeight, @@ -54,11 +93,10 @@ export const spaceSetter = (context, spaceConfig) => { rotation } = labels; const { - orientation, fixedBaseline, axisNamePadding, tickValues - } = context.config(); + } = config; const { tickDimensions, allTickDimensions, @@ -69,6 +107,7 @@ export const spaceSetter = (context, spaceConfig) => { height: tickDimHeight, width: tickDimWidth } = tickDimensions; + const namePadding = showAxisName ? axisNamePadding : 0; const labelConfig = { smartTicks: true, rotation: labels.rotation }; const minTickDistance = context._minTickDistance; @@ -76,29 +115,29 @@ export const spaceSetter = (context, spaceConfig) => { const minDiff = context._minDiff; const domain = context.domain(); const axisNameHeight = axisNameDimensions.height; + const minWidthBetweenTicks = minTickDistance.width; + const minTickWidth = minTickSpace.width; + const minTickHeight = minTickSpace.height; return { - time: { + [TIME]: { x: () => { - const tickShifter = tickDimWidth / 2; + !tickValues && context.applyTickSkipping(); + const noOfTicks = context.getTickValues().length; - setAxisRange(context, 'y', adjustRange(minDiff, - [tickShifter, availWidth - left - right - tickShifter], domain, orientation), - isOffset ? availHeight : null); + // Get the Tick Interval + tickInterval = ((availWidth - (noOfTicks - 1) * (minWidthBetweenTicks)) / noOfTicks); - tickInterval = ((availWidth) / context.getTickValues().length) - - minTickDistance.width; - - heightForTicks = availHeight - axisNameDimensions.availHeight - tickSize - namePadding; + // Get height for ticks + heightForTicks = availHeight - axisNameHeight - tickSize - namePadding; - if (tickInterval < minTickSpace.width && rotation !== 0) { + if (tickInterval < minTickWidth && rotation !== 0) { // set smart ticks and rotation config labelConfig.rotation = labels.rotation === null ? -90 : rotation; - // Remove ticks if not enough height - if (tickInterval < minTickSpace.height) { + if (tickInterval < minTickHeight) { heightForTicks = availHeight; - tickInterval = minTickSpace.height; + tickInterval = minTickHeight; context.renderConfig({ showInnerTicks: false, showOuterTicks: false }); } } @@ -106,22 +145,29 @@ export const spaceSetter = (context, spaceConfig) => { context.renderConfig({ show: false }); } + const tickShifter = Math.min(tickInterval, tickDimWidth); + // set range for axis + setAxisRange(context, 'y', getAdjustedRange(minDiff, [tickShifter / 2, + availWidth - left - right - tickShifter / 2], domain, config), + isOffset ? availHeight : null); + context.maxTickSpaces({ width: tickInterval, height: heightForTicks, noWrap: rotation !== null }); + return labelConfig; }, y: () => { let widthForTicks = availWidth; const tickShifter = tickDimHeight / 2; - setAxisRange(context, 'x', adjustRange(minDiff, - [availHeight - top - bottom - tickShifter, tickShifter], domain, orientation), + setAxisRange(context, 'x', getAdjustedRange(minDiff, + [availHeight - top - bottom - tickShifter, tickShifter], domain, config), isOffset ? availWidth : null); - if ((availWidth - axisNameHeight - namePadding) <= minTickDistance.width) { + if ((availWidth - axisNameHeight - namePadding) <= minWidthBetweenTicks) { widthForTicks = 0; context.renderConfig({ showInnerTicks: false, showOuterTicks: false }); } @@ -137,33 +183,33 @@ export const spaceSetter = (context, spaceConfig) => { return labelConfig; } }, - band: { + [BAND]: { x: () => { setAxisRange(context, 'y', [0, availWidth - left - right], isOffset ? availHeight : null); const range = context.range(); // Get Tick Interval - tickInterval = ((range[1] - range[0]) / (tickValues || domain).length) - minTickDistance.width; + tickInterval = ((range[1] - range[0]) / (tickValues || domain).length) - minWidthBetweenTicks * 2; // Get height available for ticks heightForTicks = availHeight - axisNameHeight - tickSize - namePadding; - if (tickInterval < minTickSpace.width && rotation !== 0) { + if (tickInterval < minTickWidth && rotation !== 0) { // set smart ticks and rotation config labelConfig.rotation = rotation === null ? -90 : rotation; labelConfig.smartTicks = false; // Ticks with overlapping height - if (tickInterval < minTickSpace.height) { + if (tickInterval < minTickHeight) { heightForTicks = 0; tickInterval = 0; context.renderConfig({ showInnerTicks: false, showOuterTicks: false }); - context.range([minTickSpace.height / 2, availWidth - minTickSpace.height / 2]); + context.range([minTickHeight / 2, availWidth - minTickHeight / 2]); } } else if (tickValues) { - const interval = (availWidth / domain.length) - minTickDistance.width; - if (interval < minTickSpace.width) { - context.range([minTickSpace.height / 2, availWidth - minTickSpace.height / 2]); + const interval = (availWidth / domain.length) - minWidthBetweenTicks; + if (interval < minTickWidth) { + context.range([minTickHeight / 2, availWidth - minTickHeight / 2]); } } if (availHeight < axisNameHeight) { @@ -181,7 +227,7 @@ export const spaceSetter = (context, spaceConfig) => { setAxisRange(context, 'x', [availHeight - bottom, top], isOffset ? availWidth : null); let widthForTicks = availWidth - axisNameHeight - tickSize - namePadding; - if (widthForTicks <= minTickDistance.width) { + if (widthForTicks <= minWidthBetweenTicks) { widthForTicks = 0; context.renderConfig({ showInnerTicks: false, showOuterTicks: false }); } @@ -197,10 +243,11 @@ export const spaceSetter = (context, spaceConfig) => { return labelConfig; } }, - continous: { + [LINEAR]: { x: () => { labelConfig.smartTicks = false; - const tickShifter = tickDimensions.width / 2; + const tickShifter = tickDimWidth / 2; + const baseline = fixedBaseline ? 0 : tickShifter; setAxisRange(context, 'y', [baseline + left, availWidth - right - tickShifter], @@ -209,21 +256,30 @@ export const spaceSetter = (context, spaceConfig) => { const range = context.range(); // Get Tick widths and available space - const totalTickWidth = allTickDimensions.length * (tickDimensions.width + minTickDistance.width); - const availableSpace = range[1] - range[0]; + const totalTickWidth = allTickDimensions.length * (tickDimWidth + minWidthBetweenTicks); + const availableWidth = range[1] - range[0]; // Rotate labels if not enough width - if (availableSpace < totalTickWidth && labels.rotation === null) { - labelConfig.rotation = -90; - } + if (availableWidth < totalTickWidth && labels.rotation !== null) { + if (availHeight - tickDimWidth - namePadding - tickSize > axisNameHeight) { + labelConfig.rotation = null; + context.renderConfig({ + showInnerTicks: true, + showAxisName: true + }); + } else { + labelConfig.rotation = -90; + context.renderConfig({ + showInnerTicks: true, + showAxisName: false - // Remove ticks if not enough height - if (availHeight - axisNameHeight - namePadding < tickDimensions.height) { - context.renderConfig({ showInnerTicks: false }); - if (availHeight < axisNameHeight) { - context.renderConfig({ show: false }); + }); } } + + if (availHeight < axisNameHeight) { + context.renderConfig({ show: false }); + } return labelConfig; }, y: () => { @@ -235,7 +291,7 @@ export const spaceSetter = (context, spaceConfig) => { isOffset ? availWidth : null); // Remove display of ticks if no space is left - if (availWidth < tickDimensions.width + axisNameHeight + namePadding) { + if (availWidth < tickDimWidth + axisNameHeight + namePadding) { context.renderConfig({ showInnerTicks: false }); if (availWidth < axisNameHeight) { context.renderConfig({ show: false }); diff --git a/packages/muze-axis/src/cartesian-axis/time-axis.js b/packages/muze-axis/src/cartesian-axis/time-axis.js index 0427e297..7433e77e 100644 --- a/packages/muze-axis/src/cartesian-axis/time-axis.js +++ b/packages/muze-axis/src/cartesian-axis/time-axis.js @@ -1,9 +1,9 @@ import { getSmallestDiff } from 'muze-utils'; import SimpleAxis from './simple-axis'; import { TIME } from '../enums/scale-type'; -import { axisOrientationMap, BOTTOM, TOP } from '../enums/axis-orientation'; -import { calculateBandSpace, getRotatedSpaces, getValidDomain, setContinousAxisDomain, setOffset } from './helper'; -import { spaceSetter } from './space-setter'; +import { calculateBandSpace, getRotatedSpaces, getValidDomain, setContinousAxisDomain, setOffset, + resetTickInterval } from './helper'; +import { applyTickSkipping } from './space-setter'; /** * @@ -44,21 +44,8 @@ export default class TimeAxis extends SimpleAxis { return TIME; } - /** - * - * - * @returns - * @memberof SimpleAxis - */ - createAxis (config) { - const { orientation } = config; - const axisClass = axisOrientationMap[orientation]; - - if (axisClass) { - const axis = axisClass(this.scale()); - return axis; - } - return null; + formatTickValue (val) { + return this.scale().tickFormat()(val); } sanitizeTickFormatter (value) { @@ -67,10 +54,10 @@ export default class TimeAxis extends SimpleAxis { if (tickFormat) { return (ticks) => { const rawTicks = ticks.map(t => t.getTime()); - return (val, i) => tickFormat(val, val.getTime(), i, rawTicks); + return (val, i) => tickFormat(this.formatTickValue(val), val.getTime(), i, rawTicks); }; } - return () => text => this.scale().tickFormat()(text); + return () => val => this.formatTickValue(val); } /** @@ -97,7 +84,7 @@ export default class TimeAxis extends SimpleAxis { * @memberof TimeAxis */ getTickValues () { - return this.config().tickValues || this.scale().ticks(); + return this.renderConfig().tickValues || this.scale().ticks(); } /** @@ -112,6 +99,10 @@ export default class TimeAxis extends SimpleAxis { return this; } + applyTickSkipping () { + applyTickSkipping(this); + } + /** * * @@ -125,6 +116,8 @@ export default class TimeAxis extends SimpleAxis { setContinousAxisDomain(this, domainValue); this.setAxisComponentDimensions(); this.logicalSpace(null); + + resetTickInterval(this, domainValue); return this; } return this._domain; @@ -139,9 +132,9 @@ export default class TimeAxis extends SimpleAxis { getLogicalSpace () { if (!this.logicalSpace()) { this.logicalSpace(calculateBandSpace(this)); - this.logicalSpace(); - setOffset(this); } + setOffset(this); + return this.logicalSpace(); } @@ -157,25 +150,8 @@ export default class TimeAxis extends SimpleAxis { * @param {number} height The height of SimpleCell. * @memberof AxisCell */ - setAvailableSpace (width = 0, height, padding, isOffset) { - let labelConfig = {}; - const { - orientation - } = this.config(); - - this.availableSpace({ width, height, padding }); - - if (orientation === TOP || orientation === BOTTOM) { - labelConfig = spaceSetter(this, { isOffset }).time.x(); - } else { - labelConfig = spaceSetter(this, { isOffset }).time.y(); - } - - // Set config - this.renderConfig({ - labels: labelConfig - }); - this.setTickConfig(); + setAvailableSpace (...params) { + super.setAvailableSpace(...params); this.getTickSize(); return this; } @@ -189,8 +165,8 @@ export default class TimeAxis extends SimpleAxis { setTickConfig () { let smartTicks; let smartlabel; - const { tickValues } = this.config(); - const { labels } = this.renderConfig(); + + const { labels, tickValues } = this.renderConfig(); const { height: availHeight, width: availWidth, noWrap } = this.maxTickSpaces(); const { labelManager } = this._dependencies; const domain = this.getTickValues(); @@ -214,6 +190,7 @@ export default class TimeAxis extends SimpleAxis { return labelManager.constructor.textToLines(smartlabel); }); } + this.smartTicks(smartTicks); return this; } diff --git a/packages/muze-axis/src/color-axis/color-axis.js b/packages/muze-axis/src/color-axis/color-axis.js index b19bca66..f5c467d3 100644 --- a/packages/muze-axis/src/color-axis/color-axis.js +++ b/packages/muze-axis/src/color-axis/color-axis.js @@ -8,7 +8,7 @@ import { createScale, getScheme, getSchemeType } from '../scale-creator'; import { CONTINOUS, DISCRETE, COLOR } from '../enums/constants'; import { strategyGetter } from './color-strategy'; import { DEFAULT_CONFIG } from './defaults'; -import { PROPS, getHslString } from './props'; +import { PROPS, getHslString, getActualHslColor } from './props'; /** * This class is used to instantiate a SimpleAxis. @@ -91,9 +91,7 @@ export default class ColorAxis { * @memberof ColorAxis */ setColorStrategy (domainType, rangeType, schemeType) { - const { stops } = this.config(); - - return strategyGetter(domainType, rangeType, schemeType, stops); + return strategyGetter(domainType, rangeType, schemeType); } /** @@ -198,4 +196,8 @@ export default class ColorAxis { return this._id; } + getHslArray (color) { + return getActualHslColor(color); + } + } diff --git a/packages/muze-axis/src/color-axis/color-strategy.js b/packages/muze-axis/src/color-axis/color-strategy.js index 43f7fb78..fe499bef 100644 --- a/packages/muze-axis/src/color-axis/color-strategy.js +++ b/packages/muze-axis/src/color-axis/color-strategy.js @@ -1,4 +1,4 @@ -import { numberInterpolator, piecewiseInterpolator, hslInterpolator } from 'muze-utils'; +import { numberInterpolator, piecewiseInterpolator, hslInterpolator, sanitizeDomainWhenEqual } from 'muze-utils'; import { CONTINOUS, DISCRETE } from '../enums/constants'; import { LINEAR, SEQUENTIAL, ORDINAL, QUANTILE } from '../enums/scale-type'; import { getHslString } from './props'; @@ -87,7 +87,7 @@ const steppedDomain = (domain, stops, range) => { }; const continousSteppedDomain = (domain, stops, range) => { - const { domain: uniqueVals, newStops } = getStops(domain, range.length - 1); + const { domain: uniqueVals, newStops } = getStops(sanitizeDomainWhenEqual(domain), range.length - 1); const hslRange = range.map(e => getHslString(e)); return { uniqueVals, domain: newStops, nice: true, range: hslRange }; }; @@ -177,5 +177,5 @@ const strategies = () => ({ * @param {*} schemeType * @param {*} stops */ -export const strategyGetter = (domainType, rangeType, schemeType, stops) => - strategies(stops)[`${domainType}-${rangeType}-${schemeType || ''}`]; +export const strategyGetter = (domainType, rangeType, schemeType) => + strategies()[`${domainType}-${rangeType}-${schemeType || ''}`]; diff --git a/packages/muze-axis/src/enums/constants.js b/packages/muze-axis/src/enums/constants.js index 9023dcaf..2cf924bc 100644 --- a/packages/muze-axis/src/enums/constants.js +++ b/packages/muze-axis/src/enums/constants.js @@ -5,6 +5,7 @@ export const DISCRETE = 'discrete'; export const SEQUENTIAL = 'sequential'; export const ORDINAL = 'ordinal'; export const LINEAR = 'linear'; +export const BAND = 'band'; export const THRESHOLD = 'threshold'; export const QUANTIZE = 'quantize'; export const QUANTILE = 'quantile'; @@ -14,7 +15,6 @@ export const SHAPE = 'shape'; export const SIZE = 'size'; export const DOMAIN = 'domain'; -export const BAND = 'band'; export const HIDDEN = 'hidden'; export const NUMBER = 'number'; export const BOTTOM = 'bottom'; @@ -25,3 +25,7 @@ export const HEX = 'hex'; export const HSLA = 'hsla'; export const HSL = 'hsl'; +export const DEFAULT_ANGLE_DOMAIN = [1]; +export const MIN_NO_OF_TICKS = 2; +export const DEFAULT_NO_OF_TICKS = 10; + diff --git a/packages/muze-axis/src/helper.js b/packages/muze-axis/src/helper.js index 781f5704..9ce80a33 100644 --- a/packages/muze-axis/src/helper.js +++ b/packages/muze-axis/src/helper.js @@ -1,4 +1,4 @@ -import { InvalidAwareTypes } from 'muze-utils'; +import { InvalidAwareTypes, getObjProp } from 'muze-utils'; export const treatNullMeasures = (domainVal, scaledVal, minDomainScaledVal) => { if (domainVal instanceof InvalidAwareTypes) { @@ -6,3 +6,15 @@ export const treatNullMeasures = (domainVal, scaledVal, minDomainScaledVal) => { } return scaledVal; }; + +export const resolveAxisConfig = (propVal, defaultVal, context) => { + const constructor = getObjProp(propVal, 'constructor'); + switch (constructor) { + case Function: + return propVal(defaultVal, context); + case Array: + return propVal; + default: + return defaultVal; + } +}; diff --git a/packages/muze-axis/src/index.js b/packages/muze-axis/src/index.js index f496be61..b8dcc80b 100644 --- a/packages/muze-axis/src/index.js +++ b/packages/muze-axis/src/index.js @@ -10,5 +10,6 @@ export { SimpleAxis, ContinousAxis, BandAxis, TimeAxis } from './cartesian-axis' export { ColorAxis } from './color-axis'; export { SizeAxis } from './size-axis'; export { ShapeAxis } from './shape-axis'; +export { RadiusAxis, AngleAxis } from './polar-axis'; export { dataTypeScaleMap } from './data-type-scale-map'; export { AxisOrientation, ScaleType }; diff --git a/packages/muze-axis/src/polar-axis/angle-axis.js b/packages/muze-axis/src/polar-axis/angle-axis.js new file mode 100644 index 00000000..65b680fa --- /dev/null +++ b/packages/muze-axis/src/polar-axis/angle-axis.js @@ -0,0 +1,100 @@ +/** + * @module Axis + * This file declares a class that is used to render an axis to add meaning to + * plots. + */ +import { getUniqueId, Symbols, mergeRecursive, generateGetterSetters } from 'muze-utils'; +import { createScale } from '../scale-creator'; +import { DEFAULT_ANGLE_DOMAIN } from '../enums/constants'; +import { PROPS } from './props'; +import { resolveAxisConfig } from '../helper'; + +const { pie } = Symbols; + +const createAngleValues = (context) => { + const angleData = context._angleFn(context._domain); + angleData.forEach((v) => { + v.startAngle -= Math.PI / 2; + v.endAngle -= Math.PI / 2; + }); + context._angleValues = angleData.reduce((values, d) => { + const key = d.data; + !values[key] && (values[key] = []); + values[key].push(d); + return values; + }, {}); +}; + +/** +* This class is used to instantiate a AngleAxis. +* @class AngleAxis +*/ +export default class AngleAxis { + + /** + * Creates an instance of AngleAxis. + * @param {Object} config input parameters. + * @memberof AngleAxis + */ + constructor (config = {}) { + this._id = getUniqueId(); + generateGetterSetters(this, PROPS); + this._config = mergeRecursive({}, this.constructor.defaultConfig()); + this.config(config); + this._range = [0, 360]; + this._angleFn = pie() + .value(d => (typeof d === 'string' ? 1 : d)) + .sortValues(null); + this._angleValues = {}; + } + + static defaultConfig () { + return {}; + } + + createScale (strategy) { + const { + range + } = this.config(); + return createScale({ + type: strategy.scale, + range + }); + } + + getScaleValue (domainVal) { + return this._angleValues[domainVal]; + } + + padAngle (angle) { + this._angleFn = this._angleFn.padAngle(angle); + } + + domain (...domainVal) { + if (domainVal.length) { + const { domain: customDomain } = this.config(); + const domain = domainVal[0].length ? domainVal[0] : DEFAULT_ANGLE_DOMAIN; + this._domain = resolveAxisConfig(customDomain, domain, this); + createAngleValues(this); + return this; + } + return this._domain; + } + + range (...range) { + if (range.length) { + const { range: customRange } = this.config(); + this._range = resolveAxisConfig(customRange, range[0], this); + const domain = this.domain(); + const [startAngle, endAngle] = this._range; + this._angleFn + .startAngle((startAngle / 180) * Math.PI) + .endAngle(Math.PI * endAngle / 180); + if (domain && domain.length) { + createAngleValues(this); + } + return this; + } + return this._range; + } +} diff --git a/packages/muze-axis/src/polar-axis/index.js b/packages/muze-axis/src/polar-axis/index.js new file mode 100644 index 00000000..97212bc8 --- /dev/null +++ b/packages/muze-axis/src/polar-axis/index.js @@ -0,0 +1,2 @@ +export { default as AngleAxis } from './angle-axis'; +export { default as RadiusAxis } from './radius-axis'; diff --git a/packages/muze-axis/src/polar-axis/props.js b/packages/muze-axis/src/polar-axis/props.js new file mode 100644 index 00000000..25bc8f01 --- /dev/null +++ b/packages/muze-axis/src/polar-axis/props.js @@ -0,0 +1,14 @@ +import { mergeRecursive } from 'muze-utils'; + +export const PROPS = { + config: { + sanitization: (context, config) => mergeRecursive(context.config(), config), + preset: (context, config) => { + const { range, domain } = config; + range && context.range(range); + domain && context.domain(domain); + } + }, + domain: {}, + range: {} +}; diff --git a/packages/muze-axis/src/polar-axis/radius-axis.js b/packages/muze-axis/src/polar-axis/radius-axis.js new file mode 100644 index 00000000..2ee44f7e --- /dev/null +++ b/packages/muze-axis/src/polar-axis/radius-axis.js @@ -0,0 +1,112 @@ +/** + * @module Axis + * This file declares a class that is used to render an axis to add meaning to + * plots. + */ +import { getUniqueId, mergeRecursive, generateGetterSetters, sanitizeDomainWhenEqual } from 'muze-utils'; +import { createScale } from '../scale-creator'; +import { LINEAR } from '../../../visual-group/src/enums/constants'; +import { PROPS } from './props'; +import { resolveAxisConfig } from '../helper'; + +const adjustDomain = (context) => { + const minOuterRadius = context.config().minOuterRadius; + const domain = context._domain; + if (context._range.length) { + const scale = context._scale; + const value = scale.invert(minOuterRadius) - scale.invert(0); + context._domain = [domain[0] - value, domain[1]]; + scale.domain(context._domain); + } +}; + +/** +* This class is used to instantiate a RadiusAxis. +* @class RadiusAxis +*/ +export default class RadiusAxis { + + /** + * Creates an instance of RadiusAxis. + * @param {Object} config input parameters. + * @memberof RadiusAxis + */ + constructor (config = {}) { + this._id = getUniqueId(); + generateGetterSetters(this, PROPS); + this._range = []; + this._radiusFactor = 1; + this._config = mergeRecursive({}, this.constructor.defaultConfig()); + this.config(config); + this._scale = this.createScale({ + scale: LINEAR + }); + } + + static defaultConfig () { + return { + padding: [0, 1], + minOuterRadius: 10 + }; + } + + config (...params) { + if (params.length) { + const config = mergeRecursive(this.config(), params[0]); + this._config = config; + return this; + } + return this._config; + } + + createScale (strategy) { + return createScale({ + type: strategy.scale, + range: this.range() + }); + } + + domain (...domainVal) { + if (domainVal.length) { + const { domain: customDomain } = this.config(); + let domain = resolveAxisConfig(customDomain, domainVal[0], this); + domain = sanitizeDomainWhenEqual(domain); + this._scale.domain(domain); + this._domain = domain; + adjustDomain(this); + } + return this._domain; + } + + getInnerRadius (domainVal) { + if (domainVal === undefined) { + return this.range()[0]; + } + return this._scale(domainVal); + } + + getOuterRadius (domainVal) { + if (domainVal === undefined) { + return this.range()[1]; + } + const radius = this._scale(domainVal) * this._radiusFactor; + return radius; + } + + range (...range) { + if (range.length) { + const { padding, range: customRange } = this.config(); + const sanitizedRange = range[0].map((v, i) => v + (i ? -padding[i] : padding[i])); + const rangeVal = resolveAxisConfig(customRange, sanitizedRange, this); + this._range = rangeVal; + this._scale.range(rangeVal); + adjustDomain(this); + } + return this._range; + } + + setRadiusFactor (val) { + this._radiusFactor = val; + return this; + } +} diff --git a/packages/muze-firebolt/README.md b/packages/muze-firebolt/README.md index bd28c987..83831dc3 100644 --- a/packages/muze-firebolt/README.md +++ b/packages/muze-firebolt/README.md @@ -10,7 +10,7 @@ $ npm install --save @chartshq/muze-firebolt ## Docs -Please refer to [this](https://www.charts.com/muze/docs) for detailed documentation. +Please refer to [this](https://muzejs.org/docs) for detailed documentation. ## Contributing diff --git a/packages/muze-firebolt/package.json b/packages/muze-firebolt/package.json index efdae2ff..b4245509 100644 --- a/packages/muze-firebolt/package.json +++ b/packages/muze-firebolt/package.json @@ -2,40 +2,37 @@ "name": "@chartshq/muze-firebolt", "version": "1.0.0", "description": "Manages physical and behavioural action model", - "homepage": "https://www.charts.com/muze", + "homepage": "https://muzejs.org", "license": "MIT", - "author": "Charts.com ", "contributors": [ { "name": "Akash Ghoswami", - "email": "akash@charts.com" + "email": "akashgoswami90s@gmail.com" }, { "name": "Ranajit Banerjee", - "email": "ranajit.banerjee@charts.com", + "email": "rranajit.113124@gmail.com", "url": "https://github.com/ranajitbanerjee" }, { "name": "Mridul Meharia", - "email": "mridul@charts.com", + "email": "mehariamridul@gmail.com", "url": "https://github.com/mridulmeh" }, { - "name": "Subhash Haldar", - "email": "subhash@charts.com" + "name": "Subhash Haldar" }, { - "name": "Sandeep Acharya", - "email": "sandeep@charts.com" + "name": "Sandeep Acharya" }, { "name": "Rousan Ali", - "email": "rousan@charts.com", + "email": "rousanali786@gmail.com", "url": "https://rousan.io" }, { "name": "Ujjal Kumar Dutta", - "email": "ujjal@charts.com" + "email": "duttaujjalkumar@live.com" } ], "main": "src/index.js", diff --git a/packages/muze-firebolt/src/behaviour-effect-map.js b/packages/muze-firebolt/src/behaviour-effect-map.js index 0dc35c94..f5a3bc91 100644 --- a/packages/muze-firebolt/src/behaviour-effect-map.js +++ b/packages/muze-firebolt/src/behaviour-effect-map.js @@ -10,7 +10,7 @@ export const behaviourEffectMap = { [`${BEHAVIOURS.BRUSH},${BEHAVIOURS.SELECT}`]: [{ name: 'tooltip', options: { - strategy: 'showSelectedItems', + strategy: 'selectionSummary', order: 0, filter: context => context.config().mode === 'fragmented' } diff --git a/packages/muze-firebolt/src/helper/index.js b/packages/muze-firebolt/src/helper/index.js index 42db533b..a2912e8e 100644 --- a/packages/muze-firebolt/src/helper/index.js +++ b/packages/muze-firebolt/src/helper/index.js @@ -1,4 +1,4 @@ -import { clone } from 'muze-utils'; +import { clone, retrieveNearestGroupByReducers } from 'muze-utils'; import * as SELECTION from '../enums/selection'; export const initializeSideEffects = (context, sideEffects) => { @@ -134,15 +134,18 @@ export const unionSets = (context, behaviours) => { ['mergedEnter', 'mergedExit'].forEach((type) => { const model = entryExitSet[type].model; let existingModel = models[type]; + let aggFns = retrieveNearestGroupByReducers(model); if (!existingModel) { existingModel = models[type] = model; } else if (`${model.getSchema().map(d => d.name).sort()}` === `${existingModel.getSchema().map(d => d.name).sort()}`) { + aggFns = Object.assign({}, retrieveNearestGroupByReducers(existingModel)); existingModel = models[type] = model.union(existingModel); } else { existingModel = model; } combinedSet[type].model = existingModel; + combinedSet[type].aggFns = aggFns; }); } }); diff --git a/packages/muze-firebolt/src/side-effects/crossline/index.js b/packages/muze-firebolt/src/side-effects/crossline/index.js index f7c2d4db..70caea11 100644 --- a/packages/muze-firebolt/src/side-effects/crossline/index.js +++ b/packages/muze-firebolt/src/side-effects/crossline/index.js @@ -61,8 +61,9 @@ export default class Crossline extends SpawnableSideEffect { const value = dataArr[0]; bandWidth = axis.getUnitWidth() || 0; px = axis.getScaleValue(value) + bandWidth / 2 + drawingInf.xOffset; - const plotWidth = Math.max(...this.firebolt.context.layers().map(layer => layer.getPlotSpan()[type])); - const pad = Math.max(...this.firebolt.context.layers().map(layer => layer.getPlotPadding()[type])); + const layers = this.firebolt.context.layers(); + const plotWidth = Math.max(...layers.map(layer => layer.getPlotSpan()[type])); + const pad = Math.max(...layers.map(layer => layer.getPlotPadding()[type])); height = drawingInf.height; width = drawingInf.width; const startPx = px - plotWidth / 2 - pad / 2; @@ -74,7 +75,7 @@ export default class Crossline extends SpawnableSideEffect { dataPoint.d = `M ${startPx} 0 L ${endPx} 0 L ${endPx} ${height} L ${startPx} ${height} Z`; } dataPoint.className = plotWidth ? bandClass : lineClass; - elemData.push(dataPoint); + !isNaN(px) && elemData.push(dataPoint); } }); if (elemData.length) { diff --git a/packages/muze-firebolt/src/side-effects/generic/generic-sideeffect.js b/packages/muze-firebolt/src/side-effects/generic/generic-sideeffect.js index dd814cf2..6fbb3d51 100644 --- a/packages/muze-firebolt/src/side-effects/generic/generic-sideeffect.js +++ b/packages/muze-firebolt/src/side-effects/generic/generic-sideeffect.js @@ -124,8 +124,10 @@ export default class GenericSideEffect { * * @return {GenericSideEffect} Instance of side effect. */ - addStrategy (name, fn) { - this._strategies[name] = fn; + setStrategy (name, fn) { + if (fn) { + this._strategies[name] = fn; + } return this; } } diff --git a/packages/muze-firebolt/src/side-effects/tooltip/index.js b/packages/muze-firebolt/src/side-effects/tooltip/index.js index 1f8f2efa..ba28202a 100644 --- a/packages/muze-firebolt/src/side-effects/tooltip/index.js +++ b/packages/muze-firebolt/src/side-effects/tooltip/index.js @@ -1,5 +1,5 @@ import { Tooltip as TooltipRenderer } from '@chartshq/muze-tooltip'; -import { FieldType } from 'muze-utils'; +import { FieldType, mergeRecursive, defaultValue } from 'muze-utils'; import { spaceOutBoxes } from '../helper'; import { strategies } from './strategies'; import { FRAGMENTED } from '../../enums/constants'; @@ -7,12 +7,26 @@ import SpawnableSideEffect from '../spawnable'; import './styles.scss'; +const configResolvers = { + highlightSummary: (specificConf, config) => defaultValue(specificConf, config), + default: specificConf => defaultValue(specificConf, {}) +}; + +const sanitizeConfig = (config, context) => { + const strategyObj = context._strategies; + const sanitizedConf = Object.assign({}, config); + for (const key in strategyObj) { + sanitizedConf[key] = defaultValue(configResolvers[key], configResolvers.default)(config[key], config); + } + return sanitizedConf; +}; + export default class Tooltip extends SpawnableSideEffect { constructor (...params) { super(...params); this._tooltips = {}; this._strategies = strategies; - this._strategy = 'default'; + this._strategy = 'highlightSummary'; } static defaultConfig () { @@ -21,6 +35,21 @@ export default class Tooltip extends SpawnableSideEffect { offset: { x: 0, y: 0 + }, + highlightSummary: { + dataTransform: (dt, fields) => (fields ? dt.project(fields, { saveChild: false }) : dt + ) + }, + selectionSummary: { + dataTransform: (dt, fields) => { + const fieldspace = dt.getFieldspace(); + const dimensions = Object.keys(fieldspace.getDimension()); + const measures = Object.keys(fieldspace.getMeasure()); + const projectedFields = defaultValue(fields, measures.length ? [measures[0]] : []); + return dt.project([...dimensions, ...projectedFields], { + saveChild: false + }); + } } }; } @@ -29,6 +58,19 @@ export default class Tooltip extends SpawnableSideEffect { return 'tooltip'; } + config (...params) { + if (params.length) { + const config = this._config = mergeRecursive(this._config, sanitizeConfig(params[0], this)); + const strategyObj = this._strategies; + for (const key in strategyObj) { + const formatter = config[key].formatter; + this.setStrategy(key, formatter); + } + return this; + } + return this._config; + } + apply (selectionSet, payload, options = {}) { let totalHeight = 0; let totalWidth = 0; @@ -84,6 +126,9 @@ export default class Tooltip extends SpawnableSideEffect { getBBox: true }); + const strategy = defaultValue(options.strategy, this._strategy); + const strategyConf = config[strategy]; + const { dataTransform, fields: projectFields } = strategyConf; // Show tooltip for each datamodel for (let i = 0; i < dataModels.length; i++) { let plotDim = plotDimensions[i]; @@ -94,15 +139,7 @@ export default class Tooltip extends SpawnableSideEffect { plotDim = plotDim && plotDim[0]; } - let dt = dataModels[i]; - if (config.fields) { - dt = dt.project(config.fields, { - saveChild: false - }); - } - if (config.dataTransform) { - dt = config.dataTransform(dt, i); - } + const dt = dataTransform(dataModels[i], projectFields, this); enter[i] = true; const { parentContainer: layoutContainer, parentContainerDimensions } = drawingInf; @@ -119,10 +156,11 @@ export default class Tooltip extends SpawnableSideEffect { sourceInf.detailFields = context.detailFields(); sourceInf.timeDiffs = context.timeDiffsByField(); sourceInf.valueParser = context.valueParser(); + sourceInf.selectionSet = selectionSet; tooltipInst.context(sourceInf); - const strategy = strategies[options.strategy]; - tooltipInst.content(options.strategy || this._strategy, dt, { - formatter: strategy, + const strategyFn = strategies[strategy]; + tooltipInst.content(strategy, dt, { + formatter: strategyFn, order: options.order }) .config(this.config()) diff --git a/packages/muze-firebolt/src/side-effects/tooltip/strategies.js b/packages/muze-firebolt/src/side-effects/tooltip/strategies.js index fd0553f9..555daf36 100644 --- a/packages/muze-firebolt/src/side-effects/tooltip/strategies.js +++ b/packages/muze-firebolt/src/side-effects/tooltip/strategies.js @@ -1,31 +1,245 @@ -import { FieldType } from 'muze-utils'; +import { + FieldType, + GROUP_BY_FUNCTIONS, + formatTemporal, + DimensionSubtype, + MeasureSubtype, + DataModel, + defaultValue, + retrieveFieldDisplayName +} from 'muze-utils'; + +const { SUM, COUNT } = GROUP_BY_FUNCTIONS; +const { InvalidAwareTypes } = DataModel; + +const formatters = (formatter, interval, valueParser) => ({ + [DimensionSubtype.TEMPORAL]: (value) => { + if (value instanceof InvalidAwareTypes) { + return valueParser(value); + } + return formatTemporal(value, interval); + }, + [MeasureSubtype.CONTINUOUS]: value => (value instanceof InvalidAwareTypes ? valueParser(value) : + formatter(value.toFixed(2))), + [DimensionSubtype.CATEGORICAL]: value => valueParser(value) +}); + +const getDefaultTooltipFormatterFn = (formatter, defaultFormatter) => defaultValue(formatter, defaultFormatter); + +const getTabularData = (dataObj, context, defaultFormatter) => { + const rows = []; + const { data, schema, fieldspace } = dataObj; + rows.push(schema.map(d => d.name)); + const { valueParser, timeDiffs } = context; + data.forEach((d) => { + const row = []; + schema.forEach((fieldObj, i) => { + const interval = fieldObj.subtype === DimensionSubtype.TEMPORAL ? timeDiffs[fieldObj.name] : 0; + const numberFormat = fieldObj.type === FieldType.MEASURE && fieldspace.fields[i].numberFormat(); + const formatterFn = getDefaultTooltipFormatterFn(formatters(numberFormat, + interval, valueParser)[fieldObj.subtype], defaultFormatter); + const value = formatterFn(d[i]); + row.push(value); + }); + rows.push(row); + }); + return rows; +}; + +const getRowContent = (fieldInf, context, dataInf, config) => { + let value; + let formattedValue; + let measureIndex; + + const { + valueParser, + axes, + dimensionMeasureMap, + timeDiffs + } = context; + const { subtype: type, name: field } = fieldInf; + + const { fieldsConfig, defFormatter, data, fieldspace } = dataInf; + const { separator, classPrefix } = config; + const dataLen = data.length; + const values = []; + const index = fieldsConfig[field].index; + const interval = fieldsConfig[field].def.subtype === DimensionSubtype.TEMPORAL ? timeDiffs[field] : 0; + const formatterFn = getDefaultTooltipFormatterFn(formatters(val => val, interval, valueParser)[type], + defFormatter); + + let uniqueVals = type === MeasureSubtype.CONTINUOUS ? data.map(d => d[index]) : + [...new Set(data.map(d => d[index]))]; + uniqueVals = uniqueVals.filter(d => d !== ''); + const colorAxis = axes.color[0]; + const shapeAxis = axes.shape[0]; + const sizeAxis = axes.size[0]; + const isRetinalField = (colorAxis || shapeAxis || sizeAxis) && dataLen > 1 && + type !== MeasureSubtype.CONTINUOUS; + + uniqueVals.forEach((val, i) => { + let key; + let associatedMeasures = dimensionMeasureMap[field]; + + if (associatedMeasures instanceof Array && dataLen > 1) { + associatedMeasures = associatedMeasures.filter(d => d in fieldsConfig); + key = val; + let icon = { + value: '' + }; + + if (isRetinalField) { + icon = { + type: 'icon', + color: colorAxis.getColor(val), + shape: shapeAxis.getShape(val), + size: sizeAxis.getSize(val) * config.iconScale + }; + } + if (associatedMeasures.length > 1) { + const formattedKey = type === DimensionSubtype.TEMPORAL ? formatterFn(key, interval) : key; + values.push([icon, `${formattedKey}`]); + associatedMeasures.forEach((measure) => { + measureIndex = fieldsConfig[measure].index; + value = data[i][measureIndex]; + const numberFormat = fieldspace.fields[measureIndex].numberFormat(); + const measureFormatter = getDefaultTooltipFormatterFn( + formatters(numberFormat, interval, valueParser)[MeasureSubtype.CONTINUOUS]); + formattedValue = measureFormatter(value); + values.push([{ + value: `${retrieveFieldDisplayName(context.data, measure)}${separator}`, + style: { + 'margin-left': `${config.margin}px}` + }, + className: `${classPrefix}-tooltip-key` + }, { + value: `${formattedValue}`, + className: `${classPrefix}-tooltip-value` + }]); + }); + } else { + measureIndex = fieldsConfig[associatedMeasures[0]].index; + value = data[i][measureIndex]; + const numberFormat = fieldspace.fields[measureIndex].numberFormat(); + const measureFormatter = getDefaultTooltipFormatterFn( + formatters(numberFormat, interval, valueParser)[MeasureSubtype.CONTINUOUS]); + formattedValue = measureFormatter(value); + const formattedKey = type === DimensionSubtype.TEMPORAL ? formatterFn(key, interval) : key; + values.push([ + icon, + { + value: `${formattedKey}`, + className: `${classPrefix}-tooltip-key` + }, + { + value: `${formattedValue}`, + className: `${classPrefix}-tooltip-value` + } + ]); + } + } else { + key = field; + value = val; + formattedValue = formatterFn(value); + values.push([{ + value: `${retrieveFieldDisplayName(context.data, key)}${separator}`, + className: `${config.classPrefix}-tooltip-key` + }, { + value: `${formattedValue}`, + className: `${config.classPrefix}-tooltip-value` + }]); + } + }); + return values; +}; + +export const buildTooltipData = (dataModel, config = {}, context) => { + let fieldValues = []; + const dataObj = dataModel.getData(); + const data = dataObj.data; + const schema = dataObj.schema; + const fieldspace = dataModel.getFieldspace(); + const fieldsConfig = dataModel.getFieldsConfig(); + const detailFields = context.detailFields || []; + const dimensions = schema.filter(d => d.type === FieldType.DIMENSION); + const measures = schema.filter(d => d.type === FieldType.MEASURE); + const containsDetailField = schema.find(d => detailFields.indexOf(d.name) !== -1); + const dataLen = data.length; + const { + valueParser, + dimensionMeasureMap + } = context; + const defFormatter = formatters(null, null, valueParser)[DimensionSubtype.CATEGORICAL]; + + if (dataLen > 1 && containsDetailField) { + fieldValues = getTabularData({ + data, + schema, + fieldspace + }, context, defFormatter); + } else { + dimensions.forEach((item) => { + fieldValues = [...fieldValues, ...getRowContent(item, context, { + fieldsConfig, + data, + defFormatter, + fieldspace + }, config)]; + }); + + const allMeasures = [...new Set(...Object.values(dimensionMeasureMap))]; + const filteredMeasures = dataLen > 1 ? measures.filter(d => allMeasures.indexOf(d.name) === -1) + : measures; + + filteredMeasures.forEach((item) => { + fieldValues = [...fieldValues, ...getRowContent(item, context, { + fieldsConfig, + data, + defFormatter, + fieldspace + }, config)]; + }); + } + + return fieldValues; +}; export const strategies = { - showSelectedItems: (dm) => { + selectionSummary: (dm, config, context) => { + const { selectionSet } = context; + const aggFns = selectionSet.mergedEnter.aggFns; const dataObj = dm.getData(); const measures = dataObj.schema.filter(d => d.type === FieldType.MEASURE); const aggregatedModel = dm.groupBy([''], measures.reduce((acc, v) => { - acc[v.name] = v.defAggFn === 'count' ? 'sum' : v.defAggFn; + acc[v.name] = aggFns[v.name] === COUNT ? SUM : aggFns[v.name]; return acc; - }, {})); - const fieldsObj = dm.getFieldspace().fieldsObj(); + }, { + saveChild: false + })); const fieldsConf = aggregatedModel.getFieldsConfig(); - let values = [{ + let values = [[{ value: `${dataObj.data.length}`, style: { 'font-weight': 'bold' } - }, 'Items Selected']; + }, 'Items Selected']]; const measureNames = measures.map(d => d.name); - if (measureNames.length) { - values = [...values, ...[`(${fieldsObj[measureNames[0]].defAggFn().toUpperCase()}) ${measureNames[0]}`, + measureNames.forEach((measure) => { + values.push([`(${aggFns[measure].toUpperCase()})`, `${retrieveFieldDisplayName(dm, measure)}`, { - value: `${aggregatedModel.getData().data[0][fieldsConf[measureNames[0]].index].toFixed(2)}`, + value: `${aggregatedModel.getData().data[0][fieldsConf[measure].index].toFixed(2)}`, style: { 'font-weight': 'bold' } - }]]; + }]); + }); + if (measureNames.length === 1) { + values = [[...values[0], ...values[1]]]; } - return [values]; + return values; + }, + highlightSummary: (data, config, context) => { + const values = buildTooltipData(data, config, context); + return values; } }; diff --git a/packages/muze-tooltip/src/strategy.spec.js b/packages/muze-firebolt/src/side-effects/tooltip/strategy.spec.js similarity index 88% rename from packages/muze-tooltip/src/strategy.spec.js rename to packages/muze-firebolt/src/side-effects/tooltip/strategy.spec.js index 548c1480..12ca2898 100644 --- a/packages/muze-tooltip/src/strategy.spec.js +++ b/packages/muze-firebolt/src/side-effects/tooltip/strategy.spec.js @@ -2,7 +2,7 @@ import { expect } from 'chai'; import { DataModel } from 'muze-utils'; -import { strategy } from './strategy'; +import { strategies } from './strategies'; describe('#tooltipstrategy', () => { it('Should not throw error when sub type is incorrect', () => { @@ -20,7 +20,7 @@ describe('#tooltipstrategy', () => { name: 'measure', type: 'measure' }]); - + const strategy = strategies.highlightSummary; expect(() => strategy.keyValue(dm, {}, { dimensionMeasureMap: {}, axes: { diff --git a/packages/muze-legend/README.md b/packages/muze-legend/README.md index 62388979..0d12e123 100644 --- a/packages/muze-legend/README.md +++ b/packages/muze-legend/README.md @@ -10,7 +10,7 @@ $ npm install --save @chartshq/muze-legend ## Docs -Please refer to [this](https://www.charts.com/muze/docs) for detailed documentation. +Please refer to [this](https://muzejs.org/docs) for detailed documentation. ## Contributing diff --git a/packages/muze-legend/package.json b/packages/muze-legend/package.json index 69785764..af02d038 100644 --- a/packages/muze-legend/package.json +++ b/packages/muze-legend/package.json @@ -2,21 +2,20 @@ "name": "@chartshq/muze-legend", "version": "1.0.0", "description": "The legend module for MuzeJS", - "homepage": "https://www.charts.com/muze", + "homepage": "https://muzejs.org", "license": "MIT", - "author": "Charts.com ", "contributors": [ { "name": "Akash Ghoswami", - "email": "akash@charts.com" + "email": "akashgoswami90s@gmail.com" }, { "name": "Ujjal Kumar Dutta", - "email": "ujjal@charts.com" + "email": "duttaujjalkumar@live.com" }, { "name": "Rousan Ali", - "email": "rousan@charts.com", + "email": "rousanali786@gmail.com", "url": "https://rousan.io" } ], diff --git a/packages/muze-legend/src/legend/discrete-legend.js b/packages/muze-legend/src/legend/discrete-legend.js index d7375ecc..9ad0d33e 100644 --- a/packages/muze-legend/src/legend/discrete-legend.js +++ b/packages/muze-legend/src/legend/discrete-legend.js @@ -47,7 +47,8 @@ export default class DiscreteLegend extends SimpleLegend { * * @memberof DiscreteLegend */ - dataFromScale (scale) { + dataFromScale () { + const scale = this.scale(); const { scaleType, domain, scaleFn } = getScaleInfo(scale); let domainForLegend = [...new Set(domain)]; const field = this.metaData().getFieldspace().fields[0]; diff --git a/packages/muze-legend/src/legend/gradient-helper.js b/packages/muze-legend/src/legend/gradient-helper.js index 8ac37c50..629db997 100644 --- a/packages/muze-legend/src/legend/gradient-helper.js +++ b/packages/muze-legend/src/legend/gradient-helper.js @@ -33,8 +33,9 @@ export const makeLinearGradient = (container, data, domain) => { .attr('id', 'linear-gradient') .attr('x1', '0%') .attr('y2', '0%'); + makeElement(linearGradient, 'stop', data, 'stop-gradient') - .attr('offset', d => `${(d.value - domain[0]) * 100 / (domain[1] - domain[0])}%`) + .attr('offset', d => `${(d.value - domain[0]) * 100 / (domain[1] - domain[0]) || 1}%`) .attr('stop-color', d => d.color); return linearGradient; }; @@ -59,7 +60,7 @@ export const createAxis = (context) => { tickValues: data.map(d => d.value), fixedBaseline: false, labels: { - rotation: 0 + rotation: null } }, { labelManager: context._labelManager }); @@ -149,8 +150,8 @@ export const renderGradient = (context, container) => { } = context.measurement(); const gradientDimensions = {}; - gradHeight = Math.floor(height - (titleSpaces.height + 2 * margin + 2 * border)); - gradWidth = Math.floor(width - (margin * 2 + border * 2)); + gradHeight = Math.floor(Math.min(height, maxHeight) - (titleSpaces.height + 2 * margin + 2 * border)); + gradWidth = Math.floor(Math.min(width, maxWidth) - (margin * 2 + border * 2)); if (align === ALIGN.HORIZONTAL) { gradientDimensions.height = item.icon.height; @@ -158,7 +159,6 @@ export const renderGradient = (context, container) => { linearGradient.attr('x2', '100%').attr('y1', '0%'); legendGradCont.attr('transform', `translate( ${labelDim.width / 2} 0)`); renderAxis(context, legendContainer, gradHeight - item.icon.height - padding, gradWidth - 2 * padding - 1); - legendContainer.classed(`${classPrefix}-overflow-x`, width > maxWidth); applyStyle(legendContainer, { height: `${maxItemSpaces.height + border + padding}px`, @@ -174,10 +174,10 @@ export const renderGradient = (context, container) => { linearGradient.attr('x2', '0%').attr('y1', '100%'); legendGradCont.attr('transform', `translate(0 ${labelDim.height / 2})`); renderAxis(context, legendContainer, gradHeight - 2 * padding - 1, gradWidth - item.icon.width - padding * 2); - legendContainer.classed(`${classPrefix}-overflow-y`, height > maxHeight); + applyStyle(legendContainer, { height: `${Math.min(height, maxHeight)}px`, - width: `${width}px`, + width: `${maxWidth}px`, padding: `${padding}px` }); legendRect.attr('height', gradientDimensions.height - labelDim.height / 2); diff --git a/packages/muze-legend/src/legend/gradient-legend.js b/packages/muze-legend/src/legend/gradient-legend.js index 65db7edf..73c7dd15 100644 --- a/packages/muze-legend/src/legend/gradient-legend.js +++ b/packages/muze-legend/src/legend/gradient-legend.js @@ -1,5 +1,5 @@ import SimpleLegend from './simple-legend'; -import { getScaleInfo, getInterpolatedData } from './legend-helper'; +import { getScaleInfo, getInterpolatedData, getInterpolatedArrayData } from './legend-helper'; import { GRADIENT, LEFT, SIZE } from '../enums/constants'; import { renderGradient, createAxis } from './gradient-helper'; import '../styles.scss'; @@ -57,10 +57,19 @@ export default class GradientLegend extends SimpleLegend { * * @memberof GradientLegend */ - dataFromScale (scale) { + dataFromScale () { let domainForLegend = []; + const scale = this.scale(); const { scaleType, domain, steps, scaleFn } = getScaleInfo(scale); + // defining scaleParams + const scaleParams = { + smartLabel: this.labelManager(), + measures: this.measurement(), + alignment: this.config().position, + minTickDistance: this.minTickDistance() + }; + if (steps instanceof Array) { if (domain[0] < steps[0]) { domainForLegend[0] = domain[0]; @@ -69,8 +78,12 @@ export default class GradientLegend extends SimpleLegend { if (domain[domain.length - 1] > steps[steps.length - 1]) { domainForLegend.push(domain[1]); } + // Sorting the domain Array + domainForLegend = [...new Set(domainForLegend)].sort((a, b) => a - b); + + domainForLegend = getInterpolatedArrayData(domainForLegend, scaleParams); } else { - domainForLegend = getInterpolatedData(domain, steps - 1); + domainForLegend = getInterpolatedData(domain, steps - 1, scaleParams); } domainForLegend = [...new Set(domainForLegend)].sort((a, b) => a - b); diff --git a/packages/muze-legend/src/legend/legend-helper.js b/packages/muze-legend/src/legend/legend-helper.js index 3636dda7..96534f29 100644 --- a/packages/muze-legend/src/legend/legend-helper.js +++ b/packages/muze-legend/src/legend/legend-helper.js @@ -27,16 +27,157 @@ export const getScaleInfo = (scale) => { }; /** + * Function to recompute the stops in array in case to left and right alignment of legend. * - * - * @param {*} domain - * @param {*} steps - * + * @param {string} param - parameter to measure + * @param {Object} requiredMeasure - required measure parameters + * @param {Object} availableMeasure - available meassure parameters + * @param {Array} domainForLegend - array + * @param {Object} smartLabelCalc - smartLabel Manager + * @return {Array} - Array + */ +const getcomputedArray = (computationhelper, requiredMeasure, availableMeasure, domainForLegend) => { + // declaring Current and Next Tick Value variable + let currentTickValue; + let nextTickValue; + const upperBound = domainForLegend[domainForLegend.length - 1]; + const param = computationhelper.measureParam; + const smartLabelCalc = computationhelper.smartLabelCalc; + + // calculating pixel required per Tick Values + const pixelPerTick = (availableMeasure[param] / upperBound); + + // checking if available max width is smaller than required width for legend. + if (availableMeasure[param] >= requiredMeasure[param]) { + return domainForLegend; + } + + currentTickValue = (smartLabelCalc.getOriSize((domainForLegend[0]))[param]); + for (let i = 1; i < domainForLegend.length - 1; i++) { + nextTickValue = Math.floor((currentTickValue / pixelPerTick) + domainForLegend[i - 1]); + if (domainForLegend[i] < nextTickValue) { + domainForLegend.splice(i, 1); + i -= 1; + } + currentTickValue = (smartLabelCalc.getOriSize((domainForLegend[i]))[param]); + } + return domainForLegend; +}; + +/** + * function to recompute the Stops Array provided to prevent the Overlapping of values + * @param {Array} domainForLegend - Stops Array + * @param {Object} scaleParams - Scale Parameters + * @return {Array} - modified Stops Array + */ +export const getInterpolatedArrayData = (domainForLegend, scaleParams) => { + // defining param for height/width selector + let measureParam; + + // declaring variable for required Width + let requiredWidth; + + // declaring variable for required height + let requiredHeight; + + // declaring the variable for upperbound + let upperBound = domainForLegend[domainForLegend.length - 1]; + + // Initializing Minimum Tick Difference Variable and checking if it's less than 1 or not + let minTickDiff = Math.ceil(domainForLegend[1] - domainForLegend[0]); + + // calculating max tick difference + const maxTickDiff = Math.ceil(upperBound - domainForLegend[0]); + + // gradient Alignment + const { alignment } = scaleParams; + + // getting SmartLabel Manager to calculate tick Params + const smartLabelCalc = scaleParams.smartLabel; + + // scale Measurements (i.e MaxWidth and MaxHeight available) + const availableSpace = scaleParams.measures; + + // getting minimum Tick size (i.e height and width) + const minimumTickSize = scaleParams.minTickDistance; + + // getting domain upperbound dimensions + const { height: tickDimHeight, width: tickDimWidth } = smartLabelCalc.getOriSize((upperBound)); + + /* Checking if UpperBound of Domain is Floating or Not. + In case of floating constricting it to 2 decimals after point. */ + if (!Number.isInteger(upperBound)) { + upperBound = ((upperBound).toFixed(2)); + } + + // Calculating minimum tick difference + minTickDiff = minTickDiff < 1 ? 1 : minTickDiff; + + // required width to render legend + requiredWidth = (Math.abs(maxTickDiff) / Math.abs(minTickDiff)) * (tickDimWidth + (minimumTickSize.width)); + + requiredWidth -= Math.abs(maxTickDiff); + + // require height to render legend + requiredHeight = (Math.abs(maxTickDiff) / Math.abs(minTickDiff)) * tickDimHeight; + + requiredHeight -= Math.abs(maxTickDiff); + + // checking the alignment of legend + if (alignment === TOP || alignment === BOTTOM) { + measureParam = WIDTH; + } else { + measureParam = HEIGHT; + } + + // calculating computed array + domainForLegend = getcomputedArray({ + smartLabelCalc, + measureParam + }, { + height: requiredHeight, + width: requiredWidth + }, { + height: availableSpace.maxHeight, + width: availableSpace.maxWidth + }, domainForLegend); + + return domainForLegend; +}; + +/** + * function to recalculate steps on providing more number of stops than canvas can accomodate. + * @param {Array} domain - Array + * @param {Array} steps - Array + * @param {Object} scaleParams - Scale Parameters + * @return {Array} - recalculated Step Array */ -export const getInterpolatedData = (domain, steps) => { +export const getInterpolatedData = (domain, steps, scaleParams) => { + // declaring recomputeSteps Variable + let recomputeSteps = 0; + + const getTickMeasure = scaleParams.smartLabel; + const { maxWidth, maxHeight } = scaleParams.measures; + const { alignment } = scaleParams; const domainForLegend = []; const interpolatedFn = numberInterpolator()(domain[0], domain[1]); + // getting tick measure(i.e height and width) + const tickValue = getTickMeasure.getOriSize(domain[1].toFixed(2)); + + // To round the floating values to Integer and checking if value is 1. + steps = Math.round(steps); + steps = steps < 1 ? (steps + 1) : steps; + + // checking alignment of the Axis + if (alignment === TOP || alignment === BOTTOM) { + recomputeSteps = Math.floor(maxWidth / (tickValue.width)); + } else { + recomputeSteps = Math.floor(maxHeight / (tickValue.height)); + } + steps = Math.min(steps, recomputeSteps); + + // scaling the axis based on steps provided for (let i = 0; i <= steps; i++) { domainForLegend[i] = interpolatedFn(i / steps); } diff --git a/packages/muze-legend/src/legend/props.js b/packages/muze-legend/src/legend/props.js index f4eccf51..ef9764d8 100644 --- a/packages/muze-legend/src/legend/props.js +++ b/packages/muze-legend/src/legend/props.js @@ -33,6 +33,8 @@ export const PROPS = { title: { sanitization: (context, value) => mergeRecursive(context._title || {}, value) }, + labelManager: {}, + minTickDistance: {}, valueParser: { defaultValue: val => val } diff --git a/packages/muze-legend/src/legend/simple-legend.js b/packages/muze-legend/src/legend/simple-legend.js index be84ea9b..093dbfeb 100644 --- a/packages/muze-legend/src/legend/simple-legend.js +++ b/packages/muze-legend/src/legend/simple-legend.js @@ -45,6 +45,9 @@ export default class SimpleLegend { this._measurement = Object.assign({}, this.constructor.defaultMeasurement()); this._config = mergeRecursive({}, this.constructor.defaultConfig()); + const dist = dependencies.labelManager.getOriSize('w'); + this._minTickDistance = { width: dist.width * 3 / 4, height: dist.height / 2 }; + generateGetterSetters(this, PROPS); this._computedStyle = getSmartComputedStyle(selectElement('body'), `${this.config().classPrefix}-legend-item-info`); @@ -183,7 +186,7 @@ export default class SimpleLegend { const effBorder = border * 2; const effMargin = margin * 2; - this.data(this.dataFromScale(this.scale())); + this.data(this.dataFromScale()); // Get space occupied by title const titleSpace = this.getTitleSpace(); const titleHeight = titleSpace.height > 0 ? titleSpace.height + effPadding : 0; diff --git a/packages/muze-legend/src/legend/step-legend.js b/packages/muze-legend/src/legend/step-legend.js index 4fd6f87a..d603081e 100644 --- a/packages/muze-legend/src/legend/step-legend.js +++ b/packages/muze-legend/src/legend/step-legend.js @@ -51,8 +51,9 @@ export default class StepLegend extends SimpleLegend { * * @memberof StepLegend */ - dataFromScale (scale) { + dataFromScale () { let domainLeg = []; + const scale = this.scale(); const { scaleType, domain, steps, scaleFn } = getScaleInfo(scale); const { formatter } = this.config(); @@ -60,6 +61,14 @@ export default class StepLegend extends SimpleLegend { lower: null, upper: null }; + // defining scaleParams + const scaleParams = { + smartLabel: this.labelManager(), + measures: this.measurement(), + alignment: this.config().position, + minTickDistance: this.minTickDistance() + }; + if (steps instanceof Array) { if (domain[0] < steps[0]) { domainBounds.lower = [`${formatter.bounds.lower} ${steps[0]}`]; @@ -69,7 +78,7 @@ export default class StepLegend extends SimpleLegend { domainBounds.upper = [`${formatter.bounds.upper} ${steps[steps.length - 1]}`]; } } else { - domainLeg = getInterpolatedData(domain, steps); + domainLeg = getInterpolatedData(domain, steps, scaleParams); } domainLeg = [...new Set(domainLeg)].sort((a, b) => a - b); @@ -77,6 +86,8 @@ export default class StepLegend extends SimpleLegend { let value = null; if (i < domainLeg.length - 1) { value = `${(ele.toFixed(1))} - ${(+domainLeg[i + 1].toFixed(1))}`; + } else if (domainLeg.length === 1) { + value = ele.toFixed(1); } return { [scaleType]: scaleType === SIZE ? scale[scaleFn](ele) * scale.getScaleFactor() : scale[scaleFn](ele), @@ -96,6 +107,7 @@ export default class StepLegend extends SimpleLegend { { domain, steps, domainBounds, domainLeg }); domainLeg = [...domainLeg, upperBounds]; } + return domainLeg; } diff --git a/packages/muze-tooltip/README.md b/packages/muze-tooltip/README.md index a272dd7a..0f22e622 100644 --- a/packages/muze-tooltip/README.md +++ b/packages/muze-tooltip/README.md @@ -10,7 +10,7 @@ $ npm install --save @chartshq/muze-tooltip ## Docs -Please refer to [this](https://www.charts.com/muze/docs) for detailed documentation. +Please refer to [this](https://muzejs.org/docs) for detailed documentation. ## Contributing diff --git a/packages/muze-tooltip/package.json b/packages/muze-tooltip/package.json index 0a299c9d..768d0ca5 100644 --- a/packages/muze-tooltip/package.json +++ b/packages/muze-tooltip/package.json @@ -2,40 +2,37 @@ "name": "@chartshq/muze-tooltip", "version": "1.0.0", "description": "The tooltip renderer for MuzeJS", - "homepage": "https://www.charts.com/muze", + "homepage": "https://muzejs.org", "license": "MIT", - "author": "Charts.com ", "contributors": [ { "name": "Akash Ghoswami", - "email": "akash@charts.com" + "email": "akashgoswami90s@gmail.com" }, { "name": "Ranajit Banerjee", - "email": "ranajit.banerjee@charts.com", + "email": "ranajit.113124@gmail.com", "url": "https://github.com/ranajitbanerjee" }, { "name": "Mridul Meharia", - "email": "mridul@charts.com", + "email": "mehariamridul@gmail.com", "url": "https://github.com/mridulmeh" }, { - "name": "Subhash Haldar", - "email": "subhash@charts.com" + "name": "Subhash Haldar" }, { - "name": "Sandeep Acharya", - "email": "sandeep@charts.com" + "name": "Sandeep Acharya" }, { "name": "Rousan Ali", - "email": "rousan@charts.com", + "email": "rousanali786@gmail.com", "url": "https://rousan.io" }, { "name": "Ujjal Kumar Dutta", - "email": "ujjal@charts.com" + "email": "duttaujjalkumar@live.com" } ], "main": "src/index.js", diff --git a/packages/muze-tooltip/src/content.js b/packages/muze-tooltip/src/content.js index 5caca1ea..91b6cc48 100644 --- a/packages/muze-tooltip/src/content.js +++ b/packages/muze-tooltip/src/content.js @@ -7,7 +7,6 @@ import { getSymbol, isSimpleObject } from 'muze-utils'; -import { DEFAULT_STRATEGY, strategy } from './strategy'; import { defaultConfig } from './default-config'; /** @@ -19,7 +18,6 @@ export default class Content { */ constructor () { this._model = null; - this._strategy = DEFAULT_STRATEGY; this._formatter = null; this._config = this.constructor.defaultConfig(); } @@ -47,7 +45,6 @@ export default class Content { */ update (item) { this._model = item.model; - this._strategy = item.strategy !== undefined ? item.strategy : DEFAULT_STRATEGY; this._formatter = item.formatter; return this; } @@ -69,8 +66,7 @@ export default class Content { if (model instanceof Array) { data = model; } else { - data = formatter instanceof Function ? formatter(this._model, this._context) : - strategy[this._strategy](this._model, this.config(), this._context); + data = formatter(this._model, this.config(), this._context); } if (data instanceof Function) { diff --git a/packages/muze-tooltip/src/strategy.js b/packages/muze-tooltip/src/strategy.js deleted file mode 100644 index 9332d1b4..00000000 --- a/packages/muze-tooltip/src/strategy.js +++ /dev/null @@ -1,203 +0,0 @@ -import { - formatTemporal, - DimensionSubtype, - MeasureSubtype, - FieldType, - DataModel, - defaultValue -} from 'muze-utils'; - -const { InvalidAwareTypes } = DataModel; - -const formatters = (formatter, interval, valueParser) => ({ - [DimensionSubtype.TEMPORAL]: (value) => { - if (value instanceof InvalidAwareTypes) { - return valueParser(value); - } - return formatTemporal(value, interval); - }, - [MeasureSubtype.CONTINUOUS]: value => (value instanceof InvalidAwareTypes ? valueParser(value) : - formatter(value.toFixed(2))), - [DimensionSubtype.CATEGORICAL]: value => valueParser(value) -}); - -const getDefaultTooltipFormatterFn = (formatter, defaultFormatter) => defaultValue(formatter, defaultFormatter); - -const getTabularData = (dataObj, context, defaultFormatter) => { - const rows = []; - const { data, schema, fieldspace } = dataObj; - rows.push(schema.map(d => d.name)); - const { valueParser, timeDiffs } = context; - data.forEach((d) => { - const row = []; - schema.forEach((fieldObj, i) => { - const interval = fieldObj.subtype === DimensionSubtype.TEMPORAL ? timeDiffs[fieldObj.name] : 0; - const numberFormat = fieldObj.type === FieldType.MEASURE && fieldspace.fields[i].numberFormat(); - const formatterFn = getDefaultTooltipFormatterFn(formatters(numberFormat, - interval, valueParser)[fieldObj.subtype], defaultFormatter); - const value = formatterFn(d[i]); - row.push(value); - }); - rows.push(row); - }); - return rows; -}; - -export const buildTooltipData = (dataModel, config = {}, context) => { - let fieldValues = []; - const dataObj = dataModel.getData(); - const data = dataObj.data; - const schema = dataObj.schema; - const separator = config.separator; - const fieldsConfig = dataModel.getFieldsConfig(); - const fieldspace = dataModel.getFieldspace(); - const detailFields = context.detailFields || []; - const dimensions = schema.filter(d => d.type === FieldType.DIMENSION); - const measures = schema.filter(d => d.type === FieldType.MEASURE); - const containsDetailField = schema.find(d => detailFields.indexOf(d.name) !== -1); - const dataLen = data.length; - const { - valueParser, - axes, - dimensionMeasureMap, - timeDiffs - } = context; - const defFormatter = formatters(null, null, valueParser)[DimensionSubtype.CATEGORICAL]; - const getRowContent = (field, type) => { - let value; - let formattedValue; - let measureIndex; - const values = []; - const index = fieldsConfig[field].index; - const interval = fieldsConfig[field].def.subtype === DimensionSubtype.TEMPORAL ? timeDiffs[field] : 0; - const formatterFn = getDefaultTooltipFormatterFn(formatters(val => val, interval, valueParser)[type], - defFormatter); - - if (value !== null) { - let uniqueVals = type === MeasureSubtype.CONTINUOUS ? data.map(d => d[index]) : - [...new Set(data.map(d => d[index]))]; - uniqueVals = uniqueVals.filter(d => d !== ''); - const colorAxis = axes.color[0]; - const shapeAxis = axes.shape[0]; - const sizeAxis = axes.size[0]; - const isRetinalField = (colorAxis || shapeAxis || sizeAxis) && dataLen > 1 && - type !== MeasureSubtype.CONTINUOUS; - - uniqueVals.forEach((val, i) => { - let key; - const associatedMeasures = dimensionMeasureMap[field]; - - if (associatedMeasures && associatedMeasures.length && dataLen > 1) { - key = val; - let icon = { - value: '' - }; - - if (isRetinalField) { - icon = { - type: 'icon', - color: colorAxis.getColor(val), - shape: shapeAxis.getShape(val), - size: sizeAxis.getSize(val) * config.iconScale - }; - } - if (associatedMeasures.length > 1) { - const formattedKey = type === DimensionSubtype.TEMPORAL ? formatterFn(key, interval) : key; - values.push([icon, `${formattedKey}`]); - associatedMeasures.forEach((measure) => { - measureIndex = fieldsConfig[measure].index; - value = data[i][measureIndex]; - const numberFormat = fieldspace.fields[measureIndex].numberFormat(); - const measureFormatter = getDefaultTooltipFormatterFn( - formatters(numberFormat, interval, valueParser)[MeasureSubtype.CONTINUOUS]); - formattedValue = measureFormatter(value); - values.push([{ - value: `${measure}${separator}`, - style: { - 'margin-left': `${config.margin}px}` - }, - className: `${config.classPrefix}-tooltip-key` - }, { - value: `${formattedValue}`, - className: `${config.classPrefix}-tooltip-value` - }]); - }); - } else { - measureIndex = fieldsConfig[associatedMeasures[0]].index; - value = data[i][measureIndex]; - const numberFormat = fieldspace.fields[measureIndex].numberFormat(); - const measureFormatter = getDefaultTooltipFormatterFn( - formatters(numberFormat, interval, valueParser)[MeasureSubtype.CONTINUOUS]); - formattedValue = measureFormatter(value); - const formattedKey = type === DimensionSubtype.TEMPORAL ? formatterFn(key, interval) : key; - values.push([ - icon, - { - value: `${formattedKey}`, - className: `${config.classPrefix}-tooltip-key` - }, - { - value: `${formattedValue}`, - className: `${config.classPrefix}-tooltip-value` - } - ]); - } - } else { - key = field; - value = val; - formattedValue = formatterFn(value); - values.push([{ - value: `${key}${separator}`, - className: `${config.classPrefix}-tooltip-key` - }, { - value: `${formattedValue}`, - className: `${config.classPrefix}-tooltip-value` - }]); - } - }); - } - return values; - }; - let displayFormat = 'keyValue'; - - if (dataLen > 1 && containsDetailField) { - fieldValues = getTabularData({ - data, - schema, - fieldspace - }, context, defFormatter); - displayFormat = 'table'; - } else { - dimensions.forEach((item) => { - const type = item.subtype ? item.subtype : item.type; - fieldValues = [...fieldValues, ...getRowContent(item.name, type)]; - }); - - const allMeasures = [...new Set(...Object.values(dimensionMeasureMap))]; - const filteredMeasures = dataLen > 1 ? measures.filter(d => allMeasures.indexOf(d.name) === -1) - : measures; - - filteredMeasures.forEach((item) => { - const type = item.subtype ? item.subtype : item.type; - fieldValues = [...fieldValues, ...getRowContent(item.name, type)]; - }); - } - - return { - content: fieldValues, - displayFormat - }; -}; - -/** - * This contains the strategy methods for showing tooltip in the chart. - * @param {VisualUnit} context Attached instance. - */ -export const strategy = { - keyValue: (data, config, context) => { - const values = buildTooltipData(data, config, context); - return values; - } -}; - -export const DEFAULT_STRATEGY = 'keyValue'; diff --git a/packages/muze-utils/README.md b/packages/muze-utils/README.md index 05aa63a5..5e06aca5 100644 --- a/packages/muze-utils/README.md +++ b/packages/muze-utils/README.md @@ -10,7 +10,7 @@ $ npm install --save @chartshq/muze-utils ## Docs -Please refer to [this](https://www.charts.com/muze/docs) for detailed documentation. +Please refer to [this](https://muzejs.org/docs) for detailed documentation. ## Contributing diff --git a/packages/muze-utils/package.json b/packages/muze-utils/package.json index 59820eb4..64cfd80c 100644 --- a/packages/muze-utils/package.json +++ b/packages/muze-utils/package.json @@ -2,40 +2,37 @@ "name": "muze-utils", "version": "1.0.0", "description": "It contains all the utility functions needed by components of muze", - "homepage": "https://www.charts.com/muze", + "homepage": "https://muzejs.org", "license": "MIT", - "author": "Charts.com ", "contributors": [ { "name": "Akash Ghoswami", - "email": "akash@charts.com" + "email": "akashgoswami90s@gmail.com" }, { "name": "Ranajit Banerjee", - "email": "ranajit.banerjee@charts.com", + "email": "ranajit.113124@gmail.com", "url": "https://github.com/ranajitbanerjee" }, { "name": "Mridul Meharia", - "email": "mridul@charts.com", + "email": "mehariamridul@gmail.com", "url": "https://github.com/mridulmeh" }, { - "name": "Subhash Haldar", - "email": "subhash@charts.com" + "name": "Subhash Haldar" }, { - "name": "Sandeep Acharya", - "email": "sandeep@charts.com" + "name": "Sandeep Acharya" }, { "name": "Rousan Ali", - "email": "rousan@charts.com", + "email": "rousanali786@gmail.com", "url": "https://rousan.io" }, { "name": "Ujjal Kumar Dutta", - "email": "ujjal@charts.com" + "email": "duttaujjalkumar@live.com" } ], "main": "src/index.js", @@ -56,6 +53,7 @@ "d3-scale-chromatic": "^1.2.0", "d3-selection": "^1.3.0", "d3-shape": "^1.2.0", + "d3-time": "^1.0.11", "d3-transition": "^1.1.1", "d3-voronoi": "^1.1.2", "datamodel": "^2.1.0", diff --git a/packages/muze-utils/src/DataSystem/data-object.js b/packages/muze-utils/src/DataSystem/data-object.js deleted file mode 100644 index 616d5a7f..00000000 --- a/packages/muze-utils/src/DataSystem/data-object.js +++ /dev/null @@ -1,48 +0,0 @@ -import { getUniqueId } from '../index'; -/** - * Represents the base class that all objects that form - * the data for a selection must inherit from. - * - * @class DataObject - */ -class DataObject { -/** - * Creates an instance of DataObject. - * @memberof DataObject - */ - constructor () { - this._id = getUniqueId(); - } - /** - * Returns the id. - * - * @readonly - * @memberof DataObject - */ - get id () { - return this._id; - } - - /** - * Sets the value corresponding to supplied key. - * - * @param {string} key The property name. - * @param {any} value Value associated with prop. - * @memberof DataObject - */ - attr (key, value) { - this[key] = value; - } - - /** - * Clean up code to be executed by each object. - * - * @override - * @memberof DataObject - */ - remove () { - // cleanup - } -} - -export default DataObject; diff --git a/packages/muze-utils/src/DataSystem/dataSelect.js b/packages/muze-utils/src/DataSystem/dataSelect.js index 733a2f05..3ec85a61 100644 --- a/packages/muze-utils/src/DataSystem/dataSelect.js +++ b/packages/muze-utils/src/DataSystem/dataSelect.js @@ -6,7 +6,7 @@ import Selection from './selection'; * @param {Array} [data=[]] The data array to be observed. * @return {Selection} Instance of a selection. */ -export default function dataSelect (data = []) { - return new Selection(data); +export default function dataSelect (idFn) { + return new Selection(idFn); } diff --git a/packages/muze-utils/src/DataSystem/enter-selection.js b/packages/muze-utils/src/DataSystem/enter-selection.js deleted file mode 100644 index 1337dfd9..00000000 --- a/packages/muze-utils/src/DataSystem/enter-selection.js +++ /dev/null @@ -1,39 +0,0 @@ -import Selection from './selection'; -/** - * Represents a selecton in enter phase. - * - * @class EnterSelection - */ -class EnterSelection { - - /** - * Creates an instance of EnterSelection. - * @param {Array} enterData The input data. - * @memberof EnterSelection - */ - constructor (enterData, idMap, idGetter) { - this._enterData = enterData; - this._idMap = idMap; - this._idGetter = idGetter; - } - - /** - * Applies the supplied callback to each data element - * and returns a new selection. - * - * @param {Function} callback Callback to execute on each item. - * @return {Selection} New selection with data created using callback. - * @memberof EnterSelection - */ - append (callback) { - const objects = this._enterData.forEach((...params) => { - const data = params[0]; - const id = this._idGetter ? this.idGetter(data) : (data.id || params[1]); - this._idMap[id] = callback(...params); - }); - - return new Selection().appendObjects(objects).data(this._enterData); - } -} - -export default EnterSelection; diff --git a/packages/muze-utils/src/DataSystem/index.js b/packages/muze-utils/src/DataSystem/index.js index 5e022c0f..55851e98 100644 --- a/packages/muze-utils/src/DataSystem/index.js +++ b/packages/muze-utils/src/DataSystem/index.js @@ -1,4 +1,3 @@ import dataSelect from './dataSelect'; -import DataObject from './data-object'; -export { dataSelect, DataObject }; +export { dataSelect }; diff --git a/packages/muze-utils/src/DataSystem/index.spec.js b/packages/muze-utils/src/DataSystem/index.spec.js index 32ffbbff..5dc34c7f 100644 --- a/packages/muze-utils/src/DataSystem/index.spec.js +++ b/packages/muze-utils/src/DataSystem/index.spec.js @@ -1,54 +1,57 @@ /* global describe, it */ import { expect } from 'chai'; -import { dataSelect, DataObject } from './index'; +import { dataSelect } from './index'; describe('Data system Methods Test', () => { it('tests datasystem functionality', () => { - /** - * Current class from which selection is teseted - * @class MyObject - * @extends {DataObject} class - */ - class MyObject extends DataObject { - /** - * Creates an instance of MyObject. - * @param {any} number class property - * @memberof MyObject - */ - constructor (number) { - super(); - this.preciousNumber = number; - } - } - const source = []; + const createSelection = (sel, appendObj, data, idFn) => { + let selection = sel || dataSelect(idFn); - let selection = dataSelect(source); + // data = [{ val: 0 }, { val: 1} ]; + selection = selection.data(data); - const data = [1, 2, 3, 4]; + const enter = selection.enter().append(appendObj); + const mergedSelection = enter.merge(selection); - selection = selection.data(data); + selection.exit() && selection.exit().remove(); + return mergedSelection; + }; - let enter = selection.enter().append(d => new MyObject(d)); - enter = enter.attr('preciousNumber', 10); + class Layer { + constructor (d) { + this.data = d; + } - const merge = enter.merge(selection); + remove () { - const objects = enter.getObjects(); - expect( - objects.length === 4 - ).to.be.true; - // update the number of elements in array to get fewer elements - let fewerSelections = merge.data([1, 2]); - // remove exit data - fewerSelections.exit().remove(); + } + } - fewerSelections = fewerSelections - .enter() - .append(d => new MyObject(d)) - .merge(fewerSelections); - const fewerObjects = fewerSelections.getObjects(); - expect( - fewerObjects.length === 2 - ).to.be.true; + it('should return entry set data', () => { + let sel = null; + sel = createSelection(sel, d => new Layer(d), [{ val: 0 }, { val: 1 }], d => d.val); + expect(sel.getObjects().map(d => d.data)).to.equal([{ val: 0 }, { val: 1 }]); + }); + + it('should return update set data excluding exit set', () => { + let sel = null; + sel = createSelection(sel, d => new Layer(d), [{ val: 0 }, { val: 1 }], d => d.val); + sel = createSelection(sel, d => new Layer(d), [{ val: 0 }, { val: 2 }], d => d.val); + expect(sel.getObjects().map(d => d.data)).to.equal([{ val: 0 }, { val: 2 }]); + }); + + it('should return all data', () => { + let sel = null; + sel = createSelection(sel, d => new Layer(d), [{ val: 0 }, { val: 1 }], d => d.val); + sel = createSelection(sel, d => new Layer(d), [{ val: 0 }, { val: 1 }, { val: 2 }], d => d.val); + expect(sel.getObjects().map(d => d.data)).to.equal([{ val: 0 }, { val: 1 }, { val: 2 }]); + }); + + it('should return updated data', () => { + let sel = null; + sel = createSelection(sel, d => new Layer(d), [{ val: 0 }, { val: 1 }], d => d.val); + sel = createSelection(sel, d => new Layer(d), [{ val: 0 }], d => d.val); + expect(sel.getObjects().map(d => d.data)).to.equal([{ val: 0 }]); + }); }); }); diff --git a/packages/muze-utils/src/DataSystem/selection.js b/packages/muze-utils/src/DataSystem/selection.js index 5d13e7c5..d8e371fb 100644 --- a/packages/muze-utils/src/DataSystem/selection.js +++ b/packages/muze-utils/src/DataSystem/selection.js @@ -9,29 +9,13 @@ class Selection { * @param {Array} data Array of DataObjects. * @memberof Selection */ - constructor () { - this._data = []; - // // map of id to data - this._idMap = {}; - this._dataMap = {}; + constructor (idGetter) { + this._dataObjects = new Map(); + this._updatedata = new Map(); this._mode = ''; - // data.forEach((item, idx) => { - // const index = item.id || idx; - // this._idMap[index] = item; - // }); - // // array to store data in enter phase - this._enterdata = []; - // // array to store data in exit phase - this._exitdata = []; - } - /** - * Gets the object bound to a class - * - * @return {Object} current data set bound to the class - * @memberof Selection - */ - getObjects () { - return Object.values(this._idMap); + this._enterdata = new Map(); + this._exitdata = new Map(); + this._idGetter = idGetter; } /** @@ -42,61 +26,53 @@ class Selection { * @return {Selection} Modified selection. * @memberof Selection */ - data (newData, idGetter) { - if (idGetter) { - this._data = []; - this._idGetter = idGetter; - const tempMap = {}; - - newData.forEach((...params) => { - const index = idGetter(...params); - tempMap[index] = params[0]; - }); - // check if any data items have been removed - const purgedIds = []; - - Object.keys(this._idMap).forEach((id) => { - if (!tempMap[id]) { - purgedIds.push(id); - } - }); - - Object.keys(tempMap).forEach((id) => { - if (!this._idMap[id]) { - this._enterdata.push(tempMap[id]); - } else { - this._idMap[id] = tempMap[id]; - this._data.push(tempMap[id]); - } - }); - // move the purged items to exit selection - purgedIds.forEach((id) => { - const purged = this._idMap[id]; - this._exitdata.push(purged); - // this._data = this._data.slice(id, 1); - delete this._idMap[id]; - }); - // this._data = this._data.slice(temp, this._data.length); - - return this; - } - // no id getter supplied so use indices - if (newData.length > this._data.length) { - const startIdx = this._data.length; - for (let i = startIdx; i < newData.length; i += 1) { - this._enterdata.push(newData[i]); + data (newData) { + const entryData = new Map(); + const exitdata = new Map(); + const tempMap = new Map(); + const duplicateData = new Map(); + const updatedData = this._updatedata; + + newData.forEach((...params) => { + const key = this.idGetter ? this._idGetter(...params) : params[1]; + if (!tempMap.has(key)) { + tempMap.set(key, params[0]); + } else { + duplicateData.push(key, params[0]); } - } else { - // push to exit selection - const temp = newData.length; - for (let i = temp; i < this._data.length; i += 1) { - const purged = this._data[i]; - delete this._idMap[purged.id]; - this._exitdata.push(purged); + }); + + let val; + // prepare enter data + let entries = tempMap.entries(); + while (val = entries.next().value) { + if (!updatedData.has(val[0])) { + entryData.set(val[0], val[1]); + } else { + updatedData.set(val[0], val[1]); } - this._data = this._data.slice(temp, this._data.length); } - return this; + // prepare exit data + entries = updatedData.entries(); + while (val = entries.next().value) { + if (!tempMap.has(val[0])) { + exitdata.set(val[0], val[1]); + } + } + + // put duplicate data to exit list + entries = duplicateData.entries(); + while (val = entries.next().value) { + exitdata.set(val[0], val[1]); + } + + const newSelection = new Selection(this._idGetter); + newSelection._updatedata = updatedData; + newSelection._dataObjects = this._dataObjects; + newSelection._enterdata = entryData; + newSelection._exitdata = exitdata; + + return newSelection; } /** @@ -105,109 +81,162 @@ class Selection { * * @param {Function} callback Callback to execute on each item. * @return {Selection} New selection with data created using callback. - * @memberof EnterSelection + * @memberof Selection */ append (callback) { - this[`_${this._mode}data`].forEach((...params) => { - const data = params[0]; - const id = this._idGetter ? this._idGetter(...params) : (data.id || params[1]); - this._idMap[id] = callback(...params); - this._dataMap[id] = data; - }); + let currentData; + let val; + const dataObjects = new Map(); + const data = new Map(); + + // select the data to create object + switch (this._mode) { + case 'enter': + currentData = this._enterdata; + break; + case 'exit': + currentData = this._exitdata; + break; + default: + currentData = this._updatedata; + } + + const entries = currentData.entries(); + + while (val = entries.next().value) { + dataObjects.set(val[0], callback(val[1])); + data.set(val[0], val[1]); + } + + const newSelection = new Selection(this._idGetter); + newSelection._updatedata = data; + newSelection._dataObjects = dataObjects; this._mode = ''; - return this; + + return newSelection; } - /** + /** * This method returns an enter selection that * allows or update operations. * - * @return {EnterSelection} Instance of enter selection. + * @return {Selection} Instance of enter selection. * @memberof Selection */ enter () { this._mode = 'enter'; return this; - // return new EnterSelection(this._enterdata, this._idMap, this._idGetter); } /** - * This method is used to set key value pairs - * on data objects. + * Returns a selection with exit data. * - * @param {string} key Name of property. - * @param {any} value Value of property. - * @return {Selection} Modified selection. + * @return {Selection} Instance of selection. * @memberof Selection */ - attr (key, value) { - this._data.forEach(item => item.attr(key, value)); + exit () { + this._mode = 'exit'; return this; } - /** + /** * This method merges the data of one selection with another. * * @param {Selection} selection Instance of selection. * @return {Selection} Modified selection. * @memberof Selection */ - merge (selection) { - selection._data.forEach((...params) => { - const id = this._idGetter ? this._idGetter(...params) : (params[0].id || params[1]); - this._idMap[id] = params[0]; - this._data.push(params[0]); - }); - // reset enter selection - this._enterdata = []; - return this; - } + merge (target) { + const mergedObjects = new Map(); + const mergedData = new Map(); + let val; + let entries; - /** - * Returns a selection with exit data. - * - * @return {Selection} Instance of selection. - * @memberof Selection - */ - exit () { - this._mode = 'exit'; - // const exitdata = this._exitdata; - // const exitSelection = new Selection(exitdata); - // this._exitdata = []; - return this; + // merge Object and data present in this selection + entries = this._updatedata.entries(); + while (val = entries.next().value) { + if (!this._exitdata.has(val[0])) { + mergedData.set(val[0], val[1]); + mergedObjects.set(val[0], this._dataObjects.get(val[0])); + } + } + + // merge object from target selection + entries = target._updatedata.entries(); + while (val = entries.next().value) { + if (!(mergedData.has(val[0]) || target._exitdata.has(val[0]))) { + mergedData.set(val[0], val[1]); + mergedObjects.set(val[0], target._dataObjects.get(val[0])); + } + } + + const newSelection = new Selection(this._idGetter); + newSelection._updatedata = mergedData; + newSelection._dataObjects = mergedObjects; + + return newSelection; } each (fn) { - Object.keys(this._idMap).forEach((e, i) => { - fn(this._idMap[e], this._dataMap[e], i); - }); - return this; + let val; + const entries = this._dataObjects.entries(); + + while (val = entries.next().value) { + fn(val[1], this._updatedata.get(val[0]), val[0]); + } } map (fn) { - Object.keys(this._idMap).forEach((...params) => { - const key = params[0]; - this._idMap[key] = fn(this._idMap[key], ...params, this._dataMap[key]); - }); + const newdata = new Map(); + let val; + const entries = this._dataObjects.entries(); + + while (val = entries.next().value) { + newdata.set(val[0], fn(val[1], this._updatedata.get(val[0]), val[0])); + } + const newSelection = new Selection(this._idGetter); + newSelection._updatedata = this._updatedata; + newSelection._dataObjects = newdata; + + return newSelection; + } + + remove () { + let currentData; + + switch (this._mode) { + case 'enter': + currentData = this._enterdata; + break; + case 'exit': + currentData = this._exitdata; + break; + default: + currentData = this._updatedata; + } + + currentData.clear(); + return this; } /** - * Executes the cleanup operation associated with data objets. + * Gets the object bound to a class * + * @return {Object} current data set bound to the class * @memberof Selection */ - remove () { - // do cleanup on DDO's - const data = this[`_${this._mode}data`]; + getObjects () { + const objects = []; + let val; + const values = this._dataObjects.values(); - data.forEach(item => item.remove()); - if (this._mode === '') { - this.each(e => e.remove()); + while (val = values.next().value) { + objects.push(val); } - this[`_${this._mode}data`] = []; - this._mode = ''; + return objects; } + } export default Selection; diff --git a/packages/muze-utils/src/common-utils.js b/packages/muze-utils/src/common-utils.js index 5c7c8d80..257eab51 100644 --- a/packages/muze-utils/src/common-utils.js +++ b/packages/muze-utils/src/common-utils.js @@ -1,5 +1,5 @@ /* global window, requestAnimationFrame, cancelAnimationFrame */ -import { FieldType, DimensionSubtype, DateTimeFormatter, default as DataModel } from 'datamodel'; +import { FieldType, DimensionSubtype, DateTimeFormatter, DM_DERIVATIVES, default as DataModel } from 'datamodel'; import { axisLeft, axisRight, @@ -60,7 +60,6 @@ import { voronoi } from 'd3-voronoi'; import Model from 'hyperdis'; import { dataSelect } from './DataSystem'; import * as STACK_CONFIG from './enums/stack-config'; -import { DM_OPERATION_GROUP } from './enums'; const { InvalidAwareTypes } = DataModel; const HTMLElement = window.HTMLElement; @@ -191,6 +190,14 @@ const getDomainFromData = (data, fields, fieldType) => { return domain; }; +const sanitizeDomainWhenEqual = (domain) => { + if (domain[0] === domain[1]) { + domain[0] = domain[0] > 0 ? 0 : domain[0]; + domain[1] = domain[1] > 0 ? domain[1] : 0; + } + return domain; +}; + /** * Union Domain values * @param {Array.} domains Array of domain values @@ -714,9 +721,8 @@ const transactor = (holder, options, model, namespaceInf = {}) => { } else { nameSpaceProp = prop; } - if (!store.prop(`${nameSpaceProp}`)) { - stateProps[prop] = conf.value; - } + + stateProps[prop] = conf.value; if (addAsMethod !== false) { holder[prop] = ((context, meta, nsProp) => (...params) => { let val; @@ -816,6 +822,7 @@ const generateGetterSetters = (context, props) => { const typeChecker = propInfo[1].typeChecker; const defVal = propInfo[1].defaultValue; const sanitization = propInfo[1].sanitization; + const preset = propInfo[1].preset; const prototype = context.constructor.prototype; if (!(Object.hasOwnProperty.call(prototype, prop))) { if (defVal) { @@ -827,6 +834,9 @@ const generateGetterSetters = (context, props) => { if (sanitization) { value = sanitization(context, params[0]); } + if (preset) { + preset(context, value); + } if (typeChecker && !typeChecker(value)) { return context[`_${prop}`]; } @@ -936,14 +946,16 @@ const mergeRecursive = (source, sink) => { * @return {Selection} Merged selection */ const createSelection = (sel, appendObj, data, idFn) => { - let selection = sel || dataSelect([]); + let selection = sel || dataSelect(idFn); - selection = selection.data(data, idFn); + selection = selection.data(data); const enter = selection.enter().append(appendObj); const mergedSelection = enter.merge(selection); - selection.exit() && selection.exit().remove(); + const exitSelection = selection.exit(); + exitSelection.getObjects().forEach(inst => inst.remove()); + exitSelection.remove(); return mergedSelection; }; @@ -1140,13 +1152,11 @@ const hsvToRgb = (h, s, v, a = 1) => { }; const hexToHsv = (hex) => { - const result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex); + const shorthandRegex = /^#?([a-f\d])([a-f\d])([a-f\d])$/i; + hex = hex.replace(shorthandRegex, (m, r, g, b) => r + r + g + g + b + b); - const r = parseInt(result[1], 16); - const g = parseInt(result[2], 16); - const b = parseInt(result[3], 16); - const a = result[4] ? parseInt(result[4], 16) : 1; - return rgbToHsv(r, g, b, a); + const result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex); + return result ? rgbToHsv(parseInt(result[1], 16), parseInt(result[2], 16), parseInt(result[3], 16)) : ''; }; const detectColor = (col) => { @@ -1157,7 +1167,7 @@ const detectColor = (col) => { // eslint-disable-next-line const matchRgba = /rgba?\(((25[0-5]|2[0-4]\d|1\d{1,2}|\d\d?)\s*,\s*?){2}(25[0-5]|2[0-4]\d|1\d{1,2}|\d\d?)\s*,?\s*([01]\.?\d*?)?\)/; // eslint-disable-next-line - const matchHsla = /^hsla\((0|360|35\d|3[0-4]\d|[12]\d\d|0?\d?\d),(0|100|\d{1,2})%,(0|100|\d{1,2})%,(0?\.\d|1(\.0)?)\)$/; + const matchHsla = /^hsla\((\d.+),\s*([\d.]+)%,\s*([\d.]+)%,\s*(\d*(?:\.\d+)?)\)$/; const matchHex = /^#([0-9a-f]{3}){1,2}$/i; if (matchRgb.test(col) || matchRgba.test(col)) { @@ -1289,6 +1299,11 @@ const getDataModelFromIdentifiers = (dataModel, identifiers, mode) => { saveChild: false, mode }); + } else { + filteredDataModel = dataModel.select(() => false, { + saveChild: false, + mode + }); } } else { filteredDataModel = getDataModelFromRange(dataModel, identifiers, mode); @@ -1548,35 +1563,42 @@ const getValueParser = config => (val) => { }; const retrieveNearestGroupByReducers = (dataModel, ...measureFieldNames) => { - let nearestReducers = {}; - let next = dataModel; - do { - const derivations = next.getDerivations(); - if (derivations) { - const groupDerivation = derivations.reverse().find(derivation => derivation.op === DM_OPERATION_GROUP); - if (groupDerivation) { - nearestReducers = groupDerivation.criteria || {}; - break; - } - } - } while (next = next.getParent()); - const filteredReducers = {}; - const measures = dataModel.getFieldspace().getMeasure(); - measureFieldNames.forEach((measureName) => { - if (nearestReducers[measureName]) { - filteredReducers[measureName] = nearestReducers[measureName]; - } else { - const measureField = measures[measureName]; - if (measureField) { - filteredReducers[measureName] = measureField.defAggFn(); + if (dataModel instanceof DataModel) { + const derivations = [...dataModel.getDerivations().reverse(), ...dataModel.getAncestorDerivations().reverse()]; + const nearestReducers = defaultValue( + getObjProp(derivations.find(derv => derv.op === DM_DERIVATIVES.GROUPBY), 'criteria'), {}); + + const measures = dataModel.getFieldspace().getMeasure(); + measureFieldNames = measureFieldNames.length ? measureFieldNames : Object.keys(measures); + measureFieldNames.forEach((measureName) => { + if (nearestReducers[measureName]) { + filteredReducers[measureName] = nearestReducers[measureName]; + } else { + const measureField = measures[measureName]; + if (measureField) { + filteredReducers[measureName] = measureField.defAggFn(); + } } - } - }); - + }); + } return filteredReducers; }; +const retrieveFieldDisplayName = (dm, fieldName) => dm.getFieldspace().fieldsObj()[fieldName].displayName(); +/** + * Fetches the nearest sort operation details by traversing the chain of parent DataModels + * @param {Object} dataModel Instance of DataModel + * + * @return {Array|null} sort criteria, null if no sort operation found + */ +const nearestSortingDetails = (dataModel) => { + const allDerivations = [...dataModel.getAncestorDerivations(), ...dataModel.getDerivations()]; + const nearestSortDerivation = allDerivations.reverse().find(derivation => derivation.op === DM_DERIVATIVES.SORT); + + return nearestSortDerivation ? nearestSortDerivation.criteria : null; +}; + export { getValueParser, require, @@ -1651,7 +1673,10 @@ export { getSmallestDiff, getNearestValue, retrieveNearestGroupByReducers, + nearestSortingDetails, createSelection, formatTemporal, - temporalFields + temporalFields, + retrieveFieldDisplayName, + sanitizeDomainWhenEqual }; diff --git a/packages/muze-utils/src/enums/constants.js b/packages/muze-utils/src/enums/constants.js index 4ff66fdd..defa7532 100644 --- a/packages/muze-utils/src/enums/constants.js +++ b/packages/muze-utils/src/enums/constants.js @@ -1 +1,4 @@ -export const DM_OPERATION_GROUP = 'group'; +export const COORD_TYPES = { + POLAR: 'polar', + CARTESIAN: 'cartesian' +}; diff --git a/packages/muze-utils/src/enums/index.js b/packages/muze-utils/src/enums/index.js index 83178a8b..fa20a0dd 100644 --- a/packages/muze-utils/src/enums/index.js +++ b/packages/muze-utils/src/enums/index.js @@ -1,3 +1,3 @@ export { default as ReservedFields } from './reserved-fields'; export { default as CommonProps } from './common-props'; -export { DM_OPERATION_GROUP } from './constants'; +export { COORD_TYPES } from './constants'; diff --git a/packages/muze-utils/src/index.js b/packages/muze-utils/src/index.js index 6f3dd67b..d1457ca4 100644 --- a/packages/muze-utils/src/index.js +++ b/packages/muze-utils/src/index.js @@ -12,7 +12,8 @@ export { export { ReservedFields, - CommonProps + CommonProps, + COORD_TYPES } from './enums'; export { STATE_NAMESPACES }; @@ -96,9 +97,12 @@ export { getSmallestDiff, require, formatTemporal, + nearestSortingDetails, createSelection, temporalFields, - retrieveNearestGroupByReducers + retrieveNearestGroupByReducers, + retrieveFieldDisplayName, + sanitizeDomainWhenEqual } from './common-utils'; export { @@ -122,11 +126,29 @@ export { hasTouch } from './renderer-utils'; +export { + timeMillisecond, + timeSecond, + timeMinute, + timeHour, + timeDay, + timeWeek, + timeMonth, + timeYear +} from 'd3-time'; + export { default as Smartlabel } from 'fusioncharts-smartlabel'; -export { dataSelect, DataObject } from './DataSystem'; +export { dataSelect } from './DataSystem'; export { default as LifeCycleManager } from './lifecycle-manager'; -export { DimensionSubtype, FieldType, MeasureSubtype, DateTimeFormatter } from 'datamodel'; +export { + DimensionSubtype, + FieldType, + MeasureSubtype, + DateTimeFormatter, + DM_DERIVATIVES, + GROUP_BY_FUNCTIONS +} from 'datamodel'; diff --git a/packages/muze/README.md b/packages/muze/README.md index a35004d7..0748cc49 100644 --- a/packages/muze/README.md +++ b/packages/muze/README.md @@ -36,8 +36,8 @@ Muze uses an in-browser [DataModel](https://github.com/chartshq/datamodel) to st Insert the muze build and the required CSS into the ``: ```html - - + + ``` ### NPM @@ -127,21 +127,21 @@ canvas .mount("#chart"); // Specify an element to mount on using a CSS selector ``` -See [charts.com/muze/docs](https://www.charts.com/muze/docs) for more documentation! +See [muzejs.org/docs](https://muzejs.org/docs) for more documentation! You also can checkout our Yeoman Generator [generator-muze](https://github.com/chartshq/generator-muze) to try out the **muze** through a boilerplate app. ## Documentation -You can find detailed tutorials, concepts and API references at [charts.com/muze/docs](https://www.charts.com/muze/docs). +You can find detailed tutorials, concepts and API references at [muzejs.org/docs](https://muzejs.org/docs). ## Support -Please raise a [Github issue](https://github.com/chartshq/muze/issues/new), or contact us at [muze@charts.com](mailto:muze@charts.com). +Please raise a Github issue [here](https://github.com/chartshq/muze/issues/new). ## Roadmap -Please contribute to our public wishlist or upvote an existing feature at [Muze Public Wishlist & Roadmap](https://feedback.muze.charts.com) +Please contribute to our public wishlist or upvote an existing feature at [Muze Public Wishlist & Roadmap](https://feedback.muzejs.org) ## Contributing diff --git a/packages/muze/npm/LICENSE b/packages/muze/npm/LICENSE index 357d69fe..3deb8988 100644 --- a/packages/muze/npm/LICENSE +++ b/packages/muze/npm/LICENSE @@ -1,8 +1,6 @@ -##MuzeJS License - MIT License -Copyright (c) 2019 Charts.com +Copyright (c) 2019 MuzeJS.org Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/packages/muze/npm/README.md b/packages/muze/npm/README.md index a35004d7..0748cc49 100644 --- a/packages/muze/npm/README.md +++ b/packages/muze/npm/README.md @@ -36,8 +36,8 @@ Muze uses an in-browser [DataModel](https://github.com/chartshq/datamodel) to st Insert the muze build and the required CSS into the ``: ```html - - + + ``` ### NPM @@ -127,21 +127,21 @@ canvas .mount("#chart"); // Specify an element to mount on using a CSS selector ``` -See [charts.com/muze/docs](https://www.charts.com/muze/docs) for more documentation! +See [muzejs.org/docs](https://muzejs.org/docs) for more documentation! You also can checkout our Yeoman Generator [generator-muze](https://github.com/chartshq/generator-muze) to try out the **muze** through a boilerplate app. ## Documentation -You can find detailed tutorials, concepts and API references at [charts.com/muze/docs](https://www.charts.com/muze/docs). +You can find detailed tutorials, concepts and API references at [muzejs.org/docs](https://muzejs.org/docs). ## Support -Please raise a [Github issue](https://github.com/chartshq/muze/issues/new), or contact us at [muze@charts.com](mailto:muze@charts.com). +Please raise a Github issue [here](https://github.com/chartshq/muze/issues/new). ## Roadmap -Please contribute to our public wishlist or upvote an existing feature at [Muze Public Wishlist & Roadmap](https://feedback.muze.charts.com) +Please contribute to our public wishlist or upvote an existing feature at [Muze Public Wishlist & Roadmap](https://feedback.muzejs.org) ## Contributing diff --git a/packages/muze/npm/dist/muze.js b/packages/muze/npm/dist/muze.js index b5814602..dfc68d8d 100644 --- a/packages/muze/npm/dist/muze.js +++ b/packages/muze/npm/dist/muze.js @@ -1,2 +1,2 @@ -!function webpackUniversalModuleDefinition(root,factory){"object"==typeof exports&&"object"==typeof module?module.exports=factory():"function"==typeof define&&define.amd?define("muze",[],factory):"object"==typeof exports?exports.muze=factory():root.muze=factory()}(window,function(){return function(modules){var installedModules={};function __webpack_require__(moduleId){if(installedModules[moduleId])return installedModules[moduleId].exports;var module=installedModules[moduleId]={i:moduleId,l:!1,exports:{}};return modules[moduleId].call(module.exports,module,module.exports,__webpack_require__),module.l=!0,module.exports}return __webpack_require__.m=modules,__webpack_require__.c=installedModules,__webpack_require__.d=function(exports,name,getter){__webpack_require__.o(exports,name)||Object.defineProperty(exports,name,{enumerable:!0,get:getter})},__webpack_require__.r=function(exports){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(exports,"__esModule",{value:!0})},__webpack_require__.t=function(value,mode){if(1&mode&&(value=__webpack_require__(value)),8&mode)return value;if(4&mode&&"object"==typeof value&&value&&value.__esModule)return value;var ns=Object.create(null);if(__webpack_require__.r(ns),Object.defineProperty(ns,"default",{enumerable:!0,value:value}),2&mode&&"string"!=typeof value)for(var key in value)__webpack_require__.d(ns,key,function(key){return value[key]}.bind(null,key));return ns},__webpack_require__.n=function(module){var getter=module&&module.__esModule?function getDefault(){return module.default}:function getModuleExports(){return module};return __webpack_require__.d(getter,"a",getter),getter},__webpack_require__.o=function(object,property){return Object.prototype.hasOwnProperty.call(object,property)},__webpack_require__.p="",__webpack_require__(__webpack_require__.s=7)}([function(module,exports,__webpack_require__){(function(module){var __WEBPACK_AMD_DEFINE_FACTORY__,__WEBPACK_AMD_DEFINE_ARRAY__,__WEBPACK_AMD_DEFINE_RESULT__;function _typeof(obj){return(_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}!function(e,t){"object"==_typeof(exports)&&"object"==_typeof(module)?module.exports=t():(__WEBPACK_AMD_DEFINE_ARRAY__=[],void 0===(__WEBPACK_AMD_DEFINE_RESULT__="function"==typeof(__WEBPACK_AMD_DEFINE_FACTORY__=t)?__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports,__WEBPACK_AMD_DEFINE_ARRAY__):__WEBPACK_AMD_DEFINE_FACTORY__)||(module.exports=__WEBPACK_AMD_DEFINE_RESULT__))}(window,function(){return function(e){var t={};function n(r){if(t[r])return t[r].exports;var a=t[r]={i:r,l:!1,exports:{}};return e[r].call(a.exports,a,a.exports,n),a.l=!0,a.exports}return n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==_typeof(e)&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var a in e)n.d(r,a,function(t){return e[t]}.bind(null,a));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=1)}([function(e){e.exports={name:"datamodel",description:"Relational algebra compliant in-memory tabular data store",homepage:"https://github.com/chartshq/datamodel",version:"2.1.0",license:"MIT",main:"dist/datamodel.js",author:"Charts.com ",keywords:["datamodel","data","relational","algebra","model","muze","fusioncharts","table","tabular","operation"],repository:{type:"git",url:"https://github.com/chartshq/datamodel.git"},contributors:[{name:"Akash Goswami",email:"akash@charts.com"},{name:"Subhash Haldar",email:"subhash@charts.com"},{name:"Rousan Ali",email:"rousan@charts.com",url:"https://rousan.io"},{name:"Ujjal Kumar Dutta",email:"ujjal@charts.com"}],dependencies:{"d3-dsv":"^1.0.8"},devDependencies:{"babel-cli":"6.26.0","babel-core":"^6.26.3","babel-eslint":"6.1.2","babel-loader":"^7.1.4","babel-plugin-transform-runtime":"^6.23.0","babel-preset-env":"^1.7.0","babel-preset-es2015":"^6.24.1","babel-preset-flow":"^6.23.0",chai:"3.5.0","cross-env":"^5.0.5",eslint:"3.19.0","eslint-config-airbnb":"15.1.0","eslint-plugin-import":"2.7.0","eslint-plugin-jsx-a11y":"5.1.1","eslint-plugin-react":"7.3.0","istanbul-instrumenter-loader":"^3.0.0",jsdoc:"3.5.5",json2yaml:"^1.1.0",karma:"1.7.1","karma-chai":"0.1.0","karma-chrome-launcher":"2.1.1","karma-coverage-istanbul-reporter":"^1.3.0","karma-mocha":"1.3.0","karma-spec-reporter":"0.0.31","karma-webpack":"2.0.3",marked:"^0.5.0",mocha:"3.4.2","mocha-webpack":"0.7.0","transform-runtime":"0.0.0",webpack:"^4.12.0","webpack-cli":"^3.0.7","webpack-dev-server":"^3.1.4"},scripts:{test:"npm run lint && npm run ut",ut:"karma start karma.conf.js",utd:"karma start --single-run false --browsers Chrome karma.conf.js ",build:"webpack --mode production",start:"webpack-dev-server --config webpack.config.dev.js --mode development --open",lint:"eslint ./src","lint-errors":"eslint --quiet ./src",docs:"rm -rf yaml && mkdir yaml && jsdoc -c jsdoc.conf.json"}}},function(e,t,n){var r=n(2);e.exports=r.default?r.default:r},function(e,t,n){"use strict";n.r(t);var r={};n.r(r),n.d(r,"DataFormat",function(){return o}),n.d(r,"DimensionSubtype",function(){return u}),n.d(r,"MeasureSubtype",function(){return c}),n.d(r,"FieldType",function(){return f}),n.d(r,"FilteringMode",function(){return l});var a={};n.r(a),n.d(a,"DSVArr",function(){return Ge}),n.d(a,"DSVStr",function(){return tt}),n.d(a,"FlatJSON",function(){return nt}),n.d(a,"Auto",function(){return rt});var i={};n.r(i),n.d(i,"sum",function(){return jt}),n.d(i,"avg",function(){return St}),n.d(i,"min",function(){return Nt}),n.d(i,"max",function(){return kt}),n.d(i,"first",function(){return Ft}),n.d(i,"last",function(){return Dt}),n.d(i,"count",function(){return Tt}),n.d(i,"sd",function(){return Rt});var o={FLAT_JSON:"FlatJSON",DSV_STR:"DSVStr",DSV_ARR:"DSVArr",AUTO:"Auto"},u={CATEGORICAL:"categorical",TEMPORAL:"temporal",GEO:"geo",BINNED:"binned"},c={CONTINUOUS:"continuous"},f={MEASURE:"measure",DIMENSION:"dimension"},l={NORMAL:"normal",INVERSE:"inverse",ALL:"all"};function s(e){return e instanceof Date?e:new Date(e)}function d(e){return e<10?"0"+e:e}function p(e){this.format=e,this.dtParams=void 0,this.nativeDate=void 0}RegExp.escape=function(e){return e.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&")},p.TOKEN_PREFIX="%",p.DATETIME_PARAM_SEQUENCE={YEAR:0,MONTH:1,DAY:2,HOUR:3,MINUTE:4,SECOND:5,MILLISECOND:6},p.defaultNumberParser=function(e){return function(t){var n;return isFinite(n=parseInt(t,10))?n:e}},p.defaultRangeParser=function(e,t){return function(n){var r,a=void 0;if(!n)return t;var i=n.toLowerCase();for(a=0,r=e.length;aa.getFullYear()&&(t=""+(i-1)+r),s(t).getFullYear()},formatter:function formatter(e){var t=s(e).getFullYear().toString(),n=void 0;return t&&(n=t.length,t=t.substring(n-2,n)),t}},Y:{name:"Y",index:0,extract:function extract(){return"(\\d{4})"},parser:p.defaultNumberParser(),formatter:function formatter(e){return s(e).getFullYear().toString()}}}},p.getTokenFormalNames=function(){var e=p.getTokenDefinitions();return{HOUR:e.H,HOUR_12:e.l,AMPM_UPPERCASE:e.p,AMPM_LOWERCASE:e.P,MINUTE:e.M,SECOND:e.S,SHORT_DAY:e.a,LONG_DAY:e.A,DAY_OF_MONTH:e.e,DAY_OF_MONTH_CONSTANT_WIDTH:e.d,SHORT_MONTH:e.b,LONG_MONTH:e.B,MONTH_OF_YEAR:e.m,SHORT_YEAR:e.y,LONG_YEAR:e.Y}},p.tokenResolver=function(){var e=p.getTokenDefinitions(),t=function t(){for(var e=0,t=void 0,n=void 0,r=arguments.length;e=0;)o=e[i+1],-1!==r.indexOf(o)&&a.push({index:i,token:o});return a},p.formatAs=function(e,t){var n,r=s(e),a=p.findTokens(t),i=p.getTokenDefinitions(),o=String(t),u=p.TOKEN_PREFIX,c=void 0,f=void 0,l=void 0;for(l=0,n=a.length;l=0;d--)(f=i[d].index)+1!==s.length-1?(void 0===u&&(u=s.length),l=s.substring(f+2,u),s=s.substring(0,f+2)+RegExp.escape(l)+s.substring(u,s.length),u=f):u=f;for(d=0;d0&&e.split(",").forEach(function(e){var n=e.split("-"),r=+n[0],a=+(n[1]||n[0]);if(a>=r)for(var i=r;i<=a;i+=1)t(i)})}var T=function(){function e(e,t){for(var n=0;n3&&void 0!==arguments[3]&&arguments[3],a=arguments.length>4&&void 0!==arguments[4]?arguments[4]:J.CROSS,i=[],o=[],u=n||K,c=e.getFieldspace(),f=t.getFieldspace(),l=c.name,s=f.name,d=c.name+"."+f.name,p=C(c,f);if(l===s)throw new Error("DataModels must have different alias names");return c.fields.forEach(function(e){var t=_({},e.schema());-1===p.indexOf(t.name)||r||(t.name=c.name+"."+t.name),i.push(t)}),f.fields.forEach(function(e){var t=_({},e.schema());-1!==p.indexOf(t.name)?r||(t.name=f.name+"."+t.name,i.push(t)):i.push(t)}),D(e._rowDiffset,function(n){var d=!1,h=void 0;D(t._rowDiffset,function(v){var m=[],y={};y[l]={},y[s]={},c.fields.forEach(function(e){m.push(e.partialField.data[n]),y[l][e.name()]=e.partialField.data[n]}),f.fields.forEach(function(e){-1!==p.indexOf(e.schema().name)&&r||m.push(e.partialField.data[v]),y[s][e.name()]=e.partialField.data[v]});var g=ot(y[l]),b=ot(y[s]);if(u(g,b,function(){return e.detachedRoot()},function(){return t.detachedRoot()},{})){var w={};m.forEach(function(e,t){w[i[t].name]=e}),d&&J.CROSS!==a?o[h]=w:(o.push(w),d=!0,h=n)}else if((a===J.LEFTOUTER||a===J.RIGHTOUTER)&&!d){var _={},O=c.fields.length-1;m.forEach(function(e,t){_[i[t].name]=t<=O?e:null}),d=!0,h=n,o.push(_)}})}),new At(o,i,{name:d})}function z(e,t){var n=""+e,r=""+t;return nr?1:0}function q(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:z;return e.length>1&&function e(t,n,r,a){if(r===n)return t;var i=n+Math.floor((r-n)/2);return e(t,n,i,a),e(t,i+1,r,a),function(e,t,n,r,a){for(var i=e,o=[],u=t;u<=r;u+=1)o[u]=i[u];for(var c=t,f=n+1,l=t;l<=r;l+=1)c>n?(i[l]=o[f],f+=1):f>r?(i[l]=o[c],c+=1):a(o[c],o[f])<=0?(i[l]=o[c],c+=1):(i[l]=o[f],f+=1)}(t,n,i,r,a),t}(e,0,e.length-1,t),e}function X(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);ti?"desc"===t?-1:1:0}}return r}function Q(e,t){var n=new Map,r=[];return e.forEach(function(e){var a=e[t];n.has(a)?r[n.get(a)][1].push(e):(r.push([a,[e]]),n.set(a,r.length-1))}),r}function Z(e,t,n){var r={label:e[0]};return t.reduce(function(t,r,a){return t[r]=e[1].map(function(e){return e[n[a].index]}),t},r),r}function te(e,t){var n={},r=[],a=[],i=[],o=e.getFieldspace(),u=t.getFieldspace(),c=o.fieldsObj(),f=u.fieldsObj(),l=o.name+" union "+u.name;if(!A(e._colIdentifier.split(",").sort(),t._colIdentifier.split(",").sort()))return null;function s(e,t,r){D(e._rowDiffset,function(e){var o={},u="";a.forEach(function(n){var r=t[n].partialField.data[e];u+="-"+r,o[n]=r}),n[u]||(r&&i.push(o),n[u]=!0)})}return e._colIdentifier.split(",").forEach(function(e){var t=c[e];r.push(_({},t.schema())),a.push(t.schema().name)}),s(t,f,!1),s(e,c,!0),new At(i,r,{name:l})}function ne(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);tn&&(n=a))}),[t,n]}}]),t}(),Te=function(){function e(e,t){for(var n=0;n=i?c=!0:(r=e.charCodeAt(o++))===qe?f=!0:r===Xe&&(f=!0,e.charCodeAt(o)===qe&&++o),e.slice(a+1,t-1).replace(/""/g,'"')}for(;o2&&void 0!==arguments[2]?arguments[2]:{},a=arguments[3],i=void 0;t!==H?(i={op:t,meta:r,criteria:a},e._derivation.push(i)):(i=[].concat(it(a)),e._derivation.length=0,(n=e._derivation).push.apply(n,it(i)))},lt=function lt(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r=n.operation||"and",a=n.filterByMeasure||!1,i=[];i=t.length?t.map(function(e){return n=(t=e).getData(),r=n.schema,i=t.getFieldsConfig(),o=t.getFieldspace().fieldsObj(),u=n.data,c=Object.values(i).reduce(function(e,t){return e[t.def.name]=o[t.def.name].domain(),e},{}),function(e){return!!u.length&&u.some(function(t){return r.every(function(n){if(!(n.name in e))return!0;var r=e[n.name].valueOf();if(a&&n.type===f.MEASURE)return r>=c[n.name][0]&&r<=c[n.name][1];if(n.type!==f.DIMENSION)return!0;var o=i[n.name].index;return t[o]===e[n.name].valueOf()})})};var t,n,r,i,o,u,c}):[function(){return!1}];return"and"===r?e.clone(!1,!1).select(function(e){return i.every(function(t){return t(e)})},{saveChild:!1,mode:l.ALL}):e.clone(!1,!1).select(function(e){return i.some(function(t){return t(e)})},{mode:l.ALL,saveChild:!1})},st=function st(e,t,n,r){var a=e.clone(r.saveChild),i=function ft(e,t,n,r,a){var i=[],o=-1,u=r.mode,c=void 0,f={},s=function s(){return a.detachedRoot()},d=function d(e){return n(function(e,t){var n={},r=!0,a=!1,i=void 0;try{for(var o,u=e[Symbol.iterator]();!(r=(o=u.next()).done);r=!0){var c=o.value;n[c.name()]=new F(c.partialField.data[t],c)}}catch(e){a=!0,i=e}finally{try{!r&&u.return&&u.return()}finally{if(a)throw i}}return n}(t,e),e,s,f)},p=void 0;return p=u===l.INVERSE?function(e){return!d(e)}:function(e){return d(e)},D(e,function(e){p(e)&&(-1!==o&&e===o+1?(c=i.length-1,i[c]=i[c].split("-")[0]+"-"+e):i.push(""+e),o=e)}),i.join(",")}(a._rowDiffset,a.getPartialFieldspace().fields,t,n,e);return a._rowDiffset=i,a.__calculateFieldspace().calculateFieldsConfig(),ct(a,L,{config:n},t),a},dt=function dt(e,t,n,r){var a=e.clone(n.saveChild),i=t;return n.mode===l.INVERSE&&(i=r.filter(function(e){return-1===t.indexOf(e)})),a._colIdentifier=i.join(","),a.__calculateFieldspace().calculateFieldsConfig(),ct(a,U,{projField:t,config:n,actualProjField:i},null),a},pt=function pt(e){if((e=_({},e)).type||(e.type=f.DIMENSION),!e.subtype)switch(e.type){case f.MEASURE:e.subtype=c.CONTINUOUS;break;default:case f.DIMENSION:e.subtype=u.CATEGORICAL}return e},ht=function ht(e,t,n,r){n=n.map(function(e){return pt(e)}),r=Object.assign(Object.assign({},Je),r);var i=a[r.dataFormat];if(!i||"function"!=typeof i)throw new Error("No converter function found for "+r.dataFormat+" format");var u=i(t,r),c=at(u,2),f=c[0],l=c[1],s=Be(l,n,f),d=N.createNamespace(s,r.name);return e._partialFieldspace=d,e._rowDiffset=l.length&&l[0].length?"0-"+(l[0].length-1):"",e._colIdentifier=n.map(function(e){return e.name}).join(),e._dataFormat=r.dataFormat===o.AUTO?S(t):r.dataFormat,e},vt=function vt(e,t){for(var n=0;n2&&void 0!==arguments[2]?arguments[2]:{},a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},i=a.nonTraversingModel,o=a.excludeModels||[];t!==i&&((!o.length||-1===o.indexOf(t))&&t.handlePropagation(n,r),t._children.forEach(function(t){var i=mt(n,t),o=at(i,2),u=o[0],c=o[1];e(t,[u,c],r,a)}))},bt=function bt(e,t,n,r){var a=void 0,i=void 0,o=n.propagationNameSpace,u=n.propagateToSource,c=n.sourceId,f=r.propagateInterpolatedValues,l=[];if(null===e&&!0!==r.persistent)l=[{criteria:[]}];else{var s,d=Object.values(o.mutableActions);!1!==u&&(d=d.filter(function(e){return e.config.sourceId!==c}));var p=d.filter(function(e){return(r.filterFn||function(){return!0})(e,r)}).map(function(e){return e.config.criteria}),h=[];if(!1!==u){var v=Object.values(o.mutableActions);v.forEach(function(e){var t=e.config;!1===t.applyOnSource&&t.action===r.action&&t.sourceId!==c&&(h.push(e.model),(a=v.filter(function(t){return t!==e}).map(function(e){return e.config.criteria})).length&&l.push({criteria:a,models:e.model,path:function gt(e){for(var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];e._parent;)t.push(e),e=e._parent;return t}(e.model)}))})}a=(s=[]).concat.apply(s,[].concat(it(p),[e])).filter(function(e){return null!==e}),l.push({criteria:a,excludeModels:[].concat(h,it(r.excludeModels||[]))})}var m=t.model,y=Object.assign({sourceIdentifiers:e,propagationSourceId:c},r),g=t.groupByModel;f&&g&&(i=lt(g,a,{filterByMeasure:f}),yt(g,i,y)),l.forEach(function(e){var t=lt(m,e.criteria),n=e.path;if(n){var r=function(e,t){for(var n=0,r=t.length;n0&&void 0!==arguments[0])||arguments[0],t=void 0;if(!1===(!(arguments.length>1&&void 0!==arguments[1])||arguments[1])){var n=this.getData({getAllFields:!0}),r=n.data,a=n.schema,i=r.map(function(e){var t={};return a.forEach(function(n,r){t[n.name]=e[r]}),t});t=new this.constructor(i,a)}else t=new this.constructor(this);return e&&this._children.push(t),t}},{key:"project",value:function value(e,t){var n={mode:l.NORMAL,saveChild:!0};t=Object.assign({},n,t);var r=this.getFieldsConfig(),a=Object.keys(r),i=t.mode,o=e.reduce(function(e,t){return"RegExp"===t.constructor.name?e.push.apply(e,function(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t1&&void 0!==arguments[1]?arguments[1]:[];ct(this,H,null,t),this._parent=e,e._children.push(this)}},{key:"getParent",value:function value(){return this._parent}},{key:"getChildren",value:function value(){return this._children}},{key:"getDerivations",value:function value(){return this._derivation}}]),e}(),Ot=function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function(e,t){var n=[],r=!0,a=!1,i=void 0;try{for(var o,u=e[Symbol.iterator]();!(r=(o=u.next()).done)&&(n.push(o.value),!t||n.length!==t);r=!0);}catch(e){a=!0,i=e}finally{try{!r&&u.return&&u.return()}finally{if(a)throw i}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")},Et=function(){function e(e,t){for(var n=0;n0,c=[];if(n.split(",").forEach(function(t){for(var n=0;n=0;u--)a=t[u][0],i=t[u][1],(o=vt(r,a))&&("function"==typeof i?q(n,function(e,t){return i(e[o.index],t[o.index])}):O(i)?function(){var e=Q(n,o.index),t=i[i.length-1],a=i.slice(0,i.length-1),u=a.map(function(e){return vt(r,e)});e.forEach(function(e){e.push(Z(e,a,u))}),q(e,function(e,n){var r=e[2],a=n[2];return t(r,a)}),n.length=0,e.forEach(function(e){n.push.apply(n,X(e[1]))})}():(i="desc"===String(i).toLowerCase()?"desc":"asc",q(n,$(o.type,i,o.index))));e.uids=[],n.forEach(function(t){e.uids.push(t.pop())})}(i,r),a.columnWise){var f=Array.apply(void 0,X(Array(i.schema.length))).map(function(){return[]});i.data.forEach(function(e){e.forEach(function(e,t){f[t].push(e)})}),i.data=f}return i}.call(this,this.getPartialFieldspace().fields,this._rowDiffset,e.getAllFields?t.map(function(e){return e.name()}).join():this._colIdentifier,e.sort,{columnWise:"column"===e.order,addUid:!!e.withUid});if(!e.formatter)return n;var r=e.formatter,a=n.data,i=n.schema,o=n.uids,u=i.map(function(e){return e.name}),c=Object.keys(r).reduce(function(e,t){var n=u.indexOf(t);return-1!==n&&e.push([n,r[t]]),e},[]);return"column"===e.order?c.forEach(function(e){var t=e[0],n=e[1];a[t].forEach(function(e,r){a[t][r]=n.call(void 0,e,o[r],i[t])})}):a.forEach(function(e,t){c.forEach(function(n){var r=n[0],a=n[1];e[r]=a.call(void 0,e[r],o[t],i[r])})}),n}},{key:"groupBy",value:function value(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{saveChild:!0},r=""+e.join(),i=function de(e,t,n,r){var a=function(e,t){var n=[],r=e.getFieldspace().getDimension();return Object.entries(r).forEach(function(e){var r=se(e,1)[0];t&&t.length?-1!==t.indexOf(r)&&n.push(r):n.push(r)}),n}(e,t),i=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n={},r=e.getFieldspace().getMeasure(),a=le.defaultReducer();return Object.keys(r).forEach(function(e){"string"!=typeof t[e]&&(t[e]=r[e].defAggFn());var i=le.resolve(t[e]);i?n[e]=i:(n[e]=a,t[e]=ue)}),n}(e,n),o=e.getFieldspace(),u=o.fieldsObj(),c=o.name,l=[],s=[],d=[],p={},h=[],v=void 0;Object.entries(u).forEach(function(e){var t=se(e,2),n=t[0],r=t[1];if(-1!==a.indexOf(n)||i[n])switch(d.push(_({},r.schema())),r.schema().type){case f.MEASURE:s.push(n);break;default:case f.DIMENSION:l.push(n)}});var m=0;D(e._rowDiffset,function(e){var t="";l.forEach(function(n){t=t+"-"+u[n].partialField.data[e]}),void 0===p[t]?(p[t]=m,h.push({}),l.forEach(function(t){h[m][t]=u[t].partialField.data[e]}),s.forEach(function(t){h[m][t]=[u[t].partialField.data[e]]}),m+=1):s.forEach(function(n){h[p[t]][n].push(u[n].partialField.data[e])})});var y={},g=function g(){return e.detachedRoot()};return h.forEach(function(e){var t=e;s.forEach(function(n){t[n]=i[n](e[n],g,y)})}),r?(r.__calculateFieldspace(),v=r):v=new Mt(h,d,{name:c}),v}.apply(void 0,[this,e,t]);return ct(i,V,{fieldsArr:e,groupByString:r,defaultReducer:le.defaultReducer()},t),n.saveChild&&this._children.push(i),i._parent=this,i}},{key:"sort",value:function value(e){var t=this.getData({order:"row",sort:e}),n=[t.schema.map(function(e){return e.name})].concat(t.data),r=new this.constructor(n,t.schema,{dataFormat:"DSVArr"});return r._sortingDetails=e,r}},{key:"serialize",value:function value(e,t){e=e||this._dataFormat,t=Object.assign({},{fieldSeparator:","},t);var n=this.getFieldspace().fields,r=n.map(function(e){return e.formattedData()}),a=r[0].length,i=void 0,u=void 0,c=void 0;if(e===o.FLAT_JSON)for(i=[],u=0;u=0&&(n.fields[r]=e)}else n.fields.push(e);return n._cachedFieldsObj=null,n._cachedDimension=null,n._cachedMeasure=null,this.__calculateFieldspace().calculateFieldsConfig(),this}},{key:"calculateVariable",value:function value(e,t,n){var r=this;e=pt(e),n=Object.assign({},{saveChild:!0,replaceVar:!1},n);var a=this.getFieldsConfig(),i=t.slice(0,t.length-1),o=t[t.length-1];if(a[e.name]&&!n.replaceVar)throw new Error(e.name+" field already exists in datamodel");var u=i.map(function(e){var t=a[e];if(!t)throw new Error(e+" is not a valid column name.");return t.index}),c=this.clone(),f=c.getFieldspace().fields,l=u.map(function(e){return f[e]}),s={},d=function d(){return r.detachedRoot()},p=[];D(c._rowDiffset,function(e){var t=l.map(function(t){return t.partialField.data[e]});p[e]=o.apply(void 0,function(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t1&&void 0!==arguments[1]?arguments[1]:{},n=arguments[2],r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},a=t.isMutableAction,i=t.sourceId,o=t.payload,u=function(e){for(;e._parent;)e=e._parent;return e}(this),c=u._propagationNameSpace,f={groupByModel:function e(t){return t._parent&&t._derivation.find(function(e){return"group"!==e.op})?e(t._parent):t}(this),model:u};return n&&function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments[2],r=void 0,a=t.isMutableAction,i=t.criteria,o=t.action+"-"+t.sourceId;r=a?e.mutableActions:e.immutableActions,null===i?delete r[o]:r[o]={model:n,config:t}}(c,t,this),bt(e,f,{propagationNameSpace:c,sourceId:i},Object.assign({payload:o},t)),a&&function(e,t,n){var r=e.immutableActions;for(var a in r){var i=r[a].config,o=n.config.sourceId,u=!n.propConfig.filterImmutableAction||n.propConfig.filterImmutableAction(i,n.config);if(i.sourceId!==o&&u){var c=i.criteria;bt(c,t,{propagationNameSpace:e,propagateToSource:!1,sourceId:o},i)}}}(c,f,{config:t,propConfig:r}),this}},{key:"on",value:function value(e,t){switch(e){case"propagation":this._onPropagation.push(t)}return this}},{key:"unsubscribe",value:function value(e){switch(e){case"propagation":this._onPropagation=[]}return this}},{key:"handlePropagation",value:function value(e,t){var n=this;this._onPropagation.forEach(function(r){return r.call(n,e,t)})}},{key:"bin",value:function value(e,t){var n=this.getFieldsConfig();if(!n[e])throw new Error("Field "+e+" doesn't exist");var r=t.name||e+"_binned";if(n[r])throw new Error("Field "+r+" already exists");var a=function(e,t,n){var r=n.buckets,a=n.binsCount,i=n.binSize,o=n.start,u=n.end,c=e.domain(),f=M(c,2),l=f[0],s=f[1];r||(o=0!==o&&(!o||o>l)?l:o,u=0!==u&&(!u||ul&&r.unshift(l),r[r.length-1]<=s&&r.push(s+1);for(var d=[],p=0;p=(i=e[a=n+Math.floor((r-n)/2)]).start&&t=i.end?n=a+1:t1&&void 0!==arguments[1]?arguments[1]:{saveChild:!0}).saveChild;return t.forEach(function(e){r=e(r),i.push.apply(i,function(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t1&&a.dispose(),r}},bin:function bin(){for(var e=arguments.length,t=Array(e),n=0;n2?(i=arguments.length<=0?void 0:arguments[0],n=arguments.length<=1?void 0:arguments[1],o=arguments.length<=2?void 0:arguments[2]):(i=null,n=arguments.length<=0?void 0:arguments[0],o=arguments.length<=1?void 0:arguments[1]),t=o(y),(e=r=new _(t.fn)).addDependencies.apply(e,P(t.dependencies)),this._addPropInModel(i,function(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}({},n,r)),this}},{key:"_addPropInModel",value:function value(e,t){return this._graph.createNodesFrom(t,e),this}},{key:"on",value:function value(e,t,r){var n,i=e instanceof Array?e:[e],o=this._graph.createElectricNodeOf(i,{type:"CurrFrame",fn:t});return r&&(n=this._graph.stopPropagation().setPropagationOverride("nextFrame")).resetNodeValue.apply(n,P(e)),o}},{key:"next",value:function value(e,t,r){var n,i=e instanceof Array?e:[e],o=this._graph.createElectricNodeOf(i,{type:"NextFrame",fn:t});return r&&(n=this._graph.stopPropagation().setPropagationOverride("currentFrame")).resetNodeValue.apply(n,P(e)),o}},{key:"lock",value:function value(){return this._lockFlag=!0,this._reqQ.length=0,this}},{key:"unlock",value:function value(){return this._lockFlag=!1,this.setProp.apply(this,P(this._reqQ)),this._reqQ.length=0,this}},{key:"prop",value:function value(){var e,t=void 0,r=void 0;switch(e=arguments.length){case 1:t=arguments.length<=0?void 0:arguments[0];break;case 2:t=arguments.length<=0?void 0:arguments[0],r=arguments.length<=1?void 0:arguments[1];break;default:return this}return 2===e?(this._lockFlag?this._reqQ.push([t,r]):this.setProp([t,r]),this):this._graph.getNodeValue(t)}},{key:"setProp",value:function value(){for(var e,t=this,r=arguments.length,n=Array(r),i=0;i/gi),smartlabel},SmartLabelManager.store={},SmartLabelManager.prototype._calCharDimWithCache=function(text,calculateDifference,length){if(!this._init)return!1;var size,csArr,tw,twi,cachedStyle,asymmetricDifference,maxAdvancedCacheLimit=this.options.maxCacheLimit,container=this._container,style=this.style||{},cache=this._advancedCache||(this._advancedCache={}),advancedCacheKey=this._advancedCacheKey||(this._advancedCacheKey=[]),cacheName=text+(style.fontSize||"")+(style.fontFamily||"")+(style.fontWeight||"")+(style.fontStyle||""),cacheInitName=text+"init"+(style.fontSize||"")+(style.fontFamily||"")+(style.fontWeight||"")+(style.fontStyle||"");return htmlSplCharSpace[text]&&(text=htmlSplCharSpace[text]),calculateDifference?void 0===(asymmetricDifference=cache[cacheInitName])&&(container.innerHTML=text.repeat?text.repeat(length):Array(length+1).join(text),tw=container.offsetWidth,container.innerHTML=text,twi=container.offsetWidth,asymmetricDifference=cache[cacheInitName]=(tw-length*twi)/(length+1),advancedCacheKey.push(cacheInitName),advancedCacheKey.length>maxAdvancedCacheLimit&&delete cache[advancedCacheKey.shift()]):asymmetricDifference=0,(cachedStyle=cache[cacheName])?(csArr=cachedStyle.split(","),{width:parseFloat(csArr[0],10),height:parseFloat(csArr[1],10)}):(container.innerHTML=text,size={height:container.offsetHeight,width:container.offsetWidth+asymmetricDifference},cache[cacheName]=size.width+","+size.height,advancedCacheKey.push(cacheName),advancedCacheKey.length>maxAdvancedCacheLimit&&delete cache[advancedCacheKey.shift()],size)},SmartLabelManager.prototype._getWidthFn=function(){var contObj=this._containerObj,container=this._container,svgText=contObj.svgText;return svgText?function(str){var bbox,width;return svgText.textContent=str,(width=(bbox=svgText.getBBox()).width-SVG_BBOX_CORRECTION)<1&&(width=bbox.width),width}:function(str){return container.innerHTML=str,container.offsetWidth}},SmartLabelManager.prototype.setStyle=function(style){return this._init?style!==this.style||this._styleNotSet?(style||(style=this.style),slLib.setLineHeight(style),this.style=style,this._containerObj=sCont=this._containerManager.get(style),this._containerObj?(this._container=sCont.node,this._context=sCont.context,this._cache=sCont.charCache,this._lineHeight=sCont.lineHeight,this._styleNotSet=!1):this._styleNotSet=!0,this):void 0:this;var sCont},SmartLabelManager.prototype.useEllipsesOnOverflow=function(useEllipses){return this._init?(this._showNoEllipses=!useEllipses,this):this},SmartLabelManager.prototype.getSmartText=function(text,maxWidth,maxHeight,noWrap){if(!this._init)return!1;void 0===text||null===text?text="":"string"!=typeof text&&(text=text.toString());var len,trimStr,tempArr,tmpText,maxWidthWithEll,toolText,oriWidth,oriHeight,newCharIndex,nearestChar,tempChar,getWidth,initialLeft,initialTop,getOriSizeImproveObj,spanArr,x,y,minWidth,elem,chr,elemRightMostPoint,elemLowestPoint,lastBR,removeFromIndex,removeFromIndexForEllipses,hasHTMLTag=!1,maxStrWidth=0,lastDash=-1,lastSpace=-1,lastIndexBroken=-1,strWidth=0,strHeight=0,oriTextArr=[],i=0,ellipsesStr=this._showNoEllipses?"":"...",lineHeight=this._lineHeight,context=this._context,container=this._container,sCont=this._containerObj,ellipsesWidth=sCont.ellipsesWidth,dotWidth=sCont.dotWidth,characterArr=[],dashIndex=-1,spaceIndex=-1,lastLineBreak=-1,fastTrim=function fastTrim(str){for(var ws=/\s/,i=(str=str.replace(/^\s\s*/,"")).length;ws.test(str.charAt(i-=1)););return str.slice(0,i+1)},smartLabel={text:text,maxWidth:maxWidth,maxHeight:maxHeight,width:null,height:null,oriTextWidth:null,oriTextHeight:null,oriText:text,isTruncated:!1};if(getWidth=this._getWidthFn(),maxHeight===lineHeight&&(maxHeight*=1.2),container){if(!documentSupport.isBrowserLess){if((hasHTMLTag=slLib.xmlTagRegEx.test(text))?(container.innerHTML=text,smartLabel.oriTextWidth=oriWidth=container.offsetWidth,smartLabel.oriTextHeight=oriHeight=container.offsetHeight):(tmpText=text.replace(slLib.ltgtRegex,function(match){return"<"===match?"<":">"}),getOriSizeImproveObj=this.getOriSize(tmpText,!0),smartLabel.oriTextWidth=oriWidth=getOriSizeImproveObj.width,smartLabel.oriTextHeight=oriHeight=getOriSizeImproveObj.height),oriHeight<=maxHeight&&oriWidth<=maxWidth)return smartLabel.width=smartLabel.oriTextWidth=oriWidth,smartLabel.height=smartLabel.oriTextHeight=oriHeight,smartLabel;if(lineHeight>maxHeight)return smartLabel.text="",smartLabel.width=smartLabel.oriTextWidth=0,smartLabel.height=smartLabel.oriTextHeight=0,smartLabel}if(text=fastTrim(text).replace(/(\s+)/g," "),maxWidthWithEll=this._showNoEllipses?maxWidth:maxWidth-ellipsesWidth,!hasHTMLTag){if(len=(oriTextArr=text.split("")).length,trimStr="",tempArr=[],tempChar=oriTextArr[0],this._cache[tempChar]?minWidth=this._cache[tempChar].width:(minWidth=getWidth(tempChar),this._cache[tempChar]={width:minWidth}),maxWidthWithEll>minWidth)i=(tempArr=text.substr(0,slLib.getNearestBreakIndex(text,maxWidthWithEll,this)).split("")).length;else{if(minWidth>maxWidth)return smartLabel.text="",smartLabel.width=smartLabel.oriTextWidth=smartLabel.height=smartLabel.oriTextHeight=0,smartLabel;ellipsesStr&&((maxWidthWithEll=maxWidth-2*dotWidth)>minWidth?ellipsesStr="..":(maxWidthWithEll=maxWidth-dotWidth)>minWidth?ellipsesStr=".":(maxWidthWithEll=0,ellipsesStr=""))}if(strWidth=getWidth(tempArr.join("")),strHeight=this._lineHeight,noWrap){for(;imaxWidthWithEll&&(trimStr||(trimStr=tempArr.slice(0,-1).join("")),strWidth>maxWidth))return smartLabel.text=fastTrim(trimStr)+ellipsesStr,smartLabel.tooltext=smartLabel.oriText,smartLabel.width=getWidth(smartLabel.text),smartLabel.height=this._lineHeight,smartLabel;return smartLabel.text=tempArr.join(""),smartLabel.width=strWidth,smartLabel.height=this._lineHeight,smartLabel}for(;imaxWidthWithEll&&(trimStr||(trimStr=tempArr.slice(0,-1).join("")),strWidth>maxWidth)){if(lastSpace=text.substr(0,tempArr.length).lastIndexOf(" "),lastDash=text.substr(0,tempArr.length).lastIndexOf("-"),lastSpace>lastIndexBroken?(strWidth=getWidth(tempArr.slice(lastIndexBroken+1,lastSpace).join("")),tempArr.splice(lastSpace,1,"
"),lastIndexBroken=lastSpace,newCharIndex=lastSpace+1):lastDash>lastIndexBroken?(lastDash===tempArr.length-1?(strWidth=getWidth(tempArr.slice(lastIndexBroken+1,lastSpace).join("")),tempArr.splice(lastDash,1,"
-")):(strWidth=getWidth(tempArr.slice(lastIndexBroken+1,lastSpace).join("")),tempArr.splice(lastDash,1,"-
")),lastIndexBroken=lastDash,newCharIndex=lastDash+1):(tempArr.splice(tempArr.length-1,1,"
"+oriTextArr[i]),lastLineBreak=tempArr.length-2,strWidth=getWidth(tempArr.slice(lastIndexBroken+1,lastLineBreak+1).join("")),lastIndexBroken=lastLineBreak,newCharIndex=i),(strHeight+=this._lineHeight)>maxHeight)return smartLabel.text=fastTrim(trimStr)+ellipsesStr,smartLabel.tooltext=smartLabel.oriText,smartLabel.width=maxWidth,smartLabel.height=strHeight-this._lineHeight,smartLabel;maxStrWidth=max(maxStrWidth,strWidth),trimStr=null,nearestChar=slLib.getNearestBreakIndex(text.substr(newCharIndex),maxWidthWithEll,this),strWidth=getWidth(text.substr(newCharIndex,nearestChar||1)),tempArr.length)/g,'$1'),container.innerHTML=text,x=0,y=(spanArr=container[documentSupport.childRetriverFn](documentSupport.childRetriverString)).length;xmaxWidth)return smartLabel.text="",smartLabel.width=smartLabel.oriTextWidth=smartLabel.height=smartLabel.oriTextHeight=0,smartLabel;if(minWidth>maxWidthWithEll&&!this._showNoEllipses&&((maxWidthWithEll=maxWidth-2*dotWidth)>minWidth?ellipsesStr="..":(maxWidthWithEll=maxWidth-dotWidth)>minWidth?ellipsesStr=".":(maxWidthWithEll=0,ellipsesStr="")),initialLeft=characterArr[0].elem.offsetLeft,initialTop=characterArr[0].elem.offsetTop,noWrap)for(;imaxWidthWithEll&&(removeFromIndexForEllipses||(removeFromIndexForEllipses=i),container.offsetWidth>maxWidth&&(removeFromIndex=i,i=len));else for(;imaxWidthWithEll?(removeFromIndexForEllipses||(removeFromIndexForEllipses=i),elemRightMostPoint>maxWidth&&(lastSpace=characterArr[i].spaceIdx,lastDash=characterArr[i].dashIdx,lastSpace>lastIndexBroken?(characterArr[lastSpace].elem.innerHTML="
",lastIndexBroken=lastSpace):lastDash>lastIndexBroken?(characterArr[lastDash].elem.innerHTML=lastDash===i?"
-":"-
",lastIndexBroken=lastDash):elem.parentNode.insertBefore(lastBR=doc.createElement("br"),elem),elem.offsetHeight+elem.offsetTop>maxHeight?(lastBR?lastBR.parentNode.removeChild(lastBR):lastIndexBroken===lastDash?characterArr[lastDash].elem.innerHTML="-":characterArr[lastSpace].elem.innerHTML=" ",removeFromIndex=i,i=len):removeFromIndexForEllipses=null)):elemLowestPoint>maxHeight&&(removeFromIndex=i,i=len);if(removeFromIndex=removeFromIndexForEllipses;i-=1)(elem=characterArr[i].elem).parentNode.removeChild(elem);for(;i>=0;i-=1)elem=characterArr[i].elem,slLib.classNameBrReg.test(elem.className)?elem.parentNode.removeChild(elem):i=0}return smartLabel.text=container.innerHTML.replace(slLib.spanRemovalRegx,"$1").replace(/\&\;/g,"&"),smartLabel.isTruncated&&(smartLabel.text+=ellipsesStr,smartLabel.tooltext=toolText),smartLabel.height=container.offsetHeight,smartLabel.width=container.offsetWidth,smartLabel}return smartLabel.error=new Error("Body Tag Missing!"),smartLabel},SmartLabelManager.prototype.getOriSize=function(text,detailedCalculationFlag){if(!this._init)return!1;var textArr,letter,lSize,i,l,cumulativeSize=0,height=0,indiSizeStore={};if(!detailedCalculationFlag)return this._calCharDimWithCache(text);for(i=0,l=(textArr=text.split("")).length;i]+?\>)|(&(?:[a-z]+|#[0-9]+);|.)/gi,spanAdditionReplacer:'$1$2',spanRemovalRegx:new RegExp("\\]+?"+classNameWithTag+"[^\\>]{0,}\\>(.*?)\\<\\/span\\>","ig"),xmlTagRegEx:new RegExp("<[^>][^<]*[^>]+>","i"),ltgtRegex:/<|>/g,brReplaceRegex://gi,testStrAvg:"WgI",parentContainerStyle:{position:"absolute",top:"-9999em",whiteSpace:"nowrap",padding:"0px",width:"1px",height:"1px",overflow:"hidden"},supportedStyle:{font:"font",fontFamily:"font-family","font-family":"font-family",fontWeight:"font-weight","font-weight":"font-weight",fontSize:"font-size","font-size":"font-size",lineHeight:"line-height","line-height":"line-height",fontStyle:"font-style","font-style":"font-style"},getDocumentSupport:function getDocumentSupport(){var childRetriverFn,childRetriverString,noClassTesting;return doc.getElementsByClassName?(childRetriverFn="getElementsByClassName",childRetriverString=classNameWithTag,noClassTesting=!0):(childRetriverFn="getElementsByTagName",childRetriverString="span",noClassTesting=!1),{isIE:/msie/i.test(userAgent)&&!win.opera,hasSVG:Boolean(win.SVGAngle||doc.implementation.hasFeature("http://www.w3.org/TR/SVG11/feature#BasicStructure","1.1")),isHeadLess:new RegExp(" HtmlUnit").test(userAgent),isWebKit:new RegExp(" AppleWebKit/").test(userAgent),childRetriverFn:childRetriverFn,childRetriverString:childRetriverString,noClassTesting:noClassTesting}},createContainer:function createContainer(containerParent){var body,container;if(containerParent&&(containerParent.offsetWidth||containerParent.offsetHeight)){if(containerParent.appendChild)return containerParent.appendChild(container=doc.createElement("DIV")),container.className=containerClass,container.setAttribute("aria-hidden","true"),container.setAttribute("role","presentation"),container}else if((body=doc.getElementsByTagName("body")[0])&&body.appendChild)return(container=doc.createElement("DIV")).className=containerClass,container.setAttribute("aria-hidden","true"),container.setAttribute("role","presentation"),1,body.appendChild(container),container},getNearestBreakIndex:function getNearestBreakIndex(text,maxWidth,sl){if(!text||!text.length)return 0;var difference,getWidth=sl._getWidthFn(),charLen=0,increment=0,oriWidth=getWidth(text),avgWidth=oriWidth/text.length;if(difference=maxWidth,charLen=ceil(maxWidth/avgWidth),oriWidthtext.length&&(difference=maxWidth-oriWidth,charLen=text.length);difference>0;){if(difference=maxWidth-getWidth(text.substr(0,charLen)),!(increment=floor(difference/avgWidth)))return charLen;charLen+=increment}for(;difference<0;){if(difference=maxWidth-getWidth(text.substr(0,charLen)),!(increment=floor(difference/avgWidth)))return charLen;charLen+=increment}return charLen},setLineHeight:function setLineHeight(styleObj){var fSize=styleObj.fontSize=styleObj.fontSize||"12px";return styleObj.lineHeight=styleObj.lineHeight||styleObj["line-height"]||1.2*parseInt(fSize,10)+"px",styleObj}}}};exports.default=lib,module.exports=exports.default},function(module){module.exports={name:"muze",private:!0,version:"1.1.0",description:"Composable visualisation library for web with a data-first approach",homepage:"https://www.charts.com/muze",license:"MIT",author:"Charts.com ",contributors:[{name:"Akash Ghoswami",email:"akash@charts.com"},{name:"Ranajit Banerjee",email:"ranajit.banerjee@charts.com",url:"https://github.com/ranajitbanerjee"},{name:"Mridul Meharia",email:"mridul@charts.com",url:"https://github.com/mridulmeh"},{name:"Subhash Haldar",email:"subhash@charts.com"},{name:"Sandeep Acharya",email:"sandeep@charts.com"},{name:"Rousan Ali",email:"rousan@charts.com",url:"https://rousan.io"},{name:"Ujjal Kumar Dutta",email:"ujjal@charts.com"}],main:"src/index.js",keywords:["muze","svg","vector","graphics","data-visualization","visualization","renderer","fusioncharts","relational","algebra","relation"],repository:{type:"git",url:"https://github.com/chartshq/muze"},dependencies:{"@chartshq/layout":"^1.0.0","@chartshq/muze-firebolt":"^1.0.0","@chartshq/muze-legend":"^1.0.0","muze-utils":"^1.0.0","@chartshq/visual-cell":"^1.0.0","@chartshq/visual-group":"^1.0.0","@chartshq/visual-layer":"^1.0.0","@chartshq/visual-unit":"^1.0.0"}}},function(module,exports,__webpack_require__){var Muze=__webpack_require__(27);module.exports=Muze.default?Muze.default:Muze},function(module,exports,__webpack_require__){"use strict";var slLib=function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj}}(__webpack_require__(5)).default.init("undefined"!=typeof window?window:void 0),doc=slLib.win.document,documentSupport=slLib.getDocumentSupport(),SVG_BBOX_CORRECTION=documentSupport.isWebKit?0:4.5;function ContainerManager(parentContainer,isBrowserLess,maxContainers){var svg;maxContainers=(maxContainers=maxContainers>5?maxContainers:5)<20?maxContainers:20,this.maxContainers=maxContainers,this.first=null,this.last=null,this.containers={},this.length=0,this.rootNode=parentContainer,isBrowserLess&&((svg=doc.createElementNS("http://www.w3.org/2000/svg","svg")).setAttributeNS("http://www.w3.org/2000/svg","xlink","http://www.w3.org/1999/xlink"),svg.setAttributeNS("http://www.w3.org/2000/svg","height","0"),svg.setAttributeNS("http://www.w3.org/2000/svg","width","0"),this.svgRoot=svg,this.rootNode.appendChild(svg))}ContainerManager.prototype.get=function(style){var diff,key,containerObj,containers=this.containers,len=this.length,max=this.maxContainers,keyStr="";for(key in slLib.supportedStyle)void 0!==style[key]&&(keyStr+=slLib.supportedStyle[key]+":"+style[key]+";");if(!keyStr)return!1;if(containerObj=containers[keyStr])this.first!==containerObj&&(containerObj.prev&&(containerObj.prev.next=containerObj.next),containerObj.next&&(containerObj.next.prev=containerObj.prev),containerObj.next=this.first,containerObj.next.prev=containerObj,this.last===containerObj&&(this.last=containerObj.prev),containerObj.prev=null,this.first=containerObj);else{if(len>=max)for(diff=len-max+1;diff--;)this.removeContainer(this.last);containerObj=this.addContainer(keyStr)}return containerObj},ContainerManager.prototype.addContainer=function(keyStr){var node,container;return this.containers[keyStr]=container={next:null,prev:null,node:null,ellipsesWidth:0,lineHeight:0,dotWidth:0,avgCharWidth:4,keyStr:keyStr,charCache:{}},container.next=this.first,container.next&&(container.next.prev=container),this.first=container,this.last||(this.last=container),this.length+=1,node=container.node=doc.createElement("div"),this.rootNode.appendChild(node),documentSupport.isIE&&!documentSupport.hasSVG?node.style.setAttribute("cssText",keyStr):node.setAttribute("style",keyStr),node.setAttribute("aria-hidden","true"),node.setAttribute("role","presentation"),node.style.display="inline-block",node.innerHTML=slLib.testStrAvg,container.lineHeight=node.offsetHeight,container.avgCharWidth=node.offsetWidth/3,documentSupport.isBrowserLess?((node=container.svgText=doc.createElementNS("http://www.w3.org/2000/svg","text")).setAttribute("style",keyStr),this.svgRoot.appendChild(node),node.textContent=slLib.testStrAvg,container.lineHeight=node.getBBox().height,container.avgCharWidth=(node.getBBox().width-SVG_BBOX_CORRECTION)/3,node.textContent="...",container.ellipsesWidth=node.getBBox().width-SVG_BBOX_CORRECTION,node.textContent=".",container.dotWidth=node.getBBox().width-SVG_BBOX_CORRECTION):(node.innerHTML="...",container.ellipsesWidth=node.offsetWidth,node.innerHTML=".",container.dotWidth=node.offsetWidth,node.innerHTML=""),container},ContainerManager.prototype.removeContainer=function(cObj){var keyStr=cObj.keyStr;keyStr&&this.length&&cObj&&(this.length-=1,cObj.prev&&(cObj.prev.next=cObj.next),cObj.next&&(cObj.next.prev=cObj.prev),this.first===cObj&&(this.first=cObj.next),this.last===cObj&&(this.last=cObj.prev),cObj.node.parentNode.removeChild(cObj.node),delete this.containers[keyStr])},ContainerManager.prototype.dispose=function(){var key,containers=this.containers;for(key in this.maxContainers=null,containers)this.removeContainer(containers[key]);this.rootNode.parentNode.removeChild(this.rootNode),this.rootNode=null,this.first=null,this.last=null},module.exports=ContainerManager},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.r(__webpack_exports__);var scales_namespaceObject={};__webpack_require__.r(scales_namespaceObject),__webpack_require__.d(scales_namespaceObject,"scaleLinear",function(){return linear_linear}),__webpack_require__.d(scales_namespaceObject,"scaleThreshold",function(){return threshold_threshold}),__webpack_require__.d(scales_namespaceObject,"scaleLog",function(){return log}),__webpack_require__.d(scales_namespaceObject,"scalePow",function(){return pow}),__webpack_require__.d(scales_namespaceObject,"scaleIdentity",function(){return identity_identity}),__webpack_require__.d(scales_namespaceObject,"scaleOrdinal",function(){return ordinal}),__webpack_require__.d(scales_namespaceObject,"scaleSequential",function(){return sequential}),__webpack_require__.d(scales_namespaceObject,"scaleQuantize",function(){return quantize_quantize}),__webpack_require__.d(scales_namespaceObject,"scaleQuantile",function(){return quantile_quantile}),__webpack_require__.d(scales_namespaceObject,"schemeCategory10",function(){return category10}),__webpack_require__.d(scales_namespaceObject,"schemeCategory20",function(){return category20}),__webpack_require__.d(scales_namespaceObject,"schemeCategory20b",function(){return category20b}),__webpack_require__.d(scales_namespaceObject,"scaleBand",function(){return band}),__webpack_require__.d(scales_namespaceObject,"scaleTime",function(){return src_time});var color_schemes_namespaceObject={};__webpack_require__.r(color_schemes_namespaceObject),__webpack_require__.d(color_schemes_namespaceObject,"schemeDark2",function(){return Dark2}),__webpack_require__.d(color_schemes_namespaceObject,"schemePaired",function(){return Paired}),__webpack_require__.d(color_schemes_namespaceObject,"schemeAccent",function(){return Accent}),__webpack_require__.d(color_schemes_namespaceObject,"schemePastel1",function(){return Pastel1}),__webpack_require__.d(color_schemes_namespaceObject,"schemePastel2",function(){return Pastel2}),__webpack_require__.d(color_schemes_namespaceObject,"schemeSet1",function(){return Set1}),__webpack_require__.d(color_schemes_namespaceObject,"schemeSet2",function(){return Set2}),__webpack_require__.d(color_schemes_namespaceObject,"schemeSet3",function(){return Set3}),__webpack_require__.d(color_schemes_namespaceObject,"schemeBlues",function(){return Blues_scheme}),__webpack_require__.d(color_schemes_namespaceObject,"schemeBrBG",function(){return BrBG_scheme}),__webpack_require__.d(color_schemes_namespaceObject,"schemePRGn",function(){return PRGn_scheme}),__webpack_require__.d(color_schemes_namespaceObject,"schemePiYG",function(){return PiYG_scheme}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateBrBG",function(){return BrBG}),__webpack_require__.d(color_schemes_namespaceObject,"interpolatePRGn",function(){return PRGn}),__webpack_require__.d(color_schemes_namespaceObject,"interpolatePiYG",function(){return PiYG}),__webpack_require__.d(color_schemes_namespaceObject,"interpolatePuOr",function(){return PuOr}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateRdBu",function(){return RdBu}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateRdGy",function(){return RdGy}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateRdYlBu",function(){return RdYlBu}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateRdYlGn",function(){return RdYlGn}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateSpectral",function(){return Spectral}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateBlues",function(){return Blues}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateGreens",function(){return Greens}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateGreys",function(){return Greys}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateOranges",function(){return Oranges}),__webpack_require__.d(color_schemes_namespaceObject,"interpolatePurples",function(){return Purples}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateReds",function(){return Reds}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateViridis",function(){return sequential_multi_viridis}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateInferno",function(){return viridis_inferno}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateMagma",function(){return viridis_magma}),__webpack_require__.d(color_schemes_namespaceObject,"interpolatePlasma",function(){return viridis_plasma}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateWarm",function(){return rainbow_warm}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateCool",function(){return rainbow_cool}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateCubehelixDefault",function(){return sequential_multi_cubehelix}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateBuGn",function(){return BuGn}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateBuPu",function(){return BuPu}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateGnBu",function(){return GnBu}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateOrRd",function(){return OrRd}),__webpack_require__.d(color_schemes_namespaceObject,"interpolatePuBuGn",function(){return PuBuGn}),__webpack_require__.d(color_schemes_namespaceObject,"interpolatePuBu",function(){return PuBu}),__webpack_require__.d(color_schemes_namespaceObject,"interpolatePuRd",function(){return PuRd}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateRdPu",function(){return RdPu}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateYlGnBu",function(){return YlGnBu}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateYlGn",function(){return YlGn}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateYlOrBr",function(){return YlOrBr}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateYlOrRd",function(){return YlOrRd}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateRainbow",function(){return sequential_multi_rainbow});var namespace_namespaceObject={};__webpack_require__.r(namespace_namespaceObject),__webpack_require__.d(namespace_namespaceObject,"UNIT_GLOBAL_NAMESPACE",function(){return UNIT_GLOBAL_NAMESPACE}),__webpack_require__.d(namespace_namespaceObject,"UNIT_LOCAL_NAMESPACE",function(){return UNIT_LOCAL_NAMESPACE}),__webpack_require__.d(namespace_namespaceObject,"LAYER_LOCAL_NAMESPACE",function(){return LAYER_LOCAL_NAMESPACE}),__webpack_require__.d(namespace_namespaceObject,"LAYER_GLOBAL_NAMESPACE",function(){return LAYER_GLOBAL_NAMESPACE}),__webpack_require__.d(namespace_namespaceObject,"GROUP_GLOBAL_NAMESPACE",function(){return GROUP_GLOBAL_NAMESPACE}),__webpack_require__.d(namespace_namespaceObject,"GROUP_LOCAL_NAMESPACE",function(){return GROUP_LOCAL_NAMESPACE}),__webpack_require__.d(namespace_namespaceObject,"CANVAS_LOCAL_NAMESPACE",function(){return CANVAS_LOCAL_NAMESPACE}),__webpack_require__.d(namespace_namespaceObject,"CANVAS_GLOBAL_NAMESPACE",function(){return CANVAS_GLOBAL_NAMESPACE});var actions_namespaceObject={};__webpack_require__.r(actions_namespaceObject),__webpack_require__.d(actions_namespaceObject,"DRAG",function(){return DRAG}),__webpack_require__.d(actions_namespaceObject,"HOVER",function(){return HOVER}),__webpack_require__.d(actions_namespaceObject,"SELECTIONDRAG",function(){return SELECTIONDRAG}),__webpack_require__.d(actions_namespaceObject,"CLICK",function(){return CLICK}),__webpack_require__.d(actions_namespaceObject,"LONGTOUCH",function(){return LONGTOUCH}),__webpack_require__.d(actions_namespaceObject,"TOUCHDRAG",function(){return TOUCHDRAG}),__webpack_require__.d(actions_namespaceObject,"ALL_ACTIONS",function(){return ALL_ACTIONS});var enums_selection_namespaceObject={};__webpack_require__.r(enums_selection_namespaceObject),__webpack_require__.d(enums_selection_namespaceObject,"SELECTION_NEW_ENTRY",function(){return SELECTION_NEW_ENTRY}),__webpack_require__.d(enums_selection_namespaceObject,"SELECTION_NEW_EXIT",function(){return SELECTION_NEW_EXIT}),__webpack_require__.d(enums_selection_namespaceObject,"SELECTION_NULL",function(){return SELECTION_NULL}),__webpack_require__.d(enums_selection_namespaceObject,"SELECTION_OLD_ENTRY",function(){return SELECTION_OLD_ENTRY}),__webpack_require__.d(enums_selection_namespaceObject,"SELECTION_OLD_EXIT",function(){return SELECTION_OLD_EXIT});var behaviours_namespaceObject={};__webpack_require__.r(behaviours_namespaceObject),__webpack_require__.d(behaviours_namespaceObject,"BRUSH",function(){return BRUSH}),__webpack_require__.d(behaviours_namespaceObject,"HIGHLIGHT",function(){return HIGHLIGHT}),__webpack_require__.d(behaviours_namespaceObject,"TOOLTIP",function(){return TOOLTIP}),__webpack_require__.d(behaviours_namespaceObject,"FILTER",function(){return FILTER}),__webpack_require__.d(behaviours_namespaceObject,"SELECT",function(){return SELECT});var behavioural_namespaceObject={};__webpack_require__.r(behavioural_namespaceObject),__webpack_require__.d(behavioural_namespaceObject,"HighlightBeahviour",function(){return highlight_HighlightBehaviour}),__webpack_require__.d(behavioural_namespaceObject,"BrushBehaviour",function(){return brush_BrushBehaviour}),__webpack_require__.d(behavioural_namespaceObject,"FilterBehaviour",function(){return filter_FilterBehaviour}),__webpack_require__.d(behavioural_namespaceObject,"SelectBehaviour",function(){return select_SelectBehaviour});var side_effects_namespaceObject={};__webpack_require__.r(side_effects_namespaceObject),__webpack_require__.d(side_effects_namespaceObject,"SelectionBox",function(){return selection_box}),__webpack_require__.d(side_effects_namespaceObject,"Tooltip",function(){return side_effects_tooltip_Tooltip}),__webpack_require__.d(side_effects_namespaceObject,"Crossline",function(){return crossline_Crossline}),__webpack_require__.d(side_effects_namespaceObject,"PlotHighlighter",function(){return plot_highlighter_PlotHighlighter}),__webpack_require__.d(side_effects_namespaceObject,"FilterEffect",function(){return FilterEffect}),__webpack_require__.d(side_effects_namespaceObject,"PersistentAnchors",function(){return persistent_anchors_PersistentAnchors}),__webpack_require__.d(side_effects_namespaceObject,"BrushAnchors",function(){return brush_anchors_BrushAnchors}),__webpack_require__.d(side_effects_namespaceObject,"AnchorEffect",function(){return anchors_AnchorEffect});var axis_orientation_namespaceObject={};__webpack_require__.r(axis_orientation_namespaceObject),__webpack_require__.d(axis_orientation_namespaceObject,"BOTTOM",function(){return axis_orientation_BOTTOM}),__webpack_require__.d(axis_orientation_namespaceObject,"TOP",function(){return axis_orientation_TOP}),__webpack_require__.d(axis_orientation_namespaceObject,"LEFT",function(){return axis_orientation_LEFT}),__webpack_require__.d(axis_orientation_namespaceObject,"RIGHT",function(){return axis_orientation_RIGHT}),__webpack_require__.d(axis_orientation_namespaceObject,"axisOrientationMap",function(){return axisOrientationMap});var scale_type_namespaceObject={};__webpack_require__.r(scale_type_namespaceObject),__webpack_require__.d(scale_type_namespaceObject,"LINEAR",function(){return LINEAR}),__webpack_require__.d(scale_type_namespaceObject,"BAND",function(){return BAND}),__webpack_require__.d(scale_type_namespaceObject,"TIME",function(){return TIME}),__webpack_require__.d(scale_type_namespaceObject,"COLOR",function(){return scale_type_COLOR}),__webpack_require__.d(scale_type_namespaceObject,"ORDINAL",function(){return ORDINAL}),__webpack_require__.d(scale_type_namespaceObject,"QUANTIZE",function(){return QUANTIZE}),__webpack_require__.d(scale_type_namespaceObject,"QUANTILE",function(){return QUANTILE}),__webpack_require__.d(scale_type_namespaceObject,"LOG",function(){return LOG}),__webpack_require__.d(scale_type_namespaceObject,"POW",function(){return POW}),__webpack_require__.d(scale_type_namespaceObject,"IDENTITY",function(){return scale_type_IDENTITY}),__webpack_require__.d(scale_type_namespaceObject,"SEQUENTIAL",function(){return SEQUENTIAL}),__webpack_require__.d(scale_type_namespaceObject,"THRESHOLD",function(){return THRESHOLD});var layer_types_namespaceObject={};__webpack_require__.r(layer_types_namespaceObject),__webpack_require__.d(layer_types_namespaceObject,"AREA_LAYER",function(){return layer_types_AREA_LAYER}),__webpack_require__.d(layer_types_namespaceObject,"ARC_LAYER",function(){return layer_types_ARC_LAYER}),__webpack_require__.d(layer_types_namespaceObject,"LINE_LAYER",function(){return layer_types_LINE_LAYER}),__webpack_require__.d(layer_types_namespaceObject,"TEXT_LAYER",function(){return layer_types_TEXT_LAYER}),__webpack_require__.d(layer_types_namespaceObject,"POINT_LAYER",function(){return layer_types_POINT_LAYER}),__webpack_require__.d(layer_types_namespaceObject,"BAR_LAYER",function(){return layer_types_BAR_LAYER}),__webpack_require__.d(layer_types_namespaceObject,"TICK_LAYER",function(){return layer_types_TICK_LAYER}),__webpack_require__.d(layer_types_namespaceObject,"SIMPLE_LAYER",function(){return layer_types_SIMPLE_LAYER}),__webpack_require__.d(layer_types_namespaceObject,"BASE_LAYER",function(){return layer_types_BASE_LAYER});var firebolt_behavioural_namespaceObject={};__webpack_require__.r(firebolt_behavioural_namespaceObject),__webpack_require__.d(firebolt_behavioural_namespaceObject,"SelectBehaviour",function(){return behavioural_select_SelectBehaviour});var firebolt_side_effects_namespaceObject={};__webpack_require__.r(firebolt_side_effects_namespaceObject),__webpack_require__.d(firebolt_side_effects_namespaceObject,"SelectionBox",function(){return side_effects_selection_box}),__webpack_require__.d(firebolt_side_effects_namespaceObject,"LegendHighlighter",function(){return legend_highlighter_LegendHighlighter});var operators_namespaceObject={};__webpack_require__.r(operators_namespaceObject),__webpack_require__.d(operators_namespaceObject,"share",function(){return operators_share}),__webpack_require__.d(operators_namespaceObject,"html",function(){return operators_html});var dist_datamodel=__webpack_require__(0),datamodel_default=__webpack_require__.n(dist_datamodel),ascending=function(a,b){return ab?1:a>=b?0:NaN},bisector=function(compare){return 1===compare.length&&(compare=function ascendingComparator(f){return function(d,x){return ascending(f(d),x)}}(compare)),{left:function left(a,x,lo,hi){for(null==lo&&(lo=0),null==hi&&(hi=a.length);lo>>1;compare(a[mid],x)<0?lo=mid+1:hi=mid}return lo},right:function right(a,x,lo,hi){for(null==lo&&(lo=0),null==hi&&(hi=a.length);lo>>1;compare(a[mid],x)>0?hi=mid:lo=mid+1}return lo}}};var ascendingBisect=bisector(ascending),bisectRight=ascendingBisect.right,bisect=(ascendingBisect.left,bisectRight);var number=function(x){return null===x?NaN:+x},array_array=Array.prototype,src_range=(array_array.slice,array_array.map,function(start,stop,step){start=+start,stop=+stop,step=(n=arguments.length)<2?(stop=start,start=0,1):n<3?1:+step;for(var i=-1,n=0|Math.max(0,Math.ceil((stop-start)/step)),range=new Array(n);++i0)return[start];if((reverse=stop0)for(start=Math.ceil(start/step),stop=Math.floor(stop/step),ticks=new Array(n=Math.ceil(stop-start+1));++i=0?(error>=e10?10:error>=e5?5:error>=e2?2:1)*Math.pow(10,power):-Math.pow(10,-power)/(error>=e10?10:error>=e5?5:error>=e2?2:1)}function tickStep(start,stop,count){var step0=Math.abs(stop-start)/Math.max(0,count),step1=Math.pow(10,Math.floor(Math.log(step0)/Math.LN10)),error=step0/step1;return error>=e10?step1*=10:error>=e5?step1*=5:error>=e2&&(step1*=2),stop=1)return+valueof(values[n-1],n-1,values);var n,i=(n-1)*p,i0=Math.floor(i),value0=+valueof(values[i0],i0,values);return value0+(+valueof(values[i0+1],i0+1,values)-value0)*(i-i0)}};function map_Map(){}function map_map(object,f){var map=new map_Map;if(object instanceof map_Map)object.each(function(value,key){map.set(key,value)});else if(Array.isArray(object)){var o,i=-1,n=object.length;if(null==f)for(;++i=keys.length)return null!=_sortValues&&array.sort(_sortValues),null!=_rollup?_rollup(array):array;for(var keyValue,value,values,i=-1,n=array.length,key=keys[depth++],valuesByKey=src_map(),result=createResult();++ikeys.length)return map;var array,sortKey=_sortKeys[depth-1];return null!=_rollup&&depth>=keys.length?array=map.entries():(array=[],map.each(function(v,k){array.push({key:k,values:_entries(v,depth)})})),null!=sortKey?array.sort(function(a,b){return sortKey(a.key,b.key)}):array}(apply(array,0,createMap,setMap),0)},key:function key(d){return keys.push(d),nest},sortKeys:function sortKeys(order){return _sortKeys[keys.length-1]=order,nest},sortValues:function sortValues(order){return _sortValues=order,nest},rollup:function rollup(f){return _rollup=f,nest}}};function createObject(){return{}}function setObject(object,key,value){object[key]=value}function createMap(){return src_map()}function setMap(map,key,value){map.set(key,value)}function set_Set(){}var proto=src_map.prototype;function set_set(object,f){var set=new set_Set;if(object instanceof set_Set)object.each(function(value){set.add(value)});else if(object){var i=-1,n=object.length;if(null==f)for(;++i1?+r1:lo,reverse=range[1]range[1-reverse]))return a=Math.max(0,getClosestIndexOf(values,lo)),hiIndex=getClosestIndexOf(values,hi),b=lo===hi?a:Math.max(a,hiIndex-1),reverse&&(t=a,a=n-b,b=n-t),a>b?void 0:domain().slice(a,b+1)},scale.invert=function(r0,r1){var a,t,lo=+r0,hi=arguments.length>1?+r1:lo,reverse=range[1]range[1-reverse]))return a=Math.max(0,getClosestIndexOf(values,lo,"left")),domain()[reverse?n-a:a]},rescale()}function getClosestIndexOf(arr,value,side){for(var highVal,mid,d1,low=0,high=arr.length-1;lowvalue?0===high?high:"left"===side?high-1:high:high===arr.length-1?high:"left"===side?high:high+1:high}var define=function(constructor,factory,prototype){constructor.prototype=factory.prototype=prototype,prototype.constructor=constructor};function extend(parent,definition){var prototype=Object.create(parent.prototype);for(var key in definition)prototype[key]=definition[key];return prototype}function Color(){}var reI="\\s*([+-]?\\d+)\\s*",reN="\\s*([+-]?\\d*\\.?\\d+(?:[eE][+-]?\\d+)?)\\s*",reP="\\s*([+-]?\\d*\\.?\\d+(?:[eE][+-]?\\d+)?)%\\s*",reHex3=/^#([0-9a-f]{3})$/,reHex6=/^#([0-9a-f]{6})$/,reRgbInteger=new RegExp("^rgb\\("+[reI,reI,reI]+"\\)$"),reRgbPercent=new RegExp("^rgb\\("+[reP,reP,reP]+"\\)$"),reRgbaInteger=new RegExp("^rgba\\("+[reI,reI,reI,reN]+"\\)$"),reRgbaPercent=new RegExp("^rgba\\("+[reP,reP,reP,reN]+"\\)$"),reHslPercent=new RegExp("^hsl\\("+[reN,reP,reP]+"\\)$"),reHslaPercent=new RegExp("^hsla\\("+[reN,reP,reP,reN]+"\\)$"),named={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074};function color_color(format){var m;return format=(format+"").trim().toLowerCase(),(m=reHex3.exec(format))?new Rgb((m=parseInt(m[1],16))>>8&15|m>>4&240,m>>4&15|240&m,(15&m)<<4|15&m,1):(m=reHex6.exec(format))?rgbn(parseInt(m[1],16)):(m=reRgbInteger.exec(format))?new Rgb(m[1],m[2],m[3],1):(m=reRgbPercent.exec(format))?new Rgb(255*m[1]/100,255*m[2]/100,255*m[3]/100,1):(m=reRgbaInteger.exec(format))?rgba(m[1],m[2],m[3],m[4]):(m=reRgbaPercent.exec(format))?rgba(255*m[1]/100,255*m[2]/100,255*m[3]/100,m[4]):(m=reHslPercent.exec(format))?hsla(m[1],m[2]/100,m[3]/100,1):(m=reHslaPercent.exec(format))?hsla(m[1],m[2]/100,m[3]/100,m[4]):named.hasOwnProperty(format)?rgbn(named[format]):"transparent"===format?new Rgb(NaN,NaN,NaN,0):null}function rgbn(n){return new Rgb(n>>16&255,n>>8&255,255&n,1)}function rgba(r,g,b,a){return a<=0&&(r=g=b=NaN),new Rgb(r,g,b,a)}function rgbConvert(o){return o instanceof Color||(o=color_color(o)),o?new Rgb((o=o.rgb()).r,o.g,o.b,o.opacity):new Rgb}function color_rgb(r,g,b,opacity){return 1===arguments.length?rgbConvert(r):new Rgb(r,g,b,null==opacity?1:opacity)}function Rgb(r,g,b,opacity){this.r=+r,this.g=+g,this.b=+b,this.opacity=+opacity}function _hex(value){return((value=Math.max(0,Math.min(255,Math.round(value)||0)))<16?"0":"")+value.toString(16)}function hsla(h,s,l,a){return a<=0?h=s=l=NaN:l<=0||l>=1?h=s=NaN:s<=0&&(h=NaN),new Hsl(h,s,l,a)}function hsl(h,s,l,opacity){return 1===arguments.length?function hslConvert(o){if(o instanceof Hsl)return new Hsl(o.h,o.s,o.l,o.opacity);if(o instanceof Color||(o=color_color(o)),!o)return new Hsl;if(o instanceof Hsl)return o;var r=(o=o.rgb()).r/255,g=o.g/255,b=o.b/255,min=Math.min(r,g,b),max=Math.max(r,g,b),h=NaN,s=max-min,l=(max+min)/2;return s?(h=r===max?(g-b)/s+6*(g0&&l<1?0:h,new Hsl(h,s,l,o.opacity)}(h):new Hsl(h,s,l,null==opacity?1:opacity)}function Hsl(h,s,l,opacity){this.h=+h,this.s=+s,this.l=+l,this.opacity=+opacity}function hsl2rgb(h,m1,m2){return 255*(h<60?m1+(m2-m1)*h/60:h<180?m2:h<240?m1+(m2-m1)*(240-h)/60:m1)}define(Color,color_color,{displayable:function displayable(){return this.rgb().displayable()},hex:function hex(){return this.rgb().hex()},toString:function toString(){return this.rgb()+""}}),define(Rgb,color_rgb,extend(Color,{brighter:function brighter(k){return k=null==k?1/.7:Math.pow(1/.7,k),new Rgb(this.r*k,this.g*k,this.b*k,this.opacity)},darker:function darker(k){return k=null==k?.7:Math.pow(.7,k),new Rgb(this.r*k,this.g*k,this.b*k,this.opacity)},rgb:function rgb(){return this},displayable:function displayable(){return 0<=this.r&&this.r<=255&&0<=this.g&&this.g<=255&&0<=this.b&&this.b<=255&&0<=this.opacity&&this.opacity<=1},hex:function hex(){return"#"+_hex(this.r)+_hex(this.g)+_hex(this.b)},toString:function toString(){var a=this.opacity;return(1===(a=isNaN(a)?1:Math.max(0,Math.min(1,a)))?"rgb(":"rgba(")+Math.max(0,Math.min(255,Math.round(this.r)||0))+", "+Math.max(0,Math.min(255,Math.round(this.g)||0))+", "+Math.max(0,Math.min(255,Math.round(this.b)||0))+(1===a?")":", "+a+")")}})),define(Hsl,hsl,extend(Color,{brighter:function brighter(k){return k=null==k?1/.7:Math.pow(1/.7,k),new Hsl(this.h,this.s,this.l*k,this.opacity)},darker:function darker(k){return k=null==k?.7:Math.pow(.7,k),new Hsl(this.h,this.s,this.l*k,this.opacity)},rgb:function rgb(){var h=this.h%360+360*(this.h<0),s=isNaN(h)||isNaN(this.s)?0:this.s,l=this.l,m2=l+(l<.5?l:1-l)*s,m1=2*l-m2;return new Rgb(hsl2rgb(h>=240?h-240:h+120,m1,m2),hsl2rgb(h,m1,m2),hsl2rgb(h<120?h+240:h-120,m1,m2),this.opacity)},displayable:function displayable(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1}}));var deg2rad=Math.PI/180,rad2deg=180/Math.PI,Xn=.96422,Yn=1,Zn=.82521,lab_t0=4/29,lab_t1=6/29,t2=3*lab_t1*lab_t1,t3=lab_t1*lab_t1*lab_t1;function labConvert(o){if(o instanceof Lab)return new Lab(o.l,o.a,o.b,o.opacity);if(o instanceof Hcl){if(isNaN(o.h))return new Lab(o.l,0,0,o.opacity);var h=o.h*deg2rad;return new Lab(o.l,Math.cos(h)*o.c,Math.sin(h)*o.c,o.opacity)}o instanceof Rgb||(o=rgbConvert(o));var x,z,r=rgb2lrgb(o.r),g=rgb2lrgb(o.g),b=rgb2lrgb(o.b),y=xyz2lab((.2225045*r+.7168786*g+.0606169*b)/Yn);return r===g&&g===b?x=z=y:(x=xyz2lab((.4360747*r+.3850649*g+.1430804*b)/Xn),z=xyz2lab((.0139322*r+.0971045*g+.7141733*b)/Zn)),new Lab(116*y-16,500*(x-y),200*(y-z),o.opacity)}function lab(l,a,b,opacity){return 1===arguments.length?labConvert(l):new Lab(l,a,b,null==opacity?1:opacity)}function Lab(l,a,b,opacity){this.l=+l,this.a=+a,this.b=+b,this.opacity=+opacity}function xyz2lab(t){return t>t3?Math.pow(t,1/3):t/t2+lab_t0}function lab2xyz(t){return t>lab_t1?t*t*t:t2*(t-lab_t0)}function lrgb2rgb(x){return 255*(x<=.0031308?12.92*x:1.055*Math.pow(x,1/2.4)-.055)}function rgb2lrgb(x){return(x/=255)<=.04045?x/12.92:Math.pow((x+.055)/1.055,2.4)}function hclConvert(o){if(o instanceof Hcl)return new Hcl(o.h,o.c,o.l,o.opacity);if(o instanceof Lab||(o=labConvert(o)),0===o.a&&0===o.b)return new Hcl(NaN,0,o.l,o.opacity);var h=Math.atan2(o.b,o.a)*rad2deg;return new Hcl(h<0?h+360:h,Math.sqrt(o.a*o.a+o.b*o.b),o.l,o.opacity)}function hcl(h,c,l,opacity){return 1===arguments.length?hclConvert(h):new Hcl(h,c,l,null==opacity?1:opacity)}function Hcl(h,c,l,opacity){this.h=+h,this.c=+c,this.l=+l,this.opacity=+opacity}define(Lab,lab,extend(Color,{brighter:function brighter(k){return new Lab(this.l+18*(null==k?1:k),this.a,this.b,this.opacity)},darker:function darker(k){return new Lab(this.l-18*(null==k?1:k),this.a,this.b,this.opacity)},rgb:function rgb(){var y=(this.l+16)/116,x=isNaN(this.a)?y:y+this.a/500,z=isNaN(this.b)?y:y-this.b/200;return new Rgb(lrgb2rgb(3.1338561*(x=Xn*lab2xyz(x))-1.6168667*(y=Yn*lab2xyz(y))-.4906146*(z=Zn*lab2xyz(z))),lrgb2rgb(-.9787684*x+1.9161415*y+.033454*z),lrgb2rgb(.0719453*x-.2289914*y+1.4052427*z),this.opacity)}})),define(Hcl,hcl,extend(Color,{brighter:function brighter(k){return new Hcl(this.h,this.c,this.l+18*(null==k?1:k),this.opacity)},darker:function darker(k){return new Hcl(this.h,this.c,this.l-18*(null==k?1:k),this.opacity)},rgb:function rgb(){return labConvert(this).rgb()}}));var A=-.14861,B=1.78277,C=-.29227,cubehelix_D=-.90649,E=1.97294,ED=E*cubehelix_D,EB=E*B,BC_DA=B*C-cubehelix_D*A;function cubehelix_cubehelix(h,s,l,opacity){return 1===arguments.length?function cubehelixConvert(o){if(o instanceof Cubehelix)return new Cubehelix(o.h,o.s,o.l,o.opacity);o instanceof Rgb||(o=rgbConvert(o));var r=o.r/255,g=o.g/255,b=o.b/255,l=(BC_DA*b+ED*r-EB*g)/(BC_DA+ED-EB),bl=b-l,k=(E*(g-l)-C*bl)/cubehelix_D,s=Math.sqrt(k*k+bl*bl)/(E*l*(1-l)),h=s?Math.atan2(k,bl)*rad2deg-120:NaN;return new Cubehelix(h<0?h+360:h,s,l,o.opacity)}(h):new Cubehelix(h,s,l,null==opacity?1:opacity)}function Cubehelix(h,s,l,opacity){this.h=+h,this.s=+s,this.l=+l,this.opacity=+opacity}function basis(t1,v0,v1,v2,v3){var t2=t1*t1,t3=t2*t1;return((1-3*t1+3*t2-t3)*v0+(4-6*t2+3*t3)*v1+(1+3*t1+3*t2-3*t3)*v2+t3*v3)/6}define(Cubehelix,cubehelix_cubehelix,extend(Color,{brighter:function brighter(k){return k=null==k?1/.7:Math.pow(1/.7,k),new Cubehelix(this.h,this.s,this.l*k,this.opacity)},darker:function darker(k){return k=null==k?.7:Math.pow(.7,k),new Cubehelix(this.h,this.s,this.l*k,this.opacity)},rgb:function rgb(){var h=isNaN(this.h)?0:(this.h+120)*deg2rad,l=+this.l,a=isNaN(this.s)?0:this.s*l*(1-l),cosh=Math.cos(h),sinh=Math.sin(h);return new Rgb(255*(l+a*(A*cosh+B*sinh)),255*(l+a*(C*cosh+cubehelix_D*sinh)),255*(l+a*(E*cosh)),this.opacity)}}));var src_constant=function(x){return function(){return x}};function linear(a,d){return function(t){return a+t*d}}function color_hue(a,b){var d=b-a;return d?linear(a,d>180||d<-180?d-360*Math.round(d/360):d):src_constant(isNaN(a)?b:a)}function gamma(y){return 1==(y=+y)?nogamma:function(a,b){return b-a?function exponential(a,b,y){return a=Math.pow(a,y),b=Math.pow(b,y)-a,y=1/y,function(t){return Math.pow(a+t*b,y)}}(a,b,y):src_constant(isNaN(a)?b:a)}}function nogamma(a,b){var d=b-a;return d?linear(a,d):src_constant(isNaN(a)?b:a)}var src_rgb=function rgbGamma(y){var color=gamma(y);function rgb(start,end){var r=color((start=color_rgb(start)).r,(end=color_rgb(end)).r),g=color(start.g,end.g),b=color(start.b,end.b),opacity=nogamma(start.opacity,end.opacity);return function(t){return start.r=r(t),start.g=g(t),start.b=b(t),start.opacity=opacity(t),start+""}}return rgb.gamma=rgbGamma,rgb}(1);function rgbSpline(spline){return function(colors){var i,color,n=colors.length,r=new Array(n),g=new Array(n),b=new Array(n);for(i=0;i=1?(t=1,n-1):Math.floor(t*n),v1=values[i],v2=values[i+1],v0=i>0?values[i-1]:2*v1-v2,v3=ibi&&(bs=b.slice(bi,bs),s[i]?s[i]+=bs:s[++i]=bs),(am=am[0])===(bm=bm[0])?s[i]?s[i]+=bm:s[++i]=bm:(s[++i]=null,q.push({i:i,x:src_number(am,bm)})),bi=reB.lastIndex;return bi180?b+=360:b-a>180&&(a+=360),q.push({i:s.push(pop(s)+"rotate(",null,degParen)-2,x:src_number(a,b)})):b&&s.push(pop(s)+"rotate("+b+degParen)}(a.rotate,b.rotate,s,q),function skewX(a,b,s,q){a!==b?q.push({i:s.push(pop(s)+"skewX(",null,degParen)-2,x:src_number(a,b)}):b&&s.push(pop(s)+"skewX("+b+degParen)}(a.skewX,b.skewX,s,q),function scale(xa,ya,xb,yb,s,q){if(xa!==xb||ya!==yb){var i=s.push(pop(s)+"scale(",null,",",null,")");q.push({i:i-4,x:src_number(xa,xb)},{i:i-2,x:src_number(ya,yb)})}else 1===xb&&1===yb||s.push(pop(s)+"scale("+xb+","+yb+")")}(a.scaleX,a.scaleY,b.scaleX,b.scaleY,s,q),a=b=null,function(t){for(var o,i=-1,n=q.length;++i2?polymap:bimap,output=input=null,scale}function scale(x){return(output||(output=piecewise(domain,range,clamp?function deinterpolateClamp(deinterpolate){return function(a,b){var d=deinterpolate(a=+a,b=+b);return function(x){return x<=a?0:x>=b?1:d(x)}}}(deinterpolate):deinterpolate,interpolate)))(+x)}return scale.invert=function(y){return(input||(input=piecewise(range,domain,deinterpolateLinear,clamp?function reinterpolateClamp(reinterpolate){return function(a,b){var r=reinterpolate(a=+a,b=+b);return function(t){return t<=0?a:t>=1?b:r(t)}}}(reinterpolate):reinterpolate)))(+y)},scale.domain=function(_){return arguments.length?(domain=src_array_map.call(_,d3_scale_src_number),rescale()):domain.slice()},scale.range=function(_){return arguments.length?(range=array_slice.call(_),rescale()):range.slice()},scale.rangeRound=function(_){return range=array_slice.call(_),interpolate=src_round,rescale()},scale.clamp=function(_){return arguments.length?(clamp=!!_,rescale()):clamp},scale.interpolate=function(_){return arguments.length?(interpolate=_,rescale()):interpolate},rescale()}var formatDecimal=function(x,p){if((i=(x=p?x.toExponential(p-1):x.toExponential()).indexOf("e"))<0)return null;var i,coefficient=x.slice(0,i);return[coefficient.length>1?coefficient[0]+coefficient.slice(2):coefficient,+x.slice(i+1)]},src_exponent=function(x){return(x=formatDecimal(Math.abs(x)))?x[1]:NaN},re=/^(?:(.)?([<>=^]))?([+\-( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?(~)?([a-z%])?$/i;function formatSpecifier(specifier){return new FormatSpecifier(specifier)}function FormatSpecifier(specifier){if(!(match=re.exec(specifier)))throw new Error("invalid format: "+specifier);var match;this.fill=match[1]||" ",this.align=match[2]||">",this.sign=match[3]||"-",this.symbol=match[4]||"",this.zero=!!match[5],this.width=match[6]&&+match[6],this.comma=!!match[7],this.precision=match[8]&&+match[8].slice(1),this.trim=!!match[9],this.type=match[10]||""}formatSpecifier.prototype=FormatSpecifier.prototype,FormatSpecifier.prototype.toString=function(){return this.fill+this.align+this.sign+this.symbol+(this.zero?"0":"")+(null==this.width?"":Math.max(1,0|this.width))+(this.comma?",":"")+(null==this.precision?"":"."+Math.max(0,0|this.precision))+(this.trim?"~":"")+this.type};var prefixExponent,defaultLocale_locale,defaultLocale_format,defaultLocale_formatPrefix,formatTrim=function(s){out:for(var i1,n=s.length,i=1,i0=-1;i0){if(!+s[i])break out;i0=0}}return i0>0?s.slice(0,i0)+s.slice(i1+1):s},formatRounded=function(x,p){var d=formatDecimal(x,p);if(!d)return x+"";var coefficient=d[0],exponent=d[1];return exponent<0?"0."+new Array(-exponent).join("0")+coefficient:coefficient.length>exponent+1?coefficient.slice(0,exponent+1)+"."+coefficient.slice(exponent+1):coefficient+new Array(exponent-coefficient.length+2).join("0")},formatTypes={"%":function _(x,p){return(100*x).toFixed(p)},b:function b(x){return Math.round(x).toString(2)},c:function c(x){return x+""},d:function d(x){return Math.round(x).toString(10)},e:function e(x,p){return x.toExponential(p)},f:function f(x,p){return x.toFixed(p)},g:function g(x,p){return x.toPrecision(p)},o:function o(x){return Math.round(x).toString(8)},p:function p(x,_p){return formatRounded(100*x,_p)},r:formatRounded,s:function(x,p){var d=formatDecimal(x,p);if(!d)return x+"";var coefficient=d[0],exponent=d[1],i=exponent-(prefixExponent=3*Math.max(-8,Math.min(8,Math.floor(exponent/3))))+1,n=coefficient.length;return i===n?coefficient:i>n?coefficient+new Array(i-n+1).join("0"):i>0?coefficient.slice(0,i)+"."+coefficient.slice(i):"0."+new Array(1-i).join("0")+formatDecimal(x,Math.max(0,p+i-1))[0]},X:function X(x){return Math.round(x).toString(16).toUpperCase()},x:function x(_x){return Math.round(_x).toString(16)}},src_identity=function(x){return x},prefixes=["y","z","a","f","p","n","µ","m","","k","M","G","T","P","E","Z","Y"],src_locale=function(locale){var group=locale.grouping&&locale.thousands?function(grouping,thousands){return function(value,width){for(var i=value.length,t=[],j=0,g=grouping[0],length=0;i>0&&g>0&&(length+g+1>width&&(g=Math.max(1,width-length)),t.push(value.substring(i-=g,i+g)),!((length+=g+1)>width));)g=grouping[j=(j+1)%grouping.length];return t.reverse().join(thousands)}}(locale.grouping,locale.thousands):src_identity,currency=locale.currency,decimal=locale.decimal,numerals=locale.numerals?function(numerals){return function(value){return value.replace(/[0-9]/g,function(i){return numerals[+i]})}}(locale.numerals):src_identity,percent=locale.percent||"%";function newFormat(specifier){var fill=(specifier=formatSpecifier(specifier)).fill,align=specifier.align,sign=specifier.sign,symbol=specifier.symbol,zero=specifier.zero,width=specifier.width,comma=specifier.comma,precision=specifier.precision,trim=specifier.trim,type=specifier.type;"n"===type?(comma=!0,type="g"):formatTypes[type]||(null==precision&&(precision=12),trim=!0,type="g"),(zero||"0"===fill&&"="===align)&&(zero=!0,fill="0",align="=");var prefix="$"===symbol?currency[0]:"#"===symbol&&/[boxX]/.test(type)?"0"+type.toLowerCase():"",suffix="$"===symbol?currency[1]:/[%p]/.test(type)?percent:"",formatType=formatTypes[type],maybeSuffix=/[defgprs%]/.test(type);function format(value){var i,n,c,valuePrefix=prefix,valueSuffix=suffix;if("c"===type)valueSuffix=formatType(value)+valueSuffix,value="";else{var valueNegative=(value=+value)<0;if(value=formatType(Math.abs(value),precision),trim&&(value=formatTrim(value)),valueNegative&&0==+value&&(valueNegative=!1),valuePrefix=(valueNegative?"("===sign?sign:"-":"-"===sign||"("===sign?"":sign)+valuePrefix,valueSuffix=("s"===type?prefixes[8+prefixExponent/3]:"")+valueSuffix+(valueNegative&&"("===sign?")":""),maybeSuffix)for(i=-1,n=value.length;++i(c=value.charCodeAt(i))||c>57){valueSuffix=(46===c?decimal+value.slice(i+1):value.slice(i))+valueSuffix,value=value.slice(0,i);break}}comma&&!zero&&(value=group(value,1/0));var length=valuePrefix.length+value.length+valueSuffix.length,padding=length>1)+valuePrefix+value+valueSuffix+padding.slice(length);break;default:value=padding+valuePrefix+value+valueSuffix}return numerals(value)}return precision=null==precision?6:/[gprs]/.test(type)?Math.max(1,Math.min(21,precision)):Math.max(0,Math.min(20,precision)),format.toString=function(){return specifier+""},format}return{format:newFormat,formatPrefix:function formatPrefix(specifier,value){var f=newFormat(((specifier=formatSpecifier(specifier)).type="f",specifier)),e=3*Math.max(-8,Math.min(8,Math.floor(src_exponent(value)/3))),k=Math.pow(10,-e),prefix=prefixes[8+e/3];return function(value){return f(k*value)+prefix}}}};!function defaultLocale(definition){return defaultLocale_locale=src_locale(definition),defaultLocale_format=defaultLocale_locale.format,defaultLocale_formatPrefix=defaultLocale_locale.formatPrefix,defaultLocale_locale}({decimal:".",thousands:",",grouping:[3],currency:["$",""]});var src_tickFormat=function(domain,count,specifier){var precision,start=domain[0],stop=domain[domain.length-1],step=tickStep(start,stop,null==count?10:count);switch((specifier=formatSpecifier(null==specifier?",f":specifier)).type){case"s":var value=Math.max(Math.abs(start),Math.abs(stop));return null!=specifier.precision||isNaN(precision=function(step,value){return Math.max(0,3*Math.max(-8,Math.min(8,Math.floor(src_exponent(value)/3)))-src_exponent(Math.abs(step)))}(step,value))||(specifier.precision=precision),defaultLocale_formatPrefix(specifier,value);case"":case"e":case"g":case"p":case"r":null!=specifier.precision||isNaN(precision=function(step,max){return step=Math.abs(step),max=Math.abs(max)-step,Math.max(0,src_exponent(max)-src_exponent(step))+1}(step,Math.max(Math.abs(start),Math.abs(stop))))||(specifier.precision=precision-("e"===specifier.type));break;case"f":case"%":null!=specifier.precision||isNaN(precision=function(step){return Math.max(0,-src_exponent(Math.abs(step)))}(step))||(specifier.precision=precision-2*("%"===specifier.type))}return defaultLocale_format(specifier)};function linearish(scale){var domain=scale.domain;return scale.ticks=function(count){var d=domain();return src_ticks(d[0],d[d.length-1],null==count?10:count)},scale.tickFormat=function(count,specifier){return src_tickFormat(domain(),count,specifier)},scale.nice=function(count){null==count&&(count=10);var step,d=domain(),i0=0,i1=d.length-1,start=d[i0],stop=d[i1];return stop0?step=tickIncrement(start=Math.floor(start/step)*step,stop=Math.ceil(stop/step)*step,count):step<0&&(step=tickIncrement(start=Math.ceil(start*step)/step,stop=Math.floor(stop*step)/step,count)),step>0?(d[i0]=Math.floor(start/step)*step,d[i1]=Math.ceil(stop/step)*step,domain(d)):step<0&&(d[i0]=Math.ceil(start*step)/step,d[i1]=Math.floor(stop*step)/step,domain(d)),scale},scale}function linear_linear(){var scale=continuous(deinterpolateLinear,src_number);return scale.copy=function(){return copy(scale,linear_linear())},linearish(scale)}function identity_identity(){var domain=[0,1];function scale(x){return+x}return scale.invert=scale,scale.domain=scale.range=function(_){return arguments.length?(domain=src_array_map.call(_,d3_scale_src_number),scale):domain.slice()},scale.copy=function(){return identity_identity().domain(domain)},linearish(scale)}var nice=function(domain,interval){var t,i0=0,i1=(domain=domain.slice()).length-1,x0=domain[i0],x1=domain[i1];return x10){for(;iv)break;z.push(t)}}else for(;i=1;--k)if(!((t=p*k)v)break;z.push(t)}}else z=src_ticks(i,j,Math.min(j-i,n)).map(pows);return r?z.reverse():z},scale.tickFormat=function(count,specifier){if(null==specifier&&(specifier=10===base?".0e":","),"function"!=typeof specifier&&(specifier=defaultLocale_format(specifier)),count===1/0)return specifier;null==count&&(count=10);var k=Math.max(1,base*count/scale.ticks().length);return function(d){var i=d/pows(Math.round(logs(d)));return i*base0?thresholds[i-1]:domain[0],i=n?[domain[n-1],x1]:[domain[i-1],domain[i]]},scale.copy=function(){return quantize_quantize().domain([x0,x1]).range(range)},linearish(scale)}function threshold_threshold(){var domain=[.5],range=[0,1],n=1;function scale(x){if(x<=x)return range[bisect(domain,x,0,n)]}return scale.domain=function(_){return arguments.length?(domain=array_slice.call(_),n=Math.min(domain.length,range.length-1),scale):domain.slice()},scale.range=function(_){return arguments.length?(range=array_slice.call(_),n=Math.min(domain.length,range.length-1),scale):range.slice()},scale.invertExtent=function(y){var i=range.indexOf(y);return[domain[i-1],domain[i]]},scale.copy=function(){return threshold_threshold().domain(domain).range(range)},scale}var interval_t0=new Date,interval_t1=new Date;function newInterval(floori,offseti,count,field){function interval(date){return floori(date=new Date(+date)),date}return interval.floor=interval,interval.ceil=function(date){return floori(date=new Date(date-1)),offseti(date,1),floori(date),date},interval.round=function(date){var d0=interval(date),d1=interval.ceil(date);return date-d00))return range;do{range.push(previous=new Date(+start)),offseti(start,step),floori(start)}while(previous=date)for(;floori(date),!test(date);)date.setTime(date-1)},function(date,step){if(date>=date)if(step<0)for(;++step<=0;)for(;offseti(date,-1),!test(date););else for(;--step>=0;)for(;offseti(date,1),!test(date););})},count&&(interval.count=function(start,end){return interval_t0.setTime(+start),interval_t1.setTime(+end),floori(interval_t0),floori(interval_t1),Math.floor(count(interval_t0,interval_t1))},interval.every=function(step){return step=Math.floor(step),isFinite(step)&&step>0?step>1?interval.filter(field?function(d){return field(d)%step==0}:function(d){return interval.count(0,d)%step==0}):interval:null}),interval}var millisecond_millisecond=newInterval(function(){},function(date,step){date.setTime(+date+step)},function(start,end){return end-start});millisecond_millisecond.every=function(k){return k=Math.floor(k),isFinite(k)&&k>0?k>1?newInterval(function(date){date.setTime(Math.floor(date/k)*k)},function(date,step){date.setTime(+date+step*k)},function(start,end){return(end-start)/k}):millisecond_millisecond:null};var src_millisecond=millisecond_millisecond,durationMinute=(millisecond_millisecond.range,6e4),durationWeek=6048e5,second_second=newInterval(function(date){date.setTime(1e3*Math.floor(date/1e3))},function(date,step){date.setTime(+date+1e3*step)},function(start,end){return(end-start)/1e3},function(date){return date.getUTCSeconds()}),src_second=second_second,minute_minute=(second_second.range,newInterval(function(date){date.setTime(Math.floor(date/durationMinute)*durationMinute)},function(date,step){date.setTime(+date+step*durationMinute)},function(start,end){return(end-start)/durationMinute},function(date){return date.getMinutes()})),src_minute=minute_minute,hour_hour=(minute_minute.range,newInterval(function(date){var offset=date.getTimezoneOffset()*durationMinute%36e5;offset<0&&(offset+=36e5),date.setTime(36e5*Math.floor((+date-offset)/36e5)+offset)},function(date,step){date.setTime(+date+36e5*step)},function(start,end){return(end-start)/36e5},function(date){return date.getHours()})),src_hour=hour_hour,day_day=(hour_hour.range,newInterval(function(date){date.setHours(0,0,0,0)},function(date,step){date.setDate(date.getDate()+step)},function(start,end){return(end-start-(end.getTimezoneOffset()-start.getTimezoneOffset())*durationMinute)/864e5},function(date){return date.getDate()-1})),src_day=day_day;day_day.range;function weekday(i){return newInterval(function(date){date.setDate(date.getDate()-(date.getDay()+7-i)%7),date.setHours(0,0,0,0)},function(date,step){date.setDate(date.getDate()+7*step)},function(start,end){return(end-start-(end.getTimezoneOffset()-start.getTimezoneOffset())*durationMinute)/durationWeek})}var sunday=weekday(0),monday=weekday(1),tuesday=weekday(2),wednesday=weekday(3),thursday=weekday(4),friday=weekday(5),saturday=weekday(6),month_month=(sunday.range,monday.range,tuesday.range,wednesday.range,thursday.range,friday.range,saturday.range,newInterval(function(date){date.setDate(1),date.setHours(0,0,0,0)},function(date,step){date.setMonth(date.getMonth()+step)},function(start,end){return end.getMonth()-start.getMonth()+12*(end.getFullYear()-start.getFullYear())},function(date){return date.getMonth()})),src_month=month_month,year_year=(month_month.range,newInterval(function(date){date.setMonth(0,1),date.setHours(0,0,0,0)},function(date,step){date.setFullYear(date.getFullYear()+step)},function(start,end){return end.getFullYear()-start.getFullYear()},function(date){return date.getFullYear()}));year_year.every=function(k){return isFinite(k=Math.floor(k))&&k>0?newInterval(function(date){date.setFullYear(Math.floor(date.getFullYear()/k)*k),date.setMonth(0,1),date.setHours(0,0,0,0)},function(date,step){date.setFullYear(date.getFullYear()+step*k)}):null};var src_year=year_year,utcMinute=(year_year.range,newInterval(function(date){date.setUTCSeconds(0,0)},function(date,step){date.setTime(+date+step*durationMinute)},function(start,end){return(end-start)/durationMinute},function(date){return date.getUTCMinutes()})),utcHour=(utcMinute.range,newInterval(function(date){date.setUTCMinutes(0,0,0)},function(date,step){date.setTime(+date+36e5*step)},function(start,end){return(end-start)/36e5},function(date){return date.getUTCHours()})),utcDay=(utcHour.range,newInterval(function(date){date.setUTCHours(0,0,0,0)},function(date,step){date.setUTCDate(date.getUTCDate()+step)},function(start,end){return(end-start)/864e5},function(date){return date.getUTCDate()-1})),src_utcDay=utcDay;utcDay.range;function utcWeekday(i){return newInterval(function(date){date.setUTCDate(date.getUTCDate()-(date.getUTCDay()+7-i)%7),date.setUTCHours(0,0,0,0)},function(date,step){date.setUTCDate(date.getUTCDate()+7*step)},function(start,end){return(end-start)/durationWeek})}var utcSunday=utcWeekday(0),utcMonday=utcWeekday(1),utcTuesday=utcWeekday(2),utcWednesday=utcWeekday(3),utcThursday=utcWeekday(4),utcFriday=utcWeekday(5),utcSaturday=utcWeekday(6),utcMonth=(utcSunday.range,utcMonday.range,utcTuesday.range,utcWednesday.range,utcThursday.range,utcFriday.range,utcSaturday.range,newInterval(function(date){date.setUTCDate(1),date.setUTCHours(0,0,0,0)},function(date,step){date.setUTCMonth(date.getUTCMonth()+step)},function(start,end){return end.getUTCMonth()-start.getUTCMonth()+12*(end.getUTCFullYear()-start.getUTCFullYear())},function(date){return date.getUTCMonth()})),utcYear=(utcMonth.range,newInterval(function(date){date.setUTCMonth(0,1),date.setUTCHours(0,0,0,0)},function(date,step){date.setUTCFullYear(date.getUTCFullYear()+step)},function(start,end){return end.getUTCFullYear()-start.getUTCFullYear()},function(date){return date.getUTCFullYear()}));utcYear.every=function(k){return isFinite(k=Math.floor(k))&&k>0?newInterval(function(date){date.setUTCFullYear(Math.floor(date.getUTCFullYear()/k)*k),date.setUTCMonth(0,1),date.setUTCHours(0,0,0,0)},function(date,step){date.setUTCFullYear(date.getUTCFullYear()+step*k)}):null};var src_utcYear=utcYear;utcYear.range;function localDate(d){if(0<=d.y&&d.y<100){var date=new Date(-1,d.m,d.d,d.H,d.M,d.S,d.L);return date.setFullYear(d.y),date}return new Date(d.y,d.m,d.d,d.H,d.M,d.S,d.L)}function utcDate(d){if(0<=d.y&&d.y<100){var date=new Date(Date.UTC(-1,d.m,d.d,d.H,d.M,d.S,d.L));return date.setUTCFullYear(d.y),date}return new Date(Date.UTC(d.y,d.m,d.d,d.H,d.M,d.S,d.L))}function newYear(y){return{y:y,m:0,d:1,H:0,M:0,S:0,L:0}}var src_defaultLocale_locale,timeFormat,utcFormat,utcParse,pads={"-":"",_:" ",0:"0"},numberRe=/^\s*\d+/,percentRe=/^%/,requoteRe=/[\\^$*+?|[\]().{}]/g;function locale_pad(value,fill,width){var sign=value<0?"-":"",string=(sign?-value:value)+"",length=string.length;return sign+(length68?1900:2e3),i+n[0].length):-1}function parseZone(d,string,i){var n=/^(Z)|([+-]\d\d)(?::?(\d\d))?/.exec(string.slice(i,i+6));return n?(d.Z=n[1]?0:-(n[2]+(n[3]||"00")),i+n[0].length):-1}function parseMonthNumber(d,string,i){var n=numberRe.exec(string.slice(i,i+2));return n?(d.m=n[0]-1,i+n[0].length):-1}function parseDayOfMonth(d,string,i){var n=numberRe.exec(string.slice(i,i+2));return n?(d.d=+n[0],i+n[0].length):-1}function parseDayOfYear(d,string,i){var n=numberRe.exec(string.slice(i,i+3));return n?(d.m=0,d.d=+n[0],i+n[0].length):-1}function parseHour24(d,string,i){var n=numberRe.exec(string.slice(i,i+2));return n?(d.H=+n[0],i+n[0].length):-1}function parseMinutes(d,string,i){var n=numberRe.exec(string.slice(i,i+2));return n?(d.M=+n[0],i+n[0].length):-1}function parseSeconds(d,string,i){var n=numberRe.exec(string.slice(i,i+2));return n?(d.S=+n[0],i+n[0].length):-1}function parseMilliseconds(d,string,i){var n=numberRe.exec(string.slice(i,i+3));return n?(d.L=+n[0],i+n[0].length):-1}function parseMicroseconds(d,string,i){var n=numberRe.exec(string.slice(i,i+6));return n?(d.L=Math.floor(n[0]/1e3),i+n[0].length):-1}function parseLiteralPercent(d,string,i){var n=percentRe.exec(string.slice(i,i+1));return n?i+n[0].length:-1}function parseUnixTimestamp(d,string,i){var n=numberRe.exec(string.slice(i));return n?(d.Q=+n[0],i+n[0].length):-1}function parseUnixTimestampSeconds(d,string,i){var n=numberRe.exec(string.slice(i));return n?(d.Q=1e3*+n[0],i+n[0].length):-1}function formatDayOfMonth(d,p){return locale_pad(d.getDate(),p,2)}function formatHour24(d,p){return locale_pad(d.getHours(),p,2)}function formatHour12(d,p){return locale_pad(d.getHours()%12||12,p,2)}function formatDayOfYear(d,p){return locale_pad(1+src_day.count(src_year(d),d),p,3)}function formatMilliseconds(d,p){return locale_pad(d.getMilliseconds(),p,3)}function formatMicroseconds(d,p){return formatMilliseconds(d,p)+"000"}function formatMonthNumber(d,p){return locale_pad(d.getMonth()+1,p,2)}function formatMinutes(d,p){return locale_pad(d.getMinutes(),p,2)}function formatSeconds(d,p){return locale_pad(d.getSeconds(),p,2)}function formatWeekdayNumberMonday(d){var day=d.getDay();return 0===day?7:day}function formatWeekNumberSunday(d,p){return locale_pad(sunday.count(src_year(d),d),p,2)}function formatWeekNumberISO(d,p){var day=d.getDay();return d=day>=4||0===day?thursday(d):thursday.ceil(d),locale_pad(thursday.count(src_year(d),d)+(4===src_year(d).getDay()),p,2)}function formatWeekdayNumberSunday(d){return d.getDay()}function formatWeekNumberMonday(d,p){return locale_pad(monday.count(src_year(d),d),p,2)}function locale_formatYear(d,p){return locale_pad(d.getFullYear()%100,p,2)}function formatFullYear(d,p){return locale_pad(d.getFullYear()%1e4,p,4)}function formatZone(d){var z=d.getTimezoneOffset();return(z>0?"-":(z*=-1,"+"))+locale_pad(z/60|0,"0",2)+locale_pad(z%60,"0",2)}function formatUTCDayOfMonth(d,p){return locale_pad(d.getUTCDate(),p,2)}function formatUTCHour24(d,p){return locale_pad(d.getUTCHours(),p,2)}function formatUTCHour12(d,p){return locale_pad(d.getUTCHours()%12||12,p,2)}function formatUTCDayOfYear(d,p){return locale_pad(1+src_utcDay.count(src_utcYear(d),d),p,3)}function formatUTCMilliseconds(d,p){return locale_pad(d.getUTCMilliseconds(),p,3)}function formatUTCMicroseconds(d,p){return formatUTCMilliseconds(d,p)+"000"}function formatUTCMonthNumber(d,p){return locale_pad(d.getUTCMonth()+1,p,2)}function formatUTCMinutes(d,p){return locale_pad(d.getUTCMinutes(),p,2)}function formatUTCSeconds(d,p){return locale_pad(d.getUTCSeconds(),p,2)}function formatUTCWeekdayNumberMonday(d){var dow=d.getUTCDay();return 0===dow?7:dow}function formatUTCWeekNumberSunday(d,p){return locale_pad(utcSunday.count(src_utcYear(d),d),p,2)}function formatUTCWeekNumberISO(d,p){var day=d.getUTCDay();return d=day>=4||0===day?utcThursday(d):utcThursday.ceil(d),locale_pad(utcThursday.count(src_utcYear(d),d)+(4===src_utcYear(d).getUTCDay()),p,2)}function formatUTCWeekdayNumberSunday(d){return d.getUTCDay()}function formatUTCWeekNumberMonday(d,p){return locale_pad(utcMonday.count(src_utcYear(d),d),p,2)}function formatUTCYear(d,p){return locale_pad(d.getUTCFullYear()%100,p,2)}function formatUTCFullYear(d,p){return locale_pad(d.getUTCFullYear()%1e4,p,4)}function formatUTCZone(){return"+0000"}function formatLiteralPercent(){return"%"}function formatUnixTimestamp(d){return+d}function formatUnixTimestampSeconds(d){return Math.floor(+d/1e3)}!function defaultLocale_defaultLocale(definition){return src_defaultLocale_locale=function formatLocale(locale){var locale_dateTime=locale.dateTime,locale_date=locale.date,locale_time=locale.time,locale_periods=locale.periods,locale_weekdays=locale.days,locale_shortWeekdays=locale.shortDays,locale_months=locale.months,locale_shortMonths=locale.shortMonths,periodRe=formatRe(locale_periods),periodLookup=formatLookup(locale_periods),weekdayRe=formatRe(locale_weekdays),weekdayLookup=formatLookup(locale_weekdays),shortWeekdayRe=formatRe(locale_shortWeekdays),shortWeekdayLookup=formatLookup(locale_shortWeekdays),monthRe=formatRe(locale_months),monthLookup=formatLookup(locale_months),shortMonthRe=formatRe(locale_shortMonths),shortMonthLookup=formatLookup(locale_shortMonths),formats={a:function formatShortWeekday(d){return locale_shortWeekdays[d.getDay()]},A:function formatWeekday(d){return locale_weekdays[d.getDay()]},b:function formatShortMonth(d){return locale_shortMonths[d.getMonth()]},B:function formatMonth(d){return locale_months[d.getMonth()]},c:null,d:formatDayOfMonth,e:formatDayOfMonth,f:formatMicroseconds,H:formatHour24,I:formatHour12,j:formatDayOfYear,L:formatMilliseconds,m:formatMonthNumber,M:formatMinutes,p:function formatPeriod(d){return locale_periods[+(d.getHours()>=12)]},Q:formatUnixTimestamp,s:formatUnixTimestampSeconds,S:formatSeconds,u:formatWeekdayNumberMonday,U:formatWeekNumberSunday,V:formatWeekNumberISO,w:formatWeekdayNumberSunday,W:formatWeekNumberMonday,x:null,X:null,y:locale_formatYear,Y:formatFullYear,Z:formatZone,"%":formatLiteralPercent},utcFormats={a:function formatUTCShortWeekday(d){return locale_shortWeekdays[d.getUTCDay()]},A:function formatUTCWeekday(d){return locale_weekdays[d.getUTCDay()]},b:function formatUTCShortMonth(d){return locale_shortMonths[d.getUTCMonth()]},B:function formatUTCMonth(d){return locale_months[d.getUTCMonth()]},c:null,d:formatUTCDayOfMonth,e:formatUTCDayOfMonth,f:formatUTCMicroseconds,H:formatUTCHour24,I:formatUTCHour12,j:formatUTCDayOfYear,L:formatUTCMilliseconds,m:formatUTCMonthNumber,M:formatUTCMinutes,p:function formatUTCPeriod(d){return locale_periods[+(d.getUTCHours()>=12)]},Q:formatUnixTimestamp,s:formatUnixTimestampSeconds,S:formatUTCSeconds,u:formatUTCWeekdayNumberMonday,U:formatUTCWeekNumberSunday,V:formatUTCWeekNumberISO,w:formatUTCWeekdayNumberSunday,W:formatUTCWeekNumberMonday,x:null,X:null,y:formatUTCYear,Y:formatUTCFullYear,Z:formatUTCZone,"%":formatLiteralPercent},parses={a:function parseShortWeekday(d,string,i){var n=shortWeekdayRe.exec(string.slice(i));return n?(d.w=shortWeekdayLookup[n[0].toLowerCase()],i+n[0].length):-1},A:function parseWeekday(d,string,i){var n=weekdayRe.exec(string.slice(i));return n?(d.w=weekdayLookup[n[0].toLowerCase()],i+n[0].length):-1},b:function parseShortMonth(d,string,i){var n=shortMonthRe.exec(string.slice(i));return n?(d.m=shortMonthLookup[n[0].toLowerCase()],i+n[0].length):-1},B:function parseMonth(d,string,i){var n=monthRe.exec(string.slice(i));return n?(d.m=monthLookup[n[0].toLowerCase()],i+n[0].length):-1},c:function parseLocaleDateTime(d,string,i){return parseSpecifier(d,locale_dateTime,string,i)},d:parseDayOfMonth,e:parseDayOfMonth,f:parseMicroseconds,H:parseHour24,I:parseHour24,j:parseDayOfYear,L:parseMilliseconds,m:parseMonthNumber,M:parseMinutes,p:function parsePeriod(d,string,i){var n=periodRe.exec(string.slice(i));return n?(d.p=periodLookup[n[0].toLowerCase()],i+n[0].length):-1},Q:parseUnixTimestamp,s:parseUnixTimestampSeconds,S:parseSeconds,u:parseWeekdayNumberMonday,U:parseWeekNumberSunday,V:parseWeekNumberISO,w:parseWeekdayNumberSunday,W:parseWeekNumberMonday,x:function parseLocaleDate(d,string,i){return parseSpecifier(d,locale_date,string,i)},X:function parseLocaleTime(d,string,i){return parseSpecifier(d,locale_time,string,i)},y:parseYear,Y:parseFullYear,Z:parseZone,"%":parseLiteralPercent};function newFormat(specifier,formats){return function(date){var c,pad,format,string=[],i=-1,j=0,n=specifier.length;for(date instanceof Date||(date=new Date(+date));++i53)return null;"w"in d||(d.w=1),"Z"in d?(week=(day=(week=utcDate(newYear(d.y))).getUTCDay())>4||0===day?utcMonday.ceil(week):utcMonday(week),week=src_utcDay.offset(week,7*(d.V-1)),d.y=week.getUTCFullYear(),d.m=week.getUTCMonth(),d.d=week.getUTCDate()+(d.w+6)%7):(week=(day=(week=newDate(newYear(d.y))).getDay())>4||0===day?monday.ceil(week):monday(week),week=src_day.offset(week,7*(d.V-1)),d.y=week.getFullYear(),d.m=week.getMonth(),d.d=week.getDate()+(d.w+6)%7)}else("W"in d||"U"in d)&&("w"in d||(d.w="u"in d?d.u%7:"W"in d?1:0),day="Z"in d?utcDate(newYear(d.y)).getUTCDay():newDate(newYear(d.y)).getDay(),d.m=0,d.d="W"in d?(d.w+6)%7+7*d.W-(day+5)%7:d.w+7*d.U-(day+6)%7);return"Z"in d?(d.H+=d.Z/100|0,d.M+=d.Z%100,utcDate(d)):newDate(d)}}function parseSpecifier(d,specifier,string,j){for(var c,parse,i=0,n=specifier.length,m=string.length;i=m)return-1;if(37===(c=specifier.charCodeAt(i++))){if(c=specifier.charAt(i++),!(parse=parses[c in pads?specifier.charAt(i++):c])||(j=parse(d,string,j))<0)return-1}else if(c!=string.charCodeAt(j++))return-1}return j}return formats.x=newFormat(locale_date,formats),formats.X=newFormat(locale_time,formats),formats.c=newFormat(locale_dateTime,formats),utcFormats.x=newFormat(locale_date,utcFormats),utcFormats.X=newFormat(locale_time,utcFormats),utcFormats.c=newFormat(locale_dateTime,utcFormats),{format:function format(specifier){var f=newFormat(specifier+="",formats);return f.toString=function(){return specifier},f},parse:function parse(specifier){var p=newParse(specifier+="",localDate);return p.toString=function(){return specifier},p},utcFormat:function utcFormat(specifier){var f=newFormat(specifier+="",utcFormats);return f.toString=function(){return specifier},f},utcParse:function utcParse(specifier){var p=newParse(specifier,utcDate);return p.toString=function(){return specifier},p}}}(definition),timeFormat=src_defaultLocale_locale.format,src_defaultLocale_locale.parse,utcFormat=src_defaultLocale_locale.utcFormat,utcParse=src_defaultLocale_locale.utcParse,src_defaultLocale_locale}({dateTime:"%x, %X",date:"%-m/%-d/%Y",time:"%-I:%M:%S %p",periods:["AM","PM"],days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],shortDays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],shortMonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]});Date.prototype.toISOString||utcFormat("%Y-%m-%dT%H:%M:%S.%LZ");+new Date("2000-01-01T00:00:00.000Z")||utcParse("%Y-%m-%dT%H:%M:%S.%LZ");var time_durationSecond=1e3,time_durationMinute=60*time_durationSecond,time_durationHour=60*time_durationMinute,time_durationDay=24*time_durationHour,time_durationWeek=7*time_durationDay,durationMonth=30*time_durationDay,durationYear=365*time_durationDay;function time_date(t){return new Date(t)}function time_number(t){return t instanceof Date?+t:+new Date(+t)}function calendar(year,month,week,day,hour,minute,second,millisecond,format){var scale=continuous(deinterpolateLinear,src_number),invert=scale.invert,domain=scale.domain,formatMillisecond=format(".%L"),formatSecond=format(":%S"),formatMinute=format("%I:%M"),formatHour=format("%I %p"),formatDay=format("%a %d"),formatWeek=format("%b %d"),formatMonth=format("%B"),formatYear=format("%Y"),tickIntervals=[[second,1,time_durationSecond],[second,5,5*time_durationSecond],[second,15,15*time_durationSecond],[second,30,30*time_durationSecond],[minute,1,time_durationMinute],[minute,5,5*time_durationMinute],[minute,15,15*time_durationMinute],[minute,30,30*time_durationMinute],[hour,1,time_durationHour],[hour,3,3*time_durationHour],[hour,6,6*time_durationHour],[hour,12,12*time_durationHour],[day,1,time_durationDay],[day,2,2*time_durationDay],[week,1,time_durationWeek],[month,1,durationMonth],[month,3,3*durationMonth],[year,1,durationYear]];function tickFormat(date){return(second(date)1)&&(t-=Math.floor(t));var ts=Math.abs(t-.5);return rainbow_c.h=360*t-100,rainbow_c.s=1.5-1.5*ts,rainbow_c.l=.8-.9*ts,rainbow_c+""};color_rgb(),Math.PI,Math.PI;function viridis_ramp(range){var n=range.length;return function(t){return range[Math.max(0,Math.min(n-1,Math.floor(t*n)))]}}var sequential_multi_viridis=viridis_ramp(d3_scale_chromatic_src_colors("44015444025645045745055946075a46085c460a5d460b5e470d60470e6147106347116447136548146748166848176948186a481a6c481b6d481c6e481d6f481f70482071482173482374482475482576482677482878482979472a7a472c7a472d7b472e7c472f7d46307e46327e46337f463480453581453781453882443983443a83443b84433d84433e85423f854240864241864142874144874045884046883f47883f48893e49893e4a893e4c8a3d4d8a3d4e8a3c4f8a3c508b3b518b3b528b3a538b3a548c39558c39568c38588c38598c375a8c375b8d365c8d365d8d355e8d355f8d34608d34618d33628d33638d32648e32658e31668e31678e31688e30698e306a8e2f6b8e2f6c8e2e6d8e2e6e8e2e6f8e2d708e2d718e2c718e2c728e2c738e2b748e2b758e2a768e2a778e2a788e29798e297a8e297b8e287c8e287d8e277e8e277f8e27808e26818e26828e26828e25838e25848e25858e24868e24878e23888e23898e238a8d228b8d228c8d228d8d218e8d218f8d21908d21918c20928c20928c20938c1f948c1f958b1f968b1f978b1f988b1f998a1f9a8a1e9b8a1e9c891e9d891f9e891f9f881fa0881fa1881fa1871fa28720a38620a48621a58521a68522a78522a88423a98324aa8325ab8225ac8226ad8127ad8128ae8029af7f2ab07f2cb17e2db27d2eb37c2fb47c31b57b32b67a34b67935b77937b87838b9773aba763bbb753dbc743fbc7340bd7242be7144bf7046c06f48c16e4ac16d4cc26c4ec36b50c46a52c56954c56856c66758c7655ac8645cc8635ec96260ca6063cb5f65cb5e67cc5c69cd5b6ccd5a6ece5870cf5773d05675d05477d1537ad1517cd2507fd34e81d34d84d44b86d54989d5488bd6468ed64590d74393d74195d84098d83e9bd93c9dd93ba0da39a2da37a5db36a8db34aadc32addc30b0dd2fb2dd2db5de2bb8de29bade28bddf26c0df25c2df23c5e021c8e020cae11fcde11dd0e11cd2e21bd5e21ad8e219dae319dde318dfe318e2e418e5e419e7e419eae51aece51befe51cf1e51df4e61ef6e620f8e621fbe723fde725")),viridis_magma=viridis_ramp(d3_scale_chromatic_src_colors("00000401000501010601010802010902020b02020d03030f03031204041405041606051806051a07061c08071e0907200a08220b09240c09260d0a290e0b2b100b2d110c2f120d31130d34140e36150e38160f3b180f3d19103f1a10421c10441d11471e114920114b21114e22115024125325125527125829115a2a115c2c115f2d11612f116331116533106734106936106b38106c390f6e3b0f703d0f713f0f72400f74420f75440f764510774710784910784a10794c117a4e117b4f127b51127c52137c54137d56147d57157e59157e5a167e5c167f5d177f5f187f601880621980641a80651a80671b80681c816a1c816b1d816d1d816e1e81701f81721f817320817521817621817822817922827b23827c23827e24828025828125818326818426818627818827818928818b29818c29818e2a81902a81912b81932b80942c80962c80982d80992d809b2e7f9c2e7f9e2f7fa02f7fa1307ea3307ea5317ea6317da8327daa337dab337cad347cae347bb0357bb2357bb3367ab5367ab73779b83779ba3878bc3978bd3977bf3a77c03a76c23b75c43c75c53c74c73d73c83e73ca3e72cc3f71cd4071cf4070d0416fd2426fd3436ed5446dd6456cd8456cd9466bdb476adc4869de4968df4a68e04c67e24d66e34e65e44f64e55064e75263e85362e95462ea5661eb5760ec5860ed5a5fee5b5eef5d5ef05f5ef1605df2625df2645cf3655cf4675cf4695cf56b5cf66c5cf66e5cf7705cf7725cf8745cf8765cf9785df9795df97b5dfa7d5efa7f5efa815ffb835ffb8560fb8761fc8961fc8a62fc8c63fc8e64fc9065fd9266fd9467fd9668fd9869fd9a6afd9b6bfe9d6cfe9f6dfea16efea36ffea571fea772fea973feaa74feac76feae77feb078feb27afeb47bfeb67cfeb77efeb97ffebb81febd82febf84fec185fec287fec488fec68afec88cfeca8dfecc8ffecd90fecf92fed194fed395fed597fed799fed89afdda9cfddc9efddea0fde0a1fde2a3fde3a5fde5a7fde7a9fde9aafdebacfcecaefceeb0fcf0b2fcf2b4fcf4b6fcf6b8fcf7b9fcf9bbfcfbbdfcfdbf")),viridis_inferno=viridis_ramp(d3_scale_chromatic_src_colors("00000401000501010601010802010a02020c02020e03021004031204031405041706041907051b08051d09061f0a07220b07240c08260d08290e092b10092d110a30120a32140b34150b37160b39180c3c190c3e1b0c411c0c431e0c451f0c48210c4a230c4c240c4f260c51280b53290b552b0b572d0b592f0a5b310a5c320a5e340a5f3609613809623909633b09643d09653e0966400a67420a68440a68450a69470b6a490b6a4a0c6b4c0c6b4d0d6c4f0d6c510e6c520e6d540f6d550f6d57106e59106e5a116e5c126e5d126e5f136e61136e62146e64156e65156e67166e69166e6a176e6c186e6d186e6f196e71196e721a6e741a6e751b6e771c6d781c6d7a1d6d7c1d6d7d1e6d7f1e6c801f6c82206c84206b85216b87216b88226a8a226a8c23698d23698f24699025689225689326679526679727669827669a28659b29649d29649f2a63a02a63a22b62a32c61a52c60a62d60a82e5fa92e5eab2f5ead305dae305cb0315bb1325ab3325ab43359b63458b73557b93556ba3655bc3754bd3853bf3952c03a51c13a50c33b4fc43c4ec63d4dc73e4cc83f4bca404acb4149cc4248ce4347cf4446d04545d24644d34743d44842d54a41d74b3fd84c3ed94d3dda4e3cdb503bdd513ade5238df5337e05536e15635e25734e35933e45a31e55c30e65d2fe75e2ee8602de9612bea632aeb6429eb6628ec6726ed6925ee6a24ef6c23ef6e21f06f20f1711ff1731df2741cf3761bf37819f47918f57b17f57d15f67e14f68013f78212f78410f8850ff8870ef8890cf98b0bf98c0af98e09fa9008fa9207fa9407fb9606fb9706fb9906fb9b06fb9d07fc9f07fca108fca309fca50afca60cfca80dfcaa0ffcac11fcae12fcb014fcb216fcb418fbb61afbb81dfbba1ffbbc21fbbe23fac026fac228fac42afac62df9c72ff9c932f9cb35f8cd37f8cf3af7d13df7d340f6d543f6d746f5d949f5db4cf4dd4ff4df53f4e156f3e35af3e55df2e661f2e865f2ea69f1ec6df1ed71f1ef75f1f179f2f27df2f482f3f586f3f68af4f88ef5f992f6fa96f8fb9af9fc9dfafda1fcffa4")),viridis_plasma=viridis_ramp(d3_scale_chromatic_src_colors("0d088710078813078916078a19068c1b068d1d068e20068f2206902406912605912805922a05932c05942e05952f059631059733059735049837049938049a3a049a3c049b3e049c3f049c41049d43039e44039e46039f48039f4903a04b03a14c02a14e02a25002a25102a35302a35502a45601a45801a45901a55b01a55c01a65e01a66001a66100a76300a76400a76600a76700a86900a86a00a86c00a86e00a86f00a87100a87201a87401a87501a87701a87801a87a02a87b02a87d03a87e03a88004a88104a78305a78405a78606a68707a68808a68a09a58b0aa58d0ba58e0ca48f0da4910ea3920fa39410a29511a19613a19814a099159f9a169f9c179e9d189d9e199da01a9ca11b9ba21d9aa31e9aa51f99a62098a72197a82296aa2395ab2494ac2694ad2793ae2892b02991b12a90b22b8fb32c8eb42e8db52f8cb6308bb7318ab83289ba3388bb3488bc3587bd3786be3885bf3984c03a83c13b82c23c81c33d80c43e7fc5407ec6417dc7427cc8437bc9447aca457acb4679cc4778cc4977cd4a76ce4b75cf4c74d04d73d14e72d24f71d35171d45270d5536fd5546ed6556dd7566cd8576bd9586ada5a6ada5b69db5c68dc5d67dd5e66de5f65de6164df6263e06363e16462e26561e26660e3685fe4695ee56a5de56b5de66c5ce76e5be76f5ae87059e97158e97257ea7457eb7556eb7655ec7754ed7953ed7a52ee7b51ef7c51ef7e50f07f4ff0804ef1814df1834cf2844bf3854bf3874af48849f48948f58b47f58c46f68d45f68f44f79044f79143f79342f89441f89540f9973ff9983ef99a3efa9b3dfa9c3cfa9e3bfb9f3afba139fba238fca338fca537fca636fca835fca934fdab33fdac33fdae32fdaf31fdb130fdb22ffdb42ffdb52efeb72dfeb82cfeba2cfebb2bfebd2afebe2afec029fdc229fdc328fdc527fdc627fdc827fdca26fdcb26fccd25fcce25fcd025fcd225fbd324fbd524fbd724fad824fada24f9dc24f9dd25f8df25f8e125f7e225f7e425f6e626f6e826f5e926f5eb27f4ed27f3ee27f3f027f2f227f1f426f1f525f0f724f0f921")),UNIT_GLOBAL_NAMESPACE="app.units",UNIT_LOCAL_NAMESPACE="local.units",LAYER_LOCAL_NAMESPACE="local.layers",LAYER_GLOBAL_NAMESPACE="app.layers",GROUP_GLOBAL_NAMESPACE="app.group",GROUP_LOCAL_NAMESPACE="local.group",CANVAS_LOCAL_NAMESPACE="local.canvas",CANVAS_GLOBAL_NAMESPACE="app.canvas",reserved_fields={ROW_ID:"__id__"},common_props={ACTION_INF:"actionInf",ON_LAYER_DRAW:"onLayerDraw",MATRIX_CREATED:"matrixCreated"},src_array_slice=Array.prototype.slice,d3_axis_src_identity=function(x){return x},axis_top=1,axis_right=2,axis_bottom=3,axis_left=4,epsilon=1e-6;function translateX(x){return"translate("+(x+.5)+",0)"}function translateY(y){return"translate(0,"+(y+.5)+")"}function entering(){return!this.__axis}function axis_axis(orient,scale){var tickArguments=[],tickValues=null,tickFormat=null,tickTransform=null,tickSizeInner=6,tickSizeOuter=6,tickPadding=3,k=orient===axis_top||orient===axis_left?-1:1,x=orient===axis_left||orient===axis_right?"x":"y",transform=orient===axis_top||orient===axis_bottom?translateX:translateY;function axis(context){var values=null==tickValues?scale.ticks?scale.ticks.apply(scale,tickArguments):scale.domain():tickValues,format=null==tickFormat?scale.tickFormat?scale.tickFormat.apply(scale,tickArguments):d3_axis_src_identity:tickFormat,spacing=Math.max(tickSizeInner,0)+tickPadding,range=scale.range(),range0=+range[0]+.5,range1=+range[range.length-1]+.5,position=(scale.bandwidth?function axis_center(scale){var offset=Math.max(0,scale.bandwidth()-1)/2;return scale.round()&&(offset=Math.round(offset)),function(d){return+scale(d)+offset}}:function axis_number(scale){return function(d){return+scale(d)}})(scale.copy()),selection=context.selection?context.selection():context,path=selection.selectAll(".domain").data([null]),tick=selection.selectAll(".tick").data(values,scale).order(),tickExit=tick.exit(),tickEnter=tick.enter().append("g").attr("class","tick"),line=tick.select("line"),text=tick.select("text");path=path.merge(path.enter().insert("path",".tick").attr("class","domain").attr("stroke","#000")),tick=tick.merge(tickEnter),line=line.merge(tickEnter.append("line").attr("stroke","#000").attr(x+"2",k*tickSizeInner)),text=text.merge(tickEnter.append("text").attr("fill","#000").attr(x,k*spacing).attr("dy",orient===axis_top?"0em":orient===axis_bottom?"0.71em":"0.32em")).style("transform",tickTransform),context!==selection&&(path=path.transition(context),tick=tick.transition(context),line=line.transition(context),text=text.transition(context),tickExit=tickExit.transition(context).attr("opacity",epsilon).attr("transform",function(d){return isFinite(d=position(d))?transform(d):this.getAttribute("transform")}),tickEnter.attr("opacity",epsilon).attr("transform",function(d){var p=this.parentNode.__axis;return transform(p&&isFinite(p=p(d))?p:position(d))})),tickExit.remove(),path.attr("d",orient===axis_left||orient==axis_right?"M"+k*tickSizeOuter+","+range0+"H0.5V"+range1+"H"+k*tickSizeOuter:"M"+range0+","+k*tickSizeOuter+"V0.5H"+range1+"V"+k*tickSizeOuter),tick.attr("opacity",1).attr("transform",function(d){return transform(position(d))}),line.attr(x+"2",k*tickSizeInner),text.attr(x,k*spacing).text(format),selection.filter(entering).attr("fill","none").attr("font-size",10).attr("font-family","sans-serif").attr("text-anchor",orient===axis_right?"start":orient===axis_left?"end":"middle"),selection.each(function(){this.__axis=position})}return axis.scale=function(_){return arguments.length?(scale=_,axis):scale},axis.tickTransform=function(_){return arguments.length?(tickTransform=_,axis):tickTransform},axis.ticks=function(){return tickArguments=src_array_slice.call(arguments),axis},axis.tickArguments=function(_){return arguments.length?(tickArguments=null==_?[]:src_array_slice.call(_),axis):tickArguments.slice()},axis.tickValues=function(_){return arguments.length?(tickValues=null==_?null:src_array_slice.call(_),axis):tickValues&&tickValues.slice()},axis.tickFormat=function(_){return arguments.length?(tickFormat=_,axis):tickFormat},axis.tickSize=function(_){return arguments.length?(tickSizeInner=tickSizeOuter=+_,axis):tickSizeInner},axis.tickSizeInner=function(_){return arguments.length?(tickSizeInner=+_,axis):tickSizeInner},axis.tickSizeOuter=function(_){return arguments.length?(tickSizeOuter=+_,axis):tickSizeOuter},axis.tickPadding=function(_){return arguments.length?(tickPadding=+_,axis):tickPadding},axis}var pi=Math.PI,tau=2*pi,tauEpsilon=tau-1e-6;function Path(){this._x0=this._y0=this._x1=this._y1=null,this._=""}function path_path(){return new Path}Path.prototype=path_path.prototype={constructor:Path,moveTo:function moveTo(x,y){this._+="M"+(this._x0=this._x1=+x)+","+(this._y0=this._y1=+y)},closePath:function closePath(){null!==this._x1&&(this._x1=this._x0,this._y1=this._y0,this._+="Z")},lineTo:function lineTo(x,y){this._+="L"+(this._x1=+x)+","+(this._y1=+y)},quadraticCurveTo:function quadraticCurveTo(x1,y1,x,y){this._+="Q"+ +x1+","+ +y1+","+(this._x1=+x)+","+(this._y1=+y)},bezierCurveTo:function bezierCurveTo(x1,y1,x2,y2,x,y){this._+="C"+ +x1+","+ +y1+","+ +x2+","+ +y2+","+(this._x1=+x)+","+(this._y1=+y)},arcTo:function arcTo(x1,y1,x2,y2,r){x1=+x1,y1=+y1,x2=+x2,y2=+y2,r=+r;var x0=this._x1,y0=this._y1,x21=x2-x1,y21=y2-y1,x01=x0-x1,y01=y0-y1,l01_2=x01*x01+y01*y01;if(r<0)throw new Error("negative radius: "+r);if(null===this._x1)this._+="M"+(this._x1=x1)+","+(this._y1=y1);else if(l01_2>1e-6)if(Math.abs(y01*x21-y21*x01)>1e-6&&r){var x20=x2-x0,y20=y2-y0,l21_2=x21*x21+y21*y21,l20_2=x20*x20+y20*y20,l21=Math.sqrt(l21_2),l01=Math.sqrt(l01_2),l=r*Math.tan((pi-Math.acos((l21_2+l01_2-l20_2)/(2*l21*l01)))/2),t01=l/l01,t21=l/l21;Math.abs(t01-1)>1e-6&&(this._+="L"+(x1+t01*x01)+","+(y1+t01*y01)),this._+="A"+r+","+r+",0,0,"+ +(y01*x20>x01*y20)+","+(this._x1=x1+t21*x21)+","+(this._y1=y1+t21*y21)}else this._+="L"+(this._x1=x1)+","+(this._y1=y1);else;},arc:function arc(x,y,r,a0,a1,ccw){x=+x,y=+y;var dx=(r=+r)*Math.cos(a0),dy=r*Math.sin(a0),x0=x+dx,y0=y+dy,cw=1^ccw,da=ccw?a0-a1:a1-a0;if(r<0)throw new Error("negative radius: "+r);null===this._x1?this._+="M"+x0+","+y0:(Math.abs(this._x1-x0)>1e-6||Math.abs(this._y1-y0)>1e-6)&&(this._+="L"+x0+","+y0),r&&(da<0&&(da=da%tau+tau),da>tauEpsilon?this._+="A"+r+","+r+",0,1,"+cw+","+(x-dx)+","+(y-dy)+"A"+r+","+r+",0,1,"+cw+","+(this._x1=x0)+","+(this._y1=y0):da>1e-6&&(this._+="A"+r+","+r+",0,"+ +(da>=pi)+","+cw+","+(this._x1=x+r*Math.cos(a1))+","+(this._y1=y+r*Math.sin(a1))))},rect:function rect(x,y,w,h){this._+="M"+(this._x0=this._x1=+x)+","+(this._y0=this._y1=+y)+"h"+ +w+"v"+ +h+"h"+-w+"Z"},toString:function toString(){return this._}};var src_path=path_path,d3_shape_src_constant=function(x){return function constant(){return x}},abs=Math.abs,atan2=Math.atan2,cos=Math.cos,math_max=Math.max,math_min=Math.min,sin=Math.sin,math_sqrt=Math.sqrt,math_epsilon=1e-12,math_pi=Math.PI,halfPi=math_pi/2,math_tau=2*math_pi;function asin(x){return x>=1?halfPi:x<=-1?-halfPi:Math.asin(x)}function arcInnerRadius(d){return d.innerRadius}function arcOuterRadius(d){return d.outerRadius}function arcStartAngle(d){return d.startAngle}function arcEndAngle(d){return d.endAngle}function arcPadAngle(d){return d&&d.padAngle}function cornerTangents(x0,y0,x1,y1,r1,rc,cw){var x01=x0-x1,y01=y0-y1,lo=(cw?rc:-rc)/math_sqrt(x01*x01+y01*y01),ox=lo*y01,oy=-lo*x01,x11=x0+ox,y11=y0+oy,x10=x1+ox,y10=y1+oy,x00=(x11+x10)/2,y00=(y11+y10)/2,dx=x10-x11,dy=y10-y11,d2=dx*dx+dy*dy,r=r1-rc,D=x11*y10-x10*y11,d=(dy<0?-1:1)*math_sqrt(math_max(0,r*r*d2-D*D)),cx0=(D*dy-dx*d)/d2,cy0=(-D*dx-dy*d)/d2,cx1=(D*dy+dx*d)/d2,cy1=(-D*dx+dy*d)/d2,dx0=cx0-x00,dy0=cy0-y00,dx1=cx1-x00,dy1=cy1-y00;return dx0*dx0+dy0*dy0>dx1*dx1+dy1*dy1&&(cx0=cx1,cy0=cy1),{cx:cx0,cy:cy0,x01:-ox,y01:-oy,x11:cx0*(r1/r-1),y11:cy0*(r1/r-1)}}function Linear(context){this._context=context}Linear.prototype={areaStart:function areaStart(){this._line=0},areaEnd:function areaEnd(){this._line=NaN},lineStart:function lineStart(){this._point=0},lineEnd:function lineEnd(){(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function point(x,y){switch(x=+x,y=+y,this._point){case 0:this._point=1,this._line?this._context.lineTo(x,y):this._context.moveTo(x,y);break;case 1:this._point=2;default:this._context.lineTo(x,y)}}};var curve_linear=function(context){return new Linear(context)};function point_x(p){return p[0]}function point_y(p){return p[1]}var src_line=function(){var x=point_x,y=point_y,defined=d3_shape_src_constant(!0),context=null,curve=curve_linear,output=null;function line(data){var i,d,buffer,n=data.length,defined0=!1;for(null==context&&(output=curve(buffer=src_path())),i=0;i<=n;++i)!(i=j;--k)output.point(x0z[k],y0z[k]);output.lineEnd(),output.areaEnd()}defined0&&(x0z[i]=+x0(d,i,data),y0z[i]=+y0(d,i,data),output.point(x1?+x1(d,i,data):x0z[i],y1?+y1(d,i,data):y0z[i]))}if(buffer)return output=null,buffer+""||null}function arealine(){return src_line().defined(defined).curve(curve).context(context)}return area.x=function(_){return arguments.length?(x0="function"==typeof _?_:d3_shape_src_constant(+_),x1=null,area):x0},area.x0=function(_){return arguments.length?(x0="function"==typeof _?_:d3_shape_src_constant(+_),area):x0},area.x1=function(_){return arguments.length?(x1=null==_?null:"function"==typeof _?_:d3_shape_src_constant(+_),area):x1},area.y=function(_){return arguments.length?(y0="function"==typeof _?_:d3_shape_src_constant(+_),y1=null,area):y0},area.y0=function(_){return arguments.length?(y0="function"==typeof _?_:d3_shape_src_constant(+_),area):y0},area.y1=function(_){return arguments.length?(y1=null==_?null:"function"==typeof _?_:d3_shape_src_constant(+_),area):y1},area.lineX0=area.lineY0=function(){return arealine().x(x0).y(y0)},area.lineY1=function(){return arealine().x(x0).y(y1)},area.lineX1=function(){return arealine().x(x1).y(y0)},area.defined=function(_){return arguments.length?(defined="function"==typeof _?_:d3_shape_src_constant(!!_),area):defined},area.curve=function(_){return arguments.length?(curve=_,null!=context&&(output=curve(context)),area):curve},area.context=function(_){return arguments.length?(null==_?context=output=null:output=curve(context=_),area):context},area},src_descending=function(a,b){return ba?1:b>=a?0:NaN},d3_shape_src_identity=function(d){return d};curveRadial(curve_linear);function Radial(curve){this._curve=curve}function curveRadial(curve){function radial(context){return new Radial(curve(context))}return radial._curve=curve,radial}Radial.prototype={areaStart:function areaStart(){this._curve.areaStart()},areaEnd:function areaEnd(){this._curve.areaEnd()},lineStart:function lineStart(){this._curve.lineStart()},lineEnd:function lineEnd(){this._curve.lineEnd()},point:function point(a,r){this._curve.point(r*Math.sin(a),r*-Math.cos(a))}};var d3_shape_src_array_slice=Array.prototype.slice;var symbol_circle={draw:function draw(context,size){var r=Math.sqrt(size/math_pi);context.moveTo(r,0),context.arc(0,0,r,0,math_tau)}},symbol_cross={draw:function draw(context,size){var r=Math.sqrt(size/5)/2;context.moveTo(-3*r,-r),context.lineTo(-r,-r),context.lineTo(-r,-3*r),context.lineTo(r,-3*r),context.lineTo(r,-r),context.lineTo(3*r,-r),context.lineTo(3*r,r),context.lineTo(r,r),context.lineTo(r,3*r),context.lineTo(-r,3*r),context.lineTo(-r,r),context.lineTo(-3*r,r),context.closePath()}},tan30=Math.sqrt(1/3),tan30_2=2*tan30,diamond={draw:function draw(context,size){var y=Math.sqrt(size/tan30_2),x=y*tan30;context.moveTo(0,-y),context.lineTo(x,0),context.lineTo(0,y),context.lineTo(-x,0),context.closePath()}},kr=Math.sin(math_pi/10)/Math.sin(7*math_pi/10),kx=Math.sin(math_tau/10)*kr,ky=-Math.cos(math_tau/10)*kr,star={draw:function draw(context,size){var r=Math.sqrt(.8908130915292852*size),x=kx*r,y=ky*r;context.moveTo(0,-r),context.lineTo(x,y);for(var i=1;i<5;++i){var a=math_tau*i/5,c=Math.cos(a),s=Math.sin(a);context.lineTo(s*r,-c*r),context.lineTo(c*x-s*y,s*x+c*y)}context.closePath()}},square={draw:function draw(context,size){var w=Math.sqrt(size),x=-w/2;context.rect(x,x,w,w)}},sqrt3=Math.sqrt(3),triangle={draw:function draw(context,size){var y=-Math.sqrt(size/(3*sqrt3));context.moveTo(0,2*y),context.lineTo(-sqrt3*y,-y),context.lineTo(sqrt3*y,-y),context.closePath()}},wye_s=Math.sqrt(3)/2,wye_k=1/Math.sqrt(12),wye_a=3*(wye_k/2+1),wye={draw:function draw(context,size){var r=Math.sqrt(size/wye_a),x0=r/2,y0=r*wye_k,x1=x0,y1=r*wye_k+r,x2=-x1,y2=y1;context.moveTo(x0,y0),context.lineTo(x1,y1),context.lineTo(x2,y2),context.lineTo(-.5*x0-wye_s*y0,wye_s*x0+-.5*y0),context.lineTo(-.5*x1-wye_s*y1,wye_s*x1+-.5*y1),context.lineTo(-.5*x2-wye_s*y2,wye_s*x2+-.5*y2),context.lineTo(-.5*x0+wye_s*y0,-.5*y0-wye_s*x0),context.lineTo(-.5*x1+wye_s*y1,-.5*y1-wye_s*x1),context.lineTo(-.5*x2+wye_s*y2,-.5*y2-wye_s*x2),context.closePath()}},noop=function(){};function _point(that,x,y){that._context.bezierCurveTo((2*that._x0+that._x1)/3,(2*that._y0+that._y1)/3,(that._x0+2*that._x1)/3,(that._y0+2*that._y1)/3,(that._x0+4*that._x1+x)/6,(that._y0+4*that._y1+y)/6)}function Basis(context){this._context=context}Basis.prototype={areaStart:function areaStart(){this._line=0},areaEnd:function areaEnd(){this._line=NaN},lineStart:function lineStart(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function lineEnd(){switch(this._point){case 3:_point(this,this._x1,this._y1);case 2:this._context.lineTo(this._x1,this._y1)}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function point(x,y){switch(x=+x,y=+y,this._point){case 0:this._point=1,this._line?this._context.lineTo(x,y):this._context.moveTo(x,y);break;case 1:this._point=2;break;case 2:this._point=3,this._context.lineTo((5*this._x0+this._x1)/6,(5*this._y0+this._y1)/6);default:_point(this,x,y)}this._x0=this._x1,this._x1=x,this._y0=this._y1,this._y1=y}};function BasisClosed(context){this._context=context}BasisClosed.prototype={areaStart:noop,areaEnd:noop,lineStart:function lineStart(){this._x0=this._x1=this._x2=this._x3=this._x4=this._y0=this._y1=this._y2=this._y3=this._y4=NaN,this._point=0},lineEnd:function lineEnd(){switch(this._point){case 1:this._context.moveTo(this._x2,this._y2),this._context.closePath();break;case 2:this._context.moveTo((this._x2+2*this._x3)/3,(this._y2+2*this._y3)/3),this._context.lineTo((this._x3+2*this._x2)/3,(this._y3+2*this._y2)/3),this._context.closePath();break;case 3:this.point(this._x2,this._y2),this.point(this._x3,this._y3),this.point(this._x4,this._y4)}},point:function point(x,y){switch(x=+x,y=+y,this._point){case 0:this._point=1,this._x2=x,this._y2=y;break;case 1:this._point=2,this._x3=x,this._y3=y;break;case 2:this._point=3,this._x4=x,this._y4=y,this._context.moveTo((this._x0+4*this._x1+x)/6,(this._y0+4*this._y1+y)/6);break;default:_point(this,x,y)}this._x0=this._x1,this._x1=x,this._y0=this._y1,this._y1=y}};function BasisOpen(context){this._context=context}BasisOpen.prototype={areaStart:function areaStart(){this._line=0},areaEnd:function areaEnd(){this._line=NaN},lineStart:function lineStart(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function lineEnd(){(this._line||0!==this._line&&3===this._point)&&this._context.closePath(),this._line=1-this._line},point:function point(x,y){switch(x=+x,y=+y,this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3;var x0=(this._x0+4*this._x1+x)/6,y0=(this._y0+4*this._y1+y)/6;this._line?this._context.lineTo(x0,y0):this._context.moveTo(x0,y0);break;case 3:this._point=4;default:_point(this,x,y)}this._x0=this._x1,this._x1=x,this._y0=this._y1,this._y1=y}};function Bundle(context,beta){this._basis=new Basis(context),this._beta=beta}Bundle.prototype={lineStart:function lineStart(){this._x=[],this._y=[],this._basis.lineStart()},lineEnd:function lineEnd(){var x=this._x,y=this._y,j=x.length-1;if(j>0)for(var t,x0=x[0],y0=y[0],dx=x[j]-x0,dy=y[j]-y0,i=-1;++i<=j;)t=i/j,this._basis.point(this._beta*x[i]+(1-this._beta)*(x0+t*dx),this._beta*y[i]+(1-this._beta)*(y0+t*dy));this._x=this._y=null,this._basis.lineEnd()},point:function point(x,y){this._x.push(+x),this._y.push(+y)}};(function custom(beta){function bundle(context){return 1===beta?new Basis(context):new Bundle(context,beta)}return bundle.beta=function(beta){return custom(+beta)},bundle})(.85);function cardinal_point(that,x,y){that._context.bezierCurveTo(that._x1+that._k*(that._x2-that._x0),that._y1+that._k*(that._y2-that._y0),that._x2+that._k*(that._x1-x),that._y2+that._k*(that._y1-y),that._x2,that._y2)}function Cardinal(context,tension){this._context=context,this._k=(1-tension)/6}Cardinal.prototype={areaStart:function areaStart(){this._line=0},areaEnd:function areaEnd(){this._line=NaN},lineStart:function lineStart(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._point=0},lineEnd:function lineEnd(){switch(this._point){case 2:this._context.lineTo(this._x2,this._y2);break;case 3:cardinal_point(this,this._x1,this._y1)}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function point(x,y){switch(x=+x,y=+y,this._point){case 0:this._point=1,this._line?this._context.lineTo(x,y):this._context.moveTo(x,y);break;case 1:this._point=2,this._x1=x,this._y1=y;break;case 2:this._point=3;default:cardinal_point(this,x,y)}this._x0=this._x1,this._x1=this._x2,this._x2=x,this._y0=this._y1,this._y1=this._y2,this._y2=y}};(function custom(tension){function cardinal(context){return new Cardinal(context,tension)}return cardinal.tension=function(tension){return custom(+tension)},cardinal})(0);function CardinalClosed(context,tension){this._context=context,this._k=(1-tension)/6}CardinalClosed.prototype={areaStart:noop,areaEnd:noop,lineStart:function lineStart(){this._x0=this._x1=this._x2=this._x3=this._x4=this._x5=this._y0=this._y1=this._y2=this._y3=this._y4=this._y5=NaN,this._point=0},lineEnd:function lineEnd(){switch(this._point){case 1:this._context.moveTo(this._x3,this._y3),this._context.closePath();break;case 2:this._context.lineTo(this._x3,this._y3),this._context.closePath();break;case 3:this.point(this._x3,this._y3),this.point(this._x4,this._y4),this.point(this._x5,this._y5)}},point:function point(x,y){switch(x=+x,y=+y,this._point){case 0:this._point=1,this._x3=x,this._y3=y;break;case 1:this._point=2,this._context.moveTo(this._x4=x,this._y4=y);break;case 2:this._point=3,this._x5=x,this._y5=y;break;default:cardinal_point(this,x,y)}this._x0=this._x1,this._x1=this._x2,this._x2=x,this._y0=this._y1,this._y1=this._y2,this._y2=y}};(function custom(tension){function cardinal(context){return new CardinalClosed(context,tension)}return cardinal.tension=function(tension){return custom(+tension)},cardinal})(0);function CardinalOpen(context,tension){this._context=context,this._k=(1-tension)/6}CardinalOpen.prototype={areaStart:function areaStart(){this._line=0},areaEnd:function areaEnd(){this._line=NaN},lineStart:function lineStart(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._point=0},lineEnd:function lineEnd(){(this._line||0!==this._line&&3===this._point)&&this._context.closePath(),this._line=1-this._line},point:function point(x,y){switch(x=+x,y=+y,this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3,this._line?this._context.lineTo(this._x2,this._y2):this._context.moveTo(this._x2,this._y2);break;case 3:this._point=4;default:cardinal_point(this,x,y)}this._x0=this._x1,this._x1=this._x2,this._x2=x,this._y0=this._y1,this._y1=this._y2,this._y2=y}};(function custom(tension){function cardinal(context){return new CardinalOpen(context,tension)}return cardinal.tension=function(tension){return custom(+tension)},cardinal})(0);function catmullRom_point(that,x,y){var x1=that._x1,y1=that._y1,x2=that._x2,y2=that._y2;if(that._l01_a>math_epsilon){var a=2*that._l01_2a+3*that._l01_a*that._l12_a+that._l12_2a,n=3*that._l01_a*(that._l01_a+that._l12_a);x1=(x1*a-that._x0*that._l12_2a+that._x2*that._l01_2a)/n,y1=(y1*a-that._y0*that._l12_2a+that._y2*that._l01_2a)/n}if(that._l23_a>math_epsilon){var b=2*that._l23_2a+3*that._l23_a*that._l12_a+that._l12_2a,m=3*that._l23_a*(that._l23_a+that._l12_a);x2=(x2*b+that._x1*that._l23_2a-x*that._l12_2a)/m,y2=(y2*b+that._y1*that._l23_2a-y*that._l12_2a)/m}that._context.bezierCurveTo(x1,y1,x2,y2,that._x2,that._y2)}function CatmullRom(context,alpha){this._context=context,this._alpha=alpha}CatmullRom.prototype={areaStart:function areaStart(){this._line=0},areaEnd:function areaEnd(){this._line=NaN},lineStart:function lineStart(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function lineEnd(){switch(this._point){case 2:this._context.lineTo(this._x2,this._y2);break;case 3:this.point(this._x2,this._y2)}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function point(x,y){if(x=+x,y=+y,this._point){var x23=this._x2-x,y23=this._y2-y;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(x23*x23+y23*y23,this._alpha))}switch(this._point){case 0:this._point=1,this._line?this._context.lineTo(x,y):this._context.moveTo(x,y);break;case 1:this._point=2;break;case 2:this._point=3;default:catmullRom_point(this,x,y)}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=x,this._y0=this._y1,this._y1=this._y2,this._y2=y}};var curve_catmullRom=function custom(alpha){function catmullRom(context){return alpha?new CatmullRom(context,alpha):new Cardinal(context,0)}return catmullRom.alpha=function(alpha){return custom(+alpha)},catmullRom}(.5);function CatmullRomClosed(context,alpha){this._context=context,this._alpha=alpha}CatmullRomClosed.prototype={areaStart:noop,areaEnd:noop,lineStart:function lineStart(){this._x0=this._x1=this._x2=this._x3=this._x4=this._x5=this._y0=this._y1=this._y2=this._y3=this._y4=this._y5=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function lineEnd(){switch(this._point){case 1:this._context.moveTo(this._x3,this._y3),this._context.closePath();break;case 2:this._context.lineTo(this._x3,this._y3),this._context.closePath();break;case 3:this.point(this._x3,this._y3),this.point(this._x4,this._y4),this.point(this._x5,this._y5)}},point:function point(x,y){if(x=+x,y=+y,this._point){var x23=this._x2-x,y23=this._y2-y;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(x23*x23+y23*y23,this._alpha))}switch(this._point){case 0:this._point=1,this._x3=x,this._y3=y;break;case 1:this._point=2,this._context.moveTo(this._x4=x,this._y4=y);break;case 2:this._point=3,this._x5=x,this._y5=y;break;default:catmullRom_point(this,x,y)}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=x,this._y0=this._y1,this._y1=this._y2,this._y2=y}};(function custom(alpha){function catmullRom(context){return alpha?new CatmullRomClosed(context,alpha):new CardinalClosed(context,0)}return catmullRom.alpha=function(alpha){return custom(+alpha)},catmullRom})(.5);function CatmullRomOpen(context,alpha){this._context=context,this._alpha=alpha}CatmullRomOpen.prototype={areaStart:function areaStart(){this._line=0},areaEnd:function areaEnd(){this._line=NaN},lineStart:function lineStart(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function lineEnd(){(this._line||0!==this._line&&3===this._point)&&this._context.closePath(),this._line=1-this._line},point:function point(x,y){if(x=+x,y=+y,this._point){var x23=this._x2-x,y23=this._y2-y;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(x23*x23+y23*y23,this._alpha))}switch(this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3,this._line?this._context.lineTo(this._x2,this._y2):this._context.moveTo(this._x2,this._y2);break;case 3:this._point=4;default:catmullRom_point(this,x,y)}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=x,this._y0=this._y1,this._y1=this._y2,this._y2=y}};(function custom(alpha){function catmullRom(context){return alpha?new CatmullRomOpen(context,alpha):new CardinalOpen(context,0)}return catmullRom.alpha=function(alpha){return custom(+alpha)},catmullRom})(.5);function LinearClosed(context){this._context=context}LinearClosed.prototype={areaStart:noop,areaEnd:noop,lineStart:function lineStart(){this._point=0},lineEnd:function lineEnd(){this._point&&this._context.closePath()},point:function point(x,y){x=+x,y=+y,this._point?this._context.lineTo(x,y):(this._point=1,this._context.moveTo(x,y))}};function monotone_sign(x){return x<0?-1:1}function slope3(that,x2,y2){var h0=that._x1-that._x0,h1=x2-that._x1,s0=(that._y1-that._y0)/(h0||h1<0&&-0),s1=(y2-that._y1)/(h1||h0<0&&-0),p=(s0*h1+s1*h0)/(h0+h1);return(monotone_sign(s0)+monotone_sign(s1))*Math.min(Math.abs(s0),Math.abs(s1),.5*Math.abs(p))||0}function slope2(that,t){var h=that._x1-that._x0;return h?(3*(that._y1-that._y0)/h-t)/2:t}function monotone_point(that,t0,t1){var x0=that._x0,y0=that._y0,x1=that._x1,y1=that._y1,dx=(x1-x0)/3;that._context.bezierCurveTo(x0+dx,y0+dx*t0,x1-dx,y1-dx*t1,x1,y1)}function MonotoneX(context){this._context=context}function MonotoneY(context){this._context=new ReflectContext(context)}function ReflectContext(context){this._context=context}function Natural(context){this._context=context}function controlPoints(x){var i,m,n=x.length-1,a=new Array(n),b=new Array(n),r=new Array(n);for(a[0]=0,b[0]=2,r[0]=x[0]+2*x[1],i=1;i=0;--i)a[i]=(r[i]-a[i+1])/b[i];for(b[n-1]=(x[n]+a[n-1])/2,i=0;i=0&&(this._t=1-this._t,this._line=1-this._line)},point:function point(x,y){switch(x=+x,y=+y,this._point){case 0:this._point=1,this._line?this._context.lineTo(x,y):this._context.moveTo(x,y);break;case 1:this._point=2;default:if(this._t<=0)this._context.lineTo(this._x,y),this._context.lineTo(x,y);else{var x1=this._x*(1-this._t)+x*this._t;this._context.lineTo(x1,this._y),this._context.lineTo(x1,y)}}this._x=x,this._y=y}};var curve_step=function(context){return new Step(context,.5)};function stepBefore(context){return new Step(context,0)}function stepAfter(context){return new Step(context,1)}var none=function(series,order){if((n=series.length)>1)for(var j,s0,n,i=1,s1=series[order[0]],m=s1.length;i=0;)o[n]=n;return o};function stackValue(d,key){return d[key]}var order_ascending=function(series){var sums=series.map(ascending_sum);return order_none(series).sort(function(a,b){return sums[a]-sums[b]})};function ascending_sum(series){for(var v,s=0,i=-1,n=series.length;++i0)){if(r/=dx,dx<0){if(r0){if(r>t1)return;r>t0&&(t0=r)}if(r=x1-ax,dx||!(r<0)){if(r/=dx,dx<0){if(r>t1)return;r>t0&&(t0=r)}else if(dx>0){if(r0)){if(r/=dy,dy<0){if(r0){if(r>t1)return;r>t0&&(t0=r)}if(r=y1-ay,dy||!(r<0)){if(r/=dy,dy<0){if(r>t1)return;r>t0&&(t0=r)}else if(dy>0){if(r0||t1<1)||(t0>0&&(edge[0]=[ax+t0*dx,ay+t0*dy]),t1<1&&(edge[1]=[ax+t1*dx,ay+t1*dy]),!0)}}}}}function connectEdge(edge,x0,y0,x1,y1){var v1=edge[1];if(v1)return!0;var fm,fb,v0=edge[0],left=edge.left,right=edge.right,lx=left[0],ly=left[1],rx=right[0],ry=right[1],fx=(lx+rx)/2,fy=(ly+ry)/2;if(ry===ly){if(fx=x1)return;if(lx>rx){if(v0){if(v0[1]>=y1)return}else v0=[fx,y0];v1=[fx,y1]}else{if(v0){if(v0[1]1)if(lx>rx){if(v0){if(v0[1]>=y1)return}else v0=[(y0-fb)/fm,y0];v1=[(y1-fb)/fm,y1]}else{if(v0){if(v0[1]=x1)return}else v0=[x0,fm*x0+fb];v1=[x1,fm*x1+fb]}else{if(v0){if(v0[0]=-Diagram_epsilon2)){var ha=ax*ax+ay*ay,hc=cx*cx+cy*cy,x=(cy*ha-ay*hc)/d,y=(ax*hc-cx*ha)/d,circle=circlePool.pop()||new function Circle(){RedBlackNode(this),this.x=this.y=this.arc=this.site=this.cy=null};circle.arc=arc,circle.site=cSite,circle.x=x+bx,circle.y=(circle.cy=y+by)+Math.sqrt(x*x+y*y),arc.circle=circle;for(var before=null,node=circles._;node;)if(circle.yDiagram_epsilon)node=node.L;else{if(!((dxr=x-rightBreakPoint(node,directrix))>Diagram_epsilon)){dxl>-Diagram_epsilon?(lArc=node.P,rArc=node):dxr>-Diagram_epsilon?(lArc=node,rArc=node.N):lArc=rArc=node;break}if(!node.R){lArc=node;break}node=node.R}!function createCell(site){return Diagram_cells[site.index]={site:site,halfedges:[]}}(site);var newArc=createBeach(site);if(beaches.insert(lArc,newArc),lArc||rArc){if(lArc===rArc)return detachCircle(lArc),rArc=createBeach(lArc.site),beaches.insert(newArc,rArc),newArc.edge=rArc.edge=createEdge(lArc.site,newArc.site),attachCircle(lArc),void attachCircle(rArc);if(rArc){detachCircle(lArc),detachCircle(rArc);var lSite=lArc.site,ax=lSite[0],ay=lSite[1],bx=site[0]-ax,by=site[1]-ay,rSite=rArc.site,cx=rSite[0]-ax,cy=rSite[1]-ay,d=2*(bx*cy-by*cx),hb=bx*bx+by*by,hc=cx*cx+cy*cy,vertex=[(cy*hb-by*hc)/d+ax,(bx*hc-cx*hb)/d+ay];setEdgeEnd(rArc.edge,lSite,rSite,vertex),newArc.edge=createEdge(lSite,site,null,vertex),rArc.edge=createEdge(site,rSite,null,vertex),attachCircle(lArc),attachCircle(rArc)}else newArc.edge=createEdge(lArc.site,newArc.site)}}function leftBreakPoint(arc,directrix){var site=arc.site,rfocx=site[0],rfocy=site[1],pby2=rfocy-directrix;if(!pby2)return rfocx;var lArc=arc.P;if(!lArc)return-1/0;var lfocx=(site=lArc.site)[0],lfocy=site[1],plby2=lfocy-directrix;if(!plby2)return lfocx;var hl=lfocx-rfocx,aby2=1/pby2-1/plby2,b=hl/plby2;return aby2?(-b+Math.sqrt(b*b-2*aby2*(hl*hl/(-2*plby2)-lfocy+plby2/2+rfocy-pby2/2)))/aby2+rfocx:(rfocx+lfocx)/2}function rightBreakPoint(arc,directrix){var rArc=arc.N;if(rArc)return leftBreakPoint(rArc,directrix);var site=arc.site;return site[1]===directrix?site[0]:1/0}var beaches,Diagram_cells,circles,Diagram_edges,Diagram_epsilon=1e-6,Diagram_epsilon2=1e-12;function triangleArea(a,b,c){return(a[0]-c[0])*(b[1]-a[1])-(a[0]-b[0])*(c[1]-a[1])}function lexicographic(a,b){return b[1]-a[1]||b[0]-a[0]}function Diagram(sites,extent){var x,y,circle,site=sites.sort(lexicographic).pop();for(Diagram_edges=[],Diagram_cells=new Array(sites.length),beaches=new src_RedBlackTree,circles=new src_RedBlackTree;;)if(circle=firstCircle,site&&(!circle||site[1]Diagram_epsilon||Math.abs(edge[0][1]-edge[1][1])>Diagram_epsilon)||delete Diagram_edges[i]}(x0,y0,x1,y1),function clipCells(x0,y0,x1,y1){var iCell,cell,site,iHalfedge,halfedges,nHalfedges,start,startX,startY,end,endX,endY,nCells=Diagram_cells.length,cover=!0;for(iCell=0;iCellDiagram_epsilon||Math.abs(endY-startY)>Diagram_epsilon)&&(halfedges.splice(iHalfedge,0,Diagram_edges.push(createBorderEdge(site,end,Math.abs(endX-x0)Diagram_epsilon?[x0,Math.abs(startX-x0)Diagram_epsilon?[Math.abs(startY-y1)Diagram_epsilon?[x1,Math.abs(startX-x1)Diagram_epsilon?[Math.abs(startY-y0)=n)return null;var dx=x-cell.site[0],dy=y-cell.site[1],d2=dx*dx+dy*dy;do{cell=that.cells[i0=i1],i1=null,cell.halfedges.forEach(function(e){var edge=that.edges[e],v=edge.left;if(v!==cell.site&&v||(v=edge.right)){var vx=x-v[0],vy=y-v[1],v2=vx*vx+vy*vy;v2this._data.length)for(var i=this._data.length;ivalue?0===high?high:"left"===side?high-1:high:high===arr.length-1?high:"left"===side?high:high+1},getNearestValue=function getNearestValue(data,key){var filterData=data.filter(function(d){return"number"==typeof d});return filterData[common_utils_getClosestIndexOf(filterData,key)]},getWindow=function getWindow(){return window},getQualifiedClassName=(requestAnimationFrame,cancelAnimationFrame,function getQualifiedClassName(cls,id,prefix){return cls=cls.replace(/^\.*/,""),["".concat(prefix,"-").concat(cls),"".concat(prefix,"-").concat(cls,"-").concat(id)]}),defaultValue=function defaultValue(param,value){return void 0===param||"object"===common_utils_typeof(param)&&!param?value:param},getDependencyOrder=function getDependencyOrder(graph){for(var dependencyOrder=[],visited={},keys=Object.keys(graph),visit=function visit(name){if(dependencyOrder.length===keys.length)return!0;visited[name]=!0;for(var edges=graph[name],e=0;e0&&void 0!==arguments[0]?arguments[0]:[];common_utils_classCallCheck(this,Voronoi),this._voronoi=src_voronoi().x(function(d){return d.x}).y(function(d){return d.y}),this.data(data)}return common_utils_createClass(Voronoi,[{key:"data",value:function data(_data){return _data&&(this._voronoiFn=this._voronoi(_data)),this}},{key:"find",value:function find(x,y,radius){return this._voronoiFn.find(x,y,radius)}}]),Voronoi}(),addListenerToNamespace=function addListenerToNamespace(namespaceInf,fn,context){var key=namespaceInf.key,namespace=namespaceInf.namespace;namespace?(!context._listeners[namespace]&&(context._listeners[namespace]=[]),key||(key=Object.keys(context._listeners[namespace]).length),context._listeners[namespace][key]=fn):(key=Object.keys(context._listeners).length,context._listeners[key]=fn)},getObjProp=function getObjProp(obj){if(void 0===obj||null===obj)return obj;for(var retObj=obj,_len=arguments.length,fields=new Array(_len>1?_len-1:0),_key=1;_key<_len;_key++)fields[_key-1]=arguments[_key];for(var i=0,len=fields.length;i3&&void 0!==arguments[3]?arguments[3]:{},props=propNames;Array.isArray(propNames)||(props=[propNames]);var fn=this.model.next(props,callBack,instantCall);return addListenerToNamespace(namespaceInf,fn,this),this}},{key:"registerImmediateListener",value:function registerImmediateListener(propNames,callBack,instantCall){var namespaceInf=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},props=propNames;Array.isArray(propNames)||(props=[propNames]);var fn=this.model.on(props,callBack,instantCall);return addListenerToNamespace(namespaceInf,fn,this),this}},{key:"get",value:function get(propName){return this.model.prop(propName)}},{key:"computed",value:function computed(propName,callBack){return this.model.calculatedProp(propName,callBack)}},{key:"append",value:function append(propName,value){return this.model.append(propName,value),this}},{key:"unsubscribeAll",value:function unsubscribeAll(){return Object.values(this._listeners).forEach(function(fn){return fn()}),this}},{key:"unsubscribe",value:function unsubscribe(){var namespaceInf=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},namespace=namespaceInf.namespace,key=namespaceInf.key,listeners=this._listeners[namespace];if(key){var fn=getObjProp(listeners,key);fn&&fn()}else Object.values(listeners).forEach(function(fn){return fn()}),this._listeners[namespace]=[];return this}}]),Store}(),intSanitizer=function intSanitizer(val){var arr=val.toString().match(/(\d+)(px)*/g);return arr?parseInt(arr[0],10):null},common_utils_transactor=function transactor(holder,options,model){var conf,namespaceInf=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},store=model&&model instanceof hyperdis_default.a?model:hyperdis_default.a.create({}),stateProps={};for(var prop in options)if({}.hasOwnProperty.call(options,prop)){var addAsMethod=!(conf=options[prop]).meta||conf.meta.addAsMethod,nameSpaceProp=void 0,namespace=namespaceInf.namespace;nameSpaceProp=namespace?"".concat(namespace,".").concat(prop):prop,store.prop("".concat(nameSpaceProp))||(stateProps[prop]=conf.value),!1!==addAsMethod&&(holder[prop]=function(context,meta,nsProp){return function(){for(var val,compareTo,_len2=arguments.length,params=new Array(_len2),_key2=0;_key2<_len2;_key2++)params[_key2]=arguments[_key2];var paramsLen=params.length,prevVal=store.prop(nsProp);if(paramsLen){var spreadParams=meta&&meta.spreadParams;val=params;var values=[];if(meta){for(var i=0;i=0;i--)if(arr1[i]!==arr2[i])return!1;return!0}(oldVal,newVal):"Object"===type?Object.is(oldVal,newVal):oldVal===newVal}},ERROR_MSG={INTERFACE_IMPL:"Method not implemented"},mergeRecursive=function mergeRecursive(source,sink){for(var prop in sink)isSimpleObject(source[prop])&&isSimpleObject(sink[prop])?mergeRecursive(source[prop],sink[prop]):sink[prop]instanceof Object&&sink[prop].constructor===Object?(source[prop]={},mergeRecursive(source[prop],sink[prop])):source[prop]=sink[prop];return source},common_utils_createSelection=function createSelection(sel,appendObj,data,idFn){var selection=sel||function dataSelect(){var data=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];return new DataSystem_selection(data)}([]),mergedSelection=(selection=selection.data(data,idFn)).enter().append(appendObj).merge(selection);return selection.exit()&&selection.exit().remove(),mergedSelection},common_utils_interpolator=function interpolator(){return src_value},common_utils_numberInterpolator=function numberInterpolator(){return src_number},common_utils_piecewiseInterpolator=function piecewiseInterpolator(){return piecewise_piecewise};var rgbToHsv=function rgbToHsv(r,g,b){var a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:1;r=+r,g=+g,b=+b,a=+a,r/=255,g/=255,b/=255;var h,s,max=Math.max(r,g,b),min=Math.min(r,g,b),l=(max+min)/2;if(max===min)h=s=0;else{var d=max-min;switch(s=l>.5?d/(2-max-min):d/(max+min),max){case r:h=(g-b)/d+(g=range[0]&&val<=range[1]})},{saveChild:!1,mode:mode})},common_utils_getDataModelFromIdentifiers=function getDataModelFromIdentifiers(dataModel,identifiers,mode){var filteredDataModel;if(identifiers instanceof Array){var fieldsConfig=dataModel.getFieldsConfig(),dataArr=identifiers.slice(1,identifiers.length);if(identifiers instanceof Function)filteredDataModel=identifiers(dataModel,{},!1);else if(identifiers instanceof Array&&identifiers[0].length){var filteredSchema=identifiers[0].filter(function(d){return d in fieldsConfig});filteredDataModel=dataModel.select(function(fields){var include=!0;return filteredSchema.forEach(function(propField,idx){var value=fields[propField].valueOf(),index=dataArr.findIndex(function(d){return d[idx]===value});include=include&&-1!==index}),include},{saveChild:!1,mode:mode})}}else filteredDataModel=getDataModelFromRange(dataModel,identifiers,mode);return filteredDataModel},common_utils_registerListeners=function registerListeners(context,listenerMap){for(var _len3=arguments.length,params=new Array(_len3>2?_len3-2:0),_key3=2;_key3<_len3;_key3++)params[_key3-2]=arguments[_key3];var propListenerMap=listenerMap.apply(void 0,[context].concat(params));for(var key in propListenerMap)if({}.hasOwnProperty.call(propListenerMap,key)){var namespace=params[0],ns=null;namespace&&(ns=namespace.local);var mapObj=propListenerMap[key],propType=mapObj.type,props=mapObj.props,listenerFn=mapObj.listener;context.store()[propType](props,listenerFn,!1,{namespace:ns})}},isValidValue=function isValidValue(value){return!isNaN(value)&&value!==-1/0&&value!==1/0},toArray=function toArray(arr){return arr instanceof Array?arr:[arr]},common_utils_getSymbol=function getSymbol(type){return function(){var type=d3_shape_src_constant(symbol_circle),size=d3_shape_src_constant(64),context=null;function symbol(){var buffer;if(context||(context=buffer=src_path()),type.apply(this,arguments).draw(context,+size.apply(this,arguments)),buffer)return context=null,buffer+""||null}return symbol.type=function(_){return arguments.length?(type="function"==typeof _?_:d3_shape_src_constant(_),symbol):type},symbol.size=function(_){return arguments.length?(size="function"==typeof _?_:d3_shape_src_constant(+_),symbol):size},symbol.context=function(_){return arguments.length?(context=null==_?null:_,symbol):context},symbol}().type(symbolFns[type])},stackOrders=(_defineProperty(_stackOrders={},"none",order_none),_defineProperty(_stackOrders,"ascending",order_ascending),_defineProperty(_stackOrders,"descending",function(series){return order_ascending(series).reverse()}),_stackOrders),stackOffsets=(_defineProperty(_stackOffsets={},"diverging",function(series,order){if((n=series.length)>1)for(var i,d,dy,yp,yn,n,j=0,m=series[order[0]].length;j=0?(d[0]=yp,d[1]=yp+=dy):dy<0?(d[1]=yn,d[0]=yn+=dy):d[0]=yp}),_defineProperty(_stackOffsets,"none",none),_defineProperty(_stackOffsets,"expand",function(series,order){if((n=series.length)>0){for(var i,n,y,j=0,m=series[0].length;j0&&(m=(s0=series[order[0]]).length)>0){for(var s0,m,n,y=0,j=1;j0&&(sum+=v);for(null!=sortValues?index.sort(function(i,j){return sortValues(arcs[i],arcs[j])}):null!=sort&&index.sort(function(i,j){return sort(data[i],data[j])}),i=0,k=sum?(da-n*pa)/sum:0;i0?v*k:0)+pa,arcs[j]={data:data[j],index:i,value:v,startAngle:a0,endAngle:a1,padAngle:p};return arcs}return pie.value=function(_){return arguments.length?(value="function"==typeof _?_:d3_shape_src_constant(+_),pie):value},pie.sortValues=function(_){return arguments.length?(sortValues=_,sort=null,pie):sortValues},pie.sort=function(_){return arguments.length?(sort=_,sortValues=null,pie):sort},pie.startAngle=function(_){return arguments.length?(startAngle="function"==typeof _?_:d3_shape_src_constant(+_),pie):startAngle},pie.endAngle=function(_){return arguments.length?(endAngle="function"==typeof _?_:d3_shape_src_constant(+_),pie):endAngle},pie.padAngle=function(_){return arguments.length?(padAngle="function"==typeof _?_:d3_shape_src_constant(+_),pie):padAngle},pie},arc:function(){var innerRadius=arcInnerRadius,outerRadius=arcOuterRadius,cornerRadius=d3_shape_src_constant(0),padRadius=null,startAngle=arcStartAngle,endAngle=arcEndAngle,padAngle=arcPadAngle,context=null;function arc(){var buffer,r,r0=+innerRadius.apply(this,arguments),r1=+outerRadius.apply(this,arguments),a0=startAngle.apply(this,arguments)-halfPi,a1=endAngle.apply(this,arguments)-halfPi,da=abs(a1-a0),cw=a1>a0;if(context||(context=buffer=src_path()),r1math_epsilon)if(da>math_tau-math_epsilon)context.moveTo(r1*cos(a0),r1*sin(a0)),context.arc(0,0,r1,a0,a1,!cw),r0>math_epsilon&&(context.moveTo(r0*cos(a1),r0*sin(a1)),context.arc(0,0,r0,a1,a0,cw));else{var t0,t1,a01=a0,a11=a1,a00=a0,a10=a1,da0=da,da1=da,ap=padAngle.apply(this,arguments)/2,rp=ap>math_epsilon&&(padRadius?+padRadius.apply(this,arguments):math_sqrt(r0*r0+r1*r1)),rc=math_min(abs(r1-r0)/2,+cornerRadius.apply(this,arguments)),rc0=rc,rc1=rc;if(rp>math_epsilon){var p0=asin(rp/r0*sin(ap)),p1=asin(rp/r1*sin(ap));(da0-=2*p0)>math_epsilon?(a00+=p0*=cw?1:-1,a10-=p0):(da0=0,a00=a10=(a0+a1)/2),(da1-=2*p1)>math_epsilon?(a01+=p1*=cw?1:-1,a11-=p1):(da1=0,a01=a11=(a0+a1)/2)}var x01=r1*cos(a01),y01=r1*sin(a01),x10=r0*cos(a10),y10=r0*sin(a10);if(rc>math_epsilon){var oc,x11=r1*cos(a11),y11=r1*sin(a11),x00=r0*cos(a00),y00=r0*sin(a00);if(da<=math_tau-math_epsilon&&(oc=function intersect(x0,y0,x1,y1,x2,y2,x3,y3){var x10=x1-x0,y10=y1-y0,x32=x3-x2,y32=y3-y2,t=y32*x10-x32*y10;if(!(t*t1?0:x<-1?math_pi:Math.acos(x)}((ax*bx+ay*by)/(math_sqrt(ax*ax+ay*ay)*math_sqrt(bx*bx+by*by)))/2),lc=math_sqrt(oc[0]*oc[0]+oc[1]*oc[1]);rc0=math_min(rc,(r0-lc)/(kc-1)),rc1=math_min(rc,(r1-lc)/(kc+1))}}da1>math_epsilon?rc1>math_epsilon?(t0=cornerTangents(x00,y00,x01,y01,r1,rc1,cw),t1=cornerTangents(x11,y11,x10,y10,r1,rc1,cw),context.moveTo(t0.cx+t0.x01,t0.cy+t0.y01),rc1math_epsilon&&da0>math_epsilon?rc0>math_epsilon?(t0=cornerTangents(x10,y10,x11,y11,r0,-rc0,cw),t1=cornerTangents(x01,y01,x00,y00,r0,-rc0,cw),context.lineTo(t0.cx+t0.x01,t0.cy+t0.y01),rc01?_len4-1:0),_key4=1;_key4<_len4;_key4++)measureFieldNames[_key4-1]=arguments[_key4];return measureFieldNames.forEach(function(measureName){if(nearestReducers[measureName])filteredReducers[measureName]=nearestReducers[measureName];else{var measureField=measures[measureName];measureField&&(filteredReducers[measureName]=measureField.defAggFn())}}),filteredReducers},xhtml="http://www.w3.org/1999/xhtml",src_namespaces={svg:"http://www.w3.org/2000/svg",xhtml:xhtml,xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace",xmlns:"http://www.w3.org/2000/xmlns/"},src_namespace=function(name){var prefix=name+="",i=prefix.indexOf(":");return i>=0&&"xmlns"!==(prefix=name.slice(0,i))&&(name=name.slice(i+1)),src_namespaces.hasOwnProperty(prefix)?{space:src_namespaces[prefix],local:name}:name};var creator=function(name){var fullname=src_namespace(name);return(fullname.local?function creatorFixed(fullname){return function(){return this.ownerDocument.createElementNS(fullname.space,fullname.local)}}:function creatorInherit(name){return function(){var document=this.ownerDocument,uri=this.namespaceURI;return uri===xhtml&&document.documentElement.namespaceURI===xhtml?document.createElement(name):document.createElementNS(uri,name)}})(fullname)};function selector_none(){}var src_selector=function(selector){return null==selector?selector_none:function(){return this.querySelector(selector)}};function selectorAll_empty(){return[]}var selectorAll=function(selector){return null==selector?selectorAll_empty:function(){return this.querySelectorAll(selector)}},matcher=function(selector){return function(){return this.matches(selector)}},sparse=function(update){return new Array(update.length)};function EnterNode(parent,datum){this.ownerDocument=parent.ownerDocument,this.namespaceURI=parent.namespaceURI,this._next=null,this._parent=parent,this.__data__=datum}EnterNode.prototype={constructor:EnterNode,appendChild:function appendChild(child){return this._parent.insertBefore(child,this._next)},insertBefore:function insertBefore(child,next){return this._parent.insertBefore(child,next)},querySelector:function querySelector(selector){return this._parent.querySelector(selector)},querySelectorAll:function querySelectorAll(selector){return this._parent.querySelectorAll(selector)}};var keyPrefix="$";function bindIndex(parent,group,enter,update,exit,data){for(var node,i=0,groupLength=group.length,dataLength=data.length;ib?1:a>=b?0:NaN}var src_window=function(node){return node.ownerDocument&&node.ownerDocument.defaultView||node.document&&node||node.defaultView};function styleValue(node,name){return node.style.getPropertyValue(name)||src_window(node).getComputedStyle(node,null).getPropertyValue(name)}function classArray(string){return string.trim().split(/^|\s+/)}function classList(node){return node.classList||new ClassList(node)}function ClassList(node){this._node=node,this._names=classArray(node.getAttribute("class")||"")}function classedAdd(node,names){for(var list=classList(node),i=-1,n=names.length;++i=0&&(this._names.splice(i,1),this._node.setAttribute("class",this._names.join(" ")))},contains:function contains(name){return this._names.indexOf(name)>=0}};function textRemove(){this.textContent=""}function htmlRemove(){this.innerHTML=""}function raise_raise(){this.nextSibling&&this.parentNode.appendChild(this)}function lower(){this.previousSibling&&this.parentNode.insertBefore(this,this.parentNode.firstChild)}function constantNull(){return null}function remove_remove(){var parent=this.parentNode;parent&&parent.removeChild(this)}function selection_cloneShallow(){return this.parentNode.insertBefore(this.cloneNode(!1),this.nextSibling)}function selection_cloneDeep(){return this.parentNode.insertBefore(this.cloneNode(!0),this.nextSibling)}var filterEvents={},on_event=null;"undefined"!=typeof document&&("onmouseenter"in document.documentElement||(filterEvents={mouseenter:"mouseover",mouseleave:"mouseout"}));function filterContextListener(listener,index,group){return listener=contextListener(listener,index,group),function(event){var related=event.relatedTarget;related&&(related===this||8&related.compareDocumentPosition(this))||listener.call(this,event)}}function contextListener(listener,index,group){return function(event1){var event0=on_event;on_event=event1;try{listener.call(this,this.__data__,index,group)}finally{on_event=event0}}}function onRemove(typename){return function(){var on=this.__on;if(on){for(var o,j=0,i=-1,m=on.length;j=i1&&(i1=i0+1);!(next=updateGroup[i1])&&++i1=0;)(node=group[i])&&(next&&4^node.compareDocumentPosition(next)&&next.parentNode.insertBefore(node,next),next=node);return this},sort:function(compare){function compareNode(a,b){return a&&b?compare(a.__data__,b.__data__):!a-!b}compare||(compare=sort_ascending);for(var groups=this._groups,m=groups.length,sortgroups=new Array(m),j=0;j1?this.each((null==value?function styleRemove(name){return function(){this.style.removeProperty(name)}}:"function"==typeof value?function styleFunction(name,value,priority){return function(){var v=value.apply(this,arguments);null==v?this.style.removeProperty(name):this.style.setProperty(name,v,priority)}}:function styleConstant(name,value,priority){return function(){this.style.setProperty(name,value,priority)}})(name,value,null==priority?"":priority)):styleValue(this.node(),name)},property:function(name,value){return arguments.length>1?this.each((null==value?function propertyRemove(name){return function(){delete this[name]}}:"function"==typeof value?function propertyFunction(name,value){return function(){var v=value.apply(this,arguments);null==v?delete this[name]:this[name]=v}}:function propertyConstant(name,value){return function(){this[name]=value}})(name,value)):this.node()[name]},classed:function(name,value){var names=classArray(name+"");if(arguments.length<2){for(var list=classList(this.node()),i=-1,n=names.length;++i=0&&(name=t.slice(i+1),t=t.slice(0,i)),{type:t,name:name}})}(typename+""),n=typenames.length;if(!(arguments.length<2)){for(on=value?onAdd:onRemove,null==capture&&(capture=!1),i=0;i=0&&(name=t.slice(i+1),t=t.slice(0,i)),t&&!types.hasOwnProperty(t))throw new Error("unknown type: "+t);return{type:t,name:name}})}(typename+"",_),i=-1,n=T.length;if(!(arguments.length<2)){if(null!=callback&&"function"!=typeof callback)throw new Error("invalid callback: "+callback);for(;++i0)for(var n,t,args=new Array(n),i=0;iclickDistance2}gestures.mouse("drag")}function mouseupped(){src_select(on_event.view).on("mousemove.drag mouseup.drag",null),function yesdrag(view,noclick){var root=view.document.documentElement,selection=src_select(view).on("dragstart.drag",null);noclick&&(selection.on("click.drag",noevent,!0),setTimeout(function(){selection.on("click.drag",null)},0)),"onselectstart"in root?selection.on("selectstart.drag",null):(root.style.MozUserSelect=root.__noselect,delete root.__noselect)}(on_event.view,mousemoving),noevent(),gestures.mouse("end")}function touchstarted(){if(filter.apply(this,arguments)){var i,gesture,touches=on_event.changedTouches,c=container.apply(this,arguments),n=touches.length;for(i=0;i=0&&t._call.call(null,e),t=t._next;--timer_frame}()}finally{timer_frame=0,function nap(){var t0,t2,t1=taskHead,time=1/0;for(;t1;)t1._call?(time>t1._time&&(time=t1._time),t0=t1,t1=t1._next):(t2=t1._next,t1._next=null,t1=t0?t0._next=t2:taskHead=t2);taskTail=t0,sleep(time)}(),clockNow=0}}function poke(){var now=clock.now(),delay=now-clockLast;delay>pokeDelay&&(clockSkew-=delay,clockLast=now)}function sleep(time){timer_frame||(timeout&&(timeout=clearTimeout(timeout)),time-clockNow>24?(time<1/0&&(timeout=setTimeout(wake,time-clock.now()-clockSkew)),timer_interval&&(timer_interval=clearInterval(timer_interval))):(timer_interval||(clockLast=clock.now(),timer_interval=setInterval(poke,pokeDelay)),timer_frame=1,setFrame(wake)))}Timer.prototype=timer_timer.prototype={constructor:Timer,restart:function restart(callback,delay,time){if("function"!=typeof callback)throw new TypeError("callback is not a function");time=(null==time?now():+time)+(null==delay?0:+delay),this._next||taskTail===this||(taskTail?taskTail._next=this:taskHead=this,taskTail=this),this._call=callback,this._time=time,sleep()},stop:function stop(){this._call&&(this._call=null,this._time=1/0,sleep())}};var src_timeout=function(callback,delay,time){var t=new Timer;return delay=null==delay?0:+delay,t.restart(function(elapsed){t.stop(),callback(elapsed+delay)},delay,time),t},emptyOn=src_dispatch("start","end","cancel","interrupt"),emptyTween=[],CREATED=0,SCHEDULED=1,STARTING=2,STARTED=3,RUNNING=4,ENDING=5,ENDED=6,transition_schedule=function(node,name,id,index,group,timing){var schedules=node.__transition;if(schedules){if(id in schedules)return}else node.__transition={};!function schedule_create(node,id,self){var tween,schedules=node.__transition;function start(elapsed){var i,j,n,o;if(self.state!==SCHEDULED)return stop();for(i in schedules)if((o=schedules[i]).name===self.name){if(o.state===STARTED)return src_timeout(start);o.state===RUNNING?(o.state=ENDED,o.timer.stop(),o.on.call("interrupt",node,node.__data__,o.index,o.group),delete schedules[i]):+iCREATED)throw new Error("too late; already scheduled");return schedule}function schedule_set(node,id){var schedule=schedule_get(node,id);if(schedule.state>STARTED)throw new Error("too late; already running");return schedule}function schedule_get(node,id){var schedule=node.__transition;if(!schedule||!(schedule=schedule[id]))throw new Error("transition not found");return schedule}function tweenValue(transition,name,value){var id=transition._id;return transition.each(function(){var schedule=schedule_set(this,id);(schedule.value||(schedule.value={}))[name]=value.apply(this,arguments)}),function(node){return schedule_get(node,id).value[name]}}var transition_interpolate=function(a,b){var c;return("number"==typeof b?src_number:b instanceof color_color?src_rgb:(c=color_color(b))?(b=c,src_rgb):src_string)(a,b)};var transition_selection_Selection=src_selection.prototype.constructor;function style_styleRemove(name){return function(){this.style.removeProperty(name)}}var transition_id=0;function Transition(groups,parents,name,id){this._groups=groups,this._parents=parents,this._name=name,this._id=id}function newId(){return++transition_id}var selection_prototype=src_selection.prototype;Transition.prototype=function src_transition_transition(name){return src_selection().transition(name)}.prototype={constructor:Transition,select:function(select){var name=this._name,id=this._id;"function"!=typeof select&&(select=src_selector(select));for(var groups=this._groups,m=groups.length,subgroups=new Array(m),j=0;j=0&&(t=t.slice(0,i)),!t||"start"===t})}(name)?init:schedule_set;return function(){var schedule=sit(this,id),on=schedule.on;on!==on0&&(on1=(on0=on).copy()).on(name,listener),schedule.on=on1}}(id,name,listener))},attr:function(name,value){var fullname=src_namespace(name),i="transform"===fullname?interpolateTransformSvg:transition_interpolate;return this.attrTween(name,"function"==typeof value?(fullname.local?function attr_attrFunctionNS(fullname,interpolate,value){var string00,string10,interpolate0;return function(){var string0,string1,value1=value(this);if(null!=value1)return(string0=this.getAttributeNS(fullname.space,fullname.local))===(string1=value1+"")?null:string0===string00&&string1===string10?interpolate0:(string10=string1,interpolate0=interpolate(string00=string0,value1));this.removeAttributeNS(fullname.space,fullname.local)}}:function attr_attrFunction(name,interpolate,value){var string00,string10,interpolate0;return function(){var string0,string1,value1=value(this);if(null!=value1)return(string0=this.getAttribute(name))===(string1=value1+"")?null:string0===string00&&string1===string10?interpolate0:(string10=string1,interpolate0=interpolate(string00=string0,value1));this.removeAttribute(name)}})(fullname,i,tweenValue(this,"attr."+name,value)):null==value?(fullname.local?function attr_attrRemoveNS(fullname){return function(){this.removeAttributeNS(fullname.space,fullname.local)}}:function attr_attrRemove(name){return function(){this.removeAttribute(name)}})(fullname):(fullname.local?function attr_attrConstantNS(fullname,interpolate,value1){var string00,interpolate0,string1=value1+"";return function(){var string0=this.getAttributeNS(fullname.space,fullname.local);return string0===string1?null:string0===string00?interpolate0:interpolate0=interpolate(string00=string0,value1)}}:function attr_attrConstant(name,interpolate,value1){var string00,interpolate0,string1=value1+"";return function(){var string0=this.getAttribute(name);return string0===string1?null:string0===string00?interpolate0:interpolate0=interpolate(string00=string0,value1)}})(fullname,i,value))},attrTween:function(name,value){var key="attr."+name;if(arguments.length<2)return(key=this.tween(key))&&key._value;if(null==value)return this.tween(key,null);if("function"!=typeof value)throw new Error;var fullname=src_namespace(name);return this.tween(key,(fullname.local?function attrTweenNS(fullname,value){var t0,i0;function tween(){var i=value.apply(this,arguments);return i!==i0&&(t0=(i0=i)&&function attrInterpolateNS(fullname,i){return function(t){this.setAttributeNS(fullname.space,fullname.local,i(t))}}(fullname,i)),t0}return tween._value=value,tween}:function attrTween(name,value){var t0,i0;function tween(){var i=value.apply(this,arguments);return i!==i0&&(t0=(i0=i)&&function attrInterpolate(name,i){return function(t){this.setAttribute(name,i(t))}}(name,i)),t0}return tween._value=value,tween})(fullname,value))},style:function(name,value,priority){var i="transform"==(name+="")?interpolateTransformCss:transition_interpolate;return null==value?this.styleTween(name,function styleNull(name,interpolate){var string00,string10,interpolate0;return function(){var string0=styleValue(this,name),string1=(this.style.removeProperty(name),styleValue(this,name));return string0===string1?null:string0===string00&&string1===string10?interpolate0:interpolate0=interpolate(string00=string0,string10=string1)}}(name,i)).on("end.style."+name,style_styleRemove(name)):"function"==typeof value?this.styleTween(name,function style_styleFunction(name,interpolate,value){var string00,string10,interpolate0;return function(){var string0=styleValue(this,name),value1=value(this),string1=value1+"";return null==value1&&(this.style.removeProperty(name),string1=value1=styleValue(this,name)),string0===string1?null:string0===string00&&string1===string10?interpolate0:(string10=string1,interpolate0=interpolate(string00=string0,value1))}}(name,i,tweenValue(this,"style."+name,value))).each(function styleMaybeRemove(id,name){var on0,on1,listener0,remove,key="style."+name,event="end."+key;return function(){var schedule=schedule_set(this,id),on=schedule.on,listener=null==schedule.value[key]?remove||(remove=style_styleRemove(name)):void 0;on===on0&&listener0===listener||(on1=(on0=on).copy()).on(event,listener0=listener),schedule.on=on1}}(this._id,name)):this.styleTween(name,function style_styleConstant(name,interpolate,value1){var string00,interpolate0,string1=value1+"";return function(){var string0=styleValue(this,name);return string0===string1?null:string0===string00?interpolate0:interpolate0=interpolate(string00=string0,value1)}}(name,i,value),priority).on("end.style."+name,null)},styleTween:function(name,value,priority){var key="style."+(name+="");if(arguments.length<2)return(key=this.tween(key))&&key._value;if(null==value)return this.tween(key,null);if("function"!=typeof value)throw new Error;return this.tween(key,function styleTween(name,value,priority){var t,i0;function tween(){var i=value.apply(this,arguments);return i!==i0&&(t=(i0=i)&&function styleInterpolate(name,i,priority){return function(t){this.style.setProperty(name,i(t),priority)}}(name,i,priority)),t}return tween._value=value,tween}(name,value,null==priority?"":priority))},text:function(value){return this.tween("text","function"==typeof value?function text_textFunction(value){return function(){var value1=value(this);this.textContent=null==value1?"":value1}}(tweenValue(this,"text",value)):function text_textConstant(value){return function(){this.textContent=value}}(null==value?"":value+""))},remove:function(){return this.on("end.remove",function removeFunction(id){return function(){var parent=this.parentNode;for(var i in this.__transition)if(+i!==id)return;parent&&parent.removeChild(this)}}(this._id))},tween:function(name,value){var id=this._id;if(name+="",arguments.length<2){for(var t,tween=schedule_get(this.node(),id).tween,i=0,n=tween.length;iSTARTING&&schedule.state4&&void 0!==arguments[4]?arguments[4]:{},keyFn=arguments.length>5?arguments[5]:void 0;(parent instanceof HTMLElement||parent instanceof SVGElement)&&(parent=renderer_utils_selectElement(parent));var filter,selectorVal=selector?selector[0]:null,selectorType=null,actualSelector=null,element=null,enterSel=null,mergeSel=null;selectorVal?"#"===selectorVal?(selectorType="id",actualSelector=selector):(selectorType="class",actualSelector="."===selector[0]?selector:".".concat(selector)):(actualSelector=elemType,filter=!0),element=parent.selectAll(actualSelector),filter&&(element=element.filter(function(){return this.parentNode===parent.node()})),enterSel=(element=element.data(data,keyFn)).enter().append(elemType||"div"),callbacks.enter&&enterSel.each(function(){for(var _len=arguments.length,params=new Array(_len),_key=0;_key<_len;_key++)params[_key]=arguments[_key];callbacks.enter.apply(callbacks,[renderer_utils_selectElement(this)].concat(params))}),mergeSel=enterSel.merge(element),callbacks.update&&mergeSel.each(function(){for(var _len2=arguments.length,params=new Array(_len2),_key2=0;_key2<_len2;_key2++)params[_key2]=arguments[_key2];callbacks.update.apply(callbacks,[renderer_utils_selectElement(this)].concat(params))}),"class"===selectorType?mergeSel.classed("."===selectorVal?selector.substring(1,selector.length):selector,!0):"id"===selectorType&&mergeSel.attr("id",selector.substring(1,selector.length));var exitSel=element.exit();return callbacks.exit?exitSel.each(function(){for(var _len3=arguments.length,params=new Array(_len3),_key3=0;_key3<_len3;_key3++)params[_key3]=arguments[_key3];callbacks.exit.apply(callbacks,[renderer_utils_selectElement(this)].concat(params))}):exitSel.remove(),mergeSel},applyStyle=function applyStyle(elem,styleObj){return Object.entries(styleObj).forEach(function(d){elem.style(d[0],d[1])},void 0),elem},setElementAttrs=function setElementAttrs(element,attrs){for(var key in attrs)({}).hasOwnProperty.call(attrs,key)&&element.attr(key,attrs[key])},renderer_utils_setAttrs=function setAttrs(element,attrs,className){return element instanceof src_selection||(element=renderer_utils_selectElement(element)),void 0!==className?element.selectAll(".".concat(className)).each(function(){setElementAttrs(src_select(this),attrs)}):setElementAttrs(element,attrs),element},renderer_utils_setStyles=function setStyles(element,styles){for(var key in element instanceof src_selection||(element=renderer_utils_selectElement(element)),styles)({}).hasOwnProperty.call(styles,key)&&element.style(key,styles[key]);return element},renderer_utils_createElements=function createElements(params){var data,sel,container=src_select(params.container);"number"==typeof(data=params.data)&&(data=Array(data).fill().map(function(d,i){return i})),sel=container.selectAll(params.selector).data(data),(sel=container.selectAll(params.selector).filter(function(){return this.parentNode===container.node()}).data(params.data)).enter().append(params.append).merge(sel).each(function(d,i){params.each(d,src_select(this),i)}).attr("class",params.className||""),sel.exit().remove()},renderer_utils_getClientPoint=function getClientPoint(){var pos=src_point.apply(void 0,arguments);return{x:pos[0],y:pos[1]}},renderer_utils_getEvent=function getEvent(){return on_event},renderer_utils_getD3Drag=function getD3Drag(){return src_drag},renderer_utils_getSmartComputedStyle=function getSmartComputedStyle(group,css){var textEl,mandatoryStyle={"fill-opacity":0},className="string"==typeof css?css:css instanceof Array?css.join(" "):void 0;textEl=group.node()instanceof HTMLElement?group.append("div").html("W"):group.append("text").text("W"),className?textEl.attr("class",className):"object"===renderer_utils_typeof(css)&&(delete css["fill-opacity"],mergeRecursive(mandatoryStyle,css)),textEl.style(mandatoryStyle);var computedStyle=window.getComputedStyle(textEl.node()),styleForSmartLabel={fontSize:computedStyle.fontSize,fontFamily:computedStyle.fontFamily,fontWeight:computedStyle.fontWeight,fontStyle:computedStyle.fontStyle};return textEl.remove(),styleForSmartLabel},hasTouch=function hasTouch(){return"ontouchstart"in document.documentElement},SmartlabelManager=__webpack_require__(4),SmartlabelManager_default=__webpack_require__.n(SmartlabelManager),events=["initialized","beforeupdate","updated","beforedraw","drawn","beforeremove","removed","animationend"],EVENT_LIST=[];["canvas","unit","layer","axis","facet-headers","legend","caption"].forEach(function(composition){events.forEach(function(event){EVENT_LIST.push("".concat(composition,".").concat(event))})});var event_list=EVENT_LIST;function lifecycle_manager_defineProperties(target,props){for(var i=0;i0&&void 0!==arguments[0]?arguments[0]:{};this._lifeCycles=lifeCycles,this._releasePromisesFromCache()}},{key:"_resetTargetPromise",value:function _resetTargetPromise(eventName){var _this4=this;setTimeout(function(){_this4._notifiers[eventName]=lifecycle_manager_resolver,_this4._promises.set(eventName,_this4._makeNotifierPromise(eventName))},0)}}]),LifeCycleManager}(),src_InvalidAwareTypes=datamodel_default.a.InvalidAwareTypes,DRAG="drag",HOVER="hover",SELECTIONDRAG="selectiondrag",CLICK="click",LONGTOUCH="longtouch",TOUCHDRAG="touchdrag",ALL_ACTIONS="*",SELECTION_NEW_ENTRY=1,SELECTION_NEW_EXIT=-1,SELECTION_NULL=0,SELECTION_OLD_ENTRY=2,SELECTION_OLD_EXIT=-2;function selection_set_defineProperties(target,props){for(var i=0;i0?(set[key]===SELECTION_OLD_ENTRY&&retObj.entrySet[0].push(key),set[key]===SELECTION_NEW_ENTRY&&retObj.entrySet[1].push(key)):set[key]<0&&(set[key]===SELECTION_OLD_EXIT&&retObj.exitSet[0].push(key),set[key]===SELECTION_NEW_EXIT&&retObj.exitSet[1].push(key)),retObj.completeSet.push(key);return["entrySet","exitSet"].forEach(function(type){retObj[type]=retObj[type].map(function(e){return e.map(Number)})}),retObj.completeSet=retObj.completeSet.map(Number),retObj}},{key:"reset",value:function reset(ids){var set=this._set;if(ids)ids.forEach(function(i){set[i]=SELECTION_NULL});else{var lockedSel=this._lockedSelection;for(var key in set)key in lockedSel||(set[key]=SELECTION_NULL)}return this._resetted=!0,this}},{key:"getEntrySet",value:function getEntrySet(){var set=this._set,addSet=[];for(var key in set)set[key]===SELECTION_NEW_ENTRY&&addSet.push(key);return addSet}},{key:"getExistingEntrySet",value:function getExistingEntrySet(addSet){var set=this._set;return addSet.filter(function(d){return set[d]===SELECTION_NEW_ENTRY||set[d]===SELECTION_OLD_ENTRY})}},{key:"getExistingExitSet",value:function getExistingExitSet(removeSet){var set=this._set;return removeSet.filter(function(d){return set[d]===SELECTION_NEW_EXIT||set[d]===SELECTION_OLD_EXIT})}},{key:"getOldEntry",value:function getOldEntry(){var set=this._set,updateSet=[];for(var key in set)set[key]===SELECTION_OLD_ENTRY&&updateSet.push(key);return updateSet}},{key:"getOldExit",value:function getOldExit(){var set=this._set,updateSet=[];for(var key in set)set[key]===SELECTION_OLD_EXIT&&updateSet.push(key);return updateSet}},{key:"getExitSet",value:function getExitSet(){var set=this._set,removeSet=[];for(var key in set)set[key]===SELECTION_NEW_EXIT&&removeSet.push(key);return removeSet}},{key:"getCompleteSet",value:function getCompleteSet(){var set=this._set,completeSet=[];for(var key in set)completeSet.push(key);return completeSet}},{key:"getCompleteSetCount",value:function getCompleteSetCount(){return this._completeSetCount}},{key:"resetted",value:function resetted(){return this._resetted}},{key:"toggle",value:function toggle(){var set=this._set;for(var key in set)set[key]===SELECTION_NEW_ENTRY?set[key]=SELECTION_NEW_EXIT:set[key]===SELECTION_NEW_EXIT?set[key]=SELECTION_NEW_ENTRY:set[key]===SELECTION_OLD_ENTRY?set[key]=SELECTION_OLD_EXIT:set[key]=SELECTION_OLD_ENTRY;return this}}]),SelectionSet}();function helper_toConsumableArray(arr){return function helper_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);i3&&void 0!==arguments[3]?arguments[3]:{},sideEffectStore=this.sideEffects(),sideEffect=sideEffectStore[name],disable=!1;options.filter&&options.filter(sideEffect)&&(disable=!0),!disable&&sideEffectStore[name].apply(selectionSet,payload,options)}},{key:"registerPropagationBehaviourMap",value:function registerPropagationBehaviourMap(map){return this._propagationBehaviourMap=Object.assign(this._propagationBehaviourMap,map||{}),this}},{key:"dispatchBehaviour",value:function dispatchBehaviour(behaviour,payload){var propagationInfo=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},propagate=void 0===propagationInfo.propagate||propagationInfo.propagate,action=this._actions.behavioural[behaviour],sideEffects=function getSideEffects(behaviour,behaviourEffectMap){var sideEffects=[];for(var key in behaviourEffectMap){var behaviours=key.split(",");behaviours.some(function(d){return d===behaviour})&&sideEffects.push({effects:behaviourEffectMap[key],behaviours:behaviours})}return sideEffects}(behaviour,this._behaviourEffectMap);if(this._propagationInf=propagationInfo,action){var selectionSet=action.dispatch(payload),propagationSelectionSet=this.getPropagationSelectionSet(selectionSet);this._entryExitSet[behaviour]=propagationSelectionSet;var shouldApplySideEffects=this.shouldApplySideEffects(propagate);if(propagate&&this.propagate(behaviour,payload,selectionSet.find(function(d){return d.sourceSelectionSet}),sideEffects),shouldApplySideEffects){var applicableSideEffects=this.getApplicableSideEffects(sideEffects,payload,propagationInfo);this.applySideEffects(applicableSideEffects,propagationSelectionSet,payload)}}return this}},{key:"getPropagationSelectionSet",value:function getPropagationSelectionSet(selectionSet){return selectionSet.find(function(d){return!d.sourceSelectionSet})}},{key:"shouldApplySideEffects",value:function shouldApplySideEffects(){return!0}},{key:"changeBehaviourStateOnPropagation",value:function changeBehaviourStateOnPropagation(behaviour,value){return value instanceof Function?this._sourceBehaviours[behaviour]=value:this._sourceBehaviours[behaviour]=function(){return value},this}},{key:"changeSideEffectStateOnPropagation",value:function changeSideEffectStateOnPropagation(sideEffect,value){value instanceof Function?this._sourceSideEffects[sideEffect]=value:this._sourceSideEffects[sideEffect]=function(){return value}}},{key:"propagate",value:function propagate(){return this}},{key:"sideEffects",value:function sideEffects(){return arguments.length?(this._sideEffects=arguments.length<=0?void 0:arguments[0],this):this._sideEffects}},{key:"enableSideEffects",value:function enableSideEffects(fn){return changeSideEffectAvailability(this,fn,!0),this}},{key:"disableSideEffects",value:function disableSideEffects(fn){return changeSideEffectAvailability(this,fn,!1),this}},{key:"dissociateBehaviour",value:function dissociateBehaviour(behaviour,physicalAction){var actionBehaviourMap=this._actionBehaviourMap;for(var key in actionBehaviourMap)if(key===physicalAction){var behaviourMap=actionBehaviourMap[key];behaviourMap.behaviours=behaviourMap.behaviours.filter(function(d){return d!==behaviour}),this.mapActionsAndBehaviour(key)}return this}},{key:"dissociateSideEffect",value:function dissociateSideEffect(sideEffect,behaviour){var behaviourEffectMap=this._behaviourEffectMap;return behaviourEffectMap[behaviour]=behaviourEffectMap[behaviour].filter(function(d){return(d.name||d)!==sideEffect}),this}},{key:"getApplicableSideEffects",value:function getApplicableSideEffects(sideEffects){return sideEffects}},{key:"attachPropagationListener",value:function attachPropagationListener(dataModel){return dataModel.unsubscribe("propagation"),dataModel.on("propagation",this.onDataModelPropagation()),this}},{key:"onDataModelPropagation",value:function onDataModelPropagation(){var _this2=this;return function(propValue){var payload=propValue.payload,action=payload.action;_this2.dispatchBehaviour(action,payload,{propagate:!1})}}},{key:"createSelectionSet",value:function createSelectionSet(uniqueIds,behaviouralActions){var behaviours=behaviouralActions||this._actions.behavioural,selectionSet=this._selectionSet,volatileSelectionSet=this._volatileSelectionSet;for(var key in behaviours)({}).hasOwnProperty.call(behaviours,key)&&(selectionSet[key]=new src_selection_set(uniqueIds),volatileSelectionSet[key]=new src_selection_set(uniqueIds,!0));return this._volatileSelectionSet=volatileSelectionSet,this.selectionSet(selectionSet),this}},{key:"selectionSet",value:function selectionSet(){return arguments.length?(this._selectionSet=arguments.length<=0?void 0:arguments[0],this):this._selectionSet}},{key:"initializeSideEffects",value:function initializeSideEffects(){var sideEffectDefinitions=this._sideEffectDefinitions;return this.sideEffects(function initializeSideEffects(context,sideEffects){var sideEffectsMap=context._sideEffects,config=context.config();return(sideEffects=sideEffects instanceof Array?sideEffects:Object.values(sideEffects)).forEach(function(SideEffect){var formalName=SideEffect.formalName(),sideEffectInstance=sideEffectsMap[formalName];sideEffectsMap[formalName]=sideEffectInstance||new SideEffect(context);var sideEffectConf=config[formalName];sideEffectConf&&sideEffectsMap[formalName].config(sideEffectConf)}),sideEffectsMap}(this,sideEffectDefinitions)),this}},{key:"registerPhysicalActions",value:function registerPhysicalActions(actions){var initedActions=function initializePhysicalActions(context,actions){var physicalActions={};for(var name in actions)({}).hasOwnProperty.call(name,actions)||(physicalActions[name]=actions[name](context));return physicalActions}(this,actions);return Object.assign(this._actions.physical,initedActions),this}},{key:"propagateWith",value:function propagateWith(action,fields){var append=arguments.length>2&&void 0!==arguments[2]&&arguments[2],behaviouralActions=this._actions.behavioural;if(fields.length){if(action===ALL_ACTIONS)for(var key in behaviouralActions)this._propagationFields[key]={fields:fields,append:append};else this._propagationFields[action]={fields:fields,append:append};return this}return this._propagationFields}},{key:"mapActionsAndBehaviour",value:function mapActionsAndBehaviour(phyAction){var initedPhysicalActions=this._actions.physical,map=this._actionBehaviourMap;for(var action in map)if(!{}.hasOwnProperty.call(action,map)&&action===(phyAction||action)){var target=void 0,mapObj=map[action];target=mapObj.target;var touch=mapObj.touch;target||(target=this.context.getDefaultTargetContainer()),(hasTouch()?!0===touch||void 0===touch:!touch)&&this.bindActionWithBehaviour(initedPhysicalActions[action],target,mapObj.behaviours)}return this}},{key:"registerPhysicalBehaviouralMap",value:function registerPhysicalBehaviouralMap(map){return this._actionBehaviourMap=mergeRecursive(this._actionBehaviourMap,map),this}},{key:"bindActionWithBehaviour",value:function bindActionWithBehaviour(action,targets,behaviourList){var _this3=this;return"string"==typeof targets&&(targets=[targets]),targets.forEach(function(target){var mount=_this3.context.mount(),nodes=target.node instanceof Function?target:renderer_utils_selectElement(mount).selectAll(target);nodes.empty()||(nodes instanceof Array?nodes.forEach(function(node){action(renderer_utils_selectElement(node),behaviourList)}):action(nodes,behaviourList))}),this}},{key:"getPropagationInf",value:function getPropagationInf(){return this._propagationInf}},{key:"getAddSetFromCriteria",value:function getAddSetFromCriteria(criteria){var propagationInf=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},context=this.context,filteredDataModel=propagationInf.data?propagationInf.data:context.getDataModelFromIdentifiers(criteria,"all"),xFields=context.fields().x||[],yFields=context.fields().y||[],xMeasures=xFields.every(function(field){return field.type()===dist_datamodel.FieldType.MEASURE}),yMeasures=yFields.every(function(field){return field.type()===dist_datamodel.FieldType.MEASURE});return{model:filteredDataModel,uids:null===criteria?null:propagationInf.data?function filterPropagationModel(model,propModel,measures){var filteredModel,_propModel$getData=propModel.getData(),data=_propModel$getData.data,schema=_propModel$getData.schema;if(schema.length){var fieldMap=model.getFieldsConfig();filteredModel=model.select(function(fields){return data.some(function(row){return schema.every(function(propField,idx){return!(measures||propField.name in fieldMap&&fieldMap[propField.name].def.type!==dist_datamodel.FieldType.MEASURE)||row[idx]===fields[propField.name].valueOf()})})},{saveChild:!1})}else filteredModel=propModel;return filteredModel}(this.getFullData(),propagationInf.data[0],xMeasures&&yMeasures).getData().uids:filteredDataModel[0].getData().uids}}},{key:"getSelectionSets",value:function getSelectionSets(action){var sourceId=this.context.id(),propagationSource=(this._propagationInf||{}).sourceId,applicableSelectionSets=[];return propagationSource!==sourceId&&(applicableSelectionSets=[this._volatileSelectionSet[action]]),propagationSource&&applicableSelectionSets.push(this.selectionSet()[action]),applicableSelectionSets}},{key:"getFullData",value:function getFullData(){return this.context.data()}},{key:"resetted",value:function resetted(){return this._resetted}},{key:"getEntryExitSet",value:function getEntryExitSet(behaviour){return this._entryExitSet[behaviour]}}]),Firebolt}();function generic_defineProperties(target,props){for(var i=0;i1&&void 0!==arguments[1]?arguments[1]:{},sourceIdentifiers=propagationInf.sourceIdentifiers;return sourceIdentifiers?sourceIdentifiers.getSchema().map(function(d){return d.name}):criteria instanceof Array?criteria[0]:Object.keys(criteria||{})}(propagationInf,payload.criteria),sourceSelectionSet:!0===selectionSet._volatile}}},{key:"enable",value:function enable(){this._enabled=!0}},{key:"disable",value:function disable(){this._enabled=!1}},{key:"isEnabled",value:function isEnabled(){return this._enabled}}],[{key:"mutates",value:function mutates(){return!1}}]),GenericBehaviour}();function volatile_typeof(obj){return(volatile_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function volatile_defineProperties(target,props){for(var i=0;iydom[0]?ydom:xdom,max=min===ydom?xdom:ydom;min[1]100&&Math.abs(startPos.x-endPos.x)<=5)){endPos.x=Math.max(0,Math.min(endPos.x,drawingInf.width)),endPos.y=Math.max(0,Math.min(endPos.y,drawingInf.height));var payload=drag_action_config(firebolt.context.getSourceInfo(),{startPos:startPos,endPos:endPos,snap:!0},firebolt.context.data().getFieldsConfig());payload.dragEnd=!0,behaviours.forEach(function(beh){return firebolt.dispatchBehaviour(beh,payload)})}}))},physical_hover=function hover(firebolt){return function(targetEl,behaviours){var dispatchBehaviour=function dispatchBehaviour(args){var event=renderer_utils_getEvent(),context=firebolt.context,mode=context.config().interaction.tooltip.mode,pos=renderer_utils_getClientPoint(context.getDrawingContext().svgContainer,event),nearestPoint=context.getNearestPoint(pos.x,pos.y,{getAllPoints:"consolidated"===mode||"fragmented"===mode,data:args,event:event}),payload={criteria:nearestPoint?nearestPoint.id:null,showInPosition:nearestPoint.showInPosition,target:nearestPoint.target,position:pos,mode:mode};behaviours.forEach(function(beh){return firebolt.dispatchBehaviour(beh,payload)}),event.stopPropagation()};targetEl.on("mouseover",dispatchBehaviour).on("mousemove",dispatchBehaviour).on("mouseout",function(){behaviours.forEach(function(beh){return firebolt.dispatchBehaviour(beh,{criteria:null})})})}},helpers_generatePayloadFromEvent=function generatePayloadFromEvent(args,event,firebolt){var context=firebolt.context,pos=renderer_utils_getClientPoint(context.getDrawingContext().svgContainer,event.touches?event.touches[0]:event),nearestPoint=context.getNearestPoint(pos.x,pos.y,{data:args,event:event});return{criteria:nearestPoint?nearestPoint.id:null,showInPosition:nearestPoint.showInPosition,target:nearestPoint.target,position:pos}},physical_click=function click(firebolt){return function(targetEl,behaviours){targetEl.on("click",function dispatchBehaviour(args){var event=renderer_utils_getEvent(),payload=helpers_generatePayloadFromEvent(args,event,firebolt);behaviours.forEach(function(beh){return firebolt.dispatchBehaviour(beh,payload)}),event.stopPropagation()})}};function physical_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}var physicalActions=(physical_defineProperty(_physicalActions={},DRAG,function drag(firebolt){return function(targetEl,behaviours){drag_event_attachDragEvent(targetEl,behaviours,firebolt)}}),physical_defineProperty(_physicalActions,HOVER,physical_hover),physical_defineProperty(_physicalActions,CLICK,physical_click),physical_defineProperty(_physicalActions,LONGTOUCH,function longtouch(firebolt){return function(targetEl,behaviours){var event,touchEnd;touchEnd=!1,event=renderer_utils_getEvent(),targetEl.on("touchstart",function(args){event=renderer_utils_getEvent(),touchEnd=!1,setTimeout(function(){touchEnd?behaviours.forEach(function(beh){return firebolt.dispatchBehaviour(beh,{criteria:null})}):function dispatchBehaviour(args){var payload=helpers_generatePayloadFromEvent(args,event,firebolt);behaviours.forEach(function(beh){return firebolt.dispatchBehaviour(beh,payload)}),event.stopPropagation()}(args)},100)}).on("touchend",function(){touchEnd=!0})}}),physical_defineProperty(_physicalActions,TOUCHDRAG,function touchdrag(firebolt){return function(targetEl,behaviours){drag_event_attachDragEvent(targetEl,behaviours,firebolt,!0)}}),_physicalActions),PROPS={valueParser:{defaultValue:function defaultValue(val){return val}}};function generic_sideeffect_defineProperties(target,props){for(var i=0;i1&&void 0!==arguments[1]&&arguments[1];var interactionType=arguments.length>2?arguments[2]:void 0,apply=arguments.length>3?arguments[3]:void 0;return this.firebolt.context.layers().forEach(function(layer){return!1!==layer.config().interactive&&layer.applyInteractionStyle(interactionType,set.uids,apply)}),this}}]),SurrogateSideEffect}();function spawnable_typeof(obj){return(spawnable_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function spawnable_defineProperties(target,props){for(var i=0;i=0&&x2<=width&&y>=0&&y2<=height){var payload=drag_action_config(context.getSourceInfo(),{startPos:{x:x,y:y},endPos:{x:x2,y:y2}},context.data().getFieldsConfig());onDrag(payload)}}).on("end",function(){var width=drawingInf.width,height=drawingInf.height,x=Math.min(width-subject.width,Math.max(subject.x,0)),y=Math.min(height-subject.height,Math.max(subject.y,0)),y2=y+subject.height,x2=x+subject.width;if(x>=0&&x2<=width&&y>=0&&y2<=height){var payload=drag_action_config(context.getSourceInfo(),{startPos:{x:x,y:y},endPos:{x:x2,y:y2},snap:!0},context.data().getFieldsConfig());payload.dragEnd=!0,onDrag(payload)}}))}}(firebolt)(renderer_utils_selectElement(this),["brush"],sideEffect)}).merge(selection).each(function(attrs){var element=renderer_utils_selectElement(this);for(var key in transition&&(element=element.transition().duration(transition.duration)),attrs)({}).hasOwnProperty.call(attrs,key)&&isValidValue(attrs[key])&&element.attr(key,attrs[key])}),boxClassName=getQualifiedClassName(boxConf.defClassName,this._id,classPrefix);return selectionBox.classed(boxClassName.join(" "),!0),selectionBox.classed(boxConf.className,!0),this}},{key:"hide",value:function hide(drawingInf){helper_changeVisibility(this,drawingInf.sideEffectGroup,!1)}},{key:"show",value:function show(drawingInf){helper_changeVisibility(this,drawingInf.sideEffectGroup,!0)}}],[{key:"defaultConfig",value:function defaultConfig(){return{defClassName:"selection-box-group",className:"",classPrefix:"muze",box:{defClassName:"selection-box",className:""},transition:{duration:200}}}},{key:"formalName",value:function formalName(){return"selectionBox"}}]),SelectionBox}(),INITIAL_STYLE={position:"absolute",width:0,height:0},default_config_defaultConfig={classPrefix:"muze",defClassName:"tooltip-box",connectorClassName:"tooltip-connectors",className:"",row:{margin:0},content:{spacing:5,iconContainerSize:10,iconScale:1,iconShape:"circle",iconColor:"#ff0000",rowMargin:"0px",margin:10,separator:":",className:"tooltip-content-container",parentClassName:"tooltip-content-parent-container"},arrow:{size:10,disabled:!1,defClassName:"tooltip-arrow",className:"",color:"rgba(195,195,195,0.85)"}},helper_getArrowPos=function getArrowPos(orient,dim,measurement,config){var arrowPos,x=measurement.x,y=measurement.y,boxHeight=measurement.boxHeight,boxWidth=measurement.boxWidth,arrowWidth=config.arrow.disabled?0:config.arrow.size;if("left"===orient||"right"===orient){var start=0,diff=boxHeight/2,plotBottom=dim.y+dim.height,boxBottom=y+boxHeight;dim.y>y?(start=dim.y-y,diff=(plotBottom>=boxBottom?boxBottom-dim.y:dim.height)/2):boxBottom>plotBottom&&(diff=Math.abs(y-(dim.y+dim.height))/2),arrowPos=start+diff-arrowWidth/2}else{var _start=0,_diff=boxWidth/2,plotRight=dim.x+dim.width,boxRight=x+boxWidth;dim.x>x?(_start=dim.x-x,_diff=(plotRight>=boxRight?boxRight-dim.x:dim.width)/2):boxRight>plotRight&&(_diff=Math.abs(x-(dim.x+dim.width))/2),arrowPos=_start+_diff-arrowWidth/2}return arrowPos},helper_placeArrow=function placeArrow(context,position,arrowPos){var tooltipArrow=context._tooltipArrow,tooltipBackground=context._tooltipBackground,config=context._config,classPrefix=config.classPrefix,arrowConf=config.arrow,className=getQualifiedClassName(arrowConf.defClassName,context._id,config.classPrefix);tooltipArrow.style("display","block"),tooltipArrow.attr("class","".concat(className.join(" "))),"left"===position||"right"===position?(tooltipArrow.style("top","".concat(arrowPos,"px")),tooltipArrow.style("left",""),tooltipBackground.style("top","".concat(arrowPos,"px")),tooltipBackground.style("left","")):("bottom"===position?tooltipArrow.style("top","100%"):tooltipArrow.style("top","-".concat(arrowConf.size,"px")),tooltipArrow.style("left","".concat(arrowPos,"px")),"bottom"===position?tooltipBackground.style("top","100%"):tooltipBackground.style("top","-".concat(arrowConf.size+3,"px")),tooltipBackground.style("left","".concat(arrowPos,"px"))),tooltipArrow.classed("".concat(classPrefix,"-tooltip-arrow"),!0),tooltipArrow.classed("".concat(classPrefix,"-tooltip-arrow-").concat(context._arrowOrientation),!1),tooltipArrow.classed("".concat(classPrefix,"-tooltip-arrow-").concat(position),!0),tooltipBackground.classed("".concat(classPrefix,"-tooltip-background-arrow"),!0),tooltipBackground.classed("".concat(classPrefix,"-tooltip-background-arrow-").concat(context._arrowOrientation),!1),tooltipBackground.classed("".concat(classPrefix,"-tooltip-background-arrow-").concat(position),!0)};__webpack_require__(10);function _construct(Parent,args,Class){return(_construct=function isNativeReflectConstruct(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],function(){})),!0}catch(e){return!1}}()?Reflect.construct:function _construct(Parent,args,Class){var a=[null];a.push.apply(a,args);var instance=new(Function.bind.apply(Parent,a));return Class&&strategy_setPrototypeOf(instance,Class.prototype),instance}).apply(null,arguments)}function strategy_setPrototypeOf(o,p){return(strategy_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){return o.__proto__=p,o})(o,p)}function strategy_toConsumableArray(arr){return function strategy_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);i1&&void 0!==arguments[1]?arguments[1]:{},context=arguments.length>2?arguments[2]:void 0,fieldValues=[],dataObj=dataModel.getData(),data=dataObj.data,schema=dataObj.schema,separator=config.separator,fieldsConfig=dataModel.getFieldsConfig(),fieldspace=dataModel.getFieldspace(),detailFields=context.detailFields||[],dimensions=schema.filter(function(d){return d.type===dist_datamodel.FieldType.DIMENSION}),measures=schema.filter(function(d){return d.type===dist_datamodel.FieldType.MEASURE}),containsDetailField=schema.find(function(d){return-1!==detailFields.indexOf(d.name)}),dataLen=data.length,valueParser=context.valueParser,axes=context.axes,dimensionMeasureMap=context.dimensionMeasureMap,timeDiffs=context.timeDiffs,defFormatter=strategy_formatters(null,null,valueParser)[dist_datamodel.DimensionSubtype.CATEGORICAL],getRowContent=function getRowContent(field,type){var value,formattedValue,measureIndex,values=[],index=fieldsConfig[field].index,interval=fieldsConfig[field].def.subtype===dist_datamodel.DimensionSubtype.TEMPORAL?timeDiffs[field]:0,formatterFn=strategy_getDefaultTooltipFormatterFn(strategy_formatters(function(val){return val},interval,valueParser)[type],defFormatter);if(null!==value){var uniqueVals=type===dist_datamodel.MeasureSubtype.CONTINUOUS?data.map(function(d){return d[index]}):strategy_toConsumableArray(new Set(data.map(function(d){return d[index]})));uniqueVals=uniqueVals.filter(function(d){return""!==d});var colorAxis=axes.color[0],shapeAxis=axes.shape[0],sizeAxis=axes.size[0],isRetinalField=(colorAxis||shapeAxis||sizeAxis)&&dataLen>1&&type!==dist_datamodel.MeasureSubtype.CONTINUOUS;uniqueVals.forEach(function(val,i){var key,associatedMeasures=dimensionMeasureMap[field];if(associatedMeasures&&associatedMeasures.length&&dataLen>1){key=val;var icon={value:""};if(isRetinalField&&(icon={type:"icon",color:colorAxis.getColor(val),shape:shapeAxis.getShape(val),size:sizeAxis.getSize(val)*config.iconScale}),associatedMeasures.length>1){var formattedKey=type===dist_datamodel.DimensionSubtype.TEMPORAL?formatterFn(key,interval):key;values.push([icon,"".concat(formattedKey)]),associatedMeasures.forEach(function(measure){measureIndex=fieldsConfig[measure].index,value=data[i][measureIndex];var numberFormat=fieldspace.fields[measureIndex].numberFormat(),measureFormatter=strategy_getDefaultTooltipFormatterFn(strategy_formatters(numberFormat,interval,valueParser)[dist_datamodel.MeasureSubtype.CONTINUOUS]);formattedValue=measureFormatter(value),values.push([{value:"".concat(measure).concat(separator),style:{"margin-left":"".concat(config.margin,"px}")},className:"".concat(config.classPrefix,"-tooltip-key")},{value:"".concat(formattedValue),className:"".concat(config.classPrefix,"-tooltip-value")}])})}else{measureIndex=fieldsConfig[associatedMeasures[0]].index,value=data[i][measureIndex];var numberFormat=fieldspace.fields[measureIndex].numberFormat(),measureFormatter=strategy_getDefaultTooltipFormatterFn(strategy_formatters(numberFormat,interval,valueParser)[dist_datamodel.MeasureSubtype.CONTINUOUS]);formattedValue=measureFormatter(value);var _formattedKey=type===dist_datamodel.DimensionSubtype.TEMPORAL?formatterFn(key,interval):key;values.push([icon,{value:"".concat(_formattedKey),className:"".concat(config.classPrefix,"-tooltip-key")},{value:"".concat(formattedValue),className:"".concat(config.classPrefix,"-tooltip-value")}])}}else key=field,formattedValue=formatterFn(value=val),values.push([{value:"".concat(key).concat(separator),className:"".concat(config.classPrefix,"-tooltip-key")},{value:"".concat(formattedValue),className:"".concat(config.classPrefix,"-tooltip-value")}])})}return values},displayFormat="keyValue";if(dataLen>1&&containsDetailField)fieldValues=function getTabularData(dataObj,context,defaultFormatter){var rows=[],data=dataObj.data,schema=dataObj.schema,fieldspace=dataObj.fieldspace;rows.push(schema.map(function(d){return d.name}));var valueParser=context.valueParser,timeDiffs=context.timeDiffs;return data.forEach(function(d){var row=[];schema.forEach(function(fieldObj,i){var interval=fieldObj.subtype===dist_datamodel.DimensionSubtype.TEMPORAL?timeDiffs[fieldObj.name]:0,numberFormat=fieldObj.type===dist_datamodel.FieldType.MEASURE&&fieldspace.fields[i].numberFormat(),value=strategy_getDefaultTooltipFormatterFn(strategy_formatters(numberFormat,interval,valueParser)[fieldObj.subtype],defaultFormatter)(d[i]);row.push(value)}),rows.push(row)}),rows}({data:data,schema:schema,fieldspace:fieldspace},context,defFormatter),displayFormat="table";else{dimensions.forEach(function(item){var type=item.subtype?item.subtype:item.type;fieldValues=[].concat(strategy_toConsumableArray(fieldValues),strategy_toConsumableArray(getRowContent(item.name,type)))});var allMeasures=strategy_toConsumableArray(_construct(Set,strategy_toConsumableArray(Object.values(dimensionMeasureMap))));(dataLen>1?measures.filter(function(d){return-1===allMeasures.indexOf(d.name)}):measures).forEach(function(item){var type=item.subtype?item.subtype:item.type;fieldValues=[].concat(strategy_toConsumableArray(fieldValues),strategy_toConsumableArray(getRowContent(item.name,type)))})}return{content:fieldValues,displayFormat:displayFormat}},strategy_strategy={keyValue:function keyValue(data,config,context){return strategy_buildTooltipData(data,config,context)}},DEFAULT_STRATEGY="keyValue";function content_defineProperties(target,props){for(var i=0;i0?(this._config=mergeRecursive(this._config,arguments.length<=0?void 0:arguments[0]),this):this._config}},{key:"update",value:function update(item){return this._model=item.model,this._strategy=void 0!==item.strategy?item.strategy:DEFAULT_STRATEGY,this._formatter=item.formatter,this}},{key:"context",value:function context(ctx){return this._context=ctx,this}},{key:"render",value:function render(mount){var data,config=this._config,iconContainerSize=config.iconContainerSize,formatter=this._formatter,rowMargin=config.rowMargin,model=this._model;if(this._mount=mount,(data=model instanceof Array?model:formatter instanceof Function?formatter(this._model,this._context):strategy_strategy[this._strategy](this._model,this.config(),this._context))instanceof Function)mount.html(data());else{var content=data,displayFormat="default";isSimpleObject(data)&&(content=data.content,displayFormat=data.displayFormat);var body=makeElement(mount,"div",[displayFormat],"".concat(config.classPrefix,"-tooltip-content"),{},function(d){return d});if("table"===displayFormat){var table=makeElement(body,"table",[1],"".concat(config.classPrefix,"-tooltip-table")),tbody=makeElement(table,"tbody",[1],"".concat(config.classPrefix,"-tooltip-table-tbody")),rows=makeElement(tbody,"tr",content,"".concat(config.classPrefix,"-tooltip-table-row"));rows.each(function(d,i){renderer_utils_selectElement(this).classed("".concat(config.classPrefix,"-tooltip-table-row-").concat(i),!0)}),makeElement(rows,"td",function(d){return d},"".concat(config.classPrefix,"-tooltip-table-cell")).each(function(d){renderer_utils_selectElement(this).html(d)})}else{var _rows=makeElement(body,"div",content,"".concat(config.classPrefix,"-tooltip-row")),_cells=makeElement(_rows,"span",function(d){return d},"".concat(config.classPrefix,"-tooltip-content"));_cells.attr("class","".concat(config.classPrefix,"-tooltip-content")),renderer_utils_setStyles(_rows,{margin:rowMargin}),renderer_utils_setStyles(_cells,{display:"inline-block","margin-right":"".concat(config.spacing,"px")}),_cells.each(function(d){var el=renderer_utils_selectElement(this);if(el.html(""),d instanceof Object)if("icon"===d.type){var svg=makeElement(el,"svg",[1]),path=makeElement(svg,"path",[1]),shape=d.shape instanceof Function?d.shape:common_utils_getSymbol(d.shape);renderer_utils_setAttrs(svg,{x:0,y:0,width:iconContainerSize,height:iconContainerSize}),renderer_utils_setAttrs(path,{d:shape.size(d.size)(),transform:"translate(".concat(iconContainerSize/2,", ").concat(iconContainerSize/2,")")}),renderer_utils_setStyles(path,{fill:d.color}),renderer_utils_setStyles(svg,{width:"".concat(iconContainerSize,"px"),height:"".concat(iconContainerSize,"px")})}else el.html(d.value),d.className&&el.classed(d.className,!0),renderer_utils_setStyles(el,d.style);else el.html(d)})}}return this}},{key:"clear",value:function clear(){return this._model=null,this}}],[{key:"defaultConfig",value:function defaultConfig(){var config=default_config_defaultConfig.content;return config.classPrefix=default_config_defaultConfig.classPrefix,config}}]),Content}();function tooltip_defineProperties(target,props){for(var i=0;i0){var defConf=mergeRecursive({},this.constructor.defaultConfig());return this._config=mergeRecursive(defConf,arguments.length<=0?void 0:arguments[0]),this}return this._config}},{key:"addClass",value:function addClass(className){return this._tooltipContainer.classed(className,!0),this}},{key:"context",value:function context(){return arguments.length?(this._context=arguments.length<=0?void 0:arguments[0],this):this._context}},{key:"content",value:function content(name,data){var contentConfig=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},config=this.config(),classPrefix=config.classPrefix,contentClass=config.content.className,formatter=config.formatter,className=contentConfig.className||"".concat(classPrefix,"-").concat(contentClass,"-").concat(name),content=this._contents[name]=this._contents[name]||new content_Content,container=makeElement(this._contentContainer,"div",[contentConfig.order],className);container.attr("class","".concat(classPrefix,"-").concat(contentClass," ").concat(className)),function reorderContainers(parentContainer,className){parentContainer.selectAll(className).sort(function(a,b){return a-b})}(this._contentContainer,".".concat(classPrefix,"-").concat(contentClass));var contentConf=config.content;return contentConfig.classPrefix=this._config.classPrefix,content.config(contentConf),null===data?(content.clear(),container.remove(),delete this._contents[name]):(content.update({model:data,formatter:contentConfig.formatter||formatter}),content.context(this._context),content.render(container)),Object.keys(this._contents).length||this.hide(),this}},{key:"getContents",value:function getContents(){return Object.values(this._contents)}},{key:"position",value:function position(x,y){var conf=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(!Object.keys(this._contents).length)return this.hide(),this;this.show();var target=this._target,repositionArrow=conf.repositionArrow;if(target&&repositionArrow){var node=this._tooltipContainer.node(),config=this._config,arrowDisabled=config.arrow.disabled,arrowWidth=arrowDisabled?0:config.arrow.size,arrowOrient=this._arrowOrientation,outsidePlot="left"===arrowOrient||"right"===arrowOrient?y+node.offsetHeight-arrowWidthtarget.y+target.height:x+node.offsetWidth-arrowWidthtarget.x+target.width;if(!arrowDisabled)if(outsidePlot){var path;this._tooltipArrow.style("display","none"),this._tooltipBackground.style("display","none"),this._tooltipConnectorContainer.style("display","block");var connector=this._tooltipConnectorContainer.selectAll("path").data([1]),enter=connector.enter().append("path");"left"===arrowOrient?path="M ".concat(x," ").concat(y+node.offsetHeight/2," L ").concat(target.x+target.width)+" ".concat(target.y+target.height/2):"right"===arrowOrient?path="M ".concat(x+node.offsetWidth," ").concat(y+node.offsetHeight/2)+" L ".concat(target.x," ").concat(target.y+target.height/2):"bottom"===arrowOrient&&(path="M ".concat(x+node.offsetWidth/2," ").concat(y+node.offsetHeight)+" L ".concat(target.x+target.width/2," ").concat(target.y)),enter.merge(connector).attr("d",path).style("display","block")}else{var arrowPos=helper_getArrowPos(arrowOrient,target,{x:x,y:y,boxHeight:node.offsetHeight,boxWidth:node.offsetWidth},this._config);helper_placeArrow(this,this._arrowOrientation,arrowPos),this._tooltipConnectorContainer.style("display","none")}}var offset=this._offset||{x:0,y:0};return this._tooltipContainer.style("left","".concat(offset.x+x,"px")).style("top","".concat(offset.y+y,"px")),this}},{key:"positionRelativeTo",value:function positionRelativeTo(dim){var obj,_this=this,tooltipConf=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},orientation=tooltipConf.orientation;if(this.show(),!dim)return this.hide(),this;var extent=this._extent,node=this._tooltipContainer.node();this._tooltipContainer.style("top","0px").style("left","0px");var offsetWidth=node.offsetWidth+2,offsetHeight=node.offsetHeight+2,config=this._config,offset=this._offset,arrowDisabled=config.arrow.disabled,arrowSize=arrowDisabled?0:config.arrow.size,draw=void 0===tooltipConf.draw||tooltipConf.draw,topSpace=dim.y,dimX=dim.x+dim.width+offset.x,rightSpace=extent.width-dimX,leftSpace=dim.x+offset.x-extent.x,positionTop=topSpace>offsetHeight+arrowSize,positionRight=rightSpace>=offsetWidth+arrowSize,positionLeft=leftSpace>=offsetWidth+arrowSize;return this._target=dim,orientation||(orientation=positionTop?"vertical":positionRight||positionLeft?"horizontal":"vertical"),"horizontal"===orientation?obj=function positionHorizontal(){var position,x=dim.x+dim.width,y=dim.y;return positionRight?(position="left",x+=arrowSize):positionLeft?(x=dim.x-offsetWidth,position="right",x-=arrowSize):(position="left",x+=arrowSize),dim.height2&&void 0!==arguments[2]?arguments[2]:{},totalHeight=0,totalWidth=0,dataModel=selectionSet.mergedEnter.model,context=this.firebolt.context,drawingInf=this.drawingContext();if(dataModel.isEmpty()||null===payload.criteria||!1===selectionSet.isSourceFieldPresent)return this.hide(options,null),this;var tooltips=this._tooltips,config=this.config(),boundBox={width:drawingInf.width,height:drawingInf.height},showInPosition=payload.showInPosition,pad=config.padding,dataModels=[],fragmented="fragmented"===config.mode,sourceInf=context.getSourceInfo(),fields=sourceInf.fields,showVertically=!!(!!fields.x[0]&&fields.x[0].type()===dist_datamodel.FieldType.DIMENSION),tooltipPos=payload.position,boxes=[],enter={},uids=dataModel.getData().uids;fragmented?dataModels.push.apply(dataModels,tooltip_toConsumableArray(uids.map(function(d){return dataModel.select(function(fieldsArr,i){return i===d},{saveChild:!1})}))):dataModels.push(dataModel);var target=payload.target,targetFields=[];if(target){targetFields=target[0]||[];for(var sourceFields=payload.sourceFields,indices=[],i=0,len=targetFields.length;idrawingInf.height:totalWidth>drawingInf.width)break;boxes.push({x:position.x,y:position.y,width:tooltipBoundBox.width,height:tooltipBoundBox.height,tooltip:tooltipInst})}}for(var key in tooltips)if(!enter[key]){var tooltip=tooltips[key];tooltip.content(payload.action,null),tooltip.getContents().length||(tooltip.remove(),delete tooltips[key])}return fragmented&&(!function spaceOutBoxes(boxes,extent,showVertically){var y,height,x,width,i,len=boxes.length,spaceOutIfOverlap=function spaceOutIfOverlap(firstBox,secondBox,opposite){x=firstBox.x,width=firstBox.width,y=firstBox.y,height=firstBox.height;var bottom=y+height,right=x+width;showVertically?(opposite?ysecondBox.y)&&(secondBox.y=opposite?firstBox.y-secondBox.height-5:bottom+5):(opposite?xsecondBox.x)&&(secondBox.x=opposite?firstBox.x-secondBox.width-5:right+5)};for(boxes.sort(function(a,b){return showVertically?a.y-b.y:a.x-b.x}),i=0,i=0;iextent.height||boxes[i].x+boxes[i].width>extent.width)for(showVertically?boxes[i].y-=boxes[i].height+boxes[i].y-extent.height:boxes[i].x-=boxes[i].width+boxes[i].x-extent.width,i=len-1;i>0;i--)spaceOutIfOverlap(boxes[i],boxes[i-1],!0)}(boxes,boundBox,showVertically),boxes.forEach(function(box){return box.tooltip.position(box.x,box.y,{repositionArrow:!0})})),this}},{key:"hide",value:function hide(options){var tooltips=this._tooltips;for(var key in tooltips)if({}.hasOwnProperty.call(tooltips,key)){var strategy=options.strategy||this._strategy;tooltips[key].content(strategy,null),tooltips[key].hide()}}}],[{key:"defaultConfig",value:function defaultConfig(){return{padding:5,offset:{x:0,y:0}}}},{key:"formalName",value:function formalName(){return"tooltip"}}]),Tooltip}();__webpack_require__(12);function crossline_typeof(obj){return(crossline_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function crossline_toConsumableArray(arr){return function crossline_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);i2&&void 0!==arguments[2]?arguments[2]:{},strategy=this._strategies[options.strategy||this._strategy];return!1!==selectionSet.isSourceFieldPresent&&strategy(selectionSet,this,options.strategy||this._strategy),this}}],[{key:"formalName",value:function formalName(){return"highlighter"}},{key:"target",value:function target(){return"visual-unit"}}]),PlotHighlighter}();function side_effects_filter_typeof(obj){return(side_effects_filter_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function side_effects_filter_defineProperties(target,props){for(var i=0;i67.5&&rotationNormalizer<=90||(yShift+=2*height),xShift=width,xShift=90===rotation?height:270===rotation?-height:0,orientation===axis_orientation_TOP?(xShift=fixedBaseline&&ticks[0]===d&&type===constants_LINEAR?xShift+xShift/2:xShift,renderer_utils_selectElement(this).attr("transform","translate(".concat(-xShift+tickSize,"\n ").concat(-yShift-tickSize,") rotate(").concat(rotation,")"))):(xShift=fixedBaseline&&ticks[0]===d&&type===constants_LINEAR?xShift-xShift/2:xShift,renderer_utils_selectElement(this).attr("transform","translate(".concat(xShift-tickSize,"\n ").concat(yShift+tickSize,") rotate(").concat(rotation,")"))),renderer_utils_selectElement(this).transition().duration(1e3).text(datum)}),tickText},axis_renderer_changeTickOrientation=function changeTickOrientation(selectContainer,axisInstance,tickSize){var _smartTicks=axisInstance._smartTicks,config=axisInstance.config(),renderConfig=axisInstance.renderConfig(),labelManager=axisInstance.dependencies().labelManager,orientation=config.orientation,classPrefix=config.classPrefix,labels=renderConfig.labels,rotation=labels.rotation,isSmartTicks=labels.smartTicks,tickText=selectContainer.selectAll(".tick text");if(tickText.selectAll("tspan").remove(),!rotation||"top"!==orientation&&"bottom"!==orientation)if(rotation||isSmartTicks){if(tickText.text(""),"top"===orientation||"bottom"===orientation)tickText.attr("y",0).attr("x",0).attr("transform","").text(""),makeElement(tickText,"tspan",function(d,i){return _smartTicks[i]?_smartTicks[i].lines:[]},"".concat(classPrefix,"-smart-text")).attr("dy","0").style("opacity","0").transition().duration(1e3).on("end",axisInstance.registerAnimationDoneHook()).attr("dy",function(d,i){return"bottom"===orientation||0!==i?_smartTicks[0].oriTextHeight:-_smartTicks[0].oriTextHeight*(_smartTicks[0].lines.length-1)-tickSize}).style("opacity",1).text(function(e){return e}).attr("x",0);else makeElement(tickText,"tspan",function(d,i){return _smartTicks[i].lines},"".concat(classPrefix,"-smart-text")).text(function(e){return e})}else tickText.attr("transform","");else axis_renderer_rotateAxis(axisInstance,tickText,labelManager);return tickText},axis_renderer_setFixedBaseline=function setFixedBaseline(axisInstance){var fixedBaseline=axisInstance.config().fixedBaseline,domain=axisInstance.domain();fixedBaseline&&domain.length&&axisInstance.setFixedBaseline()},axis_renderer_setAxisNamePos=function setAxisNamePos(textNode,orientation,measures){var axisNameHeight=measures.axisNameHeight,yOffset=measures.yOffset,labelOffset=measures.labelOffset,availableSpace=measures.availableSpace;switch(orientation){case axis_orientation_LEFT:textNode.attr("transform","translate(".concat(-(availableSpace.width-axisNameHeight),",").concat(yOffset+labelOffset,")rotate(-90)"));break;case axis_orientation_RIGHT:textNode.attr("transform","translate(".concat(availableSpace.width-axisNameHeight,",").concat(yOffset+labelOffset,")rotate(90)"));break;case axis_orientation_TOP:textNode.attr("transform","translate(".concat(availableSpace.width/2,",").concat(-availableSpace.height+axisNameHeight,")"));break;case axis_orientation_BOTTOM:textNode.attr("transform","translate(".concat(availableSpace.width/2,",").concat(availableSpace.height-axisNameHeight/2,")"))}return textNode};var setAxisRange=function setAxisRange(context,type,rangeBounds,offset){context.range(rangeBounds),offset&&context.config(function space_setter_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}({},"".concat(type,"Offset"),offset))},space_setter_adjustRange=function adjustRange(minDiff,range,domain,orientation){var diff=function getAxisOffset(timeDiff,range,domain){var width=Math.abs(range[1]-range[0])/(domain[1]-domain[0])*timeDiff,avWidth=range[1]-range[0],bars=avWidth/width;return(avWidth-avWidth/(bars+1)*bars)/2}(minDiff,range,domain);return orientation===axis_orientation_TOP||orientation===axis_orientation_BOTTOM?(range[0]+=diff,range[1]-=diff):(range[0]-=diff,range[1]+=diff),range},spaceSetter=function spaceSetter(context,spaceConfig){var tickInterval,heightForTicks,_context$availableSpa=context.availableSpace(),availWidth=_context$availableSpa.width,availHeight=_context$availableSpa.height,padding=_context$availableSpa.padding,top=padding.top,left=padding.left,bottom=padding.bottom,right=padding.right,isOffset=spaceConfig.isOffset,_context$renderConfig=context.renderConfig(),showAxisName=_context$renderConfig.showAxisName,labels=_context$renderConfig.labels,rotation=labels.rotation,_context$config2=context.config(),orientation=_context$config2.orientation,fixedBaseline=_context$config2.fixedBaseline,axisNamePadding=_context$config2.axisNamePadding,tickValues=_context$config2.tickValues,_context$getAxisDimen=context.getAxisDimensions(),tickDimensions=_context$getAxisDimen.tickDimensions,allTickDimensions=_context$getAxisDimen.allTickDimensions,axisNameDimensions=_context$getAxisDimen.axisNameDimensions,tickSize=_context$getAxisDimen.tickSize,tickDimHeight=tickDimensions.height,tickDimWidth=tickDimensions.width,namePadding=showAxisName?axisNamePadding:0,labelConfig={smartTicks:!0,rotation:labels.rotation},minTickDistance=context._minTickDistance,minTickSpace=context._minTickSpace,minDiff=context._minDiff,domain=context.domain(),axisNameHeight=axisNameDimensions.height;return{time:{x:function x(){var tickShifter=tickDimWidth/2;return setAxisRange(context,"y",space_setter_adjustRange(minDiff,[tickShifter,availWidth-left-right-tickShifter],domain,orientation),isOffset?availHeight:null),tickInterval=availWidth/context.getTickValues().length-minTickDistance.width,heightForTicks=availHeight-axisNameDimensions.availHeight-tickSize-namePadding,tickInterval0&&void 0!==arguments[0]?arguments[0]:0,width=arguments.length>1?arguments[1]:void 0,height=arguments.length>2?arguments[2]:void 0,rotatedHeight=height,rotatedWidth=width;if(rotation){var angle=(rotation||0)*Math.PI/180;rotatedWidth=Math.abs(height*Math.sin(angle))+Math.abs(width*Math.cos(angle)),rotatedHeight=Math.abs(width*Math.sin(angle))+Math.abs(height*Math.cos(angle))}return{width:rotatedWidth,height:rotatedHeight}},helper_setOffset=function setOffset(context){var x=0,y=0,logicalSpace=context.logicalSpace(),config=context.config(),orientation=config.orientation,xOffset=config.xOffset,yOffset=config.yOffset;orientation===axis_orientation_LEFT&&(x=void 0===xOffset?logicalSpace.width:xOffset),orientation===axis_orientation_TOP&&(y=void 0===yOffset?logicalSpace.height:yOffset),context.config({xOffset:x,yOffset:y})},getAxisComponentDimensions=function getAxisComponentDimensions(context){var axisTicks,largestTick="",largestTickDimensions={width:0,height:0},smartTick={},allTickDimensions=[],scale=context.scale(),showAxisName=context.renderConfig().showAxisName,_context$config=context.config(),tickValues=_context$config.tickValues,name=_context$config.name,labelManager=context.dependencies().labelManager,labelFunc=scale.ticks||scale.quantile||scale.domain;return labelManager.setStyle(context._tickLabelStyle),axisTicks=(axisTicks=tickValues||labelFunc()).map(function(originalLabel,i){var label=context.getFormattedText(originalLabel,i,axisTicks),tickDimensions=labelManager.getOriSize(label);return allTickDimensions.push(tickDimensions),tickDimensions.width>largestTickDimensions.width&&(largestTick=label,smartTick=context.smartTicks()?context.smartTicks()[i]:{},largestTickDimensions=tickDimensions),label}),labelManager.setStyle(context._axisNameStyle),{axisNameDimensions:showAxisName?labelManager.getOriSize(name):{width:0,height:0},largestTick:largestTick,largestTickDimensions:largestTickDimensions,allTickDimensions:allTickDimensions,axisTicks:axisTicks,smartTick:smartTick,tickSize:context.getTickSize()}},getHorizontalAxisSpace=function getHorizontalAxisSpace(context,axisDimensions,range){var width,height,domain=context.domain(),tickSize=axisDimensions.tickSize,tickDimensions=axisDimensions.tickDimensions,axisNameDimensions=axisDimensions.axisNameDimensions,_context$config2=context.config(),axisNamePadding=_context$config2.axisNamePadding,tickValues=_context$config2.tickValues,showAxisName=context.renderConfig().showAxisName,axisDimHeight=axisNameDimensions.height,tickDimHeight=tickDimensions.height,tickDimWidth=tickDimensions.width;if(width=range&&range.length?range[1]-range[0]:0,height=0,tickValues){var minTickDiff=context.getMinTickDifference(),_ref=[Math.min.apply(Math,cartesian_axis_helper_toConsumableArray(tickValues).concat(cartesian_axis_helper_toConsumableArray(domain))),Math.max.apply(Math,cartesian_axis_helper_toConsumableArray(tickValues).concat(cartesian_axis_helper_toConsumableArray(domain)))];width=(_ref[1]-_ref[0])/Math.abs(minTickDiff)*(tickDimWidth+context._minTickDistance.width)}return height=width&&0!==width?tickDimHeight:Math.max(tickDimWidth,tickDimHeight),{width:width,height:height+=(showAxisName?axisDimHeight+axisNamePadding:0)+tickSize}},getVerticalAxisSpace=function getVerticalAxisSpace(context,axisDimensions){var height,width,domain=context.domain(),tickSize=axisDimensions.tickSize,tickDimensions=axisDimensions.tickDimensions,axisNameDimensions=axisDimensions.axisNameDimensions,_context$config3=context.config(),axisNamePadding=_context$config3.axisNamePadding,tickValues=_context$config3.tickValues,showAxisName=context.renderConfig().showAxisName,axisDimHeight=axisNameDimensions.height,tickDimHeight=tickDimensions.height;if(height=0,width=tickDimensions.width,tickValues){var minTickDiff=context.getMinTickDifference(),_ref2=[Math.min.apply(Math,cartesian_axis_helper_toConsumableArray(tickValues).concat(cartesian_axis_helper_toConsumableArray(domain))),Math.max.apply(Math,cartesian_axis_helper_toConsumableArray(tickValues).concat(cartesian_axis_helper_toConsumableArray(domain)))];height=(_ref2[1]-_ref2[0])/Math.abs(minTickDiff)*tickDimHeight}return{height:height,width:width+=(showAxisName?axisDimHeight:0)+tickSize+axisNamePadding}},helper_calculateBandSpace=function calculateBandSpace(context){var range=context.range(),axisDimensions=context.getAxisDimensions(),orientation=context.config().orientation,show=context.renderConfig().show,largestTickDimensions=axisDimensions.largestTickDimensions,axisTicks=axisDimensions.axisTicks,allTickDimensions=axisDimensions.allTickDimensions,largestDimHeight=largestTickDimensions.height,minTickWidth=context._minTickDistance.width;if(orientation===axis_orientation_TOP||orientation===axis_orientation_BOTTOM){var _getHorizontalAxisSpa=getHorizontalAxisSpace(context,axisDimensions,range),_width=_getHorizontalAxisSpa.width,_height=_getHorizontalAxisSpa.height;return _width&&0!==_width||(_width=allTickDimensions.reduce(function(t,n){return t+Math.min(n.width,n.height)+minTickWidth},0)),!1===show&&(_height=0,_width=0),{width:_width,height:_height}}var _getVerticalAxisSpace=getVerticalAxisSpace(context,axisDimensions),width=_getVerticalAxisSpace.width,height=_getVerticalAxisSpace.height;return height&&0!==height||(height=axisTicks.length*(largestDimHeight+context._minTickDistance.height)+largestDimHeight),!1===show&&(width=0),{width:width,height:height}},helper_getValidDomain=function getValidDomain(context,domain){var userDom=context.config().domain;return userDom&&(domain=userDom),defaultValue(domain,[])},setContinousAxisDomain=function setContinousAxisDomain(context,domain){var nice=context.config().nice,scale=context.scale.bind(context);scale().domain(domain),nice&&scale().nice(),context._domain=scale().domain()},props_PROPS={availableSpace:{},axisDimensions:{},axisComponentDimensions:{},config:{sanitization:function sanitization(context,value){var oldConfig=Object.assign({},context._config||{}),mockedOldConfig=mergeRecursive({},oldConfig);(value=mergeRecursive(mockedOldConfig,value)).axisNamePadding=Math.max(value.axisNamePadding,0);var shouldAxesScaleUpdate=function hasAxesConfigChanged(){var obj=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},obj1=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},properties=arguments.length>2?arguments[2]:void 0;return!(!Object.keys(obj).length||!Object.keys(obj1).length)&&properties.some(function(key){return obj[key]!==obj1[key]})}(value,oldConfig,["interpolator","exponent","base","orientation"]),tickFormatter=context.sanitizeTickFormatter(value);shouldAxesScaleUpdate&&(context._scale=context.createScale(value),context._axis=context.createAxis(value)),context._tickFormatter=function(ticks){return tickFormatter(ticks)};var _value=value,labels=_value.labels,show=_value.show,showInnerTicks=_value.showInnerTicks,showOuterTicks=_value.showOuterTicks,showAxisName=_value.showAxisName;return context.renderConfig({labels:labels,show:show,showInnerTicks:showInnerTicks,showOuterTicks:showOuterTicks,showAxisName:showAxisName}),value}},renderConfig:{sanitization:function sanitization(context,value){var oldConfig=Object.assign({},context._renderConfig||{});return value=mergeRecursive(oldConfig,value)}},logicalSpace:{},mount:{},range:{sanitization:function sanitization(context,value){return context.scale().range(value),context.logicalSpace(null),value}},smartTicks:{},tickSize:{},maxTickSpaces:{},valueParser:{defaultValue:function defaultValue(val){return val}}};function simple_axis_defineProperties(target,props){for(var i=0;i0&&void 0!==arguments[0]?arguments[0]:0,height=arguments.length>1?arguments[1]:void 0,padding=arguments.length>2?arguments[2]:void 0,isOffset=arguments.length>3?arguments[3]:void 0,labelConfig={},orientation=this.config().orientation;return this.availableSpace({width:width,height:height,padding:padding}),labelConfig=orientation===axis_orientation_TOP||orientation===axis_orientation_BOTTOM?spaceSetter(this,{isOffset:isOffset}).continous.x():spaceSetter(this,{isOffset:isOffset}).continous.y(),this.renderConfig({labels:labelConfig}),this.setTickConfig(),this.getTickSize(),this}},{key:"setTickConfig",value:function setTickConfig(){return this}},{key:"getScaleValue",value:function getScaleValue(domainVal){if(null!==domainVal&&void 0!==domainVal)return this.scale()(domainVal)}},{key:"getTickSize",value:function getTickSize(){return this.axis().tickSize()}},{key:"getAxisDimensions",value:function getAxisDimensions(){for(var _len=arguments.length,params=new Array(_len),_key=0;_key<_len;_key++)params[_key]=arguments[_key];return this.axisDimensions(function computeAxisDimensions(context){var tickDimensions={},labels=context.renderConfig().labels,smartTicks=labels.smartTicks,rotation=labels.rotation,_getAxisComponentDime=getAxisComponentDimensions(context),largestTickDimensions=_getAxisComponentDime.largestTickDimensions,axisTicks=_getAxisComponentDime.axisTicks,smartTick=_getAxisComponentDime.smartTick,axisNameDimensions=_getAxisComponentDime.axisNameDimensions,allTickDimensions=_getAxisComponentDime.allTickDimensions,tickSize=_getAxisComponentDime.tickSize,labelHeight=largestTickDimensions.height,labelWidth=largestTickDimensions.width;return 0===context.domain().length?null:(tickDimensions=getRotatedSpaces(rotation,(tickDimensions=smartTicks?smartTick:{width:labelWidth,height:labelHeight}).width,tickDimensions.height),0===tickSize&&(tickDimensions={width:0,height:0}),{allTickDimensions:allTickDimensions,tickSize:tickSize,tickDimensions:tickDimensions,axisNameDimensions:axisNameDimensions,largestTickDimensions:largestTickDimensions,axisTicks:axisTicks})}.apply(void 0,[this].concat(params))),this.axisDimensions()}},{key:"getLogicalSpace",value:function getLogicalSpace(){return this.logicalSpace()||(this.logicalSpace(function calculateContinousSpace(context){var range=context.range(),axisDimensions=context.getAxisDimensions(),orientation=context.config().orientation,_context$renderConfig6=context.renderConfig(),show=_context$renderConfig6.show,showAxisName=_context$renderConfig6.showAxisName,axisNameDimensions=axisDimensions.axisNameDimensions;if(!1===show)return{width:0,height:0};var axisNameWidth=axisNameDimensions.width;if(orientation===axis_orientation_TOP||orientation===axis_orientation_BOTTOM){var _getHorizontalAxisSpa2=getHorizontalAxisSpace(context,axisDimensions,range),_width2=_getHorizontalAxisSpa2.width,_height2=_getHorizontalAxisSpa2.height;return{width:Math.max(_width2,axisNameWidth),height:_height2}}var _getVerticalAxisSpace2=getVerticalAxisSpace(context,axisDimensions),width=_getVerticalAxisSpace2.width,height=_getVerticalAxisSpace2.height;return{width:width,height:Math.max(height,showAxisName?axisNameWidth:0)}}(this)),this.logicalSpace(),helper_setOffset(this)),this.logicalSpace()}},{key:"invert",value:function invert(value){return this.scale().invert(value)}},{key:"getNearestRange",value:function getNearestRange(v1,v2){return[v1,v2]}},{key:"invertExtent",value:function invertExtent(v1,v2){return[this.invert(v1),this.invert(v2)]}},{key:"getMinTickDifference",value:function getMinTickDifference(){return this.domain()}},{key:"getFormattedTickValues",value:function getFormattedTickValues(tickValues){return tickValues}},{key:"getUnitWidth",value:function getUnitWidth(){return 0}},{key:"serialize",value:function serialize(){return{name:this.name,type:this.type,range:this.range(),config:this.config()}}},{key:"render",value:function render(){return this.mount()&&(this.setTickConfig(),function renderAxis(axisInstance){var config=axisInstance.config(),renderConfig=axisInstance.renderConfig(),labelManager=axisInstance.dependencies().labelManager,mount=axisInstance.mount(),range=axisInstance.range(),axis=axisInstance.axis(),scale=axisInstance.scale(),axisNameStyle=axisInstance._axisNameStyle,tickLabelStyle=axisInstance._tickLabelStyle,axisTickFormatter=axisInstance._tickFormatter,tickValues=axisInstance.tickValues,orientation=config.orientation,name=config.name,xOffset=config.xOffset,yOffset=config.yOffset,axisNamePadding=config.axisNamePadding,className=config.className,id=config.id,classPrefix=config.classPrefix,show=renderConfig.show,showAxisName=renderConfig.showAxisName,labels=renderConfig.labels;if(show){var tickSize=axisInstance.getTickSize(),selectContainer=makeElement(renderer_utils_selectElement(mount),"g",[axisInstance],"".concat(className),{},function(key){return key.config().id});labelManager.setStyle(tickLabelStyle);var labelFunc=scale.ticks||scale.quantile||scale.domain;axis.tickFormat(axisTickFormatter(tickValues||axis.tickValues()||labelFunc()));var availableSpace=Math.abs(range[0]-range[1]),labelProps=axisInstance.axisComponentDimensions().largestTickDimensions;selectContainer.attr("transform","translate(".concat(xOffset,",").concat(yOffset,")")),axis_renderer_setFixedBaseline(axisInstance),!1===labels.smartTicks||0===tickSize?selectContainer.transition().duration(1e3).on("end",axisInstance.registerAnimationDoneHook()).call(axis):selectContainer.call(axis),selectContainer.selectAll(".tick").classed("".concat(classPrefix,"-ticks"),!0),selectContainer.selectAll(".tick line").classed("".concat(classPrefix,"-tick-lines"),!0),selectContainer.selectAll(".tick text").classed("".concat(classPrefix,"-ticks"),!0).classed("".concat(classPrefix,"-ticks-").concat(id),!0),axis_renderer_changeTickOrientation(selectContainer,axisInstance,tickSize);var textNode=makeElement(selectContainer,"text",[name],"".concat(classPrefix,"-axis-name")).attr("text-anchor","middle").classed("".concat(classPrefix,"-axis-name-").concat(id),!0).text(function(d){return d});textNode.classed(HIDDEN,!showAxisName);var labelOffset=availableSpace/2;labelManager.setStyle(axisNameStyle);var axisNameSpace=labelManager.getOriSize(name),measures={labelProps:labelProps,tickSize:tickSize,axisNamePadding:axisNamePadding,axisNameHeight:axisNameSpace.height,axisNameWidth:axisNameSpace.width,yOffset:yOffset,xOffset:xOffset,labelOffset:labelOffset,availableSpace:axisInstance.availableSpace()};axis_renderer_setAxisNamePos(textNode,orientation,measures)}}(this)),this}},{key:"remove",value:function remove(){return renderer_utils_selectElement(this.mount()).remove(),this}},{key:"unsubscribe",value:function unsubscribe(){return this}},{key:"isReverse",value:function isReverse(){var range=this.range();return range[0]>range[1]}},{key:"getPixelToValueRatio",value:function getPixelToValueRatio(){var scale=this.scale(),range=scale.range(),domain=scale.domain();return Math.abs(range[1]-range[0])/(domain[1]-domain[0])}},{key:"animationDone",value:function animationDone(){return Promise.all(this._animationDonePromises)}},{key:"registerAnimationDoneHook",value:function registerAnimationDoneHook(){var resolveFn,promise=new Promise(function(resolve){resolveFn=resolve});return this._animationDonePromises.push(promise),function(){resolveFn()}}},{key:"id",get:function get(){return this._id}}],[{key:"defaultConfig",value:function defaultConfig(){return cartesian_axis_default_config_defaultConfig}}]),SimpleAxis}();function linear_defineProperties(target,props){for(var i=0;i0&&void 0!==arguments[0]?arguments[0]:0,height=arguments.length>1?arguments[1]:void 0,padding=arguments.length>2?arguments[2]:void 0,isOffset=arguments.length>3?arguments[3]:void 0,labelConfig={},orientation=this.config().orientation;return this.availableSpace({width:width,height:height,padding:padding}),labelConfig=orientation===axis_orientation_TOP||orientation===axis_orientation_BOTTOM?spaceSetter(this,{isOffset:isOffset}).continous.x():spaceSetter(this,{isOffset:isOffset}).continous.y(),this.renderConfig({labels:labelConfig}),this.setTickConfig(),this.getTickSize(),this}},{key:"setTickConfig",value:function setTickConfig(){var tickValues=this.config().tickValues,showInnerTicks=this.renderConfig().showInnerTicks,axis=this.axis();return showInnerTicks?tickValues?(tickValues instanceof Array&&this.axis().tickValues(tickValues),this):(axis.tickValues(this.getTickValues()),this):(axis.tickValues([]),this)}},{key:"getTickValues",value:function getTickValues(){var _this$config3=this.config(),orientation=_this$config3.orientation,tickValues=_this$config3.tickValues,range=this.range(),axis=this.axis(),availableSpace=Math.abs(range[0]-range[1]),labelProps=this.axisComponentDimensions().largestTickDimensions;return tickValues?axis.scale().ticks(tickValues):function getNumberOfTicks(availableSpace,labelDim,axis,axisInstance){var ticks=axis.scale().ticks(),numberOfTicks=axisInstance.config().numberOfTicks,tickLength=ticks.length,numberOfValues=tickLength;return tickLength*(1.5*labelDim)>availableSpace&&(numberOfValues=Math.floor(availableSpace/(1.5*labelDim))),numberOfValues=Math.min(numberOfTicks,Math.max(2,numberOfValues)),axis.scale().ticks(numberOfValues)}(availableSpace,labelProps[orientation===axis_orientation_BOTTOM||orientation===axis_orientation_TOP?"width":"height"],axis,this)}},{key:"getMinTickDifference",value:function getMinTickDifference(){return getSmallestDiff(this.config().tickValues)}},{key:"setFixedBaseline",value:function setFixedBaseline(tickText){var orientation=this.config().orientation,rotation=this.renderConfig().labels.rotation,axis=this.axis(),ticks=axis.scale().ticks(),_this$axisComponentDi=this.axisComponentDimensions().allTickDimensions[0],width=_this$axisComponentDi.width,height=_this$axisComponentDi.height;return axis.tickTransform(function(d){if(d===ticks[0]){if(orientation===axis_orientation_LEFT||orientation===axis_orientation_RIGHT)return"translate(0, -".concat(height/3,"px)");if((orientation===axis_orientation_TOP||orientation===axis_orientation_BOTTOM)&&!rotation)return"translate(".concat(width/2,"px, ",0,"px)")}return""}),tickText}}],[{key:"type",value:function type(){return LINEAR}}]),ContinousAxis}();function band_axis_typeof(obj){return(band_axis_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function band_axis_defineProperties(target,props){for(var i=0;i0&&void 0!==arguments[0]?arguments[0]:0,height=arguments.length>1?arguments[1]:void 0,padding=arguments.length>2?arguments[2]:void 0,isOffset=arguments.length>3?arguments[3]:void 0,labelConfig={},orientation=this.config().orientation;return this.availableSpace({width:width,height:height,padding:padding}),labelConfig=orientation===axis_orientation_TOP||orientation===axis_orientation_BOTTOM?spaceSetter(this,{isOffset:isOffset}).band.x():spaceSetter(this,{isOffset:isOffset}).band.y(),this.renderConfig({labels:labelConfig}),this.setTickConfig(),this}},{key:"setTickConfig",value:function setTickConfig(){var smartlabel,smartTicks="",domain=this.domain(),labelManager=this._dependencies.labelManager,_this$config2=this.config(),tickValues=_this$config2.tickValues,padding=_this$config2.padding,labels=this.renderConfig().labels,_this$maxTickSpaces=this.maxTickSpaces(),availHeight=_this$maxTickSpaces.height,availWidth=_this$maxTickSpaces.width,noWrap=_this$maxTickSpaces.noWrap,_getRotatedSpaces=getRotatedSpaces(labels.rotation,availWidth,availHeight),width=_getRotatedSpaces.width,height=_getRotatedSpaces.height;if(tickValues&&this.axis().tickValues(tickValues),smartTicks=tickValues||domain,labelManager.setStyle(this._tickLabelStyle),"number"==typeof padding&&padding>=0&&padding<=1&&this.scale().padding(padding),domain&&domain.length){var values=tickValues||domain,tickFormatter=this._tickFormatter(values);smartTicks=values.map(function(d,i){return labelManager.useEllipsesOnOverflow(!0),smartlabel=labelManager.getSmartText(tickFormatter(d,i),width,height,noWrap),labelManager.constructor.textToLines(smartlabel)})}return this.smartTicks(smartTicks),this}},{key:"getLogicalSpace",value:function getLogicalSpace(){return this.logicalSpace()||(this.logicalSpace(helper_calculateBandSpace(this)),helper_setOffset(this),this.logicalSpace()),this.logicalSpace()}},{key:"getTickValues",value:function getTickValues(){return this.axis().scale().domain()}},{key:"sanitizeTickFormatter",value:function sanitizeTickFormatter(value){var _this=this,tickFormat=value.tickFormat;return tickFormat?function(ticks){return function(val,i){return tickFormat(val,val,i,ticks)}}:function(){return function(val){return _this.valueParser()(val)}}}},{key:"getUnitWidth",value:function getUnitWidth(){return this.scale().bandwidth()}},{key:"getTickSize",value:function getTickSize(){var _this$renderConfig2=this.renderConfig(),showInnerTicks=_this$renderConfig2.showInnerTicks,showOuterTicks=_this$renderConfig2.showOuterTicks,axis=this.axis();return axis.tickSizeInner(showInnerTicks?6:0),axis.tickSizeOuter(showOuterTicks?6:0),axis.tickSize()}},{key:"invertExtent",value:function invertExtent(v1,v2){return this.scale().invertExtent(v1,v2)}},{key:"getNearestRange",value:function getNearestRange(v1,v2){var scale=this.scale(),range=scale.range(),reverse=range[0]>range[1],extent=this.invertExtent(v1,v2);return[scale(reverse?extent[extent.length-1]:extent[0]),scale(reverse?extent[0]:extent[extent.length-1])+scale.bandwidth()]}}],[{key:"type",value:function type(){return BAND}}]),BandAxis}();function time_axis_typeof(obj){return(time_axis_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function time_axis_defineProperties(target,props){for(var i=0;i0&&void 0!==arguments[0]?arguments[0]:0,height=arguments.length>1?arguments[1]:void 0,padding=arguments.length>2?arguments[2]:void 0,isOffset=arguments.length>3?arguments[3]:void 0,labelConfig={},orientation=this.config().orientation;return this.availableSpace({width:width,height:height,padding:padding}),labelConfig=orientation===axis_orientation_TOP||orientation===axis_orientation_BOTTOM?spaceSetter(this,{isOffset:isOffset}).time.x():spaceSetter(this,{isOffset:isOffset}).time.y(),this.renderConfig({labels:labelConfig}),this.setTickConfig(),this.getTickSize(),this}},{key:"setTickConfig",value:function setTickConfig(){var smartTicks,smartlabel,tickValues=this.config().tickValues,labels=this.renderConfig().labels,_this$maxTickSpaces=this.maxTickSpaces(),availHeight=_this$maxTickSpaces.height,availWidth=_this$maxTickSpaces.width,noWrap=_this$maxTickSpaces.noWrap,labelManager=this._dependencies.labelManager,domain=this.getTickValues();tickValues&&this.axis().tickValues(tickValues);var _getRotatedSpaces=getRotatedSpaces(labels.rotation,availWidth,availHeight),width=_getRotatedSpaces.width,height=_getRotatedSpaces.height;if(smartTicks=tickValues||domain,labelManager.setStyle(this._tickLabelStyle),domain&&domain.length){var values=tickValues||domain,tickFormatter=this._tickFormatter(values);smartTicks=values.map(function(d,i){return labelManager.useEllipsesOnOverflow(!0),smartlabel=labelManager.getSmartText(tickFormatter(d,i),width,height,noWrap),labelManager.constructor.textToLines(smartlabel)})}return this.smartTicks(smartTicks),this}}],[{key:"type",value:function type(){return TIME}}]),TimeAxis}(),x11Colors={Pink:{hex:"ffc0cb",rgb:"255,192,203"},LightPink:{hex:"ffb6c1",rgb:"255,182,193"},HotPink:{hex:"ff69b4",rgb:"255,105,180"},DeepPink:{hex:"ff1493",rgb:"255,20,147"},PaleVioletRed:{hex:"db7093",rgb:"219,112,147"},MediumVioletRed:{hex:"c71585",rgb:"199,21,133"},LightSalmon:{hex:"ffa07a",rgb:"255,160,122"},Salmon:{hex:"fa8072",rgb:"250,128,114"},DarkSalmon:{hex:"e9967a",rgb:"233,150,122"},LightCoral:{hex:"f08080",rgb:"240,128,128"},IndianRed:{hex:"cd5c5c",rgb:"205,92,92"},Crimson:{hex:"dc143c",rgb:"220,20,60"},FireBrick:{hex:"b22222",rgb:"178,34,34"},DarkRed:{hex:"8b0000",rgb:"139,0,0"},Red:{hex:"ff0000",rgb:"255,0,0"},OrangeRed:{hex:"ff4500",rgb:"255,69,0"},Tomato:{hex:"ff6347",rgb:"255,99,71"},Coral:{hex:"ff7f50",rgb:"255,127,80"},DarkOrange:{hex:"ff8c00",rgb:"255,140,0"},Orange:{hex:"ffa500",rgb:"255,165,0"},Gold:{hex:"ffd700",rgb:"255,215,0"},Yellow:{hex:"ffff00",rgb:"255,255,0"},LightYellow:{hex:"ffffe0",rgb:"255,255,224"},LemonChiffon:{hex:"fffacd",rgb:"255,250,205"},LightGoldenrodYellow:{hex:"fafad2",rgb:"250,250,210"},PapayaWhip:{hex:"ffefd5",rgb:"255,239,213"},Moccasin:{hex:"ffe4b5",rgb:"255,228,181"},PeachPuff:{hex:"ffdab9",rgb:"255,218,185"},PaleGoldenrod:{hex:"eee8aa",rgb:"238,232,170"},Khaki:{hex:"f0e68c",rgb:"240,230,140"},DarkKhaki:{hex:"bdb76b",rgb:"189,183,107"},Cornsilk:{hex:"fff8dc",rgb:"255,248,220"},BlanchedAlmond:{hex:"ffebcd",rgb:"255,235,205"},Bisque:{hex:"ffe4c4",rgb:"255,228,196"},NavajoWhite:{hex:"ffdead",rgb:"255,222,173"},Wheat:{hex:"f5deb3",rgb:"245,222,179"},BurlyWood:{hex:"deb887",rgb:"222,184,135"},Tan:{hex:"d2b48c",rgb:"210,180,140"},RosyBrown:{hex:"bc8f8f",rgb:"188,143,143"},SandyBrown:{hex:"f4a460",rgb:"244,164,96"},Goldenrod:{hex:"daa520",rgb:"218,165,32"},DarkGoldenrod:{hex:"b8860b",rgb:"184,134,11"},Peru:{hex:"cd853f",rgb:"205,133,63"},Chocolate:{hex:"d2691e",rgb:"210,105,30"},SaddleBrown:{hex:"8b4513",rgb:"139,69,19"},Sienna:{hex:"a0522d",rgb:"160,82,45"},Brown:{hex:"a52a2a",rgb:"165,42,42"},Maroon:{hex:"800000",rgb:"128,0,0"},DarkOliveGreen:{hex:"556b2f",rgb:"85,107,47"},Olive:{hex:"808000",rgb:"128,128,0"},OliveDrab:{hex:"6b8e23",rgb:"107,142,35"},YellowGreen:{hex:"9acd32",rgb:"154,205,50"},LimeGreen:{hex:"32cd32",rgb:"50,205,50"},Lime:{hex:"00ff00",rgb:"0,255,0"},LawnGreen:{hex:"7cfc00",rgb:"124,252,0"},Chartreuse:{hex:"7fff00",rgb:"127,255,0"},GreenYellow:{hex:"adff2f",rgb:"173,255,47"},SpringGreen:{hex:"00ff7f",rgb:"0,255,127"},MediumSpringGreen:{hex:"00fa9a",rgb:"0,250,154"},LightGreen:{hex:"90ee90",rgb:"144,238,144"},PaleGreen:{hex:"98fb98",rgb:"152,251,152"},DarkSeaGreen:{hex:"8fbc8f",rgb:"143,188,143"},MediumSeaGreen:{hex:"3cb371",rgb:"60,179,113"},SeaGreen:{hex:"2e8b57",rgb:"46,139,87"},ForestGreen:{hex:"228b22",rgb:"34,139,34"},Green:{hex:"008000",rgb:"0,128,0"},DarkGreen:{hex:"006400",rgb:"0,100,0"},MediumAquamarine:{hex:"66cdaa",rgb:"102,205,170"},Aqua:{hex:"00ffff",rgb:"0,255,255"},Cyan:{hex:"00ffff",rgb:"0,255,255"},LightCyan:{hex:"e0ffff",rgb:"224,255,255"},PaleTurquoise:{hex:"afeeee",rgb:"175,238,238"},Aquamarine:{hex:"7fffd4",rgb:"127,255,212"},Turquoise:{hex:"40e0d0",rgb:"64,224,208"},MediumTurquoise:{hex:"48d1cc",rgb:"72,209,204"},DarkTurquoise:{hex:"00ced1",rgb:"0,206,209"},LightSeaGreen:{hex:"20b2aa",rgb:"32,178,170"},CadetBlue:{hex:"5f9ea0",rgb:"95,158,160"},DarkCyan:{hex:"008b8b",rgb:"0,139,139"},Teal:{hex:"008080",rgb:"0,128,128"},LightSteelBlue:{hex:"b0c4de",rgb:"176,196,222"},PowderBlue:{hex:"b0e0e6",rgb:"176,224,230"},LightBlue:{hex:"add8e6",rgb:"173,216,230"},SkyBlue:{hex:"87ceeb",rgb:"135,206,235"},LightSkyBlue:{hex:"87cefa",rgb:"135,206,250"},DeepSkyBlue:{hex:"00bfff",rgb:"0,191,255"},DodgerBlue:{hex:"1e90ff",rgb:"30,144,255"},CornflowerBlue:{hex:"6495ed",rgb:"100,149,237"},SteelBlue:{hex:"4682b4",rgb:"70,130,180"},RoyalBlue:{hex:"4169e1",rgb:"65,105,225"},Blue:{hex:"0000ff",rgb:"0,0,255"},MediumBlue:{hex:"0000cd",rgb:"0,0,205"},DarkBlue:{hex:"00008b",rgb:"0,0,139"},Navy:{hex:"000080",rgb:"0,0,128"},MidnightBlue:{hex:"191970",rgb:"25,25,112"},Lavender:{hex:"e6e6fa",rgb:"230,230,250"},Thistle:{hex:"d8bfd8",rgb:"216,191,216"},Plum:{hex:"dda0dd",rgb:"221,160,221"},Violet:{hex:"ee82ee",rgb:"238,130,238"},Orchid:{hex:"da70d6",rgb:"218,112,214"},Fuchsia:{hex:"ff00ff",rgb:"255,0,255"},Magenta:{hex:"ff00ff",rgb:"255,0,255"},MediumOrchid:{hex:"ba55d3",rgb:"186,85,211"},MediumPurple:{hex:"9370db",rgb:"147,112,219"},BlueViolet:{hex:"8a2be2",rgb:"138,43,226"},DarkViolet:{hex:"9400d3",rgb:"148,0,211"},DarkOrchid:{hex:"9932cc",rgb:"153,50,204"},DarkMagenta:{hex:"8b008b",rgb:"139,0,139"},Purple:{hex:"800080",rgb:"128,0,128"},Indigo:{hex:"4b0082",rgb:"75,0,130"},DarkSlateBlue:{hex:"483d8b",rgb:"72,61,139"},SlateBlue:{hex:"6a5acd",rgb:"106,90,205"},MediumSlateBlue:{hex:"7b68ee",rgb:"123,104,238"},White:{hex:"ffffff",rgb:"255,255,255"},Snow:{hex:"fffafa",rgb:"255,250,250"},Honeydew:{hex:"f0fff0",rgb:"240,255,240"},MintCream:{hex:"f5fffa",rgb:"245,255,250"},Azure:{hex:"f0ffff",rgb:"240,255,255"},AliceBlue:{hex:"f0f8ff",rgb:"240,248,255"},GhostWhite:{hex:"f8f8ff",rgb:"248,248,255"},WhiteSmoke:{hex:"f5f5f5",rgb:"245,245,245"},Seashell:{hex:"fff5ee",rgb:"255,245,238"},Beige:{hex:"f5f5dc",rgb:"245,245,220"},OldLace:{hex:"fdf5e6",rgb:"253,245,230"},FloralWhite:{hex:"fffaf0",rgb:"255,250,240"},Ivory:{hex:"fffff0",rgb:"255,255,240"},AntiqueWhite:{hex:"faebd7",rgb:"250,235,215"},Linen:{hex:"faf0e6",rgb:"250,240,230"},LavenderBlush:{hex:"fff0f5",rgb:"255,240,245"},MistyRose:{hex:"ffe4e1",rgb:"255,228,225"},Gainsboro:{hex:"dcdcdc",rgb:"220,220,220"},LightGray:{hex:"d3d3d3",rgb:"211,211,211"},Silver:{hex:"c0c0c0",rgb:"192,192,192"},DarkGrey:{hex:"a9a9a9",rgb:"169,169,169"},Grey:{hex:"808080",rgb:"128,128,128"},DimGrey:{hex:"696969",rgb:"105,105,105"},LightSlateGrey:{hex:"778899",rgb:"119,136,153"},SlateGrey:{hex:"708090",rgb:"112,128,144"},DarkSlateGrey:{hex:"2f4f4f",rgb:"47,79,79"},Black:{hex:"000000",rgb:"0,0,0"}},palette=["#086bb6","#f37d45","#f5ce02","#67bda0","#c54e4e","#ae70af"],DEFAULT_GRADIENT_COLOR="#eaeaea",DEFAULT_CONFIG={range:palette,value:palette[0],step:!1,stops:5,type:constants_LINEAR};function props_toConsumableArray(arr){return function props_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);i1?config.range:[DEFAULT_GRADIENT_COLOR].concat(props_toConsumableArray(config.range)));var oldConfig=mergeRecursive(defCon,context.config()),newConfig=mergeRecursive(oldConfig,config);return newConfig.range instanceof Array&&(newConfig.range=newConfig.range.map(function(e,i){return props_getActualHslColor(e,palette[i])}),newConfig.stops=config.stops||newConfig.range.length),newConfig.value=props_getActualHslColor(newConfig.value,newConfig.value),newConfig}},domain:{},scale:{},uniqueValues:{}},helper_treatNullMeasures=function treatNullMeasures(domainVal,scaledVal,minDomainScaledVal){return domainVal instanceof src_InvalidAwareTypes?minDomainScaledVal:scaledVal};function color_strategy_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}function color_strategy_toConsumableArray(arr){return function color_strategy_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);iMath.min(range.length,18))for(var interpolator=common_utils_piecewiseInterpolator()(function hslInterpolator(){return hslLong}(),range.map(function(e){return props_getHslString(e)})),i=0;i0&&void 0!==arguments[0]?arguments[0]:[];if(domain.length){var scale=this.scale(),range=scale.range?scale.range():null,scaleInfo=this._colorStrategy.domainRange()(domain,this.config().stops,range);this.domain(scaleInfo.domain),scaleInfo.range&&this.scale().range(scaleInfo.range),this.uniqueValues(scaleInfo.uniqueVals),this.scale().domain(scaleInfo.scaleDomain||this.domain())}return this}},{key:"serialize",value:function serialize(){return{type:this.constructor.type(),scale:this.scale(),domain:this.domain(),config:this.config()}}},{key:"transformColor",value:function transformColor(color,transformationArr){var h=360*color[0],s=100*color[1],l=100*color[2],a=color[3]||1,newH=h+transformationArr[0],newS=s+transformationArr[1],newL=l+transformationArr[2],newA=a+transformationArr[3]||0;return{color:"hsla(".concat(newH,",").concat(newS,"%,").concat(newL,"%,").concat(newA,")"),hsla:[newH/360,newS/100,newL/100,newA]}}},{key:"id",value:function id(){return this._id}}],[{key:"defaultConfig",value:function defaultConfig(){return DEFAULT_CONFIG}},{key:"type",value:function type(){return"color"}}]),ColorAxis}(),defaults_DEFAULT_CONFIG={value:36,range:[36,1e3]};function size_strategy_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}function size_strategy_toConsumableArray(arr){return function size_strategy_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);i0&&void 0!==arguments[0]?arguments[0]:0,value=this.config().value,scale=this.scale(),domain=this.domain()||[1,1];return scale&&domain[0]!==domain[1]?this._sizeStrategy.range(domainVal,scale,this.domain(),this.uniqueValues()):value}},{key:"updateDomain",value:function updateDomain(domain){if(domain){var domainInfo=(0,this._sizeStrategy.domain)(domain,this.config().intervals);this.domain(domainInfo.domain),this.uniqueValues(domainInfo.uniqueVals),this.scale().domain(domainInfo.scaleDomain||this.domain())}return this}},{key:"serialize",value:function serialize(){return{type:this.constructor.type(),scale:this.scale(),domain:this.domain(),range:this.range(),config:this.config()}}},{key:"id",value:function id(){return this._id}}],[{key:"defaultConfig",value:function defaultConfig(){return defaults_DEFAULT_CONFIG}},{key:"type",value:function type(){return"size"}}]),SizeAxis}(),shape_axis_defaults_DEFAULT_CONFIG={generator:null,value:"circle",range:["circle","diamond","star","cross","square","wye","triangle"]},shape_axis_props_PROPS={config:{},domain:{},scale:{},uniqueValues:{},generator:{}};function shape_axis_defineProperties(target,props){for(var i=0;i0&&void 0!==arguments[0]?arguments[0]:[];return domain.length&&(this.uniqueValues(domain),this.domain(domain),this.scale().domain(domain),this.config().generator&&(this._generatedShapes=function shapeGenerator(domain,generatorFn){var generatedShapes={};return domain.forEach(function(value){generatedShapes[value]=generatorFn(value)}),generatedShapes}(domain,this.config().generator))),this}},{key:"serialize",value:function serialize(){return{type:this.constructor.type(),scale:this.scale(),domain:this.domain(),range:this.config().range,config:this.config()}}},{key:"id",value:function id(){return this._id}}],[{key:"defaultConfig",value:function defaultConfig(){return shape_axis_defaults_DEFAULT_CONFIG}},{key:"type",value:function type(){return"shape"}}]),ShapeAxis}();function data_type_scale_map_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}var DATA_TYPES_MEASURE="measure",DATA_TYPES_TEMPORAL="temporal",group_transform=(data_type_scale_map_defineProperty(_dataTypeScaleMap={},"dimension",BAND),data_type_scale_map_defineProperty(_dataTypeScaleMap,DATA_TYPES_MEASURE,LINEAR),data_type_scale_map_defineProperty(_dataTypeScaleMap,DATA_TYPES_TEMPORAL,TIME),function(schema,data,config){var groupBy=config.groupBy instanceof Array?config.groupBy:[config.groupBy],groupByIndices=groupBy.map(function(fieldName){return schema.findIndex(function(d){return d.name===fieldName})});if(void 0!==groupByIndices.find(function(d){return-1===d}))throw new Error("Groupby field ".concat(groupBy," not found in schema"));var groupedData=function nestCollection(params){var nestFn=src_nest();return params.keys.forEach(function(key){return nestFn.key(function(d){return d[key]})}),nestFn.entries(params.data)}({keys:groupByIndices,data:data});return groupedData.forEach(function(d){var key=d.key;src_InvalidAwareTypes.isInvalid(key)&&(d.key=src_InvalidAwareTypes.getInvalidType(key))}),groupedData});var _transformMap;function transform_factory_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}var transformMap=(transform_factory_defineProperty(_transformMap={},"identity",function identityTransform(schema,data,config){return data}),transform_factory_defineProperty(_transformMap,"group",group_transform),transform_factory_defineProperty(_transformMap,"stack",function(schema,data,config){var uniqueField=config.uniqueField,valueField=config.value,groupBy=config.groupBy,sort=config.sort||"descending",normalizedData=function normalizeData(data,schema,valueField,uniqueField,groupBy){var groupedData=group_transform(schema,data,{groupBy:uniqueField}),uniqueFieldIndex=schema.findIndex(function(d){return d.name===uniqueField}),valueFieldIndex=schema.findIndex(function(d){return d.name===valueField}),seriesKeyIndex=schema.findIndex(function(d){return d.name===groupBy}),seriesKeys=data.map(function(d){return d[seriesKeyIndex]}).filter(function(item,pos,arr){return arr.indexOf(item)===pos}).sort(),fieldNames=schema.reduce(function(acc,obj,i){return acc[i]=obj.name,acc},{});return{data:groupedData.map(function(arr){var tuples={},rowObj=arr.values.reduce(function(acc,row){return acc=row.reduce(function(obj,value,i){return i===seriesKeyIndex?(obj[value]=row[valueFieldIndex],tuples[value]=row):i!==valueFieldIndex&&(obj[fieldNames[i]]=value),obj},acc)},{});return rowObj._tuple=tuples,seriesKeys.forEach(function(seriesKey){if(void 0===rowObj[seriesKey]){rowObj[seriesKey]=0;var newArr=new Array(arr.values[0].length);newArr[uniqueFieldIndex]=arr.key,newArr[seriesKeyIndex]=seriesKey,rowObj._tuple[seriesKey]=newArr}}),rowObj}),keys:seriesKeys}}(data,schema,valueField,uniqueField,groupBy),keys=normalizedData.keys,map={},orderBy=config.orderBy,orderIndex=schema.findIndex(function(d){return d.name===orderBy}),groupByIndex=schema.findIndex(function(d){return d.name===groupBy});-1!==orderIndex&&(keys.forEach(function(key){var name=data.find(function(d){return d[groupByIndex]===key});map[key]=name[orderIndex]}),normalizedData.keys.sort(function(a,b){return map[a].localeCompare(map[b])}));var stackData=common_utils_stack({keys:normalizedData.keys,offset:config.offset||"diverging",order:sort,data:normalizedData.data});return stackData.forEach(function(seriesData){seriesData.forEach(function(dataObj){dataObj.data=dataObj.data._tuple[seriesData.key]})}),stackData}),_transformMap);var transform_factory=function transformFactory(type){var transform=transformMap[type];if("function"!=typeof transform)throw new Error("Invalid transform type supplied.");return transform};function helpers_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}function helpers_toConsumableArray(arr){return function helpers_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);i3&&void 0!==arguments[3]?arguments[3]:{};return function base_layer_classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}(this,BaseLayer),_this=function base_layer_possibleConstructorReturn(self,call){return!call||"object"!==base_layer_typeof(call)&&"function"!=typeof call?base_layer_assertThisInitialized(self):call}(this,base_layer_getPrototypeOf(BaseLayer).call(this)),generateGetterSetters(base_layer_assertThisInitialized(base_layer_assertThisInitialized(_this)),props_props),_this.data(data),_this.axes(axes),_this.config(config),_this.alias(_this.constructor.formalName()+getUniqueId()),_this.dependencies(dependencies),_this._points=[],_this._cachedData=[],_this._id=getUniqueId(),_this._measurement={},_this._animationDonePromises=[],_this._customConfig=null,_this}return function base_layer_inherits(subClass,superClass){if("function"!=typeof superClass&&null!==superClass)throw new TypeError("Super expression must either be null or a function");subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:!0,configurable:!0}}),superClass&&base_layer_setPrototypeOf(subClass,superClass)}(BaseLayer,simple_layer_SimpleLayer),function base_layer_createClass(Constructor,protoProps,staticProps){return protoProps&&base_layer_defineProperties(Constructor.prototype,protoProps),staticProps&&base_layer_defineProperties(Constructor,staticProps),Constructor}(BaseLayer,[{key:"store",value:function store(){if(arguments.length){this._store=arguments.length<=0?void 0:arguments[0];var metaInf=this.metaInf(),localNs="".concat(namespace_namespaceObject.LAYER_LOCAL_NAMESPACE,".").concat(metaInf.namespace);!function initializeGlobalState(context){var store=context.store(),globalState=context.constructor.getState()[0],namespace=context.metaInf().namespace;for(var prop in globalState)store.append("".concat(namespace_namespaceObject.LAYER_GLOBAL_NAMESPACE,".").concat(prop),helpers_defineProperty({},namespace,null))}(this);var store=this.store();return store.append("".concat(namespace_namespaceObject.LAYER_LOCAL_NAMESPACE),function base_layer_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}({},metaInf.namespace,null)),common_utils_transactor(this,defaultOptions,store.model,{namespace:localNs}),common_utils_registerListeners(this,listener_map_listenerMap,{local:localNs,global:namespace_namespaceObject.LAYER_GLOBAL_NAMESPACE},{unitRowIndex:metaInf.unitRowIndex,unitColIndex:metaInf.unitColIndex}),this}return this._store}},{key:"domain",value:function domain(){var prop="".concat(namespace_namespaceObject.LAYER_GLOBAL_NAMESPACE,".").concat("domain",".").concat(this.metaInf().namespace);return arguments.length?(this.store().commit(prop,arguments.length<=0?void 0:arguments[0]),this):this.store().get(prop)}},{key:"encodingFieldsInf",value:function encodingFieldsInf(){return arguments.length?(this._encodingFieldsInf=arguments.length<=0?void 0:arguments[0],this):this._encodingFieldsInf}},{key:"encodingTransform",value:function encodingTransform(){return arguments.length?(this._encodingTransform=arguments.length<=0?void 0:arguments[0],this):this._encodingTransform}},{key:"alias",value:function alias(){return arguments.length?(this._alias=arguments.length<=0?void 0:arguments[0],this):this._alias||this.constructor.formalName()}},{key:"dependencies",value:function dependencies(){return arguments.length?(this._dependencies=arguments.length<=0?void 0:arguments[0],this):this._dependencies}},{key:"enableCaching",value:function enableCaching(){return this._cacheEnabled=!0,this}},{key:"clearCaching",value:function clearCaching(){return this._cacheEnabled=!1,this.data(this._cachedData[0])}},{key:"serialize",value:function serialize(){return this.config()}},{key:"id",value:function id(){return this._id}},{key:"getTransformedData",value:function getTransformedData(dataModel,config,transformType,encodingFieldsInf){return function transformData(dataModel,config,transformType,encodingFieldInf){var data=dataModel.getData({withUid:!0}),schema=data.schema,transform=config.transform,xField=encodingFieldInf.xField,yField=encodingFieldInf.yField,xFieldType=encodingFieldInf.xFieldType,yFieldType=encodingFieldInf.yFieldType,uniqueField=xFieldType===dist_datamodel.FieldType.MEASURE?yField:xField;return transform_factory(transformType)(schema,data.data,{groupBy:transform.groupBy,uniqueField:uniqueField,sort:transform.sort||"none",offset:transform.offset,orderBy:transform.orderBy,value:yFieldType===dist_datamodel.FieldType.MEASURE?yField:xField},data.uids)}(dataModel,config,transformType,encodingFieldsInf)}},{key:"calculateDomainFromData",value:function calculateDomainFromData(data){var domains={};return this.data().isEmpty()||(domains=function calculateDomainFromData(data,encodingFieldInf,transformType){var xFieldSubType=encodingFieldInf.xFieldSubType,yFieldSubType=encodingFieldInf.yFieldSubType,xField=encodingFieldInf.xField,yField=encodingFieldInf.yField,x0Field=encodingFieldInf.x0Field,y0Field=encodingFieldInf.y0Field,domains={},yEnc=ENCODING.Y,xEnc=ENCODING.X;return xField&&(domains.x=common_utils_getDomainFromData(data,x0Field||transformType===STACK?[xEnc,ENCODING.X0]:[xEnc,xEnc],xFieldSubType)),yField&&(domains.y=common_utils_getDomainFromData(data,y0Field||transformType===STACK?[ENCODING.Y0,ENCODING.Y]:[yEnc,yEnc],yFieldSubType)),domains}(data,this.encodingFieldsInf(),this.transformType())),domains}},{key:"getDataDomain",value:function getDataDomain(encodingType){var domains=this.store().get("".concat(namespace_namespaceObject.LAYER_GLOBAL_NAMESPACE,".").concat("domain",".").concat(this.metaInf().namespace));return void 0!==encodingType?domains[encodingType]||[]:domains}},{key:"getNormalizedData",value:function getNormalizedData(transformedData,fieldsConfig){return function getNormalizedData(transformedData,fieldsConfig,encodingFieldInf,transformType){var transformedDataArr="identity"===transformType?[transformedData]:transformedData,xFieldType=encodingFieldInf.xFieldType,xFieldIndex=encodingFieldInf.xFieldIndex,yFieldIndex=encodingFieldInf.yFieldIndex,x0FieldIndex=encodingFieldInf.x0FieldIndex,y0FieldIndex=encodingFieldInf.y0FieldIndex,fieldsLen=Object.keys(fieldsConfig).length;return transformedDataArr.map(function(data){return("group"===transformType?data.values:data).map(function(d){var tuple,y,y0,x,x0,pointObj={};return transformType===STACK?(tuple=d.data||[],d[1]>=d[0]?(y=x0=d[1],x=y0=d[0]):(y=x0=d[0],x=y0=d[1]),(pointObj=xFieldType===dist_datamodel.FieldType.MEASURE?{x:x,x0:x0,y:tuple[yFieldIndex],y0:tuple[yFieldIndex]}:{x:tuple[xFieldIndex],x0:tuple[xFieldIndex],y:y,y0:y0})._data=tuple,pointObj._id=tuple[fieldsLen]):((pointObj={x:d[xFieldIndex],y:d[yFieldIndex],x0:d[x0FieldIndex],y0:d[y0FieldIndex]})._data=d,pointObj._id=d[fieldsLen]),pointObj})}).filter(function(d){return d.length})}(transformedData,fieldsConfig,this.encodingFieldsInf(),this.transformType())}},{key:"getNearestPoint",value:function getNearestPoint(){return null}},{key:"applyInteractionStyle",value:function applyInteractionStyle(interactionType,selectionSet,apply,styles){var interactionStyles=(this.config().interaction||{})[interactionType];(interactionStyles=styles||interactionStyles)&&helpers_applyInteractionStyle(this,selectionSet,interactionStyles,{apply:apply,interactionType:interactionType})}},{key:"disableUpdate",value:function disableUpdate(){return this._updateLock=!0,this}},{key:"enableUpdate",value:function enableUpdate(){return this._updateLock=!1,this}},{key:"resolveTransformType",value:function resolveTransformType(){this._transformType=function getValidTransform(context){return helpers_resolveInvalidTransformType(context)||context.config().transform.type}(this)}},{key:"transformType",value:function transformType(){return this._transformType}},{key:"render",value:function render(){return this}},{key:"elemType",value:function elemType(){return"g"}},{key:"remove",value:function remove(){return this.store().unsubscribe({namespace:"".concat(namespace_namespaceObject.LAYER_LOCAL_NAMESPACE,".").concat(this.metaInf().namespace)}),renderer_utils_selectElement(this.mount()).remove(),this}},{key:"cachePoint",value:function cachePoint(key,data){if(null===key)return this;var pointMap=this._pointMap;return!pointMap[key]&&(pointMap[key]=[]),pointMap[key].push(data),this}},{key:"dataProps",value:function dataProps(){return arguments.length?(this._dataProps=arguments.length<=0?void 0:arguments[0],this):this._dataProps}},{key:"getIdentifiersFromData",value:function getIdentifiersFromData(data){var schema=this.data().getData().schema,fieldsConfig=this.data().getFieldsConfig(),identifiers=[[],[]],_this$encodingFieldsI=this.encodingFieldsInf(),xFieldType=_this$encodingFieldsI.xFieldType,yFieldType=_this$encodingFieldsI.yFieldType,xField=_this$encodingFieldsI.xField,yField=_this$encodingFieldsI.yField,_map2=base_layer_slicedToArray([xFieldType,yFieldType].map(function(type){return type===dist_datamodel.FieldType.MEASURE}),2),xMeasure=_map2[0],yMeasure=_map2[1];if(schema.forEach(function(d,i){var name=d.name;fieldsConfig[name].def.type===dist_datamodel.FieldType.DIMENSION&&(identifiers[0].push(name),identifiers[1].push(data[i]))}),xMeasure&&yMeasure){var _identifiers$,_identifiers$2,xMeasureIndex=fieldsConfig[xField].index,yMeasureIndex=fieldsConfig[yField].index;(_identifiers$=identifiers[0]).push.apply(_identifiers$,[xField,yField]),(_identifiers$2=identifiers[1]).push.apply(_identifiers$2,[data[xMeasureIndex],data[yMeasureIndex]])}return identifiers}},{key:"getPlotSpan",value:function getPlotSpan(){return{x:0,y:0}}},{key:"getPlotPadding",value:function getPlotPadding(){return{x:0,y:0}}},{key:"getPointsFromIdentifiers",value:function getPointsFromIdentifiers(identifiers){var _ref,fieldNames,values,config=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},getAllAttrs=config.getAllAttrs,getBBox=config.getBBox;if(!this.data())return[];if(identifiers instanceof datamodel_default.a){var dataObj=identifiers.getData();fieldNames=dataObj.schema.map(function(d){return d.name}),values=dataObj.data}else fieldNames=identifiers[0],values=identifiers.slice(1,identifiers.length);var points=this._points,fieldsConfig=this.data().getFieldsConfig(),filteredPoints=(_ref=[]).concat.apply(_ref,base_layer_toConsumableArray(points)).filter(function(point){var _data=point._data,_id=point._id;return fieldNames.every(function(field,idx){return field in fieldsConfig&&fieldsConfig[field].def.type===dist_datamodel.FieldType.DIMENSION?-1!==values.findIndex(function(d){return d[idx]===_data[fieldsConfig[field].index]}):field!==reserved_fields.ROW_ID||-1!==values.findIndex(function(d){return d[idx]===_id})})});return getAllAttrs?filteredPoints:filteredPoints.map(function(d){var obj=clone(d);if(getBBox){var update=obj.update||obj;if(void 0!==obj.size){var sizeVal=2*Math.sqrt(obj.size/Math.PI);update.width=sizeVal,update.height=sizeVal,update.x-=sizeVal/2,update.y-=sizeVal/2}else void 0===update.width&&(update.width=2),void 0===update.height&&(update.height=2)}return obj.update||obj}).sort(function(a,b){return a.y-b.y})}},{key:"getTransformedDataFromIdentifiers",value:function getTransformedDataFromIdentifiers(identifiers){var measureIndex,enc,_identifiers$getData=identifiers.getData(),identifierData=_identifiers$getData.data,identifierSchema=_identifiers$getData.schema,normalizedData=this._normalizedData,fieldsConfig=this.data().getFieldsConfig(),_this$encodingFieldsI2=this.encodingFieldsInf(),yField=_this$encodingFieldsI2.yField,xField=_this$encodingFieldsI2.xField,yFieldType=_this$encodingFieldsI2.yFieldType;_this$encodingFieldsI2.xFieldType===dist_datamodel.FieldType.MEASURE?(measureIndex=fieldsConfig[xField].index,enc="x"):yFieldType===dist_datamodel.FieldType.MEASURE&&(measureIndex=fieldsConfig[yField].index,enc="y");var transformedData=[];return normalizedData.forEach(function(dataArr){dataArr.forEach(function(dataObj){var tupleArr=dataObj._data;if(identifierSchema.every(function(obj,i){return-1!==identifierData.findIndex(function(d){return tupleArr[fieldsConfig[obj.name].index]===d[i]})})){var transformedVal=dataObj[enc],row=dataObj._data,tuple={};for(var key in fieldsConfig){var index=fieldsConfig[key].index;tuple[key]=row[index],index===measureIndex&&(tuple[key]=transformedVal)}transformedData.push(tuple)}})}),[transformedData,this.data().getData().schema]}},{key:"getPlotElementsFromSet",value:function getPlotElementsFromSet(set){return renderer_utils_selectElement(this.mount()).selectAll(this.elemType()).filter(function(data){return!!data&&-1!==set.indexOf(data._id)})}},{key:"animationDone",value:function animationDone(){return Promise.all(this._animationDonePromises)}},{key:"registerAnimationDoneHook",value:function registerAnimationDoneHook(){var resolveFn,promise=new Promise(function(resolve){resolveFn=resolve});return this._animationDonePromises.push(promise),function(){resolveFn()}}},{key:"getRenderProps",value:function getRenderProps(){var metaInf=this.metaInf();return["".concat(namespace_namespaceObject.GROUP_GLOBAL_NAMESPACE,".domain.y.").concat(metaInf.unitRowIndex,"0"),"".concat(namespace_namespaceObject.GROUP_GLOBAL_NAMESPACE,".domain.x.").concat(metaInf.unitColIndex,"0")]}}],[{key:"getState",value:function getState(){return[{domain:{}},{config:{},data:{}}]}},{key:"create",value:function create(){for(var _len=arguments.length,params=new Array(_len),_key=0;_key<_len;_key++)params[_key]=arguments[_key];return base_layer_construct(this,params)}},{key:"defaultConfig",value:function defaultConfig(){return{transform:{type:"identity"}}}},{key:"defaultPolicy",value:function defaultPolicy(conf,userConf){return mergeRecursive(conf,userConf)}},{key:"formalName",value:function formalName(){return"base"}},{key:"shouldDrawAnchors",value:function shouldDrawAnchors(){return!1}}]),BaseLayer}(),renderer_line=Symbols.line,renderer_filterFn=function filterFn(d){var update=d.update;return null!==update.y&&null!==update.x},renderer_drawLine=function drawLine(context){var filteredPoints,layer=context.layer,container=context.container,points=context.points,interpolate=context.interpolate,connectNullData=context.connectNullData,className=context.className,style=context.style,transition=context.transition,mount=renderer_utils_selectElement(container).attr("class",className),curveInterpolatorFn=pathInterpolators[interpolate],linepath=renderer_line().curve(curveInterpolatorFn).x(function(d){return d.update.x}).y(function(d){return d.update.y}).defined(renderer_filterFn);filteredPoints=points,connectNullData&&(filteredPoints=points.filter(renderer_filterFn)),helpers_updateStyle(mount,style);var element=makeElement(mount,"path",[1]);return element.classed(points[0].className,!0),transition.disabled||(element=element.transition().duration(transition.duration).on("end",layer.registerAnimationDoneHook())),element.attr("d",linepath(filteredPoints)).style("fill-opacity",0),element},line_default_config_defaultConfig={classPrefix:"muze",defClassName:"layer-line",className:"",interpolate:"linear",transform:{type:"group"},interaction:{highlight:[{type:"stroke",intensity:[0,0,-15,0]}],fade:[{type:"stroke",intensity:[0,0,15,0]}],focus:[{type:"stroke",intensity:[0,0,15,0]}]},nearestPointThreshold:20,encoding:{color:{},x:{},y:{},strokeOpacity:{value:1}},transition:{effect:"cubic",duration:1e3},connectNullData:!1};__webpack_require__(15);function line_typeof(obj){return(line_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function line_defineProperties(target,props){for(var i=0;i2&&void 0!==arguments[2]?arguments[2]:{},dataPoint=renderer_utils_selectElement(config.event.target).data()[0];if(isSimpleObject(dataPoint)){var _dataPoint$datum=dataPoint.datum,data=_dataPoint$datum.data,uid=_dataPoint$datum.uid;return{id:this.getIdentifiersFromData(data,uid),layerId:this.id()}}return null}},{key:"getPlotElementsFromSet",value:function getPlotElementsFromSet(set){return renderer_utils_selectElement(this.mount()).selectAll(this.elemType()).filter(function(d){return-1!==set.indexOf(d.datum.uid)})}},{key:"render",value:function render(container){var _this3=this,_this$measurement=this.measurement(),height=_this$measurement.height,width=_this$measurement.width,_this$config=this.config(),classPrefix=_this$config.classPrefix,defClassName=_this$config.defClassName,minOuterRadius=_this$config.minOuterRadius,innerRadius=_this$config.innerRadius,outerRadius=_this$config.outerRadius,cornerRadius=_this$config.cornerRadius,padAngle=_this$config.padAngle,padRadius=_this$config.padRadius,padding=_this$config.padding,transition=_this$config.transition,innerRadiusFixer=_this$config.innerRadiusFixer,sizeAxis=this.axes().size,transformedData=this._transformedData,chartHeight=height-padding.top-padding.bottom,chartWidth=width-padding.left-padding.right,qualClassName=getQualifiedClassName(defClassName,this.id(),classPrefix),range=function getRadiusRange(width,height,config){var minOuterRadius=config.minOuterRadius,innerRadius=config.innerRadius,outerRadius=config.outerRadius,innerRadiusFixer=config.innerRadiusFixer;return[Math.max(innerRadius+innerRadiusFixer||0,minOuterRadius),outerRadius||Math.min(height,width)/2]}(chartWidth,chartHeight,{minOuterRadius:minOuterRadius,innerRadius:innerRadius,outerRadius:outerRadius,innerRadiusFixer:innerRadiusFixer}),colorAxis=this.axes().color,defaultRadius=outerRadius||Math.min(chartHeight,chartWidth)/2,radiusDomain=this.domain().radius,rangeValueGetter=function rangeValueGetter(d){return function getRangeValue(datum,range,domain,defaultRadius,sizeAxis){var domainMultiplier=1,outerRadiusValue=datum.outerRadiusValue,sizeVal=datum.sizeVal,sizeAxisDomain=sizeAxis.domain(),sizeMultiplier=sizeAxis.getSize(sizeVal)/(sizeAxisDomain?sizeAxis.range()[1]:sizeAxis.config().value);return domainMultiplier*=(range[1]-range[0])/(domain[1]-domain[0]),(range[0]+(outerRadiusValue-domain[0])*domainMultiplier||defaultRadius)*sizeMultiplier}(d,range,radiusDomain,defaultRadius,sizeAxis)},path=arc_arc().innerRadius(innerRadius?Math.min(chartHeight/2,chartWidth/2,innerRadius):0).cornerRadius(cornerRadius).padAngle(padAngle).padRadius(padRadius);this._chartWidth=chartWidth,this._chartHeight=chartHeight;var g=makeElement(renderer_utils_selectElement(container),"g",[1],"".concat(qualClassName[0],"-group")).classed("".concat(qualClassName[1],"-group"),!0).attr("transform","translate(".concat(chartWidth/2,",").concat(chartHeight/2,")")),consecutiveExits=[],exitCounter=0;return makeElement(g,"g",transformedData,"".concat(qualClassName[0]),{update:function tween(elem){makeElement(elem,"path",function(d,i){return[{datum:d,index:i,arcFn:path,meta:{originalColor:colorAxis.getRawColor(d.colorVal),stateColor:{},colorTransform:{}}}]},"".concat(qualClassName[0],"-path")).style("fill",function(d){return colorAxis.getColor(d.datum.colorVal)}).transition().duration(transition.duration).on("end",_this3.registerAnimationDoneHook()).attrTween("d",function(){for(var _len=arguments.length,params=new Array(_len),_key=0;_key<_len;_key++)params[_key]=arguments[_key];return function tweenPie(path,rangeValueGetter,b){var datum=b[0].datum,outerRadius=rangeValueGetter(datum);return datum.outerRadius=outerRadius,datum._previousInfo.outerRadius=datum._previousInfo.outerRadius||outerRadius,function(t){return path(common_utils_interpolator()(datum._previousInfo,datum)(t))}}(path,rangeValueGetter,params)}).attr("class",function(d,i){var individualClass=getIndividualClassName(d,i,transformedData,_this3);return"".concat(qualClassName[0],"-path ").concat(qualClassName[1],"-path-").concat(d.index,"\n ").concat(individualClass)})},exit:function tweenExit(elem,d){var exitArr=consecutiveExits[exitCounter],oldExitCounter=exitCounter;exitArr?exitArr[exitArr.length-1].datum.index===d.index-1?exitArr.push({elem:elem,datum:d}):exitCounter++:exitArr=[{elem:elem,datum:d}],consecutiveExits[oldExitCounter]=exitArr}}).attr("class",function(d,i){return"".concat(qualClassName[0]," ").concat(qualClassName[1],"-").concat(i)}),function tweenExitPie(consecutiveExits,transition,rangeValueGetter,path){consecutiveExits.length>0&&consecutiveExits.forEach(function(consecutiveExitArr){var startAngle=consecutiveExitArr[0].datum.startAngle,endAngle=consecutiveExitArr[consecutiveExitArr.length-1].datum.endAngle,mid=2*Math.PI*startAngle/(2*Math.PI+startAngle-endAngle);consecutiveExitArr.forEach(function(e){var elem=e.elem,datum=e.datum;elem.each(function(){var gElem=renderer_utils_selectElement(this);gElem.selectAll("path").transition().duration(transition.duration).attrTween("d",function(){return function(t){var outerRadius=rangeValueGetter(datum);return datum.outerRadius=outerRadius,path(common_utils_interpolator()(datum,{startAngle:mid,endAngle:mid,outerRadius:outerRadius})(t))}}).remove(),gElem.remove()})})})}(consecutiveExits,transition,rangeValueGetter,path),this}},{key:"getPointsFromIdentifiers",value:function getPointsFromIdentifiers(identifiers){if(!this.data())return[];var fieldNames=identifiers[0],values=identifiers.slice(1,identifiers.length),pieSlices=renderer_utils_selectElement(this.mount()).selectAll("path").data(),fieldsConfig=this.data().getFieldsConfig(),pieSliceInf=pieSlices.filter(function(tData){var data=tData.datum.data,uid=tData.datum.uid;return fieldNames.every(function(field,idx){return field in fieldsConfig&&fieldsConfig[field].def.type===dist_datamodel.FieldType.DIMENSION?-1!==values.findIndex(function(d){return d[idx]===data[fieldsConfig[field].index]}):field!==reserved_fields.ROW_ID||-1!==values.findIndex(function(d){return d[idx]===uid})})})[0];if(pieSliceInf){var centroid=pieSliceInf.arcFn.centroid(pieSliceInf.datum);return[{x:centroid[0]+this._chartWidth/2,y:centroid[1]+this._chartHeight/2,width:2,height:2}]}return[]}},{key:"getRenderProps",value:function getRenderProps(){return["".concat(namespace_namespaceObject.GROUP_GLOBAL_NAMESPACE,".domain.radius")]}}],[{key:"defaultConfig",value:function defaultConfig(){return arc_default_config_defaultConfig}},{key:"formalName",value:function formalName(){return"arc"}}]),ArcLayer}(),text_renderer=function drawText(container,data,config,smartLabel){var selection=renderer_utils_selectElement(container).selectAll("g").data(data),selectionMerge=selection.enter().append("g").each(function(dataObj){renderer_utils_setAttrs(this,dataObj.enter)}).merge(selection),style=renderer_utils_getSmartComputedStyle(renderer_utils_selectElement(container),config.className),fontSize=parseInt(style.fontSize,10);return smartLabel.setStyle(style),selectionMerge.each(function(dataObj){var backgroundVal,element=renderer_utils_selectElement(this),update=dataObj.update,text=dataObj.text,color=dataObj.color,textanchor=dataObj.textanchor,textStyle=dataObj.style,background=dataObj.background;if(backgroundVal=background.value){var diff,backgroundPadding=background.padding,_smartLabel$getOriSiz=smartLabel.getOriSize(dataObj.text),width=_smartLabel$getOriSiz.width,height=_smartLabel$getOriSiz.height,backgroundEl=makeElement(element,"rect",[1]);diff="end"===textanchor?width:"start"===textanchor?0:width/2,renderer_utils_setAttrs(backgroundEl.node(),{x:update.x-diff-backgroundPadding/2,y:update.y-fontSize-backgroundPadding/2,width:width+backgroundPadding,height:height+backgroundPadding}),background&&renderer_utils_setStyles(backgroundEl,{background:backgroundVal})}var textEl=makeElement(element,"text",function(d){return[d]}).text(text),textNode=textEl.node();textStyle&&renderer_utils_setStyles(textNode,textStyle),color&&renderer_utils_setStyles(textNode,{fill:color}),dataObj.className&&textEl.classed(dataObj.className,!0),renderer_utils_setAttrs(textNode,update),textEl.attr("text-anchor",textanchor)}),selection.exit().remove(),selection},text_default_config_defaultConfig={defClassName:"layer-text",classPrefix:"muze",className:"",transform:{type:"identity"},interaction:{highlight:[{type:"fill",intensity:[0,0,-15,0]}],fade:[{type:"fill",intensity:[0,0,15,0]}],focus:[{type:"fill",intensity:[0,0,15,0]}]},transition:{effect:"cubic",duration:1e3},encoding:{color:{},text:{value:"",formatter:function formatter(val,i,data,context){return context.valueParser()(val)},background:{padding:10}}},states:{highlight:{className:"".concat("muze","-layer-text-highlight")},fadeout:{className:"".concat("muze","-layer-text-fadeout")},selected:{className:"".concat("muze","-layer-text-selected")}}};__webpack_require__(18);function text_typeof(obj){return(text_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function text_slicedToArray(arr,i){return function text_arrayWithHoles(arr){if(Array.isArray(arr))return arr}(arr)||function text_iterableToArrayLimit(arr,i){var _arr=[],_n=!0,_d=!1,_e=void 0;try{for(var _s,_i=arr[Symbol.iterator]();!(_n=(_s=_i.next()).done)&&(_arr.push(_s.value),!i||_arr.length!==i);_n=!0);}catch(err){_d=!0,_e=err}finally{try{_n||null==_i.return||_i.return()}finally{if(_d)throw _e}}return _arr}(arr,i)||function text_nonIterableRest(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}()}function text_defineProperties(target,props){for(var i=0;i4)}(shape)?shape:common_utils_getSymbol(shape).size(size)(update),makeElement(groupElement,"path",function(data){return[data]}).attr("d",pathStr)}else d.shape="circle",createShape(d,groupElement)}(d,group);var update=d.update,style=d.style;objectIterator(style,function(key){return group.style(key,style[key])}),group.attr("class",className),group.classed(d.className,!0),disabled||(group=group.transition().duration(transition.duration).on("end",layer.registerAnimationDoneHook())),group.attr("transform","translate(".concat(update.x,",").concat(update.y,")"))},exit:function exit(exitGroup){disabled?exitGroup.remove():exitGroup.transition().ease(easeFns[effect]).duration(duration).on("end",function(){return exitGroup.remove()}).style("fill-opacity",0).style("stroke-opacity",0)}},params.keyFn)},point_default_config_defaultConfig={defClassName:"layer-point",className:"",classPrefix:"muze",defColorStyle:"stroke",interaction:{highlight:[{type:"fill",intensity:[0,0,-20,0]}],fade:[{type:"fill",intensity:[0,0,20,0]}],focus:[{type:"fill",intensity:[0,0,20,0]}]},innerPadding:.1,nearestPointThreshold:10,transform:{type:"identity"},transition:{effect:"cubic",duration:1e3},encoding:{size:{value:30},color:{},shape:{value:"circle"},x:{},y:{},strokeOpacity:{value:.5},fillOpacity:{value:.5}},shapes:["circle","cross","diamond","square","star","wye","triangle"],sizes:[20,30,40,50,60,70]};__webpack_require__(19);function point_typeof(obj){return(point_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function point_toConsumableArray(arr){return function point_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);i3&&void 0!==arguments[3]?arguments[3]:{},points=[],sizeEncoding=encoding.size,shapeEncoding=encoding.shape,colorEncoding=encoding.color,x=encoding.x,y=encoding.y,sizeField=sizeEncoding.field,sizeValue=sizeEncoding.value,shapeField=shapeEncoding.field,xField=x.field,yField=y.field,sizeAxis=axes.size,shapeAxis=axes.shape,fieldsConfig=this.data().getFieldsConfig(),isXDim=fieldsConfig[xField]&&fieldsConfig[xField].def.type===dist_datamodel.FieldType.DIMENSION,isYDim=fieldsConfig[yField]&&fieldsConfig[yField].def.type===dist_datamodel.FieldType.DIMENSION,key=isXDim?ENCODING.X:isYDim?ENCODING.Y:null,colorField=colorEncoding&&colorEncoding.field,colorFieldIndex=fieldsConfig[colorField]&&fieldsConfig[colorField].index,measurement=this.measurement(),shapeFieldIndex=fieldsConfig[shapeField]&&fieldsConfig[shapeField].index,sizeFieldIndex=fieldsConfig[sizeField]&&fieldsConfig[sizeField].index,colorAxis=axes.color,_config$offset=config.offset,offsetX=_config$offset.x,offsetY=_config$offset.y,_loop=function _loop(i,len){var d=data[i],row=d._data,size=sizeValue instanceof Function?sizeValue(d,i):sizeAxis.getSize(row[sizeFieldIndex]),shape=shapeAxis.getShape(row[shapeFieldIndex]),_map2=point_slicedToArray([ENCODING.X,ENCODING.Y].map(function(type){var value=null===d[type]?void 0:d[type],measure=type===ENCODING.X?measurement.width:measurement.height;return encoding[type].field?axes[type].getScaleValue(value):measure/2}),2),xPx=_map2[0],yPx=_map2[1];xPx+=offsetX,yPx+=offsetY;var _getLayerColor=getLayerColor({datum:d,index:i},{colorEncoding:colorEncoding,colorAxis:colorAxis,colorFieldIndex:colorFieldIndex}),color=_getLayerColor.color,rawColor=_getLayerColor.rawColor,style={fill:color,stroke:color};if(!isNaN(xPx)&&!isNaN(yPx)){var point={enter:{x:xPx,y:yPx},update:{x:xPx,y:yPx},shape:shape,size:Math.abs(size),meta:{stateColor:{},originalColor:rawColor,colorTransform:{}},style:style,_data:row,_id:d._id,source:d._data,rowId:d._id};point.className=getIndividualClassName(d,i,data,_this2),points.push(point),_this2.cachePoint(d[key],point)}},i=0,len=data.length;i=0?axisType:zeroPos))):(pos=transformType===STACK||data[type]>=0?axisType:zeroPos,space=Math.abs(pos-(transformType===STACK?axisType0:data[type]>=0?zeroPos:axisType))),enter=zeroPos}else pos=0,space=measurement[spaceType];return{enterSpace:enterSpace,enter:enter,pos:pos,space:space}}),resolveDimensions=function resolveDimensions(data,config,axes){var axesInfo={xAxis:axes.x,yAxis:axes.y},_resolveDimByField=bar_helper_resolveDimByField("x",axesInfo,config,data),enterWidth=_resolveDimByField.enterSpace,enterX=_resolveDimByField.enter,xPos=_resolveDimByField.pos,width=_resolveDimByField.space,_resolveDimByField2=bar_helper_resolveDimByField("y",axesInfo,config,data),enterHeight=_resolveDimByField2.enterSpace;return{enter:{x:enterX,y:_resolveDimByField2.enter,width:enterWidth,height:enterHeight},update:{x:xPos,y:_resolveDimByField2.pos,width:width,height:_resolveDimByField2.space}}};function bar_typeof(obj){return(bar_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function bar_toConsumableArray(arr){return function bar_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);i=update.x&&x<=update.width+update.x&&y>=update.y&&y<=update.height+update.y){pointFound=point;break}pointFound=null}var values=pointFound&&pointFound._data;return values&&(identifiers=this.getIdentifiersFromData(values,pointFound._id)),pointFound?{dimensions:[pointFound.update],id:identifiers,layerId:this.id()}:pointFound}},{key:"getPlotSpan",value:function getPlotSpan(){return this._plotSpan}}],[{key:"formalName",value:function formalName(){return"bar"}},{key:"defaultConfig",value:function defaultConfig(){return bar_default_config_defaultConfig}},{key:"defaultPolicy",value:function defaultPolicy(conf,userConf){var config=base_layer_BaseLayer.defaultPolicy(conf,userConf),colorField=config.encoding.color.field,transform=config.transform;return colorField&&(transform.groupBy=colorField),config}}]),BarLayer}(),tick_default_config_defaultConfig={defClassName:"layer-tick",className:"",classPrefix:"muze",interaction:{highlight:[{type:"stroke",intensity:[0,0,-15,0]}],fade:[{type:"stroke",intensity:[0,0,15,0]}],focus:[{type:"stroke",intensity:[0,0,15,0]}]},innerPadding:.1,transform:{type:"identity"},transition:{effect:"cubic",duration:1e3},encoding:{color:{},x:{},y:{},x0:{},y0:{},strokeOpacity:{value:.5},fillOpacity:{value:.5}},states:{highlight:{className:"".concat("muze","-layer-tick-highlight")},fadeout:{className:"".concat("muze","-layer-tick-fadeout")},selected:{className:"".concat("muze","-layer-tick-selected")}}},tick_renderer=function(params){var points=params.points,container=params.container,keyFn=params.keyFn,className=params.className,mount=renderer_utils_selectElement(container),ticks=mount.selectAll("path").data(points,keyFn),ticksEnter=ticks.enter().append("path");return mount.attr("class",className||""),ticksEnter.each(function(d){var selection=renderer_utils_selectElement(this),enter=d.enter||{};Object.entries(enter).forEach(function(attr){return!isNaN(attr[1])&&selection.attr(attr[0],attr[1])})}),ticks.exit().remove(),ticks.merge(ticksEnter).each(function(d){var selection=renderer_utils_selectElement(this),update=d.update,updateStyle=d.style||{},x0=void 0!==update.x0?update.x0:update.x,y0=void 0!==update.y0?update.y0:update.y,path="M ".concat(update.x," ").concat(update.y," L ").concat(x0," ").concat(y0);d.className&&selection.classed(d.className,!0),selection.attr("d",path),Object.entries(updateStyle).forEach(function(styleObj){return selection.style(styleObj[0],styleObj[1])})})};__webpack_require__(21);function tick_typeof(obj){return(tick_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function tick_defineProperties(target,props){for(var i=0;i3&&void 0!==arguments[3]?arguments[3]:{},points=[],_getAxesScales=helpers_getAxesScales(axes),xAxis=_getAxesScales.xAxis,yAxis=_getAxesScales.yAxis,fieldsConfig=this.data().getFieldsConfig(),_this$encodingFieldsI=this.encodingFieldsInf(),xField=_this$encodingFieldsI.xField,yField=_this$encodingFieldsI.yField,x0Field=_this$encodingFieldsI.x0Field,y0Field=_this$encodingFieldsI.y0Field,xFieldType=_this$encodingFieldsI.xFieldType,yFieldType=_this$encodingFieldsI.yFieldType,isXDim=xFieldType===dist_datamodel.FieldType.DIMENSION,isYDim=yFieldType===dist_datamodel.FieldType.DIMENSION,key=isXDim?ENCODING.X:isYDim?ENCODING.Y:null,colorEncoding=encoding.color,colorField=colorEncoding&&colorEncoding.field,colorFieldIndex=fieldsConfig[colorField]&&fieldsConfig[colorField].index,measurement=this.measurement(),colorAxis=axes.color,_config$offset=config.offset,offsetX=_config$offset.x,offsetY=_config$offset.y,_config$span=config.span,xSpan=_config$span.x,ySpan=_config$span.y,i=0,len=data.length;i1?_len-1:0),_key=1;_key<_len;_key++)params[_key-1]=arguments[_key];var layerRegistry=factoryObj._layerRegistry,instances=(layerDef=layerDef instanceof Array?layerDef:[layerDef]).map(function(layerObj){var layerConstructor=layerRegistry[layerObj.mark];return layerConstructor.create.apply(layerConstructor,params)});return 1===instances.length?instances[0]:instances},getLayerClass:function getLayerClass(mark){return factoryObj._layerRegistry[mark]},composeLayers:function composeLayers(layerType,layerDefs){compositeLayers[layerType]=layerDefs},sanitizeLayerConfig:function sanitizeLayerConfig(layerDef){var newConf=mergeRecursive({},layerDef);return sanitizeEncoding(newConf.encoding),newConf}};return factoryObj}();function defaults_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}var _CONFIG$ROWS$COLUMNS$,DEFAULT_LAYERS=(defaults_defineProperty(_DEFAULT_LAYERS={},layer_types_AREA_LAYER,area_AreaLayer),defaults_defineProperty(_DEFAULT_LAYERS,layer_types_ARC_LAYER,arc_ArcLayer),defaults_defineProperty(_DEFAULT_LAYERS,layer_types_LINE_LAYER,line_LineLayer),defaults_defineProperty(_DEFAULT_LAYERS,layer_types_TEXT_LAYER,text_TextLayer),defaults_defineProperty(_DEFAULT_LAYERS,layer_types_POINT_LAYER,point_PointLayer),defaults_defineProperty(_DEFAULT_LAYERS,layer_types_TICK_LAYER,tick_TickLayer),defaults_defineProperty(_DEFAULT_LAYERS,layer_types_BAR_LAYER,bar_BarLayer),defaults_defineProperty(_DEFAULT_LAYERS,layer_types_BASE_LAYER,base_layer_BaseLayer),_DEFAULT_LAYERS),muze_package=__webpack_require__(6),X="x",Y="y",ROWS="rows",COLUMNS="columns",COL="col",ROW="row",enums_constants_COLOR="color",enums_constants_SHAPE="shape",enums_constants_SIZE="size",constants_LEFT="left",constants_RIGHT="right",CELL="cell",X_AXES="xAxes",Y_AXES="yAxes",ENTRY_CELLS="entryCell",EXIT_CELLS="exitCell",constants_RADIUS="radius",constants_ANGLE="angle",PRIMARY="Primary",SECONDARY="Secondary";function local_options_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}var local_options=(local_options_defineProperty(_CONFIG$ROWS$COLUMNS$={},"config",{}),local_options_defineProperty(_CONFIG$ROWS$COLUMNS$,ROWS,{}),local_options_defineProperty(_CONFIG$ROWS$COLUMNS$,COLUMNS,{}),local_options_defineProperty(_CONFIG$ROWS$COLUMNS$,enums_constants_COLOR,{}),local_options_defineProperty(_CONFIG$ROWS$COLUMNS$,enums_constants_SHAPE,{}),local_options_defineProperty(_CONFIG$ROWS$COLUMNS$,enums_constants_SIZE,{}),local_options_defineProperty(_CONFIG$ROWS$COLUMNS$,"detail",{}),local_options_defineProperty(_CONFIG$ROWS$COLUMNS$,"layers",{}),local_options_defineProperty(_CONFIG$ROWS$COLUMNS$,"transform",{}),_CONFIG$ROWS$COLUMNS$);function simple_group_defineProperties(target,props){for(var i=0;i0&&(dimensionArr[0]=[].concat(field_sanitizer_toConsumableArray(dimensionArr[0]),field_sanitizer_toConsumableArray(dimensionArr[1])),dimensionArr[1]=[]),{fields:dimensionArr.map(function(list,i){return 1===i?measureArr[i].concat(dimensionArr[i]):dimensionArr[i].concat(measureArr[i])}),dimensions:[].concat(field_sanitizer_toConsumableArray(dimensionArr[0]),field_sanitizer_toConsumableArray(dimensionArr[1])),measures:[].concat(field_sanitizer_toConsumableArray(measureArr[0]),field_sanitizer_toConsumableArray(measureArr[1])),temporal:[].concat(field_sanitizer_toConsumableArray(temporalArr[0]),field_sanitizer_toConsumableArray(temporalArr[1])),categorical:[].concat(field_sanitizer_toConsumableArray(categoricalArr[0]),field_sanitizer_toConsumableArray(categoricalArr[1]))}}(norFields,fields)}),2),rowsInfo=_map2[0],columnsInfo=_map2[1],rows=rowsInfo.fields,rowDimensions=rowsInfo.dimensions,rowMeasures=rowsInfo.measures,rowTemporalFields=rowsInfo.temporal,rowCategoricalFields=rowsInfo.categorical,columns=columnsInfo.fields,columnDimensions=columnsInfo.dimensions,columnMeasures=columnsInfo.measures;return{rows:rows,rowDimensions:rowDimensions,rowMeasures:rowMeasures,rowTemporalFields:rowTemporalFields,rowCategoricalFields:rowCategoricalFields,columns:columns,columnTemporalFields:columnsInfo.temporal,columnCategoricalFields:columnsInfo.categorical,columnDimensions:columnDimensions,columnMeasures:columnMeasures}};function visual_encoder_slicedToArray(arr,i){return function visual_encoder_arrayWithHoles(arr){if(Array.isArray(arr))return arr}(arr)||function visual_encoder_iterableToArrayLimit(arr,i){var _arr=[],_n=!0,_d=!1,_e=void 0;try{for(var _s,_i=arr[Symbol.iterator]();!(_n=(_s=_i.next()).done)&&(_arr.push(_s.value),!i||_arr.length!==i);_n=!0);}catch(err){_d=!0,_e=err}finally{try{_n||null==_i.return||_i.return()}finally{if(_d)throw _e}}return _arr}(arr,i)||function visual_encoder_nonIterableRest(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}()}function visual_encoder_defineProperties(target,props){for(var i=0;i0&&void 0!==arguments[0]?arguments[0]:{},fields=arguments.length>1?arguments[1]:void 0,_getHeaderAxisFrom2=visual_encoder_slicedToArray(group_utils_getHeaderAxisFrom(ROW,fields.rows,axisFrom),2),rowHeader=_getHeaderAxisFrom2[0],rowAxis=_getHeaderAxisFrom2[1],_getHeaderAxisFrom4=visual_encoder_slicedToArray(group_utils_getHeaderAxisFrom("column",fields.columns,axisFrom),2),colHeader=_getHeaderAxisFrom4[0],colAxis=_getHeaderAxisFrom4[1];return this.axisFrom({row:rowAxis,column:colAxis}),this.headerFrom({row:rowHeader,column:colHeader}),this}}]),VisualEncoder}(),scaleMaps={linear:continous_axis_ContinousAxis,band:band_axis_BandAxis,temporal:time_axis_TimeAxis,size:size_axis_SizeAxis,color:color_axis_ColorAxis,shape:shape_axis_ShapeAxis},data_type_scale_map_dataTypeScaleMap={dimension:scale_type_namespaceObject.BAND,categorical:scale_type_namespaceObject.BAND,temporal:scale_type_namespaceObject.TIME,measure:scale_type_namespaceObject.LINEAR,continuous:scale_type_namespaceObject.LINEAR};function encoder_helper_toConsumableArray(arr){return function encoder_helper_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);i1?axesCreators.position="both":axesCreators.position=_this.axisFrom()[type],geomCellAxes[axis]=encoder_helper_generateAxisFromMap(axis,axisFields[i],axesCreators,{groupAxes:axis===X?xAxes:yAxes,valueParser:context.resolver.valueParser()})}),geomCellAxes}},{key:"updateDomains",value:function updateDomains(store,axes){var xAxes=axes.x,yAxes=axes.y;store.model.lock();for(var i=0;i1&&"linear"===axes[0].constructor.type()&&axes[0].config().alignZeroLine&&(axes.forEach(function(axis,i){var key=axisType?"".concat(idx,"0").concat(i):"0".concat(idx).concat(i);domain=domains[axisType][key],min[i]=domain[0],max[i]=domain[1]}),adjustedDomain=function getAdjustedDomain(max,min){var y1ratio=max[0]/(max[0]-min[0]),y2ratio=max[1]/(max[1]-min[1]),allSameSign=!1;return min[0]>0&&min[1]>0&&min[1]>0&&max[1]>0&&(allSameSign=!0,min[0]=0,min[1]=0),min[0]<0&&min[1]<0&&min[1]<0&&max[1]<0&&(allSameSign=!0,max[0]=0,max[1]=0),allSameSign||y1ratio===y2ratio||(y1ratiocounter)for(var _i2=counter;_i2-1&&(projections=[[_facet,_facet]],primaryFacets.splice(_existIndex,1)),secondaryFacets.splice(0,1)}else{var axisFromIndex=primaryFacets.length-1,facet=primaryFacets[axisFromIndex];projections=[[facet]];var existIndex=getIndex(secondaryFacets,facet);existIndex>-1&&(projections=[[facet,facet]],secondaryFacets.splice(existIndex,1)),primaryFacets.splice(axisFromIndex,1)}return{facets:facets=(facets=[].concat(primaryFacets,secondaryFacets)).filter(function(el,index,self){return index===self.findIndex(function(t){return t.toString()===el.toString()})}),projections:projections}}},{key:"fieldSanitizer",value:function fieldSanitizer(datamodel,config){return cartesian_encoder_get(cartesian_encoder_getPrototypeOf(CartesianEncoder.prototype),"fieldSanitizer",this).call(this,datamodel,config)}},{key:"getRetinalFieldsDomain",value:function getRetinalFieldsDomain(dataModels,encoding){var groupedModel=dataModels.groupedModel,domains={};for(var key in encoding)if({}.hasOwnProperty.call(encoding,key)){var encodingObj=encoding[key],field=encodingObj.field;if(!encodingObj.domain&&field){var domain=retriveDomainFromData(groupedModel,field);domains[field]=domain}}return domains}},{key:"serializeLayerConfig",value:function serializeLayerConfig(layerArray){var serializedLayers=[];return layerArray.length&&layerArray.forEach(function(layer,i){var def=src_layer_factory.sanitizeLayerConfig(layer);def.order=i,serializedLayers.push(def)}),serializedLayers}},{key:"getLayerConfig",value:function getLayerConfig(fields,userLayerConfig){var layerConfig=[],columnFields=fields.columnFields,rowFields=fields.rowFields;return columnFields.forEach(function(colField){var colFieldName=colField.toString();rowFields.forEach(function(rowField){var configs=[],rowFieldName=rowField.toString(),encoding={x:{field:colFieldName},y:{field:rowFieldName}},rowFieldType=rowField.subtype(),mark=function getDefaultMark(colFieldType,rowFieldType){return"categorical"===colFieldType||"categorical"===rowFieldType?"bar":"temporal"===colFieldType||"temporal"===rowFieldType?"line":"point"}(colField.subtype(),rowFieldType),defConfigs=[{mark:mark,def:{mark:mark,encoding:encoding}}],layerConfigs=function getLayerConfFromFields(colFields,rowFields,userLayerConfig){return userLayerConfig.filter(function(conf){var _ref,_ref2,_ref3,userConf=conf instanceof Array?conf:[conf],encodingArr=(_ref=[]).concat.apply(_ref,encoder_helper_toConsumableArray(userConf.map(function(d){return d.encoding}).filter(function(d){return void 0!==d})));if(!encodingArr.length)return!0;var xFields=(_ref2=[]).concat.apply(_ref2,encoder_helper_toConsumableArray(encodingArr.map(function(d){return[d.x&&d.x.field,d.x0&&d.x0.field]}))).filter(function(d){return void 0!==d&&null!==d}),yFields=(_ref3=[]).concat.apply(_ref3,encoder_helper_toConsumableArray(encodingArr.map(function(d){return[d.y&&d.y.field,d.y0&&d.y0.field]}))).filter(function(d){return void 0!==d&&null!==d});if(!xFields.length&&!yFields.length)return!0;var colFieldExist=!!xFields.length&&xFields.every(function(d){return-1!==colFields.indexOf(d)}),rowFieldExist=!!yFields.length&&yFields.every(function(d){return-1!==rowFields.indexOf(d)});return xFields.length&&yFields.length?colFieldExist&&rowFieldExist:colFieldExist||rowFieldExist})}(colField.getMembers(),rowField.getMembers(),userLayerConfig||[]);configs=layerConfigs.length?layerConfigs.map(function(layerConf){var mergedLayerConf=mergeRecursive(mergeRecursive({},defConfigs[0].def),layerConf),serializedLayerConfig=src_layer_factory.getSerializedConf(mergedLayerConf.mark,mergedLayerConf);return{mark:mergedLayerConf.mark,order:mergedLayerConf.order,def:serializedLayerConfig}}):defConfigs,layerConfig.push.apply(layerConfig,cartesian_encoder_toConsumableArray(configs))})}),layerConfig}}],[{key:"type",value:function type(){return"cartesian"}}]),CartesianEncoder}();function polar_encoder_typeof(obj){return(polar_encoder_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function polar_encoder_toConsumableArray(arr){return function polar_encoder_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);icounter)for(var _i=counter;_i0&&(config=mergeRecursive(config,userLayerConfig[0])),layerConfig.push(config)}),0===layerConfig.length&&(layerConfig=userLayerConfig),this.layers(layerConfig),layerConfig}},{key:"serializeLayerConfig",value:function serializeLayerConfig(layerArray){var serializedLayers=[];return layerArray.length&&layerArray.forEach(function(layer){var def=src_layer_factory.getSerializedConf(layer.mark,layer);serializedLayers.push({mark:layer.mark,def:def})}),serializedLayers}}],[{key:"type",value:function type(){return"polar"}}]),PolarEncoder}();function retinal_encoder_typeof(obj){return(retinal_encoder_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function retinal_encoder_defineProperties(target,props){for(var i=0;i1&&void 0!==arguments[1]?arguments[1]:{},axisType=axesCreators.axisType,fieldsConfig=axesCreators.fieldsConfig,field=fieldProps.field,axis=[],Cls=scaleMaps[axisType];return fieldProps.type=fieldProps.type?fieldProps.type:group_utils_getAxisType(fieldsConfig,field||null),axis.push(new Cls(fieldProps)),axis}({axisType:axisType,fieldsConfig:fieldsConfig},config[axisType])}),newAxes}},{key:"getLayerConfig",value:function getLayerConfig(encodingConfigs,userLayerConfig){var layerConfig=[];return userLayerConfig.forEach(function(e){var config=e;[enums_constants_COLOR,enums_constants_SHAPE,enums_constants_SIZE].forEach(function(axis){if(encodingConfigs[axis]&&encodingConfigs[axis].field){var def=config.def;config.def instanceof Array?def.forEach(function(conf){conf.encoding=conf.encoding||{},!conf.encoding[axis]&&(conf.encoding[axis]={}),conf.encoding[axis].field=encodingConfigs[axis].field}):(def.encoding=def.encoding||{},!def.encoding[axis]&&(def.encoding[axis]={}),def.encoding[axis].field=encodingConfigs[axis].field)}}),layerConfig.push(config)}),layerConfig}},{key:"setCommonDomain",value:function setCommonDomain(context){var domains=context.domains,axes=context.axes,encoding=context.encoding;return Object.entries(encoding).forEach(function(enc){if(enc[1]&&enc[1].field){var encType=enc[0],field=enc[1].field;field&&axes[encType].forEach(function(axis){var domain=domains[field];!enc[1].domain&&axis.updateDomain(domain)})}}),axes}}],[{key:"type",value:function type(){return"retinal"}}]),RetinalEncoder}(),group_utils_this=void 0;function group_utils_slicedToArray(arr,i){return function group_utils_arrayWithHoles(arr){if(Array.isArray(arr))return arr}(arr)||function group_utils_iterableToArrayLimit(arr,i){var _arr=[],_n=!0,_d=!1,_e=void 0;try{for(var _s,_i=arr[Symbol.iterator]();!(_n=(_s=_i.next()).done)&&(_arr.push(_s.value),!i||_arr.length!==i);_n=!0);}catch(err){_d=!0,_e=err}finally{try{_n||null==_i.return||_i.return()}finally{if(_d)throw _e}}return _arr}(arr,i)||function group_utils_nonIterableRest(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}()}function group_utils_toConsumableArray(arr){return function group_utils_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);i1?_len-1:0),_key=1;_key<_len;_key++)params[_key-1]=arguments[_key];return"".concat(axisName,"-axis-").concat(params.join("-"))},group_utils_headerCreator=function headerCreator(fields,fieldHeaders,TextCell,_ref2){var classPrefix=_ref2.classPrefix,labelManager=_ref2.labelManager;return fields.length>0?fields[0].map(function(cell,i){return new TextCell({type:"header",className:"".concat(classPrefix,"-grid-headers")},{labelManager:labelManager}).source(function getHeaderText(headers,index,rowLength){var header="";if(index===rowLength-1&&headers.length>rowLength){for(var i=index;i1||right.length>1)&&(borders.top=!0,borders.bottom=!0),borders}(leftRows,rightRows),showColBorders=function getColumnsBorders(top,bottom){var borders={left:!1,right:!1};return(top.length||bottom.length)&&(top[0]&&top[0].length>1||bottom[0]&&bottom[0].length>1)&&(borders.left=!0,borders.right=!0),borders}(topColumns,bottomColumns),showValueBorders=function getValueBorders(rows,columns){var borders={top:!0,left:!0,bottom:!0,right:!0},borderTypeRow=[constants_LEFT,constants_RIGHT],borderTypeCol=["top","bottom"];return rows.forEach(function(e,i){e[0]&&e[0].length?borders[borderTypeRow[i]]=!0:borders[borderTypeRow[i]]=!1}),columns.forEach(function(e,i){e.length?borders[borderTypeCol[i]]=!0:borders[borderTypeCol[i]]=!1}),borders}([leftRows,rightRows],[topColumns,bottomColumns]),valueMatrix.length>1&&(showValueBorders.top=!0,showValueBorders.bottom=!0),valueMatrix.length&&valueMatrix[0].length>1&&(showValueBorders.left=!0,showValueBorders.right=!0),{showRowBorders:showRowBorders,showColBorders:showColBorders,showValueBorders:showValueBorders}};function action_behaviour_map_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}var actionBehaviourMap=(action_behaviour_map_defineProperty(_actionBehaviourMap={},actions_namespaceObject.DRAG,{behaviours:[behaviours_namespaceObject.BRUSH],touch:!1}),action_behaviour_map_defineProperty(_actionBehaviourMap,actions_namespaceObject.HOVER,{behaviours:[behaviours_namespaceObject.HIGHLIGHT]}),action_behaviour_map_defineProperty(_actionBehaviourMap,actions_namespaceObject.LONGTOUCH,{behaviours:[behaviours_namespaceObject.SELECT],touch:!0}),action_behaviour_map_defineProperty(_actionBehaviourMap,actions_namespaceObject.TOUCHDRAG,{behaviours:[behaviours_namespaceObject.BRUSH],touch:!0}),action_behaviour_map_defineProperty(_actionBehaviourMap,actions_namespaceObject.CLICK,{behaviours:[behaviours_namespaceObject.SELECT],touch:!1}),_actionBehaviourMap);function src_helper_toConsumableArray(arr){return function src_helper_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);i0&&void 0!==arguments[0]?arguments[0]:{},createFn=arguments.length>1?arguments[1]:void 0,definitions=arguments.length>2?arguments[2]:void 0,iteratorFn=arguments.length>3?arguments[3]:void 0,map={};for(var key in definitions.forEach(function(def){var name=def.definition.name,instance=instances[name];instance||(instances[name]=instance=createFn(def)),iteratorFn(instance,def,name),map[name]=1}),instances)key in map||(instances[key].remove(),delete instances[key]);return instances}(context[sel],function(){var inst=src_layer_factory.getLayerInstance({mark:mark});return inst.dependencies(context._layerDeps),inst},definitions,function(layer,atomicDef,key){var definition=atomicDef.definition,sConf=src_layer_factory.getSerializedConf(mark,definition),axesObj=atomicDef.axes;layer.metaInf({unitRowIndex:metaInf.rowIndex,unitColIndex:metaInf.colIndex,namespace:"".concat(metaInf.namespace).concat(type).concat(key)}).store(store).config(sConf).dataProps({timeDiffs:timeDiffs}).axes(axesObj)}),context["_".concat(type)]=Object.values(context[sel])})}(context)}},{type:"registerImmediateListener",props:["".concat(namespace.local,".").concat("data"),"".concat(namespace.local,".").concat("transform")],listener:function listener(_ref11,_ref12){var dataModel=src_listener_map_slicedToArray(_ref11,2)[1],transform=src_listener_map_slicedToArray(_ref12,2)[1];if(dataModel){var dataModels=function transformDataModels(transform,dataModel){var dataModels={};for(var key in transform)if({}.hasOwnProperty.call(transform,key)){var transformVal=transform[key];dataModels[key]=transformVal(dataModel)}return dataModels}(transform,dataModel);context.store().commit("".concat(namespace.local,".").concat("transformedData"),dataModels)}}},{type:"registerImmediateListener",props:["".concat(namespace.local,".").concat("transformedData"),"".concat(namespace.local,".").concat("layers")],listener:function listener(_ref15,_ref16){var transformedData=src_listener_map_slicedToArray(_ref15,2)[1],layers=src_listener_map_slicedToArray(_ref16,2)[1],layerAxisIndexVal=context._layerAxisIndex,axesVal=context.axes(),dataModel=context.data();if(transformedData&&layers&&axesVal&&layerAxisIndexVal){context._lifeCycleManager.notify({client:layers,action:"beforeupdate",formalName:"layer"});var model=context.store().model;layers.forEach(function(lyr){return lyr.disableUpdate()}),function attachDataToLayers(layers,dm,transformedDataModels){layers.forEach(function(layer){var dataSource=layer.config().source,dataModel=dataSource instanceof Function?dataSource(dm):transformedDataModels[dataSource]||dm;layer.data()!==dataModel&&layer.data(dataModel)})}(layers,dataModel,transformedData),model.lock(),layers.forEach(function(lyr){lyr.enableUpdate().domain(lyr._domain)}),model.unlock(),context._dimensionMeasureMap=function getDimensionMeasureMap(layers,fieldsConfig){var retinalEncodingsAndMeasures={};for(var key in layers.forEach(function(layer){var _layer$encodingFields=layer.encodingFieldsInf(),colorField=_layer$encodingFields.colorField,sizeField=_layer$encodingFields.sizeField,shapeField=_layer$encodingFields.shapeField,measures=[_layer$encodingFields.xField,_layer$encodingFields.yField].filter(function(field){return fieldsConfig[field]&&fieldsConfig[field].def.type===dist_datamodel.FieldType.MEASURE});[colorField,sizeField,shapeField].forEach(function(field){var _retinalEncodingsAndM;fieldsConfig[field]&&fieldsConfig[field].def.type===dist_datamodel.FieldType.DIMENSION&&(!retinalEncodingsAndMeasures[field]&&(retinalEncodingsAndMeasures[field]=[]),(_retinalEncodingsAndM=retinalEncodingsAndMeasures[field]).push.apply(_retinalEncodingsAndM,src_helper_toConsumableArray(measures)))})}),retinalEncodingsAndMeasures)({}).hasOwnProperty.call(retinalEncodingsAndMeasures,key)&&(retinalEncodingsAndMeasures[key]=src_helper_toConsumableArray(new Set(retinalEncodingsAndMeasures[key])));return retinalEncodingsAndMeasures}(layers,dataModel.getFieldsConfig(),context.retinalFields()),function attachAxisToLayers(axes,layers,layerAxisIndex){layers.forEach(function(layer){var layerId=layer.id(),axesObj={};objectIterator(axes,function(key){var axisInf=layerAxisIndex[layerId];axisInf&&axes[key]&&(axesObj[key]=axes[key][axisInf[key]||0])}),Object.keys(axesObj).length&&layer.axes(axesObj)})}(axesVal,layers,layerAxisIndexVal),context._lifeCycleManager.notify({client:layers,action:"updated",formalName:"layer"})}}}]};function props_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}var src_props_PROPS=(props_defineProperty(_PROPS={},"facetByFields",{}),props_defineProperty(_PROPS,"retinalFields",{}),props_defineProperty(_PROPS,"parentAlias",{}),props_defineProperty(_PROPS,"layers",{}),props_defineProperty(_PROPS,"cachedData",{}),props_defineProperty(_PROPS,"detailFields",{}),props_defineProperty(_PROPS,"axes",{defaultValue:{x:[],y:[]}}),props_defineProperty(_PROPS,"fields",{}),props_defineProperty(_PROPS,"metaInf",{}),props_defineProperty(_PROPS,"registry",{}),props_defineProperty(_PROPS,"width",{}),props_defineProperty(_PROPS,"height",{}),props_defineProperty(_PROPS,"parentContainerInf",{}),props_defineProperty(_PROPS,"valueParser",{defaultValue:function defaultValue(val){return val}}),_PROPS);function firebolt_helper_slicedToArray(arr,i){return function firebolt_helper_arrayWithHoles(arr){if(Array.isArray(arr))return arr}(arr)||function firebolt_helper_iterableToArrayLimit(arr,i){var _arr=[],_n=!0,_d=!1,_e=void 0;try{for(var _s,_i=arr[Symbol.iterator]();!(_n=(_s=_i.next()).done)&&(_arr.push(_s.value),!i||_arr.length!==i);_n=!0);}catch(err){_d=!0,_e=err}finally{try{_n||null==_i.return||_i.return()}finally{if(_d)throw _e}}return _arr}(arr,i)||function firebolt_helper_nonIterableRest(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}()}function firebolt_helper_toConsumableArray(arr){return function firebolt_helper_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);i2&&void 0!==arguments[2]?arguments[2]:{},payload=config.payload,selectionSet=config.selectionSet,propagationFieldInf=config.propagationFields[action]||{},propagationFields=propagationFieldInf.fields||[],append=propagationFieldInf.append,criteria=payload.criteria,context=instance.context,dataModel=context.cachedData()[0],sourceId=context.id(),sideEfffects=instance.sideEffects(),behaviourEffectMap=instance._behaviourEffectMap,mergedModel=selectionSet.mergedEnter.model,fieldsConfig=dataModel.getFieldsConfig();payload.sourceUnit=sourceId,payload.action=action,payload.sourceCanvas=context.parentAlias();var propagationBehaviour=instance._propagationBehaviourMap[action]||action,propFields=[];null===criteria?propagationData=null:isSimpleObject(criteria)?(propFields=Object.keys(criteria||{}),propagationData=mergedModel?mergedModel.project(propFields):null):(propFields=criteria[0],propagationData=mergedModel?mergedModel.project(propFields):null);var facetByFields=context.facetByFields();if(null!==propagationData&&propagationFields.length){var fields=propagationData.getData().schema.map(function(d){return d.name});propagationData=function getModelWithFacetData(dm,data){var dataObj=dm.getData(),schema1=dataObj.schema,data1=dataObj.data,jsonData=[],schema2=data[0].map(function(d){return{name:"".concat(d),type:dist_datamodel.FieldType.DIMENSION}}),data2=data[1];return data1.forEach(function(d){var tuple={};schema1.forEach(function(obj,i){tuple[obj.name]=d[i]}),schema2.forEach(function(obj,i){tuple[obj.name]=data2[i]}),jsonData.push(tuple)}),new datamodel_default.a(jsonData,[].concat(data_propagator_toConsumableArray(schema1),data_propagator_toConsumableArray(schema2)))}(propagationData,facetByFields),propFields=append?[].concat(data_propagator_toConsumableArray(fields),data_propagator_toConsumableArray(propagationFields)):propagationFields,propagationData=propagationData.project(propFields)}var propagateInterpolatedValues=!1;propFields.length&&propFields.every(function(field){return fieldsConfig[field]&&fieldsConfig[field].def.type===dist_datamodel.FieldType.MEASURE})&&(propagateInterpolatedValues=!0);var groupId=context.parentAlias();payload.action=action;var behaviourInstance=instance._actions.behavioural[propagationBehaviour],isMutableAction=!!behaviourInstance&&behaviourInstance.constructor.mutates(),filterFn=function filterFn(entry,propagationConf){var effects=behaviourEffectMap[entry.config.action],mutates=!entry.config.groupId||effects.some(function(d){return sideEfffects[d.name||d].constructor.mutates()});return entry.config.groupId!==propagationConf.groupId&&mutates},sourceBehaviour=instance._actions.behavioural[action],mutates=!!sourceBehaviour&&sourceBehaviour.constructor.mutates(),propConfig={payload:payload,action:action,criteria:propagationData,isMutableAction:mutates,propagateInterpolatedValues:propagateInterpolatedValues,groupId:groupId,sourceId:mutates?groupId:sourceId,filterFn:filterFn,enabled:function enabled(propConf,firebolt){return action===propagationBehaviour||propConf.payload.sourceCanvas===firebolt.context.parentAlias()}};dataModel.propagate(propagationData,propConfig,!0),action!==propagationBehaviour&&(propConfig={payload:payload,sourceId:isMutableAction?groupId:sourceId,criteria:propagationData,isMutableAction:isMutableAction,propagateInterpolatedValues:propagateInterpolatedValues,action:propagationBehaviour,groupId:groupId,applyOnSource:action===propagationBehaviour,enabled:function enabled(propConf,firebolt){return propConf.payload.sourceCanvas!==firebolt.context.parentAlias()},filterFn:filterFn},dataModel.propagate(propagationData,propConfig,!0,{filterImmutableAction:function filterImmutableAction(actionInf,propInf){return actionInf.groupId!==propInf.groupId}}))};function src_firebolt_typeof(obj){return(src_firebolt_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function src_firebolt_defineProperties(target,props){for(var i=0;i1&&void 0!==arguments[1]?arguments[1]:{},points=[],parsedIdentifiers=identifiers;if(null===identifiers)return[];var layers=this.layers(),len=layers.length;isSimpleObject(identifiers)&&(parsedIdentifiers=[Object.keys(identifiers)],parsedIdentifiers=[].concat(visual_unit_toConsumableArray(parsedIdentifiers),visual_unit_toConsumableArray(function transposeArray(arr){return arr[0].map(function(col,i){return arr.map(function(row){return row[i]})})}(Object.values(identifiers)))));for(var i=0;i1&&void 0!==arguments[1]?arguments[1]:[]].map(function(fields){return fields.reduce(function(acc,d){return acc=[].concat(matrix_model_toConsumableArray(acc),matrix_model_toConsumableArray(d.getMembers()))},[])})},createSelectedDataModel=function createSelectedDataModel(datamodel,fieldNames,fieldValues){return datamodel.select(function(fields){return fieldNames.every(function(field,k){return fields[field].value===fieldValues[k]})})},matrix_model_uniqueKeyGenerator=function uniqueKeyGenerator(keyArray,context){var depth=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0,val=arguments.length>3&&void 0!==arguments[3]?arguments[3]:[],facets=context.facets,dataModel=context.dataModel,uniqueValues=context.uniqueValues;if(facets[depth+1]){var field=facets[depth];uniqueValues.forEach(function(value){var newDm=dataModel.select(function(fields){return fields[field].value===value}),nextDepthUniqueValues=retriveDomainFromData(newDm,facets[depth+1]);uniqueKeyGenerator(keyArray,{facets:facets,dataModel:newDm,uniqueValues:nextDepthUniqueValues},depth+1,[].concat(matrix_model_toConsumableArray(val),[value]))})}else uniqueValues.forEach(function(value){keyArray.push([].concat(matrix_model_toConsumableArray(val),[value]))})},projectRows=function projectRows(datamodel,projections){var allColumnProjections=projections.allColumnProjections,rowProjections=projections.rowProjections,optionalProjections=projections.optionalProjections;return rowProjections.length>0?rowProjections.map(function(projectFields){var _getFieldNames2=matrix_model_slicedToArray(getFieldNames(projectFields,allColumnProjections),2),projFieldNames=_getFieldNames2[0],colProjFieldNames=_getFieldNames2[1];return datamodel.project([].concat(matrix_model_toConsumableArray(projFieldNames),matrix_model_toConsumableArray(colProjFieldNames),matrix_model_toConsumableArray(optionalProjections)))}):[datamodel]},pushToMatrix=function pushToMatrix(context,valueCellCreator){var _matrix$rowIndex,cells=[],matrix=context.matrix,datamodel=context.datamodel,facetInfo=context.facetInfo,fieldInfo=context.fieldInfo,rowProjections=fieldInfo.rowProjections,colProjections=fieldInfo.colProjections,optionalProjections=fieldInfo.optionalProjections,rowIndex=facetInfo.rowIndex,columnIndex=facetInfo.columnIndex,rowProj=rowProjections[rowIndex%rowProjections.length]||[];colProjections.length>0?cells=colProjections.map(function(projectFields,projIdx){var _getFieldNames4=matrix_model_slicedToArray(getFieldNames(projectFields,rowProj),2),colProjFieldNames=_getFieldNames4[0],rowProjFieldNames=_getFieldNames4[1],projectedDm=datamodel.project([].concat(matrix_model_toConsumableArray(colProjFieldNames),matrix_model_toConsumableArray(rowProjFieldNames),matrix_model_toConsumableArray(optionalProjections))),projections={rowFields:rowProj,columnFields:projectFields},indices={rowIndex:rowIndex,columnIndex:columnIndex*colProjections.length+projIdx};return valueCellCreator(projectedDm,{projections:projections,indices:indices},facetInfo)}):cells=[valueCellCreator(datamodel,{projections:{rowFields:rowProj,columnFields:[]},indices:{rowIndex:rowIndex,columnIndex:columnIndex}},facetInfo)];matrix[rowIndex]=matrix[rowIndex]||[],(_matrix$rowIndex=matrix[rowIndex]).push.apply(_matrix$rowIndex,matrix_model_toConsumableArray(cells))};function cell_creator_slicedToArray(arr,i){return function cell_creator_arrayWithHoles(arr){if(Array.isArray(arr))return arr}(arr)||function cell_creator_iterableToArrayLimit(arr,i){var _arr=[],_n=!0,_d=!1,_e=void 0;try{for(var _s,_i=arr[Symbol.iterator]();!(_n=(_s=_i.next()).done)&&(_arr.push(_s.value),!i||_arr.length!==i);_n=!0);}catch(err){_d=!0,_e=err}finally{try{_n||null==_i.return||_i.return()}finally{if(_d)throw _e}}return _arr}(arr,i)||function cell_creator_nonIterableRest(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}()}function cell_creator_toConsumableArray(arr){return function cell_creator_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);i0?rowProjections.length:1):(keys=columnKeys,length=colProjections.length>0?colProjections.length:1),keys=keys.map(function(arr){return arr.map(function(val){return resolver.valueParser()(val)})}),section.length&&headerFrom===type&&axis&&keys.length){var hContext={axis:axis,length:length,type:type},headers=[];index<2?(hContext.keys=keys,hContext.facet=facet.rows,headers=cell_creator_headerPlaceholderGn(hContext,selectionObj,cells,labelManager)):(hContext.facet=facet.columns,hContext.keys=keys[0].map(function(key,i){return keys.map(function(e){return e[i]})}),headers=cell_creator_headerPlaceholderGn(hContext,selectionObj,cells,labelManager)),selectionObj["".concat(type,"Headers")]=headers}else selectionObj["".concat(type,"Headers")]=null}),selectionObj},cell_creator_computeMatrices=function computeMatrices(context,config){var resolver=context.resolver,datamodel=context.datamodel,componentRegistry=context.componentRegistry,encoders=context.encoders,globalConfig=config.globalConfig,selection=config.selection,transform=config.transform,groupBy=globalConfig.autoGroupBy,labelManager=resolver.dependencies().smartlabel,fieldMap=datamodel.getFieldsConfig(),layerConfig=resolver.layerConfig(),registry=resolver.registry(),normalizedRows=resolver.horizontalAxis().fields,normalizedColumns=resolver.verticalAxis().fields,otherEncodings=resolver.optionalProjections(config,layerConfig),facetsAndProjections=resolver.getAllFields(),matrixGnContext={normalizedColumns:normalizedColumns,normalizedRows:normalizedRows,facetsAndProjections:facetsAndProjections,layers:layerConfig,fieldMap:fieldMap,otherEncodings:otherEncodings,encoders:encoders,facet:globalConfig.facet||{},axisFrom:globalConfig.axisFrom||{},selection:selection,resolver:resolver},cells={GeomCell:resolver.getCellDef(registry.GeomCell),AxisCell:resolver.getCellDef(registry.AxisCell),BlankCell:resolver.getCellDef(registry.BlankCell),TextCell:resolver.getCellDef(registry.TextCell)},isRowSizeEqual=group_utils_isDistributionEqual(normalizedRows),isColumnSizeEqual=group_utils_isDistributionEqual(normalizedColumns);resolver.colCells({}),resolver.rowCells({}),resolver.datamodelTransform(transform||{}),resolver.resetSimpleAxes();var newCacheMap={exitCellMap:resolver.cacheMaps().entryCellMap,entryCellMap:new Map};resolver.cacheMaps(newCacheMap);var valueCellContext={config:globalConfig,suppliedLayers:encoders.simpleEncoder.serializeLayerConfig(resolver.layerConfig()),resolver:resolver,cell:cells.GeomCell,encoder:encoders.simpleEncoder,newCacheMap:newCacheMap,detailFields:config.detail},fieldsConfig=datamodel.getFieldsConfig(),groupedModel=datamodel;if(!groupBy.disabled){var allFields=function extractFields(facetsAndProjections,layerFields){var _ref6,fields=Object.values(facetsAndProjections).map(function(arr){var _ref4,_ref5,flattenArray=(_ref4=[]).concat.apply(_ref4,group_utils_toConsumableArray(arr));return(_ref5=[]).concat.apply(_ref5,group_utils_toConsumableArray(flattenArray.map(function(field){return field instanceof variable_Variable?field.getMembers():field})))});return(_ref6=[]).concat.apply(_ref6,group_utils_toConsumableArray(fields).concat(group_utils_toConsumableArray(layerFields)))}(facetsAndProjections,function getFieldsFromSuppliedLayers(suppliedLayerConfig,fieldsConfig){var _ref3,fields=[],encodingArr=suppliedLayerConfig.map(function(conf){return conf.encoding||{}});return fields=(fields=[].concat(group_utils_toConsumableArray(fields),[(_ref3=[]).concat.apply(_ref3,group_utils_toConsumableArray(encodingArr.map(function(enc){return Object.values(enc).map(function(d){return d.field})})))])).filter(function(field){return fieldsConfig[field]&&fieldsConfig[field].def.type===dist_datamodel.FieldType.DIMENSION})}(valueCellContext.suppliedLayers,datamodel.getFieldsConfig())),dimensions=allFields.filter(function(field){return fieldsConfig[field]&&fieldsConfig[field].def.type===dist_datamodel.FieldType.DIMENSION}),aggregationFns=groupBy.measures,measureNames=Object.keys(datamodel.getFieldspace().getMeasure()),nearestAggFns=common_utils_retrieveNearestGroupByReducers.apply(void 0,[datamodel].concat(cell_creator_toConsumableArray(measureNames))),resolvedAggFns=mergeRecursive(nearestAggFns,aggregationFns);groupedModel=datamodel.groupBy(dimensions.length?dimensions:[""],resolvedAggFns).project(allFields)}var valueMatrixInfo=function getMatrixModel(dataModel,facetsAndProjections,valueCellCreator){var rowDataModels=[],rowKeys=[],columnKeys=[],allColumnProjections=[],matrix=[],facetInfo=[],fieldInfo=Object.assign({},facetsAndProjections),rowFacets=fieldInfo.rowFacets,colFacets=fieldInfo.colFacets;if(fieldInfo.colProjections.forEach(function(colProj){allColumnProjections.push.apply(allColumnProjections,matrix_model_toConsumableArray(colProj))}),fieldInfo.allColumnProjections=allColumnProjections,rowFacets.length>0){var field=rowFacets[0].toString(),firstLevelRowKeys=retriveDomainFromData(dataModel,field);matrix_model_uniqueKeyGenerator(rowKeys,{facets:rowFacets,dataModel:dataModel,uniqueValues:firstLevelRowKeys}),rowKeys.forEach(function(val){var _rowDataModels,rowFacetFieldNames=matrix_model_slicedToArray(getFieldNames(rowFacets),1)[0],selectedDataModel=createSelectedDataModel(dataModel,rowFacetFieldNames,val),newProjectedDataModels=projectRows(selectedDataModel,fieldInfo);(_rowDataModels=rowDataModels).push.apply(_rowDataModels,matrix_model_toConsumableArray(newProjectedDataModels)),newProjectedDataModels.forEach(function(){facetInfo.push([rowFacets,val])})})}else{var _rowDataModels2;(_rowDataModels2=rowDataModels).push.apply(_rowDataModels2,matrix_model_toConsumableArray(projectRows(dataModel,fieldInfo)))}if(rowDataModels=rowDataModels.length>0?rowDataModels:[[]],colFacets.length>0){var colFacetNames=colFacets.map(function(d){return"".concat(d)}),_field=colFacetNames[0],firstLevelColumnKeys=retriveDomainFromData(dataModel,_field);matrix_model_uniqueKeyGenerator(columnKeys,{facets:colFacetNames,dataModel:dataModel,uniqueValues:firstLevelColumnKeys}),rowDataModels.forEach(function(dme,rIndex){facetInfo[rIndex]=facetInfo[rIndex]||[[],[]],columnKeys.forEach(function(val,cIndex){matrix[rIndex]=matrix[rIndex]||[];var datamodel=dme instanceof datamodel_default.a?dme:dataModel,selectedDataModel=createSelectedDataModel(datamodel,colFacetNames,val),context={matrix:matrix,datamodel:selectedDataModel,facetInfo:{rowFacets:facetInfo[rIndex],colFacets:[colFacets,val],rowIndex:rIndex,columnIndex:cIndex},fieldInfo:fieldInfo};pushToMatrix(context,valueCellCreator)})})}else rowDataModels.forEach(function(dme,rIndex){facetInfo[rIndex]=facetInfo[rIndex]||[[],[]];var context={matrix:matrix,datamodel:dme||dataModel,facetInfo:{rowFacets:facetInfo[rIndex],colFacets:[[],[]],rowIndex:rIndex,columnIndex:0},fieldInfo:fieldInfo};pushToMatrix(context,valueCellCreator)});var transposedColKeys=columnKeys.length>0?columnKeys[0].map(function(col,i){return columnKeys.map(function(row){return row[i]})}):columnKeys;return{matrix:matrix,rowKeys:rowKeys,columnKeys:transposedColKeys}}(groupedModel,facetsAndProjections,resolver.valueCellsCreator(valueCellContext));resolver.cacheMaps().exitCellMap.forEach(function(placeholder){placeholder.remove()}),resolver.cacheMaps().exitCellMap.clear(),resolver.valueMatrix(valueMatrixInfo.matrix);var _mutateAxesFromMap=function mutateAxesFromMap(cacheMaps,axes){var xAxes=null,yAxes=null,xAxesMap=cacheMaps.xAxesMap,yAxesMap=cacheMaps.yAxesMap,xAxisSet=axes.x,yAxisSet=axes.y;return xAxisSet&&xAxisSet.forEach(function(axisId){var xAxis=xAxesMap.get(axisId);(xAxes=xAxes||[]).push(xAxis)}),yAxisSet&&yAxisSet.forEach(function(axisId){var yAxis=yAxesMap.get(axisId);(yAxes=yAxes||[]).push(yAxis)}),{xAxes:xAxes,yAxes:yAxes}}(resolver.cacheMaps(),resolver.axes()),xAxes=_mutateAxesFromMap.xAxes,yAxes=_mutateAxesFromMap.yAxes;resolver.axes({x:xAxes,y:yAxes});var store=resolver.store();[xAxes,yAxes].forEach(function(axesArr,type){var stateProps={};(axesArr=axesArr||[]).forEach(function(axes,idx){axes.forEach(function(axis,axisIndex){stateProps["".concat(idx).concat(axisIndex)]=null})}),store.append("".concat(namespace_namespaceObject.GROUP_GLOBAL_NAMESPACE,".domain.").concat(type?"y":"x"),stateProps)}),resolver.createUnits(componentRegistry,config);var _generateMatrices=function generateMatrices(context,matrices,cells,labelManager){var unitHeight=context.unitHeight,unitWidth=context.unitWidth,facetsAndProjections=context.facetsAndProjections,normalizedRows=context.normalizedRows,normalizedColumns=context.normalizedColumns,selection=context.selection,axisFrom=context.axisFrom,facet=context.facet,encoders=context.encoders,resolver=context.resolver,selectionObj=cell_creator_generatePlaceholders({fields:{rows:normalizedRows,columns:normalizedColumns},matrices:matrices,facetsAndProjections:facetsAndProjections,selection:selection,axisFrom:axisFrom,facet:facet,encoders:encoders,resolver:resolver},cells,labelManager),columnsPrimary=selectionObj.columnsPrimary,columnsSecondary=selectionObj.columnsSecondary,rowsPrimary=selectionObj.rowsPrimary,rowsSecondary=selectionObj.rowsSecondary,leftHeaders=selectionObj.leftHeaders,topHeaders=selectionObj.topHeaders,bottomHeaders=selectionObj.bottomHeaders,rightHeaders=selectionObj.rightHeaders,_map2=cell_creator_slicedToArray([rowsPrimary,rowsSecondary,columnsPrimary,columnsSecondary].map(function(d){return d?d.getObjects():[]}),4),rowPrime=_map2[0],rowSec=_map2[1],colPrime=_map2[2],colSec=_map2[3],_map4=cell_creator_slicedToArray([leftHeaders,rightHeaders].map(function(e){return e?e.getObjects().map(function(f){return f.getObjects()}):[]}),2),leftFacets=_map4[0],rightFacets=_map4[1],rowPriority=rowSec.length?1:-1;rowPrime.length&&rowPriority++;var colPriority=colSec.length?1:-1;colPrime.length&&colPriority++;var leftMatrix=leftFacets.length?leftFacets.map(function(d,i){return rowPrime[i]=rowPrime[i]?[rowPrime[i]]:[],[].concat(cell_creator_toConsumableArray(d),cell_creator_toConsumableArray(rowPrime[i]))}):rowPrime?rowPrime.map(function(d){return[d]}):[],rightMatrix=rowSec.length?rowSec.map(function(d,i){return[d].concat(cell_creator_toConsumableArray(rightFacets[i]||[]))}):rightFacets.length?rightFacets.map(function(d){return cell_creator_toConsumableArray(d)}):[],topMatrix=[];topHeaders&&topHeaders.getObjects().forEach(function(e){e.getObjects().forEach(function(x,i){topMatrix[i]=topMatrix[i]||[],topMatrix[i].push(x)})});colPrime.length&&topMatrix.push(colPrime);var bottomMatrix=[];colSec.length&&bottomMatrix.push(colSec);var currentBottomLength=bottomMatrix.length;bottomHeaders&&bottomHeaders.getObjects().forEach(function(e){e.getObjects().forEach(function(x,i){bottomMatrix[i+currentBottomLength]=bottomMatrix[i+currentBottomLength]||[],bottomMatrix[i+currentBottomLength].push(x)})});if(!leftMatrix.length&&!rightMatrix.length){var cell=new cells.BlankCell;cell.setAvailableSpace(unitWidth,unitHeight),leftMatrix=[[cell]]}if(!(topMatrix.length||bottomMatrix.length&&bottomMatrix[0].length)){var _cell=new cells.BlankCell;_cell.setAvailableSpace(unitWidth,unitHeight),bottomMatrix=[[_cell]]}return{rows:[leftMatrix,rightMatrix],columns:[topMatrix,bottomMatrix],selectionObj:selectionObj,colPriority:colPriority,rowPriority:rowPriority}}(matrixGnContext,{valuesMatrix:valueMatrixInfo,axesMatrix:resolver.axes()},cells,labelManager),rows=_generateMatrices.rows,columns=_generateMatrices.columns,selectionObj=_generateMatrices.selectionObj,rowPriority=_generateMatrices.rowPriority,colPriority=_generateMatrices.colPriority;return resolver.rowMatrix(rows),resolver.columnMatrix(columns),{rows:resolver.rowMatrix(),columns:resolver.columnMatrix(),values:resolver.valueMatrix(),isColumnSizeEqual:isColumnSizeEqual,isRowSizeEqual:isRowSizeEqual,priority:{row:rowPriority,col:colPriority},selection:selectionObj,dataModels:{groupedModel:groupedModel,parentModel:datamodel}}},RESOLVER_PROPS={dependencies:{},units:{},datamodelTransform:{},layerConfig:{},matrixLayers:{},colCells:{},rowCells:{},rowMatrix:{},columnMatrix:{},valueMatrix:{},encoder:{},valueParser:{}};function matrix_resolver_slicedToArray(arr,i){return function matrix_resolver_arrayWithHoles(arr){if(Array.isArray(arr))return arr}(arr)||function matrix_resolver_iterableToArrayLimit(arr,i){var _arr=[],_n=!0,_d=!1,_e=void 0;try{for(var _s,_i=arr[Symbol.iterator]();!(_n=(_s=_i.next()).done)&&(_arr.push(_s.value),!i||_arr.length!==i);_n=!0);}catch(err){_d=!0,_e=err}finally{try{_n||null==_i.return||_i.return()}finally{if(_d)throw _e}}return _arr}(arr,i)||function matrix_resolver_nonIterableRest(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}()}function matrix_resolver_toConsumableArray(arr){return function matrix_resolver_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);i0?leftRows[0].map(blankCellCreator):[],right:rightRows.length>0?rightRows[0].map(blankCellCreator):[]},_map2=matrix_resolver_slicedToArray([constants_LEFT,constants_RIGHT].map(function(type){return topCols.map(function(col,i){return i===topCols.length-1?headers[type]:footers[type]})}),2),topLeft=_map2[0],topRight=_map2[1];if(0===topCols.length){var _map4=matrix_resolver_slicedToArray([constants_LEFT,constants_RIGHT].map(function(type){return bottomCols.map(function(col,i){return 0===i?headers[type]:footers[type]})}),2);bottomLeft=_map4[0],bottomRight=_map4[1]}else bottomLeft=bottomCols.map(function(){return leftRows.length>0?leftRows[0].map(blankCellCreator):[]}),bottomRight=bottomCols.map(function(){return rightRows.length>0?rightRows[0].map(blankCellCreator):[]});return lifeCycleManager.notify({client:[topLeft,topRight,bottomLeft,bottomRight],action:"initialized",formalName:"facet-headers"}),{topLeft:topLeft,topRight:topRight,bottomLeft:bottomLeft,bottomRight:bottomRight}}},{key:"getMatrices",value:function getMatrices(datamodel,config,componentRegistry,encoders){return cell_creator_computeMatrices({datamodel:datamodel,componentRegistry:componentRegistry,encoders:encoders,resolver:this},config)}},{key:"store",value:function store(){return arguments.length?(this._store=arguments.length<=0?void 0:arguments[0],this):this._store}}]),MatrixResolver}();function value_matrix_defineProperties(target,props){for(var i=0;i3&&void 0!==arguments[3]?arguments[3]:{},type=firebolt.context.constructor.type(),payload=config.payload,data=firebolt.context.data(),metaData=firebolt.context.metaData(),fieldType=metaData.getData().schema[0].type,propPayload={},sourceId=firebolt.context._id;propPayload.action=action_behaviour_map_propagationBehaviourMap[action]||action,propPayload.sideEffects=propagationSideEffects[action],propPayload.sourceCanvas=firebolt.context.canvasAlias();var isMutableAction=firebolt._actions.behavioural[propPayload.action].constructor.mutates();if(null===payload.criteria)propagationData=null;else{var entrySet=selectionSet.mergedEnter,values=data.filter(function(d){return-1!==entrySet.uids.indexOf(d.id)}).map(function(d){return d.rawVal});if("step"===type||"discrete"===type&&"measure"===fieldType){var field=Object.keys(payload.criteria||{})[0];propagationData=(values=data.filter(function(d){return-1!==entrySet.uids.indexOf(d.id)}).map(function(d){return d.range})).length?metaData.select(function(fields){for(var check=!1,i=0;i=values[i][0]&&fields[field].value<=values[i][1]);i++);return check},{saveChild:!1}):null}else"gradient"===type?propagationData=getDataModelFromRange(metaData,payload.criteria):values.length?propagationData=function assembleModelFromIdentifiers(model,identifiers){var data,schema=[],fieldMap=model.getFieldsConfig();return identifiers.length?function(){for(var fields=identifiers[0],len=fields.length,i=0;i=drawingInfMeasure+offset?[axisScale.invert(drawingInfMeasure+offset-selectionBoxMeasure),axisScale.invert(drawingInfMeasure+offset)]:subjectStartPoint-offset1&&void 0!==arguments[1]?arguments[1]:{},classPrefix=context.config().classPrefix;set.mergedEnter.length||set.mergedExit.length?(classed(set.mergedExit,config.className||"".concat(classPrefix,"-legend-brighten"),!1),classed(set.mergedExit,config.className||"".concat(classPrefix,"-legend-fadeout"),!0),classed(set.mergedEnter,config.className||"".concat(classPrefix,"-legend-fadeout"),!1)):classed(set.completeSet,config.className||"".concat(classPrefix,"-legend-fadeout"),!1)},brighten:function brighten(set){var config=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},classPrefix=context.config().classPrefix;set.mergedEnter.length||set.mergedExit.length?(classed(set.mergedEnter,config.className||"".concat(classPrefix,"-legend-brighten"),!0),classed(set.mergedExit,config.className||"".concat(classPrefix,"-legend-brighten"),!1)):classed(set.completeSet,config.className||"".concat(classPrefix,"-legend-brighten"),!1)}}};function legend_highlighter_typeof(obj){return(legend_highlighter_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function legend_highlighter_defineProperties(target,props){for(var i=0;i2&&void 0!==arguments[2]?arguments[2]:{};(0,this._strategies[options.strategy||this._strategy])(selectionSet,this)}}],[{key:"formalName",value:function formalName(){return"highlighter"}}]),LegendHighlighter}(),legend_props_PROPS={config:{sanitization:function sanitization(context,value){return mergeRecursive(context._config||{},value)}},data:{},fieldName:{},legendContainer:{},measurement:{sanitization:function sanitization(context,value){var measurement=mergeRecursive(context._measurement,value);return["padding","border","margin"].forEach(function(space){measurement[space]=Math.min(measurement[space]>0?measurement[space]:0,.1*measurement.maxWidth,.1*measurement.maxHeight)}),measurement}},logicalSpace:{},metaData:{},range:{sanitization:function sanitization(context,value){return context.scale().range(value),context.resetLogicalSpace(),context.store().commit("range",value),value}},scale:{},smartTicks:{},store:{},title:{sanitization:function sanitization(context,value){return mergeRecursive(context._title||{},value)}},valueParser:{defaultValue:function defaultValue(val){return val}}},ALIGN_HORIZONTAL="horizontal",ALIGN_VERTICAL="vertical",DEFAULT_MEASUREMENT={height:30,width:30,maxWidth:1/0,maxHeight:1/0,padding:2,margin:2,border:1},LEGEND_TITLE={text:"",orientation:function orientation(pos){return"left"===pos||"right"===pos?"left":"center"}},legend_defaults_DEFAULT_CONFIG={classPrefix:"muze",borderStyle:"solid",borderColor:"rgba(0,0,0,0)",formatter:{bounds:{lower:"less than",upper:"more than"}},item:{text:{orientation:"right",width:10,formatter:function formatter(val,i,data,context){return context.valueParser()(val)}},icon:{className:"legend-icon",height:20,width:20,color:"rgba(0,0,0,.5)",type:"square"}}},defaults_ICON_MAP=function ICON_MAP(icon){return icon&&"string"==typeof icon?common_utils_getSymbol(icon):icon};function legend_helper_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}var legend_helper_getScaleInfo=function getScaleInfo(scale){var scaleType=scale.constructor.type();return{scaleType:scaleType,domain:scale.uniqueValues(),steps:scale.config().stops||1,scaleFn:SCALE_FUNCTIONS[scaleType]}},legend_helper_getInterpolatedData=function getInterpolatedData(domain,steps){for(var domainForLegend=[],interpolatedFn=common_utils_numberInterpolator()(domain[0],domain[1]),i=0;i<=steps;i++)domainForLegend[i]=interpolatedFn(i/steps);return domainForLegend},getDomainBounds=function getDomainBounds(type,scaleInfo,domainInfo){var _ref,scaleFn=scaleInfo.scaleFn,scaleType=scaleInfo.scaleType,scale=scaleInfo.scale,domain=domainInfo.domain,domainBounds=domainInfo.domainBounds,domainLeg=domainInfo.domainLeg,steps=domainInfo.steps,ele=domain["lower"===type?0:domain.length-1],step=steps["lower"===type?0:steps.length-1];return legend_helper_defineProperty(_ref={},scaleType,"size"===scaleType?scale[scaleFn](ele)*scale.getScaleFactor():scale[scaleFn](ele)),legend_helper_defineProperty(_ref,"value",domainBounds[type]),legend_helper_defineProperty(_ref,"id","lower"===type?0:domainLeg.length+2),legend_helper_defineProperty(_ref,"range",[ele,step]),_ref};function simple_legend_defineProperties(target,props){for(var i=0;i0?titleSpace.height+effPadding:0,titleWidth=titleSpace.width+effPadding,labelSpaces=this.getLabelSpaces(effPadding,align),_computeItemSpaces=function computeItemSpaces(config,measures,data){var totalHeight=0,totalWidth=0,maxItemSpaces={width:0,height:0},effPadding=measures.effPadding,titleWidth=measures.titleWidth,labelSpaces=measures.labelSpaces,titleHeight=measures.titleHeight,maxWidth=measures.maxWidth,item=config.item,align=config.align,icon=item.icon,textOrientation=item.text.orientation,itemSpaces=[],iconSpaces=[],maxIconWidth=0;return labelSpaces.forEach(function(labelSpace,i){var itemSpace={width:0,height:0},iconSpace={width:0,height:0},datum=data[i]||{};"left"===textOrientation||"right"===textOrientation?(labelSpace.width+=effPadding,iconSpace.width=(datum.size?2*Math.sqrt(datum.size/Math.PI):icon.width)+effPadding,maxIconWidth=Math.max(iconSpace.width,maxIconWidth),itemSpace.width=labelSpace.width+maxIconWidth,labelSpace.height=Math.max(labelSpace.height,icon.height)+effPadding,iconSpace.height=labelSpace.height,itemSpace.height=labelSpace.height):(labelSpace.width=Math.max(labelSpace.width,datum.size?2*Math.sqrt(datum.size/Math.PI):icon.width)+effPadding,iconSpace.width=labelSpace.width,itemSpace.width=labelSpace.width,maxIconWidth=Math.max(iconSpace.width,maxIconWidth),labelSpace.height+=effPadding,iconSpace.height=icon.height+effPadding,itemSpace.height=labelSpace.height+iconSpace.height),"horizontal"===align?totalHeight=Math.max(totalHeight,itemSpace.height):(totalHeight+=itemSpace.height,totalWidth=Math.max(totalWidth,itemSpace.width,titleWidth)),maxItemSpaces={width:Math.max(itemSpace.width,maxItemSpaces.width),height:Math.max(itemSpace.height,maxItemSpaces.height)},itemSpaces.push(itemSpace),iconSpaces.push(iconSpace)}),itemSpaces.forEach(function(itemSpace,i){if("horizontal"===align)itemSpace.height=totalHeight,iconSpaces[i].width=maxIconWidth,"left"===textOrientation||"right"===textOrientation?(labelSpaces[i].height=totalHeight,iconSpaces[i].height=totalHeight,itemSpaces[i].width=labelSpaces[i].width+maxIconWidth):(labelSpaces[i].width=maxIconWidth,itemSpaces[i].width=maxIconWidth,labelSpaces[i].width=maxIconWidth),totalWidth=Math.max(totalWidth+itemSpaces[i].width);else if(itemSpace.width=Math.max(totalWidth,maxWidth),"top"===textOrientation||"bottom"===textOrientation)labelSpaces[i].width=totalWidth,iconSpaces[i].width=totalWidth,maxIconWidth=totalWidth;else{var labelWidth=labelSpaces[i].width,newLabelWidth=maxItemSpaces.width-maxIconWidth;iconSpaces[i].width=maxIconWidth,itemSpaces[i].width=labelSpaces[i].width+maxIconWidth,labelSpaces[i].width=Math.max(labelWidth,newLabelWidth),totalWidth=Math.max(totalWidth,itemSpace.width)}}),totalWidth=Math.ceil(Math.max(totalWidth,titleWidth))+effPadding,totalHeight+=titleHeight+effPadding,{totalHeight:totalHeight=Math.ceil(totalHeight),totalWidth:totalWidth,itemSpaces:itemSpaces,iconSpaces:iconSpaces,maxItemSpaces:maxItemSpaces,maxIconWidth:maxIconWidth}}(this.config(),{effPadding:effPadding,titleWidth:titleWidth,labelSpaces:labelSpaces,titleHeight:titleHeight,maxWidth:maxWidth,maxHeight:maxHeight},this.data()),totalHeight=_computeItemSpaces.totalHeight,totalWidth=_computeItemSpaces.totalWidth,itemSpaces=_computeItemSpaces.itemSpaces,iconSpaces=_computeItemSpaces.iconSpaces,maxItemSpaces=_computeItemSpaces.maxItemSpaces,maxIconWidth=_computeItemSpaces.maxIconWidth;return this.measurement({width:Math.max(totalWidth,width)+effMargin+effBorder,height:Math.max(totalHeight,height)+effMargin+effBorder,labelSpaces:labelSpaces,iconSpaces:iconSpaces,itemSpaces:itemSpaces,maxItemSpaces:maxItemSpaces,maxIconWidth:maxIconWidth,titleSpaces:{width:Math.min(maxWidth,this.measurement().width)-effMargin-effBorder,height:titleHeight}}),this}},{key:"getTitleSpace",value:function getTitleSpace(){return this._labelManager.setStyle(renderer_utils_getSmartComputedStyle(renderer_utils_selectElement("body"),"".concat(this.config().classPrefix,"-legend-title"))),this._labelManager.getOriSize(this.title().text?this.title().text:"")}},{key:"renderTitle",value:function renderTitle(container){var _this$measurement2=this.measurement(),titleSpaces=_this$measurement2.titleSpaces,border=_this$measurement2.border,padding=_this$measurement2.padding,width=_this$measurement2.width,maxWidth=_this$measurement2.maxWidth,_this$config3=this.config(),borderStyle=_this$config3.borderStyle,borderColor=_this$config3.borderColor;return function titleCreator(container,title,measurement,config){var titleWidth=Math.min(measurement.maxWidth,measurement.width),titleContainer=makeElement(container,"table",[1],"".concat(config.classPrefix,"-legend-title")).style("width","".concat(titleWidth,"px")).style("height","".concat(measurement.height,"px")).style("border-bottom","".concat(measurement.border,"px ").concat(config.borderStyle," ").concat(config.borderColor)).style("text-align",title.orientation instanceof Function?title.orientation(config.position):title.orientation);return makeElement(titleContainer,"td",[1],"".concat(config.classPrefix,"-legend-title-text")).style("width","".concat(titleWidth,"px")).style("max-width","".concat(titleWidth,"px")).style("height","100%").style("line-height",1).style("padding","".concat(measurement.padding,"px")).text(title.text).style("overflow-x","scroll").node()}(container,this.title(),{height:titleSpaces.height,width:width,maxWidth:maxWidth,border:border,padding:padding,borderStyle:borderStyle,borderColor:borderColor},this.config())}},{key:"render",value:function render(){var marginPosition,firebolt=this.firebolt(),_this$config4=this.config(),classPrefix=_this$config4.classPrefix,borderStyle=_this$config4.borderStyle,borderColor=_this$config4.borderColor,position=_this$config4.position,_this$measurement3=this.measurement(),maxWidth=_this$measurement3.maxWidth,maxHeight=_this$measurement3.maxHeight,width=_this$measurement3.width,height=_this$measurement3.height,margin=_this$measurement3.margin,border=_this$measurement3.border,legendContainer=makeElement(renderer_utils_selectElement(this.mount()),"div",[1],"".concat(classPrefix,"-legend-box"));switch(position){case"top":marginPosition="margin-".concat("bottom");break;case"left":marginPosition="margin-".concat("right");break;case"bottom":marginPosition="margin-".concat("top");break;default:marginPosition="margin-".concat("left")}return legendContainer.classed("".concat(classPrefix,"-legend-box-").concat(this._id),!0),legendContainer.style("float","left"),legendContainer.style("width","".concat(Math.min(maxWidth,width)-2*margin,"px")).style("height","".concat(Math.min(maxHeight,height)-2*margin,"px")).style("".concat(marginPosition),"".concat(margin,"px")).style("border","".concat(border,"px ").concat(borderStyle," ").concat(borderColor)),this.legendContainer(legendContainer.node()),this.renderTitle(legendContainer),firebolt.createSelectionSet(this.data().map(function(d){return d.id})),legendContainer}},{key:"getCriteriaFromData",value:function getCriteriaFromData(data){var fieldName=this.fieldName();return"measure"===this.metaData().getData().schema[0].type?function simple_legend_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}({},fieldName,data.range):[[fieldName],[data.rawVal]]}}],[{key:"create",value:function create(dependencies){return new SimpleLegend(dependencies)}},{key:"defaultConfig",value:function defaultConfig(){return legend_defaults_DEFAULT_CONFIG}},{key:"defaultMeasurement",value:function defaultMeasurement(){return DEFAULT_MEASUREMENT}}]),SimpleLegend}();function position_config_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}var legendOrientation=(position_config_defineProperty(_legendOrientation={},"horizontal",{datasets:function datasets(data){return{row:[1],column:data}},itemContainerMeasures:function itemContainerMeasures(measurement){var itemSpaces=measurement.itemSpaces,width=measurement.width;return{row:{width:"".concat(width,"px"),padding:"".concat(0,"px")},column:{width:function width(d,i){return"".concat(itemSpaces[i].width,"px")},padding:"".concat(0,"px")}}},getStepSpacesInfo:function getStepSpacesInfo(measurement){var maxItemSpaces=measurement.maxItemSpaces;return{iconHeight:measurement.height,iconWidth:maxItemSpaces.width,stepPadding:{horizontal:!0,vertical:!1}}}}),position_config_defineProperty(_legendOrientation,"vertical",{datasets:function datasets(data){return{row:data,column:function column(d){return[d]}}},itemContainerMeasures:function itemContainerMeasures(measurement,config){var width=measurement.width,padding=config.padding;return{row:{width:"".concat(width,"px"),padding:"".concat(padding,"px")},column:{width:"".concat(width,"px"),padding:"".concat(0,"px")}}},getStepSpacesInfo:function getStepSpacesInfo(measurement){var maxItemSpaces=measurement.maxItemSpaces,width=measurement.width;return{iconHeight:maxItemSpaces.height,iconWidth:width,stepPadding:{horizontal:!1,vertical:!0}}}}),_legendOrientation),positionConfig=(position_config_defineProperty(_positionConfig={},"left",legendOrientation.vertical),position_config_defineProperty(_positionConfig,"right",legendOrientation.vertical),position_config_defineProperty(_positionConfig,"top",legendOrientation.horizontal),position_config_defineProperty(_positionConfig,"bottom",legendOrientation.horizontal),_positionConfig),alignmentMap=(position_config_defineProperty(_alignmentMap={},"left","end"),position_config_defineProperty(_alignmentMap,"right","start"),position_config_defineProperty(_alignmentMap,"top","center"),position_config_defineProperty(_alignmentMap,"bottom","center"),_alignmentMap),itemStack=(position_config_defineProperty(_itemStack={},"left",[VALUE,"shape"]),position_config_defineProperty(_itemStack,"right",["shape",VALUE]),position_config_defineProperty(_itemStack,"top",[VALUE,"shape"]),position_config_defineProperty(_itemStack,"bottom",["shape",VALUE]),_itemStack),renderer_createLegendSkeleton=function createLegendSkeleton(context,container,classPrefix,data){var gradWidth,gradHeight,maxGradHeight,maxGradWidth,measurement=context.measurement(),margin=measurement.margin,border=measurement.border,titleSpaces=measurement.titleSpaces,width=measurement.width,height=measurement.height,maxWidth=measurement.maxWidth,maxHeight=measurement.maxHeight;gradHeight=height-(titleSpaces.height+2*margin+2*border),gradWidth=width-(2*margin+2*border),maxGradHeight=maxHeight-(titleSpaces.height+2*margin+2*border),maxGradWidth=maxWidth-(2*margin+2*border);var legendBody=makeElement(container,"div",[1],"".concat(classPrefix,"-legend-body"));return legendBody.select(".".concat(classPrefix,"-legend-overflow")).remove(),maxGradWidth&&maxGradWidth4)}(shape)?shape:defaults_ICON_MAP(shape).size(size)(),makeElement(groupElement,"path",function(data){return[data]}).attr("d",pathStr)}return d[1]="circle",createShape(d,elem,"circle")}(datum,makeElement(svg,"g",[datum[1]],"".concat(classPrefix,"-legend-icon")),datum[3]?"circle":"square",iconWidth,iconHeight).attr("transform","translate(".concat(maxIconWidth/2-padding," ").concat(iconHeight/2,")")).attr("fill",datum[2]||color):makeElement(svg,"rect",[datum[1]],"".concat(classPrefix,"-legend-icon")).attr("x",0).attr("y",0).attr("width",maxIconWidth).attr("height",iconHeight).attr("fill",datum[2]||color)};function discrete_legend_typeof(obj){return(discrete_legend_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function discrete_legend_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}function discrete_legend_toConsumableArray(arr){return function discrete_legend_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);isteps[steps.length-1]&&domainForLegend.push(domain[1])):domainForLegend=legend_helper_getInterpolatedData(domain,steps-1),(domainForLegend=gradient_legend_toConsumableArray(new Set(domainForLegend)).sort(function(a,b){return a-b})).map(function(ele,i){var _ref,value=domainForLegend[i];return gradient_legend_defineProperty(_ref={},scaleType,"size"===scaleType?scale[scaleFn](ele)*scale.getScaleFactor():scale[scaleFn](Math.floor(ele))),gradient_legend_defineProperty(_ref,"value",+value.toFixed(2)),gradient_legend_defineProperty(_ref,"id",i),_ref}).filter(function(d){return null!==d.value})}},{key:"getLabelSpaces",value:function getLabelSpaces(effPadding){this.config({item:{text:{orientation:this.config().position}}});var axis=function createAxis(context){var data=context.data(),align=context.config().align,AxisCell=context._cells.AxisCell,newAxis=new continous_axis_ContinousAxis({id:"legend-".concat(context._id),orientation:align===ALIGN_VERTICAL?"right":"bottom",style:context._computedStyle,nice:!1,showAxisName:!1,tickValues:data.map(function(d){return d.value}),fixedBaseline:!1,labels:{rotation:0}},{labelManager:context._labelManager});return newAxis.domain(getGradientDomain(data)),newAxis.range([1,1]),(new AxisCell).source(newAxis).config({margin:{left:0,bottom:0,top:0,right:0}})}(this),axisSpace=axis.getLogicalSpace(),space={width:axisSpace.width-effPadding,height:axisSpace.height-effPadding},axisDomainLength=axis.source().domain().length,labelSpaces=new Array(axisDomainLength).fill(space);return this.axis(axis),labelSpaces}},{key:"getDrawingContext",value:function getDrawingContext(){return{svgContainer:this._legendGradientSvg}}},{key:"render",value:function render(){var firebolt=this.firebolt(),legendContainer=gradient_legend_get(gradient_legend_getPrototypeOf(GradientLegend.prototype),"render",this).call(this,this.mount());return function renderGradient(context,container){var gradHeight,gradWidth,_context$config2=context.config(),align=_context$config2.align,classPrefix=_context$config2.classPrefix,item=_context$config2.item,data=context.data(),_createLegendSkeleton=gradient_helper_createLegendSkeleton(container,classPrefix,data),legendContainer=_createLegendSkeleton.legendContainer,legendGradSvg=_createLegendSkeleton.legendGradSvg,legendGradCont=_createLegendSkeleton.legendGradCont,linearGradient=_createLegendSkeleton.linearGradient,legendRect=_createLegendSkeleton.legendRect,labelDim=context.axis().source().getAxisDimensions().tickDimensions,_context$measurement=context.measurement(),padding=_context$measurement.padding,margin=_context$measurement.margin,border=_context$measurement.border,titleSpaces=_context$measurement.titleSpaces,maxItemSpaces=_context$measurement.maxItemSpaces,maxHeight=_context$measurement.maxHeight,maxWidth=_context$measurement.maxWidth,height=_context$measurement.height,width=_context$measurement.width,gradientDimensions={};gradHeight=Math.floor(height-(titleSpaces.height+2*margin+2*border)),gradWidth=Math.floor(width-(2*margin+2*border)),align===ALIGN_HORIZONTAL?(gradientDimensions.height=item.icon.height,gradientDimensions.width=gradWidth-2*padding-labelDim.width/2,linearGradient.attr("x2","100%").attr("y1","0%"),legendGradCont.attr("transform","translate( ".concat(labelDim.width/2," 0)")),gradient_helper_renderAxis(context,legendContainer,gradHeight-item.icon.height-padding,gradWidth-2*padding-1),legendContainer.classed("".concat(classPrefix,"-overflow-x"),width>maxWidth),applyStyle(legendContainer,{height:"".concat(maxItemSpaces.height+border+padding,"px"),width:"".concat(Math.min(width,maxWidth),"px"),padding:"".concat(padding,"px")}),legendRect.attr("height",gradientDimensions.height),legendRect.attr("width",gradientDimensions.width-labelDim.width/2)):(gradientDimensions.height=gradHeight-2*padding-labelDim.height/2,gradientDimensions.width=item.icon.width,linearGradient.attr("x2","0%").attr("y1","100%"),legendGradCont.attr("transform","translate(0 ".concat(labelDim.height/2,")")),gradient_helper_renderAxis(context,legendContainer,gradHeight-2*padding-1,gradWidth-item.icon.width-2*padding),legendContainer.classed("".concat(classPrefix,"-overflow-y"),height>maxHeight),applyStyle(legendContainer,{height:"".concat(Math.min(height,maxHeight),"px"),width:"".concat(width,"px"),padding:"".concat(padding,"px")}),legendRect.attr("height",gradientDimensions.height-labelDim.height/2),legendRect.attr("width",gradientDimensions.width)),applyStyle(legendGradSvg,{height:"".concat(gradientDimensions.height,"px"),width:"".concat(gradientDimensions.width,"px")}),applyStyle(legendRect,{fill:"url(#linear-gradient)"}),legendGradSvg.attr("height",gradientDimensions.height),legendGradSvg.attr("width",gradientDimensions.width),context.measurement({gradientDimensions:gradientDimensions}),context._legendGradientSvg=legendGradSvg}(this,legendContainer),legendContainer.selectAll("div").style("float","left"),firebolt.mapActionsAndBehaviour(),firebolt.createSelectionSet(this.data().map(function(d){return d.id})),legendContainer}},{key:"getCriteriaFromData",value:function getCriteriaFromData(data){return[[this.fieldName()],[data.value]]}}],[{key:"create",value:function create(dependencies){return new GradientLegend(dependencies)}},{key:"type",value:function type(){return"gradient"}}]),GradientLegend}();function step_legend_typeof(obj){return(step_legend_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function step_legend_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}function step_legend_toConsumableArray(arr){return function step_legend_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);isteps[steps.length-1]&&(domainBounds.upper=["".concat(formatter.bounds.upper," ").concat(steps[steps.length-1])])):domainLeg=legend_helper_getInterpolatedData(domain,steps),domainLeg=(domainLeg=step_legend_toConsumableArray(new Set(domainLeg)).sort(function(a,b){return a-b})).map(function(ele,i){var _ref,value=null;return i0&&void 0!==arguments[0]?arguments[0]:{},registrableComponents=this._registrableComponents,mergedPolicy=mergeRecursive(mergeRecursive({},function defaultPolicy(registrableComponents){var aliases=registrableComponents.map(function(comp){return comp.alias()});return{behaviours:{"*":function _(propagationPayload){var propagationCanvas=propagationPayload.sourceCanvas;return!propagationCanvas||-1!==aliases.indexOf(propagationCanvas)}}}}(registrableComponents)),policy);return registrableComponents.forEach(function(canvas){canvas.firebolt().crossInteractionPolicy(mergedPolicy)}),this}}]),ActionModel}()),TITLE_CONFIG={position:"top",align:"left",padding:4,className:"".concat("muze","-title-container")},SUB_TITLE_CONFIG={position:"top",align:"left",padding:16,maxLines:2,className:"".concat("muze","-subtitle-container")},LAYOUT_ALIGN_LEFT="left";function canvas_local_options_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}var localOptions=(canvas_local_options_defineProperty(_localOptions={},"rows",{value:null,meta:{typeCheck:"constructor",typeExpected:"Array"}}),canvas_local_options_defineProperty(_localOptions,"columns",{value:null,meta:{typeCheck:"constructor",typeExpected:"Array"}}),canvas_local_options_defineProperty(_localOptions,"color",{value:null,meta:{typeCheck:"constructor",typeExpected:"Object",sanitization:function sanitization(config){return"string"==typeof config||null===config?{field:config}:config}}}),canvas_local_options_defineProperty(_localOptions,"shape",{value:null,meta:{typeCheck:"constructor",typeExpected:"Object",sanitization:function sanitization(config){return"string"==typeof config||null===config?{field:config}:config}}}),canvas_local_options_defineProperty(_localOptions,"size",{value:null,meta:{typeCheck:"constructor",typeExpected:"Object",sanitization:function sanitization(config){return"string"==typeof config||null===config?{field:config}:config}}}),canvas_local_options_defineProperty(_localOptions,"detail",{value:[],meta:{typeCheck:"constructor",typeExpected:"Array"}}),canvas_local_options_defineProperty(_localOptions,"layers",{value:[],meta:{typeCheck:"constructor",typeExpected:"Array"}}),canvas_local_options_defineProperty(_localOptions,"transform",{value:null,meta:{typeCheck:"constructor",typeExpected:"Object"}}),_localOptions),canvasOptions=(canvas_local_options_defineProperty(_canvasOptions={},"title",{value:[null,null],meta:{typeCheck:["constructor","constructor"],typeExpected:["Function","Object"],spreadParams:!0,sanitization:[function(title){if("string"==typeof title){var t=function t(){return title};return t._sanitized=!0,t}return title},function(titleConfig){var defConfig=mergeRecursive({},TITLE_CONFIG);return mergeRecursive(defConfig,titleConfig)}]}}),canvas_local_options_defineProperty(_canvasOptions,"subtitle",{value:[null,null],meta:{typeCheck:["constructor","constructor"],typeExpected:["Function","Object"],spreadParams:!0,sanitization:[function(subtitle){if("string"==typeof subtitle){var sub=function sub(){return subtitle};return sub._sanitized=!0,sub}return subtitle},function(subtitleConfig){var defConfig=mergeRecursive({},SUB_TITLE_CONFIG);return mergeRecursive(defConfig,subtitleConfig)}]}}),_canvasOptions);function layoutComponent_defineProperties(target,props){for(var i=0;i2&&void 0!==arguments[2]&&arguments[2],isGridComponent=arguments.length>3&&void 0!==arguments[3]&&arguments[3],cut="",componentRatioWidth=1,leftHeight=0,leftWidth=0;if(!component)return{first:definitionModel,second:definitionModel};var _component$getLogical=component.getLogicalSpace(),componentHeight=_component$getLogical.height,componentWidth=_component$getLogical.width,position=component.position();"top"===position||"bottom"===position?(cut="h",componentRatioWidth=componentHeight/definitionModel.remainingHeight(),leftHeight=definitionModel.remainingHeight()-componentHeight,leftWidth=definitionModel.remainingWidth()):(cut="v",componentRatioWidth=componentWidth/definitionModel.remainingWidth(),leftWidth=definitionModel.remainingWidth()-componentWidth,leftHeight=definitionModel.remainingHeight()),leftOvercomponentRationWidth=1-componentRatioWidth,definitionModel.cut(cut);var firstLaneConfig={host:component.name(),cut:null,ratioWeight:componentRatioWidth,preferred:!isGridComponent&&isPreferred,lanes:[]},firstLane=new DefinitionModel(firstLaneConfig);firstLane.remainingHeight(componentHeight),firstLane.remainingWidth(componentWidth);var secondLane=new DefinitionModel({host:null,cut:null,ratioWeight:leftOvercomponentRationWidth,preferred:!isGridComponent&&!isPreferred,lanes:[]});return secondLane.remainingHeight(leftHeight),secondLane.remainingWidth(leftWidth),isPreferred?definitionModel.lanes([firstLane]):"top"===position||"left"===position?definitionModel.lanes([firstLane,secondLane]):definitionModel.lanes([secondLane,firstLane]),{first:firstLane,second:secondLane}}function tree_toConsumableArray(arr){return function tree_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);i0?matrix[0]:matrix[1];return isTransposed?(joinedMatrix=matrix[0].length>0?utils_toConsumableArray(matrix[0]):[],joinedMatrix=matrix[1].length>0?[].concat(utils_toConsumableArray(joinedMatrix),utils_toConsumableArray(matrix[1])):joinedMatrix):joinedMatrix=joinedMatrix.map(function(row,rowIndex){var rowData=[];return matrix[0].length>0&&(rowData=utils_toConsumableArray(matrix[0][rowIndex])),matrix[1].length>0&&(rowData=[].concat(utils_toConsumableArray(rowData),utils_toConsumableArray(matrix[1][rowIndex]))),rowData}),joinedMatrix},utils_computeLogicalSpace=function computeLogicalSpace(){var item=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},config=arguments.length>1?arguments[1]:void 0,maxMeasures=arguments.length>2?arguments[2]:void 0,_config$isTransposed=config.isTransposed,isTransposed=void 0!==_config$isTransposed&&_config$isTransposed,unitMeasures=config.unitMeasures,_getMeasureInfo=function getMeasureInfo(isTransposed){return isTransposed?{firstMeasure:enums_constants_HEIGHT,secondMeasure:"width"}:{firstMeasure:"width",secondMeasure:enums_constants_HEIGHT}}(isTransposed),firstMeasure=_getMeasureInfo.firstMeasure,secondMeasure=_getMeasureInfo.secondMeasure,values=item.values,minMeasures=function getMinMeasures(isTransposed,unitMeasures){return isTransposed?{height:0,width:unitMeasures.width}:{height:unitMeasures.height,width:0}}(isTransposed,unitMeasures);if(values[0].key){var _logicalSpace,logicalSpace=(utils_defineProperty(_logicalSpace={},firstMeasure,0),utils_defineProperty(_logicalSpace,secondMeasure,0),_logicalSpace);return values.forEach(function(valueItem){var space=computeLogicalSpace(valueItem,config,maxMeasures);logicalSpace[firstMeasure]=Math.max(logicalSpace[firstMeasure],space[firstMeasure],minMeasures[firstMeasure]),logicalSpace[secondMeasure]+=+space[secondMeasure]}),item.space=logicalSpace,logicalSpace}return function getLogicalSpace(item,measures,minMeasures){var _ref,maxMeasure=arguments.length>3&&void 0!==arguments[3]?arguments[3]:[],firstMeasure=measures.firstMeasure,secondMeasure=measures.secondMeasure,firstMeasureValue=0,secondMeasureValue=0;return item.values.forEach(function(valueArray){var _item$space,fMeasure=0,sMeasure=0;valueArray.forEach(function(placeholder,colIndex){placeholder.setAvailableSpace();var space=placeholder.getLogicalSpace();sMeasure=Math.max(sMeasure,+space[secondMeasure],minMeasures[secondMeasure]),maxMeasure[colIndex]=Math.max(maxMeasure[colIndex]||0,space[firstMeasure]),fMeasure+=+maxMeasure[colIndex]}),secondMeasureValue+=sMeasure,firstMeasureValue=Math.max(firstMeasureValue,fMeasure),item.space=(utils_defineProperty(_item$space={},secondMeasure,Math.ceil(secondMeasureValue)),utils_defineProperty(_item$space,firstMeasure,Math.ceil(firstMeasureValue)),_item$space)}),utils_defineProperty(_ref={},secondMeasure,secondMeasureValue),utils_defineProperty(_ref,firstMeasure,firstMeasureValue),_ref}(item,{firstMeasure:firstMeasure,secondMeasure:secondMeasure},minMeasures,maxMeasures)},createMatrixEachLevel=function createMatrixEachLevel(item,isTransposed){if(item.values[0].key){var arr=[];return item.values.forEach(function(child){isTransposed?createMatrixEachLevel(child,isTransposed).forEach(function(e,i){var _arr$i;arr[i]=arr[i]||[],(_arr$i=arr[i]).push.apply(_arr$i,utils_toConsumableArray(e))}):arr.push.apply(arr,utils_toConsumableArray(createMatrixEachLevel(child,isTransposed)))}),item.matrix=arr,arr}return item.matrix=isTransposed?item.values[0].map(function(col,colIndex){return item.values.map(function(row){return row[colIndex]})}):item.values,item.matrix},extraCellsRemover=function extraCellsRemover(arr,beg,end){return arr.slice(beg,-end)},visual_matrix_props_PROPS={config:{sanitization:function sanitization(context,value){return mergeRecursive(context._config||{},value)}},maxMeasures:{},availableSpace:{},logicalSpace:{}},visual_matrix_default_config_defaultConfig={distribution:[],classPrefix:"muze",isDistributionEqual:!0,unitMeasures:{height:100,width:100,border:1},isTransposed:!1,facet:"primary",extraCellLengths:[]};function visual_matrix_defineProperties(target,props){for(var i=0;i1&&void 0!==arguments[1]?arguments[1]:{};!function visual_matrix_classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}(this,VisualMatrix),this._lastLevelKey=0,this._primaryMatrix=matrix[0]||[],this._secondaryMatrix=matrix[1]||[],this._maxMeasures=[],this._availableSpace={},generateGetterSetters(this,visual_matrix_props_PROPS);var defCon=Object.assign({},this.constructor.defaultConfig());this.config(mergeRecursive(defCon,config)),this._layoutMatrix=combineMatrices([matrix[0]||[],matrix[1]||[]],this.config())}return function visual_matrix_createClass(Constructor,protoProps,staticProps){return protoProps&&visual_matrix_defineProperties(Constructor.prototype,protoProps),staticProps&&visual_matrix_defineProperties(Constructor,staticProps),Constructor}(VisualMatrix,[{key:"computeLogicalSpace",value:function computeLogicalSpace(){throw new Error(ERROR_MSG.INTERFACE_IMPL)}},{key:"computeViewableSpaces",value:function computeViewableSpaces(){throw new Error(ERROR_MSG.INTERFACE_IMPL)}},{key:"removeExtraCells",value:function removeExtraCells(){throw new Error(ERROR_MSG.INTERFACE_IMPL)}},{key:"getPriorityDistribution",value:function getPriorityDistribution(){throw new Error(ERROR_MSG.INTERFACE_IMPL)}},{key:"calculateDepth",value:function calculateDepth(){throw new Error(ERROR_MSG.INTERFACE_IMPL)}},{key:"redistributeSpaces",value:function redistributeSpaces(){throw new Error(ERROR_MSG.INTERFACE_IMPL)}},{key:"redistributeViewSpaces",value:function redistributeViewSpaces(){throw new Error(ERROR_MSG.INTERFACE_IMPL)}},{key:"getCellDimensions",value:function getCellDimensions(){throw new Error(ERROR_MSG.INTERFACE_IMPL)}},{key:"primaryMatrix",value:function primaryMatrix(){return arguments.length?this:this._primaryMatrix}},{key:"secondaryMatrix",value:function secondaryMatrix(){return arguments.length?this:this._secondaryMatrix}},{key:"tree",value:function tree(){return arguments.length?this:this._tree}},{key:"createTree",value:function createTree(){var _createTree2=function createTree(context){var matrixTree={},lastLevelKey=0,facet="primary",nestFn=utils_nest(),keys=[],layoutMatrix=context._layoutMatrix,primaryMatrix=context.primaryMatrix(),secondaryMatrix=context.secondaryMatrix(),_context$config=context.config(),isTransposed=_context$config.isTransposed,breakPage=_context$config.breakPage;if(isTransposed){if(facet=0===primaryMatrix.length?"primary":0===secondaryMatrix.length?"secondary":primaryMatrix.length>=secondaryMatrix.length?"primary":"secondary",primaryMatrix.length>0){for(var _i2=0;_i20){for(var primaryMatrixLength=primaryMatrix.length,_i3=secondaryMatrix.length-1;_i3>0;_i3--)keys.push(_i3+primaryMatrixLength);keys.push(primaryMatrixLength),"primary"===facet&&(lastLevelKey=primaryMatrixLength)}var newMatrix;keys.forEach(function(key){var counter=-1;return nestFn.key(function(d){return counter++,"".concat(d[key].valueOf(),"-").concat(findInPage(counter,breakPage))})}),newMatrix=layoutMatrix[0].map(function(col,colIndex){return layoutMatrix.map(function(row){return row[colIndex]})}),matrixTree=nestFn.entries(newMatrix)}else{if(facet=0===primaryMatrix.length?"primary":0===secondaryMatrix.length?"secondary":primaryMatrix.length>=secondaryMatrix.length?"primary":"secondary",primaryMatrix.length>0){for(var i=0;i0){for(var keyLength=primaryMatrix.length>0?primaryMatrix[0].length:0,_i=secondaryMatrix[0].length-1;_i>0;_i--)keys.push(_i+keyLength);keys.push(keyLength),"primary"===facet&&(lastLevelKey=keyLength)}else lastLevelKey=primaryMatrix.length>0?primaryMatrix[0].length-1:0;keys.forEach(function(key){var counter=-1;return nestFn.key(function(d){return counter++,"".concat(d[key].valueOf(),"-").concat(findInPage(counter,breakPage))})}),matrixTree=nestFn.entries(layoutMatrix)}return{tree:matrixTree,lastLevelKey:lastLevelKey}}(this),tree=_createTree2.tree,lastLevelKey=_createTree2.lastLevelKey;return this._lastLevelKey=lastLevelKey,tree}},{key:"getLogicalSpace",value:function getLogicalSpace(){return this.logicalSpace()}},{key:"setAvailableSpace",value:function setAvailableSpace(width,height){this.availableSpace({width:width,height:height});var tree=this.tree(),heightMeasures=this.populateMaxMeasures(enums_constants_HEIGHT,tree),widthMeasures=this.populateMaxMeasures("width",tree),depth=this.calculateDepth(widthMeasures,heightMeasures);return this.viewableMatrix=this.createViewPortMatrix(depth),this.viewableMeasures=this.redistributeSpaces(width,height),this}},{key:"populateMaxMeasures",value:function populateMaxMeasures(type,matrixTree){var _this=this,depth=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0,measures=arguments.length>3&&void 0!==arguments[3]?arguments[3]:[];if(measures[depth]=Math.max(measures[depth]||0,matrixTree.space[type]),matrixTree.values){var childDepth=depth+1;matrixTree.values.forEach(function(child){child.space&&(measures=_this.populateMaxMeasures(type,child,childDepth,measures))})}return measures}},{key:"getViewableSpaces",value:function getViewableSpaces(){return this.viewableMeasures}},{key:"getViewableMatrices",value:function getViewableMatrices(){return this.viewableMatrix}},{key:"createViewPortMatrix",value:function createViewPortMatrix(depth){var arr=[];return function createMatrixInstances(){var arr=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],depth=arguments.length>1?arguments[1]:void 0,matrixInfo=arguments.length>2?arguments[2]:void 0,layout=arguments.length>3?arguments[3]:void 0,breakPointer=layout._breakPointer,isTransposed=layout.config().isTransposed,tree=matrixInfo.tree,layoutMatrix=matrixInfo.layoutMatrix;if(0===depth){var brokenMatrix=function breakMatrix(matrix,isTransposed,breakPointer){var primaryMatrix=[],secondaryMatrix=[];return isTransposed?matrix.forEach(function(row,rowIndex){rowIndex>=breakPointer?secondaryMatrix.push(row):primaryMatrix.push(row)}):matrix.forEach(function(row,rowIndex){row.forEach(function(column,columnIndex){columnIndex>=breakPointer?(secondaryMatrix[rowIndex]=secondaryMatrix[rowIndex]||[],secondaryMatrix[rowIndex].push(column)):(primaryMatrix[rowIndex]=primaryMatrix[rowIndex]||[],primaryMatrix[rowIndex].push(column))})}),[primaryMatrix,secondaryMatrix]}(tree.matrix,isTransposed,breakPointer);return arr.push({matrix:tree.matrix,primaryMatrix:brokenMatrix[0],secondaryMatrix:brokenMatrix[1],space:tree.space}),arr}var nextLevel=depth-1;return tree.values.forEach(function(e){createMatrixInstances(arr,nextLevel,{tree:e,layoutMatrix:layoutMatrix},layout)}),arr}(arr,depth,this.removeExtraCells(),this),arr}}],[{key:"defaultConfig",value:function defaultConfig(){return visual_matrix_default_config_defaultConfig}}]),VisualMatrix}();function row_matrix_typeof(obj){return(row_matrix_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function row_matrix_defineProperties(target,props){for(var i=0;i1&&void 0!==arguments[1]?arguments[1]:{};return function row_matrix_classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}(this,RowVisualMatrix),(_this=row_matrix_possibleConstructorReturn(this,row_matrix_getPrototypeOf(RowVisualMatrix).call(this,matrix,config)))._breakPointer=matrix[0].length>0?matrix[0][0].length:0,_this._layoutMatrix=combineMatrices([matrix[0]||[],matrix[1]||[]],_this.config()),_this._tree={key:ROW_ROOT,values:_this.createTree()},_this._logicalSpace=_this.computeLogicalSpace(),_this}return function row_matrix_inherits(subClass,superClass){if("function"!=typeof superClass&&null!==superClass)throw new TypeError("Super expression must either be null or a function");subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:!0,configurable:!0}}),superClass&&row_matrix_setPrototypeOf(subClass,superClass)}(RowVisualMatrix,visual_matrix_VisualMatrix),function row_matrix_createClass(Constructor,protoProps,staticProps){return protoProps&&row_matrix_defineProperties(Constructor.prototype,protoProps),staticProps&&row_matrix_defineProperties(Constructor,staticProps),Constructor}(RowVisualMatrix,[{key:"computeLogicalSpace",value:function computeLogicalSpace(){var matrixTree=this.tree();return createMatrixEachLevel(matrixTree,!1),utils_computeLogicalSpace(matrixTree,this.config(),this.maxMeasures())}},{key:"computeViewableSpaces",value:function computeViewableSpaces(measures){var _this2=this,maxHeights=measures.maxHeights,maxWidths=measures.maxWidths,height=measures.height;return this.viewableMatrix.map(function(matrixInst,i){var cellDimOptions={matrixInst:matrixInst,maxWidths:maxWidths,maxHeights:maxHeights,matrixIndex:i},_this2$getCellDimensi=_this2.getCellDimensions(cellDimOptions),widths=_this2$getCellDimensi.widths,rowHeights=_this2$getCellDimensi.rowHeights,columnWidths=_this2$getCellDimensi.columnWidths,heightMeasures=[height,height],columnMeasures=widths;return{rowHeights:{primary:rowHeights[0],secondary:rowHeights[1]},columnWidths:{primary:columnWidths[0],secondary:columnWidths[1]},height:{primary:heightMeasures[0],secondary:heightMeasures[1]},width:{primary:columnMeasures[0],secondary:columnMeasures[1]}}})}},{key:"removeExtraCells",value:function removeExtraCells(){var _this$config=this.config(),isTransposed=_this$config.isTransposed,extraCellLengths=_this$config.extraCellLengths,matrix=this._layoutMatrix,tree=mergeRecursive({},this.tree()),begCellLen=extraCellLengths[0],endCellLen=extraCellLengths[1]||Number.NEGATIVE_INFINITY,layoutMatrix=isTransposed?matrix.slice(0).map(function(e){return extraCellsRemover(e,begCellLen,endCellLen)}):extraCellsRemover(matrix,begCellLen,endCellLen);return tree.values=extraCellsRemover(tree.values,begCellLen,endCellLen),tree.matrix=extraCellsRemover(tree.matrix,begCellLen,endCellLen),{tree:tree,layoutMatrix:layoutMatrix}}},{key:"getPriorityDistribution",value:function getPriorityDistribution(measures){var remainaingAvailWidth,remainaingWidth,cWidths=[],conditions=[],maxPrioritySpace=0,matrix=measures.matrix,availableWidth=measures.width,maxWidths=measures.maxMeasures,currentWidth=measures.maxWidth,height=measures.height,priority=this.config().priority,primaryMatrixLength=this.primaryMatrix().length?this.primaryMatrix()[0].length:0,dist=[];remainaingAvailWidth=availableWidth,remainaingWidth=currentWidth,(conditions=2===priority?[primaryMatrixLength-1,primaryMatrixLength]:0===priority?[primaryMatrixLength-1]:[primaryMatrixLength]).forEach(function(i){dist[i]=maxWidths[i],maxPrioritySpace+=maxWidths[i],remainaingAvailWidth-=dist[i],remainaingWidth-=dist[i]}),matrix[0].forEach(function(e,i){-1===conditions.indexOf(i)&&(dist[i]=remainaingAvailWidth*(maxWidths[i]/remainaingWidth))}),matrix.forEach(function(row){return row.forEach(function(col,cIdx){-1===conditions.indexOf(cIdx)?(col.setAvailableSpace(dist[cIdx],height),cWidths[cIdx]=Math.max(cWidths[cIdx]||0,Math.floor(col.getLogicalSpace().width))):cWidths[cIdx]=0})});var prioritySpace=availableWidth-cWidths.reduce(function(t,n){return t+n});return prioritySpace<0?cWidths=cWidths.map(function(){return 0}):conditions.forEach(function(i){cWidths[i]=Math.floor(prioritySpace*(dist[i]/maxPrioritySpace||1))}),cWidths}},{key:"calculateDepth",value:function calculateDepth(widthMeasures,heightMeasures){var i,height=this.availableSpace().height;for(i=0;i0?logicalWidths:maxMeasures.map(function(){return 0}),rHeights=function getDistributedHeight(context){var heightWithoutGutter,distSum=0,gutterSum=0,isTransposed=context.isTransposed,distribution=context.distribution,availableHeight=context.availableHeight,height=context.height,isDistributionEqual=context.isDistributionEqual,gutter=context.gutter,matrix=context.matrix,cIdx=context.cIdx;distribution&&void 0!==distribution[0]&&(distSum=distribution.reduce(function(t,n){return t+=n})),gutter&&void 0!==gutter[0]&&(gutterSum=gutter.reduce(function(t,n){return t+=n})),heightWithoutGutter=availableHeight-Math.floor(availableHeight*gutterSum);var colLen=matrix.length;return matrix.map(function(row,rIdx){var space=row[cIdx].getLogicalSpace().height,distHeight=space+space/height*(heightWithoutGutter-height);return isTransposed||(distribution.length>0&&colLen===distribution.length?distHeight=heightWithoutGutter*distribution[rIdx]/distSum:(isDistributionEqual||0===context.height)&&(distHeight=heightWithoutGutter/colLen)),Math.floor(distHeight)})}({matrix:matrix,cIdx:this._lastLevelKey,height:mHeight,availableHeight:height,isDistributionEqual:isDistributionEqual,distribution:distribution,isTransposed:isTransposed,gutter:gutter}),maxWidths.length>0&&(cWidths=cWidths.map(function(e,i){return Math.max(e,maxWidths[0][i]||0)})),maxWidths.push(cWidths);for(var x=0;x=breakPointer&&(columnWidths[1][cIdx-breakPointer]=colWidth,widths[1]=(widths[1]||0)+colWidth),cIdx===_this4._lastLevelKey&&(rowHeights[0][rIdx]=colHeight,rowHeights[1][rIdx]=colHeight)})}),{heights:[0,0],widths:widths,rowHeights:rowHeights,columnWidths:columnWidths}}}]),RowVisualMatrix}();function column_matrix_typeof(obj){return(column_matrix_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function column_matrix_defineProperties(target,props){for(var i=0;i1&&void 0!==arguments[1]?arguments[1]:{};return function column_matrix_classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}(this,ColumnVisualMatrix),(_this=column_matrix_possibleConstructorReturn(this,column_matrix_getPrototypeOf(ColumnVisualMatrix).call(this,matrix,config)))._breakPointer=matrix[0].length,_this._tree={key:COLUMN_ROOT,values:_this.createTree()},_this._logicalSpace=_this.computeLogicalSpace(),_this}return function column_matrix_inherits(subClass,superClass){if("function"!=typeof superClass&&null!==superClass)throw new TypeError("Super expression must either be null or a function");subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:!0,configurable:!0}}),superClass&&column_matrix_setPrototypeOf(subClass,superClass)}(ColumnVisualMatrix,visual_matrix_VisualMatrix),function column_matrix_createClass(Constructor,protoProps,staticProps){return protoProps&&column_matrix_defineProperties(Constructor.prototype,protoProps),staticProps&&column_matrix_defineProperties(Constructor,staticProps),Constructor}(ColumnVisualMatrix,[{key:"computeLogicalSpace",value:function computeLogicalSpace(){var matrixTree=this.tree();return createMatrixEachLevel(matrixTree,!0),utils_computeLogicalSpace(matrixTree,this.config(),this.maxMeasures())}},{key:"computeViewableSpaces",value:function computeViewableSpaces(measures){var _this2=this,maxHeights=measures.maxHeights,maxWidths=measures.maxWidths,height=measures.height,width=measures.width;return this.viewableMatrix.map(function(matrixInst,i){var cellDimOptions={matrixInst:matrixInst,maxWidths:maxWidths,maxHeights:maxHeights,matrixIndex:i,height:height},_this2$getCellDimensi=_this2.getCellDimensions(cellDimOptions),heights=_this2$getCellDimensi.heights,rowHeights=_this2$getCellDimensi.rowHeights,columnWidths=_this2$getCellDimensi.columnWidths,heightMeasures=heights,columnMeasures=[width,width];return{rowHeights:{primary:rowHeights[0],secondary:rowHeights[1]},columnWidths:{primary:columnWidths[0],secondary:columnWidths[1]},height:{primary:heightMeasures[0],secondary:heightMeasures[1]},width:{primary:columnMeasures[0],secondary:columnMeasures[1]}}})}},{key:"removeExtraCells",value:function removeExtraCells(){var _this$config=this.config(),isTransposed=_this$config.isTransposed,extraCellLengths=_this$config.extraCellLengths,matrix=this._layoutMatrix,tree=mergeRecursive({},this.tree()),begCellLen=extraCellLengths[0],endCellLen=extraCellLengths[1]||Number.NEGATIVE_INFINITY,layoutMatrix=isTransposed?matrix.slice(0).map(function(e){return extraCellsRemover(e,begCellLen,endCellLen)}):extraCellsRemover(matrix,begCellLen,endCellLen);return tree.values=extraCellsRemover(tree.values,begCellLen,endCellLen),tree.matrix=tree.matrix.map(function(e){return extraCellsRemover(e,begCellLen,endCellLen)}),{tree:tree,layoutMatrix:layoutMatrix}}},{key:"getPriorityDistribution",value:function getPriorityDistribution(measures){var height=measures.height,maxHeights=measures.maxHeights,remainaingHeight=height,heightDist=[],conditions=[],divider=2,priority=this.config().priority,primaryMatrixLength=this.primaryMatrix().length;return 2===priority?(conditions=[primaryMatrixLength-1,primaryMatrixLength],divider=2):(conditions=0===priority?[primaryMatrixLength-1]:[primaryMatrixLength],divider=1),maxHeights.forEach(function(e,i){-1===conditions.indexOf(i)&&(heightDist[i]=e,remainaingHeight-=e)}),remainaingHeight<0?heightDist=heightDist.map(function(){return 0}):conditions.forEach(function(e){remainaingHeight/divider0)distWidth=availableWidth*distribution[colIndex]/distSum;else if(isDistributionEqual||0===width){var rowLen=row.length;distWidth=availableWidth/rowLen}return Math.floor(distWidth)})}({row:matrix[this._lastLevelKey],width:mWidth,availableWidth:width},this.config());matrix.forEach(function(row,rIdx){return row.forEach(function(col,cIdx){var oldLogicalSpace=col.getLogicalSpace();col.setAvailableSpace(cWidths[cIdx]-borderWidth,oldLogicalSpace.height),rHeights[rIdx]=Math.max(rHeights[rIdx]||0,Math.floor(col.getLogicalSpace().height))})}),maxHeights.length>0&&(rHeights=rHeights.map(function(e,i){return Math.max(e,maxHeights[0][i])})),maxHeights.push(rHeights);for(var x=0;x=breakPointer&&(rowHeights[1][rIdx-breakPointer]=colHeight,heights[1]=(heights[1]||0)+colHeight),rIdx===_this4._lastLevelKey&&(columnWidths[0][cIdx]=colWidth,columnWidths[1][cIdx]=colWidth)})}),{heights:heights,widths:[0,0],rowHeights:rowHeights,columnWidths:columnWidths}}}]),ColumnVisualMatrix}();function layout_helper_toConsumableArray(arr){return function layout_helper_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);imaxMeasure&&layout.scrollInfo(computations_defineProperty({},scrollType,!0)),Math.max(maxMeasure,actualMeasure)}}(layout,paginationDetailsMap[matrixType],relatedMaxMeasure,buffer)},computations_getMatrixHeightDetails=function getMatrixHeightDetails(layout,columnMatrixWidth){var height=layout.measurement().height,buffer=layout.config().buffer,_getHeightRequiredByC=function getHeightRequiredByColMatrix(layout,columnMatrixWidth){var height=layout.measurement().height,columnMatrix=layout.columnMatrix(),maxColumnMatrixHeight=Math.min(columnMatrix.getLogicalSpace().height,height/2);columnMatrix.setAvailableSpace(columnMatrixWidth,maxColumnMatrixHeight);var columnViewSpace=columnMatrix.getViewableSpaces()[layout.config().columnPointer];return{columnMatrixHeight:columnViewSpace.height.primary+columnViewSpace.height.secondary,maxColumnMatrixHeight:maxColumnMatrixHeight}}(layout,columnMatrixWidth),columnMatrixHeight=_getHeightRequiredByC.columnMatrixHeight,maxColumnMatrixHeight=_getHeightRequiredByC.maxColumnMatrixHeight,maxHeightAvailableForRowMatrix=height-Math.min(maxColumnMatrixHeight,columnMatrixHeight);return{columnMatrixHeight:columnMatrixHeight,maxColumnMatrixHeight:maxColumnMatrixHeight,rowMatrixHeight:paginationMeasureGetter(layout,"row",maxHeightAvailableForRowMatrix,buffer),maxHeightAvailableForRowMatrix:maxHeightAvailableForRowMatrix}},bufferCondition={isScroll:!0,pagination:"scroll"},computations_getActualBufferFromConfig=function getActualBufferFromConfig(layout){var buffer=layout.config().buffer,_map2=computations_slicedToArray([enums_constants_HORIZONTAL,enums_constants_VERTICAL].map(function(type){return function getBufferFromCondition(layout,type){var scrollInfo=layout.scrollInfo(),currentBufferType={pagination:layout.config().pagination,isScroll:scrollInfo[type]};return Object.keys(bufferCondition).every(function(e){return bufferCondition[e]===currentBufferType[e]})}(layout,type)?buffer:0}),2);return{horizontalBuffer:_map2[0],verticalBuffer:_map2[1]}},computations_computeLayoutMeasurements=function computeLayoutMeasurements(layout){var rowMatrix=layout.rowMatrix(),columnMatrix=layout.columnMatrix(),_getMatrixWidthDetail=function getMatrixWidthDetails(layout){var rowMatrix=layout.rowMatrix(),width=layout.measurement().width,_layout$config3=layout.config(),border=_layout$config3.border,buffer=_layout$config3.buffer,borderWidth=border.width,rowMatrixWidth=getMatrixMeasurement(rowMatrix,"width"),maxRowMatrixWidth=Math.min(rowMatrixWidth+buffer,width/2),maxWidthAvailableForColumnMatrix=width-maxRowMatrixWidth-borderWidth;return{rowMatrixWidth:rowMatrixWidth,maxRowMatrixWidth:maxRowMatrixWidth,columnMatrixWidth:paginationMeasureGetter(layout,"column",maxWidthAvailableForColumnMatrix,0),maxWidthAvailableForColumnMatrix:maxWidthAvailableForColumnMatrix}}(layout),rowMatrixWidth=_getMatrixWidthDetail.rowMatrixWidth,maxRowMatrixWidth=_getMatrixWidthDetail.maxRowMatrixWidth,maxWidthAvailableForColumnMatrix=_getMatrixWidthDetail.maxWidthAvailableForColumnMatrix,columnMatrixWidth=_getMatrixWidthDetail.columnMatrixWidth,_getMatrixHeightDetai=computations_getMatrixHeightDetails(layout,columnMatrixWidth),columnMatrixHeight=_getMatrixHeightDetai.columnMatrixHeight,rowMatrixHeight=_getMatrixHeightDetai.rowMatrixHeight,maxHeightAvailableForRowMatrix=_getMatrixHeightDetai.maxHeightAvailableForRowMatrix,_getActualBufferFromC=computations_getActualBufferFromConfig(layout),horizontalBuffer=_getActualBufferFromC.horizontalBuffer,verticalBuffer=_getActualBufferFromC.verticalBuffer;rowMatrix.setAvailableSpace(maxRowMatrixWidth-verticalBuffer,rowMatrixHeight-horizontalBuffer);var rowViewableSpaces=rowMatrix.getViewableSpaces(),columnViewableSpaces=columnMatrix.getViewableSpaces();return setViewSpaces(layout,"row",rowViewableSpaces),setViewSpaces(layout,"column",columnViewableSpaces),function setValueMatrixMeasurements(layout,rowViewableSpaces,columnViewableSpaces){var _ref,_ref2,_ref3,_ref4,_ref5,centerMatrix=layout.centerMatrix(),border=layout.config().border,matrices=layout.matrices(),top=matrices.top,bottom=matrices.bottom,borderWidth=border.width,rowHeights=(_ref=[]).concat.apply(_ref,computations_toConsumableArray(rowViewableSpaces.map(function(e){return e.rowHeights.primary}))),rowWidthsPrimary=(_ref2=[]).concat.apply(_ref2,computations_toConsumableArray(rowViewableSpaces.map(function(e){return e.columnWidths.primary}))),rowWidthsSecondary=(_ref3=[]).concat.apply(_ref3,computations_toConsumableArray(rowViewableSpaces.map(function(e){return e.columnWidths.secondary}))),columnWidths=(_ref4=[]).concat.apply(_ref4,computations_toConsumableArray(columnViewableSpaces.map(function(e){return e.columnWidths.primary}))),columnHeightsPrimary=columnViewableSpaces[0].rowHeights.primary,columnHeightsSecondary=(_ref5=[]).concat.apply(_ref5,computations_toConsumableArray(columnViewableSpaces.map(function(e){return e.rowHeights.secondary})));centerMatrix.forEach(function(matrix,rIdx){matrix.forEach(function(placeholder,cIdx){placeholder.setAvailableSpace(columnWidths[cIdx]-borderWidth,rowHeights[rIdx]-borderWidth)})}),computations_setAvailableSpace(top[0],rowWidthsPrimary,columnHeightsPrimary),computations_setAvailableSpace(top[2],rowWidthsSecondary,columnHeightsPrimary),computations_setAvailableSpace(bottom[0],rowWidthsPrimary,columnHeightsSecondary),computations_setAvailableSpace(bottom[2],rowWidthsSecondary,columnHeightsSecondary)}(layout,rowViewableSpaces,columnViewableSpaces),{rowMatrixHeight:rowMatrixHeight-horizontalBuffer,rowMatrixWidth:rowMatrixWidth-verticalBuffer,maxHeightAvailableForRowMatrix:maxHeightAvailableForRowMatrix-horizontalBuffer,columnMatrixHeight:columnMatrixHeight,columnMatrixWidth:columnMatrixWidth,maxWidthAvailableForColumnMatrix:maxWidthAvailableForColumnMatrix}},measureSum=function measureSum(measureArr){return measureArr.reduce(function(total,measure){return total+measure},0)};function layout_typeof(obj){return(layout_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function layout_defineProperties(target,props){for(var i=0;i0&&(leftMatrix=[].concat(layout_helper_toConsumableArray(topLeft),layout_helper_toConsumableArray(leftRows),layout_helper_toConsumableArray(bottomLeft))),rightRows.length>0&&(rightMatrix=[].concat(layout_helper_toConsumableArray(topRight),layout_helper_toConsumableArray(rightRows),layout_helper_toConsumableArray(bottomRight))),topColumns.length>0&&topColumns[0].length>0&&(topMatrix=topColumns.map(function(d,i){return[].concat(layout_helper_toConsumableArray(topLeft[i]),layout_helper_toConsumableArray(d),layout_helper_toConsumableArray(topRight[i]))})),bottomColumns.length>0&&bottomColumns[0].length>0&&(bottomMatrix=bottomColumns.map(function(d,i){return[].concat(layout_helper_toConsumableArray(bottomLeft[i]),layout_helper_toConsumableArray(d),layout_helper_toConsumableArray(bottomRight[i]))})),context.rowMatrix(new row_matrix_RowVisualMatrix([leftMatrix,rightMatrix],{isDistributionEqual:isRowSizeEqual,distribution:distribution.rows,gutter:gutterSpace.rows,unitMeasures:{width:minUnitWidth,height:minUnitHeight,border:border.width},priority:priority.row,breakPage:breakPage.rows.map(function(e){return e+Math.max(topLeft.length,topRight.length)}),extraCellLengths:[topLeft.length,bottomLeft.length]})),begColCells=topLeft.length>0?topLeft[0].length:bottomLeft.length>0?bottomLeft[0].length:0,endColCells=topRight.length>0?topRight[0].length:bottomRight.length>0?bottomRight[0].length:0,context.columnMatrix(new column_matrix_ColumnVisualMatrix([topMatrix,bottomMatrix],{isDistributionEqual:isColumnSizeEqual,distribution:distribution.columns,gutter:gutterSpace.columns,isTransposed:!0,unitMeasures:{width:minUnitWidth,height:minUnitHeight,border:border.width},priority:priority.col,breakPage:breakPage.columns,extraCellLengths:[begColCells,endColCells]})),context.centerMatrix(valueMatrix),matrices}(this,_matrices),this):layout_get(layout_getPrototypeOf(GridLayout.prototype),"matrices",this).call(this,_matrices)}},{key:"triggerReflow",value:function triggerReflow(){this.scrollInfo({horizontal:!1,vertical:!1});var _computeLayoutMeasure=computations_computeLayoutMeasurements(this),maxHeightAvailableForRowMatrix=_computeLayoutMeasure.maxHeightAvailableForRowMatrix,maxWidthAvailableForColumnMatrix=_computeLayoutMeasure.maxWidthAvailableForColumnMatrix;return this.setViewInformation(maxHeightAvailableForRowMatrix,maxWidthAvailableForColumnMatrix),this}},{key:"gotoPage",value:function gotoPage(type,pageNumber){var pageType=type.toLowerCase(),totalPages=this.viewInfo().viewMatricesInfo["".concat(pageType,"Pages")],pointer=Math.min(Math.max(1,pageNumber),totalPages);return this.config(function layout_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}({},"".concat(pageType,"Pointer"),pointer-1)),this.setViewInformation(),this.renderGrid(),this}},{key:"pages",value:function pages(type){var viewMatricesInfo=this.viewInfo().viewMatricesInfo,pageType=type.toLowerCase();return{totalPages:viewMatricesInfo["".concat(pageType,"Pages")],currentPage:this.config()["".concat(pageType,"Pointer")]+1}}},{key:"viewInfo",value:function viewInfo(){return arguments.length?(this._viewInfo=arguments.length<=0?void 0:arguments[0],this):this._viewInfo}},{key:"scrollInfo",value:function scrollInfo(){return arguments.length?(this._scrollInfo=mergeRecursive(this._scrollInfo,arguments.length<=0?void 0:arguments[0]),this):this._scrollInfo}},{key:"setViewInformation",value:function setViewInformation(maxRowHeight,maxColWidth){var _this$config2=this.config(),rowPointer=_this$config2.rowPointer,columnPointer=_this$config2.columnPointer,border=_this$config2.border,viewMatricesInfo=function getViewMatrices(layout,rowPointer,columnPointer){for(var rowMatrix=layout.rowMatrix(),columnMatrix=layout.columnMatrix(),centerMatrix=layout.centerMatrix(),matrices=layout.matrices(),rowMatrices=rowMatrix.getViewableMatrices(),columnMatrices=columnMatrix.getViewableMatrices(),centralMatrixPointer={row:0,column:0},i=rowPointer-1;i>=0;i--){var length=Math.max(rowMatrices[i].primaryMatrix.length,rowMatrices[i].secondaryMatrix.length);centralMatrixPointer.row+=length}for(var _i=columnPointer-1;_i>=0;_i--){var matrix=columnMatrices[_i],primaryMatrix=matrix.primaryMatrix,secondaryMatrix=matrix.secondaryMatrix,_length=Math.max(primaryMatrix[0]?primaryMatrix[0].length:0,secondaryMatrix[0]?secondaryMatrix[0].length:0);centralMatrixPointer.column+=_length}matrices.top[1]=columnMatrices[columnPointer].primaryMatrix,matrices.bottom[1]=columnMatrices[columnPointer].secondaryMatrix,matrices.center[0]=rowMatrices[rowPointer].primaryMatrix,matrices.center[2]=rowMatrices[rowPointer].secondaryMatrix;var rowMatrixLen=Math.max(matrices.center[0].length,matrices.center[2].length),columnMatrixLen=Math.max(matrices.top[1][0]?matrices.top[1][0].length:0,matrices.bottom[1][0]?matrices.bottom[1][0].length:0);return matrices.center[1]=centerMatrix.slice(centralMatrixPointer.row,centralMatrixPointer.row+rowMatrixLen).map(function(matrix){return matrix.slice(centralMatrixPointer.column,centralMatrixPointer.column+columnMatrixLen)}),{matrices:matrices,rowPages:rowMatrices.length,columnPages:columnMatrices.length}}(this,rowPointer,columnPointer),layoutDimensions=function getViewMeasurements(layout,maxRowHeight,maxColWidth){var rowMatrix=layout.rowMatrix(),columnMatrix=layout.columnMatrix(),_layout$config=layout.config(),columnPointer=_layout$config.columnPointer,rowPointer=_layout$config.rowPointer,rowSpaces=rowMatrix.getViewableSpaces()[rowPointer],colSpaces=columnMatrix.getViewableSpaces()[columnPointer],rowHeights=rowSpaces.rowHeights,rowMatrixWidth=rowSpaces.width,columnWidths=colSpaces.columnWidths,columnMatrixHeight=colSpaces.height,leftWidth=rowMatrixWidth.primary,rightWidth=rowMatrixWidth.secondary,topHeight=columnMatrixHeight.primary,bottomHeight=columnMatrixHeight.secondary,centerHeight=measureSum(rowHeights.primary),centerWidth=measureSum(columnWidths.primary),viewWidth=[leftWidth,Math.min(centerWidth,maxColWidth),rightWidth],viewHeight=[topHeight,Math.min(centerHeight,maxRowHeight),bottomHeight];return{viewWidth:viewWidth,viewHeight:viewHeight,actualCenterMeasures:{height:centerHeight,width:centerWidth},totalMeasures:{width:measureSum(viewWidth),height:measureSum(viewHeight)},unitHeights:rowHeights,unitWidths:columnWidths}}(this,maxRowHeight,maxColWidth);return layoutDimensions.border=border,this.viewInfo({viewMatricesInfo:viewMatricesInfo,layoutDimensions:layoutDimensions}),this}}],[{key:"defaultViewInfo",value:function defaultViewInfo(){return Object.assign({},{layoutDimensions:{border:this.defaultConfig().border,viewHeight:[0,0,0],viewWidth:[0,0,0]},viewMatricesInfo:{columnPages:0,rowPages:0,matrices:{top:[],center:[],bottom:[]}}})}},{key:"defaultMeasurement",value:function defaultMeasurement(){return DEFAULT_MEASUREMENTS}},{key:"defaultConfig",value:function defaultConfig(){return DEFAULT_CONFIGURATION}},{key:"create",value:function create(){return new GridLayout(null,null,this.defaultMeasurement(),this.defaultConfig())}}]),GridLayout}();function border_helper_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}var _matrixSpanGeneratorM,_spanApplierMap,borderMap=(border_helper_defineProperty(_borderMap={},"".concat("top","-").concat("left"),null),border_helper_defineProperty(_borderMap,"".concat("top","-").concat("middle"),"column"),border_helper_defineProperty(_borderMap,"".concat("top","-").concat("right"),null),border_helper_defineProperty(_borderMap,"".concat("center","-").concat("left"),"row"),border_helper_defineProperty(_borderMap,"".concat("center","-").concat("middle"),"center"),border_helper_defineProperty(_borderMap,"".concat("center","-").concat("right"),"row"),border_helper_defineProperty(_borderMap,"".concat("bottom","-").concat("left"),null),border_helper_defineProperty(_borderMap,"".concat("bottom","-").concat("middle"),"column"),border_helper_defineProperty(_borderMap,"".concat("bottom","-").concat("right"),null),_borderMap),border_helper_specificBorderApplier=function specificBorderApplier(borderTypes,showBorders,cells,borderInfo){var color=borderInfo.color,width=borderInfo.width,style=borderInfo.style,borderStyle="".concat(width,"px ").concat(style);borderTypes.forEach(function(borderType){!function applySpecificBorder(cells,color,type,style){cells.style("border-".concat(type),"".concat(style," ").concat(color))}(cells,showBorders[borderType]?color:"rgba(0,0,0,0)",borderType,borderStyle)})},border_helper_applyBorders=function applyBorders(cells,border,row,column){var borderApplierFn=function borderApplier(cells,borderInfo){var showRowBorders=borderInfo.showRowBorders,showColBorders=borderInfo.showColBorders,showValueBorders=borderInfo.showValueBorders;return{row:function row(){return border_helper_specificBorderApplier(["top","bottom"],showRowBorders,cells,borderInfo)},column:function column(){return border_helper_specificBorderApplier(["left","right"],showColBorders,cells,borderInfo)},center:function center(){return border_helper_specificBorderApplier(["left","right","top","bottom"],showValueBorders,cells,borderInfo)}}}(cells,border),borderMapVal=borderMap["".concat(ROW_MATRIX_INDEX[VIEW_INDEX[row]],"-").concat(COLUMN_MATRIX_INDEX[column])];borderMapVal&&borderApplierFn[borderMapVal]()};function span_maker_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}var orderMaker=function orderMaker(arr){return Array.from(Array(arr.length).keys())},nestByStack=function nestByStack(stack,updateArr){var optionalParams=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},order=optionalParams.order,keyFn=optionalParams.keyFn,arr=updateArr.slice(),currStack=stack.slice(),prevStack=currStack.slice();if(order=order||Array.from(Array(arr.length).keys()),keyFn=keyFn||function(v){return v},0===currStack.length){var _newArr=[];return order.forEach(function(e){_newArr.push(arr[e])}),{prevStack:prevStack,currStack:arr,arr:_newArr}}for(var arrVal="",stackVal="",newArr=[],i=order.length-1;i>=0;i--){var currElemIndex=order[i];if((arrVal+=keyFn(arr[currElemIndex]))===(stackVal+=keyFn(currStack[currElemIndex])))newArr[currElemIndex]=null;else{stackVal="";for(var j=i;j1&&(renderer_utils_selectElement(this).style("height","".concat(height*span+borderWidth*span,"px")),placeholder.setAvailableSpace(width,height*span))}),span_maker_defineProperty(_ref,"colSpan",function(){span>1&&placeholder.setAvailableSpace(width*span+borderWidth*(span-1),height),renderer_utils_selectElement(this).style("height","".concat(height,"px"))}),_ref}(span,cell.placeholder,borderWidth)[type].bind(this)(),span})},spanApplierMap=(span_maker_defineProperty(_spanApplierMap={},"".concat("top","-0"),null),span_maker_defineProperty(_spanApplierMap,"".concat("top","-1"),function _(){for(var _len=arguments.length,params=new Array(_len),_key=0;_key<_len;_key++)params[_key]=arguments[_key];return spanApplier.apply(void 0,params.concat(["colSpan"]))}),span_maker_defineProperty(_spanApplierMap,"".concat("top","-2"),null),span_maker_defineProperty(_spanApplierMap,"".concat("center","-0"),function _(){for(var _len2=arguments.length,params=new Array(_len2),_key2=0;_key2<_len2;_key2++)params[_key2]=arguments[_key2];return spanApplier.apply(void 0,params.concat(["rowSpan"]))}),span_maker_defineProperty(_spanApplierMap,"".concat("center","-1"),null),span_maker_defineProperty(_spanApplierMap,"".concat("center","-2"),function _(){for(var _len3=arguments.length,params=new Array(_len3),_key3=0;_key3<_len3;_key3++)params[_key3]=arguments[_key3];return spanApplier.apply(void 0,params.concat(["rowSpan"]))}),span_maker_defineProperty(_spanApplierMap,"".concat("bottom","-0"),null),span_maker_defineProperty(_spanApplierMap,"".concat("bottom","-1"),function _(){for(var _len4=arguments.length,params=new Array(_len4),_key4=0;_key4<_len4;_key4++)params[_key4]=arguments[_key4];return spanApplier.apply(void 0,params.concat(["colSpan"]))}),span_maker_defineProperty(_spanApplierMap,"".concat("bottom","-2"),null),_spanApplierMap);function transaction_support_defineProperties(target,props){for(var i=0;i(availWidth||0)&&maxLines&&(space.height=space.oriTextHeight*maxLines),availWidth&&availWidth":">",'"':""","'":"'","/":"/"};return"".concat(str).replace(/[&<>"'/]/g,function(match){return htmlEscapes[match]})}(rawContent()):rawContent()},createHeading=function createHeading(config,type,labelManager,prevCell){return config?function headerCreator(config,cellType,labelManager,prevCell){var margin={},content=config.content,classPrefix=config.classPrefix,maxLines=config.maxLines,cell=prevCell||new src_text_cell({type:"title"===cellType?"header":"text",className:"".concat(classPrefix,"-").concat(cellType,"-cell")},{labelManager:labelManager}).config({maxLines:maxLines}).minSpacing({width:0,height:0});return cell.source(content),cell._minTickDiff={height:0,width:0},margin=config.position===src_constants_TOP?{top:0,bottom:config.padding}:{top:config.padding,bottom:0},cell.config({margin:margin}),{height:cell.getLogicalSpace().height,cell:cell}}(config,type,labelManager,prevCell):""},legend_maker_legendInitializer=function legendInitializer(legendConfig,canvas,measurement,prevLegends){var legends=[],height=measurement.height,width=measurement.width,headerHeight=measurement.headerHeight,position=legendConfig.position,align=legendConfig.align,legendInfo=function legendCreator(canvas){var LegendCls,dataset=[],axes=canvas.getRetinalAxes();return Object.entries(axes).forEach(function(axisInfo){var scale=axisInfo[1][0],scaleType=axisInfo[0],scaleProps=canvas[scaleType]();if(scaleProps.field&&scale){var _scale$config=scale.config(),type=_scale$config.type,step=_scale$config.step,stepMapper="boolean"==typeof step&&step;LegendCls=LEGEND_TYPE_MAP["".concat(type,"-").concat(stepMapper,"-").concat(scaleType)],dataset.push({scale:scale,canvas:canvas,fieldName:scaleProps.field,LegendCls:LegendCls,scaleType:scaleType})}}),dataset}(canvas),invalidValues=canvas.config().invalidValues,parser=getValueParser(invalidValues);return legendInfo.forEach(function(dataInfo,index){var legend={},legendMeasures={},LegendCls=dataInfo.LegendCls,scale=dataInfo.scale,fieldName=dataInfo.fieldName,scaleType=dataInfo.scaleType,config=legendConfig[scaleType]||{},title=config.title||{};title.text=title.text||fieldName,config.show&&(config.position=position,config.align=align,legend=prevLegends[index]?prevLegends[index].legend:LegendCls.create({labelManager:canvas._dependencies.smartlabel,cells:{AxisCell:axis_cell,TextCell:src_text_cell}}),legendMeasures.maxHeight="vertical"===align?height-headerHeight:.2*height,legendMeasures.maxWidth="horizontal"===align?width:.2*width,legendMeasures.width=Math.min(legendMeasures.maxWidth,config.width),legendMeasures.height=Math.min(legendMeasures.maxHeight,config.height),[PADDING,BORDER,MARGIN].forEach(function(e){legendMeasures[e]=config[e]}),legend.scale(scale).valueParser(parser).title(title).fieldName(fieldName).config(config).metaData(canvas.composition().visualGroup.getGroupByData().project([fieldName])).measurement(legendMeasures).canvasAlias(canvas.alias()).setLegendMeasures(),legends.push({canvas:canvas,legend:legend,scaleType:scaleType}))}),legends};function muze_chart_component_typeof(obj){return(muze_chart_component_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function muze_chart_component_defineProperties(target,props){for(var i=0;icurrHeight?(sections++,currWidth=0,currHeight=legHeight):sections<0&§ions++,sectionComponents[sections]=sectionComponents[sections]||[],currHeight-=Math.min(leg.measurement().height,currHeight),currWidth=Math.max(Math.min(leg.measurement().width,leg.measurement().maxWidth),currWidth),sectionComponents[sections].push({legend:leg,legendHeight:legHeight,legendWidth:currWidth})});var mount=makeElement(legendMount,["div"],sectionComponents,"".concat(classPrefix,"-legend-section"));mount.classed("".concat(classPrefix,"-legend-vertical-section"),!0).style("width",function(d){return"".concat(d[0].legendWidth,"px")}),makeElement(mount,["div"],function(d){return d},"".concat(classPrefix,"-legend-components"),{},function(d){return d.legend.id()}).each(function(d){d.legend.mount(this)}).style("width",function(d){return"".concat(d.legendWidth,"px")})}else{var _mount=makeElement(legendMount,"div",[1],"".concat(classPrefix,"-legend-section"));_mount.classed("".concat(classPrefix,"-legend-horizontal-section"),!0),_mount.classed("".concat(classPrefix,"-legend-section-",0),!0).style("width","".concat(legWidth,"px")),makeElement(_mount,"div",this.components,"".concat(classPrefix,"-legend-components"),{},function(d){return d.legend.id()}).each(function(d){d.legend.mount(this)}).style("width",function(d){return"".concat(d.legend.measurement().width,"px")})}}},{key:"draw",value:function draw(container){this.renderLegend(container||document.getElementById(this.renderAt()))}},{key:"updateWrapper",value:function updateWrapper(params){return this.name(params.name),this.boundBox(params.config.measurement.legendSpace),this.setParams(params),this}},{key:"setParams",value:function setParams(params){this.components=params.component,this.params=params,this.target(params.config.target),this.position(params.config.position);var _defaultAlignmentHelp=function defaultAlignmentHelper(position){var alignment=null,alignWith="".concat(ROW_MATRIX_INDEX[1],"-").concat(COLUMN_MATRIX_INDEX[1]);switch(position){case src_constants_TOP:case src_constants_BOTTOM:alignment=HORIZONTAL_CENTER;break;case src_constants_LEFT:case src_constants_RIGHT:alignment=VERTICAL_CENTER;break;default:alignment=VERTICAL_CENTER}return{alignment:alignment,alignWith:alignWith}}(params.config.position),alignWith=_defaultAlignmentHelp.alignWith,alignment=_defaultAlignmentHelp.alignment;this.className(params.config.className),this.alignWith(params.config.alignWith||alignWith),this.alignment(params.config.alignment||alignment)}}]),LegendComponent}(),helper_d3Drag=(__webpack_require__(25),renderer_utils_getD3Drag()),arrowSizeMap={left:"width",right:"width",top:"height",bottom:"height"},getUnitPositions=function getUnitPositions(unitMeasures,totalLength,viewLength){var currentLen=0;return(unitMeasures.primary&&unitMeasures.primary.length?unitMeasures.primary:unitMeasures.secondary).map(function(e){var unitPosition=100*currentLen/(totalLength-viewLength);return currentLen+=e,unitPosition})},helper_createScrollBarArrow=function createScrollBarArrow(mount,type,config){var classPrefix=config.classPrefix,thickness=config.thickness,arrow=makeElement(mount,"div",[type],"".concat(classPrefix,"-scroll-arrow-").concat(type));return arrow.classed("".concat(classPrefix,"-scroll-arrow"),!0),arrow.style(arrowSizeMap[type],"".concat(thickness,"px")),makeElement(arrow,"div",[1],"".concat(classPrefix,"-scroll-arrow-chevron")).attr("id","".concat(classPrefix,"-scroll-arrow-chevron-").concat(type)),arrow},helper_createScrollBarRect=function createScrollBarRect(mount,config){var classPrefix=config.classPrefix,rect=makeElement(mount,"div",[1],"".concat(classPrefix,"-scroll-rect"));return{rect:rect,mover:makeElement(rect,"div",[1],"".concat(classPrefix,"-scroll-mover"))}},applyScrollMouseDownAction=function applyScrollMouseDownAction(moverRect,scrollMaker,speed){var mover=moverRect.mover,rect=moverRect.rect,_mover$node$getBoundi=mover.node().getBoundingClientRect(),x=_mover$node$getBoundi.x,y=_mover$node$getBoundi.y,_rect$node$getBoundin=rect.node().getBoundingClientRect(),rectX=_rect$node$getBoundin.x,rectY=_rect$node$getBoundin.y;scrollMaker.changeMoverPosition({x:x-rectX+speed,y:y-rectY+speed})},helper_registerListenerOnArrow=function registerListenerOnArrow(scrollMaker,moverRect,arrowType,speed){var timer="",arrow=scrollMaker._components[arrowType],isTouchDevice=hasTouch();arrow.on(isTouchDevice?"touchstart":"mousedown",function(){renderer_utils_getEvent().preventDefault(),timer=setInterval(function(){applyScrollMouseDownAction(moverRect,scrollMaker,speed)},100)}).on(isTouchDevice?"touchend":"mouseup",function(){renderer_utils_getEvent().preventDefault(),clearInterval(timer)}).on("click",function(){applyScrollMouseDownAction(moverRect,scrollMaker,speed)})},scroll_bar_maker_helper_registerListeners=function registerListeners(scrollMaker){var moverRect=scrollMaker._components.moverRect,speed=scrollMaker.config().speed;helper_registerListenerOnArrow(scrollMaker,moverRect,"prevArrow",-speed),function applyMoverDrag(scrollMaker,moverRect){var startPos={},moverStartPos=0,endPos={},mover=moverRect.mover,rectStartPos=moverRect.rect.node().getBoundingClientRect();mover.call(helper_d3Drag().on("start",function(){var event=renderer_utils_getEvent();moverStartPos=mover.node().getBoundingClientRect(),startPos={x:event.x,y:event.y}}).on("drag",function(){var event=renderer_utils_getEvent(),window=getWindow(),distanceMoved_x=(endPos={x:event.x,y:event.y}).x-startPos.x,distanceMoved_y=endPos.y-startPos.y,actualPosition={x:moverStartPos.x+distanceMoved_x-rectStartPos.x+window.pageXOffset,y:moverStartPos.y+distanceMoved_y-rectStartPos.y+window.pageYOffset};scrollMaker.changeMoverPosition(actualPosition)}))}(scrollMaker,moverRect),function applyRectClick(scrollMaker,moverRect){moverRect.rect.on("click",function(){var event=renderer_utils_getEvent();scrollMaker.emptyScrollAreaClick(event)})}(scrollMaker,moverRect),helper_registerListenerOnArrow(scrollMaker,moverRect,"nextArrow",speed)},scroll_bar_maker_props_PROPS={config:{sanitization:function sanitization(context,value){return value=mergeRecursive(context._config,value)}},manager:{},unitPositions:{},logicalSpace:{}};function scroll_maker_defineProperties(target,props){for(var i=0;i1&&void 0!==arguments[1]?arguments[1]:this.logicalSpace(),config=this.config(),scrollBarContainer=horizontal_scroll_maker_get(horizontal_scroll_maker_getPrototypeOf(HorizontalScrollMaker.prototype),"createScroll",this).call(this,mountPoint,config,dimensions).scrollBarContainer,prevArrow=helper_createScrollBarArrow(scrollBarContainer,"left",config),moverRect=helper_createScrollBarRect(scrollBarContainer,config),nextArrow=helper_createScrollBarArrow(scrollBarContainer,"right",config),mover=moverRect.mover,rect=moverRect.rect,_this$logicalSpace=this.logicalSpace(),height=_this$logicalSpace.height,width=_this$logicalSpace.width,totalLength=_this$logicalSpace.totalLength,viewLength=_this$logicalSpace.viewLength,unitWidths=_this$logicalSpace.unitWidths,scrollBarWithouArrowLength=width-2*height;rect.style("width","".concat(dimensions.width-2*height,"px")),rect.style("height","".concat(100,"%")),mover.style("width","".concat(viewLength*scrollBarWithouArrowLength/totalLength,"px")),mover.style("height","".concat(100,"%")),mover.style(src_constants_LEFT,"".concat(0,"px")),this._components={prevArrow:prevArrow,nextArrow:nextArrow,moverRect:moverRect,scrollBarContainer:scrollBarContainer},this._scrollBarWithouArrowLength=scrollBarWithouArrowLength,this.unitPositions(getUnitPositions(unitWidths,totalLength,viewLength)),this.registerListeners()}},{key:"emptyScrollAreaClick",value:function emptyScrollAreaClick(event){var _this$_components$mov=this._components.moverRect,mover=_this$_components$mov.mover,rect=_this$_components$mov.rect,speed=this.config().speed,_mover$node$getBoundi=mover.node().getBoundingClientRect(),x=_mover$node$getBoundi.x,y=_mover$node$getBoundi.y,_rect$node$getBoundin=rect.node().getBoundingClientRect(),rectX=_rect$node$getBoundin.x,rectY=_rect$node$getBoundin.y,positionAdjuster=10*speed;event.xrectStartPos.width?rectStartPos.width-moverPos.width:newPosition.x,mover.style(src_constants_LEFT,"".concat(currentPos,"px"));var movedViewLength=currentPos*totalLength/this._scrollBarWithouArrowLength;this.manager().performAttachedScrollFunction(this.constructor.type(),movedViewLength)}},{key:"scrollDeltaTo",value:function scrollDeltaTo(delta){var _this$_components$mov3=this._components.moverRect,mover=_this$_components$mov3.mover,rect=_this$_components$mov3.rect,moverPos=mover.node().getBoundingClientRect(),rectStartPos=rect.node().getBoundingClientRect();return this.changeMoverPosition({y:0,x:moverPos.x-rectStartPos.x-delta}),this}},{key:"scrollTo",value:function scrollTo(scrollPercentage){var moverPos=this._components.moverRect.mover.node().getBoundingClientRect(),movement=scrollPercentage*(this._scrollBarWithouArrowLength-moverPos.width)/100;return this.changeMoverPosition({y:0,x:movement}),this}}],[{key:"type",value:function type(){return"horizontal"}}]),HorizontalScrollMaker}(),vertical:function(_ScrollMaker){function VerticalScrollMaker(){return function vertical_scroll_maker_classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}(this,VerticalScrollMaker),vertical_scroll_maker_possibleConstructorReturn(this,vertical_scroll_maker_getPrototypeOf(VerticalScrollMaker).apply(this,arguments))}return function vertical_scroll_maker_inherits(subClass,superClass){if("function"!=typeof superClass&&null!==superClass)throw new TypeError("Super expression must either be null or a function");subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:!0,configurable:!0}}),superClass&&vertical_scroll_maker_setPrototypeOf(subClass,superClass)}(VerticalScrollMaker,scroll_maker_ScrollMaker),function vertical_scroll_maker_createClass(Constructor,protoProps,staticProps){return protoProps&&vertical_scroll_maker_defineProperties(Constructor.prototype,protoProps),staticProps&&vertical_scroll_maker_defineProperties(Constructor,staticProps),Constructor}(VerticalScrollMaker,[{key:"createScroll",value:function createScroll(mountPoint){var dimensions=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.logicalSpace(),config=this.config(),scrollBarContainer=vertical_scroll_maker_get(vertical_scroll_maker_getPrototypeOf(VerticalScrollMaker.prototype),"createScroll",this).call(this,mountPoint,dimensions).scrollBarContainer,prevArrow=helper_createScrollBarArrow(scrollBarContainer,"top",config),moverRect=helper_createScrollBarRect(scrollBarContainer,config),nextArrow=helper_createScrollBarArrow(scrollBarContainer,"bottom",config),mover=moverRect.mover,rect=moverRect.rect,_this$logicalSpace=this.logicalSpace(),height=_this$logicalSpace.height,width=_this$logicalSpace.width,totalLength=_this$logicalSpace.totalLength,viewLength=_this$logicalSpace.viewLength,unitHeights=_this$logicalSpace.unitHeights,scrollBarWithouArrowLength=height-2*width;rect.style("height","".concat(scrollBarWithouArrowLength,"px")),rect.style("width","".concat(100,"%")),mover.style("width","".concat(100,"%")),mover.style("height","".concat(viewLength*scrollBarWithouArrowLength/totalLength,"px")),mover.style(src_constants_TOP,"".concat(0,"px")),this._components={prevArrow:prevArrow,nextArrow:nextArrow,moverRect:moverRect,scrollBarContainer:scrollBarContainer},this._scrollBarWithouArrowLength=scrollBarWithouArrowLength,this.unitPositions(getUnitPositions(unitHeights,totalLength,viewLength)),this.registerListeners()}},{key:"emptyScrollAreaClick",value:function emptyScrollAreaClick(event){var _this$_components$mov=this._components.moverRect,mover=_this$_components$mov.mover,rect=_this$_components$mov.rect,speed=this.config().speed,_mover$node$getBoundi=mover.node().getBoundingClientRect(),x=_mover$node$getBoundi.x,y=_mover$node$getBoundi.y,_rect$node$getBoundin=rect.node().getBoundingClientRect(),rectX=_rect$node$getBoundin.x,rectY=_rect$node$getBoundin.y,positionAdjuster=10*speed;event.yrectStartPos.height?rectStartPos.height-moverPos.height:newPosition.y,mover.style(src_constants_TOP,"".concat(currentPos,"px"));var movedViewLength=currentPos*totalLength/this._scrollBarWithouArrowLength;this.manager().performAttachedScrollFunction(this.constructor.type(),movedViewLength)}},{key:"scrollDeltaTo",value:function scrollDeltaTo(delta){var _this$_components$mov3=this._components.moverRect,mover=_this$_components$mov3.mover,rect=_this$_components$mov3.rect,moverPos=mover.node().getBoundingClientRect(),rectStartPos=rect.node().getBoundingClientRect();return this.changeMoverPosition({y:moverPos.y-rectStartPos.y-delta,x:0}),this}},{key:"scrollTo",value:function scrollTo(scrollPercentage){var moverPos=this._components.moverRect.mover.node().getBoundingClientRect(),movement=scrollPercentage*(this._scrollBarWithouArrowLength-moverPos.height)/100;return this.changeMoverPosition({x:0,y:movement}),this}}],[{key:"type",value:function type(){return"vertical"}}]),VerticalScrollMaker}()},ScrollComponent=function(_MuzeComponent){function ScrollComponent(params){var _this;!function scroll_component_classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}(this,ScrollComponent);var ScrollMaker=scrollMakerMap[params.config.type];return params.component=new ScrollMaker,params.component.config(params.config.scrollBarComponentConfig),params.component.logicalSpace(params.dimensions),(_this=scroll_component_possibleConstructorReturn(this,scroll_component_getPrototypeOf(ScrollComponent).call(this,params.name,params.component.getLogicalSpace(),0))).setParams(params),_this}return function scroll_component_inherits(subClass,superClass){if("function"!=typeof superClass&&null!==superClass)throw new TypeError("Super expression must either be null or a function");subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:!0,configurable:!0}}),superClass&&scroll_component_setPrototypeOf(subClass,superClass)}(ScrollComponent,MuzeComponent),function scroll_component_createClass(Constructor,protoProps,staticProps){return protoProps&&scroll_component_defineProperties(Constructor.prototype,protoProps),staticProps&&scroll_component_defineProperties(Constructor,staticProps),Constructor}(ScrollComponent,[{key:"manager",value:function manager(){return arguments.length?(this.component.manager(arguments.length<=0?void 0:arguments[0]),this):this.component.manager()}},{key:"scrollDeltaTo",value:function scrollDeltaTo(delta){return this.component.scrollDeltaTo(delta),this}},{key:"scrollTo",value:function scrollTo(scrollPercentage){return this.component.scrollTo(scrollPercentage),this}},{key:"scrollToUnitIndex",value:function scrollToUnitIndex(unitIndex){var unitPositions=this.component.unitPositions(),sanitizedUnitIndex=Math.min(Math.max(0,unitIndex),unitPositions.length-1);return this.component.scrollTo(unitPositions[sanitizedUnitIndex]),this}},{key:"getScrollPositionsForUnits",value:function getScrollPositionsForUnits(){return this.component.unitPositions()}},{key:"draw",value:function draw(container){return this.component.createScroll(container||document.getElementById(this.renderAt())),this}},{key:"attachScrollAction",value:function attachScrollAction(externalAction){return this.component.attachScrollAction(externalAction),this}},{key:"detachScrollAction",value:function detachScrollAction(){return this.component.detachScrollAction(),this}},{key:"updateWrapper",value:function updateWrapper(params){return this.name(params.name),this.component.config(params.config.scrollBarComponentConfig),this.component.logicalSpace(params.dimensions),this.boundBox(this.component.getLogicalSpace()),this.setParams(params),this}},{key:"setParams",value:function setParams(params){this.component=params.component||this.component,this.params=params,this.target(params.config.target),this.position(params.config.position),this.className(params.config.className),this.alignWith(params.config.alignWith),this.alignment(params.config.alignment)}},{key:"remove",value:function remove(){this.component.remove()}}]),ScrollComponent}();function matrix_component_typeof(obj){return(matrix_component_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function matrix_component_defineProperties(target,props){for(var i=0;iMath.abs(wheelDeltaY)&&_this2.scrollBarManager().triggerScrollBarAction("horizontal",wheelDeltaX),0!==wheelDeltaY&&Math.abs(wheelDeltaX)0?heightAttr:height,minHeight),availableWidthForCanvas=Math.max(widthAttr>0?widthAttr:width,minWidth),_createHeaders=function createHeaders(context,canvasHeight,canvasWidth){var headerHeight=0,headers={},subtitle=context.subtitle(),isSubtitle=title_maker_resolveTitleSubTitleContent(subtitle[0]);return canvasHeight>=200&&canvasWidth>=200&&["title","subtitle"].forEach(function(type){var headerOptions=context[type](),content=title_maker_resolveTitleSubTitleContent(headerOptions[0]);if(content.length){var config=headerOptions[1];config.width=context.width(),config.height=context.height(),config.classPrefix=context.config().classPrefix,config.content=content,config.padding="title"!==type||isSubtitle.length?config.padding:subtitle[1].padding;var _createHeading=createHeading(config,type,context.dependencies().smartlabel,context["".concat(type,"Cell")]),height=_createHeading.height,cell=_createHeading.cell;headers["".concat(type,"Cell")]=cell,context._composition[type]=cell,headerHeight+=height}}),{headerHeight:headerHeight,headers:headers}}(context,availableHeightForCanvas,availableWidthForCanvas),headers=_createHeaders.headers,headerHeight=_createHeaders.headerHeight,legends=function createLegend(context,headerHeight,height,width){var measurement={height:height,width:width,headerHeight:headerHeight},legend=context.config().legend,show=legend.show,position=legend.position;legend.classPrefix=context.config().classPrefix;var align=position===src_constants_LEFT||position===src_constants_RIGHT?"vertical":"horizontal";return legend.show=show?"vertical"===align&&width>200||"horizontal"===align&&height>200:show,legend.align=align,legend_maker_legendInitializer(legend,context,measurement,context.legends||[])}(context,headerHeight,availableHeightForCanvas,availableWidthForCanvas);context._composition.legend={},legends.forEach(function(e){context._composition.legend[e.scaleType]=e.legend});var legendSpace=function getLegendSpace(legends,legendConfig,availableHeight,availableWidth){var legendSpace={width:0,height:0};return legends.map(function(legendInfo){return legendInfo.legend.measurement()}).forEach(function(space){var height,width;width=Math.min(space.width,space.maxWidth),height=Math.min(space.height,space.maxHeight),"horizontal"===legendConfig.align?legendSpace.width+width>availableWidth?(legendSpace.width=availableWidth,legendSpace.height+=height):(legendSpace.width+=width,legendSpace.height=Math.max(legendSpace.height,height)):legendSpace.height+height>availableHeight?(legendSpace.height=height,legendSpace.width+=width):(legendSpace.height+=height,legendSpace.width=Math.max(legendSpace.width,width))}),"horizontal"===legendConfig.align&&(legendSpace.width=availableWidth),legendSpace}(legends,legend,availableHeightForCanvas,availableWidthForCanvas),legendWidth=legendPosition===src_constants_LEFT||legendPosition===src_constants_RIGHT?legendSpace.width:0,legendHeight=legendPosition===src_constants_TOP||legendPosition===src_constants_BOTTOM?legendSpace.height:0,components={headers:headers,legends:legends,canvases:[context],rows:rows,columns:columns,values:values,cornerMatrices:visGroup.cornerMatrices()},measurement={mountSpace:{height:height,width:width},headerHeight:headerHeight,legendSpace:legendSpace,canvasWidth:availableWidthForCanvas,canvasHeight:availableHeightForCanvas,width:availableWidthForCanvas-legendWidth,height:availableHeightForCanvas-headerHeight-legendHeight,minUnitHeight:context.minUnitHeight(),minUnitWidth:context.minUnitWidth()};return{layoutConfig:layoutConfig=mergeRecursive(layoutConfig,{classPrefix:classPrefix,showHeaders:showHeaders,border:mergeRecursive(visGroup.metaData().border,context.config().border),layoutArrangement:layoutArrangement,legend:legend,buffer:scrollBar.thickness,pagination:pagination,title:titleConfig,subtitle:subtitleConfig,isColumnSizeEqual:isColumnSizeEqual,isRowSizeEqual:isRowSizeEqual,mount:mount,priority:priority}),components:components,measurement:measurement}},componentIndexes={title:0,subtitle:1,legend:2,verticalScrollBar:3,horizontalScrollBar:4,grid:5},layout_maker_renderLayout=function renderLayout(canvas,renderDetails){var layoutManager=canvas._layoutManager,gridLayout=canvas.layout(),grid=componentIndexes.grid,compWrappers=component_wrapper_maker_componentWrapperMaker(layoutManager,gridLayout,renderDetails),componentWrappers=Object.keys(componentIndexes).map(function(e){return compWrappers[e]}),gridWrapper=componentWrappers[grid];!function createScrollManager(componentWrappers,canvas){var verticalScrollBar=componentIndexes.verticalScrollBar,grid=componentIndexes.grid,horizontalScrollWrapper=componentWrappers[componentIndexes.horizontalScrollBar],verticalScrollWrapper=componentWrappers[verticalScrollBar],gridWrapper=componentWrappers[grid],scrollBarManager=new ScrollManager,scrollBarComponents={};verticalScrollWrapper&&(scrollBarComponents.vertical=verticalScrollWrapper),horizontalScrollWrapper&&(scrollBarComponents.horizontal=horizontalScrollWrapper),scrollBarManager.scrollBarComponents(scrollBarComponents).attachedComponents({grid:gridWrapper}),canvas.composition().hScrollBar=horizontalScrollWrapper,canvas.composition().vScrollBar=verticalScrollWrapper,[horizontalScrollWrapper,verticalScrollWrapper].forEach(function(wrapper){wrapper&&wrapper.manager(scrollBarManager)}),gridWrapper.scrollBarManager(scrollBarManager)}(componentWrappers,canvas),layoutManager.registerComponents(componentWrappers).compute(),gridWrapper.attachScrollListener()};function group_firebolt_typeof(obj){return(group_firebolt_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function group_firebolt_defineProperties(target,props){for(var i=0;ia.getFullYear()&&(t=""+(i-1)+r),d(t).getFullYear()},formatter:function formatter(e){var t=d(e).getFullYear().toString(),n=void 0;return t&&(n=t.length,t=t.substring(n-2,n)),t}},Y:{name:"Y",index:0,extract:function extract(){return"(\\d{4})"},parser:h.defaultNumberParser(),formatter:function formatter(e){return d(e).getFullYear().toString()}}}},h.getTokenFormalNames=function(){var e=h.getTokenDefinitions();return{HOUR:e.H,HOUR_12:e.l,AMPM_UPPERCASE:e.p,AMPM_LOWERCASE:e.P,MINUTE:e.M,SECOND:e.S,SHORT_DAY:e.a,LONG_DAY:e.A,DAY_OF_MONTH:e.e,DAY_OF_MONTH_CONSTANT_WIDTH:e.d,SHORT_MONTH:e.b,LONG_MONTH:e.B,MONTH_OF_YEAR:e.m,SHORT_YEAR:e.y,LONG_YEAR:e.Y}},h.tokenResolver=function(){var e=h.getTokenDefinitions(),t=function t(){for(var e=0,t=void 0,n=void 0,r=arguments.length;e=0;)o=e[i+1],-1!==r.indexOf(o)&&a.push({index:i,token:o});return a},h.formatAs=function(e,t){var n,r=d(e),a=h.findTokens(t),i=h.getTokenDefinitions(),o=String(t),u=h.TOKEN_PREFIX,c=void 0,f=void 0,l=void 0;for(l=0,n=a.length;l=0;d--)(f=i[d].index)+1!==s.length-1?(void 0===u&&(u=s.length),l=s.substring(f+2,u),s=s.substring(0,f+2)+RegExp.escape(l)+s.substring(u,s.length),u=f):u=f;for(d=0;d0&&e.split(",").forEach(function(e){var n=e.split("-"),r=+n[0],a=+(n[1]||n[0]);if(a>=r)for(var i=r;i<=a;i+=1)t(i)})}var R=function(){function e(e,t){for(var n=0;n3&&void 0!==arguments[3]&&arguments[3],a=arguments.length>4&&void 0!==arguments[4]?arguments[4]:U.CROSS,i=[],o=[],u=n||B,c=e.getFieldspace(),f=t.getFieldspace(),l=c.name,s=f.name,d=c.name+"."+f.name,p=H(c,f);if(l===s)throw new Error("DataModels must have different alias names");return c.fields.forEach(function(e){var t=_({},e.schema());-1===p.indexOf(t.name)||r||(t.name=c.name+"."+t.name),i.push(t)}),f.fields.forEach(function(e){var t=_({},e.schema());-1!==p.indexOf(t.name)?r||(t.name=f.name+"."+t.name,i.push(t)):i.push(t)}),D(e._rowDiffset,function(n){var d=!1,h=void 0;D(t._rowDiffset,function(v){var m=[],y={};y[l]={},y[s]={},c.fields.forEach(function(e){m.push(e.partialField.data[n]),y[l][e.name()]=e.partialField.data[n]}),f.fields.forEach(function(e){-1!==p.indexOf(e.schema().name)&&r||m.push(e.partialField.data[v]),y[s][e.name()]=e.partialField.data[v]});var g=vt(y[l]),b=vt(y[s]);if(u(g,b,function(){return e.detachedRoot()},function(){return t.detachedRoot()},{})){var O={};m.forEach(function(e,t){O[i[t].name]=e}),d&&U.CROSS!==a?o[h]=O:(o.push(O),d=!0,h=n)}else if((a===U.LEFTOUTER||a===U.RIGHTOUTER)&&!d){var w={},_=c.fields.length-1;m.forEach(function(e,t){w[i[t].name]=t<=_?e:null}),d=!0,h=n,o.push(w)}})}),new It(o,i,{name:d})}function J(e,t){var n=""+e,r=""+t;return nr?1:0}function z(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:J;return e.length>1&&function e(t,n,r,a){if(r===n)return t;var i=n+Math.floor((r-n)/2);return e(t,n,i,a),e(t,i+1,r,a),function(e,t,n,r,a){for(var i=e,o=[],u=t;u<=r;u+=1)o[u]=i[u];for(var c=t,f=n+1,l=t;l<=r;l+=1)c>n?(i[l]=o[f],f+=1):f>r?(i[l]=o[c],c+=1):a(o[c],o[f])<=0?(i[l]=o[c],c+=1):(i[l]=o[f],f+=1)}(t,n,i,r,a),t}(e,0,e.length-1,t),e}function K(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);ti?"desc"===t?-1:1:0}}return r}function X(e,t){var n=new Map,r=[];return e.forEach(function(e){var a=e[t];n.has(a)?r[n.get(a)][1].push(e):(r.push([a,[e]]),n.set(a,r.length-1))}),r}function q(e,t,n){var r={label:e[0]};return t.reduce(function(t,r,a){return t[r]=e[1].map(function(e){return e[n[a].index]}),t},r),r}function $(e,t){var n={},r=[],a=[],i=[],o=e.getFieldspace(),u=t.getFieldspace(),c=o.fieldsObj(),f=u.fieldsObj(),l=o.name+" union "+u.name;if(!S(e._colIdentifier.split(",").sort(),t._colIdentifier.split(",").sort()))return null;function s(e,t,r){D(e._rowDiffset,function(e){var o={},u="";a.forEach(function(n){var r=t[n].partialField.data[e];u+="-"+r,o[n]=r}),n[u]||(r&&i.push(o),n[u]=!0)})}return e._colIdentifier.split(",").forEach(function(e){var t=c[e];r.push(_({},t.schema())),a.push(t.schema().name)}),s(t,f,!1),s(e,c,!0),new It(i,r,{name:l})}function Q(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function ee(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);tn&&(n=a))}),[t,n]}}]),t}(),xe=function(){function e(e,t){for(var n=0;n=i?c=!0:(r=e.charCodeAt(o++))===tt?f=!0:r===nt&&(f=!0,e.charCodeAt(o)===tt&&++o),e.slice(a+1,t-1).replace(/""/g,'"')}for(;o9999?"+"+it(t,6):it(t,4))+"-"+it(e.getUTCMonth()+1,2)+"-"+it(e.getUTCDate(),2)+(i?"T"+it(n,2)+":"+it(r,2)+":"+it(a,2)+"."+it(i,3)+"Z":a?"T"+it(n,2)+":"+it(r,2)+":"+it(a,2)+"Z":r||n?"T"+it(n,2)+":"+it(r,2)+"Z":"")}(e):t.test(e+="")?'"'+e.replace(/"/g,'""')+'"':e}return{parse:function parse(e,t){var n,a,i=r(e,function(e,r){if(n)return n(e,r-1);a=e,n=t?function(e,t){var n=rt(e);return function(r,a){return t(n(r),a,e)}}(e,t):rt(e)});return i.columns=a||[],i},parseRows:r,format:function format(t,n){return null==n&&(n=at(t)),[n.map(o).join(e)].concat(a(t,n)).join("\n")},formatBody:function formatBody(e,t){return null==t&&(t=at(e)),a(e,t).join("\n")},formatRows:function formatRows(e){return e.map(i).join("\n")}}},ct=ut(","),ft=(ct.parse,ct.parseRows,ct.format,ct.formatBody,ct.formatRows,ut("\t"));ft.parse,ft.parseRows,ft.format,ft.formatBody,ft.formatRows;var lt=function lt(e,t){t=Object.assign({},{firstRowHeader:!0,fieldSeparator:","},t);var n=ut(t.fieldSeparator);return Ze(n.parseRows(e),t)},st=function st(e){var t={},n=0,r=void 0,a=[],i=v(a);return e.forEach(function(e){var a=[];for(var o in e)o in t?r=t[o]:(t[o]=n++,r=n-1),a[r]=e[o];i.apply(void 0,a)}),[Object.keys(t),a]},dt=function dt(e,t){var n={FlatJSON:st,DSVStr:lt,DSVArr:Ze},r=N(e);if(!r)throw new Error("Couldn't detect the data format");return n[r](e,t)},pt=function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function(e,t){var n=[],r=!0,a=!1,i=void 0;try{for(var o,u=e[Symbol.iterator]();!(r=(o=u.next()).done)&&(n.push(o.value),!t||n.length!==t);r=!0);}catch(e){a=!0,i=e}finally{try{!r&&u.return&&u.return()}finally{if(a)throw i}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")};function ht(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t2&&void 0!==arguments[2]?arguments[2]:{},a=arguments[3];t===L.COMPOSE?(e._derivation.length=0,(n=e._derivation).push.apply(n,ht(a))):e._derivation.push({op:t,meta:r,criteria:a})}(t,n,arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},arguments[4]),function(e,t){var n;(n=t._ancestorDerivation).push.apply(n,ht(e._ancestorDerivation).concat(ht(e._derivation)))}(e,t)},bt=function bt(e){var t=e.clone(!1),n=e.getPartialFieldspace();return t._colIdentifier=n.fields.map(function(e){return e.name()}).join(","),n._cachedFieldsObj=null,n._cachedDimension=null,n._cachedMeasure=null,t.__calculateFieldspace().calculateFieldsConfig(),t},Ot=function Ot(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r=n.operation||"and",a=n.filterByMeasure||!1,i=[];return i=t.length?t.map(function(e){return n=(t=e).getData(),r=n.schema,i=t.getFieldsConfig(),o=t.getFieldspace().fieldsObj(),u=n.data,c=Object.values(i).reduce(function(e,t){return e[t.def.name]=o[t.def.name].domain(),e},{}),function(e){return!!u.length&&u.some(function(t){return r.every(function(n){if(!(n.name in e))return!0;var r=e[n.name].valueOf();if(a&&n.type===f.MEASURE)return r>=c[n.name][0]&&r<=c[n.name][1];if(n.type!==f.DIMENSION)return!0;var o=i[n.name].index;return t[o]===e[n.name].valueOf()})})};var t,n,r,i,o,u,c}):[function(){return!1}],"and"===r?bt(e).select(function(e){return i.every(function(t){return t(e)})},{saveChild:!1,mode:l.ALL}):bt(e).select(function(e){return i.some(function(t){return t(e)})},{mode:l.ALL,saveChild:!1})},wt=function wt(e,t,n,r){var a=e.clone(r.saveChild),i=function gt(e,t,n,r,a){var i=[],o=-1,u=r.mode,c=void 0,f={},s=function s(){return a.detachedRoot()},d=function d(e){return n(function(e,t){var n={},r=!0,a=!1,i=void 0;try{for(var o,u=e[Symbol.iterator]();!(r=(o=u.next()).done);r=!0){var c=o.value;n[c.name()]=new k(c.partialField.data[t],c)}}catch(e){a=!0,i=e}finally{try{!r&&u.return&&u.return()}finally{if(a)throw i}}return n}(t,e),e,s,f)},p=void 0;return p=u===l.INVERSE?function(e){return!d(e)}:function(e){return d(e)},D(e,function(e){p(e)&&(-1!==o&&e===o+1?(c=i.length-1,i[c]=i[c].split("-")[0]+"-"+e):i.push(""+e),o=e)}),i.join(",")}(a._rowDiffset,a.getPartialFieldspace().fields,t,n,e);return a._rowDiffset=i,a.__calculateFieldspace().calculateFieldsConfig(),yt(e,a,L.SELECT,{config:n},t),a},_t=function _t(e,t,n,r){var a=e.clone(n.saveChild),i=t;return n.mode===l.INVERSE&&(i=r.filter(function(e){return-1===t.indexOf(e)})),a._colIdentifier=i.join(","),a.__calculateFieldspace().calculateFieldsConfig(),yt(e,a,L.PROJECT,{projField:t,config:n,actualProjField:i},null),a},Et=function Et(e){if((e=_({},e)).type||(e.type=f.DIMENSION),!e.subtype)switch(e.type){case f.MEASURE:e.subtype=c.CONTINUOUS;break;default:case f.DIMENSION:e.subtype=u.CATEGORICAL}return e},At=function At(e){return e.map(function(e){return function(e){var t=[c.CONTINUOUS],n=[u.CATEGORICAL,u.BINNED,u.TEMPORAL,u.GEO],r=e.type,a=e.subtype,i=e.name;switch(r){case f.DIMENSION:if(-1===n.indexOf(a))throw new Error("DataModel doesn't support dimension field subtype "+a+" used for "+i+" field");break;case f.MEASURE:if(-1===t.indexOf(a))throw new Error("DataModel doesn't support measure field subtype "+a+" used for "+i+" field");break;default:throw new Error("DataModel doesn't support field type "+r+" used for "+i+" field")}}(e=Et(e)),e})},St=function St(e,t,n,r){n=At(n),r=Object.assign(Object.assign({},qe),r);var i=a[r.dataFormat];if(!i||"function"!=typeof i)throw new Error("No converter function found for "+r.dataFormat+" format");var u=i(t,r),c=pt(u,2),f=c[0],l=c[1];!function(e,t){n.forEach(function(e){var n=e.as;if(n){var r=t.indexOf(e.name);t[r]=n,e.name=n,delete e.as}})}(0,f);var s=Xe(l,n,f),d=T.createNamespace(s,r.name);return e._partialFieldspace=d,e._rowDiffset=l.length&&l[0].length?"0-"+(l[0].length-1):"",e._colIdentifier=n.map(function(e){return e.name}).join(),e._dataFormat=r.dataFormat===o.AUTO?N(t):r.dataFormat,e},jt=function jt(e,t){for(var n=0;n2&&void 0!==arguments[2]?arguments[2]:{},a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},i=a.nonTraversingModel,o=a.excludeModels||[];t!==i&&((!o.length||-1===o.indexOf(t))&&t.handlePropagation(n,r),t._children.forEach(function(t){var i=Nt(n,t),o=pt(i,2),u=o[0],c=o[1];e(t,[u,c],r,a)}))},kt=function kt(e,t,n,r){var a=void 0,i=void 0,o=n.propagationNameSpace,u=n.propagateToSource,c=n.sourceId,f=r.propagateInterpolatedValues,l=[];if(null===e&&!0!==r.persistent)l=[{criteria:[]}];else{var s,d=Object.values(o.mutableActions);!1!==u&&(d=d.filter(function(e){return e.config.sourceId!==c}));var p=d.filter(function(e){return(r.filterFn||function(){return!0})(e,r)}).map(function(e){return e.config.criteria}),h=[];if(!1!==u){var v=Object.values(o.mutableActions);v.forEach(function(e){var t=e.config;!1===t.applyOnSource&&t.action===r.action&&t.sourceId!==c&&(h.push(e.model),(a=v.filter(function(t){return t!==e}).map(function(e){return e.config.criteria})).length&&l.push({criteria:a,models:e.model,path:function Ft(e){for(var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];e._parent;)t.push(e),e=e._parent;return t}(e.model)}))})}a=(s=[]).concat.apply(s,[].concat(ht(p),[e])).filter(function(e){return null!==e}),l.push({criteria:a,excludeModels:[].concat(h,ht(r.excludeModels||[]))})}var m=t.model,y=Object.assign({sourceIdentifiers:e,propagationSourceId:c},r),g=t.groupByModel;f&&g&&(i=Ot(g,a,{filterByMeasure:f}),Tt(g,i,y)),l.forEach(function(e){var t=Ot(m,e.criteria),n=e.path;if(n){var r=function(e,t){for(var n=0,r=t.length;n0&&void 0!==arguments[0])||arguments[0],t=new this.constructor(this);return e?t.setParent(this):t.setParent(null),t}},{key:"project",value:function value(e,t){var n={mode:l.NORMAL,saveChild:!0};t=Object.assign({},n,t);var r=this.getFieldsConfig(),a=Object.keys(r),i=t.mode,o=e.reduce(function(e,t){return"RegExp"===t.constructor.name?e.push.apply(e,function(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t0,c=[];if(n.split(",").forEach(function(t){for(var n=0;n=0;u--)a=t[u][0],i=t[u][1],(o=jt(r,a))&&("function"==typeof i?z(n,function(e,t){return i(e[o.index],t[o.index])}):E(i)?function(){var e=X(n,o.index),t=i[i.length-1],a=i.slice(0,i.length-1),u=a.map(function(e){return jt(r,e)});e.forEach(function(e){e.push(q(e,a,u))}),z(e,function(e,n){var r=e[2],a=n[2];return t(r,a)}),n.length=0,e.forEach(function(e){n.push.apply(n,K(e[1]))})}():(i="desc"===String(i).toLowerCase()?"desc":"asc",z(n,W(o.type,i,o.index))));e.uids=[],n.forEach(function(t){e.uids.push(t.pop())})}(i,r),a.columnWise){var f=Array.apply(void 0,K(Array(i.schema.length))).map(function(){return[]});i.data.forEach(function(e){e.forEach(function(e,t){f[t].push(e)})}),i.data=f}return i}.call(this,this.getPartialFieldspace().fields,this._rowDiffset,e.getAllFields?t.map(function(e){return e.name()}).join():this._colIdentifier,e.sort,{columnWise:"column"===e.order,addUid:!!e.withUid});if(!e.formatter)return n;var r=e.formatter,a=n.data,i=n.schema,o=n.uids,u=i.map(function(e){return e.name}),c=Object.keys(r).reduce(function(e,t){var n=u.indexOf(t);return-1!==n&&e.push([n,r[t]]),e},[]);return"column"===e.order?c.forEach(function(e){var t=e[0],n=e[1];a[t].forEach(function(e,r){a[t][r]=n.call(void 0,e,o[r],i[t])})}):a.forEach(function(e,t){c.forEach(function(n){var r=n[0],a=n[1];e[r]=a.call(void 0,e[r],o[t],i[r])})}),n}},{key:"groupBy",value:function value(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{saveChild:!0},r=""+e.join(),i=function ge(e,t,n,r){var a=function(e,t){var n=[],r=e.getFieldspace().getDimension();return Object.entries(r).forEach(function(e){var r=ye(e,1)[0];t&&t.length?-1!==t.indexOf(r)&&n.push(r):n.push(r)}),n}(e,t),i=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n={},r=e.getFieldspace().getMeasure(),a=me.defaultReducer();return Object.keys(r).forEach(function(e){"string"!=typeof t[e]&&(t[e]=r[e].defAggFn());var i=me.resolve(t[e]);i?n[e]=i:(n[e]=a,t[e]=pe)}),n}(e,n),o=e.getFieldspace(),u=o.fieldsObj(),c=o.name,l=[],s=[],d=[],p={},h=[],v=void 0;Object.entries(u).forEach(function(e){var t=ye(e,2),n=t[0],r=t[1];if(-1!==a.indexOf(n)||i[n])switch(d.push(_({},r.schema())),r.schema().type){case f.MEASURE:s.push(n);break;default:case f.DIMENSION:l.push(n)}});var m=0;D(e._rowDiffset,function(e){var t="";l.forEach(function(n){t=t+"-"+u[n].partialField.data[e]}),void 0===p[t]?(p[t]=m,h.push({}),l.forEach(function(t){h[m][t]=u[t].partialField.data[e]}),s.forEach(function(t){h[m][t]=[u[t].partialField.data[e]]}),m+=1):s.forEach(function(n){h[p[t]][n].push(u[n].partialField.data[e])})});var y={},g=function g(){return e.detachedRoot()};return h.forEach(function(e){var t=e;s.forEach(function(n){t[n]=i[n](e[n],g,y)})}),r?(r.__calculateFieldspace(),v=r):v=new zt(h,d,{name:c}),v}.apply(void 0,[this,e,t]);return yt(this,i,L.GROUPBY,{fieldsArr:e,groupByString:r,defaultReducer:me.defaultReducer()},t),n.saveChild?i.setParent(this):i.setParent(null),i}},{key:"sort",value:function value(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{saveChild:!1},n=this.getData({order:"row",sort:e}),r=[n.schema.map(function(e){return e.name})].concat(n.data),a=new this.constructor(r,n.schema,{dataFormat:"DSVArr"});return yt(this,a,L.SORT,t,e),t.saveChild?a.setParent(this):a.setParent(null),a}},{key:"serialize",value:function value(e,t){e=e||this._dataFormat,t=Object.assign({},{fieldSeparator:","},t);var n=this.getFieldspace().fields,r=n.map(function(e){return e.formattedData()}),a=r[0].length,i=void 0,u=void 0,c=void 0;if(e===o.FLAT_JSON)for(i=[],u=0;u=0&&(n.fields[r]=e)}else n.fields.push(e);return n._cachedFieldsObj=null,n._cachedDimension=null,n._cachedMeasure=null,this.__calculateFieldspace().calculateFieldsConfig(),this}},{key:"calculateVariable",value:function value(e,t,n){var r=this;e=Et(e),n=Object.assign({},{saveChild:!0,replaceVar:!1},n);var a=this.getFieldsConfig(),i=t.slice(0,t.length-1),o=t[t.length-1];if(a[e.name]&&!n.replaceVar)throw new Error(e.name+" field already exists in datamodel");var u=i.map(function(e){var t=a[e];if(!t)throw new Error(e+" is not a valid column name.");return t.index}),c=this.clone(n.saveChild),f=c.getFieldspace().fields,l=u.map(function(e){return f[e]}),s={},d=function d(){return r.detachedRoot()},p=[];D(c._rowDiffset,function(e){var t=l.map(function(t){return t.partialField.data[e]});p[e]=o.apply(void 0,function(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t1&&void 0!==arguments[1]?arguments[1]:{},n=arguments[2],r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},a=t.isMutableAction,i=t.sourceId,o=t.payload,u=function(e){for(;e._parent;)e=e._parent;return e}(this),c=u._propagationNameSpace,f={groupByModel:function(e){for(;e._parent&&e._derivation.find(function(e){return e.op!==L.GROUPBY});)e=e._parent;return e}(this),model:u};return n&&function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments[2],r=void 0,a=t.isMutableAction,i=t.criteria,o=t.action+"-"+t.sourceId;r=a?e.mutableActions:e.immutableActions,null===i?delete r[o]:r[o]={model:n,config:t}}(c,t,this),kt(e,f,{propagationNameSpace:c,sourceId:i},Object.assign({payload:o},t)),a&&function(e,t,n){var r=e.immutableActions;for(var a in r){var i=r[a].config,o=n.config.sourceId,u=!n.propConfig.filterImmutableAction||n.propConfig.filterImmutableAction(i,n.config);if(i.sourceId!==o&&u){var c=i.criteria;kt(c,t,{propagationNameSpace:e,propagateToSource:!1,sourceId:o},i)}}}(c,f,{config:t,propConfig:r}),this}},{key:"on",value:function value(e,t){switch(e){case"propagation":this._onPropagation.push(t)}return this}},{key:"unsubscribe",value:function value(e){switch(e){case"propagation":this._onPropagation=[]}return this}},{key:"handlePropagation",value:function value(e,t){var n=this;this._onPropagation.forEach(function(r){return r.call(n,e,t)})}},{key:"bin",value:function value(e,t){var n=this.getFieldsConfig();if(!n[e])throw new Error("Field "+e+" doesn't exist");var r=t.name||e+"_binned";if(n[r])throw new Error("Field "+r+" already exists");var a=function(e,t,n){var r=n.buckets,a=n.binsCount,i=n.binSize,o=n.start,u=n.end,c=e.domain(),f=I(c,2),l=f[0],s=f[1];r||(o=0!==o&&(!o||o>l)?l:o,u=0!==u&&(!u||ul&&r.unshift(l),r[r.length-1]<=s&&r.push(s+1);for(var d=[],p=0;p=(i=e[a=n+Math.floor((r-n)/2)]).start&&t=i.end?n=a+1:t1&&void 0!==arguments[1]?arguments[1]:{saveChild:!0},r=e,a=void 0,i=[];return t.forEach(function(e){r=e(r),i.push.apply(i,function(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t2?(i=arguments.length<=0?void 0:arguments[0],n=arguments.length<=1?void 0:arguments[1],o=arguments.length<=2?void 0:arguments[2]):(i=null,n=arguments.length<=0?void 0:arguments[0],o=arguments.length<=1?void 0:arguments[1]),t=o(y),(e=r=new _(t.fn)).addDependencies.apply(e,P(t.dependencies)),this._addPropInModel(i,function(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}({},n,r)),this}},{key:"_addPropInModel",value:function value(e,t){return this._graph.createNodesFrom(t,e),this}},{key:"on",value:function value(e,t,r){var n,i=e instanceof Array?e:[e],o=this._graph.createElectricNodeOf(i,{type:"CurrFrame",fn:t});return r&&(n=this._graph.stopPropagation().setPropagationOverride("nextFrame")).resetNodeValue.apply(n,P(e)),o}},{key:"next",value:function value(e,t,r){var n,i=e instanceof Array?e:[e],o=this._graph.createElectricNodeOf(i,{type:"NextFrame",fn:t});return r&&(n=this._graph.stopPropagation().setPropagationOverride("currentFrame")).resetNodeValue.apply(n,P(e)),o}},{key:"lock",value:function value(){return this._lockFlag=!0,this._reqQ.length=0,this}},{key:"unlock",value:function value(){return this._lockFlag=!1,this.setProp.apply(this,P(this._reqQ)),this._reqQ.length=0,this}},{key:"prop",value:function value(){var e,t=void 0,r=void 0;switch(e=arguments.length){case 1:t=arguments.length<=0?void 0:arguments[0];break;case 2:t=arguments.length<=0?void 0:arguments[0],r=arguments.length<=1?void 0:arguments[1];break;default:return this}return 2===e?(this._lockFlag?this._reqQ.push([t,r]):this.setProp([t,r]),this):this._graph.getNodeValue(t)}},{key:"setProp",value:function value(){for(var e,t=this,r=arguments.length,n=Array(r),i=0;i/gi),smartlabel},SmartLabelManager.store={},SmartLabelManager.prototype._calCharDimWithCache=function(text,calculateDifference,length){if(!this._init)return!1;var size,csArr,tw,twi,cachedStyle,asymmetricDifference,maxAdvancedCacheLimit=this.options.maxCacheLimit,container=this._container,style=this.style||{},cache=this._advancedCache||(this._advancedCache={}),advancedCacheKey=this._advancedCacheKey||(this._advancedCacheKey=[]),cacheName=text+(style.fontSize||"")+(style.fontFamily||"")+(style.fontWeight||"")+(style.fontStyle||""),cacheInitName=text+"init"+(style.fontSize||"")+(style.fontFamily||"")+(style.fontWeight||"")+(style.fontStyle||"");return htmlSplCharSpace[text]&&(text=htmlSplCharSpace[text]),calculateDifference?void 0===(asymmetricDifference=cache[cacheInitName])&&(container.innerHTML=text.repeat?text.repeat(length):Array(length+1).join(text),tw=container.offsetWidth,container.innerHTML=text,twi=container.offsetWidth,asymmetricDifference=cache[cacheInitName]=(tw-length*twi)/(length+1),advancedCacheKey.push(cacheInitName),advancedCacheKey.length>maxAdvancedCacheLimit&&delete cache[advancedCacheKey.shift()]):asymmetricDifference=0,(cachedStyle=cache[cacheName])?(csArr=cachedStyle.split(","),{width:parseFloat(csArr[0],10),height:parseFloat(csArr[1],10)}):(container.innerHTML=text,size={height:container.offsetHeight,width:container.offsetWidth+asymmetricDifference},cache[cacheName]=size.width+","+size.height,advancedCacheKey.push(cacheName),advancedCacheKey.length>maxAdvancedCacheLimit&&delete cache[advancedCacheKey.shift()],size)},SmartLabelManager.prototype._getWidthFn=function(){var contObj=this._containerObj,container=this._container,svgText=contObj.svgText;return svgText?function(str){var bbox,width;return svgText.textContent=str,(width=(bbox=svgText.getBBox()).width-SVG_BBOX_CORRECTION)<1&&(width=bbox.width),width}:function(str){return container.innerHTML=str,container.offsetWidth}},SmartLabelManager.prototype.setStyle=function(style){return this._init?style!==this.style||this._styleNotSet?(style||(style=this.style),slLib.setLineHeight(style),this.style=style,this._containerObj=sCont=this._containerManager.get(style),this._containerObj?(this._container=sCont.node,this._context=sCont.context,this._cache=sCont.charCache,this._lineHeight=sCont.lineHeight,this._styleNotSet=!1):this._styleNotSet=!0,this):void 0:this;var sCont},SmartLabelManager.prototype.useEllipsesOnOverflow=function(useEllipses){return this._init?(this._showNoEllipses=!useEllipses,this):this},SmartLabelManager.prototype.getSmartText=function(text,maxWidth,maxHeight,noWrap){if(!this._init)return!1;void 0===text||null===text?text="":"string"!=typeof text&&(text=text.toString());var len,trimStr,tempArr,tmpText,maxWidthWithEll,toolText,oriWidth,oriHeight,newCharIndex,nearestChar,tempChar,getWidth,initialLeft,initialTop,getOriSizeImproveObj,spanArr,x,y,minWidth,elem,chr,elemRightMostPoint,elemLowestPoint,lastBR,removeFromIndex,removeFromIndexForEllipses,hasHTMLTag=!1,maxStrWidth=0,lastDash=-1,lastSpace=-1,lastIndexBroken=-1,strWidth=0,strHeight=0,oriTextArr=[],i=0,ellipsesStr=this._showNoEllipses?"":"...",lineHeight=this._lineHeight,context=this._context,container=this._container,sCont=this._containerObj,ellipsesWidth=sCont.ellipsesWidth,dotWidth=sCont.dotWidth,characterArr=[],dashIndex=-1,spaceIndex=-1,lastLineBreak=-1,fastTrim=function fastTrim(str){for(var ws=/\s/,i=(str=str.replace(/^\s\s*/,"")).length;ws.test(str.charAt(i-=1)););return str.slice(0,i+1)},smartLabel={text:text,maxWidth:maxWidth,maxHeight:maxHeight,width:null,height:null,oriTextWidth:null,oriTextHeight:null,oriText:text,isTruncated:!1};if(getWidth=this._getWidthFn(),maxHeight===lineHeight&&(maxHeight*=1.2),container){if(!documentSupport.isBrowserLess){if((hasHTMLTag=slLib.xmlTagRegEx.test(text))?(container.innerHTML=text,smartLabel.oriTextWidth=oriWidth=container.offsetWidth,smartLabel.oriTextHeight=oriHeight=container.offsetHeight):(tmpText=text.replace(slLib.ltgtRegex,function(match){return"<"===match?"<":">"}),getOriSizeImproveObj=this.getOriSize(tmpText,!0),smartLabel.oriTextWidth=oriWidth=getOriSizeImproveObj.width,smartLabel.oriTextHeight=oriHeight=getOriSizeImproveObj.height),oriHeight<=maxHeight&&oriWidth<=maxWidth)return smartLabel.width=smartLabel.oriTextWidth=oriWidth,smartLabel.height=smartLabel.oriTextHeight=oriHeight,smartLabel;if(lineHeight>maxHeight)return smartLabel.text="",smartLabel.width=smartLabel.oriTextWidth=0,smartLabel.height=smartLabel.oriTextHeight=0,smartLabel}if(text=fastTrim(text).replace(/(\s+)/g," "),maxWidthWithEll=this._showNoEllipses?maxWidth:maxWidth-ellipsesWidth,!hasHTMLTag){if(len=(oriTextArr=text.split("")).length,trimStr="",tempArr=[],tempChar=oriTextArr[0],this._cache[tempChar]?minWidth=this._cache[tempChar].width:(minWidth=getWidth(tempChar),this._cache[tempChar]={width:minWidth}),maxWidthWithEll>minWidth)i=(tempArr=text.substr(0,slLib.getNearestBreakIndex(text,maxWidthWithEll,this)).split("")).length;else{if(minWidth>maxWidth)return smartLabel.text="",smartLabel.width=smartLabel.oriTextWidth=smartLabel.height=smartLabel.oriTextHeight=0,smartLabel;ellipsesStr&&((maxWidthWithEll=maxWidth-2*dotWidth)>minWidth?ellipsesStr="..":(maxWidthWithEll=maxWidth-dotWidth)>minWidth?ellipsesStr=".":(maxWidthWithEll=0,ellipsesStr=""))}if(strWidth=getWidth(tempArr.join("")),strHeight=this._lineHeight,noWrap){for(;imaxWidthWithEll&&(trimStr||(trimStr=tempArr.slice(0,-1).join("")),strWidth>maxWidth))return smartLabel.text=fastTrim(trimStr)+ellipsesStr,smartLabel.tooltext=smartLabel.oriText,smartLabel.width=getWidth(smartLabel.text),smartLabel.height=this._lineHeight,smartLabel;return smartLabel.text=tempArr.join(""),smartLabel.width=strWidth,smartLabel.height=this._lineHeight,smartLabel}for(;imaxWidthWithEll&&(trimStr||(trimStr=tempArr.slice(0,-1).join("")),strWidth>maxWidth)){if(lastSpace=text.substr(0,tempArr.length).lastIndexOf(" "),lastDash=text.substr(0,tempArr.length).lastIndexOf("-"),lastSpace>lastIndexBroken?(strWidth=getWidth(tempArr.slice(lastIndexBroken+1,lastSpace).join("")),tempArr.splice(lastSpace,1,"
"),lastIndexBroken=lastSpace,newCharIndex=lastSpace+1):lastDash>lastIndexBroken?(lastDash===tempArr.length-1?(strWidth=getWidth(tempArr.slice(lastIndexBroken+1,lastSpace).join("")),tempArr.splice(lastDash,1,"
-")):(strWidth=getWidth(tempArr.slice(lastIndexBroken+1,lastSpace).join("")),tempArr.splice(lastDash,1,"-
")),lastIndexBroken=lastDash,newCharIndex=lastDash+1):(tempArr.splice(tempArr.length-1,1,"
"+oriTextArr[i]),lastLineBreak=tempArr.length-2,strWidth=getWidth(tempArr.slice(lastIndexBroken+1,lastLineBreak+1).join("")),lastIndexBroken=lastLineBreak,newCharIndex=i),(strHeight+=this._lineHeight)>maxHeight)return smartLabel.text=fastTrim(trimStr)+ellipsesStr,smartLabel.tooltext=smartLabel.oriText,smartLabel.width=maxWidth,smartLabel.height=strHeight-this._lineHeight,smartLabel;maxStrWidth=max(maxStrWidth,strWidth),trimStr=null,nearestChar=slLib.getNearestBreakIndex(text.substr(newCharIndex),maxWidthWithEll,this),strWidth=getWidth(text.substr(newCharIndex,nearestChar||1)),tempArr.length)/g,'$1'),container.innerHTML=text,x=0,y=(spanArr=container[documentSupport.childRetriverFn](documentSupport.childRetriverString)).length;xmaxWidth)return smartLabel.text="",smartLabel.width=smartLabel.oriTextWidth=smartLabel.height=smartLabel.oriTextHeight=0,smartLabel;if(minWidth>maxWidthWithEll&&!this._showNoEllipses&&((maxWidthWithEll=maxWidth-2*dotWidth)>minWidth?ellipsesStr="..":(maxWidthWithEll=maxWidth-dotWidth)>minWidth?ellipsesStr=".":(maxWidthWithEll=0,ellipsesStr="")),initialLeft=characterArr[0].elem.offsetLeft,initialTop=characterArr[0].elem.offsetTop,noWrap)for(;imaxWidthWithEll&&(removeFromIndexForEllipses||(removeFromIndexForEllipses=i),container.offsetWidth>maxWidth&&(removeFromIndex=i,i=len));else for(;imaxWidthWithEll?(removeFromIndexForEllipses||(removeFromIndexForEllipses=i),elemRightMostPoint>maxWidth&&(lastSpace=characterArr[i].spaceIdx,lastDash=characterArr[i].dashIdx,lastSpace>lastIndexBroken?(characterArr[lastSpace].elem.innerHTML="
",lastIndexBroken=lastSpace):lastDash>lastIndexBroken?(characterArr[lastDash].elem.innerHTML=lastDash===i?"
-":"-
",lastIndexBroken=lastDash):elem.parentNode.insertBefore(lastBR=doc.createElement("br"),elem),elem.offsetHeight+elem.offsetTop>maxHeight?(lastBR?lastBR.parentNode.removeChild(lastBR):lastIndexBroken===lastDash?characterArr[lastDash].elem.innerHTML="-":characterArr[lastSpace].elem.innerHTML=" ",removeFromIndex=i,i=len):removeFromIndexForEllipses=null)):elemLowestPoint>maxHeight&&(removeFromIndex=i,i=len);if(removeFromIndex=removeFromIndexForEllipses;i-=1)(elem=characterArr[i].elem).parentNode.removeChild(elem);for(;i>=0;i-=1)elem=characterArr[i].elem,slLib.classNameBrReg.test(elem.className)?elem.parentNode.removeChild(elem):i=0}return smartLabel.text=container.innerHTML.replace(slLib.spanRemovalRegx,"$1").replace(/\&\;/g,"&"),smartLabel.isTruncated&&(smartLabel.text+=ellipsesStr,smartLabel.tooltext=toolText),smartLabel.height=container.offsetHeight,smartLabel.width=container.offsetWidth,smartLabel}return smartLabel.error=new Error("Body Tag Missing!"),smartLabel},SmartLabelManager.prototype.getOriSize=function(text,detailedCalculationFlag){if(!this._init)return!1;var textArr,letter,lSize,i,l,cumulativeSize=0,height=0,indiSizeStore={};if(!detailedCalculationFlag)return this._calCharDimWithCache(text);for(i=0,l=(textArr=text.split("")).length;i]+?\>)|(&(?:[a-z]+|#[0-9]+);|.)/gi,spanAdditionReplacer:'$1$2',spanRemovalRegx:new RegExp("\\]+?"+classNameWithTag+"[^\\>]{0,}\\>(.*?)\\<\\/span\\>","ig"),xmlTagRegEx:new RegExp("<[^>][^<]*[^>]+>","i"),ltgtRegex:/<|>/g,brReplaceRegex://gi,testStrAvg:"WgI",parentContainerStyle:{position:"absolute",top:"-9999em",whiteSpace:"nowrap",padding:"0px",width:"1px",height:"1px",overflow:"hidden"},supportedStyle:{font:"font",fontFamily:"font-family","font-family":"font-family",fontWeight:"font-weight","font-weight":"font-weight",fontSize:"font-size","font-size":"font-size",lineHeight:"line-height","line-height":"line-height",fontStyle:"font-style","font-style":"font-style"},getDocumentSupport:function getDocumentSupport(){var childRetriverFn,childRetriverString,noClassTesting;return doc.getElementsByClassName?(childRetriverFn="getElementsByClassName",childRetriverString=classNameWithTag,noClassTesting=!0):(childRetriverFn="getElementsByTagName",childRetriverString="span",noClassTesting=!1),{isIE:/msie/i.test(userAgent)&&!win.opera,hasSVG:Boolean(win.SVGAngle||doc.implementation.hasFeature("http://www.w3.org/TR/SVG11/feature#BasicStructure","1.1")),isHeadLess:new RegExp(" HtmlUnit").test(userAgent),isWebKit:new RegExp(" AppleWebKit/").test(userAgent),childRetriverFn:childRetriverFn,childRetriverString:childRetriverString,noClassTesting:noClassTesting}},createContainer:function createContainer(containerParent){var body,container;if(containerParent&&(containerParent.offsetWidth||containerParent.offsetHeight)){if(containerParent.appendChild)return containerParent.appendChild(container=doc.createElement("DIV")),container.className=containerClass,container.setAttribute("aria-hidden","true"),container.setAttribute("role","presentation"),container}else if((body=doc.getElementsByTagName("body")[0])&&body.appendChild)return(container=doc.createElement("DIV")).className=containerClass,container.setAttribute("aria-hidden","true"),container.setAttribute("role","presentation"),1,body.appendChild(container),container},getNearestBreakIndex:function getNearestBreakIndex(text,maxWidth,sl){if(!text||!text.length)return 0;var difference,getWidth=sl._getWidthFn(),charLen=0,increment=0,oriWidth=getWidth(text),avgWidth=oriWidth/text.length;if(difference=maxWidth,charLen=ceil(maxWidth/avgWidth),oriWidthtext.length&&(difference=maxWidth-oriWidth,charLen=text.length);difference>0;){if(difference=maxWidth-getWidth(text.substr(0,charLen)),!(increment=floor(difference/avgWidth)))return charLen;charLen+=increment}for(;difference<0;){if(difference=maxWidth-getWidth(text.substr(0,charLen)),!(increment=floor(difference/avgWidth)))return charLen;charLen+=increment}return charLen},setLineHeight:function setLineHeight(styleObj){var fSize=styleObj.fontSize=styleObj.fontSize||"12px";return styleObj.lineHeight=styleObj.lineHeight||styleObj["line-height"]||1.2*parseInt(fSize,10)+"px",styleObj}}}};exports.default=lib,module.exports=exports.default},function(module){module.exports={name:"muze",private:!0,version:"1.2.0",description:"Composable visualisation library for web with a data-first approach",homepage:"https://muzejs.org",author:"Muzejs.org (https://muzejs.org/)",license:"MIT",contributors:[{name:"Akash Ghoswami",email:"akashgoswami90s@gmail.com"},{name:"Ranajit Banerjee",email:"ranajit.113124@gmail.com",url:"https://github.com/ranajitbanerjee"},{name:"Mridul Meharia",email:"mehariamridul@gmail.com",url:"https://github.com/mridulmeh"},{name:"Subhash Haldar"},{name:"Sandeep Acharya"},{name:"Rousan Ali",email:"rousanali786@gmail.com",url:"https://rousan.io"},{name:"Ujjal Kumar Dutta",email:"duttaujjalkumar@live.com"}],main:"src/index.js",keywords:["muze","svg","vector","graphics","data-visualization","visualization","renderer","fusioncharts","relational","algebra","relation"],repository:{type:"git",url:"https://github.com/chartshq/muze"},dependencies:{"@chartshq/layout":"^1.0.0","@chartshq/muze-firebolt":"^1.0.0","@chartshq/muze-legend":"^1.0.0","muze-utils":"^1.0.0","@chartshq/visual-cell":"^1.0.0","@chartshq/visual-group":"^1.0.0","@chartshq/visual-layer":"^1.0.0","@chartshq/visual-unit":"^1.0.0"}}},function(module,exports,__webpack_require__){var Muze=__webpack_require__(27);module.exports=Muze.default?Muze.default:Muze},function(module,exports,__webpack_require__){"use strict";var slLib=function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj}}(__webpack_require__(5)).default.init("undefined"!=typeof window?window:void 0),doc=slLib.win.document,documentSupport=slLib.getDocumentSupport(),SVG_BBOX_CORRECTION=documentSupport.isWebKit?0:4.5;function ContainerManager(parentContainer,isBrowserLess,maxContainers){var svg;maxContainers=(maxContainers=maxContainers>5?maxContainers:5)<20?maxContainers:20,this.maxContainers=maxContainers,this.first=null,this.last=null,this.containers={},this.length=0,this.rootNode=parentContainer,isBrowserLess&&((svg=doc.createElementNS("http://www.w3.org/2000/svg","svg")).setAttributeNS("http://www.w3.org/2000/svg","xlink","http://www.w3.org/1999/xlink"),svg.setAttributeNS("http://www.w3.org/2000/svg","height","0"),svg.setAttributeNS("http://www.w3.org/2000/svg","width","0"),this.svgRoot=svg,this.rootNode.appendChild(svg))}ContainerManager.prototype.get=function(style){var diff,key,containerObj,containers=this.containers,len=this.length,max=this.maxContainers,keyStr="";for(key in slLib.supportedStyle)void 0!==style[key]&&(keyStr+=slLib.supportedStyle[key]+":"+style[key]+";");if(!keyStr)return!1;if(containerObj=containers[keyStr])this.first!==containerObj&&(containerObj.prev&&(containerObj.prev.next=containerObj.next),containerObj.next&&(containerObj.next.prev=containerObj.prev),containerObj.next=this.first,containerObj.next.prev=containerObj,this.last===containerObj&&(this.last=containerObj.prev),containerObj.prev=null,this.first=containerObj);else{if(len>=max)for(diff=len-max+1;diff--;)this.removeContainer(this.last);containerObj=this.addContainer(keyStr)}return containerObj},ContainerManager.prototype.addContainer=function(keyStr){var node,container;return this.containers[keyStr]=container={next:null,prev:null,node:null,ellipsesWidth:0,lineHeight:0,dotWidth:0,avgCharWidth:4,keyStr:keyStr,charCache:{}},container.next=this.first,container.next&&(container.next.prev=container),this.first=container,this.last||(this.last=container),this.length+=1,node=container.node=doc.createElement("div"),this.rootNode.appendChild(node),documentSupport.isIE&&!documentSupport.hasSVG?node.style.setAttribute("cssText",keyStr):node.setAttribute("style",keyStr),node.setAttribute("aria-hidden","true"),node.setAttribute("role","presentation"),node.style.display="inline-block",node.innerHTML=slLib.testStrAvg,container.lineHeight=node.offsetHeight,container.avgCharWidth=node.offsetWidth/3,documentSupport.isBrowserLess?((node=container.svgText=doc.createElementNS("http://www.w3.org/2000/svg","text")).setAttribute("style",keyStr),this.svgRoot.appendChild(node),node.textContent=slLib.testStrAvg,container.lineHeight=node.getBBox().height,container.avgCharWidth=(node.getBBox().width-SVG_BBOX_CORRECTION)/3,node.textContent="...",container.ellipsesWidth=node.getBBox().width-SVG_BBOX_CORRECTION,node.textContent=".",container.dotWidth=node.getBBox().width-SVG_BBOX_CORRECTION):(node.innerHTML="...",container.ellipsesWidth=node.offsetWidth,node.innerHTML=".",container.dotWidth=node.offsetWidth,node.innerHTML=""),container},ContainerManager.prototype.removeContainer=function(cObj){var keyStr=cObj.keyStr;keyStr&&this.length&&cObj&&(this.length-=1,cObj.prev&&(cObj.prev.next=cObj.next),cObj.next&&(cObj.next.prev=cObj.prev),this.first===cObj&&(this.first=cObj.next),this.last===cObj&&(this.last=cObj.prev),cObj.node.parentNode.removeChild(cObj.node),delete this.containers[keyStr])},ContainerManager.prototype.dispose=function(){var key,containers=this.containers;for(key in this.maxContainers=null,containers)this.removeContainer(containers[key]);this.rootNode.parentNode.removeChild(this.rootNode),this.rootNode=null,this.first=null,this.last=null},module.exports=ContainerManager},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.r(__webpack_exports__);var scales_namespaceObject={};__webpack_require__.r(scales_namespaceObject),__webpack_require__.d(scales_namespaceObject,"scaleLinear",function(){return linear_linear}),__webpack_require__.d(scales_namespaceObject,"scaleThreshold",function(){return threshold_threshold}),__webpack_require__.d(scales_namespaceObject,"scaleLog",function(){return log}),__webpack_require__.d(scales_namespaceObject,"scalePow",function(){return pow}),__webpack_require__.d(scales_namespaceObject,"scaleIdentity",function(){return identity_identity}),__webpack_require__.d(scales_namespaceObject,"scaleOrdinal",function(){return ordinal}),__webpack_require__.d(scales_namespaceObject,"scaleSequential",function(){return sequential}),__webpack_require__.d(scales_namespaceObject,"scaleQuantize",function(){return quantize_quantize}),__webpack_require__.d(scales_namespaceObject,"scaleQuantile",function(){return quantile_quantile}),__webpack_require__.d(scales_namespaceObject,"schemeCategory10",function(){return category10}),__webpack_require__.d(scales_namespaceObject,"schemeCategory20",function(){return category20}),__webpack_require__.d(scales_namespaceObject,"schemeCategory20b",function(){return category20b}),__webpack_require__.d(scales_namespaceObject,"scaleBand",function(){return band}),__webpack_require__.d(scales_namespaceObject,"scaleTime",function(){return src_time});var color_schemes_namespaceObject={};__webpack_require__.r(color_schemes_namespaceObject),__webpack_require__.d(color_schemes_namespaceObject,"schemeDark2",function(){return Dark2}),__webpack_require__.d(color_schemes_namespaceObject,"schemePaired",function(){return Paired}),__webpack_require__.d(color_schemes_namespaceObject,"schemeAccent",function(){return Accent}),__webpack_require__.d(color_schemes_namespaceObject,"schemePastel1",function(){return Pastel1}),__webpack_require__.d(color_schemes_namespaceObject,"schemePastel2",function(){return Pastel2}),__webpack_require__.d(color_schemes_namespaceObject,"schemeSet1",function(){return Set1}),__webpack_require__.d(color_schemes_namespaceObject,"schemeSet2",function(){return Set2}),__webpack_require__.d(color_schemes_namespaceObject,"schemeSet3",function(){return Set3}),__webpack_require__.d(color_schemes_namespaceObject,"schemeBlues",function(){return Blues_scheme}),__webpack_require__.d(color_schemes_namespaceObject,"schemeBrBG",function(){return BrBG_scheme}),__webpack_require__.d(color_schemes_namespaceObject,"schemePRGn",function(){return PRGn_scheme}),__webpack_require__.d(color_schemes_namespaceObject,"schemePiYG",function(){return PiYG_scheme}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateBrBG",function(){return BrBG}),__webpack_require__.d(color_schemes_namespaceObject,"interpolatePRGn",function(){return PRGn}),__webpack_require__.d(color_schemes_namespaceObject,"interpolatePiYG",function(){return PiYG}),__webpack_require__.d(color_schemes_namespaceObject,"interpolatePuOr",function(){return PuOr}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateRdBu",function(){return RdBu}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateRdGy",function(){return RdGy}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateRdYlBu",function(){return RdYlBu}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateRdYlGn",function(){return RdYlGn}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateSpectral",function(){return Spectral}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateBlues",function(){return Blues}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateGreens",function(){return Greens}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateGreys",function(){return Greys}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateOranges",function(){return Oranges}),__webpack_require__.d(color_schemes_namespaceObject,"interpolatePurples",function(){return Purples}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateReds",function(){return Reds}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateViridis",function(){return sequential_multi_viridis}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateInferno",function(){return viridis_inferno}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateMagma",function(){return viridis_magma}),__webpack_require__.d(color_schemes_namespaceObject,"interpolatePlasma",function(){return viridis_plasma}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateWarm",function(){return rainbow_warm}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateCool",function(){return rainbow_cool}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateCubehelixDefault",function(){return sequential_multi_cubehelix}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateBuGn",function(){return BuGn}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateBuPu",function(){return BuPu}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateGnBu",function(){return GnBu}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateOrRd",function(){return OrRd}),__webpack_require__.d(color_schemes_namespaceObject,"interpolatePuBuGn",function(){return PuBuGn}),__webpack_require__.d(color_schemes_namespaceObject,"interpolatePuBu",function(){return PuBu}),__webpack_require__.d(color_schemes_namespaceObject,"interpolatePuRd",function(){return PuRd}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateRdPu",function(){return RdPu}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateYlGnBu",function(){return YlGnBu}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateYlGn",function(){return YlGn}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateYlOrBr",function(){return YlOrBr}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateYlOrRd",function(){return YlOrRd}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateRainbow",function(){return sequential_multi_rainbow});var namespace_namespaceObject={};__webpack_require__.r(namespace_namespaceObject),__webpack_require__.d(namespace_namespaceObject,"UNIT_GLOBAL_NAMESPACE",function(){return UNIT_GLOBAL_NAMESPACE}),__webpack_require__.d(namespace_namespaceObject,"UNIT_LOCAL_NAMESPACE",function(){return UNIT_LOCAL_NAMESPACE}),__webpack_require__.d(namespace_namespaceObject,"LAYER_LOCAL_NAMESPACE",function(){return LAYER_LOCAL_NAMESPACE}),__webpack_require__.d(namespace_namespaceObject,"LAYER_GLOBAL_NAMESPACE",function(){return LAYER_GLOBAL_NAMESPACE}),__webpack_require__.d(namespace_namespaceObject,"GROUP_GLOBAL_NAMESPACE",function(){return GROUP_GLOBAL_NAMESPACE}),__webpack_require__.d(namespace_namespaceObject,"GROUP_LOCAL_NAMESPACE",function(){return GROUP_LOCAL_NAMESPACE}),__webpack_require__.d(namespace_namespaceObject,"CANVAS_LOCAL_NAMESPACE",function(){return CANVAS_LOCAL_NAMESPACE}),__webpack_require__.d(namespace_namespaceObject,"CANVAS_GLOBAL_NAMESPACE",function(){return CANVAS_GLOBAL_NAMESPACE});var actions_namespaceObject={};__webpack_require__.r(actions_namespaceObject),__webpack_require__.d(actions_namespaceObject,"DRAG",function(){return DRAG}),__webpack_require__.d(actions_namespaceObject,"HOVER",function(){return HOVER}),__webpack_require__.d(actions_namespaceObject,"SELECTIONDRAG",function(){return SELECTIONDRAG}),__webpack_require__.d(actions_namespaceObject,"CLICK",function(){return CLICK}),__webpack_require__.d(actions_namespaceObject,"LONGTOUCH",function(){return LONGTOUCH}),__webpack_require__.d(actions_namespaceObject,"TOUCHDRAG",function(){return TOUCHDRAG}),__webpack_require__.d(actions_namespaceObject,"ALL_ACTIONS",function(){return ALL_ACTIONS});var enums_selection_namespaceObject={};__webpack_require__.r(enums_selection_namespaceObject),__webpack_require__.d(enums_selection_namespaceObject,"SELECTION_NEW_ENTRY",function(){return SELECTION_NEW_ENTRY}),__webpack_require__.d(enums_selection_namespaceObject,"SELECTION_NEW_EXIT",function(){return SELECTION_NEW_EXIT}),__webpack_require__.d(enums_selection_namespaceObject,"SELECTION_NULL",function(){return SELECTION_NULL}),__webpack_require__.d(enums_selection_namespaceObject,"SELECTION_OLD_ENTRY",function(){return SELECTION_OLD_ENTRY}),__webpack_require__.d(enums_selection_namespaceObject,"SELECTION_OLD_EXIT",function(){return SELECTION_OLD_EXIT});var behaviours_namespaceObject={};__webpack_require__.r(behaviours_namespaceObject),__webpack_require__.d(behaviours_namespaceObject,"BRUSH",function(){return BRUSH}),__webpack_require__.d(behaviours_namespaceObject,"HIGHLIGHT",function(){return HIGHLIGHT}),__webpack_require__.d(behaviours_namespaceObject,"TOOLTIP",function(){return TOOLTIP}),__webpack_require__.d(behaviours_namespaceObject,"FILTER",function(){return FILTER}),__webpack_require__.d(behaviours_namespaceObject,"SELECT",function(){return SELECT});var behavioural_namespaceObject={};__webpack_require__.r(behavioural_namespaceObject),__webpack_require__.d(behavioural_namespaceObject,"HighlightBeahviour",function(){return highlight_HighlightBehaviour}),__webpack_require__.d(behavioural_namespaceObject,"BrushBehaviour",function(){return brush_BrushBehaviour}),__webpack_require__.d(behavioural_namespaceObject,"FilterBehaviour",function(){return filter_FilterBehaviour}),__webpack_require__.d(behavioural_namespaceObject,"SelectBehaviour",function(){return select_SelectBehaviour});var side_effects_namespaceObject={};__webpack_require__.r(side_effects_namespaceObject),__webpack_require__.d(side_effects_namespaceObject,"SelectionBox",function(){return selection_box}),__webpack_require__.d(side_effects_namespaceObject,"Tooltip",function(){return side_effects_tooltip_Tooltip}),__webpack_require__.d(side_effects_namespaceObject,"Crossline",function(){return crossline_Crossline}),__webpack_require__.d(side_effects_namespaceObject,"PlotHighlighter",function(){return plot_highlighter_PlotHighlighter}),__webpack_require__.d(side_effects_namespaceObject,"FilterEffect",function(){return FilterEffect}),__webpack_require__.d(side_effects_namespaceObject,"PersistentAnchors",function(){return persistent_anchors_PersistentAnchors}),__webpack_require__.d(side_effects_namespaceObject,"BrushAnchors",function(){return brush_anchors_BrushAnchors}),__webpack_require__.d(side_effects_namespaceObject,"AnchorEffect",function(){return anchors_AnchorEffect});var axis_orientation_namespaceObject={};__webpack_require__.r(axis_orientation_namespaceObject),__webpack_require__.d(axis_orientation_namespaceObject,"BOTTOM",function(){return axis_orientation_BOTTOM}),__webpack_require__.d(axis_orientation_namespaceObject,"TOP",function(){return axis_orientation_TOP}),__webpack_require__.d(axis_orientation_namespaceObject,"LEFT",function(){return axis_orientation_LEFT}),__webpack_require__.d(axis_orientation_namespaceObject,"RIGHT",function(){return axis_orientation_RIGHT}),__webpack_require__.d(axis_orientation_namespaceObject,"axisOrientationMap",function(){return axisOrientationMap});var scale_type_namespaceObject={};__webpack_require__.r(scale_type_namespaceObject),__webpack_require__.d(scale_type_namespaceObject,"LINEAR",function(){return LINEAR}),__webpack_require__.d(scale_type_namespaceObject,"BAND",function(){return BAND}),__webpack_require__.d(scale_type_namespaceObject,"TIME",function(){return TIME}),__webpack_require__.d(scale_type_namespaceObject,"COLOR",function(){return scale_type_COLOR}),__webpack_require__.d(scale_type_namespaceObject,"ORDINAL",function(){return ORDINAL}),__webpack_require__.d(scale_type_namespaceObject,"QUANTIZE",function(){return QUANTIZE}),__webpack_require__.d(scale_type_namespaceObject,"QUANTILE",function(){return QUANTILE}),__webpack_require__.d(scale_type_namespaceObject,"LOG",function(){return LOG}),__webpack_require__.d(scale_type_namespaceObject,"POW",function(){return POW}),__webpack_require__.d(scale_type_namespaceObject,"IDENTITY",function(){return scale_type_IDENTITY}),__webpack_require__.d(scale_type_namespaceObject,"SEQUENTIAL",function(){return SEQUENTIAL}),__webpack_require__.d(scale_type_namespaceObject,"THRESHOLD",function(){return THRESHOLD});var layer_types_namespaceObject={};__webpack_require__.r(layer_types_namespaceObject),__webpack_require__.d(layer_types_namespaceObject,"AREA_LAYER",function(){return layer_types_AREA_LAYER}),__webpack_require__.d(layer_types_namespaceObject,"ARC_LAYER",function(){return layer_types_ARC_LAYER}),__webpack_require__.d(layer_types_namespaceObject,"LINE_LAYER",function(){return layer_types_LINE_LAYER}),__webpack_require__.d(layer_types_namespaceObject,"TEXT_LAYER",function(){return layer_types_TEXT_LAYER}),__webpack_require__.d(layer_types_namespaceObject,"POINT_LAYER",function(){return layer_types_POINT_LAYER}),__webpack_require__.d(layer_types_namespaceObject,"BAR_LAYER",function(){return layer_types_BAR_LAYER}),__webpack_require__.d(layer_types_namespaceObject,"TICK_LAYER",function(){return layer_types_TICK_LAYER}),__webpack_require__.d(layer_types_namespaceObject,"SIMPLE_LAYER",function(){return layer_types_SIMPLE_LAYER}),__webpack_require__.d(layer_types_namespaceObject,"BASE_LAYER",function(){return layer_types_BASE_LAYER});var firebolt_behavioural_namespaceObject={};__webpack_require__.r(firebolt_behavioural_namespaceObject),__webpack_require__.d(firebolt_behavioural_namespaceObject,"SelectBehaviour",function(){return behavioural_select_SelectBehaviour});var firebolt_side_effects_namespaceObject={};__webpack_require__.r(firebolt_side_effects_namespaceObject),__webpack_require__.d(firebolt_side_effects_namespaceObject,"SelectionBox",function(){return side_effects_selection_box}),__webpack_require__.d(firebolt_side_effects_namespaceObject,"LegendHighlighter",function(){return legend_highlighter_LegendHighlighter});var operators_namespaceObject={};__webpack_require__.r(operators_namespaceObject),__webpack_require__.d(operators_namespaceObject,"share",function(){return operators_share}),__webpack_require__.d(operators_namespaceObject,"html",function(){return operators_html});var dist_datamodel=__webpack_require__(0),datamodel_default=__webpack_require__.n(dist_datamodel),ascending=function(a,b){return ab?1:a>=b?0:NaN},bisector=function(compare){return 1===compare.length&&(compare=function ascendingComparator(f){return function(d,x){return ascending(f(d),x)}}(compare)),{left:function left(a,x,lo,hi){for(null==lo&&(lo=0),null==hi&&(hi=a.length);lo>>1;compare(a[mid],x)<0?lo=mid+1:hi=mid}return lo},right:function right(a,x,lo,hi){for(null==lo&&(lo=0),null==hi&&(hi=a.length);lo>>1;compare(a[mid],x)>0?hi=mid:lo=mid+1}return lo}}};var ascendingBisect=bisector(ascending),bisectRight=ascendingBisect.right,bisect=(ascendingBisect.left,bisectRight);var number=function(x){return null===x?NaN:+x},array_array=Array.prototype,src_range=(array_array.slice,array_array.map,function(start,stop,step){start=+start,stop=+stop,step=(n=arguments.length)<2?(stop=start,start=0,1):n<3?1:+step;for(var i=-1,n=0|Math.max(0,Math.ceil((stop-start)/step)),range=new Array(n);++i0)return[start];if((reverse=stop0)for(start=Math.ceil(start/step),stop=Math.floor(stop/step),ticks=new Array(n=Math.ceil(stop-start+1));++i=0?(error>=e10?10:error>=e5?5:error>=e2?2:1)*Math.pow(10,power):-Math.pow(10,-power)/(error>=e10?10:error>=e5?5:error>=e2?2:1)}function tickStep(start,stop,count){var step0=Math.abs(stop-start)/Math.max(0,count),step1=Math.pow(10,Math.floor(Math.log(step0)/Math.LN10)),error=step0/step1;return error>=e10?step1*=10:error>=e5?step1*=5:error>=e2&&(step1*=2),stop=1)return+valueof(values[n-1],n-1,values);var n,i=(n-1)*p,i0=Math.floor(i),value0=+valueof(values[i0],i0,values);return value0+(+valueof(values[i0+1],i0+1,values)-value0)*(i-i0)}};function map_Map(){}function map_map(object,f){var map=new map_Map;if(object instanceof map_Map)object.each(function(value,key){map.set(key,value)});else if(Array.isArray(object)){var o,i=-1,n=object.length;if(null==f)for(;++i=keys.length)return null!=_sortValues&&array.sort(_sortValues),null!=_rollup?_rollup(array):array;for(var keyValue,value,values,i=-1,n=array.length,key=keys[depth++],valuesByKey=src_map(),result=createResult();++ikeys.length)return map;var array,sortKey=_sortKeys[depth-1];return null!=_rollup&&depth>=keys.length?array=map.entries():(array=[],map.each(function(v,k){array.push({key:k,values:_entries(v,depth)})})),null!=sortKey?array.sort(function(a,b){return sortKey(a.key,b.key)}):array}(apply(array,0,createMap,setMap),0)},key:function key(d){return keys.push(d),nest},sortKeys:function sortKeys(order){return _sortKeys[keys.length-1]=order,nest},sortValues:function sortValues(order){return _sortValues=order,nest},rollup:function rollup(f){return _rollup=f,nest}}};function createObject(){return{}}function setObject(object,key,value){object[key]=value}function createMap(){return src_map()}function setMap(map,key,value){map.set(key,value)}function set_Set(){}var proto=src_map.prototype;function set_set(object,f){var set=new set_Set;if(object instanceof set_Set)object.each(function(value){set.add(value)});else if(object){var i=-1,n=object.length;if(null==f)for(;++i1?+r1:lo,reverse=range[1]range[1-reverse]))return a=Math.max(0,getClosestIndexOf(values,lo)),hiIndex=getClosestIndexOf(values,hi),b=lo===hi?a:Math.max(a,hiIndex-1),reverse&&(t=a,a=n-b,b=n-t),a>b?void 0:domain().slice(a,b+1)},scale.invert=function(r0,r1){var a,t,lo=+r0,hi=arguments.length>1?+r1:lo,reverse=range[1]range[1-reverse]))return a=Math.max(0,getClosestIndexOf(values,lo,"left")),domain()[reverse?n-a:a]},rescale()}function getClosestIndexOf(arr,value,side){for(var highVal,mid,d1,low=0,high=arr.length-1;lowvalue?0===high?high:"left"===side?high-1:high:high===arr.length-1?high:"left"===side?high:high+1:high}var define=function(constructor,factory,prototype){constructor.prototype=factory.prototype=prototype,prototype.constructor=constructor};function extend(parent,definition){var prototype=Object.create(parent.prototype);for(var key in definition)prototype[key]=definition[key];return prototype}function Color(){}var reI="\\s*([+-]?\\d+)\\s*",reN="\\s*([+-]?\\d*\\.?\\d+(?:[eE][+-]?\\d+)?)\\s*",reP="\\s*([+-]?\\d*\\.?\\d+(?:[eE][+-]?\\d+)?)%\\s*",reHex3=/^#([0-9a-f]{3})$/,reHex6=/^#([0-9a-f]{6})$/,reRgbInteger=new RegExp("^rgb\\("+[reI,reI,reI]+"\\)$"),reRgbPercent=new RegExp("^rgb\\("+[reP,reP,reP]+"\\)$"),reRgbaInteger=new RegExp("^rgba\\("+[reI,reI,reI,reN]+"\\)$"),reRgbaPercent=new RegExp("^rgba\\("+[reP,reP,reP,reN]+"\\)$"),reHslPercent=new RegExp("^hsl\\("+[reN,reP,reP]+"\\)$"),reHslaPercent=new RegExp("^hsla\\("+[reN,reP,reP,reN]+"\\)$"),named={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074};function color_color(format){var m;return format=(format+"").trim().toLowerCase(),(m=reHex3.exec(format))?new Rgb((m=parseInt(m[1],16))>>8&15|m>>4&240,m>>4&15|240&m,(15&m)<<4|15&m,1):(m=reHex6.exec(format))?rgbn(parseInt(m[1],16)):(m=reRgbInteger.exec(format))?new Rgb(m[1],m[2],m[3],1):(m=reRgbPercent.exec(format))?new Rgb(255*m[1]/100,255*m[2]/100,255*m[3]/100,1):(m=reRgbaInteger.exec(format))?rgba(m[1],m[2],m[3],m[4]):(m=reRgbaPercent.exec(format))?rgba(255*m[1]/100,255*m[2]/100,255*m[3]/100,m[4]):(m=reHslPercent.exec(format))?hsla(m[1],m[2]/100,m[3]/100,1):(m=reHslaPercent.exec(format))?hsla(m[1],m[2]/100,m[3]/100,m[4]):named.hasOwnProperty(format)?rgbn(named[format]):"transparent"===format?new Rgb(NaN,NaN,NaN,0):null}function rgbn(n){return new Rgb(n>>16&255,n>>8&255,255&n,1)}function rgba(r,g,b,a){return a<=0&&(r=g=b=NaN),new Rgb(r,g,b,a)}function rgbConvert(o){return o instanceof Color||(o=color_color(o)),o?new Rgb((o=o.rgb()).r,o.g,o.b,o.opacity):new Rgb}function color_rgb(r,g,b,opacity){return 1===arguments.length?rgbConvert(r):new Rgb(r,g,b,null==opacity?1:opacity)}function Rgb(r,g,b,opacity){this.r=+r,this.g=+g,this.b=+b,this.opacity=+opacity}function _hex(value){return((value=Math.max(0,Math.min(255,Math.round(value)||0)))<16?"0":"")+value.toString(16)}function hsla(h,s,l,a){return a<=0?h=s=l=NaN:l<=0||l>=1?h=s=NaN:s<=0&&(h=NaN),new Hsl(h,s,l,a)}function hsl(h,s,l,opacity){return 1===arguments.length?function hslConvert(o){if(o instanceof Hsl)return new Hsl(o.h,o.s,o.l,o.opacity);if(o instanceof Color||(o=color_color(o)),!o)return new Hsl;if(o instanceof Hsl)return o;var r=(o=o.rgb()).r/255,g=o.g/255,b=o.b/255,min=Math.min(r,g,b),max=Math.max(r,g,b),h=NaN,s=max-min,l=(max+min)/2;return s?(h=r===max?(g-b)/s+6*(g0&&l<1?0:h,new Hsl(h,s,l,o.opacity)}(h):new Hsl(h,s,l,null==opacity?1:opacity)}function Hsl(h,s,l,opacity){this.h=+h,this.s=+s,this.l=+l,this.opacity=+opacity}function hsl2rgb(h,m1,m2){return 255*(h<60?m1+(m2-m1)*h/60:h<180?m2:h<240?m1+(m2-m1)*(240-h)/60:m1)}define(Color,color_color,{displayable:function displayable(){return this.rgb().displayable()},hex:function hex(){return this.rgb().hex()},toString:function toString(){return this.rgb()+""}}),define(Rgb,color_rgb,extend(Color,{brighter:function brighter(k){return k=null==k?1/.7:Math.pow(1/.7,k),new Rgb(this.r*k,this.g*k,this.b*k,this.opacity)},darker:function darker(k){return k=null==k?.7:Math.pow(.7,k),new Rgb(this.r*k,this.g*k,this.b*k,this.opacity)},rgb:function rgb(){return this},displayable:function displayable(){return 0<=this.r&&this.r<=255&&0<=this.g&&this.g<=255&&0<=this.b&&this.b<=255&&0<=this.opacity&&this.opacity<=1},hex:function hex(){return"#"+_hex(this.r)+_hex(this.g)+_hex(this.b)},toString:function toString(){var a=this.opacity;return(1===(a=isNaN(a)?1:Math.max(0,Math.min(1,a)))?"rgb(":"rgba(")+Math.max(0,Math.min(255,Math.round(this.r)||0))+", "+Math.max(0,Math.min(255,Math.round(this.g)||0))+", "+Math.max(0,Math.min(255,Math.round(this.b)||0))+(1===a?")":", "+a+")")}})),define(Hsl,hsl,extend(Color,{brighter:function brighter(k){return k=null==k?1/.7:Math.pow(1/.7,k),new Hsl(this.h,this.s,this.l*k,this.opacity)},darker:function darker(k){return k=null==k?.7:Math.pow(.7,k),new Hsl(this.h,this.s,this.l*k,this.opacity)},rgb:function rgb(){var h=this.h%360+360*(this.h<0),s=isNaN(h)||isNaN(this.s)?0:this.s,l=this.l,m2=l+(l<.5?l:1-l)*s,m1=2*l-m2;return new Rgb(hsl2rgb(h>=240?h-240:h+120,m1,m2),hsl2rgb(h,m1,m2),hsl2rgb(h<120?h+240:h-120,m1,m2),this.opacity)},displayable:function displayable(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1}}));var deg2rad=Math.PI/180,rad2deg=180/Math.PI,Xn=.96422,Yn=1,Zn=.82521,lab_t0=4/29,lab_t1=6/29,t2=3*lab_t1*lab_t1,t3=lab_t1*lab_t1*lab_t1;function labConvert(o){if(o instanceof Lab)return new Lab(o.l,o.a,o.b,o.opacity);if(o instanceof Hcl){if(isNaN(o.h))return new Lab(o.l,0,0,o.opacity);var h=o.h*deg2rad;return new Lab(o.l,Math.cos(h)*o.c,Math.sin(h)*o.c,o.opacity)}o instanceof Rgb||(o=rgbConvert(o));var x,z,r=rgb2lrgb(o.r),g=rgb2lrgb(o.g),b=rgb2lrgb(o.b),y=xyz2lab((.2225045*r+.7168786*g+.0606169*b)/Yn);return r===g&&g===b?x=z=y:(x=xyz2lab((.4360747*r+.3850649*g+.1430804*b)/Xn),z=xyz2lab((.0139322*r+.0971045*g+.7141733*b)/Zn)),new Lab(116*y-16,500*(x-y),200*(y-z),o.opacity)}function lab(l,a,b,opacity){return 1===arguments.length?labConvert(l):new Lab(l,a,b,null==opacity?1:opacity)}function Lab(l,a,b,opacity){this.l=+l,this.a=+a,this.b=+b,this.opacity=+opacity}function xyz2lab(t){return t>t3?Math.pow(t,1/3):t/t2+lab_t0}function lab2xyz(t){return t>lab_t1?t*t*t:t2*(t-lab_t0)}function lrgb2rgb(x){return 255*(x<=.0031308?12.92*x:1.055*Math.pow(x,1/2.4)-.055)}function rgb2lrgb(x){return(x/=255)<=.04045?x/12.92:Math.pow((x+.055)/1.055,2.4)}function hclConvert(o){if(o instanceof Hcl)return new Hcl(o.h,o.c,o.l,o.opacity);if(o instanceof Lab||(o=labConvert(o)),0===o.a&&0===o.b)return new Hcl(NaN,0,o.l,o.opacity);var h=Math.atan2(o.b,o.a)*rad2deg;return new Hcl(h<0?h+360:h,Math.sqrt(o.a*o.a+o.b*o.b),o.l,o.opacity)}function hcl(h,c,l,opacity){return 1===arguments.length?hclConvert(h):new Hcl(h,c,l,null==opacity?1:opacity)}function Hcl(h,c,l,opacity){this.h=+h,this.c=+c,this.l=+l,this.opacity=+opacity}define(Lab,lab,extend(Color,{brighter:function brighter(k){return new Lab(this.l+18*(null==k?1:k),this.a,this.b,this.opacity)},darker:function darker(k){return new Lab(this.l-18*(null==k?1:k),this.a,this.b,this.opacity)},rgb:function rgb(){var y=(this.l+16)/116,x=isNaN(this.a)?y:y+this.a/500,z=isNaN(this.b)?y:y-this.b/200;return new Rgb(lrgb2rgb(3.1338561*(x=Xn*lab2xyz(x))-1.6168667*(y=Yn*lab2xyz(y))-.4906146*(z=Zn*lab2xyz(z))),lrgb2rgb(-.9787684*x+1.9161415*y+.033454*z),lrgb2rgb(.0719453*x-.2289914*y+1.4052427*z),this.opacity)}})),define(Hcl,hcl,extend(Color,{brighter:function brighter(k){return new Hcl(this.h,this.c,this.l+18*(null==k?1:k),this.opacity)},darker:function darker(k){return new Hcl(this.h,this.c,this.l-18*(null==k?1:k),this.opacity)},rgb:function rgb(){return labConvert(this).rgb()}}));var A=-.14861,B=1.78277,C=-.29227,cubehelix_D=-.90649,E=1.97294,ED=E*cubehelix_D,EB=E*B,BC_DA=B*C-cubehelix_D*A;function cubehelix_cubehelix(h,s,l,opacity){return 1===arguments.length?function cubehelixConvert(o){if(o instanceof Cubehelix)return new Cubehelix(o.h,o.s,o.l,o.opacity);o instanceof Rgb||(o=rgbConvert(o));var r=o.r/255,g=o.g/255,b=o.b/255,l=(BC_DA*b+ED*r-EB*g)/(BC_DA+ED-EB),bl=b-l,k=(E*(g-l)-C*bl)/cubehelix_D,s=Math.sqrt(k*k+bl*bl)/(E*l*(1-l)),h=s?Math.atan2(k,bl)*rad2deg-120:NaN;return new Cubehelix(h<0?h+360:h,s,l,o.opacity)}(h):new Cubehelix(h,s,l,null==opacity?1:opacity)}function Cubehelix(h,s,l,opacity){this.h=+h,this.s=+s,this.l=+l,this.opacity=+opacity}function basis(t1,v0,v1,v2,v3){var t2=t1*t1,t3=t2*t1;return((1-3*t1+3*t2-t3)*v0+(4-6*t2+3*t3)*v1+(1+3*t1+3*t2-3*t3)*v2+t3*v3)/6}define(Cubehelix,cubehelix_cubehelix,extend(Color,{brighter:function brighter(k){return k=null==k?1/.7:Math.pow(1/.7,k),new Cubehelix(this.h,this.s,this.l*k,this.opacity)},darker:function darker(k){return k=null==k?.7:Math.pow(.7,k),new Cubehelix(this.h,this.s,this.l*k,this.opacity)},rgb:function rgb(){var h=isNaN(this.h)?0:(this.h+120)*deg2rad,l=+this.l,a=isNaN(this.s)?0:this.s*l*(1-l),cosh=Math.cos(h),sinh=Math.sin(h);return new Rgb(255*(l+a*(A*cosh+B*sinh)),255*(l+a*(C*cosh+cubehelix_D*sinh)),255*(l+a*(E*cosh)),this.opacity)}}));var src_constant=function(x){return function(){return x}};function linear(a,d){return function(t){return a+t*d}}function color_hue(a,b){var d=b-a;return d?linear(a,d>180||d<-180?d-360*Math.round(d/360):d):src_constant(isNaN(a)?b:a)}function gamma(y){return 1==(y=+y)?nogamma:function(a,b){return b-a?function exponential(a,b,y){return a=Math.pow(a,y),b=Math.pow(b,y)-a,y=1/y,function(t){return Math.pow(a+t*b,y)}}(a,b,y):src_constant(isNaN(a)?b:a)}}function nogamma(a,b){var d=b-a;return d?linear(a,d):src_constant(isNaN(a)?b:a)}var src_rgb=function rgbGamma(y){var color=gamma(y);function rgb(start,end){var r=color((start=color_rgb(start)).r,(end=color_rgb(end)).r),g=color(start.g,end.g),b=color(start.b,end.b),opacity=nogamma(start.opacity,end.opacity);return function(t){return start.r=r(t),start.g=g(t),start.b=b(t),start.opacity=opacity(t),start+""}}return rgb.gamma=rgbGamma,rgb}(1);function rgbSpline(spline){return function(colors){var i,color,n=colors.length,r=new Array(n),g=new Array(n),b=new Array(n);for(i=0;i=1?(t=1,n-1):Math.floor(t*n),v1=values[i],v2=values[i+1],v0=i>0?values[i-1]:2*v1-v2,v3=ibi&&(bs=b.slice(bi,bs),s[i]?s[i]+=bs:s[++i]=bs),(am=am[0])===(bm=bm[0])?s[i]?s[i]+=bm:s[++i]=bm:(s[++i]=null,q.push({i:i,x:src_number(am,bm)})),bi=reB.lastIndex;return bi180?b+=360:b-a>180&&(a+=360),q.push({i:s.push(pop(s)+"rotate(",null,degParen)-2,x:src_number(a,b)})):b&&s.push(pop(s)+"rotate("+b+degParen)}(a.rotate,b.rotate,s,q),function skewX(a,b,s,q){a!==b?q.push({i:s.push(pop(s)+"skewX(",null,degParen)-2,x:src_number(a,b)}):b&&s.push(pop(s)+"skewX("+b+degParen)}(a.skewX,b.skewX,s,q),function scale(xa,ya,xb,yb,s,q){if(xa!==xb||ya!==yb){var i=s.push(pop(s)+"scale(",null,",",null,")");q.push({i:i-4,x:src_number(xa,xb)},{i:i-2,x:src_number(ya,yb)})}else 1===xb&&1===yb||s.push(pop(s)+"scale("+xb+","+yb+")")}(a.scaleX,a.scaleY,b.scaleX,b.scaleY,s,q),a=b=null,function(t){for(var o,i=-1,n=q.length;++i2?polymap:bimap,output=input=null,scale}function scale(x){return(output||(output=piecewise(domain,range,clamp?function deinterpolateClamp(deinterpolate){return function(a,b){var d=deinterpolate(a=+a,b=+b);return function(x){return x<=a?0:x>=b?1:d(x)}}}(deinterpolate):deinterpolate,interpolate)))(+x)}return scale.invert=function(y){return(input||(input=piecewise(range,domain,deinterpolateLinear,clamp?function reinterpolateClamp(reinterpolate){return function(a,b){var r=reinterpolate(a=+a,b=+b);return function(t){return t<=0?a:t>=1?b:r(t)}}}(reinterpolate):reinterpolate)))(+y)},scale.domain=function(_){return arguments.length?(domain=src_array_map.call(_,d3_scale_src_number),rescale()):domain.slice()},scale.range=function(_){return arguments.length?(range=array_slice.call(_),rescale()):range.slice()},scale.rangeRound=function(_){return range=array_slice.call(_),interpolate=src_round,rescale()},scale.clamp=function(_){return arguments.length?(clamp=!!_,rescale()):clamp},scale.interpolate=function(_){return arguments.length?(interpolate=_,rescale()):interpolate},rescale()}var formatDecimal=function(x,p){if((i=(x=p?x.toExponential(p-1):x.toExponential()).indexOf("e"))<0)return null;var i,coefficient=x.slice(0,i);return[coefficient.length>1?coefficient[0]+coefficient.slice(2):coefficient,+x.slice(i+1)]},src_exponent=function(x){return(x=formatDecimal(Math.abs(x)))?x[1]:NaN},re=/^(?:(.)?([<>=^]))?([+\-( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?(~)?([a-z%])?$/i;function formatSpecifier(specifier){return new FormatSpecifier(specifier)}function FormatSpecifier(specifier){if(!(match=re.exec(specifier)))throw new Error("invalid format: "+specifier);var match;this.fill=match[1]||" ",this.align=match[2]||">",this.sign=match[3]||"-",this.symbol=match[4]||"",this.zero=!!match[5],this.width=match[6]&&+match[6],this.comma=!!match[7],this.precision=match[8]&&+match[8].slice(1),this.trim=!!match[9],this.type=match[10]||""}formatSpecifier.prototype=FormatSpecifier.prototype,FormatSpecifier.prototype.toString=function(){return this.fill+this.align+this.sign+this.symbol+(this.zero?"0":"")+(null==this.width?"":Math.max(1,0|this.width))+(this.comma?",":"")+(null==this.precision?"":"."+Math.max(0,0|this.precision))+(this.trim?"~":"")+this.type};var prefixExponent,defaultLocale_locale,defaultLocale_format,defaultLocale_formatPrefix,formatTrim=function(s){out:for(var i1,n=s.length,i=1,i0=-1;i0){if(!+s[i])break out;i0=0}}return i0>0?s.slice(0,i0)+s.slice(i1+1):s},formatRounded=function(x,p){var d=formatDecimal(x,p);if(!d)return x+"";var coefficient=d[0],exponent=d[1];return exponent<0?"0."+new Array(-exponent).join("0")+coefficient:coefficient.length>exponent+1?coefficient.slice(0,exponent+1)+"."+coefficient.slice(exponent+1):coefficient+new Array(exponent-coefficient.length+2).join("0")},formatTypes={"%":function _(x,p){return(100*x).toFixed(p)},b:function b(x){return Math.round(x).toString(2)},c:function c(x){return x+""},d:function d(x){return Math.round(x).toString(10)},e:function e(x,p){return x.toExponential(p)},f:function f(x,p){return x.toFixed(p)},g:function g(x,p){return x.toPrecision(p)},o:function o(x){return Math.round(x).toString(8)},p:function p(x,_p){return formatRounded(100*x,_p)},r:formatRounded,s:function(x,p){var d=formatDecimal(x,p);if(!d)return x+"";var coefficient=d[0],exponent=d[1],i=exponent-(prefixExponent=3*Math.max(-8,Math.min(8,Math.floor(exponent/3))))+1,n=coefficient.length;return i===n?coefficient:i>n?coefficient+new Array(i-n+1).join("0"):i>0?coefficient.slice(0,i)+"."+coefficient.slice(i):"0."+new Array(1-i).join("0")+formatDecimal(x,Math.max(0,p+i-1))[0]},X:function X(x){return Math.round(x).toString(16).toUpperCase()},x:function x(_x){return Math.round(_x).toString(16)}},src_identity=function(x){return x},prefixes=["y","z","a","f","p","n","µ","m","","k","M","G","T","P","E","Z","Y"],src_locale=function(locale){var group=locale.grouping&&locale.thousands?function(grouping,thousands){return function(value,width){for(var i=value.length,t=[],j=0,g=grouping[0],length=0;i>0&&g>0&&(length+g+1>width&&(g=Math.max(1,width-length)),t.push(value.substring(i-=g,i+g)),!((length+=g+1)>width));)g=grouping[j=(j+1)%grouping.length];return t.reverse().join(thousands)}}(locale.grouping,locale.thousands):src_identity,currency=locale.currency,decimal=locale.decimal,numerals=locale.numerals?function(numerals){return function(value){return value.replace(/[0-9]/g,function(i){return numerals[+i]})}}(locale.numerals):src_identity,percent=locale.percent||"%";function newFormat(specifier){var fill=(specifier=formatSpecifier(specifier)).fill,align=specifier.align,sign=specifier.sign,symbol=specifier.symbol,zero=specifier.zero,width=specifier.width,comma=specifier.comma,precision=specifier.precision,trim=specifier.trim,type=specifier.type;"n"===type?(comma=!0,type="g"):formatTypes[type]||(null==precision&&(precision=12),trim=!0,type="g"),(zero||"0"===fill&&"="===align)&&(zero=!0,fill="0",align="=");var prefix="$"===symbol?currency[0]:"#"===symbol&&/[boxX]/.test(type)?"0"+type.toLowerCase():"",suffix="$"===symbol?currency[1]:/[%p]/.test(type)?percent:"",formatType=formatTypes[type],maybeSuffix=/[defgprs%]/.test(type);function format(value){var i,n,c,valuePrefix=prefix,valueSuffix=suffix;if("c"===type)valueSuffix=formatType(value)+valueSuffix,value="";else{var valueNegative=(value=+value)<0;if(value=formatType(Math.abs(value),precision),trim&&(value=formatTrim(value)),valueNegative&&0==+value&&(valueNegative=!1),valuePrefix=(valueNegative?"("===sign?sign:"-":"-"===sign||"("===sign?"":sign)+valuePrefix,valueSuffix=("s"===type?prefixes[8+prefixExponent/3]:"")+valueSuffix+(valueNegative&&"("===sign?")":""),maybeSuffix)for(i=-1,n=value.length;++i(c=value.charCodeAt(i))||c>57){valueSuffix=(46===c?decimal+value.slice(i+1):value.slice(i))+valueSuffix,value=value.slice(0,i);break}}comma&&!zero&&(value=group(value,1/0));var length=valuePrefix.length+value.length+valueSuffix.length,padding=length>1)+valuePrefix+value+valueSuffix+padding.slice(length);break;default:value=padding+valuePrefix+value+valueSuffix}return numerals(value)}return precision=null==precision?6:/[gprs]/.test(type)?Math.max(1,Math.min(21,precision)):Math.max(0,Math.min(20,precision)),format.toString=function(){return specifier+""},format}return{format:newFormat,formatPrefix:function formatPrefix(specifier,value){var f=newFormat(((specifier=formatSpecifier(specifier)).type="f",specifier)),e=3*Math.max(-8,Math.min(8,Math.floor(src_exponent(value)/3))),k=Math.pow(10,-e),prefix=prefixes[8+e/3];return function(value){return f(k*value)+prefix}}}};!function defaultLocale(definition){return defaultLocale_locale=src_locale(definition),defaultLocale_format=defaultLocale_locale.format,defaultLocale_formatPrefix=defaultLocale_locale.formatPrefix,defaultLocale_locale}({decimal:".",thousands:",",grouping:[3],currency:["$",""]});var src_tickFormat=function(domain,count,specifier){var precision,start=domain[0],stop=domain[domain.length-1],step=tickStep(start,stop,null==count?10:count);switch((specifier=formatSpecifier(null==specifier?",f":specifier)).type){case"s":var value=Math.max(Math.abs(start),Math.abs(stop));return null!=specifier.precision||isNaN(precision=function(step,value){return Math.max(0,3*Math.max(-8,Math.min(8,Math.floor(src_exponent(value)/3)))-src_exponent(Math.abs(step)))}(step,value))||(specifier.precision=precision),defaultLocale_formatPrefix(specifier,value);case"":case"e":case"g":case"p":case"r":null!=specifier.precision||isNaN(precision=function(step,max){return step=Math.abs(step),max=Math.abs(max)-step,Math.max(0,src_exponent(max)-src_exponent(step))+1}(step,Math.max(Math.abs(start),Math.abs(stop))))||(specifier.precision=precision-("e"===specifier.type));break;case"f":case"%":null!=specifier.precision||isNaN(precision=function(step){return Math.max(0,-src_exponent(Math.abs(step)))}(step))||(specifier.precision=precision-2*("%"===specifier.type))}return defaultLocale_format(specifier)};function linearish(scale){var domain=scale.domain;return scale.ticks=function(count){var d=domain();return src_ticks(d[0],d[d.length-1],null==count?10:count)},scale.tickFormat=function(count,specifier){return src_tickFormat(domain(),count,specifier)},scale.nice=function(count){null==count&&(count=10);var step,d=domain(),i0=0,i1=d.length-1,start=d[i0],stop=d[i1];return stop0?step=tickIncrement(start=Math.floor(start/step)*step,stop=Math.ceil(stop/step)*step,count):step<0&&(step=tickIncrement(start=Math.ceil(start*step)/step,stop=Math.floor(stop*step)/step,count)),step>0?(d[i0]=Math.floor(start/step)*step,d[i1]=Math.ceil(stop/step)*step,domain(d)):step<0&&(d[i0]=Math.ceil(start*step)/step,d[i1]=Math.floor(stop*step)/step,domain(d)),scale},scale}function linear_linear(){var scale=continuous(deinterpolateLinear,src_number);return scale.copy=function(){return copy(scale,linear_linear())},linearish(scale)}function identity_identity(){var domain=[0,1];function scale(x){return+x}return scale.invert=scale,scale.domain=scale.range=function(_){return arguments.length?(domain=src_array_map.call(_,d3_scale_src_number),scale):domain.slice()},scale.copy=function(){return identity_identity().domain(domain)},linearish(scale)}var nice=function(domain,interval){var t,i0=0,i1=(domain=domain.slice()).length-1,x0=domain[i0],x1=domain[i1];return x10){for(;iv)break;z.push(t)}}else for(;i=1;--k)if(!((t=p*k)v)break;z.push(t)}}else z=src_ticks(i,j,Math.min(j-i,n)).map(pows);return r?z.reverse():z},scale.tickFormat=function(count,specifier){if(null==specifier&&(specifier=10===base?".0e":","),"function"!=typeof specifier&&(specifier=defaultLocale_format(specifier)),count===1/0)return specifier;null==count&&(count=10);var k=Math.max(1,base*count/scale.ticks().length);return function(d){var i=d/pows(Math.round(logs(d)));return i*base0?thresholds[i-1]:domain[0],i=n?[domain[n-1],x1]:[domain[i-1],domain[i]]},scale.copy=function(){return quantize_quantize().domain([x0,x1]).range(range)},linearish(scale)}function threshold_threshold(){var domain=[.5],range=[0,1],n=1;function scale(x){if(x<=x)return range[bisect(domain,x,0,n)]}return scale.domain=function(_){return arguments.length?(domain=array_slice.call(_),n=Math.min(domain.length,range.length-1),scale):domain.slice()},scale.range=function(_){return arguments.length?(range=array_slice.call(_),n=Math.min(domain.length,range.length-1),scale):range.slice()},scale.invertExtent=function(y){var i=range.indexOf(y);return[domain[i-1],domain[i]]},scale.copy=function(){return threshold_threshold().domain(domain).range(range)},scale}var interval_t0=new Date,interval_t1=new Date;function newInterval(floori,offseti,count,field){function interval(date){return floori(date=new Date(+date)),date}return interval.floor=interval,interval.ceil=function(date){return floori(date=new Date(date-1)),offseti(date,1),floori(date),date},interval.round=function(date){var d0=interval(date),d1=interval.ceil(date);return date-d00))return range;do{range.push(previous=new Date(+start)),offseti(start,step),floori(start)}while(previous=date)for(;floori(date),!test(date);)date.setTime(date-1)},function(date,step){if(date>=date)if(step<0)for(;++step<=0;)for(;offseti(date,-1),!test(date););else for(;--step>=0;)for(;offseti(date,1),!test(date););})},count&&(interval.count=function(start,end){return interval_t0.setTime(+start),interval_t1.setTime(+end),floori(interval_t0),floori(interval_t1),Math.floor(count(interval_t0,interval_t1))},interval.every=function(step){return step=Math.floor(step),isFinite(step)&&step>0?step>1?interval.filter(field?function(d){return field(d)%step==0}:function(d){return interval.count(0,d)%step==0}):interval:null}),interval}var millisecond_millisecond=newInterval(function(){},function(date,step){date.setTime(+date+step)},function(start,end){return end-start});millisecond_millisecond.every=function(k){return k=Math.floor(k),isFinite(k)&&k>0?k>1?newInterval(function(date){date.setTime(Math.floor(date/k)*k)},function(date,step){date.setTime(+date+step*k)},function(start,end){return(end-start)/k}):millisecond_millisecond:null};var src_millisecond=millisecond_millisecond,durationMinute=(millisecond_millisecond.range,6e4),durationWeek=6048e5,second_second=newInterval(function(date){date.setTime(date-date.getMilliseconds())},function(date,step){date.setTime(+date+1e3*step)},function(start,end){return(end-start)/1e3},function(date){return date.getUTCSeconds()}),src_second=second_second,minute_minute=(second_second.range,newInterval(function(date){date.setTime(date-date.getMilliseconds()-1e3*date.getSeconds())},function(date,step){date.setTime(+date+step*durationMinute)},function(start,end){return(end-start)/durationMinute},function(date){return date.getMinutes()})),src_minute=minute_minute,hour_hour=(minute_minute.range,newInterval(function(date){date.setTime(date-date.getMilliseconds()-1e3*date.getSeconds()-date.getMinutes()*durationMinute)},function(date,step){date.setTime(+date+36e5*step)},function(start,end){return(end-start)/36e5},function(date){return date.getHours()})),src_hour=hour_hour,day_day=(hour_hour.range,newInterval(function(date){date.setHours(0,0,0,0)},function(date,step){date.setDate(date.getDate()+step)},function(start,end){return(end-start-(end.getTimezoneOffset()-start.getTimezoneOffset())*durationMinute)/864e5},function(date){return date.getDate()-1})),src_day=day_day;day_day.range;function weekday(i){return newInterval(function(date){date.setDate(date.getDate()-(date.getDay()+7-i)%7),date.setHours(0,0,0,0)},function(date,step){date.setDate(date.getDate()+7*step)},function(start,end){return(end-start-(end.getTimezoneOffset()-start.getTimezoneOffset())*durationMinute)/durationWeek})}var sunday=weekday(0),monday=weekday(1),tuesday=weekday(2),wednesday=weekday(3),thursday=weekday(4),friday=weekday(5),saturday=weekday(6),month_month=(sunday.range,monday.range,tuesday.range,wednesday.range,thursday.range,friday.range,saturday.range,newInterval(function(date){date.setDate(1),date.setHours(0,0,0,0)},function(date,step){date.setMonth(date.getMonth()+step)},function(start,end){return end.getMonth()-start.getMonth()+12*(end.getFullYear()-start.getFullYear())},function(date){return date.getMonth()})),src_month=month_month,year_year=(month_month.range,newInterval(function(date){date.setMonth(0,1),date.setHours(0,0,0,0)},function(date,step){date.setFullYear(date.getFullYear()+step)},function(start,end){return end.getFullYear()-start.getFullYear()},function(date){return date.getFullYear()}));year_year.every=function(k){return isFinite(k=Math.floor(k))&&k>0?newInterval(function(date){date.setFullYear(Math.floor(date.getFullYear()/k)*k),date.setMonth(0,1),date.setHours(0,0,0,0)},function(date,step){date.setFullYear(date.getFullYear()+step*k)}):null};var src_year=year_year,utcMinute=(year_year.range,newInterval(function(date){date.setUTCSeconds(0,0)},function(date,step){date.setTime(+date+step*durationMinute)},function(start,end){return(end-start)/durationMinute},function(date){return date.getUTCMinutes()})),utcHour=(utcMinute.range,newInterval(function(date){date.setUTCMinutes(0,0,0)},function(date,step){date.setTime(+date+36e5*step)},function(start,end){return(end-start)/36e5},function(date){return date.getUTCHours()})),utcDay=(utcHour.range,newInterval(function(date){date.setUTCHours(0,0,0,0)},function(date,step){date.setUTCDate(date.getUTCDate()+step)},function(start,end){return(end-start)/864e5},function(date){return date.getUTCDate()-1})),src_utcDay=utcDay;utcDay.range;function utcWeekday(i){return newInterval(function(date){date.setUTCDate(date.getUTCDate()-(date.getUTCDay()+7-i)%7),date.setUTCHours(0,0,0,0)},function(date,step){date.setUTCDate(date.getUTCDate()+7*step)},function(start,end){return(end-start)/durationWeek})}var utcSunday=utcWeekday(0),utcMonday=utcWeekday(1),utcTuesday=utcWeekday(2),utcWednesday=utcWeekday(3),utcThursday=utcWeekday(4),utcFriday=utcWeekday(5),utcSaturday=utcWeekday(6),utcMonth=(utcSunday.range,utcMonday.range,utcTuesday.range,utcWednesday.range,utcThursday.range,utcFriday.range,utcSaturday.range,newInterval(function(date){date.setUTCDate(1),date.setUTCHours(0,0,0,0)},function(date,step){date.setUTCMonth(date.getUTCMonth()+step)},function(start,end){return end.getUTCMonth()-start.getUTCMonth()+12*(end.getUTCFullYear()-start.getUTCFullYear())},function(date){return date.getUTCMonth()})),utcYear=(utcMonth.range,newInterval(function(date){date.setUTCMonth(0,1),date.setUTCHours(0,0,0,0)},function(date,step){date.setUTCFullYear(date.getUTCFullYear()+step)},function(start,end){return end.getUTCFullYear()-start.getUTCFullYear()},function(date){return date.getUTCFullYear()}));utcYear.every=function(k){return isFinite(k=Math.floor(k))&&k>0?newInterval(function(date){date.setUTCFullYear(Math.floor(date.getUTCFullYear()/k)*k),date.setUTCMonth(0,1),date.setUTCHours(0,0,0,0)},function(date,step){date.setUTCFullYear(date.getUTCFullYear()+step*k)}):null};var src_utcYear=utcYear;utcYear.range;function localDate(d){if(0<=d.y&&d.y<100){var date=new Date(-1,d.m,d.d,d.H,d.M,d.S,d.L);return date.setFullYear(d.y),date}return new Date(d.y,d.m,d.d,d.H,d.M,d.S,d.L)}function utcDate(d){if(0<=d.y&&d.y<100){var date=new Date(Date.UTC(-1,d.m,d.d,d.H,d.M,d.S,d.L));return date.setUTCFullYear(d.y),date}return new Date(Date.UTC(d.y,d.m,d.d,d.H,d.M,d.S,d.L))}function newYear(y){return{y:y,m:0,d:1,H:0,M:0,S:0,L:0}}var src_defaultLocale_locale,timeFormat,utcFormat,utcParse,pads={"-":"",_:" ",0:"0"},numberRe=/^\s*\d+/,percentRe=/^%/,requoteRe=/[\\^$*+?|[\]().{}]/g;function locale_pad(value,fill,width){var sign=value<0?"-":"",string=(sign?-value:value)+"",length=string.length;return sign+(length68?1900:2e3),i+n[0].length):-1}function parseZone(d,string,i){var n=/^(Z)|([+-]\d\d)(?::?(\d\d))?/.exec(string.slice(i,i+6));return n?(d.Z=n[1]?0:-(n[2]+(n[3]||"00")),i+n[0].length):-1}function parseMonthNumber(d,string,i){var n=numberRe.exec(string.slice(i,i+2));return n?(d.m=n[0]-1,i+n[0].length):-1}function parseDayOfMonth(d,string,i){var n=numberRe.exec(string.slice(i,i+2));return n?(d.d=+n[0],i+n[0].length):-1}function parseDayOfYear(d,string,i){var n=numberRe.exec(string.slice(i,i+3));return n?(d.m=0,d.d=+n[0],i+n[0].length):-1}function parseHour24(d,string,i){var n=numberRe.exec(string.slice(i,i+2));return n?(d.H=+n[0],i+n[0].length):-1}function parseMinutes(d,string,i){var n=numberRe.exec(string.slice(i,i+2));return n?(d.M=+n[0],i+n[0].length):-1}function parseSeconds(d,string,i){var n=numberRe.exec(string.slice(i,i+2));return n?(d.S=+n[0],i+n[0].length):-1}function parseMilliseconds(d,string,i){var n=numberRe.exec(string.slice(i,i+3));return n?(d.L=+n[0],i+n[0].length):-1}function parseMicroseconds(d,string,i){var n=numberRe.exec(string.slice(i,i+6));return n?(d.L=Math.floor(n[0]/1e3),i+n[0].length):-1}function parseLiteralPercent(d,string,i){var n=percentRe.exec(string.slice(i,i+1));return n?i+n[0].length:-1}function parseUnixTimestamp(d,string,i){var n=numberRe.exec(string.slice(i));return n?(d.Q=+n[0],i+n[0].length):-1}function parseUnixTimestampSeconds(d,string,i){var n=numberRe.exec(string.slice(i));return n?(d.Q=1e3*+n[0],i+n[0].length):-1}function formatDayOfMonth(d,p){return locale_pad(d.getDate(),p,2)}function formatHour24(d,p){return locale_pad(d.getHours(),p,2)}function formatHour12(d,p){return locale_pad(d.getHours()%12||12,p,2)}function formatDayOfYear(d,p){return locale_pad(1+src_day.count(src_year(d),d),p,3)}function formatMilliseconds(d,p){return locale_pad(d.getMilliseconds(),p,3)}function formatMicroseconds(d,p){return formatMilliseconds(d,p)+"000"}function formatMonthNumber(d,p){return locale_pad(d.getMonth()+1,p,2)}function formatMinutes(d,p){return locale_pad(d.getMinutes(),p,2)}function formatSeconds(d,p){return locale_pad(d.getSeconds(),p,2)}function formatWeekdayNumberMonday(d){var day=d.getDay();return 0===day?7:day}function formatWeekNumberSunday(d,p){return locale_pad(sunday.count(src_year(d),d),p,2)}function formatWeekNumberISO(d,p){var day=d.getDay();return d=day>=4||0===day?thursday(d):thursday.ceil(d),locale_pad(thursday.count(src_year(d),d)+(4===src_year(d).getDay()),p,2)}function formatWeekdayNumberSunday(d){return d.getDay()}function formatWeekNumberMonday(d,p){return locale_pad(monday.count(src_year(d),d),p,2)}function locale_formatYear(d,p){return locale_pad(d.getFullYear()%100,p,2)}function formatFullYear(d,p){return locale_pad(d.getFullYear()%1e4,p,4)}function formatZone(d){var z=d.getTimezoneOffset();return(z>0?"-":(z*=-1,"+"))+locale_pad(z/60|0,"0",2)+locale_pad(z%60,"0",2)}function formatUTCDayOfMonth(d,p){return locale_pad(d.getUTCDate(),p,2)}function formatUTCHour24(d,p){return locale_pad(d.getUTCHours(),p,2)}function formatUTCHour12(d,p){return locale_pad(d.getUTCHours()%12||12,p,2)}function formatUTCDayOfYear(d,p){return locale_pad(1+src_utcDay.count(src_utcYear(d),d),p,3)}function formatUTCMilliseconds(d,p){return locale_pad(d.getUTCMilliseconds(),p,3)}function formatUTCMicroseconds(d,p){return formatUTCMilliseconds(d,p)+"000"}function formatUTCMonthNumber(d,p){return locale_pad(d.getUTCMonth()+1,p,2)}function formatUTCMinutes(d,p){return locale_pad(d.getUTCMinutes(),p,2)}function formatUTCSeconds(d,p){return locale_pad(d.getUTCSeconds(),p,2)}function formatUTCWeekdayNumberMonday(d){var dow=d.getUTCDay();return 0===dow?7:dow}function formatUTCWeekNumberSunday(d,p){return locale_pad(utcSunday.count(src_utcYear(d),d),p,2)}function formatUTCWeekNumberISO(d,p){var day=d.getUTCDay();return d=day>=4||0===day?utcThursday(d):utcThursday.ceil(d),locale_pad(utcThursday.count(src_utcYear(d),d)+(4===src_utcYear(d).getUTCDay()),p,2)}function formatUTCWeekdayNumberSunday(d){return d.getUTCDay()}function formatUTCWeekNumberMonday(d,p){return locale_pad(utcMonday.count(src_utcYear(d),d),p,2)}function formatUTCYear(d,p){return locale_pad(d.getUTCFullYear()%100,p,2)}function formatUTCFullYear(d,p){return locale_pad(d.getUTCFullYear()%1e4,p,4)}function formatUTCZone(){return"+0000"}function formatLiteralPercent(){return"%"}function formatUnixTimestamp(d){return+d}function formatUnixTimestampSeconds(d){return Math.floor(+d/1e3)}!function defaultLocale_defaultLocale(definition){return src_defaultLocale_locale=function formatLocale(locale){var locale_dateTime=locale.dateTime,locale_date=locale.date,locale_time=locale.time,locale_periods=locale.periods,locale_weekdays=locale.days,locale_shortWeekdays=locale.shortDays,locale_months=locale.months,locale_shortMonths=locale.shortMonths,periodRe=formatRe(locale_periods),periodLookup=formatLookup(locale_periods),weekdayRe=formatRe(locale_weekdays),weekdayLookup=formatLookup(locale_weekdays),shortWeekdayRe=formatRe(locale_shortWeekdays),shortWeekdayLookup=formatLookup(locale_shortWeekdays),monthRe=formatRe(locale_months),monthLookup=formatLookup(locale_months),shortMonthRe=formatRe(locale_shortMonths),shortMonthLookup=formatLookup(locale_shortMonths),formats={a:function formatShortWeekday(d){return locale_shortWeekdays[d.getDay()]},A:function formatWeekday(d){return locale_weekdays[d.getDay()]},b:function formatShortMonth(d){return locale_shortMonths[d.getMonth()]},B:function formatMonth(d){return locale_months[d.getMonth()]},c:null,d:formatDayOfMonth,e:formatDayOfMonth,f:formatMicroseconds,H:formatHour24,I:formatHour12,j:formatDayOfYear,L:formatMilliseconds,m:formatMonthNumber,M:formatMinutes,p:function formatPeriod(d){return locale_periods[+(d.getHours()>=12)]},Q:formatUnixTimestamp,s:formatUnixTimestampSeconds,S:formatSeconds,u:formatWeekdayNumberMonday,U:formatWeekNumberSunday,V:formatWeekNumberISO,w:formatWeekdayNumberSunday,W:formatWeekNumberMonday,x:null,X:null,y:locale_formatYear,Y:formatFullYear,Z:formatZone,"%":formatLiteralPercent},utcFormats={a:function formatUTCShortWeekday(d){return locale_shortWeekdays[d.getUTCDay()]},A:function formatUTCWeekday(d){return locale_weekdays[d.getUTCDay()]},b:function formatUTCShortMonth(d){return locale_shortMonths[d.getUTCMonth()]},B:function formatUTCMonth(d){return locale_months[d.getUTCMonth()]},c:null,d:formatUTCDayOfMonth,e:formatUTCDayOfMonth,f:formatUTCMicroseconds,H:formatUTCHour24,I:formatUTCHour12,j:formatUTCDayOfYear,L:formatUTCMilliseconds,m:formatUTCMonthNumber,M:formatUTCMinutes,p:function formatUTCPeriod(d){return locale_periods[+(d.getUTCHours()>=12)]},Q:formatUnixTimestamp,s:formatUnixTimestampSeconds,S:formatUTCSeconds,u:formatUTCWeekdayNumberMonday,U:formatUTCWeekNumberSunday,V:formatUTCWeekNumberISO,w:formatUTCWeekdayNumberSunday,W:formatUTCWeekNumberMonday,x:null,X:null,y:formatUTCYear,Y:formatUTCFullYear,Z:formatUTCZone,"%":formatLiteralPercent},parses={a:function parseShortWeekday(d,string,i){var n=shortWeekdayRe.exec(string.slice(i));return n?(d.w=shortWeekdayLookup[n[0].toLowerCase()],i+n[0].length):-1},A:function parseWeekday(d,string,i){var n=weekdayRe.exec(string.slice(i));return n?(d.w=weekdayLookup[n[0].toLowerCase()],i+n[0].length):-1},b:function parseShortMonth(d,string,i){var n=shortMonthRe.exec(string.slice(i));return n?(d.m=shortMonthLookup[n[0].toLowerCase()],i+n[0].length):-1},B:function parseMonth(d,string,i){var n=monthRe.exec(string.slice(i));return n?(d.m=monthLookup[n[0].toLowerCase()],i+n[0].length):-1},c:function parseLocaleDateTime(d,string,i){return parseSpecifier(d,locale_dateTime,string,i)},d:parseDayOfMonth,e:parseDayOfMonth,f:parseMicroseconds,H:parseHour24,I:parseHour24,j:parseDayOfYear,L:parseMilliseconds,m:parseMonthNumber,M:parseMinutes,p:function parsePeriod(d,string,i){var n=periodRe.exec(string.slice(i));return n?(d.p=periodLookup[n[0].toLowerCase()],i+n[0].length):-1},Q:parseUnixTimestamp,s:parseUnixTimestampSeconds,S:parseSeconds,u:parseWeekdayNumberMonday,U:parseWeekNumberSunday,V:parseWeekNumberISO,w:parseWeekdayNumberSunday,W:parseWeekNumberMonday,x:function parseLocaleDate(d,string,i){return parseSpecifier(d,locale_date,string,i)},X:function parseLocaleTime(d,string,i){return parseSpecifier(d,locale_time,string,i)},y:parseYear,Y:parseFullYear,Z:parseZone,"%":parseLiteralPercent};function newFormat(specifier,formats){return function(date){var c,pad,format,string=[],i=-1,j=0,n=specifier.length;for(date instanceof Date||(date=new Date(+date));++i53)return null;"w"in d||(d.w=1),"Z"in d?(week=(day=(week=utcDate(newYear(d.y))).getUTCDay())>4||0===day?utcMonday.ceil(week):utcMonday(week),week=src_utcDay.offset(week,7*(d.V-1)),d.y=week.getUTCFullYear(),d.m=week.getUTCMonth(),d.d=week.getUTCDate()+(d.w+6)%7):(week=(day=(week=newDate(newYear(d.y))).getDay())>4||0===day?monday.ceil(week):monday(week),week=src_day.offset(week,7*(d.V-1)),d.y=week.getFullYear(),d.m=week.getMonth(),d.d=week.getDate()+(d.w+6)%7)}else("W"in d||"U"in d)&&("w"in d||(d.w="u"in d?d.u%7:"W"in d?1:0),day="Z"in d?utcDate(newYear(d.y)).getUTCDay():newDate(newYear(d.y)).getDay(),d.m=0,d.d="W"in d?(d.w+6)%7+7*d.W-(day+5)%7:d.w+7*d.U-(day+6)%7);return"Z"in d?(d.H+=d.Z/100|0,d.M+=d.Z%100,utcDate(d)):newDate(d)}}function parseSpecifier(d,specifier,string,j){for(var c,parse,i=0,n=specifier.length,m=string.length;i=m)return-1;if(37===(c=specifier.charCodeAt(i++))){if(c=specifier.charAt(i++),!(parse=parses[c in pads?specifier.charAt(i++):c])||(j=parse(d,string,j))<0)return-1}else if(c!=string.charCodeAt(j++))return-1}return j}return formats.x=newFormat(locale_date,formats),formats.X=newFormat(locale_time,formats),formats.c=newFormat(locale_dateTime,formats),utcFormats.x=newFormat(locale_date,utcFormats),utcFormats.X=newFormat(locale_time,utcFormats),utcFormats.c=newFormat(locale_dateTime,utcFormats),{format:function format(specifier){var f=newFormat(specifier+="",formats);return f.toString=function(){return specifier},f},parse:function parse(specifier){var p=newParse(specifier+="",localDate);return p.toString=function(){return specifier},p},utcFormat:function utcFormat(specifier){var f=newFormat(specifier+="",utcFormats);return f.toString=function(){return specifier},f},utcParse:function utcParse(specifier){var p=newParse(specifier,utcDate);return p.toString=function(){return specifier},p}}}(definition),timeFormat=src_defaultLocale_locale.format,src_defaultLocale_locale.parse,utcFormat=src_defaultLocale_locale.utcFormat,utcParse=src_defaultLocale_locale.utcParse,src_defaultLocale_locale}({dateTime:"%x, %X",date:"%-m/%-d/%Y",time:"%-I:%M:%S %p",periods:["AM","PM"],days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],shortDays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],shortMonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]});Date.prototype.toISOString||utcFormat("%Y-%m-%dT%H:%M:%S.%LZ");+new Date("2000-01-01T00:00:00.000Z")||utcParse("%Y-%m-%dT%H:%M:%S.%LZ");var time_durationSecond=1e3,time_durationMinute=60*time_durationSecond,time_durationHour=60*time_durationMinute,time_durationDay=24*time_durationHour,time_durationWeek=7*time_durationDay,durationMonth=30*time_durationDay,durationYear=365*time_durationDay;function time_date(t){return new Date(t)}function time_number(t){return t instanceof Date?+t:+new Date(+t)}function calendar(year,month,week,day,hour,minute,second,millisecond,format){var scale=continuous(deinterpolateLinear,src_number),invert=scale.invert,domain=scale.domain,formatMillisecond=format(".%L"),formatSecond=format(":%S"),formatMinute=format("%I:%M"),formatHour=format("%I %p"),formatDay=format("%a %d"),formatWeek=format("%b %d"),formatMonth=format("%B"),formatYear=format("%Y"),tickIntervals=[[second,1,time_durationSecond],[second,5,5*time_durationSecond],[second,15,15*time_durationSecond],[second,30,30*time_durationSecond],[minute,1,time_durationMinute],[minute,5,5*time_durationMinute],[minute,15,15*time_durationMinute],[minute,30,30*time_durationMinute],[hour,1,time_durationHour],[hour,3,3*time_durationHour],[hour,6,6*time_durationHour],[hour,12,12*time_durationHour],[day,1,time_durationDay],[day,2,2*time_durationDay],[week,1,time_durationWeek],[month,1,durationMonth],[month,3,3*durationMonth],[year,1,durationYear]];function tickFormat(date){return(second(date)1)&&(t-=Math.floor(t));var ts=Math.abs(t-.5);return rainbow_c.h=360*t-100,rainbow_c.s=1.5-1.5*ts,rainbow_c.l=.8-.9*ts,rainbow_c+""};color_rgb(),Math.PI,Math.PI;function viridis_ramp(range){var n=range.length;return function(t){return range[Math.max(0,Math.min(n-1,Math.floor(t*n)))]}}var sequential_multi_viridis=viridis_ramp(d3_scale_chromatic_src_colors("44015444025645045745055946075a46085c460a5d460b5e470d60470e6147106347116447136548146748166848176948186a481a6c481b6d481c6e481d6f481f70482071482173482374482475482576482677482878482979472a7a472c7a472d7b472e7c472f7d46307e46327e46337f463480453581453781453882443983443a83443b84433d84433e85423f854240864241864142874144874045884046883f47883f48893e49893e4a893e4c8a3d4d8a3d4e8a3c4f8a3c508b3b518b3b528b3a538b3a548c39558c39568c38588c38598c375a8c375b8d365c8d365d8d355e8d355f8d34608d34618d33628d33638d32648e32658e31668e31678e31688e30698e306a8e2f6b8e2f6c8e2e6d8e2e6e8e2e6f8e2d708e2d718e2c718e2c728e2c738e2b748e2b758e2a768e2a778e2a788e29798e297a8e297b8e287c8e287d8e277e8e277f8e27808e26818e26828e26828e25838e25848e25858e24868e24878e23888e23898e238a8d228b8d228c8d228d8d218e8d218f8d21908d21918c20928c20928c20938c1f948c1f958b1f968b1f978b1f988b1f998a1f9a8a1e9b8a1e9c891e9d891f9e891f9f881fa0881fa1881fa1871fa28720a38620a48621a58521a68522a78522a88423a98324aa8325ab8225ac8226ad8127ad8128ae8029af7f2ab07f2cb17e2db27d2eb37c2fb47c31b57b32b67a34b67935b77937b87838b9773aba763bbb753dbc743fbc7340bd7242be7144bf7046c06f48c16e4ac16d4cc26c4ec36b50c46a52c56954c56856c66758c7655ac8645cc8635ec96260ca6063cb5f65cb5e67cc5c69cd5b6ccd5a6ece5870cf5773d05675d05477d1537ad1517cd2507fd34e81d34d84d44b86d54989d5488bd6468ed64590d74393d74195d84098d83e9bd93c9dd93ba0da39a2da37a5db36a8db34aadc32addc30b0dd2fb2dd2db5de2bb8de29bade28bddf26c0df25c2df23c5e021c8e020cae11fcde11dd0e11cd2e21bd5e21ad8e219dae319dde318dfe318e2e418e5e419e7e419eae51aece51befe51cf1e51df4e61ef6e620f8e621fbe723fde725")),viridis_magma=viridis_ramp(d3_scale_chromatic_src_colors("00000401000501010601010802010902020b02020d03030f03031204041405041606051806051a07061c08071e0907200a08220b09240c09260d0a290e0b2b100b2d110c2f120d31130d34140e36150e38160f3b180f3d19103f1a10421c10441d11471e114920114b21114e22115024125325125527125829115a2a115c2c115f2d11612f116331116533106734106936106b38106c390f6e3b0f703d0f713f0f72400f74420f75440f764510774710784910784a10794c117a4e117b4f127b51127c52137c54137d56147d57157e59157e5a167e5c167f5d177f5f187f601880621980641a80651a80671b80681c816a1c816b1d816d1d816e1e81701f81721f817320817521817621817822817922827b23827c23827e24828025828125818326818426818627818827818928818b29818c29818e2a81902a81912b81932b80942c80962c80982d80992d809b2e7f9c2e7f9e2f7fa02f7fa1307ea3307ea5317ea6317da8327daa337dab337cad347cae347bb0357bb2357bb3367ab5367ab73779b83779ba3878bc3978bd3977bf3a77c03a76c23b75c43c75c53c74c73d73c83e73ca3e72cc3f71cd4071cf4070d0416fd2426fd3436ed5446dd6456cd8456cd9466bdb476adc4869de4968df4a68e04c67e24d66e34e65e44f64e55064e75263e85362e95462ea5661eb5760ec5860ed5a5fee5b5eef5d5ef05f5ef1605df2625df2645cf3655cf4675cf4695cf56b5cf66c5cf66e5cf7705cf7725cf8745cf8765cf9785df9795df97b5dfa7d5efa7f5efa815ffb835ffb8560fb8761fc8961fc8a62fc8c63fc8e64fc9065fd9266fd9467fd9668fd9869fd9a6afd9b6bfe9d6cfe9f6dfea16efea36ffea571fea772fea973feaa74feac76feae77feb078feb27afeb47bfeb67cfeb77efeb97ffebb81febd82febf84fec185fec287fec488fec68afec88cfeca8dfecc8ffecd90fecf92fed194fed395fed597fed799fed89afdda9cfddc9efddea0fde0a1fde2a3fde3a5fde5a7fde7a9fde9aafdebacfcecaefceeb0fcf0b2fcf2b4fcf4b6fcf6b8fcf7b9fcf9bbfcfbbdfcfdbf")),viridis_inferno=viridis_ramp(d3_scale_chromatic_src_colors("00000401000501010601010802010a02020c02020e03021004031204031405041706041907051b08051d09061f0a07220b07240c08260d08290e092b10092d110a30120a32140b34150b37160b39180c3c190c3e1b0c411c0c431e0c451f0c48210c4a230c4c240c4f260c51280b53290b552b0b572d0b592f0a5b310a5c320a5e340a5f3609613809623909633b09643d09653e0966400a67420a68440a68450a69470b6a490b6a4a0c6b4c0c6b4d0d6c4f0d6c510e6c520e6d540f6d550f6d57106e59106e5a116e5c126e5d126e5f136e61136e62146e64156e65156e67166e69166e6a176e6c186e6d186e6f196e71196e721a6e741a6e751b6e771c6d781c6d7a1d6d7c1d6d7d1e6d7f1e6c801f6c82206c84206b85216b87216b88226a8a226a8c23698d23698f24699025689225689326679526679727669827669a28659b29649d29649f2a63a02a63a22b62a32c61a52c60a62d60a82e5fa92e5eab2f5ead305dae305cb0315bb1325ab3325ab43359b63458b73557b93556ba3655bc3754bd3853bf3952c03a51c13a50c33b4fc43c4ec63d4dc73e4cc83f4bca404acb4149cc4248ce4347cf4446d04545d24644d34743d44842d54a41d74b3fd84c3ed94d3dda4e3cdb503bdd513ade5238df5337e05536e15635e25734e35933e45a31e55c30e65d2fe75e2ee8602de9612bea632aeb6429eb6628ec6726ed6925ee6a24ef6c23ef6e21f06f20f1711ff1731df2741cf3761bf37819f47918f57b17f57d15f67e14f68013f78212f78410f8850ff8870ef8890cf98b0bf98c0af98e09fa9008fa9207fa9407fb9606fb9706fb9906fb9b06fb9d07fc9f07fca108fca309fca50afca60cfca80dfcaa0ffcac11fcae12fcb014fcb216fcb418fbb61afbb81dfbba1ffbbc21fbbe23fac026fac228fac42afac62df9c72ff9c932f9cb35f8cd37f8cf3af7d13df7d340f6d543f6d746f5d949f5db4cf4dd4ff4df53f4e156f3e35af3e55df2e661f2e865f2ea69f1ec6df1ed71f1ef75f1f179f2f27df2f482f3f586f3f68af4f88ef5f992f6fa96f8fb9af9fc9dfafda1fcffa4")),viridis_plasma=viridis_ramp(d3_scale_chromatic_src_colors("0d088710078813078916078a19068c1b068d1d068e20068f2206902406912605912805922a05932c05942e05952f059631059733059735049837049938049a3a049a3c049b3e049c3f049c41049d43039e44039e46039f48039f4903a04b03a14c02a14e02a25002a25102a35302a35502a45601a45801a45901a55b01a55c01a65e01a66001a66100a76300a76400a76600a76700a86900a86a00a86c00a86e00a86f00a87100a87201a87401a87501a87701a87801a87a02a87b02a87d03a87e03a88004a88104a78305a78405a78606a68707a68808a68a09a58b0aa58d0ba58e0ca48f0da4910ea3920fa39410a29511a19613a19814a099159f9a169f9c179e9d189d9e199da01a9ca11b9ba21d9aa31e9aa51f99a62098a72197a82296aa2395ab2494ac2694ad2793ae2892b02991b12a90b22b8fb32c8eb42e8db52f8cb6308bb7318ab83289ba3388bb3488bc3587bd3786be3885bf3984c03a83c13b82c23c81c33d80c43e7fc5407ec6417dc7427cc8437bc9447aca457acb4679cc4778cc4977cd4a76ce4b75cf4c74d04d73d14e72d24f71d35171d45270d5536fd5546ed6556dd7566cd8576bd9586ada5a6ada5b69db5c68dc5d67dd5e66de5f65de6164df6263e06363e16462e26561e26660e3685fe4695ee56a5de56b5de66c5ce76e5be76f5ae87059e97158e97257ea7457eb7556eb7655ec7754ed7953ed7a52ee7b51ef7c51ef7e50f07f4ff0804ef1814df1834cf2844bf3854bf3874af48849f48948f58b47f58c46f68d45f68f44f79044f79143f79342f89441f89540f9973ff9983ef99a3efa9b3dfa9c3cfa9e3bfb9f3afba139fba238fca338fca537fca636fca835fca934fdab33fdac33fdae32fdaf31fdb130fdb22ffdb42ffdb52efeb72dfeb82cfeba2cfebb2bfebd2afebe2afec029fdc229fdc328fdc527fdc627fdc827fdca26fdcb26fccd25fcce25fcd025fcd225fbd324fbd524fbd724fad824fada24f9dc24f9dd25f8df25f8e125f7e225f7e425f6e626f6e826f5e926f5eb27f4ed27f3ee27f3f027f2f227f1f426f1f525f0f724f0f921")),UNIT_GLOBAL_NAMESPACE="app.units",UNIT_LOCAL_NAMESPACE="local.units",LAYER_LOCAL_NAMESPACE="local.layers",LAYER_GLOBAL_NAMESPACE="app.layers",GROUP_GLOBAL_NAMESPACE="app.group",GROUP_LOCAL_NAMESPACE="local.group",CANVAS_LOCAL_NAMESPACE="local.canvas",CANVAS_GLOBAL_NAMESPACE="app.canvas",reserved_fields={ROW_ID:"__id__"},common_props={ACTION_INF:"actionInf",ON_LAYER_DRAW:"onLayerDraw",MATRIX_CREATED:"matrixCreated"},COORD_TYPES_POLAR="polar",COORD_TYPES_CARTESIAN="cartesian",src_array_slice=Array.prototype.slice,d3_axis_src_identity=function(x){return x},axis_top=1,axis_right=2,axis_bottom=3,axis_left=4,epsilon=1e-6;function translateX(x){return"translate("+(x+.5)+",0)"}function translateY(y){return"translate(0,"+(y+.5)+")"}function entering(){return!this.__axis}function axis_axis(orient,scale){var tickArguments=[],tickValues=null,tickFormat=null,tickTransform=null,tickSizeInner=6,tickSizeOuter=6,tickPadding=3,k=orient===axis_top||orient===axis_left?-1:1,x=orient===axis_left||orient===axis_right?"x":"y",transform=orient===axis_top||orient===axis_bottom?translateX:translateY;function axis(context){var values=null==tickValues?scale.ticks?scale.ticks.apply(scale,tickArguments):scale.domain():tickValues,format=null==tickFormat?scale.tickFormat?scale.tickFormat.apply(scale,tickArguments):d3_axis_src_identity:tickFormat,spacing=Math.max(tickSizeInner,0)+tickPadding,range=scale.range(),range0=+range[0]+.5,range1=+range[range.length-1]+.5,position=(scale.bandwidth?function axis_center(scale){var offset=Math.max(0,scale.bandwidth()-1)/2;return scale.round()&&(offset=Math.round(offset)),function(d){return+scale(d)+offset}}:function axis_number(scale){return function(d){return+scale(d)}})(scale.copy()),selection=context.selection?context.selection():context,path=selection.selectAll(".domain").data([null]),tick=selection.selectAll(".tick").data(values,scale).order(),tickExit=tick.exit(),tickEnter=tick.enter().append("g").attr("class","tick"),line=tick.select("line"),text=tick.select("text");path=path.merge(path.enter().insert("path",".tick").attr("class","domain").attr("stroke","#000")),tick=tick.merge(tickEnter),line=line.merge(tickEnter.append("line").attr("stroke","#000").attr(x+"2",k*tickSizeInner)),text=text.merge(tickEnter.append("text").attr("fill","#000").attr(x,k*spacing).attr("dy",orient===axis_top?"0em":orient===axis_bottom?"0.71em":"0.32em")).style("transform",tickTransform),context!==selection&&(path=path.transition(context),tick=tick.transition(context),line=line.transition(context),text=text.transition(context),tickExit=tickExit.transition(context).attr("opacity",epsilon).attr("transform",function(d){return isFinite(d=position(d))?transform(d):this.getAttribute("transform")}),tickEnter.attr("opacity",epsilon).attr("transform",function(d){var p=this.parentNode.__axis;return transform(p&&isFinite(p=p(d))?p:position(d))})),tickExit.remove(),path.attr("d",orient===axis_left||orient==axis_right?"M"+k*tickSizeOuter+","+range0+"H0.5V"+range1+"H"+k*tickSizeOuter:"M"+range0+","+k*tickSizeOuter+"V0.5H"+range1+"V"+k*tickSizeOuter),tick.attr("opacity",1).attr("transform",function(d){return transform(position(d))}),line.attr(x+"2",k*tickSizeInner),text.attr(x,k*spacing).text(format),selection.filter(entering).attr("fill","none").attr("font-size",10).attr("font-family","sans-serif").attr("text-anchor",orient===axis_right?"start":orient===axis_left?"end":"middle"),selection.each(function(){this.__axis=position})}return axis.scale=function(_){return arguments.length?(scale=_,axis):scale},axis.tickTransform=function(_){return arguments.length?(tickTransform=_,axis):tickTransform},axis.ticks=function(){return tickArguments=src_array_slice.call(arguments),axis},axis.tickArguments=function(_){return arguments.length?(tickArguments=null==_?[]:src_array_slice.call(_),axis):tickArguments.slice()},axis.tickValues=function(_){return arguments.length?(tickValues=null==_?null:src_array_slice.call(_),axis):tickValues&&tickValues.slice()},axis.tickFormat=function(_){return arguments.length?(tickFormat=_,axis):tickFormat},axis.tickSize=function(_){return arguments.length?(tickSizeInner=tickSizeOuter=+_,axis):tickSizeInner},axis.tickSizeInner=function(_){return arguments.length?(tickSizeInner=+_,axis):tickSizeInner},axis.tickSizeOuter=function(_){return arguments.length?(tickSizeOuter=+_,axis):tickSizeOuter},axis.tickPadding=function(_){return arguments.length?(tickPadding=+_,axis):tickPadding},axis}var pi=Math.PI,tau=2*pi,tauEpsilon=tau-1e-6;function Path(){this._x0=this._y0=this._x1=this._y1=null,this._=""}function path_path(){return new Path}Path.prototype=path_path.prototype={constructor:Path,moveTo:function moveTo(x,y){this._+="M"+(this._x0=this._x1=+x)+","+(this._y0=this._y1=+y)},closePath:function closePath(){null!==this._x1&&(this._x1=this._x0,this._y1=this._y0,this._+="Z")},lineTo:function lineTo(x,y){this._+="L"+(this._x1=+x)+","+(this._y1=+y)},quadraticCurveTo:function quadraticCurveTo(x1,y1,x,y){this._+="Q"+ +x1+","+ +y1+","+(this._x1=+x)+","+(this._y1=+y)},bezierCurveTo:function bezierCurveTo(x1,y1,x2,y2,x,y){this._+="C"+ +x1+","+ +y1+","+ +x2+","+ +y2+","+(this._x1=+x)+","+(this._y1=+y)},arcTo:function arcTo(x1,y1,x2,y2,r){x1=+x1,y1=+y1,x2=+x2,y2=+y2,r=+r;var x0=this._x1,y0=this._y1,x21=x2-x1,y21=y2-y1,x01=x0-x1,y01=y0-y1,l01_2=x01*x01+y01*y01;if(r<0)throw new Error("negative radius: "+r);if(null===this._x1)this._+="M"+(this._x1=x1)+","+(this._y1=y1);else if(l01_2>1e-6)if(Math.abs(y01*x21-y21*x01)>1e-6&&r){var x20=x2-x0,y20=y2-y0,l21_2=x21*x21+y21*y21,l20_2=x20*x20+y20*y20,l21=Math.sqrt(l21_2),l01=Math.sqrt(l01_2),l=r*Math.tan((pi-Math.acos((l21_2+l01_2-l20_2)/(2*l21*l01)))/2),t01=l/l01,t21=l/l21;Math.abs(t01-1)>1e-6&&(this._+="L"+(x1+t01*x01)+","+(y1+t01*y01)),this._+="A"+r+","+r+",0,0,"+ +(y01*x20>x01*y20)+","+(this._x1=x1+t21*x21)+","+(this._y1=y1+t21*y21)}else this._+="L"+(this._x1=x1)+","+(this._y1=y1);else;},arc:function arc(x,y,r,a0,a1,ccw){x=+x,y=+y;var dx=(r=+r)*Math.cos(a0),dy=r*Math.sin(a0),x0=x+dx,y0=y+dy,cw=1^ccw,da=ccw?a0-a1:a1-a0;if(r<0)throw new Error("negative radius: "+r);null===this._x1?this._+="M"+x0+","+y0:(Math.abs(this._x1-x0)>1e-6||Math.abs(this._y1-y0)>1e-6)&&(this._+="L"+x0+","+y0),r&&(da<0&&(da=da%tau+tau),da>tauEpsilon?this._+="A"+r+","+r+",0,1,"+cw+","+(x-dx)+","+(y-dy)+"A"+r+","+r+",0,1,"+cw+","+(this._x1=x0)+","+(this._y1=y0):da>1e-6&&(this._+="A"+r+","+r+",0,"+ +(da>=pi)+","+cw+","+(this._x1=x+r*Math.cos(a1))+","+(this._y1=y+r*Math.sin(a1))))},rect:function rect(x,y,w,h){this._+="M"+(this._x0=this._x1=+x)+","+(this._y0=this._y1=+y)+"h"+ +w+"v"+ +h+"h"+-w+"Z"},toString:function toString(){return this._}};var src_path=path_path,d3_shape_src_constant=function(x){return function constant(){return x}},abs=Math.abs,atan2=Math.atan2,cos=Math.cos,math_max=Math.max,math_min=Math.min,sin=Math.sin,math_sqrt=Math.sqrt,math_epsilon=1e-12,math_pi=Math.PI,halfPi=math_pi/2,math_tau=2*math_pi;function asin(x){return x>=1?halfPi:x<=-1?-halfPi:Math.asin(x)}function arcInnerRadius(d){return d.innerRadius}function arcOuterRadius(d){return d.outerRadius}function arcStartAngle(d){return d.startAngle}function arcEndAngle(d){return d.endAngle}function arcPadAngle(d){return d&&d.padAngle}function cornerTangents(x0,y0,x1,y1,r1,rc,cw){var x01=x0-x1,y01=y0-y1,lo=(cw?rc:-rc)/math_sqrt(x01*x01+y01*y01),ox=lo*y01,oy=-lo*x01,x11=x0+ox,y11=y0+oy,x10=x1+ox,y10=y1+oy,x00=(x11+x10)/2,y00=(y11+y10)/2,dx=x10-x11,dy=y10-y11,d2=dx*dx+dy*dy,r=r1-rc,D=x11*y10-x10*y11,d=(dy<0?-1:1)*math_sqrt(math_max(0,r*r*d2-D*D)),cx0=(D*dy-dx*d)/d2,cy0=(-D*dx-dy*d)/d2,cx1=(D*dy+dx*d)/d2,cy1=(-D*dx+dy*d)/d2,dx0=cx0-x00,dy0=cy0-y00,dx1=cx1-x00,dy1=cy1-y00;return dx0*dx0+dy0*dy0>dx1*dx1+dy1*dy1&&(cx0=cx1,cy0=cy1),{cx:cx0,cy:cy0,x01:-ox,y01:-oy,x11:cx0*(r1/r-1),y11:cy0*(r1/r-1)}}function Linear(context){this._context=context}Linear.prototype={areaStart:function areaStart(){this._line=0},areaEnd:function areaEnd(){this._line=NaN},lineStart:function lineStart(){this._point=0},lineEnd:function lineEnd(){(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function point(x,y){switch(x=+x,y=+y,this._point){case 0:this._point=1,this._line?this._context.lineTo(x,y):this._context.moveTo(x,y);break;case 1:this._point=2;default:this._context.lineTo(x,y)}}};var curve_linear=function(context){return new Linear(context)};function point_x(p){return p[0]}function point_y(p){return p[1]}var src_line=function(){var x=point_x,y=point_y,defined=d3_shape_src_constant(!0),context=null,curve=curve_linear,output=null;function line(data){var i,d,buffer,n=data.length,defined0=!1;for(null==context&&(output=curve(buffer=src_path())),i=0;i<=n;++i)!(i=j;--k)output.point(x0z[k],y0z[k]);output.lineEnd(),output.areaEnd()}defined0&&(x0z[i]=+x0(d,i,data),y0z[i]=+y0(d,i,data),output.point(x1?+x1(d,i,data):x0z[i],y1?+y1(d,i,data):y0z[i]))}if(buffer)return output=null,buffer+""||null}function arealine(){return src_line().defined(defined).curve(curve).context(context)}return area.x=function(_){return arguments.length?(x0="function"==typeof _?_:d3_shape_src_constant(+_),x1=null,area):x0},area.x0=function(_){return arguments.length?(x0="function"==typeof _?_:d3_shape_src_constant(+_),area):x0},area.x1=function(_){return arguments.length?(x1=null==_?null:"function"==typeof _?_:d3_shape_src_constant(+_),area):x1},area.y=function(_){return arguments.length?(y0="function"==typeof _?_:d3_shape_src_constant(+_),y1=null,area):y0},area.y0=function(_){return arguments.length?(y0="function"==typeof _?_:d3_shape_src_constant(+_),area):y0},area.y1=function(_){return arguments.length?(y1=null==_?null:"function"==typeof _?_:d3_shape_src_constant(+_),area):y1},area.lineX0=area.lineY0=function(){return arealine().x(x0).y(y0)},area.lineY1=function(){return arealine().x(x0).y(y1)},area.lineX1=function(){return arealine().x(x1).y(y0)},area.defined=function(_){return arguments.length?(defined="function"==typeof _?_:d3_shape_src_constant(!!_),area):defined},area.curve=function(_){return arguments.length?(curve=_,null!=context&&(output=curve(context)),area):curve},area.context=function(_){return arguments.length?(null==_?context=output=null:output=curve(context=_),area):context},area},src_descending=function(a,b){return ba?1:b>=a?0:NaN},d3_shape_src_identity=function(d){return d};curveRadial(curve_linear);function Radial(curve){this._curve=curve}function curveRadial(curve){function radial(context){return new Radial(curve(context))}return radial._curve=curve,radial}Radial.prototype={areaStart:function areaStart(){this._curve.areaStart()},areaEnd:function areaEnd(){this._curve.areaEnd()},lineStart:function lineStart(){this._curve.lineStart()},lineEnd:function lineEnd(){this._curve.lineEnd()},point:function point(a,r){this._curve.point(r*Math.sin(a),r*-Math.cos(a))}};var d3_shape_src_array_slice=Array.prototype.slice;var symbol_circle={draw:function draw(context,size){var r=Math.sqrt(size/math_pi);context.moveTo(r,0),context.arc(0,0,r,0,math_tau)}},symbol_cross={draw:function draw(context,size){var r=Math.sqrt(size/5)/2;context.moveTo(-3*r,-r),context.lineTo(-r,-r),context.lineTo(-r,-3*r),context.lineTo(r,-3*r),context.lineTo(r,-r),context.lineTo(3*r,-r),context.lineTo(3*r,r),context.lineTo(r,r),context.lineTo(r,3*r),context.lineTo(-r,3*r),context.lineTo(-r,r),context.lineTo(-3*r,r),context.closePath()}},tan30=Math.sqrt(1/3),tan30_2=2*tan30,diamond={draw:function draw(context,size){var y=Math.sqrt(size/tan30_2),x=y*tan30;context.moveTo(0,-y),context.lineTo(x,0),context.lineTo(0,y),context.lineTo(-x,0),context.closePath()}},kr=Math.sin(math_pi/10)/Math.sin(7*math_pi/10),kx=Math.sin(math_tau/10)*kr,ky=-Math.cos(math_tau/10)*kr,star={draw:function draw(context,size){var r=Math.sqrt(.8908130915292852*size),x=kx*r,y=ky*r;context.moveTo(0,-r),context.lineTo(x,y);for(var i=1;i<5;++i){var a=math_tau*i/5,c=Math.cos(a),s=Math.sin(a);context.lineTo(s*r,-c*r),context.lineTo(c*x-s*y,s*x+c*y)}context.closePath()}},square={draw:function draw(context,size){var w=Math.sqrt(size),x=-w/2;context.rect(x,x,w,w)}},sqrt3=Math.sqrt(3),triangle={draw:function draw(context,size){var y=-Math.sqrt(size/(3*sqrt3));context.moveTo(0,2*y),context.lineTo(-sqrt3*y,-y),context.lineTo(sqrt3*y,-y),context.closePath()}},wye_s=Math.sqrt(3)/2,wye_k=1/Math.sqrt(12),wye_a=3*(wye_k/2+1),wye={draw:function draw(context,size){var r=Math.sqrt(size/wye_a),x0=r/2,y0=r*wye_k,x1=x0,y1=r*wye_k+r,x2=-x1,y2=y1;context.moveTo(x0,y0),context.lineTo(x1,y1),context.lineTo(x2,y2),context.lineTo(-.5*x0-wye_s*y0,wye_s*x0+-.5*y0),context.lineTo(-.5*x1-wye_s*y1,wye_s*x1+-.5*y1),context.lineTo(-.5*x2-wye_s*y2,wye_s*x2+-.5*y2),context.lineTo(-.5*x0+wye_s*y0,-.5*y0-wye_s*x0),context.lineTo(-.5*x1+wye_s*y1,-.5*y1-wye_s*x1),context.lineTo(-.5*x2+wye_s*y2,-.5*y2-wye_s*x2),context.closePath()}},noop=function(){};function _point(that,x,y){that._context.bezierCurveTo((2*that._x0+that._x1)/3,(2*that._y0+that._y1)/3,(that._x0+2*that._x1)/3,(that._y0+2*that._y1)/3,(that._x0+4*that._x1+x)/6,(that._y0+4*that._y1+y)/6)}function Basis(context){this._context=context}Basis.prototype={areaStart:function areaStart(){this._line=0},areaEnd:function areaEnd(){this._line=NaN},lineStart:function lineStart(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function lineEnd(){switch(this._point){case 3:_point(this,this._x1,this._y1);case 2:this._context.lineTo(this._x1,this._y1)}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function point(x,y){switch(x=+x,y=+y,this._point){case 0:this._point=1,this._line?this._context.lineTo(x,y):this._context.moveTo(x,y);break;case 1:this._point=2;break;case 2:this._point=3,this._context.lineTo((5*this._x0+this._x1)/6,(5*this._y0+this._y1)/6);default:_point(this,x,y)}this._x0=this._x1,this._x1=x,this._y0=this._y1,this._y1=y}};function BasisClosed(context){this._context=context}BasisClosed.prototype={areaStart:noop,areaEnd:noop,lineStart:function lineStart(){this._x0=this._x1=this._x2=this._x3=this._x4=this._y0=this._y1=this._y2=this._y3=this._y4=NaN,this._point=0},lineEnd:function lineEnd(){switch(this._point){case 1:this._context.moveTo(this._x2,this._y2),this._context.closePath();break;case 2:this._context.moveTo((this._x2+2*this._x3)/3,(this._y2+2*this._y3)/3),this._context.lineTo((this._x3+2*this._x2)/3,(this._y3+2*this._y2)/3),this._context.closePath();break;case 3:this.point(this._x2,this._y2),this.point(this._x3,this._y3),this.point(this._x4,this._y4)}},point:function point(x,y){switch(x=+x,y=+y,this._point){case 0:this._point=1,this._x2=x,this._y2=y;break;case 1:this._point=2,this._x3=x,this._y3=y;break;case 2:this._point=3,this._x4=x,this._y4=y,this._context.moveTo((this._x0+4*this._x1+x)/6,(this._y0+4*this._y1+y)/6);break;default:_point(this,x,y)}this._x0=this._x1,this._x1=x,this._y0=this._y1,this._y1=y}};function BasisOpen(context){this._context=context}BasisOpen.prototype={areaStart:function areaStart(){this._line=0},areaEnd:function areaEnd(){this._line=NaN},lineStart:function lineStart(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function lineEnd(){(this._line||0!==this._line&&3===this._point)&&this._context.closePath(),this._line=1-this._line},point:function point(x,y){switch(x=+x,y=+y,this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3;var x0=(this._x0+4*this._x1+x)/6,y0=(this._y0+4*this._y1+y)/6;this._line?this._context.lineTo(x0,y0):this._context.moveTo(x0,y0);break;case 3:this._point=4;default:_point(this,x,y)}this._x0=this._x1,this._x1=x,this._y0=this._y1,this._y1=y}};function Bundle(context,beta){this._basis=new Basis(context),this._beta=beta}Bundle.prototype={lineStart:function lineStart(){this._x=[],this._y=[],this._basis.lineStart()},lineEnd:function lineEnd(){var x=this._x,y=this._y,j=x.length-1;if(j>0)for(var t,x0=x[0],y0=y[0],dx=x[j]-x0,dy=y[j]-y0,i=-1;++i<=j;)t=i/j,this._basis.point(this._beta*x[i]+(1-this._beta)*(x0+t*dx),this._beta*y[i]+(1-this._beta)*(y0+t*dy));this._x=this._y=null,this._basis.lineEnd()},point:function point(x,y){this._x.push(+x),this._y.push(+y)}};(function custom(beta){function bundle(context){return 1===beta?new Basis(context):new Bundle(context,beta)}return bundle.beta=function(beta){return custom(+beta)},bundle})(.85);function cardinal_point(that,x,y){that._context.bezierCurveTo(that._x1+that._k*(that._x2-that._x0),that._y1+that._k*(that._y2-that._y0),that._x2+that._k*(that._x1-x),that._y2+that._k*(that._y1-y),that._x2,that._y2)}function Cardinal(context,tension){this._context=context,this._k=(1-tension)/6}Cardinal.prototype={areaStart:function areaStart(){this._line=0},areaEnd:function areaEnd(){this._line=NaN},lineStart:function lineStart(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._point=0},lineEnd:function lineEnd(){switch(this._point){case 2:this._context.lineTo(this._x2,this._y2);break;case 3:cardinal_point(this,this._x1,this._y1)}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function point(x,y){switch(x=+x,y=+y,this._point){case 0:this._point=1,this._line?this._context.lineTo(x,y):this._context.moveTo(x,y);break;case 1:this._point=2,this._x1=x,this._y1=y;break;case 2:this._point=3;default:cardinal_point(this,x,y)}this._x0=this._x1,this._x1=this._x2,this._x2=x,this._y0=this._y1,this._y1=this._y2,this._y2=y}};(function custom(tension){function cardinal(context){return new Cardinal(context,tension)}return cardinal.tension=function(tension){return custom(+tension)},cardinal})(0);function CardinalClosed(context,tension){this._context=context,this._k=(1-tension)/6}CardinalClosed.prototype={areaStart:noop,areaEnd:noop,lineStart:function lineStart(){this._x0=this._x1=this._x2=this._x3=this._x4=this._x5=this._y0=this._y1=this._y2=this._y3=this._y4=this._y5=NaN,this._point=0},lineEnd:function lineEnd(){switch(this._point){case 1:this._context.moveTo(this._x3,this._y3),this._context.closePath();break;case 2:this._context.lineTo(this._x3,this._y3),this._context.closePath();break;case 3:this.point(this._x3,this._y3),this.point(this._x4,this._y4),this.point(this._x5,this._y5)}},point:function point(x,y){switch(x=+x,y=+y,this._point){case 0:this._point=1,this._x3=x,this._y3=y;break;case 1:this._point=2,this._context.moveTo(this._x4=x,this._y4=y);break;case 2:this._point=3,this._x5=x,this._y5=y;break;default:cardinal_point(this,x,y)}this._x0=this._x1,this._x1=this._x2,this._x2=x,this._y0=this._y1,this._y1=this._y2,this._y2=y}};(function custom(tension){function cardinal(context){return new CardinalClosed(context,tension)}return cardinal.tension=function(tension){return custom(+tension)},cardinal})(0);function CardinalOpen(context,tension){this._context=context,this._k=(1-tension)/6}CardinalOpen.prototype={areaStart:function areaStart(){this._line=0},areaEnd:function areaEnd(){this._line=NaN},lineStart:function lineStart(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._point=0},lineEnd:function lineEnd(){(this._line||0!==this._line&&3===this._point)&&this._context.closePath(),this._line=1-this._line},point:function point(x,y){switch(x=+x,y=+y,this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3,this._line?this._context.lineTo(this._x2,this._y2):this._context.moveTo(this._x2,this._y2);break;case 3:this._point=4;default:cardinal_point(this,x,y)}this._x0=this._x1,this._x1=this._x2,this._x2=x,this._y0=this._y1,this._y1=this._y2,this._y2=y}};(function custom(tension){function cardinal(context){return new CardinalOpen(context,tension)}return cardinal.tension=function(tension){return custom(+tension)},cardinal})(0);function catmullRom_point(that,x,y){var x1=that._x1,y1=that._y1,x2=that._x2,y2=that._y2;if(that._l01_a>math_epsilon){var a=2*that._l01_2a+3*that._l01_a*that._l12_a+that._l12_2a,n=3*that._l01_a*(that._l01_a+that._l12_a);x1=(x1*a-that._x0*that._l12_2a+that._x2*that._l01_2a)/n,y1=(y1*a-that._y0*that._l12_2a+that._y2*that._l01_2a)/n}if(that._l23_a>math_epsilon){var b=2*that._l23_2a+3*that._l23_a*that._l12_a+that._l12_2a,m=3*that._l23_a*(that._l23_a+that._l12_a);x2=(x2*b+that._x1*that._l23_2a-x*that._l12_2a)/m,y2=(y2*b+that._y1*that._l23_2a-y*that._l12_2a)/m}that._context.bezierCurveTo(x1,y1,x2,y2,that._x2,that._y2)}function CatmullRom(context,alpha){this._context=context,this._alpha=alpha}CatmullRom.prototype={areaStart:function areaStart(){this._line=0},areaEnd:function areaEnd(){this._line=NaN},lineStart:function lineStart(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function lineEnd(){switch(this._point){case 2:this._context.lineTo(this._x2,this._y2);break;case 3:this.point(this._x2,this._y2)}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function point(x,y){if(x=+x,y=+y,this._point){var x23=this._x2-x,y23=this._y2-y;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(x23*x23+y23*y23,this._alpha))}switch(this._point){case 0:this._point=1,this._line?this._context.lineTo(x,y):this._context.moveTo(x,y);break;case 1:this._point=2;break;case 2:this._point=3;default:catmullRom_point(this,x,y)}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=x,this._y0=this._y1,this._y1=this._y2,this._y2=y}};var curve_catmullRom=function custom(alpha){function catmullRom(context){return alpha?new CatmullRom(context,alpha):new Cardinal(context,0)}return catmullRom.alpha=function(alpha){return custom(+alpha)},catmullRom}(.5);function CatmullRomClosed(context,alpha){this._context=context,this._alpha=alpha}CatmullRomClosed.prototype={areaStart:noop,areaEnd:noop,lineStart:function lineStart(){this._x0=this._x1=this._x2=this._x3=this._x4=this._x5=this._y0=this._y1=this._y2=this._y3=this._y4=this._y5=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function lineEnd(){switch(this._point){case 1:this._context.moveTo(this._x3,this._y3),this._context.closePath();break;case 2:this._context.lineTo(this._x3,this._y3),this._context.closePath();break;case 3:this.point(this._x3,this._y3),this.point(this._x4,this._y4),this.point(this._x5,this._y5)}},point:function point(x,y){if(x=+x,y=+y,this._point){var x23=this._x2-x,y23=this._y2-y;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(x23*x23+y23*y23,this._alpha))}switch(this._point){case 0:this._point=1,this._x3=x,this._y3=y;break;case 1:this._point=2,this._context.moveTo(this._x4=x,this._y4=y);break;case 2:this._point=3,this._x5=x,this._y5=y;break;default:catmullRom_point(this,x,y)}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=x,this._y0=this._y1,this._y1=this._y2,this._y2=y}};(function custom(alpha){function catmullRom(context){return alpha?new CatmullRomClosed(context,alpha):new CardinalClosed(context,0)}return catmullRom.alpha=function(alpha){return custom(+alpha)},catmullRom})(.5);function CatmullRomOpen(context,alpha){this._context=context,this._alpha=alpha}CatmullRomOpen.prototype={areaStart:function areaStart(){this._line=0},areaEnd:function areaEnd(){this._line=NaN},lineStart:function lineStart(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function lineEnd(){(this._line||0!==this._line&&3===this._point)&&this._context.closePath(),this._line=1-this._line},point:function point(x,y){if(x=+x,y=+y,this._point){var x23=this._x2-x,y23=this._y2-y;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(x23*x23+y23*y23,this._alpha))}switch(this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3,this._line?this._context.lineTo(this._x2,this._y2):this._context.moveTo(this._x2,this._y2);break;case 3:this._point=4;default:catmullRom_point(this,x,y)}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=x,this._y0=this._y1,this._y1=this._y2,this._y2=y}};(function custom(alpha){function catmullRom(context){return alpha?new CatmullRomOpen(context,alpha):new CardinalOpen(context,0)}return catmullRom.alpha=function(alpha){return custom(+alpha)},catmullRom})(.5);function LinearClosed(context){this._context=context}LinearClosed.prototype={areaStart:noop,areaEnd:noop,lineStart:function lineStart(){this._point=0},lineEnd:function lineEnd(){this._point&&this._context.closePath()},point:function point(x,y){x=+x,y=+y,this._point?this._context.lineTo(x,y):(this._point=1,this._context.moveTo(x,y))}};function monotone_sign(x){return x<0?-1:1}function slope3(that,x2,y2){var h0=that._x1-that._x0,h1=x2-that._x1,s0=(that._y1-that._y0)/(h0||h1<0&&-0),s1=(y2-that._y1)/(h1||h0<0&&-0),p=(s0*h1+s1*h0)/(h0+h1);return(monotone_sign(s0)+monotone_sign(s1))*Math.min(Math.abs(s0),Math.abs(s1),.5*Math.abs(p))||0}function slope2(that,t){var h=that._x1-that._x0;return h?(3*(that._y1-that._y0)/h-t)/2:t}function monotone_point(that,t0,t1){var x0=that._x0,y0=that._y0,x1=that._x1,y1=that._y1,dx=(x1-x0)/3;that._context.bezierCurveTo(x0+dx,y0+dx*t0,x1-dx,y1-dx*t1,x1,y1)}function MonotoneX(context){this._context=context}function MonotoneY(context){this._context=new ReflectContext(context)}function ReflectContext(context){this._context=context}function Natural(context){this._context=context}function controlPoints(x){var i,m,n=x.length-1,a=new Array(n),b=new Array(n),r=new Array(n);for(a[0]=0,b[0]=2,r[0]=x[0]+2*x[1],i=1;i=0;--i)a[i]=(r[i]-a[i+1])/b[i];for(b[n-1]=(x[n]+a[n-1])/2,i=0;i=0&&(this._t=1-this._t,this._line=1-this._line)},point:function point(x,y){switch(x=+x,y=+y,this._point){case 0:this._point=1,this._line?this._context.lineTo(x,y):this._context.moveTo(x,y);break;case 1:this._point=2;default:if(this._t<=0)this._context.lineTo(this._x,y),this._context.lineTo(x,y);else{var x1=this._x*(1-this._t)+x*this._t;this._context.lineTo(x1,this._y),this._context.lineTo(x1,y)}}this._x=x,this._y=y}};var curve_step=function(context){return new Step(context,.5)};function stepBefore(context){return new Step(context,0)}function stepAfter(context){return new Step(context,1)}var none=function(series,order){if((n=series.length)>1)for(var j,s0,n,i=1,s1=series[order[0]],m=s1.length;i=0;)o[n]=n;return o};function stackValue(d,key){return d[key]}var order_ascending=function(series){var sums=series.map(ascending_sum);return order_none(series).sort(function(a,b){return sums[a]-sums[b]})};function ascending_sum(series){for(var v,s=0,i=-1,n=series.length;++i0)){if(r/=dx,dx<0){if(r0){if(r>t1)return;r>t0&&(t0=r)}if(r=x1-ax,dx||!(r<0)){if(r/=dx,dx<0){if(r>t1)return;r>t0&&(t0=r)}else if(dx>0){if(r0)){if(r/=dy,dy<0){if(r0){if(r>t1)return;r>t0&&(t0=r)}if(r=y1-ay,dy||!(r<0)){if(r/=dy,dy<0){if(r>t1)return;r>t0&&(t0=r)}else if(dy>0){if(r0||t1<1)||(t0>0&&(edge[0]=[ax+t0*dx,ay+t0*dy]),t1<1&&(edge[1]=[ax+t1*dx,ay+t1*dy]),!0)}}}}}function connectEdge(edge,x0,y0,x1,y1){var v1=edge[1];if(v1)return!0;var fm,fb,v0=edge[0],left=edge.left,right=edge.right,lx=left[0],ly=left[1],rx=right[0],ry=right[1],fx=(lx+rx)/2,fy=(ly+ry)/2;if(ry===ly){if(fx=x1)return;if(lx>rx){if(v0){if(v0[1]>=y1)return}else v0=[fx,y0];v1=[fx,y1]}else{if(v0){if(v0[1]1)if(lx>rx){if(v0){if(v0[1]>=y1)return}else v0=[(y0-fb)/fm,y0];v1=[(y1-fb)/fm,y1]}else{if(v0){if(v0[1]=x1)return}else v0=[x0,fm*x0+fb];v1=[x1,fm*x1+fb]}else{if(v0){if(v0[0]=-Diagram_epsilon2)){var ha=ax*ax+ay*ay,hc=cx*cx+cy*cy,x=(cy*ha-ay*hc)/d,y=(ax*hc-cx*ha)/d,circle=circlePool.pop()||new function Circle(){RedBlackNode(this),this.x=this.y=this.arc=this.site=this.cy=null};circle.arc=arc,circle.site=cSite,circle.x=x+bx,circle.y=(circle.cy=y+by)+Math.sqrt(x*x+y*y),arc.circle=circle;for(var before=null,node=circles._;node;)if(circle.yDiagram_epsilon)node=node.L;else{if(!((dxr=x-rightBreakPoint(node,directrix))>Diagram_epsilon)){dxl>-Diagram_epsilon?(lArc=node.P,rArc=node):dxr>-Diagram_epsilon?(lArc=node,rArc=node.N):lArc=rArc=node;break}if(!node.R){lArc=node;break}node=node.R}!function createCell(site){return Diagram_cells[site.index]={site:site,halfedges:[]}}(site);var newArc=createBeach(site);if(beaches.insert(lArc,newArc),lArc||rArc){if(lArc===rArc)return detachCircle(lArc),rArc=createBeach(lArc.site),beaches.insert(newArc,rArc),newArc.edge=rArc.edge=createEdge(lArc.site,newArc.site),attachCircle(lArc),void attachCircle(rArc);if(rArc){detachCircle(lArc),detachCircle(rArc);var lSite=lArc.site,ax=lSite[0],ay=lSite[1],bx=site[0]-ax,by=site[1]-ay,rSite=rArc.site,cx=rSite[0]-ax,cy=rSite[1]-ay,d=2*(bx*cy-by*cx),hb=bx*bx+by*by,hc=cx*cx+cy*cy,vertex=[(cy*hb-by*hc)/d+ax,(bx*hc-cx*hb)/d+ay];setEdgeEnd(rArc.edge,lSite,rSite,vertex),newArc.edge=createEdge(lSite,site,null,vertex),rArc.edge=createEdge(site,rSite,null,vertex),attachCircle(lArc),attachCircle(rArc)}else newArc.edge=createEdge(lArc.site,newArc.site)}}function leftBreakPoint(arc,directrix){var site=arc.site,rfocx=site[0],rfocy=site[1],pby2=rfocy-directrix;if(!pby2)return rfocx;var lArc=arc.P;if(!lArc)return-1/0;var lfocx=(site=lArc.site)[0],lfocy=site[1],plby2=lfocy-directrix;if(!plby2)return lfocx;var hl=lfocx-rfocx,aby2=1/pby2-1/plby2,b=hl/plby2;return aby2?(-b+Math.sqrt(b*b-2*aby2*(hl*hl/(-2*plby2)-lfocy+plby2/2+rfocy-pby2/2)))/aby2+rfocx:(rfocx+lfocx)/2}function rightBreakPoint(arc,directrix){var rArc=arc.N;if(rArc)return leftBreakPoint(rArc,directrix);var site=arc.site;return site[1]===directrix?site[0]:1/0}var beaches,Diagram_cells,circles,Diagram_edges,Diagram_epsilon=1e-6,Diagram_epsilon2=1e-12;function triangleArea(a,b,c){return(a[0]-c[0])*(b[1]-a[1])-(a[0]-b[0])*(c[1]-a[1])}function lexicographic(a,b){return b[1]-a[1]||b[0]-a[0]}function Diagram(sites,extent){var x,y,circle,site=sites.sort(lexicographic).pop();for(Diagram_edges=[],Diagram_cells=new Array(sites.length),beaches=new src_RedBlackTree,circles=new src_RedBlackTree;;)if(circle=firstCircle,site&&(!circle||site[1]Diagram_epsilon||Math.abs(edge[0][1]-edge[1][1])>Diagram_epsilon)||delete Diagram_edges[i]}(x0,y0,x1,y1),function clipCells(x0,y0,x1,y1){var iCell,cell,site,iHalfedge,halfedges,nHalfedges,start,startX,startY,end,endX,endY,nCells=Diagram_cells.length,cover=!0;for(iCell=0;iCellDiagram_epsilon||Math.abs(endY-startY)>Diagram_epsilon)&&(halfedges.splice(iHalfedge,0,Diagram_edges.push(createBorderEdge(site,end,Math.abs(endX-x0)Diagram_epsilon?[x0,Math.abs(startX-x0)Diagram_epsilon?[Math.abs(startY-y1)Diagram_epsilon?[x1,Math.abs(startX-x1)Diagram_epsilon?[Math.abs(startY-y0)=n)return null;var dx=x-cell.site[0],dy=y-cell.site[1],d2=dx*dx+dy*dy;do{cell=that.cells[i0=i1],i1=null,cell.halfedges.forEach(function(e){var edge=that.edges[e],v=edge.left;if(v!==cell.site&&v||(v=edge.right)){var vx=x-v[0],vy=y-v[1],v2=vx*vx+vy*vy;v20?0:domain[0],domain[1]=domain[1]>0?domain[1]:0),domain},common_utils_unionDomain=function unionDomain(domains,fieldType){var _ref2,domain=[];(domains=domains.filter(function(dom){return dom&&dom.length})).length&&(domain=fieldType===dist_datamodel.DimensionSubtype.CATEGORICAL?(_ref2=[]).concat.apply(_ref2,_toConsumableArray(domains)):[Math.min.apply(Math,_toConsumableArray(domains.map(function(d){return d[0]}))),Math.max.apply(Math,_toConsumableArray(domains.map(function(d){return d[1]})))]);return domain},symbolFns={circle:symbol_circle,cross:symbol_cross,diamond:diamond,square:square,star:star,wye:wye,triangle:triangle},easeFns={cubic:cubicInOut,bounce:bounceOut,linear:function src_linear_linear(t){return+t},elastic:elasticOut,back:backInOut,poly:polyInOut,circle:function circleInOut(t){return((t*=2)<=1?1-Math.sqrt(1-t*t):Math.sqrt(1-(t-=2)*t)+1)/2}},common_utils_getClosestIndexOf=function getClosestIndexOf(arr,value,side){for(var mid,d1,low=0,high=arr.length-1;lowvalue?0===high?high:"left"===side?high-1:high:high===arr.length-1?high:"left"===side?high:high+1},getNearestValue=function getNearestValue(data,key){var filterData=data.filter(function(d){return"number"==typeof d});return filterData[common_utils_getClosestIndexOf(filterData,key)]},getWindow=function getWindow(){return window},getQualifiedClassName=(requestAnimationFrame,cancelAnimationFrame,function getQualifiedClassName(cls,id,prefix){return cls=cls.replace(/^\.*/,""),["".concat(prefix,"-").concat(cls),"".concat(prefix,"-").concat(cls,"-").concat(id)]}),defaultValue=function defaultValue(param,value){return void 0===param||"object"===common_utils_typeof(param)&&!param?value:param},objectIterator=function objectIterator(obj,fn){for(var key in obj)Object.hasOwnProperty.call(obj,key)&&fn(key,obj)},common_utils_Voronoi=function(){function Voronoi(){var data=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];common_utils_classCallCheck(this,Voronoi),this._voronoi=src_voronoi().x(function(d){return d.x}).y(function(d){return d.y}),this.data(data)}return common_utils_createClass(Voronoi,[{key:"data",value:function data(_data){return _data&&(this._voronoiFn=this._voronoi(_data)),this}},{key:"find",value:function find(x,y,radius){return this._voronoiFn.find(x,y,radius)}}]),Voronoi}(),addListenerToNamespace=function addListenerToNamespace(namespaceInf,fn,context){var key=namespaceInf.key,namespace=namespaceInf.namespace;namespace?(!context._listeners[namespace]&&(context._listeners[namespace]=[]),key||(key=Object.keys(context._listeners[namespace]).length),context._listeners[namespace][key]=fn):(key=Object.keys(context._listeners).length,context._listeners[key]=fn)},getObjProp=function getObjProp(obj){if(void 0===obj||null===obj)return obj;for(var retObj=obj,_len=arguments.length,fields=new Array(_len>1?_len-1:0),_key=1;_key<_len;_key++)fields[_key-1]=arguments[_key];for(var i=0,len=fields.length;i3&&void 0!==arguments[3]?arguments[3]:{},props=propNames;Array.isArray(propNames)||(props=[propNames]);var fn=this.model.next(props,callBack,instantCall);return addListenerToNamespace(namespaceInf,fn,this),this}},{key:"registerImmediateListener",value:function registerImmediateListener(propNames,callBack,instantCall){var namespaceInf=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},props=propNames;Array.isArray(propNames)||(props=[propNames]);var fn=this.model.on(props,callBack,instantCall);return addListenerToNamespace(namespaceInf,fn,this),this}},{key:"get",value:function get(propName){return this.model.prop(propName)}},{key:"computed",value:function computed(propName,callBack){return this.model.calculatedProp(propName,callBack)}},{key:"append",value:function append(propName,value){return this.model.append(propName,value),this}},{key:"unsubscribeAll",value:function unsubscribeAll(){return Object.values(this._listeners).forEach(function(fn){return fn()}),this}},{key:"unsubscribe",value:function unsubscribe(){var namespaceInf=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},namespace=namespaceInf.namespace,key=namespaceInf.key,listeners=this._listeners[namespace];if(key){var fn=getObjProp(listeners,key);fn&&fn()}else Object.values(listeners).forEach(function(fn){return fn()}),this._listeners[namespace]=[];return this}}]),Store}(),intSanitizer=function intSanitizer(val){var arr=val.toString().match(/(\d+)(px)*/g);return arr?parseInt(arr[0],10):null},common_utils_transactor=function transactor(holder,options,model){var conf,namespaceInf=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},store=model&&model instanceof hyperdis_default.a?model:hyperdis_default.a.create({}),stateProps={};for(var prop in options)if({}.hasOwnProperty.call(options,prop)){var addAsMethod=!(conf=options[prop]).meta||conf.meta.addAsMethod,nameSpaceProp=void 0,namespace=namespaceInf.namespace;nameSpaceProp=namespace?"".concat(namespace,".").concat(prop):prop,stateProps[prop]=conf.value,!1!==addAsMethod&&(holder[prop]=function(context,meta,nsProp){return function(){for(var val,compareTo,_len2=arguments.length,params=new Array(_len2),_key2=0;_key2<_len2;_key2++)params[_key2]=arguments[_key2];var paramsLen=params.length,prevVal=store.prop(nsProp);if(paramsLen){var spreadParams=meta&&meta.spreadParams;val=params;var values=[];if(meta){for(var i=0;i=0;i--)if(arr1[i]!==arr2[i])return!1;return!0}(oldVal,newVal):"Object"===type?Object.is(oldVal,newVal):oldVal===newVal}},ERROR_MSG={INTERFACE_IMPL:"Method not implemented"},mergeRecursive=function mergeRecursive(source,sink){for(var prop in sink)isSimpleObject(source[prop])&&isSimpleObject(sink[prop])?mergeRecursive(source[prop],sink[prop]):sink[prop]instanceof Object&&sink[prop].constructor===Object?(source[prop]={},mergeRecursive(source[prop],sink[prop])):source[prop]=sink[prop];return source},common_utils_createSelection=function createSelection(sel,appendObj,data,idFn){var selection=sel||function dataSelect(idFn){return new DataSystem_selection(idFn)}(idFn),mergedSelection=(selection=selection.data(data)).enter().append(appendObj).merge(selection),exitSelection=selection.exit();return exitSelection.getObjects().forEach(function(inst){return inst.remove()}),exitSelection.remove(),mergedSelection},common_utils_interpolator=function interpolator(){return src_value},common_utils_numberInterpolator=function numberInterpolator(){return src_number},common_utils_piecewiseInterpolator=function piecewiseInterpolator(){return piecewise_piecewise};var rgbToHsv=function rgbToHsv(r,g,b){var a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:1;r=+r,g=+g,b=+b,a=+a,r/=255,g/=255,b/=255;var h,s,max=Math.max(r,g,b),min=Math.min(r,g,b),l=(max+min)/2;if(max===min)h=s=0;else{var d=max-min;switch(s=l>.5?d/(2-max-min):d/(max+min),max){case r:h=(g-b)/d+(g=range[0]&&val<=range[1]})},{saveChild:!1,mode:mode})},common_utils_getDataModelFromIdentifiers=function getDataModelFromIdentifiers(dataModel,identifiers,mode){var filteredDataModel;if(identifiers instanceof Array){var fieldsConfig=dataModel.getFieldsConfig(),dataArr=identifiers.slice(1,identifiers.length);if(identifiers instanceof Function)filteredDataModel=identifiers(dataModel,{},!1);else if(identifiers instanceof Array&&identifiers[0].length){var filteredSchema=identifiers[0].filter(function(d){return d in fieldsConfig});filteredDataModel=dataModel.select(function(fields){var include=!0;return filteredSchema.forEach(function(propField,idx){var value=fields[propField].valueOf(),index=dataArr.findIndex(function(d){return d[idx]===value});include=include&&-1!==index}),include},{saveChild:!1,mode:mode})}else filteredDataModel=dataModel.select(function(){return!1},{saveChild:!1,mode:mode})}else filteredDataModel=getDataModelFromRange(dataModel,identifiers,mode);return filteredDataModel},common_utils_registerListeners=function registerListeners(context,listenerMap){for(var _len3=arguments.length,params=new Array(_len3>2?_len3-2:0),_key3=2;_key3<_len3;_key3++)params[_key3-2]=arguments[_key3];var propListenerMap=listenerMap.apply(void 0,[context].concat(params));for(var key in propListenerMap)if({}.hasOwnProperty.call(propListenerMap,key)){var namespace=params[0],ns=null;namespace&&(ns=namespace.local);var mapObj=propListenerMap[key],propType=mapObj.type,props=mapObj.props,listenerFn=mapObj.listener;context.store()[propType](props,listenerFn,!1,{namespace:ns})}},isValidValue=function isValidValue(value){return!isNaN(value)&&value!==-1/0&&value!==1/0},toArray=function toArray(arr){return arr instanceof Array?arr:[arr]},common_utils_getSymbol=function getSymbol(type){return function(){var type=d3_shape_src_constant(symbol_circle),size=d3_shape_src_constant(64),context=null;function symbol(){var buffer;if(context||(context=buffer=src_path()),type.apply(this,arguments).draw(context,+size.apply(this,arguments)),buffer)return context=null,buffer+""||null}return symbol.type=function(_){return arguments.length?(type="function"==typeof _?_:d3_shape_src_constant(_),symbol):type},symbol.size=function(_){return arguments.length?(size="function"==typeof _?_:d3_shape_src_constant(+_),symbol):size},symbol.context=function(_){return arguments.length?(context=null==_?null:_,symbol):context},symbol}().type(symbolFns[type])},stackOrders=(_defineProperty(_stackOrders={},"none",order_none),_defineProperty(_stackOrders,"ascending",order_ascending),_defineProperty(_stackOrders,"descending",function(series){return order_ascending(series).reverse()}),_stackOrders),stackOffsets=(_defineProperty(_stackOffsets={},"diverging",function(series,order){if((n=series.length)>0)for(var i,d,dy,yp,yn,n,j=0,m=series[order[0]].length;j=0?(d[0]=yp,d[1]=yp+=dy):dy<0?(d[1]=yn,d[0]=yn+=dy):d[0]=yp}),_defineProperty(_stackOffsets,"none",none),_defineProperty(_stackOffsets,"expand",function(series,order){if((n=series.length)>0){for(var i,n,y,j=0,m=series[0].length;j0&&(m=(s0=series[order[0]]).length)>0){for(var s0,m,n,y=0,j=1;j0&&(sum+=v);for(null!=sortValues?index.sort(function(i,j){return sortValues(arcs[i],arcs[j])}):null!=sort&&index.sort(function(i,j){return sort(data[i],data[j])}),i=0,k=sum?(da-n*pa)/sum:0;i0?v*k:0)+pa,arcs[j]={data:data[j],index:i,value:v,startAngle:a0,endAngle:a1,padAngle:p};return arcs}return pie.value=function(_){return arguments.length?(value="function"==typeof _?_:d3_shape_src_constant(+_),pie):value},pie.sortValues=function(_){return arguments.length?(sortValues=_,sort=null,pie):sortValues},pie.sort=function(_){return arguments.length?(sort=_,sortValues=null,pie):sort},pie.startAngle=function(_){return arguments.length?(startAngle="function"==typeof _?_:d3_shape_src_constant(+_),pie):startAngle},pie.endAngle=function(_){return arguments.length?(endAngle="function"==typeof _?_:d3_shape_src_constant(+_),pie):endAngle},pie.padAngle=function(_){return arguments.length?(padAngle="function"==typeof _?_:d3_shape_src_constant(+_),pie):padAngle},pie},arc:function(){var innerRadius=arcInnerRadius,outerRadius=arcOuterRadius,cornerRadius=d3_shape_src_constant(0),padRadius=null,startAngle=arcStartAngle,endAngle=arcEndAngle,padAngle=arcPadAngle,context=null;function arc(){var buffer,r,r0=+innerRadius.apply(this,arguments),r1=+outerRadius.apply(this,arguments),a0=startAngle.apply(this,arguments)-halfPi,a1=endAngle.apply(this,arguments)-halfPi,da=abs(a1-a0),cw=a1>a0;if(context||(context=buffer=src_path()),r1math_epsilon)if(da>math_tau-math_epsilon)context.moveTo(r1*cos(a0),r1*sin(a0)),context.arc(0,0,r1,a0,a1,!cw),r0>math_epsilon&&(context.moveTo(r0*cos(a1),r0*sin(a1)),context.arc(0,0,r0,a1,a0,cw));else{var t0,t1,a01=a0,a11=a1,a00=a0,a10=a1,da0=da,da1=da,ap=padAngle.apply(this,arguments)/2,rp=ap>math_epsilon&&(padRadius?+padRadius.apply(this,arguments):math_sqrt(r0*r0+r1*r1)),rc=math_min(abs(r1-r0)/2,+cornerRadius.apply(this,arguments)),rc0=rc,rc1=rc;if(rp>math_epsilon){var p0=asin(rp/r0*sin(ap)),p1=asin(rp/r1*sin(ap));(da0-=2*p0)>math_epsilon?(a00+=p0*=cw?1:-1,a10-=p0):(da0=0,a00=a10=(a0+a1)/2),(da1-=2*p1)>math_epsilon?(a01+=p1*=cw?1:-1,a11-=p1):(da1=0,a01=a11=(a0+a1)/2)}var x01=r1*cos(a01),y01=r1*sin(a01),x10=r0*cos(a10),y10=r0*sin(a10);if(rc>math_epsilon){var oc,x11=r1*cos(a11),y11=r1*sin(a11),x00=r0*cos(a00),y00=r0*sin(a00);if(da1?0:x<-1?math_pi:Math.acos(x)}((ax*bx+ay*by)/(math_sqrt(ax*ax+ay*ay)*math_sqrt(bx*bx+by*by)))/2),lc=math_sqrt(oc[0]*oc[0]+oc[1]*oc[1]);rc0=math_min(rc,(r0-lc)/(kc-1)),rc1=math_min(rc,(r1-lc)/(kc+1))}}da1>math_epsilon?rc1>math_epsilon?(t0=cornerTangents(x00,y00,x01,y01,r1,rc1,cw),t1=cornerTangents(x11,y11,x10,y10,r1,rc1,cw),context.moveTo(t0.cx+t0.x01,t0.cy+t0.y01),rc1math_epsilon&&da0>math_epsilon?rc0>math_epsilon?(t0=cornerTangents(x10,y10,x11,y11,r0,-rc0,cw),t1=cornerTangents(x01,y01,x00,y00,r0,-rc0,cw),context.lineTo(t0.cx+t0.x01,t0.cy+t0.y01),rc01?_len4-1:0),_key4=1;_key4<_len4;_key4++)measureFieldNames[_key4-1]=arguments[_key4];var filteredReducers={};if(dataModel instanceof datamodel_default.a){var derivations=[].concat(_toConsumableArray(dataModel.getDerivations().reverse()),_toConsumableArray(dataModel.getAncestorDerivations().reverse())),nearestReducers=defaultValue(getObjProp(derivations.find(function(derv){return derv.op===dist_datamodel.DM_DERIVATIVES.GROUPBY}),"criteria"),{}),measures=dataModel.getFieldspace().getMeasure();(measureFieldNames=measureFieldNames.length?measureFieldNames:Object.keys(measures)).forEach(function(measureName){if(nearestReducers[measureName])filteredReducers[measureName]=nearestReducers[measureName];else{var measureField=measures[measureName];measureField&&(filteredReducers[measureName]=measureField.defAggFn())}})}return filteredReducers},retrieveFieldDisplayName=function retrieveFieldDisplayName(dm,fieldName){return dm.getFieldspace().fieldsObj()[fieldName].displayName()},xhtml="http://www.w3.org/1999/xhtml",src_namespaces={svg:"http://www.w3.org/2000/svg",xhtml:xhtml,xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace",xmlns:"http://www.w3.org/2000/xmlns/"},src_namespace=function(name){var prefix=name+="",i=prefix.indexOf(":");return i>=0&&"xmlns"!==(prefix=name.slice(0,i))&&(name=name.slice(i+1)),src_namespaces.hasOwnProperty(prefix)?{space:src_namespaces[prefix],local:name}:name};var creator=function(name){var fullname=src_namespace(name);return(fullname.local?function creatorFixed(fullname){return function(){return this.ownerDocument.createElementNS(fullname.space,fullname.local)}}:function creatorInherit(name){return function(){var document=this.ownerDocument,uri=this.namespaceURI;return uri===xhtml&&document.documentElement.namespaceURI===xhtml?document.createElement(name):document.createElementNS(uri,name)}})(fullname)};function selector_none(){}var src_selector=function(selector){return null==selector?selector_none:function(){return this.querySelector(selector)}};function selectorAll_empty(){return[]}var selectorAll=function(selector){return null==selector?selectorAll_empty:function(){return this.querySelectorAll(selector)}},matcher=function(selector){return function(){return this.matches(selector)}},sparse=function(update){return new Array(update.length)};function EnterNode(parent,datum){this.ownerDocument=parent.ownerDocument,this.namespaceURI=parent.namespaceURI,this._next=null,this._parent=parent,this.__data__=datum}EnterNode.prototype={constructor:EnterNode,appendChild:function appendChild(child){return this._parent.insertBefore(child,this._next)},insertBefore:function insertBefore(child,next){return this._parent.insertBefore(child,next)},querySelector:function querySelector(selector){return this._parent.querySelector(selector)},querySelectorAll:function querySelectorAll(selector){return this._parent.querySelectorAll(selector)}};var keyPrefix="$";function bindIndex(parent,group,enter,update,exit,data){for(var node,i=0,groupLength=group.length,dataLength=data.length;ib?1:a>=b?0:NaN}var src_window=function(node){return node.ownerDocument&&node.ownerDocument.defaultView||node.document&&node||node.defaultView};function styleValue(node,name){return node.style.getPropertyValue(name)||src_window(node).getComputedStyle(node,null).getPropertyValue(name)}function classArray(string){return string.trim().split(/^|\s+/)}function classList(node){return node.classList||new ClassList(node)}function ClassList(node){this._node=node,this._names=classArray(node.getAttribute("class")||"")}function classedAdd(node,names){for(var list=classList(node),i=-1,n=names.length;++i=0&&(this._names.splice(i,1),this._node.setAttribute("class",this._names.join(" ")))},contains:function contains(name){return this._names.indexOf(name)>=0}};function textRemove(){this.textContent=""}function htmlRemove(){this.innerHTML=""}function raise_raise(){this.nextSibling&&this.parentNode.appendChild(this)}function lower(){this.previousSibling&&this.parentNode.insertBefore(this,this.parentNode.firstChild)}function constantNull(){return null}function remove_remove(){var parent=this.parentNode;parent&&parent.removeChild(this)}function selection_cloneShallow(){return this.parentNode.insertBefore(this.cloneNode(!1),this.nextSibling)}function selection_cloneDeep(){return this.parentNode.insertBefore(this.cloneNode(!0),this.nextSibling)}var filterEvents={},on_event=null;"undefined"!=typeof document&&("onmouseenter"in document.documentElement||(filterEvents={mouseenter:"mouseover",mouseleave:"mouseout"}));function filterContextListener(listener,index,group){return listener=contextListener(listener,index,group),function(event){var related=event.relatedTarget;related&&(related===this||8&related.compareDocumentPosition(this))||listener.call(this,event)}}function contextListener(listener,index,group){return function(event1){var event0=on_event;on_event=event1;try{listener.call(this,this.__data__,index,group)}finally{on_event=event0}}}function onRemove(typename){return function(){var on=this.__on;if(on){for(var o,j=0,i=-1,m=on.length;j=i1&&(i1=i0+1);!(next=updateGroup[i1])&&++i1=0;)(node=group[i])&&(next&&4^node.compareDocumentPosition(next)&&next.parentNode.insertBefore(node,next),next=node);return this},sort:function(compare){function compareNode(a,b){return a&&b?compare(a.__data__,b.__data__):!a-!b}compare||(compare=sort_ascending);for(var groups=this._groups,m=groups.length,sortgroups=new Array(m),j=0;j1?this.each((null==value?function styleRemove(name){return function(){this.style.removeProperty(name)}}:"function"==typeof value?function styleFunction(name,value,priority){return function(){var v=value.apply(this,arguments);null==v?this.style.removeProperty(name):this.style.setProperty(name,v,priority)}}:function styleConstant(name,value,priority){return function(){this.style.setProperty(name,value,priority)}})(name,value,null==priority?"":priority)):styleValue(this.node(),name)},property:function(name,value){return arguments.length>1?this.each((null==value?function propertyRemove(name){return function(){delete this[name]}}:"function"==typeof value?function propertyFunction(name,value){return function(){var v=value.apply(this,arguments);null==v?delete this[name]:this[name]=v}}:function propertyConstant(name,value){return function(){this[name]=value}})(name,value)):this.node()[name]},classed:function(name,value){var names=classArray(name+"");if(arguments.length<2){for(var list=classList(this.node()),i=-1,n=names.length;++i=0&&(name=t.slice(i+1),t=t.slice(0,i)),{type:t,name:name}})}(typename+""),n=typenames.length;if(!(arguments.length<2)){for(on=value?onAdd:onRemove,null==capture&&(capture=!1),i=0;i=0&&(name=t.slice(i+1),t=t.slice(0,i)),t&&!types.hasOwnProperty(t))throw new Error("unknown type: "+t);return{type:t,name:name}})}(typename+"",_),i=-1,n=T.length;if(!(arguments.length<2)){if(null!=callback&&"function"!=typeof callback)throw new Error("invalid callback: "+callback);for(;++i0)for(var n,t,args=new Array(n),i=0;iclickDistance2}gestures.mouse("drag")}function mouseupped(){src_select(on_event.view).on("mousemove.drag mouseup.drag",null),function yesdrag(view,noclick){var root=view.document.documentElement,selection=src_select(view).on("dragstart.drag",null);noclick&&(selection.on("click.drag",noevent,!0),setTimeout(function(){selection.on("click.drag",null)},0)),"onselectstart"in root?selection.on("selectstart.drag",null):(root.style.MozUserSelect=root.__noselect,delete root.__noselect)}(on_event.view,mousemoving),noevent(),gestures.mouse("end")}function touchstarted(){if(filter.apply(this,arguments)){var i,gesture,touches=on_event.changedTouches,c=container.apply(this,arguments),n=touches.length;for(i=0;i=0&&t._call.call(null,e),t=t._next;--timer_frame}()}finally{timer_frame=0,function nap(){var t0,t2,t1=taskHead,time=1/0;for(;t1;)t1._call?(time>t1._time&&(time=t1._time),t0=t1,t1=t1._next):(t2=t1._next,t1._next=null,t1=t0?t0._next=t2:taskHead=t2);taskTail=t0,sleep(time)}(),clockNow=0}}function poke(){var now=clock.now(),delay=now-clockLast;delay>pokeDelay&&(clockSkew-=delay,clockLast=now)}function sleep(time){timer_frame||(timeout&&(timeout=clearTimeout(timeout)),time-clockNow>24?(time<1/0&&(timeout=setTimeout(wake,time-clock.now()-clockSkew)),timer_interval&&(timer_interval=clearInterval(timer_interval))):(timer_interval||(clockLast=clock.now(),timer_interval=setInterval(poke,pokeDelay)),timer_frame=1,setFrame(wake)))}Timer.prototype=timer_timer.prototype={constructor:Timer,restart:function restart(callback,delay,time){if("function"!=typeof callback)throw new TypeError("callback is not a function");time=(null==time?now():+time)+(null==delay?0:+delay),this._next||taskTail===this||(taskTail?taskTail._next=this:taskHead=this,taskTail=this),this._call=callback,this._time=time,sleep()},stop:function stop(){this._call&&(this._call=null,this._time=1/0,sleep())}};var src_timeout=function(callback,delay,time){var t=new Timer;return delay=null==delay?0:+delay,t.restart(function(elapsed){t.stop(),callback(elapsed+delay)},delay,time),t},emptyOn=src_dispatch("start","end","cancel","interrupt"),emptyTween=[],CREATED=0,SCHEDULED=1,STARTING=2,STARTED=3,RUNNING=4,ENDING=5,ENDED=6,transition_schedule=function(node,name,id,index,group,timing){var schedules=node.__transition;if(schedules){if(id in schedules)return}else node.__transition={};!function schedule_create(node,id,self){var tween,schedules=node.__transition;function start(elapsed){var i,j,n,o;if(self.state!==SCHEDULED)return stop();for(i in schedules)if((o=schedules[i]).name===self.name){if(o.state===STARTED)return src_timeout(start);o.state===RUNNING?(o.state=ENDED,o.timer.stop(),o.on.call("interrupt",node,node.__data__,o.index,o.group),delete schedules[i]):+iCREATED)throw new Error("too late; already scheduled");return schedule}function schedule_set(node,id){var schedule=schedule_get(node,id);if(schedule.state>STARTED)throw new Error("too late; already running");return schedule}function schedule_get(node,id){var schedule=node.__transition;if(!schedule||!(schedule=schedule[id]))throw new Error("transition not found");return schedule}function tweenValue(transition,name,value){var id=transition._id;return transition.each(function(){var schedule=schedule_set(this,id);(schedule.value||(schedule.value={}))[name]=value.apply(this,arguments)}),function(node){return schedule_get(node,id).value[name]}}var transition_interpolate=function(a,b){var c;return("number"==typeof b?src_number:b instanceof color_color?src_rgb:(c=color_color(b))?(b=c,src_rgb):src_string)(a,b)};var transition_selection_Selection=src_selection.prototype.constructor;function style_styleRemove(name){return function(){this.style.removeProperty(name)}}var transition_id=0;function Transition(groups,parents,name,id){this._groups=groups,this._parents=parents,this._name=name,this._id=id}function newId(){return++transition_id}var selection_prototype=src_selection.prototype;Transition.prototype=function src_transition_transition(name){return src_selection().transition(name)}.prototype={constructor:Transition,select:function(select){var name=this._name,id=this._id;"function"!=typeof select&&(select=src_selector(select));for(var groups=this._groups,m=groups.length,subgroups=new Array(m),j=0;j=0&&(t=t.slice(0,i)),!t||"start"===t})}(name)?init:schedule_set;return function(){var schedule=sit(this,id),on=schedule.on;on!==on0&&(on1=(on0=on).copy()).on(name,listener),schedule.on=on1}}(id,name,listener))},attr:function(name,value){var fullname=src_namespace(name),i="transform"===fullname?interpolateTransformSvg:transition_interpolate;return this.attrTween(name,"function"==typeof value?(fullname.local?function attr_attrFunctionNS(fullname,interpolate,value){var string00,string10,interpolate0;return function(){var string0,string1,value1=value(this);if(null!=value1)return(string0=this.getAttributeNS(fullname.space,fullname.local))===(string1=value1+"")?null:string0===string00&&string1===string10?interpolate0:(string10=string1,interpolate0=interpolate(string00=string0,value1));this.removeAttributeNS(fullname.space,fullname.local)}}:function attr_attrFunction(name,interpolate,value){var string00,string10,interpolate0;return function(){var string0,string1,value1=value(this);if(null!=value1)return(string0=this.getAttribute(name))===(string1=value1+"")?null:string0===string00&&string1===string10?interpolate0:(string10=string1,interpolate0=interpolate(string00=string0,value1));this.removeAttribute(name)}})(fullname,i,tweenValue(this,"attr."+name,value)):null==value?(fullname.local?function attr_attrRemoveNS(fullname){return function(){this.removeAttributeNS(fullname.space,fullname.local)}}:function attr_attrRemove(name){return function(){this.removeAttribute(name)}})(fullname):(fullname.local?function attr_attrConstantNS(fullname,interpolate,value1){var string00,interpolate0,string1=value1+"";return function(){var string0=this.getAttributeNS(fullname.space,fullname.local);return string0===string1?null:string0===string00?interpolate0:interpolate0=interpolate(string00=string0,value1)}}:function attr_attrConstant(name,interpolate,value1){var string00,interpolate0,string1=value1+"";return function(){var string0=this.getAttribute(name);return string0===string1?null:string0===string00?interpolate0:interpolate0=interpolate(string00=string0,value1)}})(fullname,i,value))},attrTween:function(name,value){var key="attr."+name;if(arguments.length<2)return(key=this.tween(key))&&key._value;if(null==value)return this.tween(key,null);if("function"!=typeof value)throw new Error;var fullname=src_namespace(name);return this.tween(key,(fullname.local?function attrTweenNS(fullname,value){var t0,i0;function tween(){var i=value.apply(this,arguments);return i!==i0&&(t0=(i0=i)&&function attrInterpolateNS(fullname,i){return function(t){this.setAttributeNS(fullname.space,fullname.local,i(t))}}(fullname,i)),t0}return tween._value=value,tween}:function attrTween(name,value){var t0,i0;function tween(){var i=value.apply(this,arguments);return i!==i0&&(t0=(i0=i)&&function attrInterpolate(name,i){return function(t){this.setAttribute(name,i(t))}}(name,i)),t0}return tween._value=value,tween})(fullname,value))},style:function(name,value,priority){var i="transform"==(name+="")?interpolateTransformCss:transition_interpolate;return null==value?this.styleTween(name,function styleNull(name,interpolate){var string00,string10,interpolate0;return function(){var string0=styleValue(this,name),string1=(this.style.removeProperty(name),styleValue(this,name));return string0===string1?null:string0===string00&&string1===string10?interpolate0:interpolate0=interpolate(string00=string0,string10=string1)}}(name,i)).on("end.style."+name,style_styleRemove(name)):"function"==typeof value?this.styleTween(name,function style_styleFunction(name,interpolate,value){var string00,string10,interpolate0;return function(){var string0=styleValue(this,name),value1=value(this),string1=value1+"";return null==value1&&(this.style.removeProperty(name),string1=value1=styleValue(this,name)),string0===string1?null:string0===string00&&string1===string10?interpolate0:(string10=string1,interpolate0=interpolate(string00=string0,value1))}}(name,i,tweenValue(this,"style."+name,value))).each(function styleMaybeRemove(id,name){var on0,on1,listener0,remove,key="style."+name,event="end."+key;return function(){var schedule=schedule_set(this,id),on=schedule.on,listener=null==schedule.value[key]?remove||(remove=style_styleRemove(name)):void 0;on===on0&&listener0===listener||(on1=(on0=on).copy()).on(event,listener0=listener),schedule.on=on1}}(this._id,name)):this.styleTween(name,function style_styleConstant(name,interpolate,value1){var string00,interpolate0,string1=value1+"";return function(){var string0=styleValue(this,name);return string0===string1?null:string0===string00?interpolate0:interpolate0=interpolate(string00=string0,value1)}}(name,i,value),priority).on("end.style."+name,null)},styleTween:function(name,value,priority){var key="style."+(name+="");if(arguments.length<2)return(key=this.tween(key))&&key._value;if(null==value)return this.tween(key,null);if("function"!=typeof value)throw new Error;return this.tween(key,function styleTween(name,value,priority){var t,i0;function tween(){var i=value.apply(this,arguments);return i!==i0&&(t=(i0=i)&&function styleInterpolate(name,i,priority){return function(t){this.style.setProperty(name,i(t),priority)}}(name,i,priority)),t}return tween._value=value,tween}(name,value,null==priority?"":priority))},text:function(value){return this.tween("text","function"==typeof value?function text_textFunction(value){return function(){var value1=value(this);this.textContent=null==value1?"":value1}}(tweenValue(this,"text",value)):function text_textConstant(value){return function(){this.textContent=value}}(null==value?"":value+""))},remove:function(){return this.on("end.remove",function removeFunction(id){return function(){var parent=this.parentNode;for(var i in this.__transition)if(+i!==id)return;parent&&parent.removeChild(this)}}(this._id))},tween:function(name,value){var id=this._id;if(name+="",arguments.length<2){for(var t,tween=schedule_get(this.node(),id).tween,i=0,n=tween.length;iSTARTING&&schedule.state4&&void 0!==arguments[4]?arguments[4]:{},keyFn=arguments.length>5?arguments[5]:void 0;(parent instanceof HTMLElement||parent instanceof SVGElement)&&(parent=renderer_utils_selectElement(parent));var filter,selectorVal=selector?selector[0]:null,selectorType=null,actualSelector=null,element=null,enterSel=null,mergeSel=null;selectorVal?"#"===selectorVal?(selectorType="id",actualSelector=selector):(selectorType="class",actualSelector="."===selector[0]?selector:".".concat(selector)):(actualSelector=elemType,filter=!0),element=parent.selectAll(actualSelector),filter&&(element=element.filter(function(){return this.parentNode===parent.node()})),enterSel=(element=element.data(data,keyFn)).enter().append(elemType||"div"),callbacks.enter&&enterSel.each(function(){for(var _len=arguments.length,params=new Array(_len),_key=0;_key<_len;_key++)params[_key]=arguments[_key];callbacks.enter.apply(callbacks,[renderer_utils_selectElement(this)].concat(params))}),mergeSel=enterSel.merge(element),callbacks.update&&mergeSel.each(function(){for(var _len2=arguments.length,params=new Array(_len2),_key2=0;_key2<_len2;_key2++)params[_key2]=arguments[_key2];callbacks.update.apply(callbacks,[renderer_utils_selectElement(this)].concat(params))}),"class"===selectorType?mergeSel.classed("."===selectorVal?selector.substring(1,selector.length):selector,!0):"id"===selectorType&&mergeSel.attr("id",selector.substring(1,selector.length));var exitSel=element.exit();return callbacks.exit?exitSel.each(function(){for(var _len3=arguments.length,params=new Array(_len3),_key3=0;_key3<_len3;_key3++)params[_key3]=arguments[_key3];callbacks.exit.apply(callbacks,[renderer_utils_selectElement(this)].concat(params))}):exitSel.remove(),mergeSel},applyStyle=function applyStyle(elem,styleObj){return Object.entries(styleObj).forEach(function(d){elem.style(d[0],d[1])},void 0),elem},setElementAttrs=function setElementAttrs(element,attrs){for(var key in attrs)({}).hasOwnProperty.call(attrs,key)&&element.attr(key,attrs[key])},renderer_utils_setAttrs=function setAttrs(element,attrs,className){return element instanceof src_selection||(element=renderer_utils_selectElement(element)),void 0!==className?element.selectAll(".".concat(className)).each(function(){setElementAttrs(src_select(this),attrs)}):setElementAttrs(element,attrs),element},renderer_utils_setStyles=function setStyles(element,styles){for(var key in element instanceof src_selection||(element=renderer_utils_selectElement(element)),styles)({}).hasOwnProperty.call(styles,key)&&element.style(key,styles[key]);return element},renderer_utils_createElements=function createElements(params){var data,sel,container=src_select(params.container);"number"==typeof(data=params.data)&&(data=Array(data).fill().map(function(d,i){return i})),sel=container.selectAll(params.selector).data(data),(sel=container.selectAll(params.selector).filter(function(){return this.parentNode===container.node()}).data(params.data)).enter().append(params.append).merge(sel).each(function(d,i){params.each(d,src_select(this),i)}).attr("class",params.className||""),sel.exit().remove()},renderer_utils_getClientPoint=function getClientPoint(){var pos=src_point.apply(void 0,arguments);return{x:pos[0],y:pos[1]}},renderer_utils_getEvent=function getEvent(){return on_event},renderer_utils_getD3Drag=function getD3Drag(){return src_drag},renderer_utils_getSmartComputedStyle=function getSmartComputedStyle(group,css){var textEl,mandatoryStyle={"fill-opacity":0},className="string"==typeof css?css:css instanceof Array?css.join(" "):void 0;textEl=group.node()instanceof HTMLElement?group.append("div").html("W"):group.append("text").text("W"),className?textEl.attr("class",className):"object"===renderer_utils_typeof(css)&&(delete css["fill-opacity"],mergeRecursive(mandatoryStyle,css)),textEl.style(mandatoryStyle);var computedStyle=window.getComputedStyle(textEl.node()),styleForSmartLabel={fontSize:computedStyle.fontSize,fontFamily:computedStyle.fontFamily,fontWeight:computedStyle.fontWeight,fontStyle:computedStyle.fontStyle};return textEl.remove(),styleForSmartLabel},hasTouch=function hasTouch(){return"ontouchstart"in document.documentElement},SmartlabelManager=__webpack_require__(4),SmartlabelManager_default=__webpack_require__.n(SmartlabelManager),events=["initialized","beforeupdate","updated","beforedraw","drawn","beforeremove","removed","animationend"],EVENT_LIST=[];["canvas","unit","layer","axis","facet-headers","legend","caption"].forEach(function(composition){events.forEach(function(event){EVENT_LIST.push("".concat(composition,".").concat(event))})});var event_list=EVENT_LIST;function lifecycle_manager_defineProperties(target,props){for(var i=0;i0&&void 0!==arguments[0]?arguments[0]:{};this._lifeCycles=lifeCycles,this._releasePromisesFromCache()}},{key:"_resetTargetPromise",value:function _resetTargetPromise(eventName){var _this4=this;setTimeout(function(){_this4._notifiers[eventName]=lifecycle_manager_resolver,_this4._promises.set(eventName,_this4._makeNotifierPromise(eventName))},0)}}]),LifeCycleManager}(),src_InvalidAwareTypes=datamodel_default.a.InvalidAwareTypes,DRAG="drag",HOVER="hover",SELECTIONDRAG="selectiondrag",CLICK="click",LONGTOUCH="longtouch",TOUCHDRAG="touchdrag",ALL_ACTIONS="*",SELECTION_NEW_ENTRY=1,SELECTION_NEW_EXIT=-1,SELECTION_NULL=0,SELECTION_OLD_ENTRY=2,SELECTION_OLD_EXIT=-2;function selection_set_defineProperties(target,props){for(var i=0;i0?(set[key]===SELECTION_OLD_ENTRY&&retObj.entrySet[0].push(key),set[key]===SELECTION_NEW_ENTRY&&retObj.entrySet[1].push(key)):set[key]<0&&(set[key]===SELECTION_OLD_EXIT&&retObj.exitSet[0].push(key),set[key]===SELECTION_NEW_EXIT&&retObj.exitSet[1].push(key)),retObj.completeSet.push(key);return["entrySet","exitSet"].forEach(function(type){retObj[type]=retObj[type].map(function(e){return e.map(Number)})}),retObj.completeSet=retObj.completeSet.map(Number),retObj}},{key:"reset",value:function reset(ids){var set=this._set;if(ids)ids.forEach(function(i){set[i]=SELECTION_NULL});else{var lockedSel=this._lockedSelection;for(var key in set)key in lockedSel||(set[key]=SELECTION_NULL)}return this._resetted=!0,this}},{key:"getEntrySet",value:function getEntrySet(){var set=this._set,addSet=[];for(var key in set)set[key]===SELECTION_NEW_ENTRY&&addSet.push(key);return addSet}},{key:"getExistingEntrySet",value:function getExistingEntrySet(addSet){var set=this._set;return addSet.filter(function(d){return set[d]===SELECTION_NEW_ENTRY||set[d]===SELECTION_OLD_ENTRY})}},{key:"getExistingExitSet",value:function getExistingExitSet(removeSet){var set=this._set;return removeSet.filter(function(d){return set[d]===SELECTION_NEW_EXIT||set[d]===SELECTION_OLD_EXIT})}},{key:"getOldEntry",value:function getOldEntry(){var set=this._set,updateSet=[];for(var key in set)set[key]===SELECTION_OLD_ENTRY&&updateSet.push(key);return updateSet}},{key:"getOldExit",value:function getOldExit(){var set=this._set,updateSet=[];for(var key in set)set[key]===SELECTION_OLD_EXIT&&updateSet.push(key);return updateSet}},{key:"getExitSet",value:function getExitSet(){var set=this._set,removeSet=[];for(var key in set)set[key]===SELECTION_NEW_EXIT&&removeSet.push(key);return removeSet}},{key:"getCompleteSet",value:function getCompleteSet(){var set=this._set,completeSet=[];for(var key in set)completeSet.push(key);return completeSet}},{key:"getCompleteSetCount",value:function getCompleteSetCount(){return this._completeSetCount}},{key:"resetted",value:function resetted(){return this._resetted}},{key:"toggle",value:function toggle(){var set=this._set;for(var key in set)set[key]===SELECTION_NEW_ENTRY?set[key]=SELECTION_NEW_EXIT:set[key]===SELECTION_NEW_EXIT?set[key]=SELECTION_NEW_ENTRY:set[key]===SELECTION_OLD_ENTRY?set[key]=SELECTION_OLD_EXIT:set[key]=SELECTION_OLD_ENTRY;return this}}]),SelectionSet}();function helper_toConsumableArray(arr){return function helper_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);i3&&void 0!==arguments[3]?arguments[3]:{},sideEffectStore=this.sideEffects(),sideEffect=sideEffectStore[name],disable=!1;options.filter&&options.filter(sideEffect)&&(disable=!0),!disable&&sideEffectStore[name].apply(selectionSet,payload,options)}},{key:"registerPropagationBehaviourMap",value:function registerPropagationBehaviourMap(map){return this._propagationBehaviourMap=Object.assign(this._propagationBehaviourMap,map||{}),this}},{key:"dispatchBehaviour",value:function dispatchBehaviour(behaviour,payload){var propagationInfo=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},propagate=void 0===propagationInfo.propagate||propagationInfo.propagate,action=this._actions.behavioural[behaviour],sideEffects=function getSideEffects(behaviour,behaviourEffectMap){var sideEffects=[];for(var key in behaviourEffectMap){var behaviours=key.split(",");behaviours.some(function(d){return d===behaviour})&&sideEffects.push({effects:behaviourEffectMap[key],behaviours:behaviours})}return sideEffects}(behaviour,this._behaviourEffectMap);if(this._propagationInf=propagationInfo,action){var selectionSet=action.dispatch(payload),propagationSelectionSet=this.getPropagationSelectionSet(selectionSet);this._entryExitSet[behaviour]=propagationSelectionSet;var shouldApplySideEffects=this.shouldApplySideEffects(propagate);if(propagate&&this.propagate(behaviour,payload,selectionSet.find(function(d){return d.sourceSelectionSet}),sideEffects),shouldApplySideEffects){var applicableSideEffects=this.getApplicableSideEffects(sideEffects,payload,propagationInfo);this.applySideEffects(applicableSideEffects,propagationSelectionSet,payload)}}return this}},{key:"getPropagationSelectionSet",value:function getPropagationSelectionSet(selectionSet){return selectionSet.find(function(d){return!d.sourceSelectionSet})}},{key:"shouldApplySideEffects",value:function shouldApplySideEffects(){return!0}},{key:"changeBehaviourStateOnPropagation",value:function changeBehaviourStateOnPropagation(behaviour,value){return value instanceof Function?this._sourceBehaviours[behaviour]=value:this._sourceBehaviours[behaviour]=function(){return value},this}},{key:"changeSideEffectStateOnPropagation",value:function changeSideEffectStateOnPropagation(sideEffect,value){value instanceof Function?this._sourceSideEffects[sideEffect]=value:this._sourceSideEffects[sideEffect]=function(){return value}}},{key:"propagate",value:function propagate(){return this}},{key:"sideEffects",value:function sideEffects(){return arguments.length?(this._sideEffects=arguments.length<=0?void 0:arguments[0],this):this._sideEffects}},{key:"enableSideEffects",value:function enableSideEffects(fn){return changeSideEffectAvailability(this,fn,!0),this}},{key:"disableSideEffects",value:function disableSideEffects(fn){return changeSideEffectAvailability(this,fn,!1),this}},{key:"dissociateBehaviour",value:function dissociateBehaviour(behaviour,physicalAction){var actionBehaviourMap=this._actionBehaviourMap;for(var key in actionBehaviourMap)if(key===physicalAction){var behaviourMap=actionBehaviourMap[key];behaviourMap.behaviours=behaviourMap.behaviours.filter(function(d){return d!==behaviour}),this.mapActionsAndBehaviour(key)}return this}},{key:"dissociateSideEffect",value:function dissociateSideEffect(sideEffect,behaviour){var behaviourEffectMap=this._behaviourEffectMap;return behaviourEffectMap[behaviour]=behaviourEffectMap[behaviour].filter(function(d){return(d.name||d)!==sideEffect}),this}},{key:"getApplicableSideEffects",value:function getApplicableSideEffects(sideEffects){return sideEffects}},{key:"attachPropagationListener",value:function attachPropagationListener(dataModel){return dataModel.unsubscribe("propagation"),dataModel.on("propagation",this.onDataModelPropagation()),this}},{key:"onDataModelPropagation",value:function onDataModelPropagation(){var _this2=this;return function(propValue){var payload=propValue.payload,action=payload.action;_this2.dispatchBehaviour(action,payload,{propagate:!1})}}},{key:"createSelectionSet",value:function createSelectionSet(uniqueIds,behaviouralActions){var behaviours=behaviouralActions||this._actions.behavioural,selectionSet=this._selectionSet,volatileSelectionSet=this._volatileSelectionSet;for(var key in behaviours)({}).hasOwnProperty.call(behaviours,key)&&(selectionSet[key]=new src_selection_set(uniqueIds),volatileSelectionSet[key]=new src_selection_set(uniqueIds,!0));return this._volatileSelectionSet=volatileSelectionSet,this.selectionSet(selectionSet),this}},{key:"selectionSet",value:function selectionSet(){return arguments.length?(this._selectionSet=arguments.length<=0?void 0:arguments[0],this):this._selectionSet}},{key:"initializeSideEffects",value:function initializeSideEffects(){var sideEffectDefinitions=this._sideEffectDefinitions;return this.sideEffects(function initializeSideEffects(context,sideEffects){var sideEffectsMap=context._sideEffects,config=context.config();return(sideEffects=sideEffects instanceof Array?sideEffects:Object.values(sideEffects)).forEach(function(SideEffect){var formalName=SideEffect.formalName(),sideEffectInstance=sideEffectsMap[formalName];sideEffectsMap[formalName]=sideEffectInstance||new SideEffect(context);var sideEffectConf=config[formalName];sideEffectConf&&sideEffectsMap[formalName].config(sideEffectConf)}),sideEffectsMap}(this,sideEffectDefinitions)),this}},{key:"registerPhysicalActions",value:function registerPhysicalActions(actions){var initedActions=function initializePhysicalActions(context,actions){var physicalActions={};for(var name in actions)({}).hasOwnProperty.call(name,actions)||(physicalActions[name]=actions[name](context));return physicalActions}(this,actions);return Object.assign(this._actions.physical,initedActions),this}},{key:"propagateWith",value:function propagateWith(action,fields){var append=arguments.length>2&&void 0!==arguments[2]&&arguments[2],behaviouralActions=this._actions.behavioural;if(fields.length){if(action===ALL_ACTIONS)for(var key in behaviouralActions)this._propagationFields[key]={fields:fields,append:append};else this._propagationFields[action]={fields:fields,append:append};return this}return this._propagationFields}},{key:"mapActionsAndBehaviour",value:function mapActionsAndBehaviour(phyAction){var initedPhysicalActions=this._actions.physical,map=this._actionBehaviourMap;for(var action in map)if(!{}.hasOwnProperty.call(action,map)&&action===(phyAction||action)){var target=void 0,mapObj=map[action];target=mapObj.target;var touch=mapObj.touch;target||(target=this.context.getDefaultTargetContainer()),(hasTouch()?!0===touch||void 0===touch:!touch)&&this.bindActionWithBehaviour(initedPhysicalActions[action],target,mapObj.behaviours)}return this}},{key:"registerPhysicalBehaviouralMap",value:function registerPhysicalBehaviouralMap(map){return this._actionBehaviourMap=mergeRecursive(this._actionBehaviourMap,map),this}},{key:"bindActionWithBehaviour",value:function bindActionWithBehaviour(action,targets,behaviourList){var _this3=this;return"string"==typeof targets&&(targets=[targets]),targets.forEach(function(target){var mount=_this3.context.mount(),nodes=target.node instanceof Function?target:renderer_utils_selectElement(mount).selectAll(target);nodes.empty()||(nodes instanceof Array?nodes.forEach(function(node){action(renderer_utils_selectElement(node),behaviourList)}):action(nodes,behaviourList))}),this}},{key:"getPropagationInf",value:function getPropagationInf(){return this._propagationInf}},{key:"getAddSetFromCriteria",value:function getAddSetFromCriteria(criteria){var propagationInf=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},context=this.context,filteredDataModel=propagationInf.data?propagationInf.data:context.getDataModelFromIdentifiers(criteria,"all"),xFields=context.fields().x||[],yFields=context.fields().y||[],xMeasures=xFields.every(function(field){return field.type()===dist_datamodel.FieldType.MEASURE}),yMeasures=yFields.every(function(field){return field.type()===dist_datamodel.FieldType.MEASURE});return{model:filteredDataModel,uids:null===criteria?null:propagationInf.data?function filterPropagationModel(model,propModel,measures){var filteredModel,_propModel$getData=propModel.getData(),data=_propModel$getData.data,schema=_propModel$getData.schema;if(schema.length){var fieldMap=model.getFieldsConfig();filteredModel=model.select(function(fields){return data.some(function(row){return schema.every(function(propField,idx){return!(measures||propField.name in fieldMap&&fieldMap[propField.name].def.type!==dist_datamodel.FieldType.MEASURE)||row[idx]===fields[propField.name].valueOf()})})},{saveChild:!1})}else filteredModel=propModel;return filteredModel}(this.getFullData(),propagationInf.data[0],xMeasures&&yMeasures).getData().uids:filteredDataModel[0].getData().uids}}},{key:"getSelectionSets",value:function getSelectionSets(action){var sourceId=this.context.id(),propagationSource=(this._propagationInf||{}).sourceId,applicableSelectionSets=[];return propagationSource!==sourceId&&(applicableSelectionSets=[this._volatileSelectionSet[action]]),propagationSource&&applicableSelectionSets.push(this.selectionSet()[action]),applicableSelectionSets}},{key:"getFullData",value:function getFullData(){return this.context.data()}},{key:"resetted",value:function resetted(){return this._resetted}},{key:"getEntryExitSet",value:function getEntryExitSet(behaviour){return this._entryExitSet[behaviour]}}]),Firebolt}();function generic_defineProperties(target,props){for(var i=0;i1&&void 0!==arguments[1]?arguments[1]:{},sourceIdentifiers=propagationInf.sourceIdentifiers;return sourceIdentifiers?sourceIdentifiers.getSchema().map(function(d){return d.name}):criteria instanceof Array?criteria[0]:Object.keys(criteria||{})}(propagationInf,payload.criteria),sourceSelectionSet:!0===selectionSet._volatile}}},{key:"enable",value:function enable(){this._enabled=!0}},{key:"disable",value:function disable(){this._enabled=!1}},{key:"isEnabled",value:function isEnabled(){return this._enabled}}],[{key:"mutates",value:function mutates(){return!1}}]),GenericBehaviour}();function volatile_typeof(obj){return(volatile_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function volatile_defineProperties(target,props){for(var i=0;iydom[0]?ydom:xdom,max=min===ydom?xdom:ydom;min[1]100&&Math.abs(startPos.x-endPos.x)<=5)){endPos.x=Math.max(0,Math.min(endPos.x,drawingInf.width)),endPos.y=Math.max(0,Math.min(endPos.y,drawingInf.height));var payload=drag_action_config(firebolt.context.getSourceInfo(),{startPos:startPos,endPos:endPos,snap:!0},firebolt.context.data().getFieldsConfig());payload.dragEnd=!0,behaviours.forEach(function(beh){return firebolt.dispatchBehaviour(beh,payload)})}}))},physical_hover=function hover(firebolt){return function(targetEl,behaviours){var dispatchBehaviour=function dispatchBehaviour(args){var event=renderer_utils_getEvent(),context=firebolt.context,mode=context.config().interaction.tooltip.mode,pos=renderer_utils_getClientPoint(context.getDrawingContext().svgContainer,event),nearestPoint=context.getNearestPoint(pos.x,pos.y,{getAllPoints:"consolidated"===mode||"fragmented"===mode,data:args,event:event}),payload={criteria:nearestPoint?nearestPoint.id:null,showInPosition:nearestPoint.showInPosition,target:nearestPoint.target,position:pos,mode:mode};behaviours.forEach(function(beh){return firebolt.dispatchBehaviour(beh,payload)}),event.stopPropagation()};targetEl.on("mouseover",dispatchBehaviour).on("mousemove",dispatchBehaviour).on("mouseout",function(){behaviours.forEach(function(beh){return firebolt.dispatchBehaviour(beh,{criteria:null})})})}},helpers_generatePayloadFromEvent=function generatePayloadFromEvent(args,event,firebolt){var context=firebolt.context,pos=renderer_utils_getClientPoint(context.getDrawingContext().svgContainer,event.touches?event.touches[0]:event),nearestPoint=context.getNearestPoint(pos.x,pos.y,{data:args,event:event});return{criteria:nearestPoint?nearestPoint.id:null,showInPosition:nearestPoint.showInPosition,target:nearestPoint.target,position:pos}},physical_click=function click(firebolt){return function(targetEl,behaviours){targetEl.on("click",function dispatchBehaviour(args){var event=renderer_utils_getEvent(),payload=helpers_generatePayloadFromEvent(args,event,firebolt);behaviours.forEach(function(beh){return firebolt.dispatchBehaviour(beh,payload)}),event.stopPropagation()})}};function physical_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}var physicalActions=(physical_defineProperty(_physicalActions={},DRAG,function drag(firebolt){return function(targetEl,behaviours){drag_event_attachDragEvent(targetEl,behaviours,firebolt)}}),physical_defineProperty(_physicalActions,HOVER,physical_hover),physical_defineProperty(_physicalActions,CLICK,physical_click),physical_defineProperty(_physicalActions,LONGTOUCH,function longtouch(firebolt){return function(targetEl,behaviours){var event,touchEnd;touchEnd=!1,event=renderer_utils_getEvent(),targetEl.on("touchstart",function(args){event=renderer_utils_getEvent(),touchEnd=!1,setTimeout(function(){touchEnd?behaviours.forEach(function(beh){return firebolt.dispatchBehaviour(beh,{criteria:null})}):function dispatchBehaviour(args){var payload=helpers_generatePayloadFromEvent(args,event,firebolt);behaviours.forEach(function(beh){return firebolt.dispatchBehaviour(beh,payload)}),event.stopPropagation()}(args)},100)}).on("touchend",function(){touchEnd=!0})}}),physical_defineProperty(_physicalActions,TOUCHDRAG,function touchdrag(firebolt){return function(targetEl,behaviours){drag_event_attachDragEvent(targetEl,behaviours,firebolt,!0)}}),_physicalActions),PROPS={valueParser:{defaultValue:function defaultValue(val){return val}}};function generic_sideeffect_defineProperties(target,props){for(var i=0;i1&&void 0!==arguments[1]&&arguments[1];var interactionType=arguments.length>2?arguments[2]:void 0,apply=arguments.length>3?arguments[3]:void 0;return this.firebolt.context.layers().forEach(function(layer){return!1!==layer.config().interactive&&layer.applyInteractionStyle(interactionType,set.uids,apply)}),this}}]),SurrogateSideEffect}();function spawnable_typeof(obj){return(spawnable_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function spawnable_defineProperties(target,props){for(var i=0;i=0&&x2<=width&&y>=0&&y2<=height){var payload=drag_action_config(context.getSourceInfo(),{startPos:{x:x,y:y},endPos:{x:x2,y:y2}},context.data().getFieldsConfig());onDrag(payload)}}).on("end",function(){var width=drawingInf.width,height=drawingInf.height,x=Math.min(width-subject.width,Math.max(subject.x,0)),y=Math.min(height-subject.height,Math.max(subject.y,0)),y2=y+subject.height,x2=x+subject.width;if(x>=0&&x2<=width&&y>=0&&y2<=height){var payload=drag_action_config(context.getSourceInfo(),{startPos:{x:x,y:y},endPos:{x:x2,y:y2},snap:!0},context.data().getFieldsConfig());payload.dragEnd=!0,onDrag(payload)}}))}}(firebolt)(renderer_utils_selectElement(this),["brush"],sideEffect)}).merge(selection).each(function(attrs){var element=renderer_utils_selectElement(this);for(var key in transition&&(element=element.transition().duration(transition.duration)),attrs)({}).hasOwnProperty.call(attrs,key)&&isValidValue(attrs[key])&&element.attr(key,attrs[key])}),boxClassName=getQualifiedClassName(boxConf.defClassName,this._id,classPrefix);return selectionBox.classed(boxClassName.join(" "),!0),selectionBox.classed(boxConf.className,!0),this}},{key:"hide",value:function hide(drawingInf){helper_changeVisibility(this,drawingInf.sideEffectGroup,!1)}},{key:"show",value:function show(drawingInf){helper_changeVisibility(this,drawingInf.sideEffectGroup,!0)}}],[{key:"defaultConfig",value:function defaultConfig(){return{defClassName:"selection-box-group",className:"",classPrefix:"muze",box:{defClassName:"selection-box",className:""},transition:{duration:200}}}},{key:"formalName",value:function formalName(){return"selectionBox"}}]),SelectionBox}(),INITIAL_STYLE={position:"absolute",width:0,height:0},default_config_defaultConfig={classPrefix:"muze",defClassName:"tooltip-box",connectorClassName:"tooltip-connectors",className:"",row:{margin:0},content:{spacing:5,iconContainerSize:10,iconScale:1,iconShape:"circle",iconColor:"#ff0000",rowMargin:"0px",margin:10,separator:":",className:"tooltip-content-container",parentClassName:"tooltip-content-parent-container"},arrow:{size:10,disabled:!1,defClassName:"tooltip-arrow",className:"",color:"rgba(195,195,195,0.85)"}},helper_getArrowPos=function getArrowPos(orient,dim,measurement,config){var arrowPos,x=measurement.x,y=measurement.y,boxHeight=measurement.boxHeight,boxWidth=measurement.boxWidth,arrowWidth=config.arrow.disabled?0:config.arrow.size;if("left"===orient||"right"===orient){var start=0,diff=boxHeight/2,plotBottom=dim.y+dim.height,boxBottom=y+boxHeight;dim.y>y?(start=dim.y-y,diff=(plotBottom>=boxBottom?boxBottom-dim.y:dim.height)/2):boxBottom>plotBottom&&(diff=Math.abs(y-(dim.y+dim.height))/2),arrowPos=start+diff-arrowWidth/2}else{var _start=0,_diff=boxWidth/2,plotRight=dim.x+dim.width,boxRight=x+boxWidth;dim.x>x?(_start=dim.x-x,_diff=(plotRight>=boxRight?boxRight-dim.x:dim.width)/2):boxRight>plotRight&&(_diff=Math.abs(x-(dim.x+dim.width))/2),arrowPos=_start+_diff-arrowWidth/2}return arrowPos},helper_placeArrow=function placeArrow(context,position,arrowPos){var tooltipArrow=context._tooltipArrow,tooltipBackground=context._tooltipBackground,config=context._config,classPrefix=config.classPrefix,arrowConf=config.arrow,className=getQualifiedClassName(arrowConf.defClassName,context._id,config.classPrefix);tooltipArrow.style("display","block"),tooltipArrow.attr("class","".concat(className.join(" "))),"left"===position||"right"===position?(tooltipArrow.style("top","".concat(arrowPos,"px")),tooltipArrow.style("left",""),tooltipBackground.style("top","".concat(arrowPos,"px")),tooltipBackground.style("left","")):("bottom"===position?tooltipArrow.style("top","100%"):tooltipArrow.style("top","-".concat(arrowConf.size,"px")),tooltipArrow.style("left","".concat(arrowPos,"px")),"bottom"===position?tooltipBackground.style("top","100%"):tooltipBackground.style("top","-".concat(arrowConf.size+3,"px")),tooltipBackground.style("left","".concat(arrowPos,"px"))),tooltipArrow.classed("".concat(classPrefix,"-tooltip-arrow"),!0),tooltipArrow.classed("".concat(classPrefix,"-tooltip-arrow-").concat(context._arrowOrientation),!1),tooltipArrow.classed("".concat(classPrefix,"-tooltip-arrow-").concat(position),!0),tooltipBackground.classed("".concat(classPrefix,"-tooltip-background-arrow"),!0),tooltipBackground.classed("".concat(classPrefix,"-tooltip-background-arrow-").concat(context._arrowOrientation),!1),tooltipBackground.classed("".concat(classPrefix,"-tooltip-background-arrow-").concat(position),!0)};__webpack_require__(10);function content_defineProperties(target,props){for(var i=0;i0?(this._config=mergeRecursive(this._config,arguments.length<=0?void 0:arguments[0]),this):this._config}},{key:"update",value:function update(item){return this._model=item.model,this._formatter=item.formatter,this}},{key:"context",value:function context(ctx){return this._context=ctx,this}},{key:"render",value:function render(mount){var data,config=this._config,iconContainerSize=config.iconContainerSize,formatter=this._formatter,rowMargin=config.rowMargin,model=this._model;if(this._mount=mount,(data=model instanceof Array?model:formatter(this._model,this.config(),this._context))instanceof Function)mount.html(data());else{var content=data,displayFormat="default";isSimpleObject(data)&&(content=data.content,displayFormat=data.displayFormat);var body=makeElement(mount,"div",[displayFormat],"".concat(config.classPrefix,"-tooltip-content"),{},function(d){return d});if("table"===displayFormat){var table=makeElement(body,"table",[1],"".concat(config.classPrefix,"-tooltip-table")),tbody=makeElement(table,"tbody",[1],"".concat(config.classPrefix,"-tooltip-table-tbody")),rows=makeElement(tbody,"tr",content,"".concat(config.classPrefix,"-tooltip-table-row"));rows.each(function(d,i){renderer_utils_selectElement(this).classed("".concat(config.classPrefix,"-tooltip-table-row-").concat(i),!0)}),makeElement(rows,"td",function(d){return d},"".concat(config.classPrefix,"-tooltip-table-cell")).each(function(d){renderer_utils_selectElement(this).html(d)})}else{var _rows=makeElement(body,"div",content,"".concat(config.classPrefix,"-tooltip-row")),_cells=makeElement(_rows,"span",function(d){return d},"".concat(config.classPrefix,"-tooltip-content"));_cells.attr("class","".concat(config.classPrefix,"-tooltip-content")),renderer_utils_setStyles(_rows,{margin:rowMargin}),renderer_utils_setStyles(_cells,{display:"inline-block","margin-right":"".concat(config.spacing,"px")}),_cells.each(function(d){var el=renderer_utils_selectElement(this);if(el.html(""),d instanceof Object)if("icon"===d.type){var svg=makeElement(el,"svg",[1]),path=makeElement(svg,"path",[1]),shape=d.shape instanceof Function?d.shape:common_utils_getSymbol(d.shape);renderer_utils_setAttrs(svg,{x:0,y:0,width:iconContainerSize,height:iconContainerSize}),renderer_utils_setAttrs(path,{d:shape.size(d.size)(),transform:"translate(".concat(iconContainerSize/2,", ").concat(iconContainerSize/2,")")}),renderer_utils_setStyles(path,{fill:d.color}),renderer_utils_setStyles(svg,{width:"".concat(iconContainerSize,"px"),height:"".concat(iconContainerSize,"px")})}else el.html(d.value),d.className&&el.classed(d.className,!0),renderer_utils_setStyles(el,d.style);else el.html(d)})}}return this}},{key:"clear",value:function clear(){return this._model=null,this}}],[{key:"defaultConfig",value:function defaultConfig(){var config=default_config_defaultConfig.content;return config.classPrefix=default_config_defaultConfig.classPrefix,config}}]),Content}();function tooltip_defineProperties(target,props){for(var i=0;i0){var defConf=mergeRecursive({},this.constructor.defaultConfig());return this._config=mergeRecursive(defConf,arguments.length<=0?void 0:arguments[0]),this}return this._config}},{key:"addClass",value:function addClass(className){return this._tooltipContainer.classed(className,!0),this}},{key:"context",value:function context(){return arguments.length?(this._context=arguments.length<=0?void 0:arguments[0],this):this._context}},{key:"content",value:function content(name,data){var contentConfig=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},config=this.config(),classPrefix=config.classPrefix,contentClass=config.content.className,formatter=config.formatter,className=contentConfig.className||"".concat(classPrefix,"-").concat(contentClass,"-").concat(name),content=this._contents[name]=this._contents[name]||new content_Content,container=makeElement(this._contentContainer,"div",[contentConfig.order],className);container.attr("class","".concat(classPrefix,"-").concat(contentClass," ").concat(className)),function reorderContainers(parentContainer,className){parentContainer.selectAll(className).sort(function(a,b){return a-b})}(this._contentContainer,".".concat(classPrefix,"-").concat(contentClass));var contentConf=config.content;return contentConfig.classPrefix=this._config.classPrefix,content.config(contentConf),null===data?(content.clear(),container.remove(),delete this._contents[name]):(content.update({model:data,formatter:contentConfig.formatter||formatter}),content.context(this._context),content.render(container)),Object.keys(this._contents).length||this.hide(),this}},{key:"getContents",value:function getContents(){return Object.values(this._contents)}},{key:"position",value:function position(x,y){var conf=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(!Object.keys(this._contents).length)return this.hide(),this;this.show();var target=this._target,repositionArrow=conf.repositionArrow;if(target&&repositionArrow){var node=this._tooltipContainer.node(),config=this._config,arrowDisabled=config.arrow.disabled,arrowWidth=arrowDisabled?0:config.arrow.size,arrowOrient=this._arrowOrientation,outsidePlot="left"===arrowOrient||"right"===arrowOrient?y+node.offsetHeight-arrowWidthtarget.y+target.height:x+node.offsetWidth-arrowWidthtarget.x+target.width;if(!arrowDisabled)if(outsidePlot){var path;this._tooltipArrow.style("display","none"),this._tooltipBackground.style("display","none"),this._tooltipConnectorContainer.style("display","block");var connector=this._tooltipConnectorContainer.selectAll("path").data([1]),enter=connector.enter().append("path");"left"===arrowOrient?path="M ".concat(x," ").concat(y+node.offsetHeight/2," L ").concat(target.x+target.width)+" ".concat(target.y+target.height/2):"right"===arrowOrient?path="M ".concat(x+node.offsetWidth," ").concat(y+node.offsetHeight/2)+" L ".concat(target.x," ").concat(target.y+target.height/2):"bottom"===arrowOrient&&(path="M ".concat(x+node.offsetWidth/2," ").concat(y+node.offsetHeight)+" L ".concat(target.x+target.width/2," ").concat(target.y)),enter.merge(connector).attr("d",path).style("display","block")}else{var arrowPos=helper_getArrowPos(arrowOrient,target,{x:x,y:y,boxHeight:node.offsetHeight,boxWidth:node.offsetWidth},this._config);helper_placeArrow(this,this._arrowOrientation,arrowPos),this._tooltipConnectorContainer.style("display","none")}}var offset=this._offset||{x:0,y:0};return this._tooltipContainer.style("left","".concat(offset.x+x,"px")).style("top","".concat(offset.y+y,"px")),this}},{key:"positionRelativeTo",value:function positionRelativeTo(dim){var obj,_this=this,tooltipConf=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},orientation=tooltipConf.orientation;if(this.show(),!dim)return this.hide(),this;var extent=this._extent,node=this._tooltipContainer.node();this._tooltipContainer.style("top","0px").style("left","0px");var offsetWidth=node.offsetWidth+2,offsetHeight=node.offsetHeight+2,config=this._config,offset=this._offset,arrowDisabled=config.arrow.disabled,arrowSize=arrowDisabled?0:config.arrow.size,draw=void 0===tooltipConf.draw||tooltipConf.draw,topSpace=dim.y,dimX=dim.x+dim.width+offset.x,rightSpace=extent.width-dimX,leftSpace=dim.x+offset.x-extent.x,positionTop=topSpace>offsetHeight+arrowSize,positionRight=rightSpace>=offsetWidth+arrowSize,positionLeft=leftSpace>=offsetWidth+arrowSize;return this._target=dim,orientation||(orientation=positionTop?"vertical":positionRight||positionLeft?"horizontal":"vertical"),"horizontal"===orientation?obj=function positionHorizontal(){var position,x=dim.x+dim.width,y=dim.y;return positionRight?(position="left",x+=arrowSize):positionLeft?(x=dim.x-offsetWidth,position="right",x-=arrowSize):(position="left",x+=arrowSize),dim.height1&&type!==dist_datamodel.MeasureSubtype.CONTINUOUS;return uniqueVals.forEach(function(val,i){var key,associatedMeasures=dimensionMeasureMap[field];if(associatedMeasures instanceof Array&&dataLen>1){associatedMeasures=associatedMeasures.filter(function(d){return d in fieldsConfig}),key=val;var icon={value:""};if(isRetinalField&&(icon={type:"icon",color:colorAxis.getColor(val),shape:shapeAxis.getShape(val),size:sizeAxis.getSize(val)*config.iconScale}),associatedMeasures.length>1){var formattedKey=type===dist_datamodel.DimensionSubtype.TEMPORAL?formatterFn(key,interval):key;values.push([icon,"".concat(formattedKey)]),associatedMeasures.forEach(function(measure){measureIndex=fieldsConfig[measure].index,value=data[i][measureIndex];var numberFormat=fieldspace.fields[measureIndex].numberFormat(),measureFormatter=strategies_getDefaultTooltipFormatterFn(strategies_formatters(numberFormat,interval,valueParser)[dist_datamodel.MeasureSubtype.CONTINUOUS]);formattedValue=measureFormatter(value),values.push([{value:"".concat(retrieveFieldDisplayName(context.data,measure)).concat(separator),style:{"margin-left":"".concat(config.margin,"px}")},className:"".concat(classPrefix,"-tooltip-key")},{value:"".concat(formattedValue),className:"".concat(classPrefix,"-tooltip-value")}])})}else{measureIndex=fieldsConfig[associatedMeasures[0]].index,value=data[i][measureIndex];var numberFormat=fieldspace.fields[measureIndex].numberFormat(),measureFormatter=strategies_getDefaultTooltipFormatterFn(strategies_formatters(numberFormat,interval,valueParser)[dist_datamodel.MeasureSubtype.CONTINUOUS]);formattedValue=measureFormatter(value);var _formattedKey=type===dist_datamodel.DimensionSubtype.TEMPORAL?formatterFn(key,interval):key;values.push([icon,{value:"".concat(_formattedKey),className:"".concat(classPrefix,"-tooltip-key")},{value:"".concat(formattedValue),className:"".concat(classPrefix,"-tooltip-value")}])}}else key=field,formattedValue=formatterFn(value=val),values.push([{value:"".concat(retrieveFieldDisplayName(context.data,key)).concat(separator),className:"".concat(config.classPrefix,"-tooltip-key")},{value:"".concat(formattedValue),className:"".concat(config.classPrefix,"-tooltip-value")}])}),values},strategies_buildTooltipData=function buildTooltipData(dataModel){var config=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},context=arguments.length>2?arguments[2]:void 0,fieldValues=[],dataObj=dataModel.getData(),data=dataObj.data,schema=dataObj.schema,fieldspace=dataModel.getFieldspace(),fieldsConfig=dataModel.getFieldsConfig(),detailFields=context.detailFields||[],dimensions=schema.filter(function(d){return d.type===dist_datamodel.FieldType.DIMENSION}),measures=schema.filter(function(d){return d.type===dist_datamodel.FieldType.MEASURE}),containsDetailField=schema.find(function(d){return-1!==detailFields.indexOf(d.name)}),dataLen=data.length,valueParser=context.valueParser,dimensionMeasureMap=context.dimensionMeasureMap,defFormatter=strategies_formatters(null,null,valueParser)[dist_datamodel.DimensionSubtype.CATEGORICAL];if(dataLen>1&&containsDetailField)fieldValues=function getTabularData(dataObj,context,defaultFormatter){var rows=[],data=dataObj.data,schema=dataObj.schema,fieldspace=dataObj.fieldspace;rows.push(schema.map(function(d){return d.name}));var valueParser=context.valueParser,timeDiffs=context.timeDiffs;return data.forEach(function(d){var row=[];schema.forEach(function(fieldObj,i){var interval=fieldObj.subtype===dist_datamodel.DimensionSubtype.TEMPORAL?timeDiffs[fieldObj.name]:0,numberFormat=fieldObj.type===dist_datamodel.FieldType.MEASURE&&fieldspace.fields[i].numberFormat(),value=strategies_getDefaultTooltipFormatterFn(strategies_formatters(numberFormat,interval,valueParser)[fieldObj.subtype],defaultFormatter)(d[i]);row.push(value)}),rows.push(row)}),rows}({data:data,schema:schema,fieldspace:fieldspace},context,defFormatter);else{dimensions.forEach(function(item){fieldValues=[].concat(strategies_toConsumableArray(fieldValues),strategies_toConsumableArray(strategies_getRowContent(item,context,{fieldsConfig:fieldsConfig,data:data,defFormatter:defFormatter,fieldspace:fieldspace},config)))});var allMeasures=strategies_toConsumableArray(_construct(Set,strategies_toConsumableArray(Object.values(dimensionMeasureMap))));(dataLen>1?measures.filter(function(d){return-1===allMeasures.indexOf(d.name)}):measures).forEach(function(item){fieldValues=[].concat(strategies_toConsumableArray(fieldValues),strategies_toConsumableArray(strategies_getRowContent(item,context,{fieldsConfig:fieldsConfig,data:data,defFormatter:defFormatter,fieldspace:fieldspace},config)))})}return fieldValues},strategies_strategies={selectionSummary:function selectionSummary(dm,config,context){var aggFns=context.selectionSet.mergedEnter.aggFns,dataObj=dm.getData(),measures=dataObj.schema.filter(function(d){return d.type===dist_datamodel.FieldType.MEASURE}),aggregatedModel=dm.groupBy([""],measures.reduce(function(acc,v){return acc[v.name]=aggFns[v.name]===COUNT?SUM:aggFns[v.name],acc},{saveChild:!1})),fieldsConf=aggregatedModel.getFieldsConfig(),values=[[{value:"".concat(dataObj.data.length),style:{"font-weight":"bold"}},"Items Selected"]],measureNames=measures.map(function(d){return d.name});return measureNames.forEach(function(measure){values.push(["(".concat(aggFns[measure].toUpperCase(),")"),"".concat(retrieveFieldDisplayName(dm,measure)),{value:"".concat(aggregatedModel.getData().data[0][fieldsConf[measure].index].toFixed(2)),style:{"font-weight":"bold"}}])}),1===measureNames.length&&(values=[[].concat(strategies_toConsumableArray(values[0]),strategies_toConsumableArray(values[1]))]),values},highlightSummary:function highlightSummary(data,config,context){return strategies_buildTooltipData(data,config,context)}};__webpack_require__(11);function tooltip_typeof(obj){return(tooltip_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function tooltip_toConsumableArray(arr){return function tooltip_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);i2&&void 0!==arguments[2]?arguments[2]:{},totalHeight=0,totalWidth=0,dataModel=selectionSet.mergedEnter.model,context=this.firebolt.context,drawingInf=this.drawingContext();if(dataModel.isEmpty()||null===payload.criteria||!1===selectionSet.isSourceFieldPresent)return this.hide(options,null),this;var tooltips=this._tooltips,config=this.config(),boundBox={width:drawingInf.width,height:drawingInf.height},showInPosition=payload.showInPosition,pad=config.padding,dataModels=[],fragmented="fragmented"===config.mode,sourceInf=context.getSourceInfo(),fields=sourceInf.fields,showVertically=!!(!!fields.x[0]&&fields.x[0].type()===dist_datamodel.FieldType.DIMENSION),tooltipPos=payload.position,boxes=[],enter={},uids=dataModel.getData().uids;fragmented?dataModels.push.apply(dataModels,tooltip_toConsumableArray(uids.map(function(d){return dataModel.select(function(fieldsArr,i){return i===d},{saveChild:!1})}))):dataModels.push(dataModel);var target=payload.target,targetFields=[];if(target){targetFields=target[0]||[];for(var sourceFields=payload.sourceFields,indices=[],i=0,len=targetFields.length;idrawingInf.height:totalWidth>drawingInf.width)break;boxes.push({x:position.x,y:position.y,width:tooltipBoundBox.width,height:tooltipBoundBox.height,tooltip:tooltipInst})}}for(var key in tooltips)if(!enter[key]){var tooltip=tooltips[key];tooltip.content(payload.action,null),tooltip.getContents().length||(tooltip.remove(),delete tooltips[key])}return fragmented&&(!function spaceOutBoxes(boxes,extent,showVertically){var y,height,x,width,i,len=boxes.length,spaceOutIfOverlap=function spaceOutIfOverlap(firstBox,secondBox,opposite){x=firstBox.x,width=firstBox.width,y=firstBox.y,height=firstBox.height;var bottom=y+height,right=x+width;showVertically?(opposite?ysecondBox.y)&&(secondBox.y=opposite?firstBox.y-secondBox.height-5:bottom+5):(opposite?xsecondBox.x)&&(secondBox.x=opposite?firstBox.x-secondBox.width-5:right+5)};for(boxes.sort(function(a,b){return showVertically?a.y-b.y:a.x-b.x}),i=0,i=0;iextent.height||boxes[i].x+boxes[i].width>extent.width)for(showVertically?boxes[i].y-=boxes[i].height+boxes[i].y-extent.height:boxes[i].x-=boxes[i].width+boxes[i].x-extent.width,i=len-1;i>0;i--)spaceOutIfOverlap(boxes[i],boxes[i-1],!0)}(boxes,boundBox,showVertically),boxes.forEach(function(box){return box.tooltip.position(box.x,box.y,{repositionArrow:!0})})),this}},{key:"hide",value:function hide(options){var tooltips=this._tooltips;for(var key in tooltips)if({}.hasOwnProperty.call(tooltips,key)){var strategy=options.strategy||this._strategy;tooltips[key].content(strategy,null),tooltips[key].hide()}}}],[{key:"defaultConfig",value:function defaultConfig(){return{padding:5,offset:{x:0,y:0},highlightSummary:{dataTransform:function dataTransform(dt,fields){return fields?dt.project(fields,{saveChild:!1}):dt}},selectionSummary:{dataTransform:function dataTransform(dt,fields){var fieldspace=dt.getFieldspace(),dimensions=Object.keys(fieldspace.getDimension()),measures=Object.keys(fieldspace.getMeasure()),projectedFields=defaultValue(fields,measures.length?[measures[0]]:[]);return dt.project([].concat(tooltip_toConsumableArray(dimensions),tooltip_toConsumableArray(projectedFields)),{saveChild:!1})}}}}},{key:"formalName",value:function formalName(){return"tooltip"}}]),Tooltip}();__webpack_require__(12);function crossline_typeof(obj){return(crossline_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function crossline_toConsumableArray(arr){return function crossline_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);i2&&void 0!==arguments[2]?arguments[2]:{},strategy=this._strategies[options.strategy||this._strategy];return!1!==selectionSet.isSourceFieldPresent&&strategy(selectionSet,this,options.strategy||this._strategy),this}}],[{key:"formalName",value:function formalName(){return"highlighter"}},{key:"target",value:function target(){return"visual-unit"}}]),PlotHighlighter}();function side_effects_filter_typeof(obj){return(side_effects_filter_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function side_effects_filter_defineProperties(target,props){for(var i=0;i67.5&&rotationNormalizer<=90||(yShift+=2*height),xShift=width,xShift=90===rotation?height:270===rotation?-height:0,orientation===axis_orientation_TOP?(xShift=fixedBaseline&&ticks[0]===d&&type===constants_LINEAR?xShift+xShift/2:xShift,renderer_utils_selectElement(this).attr("transform","translate(".concat(-xShift+tickSize,"\n ").concat(-yShift-tickSize,") rotate(").concat(rotation,")"))):(xShift=fixedBaseline&&ticks[0]===d&&type===constants_LINEAR?xShift-xShift/2:xShift,renderer_utils_selectElement(this).attr("transform","translate(".concat(xShift-tickSize,"\n ").concat(yShift+tickSize,") rotate(").concat(rotation,")"))),renderer_utils_selectElement(this).transition().duration(1e3).text(datum)}),tickText},axis_renderer_changeTickOrientation=function changeTickOrientation(selectContainer,axisInstance,tickSize){var _smartTicks=axisInstance._smartTicks,config=axisInstance.config(),renderConfig=axisInstance.renderConfig(),labelManager=axisInstance.dependencies().labelManager,orientation=config.orientation,classPrefix=config.classPrefix,labels=renderConfig.labels,rotation=labels.rotation,isSmartTicks=labels.smartTicks,tickText=selectContainer.selectAll(".tick text");if(tickText.selectAll("tspan").remove(),!rotation||"top"!==orientation&&"bottom"!==orientation)if(rotation||isSmartTicks){if(tickText.text(""),"top"===orientation||"bottom"===orientation)tickText.attr("y",0).attr("x",0).attr("transform","").text(""),makeElement(tickText,"tspan",function(d,i){return _smartTicks[i]?_smartTicks[i].lines:[]},"".concat(classPrefix,"-smart-text")).attr("dy","0").style("opacity","0").transition().duration(1e3).on("end",axisInstance.registerAnimationDoneHook()).attr("dy",function(d,i){return"bottom"===orientation||0!==i?_smartTicks[0].oriTextHeight:-_smartTicks[0].oriTextHeight*(_smartTicks[0].lines.length-1)-tickSize}).style("opacity",1).text(function(e){return e}).attr("x",0);else makeElement(tickText,"tspan",function(d,i){return _smartTicks[i].lines},"".concat(classPrefix,"-smart-text")).text(function(e){return e})}else tickText.attr("transform","");else axis_renderer_rotateAxis(axisInstance,tickText,labelManager);return tickText},axis_renderer_setFixedBaseline=function setFixedBaseline(axisInstance){var fixedBaseline=axisInstance.config().fixedBaseline,showInnerTicks=axisInstance.renderConfig().showInnerTicks,domain=axisInstance.domain();fixedBaseline&&domain.length&&showInnerTicks&&axisInstance.setFixedBaseline()},axis_renderer_setAxisNamePos=function setAxisNamePos(textNode,orientation,measures){var axisNameHeight=measures.axisNameHeight,yOffset=measures.yOffset,labelOffset=measures.labelOffset,availableSpace=measures.availableSpace;switch(orientation){case axis_orientation_LEFT:textNode.attr("transform","translate(".concat(-(availableSpace.width-axisNameHeight),",").concat(yOffset+labelOffset,")rotate(-90)"));break;case axis_orientation_RIGHT:textNode.attr("transform","translate(".concat(availableSpace.width-axisNameHeight,",").concat(yOffset+labelOffset,")rotate(90)"));break;case axis_orientation_TOP:textNode.attr("transform","translate(".concat(availableSpace.width/2,",").concat(-availableSpace.height+axisNameHeight,")"));break;case axis_orientation_BOTTOM:textNode.attr("transform","translate(".concat(availableSpace.width/2,",").concat(availableSpace.height-axisNameHeight/2,")"))}return textNode};var _rangeAdjustmentMap,longestWord={month:"September",quarter:"October",halfYearly:"July",year:9999,day:"September",hour:"24 AM",mintues:"60:60",seconds:":60",week:"Wed 31"},skip_ticks_tickIntervals=[[1,1,"milliseconds",src_millisecond.every(1),"seconds"],[1,1e3,"seconds",src_second.every(1),"seconds"],[5,5e3,"five seconds",src_second.every(5),"seconds"],[10,1e4,"ten seconds",src_second.every(10),"seconds"],[15,15e3,"fifteen seconds",src_second.every(15),"seconds"],[30,3e4,"thirty seconds",src_second.every(30),"seconds"],[1,6e4,"minute",src_minute.every(1),"minutes"],[5,3e5,"five minutes",src_minute.every(5),"minutes"],[10,6e5,"ten minutes",src_minute.every(10),"minutes"],[15,9e5,"fifteen minutes",src_minute.every(15),"minutes"],[30,18e5,"thirty minutes",src_minute.every(30),"minutes"],[1,36e5,"hour",src_hour.every(1),"hour"],[3,108e5,"three hours",src_hour.every(3),"hour"],[6,216e5,"six hours",src_hour.every(6),"hour"],[12,432e5,"twelve hours",src_hour.every(12),"hour"],[1,864e5,"daily",src_day.every(1),"day"],[1,6048e5,"weekly",sunday.every(1),"week"],[1,2592e6,"monthly",src_month.every(1),"week"],[3,7776e6,"quaterly",src_month.every(3),"quarter"],[6,15552e6,"half yearly",src_month.every(6),"halfYearly"],[1,31536e6,"yearly",src_year.every(1),"year"],[2,63072e6,"2 year",src_year.every(2),"year"],[3,94608e6,"3 year",src_year.every(3),"year"],[5,15768e7,"5 year",src_year.every(5),"year"],[10,31536e7,"decade",src_year.every(10),"year"],[100,31536e8,"century",src_year.every(100),"year"],[1e3,31536e9,"millenium",src_year.every(1e3),"year"]],getTickIntervalFnBasedOnNumberOfTicks=function getTickIntervalFnBasedOnNumberOfTicks(interval,count,context){for(var possibleTickLevelIndex=skip_ticks_tickIntervals.length-1,maxPossibleTicks=1,tickIntervalLevelInfo=null,i=skip_ticks_tickIntervals.length-1;i>=0;i--){var tickIntervalInfo=skip_ticks_tickIntervals[i],numOfPossibleTicks=Math.floor(interval/tickIntervalInfo[1]);numOfPossibleTicks<=count&&(possibleTickLevelIndex=i,maxPossibleTicks=numOfPossibleTicks)}return tickIntervalLevelInfo=skip_ticks_tickIntervals[possibleTickLevelIndex],function getActualTickInterval(context,noOfTicks){var minWidthBetweenTicks=context._minTickDistance.width,width=context.availableSpace().width;return Math.floor((width-(noOfTicks-1)*minWidthBetweenTicks)/noOfTicks)}(context,maxPossibleTicks)=numOfTicksAccordingToMinDiff&&(actualNumberOfTicks=numOfTicksAccordingToMinDiff),getTickIntervalFnBasedOnNumberOfTicks(millisecondInterval,actualNumberOfTicks,context)}(context,maxTicks));context.renderConfig({tickValues:ticks})},adjustHorizontalRange=function adjustHorizontalRange(range,diff){return range[0]+=diff,range[1]-=diff,range},adjustVerticalRange=function adjustVerticalRange(range,diff){return range[0]-=diff,range[1]+=diff,range},rangeAdjustmentMap=(space_setter_defineProperty(_rangeAdjustmentMap={},axis_orientation_TOP,adjustHorizontalRange),space_setter_defineProperty(_rangeAdjustmentMap,axis_orientation_BOTTOM,adjustHorizontalRange),space_setter_defineProperty(_rangeAdjustmentMap,axis_orientation_LEFT,adjustVerticalRange),space_setter_defineProperty(_rangeAdjustmentMap,axis_orientation_RIGHT,adjustVerticalRange),_rangeAdjustmentMap),setAxisRange=function setAxisRange(context,type,rangeBounds,offset){context.range(rangeBounds),offset&&context.renderConfig(space_setter_defineProperty({},"".concat(type,"Offset"),offset))},getAdjustedRange=function getAdjustedRange(minDiff,range,domain,config){var orientation=config.orientation,adjustRange=config.adjustRange,diff=function getAxisOffset(timeDiff,range,domain){var avWidth=Math.abs(range[1]-range[0]),bars=avWidth/(avWidth/(domain[1]-domain[0])*timeDiff);return(avWidth-avWidth/(bars+1)*bars)/2}(minDiff,range,domain);return adjustRange?rangeAdjustmentMap[orientation](range,diff):range},space_setter_spaceSetter=function spaceSetter(context,spaceConfig){var _ref,tickInterval,heightForTicks,config=context.config(),_context$availableSpa2=context.availableSpace(),availWidth=_context$availableSpa2.width,availHeight=_context$availableSpa2.height,padding=_context$availableSpa2.padding,top=padding.top,left=padding.left,bottom=padding.bottom,right=padding.right,isOffset=spaceConfig.isOffset,_context$renderConfig2=context.renderConfig(),showAxisName=_context$renderConfig2.showAxisName,labels=_context$renderConfig2.labels,rotation=labels.rotation,fixedBaseline=config.fixedBaseline,axisNamePadding=config.axisNamePadding,tickValues=config.tickValues,_context$getAxisDimen=context.getAxisDimensions(),tickDimensions=_context$getAxisDimen.tickDimensions,allTickDimensions=_context$getAxisDimen.allTickDimensions,axisNameDimensions=_context$getAxisDimen.axisNameDimensions,tickSize=_context$getAxisDimen.tickSize,tickDimHeight=tickDimensions.height,tickDimWidth=tickDimensions.width,namePadding=showAxisName?axisNamePadding:0,labelConfig={smartTicks:!0,rotation:labels.rotation},minTickDistance=context._minTickDistance,minTickSpace=context._minTickSpace,minDiff=context._minDiff,domain=context.domain(),axisNameHeight=axisNameDimensions.height,minWidthBetweenTicks=minTickDistance.width,minTickWidth=minTickSpace.width,minTickHeight=minTickSpace.height;return space_setter_defineProperty(_ref={},TIME,{x:function x(){!tickValues&&context.applyTickSkipping();var noOfTicks=context.getTickValues().length;heightForTicks=availHeight-axisNameHeight-tickSize-namePadding,(tickInterval=(availWidth-(noOfTicks-1)*minWidthBetweenTicks)/noOfTicks)axisNameHeight?(labelConfig.rotation=null,context.renderConfig({showInnerTicks:!0,showAxisName:!0})):(labelConfig.rotation=-90,context.renderConfig({showInnerTicks:!0,showAxisName:!1}))),availHeight0&&void 0!==arguments[0]?arguments[0]:0,width=arguments.length>1?arguments[1]:void 0,height=arguments.length>2?arguments[2]:void 0,rotatedHeight=height,rotatedWidth=width;if(rotation){var angle=(rotation||0)*Math.PI/180;rotatedWidth=Math.abs(height*Math.sin(angle))+Math.abs(width*Math.cos(angle)),rotatedHeight=Math.abs(width*Math.sin(angle))+Math.abs(height*Math.cos(angle))}return{width:rotatedWidth,height:rotatedHeight}},helper_setOffset=function setOffset(context){var x=0,y=0,logicalSpace=context.logicalSpace(),config=context.config(),orientation=config.orientation,xOffset=config.xOffset,yOffset=config.yOffset;orientation===axis_orientation_LEFT&&(x=void 0===xOffset?logicalSpace.width:xOffset),orientation===axis_orientation_TOP&&(y=void 0===yOffset?logicalSpace.height:yOffset),context.renderConfig({xOffset:x,yOffset:y})},getAxisComponentDimensions=function getAxisComponentDimensions(context){var axisTicks,largestTick="",largestTickDimensions={width:0,height:0},smartTick={},allTickDimensions=[],scale=context.scale(),_context$renderConfig=context.renderConfig(),tickValues=_context$renderConfig.tickValues,showAxisName=_context$renderConfig.showAxisName,name=context.config().name,labelManager=context.dependencies().labelManager,labelFunc=scale.ticks||scale.quantile||scale.domain;return labelManager.setStyle(context._tickLabelStyle),axisTicks=(axisTicks=tickValues||labelFunc()).map(function(originalLabel,i){var label=context.getFormattedText(originalLabel,i,axisTicks),tickDimensions=labelManager.getOriSize(label);return allTickDimensions.push(tickDimensions),tickDimensions.width>largestTickDimensions.width&&(largestTick=label,smartTick=context.smartTicks()?context.smartTicks()[i]:{},largestTickDimensions=tickDimensions,smartTick=smartTick||tickDimensions),label}),labelManager.setStyle(context._axisNameStyle),{axisNameDimensions:showAxisName?labelManager.getOriSize(name):{width:0,height:0},largestTick:largestTick,largestTickDimensions:largestTickDimensions,allTickDimensions:allTickDimensions,axisTicks:axisTicks,smartTick:smartTick,tickSize:context.getTickSize()}},getHorizontalAxisSpace=function getHorizontalAxisSpace(context,axisDimensions,range){var width,height,domain=context.domain(),minTickDistance=context._minTickDistance.width,tickSize=axisDimensions.tickSize,tickDimensions=axisDimensions.tickDimensions,axisNameDimensions=axisDimensions.axisNameDimensions,_context$config2=context.config(),axisNamePadding=_context$config2.axisNamePadding,tickValues=_context$config2.tickValues,showAxisName=context.renderConfig().showAxisName,axisDimHeight=axisNameDimensions.height,tickDimHeight=tickDimensions.height,tickDimWidth=tickDimensions.width;if(width=range&&range.length?range[1]-range[0]:3*(tickDimWidth+minTickDistance),height=0,tickValues){var minTickDiff=context.getMinTickDifference(),_ref=[Math.min.apply(Math,cartesian_axis_helper_toConsumableArray(tickValues).concat(cartesian_axis_helper_toConsumableArray(domain))),Math.max.apply(Math,cartesian_axis_helper_toConsumableArray(tickValues).concat(cartesian_axis_helper_toConsumableArray(domain)))];width=(_ref[1]-_ref[0])/Math.abs(minTickDiff)*(tickDimWidth+context._minTickDistance.width)}return height=width&&0!==width?tickDimHeight:Math.max(tickDimWidth,tickDimHeight),{width:width,height:height+=(showAxisName?axisDimHeight+axisNamePadding:0)+tickSize}},getVerticalAxisSpace=function getVerticalAxisSpace(context,axisDimensions){var height,width,domain=context.domain(),tickSize=axisDimensions.tickSize,tickDimensions=axisDimensions.tickDimensions,axisNameDimensions=axisDimensions.axisNameDimensions,_context$config3=context.config(),axisNamePadding=_context$config3.axisNamePadding,tickValues=_context$config3.tickValues,showAxisName=context.renderConfig().showAxisName,axisDimHeight=axisNameDimensions.height,tickDimHeight=tickDimensions.height;if(height=0,width=tickDimensions.width,tickValues){var minTickDiff=context.getMinTickDifference(),_ref2=[Math.min.apply(Math,cartesian_axis_helper_toConsumableArray(tickValues).concat(cartesian_axis_helper_toConsumableArray(domain))),Math.max.apply(Math,cartesian_axis_helper_toConsumableArray(tickValues).concat(cartesian_axis_helper_toConsumableArray(domain)))];height=(_ref2[1]-_ref2[0])/Math.abs(minTickDiff)*tickDimHeight}return{height:height,width:width+=(showAxisName?axisDimHeight:0)+tickSize+axisNamePadding}},helper_calculateBandSpace=function calculateBandSpace(context){var range=context.range(),axisDimensions=context.getAxisDimensions(),orientation=context.config().orientation,show=context.renderConfig().show,largestTickDimensions=axisDimensions.largestTickDimensions,axisTicks=axisDimensions.axisTicks,allTickDimensions=axisDimensions.allTickDimensions,largestDimHeight=largestTickDimensions.height,minTickWidth=context._minTickDistance.width;if(orientation===axis_orientation_TOP||orientation===axis_orientation_BOTTOM){var _getHorizontalAxisSpa=getHorizontalAxisSpace(context,axisDimensions,range),_width=_getHorizontalAxisSpa.width,_height=_getHorizontalAxisSpa.height;return _width&&0!==_width||(_width=allTickDimensions.reduce(function(t,n){return t+Math.min(n.width,n.height)+minTickWidth},0)),!1===show&&(_height=0,_width=0),{width:_width,height:_height}}var _getVerticalAxisSpace=getVerticalAxisSpace(context,axisDimensions),width=_getVerticalAxisSpace.width,height=_getVerticalAxisSpace.height;return height&&0!==height||(height=axisTicks.length*(largestDimHeight+context._minTickDistance.height)),!1===show&&(width=0),{width:width,height:height}},helper_getValidDomain=function getValidDomain(context,domain){var userDom=context.config().domain;return userDom&&(domain=userDom),defaultValue(domain,[])},setContinousAxisDomain=function setContinousAxisDomain(context,domain){var nice=context.config().nice,scale=context.scale.bind(context);scale().domain(domain),nice&&scale().nice(),context._domain=scale().domain()},props_PROPS={availableSpace:{},axisDimensions:{},axisComponentDimensions:{},config:{sanitization:function sanitization(context,value){var oldConfig=Object.assign({},context._config||{}),mockedOldConfig=mergeRecursive({},oldConfig);(value=mergeRecursive(mockedOldConfig,value)).axisNamePadding=Math.max(value.axisNamePadding,0);var shouldAxesScaleUpdate=function hasAxesConfigChanged(){var obj=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},obj1=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},properties=arguments.length>2?arguments[2]:void 0;return!(!Object.keys(obj).length||!Object.keys(obj1).length)&&properties.some(function(key){return obj[key]!==obj1[key]})}(value,oldConfig,["interpolator","exponent","base","orientation"]),tickFormatter=context.sanitizeTickFormatter(value);return shouldAxesScaleUpdate&&(context._scale=context.createScale(value),context._axis=context.createAxis(value)),context._tickFormatter=function(ticks){return tickFormatter(ticks)},context.resetRenderConfig(value),value}},renderConfig:{sanitization:function sanitization(context,value){var oldConfig=Object.assign({},context._renderConfig||{});return value=mergeRecursive(oldConfig,value)}},logicalSpace:{},mount:{},range:{sanitization:function sanitization(context,value){return context.scale().range(value),context.logicalSpace(null),value}},smartTicks:{},tickSize:{},maxTickSpaces:{sanitization:function sanitization(context,value){var oldConfig=Object.assign({},context._maxTickSpaces||{});return value=mergeRecursive(oldConfig,value)}},valueParser:{defaultValue:function defaultValue(val){return val}}};function simple_axis_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}function simple_axis_defineProperties(target,props){for(var i=0;i0&&void 0!==arguments[0]?arguments[0]:0,height=arguments.length>1?arguments[1]:void 0,padding=arguments.length>2?arguments[2]:void 0,isOffset=arguments.length>3?arguments[3]:void 0,labelConfig={},orientation=this.config().orientation;this.availableSpace({width:width,height:height,padding:padding});var type=this.constructor.type();return labelConfig=orientation===axis_orientation_TOP||orientation===axis_orientation_BOTTOM?space_setter_spaceSetter(this,{isOffset:isOffset})[type].x():space_setter_spaceSetter(this,{isOffset:isOffset})[type].y(),this.renderConfig({labels:labelConfig}),this.setTickConfig(),this.setSmartAxisName(),this}},{key:"setSmartAxisName",value:function setSmartAxisName(){var _this$config2=this.config(),orientation=_this$config2.orientation,name=_this$config2.name,dimType=orientation===axis_orientation_TOP||orientation===axis_orientation_BOTTOM?"width":"height",widthDim=this.availableSpace()[dimType],labelManager=this.dependencies().labelManager;return labelManager.setStyle(this._axisNameStyle),this.renderConfig({smartAxisName:function getSmartAxisName(name,width,labelManager){var oriSize=labelManager.getOriSize(name);return labelManager.useEllipsesOnOverflow(!0),labelManager.getSmartText(name,width,oriSize.height,!0)}(name,widthDim,labelManager)}),this}},{key:"setTickConfig",value:function setTickConfig(){return this}},{key:"getScaleValue",value:function getScaleValue(domainVal){if(null!==domainVal&&void 0!==domainVal)return this.scale()(domainVal)}},{key:"getTickSize",value:function getTickSize(){return this.axis().tickSize()}},{key:"getAxisDimensions",value:function getAxisDimensions(){for(var _len=arguments.length,params=new Array(_len),_key=0;_key<_len;_key++)params[_key]=arguments[_key];return this.axisDimensions(function computeAxisDimensions(context){var tickDimensions={},labels=context.renderConfig().labels,smartTicks=labels.smartTicks,rotation=labels.rotation,_getAxisComponentDime=getAxisComponentDimensions(context),largestTickDimensions=_getAxisComponentDime.largestTickDimensions,axisTicks=_getAxisComponentDime.axisTicks,smartTick=_getAxisComponentDime.smartTick,axisNameDimensions=_getAxisComponentDime.axisNameDimensions,allTickDimensions=_getAxisComponentDime.allTickDimensions,tickSize=_getAxisComponentDime.tickSize,labelHeight=largestTickDimensions.height,labelWidth=largestTickDimensions.width;return 0===context.domain().length?null:(tickDimensions=getRotatedSpaces(rotation,(tickDimensions=smartTicks?smartTick:{width:labelWidth,height:labelHeight}).width,tickDimensions.height),0===tickSize&&(tickDimensions={width:0,height:0}),{allTickDimensions:allTickDimensions,tickSize:tickSize,tickDimensions:tickDimensions,axisNameDimensions:axisNameDimensions,largestTickDimensions:largestTickDimensions,axisTicks:axisTicks})}.apply(void 0,[this].concat(params))),this.axisDimensions()}},{key:"getLogicalSpace",value:function getLogicalSpace(){return this.logicalSpace()||this.logicalSpace(function calculateContinousSpace(context){var range=context.range(),axisDimensions=context.getAxisDimensions(),orientation=context.config().orientation,_context$renderConfig6=context.renderConfig(),show=_context$renderConfig6.show,showAxisName=_context$renderConfig6.showAxisName,axisNameDimensions=axisDimensions.axisNameDimensions;if(!1===show)return{width:0,height:0};var axisNameWidth=axisNameDimensions.width;if(orientation===axis_orientation_TOP||orientation===axis_orientation_BOTTOM){var _getHorizontalAxisSpa2=getHorizontalAxisSpace(context,axisDimensions,range),_width2=_getHorizontalAxisSpa2.width,_height2=_getHorizontalAxisSpa2.height;return{width:Math.max(_width2,axisNameWidth),height:_height2}}var _getVerticalAxisSpace2=getVerticalAxisSpace(context,axisDimensions),width=_getVerticalAxisSpace2.width,height=_getVerticalAxisSpace2.height;return{width:width,height:Math.max(height,showAxisName?axisNameWidth:0)}}(this)),helper_setOffset(this),this.logicalSpace()}},{key:"invert",value:function invert(value){return this.scale().invert(value)}},{key:"getNearestRange",value:function getNearestRange(v1,v2){return[v1,v2]}},{key:"invertExtent",value:function invertExtent(v1,v2){return[this.invert(v1),this.invert(v2)]}},{key:"getMinTickDifference",value:function getMinTickDifference(){return this.domain()}},{key:"getFormattedTickValues",value:function getFormattedTickValues(tickValues){return tickValues}},{key:"getUnitWidth",value:function getUnitWidth(){return 0}},{key:"serialize",value:function serialize(){return{name:this.name,type:this.type,range:this.range(),config:this.config()}}},{key:"render",value:function render(){return this.mount()&&(this.setTickConfig(),function renderAxis(axisInstance){var config=axisInstance.config(),renderConfig=axisInstance.renderConfig(),labelManager=axisInstance.dependencies().labelManager,mount=axisInstance.mount(),range=axisInstance.range(),axis=axisInstance.axis(),scale=axisInstance.scale(),axisNameStyle=axisInstance._axisNameStyle,tickLabelStyle=axisInstance._tickLabelStyle,axisTickFormatter=axisInstance._tickFormatter,orientation=config.orientation,name=config.name,axisNamePadding=config.axisNamePadding,className=config.className,id=config.id,classPrefix=config.classPrefix,show=renderConfig.show,xOffset=renderConfig.xOffset,yOffset=renderConfig.yOffset,showAxisName=renderConfig.showAxisName,labels=renderConfig.labels,smartAxisName=renderConfig.smartAxisName;if(show){var tickSize=axisInstance.getTickSize(),selectContainer=makeElement(renderer_utils_selectElement(mount),"g",[axisInstance],"".concat(className),{},function(key){return key.config().id});labelManager.setStyle(tickLabelStyle);var labelFunc=scale.ticks||scale.quantile||scale.domain,ticks=axis.tickValues()||labelFunc();axis.tickFormat(axisTickFormatter(ticks));var availableSpace=Math.abs(range[0]-range[1]),labelProps=axisInstance.axisComponentDimensions().largestTickDimensions;selectContainer.attr("transform","translate(".concat(xOffset,",").concat(yOffset,")")),axis_renderer_setFixedBaseline(axisInstance),!1===labels.smartTicks||0===tickSize?selectContainer.transition().duration(1e3).on("end",axisInstance.registerAnimationDoneHook()).call(axis):selectContainer.call(axis),selectContainer.selectAll(".tick").classed("".concat(classPrefix,"-ticks"),!0),selectContainer.selectAll(".tick line").classed("".concat(classPrefix,"-tick-lines"),!0),selectContainer.selectAll(".tick text").classed("".concat(classPrefix,"-ticks"),!0).classed("".concat(classPrefix,"-ticks-").concat(id),!0),axis_renderer_changeTickOrientation(selectContainer,axisInstance,tickSize);var textNode=makeElement(selectContainer,"text",[smartAxisName],"".concat(classPrefix,"-axis-name")).attr("text-anchor","middle").classed("".concat(classPrefix,"-axis-name-").concat(id),!0).text(function(d){return d.text});textNode.classed(HIDDEN,!showAxisName);var labelOffset=availableSpace/2;labelManager.setStyle(axisNameStyle);var axisNameSpace=labelManager.getOriSize(name),measures={labelProps:labelProps,tickSize:tickSize,axisNamePadding:axisNamePadding,axisNameHeight:axisNameSpace.height,axisNameWidth:axisNameSpace.width,yOffset:yOffset,xOffset:xOffset,labelOffset:labelOffset,availableSpace:axisInstance.availableSpace()};axis_renderer_setAxisNamePos(textNode,orientation,measures)}}(this)),this}},{key:"remove",value:function remove(){return renderer_utils_selectElement(this.mount()).remove(),this}},{key:"unsubscribe",value:function unsubscribe(){return this}},{key:"isReverse",value:function isReverse(){var range=this.range();return range[0]>range[1]}},{key:"getPixelToValueRatio",value:function getPixelToValueRatio(){var scale=this.scale(),range=scale.range(),domain=scale.domain();return Math.abs(range[1]-range[0])/(domain[1]-domain[0])}},{key:"animationDone",value:function animationDone(){return Promise.all(this._animationDonePromises)}},{key:"registerAnimationDoneHook",value:function registerAnimationDoneHook(){var resolveFn,promise=new Promise(function(resolve){resolveFn=resolve});return this._animationDonePromises.push(promise),function(){resolveFn()}}},{key:"id",get:function get(){return this._id}}],[{key:"defaultConfig",value:function defaultConfig(){return cartesian_axis_default_config_defaultConfig}}]),SimpleAxis}();function linear_defineProperties(target,props){for(var i=0;iavailableSpace&&(numberOfValues=Math.floor(availableSpace/(labelDim+minTickDistance))),numberOfTicks=numberOfTicks||numberOfValues,numberOfValues=Math.min(numberOfTicks,Math.max(2,numberOfValues)),(tickValues=axis.scale().ticks(numberOfValues)).length>numberOfValues&&(tickValues=tickValues.filter(function(e,i){return i%2==0})),2===numberOfValues&&(tickValues=[(tickValues=axis.scale().ticks(10))[0],tickValues[tickValues.length-1]]),tickValues}(availableSpace,labelProps[orientation===axis_orientation_BOTTOM||orientation===axis_orientation_TOP?"width":"height"],axis,this)}},{key:"getMinTickDifference",value:function getMinTickDifference(){return getSmallestDiff(this.renderConfig().tickValues)}},{key:"setFixedBaseline",value:function setFixedBaseline(tickText){var orientation=this.config().orientation,rotation=this.renderConfig().labels.rotation,axis=this.axis(),ticks=axis.tickValues(),smartTicks=this.smartTicks();if(smartTicks&&smartTicks.length){var _this$smartTicks$=this.smartTicks()[0],width=_this$smartTicks$.width,height=_this$smartTicks$.height;axis.tickTransform(function(d){if(d===ticks[0]){if(orientation===axis_orientation_LEFT||orientation===axis_orientation_RIGHT)return"translate(0, -".concat(height/3,"px)");if((orientation===axis_orientation_TOP||orientation===axis_orientation_BOTTOM)&&!rotation)return"translate(".concat(width/2,"px, ",0,"px)")}return""})}return tickText}}],[{key:"type",value:function type(){return LINEAR}}]),ContinousAxis}();function band_axis_typeof(obj){return(band_axis_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function band_axis_defineProperties(target,props){for(var i=0;irange[1],extent=this.invertExtent(v1,v2);return[scale(reverse?extent[extent.length-1]:extent[0]),scale(reverse?extent[0]:extent[extent.length-1])+scale.bandwidth()]}}],[{key:"type",value:function type(){return BAND}}]),BandAxis}();function time_axis_typeof(obj){return(time_axis_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function time_axis_defineProperties(target,props){for(var i=0;i1?config.range:[DEFAULT_GRADIENT_COLOR].concat(props_toConsumableArray(config.range)));var oldConfig=mergeRecursive(defCon,context.config()),newConfig=mergeRecursive(oldConfig,config);return newConfig.range instanceof Array&&(newConfig.range=newConfig.range.map(function(e,i){return props_getActualHslColor(e,palette[i])}),newConfig.stops=config.stops||newConfig.range.length),newConfig.value=props_getActualHslColor(newConfig.value,newConfig.value),newConfig}},domain:{},scale:{},uniqueValues:{}},helper_treatNullMeasures=function treatNullMeasures(domainVal,scaledVal,minDomainScaledVal){return domainVal instanceof src_InvalidAwareTypes?minDomainScaledVal:scaledVal},helper_resolveAxisConfig=function resolveAxisConfig(propVal,defaultVal,context){switch(getObjProp(propVal,"constructor")){case Function:return propVal(defaultVal,context);case Array:return propVal;default:return defaultVal}};function color_strategy_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}function color_strategy_toConsumableArray(arr){return function color_strategy_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);iMath.min(range.length,18))for(var interpolator=common_utils_piecewiseInterpolator()(function hslInterpolator(){return hslLong}(),range.map(function(e){return props_getHslString(e)})),i=0;i0&&void 0!==arguments[0]?arguments[0]:[];if(domain.length){var scale=this.scale(),range=scale.range?scale.range():null,scaleInfo=this._colorStrategy.domainRange()(domain,this.config().stops,range);this.domain(scaleInfo.domain),scaleInfo.range&&this.scale().range(scaleInfo.range),this.uniqueValues(scaleInfo.uniqueVals),this.scale().domain(scaleInfo.scaleDomain||this.domain())}return this}},{key:"serialize",value:function serialize(){return{type:this.constructor.type(),scale:this.scale(),domain:this.domain(),config:this.config()}}},{key:"transformColor",value:function transformColor(color,transformationArr){var h=360*color[0],s=100*color[1],l=100*color[2],a=color[3]||1,newH=h+transformationArr[0],newS=s+transformationArr[1],newL=l+transformationArr[2],newA=a+transformationArr[3]||0;return{color:"hsla(".concat(newH,",").concat(newS,"%,").concat(newL,"%,").concat(newA,")"),hsla:[newH/360,newS/100,newL/100,newA]}}},{key:"id",value:function id(){return this._id}},{key:"getHslArray",value:function getHslArray(color){return props_getActualHslColor(color)}}],[{key:"defaultConfig",value:function defaultConfig(){return DEFAULT_CONFIG}},{key:"type",value:function type(){return"color"}}]),ColorAxis}(),defaults_DEFAULT_CONFIG={value:36,range:[36,1e3]};function size_strategy_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}function size_strategy_toConsumableArray(arr){return function size_strategy_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);i0&&void 0!==arguments[0]?arguments[0]:0,value=this.config().value,scale=this.scale(),domain=this.domain()||[1,1];return scale&&domain[0]!==domain[1]?this._sizeStrategy.range(domainVal,scale,this.domain(),this.uniqueValues()):value}},{key:"updateDomain",value:function updateDomain(domain){if(domain){var domainInfo=(0,this._sizeStrategy.domain)(domain,this.config().intervals);this.domain(domainInfo.domain),this.uniqueValues(domainInfo.uniqueVals),this.scale().domain(domainInfo.scaleDomain||this.domain())}return this}},{key:"serialize",value:function serialize(){return{type:this.constructor.type(),scale:this.scale(),domain:this.domain(),range:this.range(),config:this.config()}}},{key:"id",value:function id(){return this._id}}],[{key:"defaultConfig",value:function defaultConfig(){return defaults_DEFAULT_CONFIG}},{key:"type",value:function type(){return"size"}}]),SizeAxis}(),shape_axis_defaults_DEFAULT_CONFIG={generator:null,value:"circle",range:["circle","diamond","star","cross","square","wye","triangle"]},shape_axis_props_PROPS={config:{},domain:{},scale:{},uniqueValues:{},generator:{}};function shape_axis_defineProperties(target,props){for(var i=0;i0&&void 0!==arguments[0]?arguments[0]:[];return domain.length&&(this.uniqueValues(domain),this.domain(domain),this.scale().domain(domain),this.config().generator&&(this._generatedShapes=function shapeGenerator(domain,generatorFn){var generatedShapes={};return domain.forEach(function(value){generatedShapes[value]=generatorFn(value)}),generatedShapes}(domain,this.config().generator))),this}},{key:"serialize",value:function serialize(){return{type:this.constructor.type(),scale:this.scale(),domain:this.domain(),range:this.config().range,config:this.config()}}},{key:"id",value:function id(){return this._id}}],[{key:"defaultConfig",value:function defaultConfig(){return shape_axis_defaults_DEFAULT_CONFIG}},{key:"type",value:function type(){return"shape"}}]),ShapeAxis}(),polar_axis_props_PROPS={config:{sanitization:function sanitization(context,config){return mergeRecursive(context.config(),config)},preset:function preset(context,config){var range=config.range,domain=config.domain;range&&context.range(range),domain&&context.domain(domain)}},domain:{},range:{}};function angle_axis_slicedToArray(arr,i){return function angle_axis_arrayWithHoles(arr){if(Array.isArray(arr))return arr}(arr)||function angle_axis_iterableToArrayLimit(arr,i){var _arr=[],_n=!0,_d=!1,_e=void 0;try{for(var _s,_i=arr[Symbol.iterator]();!(_n=(_s=_i.next()).done)&&(_arr.push(_s.value),!i||_arr.length!==i);_n=!0);}catch(err){_d=!0,_e=err}finally{try{_n||null==_i.return||_i.return()}finally{if(_d)throw _e}}return _arr}(arr,i)||function angle_axis_nonIterableRest(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}()}function angle_axis_defineProperties(target,props){for(var i=0;i0&&void 0!==arguments[0]?arguments[0]:{};!function angle_axis_classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}(this,AngleAxis),this._id=getUniqueId(),generateGetterSetters(this,polar_axis_props_PROPS),this._config=mergeRecursive({},this.constructor.defaultConfig()),this.config(config),this._range=[0,360],this._angleFn=angle_axis_pie().value(function(d){return"string"==typeof d?1:d}).sortValues(null),this._angleValues={}}return function angle_axis_createClass(Constructor,protoProps,staticProps){return protoProps&&angle_axis_defineProperties(Constructor.prototype,protoProps),staticProps&&angle_axis_defineProperties(Constructor,staticProps),Constructor}(AngleAxis,[{key:"createScale",value:function createScale(strategy){var range=this.config().range;return scale_creator_createScale({type:strategy.scale,range:range})}},{key:"getScaleValue",value:function getScaleValue(domainVal){return this._angleValues[domainVal]}},{key:"padAngle",value:function padAngle(angle){this._angleFn=this._angleFn.padAngle(angle)}},{key:"domain",value:function domain(){for(var _len=arguments.length,domainVal=new Array(_len),_key=0;_key<_len;_key++)domainVal[_key]=arguments[_key];if(domainVal.length){var customDomain=this.config().domain,domain=domainVal[0].length?domainVal[0]:DEFAULT_ANGLE_DOMAIN;return this._domain=helper_resolveAxisConfig(customDomain,domain,this),createAngleValues(this),this}return this._domain}},{key:"range",value:function range(){if(arguments.length){var customRange=this.config().range;this._range=helper_resolveAxisConfig(customRange,arguments.length<=0?void 0:arguments[0],this);var domain=this.domain(),_this$_range=angle_axis_slicedToArray(this._range,2),startAngle=_this$_range[0],endAngle=_this$_range[1];return this._angleFn.startAngle(startAngle/180*Math.PI).endAngle(Math.PI*endAngle/180),domain&&domain.length&&createAngleValues(this),this}return this._range}}],[{key:"defaultConfig",value:function defaultConfig(){return{}}}]),AngleAxis}(),X="x",Y="y",MEASURE="measure",ROWS="rows",COLUMNS="columns",COL="col",ROW="row",enums_constants_COLOR="color",enums_constants_SHAPE="shape",enums_constants_SIZE="size",enums_constants_LINEAR="linear",constants_LEFT="left",constants_RIGHT="right",CELL="cell",X_AXES="xAxes",Y_AXES="yAxes",ENTRY_CELLS="entryCell",EXIT_CELLS="exitCell",enums_constants_RADIUS="radius",enums_constants_ANGLE="angle",ANGLE0="angle0",PRIMARY="Primary",SECONDARY="Secondary";function radius_axis_defineProperties(target,props){for(var i=0;i0&&void 0!==arguments[0]?arguments[0]:{};!function radius_axis_classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}(this,RadiusAxis),this._id=getUniqueId(),generateGetterSetters(this,polar_axis_props_PROPS),this._range=[],this._radiusFactor=1,this._config=mergeRecursive({},this.constructor.defaultConfig()),this.config(config),this._scale=this.createScale({scale:enums_constants_LINEAR})}return function radius_axis_createClass(Constructor,protoProps,staticProps){return protoProps&&radius_axis_defineProperties(Constructor.prototype,protoProps),staticProps&&radius_axis_defineProperties(Constructor,staticProps),Constructor}(RadiusAxis,[{key:"config",value:function config(){if(arguments.length){var config=mergeRecursive(this.config(),arguments.length<=0?void 0:arguments[0]);return this._config=config,this}return this._config}},{key:"createScale",value:function createScale(strategy){return scale_creator_createScale({type:strategy.scale,range:this.range()})}},{key:"domain",value:function domain(){if(arguments.length){var customDomain=this.config().domain,domain=helper_resolveAxisConfig(customDomain,arguments.length<=0?void 0:arguments[0],this);domain=sanitizeDomainWhenEqual(domain),this._scale.domain(domain),this._domain=domain,adjustDomain(this)}return this._domain}},{key:"getInnerRadius",value:function getInnerRadius(domainVal){return void 0===domainVal?this.range()[0]:this._scale(domainVal)}},{key:"getOuterRadius",value:function getOuterRadius(domainVal){return void 0===domainVal?this.range()[1]:this._scale(domainVal)*this._radiusFactor}},{key:"range",value:function range(){for(var _len=arguments.length,_range=new Array(_len),_key=0;_key<_len;_key++)_range[_key]=arguments[_key];if(_range.length){var _this$config2=this.config(),padding=_this$config2.padding,customRange=_this$config2.range,sanitizedRange=_range[0].map(function(v,i){return v+(i?-padding[i]:padding[i])}),rangeVal=helper_resolveAxisConfig(customRange,sanitizedRange,this);this._range=rangeVal,this._scale.range(rangeVal),adjustDomain(this)}return this._range}},{key:"setRadiusFactor",value:function setRadiusFactor(val){return this._radiusFactor=val,this}}],[{key:"defaultConfig",value:function defaultConfig(){return{padding:[0,1],minOuterRadius:10}}}]),RadiusAxis}();function data_type_scale_map_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}var DATA_TYPES_MEASURE="measure",DATA_TYPES_TEMPORAL="temporal",group_transform=(data_type_scale_map_defineProperty(_dataTypeScaleMap={},"dimension",BAND),data_type_scale_map_defineProperty(_dataTypeScaleMap,DATA_TYPES_MEASURE,LINEAR),data_type_scale_map_defineProperty(_dataTypeScaleMap,DATA_TYPES_TEMPORAL,TIME),function(schema,data,config){var groupBy=config.groupBy instanceof Array?config.groupBy:[config.groupBy],groupByIndices=groupBy.map(function(fieldName){return schema.findIndex(function(d){return d.name===fieldName})});if(void 0!==groupByIndices.find(function(d){return-1===d}))throw new Error("Groupby field ".concat(groupBy," not found in schema"));var groupedData=function nestCollection(params){var nestFn=src_nest();return params.keys.forEach(function(key){return nestFn.key(function(d){return d[key]})}),nestFn.entries(params.data)}({keys:groupByIndices,data:data});return groupedData.forEach(function(d){var key=d.key;src_InvalidAwareTypes.isInvalid(key)&&(d.key=src_InvalidAwareTypes.getInvalidType(key))}),groupedData});var _transformMap;function transform_factory_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}var transformMap=(transform_factory_defineProperty(_transformMap={},"identity",function identityTransform(schema,data,config){return data}),transform_factory_defineProperty(_transformMap,"group",group_transform),transform_factory_defineProperty(_transformMap,"stack",function(schema,data,config){var uniqueField=config.uniqueField,valueField=config.value,groupBy=config.groupBy,sort=config.sort||"descending",normalizedData=function normalizeData(data,schema,valueField,uniqueField,groupBy){var groupedData=group_transform(schema,data,{groupBy:uniqueField}),uniqueFieldIndex=schema.findIndex(function(d){return d.name===uniqueField}),valueFieldIndex=schema.findIndex(function(d){return d.name===valueField}),seriesKeyIndex=schema.findIndex(function(d){return d.name===groupBy}),seriesKeys=data.map(function(d){return d[seriesKeyIndex]}).filter(function(item,pos,arr){return arr.indexOf(item)===pos}).sort(),fieldNames=schema.reduce(function(acc,obj,i){return acc[i]=obj.name,acc},{});return{data:groupedData.map(function(arr){var tuples={},rowObj=arr.values.reduce(function(acc,row){return acc=row.reduce(function(obj,value,i){return i===seriesKeyIndex?(obj[value]=row[valueFieldIndex],tuples[value]=row):i!==valueFieldIndex&&(obj[fieldNames[i]]=value),obj},acc)},{});return rowObj._tuple=tuples,seriesKeys.forEach(function(seriesKey){if(void 0===rowObj[seriesKey]){rowObj[seriesKey]=0;var newArr=new Array(arr.values[0].length);newArr[uniqueFieldIndex]=arr.key,newArr[seriesKeyIndex]=seriesKey,rowObj._tuple[seriesKey]=newArr}}),rowObj}),keys:seriesKeys}}(data,schema,valueField,uniqueField,groupBy),keys=normalizedData.keys,map={},orderBy=config.orderBy,orderIndex=schema.findIndex(function(d){return d.name===orderBy}),groupByIndex=schema.findIndex(function(d){return d.name===groupBy});-1!==orderIndex&&(keys.forEach(function(key){var name=data.find(function(d){return d[groupByIndex]===key});map[key]=name[orderIndex]}),normalizedData.keys.sort(function(a,b){return map[a].localeCompare(map[b])}));var stackData=common_utils_stack({keys:normalizedData.keys,offset:config.offset||"diverging",order:sort,data:normalizedData.data});return stackData.forEach(function(seriesData){seriesData.forEach(function(dataObj){dataObj.data=dataObj.data._tuple[seriesData.key]})}),stackData}),_transformMap);var _encodingFieldInfRetr,_dataNormalizers,_domainCalculator,transform_factory=function transformFactory(type){var transform=transformMap[type];if("function"!=typeof transform)throw new Error("Invalid transform type supplied.");return transform};function helpers_toConsumableArray(arr){return function helpers_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);i=d[0]?(y=x0=d[1],x=y0=d[0]):(y=x0=d[0],x=y0=d[1]),(pointObj=xFieldType===dist_datamodel.FieldType.MEASURE?{x:x,x0:x0,y:tuple[yFieldIndex],y0:tuple[yFieldIndex]}:{x:tuple[xFieldIndex],x0:tuple[xFieldIndex],y:y,y0:y0}).source=tuple,pointObj.rowId=tuple[fieldsLen],[COLOR,SHAPE,SIZE,TEXT].forEach(function(enc){pointObj[enc]=tuple[encodingFieldInf["".concat(enc,"FieldIndex")]]})):((pointObj={x:d[xFieldIndex],y:d[yFieldIndex],x0:d[x0FieldIndex],y0:d[y0FieldIndex]}).source=d,pointObj.rowId=d[fieldsLen],[COLOR,SHAPE,SIZE,TEXT].forEach(function(enc){pointObj[enc]=d[encodingFieldInf["".concat(enc,"FieldIndex")]]}));return pointObj})}).filter(function(d){return d.length})}),_dataNormalizers),domainCalculator=(helpers_defineProperty(_domainCalculator={},POLAR,function(data,layerInst){var config=layerInst.config(),sort=config.sort,angleValues=data[0],radius0Field=getObjProp(config.encoding.radius0,"field");return sort&&(angleValues=angleValues.sort(function(a,b){return"asc"===sort?a.radius-b.radius:b.radius-a.radius})),{radius:common_utils_getDomainFromData(data,[ENCODING.RADIUS,radius0Field?ENCODING.RADIUS0:ENCODING.RADIUS]),angle:angleValues.map(function(d){return d.angle}),angle0:angleValues.map(function(d){return d.angle0})}}),helpers_defineProperty(_domainCalculator,helpers_CARTESIAN,function(data,layerInst){var transformType=layerInst.transformType(),encodingFieldInf=layerInst.encodingFieldsInf(),xFieldSubType=encodingFieldInf.xFieldSubType,yFieldSubType=encodingFieldInf.yFieldSubType,xField=encodingFieldInf.xField,yField=encodingFieldInf.yField,x0Field=encodingFieldInf.x0Field,y0Field=encodingFieldInf.y0Field,domains={},yEnc=ENCODING.Y,xEnc=ENCODING.X;return xField&&(domains.x=common_utils_getDomainFromData(data,x0Field||"stack"===transformType?[xEnc,ENCODING.X0]:[xEnc,xEnc],xFieldSubType)),yField&&(domains.y=common_utils_getDomainFromData(data,y0Field||"stack"===transformType?[ENCODING.Y0,ENCODING.Y]:[yEnc,yEnc],yFieldSubType)),domains}),_domainCalculator),attachDataToVoronoi=function attachDataToVoronoi(voronoi,points){var _ref3;voronoi.data((_ref3=[]).concat.apply(_ref3,helpers_toConsumableArray(points)).filter(function(d){return void 0!==d.rowId}).map(function(d){var point=d.update;return{x:point.x,y:point.y,data:d}}))},helpers_updateStyle=function updateStyle(target,styles,remove){for(var key in styles)({}).hasOwnProperty.call(styles,key)&&target.style(key,remove?null:styles[key])},positionPoints=function positionPoints(context,points){var positioner=context.encodingTransform();return positioner?positioner(points,context,{smartLabel:context._dependencies.smartLabel}):points},helpers_getPlotMeasurement=function getPlotMeasurement(context,dimensionalValues){var fieldInfo=context.encodingFieldsInf(),axes=context.axes(),transformType=context.transformType(),config=context.config(),bandScale=context._bandScale;return["x","y"].map(function(type){var span=0,groupSpan=0,padding=0,offsetValues=[];if(fieldInfo["".concat(type,"FieldType")]===dist_datamodel.FieldType.DIMENSION){var actualGroupWidth,timeDiff=fieldInfo["".concat(type,"FieldSubType")]===dist_datamodel.DimensionSubtype.TEMPORAL?context.dataProps().timeDiffs[type]:0,axis=axes[type],pad=config["pad".concat(type.toUpperCase())],innerPadding=config.innerPadding,keys=dimensionalValues,scale=axis.scale();groupSpan=function getGroupSpan(axis,minDiff){var width=axis.getUnitWidth(),scale=axis.scale(),range=scale.range(),domain=scale.domain();return width||Math.abs(range[1]-range[0])/Math.abs(domain[1]-domain[0])*minDiff}(axis,timeDiff);var isAxisBandScale=axis.constructor.type()===helpers_BAND,axisPadding=axis.config().padding;if("group"===transformType){var groupPadding=isAxisBandScale?0:axisPadding*groupSpan/2;bandScale.range([groupPadding,groupSpan-groupPadding]).domain(keys).paddingInner(innerPadding),span=bandScale.bandwidth(),actualGroupWidth=groupSpan-(isAxisBandScale?0:axisPadding*groupSpan),offsetValues=keys.map(function(key){return bandScale(key)-(isAxisBandScale?0:groupSpan/2)})}else if(void 0!==pad){var offset;if(isAxisBandScale){var step=scale.step();offset=scale.padding()*step,span=scale.bandwidth()+offset}else span=groupSpan;offsetValues=keys.map(function(){return isAxisBandScale?-offset/2:-span/2})}else actualGroupWidth=span=groupSpan-(padding=isAxisBandScale?0:axisPadding*groupSpan),offsetValues=keys.map(function(){return isAxisBandScale?0:-span/2});groupSpan=actualGroupWidth,padding=isAxisBandScale?axisPadding*axis.scale().step():axisPadding*groupSpan}return{span:span,offsetValues:offsetValues,groupSpan:groupSpan,padding:padding}})},helpers_resolveInvalidTransformType=function resolveInvalidTransformType(context){var _context$encodingFiel=context.encodingFieldsInf(),xField=_context$encodingFiel.xField,yField=_context$encodingFiel.yField,xFieldType=_context$encodingFiel.xFieldType,yFieldType=_context$encodingFiel.yFieldType,groupByField=context.config().transform.groupBy,fieldsConfig=context.data().getFieldsConfig(),groupByFieldMeasure=fieldsConfig[groupByField]&&fieldsConfig[groupByField].def.type===dist_datamodel.FieldType.MEASURE;return!xField||!yField||groupByFieldMeasure||!groupByField||xFieldType===dist_datamodel.FieldType.DIMENSION&&yFieldType===dist_datamodel.FieldType.DIMENSION?"identity":null},helpers_getValidTransformForAggFn=function getValidTransformForAggFn(context){var resolvedInvalidTransformType=helpers_resolveInvalidTransformType(context);if(resolvedInvalidTransformType)return resolvedInvalidTransformType;var _context$encodingFiel2=context.encodingFieldsInf(),xField=_context$encodingFiel2.xField,yField=_context$encodingFiel2.yField,xFieldType=_context$encodingFiel2.xFieldType,yFieldType=_context$encodingFiel2.yFieldType,groupByField=context.config().transform.groupBy,isCustomTransformTypeProvided=!!getObjProp(context._customConfig,"transform","type"),transformType=context.config().transform.type;if(!isCustomTransformTypeProvided&&groupByField&&xFieldType!==yFieldType){var measureField=xFieldType===dist_datamodel.FieldType.MEASURE?xField:yField;transformType="sum"===common_utils_retrieveNearestGroupByReducers(context.data(),measureField)[measureField]?"stack":"group"}return transformType},helpers_resolveEncodingValues=function resolveEncodingValues(data,i,dataArr,layerInst){var transformedValues={},values=data.values,encoding=layerInst.config().encoding;for(var key in values){var value=getObjProp(encoding[key],"value");value instanceof Function?transformedValues[key]=value(values,i,dataArr,layerInst):transformedValues[key]=values[key]}return transformedValues},getColorMetaInf=function getColorMetaInf(color,colorAxis){return{originalColor:colorAxis.getHslArray(color),stateColor:{},colorTransform:{}}},getCoordValue=function getCoordValue(radius,trig,angle,offset){return radius*Math[trig](angle)+offset},coordValueGetter=function coordValueGetter(radius,angle,xOffset,yOffset){return{x:getCoordValue(radius,"cos",angle,xOffset),y:getCoordValue(radius,"sin",angle,yOffset)}},toCartesianCoordinates=function toCartesianCoordinates(points,measurement){for(var rangePlot=arguments.length>2&&void 0!==arguments[2]&&arguments[2],xOffset=measurement.width/2,yOffset=measurement.height/2,i=0,len=points.length;i3&&void 0!==arguments[3]?arguments[3]:{};return function base_layer_classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}(this,BaseLayer),_this=function base_layer_possibleConstructorReturn(self,call){return!call||"object"!==base_layer_typeof(call)&&"function"!=typeof call?base_layer_assertThisInitialized(self):call}(this,base_layer_getPrototypeOf(BaseLayer).call(this)),generateGetterSetters(base_layer_assertThisInitialized(_this),props_props),_this.data(data),_this.axes(axes),_this.config(config),_this.alias(_this.constructor.formalName()+getUniqueId()),_this.dependencies(dependencies),_this._points=[],_this._cachedData=[],_this._id=getUniqueId(),_this._measurement={},_this._animationDonePromises=[],_this._customConfig=null,_this}return function base_layer_inherits(subClass,superClass){if("function"!=typeof superClass&&null!==superClass)throw new TypeError("Super expression must either be null or a function");subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:!0,configurable:!0}}),superClass&&base_layer_setPrototypeOf(subClass,superClass)}(BaseLayer,simple_layer_SimpleLayer),function base_layer_createClass(Constructor,protoProps,staticProps){return protoProps&&base_layer_defineProperties(Constructor.prototype,protoProps),staticProps&&base_layer_defineProperties(Constructor,staticProps),Constructor}(BaseLayer,[{key:"store",value:function store(){if(arguments.length){this._store=arguments.length<=0?void 0:arguments[0];var metaInf=this.metaInf(),localNs="".concat(namespace_namespaceObject.LAYER_LOCAL_NAMESPACE,".").concat(metaInf.namespace);!function initializeGlobalState(context){var store=context.store(),globalState=context.constructor.getState()[0],namespace=context.metaInf().namespace;for(var prop in globalState)store.append("".concat(namespace_namespaceObject.LAYER_GLOBAL_NAMESPACE,".").concat(prop),helpers_defineProperty({},namespace,null))}(this);var store=this.store();return store.append("".concat(namespace_namespaceObject.LAYER_LOCAL_NAMESPACE),function base_layer_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}({},metaInf.namespace,null)),common_utils_transactor(this,defaultOptions,store.model,{namespace:localNs}),common_utils_registerListeners(this,listener_map_listenerMap,{local:localNs,global:namespace_namespaceObject.LAYER_GLOBAL_NAMESPACE},{unitRowIndex:metaInf.unitRowIndex,unitColIndex:metaInf.unitColIndex}),this}return this._store}},{key:"domain",value:function domain(){var prop="".concat(namespace_namespaceObject.LAYER_GLOBAL_NAMESPACE,".").concat("domain",".").concat(this.metaInf().namespace);return arguments.length?(this.store().commit(prop,arguments.length<=0?void 0:arguments[0]),this):this.store().get(prop)}},{key:"encodingFieldsInf",value:function encodingFieldsInf(){return arguments.length?(this._encodingFieldsInf=arguments.length<=0?void 0:arguments[0],this):this._encodingFieldsInf}},{key:"encodingTransform",value:function encodingTransform(){return arguments.length?(this._encodingTransform=arguments.length<=0?void 0:arguments[0],this):this._encodingTransform}},{key:"alias",value:function alias(){return arguments.length?(this._alias=arguments.length<=0?void 0:arguments[0],this):this._alias||this.constructor.formalName()}},{key:"dependencies",value:function dependencies(){return arguments.length?(this._dependencies=arguments.length<=0?void 0:arguments[0],this):this._dependencies}},{key:"enableCaching",value:function enableCaching(){return this._cacheEnabled=!0,this}},{key:"clearCaching",value:function clearCaching(){return this._cacheEnabled=!1,this.data(this._cachedData[0])}},{key:"serialize",value:function serialize(){return this.config()}},{key:"id",value:function id(){return this._id}},{key:"getTransformedData",value:function getTransformedData(dataModel,config,transformType,encodingFieldsInf){return function transformData(dataModel,config,transformType,encodingFieldInf){var data=dataModel.getData({withUid:!0}),schema=data.schema,transform=config.transform,xField=encodingFieldInf.xField,yField=encodingFieldInf.yField,xFieldType=encodingFieldInf.xFieldType,yFieldType=encodingFieldInf.yFieldType,uniqueField=xFieldType===dist_datamodel.FieldType.MEASURE?yField:xField;return transform_factory(transformType)(schema,data.data,{groupBy:transform.groupBy,uniqueField:uniqueField,sort:transform.sort||"none",offset:transform.offset,orderBy:transform.orderBy,value:yFieldType===dist_datamodel.FieldType.MEASURE?yField:xField},data.uids)}(dataModel,config,transformType,encodingFieldsInf)}},{key:"calculateDomainFromData",value:function calculateDomainFromData(data){var domains={};return this.data().isEmpty()||(domains=domainCalculator[this.coord()](data,this)),domains}},{key:"getDataDomain",value:function getDataDomain(encodingType){var domains=this.store().get("".concat(namespace_namespaceObject.LAYER_GLOBAL_NAMESPACE,".").concat("domain",".").concat(this.metaInf().namespace));return void 0!==encodingType?domains[encodingType]||[]:domains}},{key:"getNormalizedData",value:function getNormalizedData(transformedData){return function getNormalizedData(transformedData,context){var transformType=context.transformType(),transformedDataArr="identity"===transformType?[transformedData]:transformedData,encodingFieldInf=context.encodingFieldsInf(),fieldsConfig=context.data().getFieldsConfig();return dataNormalizers[context.coord()](transformedDataArr,encodingFieldInf,fieldsConfig,transformType)}(transformedData,this)}},{key:"getNearestPoint",value:function getNearestPoint(){return null}},{key:"applyInteractionStyle",value:function applyInteractionStyle(interactionType,selectionSet,apply,styles){var interactionStyles=(this.config().interaction||{})[interactionType];(interactionStyles=styles||interactionStyles)&&helpers_applyInteractionStyle(this,selectionSet,interactionStyles,{apply:apply,interactionType:interactionType})}},{key:"disableUpdate",value:function disableUpdate(){return this._updateLock=!0,this}},{key:"enableUpdate",value:function enableUpdate(){return this._updateLock=!1,this}},{key:"resolveTransformType",value:function resolveTransformType(){this._transformType=function getValidTransform(context){return helpers_resolveInvalidTransformType(context)||context.config().transform.type}(this)}},{key:"transformType",value:function transformType(){return this._transformType}},{key:"render",value:function render(){return this}},{key:"elemType",value:function elemType(){return"g"}},{key:"remove",value:function remove(){return this.store().unsubscribe({namespace:"".concat(namespace_namespaceObject.LAYER_LOCAL_NAMESPACE,".").concat(this.metaInf().namespace)}),renderer_utils_selectElement(this.mount()).remove(),this}},{key:"cachePoint",value:function cachePoint(key,data){if(null===key)return this;var pointMap=this._pointMap;return!pointMap[key]&&(pointMap[key]=[]),pointMap[key].push(data),this}},{key:"dataProps",value:function dataProps(){return arguments.length?(this._dataProps=arguments.length<=0?void 0:arguments[0],this):this._dataProps}},{key:"getIdentifiersFromData",value:function getIdentifiersFromData(data){var schema=this.data().getData().schema,fieldsConfig=this.data().getFieldsConfig(),identifiers=[[],[]],_this$encodingFieldsI=this.encodingFieldsInf(),xFieldType=_this$encodingFieldsI.xFieldType,yFieldType=_this$encodingFieldsI.yFieldType,xField=_this$encodingFieldsI.xField,yField=_this$encodingFieldsI.yField,_map2=base_layer_slicedToArray([xFieldType,yFieldType].map(function(type){return type===dist_datamodel.FieldType.MEASURE}),2),xMeasure=_map2[0],yMeasure=_map2[1];if(schema.forEach(function(d,i){var name=d.name;fieldsConfig[name].def.type===dist_datamodel.FieldType.DIMENSION&&(identifiers[0].push(name),identifiers[1].push(data[i]))}),xMeasure&&yMeasure){var _identifiers$,_identifiers$2,xMeasureIndex=fieldsConfig[xField].index,yMeasureIndex=fieldsConfig[yField].index;(_identifiers$=identifiers[0]).push.apply(_identifiers$,[xField,yField]),(_identifiers$2=identifiers[1]).push.apply(_identifiers$2,[data[xMeasureIndex],data[yMeasureIndex]])}return identifiers}},{key:"hasPlotSpan",value:function hasPlotSpan(){return!1}},{key:"getPlotSpan",value:function getPlotSpan(){return{x:0,y:0}}},{key:"getPlotPadding",value:function getPlotPadding(){return{x:0,y:0}}},{key:"getPointsFromIdentifiers",value:function getPointsFromIdentifiers(identifiers){var _ref,fieldNames,values,config=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},getAllAttrs=config.getAllAttrs,getBBox=config.getBBox;if(!this.data())return[];if(identifiers instanceof datamodel_default.a){var dataObj=identifiers.getData();fieldNames=dataObj.schema.map(function(d){return d.name}),values=dataObj.data}else fieldNames=identifiers[0],values=identifiers.slice(1,identifiers.length);var points=this._points,fieldsConfig=this.data().getFieldsConfig(),filteredPoints=(_ref=[]).concat.apply(_ref,base_layer_toConsumableArray(points)).filter(function(point){var source=point.source,rowId=point.rowId;return fieldNames.every(function(field,idx){return field in fieldsConfig&&fieldsConfig[field].def.type===dist_datamodel.FieldType.DIMENSION?-1!==values.findIndex(function(d){return d[idx]===source[fieldsConfig[field].index]}):field!==reserved_fields.ROW_ID||-1!==values.findIndex(function(d){return d[idx]===rowId})})});return getAllAttrs?filteredPoints:filteredPoints.map(function(d){var obj=clone(d);if(getBBox){var update=obj.update||obj;if(void 0!==obj.size){var sizeVal=2*Math.sqrt(obj.size/Math.PI);update.width=sizeVal,update.height=sizeVal,update.x-=sizeVal/2,update.y-=sizeVal/2}else void 0===update.width&&(update.width=2),void 0===update.height&&(update.height=2)}return obj.update||obj}).sort(function(a,b){return a.y-b.y})}},{key:"getTransformedDataFromIdentifiers",value:function getTransformedDataFromIdentifiers(identifiers){var measureIndex,enc,_identifiers$getData=identifiers.getData(),identifierData=_identifiers$getData.data,identifierSchema=_identifiers$getData.schema,normalizedData=this._normalizedData,fieldsConfig=this.data().getFieldsConfig(),_this$encodingFieldsI2=this.encodingFieldsInf(),yField=_this$encodingFieldsI2.yField,xField=_this$encodingFieldsI2.xField,yFieldType=_this$encodingFieldsI2.yFieldType;_this$encodingFieldsI2.xFieldType===dist_datamodel.FieldType.MEASURE?(measureIndex=fieldsConfig[xField].index,enc="x"):yFieldType===dist_datamodel.FieldType.MEASURE&&(measureIndex=fieldsConfig[yField].index,enc="y");var transformedData=[];return normalizedData.forEach(function(dataArr){dataArr.forEach(function(dataObj){var tupleArr=dataObj.source;if(identifierSchema.every(function(obj,i){return-1!==identifierData.findIndex(function(d){return tupleArr[fieldsConfig[obj.name].index]===d[i]})})){var transformedVal=dataObj[enc],row=dataObj.source,tuple={};for(var key in fieldsConfig){var index=fieldsConfig[key].index;tuple[key]=row[index],index===measureIndex&&(tuple[key]=transformedVal)}transformedData.push(tuple)}})}),[transformedData,this.data().getData().schema]}},{key:"getPlotElementsFromSet",value:function getPlotElementsFromSet(set){return renderer_utils_selectElement(this.mount()).selectAll(this.elemType()).filter(function(data){return!!data&&-1!==set.indexOf(data.rowId)})}},{key:"animationDone",value:function animationDone(){return Promise.all(this._animationDonePromises)}},{key:"registerAnimationDoneHook",value:function registerAnimationDoneHook(){var resolveFn,promise=new Promise(function(resolve){resolveFn=resolve});return this._animationDonePromises.push(promise),function(){resolveFn()}}},{key:"getRenderProps",value:function getRenderProps(){var metaInf=this.metaInf();return this.coord()===COORD_TYPES_POLAR?["".concat(namespace_namespaceObject.GROUP_GLOBAL_NAMESPACE,".domain.radius")]:["".concat(namespace_namespaceObject.GROUP_GLOBAL_NAMESPACE,".domain.y.").concat(metaInf.unitRowIndex,"0"),"".concat(namespace_namespaceObject.GROUP_GLOBAL_NAMESPACE,".domain.x.").concat(metaInf.unitColIndex,"0")]}}],[{key:"getState",value:function getState(){return[{domain:{}},{config:{},data:{}}]}},{key:"create",value:function create(){for(var _len=arguments.length,params=new Array(_len),_key=0;_key<_len;_key++)params[_key]=arguments[_key];return base_layer_construct(this,params)}},{key:"defaultConfig",value:function defaultConfig(){return{transform:{type:"identity"}}}},{key:"defaultPolicy",value:function defaultPolicy(conf,userConf){return mergeRecursive(conf,userConf)}},{key:"formalName",value:function formalName(){return"base"}},{key:"shouldDrawAnchors",value:function shouldDrawAnchors(){return!1}}]),BaseLayer}(),renderer_line=Symbols.line,renderer_filterFn=function filterFn(d){var update=d.update;return null!==update.y&&null!==update.x},renderer_drawLine=function drawLine(context){var filteredPoints,layer=context.layer,container=context.container,points=context.points,interpolate=context.interpolate,connectNullData=context.connectNullData,className=context.className,style=context.style,transition=context.transition,mount=renderer_utils_selectElement(container).attr("class",className),curveInterpolatorFn=pathInterpolators[interpolate],linepath=renderer_line().curve(curveInterpolatorFn).x(function(d){return d.update.x}).y(function(d){return d.update.y}).defined(renderer_filterFn);filteredPoints=points,connectNullData&&(filteredPoints=points.filter(renderer_filterFn)),helpers_updateStyle(mount,style);var element=makeElement(mount,"path",points.length?[points[0].className]:[]);return element.attr("class",function(d){return d}),transition.disabled||(element=element.transition().duration(transition.duration).on("end",layer.registerAnimationDoneHook())),element.attr("d",linepath(filteredPoints)).style("fill-opacity",0),element},line_default_config_defaultConfig={classPrefix:"muze",defClassName:"layer-line",className:"",interpolate:"linear",transform:{type:"group"},interaction:{highlight:[{type:"stroke",intensity:[0,0,-15,0]}],fade:[{type:"stroke",intensity:[0,0,15,0]}],focus:[{type:"stroke",intensity:[0,0,15,0]}]},nearestPointThreshold:20,encoding:{color:{},x:{},y:{},strokeOpacity:{value:1}},transition:{effect:"cubic",duration:1e3},connectNullData:!1};__webpack_require__(15);function line_typeof(obj){return(line_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function line_defineProperties(target,props){for(var i=0;i2&&void 0!==arguments[2]?arguments[2]:{},dataPoint=renderer_utils_selectElement(config.event.target).data()[0];if(isSimpleObject(dataPoint)){var source=dataPoint.source,rowId=dataPoint.rowId;return{id:this.getIdentifiersFromData(source,rowId),layerId:this.id()}}return null}},{key:"getPlotElementsFromSet",value:function getPlotElementsFromSet(set){return renderer_utils_selectElement(this.mount()).selectAll(this.elemType()).filter(function(d){return-1!==set.indexOf(d.rowId)})}},{key:"translatePoints",value:function translatePoints(data){var _this2=this,_this$axes=this.axes(),angle=_this$axes.angle,colorAxis=_this$axes.color,radiusAxis=_this$axes.radius,pieIndex={},prevData=this._points[0]||[],points=[],angleV={};return this._prevPieData={},prevData.forEach(function(e,index){_this2._prevPieData[e.rowId]=[e,index],pieIndex[e.index]=e}),data.forEach(function(d,i){var angles=angle.getScaleValue(d.angle);!angleV[d.angle]&&(angleV[d.angle]=0);var _angles=angles[angleV[d.angle]++],startAngle=_angles.startAngle,endAngle=_angles.endAngle,uid=d.rowId,resolvedEncodings=helpers_resolveEncodingValues({values:{radius:radiusAxis.getOuterRadius(d.radius),radius0:radiusAxis.getInnerRadius(d.radius0),color:colorAxis.getColor(d.color),angle0:startAngle,angle:endAngle,startAngle:startAngle,endAngle:endAngle,startAngle0:startAngle,endAngle0:endAngle},data:d},i,data,_this2),color=resolvedEncodings.color;points.push({source:d.source,index:i,enter:{},update:{angle0:resolvedEncodings.angle0,angle:resolvedEncodings.angle,radius0:resolvedEncodings.radius0,radius:resolvedEncodings.radius},color:color,meta:getColorMetaInf(resolvedEncodings.color,colorAxis),rowId:uid,_previousInfo:_this2._prevPieData[uid]?_this2._prevPieData[uid][0]:function getPreviousPoint(prevData,currIndex,context){var prevArc=prevData[currIndex-1],nextArc=prevData[currIndex],_context$axes$angle$r2=arc_helper_slicedToArray(context.axes().angle.range(),2),startAngle=_context$axes$angle$r2[0],endAngle=_context$axes$angle$r2[1];return prevArc&&nextArc?{update:{angle0:getObjProp(prevArc,"update","angle"),angle:getObjProp(nextArc,"update","angle0")}}:nextArc?{update:{angle0:(startAngle-90)*Math.PI*2/360,angle:(startAngle-90)*Math.PI*2/360}}:{update:{angle0:(endAngle-90)*Math.PI*2/360,angle:(endAngle-90)*Math.PI*2/360}}}(pieIndex,i,_this2)})}),points}},{key:"render",value:function render(container){var _this3=this,measurement=this.measurement(),_this$config=this.config(),classPrefix=_this$config.classPrefix,defClassName=_this$config.defClassName,cornerRadius=_this$config.cornerRadius,padAngle=_this$config.padAngle,padRadius=_this$config.padRadius,transition=_this$config.transition,qualClassName=getQualifiedClassName(defClassName,this.id(),classPrefix),path=this._arcFn=arc_arc().cornerRadius(cornerRadius).startAngle(function(d){return d.update.angle0+Math.PI/2}).endAngle(function(d){return d.update.angle+Math.PI/2}).padAngle(padAngle).padRadius(padRadius).outerRadius(function(d){return d.update.radius}).innerRadius(function(d){return d.update.radius0});this._points=this._normalizedData.map(function(arr){return _this3.translatePoints(arr)});var g=makeElement(renderer_utils_selectElement(container),"g",this._points,"".concat(qualClassName[0],"-group")).classed("".concat(qualClassName[1],"-group"),!0).attr("transform","translate(".concat(measurement.width/2,",\n ").concat(measurement.height/2,")")),consecutiveExits=[],exitCounter=0;return makeElement(g,"g",function(d){return d},"".concat(qualClassName[0]),{update:function tween(elem){makeElement(elem,"path",function(d){return[d]},"".concat(qualClassName[0],"-path")).style("fill",function(d){return d.color}).transition().duration(transition.duration).on("end",_this3.registerAnimationDoneHook()).attrTween("d",function(){for(var _len=arguments.length,params=new Array(_len),_key=0;_key<_len;_key++)params[_key]=arguments[_key];return function tweenPie(path,b){var datum=b[0];return function(t){return path(common_utils_interpolator()(datum._previousInfo,datum)(t))}}(path,params)}).attr("class",function(d,i){var individualClass=getIndividualClassName(d,i,_this3._points,_this3);return"".concat(qualClassName[0],"-path ").concat(qualClassName[1],"-path-").concat(d.index,"\n ").concat(individualClass)})},exit:function tweenExit(elem,d){var exitArr=consecutiveExits[exitCounter],oldExitCounter=exitCounter;exitArr?exitArr[exitArr.length-1].datum.index===d.index-1?exitArr.push({elem:elem,datum:d}):exitCounter++:exitArr=[{elem:elem,datum:d}],consecutiveExits[oldExitCounter]=exitArr}}).attr("class",function(d,i){return"".concat(qualClassName[0]," ").concat(qualClassName[1],"-").concat(i)}),function tweenExitPie(consecutiveExits,transition,path){consecutiveExits.length>0&&consecutiveExits.forEach(function(consecutiveExitArr){var startAngle=consecutiveExitArr[0].datum.update.angle0,endAngle=consecutiveExitArr[consecutiveExitArr.length-1].datum.update.angle,mid=2*Math.PI*startAngle/(2*Math.PI+startAngle-endAngle);consecutiveExitArr.forEach(function(e){var elem=e.elem,datum=e.datum;elem.each(function(){var gElem=renderer_utils_selectElement(this);gElem.selectAll("path").transition().duration(transition.duration).attrTween("d",function(){return function(t){return path(common_utils_interpolator()(datum,{update:{angle0:mid,angle:mid,radius:datum.radius,radius0:datum.radius0}})(t))}}).remove(),gElem.remove()})})})}(consecutiveExits,transition,path),this}},{key:"getPointsFromIdentifiers",value:function getPointsFromIdentifiers(identifiers){if(!this.data())return[];var fieldNames=identifiers[0],values=identifiers.slice(1,identifiers.length),pieSlices=renderer_utils_selectElement(this.mount()).selectAll("path").data(),fieldsConfig=this.data().getFieldsConfig(),pieSliceInf=pieSlices.filter(function(tData){var source=tData.source,rowId=tData.rowId;return fieldNames.every(function(field,idx){return field in fieldsConfig&&fieldsConfig[field].def.type===dist_datamodel.FieldType.DIMENSION?-1!==values.findIndex(function(d){return d[idx]===source[fieldsConfig[field].index]}):field!==reserved_fields.ROW_ID||-1!==values.findIndex(function(d){return d[idx]===rowId})})})[0];if(pieSliceInf){var measurement=this.measurement(),centroid=this._arcFn.centroid(pieSliceInf);return[{x:centroid[0]+measurement.width/2,y:centroid[1]+measurement.height/2,width:2,height:2}]}return[]}}],[{key:"defaultConfig",value:function defaultConfig(){return arc_default_config_defaultConfig}},{key:"formalName",value:function formalName(){return"arc"}}]),ArcLayer}(),text_renderer=function drawText(container,data,config,smartLabel){var selection=renderer_utils_selectElement(container).selectAll("g").data(data),selectionMerge=selection.enter().append("g").each(function(dataObj){renderer_utils_setAttrs(this,dataObj.enter)}).merge(selection),style=renderer_utils_getSmartComputedStyle(renderer_utils_selectElement(container),config.className),fontSize=parseInt(style.fontSize,10);return smartLabel.setStyle(style),selectionMerge.each(function(dataObj){var backgroundVal,element=renderer_utils_selectElement(this),update=dataObj.update,text=dataObj.text,color=dataObj.color,textanchor=dataObj.textanchor,textStyle=dataObj.style,background=dataObj.background;if(backgroundVal=background.value){var diff,backgroundPadding=background.padding,_smartLabel$getOriSiz=smartLabel.getOriSize(dataObj.text),width=_smartLabel$getOriSiz.width,height=_smartLabel$getOriSiz.height,backgroundEl=makeElement(element,"rect",[1]);diff="end"===textanchor?width:"start"===textanchor?0:width/2,renderer_utils_setAttrs(backgroundEl.node(),{x:update.x-diff-backgroundPadding/2,y:update.y-fontSize-backgroundPadding/2,width:width+backgroundPadding,height:height+backgroundPadding}),background&&renderer_utils_setStyles(backgroundEl,{background:backgroundVal})}var textEl=makeElement(element,"text",function(d){return[d]}).text(text),textNode=textEl.node();textStyle&&renderer_utils_setStyles(textNode,textStyle),color&&renderer_utils_setStyles(textNode,{fill:color}),dataObj.className&&textEl.classed(dataObj.className,!0),renderer_utils_setAttrs(textNode,update),textEl.attr("text-anchor",textanchor),textEl.attr("alignment-baseline",dataObj["alignment-baseline"]),textEl.attr("transform","rotate(".concat(dataObj.rotation," ").concat(update.x," ").concat(update.y,")"))}),selection.exit().remove(),selection},text_default_config_defaultConfig={defClassName:"layer-text",classPrefix:"muze",className:"",transform:{type:"identity"},interaction:{highlight:[{type:"fill",intensity:[0,0,-15,0]}],fade:[{type:"fill",intensity:[0,0,15,0]}],focus:[{type:"fill",intensity:[0,0,15,0]}]},transition:{effect:"cubic",duration:1e3},encoding:{color:{},size:{},radius:{},angle:{},text:{value:"",formatter:function formatter(val,i,data,context){return context.valueParser()(val)},background:{padding:10}},rotation:{value:0},"alignment-baseline":{value:"middle"}},states:{highlight:{className:"".concat("muze","-layer-text-highlight")},fadeout:{className:"".concat("muze","-layer-text-fadeout")},selected:{className:"".concat("muze","-layer-text-selected")}}};__webpack_require__(18);function text_typeof(obj){return(text_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function text_defineProperties(target,props){for(var i=0;i1&&void 0!==arguments[1]?arguments[1]:{};return pointTranslators[this.coord()](data,config,this)}},{key:"render",value:function render(container){var _this=this,config=this.config(),normalizedData=this._normalizedData,className=config.className,qualifiedClassName=getQualifiedClassName(config.defClassName,this.id(),config.classPrefix);return renderer_utils_selectElement(container).classed("".concat(qualifiedClassName.join(" ")," ").concat(className),!0),renderer_utils_createElements({data:normalizedData,append:"g",selector:"g",container:container,each:function each(dataArr,group){var node=group.node(),points=_this.translatePoints(dataArr,{},_this);renderer_utils_setStyles(node,{"text-anchor":"middle"}),text_renderer(node,points,{className:qualifiedClassName[0]},_this._dependencies.smartLabel)}}),this}}],[{key:"defaultConfig",value:function defaultConfig(){return text_default_config_defaultConfig}},{key:"formalName",value:function formalName(){return"text"}}]),TextLayer}(),point_renderer=function drawSymbols(params){var layer=params.layer,container=params.container,points=params.points,transition=params.transition,className=params.className,duration=transition.duration,effect=transition.effect,disabled=transition.disabled,mount=renderer_utils_selectElement(container);return mount.attr("class",className),makeElement(mount,"g",points,null,{enter:function enter(group,d){var enter=d.enter;group.attr("transform","translate(".concat(enter.x,",").concat(enter.y,")"))},update:function update(group,d){!function createShape(d,groupElement){var shape=d.shape,size=d.size,update=d.update;if(shape instanceof Promise)shape.then(function(res){d.shape=res,createShape(d,groupElement)});else if(shape instanceof Element){var newShape=shape.cloneNode(!0);if("img"===newShape.nodeName.toLowerCase()){var src=newShape.src||newShape.href;(newShape=document.createElementNS("http://www.w3.org/2000/svg","image")).setAttribute("href",src)}var shapeElement=renderer_utils_selectElement(newShape);"path"===newShape.nodeName||"image"===newShape.nodeName?shapeElement.attr("transform","scale(".concat(size/100,")")):(shapeElement.attr("height",size),shapeElement.attr("width",size)),shapeElement.attr("x",-size/2),shapeElement.attr("y",-size/2),makeElement(groupElement,function(){return newShape},[1])}else if("string"==typeof shape){var pathStr;pathStr=function checkPath(str){return!!(/^[mzlhvcsqta]\s*[-+.0-9][^mlhvzcsqta]+/i.test(str)&&/[\dz]$/i.test(str)&&str.length>4)}(shape)?shape:common_utils_getSymbol(shape).size(size)(update),makeElement(groupElement,"path",function(data){return[data]}).attr("d",pathStr)}else d.shape="circle",createShape(d,groupElement)}(d,group);var update=d.update,style=d.style;objectIterator(style,function(key){return group.style(key,style[key])}),group.attr("class",className),group.classed(d.className,!0),disabled||(group=group.transition().duration(transition.duration).on("end",layer.registerAnimationDoneHook())),group.attr("transform","translate(".concat(update.x,",").concat(update.y,")"))},exit:function exit(exitGroup){disabled?exitGroup.remove():exitGroup.transition().ease(easeFns[effect]).duration(duration).on("end",function(){return exitGroup.remove()}).style("fill-opacity",0).style("stroke-opacity",0)}},params.keyFn)},point_default_config_defaultConfig={defClassName:"layer-point",className:"",classPrefix:"muze",defColorStyle:"stroke",interaction:{highlight:[{type:"fill",intensity:[0,0,-20,0]}],fade:[{type:"fill",intensity:[0,0,20,0]}],focus:[{type:"fill",intensity:[0,0,20,0]}]},innerPadding:.1,nearestPointThreshold:10,transform:{type:"identity"},transition:{effect:"cubic",duration:1e3},encoding:{size:{value:30},color:{},shape:{value:"circle"},x:{},y:{},strokeOpacity:{value:.5},fillOpacity:{value:.5}},shapes:["circle","cross","diamond","square","star","wye","triangle"],sizes:[20,30,40,50,60,70]};__webpack_require__(19);function point_typeof(obj){return(point_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function point_toConsumableArray(arr){return function point_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);i1&&void 0!==arguments[1]?arguments[1]:{},points=[],encoding=this.config().encoding,axes=this.axes(),x=encoding.x,y=encoding.y,xField=x.field,yField=y.field,sizeAxis=axes.size,shapeAxis=axes.shape,fieldsConfig=this.data().getFieldsConfig(),isXDim=fieldsConfig[xField]&&fieldsConfig[xField].def.type===dist_datamodel.FieldType.DIMENSION,isYDim=fieldsConfig[yField]&&fieldsConfig[yField].def.type===dist_datamodel.FieldType.DIMENSION,key=isXDim?ENCODING.X:isYDim?ENCODING.Y:null,measurement=this.measurement(),colorAxis=axes.color,_config$offset=config.offset,offsetX=_config$offset.x,offsetY=_config$offset.y,_loop=function _loop(i,len){var d=data[i],size=sizeAxis.getSize(d.size),shape=shapeAxis.getShape(d.shape),_map2=point_slicedToArray([ENCODING.X,ENCODING.Y].map(function(type){var value=null===d[type]?void 0:d[type],measure=type===ENCODING.X?measurement.width:measurement.height;return encoding[type].field?axes[type].getScaleValue(value):measure/2}),2),xPx=_map2[0],yPx=_map2[1];xPx+=offsetX,yPx+=offsetY;var color=colorAxis.getColor(d.color),resolvedEncodings=helpers_resolveEncodingValues({values:{x:xPx,y:yPx,color:color,shape:shape,size:size,data:d},data:d},i,data,_this2),style={fill:color=resolvedEncodings.color,stroke:color},pos={x:resolvedEncodings.x,y:resolvedEncodings.y};if(!isNaN(xPx)&&!isNaN(yPx)){var point={enter:pos,update:pos,shape:resolvedEncodings.shape,size:Math.abs(resolvedEncodings.size),meta:getColorMetaInf(color,colorAxis),style:style,source:d.source,rowId:d.rowId};point.className=getIndividualClassName(d,i,data,_this2),points.push(point),_this2.cachePoint(d[key],point)}},i=0,len=data.length;i=update.x&&x<=update.width+update.x&&y>=update.y&&y<=update.height+update.y){pointFound=point;break}pointFound=null}var values=pointFound&&pointFound.source;return values&&(identifiers=this.getIdentifiersFromData(values,pointFound.rowId)),pointFound?{dimensions:[pointFound.update],id:identifiers,layerId:this.id()}:pointFound}},{key:"getPlotSpan",value:function getPlotSpan(){return this._plotSpan}},{key:"hasPlotSpan",value:function hasPlotSpan(){return!0}}],[{key:"formalName",value:function formalName(){return"bar"}},{key:"defaultConfig",value:function defaultConfig(){return bar_default_config_defaultConfig}},{key:"defaultPolicy",value:function defaultPolicy(conf,userConf){var config=base_layer_BaseLayer.defaultPolicy(conf,userConf),colorField=config.encoding.color.field,transform=config.transform;return colorField&&(transform.groupBy=colorField),config}}]),BarLayer}(),tick_default_config_defaultConfig={defClassName:"layer-tick",className:"",classPrefix:"muze",interaction:{highlight:[{type:"stroke",intensity:[0,0,-15,0]}],fade:[{type:"stroke",intensity:[0,0,15,0]}],focus:[{type:"stroke",intensity:[0,0,15,0]}]},innerPadding:.1,transform:{type:"identity"},transition:{effect:"cubic",duration:1e3},interpolate:"linear",encoding:{color:{},x:{},y:{},x0:{},y0:{},radius:{},radius0:{},angle:{},angle0:{},strokeOpacity:{value:.5},fillOpacity:{value:.5}},states:{highlight:{className:"".concat("muze","-layer-tick-highlight")},fadeout:{className:"".concat("muze","-layer-tick-fadeout")},selected:{className:"".concat("muze","-layer-tick-selected")}}},tick_renderer_line=Symbols.line,tick_renderer=function(params){var points=params.points,container=params.container,keyFn=params.keyFn,className=params.className,interpolate=params.interpolate,mount=renderer_utils_selectElement(container),ticks=mount.selectAll("path").data(points,keyFn),ticksEnter=ticks.enter().append("path");return mount.attr("class",className||""),ticksEnter.each(function(d){var selection=renderer_utils_selectElement(this),enter=d.enter||{};Object.entries(enter).forEach(function(attr){return!isNaN(attr[1])&&selection.attr(attr[0],attr[1])})}),ticks.exit().remove(),ticks.merge(ticksEnter).each(function(d){var selection=renderer_utils_selectElement(this),update=d.update,updateStyle=d.style||{},x0=void 0!==update.x0?update.x0:update.x,y0=void 0!==update.y0?update.y0:update.y,curveInterpolatorFn=pathInterpolators[interpolate],linepath=tick_renderer_line().curve(curveInterpolatorFn).x(function(e){return e[0]}).y(function(e){return e[1]});d.className&&selection.classed(d.className,!0),selection.attr("d",linepath([[update.x,update.y],[x0,y0]])),Object.entries(updateStyle).forEach(function(styleObj){return selection.style(styleObj[0],styleObj[1])})})};__webpack_require__(21);function tick_typeof(obj){return(tick_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function tick_defineProperties(target,props){for(var i=0;i1&&void 0!==arguments[1]&&arguments[1];for(var layerInst=arguments.length>2?arguments[2]:void 0,axes=layerInst.axes(),points=[],radiusAxis=axes.radius,angleAxis=axes.angle,angle0Axis=axes.angle0,measurement=layerInst.measurement(),colorAxis=axes.color,angleV={},angle0V={},i=0,len=data.length;i1&&void 0!==arguments[1]?arguments[1]:{},layerInst=arguments.length>2?arguments[2]:void 0,axes=layerInst.axes(),points=[],_getAxesScales=helpers_getAxesScales(axes),xAxis=_getAxesScales.xAxis,yAxis=_getAxesScales.yAxis,_layerInst$encodingFi=layerInst.encodingFieldsInf(),xField=_layerInst$encodingFi.xField,yField=_layerInst$encodingFi.yField,x0Field=_layerInst$encodingFi.x0Field,y0Field=_layerInst$encodingFi.y0Field,xFieldType=_layerInst$encodingFi.xFieldType,yFieldType=_layerInst$encodingFi.yFieldType,isXDim=xFieldType===dist_datamodel.FieldType.DIMENSION,isYDim=yFieldType===dist_datamodel.FieldType.DIMENSION,key=isXDim?ENCODING.X:isYDim?ENCODING.Y:null,measurement=layerInst.measurement(),colorAxis=axes.color,_config$offset=config.offset,offsetX=_config$offset.x,offsetY=_config$offset.y,_config$span=config.span,xSpan=_config$span.x,ySpan=_config$span.y,i=0,len=data.length;i1?_len-1:0),_key=1;_key<_len;_key++)params[_key-1]=arguments[_key];var layerRegistry=factoryObj._layerRegistry,instances=(layerDef=layerDef instanceof Array?layerDef:[layerDef]).map(function(layerObj){var layerConstructor=layerRegistry[layerObj.mark];return layerConstructor.create.apply(layerConstructor,params)});return 1===instances.length?instances[0]:instances},getLayerClass:function getLayerClass(mark){return factoryObj._layerRegistry[mark]},composeLayers:function composeLayers(layerType,layerDefs){compositeLayers[layerType]=layerDefs},sanitizeLayerConfig:function sanitizeLayerConfig(layerDef){var newConf=mergeRecursive({},layerDef);return sanitizeEncoding(newConf.encoding),newConf}};return factoryObj}();function defaults_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}var _CONFIG$ROWS$COLUMNS$,DEFAULT_LAYERS=(defaults_defineProperty(_DEFAULT_LAYERS={},layer_types_AREA_LAYER,area_AreaLayer),defaults_defineProperty(_DEFAULT_LAYERS,layer_types_ARC_LAYER,arc_ArcLayer),defaults_defineProperty(_DEFAULT_LAYERS,layer_types_LINE_LAYER,line_LineLayer),defaults_defineProperty(_DEFAULT_LAYERS,layer_types_TEXT_LAYER,text_TextLayer),defaults_defineProperty(_DEFAULT_LAYERS,layer_types_POINT_LAYER,point_PointLayer),defaults_defineProperty(_DEFAULT_LAYERS,layer_types_TICK_LAYER,tick_TickLayer),defaults_defineProperty(_DEFAULT_LAYERS,layer_types_BAR_LAYER,bar_BarLayer),defaults_defineProperty(_DEFAULT_LAYERS,layer_types_BASE_LAYER,base_layer_BaseLayer),_DEFAULT_LAYERS),muze_package=__webpack_require__(6);function local_options_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}var local_options=(local_options_defineProperty(_CONFIG$ROWS$COLUMNS$={},"config",{}),local_options_defineProperty(_CONFIG$ROWS$COLUMNS$,ROWS,{}),local_options_defineProperty(_CONFIG$ROWS$COLUMNS$,COLUMNS,{}),local_options_defineProperty(_CONFIG$ROWS$COLUMNS$,enums_constants_COLOR,{}),local_options_defineProperty(_CONFIG$ROWS$COLUMNS$,enums_constants_SHAPE,{}),local_options_defineProperty(_CONFIG$ROWS$COLUMNS$,enums_constants_SIZE,{}),local_options_defineProperty(_CONFIG$ROWS$COLUMNS$,"detail",{}),local_options_defineProperty(_CONFIG$ROWS$COLUMNS$,"layers",{}),local_options_defineProperty(_CONFIG$ROWS$COLUMNS$,"transform",{}),_CONFIG$ROWS$COLUMNS$);function simple_group_defineProperties(target,props){for(var i=0;i0&&(dimensionArr[0]=[].concat(field_sanitizer_toConsumableArray(dimensionArr[0]),field_sanitizer_toConsumableArray(dimensionArr[1])),dimensionArr[1]=[]),{fields:dimensionArr.map(function(list,i){return 1===i?measureArr[i].concat(dimensionArr[i]):dimensionArr[i].concat(measureArr[i])}),dimensions:[].concat(field_sanitizer_toConsumableArray(dimensionArr[0]),field_sanitizer_toConsumableArray(dimensionArr[1])),measures:[].concat(field_sanitizer_toConsumableArray(measureArr[0]),field_sanitizer_toConsumableArray(measureArr[1])),temporal:[].concat(field_sanitizer_toConsumableArray(temporalArr[0]),field_sanitizer_toConsumableArray(temporalArr[1])),categorical:[].concat(field_sanitizer_toConsumableArray(categoricalArr[0]),field_sanitizer_toConsumableArray(categoricalArr[1]))}}(norFields,fields)}),2),rowsInfo=_map2[0],columnsInfo=_map2[1],rows=rowsInfo.fields,rowDimensions=rowsInfo.dimensions,rowMeasures=rowsInfo.measures,rowTemporalFields=rowsInfo.temporal,rowCategoricalFields=rowsInfo.categorical,columns=columnsInfo.fields,columnDimensions=columnsInfo.dimensions,columnMeasures=columnsInfo.measures;return{rows:rows,rowDimensions:rowDimensions,rowMeasures:rowMeasures,rowTemporalFields:rowTemporalFields,rowCategoricalFields:rowCategoricalFields,columns:columns,columnTemporalFields:columnsInfo.temporal,columnCategoricalFields:columnsInfo.categorical,columnDimensions:columnDimensions,columnMeasures:columnMeasures}};function visual_encoder_slicedToArray(arr,i){return function visual_encoder_arrayWithHoles(arr){if(Array.isArray(arr))return arr}(arr)||function visual_encoder_iterableToArrayLimit(arr,i){var _arr=[],_n=!0,_d=!1,_e=void 0;try{for(var _s,_i=arr[Symbol.iterator]();!(_n=(_s=_i.next()).done)&&(_arr.push(_s.value),!i||_arr.length!==i);_n=!0);}catch(err){_d=!0,_e=err}finally{try{_n||null==_i.return||_i.return()}finally{if(_d)throw _e}}return _arr}(arr,i)||function visual_encoder_nonIterableRest(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}()}function visual_encoder_defineProperties(target,props){for(var i=0;i0&&void 0!==arguments[0]?arguments[0]:{},fields=arguments.length>1?arguments[1]:void 0,_getHeaderAxisFrom2=visual_encoder_slicedToArray(group_utils_getHeaderAxisFrom(ROW,fields.rows,axisFrom),2),rowHeader=_getHeaderAxisFrom2[0],rowAxis=_getHeaderAxisFrom2[1],_getHeaderAxisFrom4=visual_encoder_slicedToArray(group_utils_getHeaderAxisFrom("column",fields.columns,axisFrom),2),colHeader=_getHeaderAxisFrom4[0],colAxis=_getHeaderAxisFrom4[1];return this.axisFrom({row:rowAxis,column:colAxis}),this.headerFrom({row:rowHeader,column:colHeader}),this}}]),VisualEncoder}(),scaleMaps={linear:continous_axis_ContinousAxis,band:band_axis_BandAxis,temporal:time_axis_TimeAxis,size:size_axis_SizeAxis,color:color_axis_ColorAxis,shape:shape_axis_ShapeAxis},data_type_scale_map_dataTypeScaleMap={dimension:scale_type_namespaceObject.BAND,categorical:scale_type_namespaceObject.BAND,temporal:scale_type_namespaceObject.TIME,measure:scale_type_namespaceObject.LINEAR,continuous:scale_type_namespaceObject.LINEAR};function encoder_helper_toConsumableArray(arr){return function encoder_helper_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);i1?axesCreators.position="both":axesCreators.position=_this.axisFrom()[type],geomCellAxes[axis]=encoder_helper_generateAxisFromMap(axis,axisFields[i],axesCreators,{groupAxes:axis===X?xAxes:yAxes,valueParser:resolver.valueParser()},indices,facetFields)}),geomCell.axes(geomCellAxes),geomCellAxes}},{key:"updateDomains",value:function updateDomains(store,axes){var xAxes=axes.x,yAxes=axes.y;store.model.lock();for(var i=0;i1&&typeOfAxis===scale_type_namespaceObject.LINEAR&&axes[0].config().alignZeroLine)axes.forEach(function(axis,i){key=axisType?"".concat(idx,"0").concat(i):"0".concat(idx).concat(i),domain=domains[axisType][key],min[i]=domain[0],max[i]=domain[1]}),adjustedDomain=function getAdjustedDomain(max,min){var y1ratio=max[0]/(max[0]-min[0]),y2ratio=max[1]/(max[1]-min[1]),allSameSign=!1;return min[0]>0&&min[1]>0&&min[1]>0&&max[1]>0&&(allSameSign=!0,min[0]=0,min[1]=0),min[0]<0&&min[1]<0&&min[1]<0&&max[1]<0&&(allSameSign=!0,max[0]=0,max[1]=0),allSameSign||y1ratio===y2ratio||(y1ratiocounter)for(var _i2=counter;_i2-1&&(projections=[[_facet,_facet]],primaryFacets.splice(_existIndex,1)),secondaryFacets.splice(0,1)}else{var axisFromIndex=primaryFacets.length-1,facet=primaryFacets[axisFromIndex];projections=[[facet]];var existIndex=getIndex(secondaryFacets,facet);existIndex>-1&&(projections=[[facet,facet]],secondaryFacets.splice(existIndex,1)),primaryFacets.splice(axisFromIndex,1)}return{facets:facets=(facets=[].concat(primaryFacets,secondaryFacets)).filter(function(el,index,self){return index===self.findIndex(function(t){return t.toString()===el.toString()})}),projections:projections}}},{key:"fieldSanitizer",value:function fieldSanitizer(datamodel,config){return cartesian_encoder_get(cartesian_encoder_getPrototypeOf(CartesianEncoder.prototype),"fieldSanitizer",this).call(this,datamodel,config)}},{key:"getRetinalFieldsDomain",value:function getRetinalFieldsDomain(dataModels,encoding){var groupedModel=dataModels.groupedModel,domains={};for(var key in encoding)if({}.hasOwnProperty.call(encoding,key)){var encodingObj=encoding[key],field=encodingObj.field;if(!encodingObj.domain&&field){var domain=retriveDomainFromData(groupedModel,field);domains[field]=domain}}return domains}},{key:"serializeLayerConfig",value:function serializeLayerConfig(layerArray){var serializedLayers=[];return layerArray.length&&layerArray.forEach(function(layer,i){var def=src_layer_factory.sanitizeLayerConfig(layer);def.order=i,serializedLayers.push(def)}),serializedLayers}},{key:"sanitizeLayerConfig",value:function sanitizeLayerConfig(encodingConfigs,userLayerConfig){var layerConfig=[];return userLayerConfig.forEach(function(config){var def=toArray(config.def);encoder_helper_sanitizeIndividualLayerConfig(encodingConfigs,def),layerConfig.push(config)}),layerConfig}},{key:"getLayerConfig",value:function getLayerConfig(fields,userLayerConfig,retinalConfig){var layerConfig=[],columnFields=fields.columnFields,rowFields=fields.rowFields;return columnFields.forEach(function(colField){var colFieldName=colField.toString();rowFields.forEach(function(rowField){var configs=[],rowFieldName=rowField.toString(),encoding={x:{field:colFieldName},y:{field:rowFieldName}},rowFieldType=rowField.subtype(),mark=function getDefaultMark(colFieldType,rowFieldType){return"categorical"===colFieldType||"categorical"===rowFieldType?"bar":"temporal"===colFieldType||"temporal"===rowFieldType?"line":"point"}(colField.subtype(),rowFieldType),defConfigs=[{mark:mark,def:{mark:mark,encoding:encoding}}],layerConfigs=function getLayerConfFromFields(colFields,rowFields,userLayerConfig){return userLayerConfig.filter(function(conf){var _ref,_ref2,_ref3,userConf=conf instanceof Array?conf:[conf],encodingArr=(_ref=[]).concat.apply(_ref,encoder_helper_toConsumableArray(userConf.map(function(d){return d.encoding}).filter(function(d){return void 0!==d})));if(!encodingArr.length)return!0;var xFields=(_ref2=[]).concat.apply(_ref2,encoder_helper_toConsumableArray(encodingArr.map(function(d){return[d.x&&d.x.field,d.x0&&d.x0.field]}))).filter(function(d){return void 0!==d&&null!==d}),yFields=(_ref3=[]).concat.apply(_ref3,encoder_helper_toConsumableArray(encodingArr.map(function(d){return[d.y&&d.y.field,d.y0&&d.y0.field]}))).filter(function(d){return void 0!==d&&null!==d});if(!xFields.length&&!yFields.length)return!0;var colFieldExist=!!xFields.length&&xFields.every(function(d){return-1!==colFields.indexOf(d)}),rowFieldExist=!!yFields.length&&yFields.every(function(d){return-1!==rowFields.indexOf(d)});return xFields.length&&yFields.length?colFieldExist&&rowFieldExist:colFieldExist||rowFieldExist})}(colField.getMembers(),rowField.getMembers(),userLayerConfig||[]);configs=layerConfigs.length?layerConfigs.map(function(layerConf){var mergedLayerConf=mergeRecursive(mergeRecursive({},defConfigs[0].def),layerConf),serializedLayerConfig=src_layer_factory.getSerializedConf(mergedLayerConf.mark,mergedLayerConf);return{mark:mergedLayerConf.mark,order:mergedLayerConf.order,def:serializedLayerConfig}}):defConfigs,layerConfig.push.apply(layerConfig,cartesian_encoder_toConsumableArray(configs))})}),this.sanitizeLayerConfig(retinalConfig,layerConfig)}}],[{key:"type",value:function type(){return cartesian_encoder_CARTESIAN}}]),CartesianEncoder}();function polar_encoder_typeof(obj){return(polar_encoder_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function polar_encoder_toConsumableArray(arr){return function polar_encoder_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);icounter)for(var _i=counter;_i0&&(config=mergeRecursive(config,userLayerConfig[0])),layerConfig.push(config)}),0===layerConfig.length&&(layerConfig=userLayerConfig);var sanitizedConfig=this.sanitizeLayerConfig(retinalConfig,layerConfig);return this.layers(sanitizedConfig),sanitizedConfig}},{key:"serializeLayerConfig",value:function serializeLayerConfig(layerArray){var serializedLayers=[];return layerArray.length&&layerArray.forEach(function(layer){var def=src_layer_factory.getSerializedConf(layer.mark,layer);serializedLayers.push({mark:layer.mark,def:def})}),serializedLayers}},{key:"sanitizeLayerConfig",value:function sanitizeLayerConfig(encodingConfigs,userLayerConfig){var layerConfig=[];return userLayerConfig.forEach(function(config){var def=toArray(config.def);encoder_helper_sanitizeIndividualLayerConfig(encodingConfigs,def),def.forEach(function(conf){var encoding=conf.encoding||(conf.encoding={});!encoding.angle&&(encoding.angle={});var angleField=getObjProp(encoding.angle,"field"),angle0Field=getObjProp(encoding.angle0,"field");angleField||Object.assign(encoding.angle,{field:encodingConfigs.color&&encodingConfigs.color.field}),angle0Field||(!encoding.angle0&&(encoding.angle0={}),Object.assign(encoding.angle0,{field:encoding.angle.field}))}),layerConfig.push(config)}),layerConfig}}],[{key:"type",value:function type(){return polar_encoder_POLAR}}]),PolarEncoder}();function retinal_encoder_typeof(obj){return(retinal_encoder_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function retinal_encoder_defineProperties(target,props){for(var i=0;i1&&void 0!==arguments[1]?arguments[1]:{},axisType=axesCreators.axisType,fieldsConfig=axesCreators.fieldsConfig,field=fieldProps.field,axis=[],Cls=scaleMaps[axisType];return fieldProps.type=fieldProps.type?fieldProps.type:group_utils_getAxisType(fieldsConfig,field||null),axis.push(new Cls(fieldProps)),axis}({axisType:axisType,fieldsConfig:fieldsConfig},config[axisType])}),newAxes}},{key:"setCommonDomain",value:function setCommonDomain(context){var domains=context.domains,axes=context.axes,encoding=context.encoding;return Object.entries(encoding).forEach(function(enc){if(enc[1]&&enc[1].field){var encType=enc[0],field=enc[1].field;field&&axes[encType].forEach(function(axis){var domain=domains[field];!enc[1].domain&&axis.updateDomain(domain)})}}),axes}}],[{key:"type",value:function type(){return"retinal"}}]),RetinalEncoder}(),group_utils_this=void 0;function group_utils_slicedToArray(arr,i){return function group_utils_arrayWithHoles(arr){if(Array.isArray(arr))return arr}(arr)||function group_utils_iterableToArrayLimit(arr,i){var _arr=[],_n=!0,_d=!1,_e=void 0;try{for(var _s,_i=arr[Symbol.iterator]();!(_n=(_s=_i.next()).done)&&(_arr.push(_s.value),!i||_arr.length!==i);_n=!0);}catch(err){_d=!0,_e=err}finally{try{_n||null==_i.return||_i.return()}finally{if(_d)throw _e}}return _arr}(arr,i)||function group_utils_nonIterableRest(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}()}function group_utils_toConsumableArray(arr){return function group_utils_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);i1?_len-1:0),_key=1;_key<_len;_key++)params[_key-1]=arguments[_key];return"".concat(axisName,"-axis-").concat(params.join("-"))},group_utils_headerCreator=function headerCreator(fields,fieldHeaders,TextCell,_ref2){var classPrefix=_ref2.classPrefix,labelManager=_ref2.labelManager;return fields.length>0?fields[0].map(function(cell,i){return new TextCell({type:"header",className:"".concat(classPrefix,"-grid-headers")},{labelManager:labelManager}).source(function getHeaderText(headers,index,rowLength){var header="";if(index===rowLength-1&&headers.length>rowLength){for(var i=index;i1||right.length>1)&&(borders.top=!0,borders.bottom=!0),borders}(leftRows,rightRows),showColBorders=function getColumnsBorders(top,bottom){var borders={left:!1,right:!1};return(top.length||bottom.length)&&(top[0]&&top[0].length>1||bottom[0]&&bottom[0].length>1)&&(borders.left=!0,borders.right=!0),borders}(topColumns,bottomColumns),showValueBorders=function getValueBorders(rows,columns){var borders={top:!0,left:!0,bottom:!0,right:!0},borderTypeRow=[constants_LEFT,constants_RIGHT],borderTypeCol=["top","bottom"];return rows.forEach(function(e,i){e[0]&&e[0].length?borders[borderTypeRow[i]]=!0:borders[borderTypeRow[i]]=!1}),columns.forEach(function(e,i){e.length?borders[borderTypeCol[i]]=!0:borders[borderTypeCol[i]]=!1}),borders}([leftRows,rightRows],[topColumns,bottomColumns]),valueMatrix.length>1&&(showValueBorders.top=!0,showValueBorders.bottom=!0),valueMatrix.length&&valueMatrix[0].length>1&&(showValueBorders.left=!0,showValueBorders.right=!0),{showRowBorders:showRowBorders,showColBorders:showColBorders,showValueBorders:showValueBorders}},group_utils_sortFacetFields=function sortFacetFields(facet,keys,config){var facetName="".concat(facet);"dimension"===facet.type()&&config.sort[facetName]&&("asc"===config.sort[facetName]?keys.sort(function(a,b){return a-b}):keys.sort(function(a,b){return b-a}))};function action_behaviour_map_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}var actionBehaviourMap=(action_behaviour_map_defineProperty(_actionBehaviourMap={},actions_namespaceObject.DRAG,{behaviours:[behaviours_namespaceObject.BRUSH],touch:!1}),action_behaviour_map_defineProperty(_actionBehaviourMap,actions_namespaceObject.HOVER,{behaviours:[behaviours_namespaceObject.HIGHLIGHT]}),action_behaviour_map_defineProperty(_actionBehaviourMap,actions_namespaceObject.LONGTOUCH,{behaviours:[behaviours_namespaceObject.SELECT],touch:!0}),action_behaviour_map_defineProperty(_actionBehaviourMap,actions_namespaceObject.TOUCHDRAG,{behaviours:[behaviours_namespaceObject.BRUSH],touch:!0}),action_behaviour_map_defineProperty(_actionBehaviourMap,actions_namespaceObject.CLICK,{behaviours:[behaviours_namespaceObject.SELECT],touch:!1}),_actionBehaviourMap);function src_helper_toConsumableArray(arr){return function src_helper_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);i2&&void 0!==arguments[2]?arguments[2]:{},innerRadius=config.innerRadius,outerRadius=config.outerRadius;return[innerRadius||0,outerRadius||Math.min(height,width)/2]}(context.width(),context.height()))})},GRID_BAND="gridBands",GRID_LINE="gridLines";function grid_lines_slicedToArray(arr,i){return function grid_lines_arrayWithHoles(arr){if(Array.isArray(arr))return arr}(arr)||function grid_lines_iterableToArrayLimit(arr,i){var _arr=[],_n=!0,_d=!1,_e=void 0;try{for(var _s,_i=arr[Symbol.iterator]();!(_n=(_s=_i.next()).done)&&(_arr.push(_s.value),!i||_arr.length!==i);_n=!0);}catch(err){_d=!0,_e=err}finally{try{_n||null==_i.return||_i.return()}finally{if(_d)throw _e}}return _arr}(arr,i)||function grid_lines_nonIterableRest(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}()}function grid_lines_toConsumableArray(arr){return function grid_lines_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);i=0?axisInf[key]:axisArr.length-1;axes[key]&&(axesObj[key]=defaultValue(axes[key][axisIndex]))}}),Object.keys(axesObj).length&&layer.axes(axesObj)})}(axesVal,layers,layerAxisIndexVal),context._lifeCycleManager.notify({client:layers,action:"updated",formalName:"layer"})}}}]};function props_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}var src_props_PROPS=(props_defineProperty(_PROPS={},"facetByFields",{}),props_defineProperty(_PROPS,"retinalFields",{}),props_defineProperty(_PROPS,"parentAlias",{}),props_defineProperty(_PROPS,"layers",{}),props_defineProperty(_PROPS,"cachedData",{}),props_defineProperty(_PROPS,"detailFields",{}),props_defineProperty(_PROPS,"axes",{defaultValue:{x:[],y:[]}}),props_defineProperty(_PROPS,"fields",{}),props_defineProperty(_PROPS,"metaInf",{}),props_defineProperty(_PROPS,"registry",{}),props_defineProperty(_PROPS,"width",{}),props_defineProperty(_PROPS,"height",{}),props_defineProperty(_PROPS,"parentContainerInf",{}),props_defineProperty(_PROPS,"valueParser",{defaultValue:function defaultValue(val){return val}}),props_defineProperty(_PROPS,"coord",{}),_PROPS);function firebolt_helper_slicedToArray(arr,i){return function firebolt_helper_arrayWithHoles(arr){if(Array.isArray(arr))return arr}(arr)||function firebolt_helper_iterableToArrayLimit(arr,i){var _arr=[],_n=!0,_d=!1,_e=void 0;try{for(var _s,_i=arr[Symbol.iterator]();!(_n=(_s=_i.next()).done)&&(_arr.push(_s.value),!i||_arr.length!==i);_n=!0);}catch(err){_d=!0,_e=err}finally{try{_n||null==_i.return||_i.return()}finally{if(_d)throw _e}}return _arr}(arr,i)||function firebolt_helper_nonIterableRest(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}()}function firebolt_helper_toConsumableArray(arr){return function firebolt_helper_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);i2&&void 0!==arguments[2]?arguments[2]:{},payload=config.payload,selectionSet=config.selectionSet,propagationFieldInf=config.propagationFields[action]||{},propagationFields=propagationFieldInf.fields||[],append=propagationFieldInf.append,criteria=payload.criteria,context=instance.context,dataModel=context.cachedData()[0],sourceId=context.id(),sideEfffects=instance.sideEffects(),behaviourEffectMap=instance._behaviourEffectMap,mergedModel=selectionSet.mergedEnter.model,fieldsConfig=dataModel.getFieldsConfig();payload.sourceUnit=sourceId,payload.action=action,payload.sourceCanvas=context.parentAlias();var propagationBehaviour=instance._propagationBehaviourMap[action]||action,propFields=[];null===criteria?propagationData=null:isSimpleObject(criteria)?(propFields=Object.keys(criteria||{}),propagationData=mergedModel?mergedModel.project(propFields):null):(propFields=criteria[0],propagationData=mergedModel?mergedModel.project(propFields):null);var facetByFields=context.facetByFields();if(null!==propagationData&&propagationFields.length){var fields=propagationData.getData().schema.map(function(d){return d.name});propagationData=function getModelWithFacetData(dm,data){var dataObj=dm.getData(),schema1=dataObj.schema,data1=dataObj.data,jsonData=[],schema2=data[0].map(function(d){return{name:"".concat(d),type:dist_datamodel.FieldType.DIMENSION}}),data2=data[1];return data1.forEach(function(d){var tuple={};schema1.forEach(function(obj,i){tuple[obj.name]=d[i]}),schema2.forEach(function(obj,i){tuple[obj.name]=data2[i]}),jsonData.push(tuple)}),new datamodel_default.a(jsonData,[].concat(data_propagator_toConsumableArray(schema1),data_propagator_toConsumableArray(schema2)))}(propagationData,facetByFields),propFields=append?[].concat(data_propagator_toConsumableArray(fields),data_propagator_toConsumableArray(propagationFields)):propagationFields,propagationData=propagationData.project(propFields)}var propagateInterpolatedValues=!1;propFields.length&&propFields.every(function(field){return fieldsConfig[field]&&fieldsConfig[field].def.type===dist_datamodel.FieldType.MEASURE})&&(propagateInterpolatedValues=!0);var groupId=context.parentAlias();payload.action=action;var behaviourInstance=instance._actions.behavioural[propagationBehaviour],isMutableAction=!!behaviourInstance&&behaviourInstance.constructor.mutates(),filterFn=function filterFn(entry,propagationConf){var effects=behaviourEffectMap[entry.config.action],mutates=!entry.config.groupId||effects.some(function(d){return sideEfffects[d.name||d].constructor.mutates()});return entry.config.groupId!==propagationConf.groupId&&mutates},sourceBehaviour=instance._actions.behavioural[action],mutates=!!sourceBehaviour&&sourceBehaviour.constructor.mutates(),propConfig={payload:payload,action:action,criteria:propagationData,isMutableAction:mutates,propagateInterpolatedValues:propagateInterpolatedValues,groupId:groupId,sourceId:mutates?groupId:sourceId,filterFn:filterFn,enabled:function enabled(propConf,firebolt){return action===propagationBehaviour||propConf.payload.sourceCanvas===firebolt.context.parentAlias()}};dataModel.propagate(propagationData,propConfig,!0),action!==propagationBehaviour&&(propConfig={payload:payload,sourceId:isMutableAction?groupId:sourceId,criteria:propagationData,isMutableAction:isMutableAction,propagateInterpolatedValues:propagateInterpolatedValues,action:propagationBehaviour,groupId:groupId,applyOnSource:action===propagationBehaviour,enabled:function enabled(propConf,firebolt){return propConf.payload.sourceCanvas!==firebolt.context.parentAlias()},filterFn:filterFn},dataModel.propagate(propagationData,propConfig,!0,{filterImmutableAction:function filterImmutableAction(actionInf,propInf){return actionInf.groupId!==propInf.groupId}}))};function src_firebolt_typeof(obj){return(src_firebolt_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function src_firebolt_defineProperties(target,props){for(var i=0;i1&&void 0!==arguments[1]?arguments[1]:{},points=[],parsedIdentifiers=identifiers;if(null===identifiers)return[];var layers=this.layers(),len=layers.length;isSimpleObject(identifiers)&&(parsedIdentifiers=[Object.keys(identifiers)],parsedIdentifiers=[].concat(visual_unit_toConsumableArray(parsedIdentifiers),visual_unit_toConsumableArray(function transposeArray(arr){return arr[0].map(function(col,i){return arr.map(function(row){return row[i]})})}(Object.values(identifiers)))));for(var i=0;i1&&void 0!==arguments[1]?arguments[1]:[]].map(function(fields){return fields.reduce(function(acc,d){return acc=[].concat(matrix_model_toConsumableArray(acc),matrix_model_toConsumableArray(d.getMembers()))},[])})},createSelectedDataModel=function createSelectedDataModel(datamodel,fieldNames,fieldValues){return datamodel.select(function(fields){return fieldNames.every(function(field,k){return fields[field].value===fieldValues[k]})})},matrix_model_uniqueKeyGenerator=function uniqueKeyGenerator(keyArray,context){var depth=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0,val=arguments.length>3&&void 0!==arguments[3]?arguments[3]:[],facets=context.facets,dataModel=context.dataModel,uniqueValues=context.uniqueValues;if(facets[depth+1]){var field=facets[depth];uniqueValues.forEach(function(value){var newDm=dataModel.select(function(fields){return fields[field].value===value}),nextDepthUniqueValues=retriveDomainFromData(newDm,facets[depth+1]);uniqueKeyGenerator(keyArray,{facets:facets,dataModel:newDm,uniqueValues:nextDepthUniqueValues},depth+1,[].concat(matrix_model_toConsumableArray(val),[value]))})}else uniqueValues.forEach(function(value){keyArray.push([].concat(matrix_model_toConsumableArray(val),[value]))})},projectRows=function projectRows(datamodel,projections){var allColumnProjections=projections.allColumnProjections,rowProjections=projections.rowProjections,optionalProjections=projections.optionalProjections;return rowProjections.length>0?rowProjections.map(function(projectFields){var _getFieldNames2=matrix_model_slicedToArray(getFieldNames(projectFields,allColumnProjections),2),projFieldNames=_getFieldNames2[0],colProjFieldNames=_getFieldNames2[1];return datamodel.project([].concat(matrix_model_toConsumableArray(projFieldNames),matrix_model_toConsumableArray(colProjFieldNames),matrix_model_toConsumableArray(optionalProjections)))}):[datamodel]},pushToMatrix=function pushToMatrix(context,valueCellCreator){var _matrix$rowIndex,cells=[],matrix=context.matrix,datamodel=context.datamodel,facetInfo=context.facetInfo,fieldInfo=context.fieldInfo,rowProjections=fieldInfo.rowProjections,colProjections=fieldInfo.colProjections,optionalProjections=fieldInfo.optionalProjections,rowIndex=facetInfo.rowIndex,columnIndex=facetInfo.columnIndex,rowProj=rowProjections[rowIndex%rowProjections.length]||[];colProjections.length>0?cells=colProjections.map(function(projectFields,projIdx){var _getFieldNames4=matrix_model_slicedToArray(getFieldNames(projectFields,rowProj),2),colProjFieldNames=_getFieldNames4[0],rowProjFieldNames=_getFieldNames4[1],projectedDm=datamodel.project([].concat(matrix_model_toConsumableArray(colProjFieldNames),matrix_model_toConsumableArray(rowProjFieldNames),matrix_model_toConsumableArray(optionalProjections))),projections={rowFields:rowProj,columnFields:projectFields},indices={rowIndex:rowIndex,columnIndex:columnIndex*colProjections.length+projIdx};return valueCellCreator(projectedDm,{projections:projections,indices:indices},facetInfo)}):cells=[valueCellCreator(datamodel,{projections:{rowFields:rowProj,columnFields:[]},indices:{rowIndex:rowIndex,columnIndex:columnIndex}},facetInfo)];matrix[rowIndex]=matrix[rowIndex]||[],(_matrix$rowIndex=matrix[rowIndex]).push.apply(_matrix$rowIndex,matrix_model_toConsumableArray(cells))},formatKeys=function formatKeys(keys,formatterList){keys.forEach(function(rKeys){rKeys.forEach(function(key,idx){rKeys[idx]=formatterList[idx](key)})})};function cell_creator_slicedToArray(arr,i){return function cell_creator_arrayWithHoles(arr){if(Array.isArray(arr))return arr}(arr)||function cell_creator_iterableToArrayLimit(arr,i){var _arr=[],_n=!0,_d=!1,_e=void 0;try{for(var _s,_i=arr[Symbol.iterator]();!(_n=(_s=_i.next()).done)&&(_arr.push(_s.value),!i||_arr.length!==i);_n=!0);}catch(err){_d=!0,_e=err}finally{try{_n||null==_i.return||_i.return()}finally{if(_d)throw _e}}return _arr}(arr,i)||function cell_creator_nonIterableRest(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}()}function cell_creator_toConsumableArray(arr){return function cell_creator_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);i0?rowProjections.length:1):(keys=columnKeys,length=colProjections.length>0?colProjections.length:1),keys=keys.map(function(arr){return arr.map(function(val){return resolver.valueParser()(val)})}),section.length&&headerFrom===type&&axis&&keys.length){var hContext={axis:axis,length:length,type:type},headers=[];index<2?(hContext.keys=keys,hContext.facet=facet.rows,headers=cell_creator_headerPlaceholderGn(hContext,selectionObj,cells,labelManager)):(hContext.facet=facet.columns,hContext.keys=keys[0].map(function(key,i){return keys.map(function(e){return e[i]})}),headers=cell_creator_headerPlaceholderGn(hContext,selectionObj,cells,labelManager)),selectionObj["".concat(type,"Headers")]=headers}else selectionObj["".concat(type,"Headers")]=null}),selectionObj},cell_creator_getAxisFields=function getAxisFields(projections){var fieldHolder=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];return projections.reduce(function(acc,item){return[].concat(cell_creator_toConsumableArray(acc),cell_creator_toConsumableArray(item.reduce(function(ac,field){return field instanceof simple_var_SimpleVariable?[].concat(cell_creator_toConsumableArray(ac),[field.oneVar()]):ac},[])))},fieldHolder)},cell_creator_computeMatrices=function computeMatrices(context,config){var resolver=context.resolver,datamodel=context.datamodel,componentRegistry=context.componentRegistry,encoders=context.encoders,globalConfig=config.globalConfig,selection=config.selection,transform=config.transform,groupBy=globalConfig.autoGroupBy,labelManager=resolver.dependencies().smartlabel,fieldMap=datamodel.getFieldsConfig(),layerConfig=resolver.layerConfig(),registry=resolver.registry(),normalizedRows=resolver.horizontalAxis().fields,normalizedColumns=resolver.verticalAxis().fields,otherEncodings=resolver.optionalProjections(config,layerConfig),facetsAndProjections=resolver.getAllFields(),matrixGnContext={normalizedColumns:normalizedColumns,normalizedRows:normalizedRows,facetsAndProjections:facetsAndProjections,layers:layerConfig,fieldMap:fieldMap,otherEncodings:otherEncodings,encoders:encoders,facet:globalConfig.facet||{},axisFrom:globalConfig.axisFrom||{},selection:selection,resolver:resolver},cells={GeomCell:resolver.getCellDef(registry.GeomCell),AxisCell:resolver.getCellDef(registry.AxisCell),BlankCell:resolver.getCellDef(registry.BlankCell),TextCell:resolver.getCellDef(registry.TextCell)},isRowSizeEqual=group_utils_isDistributionEqual(normalizedRows),isColumnSizeEqual=group_utils_isDistributionEqual(normalizedColumns);resolver.colCells({}),resolver.rowCells({}),resolver.datamodelTransform(transform||{}),resolver.resetSimpleAxes();var newCacheMap={exitCellMap:resolver.cacheMaps().entryCellMap,entryCellMap:new Map};resolver.cacheMaps(newCacheMap);var valueCellContext={config:globalConfig,suppliedLayers:encoders.simpleEncoder.serializeLayerConfig(resolver.layerConfig()),resolver:resolver,cell:cells.GeomCell,encoder:encoders.simpleEncoder,newCacheMap:newCacheMap,detailFields:config.detail,retinalConfig:{color:config.color,size:config.size,shape:config.shape}},fieldsConfig=datamodel.getFieldsConfig(),groupedModel=datamodel;if(!groupBy.disabled){var allFields=function extractFields(facetsAndProjections,layerFields){var _ref6,fields=Object.values(facetsAndProjections).map(function(arr){var _ref4,_ref5,flattenArray=(_ref4=[]).concat.apply(_ref4,group_utils_toConsumableArray(arr));return(_ref5=[]).concat.apply(_ref5,group_utils_toConsumableArray(flattenArray.map(function(field){return field instanceof variable_Variable?field.getMembers():field})))});return(_ref6=[]).concat.apply(_ref6,group_utils_toConsumableArray(fields).concat(group_utils_toConsumableArray(layerFields)))}(facetsAndProjections,function getFieldsFromSuppliedLayers(suppliedLayerConfig,fieldsConfig){var _ref3,fields=[],encodingArr=suppliedLayerConfig.map(function(conf){return conf.encoding||{}});return fields=(fields=[].concat(group_utils_toConsumableArray(fields),[(_ref3=[]).concat.apply(_ref3,group_utils_toConsumableArray(encodingArr.map(function(enc){return Object.values(enc).map(function(d){return d.field})})))])).filter(function(field){return fieldsConfig[field]&&fieldsConfig[field].def.type===dist_datamodel.FieldType.DIMENSION})}(valueCellContext.suppliedLayers,datamodel.getFieldsConfig())),dimensions=allFields.filter(function(field){return fieldsConfig[field]&&fieldsConfig[field].def.type===dist_datamodel.FieldType.DIMENSION}),aggregationFns=groupBy.measures,measureNames=Object.keys(datamodel.getFieldspace().getMeasure()),nearestAggFns=common_utils_retrieveNearestGroupByReducers.apply(void 0,[datamodel].concat(cell_creator_toConsumableArray(measureNames))),resolvedAggFns=mergeRecursive(nearestAggFns,aggregationFns);groupedModel=datamodel.groupBy(dimensions.length?dimensions:[""],resolvedAggFns).project(allFields)}var valueMatrixInfo=function getMatrixModel(dataModel,facetsAndProjections,valueCellCreator,globalConfig){var rowDataModels=[],rowKeys=[],columnKeys=[],allColumnProjections=[],matrix=[],facetInfo=[],fieldInfo=Object.assign({},facetsAndProjections),rowFacets=fieldInfo.rowFacets,colFacets=fieldInfo.colFacets;if(fieldInfo.colProjections.forEach(function(colProj){allColumnProjections.push.apply(allColumnProjections,matrix_model_toConsumableArray(colProj))}),fieldInfo.allColumnProjections=allColumnProjections,rowFacets.length>0){var field=rowFacets[0].toString(),firstLevelRowKeys=retriveDomainFromData(dataModel,field);group_utils_sortFacetFields(rowFacets[0],firstLevelRowKeys,globalConfig),matrix_model_uniqueKeyGenerator(rowKeys,{facets:rowFacets,dataModel:dataModel,uniqueValues:firstLevelRowKeys}),rowKeys.forEach(function(val){var _rowDataModels,rowFacetFieldNames=matrix_model_slicedToArray(getFieldNames(rowFacets),1)[0],selectedDataModel=createSelectedDataModel(dataModel,rowFacetFieldNames,val),newProjectedDataModels=projectRows(selectedDataModel,fieldInfo);(_rowDataModels=rowDataModels).push.apply(_rowDataModels,matrix_model_toConsumableArray(newProjectedDataModels)),newProjectedDataModels.forEach(function(){facetInfo.push([rowFacets,val])})})}else{var _rowDataModels2;(_rowDataModels2=rowDataModels).push.apply(_rowDataModels2,matrix_model_toConsumableArray(projectRows(dataModel,fieldInfo)))}if(rowDataModels=rowDataModels.length>0?rowDataModels:[[]],colFacets.length>0){var colFacetNames=colFacets.map(function(d){return"".concat(d)}),_field=colFacetNames[0],firstLevelColumnKeys=retriveDomainFromData(dataModel,_field);group_utils_sortFacetFields(colFacets[0],firstLevelColumnKeys,globalConfig),matrix_model_uniqueKeyGenerator(columnKeys,{facets:colFacetNames,dataModel:dataModel,uniqueValues:firstLevelColumnKeys}),rowDataModels.forEach(function(dme,rIndex){facetInfo[rIndex]=facetInfo[rIndex]||[[],[]],columnKeys.forEach(function(val,cIndex){matrix[rIndex]=matrix[rIndex]||[];var datamodel=dme instanceof datamodel_default.a?dme:dataModel,selectedDataModel=createSelectedDataModel(datamodel,colFacetNames,val),context={matrix:matrix,datamodel:selectedDataModel,facetInfo:{rowFacets:facetInfo[rIndex],colFacets:[colFacets,val],rowIndex:rIndex,columnIndex:cIndex},fieldInfo:fieldInfo};pushToMatrix(context,valueCellCreator)})})}else rowDataModels.forEach(function(dme,rIndex){facetInfo[rIndex]=facetInfo[rIndex]||[[],[]];var context={matrix:matrix,datamodel:dme||dataModel,facetInfo:{rowFacets:facetInfo[rIndex],colFacets:[[],[]],rowIndex:rIndex,columnIndex:0},fieldInfo:fieldInfo};pushToMatrix(context,valueCellCreator)});formatKeys(columnKeys,colFacets.map(function(facetField){return facetField.rawFormat()})),formatKeys(rowKeys,rowFacets.map(function(facetField){return facetField.rawFormat()}));var transposedColKeys=columnKeys.length>0?columnKeys[0].map(function(col,i){return columnKeys.map(function(row){return row[i]})}):columnKeys;return{matrix:matrix,rowKeys:rowKeys,columnKeys:transposedColKeys}}(groupedModel=function sortDmTemporalFields(resolver,datamodel){var axisFields=[],projections=resolver.projections();axisFields=cell_creator_getAxisFields(projections.rowProjections,cell_creator_getAxisFields(projections.colProjections));var fieldConfig=datamodel.getFieldsConfig(),temporalFields=axisFields.reduce(function(acc,field){return"temporal"===fieldConfig[field].def.subtype?[].concat(cell_creator_toConsumableArray(acc),[[field]]):acc},[]);return temporalFields.length?datamodel.sort(temporalFields,{saveChild:!0}):datamodel}(resolver,groupedModel),facetsAndProjections,resolver.valueCellsCreator(valueCellContext),globalConfig);resolver.cacheMaps().exitCellMap.forEach(function(placeholder){placeholder.remove()}),resolver.cacheMaps().exitCellMap.clear(),resolver.valueMatrix(valueMatrixInfo.matrix);var _mutateAxesFromMap=function mutateAxesFromMap(cacheMaps,axes){var xAxes=null,yAxes=null,xAxesMap=cacheMaps.xAxesMap,yAxesMap=cacheMaps.yAxesMap,xAxisSet=axes.x,yAxisSet=axes.y;return xAxisSet&&xAxisSet.forEach(function(axisId){var xAxis=xAxesMap.get(axisId);(xAxes=xAxes||[]).push(xAxis)}),yAxisSet&&yAxisSet.forEach(function(axisId){var yAxis=yAxesMap.get(axisId);(yAxes=yAxes||[]).push(yAxis)}),{xAxes:xAxes,yAxes:yAxes}}(resolver.cacheMaps(),resolver.axes()),xAxes=_mutateAxesFromMap.xAxes,yAxes=_mutateAxesFromMap.yAxes;resolver.axes({x:xAxes,y:yAxes});var store=resolver.store();[xAxes,yAxes].forEach(function(axesArr,type){var stateProps={};(axesArr=axesArr||[]).forEach(function(axes,idx){axes.forEach(function(axis,axisIndex){stateProps["".concat(idx).concat(axisIndex)]=null})}),store.append("".concat(namespace_namespaceObject.GROUP_GLOBAL_NAMESPACE,".domain.").concat(type?"y":"x"),stateProps)}),resolver.createUnits(componentRegistry,config);var _generateMatrices=function generateMatrices(context,matrices,cells,labelManager){var unitHeight=context.unitHeight,unitWidth=context.unitWidth,facetsAndProjections=context.facetsAndProjections,normalizedRows=context.normalizedRows,normalizedColumns=context.normalizedColumns,selection=context.selection,axisFrom=context.axisFrom,facet=context.facet,encoders=context.encoders,resolver=context.resolver,selectionObj=cell_creator_generatePlaceholders({fields:{rows:normalizedRows,columns:normalizedColumns},matrices:matrices,facetsAndProjections:facetsAndProjections,selection:selection,axisFrom:axisFrom,facet:facet,encoders:encoders,resolver:resolver},cells,labelManager),columnsPrimary=selectionObj.columnsPrimary,columnsSecondary=selectionObj.columnsSecondary,rowsPrimary=selectionObj.rowsPrimary,rowsSecondary=selectionObj.rowsSecondary,leftHeaders=selectionObj.leftHeaders,topHeaders=selectionObj.topHeaders,bottomHeaders=selectionObj.bottomHeaders,rightHeaders=selectionObj.rightHeaders,_map2=cell_creator_slicedToArray([rowsPrimary,rowsSecondary,columnsPrimary,columnsSecondary].map(function(d){return d?d.getObjects():[]}),4),rowPrime=_map2[0],rowSec=_map2[1],colPrime=_map2[2],colSec=_map2[3],_map4=cell_creator_slicedToArray([leftHeaders,rightHeaders].map(function(e){return e?e.getObjects().map(function(f){return f.getObjects()}):[]}),2),leftFacets=_map4[0],rightFacets=_map4[1],rowPriority=rowSec.length?1:-1;rowPrime.length&&rowPriority++;var colPriority=colSec.length?1:-1;colPrime.length&&colPriority++;var leftMatrix=leftFacets.length?leftFacets.map(function(d,i){return rowPrime[i]=rowPrime[i]?[rowPrime[i]]:[],[].concat(cell_creator_toConsumableArray(d),cell_creator_toConsumableArray(rowPrime[i]))}):rowPrime?rowPrime.map(function(d){return[d]}):[],rightMatrix=rowSec.length?rowSec.map(function(d,i){return[d].concat(cell_creator_toConsumableArray(rightFacets[i]||[]))}):rightFacets.length?rightFacets.map(function(d){return cell_creator_toConsumableArray(d)}):[],topMatrix=[];topHeaders&&topHeaders.getObjects().forEach(function(e){e.getObjects().forEach(function(x,i){topMatrix[i]=topMatrix[i]||[],topMatrix[i].push(x)})});colPrime.length&&topMatrix.push(colPrime);var bottomMatrix=[];colSec.length&&bottomMatrix.push(colSec);var currentBottomLength=bottomMatrix.length;bottomHeaders&&bottomHeaders.getObjects().forEach(function(e){e.getObjects().forEach(function(x,i){bottomMatrix[i+currentBottomLength]=bottomMatrix[i+currentBottomLength]||[],bottomMatrix[i+currentBottomLength].push(x)})});if(!leftMatrix.length&&!rightMatrix.length){var cell=new cells.BlankCell;cell.setAvailableSpace(unitWidth,unitHeight),leftMatrix=[[cell]]}if(!(topMatrix.length||bottomMatrix.length&&bottomMatrix[0].length)){var _cell=new cells.BlankCell;_cell.setAvailableSpace(unitWidth,unitHeight),bottomMatrix=[[_cell]]}return{rows:[leftMatrix,rightMatrix],columns:[topMatrix,bottomMatrix],selectionObj:selectionObj,colPriority:colPriority,rowPriority:rowPriority}}(matrixGnContext,{valuesMatrix:valueMatrixInfo,axesMatrix:resolver.axes()},cells,labelManager),rows=_generateMatrices.rows,columns=_generateMatrices.columns,selectionObj=_generateMatrices.selectionObj,rowPriority=_generateMatrices.rowPriority,colPriority=_generateMatrices.colPriority;return resolver.rowMatrix(rows),resolver.columnMatrix(columns),{rows:resolver.rowMatrix(),columns:resolver.columnMatrix(),values:resolver.valueMatrix(),isColumnSizeEqual:isColumnSizeEqual,isRowSizeEqual:isRowSizeEqual,priority:{row:rowPriority,col:colPriority},selection:selectionObj,dataModels:{groupedModel:groupedModel,parentModel:datamodel}}},RESOLVER_PROPS={dependencies:{},units:{},datamodelTransform:{},layerConfig:{},matrixLayers:{},colCells:{},rowCells:{},rowMatrix:{},columnMatrix:{},valueMatrix:{},encoder:{},valueParser:{}};function matrix_resolver_slicedToArray(arr,i){return function matrix_resolver_arrayWithHoles(arr){if(Array.isArray(arr))return arr}(arr)||function matrix_resolver_iterableToArrayLimit(arr,i){var _arr=[],_n=!0,_d=!1,_e=void 0;try{for(var _s,_i=arr[Symbol.iterator]();!(_n=(_s=_i.next()).done)&&(_arr.push(_s.value),!i||_arr.length!==i);_n=!0);}catch(err){_d=!0,_e=err}finally{try{_n||null==_i.return||_i.return()}finally{if(_d)throw _e}}return _arr}(arr,i)||function matrix_resolver_nonIterableRest(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}()}function matrix_resolver_toConsumableArray(arr){return function matrix_resolver_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);i0?leftRows[0].map(blankCellCreator):[],right:rightRows.length>0?rightRows[0].map(blankCellCreator):[]},_map2=matrix_resolver_slicedToArray([constants_LEFT,constants_RIGHT].map(function(type){return topCols.map(function(col,i){return i===topCols.length-1?headers[type]:footers[type]})}),2),topLeft=_map2[0],topRight=_map2[1];if(0===topCols.length){var _map4=matrix_resolver_slicedToArray([constants_LEFT,constants_RIGHT].map(function(type){return bottomCols.map(function(col,i){return 0===i?headers[type]:footers[type]})}),2);bottomLeft=_map4[0],bottomRight=_map4[1]}else bottomLeft=bottomCols.map(function(){return leftRows.length>0?leftRows[0].map(blankCellCreator):[]}),bottomRight=bottomCols.map(function(){return rightRows.length>0?rightRows[0].map(blankCellCreator):[]});return lifeCycleManager.notify({client:[topLeft,topRight,bottomLeft,bottomRight],action:"initialized",formalName:"facet-headers"}),{topLeft:topLeft,topRight:topRight,bottomLeft:bottomLeft,bottomRight:bottomRight}}},{key:"getMatrices",value:function getMatrices(datamodel,config,componentRegistry,encoders){return cell_creator_computeMatrices({datamodel:datamodel,componentRegistry:componentRegistry,encoders:encoders,resolver:this},config)}},{key:"store",value:function store(){return arguments.length?(this._store=arguments.length<=0?void 0:arguments[0],this):this._store}}]),MatrixResolver}();function value_matrix_defineProperties(target,props){for(var i=0;i3&&void 0!==arguments[3]?arguments[3]:{},type=firebolt.context.constructor.type(),payload=config.payload,data=firebolt.context.data(),metaData=firebolt.context.metaData(),fieldType=metaData.getData().schema[0].type,propPayload={},sourceId=firebolt.context._id;propPayload.action=action_behaviour_map_propagationBehaviourMap[action]||action,propPayload.sideEffects=propagationSideEffects[action],propPayload.sourceCanvas=firebolt.context.canvasAlias();var isMutableAction=firebolt._actions.behavioural[propPayload.action].constructor.mutates();if(null===payload.criteria)propagationData=null;else{var entrySet=selectionSet.mergedEnter,values=data.filter(function(d){return-1!==entrySet.uids.indexOf(d.id)}).map(function(d){return d.rawVal});if("step"===type||"discrete"===type&&"measure"===fieldType){var field=Object.keys(payload.criteria||{})[0];propagationData=(values=data.filter(function(d){return-1!==entrySet.uids.indexOf(d.id)}).map(function(d){return d.range})).length?metaData.select(function(fields){for(var check=!1,i=0;i=values[i][0]&&fields[field].value<=values[i][1]);i++);return check},{saveChild:!1}):null}else"gradient"===type?propagationData=getDataModelFromRange(metaData,payload.criteria):values.length?propagationData=function assembleModelFromIdentifiers(model,identifiers){var data,schema=[],fieldMap=model.getFieldsConfig();return identifiers.length?function(){for(var fields=identifiers[0],len=fields.length,i=0;i=drawingInfMeasure+offset?[axisScale.invert(drawingInfMeasure+offset-selectionBoxMeasure),axisScale.invert(drawingInfMeasure+offset)]:subjectStartPoint-offset1&&void 0!==arguments[1]?arguments[1]:{},classPrefix=context.config().classPrefix;set.mergedEnter.length||set.mergedExit.length?(classed(set.mergedExit,config.className||"".concat(classPrefix,"-legend-brighten"),!1),classed(set.mergedExit,config.className||"".concat(classPrefix,"-legend-fadeout"),!0),classed(set.mergedEnter,config.className||"".concat(classPrefix,"-legend-fadeout"),!1)):classed(set.completeSet,config.className||"".concat(classPrefix,"-legend-fadeout"),!1)},brighten:function brighten(set){var config=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},classPrefix=context.config().classPrefix;set.mergedEnter.length||set.mergedExit.length?(classed(set.mergedEnter,config.className||"".concat(classPrefix,"-legend-brighten"),!0),classed(set.mergedExit,config.className||"".concat(classPrefix,"-legend-brighten"),!1)):classed(set.completeSet,config.className||"".concat(classPrefix,"-legend-brighten"),!1)}}};function legend_highlighter_typeof(obj){return(legend_highlighter_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function legend_highlighter_defineProperties(target,props){for(var i=0;i2&&void 0!==arguments[2]?arguments[2]:{};(0,this._strategies[options.strategy||this._strategy])(selectionSet,this)}}],[{key:"formalName",value:function formalName(){return"highlighter"}}]),LegendHighlighter}(),legend_props_PROPS={config:{sanitization:function sanitization(context,value){return mergeRecursive(context._config||{},value)}},data:{},fieldName:{},legendContainer:{},measurement:{sanitization:function sanitization(context,value){var measurement=mergeRecursive(context._measurement,value);return["padding","border","margin"].forEach(function(space){measurement[space]=Math.min(measurement[space]>0?measurement[space]:0,.1*measurement.maxWidth,.1*measurement.maxHeight)}),measurement}},logicalSpace:{},metaData:{},range:{sanitization:function sanitization(context,value){return context.scale().range(value),context.resetLogicalSpace(),context.store().commit("range",value),value}},scale:{},smartTicks:{},store:{},title:{sanitization:function sanitization(context,value){return mergeRecursive(context._title||{},value)}},labelManager:{},minTickDistance:{},valueParser:{defaultValue:function defaultValue(val){return val}}},ALIGN_HORIZONTAL="horizontal",ALIGN_VERTICAL="vertical",DEFAULT_MEASUREMENT={height:30,width:30,maxWidth:1/0,maxHeight:1/0,padding:2,margin:2,border:1},LEGEND_TITLE={text:"",orientation:function orientation(pos){return"left"===pos||"right"===pos?"left":"center"}},legend_defaults_DEFAULT_CONFIG={classPrefix:"muze",borderStyle:"solid",borderColor:"rgba(0,0,0,0)",formatter:{bounds:{lower:"less than",upper:"more than"}},item:{text:{orientation:"right",width:10,formatter:function formatter(val,i,data,context){return context.valueParser()(val)}},icon:{className:"legend-icon",height:20,width:20,color:"rgba(0,0,0,.5)",type:"square"}}},defaults_ICON_MAP=function ICON_MAP(icon){return icon&&"string"==typeof icon?common_utils_getSymbol(icon):icon};function legend_helper_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}var legend_helper_getScaleInfo=function getScaleInfo(scale){var scaleType=scale.constructor.type();return{scaleType:scaleType,domain:scale.uniqueValues(),steps:scale.config().stops||1,scaleFn:SCALE_FUNCTIONS[scaleType]}},legend_helper_getInterpolatedArrayData=function getInterpolatedArrayData(domainForLegend,scaleParams){var requiredWidth,requiredHeight,upperBound=domainForLegend[domainForLegend.length-1],minTickDiff=Math.ceil(domainForLegend[1]-domainForLegend[0]),maxTickDiff=Math.ceil(upperBound-domainForLegend[0]),alignment=scaleParams.alignment,smartLabelCalc=scaleParams.smartLabel,availableSpace=scaleParams.measures,minimumTickSize=scaleParams.minTickDistance,_smartLabelCalc$getOr=smartLabelCalc.getOriSize(upperBound),tickDimHeight=_smartLabelCalc$getOr.height,tickDimWidth=_smartLabelCalc$getOr.width;return Number.isInteger(upperBound)||(upperBound=upperBound.toFixed(2)),minTickDiff=minTickDiff<1?1:minTickDiff,requiredWidth=Math.abs(maxTickDiff)/Math.abs(minTickDiff)*(tickDimWidth+minimumTickSize.width),requiredWidth-=Math.abs(maxTickDiff),requiredHeight=Math.abs(maxTickDiff)/Math.abs(minTickDiff)*tickDimHeight,requiredHeight-=Math.abs(maxTickDiff),domainForLegend=function getcomputedArray(computationhelper,requiredMeasure,availableMeasure,domainForLegend){var currentTickValue,nextTickValue,upperBound=domainForLegend[domainForLegend.length-1],param=computationhelper.measureParam,smartLabelCalc=computationhelper.smartLabelCalc,pixelPerTick=availableMeasure[param]/upperBound;if(availableMeasure[param]>=requiredMeasure[param])return domainForLegend;currentTickValue=smartLabelCalc.getOriSize(domainForLegend[0])[param];for(var i=1;i0?titleSpace.height+effPadding:0,titleWidth=titleSpace.width+effPadding,labelSpaces=this.getLabelSpaces(effPadding,align),_computeItemSpaces=function computeItemSpaces(config,measures,data){var totalHeight=0,totalWidth=0,maxItemSpaces={width:0,height:0},effPadding=measures.effPadding,titleWidth=measures.titleWidth,labelSpaces=measures.labelSpaces,titleHeight=measures.titleHeight,maxWidth=measures.maxWidth,item=config.item,align=config.align,icon=item.icon,textOrientation=item.text.orientation,itemSpaces=[],iconSpaces=[],maxIconWidth=0;return labelSpaces.forEach(function(labelSpace,i){var itemSpace={width:0,height:0},iconSpace={width:0,height:0},datum=data[i]||{};"left"===textOrientation||"right"===textOrientation?(labelSpace.width+=effPadding,iconSpace.width=(datum.size?2*Math.sqrt(datum.size/Math.PI):icon.width)+effPadding,maxIconWidth=Math.max(iconSpace.width,maxIconWidth),itemSpace.width=labelSpace.width+maxIconWidth,labelSpace.height=Math.max(labelSpace.height,icon.height)+effPadding,iconSpace.height=labelSpace.height,itemSpace.height=labelSpace.height):(labelSpace.width=Math.max(labelSpace.width,datum.size?2*Math.sqrt(datum.size/Math.PI):icon.width)+effPadding,iconSpace.width=labelSpace.width,itemSpace.width=labelSpace.width,maxIconWidth=Math.max(iconSpace.width,maxIconWidth),labelSpace.height+=effPadding,iconSpace.height=icon.height+effPadding,itemSpace.height=labelSpace.height+iconSpace.height),"horizontal"===align?totalHeight=Math.max(totalHeight,itemSpace.height):(totalHeight+=itemSpace.height,totalWidth=Math.max(totalWidth,itemSpace.width,titleWidth)),maxItemSpaces={width:Math.max(itemSpace.width,maxItemSpaces.width),height:Math.max(itemSpace.height,maxItemSpaces.height)},itemSpaces.push(itemSpace),iconSpaces.push(iconSpace)}),itemSpaces.forEach(function(itemSpace,i){if("horizontal"===align)itemSpace.height=totalHeight,iconSpaces[i].width=maxIconWidth,"left"===textOrientation||"right"===textOrientation?(labelSpaces[i].height=totalHeight,iconSpaces[i].height=totalHeight,itemSpaces[i].width=labelSpaces[i].width+maxIconWidth):(labelSpaces[i].width=maxIconWidth,itemSpaces[i].width=maxIconWidth,labelSpaces[i].width=maxIconWidth),totalWidth=Math.max(totalWidth+itemSpaces[i].width);else if(itemSpace.width=Math.max(totalWidth,maxWidth),"top"===textOrientation||"bottom"===textOrientation)labelSpaces[i].width=totalWidth,iconSpaces[i].width=totalWidth,maxIconWidth=totalWidth;else{var labelWidth=labelSpaces[i].width,newLabelWidth=maxItemSpaces.width-maxIconWidth;iconSpaces[i].width=maxIconWidth,itemSpaces[i].width=labelSpaces[i].width+maxIconWidth,labelSpaces[i].width=Math.max(labelWidth,newLabelWidth),totalWidth=Math.max(totalWidth,itemSpace.width)}}),totalWidth=Math.ceil(Math.max(totalWidth,titleWidth))+effPadding,totalHeight+=titleHeight+effPadding,{totalHeight:totalHeight=Math.ceil(totalHeight),totalWidth:totalWidth,itemSpaces:itemSpaces,iconSpaces:iconSpaces,maxItemSpaces:maxItemSpaces,maxIconWidth:maxIconWidth}}(this.config(),{effPadding:effPadding,titleWidth:titleWidth,labelSpaces:labelSpaces,titleHeight:titleHeight,maxWidth:maxWidth,maxHeight:maxHeight},this.data()),totalHeight=_computeItemSpaces.totalHeight,totalWidth=_computeItemSpaces.totalWidth,itemSpaces=_computeItemSpaces.itemSpaces,iconSpaces=_computeItemSpaces.iconSpaces,maxItemSpaces=_computeItemSpaces.maxItemSpaces,maxIconWidth=_computeItemSpaces.maxIconWidth;return this.measurement({width:Math.max(totalWidth,width)+effMargin+effBorder,height:Math.max(totalHeight,height)+effMargin+effBorder,labelSpaces:labelSpaces,iconSpaces:iconSpaces,itemSpaces:itemSpaces,maxItemSpaces:maxItemSpaces,maxIconWidth:maxIconWidth,titleSpaces:{width:Math.min(maxWidth,this.measurement().width)-effMargin-effBorder,height:titleHeight}}),this}},{key:"getTitleSpace",value:function getTitleSpace(){return this._labelManager.setStyle(renderer_utils_getSmartComputedStyle(renderer_utils_selectElement("body"),"".concat(this.config().classPrefix,"-legend-title"))),this._labelManager.getOriSize(this.title().text?this.title().text:"")}},{key:"renderTitle",value:function renderTitle(container){var _this$measurement2=this.measurement(),titleSpaces=_this$measurement2.titleSpaces,border=_this$measurement2.border,padding=_this$measurement2.padding,width=_this$measurement2.width,maxWidth=_this$measurement2.maxWidth,_this$config3=this.config(),borderStyle=_this$config3.borderStyle,borderColor=_this$config3.borderColor;return function titleCreator(container,title,measurement,config){var titleWidth=Math.min(measurement.maxWidth,measurement.width),titleContainer=makeElement(container,"table",[1],"".concat(config.classPrefix,"-legend-title")).style("width","".concat(titleWidth,"px")).style("height","".concat(measurement.height,"px")).style("border-bottom","".concat(measurement.border,"px ").concat(config.borderStyle," ").concat(config.borderColor)).style("text-align",title.orientation instanceof Function?title.orientation(config.position):title.orientation);return makeElement(titleContainer,"td",[1],"".concat(config.classPrefix,"-legend-title-text")).style("width","".concat(titleWidth,"px")).style("max-width","".concat(titleWidth,"px")).style("height","100%").style("line-height",1).style("padding","".concat(measurement.padding,"px")).text(title.text).style("overflow-x","scroll").node()}(container,this.title(),{height:titleSpaces.height,width:width,maxWidth:maxWidth,border:border,padding:padding,borderStyle:borderStyle,borderColor:borderColor},this.config())}},{key:"render",value:function render(){var marginPosition,firebolt=this.firebolt(),_this$config4=this.config(),classPrefix=_this$config4.classPrefix,borderStyle=_this$config4.borderStyle,borderColor=_this$config4.borderColor,position=_this$config4.position,_this$measurement3=this.measurement(),maxWidth=_this$measurement3.maxWidth,maxHeight=_this$measurement3.maxHeight,width=_this$measurement3.width,height=_this$measurement3.height,margin=_this$measurement3.margin,border=_this$measurement3.border,legendContainer=makeElement(renderer_utils_selectElement(this.mount()),"div",[1],"".concat(classPrefix,"-legend-box"));switch(position){case"top":marginPosition="margin-".concat("bottom");break;case"left":marginPosition="margin-".concat("right");break;case"bottom":marginPosition="margin-".concat("top");break;default:marginPosition="margin-".concat("left")}return legendContainer.classed("".concat(classPrefix,"-legend-box-").concat(this._id),!0),legendContainer.style("float","left"),legendContainer.style("width","".concat(Math.min(maxWidth,width)-2*margin,"px")).style("height","".concat(Math.min(maxHeight,height)-2*margin,"px")).style("".concat(marginPosition),"".concat(margin,"px")).style("border","".concat(border,"px ").concat(borderStyle," ").concat(borderColor)),this.legendContainer(legendContainer.node()),this.renderTitle(legendContainer),firebolt.createSelectionSet(this.data().map(function(d){return d.id})),legendContainer}},{key:"getCriteriaFromData",value:function getCriteriaFromData(data){var fieldName=this.fieldName();return"measure"===this.metaData().getData().schema[0].type?function simple_legend_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}({},fieldName,data.range):[[fieldName],[data.rawVal]]}}],[{key:"create",value:function create(dependencies){return new SimpleLegend(dependencies)}},{key:"defaultConfig",value:function defaultConfig(){return legend_defaults_DEFAULT_CONFIG}},{key:"defaultMeasurement",value:function defaultMeasurement(){return DEFAULT_MEASUREMENT}}]),SimpleLegend}();function position_config_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}var legendOrientation=(position_config_defineProperty(_legendOrientation={},"horizontal",{datasets:function datasets(data){return{row:[1],column:data}},itemContainerMeasures:function itemContainerMeasures(measurement){var itemSpaces=measurement.itemSpaces,width=measurement.width;return{row:{width:"".concat(width,"px"),padding:"".concat(0,"px")},column:{width:function width(d,i){return"".concat(itemSpaces[i].width,"px")},padding:"".concat(0,"px")}}},getStepSpacesInfo:function getStepSpacesInfo(measurement){var maxItemSpaces=measurement.maxItemSpaces;return{iconHeight:measurement.height,iconWidth:maxItemSpaces.width,stepPadding:{horizontal:!0,vertical:!1}}}}),position_config_defineProperty(_legendOrientation,"vertical",{datasets:function datasets(data){return{row:data,column:function column(d){return[d]}}},itemContainerMeasures:function itemContainerMeasures(measurement,config){var width=measurement.width,padding=config.padding;return{row:{width:"".concat(width,"px"),padding:"".concat(padding,"px")},column:{width:"".concat(width,"px"),padding:"".concat(0,"px")}}},getStepSpacesInfo:function getStepSpacesInfo(measurement){var maxItemSpaces=measurement.maxItemSpaces,width=measurement.width;return{iconHeight:maxItemSpaces.height,iconWidth:width,stepPadding:{horizontal:!1,vertical:!0}}}}),_legendOrientation),positionConfig=(position_config_defineProperty(_positionConfig={},"left",legendOrientation.vertical),position_config_defineProperty(_positionConfig,"right",legendOrientation.vertical),position_config_defineProperty(_positionConfig,"top",legendOrientation.horizontal),position_config_defineProperty(_positionConfig,"bottom",legendOrientation.horizontal),_positionConfig),alignmentMap=(position_config_defineProperty(_alignmentMap={},"left","end"),position_config_defineProperty(_alignmentMap,"right","start"),position_config_defineProperty(_alignmentMap,"top","center"),position_config_defineProperty(_alignmentMap,"bottom","center"),_alignmentMap),itemStack=(position_config_defineProperty(_itemStack={},"left",[VALUE,"shape"]),position_config_defineProperty(_itemStack,"right",["shape",VALUE]),position_config_defineProperty(_itemStack,"top",[VALUE,"shape"]),position_config_defineProperty(_itemStack,"bottom",["shape",VALUE]),_itemStack),renderer_createLegendSkeleton=function createLegendSkeleton(context,container,classPrefix,data){var gradWidth,gradHeight,maxGradHeight,maxGradWidth,measurement=context.measurement(),margin=measurement.margin,border=measurement.border,titleSpaces=measurement.titleSpaces,width=measurement.width,height=measurement.height,maxWidth=measurement.maxWidth,maxHeight=measurement.maxHeight;gradHeight=height-(titleSpaces.height+2*margin+2*border),gradWidth=width-(2*margin+2*border),maxGradHeight=maxHeight-(titleSpaces.height+2*margin+2*border),maxGradWidth=maxWidth-(2*margin+2*border);var legendBody=makeElement(container,"div",[1],"".concat(classPrefix,"-legend-body"));return legendBody.select(".".concat(classPrefix,"-legend-overflow")).remove(),maxGradWidth&&maxGradWidth4)}(shape)?shape:defaults_ICON_MAP(shape).size(size)(),makeElement(groupElement,"path",function(data){return[data]}).attr("d",pathStr)}return d[1]="circle",createShape(d,elem,"circle")}(datum,makeElement(svg,"g",[datum[1]],"".concat(classPrefix,"-legend-icon")),datum[3]?"circle":"square",iconWidth,iconHeight).attr("transform","translate(".concat(maxIconWidth/2-padding," ").concat(iconHeight/2,")")).attr("fill",datum[2]||color):makeElement(svg,"rect",[datum[1]],"".concat(classPrefix,"-legend-icon")).attr("x",0).attr("y",0).attr("width",maxIconWidth).attr("height",iconHeight).attr("fill",datum[2]||color)};function discrete_legend_typeof(obj){return(discrete_legend_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function discrete_legend_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}function discrete_legend_toConsumableArray(arr){return function discrete_legend_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);isteps[steps.length-1]&&domainForLegend.push(domain[1]),domainForLegend=gradient_legend_toConsumableArray(new Set(domainForLegend)).sort(function(a,b){return a-b}),domainForLegend=legend_helper_getInterpolatedArrayData(domainForLegend,scaleParams)):domainForLegend=legend_helper_getInterpolatedData(domain,steps-1,scaleParams),(domainForLegend=gradient_legend_toConsumableArray(new Set(domainForLegend)).sort(function(a,b){return a-b})).map(function(ele,i){var _ref,value=domainForLegend[i];return gradient_legend_defineProperty(_ref={},scaleType,"size"===scaleType?scale[scaleFn](ele)*scale.getScaleFactor():scale[scaleFn](Math.floor(ele))),gradient_legend_defineProperty(_ref,"value",+value.toFixed(2)),gradient_legend_defineProperty(_ref,"id",i),_ref}).filter(function(d){return null!==d.value})}},{key:"getLabelSpaces",value:function getLabelSpaces(effPadding){this.config({item:{text:{orientation:this.config().position}}});var axis=function createAxis(context){var data=context.data(),align=context.config().align,AxisCell=context._cells.AxisCell,newAxis=new continous_axis_ContinousAxis({id:"legend-".concat(context._id),orientation:align===ALIGN_VERTICAL?"right":"bottom",style:context._computedStyle,nice:!1,showAxisName:!1,tickValues:data.map(function(d){return d.value}),fixedBaseline:!1,labels:{rotation:null}},{labelManager:context._labelManager});return newAxis.domain(getGradientDomain(data)),newAxis.range([1,1]),(new AxisCell).source(newAxis).config({margin:{left:0,bottom:0,top:0,right:0}})}(this),axisSpace=axis.getLogicalSpace(),space={width:axisSpace.width-effPadding,height:axisSpace.height-effPadding},axisDomainLength=axis.source().domain().length,labelSpaces=new Array(axisDomainLength).fill(space);return this.axis(axis),labelSpaces}},{key:"getDrawingContext",value:function getDrawingContext(){return{svgContainer:this._legendGradientSvg}}},{key:"render",value:function render(){var firebolt=this.firebolt(),legendContainer=gradient_legend_get(gradient_legend_getPrototypeOf(GradientLegend.prototype),"render",this).call(this,this.mount());return function renderGradient(context,container){var gradHeight,gradWidth,_context$config2=context.config(),align=_context$config2.align,classPrefix=_context$config2.classPrefix,item=_context$config2.item,data=context.data(),_createLegendSkeleton=gradient_helper_createLegendSkeleton(container,classPrefix,data),legendContainer=_createLegendSkeleton.legendContainer,legendGradSvg=_createLegendSkeleton.legendGradSvg,legendGradCont=_createLegendSkeleton.legendGradCont,linearGradient=_createLegendSkeleton.linearGradient,legendRect=_createLegendSkeleton.legendRect,labelDim=context.axis().source().getAxisDimensions().tickDimensions,_context$measurement=context.measurement(),padding=_context$measurement.padding,margin=_context$measurement.margin,border=_context$measurement.border,titleSpaces=_context$measurement.titleSpaces,maxItemSpaces=_context$measurement.maxItemSpaces,maxHeight=_context$measurement.maxHeight,maxWidth=_context$measurement.maxWidth,height=_context$measurement.height,width=_context$measurement.width,gradientDimensions={};gradHeight=Math.floor(Math.min(height,maxHeight)-(titleSpaces.height+2*margin+2*border)),gradWidth=Math.floor(Math.min(width,maxWidth)-(2*margin+2*border)),align===ALIGN_HORIZONTAL?(gradientDimensions.height=item.icon.height,gradientDimensions.width=gradWidth-2*padding-labelDim.width/2,linearGradient.attr("x2","100%").attr("y1","0%"),legendGradCont.attr("transform","translate( ".concat(labelDim.width/2," 0)")),gradient_helper_renderAxis(context,legendContainer,gradHeight-item.icon.height-padding,gradWidth-2*padding-1),applyStyle(legendContainer,{height:"".concat(maxItemSpaces.height+border+padding,"px"),width:"".concat(Math.min(width,maxWidth),"px"),padding:"".concat(padding,"px")}),legendRect.attr("height",gradientDimensions.height),legendRect.attr("width",gradientDimensions.width-labelDim.width/2)):(gradientDimensions.height=gradHeight-2*padding-labelDim.height/2,gradientDimensions.width=item.icon.width,linearGradient.attr("x2","0%").attr("y1","100%"),legendGradCont.attr("transform","translate(0 ".concat(labelDim.height/2,")")),gradient_helper_renderAxis(context,legendContainer,gradHeight-2*padding-1,gradWidth-item.icon.width-2*padding),applyStyle(legendContainer,{height:"".concat(Math.min(height,maxHeight),"px"),width:"".concat(maxWidth,"px"),padding:"".concat(padding,"px")}),legendRect.attr("height",gradientDimensions.height-labelDim.height/2),legendRect.attr("width",gradientDimensions.width)),applyStyle(legendGradSvg,{height:"".concat(gradientDimensions.height,"px"),width:"".concat(gradientDimensions.width,"px")}),applyStyle(legendRect,{fill:"url(#linear-gradient)"}),legendGradSvg.attr("height",gradientDimensions.height),legendGradSvg.attr("width",gradientDimensions.width),context.measurement({gradientDimensions:gradientDimensions}),context._legendGradientSvg=legendGradSvg}(this,legendContainer),legendContainer.selectAll("div").style("float","left"),firebolt.mapActionsAndBehaviour(),firebolt.createSelectionSet(this.data().map(function(d){return d.id})),legendContainer}},{key:"getCriteriaFromData",value:function getCriteriaFromData(data){return[[this.fieldName()],[data.value]]}}],[{key:"create",value:function create(dependencies){return new GradientLegend(dependencies)}},{key:"type",value:function type(){return"gradient"}}]),GradientLegend}();function step_legend_typeof(obj){return(step_legend_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function step_legend_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}function step_legend_toConsumableArray(arr){return function step_legend_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);isteps[steps.length-1]&&(domainBounds.upper=["".concat(formatter.bounds.upper," ").concat(steps[steps.length-1])])):domainLeg=legend_helper_getInterpolatedData(domain,steps,scaleParams),domainLeg=(domainLeg=step_legend_toConsumableArray(new Set(domainLeg)).sort(function(a,b){return a-b})).map(function(ele,i){var _ref,value=null;return i0&&void 0!==arguments[0]?arguments[0]:{},registrableComponents=this._registrableComponents,mergedPolicy=mergeRecursive(mergeRecursive({},function defaultPolicy(registrableComponents){var aliases=registrableComponents.map(function(comp){return comp.alias()});return{behaviours:{"*":function _(propagationPayload){var propagationCanvas=propagationPayload.sourceCanvas;return!propagationCanvas||-1!==aliases.indexOf(propagationCanvas)}}}}(registrableComponents)),policy);return registrableComponents.forEach(function(canvas){canvas.firebolt().crossInteractionPolicy(mergedPolicy)}),this}}]),ActionModel}()),TITLE_CONFIG={position:"top",align:"left",padding:4,className:"".concat("muze","-title-container")},SUB_TITLE_CONFIG={position:"top",align:"left",padding:16,maxLines:2,className:"".concat("muze","-subtitle-container")},LAYOUT_ALIGN_LEFT="left";function canvas_local_options_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}var localOptions=(canvas_local_options_defineProperty(_localOptions={},"rows",{value:null,meta:{typeCheck:"constructor",typeExpected:"Array"}}),canvas_local_options_defineProperty(_localOptions,"columns",{value:null,meta:{typeCheck:"constructor",typeExpected:"Array"}}),canvas_local_options_defineProperty(_localOptions,"data",{value:null,meta:{typeCheck:function typeCheck(d){return d instanceof datamodel_default.a},sanitization:function sanitization(dm,prevDm){prevDm&&prevDm.dispose();var sanitizedDm=dm;return dm instanceof datamodel_default.a&&(sanitizedDm=dm.project(dm.getSchema().map(function(d){return d.name}))),sanitizedDm}}}),canvas_local_options_defineProperty(_localOptions,"color",{value:null,meta:{typeCheck:"constructor",typeExpected:"Object",sanitization:function sanitization(config){return"string"!=typeof config&&config?config:{field:config}}}}),canvas_local_options_defineProperty(_localOptions,"shape",{value:null,meta:{typeCheck:"constructor",typeExpected:"Object",sanitization:function sanitization(config){return"string"!=typeof config&&config?config:{field:config}}}}),canvas_local_options_defineProperty(_localOptions,"size",{value:null,meta:{typeCheck:"constructor",typeExpected:"Object",sanitization:function sanitization(config){return"string"!=typeof config&&config?config:{field:config}}}}),canvas_local_options_defineProperty(_localOptions,"detail",{value:[],meta:{typeCheck:"constructor",typeExpected:"Array"}}),canvas_local_options_defineProperty(_localOptions,"layers",{value:[],meta:{typeCheck:"constructor",typeExpected:"Array"}}),canvas_local_options_defineProperty(_localOptions,"transform",{value:null,meta:{typeCheck:"constructor",typeExpected:"Object"}}),_localOptions),canvasOptions=(canvas_local_options_defineProperty(_canvasOptions={},"title",{value:[null,null],meta:{typeCheck:["constructor","constructor"],typeExpected:["Function","Object"],spreadParams:!0,sanitization:[function(title){if("string"==typeof title||!title){return function t(){return title}}return title},function(titleConfig){var defConfig=mergeRecursive({},TITLE_CONFIG);return mergeRecursive(defConfig,titleConfig)}]}}),canvas_local_options_defineProperty(_canvasOptions,"subtitle",{value:[null,null],meta:{typeCheck:["constructor","constructor"],typeExpected:["Function","Object"],spreadParams:!0,sanitization:[function(subtitle){if("string"==typeof subtitle||!subtitle){return function sub(){return subtitle}}return subtitle},function(subtitleConfig){var defConfig=mergeRecursive({},SUB_TITLE_CONFIG);return mergeRecursive(defConfig,subtitleConfig)}]}}),_canvasOptions);function layoutComponent_defineProperties(target,props){for(var i=0;i2&&void 0!==arguments[2]&&arguments[2],isGridComponent=arguments.length>3&&void 0!==arguments[3]&&arguments[3],cut="",componentRatioWidth=1,leftHeight=0,leftWidth=0;if(!component)return{first:definitionModel,second:definitionModel};var _component$getLogical=component.getLogicalSpace(),componentHeight=_component$getLogical.height,componentWidth=_component$getLogical.width,position=component.position();"top"===position||"bottom"===position?(cut="h",componentRatioWidth=componentHeight/definitionModel.remainingHeight(),leftHeight=definitionModel.remainingHeight()-componentHeight,leftWidth=definitionModel.remainingWidth()):(cut="v",componentRatioWidth=componentWidth/definitionModel.remainingWidth(),leftWidth=definitionModel.remainingWidth()-componentWidth,leftHeight=definitionModel.remainingHeight()),leftOvercomponentRationWidth=1-componentRatioWidth,definitionModel.cut(cut);var firstLaneConfig={host:component.name(),cut:null,ratioWeight:componentRatioWidth,preferred:!isGridComponent&&isPreferred,lanes:[]},firstLane=new DefinitionModel(firstLaneConfig);firstLane.remainingHeight(componentHeight),firstLane.remainingWidth(componentWidth);var secondLane=new DefinitionModel({host:null,cut:null,ratioWeight:leftOvercomponentRationWidth,preferred:!isGridComponent&&!isPreferred,lanes:[]});return secondLane.remainingHeight(leftHeight),secondLane.remainingWidth(leftWidth),isPreferred?definitionModel.lanes([firstLane]):"top"===position||"left"===position?definitionModel.lanes([firstLane,secondLane]):definitionModel.lanes([secondLane,firstLane]),{first:firstLane,second:secondLane}}function tree_toConsumableArray(arr){return function tree_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);i0?matrix[0]:matrix[1];return isTransposed?(joinedMatrix=matrix[0].length>0?utils_toConsumableArray(matrix[0]):[],joinedMatrix=matrix[1].length>0?[].concat(utils_toConsumableArray(joinedMatrix),utils_toConsumableArray(matrix[1])):joinedMatrix):joinedMatrix=joinedMatrix.map(function(row,rowIndex){var rowData=[];return matrix[0].length>0&&(rowData=utils_toConsumableArray(matrix[0][rowIndex])),matrix[1].length>0&&(rowData=[].concat(utils_toConsumableArray(rowData),utils_toConsumableArray(matrix[1][rowIndex]))),rowData}),joinedMatrix},utils_computeLogicalSpace=function computeLogicalSpace(){var item=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},config=arguments.length>1?arguments[1]:void 0,maxMeasures=arguments.length>2?arguments[2]:void 0,_config$isTransposed=config.isTransposed,isTransposed=void 0!==_config$isTransposed&&_config$isTransposed,unitMeasures=config.unitMeasures,_getMeasureInfo=function getMeasureInfo(isTransposed){return isTransposed?{firstMeasure:enums_constants_HEIGHT,secondMeasure:"width"}:{firstMeasure:"width",secondMeasure:enums_constants_HEIGHT}}(isTransposed),firstMeasure=_getMeasureInfo.firstMeasure,secondMeasure=_getMeasureInfo.secondMeasure,values=item.values,minMeasures=function getMinMeasures(isTransposed,unitMeasures){return isTransposed?{height:0,width:unitMeasures.width}:{height:unitMeasures.height,width:0}}(isTransposed,unitMeasures);if(values[0].key){var _logicalSpace,logicalSpace=(utils_defineProperty(_logicalSpace={},firstMeasure,0),utils_defineProperty(_logicalSpace,secondMeasure,0),_logicalSpace);return values.forEach(function(valueItem){var space=computeLogicalSpace(valueItem,config,maxMeasures);logicalSpace[firstMeasure]=Math.max(logicalSpace[firstMeasure],space[firstMeasure],minMeasures[firstMeasure]),logicalSpace[secondMeasure]+=+space[secondMeasure]}),item.space=logicalSpace,logicalSpace}return function getLogicalSpace(item,measures,minMeasures){var _ref,maxMeasure=arguments.length>3&&void 0!==arguments[3]?arguments[3]:[],firstMeasure=measures.firstMeasure,secondMeasure=measures.secondMeasure,firstMeasureValue=0,secondMeasureValue=0;return item.values.forEach(function(valueArray){var _item$space,fMeasure=0,sMeasure=0;valueArray.forEach(function(placeholder,colIndex){placeholder.setAvailableSpace();var space=placeholder.getLogicalSpace(),minSecondMeasure=placeholder.getMinMeasures(minMeasures[secondMeasure]);sMeasure=Math.max(sMeasure,+space[secondMeasure],minSecondMeasure),maxMeasure[colIndex]=Math.max(maxMeasure[colIndex]||0,space[firstMeasure]),fMeasure+=+maxMeasure[colIndex]}),secondMeasureValue+=sMeasure,firstMeasureValue=Math.max(firstMeasureValue,fMeasure),item.space=(utils_defineProperty(_item$space={},secondMeasure,Math.ceil(secondMeasureValue)),utils_defineProperty(_item$space,firstMeasure,Math.ceil(firstMeasureValue)),_item$space)}),utils_defineProperty(_ref={},secondMeasure,secondMeasureValue),utils_defineProperty(_ref,firstMeasure,firstMeasureValue),_ref}(item,{firstMeasure:firstMeasure,secondMeasure:secondMeasure},minMeasures,maxMeasures)},createMatrixEachLevel=function createMatrixEachLevel(item,isTransposed){if(item.values[0].key){var arr=[];return item.values.forEach(function(child){isTransposed?createMatrixEachLevel(child,isTransposed).forEach(function(e,i){var _arr$i;arr[i]=arr[i]||[],(_arr$i=arr[i]).push.apply(_arr$i,utils_toConsumableArray(e))}):arr.push.apply(arr,utils_toConsumableArray(createMatrixEachLevel(child,isTransposed)))}),item.matrix=arr,arr}return item.matrix=isTransposed?item.values[0].map(function(col,colIndex){return item.values.map(function(row){return row[colIndex]})}):item.values,item.matrix},extraCellsRemover=function extraCellsRemover(arr,beg,end){return arr.slice(beg,-end)},visual_matrix_props_PROPS={config:{sanitization:function sanitization(context,value){return mergeRecursive(context._config||{},value)}},maxMeasures:{},availableSpace:{},logicalSpace:{}},visual_matrix_default_config_defaultConfig={distribution:[],classPrefix:"muze",isDistributionEqual:!0,unitMeasures:{height:100,width:100,border:1},isTransposed:!1,facet:"primary",extraCellLengths:[]};function visual_matrix_defineProperties(target,props){for(var i=0;i1&&void 0!==arguments[1]?arguments[1]:{};!function visual_matrix_classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}(this,VisualMatrix),this._lastLevelKey=0,this._primaryMatrix=matrix[0]||[],this._secondaryMatrix=matrix[1]||[],this._maxMeasures=[],this._availableSpace={},generateGetterSetters(this,visual_matrix_props_PROPS);var defCon=Object.assign({},this.constructor.defaultConfig());this.config(mergeRecursive(defCon,config)),this._layoutMatrix=combineMatrices([matrix[0]||[],matrix[1]||[]],this.config())}return function visual_matrix_createClass(Constructor,protoProps,staticProps){return protoProps&&visual_matrix_defineProperties(Constructor.prototype,protoProps),staticProps&&visual_matrix_defineProperties(Constructor,staticProps),Constructor}(VisualMatrix,[{key:"computeLogicalSpace",value:function computeLogicalSpace(){throw new Error(ERROR_MSG.INTERFACE_IMPL)}},{key:"computeViewableSpaces",value:function computeViewableSpaces(){throw new Error(ERROR_MSG.INTERFACE_IMPL)}},{key:"removeExtraCells",value:function removeExtraCells(){throw new Error(ERROR_MSG.INTERFACE_IMPL)}},{key:"getPriorityDistribution",value:function getPriorityDistribution(){throw new Error(ERROR_MSG.INTERFACE_IMPL)}},{key:"calculateDepth",value:function calculateDepth(){throw new Error(ERROR_MSG.INTERFACE_IMPL)}},{key:"redistributeSpaces",value:function redistributeSpaces(){throw new Error(ERROR_MSG.INTERFACE_IMPL)}},{key:"redistributeViewSpaces",value:function redistributeViewSpaces(){throw new Error(ERROR_MSG.INTERFACE_IMPL)}},{key:"getCellDimensions",value:function getCellDimensions(){throw new Error(ERROR_MSG.INTERFACE_IMPL)}},{key:"primaryMatrix",value:function primaryMatrix(){return arguments.length?this:this._primaryMatrix}},{key:"secondaryMatrix",value:function secondaryMatrix(){return arguments.length?this:this._secondaryMatrix}},{key:"tree",value:function tree(){return arguments.length?this:this._tree}},{key:"createTree",value:function createTree(){var _createTree2=function createTree(context){var matrixTree={},lastLevelKey=0,facet="primary",nestFn=utils_nest(),keys=[],layoutMatrix=context._layoutMatrix,primaryMatrix=context.primaryMatrix(),secondaryMatrix=context.secondaryMatrix(),_context$config=context.config(),isTransposed=_context$config.isTransposed,breakPage=_context$config.breakPage;if(isTransposed){if(facet=0===primaryMatrix.length?"primary":0===secondaryMatrix.length?"secondary":primaryMatrix.length>=secondaryMatrix.length?"primary":"secondary",primaryMatrix.length>0){for(var _i2=0;_i20){for(var primaryMatrixLength=primaryMatrix.length,_i3=secondaryMatrix.length-1;_i3>0;_i3--)keys.push(_i3+primaryMatrixLength);keys.push(primaryMatrixLength),"primary"===facet&&(lastLevelKey=primaryMatrixLength)}var newMatrix;keys.forEach(function(key){var counter=-1;return nestFn.key(function(d){return counter++,"".concat(d[key].valueOf(),"-").concat(findInPage(counter,breakPage))})}),newMatrix=layoutMatrix[0].map(function(col,colIndex){return layoutMatrix.map(function(row){return row[colIndex]})}),matrixTree=nestFn.entries(newMatrix)}else{if(facet=0===primaryMatrix.length?"primary":0===secondaryMatrix.length?"secondary":primaryMatrix.length>=secondaryMatrix.length?"primary":"secondary",primaryMatrix.length>0){for(var i=0;i0){for(var keyLength=primaryMatrix.length>0?primaryMatrix[0].length:0,_i=secondaryMatrix[0].length-1;_i>0;_i--)keys.push(_i+keyLength);keys.push(keyLength),"primary"===facet&&(lastLevelKey=keyLength)}else lastLevelKey=primaryMatrix.length>0?primaryMatrix[0].length-1:0;keys.forEach(function(key){var counter=-1;return nestFn.key(function(d){return counter++,"".concat(d[key].valueOf(),"-").concat(findInPage(counter,breakPage))})}),matrixTree=nestFn.entries(layoutMatrix)}return{tree:matrixTree,lastLevelKey:lastLevelKey}}(this),tree=_createTree2.tree,lastLevelKey=_createTree2.lastLevelKey;return this._lastLevelKey=lastLevelKey,tree}},{key:"getLogicalSpace",value:function getLogicalSpace(){return this.logicalSpace()}},{key:"setAvailableSpace",value:function setAvailableSpace(width,height){this.availableSpace({width:width,height:height});var tree=this.tree(),heightMeasures=this.populateMaxMeasures(enums_constants_HEIGHT,tree),widthMeasures=this.populateMaxMeasures("width",tree),depth=this.calculateDepth(widthMeasures,heightMeasures);return this.viewableMatrix=this.createViewPortMatrix(depth),this.viewableMeasures=this.redistributeSpaces(width,height),this}},{key:"populateMaxMeasures",value:function populateMaxMeasures(type,matrixTree){var _this=this,depth=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0,measures=arguments.length>3&&void 0!==arguments[3]?arguments[3]:[];if(measures[depth]=Math.max(measures[depth]||0,matrixTree.space[type]),matrixTree.values){var childDepth=depth+1;matrixTree.values.forEach(function(child){child.space&&(measures=_this.populateMaxMeasures(type,child,childDepth,measures))})}return measures}},{key:"getViewableSpaces",value:function getViewableSpaces(){return this.viewableMeasures}},{key:"getViewableMatrices",value:function getViewableMatrices(){return this.viewableMatrix}},{key:"createViewPortMatrix",value:function createViewPortMatrix(depth){var arr=[];return function createMatrixInstances(){var arr=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],depth=arguments.length>1?arguments[1]:void 0,matrixInfo=arguments.length>2?arguments[2]:void 0,layout=arguments.length>3?arguments[3]:void 0,breakPointer=layout._breakPointer,isTransposed=layout.config().isTransposed,tree=matrixInfo.tree,layoutMatrix=matrixInfo.layoutMatrix;if(0===depth){var brokenMatrix=function breakMatrix(matrix,isTransposed,breakPointer){var primaryMatrix=[],secondaryMatrix=[];return isTransposed?matrix.forEach(function(row,rowIndex){rowIndex>=breakPointer?secondaryMatrix.push(row):primaryMatrix.push(row)}):matrix.forEach(function(row,rowIndex){row.forEach(function(column,columnIndex){columnIndex>=breakPointer?(secondaryMatrix[rowIndex]=secondaryMatrix[rowIndex]||[],secondaryMatrix[rowIndex].push(column)):(primaryMatrix[rowIndex]=primaryMatrix[rowIndex]||[],primaryMatrix[rowIndex].push(column))})}),[primaryMatrix,secondaryMatrix]}(tree.matrix,isTransposed,breakPointer);return arr.push({matrix:tree.matrix,primaryMatrix:brokenMatrix[0],secondaryMatrix:brokenMatrix[1],space:tree.space}),arr}var nextLevel=depth-1;return tree.values.forEach(function(e){createMatrixInstances(arr,nextLevel,{tree:e,layoutMatrix:layoutMatrix},layout)}),arr}(arr,depth,this.removeExtraCells(),this),arr}}],[{key:"defaultConfig",value:function defaultConfig(){return visual_matrix_default_config_defaultConfig}}]),VisualMatrix}();function row_matrix_typeof(obj){return(row_matrix_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function row_matrix_defineProperties(target,props){for(var i=0;i1&&void 0!==arguments[1]?arguments[1]:{};return function row_matrix_classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}(this,RowVisualMatrix),(_this=row_matrix_possibleConstructorReturn(this,row_matrix_getPrototypeOf(RowVisualMatrix).call(this,matrix,config)))._breakPointer=matrix[0].length>0?matrix[0][0].length:0,_this._layoutMatrix=combineMatrices([matrix[0]||[],matrix[1]||[]],_this.config()),_this._tree={key:ROW_ROOT,values:_this.createTree()},_this._logicalSpace=_this.computeLogicalSpace(),_this}return function row_matrix_inherits(subClass,superClass){if("function"!=typeof superClass&&null!==superClass)throw new TypeError("Super expression must either be null or a function");subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:!0,configurable:!0}}),superClass&&row_matrix_setPrototypeOf(subClass,superClass)}(RowVisualMatrix,visual_matrix_VisualMatrix),function row_matrix_createClass(Constructor,protoProps,staticProps){return protoProps&&row_matrix_defineProperties(Constructor.prototype,protoProps),staticProps&&row_matrix_defineProperties(Constructor,staticProps),Constructor}(RowVisualMatrix,[{key:"computeLogicalSpace",value:function computeLogicalSpace(){var matrixTree=this.tree();return createMatrixEachLevel(matrixTree,!1),utils_computeLogicalSpace(matrixTree,this.config(),this.maxMeasures())}},{key:"computeViewableSpaces",value:function computeViewableSpaces(measures){var _this2=this,maxHeights=measures.maxHeights,maxWidths=measures.maxWidths,height=measures.height;return this.viewableMatrix.map(function(matrixInst,i){var cellDimOptions={matrixInst:matrixInst,maxWidths:maxWidths,maxHeights:maxHeights,matrixIndex:i},_this2$getCellDimensi=_this2.getCellDimensions(cellDimOptions),widths=_this2$getCellDimensi.widths,rowHeights=_this2$getCellDimensi.rowHeights,columnWidths=_this2$getCellDimensi.columnWidths,heightMeasures=[height,height],columnMeasures=widths;return{rowHeights:{primary:rowHeights[0],secondary:rowHeights[1]},columnWidths:{primary:columnWidths[0],secondary:columnWidths[1]},height:{primary:heightMeasures[0],secondary:heightMeasures[1]},width:{primary:columnMeasures[0],secondary:columnMeasures[1]}}})}},{key:"removeExtraCells",value:function removeExtraCells(){var _this$config=this.config(),isTransposed=_this$config.isTransposed,extraCellLengths=_this$config.extraCellLengths,matrix=this._layoutMatrix,tree=mergeRecursive({},this.tree()),begCellLen=extraCellLengths[0],endCellLen=extraCellLengths[1]||Number.NEGATIVE_INFINITY,layoutMatrix=isTransposed?matrix.slice(0).map(function(e){return extraCellsRemover(e,begCellLen,endCellLen)}):extraCellsRemover(matrix,begCellLen,endCellLen);return tree.values=extraCellsRemover(tree.values,begCellLen,endCellLen),tree.matrix=extraCellsRemover(tree.matrix,begCellLen,endCellLen),{tree:tree,layoutMatrix:layoutMatrix}}},{key:"getPriorityDistribution",value:function getPriorityDistribution(measures){var remainingAvailWidth,remainingWidth,cWidths=[],conditions=[],maxPrioritySpace=0,matrix=measures.matrix,availableWidth=measures.width,maxWidths=measures.maxMeasures,currentWidth=measures.maxWidth,height=measures.height,priority=this.config().priority,primaryMatrixLength=this.primaryMatrix().length?this.primaryMatrix()[0].length:0,dist=[];remainingAvailWidth=availableWidth,remainingWidth=currentWidth,(conditions=2===priority?[primaryMatrixLength-1,primaryMatrixLength]:0===priority?[primaryMatrixLength-1]:[primaryMatrixLength]).forEach(function(i){dist[i]=maxWidths[i],maxPrioritySpace+=maxWidths[i],remainingAvailWidth-=dist[i],remainingWidth-=dist[i]}),matrix[0].forEach(function(e,i){-1===conditions.indexOf(i)&&(dist[i]=remainingAvailWidth*(maxWidths[i]/remainingWidth))}),matrix.forEach(function(row){return row.forEach(function(col,cIdx){-1===conditions.indexOf(cIdx)?(col.setAvailableSpace(dist[cIdx],height),cWidths[cIdx]=Math.max(cWidths[cIdx]||0,Math.floor(col.getLogicalSpace().width))):cWidths[cIdx]=0})});var prioritySpace=availableWidth-cWidths.reduce(function(t,n){return t+n});return prioritySpace<0?cWidths=cWidths.map(function(){return 0}):conditions.forEach(function(i){cWidths[i]=Math.floor(prioritySpace*(dist[i]/maxPrioritySpace||1))}),cWidths}},{key:"calculateDepth",value:function calculateDepth(widthMeasures,heightMeasures){var i,height=this.availableSpace().height;for(i=0;i0?logicalWidths:maxMeasures.map(function(){return 0}),rHeights=function getDistributedHeight(context){var heightWithoutGutter,distSum=0,gutterSum=0,isTransposed=context.isTransposed,distribution=context.distribution,availableHeight=context.availableHeight,height=context.height,isDistributionEqual=context.isDistributionEqual,gutter=context.gutter,matrix=context.matrix,cIdx=context.cIdx;distribution&&void 0!==distribution[0]&&(distSum=distribution.reduce(function(t,n){return t+=n})),gutter&&void 0!==gutter[0]&&(gutterSum=gutter.reduce(function(t,n){return t+=n})),heightWithoutGutter=availableHeight-Math.floor(availableHeight*gutterSum);var colLen=matrix.length;return matrix.map(function(row,rIdx){var space=row[cIdx].getLogicalSpace().height,distHeight=space+space/height*(heightWithoutGutter-height);return isTransposed||(distribution.length>0&&colLen===distribution.length?distHeight=heightWithoutGutter*distribution[rIdx]/distSum:(isDistributionEqual||0===context.height)&&(distHeight=heightWithoutGutter/colLen)),Math.floor(distHeight)})}({matrix:matrix,cIdx:this._lastLevelKey,height:mHeight,availableHeight:height,isDistributionEqual:isDistributionEqual,distribution:distribution,isTransposed:isTransposed,gutter:gutter}),maxWidths.length>0&&(cWidths=cWidths.map(function(e,i){return Math.max(e,maxWidths[0][i]||0)})),maxWidths.push(cWidths);for(var x=0;x=breakPointer&&(columnWidths[1][cIdx-breakPointer]=colWidth,widths[1]=(widths[1]||0)+colWidth),cIdx===_this4._lastLevelKey&&(rowHeights[0][rIdx]=colHeight,rowHeights[1][rIdx]=colHeight)})}),{heights:[0,0],widths:widths,rowHeights:rowHeights,columnWidths:columnWidths}}}]),RowVisualMatrix}();function column_matrix_typeof(obj){return(column_matrix_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function column_matrix_defineProperties(target,props){for(var i=0;i1&&void 0!==arguments[1]?arguments[1]:{};return function column_matrix_classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}(this,ColumnVisualMatrix),(_this=column_matrix_possibleConstructorReturn(this,column_matrix_getPrototypeOf(ColumnVisualMatrix).call(this,matrix,config)))._breakPointer=matrix[0].length,_this._tree={key:COLUMN_ROOT,values:_this.createTree()},_this._logicalSpace=_this.computeLogicalSpace(),_this}return function column_matrix_inherits(subClass,superClass){if("function"!=typeof superClass&&null!==superClass)throw new TypeError("Super expression must either be null or a function");subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:!0,configurable:!0}}),superClass&&column_matrix_setPrototypeOf(subClass,superClass)}(ColumnVisualMatrix,visual_matrix_VisualMatrix),function column_matrix_createClass(Constructor,protoProps,staticProps){return protoProps&&column_matrix_defineProperties(Constructor.prototype,protoProps),staticProps&&column_matrix_defineProperties(Constructor,staticProps),Constructor}(ColumnVisualMatrix,[{key:"computeLogicalSpace",value:function computeLogicalSpace(){var matrixTree=this.tree();return createMatrixEachLevel(matrixTree,!0),utils_computeLogicalSpace(matrixTree,this.config(),this.maxMeasures())}},{key:"computeViewableSpaces",value:function computeViewableSpaces(measures){var _this2=this,maxHeights=measures.maxHeights,maxWidths=measures.maxWidths,height=measures.height,width=measures.width;return this.viewableMatrix.map(function(matrixInst,i){var cellDimOptions={matrixInst:matrixInst,maxWidths:maxWidths,maxHeights:maxHeights,matrixIndex:i,height:height},_this2$getCellDimensi=_this2.getCellDimensions(cellDimOptions),heights=_this2$getCellDimensi.heights,rowHeights=_this2$getCellDimensi.rowHeights,columnWidths=_this2$getCellDimensi.columnWidths,heightMeasures=heights,columnMeasures=[width,width];return{rowHeights:{primary:rowHeights[0],secondary:rowHeights[1]},columnWidths:{primary:columnWidths[0],secondary:columnWidths[1]},height:{primary:heightMeasures[0],secondary:heightMeasures[1]},width:{primary:columnMeasures[0],secondary:columnMeasures[1]}}})}},{key:"removeExtraCells",value:function removeExtraCells(){var _this$config=this.config(),isTransposed=_this$config.isTransposed,extraCellLengths=_this$config.extraCellLengths,matrix=this._layoutMatrix,tree=mergeRecursive({},this.tree()),begCellLen=extraCellLengths[0],endCellLen=extraCellLengths[1]||Number.NEGATIVE_INFINITY,layoutMatrix=isTransposed?matrix.slice(0).map(function(e){return extraCellsRemover(e,begCellLen,endCellLen)}):extraCellsRemover(matrix,begCellLen,endCellLen);return tree.values=extraCellsRemover(tree.values,begCellLen,endCellLen),tree.matrix=tree.matrix.map(function(e){return extraCellsRemover(e,begCellLen,endCellLen)}),{tree:tree,layoutMatrix:layoutMatrix}}},{key:"getPriorityDistribution",value:function getPriorityDistribution(measures){var height=measures.height,maxHeights=measures.maxHeights,remainingHeight=height,heightDist=[],conditions=[],divider=2,priority=this.config().priority,primaryMatrixLength=this.primaryMatrix().length;return 2===priority?(conditions=[primaryMatrixLength-1,primaryMatrixLength],divider=2):(conditions=0===priority?[primaryMatrixLength-1]:[primaryMatrixLength],divider=1),maxHeights.forEach(function(heights,index){-1===conditions.indexOf(index)&&(heightDist[index]=heights,remainingHeight-=heights)}),remainingHeight<0?heightDist=heightDist.map(function(){return 0}):conditions.forEach(function(condition){heightDist[condition]=Math.min(maxHeights[condition],remainingHeight/divider)}),heightDist}},{key:"calculateDepth",value:function calculateDepth(widthMeasures){var j,width=this.availableSpace().width;for(j=0;j0)distWidth=availableWidth*distribution[colIndex]/distSum;else if(isDistributionEqual||0===width){var rowLen=row.length;distWidth=availableWidth/rowLen}return Math.floor(distWidth)})}({row:matrix[this._lastLevelKey],width:mWidth,availableWidth:width},this.config());matrix.forEach(function(row,rIdx){return row.forEach(function(col,cIdx){var oldLogicalSpace=col.getLogicalSpace();col.setAvailableSpace(cWidths[cIdx]-borderWidth,oldLogicalSpace.height),rHeights[rIdx]=Math.max(rHeights[rIdx]||0,Math.floor(col.getLogicalSpace().height))})}),maxHeights.length>0&&(rHeights=rHeights.map(function(e,i){return Math.max(e,maxHeights[0][i])})),maxHeights.push(rHeights);for(var x=0;x=breakPointer&&(rowHeights[1][rIdx-breakPointer]=colHeight,heights[1]=(heights[1]||0)+colHeight),rIdx===_this4._lastLevelKey&&(columnWidths[0][cIdx]=colWidth,columnWidths[1][cIdx]=colWidth)})}),{heights:heights,widths:[0,0],rowHeights:rowHeights,columnWidths:columnWidths}}}]),ColumnVisualMatrix}();function layout_helper_toConsumableArray(arr){return function layout_helper_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);imaxMeasure&&layout.scrollInfo(computations_defineProperty({},scrollType,!0)),Math.max(maxMeasure,actualMeasure)}}(layout,paginationDetailsMap[matrixType],relatedMaxMeasure,buffer)},computations_getMatrixHeightDetails=function getMatrixHeightDetails(layout,columnMatrixWidth){var height=layout.measurement().height,buffer=layout.config().buffer,_getHeightRequiredByC=function getHeightRequiredByColMatrix(layout,columnMatrixWidth){var height=layout.measurement().height,columnMatrix=layout.columnMatrix(),maxColumnMatrixHeight=Math.min(columnMatrix.getLogicalSpace().height,height/2);columnMatrix.setAvailableSpace(columnMatrixWidth,maxColumnMatrixHeight);var columnViewSpace=columnMatrix.getViewableSpaces()[layout.config().columnPointer];return{columnMatrixHeight:columnViewSpace.height.primary+columnViewSpace.height.secondary,maxColumnMatrixHeight:maxColumnMatrixHeight}}(layout,columnMatrixWidth),columnMatrixHeight=_getHeightRequiredByC.columnMatrixHeight,maxColumnMatrixHeight=_getHeightRequiredByC.maxColumnMatrixHeight,maxHeightAvailableForRowMatrix=height-Math.min(maxColumnMatrixHeight,columnMatrixHeight);return{columnMatrixHeight:columnMatrixHeight,maxColumnMatrixHeight:maxColumnMatrixHeight,rowMatrixHeight:paginationMeasureGetter(layout,"row",maxHeightAvailableForRowMatrix,buffer),maxHeightAvailableForRowMatrix:maxHeightAvailableForRowMatrix}},bufferCondition={isScroll:!0,pagination:"scroll"},computations_getActualBufferFromConfig=function getActualBufferFromConfig(layout){var buffer=layout.config().buffer,_map2=computations_slicedToArray([enums_constants_HORIZONTAL,enums_constants_VERTICAL].map(function(type){return function getBufferFromCondition(layout,type){var scrollInfo=layout.scrollInfo(),currentBufferType={pagination:layout.config().pagination,isScroll:scrollInfo[type]};return Object.keys(bufferCondition).every(function(e){return bufferCondition[e]===currentBufferType[e]})}(layout,type)?buffer:0}),2);return{horizontalBuffer:_map2[0],verticalBuffer:_map2[1]}},computations_computeLayoutMeasurements=function computeLayoutMeasurements(layout){var rowMatrix=layout.rowMatrix(),columnMatrix=layout.columnMatrix(),_getMatrixWidthDetail=function getMatrixWidthDetails(layout){var rowMatrix=layout.rowMatrix(),width=layout.measurement().width,_layout$config3=layout.config(),border=_layout$config3.border,buffer=_layout$config3.buffer,borderWidth=border.width,rowMatrixWidth=getMatrixMeasurement(rowMatrix,"width"),maxRowMatrixWidth=Math.min(rowMatrixWidth+buffer,width/2),maxWidthAvailableForColumnMatrix=width-maxRowMatrixWidth-borderWidth;return{rowMatrixWidth:rowMatrixWidth,maxRowMatrixWidth:maxRowMatrixWidth,columnMatrixWidth:paginationMeasureGetter(layout,"column",maxWidthAvailableForColumnMatrix,0),maxWidthAvailableForColumnMatrix:maxWidthAvailableForColumnMatrix}}(layout),rowMatrixWidth=_getMatrixWidthDetail.rowMatrixWidth,maxRowMatrixWidth=_getMatrixWidthDetail.maxRowMatrixWidth,maxWidthAvailableForColumnMatrix=_getMatrixWidthDetail.maxWidthAvailableForColumnMatrix,columnMatrixWidth=_getMatrixWidthDetail.columnMatrixWidth,_getMatrixHeightDetai=computations_getMatrixHeightDetails(layout,columnMatrixWidth),columnMatrixHeight=_getMatrixHeightDetai.columnMatrixHeight,rowMatrixHeight=_getMatrixHeightDetai.rowMatrixHeight,maxHeightAvailableForRowMatrix=_getMatrixHeightDetai.maxHeightAvailableForRowMatrix,_getActualBufferFromC=computations_getActualBufferFromConfig(layout),horizontalBuffer=_getActualBufferFromC.horizontalBuffer,verticalBuffer=_getActualBufferFromC.verticalBuffer;rowMatrix.setAvailableSpace(maxRowMatrixWidth-verticalBuffer,rowMatrixHeight-horizontalBuffer);var rowViewableSpaces=rowMatrix.getViewableSpaces(),columnViewableSpaces=columnMatrix.getViewableSpaces();return setViewSpaces(layout,"row",rowViewableSpaces),setViewSpaces(layout,"column",columnViewableSpaces),function setValueMatrixMeasurements(layout,rowViewableSpaces,columnViewableSpaces){var _ref,_ref2,_ref3,_ref4,_ref5,centerMatrix=layout.centerMatrix(),border=layout.config().border,matrices=layout.matrices(),top=matrices.top,bottom=matrices.bottom,borderWidth=border.width,rowHeights=(_ref=[]).concat.apply(_ref,computations_toConsumableArray(rowViewableSpaces.map(function(e){return e.rowHeights.primary}))),rowWidthsPrimary=(_ref2=[]).concat.apply(_ref2,computations_toConsumableArray(rowViewableSpaces.map(function(e){return e.columnWidths.primary}))),rowWidthsSecondary=(_ref3=[]).concat.apply(_ref3,computations_toConsumableArray(rowViewableSpaces.map(function(e){return e.columnWidths.secondary}))),columnWidths=(_ref4=[]).concat.apply(_ref4,computations_toConsumableArray(columnViewableSpaces.map(function(e){return e.columnWidths.primary}))),columnHeightsPrimary=columnViewableSpaces[0].rowHeights.primary,columnHeightsSecondary=(_ref5=[]).concat.apply(_ref5,computations_toConsumableArray(columnViewableSpaces.map(function(e){return e.rowHeights.secondary})));centerMatrix.forEach(function(matrix,rIdx){matrix.forEach(function(placeholder,cIdx){placeholder.setAvailableSpace(columnWidths[cIdx]-borderWidth,rowHeights[rIdx]-borderWidth)})}),computations_setAvailableSpace(top[0],rowWidthsPrimary,columnHeightsPrimary),computations_setAvailableSpace(top[2],rowWidthsSecondary,columnHeightsPrimary),computations_setAvailableSpace(bottom[0],rowWidthsPrimary,columnHeightsSecondary),computations_setAvailableSpace(bottom[2],rowWidthsSecondary,columnHeightsSecondary)}(layout,rowViewableSpaces,columnViewableSpaces),{rowMatrixHeight:rowMatrixHeight-horizontalBuffer,rowMatrixWidth:rowMatrixWidth-verticalBuffer,maxHeightAvailableForRowMatrix:maxHeightAvailableForRowMatrix-horizontalBuffer,columnMatrixHeight:columnMatrixHeight,columnMatrixWidth:columnMatrixWidth,maxWidthAvailableForColumnMatrix:maxWidthAvailableForColumnMatrix}},measureSum=function measureSum(measureArr){return measureArr.reduce(function(total,measure){return total+measure},0)};function layout_typeof(obj){return(layout_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function layout_defineProperties(target,props){for(var i=0;i0&&(leftMatrix=[].concat(layout_helper_toConsumableArray(topLeft),layout_helper_toConsumableArray(leftRows),layout_helper_toConsumableArray(bottomLeft))),rightRows.length>0&&(rightMatrix=[].concat(layout_helper_toConsumableArray(topRight),layout_helper_toConsumableArray(rightRows),layout_helper_toConsumableArray(bottomRight))),topColumns.length>0&&topColumns[0].length>0&&(topMatrix=topColumns.map(function(d,i){return[].concat(layout_helper_toConsumableArray(topLeft[i]),layout_helper_toConsumableArray(d),layout_helper_toConsumableArray(topRight[i]))})),bottomColumns.length>0&&bottomColumns[0].length>0&&(bottomMatrix=bottomColumns.map(function(d,i){return[].concat(layout_helper_toConsumableArray(bottomLeft[i]),layout_helper_toConsumableArray(d),layout_helper_toConsumableArray(bottomRight[i]))})),context.rowMatrix(new row_matrix_RowVisualMatrix([leftMatrix,rightMatrix],{isDistributionEqual:isRowSizeEqual,distribution:distribution.rows,gutter:gutterSpace.rows,unitMeasures:{width:minUnitWidth,height:minUnitHeight,border:border.width},priority:priority.row,breakPage:breakPage.rows.map(function(e){return e+Math.max(topLeft.length,topRight.length)}),extraCellLengths:[topLeft.length,bottomLeft.length]})),begColCells=topLeft.length>0?topLeft[0].length:bottomLeft.length>0?bottomLeft[0].length:0,endColCells=topRight.length>0?topRight[0].length:bottomRight.length>0?bottomRight[0].length:0,context.columnMatrix(new column_matrix_ColumnVisualMatrix([topMatrix,bottomMatrix],{isDistributionEqual:isColumnSizeEqual,distribution:distribution.columns,gutter:gutterSpace.columns,isTransposed:!0,unitMeasures:{width:minUnitWidth,height:minUnitHeight,border:border.width},priority:priority.col,breakPage:breakPage.columns,extraCellLengths:[begColCells,endColCells]})),context.centerMatrix(valueMatrix),matrices}(this,_matrices),this):layout_get(layout_getPrototypeOf(GridLayout.prototype),"matrices",this).call(this,_matrices)}},{key:"triggerReflow",value:function triggerReflow(){this.scrollInfo({horizontal:!1,vertical:!1});var _computeLayoutMeasure=computations_computeLayoutMeasurements(this),maxHeightAvailableForRowMatrix=_computeLayoutMeasure.maxHeightAvailableForRowMatrix,maxWidthAvailableForColumnMatrix=_computeLayoutMeasure.maxWidthAvailableForColumnMatrix;return this.setViewInformation(maxHeightAvailableForRowMatrix,maxWidthAvailableForColumnMatrix),this}},{key:"gotoPage",value:function gotoPage(type,pageNumber){var pageType=type.toLowerCase(),totalPages=this.viewInfo().viewMatricesInfo["".concat(pageType,"Pages")],pointer=Math.min(Math.max(1,pageNumber),totalPages);return this.config(function layout_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}({},"".concat(pageType,"Pointer"),pointer-1)),this.setViewInformation(),this.renderGrid(),this}},{key:"pages",value:function pages(type){var viewMatricesInfo=this.viewInfo().viewMatricesInfo,pageType=type.toLowerCase();return{totalPages:viewMatricesInfo["".concat(pageType,"Pages")],currentPage:this.config()["".concat(pageType,"Pointer")]+1}}},{key:"viewInfo",value:function viewInfo(){return arguments.length?(this._viewInfo=arguments.length<=0?void 0:arguments[0],this):this._viewInfo}},{key:"scrollInfo",value:function scrollInfo(){return arguments.length?(this._scrollInfo=mergeRecursive(this._scrollInfo,arguments.length<=0?void 0:arguments[0]),this):this._scrollInfo}},{key:"setViewInformation",value:function setViewInformation(maxRowHeight,maxColWidth){var _this$config2=this.config(),rowPointer=_this$config2.rowPointer,columnPointer=_this$config2.columnPointer,border=_this$config2.border,viewMatricesInfo=function getViewMatrices(layout,rowPointer,columnPointer){for(var rowMatrix=layout.rowMatrix(),columnMatrix=layout.columnMatrix(),centerMatrix=layout.centerMatrix(),matrices=layout.matrices(),rowMatrices=rowMatrix.getViewableMatrices(),columnMatrices=columnMatrix.getViewableMatrices(),centralMatrixPointer={row:0,column:0},i=rowPointer-1;i>=0;i--){var length=Math.max(rowMatrices[i].primaryMatrix.length,rowMatrices[i].secondaryMatrix.length);centralMatrixPointer.row+=length}for(var _i=columnPointer-1;_i>=0;_i--){var matrix=columnMatrices[_i],primaryMatrix=matrix.primaryMatrix,secondaryMatrix=matrix.secondaryMatrix,_length=Math.max(primaryMatrix[0]?primaryMatrix[0].length:0,secondaryMatrix[0]?secondaryMatrix[0].length:0);centralMatrixPointer.column+=_length}matrices.top[1]=columnMatrices[columnPointer].primaryMatrix,matrices.bottom[1]=columnMatrices[columnPointer].secondaryMatrix,matrices.center[0]=rowMatrices[rowPointer].primaryMatrix,matrices.center[2]=rowMatrices[rowPointer].secondaryMatrix;var rowMatrixLen=Math.max(matrices.center[0].length,matrices.center[2].length),columnMatrixLen=Math.max(matrices.top[1][0]?matrices.top[1][0].length:0,matrices.bottom[1][0]?matrices.bottom[1][0].length:0);return matrices.center[1]=centerMatrix.slice(centralMatrixPointer.row,centralMatrixPointer.row+rowMatrixLen).map(function(matrix){return matrix.slice(centralMatrixPointer.column,centralMatrixPointer.column+columnMatrixLen)}),{matrices:matrices,rowPages:rowMatrices.length,columnPages:columnMatrices.length}}(this,rowPointer,columnPointer),layoutDimensions=function getViewMeasurements(layout,maxRowHeight,maxColWidth){var rowMatrix=layout.rowMatrix(),columnMatrix=layout.columnMatrix(),_layout$config=layout.config(),columnPointer=_layout$config.columnPointer,rowPointer=_layout$config.rowPointer,rowSpaces=rowMatrix.getViewableSpaces()[rowPointer],colSpaces=columnMatrix.getViewableSpaces()[columnPointer],rowHeights=rowSpaces.rowHeights,rowMatrixWidth=rowSpaces.width,columnWidths=colSpaces.columnWidths,columnMatrixHeight=colSpaces.height,leftWidth=rowMatrixWidth.primary,rightWidth=rowMatrixWidth.secondary,topHeight=columnMatrixHeight.primary,bottomHeight=columnMatrixHeight.secondary,centerHeight=measureSum(rowHeights.primary),centerWidth=measureSum(columnWidths.primary),viewWidth=[leftWidth,Math.min(centerWidth,maxColWidth),rightWidth],viewHeight=[topHeight,Math.min(centerHeight,maxRowHeight),bottomHeight];return{viewWidth:viewWidth,viewHeight:viewHeight,actualCenterMeasures:{height:centerHeight,width:centerWidth},totalMeasures:{width:measureSum(viewWidth),height:measureSum(viewHeight)},unitHeights:rowHeights,unitWidths:columnWidths}}(this,maxRowHeight,maxColWidth);return layoutDimensions.border=border,this.viewInfo({viewMatricesInfo:viewMatricesInfo,layoutDimensions:layoutDimensions}),this}}],[{key:"defaultViewInfo",value:function defaultViewInfo(){return Object.assign({},{layoutDimensions:{border:this.defaultConfig().border,viewHeight:[0,0,0],viewWidth:[0,0,0]},viewMatricesInfo:{columnPages:0,rowPages:0,matrices:{top:[],center:[],bottom:[]}}})}},{key:"defaultMeasurement",value:function defaultMeasurement(){return DEFAULT_MEASUREMENTS}},{key:"defaultConfig",value:function defaultConfig(){return DEFAULT_CONFIGURATION}},{key:"create",value:function create(){return new GridLayout(null,null,this.defaultMeasurement(),this.defaultConfig())}}]),GridLayout}();function border_helper_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}var _matrixSpanGeneratorM,_spanApplierMap,borderMap=(border_helper_defineProperty(_borderMap={},"".concat("top","-").concat("left"),null),border_helper_defineProperty(_borderMap,"".concat("top","-").concat("middle"),"column"),border_helper_defineProperty(_borderMap,"".concat("top","-").concat("right"),null),border_helper_defineProperty(_borderMap,"".concat("center","-").concat("left"),"row"),border_helper_defineProperty(_borderMap,"".concat("center","-").concat("middle"),"center"),border_helper_defineProperty(_borderMap,"".concat("center","-").concat("right"),"row"),border_helper_defineProperty(_borderMap,"".concat("bottom","-").concat("left"),null),border_helper_defineProperty(_borderMap,"".concat("bottom","-").concat("middle"),"column"),border_helper_defineProperty(_borderMap,"".concat("bottom","-").concat("right"),null),_borderMap),border_helper_specificBorderApplier=function specificBorderApplier(borderTypes,showBorders,cells,borderInfo){var color=borderInfo.color,width=borderInfo.width,style=borderInfo.style,borderStyle="".concat(width,"px ").concat(style);borderTypes.forEach(function(borderType){!function applySpecificBorder(cells,color,type,style){cells.style("border-".concat(type),"".concat(style," ").concat(color))}(cells,showBorders[borderType]?color:"rgba(0,0,0,0)",borderType,borderStyle)})},border_helper_applyBorders=function applyBorders(cells,border,row,column){var borderApplierFn=function borderApplier(cells,borderInfo){var showRowBorders=borderInfo.showRowBorders,showColBorders=borderInfo.showColBorders,showValueBorders=borderInfo.showValueBorders;return{row:function row(){return border_helper_specificBorderApplier(["top","bottom"],showRowBorders,cells,borderInfo)},column:function column(){return border_helper_specificBorderApplier(["left","right"],showColBorders,cells,borderInfo)},center:function center(){return border_helper_specificBorderApplier(["left","right","top","bottom"],showValueBorders,cells,borderInfo)}}}(cells,border),borderMapVal=borderMap["".concat(ROW_MATRIX_INDEX[VIEW_INDEX[row]],"-").concat(COLUMN_MATRIX_INDEX[column])];borderMapVal&&borderApplierFn[borderMapVal]()};function span_maker_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}var orderMaker=function orderMaker(arr){return Array.from(Array(arr.length).keys())},nestByStack=function nestByStack(stack,updateArr){var optionalParams=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},order=optionalParams.order,keyFn=optionalParams.keyFn,arr=updateArr.slice(),currStack=stack.slice(),prevStack=currStack.slice();if(order=order||Array.from(Array(arr.length).keys()),keyFn=keyFn||function(v){return v},0===currStack.length){var _newArr=[];return order.forEach(function(e){_newArr.push(arr[e])}),{prevStack:prevStack,currStack:arr,arr:_newArr}}for(var arrVal="",stackVal="",newArr=[],i=order.length-1;i>=0;i--){var currElemIndex=order[i];if((arrVal+=keyFn(arr[currElemIndex]))===(stackVal+=keyFn(currStack[currElemIndex])))newArr[currElemIndex]=null;else{stackVal="";for(var j=i;j0&&void 0!==arguments[0]?arguments[0]:1,placeholder=arguments.length>1?arguments[1]:void 0,config=arguments.length>2?arguments[2]:void 0,index=arguments.length>3?arguments[3]:void 0,height=placeholder.availHeight(),width=placeholder.availWidth(),borderWidth=config.border.width,unitWidths=config.dimensions.unitWidths,col=index.col;return span_maker_defineProperty(_ref={},"rowSpan",function(){placeholder.setAvailableSpace(width,height*span)}),span_maker_defineProperty(_ref,"colSpan",function(){if(span>1){for(var cumulativeWidth=0,i=col;i0&&void 0!==arguments[0]?arguments[0]:0}},{key:"type",get:function get(){return"simple"}}],[{key:"defaultConfig",value:function defaultConfig(){return{}}}]),SimpleCell}();function enums_defaults_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}var visual_cell_src_props_PROPS,enums_defaults_DEFAULT_CONFIG=(enums_defaults_defineProperty(_DEFAULT_CONFIG={},"margin",(enums_defaults_defineProperty(_CONSTANTS$MARGIN={},visual_cell_src_enums_constants_LEFT,0),enums_defaults_defineProperty(_CONSTANTS$MARGIN,visual_cell_src_enums_constants_RIGHT,0),enums_defaults_defineProperty(_CONSTANTS$MARGIN,visual_cell_src_enums_constants_TOP,0),enums_defaults_defineProperty(_CONSTANTS$MARGIN,visual_cell_src_enums_constants_BOTTOM,0),_CONSTANTS$MARGIN)),enums_defaults_defineProperty(_DEFAULT_CONFIG,"spaceFixer",2),enums_defaults_defineProperty(_DEFAULT_CONFIG,"isOffset",!1),enums_defaults_defineProperty(_DEFAULT_CONFIG,"verticalAlign",null),enums_defaults_defineProperty(_DEFAULT_CONFIG,"textAlign","center"),enums_defaults_defineProperty(_DEFAULT_CONFIG,"show",!0),enums_defaults_defineProperty(_DEFAULT_CONFIG,"maxLines",0),enums_defaults_defineProperty(_DEFAULT_CONFIG,"minCharacters",0),enums_defaults_defineProperty(_DEFAULT_CONFIG,"rotation",null),_DEFAULT_CONFIG);function src_props_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}var DEFAULT_PROPS={mount:{},availHeight:{},availWidth:{},config:{sanitization:function sanitization(context,value){return mergeRecursive(context._config,value)}},logicalSpace:{},minSpacing:{},source:{}},packages_visual_cell_src_props_PROPS=(src_props_defineProperty(visual_cell_src_props_PROPS={},GEOM,mergeRecursive({data:{},caption:{},config:{},axes:{},facetByFields:{},fields:{},transform:{},layerDef:{},detailFields:{}},DEFAULT_PROPS)),src_props_defineProperty(visual_cell_src_props_PROPS,cell_type_TEXT,mergeRecursive({smartText:{}},DEFAULT_PROPS)),src_props_defineProperty(visual_cell_src_props_PROPS,cell_type_AXIS,DEFAULT_PROPS),src_props_defineProperty(visual_cell_src_props_PROPS,BLANK,DEFAULT_PROPS),visual_cell_src_props_PROPS);function axis_cell_typeof(obj){return(axis_cell_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function axis_cell_defineProperties(target,props){for(var i=0;i(availWidth||0)&&maxLines&&(space.height=space.oriTextHeight*maxLines),availWidth&&availWidth":">",'"':""","'":"'","/":"/"};return"".concat(str).replace(/[&<>"'/]/g,function(match){return htmlEscapes[match]})}(rawContent()):rawContent()},createHeading=function createHeading(config,type,labelManager,prevCell){return config?function headerCreator(config,cellType,labelManager,prevCell){var margin={},content=config.content,classPrefix=config.classPrefix,maxLines=config.maxLines,cell=prevCell||new src_text_cell({type:"title"===cellType?"header":"text",className:"".concat(classPrefix,"-").concat(cellType,"-cell")},{labelManager:labelManager}).config({maxLines:maxLines}).minSpacing({width:0,height:0});return cell.source(content),cell._minTickDiff={height:0,width:0},margin=config.position===src_constants_TOP?{top:0,bottom:config.padding}:{top:config.padding,bottom:0},cell.config({margin:margin}),{height:cell.getLogicalSpace().height,cell:cell}}(config,type,labelManager,prevCell):""},legend_maker_legendInitializer=function legendInitializer(legendConfig,canvas,measurement,prevLegends){var legends=[],height=measurement.height,width=measurement.width,headerHeight=measurement.headerHeight,position=legendConfig.position,align=legendConfig.align,legendInfo=function legendCreator(canvas){var LegendCls,dataset=[],axes=canvas.getRetinalAxes();return Object.entries(axes).forEach(function(axisInfo){var scale=axisInfo[1][0],scaleType=axisInfo[0],scaleProps=canvas[scaleType]();if(scaleProps.field&&scale){var _scale$config=scale.config(),type=_scale$config.type,step=_scale$config.step,stepMapper="boolean"==typeof step&&step;LegendCls=LEGEND_TYPE_MAP["".concat(type,"-").concat(stepMapper,"-").concat(scaleType)],dataset.push({scale:scale,canvas:canvas,fieldName:scaleProps.field,title:retrieveFieldDisplayName(canvas.data(),scaleProps.field),LegendCls:LegendCls,scaleType:scaleType})}}),dataset}(canvas),invalidValues=canvas.config().invalidValues,parser=getValueParser(invalidValues);return legendInfo.forEach(function(dataInfo,index){var legend={},legendMeasures={},LegendCls=dataInfo.LegendCls,scale=dataInfo.scale,fieldName=dataInfo.fieldName,titleText=dataInfo.title,scaleType=dataInfo.scaleType,config=legendConfig[scaleType]||{},title=config.title||{};title.text=title.text||titleText,config.show&&(config.position=position,config.align=align,legend=prevLegends[index]?prevLegends[index].legend:LegendCls.create({labelManager:canvas._dependencies.smartlabel,cells:{AxisCell:axis_cell,TextCell:src_text_cell}}),legendMeasures.maxHeight="vertical"===align?height-headerHeight:.2*height,legendMeasures.maxWidth="horizontal"===align?width:.2*width,legendMeasures.width=Math.min(legendMeasures.maxWidth,config.width),legendMeasures.height=Math.min(legendMeasures.maxHeight,config.height),[PADDING,BORDER,MARGIN].forEach(function(e){legendMeasures[e]=config[e]}),legend.scale(scale).valueParser(parser).title(title).fieldName(fieldName).config(config).metaData(canvas.composition().visualGroup.getGroupByData().project([fieldName])).measurement(legendMeasures).canvasAlias(canvas.alias()).setLegendMeasures(),legends.push({canvas:canvas,legend:legend,scaleType:scaleType}))}),legends};function muze_chart_component_typeof(obj){return(muze_chart_component_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function muze_chart_component_defineProperties(target,props){for(var i=0;icurrHeight?(sections++,currWidth=0,currHeight=legHeight):sections<0&§ions++,sectionComponents[sections]=sectionComponents[sections]||[],currHeight-=Math.min(leg.measurement().height,currHeight),currWidth=Math.max(Math.min(leg.measurement().width,leg.measurement().maxWidth),currWidth),sectionComponents[sections].push({legend:leg,legendHeight:legHeight,legendWidth:currWidth})});var mount=makeElement(legendMount,["div"],sectionComponents,"".concat(classPrefix,"-legend-section"));mount.classed("".concat(classPrefix,"-legend-vertical-section"),!0).style("width",function(d){return"".concat(d[0].legendWidth,"px")}),makeElement(mount,["div"],function(d){return d},"".concat(classPrefix,"-legend-components"),{},function(d){return d.legend.id()}).each(function(d){d.legend.mount(this)}).style("width",function(d){return"".concat(d.legendWidth,"px")})}else{var _mount=makeElement(legendMount,"div",[1],"".concat(classPrefix,"-legend-section"));_mount.classed("".concat(classPrefix,"-legend-horizontal-section"),!0),_mount.classed("".concat(classPrefix,"-legend-section-",0),!0).style("width","".concat(legWidth,"px")),makeElement(_mount,"div",this.components,"".concat(classPrefix,"-legend-components"),{},function(d){return d.legend.id()}).each(function(d){d.legend.mount(this)}).style("width",function(d){return"".concat(d.legend.measurement().width,"px")})}}},{key:"draw",value:function draw(container){this.renderLegend(container||document.getElementById(this.renderAt()))}},{key:"updateWrapper",value:function updateWrapper(params){return this.name(params.name),this.boundBox(params.config.measurement.legendSpace),this.setParams(params),this}},{key:"setParams",value:function setParams(params){this.components=params.component,this.params=params,this.target(params.config.target),this.position(params.config.position);var _defaultAlignmentHelp=function defaultAlignmentHelper(position){var alignment=null,alignWith="".concat(ROW_MATRIX_INDEX[1],"-").concat(COLUMN_MATRIX_INDEX[1]);switch(position){case src_constants_TOP:case src_constants_BOTTOM:alignment=HORIZONTAL_CENTER;break;case src_constants_LEFT:case src_constants_RIGHT:alignment=VERTICAL_CENTER;break;default:alignment=VERTICAL_CENTER}return{alignment:alignment,alignWith:alignWith}}(params.config.position),alignWith=_defaultAlignmentHelp.alignWith,alignment=_defaultAlignmentHelp.alignment;this.className(params.config.className),this.alignWith(params.config.alignWith||alignWith),this.alignment(params.config.alignment||alignment)}}]),LegendComponent}(),helper_d3Drag=(__webpack_require__(25),renderer_utils_getD3Drag()),arrowSizeMap={left:"width",right:"width",top:"height",bottom:"height"},getUnitPositions=function getUnitPositions(unitMeasures,totalLength,viewLength){var currentLen=0;return(unitMeasures.primary&&unitMeasures.primary.length?unitMeasures.primary:unitMeasures.secondary).map(function(e){var unitPosition=100*currentLen/(totalLength-viewLength);return currentLen+=e,unitPosition})},helper_createScrollBarArrow=function createScrollBarArrow(mount,type,config){var classPrefix=config.classPrefix,thickness=config.thickness,arrow=makeElement(mount,"div",[type],"".concat(classPrefix,"-scroll-arrow-").concat(type));return arrow.classed("".concat(classPrefix,"-scroll-arrow"),!0),arrow.style(arrowSizeMap[type],"".concat(thickness,"px")),makeElement(arrow,"div",[1],"".concat(classPrefix,"-scroll-arrow-chevron")).attr("id","".concat(classPrefix,"-scroll-arrow-chevron-").concat(type)),arrow},helper_createScrollBarRect=function createScrollBarRect(mount,config){var classPrefix=config.classPrefix,rect=makeElement(mount,"div",[1],"".concat(classPrefix,"-scroll-rect"));return{rect:rect,mover:makeElement(rect,"div",[1],"".concat(classPrefix,"-scroll-mover"))}},applyScrollMouseDownAction=function applyScrollMouseDownAction(moverRect,scrollMaker,speed){var mover=moverRect.mover,rect=moverRect.rect,_mover$node$getBoundi=mover.node().getBoundingClientRect(),x=_mover$node$getBoundi.x,y=_mover$node$getBoundi.y,_rect$node$getBoundin=rect.node().getBoundingClientRect(),rectX=_rect$node$getBoundin.x,rectY=_rect$node$getBoundin.y;scrollMaker.changeMoverPosition({x:x-rectX+speed,y:y-rectY+speed})},helper_registerListenerOnArrow=function registerListenerOnArrow(scrollMaker,moverRect,arrowType,speed){var timer="",arrow=scrollMaker._components[arrowType],isTouchDevice=hasTouch();arrow.on(isTouchDevice?"touchstart":"mousedown",function(){renderer_utils_getEvent().preventDefault(),timer=setInterval(function(){applyScrollMouseDownAction(moverRect,scrollMaker,speed)},100)}).on(isTouchDevice?"touchend":"mouseup",function(){renderer_utils_getEvent().preventDefault(),clearInterval(timer)}).on("click",function(){applyScrollMouseDownAction(moverRect,scrollMaker,speed)})},scroll_bar_maker_helper_registerListeners=function registerListeners(scrollMaker){var moverRect=scrollMaker._components.moverRect,speed=scrollMaker.config().speed;helper_registerListenerOnArrow(scrollMaker,moverRect,"prevArrow",-speed),function applyMoverDrag(scrollMaker,moverRect){var startPos={},moverStartPos=0,rectStartPos=0,endPos={},mover=moverRect.mover,rect=moverRect.rect;mover.call(helper_d3Drag().on("start",function(){var event=renderer_utils_getEvent();moverStartPos=mover.node().getBoundingClientRect(),rectStartPos=rect.node().getBoundingClientRect(),startPos={x:event.x,y:event.y}}).on("drag",function(){var event=renderer_utils_getEvent(),window=getWindow(),distanceMoved_x=(endPos={x:event.x,y:event.y}).x-startPos.x,distanceMoved_y=endPos.y-startPos.y,actualPosition={x:moverStartPos.x+distanceMoved_x-rectStartPos.x+window.pageXOffset,y:moverStartPos.y+distanceMoved_y-rectStartPos.y+window.pageYOffset};scrollMaker.changeMoverPosition(actualPosition)}))}(scrollMaker,moverRect),function applyRectClick(scrollMaker,moverRect){moverRect.rect.on("click",function(){var event=renderer_utils_getEvent();scrollMaker.emptyScrollAreaClick(event)})}(scrollMaker,moverRect),helper_registerListenerOnArrow(scrollMaker,moverRect,"nextArrow",speed)},scroll_bar_maker_props_PROPS={config:{sanitization:function sanitization(context,value){return value=mergeRecursive(context._config,value)}},manager:{},unitPositions:{},logicalSpace:{}};function scroll_maker_defineProperties(target,props){for(var i=0;i1&&void 0!==arguments[1]?arguments[1]:this.logicalSpace(),config=this.config(),scrollBarContainer=horizontal_scroll_maker_get(horizontal_scroll_maker_getPrototypeOf(HorizontalScrollMaker.prototype),"createScroll",this).call(this,mountPoint,config,dimensions).scrollBarContainer,prevArrow=helper_createScrollBarArrow(scrollBarContainer,"left",config),moverRect=helper_createScrollBarRect(scrollBarContainer,config),nextArrow=helper_createScrollBarArrow(scrollBarContainer,"right",config),mover=moverRect.mover,rect=moverRect.rect,_this$logicalSpace=this.logicalSpace(),height=_this$logicalSpace.height,width=_this$logicalSpace.width,totalLength=_this$logicalSpace.totalLength,viewLength=_this$logicalSpace.viewLength,unitWidths=_this$logicalSpace.unitWidths,scrollBarWithouArrowLength=width-2*height;rect.style("width","".concat(dimensions.width-2*height,"px")),rect.style("height","".concat(100,"%")),mover.style("width","".concat(viewLength*scrollBarWithouArrowLength/totalLength,"px")),mover.style("height","".concat(100,"%")),mover.style(src_constants_LEFT,"".concat(0,"px")),this._components={prevArrow:prevArrow,nextArrow:nextArrow,moverRect:moverRect,scrollBarContainer:scrollBarContainer},this._scrollBarWithouArrowLength=scrollBarWithouArrowLength,this.unitPositions(getUnitPositions(unitWidths,totalLength,viewLength)),this.registerListeners()}},{key:"emptyScrollAreaClick",value:function emptyScrollAreaClick(event){var _this$_components$mov=this._components.moverRect,mover=_this$_components$mov.mover,rect=_this$_components$mov.rect,speed=this.config().speed,_mover$node$getBoundi=mover.node().getBoundingClientRect(),x=_mover$node$getBoundi.x,y=_mover$node$getBoundi.y,_rect$node$getBoundin=rect.node().getBoundingClientRect(),rectX=_rect$node$getBoundin.x,rectY=_rect$node$getBoundin.y,positionAdjuster=10*speed;event.xrectStartPos.width?rectStartPos.width-moverPos.width:newPosition.x,mover.style(src_constants_LEFT,"".concat(currentPos,"px"));var movedViewLength=currentPos*totalLength/this._scrollBarWithouArrowLength;this.manager().performAttachedScrollFunction(this.constructor.type(),movedViewLength)}},{key:"scrollDeltaTo",value:function scrollDeltaTo(delta){var _this$_components$mov3=this._components.moverRect,mover=_this$_components$mov3.mover,rect=_this$_components$mov3.rect,moverPos=mover.node().getBoundingClientRect(),rectStartPos=rect.node().getBoundingClientRect();return this.changeMoverPosition({y:0,x:moverPos.x-rectStartPos.x-delta}),this}},{key:"scrollTo",value:function scrollTo(scrollPercentage){var moverPos=this._components.moverRect.mover.node().getBoundingClientRect(),movement=scrollPercentage*(this._scrollBarWithouArrowLength-moverPos.width)/100;return this.changeMoverPosition({y:0,x:movement}),this}}],[{key:"type",value:function type(){return"horizontal"}}]),HorizontalScrollMaker}(),vertical:function(_ScrollMaker){function VerticalScrollMaker(){return function vertical_scroll_maker_classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}(this,VerticalScrollMaker),vertical_scroll_maker_possibleConstructorReturn(this,vertical_scroll_maker_getPrototypeOf(VerticalScrollMaker).apply(this,arguments))}return function vertical_scroll_maker_inherits(subClass,superClass){if("function"!=typeof superClass&&null!==superClass)throw new TypeError("Super expression must either be null or a function");subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:!0,configurable:!0}}),superClass&&vertical_scroll_maker_setPrototypeOf(subClass,superClass)}(VerticalScrollMaker,scroll_maker_ScrollMaker),function vertical_scroll_maker_createClass(Constructor,protoProps,staticProps){return protoProps&&vertical_scroll_maker_defineProperties(Constructor.prototype,protoProps),staticProps&&vertical_scroll_maker_defineProperties(Constructor,staticProps),Constructor}(VerticalScrollMaker,[{key:"createScroll",value:function createScroll(mountPoint){var dimensions=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.logicalSpace(),config=this.config(),scrollBarContainer=vertical_scroll_maker_get(vertical_scroll_maker_getPrototypeOf(VerticalScrollMaker.prototype),"createScroll",this).call(this,mountPoint,dimensions).scrollBarContainer,prevArrow=helper_createScrollBarArrow(scrollBarContainer,"top",config),moverRect=helper_createScrollBarRect(scrollBarContainer,config),nextArrow=helper_createScrollBarArrow(scrollBarContainer,"bottom",config),mover=moverRect.mover,rect=moverRect.rect,_this$logicalSpace=this.logicalSpace(),height=_this$logicalSpace.height,width=_this$logicalSpace.width,totalLength=_this$logicalSpace.totalLength,viewLength=_this$logicalSpace.viewLength,unitHeights=_this$logicalSpace.unitHeights,scrollBarWithouArrowLength=height-2*width;rect.style("height","".concat(scrollBarWithouArrowLength,"px")),rect.style("width","".concat(100,"%")),mover.style("width","".concat(100,"%")),mover.style("height","".concat(viewLength*scrollBarWithouArrowLength/totalLength,"px")),mover.style(src_constants_TOP,"".concat(0,"px")),this._components={prevArrow:prevArrow,nextArrow:nextArrow,moverRect:moverRect,scrollBarContainer:scrollBarContainer},this._scrollBarWithouArrowLength=scrollBarWithouArrowLength,this.unitPositions(getUnitPositions(unitHeights,totalLength,viewLength)),this.registerListeners()}},{key:"emptyScrollAreaClick",value:function emptyScrollAreaClick(event){var _this$_components$mov=this._components.moverRect,mover=_this$_components$mov.mover,rect=_this$_components$mov.rect,speed=this.config().speed,_mover$node$getBoundi=mover.node().getBoundingClientRect(),x=_mover$node$getBoundi.x,y=_mover$node$getBoundi.y,_rect$node$getBoundin=rect.node().getBoundingClientRect(),rectX=_rect$node$getBoundin.x,rectY=_rect$node$getBoundin.y,positionAdjuster=10*speed;event.yrectStartPos.height?rectStartPos.height-moverPos.height:newPosition.y,mover.style(src_constants_TOP,"".concat(currentPos,"px"));var movedViewLength=currentPos*totalLength/this._scrollBarWithouArrowLength;this.manager().performAttachedScrollFunction(this.constructor.type(),movedViewLength)}},{key:"scrollDeltaTo",value:function scrollDeltaTo(delta){var _this$_components$mov3=this._components.moverRect,mover=_this$_components$mov3.mover,rect=_this$_components$mov3.rect,moverPos=mover.node().getBoundingClientRect(),rectStartPos=rect.node().getBoundingClientRect();return this.changeMoverPosition({y:moverPos.y-rectStartPos.y-delta,x:0}),this}},{key:"scrollTo",value:function scrollTo(scrollPercentage){var moverPos=this._components.moverRect.mover.node().getBoundingClientRect(),movement=scrollPercentage*(this._scrollBarWithouArrowLength-moverPos.height)/100;return this.changeMoverPosition({x:0,y:movement}),this}}],[{key:"type",value:function type(){return"vertical"}}]),VerticalScrollMaker}()},ScrollComponent=function(_MuzeComponent){function ScrollComponent(params){var _this;!function scroll_component_classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}(this,ScrollComponent);var ScrollMaker=scrollMakerMap[params.config.type];return params.component=new ScrollMaker,params.component.config(params.config.scrollBarComponentConfig),params.component.logicalSpace(params.dimensions),(_this=scroll_component_possibleConstructorReturn(this,scroll_component_getPrototypeOf(ScrollComponent).call(this,params.name,params.component.getLogicalSpace(),0))).setParams(params),_this}return function scroll_component_inherits(subClass,superClass){if("function"!=typeof superClass&&null!==superClass)throw new TypeError("Super expression must either be null or a function");subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:!0,configurable:!0}}),superClass&&scroll_component_setPrototypeOf(subClass,superClass)}(ScrollComponent,MuzeComponent),function scroll_component_createClass(Constructor,protoProps,staticProps){return protoProps&&scroll_component_defineProperties(Constructor.prototype,protoProps),staticProps&&scroll_component_defineProperties(Constructor,staticProps),Constructor}(ScrollComponent,[{key:"manager",value:function manager(){return arguments.length?(this.component.manager(arguments.length<=0?void 0:arguments[0]),this):this.component.manager()}},{key:"scrollDeltaTo",value:function scrollDeltaTo(delta){return this.component.scrollDeltaTo(delta),this}},{key:"scrollTo",value:function scrollTo(scrollPercentage){return this.component.scrollTo(scrollPercentage),this}},{key:"scrollToUnitIndex",value:function scrollToUnitIndex(unitIndex){var unitPositions=this.component.unitPositions(),sanitizedUnitIndex=Math.min(Math.max(0,unitIndex),unitPositions.length-1);return this.component.scrollTo(unitPositions[sanitizedUnitIndex]),this}},{key:"getScrollPositionsForUnits",value:function getScrollPositionsForUnits(){return this.component.unitPositions()}},{key:"draw",value:function draw(container){return this.component.createScroll(container||document.getElementById(this.renderAt())),this}},{key:"attachScrollAction",value:function attachScrollAction(externalAction){return this.component.attachScrollAction(externalAction),this}},{key:"detachScrollAction",value:function detachScrollAction(){return this.component.detachScrollAction(),this}},{key:"updateWrapper",value:function updateWrapper(params){return this.name(params.name),this.component.config(params.config.scrollBarComponentConfig),this.component.logicalSpace(params.dimensions),this.boundBox(this.component.getLogicalSpace()),this.setParams(params),this}},{key:"setParams",value:function setParams(params){this.component=params.component||this.component,this.params=params,this.target(params.config.target),this.position(params.config.position),this.className(params.config.className),this.alignWith(params.config.alignWith),this.alignment(params.config.alignment)}},{key:"remove",value:function remove(){this.component.remove()}}]),ScrollComponent}();function matrix_component_typeof(obj){return(matrix_component_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function matrix_component_defineProperties(target,props){for(var i=0;iMath.abs(wheelDeltaY)&&_this2.scrollBarManager().triggerScrollBarAction("horizontal",wheelDeltaX/30),0!==wheelDeltaY&&Math.abs(wheelDeltaX)0?heightAttr:height,minHeight),availableWidthForCanvas=Math.max(widthAttr>0?widthAttr:width,minWidth),_createHeaders=function createHeaders(context,canvasHeight,canvasWidth){var headerHeight=0,headers={},subtitle=context.subtitle(),isSubtitle=title_maker_resolveTitleSubTitleContent(subtitle[0]);return canvasHeight>=200&&canvasWidth>=200&&["title","subtitle"].forEach(function(type){var headerOptions=context[type](),content=title_maker_resolveTitleSubTitleContent(headerOptions[0]);if(content){var config=headerOptions[1];config.width=context.width(),config.height=context.height(),config.classPrefix=context.config().classPrefix,config.content=content,config.padding="title"!==type||isSubtitle.length?config.padding:subtitle[1].padding;var _createHeading=createHeading(config,type,context.dependencies().smartlabel,context["".concat(type,"Cell")]),height=_createHeading.height,cell=_createHeading.cell;headers["".concat(type,"Cell")]=cell,context._composition[type]=cell,headerHeight+=height}}),{headerHeight:headerHeight,headers:headers}}(context,availableHeightForCanvas,availableWidthForCanvas),headers=_createHeaders.headers,headerHeight=_createHeaders.headerHeight,legends=function createLegend(context,headerHeight,height,width){var measurement={height:height,width:width,headerHeight:headerHeight},legend=context.config().legend,show=legend.show,position=legend.position;legend.classPrefix=context.config().classPrefix;var align=position===src_constants_LEFT||position===src_constants_RIGHT?"vertical":"horizontal";return legend.show=show?"vertical"===align&&width>200||"horizontal"===align&&height>200:show,legend.align=align,legend_maker_legendInitializer(legend,context,measurement,context.legends||[])}(context,headerHeight,availableHeightForCanvas,availableWidthForCanvas);context._composition.legend={},legends.forEach(function(e){context._composition.legend[e.scaleType]=e.legend});var legendSpace=function getLegendSpace(legends,legendConfig,availableHeight,availableWidth){var legendSpace={width:0,height:0};return legends.map(function(legendInfo){return legendInfo.legend.measurement()}).forEach(function(space){var height,width;width=Math.min(space.width,space.maxWidth),height=Math.min(space.height,space.maxHeight),"horizontal"===legendConfig.align?legendSpace.width+width>availableWidth?(legendSpace.width=availableWidth,legendSpace.height+=height):(legendSpace.width+=width,legendSpace.height=Math.max(legendSpace.height,height)):legendSpace.height+height>availableHeight?(legendSpace.height=height,legendSpace.width+=width):(legendSpace.height+=height,legendSpace.width=Math.max(legendSpace.width,width))}),"horizontal"===legendConfig.align&&(legendSpace.width=availableWidth),legendSpace}(legends,legend,availableHeightForCanvas,availableWidthForCanvas),legendWidth=legendPosition===src_constants_LEFT||legendPosition===src_constants_RIGHT?legendSpace.width:0,legendHeight=legendPosition===src_constants_TOP||legendPosition===src_constants_BOTTOM?legendSpace.height:0,components={headers:headers,legends:legends,canvases:[context],rows:rows,columns:columns,values:values,cornerMatrices:visGroup.cornerMatrices()},measurement={mountSpace:{height:height,width:width},headerHeight:headerHeight,legendSpace:legendSpace,canvasWidth:availableWidthForCanvas,canvasHeight:availableHeightForCanvas,width:availableWidthForCanvas-legendWidth,height:availableHeightForCanvas-headerHeight-legendHeight,minUnitHeight:context.minUnitHeight(),minUnitWidth:context.minUnitWidth()};return{layoutConfig:layoutConfig=mergeRecursive(layoutConfig,{classPrefix:classPrefix,showHeaders:showHeaders,border:mergeRecursive(visGroup.metaData().border,context.config().border),layoutArrangement:layoutArrangement,legend:legend,buffer:scrollBar.thickness,pagination:pagination,title:titleConfig,subtitle:subtitleConfig,isColumnSizeEqual:isColumnSizeEqual,isRowSizeEqual:isRowSizeEqual,mount:mount,priority:priority}),components:components,measurement:measurement}},componentIndexes={title:0,subtitle:1,legend:2,verticalScrollBar:3,horizontalScrollBar:4,grid:5},componentNames={0:"title",1:"subtitle",2:"legend",3:"verticalScrollBar",4:"horizontalScrollBar",5:"grid"},layout_maker_renderLayout=function renderLayout(canvas,renderDetails){var layoutManager=canvas._layoutManager,gridLayout=canvas.layout(),grid=componentIndexes.grid,compWrappers=component_wrapper_maker_componentWrapperMaker(layoutManager,gridLayout,renderDetails),componentWrappers=Object.keys(componentIndexes).map(function(e){return compWrappers[e]}),gridWrapper=componentWrappers[grid];!function createScrollManager(componentWrappers,canvas){var verticalScrollBar=componentIndexes.verticalScrollBar,grid=componentIndexes.grid,horizontalScrollWrapper=componentWrappers[componentIndexes.horizontalScrollBar],verticalScrollWrapper=componentWrappers[verticalScrollBar],gridWrapper=componentWrappers[grid],scrollBarManager=new ScrollManager,scrollBarComponents={};verticalScrollWrapper&&(scrollBarComponents.vertical=verticalScrollWrapper),horizontalScrollWrapper&&(scrollBarComponents.horizontal=horizontalScrollWrapper),scrollBarManager.scrollBarComponents(scrollBarComponents).attachedComponents({grid:gridWrapper}),canvas.composition().hScrollBar=horizontalScrollWrapper,canvas.composition().vScrollBar=verticalScrollWrapper,[horizontalScrollWrapper,verticalScrollWrapper].forEach(function(wrapper){wrapper&&wrapper.manager(scrollBarManager)}),gridWrapper.scrollBarManager(scrollBarManager)}(componentWrappers,canvas),componentWrappers.forEach(function(componentWrapper,index){if(null===componentWrapper){var deleteElementName=componentNames[index],component=layoutManager.getComponent(deleteElementName),deleteElementId=component?component.renderAt():null;layoutManager.removeComponent(deleteElementId)}}),layoutManager.registerComponents(componentWrappers).compute(),gridWrapper.attachScrollListener()};function group_firebolt_typeof(obj){return(group_firebolt_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function group_firebolt_defineProperties(target,props){for(var i=0;i","\"","'","/","createHeading","prevCell","cellType","_minTickDiff","legendInitializer","legendConfig","prevLegends","legends","headerHeight","legendInfo","legendCreator","LegendCls","dataset","scaleProps","_scale$config","stepMapper","dataInfo","legendMeasures","getGroupByData","setLegendMeasures","MuzeComponent","_this$boundBox","HeaderComponent","headerComponent_classCallCheck","headerComponent_possibleConstructorReturn","headerComponent_getPrototypeOf","setParams","cont","renderHeader","LegendComponent","legendComponent_classCallCheck","legendComponent_possibleConstructorReturn","legendComponent_getPrototypeOf","legendSpace","sectionComponents","_this$params$config","legendMount","legWidth","legHeight","sections","currHeight","currWidth","leg","legendHeight","legendWidth","renderLegend","_defaultAlignmentHelp","defaultAlignmentHelper","arrowSizeMap","getUnitPositions","totalLength","viewLength","currentLen","unitPosition","createScrollBarArrow","createScrollBarRect","mover","applyScrollMouseDownAction","moverRect","scrollMaker","_mover$node$getBoundi","_rect$node$getBoundin","rectX","rectY","changeMoverPosition","registerListenerOnArrow","arrowType","_components","isTouchDevice","applyMoverDrag","moverStartPos","rectStartPos","distanceMoved","actualPosition","pageXOffset","pageYOffset","applyRectClick","emptyScrollAreaClick","manager","unitPositions","ScrollMaker","scroll_maker_classCallCheck","_attachedScrollAction","_unitPositions","scroll_maker_createClass","scrollTo","scrollDeltaTo","createScroll","scrollBarContainer","scrollContainerHelper","attachScrollAction","externalScrollAction","detachScrollAction","scrollMakerMap","_ScrollMaker","HorizontalScrollMaker","horizontal_scroll_maker_classCallCheck","horizontal_scroll_maker_possibleConstructorReturn","horizontal_scroll_maker_getPrototypeOf","horizontal_scroll_maker_inherits","horizontal_scroll_maker_createClass","horizontal_scroll_maker_get","prevArrow","nextArrow","_this$logicalSpace","scrollBarWithouArrowLength","_scrollBarWithouArrowLength","_this$_components$mov","positionAdjuster","newPosition","currentPos","_this$_components$mov2","moverPos","movedViewLength","performAttachedScrollFunction","delta","_this$_components$mov3","scrollPercentage","movement","VerticalScrollMaker","vertical_scroll_maker_classCallCheck","vertical_scroll_maker_possibleConstructorReturn","vertical_scroll_maker_getPrototypeOf","vertical_scroll_maker_inherits","vertical_scroll_maker_createClass","vertical_scroll_maker_get","ScrollComponent","scroll_component_classCallCheck","scrollBarComponentConfig","scroll_component_possibleConstructorReturn","scroll_component_getPrototypeOf","unitIndex","sanitizedUnitIndex","externalAction","MatrixComponent","matrix_component_classCallCheck","matrix_component_possibleConstructorReturn","matrix_component_getPrototypeOf","_this$params$config$s","containerForMatrix","applyScroll","_cellSpanMaker","cellSpanMaker","_matrixSpanGenerator","renderTable","applySpans","applier","renderPlaceholders","renderMatrix","applyScrollAction","scollDistance","GridComponent","grid_component_classCallCheck","grid_component_possibleConstructorReturn","grid_component_getPrototypeOf","_this$component$viewI","matrixDim","matrixName","updateWrapper","matrixWrapper","allComponents","_scrollBarManager","wheelDeltaX","wheelDeltaY","scrollBarManager","triggerScrollBarAction","movedView","scrollActionApplier","_this$component$0$0$b","sanitizeGrid","headerMap","headerCell","configType","createHeaderWrapper","headerType","layoutManager","renderDetails","_headerMap$headerType","headerConfig","component_wrapper_maker_objectSpread","wrapperParams","existingComponent","createScrollBarWrapper","scrollBarType","grid","_scrollBarMap$scrollB","scrollBarMap","layoutBasedMeasure","viewMeasure","rowAlign","colAlign","componentWrapperMaker","createLegendWrapper","legendWrapper","gridLayoutWrapper","verticalScrollBar","horizontalScrollBar","ScrollManager","scroll_manager_classCallCheck","_scrollBarComponents","_attachedComponents","scroll_manager_createClass","scrollBarComponents","attachedComponents","performScrollAction","getRenderDetails","_mount$getBoundingCli","heightAttr","widthAttr","visGroup","_visGroup$placeholder","legendPosition","layoutArrangement","arrangeComponents","_titleLayouts","titleLayouts","component_resolver_defineProperty","legendLayouts","titlePosition","subtitlePosition","availableHeightForCanvas","availableWidthForCanvas","_createHeaders","canvasHeight","canvasWidth","isSubtitle","headerOptions","_createHeading","createLegend","getLegendSpace","mountSpace","componentIndexes","renderLayout","_layoutManager","gridLayout","compWrappers","componentWrappers","gridWrapper","createScrollManager","horizontalScrollWrapper","verticalScrollWrapper","hScrollBar","vScrollBar","registerComponents","attachScrollListener","defaultInteractionPolicy","isMeasure","group_firebolt_toConsumableArray","getFieldsFromChannel","colDim","fieldInf","unitColFacets","equals","unitRowFacets","propagateWith","defaultCrossInteractionPolicy","propagationCanvasAlias","propagationUnit","GroupFireBolt","group_firebolt_classCallCheck","group_firebolt_possibleConstructorReturn","group_firebolt_getPrototypeOf","behaviouralAction","validFields","APP_INITIAL_STATE","app","Canvas","globalDependencies","canvas_classCallCheck","canvas_possibleConstructorReturn","canvas_getPrototypeOf","canvas_defineProperty","canvas_slicedToArray","canvas_assertThisInitialized","initedComponents","initCanvas","createGroupState","_VisualGroup$getState2","canvas_helper_slicedToArray","localState","register","prepareLayout","triggerReflow","setLayoutInfForUnits","getBoundBox","getRootNodeId","setLabelRotationForAxes","rotationVal","getAxes","initialSettings","regEntry","COMPONENTS","SUBREGISTRIES","regObj","globalCache","defaultRegistry","overrideRegistryDefinitions","overrideRegistry","muze","_transactor2","muze_slicedToArray","env","globalStore","componentSubRegistryDef","settings","withSettings","enableChainedTransaction","transactionModel","transactionEndpoint","transactionItems","Smartlabel","SideEffects","standards","Behaviours","operators","utils","lookupWhat","lookupDetails","lookupTarget","deps"],"mappings":"CAAA,SAAAA,iCAAAC,KAAAC,SACA,iBAAAC,SAAA,iBAAAC,OACAA,OAAAD,QAAAD,UACA,mBAAAG,eAAAC,IACAD,OAAA,UAAAH,SACA,iBAAAC,QACAA,QAAA,KAAAD,UAEAD,KAAA,KAAAC,UARA,CASCK,OAAA,WACD,yBCTA,IAAAC,oBAGA,SAAAC,oBAAAC,UAGA,GAAAF,iBAAAE,UACA,OAAAF,iBAAAE,UAAAP,QAGA,IAAAC,OAAAI,iBAAAE,WACAC,EAAAD,SACAE,GAAA,EACAT,YAUA,OANAU,QAAAH,UAAAI,KAAAV,OAAAD,QAAAC,cAAAD,QAAAM,qBAGAL,OAAAQ,GAAA,EAGAR,OAAAD,QA0DA,OArDAM,oBAAAM,EAAAF,QAGAJ,oBAAAO,EAAAR,iBAGAC,oBAAAQ,EAAA,SAAAd,QAAAe,KAAAC,QACAV,oBAAAW,EAAAjB,QAAAe,OACAG,OAAAC,eAAAnB,QAAAe,MAA0CK,YAAA,EAAAC,IAAAL,UAK1CV,oBAAAgB,EAAA,SAAAtB,SACA,oBAAAuB,eAAAC,aACAN,OAAAC,eAAAnB,QAAAuB,OAAAC,aAAwDC,MAAA,WAExDP,OAAAC,eAAAnB,QAAA,cAAiDyB,OAAA,KAQjDnB,oBAAAoB,EAAA,SAAAD,MAAAE,MAEA,GADA,EAAAA,OAAAF,MAAAnB,oBAAAmB,QACA,EAAAE,KAAA,OAAAF,MACA,KAAAE,MAAA,iBAAAF,oBAAAG,WAAA,OAAAH,MACA,IAAAI,GAAAX,OAAAY,OAAA,MAGA,GAFAxB,oBAAAgB,EAAAO,IACAX,OAAAC,eAAAU,GAAA,WAAyCT,YAAA,EAAAK,cACzC,EAAAE,MAAA,iBAAAF,MAAA,QAAAM,OAAAN,MAAAnB,oBAAAQ,EAAAe,GAAAE,IAAA,SAAAA,KAAgH,OAAAN,MAAAM,MAAqBC,KAAA,KAAAD,MACrI,OAAAF,IAIAvB,oBAAA2B,EAAA,SAAAhC,QACA,IAAAe,OAAAf,eAAA2B,WACA,SAAAM,aAA2B,OAAAjC,OAAA,SAC3B,SAAAkC,mBAAiC,OAAAlC,QAEjC,OADAK,oBAAAQ,EAAAE,OAAA,IAAAA,QACAA,QAIAV,oBAAAW,EAAA,SAAAmB,OAAAC,UAAsD,OAAAnB,OAAAoB,UAAAC,eAAA5B,KAAAyB,OAAAC,WAGtD/B,oBAAAkC,EAAA,GAIAlC,wCAAAmC,EAAA,sbClFA,SAAAC,EAAAhB,GACA,UAAAiB,QAAA3C,UAAA,UAAA2C,QAAA1C,QACAA,oBAEAC,yRAJA,CASCE,kBACD,gBAAAsC,GCTA,IAAAhB,KAGA,SAAAO,EAAAX,GAGA,GAAAI,EAAAJ,GACA,OAAAI,EAAAJ,GAAAtB,QAGA,IAAA4C,EAAAlB,EAAAJ,IACAd,IACAC,KACAT,YAUA,OANAU,mCAGAT,OAGA2C,EAAA5C,QA0DA,OArDAM,MAGAA,MAGAA,oBACAA,UACAY,2BAA0CE,uBAK1Cd,gBACA,oBAAAiB,eAAAC,aACAN,4CAAwDO,iBAExDP,sCAAiDO,YAQjDnB,kBAEA,GADA,EAAAoB,IAAAgB,EAAAT,EAAAS,IACA,EAAAhB,EAAA,OAAAgB,EACA,KAAAhB,GAAA,UAAAiB,QAAAD,SAAAd,WAAA,OAAAc,EACA,IAAApB,EAAAJ,OAAAY,OAAA,MAGA,GAFAxB,OACAY,mCAAyCE,wBACzC,EAAAM,GAAA,iBAAAgB,EAAA,QAAAE,KAAAF,EAAAT,EAAAnB,EAAAQ,EAAAsB,EAAA,SAAAlB,GAAgH,OAAAgB,EAAAhB,IAAqBM,cACrI,OAAAV,GAIAhB,gBACA,IAAAoB,EAAAgB,KAAAd,WACA,WAA2B,OAAAc,EAAAG,SAC3B,WAAiC,OAAAH,GAEjC,OADApC,aACAoB,GAIApB,kBAAsD,OAAAY,OAAAoB,UAAAC,eAAA5B,KAAA+B,EAAAhB,IAGtDpB,OAIA2B,IAAAQ,EAAA,GDxEA,ECwEA,SAAAC,KAAA1C,SAAAe,KAAA,YAAA+B,YAAA,4DAAAC,SAAA,wCAAAC,QAAA,QAAAC,QAAA,MAAAC,KAAA,oBAAAC,OAAA,kCAAAC,UAAA,uGAAAC,YAAAC,KAAA,MAAAC,IAAA,6CAAAC,eAAAzC,KAAA,gBAAA0C,MAAA,qBAAA1C,KAAA,iBAAA0C,MAAA,uBAAA1C,KAAA,aAAA0C,MAAA,oBAAAF,IAAA,sBAAAxC,KAAA,oBAAA0C,MAAA,qBAAAC,cAAAC,SAAA,UAAAC,iBAAAC,YAAA,SAAAC,aAAA,UAAAC,eAAA,QAAAC,eAAA,SAAAC,iCAAA,UAAAC,mBAAA,SAAAC,sBAAA,UAAAC,oBAAA,UAAAC,KAAA,QAAAC,YAAA,SAAAC,OAAA,SAAAC,uBAAA,SAAAC,uBAAA,QAAAC,yBAAA,QAAAC,sBAAA,QAAAC,+BAAA,SAAAC,MAAA,QAAAC,UAAA,SAAAC,MAAA,QAAAC,aAAA,QAAAC,wBAAA,QAAAC,mCAAA,SAAAC,cAAA,QAAAC,sBAAA,SAAAC,gBAAA,QAAAC,OAAA,SAAAC,MAAA,QAAAC,gBAAA,QAAAC,oBAAA,QAAAC,QAAA,UAAAC,cAAA,SAAAC,qBAAA,UAAAC,SAAAC,KAAA,6BAAAC,GAAA,4BAAAC,IAAA,kEAAAC,MAAA,4BAAAC,MAAA,8EAAAC,KAAA,eAAAC,cAAA,uBAAAC,KAAA,oEAAA3D,EAAAhB,EAAAO,GClFA,IAAMqE,EAAYC,EAAQ,GAE1BtG,EAAOD,QAAUsG,EAAUzD,QAAUyD,EAAUzD,QAAUyD,ouBCKzD,IAOeE,GANXC,UAAW,WACXC,QAAS,SACTC,QAAS,SACTC,KAAM,QCEKC,GANXC,YAAa,cACbC,SAAU,WACVC,IAAK,MACLC,OAAQ,UCAGC,GAHXC,WAAY,cCKDC,GAJXC,QAAS,UACTC,UAAW,aCGAC,GALXC,OAAQ,SACRC,QAAS,UACTC,IAAK,OCHT,SAASC,EAAqBC,GAC1B,OAAIA,aAAgBC,KACTD,EAGJ,IAAIC,KAAKD,GASpB,SAASE,EAAK7F,GACV,OAAQA,EAAI,GAAL,IAAgBA,EAAOA,EA8BP,SAAS8F,EAAmBC,GACnDC,KAAKD,OAASA,EACdC,KAAKC,gBACLD,KAAKE,kBAfTC,OAAOC,OAAS,SAAUC,GACtB,OAAOA,EAAKC,QAAQ,2BAA4B,SAkBpDR,EAAkBS,aAAe,IAIjCT,EAAkBU,yBACdC,KAAM,EACNC,MAAO,EACPC,IAAK,EACLC,KAAM,EACNC,OAAQ,EACRC,OAAQ,EACRC,YAAa,GAUjBjB,EAAkBkB,oBAAsB,SAAUC,GAC9C,OAAO,SAAUC,GACb,IAAIC,EACJ,OAAIC,SAASD,EAAYE,SAASH,EAAK,KAC5BC,EAGJF,IAYfnB,EAAkBwB,mBAAqB,SAAUC,EAAON,GACpD,OAAO,SAACC,GACJ,IACI1I,EADAD,SAGJ,IAAK2I,EAAO,OAAOD,EAEnB,IAAMO,EAAON,EAAIO,cAEjB,IAAKlJ,EAAI,EAAGC,EAAI+I,EAAMG,OAAQnJ,EAAIC,EAAGD,IACjC,GAAIgJ,EAAMhJ,GAAGkJ,gBAAkBD,EAC3B,OAAOjJ,EAIf,gBAAIA,EACO0I,EAEJ,OAqBfnB,EAAkB6B,oBAAsB,WACpC,IAAMC,GACFC,OACI,MACA,MACA,MACA,MACA,MACA,MACA,OAEJC,MACI,SACA,SACA,UACA,YACA,WACA,SACA,aAGFC,GACFF,OACI,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,OAEJC,MACI,UACA,WACA,QACA,QACA,MACA,OACA,OACA,SACA,YACA,UACA,WACA,aAsPR,OAjPIE,GAEIlJ,KAAM,IACNmJ,MAAO,EACPC,QAJD,SAAAA,UAIc,MAAO,UACpBC,OAAQrC,EAAkBkB,sBAC1BoB,UAND,SAAAA,UAMYlB,GAGP,OAFUxB,EAAoBwB,GAErBmB,WAAWC,aAG5B9J,GAEIM,KAAM,IACNmJ,MAAO,EACPC,QAJD,SAAAA,UAIc,MAAO,UACpBC,OAAQrC,EAAkBkB,sBAC1BoB,UAND,SAAAA,UAMYlB,GACP,IACMqB,EADI7C,EAAoBwB,GACdmB,WAAa,GAE7B,OAAkB,IAAVE,EAAc,GAAKA,GAAOD,aAG1C/H,GAEIzB,KAAM,IACNmJ,MAAO,EACPC,QAJD,SAAAA,UAIc,MAAO,WACpBC,OAAQ,SAAAA,OAACjB,GACL,OAAIA,EACOA,EAAIO,cAER,MAEXW,UAAW,SAAAA,UAAClB,GAIR,OAHUxB,EAAoBwB,GACdmB,WAEA,GAAK,KAAO,OAGpCG,GAEI1J,KAAM,IACNmJ,MAAO,EACPC,QAJD,SAAAA,UAIc,MAAO,WACpBC,OAAQ,SAAAA,OAACjB,GACL,OAAIA,EACOA,EAAIO,cAER,MAEXW,UAAW,SAAAA,UAAClB,GAIR,OAHUxB,EAAoBwB,GACdmB,WAEA,GAAK,KAAO,OAGpCI,GAEI3J,KAAM,IACNmJ,MAAO,EACPC,QAJD,SAAAA,UAIc,MAAO,UACpBC,OAAQrC,EAAkBkB,sBAC1BoB,UAND,SAAAA,UAMYlB,GAIP,OAAOrB,EAHGH,EAAoBwB,GACfwB,gBAKvBC,GAEI7J,KAAM,IACNmJ,MAAO,EACPC,QAJD,SAAAA,UAIc,MAAO,UACpBC,OAAQrC,EAAkBkB,sBAC1BoB,UAND,SAAAA,UAMYlB,GAIP,OAAOrB,EAHGH,EAAoBwB,GACZ0B,gBAK1BC,GAEI/J,KAAM,IACNmJ,MAAO,EACPC,QAJD,SAAAA,UAIc,MAAO,UACpBC,OAAQrC,EAAkBkB,sBAC1BoB,UAND,SAAAA,UAMYlB,GAIP,OAHUxB,EAAoBwB,GACjB4B,kBAEHR,aAGlB3H,GAEI7B,KAAM,IACNmJ,MAAO,EACPC,QAJD,SAAAA,UAIc,UAAWN,EAAQC,MAAMkB,KAAK,KAA9B,KACbZ,OAAQrC,EAAkBwB,mBAAmBM,EAAQC,OACrDO,UAND,SAAAA,UAMYlB,GACP,IACM8B,EADItD,EAAoBwB,GAChB+B,SAEd,OAAQrB,EAAQC,MAAMmB,GAAMV,aAGpCY,GAEIpK,KAAM,IACNmJ,MAAO,EACPC,QAJD,SAAAA,UAIc,UAAWN,EAAQE,KAAKiB,KAAK,KAA7B,KACbZ,OAAQrC,EAAkBwB,mBAAmBM,EAAQE,MACrDM,UAND,SAAAA,UAMYlB,GACP,IACM8B,EADItD,EAAoBwB,GAChB+B,SAEd,OAAQrB,EAAQE,KAAKkB,GAAMV,aAGnC7H,GAEI3B,KAAM,IACNmJ,MAAO,EACPC,QAJD,SAAAA,UAIc,MAAO,UACpBC,OAAQrC,EAAkBkB,sBAC1BoB,UAND,SAAAA,UAMYlB,GAIP,OAHUxB,EAAoBwB,GAChBiC,UAEHb,aAGnBzJ,GAEIC,KAAM,IACNmJ,MAAO,EACPC,QAJD,SAAAA,UAIc,MAAO,UACpBC,OAAQrC,EAAkBkB,sBAC1BoB,UAND,SAAAA,UAMYlB,GAIP,OAAOrB,EAHGH,EAAoBwB,GAChBiC,aAKtBC,GAEItK,KAAM,IACNmJ,MAAO,EACPC,QAJD,SAAAA,UAIc,UAAWH,EAAUF,MAAMkB,KAAK,KAAhC,KACbZ,OAAQrC,EAAkBwB,mBAAmBS,EAAUF,OACvDO,UAND,SAAAA,UAMYlB,GACP,IACMmC,EADI3D,EAAoBwB,GACdoC,WAEhB,OAAQvB,EAAUF,MAAMwB,GAAQf,aAGxCiB,GAEIzK,KAAM,IACNmJ,MAAO,EACPC,QAJD,SAAAA,UAIc,UAAWH,EAAUD,KAAKiB,KAAK,KAA/B,KACbZ,OAAQrC,EAAkBwB,mBAAmBS,EAAUD,MACvDM,UAND,SAAAA,UAMYlB,GACP,IACMmC,EADI3D,EAAoBwB,GACdoC,WAEhB,OAAQvB,EAAUD,KAAKuB,GAAQf,aAGvC3J,GAEIG,KAAM,IACNmJ,MAAO,EACPC,QAJD,SAAAA,UAIc,MAAO,UACpBC,OALD,SAAAA,OAKSjB,GAAO,OAAOpB,wBAAwCoB,GAAO,GACrEkB,UAND,SAAAA,UAMYlB,GAIP,OAAOrB,EAHGH,EAAoBwB,GACdoC,WAEG,KAG3BE,GAEI1K,KAAM,IACNmJ,MAAO,EACPC,QAJD,SAAAA,UAIc,MAAO,YACpBC,OALD,SAAAA,OAKSjB,GACJ,IAAIuC,SACJ,GAAIvC,EAAK,CACL,IAAM1I,EAAI0I,EAAIQ,OACdR,EAAMA,EAAIwC,UAAUlL,EAAI,EAAGA,GAE/B,IAAI2I,EAAYrB,wBAAwCoB,GACpDyC,EAAc,IAAI/D,KAClBgE,EAAcC,KAAKC,MAAOH,EAAYI,cAAiB,KAO3D,OAHIrE,EAFJ+D,KAAYG,EAAczC,GAEM4C,cAAgBJ,EAAYI,gBACxDN,MAAYG,EAAc,GAAIzC,GAE3BzB,EAAoB+D,GAAQM,eAEvC3B,UAtBD,SAAAA,UAsBYlB,GACP,IACI8C,EADMtE,EAAoBwB,GACjB6C,cAAczB,WACvB9J,SAOJ,OALIwL,IACAxL,EAAIwL,EAAKtC,OACTsC,EAAOA,EAAKN,UAAUlL,EAAI,EAAGA,IAG1BwL,IAGfC,GAEInL,KAAM,IACNmJ,MAAO,EACPC,QAJD,SAAAA,UAIc,MAAO,YACpBC,OAAQrC,EAAkBkB,sBAC1BoB,UAND,SAAAA,UAMYlB,GAIP,OAHUxB,EAAoBwB,GACf6C,cAAczB,eAgB7CxC,EAAkBoE,oBAAsB,WACpC,IAAMC,EAAcrE,EAAkB6B,sBAEtC,OACIf,KAAMuD,EAAYnC,EAClBoC,QAASD,EAAY3L,EACrB6L,eAAgBF,EAAY5J,EAC5B+J,eAAgBH,EAAY3B,EAC5B3B,OAAQsD,EAAY1B,EACpB3B,OAAQqD,EAAYxB,EACpB4B,UAAWJ,EAAYxJ,EACvB6J,SAAUL,EAAYjB,EACtBuB,aAAcN,EAAY1J,EAC1BiK,4BAA6BP,EAAYtL,EACzC8L,YAAaR,EAAYf,EACzBwB,WAAYT,EAAYZ,EACxBsB,cAAeV,EAAYxL,EAC3BmM,WAAYX,EAAYX,EACxBuB,UAAWZ,EAAYF,IAW/BnE,EAAkBkF,cAAgB,WAC9B,IAAMb,EAAcrE,EAAkB6B,sBAChCsD,EAAkB,SAAAxL,IAMpB,IALA,IAAIlB,EAAI,EACJ2M,SACAC,SACE3M,EAAI4M,UAAK1D,OAERnJ,EAAIC,EAAGD,IACV2M,oBAAW3M,SAAX2M,UAAW3M,IACX6M,kBAAS7M,SAAT6M,UAAS7M,MACL4M,EAAcD,GAItB,OAAKC,EAEEA,EAAY,GAAGhD,OAAOgD,EAAY,IAFd,MAK/B,OACI1E,MAAO0D,EAAYX,EAAGW,EAAYF,EAC9BgB,GAEJvE,OAAQyD,EAAYf,EAAGe,EAAYZ,EAAGY,EAAYxL,EAC9CsM,GAEJtE,KAAMwD,EAAYxJ,EAAGwJ,EAAYjB,EAAGiB,EAAY1J,EAAG0J,EAAYtL,EAC3DoM,GAEJrE,MAAOuD,EAAYnC,EAAGmC,EAAY3L,EAAG2L,EAAY5J,EAAG4J,EAAY3B,EAC5D,SAAU6C,EAAcC,EAAcC,EAAWC,GAC7C,IAAIL,SACAM,SACAC,SACAxE,SAcJ,OAZIoE,IAAiBG,EAAUF,GAAaC,IACJ,OAAhCC,EAAO,GAAGtD,OAAOsD,EAAO,MACxBC,MAGJP,EAAcG,GAEdH,EADOG,GAGOD,EAGbF,GAELjE,EAAMiE,EAAY,GAAGhD,OAAOgD,EAAY,IACpCO,IACAxE,GAAO,IAEJA,GANoB,OASnCL,QAASsD,EAAY1B,EACjBwC,GAEJnE,QAASqD,EAAYxB,EACjBsC,KAUZnF,EAAkB6F,WAAa,SAAU5F,GAQrC,IAPA,IAAM6F,EAAc9F,EAAkBS,aAChC4D,EAAcrE,EAAkB6B,sBAChCkE,EAAgB5M,OAAO6M,KAAK3B,GAC5B4B,KACFxN,SACAyN,UAEIzN,EAAIwH,EAAOkG,QAAQL,EAAarN,EAAI,KAAO,GAC/CyN,EAAcjG,EAAOxH,EAAI,IACmB,IAAxCsN,EAAcI,QAAQD,IAE1BD,EAAWG,MACPjE,MAAO1J,EACP4N,MAAOH,IAIf,OAAOD,GASXjG,EAAkBsG,SAAW,SAAUzG,EAAMI,GACzC,IAQIvH,EARE6N,EAAQ3G,EAAoBC,GAC5BoG,EAAajG,EAAkB6F,WAAW5F,GAC1CoE,EAAcrE,EAAkB6B,sBAClC2E,EAAeC,OAAOxG,GACpB6F,EAAc9F,EAAkBS,aAClC4F,SACAK,SACAjO,SAGJ,IAAKA,EAAI,EAAGC,EAAIuN,EAAWrE,OAAQnJ,EAAIC,EAAGD,IAEtCiO,EAAerC,EADfgC,EAAQJ,EAAWxN,GAAG4N,OACY/D,UAAUiE,GAC5CC,EAAeA,EAAahG,QAAQ,IAAIH,OAAOyF,EAAcO,EAAO,KAAMK,GAG9E,OAAOF,GAQXxG,EAAkBzF,UAAUoM,MAAQ,SAAUC,EAAeC,GACzD,IAAM3B,EAAgBlF,EAAkBkF,gBAClC/E,EAAWD,KAAK4G,kBAAkBF,GAClCG,EAAa/G,EAAkBU,wBAC/BsG,EAAUH,GAAWA,EAAQG,QAC7BC,KACAC,KACFC,SACAC,SACAC,SACAjG,SACA3I,SACA6O,SACAC,SACA7O,SACAiL,KAEJ,IAAKwD,KAAejC,EAChB,MAAQ1K,eAAe5B,KAAKsM,EAAeiC,GAA3C,CAMA,IAJAD,EAAKtF,OAAS,EAEdyF,GADAD,EAAiBlC,EAAciC,IACHK,OAAOJ,EAAexF,OAAS,EAAG,GAAG,GAE5DnJ,EAAI,EAAGC,EAAI0O,EAAexF,OAAQnJ,EAAIC,EAAGD,cAE1C2I,EAAMjB,GADNmH,EAAQF,EAAe3O,IACFO,OAGjBkO,EAAKd,KAAK,MAEVc,EAAKd,MAAMkB,EAAOlG,IAM1B,GAAI,OAFJmG,EAAcF,EAAWI,MAAMvH,KAAMgH,MAEuBF,EACxD,MAGJC,EAAWF,EAAWI,IAAgBI,EAU1C,OAPIN,EAAWrF,QAAU1B,KAAKwH,gBAAgBT,EAAWrF,QAErD+B,EAAOgE,QAAQV,EAAW,GAAI,EAAG,GAEjCtD,EAAOgE,QAAPhE,QAAkBsD,GAGftD,GAQX3D,EAAkBzF,UAAUuM,kBAAoB,SAAUF,GACtD,IAYIlO,EAZEuH,EAASC,KAAKD,OACdoE,EAAcrE,EAAkB6B,sBAChCiE,EAAc9F,EAAkBS,aAChCwF,EAAajG,EAAkB6F,WAAW5F,GAC1C2H,KAEFC,SACAC,SACAC,SACAC,SACAC,SAGAxP,SAEJwP,EAAcxB,OAAOxG,GAErB,IAAMiI,EAAWjC,EAAWkC,IAAI,SAAAxN,GAAA,OAAOyN,EAAI/B,QACrCgC,EAAmBpC,EAAWrE,OACpC,IAAKnJ,EAAI4P,EAAmB,EAAG5P,GAAK,EAAGA,KACnCsP,EAAW9B,EAAWxN,GAAG0J,OAEV,IAAM8F,EAAYrG,OAAS,YAKtCiG,IACAA,EAAsBI,EAAYrG,QAGtCoG,EAAaC,EAAYrE,UAAUmE,EAAW,EAAGF,GACjDI,EAAcA,EAAYrE,UAAU,EAAGmE,EAAW,GAC9C1H,OAAOC,OAAO0H,GACdC,EAAYrE,UAAUiE,EAAqBI,EAAYrG,QAE3DiG,EAAsBE,GAblBF,EAAsBE,EAgB9B,IAAKtP,EAAI,EAAGA,EAAI4P,EAAkB5P,IAC9BqP,EAAS7B,EAAWxN,GACpBwP,EAAcA,EAAYzH,QAAQsF,EAAcgC,EAAOzB,MAAOhC,EAAYyD,EAAOzB,OAAOjE,WAG5F,IAAMkG,EAAgB1B,EAAc2B,MAAM,IAAIlI,OAAO4H,QAGrD,IAFAK,EAAcE,QAET/P,EAAI,EAAGC,EAAIwP,EAAStG,OAAQnJ,EAAIC,EAAGD,IACpCmP,EAASM,EAASzP,IAAM6P,EAAc7P,GAE1C,OAAOmP,GAQX5H,EAAkBzF,UAAUkO,cAAgB,SAAU7B,GAClD,IAAI/G,EAAO,KACX,GAAI6I,OAAOpH,SAASsF,GAChB/G,EAAO,IAAIC,KAAK8G,QACb,IAAK1G,KAAKD,QAAUH,KAAK6G,MAAMC,GAClC/G,EAAO,IAAIC,KAAK8G,OAEf,CACD,IAAMzG,EAAWD,KAAKC,SAAWD,KAAKyG,MAAMC,GACxCzG,EAASyB,SACT1B,KAAKE,WAALF,kCAAsBJ,MAAtBI,oIAA8BC,MAC9BN,EAAOK,KAAKE,YAGpB,OAAOP,GAGXG,EAAkBzF,UAAUmN,gBAAkB,SAASiB,GACnD,OAAe,IAARA,GAAazI,KAAKD,OAAOsI,MAAM,QAAQ3G,QASlD5B,EAAkBzF,UAAU+L,SAAW,SAAUrG,EAAQ2G,GACrD,IAAIxG,SAQJ,OANIwG,EACAxG,EAAaF,KAAKE,WAAaF,KAAKuI,cAAc7B,IACzCxG,EAAaF,KAAKE,cAC3BA,EAAaF,KAAKuI,cAAc7B,IAG7B5G,EAAkBsG,SAASlG,EAAYH,ICruBnC,IAAA2I,EAAA,SAAAA,EAACC,GACZ,IAAIpQ,EAAI,EACR,OAAO,WAAe,QAAAyB,EAAAoL,UAAA1D,OAAXkH,EAAWC,MAAA7O,GAAAW,EAAA,EAAAA,EAAAX,EAAAW,IAAXiO,EAAWjO,GAAAyK,UAAAzK,GAClBiO,EAAOE,QAAQ,SAAC5H,EAAK6H,GACXJ,EAAMI,aAAuBF,QAC/BF,EAAMI,GAAcF,MAAMG,MAAOtH,OAAQnJ,KAE7CoQ,EAAMI,GAAY7C,KAAKhF,KAE3B3I,wNCdF0Q,EAAe,SACfC,EAAgBjQ,OAAOoB,UAAUiI,SACjC6G,EAAc,kBACdC,EAAa,iBAEnB,SAASC,EAAenB,EAAKoB,GAIzB,IAHA,IAAI/Q,EAAI+Q,EAAU5H,OACd6H,GAAU,EAEPhR,GAAG,CACN,GAAI2P,IAAQoB,EAAU/Q,GAElB,OADSA,EAGbA,GAAK,EAGT,OAAOgR,EA2GX,SAASC,EAASC,EAAMC,EAAMC,GAE1B,gBAAWF,EAAP,YAAAG,EAAOH,MAASR,aAAuBS,EAAP,YAAAE,EAAOF,MAAST,EACzC,eAGAS,EAAP,YAAAE,EAAOF,MAAST,GAAyB,OAATS,EACzBD,aAGAA,EAAP,YAAAG,EAAOH,MAASR,IAChBQ,EAAOC,aAAgBb,aAnH/B,SAASgB,EAAMJ,EAAMC,EAAMC,EAAWG,EAAQC,GAC1C,IAAIC,EACAC,EACAC,EACAC,EACAC,EAcJ,GATKL,GAKDD,EAAO5D,KAAKuD,GACZM,EAAO7D,KAAKwD,KALZI,GAAUL,GACVM,GAAUL,IAOVA,aAAgBb,MAChB,IAAKmB,EAAO,EAAGA,EAAON,EAAKhI,OAAQsI,GAAQ,EAAG,CAC1C,IACIC,EAASR,EAAKO,GACdE,EAASR,EAAKM,GAElB,MAAOvP,GACH,mBAGOyP,EAAP,YAAAN,EAAOM,MAAWjB,EACZU,YAAaO,IACfT,EAAKO,GAAQE,IAIF,OAAXD,aAA0BA,EAAP,YAAAL,EAAOK,MAAWhB,IACrCgB,EAASR,EAAKO,GAAQE,aAAkBrB,cAG9B,KADduB,EAAOf,EAAea,EAAQH,IAE1BE,EAASR,EAAKO,GAAQF,EAAOM,GAG7BP,EAAMI,EAAQC,EAAQP,EAAWG,EAAQC,SAMrD,IAAKC,KAAQN,EAAM,CACf,IACIO,EAASR,EAAKO,GACdE,EAASR,EAAKM,GAElB,MAAOvP,GACH,SAGJ,GAAe,OAAXyP,aAA0BA,EAAP,YAAAN,EAAOM,MAAWjB,GAKrCkB,EAAMjB,EAAcxQ,KAAKwR,MACbf,GACO,OAAXc,aAA0BA,EAAP,YAAAL,EAAOK,MAAWhB,IACrCgB,EAASR,EAAKO,QAGJ,KADdI,EAAOf,EAAea,EAAQH,IAE1BE,EAASR,EAAKO,GAAQF,EAAOM,GAG7BP,EAAMI,EAAQC,EAAQP,EAAWG,EAAQC,IAGxCI,IAAQf,GACE,OAAXa,GAAqBA,aAAkBpB,QACvCoB,EAASR,EAAKO,QAGJ,KADdI,EAAOf,EAAea,EAAQH,IAE1BE,EAASR,EAAKO,GAAQF,EAAOM,GAG7BP,EAAMI,EAAQC,EAAQP,EAAWG,EAAQC,IAI7CN,EAAKO,GAAQE,MAGhB,CACD,GAAIP,YAAaO,EACb,SAEJT,EAAKO,GAAQE,GAIzB,OAAOT,EApGX,CAqHUA,EAAMC,EAAMC,GACXF,GCnIJ,SAASY,EAASnJ,GACrB,OAAO2H,MAAMwB,QAAQnJ,GA2ClB,IAAMoJ,EAAc,SAAdA,IAAc,aAAY,IAAI1K,MAAO2K,UAAY1G,KAAK2G,MAAsB,IAAhB3G,KAAK4G,WASvE,SAASC,EAAWC,EAAMC,GAC7B,IAAKP,EAAQM,KAAUN,EAAQO,GAC3B,OAAOD,IAASC,EAGpB,GAAID,EAAKjJ,SAAWkJ,EAAKlJ,OACrB,SAGJ,IAAK,IAAInJ,EAAI,EAAGA,EAAIoS,EAAKjJ,OAAQnJ,IAC7B,GAAIoS,EAAKpS,KAAOqS,EAAKrS,GACjB,SAIR,SASG,SAASsS,EAAa3J,GACzB,OAAOA,EASJ,IAAM4J,EAAmB,SAAnBA,EAAoBC,GAC7B,MAnEsB,iBAmETA,EACFxM,EAAWE,QACX4L,EAAQU,IAASV,EAAQU,EAAK,IAC9BxM,EAAWG,QACX2L,EAAQU,KAA0B,IAAhBA,EAAKrJ,QAlF/B,SAAmBR,GACtB,OAAOA,IAAQjI,OAAOiI,GADnB,CAkFwD6J,EAAK,KACrDxM,EAAWC,UAEf,MChDIwM,GAnDXD,QAEAE,gBAHe,SAAAA,gBAGEC,EAAUpS,GACvB,IAAMqS,EAASrS,GAAQwR,IA4CvB,OA1CAtK,KAAK+K,KAAKI,IACNrS,KAAMqS,EACNvC,OAAQsC,EAERE,UAJgB,SAAAA,YAKZ,IAAIA,EAAYpL,KAAKqL,iBAQrB,OANKD,IACDA,EAAYpL,KAAKqL,oBACjBrL,KAAK4I,OAAOE,QAAQ,SAACwC,GACjBF,EAAUE,EAAMxS,QAAUwS,KAG3BF,GAEXG,WAfgB,SAAAA,aAgBZ,IAAIC,EAAgBxL,KAAKyL,eAUzB,OARKD,IACDA,EAAgBxL,KAAKyL,kBACrBzL,KAAK4I,OAAOE,QAAQ,SAACwC,GACbA,EAAMI,SAASrQ,OAAS8D,EAAUC,UAClCoM,EAAcF,EAAMxS,QAAUwS,MAInCE,GAEXG,aA5BgB,SAAAA,eA6BZ,IAAIC,EAAkB5L,KAAK6L,iBAU3B,OARK7L,KAAK6L,mBACND,EAAkB5L,KAAK6L,oBACvB7L,KAAK4I,OAAOE,QAAQ,SAACwC,GACbA,EAAMI,SAASrQ,OAAS8D,EAAUE,YAClCuM,EAAgBN,EAAMxS,QAAUwS,MAIrCM,IAGR5L,KAAK+K,KAAKI,0PCKVW,aA1CX,SAAArR,EAAayG,EAAKoK,iGAAOS,QACrB9S,OAAOC,eAAe8G,KAAM,UACxB7G,cACA6S,gBACAC,YACAzS,MAAO0H,IAGXlB,KAAKsL,MAAQA,qDAoBb,OAAO/E,OAAOvG,KAAKxG,+CAUnB,OAAOwG,KAAKxG,wCArBZ,OAAOwG,KAAKkM,aAyBLJ,GCjDR,SAASK,EAAoBC,EAAYC,GACxCD,EAAW1K,OAAS,GACD0K,EAAWE,MAAM,KACzBxD,QAAQ,SAACyD,GAChB,IAAMC,EAAaD,EAAQD,MAAM,KAC3BrO,GAAUuO,EAAW,GACrBC,IAAQD,EAAW,IAAMA,EAAW,IAC1C,GAAIC,GAAOxO,EACP,IAAK,IAAI1F,EAAI0F,EAAO1F,GAAKkU,EAAKlU,GAAK,EAC/B8T,EAAS9T,8PCVvBmU,aAqBF,SAAAjS,EAAajB,iGAAOmT,QAChB3M,KAAKkM,OAAS1S,gEAdOoT,GACrB,OAAKA,EAGE3T,OAAO4T,OAAOH,EAAkBI,qBAAsBF,GAFlDF,EAAkBI,kEAsB7B,OAAO9M,KAAKkM,gDAUZ,OAAO3F,OAAOvG,KAAKkM,kDAGNhL,GACb,OAAQA,aAAewL,KAAwBA,EAAkBK,mBAAmB7L,gDAGlEA,GAClB,OAAOA,aAAewL,EAAoBxL,EAAMwL,EAAkBK,mBAAmB7L,SAlDvFwL,GAyDNA,EAAkBM,KAAO,IAAIN,EAAkB,QAC/CA,EAAkBO,GAAK,IAAIP,EAAkB,MAC7CA,EAAkBQ,IAAM,IAAIR,EAAkB,OAO9CA,EAAkBI,sBACdK,QAAST,EAAkBO,GAC3BG,IAAKV,EAAkBQ,IACvBG,KAAMX,EAAkBM,KACxBM,UAAWZ,EAAkBO,IAGlBP,sZCvER,SAASa,EAAiBC,EAAKC,GAClC,IAAMC,KACAC,KASN,OARAH,EAAI5E,OAAOE,QAAQ,SAACwC,GAChBqC,EAAOzH,KAAKoF,EAAMI,SAAS5S,QAE/B2U,EAAI7E,OAAOE,QAAQ,SAACwC,IAC6B,IAAzCqC,EAAO1H,QAAQqF,EAAMI,SAAS5S,OAC9B4U,EAAOxH,KAAKoF,EAAMI,SAAS5S,QAG5B4U,ECfJ,IAUME,EACD,SADCA,EAEA,UAFAA,EAGA,QAHAA,EAIA,UAKAC,GACTC,MAAO,QACPC,UAAW,YACXC,WAAY,aACZC,QAAS,UACTC,UAAW,aCjBf,SAASC,IAAoB,SAYtB,SAASC,EAAcC,EAAKC,EAAKC,GAA+D,IAArDC,EAAqDpJ,UAAA1D,OAAA,YAAA0D,UAAA,IAAAA,UAAA,GAAxBqJ,EAAwBrJ,UAAA1D,OAAA,YAAA0D,UAAA,GAAAA,UAAA,GAAbyI,EAAMC,MACtFpC,KACAX,KACA2D,EAAqBH,GAAYJ,EACjCQ,EAAgBN,EAAIO,gBACpBC,EAAgBP,EAAIM,gBACpBE,EAAoBH,EAAc7V,KAClCiW,EAAoBF,EAAc/V,KAClCA,EAAU6V,EAAc7V,KAAxBA,IAAgC+V,EAAc/V,KAC9CkW,EAAmBzB,EAAgBoB,EAAeE,GAExD,GAAIC,IAAsBC,EACtB,MAAM,IAAIE,MAAM,8CA+EpB,OA5EAN,EAAc/F,OAAOE,QAAQ,SAACwC,GAC1B,IAAM4D,EAAY1F,KAAY8B,EAAMI,WACc,IAA9CsD,EAAiB/I,QAAQiJ,EAAUpW,OAAiB0V,IACpDU,EAAUpW,KAAU6V,EAAc7V,KAAlCoW,IAA0CA,EAAUpW,MAExD4S,EAAOxF,KAAKgJ,KAEhBL,EAAcjG,OAAOE,QAAQ,SAACwC,GAC1B,IAAM4D,EAAY1F,KAAY8B,EAAMI,WACc,IAA9CsD,EAAiB/I,QAAQiJ,EAAUpW,MAC9B0V,IACDU,EAAUpW,KAAU+V,EAAc/V,KAAlCoW,IAA0CA,EAAUpW,KACpD4S,EAAOxF,KAAKgJ,IAGhBxD,EAAOxF,KAAKgJ,KAKpB/C,EAAmBkC,EAAIc,YAAa,SAAC5W,GACjC,IAAI6W,KACAC,SACJlD,EAAmBmC,EAAIa,YAAa,SAACG,GACjC,IAAMC,KACAC,KACNA,EAAQV,MACRU,EAAQT,MACRJ,EAAc/F,OAAOE,QAAQ,SAACwC,GAC1BiE,EAAMrJ,KAAKoF,EAAMmE,aAAa1E,KAAKxS,IACnCiX,EAAQV,GAAmBxD,EAAMxS,QAAUwS,EAAMmE,aAAa1E,KAAKxS,KAEvEsW,EAAcjG,OAAOE,QAAQ,SAACwC,IAC+B,IAAnD0D,EAAiB/I,QAAQqF,EAAMI,SAAS5S,OAAgB0V,GAC1De,EAAMrJ,KAAKoF,EAAMmE,aAAa1E,KAAKuE,IAEvCE,EAAQT,GAAmBzD,EAAMxS,QAAUwS,EAAMmE,aAAa1E,KAAKuE,KAGvE,IAIMI,EAAYC,GAAgBH,EAAQV,IACpCc,EAAYD,GAAgBH,EAAQT,IAC1C,GAAIL,EAAmBgB,EAAWE,EALb,kBAAMvB,EAAIwB,gBACV,kBAAMvB,EAAIuB,oBAI4D,CACvF,IAAMC,KACNP,EAAMzG,QAAQ,SAACiH,EAASC,GACpBF,EAASpE,EAAOsE,GAAKlX,MAAQiX,IAE7BX,GAAYvB,EAAMC,QAAUW,EAC5B1D,EAAKsE,GAAeS,GAGpB/E,EAAK7E,KAAK4J,GACVV,KACAC,EAAc9W,QAEf,IAAKkW,IAAaZ,EAAME,WAAaU,IAAaZ,EAAMG,cAAgBoB,EAAU,CACrF,IAAMU,KACFrH,EAAMkG,EAAc/F,OAAOlH,OAAS,EACxC6N,EAAMzG,QAAQ,SAACiH,EAASC,GAEhBF,EAASpE,EAAOsE,GAAKlX,MADrBkX,GAAOvH,EACsBsH,EAGA,OAGrCX,KACAC,EAAc9W,EACdwS,EAAK7E,KAAK4J,QAKf,IAAIzR,GAAU0M,EAAMW,GAAU5S,SC3GzC,SAASmX,EAAWtV,EAAGyI,GACnB,IAAM8M,KAAQvV,EACRwV,KAAQ/M,EACd,OAAI8M,EAAKC,GACG,EAERD,EAAKC,EACE,EAEJ,EAqEJ,SAASC,EAAWC,GAAyB,IAApBC,EAAoBlL,UAAA1D,OAAA,YAAA0D,UAAA,GAAAA,UAAA,GAAX6K,EAIrC,OAHII,EAAI3O,OAAS,GArBrB,SAAS6O,EAAMF,EAAKG,EAAIC,EAAIH,GACxB,GAAIG,IAAOD,EAAM,OAAOH,EAExB,IAAMK,EAAMF,EAAK3M,KAAK8M,OAAOF,EAAKD,GAAM,GAKxC,OAJAD,EAAKF,EAAKG,EAAIE,EAAKJ,GACnBC,EAAKF,EAAKK,EAAM,EAAGD,EAAIH,GAzC3B,SAAgBD,EAAKG,EAAIE,EAAKD,EAAIH,GAG9B,IAFA,IAAMM,EAAUP,EACVQ,KACGtY,EAAIiY,EAAIjY,GAAKkY,EAAIlY,GAAK,EAC3BsY,EAAOtY,GAAKqY,EAAQrY,GAKxB,IAHA,IAAIoC,EAAI6V,EACJpN,EAAIsN,EAAM,EAELnY,EAAIiY,EAAIjY,GAAKkY,EAAIlY,GAAK,EACvBoC,EAAI+V,GACJE,EAAQrY,GAAKsY,EAAOzN,GACpBA,GAAK,GACEA,EAAIqN,GACXG,EAAQrY,GAAKsY,EAAOlW,GACpBA,GAAK,GACE2V,EAAOO,EAAOlW,GAAIkW,EAAOzN,KAAO,GACvCwN,EAAQrY,GAAKsY,EAAOlW,GACpBA,GAAK,IAELiW,EAAQrY,GAAKsY,EAAOzN,GACpBA,GAAK,GArBjB,CA0CUiN,EAAKG,EAAIE,EAAKD,EAAIH,GAEjBD,EARX,CAsBaA,EAAK,EAAGA,EAAI3O,OAAS,EAAG4O,GAE1BD,0HC3EX,SAASS,EAAWC,EAAUC,EAAU/O,GACpC,IAAIgP,SACJ,OAAQF,GACR,KAAK9R,EAAeC,WACpB,KAAKN,EAAiBE,SAEdmS,EADa,SAAbD,EACU,SAACrW,EAAGyI,GAAJ,OAAUA,EAAEnB,GAAStH,EAAEsH,IAEvB,SAACtH,EAAGyI,GAAJ,OAAUzI,EAAEsH,GAASmB,EAAEnB,IAErC,MACJ,QACIgP,EAAU,SAAA5X,EAACsB,EAAGyI,IACV,IAAM8M,KAAQvV,EAAEsH,GACVkO,KAAQ/M,GAAEnB,GAChB,OAAIiO,EAAKC,EACe,SAAba,EAAsB,GAAK,EAElCd,EAAKC,EACe,SAAba,GAAuB,EAAI,EAE/B,GAGf,OAAOC,EAUX,SAASC,EAAUnG,EAAMhC,GACrB,IAAMoI,EAAU,IAAIC,IACdC,KAYN,OAVAtG,EAAKjC,QAAQ,SAACwI,GACV,IAAMC,EAAWD,EAAMvI,GACnBoI,EAAQK,IAAID,GACZF,EAAYF,EAAQ/X,IAAImY,IAAW,GAAGrL,KAAKoL,IAE3CD,EAAYnL,MAAMqL,GAAWD,KAC7BH,EAAQM,IAAIF,EAAUF,EAAY3P,OAAS,MAI5C2P,EAYX,SAASK,EAAmBC,EAAcC,EAAcC,GACpD,IAAM3M,GACF4M,MAAOH,EAAa,IAQxB,OALAC,EAAaG,OAAO,SAACC,EAAKC,EAAMC,GAE5B,OADAF,EAAIC,GAAQN,EAAa,GAAG1J,IAAI,SAAAxN,GAAA,OAAS6W,EAAMO,EAAmBK,GAAKjQ,SAChE+P,GACR9M,GAEIA,ECtEJ,SAASiN,GAAY9D,EAAKC,GAC7B,IAAM8D,KACA1G,KACA2G,KACAtH,KACA4D,EAAgBN,EAAIO,gBACpBC,EAAgBP,EAAIM,gBACpB0D,EAAwB3D,EAAcvD,YACtCmH,EAAwB1D,EAAczD,YACtCtS,EAAU6V,EAAc7V,KAAxBA,UAAsC+V,EAAc/V,KAG1D,IAAK4R,EAAW2D,EAAImE,eAAelG,MAAM,KAAKiE,OAAQjC,EAAIkE,eAAelG,MAAM,KAAKiE,QAChF,OAAO,KAiBX,SAASkC,EAAkBC,EAAItH,EAAWuH,GACtCxG,EAAmBuG,EAAGvD,YAAa,SAAC5W,GAChC,IAAMgX,KACFqD,EAAW,GACfP,EAAcvJ,QAAQ,SAAC+J,GACnB,IAAMrZ,EAAQ4R,EAAUyH,GAAYpD,aAAa1E,KAAKxS,GACtDqa,OAAgBpZ,EAChB+V,EAAMsD,GAAcrZ,IAEnB4Y,EAAUQ,KACPD,GAAW5H,EAAK7E,KAAKqJ,GACzB6C,EAAUQ,SAStB,OAjCCvE,EAAImE,eAAelG,MAAM,KAAMxD,QAAQ,SAACgK,GACrC,IAAMxH,EAAQgH,EAAsBQ,GACpCpH,EAAOxF,KAAKsD,KAAY8B,EAAMI,WAC9B2G,EAAcnM,KAAKoF,EAAMI,SAAS5S,QA2BtC2Z,EAAkBnE,EAAKiE,MACvBE,EAAkBpE,EAAKiE,MAEhB,IAAIjU,GAAU0M,EAAMW,GAAU5S,kIC5DzC,SAASia,GAAkB1C,GACvB,OAAOA,EAAI2C,OAAO,SAAAvY,GAAA,QAAUuP,aAAgB0C,KAShD,SAASuG,GAAK5C,GACV,GAAIhG,EAAQgG,MAAUA,EAAI,aAAcxH,OAAQ,CAC5C,IAAMqK,EAAiBH,GAAkB1C,GAIzC,OAHiB6C,EAAexR,OACZwR,EAAenB,OAAO,SAACC,EAAKmB,GAAN,OAAenB,EAAMmB,GAAM,GAC/CzG,EAAkBM,KAG5C,OAAON,EAAkBM,KAU7B,SAASoG,GAAK/C,GACV,GAAIhG,EAAQgG,MAAUA,EAAI,aAAcxH,OAAQ,CAC5C,IAAMwK,EAAWJ,GAAI5C,GACf5H,EAAM4H,EAAI3O,QAAU,EAC1B,OAAQ8G,OAAO8K,MAAMD,IAAaA,aAAoB3G,EAC7CA,EAAkBM,KAAOqG,EAAW5K,EAEjD,OAAOiE,EAAkBM,KAgG7B,IAAMuG,IACFN,OACAG,OACAI,IAzFJ,SAAAA,IAAcnD,GACV,GAAIhG,EAAQgG,MAAUA,EAAI,aAAcxH,OAAQ,CAE5C,IAAM4K,EAAiBV,GAAkB1C,GAEzC,OAAQoD,EAAe/R,OAAUmC,KAAK2P,IAAL3P,cAAY4P,IAAkB/G,EAAkBM,KAErF,OAAON,EAAkBM,MAmFzB0G,IAzEJ,SAAAA,IAAcrD,GACV,GAAIhG,EAAQgG,MAAUA,EAAI,aAAcxH,OAAQ,CAE5C,IAAM4K,EAAiBV,GAAkB1C,GAEzC,OAAQoD,EAAe/R,OAAUmC,KAAK6P,IAAL7P,cAAY4P,IAAkB/G,EAAkBM,KAErF,OAAON,EAAkBM,MAmEzB2G,MAzDJ,SAAAA,MAAgBtD,GACZ,OAAOA,EAAI,IAyDXuD,KA/CJ,SAAAA,KAAevD,GACX,OAAOA,EAAIA,EAAI3O,OAAS,IA+CxBmS,MArCJ,SAAAA,MAAgBxD,GACZ,OAAIhG,EAAQgG,GACDA,EAAI3O,OAERgL,EAAkBM,MAkCzB8G,IAbJ,SAAAA,IAAczD,GACV,OAAOxM,KAAKkQ,KAbhB,SAAmB1D,GACf,IAAI2D,EAAOZ,GAAI/C,GACf,OAAO+C,GAAI/C,EAAIpI,IAAI,SAAAxN,GAAA,OAAAoJ,KAAAoQ,IAAQC,EAAMF,EAAS,MAF9C,CAa8B3D,MAexB8D,GAAqB,MAAAC,GAAA,oBAAA3Z,IAAAhB,GAAA,QAAAO,EAAA,EAAAA,EAAAP,EAAAiI,OAAA1H,IAAA,KAAAX,EAAAI,EAAAO,GAAAX,EAAAF,WAAAE,EAAAF,aAAA,EAAAE,EAAA2S,cAAA,YAAA3S,MAAA4S,UAAA,GAAAhT,OAAAC,eAAAuB,EAAApB,EAAAS,IAAAT,IAAA,gBAAAI,EAAAO,EAAAX,GAAA,OAAAW,GAAAS,EAAAhB,EAAAY,UAAAL,GAAAX,GAAAoB,EAAAhB,EAAAJ,GAAAI,GAAA,GCxIrB4a,cACF,SAAA5Z,IAAe,IAAAhB,EAAAuG,MAAA,SAAAvF,EAAAhB,GAAA,KAAAgB,aAAAhB,GAAA,UAAA6a,UAAA,sCAAAtU,KAAAvF,GACXuF,KAAK2I,MAAQ,IAAIyI,IACjBpR,KAAK2I,MAAM8I,IAAI,aAAc8C,IAE7Btb,OAAOub,QAAQjB,IAAQzK,QAAQ,SAAChP,GAC5B2a,EAAK9L,MAAM8I,IAAI3X,EAAI,GAAIA,EAAI,aAAAsa,GAAA3Z,IAAAX,IAAA,iBAAAN,MAAA,SAAAA,QAc/B,IAAK4L,UAAO1D,OACR,OAAO1B,KAAK2I,MAAMvP,IAAI,cAG1B,IAAIsb,0CAEJ,GAAuB,mBAAZA,EACP1U,KAAK2I,MAAM8I,IAAI,aAAciD,OAC1B,CAEH,GADAA,EAAUnO,OAAOmO,IAC6B,IAA1Czb,OAAO6M,KAAKyN,IAAQtN,QAAQyO,GAG5B,MAAM,IAAIzF,MAAJ,WAAqByF,EAArB,0BAFN1U,KAAK2I,MAAM8I,IAAI,aAAc8B,GAAOmB,IAK5C,OAAO1U,4CAmCDlH,EAAM4b,GAAS,IAAA1a,EAAAgG,KACrB,GAAuB,mBAAZ0U,EACP,MAAM,IAAIzF,MAAM,gCAMpB,OAHAnW,EAAOyN,OAAOzN,GACdkH,KAAK2I,MAAM8I,IAAI3Y,EAAM4b,GAEd,WAAQC,EAAKC,aAAa9b,+CAGvBA,GACNkH,KAAK2I,MAAM6I,IAAI1Y,IACfkH,KAAK2I,MAAMkM,OAAO/b,yCAIjBA,GACL,OAAIA,aAAgBgc,SACThc,EAEJkH,KAAK2I,MAAMvP,IAAIN,SA5FxBub,GA4GSU,GAZO,WAClB,IAAIpM,EAAQ,KAQZ,OALkB,OAAVA,IACAA,EAAQ,IAAI0L,IAET1L,EAPO,GAAAqM,GAAA,SAAAva,EAAAhB,GAAA,GAAAoP,MAAAwB,QAAA5P,GAAA,OAAAA,EAAA,GAAAnB,OAAA2b,YAAAhc,OAAAwB,GAAA,gBAAAA,EAAAhB,GAAA,IAAAO,KAAAX,GAAA,EAAAsB,GAAA,EAAApC,OAAA,cAAAS,EAAAkc,EAAAza,EAAAnB,OAAA2b,cAAA5b,GAAAL,EAAAkc,EAAAjD,QAAAkD,QAAAnb,EAAAkM,KAAAlN,EAAAQ,QAAAC,GAAAO,EAAA0H,SAAAjI,GAAAJ,GAAA,UAAAoB,GAAAE,GAAA,EAAApC,EAAAkC,EAAA,aAAApB,GAAA6b,EAAAE,QAAAF,EAAAE,SAAA,WAAAza,EAAA,MAAApC,GAAA,OAAAyB,EAAA,CAAAS,EAAAhB,GAAA,UAAA6a,UAAA,yDC/Ff,SAASe,GAAmBhH,EAAKC,GACpC,IAIMgH,EAAkB/H,EAJFc,EAAIO,gBACJN,EAAIM,iBAK1B,OAAO,SAACc,EAAWE,GACf,IAAI2F,KASJ,OARAD,EAAgBxM,QAAQ,SAACgK,GAGjByC,IAFA7F,EAAUoD,GAAWtZ,QACrBoW,EAAUkD,GAAWtZ,QAAS+b,KAM/BA,GCjBR,SAASC,GAAOnH,EAAKC,GACxB,IAAM8D,KACA1G,KACA2G,KACAtH,KACA4D,EAAgBN,EAAIO,gBACpBC,EAAgBP,EAAIM,gBACpB0D,EAAwB3D,EAAcvD,YACtCmH,EAAwB1D,EAAczD,YACtCtS,EAAU6V,EAAc7V,KAAxBA,UAAsC+V,EAAc/V,KAG1D,IAAK4R,EAAW2D,EAAImE,eAAelG,MAAM,KAAKiE,OAAQjC,EAAIkE,eAAelG,MAAM,KAAKiE,QAChF,OAAO,KAgBX,SAASkC,EAAmBC,EAAItH,GAC5Be,EAAmBuG,EAAGvD,YAAa,SAAC5W,GAChC,IAAMgX,KACFqD,EAAW,GACfP,EAAcvJ,QAAQ,SAAC+J,GACnB,IAAMrZ,EAAQ4R,EAAUyH,GAAYpD,aAAa1E,KAAKxS,GACtDqa,OAAgBpZ,EAChB+V,EAAMsD,GAAcrZ,IAEnB4Y,EAAUQ,KACX7H,EAAK7E,KAAKqJ,GACV6C,EAAUQ,SAStB,OAhCCvE,EAAImE,eAAelG,MAAM,KAAMxD,QAAQ,SAACgK,GACrC,IAAMxH,EAAQgH,EAAsBQ,GACpCpH,EAAOxF,KAAKsD,KAAY8B,EAAMI,WAC9B2G,EAAcnM,KAAKoF,EAAMI,SAAS5S,QA0BtC2Z,EAAkBpE,EAAKiE,GACvBG,EAAkBnE,EAAKiE,GAEhB,IAAIlU,GAAU0M,EAAMW,GAAU5S,SCvDlC,SAAS2c,GAAeC,EAAYC,EAAYpH,GACnD,OAAOH,EAAasH,EAAYC,EAAYpH,KAAiBV,EAAME,WAGhE,SAAS6H,GAAgBF,EAAYC,EAAYpH,GACpD,OAAOH,EAAauH,EAAYD,EAAYnH,KAAiBV,EAAMG,sQCWlD6H,cAQjB,SAAApb,EAAagV,EAAcrD,iGAAY0J,QACnC9V,KAAKyP,aAAeA,EACpBzP,KAAKoM,WAAaA,oDAUlB,MAAM,IAAI6C,MAAM,0BAAAnV,IAAA,SAAAN,MAAA,SAAAA,QAUhB,OAAOwG,KAAKyP,aAAa/D,4CAUzB,OAAO1L,KAAKyP,aAAa3W,0CAUzB,OAAOkH,KAAKyP,aAAa/D,OAAOrQ,6CAUhC,OAAO2E,KAAKyP,aAAa/D,OAAOqK,oDAUhC,OAAO/V,KAAKyP,aAAa/D,OAAO7Q,wDAUhC,OAAOmF,KAAKyP,aAAa/D,OAAOsK,aAAehW,KAAKyP,aAAa/D,OAAO5S,0CASpE,IAAA2B,EAAAuF,KACE+K,KAIN,OAHAoB,EAAmBnM,KAAKoM,WAAY,SAAC7T,GACjCwS,EAAK7E,KAAKuO,EAAKhF,aAAa1E,KAAKxS,MAE9BwS,gDAUP,MAAM,IAAIkE,MAAM,2BAAAxU,EAxGHob,GAwGGI,GAAA,oBAAAxb,IAAAhB,GAAA,QAAAO,EAAA,EAAAA,EAAAP,EAAAiI,OAAA1H,IAAA,KAAAX,EAAAI,EAAAO,GAAAX,EAAAF,WAAAE,EAAAF,aAAA,EAAAE,EAAA2S,cAAA,YAAA3S,MAAA4S,UAAA,GAAAhT,OAAAC,eAAAuB,EAAApB,EAAAS,IAAAT,IAAA,gBAAAI,EAAAO,EAAAX,GAAA,OAAAW,GAAAS,EAAAhB,EAAAY,UAAAL,GAAAX,GAAAoB,EAAAhB,EAAAJ,GAAAI,GAAA,GCpHHyc,qrBAAkBL,+CAY/B,OAHK7V,KAAKmW,gBACNnW,KAAKmW,cAAgBnW,KAAKoW,uBAEvBpW,KAAKmW,kEAUZ,MAAM,IAAIlH,MAAM,0BAAAnV,IAAA,gBAAAN,MAAA,SAAAA,QAWhB,OAAOwG,KAAK+K,aAjCCmL,GAiCDnL,sPChCCsL,qrBAAoBH,gDASjC,OAAOtX,EAAiBC,gEAUL,IAAApE,EAAAuF,KACbsW,EAAO,IAAIC,IACXC,KAUN,OAPArK,EAAmBnM,KAAKoM,WAAY,SAAC7T,GACjC,IAAM+Y,EAAQqD,EAAKlF,aAAa1E,KAAKxS,GAChC+d,EAAK9E,IAAIF,KACVgF,EAAKG,IAAInF,GACTkF,EAAOtQ,KAAKoL,MAGbkF,QA/BMH,GA+BNG,sPC7BME,eAQjB,SAAAjd,EAAagW,EAAcrD,iGAAYuK,yOAC7BlH,EAAcrD,IADeuK,OAGnClC,EAAKmC,eAAiB,KAHaD,uUARLT,4DAqBX,IAAAzb,EAAAuF,KACbsW,EAAO,IAAIC,IACXC,KAYN,OARArK,EAAmBnM,KAAKoM,WAAY,SAAC7T,GACjC,IAAM+Y,EAAQqD,EAAKlF,aAAa1E,KAAKxS,GAChC+d,EAAK9E,IAAIF,KACVgF,EAAKG,IAAInF,GACTkF,EAAOtQ,KAAKoL,MAIbkF,+DAWP,GAAIxW,KAAK4W,eACL,OAAO5W,KAAK4W,eAUhB,IAPA,IAAMC,EAAa7W,KAAK+K,OAAOiI,OAAO,SAAAvY,GAAA,QAAUuP,aAAgB0C,KAAoB6D,KAAK,SAAC5V,EAAGyI,GAAJ,OAAUzI,EAAIyI,IACjG0T,EAAQD,EAAWnV,OACrBqV,EAAUvO,OAAOwO,kBACjBC,SACAC,SACAC,EAAiB,EAEZ5e,EAAI,EAAGA,EAAIue,EAAOve,IACvB0e,EAAYJ,EAAWte,EAAI,IAC3B2e,EAAYL,EAAWte,MAEL0e,IAIlBF,EAAUlT,KAAK2P,IAAIuD,EAASG,EAAYL,EAAWte,EAAI,IACvD4e,KAQJ,OALKA,IACDJ,EAAU,MAEd/W,KAAK4W,eAAiBG,EAEf/W,KAAK4W,sDAUZ,OAAO5W,KAAKyP,aAAa/D,OAAO3L,qDAUnB,IAAAtF,EAAAuF,KACP+K,KASN,OARAoB,EAAmBnM,KAAKoM,WAAY,SAAC7T,GACjC,IAAM+Y,EAAQ8F,EAAK3H,aAAa1E,KAAKxS,GACjC+Y,aAAiB5E,EACjB3B,EAAK7E,KAAKoL,GAEVvG,EAAK7E,KAAKpG,EAAkBsG,SAASkL,EAAO8F,EAAKrX,aAGlDgL,QAxGM2L,GAwGN3L,sPC3GMsM,qrBAAenB,4DAS5B,IAAMoB,EAAUtX,KAAKyP,aAAa/D,OAAO6L,KACzC,OAAQD,EAAQ,GAAIA,EAAQA,EAAQ5V,OAAS,OAAA5H,IAAA,OAAAN,MAAA,SAAAA,QAU7C,OAAOwG,KAAKyP,aAAa/D,OAAO6L,WApBnBF,GAoBmBE,sPClBnBC,qrBAAgB3B,+CAY7B,OAHK7V,KAAKmW,gBACNnW,KAAKmW,cAAgBnW,KAAKoW,uBAEvBpW,KAAKmW,mDAUZ,OAAOnW,KAAKyP,aAAa/D,OAAO+L,8CAUhC,OAAOzX,KAAKyP,aAAa/D,OAAOgM,UAAYvD,gDAShC,IACJwD,EAAiB3X,KAAKyP,aAAa/D,OAAnCiM,aACR,OAAOA,aAAwB7C,SAAW6C,EAAe9M,sDAUzD,MAAM,IAAIoE,MAAM,0BAAAnV,IAAA,gBAAAN,MAAA,SAAAA,QAWhB,OAAOwG,KAAK+K,aAhECyM,GAgEDzM,sPC/DC6M,qrBAAmBJ,gDAShC,OAAOvY,EAAeC,+DAUH,IAAAzE,EAAAuF,KACfwT,EAAMhL,OAAOwO,kBACbtD,EAAMlL,OAAOqP,kBAiBjB,OAdA1L,EAAmBnM,KAAKoM,WAAY,SAAC7T,GACjC,IAAM+Y,EAAQqD,EAAKlF,aAAa1E,KAAKxS,GACjC+Y,aAAiB5E,IAIjB4E,EAAQkC,IACRA,EAAMlC,GAENA,EAAQoC,IACRA,EAAMpC,OAINkC,EAAKE,SAtCAkE,GAsCAlE,sPC5CAoE,kLAQb,MAAM,IAAI7I,MAAM,2BAAAxU,EARHqd,GAQGC,GAAA,oBAAAtd,IAAAhB,GAAA,QAAAO,EAAA,EAAAA,EAAAP,EAAAiI,OAAA1H,IAAA,KAAAX,EAAAI,EAAAO,GAAAX,EAAAF,WAAAE,EAAAF,aAAA,EAAAE,EAAA2S,cAAA,YAAA3S,MAAA4S,UAAA,GAAAhT,OAAAC,eAAAuB,EAAApB,EAAAS,IAAAT,IAAA,gBAAAI,EAAAO,EAAAX,GAAA,OAAAW,GAAAS,EAAAhB,EAAAY,UAAAL,GAAAX,GAAAoB,EAAAhB,EAAAJ,GAAAI,GAAA,GCJHue,qrBAA0BF,4CAQpC5W,GAQH,OALKwL,EAAkBuL,UAAU/W,GAGpBwL,EAAkBwL,eAAehX,GAFjCqF,OAAOrF,GAAKiX,aAZZH,GAYYG,sPCXZC,eAOjB,SAAA3e,EAAaiS,iGAAQ2M,kPAEjB5D,EAAK/I,OAASA,EACd+I,EAAK6D,KAAO,IAAIxY,EAAkB2U,EAAK/I,OAAO3L,QAH7BsY,uUAPmBP,4CAoBjC5W,GACH,IAAIuC,SAEJ,GAAKiJ,EAAkBuL,UAAU/W,GAI7BuC,EAASiJ,EAAkBwL,eAAehX,OAJP,CACnC,IAAIhB,EAAaF,KAAKsY,KAAK/P,cAAcrH,GACzCuC,EAASvD,EAAaA,EAAWqK,UAAYmC,EAAkBO,GAInE,OAAOxJ,QA7BM2U,GA6BN3U,sPC9BM8U,qrBAAqBT,4CAQ/B5W,GAEHA,EAAMqF,OAAOrF,GACb,IAAIuC,SAEJ,GAAKiJ,EAAkBuL,UAAU/W,GAK7BuC,EAASiJ,EAAkBwL,eAAehX,OALP,CACnC,IAAIsX,EAAUtX,EAAImH,MALR,2DAMV5E,EAAS+U,EAAahQ,OAAOiQ,WAAWD,EAAQ,IAAvCA,IAA8ChQ,OAAOiQ,WAAWD,EAAQ,IAC9D9L,EAAkBO,GAIzC,OAAOxJ,QApBM8U,GAoBN9U,sPCpBMiV,qrBAAyBZ,4CAQnC5W,GACH,IAAIuC,SAEJ,GAAKiJ,EAAkBuL,UAAU/W,GAI7BuC,EAASiJ,EAAkBwL,eAAehX,OAJP,CACnC,IAAIC,EAAYsX,WAAWvX,EAAK,IAChCuC,EAAS+E,OAAO8K,MAAMnS,GAAauL,EAAkBO,GAAK9L,EAI9D,OAAOsC,QAjBMiV,GAiBNjV,sPCnBMkV,cAUjB,SAAAle,EAAa3B,EAAMiS,EAAMW,EAAQvJ,iGAAQyW,QACrC5Y,KAAKlH,KAAOA,EACZkH,KAAK0L,OAASA,EACd1L,KAAKmC,OAASA,EACdnC,KAAK+K,KAAO/K,KAAK6Y,UAAU9N,sDAUpBA,GAAM,IAAAtR,EAAAuG,KACb,OAAO+K,EAAK9C,IAAI,SAAAxN,GAAA,OAASga,EAAKtS,OAAOsE,MAAM6K,WAzB9BqH,GC0Fd,SAASG,GAAaC,EAAYrN,EAAQsN,GAC7C,IAAMC,KAUN,OARMD,GAAWA,EAAQtX,SACrBsX,EAAUtN,EAAOzD,IAAI,SAAAxN,GAAA,OAAQuP,EAAKlR,QAGtCkgB,EAAQlQ,QAAQ,SAACoQ,EAAQ3gB,GACrB0gB,EAAWC,GAAU3gB,IAGlBmT,EAAOzD,IAAI,SAAAxO,GAAA,OAzFtB,SAAyBsR,EAAMW,GAC3BX,EAAOA,MACP,IAAI0E,SAEJ,OAAQ/D,EAAOrQ,MACf,KAAK8D,EAAUC,QACX,OAAQsM,EAAOqK,SACf,KAAK9W,EAAeC,WAGpB,QAEI,OADAuQ,EAAe,IAAIkJ,GAAajN,EAAO5S,KAAMiS,EAAMW,EAAQ,IAAIgN,IACxD,IAAId,GAAWnI,EAAf,MAAkC1E,EAAKrJ,OAAS,IAE/D,KAAKvC,EAAUE,UACX,OAAQqM,EAAOqK,SACf,KAAKnX,EAAiBC,YAElB,OADA4Q,EAAe,IAAIkJ,GAAajN,EAAO5S,KAAMiS,EAAMW,EAAQ,IAAIsM,IACxD,IAAI3B,GAAY5G,EAAhB,MAAmC1E,EAAKrJ,OAAS,IAC5D,KAAK9C,EAAiBE,SAElB,OADA2Q,EAAe,IAAIkJ,GAAajN,EAAO5S,KAAMiS,EAAMW,EAAQ,IAAI0M,GAAe1M,IACvE,IAAIgL,GAASjH,EAAb,MAAgC1E,EAAKrJ,OAAS,IACzD,KAAK9C,EAAiBI,OAElB,OADAyQ,EAAe,IAAIkJ,GAAajN,EAAO5S,KAAMiS,EAAMW,EAAQ,IAAI6M,IACxD,IAAIlB,GAAO5H,EAAX,MAA8B1E,EAAKrJ,OAAS,IACvD,QAEI,OADA+N,EAAe,IAAIkJ,GAAajN,EAAO5S,KAAMiS,EAAMW,EAAQ,IAAIsM,IACxD,IAAI3B,GAAY5G,EAAhB,MAAmC1E,EAAKrJ,OAAS,IAEhE,QAEI,OADA+N,EAAe,IAAIkJ,GAAajN,EAAO5S,KAAMiS,EAAMW,EAAQ,IAAIsM,IACxD,IAAI3B,GAAY5G,EAAhB,MAAmC1E,EAAKrJ,OAAS,KA/BhE,CAyF8CqX,EAAWE,EAAWjP,EAAKlR,OAAQkR,KC3GlE,IAAAmP,IACXC,WAAY7a,EAAWI,MCuCZ0a,GAvBf,SAuBeA,GAvBEhJ,EAAK1J,GAIlBA,EAAU1N,OAAO4T,WAFbyM,mBAEuC3S,GAE3C,IAAIuS,EACEK,KACArT,EAAOsT,EAAYD,GAYzB,OAPIL,EAHAvS,EAAQ2S,eAGCjJ,EAAI/I,OAAO,EAAG,GAAG,MAK9B+I,EAAIvH,QAAQ,SAAArO,GAAA,OAASyL,sIAAQoF,OAErB4N,EAAQK,ICvChBE,MACAC,MACAC,GAAQ,GACRC,GAAU,GACVC,GAAS,GAEb,SAASC,GAAgBP,GACvB,OAAO,IAAIzE,SAAS,IAAK,WAAayE,EAAQtR,IAAI,SAASnP,EAAMP,GAC/D,OAAOwhB,KAAKC,UAAUlhB,GAAQ,OAASP,EAAI,MAC1CwK,KAAK,KAAO,KA0BF,IAAAkX,GAAA,SAAAA,GAASC,GACtB,IAAIC,EAAW,IAAIha,OAAO,KAAQ+Z,EAAY,SAC1CE,EAAYF,EAAUG,WAAW,GAWrC,SAASC,EAAUja,EAAMka,GACvB,IAII9gB,EAJA+gB,KACAC,EAAIpa,EAAKqB,OACTgZ,EAAI,EACJ1gB,EAAI,EAEJ2gB,EAAMF,GAAK,EACXG,KAMJ,SAASzU,IACP,GAAIwU,EAAK,OAAOjB,GAChB,GAAIkB,EAAK,OAAOA,KAAanB,GAG7B,IAAIlhB,EAAUK,EAAPiiB,EAAIH,EACX,GAAIra,EAAKga,WAAWQ,KAAOlB,GAAO,CAChC,KAAOe,IAAMD,GAAKpa,EAAKga,WAAWK,KAAOf,IAAStZ,EAAKga,aAAaK,KAAOf,KAI3E,OAHKphB,EAAImiB,IAAMD,EAAGE,MACR/hB,EAAIyH,EAAKga,WAAWK,QAAUd,GAASgB,KACxChiB,IAAMihB,KAAUe,KAAgBva,EAAKga,WAAWK,KAAOd,MAAWc,GACpEra,EAAKya,MAAMD,EAAI,EAAGtiB,EAAI,GAAG+H,QAAQ,MAAO,KAIjD,KAAOoa,EAAID,GAAG,CACZ,IAAK7hB,EAAIyH,EAAKga,WAAW9hB,EAAImiB,QAAUd,GAASgB,UAC3C,GAAIhiB,IAAMihB,GAAUe,KAAgBva,EAAKga,WAAWK,KAAOd,MAAWc,OACtE,GAAI9hB,IAAMwhB,EAAW,SAC1B,OAAO/Z,EAAKya,MAAMD,EAAGtiB,GAIvB,OAAOoiB,KAAYta,EAAKya,MAAMD,EAAGJ,GAGnC,IA7BIpa,EAAKga,WAAWI,EAAI,KAAOb,MAAWa,EACtCpa,EAAKga,WAAWI,EAAI,KAAOZ,MAAUY,GA4BjChhB,EAAI0M,OAAauT,IAAK,CAE5B,IADA,IAAIqB,KACGthB,IAAMggB,IAAOhgB,IAAMigB,IAAKqB,EAAI7U,KAAKzM,GAAIA,EAAI0M,IAC5CoU,GAA4B,OAAtBQ,EAAMR,EAAEQ,EAAK/gB,OACvBwgB,EAAKtU,KAAK6U,GAGZ,OAAOP,EAgBT,SAASQ,EAAUD,GACjB,OAAOA,EAAI9S,IAAIgT,GAAalY,KAAKmX,GAGnC,SAASe,EAAY5a,GACnB,OAAe,MAARA,EAAe,GAChB8Z,EAAStc,KAAKwC,GAAQ,IAAM,IAAOA,EAAKC,QAAQ,KAAM,MAAU,IAChED,EAGR,OACEoG,MAlFF,SAAAA,MAAepG,EAAMka,GACnB,IAAIW,EAAS3B,EAASiB,EAAOF,EAAUja,EAAM,SAAS0a,EAAKxiB,GACzD,GAAI2iB,EAAS,OAAOA,EAAQH,EAAKxiB,EAAI,GACrCghB,EAAUwB,EAAKG,EAAUX,EA9B/B,SAAyBhB,EAASgB,GAChC,IAAIpgB,EAAS2f,GAAgBP,GAC7B,OAAO,SAASwB,EAAKxiB,GACnB,OAAOgiB,EAAEpgB,EAAO4gB,GAAMxiB,EAAGghB,IAH7B,CA8BmDwB,EAAKR,GAAKT,GAAgBiB,KAGzE,OADAP,EAAKjB,QAAUA,MACRiB,GA6EPF,UAAWA,EACXva,OA1BF,SAAAA,OAAgBya,EAAMjB,GAEpB,OADe,MAAXA,IAAiBA,EA9EzB,SAAsBiB,GACpB,IAAIW,EAAYliB,OAAOY,OAAO,MAC1B0f,KAUJ,OARAiB,EAAK1R,QAAQ,SAASiS,GACpB,IAAK,IAAIK,KAAUL,EACXK,KAAUD,GACd5B,EAAQrT,KAAKiV,EAAUC,GAAUA,KAKhC7B,EAZT,CA8EgDiB,KACpCjB,EAAQtR,IAAIgT,GAAalY,KAAKmX,IAAYmB,OAAOb,EAAKvS,IAAI,SAAS8S,GACzE,OAAOxB,EAAQtR,IAAI,SAASmT,GAC1B,OAAOH,EAAYF,EAAIK,MACtBrY,KAAKmX,MACNnX,KAAK,OAqBTuY,WAlBF,SAAAA,WAAoBd,GAClB,OAAOA,EAAKvS,IAAI+S,GAAWjY,KAAK,SCzGhCwY,GAAMC,GAAI,KCAVC,IDEkBF,GAAI9U,MACA8U,GAAIjB,UACPiB,GAAIxb,OACAwb,GAAID,WCLrBE,GAAI,OAEQC,GAAIhV,MACAgV,GAAInB,UACPmB,GAAI1b,OACA0b,GAAIH,WC4BhBI,OAXf,SAWeA,GAXEvR,EAAKxD,GAKlBA,EAAU1N,OAAO4T,WAHbyM,kBACAqC,eAAgB,KAEuBhV,GAE3C,IAAM6U,EAAMI,GAAMjV,EAAQgV,gBAC1B,OAAOtC,GAAOmC,EAAIlB,UAAUnQ,GAAMxD,ICoBvBkV,GAxBf,SAwBeA,GAxBIxL,GACf,IAAM6I,KACF3gB,EAAI,EACJujB,SACEvC,KACArT,EAAOsT,EAAYD,GAgBzB,OAdAlJ,EAAIvH,QAAQ,SAACkB,GACT,IAAMpB,KACN,IAAK,IAAI9O,KAAOkQ,EACRlQ,KAAOof,EACP4C,EAAiB5C,EAAOpf,IAExBof,EAAOpf,GAAOvB,IACdujB,EAAiBvjB,EAAI,GAEzBqQ,EAAOkT,GAAkB9R,EAAKlQ,GAElCoM,eAAQ0C,MAGJ3P,OAAO6M,KAAKoT,GAASK,IC1BlBwC,GAXf,SAWeA,GAXAhR,EAAMpE,GACjB,IAAMqV,GAAeH,YAAUH,UAAQrC,WACjCD,EAAatO,EAAiBC,GAEpC,IAAKqO,EACD,MAAM,IAAInK,MAAM,mCAGpB,OAAO+M,EAAW5C,GAAYrO,EAAMpE,4gBCGjC,SAASgJ,GAAiB/G,GAC7B,IAAMqT,KAEN,OADAhjB,OAAO6M,KAAK8C,GAAQE,QAAQ,SAAChP,GAAUmiB,EAAKniB,GAAO,IAAIgS,EAAMlD,EAAO9O,GAAMA,KACnEmiB,EAGJ,IAOMC,GAAoB,SAApBA,GAAqBC,EAAOC,GAAuC,IAUvEC,EAV2CzP,EAA4BxH,UAAA1D,OAAA,YAAA0D,UAAA,GAAAA,UAAA,MAAfkX,EAAelX,UAAA,GACxEmX,SACAH,IAAcxO,GACd2O,GACIC,GAAIJ,EACJK,KAAM7P,EACN8P,SAAUJ,GAEdH,EAAMQ,YAAYzW,KAAKqW,KAGvBA,eAAiBD,IACjBH,EAAMQ,YAAYjb,OAAS,GAC3B2a,IAAMM,aAAYzW,KAAlBmW,WAA0BE,MAuCrBK,GAAyB,SAAzBA,GAA0BT,EAAOU,GAA4B,IAAhBjQ,EAAgBxH,UAAA1D,OAAA,YAAA0D,UAAA,GAAAA,UAAA,MAChEgX,EAAYxP,EAAOwP,WhCzDpB,MgC0DCU,EAAkBlQ,EAAOkQ,oBAC3BC,KAIAA,EAHCF,EAAWnb,OAGNmb,EAAW5U,IAAI,SAAAxN,GAAA,OACXuiB,GAD0BC,EA6BjCC,GA5B2BC,UACpBzR,EAASsR,EAAQtR,OACjB0R,EAAeH,EAAUI,kBACzBC,EAAcL,EAAUrO,gBAAgBxD,YACxCL,EAAOiS,EAAQjS,KACfyL,EAASvd,OAAOskB,OAAOH,GAAcrL,OAAO,SAACC,EAAKpI,GAEpD,OADAoI,EAAIpI,EAAE4T,IAAI1kB,MAAQwkB,EAAY1T,EAAE4T,IAAI1kB,MAAM0d,SACnCxE,OAGJ,SAACpJ,GAgBJ,QAfiBmC,EAAKrJ,QAAiBqJ,EAAK0S,KAAK,SAAAhkB,GAAA,OAAOiS,EAAOgS,MAAM,SAACC,GAClE,KAAMA,EAAU7kB,QAAQ8P,GACpB,SAEJ,IAAMpP,EAAQoP,EAAO+U,EAAU7kB,MAAM8kB,UACrC,GAAId,GAAmBa,EAAUtiB,OAAS8D,EAAUC,QAChD,OAAO5F,GAASgd,EAAOmH,EAAU7kB,MAAM,IAAMU,GAASgd,EAAOmH,EAAU7kB,MAAM,GAGjF,GAAI6kB,EAAUtiB,OAAS8D,EAAUE,UAC7B,SAEJ,IAAM6S,EAAMkL,EAAaO,EAAU7kB,MAAMmJ,MACzC,OAAO8Y,EAAI7I,KAAStJ,EAAO+U,EAAU7kB,MAAM8kB,eAzBpB,IAACX,EAC1BD,EACAtR,EACA0R,EACAE,EACAvS,EACAyL,KARH,sBAgDX,MhC7GK,QgCgGD4F,EACoBD,EAAM0B,UAAM,GACJC,OAAO,SAAArjB,GAAA,OAAUsiB,EAAIW,MAAM,SAAAjkB,GAAA,OAAMskB,EAAGnV,OAC5DoV,aACAtkB,KAAM4F,EAAcG,MAGR0c,EAAM0B,UAAM,GAAcC,OAAO,SAAArjB,GAAA,OAAUsiB,EAAIU,KAAK,SAAAhkB,GAAA,OAAMskB,EAAGnV,OACzElP,KAAM4F,EAAcG,IACpBue,gBAOCC,GAAkB,SAAlBA,GAAmBC,EAAUC,EAAUC,EAAcC,GAC9D,IAAMC,EAASJ,EAASL,MAAMQ,EAAYL,WACpC5R,EA7FkB,SAAfmS,GAAgBnS,EAAYxD,EAAQuV,EAAUvR,EAAQsR,GAC/D,IAAMM,KACFC,GAAqB,EACnB/kB,EAASkT,EAATlT,KACFglB,SACAC,KACAC,EAAgB,SAAhBA,IAAgB,OAAMV,EAASrO,gBAC7BgP,EAAmB,SAAnBA,EAAmBpkB,GAAA,OAAS0jB,EA7CtC,SAA+BvV,EAAQrQ,GACnC,IAAM0jB,KADgC6C,uBAEtC,QAAA9lB,EAAAkc,EAAkBtM,EAAlBtP,OAAA2b,cAAA5b,GAAAL,EAAAkc,EAAAjD,QAAAkD,MAAA9b,GAAA,EAA0B,KAAjBiS,EAAiBtS,EAAAQ,MACtByiB,EAAK3Q,EAAMxS,QAAU,IAAIgT,EAAMR,EAAMmE,aAAa1E,KAAKxS,GAAI+S,IAHzBwT,6EAKtC,OAAO7C,EALX,CA8C6BrT,EAAQ3G,GAC7BA,EACA2c,EACAD,IAGAI,SAkBJ,OAhBIA,EADArlB,IAAS4F,EAAcE,QACb,SAAA/E,GAAA,OAAUokB,EAAiB5c,IAE3B,SAAAxH,GAAA,OAASokB,EAAiB5c,IAGxCkK,EAAmBC,EAAY,SAAC7T,GACxBwmB,EAAQxmB,MACmB,IAAvBkmB,GAA4BlmB,IAAOkmB,EAAoB,GACvDC,EAAKF,EAAc9c,OAAS,EAC5B8c,EAAcE,GAASF,EAAcE,GAAIpS,MAAM,KAAK,GAApDkS,IAA0DjmB,GAE1DimB,EAActY,KAAdsY,GAAsBjmB,GAE1BkmB,EAAoBlmB,KAGrBimB,EAAczb,KAAK,KA6DPwb,CACfD,EAAOnP,YACPmP,EAAOU,uBAAuBpW,OAC9BuV,EACAC,EACAF,GAOJ,OALAI,EAAOnP,YAAc/C,EACrBkS,EAAOW,wBAAwBC,wBAE/BhD,GAAkBoC,EAAQ1Q,GAAyBhB,OAAQwR,GAAgBD,GAEpEG,GAGEa,GAAmB,SAAnBA,GAAoBjB,EAAUkB,EAAWxS,EAAQyS,GAC1D,IAAMf,EAASJ,EAASL,MAAMjR,EAAOoR,WACjCsB,EAAgBF,EAgBpB,OAfIxS,EAAOlT,OAAS4F,EAAcE,UAC9B8f,EAAgBD,EAAUrM,OAAO,SAAAvY,GAAA,OAA+C,IAAlC2kB,EAAUnZ,QAAQ6M,MAIpEwL,EAAO9L,eAAiB8M,EAAcvc,KAAK,KAC3Cub,EAAOW,wBAAwBC,wBAE/BhD,GACIoC,EACA1Q,GACEwR,YAAWxS,SAAQ2S,gBAAiBD,GACtC,MAGGhB,GAGEkB,GAAqB,SAArBA,GAAsBC,GAO/B,IALAA,EAAajW,KAAYiW,IACTpkB,OACZokB,EAAWpkB,KAAO8D,EAAUE,YAG3BogB,EAAW1J,QACZ,OAAQ0J,EAAWpkB,MACnB,KAAK8D,EAAUC,QACXqgB,EAAW1J,QAAU9W,EAAeC,WACpC,MACJ,QACA,KAAKC,EAAUE,UACXogB,EAAW1J,QAAUnX,EAAiBC,YAK9C,OAAO4gB,GAKEC,GAAa,SAAbA,GAAcC,EAAU5U,EAAMW,EAAQ/E,GAC/C+E,EAAwBA,EAHmBzD,IAAI,SAAAxN,GAAA,OAAc+kB,GAAmBC,KAIhF9Y,EAAU1N,OAAO4T,OAAO5T,OAAO4T,UAAW+S,IAAgBjZ,GAC1D,IAAMkZ,EAAcC,EAAUnZ,EAAQyS,YAEtC,IAAMyG,GAAsC,mBAAhBA,EACxB,MAAM,IAAI5Q,MAAJ,mCAA6CtI,EAAQyS,WAArD,WANiD,IAAAlE,EAS3B2K,EAAY9U,EAAMpE,GATS/N,EAAAmnB,GAAA7K,EAAA,GASpDgE,EAToDtgB,EAAA,GAS5ConB,EAT4CpnB,EAAA,GAUrDsS,EAAW4N,GAAakH,EAAetU,EAAQwN,GAG/C+G,EAAYjV,EAAWC,gBAAgBC,EAAUvE,EAAQ7N,MAM/D,OALA6mB,EAASO,mBAAqBD,EAE9BN,EAASxQ,YAAc6Q,EAActe,QAAUse,EAAc,GAAGte,OAAzCse,MAAuDA,EAAc,GAAGte,OAAS,GAAM,GAC9Gie,EAASnN,eAAkB9G,EAAOzD,IAAI,SAAAxN,GAAA,OAAK0lB,EAAErnB,OAAOiK,OACpD4c,EAASS,YAAczZ,EAAQyS,aAAe7a,EAAWI,KAAOmM,EAAiBC,GAAQpE,EAAQyS,WAC1FuG,GAGEU,GAAgB,SAAhBA,GAAiB3U,EAAQJ,GAGlC,IAFA,IAAI/S,EAAI,EAEDA,EAAImT,EAAOhK,SAAUnJ,EACxB,GAAI+S,IAAUI,EAAOnT,GAAGO,KACpB,OACIuC,KAAMqQ,EAAOnT,GAAGwd,SAAWrK,EAAOnT,GAAG8C,KACrC4G,MAAO1J,GAInB,OAAO,MAgCL+nB,GAAgC,SAAhCA,GAAiCpD,EAAWD,GAAc,IAI5BsD,IAJ4B5lB,EA5B3B,SAAC6lB,GAClC,IAAMC,EAAaD,EAAM7D,YACrB+D,KACAtE,SACJ,GAAIqE,GAAoC,IAAtBA,EAAW/e,OAEzB,OADA0a,EAAYqE,EAAW,GAAGjE,IAE1B,KAAK5O,EACD8S,GAAUD,EAAW,GAAG/D,UACxB,MACJ,KAAK9O,EACD8S,GAAUD,EAAW,GAAGhE,KAAK8C,iBAC7B,MACJ,KAAK3R,EACDwO,EAAY,UACZsE,GAAUD,EAAW,GAAGhE,KAAKkE,cAAcrU,MAAM,KAAMmU,EAAW,GAAG/D,UAO7E,OACIN,YACAsE,UAxB6B,CA6BmBzD,GAA5Cb,EADoDzhB,EACpDyhB,UAAWsE,EADyC/lB,EACzC+lB,OACfE,EAAiB1D,EAAU,GAC3B2D,EAAiB3D,EAAU,GAS/B,OARId,GAAasE,EAAOhf,SACpBkf,GAAiBL,IAAU,IAAGnE,GAAbmE,WAA2BG,GAA3BH,SACbvC,iBAEJ6C,GAAiBC,IAAU,IAAG1E,GAAb0E,WAA2BJ,GAA3BI,SACb9C,mBAGA4C,EAAgBC,IAWtBE,GAAuB,SAAvBA,EAAwB9D,EAAWC,GAA8C,IAAnCtQ,EAAmCxH,UAAA1D,OAAA,YAAA0D,UAAA,GAAAA,UAAA,MAAtB4b,EAAsB5b,UAAA1D,OAAA,YAAA0D,UAAA,GAAAA,UAAA,MAC7E6b,EAAqBD,EAAaC,mBAClCC,EAAgBF,EAAaE,kBAE/BjE,IAAcgE,MAIAC,EAAcxf,SAA+C,IAAtCwf,EAAcjb,QAAQgX,KAElDA,EAAUkE,kBAAkBjE,EAAWtQ,GAEnCqQ,EAAUmE,UAClBtY,QAAQ,SAAC0X,GAAU,IAAAjoB,EACe+nB,GAA8BpD,EAAWsD,GADxDxnB,EAAA+mB,GAAAxnB,EAAA,GACnBqoB,EADmB5nB,EAAA,GACH6nB,EADG7nB,EAAA,GAExB+nB,EAAqBP,GAAQI,EAAgBC,GAAiBjU,EAAQoU,OA0BjEK,GAA2B,SAA3BA,GAA4BC,EAAaC,EAAYC,EAAgB5U,GAC9E,IAAI8P,SACAQ,SACIuE,EAA4CD,EAA5CC,qBAAsBC,EAAsBF,EAAtBE,kBACxBC,EAAsBH,EAAeI,SACrCC,EAA8BjV,EAAOiV,4BAMvCC,KAEJ,GAAoB,OAAhBR,QAAwB1U,EAAOmV,WAC/BD,IACIpF,kBAED,KAAAliB,EACCwnB,EAAkB/oB,OAAOskB,OAAOkE,EAAqBQ,qBACrDP,IACAM,EAAkBA,EAAgBhP,OAAO,SAAAvY,GAAA,OAAK5B,EAAE+T,OAAOgV,WAAaD,KAGxE,IAAMO,EAAmBF,EAAgBhP,OAjB5B,SAACmP,GAEd,OADevV,EAAO2B,UAAa,sBACrB4T,EAAOvV,KAeqC3E,IAAI,SAAAxN,GAAA,OAAU2nB,EAAOxV,OAAO8P,WAEhFwE,KAEN,QAAIQ,EAA6B,CAC7B,IAAMW,EAAwBppB,OAAOskB,OAAOkE,EAAqBQ,gBAEjEI,EAAsBvZ,QAAQ,SAACwZ,GAC3B,IAAMC,EAAaD,EAAU1V,YACzB2V,EAAWC,eAA2BD,EAAWH,SAAWxV,EAAOwV,QAC/DG,EAAWX,WAAaD,IAC5BT,EAAchb,KAAKoc,EAAUnG,QAC7BO,EAAW2F,EAAsBrP,OAAO,SAAAvZ,GAAA,OAAKZ,IAAMypB,IAAWra,IAAI,SAAAxN,GAAA,OAAK5B,EAAE+T,OAAO8P,YACvEhb,QAAUogB,EAAU5b,MACzBwW,WACA+F,OAAQH,EAAUnG,MAClBuG,KA/CU,SAArBC,GAAsBxG,GAC/B,IADoD,IAAduG,EAActd,UAAA1D,OAAA,YAAA0D,UAAA,GAAAA,UAAA,MAC7C+W,EAAMyG,SACTF,EAAKxc,KAAKiW,GACVA,EAAQA,EAAMyG,QAElB,OAAOF,EA0CmBC,CAAmBL,EAAUnG,YAOnDO,GAAWmG,MAAGxH,OAAHwH,qBAAiBX,IAAkBZ,KAActO,OAAO,SAAAvY,GAAA,OAAW,OAAN5B,IACxEipB,EAAU5b,MACNwW,WACAwE,wBAAmBA,EAAnBA,GAAqCtU,EAAOsU,sBAIpD,IAAM4B,EAAYvB,EAAWpF,MAEvB4G,EAAa9pB,OAAO4T,QACtBmW,kBAAmB1B,EACnBK,uBACD/U,GAEGqW,EAAmB1B,EAAW2B,aAChCrB,GAA+BoB,IAC/B/F,EAAYN,GAAuBqG,EAAkBvG,GACjDI,gBAAiB+E,IAErBd,GAAqBkC,EAAkB/F,EAAW6F,IAGtDjB,EAAUhZ,QAAQ,SAACqa,GACf,IAAMC,EAAmBxG,GAAuBkG,EAAWK,EAAIzG,UACzDgG,EAAOS,EAAIT,KAEjB,GAAIA,EAAM,CACN,IAAMW,EA1HO,SAACnG,EAAWwF,GACjC,IAAK,IAAInqB,EAAI,EAAGkQ,EAAMia,EAAKhhB,OAAQnJ,EAAIkQ,EAAKlQ,IAAK,CAC7C,IAAM4jB,EAAQuG,EAAKnqB,GACnB2kB,EAAYoD,GAA8BpD,EAAWf,GAEzD,OAAOe,EALc,CA0H0BkG,EAAkBV,EAAKY,WAC9DH,EAAIV,OAAOtB,kBAAkBkC,EAAeN,QAE5ChC,GAAqB+B,EAAWM,EAAkBL,GAC9C7B,cAAeiC,EAAIjC,cACnBD,mBAAoBY,GAA+BoB,6PC+KpDM,cA/iBX,SAAA9oB,KAAA,SAAAA,EAAAhB,GAAA,KAAAgB,aAAAhB,GAAA,UAAA6a,UAAA,sCAAwBkP,QACpB,IAAIC,SAEJzjB,KAAK4iB,QAAU,KACf5iB,KAAK2c,eACL3c,KAAKohB,aALeoC,2BAAR9C,EAAQ8C,qBAAR9C,EAAQ8C,gBAOE,IAAlB9C,EAAOhf,SAAkB+hB,EAAS/C,EAAO,cAAe6C,GAExDvjB,KAAKwS,eAAiBiR,EAAOjR,eAC7BxS,KAAKmP,YAAcsU,EAAOtU,YAC1BnP,KAAKogB,YAAcqD,EAAOrD,YAC1BpgB,KAAK4iB,QAAUa,EACfzjB,KAAKkgB,mBAAqBlgB,KAAK4iB,QAAQ1C,mBACvClgB,KAAK0jB,gBAAkBpZ,IACvBtK,KAAKif,wBAAwBC,0BAE7BQ,GAAUA,cAAC1f,MAAX0f,OAAoBgB,IACpB1gB,KAAK0jB,gBAAkB1jB,KAAKkgB,mBAAmBpnB,KAC/CkH,KAAKif,wBAAwBC,wBAC7Blf,KAAK2jB,uBACD1B,kBACA2B,sBAAkB,OAAAC,GAAAppB,IAAAX,IAAA,YAAAN,MAAA,SAAAA,QA0B1B,OAAOwG,KAAK4O,gBAAgBhG,OAAOX,IAAI,SAAAxN,GAAA,OAAK5B,EAAE6S,mDAY9C,OAAO1L,KAAK0jB,8DAIZ,OAAO1jB,KAAK8jB,kEAMZ,OAFA9jB,KAAK8jB,YDpEe,SAAfC,GAAetpB,EAA8BupB,EAAmBC,GAAmB,IAAA5qB,EAAA0mB,GAAAtlB,EAAA,GAAlE2R,EAAkE/S,EAAA,GAAtD6qB,EAAsD7qB,EAAA,GACxF8qB,EAASD,EAAcxiB,OAASwiB,EAAc5X,MAAM,QACpD8X,EAAkBJ,EAAkB5Y,YACpCiZ,EAAYF,EAAOlc,IAAI,SAAAxN,GAAA,OT+BxB,SAAoCgV,EAAcrD,GAAY,IACzDV,EAAW+D,EAAX/D,OAER,OAAQA,EAAOrQ,MACf,KAAK8D,EAAUC,QACX,OAAQsM,EAAOqK,SACf,KAAK9W,EAAeC,WAEpB,QACI,OAAO,IAAI0Y,GAAWnI,EAAcrD,GAE5C,KAAKjN,EAAUE,UACX,OAAQqM,EAAOqK,SACf,KAAKnX,EAAiBC,YAClB,OAAO,IAAIwX,GAAY5G,EAAcrD,GACzC,KAAKxN,EAAiBE,SAClB,OAAO,IAAI4X,GAASjH,EAAcrD,GACtC,KAAKxN,EAAiBI,OAClB,OAAO,IAAIqY,GAAO5H,EAAcrD,GACpC,QACI,OAAO,IAAIiK,GAAY5G,EAAcrD,GAE7C,QACI,OAAO,IAAIiK,GAAY5G,EAAcrD,IAvBtC,CS/B2DgY,EAAgBE,GAAM7U,aAAcrD,KAClG,OAAOpB,EAAWC,gBAAgBoZ,EAAWJ,GCgEtBF,EAAc/jB,KAAKmP,YAAanP,KAAKwS,gBACnDxS,KAAKgf,uBAAwBhf,KAAK0jB,iBAChC1jB,0DAIP,OAAOA,KAAKkgB,sDAiCVqE,EAAUhW,GACZ,OAAOH,EAAapO,KAAMukB,EAAUhW,6CAuB3BgW,GACT,OAAOnW,EAAapO,KAAMukB,EAAUlP,GAAkBrV,KAAMukB,UAAWzqB,IAAA,QAAAN,MAAA,SAAAA,MAqBpEgrB,GACH,OAAOhP,GAAMxV,KAAMwkB,4CAoBXC,GACR,OAAOtS,GAAWnS,KAAMykB,wCAkDpBtG,EAAUvR,GACd,IAAM8X,GACFhrB,KAAM4F,EAAcC,OACpBye,cAIEK,GAAgBL,WAFtBpR,EAAS3T,OAAO4T,UAAW6X,EAAW9X,IAEEoR,WA0BxC,OAvBIpR,EAAOlT,OAAS4F,EAAcG,KACbwe,GACbje,KACAme,GACEzkB,KAAM4F,EAAcC,QACtB8e,GAEaJ,GACbje,KACAme,GACEzkB,KAAM4F,EAAcE,SACtB6e,IAIEJ,GACFje,KACAme,EACAvR,EACAyR,MAIDsG,qCAsBP,OAAQ3kB,KAAKmP,YAAYzN,SAAW1B,KAAKwS,eAAe9Q,6CAUhB,IAArCsc,IAAqC5Y,UAAA1D,OAAA,YAAA0D,UAAA,KAAAA,UAAA,GACpCwf,SACJ,WAFwCxf,UAAA1D,OAAA,YAAA0D,UAAA,KAAAA,UAAA,IAEd,CACtB,IAAM4X,EAAUhd,KAAKmd,SACjB0H,kBAEE9Z,EAAOiS,EAAQjS,KACfW,EAASsR,EAAQtR,OACjBoZ,EAAW/Z,EAAK9C,IAAI,SAAC8S,GACvB,IAAMgK,KAIN,OAHArZ,EAAO5C,QAAQ,SAACwC,EAAO/S,GACnBwsB,EAAOzZ,EAAMxS,MAAQiiB,EAAIxiB,KAEtBwsB,IAEXH,EAAe,IAAI5kB,KAAKglB,YAAYF,EAAUpZ,QAG9CkZ,EAAe,IAAI5kB,KAAKglB,YAAYhlB,MAMxC,OAHIge,GACAhe,KAAKohB,UAAUlb,KAAK0e,GAEjBA,wCA8CFxF,EAAWxS,GAChB,IAAM8X,GACFhrB,KAAM4F,EAAcC,OACpBye,cAEJpR,EAAS3T,OAAO4T,UAAW6X,EAAW9X,GACtC,IAAMqY,EAAcjlB,KAAKqd,kBACnBgC,EAAYpmB,OAAO6M,KAAKmf,GACtBvrB,EAASkT,EAATlT,KAEJwrB,EAAsB9F,EAAUrN,OAAO,SAACC,EAAK1G,GAM7C,MAL+B,WAA3BA,EAAM0Z,YAAYlsB,KAClBkZ,EAAI9L,KAAJ8L,+HAAYqN,EAAUrM,OAAO,SAAAvY,GAAA,OAA0C,IAA7BqY,EAAUqS,OAAO7Z,OACpDA,KAAS2Z,GAChBjT,EAAI9L,KAAKoF,GAEN0G,OAGXkT,EAAsBrc,MAAMG,KAAK,IAAIuN,IAAI2O,IAAsBjd,IAAI,SAAAxN,GAAA,OAAS6Q,EAAM6M,SAkBlF,OAfIze,IAAS4F,EAAcG,KACD0f,GAAiBnf,KAAMklB,GACzCxrB,KAAM4F,EAAcC,OACpBye,UAAWpR,EAAOoR,WACnBqB,GACkBF,GAAiBnf,KAAMklB,GACxCxrB,KAAM4F,EAAcE,QACpBwe,UAAWpR,EAAOoR,WACnBqB,IAGmBF,GAAiBnf,KAAMklB,EAAqBtY,EAAQyS,MAIvEpC,6CAIP,OAAOjd,KAAKolB,mEAWZ,OAPAplB,KAAKolB,aAAeplB,KAAK8jB,YAAYlb,OAAOmJ,OAAO,SAACC,EAAKqT,EAAU9sB,GAK/D,OAJAyZ,EAAIqT,EAASvsB,SACTmJ,MAAO1J,EACPilB,KAAO1kB,KAAMusB,EAASvsB,OAAQuC,KAAMgqB,EAAShqB,OAAQ0a,QAASsP,EAAStP,YAEpE/D,OAEJhS,6CAWPA,KAAK4iB,QAAQ0C,YAAYtlB,MACzBA,KAAK4iB,QAAU,QAAA9oB,IAAA,cAAAN,MAAA,SAAAA,MA6BNgnB,GACT,IAAItO,EAAMlS,KAAKohB,UAAUmE,UAAU,SAAA9rB,GAAA,OAAW+rB,IAAYhF,KACjD,IAATtO,GAAalS,KAAKohB,UAAU9Z,OAAO4K,EAAK,MAAApY,IAAA,YAAAN,MAAA,SAAAA,MAYjCisB,GAA4B,IAApBC,EAAoBtgB,UAAA1D,OAAA,YAAA0D,UAAA,GAAAA,UAAA,MACnC8W,GAAkBlc,KAAM4N,EAAwB,KAAM8X,GACtD1lB,KAAK4iB,QAAU6C,EACfA,EAAOrE,UAAUlb,KAAKlG,gDA4BtB,OAAOA,KAAK4iB,oDA6BZ,OAAO5iB,KAAKohB,yDA4BZ,OAAOphB,KAAK2c,kBAIL4G,GAJK5G,qoBCwFLte,eAvlBX,SAAA5E,IAAsB,IAAAgB,GAAA,SAAAA,EAAAhB,GAAA,KAAAgB,aAAAhB,GAAA,UAAA6a,UAAA,sCAAAtU,KAAAvG,GAAA,QAAAO,EAAAoL,UAAA1D,OAANsF,EAAM6B,MAAA7O,GAAAW,EAAA,EAAAA,EAAAX,EAAAW,IAANqM,EAAMrM,GAAAyK,UAAAzK,GAAA,IAAApC,EAAA,SAAAkC,EAAAhB,GAAA,IAAAgB,EAAA,UAAAkrB,eAAA,oEAAAlsB,GAAA,UAAAiB,QAAAjB,IAAA,mBAAAA,EAAAgB,EAAAhB,EAAA,CAAAuG,MAAAvF,EAAAhB,EAAAmsB,WAAA3sB,OAAA4sB,eAAApsB,IAAAf,KAAA6O,MAAA9M,GAAAuF,MAAAqb,OACTrU,KADS,OAGlByN,EAAKqR,kBACLrR,EAAKsR,mBAJaxtB,EAAA,gBAAAkC,EAAAhB,GAAA,sBAAAA,GAAA,OAAAA,EAAA,UAAA6a,UAAA,2DAAA5Z,QAAAjB,IAAAgB,EAAAJ,UAAApB,OAAAY,OAAAJ,KAAAY,WAAA2qB,aAAAxrB,MAAAiB,EAAAtB,YAAA,EAAA8S,UAAA,EAAAD,cAAA,KAAAvS,IAAAR,OAAA+sB,eAAA/sB,OAAA+sB,eAAAvrB,EAAAhB,GAAAgB,EAAAmrB,UAAAnsB,GAAA,CAAAA,EArCF8pB,8CAwGX5c,GAQLA,EAAU1N,OAAO4T,WANboZ,MAAO,MACP7jB,UAAW,KACX8jB,WACArB,gBACAtU,SAEoC5J,GACxC,IAAMiC,EAAS5I,KAAKgf,uBAAuBpW,OAErCud,E/BOP,SAASC,GAAapb,EAAYoB,EAAY8X,EAAemC,EAAgB1f,GAOhF,IAAM2f,GACF5a,UACAX,QACAwb,SAEEC,GAPN7f,EAAU1N,OAAO4T,WAHb2Z,UACAC,eAEoC9f,IAOjB6f,OACjBE,EAAaL,GAAkBA,EAAe3kB,OAAS,EAEvDilB,KAiDN,GA/CgBzC,EAAc5X,MAAM,KAE5BxD,QAAQ,SAAC8d,GACb,IAAK,IAAIruB,EAAI,EAAGA,EAAIyS,EAAWtJ,OAAQnJ,GAAK,EACxC,GAAIyS,EAAWzS,GAAGO,SAAW8tB,EAAS,CAClCD,EAAWzgB,KAAK8E,EAAWzS,IAC3B,SAMZouB,EAAW7d,QAAQ,SAACwC,GAEhBgb,EAAO5a,OAAOxF,KAAKoF,EAAMI,YAGzB8a,GACAF,EAAO5a,OAAOxF,MACVpN,KAAM,MACNuC,KAAM,eAId8Q,EAAmBC,EAAY,SAAC7T,GAC5B+tB,EAAOvb,KAAK7E,SACZ,IAAM2gB,EAAYP,EAAOvb,KAAKrJ,OAAS,EAEvCilB,EAAW7d,QAAQ,SAACwC,EAAOgE,GACvBgX,EAAOvb,KAAK8b,GAAWvX,EAFf,GAE6BhE,EAAMmE,aAAa1E,KAAKxS,KAE7DiuB,IACAF,EAAOvb,KAAK8b,GAAWF,EAAWjlB,QAAUnJ,GAGhD+tB,EAAOC,KAAKrgB,KAAK3N,GAIbmuB,GAAcJ,EAAOvb,KAAK8b,GAAW3gB,KAAK3N,KAI9CmuB,GA7HR,SAAkB1J,EAASqJ,GAOvB,IAPuC,IAC/Btb,EAAiBiS,EAAjBjS,KAAMW,EAAWsR,EAAXtR,OACVoH,SACAgU,SACAC,SACAxuB,EAAI8tB,EAAe3kB,OAAS,EAEzBnJ,GAAK,EAAGA,IACXua,EAAYuT,EAAe9tB,GAAG,GAC9BuuB,EAAWT,EAAe9tB,GAAG,IAC7BwuB,EAAW1G,GAAc3U,EAAQoH,MThEf,mBSuEHgU,EAEX1W,EAAUrF,EAAM,SAACpQ,EAAGyI,GAAJ,OAAU0jB,EAASnsB,EAAEosB,EAAS9kB,OAAQmB,EAAE2jB,EAAS9kB,UAC1DoI,EAAQyc,GAAW,WAC1B,IAAMzV,EAAcH,EAAUnG,EAAMgc,EAAS9kB,OACvC+kB,EAAYF,EAASA,EAASplB,OAAS,GACvCkQ,EAAekV,EAAShM,MAAM,EAAGgM,EAASplB,OAAS,GACnDmQ,EAAqBD,EAAa3J,IAAI,SAAAxN,GAAA,OAAK4lB,GAAc3U,EAAQ6O,KAEvElJ,EAAYvI,QAAQ,SAAC6I,GACjBA,EAAazL,KAAKwL,EAAmBC,EAAcC,EAAcC,MAGrEzB,EAAUiB,EAAa,SAAC1W,EAAGyI,GACvB,IAAMzK,EAAIgC,EAAE,GACNX,EAAIoJ,EAAE,GACZ,OAAO4jB,EAAUruB,EAAGqB,KAIxB+Q,EAAKrJ,OAAS,EACd2P,EAAYvI,QAAQ,SAACwI,GACjBvG,EAAK7E,KAAL6E,UAAauG,EAAM,OAnBG,IAsB1BwV,EAA8C,SAAnCvgB,OAAOugB,GAAUrlB,cAA2B,OAAS,MAChE2O,EAAUrF,EAAM+F,EAAUiW,EAAS1rB,KAAMyrB,EAAUC,EAAS9kB,UAIpE+a,EAAQuJ,QACRxb,EAAKjC,QAAQ,SAACtP,GACVwjB,EAAQuJ,KAAKrgB,KAAK1M,EAAMytB,SAjDhC,CA8HiBX,EAAQD,GAGjB1f,EAAQ8f,WAAY,CACpB,IAAMS,EAAUre,qBAASA,MAAMyd,EAAO5a,OAAOhK,UAASuG,IAAI,sBAC1Dqe,EAAOvb,KAAKjC,QAAQ,SAACyG,GACjBA,EAAMzG,QAAQ,SAACiC,EAAMxS,GACjB2uB,EAAQ3uB,GAAG2N,KAAK6E,OAGxBub,EAAOvb,KAAOmc,EAGlB,OAAOZ,G+BjF+B5tB,KAC9BsH,KACAA,KAAKgf,uBAAuBpW,OAC5B5I,KAAKmP,YACLxI,EAAQke,aAAejc,EAAOX,IAAI,SAAAxN,GAAA,OAAK5B,EAAEC,SAAQiK,OAAS/C,KAAKwS,eAC/D7L,EAAQ4J,MAEJkW,WAA8B,WAAlB9f,EAAQsf,MACpBO,SAAU7f,EAAQuf,UAI1B,IAAKvf,EAAQvE,UACT,OAAO+jB,EAxBG,IA2BN/jB,EAAcuE,EAAdvE,UACA2I,EAAuBob,EAAvBpb,KAAMW,EAAiBya,EAAjBza,OAAQ6a,EAASJ,EAATI,KAChBY,EAAazb,EAAOzD,IAAK,SAAAxN,GAAA,OAAKA,EAAE3B,OAEhCsuB,EADgBnuB,OAAO6M,KAAK1D,GACA2P,OAAO,SAACC,EAAKC,GAC3C,IAAMC,EAAMiV,EAAWlhB,QAAQgM,GAI/B,OAHa,IAATC,GACAF,EAAI9L,MAAMgM,EAAK9P,EAAU6P,KAEtBD,OAiCX,MA9BsB,WAAlBrL,EAAQsf,MACRmB,EAAYte,QAAQ,SAACue,GACjB,IAAMC,EAAOD,EAAK,GACZE,EAAQF,EAAK,GAEnBtc,EAAKuc,GAAMxe,QAAQ,SAACwI,EAAOkW,GACvBzc,EAAKuc,GAAME,GAAYD,EAAM7uB,YAEzB4Y,EACAiV,EAAKiB,GACL9b,EAAO4b,QAKnBvc,EAAKjC,QAAQ,SAACwI,EAAOkW,GACjBJ,EAAYte,QAAQ,SAACue,GACjB,IAAMC,EAAOD,EAAK,GACZE,EAAQF,EAAK,GAEnB/V,EAAMgW,GAAQC,EAAM7uB,YAEhB4Y,EAAMgW,GACNf,EAAKiB,GACL9b,EAAO4b,QAMhBnB,wCA2BFsB,GAAwD,IAA7CC,EAA6CtiB,UAAA1D,OAAA,YAAA0D,UAAA,GAAAA,UAAA,MAA9BwH,EAA8BxH,UAAA1D,OAAA,YAAA0D,UAAA,GAAAA,UAAA,IAAnB4Y,cACpC2C,KAAmB8G,EAAU1kB,OAE7B4kB,EC1Kd,SAASC,GAAS3K,EAAW/R,EAAUwc,EAAUG,GAC7C,IAAMC,EAxDV,SAAsB7K,EAAW/R,GAC7B,IAAMwC,KAEAqa,EADa9K,EAAUrO,gBACCjD,eAY9B,OAVA1S,OAAOub,QAAQuT,GAAYjf,QAAQ,SAAArO,GAAW,IAATX,EAASkb,GAAAva,EAAA,MACtCyQ,GAAYA,EAASxJ,QACU,IAA3BwJ,EAASjF,QAAQnM,IACjB4T,EAAOxH,KAAKpM,GAGhB4T,EAAOxH,KAAKpM,KAIb4T,EAfX,CAwDkCuP,EAAW/R,GACnC8c,EAhCV,SAAwB/K,GAA0B,IAAfyK,EAAetiB,UAAA1D,OAAA,YAAA0D,UAAA,GAAAA,UAAA,MACxCkhB,KAEA2B,EADahL,EAAUrO,gBACDrD,aACtBgJ,EAAaQ,GAAamT,iBAchC,OAZAjvB,OAAO6M,KAAKmiB,GAAUnf,QAAQ,SAACqf,GACU,iBAA1BT,EAASS,KAChBT,EAASS,GAAeF,EAASE,GAAazQ,YAElD,IAAM0Q,EAAYrT,GAAasT,QAAQX,EAASS,IAC5CC,EACA9B,EAAO6B,GAAeC,GAEtB9B,EAAO6B,GAAe5T,EACtBmT,EAASS,GAAehU,MAGzBmS,EAlBX,CAgCqCrJ,EAAWyK,GACtC1c,EAAaiS,EAAUrO,gBACvB0Z,EAAgBtd,EAAWI,YAC3Bmd,EAASvd,EAAWlS,KACpB0vB,KACAC,KACA/c,KACAyF,KACApG,KACF4c,SAGJ1uB,OAAOub,QAAQ8T,GAAexf,QAAQ,SAAArO,GAAkB,IAAAhB,EAAAub,GAAAva,EAAA,GAAhBX,EAAgBL,EAAA,GAAXD,EAAWC,EAAA,GACpD,IAAgC,IAA5BquB,EAAU7hB,QAAQnM,IAAekuB,EAAWluB,GAG5C,OAFA4R,EAAOxF,KAAKsD,KAAYhQ,EAAMkS,WAEtBlS,EAAMkS,SAASrQ,MACvB,KAAK8D,EAAUC,QACXqpB,EAAWviB,KAAKpM,GAChB,MACJ,QACA,KAAKqF,EAAUE,UACXmpB,EAAatiB,KAAKpM,MAK9B,IAAI4uB,EAAW,EACfvc,EAAmB8Q,EAAU9N,YAAa,SAAC5W,GACvC,IAAI+d,EAAO,GACXkS,EAAa1f,QAAQ,SAACqX,GAClB7J,EAAUA,EAAVA,IAAkBgS,EAAcnI,GAAG1Q,aAAa1E,KAAKxS,cAErD4Y,EAAQmF,IACRnF,EAAQmF,GAAQoS,EAChB3d,EAAK7E,SACLsiB,EAAa1f,QAAQ,SAACqX,GAClBpV,EAAK2d,GAAUvI,GAAKmI,EAAcnI,GAAG1Q,aAAa1E,KAAKxS,KAE3DkwB,EAAW3f,QAAQ,SAACqX,GAChBpV,EAAK2d,GAAUvI,IAAMmI,EAAcnI,GAAG1Q,aAAa1E,KAAKxS,MAE5DmwB,GAAY,GAEZD,EAAW3f,QAAQ,SAACqX,GAChBpV,EAAKoG,EAAQmF,IAAO6J,GAAGja,KAAKoiB,EAAcnI,GAAG1Q,aAAa1E,KAAKxS,QAM3E,IAAIomB,KACAC,EAAgB,SAAhBA,IAAgB,OAAM3B,EAAUpN,gBAcpC,OAbA9E,EAAKjC,QAAQ,SAACiS,GACV,IAAMxL,EAAQwL,EACd0N,EAAW3f,QAAQ,SAACqX,GAChB5Q,EAAM4Q,GAAK6H,EAAW7H,GAAGpF,EAAIoF,GAAIvB,EAAeD,OAGpDkJ,GACAA,EAAkB5I,wBAClB0I,EAAeE,GAGfF,EAAe,IAAItpB,GAAU0M,EAAMW,GAAU5S,KAAMyvB,IAEhDZ,GDsGkBC,cADP5nB,KAAMynB,EAAWC,IAe/B,OAZAxL,GACIyL,EACA/Z,GACE6Z,YAAW9G,gBAAeuH,eAAgBnT,GAAamT,kBACzDR,GAGA9a,EAAOoR,WACPhe,KAAKohB,UAAUlb,KAAKyhB,GAExBA,EAAa/E,QAAU5iB,KAEhB2nB,qCAsDLtB,GACF,IAAMsC,EAAU3oB,KAAKmd,SACjB8I,MAAO,MACP1V,KAAM8V,IAGJuC,GADSD,EAAQjd,OAAOzD,IAAI,SAAAxN,GAAA,OAAS6Q,EAAMxS,QACnBuiB,OAAOsN,EAAQ5d,MAEvC8d,EAAW,IAAI7oB,KAAKglB,YAAY4D,EAAcD,EAAQjd,QAAU0N,WAAY,WAElF,OADAyP,EAAS9C,gBAAkBM,EACpBwC,0CAwBAxtB,EAAMsL,GACbtL,EAAOA,GAAQ2E,KAAKogB,YACpBzZ,EAAU1N,OAAO4T,WAAa8O,eAAgB,KAAOhV,GAErD,IAAMiC,EAAS5I,KAAK4O,gBAAgBhG,OAC9BkgB,EAAUlgB,EAAOX,IAAI,SAAAxN,GAAA,OAAK8f,EAAEyF,kBAC5B+I,EAAYD,EAAQ,GAAGpnB,OACzBsnB,SACAC,SACAC,SAEJ,GAAI7tB,IAASkD,EAAWC,UAEpB,IADAwqB,KACKC,EAAS,EAAGA,EAASF,EAAWE,IAAU,CAC3C,IAAMlO,KACN,IAAKmO,EAAS,EAAGA,EAAStgB,EAAOlH,OAAQwnB,IACrCnO,EAAInS,EAAOsgB,GAAQpwB,QAAUgwB,EAAQI,GAAQD,GAEjDD,EAAe9iB,KAAK6U,QAErB,GAAI1f,IAASkD,EAAWE,QAAS,CAEpC,IADAuqB,GAAkBpgB,EAAOX,IAAI,SAAAxN,GAAA,OAAK8f,EAAEzhB,SAAQiK,KAAK4D,EAAQgV,iBACpDsN,EAAS,EAAGA,EAASF,EAAWE,IAAU,CAC3C,IAAMlO,KACN,IAAKmO,EAAS,EAAGA,EAAStgB,EAAOlH,OAAQwnB,IACrCnO,EAAI7U,KAAK4iB,EAAQI,GAAQD,IAE7BD,EAAe9iB,KAAK6U,EAAIhY,KAAK4D,EAAQgV,iBAEzCqN,EAAiBA,EAAejmB,KAAK,UAClC,IAAI1H,IAASkD,EAAWG,QAU3B,MAAM,IAAIuQ,MAAJ,aAAuB5T,EAAvB,qBARN,IADA2tB,GAAkBpgB,EAAOX,IAAI,SAAAxN,GAAA,OAAK8f,EAAEzhB,UAC/BmwB,EAAS,EAAGA,EAASF,EAAWE,IAAU,CAC3C,IAAMlO,KACN,IAAKmO,EAAS,EAAGA,EAAStgB,EAAOlH,OAAQwnB,IACrCnO,EAAI7U,KAAK4iB,EAAQI,GAAQD,IAE7BD,EAAe9iB,KAAK6U,IAM5B,OAAOiO,yCAGD1d,GACN,IAAMwH,EAAYxH,EAAMxS,OACxBkH,KAAKwS,gBAALxS,IAA2B8S,EAC3B,IAAMkR,EAAoBhkB,KAAKkgB,mBAE/B,GAAK8D,EAAkB5Y,YAAYE,EAAMxS,QAElC,CACH,IAAMiQ,EAAaib,EAAkBpb,OAAO2c,UAAU,SAAA9qB,GAAA,OAAa0uB,EAAUrwB,SAAWga,IACxF/J,GAAc,IAAMib,EAAkBpb,OAAOG,GAAcuC,QAH3D0Y,EAAkBpb,OAAO1C,KAAKoF,GAYlC,OALA0Y,EAAkB3Y,iBAAmB,KACrC2Y,EAAkBnY,iBAAmB,KACrCmY,EAAkBvY,eAAiB,KAEnCzL,KAAKif,wBAAwBC,wBACtBlf,qDAuCQ0L,EAAQ0d,EAAYxc,GAAQ,IAAAvT,EAAA2G,KAC3C0L,EAAS8T,GAAmB9T,GAC5BkB,EAAS3T,OAAO4T,WAAamR,aAAiBqL,eAAqBzc,GAEnE,IAAMwQ,EAAepd,KAAKqd,kBACpBiM,EAAUF,EAAWtO,MAAM,EAAGsO,EAAW1nB,OAAS,GAClD6nB,EAAaH,EAAWA,EAAW1nB,OAAS,GAElD,GAAI0b,EAAa1R,EAAO5S,QAAU8T,EAAOyc,WACrC,MAAM,IAAIpa,MAASvD,EAAO5S,KAApB,sCAGV,IAAM0wB,EAAkBF,EAAQrhB,IAAI,SAACqD,GACjC,IAAMme,EAAYrM,EAAa9R,GAC/B,IAAKme,EAED,MAAM,IAAIxa,MAAS3D,EAAb,gCAEV,OAAOme,EAAUxnB,QAGf4b,EAAQ7d,KAAK6d,QAEb6L,EAAK7L,EAAMjP,gBAAgBhG,OAC3B+gB,EAAiBH,EAAgBvhB,IAAI,SAAAxN,GAAA,OAAOivB,EAAGxX,KAEjDyM,KACAC,EAAgB,SAAhBA,IAAgB,OAAMjK,EAAK9E,gBAEzB+Z,KACNzd,EAAmB0R,EAAM1O,YAAa,SAAC5W,GACnC,IAAMsxB,EAAaF,EAAe1hB,IAAI,SAAAxO,GAAA,OAAS6R,EAAMmE,aAAa1E,KAAKxS,KACvEqxB,EAAerxB,GAAKgxB,sIAAcM,GAAdN,QAA0BhxB,EAAGqmB,EAAeD,OAhCzB,IAAAjW,EAkC3BoQ,IAAc8Q,IAAkBle,IAAUA,EAAO5S,OAA1DwS,EAlCoCwe,GAAAphB,EAAA,MAuC3C,OAJAmV,EAAMkM,SAASze,GAEf4Q,GAAkB2B,ElC9cb,sBkC8c8CjR,OAAQlB,EAAQ9C,OAAQ0gB,GAAWC,GAE/E1L,0CAWAyD,GAA2D,IAA9C1U,EAA8CxH,UAAA1D,OAAA,YAAA0D,UAAA,GAAAA,UAAA,MAAjC4kB,EAAiC5kB,UAAA,GAAjB2d,EAAiB3d,UAAA1D,OAAA,YAAA0D,UAAA,GAAAA,UAAA,MAC5D6kB,EAAkBrd,EAAOqd,gBACzBtI,EAAsB/U,EAAOgV,SAC7BsI,EAAUtd,EAAOsd,QACjBpH,EFlLkB,SAAC3G,GAC7B,KAAOA,EAAMyG,SACTzG,EAAQA,EAAMyG,QAElB,OAAOzG,EAJqB,CEkLWnc,MAC7ByhB,EAAuBqB,EAAUa,sBAEjCpC,GACF2B,aF7LuB,SAAtBiH,EAAuBhO,GAChC,OAAIA,EAAMyG,SAAWzG,EAAMQ,YAAYyN,KAAK,SAAA3vB,GAAA,MAAc,UAAT5B,EAAE2jB,KACxC2N,EAAoBhO,EAAMyG,SAE9BzG,EAJwB,CE2LkBnc,MAGzCmc,MAAO2G,GAgBX,OAbAkH,GFnE0B,SAACvI,GAA6C,IAAvB7U,EAAuBxH,UAAA1D,OAAA,YAAA0D,UAAA,GAAAA,UAAA,MAAV+W,EAAU/W,UAAA,GACxEilB,SACEJ,EAAkBrd,EAAOqd,gBACzBvN,EAAW9P,EAAO8P,SAClB5iB,EAAS8S,EAAOwV,OAAhBtoB,IAA0B8S,EAAOgV,SAGnCyI,EADAJ,EACkBxI,EAAqBQ,eAErBR,EAAqBmC,iBAG1B,OAAblH,SACO2N,EAAgBvwB,GAEvBuwB,EAAgBvwB,IACZqiB,QACAvP,UAjBsB,CEmEW6U,EAAsB7U,EAAQ5M,MACnEqhB,GAAyBC,EAAaC,GAAcE,uBAAsBG,SAAUD,GAChF1oB,OAAO4T,QACHqd,WACDtd,IAEHqd,GF7F6B,SAACxI,EAAsBF,EAAYC,GACxE,IAAMoC,EAAmBnC,EAAqBmC,iBAE9C,IAAK,IAAMxB,KAAUwB,EAAkB,CACnC,IACMrB,EADYqB,EAAiBxB,GACNxV,OACvB+U,EAAsBH,EAAe5U,OAAOgV,SAC5C0I,GAAwB9I,EAAeuB,WAAWuH,uBACpD9I,EAAeuB,WAAWuH,sBAAsB/H,EAAYf,EAAe5U,QAC/E,GAAI2V,EAAWX,WAAaD,GAAuB2I,EAAuB,CACtE,IAAMC,EAAgBhI,EAAW7F,SACjC2E,GAAyBkJ,EAAehJ,GACpCE,uBACAC,qBACAE,SAAUD,GACXY,KAf0B,CE8FHd,EAAsBF,GAC5C3U,SACAmW,eAID/iB,sCAUPwqB,EAAWne,GACX,OAAQme,GACR,IlC/gBmB,ckCghBfxqB,KAAK8lB,eAAe5f,KAAKmG,GAG7B,OAAOrM,+CASEwqB,GACT,OAAQA,GACR,IlC9hBmB,ckC+hBfxqB,KAAK8lB,kBAIT,OAAO9lB,qDAUQkd,EAAWgN,GAAS,IAAAlwB,EAAAgG,KACfA,KAAK8lB,eACXhd,QAAQ,SAAAzP,GAAA,OAAM0kB,EAAGrlB,KAAK0e,EAAM8F,EAAWgN,uCA8CpDO,EAAkB7d,GACnB,IAAMwQ,EAAepd,KAAKqd,kBAE1B,IAAKD,EAAaqN,GACd,MAAM,IAAIxb,MAAJ,SAAmBwb,EAAnB,kBAGV,IAAMC,EAAe9d,EAAO9T,MAAW2xB,EAAlB7d,UAErB,GAAIwQ,EAAasN,GACb,MAAM,IAAIzb,MAAJ,SAAmByb,EAAnB,mBAGV,IAb2BC,EEljB5B,SAAgCC,EAAcxe,EAAYQ,GAAQ,IAC/Die,EAA4Cje,EAA5Cie,QAASC,EAAmCle,EAAnCke,UAAWC,EAAwBne,EAAxBme,QAAS9sB,EAAe2O,EAAf3O,MAAOwO,EAAQG,EAARH,IAD2B7T,EAEhDgyB,EAAapU,SAFmC+D,EAAA9X,EAAA7J,EAAA,GAE9DoyB,EAF8DzQ,EAAA,GAExD0Q,EAFwD1Q,EAAA,GAIhEsQ,IACD5sB,EAAmB,IAAVA,KAAiBA,GAASA,EAAQ+sB,GAASA,EAAO/sB,EAC3DwO,EAAe,IAARA,KAAeA,GAAOA,EAAMwe,GAAUA,EAAO,EAAKxe,EAErDqe,IACAC,EAAUlnB,KAAKqnB,KAAKrnB,KAAKsnB,IAAI1e,EAAMxO,GAAS6sB,IAGhDD,EAxDgB,SAAlBO,EAAmBL,EAAS9sB,EAAOwO,GAIrC,IAHA,IAAMoe,KACF5Y,EAAOhU,EAEJgU,EAAOxF,GACVoe,EAAQ3kB,KAAK+L,GACbA,GAAQ8Y,EAIZ,OAFAF,EAAQ3kB,KAAK+L,GAEN4Y,EA8COO,CAAgBL,EAAS9sB,EAAOwO,IAG1Coe,EAAQ,GAAKG,GACbH,EAAQpjB,QAAQujB,GAEhBH,EAAQA,EAAQnpB,OAAS,IAAMupB,GAC/BJ,EAAQ3kB,KAAK+kB,EAAO,GAIxB,IADA,IAAMI,KACG9yB,EAAI,EAAGA,EAAIsyB,EAAQnpB,OAAS,EAAGnJ,IACpC8yB,EAAanlB,MACTjI,MAAO4sB,EAAQtyB,GACfkU,IAAKoe,EAAQtyB,EAAI,KAIzB,IAAM+yB,KAYN,OAXAnf,EAAmBC,EAAY,SAAC7T,GAC5B,IAAM+Y,EAAQsZ,EAAanb,aAAa1E,KAAKxS,GAC7C,GAAI+Y,aAAiB5E,EACjB4e,EAAWplB,KAAKoL,OADpB,CAKA,IAAM/P,EArEU,SAAlBgqB,EAAmBF,EAAc7xB,GAOnC,IANA,IAAIgyB,EAAU,EACVC,EAAWJ,EAAa3pB,OAAS,EACjCgqB,SACAnqB,SAGGiqB,GAAWC,GAAU,CAIxB,GAAIjyB,IAFJ+H,EAAQ8pB,EADRK,EAASF,EAAU3nB,KAAK8M,OAAO8a,EAAWD,GAAW,KAGlCvtB,OAASzE,EAAQ+H,EAAMkL,IACtC,OAAOlL,EACA/H,GAAS+H,EAAMkL,IACtB+e,EAAUE,EAAS,EACZlyB,EAAQ+H,EAAMtD,QACrBwtB,EAAWC,EAAS,GAI5B,OAAO,KAiDWH,CAAgBF,EAAc/Z,GAC5Cga,EAAWplB,KAAQ3E,EAAMtD,MAAzBqtB,IAAkC/pB,EAAMkL,SAGnC6e,aAAY/T,KAAMsT,GA1CxB,CF+jBsB7qB,KAAK4O,gBAAgBxD,YAAYqf,GACWzqB,KAAKmP,YAAavC,GAA3E0e,EAdmBX,EAcnBW,WAAY/T,EAdOoT,EAcPpT,KAEdoU,EAAW7S,IAAcwS,KAEvBxyB,KAAM4xB,EACNrvB,KAAM8D,EAAUE,UAChB0W,QAASnX,EAAiBI,OAC1BuY,UACCmT,IAAe,GAElB7M,EAAQ7d,KAAK6d,QAKnB,OAJAA,EAAMkM,SAAS4B,GAEfzP,GAAkB2B,ElCxmBjB,OkCwmB8C4M,mBAAkB7d,SAAQ8d,gBAAgB,MAElF7M,+CA8BP,OAAO,IAAIxf,EAHE2B,KAAK4rB,UAAUrtB,EAAWC,WACxBwB,KAAK6rB,wEAljBWjf,GAC/B,OAAOF,EAAkBK,iBAAiBH,wCAf1C,OAAOmI,SAskBA1W,GG9pBA4U,GAAoDM,GAApDN,IAAKG,GAA+CG,GAA/CH,IAAKI,GAA0CD,GAA1CC,IAAKE,GAAqCH,GAArCG,IAAKC,GAAgCJ,GAAhCI,MAAOC,GAAyBL,GAAzBK,KAAMC,GAAmBN,GAAnBM,MAAYiY,GAAOvY,GAAZO,YCsBvDzV,GAAU0tB,WACNC,QC4LmB,SAAAA,UAAA,QAAAvxB,EAAA2K,UAAA1D,OAAIuqB,EAAJpjB,MAAApO,GAAAT,EAAA,EAAAA,EAAAS,EAAAT,IAAIiyB,EAAJjyB,GAAAoL,UAAApL,GAAA,OACnB,SAAC0Y,GAAqC,IAC9BwZ,EAAYxZ,EACZyZ,SACEC,KACApO,GAJ4B5Y,UAAA1D,OAAA,YAAA0D,UAAA,GAAAA,UAAA,IAAtB4Y,eAIaA,UAezB,OAbAiO,EAAWnjB,QAAQ,SAACsT,GAChB8P,EAAY9P,EAAU8P,GACtBE,EAAYlmB,KAAZkmB,+HAAoBF,EAAUvP,cACzBwP,IACDA,EAAYD,KAIpBlO,GAAakO,EAAUG,UAAU3Z,EAAI0Z,GACjCA,EAAY1qB,OAAS,GACrByqB,EAAUG,UAGPJ,ID/MXK,IC0He,SAAAA,MAAA,QAAA9xB,EAAA2K,UAAA1D,OAAIsF,EAAJ6B,MAAApO,GAAAT,EAAA,EAAAA,EAAAS,EAAAT,IAAIgN,EAAJhN,GAAAoL,UAAApL,GAAA,OAAa,SAAAS,GAAA,OAAMiY,EAAG6Z,IAAH7Z,QAAU1L,KDzH5C8W,OC8BkB,SAAAA,SAAA,QAAArjB,EAAA2K,UAAA1D,OAAIsF,EAAJ6B,MAAApO,GAAAT,EAAA,EAAAA,EAAAS,EAAAT,IAAIgN,EAAJhN,GAAAoL,UAAApL,GAAA,OAAa,SAAAS,GAAA,OAAMiY,EAAGoL,OAAHpL,QAAa1L,KD7BlDwlB,QC6DmB,SAAAA,UAAA,QAAA/xB,EAAA2K,UAAA1D,OAAIsF,EAAJ6B,MAAApO,GAAAT,EAAA,EAAAA,EAAAS,EAAAT,IAAIgN,EAAJhN,GAAAoL,UAAApL,GAAA,OAAa,SAAAS,GAAA,OAAMiY,EAAG8Z,QAAH9Z,QAAc1L,KD5DpD4gB,QCoJmB,SAAAA,UAAA,QAAAntB,EAAA2K,UAAA1D,OAAIsF,EAAJ6B,MAAApO,GAAAT,EAAA,EAAAA,EAAAS,EAAAT,IAAIgN,EAAJhN,GAAAoL,UAAApL,GAAA,OAAa,SAAAS,GAAA,OAAMiY,EAAGkV,QAAHlV,QAAc1L,KDnJpDylB,kBEvB6B,SAAAA,oBAAA,QAAAhyB,EAAA2K,UAAA1D,OAAIsF,EAAJ6B,MAAApO,GAAAT,EAAA,EAAAA,EAAAS,EAAAT,IAAIgN,EAAJhN,GAAAoL,UAAApL,GAAA,OAAa,SAAAS,GAAA,OAAMiY,EAAG+Z,kBAAH/Z,QAAwB1L,KFwBxEuJ,KEfgB,SAAAA,OAAA,QAAA9V,EAAA2K,UAAA1D,OAAIsF,EAAJ6B,MAAApO,GAAAT,EAAA,EAAAA,EAAAS,EAAAT,IAAIgN,EAAJhN,GAAAoL,UAAApL,GAAA,OAAa,SAAAS,GAAA,OAAMiY,EAAGnC,KAAHmC,QAAW1L,KFgB9CoH,eACA+D,cACAua,YG/BG,SAAAA,YAAsBhX,EAAYC,GACrC,OAAOvH,EAAasH,EAAYC,EAAYN,GAAkBK,EAAYC,QH+B1EF,iBACAG,kBACA+W,c7BxBG,SAAAA,cAAwBjX,EAAYC,EAAYpH,GACnD,OAAOiH,GAAMC,GAAcC,EAAYC,EAAYpH,GAAWqH,GAAeF,EAAYC,EAAYpH,K6BwBrGiH,UAEJnX,GAAUuuB,MAAQA,EAClB3zB,OAAO4T,OAAOxO,GAAWwuB,GACzBxuB,GAAUyB,kBAAoBA,EAC9BzB,GAAUE,WAAaA,EACvBF,GAAUiB,cAAgBA,EAC1BjB,GAAUqO,kBAAoBA,EAC9BrO,GAAUtD,QAAU+xB,GAAI/xB,QAETsD,siBIhDf,SAAA5D,EAAAhB,GACA,UAAAiB,QAAA3C,UAAA,UAAA2C,QAAA1C,QACAA,oBAEAC,yRAJA,CASCE,kBACD,gBAAAsC,GCTA,IAAAhB,KAGA,SAAAJ,EAAAW,GAGA,GAAAP,EAAAO,GACA,OAAAP,EAAAO,GAAAjC,QAGA,IAAAQ,EAAAkB,EAAAO,IACAzB,IACAC,KACAT,YAUA,OANAU,mCAGAT,OAGAO,EAAAR,QA0DA,OArDAM,MAGAA,MAGAA,oBACAA,UACAY,2BAA0CE,uBAK1Cd,gBACA,oBAAAiB,eAAAC,aACAN,4CAAwDO,iBAExDP,sCAAiDO,YAQjDnB,kBAEA,GADA,EAAAoB,IAAAgB,EAAApB,EAAAoB,IACA,EAAAhB,EAAA,OAAAgB,EACA,KAAAhB,GAAA,UAAAiB,QAAAD,SAAAd,WAAA,OAAAc,EACA,IAAAT,EAAAf,OAAAY,OAAA,MAGA,GAFAxB,OACAY,mCAAyCE,wBACzC,EAAAM,GAAA,iBAAAgB,EAAA,QAAAlC,KAAAkC,EAAApB,EAAAR,EAAAmB,EAAAzB,EAAA,SAAAkB,GAAgH,OAAAgB,EAAAhB,IAAqBM,cACrI,OAAAC,GAIA3B,gBACA,IAAAoB,EAAAgB,KAAAd,WACA,WAA2B,OAAAc,EAAAG,SAC3B,WAAiC,OAAAH,GAEjC,OADApC,aACAoB,GAIApB,kBAAsD,OAAAY,OAAAoB,UAAAC,eAAA5B,KAAA+B,EAAAhB,IAGtDpB,OAIAgB,IAAAmB,EAAA,GDxEA,ECwEA,SAAAC,EAAAhB,EAAAJ,GAAA,aAAAA,IAAAI,GAAA,IAAAO,EAAA,oBAAAS,IAAAhB,GAAA,QAAAJ,EAAA,EAAAA,EAAAI,EAAAiI,OAAArI,IAAA,KAAAW,EAAAP,EAAAJ,GAAAW,EAAAb,WAAAa,EAAAb,aAAA,EAAAa,EAAAgS,cAAA,YAAAhS,MAAAiS,UAAA,GAAAhT,OAAAC,eAAAuB,EAAAT,EAAAF,IAAAE,IAAA,gBAAAP,EAAAJ,EAAAW,GAAA,OAAAX,GAAAoB,EAAAhB,EAAAY,UAAAhB,GAAAW,GAAAS,EAAAhB,EAAAO,GAAAP,GAAA,GClFMszB,EAAY,SAAZA,EAAa1c,EAAK2c,GACpB3c,EAAIvH,QAAQ,SAACue,YACLA,GAA+B,OAATA,IAG1B2F,EAAK3F,GAAQ,MAAAruB,EAAA,WAKjB,SAAAyB,EAAa4V,iGAAKtE,QACd/L,KAAKitB,QACLF,EAAU1c,EAAKrQ,KAAKitB,qDAGhB5c,GAEJ,OADA0c,EAAU1c,EAAKrQ,KAAKitB,MACbjtB,6CAIP,OAAO/G,OAAO6M,KAAK9F,KAAKitB,iDAGTC,EAAMC,GACrB,IAAIrzB,SACEszB,KACFC,EAAKH,EAAKD,KACVK,EAAKH,EAAKF,KACd,IAAKnzB,KAAOuzB,OACE/yB,eAAe5B,KAAK20B,EAAIvzB,KAG9BA,KAAOwzB,GAGXF,EAAalnB,KAAKpM,IAEtB,OAAO,IAAIyzB,EAAWH,SAjCT,GAiCSA,+jBClC9B,IACII,EAAiB,SAAjBA,EAAkBtlB,GAEd,GAAmB,qBAARA,EAAP,YAAAvN,EAAOuN,IAAkB,CACzB,GAAY,OAARA,EAAgB,SAEpB,GAAc,oBADNjP,OAAOoB,UAAUiI,SAAS5J,KAAKwP,GAEnC,MAA8E,YAAtEA,EAAI8c,YAAY1iB,WAAW+F,MAAM,4BAA8B,GAG/E,UAGsBolB,EAAwB,oBAAXt1B,UAAwCA,OACpDu1B,EAAeD,EAAIE,uBAAyBF,EAAIG,6BACvEH,EAAII,0BAA4BJ,EAAIK,wBACpCL,EAAIM,yBACJ,SAAU1hB,GACN2hB,WAAW3hB,EANF,KASjB4hB,EAAiB,SAAjBA,IACI,OAAIA,EAAeC,cAAe,IAAItuB,MAAO2K,UACjC0jB,EAAeC,WAAY5rB,YAAc2rB,EAAeE,QAAQ7rB,YAG5E2rB,EAAeE,KAAO,GACtBF,EAAeC,YAAa,IAAItuB,MAAO2K,WACJjI,YAAc2rB,EAAeE,QAAQ7rB,aAwC5E8rB,EAAO,SAAPA,IAAsB,QAAA3zB,EAAA2K,UAAA1D,OAAXgf,EAAW7X,MAAApO,GAAApB,EAAA,EAAAA,EAAAoB,EAAApB,IAAXqnB,EAAWrnB,GAAA+L,UAAA/L,GAClB,IAAMg1B,KAEN,OADA3N,EAAO5X,QAAQ,SAAArO,GAAA,OAAS4zB,EAAInoB,KAAJmoB,UAAYjnB,MAC7BinB,GAQXC,EAAY,SAAZA,EAAaC,GACT,IAAIC,KACAC,EAAiB,KAKrB,OAHAF,EAAmBA,GACa,mBAArBA,GAAmCA,GAAqB,aAE5D,SAACG,EAAWxE,MACZhkB,KAAKqB,MAAMinB,EAAOE,GACE,OAAnBD,IACAA,EAAiBf,EAAa,WAC1B,IAAMiB,EAAQH,EAAM1T,MAAM,GAC1B0T,EAAM9sB,OAAS,EACf+sB,EAAiB,KAEVE,EAzCN5c,OAAO,SAACpJ,EAAOoV,GAEZ,OAAIA,EAAGoQ,QAAQxlB,EAAMV,IACVU,GAGXA,EAAMV,IAAI8V,EAAGoQ,MAAQ,EACrBxlB,EAAMimB,OAAO1oB,KAAK6X,GAEXpV,KACNV,OAAS2mB,YACbA,OA8Ba9lB,QAAQ,SAAArO,GAAA,OAAMsjB,MAC5BwQ,EAAiBrE,QAKjC2E,EAAQ,SAARA,EAAQp0B,GAAA,OAAa,mBAAAhB,EAAA2L,UAAA1D,OAAIgf,EAAJ7X,MAAApP,GAAAO,EAAA,EAAAA,EAAAP,EAAAO,IAAI0mB,EAAJ1mB,GAAAoL,UAAApL,GAAA,OAAe0mB,EAAOzY,IAAI,SAACb,GAC5C,IAAM0nB,EAAOC,EAAU3nB,GACvB,OACItO,KAAMg2B,EAAKh2B,KACXk2B,cAAeF,EAAKE,cACpBx1B,MAAOs1B,EAAKG,UAGpBC,EAAkB,SAAlBA,IAAkB,QAAAz0B,EAAA2K,UAAA1D,OAAIgf,EAAJ7X,MAAApO,GAAApB,EAAA,EAAAA,EAAAoB,EAAApB,IAAIqnB,EAAJrnB,GAAA+L,UAAA/L,GAAA,OACdoC,aAAcilB,EAAO5F,MAAM,EAAG4F,EAAOhf,OAAS,GAC9Cqc,GAAI2C,EAAOA,EAAOhf,OAAS,KAE/BytB,EAAmB,SAAnBA,EAAoBC,GAChB,IAAIf,KACEpmB,KA2BN,OA1BAmnB,EAAKtmB,QAAQ,SAAArO,GAAA,OAAQwN,EAAI6mB,EAAKE,gBAAkB,IAChD,SAASK,EAAKhf,GACVA,EAAIvH,QAAQ,SAACgmB,GACT,IAAIQ,EACAC,SACAC,SACAC,UACGH,EAAQR,EAAKE,iBAAkB/mB,GAIb,KADrBsnB,EAActnB,EAAIqnB,KACQC,IAAgBlB,EAAI3sB,OAAS,IAEnD8tB,EAASnB,EAAIvT,MAAM,EAAGyU,GACtBE,EAAUpB,EAAIvT,MAAMyU,EAAc,GAClClB,EAAMmB,EAAOnU,OAAOoU,GAGpBA,EAAQ3mB,QAAQ,SAACue,EAAM9uB,GAAP,OAAa0P,EAAIof,EAAK2H,eAAiBz2B,EAAIi3B,EAAO9tB,SAClEuG,EAAIqnB,GAASjB,EAAInoB,KAAK4oB,GAAQ,GAXlC7mB,EAAIqnB,GAASjB,EAAInoB,KAAK4oB,GAAQ,EAclCO,EAAIP,EAAKY,iBArBjB,CAwBIN,GACGf,GAEXsB,GACIC,WAAY,SAAAA,aAAe,QAAAn1B,EAAA2K,UAAA1D,OAAXgf,EAAW7X,MAAApO,GAAApB,EAAA,EAAAA,EAAAoB,EAAApB,IAAXqnB,EAAWrnB,GAAA+L,UAAA/L,GACvB,IAAM4iB,KAIN,OAHAyE,EAAO5X,QAAQ,SAAC+mB,GACZ52B,OAAO4T,OAAOoP,4HAAS4T,EAAY/2B,KAAO+2B,EAAYr2B,UAEnDyiB,GAEX6T,SAAU,SAAAA,SAAAr1B,GAAA,OAAeo1B,EAAYr2B,QAgBvCu2B,aACF,SAAAt1B,EAAak1B,iGAAUK,QACnBhwB,KAAK+d,GAAK4R,EACV3vB,KAAKiwB,iEAGe,IAAAx1B,EAEpB,OADAy1B,OAAKD,KAAI/pB,KAATgqB,mBACOlwB,qDAIP,OAAOA,KAAKiwB,wCAIZ,OAAOjwB,KAAK+d,SAhBdgS,GAgBchS,8XC1LhB,SAAAtjB,EAAa3B,EAAMk2B,EAAeroB,iGAASwpB,QACbxpB,EAAUA,MACpC3G,KAAKlH,KAAOA,EACZkH,KAAKgvB,cAAgBA,EACrBhvB,KAAKowB,SACLpwB,KAAK0vB,iBACL1vB,KAAKqwB,MAAQ,KACbrwB,KAAKswB,kBACLtwB,KAAKuwB,UAAY5pB,EAAQ4pB,UACzBvwB,KAAKwwB,WACLxwB,KAAK2vB,SAAW,KAChB3vB,KAAKywB,2EAGgB,QAAAh2B,EAAAhB,EAAAuG,KAAA3G,EAAA+L,UAAA1D,OAALuuB,EAAKpnB,MAAAxP,GAAAd,EAAA,EAAAA,EAAAc,EAAAd,IAAL03B,EAAK13B,GAAA6M,UAAA7M,GAGrB,OAFAm4B,OAAKN,OAAMlqB,KAAXwqB,QAAmBT,GACnBA,EAAInnB,QAAQ,SAAArO,GAAA,OAAS0nB,EAAMuN,cAAcxpB,KAAKuO,KACvCzU,mDAGM8uB,GAEb,OADA9uB,KAAKywB,cAAcvqB,KAAK4oB,GACjB9uB,6CAiBP,OAHAA,KAAKivB,KAAOjvB,KAAK2vB,SAAL3vB,aAAiBA,KAAK2wB,oBAClC3wB,KAAKwwB,QAAQtqB,KAAKlG,KAAKivB,MACvBjvB,KAAKswB,kBACEtwB,qDAIP,OAA0B,IAAtBA,KAAKowB,MAAM1uB,SAEP5I,KAAMkH,KAAKlH,KACXk2B,cAAehvB,KAAKgvB,cACpBx1B,MAAOwG,KAAKivB,OAGbjvB,KAAKuwB,UAALvwB,aAAkBA,KAAKowB,MAAMnoB,IAAI,SAAAxN,GAAA,OAAQm2B,EAAK5B,6DAIrD,IACIwB,EAAUxwB,KAAKwwB,QACfK,EAAOL,EAAQA,EAAQ9uB,OAAS,GAEpC,OAAuB,IAAnB8uB,EAAQ9uB,OACD1B,MAEXwwB,EAAQtqB,KAAK2qB,GACN7wB,4CAIP,IAAM8wB,EAAO9wB,KAAKwwB,QACdK,EAAOC,EAAKA,EAAKpvB,OAAS,GAG9B,OAFAovB,EAAKpvB,OAAS,EACdovB,EAAK5qB,KAAK2qB,GACH7wB,4CAIP,OAAqB,OAAdA,KAAKlH,sCAhDZ,OAAOkH,KAAKqwB,wBAGN72B,GAGN,OAFAwG,KAAKqwB,MAAQ72B,EACbwG,KAAKswB,kBACEtwB,WD0JK+d,GC1JL/d,kQC3BX,SAAAvF,KAAA,SAAAA,EAAAhB,GAAA,KAAAgB,aAAAhB,GAAA,UAAA6a,UAAA,sCAAeyc,QACX/wB,KAAKowB,SACLpwB,KAAK0uB,WACDsC,aACAC,oEAIY,IAAAx2B,EAEhB,OADAi2B,OAAKN,OAAMlqB,KAAXwqB,mBACO1wB,2DAGc+d,GAAI,IAAAtkB,EAAAuG,KACnBkxB,EAASlxB,KAAK0uB,UAAUuC,aAC1BhvB,EAAQivB,EAAOhrB,KFaN,SAACirB,EAAOpT,GACrB,IAAIqT,EAAM,SAANA,IACArT,iBAAMoT,EAAMlpB,IAAI,SAAC6mB,GACb,IACIgC,EAAOhC,EAAK0B,QACZh4B,EAAIs4B,EAAKpvB,OAAS,EACtB,OAAQovB,EAAKt4B,EAAI,EAAI,EAAI,EAAIA,EAAI,GAAIs4B,EAAKt4B,SAIlD,OADA44B,EAAIjD,KAAOF,IACJmD,EAVM,CEb0BpxB,KAAKowB,MAAOrS,IAAO,EAE1D,OAAO,WACHtJ,EAAKia,UAAUuC,aAAeC,EAAOle,OAAO,SAAC+K,EAAIxlB,GAAL,OAAWA,IAAM0J,2DAI5C8b,GAAI,IAAAtkB,EAAAuG,KACnBkxB,EAASlxB,KAAK0uB,UAAUsC,UAC1B/uB,EAAQivB,EAAOhrB,KFgBT,SAACirB,EAAOpT,GAClB,IAAIqT,EAAM,SAANA,IACArT,iBAAMoT,EAAMlpB,IAAI,SAAC6mB,GACb,IAAMgC,EAAOhC,EAAK0B,QAClB,OAAQM,EAAK,GAAIA,EAAKA,EAAKpvB,OAAS,SAI5C,OADA0vB,EAAIjD,KAAOF,IACJmD,EARG,CEhB0BpxB,KAAKowB,MAAOrS,IAAO,EAEvD,OAAO,WACHpJ,EAAK+Z,UAAUsC,UAAYE,EAAOle,OAAO,SAAC+K,EAAIxlB,GAAL,OAAWA,IAAM0J,0DAK9D,QAASjC,KAAK0uB,UAAUsC,UAAUtvB,aDL3B1B,GCK2B0B,8XCtBtC,SAAAjH,IAAe,IAAAhB,EAAAuG,MAAA,SAAAvF,EAAAhB,GAAA,KAAAgB,aAAAhB,GAAA,UAAA6a,UAAA,sCAAAtU,KAAAvF,GACXuF,KAAKqxB,oBACLrxB,KAAKuwB,UAAY1B,EAAM7uB,KAAKqxB,kBAC5BrxB,KAAKnI,KAAO,IAAIy5B,EAAK,KAAM,MAAQf,UAAWvwB,KAAKuwB,YACnDvwB,KAAKnI,KAAK83B,SAAWA,EAASC,WAE9B5vB,KAAKuxB,UAAY,KACjBvxB,KAAKwxB,cACLxxB,KAAKyxB,qBACDC,yBACAC,uBAGJ3xB,KAAK4xB,UAAYtD,EAAU,SAACpE,GACxB,IAAIoF,SACJ,IAAKA,KAASpF,EAAQ2H,YAAa,CAC/B,OAAUv3B,eAAe5B,KAAK+b,EAAK4c,iBAAkB/B,GACjD,OAEJ7a,EAAK4c,iBAAiB/B,GAAOwC,mEAKxB5pB,EAAK6pB,GAClB,IACIC,EADA9wB,SAEEmwB,EAAmBrxB,KAAKqxB,iBAC1Bx5B,EAAOmI,KAAKnI,KACZ04B,EAAYvwB,KAAKuwB,UA8CrB,OA5CC,SAASlB,EAAK4C,EAAMjD,EAAewB,GAChC,IAAI12B,SACAw1B,SACA4C,SACApD,SAEJ,IAAKh1B,KAAOm4B,EACR,MAAU33B,eAAe5B,KAAKu5B,EAAMn4B,GAcpC,GAVAg1B,EAAO,IAAIwC,EAAKx3B,EADhBw1B,KAAWN,EAAgBl1B,GACGy2B,cAC9Bc,EAAiB/B,GAASR,YAErBoD,EAAO1B,EAAQ0B,MAChBA,EAAKC,gBAAgBrD,GAGrBj3B,EAAKs6B,gBAAgBrD,GAGrBtB,EAAetsB,EAAM+wB,EAAKn4B,IAC1Bu1B,EAAInuB,EAAJmuB,GAAYL,EAAgBl1B,EAA5Bu1B,KAAsC6C,KAAMpD,IAC5CA,EAAKa,SAAWA,EAASC,gBACtB,GAAI1uB,aAAe6uB,EAAgB,KAAAl3B,EACtCi2B,EAAKa,SAAWzuB,EAAI9H,OACpBg5B,KAAKD,gBAALC,UAAwBlxB,EAAImxB,kBAAkBpqB,IAAI,SAAAxN,GAAA,OAAS42B,EAAiB/B,YAE5ER,EAAKa,SAAWA,EAASG,SACzBhB,EAAKG,KAAO/tB,EA7BvB,CAiCCgH,EAAe,OAAV6pB,EAAiB,GAAQA,EAAzBA,KACHG,KAAMb,EAAiBU,KAG3B/xB,KAAKuxB,UAAY,IAAI9f,EAAWxY,OAAO6M,KAAK9F,KAAKqxB,oBAIjDW,EAAiBhyB,KAAKglB,YAAYsN,gBAAgBz6B,GAAMwjB,OAAOxjB,GAAMmb,OAAO,SAAAvY,GAAA,OAAQq0B,EAAKwB,kBAC1ExnB,QAAQ,SAAArO,GAAA,OAAQq0B,EAAKzG,YACpC8G,EAAiB6C,GAAgBlpB,QAAQ,SAAArO,GAAA,OAAQq0B,EAAKzG,YAC/CroB,gDAGGuyB,GACV,GAAIA,KAAQvyB,KAAKqxB,iBACb,OAAOrxB,KAAKqxB,iBAAiBkB,GAAMtD,wDAKrBuD,EAAOC,GAAQ,IAAAp5B,EAAAW,EAAAgG,KAC3BmxB,EAAQqB,EAAMvqB,IAAI,SAAAxN,GAAA,OAAQka,EAAK0c,iBAAiBkB,KAClDG,GAAQC,MAAIC,GAAeC,SAAnBF,UAA+BxB,IAG3C,OADAA,EAAMroB,QAAQ,SAAArO,GAAA,OAAQq0B,EAAKgE,gBAAgBJ,KACpCA,mBAAuBD,EAAOp3B,MAAQo3B,EAAO1U,2CAGrC,IACf,IAAIgV,SACAC,SAFW35B,EAAA+L,UAAA1D,OAARgf,EAAQ7X,MAAAxP,GAAAd,EAAA,EAAAA,EAAAc,EAAAd,IAARmoB,EAAQnoB,GAAA6M,UAAA7M,GAGf,IACIk4B,KACAU,EAAQzQ,EAAOzY,IAAI,SAACka,GAEhB,OADAA,EAAM,GAAG8M,KAAO9M,EAAM,GACfA,EAAM,KAMrB,OAJAgP,EAAMroB,QAAQ,SAAArO,GAAA,OAAQq0B,EAAKzG,YAC3BoI,EAAcvqB,KAAduqB,UAAsBrC,iBAAQ+C,EAAMlpB,IAAI,SAAAxN,GAAA,OAAQq0B,EAAK2B,oBACrDsC,EAAa,IAAIthB,EAAW0f,EAAMlpB,IAAI,SAAAxN,GAAA,OAAQq0B,EAAKE,iBAE9ChvB,KAAKwxB,aAMVwB,EAAgB7D,EAAiBgC,IACnBroB,QAAQ,SAAArO,GAAA,OAAgBw4B,EAAa5K,YACnD0K,EAAWG,OAAOF,EAAc/qB,IAAI,SAAAxN,GAAA,OAAQq0B,EAAKE,iBACjDyB,EAAcvqB,KAAduqB,UAAsBrC,iBAAQ4E,EAAc/qB,IAAI,SAAAxN,GAAA,OAAQq0B,EAAK2B,oBAE7DzwB,KAAKmzB,0BAA0BtqB,MAAMG,KAAK,IAAIuN,IAAIka,IAAiBsC,GAC5D/yB,OAXHA,KAAKmzB,0BAA0B1C,GAC/BzwB,KAAKwxB,cACExxB,8DAYYywB,EAAesC,GAAY,IAAA15B,EAAA2G,KAE9CozB,KACAC,KAmBJ,OAlBIN,GAEoBthB,EAAWU,WAAWnS,KAAKuxB,UAAWwB,GAC9BO,UAEpBxqB,QAAQ,SAAArO,GAAA,OAAS2c,EAAKia,iBAAiBlP,GAAOoR,eAG1D9C,EAAc3nB,QAAQ,SAACrO,GACnB24B,EAASltB,KAATktB,UAAiB34B,EAAEi0B,UAAUuC,iBAEjCR,EAAc3nB,QAAQ,SAACrO,GACnB44B,EAASntB,KAATmtB,UAAiB54B,EAAEi0B,UAAUsC,eAGhChxB,KAAKyxB,oBAAoBC,uBAAyB0B,EAAStqB,QAAQ,SAAArO,GAAA,OAAMsjB,OACzE/d,KAAKyxB,oBAAoBE,oBAAsB3xB,KAAK4xB,UAAUyB,GAAYxB,YAAakB,IACxF/yB,KAAKwzB,2BACExzB,oDAGgB,QAAAvF,EAAAuF,KAAAvG,EAAA2L,UAAA1D,OAAR+xB,EAAQ5qB,MAAApP,GAAAO,EAAA,EAAAA,EAAAP,EAAAO,IAARy5B,EAAQz5B,GAAAoL,UAAApL,GACvB,IACIgN,EADUysB,EAAOxrB,IAAI,SAAAxO,GAAA,OAASi6B,EAAKrC,iBAAiB/B,KACvCrnB,IAAI,SAAAxN,GAAA,OAASq0B,EAAMA,EAAKG,QAEzC,OADAjvB,KAAK2zB,OAAL3zB,aAAegH,IACRhH,qDAWP,OADAA,KAAKwxB,cACExxB,8DAMP,OAFAA,KAAKyxB,oBAAoBC,yBACzB1xB,KAAKyxB,oBAAoBE,sBAClB3xB,0DAGalG,GAEpB,OADAkG,KAAKyxB,oBAAuB33B,EAA5BkG,gBACOA,4DAGesvB,GACtB,OAAOtvB,KAAKqxB,iBAAiB/B,mDAvBTR,GACpB,IAAM8E,KAEN,OHdR,SAASC,EAAwB/E,EAAM8E,EAAUE,GAC7C,IAAIxE,SACJR,EAAKsB,MAAMtnB,QAAQ,SAACirB,GAChBF,EAAuBE,EAAWH,EAAUE,KAG5ChF,EAAKkF,WAAa1E,EAAQR,EAAKE,iBAAkB8E,IAGrDF,EAAS1tB,KAAK4oB,GACdgF,EAAWxE,GAAS,GAVxB,CGa+BR,EAAM8E,MACtBA,QDtI2BlyB,GCsI3BkyB,iXC+JfzX,aA5TI,SAAA1hB,KAAA,SAAAA,EAAAhB,GAAA,KAAAgB,aAAAhB,GAAA,UAAA6a,UAAA,sCAAe2f,QACXj0B,KAAKk0B,OAAS,IAAIC,EAClBn0B,KAAKo0B,aACLp0B,KAAKq0B,0DA6BL,IAAIC,SACApsB,SAWJ,OATsB,IAAlB9C,UAAO1D,QACP4yB,EAAa,KACbpsB,4CAEAosB,0CACApsB,2CAGJlI,KAAKu0B,gBAAgBD,EAAYpsB,GAC1BlI,oDASgB,IAAAvF,EACnB+5B,EACAC,EACAC,SACA3C,SACA4C,SAiBJ,OAfIvvB,UAAO1D,OAAS,GAChBqwB,0CACA2C,0CACAC,4CAEA5C,EAAQ,KACR2C,0CACAC,2CAGJH,EAAoBG,EAAQzF,IAE5B0F,EADAH,EAAiB,IAAI1E,EAAeyE,EAAkBzW,KACvCoU,gBAAfyC,UAAkCJ,EAAkB/4B,eAEpDuE,KAAKu0B,gBAAgBxC,4HAAU2C,EAAUD,IAClCz0B,mDAIMs0B,EAAYpsB,GAEzB,OADAlI,KAAKk0B,OAAOW,gBAAgB3sB,EAAKosB,GAC1Bt0B,sCA0FPwyB,EAAOzU,EAAI+W,GACX,IAQiBC,EAPbC,EAAWxC,aAAiB3pB,MAAQ2pB,GAASA,GAE7CyC,EAAQj1B,KAAKk0B,OAAOgB,qBAAqBF,GACrC35B,KAAM,YACN0iB,OAOR,OAJI+W,IAEAC,OAAKb,OAAOiB,kBAAkBC,uBAAuB,cAAaC,eAAlEN,UAAoFvC,IAEjFyC,qCAgBLzC,EAAOzU,EAAI+W,GACb,IASiBQ,EARbN,EAAWxC,aAAiB3pB,MAAQ2pB,GAASA,GAE7CyC,EAAQj1B,KAAKk0B,OAAOgB,qBAAqBF,GACrC35B,KAAM,YACN0iB,OASR,OALI+W,IAEAQ,OAAKpB,OAAOiB,kBAAkBC,uBAAuB,iBAAgBC,eAArEC,UAAuF9C,IAGpFyC,uCAYP,OAFAj1B,KAAKo0B,aACLp0B,KAAKq0B,MAAM3yB,OAAS,EACb1B,4CAYP,OAHAA,KAAKo0B,aACLp0B,KAAKu1B,QAALv1B,aAAgBA,KAAKq0B,QACrBr0B,KAAKq0B,MAAM3yB,OAAS,EACb1B,0CAkBP,IAEIyI,EAFA8pB,SACArxB,SAGJ,OAAQuH,EAAMrD,UAAO1D,QACrB,KAAK,EACD6wB,0CACA,MAEJ,KAAK,EACDA,0CACArxB,0CACA,MAEJ,QACI,OAAOlB,KAGX,OAAY,IAARyI,GACAzI,KAAKo0B,UAAYp0B,KAAKq0B,MAAMnuB,MAAMqsB,EAAMrxB,IAAQlB,KAAKu1B,SAAShD,EAAMrxB,IAC7DlB,MAGJA,KAAKk0B,OAAOsB,aAAajD,2CAIjB,QAAA93B,EAAAhB,EAAAuG,KAAA3G,EAAA+L,UAAA1D,OAAP8wB,EAAO3pB,MAAAxP,GAAAd,EAAA,EAAAA,EAAAc,EAAAd,IAAPi6B,EAAOj6B,GAAA6M,UAAA7M,GAMf,OAAqB,IAAjBi6B,EAAM9wB,OACC1B,OAGXk0B,OAAKA,QAAOP,OAAZO,UAAsB1B,EAAMvqB,IAAI,SAAAxN,GAAA,OAASga,EAAKyf,OAAOuB,yBAAyBlD,EAAK,IAAKA,EAAK,QACtFvyB,4CAQP,OAAOA,KAAKk0B,iDASZ,OAAOl0B,KAAKk0B,OAAOr8B,KAAKo3B,4CA5Sb/mB,GACX,OAAO,IAAIwtB,GAAQnB,gBAAgB,KAAMrsB,SA+SjDiU,GCzUAwZ,uFCFA39B,OAAOD,QAAU,SAASC,QAoBzB,OAnBKA,OAAO49B,kBACX59B,OAAO69B,UAAY,aACnB79B,OAAO89B,SAEF99B,OAAO+9B,WAAU/9B,OAAO+9B,aAC7B98B,OAAOC,eAAelB,OAAQ,UAC7BmB,YAAY,EACZC,IAAK,SAAAA,MACJ,OAAOpB,OAAOQ,KAGhBS,OAAOC,eAAelB,OAAQ,MAC7BmB,YAAY,EACZC,IAAK,SAAAA,MACJ,OAAOpB,OAAOO,KAGhBP,OAAO49B,gBAAkB,GAEnB59B,sVCdR,SAASg+B,uBAAuB9tB,KAAO,OAAOA,KAAOA,IAAIvO,WAAauO,KAAQtN,QAAWsN,KAJzFjP,OAAOC,eAAenB,QAAS,cAC3ByB,OAAO,IAKX,IAEIy8B,MAAQD,uBAFD13B,oBAAQ,IAMf43B,mBAAqBF,uBAFD13B,oBAAQ,IAI5B63B,MAAQF,MAAK,QAAYG,KAAuB,oBAAXj+B,OAAyBA,YAASmV,GACvE+oB,IAAMF,MAAM1I,IAAI6I,SAChB7zB,EAAI0zB,MAAM1I,IAAI5pB,KACd6P,IAAMjR,EAAEiR,IACRlJ,MAAQ/H,EAAE+H,MAEV+rB,kBAAqBC,IAAK,UAC1BC,gBAAkBN,MAAMO,qBACxBC,oBAAsBF,gBAAgBG,SAAW,EAAI,IAsBzD,SAASC,kBAAkBC,GAAIC,UAAWC,YAAarwB,SACnD,IAAIswB,QACA1E,KACA7e,IACAwjB,aACAC,eAAgB,EAChBxuB,MAAQkuB,kBAAkBluB,MAE9B,QAAkB,IAAPmuB,IAAoC,WAAdp8B,QAAOo8B,IAAxC,CAwBA,IAAKvE,QApBD2E,aAAevuB,MAAMmuB,MACrBI,aAAa5K,UAGjB3jB,MAAMmuB,IAAM92B,MACZ2G,QAAUA,aACFywB,cAAgBh2B,SAASsS,IAAM/M,QAAQywB,eAAiB1jB,IAAMyiB,MAAMkB,qBAEnD,iBAAdN,YACPA,UAAYV,IAAIiB,eAAeP,aAGnCE,QAAUd,MAAMoB,gBAAgBR,YACxBS,UAAYrB,MAAMsB,YAEtBhB,gBAAgBiB,aAAejB,gBAAgBkB,MAASV,QAAQW,cAAiBX,QAAQY,eACzFV,eAAgB,GAGpBF,QAAQO,UAAY,GACPrB,MAAM2B,qBACfb,QAAQc,MAAMxF,MAAQ4D,MAAM2B,qBAAqBvF,MAGrDvyB,KAAK82B,GAAKA,GACV92B,KAAKg4B,gBAAkBf,QAEvBj3B,KAAKi4B,kBAAoB,IAAI/B,mBAAkB,QAAYe,QAASE,cAAe,IACnFn3B,KAAKk4B,iBAAmBlB,YACxBh3B,KAAKm4B,OAAQ,EACbn4B,KAAK+3B,SACL/3B,KAAK2G,QAAUA,QAEf3G,KAAKo4B,YAaTvB,kBAAkBwB,YAAc,SAAUC,YAUtC,OATAA,WAAaA,gBAEGj4B,KAEsB,iBAApBi4B,WAAWj4B,OACzBi4B,WAAWj4B,KAAOi4B,WAAWj4B,KAAKiC,YAFlCg2B,WAAWj4B,KAAO,GAKtBi4B,WAAWC,MAAQD,WAAWj4B,KAAKiM,MAAM,oBAClCgsB,YAIXzB,kBAAkBluB,SAIlBkuB,kBAAkBx8B,UAAUm+B,qBAAuB,SAAUn4B,KAAMo4B,oBAAqB/2B,QACpF,IAAK1B,KAAKm4B,MACN,OAAO,EAGX,IAAIO,KACAC,MACAC,GACAC,IACAC,YACAC,qBACAC,sBAAwBh5B,KAAK2G,QAAQywB,cACrCL,UAAY/2B,KAAKi5B,WACjBlB,MAAQ/3B,KAAK+3B,UACbmB,MAAQl5B,KAAKm5B,iBAAmBn5B,KAAKm5B,mBACrCC,iBAAmBp5B,KAAKq5B,oBAAsBr5B,KAAKq5B,sBACnDC,UAAYj5B,MAAQ03B,MAAMwB,UArHtB,KAqH4CxB,MAAMyB,YArHlD,KAqH0EzB,MAAM0B,YArHhF,KAqHwG1B,MAAM2B,WArH9G,IAsHJC,cAAgBt5B,KAAO,QAAU03B,MAAMwB,UAtHnC,KAsHyDxB,MAAMyB,YAtH/D,KAsHuFzB,MAAM0B,YAtH7F,KAsHqH1B,MAAM2B,WAtH3H,IA4IR,OApBAnD,iBAAiBl2B,QAAUA,KAAOk2B,iBAAiBl2B,OAE9Co4B,yBAGqDnrB,KAAjDyrB,qBAAuBG,MAAMS,kBAC9B5C,UAAUS,UAAYn3B,KAAKu5B,OAASv5B,KAAKu5B,OAAOl4B,QAAUmH,MAAMnH,OAAS,GAAGqB,KAAK1C,MACjFu4B,GAAK7B,UAAUc,YAEfd,UAAUS,UAAYn3B,KACtBw4B,IAAM9B,UAAUc,YAEhBkB,qBAAuBG,MAAMS,gBAAkBf,GAAKl3B,OAASm3B,MAAQn3B,OAAS,GAC9E03B,iBAAiBlzB,KAAKyzB,eAClBP,iBAAiB13B,OAASs3B,8BACnBE,MAAME,iBAAiB9wB,UAZtCywB,qBAAuB,GAiBvBD,YAAcI,MAAMI,aACpBX,MAAQG,YAAYxsB,MAAM,MAEtButB,MAAOphB,WAAWkgB,MAAM,GAAI,IAC5BmB,OAAQrhB,WAAWkgB,MAAM,GAAI,OAIrC5B,UAAUS,UAAYn3B,KAEtBq4B,MACIoB,OAAQ/C,UAAUa,aAClBiC,MAAO9C,UAAUc,YAAckB,sBAGnCG,MAAMI,WAAaZ,KAAKmB,MAAQ,IAAMnB,KAAKoB,OAC3CV,iBAAiBlzB,KAAKozB,WAClBF,iBAAiB13B,OAASs3B,8BACnBE,MAAME,iBAAiB9wB,SAG3BowB,OAIX7B,kBAAkBx8B,UAAU0/B,YAAc,WACtC,IAAIC,QAAUh6B,KAAKi6B,cACflD,UAAY/2B,KAAKi5B,WACjBiB,QAAUF,QAAQE,QAEtB,OAAIA,QACO,SAAU/vB,KACb,IAAIgwB,KAAMN,MASV,OAPAK,QAAQE,YAAcjwB,KAEtB0vB,OADAM,KAAOD,QAAQG,WACFR,MAAQlD,qBACT,IACRkD,MAAQM,KAAKN,OAGVA,OAGJ,SAAU1vB,KAEb,OADA4sB,UAAUS,UAAYrtB,IACf4sB,UAAUc,cAkB7BhB,kBAAkBx8B,UAAU+9B,SAAW,SAAUL,OAC7C,OAAK/3B,KAAKm4B,MAMNJ,QAAU/3B,KAAK+3B,OAAU/3B,KAAKs6B,cAI7BvC,QACDA,MAAQ/3B,KAAK+3B,OAGjB5B,MAAMoE,cAAcxC,OACpB/3B,KAAK+3B,MAAQA,MAEb/3B,KAAKi6B,cAAgBO,MAAQx6B,KAAKi4B,kBAAkB7+B,IAAI2+B,OAEpD/3B,KAAKi6B,eACLj6B,KAAKi5B,WAAauB,MAAM1L,KACxB9uB,KAAKy6B,SAAWD,MAAME,QACtB16B,KAAK26B,OAASH,MAAMI,UACpB56B,KAAK66B,YAAcL,MAAMM,WACzB96B,KAAKs6B,cAAe,GAEpBt6B,KAAKs6B,cAAe,EAGjBt6B,WAvBP,EALWA,KAGX,IAAIw6B,OAmCR3D,kBAAkBx8B,UAAU0gC,sBAAwB,SAAU/D,aAC1D,OAAKh3B,KAAKm4B,OAGVn4B,KAAKk4B,iBAAmBlB,YACjBh3B,MAHIA,MA4Bf62B,kBAAkBx8B,UAAU2gC,aAAe,SAAU36B,KAAM46B,SAAUC,UAAWC,QAC5E,IAAKn7B,KAAKm4B,MACN,OAAO,OAGE7qB,IAATjN,MAA+B,OAATA,KACtBA,KAAO,GACgB,iBAATA,OACdA,KAAOA,KAAKiC,YAGhB,IAAImG,IACA2yB,QACAC,QACAC,QACAC,gBACAC,SACAC,SACAC,UACAC,aACAC,YACAC,SACAC,SACAC,YACAC,WACAC,qBACAC,QACAC,EACA34B,EACA44B,SACA/U,KACAgV,IACAC,mBACAC,gBACAC,OACAC,gBACAC,2BACAC,YAAa,EACbC,YAAc,EACdC,UAAY,EACZC,WAAa,EACbC,iBAAmB,EACnBC,SAAW,EACXC,UAAY,EACZC,cACA3kC,EAAI,EACJ4kC,YAAcn9B,KAAKk4B,gBAAkB,GAAK,MAC1C4C,WAAa96B,KAAK66B,YAClBH,QAAU16B,KAAKy6B,SACf1D,UAAY/2B,KAAKi5B,WACjBuB,MAAQx6B,KAAKi6B,cACbmD,cAAgB5C,MAAM4C,cACtBC,SAAW7C,MAAM6C,SACjBC,gBACAC,WAAa,EACbC,YAAc,EACdC,eAAiB,EACjBC,SAAW,SAASA,SAASvzB,KAI7B,IAFA,IAAIwzB,GAAK,KACLplC,GAFJ4R,IAAMA,IAAI7J,QAAQ,SAAU,KAEhBoB,OACLi8B,GAAG9/B,KAAKsM,IAAIyzB,OAAOrlC,GAAK,MAC/B,OAAO4R,IAAI2Q,MAAM,EAAGviB,EAAI,IAExBslC,YACAx9B,KAAMA,KACN46B,SAAUA,SACVC,UAAWA,UACXrB,MAAO,KACPC,OAAQ,KACRgE,aAAc,KACdC,cAAe,KACfC,QAAS39B,KACT49B,aAAa,GAYjB,GATAnC,SAAW97B,KAAK+5B,cAKZmB,YAAcJ,aACdI,WAAa,KAGbnE,UAAW,CACX,IAAKN,gBAAgBU,cAAe,CAmBhC,IAlBAwF,WAAaxG,MAAM+H,YAAYrgC,KAAKwC,QAahC02B,UAAUS,UAAYn3B,KACtBw9B,WAAWC,aAAerC,SAAW1E,UAAUc,YAC/CgG,WAAWE,cAAgBrC,UAAY3E,UAAUa,eAVjD0D,QAAUj7B,KAAKC,QAAQ61B,MAAMgI,UAAW,SAAU91B,OAC9C,MAAiB,SAAVA,MAAmB,IAAM,MAEpC4zB,qBAAuBj8B,KAAKo+B,WAAW9C,SAAS,GAEhDuC,WAAWC,aAAerC,SAAWQ,qBAAqBpC,MAC1DgE,WAAWE,cAAgBrC,UAAYO,qBAAqBnC,QAO5D4B,WAAaR,WAAaO,UAAYR,SAGtC,OAFA4C,WAAWhE,MAAQgE,WAAWC,aAAerC,SAC7CoC,WAAW/D,OAAS+D,WAAWE,cAAgBrC,UACxCmC,WAGX,GAAI/C,WAAaI,UAIb,OAHA2C,WAAWx9B,KAAO,GAClBw9B,WAAWhE,MAAQgE,WAAWC,aAAe,EAC7CD,WAAW/D,OAAS+D,WAAWE,cAAgB,EACxCF,WAQf,GAHAx9B,KAAOq9B,SAASr9B,MAAMC,QAAQ,SAAU,KACxCi7B,gBAAkBv7B,KAAKk4B,gBAAkB+C,SAAWA,SAAWmC,eAE1DT,WAAY,CAab,GAXAl0B,KADAy0B,WAAa78B,KAAKiM,MAAM,KACP5K,OACjB05B,QAAU,GAAIC,WACdQ,SAAWqB,WAAW,GAElBl9B,KAAK26B,OAAOkB,UACZO,SAAWp8B,KAAK26B,OAAOkB,UAAUhC,OAEjCuC,SAAWN,SAASD,UACpB77B,KAAK26B,OAAOkB,WAAchC,MAAOuC,WAGjCb,gBAAkBa,SAElB7jC,GADA8iC,QAAUh7B,KAAKg+B,OAAO,EAAGlI,MAAMmI,qBAAqBj+B,KAAMk7B,gBAAiBv7B,OAAOsM,MAAM,KAC5E5K,WACT,IAAI06B,SAAWnB,SAGlB,OAFA4C,WAAWx9B,KAAO,GAClBw9B,WAAWhE,MAAQgE,WAAWC,aAAeD,WAAW/D,OAAS+D,WAAWE,cAAgB,EACrFF,WACAV,eACP5B,gBAAkBN,SAAW,EAAIoC,UACXjB,SAClBe,YAAc,MAEd5B,gBAAkBN,SAAWoC,UACPjB,SAClBe,YAAc,KAEd5B,gBAAkB,EAClB4B,YAAc,KAQ1B,GAHAH,SAAWlB,SAAST,QAAQt4B,KAAK,KACjCk6B,UAAYj9B,KAAK66B,YAEbM,OAAQ,CACR,KAAO5iC,EAAIkQ,IAAKlQ,GAAK,EAajB,GAZAsjC,SAAWR,QAAQ9iC,GAAK2kC,WAAW3kC,GAC/ByH,KAAK26B,OAAOkB,UACZO,SAAWp8B,KAAK26B,OAAOkB,UAAUhC,OAE5BoC,uBAA0BG,SAAWH,qBAAqBsC,UAAU1C,aACrEO,SAAWN,SAASD,WAExB77B,KAAK26B,OAAOkB,WACRhC,MAAOuC,YAGfY,UAAYZ,UACGb,kBACNH,UACDA,QAAUC,QAAQvgB,MAAM,GAAI,GAAG/X,KAAK,KAEpCi6B,SAAW/B,UAKX,OAJA4C,WAAWx9B,KAAOq9B,SAAStC,SAAW+B,YACtCU,WAAWW,SAAWX,WAAWG,QACjCH,WAAWhE,MAAQiC,SAAS+B,WAAWx9B,MACvCw9B,WAAW/D,OAAS95B,KAAK66B,YAClBgD,WAQnB,OAHAA,WAAWx9B,KAAOg7B,QAAQt4B,KAAK,IAC/B86B,WAAWhE,MAAQmD,SACnBa,WAAW/D,OAAS95B,KAAK66B,YAClBgD,WAEP,KAAOtlC,EAAIkQ,IAAKlQ,GAAK,EAkBjB,GAhBiB,OADjBsjC,SAAWR,QAAQ9iC,GAAK2kC,WAAW3kC,KACVmiC,UACrBmB,SAAW,UAGX77B,KAAK26B,OAAOkB,UACZO,SAAWp8B,KAAK26B,OAAOkB,UAAUhC,OAE5BoC,uBAA0BG,SAAWH,qBAAqBsC,UAAU1C,aACrEO,SAAWN,SAASD,WAExB77B,KAAK26B,OAAOkB,WACRhC,MAAOuC,YAGfY,UAAYZ,UAEGb,kBACNH,UACDA,QAAUC,QAAQvgB,MAAM,GAAI,GAAG/X,KAAK,KAEpCi6B,SAAW/B,UAAU,CA2BrB,GAzBA6B,UAAYz8B,KAAKg+B,OAAO,EAAGhD,QAAQ35B,QAAQ+8B,YAAY,KACvD5B,SAAWx8B,KAAKg+B,OAAO,EAAGhD,QAAQ35B,QAAQ+8B,YAAY,KAClD3B,UAAYC,iBACZC,SAAWlB,SAAST,QAAQvgB,MAAMiiB,gBAAkB,EAAGD,WAAW/5B,KAAK,KACvEs4B,QAAQ/zB,OAAOw1B,UAAW,EAAG,SAC7BC,gBAAkBD,UAClBnB,aAAemB,UAAY,GACpBD,SAAWE,iBACdF,WAAaxB,QAAQ35B,OAAS,GAC9Bs7B,SAAWlB,SAAST,QAAQvgB,MAAMiiB,gBAAkB,EAAGD,WAAW/5B,KAAK,KACvEs4B,QAAQ/zB,OAAOu1B,SAAU,EAAG,YAE5BG,SAAWlB,SAAST,QAAQvgB,MAAMiiB,gBAAkB,EAAGD,WAAW/5B,KAAK,KACvEs4B,QAAQ/zB,OAAOu1B,SAAU,EAAG,WAEhCE,gBAAkBF,SAClBlB,aAAekB,SAAW,IAE1BxB,QAAQ/zB,OAAO+zB,QAAQ35B,OAAS,EAAG,EAAG,QAAUw7B,WAAW3kC,IAC3DklC,cAAgBpC,QAAQ35B,OAAS,EACjCs7B,SAAWlB,SAAST,QAAQvgB,MAAMiiB,gBAAkB,EAAGU,cAAgB,GAAG16B,KAAK,KAC/Eg6B,gBAAkBU,cAClB9B,aAAepjC,IAEnB0kC,WAAaj9B,KAAK66B,aACFK,UAMZ,OALA2C,WAAWx9B,KAAOq9B,SAAStC,SAAW+B,YACtCU,WAAWW,SAAWX,WAAWG,QAEjCH,WAAWhE,MAAQoB,SACnB4C,WAAW/D,OAASmD,UAAYj9B,KAAK66B,YAC9BgD,WAEPjB,YAAclpB,IAAIkpB,YAAaI,UAC/B5B,QAAU,KACVQ,YAAczF,MAAMmI,qBAAqBj+B,KAAKg+B,OAAO1C,cAAeJ,gBAAiBv7B,MACrFg9B,SAAWlB,SAASz7B,KAAKg+B,OAAO1C,aAAcC,aAAe,IACzDP,QAAQ35B,OAASi6B,aAAeC,cAEhCrjC,GADA8iC,QAAUA,QAAQhgB,OAAOhb,KAAKg+B,OAAOhD,QAAQ35B,OAAQi6B,aAAeC,YAAcP,QAAQ35B,QAAQ4K,MAAM,MAC5F5K,OAAS,GAYzC,OALAk7B,YAAclpB,IAAIkpB,YAAaI,UAE/Ba,WAAWx9B,KAAOg7B,QAAQt4B,KAAK,IAC/B86B,WAAWhE,MAAQ+C,YACnBiB,WAAW/D,OAASmD,UACbY,WAWX,IARArC,SAAWn7B,KAAKC,QAAQ61B,MAAMuI,iBAAkB,MAEhDr+B,MADAA,KAAOA,KAAKC,QAAQ61B,MAAMuI,iBAAkBvI,MAAMwI,uBACtCr+B,QAAQ,iBAAkB,iBAAmB61B,MAAMyI,iBAAkB,IAAKzI,MAAM0I,oBAAoB97B,KAAK,IAAM,eAE3Hg0B,UAAUS,UAAYn3B,KAIjB87B,EAAI,EAAG34B,GAFZ04B,QAAUnF,UAAUN,gBAAgBqI,iBAAiBrI,gBAAgBsI,sBAE7Cr9B,OAAQy6B,EAAI34B,EAAG24B,GAAK,EACxC9U,KAAO6U,QAAQC,IAEX1F,gBAAgBuI,gBAAkB7I,MAAM8I,aAAaphC,KAAKwpB,KAAK6X,aAEnD,MADZ7C,IAAMhV,KAAKmQ,aAEK,MAAR6E,IACAmB,WAAaF,aAAa57B,OACX,MAAR26B,MACPkB,UAAYD,aAAa57B,QAG7B47B,aAAap3B,MACTi5B,SAAU3B,WACV4B,QAAS7B,UACTlW,KAAMA,OAEV6V,WAAWh3B,KAAKm2B,MAS5B,GAJA9jC,EAAI,EACJkQ,IAAM60B,aAAa57B,QACnB06B,SAAWkB,aAAa,GAAGjW,KAAKwQ,aAEjBoD,SAIX,OAHA4C,WAAWx9B,KAAO,GAClBw9B,WAAWhE,MAAQgE,WAAWC,aAAeD,WAAW/D,OAAS+D,WAAWE,cAAgB,EAErFF,WAoBX,GAnBWzB,SAAWb,kBAAoBv7B,KAAKk4B,mBAE3CqD,gBAAkBN,SAAW,EAAIoC,UACXjB,SAClBe,YAAc,MAEd5B,gBAAkBN,SAAWoC,UACPjB,SAClBe,YAAc,KAEd5B,gBAAkB,EAClB4B,YAAc,KAK1BpB,YAAcuB,aAAa,GAAGjW,KAAKgY,WACnCrD,WAAasB,aAAa,GAAGjW,KAAKiY,UAE9BnE,OACA,KAAO5iC,EAAIkQ,IAAKlQ,GAAK,GAEjB+jC,oBADAjV,KAAOiW,aAAa/kC,GAAG8uB,MACGgY,WAAatD,YAAc1U,KAAKwQ,aAEjC0D,kBAChBmB,6BACDA,2BAA6BnkC,GAE7Bw+B,UAAUc,YAAcoD,WACxBwB,gBAAkBlkC,EAClBA,EAAIkQ,WAKhB,KAAOlQ,EAAIkQ,IAAKlQ,GAAK,EAEjBgkC,iBADAlV,KAAOiW,aAAa/kC,GAAG8uB,MACAuQ,cAAgBvQ,KAAKiY,UAAYtD,YAGxDQ,OAAS,MAFTF,mBAAqBjV,KAAKgY,WAAatD,YAAc1U,KAAKwQ,aAIjC0D,iBAChBmB,6BACDA,2BAA6BnkC,GAG7B+jC,mBAAqBrB,WACrB6B,UAAYQ,aAAa/kC,GAAG4mC,SAC5BtC,SAAWS,aAAa/kC,GAAG6mC,QACvBtC,UAAYC,iBACZO,aAAaR,WAAWzV,KAAKmQ,UAAY,QACzCuF,gBAAkBD,WACXD,SAAWE,iBAGdO,aAAaT,UAAUxV,KAAKmQ,UAF5BqF,WAAatkC,EAE2B,SAEA,SAE5CwkC,gBAAkBF,UAElBxV,KAAKkY,WAAWC,aAAahD,OAASnG,IAAIoJ,cAAc,MAAOpY,MAI/DA,KAAKuQ,aAAevQ,KAAKiY,UAAYpE,WAEjCsB,OACAA,OAAO+C,WAAWja,YAAYkX,QACvBO,kBAAoBF,SAC3BS,aAAaT,UAAUxV,KAAKmQ,UAAY,IAExC8F,aAAaR,WAAWzV,KAAKmQ,UAAY,IAE7CiF,gBAAkBlkC,EAElBA,EAAIkQ,KAEJi0B,2BAA6B,OAKjCH,gBAAkBrB,YAClBuB,gBAAkBlkC,EAClBA,EAAIkQ,KAMpB,GAAIg0B,gBAAkBh0B,IAAK,CAOvB,IALAo1B,WAAWI,aAAc,EAGzBvB,2BAA6BA,4BAA0DD,gBAElFlkC,EAAIkQ,IAAM,EAAGlQ,GAAKmkC,2BAA4BnkC,GAAK,GACpD8uB,KAAOiW,aAAa/kC,GAAG8uB,MAElBkY,WAAWja,YAAY+B,MAGhC,KAAO9uB,GAAK,EAAGA,GAAK,EAChB8uB,KAAOiW,aAAa/kC,GAAG8uB,KACnB8O,MAAMuJ,eAAe7hC,KAAKwpB,KAAK6X,WAE/B7X,KAAKkY,WAAWja,YAAY+B,MAE5B9uB,EAAI,EAgBpB,OAVIslC,WAAWx9B,KAAO02B,UAAUS,UAAUl3B,QAAQ61B,MAAMwJ,gBAAiB,MAAMr/B,QAAQ,WAAY,KAC3Fu9B,WAAWI,cACXJ,WAAWx9B,MAAQ88B,YACnBU,WAAWW,SAAWhD,UAI9BqC,WAAW/D,OAAS/C,UAAUa,aAC9BiG,WAAWhE,MAAQ9C,UAAUc,YAEtBgG,WAGP,OADAA,WAAW+B,MAAQ,IAAI3wB,MAAM,qBACtB4uB,YAoBfhH,kBAAkBx8B,UAAU+jC,WAAa,SAAU/9B,KAAMw/B,yBACrD,IAAK7/B,KAAKm4B,MACN,OAAO,EAGX,IAAI2H,QACAC,OACAC,MACAznC,EACAC,EACAynC,eAAiB,EACjBnG,OAAS,EACToG,iBAEJ,IAAKL,wBACD,OAAO7/B,KAAKw4B,qBAAqBn4B,MAKrC,IAAK9H,EAAI,EAAGC,GADZsnC,QAAUz/B,KAAKiM,MAAM,KACG5K,OAAQnJ,EAAIC,EAAGD,IACnCwnC,OAASD,QAAQvnC,GACjBynC,MAAQhgC,KAAKw4B,qBAAqBuH,QAAQ,EAAMD,QAAQp+B,QACxDo4B,OAASpmB,IAAIomB,OAAQkG,MAAMlG,QAC3BmG,gBAAkBD,MAAMnG,MACxBqG,cAAcH,QAAUC,MAAMnG,MAGlC,OACIA,MAAOrvB,MAAMy1B,gBACbnG,OAAQA,OACRyE,UAAW2B,gBAOnBrJ,kBAAkBx8B,UAAUiyB,QAAU,WAClC,OAAKtsB,KAAKm4B,OAIVn4B,KAAKi4B,mBAAqBj4B,KAAKi4B,kBAAkB3L,SAAWtsB,KAAKi4B,kBAAkB3L,iBAE5EtsB,KAAKi5B,kBACLj5B,KAAKy6B,gBACLz6B,KAAK26B,cACL36B,KAAKi4B,yBACLj4B,KAAKi6B,qBACLj6B,KAAK82B,UACL92B,KAAK+3B,aACL/3B,KAAKg4B,uBACLh4B,KAAKk4B,gBAELl4B,MAfIA,MAkBfjI,QAAO,QAAc8+B,kBACrB7+B,OAAOD,QAAUA,QAAO,mEC7yBxBkB,OAAOC,eAAenB,QAAS,cAC9ByB,OAAO,IAER,IAAI2mC,KACH/J,KAAM,SAASA,KAAK3I,KACnB,IAAI4I,IAAM5I,IAAI6I,SAEV8J,UADM3S,IAAI4S,UACMD,UAEhBlV,KAAOrnB,KAAKqnB,KACZva,MAAQ9M,KAAK8M,MAEb2vB,aAAe,2BACfC,eAAiBD,aAAe,YAChC1B,iBAAmB0B,aAAe,MAkLtC,OA/KAH,KACC1S,IAAKA,IAEL8S,eAAgBA,eAEhB3B,iBAAkBA,iBAElBC,mBATwByB,6BAWxBjJ,qBAAsB,IAEtB4H,aAAc,IAAI9+B,OAAO,KAAOy+B,iBAAmB,MAEnDc,eAAgB,IAAIv/B,OAAO,kCAE3Bu+B,iBAAkB,2CAElBC,qBAAsB,kBAAoBC,iBAAmB,cAE7De,gBAAiB,IAAIx/B,OAAO,kBAAoBy+B,iBAAmB,kCAAmC,MAEtGV,YAAa,IAAI/9B,OAAO,mBAAoB,KAE5Cg+B,UAAW,aAEXqC,eAAgB,WAEhB/I,WAAY,MAGZK,sBACC2I,SAAU,WACVC,IAAK,UACLC,WAAY,SACZC,QAAS,MACT/G,MAAO,MACPC,OAAQ,MACR+G,SAAU,UAIXC,gBACCC,KAAM,OACNvH,WAAY,cACZwH,cAAe,cACfvH,WAAY,cACZwH,cAAe,cACf1H,SAAU,YACV2H,YAAa,YACbpG,WAAY,cACZqG,cAAe,cACfzH,UAAW,aACX0H,aAAc,cAIf1K,mBAAoB,SAASA,qBAC5B,IAAIoI,gBAAiBC,oBAAqBC,eAY1C,OAVI3I,IAAIgL,wBACPvC,gBAAkB,yBAClBC,oBAAsBH,iBACtBI,gBAAiB,IAEjBF,gBAAkB,uBAClBC,oBAAsB,OACtBC,gBAAiB,IAIjBrH,KAAM,QAAQ95B,KAAKuiC,aAAe3S,IAAI6T,MACtCC,OAAQC,QAAQ/T,IAAIgU,UAAYpL,IAAIqL,eAAeC,WAAW,oDAAqD,QACnHjK,WAAY,IAAIv3B,OAAO,aAAatC,KAAKuiC,WACzCxJ,SAAU,IAAIz2B,OAAO,iBAAiBtC,KAAKuiC,WAC3CtB,gBAAiBA,gBACjBC,oBAAqBA,oBACrBC,eAAgBA,iBAWlBzH,gBAAiB,SAASA,gBAAgBqK,iBACzC,IAAIC,KAAM9K,UAEV,GAAI6K,kBAAoBA,gBAAgB/J,aAAe+J,gBAAgBhK,eACtE,GAAIgK,gBAAgBE,YAKnB,OAJAF,gBAAgBE,YAAY/K,UAAYV,IAAIoJ,cArGtC,QAsGN1I,UAAUmI,UAAYqB,eACtBxJ,UAAUgL,aAAa,cAAe,QACtChL,UAAUgL,aAAa,OAAQ,gBACxBhL,eAKR,IAFA8K,KAAOxL,IAAI2L,qBAAqB,QAAQ,KAE5BH,KAAKC,YAOhB,OANA/K,UAAYV,IAAIoJ,cA/GV,QAgHIP,UAAYqB,eACtBxJ,UAAUgL,aAAa,cAAe,QACtChL,UAAUgL,aAAa,OAAQ,gBACL,EAC1BF,KAAKC,YAAY/K,WACVA,WAMVuH,qBAAsB,SAASA,qBAAqBj+B,KAAM46B,SAAUgH,IACnE,IAAK5hC,OAASA,KAAKqB,OAClB,OAAO,EAGR,IAAIyQ,WACA2pB,SAAWmG,GAAGlI,cACdmI,QAAU,EACVC,UAAY,EACZ1G,SAAWK,SAASz7B,MACpB+hC,SAAW3G,SAAWp7B,KAAKqB,OAK/B,GAHAyQ,WAAa8oB,SACbiH,QAAUhX,KAAK+P,SAAWmH,UAEtB3G,SAAWR,SACd,OAAO56B,KAAKqB,OAAS,EAQtB,IALIwgC,QAAU7hC,KAAKqB,SAClByQ,WAAa8oB,SAAWQ,SACxByG,QAAU7hC,KAAKqB,QAGTyQ,WAAa,GAAG,CAGtB,GAFAA,WAAa8oB,SAAWa,SAASz7B,KAAKg+B,OAAO,EAAG6D,YAChDC,UAAYxxB,MAAMwB,WAAaiwB,WAI9B,OAAOF,QAFPA,SAAWC,UAMb,KAAOhwB,WAAa,GAAG,CAGtB,GAFAA,WAAa8oB,SAAWa,SAASz7B,KAAKg+B,OAAO,EAAG6D,YAChDC,UAAYxxB,MAAMwB,WAAaiwB,WAI9B,OAAOF,QAFPA,SAAWC,UAKb,OAAOD,SAWR3H,cAAe,SAASA,cAAc8H,UACrC,IAAIC,MAAQD,SAAS9I,SAAW8I,SAAS9I,UAAY,OAErD,OADA8I,SAASvH,WAAauH,SAASvH,YAAcuH,SAAS,gBAAwC,IAAtBhhC,SAASihC,MAAO,IAAY,KAC7FD,aAQXtqC,QAAO,QAAcooC,IACrBnoC,OAAOD,QAAUA,QAAO,wvCCvMxB,IAAMwqC,KAAOjkC,oBAAQ,IAErBtG,OAAOD,QAAUwqC,KAAK3nC,QAAU2nC,KAAK3nC,QAAU2nC,gECE/C,IAIIpM,MANJ,SAASH,uBAAuB9tB,KAAO,OAAOA,KAAOA,IAAIvO,WAAauO,KAAQtN,QAAWsN,KAI7E8tB,CAFD13B,oBAAQ,IAIF,QAAY83B,KAAuB,oBAAXj+B,OAAyBA,YAASmV,GACvE+oB,IAAMF,MAAM1I,IAAI6I,SAChBG,gBAAkBN,MAAMO,qBACxBC,oBAAsBF,gBAAgBG,SAAW,EAAI,IAEzD,SAAS4L,iBAAiBxK,gBAAiBb,cAAesL,eACtD,IAAIC,IAGJD,eADAA,cAAgBA,cAAgB,EAAIA,cAAgB,GACpB,GAAKA,cAAgB,GAErDziC,KAAKyiC,cAAgBA,cACrBziC,KAAK2T,MAAQ,KACb3T,KAAK4T,KAAO,KACZ5T,KAAK2iC,cACL3iC,KAAK0B,OAAS,EACd1B,KAAK4iC,SAAW5K,gBAEZb,iBACAuL,IAAMrM,IAAIwM,gBAAgB,6BAA8B,QACpDC,eAAe,6BAA8B,QAAS,gCAC1DJ,IAAII,eAAe,6BAA8B,SAAU,KAC3DJ,IAAII,eAAe,6BAA8B,QAAS,KAC1D9iC,KAAK+iC,QAAUL,IACf1iC,KAAK4iC,SAASd,YAAYY,MAIlCF,iBAAiBnoC,UAAUjB,IAAM,SAAU2+B,OACvC,IAAIiL,KACAlpC,IACAmpC,aACAN,WAAa3iC,KAAK2iC,WAClBl6B,IAAMzI,KAAK0B,OACXgS,IAAM1T,KAAKyiC,cACXS,OAAS,GAEb,IAAKppC,OAAOq8B,MAAM2K,oBACKxzB,IAAfyqB,MAAMj+B,OACNopC,QAAU/M,MAAM2K,eAAehnC,KAAO,IAAMi+B,MAAMj+B,KAAO,KAIjE,IAAKopC,OACD,OAAO,EAGX,GAAID,aAAeN,WAAWO,QACtBljC,KAAK2T,QAAUsvB,eACfA,aAAaE,OAASF,aAAaE,KAAKlxB,KAAOgxB,aAAahxB,MAC5DgxB,aAAahxB,OAASgxB,aAAahxB,KAAKkxB,KAAOF,aAAaE,MAC5DF,aAAahxB,KAAOjS,KAAK2T,MACzBsvB,aAAahxB,KAAKkxB,KAAOF,aACzBjjC,KAAK4T,OAASqvB,eAAiBjjC,KAAK4T,KAAOqvB,aAAaE,MACxDF,aAAaE,KAAO,KACpBnjC,KAAK2T,MAAQsvB,kBAEd,CACH,GAAIx6B,KAAOiL,IAGP,IAFAsvB,KAAOv6B,IAAMiL,IAAM,EAEZsvB,QACHhjC,KAAKojC,gBAAgBpjC,KAAK4T,MAGlCqvB,aAAejjC,KAAKqjC,aAAaH,QAGrC,OAAOD,cAGXT,iBAAiBnoC,UAAUgpC,aAAe,SAAUH,QAChD,IAAIpU,KAAMiI,UA8DV,OA5DA/2B,KAAK2iC,WAAWO,QAAUnM,WACtB9kB,KAAM,KACNkxB,KAAM,KACNrU,KAAM,KACNsO,cAAe,EACftC,WAAY,EACZuC,SAAU,EACViG,aAAc,EACdJ,OAAQA,OACRtI,cAKJ7D,UAAU9kB,KAAOjS,KAAK2T,MACtBojB,UAAU9kB,OAAS8kB,UAAU9kB,KAAKkxB,KAAOpM,WACzC/2B,KAAK2T,MAAQojB,UACR/2B,KAAK4T,OACN5T,KAAK4T,KAAOmjB,WAEhB/2B,KAAK0B,QAAU,EAEfotB,KAAOiI,UAAUjI,KAAOuH,IAAIoJ,cAAc,OAC1Cz/B,KAAK4iC,SAASd,YAAYhT,MAEtB2H,gBAAgBkB,OAASlB,gBAAgB8K,OACzCzS,KAAKiJ,MAAMgK,aAAa,UAAWmB,QAEnCpU,KAAKiT,aAAa,QAASmB,QAG/BpU,KAAKiT,aAAa,cAAe,QACjCjT,KAAKiT,aAAa,OAAQ,gBAC1BjT,KAAKiJ,MAAMwL,QAAU,eAErBzU,KAAK0I,UAAYrB,MAAMsB,WACvBV,UAAU+D,WAAahM,KAAK8I,aAC5Bb,UAAUuM,aAAexU,KAAK+I,YAAc,EAExCpB,gBAAgBU,gBAChBrI,KAAOiI,UAAUmD,QAAU7D,IAAIwM,gBAAgB,6BAA8B,SACxEd,aAAa,QAASmB,QAC3BljC,KAAK+iC,QAAQjB,YAAYhT,MAEzBA,KAAKsL,YAAcjE,MAAMsB,WACzBV,UAAU+D,WAAahM,KAAKuL,UAAUP,OACtC/C,UAAUuM,cAAgBxU,KAAKuL,UAAUR,MAAQlD,qBAAuB,EAExE7H,KAAKsL,YAAc,MACnBrD,UAAUqG,cAAgBtO,KAAKuL,UAAUR,MAAQlD,oBACjD7H,KAAKsL,YAAc,IACnBrD,UAAUsG,SAAWvO,KAAKuL,UAAUR,MAAQlD,sBAE5C7H,KAAK0I,UAAY,MACjBT,UAAUqG,cAAgBtO,KAAK+I,YAC/B/I,KAAK0I,UAAY,IACjBT,UAAUsG,SAAWvO,KAAK+I,YAC1B/I,KAAK0I,UAAY,IAGdT,WAGXyL,iBAAiBnoC,UAAU+oC,gBAAkB,SAAUI,MACnD,IAAIN,OAASM,KAAKN,OAEbA,QAAWljC,KAAK0B,QAAW8hC,OAGhCxjC,KAAK0B,QAAU,EAEf8hC,KAAKL,OAASK,KAAKL,KAAKlxB,KAAOuxB,KAAKvxB,MACpCuxB,KAAKvxB,OAASuxB,KAAKvxB,KAAKkxB,KAAOK,KAAKL,MACpCnjC,KAAK2T,QAAU6vB,OAASxjC,KAAK2T,MAAQ6vB,KAAKvxB,MAC1CjS,KAAK4T,OAAS4vB,OAASxjC,KAAK4T,KAAO4vB,KAAKL,MAExCK,KAAK1U,KAAKyQ,WAAWja,YAAYke,KAAK1U,aAE/B9uB,KAAK2iC,WAAWO,UAG3BV,iBAAiBnoC,UAAUiyB,QAAU,WACjC,IAAIxyB,IACA6oC,WAAa3iC,KAAK2iC,WAGtB,IAAK7oC,OADLkG,KAAKyiC,cAAgB,KACTE,WACR3iC,KAAKojC,gBAAgBT,WAAW7oC,MAGpCkG,KAAK4iC,SAASrD,WAAWja,YAAYtlB,KAAK4iC,UAE1C5iC,KAAK4iC,SAAW,KAChB5iC,KAAK2T,MAAQ,KACb3T,KAAK4T,KAAO,MAGhB5b,OAAOD,QAAUyqC,o2dCnLFiB,UAAA,SAAS9oC,EAAGyI,GACzB,OAAOzI,EAAIyI,GAAK,EAAIzI,EAAIyI,EAAI,EAAIzI,GAAKyI,EAAI,EAAIsgC,KCChCC,SAAA,SAASC,SAEtB,OADuB,IAAnBA,QAAQliC,SAAckiC,QAyB5B,SAASC,oBAAoBtpB,GAC3B,OAAO,SAAS1hB,EAAGsjC,GACjB,OAAOsH,UAAUlpB,EAAE1hB,GAAIsjC,IA3BW0H,CAAoBD,WAEtDE,KAAM,SAAAA,KAASnpC,EAAGwhC,EAAG3rB,GAAIC,IAGvB,IAFU,MAAND,KAAYA,GAAK,GACX,MAANC,KAAYA,GAAK9V,EAAE+G,QAChB8O,GAAKC,IAAI,CACd,IAAIC,IAAMF,GAAKC,KAAO,EAClBmzB,QAAQjpC,EAAE+V,KAAMyrB,GAAK,EAAG3rB,GAAKE,IAAM,EAClCD,GAAKC,IAEZ,OAAOF,IAETuzB,MAAO,SAAAA,MAASppC,EAAGwhC,EAAG3rB,GAAIC,IAGxB,IAFU,MAAND,KAAYA,GAAK,GACX,MAANC,KAAYA,GAAK9V,EAAE+G,QAChB8O,GAAKC,IAAI,CACd,IAAIC,IAAMF,GAAKC,KAAO,EAClBmzB,QAAQjpC,EAAE+V,KAAMyrB,GAAK,EAAG1rB,GAAKC,IAC5BF,GAAKE,IAAM,EAElB,OAAOF,MCpBb,IAAIwzB,gBAAkBL,SAASF,WACpBQ,YAAcD,gBAAgBD,MAE1BE,QADSD,gBAAgBF,KACzBG,aCJA,ICFAC,OAAA,SAAS/H,GACtB,OAAa,OAANA,EAAauH,KAAOvH,GCDzBgI,YAAQt7B,MAAMxO,UCAH+pC,WDEID,YAAMrpB,MACRqpB,YAAMl8B,ICHR,SAAShK,MAAOomC,KAAMC,MACnCrmC,OAASA,MAAOomC,MAAQA,KAAMC,MAAQtqC,EAAIoL,UAAU1D,QAAU,GAAK2iC,KAAOpmC,MAAOA,MAAQ,EAAG,GAAKjE,EAAI,EAAI,GAAKsqC,KAM9G,IAJA,IAAI/rC,GAAK,EACLyB,EAAoD,EAAhD6J,KAAK6P,IAAI,EAAG7P,KAAKqnB,MAAMmZ,KAAOpmC,OAASqmC,OAC3C/iC,MAAQ,IAAIsH,MAAM7O,KAEbzB,EAAIyB,GACXuH,MAAMhJ,GAAK0F,MAAQ1F,EAAI+rC,KAGzB,OAAO/iC,QCXLgjC,IAAM1gC,KAAKkQ,KAAK,IAChBywB,GAAK3gC,KAAKkQ,KAAK,IACf0wB,GAAK5gC,KAAKkQ,KAAK,GAEJ2wB,UAAA,SAASzmC,MAAOomC,KAAMxwB,OACnC,IAAIyP,QAEAtpB,EACA2qC,MACAL,KAHA/rC,GAAK,EAMT,GAD8Bsb,OAASA,OAAzB5V,OAASA,UAAvBomC,MAAQA,OACcxwB,MAAQ,EAAG,OAAQ5V,OAEzC,IADIqlB,QAAU+gB,KAAOpmC,SAAOjE,EAAIiE,MAAOA,MAAQomC,KAAMA,KAAOrqC,GACT,KAA9CsqC,KAAOM,cAAc3mC,MAAOomC,KAAMxwB,UAAkBzS,SAASkjC,MAAO,SAEzE,GAAIA,KAAO,EAIT,IAHArmC,MAAQ4F,KAAKqnB,KAAKjtB,MAAQqmC,MAC1BD,KAAOxgC,KAAK8M,MAAM0zB,KAAOC,MACzBK,MAAQ,IAAI97B,MAAM7O,EAAI6J,KAAKqnB,KAAKmZ,KAAOpmC,MAAQ,MACtC1F,EAAIyB,GAAG2qC,MAAMpsC,IAAM0F,MAAQ1F,GAAK+rC,UAKzC,IAHArmC,MAAQ4F,KAAK8M,MAAM1S,MAAQqmC,MAC3BD,KAAOxgC,KAAKqnB,KAAKmZ,KAAOC,MACxBK,MAAQ,IAAI97B,MAAM7O,EAAI6J,KAAKqnB,KAAKjtB,MAAQomC,KAAO,MACtC9rC,EAAIyB,GAAG2qC,MAAMpsC,IAAM0F,MAAQ1F,GAAK+rC,KAK3C,OAFIhhB,SAASqhB,MAAMrhB,UAEZqhB,OAGF,SAASC,cAAc3mC,MAAOomC,KAAMxwB,OACzC,IAAIywB,MAAQD,KAAOpmC,OAAS4F,KAAK6P,IAAI,EAAGG,OACpCgxB,MAAQhhC,KAAK8M,MAAM9M,KAAKihC,IAAIR,MAAQzgC,KAAKkhC,MACzCnF,MAAQ0E,KAAOzgC,KAAKoQ,IAAI,GAAI4wB,OAChC,OAAOA,OAAS,GACTjF,OAAS2E,IAAM,GAAK3E,OAAS4E,GAAK,EAAI5E,OAAS6E,GAAK,EAAI,GAAK5gC,KAAKoQ,IAAI,GAAI4wB,QAC1EhhC,KAAKoQ,IAAI,IAAK4wB,QAAUjF,OAAS2E,IAAM,GAAK3E,OAAS4E,GAAK,EAAI5E,OAAS6E,GAAK,EAAI,GAGlF,SAASO,SAAS/mC,MAAOomC,KAAMxwB,OACpC,IAAIoxB,MAAQphC,KAAKsnB,IAAIkZ,KAAOpmC,OAAS4F,KAAK6P,IAAI,EAAGG,OAC7CqxB,MAAQrhC,KAAKoQ,IAAI,GAAIpQ,KAAK8M,MAAM9M,KAAKihC,IAAIG,OAASphC,KAAKkhC,OACvDnF,MAAQqF,MAAQC,MAIpB,OAHItF,OAAS2E,IAAKW,OAAS,GAClBtF,OAAS4E,GAAIU,OAAS,EACtBtF,OAAS6E,KAAIS,OAAS,GACxBb,KAAOpmC,OAASinC,MAAQA,MCjDlB,ICEAC,SAAA,SAAS5nB,OAAQhjB,EAAG6qC,SAEjC,GADe,MAAXA,UAAiBA,QAAUlB,QACzBlqC,EAAIujB,OAAO7b,OAAjB,CACA,IAAKnH,GAAKA,IAAM,GAAKP,EAAI,EAAG,OAAQorC,QAAQ7nB,OAAO,GAAI,EAAGA,QAC1D,GAAIhjB,GAAK,EAAG,OAAQ6qC,QAAQ7nB,OAAOvjB,EAAI,GAAIA,EAAI,EAAGujB,QAClD,IAAIvjB,EACAzB,GAAKyB,EAAI,GAAKO,EACd8qC,GAAKxhC,KAAK8M,MAAMpY,GAChB+sC,QAAUF,QAAQ7nB,OAAO8nB,IAAKA,GAAI9nB,QAEtC,OAAO+nB,SADOF,QAAQ7nB,OAAO8nB,GAAK,GAAIA,GAAK,EAAG9nB,QACpB+nB,SAAW/sC,EAAI8sC,MCV3C,SAASj0B,WAkDT,SAASnJ,QAAI9N,OAAQogB,GACnB,IAAItS,IAAM,IAAImJ,QAGd,GAAIjX,kBAAkBiX,QAAKjX,OAAOorC,KAAK,SAAS/rC,MAAOM,KAAOmO,IAAIwJ,IAAI3X,IAAKN,cAGtE,GAAIqP,MAAMwB,QAAQlQ,QAAS,CAC9B,IAEInB,EAFAT,GAAK,EACLyB,EAAIG,OAAOuH,OAGf,GAAS,MAAL6Y,EAAW,OAAShiB,EAAIyB,GAAGiO,IAAIwJ,IAAIlZ,EAAG4B,OAAO5B,SAC5C,OAASA,EAAIyB,GAAGiO,IAAIwJ,IAAI8I,EAAEvhB,EAAImB,OAAO5B,GAAIA,EAAG4B,QAASnB,QAIvD,GAAImB,OAAQ,IAAK,IAAIL,OAAOK,OAAQ8N,IAAIwJ,IAAI3X,IAAKK,OAAOL,MAE7D,OAAOmO,IAnETmJ,QAAI/W,UAAY4N,QAAI5N,WAClB2qB,YAAa5T,QACbI,IAAK,SAAAA,IAAS1X,KACZ,MAPgB,IAOCA,OAAQkG,MAE3B5G,IAAK,SAAAA,IAASU,KACZ,OAAOkG,KAVS,IAUKlG,MAEvB2X,IAAK,SAAAA,IAAS3X,IAAKN,OAEjB,OADAwG,KAbgB,IAaFlG,KAAON,MACdwG,MAETwlC,OAAQ,SAAAA,OAAS1rC,KACf,IAAIM,SAjBY,IAiBQN,IACxB,OAAOM,YAAY4F,aAAeA,KAAK5F,WAEzCqrC,MAAO,SAAAA,QACL,IAAK,IAAIrrC,YAAY4F,KArBL,MAqBe5F,SAAS,WAAsB4F,KAAK5F,WAErE0L,KAAM,SAAAA,OACJ,IAAIA,QACJ,IAAK,IAAI1L,YAAY4F,KAzBL,MAyBe5F,SAAS,IAAe0L,KAAKI,KAAK9L,SAAS0gB,MAAM,IAChF,OAAOhV,MAETyX,OAAQ,SAAAA,SACN,IAAIA,UACJ,IAAK,IAAInjB,YAAY4F,KA9BL,MA8Be5F,SAAS,IAAemjB,OAAOrX,KAAKlG,KAAK5F,WACxE,OAAOmjB,QAET/I,QAAS,SAAAA,UACP,IAAIA,WACJ,IAAK,IAAIpa,YAAY4F,KAnCL,MAmCe5F,SAAS,IAAeoa,QAAQtO,MAAMpM,IAAKM,SAAS0gB,MAAM,GAAIthB,MAAOwG,KAAK5F,YACzG,OAAOoa,SAETkkB,KAAM,SAAAA,OACJ,IAAIA,KAAO,EACX,IAAK,IAAIt+B,YAAY4F,KAxCL,MAwCe5F,SAAS,MAAiBs+B,KACzD,OAAOA,MAETgN,MAAO,SAAAA,QACL,IAAK,IAAItrC,YAAY4F,KAAM,GA5CX,MA4Ce5F,SAAS,GAAe,OAAO,EAC9D,OAAO,GAETmrC,KAAM,SAAAA,KAAShrB,GACb,IAAK,IAAIngB,YAAY4F,KAhDL,MAgDe5F,SAAS,IAAemgB,EAAEva,KAAK5F,UAAWA,SAAS0gB,MAAM,GAAI9a,QA0BjFiI,oBCxEA09B,SAAA,WACb,IAEIC,YACAC,QACAC,KAJAhgC,QACAigC,aAKJ,SAASx+B,MAAM48B,MAAO6B,MAAOC,aAAcC,WACzC,GAAIF,OAASlgC,KAAKpE,OAEhB,OADkB,MAAdkkC,aAAoBzB,MAAM5zB,KAAKq1B,aAClB,MAAVC,QAAiBA,QAAO1B,OAASA,MAY1C,IATA,IAGIgC,SACA3sC,MAEA+jB,OANAhlB,GAAK,EACLyB,EAAImqC,MAAMziC,OACV5H,IAAMgM,KAAKkgC,SAGXI,YAAcn+B,UAEdxE,OAASwiC,iBAEJ1tC,EAAIyB,IACPujB,OAAS6oB,YAAYhtC,IAAI+sC,SAAWrsC,IAAIN,MAAQ2qC,MAAM5rC,IAAM,KAC9DglB,OAAOrX,KAAK1M,OAEZ4sC,YAAY30B,IAAI00B,UAAW3sC,QAQ/B,OAJA4sC,YAAYb,KAAK,SAAShoB,OAAQzjB,KAChCosC,UAAUziC,OAAQ3J,IAAKyN,MAAMgW,OAAQyoB,MAAOC,aAAcC,cAGrDziC,OAWT,OAAOqiC,MACL3rC,OAAQ,SAAAA,OAASgqC,OAAS,OAAO58B,MAAM48B,MAAO,EAAGkC,aAAcC,YAC/Dr+B,IAAK,SAAAA,IAASk8B,OAAS,OAAO58B,MAAM48B,MAAO,EAAGoC,UAAWC,SACzDhyB,QAAS,SAAAA,QAAS2vB,OAAS,OAX7B,SAAS3vB,SAAQvM,IAAK+9B,OACpB,KAAMA,MAAQlgC,KAAKpE,OAAQ,OAAOuG,IAClC,IAAIk8B,MAAOsC,QAAUV,UAASC,MAAQ,GAGtC,OAFc,MAAVH,SAAkBG,OAASlgC,KAAKpE,OAAQyiC,MAAQl8B,IAAIuM,WACnD2vB,SAAYl8B,IAAIs9B,KAAK,SAAS37B,EAAG88B,GAAKvC,MAAMj+B,MAAMpM,IAAK4sC,EAAGnpB,OAAQ/I,SAAQ5K,EAAGo8B,YAChE,MAAXS,QAAkBtC,MAAM5zB,KAAK,SAAS5V,EAAGyI,GAAK,OAAOqjC,QAAQ9rC,EAAEb,IAAKsJ,EAAEtJ,OAAWqqC,MAMtD3vB,CAAQjN,MAAM48B,MAAO,EAAGoC,UAAWC,QAAS,IAC9E1sC,IAAK,SAAAA,IAASjB,GAAmB,OAAdiN,KAAKI,KAAKrN,GAAWitC,MACxCC,SAAU,SAAAA,SAAS9f,OAA4C,OAAnC8f,UAASjgC,KAAKpE,OAAS,GAAKukB,MAAc6f,MACtEF,WAAY,SAAAA,WAAS3f,OAA6B,OAApB2f,YAAa3f,MAAc6f,MACzDD,OAAQ,SAAAA,OAAStrB,GAAiB,OAAZsrB,QAAStrB,EAAUurB,QAI7C,SAASO,eACP,SAGF,SAASC,UAAUnsC,OAAQL,IAAKN,OAC9BW,OAAOL,KAAON,MAGhB,SAAS+sC,YACP,OAAOt+B,UAGT,SAASu+B,OAAOv+B,IAAKnO,IAAKN,OACxByO,IAAIwJ,IAAI3X,IAAKN,OCrEf,SAAS+c,WAET,IAAIowB,MAAQ1+B,QAAI5N,UAkBhB,SAASoX,QAAItX,OAAQogB,GACnB,IAAI9I,IAAM,IAAI8E,QAGd,GAAIpc,kBAAkBoc,QAAKpc,OAAOorC,KAAK,SAAS/rC,OAASiY,IAAIgF,IAAIjd,cAG5D,GAAIW,OAAQ,CACf,IAAI5B,GAAK,EAAGyB,EAAIG,OAAOuH,OACvB,GAAS,MAAL6Y,EAAW,OAAShiB,EAAIyB,GAAGyX,IAAIgF,IAAItc,OAAO5B,SACzC,OAASA,EAAIyB,GAAGyX,IAAIgF,IAAI8D,EAAEpgB,OAAO5B,GAAIA,EAAG4B,SAG/C,OAAOsX,IA7BT8E,QAAIlc,UAAYoX,QAAIpX,WAClB2qB,YAAazO,QACb/E,IAAKm1B,MAAMn1B,IACXiF,IAAK,SAAAA,IAASjd,OAGZ,OADAwG,KFXgB,KEUhBxG,OAAS,KACcA,MAChBwG,MAETwlC,OAAQmB,MAAMnB,OACdC,MAAOkB,MAAMlB,MACbloB,OAAQopB,MAAM7gC,KACd4yB,KAAMiO,MAAMjO,KACZgN,MAAOiB,MAAMjB,MACbH,KAAMoB,MAAMpB,MAmBC9zB,ICtCX0yB,gBAAQt7B,MAAMxO,UAEP4N,cAAMk8B,gBAAMl8B,IACZ6S,YAAQqpB,gBAAMrpB,MCAd8rB,UAAY9tC,KAAM,YAEd,SAAS+tC,QAAQtlC,OAC9B,IAAIU,MAAQgG,UACRuO,UACAswB,QAAUF,SAId,SAASG,MAAMluC,GACb,IAAIiB,IAAMjB,EAAI,GAAIN,EAAI0J,MAAM7I,IAAIU,KAChC,IAAKvB,EAAG,CACN,GAAIuuC,UAAYF,SAAU,OAAOE,QACjC7kC,MAAMwP,IAAI3X,IAAKvB,EAAIie,OAAOtQ,KAAKrN,IAEjC,OAAO0I,OAAOhJ,EAAI,GAAKgJ,MAAMG,QA0B/B,OAlCAH,MAAiB,MAATA,SAAqBuZ,YAAMpiB,KAAK6I,OAWxCwlC,MAAMvwB,OAAS,SAAS2J,GACtB,IAAK/a,UAAU1D,OAAQ,OAAO8U,OAAOsE,QACrCtE,UAAavU,MAAQgG,UAErB,IADA,IAA0BpP,EAAGiB,IAAzBvB,GAAK,EAAGyB,EAAImmB,EAAEze,SACTnJ,EAAIyB,GAAQiI,MAAMuP,IAAI1X,KAAOjB,EAAIsnB,EAAE5nB,IAAM,KAAK0J,MAAMwP,IAAI3X,IAAK0c,OAAOtQ,KAAKrN,IAClF,OAAOkuC,OAGTA,MAAMxlC,MAAQ,SAAS4e,GACrB,OAAO/a,UAAU1D,QAAUH,MAAQuZ,YAAMpiB,KAAKynB,GAAI4mB,OAASxlC,MAAMuZ,SAGnEisB,MAAMD,QAAU,SAAS3mB,GACvB,OAAO/a,UAAU1D,QAAUolC,QAAU3mB,EAAG4mB,OAASD,SAGnDC,MAAMC,KAAO,WACX,OAAOH,UACFrwB,OAAOA,QACPjV,MAAMA,OACNulC,QAAQA,UAGRC,MCzCM,SAASE,OACtB,IAII3C,KACA4C,UALAH,MAAQF,UAAUC,aAAQx5B,GAC1BkJ,OAASuwB,MAAMvwB,OACf2wB,aAAeJ,MAAMxlC,MACrBA,OAAS,EAAG,GAGZiJ,OAAQ,EACR48B,aAAe,EACfC,aAAe,EACfC,MAAQ,GAGZ,SAASC,UACP,IAAIvtC,EAAIwc,SAAS9U,OACb4hB,QAAU/hB,MAAM,GAAKA,MAAM,GAC3BtD,MAAQsD,MAAM+hB,QAAU,GACxB+gB,KAAO9iC,MAAM,EAAI+hB,SACrBghB,MAAQD,KAAOpmC,OAAS4F,KAAK6P,IAAI,EAAG1Z,EAAIotC,aAA8B,EAAfC,cACnD78B,QAAO85B,KAAOzgC,KAAK8M,MAAM2zB,OAC7BrmC,QAAUomC,KAAOpmC,MAAQqmC,MAAQtqC,EAAIotC,eAAiBE,MACtDJ,UAAY5C,MAAQ,EAAI8C,cACpB58B,QAAOvM,MAAQ4F,KAAK2G,MAAMvM,OAAQipC,UAAYrjC,KAAK2G,MAAM08B,YAC7D,IAAI3pB,OAASiqB,UAASxtC,GAAGiO,IAAI,SAAS1P,GAAK,OAAO0F,MAAQqmC,KAAO/rC,IACjE,OAAO4uC,aAAa7jB,QAAU/F,OAAO+F,UAAY/F,QAkGnD,cA9GOwpB,MAAMD,QAebC,MAAMvwB,OAAS,SAAS2J,GACtB,OAAO/a,UAAU1D,QAAU8U,OAAO2J,GAAIonB,WAAa/wB,UAGrDuwB,MAAMxlC,MAAQ,SAAS4e,GACrB,OAAO/a,UAAU1D,QAAUH,QAAU4e,EAAE,IAAKA,EAAE,IAAKonB,WAAahmC,MAAMuZ,SAGxEisB,MAAMU,WAAa,SAAStnB,GAC1B,OAAO5e,QAAU4e,EAAE,IAAKA,EAAE,IAAK3V,OAAQ,EAAM+8B,WAG/CR,MAAMG,UAAY,WAChB,OAAOA,WAGTH,MAAMzC,KAAO,WACX,OAAOA,MAGTyC,MAAMv8B,MAAQ,SAAS2V,GACrB,OAAO/a,UAAU1D,QAAU8I,QAAU2V,EAAGonB,WAAa/8B,OAGvDu8B,MAAMnG,QAAU,SAASzgB,GACvB,OAAO/a,UAAU1D,QAAU0lC,aAAeC,aAAexjC,KAAK6P,IAAI,EAAG7P,KAAK2P,IAAI,EAAG2M,IAAKonB,WAAaH,cAGrGL,MAAMK,aAAe,SAASjnB,GAC5B,OAAO/a,UAAU1D,QAAU0lC,aAAevjC,KAAK6P,IAAI,EAAG7P,KAAK2P,IAAI,EAAG2M,IAAKonB,WAAaH,cAGtFL,MAAMM,aAAe,SAASlnB,GAC5B,OAAO/a,UAAU1D,QAAU2lC,aAAexjC,KAAK6P,IAAI,EAAG7P,KAAK2P,IAAI,EAAG2M,IAAKonB,WAAaF,cAGtFN,MAAMO,MAAQ,SAASnnB,GACrB,OAAO/a,UAAU1D,QAAU4lC,MAAQzjC,KAAK6P,IAAI,EAAG7P,KAAK2P,IAAI,EAAG2M,IAAKonB,WAAaD,OAG/EP,MAAMC,KAAO,WACX,OAAOC,OACFzwB,OAAOA,UACPjV,MAAMA,OACNiJ,MAAMA,OACN48B,aAAaA,cACbC,aAAaA,cACbC,MAAMA,QAGbP,MAAMW,aAAe,SAASC,GAAIC,IAChC,IAI2BjtC,EAAGyI,EAAG3J,EAC7BouC,QALAr3B,IAAMm3B,GACNl3B,GAAKrL,UAAU1D,OAAS,GAAKkmC,GAAKp3B,GAClC8S,QAAU/hB,MAAM,GAAKA,MAAM,GAC3Bgc,OAAS+F,QAAU6jB,eAAe7jB,UAAY6jB,eAC9CntC,EAAIujB,OAAO7b,OAAS,EAKxB,GAHA6b,OAAOrX,KAAKqX,OAAOvjB,GAAKgG,KAAKskC,QAEzB7zB,GAAKD,KAAI/W,EAAI+W,GAAIA,GAAKC,GAAIA,GAAKhX,KAC/BgX,GAAK8M,OAAO,IAAM/M,GAAKjP,MAAM,EAAE+hB,UAWnC,OARA3oB,EAAIkJ,KAAK6P,IAAI,EAAGo0B,kBAAkBvqB,OAAQ/M,KAC1Cq3B,QAAUC,kBAAkBvqB,OAAQ9M,IACpCrN,EAAIoN,KAAKC,GAAK9V,EAAIkJ,KAAK6P,IAAI/Y,EAAGktC,QAAU,GAKpCvkB,UAAS7pB,EAAIkB,EAAGA,EAAIX,EAAIoJ,EAAGA,EAAIpJ,EAAIP,GAC/BkB,EAAIyI,OAAKkK,EAAYkJ,SAASsE,MAAMngB,EAAGyI,EAAE,IAGnD2jC,MAAMgB,OAAS,SAAUJ,GAAIC,IAC3B,IAKIjtC,EACAlB,EANA+W,IAAMm3B,GACNl3B,GAAKrL,UAAU1D,OAAS,GAAKkmC,GAAKp3B,GAClC8S,QAAU/hB,MAAM,GAAKA,MAAM,GAC3Bgc,OAAS+F,QAAU6jB,eAAe7jB,UAAY6jB,eAC9CntC,EAAIujB,OAAO7b,OAAS,EAMxB,GADI+O,GAAKD,KAAI/W,EAAI+W,GAAIA,GAAKC,GAAIA,GAAKhX,KAC/BgX,GAAK8M,OAAO,IAAM/M,GAAKjP,MAAM,EAAE+hB,UAQnC,OALA3oB,EAAIkJ,KAAK6P,IAAI,EAAGo0B,kBAAkBvqB,OAAQ/M,GAAI,SAKvCgG,SAAS8M,QAAUtpB,EAAIW,EAAIA,IAE7B4sC,UAqBT,SAASO,kBAAmBz3B,IAAK7W,MAAOwuC,MAStC,IARA,IAGIC,QACAv3B,IACAw3B,GALAC,IAAM,EAENC,KADS/3B,IAAI3O,OACG,EAMbymC,IAAMC,MACT13B,IAAM7M,KAAK8M,OAAOw3B,IAAMC,MAAQ,GAChCF,GAAKrkC,KAAKsnB,IAAI9a,IAAIK,KAAOlX,OACpBqK,KAAKsnB,IAAI9a,IAAIK,IAAM,GAAKlX,QAEnB0uC,GACNC,IAAMz3B,IAAM,EAGZ03B,KAAO13B,IAIf,OAAKs3B,MAILC,QAAU53B,IAAI+3B,SACE5uC,MACL4uC,KACAH,QAAUzuC,MACJ,IAAT4uC,KAAqBA,KACT,SAATJ,KAAiBI,KAAO,EAAIA,KAE/BA,OAAS/3B,IAAI3O,OAAS,EAAY0mC,KACtB,SAATJ,KAAiBI,KAAOA,KAAO,EAX/BA,KCzKE,IAAAnwC,OAAA,SAAS+sB,YAAaltB,QAASuC,WAC5C2qB,YAAY3qB,UAAYvC,QAAQuC,UAAYA,UAC5CA,UAAU2qB,YAAcA,aAGnB,SAASqjB,OAAO5iB,OAAQ6iB,YAC7B,IAAIjuC,UAAYpB,OAAOY,OAAO4rB,OAAOprB,WACrC,IAAK,IAAIP,OAAOwuC,WAAYjuC,UAAUP,KAAOwuC,WAAWxuC,KACxD,OAAOO,UCNF,SAASkuC,SAET,IAGHC,IAAM,sBACNC,IAAM,gDACNC,IAAM,iDACNC,OAAS,mBACTC,OAAS,mBACTC,aAAe,IAAI1oC,OAAO,WAAaqoC,IAAKA,IAAKA,KAAO,QACxDM,aAAe,IAAI3oC,OAAO,WAAauoC,IAAKA,IAAKA,KAAO,QACxDK,cAAgB,IAAI5oC,OAAO,YAAcqoC,IAAKA,IAAKA,IAAKC,KAAO,QAC/DO,cAAgB,IAAI7oC,OAAO,YAAcuoC,IAAKA,IAAKA,IAAKD,KAAO,QAC/DQ,aAAe,IAAI9oC,OAAO,WAAasoC,IAAKC,IAAKA,KAAO,QACxDQ,cAAgB,IAAI/oC,OAAO,YAAcsoC,IAAKC,IAAKA,IAAKD,KAAO,QAE/DU,OACFC,UAAW,SACXC,aAAc,SACdC,KAAM,MACNC,WAAY,QACZC,MAAO,SACPC,MAAO,SACPC,OAAQ,SACRC,MAAO,EACPC,eAAgB,SAChBC,KAAM,IACNC,WAAY,QACZC,MAAO,SACPC,UAAW,SACXC,UAAW,QACXC,WAAY,QACZC,UAAW,SACXC,MAAO,SACPC,eAAgB,QAChBC,SAAU,SACVC,QAAS,SACTC,KAAM,MACNC,SAAU,IACVC,SAAU,MACVC,cAAe,SACfC,SAAU,SACVC,UAAW,MACXC,SAAU,SACVC,UAAW,SACXC,YAAa,QACbC,eAAgB,QAChBC,WAAY,SACZC,WAAY,SACZC,QAAS,QACTC,WAAY,SACZC,aAAc,QACdC,cAAe,QACfC,cAAe,QACfC,cAAe,QACfC,cAAe,MACfC,WAAY,QACZC,SAAU,SACVC,YAAa,MACbC,QAAS,QACTC,QAAS,QACTC,WAAY,QACZC,UAAW,SACXC,YAAa,SACbC,YAAa,QACbC,QAAS,SACTC,UAAW,SACXC,WAAY,SACZC,KAAM,SACNC,UAAW,SACXC,KAAM,QACNC,MAAO,MACPC,YAAa,SACbC,KAAM,QACNC,SAAU,SACVC,QAAS,SACTC,UAAW,SACXC,OAAQ,QACRC,MAAO,SACPC,MAAO,SACPC,SAAU,SACVC,cAAe,SACfC,UAAW,QACXC,aAAc,SACdC,UAAW,SACXC,WAAY,SACZC,UAAW,SACXC,qBAAsB,SACtBC,UAAW,SACXC,WAAY,QACZC,UAAW,SACXC,UAAW,SACXC,YAAa,SACbC,cAAe,QACfC,aAAc,QACdC,eAAgB,QAChBC,eAAgB,QAChBC,eAAgB,SAChBC,YAAa,SACbC,KAAM,MACNC,UAAW,QACXC,MAAO,SACPC,QAAS,SACTC,OAAQ,QACRC,iBAAkB,QAClBC,WAAY,IACZC,aAAc,SACdC,aAAc,QACdC,eAAgB,QAChBC,gBAAiB,QACjBC,kBAAmB,MACnBC,gBAAiB,QACjBC,gBAAiB,SACjBC,aAAc,QACdC,UAAW,SACXC,UAAW,SACXC,SAAU,SACVC,YAAa,SACbC,KAAM,IACNC,QAAS,SACTC,MAAO,QACPC,UAAW,QACXC,OAAQ,SACRC,UAAW,SACXC,OAAQ,SACRC,cAAe,SACfC,UAAW,SACXC,cAAe,SACfC,cAAe,SACfC,WAAY,SACZC,UAAW,SACXC,KAAM,SACNC,KAAM,SACNC,KAAM,SACNC,WAAY,SACZC,OAAQ,QACRC,cAAe,QACfC,IAAK,SACLC,UAAW,SACXC,UAAW,QACXC,YAAa,QACbC,OAAQ,SACRC,WAAY,SACZC,SAAU,QACVC,SAAU,SACVC,OAAQ,SACRC,OAAQ,SACRC,QAAS,QACTC,UAAW,QACXC,UAAW,QACXC,UAAW,QACXC,KAAM,SACNC,YAAa,MACbC,UAAW,QACXC,IAAK,SACLC,KAAM,MACNC,QAAS,SACTC,OAAQ,SACRC,UAAW,QACXC,OAAQ,SACRC,MAAO,SACPC,MAAO,SACPC,WAAY,SACZC,OAAQ,SACRC,YAAa,UAeA,SAASC,YAAMzyC,QAC5B,IAAIpH,EAEJ,OADAoH,QAAUA,OAAS,IAAIoY,OAAO1W,eACtB9I,EAAIgwC,OAAO8J,KAAK1yC,SAAoC,IAAI2yC,KAA5B/5C,EAAI0I,SAAS1I,EAAE,GAAI,MAAmB,EAAI,GAAQA,GAAK,EAAI,IAASA,GAAK,EAAI,GAAY,IAAJA,GAAiB,GAAJA,IAAY,EAAU,GAAJA,EAAU,IAC3JA,EAAIiwC,OAAO6J,KAAK1yC,SAAW4yC,KAAKtxC,SAAS1I,EAAE,GAAI,MAC/CA,EAAIkwC,aAAa4J,KAAK1yC,SAAW,IAAI2yC,IAAI/5C,EAAE,GAAIA,EAAE,GAAIA,EAAE,GAAI,IAC3DA,EAAImwC,aAAa2J,KAAK1yC,SAAW,IAAI2yC,IAAW,IAAP/5C,EAAE,GAAW,IAAY,IAAPA,EAAE,GAAW,IAAY,IAAPA,EAAE,GAAW,IAAK,IAC/FA,EAAIowC,cAAc0J,KAAK1yC,SAAW6yC,KAAKj6C,EAAE,GAAIA,EAAE,GAAIA,EAAE,GAAIA,EAAE,KAC3DA,EAAIqwC,cAAcyJ,KAAK1yC,SAAW6yC,KAAY,IAAPj6C,EAAE,GAAW,IAAY,IAAPA,EAAE,GAAW,IAAY,IAAPA,EAAE,GAAW,IAAKA,EAAE,KAC/FA,EAAIswC,aAAawJ,KAAK1yC,SAAW8yC,KAAKl6C,EAAE,GAAIA,EAAE,GAAK,IAAKA,EAAE,GAAK,IAAK,IACpEA,EAAIuwC,cAAcuJ,KAAK1yC,SAAW8yC,KAAKl6C,EAAE,GAAIA,EAAE,GAAK,IAAKA,EAAE,GAAK,IAAKA,EAAE,IACxEwwC,MAAM7uC,eAAeyF,QAAU4yC,KAAKxJ,MAAMppC,SAC/B,gBAAXA,OAA2B,IAAI2yC,IAAIhP,IAAKA,IAAKA,IAAK,GAClD,KAGR,SAASiP,KAAK34C,GACZ,OAAO,IAAI04C,IAAI14C,GAAK,GAAK,IAAMA,GAAK,EAAI,IAAU,IAAJA,EAAU,GAG1D,SAAS44C,KAAKv5C,EAAGy5C,EAAG1vC,EAAGzI,GAErB,OADIA,GAAK,IAAGtB,EAAIy5C,EAAI1vC,EAAIsgC,KACjB,IAAIgP,IAAIr5C,EAAGy5C,EAAG1vC,EAAGzI,GAGnB,SAASo4C,WAAW/5C,GAEzB,OADMA,aAAauvC,QAAQvvC,EAAIw5C,YAAMx5C,IAChCA,EAEE,IAAI05C,KADX15C,EAAIA,EAAEg6C,OACW35C,EAAGL,EAAE85C,EAAG95C,EAAEoK,EAAGpK,EAAEi6C,SAFjB,IAAIP,IAKd,SAASM,UAAI35C,EAAGy5C,EAAG1vC,EAAG6vC,SAC3B,OAA4B,IAArB7tC,UAAU1D,OAAeqxC,WAAW15C,GAAK,IAAIq5C,IAAIr5C,EAAGy5C,EAAG1vC,EAAc,MAAX6vC,QAAkB,EAAIA,SAGlF,SAASP,IAAIr5C,EAAGy5C,EAAG1vC,EAAG6vC,SAC3BjzC,KAAK3G,GAAKA,EACV2G,KAAK8yC,GAAKA,EACV9yC,KAAKoD,GAAKA,EACVpD,KAAKizC,SAAWA,QAkClB,SAASC,KAAI15C,OAEX,QADAA,MAAQqK,KAAK6P,IAAI,EAAG7P,KAAK2P,IAAI,IAAK3P,KAAK2G,MAAMhR,QAAU,KACvC,GAAK,IAAM,IAAMA,MAAM8I,SAAS,IAGlD,SAASuwC,KAAKnqC,EAAGlO,EAAGhC,EAAGmC,GAIrB,OAHIA,GAAK,EAAG+N,EAAIlO,EAAIhC,EAAIkrC,IACflrC,GAAK,GAAKA,GAAK,EAAGkQ,EAAIlO,EAAIkpC,IAC1BlpC,GAAK,IAAGkO,EAAIg7B,KACd,IAAIyP,IAAIzqC,EAAGlO,EAAGhC,EAAGmC,GA6BnB,SAASy4C,IAAI1qC,EAAGlO,EAAGhC,EAAGy6C,SAC3B,OAA4B,IAArB7tC,UAAU1D,OA3BZ,SAAS2xC,WAAWr6C,GACzB,GAAIA,aAAam6C,IAAK,OAAO,IAAIA,IAAIn6C,EAAE0P,EAAG1P,EAAEwB,EAAGxB,EAAER,EAAGQ,EAAEi6C,SAEtD,GADMj6C,aAAauvC,QAAQvvC,EAAIw5C,YAAMx5C,KAChCA,EAAG,OAAO,IAAIm6C,IACnB,GAAIn6C,aAAam6C,IAAK,OAAOn6C,EAE7B,IAAIK,GADJL,EAAIA,EAAEg6C,OACI35C,EAAI,IACVy5C,EAAI95C,EAAE85C,EAAI,IACV1vC,EAAIpK,EAAEoK,EAAI,IACVoQ,IAAM3P,KAAK2P,IAAIna,EAAGy5C,EAAG1vC,GACrBsQ,IAAM7P,KAAK6P,IAAIra,EAAGy5C,EAAG1vC,GACrBsF,EAAIg7B,IACJlpC,EAAIkZ,IAAMF,IACVhb,GAAKkb,IAAMF,KAAO,EAUtB,OATIhZ,GACakO,EAAXrP,IAAMqa,KAAUo/B,EAAI1vC,GAAK5I,EAAc,GAATs4C,EAAI1vC,GAC7B0vC,IAAMp/B,KAAUtQ,EAAI/J,GAAKmB,EAAI,GAC5BnB,EAAIy5C,GAAKt4C,EAAI,EACvBA,GAAKhC,EAAI,GAAMkb,IAAMF,IAAM,EAAIE,IAAMF,IACrC9K,GAAK,IAELlO,EAAIhC,EAAI,GAAKA,EAAI,EAAI,EAAIkQ,EAEpB,IAAIyqC,IAAIzqC,EAAGlO,EAAGhC,EAAGQ,EAAEi6C,SAIMI,CAAW3qC,GAAK,IAAIyqC,IAAIzqC,EAAGlO,EAAGhC,EAAc,MAAXy6C,QAAkB,EAAIA,SAGzF,SAASE,IAAIzqC,EAAGlO,EAAGhC,EAAGy6C,SACpBjzC,KAAK0I,GAAKA,EACV1I,KAAKxF,GAAKA,EACVwF,KAAKxH,GAAKA,EACVwH,KAAKizC,SAAWA,QAiClB,SAASK,QAAQ5qC,EAAG6qC,GAAIC,IACtB,OAGY,KAHJ9qC,EAAI,GAAK6qC,IAAMC,GAAKD,IAAM7qC,EAAI,GAChCA,EAAI,IAAM8qC,GACV9qC,EAAI,IAAM6qC,IAAMC,GAAKD,KAAO,IAAM7qC,GAAK,GACvC6qC,IAzKRt7C,OAAOswC,MAAOiK,aACZiB,YAAa,SAAAA,cACX,OAAOzzC,KAAKgzC,MAAMS,eAEpBP,IAAK,SAAAA,MACH,OAAOlzC,KAAKgzC,MAAME,OAEpB5wC,SAAU,SAAAA,WACR,OAAOtC,KAAKgzC,MAAQ,MA+CxB/6C,OAAOy6C,IAAKM,UAAK3K,OAAOE,OACtBmL,SAAU,SAAAA,SAAShN,GAEjB,OADAA,EAAS,MAALA,EA9Nc,EADF,GA+NW7iC,KAAKoQ,IA9Nd,EADF,GA+N8ByyB,GACvC,IAAIgM,IAAI1yC,KAAK3G,EAAIqtC,EAAG1mC,KAAK8yC,EAAIpM,EAAG1mC,KAAKoD,EAAIsjC,EAAG1mC,KAAKizC,UAE1DU,OAAQ,SAAAA,OAASjN,GAEf,OADAA,EAAS,MAALA,EAnOY,GAmOS7iC,KAAKoQ,IAnOd,GAmO0ByyB,GACnC,IAAIgM,IAAI1yC,KAAK3G,EAAIqtC,EAAG1mC,KAAK8yC,EAAIpM,EAAG1mC,KAAKoD,EAAIsjC,EAAG1mC,KAAKizC,UAE1DD,IAAK,SAAAA,MACH,OAAOhzC,MAETyzC,YAAa,SAAAA,cACX,OAAQ,GAAKzzC,KAAK3G,GAAK2G,KAAK3G,GAAK,KACzB,GAAK2G,KAAK8yC,GAAK9yC,KAAK8yC,GAAK,KACzB,GAAK9yC,KAAKoD,GAAKpD,KAAKoD,GAAK,KACzB,GAAKpD,KAAKizC,SAAWjzC,KAAKizC,SAAW,GAE/CC,IAAK,SAAAA,MACH,MAAO,IAAMA,KAAIlzC,KAAK3G,GAAK65C,KAAIlzC,KAAK8yC,GAAKI,KAAIlzC,KAAKoD,IAEpDd,SAAU,SAAAA,WACR,IAAI3H,EAAIqF,KAAKizC,QACb,OAAc,KADQt4C,EAAI2Y,MAAM3Y,GAAK,EAAIkJ,KAAK6P,IAAI,EAAG7P,KAAK2P,IAAI,EAAG7Y,KAC/C,OAAS,SACrBkJ,KAAK6P,IAAI,EAAG7P,KAAK2P,IAAI,IAAK3P,KAAK2G,MAAMxK,KAAK3G,IAAM,IAAM,KACtDwK,KAAK6P,IAAI,EAAG7P,KAAK2P,IAAI,IAAK3P,KAAK2G,MAAMxK,KAAK8yC,IAAM,IAAM,KACtDjvC,KAAK6P,IAAI,EAAG7P,KAAK2P,IAAI,IAAK3P,KAAK2G,MAAMxK,KAAKoD,IAAM,KACzC,IAANzI,EAAU,IAAM,KAAOA,EAAI,SAqDtC1C,OAAOk7C,IAAKC,IAAK/K,OAAOE,OACtBmL,SAAU,SAAAA,SAAShN,GAEjB,OADAA,EAAS,MAALA,EA9Sc,EADF,GA+SW7iC,KAAKoQ,IA9Sd,EADF,GA+S8ByyB,GACvC,IAAIyM,IAAInzC,KAAK0I,EAAG1I,KAAKxF,EAAGwF,KAAKxH,EAAIkuC,EAAG1mC,KAAKizC,UAElDU,OAAQ,SAAAA,OAASjN,GAEf,OADAA,EAAS,MAALA,EAnTY,GAmTS7iC,KAAKoQ,IAnTd,GAmT0ByyB,GACnC,IAAIyM,IAAInzC,KAAK0I,EAAG1I,KAAKxF,EAAGwF,KAAKxH,EAAIkuC,EAAG1mC,KAAKizC,UAElDD,IAAK,SAAAA,MACH,IAAItqC,EAAI1I,KAAK0I,EAAI,IAAqB,KAAd1I,KAAK0I,EAAI,GAC7BlO,EAAI8Y,MAAM5K,IAAM4K,MAAMtT,KAAKxF,GAAK,EAAIwF,KAAKxF,EACzChC,EAAIwH,KAAKxH,EACTg7C,GAAKh7C,GAAKA,EAAI,GAAMA,EAAI,EAAIA,GAAKgC,EACjC+4C,GAAK,EAAI/6C,EAAIg7C,GACjB,OAAO,IAAId,IACTY,QAAQ5qC,GAAK,IAAMA,EAAI,IAAMA,EAAI,IAAK6qC,GAAIC,IAC1CF,QAAQ5qC,EAAG6qC,GAAIC,IACfF,QAAQ5qC,EAAI,IAAMA,EAAI,IAAMA,EAAI,IAAK6qC,GAAIC,IACzCxzC,KAAKizC,UAGTQ,YAAa,SAAAA,cACX,OAAQ,GAAKzzC,KAAKxF,GAAKwF,KAAKxF,GAAK,GAAK8Y,MAAMtT,KAAKxF,KACzC,GAAKwF,KAAKxH,GAAKwH,KAAKxH,GAAK,GACzB,GAAKwH,KAAKizC,SAAWjzC,KAAKizC,SAAW,MC1U1C,IAAIW,QAAU/vC,KAAKgwC,GAAK,IACpBC,QAAU,IAAMjwC,KAAKgwC,GCK5BE,GAAK,OACLC,GAAK,EACLC,GAAK,OACLC,OAAK,EAAI,GACTC,OAAK,EAAI,GACTC,GAAK,EAAID,OAAKA,OACdE,GAAKF,OAAKA,OAAKA,OAEnB,SAASG,WAAWt7C,GAClB,GAAIA,aAAau7C,IAAK,OAAO,IAAIA,IAAIv7C,EAAER,EAAGQ,EAAE2B,EAAG3B,EAAEoK,EAAGpK,EAAEi6C,SACtD,GAAIj6C,aAAaw7C,IAAK,CACpB,GAAIlhC,MAAMta,EAAE0P,GAAI,OAAO,IAAI6rC,IAAIv7C,EAAER,EAAG,EAAG,EAAGQ,EAAEi6C,SAC5C,IAAIvqC,EAAI1P,EAAE0P,EAAIkrC,QACd,OAAO,IAAIW,IAAIv7C,EAAER,EAAGqL,KAAK4wC,IAAI/rC,GAAK1P,EAAEJ,EAAGiL,KAAK6wC,IAAIhsC,GAAK1P,EAAEJ,EAAGI,EAAEi6C,SAExDj6C,aAAa05C,MAAM15C,EAAI+5C,WAAW/5C,IACxC,IAGuEmjC,EAAGwY,EAHtEt7C,EAAIu7C,SAAS57C,EAAEK,GACfy5C,EAAI8B,SAAS57C,EAAE85C,GACf1vC,EAAIwxC,SAAS57C,EAAEoK,GACfI,EAAIqxC,SAAS,SAAYx7C,EAAI,SAAYy5C,EAAI,SAAY1vC,GAAK4wC,IAKlE,OAJI36C,IAAMy5C,GAAKA,IAAM1vC,EAAG+4B,EAAIwY,EAAInxC,GAC9B24B,EAAI0Y,SAAS,SAAYx7C,EAAI,SAAYy5C,EAAI,SAAY1vC,GAAK2wC,IAC9DY,EAAIE,SAAS,SAAYx7C,EAAI,SAAYy5C,EAAI,SAAY1vC,GAAK6wC,KAEzD,IAAIM,IAAI,IAAM/wC,EAAI,GAAI,KAAO24B,EAAI34B,GAAI,KAAOA,EAAImxC,GAAI37C,EAAEi6C,SAOhD,SAAS6B,IAAIt8C,EAAGmC,EAAGyI,EAAG6vC,SACnC,OAA4B,IAArB7tC,UAAU1D,OAAe4yC,WAAW97C,GAAK,IAAI+7C,IAAI/7C,EAAGmC,EAAGyI,EAAc,MAAX6vC,QAAkB,EAAIA,SAGlF,SAASsB,IAAI/7C,EAAGmC,EAAGyI,EAAG6vC,SAC3BjzC,KAAKxH,GAAKA,EACVwH,KAAKrF,GAAKA,EACVqF,KAAKoD,GAAKA,EACVpD,KAAKizC,SAAWA,QA0BlB,SAAS4B,QAAQp7C,GACf,OAAOA,EAAI46C,GAAKxwC,KAAKoQ,IAAIxa,EAAG,EAAI,GAAKA,EAAI26C,GAAKF,OAGhD,SAASa,QAAQt7C,GACf,OAAOA,EAAI06C,OAAK16C,EAAIA,EAAIA,EAAI26C,IAAM36C,EAAIy6C,QAGxC,SAASc,SAAS7Y,GAChB,OAAO,KAAOA,GAAK,SAAY,MAAQA,EAAI,MAAQt4B,KAAKoQ,IAAIkoB,EAAG,EAAI,KAAO,MAG5E,SAASyY,SAASzY,GAChB,OAAQA,GAAK,MAAQ,OAAUA,EAAI,MAAQt4B,KAAKoQ,KAAKkoB,EAAI,MAAS,MAAO,KAG3E,SAAS8Y,WAAWj8C,GAClB,GAAIA,aAAaw7C,IAAK,OAAO,IAAIA,IAAIx7C,EAAE0P,EAAG1P,EAAEJ,EAAGI,EAAER,EAAGQ,EAAEi6C,SAEtD,GADMj6C,aAAau7C,MAAMv7C,EAAIs7C,WAAWt7C,IAC5B,IAARA,EAAE2B,GAAmB,IAAR3B,EAAEoK,EAAS,OAAO,IAAIoxC,IAAI9Q,IAAK,EAAG1qC,EAAER,EAAGQ,EAAEi6C,SAC1D,IAAIvqC,EAAI7E,KAAKqxC,MAAMl8C,EAAEoK,EAAGpK,EAAE2B,GAAKm5C,QAC/B,OAAO,IAAIU,IAAI9rC,EAAI,EAAIA,EAAI,IAAMA,EAAG7E,KAAKkQ,KAAK/a,EAAE2B,EAAI3B,EAAE2B,EAAI3B,EAAEoK,EAAIpK,EAAEoK,GAAIpK,EAAER,EAAGQ,EAAEi6C,SAOxE,SAASkC,IAAIzsC,EAAG9P,EAAGJ,EAAGy6C,SAC3B,OAA4B,IAArB7tC,UAAU1D,OAAeuzC,WAAWvsC,GAAK,IAAI8rC,IAAI9rC,EAAG9P,EAAGJ,EAAc,MAAXy6C,QAAkB,EAAIA,SAGlF,SAASuB,IAAI9rC,EAAG9P,EAAGJ,EAAGy6C,SAC3BjzC,KAAK0I,GAAKA,EACV1I,KAAKpH,GAAKA,EACVoH,KAAKxH,GAAKA,EACVwH,KAAKizC,SAAWA,QA3DlBh7C,OAAOs8C,IAAKO,IAAKzM,OAAOE,OACtBmL,SAAU,SAAAA,SAAShN,GACjB,OAAO,IAAI6N,IAAIv0C,KAAKxH,EA7ChB,IA6C8B,MAALkuC,EAAY,EAAIA,GAAI1mC,KAAKrF,EAAGqF,KAAKoD,EAAGpD,KAAKizC,UAExEU,OAAQ,SAAAA,OAASjN,GACf,OAAO,IAAI6N,IAAIv0C,KAAKxH,EAhDhB,IAgD8B,MAALkuC,EAAY,EAAIA,GAAI1mC,KAAKrF,EAAGqF,KAAKoD,EAAGpD,KAAKizC,UAExED,IAAK,SAAAA,MACH,IAAIxvC,GAAKxD,KAAKxH,EAAI,IAAM,IACpB2jC,EAAI7oB,MAAMtT,KAAKrF,GAAK6I,EAAIA,EAAIxD,KAAKrF,EAAI,IACrCg6C,EAAIrhC,MAAMtT,KAAKoD,GAAKI,EAAIA,EAAIxD,KAAKoD,EAAI,IAIzC,OAAO,IAAIsvC,IACTsC,SAAU,WAJZ7Y,EAAI4X,GAAKgB,QAAQ5Y,IAIW,WAH5B34B,EAAIwwC,GAAKe,QAAQvxC,IAG2B,UAF5CmxC,EAAIV,GAAKc,QAAQJ,KAGfK,UAAU,SAAY7Y,EAAI,UAAY34B,EAAI,QAAYmxC,GACtDK,SAAU,SAAY7Y,EAAI,SAAY34B,EAAI,UAAYmxC,GACtD30C,KAAKizC,aA4CXh7C,OAAOu8C,IAAKW,IAAK9M,OAAOE,OACtBmL,SAAU,SAAAA,SAAShN,GACjB,OAAO,IAAI8N,IAAIx0C,KAAK0I,EAAG1I,KAAKpH,EAAGoH,KAAKxH,EA3GhC,IA2G8C,MAALkuC,EAAY,EAAIA,GAAI1mC,KAAKizC,UAExEU,OAAQ,SAAAA,OAASjN,GACf,OAAO,IAAI8N,IAAIx0C,KAAK0I,EAAG1I,KAAKpH,EAAGoH,KAAKxH,EA9GhC,IA8G8C,MAALkuC,EAAY,EAAIA,GAAI1mC,KAAKizC,UAExED,IAAK,SAAAA,MACH,OAAOsB,WAAWt0C,MAAMgzC,UClH5B,IAAI9vC,GAAK,OACLK,EAAI,QACJ6xC,GAAK,OACLC,aAAK,OACLC,EAAI,QACJC,GAAKD,EAAID,YACTG,GAAKF,EAAI/xC,EACTkyC,MAAQlyC,EAAI6xC,EAAIC,YAAInyC,EAgBT,SAASwyC,oBAAUhtC,EAAGlO,EAAGhC,EAAGy6C,SACzC,OAA4B,IAArB7tC,UAAU1D,OAfnB,SAASi0C,iBAAiB38C,GACxB,GAAIA,aAAa48C,UAAW,OAAO,IAAIA,UAAU58C,EAAE0P,EAAG1P,EAAEwB,EAAGxB,EAAER,EAAGQ,EAAEi6C,SAC5Dj6C,aAAa05C,MAAM15C,EAAI+5C,WAAW/5C,IACxC,IAAIK,EAAIL,EAAEK,EAAI,IACVy5C,EAAI95C,EAAE85C,EAAI,IACV1vC,EAAIpK,EAAEoK,EAAI,IACV5K,GAAKi9C,MAAQryC,EAAImyC,GAAKl8C,EAAIm8C,GAAK1C,IAAM2C,MAAQF,GAAKC,IAClDK,GAAKzyC,EAAI5K,EACTkuC,GAAK4O,GAAKxC,EAAIt6C,GAAK48C,EAAIS,IAAMR,YAC7B76C,EAAIqJ,KAAKkQ,KAAK2yB,EAAIA,EAAImP,GAAKA,KAAOP,EAAI98C,GAAK,EAAIA,IAC/CkQ,EAAIlO,EAAIqJ,KAAKqxC,MAAMxO,EAAGmP,IAAM/B,QAAU,IAAMpQ,IAChD,OAAO,IAAIkS,UAAUltC,EAAI,EAAIA,EAAI,IAAMA,EAAGlO,EAAGhC,EAAGQ,EAAEi6C,SAIlB0C,CAAiBjtC,GAAK,IAAIktC,UAAUltC,EAAGlO,EAAGhC,EAAc,MAAXy6C,QAAkB,EAAIA,SAG9F,SAAS2C,UAAUltC,EAAGlO,EAAGhC,EAAGy6C,SACjCjzC,KAAK0I,GAAKA,EACV1I,KAAKxF,GAAKA,EACVwF,KAAKxH,GAAKA,EACVwH,KAAKizC,SAAWA,QCnCX,SAAS6C,MAAM3B,GAAI4B,GAAIC,GAAIC,GAAIC,IACpC,IAAI9B,GAAKD,GAAKA,GAAIE,GAAKD,GAAKD,GAC5B,QAAS,EAAI,EAAIA,GAAK,EAAIC,GAAKC,IAAM0B,IAC9B,EAAI,EAAI3B,GAAK,EAAIC,IAAM2B,IACvB,EAAI,EAAI7B,GAAK,EAAIC,GAAK,EAAIC,IAAM4B,GACjC5B,GAAK6B,IAAM,EDiCnBj+C,OAAO29C,UAAWF,oBAAWrN,OAAOE,OAClCmL,SAAU,SAAAA,SAAShN,GAEjB,OADAA,EAAS,MAALA,EHnCc,EADF,GGoCW7iC,KAAKoQ,IHnCd,EADF,GGoC8ByyB,GACvC,IAAIkP,UAAU51C,KAAK0I,EAAG1I,KAAKxF,EAAGwF,KAAKxH,EAAIkuC,EAAG1mC,KAAKizC,UAExDU,OAAQ,SAAAA,OAASjN,GAEf,OADAA,EAAS,MAALA,EHxCY,GGwCS7iC,KAAKoQ,IHxCd,GGwC0ByyB,GACnC,IAAIkP,UAAU51C,KAAK0I,EAAG1I,KAAKxF,EAAGwF,KAAKxH,EAAIkuC,EAAG1mC,KAAKizC,UAExDD,IAAK,SAAAA,MACH,IAAItqC,EAAI4K,MAAMtT,KAAK0I,GAAK,GAAK1I,KAAK0I,EAAI,KAAOkrC,QACzCp7C,GAAKwH,KAAKxH,EACVmC,EAAI2Y,MAAMtT,KAAKxF,GAAK,EAAIwF,KAAKxF,EAAIhC,GAAK,EAAIA,GAC1C29C,KAAOtyC,KAAK4wC,IAAI/rC,GAChB0tC,KAAOvyC,KAAK6wC,IAAIhsC,GACpB,OAAO,IAAIgqC,IACT,KAAOl6C,EAAImC,GAAKuI,EAAIizC,KAAO5yC,EAAI6yC,OAC/B,KAAO59C,EAAImC,GAAKy6C,EAAIe,KAAOd,YAAIe,OAC/B,KAAO59C,EAAImC,GAAK26C,EAAIa,OACpBn2C,KAAKizC,aCjDI,ICRAoD,aAAA,SAASla,GACtB,OAAO,WACL,OAAOA,ICAX,SAASma,OAAO37C,EAAG9B,GACjB,OAAO,SAASY,GACd,OAAOkB,EAAIlB,EAAIZ,GAUZ,SAAS09C,UAAI57C,EAAGyI,GACrB,IAAIvK,EAAIuK,EAAIzI,EACZ,OAAO9B,EAAIy9C,OAAO37C,EAAG9B,EAAI,KAAOA,GAAK,IAAMA,EAAI,IAAMgL,KAAK2G,MAAM3R,EAAI,KAAOA,GAAK29C,aAASljC,MAAM3Y,GAAKyI,EAAIzI,GAGnG,SAAS87C,MAAMjzC,GACpB,OAAoB,IAAZA,GAAKA,GAAWkzC,QAAU,SAAS/7C,EAAGyI,GAC5C,OAAOA,EAAIzI,EAbf,SAASg8C,YAAYh8C,EAAGyI,EAAGI,GACzB,OAAO7I,EAAIkJ,KAAKoQ,IAAItZ,EAAG6I,GAAIJ,EAAIS,KAAKoQ,IAAI7Q,EAAGI,GAAK7I,EAAG6I,EAAI,EAAIA,EAAG,SAAS/J,GACrE,OAAOoK,KAAKoQ,IAAItZ,EAAIlB,EAAI2J,EAAGI,IAWZmzC,CAAYh8C,EAAGyI,EAAGI,GAAKgzC,aAASljC,MAAM3Y,GAAKyI,EAAIzI,IAInD,SAAS+7C,QAAQ/7C,EAAGyI,GACjC,IAAIvK,EAAIuK,EAAIzI,EACZ,OAAO9B,EAAIy9C,OAAO37C,EAAG9B,GAAK29C,aAASljC,MAAM3Y,GAAKyI,EAAIzI,GCtBrC,IAAAi8C,QAAA,SAAUC,SAASrzC,GAChC,IAAIgvC,MAAQiE,MAAMjzC,GAElB,SAASwvC,IAAI/0C,MAAOwO,KAClB,IAAIpT,EAAIm5C,OAAOv0C,MAAQ64C,UAAS74C,QAAQ5E,GAAIoT,IAAMqqC,UAASrqC,MAAMpT,GAC7Dy5C,EAAIN,MAAMv0C,MAAM60C,EAAGrmC,IAAIqmC,GACvB1vC,EAAIovC,MAAMv0C,MAAMmF,EAAGqJ,IAAIrJ,GACvB6vC,QAAUyD,QAAQz4C,MAAMg1C,QAASxmC,IAAIwmC,SACzC,OAAO,SAASx5C,GAKd,OAJAwE,MAAM5E,EAAIA,EAAEI,GACZwE,MAAM60C,EAAIA,EAAEr5C,GACZwE,MAAMmF,EAAIA,EAAE3J,GACZwE,MAAMg1C,QAAUA,QAAQx5C,GACjBwE,MAAQ,IAMnB,OAFA+0C,IAAIyD,MAAQI,SAEL7D,IAnBM,CAoBZ,GAEH,SAAS+D,UAAUC,QACjB,OAAO,SAASC,QACd,IAII1+C,EAAGi6C,MAJHx4C,EAAIi9C,OAAOv1C,OACXrI,EAAI,IAAIwP,MAAM7O,GACd84C,EAAI,IAAIjqC,MAAM7O,GACdoJ,EAAI,IAAIyF,MAAM7O,GAElB,IAAKzB,EAAI,EAAGA,EAAIyB,IAAKzB,EACnBi6C,MAAQsE,UAASG,OAAO1+C,IACxBc,EAAEd,GAAKi6C,MAAMn5C,GAAK,EAClBy5C,EAAEv6C,GAAKi6C,MAAMM,GAAK,EAClB1vC,EAAE7K,GAAKi6C,MAAMpvC,GAAK,EAMpB,OAJA/J,EAAI29C,OAAO39C,GACXy5C,EAAIkE,OAAOlE,GACX1vC,EAAI4zC,OAAO5zC,GACXovC,MAAMS,QAAU,EACT,SAASx5C,GAId,OAHA+4C,MAAMn5C,EAAIA,EAAEI,GACZ+4C,MAAMM,EAAIA,EAAEr5C,GACZ+4C,MAAMpvC,EAAIA,EAAE3J,GACL+4C,MAAQ,KAKd,IAAI0E,SAAWH,UH7CP,SAASx5B,QACtB,IAAIvjB,EAAIujB,OAAO7b,OAAS,EACxB,OAAO,SAASjI,GACd,IAAIlB,EAAIkB,GAAK,EAAKA,EAAI,EAAKA,GAAK,GAAKA,EAAI,EAAGO,EAAI,GAAK6J,KAAK8M,MAAMlX,EAAIO,GAChEg8C,GAAKz4B,OAAOhlB,GACZ09C,GAAK14B,OAAOhlB,EAAI,GAChBw9C,GAAKx9C,EAAI,EAAIglB,OAAOhlB,EAAI,GAAK,EAAIy9C,GAAKC,GACtCC,GAAK39C,EAAIyB,EAAI,EAAIujB,OAAOhlB,EAAI,GAAK,EAAI09C,GAAKD,GAC9C,OAAOF,OAAOr8C,EAAIlB,EAAIyB,GAAKA,EAAG+7C,GAAIC,GAAIC,GAAIC,OIhB/BiB,YDsDaJ,UEpDb,SAASx5B,QACtB,IAAIvjB,EAAIujB,OAAO7b,OACf,OAAO,SAASjI,GACd,IAAIlB,EAAIsL,KAAK8M,QAAQlX,GAAK,GAAK,IAAMA,EAAIA,GAAKO,GAC1C+7C,GAAKx4B,QAAQhlB,EAAIyB,EAAI,GAAKA,GAC1Bg8C,GAAKz4B,OAAOhlB,EAAIyB,GAChBi8C,GAAK14B,QAAQhlB,EAAI,GAAKyB,GACtBk8C,GAAK34B,QAAQhlB,EAAI,GAAKyB,GAC1B,OAAO87C,OAAOr8C,EAAIlB,EAAIyB,GAAKA,EAAG+7C,GAAIC,GAAIC,GAAIC,ODV/B,SAASv7C,EAAGyI,GACzB,OAAeA,GAARzI,GAAKA,EAAW,SAASlB,GAC9B,OAAOkB,EAAIyI,EAAI3J,wREAJ,ICAX29C,IAAM,8CACNC,IAAM,IAAIl3C,OAAOi3C,IAAI3zB,OAAQ,KAclB,IAAA6zB,WAAA,SAAS38C,EAAGyI,GACzB,IACIm0C,GACAC,GACAC,GAHAC,GAAKN,IAAIO,UAAYN,IAAIM,UAAY,EAIrCp/C,GAAK,EACLiC,KACAo9C,KAMJ,IAHAj9C,GAAQ,GAAIyI,GAAQ,IAGZm0C,GAAKH,IAAI3E,KAAK93C,MACd68C,GAAKH,IAAI5E,KAAKrvC,MACfq0C,GAAKD,GAAGv1C,OAASy1C,KACpBD,GAAKr0C,EAAE0X,MAAM48B,GAAID,IACbj9C,EAAEjC,GAAIiC,EAAEjC,IAAMk/C,GACbj9C,IAAIjC,GAAKk/C,KAEXF,GAAKA,GAAG,OAASC,GAAKA,GAAG,IACxBh9C,EAAEjC,GAAIiC,EAAEjC,IAAMi/C,GACbh9C,IAAIjC,GAAKi/C,IAEdh9C,IAAIjC,GAAK,KACTq/C,EAAE1xC,MAAM3N,EAAGA,EAAG4jC,EAAG+H,WAAOqT,GAAIC,OAE9BE,GAAKL,IAAIM,UAYX,OARID,GAAKt0C,EAAE1B,SACT+1C,GAAKr0C,EAAE0X,MAAM48B,IACTl9C,EAAEjC,GAAIiC,EAAEjC,IAAMk/C,GACbj9C,IAAIjC,GAAKk/C,IAKTj9C,EAAEkH,OAAS,EAAKk2C,EAAE,GA7C3B,SAASC,IAAIz0C,GACX,OAAO,SAAS3J,GACd,OAAO2J,EAAE3J,GAAK,IA4CVo+C,CAAID,EAAE,GAAGzb,GApDjB,SAAS2b,YAAK10C,GACZ,OAAO,WACL,OAAOA,GAmDH00C,CAAK10C,IACJA,EAAIw0C,EAAEl2C,OAAQ,SAASjI,GACtB,IAAK,IAAWT,EAAPT,EAAI,EAAMA,EAAI6K,IAAK7K,EAAGiC,GAAGxB,EAAI4+C,EAAEr/C,IAAIA,GAAKS,EAAEmjC,EAAE1iC,GACrD,OAAOe,EAAEuI,KAAK,oSCpDT,ICPXg1C,QACAC,QACAC,QACAC,QDIWC,UAAA,SAASx9C,EAAGyI,GACzB,IAAkBxK,EAAda,EAAI2+C,aAAOh1C,GACf,OAAY,MAALA,GAAmB,YAAN3J,EAAkB+8C,aAASpzC,IAClC,WAAN3J,EAAiByqC,WACZ,WAANzqC,GAAmBb,EAAI45C,YAAMpvC,KAAOA,EAAIxK,EAAGo6C,SAAOqF,WAClDj1C,aAAaovC,YAAQQ,QACrB5vC,aAAaxD,KEfN,SAASjF,EAAGyI,GACzB,IAAIvK,EAAI,IAAI+G,KACZ,OAAewD,GAARzI,GAAKA,EAAW,SAASlB,GAC9B,OAAOZ,EAAEy/C,QAAQ39C,EAAIyI,EAAI3J,GAAIZ,IFazBgQ,MAAMwB,QAAQjH,GGdP,SAASzI,EAAGyI,GACzB,IAII7K,EAJAggD,GAAKn1C,EAAIA,EAAE1B,OAAS,EACpB82C,GAAK79C,EAAIkJ,KAAK2P,IAAI+kC,GAAI59C,EAAE+G,QAAU,EAClCy6B,EAAI,IAAItzB,MAAM2vC,IACd5/C,EAAI,IAAIiQ,MAAM0vC,IAGlB,IAAKhgD,EAAI,EAAGA,EAAIigD,KAAMjgD,EAAG4jC,EAAE5jC,GAAKiB,UAAMmB,EAAEpC,GAAI6K,EAAE7K,IAC9C,KAAOA,EAAIggD,KAAMhgD,EAAGK,EAAEL,GAAK6K,EAAE7K,GAE7B,OAAO,SAASkB,GACd,IAAKlB,EAAI,EAAGA,EAAIigD,KAAMjgD,EAAGK,EAAEL,GAAK4jC,EAAE5jC,GAAGkB,GACrC,OAAOb,IHGkB,mBAAdwK,EAAEwa,SAAgD,mBAAfxa,EAAEd,UAA2BgR,MAAMlQ,GFftE,SAASzI,EAAGyI,GACzB,IAEIsjC,EAFAnuC,KACAK,KAMJ,IAAK8tC,KAHK,OAAN/rC,GAA2B,WAAbD,QAAOC,KAAgBA,MAC/B,OAANyI,GAA2B,WAAb1I,QAAO0I,KAAgBA,MAE/BA,EACJsjC,KAAK/rC,EACPpC,EAAEmuC,GAAKltC,UAAMmB,EAAE+rC,GAAItjC,EAAEsjC,IAErB9tC,EAAE8tC,GAAKtjC,EAAEsjC,GAIb,OAAO,SAASjtC,GACd,IAAKitC,KAAKnuC,EAAGK,EAAE8tC,GAAKnuC,EAAEmuC,GAAGjtC,GACzB,OAAOb,IEFHsrC,YAAQvpC,EAAGyI,IIlBJq1C,UAAA,SAAS99C,EAAGyI,GACzB,OAAeA,GAARzI,GAAKA,EAAW,SAASlB,GAC9B,OAAOoK,KAAK2G,MAAM7P,EAAIyI,EAAI3J,KCF1Bi/C,QAAU,IAAM70C,KAAKgwC,GAEd/jB,oBACT6oB,WAAY,EACZC,WAAY,EACZC,OAAQ,EACRC,MAAO,EACPC,OAAQ,EACRC,OAAQ,GAGKC,UAAA,SAASt+C,EAAGyI,EAAGxK,EAAGC,EAAG4B,EAAG8f,GACrC,IAAIw+B,OAAQC,OAAQF,MAKpB,OAJIC,OAASl1C,KAAKkQ,KAAKpZ,EAAIA,EAAIyI,EAAIA,MAAIzI,GAAKo+C,OAAQ31C,GAAK21C,SACrDD,MAAQn+C,EAAI/B,EAAIwK,EAAIvK,KAAGD,GAAK+B,EAAIm+C,MAAOjgD,GAAKuK,EAAI01C,QAChDE,OAASn1C,KAAKkQ,KAAKnb,EAAIA,EAAIC,EAAIA,MAAID,GAAKogD,OAAQngD,GAAKmgD,OAAQF,OAASE,QACtEr+C,EAAI9B,EAAIuK,EAAIxK,IAAG+B,GAAKA,EAAGyI,GAAKA,EAAG01C,OAASA,MAAOC,QAAUA,SAE3DJ,WAAYl+C,EACZm+C,WAAYr+B,EACZs+B,OAAQh1C,KAAKqxC,MAAM9xC,EAAGzI,GAAK+9C,QAC3BI,MAAOj1C,KAAKq1C,KAAKJ,OAASJ,QAC1BK,OAAQA,OACRC,OAAQA,SCpBZ,SAASG,qBAAqB1yC,MAAO2yC,QAASC,QAASC,UAErD,SAASryB,IAAIzsB,GACX,OAAOA,EAAEkH,OAASlH,EAAEysB,MAAQ,IAAM,GAsCpC,OAAO,SAAStsB,EAAGyI,GACjB,IAAI5I,KACAo9C,KAOJ,OANAj9C,EAAI8L,MAAM9L,GAAIyI,EAAIqD,MAAMrD,GAtC1B,SAASm2C,UAAUC,GAAIC,GAAIC,GAAIC,GAAIn/C,EAAGo9C,GACpC,GAAI4B,KAAOE,IAAMD,KAAOE,GAAI,CAC1B,IAAIphD,EAAIiC,EAAE0L,KAAK,aAAc,KAAMkzC,QAAS,KAAMC,SAClDzB,EAAE1xC,MAAM3N,EAAGA,EAAI,EAAG4jC,EAAG+H,WAAOsV,GAAIE,MAAOnhD,EAAGA,EAAI,EAAG4jC,EAAG+H,WAAOuV,GAAIE,WACtDD,IAAMC,KACfn/C,EAAE0L,KAAK,aAAewzC,GAAKN,QAAUO,GAAKN,SAkC5CE,CAAU5+C,EAAEg+C,WAAYh+C,EAAEi+C,WAAYx1C,EAAEu1C,WAAYv1C,EAAEw1C,WAAYp+C,EAAGo9C,GA9BvE,SAASiB,OAAOl+C,EAAGyI,EAAG5I,EAAGo9C,GACnBj9C,IAAMyI,GACJzI,EAAIyI,EAAI,IAAKA,GAAK,IAAcA,EAAIzI,EAAI,MAAKA,GAAK,KACtDi9C,EAAE1xC,MAAM3N,EAAGiC,EAAE0L,KAAK+gB,IAAIzsB,GAAK,UAAW,KAAM8+C,UAAY,EAAGnd,EAAG+H,WAAOvpC,EAAGyI,MAC/DA,GACT5I,EAAE0L,KAAK+gB,IAAIzsB,GAAK,UAAY4I,EAAIk2C,UA0BlCT,CAAOl+C,EAAEk+C,OAAQz1C,EAAEy1C,OAAQr+C,EAAGo9C,GAtBhC,SAASkB,MAAMn+C,EAAGyI,EAAG5I,EAAGo9C,GAClBj9C,IAAMyI,EACRw0C,EAAE1xC,MAAM3N,EAAGiC,EAAE0L,KAAK+gB,IAAIzsB,GAAK,SAAU,KAAM8+C,UAAY,EAAGnd,EAAG+H,WAAOvpC,EAAGyI,KAC9DA,GACT5I,EAAE0L,KAAK+gB,IAAIzsB,GAAK,SAAW4I,EAAIk2C,UAmBjCR,CAAMn+C,EAAEm+C,MAAO11C,EAAE01C,MAAOt+C,EAAGo9C,GAf7B,SAAS7Q,MAAMyS,GAAIC,GAAIC,GAAIC,GAAIn/C,EAAGo9C,GAChC,GAAI4B,KAAOE,IAAMD,KAAOE,GAAI,CAC1B,IAAIphD,EAAIiC,EAAE0L,KAAK+gB,IAAIzsB,GAAK,SAAU,KAAM,IAAK,KAAM,KACnDo9C,EAAE1xC,MAAM3N,EAAGA,EAAI,EAAG4jC,EAAG+H,WAAOsV,GAAIE,MAAOnhD,EAAGA,EAAI,EAAG4jC,EAAG+H,WAAOuV,GAAIE,WAC/C,IAAPD,IAAmB,IAAPC,IACrBn/C,EAAE0L,KAAK+gB,IAAIzsB,GAAK,SAAWk/C,GAAK,IAAMC,GAAK,KAW7C5S,CAAMpsC,EAAEo+C,OAAQp+C,EAAEq+C,OAAQ51C,EAAE21C,OAAQ31C,EAAE41C,OAAQx+C,EAAGo9C,GACjDj9C,EAAIyI,EAAI,KACD,SAAS3J,GAEd,IADA,IAA0BT,EAAtBT,GAAK,EAAGyB,EAAI49C,EAAEl2C,SACTnJ,EAAIyB,GAAGQ,GAAGxB,EAAI4+C,EAAEr/C,IAAIA,GAAKS,EAAEmjC,EAAE1iC,GACtC,OAAOe,EAAEuI,KAAK,MAKb,IAAI62C,wBAA0BT,qBLtD9B,SAASU,SAASrgD,OACvB,MAAc,SAAVA,MAAyBs2B,oBACxBioB,UAASA,QAAUzhB,SAASmJ,cAAc,OAAQuY,QAAU1hB,SAASwjB,gBAAiB7B,QAAU3hB,SAASyjB,aAC9GhC,QAAQhgB,MAAMiiB,UAAYxgD,MAC1BA,MAAQy+C,QAAQgC,iBAAiBjC,QAAQlW,YAAYiW,SAAU,MAAMmC,iBAAiB,aACtFlC,QAAQ1yB,YAAYyyB,SACpBv+C,MAAQA,MAAMshB,MAAM,GAAI,GAAGxO,MAAM,KAC1B2sC,WAAWz/C,MAAM,IAAKA,MAAM,IAAKA,MAAM,IAAKA,MAAM,IAAKA,MAAM,IAAKA,MAAM,MK+Cb,OAAQ,MAAO,QACxE2gD,wBAA0BhB,qBL7C9B,SAASiB,SAAS5gD,OACvB,OAAa,MAATA,MAAsBs2B,oBACrBooB,UAASA,QAAU5hB,SAASuM,gBAAgB,6BAA8B,MAC/EqV,QAAQnW,aAAa,YAAavoC,QAC5BA,MAAQ0+C,QAAQ8B,UAAUK,QAAQC,gBACxC9gD,MAAQA,MAAM+gD,OACPtB,UAAUz/C,MAAMmB,EAAGnB,MAAM4J,EAAG5J,MAAMZ,EAAGY,MAAMX,EAAGW,MAAMiB,EAAGjB,MAAM+gB,IAFLuV,qBKyCG,KAAM,IAAK,KC9DrEjsB,KAAK22C,MCGf,SAASpH,QAAImD,KACX,OAAO,SAASt4C,MAAOwO,KACrB,IAAI/D,EAAI6tC,KAAKt4C,MAAQw8C,IAASx8C,QAAQyK,GAAI+D,IAAMguC,IAAShuC,MAAM/D,GAC3DlO,EAAIg4C,QAAMv0C,MAAMzD,EAAGiS,IAAIjS,GACvBhC,EAAIg6C,QAAMv0C,MAAMzF,EAAGiU,IAAIjU,GACvBy6C,QAAUT,QAAMv0C,MAAMg1C,QAASxmC,IAAIwmC,SACvC,OAAO,SAASx5C,GAKd,OAJAwE,MAAMyK,EAAIA,EAAEjP,GACZwE,MAAMzD,EAAIA,EAAEf,GACZwE,MAAMzF,EAAIA,EAAEiB,GACZwE,MAAMg1C,QAAUA,QAAQx5C,GACjBwE,MAAQ,KAKNm1C,QAAImD,WAAJnD,IACJsH,QAAUtH,QAAIZ,SCjBzB,SAAS2C,QAAIoB,KACX,OAAO,SAASt4C,MAAOwO,KACrB,IAAI/D,EAAI6tC,KAAKt4C,MAAQ08C,IAAS18C,QAAQyK,GAAI+D,IAAMkuC,IAASluC,MAAM/D,GAC3D9P,EAAI45C,QAAMv0C,MAAMrF,EAAG6T,IAAI7T,GACvBJ,EAAIg6C,QAAMv0C,MAAMzF,EAAGiU,IAAIjU,GACvBy6C,QAAUT,QAAMv0C,MAAMg1C,QAASxmC,IAAIwmC,SACvC,OAAO,SAASx5C,GAKd,OAJAwE,MAAMyK,EAAIA,EAAEjP,GACZwE,MAAMrF,EAAIA,EAAEa,GACZwE,MAAMzF,EAAIA,EAAEiB,GACZwE,MAAMg1C,QAAUA,QAAQx5C,GACjBwE,MAAQ,KAKNk3C,QAAIoB,WACEpB,QAAI3C,SCjBzB,SAASkD,wBAAUa,KACjB,OAAQ,SAASqE,eAAep3C,GAG9B,SAASkyC,UAAUz3C,MAAOwO,KACxB,IAAI/D,EAAI6tC,KAAKt4C,MAAQ48C,oBAAe58C,QAAQyK,GAAI+D,IAAMouC,oBAAepuC,MAAM/D,GACvElO,EAAIg4C,QAAMv0C,MAAMzD,EAAGiS,IAAIjS,GACvBhC,EAAIg6C,QAAMv0C,MAAMzF,EAAGiU,IAAIjU,GACvBy6C,QAAUT,QAAMv0C,MAAMg1C,QAASxmC,IAAIwmC,SACvC,OAAO,SAASx5C,GAKd,OAJAwE,MAAMyK,EAAIA,EAAEjP,GACZwE,MAAMzD,EAAIA,EAAEf,GACZwE,MAAMzF,EAAIA,EAAEqL,KAAKoQ,IAAIxa,EAAG+J,IACxBvF,MAAMg1C,QAAUA,QAAQx5C,GACjBwE,MAAQ,IAMnB,OAlBAuF,GAAKA,EAgBLkyC,UAAUe,MAAQmE,eAEXlF,UAnBD,CAoBL,GAGUA,wBAAUa,WAAVb,IACJoF,cAAgBpF,wBAAUlD,SC5BtB,SAASuI,oBAAUC,YAAaz9B,QAE7C,IADA,IAAIhlB,EAAI,EAAGyB,EAAIujB,OAAO7b,OAAS,EAAGkI,EAAI2T,OAAO,GAAI7C,EAAI,IAAI7R,MAAM7O,EAAI,EAAI,EAAIA,GACpEzB,EAAIyB,GAAG0gB,EAAEniB,GAAKyiD,YAAYpxC,EAAGA,EAAI2T,SAAShlB,IACjD,OAAO,SAASkB,GACd,IAAIlB,EAAIsL,KAAK6P,IAAI,EAAG7P,KAAK2P,IAAIxZ,EAAI,EAAG6J,KAAK8M,MAAMlX,GAAKO,KACpD,OAAO0gB,EAAEniB,GAAGkB,EAAIlB,ICLL,ICAA0iD,sBAAA,SAAS9e,GACtB,OAAO,WACL,OAAOA,ICFI+e,oBAAA,SAAS/e,GACtB,OAAQA,GCKN1kB,iBAAQ,EAAG,GAER,SAAS0jC,oBAAoBxgD,EAAGyI,GACrC,OAAQA,GAAMzI,GAAKA,GACb,SAASwhC,GAAK,OAAQA,EAAIxhC,GAAKyI,GAC/BozC,sBAASpzC,GAiBjB,SAASg4C,MAAM5kC,OAAQjV,MAAO85C,cAAeC,eAC3C,IAAIC,GAAK/kC,OAAO,GAAI0xB,GAAK1xB,OAAO,GAAImxB,GAAKpmC,MAAM,GAAIqmC,GAAKrmC,MAAM,GAG9D,OAFI2mC,GAAKqT,IAAIA,GAAKF,cAAcnT,GAAIqT,IAAK5T,GAAK2T,cAAc1T,GAAID,MAC3D4T,GAAKF,cAAcE,GAAIrT,IAAKP,GAAK2T,cAAc3T,GAAIC,KACjD,SAASzL,GAAK,OAAOwL,GAAG4T,GAAGpf,KAGpC,SAASqf,QAAQhlC,OAAQjV,MAAO85C,cAAeC,eAC7C,IAAIzgC,EAAIhX,KAAK2P,IAAIgD,OAAO9U,OAAQH,MAAMG,QAAU,EAC5C7I,EAAI,IAAIgQ,MAAMgS,GACdxhB,EAAI,IAAIwP,MAAMgS,GACdtiB,GAAK,EAQT,IALIie,OAAOqE,GAAKrE,OAAO,KACrBA,OAASA,OAAOsE,QAAQwI,UACxB/hB,MAAQA,MAAMuZ,QAAQwI,aAGf/qB,EAAIsiB,GACXhiB,EAAEN,GAAK8iD,cAAc7kC,OAAOje,GAAIie,OAAOje,EAAI,IAC3Cc,EAAEd,GAAK+iD,cAAc/5C,MAAMhJ,GAAIgJ,MAAMhJ,EAAI,IAG3C,OAAO,SAAS4jC,GACd,IAAI5jC,EAAIkjD,OAAOjlC,OAAQ2lB,EAAG,EAAGthB,GAAK,EAClC,OAAOxhB,EAAEd,GAAGM,EAAEN,GAAG4jC,KAId,SAAS6K,KAAKvjB,OAAQi4B,QAC3B,OAAOA,OACFllC,OAAOiN,OAAOjN,UACdjV,MAAMkiB,OAAOliB,SACby5C,YAAYv3B,OAAOu3B,eACnBW,MAAMl4B,OAAOk4B,SAKL,SAASC,WAAWP,cAAeC,eAChD,IAIIP,UACAc,OACAC,MANAtlC,OAASiB,gBACTlW,MAAQkW,gBACRujC,YAAce,UACdJ,OAAQ,EAKZ,SAASpU,UAGP,OAFAwT,UAAYl3C,KAAK2P,IAAIgD,OAAO9U,OAAQH,MAAMG,QAAU,EAAI85C,QAAUJ,MAClES,OAASC,MAAQ,KACV/U,MAGT,SAASA,MAAM5K,GACb,OAAQ0f,SAAWA,OAASd,UAAUvkC,OAAQjV,MAAOo6C,MAtEzD,SAASK,mBAAmBX,eAC1B,OAAO,SAAS1gD,EAAGyI,GACjB,IAAIvK,EAAIwiD,cAAc1gD,GAAKA,EAAGyI,GAAKA,GACnC,OAAO,SAAS+4B,GAAK,OAAOA,GAAKxhC,EAAI,EAAIwhC,GAAK/4B,EAAI,EAAIvK,EAAEsjC,KAmEK6f,CAAmBX,eAAiBA,cAAeL,gBAAgB7e,GA2BlI,OAxBA4K,MAAMgB,OAAS,SAASvkC,GACtB,OAAQs4C,QAAUA,MAAQf,UAAUx5C,MAAOiV,OAAQ2kC,oBAAqBQ,MAnE5E,SAASM,mBAAmBX,eAC1B,OAAO,SAAS3gD,EAAGyI,GACjB,IAAI/J,EAAIiiD,cAAc3gD,GAAKA,EAAGyI,GAAKA,GACnC,OAAO,SAAS3J,GAAK,OAAOA,GAAK,EAAIkB,EAAIlB,GAAK,EAAI2J,EAAI/J,EAAEI,KAgEwBwiD,CAAmBX,eAAiBA,kBAAkB93C,IAGxIujC,MAAMvwB,OAAS,SAAS2J,GACtB,OAAO/a,UAAU1D,QAAU8U,OAASvO,cAAIvP,KAAKynB,EAAG+jB,qBAASqD,WAAa/wB,OAAOsE,SAG/EisB,MAAMxlC,MAAQ,SAAS4e,GACrB,OAAO/a,UAAU1D,QAAUH,MAAQuZ,YAAMpiB,KAAKynB,GAAIonB,WAAahmC,MAAMuZ,SAGvEisB,MAAMU,WAAa,SAAStnB,GAC1B,OAAO5e,MAAQuZ,YAAMpiB,KAAKynB,GAAI66B,YAAckB,UAAkB3U,WAGhER,MAAM4U,MAAQ,SAASx7B,GACrB,OAAO/a,UAAU1D,QAAUi6C,QAAUx7B,EAAGonB,WAAaoU,OAGvD5U,MAAMiU,YAAc,SAAS76B,GAC3B,OAAO/a,UAAU1D,QAAUs5C,YAAc76B,EAAGonB,WAAayT,aAGpDzT,UC5GM,IAAA4U,cAAA,SAAShgB,EAAG5hC,GACzB,IAAKhC,GAAK4jC,EAAI5hC,EAAI4hC,EAAEigB,cAAc7hD,EAAI,GAAK4hC,EAAEigB,iBAAiBn2C,QAAQ,MAAQ,EAAG,OAAO,KACxF,IAAI1N,EAAG8jD,YAAclgB,EAAErhB,MAAM,EAAGviB,GAIhC,OACE8jD,YAAY36C,OAAS,EAAI26C,YAAY,GAAKA,YAAYvhC,MAAM,GAAKuhC,aAChElgB,EAAErhB,MAAMviB,EAAI,KCTF+jD,aAAA,SAASngB,GACtB,OAAOA,EAAIggB,cAAct4C,KAAKsnB,IAAIgR,KAASA,EAAE,GAAKuH,KCFhD6Y,GAAK,2EAEM,SAASC,gBAAgBC,WACtC,OAAO,IAAIC,gBAAgBD,WAK7B,SAASC,gBAAgBD,WACvB,KAAMp0C,MAAQk0C,GAAG9J,KAAKgK,YAAa,MAAM,IAAIxtC,MAAM,mBAAqBwtC,WACxE,IAAIp0C,MACJrI,KAAK28C,KAAOt0C,MAAM,IAAM,IACxBrI,KAAKsnC,MAAQj/B,MAAM,IAAM,IACzBrI,KAAK48C,KAAOv0C,MAAM,IAAM,IACxBrI,KAAK68C,OAASx0C,MAAM,IAAM,GAC1BrI,KAAK83C,OAASzvC,MAAM,GACpBrI,KAAK65B,MAAQxxB,MAAM,KAAOA,MAAM,GAChCrI,KAAK88C,QAAUz0C,MAAM,GACrBrI,KAAK+8C,UAAY10C,MAAM,KAAOA,MAAM,GAAGyS,MAAM,GAC7C9a,KAAKmY,OAAS9P,MAAM,GACpBrI,KAAK3E,KAAOgN,MAAM,KAAO,GAd3Bm0C,gBAAgBniD,UAAYqiD,gBAAgBriD,UAiB5CqiD,gBAAgBriD,UAAUiI,SAAW,WACnC,OAAOtC,KAAK28C,KACN38C,KAAKsnC,MACLtnC,KAAK48C,KACL58C,KAAK68C,QACJ78C,KAAK83C,KAAO,IAAM,KACJ,MAAd93C,KAAK65B,MAAgB,GAAKh2B,KAAK6P,IAAI,EAAgB,EAAb1T,KAAK65B,SAC3C75B,KAAK88C,MAAQ,IAAM,KACD,MAAlB98C,KAAK+8C,UAAoB,GAAK,IAAMl5C,KAAK6P,IAAI,EAAoB,EAAjB1T,KAAK+8C,aACrD/8C,KAAKmY,KAAO,IAAM,IACnBnY,KAAK3E,MCjCE,ICCJ2hD,eCAPC,qBACOl9C,qBACAm9C,2BFHIC,WAAA,SAAS3iD,GACtB4iD,IAAK,IAAK,IAAkCC,GAA9BrjD,EAAIQ,EAAEkH,OAAQnJ,EAAI,EAAG8sC,IAAM,EAAO9sC,EAAIyB,IAAKzB,EACvD,OAAQiC,EAAEjC,IACR,IAAK,IAAK8sC,GAAKgY,GAAK9kD,EAAG,MACvB,IAAK,IAAgB,IAAP8sC,KAAUA,GAAK9sC,GAAG8kD,GAAK9kD,EAAG,MACxC,QAAS,GAAI8sC,GAAK,EAAG,CAAE,KAAM7qC,EAAEjC,GAAI,MAAM6kD,IAAK/X,GAAK,GAGvD,OAAOA,GAAK,EAAI7qC,EAAEsgB,MAAM,EAAGuqB,IAAM7qC,EAAEsgB,MAAMuiC,GAAK,GAAK7iD,GGPtC8iD,cAAA,SAASnhB,EAAG5hC,GACzB,IAAI1B,EAAIsjD,cAAchgB,EAAG5hC,GACzB,IAAK1B,EAAG,OAAOsjC,EAAI,GACnB,IAAIkgB,YAAcxjD,EAAE,GAChB0kD,SAAW1kD,EAAE,GACjB,OAAO0kD,SAAW,EAAI,KAAO,IAAI10C,OAAO00C,UAAUx6C,KAAK,KAAOs5C,YACxDA,YAAY36C,OAAS67C,SAAW,EAAIlB,YAAYvhC,MAAM,EAAGyiC,SAAW,GAAK,IAAMlB,YAAYvhC,MAAMyiC,SAAW,GAC5GlB,YAAc,IAAIxzC,MAAM00C,SAAWlB,YAAY36C,OAAS,GAAGqB,KAAK,MCNzDy6C,aACbC,IAAK,SAAAt9B,EAASgc,EAAG5hC,GAAK,OAAY,IAAJ4hC,GAASuhB,QAAQnjD,IAC/C6I,EAAK,SAAAA,EAAS+4B,GAAK,OAAOt4B,KAAK2G,MAAM2xB,GAAG75B,SAAS,IACjD1J,EAAK,SAAAA,EAASujC,GAAK,OAAOA,EAAI,IAC9BtjC,EAAK,SAAAA,EAASsjC,GAAK,OAAOt4B,KAAK2G,MAAM2xB,GAAG75B,SAAS,KACjD7H,EAAK,SAAAA,EAAS0hC,EAAG5hC,GAAK,OAAO4hC,EAAEigB,cAAc7hD,IAC7CggB,EAAK,SAAAA,EAAS4hB,EAAG5hC,GAAK,OAAO4hC,EAAEuhB,QAAQnjD,IACvCu4C,EAAK,SAAAA,EAAS3W,EAAG5hC,GAAK,OAAO4hC,EAAEwhB,YAAYpjD,IAC3CvB,EAAK,SAAAA,EAASmjC,GAAK,OAAOt4B,KAAK2G,MAAM2xB,GAAG75B,SAAS,IACjD/H,EAAK,SAAAA,EAAS4hC,EAAG5hC,IAAK,OAAO+iD,cAAkB,IAAJnhB,EAAS5hC,KACpDlB,EAAKikD,cACL9iD,EHVa,SAAS2hC,EAAG5hC,GACzB,IAAI1B,EAAIsjD,cAAchgB,EAAG5hC,GACzB,IAAK1B,EAAG,OAAOsjC,EAAI,GACnB,IAAIkgB,YAAcxjD,EAAE,GAChB0kD,SAAW1kD,EAAE,GACbN,EAAIglD,UAAYP,eAAuE,EAAtDn5C,KAAK6P,KAAK,EAAG7P,KAAK2P,IAAI,EAAG3P,KAAK8M,MAAM4sC,SAAW,MAAY,EAC5FvjD,EAAIqiD,YAAY36C,OACpB,OAAOnJ,IAAMyB,EAAIqiD,YACX9jD,EAAIyB,EAAIqiD,YAAc,IAAIxzC,MAAMtQ,EAAIyB,EAAI,GAAG+I,KAAK,KAChDxK,EAAI,EAAI8jD,YAAYvhC,MAAM,EAAGviB,GAAK,IAAM8jD,YAAYvhC,MAAMviB,GAC1D,KAAO,IAAIsQ,MAAM,EAAItQ,GAAGwK,KAAK,KAAOo5C,cAAchgB,EAAGt4B,KAAK6P,IAAI,EAAGnZ,EAAIhC,EAAI,IAAI,IGCnFqlD,EAAK,SAAAA,EAASzhB,GAAK,OAAOt4B,KAAK2G,MAAM2xB,GAAG75B,SAAS,IAAIu7C,eACrD1hB,EAAK,SAAAA,EAASA,IAAK,OAAOt4B,KAAK2G,MAAM2xB,IAAG75B,SAAS,MChBpCw7C,aAAA,SAAS3hB,GACtB,OAAOA,GCQL4hB,UAAY,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAEhEC,WAAA,SAASf,QACtB,IAAIgB,MAAQhB,OAAOiB,UAAYjB,OAAOkB,UCZzB,SAASD,SAAUC,WAChC,OAAO,SAAS3kD,MAAOqgC,OAOrB,IANA,IAAIthC,EAAIiB,MAAMkI,OACVjI,KACAohB,EAAI,EACJi4B,EAAIoL,SAAS,GACbx8C,OAAS,EAENnJ,EAAI,GAAKu6C,EAAI,IACdpxC,OAASoxC,EAAI,EAAIjZ,QAAOiZ,EAAIjvC,KAAK6P,IAAI,EAAGmmB,MAAQn4B,SACpDjI,EAAEyM,KAAK1M,MAAMkK,UAAUnL,GAAKu6C,EAAGv6C,EAAIu6C,OAC9BpxC,QAAUoxC,EAAI,GAAKjZ,SACxBiZ,EAAIoL,SAASrjC,GAAKA,EAAI,GAAKqjC,SAASx8C,QAGtC,OAAOjI,EAAE6pB,UAAUvgB,KAAKo7C,YDHwBC,CAAYnB,OAAOiB,SAAUjB,OAAOkB,WAAaruB,aAC/FuuB,SAAWpB,OAAOoB,SAClBC,QAAUrB,OAAOqB,QACjBC,SAAWtB,OAAOsB,SEfT,SAASA,UACtB,OAAO,SAAS/kD,OACd,OAAOA,MAAM8G,QAAQ,SAAU,SAAS/H,GACtC,OAAOgmD,UAAUhmD,MFYYimD,CAAevB,OAAOsB,UAAYzuB,aAC/D2uB,QAAUxB,OAAOwB,SAAW,IAEhC,SAASC,UAAUjC,WAGjB,IAAIE,MAFJF,UAAYD,gBAAgBC,YAEPE,KACjBrV,MAAQmV,UAAUnV,MAClBsV,KAAOH,UAAUG,KACjBC,OAASJ,UAAUI,OACnB/E,KAAO2E,UAAU3E,KACjBje,MAAQ4iB,UAAU5iB,MAClBijB,MAAQL,UAAUK,MAClBC,UAAYN,UAAUM,UACtB5kC,KAAOskC,UAAUtkC,KACjB9c,KAAOohD,UAAUphD,KAGR,MAATA,MAAcyhD,OAAQ,EAAMzhD,KAAO,KAG7BmiD,YAAYniD,QAAoB,MAAb0hD,YAAsBA,UAAY,IAAK5kC,MAAO,EAAM9c,KAAO,MAGpFy8C,MAAkB,MAAT6E,MAA0B,MAAVrV,SAAgBwQ,MAAO,EAAM6E,KAAO,IAAKrV,MAAQ,KAI9E,IAAIqX,OAAoB,MAAX9B,OAAiBwB,SAAS,GAAgB,MAAXxB,QAAkB,SAASh/C,KAAKxC,MAAQ,IAAMA,KAAKoG,cAAgB,GAC3Gm9C,OAAoB,MAAX/B,OAAiBwB,SAAS,GAAK,OAAOxgD,KAAKxC,MAAQojD,QAAU,GAKtEI,WAAarB,YAAYniD,MACzByjD,YAAc,aAAajhD,KAAKxC,MAUpC,SAAS0E,OAAOvG,OACd,IAEIjB,EAAGyB,EAAGpB,EAFNmmD,YAAcJ,OACdK,YAAcJ,OAGlB,GAAa,MAATvjD,KACF2jD,YAAcH,WAAWrlD,OAASwlD,YAClCxlD,MAAQ,OACH,CAIL,IAAIylD,eAHJzlD,OAASA,OAGmB,EAe5B,GAdAA,MAAQqlD,WAAWh7C,KAAKsnB,IAAI3xB,OAAQujD,WAGhC5kC,OAAM3e,MAAQ2jD,WAAW3jD,QAGzBylD,eAA4B,IAAVzlD,QAAaylD,eAAgB,GAGnDF,aAAeE,cAA0B,MAATrC,KAAeA,KAAO,IAAgB,MAATA,MAAyB,MAATA,KAAe,GAAKA,MAAQmC,YACzGC,aAAwB,MAAT3jD,KAAe0iD,SAAS,EAAIf,eAAiB,GAAK,IAAMgC,aAAeC,eAA0B,MAATrC,KAAe,IAAM,IAIxHkC,YAEF,IADAvmD,GAAK,EAAGyB,EAAIR,MAAMkI,SACTnJ,EAAIyB,GACX,GAA6B,IAAzBpB,EAAIY,MAAM6gB,WAAW9hB,KAAcK,EAAI,GAAI,CAC7ComD,aAAqB,KAANpmD,EAAW0lD,QAAU9kD,MAAMshB,MAAMviB,EAAI,GAAKiB,MAAMshB,MAAMviB,IAAMymD,YAC3ExlD,MAAQA,MAAMshB,MAAM,EAAGviB,GACvB,OAOJukD,QAAUhF,OAAMt+C,MAAQykD,MAAMzkD,MAAO0lD,MAGzC,IAAIx9C,OAASq9C,YAAYr9C,OAASlI,MAAMkI,OAASs9C,YAAYt9C,OACzDk/B,QAAUl/B,OAASm4B,MAAQ,IAAIhxB,MAAMgxB,MAAQn4B,OAAS,GAAGqB,KAAK45C,MAAQ,GAM1E,OAHIG,OAAShF,OAAMt+C,MAAQykD,MAAMrd,QAAUpnC,MAAOonC,QAAQl/B,OAASm4B,MAAQmlB,YAAYt9C,OAASw9C,KAAWte,QAAU,IAG7G0G,OACN,IAAK,IAAK9tC,MAAQulD,YAAcvlD,MAAQwlD,YAAcpe,QAAS,MAC/D,IAAK,IAAKpnC,MAAQulD,YAAcne,QAAUpnC,MAAQwlD,YAAa,MAC/D,IAAK,IAAKxlD,MAAQonC,QAAQ9lB,MAAM,EAAGpZ,OAASk/B,QAAQl/B,QAAU,GAAKq9C,YAAcvlD,MAAQwlD,YAAcpe,QAAQ9lB,MAAMpZ,QAAS,MAC9H,QAASlI,MAAQonC,QAAUme,YAAcvlD,MAAQwlD,YAGnD,OAAOT,SAAS/kD,OAOlB,OApEAujD,UAAyB,MAAbA,UAAoB,EAC1B,SAASl/C,KAAKxC,MAAQwI,KAAK6P,IAAI,EAAG7P,KAAK2P,IAAI,GAAIupC,YAC/Cl5C,KAAK6P,IAAI,EAAG7P,KAAK2P,IAAI,GAAIupC,YA8D/Bh9C,OAAOuC,SAAW,WAChB,OAAOm6C,UAAY,IAGd18C,OAaT,OACEA,OAAQ2+C,UACRxB,aAZF,SAASA,aAAaT,UAAWjjD,OAC/B,IAAI+gB,EAAImkC,YAAWjC,UAAYD,gBAAgBC,YAAsBphD,KAAO,IAAKohD,YAC7EhiD,EAAiE,EAA7DoJ,KAAK6P,KAAK,EAAG7P,KAAK2P,IAAI,EAAG3P,KAAK8M,MAAM4sC,aAAS/jD,OAAS,KAC1DktC,EAAI7iC,KAAKoQ,IAAI,IAAKxZ,GAClBkkD,OAASZ,SAAS,EAAItjD,EAAI,GAC9B,OAAO,SAASjB,OACd,OAAO+gB,EAAEmsB,EAAIltC,OAASmlD,YJxHb,SAASQ,cAAc7W,YAIpC,OAHA2U,qBAASmC,WAAa9W,YACtBvoC,qBAASk9C,qBAAOl9C,OAChBm9C,2BAAeD,qBAAOC,aACfD,qBAXTkC,EACEb,QAAS,IACTH,UAAW,IACXD,UAAW,GACXG,UAAW,IAAK,MORH,ICCAgB,eAAA,SAAS7oC,OAAQ3C,MAAO4oC,WACrC,IAGIM,UAHA9+C,MAAQuY,OAAO,GACf6tB,KAAO7tB,OAAOA,OAAO9U,OAAS,GAC9B4iC,KAAOU,SAAS/mC,MAAOomC,KAAe,MAATxwB,MAAgB,GAAKA,OAGtD,QADA4oC,UAAYD,gBAA6B,MAAbC,UAAoB,KAAOA,YACrCphD,MAChB,IAAK,IACH,IAAI7B,MAAQqK,KAAK6P,IAAI7P,KAAKsnB,IAAIltB,OAAQ4F,KAAKsnB,IAAIkZ,OAE/C,OAD2B,MAAvBoY,UAAUM,WAAsBzpC,MAAMypC,UCVjC,SAASzY,KAAM9qC,OAC5B,OAAOqK,KAAK6P,IAAI,EAAgE,EAA7D7P,KAAK6P,KAAK,EAAG7P,KAAK2P,IAAI,EAAG3P,KAAK8M,MAAM4sC,aAAS/jD,OAAS,KAAW+jD,aAAS15C,KAAKsnB,IAAImZ,QDS5Cgb,CAAgBhb,KAAM9qC,UAASijD,UAAUM,UAAYA,WACpGG,2BAAaT,UAAWjjD,OAEjC,IAAK,GACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACwB,MAAvBijD,UAAUM,WAAsBzpC,MAAMypC,UElBjC,SAASzY,KAAM5wB,KAE5B,OADA4wB,KAAOzgC,KAAKsnB,IAAImZ,MAAO5wB,IAAM7P,KAAKsnB,IAAIzX,KAAO4wB,KACtCzgC,KAAK6P,IAAI,EAAG6pC,aAAS7pC,KAAO6pC,aAASjZ,OAAS,EFgBKib,CAAejb,KAAMzgC,KAAK6P,IAAI7P,KAAKsnB,IAAIltB,OAAQ4F,KAAKsnB,IAAIkZ,WAAUoY,UAAUM,UAAYA,WAAgC,MAAnBN,UAAUphD,OACrK,MAEF,IAAK,IACL,IAAK,IACwB,MAAvBohD,UAAUM,WAAsBzpC,MAAMypC,UDvBjC,SAASzY,MACtB,OAAOzgC,KAAK6P,IAAI,GAAI6pC,aAAS15C,KAAKsnB,IAAImZ,QCsBoBkb,CAAelb,SAAQmY,UAAUM,UAAYA,UAAuC,GAAP,MAAnBN,UAAUphD,OAI9H,OAAO0E,qBAAO08C,YGxBT,SAASgD,UAAU1Y,OACxB,IAAIvwB,OAASuwB,MAAMvwB,OAmDnB,OAjDAuwB,MAAMpC,MAAQ,SAAS9wB,OACrB,IAAIhb,EAAI2d,SACR,OAAOmuB,UAAM9rC,EAAE,GAAIA,EAAEA,EAAE6I,OAAS,GAAa,MAATmS,MAAgB,GAAKA,QAG3DkzB,MAAM2Y,WAAa,SAAS7rC,MAAO4oC,WACjC,OAAOiD,eAAWlpC,SAAU3C,MAAO4oC,YAGrC1V,MAAM4Y,KAAO,SAAS9rC,OACP,MAATA,QAAeA,MAAQ,IAE3B,IAKIywB,KALAzrC,EAAI2d,SACJ6uB,GAAK,EACLgY,GAAKxkD,EAAE6I,OAAS,EAChBzD,MAAQpF,EAAEwsC,IACVhB,KAAOxrC,EAAEwkD,IA8Bb,OA3BIhZ,KAAOpmC,QACTqmC,KAAOrmC,MAAOA,MAAQomC,KAAMA,KAAOC,KACnCA,KAAOe,GAAIA,GAAKgY,GAAIA,GAAK/Y,OAG3BA,KAAOM,cAAc3mC,MAAOomC,KAAMxwB,QAEvB,EAGTywB,KAAOM,cAFP3mC,MAAQ4F,KAAK8M,MAAM1S,MAAQqmC,MAAQA,KACnCD,KAAOxgC,KAAKqnB,KAAKmZ,KAAOC,MAAQA,KACEzwB,OACzBywB,KAAO,IAGhBA,KAAOM,cAFP3mC,MAAQ4F,KAAKqnB,KAAKjtB,MAAQqmC,MAAQA,KAClCD,KAAOxgC,KAAK8M,MAAM0zB,KAAOC,MAAQA,KACCzwB,QAGhCywB,KAAO,GACTzrC,EAAEwsC,IAAMxhC,KAAK8M,MAAM1S,MAAQqmC,MAAQA,KACnCzrC,EAAEwkD,IAAMx5C,KAAKqnB,KAAKmZ,KAAOC,MAAQA,KACjC9tB,OAAO3d,IACEyrC,KAAO,IAChBzrC,EAAEwsC,IAAMxhC,KAAKqnB,KAAKjtB,MAAQqmC,MAAQA,KAClCzrC,EAAEwkD,IAAMx5C,KAAK8M,MAAM0zB,KAAOC,MAAQA,KAClC9tB,OAAO3d,IAGFkuC,OAGFA,MAGM,SAASuP,gBACtB,IAAIvP,MAAQ6U,WAAWP,oBAAeC,YAMtC,OAJAvU,MAAMC,KAAO,WACX,OAAOA,KAAKD,MAAOuP,kBAGdmJ,UAAU1Y,OC/DJ,SAASjX,oBACtB,IAAItZ,QAAU,EAAG,GAEjB,SAASuwB,MAAM5K,GACb,OAAQA,EAaV,OAVA4K,MAAMgB,OAAShB,MAEfA,MAAMvwB,OAASuwB,MAAMxlC,MAAQ,SAAS4e,GACpC,OAAO/a,UAAU1D,QAAU8U,OAASvO,cAAIvP,KAAKynB,EAAG+jB,qBAAS6C,OAASvwB,OAAOsE,SAG3EisB,MAAMC,KAAO,WACX,OAAOlX,oBAAWtZ,OAAOA,SAGpBipC,UAAU1Y,OCrBJ,IAAA4Y,KAAA,SAASnpC,OAAQopC,UAG9B,IAIInmD,EAJA4rC,GAAK,EACLgY,IAHJ7mC,OAASA,OAAOsE,SAGApZ,OAAS,EACrBm+C,GAAKrpC,OAAO6uB,IACZya,GAAKtpC,OAAO6mC,IAUhB,OAPIyC,GAAKD,KACPpmD,EAAI4rC,GAAIA,GAAKgY,GAAIA,GAAK5jD,EACtBA,EAAIomD,GAAIA,GAAKC,GAAIA,GAAKrmD,GAGxB+c,OAAO6uB,IAAMua,SAASjvC,MAAMkvC,IAC5BrpC,OAAO6mC,IAAMuC,SAAS10B,KAAK40B,IACpBtpC,QCVT,SAAS6kC,kBAAc1gD,EAAGyI,GACxB,OAAQA,EAAIS,KAAKihC,IAAI1hC,EAAIzI,IACnB,SAASwhC,GAAK,OAAOt4B,KAAKihC,IAAI3I,EAAIxhC,GAAKyI,GACvCozC,sBAASpzC,GAGjB,SAASk4C,kBAAc3gD,EAAGyI,GACxB,OAAOzI,EAAI,EACL,SAASlB,GAAK,OAAQoK,KAAKoQ,KAAK7Q,EAAG3J,GAAKoK,KAAKoQ,KAAKtZ,EAAG,EAAIlB,IACzD,SAASA,GAAK,OAAOoK,KAAKoQ,IAAI7Q,EAAG3J,GAAKoK,KAAKoQ,IAAItZ,EAAG,EAAIlB,IAG9D,SAASsmD,MAAM5jB,GACb,OAAO/6B,SAAS+6B,KAAO,KAAOA,GAAKA,EAAI,EAAI,EAAIA,EAGjD,SAAS6jB,KAAKC,MACZ,OAAgB,KAATA,KAAcF,MACfE,OAASp8C,KAAKyxC,EAAIzxC,KAAKq8C,IACvB,SAAS/jB,GAAK,OAAOt4B,KAAKoQ,IAAIgsC,KAAM9jB,IAG5C,SAASgkB,KAAKF,MACZ,OAAOA,OAASp8C,KAAKyxC,EAAIzxC,KAAKihC,IACf,KAATmb,MAAep8C,KAAKu8C,OACV,IAATH,MAAcp8C,KAAKw8C,OAClBJ,KAAOp8C,KAAKihC,IAAImb,MAAO,SAAS9jB,GAAK,OAAOt4B,KAAKihC,IAAI3I,GAAK8jB,OAGpE,SAASK,QAAQ/lC,GACf,OAAO,SAAS4hB,GACd,OAAQ5hB,GAAG4hB,IAIA,SAAS2I,MACtB,IAAIiC,MAAQ6U,WAAWP,kBAAeC,mBAAe9kC,QAAQ,EAAG,KAC5DA,OAASuwB,MAAMvwB,OACfypC,KAAO,GACPM,KAAOJ,KAAK,IACZK,KAAOR,KAAK,IAEhB,SAASzY,UAGP,OAFAgZ,KAAOJ,KAAKF,MAAOO,KAAOR,KAAKC,MAC3BzpC,SAAS,GAAK,IAAG+pC,KAAOD,QAAQC,MAAOC,KAAOF,QAAQE,OACnDzZ,MA2ET,OAxEAA,MAAMkZ,KAAO,SAAS9/B,GACpB,OAAO/a,UAAU1D,QAAUu+C,MAAQ9/B,EAAGonB,WAAa0Y,MAGrDlZ,MAAMvwB,OAAS,SAAS2J,GACtB,OAAO/a,UAAU1D,QAAU8U,OAAO2J,GAAIonB,WAAa/wB,UAGrDuwB,MAAMpC,MAAQ,SAAS9wB,OACrB,IAGIxa,EAHAR,EAAI2d,SACJtB,EAAIrc,EAAE,GACN+Q,EAAI/Q,EAAEA,EAAE6I,OAAS,IAGjBrI,EAAIuQ,EAAIsL,KAAG3c,EAAI2c,EAAGA,EAAItL,EAAGA,EAAIrR,GAEjC,IAEIgC,EACAmsC,EACAjtC,EAJAlB,EAAIgoD,KAAKrrC,GACT2F,EAAI0lC,KAAK32C,GAIT5P,EAAa,MAAT6Z,MAAgB,IAAMA,MAC1B8gC,KAEJ,KAAMsL,KAAO,IAAMplC,EAAItiB,EAAIyB,GAEzB,GADAzB,EAAIsL,KAAK2G,MAAMjS,GAAK,EAAGsiB,EAAIhX,KAAK2G,MAAMqQ,GAAK,EACvC3F,EAAI,GAAG,KAAO3c,EAAIsiB,IAAKtiB,EACzB,IAAKmuC,EAAI,EAAGnsC,EAAIimD,KAAKjoD,GAAImuC,EAAIuZ,OAAQvZ,EAEnC,MADAjtC,EAAIc,EAAImsC,GACAxxB,GAAR,CACA,GAAIzb,EAAImQ,EAAG,MACX+qC,EAAEzuC,KAAKzM,SAEJ,KAAOlB,EAAIsiB,IAAKtiB,EACrB,IAAKmuC,EAAIuZ,KAAO,EAAG1lD,EAAIimD,KAAKjoD,GAAImuC,GAAK,IAAKA,EAExC,MADAjtC,EAAIc,EAAImsC,GACAxxB,GAAR,CACA,GAAIzb,EAAImQ,EAAG,MACX+qC,EAAEzuC,KAAKzM,SAIXk7C,EAAIhQ,UAAMpsC,EAAGsiB,EAAGhX,KAAK2P,IAAIqH,EAAItiB,EAAGyB,IAAIiO,IAAIu4C,MAG1C,OAAOnnD,EAAIs7C,EAAErxB,UAAYqxB,GAG3B5N,MAAM2Y,WAAa,SAAS7rC,MAAO4oC,WAGjC,GAFiB,MAAbA,YAAmBA,UAAqB,KAATwD,KAAc,MAAQ,KAChC,mBAAdxD,YAA0BA,UAAY18C,qBAAO08C,YACpD5oC,QAAUqrC,IAAU,OAAOzC,UAClB,MAAT5oC,QAAeA,MAAQ,IAC3B,IAAI6yB,EAAI7iC,KAAK6P,IAAI,EAAGusC,KAAOpsC,MAAQkzB,MAAMpC,QAAQjjC,QACjD,OAAO,SAAS7I,GACd,IAAIN,EAAIM,EAAI2nD,KAAK38C,KAAK2G,MAAM+1C,KAAK1nD,KAEjC,OADIN,EAAI0nD,KAAOA,KAAO,KAAK1nD,GAAK0nD,MACzB1nD,GAAKmuC,EAAI+V,UAAU5jD,GAAK,KAInCkuC,MAAM4Y,KAAO,WACX,OAAOnpC,OAAOmpC,KAAKnpC,UACjB7F,MAAO,SAAAA,MAASwrB,GAAK,OAAOqkB,KAAK38C,KAAK8M,MAAM4vC,KAAKpkB,MACjDjR,KAAM,SAAAA,KAASiR,GAAK,OAAOqkB,KAAK38C,KAAKqnB,KAAKq1B,KAAKpkB,UAInD4K,MAAMC,KAAO,WACX,OAAOA,KAAKD,MAAOjC,MAAMmb,KAAKA,QAGzBlZ,MC1HT,SAAS0Z,MAAMtkB,EAAGohB,UAChB,OAAOphB,EAAI,GAAKt4B,KAAKoQ,KAAKkoB,EAAGohB,UAAY15C,KAAKoQ,IAAIkoB,EAAGohB,UAGxC,SAAStpC,MACtB,IAAIspC,SAAW,EACXxW,MAAQ6U,WAGZ,SAASP,cAAc1gD,EAAGyI,GACxB,OAAQA,EAAIq9C,MAAMr9C,EAAGm6C,WAAa5iD,EAAI8lD,MAAM9lD,EAAG4iD,YACzC,SAASphB,GAAK,OAAQskB,MAAMtkB,EAAGohB,UAAY5iD,GAAKyI,GAChDozC,sBAASpzC,IAGjB,SAASk4C,cAAc3gD,EAAGyI,GAExB,OADAA,EAAIq9C,MAAMr9C,EAAGm6C,WAAa5iD,EAAI8lD,MAAM9lD,EAAG4iD,WAChC,SAAS9jD,GAAK,OAAOgnD,MAAM9lD,EAAIyI,EAAI3J,EAAG,EAAI8jD,aAV/C/mC,OAASuwB,MAAMvwB,OAqBnB,OARAuwB,MAAMwW,SAAW,SAASp9B,GACxB,OAAO/a,UAAU1D,QAAU67C,UAAYp9B,EAAG3J,OAAOA,WAAa+mC,UAGhExW,MAAMC,KAAO,WACX,OAAOA,KAAKD,MAAO9yB,MAAMspC,SAASA,YAG7BkC,UAAU1Y,OC7BJ,SAAS5B,oBACtB,IAAI3uB,UACAjV,SACAm/C,cAEJ,SAASnZ,UACP,IAAIhvC,EAAI,EAAGyB,EAAI6J,KAAK6P,IAAI,EAAGnS,MAAMG,QAEjC,IADAg/C,WAAa,IAAI73C,MAAM7O,EAAI,KAClBzB,EAAIyB,GAAG0mD,WAAWnoD,EAAI,GAAKooD,SAAUnqC,OAAQje,EAAIyB,GAC1D,OAAO+sC,MAGT,SAASA,MAAM5K,GACb,IAAK7oB,MAAM6oB,GAAKA,GAAI,OAAO56B,MAAMk6C,OAAOiF,WAAYvkB,IAiCtD,OA9BA4K,MAAMW,aAAe,SAASlkC,GAC5B,IAAIjL,EAAIgJ,MAAM0E,QAAQzC,GACtB,OAAOjL,EAAI,GAAKmrC,IAAKA,MACnBnrC,EAAI,EAAImoD,WAAWnoD,EAAI,GAAKie,OAAO,GACnCje,EAAImoD,WAAWh/C,OAASg/C,WAAWnoD,GAAKie,OAAOA,OAAO9U,OAAS,KAInEqlC,MAAMvwB,OAAS,SAAS2J,GACtB,IAAK/a,UAAU1D,OAAQ,OAAO8U,OAAOsE,QACrCtE,UACA,IAAK,IAAyB3d,EAArBN,EAAI,EAAGyB,EAAImmB,EAAEze,OAAWnJ,EAAIyB,IAAKzB,EAAsB,OAAfM,EAAIsnB,EAAE5nB,KAAkB+a,MAAMza,GAAKA,IAAI2d,OAAOtQ,KAAKrN,GAEpG,OADA2d,OAAOjG,KAAKkzB,WACL8D,WAGTR,MAAMxlC,MAAQ,SAAS4e,GACrB,OAAO/a,UAAU1D,QAAUH,MAAQuZ,YAAMpiB,KAAKynB,GAAIonB,WAAahmC,MAAMuZ,SAGvEisB,MAAM6Z,UAAY,WAChB,OAAOF,WAAW5lC,SAGpBisB,MAAMC,KAAO,WACX,OAAO7B,oBACF3uB,OAAOA,QACPjV,MAAMA,QAGNwlC,MC7CM,SAAS8Z,oBACtB,IAAIhB,GAAK,EACLC,GAAK,EACL9lD,EAAI,EACJwc,QAAU,IACVjV,OAAS,EAAG,GAEhB,SAASwlC,MAAM5K,GACb,GAAIA,GAAKA,EAAG,OAAO56B,MAAMk6C,OAAOjlC,OAAQ2lB,EAAG,EAAGniC,IAGhD,SAASutC,UACP,IAAIhvC,GAAK,EAET,IADAie,OAAS,IAAI3N,MAAM7O,KACVzB,EAAIyB,GAAGwc,OAAOje,KAAOA,EAAI,GAAKunD,IAAMvnD,EAAIyB,GAAK6lD,KAAO7lD,EAAI,GACjE,OAAO+sC,MAyBT,OAtBAA,MAAMvwB,OAAS,SAAS2J,GACtB,OAAO/a,UAAU1D,QAAUm+C,IAAM1/B,EAAE,GAAI2/B,IAAM3/B,EAAE,GAAIonB,YAAcsY,GAAIC,KAGvE/Y,MAAMxlC,MAAQ,SAAS4e,GACrB,OAAO/a,UAAU1D,QAAU1H,GAAKuH,MAAQuZ,YAAMpiB,KAAKynB,IAAIze,OAAS,EAAG6lC,WAAahmC,MAAMuZ,SAGxFisB,MAAMW,aAAe,SAASlkC,GAC5B,IAAIjL,EAAIgJ,MAAM0E,QAAQzC,GACtB,OAAOjL,EAAI,GAAKmrC,IAAKA,KACfnrC,EAAI,GAAKsnD,GAAIrpC,OAAO,IACpBje,GAAKyB,GAAKwc,OAAOxc,EAAI,GAAI8lD,KACxBtpC,OAAOje,EAAI,GAAIie,OAAOje,KAG/BwuC,MAAMC,KAAO,WACX,OAAO6Z,oBACFrqC,QAAQqpC,GAAIC,KACZv+C,MAAMA,QAGNk+C,UAAU1Y,OCzCJ,SAAS4Z,sBACtB,IAAInqC,QAAU,IACVjV,OAAS,EAAG,GACZvH,EAAI,EAER,SAAS+sC,MAAM5K,GACb,GAAIA,GAAKA,EAAG,OAAO56B,MAAMk6C,OAAOjlC,OAAQ2lB,EAAG,EAAGniC,IAsBhD,OAnBA+sC,MAAMvwB,OAAS,SAAS2J,GACtB,OAAO/a,UAAU1D,QAAU8U,OAASsE,YAAMpiB,KAAKynB,GAAInmB,EAAI6J,KAAK2P,IAAIgD,OAAO9U,OAAQH,MAAMG,OAAS,GAAIqlC,OAASvwB,OAAOsE,SAGpHisB,MAAMxlC,MAAQ,SAAS4e,GACrB,OAAO/a,UAAU1D,QAAUH,MAAQuZ,YAAMpiB,KAAKynB,GAAInmB,EAAI6J,KAAK2P,IAAIgD,OAAO9U,OAAQH,MAAMG,OAAS,GAAIqlC,OAASxlC,MAAMuZ,SAGlHisB,MAAMW,aAAe,SAASlkC,GAC5B,IAAIjL,EAAIgJ,MAAM0E,QAAQzC,GACtB,OAAQgT,OAAOje,EAAI,GAAIie,OAAOje,KAGhCwuC,MAAMC,KAAO,WACX,OAAO2Z,sBACFnqC,OAAOA,QACPjV,MAAMA,QAGNwlC,MC/BT,IAAImN,YAAK,IAAIt0C,KACTu0C,YAAK,IAAIv0C,KAEE,SAASkhD,YAAYC,OAAQC,QAASntC,MAAOvI,OAE1D,SAASs0C,SAASjgD,MAChB,OAAOohD,OAAOphD,KAAO,IAAIC,MAAMD,OAAQA,KA4DzC,OAzDAigD,SAASjvC,MAAQivC,SAEjBA,SAAS10B,KAAO,SAASvrB,MACvB,OAAOohD,OAAOphD,KAAO,IAAIC,KAAKD,KAAO,IAAKqhD,QAAQrhD,KAAM,GAAIohD,OAAOphD,MAAOA,MAG5EigD,SAASp1C,MAAQ,SAAS7K,MACxB,IAAI47C,GAAKqE,SAASjgD,MACduoC,GAAK0X,SAAS10B,KAAKvrB,MACvB,OAAOA,KAAO47C,GAAKrT,GAAKvoC,KAAO47C,GAAKrT,IAGtC0X,SAASqB,OAAS,SAASthD,KAAM2kC,MAC/B,OAAO0c,QAAQrhD,KAAO,IAAIC,MAAMD,MAAe,MAAR2kC,KAAe,EAAIzgC,KAAK8M,MAAM2zB,OAAQ3kC,MAG/EigD,SAASr+C,MAAQ,SAAStD,MAAOomC,KAAMC,MACrC,IAAgB4c,SAAZ3/C,SAGJ,GAFAtD,MAAQ2hD,SAAS10B,KAAKjtB,OACtBqmC,KAAe,MAARA,KAAe,EAAIzgC,KAAK8M,MAAM2zB,QAC/BrmC,MAAQomC,MAAWC,KAAO,GAAI,OAAO/iC,MAC3C,GAAGA,MAAM2E,KAAKg7C,SAAW,IAAIthD,MAAM3B,QAAS+iD,QAAQ/iD,MAAOqmC,MAAOyc,OAAO9iD,aAClEijD,SAAWjjD,OAASA,MAAQomC,MACnC,OAAO9iC,OAGTq+C,SAAS5sC,OAAS,SAASnV,MACzB,OAAOijD,YAAY,SAASnhD,MAC1B,GAAIA,MAAQA,KAAM,KAAOohD,OAAOphD,OAAQ9B,KAAK8B,OAAOA,KAAK24C,QAAQ34C,KAAO,IACvE,SAASA,KAAM2kC,MAChB,GAAI3kC,MAAQA,KACV,GAAI2kC,KAAO,EAAG,OAASA,MAAQ,GAC7B,KAAO0c,QAAQrhD,MAAO,IAAK9B,KAAK8B,aAC3B,OAAS2kC,MAAQ,GACtB,KAAO0c,QAAQrhD,KAAM,IAAM9B,KAAK8B,YAMpCkU,QACF+rC,SAAS/rC,MAAQ,SAAS5V,MAAOwO,KAG/B,OAFAynC,YAAGoE,SAASr6C,OAAQk2C,YAAGmE,SAAS7rC,KAChCs0C,OAAO7M,aAAK6M,OAAO5M,aACZtwC,KAAK8M,MAAMkD,MAAMqgC,YAAIC,eAG9ByL,SAASliC,MAAQ,SAAS4mB,MAExB,OADAA,KAAOzgC,KAAK8M,MAAM2zB,MACVljC,SAASkjC,OAAWA,KAAO,EAC3BA,KAAO,EACTsb,SAAS5sC,OAAO1H,MACZ,SAASzS,GAAK,OAAOyS,MAAMzS,GAAKyrC,MAAS,GACzC,SAASzrC,GAAK,OAAO+mD,SAAS/rC,MAAM,EAAGhb,GAAKyrC,MAAS,IAH3Csb,SADoB,OAQrCA,SChET,IAAIuB,wBAAcvB,YAAS,aAExB,SAASjgD,KAAM2kC,MAChB3kC,KAAK24C,SAAS34C,KAAO2kC,OACpB,SAASrmC,MAAOwO,KACjB,OAAOA,IAAMxO,QAIfkjD,wBAAYzjC,MAAQ,SAASgpB,GAE3B,OADAA,EAAI7iC,KAAK8M,MAAM+1B,GACVtlC,SAASslC,IAAQA,EAAI,EACpBA,EAAI,EACHkZ,YAAS,SAASjgD,MACvBA,KAAK24C,QAAQz0C,KAAK8M,MAAMhR,KAAO+mC,GAAKA,IACnC,SAAS/mC,KAAM2kC,MAChB3kC,KAAK24C,SAAS34C,KAAO2kC,KAAOoC,IAC3B,SAASzoC,MAAOwO,KACjB,OAAQA,IAAMxO,OAASyoC,IANJya,wBADgB,MAWxBA,4CCvBJC,gBDwBeD,wBAAY5/C,MCxBV,KAGjB8/C,aAAe,OCDtBC,cAAS1B,YAAS,SAASjgD,MAC7BA,KAAK24C,QDJqB,ICIbz0C,KAAK8M,MAAMhR,KDJE,OCKzB,SAASA,KAAM2kC,MAChB3kC,KAAK24C,SAAS34C,KDNY,ICML2kC,OACpB,SAASrmC,MAAOwO,KACjB,OAAQA,IAAMxO,ODRY,KCSzB,SAAS0B,MACV,OAAOA,KAAK4hD,kBAGCD,yBCVXE,eDWiBF,cAAO//C,MCXfq+C,YAAS,SAASjgD,MAC7BA,KAAK24C,QAAQz0C,KAAK8M,MAAMhR,KAAOyhD,gBAAkBA,iBAChD,SAASzhD,KAAM2kC,MAChB3kC,KAAK24C,SAAS34C,KAAO2kC,KAAO8c,iBAC3B,SAASnjD,MAAOwO,KACjB,OAAQA,IAAMxO,OAASmjD,gBACtB,SAASzhD,MACV,OAAOA,KAAK+C,gBAGC8+C,yBCVXC,WDWiBD,cAAOjgD,MCXjBq+C,YAAS,SAASjgD,MAC3B,IAAIshD,OAASthD,KAAK+hD,oBAAsBN,eHFhB,KGGpBH,OAAS,IAAGA,QHHQ,MGIxBthD,KAAK24C,QHJmB,KGIXz0C,KAAK8M,QAAQhR,KAAOshD,QHJT,MGIkDA,SACzE,SAASthD,KAAM2kC,MAChB3kC,KAAK24C,SAAS34C,KHNU,KGMH2kC,OACpB,SAASrmC,MAAOwO,KACjB,OAAQA,IAAMxO,OHRU,MGSvB,SAAS0B,MACV,OAAOA,KAAK0C,cAGCo/C,mBCZXz+C,SDaey+C,UAAKlgD,MCbdq+C,YAAS,SAASjgD,MAC1BA,KAAKgiD,SAAS,EAAG,EAAG,EAAG,IACtB,SAAShiD,KAAM2kC,MAChB3kC,KAAKiiD,QAAQjiD,KAAKwD,UAAYmhC,OAC7B,SAASrmC,MAAOwO,KACjB,OAAQA,IAAMxO,OAASwO,IAAIi1C,oBAAsBzjD,MAAMyjD,qBAAuBN,gBJLvD,OIMtB,SAASzhD,MACV,OAAOA,KAAKwD,UAAY,KAGXH,gBACGA,QAAIzB,MCXtB,SAASsgD,QAAQtpD,GACf,OAAOqnD,YAAS,SAASjgD,MACvBA,KAAKiiD,QAAQjiD,KAAKwD,WAAaxD,KAAKsD,SAAW,EAAI1K,GAAK,GACxDoH,KAAKgiD,SAAS,EAAG,EAAG,EAAG,IACtB,SAAShiD,KAAM2kC,MAChB3kC,KAAKiiD,QAAQjiD,KAAKwD,UAAmB,EAAPmhC,OAC7B,SAASrmC,MAAOwO,KACjB,OAAQA,IAAMxO,OAASwO,IAAIi1C,oBAAsBzjD,MAAMyjD,qBAAuBN,gBAAkBC,eAI7F,IAAIS,OAASD,QAAQ,GACjBE,OAASF,QAAQ,GACjBG,QAAUH,QAAQ,GAClBI,UAAYJ,QAAQ,GACpBK,SAAWL,QAAQ,GACnBM,OAASN,QAAQ,GACjBO,SAAWP,QAAQ,GClB1Bx+C,aDoBiBy+C,OAAOvgD,MACPwgD,OAAOxgD,MACNygD,QAAQzgD,MACN0gD,UAAU1gD,MACX2gD,SAAS3gD,MACX4gD,OAAO5gD,MACL6gD,SAAS7gD,MC1BpBq+C,YAAS,SAASjgD,MAC5BA,KAAKiiD,QAAQ,GACbjiD,KAAKgiD,SAAS,EAAG,EAAG,EAAG,IACtB,SAAShiD,KAAM2kC,MAChB3kC,KAAK0iD,SAAS1iD,KAAK2D,WAAaghC,OAC/B,SAASrmC,MAAOwO,KACjB,OAAOA,IAAInJ,WAAarF,MAAMqF,WAAyD,IAA3CmJ,IAAI1I,cAAgB9F,MAAM8F,gBACrE,SAASpE,MACV,OAAOA,KAAK2D,cAGCD,sBCXXW,WDYgBX,YAAM9B,MCZfq+C,YAAS,SAASjgD,MAC3BA,KAAK0iD,SAAS,EAAG,GACjB1iD,KAAKgiD,SAAS,EAAG,EAAG,EAAG,IACtB,SAAShiD,KAAM2kC,MAChB3kC,KAAK2iD,YAAY3iD,KAAKoE,cAAgBugC,OACrC,SAASrmC,MAAOwO,KACjB,OAAOA,IAAI1I,cAAgB9F,MAAM8F,eAChC,SAASpE,MACV,OAAOA,KAAKoE,iBAIdC,UAAK0Z,MAAQ,SAASgpB,GACpB,OAAQtlC,SAASslC,EAAI7iC,KAAK8M,MAAM+1B,KAASA,EAAI,EAAYkZ,YAAS,SAASjgD,MACzEA,KAAK2iD,YAAYz+C,KAAK8M,MAAMhR,KAAKoE,cAAgB2iC,GAAKA,GACtD/mC,KAAK0iD,SAAS,EAAG,GACjB1iD,KAAKgiD,SAAS,EAAG,EAAG,EAAG,IACtB,SAAShiD,KAAM2kC,MAChB3kC,KAAK2iD,YAAY3iD,KAAKoE,cAAgBugC,KAAOoC,KALG,MASrC1iC,uBCrBXu+C,WDsBev+C,UAAKzC,MCtBRq+C,YAAS,SAASjgD,MAChCA,KAAK6iD,cAAc,EAAG,IACrB,SAAS7iD,KAAM2kC,MAChB3kC,KAAK24C,SAAS34C,KAAO2kC,KAAO8c,iBAC3B,SAASnjD,MAAOwO,KACjB,OAAQA,IAAMxO,OAASmjD,gBACtB,SAASzhD,MACV,OAAOA,KAAK8iD,mBCPVC,SDWoBH,UAAUhhD,MCXpBq+C,YAAS,SAASjgD,MAC9BA,KAAKgjD,cAAc,EAAG,EAAG,IACxB,SAAShjD,KAAM2kC,MAChB3kC,KAAK24C,SAAS34C,KTJU,KSIH2kC,OACpB,SAASrmC,MAAOwO,KACjB,OAAQA,IAAMxO,OTNU,MSOvB,SAAS0B,MACV,OAAOA,KAAKijD,iBCPVC,QDWkBH,QAAQnhD,MCXjBq+C,YAAS,SAASjgD,MAC7BA,KAAKmjD,YAAY,EAAG,EAAG,EAAG,IACzB,SAASnjD,KAAM2kC,MAChB3kC,KAAKojD,WAAWpjD,KAAKqjD,aAAe1e,OACnC,SAASrmC,MAAOwO,KACjB,OAAQA,IAAMxO,OVLS,OUMtB,SAAS0B,MACV,OAAOA,KAAKqjD,aAAe,KAGdH,kBACMA,OAAOthD,MCX5B,SAAS0hD,WAAW1qD,GAClB,OAAOqnD,YAAS,SAASjgD,MACvBA,KAAKojD,WAAWpjD,KAAKqjD,cAAgBrjD,KAAKujD,YAAc,EAAI3qD,GAAK,GACjEoH,KAAKmjD,YAAY,EAAG,EAAG,EAAG,IACzB,SAASnjD,KAAM2kC,MAChB3kC,KAAKojD,WAAWpjD,KAAKqjD,aAAsB,EAAP1e,OACnC,SAASrmC,MAAOwO,KACjB,OAAQA,IAAMxO,OAASojD,eAIpB,IAAI8B,UAAYF,WAAW,GACvBG,UAAYH,WAAW,GACvBI,WAAaJ,WAAW,GACxBK,aAAeL,WAAW,GAC1BM,YAAcN,WAAW,GACzBO,UAAYP,WAAW,GACvBQ,YAAcR,WAAW,GClBhCS,UDoBoBP,UAAU5hD,MACV6hD,UAAU7hD,MACT8hD,WAAW9hD,MACT+hD,aAAa/hD,MACdgiD,YAAYhiD,MACdiiD,UAAUjiD,MACRkiD,YAAYliD,MC1BvBq+C,YAAS,SAASjgD,MAC/BA,KAAKojD,WAAW,GAChBpjD,KAAKmjD,YAAY,EAAG,EAAG,EAAG,IACzB,SAASnjD,KAAM2kC,MAChB3kC,KAAKgkD,YAAYhkD,KAAKikD,cAAgBtf,OACrC,SAASrmC,MAAOwO,KACjB,OAAOA,IAAIm3C,cAAgB3lD,MAAM2lD,cAAkE,IAAjDn3C,IAAIo3C,iBAAmB5lD,MAAM4lD,mBAC9E,SAASlkD,MACV,OAAOA,KAAKikD,iBCRVE,SDYmBJ,SAASniD,MCZlBq+C,YAAS,SAASjgD,MAC9BA,KAAKgkD,YAAY,EAAG,GACpBhkD,KAAKmjD,YAAY,EAAG,EAAG,EAAG,IACzB,SAASnjD,KAAM2kC,MAChB3kC,KAAKokD,eAAepkD,KAAKkkD,iBAAmBvf,OAC3C,SAASrmC,MAAOwO,KACjB,OAAOA,IAAIo3C,iBAAmB5lD,MAAM4lD,kBACnC,SAASlkD,MACV,OAAOA,KAAKkkD,oBAIdC,QAAQpmC,MAAQ,SAASgpB,GACvB,OAAQtlC,SAASslC,EAAI7iC,KAAK8M,MAAM+1B,KAASA,EAAI,EAAYkZ,YAAS,SAASjgD,MACzEA,KAAKokD,eAAelgD,KAAK8M,MAAMhR,KAAKkkD,iBAAmBnd,GAAKA,GAC5D/mC,KAAKgkD,YAAY,EAAG,GACpBhkD,KAAKmjD,YAAY,EAAG,EAAG,EAAG,IACzB,SAASnjD,KAAM2kC,MAChB3kC,KAAKokD,eAAepkD,KAAKkkD,iBAAmBvf,KAAOoC,KALH,MASrCod,wBACOA,QAAQviD,MCZ9B,SAASyiD,UAAUnrD,GACjB,GAAI,GAAKA,EAAE2K,GAAK3K,EAAE2K,EAAI,IAAK,CACzB,IAAI7D,KAAO,IAAIC,MAAM,EAAG/G,EAAEF,EAAGE,EAAEA,EAAGA,EAAEmJ,EAAGnJ,EAAE4J,EAAG5J,EAAE8J,EAAG9J,EAAEorD,GAEnD,OADAtkD,KAAK2iD,YAAYzpD,EAAE2K,GACZ7D,KAET,OAAO,IAAIC,KAAK/G,EAAE2K,EAAG3K,EAAEF,EAAGE,EAAEA,EAAGA,EAAEmJ,EAAGnJ,EAAE4J,EAAG5J,EAAE8J,EAAG9J,EAAEorD,GAGlD,SAASC,QAAQrrD,GACf,GAAI,GAAKA,EAAE2K,GAAK3K,EAAE2K,EAAI,IAAK,CACzB,IAAI7D,KAAO,IAAIC,KAAKA,KAAKukD,KAAK,EAAGtrD,EAAEF,EAAGE,EAAEA,EAAGA,EAAEmJ,EAAGnJ,EAAE4J,EAAG5J,EAAE8J,EAAG9J,EAAEorD,IAE5D,OADAtkD,KAAKokD,eAAelrD,EAAE2K,GACf7D,KAET,OAAO,IAAIC,KAAKA,KAAKukD,IAAItrD,EAAE2K,EAAG3K,EAAEF,EAAGE,EAAEA,EAAGA,EAAEmJ,EAAGnJ,EAAE4J,EAAG5J,EAAE8J,EAAG9J,EAAEorD,IAG3D,SAASG,QAAQ5gD,GACf,OAAQA,EAAGA,EAAG7K,EAAG,EAAGE,EAAG,EAAGmJ,EAAG,EAAGS,EAAG,EAAGE,EAAG,EAAGshD,EAAG,GA2UjD,ICzWIhH,yBACOoH,WAEAC,UACAC,SDqWPC,MAAQC,IAAK,GAAItkC,EAAK,IAAKukC,EAAK,KAChCC,SAAW,UACXC,UAAY,KACZC,UAAY,sBAEhB,SAAShlD,WAAIrG,MAAOmjD,KAAM9iB,OACxB,IAAI+iB,KAAOpjD,MAAQ,EAAI,IAAM,GACzB6+C,QAAUuE,MAAQpjD,MAAQA,OAAS,GACnCkI,OAAS22C,OAAO32C,OACpB,OAAOk7C,MAAQl7C,OAASm4B,MAAQ,IAAIhxB,MAAMgxB,MAAQn4B,OAAS,GAAGqB,KAAK45C,MAAQtE,OAASA,QAGtF,SAASyM,QAAQtqD,GACf,OAAOA,EAAE8F,QAAQukD,UAAW,QAG9B,SAASE,SAASC,OAChB,OAAO,IAAI7kD,OAAO,OAAS6kD,MAAM/8C,IAAI68C,SAAS/hD,KAAK,KAAO,IAAK,KAGjE,SAASkiD,aAAaD,OAEpB,IADA,IAAI/8C,OAAU1P,GAAK,EAAGyB,EAAIgrD,MAAMtjD,SACvBnJ,EAAIyB,GAAGiO,IAAI+8C,MAAMzsD,GAAGkJ,eAAiBlJ,EAC9C,OAAO0P,IAGT,SAASi9C,yBAAyBrsD,EAAGw/C,OAAQ9/C,GAC3C,IAAIyB,EAAI2qD,SAASlS,KAAK4F,OAAOv9B,MAAMviB,EAAGA,EAAI,IAC1C,OAAOyB,GAAKnB,EAAEssD,GAAKnrD,EAAE,GAAIzB,EAAIyB,EAAE,GAAG0H,SAAW,EAG/C,SAAS0jD,yBAAyBvsD,EAAGw/C,OAAQ9/C,GAC3C,IAAIyB,EAAI2qD,SAASlS,KAAK4F,OAAOv9B,MAAMviB,EAAGA,EAAI,IAC1C,OAAOyB,GAAKnB,EAAEqc,GAAKlb,EAAE,GAAIzB,EAAIyB,EAAE,GAAG0H,SAAW,EAG/C,SAAS2jD,sBAAsBxsD,EAAGw/C,OAAQ9/C,GACxC,IAAIyB,EAAI2qD,SAASlS,KAAK4F,OAAOv9B,MAAMviB,EAAGA,EAAI,IAC1C,OAAOyB,GAAKnB,EAAEysD,GAAKtrD,EAAE,GAAIzB,EAAIyB,EAAE,GAAG0H,SAAW,EAG/C,SAAS6jD,mBAAmB1sD,EAAGw/C,OAAQ9/C,GACrC,IAAIyB,EAAI2qD,SAASlS,KAAK4F,OAAOv9B,MAAMviB,EAAGA,EAAI,IAC1C,OAAOyB,GAAKnB,EAAE2sD,GAAKxrD,EAAE,GAAIzB,EAAIyB,EAAE,GAAG0H,SAAW,EAG/C,SAAS+jD,sBAAsB5sD,EAAGw/C,OAAQ9/C,GACxC,IAAIyB,EAAI2qD,SAASlS,KAAK4F,OAAOv9B,MAAMviB,EAAGA,EAAI,IAC1C,OAAOyB,GAAKnB,EAAE6sD,GAAK1rD,EAAE,GAAIzB,EAAIyB,EAAE,GAAG0H,SAAW,EAG/C,SAASikD,cAAc9sD,EAAGw/C,OAAQ9/C,GAChC,IAAIyB,EAAI2qD,SAASlS,KAAK4F,OAAOv9B,MAAMviB,EAAGA,EAAI,IAC1C,OAAOyB,GAAKnB,EAAE2K,GAAKxJ,EAAE,GAAIzB,EAAIyB,EAAE,GAAG0H,SAAW,EAG/C,SAASkkD,UAAU/sD,EAAGw/C,OAAQ9/C,GAC5B,IAAIyB,EAAI2qD,SAASlS,KAAK4F,OAAOv9B,MAAMviB,EAAGA,EAAI,IAC1C,OAAOyB,GAAKnB,EAAE2K,GAAKxJ,EAAE,KAAOA,EAAE,GAAK,GAAK,KAAO,KAAOzB,EAAIyB,EAAE,GAAG0H,SAAW,EAG5E,SAASmkD,UAAUhtD,EAAGw/C,OAAQ9/C,GAC5B,IAAIyB,EAAI,+BAA+By4C,KAAK4F,OAAOv9B,MAAMviB,EAAGA,EAAI,IAChE,OAAOyB,GAAKnB,EAAEitD,EAAI9rD,EAAE,GAAK,IAAMA,EAAE,IAAMA,EAAE,IAAM,OAAQzB,EAAIyB,EAAE,GAAG0H,SAAW,EAG7E,SAASqkD,iBAAiBltD,EAAGw/C,OAAQ9/C,GACnC,IAAIyB,EAAI2qD,SAASlS,KAAK4F,OAAOv9B,MAAMviB,EAAGA,EAAI,IAC1C,OAAOyB,GAAKnB,EAAEF,EAAIqB,EAAE,GAAK,EAAGzB,EAAIyB,EAAE,GAAG0H,SAAW,EAGlD,SAASskD,gBAAgBntD,EAAGw/C,OAAQ9/C,GAClC,IAAIyB,EAAI2qD,SAASlS,KAAK4F,OAAOv9B,MAAMviB,EAAGA,EAAI,IAC1C,OAAOyB,GAAKnB,EAAEA,GAAKmB,EAAE,GAAIzB,EAAIyB,EAAE,GAAG0H,SAAW,EAG/C,SAASukD,eAAeptD,EAAGw/C,OAAQ9/C,GACjC,IAAIyB,EAAI2qD,SAASlS,KAAK4F,OAAOv9B,MAAMviB,EAAGA,EAAI,IAC1C,OAAOyB,GAAKnB,EAAEF,EAAI,EAAGE,EAAEA,GAAKmB,EAAE,GAAIzB,EAAIyB,EAAE,GAAG0H,SAAW,EAGxD,SAASwkD,YAAYrtD,EAAGw/C,OAAQ9/C,GAC9B,IAAIyB,EAAI2qD,SAASlS,KAAK4F,OAAOv9B,MAAMviB,EAAGA,EAAI,IAC1C,OAAOyB,GAAKnB,EAAEmJ,GAAKhI,EAAE,GAAIzB,EAAIyB,EAAE,GAAG0H,SAAW,EAG/C,SAASykD,aAAattD,EAAGw/C,OAAQ9/C,GAC/B,IAAIyB,EAAI2qD,SAASlS,KAAK4F,OAAOv9B,MAAMviB,EAAGA,EAAI,IAC1C,OAAOyB,GAAKnB,EAAE4J,GAAKzI,EAAE,GAAIzB,EAAIyB,EAAE,GAAG0H,SAAW,EAG/C,SAAS0kD,aAAavtD,EAAGw/C,OAAQ9/C,GAC/B,IAAIyB,EAAI2qD,SAASlS,KAAK4F,OAAOv9B,MAAMviB,EAAGA,EAAI,IAC1C,OAAOyB,GAAKnB,EAAE8J,GAAK3I,EAAE,GAAIzB,EAAIyB,EAAE,GAAG0H,SAAW,EAG/C,SAAS2kD,kBAAkBxtD,EAAGw/C,OAAQ9/C,GACpC,IAAIyB,EAAI2qD,SAASlS,KAAK4F,OAAOv9B,MAAMviB,EAAGA,EAAI,IAC1C,OAAOyB,GAAKnB,EAAEorD,GAAKjqD,EAAE,GAAIzB,EAAIyB,EAAE,GAAG0H,SAAW,EAG/C,SAAS4kD,kBAAkBztD,EAAGw/C,OAAQ9/C,GACpC,IAAIyB,EAAI2qD,SAASlS,KAAK4F,OAAOv9B,MAAMviB,EAAGA,EAAI,IAC1C,OAAOyB,GAAKnB,EAAEorD,EAAIpgD,KAAK8M,MAAM3W,EAAE,GAAK,KAAOzB,EAAIyB,EAAE,GAAG0H,SAAW,EAGjE,SAAS6kD,oBAAoB1tD,EAAGw/C,OAAQ9/C,GACtC,IAAIyB,EAAI4qD,UAAUnS,KAAK4F,OAAOv9B,MAAMviB,EAAGA,EAAI,IAC3C,OAAOyB,EAAIzB,EAAIyB,EAAE,GAAG0H,QAAU,EAGhC,SAAS8kD,mBAAmB3tD,EAAGw/C,OAAQ9/C,GACrC,IAAIyB,EAAI2qD,SAASlS,KAAK4F,OAAOv9B,MAAMviB,IACnC,OAAOyB,GAAKnB,EAAE4tD,GAAKzsD,EAAE,GAAIzB,EAAIyB,EAAE,GAAG0H,SAAW,EAG/C,SAASglD,0BAA0B7tD,EAAGw/C,OAAQ9/C,GAC5C,IAAIyB,EAAI2qD,SAASlS,KAAK4F,OAAOv9B,MAAMviB,IACnC,OAAOyB,GAAKnB,EAAE4tD,EAAc,KAARzsD,EAAE,GAAYzB,EAAIyB,EAAE,GAAG0H,SAAW,EAGxD,SAASilD,iBAAiB9tD,EAAG0B,GAC3B,OAAOsF,WAAIhH,EAAEsK,UAAW5I,EAAG,GAG7B,SAASqsD,aAAa/tD,EAAG0B,GACvB,OAAOsF,WAAIhH,EAAEwJ,WAAY9H,EAAG,GAG9B,SAASssD,aAAahuD,EAAG0B,GACvB,OAAOsF,WAAIhH,EAAEwJ,WAAa,IAAM,GAAI9H,EAAG,GAGzC,SAASusD,gBAAgBjuD,EAAG0B,GAC1B,OAAOsF,WAAI,EAAIknD,QAAQlzC,MAAMmzC,SAASnuD,GAAIA,GAAI0B,EAAG,GAGnD,SAAS0sD,mBAAmBpuD,EAAG0B,GAC7B,OAAOsF,WAAIhH,EAAEiK,kBAAmBvI,EAAG,GAGrC,SAAS2sD,mBAAmBruD,EAAG0B,GAC7B,OAAO0sD,mBAAmBpuD,EAAG0B,GAAK,MAGpC,SAAS4sD,kBAAkBtuD,EAAG0B,GAC5B,OAAOsF,WAAIhH,EAAEyK,WAAa,EAAG/I,EAAG,GAGlC,SAAS6sD,cAAcvuD,EAAG0B,GACxB,OAAOsF,WAAIhH,EAAE6J,aAAcnI,EAAG,GAGhC,SAAS8sD,cAAcxuD,EAAG0B,GACxB,OAAOsF,WAAIhH,EAAE+J,aAAcrI,EAAG,GAGhC,SAAS+sD,0BAA0BzuD,GACjC,IAAImK,IAAMnK,EAAEoK,SACZ,OAAe,IAARD,IAAY,EAAIA,IAGzB,SAASukD,uBAAuB1uD,EAAG0B,GACjC,OAAOsF,WAAI2nD,OAAW3zC,MAAMmzC,SAASnuD,GAAIA,GAAI0B,EAAG,GAGlD,SAASktD,oBAAoB5uD,EAAG0B,GAC9B,IAAIyI,IAAMnK,EAAEoK,SAEZ,OADApK,EAAKmK,KAAO,GAAa,IAARA,IAAa0kD,SAAa7uD,GAAK6uD,SAAax8B,KAAKryB,GAC3DgH,WAAI6nD,SAAa7zC,MAAMmzC,SAASnuD,GAAIA,IAA+B,IAAzBmuD,SAASnuD,GAAGoK,UAAiB1I,EAAG,GAGnF,SAASotD,0BAA0B9uD,GACjC,OAAOA,EAAEoK,SAGX,SAAS2kD,uBAAuB/uD,EAAG0B,GACjC,OAAOsF,WAAIgoD,OAAWh0C,MAAMmzC,SAASnuD,GAAIA,GAAI0B,EAAG,GAGlD,SAASutD,kBAAWjvD,EAAG0B,GACrB,OAAOsF,WAAIhH,EAAEkL,cAAgB,IAAKxJ,EAAG,GAGvC,SAASwtD,eAAelvD,EAAG0B,GACzB,OAAOsF,WAAIhH,EAAEkL,cAAgB,IAAOxJ,EAAG,GAGzC,SAASytD,WAAWnvD,GAClB,IAAI87C,EAAI97C,EAAE6oD,oBACV,OAAQ/M,EAAI,EAAI,KAAOA,IAAM,EAAG,MAC1B90C,WAAI80C,EAAI,GAAK,EAAG,IAAK,GACrB90C,WAAI80C,EAAI,GAAI,IAAK,GAGzB,SAASsT,oBAAoBpvD,EAAG0B,GAC9B,OAAOsF,WAAIhH,EAAEmqD,aAAczoD,EAAG,GAGhC,SAAS2tD,gBAAgBrvD,EAAG0B,GAC1B,OAAOsF,WAAIhH,EAAE+pD,cAAeroD,EAAG,GAGjC,SAAS4tD,gBAAgBtvD,EAAG0B,GAC1B,OAAOsF,WAAIhH,EAAE+pD,cAAgB,IAAM,GAAIroD,EAAG,GAG5C,SAAS6tD,mBAAmBvvD,EAAG0B,GAC7B,OAAOsF,WAAI,EAAIgjD,WAAOhvC,MAAMiwC,YAAQjrD,GAAIA,GAAI0B,EAAG,GAGjD,SAAS8tD,sBAAsBxvD,EAAG0B,GAChC,OAAOsF,WAAIhH,EAAEyvD,qBAAsB/tD,EAAG,GAGxC,SAASguD,sBAAsB1vD,EAAG0B,GAChC,OAAO8tD,sBAAsBxvD,EAAG0B,GAAK,MAGvC,SAASiuD,qBAAqB3vD,EAAG0B,GAC/B,OAAOsF,WAAIhH,EAAE+qD,cAAgB,EAAGrpD,EAAG,GAGrC,SAASkuD,iBAAiB5vD,EAAG0B,GAC3B,OAAOsF,WAAIhH,EAAE4pD,gBAAiBloD,EAAG,GAGnC,SAASmuD,iBAAiB7vD,EAAG0B,GAC3B,OAAOsF,WAAIhH,EAAE0oD,gBAAiBhnD,EAAG,GAGnC,SAASouD,6BAA6B9vD,GACpC,IAAI+vD,IAAM/vD,EAAEqqD,YACZ,OAAe,IAAR0F,IAAY,EAAIA,IAGzB,SAASC,0BAA0BhwD,EAAG0B,GACpC,OAAOsF,WAAIsjD,UAAUtvC,MAAMiwC,YAAQjrD,GAAIA,GAAI0B,EAAG,GAGhD,SAASuuD,uBAAuBjwD,EAAG0B,GACjC,IAAIyI,IAAMnK,EAAEqqD,YAEZ,OADArqD,EAAKmK,KAAO,GAAa,IAARA,IAAaugD,YAAY1qD,GAAK0qD,YAAYr4B,KAAKryB,GACzDgH,WAAI0jD,YAAY1vC,MAAMiwC,YAAQjrD,GAAIA,IAAiC,IAA3BirD,YAAQjrD,GAAGqqD,aAAoB3oD,EAAG,GAGnF,SAASwuD,6BAA6BlwD,GACpC,OAAOA,EAAEqqD,YAGX,SAAS8F,0BAA0BnwD,EAAG0B,GACpC,OAAOsF,WAAIujD,UAAUvvC,MAAMiwC,YAAQjrD,GAAIA,GAAI0B,EAAG,GAGhD,SAAS0uD,cAAcpwD,EAAG0B,GACxB,OAAOsF,WAAIhH,EAAEgrD,iBAAmB,IAAKtpD,EAAG,GAG1C,SAAS2uD,kBAAkBrwD,EAAG0B,GAC5B,OAAOsF,WAAIhH,EAAEgrD,iBAAmB,IAAOtpD,EAAG,GAG5C,SAAS4uD,gBACP,MAAO,QAGT,SAASC,uBACP,MAAO,IAGT,SAASC,oBAAoBxwD,GAC3B,OAAQA,EAGV,SAASywD,2BAA2BzwD,GAClC,OAAOgL,KAAK8M,OAAO9X,EAAI,MC3mBV,SAASsmD,4BAAc7W,YAMpC,OALA2U,yBDea,SAASmC,aAAanC,QACnC,IAAIsM,gBAAkBtM,OAAOuM,SACzBC,YAAcxM,OAAOt9C,KACrB+pD,YAAczM,OAAO0M,KACrBC,eAAiB3M,OAAO4M,QACxBC,gBAAkB7M,OAAO8M,KACzBC,qBAAuB/M,OAAOgN,UAC9BC,cAAgBjN,OAAOkN,OACvBC,mBAAqBnN,OAAOoN,YAE5BC,SAAWvF,SAAS6E,gBACpBW,aAAetF,aAAa2E,gBAC5BY,UAAYzF,SAAS+E,iBACrBW,cAAgBxF,aAAa6E,iBAC7BY,eAAiB3F,SAASiF,sBAC1BW,mBAAqB1F,aAAa+E,sBAClCY,QAAU7F,SAASmF,eACnBW,YAAc5F,aAAaiF,eAC3BY,aAAe/F,SAASqF,oBACxBW,iBAAmB9F,aAAamF,oBAEhCY,SACFrwD,EAkPF,SAASswD,mBAAmBpyD,GAC1B,OAAOmxD,qBAAqBnxD,EAAEoK,WAlP9BC,EAqPF,SAASgoD,cAAcryD,GACrB,OAAOixD,gBAAgBjxD,EAAEoK,WArPzBG,EAwPF,SAAS+nD,iBAAiBtyD,GACxB,OAAOuxD,mBAAmBvxD,EAAEyK,aAxP5BC,EA2PF,SAAS6nD,YAAYvyD,GACnB,OAAOqxD,cAAcrxD,EAAEyK,aA3PvB1K,EAAK,KACLC,EAAK8tD,iBACLlsD,EAAKksD,iBACLpsC,EAAK2sC,mBACLllD,EAAK4kD,aACLlsC,EAAKmsC,aACLhsC,EAAKisC,gBACL7C,EAAKgD,mBACLtuD,EAAKwuD,kBACL1kD,EAAK2kD,cACL7sD,EAoPF,SAAS8wD,aAAaxyD,GACpB,OAAO+wD,iBAAiB/wD,EAAEwJ,YAAc,MApPxCokD,EAAK4C,oBACL7uD,EAAK8uD,2BACL3mD,EAAK0kD,cACLnyC,EAAKoyC,0BACLhC,EAAKiC,uBACL/B,EAAKiC,oBACLtC,EAAKwC,0BACLjC,EAAKkC,uBACLzrB,EAAK,KACLyhB,EAAK,KACLp6C,EAAKskD,kBACL7jD,EAAK8jD,eACLjC,EAAKkC,WACLvK,IAAK2L,sBAGHkC,YACF3wD,EAsOF,SAAS4wD,sBAAsB1yD,GAC7B,OAAOmxD,qBAAqBnxD,EAAEqqD,cAtO9BhgD,EAyOF,SAASsoD,iBAAiB3yD,GACxB,OAAOixD,gBAAgBjxD,EAAEqqD,cAzOzB9/C,EA4OF,SAASqoD,oBAAoB5yD,GAC3B,OAAOuxD,mBAAmBvxD,EAAE+qD,gBA5O5BrgD,EA+OF,SAASmoD,eAAe7yD,GACtB,OAAOqxD,cAAcrxD,EAAE+qD,gBA/OvBhrD,EAAK,KACLC,EAAKovD,oBACLxtD,EAAKwtD,oBACL1tC,EAAKguC,sBACLvmD,EAAKkmD,gBACLxtC,EAAKytC,gBACLttC,EAAKutC,mBACLnE,EAAKoE,sBACL1vD,EAAK6vD,qBACL/lD,EAAKgmD,iBACLluD,EAwOF,SAASoxD,gBAAgB9yD,GACvB,OAAO+wD,iBAAiB/wD,EAAE+pD,eAAiB,MAxO3C6D,EAAK4C,oBACL7uD,EAAK8uD,2BACL3mD,EAAK+lD,iBACLxzC,EAAKyzC,6BACLrD,EAAKuD,0BACLrD,EAAKsD,uBACL3D,EAAK4D,6BACLrD,EAAKsD,0BACL7sB,EAAK,KACLyhB,EAAK,KACLp6C,EAAKylD,cACLhlD,EAAKilD,kBACLpD,EAAKqD,cACL1L,IAAK2L,sBAGHwC,QACFjxD,EAkJF,SAASkxD,kBAAkBhzD,EAAGw/C,OAAQ9/C,GACpC,IAAIyB,EAAI0wD,eAAejY,KAAK4F,OAAOv9B,MAAMviB,IACzC,OAAOyB,GAAKnB,EAAEssD,EAAIwF,mBAAmB3wD,EAAE,GAAGyH,eAAgBlJ,EAAIyB,EAAE,GAAG0H,SAAW,GAnJ9EwB,EAsJF,SAAS4oD,aAAajzD,EAAGw/C,OAAQ9/C,GAC/B,IAAIyB,EAAIwwD,UAAU/X,KAAK4F,OAAOv9B,MAAMviB,IACpC,OAAOyB,GAAKnB,EAAEssD,EAAIsF,cAAczwD,EAAE,GAAGyH,eAAgBlJ,EAAIyB,EAAE,GAAG0H,SAAW,GAvJzE0B,EA0JF,SAAS2oD,gBAAgBlzD,EAAGw/C,OAAQ9/C,GAClC,IAAIyB,EAAI8wD,aAAarY,KAAK4F,OAAOv9B,MAAMviB,IACvC,OAAOyB,GAAKnB,EAAEF,EAAIoyD,iBAAiB/wD,EAAE,GAAGyH,eAAgBlJ,EAAIyB,EAAE,GAAG0H,SAAW,GA3J5E6B,EA8JF,SAASyoD,WAAWnzD,EAAGw/C,OAAQ9/C,GAC7B,IAAIyB,EAAI4wD,QAAQnY,KAAK4F,OAAOv9B,MAAMviB,IAClC,OAAOyB,GAAKnB,EAAEF,EAAIkyD,YAAY7wD,EAAE,GAAGyH,eAAgBlJ,EAAIyB,EAAE,GAAG0H,SAAW,GA/JvE9I,EAkKF,SAASqzD,oBAAoBpzD,EAAGw/C,OAAQ9/C,GACtC,OAAO2zD,eAAerzD,EAAG0wD,gBAAiBlR,OAAQ9/C,IAlKlDM,EAAKmtD,gBACLvrD,EAAKurD,gBACLzrC,EAAK+rC,kBACLtkD,EAAKkkD,YACLxrC,EAAKwrC,YACLrrC,EAAKorC,eACLhC,EAAKoC,kBACL1tD,EAAKotD,iBACLtjD,EAAK0jD,aACL5rD,EA+HF,SAAS4xD,YAAYtzD,EAAGw/C,OAAQ9/C,GAC9B,IAAIyB,EAAIswD,SAAS7X,KAAK4F,OAAOv9B,MAAMviB,IACnC,OAAOyB,GAAKnB,EAAE0B,EAAIgwD,aAAavwD,EAAE,GAAGyH,eAAgBlJ,EAAIyB,EAAE,GAAG0H,SAAW,GAhIxE+kD,EAAKD,mBACLhsD,EAAKksD,0BACL/jD,EAAKyjD,aACLlxC,EAAKkwC,yBACLE,EAAKD,sBACLG,EAAKD,mBACLJ,EAAKD,yBACLQ,EAAKD,sBACLtpB,EAmJF,SAASiwB,gBAAgBvzD,EAAGw/C,OAAQ9/C,GAClC,OAAO2zD,eAAerzD,EAAG4wD,YAAapR,OAAQ9/C,IAnJ9CqlD,EAsJF,SAASyO,gBAAgBxzD,EAAGw/C,OAAQ9/C,GAClC,OAAO2zD,eAAerzD,EAAG6wD,YAAarR,OAAQ9/C,IAtJ9CiL,EAAKoiD,UACL3hD,EAAK0hD,cACLG,EAAKD,UACLpI,IAAK8I,qBAWP,SAAS7H,UAAUjC,UAAWuO,SAC5B,OAAO,SAASrrD,MACd,IAII/G,EACAiH,IACAE,OANAs4C,UACA9/C,GAAK,EACLsiB,EAAI,EACJ7gB,EAAIyiD,UAAU/6C,OAOlB,IAFM/B,gBAAgBC,OAAOD,KAAO,IAAIC,MAAMD,SAErCpH,EAAIyB,GACqB,KAA5ByiD,UAAUpiC,WAAW9hB,KACvB8/C,OAAOnyC,KAAKu2C,UAAU3hC,MAAMD,EAAGtiB,IACgB,OAA1CsH,IAAM2kD,KAAK5rD,EAAI6jD,UAAU7e,SAASrlC,KAAcK,EAAI6jD,UAAU7e,SAASrlC,GACvEsH,IAAY,MAANjH,EAAY,IAAM,KACzBmH,OAASirD,QAAQpyD,MAAIA,EAAImH,OAAOJ,KAAME,MAC1Cw4C,OAAOnyC,KAAKtN,GACZiiB,EAAItiB,EAAI,GAKZ,OADA8/C,OAAOnyC,KAAKu2C,UAAU3hC,MAAMD,EAAGtiB,IACxB8/C,OAAOt1C,KAAK,KAIvB,SAASupD,SAAS7P,UAAW8P,SAC3B,OAAO,SAASlU,QACd,IAEImU,KAAMxpD,IAFNnK,EAAIurD,QAAQ,MAGhB,GAFQ8H,eAAerzD,EAAG4jD,UAAWpE,QAAU,GAAI,IAE1CA,OAAO32C,OAAQ,OAAO,KAG/B,GAAI,MAAO7I,EAAG,OAAO,IAAI+G,KAAK/G,EAAE4tD,GAMhC,GAHI,MAAO5tD,IAAGA,EAAEmJ,EAAInJ,EAAEmJ,EAAI,GAAW,GAANnJ,EAAE0B,GAG7B,MAAO1B,EAAG,CACZ,GAAIA,EAAE2sD,EAAI,GAAK3sD,EAAE2sD,EAAI,GAAI,OAAO,KAC1B,MAAO3sD,IAAIA,EAAEssD,EAAI,GACnB,MAAOtsD,GAET2zD,MAD8BxpD,KAA9BwpD,KAAOtI,QAAQE,QAAQvrD,EAAE2K,KAAgB0/C,aAC5B,GAAa,IAARlgD,IAAYogD,UAAUl4B,KAAKshC,MAAQpJ,UAAUoJ,MAC/DA,KAAO3J,WAAO5B,OAAOuL,KAAkB,GAAX3zD,EAAE2sD,EAAI,IAClC3sD,EAAE2K,EAAIgpD,KAAK3I,iBACXhrD,EAAEF,EAAI6zD,KAAK5I,cACX/qD,EAAEA,EAAI2zD,KAAKxJ,cAAgBnqD,EAAEssD,EAAI,GAAK,IAGtCqH,MAD8BxpD,KAA9BwpD,KAAOD,QAAQnI,QAAQvrD,EAAE2K,KAAgBP,UAC5B,GAAa,IAARD,IAAY6kD,OAAW38B,KAAKshC,MAAQ3E,OAAW2E,MACjEA,KAAOzF,QAAQ9F,OAAOuL,KAAkB,GAAX3zD,EAAE2sD,EAAI,IACnC3sD,EAAE2K,EAAIgpD,KAAKzoD,cACXlL,EAAEF,EAAI6zD,KAAKlpD,WACXzK,EAAEA,EAAI2zD,KAAKrpD,WAAatK,EAAEssD,EAAI,GAAK,QAE5B,MAAOtsD,GAAK,MAAOA,KACtB,MAAOA,IAAIA,EAAEssD,EAAI,MAAOtsD,EAAIA,EAAEqc,EAAI,EAAI,MAAOrc,EAAI,EAAI,GAC3DmK,IAAM,MAAOnK,EAAIqrD,QAAQE,QAAQvrD,EAAE2K,IAAI0/C,YAAcqJ,QAAQnI,QAAQvrD,EAAE2K,IAAIP,SAC3EpK,EAAEF,EAAI,EACNE,EAAEA,EAAI,MAAOA,GAAKA,EAAEssD,EAAI,GAAK,EAAU,EAANtsD,EAAE6sD,GAAS1iD,IAAM,GAAK,EAAInK,EAAEssD,EAAU,EAANtsD,EAAEysD,GAAStiD,IAAM,GAAK,GAKzF,MAAI,MAAOnK,GACTA,EAAEmJ,GAAKnJ,EAAEitD,EAAI,IAAM,EACnBjtD,EAAE4J,GAAK5J,EAAEitD,EAAI,IACN5B,QAAQrrD,IAIV0zD,QAAQ1zD,IAInB,SAASqzD,eAAerzD,EAAG4jD,UAAWpE,OAAQx9B,GAO5C,IANA,IAGIjiB,EACA6N,MAJAlO,EAAI,EACJyB,EAAIyiD,UAAU/6C,OACd/I,EAAI0/C,OAAO32C,OAIRnJ,EAAIyB,GAAG,CACZ,GAAI6gB,GAAKliB,EAAG,OAAQ,EAEpB,GAAU,MADVC,EAAI6jD,UAAUpiC,WAAW9hB,OAIvB,GAFAK,EAAI6jD,UAAU7e,OAAOrlC,OACrBkO,MAAQmlD,OAAOhzD,KAAK4rD,KAAO/H,UAAU7e,OAAOrlC,KAAOK,MACnCiiB,EAAIpU,MAAM5N,EAAGw/C,OAAQx9B,IAAM,EAAI,OAAQ,OAClD,GAAIjiB,GAAKy/C,OAAOh+B,WAAWQ,KAChC,OAAQ,EAIZ,OAAOA,EAgFT,OA1LAmwC,QAAQ7uB,EAAIuiB,UAAU+K,YAAauB,SACnCA,QAAQpN,EAAIc,UAAUgL,YAAasB,SACnCA,QAAQpyD,EAAI8lD,UAAU6K,gBAAiByB,SACvCM,WAAWnvB,EAAIuiB,UAAU+K,YAAa6B,YACtCA,WAAW1N,EAAIc,UAAUgL,YAAa4B,YACtCA,WAAW1yD,EAAI8lD,UAAU6K,gBAAiB+B,aAsLxCvrD,OAAQ,SAAAA,OAAS08C,WACf,IAAIliC,EAAImkC,UAAUjC,WAAa,GAAIuO,SAEnC,OADAzwC,EAAEjY,SAAW,WAAa,OAAOm6C,WAC1BliC,GAET9T,MAAO,SAAAA,MAASg2C,WACd,IAAIliD,EAAI+xD,SAAS7P,WAAa,GAAIuH,WAElC,OADAzpD,EAAE+H,SAAW,WAAa,OAAOm6C,WAC1BliD,GAET+pD,UAAW,SAAAA,UAAS7H,WAClB,IAAIliC,EAAImkC,UAAUjC,WAAa,GAAI6O,YAEnC,OADA/wC,EAAEjY,SAAW,WAAa,OAAOm6C,WAC1BliC,GAETgqC,SAAU,SAAAA,SAAS9H,WACjB,IAAIliD,EAAI+xD,SAAS7P,UAAWyH,SAE5B,OADA3pD,EAAE+H,SAAW,WAAa,OAAOm6C,WAC1BliD,IClVF6kD,CAAa9W,YACtB+b,WAAapH,yBAAOl9C,OACRk9C,yBAAOx2C,MACnB69C,UAAYrH,yBAAOqH,UACnBC,SAAWtH,yBAAOsH,SACXtH,yBAjBTkC,EACEqK,SAAU,SACV7pD,KAAM,aACNgqD,KAAM,eACNE,SAAU,KAAM,MAChBE,MAAO,SAAU,SAAU,UAAW,YAAa,WAAY,SAAU,YACzEE,WAAY,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,OACtDE,QAAS,UAAW,WAAY,QAAS,QAAS,MAAO,OAAQ,OAAQ,SAAU,YAAa,UAAW,WAAY,YACvHE,aAAc,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,SCR7EzqD,KAAKvF,UAAUoyD,aAEzBnI,UARoB,0BCMV,IAAI1kD,KAAK,6BAEnB2kD,SDRoB,yBCM1B,ICAImI,oBAAiB,IACjBtL,oBAAkC,GAAjBsL,oBACjBC,kBAAgC,GAAjBvL,oBACfwL,iBAA6B,GAAfD,kBACdtL,kBAA6B,EAAduL,iBACfC,cAA8B,GAAdD,iBAChBE,aAA6B,IAAdF,iBAEnB,SAASjtD,UAAKlG,GACZ,OAAO,IAAImG,KAAKnG,GAGlB,SAASyqC,YAAOzqC,GACd,OAAOA,aAAamG,MAAQnG,GAAK,IAAImG,MAAMnG,GAGtC,SAASszD,SAAS/oD,KAAMX,MAAOmpD,KAAMxpD,IAAKy+C,KAAMD,OAAQF,OAAQH,YAAaphD,QAClF,IAAIgnC,MAAQ6U,WAAWP,oBAAeC,YAClCvT,OAAShB,MAAMgB,OACfvxB,OAASuwB,MAAMvwB,OAEfw2C,kBAAoBjtD,OAAO,OAC3BktD,aAAeltD,OAAO,OACtBmtD,aAAentD,OAAO,SACtBotD,WAAaptD,OAAO,SACpBqtD,UAAYrtD,OAAO,SACnBstD,WAAattD,OAAO,SACpBqrD,YAAcrrD,OAAO,MACrB+nD,WAAa/nD,OAAO,MAEpButD,gBACDhM,OAAS,EAAQoL,sBACjBpL,OAAS,EAAI,EAAIoL,sBACjBpL,OAAQ,GAAI,GAAKoL,sBACjBpL,OAAQ,GAAI,GAAKoL,sBACjBlL,OAAS,EAAQJ,sBACjBI,OAAS,EAAI,EAAIJ,sBACjBI,OAAQ,GAAI,GAAKJ,sBACjBI,OAAQ,GAAI,GAAKJ,sBACfK,KAAO,EAAQkL,oBACflL,KAAO,EAAI,EAAIkL,oBACflL,KAAO,EAAI,EAAIkL,oBACflL,KAAM,GAAI,GAAKkL,oBACd3pD,IAAM,EAAQ4pD,mBACd5pD,IAAM,EAAI,EAAI4pD,mBACfJ,KAAO,EAAQnL,oBAChBh+C,MAAQ,EAAQwpD,gBAChBxpD,MAAQ,EAAI,EAAIwpD,gBACf7oD,KAAO,EAAQ8oD,eAGpB,SAASpN,WAAW//C,MAClB,OAAQ2hD,OAAO3hD,MAAQA,KAAOqtD,kBACxBxL,OAAO7hD,MAAQA,KAAOstD,aACtBxL,KAAK9hD,MAAQA,KAAOutD,aACpBlqD,IAAIrD,MAAQA,KAAOwtD,WACnB9pD,MAAM1D,MAAQA,KAAQ6sD,KAAK7sD,MAAQA,KAAOytD,UAAYC,WACtDrpD,KAAKrE,MAAQA,KAAOyrD,YACpBtD,YAAYnoD,MAGpB,SAAS4tD,aAAa3N,SAAU3hD,MAAOomC,KAAMC,MAM3C,GALgB,MAAZsb,WAAkBA,SAAW,IAKT,iBAAbA,SAAuB,CAChC,IAAIlE,OAAS73C,KAAKsnB,IAAIkZ,KAAOpmC,OAAS2hD,SAClCrnD,EAAIorC,SAAS,SAASprC,GAAK,OAAOA,EAAE,KAAOwrC,MAAMupB,cAAe5R,QAChEnjD,IAAM+0D,cAAc5rD,QACtB4iC,KAAOU,SAAS/mC,MAAQ6uD,aAAczoB,KAAOyoB,aAAclN,UAC3DA,SAAW57C,MACFzL,GAET+rC,MADA/rC,EAAI+0D,cAAc5R,OAAS4R,cAAc/0D,EAAI,GAAG,GAAK+0D,cAAc/0D,GAAG,GAAKmjD,OAASnjD,EAAI,EAAIA,IACnF,GACTqnD,SAAWrnD,EAAE,KAEb+rC,KAAOzgC,KAAK6P,IAAIsxB,SAAS/mC,MAAOomC,KAAMub,UAAW,GACjDA,SAAWuB,aAIf,OAAe,MAAR7c,KAAesb,SAAWA,SAASliC,MAAM4mB,MAsClD,OAnCAyC,MAAMgB,OAAS,SAASvkC,GACtB,OAAO,IAAI5D,KAAKmoC,OAAOvkC,KAGzBujC,MAAMvwB,OAAS,SAAS2J,GACtB,OAAO/a,UAAU1D,OAAS8U,OAAOvO,cAAIvP,KAAKynB,EAAG+jB,cAAW1tB,SAASvO,IAAItI,YAGvEonC,MAAMpC,MAAQ,SAASib,SAAUtb,MAC/B,IAII7qC,EAJAZ,EAAI2d,SACJ09B,GAAKr7C,EAAE,GACPs7C,GAAKt7C,EAAEA,EAAE6I,OAAS,GAClBrI,EAAI86C,GAAKD,GAKb,OAHI76C,IAAGI,EAAIy6C,GAAIA,GAAKC,GAAIA,GAAK16C,GAE7BA,GADAA,EAAI8zD,aAAa3N,SAAU1L,GAAIC,GAAI7P,OAC3B7qC,EAAE8H,MAAM2yC,GAAIC,GAAK,MAClB96C,EAAII,EAAE6pB,UAAY7pB,GAG3BstC,MAAM2Y,WAAa,SAAS7rC,MAAO4oC,WACjC,OAAoB,MAAbA,UAAoBiD,WAAa3/C,OAAO08C,YAGjD1V,MAAM4Y,KAAO,SAASC,SAAUtb,MAC9B,IAAIzrC,EAAI2d,SACR,OAAQopC,SAAW2N,aAAa3N,SAAU/mD,EAAE,GAAIA,EAAEA,EAAE6I,OAAS,GAAI4iC,OAC3D9tB,OAAOmpC,KAAK9mD,EAAG+mD,WACf7Y,OAGRA,MAAMC,KAAO,WACX,OAAOA,KAAKD,MAAOgmB,SAAS/oD,KAAMX,MAAOmpD,KAAMxpD,IAAKy+C,KAAMD,OAAQF,OAAQH,YAAaphD,UAGlFgnC,MAGM,IAAAymB,SAAA,WACb,OAAOT,SAAS/F,SAAUyG,UAAWC,OAAU3G,QAAS4G,SAAUC,WAAYC,WAAYC,gBAAiBzJ,YAAY7tC,QAAQ,IAAI5W,KAAK,IAAM,EAAG,GAAI,IAAIA,KAAK,IAAM,EAAG,MCrI1JmuD,WAAA,SAASvzD,GACtB,OAAOA,EAAE6N,MAAM,SAASJ,IAAI,SAASk0B,GACnC,MAAO,IAAMA,KCAF8a,sBAAO,gECAPA,uBAAO,4HCAPA,YCAAA,WAAO,4HDAPA,WAAO,6HECP+W,cAAyBtY,oBAAU,IAAK,GAAK,GAAMA,qBAAW,IAAK,GAAK,ICArEsY,cAAyBtY,qBAAW,IAAK,IAAM,KAAOA,oBAAU,GAAI,IAAM,KAE1EsY,cAAyBtY,oBAAU,IAAK,IAAM,KAAOA,oBAAU,GAAI,IAAM,KAE7EA,sBCLd,SAASuY,KAAK1sD,OACZ,IAAIvH,EAAIuH,MAAMG,OACd,OAAO,SAASjI,GACd,OAAO8H,MAAMsC,KAAK6P,IAAI,EAAG7P,KAAK2P,IAAIxZ,EAAI,EAAG6J,KAAK8M,MAAMlX,EAAIO,OAI7Ci0D,KAAKhX,WAAO,qgDAERgX,KAAKhX,WAAO,qgDAEVgX,KAAKhX,WAAO,qgDAEbgX,KAAKhX,WAAO,qgDCbjB,SAASiX,WAAWC,cACjC,IAAItO,GAAK,EACLC,GAAK,EACLnE,OAAQ,EAEZ,SAAS5U,MAAM5K,GACb,IAAI1iC,GAAK0iC,EAAI0jB,KAAOC,GAAKD,IACzB,OAAOsO,aAAaxS,MAAQ93C,KAAK6P,IAAI,EAAG7P,KAAK2P,IAAI,EAAG/Z,IAAMA,GAmB5D,OAhBAstC,MAAMvwB,OAAS,SAAS2J,GACtB,OAAO/a,UAAU1D,QAAUm+C,IAAM1/B,EAAE,GAAI2/B,IAAM3/B,EAAE,GAAI4mB,QAAU8Y,GAAIC,KAGnE/Y,MAAM4U,MAAQ,SAASx7B,GACrB,OAAO/a,UAAU1D,QAAUi6C,QAAUx7B,EAAG4mB,OAAS4U,OAGnD5U,MAAMonB,aAAe,SAAShuC,GAC5B,OAAO/a,UAAU1D,QAAUysD,aAAehuC,EAAG4mB,OAASonB,cAGxDpnB,MAAMC,KAAO,WACX,OAAOknB,WAAWC,cAAc33C,QAAQqpC,GAAIC,KAAKnE,MAAMA,QAGlD8D,UAAU1Y,OC5BJ,IAAAqnB,8BAAA,SAAS3R,WAEtB,IADA,IAAIziD,EAAIyiD,UAAU/6C,OAAS,EAAI,EAAGu1C,OAAS,IAAIpuC,MAAM7O,GAAIzB,EAAI,EACtDA,EAAIyB,GAAGi9C,OAAO1+C,GAAK,IAAMkkD,UAAU3hC,MAAU,EAAJviB,EAAa,IAAJA,GACzD,OAAO0+C,QCDMA,QCAAA,8BAAO,gEDAPA,8BAAO,qDEAPA,oCAAO,oDCAPA,qCAAO,4ECAPA,sCAAO,0DCAPA,sCAAO,oDCAPA,mCAAO,0DCAPA,mCAAO,oDCAPA,mCAAO,4ECAPoX,SAAA,SAASC,QACtB,OAAOC,SAAoBD,OAAOA,OAAO5sD,OAAS,KCAzC4sD,YAAS,IAAIzlD,MAAM,GAAGwS,OAC/B,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,yDACA,+DACA,sEACApT,IAAIgvC,+BAESgX,cAAKK,aCZTA,YAAS,IAAIzlD,MAAM,GAAGwS,OAC/B,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,yDACA,+DACA,sEACApT,IAAIgvC,+BAESgX,cAAKK,aCZTA,YAAS,IAAIzlD,MAAM,GAAGwS,OAC/B,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,yDACA,+DACA,sEACApT,IAAIgvC,+BAESgX,cAAKK,aCALL,cAZK,IAAIplD,MAAM,GAAGwS,OAC/B,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,yDACA,+DACA,sEACApT,IAAIgvC,gCCESgX,cAZK,IAAIplD,MAAM,GAAGwS,OAC/B,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,yDACA,+DACA,sEACApT,IAAIgvC,gCCESgX,cAZK,IAAIplD,MAAM,GAAGwS,OAC/B,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,yDACA,+DACA,sEACApT,IAAIgvC,gCCESgX,gBAZK,IAAIplD,MAAM,GAAGwS,OAC/B,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,yDACA,+DACA,sEACApT,IAAIgvC,gCCESgX,gBAZK,IAAIplD,MAAM,GAAGwS,OAC/B,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,yDACA,+DACA,sEACApT,IAAIgvC,gCCESgX,kBAZK,IAAIplD,MAAM,GAAGwS,OAC/B,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,yDACA,+DACA,sEACApT,IAAIgvC,gCCASgX,cAVK,IAAIplD,MAAM,GAAGwS,OAC/B,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,0DACApT,IAAIgvC,gCCESgX,cAVK,IAAIplD,MAAM,GAAGwS,OAC/B,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,0DACApT,IAAIgvC,gCCESgX,cAVK,IAAIplD,MAAM,GAAGwS,OAC/B,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,0DACApT,IAAIgvC,gCCESgX,cAVK,IAAIplD,MAAM,GAAGwS,OAC/B,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,0DACApT,IAAIgvC,gCCESgX,gBAVK,IAAIplD,MAAM,GAAGwS,OAC/B,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,0DACApT,IAAIgvC,gCCESgX,cAVK,IAAIplD,MAAM,GAAGwS,OAC/B,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,0DACApT,IAAIgvC,gCCESgX,cAVK,IAAIplD,MAAM,GAAGwS,OAC/B,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,0DACApT,IAAIgvC,gCCESgX,cAVK,IAAIplD,MAAM,GAAGwS,OAC/B,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,0DACApT,IAAIgvC,gCCESgX,gBAVK,IAAIplD,MAAM,GAAGwS,OAC/B,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,0DACApT,IAAIgvC,gCCESgX,cAVK,IAAIplD,MAAM,GAAGwS,OAC/B,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,0DACApT,IAAIgvC,gCCESgX,gBAVK,IAAIplD,MAAM,GAAGwS,OAC/B,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,0DACApT,IAAIgvC,gCCESgX,gBAVK,IAAIplD,MAAM,GAAGwS,OAC/B,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,0DACApT,IAAIgvC,gCCRKqX,aAAS,IAAIzlD,MAAM,GAAGwS,OAC/B,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,0DACApT,IAAIgvC,+BAESgX,eAAKK,cCALL,gBAVK,IAAIplD,MAAM,GAAGwS,OAC/B,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,0DACApT,IAAIgvC,gCCESgX,eAVK,IAAIplD,MAAM,GAAGwS,OAC/B,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,0DACApT,IAAIgvC,gCCESgX,iBAVK,IAAIplD,MAAM,GAAGwS,OAC/B,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,0DACApT,IAAIgvC,gCCESgX,cAVK,IAAIplD,MAAM,GAAGwS,OAC/B,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,0DACApT,IAAIgvC,gCCESgX,iBAVK,IAAIplD,MAAM,GAAGwS,OAC/B,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,0DACApT,IAAIgvC,gCCRS+W,yCAAyBtY,oBAAU,IAAK,GAAK,GAAMA,qBAAW,IAAK,GAAK,ICA5E8Y,aAAOR,cAAyBtY,qBAAW,IAAK,IAAM,KAAOA,oBAAU,GAAI,IAAM,KAEjF+Y,aAAOT,cAAyBtY,oBAAU,IAAK,IAAM,KAAOA,oBAAU,GAAI,IAAM,KAEvF98C,UAAI88C,sBAEOgZ,yBAAA,SAASj1D,IAClBA,EAAI,GAAKA,EAAI,KAAGA,GAAKoK,KAAK8M,MAAMlX,IACpC,IAAIk1D,GAAK9qD,KAAKsnB,IAAI1xB,EAAI,IAItB,OAHAb,UAAE8P,EAAI,IAAMjP,EAAI,IAChBb,UAAE4B,EAAI,IAAM,IAAMm0D,GAClB/1D,UAAEJ,EAAI,GAAM,GAAMm2D,GACX/1D,UAAI,ICbLo6C,YACKnvC,KAAKgwC,GACLhwC,KAAKgwC,GCFlB,SAASoa,aAAK1sD,OACZ,IAAIvH,EAAIuH,MAAMG,OACd,OAAO,SAASjI,GACd,OAAO8H,MAAMsC,KAAK6P,IAAI,EAAG7P,KAAK2P,IAAIxZ,EAAI,EAAG6J,KAAK8M,MAAMlX,EAAIO,OAI7Ci0D,0CAAKhX,8BAAO,qgDAEhB2X,cAAQX,aAAKhX,8BAAO,qgDAEpB4X,gBAAUZ,aAAKhX,8BAAO,qgDAEtB6X,eAASb,aAAKhX,8BAAO,qgDCfnB8X,sBAAwB,YACxBC,qBAAuB,cACvBC,sBAAwB,eACxBC,uBAAyB,aACzBC,uBAAyB,YACzBC,sBAAwB,cACxBC,uBAAyB,eACzBC,wBAA0B,aCHxBC,iBAHXC,OAAQ,UCKGC,cALXC,WAAY,YACZC,cAAe,cACfC,eAAgB,iBCHT90C,gBAAQjS,MAAMxO,UAAUygB,MCApB+0C,qBAAA,SAAS1zB,GACtB,OAAOA,GCELuE,SAAM,EACNqD,WAAQ,EACR+rB,YAAS,EACThsB,UAAO,EACPisB,QAAU,KAEd,SAASpX,WAAWxc,GAClB,MAAO,cAAgBA,EAAI,IAAO,MAGpC,SAASyc,WAAWp1C,GAClB,MAAO,gBAAkBA,EAAI,IAAO,IAiBtC,SAASwsD,WACP,OAAQhwD,KAAKiwD,OAGf,SAASC,UAAKC,OAAQppB,OACpB,IAAIqpB,iBACAC,WAAa,KACb3Q,WAAa,KACb4Q,cAAgB,KAChBC,cAAgB,EAChBC,cAAgB,EAChBC,YAAc,EACd/pB,EAAIypB,SAAWzvB,UAAOyvB,SAAWrsB,WAAQ,EAAI,EAC7C3H,EAAIg0B,SAAWrsB,WAAQqsB,SAAWpsB,WAAQ,IAAM,IAChDiW,UAAYmW,SAAWzvB,UAAOyvB,SAAWL,YAASnX,WAAaC,WAEnE,SAASsX,KAAKx1B,SACZ,IAAInd,OAAuB,MAAd8yC,WAAsBtpB,MAAMpC,MAAQoC,MAAMpC,MAAMp9B,MAAMw/B,MAAOqpB,eAAiBrpB,MAAMvwB,SAAY65C,WACzGtwD,OAAuB,MAAd2/C,WAAsB3Y,MAAM2Y,WAAa3Y,MAAM2Y,WAAWn4C,MAAMw/B,MAAOqpB,eAAiBtgC,qBAAY4vB,WAC7GgR,QAAU7sD,KAAK6P,IAAI68C,cAAe,GAAKE,YACvClvD,MAAQwlC,MAAMxlC,QACdovD,QAAUpvD,MAAM,GAAK,GACrBqvD,QAAUrvD,MAAMA,MAAMG,OAAS,GAAK,GACpC++B,UAAYsG,MAAMG,UA/B1B,SAAS2pB,YAAO9pB,OACd,IAAIka,OAASp9C,KAAK6P,IAAI,EAAGqzB,MAAMG,YAAc,GAAK,EAElD,OADIH,MAAMv8B,UAASy2C,OAASp9C,KAAK2G,MAAMy2C,SAChC,SAASpoD,GACd,OAAQkuC,MAAMluC,GAAKooD,SAVvB,SAAS/c,YAAO6C,OACd,OAAO,SAASluC,GACd,OAAQkuC,MAAMluC,MAmCqCkuC,MAAMC,QACrD8pB,UAAYp2B,QAAQo2B,UAAYp2B,QAAQo2B,YAAcp2B,QACtDhY,KAAOouC,UAAUC,UAAU,WAAWhmD,MAAM,OAC5CimD,KAAOF,UAAUC,UAAU,SAAShmD,KAAKwS,OAAQwpB,OAAO9gB,QACxDgrC,SAAWD,KAAKE,OAChBC,UAAYH,KAAKI,QAAQl+B,OAAO,KAAKm+B,KAAK,QAAS,QACnDC,KAAON,KAAKlzC,OAAO,QACnBzd,KAAO2wD,KAAKlzC,OAAO,QAEvB4E,KAAOA,KAAK7Y,MAAM6Y,KAAK0uC,QAAQG,OAAO,OAAQ,SACzCF,KAAK,QAAS,UACdA,KAAK,SAAU,SAEpBL,KAAOA,KAAKnnD,MAAMsnD,WAElBG,KAAOA,KAAKznD,MAAMsnD,UAAUj+B,OAAO,QAC9Bm+B,KAAK,SAAU,QACfA,KAAKl1B,EAAI,IAAKuK,EAAI6pB,gBAEvBlwD,KAAOA,KAAKwJ,MAAMsnD,UAAUj+B,OAAO,QAC9Bm+B,KAAK,OAAQ,QACbA,KAAKl1B,EAAGuK,EAAIgqB,SACZW,KAAK,KAAMlB,SAAWzvB,SAAM,MAAQyvB,SAAWL,YAAS,SAAW,WACnE/3B,MAAM,YAAau4B,eAEpB51B,UAAYo2B,YACdpuC,KAAOA,KAAK8uC,WAAW92B,SACvBs2B,KAAOA,KAAKQ,WAAW92B,SACvB42B,KAAOA,KAAKE,WAAW92B,SACvBr6B,KAAOA,KAAKmxD,WAAW92B,SAEvBu2B,SAAWA,SAASO,WAAW92B,SAC1B22B,KAAK,UAAWtB,SAChBsB,KAAK,YAAa,SAASx4D,GAAK,OAAOuI,SAASvI,EAAI4nC,SAAS5nC,IAAMmhD,UAAUnhD,GAAKmH,KAAKyxD,aAAa,eAEzGN,UACKE,KAAK,UAAWtB,SAChBsB,KAAK,YAAa,SAASx4D,GAAK,IAAI0B,EAAIyF,KAAKu/B,WAAW0wB,OAAQ,OAAOjW,UAAUz/C,GAAK6G,SAAS7G,EAAIA,EAAE1B,IAAM0B,EAAIkmC,SAAS5nC,OAG/Ho4D,SAASzrB,SAET9iB,KACK2uC,KAAK,IAAKlB,SAAWrsB,WAAQqsB,QAAUpsB,WAClC,IAAM2C,EAAI8pB,cAAgB,IAAMG,OAAS,QAAUC,OAAS,IAAMlqB,EAAI8pB,cACtE,IAAMG,OAAS,IAAMjqB,EAAI8pB,cAAgB,QAAUI,OAAS,IAAMlqB,EAAI8pB,eAEhFQ,KACKK,KAAK,UAAW,GAChBA,KAAK,YAAa,SAASx4D,GAAK,OAAOmhD,UAAUvZ,SAAS5nC,MAE/Dy4D,KACKD,KAAKl1B,EAAI,IAAKuK,EAAI6pB,eAEvBlwD,KACKgxD,KAAKl1B,EAAGuK,EAAIgqB,SACZrwD,KAAKN,QAEV+wD,UAAU99C,OAAOg9C,UACZqB,KAAK,OAAQ,QACbA,KAAK,YAAa,IAClBA,KAAK,cAAe,cACpBA,KAAK,cAAelB,SAAWpsB,WAAQ,QAAUosB,SAAWrsB,UAAO,MAAQ,UAEhFgtB,UACKvrB,KAAK,WAAavlC,KAAKiwD,OAASxvB,WA2CvC,OAxCAyvB,KAAKnpB,MAAQ,SAAS5mB,GACpB,OAAO/a,UAAU1D,QAAUqlC,MAAQ5mB,EAAG+vC,MAAQnpB,OAGhDmpB,KAAKI,cAAgB,SAASnwC,GAC5B,OAAO/a,UAAU1D,QAAU4uD,cAAgBnwC,EAAG+vC,MAAQI,eAGxDJ,KAAKvrB,MAAQ,WACX,OAAOyrB,cAAgBt1C,gBAAMpiB,KAAK0M,WAAY8qD,MAGhDA,KAAKE,cAAgB,SAASjwC,GAC5B,OAAO/a,UAAU1D,QAAU0uD,cAAqB,MAALjwC,KAAiBrF,gBAAMpiB,KAAKynB,GAAI+vC,MAAQE,cAAct1C,SAGnGo1C,KAAKG,WAAa,SAASlwC,GACzB,OAAO/a,UAAU1D,QAAU2uD,WAAkB,MAALlwC,EAAY,KAAOrF,gBAAMpiB,KAAKynB,GAAI+vC,MAAQG,YAAcA,WAAWv1C,SAG7Go1C,KAAKxQ,WAAa,SAASv/B,GACzB,OAAO/a,UAAU1D,QAAUg+C,WAAav/B,EAAG+vC,MAAQxQ,YAGrDwQ,KAAKwB,SAAW,SAASvxC,GACvB,OAAO/a,UAAU1D,QAAU6uD,cAAgBC,eAAiBrwC,EAAG+vC,MAAQK,eAGzEL,KAAKK,cAAgB,SAASpwC,GAC5B,OAAO/a,UAAU1D,QAAU6uD,eAAiBpwC,EAAG+vC,MAAQK,eAGzDL,KAAKM,cAAgB,SAASrwC,GAC5B,OAAO/a,UAAU1D,QAAU8uD,eAAiBrwC,EAAG+vC,MAAQM,eAGzDN,KAAKO,YAAc,SAAStwC,GAC1B,OAAO/a,UAAU1D,QAAU+uD,aAAetwC,EAAG+vC,MAAQO,aAGhDP,KClKT,IAAIyB,GAAK9tD,KAAKgwC,GACV+d,IAAM,EAAID,GAEVE,WAAaD,IADH,KAGd,SAASE,OACP9xD,KAAK+xD,IAAM/xD,KAAKgyD,IAChBhyD,KAAKiyD,IAAMjyD,KAAKkyD,IAAM,KACtBlyD,KAAKmgB,EAAI,GAGX,SAASuC,YACP,OAAO,IAAIovC,KAGbA,KAAKz3D,UAAYqoB,UAAKroB,WACpB2qB,YAAa8sC,KACbK,OAAQ,SAAAA,OAASh2B,EAAG34B,GAClBxD,KAAKmgB,GAAK,KAAOngB,KAAK+xD,IAAM/xD,KAAKiyD,KAAO91B,GAAK,KAAOn8B,KAAKgyD,IAAMhyD,KAAKkyD,KAAO1uD,IAE7E4uD,UAAW,SAAAA,YACQ,OAAbpyD,KAAKiyD,MACPjyD,KAAKiyD,IAAMjyD,KAAK+xD,IAAK/xD,KAAKkyD,IAAMlyD,KAAKgyD,IACrChyD,KAAKmgB,GAAK,MAGdkyC,OAAQ,SAAAA,OAASl2B,EAAG34B,GAClBxD,KAAKmgB,GAAK,KAAOngB,KAAKiyD,KAAO91B,GAAK,KAAOn8B,KAAKkyD,KAAO1uD,IAEvD8uD,iBAAkB,SAAAA,iBAASxS,GAAIyS,GAAIp2B,EAAG34B,GACpCxD,KAAKmgB,GAAK,MAAQ2/B,GAAM,MAAQyS,GAAM,KAAOvyD,KAAKiyD,KAAO91B,GAAK,KAAOn8B,KAAKkyD,KAAO1uD,IAEnFgvD,cAAe,SAAAA,cAAS1S,GAAIyS,GAAIE,GAAIC,GAAIv2B,EAAG34B,GACzCxD,KAAKmgB,GAAK,MAAQ2/B,GAAM,MAAQyS,GAAM,MAAQE,GAAM,MAAQC,GAAM,KAAO1yD,KAAKiyD,KAAO91B,GAAK,KAAOn8B,KAAKkyD,KAAO1uD,IAE/GmvD,MAAO,SAAAA,MAAS7S,GAAIyS,GAAIE,GAAIC,GAAIr5D,GAC9BymD,IAAMA,GAAIyS,IAAMA,GAAIE,IAAMA,GAAIC,IAAMA,GAAIr5D,GAAKA,EAC7C,IAAIwmD,GAAK7/C,KAAKiyD,IACVW,GAAK5yD,KAAKkyD,IACVW,IAAMJ,GAAK3S,GACXgT,IAAMJ,GAAKH,GACXQ,IAAMlT,GAAKC,GACXkT,IAAMJ,GAAKL,GACXU,MAAQF,IAAMA,IAAMC,IAAMA,IAG9B,GAAI35D,EAAI,EAAG,MAAM,IAAI4V,MAAM,oBAAsB5V,GAGjD,GAAiB,OAAb2G,KAAKiyD,IACPjyD,KAAKmgB,GAAK,KAAOngB,KAAKiyD,IAAMnS,IAAM,KAAO9/C,KAAKkyD,IAAMK,SAIjD,GAAMU,MApDD,KAyDL,GAAMpvD,KAAKsnB,IAAI6nC,IAAMH,IAAMC,IAAMC,KAzD5B,MAyDgD15D,EAKrD,CACH,IAAI65D,IAAMT,GAAK5S,GACXsT,IAAMT,GAAKE,GACXQ,MAAQP,IAAMA,IAAMC,IAAMA,IAC1BO,MAAQH,IAAMA,IAAMC,IAAMA,IAC1BG,IAAMzvD,KAAKkQ,KAAKq/C,OAChBG,IAAM1vD,KAAKkQ,KAAKk/C,OAChBz6D,EAAIa,EAAIwK,KAAKguC,KAAK8f,GAAK9tD,KAAK2vD,MAAMJ,MAAQH,MAAQI,QAAU,EAAIC,IAAMC,OAAS,GAC/EE,IAAMj7D,EAAI+6D,IACVG,IAAMl7D,EAAI86D,IAGVzvD,KAAKsnB,IAAIsoC,IAAM,GA1EX,OA2ENzzD,KAAKmgB,GAAK,KAAO2/B,GAAK2T,IAAMV,KAAO,KAAOR,GAAKkB,IAAMT,MAGvDhzD,KAAKmgB,GAAK,IAAM9mB,EAAI,IAAMA,EAAI,WAAa25D,IAAME,IAAMH,IAAMI,KAAQ,KAAOnzD,KAAKiyD,IAAMnS,GAAK4T,IAAMb,KAAO,KAAO7yD,KAAKkyD,IAAMK,GAAKmB,IAAMZ,UApBtI9yD,KAAKmgB,GAAK,KAAOngB,KAAKiyD,IAAMnS,IAAM,KAAO9/C,KAAKkyD,IAAMK,WAuBxDoB,IAAK,SAAAA,IAASx3B,EAAG34B,EAAGnK,EAAGu6D,GAAI1jD,GAAI2jD,KAC7B13B,GAAKA,EAAG34B,GAAKA,EACb,IAAIswD,IADYz6D,GAAKA,GACRwK,KAAK4wC,IAAImf,IAClBG,GAAK16D,EAAIwK,KAAK6wC,IAAIkf,IAClB/T,GAAK1jB,EAAI23B,GACTlB,GAAKpvD,EAAIuwD,GACTC,GAAK,EAAIH,IACTI,GAAKJ,IAAMD,GAAK1jD,GAAKA,GAAK0jD,GAG9B,GAAIv6D,EAAI,EAAG,MAAM,IAAI4V,MAAM,oBAAsB5V,GAGhC,OAAb2G,KAAKiyD,IACPjyD,KAAKmgB,GAAK,IAAM0/B,GAAK,IAAM+S,IAIpB/uD,KAAKsnB,IAAInrB,KAAKiyD,IAAMpS,IAnGnB,MAmGoCh8C,KAAKsnB,IAAInrB,KAAKkyD,IAAMU,IAnGxD,QAoGR5yD,KAAKmgB,GAAK,IAAM0/B,GAAK,IAAM+S,IAIxBv5D,IAGD46D,GAAK,IAAGA,GAAKA,GAAKrC,IAAMA,KAGxBqC,GAAKpC,WACP7xD,KAAKmgB,GAAK,IAAM9mB,EAAI,IAAMA,EAAI,QAAU26D,GAAK,KAAO73B,EAAI23B,IAAM,KAAOtwD,EAAIuwD,IAAM,IAAM16D,EAAI,IAAMA,EAAI,QAAU26D,GAAK,KAAOh0D,KAAKiyD,IAAMpS,IAAM,KAAO7/C,KAAKkyD,IAAMU,IAIrJqB,GAnHC,OAoHRj0D,KAAKmgB,GAAK,IAAM9mB,EAAI,IAAMA,EAAI,SAAW46D,IAAMtC,IAAO,IAAMqC,GAAK,KAAOh0D,KAAKiyD,IAAM91B,EAAI9iC,EAAIwK,KAAK4wC,IAAIvkC,KAAO,KAAOlQ,KAAKkyD,IAAM1uD,EAAInK,EAAIwK,KAAK6wC,IAAIxkC,QAGlJgkD,KAAM,SAAAA,KAAS/3B,EAAG34B,EAAG2hD,EAAGz8C,GACtB1I,KAAKmgB,GAAK,KAAOngB,KAAK+xD,IAAM/xD,KAAKiyD,KAAO91B,GAAK,KAAOn8B,KAAKgyD,IAAMhyD,KAAKkyD,KAAO1uD,GAAK,MAAQ2hD,EAAK,MAAQz8C,EAAK,KAAQy8C,EAAK,KAEzH7iD,SAAU,SAAAA,WACR,OAAOtC,KAAKmgB,IAIDuC,uBCjIAyxC,sBAAA,SAASh4B,GACtB,OAAO,SAASqa,WACd,OAAOra,ICFAhR,IAAMtnB,KAAKsnB,IACX+pB,MAAQrxC,KAAKqxC,MACbT,IAAM5wC,KAAK4wC,IACX/gC,SAAM7P,KAAK6P,IACXF,SAAM3P,KAAK2P,IACXkhC,IAAM7wC,KAAK6wC,IACX3gC,UAAOlQ,KAAKkQ,KAEZg8C,aAAU,MACV4B,QAAK9tD,KAAKgwC,GACVugB,OAASzC,QAAK,EACdC,SAAM,EAAID,QAMd,SAAS0C,KAAKl4B,GACnB,OAAOA,GAAK,EAAIi4B,OAASj4B,IAAM,GAAKi4B,OAASvwD,KAAKwwD,KAAKl4B,GCdzD,SAASm4B,eAAez7D,GACtB,OAAOA,EAAE07D,YAGX,SAASC,eAAe37D,GACtB,OAAOA,EAAE47D,YAGX,SAASC,cAAc77D,GACrB,OAAOA,EAAE87D,WAGX,SAASC,YAAY/7D,GACnB,OAAOA,EAAEg8D,SAGX,SAASC,YAAYj8D,GACnB,OAAOA,GAAKA,EAAEk8D,SAchB,SAASC,eAAenV,GAAI+S,GAAI9S,GAAIyS,GAAI3qB,GAAIqtB,GAAIjB,IAC9C,IAAIjB,IAAMlT,GAAKC,GACXkT,IAAMJ,GAAKL,GACX/hD,IAAMwjD,GAAKiB,IAAMA,IAAMlhD,UAAKg/C,IAAMA,IAAMC,IAAMA,KAC9CkC,GAAK1kD,GAAKwiD,IACVmC,IAAM3kD,GAAKuiD,IACXqC,IAAMvV,GAAKqV,GACXG,IAAMzC,GAAKuC,GACXG,IAAMxV,GAAKoV,GACXK,IAAMhD,GAAK4C,GACXK,KAAOJ,IAAME,KAAO,EACpBG,KAAOJ,IAAME,KAAO,EACpBzB,GAAKwB,IAAMF,IACXrB,GAAKwB,IAAMF,IACXK,GAAK5B,GAAKA,GAAKC,GAAKA,GACpB16D,EAAIuuC,GAAKqtB,GACT5f,EAAI+f,IAAMG,IAAMD,IAAMD,IACtBx8D,GAAKk7D,GAAK,GAAK,EAAI,GAAKhgD,UAAKL,SAAI,EAAGra,EAAIA,EAAIq8D,GAAKrgB,EAAIA,IACrDsgB,KAAOtgB,EAAI0e,GAAKD,GAAKj7D,GAAK68D,GAC1BE,MAAQvgB,EAAIye,GAAKC,GAAKl7D,GAAK68D,GAC3BG,KAAOxgB,EAAI0e,GAAKD,GAAKj7D,GAAK68D,GAC1BI,MAAQzgB,EAAIye,GAAKC,GAAKl7D,GAAK68D,GAC3BK,IAAMJ,IAAMH,IACZQ,IAAMJ,IAAMH,IACZQ,IAAMJ,IAAML,IACZU,IAAMJ,IAAML,IAMhB,OAFIM,IAAMA,IAAMC,IAAMA,IAAMC,IAAMA,IAAMC,IAAMA,MAAKP,IAAME,IAAKD,IAAME,MAGlEK,GAAIR,IACJS,GAAIR,IACJ7C,KAAMmC,GACNlC,KAAMmC,GACNC,IAAKO,KAAO/tB,GAAKvuC,EAAI,GACrBg8D,IAAKO,KAAOhuB,GAAKvuC,EAAI,ICxEzB,SAASg9D,OAAO37B,SACd16B,KAAKy6B,SAAWC,QAGlB27B,OAAOh8D,WACLi8D,UAAW,SAAAA,YACTt2D,KAAKu2D,MAAQ,GAEfC,QAAS,SAAAA,UACPx2D,KAAKu2D,MAAQ7yB,KAEf+yB,UAAW,SAAAA,YACTz2D,KAAK02D,OAAS,GAEhBC,QAAS,SAAAA,WACH32D,KAAKu2D,OAAyB,IAAfv2D,KAAKu2D,OAA+B,IAAhBv2D,KAAK02D,SAAe12D,KAAKy6B,SAAS23B,YACzEpyD,KAAKu2D,MAAQ,EAAIv2D,KAAKu2D,OAExBK,MAAO,SAAAA,MAASz6B,EAAG34B,GAEjB,OADA24B,GAAKA,EAAG34B,GAAKA,EACLxD,KAAK02D,QACX,KAAK,EAAG12D,KAAK02D,OAAS,EAAG12D,KAAKu2D,MAAQv2D,KAAKy6B,SAAS43B,OAAOl2B,EAAG34B,GAAKxD,KAAKy6B,SAAS03B,OAAOh2B,EAAG34B,GAAI,MAC/F,KAAK,EAAGxD,KAAK02D,OAAS,EACtB,QAAS12D,KAAKy6B,SAAS43B,OAAOl2B,EAAG34B,MAKxB,IAAAqzD,aAAA,SAASn8B,SACtB,OAAO,IAAI27B,OAAO37B,UC7Bb,SAASyB,QAAE5hC,GAChB,OAAOA,EAAE,GAGJ,SAASiJ,QAAEjJ,GAChB,OAAOA,EAAE,GCAI,IAAAu8D,SAAA,WACb,IAAI36B,EAAI46B,QACJvzD,EAAIwzD,QACJC,QAAUzgB,uBAAS,GACnB9b,QAAU,KACVw8B,MAAQC,aACRtb,OAAS,KAEb,SAASyV,KAAKvmD,MACZ,IAAIxS,EAEAM,EAEAu+D,OAHAp9D,EAAI+Q,KAAKrJ,OAET21D,UAAW,EAKf,IAFe,MAAX38B,UAAiBmhB,OAASqb,MAAME,OAAS10C,aAExCnqB,EAAI,EAAGA,GAAKyB,IAAKzB,IACdA,EAAIyB,GAAKi9D,QAAQp+D,EAAIkS,KAAKxS,GAAIA,EAAGwS,SAAWssD,YAC5CA,UAAYA,UAAUxb,OAAO4a,YAC5B5a,OAAO8a,WAEVU,UAAUxb,OAAO+a,OAAOz6B,EAAEtjC,EAAGN,EAAGwS,OAAQvH,EAAE3K,EAAGN,EAAGwS,OAGtD,GAAIqsD,OAAQ,OAAOvb,OAAS,KAAMub,OAAS,IAAM,KAuBnD,OApBA9F,KAAKn1B,EAAI,SAAShc,GAChB,OAAO/a,UAAU1D,QAAUy6B,EAAiB,mBAANhc,EAAmBA,EAAIq2B,uBAAUr2B,GAAImxC,MAAQn1B,GAGrFm1B,KAAK9tD,EAAI,SAAS2c,GAChB,OAAO/a,UAAU1D,QAAU8B,EAAiB,mBAAN2c,EAAmBA,EAAIq2B,uBAAUr2B,GAAImxC,MAAQ9tD,GAGrF8tD,KAAK2F,QAAU,SAAS92C,GACtB,OAAO/a,UAAU1D,QAAUu1D,QAAuB,mBAAN92C,EAAmBA,EAAIq2B,wBAAWr2B,GAAImxC,MAAQ2F,SAG5F3F,KAAK4F,MAAQ,SAAS/2C,GACpB,OAAO/a,UAAU1D,QAAUw1D,MAAQ/2C,EAAc,MAAXua,UAAoBmhB,OAASqb,MAAMx8B,UAAW42B,MAAQ4F,OAG9F5F,KAAK52B,QAAU,SAASva,GACtB,OAAO/a,UAAU1D,QAAe,MAALye,EAAYua,QAAUmhB,OAAS,KAAOA,OAASqb,MAAMx8B,QAAUva,GAAImxC,MAAQ52B,SAGjG42B,MC/CMgG,SAAA,WACb,IAAIzX,GAAKkX,QACLjX,GAAK,KACL8S,GAAKpc,sBAAS,GACd+b,GAAKyE,QACLC,QAAUzgB,uBAAS,GACnB9b,QAAU,KACVw8B,MAAQC,aACRtb,OAAS,KAEb,SAAS0b,KAAKxsD,MACZ,IAAIxS,EACAsiB,EACA6rB,EAEA7tC,EAEAu+D,OAHAp9D,EAAI+Q,KAAKrJ,OAET21D,UAAW,EAEXG,IAAM,IAAI3uD,MAAM7O,GAChBy9D,IAAM,IAAI5uD,MAAM7O,GAIpB,IAFe,MAAX0gC,UAAiBmhB,OAASqb,MAAME,OAAS10C,aAExCnqB,EAAI,EAAGA,GAAKyB,IAAKzB,EAAG,CACvB,KAAMA,EAAIyB,GAAKi9D,QAAQp+D,EAAIkS,KAAKxS,GAAIA,EAAGwS,SAAWssD,SAChD,GAAIA,UAAYA,SACdx8C,EAAItiB,EACJsjD,OAAOya,YACPza,OAAO4a,gBACF,CAGL,IAFA5a,OAAO8a,UACP9a,OAAO4a,YACF/vB,EAAInuC,EAAI,EAAGmuC,GAAK7rB,IAAK6rB,EACxBmV,OAAO+a,MAAMY,IAAI9wB,GAAI+wB,IAAI/wB,IAE3BmV,OAAO8a,UACP9a,OAAO2a,UAGPa,WACFG,IAAIj/D,IAAMsnD,GAAGhnD,EAAGN,EAAGwS,MAAO0sD,IAAIl/D,IAAMq6D,GAAG/5D,EAAGN,EAAGwS,MAC7C8wC,OAAO+a,MAAM9W,IAAMA,GAAGjnD,EAAGN,EAAGwS,MAAQysD,IAAIj/D,GAAIg6D,IAAMA,GAAG15D,EAAGN,EAAGwS,MAAQ0sD,IAAIl/D,KAI3E,GAAI6+D,OAAQ,OAAOvb,OAAS,KAAMub,OAAS,IAAM,KAGnD,SAASM,WACP,OAAOpG,WAAO2F,QAAQA,SAASC,MAAMA,OAAOx8B,QAAQA,SAoDtD,OAjDA68B,KAAKp7B,EAAI,SAAShc,GAChB,OAAO/a,UAAU1D,QAAUm+C,GAAkB,mBAAN1/B,EAAmBA,EAAIq2B,uBAAUr2B,GAAI2/B,GAAK,KAAMyX,MAAQ1X,IAGjG0X,KAAK1X,GAAK,SAAS1/B,GACjB,OAAO/a,UAAU1D,QAAUm+C,GAAkB,mBAAN1/B,EAAmBA,EAAIq2B,uBAAUr2B,GAAIo3C,MAAQ1X,IAGtF0X,KAAKzX,GAAK,SAAS3/B,GACjB,OAAO/a,UAAU1D,QAAUo+C,GAAU,MAAL3/B,EAAY,KAAoB,mBAANA,EAAmBA,EAAIq2B,uBAAUr2B,GAAIo3C,MAAQzX,IAGzGyX,KAAK/zD,EAAI,SAAS2c,GAChB,OAAO/a,UAAU1D,QAAUkxD,GAAkB,mBAANzyC,EAAmBA,EAAIq2B,uBAAUr2B,GAAIoyC,GAAK,KAAMgF,MAAQ3E,IAGjG2E,KAAK3E,GAAK,SAASzyC,GACjB,OAAO/a,UAAU1D,QAAUkxD,GAAkB,mBAANzyC,EAAmBA,EAAIq2B,uBAAUr2B,GAAIo3C,MAAQ3E,IAGtF2E,KAAKhF,GAAK,SAASpyC,GACjB,OAAO/a,UAAU1D,QAAU6wD,GAAU,MAALpyC,EAAY,KAAoB,mBAANA,EAAmBA,EAAIq2B,uBAAUr2B,GAAIo3C,MAAQhF,IAGzGgF,KAAKI,OACLJ,KAAKK,OAAS,WACZ,OAAOF,WAAWv7B,EAAE0jB,IAAIr8C,EAAEovD,KAG5B2E,KAAKM,OAAS,WACZ,OAAOH,WAAWv7B,EAAE0jB,IAAIr8C,EAAE+uD,KAG5BgF,KAAKO,OAAS,WACZ,OAAOJ,WAAWv7B,EAAE2jB,IAAIt8C,EAAEovD,KAG5B2E,KAAKN,QAAU,SAAS92C,GACtB,OAAO/a,UAAU1D,QAAUu1D,QAAuB,mBAAN92C,EAAmBA,EAAIq2B,wBAAWr2B,GAAIo3C,MAAQN,SAG5FM,KAAKL,MAAQ,SAAS/2C,GACpB,OAAO/a,UAAU1D,QAAUw1D,MAAQ/2C,EAAc,MAAXua,UAAoBmhB,OAASqb,MAAMx8B,UAAW68B,MAAQL,OAG9FK,KAAK78B,QAAU,SAASva,GACtB,OAAO/a,UAAU1D,QAAe,MAALye,EAAYua,QAAUmhB,OAAS,KAAOA,OAASqb,MAAMx8B,QAAUva,GAAIo3C,MAAQ78B,SAGjG68B,MC3GMQ,eAAA,SAASp9D,EAAGyI,GACzB,OAAOA,EAAIzI,GAAK,EAAIyI,EAAIzI,EAAI,EAAIyI,GAAKzI,EAAI,EAAI+oC,KCDhCs0B,sBAAA,SAASn/D,GACtB,OAAOA,GCCsBo/D,YAAYd,cAE3C,SAASe,OAAOhB,OACdl3D,KAAKm4D,OAASjB,MAqBD,SAASe,YAAYf,OAElC,SAASkB,OAAO19B,SACd,OAAO,IAAIw9B,OAAOhB,MAAMx8B,UAK1B,OAFA09B,OAAOD,OAASjB,MAETkB,OA1BTF,OAAO79D,WACLi8D,UAAW,SAAAA,YACTt2D,KAAKm4D,OAAO7B,aAEdE,QAAS,SAAAA,UACPx2D,KAAKm4D,OAAO3B,WAEdC,UAAW,SAAAA,YACTz2D,KAAKm4D,OAAO1B,aAEdE,QAAS,SAAAA,UACP32D,KAAKm4D,OAAOxB,WAEdC,MAAO,SAAAA,MAASj8D,EAAGtB,GACjB2G,KAAKm4D,OAAOvB,MAAMv9D,EAAIwK,KAAK6wC,IAAI/5C,GAAItB,GAAKwK,KAAK4wC,IAAI95C,MCNtC,IChBJmgB,yBAAQjS,MAAMxO,UAAUygB,MCEpB,IAAAu9C,eACbC,KAAM,SAAAA,KAAS59B,QAAShC,MACtB,IAAIr/B,EAAIwK,KAAKkQ,KAAK2kB,KAAOi5B,SACzBj3B,QAAQy3B,OAAO94D,EAAG,GAClBqhC,QAAQi5B,IAAI,EAAG,EAAGt6D,EAAG,EAAGu4D,YCNb2G,cACbD,KAAM,SAAAA,KAAS59B,QAAShC,MACtB,IAAIr/B,EAAIwK,KAAKkQ,KAAK2kB,KAAO,GAAK,EAC9BgC,QAAQy3B,QAAQ,EAAI94D,GAAIA,GACxBqhC,QAAQ23B,QAAQh5D,GAAIA,GACpBqhC,QAAQ23B,QAAQh5D,GAAI,EAAIA,GACxBqhC,QAAQ23B,OAAOh5D,GAAI,EAAIA,GACvBqhC,QAAQ23B,OAAOh5D,GAAIA,GACnBqhC,QAAQ23B,OAAO,EAAIh5D,GAAIA,GACvBqhC,QAAQ23B,OAAO,EAAIh5D,EAAGA,GACtBqhC,QAAQ23B,OAAOh5D,EAAGA,GAClBqhC,QAAQ23B,OAAOh5D,EAAG,EAAIA,GACtBqhC,QAAQ23B,QAAQh5D,EAAG,EAAIA,GACvBqhC,QAAQ23B,QAAQh5D,EAAGA,GACnBqhC,QAAQ23B,QAAQ,EAAIh5D,EAAGA,GACvBqhC,QAAQ03B,cCfRoG,MAAQ30D,KAAKkQ,KAAK,EAAI,GACtB0kD,QAAkB,EAARD,MAECE,SACbJ,KAAM,SAAAA,KAAS59B,QAAShC,MACtB,IAAIl1B,EAAIK,KAAKkQ,KAAK2kB,KAAO+/B,SACrBt8B,EAAI34B,EAAIg1D,MACZ99B,QAAQy3B,OAAO,GAAI3uD,GACnBk3B,QAAQ23B,OAAOl2B,EAAG,GAClBzB,QAAQ23B,OAAO,EAAG7uD,GAClBk3B,QAAQ23B,QAAQl2B,EAAG,GACnBzB,QAAQ03B,cCRRuG,GAAK90D,KAAK6wC,IAAIid,QAAK,IAAM9tD,KAAK6wC,IAAI,EAAIid,QAAK,IAC3CiH,GAAK/0D,KAAK6wC,IAAIkd,SAAM,IAAM+G,GAC1BE,IAAMh1D,KAAK4wC,IAAImd,SAAM,IAAM+G,GAEhBG,MACbR,KAAM,SAAAA,KAAS59B,QAAShC,MACtB,IAAIr/B,EAAIwK,KAAKkQ,KAPR,kBAOa2kB,MACdyD,EAAIy8B,GAAKv/D,EACTmK,EAAIq1D,GAAKx/D,EACbqhC,QAAQy3B,OAAO,GAAI94D,GACnBqhC,QAAQ23B,OAAOl2B,EAAG34B,GAClB,IAAK,IAAIjL,EAAI,EAAGA,EAAI,IAAKA,EAAG,CAC1B,IAAIoC,EAAIi3D,SAAMr5D,EAAI,EACdK,EAAIiL,KAAK4wC,IAAI95C,GACbH,EAAIqJ,KAAK6wC,IAAI/5C,GACjB+/B,QAAQ23B,OAAO73D,EAAInB,GAAIT,EAAIS,GAC3BqhC,QAAQ23B,OAAOz5D,EAAIujC,EAAI3hC,EAAIgJ,EAAGhJ,EAAI2hC,EAAIvjC,EAAI4K,GAE5Ck3B,QAAQ03B,cCrBG2G,QACbT,KAAM,SAAAA,KAAS59B,QAAShC,MACtB,IAAIysB,EAAIthD,KAAKkQ,KAAK2kB,MACdyD,GAAKgpB,EAAI,EACbzqB,QAAQw5B,KAAK/3B,EAAGA,EAAGgpB,EAAGA,KCJtB6T,MAAQn1D,KAAKkQ,KAAK,GAEPklD,UACbX,KAAM,SAAAA,KAAS59B,QAAShC,MACtB,IAAIl1B,GAAKK,KAAKkQ,KAAK2kB,MAAgB,EAARsgC,QAC3Bt+B,QAAQy3B,OAAO,EAAO,EAAJ3uD,GAClBk3B,QAAQ23B,QAAQ2G,MAAQx1D,GAAIA,GAC5Bk3B,QAAQ23B,OAAO2G,MAAQx1D,GAAIA,GAC3Bk3B,QAAQ03B,cCPR53D,MAAIqJ,KAAKkQ,KAAK,GAAK,EACnB2yB,MAAI,EAAI7iC,KAAKkQ,KAAK,IAClBpZ,MAAkB,GAAb+rC,MAAI,EAAI,GAEFwyB,KACbZ,KAAM,SAAAA,KAAS59B,QAAShC,MACtB,IAAIr/B,EAAIwK,KAAKkQ,KAAK2kB,KAAO/9B,OACrBklD,GAAKxmD,EAAI,EACTu5D,GAAKv5D,EAAIqtC,MACToZ,GAAKD,GACL0S,GAAKl5D,EAAIqtC,MAAIrtC,EACbo5D,IAAM3S,GACN4S,GAAKH,GACT73B,QAAQy3B,OAAOtS,GAAI+S,IACnBl4B,QAAQ23B,OAAOvS,GAAIyS,IACnB73B,QAAQ23B,OAAOI,GAAIC,IACnBh4B,QAAQ23B,QAjBJ,GAiBexS,GAAKrlD,MAAIo4D,GAAIp4D,MAAIqlD,IAjBhC,GAiByC+S,IAC7Cl4B,QAAQ23B,QAlBJ,GAkBevS,GAAKtlD,MAAI+3D,GAAI/3D,MAAIslD,IAlBhC,GAkByCyS,IAC7C73B,QAAQ23B,QAnBJ,GAmBeI,GAAKj4D,MAAIk4D,GAAIl4D,MAAIi4D,IAnBhC,GAmByCC,IAC7Ch4B,QAAQ23B,QApBJ,GAoBexS,GAAKrlD,MAAIo4D,IApBxB,GAoBgCA,GAAKp4D,MAAIqlD,IAC7CnlB,QAAQ23B,QArBJ,GAqBevS,GAAKtlD,MAAI+3D,IArBxB,GAqBgCA,GAAK/3D,MAAIslD,IAC7CplB,QAAQ23B,QAtBJ,GAsBeI,GAAKj4D,MAAIk4D,IAtBxB,GAsBgCA,GAAKl4D,MAAIi4D,IAC7C/3B,QAAQ03B,cCvBG+G,KAAA,aCAR,SAASvC,OAAMwC,KAAMj9B,EAAG34B,GAC7B41D,KAAK3+B,SAAS+3B,eACX,EAAI4G,KAAKrH,IAAMqH,KAAKnH,KAAO,GAC3B,EAAImH,KAAKpH,IAAMoH,KAAKlH,KAAO,GAC3BkH,KAAKrH,IAAM,EAAIqH,KAAKnH,KAAO,GAC3BmH,KAAKpH,IAAM,EAAIoH,KAAKlH,KAAO,GAC3BkH,KAAKrH,IAAM,EAAIqH,KAAKnH,IAAM91B,GAAK,GAC/Bi9B,KAAKpH,IAAM,EAAIoH,KAAKlH,IAAM1uD,GAAK,GAI7B,SAAS61D,MAAM3+B,SACpB16B,KAAKy6B,SAAWC,QAGlB2+B,MAAMh/D,WACJi8D,UAAW,SAAAA,YACTt2D,KAAKu2D,MAAQ,GAEfC,QAAS,SAAAA,UACPx2D,KAAKu2D,MAAQ7yB,KAEf+yB,UAAW,SAAAA,YACTz2D,KAAK+xD,IAAM/xD,KAAKiyD,IAChBjyD,KAAKgyD,IAAMhyD,KAAKkyD,IAAMxuB,IACtB1jC,KAAK02D,OAAS,GAEhBC,QAAS,SAAAA,UACP,OAAQ32D,KAAK02D,QACX,KAAK,EAAGE,OAAM52D,KAAMA,KAAKiyD,IAAKjyD,KAAKkyD,KACnC,KAAK,EAAGlyD,KAAKy6B,SAAS43B,OAAOryD,KAAKiyD,IAAKjyD,KAAKkyD,MAE1ClyD,KAAKu2D,OAAyB,IAAfv2D,KAAKu2D,OAA+B,IAAhBv2D,KAAK02D,SAAe12D,KAAKy6B,SAAS23B,YACzEpyD,KAAKu2D,MAAQ,EAAIv2D,KAAKu2D,OAExBK,MAAO,SAAAA,MAASz6B,EAAG34B,GAEjB,OADA24B,GAAKA,EAAG34B,GAAKA,EACLxD,KAAK02D,QACX,KAAK,EAAG12D,KAAK02D,OAAS,EAAG12D,KAAKu2D,MAAQv2D,KAAKy6B,SAAS43B,OAAOl2B,EAAG34B,GAAKxD,KAAKy6B,SAAS03B,OAAOh2B,EAAG34B,GAAI,MAC/F,KAAK,EAAGxD,KAAK02D,OAAS,EAAG,MACzB,KAAK,EAAG12D,KAAK02D,OAAS,EAAG12D,KAAKy6B,SAAS43B,QAAQ,EAAIryD,KAAK+xD,IAAM/xD,KAAKiyD,KAAO,GAAI,EAAIjyD,KAAKgyD,IAAMhyD,KAAKkyD,KAAO,GACzG,QAAS0E,OAAM52D,KAAMm8B,EAAG34B,GAE1BxD,KAAK+xD,IAAM/xD,KAAKiyD,IAAKjyD,KAAKiyD,IAAM91B,EAChCn8B,KAAKgyD,IAAMhyD,KAAKkyD,IAAKlyD,KAAKkyD,IAAM1uD,ICzCpC,SAAS81D,YAAY5+B,SACnB16B,KAAKy6B,SAAWC,QAGlB4+B,YAAYj/D,WACVi8D,UAAW6C,KACX3C,QAAS2C,KACT1C,UAAW,SAAAA,YACTz2D,KAAK+xD,IAAM/xD,KAAKiyD,IAAMjyD,KAAKu5D,IAAMv5D,KAAKw5D,IAAMx5D,KAAKy5D,IACjDz5D,KAAKgyD,IAAMhyD,KAAKkyD,IAAMlyD,KAAK05D,IAAM15D,KAAK25D,IAAM35D,KAAK45D,IAAMl2B,IACvD1jC,KAAK02D,OAAS,GAEhBC,QAAS,SAAAA,UACP,OAAQ32D,KAAK02D,QACX,KAAK,EACH12D,KAAKy6B,SAAS03B,OAAOnyD,KAAKu5D,IAAKv5D,KAAK05D,KACpC15D,KAAKy6B,SAAS23B,YACd,MAEF,KAAK,EACHpyD,KAAKy6B,SAAS03B,QAAQnyD,KAAKu5D,IAAM,EAAIv5D,KAAKw5D,KAAO,GAAIx5D,KAAK05D,IAAM,EAAI15D,KAAK25D,KAAO,GAChF35D,KAAKy6B,SAAS43B,QAAQryD,KAAKw5D,IAAM,EAAIx5D,KAAKu5D,KAAO,GAAIv5D,KAAK25D,IAAM,EAAI35D,KAAK05D,KAAO,GAChF15D,KAAKy6B,SAAS23B,YACd,MAEF,KAAK,EACHpyD,KAAK42D,MAAM52D,KAAKu5D,IAAKv5D,KAAK05D,KAC1B15D,KAAK42D,MAAM52D,KAAKw5D,IAAKx5D,KAAK25D,KAC1B35D,KAAK42D,MAAM52D,KAAKy5D,IAAKz5D,KAAK45D,OAKhChD,MAAO,SAAAA,MAASz6B,EAAG34B,GAEjB,OADA24B,GAAKA,EAAG34B,GAAKA,EACLxD,KAAK02D,QACX,KAAK,EAAG12D,KAAK02D,OAAS,EAAG12D,KAAKu5D,IAAMp9B,EAAGn8B,KAAK05D,IAAMl2D,EAAG,MACrD,KAAK,EAAGxD,KAAK02D,OAAS,EAAG12D,KAAKw5D,IAAMr9B,EAAGn8B,KAAK25D,IAAMn2D,EAAG,MACrD,KAAK,EAAGxD,KAAK02D,OAAS,EAAG12D,KAAKy5D,IAAMt9B,EAAGn8B,KAAK45D,IAAMp2D,EAAGxD,KAAKy6B,SAAS03B,QAAQnyD,KAAK+xD,IAAM,EAAI/xD,KAAKiyD,IAAM91B,GAAK,GAAIn8B,KAAKgyD,IAAM,EAAIhyD,KAAKkyD,IAAM1uD,GAAK,GAAI,MACjJ,QAASozD,OAAM52D,KAAMm8B,EAAG34B,GAE1BxD,KAAK+xD,IAAM/xD,KAAKiyD,IAAKjyD,KAAKiyD,IAAM91B,EAChCn8B,KAAKgyD,IAAMhyD,KAAKkyD,IAAKlyD,KAAKkyD,IAAM1uD,IC3CpC,SAASq2D,UAAUn/B,SACjB16B,KAAKy6B,SAAWC,QAGlBm/B,UAAUx/D,WACRi8D,UAAW,SAAAA,YACTt2D,KAAKu2D,MAAQ,GAEfC,QAAS,SAAAA,UACPx2D,KAAKu2D,MAAQ7yB,KAEf+yB,UAAW,SAAAA,YACTz2D,KAAK+xD,IAAM/xD,KAAKiyD,IAChBjyD,KAAKgyD,IAAMhyD,KAAKkyD,IAAMxuB,IACtB1jC,KAAK02D,OAAS,GAEhBC,QAAS,SAAAA,WACH32D,KAAKu2D,OAAyB,IAAfv2D,KAAKu2D,OAA+B,IAAhBv2D,KAAK02D,SAAe12D,KAAKy6B,SAAS23B,YACzEpyD,KAAKu2D,MAAQ,EAAIv2D,KAAKu2D,OAExBK,MAAO,SAAAA,MAASz6B,EAAG34B,GAEjB,OADA24B,GAAKA,EAAG34B,GAAKA,EACLxD,KAAK02D,QACX,KAAK,EAAG12D,KAAK02D,OAAS,EAAG,MACzB,KAAK,EAAG12D,KAAK02D,OAAS,EAAG,MACzB,KAAK,EAAG12D,KAAK02D,OAAS,EAAG,IAAI7W,IAAM7/C,KAAK+xD,IAAM,EAAI/xD,KAAKiyD,IAAM91B,GAAK,EAAGy2B,IAAM5yD,KAAKgyD,IAAM,EAAIhyD,KAAKkyD,IAAM1uD,GAAK,EAAGxD,KAAKu2D,MAAQv2D,KAAKy6B,SAAS43B,OAAOxS,GAAI+S,IAAM5yD,KAAKy6B,SAAS03B,OAAOtS,GAAI+S,IAAK,MACvL,KAAK,EAAG5yD,KAAK02D,OAAS,EACtB,QAASE,OAAM52D,KAAMm8B,EAAG34B,GAE1BxD,KAAK+xD,IAAM/xD,KAAKiyD,IAAKjyD,KAAKiyD,IAAM91B,EAChCn8B,KAAKgyD,IAAMhyD,KAAKkyD,IAAKlyD,KAAKkyD,IAAM1uD,IC9BpC,SAASs2D,OAAOp/B,QAASq/B,MACvB/5D,KAAKg6D,OAAS,IAAIX,MAAM3+B,SACxB16B,KAAKi6D,MAAQF,KAGfD,OAAOz/D,WACLo8D,UAAW,SAAAA,YACTz2D,KAAKk6D,MACLl6D,KAAKm6D,MACLn6D,KAAKg6D,OAAOvD,aAEdE,QAAS,SAAAA,UACP,IAAIx6B,EAAIn8B,KAAKk6D,GACT12D,EAAIxD,KAAKm6D,GACTt/C,EAAIshB,EAAEz6B,OAAS,EAEnB,GAAImZ,EAAI,EAQN,IAPA,IAKIphB,EALAomD,GAAK1jB,EAAE,GACPy2B,GAAKpvD,EAAE,GACPswD,GAAK33B,EAAEthB,GAAKglC,GACZkU,GAAKvwD,EAAEqX,GAAK+3C,GACZr6D,GAAK,IAGAA,GAAKsiB,GACZphB,EAAIlB,EAAIsiB,EACR7a,KAAKg6D,OAAOpD,MACV52D,KAAKi6D,MAAQ99B,EAAE5jC,IAAM,EAAIyH,KAAKi6D,QAAUpa,GAAKpmD,EAAIq6D,IACjD9zD,KAAKi6D,MAAQz2D,EAAEjL,IAAM,EAAIyH,KAAKi6D,QAAUrH,GAAKn5D,EAAIs6D,KAKvD/zD,KAAKk6D,GAAKl6D,KAAKm6D,GAAK,KACpBn6D,KAAKg6D,OAAOrD,WAEdC,MAAO,SAAAA,MAASz6B,EAAG34B,GACjBxD,KAAKk6D,GAAGh0D,MAAMi2B,GACdn8B,KAAKm6D,GAAGj0D,MAAM1C,MAIH,SAAU42D,OAAOL,MAE9B,SAASM,OAAO3/B,SACd,OAAgB,IAATq/B,KAAa,IAAIV,MAAM3+B,SAAW,IAAIo/B,OAAOp/B,QAASq/B,MAO/D,OAJAM,OAAON,KAAO,SAASA,MACrB,OAAOK,QAAQL,OAGVM,QAVM,CAWZ,KCvDI,SAASzD,eAAMwC,KAAMj9B,EAAG34B,GAC7B41D,KAAK3+B,SAAS+3B,cACZ4G,KAAKnH,IAAMmH,KAAKkB,IAAMlB,KAAKG,IAAMH,KAAKrH,KACtCqH,KAAKlH,IAAMkH,KAAKkB,IAAMlB,KAAKM,IAAMN,KAAKpH,KACtCoH,KAAKG,IAAMH,KAAKkB,IAAMlB,KAAKnH,IAAM91B,GACjCi9B,KAAKM,IAAMN,KAAKkB,IAAMlB,KAAKlH,IAAM1uD,GACjC41D,KAAKG,IACLH,KAAKM,KAIF,SAASa,SAAS7/B,QAAS8/B,SAChCx6D,KAAKy6B,SAAWC,QAChB16B,KAAKs6D,IAAM,EAAIE,SAAW,EAG5BD,SAASlgE,WACPi8D,UAAW,SAAAA,YACTt2D,KAAKu2D,MAAQ,GAEfC,QAAS,SAAAA,UACPx2D,KAAKu2D,MAAQ7yB,KAEf+yB,UAAW,SAAAA,YACTz2D,KAAK+xD,IAAM/xD,KAAKiyD,IAAMjyD,KAAKu5D,IAC3Bv5D,KAAKgyD,IAAMhyD,KAAKkyD,IAAMlyD,KAAK05D,IAAMh2B,IACjC1jC,KAAK02D,OAAS,GAEhBC,QAAS,SAAAA,UACP,OAAQ32D,KAAK02D,QACX,KAAK,EAAG12D,KAAKy6B,SAAS43B,OAAOryD,KAAKu5D,IAAKv5D,KAAK05D,KAAM,MAClD,KAAK,EAAG9C,eAAM52D,KAAMA,KAAKiyD,IAAKjyD,KAAKkyD,MAEjClyD,KAAKu2D,OAAyB,IAAfv2D,KAAKu2D,OAA+B,IAAhBv2D,KAAK02D,SAAe12D,KAAKy6B,SAAS23B,YACzEpyD,KAAKu2D,MAAQ,EAAIv2D,KAAKu2D,OAExBK,MAAO,SAAAA,MAASz6B,EAAG34B,GAEjB,OADA24B,GAAKA,EAAG34B,GAAKA,EACLxD,KAAK02D,QACX,KAAK,EAAG12D,KAAK02D,OAAS,EAAG12D,KAAKu2D,MAAQv2D,KAAKy6B,SAAS43B,OAAOl2B,EAAG34B,GAAKxD,KAAKy6B,SAAS03B,OAAOh2B,EAAG34B,GAAI,MAC/F,KAAK,EAAGxD,KAAK02D,OAAS,EAAG12D,KAAKiyD,IAAM91B,EAAGn8B,KAAKkyD,IAAM1uD,EAAG,MACrD,KAAK,EAAGxD,KAAK02D,OAAS,EACtB,QAASE,eAAM52D,KAAMm8B,EAAG34B,GAE1BxD,KAAK+xD,IAAM/xD,KAAKiyD,IAAKjyD,KAAKiyD,IAAMjyD,KAAKu5D,IAAKv5D,KAAKu5D,IAAMp9B,EACrDn8B,KAAKgyD,IAAMhyD,KAAKkyD,IAAKlyD,KAAKkyD,IAAMlyD,KAAK05D,IAAK15D,KAAK05D,IAAMl2D,KAI1C,SAAU42D,OAAOI,SAE9B,SAASC,SAAS//B,SAChB,OAAO,IAAI6/B,SAAS7/B,QAAS8/B,SAO/B,OAJAC,SAASD,QAAU,SAASA,SAC1B,OAAOJ,QAAQI,UAGVC,UAVM,CAWZ,GCzDI,SAASC,eAAehgC,QAAS8/B,SACtCx6D,KAAKy6B,SAAWC,QAChB16B,KAAKs6D,IAAM,EAAIE,SAAW,EAG5BE,eAAergE,WACbi8D,UAAW6C,KACX3C,QAAS2C,KACT1C,UAAW,SAAAA,YACTz2D,KAAK+xD,IAAM/xD,KAAKiyD,IAAMjyD,KAAKu5D,IAAMv5D,KAAKw5D,IAAMx5D,KAAKy5D,IAAMz5D,KAAK26D,IAC5D36D,KAAKgyD,IAAMhyD,KAAKkyD,IAAMlyD,KAAK05D,IAAM15D,KAAK25D,IAAM35D,KAAK45D,IAAM55D,KAAK46D,IAAMl3B,IAClE1jC,KAAK02D,OAAS,GAEhBC,QAAS,SAAAA,UACP,OAAQ32D,KAAK02D,QACX,KAAK,EACH12D,KAAKy6B,SAAS03B,OAAOnyD,KAAKw5D,IAAKx5D,KAAK25D,KACpC35D,KAAKy6B,SAAS23B,YACd,MAEF,KAAK,EACHpyD,KAAKy6B,SAAS43B,OAAOryD,KAAKw5D,IAAKx5D,KAAK25D,KACpC35D,KAAKy6B,SAAS23B,YACd,MAEF,KAAK,EACHpyD,KAAK42D,MAAM52D,KAAKw5D,IAAKx5D,KAAK25D,KAC1B35D,KAAK42D,MAAM52D,KAAKy5D,IAAKz5D,KAAK45D,KAC1B55D,KAAK42D,MAAM52D,KAAK26D,IAAK36D,KAAK46D,OAKhChE,MAAO,SAAAA,MAASz6B,EAAG34B,GAEjB,OADA24B,GAAKA,EAAG34B,GAAKA,EACLxD,KAAK02D,QACX,KAAK,EAAG12D,KAAK02D,OAAS,EAAG12D,KAAKw5D,IAAMr9B,EAAGn8B,KAAK25D,IAAMn2D,EAAG,MACrD,KAAK,EAAGxD,KAAK02D,OAAS,EAAG12D,KAAKy6B,SAAS03B,OAAOnyD,KAAKy5D,IAAMt9B,EAAGn8B,KAAK45D,IAAMp2D,GAAI,MAC3E,KAAK,EAAGxD,KAAK02D,OAAS,EAAG12D,KAAK26D,IAAMx+B,EAAGn8B,KAAK46D,IAAMp3D,EAAG,MACrD,QAASozD,eAAM52D,KAAMm8B,EAAG34B,GAE1BxD,KAAK+xD,IAAM/xD,KAAKiyD,IAAKjyD,KAAKiyD,IAAMjyD,KAAKu5D,IAAKv5D,KAAKu5D,IAAMp9B,EACrDn8B,KAAKgyD,IAAMhyD,KAAKkyD,IAAKlyD,KAAKkyD,IAAMlyD,KAAK05D,IAAK15D,KAAK05D,IAAMl2D,KAI1C,SAAU42D,OAAOI,SAE9B,SAASC,SAAS//B,SAChB,OAAO,IAAIggC,eAAehgC,QAAS8/B,SAOrC,OAJAC,SAASD,QAAU,SAASA,SAC1B,OAAOJ,QAAQI,UAGVC,UAVM,CAWZ,GC1DI,SAASI,aAAangC,QAAS8/B,SACpCx6D,KAAKy6B,SAAWC,QAChB16B,KAAKs6D,IAAM,EAAIE,SAAW,EAG5BK,aAAaxgE,WACXi8D,UAAW,SAAAA,YACTt2D,KAAKu2D,MAAQ,GAEfC,QAAS,SAAAA,UACPx2D,KAAKu2D,MAAQ7yB,KAEf+yB,UAAW,SAAAA,YACTz2D,KAAK+xD,IAAM/xD,KAAKiyD,IAAMjyD,KAAKu5D,IAC3Bv5D,KAAKgyD,IAAMhyD,KAAKkyD,IAAMlyD,KAAK05D,IAAMh2B,IACjC1jC,KAAK02D,OAAS,GAEhBC,QAAS,SAAAA,WACH32D,KAAKu2D,OAAyB,IAAfv2D,KAAKu2D,OAA+B,IAAhBv2D,KAAK02D,SAAe12D,KAAKy6B,SAAS23B,YACzEpyD,KAAKu2D,MAAQ,EAAIv2D,KAAKu2D,OAExBK,MAAO,SAAAA,MAASz6B,EAAG34B,GAEjB,OADA24B,GAAKA,EAAG34B,GAAKA,EACLxD,KAAK02D,QACX,KAAK,EAAG12D,KAAK02D,OAAS,EAAG,MACzB,KAAK,EAAG12D,KAAK02D,OAAS,EAAG,MACzB,KAAK,EAAG12D,KAAK02D,OAAS,EAAG12D,KAAKu2D,MAAQv2D,KAAKy6B,SAAS43B,OAAOryD,KAAKu5D,IAAKv5D,KAAK05D,KAAO15D,KAAKy6B,SAAS03B,OAAOnyD,KAAKu5D,IAAKv5D,KAAK05D,KAAM,MAC3H,KAAK,EAAG15D,KAAK02D,OAAS,EACtB,QAASE,eAAM52D,KAAMm8B,EAAG34B,GAE1BxD,KAAK+xD,IAAM/xD,KAAKiyD,IAAKjyD,KAAKiyD,IAAMjyD,KAAKu5D,IAAKv5D,KAAKu5D,IAAMp9B,EACrDn8B,KAAKgyD,IAAMhyD,KAAKkyD,IAAKlyD,KAAKkyD,IAAMlyD,KAAK05D,IAAK15D,KAAK05D,IAAMl2D,KAI1C,SAAU42D,OAAOI,SAE9B,SAASC,SAAS//B,SAChB,OAAO,IAAImgC,aAAangC,QAAS8/B,SAOnC,OAJAC,SAASD,QAAU,SAASA,SAC1B,OAAOJ,QAAQI,UAGVC,UAVM,CAWZ,GC7CI,SAAS7D,iBAAMwC,KAAMj9B,EAAG34B,GAC7B,IAAIs8C,GAAKsZ,KAAKnH,IACVM,GAAK6G,KAAKlH,IACVO,GAAK2G,KAAKG,IACV7G,GAAK0G,KAAKM,IAEd,GAAIN,KAAK0B,OAAS/K,aAAS,CACzB,IAAIp1D,EAAI,EAAIy+D,KAAK2B,QAAU,EAAI3B,KAAK0B,OAAS1B,KAAK4B,OAAS5B,KAAK6B,QAC5DjhE,EAAI,EAAIo/D,KAAK0B,QAAU1B,KAAK0B,OAAS1B,KAAK4B,QAC9Clb,IAAMA,GAAKnlD,EAAIy+D,KAAKrH,IAAMqH,KAAK6B,QAAU7B,KAAKG,IAAMH,KAAK2B,SAAW/gE,EACpEu4D,IAAMA,GAAK53D,EAAIy+D,KAAKpH,IAAMoH,KAAK6B,QAAU7B,KAAKM,IAAMN,KAAK2B,SAAW/gE,EAGtE,GAAIo/D,KAAK8B,OAASnL,aAAS,CACzB,IAAI3sD,EAAI,EAAIg2D,KAAK+B,QAAU,EAAI/B,KAAK8B,OAAS9B,KAAK4B,OAAS5B,KAAK6B,QAC5DtiE,EAAI,EAAIygE,KAAK8B,QAAU9B,KAAK8B,OAAS9B,KAAK4B,QAC9CvI,IAAMA,GAAKrvD,EAAIg2D,KAAKnH,IAAMmH,KAAK+B,QAAUh/B,EAAIi9B,KAAK6B,SAAWtiE,EAC7D+5D,IAAMA,GAAKtvD,EAAIg2D,KAAKlH,IAAMkH,KAAK+B,QAAU33D,EAAI41D,KAAK6B,SAAWtiE,EAG/DygE,KAAK3+B,SAAS+3B,cAAc1S,GAAIyS,GAAIE,GAAIC,GAAI0G,KAAKG,IAAKH,KAAKM,KAG7D,SAAS0B,WAAW1gC,QAAS2gC,OAC3Br7D,KAAKy6B,SAAWC,QAChB16B,KAAKs7D,OAASD,MAGhBD,WAAW/gE,WACTi8D,UAAW,SAAAA,YACTt2D,KAAKu2D,MAAQ,GAEfC,QAAS,SAAAA,UACPx2D,KAAKu2D,MAAQ7yB,KAEf+yB,UAAW,SAAAA,YACTz2D,KAAK+xD,IAAM/xD,KAAKiyD,IAAMjyD,KAAKu5D,IAC3Bv5D,KAAKgyD,IAAMhyD,KAAKkyD,IAAMlyD,KAAK05D,IAAMh2B,IACjC1jC,KAAK86D,OAAS96D,KAAKg7D,OAASh7D,KAAKk7D,OACjCl7D,KAAK+6D,QAAU/6D,KAAKi7D,QAAUj7D,KAAKm7D,QACnCn7D,KAAK02D,OAAS,GAEhBC,QAAS,SAAAA,UACP,OAAQ32D,KAAK02D,QACX,KAAK,EAAG12D,KAAKy6B,SAAS43B,OAAOryD,KAAKu5D,IAAKv5D,KAAK05D,KAAM,MAClD,KAAK,EAAG15D,KAAK42D,MAAM52D,KAAKu5D,IAAKv5D,KAAK05D,MAEhC15D,KAAKu2D,OAAyB,IAAfv2D,KAAKu2D,OAA+B,IAAhBv2D,KAAK02D,SAAe12D,KAAKy6B,SAAS23B,YACzEpyD,KAAKu2D,MAAQ,EAAIv2D,KAAKu2D,OAExBK,MAAO,SAAAA,MAASz6B,EAAG34B,GAGjB,GAFA24B,GAAKA,EAAG34B,GAAKA,EAETxD,KAAK02D,OAAQ,CACf,IAAI6E,IAAMv7D,KAAKu5D,IAAMp9B,EACjBq/B,IAAMx7D,KAAK05D,IAAMl2D,EACrBxD,KAAKk7D,OAASr3D,KAAKkQ,KAAK/T,KAAKm7D,QAAUt3D,KAAKoQ,IAAIsnD,IAAMA,IAAMC,IAAMA,IAAKx7D,KAAKs7D,SAG9E,OAAQt7D,KAAK02D,QACX,KAAK,EAAG12D,KAAK02D,OAAS,EAAG12D,KAAKu2D,MAAQv2D,KAAKy6B,SAAS43B,OAAOl2B,EAAG34B,GAAKxD,KAAKy6B,SAAS03B,OAAOh2B,EAAG34B,GAAI,MAC/F,KAAK,EAAGxD,KAAK02D,OAAS,EAAG,MACzB,KAAK,EAAG12D,KAAK02D,OAAS,EACtB,QAASE,iBAAM52D,KAAMm8B,EAAG34B,GAG1BxD,KAAK86D,OAAS96D,KAAKg7D,OAAQh7D,KAAKg7D,OAASh7D,KAAKk7D,OAC9Cl7D,KAAK+6D,QAAU/6D,KAAKi7D,QAASj7D,KAAKi7D,QAAUj7D,KAAKm7D,QACjDn7D,KAAK+xD,IAAM/xD,KAAKiyD,IAAKjyD,KAAKiyD,IAAMjyD,KAAKu5D,IAAKv5D,KAAKu5D,IAAMp9B,EACrDn8B,KAAKgyD,IAAMhyD,KAAKkyD,IAAKlyD,KAAKkyD,IAAMlyD,KAAK05D,IAAK15D,KAAK05D,IAAMl2D,IAI1C,IAAAi4D,iBAAA,SAAUrB,OAAOiB,OAE9B,SAASK,WAAWhhC,SAClB,OAAO2gC,MAAQ,IAAID,WAAW1gC,QAAS2gC,OAAS,IAAId,SAAS7/B,QAAS,GAOxE,OAJAghC,WAAWL,MAAQ,SAASA,OAC1B,OAAOjB,QAAQiB,QAGVK,WAVM,CAWZ,ICnFH,SAASC,iBAAiBjhC,QAAS2gC,OACjCr7D,KAAKy6B,SAAWC,QAChB16B,KAAKs7D,OAASD,MAGhBM,iBAAiBthE,WACfi8D,UAAW6C,KACX3C,QAAS2C,KACT1C,UAAW,SAAAA,YACTz2D,KAAK+xD,IAAM/xD,KAAKiyD,IAAMjyD,KAAKu5D,IAAMv5D,KAAKw5D,IAAMx5D,KAAKy5D,IAAMz5D,KAAK26D,IAC5D36D,KAAKgyD,IAAMhyD,KAAKkyD,IAAMlyD,KAAK05D,IAAM15D,KAAK25D,IAAM35D,KAAK45D,IAAM55D,KAAK46D,IAAMl3B,IAClE1jC,KAAK86D,OAAS96D,KAAKg7D,OAASh7D,KAAKk7D,OACjCl7D,KAAK+6D,QAAU/6D,KAAKi7D,QAAUj7D,KAAKm7D,QACnCn7D,KAAK02D,OAAS,GAEhBC,QAAS,SAAAA,UACP,OAAQ32D,KAAK02D,QACX,KAAK,EACH12D,KAAKy6B,SAAS03B,OAAOnyD,KAAKw5D,IAAKx5D,KAAK25D,KACpC35D,KAAKy6B,SAAS23B,YACd,MAEF,KAAK,EACHpyD,KAAKy6B,SAAS43B,OAAOryD,KAAKw5D,IAAKx5D,KAAK25D,KACpC35D,KAAKy6B,SAAS23B,YACd,MAEF,KAAK,EACHpyD,KAAK42D,MAAM52D,KAAKw5D,IAAKx5D,KAAK25D,KAC1B35D,KAAK42D,MAAM52D,KAAKy5D,IAAKz5D,KAAK45D,KAC1B55D,KAAK42D,MAAM52D,KAAK26D,IAAK36D,KAAK46D,OAKhChE,MAAO,SAAAA,MAASz6B,EAAG34B,GAGjB,GAFA24B,GAAKA,EAAG34B,GAAKA,EAETxD,KAAK02D,OAAQ,CACf,IAAI6E,IAAMv7D,KAAKu5D,IAAMp9B,EACjBq/B,IAAMx7D,KAAK05D,IAAMl2D,EACrBxD,KAAKk7D,OAASr3D,KAAKkQ,KAAK/T,KAAKm7D,QAAUt3D,KAAKoQ,IAAIsnD,IAAMA,IAAMC,IAAMA,IAAKx7D,KAAKs7D,SAG9E,OAAQt7D,KAAK02D,QACX,KAAK,EAAG12D,KAAK02D,OAAS,EAAG12D,KAAKw5D,IAAMr9B,EAAGn8B,KAAK25D,IAAMn2D,EAAG,MACrD,KAAK,EAAGxD,KAAK02D,OAAS,EAAG12D,KAAKy6B,SAAS03B,OAAOnyD,KAAKy5D,IAAMt9B,EAAGn8B,KAAK45D,IAAMp2D,GAAI,MAC3E,KAAK,EAAGxD,KAAK02D,OAAS,EAAG12D,KAAK26D,IAAMx+B,EAAGn8B,KAAK46D,IAAMp3D,EAAG,MACrD,QAASozD,iBAAM52D,KAAMm8B,EAAG34B,GAG1BxD,KAAK86D,OAAS96D,KAAKg7D,OAAQh7D,KAAKg7D,OAASh7D,KAAKk7D,OAC9Cl7D,KAAK+6D,QAAU/6D,KAAKi7D,QAASj7D,KAAKi7D,QAAUj7D,KAAKm7D,QACjDn7D,KAAK+xD,IAAM/xD,KAAKiyD,IAAKjyD,KAAKiyD,IAAMjyD,KAAKu5D,IAAKv5D,KAAKu5D,IAAMp9B,EACrDn8B,KAAKgyD,IAAMhyD,KAAKkyD,IAAKlyD,KAAKkyD,IAAMlyD,KAAK05D,IAAK15D,KAAK05D,IAAMl2D,KAI1C,SAAU42D,OAAOiB,OAE9B,SAASK,WAAWhhC,SAClB,OAAO2gC,MAAQ,IAAIM,iBAAiBjhC,QAAS2gC,OAAS,IAAIX,eAAehgC,QAAS,GAOpF,OAJAghC,WAAWL,MAAQ,SAASA,OAC1B,OAAOjB,QAAQiB,QAGVK,YAVM,CAWZ,ICtEH,SAASE,eAAelhC,QAAS2gC,OAC/Br7D,KAAKy6B,SAAWC,QAChB16B,KAAKs7D,OAASD,MAGhBO,eAAevhE,WACbi8D,UAAW,SAAAA,YACTt2D,KAAKu2D,MAAQ,GAEfC,QAAS,SAAAA,UACPx2D,KAAKu2D,MAAQ7yB,KAEf+yB,UAAW,SAAAA,YACTz2D,KAAK+xD,IAAM/xD,KAAKiyD,IAAMjyD,KAAKu5D,IAC3Bv5D,KAAKgyD,IAAMhyD,KAAKkyD,IAAMlyD,KAAK05D,IAAMh2B,IACjC1jC,KAAK86D,OAAS96D,KAAKg7D,OAASh7D,KAAKk7D,OACjCl7D,KAAK+6D,QAAU/6D,KAAKi7D,QAAUj7D,KAAKm7D,QACnCn7D,KAAK02D,OAAS,GAEhBC,QAAS,SAAAA,WACH32D,KAAKu2D,OAAyB,IAAfv2D,KAAKu2D,OAA+B,IAAhBv2D,KAAK02D,SAAe12D,KAAKy6B,SAAS23B,YACzEpyD,KAAKu2D,MAAQ,EAAIv2D,KAAKu2D,OAExBK,MAAO,SAAAA,MAASz6B,EAAG34B,GAGjB,GAFA24B,GAAKA,EAAG34B,GAAKA,EAETxD,KAAK02D,OAAQ,CACf,IAAI6E,IAAMv7D,KAAKu5D,IAAMp9B,EACjBq/B,IAAMx7D,KAAK05D,IAAMl2D,EACrBxD,KAAKk7D,OAASr3D,KAAKkQ,KAAK/T,KAAKm7D,QAAUt3D,KAAKoQ,IAAIsnD,IAAMA,IAAMC,IAAMA,IAAKx7D,KAAKs7D,SAG9E,OAAQt7D,KAAK02D,QACX,KAAK,EAAG12D,KAAK02D,OAAS,EAAG,MACzB,KAAK,EAAG12D,KAAK02D,OAAS,EAAG,MACzB,KAAK,EAAG12D,KAAK02D,OAAS,EAAG12D,KAAKu2D,MAAQv2D,KAAKy6B,SAAS43B,OAAOryD,KAAKu5D,IAAKv5D,KAAK05D,KAAO15D,KAAKy6B,SAAS03B,OAAOnyD,KAAKu5D,IAAKv5D,KAAK05D,KAAM,MAC3H,KAAK,EAAG15D,KAAK02D,OAAS,EACtB,QAASE,iBAAM52D,KAAMm8B,EAAG34B,GAG1BxD,KAAK86D,OAAS96D,KAAKg7D,OAAQh7D,KAAKg7D,OAASh7D,KAAKk7D,OAC9Cl7D,KAAK+6D,QAAU/6D,KAAKi7D,QAASj7D,KAAKi7D,QAAUj7D,KAAKm7D,QACjDn7D,KAAK+xD,IAAM/xD,KAAKiyD,IAAKjyD,KAAKiyD,IAAMjyD,KAAKu5D,IAAKv5D,KAAKu5D,IAAMp9B,EACrDn8B,KAAKgyD,IAAMhyD,KAAKkyD,IAAKlyD,KAAKkyD,IAAMlyD,KAAK05D,IAAK15D,KAAK05D,IAAMl2D,KAI1C,SAAU42D,OAAOiB,OAE9B,SAASK,WAAWhhC,SAClB,OAAO2gC,MAAQ,IAAIO,eAAelhC,QAAS2gC,OAAS,IAAIR,aAAangC,QAAS,GAOhF,OAJAghC,WAAWL,MAAQ,SAASA,OAC1B,OAAOjB,QAAQiB,QAGVK,YAVM,CAWZ,IC3DH,SAASG,aAAanhC,SACpB16B,KAAKy6B,SAAWC,QAGlBmhC,aAAaxhE,WACXi8D,UAAW6C,KACX3C,QAAS2C,KACT1C,UAAW,SAAAA,YACTz2D,KAAK02D,OAAS,GAEhBC,QAAS,SAAAA,UACH32D,KAAK02D,QAAQ12D,KAAKy6B,SAAS23B,aAEjCwE,MAAO,SAAAA,MAASz6B,EAAG34B,GACjB24B,GAAKA,EAAG34B,GAAKA,EACTxD,KAAK02D,OAAQ12D,KAAKy6B,SAAS43B,OAAOl2B,EAAG34B,IACpCxD,KAAK02D,OAAS,EAAG12D,KAAKy6B,SAAS03B,OAAOh2B,EAAG34B,MClBlD,SAASo5C,cAAKzgB,GACZ,OAAOA,EAAI,GAAK,EAAI,EAOtB,SAAS2/B,OAAO1C,KAAM3G,GAAIC,IACxB,IAAIqJ,GAAK3C,KAAKnH,IAAMmH,KAAKrH,IACrBiK,GAAKvJ,GAAK2G,KAAKnH,IACfgK,IAAM7C,KAAKlH,IAAMkH,KAAKpH,MAAQ+J,IAAMC,GAAK,IAAM,GAC/C3uC,IAAMqlC,GAAK0G,KAAKlH,MAAQ8J,IAAMD,GAAK,IAAM,GACzCxhE,GAAK0hE,GAAKD,GAAK3uC,GAAK0uC,KAAOA,GAAKC,IACpC,OAAQpf,cAAKqf,IAAMrf,cAAKvvB,KAAOxpB,KAAK2P,IAAI3P,KAAKsnB,IAAI8wC,IAAKp4D,KAAKsnB,IAAIkC,IAAK,GAAMxpB,KAAKsnB,IAAI5wB,KAAO,EAI5F,SAAS2hE,OAAO9C,KAAM3/D,GACpB,IAAIiP,EAAI0wD,KAAKnH,IAAMmH,KAAKrH,IACxB,OAAOrpD,GAAK,GAAK0wD,KAAKlH,IAAMkH,KAAKpH,KAAOtpD,EAAIjP,GAAK,EAAIA,EAMvD,SAASm9D,eAAMwC,KAAMllB,GAAIC,IACvB,IAAI0L,GAAKuZ,KAAKrH,IACVa,GAAKwG,KAAKpH,IACVlS,GAAKsZ,KAAKnH,IACVM,GAAK6G,KAAKlH,IACV4B,IAAMhU,GAAKD,IAAM,EACrBuZ,KAAK3+B,SAAS+3B,cAAc3S,GAAKiU,GAAIlB,GAAKkB,GAAK5f,GAAI4L,GAAKgU,GAAIvB,GAAKuB,GAAK3f,GAAI2L,GAAIyS,IAGhF,SAAS4J,UAAUzhC,SACjB16B,KAAKy6B,SAAWC,QA0ClB,SAAS0hC,UAAU1hC,SACjB16B,KAAKy6B,SAAW,IAAI4hC,eAAe3hC,SAOrC,SAAS2hC,eAAe3hC,SACtB16B,KAAKy6B,SAAWC,QCvFlB,SAAS4hC,QAAQ5hC,SACf16B,KAAKy6B,SAAWC,QA2ClB,SAAS6hC,cAAcpgC,GACrB,IAAI5jC,EAEAI,EADAqB,EAAImiC,EAAEz6B,OAAS,EAEf/G,EAAI,IAAIkO,MAAM7O,GACdoJ,EAAI,IAAIyF,MAAM7O,GACdX,EAAI,IAAIwP,MAAM7O,GAElB,IADAW,EAAE,GAAK,EAAGyI,EAAE,GAAK,EAAG/J,EAAE,GAAK8iC,EAAE,GAAK,EAAIA,EAAE,GACnC5jC,EAAI,EAAGA,EAAIyB,EAAI,IAAKzB,EAAGoC,EAAEpC,GAAK,EAAG6K,EAAE7K,GAAK,EAAGc,EAAEd,GAAK,EAAI4jC,EAAE5jC,GAAK,EAAI4jC,EAAE5jC,EAAI,GAE5E,IADAoC,EAAEX,EAAI,GAAK,EAAGoJ,EAAEpJ,EAAI,GAAK,EAAGX,EAAEW,EAAI,GAAK,EAAImiC,EAAEniC,EAAI,GAAKmiC,EAAEniC,GACnDzB,EAAI,EAAGA,EAAIyB,IAAKzB,EAAGI,EAAIgC,EAAEpC,GAAK6K,EAAE7K,EAAI,GAAI6K,EAAE7K,IAAMI,EAAGU,EAAEd,IAAMI,EAAIU,EAAEd,EAAI,GAE1E,IADAoC,EAAEX,EAAI,GAAKX,EAAEW,EAAI,GAAKoJ,EAAEpJ,EAAI,GACvBzB,EAAIyB,EAAI,EAAGzB,GAAK,IAAKA,EAAGoC,EAAEpC,IAAMc,EAAEd,GAAKoC,EAAEpC,EAAI,IAAM6K,EAAE7K,GAE1D,IADA6K,EAAEpJ,EAAI,IAAMmiC,EAAEniC,GAAKW,EAAEX,EAAI,IAAM,EAC1BzB,EAAI,EAAGA,EAAIyB,EAAI,IAAKzB,EAAG6K,EAAE7K,GAAK,EAAI4jC,EAAE5jC,EAAI,GAAKoC,EAAEpC,EAAI,GACxD,OAAQoC,EAAGyI,GDpBb+4D,UAAU9hE,WACRi8D,UAAW,SAAAA,YACTt2D,KAAKu2D,MAAQ,GAEfC,QAAS,SAAAA,UACPx2D,KAAKu2D,MAAQ7yB,KAEf+yB,UAAW,SAAAA,YACTz2D,KAAK+xD,IAAM/xD,KAAKiyD,IAChBjyD,KAAKgyD,IAAMhyD,KAAKkyD,IAChBlyD,KAAKw8D,IAAM94B,IACX1jC,KAAK02D,OAAS,GAEhBC,QAAS,SAAAA,UACP,OAAQ32D,KAAK02D,QACX,KAAK,EAAG12D,KAAKy6B,SAAS43B,OAAOryD,KAAKiyD,IAAKjyD,KAAKkyD,KAAM,MAClD,KAAK,EAAG0E,eAAM52D,KAAMA,KAAKw8D,IAAKN,OAAOl8D,KAAMA,KAAKw8D,OAE9Cx8D,KAAKu2D,OAAyB,IAAfv2D,KAAKu2D,OAA+B,IAAhBv2D,KAAK02D,SAAe12D,KAAKy6B,SAAS23B,YACzEpyD,KAAKu2D,MAAQ,EAAIv2D,KAAKu2D,OAExBK,MAAO,SAAAA,MAASz6B,EAAG34B,GACjB,IAAI2wC,GAAKzQ,IAGT,GADQlgC,GAAKA,GAAb24B,GAAKA,KACKn8B,KAAKiyD,KAAOzuD,IAAMxD,KAAKkyD,IAAjC,CACA,OAAQlyD,KAAK02D,QACX,KAAK,EAAG12D,KAAK02D,OAAS,EAAG12D,KAAKu2D,MAAQv2D,KAAKy6B,SAAS43B,OAAOl2B,EAAG34B,GAAKxD,KAAKy6B,SAAS03B,OAAOh2B,EAAG34B,GAAI,MAC/F,KAAK,EAAGxD,KAAK02D,OAAS,EAAG,MACzB,KAAK,EAAG12D,KAAK02D,OAAS,EAAGE,eAAM52D,KAAMk8D,OAAOl8D,KAAMm0C,GAAK2nB,OAAO97D,KAAMm8B,EAAG34B,IAAK2wC,IAAK,MACjF,QAASyiB,eAAM52D,KAAMA,KAAKw8D,IAAKroB,GAAK2nB,OAAO97D,KAAMm8B,EAAG34B,IAGtDxD,KAAK+xD,IAAM/xD,KAAKiyD,IAAKjyD,KAAKiyD,IAAM91B,EAChCn8B,KAAKgyD,IAAMhyD,KAAKkyD,IAAKlyD,KAAKkyD,IAAM1uD,EAChCxD,KAAKw8D,IAAMroB,OAQdioB,UAAU/hE,UAAYpB,OAAOY,OAAOsiE,UAAU9hE,YAAYu8D,MAAQ,SAASz6B,EAAG34B,GAC7E24D,UAAU9hE,UAAUu8D,MAAMl+D,KAAKsH,KAAMwD,EAAG24B,IAO1CkgC,eAAehiE,WACb83D,OAAQ,SAAAA,OAASh2B,EAAG34B,GAAKxD,KAAKy6B,SAAS03B,OAAO3uD,EAAG24B,IACjDi2B,UAAW,SAAAA,YAAapyD,KAAKy6B,SAAS23B,aACtCC,OAAQ,SAAAA,OAASl2B,EAAG34B,GAAKxD,KAAKy6B,SAAS43B,OAAO7uD,EAAG24B,IACjDq2B,cAAe,SAAAA,cAAS1S,GAAIyS,GAAIE,GAAIC,GAAIv2B,EAAG34B,GAAKxD,KAAKy6B,SAAS+3B,cAAcD,GAAIzS,GAAI4S,GAAID,GAAIjvD,EAAG24B,KC1FjGmgC,QAAQjiE,WACNi8D,UAAW,SAAAA,YACTt2D,KAAKu2D,MAAQ,GAEfC,QAAS,SAAAA,UACPx2D,KAAKu2D,MAAQ7yB,KAEf+yB,UAAW,SAAAA,YACTz2D,KAAKk6D,MACLl6D,KAAKm6D,OAEPxD,QAAS,SAAAA,UACP,IAAIx6B,EAAIn8B,KAAKk6D,GACT12D,EAAIxD,KAAKm6D,GACTngE,EAAImiC,EAAEz6B,OAEV,GAAI1H,EAEF,GADAgG,KAAKu2D,MAAQv2D,KAAKy6B,SAAS43B,OAAOl2B,EAAE,GAAI34B,EAAE,IAAMxD,KAAKy6B,SAAS03B,OAAOh2B,EAAE,GAAI34B,EAAE,IACnE,IAANxJ,EACFgG,KAAKy6B,SAAS43B,OAAOl2B,EAAE,GAAI34B,EAAE,SAI7B,IAFA,IAAIi5D,GAAKF,cAAcpgC,GACnBugC,GAAKH,cAAc/4D,GACd6hC,GAAK,EAAGgY,GAAK,EAAGA,GAAKrjD,IAAKqrC,KAAMgY,GACvCr9C,KAAKy6B,SAAS+3B,cAAciK,GAAG,GAAGp3B,IAAKq3B,GAAG,GAAGr3B,IAAKo3B,GAAG,GAAGp3B,IAAKq3B,GAAG,GAAGr3B,IAAKlJ,EAAEkhB,IAAK75C,EAAE65C,MAKnFr9C,KAAKu2D,OAAyB,IAAfv2D,KAAKu2D,OAAqB,IAANv8D,IAAUgG,KAAKy6B,SAAS23B,YAC/DpyD,KAAKu2D,MAAQ,EAAIv2D,KAAKu2D,MACtBv2D,KAAKk6D,GAAKl6D,KAAKm6D,GAAK,MAEtBvD,MAAO,SAAAA,MAASz6B,EAAG34B,GACjBxD,KAAKk6D,GAAGh0D,MAAMi2B,GACdn8B,KAAKm6D,GAAGj0D,MAAM1C,KCvClB,SAASm5D,KAAKjiC,QAASjhC,GACrBuG,KAAKy6B,SAAWC,QAChB16B,KAAK48D,GAAKnjE,EAGZkjE,KAAKtiE,WACHi8D,UAAW,SAAAA,YACTt2D,KAAKu2D,MAAQ,GAEfC,QAAS,SAAAA,UACPx2D,KAAKu2D,MAAQ7yB,KAEf+yB,UAAW,SAAAA,YACTz2D,KAAKk6D,GAAKl6D,KAAKm6D,GAAKz2B,IACpB1jC,KAAK02D,OAAS,GAEhBC,QAAS,SAAAA,UACH,EAAI32D,KAAK48D,IAAM58D,KAAK48D,GAAK,GAAqB,IAAhB58D,KAAK02D,QAAc12D,KAAKy6B,SAAS43B,OAAOryD,KAAKk6D,GAAIl6D,KAAKm6D,KACpFn6D,KAAKu2D,OAAyB,IAAfv2D,KAAKu2D,OAA+B,IAAhBv2D,KAAK02D,SAAe12D,KAAKy6B,SAAS23B,YACrEpyD,KAAKu2D,OAAS,IAAGv2D,KAAK48D,GAAK,EAAI58D,KAAK48D,GAAI58D,KAAKu2D,MAAQ,EAAIv2D,KAAKu2D,QAEpEK,MAAO,SAAAA,MAASz6B,EAAG34B,GAEjB,OADA24B,GAAKA,EAAG34B,GAAKA,EACLxD,KAAK02D,QACX,KAAK,EAAG12D,KAAK02D,OAAS,EAAG12D,KAAKu2D,MAAQv2D,KAAKy6B,SAAS43B,OAAOl2B,EAAG34B,GAAKxD,KAAKy6B,SAAS03B,OAAOh2B,EAAG34B,GAAI,MAC/F,KAAK,EAAGxD,KAAK02D,OAAS,EACtB,QACE,GAAI12D,KAAK48D,IAAM,EACb58D,KAAKy6B,SAAS43B,OAAOryD,KAAKk6D,GAAI12D,GAC9BxD,KAAKy6B,SAAS43B,OAAOl2B,EAAG34B,OACnB,CACL,IAAIs8C,GAAK9/C,KAAKk6D,IAAM,EAAIl6D,KAAK48D,IAAMzgC,EAAIn8B,KAAK48D,GAC5C58D,KAAKy6B,SAAS43B,OAAOvS,GAAI9/C,KAAKm6D,IAC9Bn6D,KAAKy6B,SAAS43B,OAAOvS,GAAIt8C,IAK/BxD,KAAKk6D,GAAK/9B,EAAGn8B,KAAKm6D,GAAK32D,IAIZ,IAAAq5D,WAAA,SAASniC,SACtB,OAAO,IAAIiiC,KAAKjiC,QAAS,KAGpB,SAASoiC,WAAWpiC,SACzB,OAAO,IAAIiiC,KAAKjiC,QAAS,GAGpB,SAASqiC,UAAUriC,SACxB,OAAO,IAAIiiC,KAAKjiC,QAAS,GCnDZ,IAAAsiC,KAAA,SAASC,OAAQh3C,OAC9B,IAAOjsB,EAAIijE,OAAOv7D,QAAU,EAC5B,IAAK,IAAWmZ,EAAGohD,GAA2BjiE,EAArCzB,EAAI,EAAU80B,GAAK4vC,OAAOh3C,MAAM,IAAQttB,EAAI00B,GAAG3rB,OAAQnJ,EAAIyB,IAAKzB,EAEvE,IADA0jE,GAAK5uC,GAAIA,GAAK4vC,OAAOh3C,MAAM1tB,IACtBsiB,EAAI,EAAGA,EAAIliB,IAAKkiB,EACnBwS,GAAGxS,GAAG,IAAMwS,GAAGxS,GAAG,GAAKvH,MAAM2oD,GAAGphD,GAAG,IAAMohD,GAAGphD,GAAG,GAAKohD,GAAGphD,GAAG,ICLjDqiD,WAAA,SAASD,QAEtB,IADA,IAAIjjE,EAAIijE,OAAOv7D,OAAQ1I,EAAI,IAAI6P,MAAM7O,KAC5BA,GAAK,GAAGhB,EAAEgB,GAAKA,EACxB,OAAOhB,GCET,SAASmkE,WAAWtkE,EAAGiB,KACrB,OAAOjB,EAAEiB,KCJI,IAAAsjE,gBAAA,SAASH,QACtB,IAAII,KAAOJ,OAAOh1D,IAAIgL,eACtB,OAAO+pD,WAAKC,QAAQ1sD,KAAK,SAAS5V,EAAGyI,GAAK,OAAOi6D,KAAK1iE,GAAK0iE,KAAKj6D,MAG3D,SAAS6P,cAAIgqD,QAElB,IADA,IAAsCrzD,EAAlCpP,EAAI,EAAGjC,GAAK,EAAGyB,EAAIijE,OAAOv7D,SACrBnJ,EAAIyB,IAAO4P,GAAKqzD,OAAO1kE,GAAG,MAAIiC,GAAKoP,GAC5C,OAAOpP,ECFF,SAAS8iE,WAAW7jE,GACzB,QAASA,GAAK,IAAM,EAAIA,EAAIA,EAAIA,GAAKA,GAAK,GAAKA,EAAIA,EAAI,GAAK,GCPzC,SAAS2gE,OAAO3/D,GAGnC,SAAS8iE,OAAO9jE,GACd,OAAOoK,KAAKoQ,IAAIxa,EAAGgB,GAKrB,OARAA,GAAKA,EAML8iE,OAAOhgB,SAAW6c,OAEXmD,QATY,CAFN,GAcO,SAASnD,OAAO3/D,GAGpC,SAAS+iE,QAAQ/jE,GACf,OAAO,EAAIoK,KAAKoQ,IAAI,EAAIxa,EAAGgB,GAK7B,OARAA,GAAKA,EAML+iE,QAAQjgB,SAAW6c,OAEZoD,QATa,CAdP,GAAf,IA0BWC,UAAa,SAASrD,OAAO3/D,GAGtC,SAASgjE,UAAUhkE,GACjB,QAASA,GAAK,IAAM,EAAIoK,KAAKoQ,IAAIxa,EAAGgB,GAAK,EAAIoJ,KAAKoQ,IAAI,EAAIxa,EAAGgB,IAAM,EAKrE,OARAA,GAAKA,EAMLgjE,UAAUlgB,SAAW6c,OAEdqD,UATe,CA1BT,GCAN55D,KAAKgwC,GCAd,IAAI1jC,GAAK,EAAI,GACTutD,GAAK,EAAI,GACTC,GAAK,EAAI,GACTC,GAAK,IACLC,GAAK,EAAI,GACTC,GAAK,GAAK,GACVC,GAAK,MACLC,GAAK,GAAK,GACVC,GAAK,GAAK,GACVC,GAAK,EAAI/tD,GAAKA,GAMX,SAASguD,UAAU1kE,GACxB,OAAQA,GAAKA,GAAK0W,GAAK+tD,GAAKzkE,EAAIA,EAAIA,EAAIkkE,GAAKO,IAAMzkE,GAAKikE,IAAMjkE,EAAImkE,GAAKnkE,EAAIqkE,GAAKI,IAAMzkE,GAAKokE,IAAMpkE,EAAIskE,GAAKG,IAAMzkE,GAAKukE,IAAMvkE,EAAIwkE,ICd5G,SAAS7D,OAAO5/D,GAGnC,SAAS4jE,OAAO3kE,GACd,OAAOA,EAAIA,IAAMe,EAAI,GAAKf,EAAIe,GAKhC,OARAA,GAAKA,EAML4jE,OAAOC,UAAYjE,OAEZgE,QATY,CAFL,SAcM,SAAShE,OAAO5/D,GAGpC,SAAS8jE,QAAQ7kE,GACf,QAASA,EAAIA,IAAMe,EAAI,GAAKf,EAAIe,GAAK,EAKvC,OARAA,GAAKA,EAML8jE,QAAQD,UAAYjE,OAEbkE,QATa,CAdN,SAAhB,IA0BWC,UAAa,SAASnE,OAAO5/D,GAGtC,SAAS+jE,UAAU9kE,GACjB,QAASA,GAAK,GAAK,EAAIA,EAAIA,IAAMe,EAAI,GAAKf,EAAIe,IAAMf,GAAK,GAAKA,IAAMe,EAAI,GAAKf,EAAIe,GAAK,GAAK,EAK7F,OARAA,GAAKA,EAML+jE,UAAUF,UAAYjE,OAEfmE,UATe,CA1BR,SCAZ3M,YAAM,EAAI/tD,KAAKgwC,GAiBR2qB,YAba,SAASpE,OAAOz/D,EAAGJ,GACzC,IAAIC,EAAIqJ,KAAKwwD,KAAK,GAAK15D,EAAIkJ,KAAK6P,IAAI,EAAG/Y,MAAQJ,GAAKq3D,aAEpD,SAAS6M,UAAUhlE,GACjB,OAAOkB,EAAIkJ,KAAKoQ,IAAI,EAAG,KAAOxa,GAAKoK,KAAK6wC,KAAKl6C,EAAIf,GAAKc,GAMxD,OAHAkkE,UAAUC,UAAY,SAAS/jE,GAAK,OAAOy/D,OAAOz/D,EAAGJ,EAAIq3D,cACzD6M,UAAUE,OAAS,SAASpkE,GAAK,OAAO6/D,OAAOz/D,EAAGJ,IAE3CkkE,UAVe,CAHR,EACH,IAeY,SAASrE,OAAOz/D,EAAGJ,GAC1C,IAAIC,EAAIqJ,KAAKwwD,KAAK,GAAK15D,EAAIkJ,KAAK6P,IAAI,EAAG/Y,MAAQJ,GAAKq3D,aAEpD,SAAS4M,WAAW/kE,GAClB,OAAO,EAAIkB,EAAIkJ,KAAKoQ,IAAI,GAAI,IAAMxa,GAAKA,IAAMoK,KAAK6wC,KAAKj7C,EAAIe,GAAKD,GAMlE,OAHAikE,WAAWE,UAAY,SAAS/jE,GAAK,OAAOy/D,OAAOz/D,EAAGJ,EAAIq3D,cAC1D4M,WAAWG,OAAS,SAASpkE,GAAK,OAAO6/D,OAAOz/D,EAAGJ,IAE5CikE,WAVgB,CAhBT,EACH,KCFEI,yBD8BY,SAASxE,OAAOz/D,EAAGJ,GAC5C,IAAIC,EAAIqJ,KAAKwwD,KAAK,GAAK15D,EAAIkJ,KAAK6P,IAAI,EAAG/Y,MAAQJ,GAAKq3D,aAEpD,SAASiN,aAAaplE,GACpB,QAASA,EAAQ,EAAJA,EAAQ,GAAK,EACpBkB,EAAIkJ,KAAKoQ,IAAI,EAAG,GAAKxa,GAAKoK,KAAK6wC,KAAKl6C,EAAIf,GAAKc,GAC7C,EAAII,EAAIkJ,KAAKoQ,IAAI,GAAI,GAAKxa,GAAKoK,KAAK6wC,KAAKl6C,EAAIf,GAAKc,IAAM,EAMhE,OAHAskE,aAAaH,UAAY,SAAS/jE,GAAK,OAAOy/D,OAAOz/D,EAAGJ,EAAIq3D,cAC5DiN,aAAaF,OAAS,SAASpkE,GAAK,OAAO6/D,OAAOz/D,EAAGJ,IAE9CskE,aAZkB,CA7BX,EACH,ICFE,SAAS1iC,GACtB,OAAO,WACL,OAAOA,KCFJ,SAASA,YAAEtjC,GAChB,OAAOA,EAAE,GAGJ,SAAS2K,YAAE3K,GAChB,OAAOA,EAAE,GCLX,SAASimE,eACP9+D,KAAKmgB,EAAI,KAGJ,SAAS4+C,aAAajwC,MAC3BA,KAAKw2B,EACLx2B,KAAKsmB,EACLtmB,KAAKm1B,EACLn1B,KAAKkwC,EACLlwC,KAAKtsB,EACLssB,KAAKrU,EAAI,KAuLX,SAASwkD,mBAAmBC,KAAMpwC,MAChC,IAAIv0B,EAAIu0B,KACJ8oB,EAAI9oB,KAAKkwC,EACTv5C,OAASlrB,EAAE+qD,EAEX7/B,OACEA,OAAOw+B,IAAM1pD,EAAGkrB,OAAOw+B,EAAIrM,EAC1BnyB,OAAOu5C,EAAIpnB,EAEhBsnB,KAAK/+C,EAAIy3B,EAGXA,EAAE0N,EAAI7/B,OACNlrB,EAAE+qD,EAAI1N,EACNr9C,EAAEykE,EAAIpnB,EAAEqM,EACJ1pD,EAAEykE,IAAGzkE,EAAEykE,EAAE1Z,EAAI/qD,GACjBq9C,EAAEqM,EAAI1pD,EAGR,SAAS4kE,oBAAoBD,KAAMpwC,MACjC,IAAIv0B,EAAIu0B,KACJ8oB,EAAI9oB,KAAKm1B,EACTx+B,OAASlrB,EAAE+qD,EAEX7/B,OACEA,OAAOw+B,IAAM1pD,EAAGkrB,OAAOw+B,EAAIrM,EAC1BnyB,OAAOu5C,EAAIpnB,EAEhBsnB,KAAK/+C,EAAIy3B,EAGXA,EAAE0N,EAAI7/B,OACNlrB,EAAE+qD,EAAI1N,EACNr9C,EAAE0pD,EAAIrM,EAAEonB,EACJzkE,EAAE0pD,IAAG1pD,EAAE0pD,EAAEqB,EAAI/qD,GACjBq9C,EAAEonB,EAAIzkE,EAGR,SAAS6kE,cAActwC,MACrB,KAAOA,KAAKm1B,GAAGn1B,KAAOA,KAAKm1B,EAC3B,OAAOn1B,KA5NTgwC,aAAazkE,WACX2qB,YAAa85C,aAEbvN,OAAQ,SAAAA,OAAS8N,MAAOvwC,MACtB,IAAIrJ,OAAQ65C,QAASC,MAErB,GAAIF,MAAO,CAKT,GAJAvwC,KAAKtsB,EAAI68D,MACTvwC,KAAKrU,EAAI4kD,MAAM5kD,EACX4kD,MAAM5kD,IAAG4kD,MAAM5kD,EAAEjY,EAAIssB,MACzBuwC,MAAM5kD,EAAIqU,KACNuwC,MAAML,EAAG,CAEX,IADAK,MAAQA,MAAML,EACPK,MAAMpb,GAAGob,MAAQA,MAAMpb,EAC9Bob,MAAMpb,EAAIn1B,UAEVuwC,MAAML,EAAIlwC,KAEZrJ,OAAS45C,WACAr/D,KAAKmgB,GACdk/C,MAAQD,cAAcp/D,KAAKmgB,GAC3B2O,KAAKtsB,EAAI,KACTssB,KAAKrU,EAAI4kD,MACTA,MAAM78D,EAAI68D,MAAMpb,EAAIn1B,KACpBrJ,OAAS45C,QAETvwC,KAAKtsB,EAAIssB,KAAKrU,EAAI,KAClBza,KAAKmgB,EAAI2O,KACTrJ,OAAS,MAOX,IALAqJ,KAAKm1B,EAAIn1B,KAAKkwC,EAAI,KAClBlwC,KAAKw2B,EAAI7/B,OACTqJ,KAAKsmB,GAAI,EAETiqB,MAAQvwC,KACDrJ,QAAUA,OAAO2vB,GAElB3vB,UADJ65C,QAAU75C,OAAO6/B,GACMrB,GACrBsb,MAAQD,QAAQN,IACHO,MAAMnqB,GACjB3vB,OAAO2vB,EAAImqB,MAAMnqB,GAAI,EACrBkqB,QAAQlqB,GAAI,EACZiqB,MAAQC,UAEJD,QAAU55C,OAAOu5C,IACnBC,mBAAmBj/D,KAAMylB,QAEzBA,QADA45C,MAAQ55C,QACO6/B,GAEjB7/B,OAAO2vB,GAAI,EACXkqB,QAAQlqB,GAAI,EACZ+pB,oBAAoBn/D,KAAMs/D,WAG5BC,MAAQD,QAAQrb,IACHsb,MAAMnqB,GACjB3vB,OAAO2vB,EAAImqB,MAAMnqB,GAAI,EACrBkqB,QAAQlqB,GAAI,EACZiqB,MAAQC,UAEJD,QAAU55C,OAAOw+B,IACnBkb,oBAAoBn/D,KAAMylB,QAE1BA,QADA45C,MAAQ55C,QACO6/B,GAEjB7/B,OAAO2vB,GAAI,EACXkqB,QAAQlqB,GAAI,EACZ6pB,mBAAmBj/D,KAAMs/D,UAG7B75C,OAAS45C,MAAM/Z,EAEjBtlD,KAAKmgB,EAAEi1B,GAAI,GAGb5P,OAAQ,SAAAA,OAAS1W,MACXA,KAAKrU,IAAGqU,KAAKrU,EAAEjY,EAAIssB,KAAKtsB,GACxBssB,KAAKtsB,IAAGssB,KAAKtsB,EAAEiY,EAAIqU,KAAKrU,GAC5BqU,KAAKrU,EAAIqU,KAAKtsB,EAAI,KAElB,IACIgjB,QAGAvT,KACA2+B,IALAnrB,OAASqJ,KAAKw2B,EAEdxhB,KAAOhV,KAAKm1B,EACZlgB,MAAQjV,KAAKkwC,EAsCjB,GAhCK/sD,KAFA6xB,KACKC,MACEq7B,cAAcr7B,OADFD,KADNC,MAIdte,OACEA,OAAOw+B,IAAMn1B,KAAMrJ,OAAOw+B,EAAIhyC,KAC7BwT,OAAOu5C,EAAI/sD,KAEhBjS,KAAKmgB,EAAIlO,KAGP6xB,MAAQC,OACV6M,IAAM3+B,KAAKmjC,EACXnjC,KAAKmjC,EAAItmB,KAAKsmB,EACdnjC,KAAKgyC,EAAIngB,KACTA,KAAKwhB,EAAIrzC,KACLA,OAAS8xB,OACXte,OAASxT,KAAKqzC,EACdrzC,KAAKqzC,EAAIx2B,KAAKw2B,EACdx2B,KAAO7c,KAAK+sD,EACZv5C,OAAOw+B,EAAIn1B,KACX7c,KAAK+sD,EAAIj7B,MACTA,MAAMuhB,EAAIrzC,OAEVA,KAAKqzC,EAAI7/B,OACTA,OAASxT,KACT6c,KAAO7c,KAAK+sD,KAGdpuB,IAAM9hB,KAAKsmB,EACXtmB,KAAO7c,MAGL6c,OAAMA,KAAKw2B,EAAI7/B,SACfmrB,IACJ,GAAI9hB,MAAQA,KAAKsmB,EAAKtmB,KAAKsmB,GAAI,MAA/B,CAEA,EAAG,CACD,GAAItmB,OAAS9uB,KAAKmgB,EAAG,MACrB,GAAI2O,OAASrJ,OAAOw+B,GAQlB,IAPAz+B,QAAUC,OAAOu5C,GACL5pB,IACV5vB,QAAQ4vB,GAAI,EACZ3vB,OAAO2vB,GAAI,EACX6pB,mBAAmBj/D,KAAMylB,QACzBD,QAAUC,OAAOu5C,GAEdx5C,QAAQy+B,GAAKz+B,QAAQy+B,EAAE7O,GACpB5vB,QAAQw5C,GAAKx5C,QAAQw5C,EAAE5pB,EAAI,CAC5B5vB,QAAQw5C,GAAMx5C,QAAQw5C,EAAE5pB,IAC3B5vB,QAAQy+B,EAAE7O,GAAI,EACd5vB,QAAQ4vB,GAAI,EACZ+pB,oBAAoBn/D,KAAMwlB,SAC1BA,QAAUC,OAAOu5C,GAEnBx5C,QAAQ4vB,EAAI3vB,OAAO2vB,EACnB3vB,OAAO2vB,EAAI5vB,QAAQw5C,EAAE5pB,GAAI,EACzB6pB,mBAAmBj/D,KAAMylB,QACzBqJ,KAAO9uB,KAAKmgB,EACZ,YAUF,IAPAqF,QAAUC,OAAOw+B,GACL7O,IACV5vB,QAAQ4vB,GAAI,EACZ3vB,OAAO2vB,GAAI,EACX+pB,oBAAoBn/D,KAAMylB,QAC1BD,QAAUC,OAAOw+B,GAEdz+B,QAAQy+B,GAAKz+B,QAAQy+B,EAAE7O,GACtB5vB,QAAQw5C,GAAKx5C,QAAQw5C,EAAE5pB,EAAI,CAC1B5vB,QAAQy+B,GAAMz+B,QAAQy+B,EAAE7O,IAC3B5vB,QAAQw5C,EAAE5pB,GAAI,EACd5vB,QAAQ4vB,GAAI,EACZ6pB,mBAAmBj/D,KAAMwlB,SACzBA,QAAUC,OAAOw+B,GAEnBz+B,QAAQ4vB,EAAI3vB,OAAO2vB,EACnB3vB,OAAO2vB,EAAI5vB,QAAQy+B,EAAE7O,GAAI,EACzB+pB,oBAAoBn/D,KAAMylB,QAC1BqJ,KAAO9uB,KAAKmgB,EACZ,MAGJqF,QAAQ4vB,GAAI,EACZtmB,KAAOrJ,OACPA,OAASA,OAAO6/B,SACRx2B,KAAKsmB,GAEXtmB,OAAMA,KAAKsmB,GAAI,MA+CR0pB,kCC1OR,SAASU,WAAW17B,KAAMC,MAAOgS,GAAIC,IAC1C,IAAIplB,MAAQ,KAAM,MACd3uB,MAAQmuB,cAAMlqB,KAAK0qB,MAAQ,EAO/B,OANAA,KAAKkT,KAAOA,KACZlT,KAAKmT,MAAQA,MACTgS,IAAI0pB,WAAW7uC,KAAMkT,KAAMC,MAAOgS,IAClCC,IAAIypB,WAAW7uC,KAAMmT,MAAOD,KAAMkS,IACtC0pB,cAAM57B,KAAK7hC,OAAO09D,UAAUz5D,KAAKjE,OACjCy9D,cAAM37B,MAAM9hC,OAAO09D,UAAUz5D,KAAKjE,OAC3B2uB,KAGF,SAASgvC,iBAAiB97B,KAAMiS,GAAIC,IACzC,IAAIplB,MAAQmlB,GAAIC,IAEhB,OADAplB,KAAKkT,KAAOA,KACLlT,KAGF,SAAS6uC,WAAW7uC,KAAMkT,KAAMC,MAAO87B,QACvCjvC,KAAK,IAAOA,KAAK,GAIXA,KAAKkT,OAASC,MACvBnT,KAAK,GAAKivC,OAEVjvC,KAAK,GAAKivC,QANVjvC,KAAK,GAAKivC,OACVjvC,KAAKkT,KAAOA,KACZlT,KAAKmT,MAAQA,OASjB,SAAS+7B,SAASlvC,KAAMivB,GAAI+S,GAAI9S,GAAIyS,IAClC,IAUIl5D,EAVAsB,EAAIi2B,KAAK,GACTxtB,EAAIwtB,KAAK,GACTmvC,GAAKplE,EAAE,GACPqlE,GAAKrlE,EAAE,GAGPu5C,GAAK,EACLC,GAAK,EACL2f,GAJK1wD,EAAE,GAIG28D,GACVhM,GAJK3wD,EAAE,GAIG48D,GAId,GADA3mE,EAAIwmD,GAAKkgB,GACJjM,MAAMz6D,EAAI,GAAf,CAEA,GADAA,GAAKy6D,GACDA,GAAK,EAAG,CACV,GAAIz6D,EAAI66C,GAAI,OACR76C,EAAI86C,KAAIA,GAAK96C,QACZ,GAAIy6D,GAAK,EAAG,CACjB,GAAIz6D,EAAI86C,GAAI,OACR96C,EAAI66C,KAAIA,GAAK76C,GAInB,GADAA,EAAIymD,GAAKigB,GACJjM,MAAMz6D,EAAI,GAAf,CAEA,GADAA,GAAKy6D,GACDA,GAAK,EAAG,CACV,GAAIz6D,EAAI86C,GAAI,OACR96C,EAAI66C,KAAIA,GAAK76C,QACZ,GAAIy6D,GAAK,EAAG,CACjB,GAAIz6D,EAAI66C,GAAI,OACR76C,EAAI86C,KAAIA,GAAK96C,GAInB,GADAA,EAAIu5D,GAAKoN,GACJjM,MAAM16D,EAAI,GAAf,CAEA,GADAA,GAAK06D,GACDA,GAAK,EAAG,CACV,GAAI16D,EAAI66C,GAAI,OACR76C,EAAI86C,KAAIA,GAAK96C,QACZ,GAAI06D,GAAK,EAAG,CACjB,GAAI16D,EAAI86C,GAAI,OACR96C,EAAI66C,KAAIA,GAAK76C,GAInB,GADAA,EAAIk5D,GAAKyN,GACJjM,MAAM16D,EAAI,GAAf,CAEA,GADAA,GAAK06D,GACDA,GAAK,EAAG,CACV,GAAI16D,EAAI86C,GAAI,OACR96C,EAAI66C,KAAIA,GAAK76C,QACZ,GAAI06D,GAAK,EAAG,CACjB,GAAI16D,EAAI66C,GAAI,OACR76C,EAAI86C,KAAIA,GAAK96C,GAGnB,QAAM66C,GAAK,GAAQC,GAAK,KAEpBD,GAAK,IAAGtjB,KAAK,IAAMmvC,GAAK7rB,GAAK4f,GAAIkM,GAAK9rB,GAAK6f,KAC3C5f,GAAK,IAAGvjB,KAAK,IAAMmvC,GAAK5rB,GAAK2f,GAAIkM,GAAK7rB,GAAK4f,MACxC,OAGT,SAASkM,YAAYrvC,KAAMivB,GAAI+S,GAAI9S,GAAIyS,IACrC,IAAIvc,GAAKplB,KAAK,GACd,GAAIolB,GAAI,OAAO,EAEf,IASIkqB,GACAC,GAVApqB,GAAKnlB,KAAK,GACVkT,KAAOlT,KAAKkT,KACZC,MAAQnT,KAAKmT,MACbq8B,GAAKt8B,KAAK,GACVu8B,GAAKv8B,KAAK,GACVw8B,GAAKv8B,MAAM,GACXw8B,GAAKx8B,MAAM,GACXy8B,IAAMJ,GAAKE,IAAM,EACjBG,IAAMJ,GAAKE,IAAM,EAIrB,GAAIA,KAAOF,GAAI,CACb,GAAIG,GAAK3gB,IAAM2gB,IAAM1gB,GAAI,OACzB,GAAIsgB,GAAKE,GAAI,CACX,GAAKvqB,IACA,GAAIA,GAAG,IAAMwc,GAAI,YADbxc,IAAMyqB,GAAI5N,IAEnB5c,IAAMwqB,GAAIjO,QACL,CACL,GAAKxc,IACA,GAAIA,GAAG,GAAK6c,GAAI,YADZ7c,IAAMyqB,GAAIjO,IAEnBvc,IAAMwqB,GAAI5N,UAKZ,GADAuN,GAAKM,IADLP,IAAME,GAAKE,KAAOC,GAAKF,KACRG,GACXN,IAAM,GAAKA,GAAK,EAClB,GAAIE,GAAKE,GAAI,CACX,GAAKvqB,IACA,GAAIA,GAAG,IAAMwc,GAAI,YADbxc,KAAO6c,GAAKuN,IAAMD,GAAItN,IAE/B5c,KAAOuc,GAAK4N,IAAMD,GAAI3N,QACjB,CACL,GAAKxc,IACA,GAAIA,GAAG,GAAK6c,GAAI,YADZ7c,KAAOwc,GAAK4N,IAAMD,GAAI3N,IAE/Bvc,KAAO4c,GAAKuN,IAAMD,GAAItN,SAGxB,GAAIyN,GAAKE,GAAI,CACX,GAAKxqB,IACA,GAAIA,GAAG,IAAM+J,GAAI,YADb/J,IAAM8J,GAAIqgB,GAAKrgB,GAAKsgB,IAE7BnqB,IAAM8J,GAAIogB,GAAKpgB,GAAKqgB,QACf,CACL,GAAKpqB,IACA,GAAIA,GAAG,GAAK8J,GAAI,YADZ9J,IAAM+J,GAAIogB,GAAKpgB,GAAKqgB,IAE7BnqB,IAAM6J,GAAIqgB,GAAKrgB,GAAKsgB,IAO1B,OAFAvvC,KAAK,GAAKmlB,GACVnlB,KAAK,GAAKolB,IACH,EC9IT,SAAS0qB,kBAAkBC,KAAM/vC,MAC/B,IAAIgwC,KAAOD,KAAKC,KACZC,GAAKjwC,KAAKkT,KACVg9B,GAAKlwC,KAAKmT,MAEd,OADI68B,OAASE,KAAIA,GAAKD,GAAIA,GAAKD,MAC3BE,GAAWj9D,KAAKqxC,MAAM4rB,GAAG,GAAKD,GAAG,GAAIC,GAAG,GAAKD,GAAG,KAChDD,OAASC,IAAIA,GAAKjwC,KAAK,GAAIkwC,GAAKlwC,KAAK,KACpCiwC,GAAKjwC,KAAK,GAAIkwC,GAAKlwC,KAAK,IACtB/sB,KAAKqxC,MAAM2rB,GAAG,GAAKC,GAAG,GAAIA,GAAG,GAAKD,GAAG,KAGvC,SAASE,kBAAkBJ,KAAM/vC,MACtC,OAAOA,OAAOA,KAAKkT,OAAS68B,KAAKC,OAG5B,SAASI,gBAAgBL,KAAM/vC,MACpC,OAAOA,OAAOA,KAAKkT,OAAS68B,KAAKC,OCvBnC,IAEWK,YAFPC,cAaG,SAASC,aAAaxN,KAC3B,IAAIyN,KAAOzN,IAAInxD,EACX6+D,KAAO1N,IAAIl5C,EAEf,GAAK2mD,MAASC,KAAd,CAEA,IAAIC,MAAQF,KAAKR,KACbW,MAAQ5N,IAAIiN,KACZY,MAAQH,KAAKT,KAEjB,GAAIU,QAAUE,MAAd,CAEA,IAAIC,GAAKF,MAAM,GACXG,GAAKH,MAAM,GACXxB,GAAKuB,MAAM,GAAKG,GAChBzB,GAAKsB,MAAM,GAAKI,GAChBvL,GAAKqL,MAAM,GAAKC,GAChBrL,GAAKoL,MAAM,GAAKE,GAEhB7oE,EAAI,GAAKknE,GAAK3J,GAAK4J,GAAK7J,IAC5B,KAAIt9D,IAAM8oE,kBAAV,CAEA,IAAIC,GAAK7B,GAAKA,GAAKC,GAAKA,GACpB6B,GAAK1L,GAAKA,GAAKC,GAAKA,GACpBj6B,GAAKi6B,GAAKwL,GAAK5B,GAAK6B,IAAMhpE,EAC1B2K,GAAKu8D,GAAK8B,GAAK1L,GAAKyL,IAAM/oE,EAE1BipE,OAASZ,WAAWj6C,OAAS,IApCnC,SAAS86C,SACPhD,aAAa/+D,MACbA,KAAKm8B,EACLn8B,KAAKwD,EACLxD,KAAK2zD,IACL3zD,KAAK4gE,KACL5gE,KAAKo2D,GAAK,MA+BV0L,OAAOnO,IAAMA,IACbmO,OAAOlB,KAAOW,MACdO,OAAO3lC,EAAIA,EAAIslC,GACfK,OAAOt+D,GAAKs+D,OAAO1L,GAAK5yD,EAAIk+D,IAAM79D,KAAKkQ,KAAKooB,EAAIA,EAAI34B,EAAIA,GAExDmwD,IAAImO,OAASA,OAKb,IAHA,IAAIE,OAAS,KACTlzC,KAAOmzC,QAAQ9hD,EAEZ2O,MACL,GAAIgzC,OAAOt+D,EAAIsrB,KAAKtrB,GAAMs+D,OAAOt+D,IAAMsrB,KAAKtrB,GAAKs+D,OAAO3lC,GAAKrN,KAAKqN,EAAI,CACpE,IAAIrN,KAAKm1B,EACJ,CAAE+d,OAASlzC,KAAKtsB,EAAG,MADZssB,KAAOA,KAAKm1B,MAEnB,CACL,IAAIn1B,KAAKkwC,EACJ,CAAEgD,OAASlzC,KAAM,MADVA,KAAOA,KAAKkwC,EAK5BiD,QAAQ1Q,OAAOyQ,OAAQF,QAClBE,SAAQf,YAAca,WAGtB,SAASI,aAAavO,KAC3B,IAAImO,OAASnO,IAAImO,OACbA,SACGA,OAAOt/D,IAAGy+D,YAAca,OAAOrnD,GACpCwnD,QAAQz8B,OAAOs8B,QACfZ,WAAWh7D,KAAK47D,QAChB/C,aAAa+C,QACbnO,IAAImO,OAAS,MCrEjB,IAAIK,aASJ,SAASC,YAAYxB,MACnB,IAAIyB,MAAQF,UAAUl7C,OAAS,IARjC,SAASq7C,QACPvD,aAAa/+D,MACbA,KAAK4wB,KACL5wB,KAAK4gE,KACL5gE,KAAK8hE,OAAS,MAMd,OADAO,MAAMzB,KAAOA,KACNyB,MAGT,SAASE,YAAYF,OACnBH,aAAaG,OACbG,QAAQh9B,OAAO68B,OACfF,UAAUj8D,KAAKm8D,OACftD,aAAasD,OAGR,SAASI,YAAYJ,OAC1B,IAAIP,OAASO,MAAMP,OACf3lC,EAAI2lC,OAAO3lC,EACX34B,EAAIs+D,OAAO1L,GACXyJ,QAAU1jC,EAAG34B,GACb09C,SAAWmhB,MAAM7/D,EACjByP,KAAOowD,MAAM5nD,EACbioD,cAAgBL,OAEpBE,YAAYF,OAGZ,IADA,IAAIjB,KAAOlgB,SACJkgB,KAAKU,QACLj+D,KAAKsnB,IAAIgR,EAAIilC,KAAKU,OAAO3lC,GAAK4zB,iBAC9BlsD,KAAKsnB,IAAI3nB,EAAI49D,KAAKU,OAAO1L,IAAMrG,iBACpC7O,SAAWkgB,KAAK5+D,EAChBkgE,aAAaj7D,QAAQ25D,MACrBmB,YAAYnB,MACZA,KAAOlgB,SAGTwhB,aAAaj7D,QAAQ25D,MACrBc,aAAad,MAGb,IADA,IAAIC,KAAOpvD,KACJovD,KAAKS,QACLj+D,KAAKsnB,IAAIgR,EAAIklC,KAAKS,OAAO3lC,GAAK4zB,iBAC9BlsD,KAAKsnB,IAAI3nB,EAAI69D,KAAKS,OAAO1L,IAAMrG,iBACpC99C,KAAOovD,KAAK5mD,EACZioD,aAAax8D,KAAKm7D,MAClBkB,YAAYlB,MACZA,KAAOpvD,KAGTywD,aAAax8D,KAAKm7D,MAClBa,aAAab,MAEb,IACIsB,KADAC,MAAQF,aAAahhE,OAEzB,IAAKihE,KAAO,EAAGA,KAAOC,QAASD,KAC7BtB,KAAOqB,aAAaC,MACpBvB,KAAOsB,aAAaC,KAAO,GAC3BlD,WAAW4B,KAAKzwC,KAAMwwC,KAAKR,KAAMS,KAAKT,KAAMf,QAG9CuB,KAAOsB,aAAa,IACpBrB,KAAOqB,aAAaE,MAAQ,IACvBhyC,KAAO4uC,WAAW4B,KAAKR,KAAMS,KAAKT,KAAM,KAAMf,QAEnDsB,aAAaC,MACbD,aAAaE,MAGR,SAASwB,SAASjC,MASvB,IARA,IAEIQ,KACAC,KACAyB,IACAC,IALA5mC,EAAIykC,KAAK,GACToC,UAAYpC,KAAK,GAKjB9xC,KAAO0zC,QAAQriD,EAEZ2O,MAEL,IADAg0C,IAAMG,eAAen0C,KAAMk0C,WAAa7mC,GAC9B4zB,gBAASjhC,KAAOA,KAAKm1B,MAAQ,CAErC,MADA8e,IAAM5mC,EAAI+mC,gBAAgBp0C,KAAMk0C,YACtBjT,iBAMH,CACD+S,KAAO/S,iBACTqR,KAAOtyC,KAAKtsB,EACZ6+D,KAAOvyC,MACEi0C,KAAOhT,iBAChBqR,KAAOtyC,KACPuyC,KAAOvyC,KAAKrU,GAEZ2mD,KAAOC,KAAOvyC,KAEhB,MAfA,IAAKA,KAAKkwC,EAAG,CACXoC,KAAOtyC,KACP,MAEFA,KAAOA,KAAKkwC,GFhGb,SAASmE,WAAWvC,MACzB,OAAOlB,cAAMkB,KAAK3+D,QAChB2+D,KAAMA,KACNjB,cE6GFwD,CAAWvC,MACX,IAAIwC,OAAShB,YAAYxB,MAGzB,GAFA4B,QAAQjR,OAAO6P,KAAMgC,QAEhBhC,MAASC,KAAd,CAEA,GAAID,OAASC,KAOX,OANAa,aAAad,MACbC,KAAOe,YAAYhB,KAAKR,MACxB4B,QAAQjR,OAAO6R,OAAQ/B,MACvB+B,OAAOxyC,KAAOywC,KAAKzwC,KAAO4uC,WAAW4B,KAAKR,KAAMwC,OAAOxC,MACvDO,aAAaC,WACbD,aAAaE,MAIf,GAAKA,KAAL,CAMAa,aAAad,MACbc,aAAab,MAEb,IAAIC,MAAQF,KAAKR,KACbb,GAAKuB,MAAM,GACXtB,GAAKsB,MAAM,GACXG,GAAKb,KAAK,GAAKb,GACf2B,GAAKd,KAAK,GAAKZ,GACfwB,MAAQH,KAAKT,KACbzK,GAAKqL,MAAM,GAAKzB,GAChB3J,GAAKoL,MAAM,GAAKxB,GAChBnnE,EAAI,GAAK4oE,GAAKrL,GAAKsL,GAAKvL,IACxBkN,GAAK5B,GAAKA,GAAKC,GAAKA,GACpBG,GAAK1L,GAAKA,GAAKC,GAAKA,GACpByJ,SAAWzJ,GAAKiN,GAAK3B,GAAKG,IAAMhpE,EAAIknE,IAAK0B,GAAKI,GAAK1L,GAAKkN,IAAMxqE,EAAImnE,IAEtEP,WAAW4B,KAAKzwC,KAAM0wC,MAAOE,MAAO3B,QACpCuD,OAAOxyC,KAAO4uC,WAAW8B,MAAOV,KAAM,KAAMf,QAC5CwB,KAAKzwC,KAAO4uC,WAAWoB,KAAMY,MAAO,KAAM3B,QAC1CsB,aAAaC,MACbD,aAAaE,WAzBX+B,OAAOxyC,KAAO4uC,WAAW4B,KAAKR,KAAMwC,OAAOxC,OA4B/C,SAASqC,eAAetP,IAAKqP,WAC3B,IAAIpC,KAAOjN,IAAIiN,KACX0C,MAAQ1C,KAAK,GACb2C,MAAQ3C,KAAK,GACb4C,KAAOD,MAAQP,UAEnB,IAAKQ,KAAM,OAAOF,MAElB,IAAIlC,KAAOzN,IAAInxD,EACf,IAAK4+D,KAAM,OAAQliB,IAGnB,IAAIukB,OADJ7C,KAAOQ,KAAKR,MACK,GACb8C,MAAQ9C,KAAK,GACb+C,MAAQD,MAAQV,UAEpB,IAAKW,MAAO,OAAOF,MAEnB,IAAIG,GAAKH,MAAQH,MACbO,KAAO,EAAIL,KAAO,EAAIG,MACtBvgE,EAAIwgE,GAAKD,MAEb,OAAIE,OAAezgE,EAAIS,KAAKkQ,KAAK3Q,EAAIA,EAAI,EAAIygE,MAAQD,GAAKA,KAAO,EAAID,OAASD,MAAQC,MAAQ,EAAIJ,MAAQC,KAAO,KAAOK,KAAOP,OAEvHA,MAAQG,OAAS,EAG3B,SAASP,gBAAgBvP,IAAKqP,WAC5B,IAAI3B,KAAO1N,IAAIl5C,EACf,GAAI4mD,KAAM,OAAO4B,eAAe5B,KAAM2B,WACtC,IAAIpC,KAAOjN,IAAIiN,KACf,OAAOA,KAAK,KAAOoC,UAAYpC,KAAK,GAAK1hB,ICzLpC,IAEIsjB,QACA9C,cACAuC,QACA7xC,cALA2/B,gBAAU,KACV4R,iBAAW,MAMtB,SAASmC,aAAanpE,EAAGyI,EAAGxK,GAC1B,OAAQ+B,EAAE,GAAK/B,EAAE,KAAOwK,EAAE,GAAKzI,EAAE,KAAOA,EAAE,GAAKyI,EAAE,KAAOxK,EAAE,GAAK+B,EAAE,IAGnE,SAASopE,cAAcppE,EAAGyI,GACxB,OAAOA,EAAE,GAAKzI,EAAE,IACTyI,EAAE,GAAKzI,EAAE,GAGH,SAASqpE,QAAQC,MAAOC,QACrC,IACI/nC,EACA34B,EACAs+D,OAHAlB,KAAOqD,MAAM1zD,KAAKwzD,eAAe98C,MAUrC,IALAmJ,iBACAsvC,cAAQ,IAAI72D,MAAMo7D,MAAMviE,QACxB8gE,QAAU,IAAI1D,iBACdmD,QAAU,IAAInD,mBAIZ,GADAgD,OAASb,YACLL,QAAUkB,QAAUlB,KAAK,GAAKkB,OAAOt+D,GAAMo9D,KAAK,KAAOkB,OAAOt+D,GAAKo9D,KAAK,GAAKkB,OAAO3lC,GAClFykC,KAAK,KAAOzkC,GAAKykC,KAAK,KAAOp9D,IAC/Bq/D,SAASjC,MACTzkC,EAAIykC,KAAK,GAAIp9D,EAAIo9D,KAAK,IAExBA,KAAOqD,MAAMh9C,UACR,KAAI66C,OAGT,MAFAW,YAAYX,OAAOnO,KAQvB,GHrBK,SAASwQ,oBACd,IAAK,IAA6BxD,KAAMhB,UAAW9kD,EAAGliB,EAA7CJ,EAAI,EAAGyB,EAAI0lE,cAAMh+D,OAA+BnJ,EAAIyB,IAAKzB,EAChE,IAAKooE,KAAOjB,cAAMnnE,MAAQI,GAAKgnE,UAAYgB,KAAKhB,WAAWj+D,QAAS,CAClE,IAAIO,MAAQ,IAAI4G,MAAMlQ,GAClBwrC,MAAQ,IAAIt7B,MAAMlQ,GACtB,IAAKkiB,EAAI,EAAGA,EAAIliB,IAAKkiB,EAAG5Y,MAAM4Y,GAAKA,EAAGspB,MAAMtpB,GAAK6lD,kBAAkBC,KAAMvwC,cAAMuvC,UAAU9kD,KAEzF,IADA5Y,MAAMsO,KAAK,SAAShY,EAAGsiB,GAAK,OAAOspB,MAAMtpB,GAAKspB,MAAM5rC,KAC/CsiB,EAAI,EAAGA,EAAIliB,IAAKkiB,EAAGspB,MAAMtpB,GAAK8kD,UAAU19D,MAAM4Y,IACnD,IAAKA,EAAI,EAAGA,EAAIliB,IAAKkiB,EAAG8kD,UAAU9kD,GAAKspB,MAAMtpB,IGWjDspD,GAEID,OAAQ,CACV,IAAIrkB,IAAMqkB,OAAO,GAAG,GAChBtR,IAAMsR,OAAO,GAAG,GAChBpkB,IAAMokB,OAAO,GAAG,GAChB3R,IAAM2R,OAAO,GAAG,IJqGjB,SAASE,UAAUvkB,GAAI+S,GAAI9S,GAAIyS,IAIpC,IAHA,IACI3hC,KADAr4B,EAAI63B,cAAM1uB,OAGPnJ,KACA0nE,YAAYrvC,KAAOR,cAAM73B,GAAIsnD,GAAI+S,GAAI9S,GAAIyS,KACtCuN,SAASlvC,KAAMivB,GAAI+S,GAAI9S,GAAIyS,MAC1B1uD,KAAKsnB,IAAIyF,KAAK,GAAG,GAAKA,KAAK,GAAG,IAAMm/B,iBAClClsD,KAAKsnB,IAAIyF,KAAK,GAAG,GAAKA,KAAK,GAAG,IAAMm/B,yBACtC3/B,cAAM73B,GI7Gf6rE,CAAUvkB,GAAI+S,GAAI9S,GAAIyS,IHbnB,SAAS8R,UAAUxkB,GAAI+S,GAAI9S,GAAIyS,IACpC,IACI+R,MACA3D,KACAC,KACA2D,UACA5E,UACA6E,WACAvmE,MACAwmE,OACAC,OACAj4D,IACAk4D,KACAC,KAZAC,OAASnF,cAAMh+D,OAafojE,OAAQ,EAEZ,IAAKR,MAAQ,EAAGA,MAAQO,SAAUP,MAChC,GAAI3D,KAAOjB,cAAM4E,OAAQ,CAMvB,IALA1D,KAAOD,KAAKC,KAEZ2D,WADA5E,UAAYgB,KAAKhB,WACKj+D,OAGf6iE,aACAn0C,cAAMuvC,UAAU4E,aACnB5E,UAAUr4D,OAAOi9D,UAAW,GAMhC,IADAA,UAAY,EAAGC,WAAa7E,UAAUj+D,OAC/B6iE,UAAYC,YACyCG,MAA1Dl4D,IAAMu0D,gBAAgBL,KAAMvwC,cAAMuvC,UAAU4E,cAAyB,GAAIK,KAAOn4D,IAAI,GACPg4D,QAA7ExmE,MAAQ8iE,kBAAkBJ,KAAMvwC,cAAMuvC,YAAY4E,UAAYC,eAA8B,GAAIE,OAASzmE,MAAM,IAC3G4F,KAAKsnB,IAAIw5C,KAAOF,QAAU1U,iBAAWlsD,KAAKsnB,IAAIy5C,KAAOF,QAAU3U,mBACjE4P,UAAUr4D,OAAOi9D,UAAW,EAAGn0C,cAAMlqB,KAAK05D,iBAAiBgB,KAAMn0D,IAC7D5I,KAAKsnB,IAAIw5C,KAAO9kB,IAAMkQ,iBAAWwC,GAAKqS,KAAO7U,iBAAWlQ,GAAIh8C,KAAKsnB,IAAIs5C,OAAS5kB,IAAMkQ,gBAAU2U,OAASnS,IACrG1uD,KAAKsnB,IAAIy5C,KAAOrS,IAAMxC,iBAAWjQ,GAAK6kB,KAAO5U,iBAAWlsD,KAAKsnB,IAAIu5C,OAASnS,IAAMxC,gBAAU0U,OAAS3kB,GAAIyS,IACvG1uD,KAAKsnB,IAAIw5C,KAAO7kB,IAAMiQ,iBAAW6U,KAAOhS,GAAK7C,iBAAWjQ,GAAIj8C,KAAKsnB,IAAIs5C,OAAS3kB,IAAMiQ,gBAAU2U,OAAS9R,IACvG/uD,KAAKsnB,IAAIy5C,KAAOhS,IAAM7C,iBAAW4U,KAAO9kB,GAAKkQ,iBAAWlsD,KAAKsnB,IAAIu5C,OAAS9R,IAAM7C,gBAAU0U,OAAS5kB,GAAI+S,IACvG,OAAS,KACb4R,YAIFA,aAAYM,OAAQ,GAM5B,GAAIA,MAAO,CACT,IAAIhR,GAAIC,GAAI2B,GAAIqP,GAAK7lB,IAErB,IAAKolB,MAAQ,EAAGQ,MAAQ,KAAMR,MAAQO,SAAUP,OAC1C3D,KAAOjB,cAAM4E,UAIf5O,IAFA5B,IADA8M,KAAOD,KAAKC,MACF,GAAK/gB,IAELiU,IADVC,GAAK6M,KAAK,GAAKhO,IACKmB,IACXgR,KAAIA,GAAKrP,GAAIoP,MAAQnE,MAIlC,GAAImE,MAAO,CACT,IAAIE,KAAOnlB,GAAI+S,IAAKqS,KAAOplB,GAAI0S,IAAK2S,KAAOplB,GAAIyS,IAAK4S,KAAOrlB,GAAI8S,IAC/DkS,MAAMnF,UAAUz5D,KACdkqB,cAAMlqB,KAAK05D,iBAAiBgB,KAAOkE,MAAMlE,KAAMoE,IAAKC,MAAQ,EAC5D70C,cAAMlqB,KAAK05D,iBAAiBgB,KAAMqE,IAAKC,MAAQ,EAC/C90C,cAAMlqB,KAAK05D,iBAAiBgB,KAAMsE,IAAKC,MAAQ,EAC/C/0C,cAAMlqB,KAAK05D,iBAAiBgB,KAAMuE,IAAKH,MAAQ,IAMrD,IAAKV,MAAQ,EAAGA,MAAQO,SAAUP,OAC5B3D,KAAOjB,cAAM4E,UACV3D,KAAKhB,UAAUj+D,eACXg+D,cAAM4E,QGjEjBD,CAAUxkB,GAAI+S,GAAI9S,GAAIyS,IAGxBvyD,KAAKowB,MAAQA,cACbpwB,KAAK0/D,MAAQA,cAEb8C,QACAP,QACA7xC,cACAsvC,cAAQ,KAGVsE,QAAQ3pE,WACN2qB,YAAag/C,QAEboB,SAAU,SAAAA,WACR,IAAIh1C,MAAQpwB,KAAKowB,MAEjB,OAAOpwB,KAAK0/D,MAAMz3D,IAAI,SAAS04D,MAC7B,IAAI0E,QAAU1E,KAAKhB,UAAU13D,IAAI,SAAS1P,GAAK,OAAOwoE,kBAAkBJ,KAAMvwC,MAAM73B,MAEpF,OADA8sE,QAAQt6D,KAAO41D,KAAKC,KAAK71D,KAClBs6D,WAIXC,UAAW,SAAAA,YACT,IAAIA,aACAl1C,MAAQpwB,KAAKowB,MAsBjB,OApBApwB,KAAK0/D,MAAM52D,QAAQ,SAAS63D,KAAMpoE,GAChC,GAAMI,GAAKgnE,UAAYgB,KAAKhB,WAAWj+D,OASvC,IARA,IACIi+D,UAEAhnE,EACAsjE,GAJA2E,KAAOD,KAAKC,KAEZ/lD,GAAK,EAGL0qD,GAAKn1C,MAAMuvC,UAAUhnE,EAAI,IACzB00B,GAAKk4C,GAAGzhC,OAAS88B,KAAO2E,GAAGxhC,MAAQwhC,GAAGzhC,OAEjCjpB,EAAIliB,GACXsjE,GAAK5uC,GAELA,IADAk4C,GAAKn1C,MAAMuvC,UAAU9kD,KACbipB,OAAS88B,KAAO2E,GAAGxhC,MAAQwhC,GAAGzhC,KAClCm4B,IAAM5uC,IAAM90B,EAAI0jE,GAAGh6D,OAAS1J,EAAI80B,GAAGprB,OAAS6hE,aAAalD,KAAM3E,GAAI5uC,IAAM,GAC3Ei4C,UAAUp/D,MAAM06D,KAAK71D,KAAMkxD,GAAGlxD,KAAMsiB,GAAGtiB,SAKtCu6D,WAGTE,MAAO,SAAAA,QACL,OAAOxlE,KAAKowB,MAAMpd,OAAO,SAAS4d,MAChC,OAAOA,KAAKmT,QACX97B,IAAI,SAAS2oB,MACd,OACEnN,OAAQmN,KAAKkT,KAAK/4B,KAClB2wC,OAAQ9qB,KAAKmT,MAAMh5B,SAKzBqf,KAAM,SAAAA,KAAS+R,EAAG34B,EAAGiiE,QAInB,IAHA,IAAiBpgC,GAAkDs7B,KAA/DvH,KAAOp5D,KAAUq9C,GAAK+b,KAAKsM,QAAU,EAAG1rE,EAAIo/D,KAAKsG,MAAMh+D,SAGlDi/D,KAAOvH,KAAKsG,MAAMriB,MAAM,KAAMA,IAAMrjD,EAAG,OAAO,KACvD,IAAI85D,GAAK33B,EAAIwkC,KAAKC,KAAK,GAAI7M,GAAKvwD,EAAIm9D,KAAKC,KAAK,GAAIlL,GAAK5B,GAAKA,GAAKC,GAAKA,GAGtE,GACE4M,KAAOvH,KAAKsG,MAAMr6B,GAAKgY,IAAKA,GAAK,KACjCsjB,KAAKhB,UAAU72D,QAAQ,SAASrO,GAC9B,IAAIm2B,KAAOwoC,KAAKhpC,MAAM31B,GAAImP,EAAIgnB,KAAKkT,KACnC,GAAKl6B,IAAM+2D,KAAKC,MAASh3D,IAAQA,EAAIgnB,KAAKmT,OAA1C,CACA,IAAI4hC,GAAKxpC,EAAIvyB,EAAE,GAAIg8D,GAAKpiE,EAAIoG,EAAE,GAAIqsC,GAAK0vB,GAAKA,GAAKC,GAAKA,GAClD3vB,GAAKyf,KAAIA,GAAKzf,GAAIoH,GAAKzzC,EAAE3H,gBAEjB,OAAPo7C,IAIT,OAFA+b,KAAKsM,OAASrgC,GAEG,MAAVogC,QAAkB/P,IAAM+P,OAASA,OAAS9E,KAAKC,KAAO,OCvIlD,IAAAiF,YAAA,WACb,IAAI1pC,EAAI46B,YACJvzD,EAAIwzD,YACJkN,OAAS,KAEb,SAAS4B,QAAQ/6D,MACf,OAAO,IAAIi5D,QAAQj5D,KAAK9C,IAAI,SAASpP,EAAGN,GACtC,IAAIiC,GAAKqJ,KAAK2G,MAAM2xB,EAAEtjC,EAAGN,EAAGwS,MAAQglD,iBAAWA,gBAASlsD,KAAK2G,MAAMhH,EAAE3K,EAAGN,EAAGwS,MAAQglD,iBAAWA,iBAG9F,OAFAv1D,EAAEyH,MAAQ1J,EACViC,EAAEuQ,KAAOlS,EACF2B,IACL0pE,QA+BN,OA5BA4B,QAAQV,SAAW,SAASr6D,MAC1B,OAAO+6D,QAAQ/6D,MAAMq6D,YAGvBU,QAAQN,MAAQ,SAASz6D,MACvB,OAAO+6D,QAAQ/6D,MAAMy6D,SAGvBM,QAAQR,UAAY,SAASv6D,MAC3B,OAAO+6D,QAAQ/6D,MAAMu6D,aAGvBQ,QAAQ3pC,EAAI,SAAShc,GACnB,OAAO/a,UAAU1D,QAAUy6B,EAAiB,mBAANhc,EAAmBA,EAAIq2B,yBAAUr2B,GAAI2lD,SAAW3pC,GAGxF2pC,QAAQtiE,EAAI,SAAS2c,GACnB,OAAO/a,UAAU1D,QAAU8B,EAAiB,mBAAN2c,EAAmBA,EAAIq2B,yBAAUr2B,GAAI2lD,SAAWtiE,GAGxFsiE,QAAQ5B,OAAS,SAAS/jD,GACxB,OAAO/a,UAAU1D,QAAUwiE,OAAc,MAAL/jD,EAAY,QAAUA,EAAE,GAAG,IAAKA,EAAE,GAAG,MAAOA,EAAE,GAAG,IAAKA,EAAE,GAAG,KAAM2lD,SAAW5B,UAAYA,OAAO,GAAG,GAAIA,OAAO,GAAG,KAAMA,OAAO,GAAG,GAAIA,OAAO,GAAG,MAGpL4B,QAAQptC,KAAO,SAASvY,GACtB,OAAO/a,UAAU1D,QAAUwiE,OAAc,MAAL/jD,EAAY,OAAS,EAAG,KAAMA,EAAE,IAAKA,EAAE,KAAM2lD,SAAW5B,SAAWA,OAAO,GAAG,GAAKA,OAAO,GAAG,GAAIA,OAAO,GAAG,GAAKA,OAAO,GAAG,KAGxJ4B,kXCsKMC,gCAzMX,SAAAA,2JAAeh6D,CAAA/L,KAAA+lE,WACX/lE,KAAKgmE,SAELhmE,KAAKimE,UACLjmE,KAAKkmE,YACLlmE,KAAKmmE,MAAQ,GAMbnmE,KAAKomE,cAELpmE,KAAKqmE,mRASL,OAAOptE,OAAOskB,OAAOvd,KAAKimE,0CAWxBK,QAASC,UAAU,IAAA9xD,MAAAzU,KACrB,GAAIumE,SAAU,CACVvmE,KAAKgmE,SACLhmE,KAAKwmE,UAAYD,SACjB,IAAME,WAENH,QAAQx9D,QAAQ,WACZ,IAAM7G,MAAQskE,SAAQh/D,WAAR,EAAAnC,WACdqhE,QAAQxkE,OAARmD,UAAA1D,QAAA,OAAA4L,EAAAlI,UAAA,KAGJ,IAAMshE,aAyBN,OAvBAztE,OAAO6M,KAAK9F,KAAKimE,QAAQn9D,QAAQ,SAACguB,IACzB2vC,QAAQ3vC,KACT4vC,UAAUxgE,KAAK4wB,MAIvB79B,OAAO6M,KAAK2gE,SAAS39D,QAAQ,SAACguB,IACrBriB,MAAKwxD,OAAOnvC,KAGbriB,MAAKwxD,OAAOnvC,IAAM2vC,QAAQ3vC,IAC1BriB,MAAKuxD,MAAM9/D,KAAKugE,QAAQ3vC,MAHxBriB,MAAK2xD,WAAWlgE,KAAKugE,QAAQ3vC,OAOrC4vC,UAAU59D,QAAQ,SAACguB,IACf,IAAM6vC,OAASlyD,MAAKwxD,OAAOnvC,IAC3BriB,MAAK4xD,UAAUngE,KAAKygE,eAEblyD,MAAKwxD,OAAOnvC,MAIhB92B,KAGX,GAAIsmE,QAAQ5kE,OAAS1B,KAAKgmE,MAAMtkE,OAE5B,IADA,IACSnJ,EADQyH,KAAKgmE,MAAMtkE,OACLnJ,EAAI+tE,QAAQ5kE,OAAQnJ,GAAK,EAC5CyH,KAAKomE,WAAWlgE,KAAKogE,QAAQ/tE,QAE9B,CAGH,IADA,IAAMquE,KAAON,QAAQ5kE,OACZnJ,GAAIquE,KAAMruE,GAAIyH,KAAKgmE,MAAMtkE,OAAQnJ,IAAK,EAAG,CAC9C,IAAMouE,OAAS3mE,KAAKgmE,MAAMztE,WACnByH,KAAKimE,OAAOU,OAAO7vC,IAC1B92B,KAAKqmE,UAAUngE,KAAKygE,QAExB3mE,KAAKgmE,MAAQhmE,KAAKgmE,MAAMlrD,MAAM8rD,KAAM5mE,KAAKgmE,MAAMtkE,QAEnD,OAAO1B,2CAWHqM,UAAU,IAAAsI,OAAA3U,KAQd,OAPAA,KAAA,IAAAqb,OAASrb,KAAKmmE,MAAd,SAA2Br9D,QAAQ,WAC/B,IAAMiC,KAAI3F,UAAA1D,QAAA,OAAA4L,EAAAlI,UAAA,GACJ0xB,GAAKniB,OAAK6xD,UAAY7xD,OAAK6xD,UAALj/D,MAAAoN,OAAIvP,WAAyB2F,KAAK+rB,KAAL1xB,UAAA1D,QAAA,OAAA4L,EAAAlI,UAAA,IACzDuP,OAAKsxD,OAAOnvC,IAAMzqB,SAAQ9E,WAAR,EAAAnC,WAClBuP,OAAKuxD,SAASpvC,IAAM/rB,OAExB/K,KAAKmmE,MAAQ,GACNnmE,2CAYP,OADAA,KAAKmmE,MAAQ,QACNnmE,uCAaLlG,IAAKN,OAEP,OADAwG,KAAKgmE,MAAMl9D,QAAQ,SAAAkB,MAAI,OAAIA,KAAKqnD,KAAKv3D,IAAKN,SACnCwG,yCAUJ8wD,WAAW,IAAA15C,OAAApX,KAQd,OAPA8wD,UAAUkV,MAAMl9D,QAAQ,WAAe,QAAA+9D,KAAAzhE,UAAA1D,OAAXgf,OAAW,IAAA7X,MAAAg+D,MAAAC,KAAA,EAAAA,KAAAD,KAAAC,OAAXpmD,OAAWomD,MAAA1hE,UAAA0hE,MACnC,IAAMhwC,GAAK1f,OAAKovD,UAAYpvD,OAAKovD,UAALj/D,MAAA6P,OAAkBsJ,QAAWA,OAAO,GAAGoW,IAAMpW,OAAO,GAChFtJ,OAAK6uD,OAAOnvC,IAAMpW,OAAO,GACzBtJ,OAAK4uD,MAAM9/D,KAAKwa,OAAO,MAG3B1gB,KAAKomE,cACEpmE,yCAcP,OAJAA,KAAKmmE,MAAQ,OAINnmE,uCAGL+d,IAAI,IAAA2V,OAAA1zB,KAIN,OAHA/G,OAAO6M,KAAK9F,KAAKimE,QAAQn9D,QAAQ,SAACrO,EAAGlC,GACjCwlB,GAAG2V,OAAKuyC,OAAOxrE,GAAIi5B,OAAKwyC,SAASzrE,GAAIlC,KAElCyH,qCAGN+d,IAAI,IAAAgpD,OAAA/mE,KAKL,OAJA/G,OAAO6M,KAAK9F,KAAKimE,QAAQn9D,QAAQ,WAAe,QAAAk+D,MAAA5hE,UAAA1D,OAAXgf,OAAW,IAAA7X,MAAAm+D,OAAAC,MAAA,EAAAA,MAAAD,MAAAC,QAAXvmD,OAAWumD,OAAA7hE,UAAA6hE,OAC5C,IAAMntE,IAAM4mB,OAAO,GACnBqmD,OAAKd,OAAOnsE,KAAOikB,GAAExW,WAAF,GAAGw/D,OAAKd,OAAOnsE,MAAfuhB,OAAwBqF,QAAQqmD,OAAKb,SAASpsE,UAE9DkG,6CAUMA,KAAA,IAAAqb,OAASrb,KAAKmmE,MAAd,SAERr9D,QAAQ,SAAAkB,MAAI,OAAIA,KAAKw7B,WACP,KAAfxlC,KAAKmmE,OACLnmE,KAAKulC,KAAK,SAAA9qC,GAAC,OAAIA,EAAE+qC,WAErBxlC,KAAA,IAAAqb,OAASrb,KAAKmmE,MAAd,YACAnmE,KAAKmmE,MAAQ,knEChJbz5D,kBAAsBrO,oBAAtBqO,kBAGF8gB,gBAFcr1B,OAAO+uE,YAEJ,SAAjB15C,eAAkBtlB,KAEpB,GAAmB,WAAfi/D,oBAAOj/D,KAAkB,CACzB,GAAY,OAARA,IAAgB,OAAO,EAE3B,GAAc,oBADNjP,OAAOoB,UAAUiI,SAAS5J,KAAKwP,KAEnC,MAA8E,YAAtEA,IAAI8c,YAAY1iB,WAAW+F,MAAM,4BAA8B,GAG/E,OAAO,IAQPiC,YAAc,SAAdA,cAAc,YAAA+Q,QAAY,IAAIzb,MAAO2K,WAAvB8Q,OAAmCxX,KAAK2G,MAAsB,IAAhB3G,KAAK4G,YAO/DoT,MAAQ,SAARA,MAAS7kB,GACX,IACI4Q,EADEiyC,UAEN,IAAK,IAAM/hD,OAAOd,OACPsB,eAAe5B,KAAKM,EAAGc,OAC1B8P,EAAI5Q,EAAEc,KACN+hD,OAAO/hD,KAAO0zB,eAAe5jB,GAAKiU,MAAMjU,GAAKA,GAGrD,OAAOiyC,QAoBLurB,mBACO,SAAAC,QAACvhE,KAAMoC,KACZ,GAAmB,WAAfi/D,oBAAOj/D,KACP,OAAO+G,MAAM,iCAGjB,IAAMq4D,gBAjBS,SAAjBC,eAAkBzhE,KAAMoC,KAC1B,IAAMo/D,mBAON,OANAxhE,KAAKgD,QAAQ,SAAChP,KACNA,OAAOoO,KAGXo/D,gBAAgBphE,KAAKpM,OAElBwtE,gBASqBC,CAAezhE,KAAMoC,KAC7C,OAAIo/D,gBAAgB5lE,OACTuN,MAAK,+BAAAoM,OAAgCisD,gBAAgBvkE,KAAK,QAE9DmF,KAiBTs/D,OAAS,SAATA,OAAUz8D,KAAMO,OAAP,OAAiBzH,KAAK6P,IAALnM,MAAA1D,KAAI4jE,mBAAQ18D,KAAK9C,IAAI,SAAApP,GAAC,OAAIA,EAAEyS,YAQtDo8D,OAAS,SAATA,OAAU38D,KAAMO,OAAP,OAAiBzH,KAAK2P,IAALjM,MAAA1D,KAAI4jE,mBAAQ18D,KAAK9C,IAAI,SAAApP,GAAC,OAAIA,EAAEyS,YAUtDq8D,+BAAoB,SAApBA,kBAAqB58D,KAAMnC,OAAQg/D,WAAc,IAAAj1C,KAC/Cnc,OACEqxD,UAEN,OADA98D,KAAOA,KAAK,aAAclC,MAAQkC,MAAQA,MAClC68D,WACR,KAAKhpE,gCAAiBC,YAClB2X,QAASmc,SAAGtX,OAAH9T,MAAAorB,KAAA80C,mBAAa18D,KAAK9C,IAAI,SAAAoI,KAAG,OAAIA,IAAIpI,IAAI,SAAApP,GAAC,OAAIA,EAAE+P,OAAO,MAAKoK,OAAO,SAAAna,GAAC,YAAUyU,IAANzU,QAC7E,MACJ,QACI,IADJ,IAAAivE,MAAA,SAAAA,MACavvE,EAAOkQ,KACZ,IAAM4H,IAAMtF,KAAKxS,GAFzBwvE,QAAAC,eAGiCp/D,OAHjC,GAGeq/D,OAHfF,QAAA,GAGuBG,OAHvBH,QAAA,GAIcI,KAAO93D,IAAI2C,OAAO,SAAAna,GAAC,OAAKya,MAAMza,EAAEovE,WAChCt9D,KAAO0F,IAAI2C,OAAO,SAAAna,GAAC,OAAKya,MAAMza,EAAEqvE,WACtC,GAAIC,KAAKzmE,QAAUiJ,KAAKjJ,OAAQ,CAC5B,IAAM0mE,SAAWV,OAAOS,KAAMF,QACxBI,UAAYX,OAAO/8D,KAAMu9D,QACzBI,SAAWd,OAAOW,KAAMF,QACxBM,UAAYf,OAAO78D,KAAMu9D,QAC/BL,OAAO3hE,MAAMrC,KAAK2P,IAAI40D,SAAUC,WAAYxkE,KAAK6P,IAAI40D,SAAUC,eAV9DhwE,EAAI,EAAGkQ,IAAMsC,KAAKrJ,OAAQnJ,EAAIkQ,IAAKlQ,IAAKuvE,MAAxCvvE,GAaTie,OAASqxD,OAAOnmE,QAAUmC,KAAK2P,IAALjM,MAAA1D,KAAI4jE,mBAAQI,OAAO5/D,IAAI,SAAApP,GAAC,OAAIA,EAAE,OAAMgL,KAAK6P,IAALnM,MAAA1D,KAAI4jE,mBAAQI,OAAO5/D,IAAI,SAAApP,GAAC,OAAIA,EAAE,WAGhG,OAAO2d,QASLgyD,yBAAc,SAAdA,YAAeC,QAASb,WAC1B,IAGoDc,MAHhDlyD,WACJiyD,QAAUA,QAAQz1D,OAAO,SAAA21D,KAAG,OAAIA,KAAOA,IAAIjnE,UAC/BA,SAEJ8U,OADAoxD,YAAchpE,gCAAiBC,aACtB6pE,UAAGrtD,OAAH9T,MAAAmhE,MAAAjB,mBAAagB,WAEZ5kE,KAAK2P,IAALjM,MAAA1D,KAAI4jE,mBAAQgB,QAAQxgE,IAAI,SAAApP,GAAC,OAAIA,EAAE,OAAMgL,KAAK6P,IAALnM,MAAA1D,KAAI4jE,mBAAQgB,QAAQxgE,IAAI,SAAApP,GAAC,OAAIA,EAAE,SAItF,OAAO2d,QAGLoyD,WACF9G,OAAQ+G,cACRC,MAAOC,aACPrQ,QAASsQ,QACTjQ,OAAQkQ,OACRnQ,KAAMoQ,KACNhQ,IAAKiQ,IACLlQ,SAAUmQ,UAGRC,SACFC,MAAOC,WACPC,OAAQC,UACRnzB,OClOG,SAASA,kBAAO78C,GACrB,OAAQA,GDkONiwE,QAASC,WACTC,KAAMC,UACNC,KAAMC,UACNjI,OE9NG,SAASkI,YAAYvwE,GAC1B,QAASA,GAAK,IAAM,EAAI,EAAIoK,KAAKkQ,KAAK,EAAIta,EAAIA,GAAKoK,KAAKkQ,KAAK,GAAKta,GAAK,GAAKA,GAAK,GAAK,IFiRxDquC,+BAAoB,SAApBA,kBAAqBz3B,IAAK7W,MAAOwuC,MAS7D,IARA,IAIIt3B,IACAw3B,GALAC,IAAM,EAENC,KADW/3B,IAAI3O,OACC,EAMbymC,IAAMC,MACT13B,IAAM7M,KAAK8M,OAAOw3B,IAAMC,MAAQ,GAChCF,GAAKrkC,KAAKsnB,IAAI9a,IAAIK,KAAOlX,OACpBqK,KAAKsnB,IAAI9a,IAAIK,IAAM,GAAKlX,QAEnB0uC,GACNC,IAAMz3B,IAAM,EAEZ03B,KAAO13B,IAIf,IAAKs3B,KACD,OAAOI,KAGX,IAAMH,QAAU53B,IAAI+3B,MACpB,OAAIH,UAAYzuC,MACL4uC,KACAH,QAAUzuC,MACJ,IAAT4uC,KAAqBA,KACT,SAATJ,KAAkBI,KAAO,EAAIA,KAEpCA,OAAS/3B,IAAI3O,OAAS,EAAY0mC,KACtB,SAATJ,KAAkBI,KAAOA,KAAO,GAGrC6hC,gBAAkB,SAAlBA,gBAAmBl/D,KAAMjR,KAC3B,IAAMowE,WAAan/D,KAAKiI,OAAO,SAAAna,GAAC,MAAiB,iBAANA,IAC3C,OAAOqxE,WAAWpiC,+BAAkBoiC,WAAYpwE,OAO9CqwE,UAAY,SAAZA,YAAY,OAAMhyE,QA6DQiyE,uBAvDJz8C,sBAEG08C,qBAqDyB,SAAxBD,sBAAyBE,IAAKxzC,GAAI6nB,QAE9D,OADA2rB,IAAMA,IAAIhqE,QAAQ,OAAQ,KACnB,GAAA+a,OAAIsjC,OAAJ,KAAAtjC,OAAcivD,KAAd,GAAAjvD,OAAwBsjC,OAAxB,KAAAtjC,OAAkCivD,IAAlC,KAAAjvD,OAAyCyb,OAYnByzC,aAAe,SAAfA,aAAgBnjE,MAAO5N,OACpD,YAAqB,IAAV4N,OAA2C,WAAjB+/D,oBAAO//D,SAAuBA,MACxD5N,MAEJ4N,OAULojE,mBAAqB,SAArBA,mBAAsBr2C,OA4BxB,IA3BA,IAAMs2C,mBACAC,WACA5kE,KAAO7M,OAAO6M,KAAKquB,OAQnBw2C,MAAQ,SAARA,MAAS7xE,MACX,GAAI2xE,gBAAgB/oE,SAAWoE,KAAKpE,OAChC,OAAO,EAEXgpE,QAAQ5xE,OAAQ,EAEhB,IADA,IAAMs3B,MAAQ+D,MAAMr7B,MACX2B,EAAI,EAAGA,EAAI21B,MAAM1uB,OAAQjH,IAAK,CACnC,IAAMw1B,IAAMG,MAAM31B,GACbiwE,QAAQz6C,MACT06C,MAAM16C,KAKd,OADAw6C,gBAAgBvkE,KAAKpN,OACd,GAGFP,EAAI,EAAGA,EAAIuN,KAAKpE,SACjBipE,MAAM7kE,KAAKvN,IADcA,KAIjC,OAAOkyE,iBASLG,eAAiB,SAAjBA,eAAkB1iE,IAAK6V,IACzB,IAAK,IAAMjkB,OAAOoO,IACVjP,OAAOqB,eAAe5B,KAAKwP,IAAKpO,MAChCikB,GAAGjkB,IAAKoO,MAUa2iE,gCAK7B,SAAAA,UAAwB,IAAX9/D,KAAW3F,UAAA1D,OAAA,QAAA4L,IAAAlI,UAAA,GAAAA,UAAA,MAAA0lE,4BAAA9qE,KAAA6qE,SACpB7qE,KAAK+qE,SAAWjF,cAAU3pC,EAAE,SAAAtjC,GAAC,OAAIA,EAAEsjC,IAAG34B,EAAE,SAAA3K,GAAC,OAAIA,EAAE2K,IAC/CxD,KAAK+K,KAAKA,+EAQRA,OAIF,OAHIA,QACA/K,KAAKgrE,WAAahrE,KAAK+qE,SAAShgE,QAE7B/K,uCAULm8B,EAAG34B,EAAGiiE,QACR,OAAOzlE,KAAKgrE,WAAW5gD,KAAK+R,EAAG34B,EAAGiiE,uBAIpCwF,uBAAyB,SAAzBA,uBAA0BC,aAAcntD,GAAI2c,SAC9C,IAAI5gC,IAAMoxE,aAAapxE,IACjBqxE,UAAYD,aAAaC,UAC3BA,YACCzwC,QAAQ0wC,WAAWD,aAAezwC,QAAQ0wC,WAAWD,eACjDrxE,MACDA,IAAMb,OAAO6M,KAAK40B,QAAQ0wC,WAAWD,YAAYzpE,QAErDg5B,QAAQ0wC,WAAWD,WAAWrxE,KAAOikB,KAErCjkB,IAAMb,OAAO6M,KAAK40B,QAAQ0wC,YAAY1pE,OACtCg5B,QAAQ0wC,WAAWtxE,KAAOikB,KAW5BstD,WAAa,SAAbA,WAAcnjE,KAChB,QAAYoF,IAARpF,KAA6B,OAARA,IACrB,OAAOA,IAFwB,IAInC,IAAIoe,OAASpe,IAJsB2+D,KAAAzhE,UAAA1D,OAAXkH,OAAW,IAAAC,MAAAg+D,KAAA,EAAAA,KAAA,KAAAC,KAAA,EAAAA,KAAAD,KAAAC,OAAXl+D,OAAWk+D,KAAA,GAAA1hE,UAAA0hE,MAKnC,IAAK,IAAIvuE,EAAI,EAAGkQ,IAAMG,OAAOlH,OAAQnJ,EAAIkQ,WAEtB6E,KADfgZ,OAASA,OAAO1d,OAAOrQ,MACgB,OAAX+tB,QAFc/tB,KAM9C,OAAO+tB,QAYLglD,8BAMF,SAAAA,MAAa1+D,QAAQk+D,4BAAA9qE,KAAAsrE,OAEjBtrE,KAAKmc,MAAQuZ,mBAAM77B,OAAO+S,QAC1B5M,KAAKorE,iGAWL,OAAOprE,KAAKmc,MAAMyP,kDAUd2/C,SAAU/xE,OAEdwG,KAAKmc,MAAMoW,KAAKg5C,SAAU/xE,6EAWoBgyE,UAAWC,SAAU32C,aAAgC,IAAnBo2C,aAAmB9lE,UAAA1D,OAAA,QAAA4L,IAAAlI,UAAA,GAAAA,UAAA,MAC/FotB,MAAQg5C,UACP3iE,MAAMwB,QAAQmhE,aACfh5C,OAASg5C,YAEb,IAAMztD,GAAK/d,KAAKmc,MAAMlK,KAAKugB,MAAOi5C,SAAU32C,aAE5C,OADAm2C,uBAAuBC,aAAcntD,GAAI/d,MAClCA,iFAU2CwrE,UAAWC,SAAU32C,aAAgC,IAAnBo2C,aAAmB9lE,UAAA1D,OAAA,QAAA4L,IAAAlI,UAAA,GAAAA,UAAA,MACnGotB,MAAQg5C,UACP3iE,MAAMwB,QAAQmhE,aACfh5C,OAASg5C,YAEb,IAAMztD,GAAK/d,KAAKmc,MAAMuvD,GAAGl5C,MAAOi5C,SAAU32C,aAE1C,OADAm2C,uBAAuBC,aAAcntD,GAAI/d,MAClCA,qCAUNurE,UACD,OAAOvrE,KAAKmc,MAAMoW,KAAKg5C,oDAWjBA,SAAUE,UAChB,OAAOzrE,KAAKmc,MAAMwvD,eAAeJ,SAAUE,gDAGvCF,SAAU/xE,OAEd,OADAwG,KAAKmc,MAAM+W,OAAOq4C,SAAU/xE,OACrBwG,6DAKP,OADA/G,OAAOskB,OAAOvd,KAAKorE,YAAYtiE,QAAQ,SAAAiV,IAAE,OAAIA,OACtC/d,uDAGqB,IAAnBkrE,aAAmB9lE,UAAA1D,OAAA,QAAA4L,IAAAlI,UAAA,GAAAA,UAAA,MACpB+lE,UAAmBD,aAAnBC,UAAWrxE,IAAQoxE,aAARpxE,IACb40B,UAAY1uB,KAAKorE,WAAWD,WAClC,GAAIrxE,IAAK,CACL,IAAMikB,GAAKstD,WAAW38C,UAAW50B,KACjCikB,IAAMA,UAEN9kB,OAAOskB,OAAOmR,WAAW5lB,QAAQ,SAAAiV,IAAE,OAAIA,OACvC/d,KAAKorE,WAAWD,cAEpB,OAAOnrE,kBAUT4rE,aAAe,SAAfA,aAAgB1qE,KAClB,IAAMmP,IAAMnP,IAAIoB,WAAW+F,MAAM,eACjC,OAAKgI,IAKEhP,SAASgP,IAAI,GAAI,IAHb,MAyBTw7D,wBAAa,SAAbA,WAAcC,OAAQnlE,QAASwV,OAA6B,IAC1D4vD,KADoCb,aAAsB9lE,UAAA1D,OAAA,QAAA4L,IAAAlI,UAAA,GAAAA,UAAA,MAExDuD,MAAQwT,OAASA,iBAAiBuZ,mBAAQvZ,MAAQuZ,mBAAM77B,WACxDmyE,cACN,IAAK,IAAMz5C,QAAQ5rB,QACf,MAAOrM,eAAe5B,KAAKiO,QAAS4rB,MAAO,CAEvC,IAAM05C,cADNF,KAAOplE,QAAQ4rB,OACU9V,MAAOsvD,KAAKtvD,KAAKwvD,YACtCC,mBAAa,EACXf,UAAYD,aAAaC,UAE3Be,cADAf,UACa,GAAA9vD,OAAM8vD,UAAN,KAAA9vD,OAAmBkX,MAEhBA,KAEf5pB,MAAM4pB,KAAN,GAAAlX,OAAc6wD,kBACfF,WAAWz5C,MAAQw5C,KAAKvyE,QAER,IAAhByyE,cACAH,OAAOv5C,MAAS,SAACmI,QAASje,KAAM0vD,QAAhB,OAA2B,WAAe,IACtD,IAAIjrE,IACAkrE,UAFkDpF,MAAA5hE,UAAA1D,OAAXgf,OAAW,IAAA7X,MAAAm+D,OAAAC,MAAA,EAAAA,MAAAD,MAAAC,QAAXvmD,OAAWumD,OAAA7hE,UAAA6hE,OAGtD,IAAMoF,UAAY3rD,OAAOhf,OACnB4qE,QAAU3jE,MAAM4pB,KAAK45C,QAC3B,GAAIE,UAAW,CAEX,IAAME,aAAe9vD,MAAQA,KAAK8vD,aAClCrrE,IAAMwf,OACN,IAAMnD,UACN,GAAId,KAAM,CACN,IAAK,IAAIlkB,EAAI,EAAGA,EAAI8zE,UAAW9zE,IAAK,CAChC2I,IAAMwf,OAAOnoB,GACb,IAAMi0E,aAAe/vD,KAAK+vD,eAAiBD,aAAe9vD,KAAK+vD,aAAaj0E,GACxEkkB,KAAK+vD,cACHC,UAAYhwD,KAAKgwD,YAAcF,aAAe9vD,KAAKgwD,UAAUl0E,GAAKkkB,KAAKgwD,WAM7E,GALID,cAAwC,mBAAjBA,eAEvBtrE,IAAMsrE,aAAatrE,IAAKorE,QAASR,SAGjCW,UAEA,GAAyB,mBAAdA,UAA0B,CACjC,IAAIC,aAAejwD,KAAKiwD,aACpBA,cAAgBH,eAChBG,aAAeA,aAAan0E,IAG5B6zE,UADAM,eAGY,EAGZD,UAAUvrE,OAASkrE,WACnB7uD,OAAOrX,KAAKhF,UAEb,GAAyB,iBAAdurE,WACd,GAAkB,gBAAdA,UAA6B,CAC7B,IAAMC,cAAeH,aAAe9vD,KAAKiwD,aAAan0E,GAClDkkB,KAAKiwD,aACLxrE,KAAQA,IAAI8jB,YAAYlsB,OAAS4zE,eACjCnvD,OAAOrX,KAAKhF,WAKpBqc,OAAOrX,KAAKhF,UAGhBqc,OAAOrX,KAAKhF,KAGpB,IAAMyrE,OAASlwD,KAAKkwD,OACdC,UAAYlyC,QAAQnI,KAAK45C,QAC/BQ,QAAUA,OAAOpvD,OAAO,GAAIuuD,QACxBS,cACAK,UAAU9jE,QAAQ,SAACtP,MAAOjB,QACJ+U,IAAdiQ,OAAOhlB,KACPglB,OAAOhlB,GAAKiB,SAIxB+jB,OAAO7b,QAAUg5B,QAAQnI,KAAK45C,OAAQI,aAAehvD,OAASA,OAAO,SAErEmd,QAAQnI,KAAK45C,OAAQI,aAAerrE,IAAMA,IAAI,IAElD,OAAO4qE,OAGX,OAAOpxC,QAAQnI,KAAK45C,SAtER,CAuEbxjE,MAAOojE,KAAKtvD,KAAMyvD,gBAKjC,QAA+B5+D,IAA3B49D,aAAaC,UACbxiE,MAAMuqB,OAAO84C,gBACV,CACH,IAAMb,WAAYD,aAAaC,UAC/BxiE,MAAMuqB,OAAOi4C,WAAWa,YAG5B,OAAQF,OAAQnjE,QASdkkE,sBAAwB,SAAxBA,sBAAyBnyC,QAASlI,OACpCv5B,OAAOub,QAAQge,OAAO1pB,QAAQ,SAACgkE,UAC3B,IAAMv6C,KAAOu6C,SAAS,GAChBC,YAAcD,SAAS,GAAGC,YAC1B9rE,OAAS6rE,SAAS,GAAGvC,aACrBiC,aAAeM,SAAS,GAAGN,aAC3BnyE,UAAYqgC,QAAQ1V,YAAY3qB,UAChCpB,OAAOqB,eAAe5B,KAAK2B,UAAWk4B,QACpCtxB,SACAy5B,QAAO,IAAArf,OAAKkX,OAAUtxB,QAE1By5B,QAAQnI,MAAQ,WACZ,GAAIntB,UAAO1D,OAAQ,CACf,IAAIlI,MAAK4L,UAAA1D,QAAA,OAAA4L,EAAAlI,UAAA,GAIT,OAHIonE,eACAhzE,MAAQgzE,aAAa9xC,QAADt1B,UAAA1D,QAAA,OAAA4L,EAAAlI,UAAA,KAEpB2nE,cAAgBA,YAAYvzE,OACrBkhC,QAAO,IAAArf,OAAKkX,QAEvBmI,QAAO,IAAArf,OAAKkX,OAAU/4B,MACfkhC,SACT,OAAOA,QAAO,IAAArf,OAAKkX,YAwC/By6C,qBAAU,SAAVA,QAAU3xE,MAAI,OAAI,SAAC4xE,OAAQC,QAC7B,MAAa,UAAT7xE,OACK4xE,QAlBO,SAAdE,YAAexiE,KAAMC,MACvB,GAAID,KAAKjJ,SAAWkJ,KAAKlJ,OAAU,OAAO,EAC1C,IAAK,IAAInJ,EAAIoS,KAAKjJ,OAAQnJ,GAAK,EAAGA,IAC9B,GAAIoS,KAAKpS,KAAOqS,KAAKrS,GAAM,OAAO,EAGtC,OAAO,EAeI40E,CAAYF,OAAQC,QACX,WAAT7xE,KACApC,OAAOm0E,GAAGH,OAAQC,QACpBD,SAAWC,SAqBlBG,WACFC,eAAgB,0BASdC,eAAiB,SAAjBA,eAAkB9pD,OAAQ+pD,MAC5B,IAAK,IAAMj7C,QAAQi7C,KACXhgD,eAAe/J,OAAO8O,QAAU/E,eAAeggD,KAAKj7C,OACpDg7C,eAAe9pD,OAAO8O,MAAOi7C,KAAKj7C,OAC3Bi7C,KAAKj7C,gBAAiBt5B,QAAUu0E,KAAKj7C,MAAMvN,cAAgB/rB,QAClEwqB,OAAO8O,SACPg7C,eAAe9pD,OAAO8O,MAAOi7C,KAAKj7C,QAElC9O,OAAO8O,MAAQi7C,KAAKj7C,MAG5B,OAAO9O,QAaLgqD,6BAAkB,SAAlBA,gBAAmBC,IAAKC,UAAW5iE,KAAM6iE,MAC3C,IAAI9c,UAAY4c,KGl6BL,SAASG,aAAuB,IAAX9iE,KAAW3F,UAAA1D,OAAA,QAAA4L,IAAAlI,UAAA,GAAAA,UAAA,MAC3C,OAAO,IAAI2gE,qBAAUh7D,MHi6BE8iE,KAKjBC,iBAHNhd,UAAYA,UAAU/lD,KAAKA,KAAM6iE,OAETxc,QAAQl+B,OAAOy6C,WACT9jE,MAAMinD,WAGpC,OADAA,UAAUI,QAAUJ,UAAUI,OAAO1rB,SAC9BsoC,iBAqDL3f,0BAAe,SAAfA,eAAe,OAAMnT,WAMrB+yB,gCAAqB,SAArBA,qBAAqB,OAAMC,YAwB3BC,mCAAwB,SAAxBA,wBAAwB,OAAMlzB,qBAsBpC,IA8BMmzB,SAAW,SAAXA,SAAY70E,EAAGy5C,EAAG1vC,GAAa,IAAVzI,EAAUyK,UAAA1D,OAAA,QAAA4L,IAAAlI,UAAA,GAAAA,UAAA,GAAN,EAC3B/L,GAAKA,EAAGy5C,GAAKA,EAAG1vC,GAAKA,EAAGzI,GAAKA,EAC7BtB,GAAK,IAAKy5C,GAAK,IAAK1vC,GAAK,IACzB,IAEIsF,EACAlO,EAHEkZ,IAAM7P,KAAK6P,IAAIra,EAAGy5C,EAAG1vC,GACrBoQ,IAAM3P,KAAK2P,IAAIna,EAAGy5C,EAAG1vC,GAGrB5K,GAAKkb,IAAMF,KAAO,EAExB,GAAIE,MAAQF,IACR9K,EAAIlO,EAAI,MACL,CACH,IAAM3B,EAAI6a,IAAMF,IAEhB,OADAhZ,EAAIhC,EAAI,GAAMK,GAAK,EAAI6a,IAAMF,KAAO3a,GAAK6a,IAAMF,KACvCE,KACR,KAAKra,EAAGqP,GAAKoqC,EAAI1vC,GAAKvK,GAAKi6C,EAAI1vC,EAAI,EAAI,GAAI,MAC3C,KAAK0vC,EAAGpqC,GAAKtF,EAAI/J,GAAKR,EAAI,EAAG,MAC7B,KAAKuK,EAAGsF,GAAKrP,EAAIy5C,GAAKj6C,EAAI,EAG1B6P,GAAK,EAET,OAAQA,EAAGlO,EAAGhC,EAAGmC,IAgDfwzE,YAAc,SAAdA,YAAeC,KAWjB,MAViB,yCAUJvwE,KAAKuwE,MALA,iHAKkBvwE,KAAKuwE,KAC9B,MAVM,0CAWGvwE,KAAKuwE,MALP,sGAKyBvwE,KAAKuwE,KACrC,MALM,yBAMGvwE,KAAKuwE,KACd,MACFA,KA0EPC,sBAAwB,SAAxBA,sBAAyBpxD,UAAWP,SAAUhjB,MAChD,GAAiB,OAAbgjB,SACA,OAAO,KAEX,IAAM4xD,UAAYr1E,OAAO6M,KAAK4W,UAU9B,OAAOO,UAAUa,OATH,SAARywD,MAAQ3lE,QAAM,OAAI0lE,UAAU5wD,MAAM,SAACpS,OACrC,IAAMpK,IAAM0H,OAAO0C,OAAO9R,MACpB+H,MAAQmb,SAASpR,OAAO,aAAczC,MAAQ6T,SAASpR,OAAO,GAAKoR,SAASpR,OAClF,MAAwB,iBAAb/J,MAAM,QACyB+L,IAA/B/L,MAAM6oB,KAAK,SAAAvxB,GAAC,OAAIA,IAAMqI,OAE1BK,OAAQL,KAAOK,MAAM,IAAML,KAAOK,MAAM,OAI/Cyc,WAAW,EACXtkB,aAWF80E,yCAA8B,SAA9BA,4BAA+BvxD,UAAWqE,YAAa5nB,MACzD,IAAI+0E,kBACJ,GAAIntD,uBAAuBzY,MAAO,CAC9B,IAAMuU,aAAeH,UAAUI,kBAEzBqxD,QAAUptD,YAAYxG,MAAM,EAAGwG,YAAY5f,QACjD,GAAI4f,uBAAuBxM,SACvB25D,kBAAoBntD,YAAYrE,cAAe,QAC5C,GAAIqE,uBAAuBzY,OAASyY,YAAY,GAAG5f,OAAQ,CAC9D,IAAMitE,eAAiBrtD,YAAY,GAAGtO,OAAO,SAAAna,GAAC,OAAIA,KAAKukB,eACvDqxD,kBAAoBxxD,UAAUa,OAAO,SAAClV,QAClC,IAAIgmE,SAAU,EAMd,OALAD,eAAe7lE,QAAQ,SAAC6U,UAAWzL,KAC/B,IAAM1Y,MAAQoP,OAAO+U,WAAWC,UAC1B3b,MAAQysE,QAAQnpD,UAAU,SAAA1sB,GAAC,OAAIA,EAAEqZ,OAAS1Y,QAChDo1E,QAAUA,UAAsB,IAAX3sE,QAElB2sE,UAEP5wD,WAAW,EACXtkB,kBAIR+0E,kBAAoBJ,sBAAsBpxD,UAAWqE,YAAa5nB,MAEtE,OAAO+0E,mBASLI,+BAAoB,SAApBA,kBAAqBn0C,QAASo0C,aAA2B,QAAAC,MAAA3pE,UAAA1D,OAAXgf,OAAW,IAAA7X,MAAAkmE,MAAA,EAAAA,MAAA,KAAAC,MAAA,EAAAA,MAAAD,MAAAC,QAAXtuD,OAAWsuD,MAAA,GAAA5pE,UAAA4pE,OAC3D,IAAMC,gBAAkBH,YAAWvnE,WAAX,GAAYmzB,SAAZrf,OAAwBqF,SAChD,IAAK,IAAM5mB,OAAOm1E,gBACd,MAAO30E,eAAe5B,KAAKu2E,gBAAiBn1E,KAAM,CAC9C,IAAMqxE,UAAYzqD,OAAO,GACrB9mB,GAAK,KACLuxE,YACAvxE,GAAKuxE,UAAU+D,OAEnB,IAAMC,OAASF,gBAAgBn1E,KACzBs1E,SAAWD,OAAO9zE,KAClBm3B,MAAQ28C,OAAO38C,MACf68C,WAAaF,OAAOG,SAC1B50C,QAAQ/xB,QAAQymE,UAAU58C,MAAO68C,YAAY,GACzClE,UAAWvxE,OAMrB21E,aAAe,SAAfA,aAAe/1E,OAAK,OAAK8Z,MAAM9Z,QAAUA,SAAW0lD,KAAY1lD,QAAU0lD,KA0B1E5rB,QAAU,SAAVA,QAAUjjB,KAAG,OAAKA,eAAexH,MAAQwH,KAAOA,MAmEhDm/D,uBAAY,SAAZA,UAAYn0E,MAAI,OIr3CP,WACb,IAAIA,KAAOm7C,sBAASsrB,eAChBppC,KAAO8d,sBAAS,IAChB9b,QAAU,KAEd,SAASmiB,SACP,IAAIua,OAGJ,GAFK18B,UAASA,QAAU08B,OAAS10C,YACjCrnB,KAAKkM,MAAMvH,KAAMoF,WAAWkzD,KAAK59B,SAAUhC,KAAKnxB,MAAMvH,KAAMoF,YACxDgyD,OAAQ,OAAO18B,QAAU,KAAM08B,OAAS,IAAM,KAepD,OAZAva,OAAOxhD,KAAO,SAAS8kB,GACrB,OAAO/a,UAAU1D,QAAUrG,KAAoB,mBAAN8kB,EAAmBA,EAAIq2B,sBAASr2B,GAAI08B,QAAUxhD,MAGzFwhD,OAAOnkB,KAAO,SAASvY,GACrB,OAAO/a,UAAU1D,QAAUg3B,KAAoB,mBAANvY,EAAmBA,EAAIq2B,uBAAUr2B,GAAI08B,QAAUnkB,MAG1FmkB,OAAOniB,QAAU,SAASva,GACxB,OAAO/a,UAAU1D,QAAUg5B,QAAe,MAALva,EAAY,KAAOA,EAAG08B,QAAUniB,SAGhEmiB,OJ61CiBA,GAASxhD,KAAKutE,UAAUvtE,QAE5Co0E,aAAWC,gBAAAC,gBKz4CS,OL04CKC,YADdF,gBAAAC,aK34Cc,YL64CKE,iBAFnBH,gBAAAC,aK14Ce,aCCjB,SAAS1S,QACtB,OAAOx5B,gBAAUw5B,QAAQ35C,YNw4CVqsD,cAKXG,cAAYJ,gBAAAK,iBK74Cc,YEHjB,SAAS9S,OAAQh3C,OAC9B,IAAOjsB,EAAIijE,OAAOv7D,QAAU,EAC5B,IAAK,IAAInJ,EAAUM,EAAGk7D,GAAIic,GAAIC,GAAIj2E,EAAtB6gB,EAAI,EAAqBliB,EAAIskE,OAAOh3C,MAAM,IAAIvkB,OAAQmZ,EAAIliB,IAAKkiB,EACzE,IAAKm1D,GAAKC,GAAK,EAAG13E,EAAI,EAAGA,EAAIyB,IAAKzB,GAC3Bw7D,IAAMl7D,EAAIokE,OAAOh3C,MAAM1tB,IAAIsiB,IAAI,GAAKhiB,EAAE,KAAO,GAChDA,EAAE,GAAKm3E,GAAIn3E,EAAE,GAAKm3E,IAAMjc,IACfA,GAAK,GACdl7D,EAAE,GAAKo3E,GAAIp3E,EAAE,GAAKo3E,IAAMlc,IAExBl7D,EAAE,GAAKm3E,KPu4CGN,gBAAAK,cK54CS,OL84CKG,MAFdR,gBAAAK,cK34CW,SGHd,SAAS9S,OAAQh3C,OAC9B,IAAOjsB,EAAIijE,OAAOv7D,QAAU,EAA5B,CACA,IAAK,IAAInJ,EAAGyB,EAAgCwJ,EAA7BqX,EAAI,EAAGliB,EAAIskE,OAAO,GAAGv7D,OAAWmZ,EAAIliB,IAAKkiB,EAAG,CACzD,IAAKrX,EAAIjL,EAAI,EAAGA,EAAIyB,IAAKzB,EAAGiL,GAAKy5D,OAAO1kE,GAAGsiB,GAAG,IAAM,EACpD,GAAIrX,EAAG,IAAKjL,EAAI,EAAGA,EAAIyB,IAAKzB,EAAG0kE,OAAO1kE,GAAGsiB,GAAG,IAAMrX,EAEpDw5D,KAAKC,OAAQh3C,URw4CGypD,gBAAAK,cK14CW,SIJd,SAAS9S,OAAQh3C,OAC9B,IAAOjsB,EAAIijE,OAAOv7D,QAAU,IAAS/I,GAAKsjE,GAAKgB,OAAOh3C,MAAM,KAAKvkB,QAAU,EAA3E,CACA,IAAK,IAAkBu6D,GAAItjE,EAAGqB,EAArBwJ,EAAI,EAAGqX,EAAI,EAAaA,EAAIliB,IAAKkiB,EAAG,CAC3C,IAAK,IAAItiB,EAAI,EAAG80B,GAAK,EAAGC,GAAK,EAAG/0B,EAAIyB,IAAKzB,EAAG,CAK1C,IAJA,IAAI43E,GAAKlT,OAAOh3C,MAAM1tB,IAClB63E,KAAOD,GAAGt1D,GAAG,IAAM,EAEnBw1D,IAAMD,MADCD,GAAGt1D,EAAI,GAAG,IAAM,IACF,EAChB6rB,EAAI,EAAGA,EAAInuC,IAAKmuC,EAAG,CAC1B,IAAI4pC,GAAKrT,OAAOh3C,MAAMygB,IAGtB2pC,KAFWC,GAAGz1D,GAAG,IAAM,IACZy1D,GAAGz1D,EAAI,GAAG,IAAM,GAG7BwS,IAAM+iD,KAAM9iD,IAAM+iD,GAAKD,KAEzBnU,GAAGphD,EAAI,GAAG,IAAMohD,GAAGphD,EAAI,GAAG,GAAKrX,EAC3B6pB,KAAI7pB,GAAK8pB,GAAKD,IAEpB4uC,GAAGphD,EAAI,GAAG,IAAMohD,GAAGphD,EAAI,GAAG,GAAKrX,EAC/Bw5D,KAAKC,OAAQh3C,UT03CG8pD,eAQZQ,mBAAQ,SAARA,MAAQ7vD,QAAM,OlB/4CL,WACb,IAAI5a,KAAO0wC,0BACPvwB,MAAQuqD,WACRvvB,OAASwvB,KACTj3E,MAAQ2jE,WAEZ,SAASoT,MAAMxlE,MACb,IACIxS,EAIAm4E,GALAC,GAAK7qE,KAAKyB,MAAMvH,KAAMoF,WAEtBzM,EAAIoS,KAAKrJ,OACT1H,EAAI22E,GAAGjvE,OACPkvE,GAAK,IAAI/nE,MAAM7O,GAGnB,IAAKzB,EAAI,EAAGA,EAAIyB,IAAKzB,EAAG,CACtB,IAAK,IAAkDs4E,IAA9CC,GAAKH,GAAGp4E,GAAI43E,GAAKS,GAAGr4E,GAAK,IAAIsQ,MAAMlQ,GAAIkiB,EAAI,EAAQA,EAAIliB,IAAKkiB,EACnEs1D,GAAGt1D,GAAKg2D,KAAO,GAAIr3E,MAAMuR,KAAK8P,GAAIi2D,GAAIj2D,EAAG9P,OACzC8lE,IAAI9lE,KAAOA,KAAK8P,GAElBs1D,GAAGr2E,IAAMg3E,GAGX,IAAKv4E,EAAI,EAAGm4E,GAAKzqD,MAAM2qD,IAAKr4E,EAAIyB,IAAKzB,EACnCq4E,GAAGF,GAAGn4E,IAAI0J,MAAQ1J,EAIpB,OADA0oD,OAAO2vB,GAAIF,IACJE,GAmBT,OAhBAL,MAAMzqE,KAAO,SAASqa,GACpB,OAAO/a,UAAU1D,QAAUoE,KAAoB,mBAANqa,EAAmBA,EAAIq2B,sBAAS17B,yBAAMpiB,KAAKynB,IAAKowD,OAASzqE,MAGpGyqE,MAAM/2E,MAAQ,SAAS2mB,GACrB,OAAO/a,UAAU1D,QAAUlI,MAAqB,mBAAN2mB,EAAmBA,EAAIq2B,uBAAUr2B,GAAIowD,OAAS/2E,OAG1F+2E,MAAMtqD,MAAQ,SAAS9F,GACrB,OAAO/a,UAAU1D,QAAUukB,MAAa,MAAL9F,EAAYqwD,WAAyB,mBAANrwD,EAAmBA,EAAIq2B,sBAAS17B,yBAAMpiB,KAAKynB,IAAKowD,OAAStqD,OAG7HsqD,MAAMtvB,OAAS,SAAS9gC,GACtB,OAAO/a,UAAU1D,QAAUu/C,OAAc,MAAL9gC,EAAYswD,KAAatwD,EAAGowD,OAAStvB,QAGpEsvB,MkBi2CeQ,GAAUjrE,KAAK4a,OAAO5a,MAAMm7C,OAAO6uB,aAAapvD,OAAOugC,SAC9Dh7B,MAAMwpD,YAAY/uD,OAAOuF,OADlB8qD,CAC0BrwD,OAAO3V,OAenDimE,mBACF7Z,yBACA8Z,yBACAC,2BACAC,qBACAC,iCACArU,UAAWkU,UACXvV,WAAY0V,iBACZ9sC,KAAM6sC,WACNrU,WAAYoU,WACZ56B,OAAQ6gB,cAGNka,SACFC,SxDrwCG,SAASA,SAASvqC,OACvB,OAAOmpB,UAAKpsB,UAAMiD,QwDqwChBwqC,UxD9wCG,SAASA,UAAUxqC,OACxB,OAAOmpB,UAAKnsB,WAAOgD,QwD8wCjByqC,QxDnxCG,SAASA,QAAQzqC,OACtB,OAAOmpB,UAAKxvB,SAAKqG,QwDmxCf0qC,WxD5wCG,SAASA,WAAW1qC,OACzB,OAAOmpB,UAAKJ,YAAQ/oB,QwD4wClBuqB,cACAiG,cACAma,IUv7CW,WACb,IAAIl4E,MAAQs2B,sBACR8V,WAAa+rC,eACbphE,KAAO,KACPokD,WAAane,sBAAS,GACtBqe,SAAWre,sBAASob,UACpBmD,SAAWve,sBAAS,GAExB,SAASk7B,IAAI3mE,MACX,IAAIxS,EAEAsiB,EACA6rB,EAMAx2B,GAGAtG,EAXA5P,EAAI+Q,KAAKrJ,OAGTuR,IAAM,EACNhR,MAAQ,IAAI4G,MAAM7O,GAClB43E,KAAO,IAAI/oE,MAAM7O,GACjB45D,IAAMe,WAAWptD,MAAMvH,KAAMoF,WAC7B6uD,GAAKpwD,KAAK2P,IAAIo+C,SAAK/tD,KAAK6P,KAAKk+C,SAAKiD,SAASttD,MAAMvH,KAAMoF,WAAawuD,KAEpEr5D,EAAIsJ,KAAK2P,IAAI3P,KAAKsnB,IAAI8oC,IAAMj6D,EAAG+6D,SAASxtD,MAAMvH,KAAMoF,YACpDysE,GAAKt3E,GAAK05D,GAAK,GAAK,EAAI,GAG5B,IAAK17D,EAAI,EAAGA,EAAIyB,IAAKzB,GACdqR,EAAIgoE,KAAK3vE,MAAM1J,GAAKA,IAAMiB,MAAMuR,KAAKxS,GAAIA,EAAGwS,OAAS,IACxDkI,KAAOrJ,GASX,IAJkB,MAAdg8B,WAAoB3jC,MAAMsO,KAAK,SAAShY,EAAGsiB,GAAK,OAAO+qB,WAAWgsC,KAAKr5E,GAAIq5E,KAAK/2D,MACnE,MAARtK,MAActO,MAAMsO,KAAK,SAAShY,EAAGsiB,GAAK,OAAOtK,KAAKxF,KAAKxS,GAAIwS,KAAK8P,MAGxEtiB,EAAI,EAAGmuC,EAAIzzB,KAAOghD,GAAKj6D,EAAI63E,IAAM5+D,IAAM,EAAG1a,EAAIyB,IAAKzB,EAAGq7D,GAAK1jD,GAC9D2K,EAAI5Y,MAAM1J,GAAiB2X,GAAK0jD,KAAlBhqD,EAAIgoE,KAAK/2D,IAAmB,EAAIjR,EAAI88B,EAAI,GAAKmrC,GAAID,KAAK/2D,IAClE9P,KAAMA,KAAK8P,GACX5Y,MAAO1J,EACPiB,MAAOoQ,EACP+qD,WAAYf,GACZiB,SAAU3kD,GACV6kD,SAAUx6D,GAId,OAAOq3E,KA2BT,OAxBAF,IAAIl4E,MAAQ,SAAS2mB,GACnB,OAAO/a,UAAU1D,QAAUlI,MAAqB,mBAAN2mB,EAAmBA,EAAIq2B,uBAAUr2B,GAAIuxD,KAAOl4E,OAGxFk4E,IAAI9rC,WAAa,SAASzlB,GACxB,OAAO/a,UAAU1D,QAAUkkC,WAAazlB,EAAG5P,KAAO,KAAMmhE,KAAO9rC,YAGjE8rC,IAAInhE,KAAO,SAAS4P,GAClB,OAAO/a,UAAU1D,QAAU6O,KAAO4P,EAAGylB,WAAa,KAAM8rC,KAAOnhE,MAGjEmhE,IAAI/c,WAAa,SAASx0C,GACxB,OAAO/a,UAAU1D,QAAUizD,WAA0B,mBAANx0C,EAAmBA,EAAIq2B,uBAAUr2B,GAAIuxD,KAAO/c,YAG7F+c,IAAI7c,SAAW,SAAS10C,GACtB,OAAO/a,UAAU1D,QAAUmzD,SAAwB,mBAAN10C,EAAmBA,EAAIq2B,uBAAUr2B,GAAIuxD,KAAO7c,UAG3F6c,IAAI3c,SAAW,SAAS50C,GACtB,OAAO/a,UAAU1D,QAAUqzD,SAAwB,mBAAN50C,EAAmBA,EAAIq2B,uBAAUr2B,GAAIuxD,KAAO3c,UAGpF2c,KVg3CL/d,IpDj3CW,WACb,IAAIY,YAAcD,eACdG,YAAcD,eACdsd,aAAet7B,sBAAS,GACxBu7B,UAAY,KACZpd,WAAaD,cACbG,SAAWD,YACXG,SAAWD,YACXp6B,QAAU,KAEd,SAASi5B,MACP,IAAIyD,OACA/9D,EACAsuC,IAAM4sB,YAAYhtD,MAAMvH,KAAMoF,WAC9BwiC,IAAM6sB,YAAYltD,MAAMvH,KAAMoF,WAC9BwuD,GAAKe,WAAWptD,MAAMvH,KAAMoF,WAAagvD,OACzClkD,GAAK2kD,SAASttD,MAAMvH,KAAMoF,WAAagvD,OACvCH,GAAK9oC,IAAIjb,GAAK0jD,IACdI,GAAK9jD,GAAK0jD,GAQd,GANKl5B,UAASA,QAAU08B,OAAS10C,YAG7BklB,GAAKD,KAAItuC,EAAIuuC,GAAIA,GAAKD,GAAIA,GAAKtuC,GAG7BuuC,GAAKmoB,aAGN,GAAIkE,GAAKrC,SAAM7B,aAClBr1B,QAAQy3B,OAAOvqB,GAAK6M,IAAImf,IAAKhsB,GAAK8M,IAAIkf,KACtCl5B,QAAQi5B,IAAI,EAAG,EAAG/rB,GAAIgsB,GAAI1jD,IAAK8jD,IAC3BrsB,GAAKooB,eACPr1B,QAAQy3B,OAAOxqB,GAAK8M,IAAIvkC,IAAKy3B,GAAK+M,IAAIxkC,KACtCwqB,QAAQi5B,IAAI,EAAG,EAAGhsB,GAAIz3B,GAAI0jD,GAAII,SAK7B,CACH,IAWI9f,GACAC,GAZA69B,IAAMpe,GACNqe,IAAM/hE,GACNgiE,IAAMte,GACNue,IAAMjiE,GACNkiE,IAAMne,GACNoe,IAAMpe,GACNqe,GAAKvd,SAASxtD,MAAMvH,KAAMoF,WAAa,EACvCmtE,GAAMD,GAAKviB,eAAagiB,WAAaA,UAAUxqE,MAAMvH,KAAMoF,WAAa2O,UAAK4zB,GAAKA,GAAKC,GAAKA,KAC5FqtB,GAAKzhD,SAAI2X,IAAIyc,GAAKD,IAAM,GAAImqC,aAAavqE,MAAMvH,KAAMoF,YACrDotE,IAAMvd,GACNwd,IAAMxd,GAKV,GAAIsd,GAAKxiB,aAAS,CAChB,IAAI2iB,GAAKre,KAAKke,GAAK5qC,GAAK+M,IAAI49B,KACxBK,GAAKte,KAAKke,GAAK3qC,GAAK8M,IAAI49B,MACvBF,KAAY,EAALM,IAAU3iB,cAA8BmiB,KAArBQ,IAAO1e,GAAK,GAAK,EAAeme,KAAOO,KACjEN,IAAM,EAAGF,IAAMC,KAAOve,GAAK1jD,IAAM,IACjCmiE,KAAY,EAALM,IAAU5iB,cAA8BiiB,KAArBW,IAAO3e,GAAK,GAAK,EAAeie,KAAOU,KACjEN,IAAM,EAAGL,IAAMC,KAAOre,GAAK1jD,IAAM,GAGxC,IAAI6iD,IAAMnrB,GAAK6M,IAAIu9B,KACfhf,IAAMprB,GAAK8M,IAAIs9B,KACf1c,IAAM3tB,GAAK8M,IAAI09B,KACf5c,IAAM5tB,GAAK+M,IAAIy9B,KAGnB,GAAIld,GAAKlF,aAAS,CAChB,IAII6iB,GAJAxd,IAAMxtB,GAAK6M,IAAIw9B,KACf5c,IAAMztB,GAAK8M,IAAIu9B,KACfzc,IAAM7tB,GAAK8M,IAAIy9B,KACfzc,IAAM9tB,GAAK+M,IAAIw9B,KAInB,GAAIje,IAAMrC,SAAM7B,eAAY6iB,GAlIpC,SAASC,UAAUhzB,GAAI+S,GAAI9S,GAAIyS,GAAIE,GAAIC,GAAIogB,GAAIC,IAC7C,IAAIzd,IAAMxV,GAAKD,GAAI0V,IAAMhD,GAAKK,GAC1BogB,IAAMF,GAAKrgB,GAAIwgB,IAAMF,GAAKrgB,GAC1Bj5D,EAAIw5E,IAAM3d,IAAM0d,IAAMzd,IAC1B,KAAI97D,EAAIA,EAAIs2D,cAEZ,OAAQlQ,IADRpmD,GAAKu5E,KAAOpgB,GAAKF,IAAMugB,KAAOpzB,GAAK4S,KAAOh5D,GACzB67D,IAAK1C,GAAKn5D,EAAI87D,KA4HQsd,CAAU9f,IAAKC,IAAKwC,IAAKC,IAAKL,IAAKC,IAAKC,IAAKC,MAAO,CACnF,IAAIwK,GAAKhN,IAAM6f,GAAG,GACd5S,GAAKhN,IAAM4f,GAAG,GACdnR,GAAKrM,IAAMwd,GAAG,GACdlR,GAAKrM,IAAMud,GAAG,GACdM,GAAK,EAAIx+B,IDlJhB,SAAS8e,KAAKr3B,GACnB,OAAOA,EAAI,EAAI,EAAIA,GAAK,EAAIw1B,QAAK9tD,KAAK2vD,KAAKr3B,GCiJlBq3B,EAAMuM,GAAK0B,GAAKzB,GAAK0B,KAAO3tD,UAAKgsD,GAAKA,GAAKC,GAAKA,IAAMjsD,UAAK0tD,GAAKA,GAAKC,GAAKA,MAAQ,GAC/FyR,GAAKp/D,UAAK6+D,GAAG,GAAKA,GAAG,GAAKA,GAAG,GAAKA,GAAG,IACzCJ,IAAMh/D,SAAIyhD,IAAKttB,GAAKwrC,KAAOD,GAAK,IAChCT,IAAMj/D,SAAIyhD,IAAKrtB,GAAKurC,KAAOD,GAAK,KAK9Bb,IAAMtiB,aAGH0iB,IAAM1iB,cACb7b,GAAK8gB,eAAeQ,IAAKC,IAAK1C,IAAKC,IAAKprB,GAAI6qC,IAAKze,IACjD7f,GAAK6gB,eAAeI,IAAKC,IAAKC,IAAKC,IAAK3tB,GAAI6qC,IAAKze,IAEjDt5B,QAAQy3B,OAAOje,GAAGiiB,GAAKjiB,GAAG6e,IAAK7e,GAAGkiB,GAAKliB,GAAG8e,KAGtCyf,IAAMxd,GAAIv6B,QAAQi5B,IAAIzf,GAAGiiB,GAAIjiB,GAAGkiB,GAAIqc,IAAKv9B,MAAMhB,GAAG8e,IAAK9e,GAAG6e,KAAM7d,MAAMf,GAAG6e,IAAK7e,GAAG4e,MAAOiB,KAI1Ft5B,QAAQi5B,IAAIzf,GAAGiiB,GAAIjiB,GAAGkiB,GAAIqc,IAAKv9B,MAAMhB,GAAG8e,IAAK9e,GAAG6e,KAAM7d,MAAMhB,GAAGmhB,IAAKnhB,GAAGkhB,MAAOpB,IAC9Et5B,QAAQi5B,IAAI,EAAG,EAAG/rB,GAAIsN,MAAMhB,GAAGkiB,GAAKliB,GAAGmhB,IAAKnhB,GAAGiiB,GAAKjiB,GAAGkhB,KAAMlgB,MAAMf,GAAGiiB,GAAKjiB,GAAGkhB,IAAKlhB,GAAGgiB,GAAKhiB,GAAGihB,MAAOpB,IACrGt5B,QAAQi5B,IAAIxf,GAAGgiB,GAAIhiB,GAAGiiB,GAAIqc,IAAKv9B,MAAMf,GAAGkhB,IAAKlhB,GAAGihB,KAAMlgB,MAAMf,GAAG6e,IAAK7e,GAAG4e,MAAOiB,OAK7Et5B,QAAQy3B,OAAOY,IAAKC,KAAMt4B,QAAQi5B,IAAI,EAAG,EAAG/rB,GAAIoqC,IAAKC,KAAMje,KArB1Ct5B,QAAQy3B,OAAOY,IAAKC,KAyBpCrrB,GAAKooB,cAAcqiB,IAAMriB,aAGtByiB,IAAMziB,cACb7b,GAAK8gB,eAAeM,IAAKC,IAAKH,IAAKC,IAAK1tB,IAAK6qC,IAAKxe,IAClD7f,GAAK6gB,eAAejC,IAAKC,IAAKwC,IAAKC,IAAK9tB,IAAK6qC,IAAKxe,IAElDt5B,QAAQ23B,OAAOne,GAAGiiB,GAAKjiB,GAAG6e,IAAK7e,GAAGkiB,GAAKliB,GAAG8e,KAGtCwf,IAAMvd,GAAIv6B,QAAQi5B,IAAIzf,GAAGiiB,GAAIjiB,GAAGkiB,GAAIoc,IAAKt9B,MAAMhB,GAAG8e,IAAK9e,GAAG6e,KAAM7d,MAAMf,GAAG6e,IAAK7e,GAAG4e,MAAOiB,KAI1Ft5B,QAAQi5B,IAAIzf,GAAGiiB,GAAIjiB,GAAGkiB,GAAIoc,IAAKt9B,MAAMhB,GAAG8e,IAAK9e,GAAG6e,KAAM7d,MAAMhB,GAAGmhB,IAAKnhB,GAAGkhB,MAAOpB,IAC9Et5B,QAAQi5B,IAAI,EAAG,EAAGhsB,GAAIuN,MAAMhB,GAAGkiB,GAAKliB,GAAGmhB,IAAKnhB,GAAGiiB,GAAKjiB,GAAGkhB,KAAMlgB,MAAMf,GAAGiiB,GAAKjiB,GAAGkhB,IAAKlhB,GAAGgiB,GAAKhiB,GAAGihB,KAAMpB,IACpGt5B,QAAQi5B,IAAIxf,GAAGgiB,GAAIhiB,GAAGiiB,GAAIoc,IAAKt9B,MAAMf,GAAGkhB,IAAKlhB,GAAGihB,KAAMlgB,MAAMf,GAAG6e,IAAK7e,GAAG4e,MAAOiB,MAK7Et5B,QAAQi5B,IAAI,EAAG,EAAGhsB,GAAIwqC,IAAKD,IAAKle,IArBIt5B,QAAQ23B,OAAOiD,IAAKC,UA1F1C76B,QAAQy3B,OAAO,EAAG,GAoHvC,GAFAz3B,QAAQ03B,YAEJgF,OAAQ,OAAO18B,QAAU,KAAM08B,OAAS,IAAM,KAyCpD,OAtCAzD,IAAIyf,SAAW,WACb,IAAI/5E,IAAMk7D,YAAYhtD,MAAMvH,KAAMoF,aAAcqvD,YAAYltD,MAAMvH,KAAMoF,YAAc,EAClFzK,IAAMg6D,WAAWptD,MAAMvH,KAAMoF,aAAcyvD,SAASttD,MAAMvH,KAAMoF,YAAc,EAAIusD,QAAK,EAC3F,OAAQld,IAAI95C,GAAKtB,EAAGq7C,IAAI/5C,GAAKtB,IAG/Bs6D,IAAIY,YAAc,SAASp0C,GACzB,OAAO/a,UAAU1D,QAAU6yD,YAA2B,mBAANp0C,EAAmBA,EAAIq2B,uBAAUr2B,GAAIwzC,KAAOY,aAG9FZ,IAAIc,YAAc,SAASt0C,GACzB,OAAO/a,UAAU1D,QAAU+yD,YAA2B,mBAANt0C,EAAmBA,EAAIq2B,uBAAUr2B,GAAIwzC,KAAOc,aAG9Fd,IAAIme,aAAe,SAAS3xD,GAC1B,OAAO/a,UAAU1D,QAAUowE,aAA4B,mBAAN3xD,EAAmBA,EAAIq2B,uBAAUr2B,GAAIwzC,KAAOme,cAG/Fne,IAAIoe,UAAY,SAAS5xD,GACvB,OAAO/a,UAAU1D,QAAUqwE,UAAiB,MAAL5xD,EAAY,KAAoB,mBAANA,EAAmBA,EAAIq2B,uBAAUr2B,GAAIwzC,KAAOoe,WAG/Gpe,IAAIgB,WAAa,SAASx0C,GACxB,OAAO/a,UAAU1D,QAAUizD,WAA0B,mBAANx0C,EAAmBA,EAAIq2B,uBAAUr2B,GAAIwzC,KAAOgB,YAG7FhB,IAAIkB,SAAW,SAAS10C,GACtB,OAAO/a,UAAU1D,QAAUmzD,SAAwB,mBAAN10C,EAAmBA,EAAIq2B,uBAAUr2B,GAAIwzC,KAAOkB,UAG3FlB,IAAIoB,SAAW,SAAS50C,GACtB,OAAO/a,UAAU1D,QAAUqzD,SAAwB,mBAAN50C,EAAmBA,EAAIq2B,uBAAUr2B,GAAIwzC,KAAOoB,UAG3FpB,IAAIj5B,QAAU,SAASva,GACrB,OAAO/a,UAAU1D,QAAWg5B,QAAe,MAALva,EAAY,KAAOA,EAAIwzC,KAAOj5B,SAG/Di5B,KoD2rCL7tB,eAGEutC,QACFpsC,KAAMqsC,MAGJC,gBAAkB,SAAlBA,gBAAmBC,QAGrB,IADA,IAAIz8D,SADJy8D,OAASA,OAAOjjE,KAAK,SAAC5V,EAAGyI,GAAJ,OAAUzI,EAAIyI,KACd,GAAKowE,OAAO,GACxBj7E,EAAI,EAAGA,EAAIi7E,OAAO9xE,OAAQnJ,IAC/Bwe,QAAUlT,KAAK2P,IAAIuD,QAASy8D,OAAOj7E,GAAKi7E,OAAOj7E,EAAI,IAGvD,OAAOwe,SAGL08D,aACFtyB,YAAa,yBACbG,OAAQ,sBACRE,OAAQ,mBACRC,KAAM,mBACNz+C,IAAK,gBACLK,MAAO,QACPW,KAAM,MAGJ0vE,gBACD,cAAe,SAAU,SAAU,OAAQ,MAAO,QAAS,SAC3D,EAAG,IAAM,IAAO,KAAS,MAAU,OAAY,UAQ9CC,4BAAiB,SAAjBA,eAAkBn6E,MAAOomD,UAC3B,IAAMg0B,gBANiB,SAArBC,mBAAsBj0B,UACxB,IAAM39C,MAAQ6lC,+BAAkB4rC,cAAc,GAAI9zB,UAClD,OAAO8zB,cAAc,GAAGzxE,OAIA4xE,CAAmBj0B,UAC3C,OAAO9/C,iCAAkBsG,SAAS5M,MAAOi6E,YAAYG,mBAiCnDE,gBANgB37E,OAAOw1B,uBAAyBx1B,OAAOy1B,6BACzDz1B,OAAO01B,0BAA4B11B,OAAO21B,wBAA0B31B,OAAO41B,wBAKxD,SAAjB+lD,eAAiBlnE,QAAM,OAAI,SAAC1L,KAC9B,OAAIA,eAAewL,kBACRxL,OAAO0L,OAASA,OAAO1L,KAAvB,GAAAma,OAAiCna,KAErCA,OAGL6yE,4CAAiC,SAAjCA,+BAAkC92D,WACpC,IAAI+2D,mBACA/hE,KAAOgL,UACX,EAAG,CACC,IAAMmP,YAAcna,KAAKgiE,iBACzB,GAAI7nD,YAAa,CACb,IAAM8nD,gBAAkB9nD,YAAY9I,UAAU8G,KAAK,SAAA3J,YAAU,MWnhDvC,UXmhD2CA,WAAWjE,KAC5E,GAAI03D,gBAAiB,CACjBF,gBAAkBE,gBAAgBx3D,aAClC,cAGHzK,KAAOA,KAAKkiE,aAZmD,IAcxE,IAAMC,oBACAnsD,SAAWhL,UAAUrO,gBAAgBrD,aAf6B8oE,MAAAjvE,UAAA1D,OAAtB4yE,kBAAsB,IAAAzrE,MAAAwrE,MAAA,EAAAA,MAAA,KAAAE,MAAA,EAAAA,MAAAF,MAAAE,QAAtBD,kBAAsBC,MAAA,GAAAnvE,UAAAmvE,OA2BxE,OAXAD,kBAAkBxrE,QAAQ,SAACqf,aACvB,GAAI6rD,gBAAgB7rD,aAChBisD,iBAAiBjsD,aAAe6rD,gBAAgB7rD,iBAC7C,CACH,IAAMyC,aAAe3C,SAASE,aAC1ByC,eACAwpD,iBAAiBjsD,aAAeyC,aAAalT,eAKlD08D,kBYxiDAI,MAAQ,+BAEJC,gBACb/xC,IAAK,6BACL8xC,MAAOA,MACPE,MAAO,+BACPC,IAAK,uCACLC,MAAO,iCCLMC,cAAA,SAAS/7E,MACtB,IAAI6lD,OAAS7lD,MAAQ,GAAIP,EAAIomD,OAAO14C,QAAQ,KAE5C,OADI1N,GAAK,GAAqC,WAA/BomD,OAAS7lD,KAAKgiB,MAAM,EAAGviB,MAAiBO,KAAOA,KAAKgiB,MAAMviB,EAAI,IACtEu8E,eAAWx6E,eAAeqkD,SAAWo2B,MAAOD,eAAWn2B,QAASuwB,MAAOp2E,MAAQA,MCczE,IAAAk8E,QAAA,SAASl8E,MACtB,IAAIm8E,SAAW9J,cAAUryE,MACzB,OAAQm8E,SAAS/F,MARnB,SAASgG,aAAaD,UACpB,OAAO,WACL,OAAOj1E,KAAKm1E,cAActyC,gBAAgBoyC,SAASF,MAAOE,SAAS/F,SAZvE,SAASkG,eAAet8E,MACtB,OAAO,WACL,IAAIw9B,SAAWt2B,KAAKm1E,cAChBE,IAAMr1E,KAAKs1E,aACf,OAAOD,MAAQb,OAASl+C,SAASwjB,gBAAgBw7B,eAAiBd,MAC5Dl+C,SAASmJ,cAAc3mC,MACvBw9B,SAASuM,gBAAgBwyC,IAAKv8E,SAchBm8E,WCvBxB,SAASjY,iBAEM,IAAAuY,aAAA,SAASC,UACtB,OAAmB,MAAZA,SAAmBxY,cAAO,WAC/B,OAAOh9D,KAAKy1E,cAAcD,YCJ9B,SAAS9vC,oBACP,SAGa,IAAAgwC,YAAA,SAASF,UACtB,OAAmB,MAAZA,SAAmB9vC,kBAAQ,WAChC,OAAO1lC,KAAK21E,iBAAiBH,YCNlBI,QAAA,SAASJ,UACtB,OAAO,WACL,OAAOx1E,KAAK61E,QAAQL,YCFTM,OAAA,SAASniD,QACtB,OAAO,IAAI9qB,MAAM8qB,OAAOjyB,SCMnB,SAASq0E,UAAUtwD,OAAQnU,OAChCtR,KAAKm1E,cAAgB1vD,OAAO0vD,cAC5Bn1E,KAAKs1E,aAAe7vD,OAAO6vD,aAC3Bt1E,KAAKg2E,MAAQ,KACbh2E,KAAK4iB,QAAU6C,OACfzlB,KAAKi2E,SAAW3kE,MAGlBykE,UAAU17E,WACR2qB,YAAa+wD,UACbj0C,YAAa,SAAAA,YAASthB,OAAS,OAAOxgB,KAAK4iB,QAAQ4c,aAAahf,MAAOxgB,KAAKg2E,QAC5Ex2C,aAAc,SAAAA,aAAShf,MAAOvO,MAAQ,OAAOjS,KAAK4iB,QAAQ4c,aAAahf,MAAOvO,OAC9EwjE,cAAe,SAAAA,cAASD,UAAY,OAAOx1E,KAAK4iB,QAAQ6yD,cAAcD,WACtEG,iBAAkB,SAAAA,iBAASH,UAAY,OAAOx1E,KAAK4iB,QAAQ+yD,iBAAiBH,YCpB/D,ICIXU,UAAY,IAEhB,SAASC,UAAU1wD,OAAQw4B,MAAOmT,MAAOz9B,OAAQu9B,KAAMnmD,MASrD,IARA,IACI+jB,KADAv2B,EAAI,EAEJ69E,YAAcn4B,MAAMv8C,OACpB20E,WAAatrE,KAAKrJ,OAKfnJ,EAAI89E,aAAc99E,GACnBu2B,KAAOmvB,MAAM1lD,KACfu2B,KAAKmnD,SAAWlrE,KAAKxS,GACrBo7B,OAAOp7B,GAAKu2B,MAEZsiC,MAAM74D,GAAK,IAAIw9E,UAAUtwD,OAAQ1a,KAAKxS,IAK1C,KAAOA,EAAI69E,cAAe79E,GACpBu2B,KAAOmvB,MAAM1lD,MACf24D,KAAK34D,GAAKu2B,MAKhB,SAASwnD,QAAQ7wD,OAAQw4B,MAAOmT,MAAOz9B,OAAQu9B,KAAMnmD,KAAMjR,KACzD,IAAIvB,EACAu2B,KAKAqX,SAJAowC,kBACAH,YAAcn4B,MAAMv8C,OACpB20E,WAAatrE,KAAKrJ,OAClB80E,UAAY,IAAI3tE,MAAMutE,aAK1B,IAAK79E,EAAI,EAAGA,EAAI69E,cAAe79E,GACzBu2B,KAAOmvB,MAAM1lD,MACfi+E,UAAUj+E,GAAK4tC,SAAW+vC,UAAYp8E,IAAIpB,KAAKo2B,KAAMA,KAAKmnD,SAAU19E,EAAG0lD,OACnE9X,YAAYowC,eACdrlB,KAAK34D,GAAKu2B,KAEVynD,eAAepwC,UAAYrX,MAQjC,IAAKv2B,EAAI,EAAGA,EAAI89E,aAAc99E,GAExBu2B,KAAOynD,eADXpwC,SAAW+vC,UAAYp8E,IAAIpB,KAAK+sB,OAAQ1a,KAAKxS,GAAIA,EAAGwS,SAElD4oB,OAAOp7B,GAAKu2B,KACZA,KAAKmnD,SAAWlrE,KAAKxS,GACrBg+E,eAAepwC,UAAY,MAE3BirB,MAAM74D,GAAK,IAAIw9E,UAAUtwD,OAAQ1a,KAAKxS,IAK1C,IAAKA,EAAI,EAAGA,EAAI69E,cAAe79E,GACxBu2B,KAAOmvB,MAAM1lD,KAAQg+E,eAAeC,UAAUj+E,MAAQu2B,OACzDoiC,KAAK34D,GAAKu2B,MClDhB,SAAS2U,eAAU9oC,EAAGyI,GACpB,OAAOzI,EAAIyI,GAAK,EAAIzI,EAAIyI,EAAI,EAAIzI,GAAKyI,EAAI,EAAIsgC,ICoBhC,IC1CA+yC,WAAA,SAAS3nD,MACtB,OAAQA,KAAKqmD,eAAiBrmD,KAAKqmD,cAAcp7B,aACzCjrB,KAAKwH,UAAYxH,MAClBA,KAAKirB,aC4BP,SAAS28B,WAAW5nD,KAAMh2B,MAC/B,OAAOg2B,KAAKiJ,MAAMmiB,iBAAiBphD,OAC5BihD,WAAYjrB,MAAMmrB,iBAAiBnrB,KAAM,MAAMorB,iBAAiBphD,MCjCzE,SAAS69E,WAAWt+B,QAClB,OAAOA,OAAOlgC,OAAO7L,MAAM,SAG7B,SAASsqE,UAAU9nD,MACjB,OAAOA,KAAK8nD,WAAa,IAAIC,UAAU/nD,MAGzC,SAAS+nD,UAAU/nD,MACjB9uB,KAAKoyB,MAAQtD,KACb9uB,KAAK82E,OAASH,WAAW7nD,KAAK2iC,aAAa,UAAY,IAuBzD,SAASslB,WAAWjoD,KAAMk2B,OAExB,IADA,IAAI51B,KAAOwnD,UAAU9nD,MAAOv2B,GAAK,EAAGyB,EAAIgrD,MAAMtjD,SACrCnJ,EAAIyB,GAAGo1B,KAAK3Y,IAAIuuC,MAAMzsD,IAGjC,SAASy+E,cAAcloD,KAAMk2B,OAE3B,IADA,IAAI51B,KAAOwnD,UAAU9nD,MAAOv2B,GAAK,EAAGyB,EAAIgrD,MAAMtjD,SACrCnJ,EAAIyB,GAAGo1B,KAAKoW,OAAOwf,MAAMzsD,IA3BpCs+E,UAAUx8E,WACRoc,IAAK,SAAAA,IAAS3d,MACJkH,KAAK82E,OAAO7wE,QAAQnN,MACpB,IACNkH,KAAK82E,OAAO5wE,KAAKpN,MACjBkH,KAAKoyB,MAAM2P,aAAa,QAAS/hC,KAAK82E,OAAO/zE,KAAK,QAGtDyiC,OAAQ,SAAAA,OAAS1sC,MACf,IAAIP,EAAIyH,KAAK82E,OAAO7wE,QAAQnN,MACxBP,GAAK,IACPyH,KAAK82E,OAAOxvE,OAAO/O,EAAG,GACtByH,KAAKoyB,MAAM2P,aAAa,QAAS/hC,KAAK82E,OAAO/zE,KAAK,QAGtDk0E,SAAU,SAAAA,SAASn+E,MACjB,OAAOkH,KAAK82E,OAAO7wE,QAAQnN,OAAS,IC7BxC,SAASo+E,aACPl3E,KAAKo6B,YAAc,GCDrB,SAAS+8C,aACPn3E,KAAKw3B,UAAY,GCDnB,SAASipB,cACHzgD,KAAKo3E,aAAap3E,KAAKu/B,WAAWuC,YAAY9hC,MCDpD,SAASq3E,QACHr3E,KAAKs3E,iBAAiBt3E,KAAKu/B,WAAWC,aAAax/B,KAAMA,KAAKu/B,WAAWg4C,YCE/E,SAASC,eACP,OAAO,KCJT,SAAShyC,gBACP,IAAI/f,OAASzlB,KAAKu/B,WACd9Z,QAAQA,OAAOH,YAAYtlB,MCFjC,SAASy3E,yBACP,OAAOz3E,KAAKu/B,WAAWC,aAAax/B,KAAK03E,WAAU,GAAQ13E,KAAKo3E,aAGlE,SAASO,sBACP,OAAO33E,KAAKu/B,WAAWC,aAAax/B,KAAK03E,WAAU,GAAO13E,KAAKo3E,aAGlD,ICRXQ,gBAEOC,SAAQ,KAEK,oBAAbvhD,WAEH,iBADQA,SAASwjB,kBAErB89B,cAAgBE,WAAY,YAAaC,WAAY,cAIzD,SAASC,sBAAsB1I,SAAUrtE,MAAOg8C,OAE9C,OADAqxB,SAAW2I,gBAAgB3I,SAAUrtE,MAAOg8C,OACrC,SAAS45B,OACd,IAAIK,QAAUL,MAAMM,cACfD,UAAYA,UAAYl4E,MAAkD,EAAxCk4E,QAAQE,wBAAwBp4E,QACrEsvE,SAAS52E,KAAKsH,KAAM63E,QAK1B,SAASI,gBAAgB3I,SAAUrtE,MAAOg8C,OACxC,OAAO,SAASo6B,QACd,IAAIC,OAAST,SACbA,SAAQQ,OACR,IACE/I,SAAS52E,KAAKsH,KAAMA,KAAKi2E,SAAUh0E,MAAOg8C,OAD5C,QAGE45B,SAAQS,SAad,SAASC,SAASC,UAChB,OAAO,WACL,IAAI9M,GAAK1rE,KAAKy4E,KACd,GAAK/M,GAAL,CACA,IAAK,IAAkC1yE,EAA9B6hB,EAAI,EAAGtiB,GAAK,EAAGI,EAAI+yE,GAAGhqE,OAAWmZ,EAAIliB,IAAKkiB,EAC7C7hB,EAAI0yE,GAAG7wD,GAAM29D,SAASn9E,MAAQrC,EAAEqC,OAASm9E,SAASn9E,MAASrC,EAAEF,OAAS0/E,SAAS1/E,KAGjF4yE,KAAKnzE,GAAKS,EAFVgH,KAAK04E,oBAAoB1/E,EAAEqC,KAAMrC,EAAEs2E,SAAUt2E,EAAE2/E,WAK7CpgF,EAAGmzE,GAAGhqE,OAASnJ,SACTyH,KAAKy4E,OAIrB,SAASG,MAAMJ,SAAUh/E,MAAOm/E,SAC9B,IAAIE,KAAOjB,aAAat9E,eAAek+E,SAASn9E,MAAQ28E,sBAAwBC,gBAChF,OAAO,SAASp/E,EAAGN,EAAG0lD,OACpB,IAAoBjlD,EAAhB0yE,GAAK1rE,KAAKy4E,KAASnJ,SAAWuJ,KAAKr/E,MAAOjB,EAAG0lD,OACjD,GAAIytB,GAAI,IAAK,IAAI7wD,EAAI,EAAGliB,EAAI+yE,GAAGhqE,OAAQmZ,EAAIliB,IAAKkiB,EAC9C,IAAK7hB,EAAI0yE,GAAG7wD,IAAIxf,OAASm9E,SAASn9E,MAAQrC,EAAEF,OAAS0/E,SAAS1/E,KAI5D,OAHAkH,KAAK04E,oBAAoB1/E,EAAEqC,KAAMrC,EAAEs2E,SAAUt2E,EAAE2/E,SAC/C34E,KAAK84E,iBAAiB9/E,EAAEqC,KAAMrC,EAAEs2E,SAAWA,SAAUt2E,EAAE2/E,QAAUA,cACjE3/E,EAAEQ,MAAQA,OAIdwG,KAAK84E,iBAAiBN,SAASn9E,KAAMi0E,SAAUqJ,SAC/C3/E,GAAKqC,KAAMm9E,SAASn9E,KAAMvC,KAAM0/E,SAAS1/E,KAAMU,MAAOA,MAAO81E,SAAUA,SAAUqJ,QAASA,SACrFjN,GACAA,GAAGxlE,KAAKlN,GADJgH,KAAKy4E,MAAQz/E,IA0BnB,SAAS+/E,YAAYV,OAAQ/I,SAAUlW,KAAMpyD,MAClD,IAAIsxE,OAAST,SACbQ,OAAOW,YAAcnB,SACrBA,SAAQQ,OACR,IACE,OAAO/I,SAAS/nE,MAAM6xD,KAAMpyD,MAD9B,QAGE6wE,SAAQS,QCtGZ,SAASW,cAAcnqD,KAAMzzB,KAAMqlB,QACjC,IAAIvoB,OAAS4hD,WAAYjrB,MACrB+oD,MAAQ1/E,OAAO+gF,YAEE,mBAAVrB,MACTA,MAAQ,IAAIA,MAAMx8E,KAAMqlB,SAExBm3D,MAAQ1/E,OAAOm+B,SAAS6iD,YAAY,SAChCz4D,QAAQm3D,MAAMuB,UAAU/9E,KAAMqlB,OAAO24D,QAAS34D,OAAO44D,YAAazB,MAAM0B,OAAS74D,OAAO64D,QACvF1B,MAAMuB,UAAU/9E,MAAM,GAAO,IAGpCyzB,KAAKmqD,cAAcpB,OAeN,ICGJhgF,gBAAQ,MAEZ,SAASkuE,oBAAUyT,OAAQC,SAChCz5E,KAAK05E,QAAUF,OACfx5E,KAAK25E,SAAWF,QAGlB,SAAS3oB,sBACP,OAAO,IAAIiV,sBAAYzvC,SAASwjB,kBAAmBjiD,gBAGrDkuE,oBAAU1rE,UAAYy2D,oBAAUz2D,WAC9B2qB,YAAa+gD,oBACbjoD,OC1Ca,SAASA,QACA,mBAAXA,SAAuBA,OAAS03D,aAAS13D,SAEpD,IAAK,IAAI07D,OAASx5E,KAAK05E,QAAS/gF,EAAI6gF,OAAO93E,OAAQk4E,UAAY,IAAI/wE,MAAMlQ,GAAIkiB,EAAI,EAAGA,EAAIliB,IAAKkiB,EAC3F,IAAK,IAAiFiU,KAAM+qD,QAAnF57B,MAAQu7B,OAAO3+D,GAAI7gB,EAAIikD,MAAMv8C,OAAQo4E,SAAWF,UAAU/+D,GAAK,IAAIhS,MAAM7O,GAAmBzB,EAAI,EAAGA,EAAIyB,IAAKzB,GAC9Gu2B,KAAOmvB,MAAM1lD,MAAQshF,QAAU/7D,OAAOplB,KAAKo2B,KAAMA,KAAKmnD,SAAU19E,EAAG0lD,UAClE,aAAcnvB,OAAM+qD,QAAQ5D,SAAWnnD,KAAKmnD,UAChD6D,SAASvhF,GAAKshF,SAKpB,OAAO,IAAI9T,oBAAU6T,UAAW55E,KAAK25E,WD+BrC5oB,UE3Ca,SAASjzC,QACA,mBAAXA,SAAuBA,OAAS43D,YAAY53D,SAEvD,IAAK,IAAI07D,OAASx5E,KAAK05E,QAAS/gF,EAAI6gF,OAAO93E,OAAQk4E,aAAgBH,WAAc5+D,EAAI,EAAGA,EAAIliB,IAAKkiB,EAC/F,IAAK,IAAyCiU,KAArCmvB,MAAQu7B,OAAO3+D,GAAI7gB,EAAIikD,MAAMv8C,OAAcnJ,EAAI,EAAGA,EAAIyB,IAAKzB,GAC9Du2B,KAAOmvB,MAAM1lD,MACfqhF,UAAU1zE,KAAK4X,OAAOplB,KAAKo2B,KAAMA,KAAKmnD,SAAU19E,EAAG0lD,QACnDw7B,QAAQvzE,KAAK4oB,OAKnB,OAAO,IAAIi3C,oBAAU6T,UAAWH,UFgChCzmE,OG5Ca,SAAS3K,OACD,mBAAVA,QAAsBA,MAAQutE,QAAQvtE,QAEjD,IAAK,IAAImxE,OAASx5E,KAAK05E,QAAS/gF,EAAI6gF,OAAO93E,OAAQk4E,UAAY,IAAI/wE,MAAMlQ,GAAIkiB,EAAI,EAAGA,EAAIliB,IAAKkiB,EAC3F,IAAK,IAAuEiU,KAAnEmvB,MAAQu7B,OAAO3+D,GAAI7gB,EAAIikD,MAAMv8C,OAAQo4E,SAAWF,UAAU/+D,MAAetiB,EAAI,EAAGA,EAAIyB,IAAKzB,GAC3Fu2B,KAAOmvB,MAAM1lD,KAAO8P,MAAM3P,KAAKo2B,KAAMA,KAAKmnD,SAAU19E,EAAG0lD,QAC1D67B,SAAS5zE,KAAK4oB,MAKpB,OAAO,IAAIi3C,oBAAU6T,UAAW55E,KAAK25E,WHkCrC5uE,Kf4Ba,SAASvR,MAAOM,KAC7B,IAAKN,MAGH,OAFAuR,KAAO,IAAIlC,MAAM7I,KAAK04B,QAAS7d,GAAK,EACpC7a,KAAKulC,KAAK,SAAS1sC,GAAKkS,OAAO8P,GAAKhiB,IAC7BkS,KAGT,IAAIhR,KAAOD,IAAMw8E,QAAUH,UACvBsD,QAAUz5E,KAAK25E,SACfH,OAASx5E,KAAK05E,QAEG,mBAAVlgF,QAAsBA,MDvFpB,SAAS2iC,GACtB,OAAO,WACL,OAAOA,GCqFgCqa,CAASh9C,QAElD,IAAK,IAAIb,EAAI6gF,OAAO93E,OAAQiyB,OAAS,IAAI9qB,MAAMlQ,GAAIy4D,MAAQ,IAAIvoD,MAAMlQ,GAAIu4D,KAAO,IAAIroD,MAAMlQ,GAAIkiB,EAAI,EAAGA,EAAIliB,IAAKkiB,EAAG,CAC/G,IAAI4K,OAASg0D,QAAQ5+D,GACjBojC,MAAQu7B,OAAO3+D,GACfu7D,YAAcn4B,MAAMv8C,OACpBqJ,KAAOvR,MAAMd,KAAK+sB,OAAQA,QAAUA,OAAOwwD,SAAUp7D,EAAG4+D,SACxDpD,WAAatrE,KAAKrJ,OAClBq4E,WAAa3oB,MAAMv2C,GAAK,IAAIhS,MAAMwtE,YAClC2D,YAAcrmD,OAAO9Y,GAAK,IAAIhS,MAAMwtE,YAGxCt8E,KAAK0rB,OAAQw4B,MAAO87B,WAAYC,YAFhB9oB,KAAKr2C,GAAK,IAAIhS,MAAMutE,aAEoBrrE,KAAMjR,KAK9D,IAAK,IAAoBonD,SAAUjvC,KAA1BozB,GAAK,EAAGgY,GAAK,EAAmBhY,GAAKgxC,aAAchxC,GAC1D,GAAI6b,SAAW64B,WAAW10C,IAAK,CAE7B,IADIA,IAAMgY,KAAIA,GAAKhY,GAAK,KACfpzB,KAAO+nE,YAAY38B,QAAUA,GAAKg5B,aAC3Cn1B,SAAS80B,MAAQ/jE,MAAQ,MAQ/B,OAHA0hB,OAAS,IAAIoyC,oBAAUpyC,OAAQ8lD,UACxBQ,OAAS7oB,MAChBz9B,OAAOumD,MAAQhpB,KACRv9B,QenEPy9B,MjB9Ca,WACb,OAAO,IAAI2U,oBAAU/lE,KAAKi6E,QAAUj6E,KAAK05E,QAAQzxE,IAAI6tE,QAAS91E,KAAK25E,WiB8CnEzoB,KI/Ca,WACb,OAAO,IAAI6U,oBAAU/lE,KAAKk6E,OAASl6E,KAAK05E,QAAQzxE,IAAI6tE,QAAS91E,KAAK25E,WJ+ClE52E,KKnDa,SAASo3E,QAASC,SAAUC,QACzC,IAAIjpB,MAAQpxD,KAAKoxD,QAASz9B,OAAS3zB,KAAMkxD,KAAOlxD,KAAKkxD,OAIrD,OAHAE,MAA2B,mBAAZ+oB,QAAyBA,QAAQ/oB,OAASA,MAAMl+B,OAAOinD,QAAU,IAChE,MAAZC,WAAkBzmD,OAASymD,SAASzmD,SAC1B,MAAV0mD,OAAgBnpB,KAAK1rB,SAAe60C,OAAOnpB,MACxCE,OAASz9B,OAASy9B,MAAMvnD,MAAM8pB,QAAQ1N,QAAU0N,QL+CvD9pB,MMlDa,SAASinD,WAEtB,IAAK,IAAIwpB,QAAUt6E,KAAK05E,QAASa,QAAUzpB,UAAU4oB,QAASc,GAAKF,QAAQ54E,OAAQ6xC,GAAKgnC,QAAQ74E,OAAQ/I,EAAIkL,KAAK2P,IAAIgnE,GAAIjnC,IAAKknC,OAAS,IAAI5xE,MAAM2xE,IAAK3/D,EAAI,EAAGA,EAAIliB,IAAKkiB,EACpK,IAAK,IAAmGiU,KAA/F4rD,OAASJ,QAAQz/D,GAAI8/D,OAASJ,QAAQ1/D,GAAI7gB,EAAI0gF,OAAOh5E,OAAQmI,MAAQ4wE,OAAO5/D,GAAK,IAAIhS,MAAM7O,GAAUzB,EAAI,EAAGA,EAAIyB,IAAKzB,GACxHu2B,KAAO4rD,OAAOniF,IAAMoiF,OAAOpiF,MAC7BsR,MAAMtR,GAAKu2B,MAKjB,KAAOjU,EAAI2/D,KAAM3/D,EACf4/D,OAAO5/D,GAAKy/D,QAAQz/D,GAGtB,OAAO,IAAIkrD,oBAAU0U,OAAQz6E,KAAK25E,WNqClC1zD,MOrDa,WAEb,IAAK,IAAIuzD,OAASx5E,KAAK05E,QAAS7+D,GAAK,EAAGliB,EAAI6gF,OAAO93E,SAAUmZ,EAAIliB,GAC/D,IAAK,IAA8Dm2B,KAA1DmvB,MAAQu7B,OAAO3+D,GAAItiB,EAAI0lD,MAAMv8C,OAAS,EAAGuQ,KAAOgsC,MAAM1lD,KAAYA,GAAK,IAC1Eu2B,KAAOmvB,MAAM1lD,MACX0Z,MAA6C,EAArC6c,KAAKspD,wBAAwBnmE,OAAWA,KAAKstB,WAAWC,aAAa1Q,KAAM7c,MACvFA,KAAO6c,MAKb,OAAO9uB,MP2CPuQ,KdpDa,SAASqzB,SAGtB,SAASg3C,YAAYjgF,EAAGyI,GACtB,OAAOzI,GAAKyI,EAAIwgC,QAAQjpC,EAAEs7E,SAAU7yE,EAAE6yE,WAAat7E,GAAKyI,EAHrDwgC,UAASA,QAAUH,gBAMxB,IAAK,IAAI+1C,OAASx5E,KAAK05E,QAAS/gF,EAAI6gF,OAAO93E,OAAQm5E,WAAa,IAAIhyE,MAAMlQ,GAAIkiB,EAAI,EAAGA,EAAIliB,IAAKkiB,EAAG,CAC/F,IAAK,IAAmFiU,KAA/EmvB,MAAQu7B,OAAO3+D,GAAI7gB,EAAIikD,MAAMv8C,OAAQo5E,UAAYD,WAAWhgE,GAAK,IAAIhS,MAAM7O,GAAUzB,EAAI,EAAGA,EAAIyB,IAAKzB,GACxGu2B,KAAOmvB,MAAM1lD,MACfuiF,UAAUviF,GAAKu2B,MAGnBgsD,UAAUvqE,KAAKqqE,aAGjB,OAAO,IAAI7U,oBAAU8U,WAAY76E,KAAK25E,UAAU1zD,ScqChDvtB,KQvDa,WACb,IAAI2T,SAAWjH,UAAU,GAGzB,OAFAA,UAAU,GAAKpF,KACfqM,SAAS9E,MAAM,KAAMnC,WACdpF,MRoDPmxB,MSxDa,WACb,IAAIA,MAAQ,IAAItoB,MAAM7I,KAAK04B,QAASngC,GAAK,EAEzC,OADAyH,KAAKulC,KAAK,WAAapU,QAAQ54B,GAAKyH,OAC7BmxB,OTsDPrC,KUzDa,WAEb,IAAK,IAAI0qD,OAASx5E,KAAK05E,QAAS7+D,EAAI,EAAGliB,EAAI6gF,OAAO93E,OAAQmZ,EAAIliB,IAAKkiB,EACjE,IAAK,IAAIojC,MAAQu7B,OAAO3+D,GAAItiB,EAAI,EAAGyB,EAAIikD,MAAMv8C,OAAQnJ,EAAIyB,IAAKzB,EAAG,CAC/D,IAAIu2B,KAAOmvB,MAAM1lD,GACjB,GAAIu2B,KAAM,OAAOA,KAIrB,OAAO,MViDP4J,KW1Da,WACb,IAAIA,KAAO,EAEX,OADA14B,KAAKulC,KAAK,aAAe7M,OAClBA,MXwDPgN,MY3Da,WACb,OAAQ1lC,KAAK8uB,QZ2DbyW,Ka5Da,SAASl5B,UAEtB,IAAK,IAAImtE,OAASx5E,KAAK05E,QAAS7+D,EAAI,EAAGliB,EAAI6gF,OAAO93E,OAAQmZ,EAAIliB,IAAKkiB,EACjE,IAAK,IAAgDiU,KAA5CmvB,MAAQu7B,OAAO3+D,GAAItiB,EAAI,EAAGyB,EAAIikD,MAAMv8C,OAAcnJ,EAAIyB,IAAKzB,GAC9Du2B,KAAOmvB,MAAM1lD,KAAI8T,SAAS3T,KAAKo2B,KAAMA,KAAKmnD,SAAU19E,EAAG0lD,OAI/D,OAAOj+C,MbqDPqxD,KbnBa,SAASv4D,KAAMU,OAC5B,IAAIy7E,SAAW9J,cAAUryE,MAEzB,GAAIsM,UAAU1D,OAAS,EAAG,CACxB,IAAIotB,KAAO9uB,KAAK8uB,OAChB,OAAOmmD,SAAS/F,MACVpgD,KAAKisD,eAAe9F,SAASF,MAAOE,SAAS/F,OAC7CpgD,KAAK2iC,aAAawjB,UAG1B,OAAOj1E,KAAKulC,MAAe,MAAT/rC,MACXy7E,SAAS/F,MA7ClB,SAAS8L,aAAa/F,UACpB,OAAO,WACLj1E,KAAKi7E,kBAAkBhG,SAASF,MAAOE,SAAS/F,SARpD,SAASgM,WAAWpiF,MAClB,OAAO,WACLkH,KAAKm7E,gBAAgBriF,QAiDgD,mBAAVU,MACtDy7E,SAAS/F,MApBlB,SAASkM,eAAenG,SAAUz7E,OAChC,OAAO,WACL,IAAIoQ,EAAIpQ,MAAM+N,MAAMvH,KAAMoF,WACjB,MAALwE,EAAW5J,KAAKi7E,kBAAkBhG,SAASF,MAAOE,SAAS/F,OAC1DlvE,KAAK8iC,eAAemyC,SAASF,MAAOE,SAAS/F,MAAOtlE,KAZ7D,SAASyxE,aAAaviF,KAAMU,OAC1B,OAAO,WACL,IAAIoQ,EAAIpQ,MAAM+N,MAAMvH,KAAMoF,WACjB,MAALwE,EAAW5J,KAAKm7E,gBAAgBriF,MAC/BkH,KAAK+hC,aAAajpC,KAAM8Q,KAyBxBqrE,SAAS/F,MAnClB,SAASoM,eAAerG,SAAUz7E,OAChC,OAAO,WACLwG,KAAK8iC,eAAemyC,SAASF,MAAOE,SAAS/F,MAAO11E,SARxD,SAAS+hF,aAAaziF,KAAMU,OAC1B,OAAO,WACLwG,KAAK+hC,aAAajpC,KAAMU,UAuC+By7E,SAAUz7E,SaOnEu+B,MXxCa,SAASj/B,KAAMU,MAAOgiF,UACnC,OAAOp2E,UAAU1D,OAAS,EACpB1B,KAAKulC,MAAe,MAAT/rC,MAtBnB,SAASiiF,YAAY3iF,MACnB,OAAO,WACLkH,KAAK+3B,MAAM2jD,eAAe5iF,QAqBe,mBAAVU,MAXnC,SAASmiF,cAAc7iF,KAAMU,MAAOgiF,UAClC,OAAO,WACL,IAAI5xE,EAAIpQ,MAAM+N,MAAMvH,KAAMoF,WACjB,MAALwE,EAAW5J,KAAK+3B,MAAM2jD,eAAe5iF,MACpCkH,KAAK+3B,MAAM6jD,YAAY9iF,KAAM8Q,EAAG4xE,YAVzC,SAASK,cAAc/iF,KAAMU,MAAOgiF,UAClC,OAAO,WACLx7E,KAAK+3B,MAAM6jD,YAAY9iF,KAAMU,MAAOgiF,aAiBX1iF,KAAMU,MAAmB,MAAZgiF,SAAmB,GAAKA,WAC1D9E,WAAW12E,KAAK8uB,OAAQh2B,OWmC9BsB,Sc3Ca,SAAStB,KAAMU,OAC5B,OAAO4L,UAAU1D,OAAS,EACpB1B,KAAKulC,MAAe,MAAT/rC,MAtBnB,SAASsiF,eAAehjF,MACtB,OAAO,kBACEkH,KAAKlH,QAqB8B,mBAAVU,MAXpC,SAASuiF,iBAAiBjjF,KAAMU,OAC9B,OAAO,WACL,IAAIoQ,EAAIpQ,MAAM+N,MAAMvH,KAAMoF,WACjB,MAALwE,SAAkB5J,KAAKlH,MACtBkH,KAAKlH,MAAQ8Q,IAVtB,SAASoyE,iBAAiBljF,KAAMU,OAC9B,OAAO,WACLwG,KAAKlH,MAAQU,SAiBaV,KAAMU,QAC5BwG,KAAK8uB,OAAOh2B,OdsClBmjF,QVHa,SAASnjF,KAAMU,OAC5B,IAAIwrD,MAAQ2xB,WAAW79E,KAAO,IAE9B,GAAIsM,UAAU1D,OAAS,EAAG,CAExB,IADA,IAAI0tB,KAAOwnD,UAAU52E,KAAK8uB,QAASv2B,GAAK,EAAGyB,EAAIgrD,MAAMtjD,SAC5CnJ,EAAIyB,GAAG,IAAKo1B,KAAK6nD,SAASjyB,MAAMzsD,IAAK,OAAO,EACrD,OAAO,EAGT,OAAOyH,KAAKulC,MAAuB,mBAAV/rC,MAf3B,SAAS0iF,gBAAgBl3B,MAAOxrD,OAC9B,OAAO,YACJA,MAAM+N,MAAMvH,KAAMoF,WAAa2xE,WAAaC,eAAeh3E,KAAMglD,SAc5CxrD,MA5B1B,SAAS2iF,YAAYn3B,OACnB,OAAO,WACL+xB,WAAW/2E,KAAMglD,SAIrB,SAASo3B,aAAap3B,OACpB,OAAO,WACLgyB,cAAch3E,KAAMglD,UAsBFA,MAAOxrD,SUR3B6G,KThDa,SAAS7G,OACtB,OAAO4L,UAAU1D,OACX1B,KAAKulC,KAAc,MAAT/rC,MACN09E,YAA+B,mBAAV19E,MAVjC,SAAS6iF,aAAa7iF,OACpB,OAAO,WACL,IAAIoQ,EAAIpQ,MAAM+N,MAAMvH,KAAMoF,WAC1BpF,KAAKo6B,YAAmB,MAALxwB,EAAY,GAAKA,IATxC,SAAS0yE,aAAa9iF,OACpB,OAAO,WACLwG,KAAKo6B,YAAc5gC,SAgBGA,QAClBwG,KAAK8uB,OAAOsL,aS2ClBmiD,KRjDa,SAAS/iF,OACtB,OAAO4L,UAAU1D,OACX1B,KAAKulC,KAAc,MAAT/rC,MACN29E,YAA+B,mBAAV39E,MAVjC,SAASgjF,aAAahjF,OACpB,OAAO,WACL,IAAIoQ,EAAIpQ,MAAM+N,MAAMvH,KAAMoF,WAC1BpF,KAAKw3B,UAAiB,MAAL5tB,EAAY,GAAKA,IATtC,SAAS6yE,aAAajjF,OACpB,OAAO,WACLwG,KAAKw3B,UAAYh+B,SAgBKA,QAClBwG,KAAK8uB,OAAO0I,WQ4ClBipB,MP/Da,WACb,OAAOzgD,KAAKulC,KAAKkb,cO+DjB42B,MNhEa,WACb,OAAOr3E,KAAKulC,KAAK8xC,QMgEjBnkD,OenEa,SAASp6B,MACtB,IAAIe,OAAyB,mBAATf,KAAsBA,KAAOk8E,QAAQl8E,MACzD,OAAOkH,KAAK8d,OAAO,WACjB,OAAO9d,KAAK8hC,YAAYjoC,OAAO0N,MAAMvH,KAAMoF,efiE7CmsD,OL/Da,SAASz4D,KAAMkpE,QAC5B,IAAInoE,OAAyB,mBAATf,KAAsBA,KAAOk8E,QAAQl8E,MACrDglB,OAAmB,MAAVkkD,OAAiBwV,aAAiC,mBAAXxV,OAAwBA,OAASwT,aAASxT,QAC9F,OAAOhiE,KAAK8d,OAAO,WACjB,OAAO9d,KAAKw/B,aAAa3lC,OAAO0N,MAAMvH,KAAMoF,WAAY0Y,OAAOvW,MAAMvH,KAAMoF,YAAc,SK4D3FogC,OJlEa,WACb,OAAOxlC,KAAKulC,KAAKC,gBIkEjB3nB,MHhEa,SAAS6+D,MACtB,OAAO18E,KAAK8d,OAAO4+D,KAAO/E,oBAAsBF,yBGgEhDnmE,MgBzEa,SAAS9X,OACtB,OAAO4L,UAAU1D,OACX1B,KAAK5F,SAAS,WAAYZ,OAC1BwG,KAAK8uB,OAAOmnD,UhBuElBvK,GFEa,SAAS8M,SAAUh/E,MAAOm/E,SACvC,IAA+CpgF,EAAyBkB,EAApEkjF,UA5CN,SAASC,eAAeD,WACtB,OAAOA,UAAUxkE,OAAO7L,MAAM,SAASrE,IAAI,SAASxO,GAClD,IAAIX,KAAO,GAAIP,EAAIkB,EAAEwM,QAAQ,KAE7B,OADI1N,GAAK,IAAGO,KAAOW,EAAEqhB,MAAMviB,EAAI,GAAIkB,EAAIA,EAAEqhB,MAAM,EAAGviB,KAC1C8C,KAAM5B,EAAGX,KAAMA,QAwCT8jF,CAAepE,SAAW,IAAQx+E,EAAI2iF,UAAUj7E,OAEhE,KAAI0D,UAAU1D,OAAS,GAAvB,CAcA,IAFAgqE,GAAKlyE,MAAQo/E,MAAQL,SACN,MAAXI,UAAiBA,SAAU,GAC1BpgF,EAAI,EAAGA,EAAIyB,IAAKzB,EAAGyH,KAAKulC,KAAKmmC,GAAGiR,UAAUpkF,GAAIiB,MAAOm/E,UAC1D,OAAO34E,KAdL,IAAI0rE,GAAK1rE,KAAK8uB,OAAO2pD,KACrB,GAAI/M,GAAI,IAAK,IAA0B1yE,EAAtB6hB,EAAI,EAAGliB,EAAI+yE,GAAGhqE,OAAWmZ,EAAIliB,IAAKkiB,EACjD,IAAKtiB,EAAI,EAAGS,EAAI0yE,GAAG7wD,GAAItiB,EAAIyB,IAAKzB,EAC9B,IAAKkB,EAAIkjF,UAAUpkF,IAAI8C,OAASrC,EAAEqC,MAAQ5B,EAAEX,OAASE,EAAEF,KACrD,OAAOE,EAAEQ,OETjBqjF,SD9Ca,SAASxhF,KAAMqlB,QAC5B,OAAO1gB,KAAKulC,MAAwB,mBAAX7kB,OAP3B,SAASo8D,iBAAiBzhF,KAAMqlB,QAC9B,OAAO,WACL,OAAOu4D,cAAcj5E,KAAM3E,KAAMqlB,OAAOnZ,MAAMvH,KAAMoF,cARxD,SAAS23E,iBAAiB1hF,KAAMqlB,QAC9B,OAAO,WACL,OAAOu4D,cAAcj5E,KAAM3E,KAAMqlB,WAaXrlB,KAAMqlB,WC8CjBowC,sCiB5EAksB,WAAA,SAASxH,UACtB,MAA2B,iBAAbA,SACR,IAAIzP,sBAAYzvC,SAASm/C,cAAcD,aAAcl/C,SAASwjB,kBAC9D,IAAIisB,sBAAYyP,WAAY39E,iBCLhColF,OAAS,EAMb,SAASC,QACPl9E,KAAKmgB,EAAI,OAAS88D,QAAQ36E,SAAS,IAGrC46E,MAAM7iF,UARS,SAAS60E,QACtB,OAAO,IAAIgO,OAOW7iF,WACtB2qB,YAAak4D,MACb9jF,IAAK,SAAAA,IAAS01B,MAEZ,IADA,IAAIgI,GAAK92B,KAAKmgB,IACL2W,MAAMhI,OAAO,KAAMA,KAAOA,KAAKyQ,YAAa,OACrD,OAAOzQ,KAAKgI,KAEdrlB,IAAK,SAAAA,IAASqd,KAAMt1B,OAClB,OAAOs1B,KAAK9uB,KAAKmgB,GAAK3mB,OAExBgsC,OAAQ,SAAAA,OAAS1W,MACf,OAAO9uB,KAAKmgB,KAAK2O,aAAeA,KAAK9uB,KAAKmgB,IAE5C7d,SAAU,SAAAA,WACR,OAAOtC,KAAKmgB,ICtBD,IAAA64D,YAAA,WAEb,IADA,IAAqBv1D,OAAjB05D,QAAUtF,SACPp0D,OAAS05D,QAAQnE,aAAamE,QAAU15D,OAC/C,OAAO05D,SCLMC,UAAA,SAAStuD,KAAM+oD,OAC5B,IAAIn1C,IAAM5T,KAAKuuD,iBAAmBvuD,KAElC,GAAI4T,IAAI46C,eAAgB,CACtB,IAAI1mB,MAAQl0B,IAAI46C,iBAGhB,OAFA1mB,MAAMz6B,EAAI07C,MAAM0F,QAAS3mB,MAAMpzD,EAAIq0E,MAAM2F,UACzC5mB,MAAQA,MAAM6mB,gBAAgB3uD,KAAK4uD,eAAeC,YACpCxhD,EAAGy6B,MAAMpzD,GAGzB,IAAI0wD,KAAOplC,KAAK8uD,wBAChB,OAAQ/F,MAAM0F,QAAUrpB,KAAKpwB,KAAOhV,KAAK+uD,WAAYhG,MAAM2F,QAAUtpB,KAAKxzB,IAAM5R,KAAKgvD,YCRxEC,MAAA,SAASjvD,MACtB,IAAI+oD,MAAQmB,cAEZ,OADInB,MAAMmG,iBAAgBnG,MAAQA,MAAMmG,eAAe,IAChDpnB,UAAM9nC,KAAM+oD,QCHNoG,UAAA,SAASnvD,KAAMovD,QAASC,YACjC/4E,UAAU1D,OAAS,IAAGy8E,WAAaD,QAASA,QAAUlF,cAAcgF,gBAExE,IAAK,IAA6CI,MAAzC7lF,EAAI,EAAGyB,EAAIkkF,QAAUA,QAAQx8E,OAAS,EAAUnJ,EAAIyB,IAAKzB,EAChE,IAAK6lF,MAAQF,QAAQ3lF,IAAI4lF,aAAeA,WACtC,OAAOvnB,UAAM9nC,KAAMsvD,OAIvB,OAAO,MCZLjlB,eAAQ3/D,MAAO,SAAAA,WAEnB,SAASqjF,oBACP,IAAK,IAAyCpjF,EAArClB,EAAI,EAAGyB,EAAIoL,UAAU1D,OAAQye,KAAW5nB,EAAIyB,IAAKzB,EAAG,CAC3D,KAAMkB,EAAI2L,UAAU7M,GAAK,KAAQkB,KAAK0mB,EAAI,MAAM,IAAIlR,MAAM,iBAAmBxV,GAC7E0mB,EAAE1mB,MAEJ,OAAO,IAAI4kF,SAASl+D,GAGtB,SAASk+D,SAASl+D,GAChBngB,KAAKmgB,EAAIA,EAqDX,SAAS/mB,aAAIiC,KAAMvC,MACjB,IAAK,IAA4BF,EAAxBL,EAAI,EAAGyB,EAAIqB,KAAKqG,OAAWnJ,EAAIyB,IAAKzB,EAC3C,IAAKK,EAAIyC,KAAK9C,IAAIO,OAASA,KACzB,OAAOF,EAAEY,MAKf,SAASiY,aAAIpW,KAAMvC,KAAMuT,UACvB,IAAK,IAAI9T,EAAI,EAAGyB,EAAIqB,KAAKqG,OAAQnJ,EAAIyB,IAAKzB,EACxC,GAAI8C,KAAK9C,GAAGO,OAASA,KAAM,CACzBuC,KAAK9C,GAAK4gE,cAAM99D,KAAOA,KAAKyf,MAAM,EAAGviB,GAAG8iB,OAAOhgB,KAAKyf,MAAMviB,EAAI,IAC9D,MAIJ,OADgB,MAAZ8T,UAAkBhR,KAAK6K,MAAMpN,KAAMA,KAAMU,MAAO6S,WAC7ChR,KAzDTgjF,SAAShkF,UAAYwiF,kBAASxiF,WAC5B2qB,YAAaq5D,SACb3S,GAAI,SAAAA,GAAS8M,SAAUnsE,UACrB,IAEI5S,EAFA0mB,EAAIngB,KAAKmgB,EACTm+D,EAbR,SAAS1B,wBAAeD,UAAW4B,OACjC,OAAO5B,UAAUxkE,OAAO7L,MAAM,SAASrE,IAAI,SAASxO,GAClD,IAAIX,KAAO,GAAIP,EAAIkB,EAAEwM,QAAQ,KAE7B,GADI1N,GAAK,IAAGO,KAAOW,EAAEqhB,MAAMviB,EAAI,GAAIkB,EAAIA,EAAEqhB,MAAM,EAAGviB,IAC9CkB,IAAM8kF,MAAMjkF,eAAeb,GAAI,MAAM,IAAIwV,MAAM,iBAAmBxV,GACtE,OAAQ4B,KAAM5B,EAAGX,KAAMA,QAQf8jF,CAAepE,SAAW,GAAIr4D,GAElC5nB,GAAK,EACLyB,EAAIskF,EAAE58E,OAGV,KAAI0D,UAAU1D,OAAS,GAAvB,CAOA,GAAgB,MAAZ2K,UAAwC,mBAAbA,SAAyB,MAAM,IAAI4C,MAAM,qBAAuB5C,UAC/F,OAAS9T,EAAIyB,GACX,GAAIP,GAAK++E,SAAW8F,EAAE/lF,IAAI8C,KAAM8kB,EAAE1mB,GAAKgY,aAAI0O,EAAE1mB,GAAI++E,SAAS1/E,KAAMuT,eAC3D,GAAgB,MAAZA,SAAkB,IAAK5S,KAAK0mB,EAAGA,EAAE1mB,GAAKgY,aAAI0O,EAAE1mB,GAAI++E,SAAS1/E,KAAM,MAG1E,OAAOkH,KAZL,OAASzH,EAAIyB,GAAG,IAAKP,GAAK++E,SAAW8F,EAAE/lF,IAAI8C,QAAU5B,EAAIL,aAAI+mB,EAAE1mB,GAAI++E,SAAS1/E,OAAQ,OAAOW,GAc/FutC,KAAM,SAAAA,OACJ,IAAIA,QAAW7mB,EAAIngB,KAAKmgB,EACxB,IAAK,IAAI1mB,KAAK0mB,EAAG6mB,KAAKvtC,GAAK0mB,EAAE1mB,GAAGqhB,QAChC,OAAO,IAAIujE,SAASr3C,OAEtBtuC,KAAM,SAAAA,KAAS2C,KAAM+9D,MACnB,IAAKp/D,EAAIoL,UAAU1D,OAAS,GAAK,EAAG,IAAK,IAAgC1H,EAAGP,EAA/BuN,KAAO,IAAI6B,MAAM7O,GAAIzB,EAAI,EAASA,EAAIyB,IAAKzB,EAAGyO,KAAKzO,GAAK6M,UAAU7M,EAAI,GACnH,IAAKyH,KAAKmgB,EAAE7lB,eAAee,MAAO,MAAM,IAAI4T,MAAM,iBAAmB5T,MACrE,IAAuB9C,EAAI,EAAGyB,GAAzBP,EAAIuG,KAAKmgB,EAAE9kB,OAAoBqG,OAAQnJ,EAAIyB,IAAKzB,EAAGkB,EAAElB,GAAGiB,MAAM+N,MAAM6xD,KAAMpyD,OAEjFO,MAAO,SAAAA,MAASlM,KAAM+9D,KAAMpyD,MAC1B,IAAKhH,KAAKmgB,EAAE7lB,eAAee,MAAO,MAAM,IAAI4T,MAAM,iBAAmB5T,MACrE,IAAK,IAAI5B,EAAIuG,KAAKmgB,EAAE9kB,MAAO9C,EAAI,EAAGyB,EAAIP,EAAEiI,OAAQnJ,EAAIyB,IAAKzB,EAAGkB,EAAElB,GAAGiB,MAAM+N,MAAM6xD,KAAMpyD,QAuBxE61E,mCCjFR,SAAS2B,gBACd3G,SAAM4G,2BAGO,IAAAC,QAAA,WACb7G,SAAM8G,iBACN9G,SAAM4G,4BCLOG,OAAA,SAASC,MACtB,IAAIhnF,KAAOgnF,KAAKvoD,SAASwjB,gBACrBgX,UAAYhzC,WAAO+gE,MAAMnT,GAAG,iBAAkBgT,SAAS,GACvD,kBAAmB7mF,KACrBi5D,UAAU4a,GAAG,mBAAoBgT,SAAS,IAE1C7mF,KAAKinF,WAAajnF,KAAKkgC,MAAMgnD,cAC7BlnF,KAAKkgC,MAAMgnD,cAAgB,SCVhB,IAAAC,qBAAA,SAAS7iD,GACtB,OAAO,WACL,OAAOA,ICFI,SAAS8iD,UAAUvjC,OAAQrgD,KAAM6jF,QAASpoD,GAAIqoD,OAAQhjD,EAAG34B,EAAGswD,GAAIC,GAAI8oB,UACjF78E,KAAK07C,OAASA,OACd17C,KAAK3E,KAAOA,KACZ2E,KAAKk/E,QAAUA,QACfl/E,KAAKm+E,WAAarnD,GAClB92B,KAAKm/E,OAASA,OACdn/E,KAAKm8B,EAAIA,EACTn8B,KAAKwD,EAAIA,EACTxD,KAAK8zD,GAAKA,GACV9zD,KAAK+zD,GAAKA,GACV/zD,KAAKmgB,EAAI08D,SCFX,SAASuC,gBACP,OAAQvH,SAAMwH,OAGhB,SAASC,mBACP,OAAOt/E,KAAKu/B,WAGd,SAASggD,eAAe1mF,GACtB,OAAY,MAALA,GAAasjC,EAAG07C,SAAM17C,EAAG34B,EAAGq0E,SAAMr0E,GAAK3K,EAGhD,SAAS2mF,mBACP,MAAO,iBAAkBx/E,KDR3Bi/E,UAAU5kF,UAAUqxE,GAAK,WACvB,IAAIlyE,MAAQwG,KAAKmgB,EAAEurD,GAAGnkE,MAAMvH,KAAKmgB,EAAG/a,WACpC,OAAO5L,QAAUwG,KAAKmgB,EAAIngB,KAAOxG,OCSpB,IAAAimF,SAAA,WACb,IAOIC,WACAC,WACAC,YACAC,YAVA7sE,OAASosE,cACTroD,UAAYuoD,iBACZJ,QAAUK,eACVO,UAAYN,iBACZO,YACArxD,UAAYmuD,aAAS,QAAS,OAAQ,OACtCsC,OAAS,EAKTa,eAAiB,EAErB,SAASC,KAAKnvB,WACZA,UACK4a,GAAG,iBAAkBwU,aACvBltE,OAAO8sE,WACLpU,GAAG,kBAAmByU,cACtBzU,GAAG,iBAAkB0U,YACrB1U,GAAG,iCAAkC2U,YACrCtoD,MAAM,eAAgB,QACtBA,MAAM,8BAA+B,iBAG5C,SAASmoD,cACP,IAAIL,aAAgB7sE,OAAOzL,MAAMvH,KAAMoF,WAAvC,CACA,IAAIk7E,QAAUC,YAAY,QAASxpD,UAAUxvB,MAAMvH,KAAMoF,WAAY24E,MAAO/9E,KAAMoF,WAC7Ek7E,UACLxiE,WAAO+5D,SAAMgH,MAAMnT,GAAG,iBAAkB8U,YAAY,GAAM9U,GAAG,eAAgB+U,YAAY,GACzF7B,OAAO/G,SAAMgH,MACbL,gBACAoB,aAAc,EACdF,WAAa7H,SAAM0F,QACnBoC,WAAa9H,SAAM2F,QACnB8C,QAAQ,WAGV,SAASE,aAEP,GADA9B,WACKkB,YAAa,CAChB,IAAI9rB,GAAK+jB,SAAM0F,QAAUmC,WAAY3rB,GAAK8jB,SAAM2F,QAAUmC,WAC1DC,YAAc9rB,GAAKA,GAAKC,GAAKA,GAAKisB,eAEpCD,SAAShC,MAAM,QAGjB,SAAS0C,aACP3iE,WAAO+5D,SAAMgH,MAAMnT,GAAG,8BAA+B,MH1DlD,SAASgV,QAAQ7B,KAAM8B,SAC5B,IAAI9oF,KAAOgnF,KAAKvoD,SAASwjB,gBACrBgX,UAAYhzC,WAAO+gE,MAAMnT,GAAG,iBAAkB,MAC9CiV,UACF7vB,UAAU4a,GAAG,aAAcgT,SAAS,GACpC1wD,WAAW,WAAa8iC,UAAU4a,GAAG,aAAc,OAAU,IAE3D,kBAAmB7zE,KACrBi5D,UAAU4a,GAAG,mBAAoB,OAEjC7zE,KAAKkgC,MAAMgnD,cAAgBlnF,KAAKinF,kBACzBjnF,KAAKinF,YGgDZ4B,CAAQ7I,SAAMgH,KAAMe,aACpBlB,UACAqB,SAAShC,MAAM,OAGjB,SAASoC,eACP,GAAKntE,OAAOzL,MAAMvH,KAAMoF,WAAxB,CACA,IAEwB7M,EAAG+nF,QAFvBpC,QAAUrG,SAAMmG,eAChBplF,EAAIm+B,UAAUxvB,MAAMvH,KAAMoF,WAC1BpL,EAAIkkF,QAAQx8E,OAEhB,IAAKnJ,EAAI,EAAGA,EAAIyB,IAAKzB,GACf+nF,QAAUC,YAAYrC,QAAQ3lF,GAAG4lF,WAAYvlF,EAAGwlF,UAAOp+E,KAAMoF,cAC/Do5E,gBACA8B,QAAQ,WAKd,SAASF,aACP,IACwB7nF,EAAG+nF,QADvBpC,QAAUrG,SAAMmG,eAChBhkF,EAAIkkF,QAAQx8E,OAEhB,IAAKnJ,EAAI,EAAGA,EAAIyB,IAAKzB,GACf+nF,QAAUP,SAAS7B,QAAQ3lF,GAAG4lF,eAChCO,UACA4B,QAAQ,SAKd,SAASD,aACP,IACwB9nF,EAAG+nF,QADvBpC,QAAUrG,SAAMmG,eAChBhkF,EAAIkkF,QAAQx8E,OAIhB,IAFIm+E,aAAae,aAAaf,aAC9BA,YAAc7xD,WAAW,WAAa6xD,YAAc,MAAS,KACxDtnF,EAAI,EAAGA,EAAIyB,IAAKzB,GACf+nF,QAAUP,SAAS7B,QAAQ3lF,GAAG4lF,eAChCK,gBACA8B,QAAQ,QAKd,SAASC,YAAYzpD,GAAIC,UAAW6/B,MAAOwC,KAAMpyD,MAC/C,IAA8BxM,EAAGs5D,GAAIC,GAAjCx5D,EAAIq8D,MAAM7/B,UAAWD,IACrB+pD,aAAenyD,UAAUsY,OAE7B,GAAK+xC,YAAY,IAAIkG,UAAUgB,KAAM,cAAezlF,EAAGs8B,GAAIqoD,OAAQ5kF,EAAE,GAAIA,EAAE,GAAI,EAAG,EAAGsmF,cAAe,WAClG,OAAuD,OAAlDhJ,SAAMqH,QAAU1kF,EAAI0kF,QAAQ33E,MAAM6xD,KAAMpyD,SAC7C8sD,GAAKt5D,EAAE2hC,EAAI5hC,EAAE,IAAM,EACnBw5D,GAAKv5D,EAAEgJ,EAAIjJ,EAAE,IAAM,GACZ,KAGT,OAAO,SAAS+lF,QAAQjlF,MACtB,IAAYrB,EAAR04E,GAAKn4E,EACT,OAAQc,MACN,IAAK,QAAS0kF,SAASjpD,IAAMwpD,QAAStmF,EAAImlF,SAAU,MACpD,IAAK,aAAcY,SAASjpD,MAAOqoD,OACnC,IAAK,OAAQ5kF,EAAIq8D,MAAM7/B,UAAWD,IAAK98B,EAAImlF,OAE7CpG,YAAY,IAAIkG,UAAUgB,KAAM5kF,KAAMb,EAAGs8B,GAAI98B,EAAGO,EAAE,GAAKu5D,GAAIv5D,EAAE,GAAKw5D,GAAIx5D,EAAE,GAAKm4E,GAAG,GAAIn4E,EAAE,GAAKm4E,GAAG,GAAImO,cAAeA,aAAat5E,MAAOs5E,cAAexlF,KAAM+9D,KAAMpyD,QA6BpK,OAzBAi5E,KAAKjtE,OAAS,SAASmN,GACrB,OAAO/a,UAAU1D,QAAUsR,OAAsB,mBAANmN,EAAmBA,EAAIq2B,uBAAWr2B,GAAI8/D,MAAQjtE,QAG3FitE,KAAKlpD,UAAY,SAAS5W,GACxB,OAAO/a,UAAU1D,QAAUq1B,UAAyB,mBAAN5W,EAAmBA,EAAIq2B,qBAASr2B,GAAI8/D,MAAQlpD,WAG5FkpD,KAAKf,QAAU,SAAS/+D,GACtB,OAAO/a,UAAU1D,QAAUw9E,QAAuB,mBAAN/+D,EAAmBA,EAAIq2B,qBAASr2B,GAAI8/D,MAAQf,SAG1Fe,KAAKH,UAAY,SAAS3/D,GACxB,OAAO/a,UAAU1D,QAAUo+E,UAAyB,mBAAN3/D,EAAmBA,EAAIq2B,uBAAWr2B,GAAI8/D,MAAQH,WAG9FG,KAAKvU,GAAK,WACR,IAAIlyE,MAAQk1B,UAAUg9C,GAAGnkE,MAAMmnB,UAAWtpB,WAC1C,OAAO5L,QAAUk1B,UAAYuxD,KAAOzmF,OAGtCymF,KAAKa,cAAgB,SAAS3gE,GAC5B,OAAO/a,UAAU1D,QAAUs+E,gBAAkB7/D,GAAKA,GAAKA,EAAG8/D,MAAQp8E,KAAKkQ,KAAKisE,iBAGvEC,mSCrKT,IAIIc,SACAC,SALAC,YAAQ,EACRC,QAAU,EACVthC,eAAW,EACXuhC,UAAY,IAGZC,UAAY,EACZC,SAAW,EACXC,UAAY,EACZC,MAA+B,YAAvB,oBAAOC,YAAP,YAAAC,aAAOD,eAA4BA,YAAYE,IAAMF,YAAc5hF,KAC3E+hF,SAA6B,YAAlB,oBAAOxpF,OAAP,YAAAspF,aAAOtpF,UAAuBA,OAAOw1B,sBAAwBx1B,OAAOw1B,sBAAsB5zB,KAAK5B,QAAU,SAASoiB,GAAKyT,WAAWzT,EAAG,KAE7I,SAASmnE,MACd,OAAOL,WAAaM,SAASC,UAAWP,SAAWE,MAAMG,MAAQJ,WAGnE,SAASM,WACPP,SAAW,EAGN,SAASQ,QACd7hF,KAAK8hF,MACL9hF,KAAK+hF,MACL/hF,KAAKg2E,MAAQ,KA0BR,SAASgM,YAAM31E,SAAU41E,MAAOt4B,MACrC,IAAIlwD,EAAI,IAAIooF,MAEZ,OADApoF,EAAEyoF,QAAQ71E,SAAU41E,MAAOt4B,MACpBlwD,EAcT,SAAS0oF,OACPd,UAAYD,UAAYG,MAAMG,OAASJ,UACvCL,YAAQC,QAAU,EAClB,KAdK,SAASkB,aACdV,QACET,YAEF,IADA,IAAkBxmF,EAAdhB,EAAIsnF,SACDtnF,IACAgB,EAAI4mF,SAAW5nF,EAAEsoF,QAAU,GAAGtoF,EAAEqoF,MAAMppF,KAAK,KAAM+B,GACtDhB,EAAIA,EAAEu8E,QAENiL,YAOAmB,GADF,QAGEnB,YAAQ,EAWZ,SAASoB,MACP,IAAInuC,GAAmBE,GAAfD,GAAK4sC,SAAcp3B,KAAOzK,IAClC,KAAO/K,IACDA,GAAG2tC,OACDn4B,KAAOxV,GAAG4tC,QAAOp4B,KAAOxV,GAAG4tC,OAC/B7tC,GAAKC,GAAIA,GAAKA,GAAG6hC,QAEjB5hC,GAAKD,GAAG6hC,MAAO7hC,GAAG6hC,MAAQ,KAC1B7hC,GAAKD,GAAKA,GAAG8hC,MAAQ5hC,GAAK2sC,SAAW3sC,IAGzC4sC,SAAW9sC,GACXouC,MAAM34B,MAtBJ04B,GACAhB,SAAW,GAIf,SAASkB,OACP,IAAIb,IAAMH,MAAMG,MAAOO,MAAQP,IAAMN,UACjCa,MAAQd,YAAWG,WAAaW,MAAOb,UAAYM,KAkBzD,SAASY,MAAM34B,MACTs3B,cACAC,UAASA,QAAUN,aAAaM,UACxBv3B,KAAO03B,SACP,IACN13B,KAAOzK,MAAUgiC,QAAUlzD,WAAWm0D,KAAMx4B,KAAO43B,MAAMG,MAAQJ,YACjE1hC,iBAAUA,eAAW4iC,cAAc5iC,mBAElCA,iBAAUwhC,UAAYG,MAAMG,MAAO9hC,eAAW6iC,YAAYF,KAAMpB,YACrEF,YAAQ,EAAGU,SAASQ,QAjFxBN,MAAMxnF,UAAY2nF,YAAM3nF,WACtB2qB,YAAa68D,MACbK,QAAS,SAAAA,QAAS71E,SAAU41E,MAAOt4B,MACjC,GAAwB,mBAAbt9C,SAAyB,MAAM,IAAIiI,UAAU,8BACxDq1C,MAAgB,MAARA,KAAe+3B,OAAS/3B,OAAkB,MAATs4B,MAAgB,GAAKA,OACzDjiF,KAAKg2E,OAASgL,WAAahhF,OAC1BghF,SAAUA,SAAShL,MAAQh2E,KAC1B+gF,SAAW/gF,KAChBghF,SAAWhhF,MAEbA,KAAK8hF,MAAQz1E,SACbrM,KAAK+hF,MAAQp4B,KACb24B,SAEFj+C,KAAM,SAAAA,OACArkC,KAAK8hF,QACP9hF,KAAK8hF,MAAQ,KACb9hF,KAAK+hF,MAAQ7iC,IACbojC,WC1CS,IAAAI,YAAA,SAASr2E,SAAU41E,MAAOt4B,MACvC,IAAIlwD,EAAI,IAAIooF,MAMZ,OALAI,MAAiB,MAATA,MAAgB,GAAKA,MAC7BxoF,EAAEyoF,QAAQ,SAASS,SACjBlpF,EAAE4qC,OACFh4B,SAASs2E,QAAUV,QAClBA,MAAOt4B,MACHlwD,GCNLmpF,QAAU/F,aAAS,QAAS,MAAO,SAAU,aAC7CgG,cAEOC,QAAU,EACVC,UAAY,EACZC,SAAW,EACXC,QAAU,EACVC,QAAU,EACVC,OAAS,EACTC,MAAQ,EAEJC,oBAAA,SAASv0D,KAAMh2B,KAAMg+B,GAAI70B,MAAOg8C,MAAOqlC,QACpD,IAAIC,UAAYz0D,KAAK00D,aACrB,GAAKD,WACA,GAAIzsD,MAAMysD,UAAW,YADVz0D,KAAK00D,iBAmCvB,SAAS3pF,gBAAOi1B,KAAMgI,GAAI2sD,MACxB,IACIC,MADAH,UAAYz0D,KAAK00D,aAgBrB,SAASvlF,MAAM0kF,SACb,IAAIpqF,EAAGsiB,EAAG7gB,EAAGhB,EAGb,GAAIyqF,KAAKE,QAAUZ,UAAW,OAAO1+C,OAErC,IAAK9rC,KAAKgrF,UAER,IADAvqF,EAAIuqF,UAAUhrF,IACRO,OAAS2qF,KAAK3qF,KAApB,CAKA,GAAIE,EAAE2qF,QAAUV,QAAS,OAAO/B,YAAQjjF,OAGpCjF,EAAE2qF,QAAUT,SACdlqF,EAAE2qF,MAAQP,MACVpqF,EAAEgpF,MAAM39C,OACRrrC,EAAE0yE,GAAGhzE,KAAK,YAAao2B,KAAMA,KAAKmnD,SAAUj9E,EAAEiJ,MAAOjJ,EAAEilD,cAChDslC,UAAUhrF,KAITA,EAAIu+B,KACZ99B,EAAE2qF,MAAQP,MACVpqF,EAAEgpF,MAAM39C,OACRrrC,EAAE0yE,GAAGhzE,KAAK,SAAUo2B,KAAMA,KAAKmnD,SAAUj9E,EAAEiJ,MAAOjJ,EAAEilD,cAC7CslC,UAAUhrF,IAoBrB,GAZA2oF,YAAQ,WACFuC,KAAKE,QAAUV,UACjBQ,KAAKE,MAAQT,QACbO,KAAKzB,MAAME,QAAQlxB,KAAMyyB,KAAKxB,MAAOwB,KAAK95B,MAC1CqH,KAAK2xB,YAMTc,KAAKE,MAAQX,SACbS,KAAK/X,GAAGhzE,KAAK,QAASo2B,KAAMA,KAAKmnD,SAAUwN,KAAKxhF,MAAOwhF,KAAKxlC,OACxDwlC,KAAKE,QAAUX,SAAnB,CAKA,IAJAS,KAAKE,MAAQV,QAGbS,MAAQ,IAAI76E,MAAM7O,EAAIypF,KAAKC,MAAMhiF,QAC5BnJ,EAAI,EAAGsiB,GAAK,EAAGtiB,EAAIyB,IAAKzB,GACvBS,EAAIyqF,KAAKC,MAAMnrF,GAAGiB,MAAMd,KAAKo2B,KAAMA,KAAKmnD,SAAUwN,KAAKxhF,MAAOwhF,KAAKxlC,UACrEylC,QAAQ7oE,GAAK7hB,GAGjB0qF,MAAMhiF,OAASmZ,EAAI,GAGrB,SAASm2C,KAAK2xB,SAKZ,IAJA,IAAIlpF,EAAIkpF,QAAUc,KAAKG,SAAWH,KAAKI,KAAKnrF,KAAK,KAAMiqF,QAAUc,KAAKG,WAAaH,KAAKzB,MAAME,QAAQ79C,MAAOo/C,KAAKE,MAAQR,OAAQ,GAC9H5qF,GAAK,EACLyB,EAAI0pF,MAAMhiF,SAELnJ,EAAIyB,GACX0pF,MAAMnrF,GAAGG,KAAKo2B,KAAMr1B,GAIlBgqF,KAAKE,QAAUR,SACjBM,KAAK/X,GAAGhzE,KAAK,MAAOo2B,KAAMA,KAAKmnD,SAAUwN,KAAKxhF,MAAOwhF,KAAKxlC,OAC1D5Z,QAIJ,SAASA,OAIP,IAAK,IAAI9rC,KAHTkrF,KAAKE,MAAQP,MACbK,KAAKzB,MAAM39C,cACJk/C,UAAUzsD,IACHysD,UAAW,cAClBz0D,KAAK00D,aA7FdD,UAAUzsD,IAAM2sD,KAChBA,KAAKzB,MAAQA,YAEb,SAAS8B,SAASnB,SAChBc,KAAKE,MAAQZ,UACbU,KAAKzB,MAAME,QAAQjkF,MAAOwlF,KAAKxB,MAAOwB,KAAK95B,MAGvC85B,KAAKxB,OAASU,SAAS1kF,MAAM0kF,QAAUc,KAAKxB,QAPrB,EAAGwB,KAAK95B,MAxCrC9vD,CAAOi1B,KAAMgI,IACXh+B,KAAMA,KACNmJ,MAAOA,MACPg8C,MAAOA,MACPytB,GAAIkX,QACJc,MAAOb,WACPl5B,KAAM25B,OAAO35B,KACbs4B,MAAOqB,OAAOrB,MACd2B,SAAUN,OAAOM,SACjBC,KAAMP,OAAOO,KACb7B,MAAO,KACP2B,MAAOb,WAIJ,SAAS1sD,KAAKtH,KAAMgI,IACzB,IAAIgtD,SAAW1qF,aAAI01B,KAAMgI,IACzB,GAAIgtD,SAASH,MAAQb,QAAS,MAAM,IAAI7zE,MAAM,+BAC9C,OAAO60E,SAGF,SAASryE,aAAIqd,KAAMgI,IACxB,IAAIgtD,SAAW1qF,aAAI01B,KAAMgI,IACzB,GAAIgtD,SAASH,MAAQV,QAAS,MAAM,IAAIh0E,MAAM,6BAC9C,OAAO60E,SAGF,SAAS1qF,aAAI01B,KAAMgI,IACxB,IAAIgtD,SAAWh1D,KAAK00D,aACpB,IAAKM,YAAcA,SAAWA,SAAShtD,KAAM,MAAM,IAAI7nB,MAAM,wBAC7D,OAAO60E,SCqBF,SAASC,WAAWvyB,WAAY14D,KAAMU,OAC3C,IAAIs9B,GAAK06B,WAAWwyB,IAOpB,OALAxyB,WAAWjsB,KAAK,WACd,IAAIu+C,SAAWryE,aAAIzR,KAAM82B,KACxBgtD,SAAStqF,QAAUsqF,SAAStqF,WAAaV,MAAQU,MAAM+N,MAAMvH,KAAMoF,aAG/D,SAAS0pB,MACd,OAAO11B,aAAI01B,KAAMgI,IAAIt9B,MAAMV,OC3EhB,IAAAmrF,uBAAA,SAAStpF,EAAGyI,GACzB,IAAIxK,EACJ,OAAqB,iBAANwK,EAAiB4qE,WAC1B5qE,aAAaovC,YAAQ0xC,SACpBtrF,EAAI45C,YAAMpvC,KAAOA,EAAIxK,EAAGsrF,SACzBC,YAAmBxpF,EAAGyI,ICAf,ICNX2iE,+BAAYjV,cAAUz2D,UAAU2qB,YCiBpC,SAASy2D,kBAAY3iF,MACnB,OAAO,WACLkH,KAAK+3B,MAAM2jD,eAAe5iF,OCNf,ICKXg+B,cAAK,EAEF,SAASstD,WAAW5K,OAAQC,QAAS3gF,KAAMg+B,IAChD92B,KAAK05E,QAAUF,OACfx5E,KAAK25E,SAAWF,QAChBz5E,KAAKqkF,MAAQvrF,KACbkH,KAAKgkF,IAAMltD,GAON,SAASwtD,QACd,QAASxtD,cAGX,IAAIytD,oBAAsBzzB,cAAUz2D,UAEpC+pF,WAAW/pF,UAVI,SAASm3D,0BAAW14D,MACjC,OAAOg4D,gBAAYU,WAAW14D,OASEuB,WAChC2qB,YAAao/D,WACbtmE,OCrCa,SAASA,QACtB,IAAIhlB,KAAOkH,KAAKqkF,MACZvtD,GAAK92B,KAAKgkF,IAEQ,mBAAXlmE,SAAuBA,OAAS03D,aAAS13D,SAEpD,IAAK,IAAI07D,OAASx5E,KAAK05E,QAAS/gF,EAAI6gF,OAAO93E,OAAQk4E,UAAY,IAAI/wE,MAAMlQ,GAAIkiB,EAAI,EAAGA,EAAIliB,IAAKkiB,EAC3F,IAAK,IAAiFiU,KAAM+qD,QAAnF57B,MAAQu7B,OAAO3+D,GAAI7gB,EAAIikD,MAAMv8C,OAAQo4E,SAAWF,UAAU/+D,GAAK,IAAIhS,MAAM7O,GAAmBzB,EAAI,EAAGA,EAAIyB,IAAKzB,GAC9Gu2B,KAAOmvB,MAAM1lD,MAAQshF,QAAU/7D,OAAOplB,KAAKo2B,KAAMA,KAAKmnD,SAAU19E,EAAG0lD,UAClE,aAAcnvB,OAAM+qD,QAAQ5D,SAAWnnD,KAAKmnD,UAChD6D,SAASvhF,GAAKshF,QACdiK,oBAAShK,SAASvhF,GAAIO,KAAMg+B,GAAIv+B,EAAGuhF,SAAU1gF,aAAI01B,KAAMgI,MAK7D,OAAO,IAAIstD,WAAWxK,UAAW55E,KAAK25E,SAAU7gF,KAAMg+B,KDsBtDi6B,UEtCa,SAASjzC,QACtB,IAAIhlB,KAAOkH,KAAKqkF,MACZvtD,GAAK92B,KAAKgkF,IAEQ,mBAAXlmE,SAAuBA,OAAS43D,YAAY53D,SAEvD,IAAK,IAAI07D,OAASx5E,KAAK05E,QAAS/gF,EAAI6gF,OAAO93E,OAAQk4E,aAAgBH,WAAc5+D,EAAI,EAAGA,EAAIliB,IAAKkiB,EAC/F,IAAK,IAAyCiU,KAArCmvB,MAAQu7B,OAAO3+D,GAAI7gB,EAAIikD,MAAMv8C,OAAcnJ,EAAI,EAAGA,EAAIyB,IAAKzB,EAClE,GAAIu2B,KAAOmvB,MAAM1lD,GAAI,CACnB,IAAK,IAA2DioB,MAAvDuV,SAAWjY,OAAOplB,KAAKo2B,KAAMA,KAAKmnD,SAAU19E,EAAG0lD,OAAeumC,QAAUprF,aAAI01B,KAAMgI,IAAK4P,EAAI,EAAGluC,EAAIu9B,SAASr0B,OAAQglC,EAAIluC,IAAKkuC,GAC/HlmB,MAAQuV,SAAS2Q,KACnBo9C,oBAAStjE,MAAO1nB,KAAMg+B,GAAI4P,EAAG3Q,SAAUyuD,SAG3C5K,UAAU1zE,KAAK6vB,UACf0jD,QAAQvzE,KAAK4oB,MAKnB,OAAO,IAAIs1D,WAAWxK,UAAWH,QAAS3gF,KAAMg+B,KFmBhD9jB,OGxCa,SAAS3K,OACD,mBAAVA,QAAsBA,MAAQutE,QAAQvtE,QAEjD,IAAK,IAAImxE,OAASx5E,KAAK05E,QAAS/gF,EAAI6gF,OAAO93E,OAAQk4E,UAAY,IAAI/wE,MAAMlQ,GAAIkiB,EAAI,EAAGA,EAAIliB,IAAKkiB,EAC3F,IAAK,IAAuEiU,KAAnEmvB,MAAQu7B,OAAO3+D,GAAI7gB,EAAIikD,MAAMv8C,OAAQo4E,SAAWF,UAAU/+D,MAAetiB,EAAI,EAAGA,EAAIyB,IAAKzB,GAC3Fu2B,KAAOmvB,MAAM1lD,KAAO8P,MAAM3P,KAAKo2B,KAAMA,KAAKmnD,SAAU19E,EAAG0lD,QAC1D67B,SAAS5zE,KAAK4oB,MAKpB,OAAO,IAAIs1D,WAAWxK,UAAW55E,KAAK25E,SAAU35E,KAAKqkF,MAAOrkF,KAAKgkF,MH8BjEn6E,MI1Ca,SAAS2nD,YACtB,GAAIA,WAAWwyB,MAAQhkF,KAAKgkF,IAAK,MAAM,IAAI/0E,MAE3C,IAAK,IAAIqrE,QAAUt6E,KAAK05E,QAASa,QAAU/oB,WAAWkoB,QAASc,GAAKF,QAAQ54E,OAAQ6xC,GAAKgnC,QAAQ74E,OAAQ/I,EAAIkL,KAAK2P,IAAIgnE,GAAIjnC,IAAKknC,OAAS,IAAI5xE,MAAM2xE,IAAK3/D,EAAI,EAAGA,EAAIliB,IAAKkiB,EACrK,IAAK,IAAmGiU,KAA/F4rD,OAASJ,QAAQz/D,GAAI8/D,OAASJ,QAAQ1/D,GAAI7gB,EAAI0gF,OAAOh5E,OAAQmI,MAAQ4wE,OAAO5/D,GAAK,IAAIhS,MAAM7O,GAAUzB,EAAI,EAAGA,EAAIyB,IAAKzB,GACxHu2B,KAAO4rD,OAAOniF,IAAMoiF,OAAOpiF,MAC7BsR,MAAMtR,GAAKu2B,MAKjB,KAAOjU,EAAI2/D,KAAM3/D,EACf4/D,OAAO5/D,GAAKy/D,QAAQz/D,GAGtB,OAAO,IAAIupE,WAAW3J,OAAQz6E,KAAK25E,SAAU35E,KAAKqkF,MAAOrkF,KAAKgkF,MJ4B9DlzB,UHzCa,WACb,OAAO,IAAIiV,+BAAU/lE,KAAK05E,QAAS15E,KAAK25E,WGyCxCnoB,WK3Ca,WAKb,IAJA,IAAI14D,KAAOkH,KAAKqkF,MACZI,IAAMzkF,KAAKgkF,IACXU,IAAMJ,QAED9K,OAASx5E,KAAK05E,QAAS/gF,EAAI6gF,OAAO93E,OAAQmZ,EAAI,EAAGA,EAAIliB,IAAKkiB,EACjE,IAAK,IAAyCiU,KAArCmvB,MAAQu7B,OAAO3+D,GAAI7gB,EAAIikD,MAAMv8C,OAAcnJ,EAAI,EAAGA,EAAIyB,IAAKzB,EAClE,GAAIu2B,KAAOmvB,MAAM1lD,GAAI,CACnB,IAAIisF,QAAUprF,aAAI01B,KAAM21D,KACxBX,oBAASh1D,KAAMh2B,KAAM4rF,IAAKnsF,EAAG0lD,OAC3B0L,KAAM66B,QAAQ76B,KAAO66B,QAAQvC,MAAQuC,QAAQZ,SAC7C3B,MAAO,EACP2B,SAAUY,QAAQZ,SAClBC,KAAMW,QAAQX,OAMtB,OAAO,IAAIO,WAAW5K,OAAQx5E,KAAK25E,SAAU7gF,KAAM4rF,MLyBnDhsF,KAAM6rF,oBAAoB7rF,KAC1By4B,MAAOozD,oBAAoBpzD,MAC3BrC,KAAMy1D,oBAAoBz1D,KAC1B4J,KAAM6rD,oBAAoB7rD,KAC1BgN,MAAO6+C,oBAAoB7+C,MAC3BH,KAAMg/C,oBAAoBh/C,KAC1BmmC,GM5Ba,SAAS5yE,KAAMw2E,UAC5B,IAAIx4C,GAAK92B,KAAKgkF,IAEd,OAAO5+E,UAAU1D,OAAS,EACpBtI,aAAI4G,KAAK8uB,OAAQgI,IAAI40C,GAAGA,GAAG5yE,MAC3BkH,KAAKulC,KApBb,SAASo/C,WAAW7tD,GAAIh+B,KAAMw2E,UAC5B,IAAIsV,IAAKC,IAAKC,IAThB,SAAS7mF,SAAMnF,MACb,OAAQA,KAAO,IAAIqf,OAAO7L,MAAM,SAASoR,MAAM,SAASjkB,GACtD,IAAIlB,EAAIkB,EAAEwM,QAAQ,KAElB,OADI1N,GAAK,IAAGkB,EAAIA,EAAEqhB,MAAM,EAAGviB,KACnBkB,GAAW,UAANA,IAKKwE,CAAMnF,MAAQs9B,KAAO3kB,aACzC,OAAO,WACL,IAAIqyE,SAAWgB,IAAI9kF,KAAM82B,IACrB40C,GAAKoY,SAASpY,GAKdA,KAAOkZ,MAAMC,KAAOD,IAAMlZ,IAAI1kC,QAAQ0kC,GAAG5yE,KAAMw2E,UAEnDwU,SAASpY,GAAKmZ,KASAF,CAAW7tD,GAAIh+B,KAAMw2E,YNwBrCje,KOiBa,SAASv4D,KAAMU,OAC5B,IAAIy7E,SAAW9J,cAAUryE,MAAOP,EAAiB,cAAb08E,SAA2B97B,wBAAuB6B,uBACtF,OAAOh7C,KAAK+kF,UAAUjsF,KAAuB,mBAAVU,OAC5By7E,SAAS/F,MAlBlB,SAASkM,oBAAenG,SAAUj6B,YAAaxhD,OAC7C,IAAIwrF,SACAC,SACAC,aACJ,OAAO,WACL,IAAIC,QAA+BC,QAAtBC,OAAS7rF,MAAMwG,MAC5B,GAAc,MAAVqlF,OAGJ,OAFAF,QAAUnlF,KAAK+6E,eAAe9F,SAASF,MAAOE,SAAS/F,WACvDkW,QAAUC,OAAS,IACU,KACvBF,UAAYH,UAAYI,UAAYH,SAAWC,cAC9CD,SAAWG,QAASF,aAAelqC,YAAYgqC,SAAWG,QAASE,SAL1CrlF,KAAKi7E,kBAAkBhG,SAASF,MAAOE,SAAS/F,SArBpF,SAASmM,kBAAaviF,KAAMkiD,YAAaxhD,OACvC,IAAIwrF,SACAC,SACAC,aACJ,OAAO,WACL,IAAIC,QAA+BC,QAAtBC,OAAS7rF,MAAMwG,MAC5B,GAAc,MAAVqlF,OAGJ,OAFAF,QAAUnlF,KAAKyxD,aAAa34D,UAC5BssF,QAAUC,OAAS,IACU,KACvBF,UAAYH,UAAYI,UAAYH,SAAWC,cAC9CD,SAAWG,QAASF,aAAelqC,YAAYgqC,SAAWG,QAASE,SAL1CrlF,KAAKm7E,gBAAgBriF,SA2BAm8E,SAAU18E,EAAGwrF,WAAW/jF,KAAM,QAAUlH,KAAMU,QACtF,MAATA,OAAiBy7E,SAAS/F,MAhElC,SAAS8L,kBAAa/F,UACpB,OAAO,WACLj1E,KAAKi7E,kBAAkBhG,SAASF,MAAOE,SAAS/F,SARpD,SAASgM,gBAAWpiF,MAClB,OAAO,WACLkH,KAAKm7E,gBAAgBriF,SAoE4Cm8E,WAC5DA,SAAS/F,MA/ClB,SAASoM,oBAAerG,SAAUj6B,YAAaqqC,QAC7C,IAAIL,SAEAE,aADAE,QAAUC,OAAS,GAEvB,OAAO,WACL,IAAIF,QAAUnlF,KAAK+6E,eAAe9F,SAASF,MAAOE,SAAS/F,OAC3D,OAAOiW,UAAYC,QAAU,KACvBD,UAAYH,SAAWE,aACvBA,aAAelqC,YAAYgqC,SAAWG,QAASE,UApBzD,SAAS9J,kBAAaziF,KAAMkiD,YAAaqqC,QACvC,IAAIL,SAEAE,aADAE,QAAUC,OAAS,GAEvB,OAAO,WACL,IAAIF,QAAUnlF,KAAKyxD,aAAa34D,MAChC,OAAOqsF,UAAYC,QAAU,KACvBD,UAAYH,SAAWE,aACvBA,aAAelqC,YAAYgqC,SAAWG,QAASE,WAmDApQ,SAAU18E,EAAGiB,SPrBpEurF,UQnBa,SAASjsF,KAAMU,OAC5B,IAAIM,IAAM,QAAUhB,KACpB,GAAIsM,UAAU1D,OAAS,EAAG,OAAQ5H,IAAMkG,KAAK0jF,MAAM5pF,OAASA,IAAIoS,OAChE,GAAa,MAAT1S,MAAe,OAAOwG,KAAK0jF,MAAM5pF,IAAK,MAC1C,GAAqB,mBAAVN,MAAsB,MAAM,IAAIyV,MAC3C,IAAIgmE,SAAW9J,cAAUryE,MACzB,OAAOkH,KAAK0jF,MAAM5pF,KAAMm7E,SAAS/F,MA5BnC,SAASoW,YAAYrQ,SAAUz7E,OAC7B,IAAI06C,GAAI7O,GACR,SAASq+C,QACP,IAAInrF,EAAIiB,MAAM+N,MAAMvH,KAAMoF,WAE1B,OADI7M,IAAM8sC,KAAI6O,IAAM7O,GAAK9sC,IAV7B,SAASgtF,kBAAkBtQ,SAAU18E,GACnC,OAAO,SAASkB,GACduG,KAAK8iC,eAAemyC,SAASF,MAAOE,SAAS/F,MAAO32E,EAAEkB,KAQvB8rF,CAAkBtQ,SAAU18E,IACpD27C,GAGT,OADAwvC,MAAMx3E,OAAS1S,MACRkqF,OAGT,SAASqB,UAAUjsF,KAAMU,OACvB,IAAI06C,GAAI7O,GACR,SAASq+C,QACP,IAAInrF,EAAIiB,MAAM+N,MAAMvH,KAAMoF,WAE1B,OADI7M,IAAM8sC,KAAI6O,IAAM7O,GAAK9sC,IA3B7B,SAASitF,gBAAgB1sF,KAAMP,GAC7B,OAAO,SAASkB,GACduG,KAAK+hC,aAAajpC,KAAMP,EAAEkB,KAyBK+rF,CAAgB1sF,KAAMP,IAC9C27C,GAGT,OADAwvC,MAAMx3E,OAAS1S,MACRkqF,QAS2DzO,SAAUz7E,SRc5Eu+B,MFYa,SAASj/B,KAAMU,MAAOgiF,UACnC,IAAIjjF,EAAqB,cAAhBO,MAAQ,IAAsBqgD,wBAAuB6B,uBAC9D,OAAgB,MAATxhD,MAAgBwG,KAClBylF,WAAW3sF,KAjElB,SAAS4sF,UAAU5sF,KAAMkiD,aACvB,IAAIgqC,SACAC,SACAC,aACJ,OAAO,WACL,IAAIC,QAAUptD,WAAM/3B,KAAMlH,MACtBssF,SAAWplF,KAAK+3B,MAAM2jD,eAAe5iF,MAAOi/B,WAAM/3B,KAAMlH,OAC5D,OAAOqsF,UAAYC,QAAU,KACvBD,UAAYH,UAAYI,UAAYH,SAAWC,aAC/CA,aAAelqC,YAAYgqC,SAAWG,QAASF,SAAWG,UAwD5CM,CAAU5sF,KAAMP,IACjCmzE,GAAG,aAAe5yE,KAAM2iF,kBAAY3iF,OACpB,mBAAVU,MAAuBwG,KAC7BylF,WAAW3sF,KArClB,SAAS6iF,oBAAc7iF,KAAMkiD,YAAaxhD,OACxC,IAAIwrF,SACAC,SACAC,aACJ,OAAO,WACL,IAAIC,QAAUptD,WAAM/3B,KAAMlH,MACtBusF,OAAS7rF,MAAMwG,MACfolF,QAAUC,OAAS,GAEvB,OADc,MAAVA,SAAoCrlF,KAAK+3B,MAAM2jD,eAAe5iF,MAA9CssF,QAAUC,OAA2CttD,WAAM/3B,KAAMlH,OAC9EqsF,UAAYC,QAAU,KACvBD,UAAYH,UAAYI,UAAYH,SAAWC,cAC9CD,SAAWG,QAASF,aAAelqC,YAAYgqC,SAAWG,QAASE,UA0BtD1J,CAAc7iF,KAAMP,EAAGwrF,WAAW/jF,KAAM,SAAWlH,KAAMU,SAC1E+rC,KAvBP,SAASogD,iBAAiB7uD,GAAIh+B,MAC5B,IAAI8rF,IAAKC,IAAKe,UAAwDpgD,OAA7C1rC,IAAM,SAAWhB,KAAM++E,MAAQ,OAAS/9E,IACjE,OAAO,WACL,IAAIgqF,SAAWryE,aAAIzR,KAAM82B,IACrB40C,GAAKoY,SAASpY,GACd4D,SAAkC,MAAvBwU,SAAStqF,MAAMM,KAAe0rC,SAAWA,OAASi2C,kBAAY3iF,YAASwU,EAKlFo+D,KAAOkZ,KAAOgB,YAActW,WAAWuV,KAAOD,IAAMlZ,IAAI1kC,QAAQ0kC,GAAGmM,MAAO+N,UAAYtW,UAE1FwU,SAASpY,GAAKmZ,KAWNc,CAAiB3lF,KAAKgkF,IAAKlrF,OACjCkH,KACCylF,WAAW3sF,KApDlB,SAAS+iF,oBAAc/iF,KAAMkiD,YAAaqqC,QACxC,IAAIL,SAEAE,aADAE,QAAUC,OAAS,GAEvB,OAAO,WACL,IAAIF,QAAUptD,WAAM/3B,KAAMlH,MAC1B,OAAOqsF,UAAYC,QAAU,KACvBD,UAAYH,SAAWE,aACvBA,aAAelqC,YAAYgqC,SAAWG,QAASE,SA4CjCxJ,CAAc/iF,KAAMP,EAAGiB,OAAQgiF,UAChD9P,GAAG,aAAe5yE,KAAM,OErB7B2sF,WSxCa,SAAS3sF,KAAMU,MAAOgiF,UACnC,IAAI1hF,IAAM,UAAYhB,MAAQ,IAC9B,GAAIsM,UAAU1D,OAAS,EAAG,OAAQ5H,IAAMkG,KAAK0jF,MAAM5pF,OAASA,IAAIoS,OAChE,GAAa,MAAT1S,MAAe,OAAOwG,KAAK0jF,MAAM5pF,IAAK,MAC1C,GAAqB,mBAAVN,MAAsB,MAAM,IAAIyV,MAC3C,OAAOjP,KAAK0jF,MAAM5pF,IAhBpB,SAAS2rF,WAAW3sF,KAAMU,MAAOgiF,UAC/B,IAAI/hF,EAAG4rC,GACP,SAASq+C,QACP,IAAInrF,EAAIiB,MAAM+N,MAAMvH,KAAMoF,WAE1B,OADI7M,IAAM8sC,KAAI5rC,GAAK4rC,GAAK9sC,IAV5B,SAASstF,iBAAiB/sF,KAAMP,EAAGijF,UACjC,OAAO,SAAS/hF,GACduG,KAAK+3B,MAAM6jD,YAAY9iF,KAAMP,EAAEkB,GAAI+hF,WAQLqK,CAAiB/sF,KAAMP,EAAGijF,WACjD/hF,EAGT,OADAiqF,MAAMx3E,OAAS1S,MACRkqF,MAQgB+B,CAAW3sF,KAAMU,MAAmB,MAAZgiF,SAAmB,GAAKA,YToCvEn7E,KD3Ca,SAAS7G,OACtB,OAAOwG,KAAK0jF,MAAM,OAAyB,mBAAVlqF,MARnC,SAAS6iF,kBAAa7iF,OACpB,OAAO,WACL,IAAI6rF,OAAS7rF,MAAMwG,MACnBA,KAAKo6B,YAAwB,MAAVirD,OAAiB,GAAKA,QAMrChJ,CAAa0H,WAAW/jF,KAAM,OAAQxG,QAf9C,SAAS8iF,kBAAa9iF,OACpB,OAAO,WACLwG,KAAKo6B,YAAc5gC,OAcf8iF,CAAsB,MAAT9iF,MAAgB,GAAKA,MAAQ,MCyChDgsC,OJnDa,WACb,OAAOxlC,KAAK0rE,GAAG,aATjB,SAASoa,eAAehvD,IACtB,OAAO,WACL,IAAIrR,OAASzlB,KAAKu/B,WAClB,IAAK,IAAIhnC,KAAKyH,KAAKwjF,aAAc,IAAKjrF,IAAMu+B,GAAI,OAC5CrR,QAAQA,OAAOH,YAAYtlB,OAKJ8lF,CAAe9lF,KAAKgkF,OImDjDN,MNTa,SAAS5qF,KAAMU,OAC5B,IAAIs9B,GAAK92B,KAAKgkF,IAId,GAFAlrF,MAAQ,GAEJsM,UAAU1D,OAAS,EAAG,CAExB,IADA,IACkCjI,EAD9BiqF,MAAQtqF,aAAI4G,KAAK8uB,OAAQgI,IAAI4sD,MACxBnrF,EAAI,EAAGyB,EAAI0pF,MAAMhiF,OAAWnJ,EAAIyB,IAAKzB,EAC5C,IAAKkB,EAAIiqF,MAAMnrF,IAAIO,OAASA,KAC1B,OAAOW,EAAED,MAGb,OAAO,KAGT,OAAOwG,KAAKulC,MAAe,MAAT/rC,MAhEpB,SAASusF,YAAYjvD,GAAIh+B,MACvB,IAAIktF,OAAQC,OACZ,OAAO,WACL,IAAInC,SAAWryE,aAAIzR,KAAM82B,IACrB4sD,MAAQI,SAASJ,MAKrB,GAAIA,QAAUsC,OAEZ,IAAK,IAAIztF,EAAI,EAAGyB,GADhBisF,OAASD,OAAStC,OACShiF,OAAQnJ,EAAIyB,IAAKzB,EAC1C,GAAI0tF,OAAO1tF,GAAGO,OAASA,KAAM,EAC3BmtF,OAASA,OAAOnrE,SACTxT,OAAO/O,EAAG,GACjB,MAKNurF,SAASJ,MAAQuC,SAIrB,SAASC,cAAcpvD,GAAIh+B,KAAMU,OAC/B,IAAIwsF,OAAQC,OACZ,GAAqB,mBAAVzsF,MAAsB,MAAM,IAAIyV,MAC3C,OAAO,WACL,IAAI60E,SAAWryE,aAAIzR,KAAM82B,IACrB4sD,MAAQI,SAASJ,MAKrB,GAAIA,QAAUsC,OAAQ,CACpBC,QAAUD,OAAStC,OAAO5oE,QAC1B,IAAK,IAAIrhB,GAAKX,KAAMA,KAAMU,MAAOA,OAAQjB,EAAI,EAAGyB,EAAIisF,OAAOvkF,OAAQnJ,EAAIyB,IAAKzB,EAC1E,GAAI0tF,OAAO1tF,GAAGO,OAASA,KAAM,CAC3BmtF,OAAO1tF,GAAKkB,EACZ,MAGAlB,IAAMyB,GAAGisF,OAAO//E,KAAKzM,GAG3BqqF,SAASJ,MAAQuC,UAmB4CnvD,GAAIh+B,KAAMU,SMLzEyoF,MU/Ca,SAASzoF,OACtB,IAAIs9B,GAAK92B,KAAKgkF,IAEd,OAAO5+E,UAAU1D,OACX1B,KAAKulC,MAAuB,mBAAV/rC,MAhB1B,SAAS2sF,cAAcrvD,GAAIt9B,OACzB,OAAO,WACL48B,KAAKp2B,KAAM82B,IAAImrD,OAASzoF,MAAM+N,MAAMvH,KAAMoF,aAI9C,SAASghF,cAActvD,GAAIt9B,OACzB,OAAOA,OAASA,MAAO,WACrB48B,KAAKp2B,KAAM82B,IAAImrD,MAAQzoF,SAUAs9B,GAAIt9B,QACvBJ,aAAI4G,KAAK8uB,OAAQgI,IAAImrD,OVyC3B2B,SWhDa,SAASpqF,OACtB,IAAIs9B,GAAK92B,KAAKgkF,IAEd,OAAO5+E,UAAU1D,OACX1B,KAAKulC,MAAuB,mBAAV/rC,MAhB1B,SAAS6sF,iBAAiBvvD,GAAIt9B,OAC5B,OAAO,WACLiY,aAAIzR,KAAM82B,IAAI8sD,UAAYpqF,MAAM+N,MAAMvH,KAAMoF,aAIhD,SAASkhF,iBAAiBxvD,GAAIt9B,OAC5B,OAAOA,OAASA,MAAO,WACrBiY,aAAIzR,KAAM82B,IAAI8sD,SAAWpqF,SAUCs9B,GAAIt9B,QAC1BJ,aAAI4G,KAAK8uB,OAAQgI,IAAI8sD,UX0C3BC,KYtDa,SAASrqF,OACtB,IAAIs9B,GAAK92B,KAAKgkF,IAEd,OAAO5+E,UAAU1D,OACX1B,KAAKulC,KAXb,SAASghD,aAAazvD,GAAIt9B,OACxB,GAAqB,mBAAVA,MAAsB,MAAM,IAAIyV,MAC3C,OAAO,WACLwC,aAAIzR,KAAM82B,IAAI+sD,KAAOrqF,OAQP+sF,CAAazvD,GAAIt9B,QAC3BJ,aAAI4G,KAAK8uB,OAAQgI,IAAI+sD,MZkD3Bp3E,Ia9Da,WACb,IAAIm4E,IAAKC,IAAKzrB,KAAOp5D,KAAM82B,GAAKsiC,KAAK4qB,IAAKtrD,KAAO0gC,KAAK1gC,OACtD,OAAO,IAAI8tD,QAAQ,SAASn+D,QAASo+D,QACnC,IAAIC,QAAUltF,MAAOitF,QACjBh6E,KAAOjT,MAAO,SAAAA,QAA4B,KAATk/B,MAAYrQ,YAEjD+wC,KAAK7zB,KAAK,WACR,IAAIu+C,SAAWryE,aAAIzR,KAAM82B,IACrB40C,GAAKoY,SAASpY,GAKdA,KAAOkZ,OACTC,KAAOD,IAAMlZ,IAAI1kC,QACb7mB,EAAEumE,OAAOxgF,KAAKwgF,QAClB7B,IAAI1kE,EAAEwmE,UAAUzgF,KAAKwgF,QACrB7B,IAAI1kE,EAAE1T,IAAIvG,KAAKuG,MAGjBq3E,SAASpY,GAAKmZ,UCjBpB,IAAI+B,eACFj9B,KAAM,KACNs4B,MAAO,EACP2B,SAAU,IACVC,KAAMgD,YAGR,SAASrC,mBAAQ11D,KAAMgI,IAErB,IADA,IAAIwsD,SACKA,OAASx0D,KAAK00D,iBAAmBF,OAASA,OAAOxsD,MACxD,KAAMhI,KAAOA,KAAKyQ,YAChB,OAAOqnD,cAAcj9B,KAAO+3B,MAAOkF,cAGvC,OAAOtD,OCfTxyB,cAAUz2D,UAAUssF,UCFL,SAAS7tF,MACtB,OAAOkH,KAAKulC,KAAK,YCDJ,SAASzW,KAAMh2B,MAC5B,IACIgrF,SACA3E,OAEA5mF,EAJAgrF,UAAYz0D,KAAK00D,aAGjB99C,OAAQ,EAGZ,GAAK69C,UAAL,CAIA,IAAKhrF,KAFLO,KAAe,MAARA,KAAe,KAAOA,KAAO,GAE1ByqF,WACHO,SAAWP,UAAUhrF,IAAIO,OAASA,MACvCqmF,OAAS2E,SAASH,MAAQX,UAAYc,SAASH,MAAQR,OACvDW,SAASH,MAAQP,MACjBU,SAAS9B,MAAM39C,OACfy/C,SAASpY,GAAGhzE,KAAKymF,OAAS,YAAc,SAAUrwD,KAAMA,KAAKmnD,SAAU6N,SAAS7hF,MAAO6hF,SAAS7lC,cACzFslC,UAAUhrF,IAL8BmtC,OAAQ,EAQrDA,cAAc5W,KAAK00D,cDlBrBmD,CAAU3mF,KAAMlH,SDCpBg4D,cAAUz2D,UAAUm3D,WDiBL,SAAS14D,MACtB,IAAIg+B,GACAwsD,OAEAxqF,gBAAgBsrF,YAClBttD,GAAKh+B,KAAKkrF,IAAKlrF,KAAOA,KAAKurF,QAE3BvtD,GAAKwtD,SAAUhB,OAASsD,eAAej9B,KAAO+3B,MAAO5oF,KAAe,MAARA,KAAe,KAAOA,KAAO,IAG3F,IAAK,IAAI0gF,OAASx5E,KAAK05E,QAAS/gF,EAAI6gF,OAAO93E,OAAQmZ,EAAI,EAAGA,EAAIliB,IAAKkiB,EACjE,IAAK,IAAyCiU,KAArCmvB,MAAQu7B,OAAO3+D,GAAI7gB,EAAIikD,MAAMv8C,OAAcnJ,EAAI,EAAGA,EAAIyB,IAAKzB,GAC9Du2B,KAAOmvB,MAAM1lD,KACfurF,oBAASh1D,KAAMh2B,KAAMg+B,GAAIv+B,EAAG0lD,MAAOqlC,QAAUkB,mBAAQ11D,KAAMgI,KAKjE,OAAO,IAAIstD,WAAW5K,OAAQx5E,KAAK25E,SAAU7gF,KAAMg+B,oTI7BrD,IAAMgwD,6BAAgB,SAAhBA,cAAgBC,SAAO,OAAIjpE,WAAOipE,UAUlCC,YAAc,SAAdA,YAAevhE,OAAQwhE,SAAUl8E,KAAMyqE,UAAoC,IAA1B0R,UAA0B9hF,UAAA1D,OAAA,QAAA4L,IAAAlI,UAAA,GAAAA,UAAA,MAAV+hF,MAAU/hF,UAAA1D,OAAA,EAAA0D,UAAA,QAAAkI,GACxEmY,kBAAkByhD,aAAezhD,kBAAkB2hE,cACpD3hE,OAASqhE,6BAAcrhE,SAG3B,IAMIzS,OANEq0E,YAAc7R,SAAWA,SAAS,GAAK,KACzC8R,aAAe,KACfC,eAAiB,KACjBR,QAAU,KACVS,SAAW,KACXC,SAAW,KAEXJ,YACoB,MAAhBA,aACAC,aAAe,KACfC,eAAiB/R,WAEjB8R,aAAe,QACfC,eAAiC,MAAhB/R,SAAS,GAAaA,SAAtB,IAAAn6D,OAAqCm6D,YAG1D+R,eAAiBN,SACjBj0E,QAAS,GAEb+zE,QAAUthE,OAAOsrC,UAAUw2B,gBAE3Bv0E,SAAW+zE,QAAUA,QAAQ/zE,OAAO,WAChC,OAAOhT,KAAKu/B,aAAe9Z,OAAOqJ,UAItC04D,UAFAT,QAAUA,QAAQh8E,KAAKA,KAAMo8E,QAEV/1B,QACMl+B,OAAO+zD,UAAY,OAC5CC,UAAU91B,OAASo2B,SAASjiD,KAAK,WAAqB,QAAAshC,KAAAzhE,UAAA1D,OAARgf,OAAQ,IAAA7X,MAAAg+D,MAAAC,KAAA,EAAAA,KAAAD,KAAAC,OAARpmD,OAAQomD,MAAA1hE,UAAA0hE,MAClDogB,UAAU91B,MAAV7pD,MAAA2/E,WAAgBJ,6BAAc9mF,OAArBqb,OAA+BqF,WAG5C+mE,SAAWD,SAAS39E,MAAMk9E,SAC1BG,UAAUvzD,QAAU8zD,SAASliD,KAAK,WAAqB,QAAAyhC,MAAA5hE,UAAA1D,OAARgf,OAAQ,IAAA7X,MAAAm+D,OAAAC,MAAA,EAAAA,MAAAD,MAAAC,QAARvmD,OAAQumD,OAAA7hE,UAAA6hE,OACnDigB,UAAUvzD,OAAVpsB,MAAA2/E,WAAiBJ,6BAAc9mF,OAAtBqb,OAAgCqF,WAExB,UAAjB4mE,aACAG,SAASxL,QAAwB,MAAhBoL,YAAsB7R,SAAS9xE,UAAU,EAAG8xE,SAAS9zE,QAAU8zE,UAAU,GAClE,OAAjB8R,cACPG,SAASp2B,KAAK,KAAMmkB,SAAS9xE,UAAU,EAAG8xE,SAAS9zE,SAEvD,IAAMgmF,QAAUX,QAAQ71B,OASxB,OAPIg2B,UAAUh2B,KACVw2B,QAAQniD,KAAK,WAAqB,QAAAwpC,MAAA3pE,UAAA1D,OAARgf,OAAQ,IAAA7X,MAAAkmE,OAAAC,MAAA,EAAAA,MAAAD,MAAAC,QAARtuD,OAAQsuD,OAAA5pE,UAAA4pE,OAC9BkY,UAAUh2B,KAAV3pD,MAAA2/E,WAAeJ,6BAAc9mF,OAApBqb,OAA8BqF,WAG3CgnE,QAAQliD,SAELiiD,UASLE,WAAa,SAAbA,WAActgE,KAAMgb,UAItB,OAHAppC,OAAOub,QAAQ6tB,UAAUv5B,QAAQ,SAACjQ,GAC9BwuB,KAAK0Q,MAAMl/B,EAAE,GAAIA,EAAE,aAEhBwuB,MAiBLugE,gBAAkB,SAAlBA,gBAAmBb,QAASc,OAC9B,IAAK,IAAM/tF,OAAO+tF,WACPvtF,eAAe5B,KAAKmvF,MAAO/tF,MAC9BitF,QAAQ11B,KAAKv3D,IAAK+tF,MAAM/tF,OAY9BguF,wBAAW,SAAXA,SAAYf,QAASc,MAAO3oD,WAO9B,OANM6nD,mBAAmBj2B,gBACrBi2B,QAAUD,6BAAcC,eAEdz5E,IAAd4xB,UAA0B6nD,QAAQh2B,UAAR,IAAA11C,OAAsB6jB,YAAaqG,KAAK,WAC9DqiD,gBAAgB9pE,WAAO9d,MAAO6nF,SAC7BD,gBAAgBb,QAASc,OACvBd,SAyCLgB,yBAAY,SAAZA,UAAahB,QAASiB,QAIxB,IAAK,IAAMluF,OAHLitF,mBAAmBj2B,gBACrBi2B,QAAUD,6BAAcC,UAEViB,YACP1tF,eAAe5B,KAAKsvF,OAAQluF,MAC/BitF,QAAQhvD,MAAMj+B,IAAKkuF,OAAOluF,MAGlC,OAAOitF,SAYLkB,8BAAiB,SAAjBA,eAAkBvnE,QACpB,IACI3V,KACA2iE,IAFE32C,UAAYjZ,WAAO4C,OAAOqW,WAKZ,iBADpBhsB,KAAO2V,OAAO3V,QAEVA,KAAOlC,MAAMkC,MAAM4xC,OAAO10C,IAAI,SAACpP,EAAGN,GAAJ,OAAUA,KAE5Cm1E,IAAM32C,UAAUg6B,UAAUrwC,OAAO80D,UAAUzqE,KAAKA,OAEhD2iE,IAAM32C,UAAUg6B,UAAUrwC,OAAO80D,UAAUxiE,OAAO,WAC9C,OAAOhT,KAAKu/B,aAAexI,UAAUjI,SACtC/jB,KAAK2V,OAAO3V,OAEYqmD,QAAQl+B,OAAOxS,OAAOwS,QAAQrpB,MAAM6jE,KAAKnoC,KAAK,SAAU1sC,EAAGN,GAClFmoB,OAAO6kB,KAAK1sC,EAAGilB,WAAO9d,MAAOzH,KAGlB84D,KAAK,QAAS3wC,OAAOwe,WAAa,IACjDwuC,IAAIxc,OAAO1rB,UA0CT0iD,8BAAiB,SAAjBA,iBACF,IAAMC,IAAMC,UAAW7gF,WAAX,EAAAnC,WACZ,OACI+2B,EAAGgsD,IAAI,GACP3kF,EAAG2kF,IAAI,KAeTE,wBAAW,SAAXA,WAAW,OAAMC,UAMjBC,yBAAY,SAAZA,YAAY,OAAMC,UAElBC,qCAAwB,SAAxBA,sBAAyBxqC,MAAOyqC,KAClC,IAAIC,OAEEC,gBACFC,eAAgB,GAEd3pD,UAA2B,iBAARwpD,IAAmBA,IAAOA,eAAe7/E,MAAQ6/E,IAAI3lF,KAAK,UAAOuK,EAGtFq7E,OADA1qC,MAAMnvB,iBAAkBo4C,YACfjpB,MAAM/qB,OAAO,OAAOqpD,KAPhB,KASJt+B,MAAM/qB,OAAO,QAAQ7yB,KATjB,KAYb6+B,UACAypD,OAAOt3B,KAAK,QAASnyB,WACC,WAAf4pD,sBAAOJ,cACPA,IAAI,gBACXnb,eAAeqb,eAAgBF,MAGnCC,OAAO5wD,MAAM6wD,gBACb,IAAMG,cAAgB5wF,OAAO8hD,iBAAiB0uC,OAAO75D,QAC/Ck6D,oBACFzvD,SAAUwvD,cAAcxvD,SACxBC,WAAYuvD,cAAcvvD,WAC1BC,WAAYsvD,cAActvD,WAC1BC,UAAWqvD,cAAcrvD,WAK7B,OAFAivD,OAAOnjD,SAEAwjD,oBAGLC,SAAW,SAAXA,WAAW,MAAM,iBAAkB3yD,SAASwjB,6HC1T5CovC,QACF,cACA,eACA,UACA,aACA,QACA,eACA,UACA,gBAaEC,eATF,SACA,OACA,QACA,OACA,gBACA,SACA,WAKSrgF,QAAQ,SAACsgF,aAClBF,OAAOpgF,QAAQ,SAAC+uE,OACZsR,WAAWjjF,KAAX,GAAAmV,OAAmB+tE,YAAnB,KAAA/tE,OAAkCw8D,YAI3BsR,+TClBf,IAAMx5D,2BAAW,SAAXA,SAAW05D,WAAS,OAAI,SAAAC,cAAY,OAAID,UAAUC,gBASlDC,OAAS,SAATA,OAAU9lE,OAAQrpB,UAAT,OAAsBnB,OAAOoB,UAAUC,eAAe5B,KAAK+qB,OAAQrpB,WClBnEovF,6BDkCX,SAAAA,mLAAeC,CAAAzpF,KAAAwpF,kBACXxpF,KAAK0pF,WAAaP,WAClBnpF,KAAK2pF,UAAY,IAAIv4E,IACrBpR,KAAK4pF,cACL5pF,KAAK6pF,eACL7pF,KAAK8pF,yBACL9pF,KAAK+pF,8TASL/pF,KAAK4pF,WAAa5pF,KAAK0pF,WAAW33E,OAAO,SAACC,IAAKlZ,MAE3C,OADAkZ,IAAIlZ,MAAQ62B,2BACL3d,SAEXhS,KAAKgqF,6DAWCx/D,WACN,OAAOxqB,KAAK2pF,UAAUvwF,IAAIoxB,6EAURA,WAAW,IAAA/V,MAAAzU,KAC7B,OAAO,IAAIwmF,QAAQ,SAACn+D,SAChB5T,MAAKm1E,WAAWp/D,WAAamF,2BAAStH,uEAU1B,IAAA1T,OAAA3U,KAChBA,KAAK0pF,WAAW5gF,QAAQ,SAAC0hB,WACrB,IAAMy/D,QAAUt1E,OAAKu1E,qBAAqB1/D,WAC1C7V,OAAKg1E,UAAUl4E,IAAI+Y,UAAWy/D,SEpFb,SAAhBE,cAAiBF,QAASz/D,UAAWkQ,SAC9CuvD,QAAQG,KAAK,WACT,IAAMC,IAAM3vD,QAAQwvD,qBAAqB1/D,WACzCkQ,QAAQivD,UAAUl4E,IAAI+Y,UAAW6/D,KACjCF,cAAcE,IAAK7/D,UAAWkQ,WFiF1ByvD,CAAcF,QAASz/D,UAAW7V,kEAezB6V,UAAW8+D,cACxBtpF,KAAK4pF,WAAWp/D,WAAW8+D,oDAYvBA,cAGJ,IAAMF,YAAcE,aAAagB,YAAchB,aAAaiB,OAAOvlE,YAAYslE,aAC/EhB,aAAagB,WAAalB,YAC1BppF,KAAKwqF,4BACLxqF,KAAKyqF,QAAQrB,YAAaE,sDAcrBF,YAAaE,cAClB,IAAMoB,MAAQpB,aAAalnE,OACrBoI,UAAS,GAAAnP,OAAM+tE,YAAN,KAAA/tE,OAAqBqvE,OAGpC1qF,KAAK2qF,gBAAgBngE,UAAW8+D,cAGhC,IAAMW,QAAUjqF,KAAK4qF,SAASpgE,WAE1BxqB,KAAK6pF,YAAYT,cACbppF,KAAK6pF,YAAYT,aAAasB,OAE9B1qF,KAAK6qF,uBAAuBzB,YAAasB,MAAOT,SAMpDjqF,KAAK8qF,cAAc1B,YAAasB,MAAOT,+EAYvBb,YAAasB,MAAOT,SACxC,IAAMz/D,UAAS,GAAAnP,OAAM+tE,YAAN,KAAA/tE,OAAqBqvE,OACpC1qF,KAAK6pF,YAAYT,aAAasB,OAAOT,SACrCjqF,KAAK+qF,oBAAoBvgE,yFASA,IAAApT,OAAApX,KACJ/G,OAAO6M,KAAK9F,KAAK8pF,uBACzBhhF,QAAQ,SAACsgF,aACHnwF,OAAO6M,KAAKsR,OAAK0yE,sBAAsBV,cAC/CtgF,QAAQ,SAAC4hF,OACZ,GAAItzE,OAAKyyE,YAAYT,cACbhyE,OAAKyyE,YAAYT,aAAasB,OAAQ,CAEtC,IAAMT,QAAU7yE,OAAK0yE,sBAAsBV,aAAasB,OAExDtzE,OAAKyzE,uBAAuBzB,YAAasB,MAAOT,gBAEzC7yE,OAAK0yE,sBAAsBV,aAAasB,gEAepDtB,YAAasB,MAAOT,SAC1BV,OAAOvpF,KAAK8pF,sBAAuBV,eACpCppF,KAAK8pF,sBAAsBV,iBAG1BG,OAAOvpF,KAAK8pF,sBAAsBV,aAAcsB,SACjD1qF,KAAK8pF,sBAAsBV,aAAasB,WAE5C1qF,KAAK8pF,sBAAsBV,aAAasB,OAAST,oDAS1B,IAAjBe,WAAiB5lF,UAAA1D,OAAA,QAAA4L,IAAAlI,UAAA,GAAAA,UAAA,MACvBpF,KAAK6pF,YAAcmB,WAGnBhrF,KAAKwqF,4FASYhgE,WAAW,IAAAkJ,OAAA1zB,KAC5BguB,WAAW,WACP0F,OAAKk2D,WAAWp/D,WAAamF,2BAC7B+D,OAAKi2D,UAAUl4E,IAAI+Y,UAAWkJ,OAAKw2D,qBAAqB1/D,aACzD,2BGhPL9d,sBAAoBrO,oBAAUqO,kBCLvBu+E,KAAO,OACPC,MAAQ,QACRC,cAAgB,gBAChBC,MAAQ,QACRC,UAAY,YACZC,UAAY,YACZC,YAAc,ICNrBC,oBAAsB,EACtBC,oBAAsB,EACtBC,eAAiB,EACjBC,oBAAsB,EACtBC,oBAAsB,uSCFbC,6BCkBX,SAAAA,aAAaC,YAAaC,uKAAWC,CAAAhsF,KAAA6rF,cACjC7rF,KAAK8rF,YAAcA,YACnB9rF,KAAKitB,KAAO6+D,YAAY/5E,OAAO,SAAC7J,IAAKpO,KAEjC,OADAoO,IAAIpO,KAAO4xF,eACJxjF,SAEXlI,KAAK+rF,UAAYA,UACjB/rF,KAAKisF,kBAAoBH,YAAYpqF,OACrC1B,KAAKksF,oBACLlsF,KAAKmsF,WAAY,kSAWhBC,KACDpsF,KAAKmsF,WAAY,EAEjB,IAAM16E,IAAMzR,KAAKitB,KAMjB,IAAK,IAAMnzB,OAJXsyF,IAAItjF,QAAQ,SAACvQ,GACTkZ,IAAIlZ,GAAKizF,sBAGK/5E,IACVA,IAAI3X,OAAS0xF,qBAAuB/5E,IAAI3X,OAAS6xF,sBACjDl6E,IAAI3X,KAAO2X,IAAI3X,KAAO,EAAI8xF,mBAAqBH,oBAGvD,OAAOzrF,2CAUHosF,KACJ,IAAM36E,IAAMzR,KAAKitB,KAMjB,OAJAm/D,IAAItjF,QAAQ,SAACvQ,GACTkZ,IAAIlZ,GAAKozF,sBAGN3rF,uDAYP,IAAMyR,IAAMzR,KAAKitB,KAGjB,IAAK,IAAMnzB,OAAO2X,IACdA,IAAI3X,KAAO2X,IAAI3X,OAAS0xF,oBAAsBG,oBAAsBl6E,IAAI3X,KAE5E,OAAOkG,qDAaP,IAAMyR,IAAMzR,KAAKitB,KAEjB,IAAK,IAAMnzB,OAAO2X,IACdA,IAAI3X,KAAO2X,IAAI3X,OAAS2xF,mBAAqBG,mBAAqBn6E,IAAI3X,KAE1E,OAAOkG,2CAWHosF,KACJpsF,KAAKmsF,WAAY,EAEjB,IAAM16E,IAAMzR,KAAKitB,KAKjB,IAAK,IAAMnzB,OAJXsyF,IAAItjF,QAAQ,SAACvQ,GACTkZ,IAAIlZ,GAAKkzF,qBAGKh6E,IACVA,IAAI3X,OAAS2xF,oBAAsBh6E,IAAI3X,OAAS8xF,qBAChDn6E,IAAI3X,KAAoB,IAAb2X,IAAI3X,KAAa0xF,oBAAsBG,qBAI1D,OAAO3rF,+CAIP,IAAMyR,IAAMzR,KAAKitB,KACX3G,QACF+lE,iBACAC,gBACAR,gBAGJ,IAAK,IAAMhyF,OAAO2X,IACVA,IAAI3X,KAAO,GACX2X,IAAI3X,OAAS6xF,qBAAuBrlE,OAAO+lE,SAAS,GAAGnmF,KAAKpM,KAC5D2X,IAAI3X,OAAS0xF,qBAAuBllE,OAAO+lE,SAAS,GAAGnmF,KAAKpM,MACrD2X,IAAI3X,KAAO,IAClB2X,IAAI3X,OAAS8xF,oBAAsBtlE,OAAOgmE,QAAQ,GAAGpmF,KAAKpM,KAC1D2X,IAAI3X,OAAS2xF,oBAAsBnlE,OAAOgmE,QAAQ,GAAGpmF,KAAKpM,MAE9DwsB,OAAOwlE,YAAY5lF,KAAKpM,KAQ5B,OALC,WAAY,WAAWgP,QAAQ,SAACzN,MAC7BirB,OAAOjrB,MAAQirB,OAAOjrB,MAAM4M,IAAI,SAAAxN,GAAC,OAAIA,EAAEwN,IAAIO,YAE/C8d,OAAOwlE,YAAcxlE,OAAOwlE,YAAY7jF,IAAIO,QAErC8d,2CAaJ8lE,KACH,IAAM36E,IAAMzR,KAAKitB,KACjB,GAAIm/D,IACAA,IAAItjF,QAAQ,SAACvQ,GACTkZ,IAAIlZ,GAAKmzF,qBAEV,CACH,IAAMa,UAAYvsF,KAAKksF,iBACvB,IAAK,IAAMpyF,OAAO2X,IACR3X,OAAOyyF,YACT96E,IAAI3X,KAAO4xF,gBAKvB,OADA1rF,KAAKmsF,WAAY,EACVnsF,uDAWP,IAAMyR,IAAMzR,KAAKitB,KACXu/D,UAEN,IAAK,IAAM1yF,OAAO2X,IACdA,IAAI3X,OAAS0xF,qBAAuBgB,OAAOtmF,KAAKpM,KAGpD,OAAO0yF,uEAWUA,QACjB,IAAM/6E,IAAMzR,KAAKitB,KACjB,OAAOu/D,OAAOx5E,OAAO,SAAAna,GAAC,OAAI4Y,IAAI5Y,KAAO2yF,qBAAuB/5E,IAAI5Y,KAAO8yF,oFAWvDc,WAChB,IAAMh7E,IAAMzR,KAAKitB,KACjB,OAAOw/D,UAAUz5E,OAAO,SAAAna,GAAC,OAAI4Y,IAAI5Y,KAAO4yF,oBAAsBh6E,IAAI5Y,KAAO+yF,uEAQzE,IAAMn6E,IAAMzR,KAAKitB,KACXy/D,aAEN,IAAK,IAAM5yF,OAAO2X,IACdA,IAAI3X,OAAS6xF,qBAAuBe,UAAUxmF,KAAKpM,KAEvD,OAAO4yF,0DAQP,IAAMj7E,IAAMzR,KAAKitB,KACXy/D,aAEN,IAAK,IAAM5yF,OAAO2X,IACdA,IAAI3X,OAAS8xF,oBAAsBc,UAAUxmF,KAAKpM,KAGtD,OAAO4yF,0DAUP,IAAMj7E,IAAMzR,KAAKitB,KACXw/D,aAEN,IAAK,IAAM3yF,OAAO2X,IACdA,IAAI3X,OAAS2xF,oBAAsBgB,UAAUvmF,KAAKpM,KAEtD,OAAO2yF,kEAUP,IAAMh7E,IAAMzR,KAAKitB,KACX6+D,eAEN,IAAK,IAAMhyF,OAAO2X,IACdq6E,YAAY5lF,KAAKpM,KAGrB,OAAOgyF,8EAIP,OAAO9rF,KAAKisF,8DAIZ,OAAOjsF,KAAKmsF,kDAQZ,IAAM16E,IAAMzR,KAAKitB,KAEjB,IAAK,IAAMnzB,OAAO2X,IACVA,IAAI3X,OAAS0xF,oBACb/5E,IAAI3X,KAAO2xF,mBACJh6E,IAAI3X,OAAS2xF,mBACpBh6E,IAAI3X,KAAO0xF,oBACJ/5E,IAAI3X,OAAS6xF,oBACpBl6E,IAAI3X,KAAO8xF,mBAEXn6E,IAAI3X,KAAO6xF,oBAInB,OAAO3rF,mfChUR,IAmCM2sF,6BAA+B,SAA/BA,6BAAgCjyD,QAAS3c,GAAI6uE,UACtD,IAAMC,YAAcnyD,QAAQmyD,cAC5B,IAAK,IAAM/yF,OAAO+yF,YACd,MAAOvyF,eAAe5B,KAAKm0F,YAAa/yF,KAAM,CAC1C,IAAIgzF,QAAS,EACT/uE,KAAkB,IAAZA,GAAGjkB,OACTgzF,QAAS,GAETA,SACAF,SAAWC,YAAY/yF,KAAKizF,SAAWF,YAAY/yF,KAAKkzF,aAM3DC,aAAe,SAAfA,aAAex7E,KAAG,OAAAy7E,yBAAQ,IAAI32E,OAAJ8E,OAAA6xE,yBAAYz7E,IAAI,IAAhBy7E,yBAAuBz7E,IAAI,QAe5D07E,eACFC,UAAWC,qBACXC,UAAWD,qBACXE,aAAcF,oBAA+BA,qBAC7CG,SAAUH,oBACVI,SAAUJ,oBACVK,YAAaL,mBAA8BA,oBAC3CM,aAaSC,WAAa,SAAbA,WAAcvyF,KAAMoW,IAAK7E,QAClC,IAAIuP,MAAQ,KACNsyD,kBAAoB7hE,OAAO6hE,kBAC3Bof,aAAejhF,OAAOihF,aAU5B,OATKjhF,OAAOkhF,gBAMDrf,oBACPtyD,MAAiB,gBAAT9gB,KAAyBozE,kBAAkB,GAAKA,kBAAkB,IALtEtyD,MADA0xE,aAAaE,WACL,KAhBW,SAAlBC,gBAAmB3yF,KAAM8gB,MAAO1K,KACzC,OAAI0K,MACOA,MAAM2B,OAAO,SAAClV,OAAQrQ,GAAT,OAChB40F,cAAc9xF,MAAMoiB,KAAK,SAAAwwE,WAAS,OAAIx8E,IAAIlZ,KAAO01F,cAC9CjwE,WAAW,IAGf,KAWSgwE,CAAgB3yF,KAAMuR,OAAOqQ,UAAWrQ,OAAOihF,aAAa5gE,OAMxE1G,KAAM9U,IACN/P,OAAQ+P,IAAI/P,OACZya,mjCC1Ea+xE,6BACjB,SAAAA,SAAaxzD,QAASyzD,QAAStB,YAAauB,2KAAoBC,CAAAruF,KAAAkuF,UAC5DluF,KAAK06B,QAAUA,QACf16B,KAAKsuF,0BACLtuF,KAAKuuF,gBACLvuF,KAAKwuF,mBACLxuF,KAAKyuF,UACDC,eACAC,aAEJ3uF,KAAK4uF,iBACL5uF,KAAK6uF,yBACL7uF,KAAK8uF,sBACL9uF,KAAK+uF,oBACDC,aAAc,SAAAA,eAAA,OAAM,IAExBhvF,KAAKivF,4BACLjvF,KAAKkvF,qBACLlvF,KAAKmvF,uBACLnvF,KAAKovF,WACLpvF,KAAKqvF,uBACLrvF,KAAKsvF,iBACLtvF,KAAKuvF,kBACLvvF,KAAKwvF,sBAELxvF,KAAKyvF,eAAerB,oBACpBpuF,KAAK0vF,2BAA2BvB,QAAQO,aACxC1uF,KAAK2vF,oBAAoB9C,aACzB7sF,KAAK4vF,+BAA+BzB,QAAQ0B,wBAC5C7vF,KAAK8vF,wBAAwB3B,QAAQQ,+RAIrC,OAAIvpF,UAAO1D,QACP1B,KAAKovF,QAAU7hB,eAAevtE,KAAKovF,QAANhqF,UAAA1D,QAAA,OAAA4L,EAAAlI,UAAA,IACtBpF,MAEJA,KAAKovF,8DAGAW,cACZ,IAAM3B,mBAAqBpuF,KAAKqvF,oBAChC,IAAK,IAAMv1F,OAAOi2F,aACd,MAAOz1F,eAAe5B,KAAKq3F,aAAcj2F,KAAM,CAC3C,IAAM+yF,YAAckD,aAAaj2F,SAC7Bk2F,uBAAwB,EACxBC,iBAAW,EACXziE,eAAeq/D,cACfoD,YAAcpD,YAAYqD,QAC1BF,sBAAwBnD,YAAYmD,uBAEpCC,YAAcpD,aAEjBuB,mBAAmBt0F,OAASs0F,mBAAmBt0F,SAChDkG,KAAKqvF,oBAAoBv1F,KAAzBq2F,2BAAoC,IAAI55E,IAAIy5E,sBAAwBC,eAAH50E,OAAA80E,2BACzD/B,mBAAmBt0F,MADsCq2F,2BAC7BF,gBAG5C,OAAOjwF,mFAGiBmuF,SACxB,IAAMiC,WD3E8B,SAA/BC,6BAAgC31D,QAASyzD,SAClD,IAAMmC,0BAMN,OAJAnC,QAAUA,mBAAmBtlF,MAAQslF,QAAUl1F,OAAOskB,OAAO4wE,UACrDrlF,QAAQ,SAACynF,QACbD,uBAAuBC,OAAOjG,cAAgB,IAAIiG,OAAO71D,WAEtD41D,uBCoEgBD,CAA6BrwF,KAAMmuF,SAGtD,OAFAnuF,KAAKwwF,qBAAqBJ,YAC1Bn3F,OAAO4T,OAAO7M,KAAKyuF,SAASC,YAAa0B,YAClCpwF,yEAIP,OAAOA,qEAGU6sF,aACjB,IAAK,IAAM/yF,OAAO+yF,YACd7sF,KAAKsuF,uBAAuBzB,YAAY/yF,KAAKwwF,cAAgBuC,YAAY/yF,KAG7E,OADAkG,KAAKywF,wBACEzwF,+DAGO6sF,YAAagB,aAAc3jE,SAAS,IAAAzV,MAAAzU,KAC5C0wF,gBAAkB1wF,KAAK6sF,cACvB8D,cAAgB3wF,KAAKuvF,eACrBqB,kBAAoB5wF,KAAKwvF,mBA6B/B,OA5BA3C,YAAY/jF,QAAQ,SAAC+nF,YACjB,IAAIlqF,QACA7N,KACEo3F,QAAUW,WAAWX,QACrBE,WAAaS,WAAWT,WACxBU,YDIO,SAAZC,UAAar2D,QAAS01D,YAC/B,IAAIU,eACEruE,QACF8qE,YAAa,KACbG,WAAY,MAqBhB,OAnBA0C,WAAWtnF,QAAQ,SAACkoF,WAChB,IAAMC,aAAev2D,QAAQ40D,cAAc0B,WACvCC,eACAH,YAAc73F,OAAO4T,OAAOikF,YAAajzE,MAAMozE,gBAC9C,cAAe,cAAcnoF,QAAQ,SAACzN,MACnC,IAAM8gB,MAAQ80E,aAAa51F,MAAM8gB,MAC7B+0E,cAAgBzuE,OAAOpnB,MAKvB61F,cAJCA,cAEM,GAAA71E,OAAGc,MAAM0P,YAAY5jB,IAAI,SAAApP,GAAC,OAAIA,EAAEC,OAAMyX,UAAtC,GAAA8K,OACJ61E,cAAcrlE,YAAY5jB,IAAI,SAAApP,GAAC,OAAIA,EAAEC,OAAMyX,QAC9BkS,OAAOpnB,MAAQ8gB,MAAM3G,MAAM07E,eAE3B/0E,MALAsG,OAAOpnB,MAAQ8gB,MAOnC20E,YAAYz1F,MAAM8gB,MAAQ+0E,mBAI/BJ,YC7BqBC,CAAUt8E,MAAM27E,YACpCF,QAAQpnF,QAAQ,SAACqoF,QACS,WAAlBC,gBAAOD,SACPr4F,KAAOq4F,OAAOr4F,KACd6N,QAAUwqF,OAAOxqF,SAEjB7N,KAAOq4F,OAGX,IAAME,mBAAqBX,gBAAgB53F,MACvCu4F,mBAAmBC,eACdD,mBAAmBrsE,YAAYusE,WAChCt4F,OAAOskB,OAAOozE,eAAelzE,KAAK,SAAA5kB,GAAC,OAAIA,EAAEoxB,kBACzC2mE,kBAAiB,GAAAv1E,OAAIviB,KAAJ,KAAAuiB,OAAY+0E,WAAWrtF,UACpCjK,UACA4nB,QAASowE,YAAa5mE,QAASvjB,UAGnC8N,MAAK+8E,mBAAmB14F,KAAMg4F,YAAa5mE,QAASvjB,cAK7D3G,mEAGSlH,KAAM+0F,aAAc3jE,SAAuB,IAAdvjB,QAAcvB,UAAA1D,OAAA,QAAA4L,IAAAlI,UAAA,GAAAA,UAAA,MACrDsrF,gBAAkB1wF,KAAK6sF,cACvBgE,WAAaH,gBAAgB53F,MAC/Bk0F,SAAU,EACVrmF,QAAQqM,QAAUrM,QAAQqM,OAAO69E,cACjC7D,SAAU,IAEbA,SAAW0D,gBAAgB53F,MAAMyO,MAAMsmF,aAAc3jE,QAASvjB,iGAGlCsB,KAE7B,OADAjI,KAAKivF,yBAA2Bh2F,OAAO4T,OAAO7M,KAAKivF,yBAA0BhnF,SACtEjI,iEAGQgxF,UAAW9mE,SAA+B,IAAtBunE,gBAAsBrsF,UAAA1D,OAAA,QAAA4L,IAAAlI,UAAA,GAAAA,UAAA,MACnDssF,eAA0CpkF,IAA9BmkF,gBAAgBC,WAA0BD,gBAAgBC,UAEtEtvE,OADqBpiB,KAAKyuF,SAASC,YACPsC,WAE5BnE,YDzDgB,SAAjB8E,eAAkBX,UAAW5C,oBACtC,IAAMvB,eACN,IAAK,IAAM/yF,OAAOs0F,mBAAoB,CAClC,IAAMgC,WAAat2F,IAAIwS,MAAM,KACf8jF,WAAW3yE,KAAK,SAAA5kB,GAAC,OAAIA,IAAMm4F,aAErCnE,YAAY3mF,MACRgqF,QAAS9B,mBAAmBt0F,KAC5Bs2F,wBAIZ,OAAOvD,YC6CiB8E,CAAeX,UADRhxF,KAAKqvF,qBAIhC,GAFArvF,KAAKwuF,gBAAkBiD,gBAEnBrvE,OAAQ,CACR,IAAMyrE,aAAezrE,OAAOy6D,SAAS3yD,SAC/B0nE,wBAA0B5xF,KAAK6xF,2BAA2BhE,cAChE7tF,KAAKsvF,cAAc0B,WAAaY,wBAChC,IAAME,uBAAyB9xF,KAAK8xF,uBAAuBJ,WAK3D,GAHIA,WACA1xF,KAAK0xF,UAAUV,UAAW9mE,QAAS2jE,aAAazjE,KAAK,SAAAvxB,GAAC,OAAIA,EAAEk5F,qBAAqBlF,aAEjFiF,uBAAwB,CACxB,IAAME,sBAAwBhyF,KAAKiyF,yBAAyBpF,YAAa3iE,QAASunE,iBAClFzxF,KAAKkyF,iBAAiBF,sBAAuBJ,wBAAyB1nE,UAI9E,OAAOlqB,mFAGiB6tF,cACxB,OAAOA,aAAazjE,KAAK,SAAAvxB,GAAC,OAAKA,EAAEk5F,6FAIjC,OAAO,8FAGwBf,UAAWx3F,OAM1C,OALIA,iBAAiBsb,SACjB9U,KAAKkvF,kBAAkB8B,WAAax3F,MAEpCwG,KAAKkvF,kBAAkB8B,WAAa,kBAAMx3F,OAEvCwG,mGAGyB6wF,WAAYr3F,OACxCA,iBAAiBsb,SACjB9U,KAAK+uF,mBAAmB8B,YAAcr3F,MAEtCwG,KAAK+uF,mBAAmB8B,YAAc,kBAAMr3F,qDAKhD,OAAOwG,uDAIP,OAAIoF,UAAY1D,QACZ1B,KAAKuuF,aAALnpF,UAAA1D,QAAA,OAAA4L,EAAAlI,UAAA,GACOpF,MAEJA,KAAKuuF,yEAGGxwE,IAEf,OADA4uE,6BAA6B3sF,KAAM+d,IAAI,GAChC/d,mEAGS+d,IAEhB,OADA4uE,6BAA6B3sF,KAAM+d,IAAI,GAChC/d,qEAGUgxF,UAAWmB,gBAC5B,IAAMC,mBAAqBpyF,KAAKmvF,oBAChC,IAAK,IAAMr1F,OAAOs4F,mBACd,GAAIt4F,MAAQq4F,eAAgB,CACxB,IAAME,aAAeD,mBAAmBt4F,KACxCu4F,aAAajC,WAAaiC,aAAajC,WAAWp9E,OAAO,SAAAna,GAAC,OAAIA,IAAMm4F,YACpEhxF,KAAKsyF,uBAAuBx4F,KAIpC,OAAOkG,uEAGW6wF,WAAYG,WAC9B,IAAM5C,mBAAqBpuF,KAAKqvF,oBAEhC,OADAjB,mBAAmB4C,WAAa5C,mBAAmB4C,WAAWh+E,OAAO,SAAAna,GAAC,OAAKA,EAAEC,MAAQD,KAAOg4F,aACrF7wF,+EAGe6sF,aACtB,OAAOA,wFAGgB5vE,WAGvB,OAFAA,UAAUs1E,YAAY,eACtBt1E,UAAUyuD,GAAG,cAAe1rE,KAAKwyF,0BAC1BxyF,6EAGe,IAAA2U,OAAA3U,KACtB,OAAO,SAACyyF,WACJ,IAAMvoE,QAAUuoE,UAAUvoE,QACpB9H,OAAS8H,QAAQ9H,OAEvBzN,OAAK+9E,kBAAkBtwE,OAAQ8H,SAC3BwnE,WAAW,mEAKHiB,UAAWC,oBAC3B,IAAMxC,WAAawC,oBAAsB5yF,KAAKyuF,SAASC,YACjDb,aAAe7tF,KAAK4uF,cACpBiE,qBAAuB7yF,KAAK6uF,sBAElC,IAAK,IAAM/0F,OAAOs2F,gBACP91F,eAAe5B,KAAK03F,WAAYt2F,OACnC+zF,aAAa/zF,KAAO,IAAI+xF,kBAAa8G,WACrCE,qBAAqB/4F,KAAO,IAAI+xF,kBAAa8G,WAAW,IAKhE,OAFA3yF,KAAK6uF,sBAAwBgE,qBAC7B7yF,KAAK6tF,aAAaA,cACX7tF,yDAIP,OAAIoF,UAAa1D,QACb1B,KAAK4uF,cAALxpF,UAAA1D,QAAA,OAAA4L,EAAAlI,UAAA,GACOpF,MAEJA,KAAK4uF,oFAIZ,IAAMkE,sBAAwB9yF,KAAKsuF,uBAEnC,OADAtuF,KAAK6sF,YDxSwB,SAAxB4D,sBAAyB/1D,QAASmyD,aAC3C,IAAMkG,eAAiBr4D,QAAQ6zD,aACzB3hF,OAAS8tB,QAAQ9tB,SASvB,OARAigF,YAAcA,uBAAuBhkF,MAAQgkF,YAAc5zF,OAAOskB,OAAOsvE,cAC7D/jF,QAAQ,SAACkqF,YACjB,IAAM1I,WAAa0I,WAAW1I,aACxB+G,mBAAqB0B,eAAezI,YAC1CyI,eAAezI,YAAc+G,oBAAsB,IAAI2B,WAAWt4D,SAClE,IAAMu4D,eAAiBrmF,OAAO09E,YAC9B2I,gBAAkBF,eAAezI,YAAY19E,OAAOqmF,kBAEjDF,eC6RctC,CAAsBzwF,KAAM8yF,wBACtC9yF,6EAGcmuF,SACrB,IAAM+E,cDrR2B,SAA5BC,0BAA6Bz4D,QAASyzD,SAC/C,IAAMiF,mBAEN,IAAK,IAAMt6F,QAAQq1F,aACL7zF,eAAe5B,KAAKI,KAAMq1F,WAChCiF,gBAAgBt6F,MAAQq1F,QAAQr1F,MAAM4hC,UAG9C,OAAO04D,gBC6QmBD,CAA0BnzF,KAAMmuF,SAEtD,OADAl1F,OAAO4T,OAAO7M,KAAKyuF,SAASE,SAAUuE,eAC/BlzF,yDAiBIoiB,OAAQxZ,QAAwB,IAAhBsqB,OAAgB9tB,UAAA1D,OAAA,QAAA4L,IAAAlI,UAAA,IAAAA,UAAA,GACrCwtF,mBAAqB5yF,KAAKyuF,SAASC,YACzC,GAAI9lF,OAAOlH,OAAQ,CACf,GAAI0gB,SAAWmpE,YACX,IAAK,IAAMzxF,OAAO84F,mBACd5yF,KAAK8uF,mBAAmBh1F,MACpB8O,cACAsqB,oBAIRlzB,KAAK8uF,mBAAmB1sE,SACpBxZ,cACAsqB,eAGR,OAAOlzB,KAEX,OAAOA,KAAK8uF,yFAOQuE,WACpB,IAAMC,sBAAwBtzF,KAAKyuF,SAASE,SACtC1mF,IAAMjI,KAAKmvF,oBAEjB,IAAK,IAAM/sE,UAAUna,IACjB,OAAU3N,eAAe5B,KAAK0pB,OAAQna,MAAQma,UAAYixE,WAAajxE,QAAS,CAC5E,IAAIs5B,YAAM,EACJyzB,OAASlnE,IAAIma,QACnBs5B,OAASyzB,OAAOzzB,OAChB,IAAM0iC,MAAQjP,OAAOiP,MAChB1iC,SACDA,OAAS17C,KAAK06B,QAAQ64D,8BAEbtK,YAAuB,IAAV7K,YAA4B9wE,IAAV8wE,OAAuBA,QAC3Dp+E,KAAKwzF,wBAAwBF,sBAAsBlxE,QACvDs5B,OAAQyzB,OAAOihB,YAG3B,OAAOpwF,2FAGqBiI,KAE5B,OADAjI,KAAKmvF,oBAAsB5hB,eAAevtE,KAAKmvF,oBAAqBlnF,KAC7DjI,6EAWcoiB,OAAQqxE,QAASC,eAAe,IAAAt8E,OAAApX,KAiBrD,MAhByB,iBAAbyzF,UACRA,SAAWA,UAEfA,QAAQ3qF,QAAQ,SAAC4yC,QACb,IAAM3pB,MAAQ3a,OAAKsjB,QAAQ3I,QACrBZ,MAAQuqB,OAAO5sB,gBAAgBha,SAAW4mC,OAASorC,6BAAc/0D,OAAOg/B,UAAUrV,QACnFvqB,MAAMuU,UACHvU,iBAAiBtoB,MACjBsoB,MAAMroB,QAAQ,SAACgmB,MACX1M,OAAO0kE,6BAAch4D,MAAO4kE,iBAGhCtxE,OAAO+O,MAAOuiE,kBAInB1zF,mEAIP,OAAOA,KAAKwuF,oFAGO9xE,UAA+B,IAArB8E,eAAqBpc,UAAA1D,OAAA,QAAA4L,IAAAlI,UAAA,GAAAA,UAAA,MAC5Cs1B,QAAU16B,KAAK06B,QACf+zC,kBAAoBjtD,eAAezW,KAAOyW,eAAezW,KAC3D2vB,QAAQ8zC,4BAA4B9xD,SAAU,OAC5Ci3E,QAAUj5D,QAAQ9xB,SAASuzB,MAC3By3D,QAAUl5D,QAAQ9xB,SAASpF,MAC3BqwF,UAAYF,QAAQj2E,MAAM,SAAApS,OAAK,OAAIA,MAAMjQ,SAAW8D,yBAAUC,UAC9D00F,UAAYF,QAAQl2E,MAAM,SAAApS,OAAK,OAAIA,MAAMjQ,SAAW8D,yBAAUC,UACpE,OACI+c,MAAOsyD,kBACPloD,KAAmB,OAAb7J,SAAoB,KAAQ8E,eAAezW,KvG0vB9B,SAAzB6R,uBAA0BT,MAAOe,UAAW+K,UAAa,IAEvD5E,cAFuD0wE,mBAClC72E,UAAUC,UAA3BpS,KADmDgpF,mBACnDhpF,KAAMW,OAD6CqoF,mBAC7CroF,OAEd,GAAIA,OAAOhK,OAAQ,CACf,IAAMsyF,SAAW73E,MAAMkB,kBACvBgG,cAAgBlH,MAAM2B,OAAO,SAAClV,QAQ1B,OAPgBmC,KAAK0S,KAAK,SAAA1C,KAAG,OAAIrP,OAAOgS,MAAM,SAACC,UAAWzL,KACtD,QAAK+V,UAAetK,UAAU7kB,QAAQk7F,UAC9BA,SAASr2E,UAAU7kB,MAAM0kB,IAAIniB,OAAS8D,yBAAUC,UAGjD2b,IAAI7I,OAAStJ,OAAO+U,UAAU7kB,MAAM8kB,gBAI/CI,WAAW,SAGfqF,cAAgBnG,UAGpB,OAAOmG,cuG/wByDzG,CAAuB5c,KAAKi0F,cAChFzyE,eAAezW,KAAK,GAAI8oF,WAAaC,WAAW32E,UAAUoJ,KAAOkoD,kBAAkB,GAAGtxD,UAAUoJ,gEAI1FnE,QACd,IAAMR,SAAW5hB,KAAK06B,QAAQ5D,KAExBo9D,mBADiBl0F,KAAKwuF,qBACa5sE,SACrCuyE,2BAQJ,OAPID,oBAAsBtyE,WACtBuyE,yBAA2Bn0F,KAAK6uF,sBAAsBzsE,UAGtD8xE,mBACAC,wBAAwBjuF,KAAKlG,KAAK6tF,eAAezrE,SAE9C+xE,0EAIP,OAAOn0F,KAAK06B,QAAQ3vB,mDAIpB,OAAO/K,KAAKmsF,kEAYC6E,WACb,OAAOhxF,KAAKsvF,cAAc0B,0TC5bboD,oCACjB,SAAAA,iBAAaC,gKAAUC,CAAAt0F,KAAAo0F,kBACnBp0F,KAAKq0F,SAAWA,SAChBr0F,KAAKu0F,UAAW,8RAYVrqE,SAAS,IAAAzV,MAAAzU,KACT0c,SAAWwN,QAAQxN,SACnB23E,SAAWr0F,KAAKq0F,SAChB/J,WAAatqF,KAAKglB,YAAYslE,aAC9BkK,cAAgBH,SAASI,iBAAiBnK,YAJjCoK,sBAQX10F,KAAKq0F,SAASM,sBAAsBj4E,SAAU1c,KAAKq0F,SAASO,qBAFrDnmB,kBANIimB,sBAMXv4E,MACAoK,KAPWmuE,sBAOXnuE,KAOJ,OALsBiuE,cAAcvsF,IAAI,SAAC4lF,cAErC,OADAp5E,MAAKogF,gBAAgBtuE,KAAMsnE,cACpBp5E,MAAKqgF,gBAAgBjH,aAAcpf,kBAAmBvkD,qEAiBjE,OAAOlqB,6DAGM6tF,aAAcpf,kBAAmBvkD,SAAS,IAAA6qE,sBAKnDlH,aAAamH,UAHb3I,SAFmD0I,sBAEnD1I,SACAC,QAHmDyI,sBAGnDzI,QACAR,YAJmDiJ,sBAInDjJ,YAEEtqE,eAAiBxhB,KAAKq0F,SAASO,oBAC/B33E,UAAYjd,KAAKq0F,SAASJ,cAC1BgB,WACFC,qBAAsB1zE,eAAe0zE,qBACrCj4E,oBACAwxD,oCACAqf,gBAAiBtsE,eAAezW,KAChC8iF,2BAGJ,OACIxB,UAAWuB,WAAW,WAAYvB,SAAS,GAAI4I,WAC3CrH,WAAW,WAAYvB,SAAS,GAAI4I,YACxC3I,SAAUsB,WAAW,WAAYtB,QAAQ,GAAI2I,WACzCrH,WAAW,UAAWtB,QAAQ,GAAI2I,YACtC1H,YAAaK,WAAW,cAAeX,aAAaZ,UAAW4I,WAC/DvH,WAAYE,WAAW,aAAcX,aAAaX,SAAU2I,WAC5DnJ,YAAa8B,WAAW,WAAY9B,YAAamJ,WACjDC,qBAAsB1zE,eAAe0zE,qBACrCtsF,OF1BmB,SAAlBusF,gBAAmB3zE,gBAAkC,IAAlB9E,SAAkBtX,UAAA1D,OAAA,QAAA4L,IAAAlI,UAAA,GAAAA,UAAA,MACxD4d,kBAAoBxB,eAAewB,kBASzC,OAPIA,kBACeA,kBAAkB6I,YAAY5jB,IAAI,SAAApP,GAAC,OAAIA,EAAEC,OACjD4jB,oBAAoB7T,MACZ6T,SAAS,GAETzjB,OAAO6M,KAAK4W,cEkBfy4E,CAAgB3zE,eAAgB0I,QAAQxN,UAChDq1E,oBAA+C,IAA3BlE,aAAa9B,mDASrC/rF,KAAKu0F,UAAW,4CAIhBv0F,KAAKu0F,UAAW,gDAIhB,OAAOv0F,KAAKu0F,qDAZZ,OAAO,6qCCnFMa,mtBAA0BhB,iUAC1B5H,OAAQqB,cACrB,GAAe,OAAXrB,OACAqB,aAAawH,aACV,GAAI7I,OAAO9qF,OAAQ,CAEtB,IAAM4zF,eAAiB9I,OAAOx5E,OAAO,SAAAna,GAAC,OAAIg1F,aAAa5gE,KAAKp0B,KAAOw0F,qBACxDQ,aAAa5gE,KAAKp0B,KAAOw0F,sBACpCQ,aAAa0H,aAJS,IAKdlJ,SAAawB,aAAamH,UAA1B3I,SACRwB,aAAawH,MAAMpI,aAAaZ,WAChCwB,aAAap3E,IAAI+1E,QACjBqB,aAAal6D,OAAO2hE,qBAEpBzH,aAAaroD,OAAOqoD,aAAa2H,2CClBhCC,MAAQ,QACRC,UAAY,YACZC,QAAU,UACVC,OAAS,SACTC,OAAS,stCCDDC,+vBAA2BV,oUAExC,OAAOM,ysCCGMK,mtBAAuBX,oTAEpC,OAAOY,2sCCPMC,8tBAAwBb,wTAErC,OAAOQ,iDAIP,OAAO,gvCCLMM,ywBAA4B9B,yUAC5B5H,OAAQqB,cACrB,GAAe,OAAXrB,OACAqB,aAAawH,aACV,GAAI7I,OAAO9qF,OAAQ,CACtB,IAAM8f,eAAiBxhB,KAAKq0F,SAASO,oBAE/BU,eAAiB9I,OAAOx5E,OAAO,SAAAna,GAAC,OAAIg1F,aAAa5gE,KAAKp0B,KAAOw0F,qBAC5DQ,aAAa5gE,KAAKp0B,KAAOw0F,sBAChC,IAAiC,IAA7B7rE,eAAekwE,UAAqB,CACpC7D,aAAa0H,aADuB,IAE5BlJ,SAAawB,aAAamH,UAA1B3I,SACRwB,aAAawH,MAAMpI,aAAaZ,WAChCwB,aAAap3E,IAAI+1E,QACjBqB,aAAal6D,OAAO2hE,oBACjB,CAECA,eAAe5zF,QACfmsF,aAAa0H,aACb1H,aAAaroD,OAAO8vD,kBAEpBzH,aAAasI,cACbtI,aAAap3E,IAAI+1E,SAPlB,IASKF,QAAYuB,aAAamH,UAAzB1I,QACF8J,cAAgBnJ,aAAaX,SAC7B+J,iBAAmBxI,aAAa2H,iBAAiB9zF,OACnD00F,cAAc10F,SAAW20F,kBACzBxI,aAAawH,cAIrBxH,aAAaroD,OAAOqoD,aAAa2H,kBAGrC,OAAOx1F,guCCpCMs2F,guBAAwBJ,4TAErC,OAAOL,8BCgFAU,mBA9EwC,SAAtBA,oBAAuBC,WAAY5pF,OAAQwQ,cACxE,IAAMo5E,WAAWC,KAAKt6D,IAAKq6D,WAAWC,KAAKjzF,EACvC,OACIkZ,SAAU,MAIlB,IAAM+5E,KAAOD,WAAWC,KAClBC,MAAQD,KAAKt6D,EAAE,GACfw6D,MAAQF,KAAKjzF,EAAE,GACfozF,WAAaJ,WAAW5tF,OACxBiuF,OAASD,WAAWz6D,EAAE,GAAG26D,aAAa,GACtCC,OAASH,WAAWpzF,EAAE,GAAGszF,aAAa,GACtCE,WAAa55E,aAAay5E,QAAQr5E,IAAIzH,QACtCkhF,WAAa75E,aAAa25E,QAAQv5E,IAAIzH,QACtCgS,cACAmvE,MAAQtqF,OAAOuqF,SACfC,OAASxqF,OAAOwqF,OAEtB,GAAIF,MAAM/6D,IAAMi7D,OAAOj7D,GAAK+6D,MAAM1zF,IAAM4zF,OAAO5zF,EAC3C,OACIkZ,SAAU,MAIlB,IAAM26E,QAAUL,aAAe/3F,8BAAeC,WAAc+3F,aAAeh4F,8BAAeC,YACrF,IAAK,MAAQ,MAAS,KACrBwd,YACA46E,aAAeN,aAAep4F,gCAAiBC,YAC/C04F,aAAeN,aAAer4F,gCAAiBC,YAC/C24F,OAASd,MAAMhvD,aAAawvD,MAAM/6D,EAAGi7D,OAAOj7D,GAC5Cs7D,OAASd,MAAMjvD,aAAawvD,MAAM1zF,EAAG4zF,OAAO5zF,GAC5Ck0F,iBACFv7D,EAAG+6D,MAAM/6D,IAAMi7D,OAAOj7D,KAAUm7D,aAAeE,OAASA,OAAOjnF,KAAK,SAAC5V,EAAGyI,GAAJ,OAAUzI,EAAIyI,IAClFI,EAAG0zF,MAAM1zF,IAAM4zF,OAAO5zF,KAAU+zF,aAAeE,OAASA,OAAOlnF,KAAK,SAAC5V,EAAGyI,GAAJ,OAAUzI,EAAIyI,KAEhFu0F,YAEN,GAAuB,IAAnBN,QAAQ31F,QAGR,GAFAi2F,SAASd,QAAUa,gBAAgBv7D,EACnCw7D,SAASZ,QAAUW,gBAAgBl0F,EAC/BqzF,SAAWE,OAAQ,CACnB,IAAMa,KAAOF,gBAAgBv7D,EACvB07D,KAAOH,gBAAgBl0F,EACvBgQ,IAAMokF,KAAK,GAAKC,KAAK,GAAKA,KAAOD,KACjClkF,IAAMF,MAAQqkF,KAAOD,KAAOC,KAC9BrkF,IAAI,GAAKE,IAAI,GACbikF,SAASd,WAETc,SAASd,SAAWnjF,IAAI,GAAIF,IAAI,GAAKE,IAAI,GAAKF,IAAI,GAAKE,IAAI,IAE/DqU,WAAWoU,GAAK+6D,MAAM/6D,EAAGi7D,OAAOj7D,GAChCpU,WAAWvkB,GAAK0zF,MAAM1zF,EAAG4zF,OAAO5zF,SAGpCkZ,SAAS26E,QAAQ,IAAMK,gBAAgBL,QAAQ,QAE5B,MAAfA,QAAQ,IACRM,SAASd,QAAUn6E,SAASyf,EACxB66D,aAAep4F,gCAAiBC,cAChCkpB,WAAWoU,EAAKvvB,OAAOkrF,MAAQZ,MAAM/6D,IAAMi7D,OAAOj7D,EAAKu6D,MAAMqB,gBAAgBb,MAAM/6D,EAAGi7D,OAAOj7D,IACxF+6D,MAAM/6D,EAAGi7D,OAAOj7D,MAGzBw7D,SAASZ,QAAUr6E,SAASlZ,EACxByzF,aAAer4F,gCAAiBC,cAChCkpB,WAAWvkB,EAAKoJ,OAAOkrF,MAAQZ,MAAM1zF,IAAM4zF,OAAO5zF,EAAKmzF,MAAMoB,gBAAgBb,MAAM1zF,EAAG4zF,OAAO5zF,IACxF0zF,MAAM1zF,EAAG4zF,OAAO5zF,KAKjC,OACIkZ,SAAUi7E,SACV5vE,wBCpEKiwE,2BAAkB,SAAlBA,gBAAmBC,SAAU7H,WAAYiE,SAAUjW,OAC5D,IAEI8Z,WAGAC,WALAhB,YACAC,UAGEgB,OAAS7P,2BAEf0P,SAASv/F,KAAK0/F,SAAS1sB,GAAG,QAAS,WAC/B,IAAMmM,MAAQwQ,0BACd8O,UACIh7D,EAAG07C,MAAM17C,EACT34B,EAAGq0E,MAAMr0E,GAEb00F,WAAa7D,SAAS35D,QAAQ29D,oBAC9BF,YAAa,IAAIv4F,MAAO2K,YACzBmhE,GAAG,OAAQ,WACV,IAAMmM,MAAQwQ,0BAKd,GAJA+O,QACIj7D,EAAG07C,MAAM17C,EACT34B,EAAGq0E,MAAMr0E,KAET46E,OAASv6E,KAAKsnB,IAAIgsE,SAASh7D,EAAIi7D,OAAOj7D,IAAM,GAAhD,CAGAi7D,OAAOj7D,EAAIt4B,KAAK6P,IAAI,EAAG7P,KAAK2P,IAAI4jF,OAAOj7D,EAAG+7D,WAAWr+D,QACrDu9D,OAAO5zF,EAAIK,KAAK6P,IAAI,EAAG7P,KAAK2P,IAAI4jF,OAAO5zF,EAAG00F,WAAWp+D,SAErD,IAAM5P,QAAUqsE,mBAAoBlC,SAAS35D,QAAQ49D,iBACjDnB,kBACAC,eACD/C,SAAS35D,QAAQ3vB,OAAOsS,mBAC3B+yE,WAAWtnF,QAAQ,SAAAyvF,KAAG,OAAIlE,SAAS3B,kBAAkB6F,IAAKruE,cAC3DwhD,GAAG,MAAO,WACT,IAAMmM,MAAQwQ,0BACd+O,QACIj7D,EAAG07C,MAAM17C,EACT34B,EAAGq0E,MAAMr0E,GAEb,IAAMogF,UAAW,IAAIhkF,MAAO2K,UAAY4tF,WAExC,KAAI/Z,OAASwF,SAAW,KAAO//E,KAAKsnB,IAAIgsE,SAASh7D,EAAIi7D,OAAOj7D,IAAM,GAAlE,CAGAi7D,OAAOj7D,EAAIt4B,KAAK6P,IAAI,EAAG7P,KAAK2P,IAAI4jF,OAAOj7D,EAAG+7D,WAAWr+D,QACrDu9D,OAAO5zF,EAAIK,KAAK6P,IAAI,EAAG7P,KAAK2P,IAAI4jF,OAAO5zF,EAAG00F,WAAWp+D,SAErD,IAAM5P,QAAUqsE,mBAAoBlC,SAAS35D,QAAQ49D,iBACjDnB,kBACAC,cACAU,MAAM,GACPzD,SAAS35D,QAAQ3vB,OAAOsS,mBAC3B6M,QAAQsuE,SAAU,EAClBpI,WAAWtnF,QAAQ,SAAAyvF,KAAG,OAAIlE,SAAS3B,kBAAkB6F,IAAKruE,gBCvBnDuuE,eAjC0B,SAARA,MAAQpE,UAAQ,OAAI,SAAC4D,SAAU7H,YAC5D,IAAMsC,kBAAoB,SAApBA,kBAA8B1rF,MAChC,IAAM6wE,MAAQwQ,0BACR3tD,QAAU25D,SAAS35D,QAEnBhhC,KADcghC,QAAQ9tB,SAAS8rF,YAAYC,QACxBj/F,KACnByuF,IAAMD,8BAAextD,QAAQ29D,oBAAoBO,aAAc/gB,OAC/DghB,aAAen+D,QAAQo+D,gBAAgB3Q,IAAIhsD,EAAGgsD,IAAI3kF,GACpDu1F,aChBgB,iBDgBFr/F,MCfA,eDeyBA,KACvCqR,KAAM/D,KACN6wE,cAEE3tD,SACFxN,SAAUm8E,aAAeA,aAAa/hE,GAAK,KAC3CkiE,eAAgBH,aAAaG,eAC7Bt9C,OAAQm9C,aAAan9C,OACrBjb,SAAU0nD,IACVzuF,WAGJ02F,WAAWtnF,QAAQ,SAAAyvF,KAAG,OAAIlE,SAAS3B,kBAAkB6F,IAAKruE,WAC1D2tD,MAAM1iD,mBAGV8iE,SAASvsB,GAAG,YAAagnB,mBACRhnB,GAAG,YAAagnB,mBAChBhnB,GAAG,WAAY,WACZ0kB,WAAWtnF,QAAQ,SAAAyvF,KAAG,OAAIlE,SAAS3B,kBAAkB6F,KACjD77E,SAAU,aEnCzBu8E,iCAA2B,SAA3BA,yBAAqCjyF,KAAM6wE,MAAOwc,UAC3D,IAAM35D,QAAU25D,SAAS35D,QACnBytD,IAAMD,8BAAextD,QAAQ29D,oBAAoBO,aAAc/gB,MAAMqG,QAAUrG,MAAMqG,QAAQ,GAAKrG,OAClGghB,aAAen+D,QAAQo+D,gBAAgB3Q,IAAIhsD,EAAGgsD,IAAI3kF,GACpDuH,KAAM/D,KACN6wE,cAEJ,OACIn7D,SAAUm8E,aAAeA,aAAa/hE,GAAK,KAC3CkiE,eAAgBH,aAAaG,eAC7Bt9C,OAAQm9C,aAAan9C,OACrBjb,SAAU0nD,MCMH+Q,eAV0B,SAARA,MAAQ7E,UAAQ,OAAI,SAAC4D,SAAU7H,YAQ5D6H,SAASvsB,GAAG,QAPc,SAApBgnB,kBAA8B1rF,MAChC,IAAM6wE,MAAQwQ,0BACRn+D,QAAU+uE,iCAAyBjyF,KAAM6wE,MAAOwc,UACtDjE,WAAWtnF,QAAQ,SAAAyvF,KAAG,OAAIlE,SAAS3B,kBAAkB6F,IAAKruE,WAC1D2tD,MAAM1iD,kMCPP,IAAMi+D,iBAAe+F,wBAAAC,oBACvBC,KCAmC,SAAPpZ,KAAOoU,UAAQ,OAAI,SAAC4D,SAAU7H,YAC3D4H,2BAAgBC,SAAU7H,WAAYiE,aDFd8E,wBAAAC,iBAEvBC,MAAoBZ,gBAFGU,wBAAAC,iBAGvBC,MAAoBH,gBAHGC,wBAAAC,iBAIvBC,UEDoB,SAAZC,UAAYjF,UAAQ,OAAI,SAAC4D,SAAU7H,YAC5C,IAAIvY,MACA0hB,SAOJA,UAAW,EACX1hB,MAAQwQ,0BACR4P,SAASvsB,GAAG,aAAc,SAAC1kE,MACvB6wE,MAAQwQ,0BACRkR,UAAW,EACXvrE,WAAW,WACFurE,SAGDnJ,WAAWtnF,QAAQ,SAAAyvF,KAAG,OAAIlE,SAAS3B,kBAAkB6F,KACjD77E,SAAU,SAhBA,SAApBg2E,kBAA8B1rF,MAChC,IAAMkjB,QAAU+uE,iCAAyBjyF,KAAM6wE,MAAOwc,UACtDjE,WAAWtnF,QAAQ,SAAAyvF,KAAG,OAAIlE,SAAS3B,kBAAkB6F,IAAKruE,WAC1D2tD,MAAM1iD,kBAUEu9D,CAAkB1rF,OAMvB,OACJ0kE,GAAG,WAAY,WACd6tB,UAAW,OF3BSJ,wBAAAC,iBAKvBC,UGJoB,SAAZG,UAAYnF,UAAQ,OAAI,SAAC4D,SAAU7H,YAC5C4H,2BAAgBC,SAAU7H,WAAYiE,UAAU,MHFxB+E,kBIPfK,OACTC,aACInvB,aAAc,SAAAA,aAAArpE,KAAG,OAAIA,iTCAdy4F,mBCaX,SAAAA,kBAAatF,2KAAUuF,CAAA55F,KAAA25F,mBACnB35F,KAAKq0F,SAAWA,SAChBr0F,KAAKu0F,UAAW,EAChBv0F,KAAK65F,UAAY,UACjB75F,KAAKovF,WACLpvF,KAAKgkF,IAAM15E,cACXtK,KAAK85F,eACLjtB,sBAAsB7sE,KAAMy5F,OAC5Bz5F,KAAK4M,OAAO5M,KAAKglB,YAAYpF,6UAiD7B,OAAIxa,UAAO1D,QACP1B,KAAKovF,QAAU7hB,eAAevtE,KAAKovF,QAANhqF,UAAA1D,QAAA,OAAA4L,EAAAlI,UAAA,IACtBpF,MAEJA,KAAKovF,kDAKZ,OADApvF,KAAKu0F,UAAW,EACTv0F,6CAKP,OADAA,KAAKu0F,UAAW,EACTv0F,mDAIP,OAAOA,KAAKu0F,+CAyBZ,OAAOv0F,qDAWElH,KAAMilB,IAEf,OADA/d,KAAK85F,YAAYhhG,MAAQilB,GAClB/d,6DA/FP,yDAUA,MAAO,kDAIP,MAAO,gDAWP,OAAO,wuCChCM+5F,0vBAA4BJ,iUA2BtBloF,KAA0CrM,UAAA1D,OAAA,QAAA4L,IAAAlI,UAAA,IAAAA,UAAA,OAAxB40F,gBAAwB50F,UAAA1D,OAAA,EAAA0D,UAAA,QAAAkI,EAAP/F,MAAOnC,UAAA1D,OAAA,EAAA0D,UAAA,QAAAkI,EAI7D,OAHetN,KAAKq0F,SAAS35D,QAAQu/D,SAC9BnxF,QAAQ,SAAAoxF,OAAK,OAAmC,IAA/BA,MAAMttF,SAASutF,aACnCD,MAAME,sBAAsBJ,gBAAiBvoF,IAAI8U,KAAMhf,SACpDvH,6uCC7BMq6F,owBAA4BV,iTAY9B5iE,UAAWkwD,SAAUl8E,KAAMm0B,UAAWgoD,WACjD,OAAOF,YAAYjwD,UAAWkwD,SAAUl8E,KAAMm0B,UAAWgoD,mEAiBzD,OAAI9hF,UAAe1D,QACf1B,KAAKs6F,gBAALl1F,UAAA1D,QAAA,OAAA4L,EAAAlI,UAAA,GACOpF,MAEJA,KAAKs6F,sDAIZ,OAAOt6F,yCAIP,OAAOA,slBCpER,IA2GMu6F,wBAAmB,SAAnBA,iBAAoB7/D,QAAS8/D,gBAAiBC,SACvD,IAAM7tF,OAAS8tB,QAAQ9tB,SACjBsyB,UAAYtyB,OAAO8tF,aACnBC,YAAc/tF,OAAO+tF,YAC3B7T,6BAAc0T,iBAAiBzpC,UAA/B,IAAA11C,OAA6Cs/E,YAA7C,KAAAt/E,OAA4D6jB,YAC3CnH,MAAM,UAAW0iE,QAAU,QAAU,8vCCuB3CG,8uBAxHYP,4TAmChBxM,aAAc3jE,SACjB,IAAIiS,EACA34B,EACAq2B,MACAC,OACEltB,OAAS5M,KAAKovF,QACdyL,QAAUjuF,OAAOkuF,IACjBzG,SAAWr0F,KAAKq0F,SAChB6D,WAAal4F,KAAK+6F,iBAClBzmE,WAAa4jE,WAAWsC,gBACxBQ,UAAY9C,WAAWr+D,MACvBohE,WAAa/C,WAAWp+D,OACxB6gE,YAAc/tF,OAAO+tF,YACrBO,wBAA0BtuF,OAAO8tF,aAEvC,GAAyB,OAArBxwE,QAAQxN,SAER,OADA1c,KAAKm7F,KAAKjD,YACHl4F,KAGX,IAAMo7F,UAAY/G,SAAS35D,QAAQ49D,gBApBT+C,sBDlDS,SAA9BC,4BAA+BpxE,QAASusE,KAAMG,YACvD,IAAI92C,GACA2S,GACAF,GACAG,GACA8kC,OACAC,OACA8D,UACE7+E,SAAWwN,QAAQxN,SACnBqL,WAAamC,QAAQnC,eACrByzE,KAAOzzE,WAAWoU,EAClBs/D,KAAO1zE,WAAWvkB,EAExB,GAAiB,OAAbkZ,SACA,OAAO,KAGX,IAAMg6E,MAAQD,KAAKt6D,EAAE,GACfw6D,MAAQF,KAAKjzF,EAAE,GACfk4F,QAAuC,WAA7BhF,MAAM1xE,YAAY3pB,OAC5BsgG,QAAuC,WAA7BhF,MAAM3xE,YAAY3pB,OAC5Bw7F,OAAM,GAAAx7E,OAAMu7E,WAAWz6D,EAAE,IACzB46D,OAAM,GAAA17E,OAAMu7E,WAAWpzF,EAAE,IACzBo4F,UAAYl/E,SAASm6E,QACrBgF,UAAYn/E,SAASq6E,QAU3B,GARI6E,WAAaA,UAAU,aAAc/yF,OACrC2uF,OAASoE,UAAU,GACnBnE,OAASmE,UAAU,KAEnBpE,OAASoE,cACTnE,OAASoE,eAEbN,UAAYK,WAAaC,UAAY,OAAUD,UAAY,WAAa,aACpEpE,QAAUA,OAAO91F,OACjB,GAAkC,SAA7Bi1F,MAAM3xE,YAAY3pB,QAAqBqgG,QACxC57C,GAAK2S,QAAKnlD,EACViuF,UAAY,iBACT,CACH,IAEIO,MACAC,MAHEvlF,OAASkgF,MAAMlgF,SACfwlF,UAAyC,SAA7BtF,MAAM1xE,YAAY3pB,OAGpC,GAAI2gG,UAAW,CACX,IAAIC,cAAgBzlF,OAAOvQ,QAAQuxF,OAAO,IACtC0E,cAAgB1lF,OAAOvQ,QAAQuxF,OAAOA,OAAO91F,OAAS,IAF/Cy6F,OAAAC,sBAGuBH,cAAeC,eAAe3rF,KAAK,SAAC5V,EAAGyI,GAAJ,OAAUzI,EAAIyI,IAHxE,GAGV64F,cAHUE,OAAA,GAGKD,cAHLC,OAAA,GAIXL,MAAQtlF,OAAOylF,eACfF,MAAQvlF,OAAO0lF,oBAEfJ,MAAQtE,OAAO,GACfuE,MAAQvE,OAAOA,OAAO91F,OAAS,GAEnCo+C,GAAK42C,MAAM2F,cAAcP,OACzBrpC,GAAKikC,MAAM2F,cAAcN,OACzBtpC,IAAMupC,UAAYtF,MAAM4F,eAAiB,OAG7Cx8C,GAAK2S,QAAKnlD,EAEd,GAAImqF,QAAUA,OAAO/1F,OACjB,GAAkC,SAA7Bg1F,MAAM1xE,YAAY3pB,QAAqBsgG,QACxCppC,GAAKG,QAAKplD,EACViuF,UAAY,eACT,CACH,IAEIgB,MACAC,MAHEhmF,QAASmgF,MAAMngF,SAIrB,GAH+C,SAA7BmgF,MAAM3xE,YAAY3pB,OAGrB,CACX,IAAIohG,cAAgBjmF,QAAOvQ,QAAQwxF,OAAO,IACtCiF,cAAgBlmF,QAAOvQ,QAAQwxF,OAAOA,OAAO/1F,OAAS,IAF/Ci7F,OAAAP,sBAGuBK,cAAeC,eAAensF,KAAM,SAAC5V,EAAGyI,GAAJ,OAAUA,EAAIzI,IAHzE,GAGV8hG,cAHUE,OAAA,GAGKD,cAHLC,OAAA,GAIXJ,MAAQ/lF,QAAOimF,eACfD,MAAQhmF,QAAOkmF,oBAEfH,MAAQ9E,OAAO,GACf+E,MAAQ/E,OAAOA,OAAO/1F,OAAS,GAEnC6wD,GAAKokC,MAAM0F,cAAcE,OACzB7pC,GAAKikC,MAAM0F,cAAcG,OACzB9pC,IAAmC,SAA7BikC,MAAM3xE,YAAY3pB,OAAoBs7F,MAAM2F,eAAiB,OAGvE/pC,GAAKG,QAAKplD,EAGd,GAAKquF,SAAWD,UAAaxxE,QAAQsuE,QAAS,CAC1C,GAAIgD,KAAM,KAAAoB,MAAAR,qBACKZ,KADL,GACL17C,GADK88C,MAAA,GACDnqC,GADCmqC,MAAA,GAGV,GAAInB,KAAM,KAAAoB,MAAAT,qBACKX,KADL,GACLlpC,GADKsqC,MAAA,GACDnqC,GADCmqC,MAAA,IAKd,OACIC,WACIh9C,MACA2S,MACAF,MACAG,OAEJ6oC,qBChCiCD,CAA4BpxE,QAASkxE,UAAU3E,KAC5E2E,UAAUxyF,QADNk0F,UArBkBzB,sBAqBlByB,UAAWvB,UArBOF,sBAqBPE,UAEb/pC,WAAatnC,QAAQsuE,SAAW5rF,OAAO4kD,WAE3B,SAAd+pC,WAAsC,aAAdA,WACxBp/D,EAAIt4B,KAAK2P,IAAIspF,UAAUh9C,GAAIg9C,UAAUrqC,IACrC54B,MAAQh2B,KAAKsnB,IAAI2xE,UAAUrqC,GAAKqqC,UAAUh9C,MAE1C3jB,EAAI,EACJtC,MAAQmhE,WAEM,SAAdO,WAAsC,eAAdA,WACxB/3F,EAAIK,KAAK2P,IAAIspF,UAAUvqC,GAAIuqC,UAAUpqC,IACrC54B,OAASj2B,KAAKsnB,IAAI2xE,UAAUpqC,GAAKoqC,UAAUvqC,MAE3Cz4B,OAASmhE,WACTz3F,EAAI,GAERxD,KAAK+8F,KAAK7E,YAEV,IAAM1kB,SAEEr3C,IACA34B,IACAq2B,YACAC,gBAMF+2D,WAAa7wF,KACb8wD,UAHiBk2B,YAAYF,6BAAcxyD,YAAa,KAAM,GAAlC,IAAAjZ,OAC1Bs/E,YAD0B,KAAAt/E,OACX6/E,0BAEUnqC,UAAU,QAAQhmD,KAAKyoE,QAClDwb,aAAel+B,UAAUM,QAAQl+B,OAAO,QAC7BqS,KAAK,YCpGE,SAAnBy3D,iBAAmB3I,UAAQ,OAAI,SAAC4D,SAAU7H,YACnD,IAAIlR,QACAgZ,WACEx9D,QAAU25D,SAAS35D,QACnBuiE,OAAS,SAATA,OAAU/yE,SACZkmE,WAAWtnF,QAAQ,SAAAsZ,QAAM,OAAIiyE,SAAS3B,kBAAkBtwE,OAAQ8H,YAE9DkuE,OAAS7P,2BAEf0P,SAASv/F,KAAK0/F,SAAS1sB,GAAG,QAAS,WAC/B,IAAMmM,MAAQwQ,0BACd6P,WAAax9D,QAAQ29D,oBACrBnZ,QAAUrH,MAAMqH,UACjBxT,GAAG,OAAQ,WACV,IAAMmM,MAAQwQ,0BACdnJ,QAAQ/iD,GAAK07C,MAAM/jB,GACnBorB,QAAQ17E,GAAKq0E,MAAM9jB,GACnB,IAAMl6B,MAAQq+D,WAAWr+D,MACnBC,OAASo+D,WAAWp+D,OACpBqC,EAAIt4B,KAAK2P,IAAIqmB,MAAQqlD,QAAQrlD,MAAOh2B,KAAK6P,IAAIwrE,QAAQ/iD,EAAG,IACxD34B,EAAIK,KAAK2P,IAAIsmB,OAASolD,QAAQplD,OAAQj2B,KAAK6P,IAAIwrE,QAAQ17E,EAAG,IAC1DkvD,GAAKlvD,EAAI07E,QAAQplD,OACjB24B,GAAKt2B,EAAI+iD,QAAQrlD,MAEvB,GAAIsC,GAAK,GAAKs2B,IAAM54B,OAASr2B,GAAK,GAAKkvD,IAAM54B,OAAQ,CACjD,IAAM5P,QAAUqsE,mBAAoB77D,QAAQ49D,iBACxCnB,UACIh7D,IACA34B,KAEJ4zF,QACIj7D,EAAGs2B,GACHjvD,EAAGkvD,KAERh4B,QAAQ3vB,OAAOsS,mBAClB4/E,OAAO/yE,YAEZwhD,GAAG,MAAO,WACT,IAAM7xC,MAAQq+D,WAAWr+D,MACnBC,OAASo+D,WAAWp+D,OACpBqC,EAAIt4B,KAAK2P,IAAIqmB,MAAQqlD,QAAQrlD,MAAOh2B,KAAK6P,IAAIwrE,QAAQ/iD,EAAG,IACxD34B,EAAIK,KAAK2P,IAAIsmB,OAASolD,QAAQplD,OAAQj2B,KAAK6P,IAAIwrE,QAAQ17E,EAAG,IAC1DkvD,GAAKlvD,EAAI07E,QAAQplD,OACjB24B,GAAKt2B,EAAI+iD,QAAQrlD,MAEvB,GAAIsC,GAAK,GAAKs2B,IAAM54B,OAASr2B,GAAK,GAAKkvD,IAAM54B,OAAQ,CACjD,IAAM5P,QAAUqsE,mBAAoB77D,QAAQ49D,iBACxCnB,UACIh7D,IACA34B,KAEJ4zF,QACIj7D,EAAGs2B,GACHjvD,EAAGkvD,IAEPolC,MAAM,GACPp9D,QAAQ3vB,OAAOsS,mBAClB6M,QAAQsuE,SAAU,EAClByE,OAAO/yE,cD2CS8yE,CAAiB3I,SAAjB2I,CAA2BlW,6BAAc9mF,OAAQ,SAAU6wF,cAE9DhnF,MAAMinD,WACNvrB,KAAK,SAAUsiD,OACZ,IAAId,QAAUD,6BAAc9mF,MAE5B,IAAK,IAAMlG,OADX03D,aAAeu1B,QAAUA,QAAQv1B,aAAaoyB,SAASpyB,WAAWoyB,WAChDiE,WACPvtF,eAAe5B,KAAKmvF,MAAO/tF,MAC9By1E,aAAasY,MAAM/tF,OAASitF,QAAQ11B,KAAKv3D,IAAK+tF,MAAM/tF,QAK1EojG,aAAe9yB,sBAAsBywB,QAAQH,aAAc16F,KAAKgkF,IAAK2W,aAI3E,OAHA3L,aAAa/S,QAAQihB,aAAan6F,KAAK,MAAM,GAC7CisF,aAAa/S,QAAQ4e,QAAQ37D,WAAW,GAEjCl/B,uCAGLk4F,YACFqC,wBAAiBv6F,KAAMk4F,WAAWsC,iBAAiB,qCAGjDtC,YACFqC,wBAAiBv6F,KAAMk4F,WAAWsC,iBAAiB,2DA9GnD,OACIE,aAAc,sBACdx7D,UAAW,GACXy7D,Yb1Be,Oa2BfG,KACIJ,aAAc,gBACdx7D,UAAW,IAEfsyB,YACIoyB,SAAU,sDAMlB,MAAO,mCE7BFuZ,eACT18D,SAAU,WACV5G,MAAO,EACPC,OAAQ,GCVCla,8BACT+6E,YDHuB,OCIvBD,aAAc,cACd0C,mBAAoB,qBACpBl+D,UAAW,GACXnkB,KACIsiF,OAAQ,GAEZC,SACI5sC,QAAS,EACT6sC,kBAAmB,GACnBC,UAAW,EACXC,UAAW,SACXC,UAAW,UACXC,UAAW,MACXN,OAAQ,GACRO,UAAW,IACX1+D,UAAW,4BACX2+D,gBAAiB,oCAErBC,OACIplE,KAAM,GACNqlE,UAAU,EACVrD,aAAc,gBACdx7D,UAAW,GACXsT,MAAO,2BCxBFwrD,mBAAc,SAAdA,YAAe7tC,OAAQ8tC,IAAKC,YAAatxF,QAClD,IAAIuxF,SACIhiE,EAA8B+hE,YAA9B/hE,EAAG34B,EAA2B06F,YAA3B16F,EAAG46F,UAAwBF,YAAxBE,UAAWC,SAAaH,YAAbG,SAEnBC,WADgB1xF,OAAOkxF,MAAMC,SACA,EAAInxF,OAAOkxF,MAAMplE,KAEpD,GFLsB,SEKlBy3B,QFRmB,UEQMA,OAAwB,CACjD,IAAIlyD,MAAQ,EACR+kC,KAAOo7D,UAAY,EACjBG,WAAaN,IAAIz6F,EAAIy6F,IAAInkE,OACzB0kE,UAAYh7F,EAAI46F,UAElBH,IAAIz6F,EAAIA,GACRvF,MAAQggG,IAAIz6F,EAAIA,EAChBw/B,MAAQu7D,YAAcC,UAAaA,UAAYP,IAAIz6F,EAAKy6F,IAAInkE,QAAU,GAC/D0kE,UAAYD,aACnBv7D,KAAOn/B,KAAKsnB,IAAI3nB,GAAKy6F,IAAIz6F,EAAIy6F,IAAInkE,SAAW,GAEhDqkE,SAAWlgG,MAAQ+kC,KAAOs7D,WAAa,MACpC,CACH,IAAIrgG,OAAQ,EACR+kC,MAAOq7D,SAAW,EAChBI,UAAYR,IAAI9hE,EAAI8hE,IAAIpkE,MACxB6kE,SAAWviE,EAAIkiE,SAEjBJ,IAAI9hE,EAAIA,GACRl+B,OAAQggG,IAAI9hE,EAAIA,EAChB6G,OAAQy7D,WAAaC,SAAYA,SAAWT,IAAI9hE,EAAK8hE,IAAIpkE,OAAS,GAC3D6kE,SAAWD,YAClBz7D,MAAOn/B,KAAKsnB,IAAIgR,GAAK8hE,IAAI9hE,EAAI8hE,IAAIpkE,QAAU,GAE/CskE,SAAWlgG,OAAQ+kC,MAAOs7D,WAAa,EAE3C,OAAOH,UAUEQ,kBAAa,SAAbA,WAAcjkE,QAAS+F,SAAU09D,UAC1C,IAAMS,aAAelkE,QAAQmkE,cACvBC,kBAAoBpkE,QAAQqkE,mBAC5BnyF,OAAS8tB,QAAQ00D,QACjBuL,YAAc/tF,OAAO+tF,YACrBqE,UAAYpyF,OAAOkxF,MACnB5+D,UAAYkrC,sBAAsB40B,UAAUtE,aAAchgE,QAAQspD,IAAKp3E,OAAO+tF,aAEpFiE,aAAa7mE,MAAM,UAAW,SAC9B6mE,aAAavtC,KAAK,QAAlB,GAAAh2C,OAA8B6jB,UAAUn8B,KAAK,OFlDrB,SEmDpB09B,UFlDqB,UEkDQA,UAC7Bm+D,aAAa7mE,MAAM,MAAnB,GAAA1c,OAA6B8iF,SAA7B,OACAS,aAAa7mE,MAAM,OAAQ,IAC3B+mE,kBAAkB/mE,MAAM,MAAxB,GAAA1c,OAAkC8iF,SAAlC,OACAW,kBAAkB/mE,MAAM,OAAQ,MFrDV,WEuDtB0I,SAA8Bm+D,aAAa7mE,MAAM,MAAO,QAAU6mE,aAAa7mE,MAAM,MAAnB,IAAA1c,OAC1D2jF,UAAUtmE,KADgD,OAElEkmE,aAAa7mE,MAAM,OAAnB,GAAA1c,OAA8B8iF,SAA9B,OFzDsB,WE0DtB19D,SAA8Bq+D,kBAAkB/mE,MAAM,MAAO,QAAU+mE,kBAAkB/mE,MAAM,MAAxB,IAAA1c,OAC/D2jF,UAAUtmE,KAAO,EAD8C,OAEvEomE,kBAAkB/mE,MAAM,OAAxB,GAAA1c,OAAmC8iF,SAAnC,QAEJS,aAAa3iB,QAAb,GAAA5gE,OAAwBs/E,YAAxB,mBAAqD,GACrDiE,aAAa3iB,QAAb,GAAA5gE,OAAwBs/E,YAAxB,mBAAAt/E,OAAqDqf,QAAQukE,oBAAqB,GAClFL,aAAa3iB,QAAb,GAAA5gE,OAAwBs/E,YAAxB,mBAAAt/E,OAAqDolB,WAAY,GACjEq+D,kBAAkB7iB,QAAlB,GAAA5gE,OAA6Bs/E,YAA7B,8BAAqE,GACrEmE,kBAAkB7iB,QAAlB,GAAA5gE,OAA6Bs/E,YAA7B,8BAAAt/E,OAAqEqf,QAAQukE,oBAAqB,GAClGH,kBAAkB7iB,QAAlB,GAAA5gE,OAA6Bs/E,YAA7B,8BAAAt/E,OAAqEolB,WAAY,63CCjE7E/zB,2BAAsBrO,oBAAtBqO,kBAEFwyF,oBAAa,SAAbA,WAAc98F,UAAWw9C,SAAU85C,aAAtB,IAAA/mE,KAAA,OAAAwsE,wBAAAxsE,QACd/zB,gCAAiBE,SAAW,SAACtF,OAC1B,OAAIA,iBAAiBkT,2BACVgtF,YAAYlgG,OAEhBm6E,4BAAen6E,MAAOomD,YALlBu/C,wBAAAxsE,KAOd1zB,8BAAeC,WAAa,SAAA1F,OAAK,OAAKA,iBAAiBkT,2BAAoBgtF,YAAYlgG,OACpF4I,UAAU5I,MAAMkkD,QAAQ,MARbyhD,wBAAAxsE,KASd/zB,gCAAiBC,YAAc,SAAArF,OAAK,OAAIkgG,YAAYlgG,SATtCm5B,MAYbysE,sCAA+B,SAA/BA,6BAAgCh9F,UAAWi9F,kBAAZ,OAAiC90B,aAAanoE,UAAWi9F,mBAsBjFC,0BAAmB,SAAnBA,iBAAoBriF,WAAoC,IAAzBrQ,OAAyBxH,UAAA1D,OAAA,QAAA4L,IAAAlI,UAAA,GAAAA,UAAA,MAAZs1B,QAAYt1B,UAAA1D,OAAA,EAAA0D,UAAA,QAAAkI,EAC7DiyF,eACEviF,QAAUC,UAAUE,UACpBpS,KAAOiS,QAAQjS,KACfW,OAASsR,QAAQtR,OACjBkyF,UAAYhxF,OAAOgxF,UACnBxgF,aAAeH,UAAUI,kBACzBmiF,WAAaviF,UAAUrO,gBACvB6wF,aAAe/kE,QAAQ+kE,iBACvB13E,WAAarc,OAAOsH,OAAO,SAAAna,GAAC,OAAIA,EAAEwC,OAAS8D,yBAAUE,YACrD4oB,SAAWvc,OAAOsH,OAAO,SAAAna,GAAC,OAAIA,EAAEwC,OAAS8D,yBAAUC,UACnDsgG,oBAAsBh0F,OAAO0e,KAAK,SAAAvxB,GAAC,OAAsC,IAAlC4mG,aAAax5F,QAAQpN,EAAEC,QAC9D6mG,QAAU50F,KAAKrJ,OAEjBg4F,YAIAh/D,QAJAg/D,YACAjD,KAGA/7D,QAHA+7D,KACAmJ,oBAEAllE,QAFAklE,oBACAC,UACAnlE,QADAmlE,UAEEC,aAAeZ,oBAAW,KAAM,KAAMxF,aAAa96F,gCAAiBC,aACpEkhG,cAAgB,SAAhBA,cAAiBz0F,MAAOjQ,MAC1B,IAAI7B,MACAwmG,eACAC,aACE1iF,UACAtb,MAAQmb,aAAa9R,OAAOrJ,MAC5B29C,SAAWxiC,aAAa9R,OAAOkS,IAAIzH,UAAYnX,gCAAiBE,SAAW+gG,UAAUv0F,OAAS,EAC9F40F,YAAcd,sCAA6BF,oBAAW,SAAAh+F,KAAG,OAAIA,KAAK0+C,SAAU85C,aAAar+F,MAC3FykG,cAEJ,GAAc,OAAVtmG,MAAgB,CAChB,IAAI2mG,WAAa9kG,OAAS4D,8BAAeC,WAAa6L,KAAK9C,IAAI,SAAApP,GAAC,OAAIA,EAAEoJ,SAArDm+F,2BACT,IAAI7pF,IAAIxL,KAAK9C,IAAI,SAAApP,GAAC,OAAIA,EAAEoJ,WAChCk+F,WAAaA,WAAWntF,OAAO,SAAAna,GAAC,MAAU,KAANA,IACpC,IAAMwnG,UAAY5J,KAAKjkD,MAAM,GACvB8tD,UAAY7J,KAAK8J,MAAM,GACvBC,SAAW/J,KAAK/9D,KAAK,GACrB+nE,gBAAkBJ,WAAaC,WAAaE,WAAab,QAAU,GACjEtkG,OAAS4D,8BAAeC,WAEhCihG,WAAWr3F,QAAQ,SAAC5H,IAAK3I,GACrB,IAAIuB,IACE4mG,mBAAqBd,oBAAoBt0F,OAE/C,GAAIo1F,oBAAsBA,mBAAmBh/F,QAAUi+F,QAAU,EAAG,CAChE7lG,IAAMoH,IACN,IAAIy/F,MACAnnG,MAAO,IAWX,GARIinG,iBACAE,MACItlG,KAAM,OACNm3C,MAAO6tD,UAAUO,SAAS1/F,KAC1Bq/F,MAAOD,UAAUO,SAAS3/F,KAC1Bw3B,KAAM8nE,SAASM,QAAQ5/F,KAAO0L,OAAO4wF,YAGzCkD,mBAAmBh/F,OAAS,EAAG,CAC/B,IAAMq/F,aAAe1lG,OAASuD,gCAAiBE,SAAWohG,YAAYpmG,IAAK8lD,UAAY9lD,IACvFyjB,OAAOrX,MAAMy6F,KAAD,GAAAtlF,OAAU0lF,gBACtBL,mBAAmB53F,QAAQ,SAACk4F,SACxBf,aAAe7iF,aAAa4jF,SAAS/+F,MACrCzI,MAAQuR,KAAKxS,GAAG0nG,cAChB,IAAMtoF,aAAe6nF,WAAW52F,OAAOq3F,cAActoF,eAC/CspF,iBAAmB7B,sCACrBF,oBAAWvnF,aAAcioC,SAAU85C,aAAaz6F,8BAAeC,aACnE8gG,eAAiBiB,iBAAiBznG,OAClC+jB,OAAOrX,OACH1M,MAAK,GAAA6hB,OAAK2lF,SAAL3lF,OAAeuiF,WACpB7lE,OACImpE,cAAA,GAAA7lF,OAAkBzO,OAAOywF,OAAzB,QAEJn+D,UAAS,GAAA7jB,OAAKzO,OAAO+tF,YAAZ,kBAETnhG,MAAK,GAAA6hB,OAAK2kF,gBACV9gE,UAAS,GAAA7jB,OAAKzO,OAAO+tF,YAAZ,2BAGd,CACHsF,aAAe7iF,aAAasjF,mBAAmB,IAAIz+F,MACnDzI,MAAQuR,KAAKxS,GAAG0nG,cAChB,IAAMtoF,aAAe6nF,WAAW52F,OAAOq3F,cAActoF,eAC/CspF,iBAAmB7B,sCACrBF,oBAAWvnF,aAAcioC,SAAU85C,aAAaz6F,8BAAeC,aACnE8gG,eAAiBiB,iBAAiBznG,OAClC,IAAMunG,cAAe1lG,OAASuD,gCAAiBE,SAAWohG,YAAYpmG,IAAK8lD,UAAY9lD,IACvFyjB,OAAOrX,MACHy6F,MAEInnG,MAAK,GAAA6hB,OAAK0lF,eACV7hE,UAAS,GAAA7jB,OAAKzO,OAAO+tF,YAAZ,kBAGTnhG,MAAK,GAAA6hB,OAAK2kF,gBACV9gE,UAAS,GAAA7jB,OAAKzO,OAAO+tF,YAAZ,2BAKrB7gG,IAAMwR,MAEN00F,eAAiBE,YADjB1mG,MAAQ0H,KAERqc,OAAOrX,OACH1M,MAAK,GAAA6hB,OAAKvhB,KAALuhB,OAAWuiF,WAChB1+D,UAAS,GAAA7jB,OAAKzO,OAAO+tF,YAAZ,kBAETnhG,MAAK,GAAA6hB,OAAK2kF,gBACV9gE,UAAS,GAAA7jB,OAAKzO,OAAO+tF,YAAZ,uBAKzB,OAAOp9E,QAEP4jF,cAAgB,WAEpB,GAAIxB,QAAU,GAAKD,oBACfH,YA1Ie,SAAjB6B,eAAkBpkF,QAAS0d,QAAS2kE,kBACtC,IAAM7kF,QACEzP,KAA6BiS,QAA7BjS,KAAMW,OAAuBsR,QAAvBtR,OAAQ8zF,WAAexiF,QAAfwiF,WACtBhlF,KAAKtU,KAAKwF,OAAOzD,IAAI,SAAApP,GAAC,OAAIA,EAAEC,QAH+B,IAInD4gG,YAA2Bh/D,QAA3Bg/D,YAAamG,UAAcnlE,QAAdmlE,UAarB,OAZA90F,KAAKjC,QAAQ,SAACjQ,GACV,IAAMkiB,OACNrP,OAAO5C,QAAQ,SAACu4F,SAAU9oG,GACtB,IAAMqnD,SAAWyhD,SAAStrF,UAAYnX,gCAAiBE,SAAW+gG,UAAUwB,SAASvoG,MAAQ,EACvF6e,aAAe0pF,SAAShmG,OAAS8D,yBAAUC,SAAWogG,WAAW52F,OAAOrQ,GAAGof,eAG3Ene,MAFc4lG,sCAA6BF,oBAAWvnF,aACxDioC,SAAU85C,aAAa2H,SAAStrF,SAAUspF,iBAChCa,CAAYrnG,EAAEN,IAC5BwiB,IAAI7U,KAAK1M,SAEbghB,KAAKtU,KAAK6U,OAEPP,KAyHW4mF,EACVr2F,UACAW,cACA8zF,uBACD9kE,QAASolE,cACZqB,cAAgB,YACb,CACHp5E,WAAWjf,QAAQ,SAACkB,MAChB,IAAM3O,KAAO2O,KAAK+L,QAAU/L,KAAK+L,QAAU/L,KAAK3O,KAChDkkG,eAAWlkF,OAAA+kF,2BAAOb,aAAPa,2BAAuBL,cAAc/1F,KAAKlR,KAAMuC,UAG/D,IAAMimG,YAAclB,2BAAAmB,WAAQhrF,IAAX6pF,2BAAkBnnG,OAAOskB,OAAOqiF,yBACxBD,QAAU,EAAI13E,SAASjV,OAAO,SAAAna,GAAC,OAAqC,IAAjCyoG,YAAYr7F,QAAQpN,EAAEC,QAC5EmvB,UAEWnf,QAAQ,SAACkB,MACtB,IAAM3O,KAAO2O,KAAK+L,QAAU/L,KAAK+L,QAAU/L,KAAK3O,KAChDkkG,eAAWlkF,OAAA+kF,2BAAOb,aAAPa,2BAAuBL,cAAc/1F,KAAKlR,KAAMuC,UAInE,OACIiiG,QAASiC,YACT4B,8BAQKK,mBACTr7D,SAAU,SAAAA,SAACp7B,KAAM6B,OAAQ8tB,SAErB,OADe4kE,0BAAiBv0F,KAAM6B,OAAQ8tB,WAKzC+mE,iBAAmB,0SC3LXC,2BAIjB,SAAAA,gKAAeC,CAAA3hG,KAAA0hG,SACX1hG,KAAK4hG,OAAS,KACd5hG,KAAK65F,UAAY4H,iBACjBzhG,KAAK6hG,WAAa,KAClB7hG,KAAKovF,QAAUpvF,KAAKglB,YAAYpF,iSAahC,OAAIxa,UAAE1D,OAAS,GACX1B,KAAKovF,QAAU7hB,eAAevtE,KAAKovF,QAANhqF,UAAA1D,QAAA,OAAA4L,EAAAlI,UAAA,IACtBpF,MAEJA,KAAKovF,8CAORplF,MAIJ,OAHAhK,KAAK4hG,OAAS53F,KAAKmS,MACnBnc,KAAK65F,eAA8BvsF,IAAlBtD,KAAKw3F,SAAyBx3F,KAAKw3F,SAAWC,iBAC/DzhG,KAAK6hG,WAAa73F,KAAK5H,UAChBpC,6CAGF8hG,KAEL,OADA9hG,KAAKy6B,SAAWqnE,IACT9hG,2CAGH+xB,OACJ,IAAIhnB,KACE6B,OAAS5M,KAAKovF,QACdmO,kBAAoB3wF,OAAO2wF,kBAC3Bn7F,UAAYpC,KAAK6hG,WACjBlE,UAAY/wF,OAAO+wF,UACnBxhF,MAAQnc,KAAK4hG,OAUnB,GARA5hG,KAAK+hG,OAAShwE,OAEVhnB,KADAoR,iBAAiBtT,MACVsT,MAEA/Z,qBAAqB0S,SAAW1S,UAAUpC,KAAK4hG,OAAQ5hG,KAAKy6B,UAC/D+mE,kBAASxhG,KAAK65F,WAAW75F,KAAK4hG,OAAQ5hG,KAAK4M,SAAU5M,KAAKy6B,qBAG9C3lB,SAChBid,MAAMwqD,KAAKxxE,YACR,CACH,IAAIuyF,QAAUvyF,KACVo2F,cAAgB,UAEhB3zE,eAAeziB,QACfuyF,QAAUvyF,KAAKuyF,QACf6D,cAAgBp2F,KAAKo2F,eAGzB,IAAMt/D,KAAOmlD,YAAYj1D,MAAO,OAAQovE,eAAhB,GAAA9lF,OAAmCzO,OAAO+tF,YAA1C,uBACpB,SAAA9hG,GAAC,OAAIA,IAET,GAAsB,UAAlBsoG,cAA2B,CAC3B,IAAMa,MAAQhb,YAAYnlD,KAAM,SAAU,GAAjB,GAAAxmB,OAAwBzO,OAAO+tF,YAA/B,mBACnBsH,MAAQjb,YAAYgb,MAAO,SAAU,GAAlB,GAAA3mF,OAAyBzO,OAAO+tF,YAAhC,yBACnBngF,KAAOwsE,YAAYib,MAAO,KAAM3E,QAAd,GAAAjiF,OAA0BzO,OAAO+tF,YAAjC,uBACxBngF,KAAK+qB,KAAK,SAAU1sC,EAAGN,GACnBuuF,6BAAc9mF,MAAMi8E,QAApB,GAAA5gE,OAA+BzO,OAAO+tF,YAAtC,uBAAAt/E,OAAuE9iB,IAAK,KAElEyuF,YAAYxsE,KAAM,KAAM,SAAA3hB,GAAC,OAAIA,GAAlB,GAAAwiB,OAAwBzO,OAAO+tF,YAA/B,wBACnBp1D,KAAK,SAAU1sC,GACjBiuF,6BAAc9mF,MAAMu8E,KAAK1jF,SAE1B,CACH,IAAM2hB,MAAOwsE,YAAYnlD,KAAM,MAAOy7D,QAAd,GAAAjiF,OAA0BzO,OAAO+tF,YAAjC,iBAClBj7B,OAAQsnB,YAAYxsE,MAAM,OAAQ,SAAA3hB,GAAC,OAAIA,GAApB,GAAAwiB,OAA0BzO,OAAO+tF,YAAjC,qBACzBj7B,OAAMrO,KAAK,QAAX,GAAAh2C,OAAuBzO,OAAO+tF,YAA9B,qBACA5S,yBAAUvtE,OACN6iF,OAAQM,YAEZ5V,yBAAUroB,QACNn8B,QAAS,eACT2+D,eAAA,GAAA7mF,OAAmBzO,OAAO8jD,QAA1B,QAGJgP,OAAMn6B,KAAK,SAAU1sC,GACjB,IAAMspG,GAAKrb,6BAAc9mF,MAEzB,GADAmiG,GAAG5lB,KAAK,IACJ1jF,aAAaI,OACb,GAAe,SAAXJ,EAAEwC,KAAiB,CACnB,IAAMqnC,IAAMskD,YAAYmb,GAAI,OAAQ,IAC9Bz/E,KAAOskE,YAAYtkD,IAAK,QAAS,IACjC69D,MAAQ1nG,EAAE0nG,iBAAiBzrF,SAAWjc,EAAE0nG,MAAQ/wB,uBAAU32E,EAAE0nG,OAElEzY,wBAASplD,KACLvG,EAAG,EACH34B,EAAG,EACHq2B,MAAO0jE,kBACPzjE,OAAQyjE,oBAEZzV,wBAASplE,MACL7pB,EAAG0nG,MAAM7nE,KAAK7/B,EAAE6/B,KAAb6nE,GACHvmD,UAAS,aAAA3+B,OAAekiF,kBAAoB,EAAnC,MAAAliF,OAAyCkiF,kBAAoB,EAA7D,OAEbxV,yBAAUrlE,MACNi6B,KAAM9jD,EAAE25C,QAEZu1C,yBAAUrlD,KACN7I,MAAK,GAAAxe,OAAKkiF,kBAAL,MACLzjE,OAAM,GAAAze,OAAKkiF,kBAAL,aAGV4E,GAAG5lB,KAAK1jF,EAAEW,OACVX,EAAEqmC,WAAaijE,GAAGlmB,QAAQpjF,EAAEqmC,WAAW,GACvC6oD,yBAAUoa,GAAItpG,EAAEk/B,YAGpBoqE,GAAG5lB,KAAK1jF,MAKxB,OAAOmH,2CAKP,OADAA,KAAK4hG,OAAS,KACP5hG,6DA5HP,IAAM4M,OAASgT,6BAAc09E,QAE7B,OADA1wF,OAAO+tF,YAAc/6E,6BAAc+6E,YAC5B/tF,qTCZMw1F,2BAMjB,SAAAA,QAAaC,cAAezJ,oKAAc0J,CAAAtiG,KAAAoiG,SACtC,IAAIG,mBAAqB3J,aACzB54F,KAAKgkF,IAAM15E,cACXtK,KAAKovF,WACLpvF,KAAK4M,WACL,IAAM41F,YAAcxiG,KAAKovF,QACnBuL,YAAc6H,YAAY7H,YAC1B8H,aAAeD,YAAYlF,QAAQO,gBACnC9mE,UAAYiwD,YAAYqb,cAAe,OAAQ,GAAxB,GAAAhnF,OAA+Bs/E,YAA/B,uBAC7B36F,KAAKi5B,WAAalC,UAClB/2B,KAAK0iG,kBAAoB3rE,UAAU7D,OAAO,OAAO6E,MAAM,WAAY,YACnE/3B,KAAK2iG,kBAAoB3iG,KAAK0iG,kBAAkBxvE,OAAO,OAAOm+B,KAAK,QAA1C,GAAAh2C,OAAsDs/E,YAAtD,KAAAt/E,OAAqEonF,eAC9FziG,KAAK++F,mBAAqB/+F,KAAK0iG,kBAAkBxvE,OAAO,OAAO6E,MAAM,WAAY,YACjF/3B,KAAK6+F,cAAgB7+F,KAAK0iG,kBAAkBxvE,OAAO,OAE9C0lE,eACD2J,mBAAqBF,cAAcnvE,OAAO,OAAO6E,MAAM,iBAAkB,SAE7E/3B,KAAK4iG,aACL5iG,KAAK6iG,2BAA6B/b,6BAAcyb,oBAC3CrvE,OAAO,KACPm+B,KAAK,QAFwB,GAAAh2C,OAEZmnF,YAAY7H,YAFA,KAAAt/E,OAEemnF,YAAYpF,qBAC7D,IAAMtmE,GAAK92B,KAAKgkF,IACV0W,aAAe8H,YAAY9H,aAC3BoI,mBAAqB14B,sBAAsBswB,aAAc5jE,GAAI0rE,YAAY7H,aAE/E5S,yBAAU/nF,KAAK6+F,cAAe1B,eAC9BpV,yBAAU/nF,KAAK++F,mBAAoB5B,eACnCn9F,KAAK+iG,SAASD,mBAAmB//F,KAAK,MACtC/C,KAAK+iG,SAASP,YAAYtjE,WAC1Bl/B,KAAKm7F,wRASL,GAAI/1F,UAAO1D,OAAS,EAAG,CACnB,IAAMshG,QAAUz1B,kBAAmBvtE,KAAKglB,YAAYpF,iBAEpD,OADA5f,KAAKovF,QAAU7hB,eAAey1B,QAAD59F,UAAA1D,QAAA,OAAA4L,EAAAlI,UAAA,IACtBpF,KAEX,OAAOA,KAAKovF,kDAeNlwD,WAEN,OADAl/B,KAAK0iG,kBAAkBzmB,QAAQ/8C,WAAW,GACnCl/B,+CAIP,OAAIoF,UAAI1D,QACJ1B,KAAKy6B,SAALr1B,UAAA1D,QAAA,OAAA4L,EAAAlI,UAAA,GACOpF,MAEJA,KAAKy6B,iDAGP3hC,KAAMiS,MAA0B,IAApBk4F,cAAoB79F,UAAA1D,OAAA,QAAA4L,IAAAlI,UAAA,GAAAA,UAAA,MAC/BwH,OAAS5M,KAAK4M,SACZ+tF,YAAgB/tF,OAAhB+tF,YACF8H,aAAe71F,OAAO0wF,QAAQp+D,UAC9B98B,UAAYwK,OAAOxK,UACnB88B,UAAY+jE,cAAc/jE,WAAd,GAAA7jB,OAA8Bs/E,YAA9B,KAAAt/E,OAA6ConF,aAA7C,KAAApnF,OAA6DviB,MACzEwkG,QAAUt9F,KAAK4iG,UAAU9pG,MAAQkH,KAAK4iG,UAAU9pG,OAAS,IAAI4oG,gBAC7D3qE,UAAYiwD,YAAYhnF,KAAK2iG,kBAAmB,OAAQM,cAAch9E,OAAQiZ,WACpFnI,UAAUs6B,KAAK,QAAf,GAAAh2C,OAA2Bs/E,YAA3B,KAAAt/E,OAA0ConF,aAA1C,KAAApnF,OAA0D6jB,YH5BjC,SAApBgkE,kBAAqBlrE,gBAAiBkH,WAC/ClH,gBAAgB+4B,UAAU7xB,WAAW3uB,KAAK,SAAC5V,EAAGyI,GAAJ,OAAUzI,EAAIyI,IG4BpD8/F,CAAkBljG,KAAK2iG,kBAAN,IAAAtnF,OAA6Bs/E,YAA7B,KAAAt/E,OAA4ConF,eAC7D,IAAMU,YAAcv2F,OAAO0wF,QAoB3B,OAnBA2F,cAActI,YAAc36F,KAAKovF,QAAQuL,YACzC2C,QAAQ1wF,OAAOu2F,aAEF,OAATp4F,MACAuyF,QAAQ73D,QACR1O,UAAUyO,gBACHxlC,KAAK4iG,UAAU9pG,QAEtBwkG,QAAQ3pE,QACJxX,MAAOpR,KACP3I,UAAW6gG,cAAc7gG,WAAaA,YAE1Ck7F,QAAQ5iE,QAAQ16B,KAAKy6B,UACrB6iE,QAAQ8F,OAAOrsE,YAGd99B,OAAO6M,KAAK9F,KAAK4iG,WAAWlhG,QAC7B1B,KAAKm7F,OAEFn7F,uDAIP,OAAO/G,OAAOskB,OAAOvd,KAAK4iG,qDASpBzmE,EAAG34B,GAAc,IAAXuoE,KAAW3mE,UAAA1D,OAAA,QAAA4L,IAAAlI,UAAA,GAAAA,UAAA,MACvB,IAAKnM,OAAO6M,KAAK9F,KAAK4iG,WAAWlhG,OAE7B,OADA1B,KAAKm7F,OACEn7F,KAEXA,KAAK+8F,OACL,IAAMrhD,OAAS17C,KAAKqjG,QACdC,gBAAkBv3B,KAAKu3B,gBAE7B,GAAI5nD,QAAU4nD,gBAAiB,CAC3B,IAAMx0E,KAAO9uB,KAAK0iG,kBAAkB5zE,OAC9BliB,OAAS5M,KAAKovF,QACdmU,cAAgB32F,OAAOkxF,MAAMC,SAC7BO,WAAaiF,cAAgB,EAAI32F,OAAOkxF,MAAMplE,KAC9C8qE,YAAcxjG,KAAKi/F,kBACnBwE,YLxJQ,SKwJMD,aL3JL,UK2JmCA,YAC7ChgG,EAAIsrB,KAAK8I,aAAe0mE,WAAc5iD,OAAOl4C,GAAKA,EAAKk4C,OAAOl4C,EAAIk4C,OAAO5hB,OACzEqC,EAAIrN,KAAK+I,YAAcymE,WAAc5iD,OAAOvf,GAAKA,EAAKuf,OAAOvf,EAAIuf,OAAO7hB,MAE7E,IAAK0pE,cACD,GAAIE,YAAa,CACb,IAAI/gF,KACJ1iB,KAAK6+F,cAAc9mE,MAAM,UAAW,QACpC/3B,KAAK++F,mBAAmBhnE,MAAM,UAAW,QACzC/3B,KAAK6iG,2BAA2B9qE,MAAM,UAAW,SACjD,IAAM2rE,UAAY1jG,KAAK6iG,2BAA2B9xC,UAAU,QAAQhmD,MAAM,IACpEqmD,MAAQsyC,UAAUtyC,QAAQl+B,OAAO,QLnKjC,SKoKFswE,YACA9gF,KAAO,KAAArH,OAAK8gB,EAAL,KAAA9gB,OAAU7X,EAAIsrB,KAAK8I,aAAe,EAAlC,OAAAvc,OAAyCqgC,OAAOvf,EAAIuf,OAAO7hB,OAA3D,IAAAxe,OACGqgC,OAAOl4C,EAAIk4C,OAAO5hB,OAAS,GLzKlC,UK0KI0pE,YACP9gF,KAAO,KAAArH,OAAK8gB,EAAIrN,KAAK+I,YAAd,KAAAxc,OAA6B7X,EAAIsrB,KAAK8I,aAAe,GAArD,MAAAvc,OACSqgC,OAAOvf,EADhB,KAAA9gB,OACqBqgC,OAAOl4C,EAAIk4C,OAAO5hB,OAAS,GL1KnD,WK2KG0pE,cACP9gF,KAAO,KAAArH,OAAK8gB,EAAIrN,KAAK+I,YAAc,EAA5B,KAAAxc,OAAiC7X,EAAIsrB,KAAK8I,cAA1C,MAAAvc,OACKqgC,OAAOvf,EAAIuf,OAAO7hB,MAAQ,EAD/B,KAAAxe,OACoCqgC,OAAOl4C,IAEtD4tD,MAAMvnD,MAAM65F,WAAWryC,KAAK,IAAK3uC,MAAMqV,MAAM,UAAW,aACrD,CACH,IAAMomE,SAAWH,mBAAYwF,YAAa9nD,QACtCvf,IACA34B,IACA46F,UAAWtvE,KAAK8I,aAChBymE,SAAUvvE,KAAK+I,aAChB73B,KAAKovF,SAERuP,kBAAW3+F,KAAMA,KAAKi/F,kBAAmBd,UACzCn+F,KAAK6iG,2BAA2B9qE,MAAM,UAAW,SAK7D,IAAMkpB,OAASjhD,KAAK2jG,UAChBxnE,EAAG,EACH34B,EAAG,GAKP,OAHAxD,KAAK0iG,kBAAkB3qE,MAAM,OAA7B,GAAA1c,OAAwC4lC,OAAO9kB,EAAIA,EAAnD,OAA0DpE,MAAM,MAAhE,GAAA1c,OACO4lC,OAAOz9C,EAAIA,EADlB,OAGOxD,mEAQSi+F,KAAuB,IACnC/1F,IADmCuM,MAAAzU,KAAlBwiG,YAAkBp9F,UAAA1D,OAAA,QAAA4L,IAAAlI,UAAA,GAAAA,UAAA,MAEnCw+F,YAAcpB,YAAYoB,YAE9B,GADA5jG,KAAK+8F,QACAkB,IAED,OADAj+F,KAAKm7F,OACEn7F,KAGX,IAAMkkE,OAASlkE,KAAK6jG,QACd/0E,KAAO9uB,KAAK0iG,kBAAkB5zE,OAEpC9uB,KAAK0iG,kBAAkB3qE,MAAM,MAAO,OACnBA,MAAM,OAAQ,OAC/B,IAAMF,YAAc/I,KAAK+I,YAAc,EACjCD,aAAe9I,KAAK8I,aAAe,EACnChrB,OAAS5M,KAAKovF,QACdnuC,OAASjhD,KAAK2jG,QACdJ,cAAgB32F,OAAOkxF,MAAMC,SAC7B+F,UAAYP,cAAgB,EAAI32F,OAAOkxF,MAAMplE,KAC7C4/B,UAA4BhrD,IAArBk1F,YAAYlqC,MAAqBkqC,YAAYlqC,KACpDyrC,SAAW9F,IAAIz6F,EAEfwgG,KAAO/F,IAAI9hE,EAAI8hE,IAAIpkE,MAAQonB,OAAO9kB,EAClC8nE,WAAa//B,OAAOrqC,MAAQmqE,KAC5BE,UAAYjG,IAAI9hE,EAAI8kB,OAAO9kB,EAAI+nC,OAAO/nC,EACtCgoE,YAAcJ,SAAYnsE,aAAeksE,UACzCM,cAAgBH,YAAcpsE,YAAcisE,UAC5CO,aAAeH,WAAarsE,YAAcisE,UAwGhD,OA/BA9jG,KAAKqjG,QAAUpF,IACV2F,cAEGA,YADAO,YACc,WACPC,eAAiBC,aACV,aAEA,YAIF,eAAhBT,YACA17F,IAnFuB,SAArBo8F,qBACF,IAAI7jE,SACAtE,EAAI8hE,IAAI9hE,EAAI8hE,IAAIpkE,MAChBr2B,EAAIy6F,IAAIz6F,EAwBZ,OAtBI4gG,eACA3jE,SL/OY,OKgPZtE,GAAK2nE,WACEO,cACPloE,EAAI8hE,IAAI9hE,EAAItE,YACZ4I,SLlPa,QKmPbtE,GAAK2nE,YAELrjE,SAAW,OACXtE,GAAK2nE,WAEL7F,IAAInkE,OAASlC,eACbp0B,EAAIK,KAAK6P,IAAI,EAAGuqF,IAAIz6F,EAAIy6F,IAAInkE,OAAS,EAAIlC,aAAe,KAWxD6I,kBACA09D,SATaH,mBAAYv9D,SAAUw9D,KACnC9hE,IACA34B,IACA46F,UAAWxmE,aACXymE,SAAUxmE,aACXpjB,MAAK26E,SAKJjzD,IACA34B,KAoDE8gG,GACiB,aAAhBV,cACP17F,IAlDqB,SAAnBq8F,mBACF,IAAI9jE,SACAj9B,EAEA24B,EAAI8hE,IAAI9hE,EAAItE,YAAc,EAAIomE,IAAIpkE,MAAQ,EAwB9C,OArBKqqC,OAAOrqC,OAASokE,IAAI9hE,EAAI8kB,OAAO9kB,GAAMtE,YACtCsE,EAAI+nC,OAAOrqC,MAAQhC,YAAcopB,OAAO9kB,EAChCA,EAAI8kB,OAAO9kB,EAAK+nC,OAAO/nC,IAC/BA,EAAI+nC,OAAO/nC,GAGXgoE,aACA3gG,EAAIy6F,IAAIz6F,EAAIo0B,aAAeksE,UAC3BrjE,SLzRc,WK2Rdj9B,EAAIy6F,IAAIz6F,EAAIy6F,IAAInkE,OAASgqE,UACzBrjE,SL3RW,QKsSXA,kBACA09D,SATaH,mBAAYv9D,SAAUw9D,KACnC9hE,IACA34B,IACA46F,UAAWxmE,aACXymE,SAAUxmE,aACXpjB,MAAK26E,SAKJjzD,IACA34B,KAkBE+gG,IAGVvkG,KAAKwkG,WACDroE,EAAGj0B,IAAIi0B,EACP34B,EAAG0E,IAAI1E,GAGXxD,KAAKykG,UAAYv8F,IAAIi2F,SAChBoF,eAGDvjG,KAAK6+F,cAAc9mE,MAAM,UAAW,QACpC/3B,KAAK++F,mBAAmBhnE,MAAM,UAAW,SAHzC4mE,kBAAW3+F,KAAMkI,IAAIu4B,SAAUv4B,IAAIi2F,UAKvCn+F,KAAKi/F,kBAAoB/2F,IAAIu4B,SAC7B63B,MAAQt4D,KAAKygC,SAASv4B,IAAIi0B,EAAGj0B,IAAI1E,GAC1BxD,yCAUP,OAFAA,KAAK0iG,kBAAkB3qE,MAAM,UAAW,QACxC/3B,KAAK6iG,2BAA2B9qE,MAAM,UAAW,QAC1C/3B,yCASP,OADAA,KAAK0iG,kBAAkB3qE,MAAM,UAAW,SACjC/3B,2CAGHkkE,SAEJ,OADAlkE,KAAK6jG,QAAU3/B,QACRlkE,2CAGHihD,SAEJ,OADAjhD,KAAK2jG,QAAU1iD,QACRjhD,6CAOP,OAHAA,KAAK0iG,kBAAkBl9D,SACvBxlC,KAAK++F,mBAAmBv5D,SACxBxlC,KAAK6iG,2BAA2Br9D,SACzBxlC,6DA1SP,OAAO4f,shBC5ER,IAAM8kF,uBACTC,kBAAmB,SAAAA,kBAACjyF,IAChB,IAAMsK,QAAUtK,GAAGyK,UACb8K,SAAWjL,QAAQtR,OAAOsH,OAAO,SAAAna,GAAC,OAAIA,EAAEwC,OAAS8D,yBAAUC,UAC3DwlG,gBAAkBlyF,GAAGkV,SAAS,IAAKK,SAASlW,OAAO,SAACC,IAAKpI,GAE3D,OADAoI,IAAIpI,EAAE9Q,MAAuB,UAAf8Q,EAAE8N,SAAuB,MAAQ9N,EAAE8N,SAC1C1F,UAEL5G,UAAYsH,GAAG9D,gBAAgBxD,YAC/By5F,WAAaD,gBAAgBvnF,kBAC/BE,SACA/jB,MAAK,GAAA6hB,OAAK2B,QAAQjS,KAAKrJ,QACvBq2B,OACIkJ,cAAe,SAEpB,kBACG6jE,aAAe78E,SAAShgB,IAAI,SAAApP,GAAC,OAAIA,EAAEC,OAUzC,OATIgsG,aAAapjG,SACb6b,UAAMlC,OAAA0pF,6BAAOxnF,SAAW,IAAAlC,OAAKjQ,UAAU05F,aAAa,IAAIptF,WAAWmmC,cAA3C,MAAAxiC,OAA6DypF,aAAa,KAE1FtrG,MAAK,GAAA6hB,OAAKupF,gBAAgBznF,UAAUpS,KAAK,GAAG85F,WAAWC,aAAa,IAAI7iG,OAAOy7C,QAAQ,IACvF3lB,OACIkJ,cAAe,aAIvB1jB,ssDCnBK6kF,4DACjB,SAAAA,UAAwB,IAAA4C,iBAAAvwF,yKAAAwwF,CAAAjlG,KAAAoiG,SAAA,QAAAv7B,KAAAzhE,UAAA1D,OAARgf,OAAQ,IAAA7X,MAAAg+D,MAAAC,KAAA,EAAAA,KAAAD,KAAAC,OAARpmD,OAAQomD,MAAA1hE,UAAA0hE,MAAA,OACpBryD,MAAAywF,kCAAAllG,MAAAglG,iBAAAG,uBAAA/C,UAAA1pG,KAAA6O,MAAAy9F,kBAAAhlG,MAAAqb,OAASqF,WACJ0kF,aACL3wF,MAAKqlF,YAAc4K,sBACnBjwF,MAAKolF,UAAY,UAJGplF,yXADS4lF,4UAsB1BxM,aAAc3jE,SAAuB,IAAdvjB,QAAcvB,UAAA1D,OAAA,QAAA4L,IAAAlI,UAAA,GAAAA,UAAA,MACpCigG,YAAc,EACdC,WAAa,EACXroF,UAAY4wE,aAAaN,YAAYpxE,MACrCue,QAAU16B,KAAKq0F,SAAS35D,QACxBw9D,WAAal4F,KAAK+6F,iBACxB,GAAK99E,UAAUsoF,WAAkC,OAArBr7E,QAAQxN,WAA4D,IAAtCmxE,aAAaqH,qBAEnE,OADAl1F,KAAKm7F,KAAKx0F,QAAS,MACZ3G,KAGX,IAAMwlG,SAAWxlG,KAAKolG,UAChBx4F,OAAS5M,KAAK4M,SACd64F,UACF5rE,MAAOq+D,WAAWr+D,MAClBC,OAAQo+D,WAAWp+D,QAEjBk/D,eAAiB9uE,QAAQ8uE,eACzBn5F,IAAM+M,OAAOg0B,QACb8kE,cACAC,WtBjDY,esBiDC/4F,OAAOlT,KACpB0hG,UAAY1gE,QAAQ49D,gBACpB1vF,OAASwyF,UAAUxyF,OAEnBg9F,oBADYh9F,OAAOuzB,EAAE,IAAKvzB,OAAOuzB,EAAE,GAAG9gC,SAAW8D,yBAAUE,WAE3DwmG,WAAa37E,QAAQuW,SACrBqlE,SACA10C,SACA7qC,KAAOtJ,UAAUE,UAAUoJ,KAC7Bo/E,WACAD,WAAWx/F,KAAXqB,MAAAm+F,WAAUK,0BAASx/E,KAAKte,IAAI,SAAApP,GAAC,OAAIokB,UAAUa,OAAO,SAAC2J,UAAWlvB,GAAZ,OAAkBA,IAAMM,IACtEmlB,WAAW,QAGf0nF,WAAWx/F,KAAK+W,WAGpB,IAAIy+B,OAASxxB,QAAQwxB,OACjB9pC,gBACJ,GAAI8pC,OAAQ,CACR9pC,aAAe8pC,OAAO,OAGtB,IAFA,IAAMsqD,aAAe97E,QAAQ87E,aACvBC,WACG1tG,EAAI,EAAGkQ,IAAMmJ,aAAalQ,OAAQnJ,EAAIkQ,IAAKlQ,KACD,IAA3CytG,aAAa//F,QAAQ2L,aAAarZ,KAClC0tG,QAAQ//F,KAAK3N,GAGrBmjD,OAASA,OAAOzzC,IAAI,SAAApP,GAAC,OAAIA,EAAEma,OAAO,SAACpJ,EAAGrR,GAAJ,OAAkC,IAAxB0tG,QAAQhgG,QAAQ1N,OAQhE,IALA,IAAM2tG,eAAiBxrE,QAAQyrE,6BAA6BzqD,QAAUxxB,QAAQxN,UAC1E2d,SAAS,IAIJ9hC,GAAI,EAAGA,GAAImtG,WAAWhkG,OAAQnJ,KAAK,CACxC,IAAI6tG,QAAUF,eAAe3tG,IAC7B,GAAIotG,WAAY,CACZ,IAAM59E,WAAa29E,WAAWntG,IAAG4kB,UAAUzR,OAAOsH,OAAO,SAAAna,GAAC,OAAIA,EAAEwC,OAAS8D,yBAAUE,YAC9E4I,IAAI,SAAApP,GAAC,OAAIA,EAAEC,OAEhBstG,SADAA,QAAU1rE,QAAQyrE,6BAA6BT,WAAWntG,IAAGi0B,QAAQzE,aAAesS,SAAS,MACxE+rE,QAAQ,GAGjC,IAAIC,GAAKX,WAAWntG,IAChBqU,OAAOhE,SACPy9F,GAAKA,GAAG75E,QAAQ5f,OAAOhE,QACnBoV,WAAW,KAGfpR,OAAO05F,gBACPD,GAAKz5F,OAAO05F,cAAcD,GAAI9tG,KAGlC64D,MAAM74D,KAAK,EAnB6B,IAoBfguG,gBAA+CrO,WAAhElgE,gBAAkCwuE,0BAA8BtO,WAA9BsO,0BACpCC,eAAiBF,gBAAgB3oB,wBACjC8oB,aAAexO,WAAWmK,cAAczkB,wBAExCv+C,WAAaqnE,aAAa5iE,KAAO2iE,eAAe3iE,KAChDxE,UAAYonE,aAAahmE,IAAM+lE,eAAe/lE,IAC9CimE,YAAcnB,SAASjtG,IAAKitG,SAASjtG,KAAM,IAAIquG,gBAAgBL,gBAC7DrO,WAAWU,cAEnBwC,UAAUlxE,QAAUA,QACpBkxE,UAAU/G,SAAWr0F,KAAKq0F,SAC1B+G,UAAUqE,aAAe/kE,QAAQ+kE,eACjCrE,UAAUyE,UAAYnlE,QAAQmsE,mBAC9BzL,UAAU1B,YAAch/D,QAAQg/D,cAChCiN,YAAYjsE,QAAQ0gE,WACpB,IAAMoG,SAAWkD,sBAAW/9F,QAAQ66F,UAiBpC,GAhBAmF,YAAYrJ,QAAQ32F,QAAQ66F,UAAYxhG,KAAK65F,UAAWwM,IACpDjkG,UAAWo/F,SACXv7E,MAAOtf,QAAQsf,QAEFrZ,OAAO5M,KAAK4M,UACZs3D,QACG/nC,EAAG,EACH34B,EAAG,EACHq2B,MAAO2sE,0BAA0B3sE,MACjCC,OAAQ0sE,0BAA0B1sE,SAErCmnB,QACG9kB,EAAGkD,YAAczyB,OAAOq0C,OAAO9kB,GAAK,GACpC34B,EAAG87B,WAAa1yB,OAAOq0C,OAAOz9C,GAAK,KAGnDw1F,eACA2N,YAAYlmE,SAASolE,WAAW1pE,EAAIt8B,IAAKgmG,WAAWriG,EAAI3D,SACrD,KAAIumG,QAUJ,CACHO,YAAYxL,OACZ,MAXAwL,YAAYG,oBACR3qE,EAAGiqE,QAAQjqE,EACX34B,EAAG4iG,QAAQ5iG,EACXq2B,MAAOusE,QAAQvsE,OAAS,EACxBC,OAAQssE,QAAQtsE,QAAU,IAE1B8pE,YAAa+B,WACRC,eAAiB,aAAe,gBAAct4F,IAO3D,GAAIq4F,WAAY,CACZ,IAAMllE,SAAWkmE,YAAYnC,UACvBuC,gBAAkBJ,YAAYjE,kBAAkB5zE,OAAO8uD,wBAI7D,GAFAynB,aAAe0B,gBAAgBjtE,OAASj6B,IACxCylG,YAAcyB,gBAAgBltE,MAAQh6B,IAClC+lG,eAAiBP,YAAcnN,WAAWp+D,OAASwrE,WAAapN,WAAWr+D,MAC3E,MAEJisE,MAAM5/F,MACFi2B,EAAGsE,SAAStE,EACZ34B,EAAGi9B,SAASj9B,EACZq2B,MAAOktE,gBAAgBltE,MACvBC,OAAQitE,gBAAgBjtE,OACxB6+D,QAASgO,eAKrB,IAAK,IAAM7sG,OAAO0rG,SACd,IAAKp0C,MAAMt3D,KAAM,CACb,IAAM6+F,QAAU6M,SAAS1rG,KACzB6+F,QAAQ2E,QAAQpzE,QAAQ9H,OAAQ,MAC3Bu2E,QAAQqO,cAActlG,SACvBi3F,QAAQnzD,gBACDggE,SAAS1rG,MAU5B,OANI6rG,cCzLiB,SAAhBsB,cAAiBnB,MAAO5hC,OAAQ0hC,gBACzC,IAAIpiG,EACAs2B,OACAqC,EACAtC,MACAthC,EAEEkQ,IAAMq9F,MAAMpkG,OACZwlG,kBAAoB,SAApBA,kBAAqBC,SAAUC,UAAWC,UAC5ClrE,EAAIgrE,SAAShrE,EACbtC,MAAQstE,SAASttE,MACjBr2B,EAAI2jG,SAAS3jG,EACbs2B,OAASqtE,SAASrtE,OAClB,IAAMg2B,OAAStsD,EAAIs2B,OACbiK,MAAQ5H,EAAItC,MAEd+rE,gBACIyB,SAAW7jG,EAAK4jG,UAAU5jG,EAAI4jG,UAAUttE,OAAUg2B,OAASs3C,UAAU5jG,KACrE4jG,UAAU5jG,EAAI6jG,SAAWF,SAAS3jG,EAAI4jG,UAAUttE,OAZhD,EAaQg2B,OAbR,IAeGu3C,SAAWlrE,EAAKirE,UAAUjrE,EAAIirE,UAAUvtE,MAASkK,MAAQqjE,UAAUjrE,KAC1EirE,UAAUjrE,EAAIkrE,SAAWF,SAAShrE,EAAIirE,UAAUvtE,MAhB5C,EAiBIkK,MAjBJ,IAwBZ,IAHA+hE,MAAMv1F,KAAK,SAAC5V,EAAGyI,GAAJ,OAAWwiG,eAAiBjrG,EAAE6I,EAAIJ,EAAEI,EAAI7I,EAAEwhC,EAAI/4B,EAAE+4B,IAC3D5jC,EAAI,EAECA,EAAI,EAAGA,EAAIkQ,IAAM,EAAGlQ,IACrB2uG,kBAAkBpB,MAAMvtG,GAAIutG,MAAMvtG,EAAI,IAG1C,GAAKutG,MAAMvtG,GAAGiL,EAAIsiG,MAAMvtG,GAAGuhC,OAAUoqC,OAAOpqC,QACnCgsE,MAAMvtG,GAAG4jC,EAAI2pE,MAAMvtG,GAAGshC,MAASqqC,OAAOrqC,MAM3C,IALI+rE,eACAE,MAAMvtG,GAAGiL,GAAMsiG,MAAMvtG,GAAGuhC,OAASgsE,MAAMvtG,GAAGiL,EAAK0gE,OAAOpqC,OAEtDgsE,MAAMvtG,GAAG4jC,GAAM2pE,MAAMvtG,GAAGshC,MAAQisE,MAAMvtG,GAAG4jC,EAAK+nC,OAAOrqC,MAEpDthC,EAAIkQ,IAAM,EAAGlQ,EAAI,EAAGA,IACrB2uG,kBAAkBpB,MAAMvtG,GAAIutG,MAAMvtG,EAAI,IAAI,GDgJ1C0uG,CAAcnB,MAAOL,SAAUG,gBAC/BE,MAAMh9F,QAAQ,SAAAgyF,KAAG,OAAIA,IAAInC,QAAQl4D,SAASq6D,IAAI3+D,EAAG2+D,IAAIt3F,GACjD8/F,iBAAiB,OAGlBtjG,uCAGL2G,SACF,IAAM6+F,SAAWxlG,KAAKolG,UACtB,IAAK,IAAMtrG,OAAO0rG,SACd,MAAOlrG,eAAe5B,KAAK8sG,SAAU1rG,KAAM,CACvC,IAAM0nG,SAAW76F,QAAQ66F,UAAYxhG,KAAK65F,UAC1C2L,SAAS1rG,KAAKwjG,QAAQkE,SAAU,MAChCgE,SAAS1rG,KAAKqhG,gEAtLtB,OACIv6D,QAAS,EACTqgB,QACI9kB,EAAG,EACH34B,EAAG,oDAMX,MAAO,ouDEtBM8jG,otBAAkBjN,6SAa5BxM,aAAc3jE,SAAS,IACtB4P,OACAytE,UACA9qC,GACA5iC,MAJsBplB,MAAAzU,KAAAwnG,aAStBxnG,KAAK4M,SAHLsyB,UANsBsoE,aAMtBtoE,UACAuoE,UAPsBD,aAOtBC,UACAC,UARsBF,aAQtBE,UAEEzqF,UAAY4wE,aAAaN,YAAYpxE,MACrC+7E,WAAal4F,KAAK+6F,iBACxB,GAAI7wE,QAAQxN,UAAYO,WAAaA,UAAUsoF,UAC3C,OAAOvlG,KAEX,GAAyB,OAArBkqB,QAAQxN,WAAsBO,UAE9B,OADAjd,KAAKm7F,OACEn7F,KAGX,IAAMgd,QAAUC,UAAUE,UACpBi+E,UAAYp7F,KAAKq0F,SAAS35D,QAAQ49D,gBAClC7B,KAAO2E,UAAU3E,KACjBG,WAAawE,UAAUxyF,OACvBA,OAASilF,aAAajlF,OACtBmC,KAAOiS,QAAQjS,KACfqS,aAAeH,UAAUI,kBACzBu7E,aAAeV,WAAWsC,gBAE1BmN,YA+BN,GA9BA/+F,OAAOE,QAAQ,SAACwC,OACZ,IAAMvC,WAAaqU,aAAa9R,QAAU8R,aAAa9R,OAAOrJ,MACxDysE,QAAU3jE,KAAK9C,IAAI,SAAApP,GAAC,OAAIA,EAAEkQ,cAC1B6+F,YAAc,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAIx9E,KAAK,SAAC/Z,KAC7D,IAAMw3F,UAAYjR,WAAWvmF,IAAI,IAAIA,IAAI,IACzC,OAAOw3F,WAAaA,UAAUxsG,SAAW8D,yBAAUE,YACJ,IAA3CwoG,UAAU/Q,aAAa7wF,QAAQqF,SAEvC,QAAkBgC,IAAds6F,WAA2B78F,KAAKrJ,OAAQ,CACxC,IAAMrG,KAAOusG,UAAU,GACjB13C,KAAOumC,KAAKp7F,MAAMusG,UAAU,IAC5BpuG,MAAQk1E,QAAQ,GACtB64B,UAAYr3C,KAAKosC,gBAAkB,EACnC7/B,GAAKvM,KAAKmsC,cAAc7iG,OAAS+tG,UAAY,EAAIrP,WAAW4P,QAC5D,IAAMC,UAAYlkG,KAAK6P,IAALnM,MAAA1D,KAAImkG,4BAAQvzF,MAAK4/E,SAAS35D,QAAQu/D,SAAShyF,IAAI,SAAAiyF,OAAK,OAAIA,MAAM+N,cAAc5sG,UACxFwE,IAAMgE,KAAK6P,IAALnM,MAAA1D,KAAImkG,4BAAQvzF,MAAK4/E,SAAS35D,QAAQu/D,SAAShyF,IAAI,SAAAiyF,OAAK,OAAIA,MAAMgO,iBAAiB7sG,UAC3Fy+B,OAASo+D,WAAWp+D,OACpBD,MAAQq+D,WAAWr+D,MACnB,IAAMsuE,QAAU1rC,GAAKsrC,UAAY,EAAIloG,IAAM,EACrCuoG,MAAQ3rC,GAAKsrC,UAAY,EAAIloG,IAAM,EACnCwoG,aAEFA,UAAUxvG,EADD,MAATwC,KACA,OAAAggB,OAAqB8sF,QAArB,SAAA9sF,OAAoC+sF,MAApC,OAAA/sF,OAA+Cwe,MAA/C,KAAAxe,OAAwD+sF,MAAxD,OAAA/sF,OAAmEwe,MAAnE,KAAAxe,OAA4E8sF,QAA5E,MAEA,KAAA9sF,OAAmB8sF,QAAnB,SAAA9sF,OAAkC+sF,MAAlC,SAAA/sF,OAA+C+sF,MAA/C,KAAA/sF,OAAwDye,OAAxD,OAAAze,OAAoE8sF,QAApE,KAAA9sF,OAA+Eye,OAA/E,MAEJuuE,UAAUnpE,UAAY6oE,UAAYN,UAAYC,UAC9CC,SAASzhG,KAAKmiG,cAGlBV,SAASjmG,OAAQ,CACjB,IAAM4mG,YAActoG,KAAKy/B,cAAcm5D,aAAc,KAAM,GAAI15D,WAClDl/B,KAAKy/B,cAAc6oE,YAAa,OAAQX,UAChDt2C,KAAK,IAAK,SAAAx4D,GAAC,OAAIA,EAAEA,IAAGk/B,MAAM,iBAAkB,QAChCs5B,KAAK,QAAS,SAAAx4D,GAAC,OAAIA,EAAEqmC,YAE1C,OAAOl/B,yCAIP,IAAMk/B,UAAYl/B,KAAK4M,SAASsyB,UAC1Bg5D,WAAal4F,KAAK+6F,iBACxBjU,6BAAcoR,WAAWsC,iBAAiBzpC,UAA1C,IAAA11C,OAAwD6jB,YAAasG,iEAnFrE,OACItG,UAAS,GAAA7jB,OxBTM,OwBSN,oBACTosF,UAAS,GAAApsF,OxBVM,OwBUN,cACTqsF,UAAS,GAAArsF,OxBXM,OwBWN,+DAKb,MAAO,6BCAFqpF,qBACT6D,KAjBW,SAATC,OAAU/2F,IAAKipB,QAAS8mE,UAAa,IAEnCjU,YAIA97E,IAJA87E,YACAG,WAGAj8E,IAHAi8E,WACApB,QAEA76E,IAFA66E,QACAR,YACAr6E,IADAq6E,YAGCyB,YAAY7rF,QAAWgsF,WAAWhsF,QAGnCg5B,QAAQ0/D,sBAAsB9N,QAAQ,MAAQkV,UAAU,GACxD9mE,QAAQ0/D,sBAAsB7M,eAAiBiU,UAAU,IAHzD9mE,QAAQ0/D,sBAAsBtO,eAAiB0V,UAAU,IAS7DiH,MAAO,SAAAA,MAACh3F,IAAKipB,SAAY,IAEjB6yD,YAGA97E,IAHA87E,YACAG,WAEAj8E,IAFAi8E,WACA5B,YACAr6E,IADAq6E,YAECyB,YAAY7rF,QAAWgsF,WAAWhsF,QAGnCg5B,QAAQ0/D,sBAAsB1M,cAAgB,SAAS,GACvDhzD,QAAQ0/D,sBAAsB7M,eAAiB,SAAS,IAHxD7yD,QAAQ0/D,sBAAsBtO,eAAiB,SAAS,IAMhE4c,UAAW,SAAAA,UAACj3F,IAAKipB,SAAY,IAErB6yD,YAKA97E,IALA87E,YACAG,WAIAj8E,IAJAi8E,WACArB,SAGA56E,IAHA46E,SACAC,QAEA76E,IAFA66E,QACAR,YACAr6E,IADAq6E,YAECyB,YAAY7rF,QAAWgsF,WAAWhsF,QAGnCg5B,QAAQ0/D,sBAAsB/N,SAAS,MAAQ,aAAa,GAC5D3xD,QAAQ0/D,sBAAsB9N,QAAQ,MAAQ,aAAa,IAH3D5xD,QAAQ0/D,sBAAsBtO,eAAiB,aAAa,wxCCrCnD6c,gEACjB,SAAAA,kBAAwB,IAAA3D,iBAAAvwF,qKAAAm0F,CAAA5oG,KAAA2oG,iBAAA,QAAA9hC,KAAAzhE,UAAA1D,OAARgf,OAAQ,IAAA7X,MAAAg+D,MAAAC,KAAA,EAAAA,KAAAD,KAAAC,OAARpmD,OAAQomD,MAAA1hE,UAAA0hE,MAAA,OACpBryD,MAAAo0F,2CAAA7oG,MAAAglG,iBAAA8D,gCAAAH,kBAAAjwG,KAAA6O,MAAAy9F,kBAAAhlG,MAAAqb,OAASqF,WACJm5E,UAAY,YACjBplF,MAAKqlF,YAAc4K,oBAHCjwF,mZADiBslF,8TAelClM,aAAc3jE,SAAuB,IAAdvjB,QAAcvB,UAAA1D,OAAA,QAAA4L,IAAAlI,UAAA,GAAAA,UAAA,MAClCo8F,SAAWxhG,KAAK85F,YAAYnzF,QAAQ66F,UAAYxhG,KAAK65F,WAM3D,OAJ0C,IAAtChM,aAAaqH,sBACbsM,SAAS3T,aAAc7tF,KAAM2G,QAAQ66F,UAAYxhG,KAAK65F,WAGnD75F,uDAdP,MAAO,sDAIP,MAAO,s1CCbM+oG,2wBAAqBhP,oUAa/BlM,aAAc3jE,SACjB,IAAMwQ,QAAU16B,KAAKq0F,SAAS35D,QACxBsuE,WAAanb,aAAaN,YAAYpxE,MAM5C,OALyB,OAArB+N,QAAQxN,SACRge,QAAQuuE,eAAeC,YAEvBxuE,QAAQyuE,gBAAgBp+F,KAAKi+F,YAE1BhpG,uDAnBP,MAAO,iDAIP,MAAO,wDAIP,OAAO,swDCNf,IAAMopG,iBAAW,SAAXA,SAAYC,UAAWC,cAAe5uE,QAASm2D,YACjD,IAAMoJ,UAwCN,OAvCIoP,WACAA,UAAUvgG,QAAQ,SAACygG,UACf,IAAMC,KAAOD,SAASC,KAChBC,SAAWH,cAAcE,MAC/B,GAAIC,UAAYA,SAASC,oBAAqB,CAC1C,IAAMC,iBAAmBJ,SAAS/rF,IAAIosF,SAChCA,UACFztE,EAAGkvC,WAAWs+B,iBAAkB,IAAK,SACrCnmG,EAAG6nE,WAAWs+B,iBAAkB,IAAK,SACrCn3D,MAAO64B,WAAWs+B,iBAAkB,QAAS,SAC7CjxE,MACIptB,MAAO+/D,WAAWs+B,iBAAkB,OAAQ,SAC5CnwG,MAAOq3F,WAAWgZ,qBAGpB/wG,KAAI,GAAAuiB,OAAMkuF,SAAS/rF,IAAI1kB,KAAnB,KAAAuiB,OAA2Bw1E,WAAW7rE,YAAYslE,cACtDwf,UACFC,UAAWrvE,QAAQ0uE,UACftwG,UACA0wG,KAAM,QACNtqE,UAAW2xD,WAAW7rE,YAAYpF,gBAAgBsf,UAClD0qE,kBACA5vD,WACI3+C,KAAM,YAEVm2D,WAAYq/B,WAAWmZ,sBACvBC,iBAAiB,EACjBxmF,OAAQ,SAAAA,OAAA/Q,IAAE,OAAIA,GAAGoL,OAAO,kBAAM,IAC1BE,WAAW,KAEfm8E,aAAa,EACbiJ,QAAQ,IAEZ8G,YAAaX,SAAS/rF,IAAI1kB,MAE9BmhG,OAAO/zF,KAAK4jG,aAIjB7P,QAGUkQ,oDACjB,SAAAA,eAAwB,IAAAnF,iBAAAvwF,4JAAA21F,CAAApqG,KAAAmqG,cAAA,QAAAtjC,KAAAzhE,UAAA1D,OAARgf,OAAQ,IAAA7X,MAAAg+D,MAAAC,KAAA,EAAAA,KAAAD,KAAAC,OAARpmD,OAAQomD,MAAA1hE,UAAA0hE,MAAA,OACpBryD,MAAA41F,kCAAArqG,MAAAglG,iBAAAsF,uBAAAH,eAAAzxG,KAAA6O,MAAAy9F,kBAAAhlG,MAAAqb,OAASqF,WACJ6pF,cACL91F,MAAK+1F,kBAHe/1F,8XADc4lF,gUAqBnB,IAAA1lF,OAAA3U,KACT06B,QAAU16B,KAAKq0F,SAAS35D,QACxB+vE,QAAU/vE,QAAQ+vE,UAClBnB,cAAgB5uE,QAAQgwE,WAAWpB,cACnCqB,aAAejwE,QAAQ6uE,WAM7B,OALA7uE,QAAQ/xB,QAAQiiG,0BAAhB,GAAAvvF,OACOwvF,0BAAiB77C,qBADxB,KAAA3zC,OACgDovF,QAAQt/B,UADxD,aAC8E,SAAAx4C,MAAmB,IAAf02E,UAAeyB,sBAAAn4E,KAAA,MACzFhe,OAAKo2F,QAAU3B,iBAASC,UAAWC,cAAe5uE,QAAS/lB,UAEnE3U,KAAK+qG,QAAU3B,iBAASuB,aAAcrB,cAAe5uE,QAAS16B,MACvDA,uEAIP,OACI+9F,UAAU,+DASd,OAAO,wCAGJlQ,cACH,IAAMpK,KAAOzjF,KACPid,UAAY4wE,aAAaN,YAAYpxE,MAC3C,IAA0C,IAAtC0xE,aAAaqH,qBAAgC,CAC7C,IACMsF,gBADax6F,KAAK+6F,iBACWP,gBAC7Bt7D,UAAS,GAAA7jB,OAAMrb,KAAK4M,SAASsyB,WAC7B+6D,OAASj6F,KAAK+qG,QACdzC,YAActoG,KAAKy/B,cAAc+6D,gBAAiB,KAAM,GAA1C,GAAAn/E,OAAiD6jB,UAAjD,eACCl/B,KAAKy/B,cAAc6oE,YAAa,IAAKrvG,OAAOskB,OAAO08E,SAC3D10D,KAAK,SAAU20D,OACxB,IAAM6P,UAAY7P,MAAM6P,UAClBiB,MAAQvnB,KAAKhkD,cAAcz/B,KAAM,IAAK+pG,UAAW7qE,WAFxB+rE,uBAAAH,sBAGXrnB,KAAK4Q,SAAS35D,QAAQwwE,eAAehR,MAAMgQ,aACjBiB,kCAAkCluF,WAJjD,GAIxBmuF,gBAJwBH,uBAAA,GAIPv/F,OAJOu/F,uBAAA,GAKzBI,qBAAuB,IAAIhtG,oBAAU+sG,gBAAiB1/F,QAC5Ds/F,MAAMzlE,KAAK,SAAU1sC,EAAGN,GACpBwxG,UAAUxxG,GAAGwS,KAAKsgG,sBAAsBt5E,MAAM/xB,UAI1D,OAAOA,+CA7DP,MAAO,oEAIP,OACIk/B,UAAS,GAAA7jB,O5B/DM,O4B+DN,mEAKb,MAAO,q0CCjEMiwF,2yBAA0BnB,qWAYvC,OACIpM,UAAU,qDAXd,MAAO,2EAIP,OACI7+D,UAAS,GAAA7jB,O7BVM,O6BUN,0zCCPAkwF,ovBAAqBpB,iVAYlC,OACIpM,UAAU,qDAXd,MAAO,sEAIP,OACI7+D,UAAS,GAAA7jB,O9BVM,O8BUN,+NCRd,IAAM+yE,yCAAkBod,oCAAAnc,uBAC1Boc,OAAoB,gBACjB3yG,KAAM,cACN6N,SACI66F,SAAU,SAEf,kBANwBgK,oCAAAnc,oBAAA,GAAAh0E,OAOvBowF,MAPuB,KAAApwF,OAOHowF,UACpB3yG,KAAM,UACN6N,SACI66F,SAAU,oBACVv7E,MAAO,EACPjT,OAAQ,SAAAA,OAAA0nB,SAAO,MAA8B,eAA1BA,QAAQ9tB,SAASlT,UAZjB8xG,oCAAAnc,oBAe1Boc,YACG3yG,KAAM,cACN6N,SACI66F,SAAU,cAEf,aACC1oG,KAAM,UACN6N,SACIsf,MAAO,OAEZ,YAzBwBulF,oCAAAnc,oBA0B1Boc,QAAqB,WA1BKD,oCAAAnc,oBA2B1Boc,SACG3yG,KAAM,cACN6N,SACI66F,SAAU,UAEf,uBAhCwBnS,qBCDlBqc,MAAQ,QAGRC,MAAQ,QACRC,OAAS,SACTC,KAAO,OACPC,MAAQ,QACRC,MAAQ,QAGRC,UACTpuD,EAAG,IACH35C,EAAG,IACHgoG,GAAI,KACJC,GAAI,MCbKtsF,mCACT+6E,YDHuB,OCIvBD,aAAc,aACdx7D,UAAW,GACX8b,YAAa,SACbhB,WACI3+C,KAAMqwG,OAEVhT,eAGAyT,sBAAuB,GACvBvC,UACIp3D,SACArW,KACA34B,KACAovD,MACAw5C,eACI5yG,MAAO,IAGfg4D,YACI2/B,OAAQ,QACRvN,SAAU,KAEdyoB,iBAAiB,2TCbAC,qhBAGb,MAAM,IAAIr9F,MAAMo+D,UAAUC,oEAS1B,MAAM,IAAIr+D,MAAMo+D,UAAUC,wDAU1B,MAAM,IAAIr+D,MAAMo+D,UAAUC,oDAW1B,MAAM,IAAIr+D,MAAMo+D,UAAUC,8DAQ1B,MAAM,IAAIr+D,MAAMo+D,UAAUC,gDAQ1B,MAAM,IAAIr+D,MAAMo+D,UAAUC,4FAa1B,MAAM,IAAIr+D,MAAMo+D,UAAUC,gFAc1B,MAAM,IAAIr+D,MAAMo+D,UAAUC,4FAY1B,MAAM,IAAIr+D,MAAMo+D,UAAUC,8DAU1B,MAAM,IAAIr+D,MAAMo+D,UAAUC,0EAQ1B,MAAM,IAAIr+D,MAAMo+D,UAAUC,wEAQ1B,MAAM,IAAIr+D,MAAMo+D,UAAUC,4EAQ1B,OAAOttE,6DAIP,MAAM,IAAIiP,MAAMo+D,UAAUC,sDAQ1B,MAAM,IAAIr+D,MAAMo+D,UAAUC,wDAI1B,MAAM,IAAIr+D,MAAMo+D,UAAUC,mCCxJrB96C,aACTikE,QACA1kE,SACAmsE,eACAuM,WACA1/F,QACA6B,UACA8sF,aACInvB,aAAc,SAAAA,aAAArpE,KAAG,OAAIA,2LCKtB,cAAMqrG,wBAAS,SACTC,qBAAM,MACNC,sBAAO,OACPC,uBAAQ,QAMRC,oBAAkBC,gCAAAC,uBAC1BC,sBAAuBz7B,QAAQC,UADLs7B,gCAAAC,oBAE1BC,wBAAyBz7B,QAAQI,YAFPm7B,gCAAAC,oBAG1BC,uBAAwBz7B,QAAQE,WAHNq7B,gCAAAC,oBAI1BC,qBAAsBz7B,QAAQG,SAJJq7B,qBCjBlBE,OAAS,SACTC,KAAO,OACPC,KAAO,WACPnB,iBAAQ,QACRoB,QAAU,UACVC,SAAW,WACXC,SAAW,WACXC,IAAM,MACNC,IAAM,MACNC,oBAAW,WACXC,WAAa,aACbC,UAAY,YCdZC,mCAAY,aACZC,SAAW,WACXH,qBAAa,aACbN,kBAAU,UACVH,iBAAS,SAETI,mBAAW,WASXS,OAAS,8LCHlBC,YAcAC,uBAdAD,YACAE,eAaAD,uBAbAC,eACAC,SAYAF,uBAZAE,SACAC,SAWAH,uBAXAG,SACAC,cAUAJ,uBAVAI,cACAC,aASAL,uBATAK,aACAC,gBAQAN,uBARAM,gBACAC,cAOAP,uBAPAO,cACAC,cAMAR,uBANAQ,cAIAh7B,UAEAw6B,uBAFAx6B,UACAi7B,UACAT,uBADAS,UAESC,UAAQC,6BAAAC,aAChBC,OAAmBd,aADHY,6BAAAC,UAEhBC,KAAiBr7B,WAFDm7B,6BAAAC,UAGhBC,SAAqBN,eAHLI,6BAAAC,UAIhBC,SAAqBL,eAJLG,6BAAAC,UAKhBC,UAAsBZ,gBALNU,6BAAAC,UAMhBC,WAAuBP,iBANPK,6BAAAC,UAOhBC,IAAgBX,UAPAS,6BAAAC,UAQhBC,IAAgBV,UARAQ,6BAAAC,UAShBC,oBAAqBT,eATLO,6BAAAC,UAUhBC,KAAiBJ,WAVDE,6BAAAC,UAWhBC,iBAAkBd,aAXFY,6BAAAC,UAYhBC,QAAoBR,cAZJO,WA6Dd,SAASE,0BAAaluF,QACzB,IAAKA,OAAOrlB,OAASmzG,SAAS9tF,OAAOrlB,MACjC,MAAM,IAAI4T,MAAJ,GAAAoM,OAAaqF,OAAOrlB,KAApB,+BAEV,IAAKwN,MAAMwB,QAAQqW,OAAOnf,OACtB,MAAM,IAAI0N,MAAM,oCAEpB,IAAI4/F,aAAe,KACbttG,MAAQmf,OAAOnf,MAErB,GAAImf,OAAOrlB,OAAS0xG,kBAAUrsF,OAAOytC,aAAc,CAE/C,GADA0gD,aAAeL,SAAS9tF,OAAOytC,cAC3BztC,OAAOytC,eAAiBwgD,IACxB,OAAOE,eAAettG,MAAMA,OAAOg8C,SAAS78B,OAAO68B,UAChD,GAAI78B,OAAOytC,eAAiBwgD,IAC/B,OAAOE,eAAettG,MAAMA,OAAO0+C,MAAMv/B,OAAOu/B,YAGpD4uD,aAAeL,SAAS9tF,OAAOrlB,MAMnC,OAHIqlB,OAAOrlB,OAAS8xG,oBAChB0B,eAAelvD,OAEZkvD,eAAettG,MAAMA,OC3GzB,IAAMqe,6CACTkX,GAAIxsB,cACJwkG,UACIpU,aAAc,aAElBqU,gBAAiB,GACjB9uD,KAAM,GACN06C,YFduB,OEevBz7D,UAAS,GAAA7jB,OFfc,OEed,SACTkiC,SAAU,EACV4Q,aAAc,SACd6gD,eAAe,EACfC,QACIC,SAAU,KACVC,WAAY,MAEhBvL,YAAa,OACbjsF,aAAc,SAAAA,aAAAzW,KAAG,OAAIA,KACrB0/B,QAAS,GACT+e,MAAM,EACNyvD,cAAe,GACfv2D,QAAQ,EACRkkD,MAAM,EACNsS,cAAc,EACdC,gBAAgB,EAChBC,gBAAgB,EAChBx3E,SACA18B,KAAM,SACNqkD,WAAY,KACZ2Q,WAAY,KACZy3C,QAAS,EACT0H,QAAS,GCvBPC,yBAAa,SAAbA,WAAcC,SAAUC,SAAUC,cACpC,IAAIV,SACEh/C,KAAOw/C,SAASx/C,OAChBtjD,OAAS8iG,SAAS9iG,SAClBijG,aAAeH,SAASG,eACxBV,WAAaO,SAASP,aACtBpoE,MAAQmpB,KAAKnpB,QAEbpC,OADYoC,MAAMpC,OAASoC,MAAM5B,UAAY4B,MAAMvwB,UAGrDotF,YAGAh3F,OAHAg3F,YACAoL,cAEApiG,OAFAoiG,cACA3zG,KACAuR,OADAvR,KAGA4zG,OACAY,aADAZ,OAGJC,SAAWD,OAAOC,SAElB,IAAMx9C,SAAWg+C,SAASI,cAsD1B,OArDAH,SAASpqE,KAAK,SAAU1sC,EAAGoJ,OACvB,IAAI8tG,OACAC,OACA1+F,MAAQ69F,WAAWltG,OAASktG,WAAWltG,OAAO5B,KAAOxH,EAEnDo3G,cAAgB//C,KAAKxQ,aAAewQ,KAAKxQ,WAAa,KAI5DpuC,OAFaogD,SAAYu+C,cAAgBA,gBAAgBp3G,GAAKyY,MAAS,IAE1DhP,WAEb,IAAM4tG,aAAeN,aAAaxxE,WAAW9sB,OAEvCuoB,MAA6B,GAArBq2E,aAAar2E,MACrBC,OAA+B,GAAtBo2E,aAAap2E,OAExBo1E,SAAW,IACXA,SAAW,IAAMA,UAGrB,IAAMiB,SAAW,EAAItsG,KAAK8M,MAAMu+F,SAAW,IACrCkB,oBAAuBD,SAAW,GAAM,EAAKjB,SAAW,IAAMrrG,KAAKqnB,KAAKgkF,SAAW,KAAOA,UAAY,IAE5Ga,OAASlsG,KAAKkQ,KAAKlQ,KAAAoQ,IAAA6lB,OAAU,GAAVj2B,KAAAoQ,IAAc4lB,MAAS,IAAKh2B,KAAK6wC,I5J45BtC,SAAhB27D,cAAgBC,OAAK,OAAIA,MAAQzsG,KAAKgwC,GAAK,I4J55Bew8D,CAAcD,qBAEpD,IAAbD,UAA+B,IAAbA,UAAqBC,mBAAqB,MAAQA,oBAAsB,KAC3FL,QAAmB,EAATj2E,QAEdk2E,OAASn2E,MAGLm2E,OADa,KAAbd,SACSp1E,OACW,MAAbo1E,UACGp1E,OAED,EAGT8pE,cAAgBkJ,sBAChBkD,OAAUhB,eAAiBrqE,MAAM,KAAO9rC,GAAKwC,OAAS0xG,iBAAUiD,OAASA,OAAS,EAAIA,OACtFlpB,6BAAc9mF,MACGqxD,KAAK,YADtB,aAAAh2C,QACiD20F,OAASt+C,SAD1D,sCAAAr2C,QAEuB00F,OAASr+C,SAFhC,aAAAr2C,OAEoD6zF,SAFpD,QAIAc,OAAUhB,eAAiBrqE,MAAM,KAAO9rC,GAAKwC,OAAS0xG,iBAAUiD,OAASA,OAAS,EAAIA,OAEtFlpB,6BAAc9mF,MACGqxD,KAAK,YADtB,aAAAh2C,OACgD20F,OAASt+C,SADzD,sCAAAr2C,OAEsB00F,OAASr+C,SAF/B,aAAAr2C,OAEmD6zF,SAFnD,OAIJpoB,6BAAc9mF,MAAMwxD,aACHoyB,SAAS,KAAMvjF,KAAKiR,SAElCq+F,UASLY,oCAAwB,SAAxBA,sBAAyBC,gBAAiBC,aAAc/+C,UAAa,IAEnEg/C,YACAD,aADAC,YAEE9jG,OAAS6jG,aAAa7jG,SACtBijG,aAAeY,aAAaZ,eAC5BD,aAAea,aAAah1G,eAAem0G,aAE7ChM,YAEAh3F,OAFAg3F,YACAjJ,YACA/tF,OADA+tF,YAGAsU,OACAY,aADAZ,OAGAC,SAEAD,OAFAC,SACYyB,aACZ1B,OADAE,WAGEQ,SAAWa,gBAAgBz/C,UAAU,cAI3C,GAHA4+C,SAAS5+C,UAAU,SAASvrB,UAGxB0pE,UHrGW,QGqGEtL,aHtGC,WGsGsBA,YAEjC,GAAKsL,UAAayB,aAElB,CAEH,GADAhB,SAAStvG,KAAK,IH1GH,QG2GPujG,aH5GU,WG4GaA,YACvB+L,SAASt+C,KAAK,IAAK,GACFA,KAAK,IAAK,GACVA,KAAK,YAAa,IAClBhxD,KAAK,IACR2mF,YAAY2oB,SAAU,QAAS,SAAC92G,EAAGN,GAC7C,OAAIm4G,YAAYn4G,GACLm4G,YAAYn4G,GAAGggC,UAFL,GAAAld,OAInBs/E,YAJmB,gBAMnBtpC,KAAK,KAAM,KACAt5B,MAAM,UAAW,KAEjBy5B,aACAoyB,SAAS,KACTlY,GAAG,MAAO+kC,aAAaG,6BACvBv/C,KAAK,KAAM,SAACx4D,EAAGN,GACZ,MH9HV,WG8HcqrG,aAAgC,IAANrrG,EACnBm4G,YAAY,GAAG3yE,eAElB2yE,YAAY,GAAG3yE,eAAiB2yE,YAAY,GAAGn4E,MAAM72B,OAAS,GAAKgwD,WAE9E35B,MAAM,UAAW,GACjB13B,KAAK,SAAA5F,GAAC,OAAIA,IACV42D,KAAK,IAAK,QAEb21B,YAAY2oB,SAAU,QAAS,SAAC92G,EAAGN,GAAJ,OAAUm4G,YAAYn4G,GAAGggC,OAA7C,GAAAld,OAAuDs/E,YAAvD,gBACnBt6F,KAAK,SAAA5F,GAAC,OAAIA,SA/BpBk1G,SAASt+C,KAAK,YAAa,SAF3Bo+C,yBAAWgB,aAAcd,SAAUC,cAqCvC,OAAOD,UAGLkB,+BAAmB,SAAnBA,iBAAoBJ,cAAiB,IAEnCzB,cACAyB,aAAa7jG,SADboiG,cAEEx4F,OAASi6F,aAAaj6F,SACxBw4F,eAAiBx4F,OAAO9U,QACxB+uG,aAAaI,oBAWfC,6BAAiB,SAAjBA,eAAkBC,SAAUnN,YAAa37E,UAAa,IAEpD+oF,eAIA/oF,SAJA+oF,eACAxB,QAGAvnF,SAHAunF,QACAyB,YAEAhpF,SAFAgpF,YACAC,eACAjpF,SADAipF,eAEJ,OAAQtN,aACR,KAAKkJ,sBACDiE,SAAS1/C,KAAK,YAAd,aAAAh2C,SACmB61F,eAAer3E,MAAQm3E,gBAD1C,KAAA31F,OAC6Dm0F,QAAUyB,YADvE,iBAEA,MACJ,KAAKnE,uBACDiE,SAAS1/C,KAAK,YAAd,aAAAh2C,OACmB61F,eAAer3E,MAAQm3E,eAD1C,KAAA31F,OAC6Dm0F,QAAUyB,YADvE,gBAEA,MACJ,KAAKnE,qBACDiE,SAAS1/C,KAAK,YAAd,aAAAh2C,OACkB61F,eAAer3E,MAAQ,EADzC,KAAAxe,QAC+C61F,eAAep3E,OAASk3E,eADvE,MAEA,MACJ,KAAKlE,wBACDiE,SAAS1/C,KAAK,YAAd,aAAAh2C,OACkB61F,eAAer3E,MAAQ,EADzC,KAAAxe,OAC8C61F,eAAep3E,OAASk3E,eAAiB,EADvF,MAKJ,OAAOD,UC3MX,IAAMI,aAAe,SAAfA,aAAgBz2E,QAASr/B,KAAM+1G,YAAanwD,QAC9CvmB,QAAQn5B,MAAM6vG,aACdnwD,QAAUvmB,QAAQ9tB,uLAARykG,IAAA,GAAAh2F,OAAqBhgB,KAArB,UAAoC4lD,UAcrCqwD,yBAAc,SAAdA,YAAev6F,QAASxV,MAAOiV,OAAQotF,aAChD,IAAM5gE,KAZY,SAAhBuuE,cAAiBC,SAAUjwG,MAAOiV,QACpC,IACMqjB,MADMh2B,KAAKsnB,IAAI5pB,MAAM,GAAKA,MAAM,KAAOiV,OAAO,GAAKA,OAAO,IAC3Cg7F,SACfC,QAAWlwG,MAAM,GAAKA,MAAM,GAC5BmwG,KAAOD,QAAU53E,MAIvB,OAFa43E,QADIA,SAAWC,KAAO,GACDA,MAEpB,EAIDH,CAAcx6F,QAASxV,MAAOiV,QAS3C,OAPIotF,cAAgB4I,sBAAO5I,cAAgB2I,yBACvChrG,MAAM,IAAMyhC,KACZzhC,MAAM,IAAMyhC,OAEZzhC,MAAM,IAAMyhC,KACZzhC,MAAM,IAAMyhC,MAETzhC,OAGEowG,YAAc,SAAdA,YAAej3E,QAASk3E,aACjC,IAAIrkD,aACAskD,eAF6CC,sBAO7Cp3E,QAAQw2E,iBAHDa,WAJsCD,sBAI7Cj4E,MACQm4E,YALqCF,sBAK7Ch4E,OACA8G,QAN6CkxE,sBAM7ClxE,QAGAF,IAIAE,QAJAF,IACAoD,KAGAlD,QAHAkD,KACAgsB,OAEAlvB,QAFAkvB,OACA/rB,MACAnD,QADAmD,MAGAkuE,SACAL,YADAK,SAf6CC,sBAoB7Cx3E,QAAQm1E,eAFRR,aAlB6C6C,sBAkB7C7C,aACAJ,OAnB6CiD,sBAmB7CjD,OAGAC,SACAD,OADAC,SAtB6CiD,iBA6B7Cz3E,QAAQ9tB,SAJRg3F,YAzB6CuO,iBAyB7CvO,YACAoL,cA1B6CmD,iBA0B7CnD,cACAD,gBA3B6CoD,iBA2B7CpD,gBACA1+C,WA5B6C8hD,iBA4B7C9hD,WA5B6C+hD,sBAmC7C13E,QAAQ23E,oBAJRC,eA/B6CF,sBA+B7CE,eACAC,kBAhC6CH,sBAgC7CG,kBACAC,mBAjC6CJ,sBAiC7CI,mBACA9gD,SAlC6C0gD,sBAkC7C1gD,SAGQ+gD,cAERH,eAFAx4E,OACO44E,aACPJ,eADAz4E,MAEE84E,YAActD,aAAeN,gBAAkB,EAC/C6D,aAAgBzD,YAAY,EAAMD,SAAUD,OAAOC,UACnD2D,gBAAkBn4E,QAAQo4E,iBAC1BC,aAAer4E,QAAQs4E,cACvBj8F,QAAU2jB,QAAQu4E,SAClBz8F,OAASkkB,QAAQlkB,SACjBw6F,eAAiBwB,mBAAmB14E,OAE1C,OACI6vB,MACIxtB,EAAG,SAAAA,IACC,IAAM+2E,YAAcR,aAAe,EA+BnC,OA7BAvB,aAAaz2E,QAAS,IAAK42E,yBAAYv6F,SAClCm8F,YAAanB,WAAajuE,KAAOC,MAAQmvE,aAAc18F,OAAQotF,aAC5DqO,SAAWD,YAAc,MAEjCzkD,aAAiBwkD,WAAcr3E,QAAQy4E,gBAAgBzxG,OAChCmxG,gBAAgBh5E,MAEvCg4E,eAAiBG,YAAcQ,mBAAmBR,YAActgD,SAAWihD,YAEvEplD,aAAewlD,aAAal5E,OAAsB,IAAbq1E,WAErC0D,YAAY1D,SAA+B,OAApBD,OAAOC,UAAqB,GAAKA,SAGpD3hD,aAAewlD,aAAaj5E,SAC5B+3E,eAAiBG,YACjBzkD,aAAewlD,aAAaj5E,OAC5BY,QAAQm1E,cAAeP,gBAAgB,EAAOC,gBAAgB,MAGlEyC,YAAchB,gBACdt2E,QAAQm1E,cAAe9S,MAAM,IAGjCriE,QAAQ04E,eACJv5E,MAAO0zB,aACPzzB,OAAQ+3E,eACR12E,OAAqB,OAAb+zE,WAEL0D,aAEXpvG,EAAG,SAAAA,IACC,IAAI6vG,cAAgBtB,WACdmB,YAAcT,cAAgB,EAmBpC,OAjBAtB,aAAaz2E,QAAS,IAAK42E,yBAAYv6F,SAClCi7F,YAActxE,IAAMovB,OAASojD,YAAaA,aAAc18F,OAAQotF,aAC7DqO,SAAWF,WAAa,MAE3BA,WAAaf,eAAiB2B,aAAgBE,gBAAgBh5E,QAC/Dw5E,cAAgB,EAChB34E,QAAQm1E,cAAeP,gBAAgB,EAAOC,gBAAgB,KAGlE70E,QAAQ04E,eACJv5E,MAAOw5E,cACPv5E,OAAQk4E,YACR72E,QAAQ,IAER42E,WAAaf,gBACbt2E,QAAQm1E,cAAe9S,MAAM,IAE1B6V,cAGf3rE,MACI9K,EAAG,SAAAA,IACCg1E,aAAaz2E,QAAS,KAAM,EAAGq3E,WAAajuE,KAAOC,OAAQkuE,SAAWD,YAAc,MACpF,IAAMzwG,MAAQm5B,QAAQn5B,QAQtB,GALAgsD,cAAiBhsD,MAAM,GAAKA,MAAM,KAAO8uD,YAAc75C,QAAQ9U,OAAUmxG,gBAAgBh5E,MAGzFg4E,eAAiBG,YAAchB,eAAiBt/C,SAAWihD,YAEvDplD,aAAewlD,aAAal5E,OAAsB,IAAbq1E,SAErC0D,YAAY1D,SAAwB,OAAbA,UAAqB,GAAKA,SACjD0D,YAAYzD,YAAa,EAGrB5hD,aAAewlD,aAAaj5E,SAC5B+3E,eAAiB,EACjBtkD,aAAe,EACf7yB,QAAQm1E,cAAeP,gBAAgB,EAAOC,gBAAgB,IAC9D70E,QAAQn5B,OAAOwxG,aAAaj5E,OAAS,EAAGi4E,WAAagB,aAAaj5E,OAAS,UAE5E,GAAIu2B,WAAY,CACD0hD,WAAav7F,OAAO9U,OAAUmxG,gBAAgBh5E,MACjDk5E,aAAal5E,OACxBa,QAAQn5B,OAAOwxG,aAAaj5E,OAAS,EAAGi4E,WAAagB,aAAaj5E,OAAS,IAYnF,OATIk4E,YAAchB,gBACdt2E,QAAQm1E,cAAe9S,MAAM,EAAOuS,gBAAgB,EAAOC,gBAAgB,IAG/E70E,QAAQ04E,eACJv5E,MAAO0zB,aACPzzB,OAAQ+3E,eACR12E,OAAqB,OAAb+zE,WAEL0D,aAEXpvG,EAAG,SAAAA,IACC2tG,aAAaz2E,QAAS,KAAMs3E,YAAcliD,OAAQpvB,KAAMuxE,SAAWF,WAAa,MAEhF,IAAIsB,cAAgBtB,WAAaf,eAAiBt/C,SAAWihD,YAc7D,OAbIU,eAAiBR,gBAAgBh5E,QACjCw5E,cAAgB,EAChB34E,QAAQm1E,cAAeP,gBAAgB,EAAOC,gBAAgB,KAGlE70E,QAAQ04E,eACJv5E,MAAOw5E,cACPv5E,OAAQk4E,YACR72E,QAAQ,IAER42E,WAAaf,gBACbt2E,QAAQm1E,cAAe9S,MAAM,IAE1B6V,cAGfU,WACIn3E,EAAG,SAAAA,IACCy2E,YAAYzD,YAAa,EACzB,IAAM+D,YAAcZ,eAAez4E,MAAQ,EAG3Cs3E,aAAaz2E,QAAS,MAFLs0E,cAAgB,EAAIkE,aAEEpvE,KAAMiuE,WAAahuE,MAAQmvE,aAC9DjB,SAAWD,YAAc,MAE7B,IAAMzwG,MAAQm5B,QAAQn5B,QAGhBgyG,eAAiBhB,kBAAkB7wG,QAAU4wG,eAAez4E,MAAQg5E,gBAAgBh5E,OAe1F,OAduBt4B,MAAM,GAAKA,MAAM,GAGnBgyG,gBAAsC,OAApBtE,OAAOC,WAC1C0D,YAAY1D,UAAY,IAIxB8C,YAAchB,eAAiB2B,YAAcL,eAAex4E,SAC5DY,QAAQm1E,cAAeP,gBAAgB,IACnC0C,YAAchB,gBACdt2E,QAAQm1E,cAAe9S,MAAM,KAG9B6V,aAEXpvG,EAAG,SAAAA,IACCovG,YAAYzD,YAAa,EACzB,IAAM+D,YAAcZ,eAAex4E,OAAS,EAa5C,OAVAq3E,aAAaz2E,QAAS,KAAMs3E,YAAcliD,QAFzBk/C,cAAgB,EAAIkE,aAEwBA,YAAcxyE,KACvEuxE,SAAWF,WAAa,MAGxBA,WAAaO,eAAez4E,MAAQm3E,eAAiB2B,cACrDj4E,QAAQm1E,cAAeP,gBAAgB,IACnCyC,WAAaf,gBACbt2E,QAAQm1E,cAAe9S,MAAM,KAG9B6V,siBChPhB,IAAMY,iBAAmB,SAAnBA,mBAAoD,IAAhCtE,SAAgC9pG,UAAA1D,OAAA,QAAA4L,IAAAlI,UAAA,GAAAA,UAAA,GAArB,EAAGy0B,MAAkBz0B,UAAA1D,OAAA,EAAA0D,UAAA,QAAAkI,EAAXwsB,OAAW10B,UAAA1D,OAAA,EAAA0D,UAAA,QAAAkI,EACzDmmG,cAAgB35E,OAChB45E,aAAe75E,MACnB,GAAIq1E,SAAU,CACV,IAAMoB,OAAUpB,UAAY,GAAKrrG,KAAKgwC,GAAM,IAC5C6/D,aAAe7vG,KAAKsnB,IAAI2O,OAASj2B,KAAK6wC,IAAI47D,QAAUzsG,KAAKsnB,IAAI0O,MAAQh2B,KAAK4wC,IAAI67D,QAC9EmD,cAAgB5vG,KAAKsnB,IAAI0O,MAAQh2B,KAAK6wC,IAAI47D,QAAUzsG,KAAKsnB,IAAI2O,OAASj2B,KAAK4wC,IAAI67D,QAEnF,OAASz2E,MAAO65E,aAAc55E,OAAQ25E,gBAG7BE,iBAAY,SAAZA,UAAaj5E,SACtB,IAAIyB,EAAI,EACJ34B,EAAI,EACFowG,aAAel5E,QAAQk5E,eACvBhnG,OAAS8tB,QAAQ9tB,SAEnBg3F,YAGAh3F,OAHAg3F,YACAkE,QAEAl7F,OAFAk7F,QACA0H,QACA5iG,OADA4iG,QAEA5L,cAAgB6I,wBAChBtwE,OAAgB7uB,IAAZw6F,QAAwB8L,aAAa/5E,MAAQiuE,SAEjDlE,cAAgB4I,uBAChBhpG,OAAgB8J,IAAZkiG,QAAwBoE,aAAa95E,OAAS01E,SAEtD90E,QAAQ9tB,QAASk7F,QAAS3rE,EAAGqzE,QAAShsG,KAkB7BqwG,2BAA6B,SAA7BA,2BAA8Bn5E,SACvC,IAGIo5E,UAHAC,YAAc,GACdC,uBAA0Bn6E,MAAO,EAAGC,OAAQ,GAC5Cm6E,aAEE1B,qBACAxrE,MAAQrM,QAAQqM,QACdsoE,aAAiB30E,QAAQm1E,eAAzBR,aAP2C6E,gBAQtBx5E,QAAQ9tB,SAA7ByjD,WAR2C6jD,gBAQ3C7jD,WAAYv3D,KAR+Bo7G,gBAQ/Bp7G,KACZ82G,aAAiBl1E,QAAQj/B,eAAzBm0G,aACFuE,UAAYptE,MAAMpC,OAASoC,MAAM5B,UAAY4B,MAAMvwB,OA8BzD,OA3BAo5F,aAAax3E,SAASsC,QAAQ05E,iBAM9BN,WAHAA,UAAYzjD,YAAc8jD,aAGJlsG,IAAI,SAACosG,cAAe97G,GACtC,IAAMuZ,MAAQ4oB,QAAQ45E,iBAAiBD,cAAe97G,EAAGu7G,WAGnDxB,eAAiB1C,aAAaxxE,WAAWtsB,OAW/C,OARAygG,kBAAkBrsG,KAAKosG,gBAGnBA,eAAez4E,MAAQm6E,sBAAsBn6E,QAC7Ck6E,YAAcjiG,MACdmiG,UAAYv5E,QAAQy0E,aAAez0E,QAAQy0E,aAAa52G,MACxDy7G,sBAAwB1B,gBAErBxgG,QAGX89F,aAAax3E,SAASsC,QAAQ65E,iBAI1B/B,mBAHuBnD,aAAeO,aAAaxxE,WAAWtlC,OAAU+gC,MAAO,EAAGC,OAAQ,GAI1Fi6E,wBACAC,4CACAzB,oCACAuB,oBACAG,oBACAviD,SAAUh3B,QAAQo1E,gBAqDb0E,uBAAyB,SAAzBA,uBAA0B95E,QAAS+5E,eAAgBlzG,OAC5D,IAAIs4B,MACAC,OACEtjB,OAASkkB,QAAQlkB,SACfk7C,SAAiD+iD,eAAjD/iD,SAAU4gD,eAAuCmC,eAAvCnC,eAAgBE,mBAAuBiC,eAAvBjC,mBAJoCL,iBAK9Bz3E,QAAQ9tB,SAAxCmiG,gBAL8DoD,iBAK9DpD,gBAAiB1+C,WAL6C8hD,iBAK7C9hD,WACjBg/C,aAAiB30E,QAAQm1E,eAAzBR,aACQqF,cAAkBlC,mBAA1B14E,OACQ24E,cAAuCH,eAA/Cx4E,OAA8B44E,aAAiBJ,eAAxBz4E,MAK/B,GAHAA,MAAQt4B,OAASA,MAAMG,OAASH,MAAM,GAAKA,MAAM,GAAK,EAEtDu4B,OAAS,EACLu2B,WAAY,CACZ,IAAMskD,YAAcj6E,QAAQk6E,uBADhBjiF,MAGR9uB,KAAK2P,IAALjM,MAAA1D,KAAIgxG,wCAAQxkD,YAARh1C,OAAAw5F,wCAAuBr+F,UAC3B3S,KAAK6P,IAALnM,MAAA1D,KAAIgxG,wCAAQxkD,YAARh1C,OAAAw5F,wCAAuBr+F,WAG/BqjB,OAPYlH,KAAA,GAAAA,KAAA,IAOW9uB,KAAKsnB,IAAIwpF,cAAiBjC,aAAeh4E,QAAQo4E,iBAAiBj5E,OAS7F,OAJIC,OAHCD,OAAmB,IAAVA,MAGD44E,cAFA5uG,KAAK6P,IAAIg/F,aAAcD,gBAOhC54E,YACAC,OAJJA,SAAWu1E,aAAeqF,cAAgB3F,gBAAkB,GAAKr9C,WAgBxDojD,qBAAuB,SAAvBA,qBAAwBp6E,QAAS+5E,gBAC1C,IAAI36E,OACAD,MACErjB,OAASkkB,QAAQlkB,SACfk7C,SAAiD+iD,eAAjD/iD,SAAU4gD,eAAuCmC,eAAvCnC,eAAgBE,mBAAuBiC,eAAvBjC,mBAJ2BuC,iBAKrBr6E,QAAQ9tB,SAAxCmiG,gBALqDgG,iBAKrDhG,gBAAiB1+C,WALoC0kD,iBAKpC1kD,WACjBg/C,aAAiB30E,QAAQm1E,eAAzBR,aACQqF,cAAkBlC,mBAA1B14E,OACQ24E,cAAuCH,eAA/Cx4E,OAIR,GAFAA,OAAS,EACTD,MAHuDy4E,eAAxBz4E,MAI3Bw2B,WAAY,CACZ,IAAMskD,YAAcj6E,QAAQk6E,uBADhBlsC,OAGR7kE,KAAK2P,IAALjM,MAAA1D,KAAIgxG,wCAAQxkD,YAARh1C,OAAAw5F,wCAAuBr+F,UAC3B3S,KAAK6P,IAALnM,MAAA1D,KAAIgxG,wCAAQxkD,YAARh1C,OAAAw5F,wCAAuBr+F,WAG/BsjB,QAPY4uC,MAAA,GAAAA,MAAA,IAOY7kE,KAAKsnB,IAAIwpF,aAAgBlC,cAIrD,OACI34E,cACAD,MAJJA,QAAUw1E,aAAeqF,cAAgB,GAAKhjD,SAAWq9C,kBAYhDiG,0BAAqB,SAArBA,mBAAsBt6E,SAC/B,IAAMn5B,MAAQm5B,QAAQn5B,QAChBkzG,eAAiB/5E,QAAQ23E,oBACvBzO,YAAgBlpE,QAAQ9tB,SAAxBg3F,YACA7G,KAASriE,QAAQm1E,eAAjB9S,KACAiX,sBAAwDS,eAAxDT,sBAAuBF,UAAiCW,eAAjCX,UAAWvB,kBAAsBkC,eAAtBlC,kBAC1B0C,iBAAqBjB,sBAA7Bl6E,OACFo7E,aAAex6E,QAAQo4E,iBAAiBj5E,MAC9C,GAAI+pE,cAAgB4I,sBAAO5I,cAAgB2I,wBAAQ,KAAA4I,sBAI3CX,uBAAuB95E,QAAS+5E,eAAgBlzG,OAFhDs4B,OAF2Cs7E,sBAE3Ct7E,MACAC,QAH2Cq7E,sBAG3Cr7E,OAYJ,OATKD,QAAmB,IAAVA,SACVA,OAAQ04E,kBAAkBxgG,OAAO,SAACtY,EAAGO,GAAJ,OAC7BP,EAAIoK,KAAK2P,IAAIxZ,EAAE6/B,MAAO7/B,EAAE8/B,QAAUo7E,cAAc,KAE3C,IAATnY,OACAjjE,QAAS,EACTD,OAAQ,IAIRA,aACAC,gBAzBmC,IAAAs7E,sBAgCvCN,qBAAqBp6E,QAAS+5E,gBAF9B56E,MA9BuCu7E,sBA8BvCv7E,MACAC,OA/BuCs7E,sBA+BvCt7E,OAUJ,OAPKA,QAAqB,IAAXA,SACXA,OAASg6E,UAAUpyG,QAAUuzG,iBAAmBv6E,QAAQo4E,iBAAiBh5E,QAAUm7E,mBAE1E,IAATlY,OACAljE,MAAQ,IAIRA,YACAC,gBAwDKu7E,sBAAiB,SAAjBA,eAAkB36E,QAASlkB,QAAW,IAC/B8+F,QAAY56E,QAAQ9tB,SAA5B4J,OAMR,OAJI8+F,UACA9+F,OAAS8+F,SAGN/qC,aAAa/zD,YAGX++F,uBAAyB,SAAzBA,uBAA0B76E,QAASlkB,QAAW,IAC/CmpC,KAASjlB,QAAQ9tB,SAAjB+yC,KACF5Y,MAAQrM,QAAQqM,MAAMhtC,KAAK2gC,SAEjCqM,QAAQvwB,OAAOA,QACfmpC,MAAQ5Y,QAAQ4Y,OAChBjlB,QAAQ86E,QAAUzuE,QAAQvwB,UChVjBijF,aACTyX,kBACAuD,kBACAgB,2BACA7oG,QACI4/D,aAAc,SAAAA,aAAC9xC,QAASlhC,OACpB,IAAMk8G,UAAYz8G,OAAO4T,UAAW6tB,QAAQ00D,aACtCumB,gBAAkBpoC,kBAAmBmoC,YAC3Cl8G,MAAQ+zE,eAAeooC,gBAAiBn8G,QAElCu1G,gBAAkBlrG,KAAK6P,IAAIla,MAAMu1G,gBAAiB,GACxD,IAAM6G,sBDgVkB,SAAvBC,uBAA4D,IAApC3tG,IAAoC9C,UAAA1D,OAAA,QAAA4L,IAAAlI,UAAA,GAAAA,UAAA,MAA1BqE,KAA0BrE,UAAA1D,OAAA,QAAA4L,IAAAlI,UAAA,GAAAA,UAAA,MAAf0wG,WAAe1wG,UAAA1D,OAAA,EAAA0D,UAAA,QAAAkI,EACrE,SAAKrU,OAAO6M,KAAKoC,KAAKxG,SAAWzI,OAAO6M,KAAK2D,MAAM/H,SAG5Co0G,WAAWr4F,KAAK,SAAA3jB,KAAG,OAAIoO,IAAIpO,OAAS2P,KAAK3P,OCpVV+7G,CAC1Br8G,MAAOk8G,WAAY,eAAgB,WAAY,OAAQ,gBAErDzF,cAAgBv1E,QAAQq7E,sBAAsBv8G,OAEhDo8G,wBACAl7E,QAAQs7E,OAASt7E,QAAQk0E,YAAYp1G,OACrCkhC,QAAQu7E,MAAQv7E,QAAQw7E,WAAW18G,QAGvCkhC,QAAQy7E,eAAiB,SAAAxxE,OAAK,OAAIsrE,cAActrE,QAhBlB,IAAAz4B,OAwB1B1S,MALAy1G,OAnB0B/iG,OAmB1B+iG,OACAlS,KApB0B7wF,OAoB1B6wF,KACAuS,eArB0BpjG,OAqB1BojG,eACAC,eAtB0BrjG,OAsB1BqjG,eACAF,aAvB0BnjG,OAuB1BmjG,aASJ,OAPA30E,QAAQm1E,cACJZ,cACAlS,UACAuS,8BACAC,8BACAF,4BAEG71G,QAGfq2G,cACIrjC,aAAc,SAAAA,aAAC9xC,QAASlhC,OACpB,IAAMk8G,UAAYz8G,OAAO4T,UAAW6tB,QAAQ07E,mBAE5C,OADA58G,MAAQ+zE,eAAemoC,UAAWl8G,SAI1Co6G,gBACA7hF,SAEAxwB,OACIirE,aAAc,SAAAA,aAAC9xC,QAASlhC,OAGpB,OAFAkhC,QAAQqM,QAAQxlC,MAAM/H,OACtBkhC,QAAQk5E,aAAa,MACdp6G,QAIf21G,cACAz9C,YACA0hD,iBACA1Z,aACInvB,aAAc,SAAAA,aAAArpE,KAAG,OAAIA,0SC5CRm1G,kCAMjB,SAAAA,WAAazpG,OAAQnR,wKAAc66G,CAAAt2G,KAAAq2G,YAC/Br2G,KAAKgkF,IAAM15E,cAEXtK,KAAKu2G,cAAgB96G,aACrBuE,KAAK+hG,OAAS,KACd/hG,KAAKw2G,UACLx2G,KAAKw1G,WACLx1G,KAAKy2G,aAAc,EACnBz2G,KAAK02G,mBACL12G,KAAK0wG,eAEL,IAAMiG,OAASppC,kBAAmBvtE,KAAKglB,YAAYpF,iBAC7Cg3F,aAAerpC,eAAeopC,OAAQ/pG,QAEtCiqG,SAAW/vB,6BAAc,QACzB6T,YAAcic,aAAajc,YACjC36F,KAAKo0G,gBAAkB3rB,qCAAsBouB,SAAD,GAAAx7F,OAAcs/E,YAAd,WAC5C36F,KAAKu0G,eAAiB9rB,qCAAsBouB,SAAD,GAAAx7F,OAAcs/E,YAAd,eAE3Cl/F,aAAam0G,aAAax3E,SAASp4B,KAAKo0G,iBACxC,IAAM0C,KAAOr7G,aAAam0G,aAAaxxE,WAAW,KAElDp+B,KAAK8yG,kBAAqBj5E,MAAoB,EAAbi9E,KAAKj9E,MAAY,EAAGC,OAAQg9E,KAAKh9E,OAAS,GAC3E95B,KAAKgzG,cAAgBv3G,aAAam0G,aAAaxxE,WAAW,OAE1DyuC,sBAAsB7sE,KAAMy5F,aAC5Bz5F,KAAK4M,OAAOgqG,cAEZ52G,KAAKg2G,OAASh2G,KAAK4uG,YAAY5uG,KAAKovF,SACpCpvF,KAAKi2G,MAAQj2G,KAAKk2G,WAAWl2G,KAAKovF,SAClCpvF,KAAK+2G,8UAoBL,OAAO/2G,2CAUP,OAAIoF,UAAO1D,QACP1B,KAAKg2G,OAAL5wG,UAAA1D,QAAA,OAAA4L,EAAAlI,UAAA,GACOpF,MAEJA,KAAKg2G,yDAKZ,OADAh2G,KAAKw1G,WACEx1G,yCAUP,OAAIoF,UAAO1D,QACP1B,KAAKi2G,MAAL7wG,UAAA1D,QAAA,OAAA4L,EAAAlI,UAAA,GACOpF,MAEJA,KAAKi2G,8CAWZ,GAAI7wG,UAAO1D,OAAQ,CACf,IAAMs1G,YAAc3B,sBAAer1G,KAADoF,UAAA1D,QAAA,OAAA4L,EAAAlI,UAAA,IAKlC,OAJApF,KAAK+mC,QAAQvwB,OAAOwgG,aACpBh3G,KAAKw1G,QAAUx1G,KAAK+mC,QAAQvwB,SAC5BxW,KAAKi3G,6BACLj3G,KAAK4zG,aAAa,MACX5zG,KAEX,OAAOA,KAAKw1G,wFAIZx1G,KAAKy1G,wBAAwB5B,2BAA2B7zG,2DAUxD,OAAOA,KAAKu2G,8DASH3pG,QAAQ,IAEbqzC,KAIArzC,OAJAqzC,KAeJ,OATc2uD,2BACVhuE,QAHAh0B,OAHAg0B,QAOAutB,aAJAvhD,OAFAuhD,aAOA5Q,SALA3wC,OADA2wC,SAOA0C,UACA1+C,MANUvB,KAAKuB,QAOflG,KAAM2E,KAAKglB,YAAY3pB,6EAMR7B,OAAO,IAClBkmD,WAA6BlmD,MAA7BkmD,WAAY/nC,aAAiBne,MAAjBme,aAEpB,OAAI+nC,WACO,SAAA/a,OAAK,OAAI,SAACzjC,IAAK3I,GAAN,OAAYmnD,WAAW/nC,aAAazW,KAAMA,IAAK3I,EAAGosC,SAG/D,kBAAM,SAAAzjC,KAAG,OAAIyW,aAAazW,qEAIjClB,KAAK4zG,aAAa,MAClB5zG,KAAKuB,UAFY,IAAAimG,aASbxnG,KAAK4M,SALLqiG,OAJazH,aAIbyH,OACAlS,KALayK,aAKbzK,KACAuS,eANa9H,aAMb8H,eACAC,eAPa/H,aAOb+H,eACAF,aARa7H,aAQb6H,aAEJrvG,KAAK6vG,cACDZ,cACAlS,UACAuS,8BACAC,8BACAF,sFAIUhvG,KAAM4B,MAAO6xG,WAG3B,OAAO1xG,EAFWpC,KAAKm2G,gBAENrC,UAAV1xG,CAAqB/B,KAAM4B,qDAS1B2K,QAAQ,IACRg3F,YAAgBh3F,OAAhBg3F,YACFsT,UAAYvK,mBAAmB/I,aAErC,OAAIsT,UACaA,UAAUl3G,KAAK+mC,SAGzB,mEAW8C,IAAtClN,MAAsCz0B,UAAA1D,OAAA,QAAA4L,IAAAlI,UAAA,GAAAA,UAAA,GAA9B,EAAG00B,OAA2B10B,UAAA1D,OAAA,EAAA0D,UAAA,QAAAkI,EAAnBszB,QAAmBx7B,UAAA1D,OAAA,EAAA0D,UAAA,QAAAkI,EAAV2kG,SAAU7sG,UAAA1D,OAAA,EAAA0D,UAAA,QAAAkI,EACjDslG,eAEDhP,YACA5jG,KAAK4M,SADLg3F,YAiBH,OAdA5jG,KAAKkxG,gBAAiBr3E,YAAOC,cAAQ8G,kBAGjCgyE,YADAhP,cAAgB4I,sBAAO5I,cAAgB2I,wBACzBoF,YAAY3xG,MAAQiyG,oBAAYqB,UAAUn3E,IAE1Cw1E,YAAY3xG,MAAQiyG,oBAAYqB,UAAU9vG,IAI5DxD,KAAK6vG,cACDZ,OAAQ2D,cAEZ5yG,KAAKm3G,gBACLn3G,KAAK8vG,cACE9vG,2DASP,OAAOA,yDAGIo3G,WACX,GAAkB,OAAdA,gBAAoC9pG,IAAd8pG,UAG1B,OAAOp3G,KAAK+mC,OAAL/mC,CAAao3G,6DAUpB,OAAOp3G,KAAKkwD,OAAOwB,yEASO,QAAAmV,KAAAzhE,UAAA1D,OAARgf,OAAQ,IAAA7X,MAAAg+D,MAAAC,KAAA,EAAAA,KAAAD,KAAAC,OAARpmD,OAAQomD,MAAA1hE,UAAA0hE,MAE1B,OADA9mE,KAAKy0G,eF7LwB,SAAxB4C,sBAAyB38E,SAClC,IAAI43E,kBACIrD,OAAWv0E,QAAQm1E,eAAnBZ,OACAE,WAAyBF,OAAzBE,WAAYD,SAAaD,OAAbC,SAH0BoI,sBAW1CzD,2BAA2Bn5E,SAN3Bs5E,sBAL0CsD,sBAK1CtD,sBACAF,UAN0CwD,sBAM1CxD,UACAG,UAP0CqD,sBAO1CrD,UACAzB,mBAR0C8E,sBAQ1C9E,mBACAD,kBAT0C+E,sBAS1C/E,kBACA7gD,SAV0C4lD,sBAU1C5lD,SAEY6lD,YAAmCvD,sBAA3Cl6E,OAA4B09E,WAAexD,sBAAtBn6E,MAM7B,OAAsB,IAHPa,QAAQlkB,SAGZ9U,OACA,MAOX4wG,eAAiBkB,iBAAiBtE,UAJ9BoD,eADAnD,WACiB8E,WAEEp6E,MAAO29E,WAAY19E,OAAQy9E,cAES19E,MAAOy4E,eAAex4E,QAEhE,IAAb43B,WACA4gD,gBAAmBz4E,MAAO,EAAGC,OAAQ,KAGrCy4E,oCACA7gD,kBACA4gD,8BACAE,sCACAwB,4CACAF,uBEwJyCvsG,WAArB,GAAsBvH,MAAtBqb,OAA+BqF,UAC5C1gB,KAAKy0G,2EAgBZ,OANKz0G,KAAK4zG,iBACN5zG,KAAK4zG,aFzBsB,SAA1B6D,wBAA2B/8E,SACpC,IAAMn5B,MAAQm5B,QAAQn5B,QAChBkzG,eAAiB/5E,QAAQ23E,oBACvBzO,YAAgBlpE,QAAQ9tB,SAAxBg3F,YAHwC8T,uBAIjBh9E,QAAQm1E,eAA/B9S,KAJwC2a,uBAIxC3a,KAAMsS,aAJkCqI,uBAIlCrI,aACNmD,mBAAuBiC,eAAvBjC,mBAER,IAAa,IAATzV,KACA,OACIljE,MAAO,EACPC,OAAQ,GAVgC,IAcjC69E,cAAkBnF,mBAAzB34E,MAER,GAAI+pE,cAAgB4I,sBAAO5I,cAAgB2I,wBAAQ,KAAAqL,uBAI3CpD,uBAAuB95E,QAAS+5E,eAAgBlzG,OAFhDs4B,QAF2C+9E,uBAE3C/9E,MACAC,SAH2C89E,uBAG3C99E,OAIJ,OACID,MAHch2B,KAAK6P,IAAImmB,QAAO89E,eAI9B79E,iBAzBwC,IAAA+9E,uBA+B5C/C,qBAAqBp6E,QAAS+5E,gBAF9B56E,MA7B4Cg+E,uBA6B5Ch+E,MACAC,OA9B4C+9E,uBA8B5C/9E,OAKJ,OACID,YACAC,OAJcj2B,KAAK6P,IAAIomB,OAAQu1E,aAAesI,cAAgB,IERxCF,CAAwBz3G,OAC1CA,KAAK4zG,eACLD,iBAAU3zG,OAGPA,KAAK4zG,qDAQRp6G,OACJ,OAAOwG,KAAK+mC,QAAQgB,OAAOvuC,+DAUdw8C,GAAIC,IACjB,OAAQD,GAAIC,sDAGFD,GAAIC,IACd,OAAQj2C,KAAK+nC,OAAOiO,IAAKh2C,KAAK+nC,OAAOkO,yEAIrC,OAAOj2C,KAAKwW,+EAGQ65C,YACpB,OAAOA,+DAYP,OAAO,gDAWP,OACIv3D,KAAMkH,KAAKlH,KACXuC,KAAM2E,KAAK3E,KACXkG,MAAOvB,KAAKuB,QACZqL,OAAQ5M,KAAK4M,kDAwBjB,OAJI5M,KAAK+xB,UACL/xB,KAAKm3G,gBJvKV,SAASW,WAAYrH,cACxB,IAAM7jG,OAAS6jG,aAAa7jG,SACtBijG,aAAeY,aAAaZ,eAC5BD,aAAea,aAAah1G,eAAem0G,aAC3C79E,MAAQ0+E,aAAa1+E,QACrBxwB,MAAQkvG,aAAalvG,QACrB2uD,KAAOugD,aAAavgD,OACpBnpB,MAAQ0pE,aAAa1pE,QAEPgxE,cAIftH,aAJD8D,eACiByD,eAGhBvH,aAHD2D,gBACgB6D,kBAEfxH,aAFD0F,eACA9lD,WACCogD,aADDpgD,WAGAuzC,YAQCh3F,OARDg3F,YACA9qG,KAOC8T,OAPD9T,KACAgvG,QAMCl7F,OANDk7F,QACA0H,QAKC5iG,OALD4iG,QACAT,gBAICniG,OAJDmiG,gBACA7vE,UAGCtyB,OAHDsyB,UACApI,GAEClqB,OAFDkqB,GACA6jE,YACC/tF,OADD+tF,YAGAoC,KAGA8S,aAHA9S,KACAsS,aAEAQ,aAFAR,aACAJ,OACAY,aADAZ,OAGJ,GAAKlS,KAAL,CAIA,IAAMrrC,SAAW++C,aAAaX,cAExBU,gBAAkBxpB,YAAYF,6BAAc/0D,OAAQ,KAAM0+E,cAA7B,GAAAp1F,OAA+C6jB,cAC9E,SAAAplC,KAAG,OAAIA,IAAI8S,SAASkqB,KAGxB84E,aAAax3E,SAAS4/E,gBAEtB,IAAM7D,UAAYptE,MAAMpC,OAASoC,MAAM5B,UAAY4B,MAAMvwB,OAEzD05C,KAAKxQ,WAAWu4D,kBAAkB5nD,YAAcH,KAAKG,cAAgB8jD,cAGrE,IAAMjD,eAAiBrtG,KAAKsnB,IAAI5pB,MAAM,GAAKA,MAAM,IAG3C22G,WAAazH,aAAagF,0BAA0BzB,sBAG1DxD,gBAAgBn/C,KAAK,YAArB,aAAAh2C,OAA+CysF,QAA/C,KAAAzsF,OAA0Dm0F,QAA1D,MACAqB,+BAAiBJ,eACS,IAAtBxB,OAAOE,YAAqC,IAAbz9C,SAC/B8+C,gBAAgBh/C,aACCoyB,SAAS,KACTlY,GAAG,MAAO+kC,aAAaG,6BACvBl4G,KAAKw3D,MAEtBsgD,gBAAgB93G,KAAKw3D,MAEzBsgD,gBAAgBz/C,UAAU,SAASkrB,QAAnC,GAAA5gE,OAA8Cs/E,YAA9C,WAAmE,GACnE6V,gBAAgBz/C,UAAU,cAAckrB,QAAxC,GAAA5gE,OAAmDs/E,YAAnD,gBAA6E,GAG5D6V,gBAAgBz/C,UAAU,cAClCkrB,QAAT,GAAA5gE,OAAoBs/E,YAApB,WAAyC,GACxB1e,QADjB,GAAA5gE,OAC4Bs/E,YAD5B,WAAAt/E,OACiDyb,KAAM,GAEvDy5E,oCAAsBC,gBAAiBC,aAAc/+C,UAGrD,IAAMq/C,SAAW/pB,YAAYwpB,gBAAiB,QAAS13G,MAA3B,GAAAuiB,OAAqCs/E,YAArC,eACXtpC,KAAK,cAAe,UACpB4qB,QAFA,GAAA5gE,OAEWs/E,YAFX,eAAAt/E,OAEoCyb,KAAM,GAC1Cz2B,KAAK,SAAAxH,GAAC,OAAIA,IAG3Bk4G,SAAS90B,QAAQ2xB,QAASyB,cAG1B,IAAM4B,YAAcC,eAAiB,EAGrCtB,aAAax3E,SAAS2/E,eACtB,IAAMI,cAAgBvI,aAAaxxE,WAAWtlC,MACxCmvB,UACFiwF,sBACAxmD,kBACAq9C,gCACAiC,eAAgBmH,cAAcr+E,OAC9B69E,cAAeQ,cAAct+E,MAC7B21E,gBACA1H,gBACAmJ,wBACAC,eAAgBT,aAAaS,kBAGjCJ,6BAAeC,SAAUnN,YAAa37E,WIoE9B6vF,CAAW93G,OAERA,6CAWP,OADA8mF,6BAAc9mF,KAAK+xB,SAASyT,SACrBxlC,uDASP,OAAOA,mDAUP,IAAMuB,MAAQvB,KAAKuB,QACnB,OAAOA,MAAM,GAAKA,MAAM,uEAUxB,IAAMwlC,MAAQ/mC,KAAK+mC,QACbxlC,MAAQwlC,MAAMxlC,QACdiV,OAASuwB,MAAMvwB,SAErB,OAAO3S,KAAKsnB,IAAI5pB,MAAM,GAAKA,MAAM,KAAOiV,OAAO,GAAKA,OAAO,0DAU3D,OAAOgwE,QAAQ4xB,IAAIp4G,KAAK+2G,sGAIxB,IAAI1tB,UACEY,QAAU,IAAIzD,QAAQ,SAACn+D,SACzBghE,UAAYhhE,UAIhB,OAFAroB,KAAK+2G,uBAAuB7wG,KAAK+jF,SAE1B,WACHZ,4CAjFJ,OAAOrpF,KAAKgkF,4DApTZ,OAAOpkE,4VC/DMy4F,mhBAEJzrG,QAAQ,IAEbrL,MACAqL,OADArL,MAEEstG,aAAeL,SAASl4D,OAE9B,OADAt2C,KAAKg2G,OAASnH,eAAettG,MAAMA,OAC5BvB,KAAKg2G,2DAGDoB,WACX,OAAOp3G,KAAKg2G,OAAOoB,WAAa,yDAGpB5gG,QAIZ,OAHIA,OAAO9U,QAAU8U,OAAO,KAAOA,OAAO,KACtCA,QAAU,EAAgB,GAAZA,OAAO,KAElBA,4TCnBM8hG,wfAEJ1rG,QAAQ,IAEbrL,MAEAqL,OAFArL,MACA0+C,KACArzC,OADAqzC,KAEE4uD,aAAeL,SAAS1pE,IAE9B,OADA9kC,KAAKg2G,OAASnH,eAAettG,MAAMA,OAAO0+C,KAAKA,MACxCjgD,KAAKg2G,2DAGDoB,WACX,OAAIA,WAAa,EACN,EAGJp3G,KAAKg2G,OAAOoB,WAAa,yDAGpB5gG,QACZ,OAAIA,OAAO,IAAM,GACL3S,KAAK6P,IAAI,EAAG8C,OAAO,IAAK3S,KAAK6P,IAAI,EAAG8C,OAAO,KAC9CA,0UCvBI+hG,wfAEJ3rG,QAAQ,IAEbrL,MAEAqL,OAFArL,MACAg8C,SACA3wC,OADA2wC,SAEEsxD,aAAeL,SAASv6F,IAE9B,OADAjU,KAAKg2G,OAASnH,eAAettG,MAAMA,OAAOg8C,SAASA,UAC5Cv9C,KAAKg2G,2DAGDoB,WACX,OAAOp3G,KAAKg2G,OAAOoB,WAAa,yDAGpB5gG,QACZ,OAAOA,28CCPR,IAAMgiG,iBAAeC,8BAAAC,oBACvBrL,IAAMiL,qBADiBG,8BAAAC,iBAEvBpL,IAAMiL,qBAFiBE,8BAAAC,iBAGvB3L,OAASsL,2BAHcK,kBAMPC,mDACjB,SAAAA,cAAa/rG,OAAQnR,cAAc,mKAAAm9G,CAAA54G,KAAA24G,eAC/B/rG,OAAO8yC,WAAa9yC,OAAO8yC,YAAe,SAAAx+C,KAAG,OAAIA,KADlB23G,yCAAA74G,KAAA84G,8BAAAH,eAAAjgH,KAAAsH,KAEzB4M,OAAQnR,sZAHqB46G,qUAW1BzpG,QAAQ,IAEbqzC,KAIArzC,OAJAqzC,KACArf,QAGAh0B,OAHAg0B,QACAutB,aAEAvhD,OAFAuhD,aACA5Q,SACA3wC,OADA2wC,SAEEh8C,MAAQvB,KAAKuB,QACbw3G,gBAAkBP,gBAAgBrqD,cAExCnuD,KAAKg5G,cAAgB,IAAID,gBACzB,IAAIhyE,MAAQ/mC,KAAKg5G,cAAcpK,aAC3BhuE,gBACA2c,kBACA0C,UACA1+C,cAIJ,OADAwlC,MAAQA,MAAM4Y,2DAeHy3D,WACX,GAAkB,OAAdA,gBAAoC9pG,IAAd8pG,UAG1B,OAAOp3G,KAAKg5G,cAAc3c,cAAc+a,6DAQ7B,IAAA6B,mBAIPj5G,KAAK6vG,eAFLP,eAFO2J,mBAEP3J,eACAC,eAHO0J,mBAGP1J,eAEEr/C,KAAOlwD,KAAKkwD,OAIlB,OAHAA,KAAKK,eAAiC,IAAnB++C,eAA2B,EAAI,GAClDp/C,KAAKM,eAAiC,IAAnB++C,eAA2B,EAAI,GAE3Cr/C,KAAKwB,mDAWZ,GAAItsD,UAAO1D,OAAQ,CACf,IAAM01G,UAAYp3G,KAAKg5G,cAAcE,eAAe7D,sBAAer1G,KAADoF,UAAA1D,QAAA,OAAA4L,EAAAlI,UAAA,KAIlE,OAHAmwG,uBAAuBv1G,KAAMo3G,WAC7Bp3G,KAAKi3G,6BACLj3G,KAAK4zG,aAAa,MACX5zG,KAEX,OAAOA,KAAKw1G,sEAWyC,IAAtC37E,MAAsCz0B,UAAA1D,OAAA,QAAA4L,IAAAlI,UAAA,GAAAA,UAAA,GAA9B,EAAG00B,OAA2B10B,UAAA1D,OAAA,EAAA0D,UAAA,QAAAkI,EAAnBszB,QAAmBx7B,UAAA1D,OAAA,EAAA0D,UAAA,QAAAkI,EAAV2kG,SAAU7sG,UAAA1D,OAAA,EAAA0D,UAAA,QAAAkI,EACjDslG,eAEDhP,YACA5jG,KAAK4M,SADLg3F,YAiBH,OAdA5jG,KAAKkxG,gBAAiBr3E,YAAOC,cAAQ8G,kBAGjCgyE,YADAhP,cAAgB4I,sBAAO5I,cAAgB2I,wBACzBoF,YAAY3xG,MAAQiyG,oBAAYqB,UAAUn3E,IAE1Cw1E,YAAY3xG,MAAQiyG,oBAAYqB,UAAU9vG,IAI5DxD,KAAK6vG,cACDZ,OAAQ2D,cAEZ5yG,KAAKm3G,gBACLn3G,KAAK8vG,cACE9vG,2DAUM,IAETqwD,WACArwD,KAAK4M,SADLyjD,WAGAi/C,eACAtvG,KAAK6vG,eADLP,eAEEp/C,KAAOlwD,KAAKkwD,OAElB,OAAKo/C,eAKDj/C,YACAA,sBAAsBxnD,OAAS7I,KAAKkwD,OAAOG,WAAWA,YAC/CrwD,OAEXkwD,KAAKG,WAAWrwD,KAAKmzG,iBAEdnzG,OAVHkwD,KAAKG,eACErwD,4DAmBX,IADam5G,cAKTn5G,KAAK4M,SAFLg3F,YAHSuV,cAGTvV,YACAvzC,WAJS8oD,cAIT9oD,WAEE9uD,MAAQvB,KAAKuB,QACb2uD,KAAOlwD,KAAKkwD,OAEZghD,eAAiBrtG,KAAKsnB,IAAI5pB,MAAM,GAAKA,MAAM,IAE3C22G,WAAal4G,KAAKy1G,0BAA0BzB,sBAElD,OAAI3jD,WACOH,KAAKnpB,QAAQpC,MAAM0rB,YNxJN,SAAnB+oD,iBAAoBlI,eAAgBmI,SAAUnpD,KAAMugD,cAC7D,IAAM9rE,MAAQurB,KAAKnpB,QAAQpC,QACnByqE,cAAkBqB,aAAa7jG,SAA/BwiG,cACFkK,WAAa30E,MAAMjjC,OACrB63G,eAAiBD,WAQrB,OANIA,YAAyB,IAAXD,UAAkBnI,iBAChCqI,eAAiB11G,KAAK8M,MAAMugG,gBAA6B,IAAXmI,YAGlDE,eAAiB11G,KAAK2P,IAAI47F,cAAevrG,KAAK6P,IAAI,EAAG6lG,iBAE9CrpD,KAAKnpB,QAAQpC,MAAM40E,gBMgJfH,CAAiBlI,eAFbgH,WAAWtU,cAAgB2I,yBAAU3I,cAAgB4I,qBAAM,QAAU,UAE9Bt8C,KAAMlwD,0EAIxD,OAAOuzE,gBAAgBvzE,KAAK4M,SAASyjD,sEAWvBs/C,UAAU,IAEpB/L,YACA5jG,KAAK4M,SADLg3F,YAOAsL,SAHAlvG,KAAK6vG,eADLZ,OAIAC,SAEEh/C,KAAOlwD,KAAKkwD,OACZvrB,MAAQurB,KAAKnpB,QAAQpC,QAZH60E,sBAaEx5G,KAAKy1G,0BAA0BlD,kBAAkB,GAAnE14E,MAbgB2/E,sBAahB3/E,MAAOC,OAbS0/E,sBAaT1/E,OAWf,OAVAo2B,KAAKI,cAAc,SAACz3D,GAChB,GAAIA,IAAM8rC,MAAM,GAAI,CAChB,GAAKi/D,cAAgB6I,uBAAQ7I,cAAgB8I,uBACzC,uBAAArxF,OAAyBye,OAAU,EAAnC,OAEJ,IAAK8pE,cAAgB4I,sBAAO5I,cAAgB2I,2BAAY2C,SACpD,mBAAA7zF,OAAoBwe,MAAQ,EAA5B,QAAqC,EAArC,OAEN,MAAO,KAEN81E,+CAzKP,OAAO5C,qtDCrDM0M,ssBAAiBpD,iTASrBzpG,QACT,OAAA8sG,KAAAC,yBAAAF,SAAAp/G,WAAA,cAAA2F,MAAAtH,KAAAsH,KAAyB4M,sEAsB4B,IAAtCitB,MAAsCz0B,UAAA1D,OAAA,QAAA4L,IAAAlI,UAAA,GAAAA,UAAA,GAA9B,EAAG00B,OAA2B10B,UAAA1D,OAAA,EAAA0D,UAAA,QAAAkI,EAAnBszB,QAAmBx7B,UAAA1D,OAAA,EAAA0D,UAAA,QAAAkI,EAAV2kG,SAAU7sG,UAAA1D,OAAA,EAAA0D,UAAA,QAAAkI,EACjDslG,eAEDhP,YACA5jG,KAAK4M,SADLg3F,YAgBH,OAbA5jG,KAAKkxG,gBAAiBr3E,YAAOC,cAAQ8G,kBAGjCgyE,YADAhP,cAAgB4I,sBAAO5I,cAAgB2I,wBACzBoF,YAAY3xG,MAAQiyG,oBAAYhrE,KAAK9K,IAErCw1E,YAAY3xG,MAAQiyG,oBAAYhrE,KAAKzjC,IAIvDxD,KAAK6vG,cACDZ,OAAQ2D,cAEZ5yG,KAAKm3G,gBACEn3G,2DAUP,IACIs4B,WADA62E,WAAa,GAEX34F,OAASxW,KAAKwW,SACZo5F,aAAiB5vG,KAAKu2G,cAAtB3G,aAJKgK,cAKmB55G,KAAK4M,SAA7ByjD,WALKupD,cAKLvpD,WAAYzvB,QALPg5E,cAKOh5E,QACZquE,OAAWjvG,KAAK6vG,eAAhBZ,OANK4K,oBAO8C75G,KAAKozG,gBAAhDpB,YAPH6H,oBAOL//E,OAA4Bi4E,WAPvB8H,oBAOgBhgF,MAAmBsB,OAPnC0+E,oBAOmC1+E,OAPnC2+E,kBAQatG,iBAAiBvE,OAAOC,SAAU6C,WAAYC,aAAhEn4E,MARKigF,kBAQLjgF,MAAOC,OARFggF,kBAQEhgF,OAaf,GAXAu2B,YAAcrwD,KAAKkwD,OAAOG,WAAWA,YACrC8+C,WAAa9+C,YAAc75C,OAG3Bo5F,aAAax3E,SAASp4B,KAAKo0G,iBAGJ,iBAAZxzE,SAAwBA,SAAW,GAAKA,SAAW,GAC1D5gC,KAAK+mC,QAAQnG,QAAQA,SAGrBpqB,QAAUA,OAAO9U,OAAQ,CACzB,IAAM6b,OAAS8yC,YAAc75C,OACvBy5F,cAAgBjwG,KAAKm2G,eAAe54F,QAC1C4xF,WAAa5xF,OAAOtV,IAAI,SAACpP,EAAGN,GAIxB,OAHAq3G,aAAa70E,uBAAsB,GAEnCzC,WAAas3E,aAAa50E,aAAai1E,cAAcp3G,EAAGN,GAAIshC,MAAOC,OAAQqB,QACpEy0E,aAAa5qF,YAAYqT,YAAYC,cAIpD,OADAt4B,KAAKmvG,WAAWA,YACTnvG,+DAeP,OALKA,KAAK4zG,iBACN5zG,KAAK4zG,aAAaoB,0BAAmBh1G,OACrC2zG,iBAAU3zG,MACVA,KAAK4zG,gBAEF5zG,KAAK4zG,qEASZ,OAAO5zG,KAAKkwD,OAAOnpB,QAAQvwB,6EAGRhd,OAAO,IAAAib,MAAAzU,KAClB0/C,WAAelmD,MAAfkmD,WAER,OAAIA,WACO,SAAA/a,OAAK,OAAI,SAACzjC,IAAK3I,GAAN,OAAYmnD,WAAWx+C,IAAKA,IAAK3I,EAAGosC,SAEjD,kBAAM,SAAAzjC,KAAG,OAAIuT,MAAKilF,aAALjlF,CAAmBvT,2DAUvC,OAAOlB,KAAK+mC,QAAQG,8DAST,IAAA6yE,oBAIP/5G,KAAK6vG,eAFLP,eAFOyK,oBAEPzK,eACAC,eAHOwK,oBAGPxK,eAEEr/C,KAAOlwD,KAAKkwD,OAIlB,OAFAA,KAAKK,cAAc++C,eAAiB,EAAI,GACxCp/C,KAAKM,cAAc++C,eAAiB,EAAI,GACjCr/C,KAAKwB,6DAGF1b,GAAIC,IACd,OAAOj2C,KAAK+mC,QAAQW,aAAasO,GAAIC,4DASxBD,GAAIC,IACjB,IAAMlP,MAAQ/mC,KAAK+mC,QACbxlC,MAAQwlC,MAAMxlC,QACd+hB,QAAU/hB,MAAM,GAAKA,MAAM,GAE3B2iE,OAASlkE,KAAK0nC,aAAasO,GAAIC,IAGrC,OAFWlP,MAAMzjB,QAAU4gD,OAAOA,OAAOxiE,OAAS,GAAKwiE,OAAO,IACnDn9B,MAAMzjB,QAAU4gD,OAAO,GAAKA,OAAOA,OAAOxiE,OAAS,IAAMqlC,MAAMG,mDAxJ1E,OAAO8lE,yuDCbMgN,yCAEjB,SAAAA,WAAwB,IAAAhV,iBAAAvwF,8JAAAwlG,CAAAj6G,KAAAg6G,UAAA,QAAAnzC,KAAAzhE,UAAA1D,OAARgf,OAAQ,IAAA7X,MAAAg+D,MAAAC,KAAA,EAAAA,KAAAD,KAAAC,OAARpmD,OAAQomD,MAAA1hE,UAAA0hE,MAAA,OACpBryD,MAAAylG,oCAAAl6G,MAAAglG,iBAAAmV,yBAAAH,WAAAthH,KAAA6O,MAAAy9F,kBAAAhlG,MAAAqb,OAASqF,WACJuyF,SAAW/zD,IAFIzqC,8XAFU4hG,iTAcrB90G,OACT,IAAIwlC,MAAQqzE,cAAAD,yBAAAH,SAAA3/G,WAAA,cAAA2F,MAAAtH,KAAAsH,KAAkBuB,OAG9B,OADAwlC,MAAQA,MAAM4Y,qDAqBN/yC,QAAQ,IACRg3F,YAAgBh3F,OAAhBg3F,YACFsT,UAAYvK,mBAAmB/I,aAErC,OAAIsT,UACaA,UAAUl3G,KAAK+mC,SAGzB,yEAGYvtC,OAAO,IAAAmb,OAAA3U,KAClB0/C,WAAelmD,MAAfkmD,WAER,OAAIA,WACO,SAAC/a,OACJ,IAAM01E,SAAW11E,MAAM18B,IAAI,SAAAxO,GAAC,OAAIA,EAAE8Q,YAClC,OAAO,SAACrJ,IAAK3I,GAAN,OAAYmnD,WAAWx+C,IAAKA,IAAIqJ,UAAWhS,EAAG8hH,YAGtD,kBAAM,SAAAh6G,MAAI,OAAIsU,OAAKoyB,QAAQ2Y,YAAb/qC,CAA0BtU,0DASpC,IAAA44G,mBAIPj5G,KAAK6vG,eAFLP,eAFO2J,mBAEP3J,eACAC,eAHO0J,mBAGP1J,eAEEr/C,KAAOlwD,KAAKkwD,OAGlB,OAFAA,KAAKK,eAAiC,IAAnB++C,eAA2B,EAAI,GAClDp/C,KAAKM,eAAiC,IAAnB++C,eAA2B,EAAI,GAClD6K,cAAAD,yBAAAH,SAAA3/G,WAAA,cAAA2F,MAAAtH,KAAAsH,4DAUA,OAAOA,KAAK4M,SAASyjD,YAAcrwD,KAAK+mC,QAAQpC,gDAU3C3B,MAEL,OADAhjC,KAAKizG,SAAWpvG,KAAK2P,IAAIxT,KAAKizG,SAAUjwE,MACjChjC,6CAWP,GAAIoF,UAAO1D,OAAQ,CACf,IAAMs1G,YAAc3B,sBAAer1G,KAADoF,UAAA1D,QAAA,OAAA4L,EAAAlI,UAAA,IAIlC,OAHAmwG,uBAAuBv1G,KAAMg3G,aAC7Bh3G,KAAKi3G,6BACLj3G,KAAK4zG,aAAa,MACX5zG,KAEX,OAAOA,KAAKw1G,kEAeZ,OALKx1G,KAAK4zG,iBACN5zG,KAAK4zG,aAAaoB,0BAAmBh1G,OACrCA,KAAK4zG,eACLD,iBAAU3zG,OAEPA,KAAK4zG,mFAIZ,OAAOrgC,gBAAgBvzE,KAAK4M,SAASyjD,0EAWgB,IAAtCx2B,MAAsCz0B,UAAA1D,OAAA,QAAA4L,IAAAlI,UAAA,GAAAA,UAAA,GAA9B,EAAG00B,OAA2B10B,UAAA1D,OAAA,EAAA0D,UAAA,QAAAkI,EAAnBszB,QAAmBx7B,UAAA1D,OAAA,EAAA0D,UAAA,QAAAkI,EAAV2kG,SAAU7sG,UAAA1D,OAAA,EAAA0D,UAAA,QAAAkI,EACjDslG,eAEDhP,YACA5jG,KAAK4M,SADLg3F,YAiBH,OAdA5jG,KAAKkxG,gBAAiBr3E,YAAOC,cAAQ8G,kBAGjCgyE,YADAhP,cAAgB4I,sBAAO5I,cAAgB2I,wBACzBoF,YAAY3xG,MAAQiyG,oBAAYtoD,KAAKxtB,IAErCw1E,YAAY3xG,MAAQiyG,oBAAYtoD,KAAKnmD,IAIvDxD,KAAK6vG,cACDZ,OAAQ2D,cAEZ5yG,KAAKm3G,gBACLn3G,KAAK8vG,cACE9vG,2DAUP,IAAImvG,WACA72E,WACI+3B,WAAerwD,KAAK4M,SAApByjD,WACA4+C,OAAWjvG,KAAK6vG,eAAhBZ,OAJK4K,oBAK8C75G,KAAKozG,gBAAhDpB,YALH6H,oBAKL//E,OAA4Bi4E,WALvB8H,oBAKgBhgF,MAAmBsB,OALnC0+E,oBAKmC1+E,OACxCy0E,aAAiB5vG,KAAKu2G,cAAtB3G,aACFp5F,OAASxW,KAAKmzG,gBAEpB9iD,YAAcrwD,KAAKkwD,OAAOG,WAAWA,YATxB,IAAAypD,kBAWatG,iBAAiBvE,OAAOC,SAAU6C,WAAYC,aAAhEn4E,MAXKigF,kBAWLjgF,MAAOC,OAXFggF,kBAWEhgF,OAOf,GALAq1E,WAAa9+C,YAAc75C,OAG3Bo5F,aAAax3E,SAASp4B,KAAKo0G,iBAEvB59F,QAAUA,OAAO9U,OAAQ,CACzB,IAAM6b,OAAS8yC,YAAc75C,OACvBy5F,cAAgBjwG,KAAKm2G,eAAe54F,QAC1C4xF,WAAa5xF,OAAOtV,IAAI,SAACpP,EAAGN,GAIxB,OAHAq3G,aAAa70E,uBAAsB,GAEnCzC,WAAas3E,aAAa50E,aAAai1E,cAAcp3G,EAAGN,GAAIshC,MAAOC,OAAQqB,QACpEy0E,aAAa5qF,YAAYqT,YAAYC,cAIpD,OADAt4B,KAAKmvG,WAAWA,YACTnvG,2CA9KP,OAAOitG,qBC3CFqN,WACTC,MAAQrnE,IAAK,SAAUF,IAAK,eAC5BwnE,WAAatnE,IAAK,SAAUF,IAAK,eACjCynE,SAAWvnE,IAAK,SAAUF,IAAK,eAC/B0nE,UAAYxnE,IAAK,SAAUF,IAAK,cAChC2nE,eAAiBznE,IAAK,SAAUF,IAAK,eACrC4nE,iBAAmB1nE,IAAK,SAAUF,IAAK,cACvC6nE,aAAe3nE,IAAK,SAAUF,IAAK,eACnC8nE,QAAU5nE,IAAK,SAAUF,IAAK,eAC9B+nE,YAAc7nE,IAAK,SAAUF,IAAK,eAClCgoE,YAAc9nE,IAAK,SAAUF,IAAK,eAClCioE,WAAa/nE,IAAK,SAAUF,IAAK,aACjCkoE,SAAWhoE,IAAK,SAAUF,IAAK,aAC/BmoE,WAAajoE,IAAK,SAAUF,IAAK,aACjCooE,SAAWloE,IAAK,SAAUF,IAAK,WAC/BqoE,KAAOnoE,IAAK,SAAUF,IAAK,WAC3BsoE,WAAapoE,IAAK,SAAUF,IAAK,YACjCuoE,QAAUroE,IAAK,SAAUF,IAAK,aAC9BwoE,OAAStoE,IAAK,SAAUF,IAAK,cAC7ByoE,YAAcvoE,IAAK,SAAUF,IAAK,aAClC0oE,QAAUxoE,IAAK,SAAUF,IAAK,aAC9B2oE,MAAQzoE,IAAK,SAAUF,IAAK,aAC5B4oE,QAAU1oE,IAAK,SAAUF,IAAK,aAC9B6oE,aAAe3oE,IAAK,SAAUF,IAAK,eACnC8oE,cAAgB5oE,IAAK,SAAUF,IAAK,eACpC+oE,sBAAwB7oE,IAAK,SAAUF,IAAK,eAC5CgpE,YAAc9oE,IAAK,SAAUF,IAAK,eAClCipE,UAAY/oE,IAAK,SAAUF,IAAK,eAChCkpE,WAAahpE,IAAK,SAAUF,IAAK,eACjCmpE,eAAiBjpE,IAAK,SAAUF,IAAK,eACrCopE,OAASlpE,IAAK,SAAUF,IAAK,eAC7BqpE,WAAanpE,IAAK,SAAUF,IAAK,eACjCspE,UAAYppE,IAAK,SAAUF,IAAK,eAChCupE,gBAAkBrpE,IAAK,SAAUF,IAAK,eACtCwpE,QAAUtpE,IAAK,SAAUF,IAAK,eAC9BypE,aAAevpE,IAAK,SAAUF,IAAK,eACnC0pE,OAASxpE,IAAK,SAAUF,IAAK,eAC7B2pE,WAAazpE,IAAK,SAAUF,IAAK,eACjC4pE,KAAO1pE,IAAK,SAAUF,IAAK,eAC3B6pE,WAAa3pE,IAAK,SAAUF,IAAK,eACjC8pE,YAAc5pE,IAAK,SAAUF,IAAK,cAClC+pE,WAAa7pE,IAAK,SAAUF,IAAK,cACjCgqE,eAAiB9pE,IAAK,SAAUF,IAAK,cACrCiqE,MAAQ/pE,IAAK,SAAUF,IAAK,cAC5BkqE,WAAahqE,IAAK,SAAUF,IAAK,cACjCmqE,aAAejqE,IAAK,SAAUF,IAAK,aACnCoqE,QAAUlqE,IAAK,SAAUF,IAAK,aAC9BqqE,OAASnqE,IAAK,SAAUF,IAAK,aAC7BsqE,QAAUpqE,IAAK,SAAUF,IAAK,WAC9BuqE,gBAAkBrqE,IAAK,SAAUF,IAAK,aACtCwqE,OAAStqE,IAAK,SAAUF,IAAK,aAC7ByqE,WAAavqE,IAAK,SAAUF,IAAK,cACjC0qE,aAAexqE,IAAK,SAAUF,IAAK,cACnC2qE,WAAazqE,IAAK,SAAUF,IAAK,aACjC4qE,MAAQ1qE,IAAK,SAAUF,IAAK,WAC5B6qE,WAAa3qE,IAAK,SAAUF,IAAK,aACjC8qE,YAAc5qE,IAAK,SAAUF,IAAK,aAClC+qE,aAAe7qE,IAAK,SAAUF,IAAK,cACnCgrE,aAAe9qE,IAAK,SAAUF,IAAK,aACnCirE,mBAAqB/qE,IAAK,SAAUF,IAAK,aACzCkrE,YAAchrE,IAAK,SAAUF,IAAK,eAClCmrE,WAAajrE,IAAK,SAAUF,IAAK,eACjCorE,cAAgBlrE,IAAK,SAAUF,IAAK,eACpCqrE,gBAAkBnrE,IAAK,SAAUF,IAAK,cACtCsrE,UAAYprE,IAAK,SAAUF,IAAK,aAChCurE,aAAerrE,IAAK,SAAUF,IAAK,aACnCwrE,OAAStrE,IAAK,SAAUF,IAAK,WAC7ByrE,WAAavrE,IAAK,SAAUF,IAAK,WACjC0rE,kBAAoBxrE,IAAK,SAAUF,IAAK,eACxC2rE,MAAQzrE,IAAK,SAAUF,IAAK,aAC5B4rE,MAAQ1rE,IAAK,SAAUF,IAAK,aAC5B6rE,WAAa3rE,IAAK,SAAUF,IAAK,eACjC8rE,eAAiB5rE,IAAK,SAAUF,IAAK,eACrC+rE,YAAc7rE,IAAK,SAAUF,IAAK,eAClCgsE,WAAa9rE,IAAK,SAAUF,IAAK,cACjCisE,iBAAmB/rE,IAAK,SAAUF,IAAK,cACvCksE,eAAiBhsE,IAAK,SAAUF,IAAK,aACrCmsE,eAAiBjsE,IAAK,SAAUF,IAAK,cACrCosE,WAAalsE,IAAK,SAAUF,IAAK,cACjCqsE,UAAYnsE,IAAK,SAAUF,IAAK,aAChCssE,MAAQpsE,IAAK,SAAUF,IAAK,aAC5BusE,gBAAkBrsE,IAAK,SAAUF,IAAK,eACtCwsE,YAActsE,IAAK,SAAUF,IAAK,eAClCysE,WAAavsE,IAAK,SAAUF,IAAK,eACjC0sE,SAAWxsE,IAAK,SAAUF,IAAK,eAC/B2sE,cAAgBzsE,IAAK,SAAUF,IAAK,eACpC4sE,aAAe1sE,IAAK,SAAUF,IAAK,aACnC6sE,YAAc3sE,IAAK,SAAUF,IAAK,cAClC8sE,gBAAkB5sE,IAAK,SAAUF,IAAK,eACtC+sE,WAAa7sE,IAAK,SAAUF,IAAK,cACjCgtE,WAAa9sE,IAAK,SAAUF,IAAK,cACjCitE,MAAQ/sE,IAAK,SAAUF,IAAK,WAC5BktE,YAAchtE,IAAK,SAAUF,IAAK,WAClCmtE,UAAYjtE,IAAK,SAAUF,IAAK,WAChCotE,MAAQltE,IAAK,SAAUF,IAAK,WAC5BqtE,cAAgBntE,IAAK,SAAUF,IAAK,aACpCstE,UAAYptE,IAAK,SAAUF,IAAK,eAChCutE,SAAWrtE,IAAK,SAAUF,IAAK,eAC/BwtE,MAAQttE,IAAK,SAAUF,IAAK,eAC5BytE,QAAUvtE,IAAK,SAAUF,IAAK,eAC9B0tE,QAAUxtE,IAAK,SAAUF,IAAK,eAC9B2tE,SAAWztE,IAAK,SAAUF,IAAK,aAC/B4tE,SAAW1tE,IAAK,SAAUF,IAAK,aAC/B6tE,cAAgB3tE,IAAK,SAAUF,IAAK,cACpC8tE,cAAgB5tE,IAAK,SAAUF,IAAK,eACpC+tE,YAAc7tE,IAAK,SAAUF,IAAK,cAClCguE,YAAc9tE,IAAK,SAAUF,IAAK,aAClCiuE,YAAc/tE,IAAK,SAAUF,IAAK,cAClCkuE,aAAehuE,IAAK,SAAUF,IAAK,aACnCmuE,QAAUjuE,IAAK,SAAUF,IAAK,aAC9BouE,QAAUluE,IAAK,SAAUF,IAAK,YAC9BquE,eAAiBnuE,IAAK,SAAUF,IAAK,aACrCsuE,WAAapuE,IAAK,SAAUF,IAAK,cACjCuuE,iBAAmBruE,IAAK,SAAUF,IAAK,eACvCwuE,OAAStuE,IAAK,SAAUF,IAAK,eAC7ByuE,MAAQvuE,IAAK,SAAUF,IAAK,eAC5B0uE,UAAYxuE,IAAK,SAAUF,IAAK,eAChC2uE,WAAazuE,IAAK,SAAUF,IAAK,eACjC4uE,OAAS1uE,IAAK,SAAUF,IAAK,eAC7B6uE,WAAa3uE,IAAK,SAAUF,IAAK,eACjC8uE,YAAc5uE,IAAK,SAAUF,IAAK,eAClC+uE,YAAc7uE,IAAK,SAAUF,IAAK,eAClCgvE,UAAY9uE,IAAK,SAAUF,IAAK,eAChCivE,OAAS/uE,IAAK,SAAUF,IAAK,eAC7BkvE,SAAWhvE,IAAK,SAAUF,IAAK,eAC/BmvE,aAAejvE,IAAK,SAAUF,IAAK,eACnCovE,OAASlvE,IAAK,SAAUF,IAAK,eAC7BqvE,cAAgBnvE,IAAK,SAAUF,IAAK,eACpCsvE,OAASpvE,IAAK,SAAUF,IAAK,eAC7BuvE,eAAiBrvE,IAAK,SAAUF,IAAK,eACrCwvE,WAAatvE,IAAK,SAAUF,IAAK,eACjCyvE,WAAavvE,IAAK,SAAUF,IAAK,eACjC0vE,WAAaxvE,IAAK,SAAUF,IAAK,eACjC2vE,QAAUzvE,IAAK,SAAUF,IAAK,eAC9B4vE,UAAY1vE,IAAK,SAAUF,IAAK,eAChC6vE,MAAQ3vE,IAAK,SAAUF,IAAK,eAC5B8vE,SAAW5vE,IAAK,SAAUF,IAAK,eAC/B+vE,gBAAkB7vE,IAAK,SAAUF,IAAK,eACtCgwE,WAAa9vE,IAAK,SAAUF,IAAK,eACjCiwE,eAAiB/vE,IAAK,SAAUF,IAAK,YACrCkwE,OAAShwE,IAAK,SAAUF,IAAK,UCtIpBmwE,SACT,UACA,UACA,UACA,UACA,UACA,WAGSC,uBAAyB,UAEzBC,gBACT9hH,MAAO4hH,QACP3pH,MAAO2pH,QAAQ,GACf7+E,MAAM,EACNg/E,MAAO,EACPjoH,KAAM0xG,weCjBH,IAAMwW,mBAAe,SAAfA,aAAeC,QAAM,cAAAnoG,OAAwB,IAAZmoG,OAAO,GAAnB,KAAAnoG,OAA2C,IAAZmoG,OAAO,GAAtC,MAAAnoG,OAA+D,IAAZmoG,OAAO,GAA1D,MAAAnoG,OAChCmoG,OAAO,IAAM,EADmB,MAGrBC,mBAAqB,SAArBA,mBAAqBC,YAAU,OAAKA,WAAWp3G,MAAM,UACjDyF,OAAO,SAACoqB,EAAG1hC,GAAJ,SAAA4gB,OAAa8gB,GAAb9gB,OAAiB5gB,EAAEmjC,OAAO,GAAGigB,eAA7BxiC,OAA6C5gB,EAAEqgB,MAAM,KAAM,KAEtE6oG,wBAAoB,SAApBA,kBAAqBlpH,EAAGmpH,cACjC,IAAIpxE,MAAQ,GACZ,GAAiB,iBAAN/3C,EAGP,GADAA,GADAA,EAAIA,EAAE6F,QAAQ,KAAM,KACdmB,chBUK,QgBTP0sE,YAAY1zE,IhBQJ,SgBRkB0zE,YAAY1zE,GAEtC+3C,QADAA,MAAQ/3C,EAAE4N,MAAM,mBACD,GAAK,IAAKmqC,MAAM,GAAK,IAAKA,MAAM,GAAK,IAAKA,MAAM,IAAM,QAClE,GhBII,QgBJA27B,YAAY1zE,GACnB+3C,MzKimCK,SAAXqxE,SAAY3wE,KACd,IAAMzvC,OAAS,4CAA4CgvC,KAAKS,KAE1D75C,EAAIgI,SAASoC,OAAO,GAAI,IACxBqvC,EAAIzxC,SAASoC,OAAO,GAAI,IACxBL,EAAI/B,SAASoC,OAAO,GAAI,IACxB9I,EAAI8I,OAAO,GAAKpC,SAASoC,OAAO,GAAI,IAAM,EAChD,OAAOyqE,SAAS70E,EAAGy5C,EAAG1vC,EAAGzI,GyKxmCTkpH,CAASppH,QACd,GhBCI,QgBDA0zE,YAAY1zE,GAAY,CAC/B,IAAM2zE,IAAM3zE,EAAEiJ,UAAUjJ,EAAEwL,QAAQ,KAAO,EAAGxL,EAAEgkC,YAAY,MAAMnyB,MAAM,QACtEkmC,MAAQ07B,SAAQ3mE,WAAR,EAAAu8G,wBAAY11C,WACbksC,UAAUmJ,mBAAmBhpH,MACpC+3C,MAAQ07B,SAAQ3mE,WAAR,EAAAu8G,wBAAYxJ,UAAUmJ,mBAAmBhpH,IAAIu4C,IAAI1mC,MAAM,aAKnEkmC,MAHS/3C,aAAaoO,MAGdpO,EAFAyzE,SAAS01C,cAIrB,OAAOpxE,OAGEinD,wBACT7sF,QACI4/D,aAAc,SAAAA,aAAC9xC,QAAS9tB,QACpB,IAAM+pG,OAASppC,kBAAmB7yC,QAAQ1V,YAAYpF,iBAClDhT,OAAOvR,OAAS0xG,mBAChBngG,OAAOrL,MAAQqL,OAAOrL,QAAUo1G,OAAOp1G,MAAM,IAC7CqL,OAAOrL,MAAQqL,OAAOrL,MAAMG,OAAS,EAAIkL,OAAOrL,OAAS6hH,wBAA1C/nG,OAAAyoG,wBAAqEl3G,OAAOrL,SAE/F,IAAMm0G,UAAYnoC,eAAeopC,OAAQj8E,QAAQ9tB,UAC3Cm3G,UAAYx2C,eAAemoC,UAAW9oG,QAO5C,OALIm3G,UAAUxiH,iBAAiBsH,QAC3Bk7G,UAAUxiH,MAAQwiH,UAAUxiH,MAAM0G,IAAI,SAACxN,EAAGlC,GAAJ,OAAUorH,wBAAkBlpH,EAAG0oH,QAAQ5qH,MAC7EwrH,UAAUT,MAAQ12G,OAAO02G,OAASS,UAAUxiH,MAAMG,QAEtDqiH,UAAUvqH,MAAQmqH,wBAAkBI,UAAUvqH,MAAOuqH,UAAUvqH,OACxDuqH,YAGfvtG,UACAuwB,SACAi9E,iBCtDSC,yBAAoB,SAApBA,kBAAqB7M,UAAW8M,UAAWC,oBACpD,OAAI/M,qBAAqB1qG,sBACdy3G,mBAEJD,urBCAX,IAAME,wBAAW,SAAXA,SAAY5tG,OAAQ8sG,OACtB,IAAIe,YAEJ,GAAIf,iBAAiBz6G,MACjBw7G,SAAWf,MAAMxoG,QAAQvK,OACzB8zG,SAAWC,iCAAI,IAAI/tG,KAAKC,OAAO,IAAhB6E,OAAAipG,iCAAuBhB,QAAO9sG,OAAO,OAAMjG,YAG1D,IADA,IAAM49C,aAAe4f,kCAAkBxmE,WAAlB,EAAA+8G,iCAAwB9tG,SACpCje,EAAI,EAAGA,GAAK+qH,MAAO/qH,IACxB8rH,SAAS9rH,GAAK41D,aAAa51D,EAAI+qH,OAOvC,OAHIe,SAAS,GAAK7tG,OAAO,IACrB6tG,SAAS/7G,SAEJkO,cAAQ6tG,oBAGfE,0BAAa,SAAbA,WAAcC,eAAgBjjH,OAChC,IAAIkjH,YAGJ,GAAID,eAFmB3gH,KAAK2P,IAAIjS,MAAMG,OAAQ,IAI1C,IADA,IAAMysD,aAAe8f,qC3K29BL,SAAlBy2C,kBAAkB,OAAMC,Q2K39BuBD,GAAmBnjH,MAAM0G,IAAI,SAAAxN,GAAC,OAAI8oH,mBAAa9oH,MACnFlC,EAAI,EAAGA,EAAIisH,eAAgBjsH,IAChCksH,SAASlsH,GAAK41D,aAAa51D,GAAKisH,eAAiB,SAGrDC,SAAWljH,MAAMuZ,MAAM,EAAG0pG,gBAE9B,OAASC,oBASPG,cAAgB,SAAhBA,cAAiBpuG,QACnB,IAAM2pF,WAAa3pF,OAEnB,OAASA,OADSA,OAAOvO,IAAI,SAACpP,EAAGN,GAAJ,OAAWA,GAAMie,OAAO9U,OAAS,KAClCy+F,sBAAY0kB,aAAc,EAAG,KASvDC,qBAAuB,SAAvBA,qBAAwBtuG,OAAQ8sG,MAAO/hH,OAEzC,OAASiV,cAAQ2pF,WADE3pF,OACUquG,aAAc,EAAG,GAAItjH,cAShDwjH,aAAe,SAAfA,aAAgBvuG,OAAQ8sG,MAAO/hH,OAEjC,OAAS4+F,WADU3pF,OACEA,cAAQmpC,MAAM,EAAMp+C,cAUvCyjH,6BAAgB,SAAhBA,cAAiBxuG,OAAQ8sG,MAAO/hH,OAAU,IAAA0jH,UACHb,wBAAS5tG,OAAQ8sG,OAA1CnjB,WAD4B8kB,UACpCzuG,OAAoB6tG,SADgBY,UAChBZ,SAG5B,OAASlkB,sBAAY3pF,OAAQ6tG,SAAU1kE,MAAM,EAAMp+C,MAF9BgjH,0BAAWF,SAAS3iH,OAAS,EAAGH,OAA7CkjH,WAKNS,sCAAyB,SAAzBA,uBAA0B1uG,OAAQ8sG,MAAO/hH,OAAU,IAAA4jH,WACZf,wBAAS5tG,OAAQjV,MAAMG,OAAS,GAEzE,OAASy+F,WAH4CglB,WAC7C3uG,OAEaA,OAHgC2uG,WACzBd,SAEW1kE,MAAM,EAAMp+C,MADlCA,MAAM0G,IAAI,SAAAxN,GAAC,OAAI8oH,mBAAa9oH,OAa3C2qH,YAAc,SAAdA,YAAepO,YAAajwE,MAAOvwB,OAAQ2pF,YAG7C,OAAOp5D,MADQvwB,OADD2pF,WAAWl6F,QAAQ+wG,gBAa/BqO,4BAAe,SAAfA,aAAgBrO,YAAajwE,MAAOvwB,QACtC,IAAM8uG,QAAUtO,YAAcxgG,OAAO,KAAOA,OAAOA,OAAO9U,OAAS,GAAK8U,OAAO,IAE/E,OAAOytG,yBAAkBjN,YAAajwE,MAAMu+E,QAASv+E,MAAM,KASzDw+E,2BAAc,SAAdA,YAAevO,YAAajwE,MAAOvwB,QAArB,OAAgCytG,yBAAkBjN,YAAajwE,MAAMiwE,aACrFjwE,MAAMvwB,OAAO,MAiDJgvG,eAAiB,SAAjBA,eAAkBC,WAAYC,UAAWC,WAAYrC,OAApC,OA1CX,SAAb5e,aAAa,IAAA/xE,KAAA,OAAAizF,8BAAAjzF,QAAA,GAAAtX,OACXqyF,UADW,KAAAryF,OACEqyF,UADF,KAAAryF,OACemyF,aAC1BzmE,MAAOymE,WACPqY,YAAa,SAAAA,cAAA,OAAMf,sBACnBtrH,MAAO,SAAAA,QAAA,OAAM6rH,+BAJFO,8BAAAjzF,KAAA,GAAAtX,OAMXqyF,UANW,KAAAryF,OAMEsyF,SANF,KAAAtyF,OAMcmyF,aACzBzmE,MAAOymE,WACPqY,YAAa,SAAAA,cAAA,OAAMf,sBACnBtrH,MAAO,SAAAA,QAAA,OAAM6rH,+BATFO,8BAAAjzF,KAAA,GAAAtX,OAWXsyF,SAXW,KAAAtyF,OAWCsyF,SAXD,KAAAtyF,OAWamyF,aACxBzmE,MAAOymE,WACPqY,YAAa,SAAAA,cAAA,OAAMjB,eACnBprH,MAAO,SAAAA,QAAA,OAAM4rH,eAdFQ,8BAAAjzF,KAAA,GAAAtX,OAgBXsyF,SAhBW,KAAAtyF,OAgBCsyF,SAhBD,KAAAtyF,OAgBa6xF,UACxBnmE,MAAOmmE,QACP2Y,YAAa,SAAAA,cAAA,OAAMd,cACnBvrH,MAAO,SAAAA,QAAA,OAAM+rH,8BAnBFK,8BAAAjzF,KAAA,GAAAtX,OAqBXqyF,UArBW,KAAAryF,OAqBEqyF,UArBF,KAAAryF,OAqBe6xF,UAC1BnmE,MAAOgmE,OACP8Y,YAAa,SAAAA,cAAA,OAAMX,uCACnB1rH,MAAO,SAAAA,QAAA,OAAM+rH,8BAxBFK,8BAAAjzF,KAAA,GAAAtX,OA0BXqyF,UA1BW,KAAAryF,OA0BEsyF,SA1BF,KAAAtyF,OA0Bc6xF,UACzBnmE,MAAOqmE,SACPyY,YAAa,SAAAA,cAAA,OAAMb,8BACnBxrH,MAAO,SAAAA,QAAA,OAAM+rH,8BA7BF5yF,KA2Cd+xE,GAAA,GAAArpF,OAAqBoqG,WAArB,KAAApqG,OAAmCqqG,UAAnC,KAAArqG,OAAgDsqG,YAAc,8xBCpK9CG,gCAUjB,SAAAA,UAAal5G,iKAAQm5G,CAAA/lH,KAAA8lH,WACjBj5C,sBAAsB7sE,KAAMy5F,wBAC5Bz5F,KAAK4M,OAAOA,QAEZ5M,KAAKgmH,YAAoC,WAAtBhmH,KAAKovF,QAAQ/zF,KAAoBqyG,UAAYC,SAChE3tG,KAAKimH,WAAoC,WAAtBjmH,KAAKovF,QAAQ/zF,MAAsB2E,KAAKovF,QAAQ9qD,KAAoBqpE,SAAZD,UAE3E1tG,KAAKkmH,YlBqCN,SAASC,cAAe73D,QAO3B,OALIA,QAA8B,iBAAZA,QACS,MAAdA,OAAO,GAAak/C,qBAEpBN,kBkB1CMiZ,CAAcnmH,KAAKovF,QAAQ7tF,OAE9CvB,KAAKomH,eAAiBpmH,KAAKqmH,iBAAiBrmH,KAAKgmH,YAAahmH,KAAKimH,WAAYjmH,KAAKkmH,aACpFlmH,KAAKg2G,OAASh2G,KAAK4uG,YAAY5uG,KAAKomH,gBAEpCpmH,KAAKgkF,IAAM15E,cAEXtK,KAAKsmH,aAAa15G,OAAO4J,4SAgChB+vG,eAAe,IAChBhlH,MAAUvB,KAAK4M,SAAfrL,MACR,OAAIA,OAA4B,iBAAXA,MlBlBtB,SAASilH,UAAWl4D,QACvB,MAAkB,MAAdA,OAAO,GACA8/C,gBAAgBqY,8BAAan4D,SAEjC6/C,aAAasY,8BAAan4D,SkBelBk4D,CAAUjlH,OAEdqtG,2BACHvzG,KAAMkrH,cAAcx/E,MACpBxlC,wEAaUkkH,WAAYC,UAAWC,YACnB3lH,KAAK4M,SAAf02G,MAER,OAAOkC,eAAeC,WAAYC,UAAWC,8DAUnCe,eACV,OAAOnD,mBAAamD,yDASdtP,WACN,OAAOp3G,KAAKujH,aAAavjH,KAAK2mH,YAAYvP,4DASjCA,WACT,GAAIp3G,KAAKwW,eAA0BlJ,IAAd8pG,UAAyB,CAC1C,IAAMrwE,MAAQ/mC,KAAK+mC,QACbxlC,MAAQwlC,MAAMxlC,MAAQwlC,MAAMxlC,QAAU,KACtCixC,MAAQxyC,KAAKomH,eAAe5sH,MAAM+H,MAA1BvB,CAAiCo3G,UAAWrwE,MAAO/mC,KAAKwW,SAAUxW,KAAKgkH,gBACrF,GAAIxxE,MAAO,CACP,GAAqB,iBAAVA,MAAoB,CAC3B,IAAM47B,IAAM57B,MAAM9uC,UAAU8uC,MAAMvsC,QAAQ,KAAO,EAAGusC,MAAM/T,YAAY,MAAMnyB,MAAM,QAClF,OAAO4hE,SAAQ3mE,WAAR,EAAAq/G,6BAAYx4C,MAEvB,OAAAw4C,6BAAWp0E,QAGnB,OAAAo0E,6BAAW5mH,KAAK4M,SAASpT,2DAUF,IAAbgd,OAAapR,UAAA1D,OAAA,QAAA4L,IAAAlI,UAAA,GAAAA,UAAA,MACvB,GAAIoR,OAAO9U,OAAQ,CACf,IAAMqlC,MAAQ/mC,KAAK+mC,QACbxlC,MAAQwlC,MAAMxlC,MAAQwlC,MAAMxlC,QAAU,KAEtCslH,UADgB7mH,KAAKomH,eAAeP,aACxBiB,CAActwG,OAAQxW,KAAK4M,SAAS02G,MAAO/hH,OAE7DvB,KAAKwW,OAAOqwG,UAAUrwG,QACtBqwG,UAAUtlH,OAASvB,KAAK+mC,QAAQxlC,MAAMslH,UAAUtlH,OAChDvB,KAAKgkH,aAAa6C,UAAU1mB,YAC5BngG,KAAK+mC,QAAQvwB,OAAOqwG,UAAUhC,aAAe7kH,KAAKwW,UAEtD,OAAOxW,mDAWP,OACI3E,KAAM2E,KAAKglB,YAAY3pB,OACvB0rC,MAAO/mC,KAAK+mC,QACZvwB,OAAQxW,KAAKwW,SACb5J,OAAQ5M,KAAK4M,gEAIL4lC,MAAOu0E,mBACnB,IAAMr+G,EAAe,IAAX8pC,MAAM,GACVh4C,EAAe,IAAXg4C,MAAM,GACVh6C,EAAe,IAAXg6C,MAAM,GACV73C,EAAI63C,MAAM,IAAM,EAChBw0E,KAAOt+G,EAAIq+G,kBAAkB,GAC7BE,KAAOzsH,EAAIusH,kBAAkB,GAC7BG,KAAO1uH,EAAIuuH,kBAAkB,GAC7BI,KAAOxsH,EAAIosH,kBAAkB,IAAM,EAEzC,OAASv0E,MAAK,QAAAn3B,OAAU2rG,KAAV,KAAA3rG,OAAkB4rG,KAAlB,MAAA5rG,OAA2B6rG,KAA3B,MAAA7rG,OAAoC8rG,KAApC,KAA6Ct0E,MAAOm0E,KAAO,IAAKC,KAAO,IAAKC,KAAO,IAAKC,uCAQtG,OAAOnnH,KAAKgkF,4DAlJZ,OAAOq/B,mDAWP,MnBnDa,yBoBXRA,yBACT7pH,MAAO,GACP+H,OAAQ,GAAI,6qBCShB,IAqFMmjG,0BAAU0iB,6BAAAttB,eAAA,GAAAz+E,OACRsyF,SADQ,KAAAtyF,OACIqyF,YACZ3mE,MAAOgmE,OACPv2F,OAxFc,SAAhBouG,cAAiBpuG,QACnB,IAAM2pF,WAAa3pF,OAEnB,OAASA,OADSA,OAAOvO,IAAI,SAACpP,EAAGN,GAAJ,OAAWA,GAAMie,OAAO9U,OAAS,KAClCy+F,sBAAY0kB,aAAc,EAAG,KAsFrDtjH,MAzBe,SAAjB8lH,eAAkBrQ,YAAajwE,MAAOvwB,OAAQ2pF,YAChD,IACMmlB,OAAS9uG,OADD2pF,WAAWl6F,QAAQ+wG,cAGjC,OADW/oC,qCAAwBF,kCAAHu5C,gCAA6BvgF,MAAMxlC,SAC5Dwc,CAAGunG,WAiBE8B,6BAAAttB,YAAA,GAAAz+E,OAMRqyF,UANQ,KAAAryF,OAMKqyF,YACb3mE,MAAOgmE,OACPv2F,OAjFa,SAAfuuG,aAAgBvuG,QAElB,OAAS2pF,WADU3pF,OACEA,gBAgFjBjV,MAjBY,SAAdgkH,YAAevO,YAAajwE,MAAOvwB,QAArB,OAChBytG,yBAAkBjN,YAAajwE,MAAMiwE,aAAcjwE,MAAMvwB,OAAO,QAOpD4wG,6BAAAttB,YAAA,GAAAz+E,OAWRqyF,UAXQ,KAAAryF,OAWKsyF,WACb5mE,MAAO0mE,UACPj3F,OA1Ec,SAAhBwuG,cAAiBxuG,OAAQ+wG,WAC3B,IAAIC,gBACJ,GAAID,qBAAqB1+G,MACrB2+G,aAAeD,UAAUzsG,QAAQvK,YAGjC,IADA,IAAM49C,aAAe4f,kCAAkBxmE,WAAlB,EAAA+/G,gCAAwB9wG,SACpCje,EAAI,EAAGA,EAAIgvH,UAAWhvH,IAC3BivH,aAAajvH,GAAK41D,aAAa51D,GAAKgvH,UAAY,IAOxD,OAJIC,aAAa,GAAKhxG,OAAO,IACzBgxG,aAAal/G,SAGR63F,WAAYqnB,aAAchxG,OADjBgxG,aACoC7nE,MAAM,IA6DxDp+C,MAjDc,SAAhBkmH,cAAiBzQ,YAAajwE,MAAOvwB,QACvC,IAAM8uG,QAAUtO,YAAcxgG,OAAO,KAAOA,OAAOA,OAAO9U,OAAS,GAAK8U,OAAO,IACzE23C,aAAe4f,kCAAkBxmE,WAAlB,EAAA+/G,gCAAwBvgF,MAAMxlC,UACnD,OAAO0iH,yBAAkBjN,YAAa7oD,aAAam3D,QAASn3D,aAAa33C,OAAO,QAgCpEsjF,aChGHL,uBACT7sF,UACA4J,QACIg2D,aAAc,SAAAA,aAAC9xC,QAASlhC,OAEpB,OADAkhC,QAAQqM,QAAQvwB,OAAOhd,OAChBA,QAGf+H,SACAwlC,SACAi9E,kTCMiB0D,8BAOjB,SAAAA,SAAa96G,gKAAQ+6G,CAAA3nH,KAAA0nH,UACjB76C,sBAAsB7sE,KAAMy5F,uBAE5Bz5F,KAAKgkF,IAAM15E,cACXtK,KAAKovF,QAAUn2F,OAAO4T,UAAW7M,KAAKglB,YAAYpF,gBAAiBhT,QAEnE5M,KAAKgmH,YAAoC,WAAtBhmH,KAAKovF,QAAQ/zF,KAAoBqyG,UAAYC,SAChE3tG,KAAKimH,WAAavY,UAElB1tG,KAAK4nH,cAAgB5nH,KAAK6nH,YAAY7nH,KAAKgmH,YAAahmH,KAAKimH,YAC7DjmH,KAAKg2G,OAASh2G,KAAK4uG,YAAY5uG,KAAK4nH,eACpC5nH,KAAKw2G,OAASx2G,KAAKovF,QAAQ7tF,MAE3BvB,KAAKsmH,aAAa15G,OAAO4J,wSAYhBivG,WAAYC,WACrB,OFyEsB,SAAjBF,eAAkBC,WAAYC,WAAb,OACzBhhB,yBAAU,GAAArpF,OAAIoqG,WAAJ,KAAApqG,OAAkBqqG,YE1ElBF,CAAeC,WAAYC,2DASzBlkB,UAAU,IAEfjgG,MACAvB,KAAK4M,SADLrL,MAEJ,OAAOqtG,2BACHvzG,KAAMmmG,SAASz6D,MACfxlC,wDAiCgB,IAAf61G,UAAehyG,UAAA1D,OAAA,QAAA4L,IAAAlI,UAAA,GAAAA,UAAA,GAAH,EAGb5L,MACAwG,KAAK4M,SADLpT,MAEEutC,MAAQ/mC,KAAK+mC,QACbvwB,OAASxW,KAAKwW,WAAa,EAAG,GAEpC,OAAKuwB,OAASvwB,OAAO,KAAOA,OAAO,GAGxBxW,KAAK4nH,cAAcrmH,MAAM61G,UAAWrwE,MAAO/mC,KAAKwW,SAAUxW,KAAKgkH,gBAF5DxqH,wDAaJgd,QACV,GAAIA,OAAQ,CACR,IAEMsxG,YAAaC,EAFF/nH,KAAK4nH,cAAcpxG,QAERA,OAAQxW,KAAK4M,SAAS26G,WAElDvnH,KAAKwW,OAAOsxG,WAAWtxG,QACvBxW,KAAKgkH,aAAa8D,WAAW3nB,YAE7BngG,KAAK+mC,QAAQvwB,OAAOsxG,WAAWjD,aAAe7kH,KAAKwW,UAEvD,OAAOxW,mDAWP,OACI3E,KAAM2E,KAAKglB,YAAY3pB,OACvB0rC,MAAO/mC,KAAK+mC,QACZvwB,OAAQxW,KAAKwW,SACbjV,MAAOvB,KAAKuB,QACZqL,OAAQ5M,KAAK4M,0CASjB,OAAO5M,KAAKgkF,4DA/EZ,OAAOq/B,4DAWP,MvB1EY,uBwBbPA,oCACT2E,UAAW,KACXxuH,MAAO,SACP+H,OAAQ,SAAU,UAAW,OAAQ,QAAS,SAAU,MAAO,aCHtDk4F,wBACT7sF,UACA4J,UACAuwB,SACAi9E,gBACAgE,kUCWiBC,gCAOjB,SAAAA,UAAar7G,iKAAQs7G,CAAAloH,KAAAioH,WACjBp7C,sBAAsB7sE,KAAMy5F,wBAE5Bz5F,KAAKgkF,IAAM15E,cACXtK,KAAKovF,QAAUn2F,OAAO4T,UAAW7M,KAAKglB,YAAYpF,iBAClD5f,KAAKovF,QAAU7hB,eAAevtE,KAAKovF,QAASxiF,QAE5C5M,KAAKg2G,OAASpH,2BACVvzG,KAAM,UACNkG,MAAOvB,KAAKovF,QAAQ7tF,QAExBvB,KAAKsmH,aAAa15G,OAAO4J,sSAgCnBhd,OACN,IAAKwG,KAAK+mC,UAAY/mC,KAAKwW,WAAahd,OAASA,iBAAiBkT,sBAC9D,OAAO1M,KAAK4M,SAASpT,MAGzB,GAAIwG,KAAKmoH,iBACL,OAAOnoH,KAAKmoH,iBAAiB3uH,OAGjC,IAAM4uH,UAAYpoH,KAAK+mC,OAAL/mC,CAAaxG,OAC/B,MAAkB,WAAd4uH,UACO54C,uBAAU44C,WAGdA,8DASgB,IAAb5xG,OAAapR,UAAA1D,OAAA,QAAA4L,IAAAlI,UAAA,GAAAA,UAAA,MAUvB,OATIoR,OAAO9U,SACP1B,KAAKgkH,aAAaxtG,QAClBxW,KAAKwW,OAAOA,QACZxW,KAAK+mC,QAAQvwB,OAAOA,QAEhBxW,KAAK4M,SAASo7G,YACdhoH,KAAKmoH,iBCzFS,SAAjBE,eAAkB7xG,OAAQ8xG,aACnC,IAAMC,mBAIN,OAHA/xG,OAAO1N,QAAQ,SAACtP,OACZ+uH,gBAAgB/uH,OAAS8uH,YAAY9uH,SAElC+uH,gBDoF6BF,CAAe7xG,OAAQxW,KAAK4M,SAASo7G,aAG9DhoH,mDAWP,OACI3E,KAAM2E,KAAKglB,YAAY3pB,OACvB0rC,MAAO/mC,KAAK+mC,QACZvwB,OAAQxW,KAAKwW,SACbjV,MAAOvB,KAAK4M,SAASrL,MACrBqL,OAAQ5M,KAAK4M,0CASjB,OAAO5M,KAAKgkF,4DA/EZ,OAAOq/B,uEAWP,M1B5Ca,gN4BVrB,IAAMmF,mBAGO,UAHPA,oBAIQ,WCICC,iBDEcC,mCAAAC,qBATd,YAUaha,MADC+Z,mCAAAC,kBAExBH,mBAAqB7Z,QAFG+Z,mCAAAC,kBAGxBH,oBAAsB7Z,MCLZ,SAACjjG,OAAQX,KAAM6B,QAC1B,IAAMgb,QAAUhb,OAAOgb,mBAAmB/e,MAAQ+D,OAAOgb,SAAWhb,OAAOgb,SACrEghG,eAAiBhhG,QAAQ3f,IAAI,SAAA6K,WAAS,OAAIpH,OAAO6Z,UAAU,SAAA1sB,GAAC,OAAIA,EAAEC,OAASga,cAEjF,QAA2CxF,IAAvCs7G,eAAex+F,KAAK,SAAAvxB,GAAC,OAAW,IAAPA,IACzB,MAAM,IAAIoW,MAAJ,iBAAAoM,OAA2BuM,QAA3B,yBAGV,IAAMvW,YtLg5Ca,SAAjBw3G,eAAkBnoG,QACpB,IAAMooG,OAAShjF,WAEf,OADAplB,OAAO5a,KAAKgD,QAAQ,SAAAhP,KAAG,OAAIgvH,OAAOhvH,IAAI,SAAAjB,GAAC,OAAIA,EAAEiB,SACtCgvH,OAAOt0G,QAAQkM,OAAO3V,MsLn5CT89G,EAChB/iH,KAAM8iH,eACN79G,YASJ,OANAsG,YAAYvI,QAAQ,SAACjQ,GACjB,IAAMiB,IAAMjB,EAAEiB,IACV4S,sBAAkBuL,UAAUne,OAC5BjB,EAAEiB,IAAM4S,sBAAkBwL,eAAepe,QAG1CuX,cCZK03G,uMCPhB,IAAMC,cAAYC,iCAAAC,iBCJO,WFOxB,SAASH,kBAAmBr9G,OAAQX,KAAM6B,QACtC,OAAO7B,OCJMk+G,iCAAAC,cCHI,QDKKjrE,iBAFTgrE,iCAAAC,cCFI,QCgEP,SAACx9G,OAAQX,KAAM6B,QAC1B,IAAMu8G,YAAcv8G,OAAOu8G,YACrBC,WAAax8G,OAAOpT,MACpBouB,QAAUhb,OAAOgb,QACjBrX,KAAO3D,OAAO2D,MAAQ,aACtB84G,eAzDY,SAAhBC,cAAiBv+G,KAAMW,OAAQ09G,WAAYD,YAAavhG,SAC1D,IAAMvW,YAAc4sC,gBAAMvyC,OAAQX,MAC9B6c,QAASuhG,cAEPI,iBAAmB79G,OAAO6Z,UAAU,SAAA1sB,GAAC,OAAIA,EAAEC,OAASqwH,cACpDK,gBAAkB99G,OAAO6Z,UAAU,SAAA1sB,GAAC,OAAIA,EAAEC,OAASswH,aACnDK,eAAiB/9G,OAAO6Z,UAAU,SAAA1sB,GAAC,OAAIA,EAAEC,OAAS8uB,UAClD8hG,WAAa3+G,KAAK9C,IAAI,SAAApP,GAAC,OAAIA,EAAE4wH,kBAAiBz2G,OAAO,SAAChJ,KAAMm+E,IAAK93E,KAAZ,OAAoBA,IAAIpK,QAAQ+D,QAAUm+E,MAAK53E,OACpG4W,WAAazb,OAAOqG,OAAO,SAACC,IAAK9J,IAAK3P,GAExC,OADAyZ,IAAIzZ,GAAK2P,IAAIpP,KACNkZ,SA8BX,OACIjH,KA7BYsG,YAAYpJ,IAAI,SAACoI,KAC7B,IAAMs5G,UACA5kG,OAAS1U,IAAIkN,OAAOxL,OAAO,SAACC,IAAK+I,KAUnC,OATA/I,IAAM+I,IAAIhJ,OAAO,SAAC7J,IAAK1O,MAAOjB,GAO1B,OANIA,IAAMkxH,gBACNvhH,IAAI1O,OAASuhB,IAAIyuG,iBACjBG,OAAOnwH,OAASuhB,KACTxiB,IAAMixH,kBACbthH,IAAIif,WAAW5uB,IAAMiB,OAElB0O,KACR8J,UAcP,OAXA+S,OAAO6kG,OAASD,OAEhBD,WAAW5gH,QAAQ,SAAC+gH,WAChB,QAA0Bv8G,IAAtByX,OAAO8kG,WAA0B,CACjC9kG,OAAO8kG,WAAa,EACpB,IAAMC,OAAS,IAAIjhH,MAAMwH,IAAIkN,OAAO,GAAG7b,QACvCooH,OAAOP,kBAAoBl5G,IAAIvW,IAC/BgwH,OAAOL,gBAAkBI,UACzB9kG,OAAO6kG,OAAOC,WAAaC,UAG5B/kG,SAKPjf,KAAM4jH,YAeaJ,CAAcv+G,KAAMW,OAAQ09G,WAAYD,YAAavhG,SACtE9hB,KAAOujH,eAAevjH,KACtBmC,OACA8hH,QAAUn9G,OAAOm9G,QACjBC,WAAat+G,OAAO6Z,UAAU,SAAA1sB,GAAC,OAAIA,EAAEC,OAASixH,UAC9CE,aAAev+G,OAAO6Z,UAAU,SAAA1sB,GAAC,OAAIA,EAAEC,OAAS8uB,WAClC,IAAhBoiG,aACAlkH,KAAKgD,QAAQ,SAAChP,KACV,IAAMhB,KAAOiS,KAAKqf,KAAK,SAAAvxB,GAAC,OAAIA,EAAEoxH,gBAAkBnwH,MAChDmO,IAAInO,KAAOhB,KAAKkxH,cAEpBX,eAAevjH,KAAKyK,KAAK,SAAC5V,EAAGyI,GAAJ,OAAU6E,IAAItN,GAAGuvH,cAAcjiH,IAAI7E,OAGhE,IAAM+mH,UAAY55C,oBACdzqE,KAAMujH,eAAevjH,KACrBm7C,OAAQr0C,OAAOq0C,QAAU,YACzBh7B,MAAO1V,KACPxF,KAAMs+G,eAAet+G,OAOzB,OALAo/G,UAAUrhH,QAAQ,SAACshH,YACfA,WAAWthH,QAAQ,SAACkU,SAChBA,QAAQjS,KAAOiS,QAAQjS,KAAK6+G,OAAOQ,WAAWtwH,SAG/CqwH,YF5FOjB,eAqBHmB,sBARf,SAASA,iBAAkBhvH,MACvB,IAAM2+C,UAAYgvE,aAAa3tH,MAC/B,GAAyB,mBAAd2+C,UACP,MAAM,IAAI/qC,MAAM,oCAEpB,OAAO+qC,urCGbX,IAAMgzD,aAAO2B,2BAAU3B,KAEVsd,cAAgB,SAAhBA,cAAgB33F,KAAA+1C,OAAqE,IAAlEp3D,MAAkEqhB,KAAlErhB,MAAOrP,MAA2D0wB,KAA3D1wB,MAAWsoH,cAAgD7hD,MAAhD6hD,cAAelqB,UAAiC33B,MAAjC23B,UAAWmqB,gBAAsB9hD,MAAtB8hD,gBACpEC,SAAW,GACXj4E,MAAQ,GAQZ,OAPI+3E,eAAiBA,cAAc/wH,iBAAiBsb,UAChD09B,MAAQ+3E,cAAc/wH,MAAM8X,MAAOrP,OACnCwoH,SAAWF,cAAc/wH,MAAM8X,MAAOrP,SAEtCwoH,SAAWpqB,UAAUsmB,YAAYr1G,MAAM00D,MAAMwkD,kBAC7Ch4E,MAAQ6tD,UAAUkjB,aAAakH,YAE1Bj4E,YAAOi4E,oBAGdC,eAAiB,SAAjBA,eAAkBrqB,UAAW/uF,MAAOq5G,UAAWC,WACjDt5G,MAAMmL,KAAKouG,WAAWF,WAAar5G,MAAMmL,KAAKouG,WAAWF,YAAcr5G,MAAMmL,KAAKquG,cAClF,IAAMC,cAAgB1qB,UAAU2qB,eAAe15G,MAAMmL,KAAKouG,WAAWF,WAAYC,WAGjF,OAFAt5G,MAAMmL,KAAKouG,WAAWF,WAAaI,cAAcl4E,KAE1Ck4E,eAGE3wB,8BAAwB,SAAxBA,sBAAyB1/D,QAASmzD,aAAco9B,kBAAmBr+G,QAC5E,IAAMs+G,SAAWxwF,QAAQywF,uBAAuBt9B,cAE1CwS,UADO3lE,QAAQ+7D,OACEjkD,MACjBjrC,MAAQqF,OAAOrF,MACfyyF,gBAAkBptF,OAAOotF,gBAC/BixB,kBAAkBniH,QAAQ,SAACivB,OACvB,IAAM4yF,UAAY5yF,MAAM18B,KACxB6vH,SAASnzF,MAAM4yF,UAAY,SAAC9xH,GAAM,IAAAuyH,QACwBvyH,EAAE4jB,KAAhD4uG,eADsBD,QACtBC,eAAgBR,WADMO,QACNP,WAAYC,cADNM,QACMN,cAEpC,GADAO,eAAerxB,iBAAmBqxB,eAAerxB,qBAC7CzyF,QAAU8jH,eAAerxB,iBAAiB2wB,WAI1C,OAFAU,eAAerxB,iBAAiB2wB,WAAa5yF,MAAM6yF,UACrCF,eAAerqB,UAAWxnG,EAAG8xH,UAAW5yF,MAAM6yF,WAAWp4E,MAG3E,IAAKjrC,OAAS8jH,eAAerxB,iBAAiB2wB,WAG1C,OADAU,eAAerxB,iBAAiB2wB,WAAa,KACtCD,eAAerqB,UAAWxnG,EAAG8xH,UAAW5yF,MAAM6yF,UAAU3iH,IAAI,SAAAxN,GAAC,OAAKA,KAAI+3C,MAZnD,IAAA84E,MAAAC,sBAcTV,WAAWF,WAAaE,WAAWF,WAAaG,cAdvC,GAcvBpiH,EAduB4iH,MAAA,GAcpB9wH,EAdoB8wH,MAAA,GAcjB9yH,EAdiB8yH,MAAA,GAcd3wH,EAdc2wH,MAAA,GAe9B,cAAAjwG,OAAmB,IAAJ3S,EAAf,KAAA2S,OAA8B,IAAJ7gB,EAA1B,MAAA6gB,OAA0C,IAAJ7iB,EAAtC,OAAA6iB,OAAmD1gB,GAAK,EAAxD,UAmCC6wH,sBAAgB,SAAhBA,cAAiB/0B,MAAS,IAAAg1B,MAAAF,uBACXvf,SAASpuD,EAAGouD,SAAS/nG,GAAGgE,IAAI,SAAAxN,GAAC,OAAIg8F,KAAKh8F,KAD3B,GAC5Bi8F,MAD4B+0B,MAAA,GACrB90B,MADqB80B,MAAA,GAAAC,MAAAH,uBAET70B,MAAOC,OAAO1uF,IAAI,SAAAxN,GAAC,OAAIA,GAAKA,EAAEssC,UAFrB,GAGnC,OACI2vD,YACAC,YACAg1B,OAN+BD,MAAA,GAO/BE,OAP+BF,MAAA,KAiF1BG,uBAAyB,SAAzBA,uBAA0BhzH,EAAGN,EAAGwS,KAAM2vB,SAC/C,IAAMwE,UAAYxE,QAAQ9tB,SAASk/G,oBAC/BC,aAAe,GAInB,OAHI7sF,qBAAqBpqB,WACrBi3G,aAAe7sF,UAAUrmC,EAAGN,EAAGwS,KAAM2vB,UAElCqxF,cAiGEC,oBAAsB,SAAtBA,oBAAuBlmD,QAAS0N,QAAW,IAAAy4C,MACpDnmD,QAAQ/6D,MAAKkhH,UAAG5wG,OAAH9T,MAAA0kH,MAAAC,0BAAa14C,SAAQxgE,OAAO,SAAAna,GAAC,YAAcyU,IAAVzU,EAAEmrF,MAAmB/7E,IAAI,SAACpP,GACpE,IAAM+9D,MAAQ/9D,EAAE86B,OAChB,OACIwI,EAAGy6B,MAAMz6B,EACT34B,EAAGozD,MAAMpzD,EACTuH,KAAMlS,OAYLszH,oBAAc,SAAdA,YAAezwE,OAAQssC,OAAQxiD,QACxC,IAAK,IAAM1rC,OAAOkuF,YACP1tF,eAAe5B,KAAKsvF,OAAQluF,MAC/B4hD,OAAO3jB,MAAMj+B,IAAK0rC,OAAS,KAAOwiD,OAAOluF,OAiCxCsyH,eAAiB,SAAjBA,eAAkB1xF,QAAS84C,QACpC,IAAM64C,WAAa3xF,QAAQ4xF,oBAC3B,OAAID,WACOA,WAAW74C,OAAQ94C,SAAWmD,WAAYnD,QAAQ67E,cAAc14E,aAEpE21C,QAyBE+4C,2BAAqB,SAArBA,mBAAsB7xF,QAAS8xF,mBACxC,IAAMC,UAAY/xF,QAAQgyF,oBACpBj2B,KAAO/7D,QAAQ+7D,OACfk2B,cAAgBjyF,QAAQiyF,gBACxB//G,OAAS8tB,QAAQ9tB,SACjBovF,UAAYthE,QAAQkyF,WAE1B,OAAQ,IAAK,KAAK3kH,IAAI,SAAC5M,MACnB,IAAIwxH,KAAO,EACPC,UAAY,EACZlsF,QAAU,EACVmsF,gBACJ,GAAIN,UAAS,GAAApxG,OAAIhgB,KAAJ,gBAAyB8D,yBAAUE,UAAW,CACvD,IAAI2tH,iBAEExb,SADaib,UAAS,GAAApxG,OAAIhgB,KAAJ,mBAA4BuD,gCAAiBE,SAC3C47B,QAAQuyF,YAAYptB,UAAUxkG,MAAQ,EAC9D60D,KAAOumC,KAAKp7F,MACZwE,IAAM+M,OAAM,MAAAyO,OAAOhgB,KAAKwiD,gBACxBqvE,aAAetgH,OAAOsgH,aACtBpnH,KAAO0mH,kBACPzlF,MAAQmpB,KAAKnpB,QACnB+lF,UAjCgB,SAAfK,aAAgBj9D,KAAMn5C,SAC/B,IACM8iB,MAAQq2B,KAAKosC,eACbv1D,MAAQmpB,KAAKnpB,QACbxlC,MAAQwlC,MAAMxlC,QACdiV,OAASuwB,MAAMvwB,SAIrB,OAHCqjB,OAAqBh2B,KAAKsnB,IAAI5pB,MAAM,GAAKA,MAAM,IAAMsC,KAAKsnB,IAAI3U,OAAO,GAAKA,OAAO,IAAOO,QA2BrEo2G,CAAaj9D,KAAMshD,UAC/B,IAAM4b,gBAAkBl9D,KAAKlrC,YAAY3pB,SAAW2xG,aAC9CqgB,YAAcn9D,KAAKtjD,SAASg0B,QAIlC,GAAsB,UAAlB+rF,cAA2B,CAC3B,IAAMW,aAAeF,gBAAkB,EAAIC,YAAcP,UAAY,EACrE9wB,UAAUz6F,OAAO+rH,aAAcR,UAAYQ,eAAe92G,OAAO1Q,MAAMshC,aAAa8lF,cACpFL,KAAO7wB,UAAU90D,YACjB8lF,iBAAmBF,WAAaM,gBAAkB,EAAIC,YAAcP,WACpEC,aAAejnH,KAAKmC,IAAI,SAAAnO,KAAG,OAAIkiG,UAAUliG,MAAQszH,gBAAkB,EAAKN,UAAY,UACjF,QAAYx/G,IAARzN,IAAmB,CAC1B,IAAIohD,OACJ,GAAImsE,gBAAiB,CACjB,IAAM9oF,KAAOyC,MAAMzC,OACnB2c,OAASla,MAAMnG,UAAY0D,KAC3BuoF,KAAO9lF,MAAMG,YAAc+Z,YAE3B4rE,KAAOC,UAEXC,aAAejnH,KAAKmC,IAAI,kBAAOmlH,iBAAoBnsE,OAAS,GAAO4rE,KAAO,SAI1EG,iBADAH,KAAOC,WADPlsF,QAAUwsF,gBAAkB,EAAIC,YAAcP,WAG9CC,aAAejnH,KAAKmC,IAAI,kBAAOmlH,gBAAkB,GAAMP,KAAO,IAGlEC,UAAYE,iBACZpsF,QAAUwsF,gBAAkBC,YAAcn9D,KAAKnpB,QAAQzC,OAAS+oF,YAAcP,UAGlF,OACID,UACAE,0BACAD,oBACAlsF,oBAgBC2sF,oCAA8B,SAA9BA,4BAA+B7yF,SAAY,IAAA8yF,sBAMhD9yF,QAAQgyF,oBAJR71B,OAFgD22B,sBAEhD32B,OACAE,OAHgDy2B,sBAGhDz2B,OACAC,WAJgDw2B,sBAIhDx2B,WACAC,WALgDu2B,sBAKhDv2B,WAEEw2B,aAAe/yF,QAAQ9tB,SAASotC,UAAUpyB,QAC1CxK,aAAesd,QAAQ3vB,OAAOsS,kBAC9BqwG,oBAAsBtwG,aAAaqwG,eAAiBrwG,aAAaqwG,cAAcjwG,IAAIniB,OAAS8D,yBAAUC,QAC5G,OAAKy3F,SAAWE,QAAU22B,sBAAwBD,cAAgBz2B,aAAe73F,yBAAUE,WACvF43F,aAAe93F,yBAAUE,UxC9bT,WwCicb,MAKEsuH,kCAA4B,SAA5BA,0BAA6BjzF,SACtC,IAAMkzF,6BAA+BL,oCAA4B7yF,SACjE,GAAIkzF,6BACA,OAAOA,6BAHuC,IAAAC,uBAW9CnzF,QAAQgyF,oBAJR71B,OAP8Cg3B,uBAO9Ch3B,OACAE,OAR8C82B,uBAQ9C92B,OACAC,WAT8C62B,uBAS9C72B,WACAC,WAV8C42B,uBAU9C52B,WAEEw2B,aAAe/yF,QAAQ9tB,SAASotC,UAAUpyB,QAC1CkmG,gCAAkCziD,WAAW3wC,QAAQqzF,cAAe,YAAa,QACnFpB,cAAgBjyF,QAAQ9tB,SAASotC,UAAU3+C,KAE/C,IAAKyyH,+BAAiCL,cAAgBz2B,aAAeC,WAAY,CAC7E,IAAMrsE,aAAeosE,aAAe73F,yBAAUC,QAAUy3F,OAASE,OAEjE41B,cxCxckB,QwCucgB54C,4CAA+Br5C,QAAQ3vB,OAAQ6f,cAAxEA,cAC8B8gF,MxC1d1B,QwC6djB,OAAOihB,skBC3dX,oBAQa79C,yBAAc,SAAdA,YAAep0C,QAAS9gC,IAAV,QAEnB44B,OAAO,GAAAnX,OAAIzhB,GAAGs1E,MAAP,KAAA7zD,OCdK,SDeZi0D,SAAU,SAAAA,SAAA38C,MAAc,IAAV5nB,KAAUijH,2BAAAr7F,KAAA,MACd/lB,OAAS8tB,QAAQ9tB,SACjBqhH,cAAgBrhH,OAAOg9F,SAC7B,GAAI7+F,MAAQkjH,cAAe,CACvB,IAAM7wG,aAAerS,KAAKsS,kBACpBqvG,kBD8Fa,SAAtBwB,oBAAuBtkB,SAAUxsF,cAAiB,IAAA+wG,MAAA5C,uBAEtDvf,SAASpuD,EAAGouD,SAAS/nG,EAAG+nG,SAASC,GAAID,SAASE,GAAIJ,MAAOC,MAAOF,MAAM5jG,IAAI,SAAAxN,GAAC,OAAImvG,SAASnvG,IACrFmvG,SAASnvG,GAAG6Q,QAHuC,GACpDurF,OADoDs3B,MAAA,GAC5Cp3B,OAD4Co3B,MAAA,GACpCC,QADoCD,MAAA,GAC3BE,QAD2BF,MAAA,GAClBG,WADkBH,MAAA,GACNI,WADMJ,MAAA,GACMK,UADNL,MAAA,GAAAM,MAAAlD,uBAKzB10B,OAAQE,OAAQq3B,QAASC,SAASpmH,IAAI,SAAAxN,GAAC,OAAI2iB,aAAa3iB,IACtF2iB,aAAa3iB,GAAG+iB,IAAIniB,OANmC,GAKpD27F,WALoDy3B,MAAA,GAKxCx3B,WALwCw3B,MAAA,GAAAC,OAAAnD,uBAQnB10B,OAAQE,QAAQ9uF,IAAI,SAAAxN,GAAC,OAAI2iB,aAAa3iB,KAAO2iB,aAAa3iB,GAAG+iB,IAAIzH,SACrGqH,aAAa3iB,GAAG+iB,IAAIniB,QATmC,GAQpDszH,cARoDD,OAAA,GAQrCE,cARqCF,OAAA,GAAAG,OAAAtD,uBAWK10B,OAAQE,OAAQq3B,QAASC,SACpFpmH,IAAI,SAAAxN,GAAC,OAAI2iB,aAAa3iB,IAAM2iB,aAAa3iB,GAAGwH,QAZU,GAc3D,OACI40F,cACAE,cACAu3B,sBACAC,sBACAC,oBACAJ,gBACAC,gBACAr3B,sBACAC,sBACA03B,4BACAC,4BACAE,YA1BuDD,OAAA,GA2BvDE,YA3BuDF,OAAA,GA4BvDG,aA5BuDH,OAAA,GA6BvDI,aA7BuDJ,OAAA,IC9FrBX,CAAoBD,cAAe7wG,cAC7Dsd,QAAQgyF,kBAAkBA,mBAC1BhyF,QAAQw0F,uBACRx0F,QAAQy0F,iBAAmBz0F,QAAQ00F,mBAAmBrkH,KAAM6B,OACxD8tB,QAAQiyF,gBAAiBD,mBAC7BhyF,QAAQ20F,gBAAkB30F,QAAQ40F,kBAAkB50F,QAAQy0F,iBAAkB/xG,cAC9E,IAAM5G,OAASkkB,QAAQ60F,wBAAwB70F,QAAQ20F,gBAAiB30F,QAAQgyF,oBAC5EhyF,QAAQ3vB,OAAOsS,mBACnBqd,QAAQ86E,QAAUh/F,QACjBkkB,QAAQ80F,aAAe90F,QAAQlkB,OAAOA,UAG/Cnb,KAAM,8BAGNm3B,OAAO,GAAAnX,OAAIzhB,GAAGs1E,MAAP,KAAA7zD,OClCO,WDmCdi0D,SAAU,SAAAA,SAAAzsD,OAAgB,IAChBonF,gBADgB+jB,2BAAAnrG,MAAA,MACSonF,gBACzBz3E,MAAQkI,QAAQ+0F,iBAChB9mH,MAAQ+xB,QAAQ/xB,QAChBuiE,cACFC,UAAS,GAAA9vD,OAAKwvF,0BAAiB57C,sBAAtB,KAAA5zC,OAA+Cqf,QAAQ+vE,UAAUt/B,WAC1ErxE,IAAK,kBAET6O,MAAM4pF,YAAYrnB,eACM,IAApB++B,iBACAz3E,MAAMtsB,KAAN,GAAAmV,OAAczhB,GAAGs1E,MAAjB,KAAA7zD,OC9CI,SDgDR1S,MAAM+mH,uBAAuBl9F,MACzB,YA7CI,SAAdm9F,YAAej1F,SACjB,IAAM3I,MAAQ2I,QAAQ3I,QAClBA,QACA2I,QAAQ0oE,OAAOrxE,OACf2I,QAAQj/B,eAAem0H,UAAUC,OAAOpgE,aAAYE,eAAe,IA0CvDggE,CAAYj1F,WACb,EAAOwwC,eAElB7vE,KAAM,kNElDP,IAAMy0H,gBAAcC,+BAAAC,mBDFL,UCIdx2H,MAAO,KACPijB,MACI+vD,aAAc,SAAAA,aAAC5/D,OAAQ8oG,UAAWh7E,SAC9BA,QAAQqzF,cAAgBnhH,OACxB,IAAMoY,YAAc0V,QAAQ1V,YACtBirG,QAAU1iD,kBAAmBvoD,YAAYpF,iBAC/C,OAAOoF,YAAYkrG,cAAcD,QAASrjH,YAR/BmjH,+BAAAC,gBDHP,QCgBZx2H,MAAO,KACPijB,MACIkwD,OAAQ,SAAAA,OAAC5hE,KAAM2vB,SACPA,QAAQy1F,cACRz1F,QAAQ01F,YAAYlqH,KAAK6E,MAEzB2vB,QAAQ01F,aAAerlH,UAnBhBilH,2sFC2CNK,4CAqBjB,SAAAA,UAAatlH,KAAM0rF,KAAM7pF,QAA2B,IAAA6H,MAAnBhZ,aAAmB2J,UAAA1D,OAAA,QAAA4L,IAAAlI,UAAA,GAAAA,UAAA,qKAAAkrH,CAAAtwH,KAAAqwH,WAChD57G,oLAAA87G,CAAAvwH,KAAAwwH,0BAAAH,WAAA33H,KAAAsH,OAEA6sE,sBAAsB4jD,kEAAAh8G,QAAM+d,aAC5B/d,MAAK1J,KAAKA,MACV0J,MAAKgiF,KAAKA,MACVhiF,MAAK7H,OAAOA,QACZ6H,MAAKi8G,MAAMj8G,MAAKuQ,YAAYslE,aAAehgF,eAC3CmK,MAAKhZ,aAAaA,cAClBgZ,MAAKk8G,WACLl8G,MAAK27G,eACL37G,MAAKuvE,IAAM15E,cACXmK,MAAKm8G,gBACLn8G,MAAKsiG,0BACLtiG,MAAKs5G,cAAgB,KAd2Bt5G,iYArBjB63F,6SAmD/B,GAAIlnG,UAAO1D,OAAQ,CACf1B,KAAK6wH,OAALzrH,UAAA1D,QAAA,OAAA4L,EAAAlI,UAAA,GACA,IAAMqlG,QAAUzqG,KAAKyqG,UACfqmB,QAAO,GAAAz1G,OAAMwvF,0BAAiB57C,sBAAvB,KAAA5zC,OAAgDovF,QAAQt/B,YJuU5C,SAAxB4lD,sBAAyBr2F,SAClC,IAAM/xB,MAAQ+xB,QAAQ/xB,QAChBqoH,YAAct2F,QAAQ1V,YAAYisG,WAAW,GAC7C9lD,UAAYzwC,QAAQ+vE,UAAUt/B,UACpC,IAAK,IAAM54C,QAAQy+F,YACfroH,MAAMuqB,OAAN,GAAA7X,OAAgBwvF,0BAAiB37C,uBAAjC,KAAA7zC,OAA2DkX,MAA3D2+F,0BACK/lD,UAAY,OI5Ub4lD,CAAsB/wH,MACtB,IAAM2I,MAAQ3I,KAAK2I,QAenB,OAdAA,MAAMuqB,OAAN,GAAA7X,OAAgBwvF,0BAAiB57C,qMAAjCkiE,IACK1mB,QAAQt/B,UAAY,OAGzBU,wBAAW7rE,KAAM8vH,eAAgBnnH,MAAMwT,OACnCgvD,UAAW2lD,UAEfjiD,+BAAkB7uE,KAAM8uE,0BACpBI,MAAO4hD,QACPM,OAAQvmB,0BAAiB37C,yBAEzBmiE,aAAc5mB,QAAQ4mB,aACtBC,aAAc7mB,QAAQ6mB,eAEnBtxH,KAEX,OAAOA,KAAK6wH,+CAIZ,IAAMt+F,KAAI,GAAAlX,OAAMwvF,0BAAiB37C,uBAAvB,KAAA7zC,OFxHI,SEwHJ,KAAAA,OAAiErb,KAAKyqG,UAAUt/B,WAC1F,OAAI/lE,UAAI1D,QACJ1B,KAAK2I,QAAQknH,OAAOt9F,KAApBntB,UAAA1D,QAAA,OAAA4L,EAAAlI,UAAA,IACOpF,MAEJA,KAAK2I,QAAQvP,IAAIm5B,oEAiExB,OAAIntB,UAAU1D,QACV1B,KAAKuxH,mBAALnsH,UAAA1D,QAAA,OAAA4L,EAAAlI,UAAA,GACOpF,MAEJA,KAAKuxH,iFAIZ,OAAInsH,UAAkB1D,QAClB1B,KAAKwxH,mBAALpsH,UAAA1D,QAAA,OAAA4L,EAAAlI,UAAA,GACOpF,MAEJA,KAAKwxH,yDAmBZ,OAAIpsH,UAAO1D,QACP1B,KAAKyxH,OAALrsH,UAAA1D,QAAA,OAAA4L,EAAAlI,UAAA,GACOpF,MAEJA,KAAKyxH,QAAUzxH,KAAKglB,YAAYslE,iEAIvC,OAAIllF,UAAO1D,QACP1B,KAAKu2G,cAALnxG,UAAA1D,QAAA,OAAA4L,EAAAlI,UAAA,GACOpF,MAEJA,KAAKu2G,oEAKZ,OADAv2G,KAAKmwH,eAAgB,EACdnwH,yDAKP,OADAA,KAAKmwH,eAAgB,EACdnwH,KAAK+K,KAAK/K,KAAKowH,YAAY,kDAWlC,OAAOpwH,KAAK4M,yCAWZ,OAAO5M,KAAKgkF,kEAaI/mE,UAAWrQ,OAAQ+/G,cAAeD,mBAClD,OJ/HqB,SAAhBgF,cAAiBz0G,UAAWrQ,OAAQ+/G,cAAegF,kBAC5D,IAAM5mH,KAAOkS,UAAUE,SAAU+I,SAAS,IACpCxa,OAASX,KAAKW,OACdsuC,UAAYptC,OAAOotC,UAErB68C,OAIA86B,iBAJA96B,OACAE,OAGA46B,iBAHA56B,OACAC,WAEA26B,iBAFA36B,WACAC,WACA06B,iBADA16B,WAEEkyB,YAAcnyB,aAAe73F,yBAAUC,QAAU23F,OAASF,OAEhE,OAAOwzB,kBAAiBsC,cAAjBtC,CAAgC3+G,OAAQX,KAAKA,MAChD6c,QAASoyB,UAAUpyB,QACnBuhG,wBACA54G,KAAMypC,UAAUzpC,MAAQ,OACxB0wC,OAAQjH,UAAUiH,OAClB8oE,QAAS/vE,UAAU+vE,QACnBvwH,MAAOy9F,aAAe93F,yBAAUC,QAAU23F,OAASF,QACpD9rF,KAAKwb,MI4GGmrG,CAAcz0G,UAAWrQ,OAAQ+/G,cAAeD,2FAYlC3hH,MACrB,IAAI09D,WAMJ,OALgBzoE,KAAK+K,OAAOw6F,YAGxB98B,QJ3C2B,SAA1B8mD,wBAA2BxkH,KAAM4mH,iBAAkBhF,eAAkB,IAE1EgC,cAMAgD,iBANAhD,cACAC,cAKA+C,iBALA/C,cACA/3B,OAIA86B,iBAJA96B,OACAE,OAGA46B,iBAHA56B,OACAq3B,QAEAuD,iBAFAvD,QACAC,QACAsD,iBADAtD,QAEE5lD,WACAmpD,KAAO5lB,SAAS/nG,EAChB4tH,KAAO7lB,SAASpuD,EAUtB,OATIi5C,SACApuB,QAAQtsC,EAAIwrC,+BAAkB58D,KAAMqjH,SAAWzB,gBAAkBjhB,OAASmmB,KAAM7lB,SAASC,KAAO4lB,KAAMA,MAClGlD,gBAEJ53B,SACAtuB,QAAQjlE,EAAImkE,+BAAkB58D,KAAMsjH,SAAW1B,gBAAkBjhB,OAASM,SAASE,GAAIF,SAAS/nG,IAC3F2tH,KAAMA,MAAOhD,gBAGfnmD,QIsBW8mD,CAAwBxkH,KAAM/K,KAAK0sH,oBAAqB1sH,KAAK2sH,kBAEpElkD,4DAaIqpD,cACX,IAAMrpD,QAAUzoE,KAAK2I,QAChBvP,IADW,GAAAiiB,OACJwvF,0BAAiB37C,uBADb,KAAA7zC,OFxTF,SEwTE,KAAAA,OACuDrb,KAAKyqG,UAAUt/B,YACtF,YAAwB79D,IAAjBwkH,aAA6BrpD,QAAQqpD,kBAAsBrpD,oEASnD2iC,gBAAiBhuF,cAChC,OJpIyB,SAApBkyG,kBAAqBlkB,gBAAiBhuF,aAAcu0G,iBAAkBhF,eAC/E,IAAMoF,mBxCjMc,awCiMOpF,eAA8BvhB,iBAAmBA,gBAExEpU,WAKA26B,iBALA36B,WACA83B,YAIA6C,iBAJA7C,YACAC,YAGA4C,iBAHA5C,YACAC,aAEA2C,iBAFA3C,aACAC,aACA0C,iBADA1C,aAEE+C,UAAY/4H,OAAO6M,KAAKsX,cAAc1b,OAK5C,OAAOqwH,mBAAmB9pH,IAAI,SAAC8C,MAE3B,OxCjNa,UwCgNE4hH,cAA0B5hH,KAAKwS,OAASxS,MACzC9C,IAAI,SAACpP,GACf,IACI0W,MAGI/L,EACAovD,GACAz2B,EACA0jB,GAPJoyE,YAuCJ,OArCItF,gBAAkBjhB,OAClBn8F,MAAQ1W,EAAEkS,SAKNlS,EAAE,IAAMA,EAAE,IACV2K,EAAIq8C,GAAKhnD,EAAE,GACXsjC,EAAIy2B,GAAK/5D,EAAE,KAEX2K,EAAIq8C,GAAKhnD,EAAE,GACXsjC,EAAIy2B,GAAK/5D,EAAE,KAGfo5H,SAAWj7B,aAAe73F,yBAAUC,SAChC+8B,IACA0jB,MACAr8C,EAAG+L,MAAMw/G,aACTn8D,GAAIrjD,MAAMw/G,eAEV5yF,EAAG5sB,MAAMu/G,aACTjvE,GAAItwC,MAAMu/G,aACVtrH,IACAovD,QAEKoT,MAAQz2D,MACjB0iH,SAASjuC,IAAMz0E,MAAMyiH,cAErBC,UACI91F,EAAGtjC,EAAEi2H,aACLtrH,EAAG3K,EAAEk2H,aACLlvE,GAAIhnD,EAAEm2H,cACNp8D,GAAI/5D,EAAEo2H,gBAEDjpD,MAAQntE,EACjBo5H,SAASjuC,IAAMnrF,EAAEm5H,YAEdC,aAEZj/G,OAAO,SAAAna,GAAC,OAAIA,EAAE6I,SI0EN4tH,CAAkBlkB,gBAAiBhuF,aAAcpd,KAAK0sH,oBAAqB1sH,KAAK2sH,2EAwBvF,OAAO,yEAGY3yB,gBAAiBnM,aAActmF,MAAOygF,QACzD,IAEIijC,mBAFsBjrH,KAAK4M,SAAS8rF,iBAEEsB,kBAC1CixB,kBAAoBjjC,QAAUijC,oBAE1B7wB,8BAAsBp6F,KAAM6tF,aAAco9B,mBACtC1jH,YACAyyF,wFAOR,OADAh6F,KAAKwvH,aAAc,EACZxvH,yDAKP,OADAA,KAAKwvH,aAAc,EACZxvH,yEAIPA,KAAKkyH,eJ6EoB,SAApBC,kBAAoBz3F,SAAO,OAAI6yF,oCAA4B7yF,UAAYA,QAAQ9tB,SAASotC,UAAU3+C,KI7EjF82H,CAAkBnyH,4DAIxC,OAAOA,KAAKkyH,uDAQZ,OAAOlyH,iDAUP,MAAO,4CAaP,OAJAA,KAAK2I,QAAQ4pF,aACTpnB,UAAS,GAAA9vD,OAAKwvF,0BAAiB57C,sBAAtB,KAAA5zC,OAA+Crb,KAAKyqG,UAAUt/B,aAE3E2b,6BAAc9mF,KAAK+xB,SAASyT,SACrBxlC,mDAUClG,IAAKiR,MACb,GAAY,OAARjR,IACA,OAAOkG,KAEX,IAAMoyH,SAAWpyH,KAAKqyH,UAGtB,OAFCD,SAASt4H,OAASs4H,SAASt4H,SAC5Bs4H,SAASt4H,KAAKoM,KAAK6E,MACZ/K,mDAWP,OAAIoF,UAAU1D,QACV1B,KAAKsyH,WAALltH,UAAA1D,QAAA,OAAA4L,EAAAlI,UAAA,GACOpF,MAEJA,KAAKsyH,iFAWQvnH,MACpB,IAAMW,OAAS1L,KAAK+K,OAAOoS,UAAUzR,OAC/B0R,aAAepd,KAAK+K,OAAOsS,kBAC3BiE,oBAHoBixG,sBASlBvyH,KAAK0sH,oBAJL11B,WALkBu7B,sBAKlBv7B,WACAC,WANkBs7B,sBAMlBt7B,WACAJ,OAPkB07B,sBAOlB17B,OACAE,OARkBw7B,sBAQlBx7B,OARkB00B,MAAA+G,0BAWIx7B,WAAYC,YAAYhvF,IAAI,SAAA5M,MAAI,OAAIA,OAAS8D,yBAAUC,UAX3D,GAWnBqzH,SAXmBhH,MAAA,GAWTiH,SAXSjH,MAAA,GAoB1B,GARA//G,OAAO5C,QAAQ,SAACjQ,EAAGN,GACf,IAAMO,KAAOD,EAAEC,KACXskB,aAAatkB,MAAM0kB,IAAIniB,OAAS8D,yBAAUE,YAC1CiiB,YAAY,GAAGpb,KAAKpN,MACpBwoB,YAAY,GAAGpb,KAAK6E,KAAKxS,OAI7Bk6H,UAAYC,SAAU,KAAAC,cAAAC,eAChBC,cAAgBz1G,aAAay5E,QAAQ50F,MACrC6wH,cAAgB11G,aAAa25E,QAAQ90F,OAC3C0wH,cAAArxG,YAAY,IAAGpb,KAAfqB,MAAAorH,eAAwB97B,OAAQE,UAChC67B,eAAAtxG,YAAY,IAAGpb,KAAfqB,MAAAqrH,gBAAwB7nH,KAAK8nH,eAAgB9nH,KAAK+nH,iBAEtD,OAAOxxG,8DAIP,OACI6a,EAAG,EACH34B,EAAG,2DAKP,OACI24B,EAAG,EACH34B,EAAG,6EAyBe8d,aAA0B,IAAAqR,KAM5CxL,WACA5J,OAP+B3Q,OAAaxH,UAAA1D,OAAA,QAAA4L,IAAAlI,UAAA,GAAAA,UAAA,MAC1C2tH,YAAcnmH,OAAOmmH,YACrB14F,QAAUztB,OAAOytB,QACvB,IAAKr6B,KAAK+K,OACN,SAIJ,GAAIuW,uBAAuBjjB,oBAAW,CAClC,IAAM2e,QAAUsE,YAAYnE,UAC5BgK,WAAanK,QAAQtR,OAAOzD,IAAI,SAAApP,GAAC,OAAIA,EAAEC,OACvCykB,OAASP,QAAQjS,UAEjBoc,WAAa7F,YAAY,GACzB/D,OAAS+D,YAAYxG,MAAM,EAAGwG,YAAY5f,QAG9C,IAAM8xE,OAASxzE,KAAK2wH,QACdvzG,aAAepd,KAAK+K,OAAOsS,kBAE3B21G,gBAAiBrgG,SAAGtX,OAAH9T,MAAAorB,KAAAsgG,6BAAaz/C,SAAQxgE,OAAO,SAAC4jD,OAAU,IAClDoP,MAAepP,MAAfoP,MAAOge,IAAQptB,MAARotB,IAEf,OAAO78D,WAAWzJ,MAAM,SAACpS,MAAO4G,KAC5B,OAAI5G,SAAS8R,cAAgBA,aAAa9R,OAAOkS,IAAIniB,OAAS8D,yBAAUE,WACW,IAAxEke,OAAOgI,UAAU,SAAA1sB,GAAC,OAAIA,EAAEqZ,OAAS8zD,MAAM5oD,aAAa9R,OAAOrJ,SAC3DqJ,QAAUikD,gBAAeC,SACkB,IAA3CjyC,OAAOgI,UAAU,SAAA1sB,GAAC,OAAIA,EAAEqZ,OAAS8xE,UAIpD,OAAO+uC,YAAcC,eAAiBA,eAAe/qH,IAAI,SAACpP,GACtD,IAAMqP,IAAM2V,MAAMhlB,GAClB,GAAIwhC,QAAS,CACT,IAAM1G,OAASzrB,IAAIyrB,QAAUzrB,IAC7B,QAAiBoF,IAAbpF,IAAIwwB,KAAoB,CACxB,IAAMw6F,QAA0C,EAAhCrvH,KAAKkQ,KAAK7L,IAAIwwB,KAAO70B,KAAKgwC,IAC1ClgB,OAAOkG,MAAQq5F,QACfv/F,OAAOmG,OAASo5F,QAChBv/F,OAAOwI,GAAK+2F,QAAU,EACtBv/F,OAAOnwB,GAAK0vH,QAAU,YAED5lH,IAAjBqmB,OAAOkG,QACPlG,OAAOkG,MAAQ,QAEGvsB,IAAlBqmB,OAAOmG,SACPnG,OAAOmG,OAAS,GAK5B,OAAO5xB,IAAIyrB,QAAUzrB,MACtBqI,KAAK,SAAC5V,EAAGyI,GAAJ,OAAUzI,EAAE6I,EAAIJ,EAAEI,gGAGK8d,aAAa,IAUxC2+E,aACAkzB,IAXwCC,qBACe9xG,YAAYnE,UAAzDk2G,eAD8BD,qBACpCroH,KAA8BuoH,iBADMF,qBACd1nH,OACxB29G,eAAiBrpH,KAAKqvH,gBACtBjyG,aAAepd,KAAK+K,OAAOsS,kBAHWk2G,uBASxCvzH,KAAK0sH,oBAJL31B,OALwCw8B,uBAKxCx8B,OACAF,OANwC08B,uBAMxC18B,OACAI,WAPwCs8B,uBAOxCt8B,WAPwCs8B,uBAQxCv8B,aAIe73F,yBAAUC,SACzB6gG,aAAe7iF,aAAay5E,QAAQ50F,MACpCkxH,IAAM,KACCl8B,aAAe93F,yBAAUC,UAChC6gG,aAAe7iF,aAAa25E,QAAQ90F,MACpCkxH,IAAM,KAGV,IAAM/nB,mBAsBN,OArBAie,eAAevgH,QAAQ,SAAC4lE,SACpBA,QAAQ5lE,QAAQ,SAACkU,SACb,IAAMw2G,SAAWx2G,QAAQgpD,MAGzB,GAFcstD,iBAAiB51G,MAAM,SAACxV,IAAK3P,GAAN,OACmD,IAApF86H,eAAe9tG,UAAU,SAAA1sB,GAAC,OAAI26H,SAASp2G,aAAalV,IAAIpP,MAAMmJ,SAAWpJ,EAAEN,OACpE,CACP,IAAMk7H,eAAiBz2G,QAAQm2G,KACzBp4G,IAAMiC,QAAQgpD,MACdz2D,SACN,IAAK,IAAMzV,OAAOsjB,aAAc,CAC5B,IAAMnb,MAAQmb,aAAatjB,KAAKmI,MAChCsN,MAAMzV,KAAOihB,IAAI9Y,OACbA,QAAUg+F,eACV1wF,MAAMzV,KAAO25H,gBAGrBroB,gBAAgBllG,KAAKqJ,aAKzB67F,gBAAiBprG,KAAK+K,OAAOoS,UAAUzR,8EAa3B+F,KACpB,OAAOq1E,6BAAc9mF,KAAK+xB,SAASg/B,UAAU/wD,KAAKinF,YAAYj0E,OAAO,SAAAjI,MAAI,QACpEA,OAAkC,IAA3B0G,IAAIxL,QAAQ8E,KAAKi5E,6DAU7B,OAAOwC,QAAQ4xB,IAAIp4G,KAAK+2G,sGAIxB,IAAI1tB,UACEY,QAAU,IAAIzD,QAAQ,SAACn+D,SACzBghE,UAAYhhE,UAIhB,OAFAroB,KAAK+2G,uBAAuB7wG,KAAK+jF,SAE1B,WACHZ,qEAKJ,IAAMohB,QAAUzqG,KAAKyqG,UACrB,OAAO,GAAApvF,OAAIwvF,0BAAiB17C,uBAArB,cAAA9zC,OAAwDovF,QAAQ4mB,aAAhE,QAAAh2G,OACAwvF,0BAAiB17C,uBADjB,cAAA9zC,OACoDovF,QAAQ6mB,aAD5D,oDA9jBP,QAEQ96G,YAGA5J,UACA7B,kDA4Cc,QAAA87D,KAAAzhE,UAAA1D,OAARgf,OAAQ,IAAA7X,MAAAg+D,MAAAC,KAAA,EAAAA,KAAAD,KAAAC,OAARpmD,OAAQomD,MAAA1hE,UAAA0hE,MACtB,OAAA4sD,qBAAW1zH,KAAQ0gB,8DAcnB,OACIs5B,WACI3+C,KAAM,iEAkBI0wE,KAAM4nD,UACxB,OAAOpmD,eAAexB,KAAM4nD,0DAkB5B,MAAO,qEAoHP,OAAO,mBCzSTriE,cAAO+f,QAAQ/f,KAEf/iD,kBAAW,SAAXA,SAAY1V,GAAM,IACZ86B,OAAW96B,EAAX86B,OACR,OAAoB,OAAbA,OAAOnwB,GAA2B,OAAbmwB,OAAOwI,GAQ1By3F,kBAAW,SAAXA,SAAYl5F,SACrB,IAAIs4F,eACI94B,MAAyFx/D,QAAzFw/D,MAAOnjE,UAAkF2D,QAAlF3D,UAAWy8C,OAAuE94C,QAAvE84C,OAAQx4B,YAA+DtgB,QAA/DsgB,YAAaqxD,gBAAkD3xE,QAAlD2xE,gBAAiBntE,UAAiCxE,QAAjCwE,UAAWnH,MAAsB2C,QAAtB3C,MAAOy5B,WAAe92B,QAAf82B,WAC5Ez/B,MAAQ+0D,6BAAc/vD,WAAWs6B,KAAK,QAASnyB,WAC/C20F,oBAAsB7iD,kBAAkBh2B,aACxC84E,SAAWxiE,gBACJ4F,MAAM28D,qBACN13F,EAAE,SAAAtjC,GAAC,OAAIA,EAAE86B,OAAOwI,IAChB34B,EAAE,SAAA3K,GAAC,OAAIA,EAAE86B,OAAOnwB,IAChByzD,QAAQ1oD,mBAErBykH,eAAiBx/C,OACb64B,kBACA2mB,eAAiBx/C,OAAOxgE,OAAOzE,oBAGnC49G,oBAAYp6F,MAAOgG,OACnB,IAAIgvD,QAAUC,YAAYj1D,MAAO,QAAS,IAS1C,OARAg1D,QAAQ9K,QAAQzI,OAAO,GAAGt0C,WAAW,GAChCsyB,WAAWusC,WACZhX,QAAUA,QAAQv1B,aACjBoyB,SAASpyB,WAAWoyB,UACpBlY,GAAG,MAAOwuB,MAAM0W,8BAErB7pB,QAAQ11B,KAAK,IAAKyiE,SAASd,iBACVj7F,MAAM,eAAgB,GAChCgvD,SC5CEnnE,mCACT+6E,Y9CHuB,O8CIvBD,aAAc,aACdx7D,UAAW,GACX8b,YAAa,SACbhB,WACI3+C,KAAM,SAEVq9F,aACIgQ,YACIrtG,KAAM,SACNuvH,WAAY,EAAG,GAAI,GAAI,KAE3BriB,OACIltG,KAAM,SACNuvH,WAAY,EAAG,EAAG,GAAK,KAE3BniB,QACIptG,KAAM,SACNuvH,WAAY,EAAG,EAAG,GAAK,MAG/Bze,sBAAuB,GACvBvC,UACIp3D,SACArW,KACA34B,KACA4oG,eACI5yG,MAAO,IAGfg4D,YACI2/B,OAAQ,QACRvN,SAAU,KAEdyoB,iBAAiB,srCCLA0nB,oCAOjB,SAAAA,YAAsB,IAAA/uB,iBAAAvwF,yJAAAu/G,CAAAh0H,KAAA+zH,WAAA,QAAAltD,KAAAzhE,UAAA1D,OAANsF,KAAM,IAAA6B,MAAAg+D,MAAAC,KAAA,EAAAA,KAAAD,KAAAC,OAAN9/D,KAAM8/D,MAAA1hE,UAAA0hE,MAAA,OAClBryD,MAAAw/G,+BAAAj0H,MAAAglG,iBAAAkvB,oBAAAH,YAAAr7H,KAAA6O,MAAAy9F,kBAAAhlG,MAAAqb,OAASrU,SACJ+jE,SAAW,IAAIF,qBAFFp2D,qXAPa47G,6RA8B/B,MAAO,qDAqCP,OAAOuD,0EAeM7oH,KAAM2hH,kBAAmBj2B,MAAM,IAAA9hF,OAAA3U,KACxCwzE,UACEkjB,MAAQD,KAAKt6D,EACbw6D,MAAQF,KAAKjzF,EACb68F,UAAY5J,KAAKjkD,MACjBo3D,SAAW5pG,KAAK4M,SAASg9F,SACvB5S,WAA2B01B,kBAA3B11B,WAAYC,WAAey1B,kBAAfz1B,WACdk9B,OAASn9B,aAAe73F,yBAAUE,UAClC+0H,OAASn9B,aAAe93F,yBAAUE,UAClCvF,IAAMq6H,OAASnoB,SAASpuD,EAAKw2E,OAASpoB,SAAS/nG,EAAI,KACnDsmH,cAAgB3gB,SAASp3D,MACzB87E,WAAa/D,cAAcj/G,MAC3B8R,aAAepd,KAAK+K,OAAOsS,kBAC3BmtG,gBAAkB8D,YAAclxG,aAAakxG,YAAYrsH,MACzD81B,SACAtb,QAgCN,OA9BA+2D,OAASzoE,KAAK9C,IAAI,SAACpP,EAAGN,GAClB,IAAM87H,IAAM39B,MAAM2F,cAAcxjG,EAAEsjC,GAAKu6D,MAAM4F,eAAiB,EACxDg4B,IAAM39B,MAAM0F,cAAcxjG,EAAE2K,GAAKmzF,MAAM2F,eAAiB,EAFtCi4B,eAGIjK,eAAgBh5G,MAAOzY,EAAGoJ,MAAO1J,IACzDgyH,4BAAelqB,oBAAWmqB,kCADtBh4E,MAHgB+hF,eAGhB/hF,MAAOi4E,SAHS8J,eAGT9J,SAGf1yF,MAAMy8F,OAAShiF,MACfza,MAAM,gBAAkB,EACxBtb,KAAKouG,cACLpuG,KAAKquG,cAAgBL,SACrBhuG,KAAK4uG,kBAEL,IAAMz0D,OACFxF,SACAz9B,QACIwI,EAAGtjC,EAAEsjC,aAAazvB,sBAAoB,KAAO2nH,IAC7C7wH,EAAG3K,EAAE2K,aAAakJ,sBAAoB,KAAO4nH,KAEjDv8F,YACAiuC,MAAOntE,EAAEmtE,MACTge,IAAKnrF,EAAEmrF,IACPywC,MAAO57H,EAAEmrF,IACTvgE,OAAQ5qB,EAAEmtE,MACVvpD,WAIJ,OAFAm6C,MAAM13B,UAAY2sF,uBAAuBhzH,EAAGN,EAAGwS,KAAM4J,QACrDA,OAAK+/G,WAAW77H,EAAEiB,KAAM88D,OACjBA,QAEX4c,OAAS44C,eAAepsH,KAAMwzE,8CAS1Bz8C,WAAW,IACXy8C,OACAmhD,gBACA58F,MAHW3gB,OAAApX,KAKT4M,OAAS5M,KAAK4M,SAEhBg9F,SAKAh9F,OALAg9F,SACA5uD,YAIApuC,OAJAouC,YACA9b,UAGAtyB,OAHAsyB,UACAw7D,aAEA9tF,OAFA8tF,aACAlpC,WACA5kD,OADA4kD,WAEE63D,eAAiBrpH,KAAKqvH,gBACtBjkB,gBAAkBprG,KAAKmvH,iBACvB/xG,aAAepd,KAAK+K,OAAOsS,kBAC3Bo5E,KAAOz2F,KAAKy2F,OACZ3wF,KAAOslG,gBAAgBnjG,IAAI,SAAApP,GAAC,OAAIA,EAAEiB,MAClCgpG,mBAAqB14B,sBAAsBswB,aAAc16F,KAAK82B,KAAMlqB,OAAO+tF,aAC3Ei6B,mBAAqB9tC,6BAAc/vD,WACnCu3F,WAAa1kB,SAASp3D,MAAMlnC,MAC5Bk/G,gBAAkBptG,aAAakxG,aAAelxG,aAAakxG,YAAYrsH,MAoD7E,OAlDAjC,KAAK2wH,WACL3wH,KAAKqyH,aACLuC,mBAAmB34C,QAAQ6mB,mBAAmB//F,KAAK,MAAM,GACzD6xH,mBAAmB34C,QAAQ/8C,WAAW,GACtC8nD,YAAYjwD,UAAW,IAAKsyF,eAAgB,MACxCj4D,MAAO,SAAAA,MAACnT,QPmHQ,SAAf42E,aAAgB9iG,MAAO2I,SAChC,IAAIo6F,gBACAnhG,OACI69B,WAAkC92B,QAAlC82B,WAAYujE,kBAAsBr6F,QAAtBq6F,kBACZnxC,SAA+BpyB,WAA/BoyB,SAAUuN,OAAqB3/B,WAArB2/B,OAAQ4M,SAAavsC,WAAbusC,SACtBg3B,oBACAhtC,yBAAUh2D,MAAMjD,OAAQimG,kBAAkB3jE,OAC1Cz9B,OAASohG,kBAAkBphG,OASvBmhG,gBARC/2B,SAQiBhsE,MAPAA,MAAMy/B,aACnBqyB,KAAKxa,QAAQ8nB,SACbvN,SAASA,UACTlY,GAAG,MAAO,WACPygD,oBAAYrlC,6BAAc9mF,MAAO2zB,QAAQ,KAKrDw4F,oBAAY2I,gBAAiBnhG,SOpIrBkhG,CAAa52E,OACTuT,sBACAujE,mBACI3jE,OACI4jE,iBAAkB,EAClBnsC,eAAgBzxE,OAAK69G,eAAe,iBAExCthG,QACIqhG,iBAAkBprB,SAASwC,cAAc5yG,WAKzDm6B,OAAQ,SAAAA,OAACsqB,MAAOywB,QAASn2E,GAKrB,IAAIi6C,MAJJghC,OAASp8D,OAAK89G,gBAAgBxmD,QAASt3D,OAAKs1G,oBAAqBj2B,KAAMl+F,GACvE6e,OAAKu5G,QAAQzqH,KAAKstE,QAClBmhD,gBAAkB,GAAAt5G,OAAGynF,mBAAmB,GAAtB,KAAAznF,OAA4BvV,KAAKvN,IAAMA,GAAIkJ,cAG7D,IAAM0zH,WAAavrB,SAASp3D,MAAMh5C,MAC5B47H,SAAW5hD,OAAOppD,KAAK,SAAAvxB,GAAC,OAAiC,OAA7BA,EAAEmtE,MAAMwkD,uBACLl9G,IAA7BzU,EAAEmtE,MAAMwkD,mBAGZh4E,MADA2iF,WACQA,WAAWzmD,QAASn2E,EAAG8wH,gBAEvB5yB,KAAKjkD,MAAMouD,SAASw0B,UAAYA,SAASpvD,MAAMwkD,kBAG3DzyF,MAAQ3gB,OAAK69G,aAAaziF,OAC1Bp7B,OAAKi+G,WAALj+G,EACI8iF,MAAO9iF,OACP2f,UAAWknB,MAAMnvB,OACjBksB,wBACAw4B,cACAt0C,UAAWy1F,gBACXnjE,sBACAz5B,MAAOA,UACPs0E,gBAAiBz/F,OAAOy/F,oBAGjC,SAAAxzG,GAAC,OAAIA,EAAE,GAAGmtE,MAAMwkD,kBAAoB3xH,EAAE,GAAGmrF,MAE5CgoC,oBAAoBhsH,KAAK+qE,SAAU/qE,KAAK2wH,SACjC3wH,uDAQGwyC,OACV,OACIgiF,OAAQhiF,MACRq2C,eAAgB,6DAUP1sD,EAAG34B,EAAGoJ,QACnB,IAAI0oH,aAAe1oH,OAAO0oH,aACpBvqH,KAAO/K,KAAK+K,OAElB,IAAKA,MAASA,MAAQA,KAAKw6F,UACvB,OAAO,KAGX+vB,kBAAgChoH,IAAjBgoH,aAA6BA,aAAet1H,KAAK4M,SAASu/F,sBACzE,IAAMv1C,MAAQ52D,KAAK+qE,SAAS3gD,KAAK+R,EAAG34B,EAAG8xH,cACjCvtG,WAAasjD,WAAWzU,MAAO,OAAQ,OAAQ,UAErD,GAAIA,MAAO,KAAA2+D,iBACgB3+D,MAAM7rD,KAAKA,KAA1Bi7D,MADDuvD,iBACCvvD,MAAOge,IADRuxC,iBACQvxC,IAEf,OACIltD,GAFgB92B,KAAKw1H,uBAAuBxvD,MAAOge,KAGnDj8D,aACIoU,EAAGpU,WAAWoU,EACd34B,EAAGukB,WAAWvkB,EACdq2B,MAAO,EACPC,OAAQ,IAEZ27F,QAASz1H,KAAK82B,MAGtB,OAAO,uDA7OP,MAAO,6DAkBP,OAAOlX,sFAYWmsD,KAAM4nD,UACxB,IAAM/mH,OAASyjH,qBAAUH,cAAcnkD,KAAM4nD,UACvC/pB,SAAWh9F,OAAOg9F,SAClB5vD,UAAYptC,OAAOotC,UACnBs0E,WAAa1kB,SAASp3D,OAASo3D,SAASp3D,MAAMlnC,MAKpD,OAHIgjH,aAAet0E,UAAUpyB,UACzBoyB,UAAUpyB,QAAU0mG,YAEjB1hH,qEAYP,OAAO,0jBChGf,IAAM2qD,cAAO8Z,QAAQ9Z,KAuCNm+D,cAjC6B,SAAXA,SAAYh1G,QACzC,IAAIsyG,eACI94B,MAAyFx5E,OAAzFw5E,MAAOnjE,UAAkFrW,OAAlFqW,UAAWy8C,OAAuE9yD,OAAvE8yD,OAAQz7C,MAA+DrX,OAA/DqX,MAAOy5B,WAAwD9wC,OAAxD8wC,WAAYtyB,UAA4Cxe,OAA5Cwe,UAAWmtE,gBAAiC3rF,OAAjC2rF,gBAAiBrxD,YAAgBt6B,OAAhBs6B,YAEjE26E,WAAyBnkE,WAAjC2/B,OAAoBvN,SAAapyB,WAAboyB,SACtB7xD,MAAQ+0D,6BAAc/vD,WACtB88F,oBAAsB7iD,kBAAkBh2B,aACxC8V,UAAY/+B,MAAMg/B,UAAU,QAAQhmD,MAAM2V,OAAO8yD,SAPHi4C,MAAAmK,wBAQX,QAAS,UAAU3tH,IAAI,SAAAxN,GAAC,OAAI88D,gBAAOL,MAAM28D,qBACjE13F,EAAE,SAAAtjC,GAAC,OAAIA,EAAE4B,GAAG0hC,IACZo2B,GAAG,SAAA15D,GAAC,OAAIA,EAAE4B,GAAG+I,IACbovD,GAAG,SAAA/5D,GAAC,OAAIA,EAAE4B,GAAGm4D,KACbqE,QAAQ,SAAAp+D,GAAC,OAAe,OAAXA,EAAE4B,GAAG+I,MAZiB,GAQ7CqyH,cAR6CpK,MAAA,GAQ9BqK,eAR8BrK,MAAA,GAepDuH,eAAiBx/C,OACjBzhD,MAAMs/B,KAAK,QAASnyB,WAChBmtE,kBACA2mB,eAAiBx/C,OAAOxgE,OAAO,SAAAna,GAAC,OAAmB,OAAfA,EAAE86B,OAAOnwB,KAEjD,IAAMuyH,eAAiBjlE,UAAUM,QAAQl+B,OAAO,QAAQm+B,KAAK,IAAKwkE,cAAc7C,iBAChFliE,UAAUjnD,MAAMksH,gBAAgBvkE,aAAaqyB,KAAKxa,QAAQssD,aACzC/xC,SAASA,UACTlY,GAAG,MAAOwuB,MAAM0W,6BAChBv/C,KAAK,IAAKykE,eAAe9C,iBACzBztF,KAAK,SAAU1sC,GACZ,IAAMkuF,QAAUD,6BAAc9mF,MAE9B+mF,QAAQ9K,QAAQpjF,EAAE,GAAGqmC,WAAW,GAChCjmC,OAAO6M,KAAKiyB,OAAOjvB,QAAQ,SAAAhP,KAAG,OAAIitF,QAAQhvD,MAAMj+B,IAAKi+B,MAAMj+B,irDCR9Dk8H,4qBAAkBjC,mTAwBVhpH,KAAM2hH,kBAAmBtvG,cAC9C,IAAMqrD,QAAUwtD,SAAAC,oBAAAF,UAAA37H,WAAA,0BAAA2F,MAAAtH,KAAAsH,KAA8B+K,KAAMqS,cAOpD,OANC4uF,SAASpuD,EAAGouD,SAAS/nG,GAAG6E,QAAQ,SAACzN,MACcqxH,kBADL,GAAArxG,OAC3BhgB,KAD2B,gBAErB8D,yBAAUC,cAA6BkO,IAAlBm7D,QAAQptE,QAC3CotE,QAAQptE,MAAM,GAAKwI,KAAK2P,IAAIi1D,QAAQptE,MAAM,GAAI,MAG/CotE,sDAQP,OAAOitD,sEAUM3qH,KAAM2hH,kBAAmBj2B,MAAM,IAAAhiF,MAAAzU,KACxCwzE,UACEm5C,cAAgB3sH,KAAK2sH,gBACrBtsB,UAAY5J,KAAKjkD,MACjB5lC,OAAS5M,KAAK4M,SAEd29G,cADW39G,OAAOg9F,SACOp3D,MACzB87E,WAAa/D,cAAcj/G,MAC3B8R,aAAepd,KAAK+K,OAAOsS,kBAC3BmtG,gBAAkB8D,YAAclxG,aAAakxG,YAAYrsH,MACvD40F,OAA4B61B,kBAA5B71B,OAAQE,OAAoB21B,kBAApB31B,OAAQs3B,QAAY3B,kBAAZ2B,QAVoB8H,eAczC3K,sBAAc/0B,MAFbC,MAZwCy/B,eAYxCz/B,MACAC,MAbwCw/B,eAaxCx/B,MAEEy/B,YAAcxpH,OAAOk/G,oBACrBqI,OAAS/2G,aAAay5E,SAAWz5E,aAAay5E,QAAQr5E,IAAIniB,OAAS8D,yBAAUE,UAC7E+0H,OAASh3G,aAAa25E,SAAW35E,aAAa25E,QAAQv5E,IAAIniB,OAAS8D,yBAAUE,UAC7EvF,IAAMq6H,OAAS,IAAOC,OAAS,IAAM,KAwC3C,OAvCA5gD,OAASzoE,KAAK9C,IAAI,SAACpP,EAAGN,GAClB,IAAM87H,IAAM39B,MAAM2F,cAAcxjG,EAAEsjC,GAAKu6D,MAAM4F,eAAiB,EACxDg4B,IAAM39B,MAAM0F,cAAcxjG,EAAE2K,GAC5B6yH,KAAQhI,SAAW1B,gBAAkBjhB,MAAS/U,MAAM0F,cAAcxjG,EAAE+5D,IAAM+jC,MAAM0F,cAAc,GAH5Ek4B,eAIIjK,eAAgBh5G,MAAOzY,EAAGoJ,MAAO1J,IACzDgyH,4BAAelqB,oBAAWmqB,kCADtBh4E,MAJgB+hF,eAIhB/hF,MAAOi4E,SAJS8J,eAIT9J,SAET1yF,SACAtb,QACNsb,MAAM4kB,KAAOnK,MAEb/1B,KAAKouG,cACLpuG,KAAKquG,cAAgBL,SACrBhuG,KAAK4uG,kBACL,IAAMiL,SAAWz9H,EAAE2K,aAAakJ,sBAC1B6pH,UAAY19H,EAAE+5D,cAAclmD,sBAC5BkqD,OACFxF,OACIj1B,EAAGk4F,IACH7wH,EAAG8yH,SAAW,KAAO3/B,MAAM0F,cAAc,GACzCzpC,GAAI2jE,UAAY,KAAO5/B,MAAM0F,cAAc,IAE/C1oE,QACIwI,EAAGk4F,IACH7wH,EAAG8yH,SAAW,KAAOhC,IACrB1hE,GAAI2jE,UAAY,KAAOF,MAE3BryC,IAAKnrF,EAAEmrF,IACPhe,MAAOntE,EAAEmtE,MACTviD,OAAQ5qB,EAAEmtE,MACVyuD,MAAO57H,EAAEmrF,IACT9kD,UAAWk3F,YAAcA,YAAYv9H,EAAGN,EAAGwS,KAAM0J,OAAQ,GACzDsjB,YACAtb,WAIJ,OAFAm6C,MAAM13B,UAAY2sF,uBAAuBhzH,EAAGN,EAAGwS,KAAM0J,OACrDA,MAAKigH,WAAW77H,EAAEiB,KAAM88D,OACjBA,QAEX4c,OAAS44C,eAAepsH,KAAMwzE,4EAK9BxzE,KAAKkyH,eAAiBvE,kCAA0B3tH,wDAQtCwyC,OACV,OACImK,KAAMnK,+DArHV,OAAO5yB,kFAWP,MAAO,wBChDFA,kCACT+6E,YlDHuB,OkDIvBD,aAAc,YACd95D,SAAWF,IAAK,EAAGovB,OAAQ,EAAGhsB,KAAM,EAAGC,MAAO,GAC9C7E,UAAW,GACXs3F,eAAgB,GAChB99B,aACIgQ,YACIrtG,KAAM,OACNuvH,WAAY,EAAG,GAAI,GAAI,KAE3BriB,OACIltG,KAAM,OACNuvH,WAAY,EAAG,EAAG,GAAK,KAE3BniB,QACIptG,KAAM,OACNuvH,WAAY,EAAG,EAAG,GAAK,MAG/B9wF,OAAQ,IACRD,MAAO,IACPtpB,KAAM,GACNuhE,aAAc,EACd/c,SAAU,EACVgd,UAAW,EACXpd,WAAY,EACZE,SAAU,IACV5d,QAAS,UAAW,OAAQ,QAAS,SAAU,SAAU,UACzD+C,WACI3+C,KAAM,YAEVuuG,UACI6sB,gBACIj9H,MAAO,OAEXk9H,mBACIl9H,MAAO,SAEX82G,OACI92G,MAAO,KAEXisE,QACIjsE,MAAO,KAEXy5C,SACIz5C,MAAO,KAEXg5C,OACIh5C,MAAO,KAEX+mG,OACI/mG,MAAO,KAEXk/B,MACIl/B,MAAO,MAGfm9H,iBAAkB,GAClBnlE,YACI2/B,OAAQ,QACRvN,SAAU,KAEdgzC,QACIluB,WACIxpE,UAAS,GAAA7jB,OlDnEM,OkDmEN,yBAEbw7G,SACI33F,UAAS,GAAA7jB,OlDtEM,OkDsEN,uBAEby7G,UACI53F,UAAS,GAAA7jB,OlDzEM,OkDyEN,8uDCvDrB,IAAMq2D,QAAML,QAAQK,IACd/d,QAAM0d,QAAQ1d,IAWCojE,kCAEjB,SAAAA,SAAahsH,KAAM0rF,KAAM7pF,OAAQnR,cAAc,IAAAgZ,MAAA,wJAAAuiH,CAAAh3H,KAAA+2H,WAC3CtiH,MAAAwiH,8BAAAj3H,KAAAk3H,mBAAAH,UAAAr+H,KAAAsH,KAAM+K,KAAM0rF,KAAM7pF,OAAQnR,gBACrB07H,gBAFsC1iH,kXAFb47G,yRAoC9B,MAAO,qEAWSpzG,UAAWrQ,QAAQ,IAAA+H,OAAA3U,KAC/Bo3H,WACEC,YAEF1iE,WAKA/nD,OALA+nD,WACAE,SAIAjoD,OAJAioD,SACA+0C,SAGAh9F,OAHAg9F,SACAr5F,KAEA3D,OAFA2D,KACAimH,eACA5pH,OADA4pH,eAEEc,SAAWt3H,KAAKmvH,qBAVaoI,iBC0CZ,SAAlBC,gBAAmB5tB,SAAUxsF,cAAiB,IAAAquG,MAAAgM,0BACG9rB,MAAOC,OAAQE,MAAOD,MACvE5jG,IAAI,SAAAxN,GAAC,OAAImvG,SAASnvG,GAAG6Q,QAFyB,GAChDosH,WADgDjM,MAAA,GACpCkM,YADoClM,MAAA,GACvB6C,WADuB7C,MAAA,GAAAC,MAAA+L,0BAGTC,WAHSjM,MAAA,GAGckM,aAChE1vH,IAAI,SAACxN,GACF,IAAMsxE,KAAO3uD,aAAa3iB,GAC1B,OAAIsxE,MAAQA,KAAKvuD,IAAIniB,OAAS8D,yBAAUC,QAC7B2sE,KAAK9pE,MAET,OATwC,GAYvD,OACI21H,WAbmDlM,MAAA,GAcnDmM,UAdmDnM,MAAA,GAenDoM,YAfmDpM,MAAA,GAgBnDqM,WALe1sD,WAAWjuD,aAAckxG,WAAY,UDpChDkJ,CAAgB5tB,SANC5pG,KAAK+K,OAAOsS,mBAE7Bu6G,WAb+BL,iBAa/BK,WACAC,UAd+BN,iBAc/BM,UACAC,YAf+BP,iBAe/BO,YACAC,WAhB+BR,iBAgB/BQ,WAEEC,QAAU/6G,UAAUE,UACpBpS,KAAOitH,QAAQjtH,KACfwb,KAAOyxG,QAAQzxG,KAErBvmB,KAAKm3H,gBAELG,SAASxuH,QAAQ,SAACrO,EAAGwH,OACjB0S,OAAKwiH,aAAa18H,EAAEw9H,MAAQx9H,EAAGwH,OAC/Bo1H,SAAS58H,EAAEwH,OAASxH,IAKxB28H,QAAU1lD,UACL/c,WAAYA,WAAa,IAAO9wD,KAAKgwC,IACrCghB,SAAShxD,KAAKgwC,GAAKghB,SAAW,KAC9Br7D,MAAM,SAAAX,GAAC,OAAIA,EAAE++H,aAAe,IAC5BhyF,WAAW,MAEhBr1B,KAAK7O,QAAUo2H,aAAeV,QAAQ7mH,KAAK,SAAC5V,EAAGyI,GAC3C,MnDjGa,QmDiGTmN,KACO5V,EAAEm9H,aAAe10H,EAAE00H,aACrB10H,EAAE00H,aAAen9H,EAAEm9H,eAEhC,IAAM5E,QAAUnoH,KAAKgH,OAAO,SAACC,IAAKnZ,GAAN,OAAYmZ,KAAOnZ,EAAEg/H,YAAc,IAAI,GAgBnE,OAbAT,QAAUA,QAAQrsH,MAAM9C,IAAI,SAACpP,EAAGN,GAW5B,OAVAM,EAAEq/H,iBAAmBntH,KAAKxS,GAAGu/H,cAAgBtB,eAC7C39H,EAAE07D,YAAc3nD,OAAO2nD,YACvB17D,EAAEu8H,SAAWrqH,KAAKxS,GAAGw/H,YACrBl/H,EAAEs/H,SAAWptH,KAAKxS,GAAGq/H,YACrB/+H,EAAEq6H,QAAUA,QACZr6H,EAAEo/H,IAAM1xG,KAAKhuB,GACbM,EAAE47H,MAAQ57H,EAAEo/H,IACZp/H,EAAE4qB,OAAS1Y,KAAKxS,GAChBM,EAAEu/H,cAAgBzjH,OAAKwiH,aAAat+H,EAAEo/H,KAAOtjH,OAAKwiH,aAAat+H,EAAEo/H,KAAK,GC3FlD,SAAnBI,iBAAoBf,SAAUgB,UAAW1rH,QAClD,IAAM2rH,QAAUjB,SAASgB,UAAY,GAC/BE,QAAUlB,SAASgB,WAEzB,OAAIC,SAAWC,SAEP7jE,WAAY4jE,QAAQ1jE,SACpBA,SAAU2jE,QAAQ7jE,YAEd6jE,SAOR7jE,WAAY/nD,OAAO+nD,WAAa9wD,KAAKgwC,GAAK,EAAI,IAC9CghB,SAAUjoD,OAAO+nD,WAAa9wD,KAAKgwC,GAAK,EAAI,MANxC8gB,WAAY/nD,OAAOioD,SAAWhxD,KAAKgwC,GAAK,EAAI,IAC5CghB,SAAUjoD,OAAOioD,SAAWhxD,KAAKgwC,GAAK,EAAI,KDgFtCwkF,CAAiBhB,SAAUx+H,EAAEoJ,MAAO2K,QACjC/T,gEAYIkS,MACf,OAAOA,6EAUcA,MAErB,OACI06D,OAAQkC,gCAAmB58D,OnDtJL,iGmDkKboxB,EAAG34B,GAAgB,IAAboJ,OAAaxH,UAAA1D,OAAA,QAAA4L,IAAAlI,UAAA,GAAAA,UAAA,MAC1BijG,UAAYvhB,6BAAcl6E,OAAOirE,MAAMn8B,QAAQ3wC,OAAO,GAC5D,GAAIyiB,eAAe66E,WAAY,KAAAowB,iBACLpwB,UAAU/2F,MAAxBvG,KADmB0tH,iBACnB1tH,KAAMktH,IADaQ,iBACbR,IACd,OACInhG,GAAI92B,KAAKw1H,uBAAuBzqH,KAAMktH,KACtCxC,QAASz1H,KAAK82B,MAGtB,OAAO,2EAUarlB,KACpB,OAAOq1E,6BAAc9mF,KAAK+xB,SAASg/B,UAAU/wD,KAAKinF,YAAYj0E,OAAO,SAAAna,GAAC,OAAkC,IAA9B4Y,IAAIxL,QAAQpN,EAAEyY,MAAM2mH,6CAU1FlhG,WAAW,IAAA3f,OAAApX,KAAA04H,kBAIX14H,KAAKk+F,cAFLpkE,OAFW4+F,kBAEX5+F,OACAD,MAHW6+F,kBAGX7+F,MAHW2tE,aAiBZxnG,KAAK4M,SAXJ+tF,YANW6M,aAMX7M,YACAD,aAPW8M,aAOX9M,aACA87B,eARWhvB,aAQXgvB,eACAjiE,YATWizC,aASXjzC,YACAE,YAVW+yC,aAUX/yC,YACAqd,aAXW01B,aAWX11B,aACA/c,SAZWyyC,aAYXzyC,SACAgd,UAbWy1B,aAaXz1B,UACAnxC,QAdW4mE,aAcX5mE,QACA4wB,WAfWg2C,aAeXh2C,WACAmlE,iBAhBWnvB,aAgBXmvB,iBAEEn2B,SAAWxgG,KAAKy2F,OAAO/9D,KACvB0yE,gBAAkBprG,KAAKmvH,iBACvBwJ,YAAc7+F,OAAS8G,QAAQF,IAAME,QAAQkvB,OAC7C8oE,WAAa/+F,MAAQ+G,QAAQkD,KAAOlD,QAAQmD,MAC5C80F,cAAgBzuD,sBAAsBswB,aAAc16F,KAAK82B,KAAM6jE,aAE/Dp5F,MCpMgB,SAAjBu3H,eAAkBj/F,MAAOC,OAAQltB,QAAW,IAEjD4pH,eAIA5pH,OAJA4pH,eACAjiE,YAGA3nD,OAHA2nD,YACAE,YAEA7nD,OAFA6nD,YACAkiE,iBACA/pH,OADA+pH,iBAGJ,OAAQ9yH,KAAK6P,IAAK6gD,YAAcoiE,kBAAoB,EAAIH,gBAAiB/hE,aAAe5wD,KAAK2P,IAAIsmB,OAC7FD,OAAS,GD2LKi/F,CAAeF,WAAYD,aACrCnC,8BACAjiE,wBACAE,wBACAkiE,oCAEEt2B,UAAYrgG,KAAKy2F,OAAOjkD,MACxBumF,cAAgBtkE,aAAe5wD,KAAK2P,IAAImlH,YAAaC,YAAc,EACnEI,aAAeh5H,KAAKwW,SAASivD,OAC7BwzD,iBAAmB,SAAnBA,iBAAmBpgI,GAAC,OChOL,SAAhBqgI,cAAiB5nH,MAAO/P,MAAOiV,OAAQuiH,cAAev4B,UAC/D,IAAI24B,iBAAmB,EAEnBjB,iBAEA5mH,MAFA4mH,iBACAhF,QACA5hH,MADA4hH,QAEEkG,eAAiB54B,SAAShqF,SAC1B6iH,eAAiB74B,SAASM,QAAQoyB,UAAYkG,eAAiB54B,SAASj/F,QAAQ,GAAKi/F,SAAS5zF,SAASpT,OAI7G,OAFA2/H,mBAAqB53H,MAAM,GAAKA,MAAM,KAAOiV,OAAO,GAAKA,OAAO,KAC9CjV,MAAM,IAAM22H,iBAAmB1hH,OAAO,IAAM2iH,kBAC1CJ,eAAiBM,eDqNHH,CAAcrgI,EAAG0I,MAAOy3H,aAAcD,cAAev4B,WAE7E99E,KAAOixC,UAEJY,YAAYA,YAAc1wD,KAAK2P,IAAImlH,YAAc,EAAGC,WAAa,EAAGrkE,aAAe,GACnFud,aAAaA,cACb/c,SAASA,UACTgd,UAAUA,WACnB/xE,KAAKs5H,YAAcV,WACnB54H,KAAKu5H,aAAeZ,YAEpB,IAAM7lF,EAAIk0C,YAAYF,6BAAc/vD,WAAY,KAAM,GAAjC,GAAA1b,OAAwCw9G,cAAc,GAAtD,WACZ58C,QADC,GAAA5gE,OACUw9G,cAAc,GADxB,WACoC,GACrCxnE,KAAK,YAFJ,aAAAh2C,OAE8Bu9G,WAAa,EAF3C,KAAAv9G,OAEgDs9G,YAAc,EAF9D,MAyBJa,oBACFC,YAAc,EAqBlB,OAPAzyC,YAAYl0C,EAAG,IAAKs4D,gBAAT,GAAA/vF,OAA6Bw9G,cAAc,KAE9CllG,OAvCM,SAAR+vD,MAASr8D,MACX2/D,YAAY3/D,KAAM,OAAQ,SAACxuB,EAAGN,GAAJ,QACtB+Y,MAAOzY,EACPoJ,MAAO1J,EACPmhI,MAAOh3G,KACPjG,MACIquG,cAAezqB,UAAUsmB,YAAY9tH,EAAEu8H,UACvCvK,cACAQ,sBAPG,GAAAhwG,OASJw9G,cAAc,GATV,UAUM9gG,MAAM,OAAQ,SAAAl/B,GAAC,OAAIwnG,UAAUO,SAAS/nG,EAAEyY,MAAM8jH,YAC9C5jE,aACAoyB,SAASpyB,WAAWoyB,UACpBlY,GAAG,MAAOt0D,OAAKw5F,6BACf7rB,UAAU,IAAK,mBAAAle,KAAAzhE,UAAA1D,OAAIgf,OAAJ,IAAA7X,MAAAg+D,MAAAC,KAAA,EAAAA,KAAAD,KAAAC,OAAIpmD,OAAJomD,MAAA1hE,UAAA0hE,MAAA,OClMpB,SAAX6yD,SAAYj3G,KAAMu2G,iBAAkB71H,GAAM,IAC3CkO,MAAUlO,EAAE,GAAZkO,MACFmjD,YAAcwkE,iBAAiB3nH,OAGrC,OAFAA,MAAMmjD,YAAcA,YACpBnjD,MAAM8mH,cAAc3jE,YAAcnjD,MAAM8mH,cAAc3jE,aAAeA,YAC9D,SAAUh7D,GACb,OAAOipB,KAAKyrC,4BAAe78C,MAAM8mH,cAAe9mH,MAApC68C,CAA2C10D,KD4LJkgI,CAASj3G,KAAMu2G,iBAAkBv4G,UAC/D2wC,KAAK,QAAS,SAACx4D,EAAGN,GACf,IAAMqhI,gBAAkB/N,uBAAuBhzH,EAAGN,EAAG6yG,gBAAiBh0F,QACtE,SAAAiE,OAAUw9G,cAAc,GAAxB,UAAAx9G,OAAmCw9G,cAAc,GAAjD,UAAAx9G,OAA4DxiB,EAAEoJ,MAA9D,0CAAAoZ,OACMu+G,oBAqBtB1oE,KAhBU,SAAZ2oE,UAAaxyG,KAAMxuB,GACrB,IAAIihI,QAAUN,iBAAiBC,aACzBM,eAAiBN,YAClBK,QAEMA,QAAQA,QAAQp4H,OAAS,GAAG4P,MAAMrP,QAAUpJ,EAAEoJ,MAAQ,EAC7D63H,QAAQ5zH,MAAOmhB,UAAM/V,MAAOzY,IAE5B4gI,cAJAK,UAAazyG,UAAM/V,MAAOzY,IAM9B2gI,iBAAiBO,gBAAkBD,WAQtBzoE,KAAK,QAAS,SAACx4D,EAAGN,GAAJ,SAAA8iB,OAAaw9G,cAAc,GAA3B,KAAAx9G,OAAiCw9G,cAAc,GAA/C,KAAAx9G,OAAqD9iB,KC3MhE,SAAfyhI,aAAgBR,iBAAkBhoE,WAAYynE,iBAAkBv2G,MACrE82G,iBAAiB93H,OAAS,GAC1B83H,iBAAiB1wH,QAAQ,SAACmxH,oBACtB,IAAMtlE,WAAaslE,mBAAmB,GAAG3oH,MAAMqjD,WACzCE,SAAWolE,mBAAmBA,mBAAmBv4H,OAAS,GAAG4P,MAAMujD,SACnEnkD,IAAiB,EAAV7M,KAAKgwC,GAAS8gB,YAA0B,EAAV9wD,KAAKgwC,GAAU8gB,WAAaE,UAEvEolE,mBAAmBnxH,QAAQ,SAACrO,GAAM,IACtB4sB,KAAgB5sB,EAAhB4sB,KAAM/V,MAAU7W,EAAV6W,MAEd+V,KAAKke,KAAK,WACN,IAAM20F,MAAQpzC,6BAAc9mF,MAC5Bk6H,MAAMnpE,UAAU,QACCS,aACAoyB,SAASpyB,WAAWoyB,UACpBmB,UAAU,IAAK,kBAAM,SAAUtrF,GAC5B,IAAMg7D,YAAcwkE,iBAAiB3nH,OAErC,OADAA,MAAMmjD,YAAcA,YACb/xC,KAAKyrC,4BAAe78C,OACvBqjD,WAAYjkD,IACZmkD,SAAUnkD,IACV+jD,yBAHQtG,CAIT10D,OAEN+rC,SACjB00F,MAAM10F,eDmLlBw0F,CAAaR,iBAAkBhoE,WAAYynE,iBAAkBv2G,MACtD1iB,+EAUeshB,aACtB,IAAKthB,KAAK+K,OACN,SAEJ,IAAMoc,WAAa7F,YAAY,GACzB/D,OAAS+D,YAAYxG,MAAM,EAAGwG,YAAY5f,QAC1Cy4H,UAAYrzC,6BAAc9mF,KAAK+xB,SAASg/B,UAAU,QAAQhmD,OAC1DqS,aAAepd,KAAK+K,OAAOsS,kBAc3B+8G,YAZeD,UAAUnnH,OAAO,SAACqnH,OACnC,IAAMtvH,KAAOsvH,MAAM/oH,MAAMvG,KACnBktH,IAAMoC,MAAM/oH,MAAM2mH,IACxB,OAAO9wG,WAAWzJ,MAAM,SAACpS,MAAO4G,KAC5B,OAAI5G,SAAS8R,cAAgBA,aAAa9R,OAAOkS,IAAIniB,OAAS8D,yBAAUE,WACU,IAAvEke,OAAOgI,UAAU,SAAA1sB,GAAC,OAAIA,EAAEqZ,OAASnH,KAAKqS,aAAa9R,OAAOrJ,SAC1DqJ,QAAUikD,gBAAeC,SACkB,IAA3CjyC,OAAOgI,UAAU,SAAA1sB,GAAC,OAAIA,EAAEqZ,OAAS+lH,UAKnB,GACjC,GAAImC,YAAa,CACb,IAAMhnD,SAAWgnD,YAAYV,MAAMtmD,SAASgnD,YAAY9oH,OACxD,QACI6qB,EAAGi3C,SAAS,GAAKpzE,KAAKs5H,YAAc,EACpC91H,EAAG4vE,SAAS,GAAKpzE,KAAKu5H,aAAe,EACrC1/F,MAAO,EACPC,OAAQ,IAGhB,iEAIA,OAAO,GAAAze,OAAIwvF,0BAAiB17C,uBAArB,2EApSP,OAAOvvC,iFAWP,MAAO,sBEaA06G,cAvDE,SAAXA,SAAYvjG,UAAWhsB,KAAM6B,OAAQixB,YACvC,IAAMizB,UAAYg2B,6BAAc/vD,WAAWg6B,UAAU,KAAKhmD,KAAKA,MAEzDwvH,eAAiBzpE,UAAUM,QAAQl+B,OAAO,KAC3CqS,KAAK,SAAUvoB,SACZ8qE,wBAAS9nF,KAAMgd,QAAQo0C,SAE1BvnD,MAAMinD,WACL/4B,MAAQ0wD,qCAAsB3B,6BAAc/vD,WAAYnqB,OAAOsyB,WAC/D3F,SAAWl4B,SAAS02B,MAAMwB,SAAU,IA2C1C,OAzCAsE,WAAWzF,SAASL,OACpBwiG,eAAeh1F,KAAK,SAAUvoB,SAC1B,IAGIw9G,cAHEzzC,QAAUD,6BAAc9mF,MACtB2zB,OAAsD3W,QAAtD2W,OAAQtzB,KAA8C2c,QAA9C3c,KAAMmyC,MAAwCx1B,QAAxCw1B,MAAOioF,WAAiCz9G,QAAjCy9G,WAAmBC,UAAc19G,QAArB+a,MACnC4iG,WAAa39G,QAAQ29G,WAE3B,GAAIH,cAAgBG,WAAWnhI,MAAO,CAClC,IACIwpC,KADE43F,kBAAoBD,WAAW/5F,QADHi6F,sBAGRh9F,WAAWO,WAAWphB,QAAQ3c,MAAhDw5B,MAH0BghG,sBAG1BhhG,MAAOC,OAHmB+gG,sBAGnB/gG,OACTghG,aAAe9zC,YAAYD,QAAS,QAAS,IAG/C/jD,KADe,QAAfy3F,WACO5gG,MACe,UAAf4gG,WACA,EAEA5gG,MAAQ,EAGnBiuD,wBAASgzC,aAAahsG,QAClBqN,EAAGxI,OAAOwI,EAAI6G,KAAO43F,kBAAoB,EACzCp3H,EAAGmwB,OAAOnwB,EAAI+1B,SAAWqhG,kBAAoB,EAC7C/gG,MAAOA,MAAQ+gG,kBACf9gG,OAAQA,OAAS8gG,oBAErBD,YAAc5yC,yBAAU+yC,cACpBH,WAAYH,gBAGpB,IAAM7xC,OAAS3B,YAAYD,QAAS,OAAQ,SAAAluF,GAAC,OAAKA,KAAIwH,KAAKA,MACrD0wG,SAAWpoB,OAAO75D,OACxB4rG,WAAa3yC,yBAAUgpB,SAAU2pB,WACjCloF,OAASu1C,yBAAUgpB,UACfp0D,KAAMnK,QAEVx1B,QAAQkiB,WAAaypD,OAAO1M,QAAQj/D,QAAQkiB,WAAW,GACvD4oD,wBAASipB,SAAUp9E,QACnBg1D,OAAOt3B,KAAK,cAAeopE,cAE/B3pE,UAAUI,OAAO1rB,SACVsrB,WChEElxC,mCACT86E,aAAc,aACdC,YtDJuB,OsDKvBz7D,UAAW,GACX8a,WACI3+C,KAAM,YAEVq9F,aACIgQ,YACIrtG,KAAM,OACNuvH,WAAY,EAAG,GAAI,GAAI,KAE3BriB,OACIltG,KAAM,OACNuvH,WAAY,EAAG,EAAG,GAAK,KAE3BniB,QACIptG,KAAM,OACNuvH,WAAY,EAAG,EAAG,GAAK,MAG/Bp5D,YACI2/B,OAAQ,QACRvN,SAAU,KAEdgmB,UACIp3D,SACAnyC,MACI7G,MAAO,GACP4I,UAAW,SAAAA,UAAClB,IAAK3I,EAAGwS,KAAM2vB,SAEtB,OADoBA,QAAQg/D,aACrBA,CAAYx4F,MAEvBy5H,YACI/5F,QAAS,MAIrBg2F,QACIluB,WACIxpE,UAAS,GAAA7jB,OtD1CM,OsD0CN,0BAEbw7G,SACI33F,UAAS,GAAA7jB,OtD7CM,OsD6CN,wBAEby7G,UACI53F,UAAS,GAAA7jB,OtDhDM,OsDgDN,quDCvBA0/G,4qBAAkB1K,6RAc/B,MAAO,+DAUMtlH,KAAM6+F,SAAUnT,MAgB7B,IAhBmC,IAAAhiF,MAAAzU,KAC/BwzE,UACE6sB,UAAY5J,KAAKjkD,MACjBwoF,aAAepxB,SAASvpG,KACf46H,UAA+CD,aAAtD1vH,MAAkB9R,MAAoCwhI,aAApCxhI,MAAkB0hI,cAAkBF,aAA7B54H,UAC3BmoH,cAAgB3gB,SAASp3D,MACzB87E,WAAa/D,eAAiBA,cAAcj/G,MAC5C8R,aAAepd,KAAK+K,OAAOsS,kBAE3B89G,mBAAqBvxB,SAASvpG,KAAKs6H,WACnCC,kBAAoBO,mBAAmBv6F,QACvCw6F,gBAAkBD,mBAAmB3hI,MACrCgxH,gBAAkBptG,aAAakxG,YAAclxG,aAAakxG,YAAYrsH,OAAS,EAC/Eo5H,eAAiBJ,UAAY79G,aAAa69G,YAAc79G,aAAa69G,WAAWh5H,OAAS,EACzF4vH,KAAO7lB,SAASpuD,EAChBg0E,KAAO5lB,SAAS/nG,EAfa6jE,MAAA,SAAAA,MAgB1BvvE,EAAOkQ,KACZ,IAAM5P,EAAIkS,KAAKxS,GACTwiB,IAAMliB,EAAEmtE,MACRs1D,UAAYL,UAAYlgH,IAAIsgH,gBAAkB7hI,MAnBrBiyH,MAAA8P,oBAqBX1J,KAAMD,MAAM3pH,IAAI,SAAA5M,MAAI,OAAKo7F,KAAKp7F,MAAQo7F,KAAKp7F,MAAMghG,cAAcxjG,EAAEwC,OAC7Eo7F,KAAKp7F,MAAMihG,eAAiB,EAAI,IAtBT,GAqBxB+3B,IArBwB5I,MAAA,GAqBnB6I,IArBmB7I,MAAA,GAAA8I,eAwBHjK,eAAgBh5G,MAAOzY,EAAGoJ,MAAO1J,IACvDgyH,4BAAelqB,oBAAWmqB,kCADxBh4E,MAxBuB+hF,eAwBvB/hF,MAAOi4E,SAxBgB8J,eAwBhB9J,SAGT7zD,OACFxF,SACAz9B,QACIwI,EAAGk4F,IACH7wH,EAAG8wH,KAEPj0H,KAAM66H,cAAcI,UAAW/iI,EAAGwS,KAAM0J,OACxC+9B,YACAmoF,YACInhI,MAAO4hI,2BAA2BtmH,SAAWsmH,gBAAgBviI,EAAGN,EAAGwS,KAAM0J,OAAQ,KACjFmsB,QAASg6F,mBAEbn+G,MACIouG,cACAC,cAAeL,SACfY,mBAEJtzF,SACAiuC,MAAOjrD,IACPipE,IAAKnrF,EAAEmrF,IACPvgE,OAAQ5qB,EAAEmtE,MACVyuD,MAAO57H,EAAEmrF,KAGbptB,MAAM13B,UAAY2sF,uBAAuBhzH,EAAGN,EAAGwS,KAAM0J,OACrD++D,OAAOttE,KAAK0wD,QApCPr+D,EAAI,EAAGkQ,IAAMsC,KAAKrJ,OAAQnJ,EAAIkQ,IAAKlQ,IAAKuvE,MAAxCvvE,GA4CT,OAJAi7E,QADAA,OAAS44C,eAAepsH,KAAMwzE,SACdxgE,OAAO,SAACna,GACpB,IAAM86B,OAAS96B,EAAE86B,OACjB,OAAQrgB,MAAMqgB,OAAOwI,KAAO7oB,MAAMqgB,OAAOnwB,2CAUzCuzB,WAAW,IACXy8C,OADW7+D,OAAA3U,KAET4M,OAAS5M,KAAK4M,SACdg9F,SAAWh9F,OAAOg9F,SAClByf,eAAiBrpH,KAAKqvH,gBACtBnwF,UAAYtyB,OAAOsyB,UACnB4jE,mBAAqB14B,sBAAsBx9D,OAAO8tF,aAAc16F,KAAK82B,KAAMlqB,OAAO+tF,aAClFlE,KAAOz2F,KAAKy2F,OAoBlB,OAnB2B3P,6BAAc/vD,WAEtBklD,QAAnB,GAAA5gE,OAA8BynF,mBAAmB//F,KAAK,KAAtD,KAAAsY,OAA8D6jB,YAAa,GAC3E+oD,+BACIl9E,KAAMs+G,eACNn2F,OAAQ,IACRsiD,SAAU,IACVz+C,oBACAwO,KAAM,SAAAA,KAACmpC,QAASzwB,MAAO1lD,GACnB,IAAMu2B,KAAOmvB,MAAMnvB,OACnB0kD,OAAS7+D,OAAKugH,gBAAgBxmD,QAASk7B,SAAUnT,KAAMl+F,GACvDwvF,yBAAUj5D,MACN0sG,cvD/Hc,WuDiIlBlB,cAASxrG,KAAM0kD,QACXt0C,UAAW4jE,mBAAmB,IAC/BnuF,OAAK4hG,cAAc14E,eAGvB79B,6DAjHP,OAAO4f,kFAIP,MAAO,wBC2EA67G,eAtCgC,SAAdA,YAAe/6G,QAAW,IAC/Cw5E,MAAoDx5E,OAApDw5E,MAAOnjE,UAA6CrW,OAA7CqW,UAAWy8C,OAAkC9yD,OAAlC8yD,OAAQhiB,WAA0B9wC,OAA1B8wC,WAAYtyB,UAAcxe,OAAdwe,UACtC0kD,SAA+BpyB,WAA/BoyB,SAAUuN,OAAqB3/B,WAArB2/B,OAAQ4M,SAAavsC,WAAbusC,SACpBhsE,MAAQ+0D,6BAAc/vD,WAG5B,OADAhF,MAAMs/B,KAAK,QAASnyB,WACb8nD,YAAYj1D,MAAO,IAAKyhD,OAAQ,MACnCpiB,MAAO,SAAAA,MAACnT,MAAOplD,GAAM,IACTu4D,MAAUv4D,EAAVu4D,MACRnT,MAAMoT,KAAK,YAAX,aAAAh2C,OAAqC+1C,MAAMj1B,EAA3C,KAAA9gB,OAAgD+1C,MAAM5tD,EAAtD,OAEJmwB,OAAQ,SAAAA,OAACsqB,MAAOplD,IAvDJ,SAAd6iI,YAAwB7iI,EAAG8iI,cAAc,IACnCp7B,MAAwB1nG,EAAxB0nG,MAAO7nE,KAAiB7/B,EAAjB6/B,KAAM/E,OAAW96B,EAAX86B,OAErB,GAAI4sE,iBAAiB/Z,QACjB+Z,MAAMnW,KAAK,SAAC/7D,KACRx1B,EAAE0nG,MAAQlyE,IACVqtG,YAAY7iI,EAAG8iI,qBAEhB,GAAIp7B,iBAAiBq7B,QAAS,CACjC,IAAIC,SAAWt7B,MAAM7oB,WAAU,GAE/B,GAAwC,QAApCmkD,SAASC,SAASr6H,cAAyB,CAC3C,IAAMs6H,IAAMF,SAASE,KAAOF,SAASG,MACrCH,SAAWvlG,SAASuM,gBAAgB,6BAA8B,UACzDd,aAAa,OAAQg6F,KAElC,IAAME,aAAen1C,6BAAc+0C,UACT,SAAtBA,SAASC,UAA6C,UAAtBD,SAASC,SACzCG,aAAa5qE,KAAK,YAAlB,SAAAh2C,OAAwCqd,KAAO,IAA/C,OAEAujG,aAAa5qE,KAAK,SAAU34B,MAC5BujG,aAAa5qE,KAAK,QAAS34B,OAE/BujG,aAAa5qE,KAAK,KAAM34B,KAAO,GAC/BujG,aAAa5qE,KAAK,KAAM34B,KAAO,GAC/BsuD,YAAY20C,aAAc,kBAAME,WAAW,SACxC,GAAqB,iBAAVt7B,MAAoB,CAClC,IAAI27B,QAIAA,QA5CM,SAAZC,UAAahyH,KACf,SAAI,0CAA0CtM,KAAKsM,MAAQ,UAAUtM,KAAKsM,MAAQA,IAAIzI,OAAS,GAwCvFy6H,CAAU57B,OACAA,MAEA/wB,uBAAU+wB,OAAO7nE,KAAKA,KAAtB82C,CAA4B77C,QAE1CqzD,YAAY20C,aAAc,OAAQ,SAAA5wH,MAAI,OAAKA,QAAOsmD,KAAK,IAAK6qE,cAE5DrjI,EAAE0nG,MAAQ,SACVm7B,YAAY7iI,EAAG8iI,cAoBXD,CAAY7iI,EAAGolD,OADG,IAEVtqB,OAAkB96B,EAAlB86B,OAAQoE,MAAUl/B,EAAVk/B,MAChB6yC,eAAe7yC,MAAO,SAAAj+B,KAAG,OAAImkD,MAAMlmB,MAAMj+B,IAAKi+B,MAAMj+B,QACpDmkD,MAAMoT,KAAK,QAASnyB,WACpB+e,MAAMg+B,QAAQpjF,EAAEqmC,WAAW,GACtB6+D,WACD9/C,MAAQA,MAAMuT,aACToyB,SAASpyB,WAAWoyB,UACpBlY,GAAG,MAAOwuB,MAAM0W,8BAEzB3yD,MAAMoT,KAAK,YAAX,aAAAh2C,OAAqCsY,OAAOwI,EAA5C,KAAA9gB,OAAiDsY,OAAOnwB,EAAxD,OAEJ0tD,KAAM,SAAAA,KAACkrE,WACEr+B,SAODq+B,UAAU52F,SANV42F,UAAU5qE,aAAaqyB,KAAKxa,QAAQ8nB,SACnCvN,SAASA,UACTlY,GAAG,MAAO,kBAAM0wD,UAAU52F,WAC1BzN,MAAM,eAAgB,GACtBA,MAAM,iBAAkB,KAKlCrX,OAAOymE,QCzGDvnE,oCACT86E,aAAc,cACdx7D,UAAW,GACXy7D,YzDLuB,OyDMvB0hC,cAAe,SACf3jC,aACIgQ,YACIrtG,KAAM,OACNuvH,WAAY,EAAG,GAAI,GAAI,KAE3BriB,OACIltG,KAAM,OACNuvH,WAAY,EAAG,EAAG,GAAK,KAE3BniB,QACIptG,KAAM,OACNuvH,WAAY,EAAG,EAAG,GAAK,MAI/BsC,aAAc,GACd/gB,sBAAuB,GACvBnyD,WACI3+C,KAAM,YAEVm2D,YACI2/B,OAAQ,QACRvN,SAAU,KAEdgmB,UACIlxE,MACIl/B,MAAO,IAEXg5C,SACA+tD,OACI/mG,MAAO,UAEX2iC,KACA34B,KACA4oG,eACI5yG,MAAO,IAEX8iI,aACI9iI,MAAO,KAGf+iI,QAAS,SAAU,QAAS,UAAW,SAAU,OAAQ,MAAO,YAChEC,OAAQ,GAAI,GAAI,GAAI,GAAI,GAAI,mrEChBXC,sCAOjB,SAAAA,aAAsB,IAAAz3B,iBAAAvwF,0JAAAioH,CAAA18H,KAAAy8H,YAAA,QAAA51D,KAAAzhE,UAAA1D,OAANsF,KAAM,IAAA6B,MAAAg+D,MAAAC,KAAA,EAAAA,KAAAD,KAAAC,OAAN9/D,KAAM8/D,MAAA1hE,UAAA0hE,MAAA,OAClBryD,MAAAkoH,gCAAA38H,MAAAglG,iBAAA43B,qBAAAH,aAAA/jI,KAAA6O,MAAAy9F,kBAAAhlG,MAAAqb,OAASrU,SACJ+jE,SAAW,IAAIF,qBACpBp2D,MAAKm4G,WAAav5C,OAAOpsC,OAHPxyB,wXAPc47G,iSAoBhC,MAAO,4DAoDMtlH,KAAM6+F,SAAUnT,MA2B7B,IA3BgD,IAAA9hF,OAAA3U,KAAb4M,OAAaxH,UAAA1D,OAAA,QAAA4L,IAAAlI,UAAA,GAAAA,UAAA,MAC5CouE,UAEMqpD,aAKNjzB,SALAlxE,KACOokG,cAIPlzB,SAJArJ,MACOgqB,cAGP3gB,SAHAp3D,MACArW,EAEAytE,SAFAztE,EACA34B,EACAomG,SADApmG,EAEEgrH,UAAYqO,aAAavxH,MACzByxH,UAAYF,aAAarjI,MACzB+0H,WAAauO,cAAcxxH,MAC3BurF,OAAS16D,EAAE7wB,MACXyrF,OAASvzF,EAAE8H,MACHk1F,SAA+B/J,KAArC/9D,KAAuB4nE,UAAc7J,KAArB8J,MAClBnjF,aAAepd,KAAK+K,OAAOsS,kBAC3B82G,OAAS/2G,aAAay5E,SAAWz5E,aAAay5E,QAAQr5E,IAAIniB,OAAS8D,yBAAUE,UAC7E+0H,OAASh3G,aAAa25E,SAAW35E,aAAa25E,QAAQv5E,IAAIniB,OAAS8D,yBAAUE,UAC7EvF,IAAMq6H,OAASnoB,SAASpuD,EAAKw2E,OAASpoB,SAAS/nG,EAAI,KACnDqqH,WAAa/D,eAAiBA,cAAcj/G,MAC5Ck/G,gBAAkBptG,aAAakxG,aAAelxG,aAAakxG,YAAYrsH,MACvEi8F,YAAcl+F,KAAKk+F,cACnB8+B,gBAAkB5/G,aAAamxG,aAAenxG,aAAamxG,YAAYtsH,MACvEg7H,eAAiB7/G,aAAaoxG,YAAcpxG,aAAaoxG,WAAWvsH,MACpEo+F,UAAY5J,KAAKjkD,MAxByB0qF,eAyBbtwH,OAAOq0C,OAA/Bk8E,QAzBqCD,eAyBxC/gG,EAAeihG,QAzByBF,eAyB5B15H,EAzB4BskE,MAAA,SAAAA,MA2BvCvvE,EAAOkQ,KACZ,IAAM5P,EAAIkS,KAAKxS,GACTwiB,IAAMliB,EAAEmtE,MACRttC,KAAOqkG,qBAAqBjoH,SAAWioH,UAAUlkI,EAAGN,GAAKioG,SAASM,QAAQ/lF,IAAIkiH,iBAC9E18B,MAAQD,UAAUO,SAAS9lF,IAAIiiH,kBA/BOvR,MAAA4R,qBAiC1BrxB,SAASpuD,EAAGouD,SAAS/nG,GAAGgE,IAAI,SAAC5M,MAC3C,IAAM7B,MAAoB,OAAZX,EAAEwC,WAAiBiS,EAAYzU,EAAEwC,MACzC2lG,QAAU3lG,OAAS2wG,SAASpuD,EAAIsgD,YAAYrkE,MAAQqkE,YAAYpkE,OACtE,OAAQ8vE,SAASvuG,MAAMiQ,MAAsBmrF,KAAKp7F,MAAMghG,cAAc7iG,OAAvCwnG,QAAU,IApCD,GAiCvCqzB,IAjCuC5I,MAAA,GAiClC6I,IAjCkC7I,MAAA,GAuC5C4I,KAAO8I,QACP7I,KAAO8I,QAxCqC,IAAA7I,eA0ChBjK,eAAgBh5G,MAAOzY,EAAGoJ,MAAO1J,IACvDgyH,4BAAelqB,oBAAWmqB,kCADxBh4E,MA1CoC+hF,eA0CpC/hF,MAAOi4E,SA1C6B8J,eA0C7B9J,SAGT1yF,OACF4kB,KAAMnK,MACNgiF,OAAQhiF,OAGZ,IAAKl/B,MAAM+gH,OAAS/gH,MAAMghH,KAAM,CAC5B,IAAM19D,OACFxF,OACIj1B,EAAGk4F,IACH7wH,EAAG8wH,KAEP3gG,QACIwI,EAAGk4F,IACH7wH,EAAG8wH,KAEP/zB,YACA7nE,KAAM70B,KAAKsnB,IAAIuN,MACfjc,MACIouG,cACAC,cAAeL,SACfY,mBAEJtzF,YACAiuC,MAAOjrD,IACPipE,IAAKnrF,EAAEmrF,IACPvgE,OAAQ5qB,EAAEmtE,MACVyuD,MAAO57H,EAAEmrF,KAEbptB,MAAM13B,UAAY2sF,uBAAuBhzH,EAAGN,EAAGwS,KAAM4J,QACrD6+D,OAAOttE,KAAK0wD,OACZjiD,OAAK+/G,WAAW77H,EAAEiB,KAAM88D,SAhDvBr+D,EAAI,EAAGkQ,IAAMsC,KAAKrJ,OAAQnJ,EAAIkQ,IAAKlQ,IAAKuvE,MAAxCvvE,GAoDT,OADAi7E,OAAS44C,eAAepsH,KAAMwzE,8CAU1Bz8C,WAAW,IAEX49F,gBAFWv9G,OAAApX,KACXs9H,QAAU,EAER1wH,OAAS5M,KAAK4M,SACd9G,KAAO9F,KAAKmvH,iBAAiBlnH,IAAI,SAAApP,GAAC,OAAIA,EAAEiB,MACtC03D,WAAqD5kD,OAArD4kD,WAAYtyB,UAAyCtyB,OAAzCsyB,UAAWw7D,aAA8B9tF,OAA9B8tF,aAAcC,YAAgB/tF,OAAhB+tF,YACvC0uB,eAAiBrpH,KAAKqvH,gBACtBuF,mBAAqB9tC,6BAAc/vD,WACnC+rE,mBAAqB14B,sBAAsBswB,aAAc16F,KAAK82B,KAAM6jE,aAC1E36F,KAAK2wH,WACL3wH,KAAKqyH,aAELuC,mBAAmB34C,QAAQ6mB,mBAAmB//F,KAAK,MAAM,GAAMk5E,QAAQ/8C,WAAW,GAElFl/B,KAAK2wH,QAAU3wH,KAAKu9H,mBAAmBlU,eAAgBvjH,MACvD,IAAM4F,OAAS1L,KAAK+K,OAAO8gB,YAiB3B,OAhBAm7D,YAAYjwD,UAAW,IAAK/2B,KAAK2wH,QAAS,MACtCh9F,OAAQ,SAAAA,OAACsqB,MAAOu1B,QACZ8pD,QAAUz5H,KAAK6P,IAALnM,MAAA1D,MAASy5H,SAALjiH,OAAAmiH,wBAAiBhqD,OAAOvrE,IAAI,SAAApP,GAAC,OAAIA,EAAE6/B,UACjDi8F,gBAAe,GAAAt5G,OAAMynF,mBAAmB,IACxC1rF,OAAK4N,YAAYy4G,QAAjBrmH,EACI8iF,MAAO9iF,OACP2f,UAAWknB,MAAMnvB,OACjB0kD,cACAt0C,UAAWy1F,gBACXnjE,sBACA21B,MAAO,SAAAA,MAAAv9E,GAAC,OlBuQH,SAAZ8zH,UAAaj6G,OAAQ/X,QAAT,OAAoB+X,OAAOzQ,OAAO,SAAC9R,IAAK3I,GAAN,OAAYmT,OAAOnT,IAC1EmT,OAAOnT,GAAG8C,OAAS8D,yBAAUE,YAAW0D,OkBxQZ26H,CAAU9zH,EAAE6Z,OAAQ/X,aAGzC,SAAAX,MAAI,OAAIA,KAAK,GAAGi5E,MACnBhkF,KAAK29H,SAA0C,EAA/B95H,KAAKkQ,KAAKupH,QAAUz5H,KAAKgwC,IACzCm4E,oBAAoBhsH,KAAK+qE,SAAU/qE,KAAK2wH,SACjC3wH,mEAGSqpH,eAAgBvjH,MAAM,IAAA4tB,OAAA1zB,KAChC4pG,SAAW5pG,KAAK4M,SAASg9F,SACzBnT,KAAOz2F,KAAKy2F,OAFoBmnC,qBAAAP,oBAGA9Q,2BAAmBvsH,KAAM8F,MAHzB,GAG/B+3H,aAH+BD,qBAAA,GAGjBE,cAHiBF,qBAAA,GAIhCG,cAAgBF,aAAa9Q,iBAC7BiR,cAAgBF,cAAc/Q,iBACpC,OAAO1D,eAAephH,IAAI,SAACymE,QAASn2E,GAChC,IAAM0lI,gBAAkBvqG,OAAKwqG,qBAAqBH,cAAcxlI,GAAIylI,cAAczlI,GAAIslI,aAAahR,KAC/FiR,cAAcjR,MAClB,OAAOn5F,OAAKwhG,gBAAgBxmD,QAASk7B,SAAUnT,KAAMwnC,mBACtDjrH,OAAO,SAAAna,GAAC,OAAIA,EAAE6I,2EAGCy7H,QAASC,QAASe,UAAWC,YAC/C,OACIn9E,QACI9kB,GAAIghG,SAAW,GAAKgB,UAAY,EAChC36H,GAAI45H,SAAW,GAAKgB,WAAa,GAErCvR,MACI1wF,EAAGgiG,UACH36H,EAAG46H,qEAWEjiG,EAAG34B,GAChB,IAAM66H,cAAgBx6H,KAAK6P,IAAI1T,KAAK29H,SAAU39H,KAAK4M,SAASu/F,uBAE5D,IAAKnsG,KAAK+K,OACN,OAAO,KAGX,IAAM6rD,MAAQ52D,KAAK+qE,SAAS3gD,KAAK+R,EAAG34B,EAAG66H,eACjCt2G,WAAa6uC,OAASA,MAAM7rD,KAAKA,KAAK4oB,OACtC8xC,OAAS7O,MAAQ/yD,KAAKkQ,KAAK6iD,MAAM7rD,KAAKA,KAAK2tB,KAAO70B,KAAKgwC,IAAM,EAEnE,GAAI+iB,MAAO,KAAA2+D,iBACgB3+D,MAAM7rD,KAAKA,KAA1Bi7D,MADDuvD,iBACCvvD,MAAOge,IADRuxC,iBACQvxC,IAEf,OACIltD,GAFgB92B,KAAKw1H,uBAAuBxvD,MAAOge,KAGnDj8D,aACIoU,EAAGpU,WAAWoU,EACd34B,EAAGukB,WAAWvkB,EACdq2B,MAAO4rC,OACP3rC,OAAQ2rC,SAEZgwD,QAASz1H,KAAK82B,MAGtB,OAAO,6DAhOP,OAAOlX,uFAGWmsD,KAAM4nD,UACxB,IAAM/mH,OAASyjH,qBAAUH,cAAcnkD,KAAM4nD,UACvC/pB,SAAWh9F,OAAOg9F,SAClB5vD,UAAYptC,OAAOotC,UACnBs0E,WAAa1kB,SAASp3D,OAASo3D,SAASp3D,MAAMlnC,MAKpD,OAHIgjH,aACAt0E,UAAUpyB,QAAU0mG,YAEjB1hH,uDAWP,MAAO,gDAWP,OAAO6uH,iCCnDyB6C,mBAAY,SAAZA,UAAa59G,QAAW,IACpDw5E,MAAoCx5E,OAApCw5E,MAAO1mB,OAA6B9yD,OAA7B8yD,OAAQz8C,UAAqBrW,OAArBqW,UAAWowD,MAAUzmE,OAAVymE,MAKlC,OAAOH,YAAYjwD,UAAW,OAAQy8C,OAAQ,MAH1CpiB,MADc,SAAAA,MACP/pC,KAAMxuB,IAdF,SAAb0lI,WAAcl3G,KAAMxuB,GACtB,IAAMi4D,UAAYzpC,KACZ+pC,MAAQv4D,EAAEu4D,UAChBn4D,OAAOub,QAAQ48C,OAAOtoD,QAAQ,SAAAuoD,MAAI,OAAM/9C,MAAM+9C,KAAK,KAAOP,UAAUO,KAAKA,KAAK,GAAIA,KAAK,MAWjEktE,CAAWl3G,KAAMxuB,IACnC86B,OAFc,SAAAA,OAENtM,KAAMxuB,EAAGN,IAtCF,SAAjBimI,eAAkBtkC,MAAO7yE,KAAM/V,MAAOrP,MAAOy4B,SAAY,IACnD82B,WAAe92B,QAAf82B,WACAoyB,SAA+BpyB,WAA/BoyB,SAAUma,SAAqBvsC,WAArBusC,SAAU5M,OAAW3/B,WAAX2/B,OACtBrgC,UAAYzpC,KAEZo3G,cAAgB1gC,SAAWjtC,UAC7BA,UAAUU,aACToyB,SAASA,UACTC,KAAKxa,QAAQ8nB,SACbzlB,GAAG,MAAOwuB,MAAM0W,6BACfj9E,OAASriB,MAAMqiB,QAAUriB,MACzB66G,YAAc76G,MAAMymB,UAC1BzmB,MAAM4tB,WAAa4xB,UAAUmrB,QAAQ3qE,MAAM4tB,WAAW,GACtDjmC,OAAOub,QAAQmf,QAAQ7qB,QAAQ,SAAAuoD,MAAI,OAAM/9C,MAAM+9C,KAAK,KAAOotE,cAAcptE,KAAKA,KAAK,GAAIA,KAAK,MAC5Fp4D,OAAOub,QAAQ23G,aAAarjH,QAAQ,SAAAu5B,UAAQ,OAAIyuB,UAAU/4B,MAAMsK,SAAS,GAAIA,SAAS,MAwB5Dm8F,CAAetkC,MAAO7yE,KAAMxuB,EAAGN,EAAGmoB,UAEGymE,QChDtDvnE,kCACT+6E,Y5DHuB,O4DIvBD,aAAc,YACdx7D,UAAW,GACXw5D,aACIgQ,YACIrtG,KAAM,OACNuvH,WAAY,EAAG,GAAI,GAAI,KAE3BriB,OACIltG,KAAM,OACNuvH,WAAY,EAAG,EAAG,GAAK,KAE3BniB,QACIptG,KAAM,OACNuvH,WAAY,EAAG,EAAG,GAAK,MAG/B5wE,WACI3+C,KAAM,SAEVm2D,YACI2/B,OAAQ,QACRvN,SAAU,KAEdspC,aAAc,GACdtjB,UACIp3D,SACArW,KACA34B,KACAq8C,MACA+S,OAEJgkE,QACIluB,WACIxpE,UAAS,GAAA7jB,O5DrCM,O4DqCN,yBAEbw7G,SACI33F,UAAS,GAAA7jB,O5DxCM,O4DwCN,uBAEby7G,UACI53F,UAAS,GAAA7jB,O5D3CM,O4D2CN,0BC9BfqjH,sDAAoB,SAApBA,kBAAqBrjI,KAAMsjI,SAAU/xH,OAAQ7B,MAC/C,IAWIo9E,IAXEy2C,UAAqB,MAATvjI,KAAe,QAAU,SADas3B,MAE7B/lB,OAAM,GAAAyO,OAAIhgB,KAAJ,cAAsBsjI,SAAQ,GAAAtjH,OAAIhgB,KAAJ,UAAxDusE,UAFiDj1C,KAAA,GAEtCu9B,KAFsCv9B,KAAA,GAIpDg6F,cAIA//G,OAJA+/G,cACAkQ,aAGAjwH,OAHAiwH,aACAgC,WAEAjyH,OAFAiyH,WACA3gC,YACAtxF,OADAsxF,YAGE6+B,UAAYF,aAAarjI,MAC3B43D,MAAQ,EAER2jB,MAAQ,EACR+pD,WAAa,EACjB,QAAkBxxH,IAAds6D,UACA,GAAIh7D,OAAM,GAAAyO,OAAIhgB,KAAJ,WAAmB,CACzB,IAEImY,IACAE,IAHEqrH,OAASh0H,KAAK1P,MACd2jI,OAASj0H,KAAI,GAAAsQ,OAAIhgB,KAAJ,MAGnB,GAAe,OAAX0jI,QAA8B,OAAXC,OACnB,OACIF,gBAAYxxH,EACZ8jD,WAAO9jD,EACP66E,SAAK76E,EACLynE,WAAOznE,GAEJs6D,YAAc3oE,8BAAeC,YAAc0oE,YAAchpE,gCAAiBE,UACjF0U,IAAM3P,KAAK2P,IAAIurH,OAAQC,QACvBtrH,IAAM7P,KAAK6P,IAAIqrH,OAAQC,UAEvBxrH,IAAMurH,OACNrrH,IAAMsrH,QAEV,IAAMlxB,OAAkB,MAATzyG,MAAgBmY,IAAKE,MAAQA,IAAKF,KACjD20E,IAAMj4B,KAAKmsC,cAAcyR,OAAO,IAAM59C,KAAKosC,eAAiB,EAC5DvnB,MAAQlxE,KAAKsnB,IAAI+kC,KAAKmsC,cAAcyR,OAAO,IAAM3lB,KAAOj4B,KAAKosC,eAAiB,EAE9ElrC,MAAQ+2B,IACR22C,WAAa,OACV,GAAIl3D,YAAchpE,gCAAiBC,aAAe+oE,YAAchpE,gCAAiBE,SAAU,CAK9F,GAJAqpF,IAAMj4B,KAAKmsC,cAActxF,KAAK1P,QACzBwjI,WAAoB,MAATxjI,KAAe,iBAAmB,oBAAsB,GAExE05E,MAAQ8pD,WAAoB,MAATxjI,KAAe,WAAa,kBAC7BiS,IAAdyvH,UAAyB,CACzB,IAAMkC,OAASlC,UAAYhoD,MAC3BA,OAASkqD,OACT92C,KAAO82C,OAAS,EAEpB7tE,MAAQ+2B,IACR22C,WAAa/pD,UACV,CACH,IAAMmqD,QAAUhvE,KAAKmsC,cAAc,GAC7B8iC,SAAWjvE,KAAKmsC,cAActxF,KAAK1P,OACnC+jI,UAAYlvE,KAAKmsC,cAActxF,KAAI,GAAAsQ,OAAIhgB,KAAJ,OAEzCyjI,WAAa,EACA,MAATzjI,MACA8sF,IAAMp9E,KAAK1P,MAAQ,GAAKsxH,gBAAkBjhB,MAAQyzB,SAAWD,QAC7DnqD,MAAQlxE,KAAKsnB,IAAIg9D,KAAOwkC,gBAAkBjhB,MAAQ0zB,UAAar0H,KAAK1P,OAAS,EAAI8jI,SAAWD,YAE5F/2C,IAAMwkC,gBAAkBjhB,OAAS3gG,KAAK1P,OAAS,EAAI8jI,SAAWD,QAC9DnqD,MAAQlxE,KAAKsnB,IAAIg9D,KAAOwkC,gBAAkBjhB,MAAQ0zB,UAAar0H,KAAK1P,OAAS,EAAI6jI,QAAUC,YAE/F/tE,MAAQ8tE,aAGZ/2C,IAAM,EACNpT,MAAQmpB,YAAY0gC,WAGxB,OACIE,sBACA1tE,YACA+2B,QACApT,eAYFsqD,kBAAoB,SAApBA,kBAAqBt0H,KAAM6B,OAAQ6pF,MACrC,IAAMkoC,UACFjoC,MAAOD,KAAKt6D,EACZw6D,MAAOF,KAAKjzF,GAH8B87H,mBAU1CZ,6BAAkB,IAAKC,SAAU/xH,OAAQ7B,MAJ7Bw0H,WAN8BD,mBAM1CR,WACOU,OAPmCF,mBAO1CluE,MACKquE,KARqCH,mBAQ1Cn3C,IACOtuD,MATmCylG,mBAS1CvqD,MAT0C2qD,oBAiB1ChB,6BAAkB,IAAKC,SAAU/xH,OAAQ7B,MAJ7B40H,YAb8BD,oBAa1CZ,WAKJ,OACI1tE,OACIj1B,EAAGqjG,OACHh8H,EArBsCk8H,oBAc1CtuE,MAQIv3B,MAAO0lG,WACPzlG,OAAQ6lG,aAEZhsG,QACIwI,EAAGsjG,KACHj8H,EA3BsCk8H,oBAe1Cv3C,IAaItuD,YACAC,OA7BsC4lG,oBAgB1C3qD,smFCpGR,IAAM31E,QAAUD,yBAAUC,QACpBk0E,cAAYD,OAAOpsC,KAaJ24F,kCAIjB,SAAAA,WAAwB,IAAA56B,iBAAAvwF,wJAAAorH,CAAA7/H,KAAA4/H,UAAA,QAAA/4D,KAAAzhE,UAAA1D,OAARgf,OAAQ,IAAA7X,MAAAg+D,MAAAC,KAAA,EAAAA,KAAAD,KAAAC,OAARpmD,OAAQomD,MAAA1hE,UAAA0hE,MAAA,OACpBryD,MAAAqrH,8BAAA9/H,MAAAglG,iBAAA+6B,mBAAAH,WAAAlnI,KAAA6O,MAAAy9F,kBAAAhlG,MAAAqb,OAASqF,WACJksG,WAAat5C,gBAClB7+D,MAAKurH,cACD7jG,EAAG,EACH34B,EAAG,GAEPiR,MAAKwrH,WACD9jG,EAAG,EACH34B,EAAG,GAEPiR,MAAK49G,aAXe59G,kXAJU47G,yRAyB9B,MAAO,+EAmDctlH,KAAM4mH,iBAAkBv0G,cAC7C,IAAM5G,OAAS0pH,QAAAH,mBAAAH,SAAAvlI,WAAA,0BAAA2F,MAAAtH,KAAAsH,KAA8B+K,KAAM4mH,iBAAkBv0G,cAOrE,OANC,IAAK,KAAKtU,QAAQ,SAACjQ,GACZ84H,iBAAgB,GAAAt2G,OAAIxiB,EAAJ,gBAAsBuG,SAAWoX,OAAO3d,KACxD84H,iBAAgB,GAAAt2G,OAAIxiB,EAAJ,YAAkB2d,OAAO3d,GAAK2d,OAAO3d,GAAG0X,KAAK,SAAC5V,EAAGyI,GAAJ,OAAUzI,EAAIyI,IACtEoT,OAAO3d,GAAG,GAAKgL,KAAK2P,IAAIgD,OAAO3d,GAAG,GAAI,MAG5C2d,+DAWMzL,KAAM8zH,YACnB,ODgB2B,SAAtBsB,oBAAuBzlG,QAAS3vB,KAAM8zH,YAsB/C,IArBA,IAAIrrD,UACEo2B,SAAWlvE,QAAQ9tB,SAASg9F,SAC5BnT,KAAO/7D,QAAQ+7D,OACf4J,UAAY5J,KAAKjkD,MACjBp1B,aAAesd,QAAQ3vB,OAAOsS,kBAC9BktG,cAAgB3gB,SAASp3D,MACzB87E,WAAa/D,cAAcj/G,MAC3BuxH,aAAejzB,SAASlxE,SARgC80F,sBActD9yF,QAAQgyF,oBAJR0B,QAVsDZ,sBAUtDY,QACAC,QAXsDb,sBAWtDa,QACAM,cAZsDnB,sBAYtDmB,cACAC,cAbsDpB,sBAatDoB,cAEF1wB,YAAcxjE,QAAQwjE,cACtBi2B,OAASxF,gBAAkB/vH,gCAAiBC,aAAe8vH,gBAAkB/vH,gCAAiBE,SAC9Fs1H,OAASxF,gBAAkBhwH,gCAAiBC,aAAe+vH,gBAAkBhwH,gCAAiBE,SAC9FhF,IAAMq6H,OAAS,IAAOC,OAAS,IAAM,KACrCzH,cAAgBjyF,QAAQiyF,gBACxBnC,gBAAkB8D,YAAclxG,aAAakxG,aAAelxG,aAAakxG,YAAYrsH,MAElF1J,EAAI,EAAGkQ,IAAMsC,KAAKrJ,OAAQnJ,EAAIkQ,IAAKlQ,IAAK,CAC7C,IAAMM,EAAIkS,KAAKxS,GACTw/B,SACAtb,QACAsL,WAAas3G,kBAAkBxmI,GACjCm+F,WAAY23B,cACZ13B,WAAY23B,cACZR,gBACAC,gBACA1B,4BACAzuB,wBACA2gC,sBACAhC,2BACDpmC,MAb0C89B,eAejBjK,eAAgBh5G,MAAOzY,EAAGoJ,MAAO1J,IACvDgyH,4BAAelqB,oBAAWmqB,kCADxBh4E,MAfqC+hF,eAerC/hF,MAAOi4E,SAf8B8J,eAe9B9J,SAGf1yF,MAAM4kB,KAAOnK,MACb/1B,KAAKouG,cACLpuG,KAAKquG,cAAgBL,SACrBhuG,KAAK4uG,kBAEL,IAAM13F,OAAS5L,WAAW4L,OAE1B,IAAKrgB,MAAMqgB,OAAOwI,KAAO7oB,MAAMqgB,OAAOnwB,SAAgB8J,IAAVzU,EAAEmrF,IAAmB,CAC7D,IAAIptB,MAAQ,MACZA,OACIxF,MAAOrpC,WAAWqpC,MAClBz9B,cACAoE,YACAiuC,MAAOntE,EAAEmtE,MACTge,IAAKnrF,EAAEmrF,IACPvgE,OAAQ5qB,EAAEmtE,MACVyuD,MAAO57H,EAAEmrF,IACTvnE,YAEEyiB,UAAY2sF,uBAAuBhzH,EAAGN,EAAGwS,KAAM2vB,SACrD84C,OAAOttE,KAAK0wD,OAEZl8B,QAAQg6F,WAAW77H,EAAEiB,KAAM88D,QAKnC,OADA4c,OAAS44C,eAAe1xF,QAAS84C,QClFtB2sD,CAAoBngI,KAAM+K,KAAM8zH,kDAQnC9nG,WAAW,IAAApiB,OAAA3U,KACT4M,OAAS5M,KAAK4M,SACd4kD,WAAa5kD,OAAO4kD,WACpB4uE,kBAAoBpgI,KAAKqvH,gBAEzBvpH,KADkB9F,KAAKmvH,iBACAlnH,IAAI,SAAApP,GAAC,OAAIA,EAAEiB,MAClCsjB,aAAepd,KAAK+K,OAAOsS,kBAC3Bo5E,KAAOz2F,KAAKy2F,OACZ38D,OAAS28D,KAAKjzF,GAAKizF,KAAKjzF,EAAEujC,QAAQxlC,QAAQ,GAC1Cs4B,MAAQ48D,KAAKt6D,GAAKs6D,KAAKt6D,EAAE4K,QAAQxlC,QAAQ,GACzCm5F,aAAe9tF,OAAO8tF,aACtBoI,mBAAqB14B,sBAAsBswB,aAAc16F,KAAK82B,KAAMlqB,OAAO+tF,aAC3Ez7D,UAAYtyB,OAAOsyB,UACnB01F,mBAAqB9tC,6BAAc/vD,WACnChP,WAAa9uB,OAAOskB,OAAOH,cAAcpK,OAAO,SAAAvY,GAAC,OAAIA,EAAE+iB,IAAIniB,OAAS8D,yBAAUE,YAC/E4I,IAAI,SAAAxN,GAAC,OAAIA,EAAEwH,QA+BhB,OA9BA2yH,mBAAmB34C,QAAQ6mB,mBAAmB//F,KAAK,MAAM,GACzD6xH,mBAAmB34C,QAAQ/8C,WAAW,GrHmE1B,SAAdmhG,YAAetpG,UAAWmnE,YAAapnE,IACzC,IAAMwpG,gBAAkBt5C,YAAYlpE,WAAOiZ,WAAY,YAAa,GAAjC,IAAA1b,OAAyCyb,KACvDkwD,YAAYs5C,gBAAiB,QAAS,IAC9CjvE,KAAK,IAAK6sC,YAAY/hE,GAClBk1B,KAAK,IAAK6sC,YAAY/hE,GACtBk1B,KAAK,QAAS6sC,YAAYrkE,OAC1Bw3B,KAAK,SAAU6sC,YAAYpkE,QAC5CwmG,gBAAgBjvE,KAAK,YAArB,QAAAh2C,OAA0Cyb,GAA1C,MqHzEIupG,CAAYtpG,WACRoF,EAAG,EACH34B,EAAG,EACHq2B,YACAC,eAJO,MAAAze,OAKFrb,KAAK82B,OAEd92B,KAAK2wH,QAAU3wH,KAAKu9H,mBAAmB6C,kBAAmBt6H,MAE1DmiF,+BACIl9E,KAAM/K,KAAK2wH,QACX55F,oBACAy+C,SAAU,IACVtiD,OAAQ,IACRqS,KAAM,SAAAA,KAACiuC,OAAQv1B,MAAO1lD,GAClB,IAAMo8H,gBAAkB,GAAAt5G,OAAGynF,mBAAmB,GAAtB,KAAAznF,OAA4BvV,KAAKvN,IAAMA,GAAIkJ,cACnEw8C,MAAMlmB,MAAM,UAAW,SACvBumG,oBACIpkC,MAAOvlF,OACPoiB,UAAWknB,MAAMnvB,OACjB0kD,cACAt0C,UAAWy1F,gBACXnjE,sBACAz5B,SACAovD,MAAO,SAAAA,MAAAtuF,GAAC,OAAIkvB,WAAW9f,IAAI,SAAAnO,KAAG,OAAIjB,EAAEmtE,MAAMlsE,OAAMiJ,KAAK,WAI1D/C,mEAWSqpH,eAAgBvjH,MAAM,IAAAsR,OAAApX,KAAA49H,qBAAA2C,kBACMhU,2BAAmBvsH,KAAM8F,MAD/B,GAC/B06H,gBAD+B5C,qBAAA,GACd6C,iBADc7C,qBAAA,GAEhC8C,gBAAkBF,gBAAgBzT,iBAClC4T,iBAAmBF,iBAAiB1T,iBAW1C,OAVA/sH,KAAKigI,WACD9jG,EAAGqkG,gBAAgB1T,WAAa,EAChCtpH,EAAGi9H,iBAAiB3T,WAAa,GAErC9sH,KAAKggI,cACD7jG,EAAGqkG,gBAAgB5/F,SAAW,EAC9Bp9B,EAAGi9H,iBAAiB7/F,SAAW,GAGnC5gC,KAAKqyH,aACEhJ,eAAephH,IAAI,SAAC8C,KAAMxS,GAAP,OAAa6e,OAAK89G,gBAAgBnqH,MAEpD61H,SAAUJ,gBAAgB3T,KAC1BgU,eAAgBH,gBAAgBnoI,IAAM,EACtCuoI,UAAWL,iBAAiB5T,KAC5BkU,gBAAiBJ,iBAAiBpoI,IAAM,8DAKhD,OAAOyH,KAAKggI,iFAIZhgI,KAAKkyH,eAAiBvE,kCAA0B3tH,8DASnCm8B,EAAG34B,GAChB,IAAKxD,KAAK+K,OACN,OAAO,KAEX,IACIvR,MACAg6E,OACAwtD,gBACAzX,iBACAr/C,WACA5oD,YACA2/G,WAAa,KACXhkH,UAAYjd,KAAK+K,OACjBiS,QAAUC,UAAUE,UACpBC,aAAeH,UAAUI,kBACzBo5E,KAAOz2F,KAAKy2F,OACZ1rF,KAAOiS,QAAQjS,KACfqnH,SAAWpyH,KAAKqyH,UAjBHE,sBAuBXvyH,KAAK0sH,oBAJL71B,OAnBW07B,sBAmBX17B,OACAE,OApBWw7B,sBAoBXx7B,OACA43B,cArBW4D,sBAqBX5D,cACAC,cAtBW2D,sBAsBX3D,cAGJD,gBAAkB1vH,8BAAeC,YAEjC1F,MADOi9F,KAAKjzF,EACCukC,OAAOvkC,GACpB+lH,iBAAmBnsG,aAAa25E,QAAQ90F,MACxC++H,gBAAkBpS,gBAGlBp1H,MADOi9F,KAAKt6D,EACC4L,OAAO5L,GACpBotF,iBAAmBnsG,aAAay5E,QAAQ50F,MACxC++H,gBAAkBrS,eAGlBqS,kBAAoBpiI,gCAAiBC,cACrC20E,OAAS4+C,SAAS54H,QAGlBwnI,kBAAoBpiI,gCAAiBE,WACrCorE,WAAag3D,sBAAI,IAAI3qH,IAAIxL,KAAK9C,IAAI,SAAApP,GAAC,OAAIA,EAAE0wH,sBAEzC/1C,OAAS4+C,SADT54H,MAAQywE,gBAAgBC,WAAY1wE,SAGxC,IAAMiP,IAAM+qE,QAAUA,OAAO9xE,OAC7B8xE,QAAUA,OAAOjjE,KAAK,SAACoiE,GAAIwuD,IAAL,OAAYxuD,GAAGh/C,OAAOnwB,EAAI29H,GAAGxtG,OAAOnwB,IAC1D,IAAK,IAAIjL,EAAI,EAAGA,EAAIkQ,IAAKlQ,IAAK,CAC1B,IAAMq+D,MAAQ4c,OAAOj7E,GACfo7B,OAASijC,MAAMjjC,OACrB,GAAIwI,GAAKxI,OAAOwI,GAAKA,GAAMxI,OAAOkG,MAAQlG,OAAOwI,GAAM34B,GAAKmwB,OAAOnwB,GAAKA,GAAMmwB,OAAOmG,OAASnG,OAAOnwB,EAAI,CACrGy9H,WAAarqE,MACb,MAEJqqE,WAAa,KAGjB,IAAM1jH,OAAS0jH,YAAcA,WAAWj7D,MAIxC,OAHIzoD,SACA+D,YAActhB,KAAKw1H,uBAAuBj4G,OAAQ0jH,WAAWj9C,MAE1Di9C,YACHl5G,YAAak5G,WAAWttG,QACxBmD,GAAIxV,YACJm0G,QAASz1H,KAAK82B,MACdmqG,6DAIJ,OAAOjhI,KAAKigI,4DAxOZ,MAAO,4DAQP,OAAOrgH,qFAYWmsD,KAAM4nD,UACxB,IAAM/mH,OAASyjH,qBAAUH,cAAcnkD,KAAM4nD,UAEvCrF,WADW1hH,OAAOg9F,SACIp3D,MAAMlnC,MAC5B0uC,UAAYptC,OAAOotC,UAKzB,OAHIs0E,aACAt0E,UAAUpyB,QAAU0mG,YAEjB1hH,uBC/FFgT,mCACT86E,aAAc,aACdx7D,UAAW,GACXy7D,Y/DLuB,O+DMvBjC,aACIgQ,YACIrtG,KAAM,SACNuvH,WAAY,EAAG,GAAI,GAAI,KAE3BriB,OACIltG,KAAM,SACNuvH,WAAY,EAAG,EAAG,GAAI,KAE1BniB,QACIptG,KAAM,SACNuvH,WAAY,EAAG,EAAG,GAAI,MAG9BsC,aAAc,GACdlzE,WACI3+C,KAAM,YAEVm2D,YACI2/B,OAAQ,QACRvN,SAAU,KAEdgmB,UACIp3D,SACArW,KACA34B,KACAq8C,MACA+S,MACAw5C,eACI5yG,MAAO,IAEX8iI,aACI9iI,MAAO,KAGfo9H,QACIluB,WACIxpE,UAAS,GAAA7jB,O/D3CM,O+D2CN,0BAEbw7G,SACI33F,UAAS,GAAA7jB,O/D9CM,O+D8CN,wBAEby7G,UACI53F,UAAS,GAAA7jB,O/DjDM,O+DiDN,2BC1CqB+lH,cAAA,SAAC1gH,QAAW,IAC1C8yD,OAAwC9yD,OAAxC8yD,OAAQz8C,UAAgCrW,OAAhCqW,UAAWowD,MAAqBzmE,OAArBymE,MAAOjoD,UAAcxe,OAAdwe,UAC5BnN,MAAQ+0D,6BAAc/vD,WACtB4N,MAAQ5S,MAAMg/B,UAAU,QAAQhmD,KAAKyoE,OAAQ2T,OAC7Ck6C,WAAa18F,MAAMysB,QAAQl+B,OAAO,QAUxC,OARAnB,MAAMs/B,KAAK,QAASnyB,WAAa,IACjCmiG,WAAW97F,KAAK,SAAU1sC,GACtB,IAAMi4D,UAAYg2B,6BAAc9mF,MAC1BoxD,MAAQv4D,EAAEu4D,UAChBn4D,OAAOub,QAAQ48C,OAAOtoD,QAAQ,SAAAuoD,MAAI,OAAM/9C,MAAM+9C,KAAK,KAAOP,UAAUO,KAAKA,KAAK,GAAIA,KAAK,QAG3F1sB,MAAMusB,OAAO1rB,SACNb,MAAM96B,MAAMw3H,YACF97F,KAAK,SAAU1sC,GACZ,IAAMi4D,UAAYg2B,6BAAc9mF,MAC1B2zB,OAAS96B,EAAE86B,OACXw4F,YAActzH,EAAEk/B,UAChB8nB,QAAmBvyC,IAAdqmB,OAAOksB,GAAmBlsB,OAAOksB,GAAKlsB,OAAOwI,EAClDy2B,QAAmBtlD,IAAdqmB,OAAOi/B,GAAmBj/B,OAAOi/B,GAAKj/B,OAAOnwB,EAClDkf,KAAI,KAAArH,OAAQsY,OAAOwI,EAAf,KAAA9gB,OAAoBsY,OAAOnwB,EAA3B,OAAA6X,OAAkCwkC,GAAlC,KAAAxkC,OAAwCu3C,IAClD/5D,EAAEqmC,WAAa4xB,UAAUmrB,QAAQpjF,EAAEqmC,WAAW,GAC9C4xB,UAAUO,KAAK,IAAK3uC,MACpBzpB,OAAOub,QAAQ23G,aAAarjH,QAAQ,SAAAu5B,UAAQ,OAAIyuB,UAAU/4B,MAAMsK,SAAS,GAAIA,SAAS,4rCCbzFi/F,6qBAAkB7E,yRA0C/B,MAAO,+DAUM1xH,KAAM6+F,SAAUnT,MAyB7B,IAzBgD,IAAb7pF,OAAaxH,UAAA1D,OAAA,QAAA4L,IAAAlI,UAAA,GAAAA,UAAA,MAC5CouE,UAD4C2iD,eAKxC3K,sBAAc/0B,MAFdC,MAHwCy/B,eAGxCz/B,MACAC,MAJwCw/B,eAIxCx/B,MAEFv5E,aAAepd,KAAK+K,OAAOsS,kBANek1G,sBAcxCvyH,KAAK0sH,oBANL71B,OARwC07B,sBAQxC17B,OACAE,OATwCw7B,sBASxCx7B,OACAq3B,QAVwCmE,sBAUxCnE,QACAC,QAXwCkE,sBAWxClE,QACAr3B,WAZwCu7B,sBAYxCv7B,WACAC,WAbwCs7B,sBAaxCt7B,WAEFk9B,OAASn9B,aAAe73F,yBAAUE,UAClC+0H,OAASn9B,aAAe93F,yBAAUE,UAClCvF,IAAMq6H,OAASnoB,SAASpuD,EAAKw2E,OAASpoB,SAAS/nG,EAAI,KACnDsmH,cAAgB3gB,SAASp3D,MACzB87E,WAAa/D,eAAiBA,cAAcj/G,MAC5Ck/G,gBAAkBptG,aAAakxG,aAAelxG,aAAakxG,YAAYrsH,MACvEi8F,YAAcl+F,KAAKk+F,cACnBmC,UAAY5J,KAAKjkD,MAtByB0qF,eAuBbtwH,OAAOq0C,OAA/Bk8E,QAvBqCD,eAuBxC/gG,EAAeihG,QAvByBF,eAuB5B15H,EAvB4B+9H,aAwBjB30H,OAAOigH,KAA3B2U,MAxBqCD,aAwBxCplG,EAAaslG,MAxB2BF,aAwB9B/9H,EACTjL,EAAI,EAAGkQ,IAAMsC,KAAKrJ,OAAQnJ,EAAIkQ,IAAKlQ,IAAK,CAC7C,IAAI87H,SAAG,EACHqN,UAAI,EACJrL,UAAI,EACJ/B,SAAG,EACDz7H,EAAIkS,KAAKxS,GACTwiB,IAAMliB,EAAEmtE,MACV6wB,SAEA6qC,MADArN,IAAM39B,MAAM2F,cAAcxjG,EAAEsjC,GAAKghG,SACpBqE,OAGbzqC,SAEAs/B,KAAe,QADf/B,IAAM39B,MAAM0F,cAAcxjG,EAAE2K,GAAK45H,SACX9I,IAAMmN,MAAQ,MAGnC5qC,SACDw9B,IAAM,EACNqN,KAAOxjC,YAAYrkE,MACdvmB,MAAMghH,OAEP+B,KADA/B,KAAOmN,MAAQ,IAKlB1qC,SACDu9B,IAAM,EACN+B,KAAOn4B,YAAYpkE,OACnB4nG,KAAOrN,KAAOmN,MAAQ,GAGtBpT,UACAsT,KAAOhrC,MAAM2F,cAAcxjG,EAAEgnD,IAAM2hF,MACnClN,KAAOmN,MAAQ,EACfpL,MAAQoL,MAAQ,GAGhBpT,UACAgI,KAAO1/B,MAAM0F,cAAcxjG,EAAE+5D,IAAM6uE,MACnCpN,KAAOmN,MAAQ,EACfE,MAAQF,MAAQ,GAEpB,IAAMzpG,SACAtb,QA5CuC83G,eA6CjBjK,eAAgBh5G,MAAOzY,EAAGoJ,MAAO1J,IACvDgyH,4BAAelqB,oBAAWmqB,kCADxBh4E,MA7CqC+hF,eA6CrC/hF,MAAOi4E,SA7C8B8J,eA6C9B9J,SAOf,GAJA1yF,MAAMy8F,OAAShiF,MACf/1B,KAAKouG,cACLpuG,KAAKquG,cAAgBL,SACrBhuG,KAAK4uG,mBACA/3G,MAAM+gH,OAAS/gH,MAAMghH,KAAM,CAC5B,IAAM19D,OACFxF,SACAz9B,QACIwI,EAAGk4F,IACH7wH,EAAG8wH,IACHz0E,GAAI6hF,KACJ9uE,GAAIyjE,MAERt+F,YACAiuC,MAAOjrD,IACPipE,IAAKnrF,EAAEmrF,IACPvgE,OAAQ1I,IACR05G,MAAO57H,EAAEmrF,IACTvnE,WAEJm6C,MAAM13B,UAAY2sF,uBAAuBhzH,EAAGN,EAAGwS,KAAM/K,MACrDwzE,OAAOttE,KAAK0wD,OACZ52D,KAAK00H,WAAW77H,EAAEiB,KAAM88D,QAIhC,OADA4c,OAAS44C,eAAepsH,KAAMwzE,0EAIZ2pD,QAASC,QAASe,UAAWC,YAC/C,OACIn9E,QACI9kB,EAAIghG,SAAW,EACf35H,EAAI45H,SAAW,GAEnBvQ,MACI1wF,EAAGgiG,UACH36H,EAAG46H,qEAxJX,OAAOx+G,kFAWP,MAAO,+CAWP,OAAO+hH,+BClDFC,uBAAa,OACbC,sBAAY,MACZC,uBAAa,OACbC,uBAAa,OACbC,wBAAc,QACdC,sBAAY,MACZC,uBAAa,OACbC,yBAAe,SACfC,uBAAa,6fCN1B,oBAqBMC,iBAAmB,SAAnBA,iBAAoBz4B,UAEtB,IAAK,IAAM9vG,OAAO8vG,SACe,iBAAlBA,SAAS9vG,OAChB8vG,SAAS9vG,MACLwR,MAAOs+F,SAAS9vG,QC1BjBwoI,kBDyCO,WAClB,IAAMC,mBACAC,YACFC,iBAAkB,SAAAA,iBAACC,KACfF,WAAWG,eAAiBD,KAEhCE,kBAAmB,SAAAA,kBAACp5B,KAAMD,UACtB,IAAIs5B,eACEC,KAAOP,gBAAgB/4B,MACvBymB,QAAU1iD,kBAAmBg8B,UAGnC,GAAIu5B,KACAD,eAAiBC,KAAK76H,IAAI,SAAC86H,cACvB,IAAMC,QAGN,OA1DS,SAAvBC,qBAAwBz1D,KAAMllC,WAAYihE,SAAU25B,WACtD,IAAK,IAAMppI,OAAOwuC,WACd,GAAIrvC,OAAOqB,eAAe5B,KAAK4vC,WAAYxuC,KAAM,CAC7C,IAAIqpI,UAAI,EACJ1wC,eAAS,EACPj1E,IAAM8qB,WAAWxuC,KACnB0zB,eAAehQ,MACfgwD,KAAK1zE,QACLmpI,qBAAqBz1D,KAAK1zE,KAAM0jB,IAAK+rF,SAAU25B,YACzB,iBAAR1lH,MAAqB2lH,KAAO3lH,IAAIlR,MAAM,OAAS62H,KAAK,KAAOD,eAEvD51H,KADlBmlF,UAAYpnB,WAAU9jE,WAAV,GAAWgiG,UAAXluF,OAAA+nH,gCAAwBD,KAAKroH,MAAM,EAAGqoH,KAAKzhI,cAEnD8rE,KAAK1zE,KAAO24F,WAGhBjlB,KAAK1zE,KAAO0jB,KAyCRylH,CAAqBD,KAAMD,aAAc9S,QAASzmB,MAClD64B,iBAAiBW,KAAKp5B,UACfo5B,WAER,CACH,IAAMp5B,SAAWqmB,QAAQrmB,SAEzBy4B,iBAAiBz4B,UACjBi5B,eAAiB5S,QAGrB,OAAO4S,gBAEXQ,iBAAkB,SAAAA,iBAAC95B,UAAwB,QAAA1iC,KAAAzhE,UAAA1D,OAAXgf,OAAW,IAAA7X,MAAAg+D,KAAA,EAAAA,KAAA,KAAAC,KAAA,EAAAA,KAAAD,KAAAC,OAAXpmD,OAAWomD,KAAA,GAAA1hE,UAAA0hE,MACvC,IAAMwiC,cAAgBk5B,WAAWG,eAE3B54B,WADNR,SAAaA,oBAAoB1gG,MAAsB0gG,UAAZA,WAChBthG,IAAI,SAAC6hG,UAC5B,IAAMw5B,iBAAmBh6B,cAAcQ,SAASN,MAChD,OAAO85B,iBAAiBzpI,OAAjB0N,MAAA+7H,iBAA2B5iH,UAEtC,OAA4B,IAArBqpF,UAAUroG,OAAeqoG,UAAU,GAAKA,WAEnDw5B,cAAe,SAAAA,cAAA/5B,MAAI,OAAIg5B,WAAWG,eAAen5B,OASjDg6B,cAAe,SAAAA,cAACN,UAAW75B,WACvBk5B,gBAAgBW,WAAa75B,WAEjCo6B,oBAAqB,SAAAA,oBAACl6B,UAClB,IAAM0mB,QAAU1iD,kBAAmBg8B,UAEnC,OADA84B,iBAAiBpS,QAAQrmB,UAClBqmB,UAGf,OAAOuS,WAvDW,+KEjCf,0BAAMkB,gBAAcC,wBAAAC,mBACtBC,uBAAyB7N,gBADH2N,wBAAAC,gBAEtBC,sBAAwB9M,cAFF4M,wBAAAC,gBAGtBC,uBAAyB9P,gBAHH4P,wBAAAC,gBAItBC,uBAAyB9I,gBAJH4I,wBAAAC,gBAKtBC,wBAA0BpH,kBALJkH,wBAAAC,gBAMtBC,uBAAyBvC,gBANHqC,wBAAAC,gBAOtBC,sBAAwBjE,cAPF+D,wBAAAC,gBAQtBC,uBAAyBxT,sBARHuT,qDCHdhmF,EAAI,IAIJ35C,EAAI,IA0EJ6/H,KAAO,OAKPC,QAAU,UAKVC,IAAM,MAKNC,IAAM,MAUNn4B,sBAAQ,QAKRC,sBAAQ,QAKRF,qBAAO,OA6BPY,eAAO,OAIPC,gBAAQ,QAiBRw3B,KAAO,OAIPC,OAAS,QAITC,OAAS,QAITC,YAAc,YAQdC,WAAa,WA4Bb14B,iBAAS,SAITD,gBAAQ,QAoCR44B,QAAU,UAIVC,UAAY,6LChPzB,IAAAC,eAAAC,6BAAAC,yBDQsB,aCRtBD,6BAAAC,sBAEKb,SAFLY,6BAAAC,sBAGKZ,YAHLW,6BAAAC,sBAIK74B,0BAJL44B,6BAAAC,sBAKK54B,0BALL24B,6BAAAC,sBAMK94B,yBANL64B,6BAAAC,sBDuGsB,aCvGtBD,6BAAAC,sBD4GsB,aC5GtBD,6BAAAC,sBDiHyB,gBCjHzBA,2TC+BeC,6fArCP,MAAM,IAAI31H,MAAMo+D,UAAUC,wDAY1B,MAAM,IAAIr+D,MAAMo+D,UAAUC,8DAU1B,MAAM,IAAIr+D,MAAMo+D,UAAUC,kEAW1B,MAAM,IAAIr+D,MAAMo+D,UAAUC,mUCzCbu3D,yeAQb,MAAM,IAAI51H,MAAMo+D,UAAUC,4DAS1B,MAAM,IAAIr+D,MAAMo+D,UAAUC,qxCCyEnBw3D,kCA/EX,SAAAA,eAAuB,IAAA9/B,iBAAAvwF,kKAAAswH,CAAA/kI,KAAA8kI,cAAA,QAAAj+D,KAAAzhE,UAAA1D,OAAPsjI,MAAO,IAAAn8H,MAAAg+D,MAAAC,KAAA,EAAAA,KAAAD,KAAAC,OAAPk+D,MAAOl+D,MAAA1hE,UAAA0hE,MAAA,OACnBryD,MAAAwwH,wCAAAjlI,MAAAglG,iBAAAkgC,6BAAAJ,eAAApsI,KAAA6O,MAAAy9F,kBAAAhlG,MAAAqb,OAAS2pH,UACJG,KAAKH,OAFSvwH,0YAPAowH,gTAanB,OAAIz/H,UAAO1D,QACP1B,KAAKolI,MAALhgI,UAAA1D,QAAA,OAAA4L,EAAAlI,UAAA,GACOpF,MAEJA,KAAKolI,0CAGH,QAAAp+D,MAAA5hE,UAAA1D,OAAJgR,GAAI,IAAA7J,MAAAm+D,OAAAC,MAAA,EAAAA,MAAAD,MAAAC,QAAJv0D,GAAIu0D,OAAA7hE,UAAA6hE,OACT,OAAIv0D,GAAGhR,QACH1B,KAAKmlI,OAAOr8H,QAAQ,SAAAjQ,GAAC,OAAIA,EAAEkS,KAAK2H,GAAG,MAC5B1S,MAEJA,KAAKgmE,sDAWZ,OADahmE,KAAKmlI,OACNl9H,IAAI,SAAAo9H,QAAM,OAAIA,OAAOvuC,aAAa,yCAS9C,OAAO92F,KAAKmlI,OAAO,GAAG9pI,mDAItB,OAAO2E,KAAKmlI,OAAOl9H,IAAI,SAAApP,GAAC,OAAIA,EAAEyJ,aAAYS,KAAK,yDAS/C,OAAO/C,KAAKmlI,OAAO,GAAGxtH,qDAGlB4F,QACJ,OAAOvd,KAAKmlI,OAAO,GAAGplI,OAAOwd,kDAU7B,OAAOvd,KAAKmlI,OAAO,GAAGpvH,0DAUtB,OAAO/V,KAAKmlI,OAAO,GAAGG,wvCCpFTC,8CAOjB,SAAAA,eAAallI,MAAM,IAAAoU,MAAA,+JAAA+wH,CAAAxlI,KAAAulI,iBACf9wH,MAAAgxH,qCAAAzlI,KAAA0lI,0BAAAH,gBAAA7sI,KAAAsH,QACK2lI,OAAOtlI,MAFGoU,sYAPqBowH,6SAmBpC,OAAIz/H,UAAK1D,QACL1B,KAAK4lI,QAALxgI,UAAA1D,QAAA,OAAA4L,EAAAlI,UAAA,GACOpF,MAEJA,KAAK4lI,4CAIZ,OAAIxgI,UAAG1D,QACH1B,KAAKgmE,MAAL5gE,UAAA1D,QAAA,OAAA4L,EAAAlI,UAAA,GACOpF,MAEJA,KAAKgmE,kDAIZ,OAAOhmE,KAAK2lI,6DAUZ,MAAoB,YAAhB3lI,KAAK3E,OACa2E,KAAK+K,OAAO6D,gBAAgBrD,aAAavL,KAAK2lI,UAC/ChuH,eACZ,SAAAzW,KAAG,OAAIA,2CAGZqc,QACJ,GAAIA,QAA6B,aAAnBvd,KAAK+V,UAA0B,CACzC,IAAM3T,UAAYpC,KAAK+K,OAAO6D,gBAAgBjD,eAAe3L,KAAK2lI,UAAUj6H,SAAS3L,OAC/E8lI,SAAW,IAAI/lI,iCAAkBsC,WACvCmb,OAASA,OAAOtV,IAAI,SAAAxN,GAAC,OAAIorI,SAASt9H,cAAc9N,KAEpD,OAAO8iB,uDAUP,OAAQvd,KAAK2lI,8CAWb,OADiB3lI,KAAK+K,OAAOsS,kBAAkBrd,KAAK2lI,UAAUnoH,IAC9CniB,+CAWhB,IAAMgqB,SAAWrlB,KAAK+K,OAAOsS,kBAAkBrd,KAAK2lI,UAAUnoH,IAC9D,OAAO6H,SAAStP,SAAWsP,SAAShqB,qDAUpC,OADmB2E,KAAK+K,OAAO6D,gBACbxD,YAAYpL,KAAK2lI,UAAUG,qEAQzCC,SACJ,OAAO/lI,KAAK2lI,WAAaI,QAAQJ,gmCC7GzC,IAmFMK,6BAAe,SAAfA,aAAgBC,UAAWr9H,QAC7B,IAAMu8H,QAUN,OARAv8H,QAAUA,OAAOE,QAAQ,SAACwC,OAClBA,iBAAiBw5H,eACjBK,KAAKj/H,KAAKoF,OACVA,MAAMP,KAAKk7H,YAEXd,KAAKj/H,KAAK,IAAIq/H,0BAAej6H,OAAOP,KAAKk7H,cAG1Cd,MAWEe,gCAAkB,SAAlBA,gBAAmBD,UAAWr5H,QAAW,IAAA6+G,MAAA0a,+BACjBrC,KAAMC,SAAS97H,IAAI,SAACW,QACjD,IAAMw9H,iBA5CU,SAAlBC,gBAAmBz5H,OAAQvR,MAC7B,IAAMosB,aACA7e,OAASgE,OAAOvR,MAQtB,OANMuN,OAAO,aAAcC,OAGvB4e,UAAU,GAAK7e,OAAO,OACtB6e,UAAU,GAAK7e,OAAO,QAHtB6e,UAAU,GAAK7e,OAKZ6e,UAkCsB4+G,CAAgBz5H,OAAQhE,QAC3C09H,WAAaN,6BAAaC,UAAWG,iBAAiB,KAK5D,OAHIA,iBAAiB,KACjBE,UAAU,GAAKN,6BAAaC,UAAWG,iBAAiB,KA/GhD,SAAdG,YAAeC,WAAYnrI,MAC7B,IAAMmtB,qBACAC,mBACAg+G,oBACAC,uBAENF,WAAW19H,QAAQ,SAAC69H,UAAW1kI,OAC3B0kI,UAAU79H,QAAQ,SAACwC,ONsCF,cMrCTA,MAAMjQ,QACNmtB,aAAavmB,OAAOiE,KAAKoF,ON+NjB,aM9NRA,MAAMyK,UAAyB0wH,YAAYxkI,OAAOiE,KAAKoF,OAASo7H,eAAezkI,OAAOiE,KAAKoF,QAE3Fmd,WAAWxmB,OAAOiE,KAAKoF,WAKnC,IAAMs7H,cAAgBn+G,WAAW,GAAG/mB,QAAU+mB,WAAW,GAAKA,WAAW,GAAG/mB,OAAS,GAGrF,IAAK8kI,WAAW,KAEZ/9G,WAAW,GAAKptB,OAAS0oI,QAAUt7G,WAAW,MAE9CA,WAAW,GAAKptB,OAAS0oI,QAAUt7G,WAAW,MAE9CD,aAAa,MAEbA,aAAa,GAAKA,aAAa,GACT,IAAlBo+G,eAAqB,CACrB,IAAMC,iBAAaxrH,OAAAyrH,kCAAOt+G,aAAa,IAApBs+G,kCAA2Bt+G,aAAa,KACvDntB,OAAS0oI,SACTv7G,aAAa,GAAKq+G,cAAcA,cAAcnlI,OAAS,IAAMmlI,cAAcA,cAAcnlI,OAAS,OAElGmlI,cAAcv/H,QAAQ,EAAG,IAEzBkhB,aAAa,MAEjBA,aAAa,GAAbs+G,kCAAsBD,eAQ9B,OAJIr+G,aAAa,GAAG9mB,QAAU8mB,aAAa,GAAG9mB,QAAUklI,cAAgB,IACpEp+G,aAAa,MAAbnN,OAAAyrH,kCAAsBt+G,aAAa,IAAnCs+G,kCAA0Ct+G,aAAa,KACvDA,aAAa,QAGb5f,OAAQ4f,aAAavgB,IAAI,SAACmnB,KAAM72B,GAAP,OAAoB,IAANA,EACnCkwB,WAAWlwB,GAAG8iB,OAAOmN,aAAajwB,IAAMiwB,aAAajwB,GAAG8iB,OAAOoN,WAAWlwB,MAC9EwvB,cAAU1M,OAAAyrH,kCAAMt+G,aAAa,IAAnBs+G,kCAA0Bt+G,aAAa,KACjDP,YAAQ5M,OAAAyrH,kCAAMr+G,WAAW,IAAjBq+G,kCAAwBr+G,WAAW,KAC3Cs+G,YAAQ1rH,OAAAyrH,kCAAML,YAAY,IAAlBK,kCAAyBL,YAAY,KAC7CO,eAAW3rH,OAAAyrH,kCAAMJ,eAAe,IAArBI,kCAA4BJ,eAAe,MA6D/CH,CAAYD,UAAW19H,UARgB,GAC3Cq+H,SAD2Cxb,MAAA,GACjCyb,YADiCzb,MAAA,GAWtCjxG,KAKRysH,SALAr+H,OACYu+H,cAIZF,SAJAl/G,WACUq/G,YAGVH,SAHAh/G,SACUo/G,kBAEVJ,SAFAF,SACaO,qBACbL,SADAD,YAGQztH,QAKR2tH,YALAt+H,OACY2+H,iBAIZL,YAJAn/G,WACUy/G,eAGVN,YAHAj/G,SAIJ,OACIzN,UACA2sH,4BACAC,wBACAC,oCACAC,0CACA/tH,gBACAkuH,qBARAP,YAFAH,SAWAW,wBATAR,YADAF,YAWAO,kCACAC,q4BC1IaG,uiBAQb,MAAM,IAAI14H,MAAMo+D,UAAUC,0EAS1B,MAAM,IAAIr+D,MAAMo+D,UAAUC,wEAS1B,MAAM,IAAIr+D,MAAMo+D,UAAUC,8DAI1B,OAAIloE,UAAK1D,QACL1B,KAAK4nI,WAAar6D,eAAevtE,KAAK4nI,eAANxiI,UAAA1D,QAAA,OAAA4L,EAAAlI,UAAA,IACzBpF,MAEJA,KAAK4nI,iEAWA3B,UAAWr5H,QAEvB,OADA5M,KAAKysH,UAAUyZ,gCAAgBD,UAAWr5H,SACnC5M,KAAKysH,wDAWZ,OAAIrnH,UAAO1D,QACP1B,KAAK6nI,UAALziI,UAAA1D,QAAA,OAAA4L,EAAAlI,UAAA,GACOpF,MAEJA,KAAK6nI,0DAWZ,OAAIziI,UAAO1D,QACP1B,KAAK8nI,YAAL1iI,UAAA1D,QAAA,OAAA4L,EAAAlI,UAAA,GACOpF,MAEJA,KAAK+nI,2EAU0B,IAAvBC,SAAuB5iI,UAAA1D,OAAA,QAAA4L,IAAAlI,UAAA,GAAAA,UAAA,MAARwD,OAAQxD,UAAA1D,OAAA,EAAA0D,UAAA,QAAAkI,EAAA26H,oBAAAC,6BACTC,8BAAkBlE,IAAKr7H,OAAO4R,KAAMwtH,UAD3B,GAC/BI,UAD+BH,oBAAA,GACpBI,QADoBJ,oBAAA,GAAAK,oBAAAJ,6BAETC,8BPKf,SOLyCv/H,OAAO2Q,QAASyuH,UAFjC,GAE/BO,UAF+BD,oBAAA,GAEpBE,QAFoBF,oBAAA,GAYtC,OARAtoI,KAAKgoI,UACDjtH,IAAKstH,QACLjtH,OAAQotH,UAEZxoI,KAAKyoI,YACD1tH,IAAKqtH,UACLhtH,OAAQmtH,YAELvoI,0BC5GF0oI,WACTpyF,OAAQqiE,6BACR1xE,KAAMwyE,mBACNstB,SAAU/sB,mBACVthF,KAAMgvF,mBACNl1E,MAAOszE,qBACPvlB,MAAO0nB,sBCHE0gB,sCACT7rC,UAAW6R,2BAAU3B,KACrBg6B,YAAar4B,2BAAU3B,KACvB+5B,SAAUp4B,2BAAU1B,KACpBjM,QAAS2N,2BAAU5B,OACnBnxD,WAAY+yD,2BAAU5B,kgBCK1B,IA+Fa67B,mCAAsB,SAAtBA,oBAAuBzJ,SAAU1S,UAAWoc,aAAclK,UACnE,IAAImK,QACIC,UAA2BpK,SAA3BoK,UAAWrvC,YAAgBilC,SAAhBjlC,YACbsvC,eACEpgI,OAAkB6jH,UAAlB7jH,OAAQ3G,MAAUwqH,UAAVxqH,MAEVgG,IADgB4gI,aAAdI,UACa,GAAA5tH,OAAI8jH,SAAJ,YAEf+J,cAAgBC,WAAWhK,SAAUl9H,OAwB3C,OAvBA2G,OAAOE,QAAQ,SAACwC,MAAOs8F,WACnBkhC,QAAUK,WAAWhK,SAAUl9H,MAAO2lG,UAAW+gC,qCAAiBr9H,MAAMyK,YACxE,IAEIm6C,KAFEk5E,WA1GQ,SAAhBC,cAAiBC,SAAUh+H,MAAOu9H,cACpC,IAAIU,gBACItnI,MAA+BqnI,SAA/BrnI,MAAO2lG,UAAwB0hC,SAAxB1hC,UAAWu3B,SAAamK,SAAbnK,SAClBvyH,OAAqBi8H,aAArBj8H,OAAQ6zB,SAAaooG,aAAbpoG,SACV+oG,eAAiB58H,OAAO6pF,MAAQ7pF,OAAO6pF,KAAK0oC,cAU9CoK,gBV6OY,SU9OZ9oG,UAFoB0+F,WAAal7H,GADjC6oG,iCAJAL,KAIAK,iCAHAJ,QAGAI,iCAFAN,IAEAM,iCADAP,SAKkC3E,WAEhBnnE,SAEtB,IAAM2oG,YACFtyG,GAAE,GAAAzb,OAAK8jH,SAAL,KAAA9jH,OAAiBpZ,MAAjB,KAAAoZ,OAA0BusF,WAC5B9uG,KAAMwS,MAAMhJ,WACZgJ,MAAOA,MAAMhJ,WACbqV,aAAcrM,MAAMqM,eACpBisF,YAAa2lC,gBACbl6B,cAAc,EACdtS,MAAM,EACN1hG,KAAMstI,qCAAiBr9H,MAAMyK,YAKjC,OAHAyzH,eAAen5E,WAAa/kD,MAAMvL,OAAOypI,eAAen5E,YACxDm5E,eAAehzH,OAASlL,MAAMvL,OAAOypI,eAAehzH,QAE7C+2D,eAAe67D,WAAYI,gBA2EXH,EAAgBpnI,YAAO2lG,oBAAWu3B,mBAAY7zH,MAAOu9H,cAGnE5gI,IAAIuJ,IAAIs3H,WAGT54E,KAAOjoD,IAAI7O,IAAI0vI,UACVW,eAAgB,EACrBv5E,KAAKtjD,OAAOw8H,YACZA,WAAW5yH,OAAS05C,KAAK15C,OAAO4yH,WAAW5yH,QAAU05C,KAAKw5E,eAL1Dx5E,KApEa,SAAnBy5E,iBAAoBP,WAAY99H,MAAOu9H,cAAiB,IAClDj5B,aAAiBi5B,aAAjBj5B,aAGR,OADmB,IAAIg6B,EADXlB,UAAUC,qCAAiBr9H,MAAMyK,aAClBqzH,YAAcx5B,4BAiE1B+5B,CAAiBP,WAAY99H,MAAOu9H,cAO/C34E,KAAKwpC,YAAYA,aACjBsvC,YAAY9iI,KAAKgqD,MACjBjoD,IAAIwJ,IAAIq3H,QAAS54E,QAGjB84E,YAAYtnI,SACZuG,IAAIwJ,IAAIy3H,cAAeF,aACvBD,UAAUtyH,IAAIyyH,gBAGXF,aA+EEa,SAAW,SAAXA,SAAYx5H,IAAKnP,KAI1B,IAHA,IAAI3I,EAAI,EACJuxI,UAAY,GAEK,IAAdA,UAAmBvxI,EAAI8X,IAAI3O,QAC1B2O,IAAI9X,GAAG+J,aAAepB,IAAIoB,aAC1BwnI,SAAWvxI,GAEfA,IAEJ,OAAOuxI,o1EClNUC,iyBAAyBpC,qVAoB9BkB,aAAcpc,UAAW/xF,SAAS,IAAAjmB,MAAAzU,KACpCgqI,gBAEFvzC,KACAoyC,aADApyC,KAGAwzC,YAEAxd,UAFAwd,YACAhkC,QACAwmB,UADAxmB,QAGAikC,UAEAD,YAFAC,UACAC,aACAF,YADAE,aAMEvzC,aACFhuF,OAAQshI,UACRjoI,MAHAgkG,QAFCmkC,WAODxhI,OAAQuhI,aACRloI,MANAgkG,QADCokC,cASCC,MAAQ7zC,KAAKt6D,MACbouG,MAAQ9zC,KAAKjzF,MAgBnB,OAdC0mI,UAAWC,cAAcrhI,QAAQ,SAACF,OAAQrQ,GACvC,IAAM8C,KAAa,IAAN9C,EAAU0rI,IXoCb,SWnCJ/zE,KAAa,IAAN33D,EAAU0L,EAAI25C,EAEvBh1C,OAAOlH,OAAS,EAChBmnI,aAAapoG,SXiMT,OW/LJooG,aAAapoG,SAAWhsB,MAAKuzH,WAAW3sI,MAE5C2uI,aAAa95E,MAAQ04E,mCAAoB14E,KAAM0mC,WAAWr+F,GAAIswI,cAC1DE,UAAW74E,OAAStS,EAAI0sF,MAAQC,MAChC7wC,YAAah/D,QAAQ/K,SAAS+pE,kBAG/BswC,iEAGIrhI,MAAO8tF,MAClB,IAAM6zC,MAAQ7zC,KAAKt6D,EACbouG,MAAQ9zC,KAAKjzF,EACnBmF,MAAMwT,MAAMquH,OACZ,IAAK,IAAIjyI,EAAI,EAAGA,EAAI+xI,MAAM5oI,OAAQnJ,IAC9B,IAAK,IAAIsiB,EAAI,EAAGA,EAAIyvH,MAAM/xI,GAAGmJ,OAAQmZ,IACjClS,MAAMknH,OAAN,GAAAx0G,OAAgBwvF,0BAAiB17C,uBAAjC,aAAoE,GAApE9zC,OAAwE9iB,EAAxE,KAA8E+xI,MAAM/xI,GAAGsiB,GAAGrE,UAGlG,IAAK,IAAIje,GAAI,EAAGA,GAAIgyI,MAAM7oI,OAAQnJ,KAC9B,IAAK,IAAIsiB,GAAI,EAAGA,GAAI0vH,MAAMhyI,IAAGmJ,OAAQmZ,KACjClS,MAAMknH,OAAN,GAAAx0G,OAAgBwvF,0BAAiB17C,uBAAjC,cAAA9zC,OAAoE9iB,GAAI,EAAxE,KAA8EgyI,MAAMhyI,IAAGsiB,IAAGrE,UAC1F+zH,MAAMhyI,IAAGsiB,IAAG47F,aAAc,EAIlC9tG,MAAMwT,MAAMsuH,mEAGE/vG,SAUd,IATA,IAAM/xB,MAAQ+xB,QAAQ/xB,QAChB+hI,YAAc/hI,MAAMvP,IAAN,GAAAiiB,OAAawvF,0BAAiB97C,sBAA9B,YACdp/B,SAAW+K,QAAQ/K,WACnBg7G,MAAQh7G,SAASg7G,QACjBliE,SACF/jB,KACAkmF,MAPmB9iE,MAAA,SAAAA,MAUd+iE,KAAUpiI,KAEf,IADA,IAAMqiI,SAAWH,MAAME,MAXJE,OAAA,SAAAA,OAYVC,KAAUC,MACf,IACMr0C,WADOk0C,SAASE,MACEpiI,UACvBguF,WAAWz6D,EAAGy6D,WAAWpzF,GAAGsF,QAAQ,SAACoC,SAAUi0H,UAC5Cj0H,SAASpC,QAAQ,SAACwC,MAAOs8F,WACrB,IAAM9tG,IAAOqlI,SAAD,GAAA9jH,OAAwCwvH,KAAxC,KAAAxvH,OAAgDusF,WAAhD,IAAAvsF,OAAgB2vH,MAAhB3vH,OAAuBusF,WAC7Bj/B,IAAM+hE,YAAW,GAAArvH,OAAIwvH,MAAJxvH,OAAW2vH,OAC9BriE,KAAmC,IAA5B1vE,OAAO6M,KAAK6iE,KAAKjnE,SACxB+mE,QAAQ02D,UAAUrlI,KAAO0uE,0BAAcC,QAAQ02D,WAAa12D,QAAQ02D,UAAUrlI,SAC1E6uE,IAAG,GAAAttD,OAAI/P,SAAWA,MAAMyK,iBATnCi1H,KAAO,EAAGC,KAAOH,SAASppI,OAAQspI,KAAOC,KAAMD,OAAQD,OAAvDC,OAFJH,KAAO,EAAGpiI,IAAMkiI,MAAMjpI,OAAQmpI,KAAOpiI,IAAKoiI,OAAQ/iE,MAAlD+iE,MAVc,IAAAK,eA4BQv7G,SAAS8mE,OAA7B6zC,MA5BYY,eA4Bf/uG,EAAaouG,MA5BEW,eA4BL1nI,EAClBmF,MAAMwT,MAAMquH,QACXF,MAAOC,OAAOzhI,QAAQ,SAACqiI,QAAShM,UAC7BgM,QAAQriI,QAAQ,SAAC2tF,KAAMvkF,KACnB,IAAMsB,OACAE,OACF8C,UACA40H,kBACA30C,KAAK/0F,OAAS,GAAoC,WAA/B+0F,KAAK,GAAGzxE,YAAY3pB,QAAuBo7F,KAAK,GAAG7pF,SAASy+H,gBAC/E50C,KAAK3tF,QAAQ,SAAConD,KAAM33D,GAChB,IAAMuB,IAAOqlI,SAAD,GAAA9jH,OAA+BnJ,IAA/B,KAAAmJ,OAAsC9iB,GAAtC,IAAA8iB,OAAgBnJ,KAAhBmJ,OAAsB9iB,GAClCie,OAASiyD,QAAQ02D,UAAUrlI,KAC3B0Z,IAAIjb,GAAKie,OAAO,GAChB9C,IAAInb,GAAKie,OAAO,KAEpB40H,eDnFa,SAApBE,kBAAqB53H,IAAKF,KACnC,IAAM+3H,QAAU73H,IAAI,IAAMA,IAAI,GAAKF,IAAI,IACjCg4H,QAAU93H,IAAI,IAAMA,IAAI,GAAKF,IAAI,IAGnCi4H,aAAc,EA0BlB,OAvBIj4H,IAAI,GAAK,GAAKA,IAAI,GAAK,GAAKA,IAAI,GAAK,GAAKE,IAAI,GAAK,IACnD+3H,aAAc,EACdj4H,IAAI,GAAK,EACTA,IAAI,GAAK,GAITA,IAAI,GAAK,GAAKA,IAAI,GAAK,GAAKA,IAAI,GAAK,GAAKE,IAAI,GAAK,IACnD+3H,aAAc,EACd/3H,IAAI,GAAK,EACTA,IAAI,GAAK,GAIR+3H,aAAeF,UAAYC,UACxBD,QAAUC,QAEVh4H,IAAI,GAAKA,IAAI,GAAKE,IAAI,GAAKA,IAAI,GAG/BF,IAAI,GAAKA,IAAI,GAAKE,IAAI,GAAKA,IAAI,MAIlCF,IAAI,GAAIE,IAAI,KACZF,IAAI,GAAIE,IAAI,KCkDgB43H,CAAkB53H,IAAKF,MAG5CijF,KAAK3tF,QAAQ,SAAConD,KAAMjuD,OAChB,IAAMnI,IAAOqlI,SAAD,GAAA9jH,OAAmCnJ,IAAnC,KAAAmJ,OAA0CpZ,OAA1C,IAAAoZ,OAAgBnJ,KAAhBmJ,OAAsBpZ,OAClCuU,OAAS40H,eAAenpI,QAAUwmE,QAAQ02D,UAAUrlI,KACpDo2D,KAAK15C,OAAOA,QACZ,IAAMnb,KAAQ8jI,SAAiB,IAAN,IACzBx2H,MAAMknH,OAAN,GAAAx0G,OAAgBwvF,0BAAiB17C,uBAAjC,YAAA9zC,OAAkEhgB,KAAlE,KAAAggB,OAA0EnJ,KAA1EmJ,OAAgFpZ,OAASuU,cAIrG7N,MAAMwT,MAAMsuH,iFAUS7hI,OAAQvN,MAY7B,IAXA,IAAIqwI,UACAzB,eACA0B,QAAU,EACRC,iBACAC,mBACAC,cAAgBljI,OAAO,GACvBmjI,gBAAkBnjI,OAAO,GACzBojI,WAAaF,cAAcpqI,OAC3BuqI,aAAeF,gBAAgBrqI,OAC/BsmI,SAAWhoI,KAAKgoI,WAEbzvI,EAAI,EAAGA,EAAIyzI,WAAYzzI,IAAK,CACjC,IAAI2zI,SAAWJ,cAAcvzI,IACvB4zI,aAAeL,cAAcvzI,GAEnC,GX7HW,YW6HP4zI,aAAa9wI,OAAoB,CACjC,IAAM+wI,eAAiBL,gBAAgBJ,SACnCS,gBX/HG,YW+HeA,eAAe/wI,SACjCswI,UACAO,SAAWC,aAAcC,iBAE7BnC,YAAY/jI,KAAKgmI,cAEjBR,OAAOxlI,KAAKimI,cACZP,cAAc1lI,KAAKimI,cAG3B,GAAIF,aAAeN,QACf,IAAK,IAAIpzI,IAAIozI,QAASpzI,IAAI0zI,aAAc1zI,MAAK,CACzC,IAAM6zI,gBAAiBL,gBAAgBxzI,KACjC2zI,UAAWE,iBX5IV,YW6IHA,gBAAe/wI,OACf4uI,YAAY/jI,KAAKgmI,WAEjBR,OAAOxlI,KAAKkmI,iBACZP,gBAAgB3lI,KAAKkmI,kBAIjC,IAAKR,cAAclqI,QAAUmqI,gBAAgBnqI,UAAYuoI,YAAYvoI,OAEjE,GAAKsmI,SADL3sI,KAAOA,OAAS2oI,IXzGN,SWyGqB3oI,QACPoxG,gBXtDjB,QWsDyBu7B,SAAS3sI,QAAkBuwI,cAAclqI,OAUlE,CACH,IACM2qI,OAAQR,gBADQ,GAEtB5B,cAAgBoC,SAChB,IAAMC,YAAazC,SAAS+B,cAAeS,QACvCC,aAAc,IACdrC,cAAgBoC,OAAOA,SACvBT,cAActkI,OAAOglI,YAAY,IAErCT,gBAAgBvkI,OARM,EAQgB,OAnBuC,CAC7E,IAAMilI,cAAgBX,cAAclqI,OAAS,EACvC2qI,MAAQT,cAAcW,eAC5BtC,cAAgBoC,QAChB,IAAMC,WAAazC,SAASgC,gBAAiBQ,OACzCC,YAAc,IACdrC,cAAgBoC,MAAOA,QACvBR,gBAAgBvkI,OAAOglI,WAAY,IAEvCV,cAActkI,OAAOilI,cAAe,GAgB5C,OACIb,OAFJA,QADAA,UAAMrwH,OAAOuwH,cAAkBC,kBACf74H,OAAO,SAACmvF,GAAIlgG,MAAOwhF,MAAZ,OAAqBxhF,QAAUwhF,KAAKl+D,UAAU,SAAA9rB,GAAC,OAAKA,EAAE6I,aAAe6/F,GAAG7/F,eAG3F2nI,+EAYQhE,UAAWr5H,QACvB,OAAA4/H,sBAAAC,iCAAA1C,iBAAA1vI,WAAA,iBAAA2F,MAAAtH,KAAAsH,KAA4BimI,UAAWr5H,8EAUnB84F,WAAYkE,UAChC,IAAM8iC,aAAehnC,WAAWgnC,aAC1BjkE,WACN,IAAK,IAAM3uE,OAAO8vG,SACd,MAAOtvG,eAAe5B,KAAKkxG,SAAU9vG,KAAM,CACvC,IAAM6yI,YAAc/iC,SAAS9vG,KACvBwR,MAAQqhI,YAAYrhI,MAC1B,IAAKqhI,YAAYn2H,QAAUlL,MAAO,CAC9B,IAAMkL,OAASo2H,sBAAsBF,aAAcphI,OACnDm9D,QAAQn9D,OAASkL,QAI7B,OAAOiyD,0EASWokE,YAClB,IAAMC,oBAON,OALAD,WAAWnrI,QAAUmrI,WAAW/jI,QAAQ,SAACoxF,MAAO3hG,GAC5C,IAAMilB,IAAM8kH,kBAAamB,oBAAoBvpC,OAC7C18E,IAAIyI,MAAQ1tB,EACZu0I,iBAAiB5mI,KAAKsX,OAEnBsvH,uEAWKlkI,OAAQmkI,iBACpB,IAAMC,eAEF7C,aAEAvhI,OAFAuhI,aACAD,UACAthI,OADAshI,UAiDJ,OA7CAC,aAAarhI,QAAQ,SAACmkI,UAClB,IAAMC,aAAeD,SAAS3qI,WAC9B4nI,UAAUphI,QAAQ,SAACqkI,UACf,IAAIC,WACEC,aAAeF,SAAS7qI,WACxBsnG,UACFztE,GACI7wB,MAAO4hI,cAEX1pI,GACI8H,MAAO+hI,eAGTC,aAAeH,SAASp3H,UAExByzF,KD/IQ,SAAjB+jC,eAAkBC,aAAcF,cAWzC,MV6CuB,gBUrDnBE,cVqDmB,gBUrDaF,aV6DrB,MAJK,aUvDTE,cVuDS,aUvDoBF,aV+DxB,OAIC,QWuEQC,CADQN,SAASl3H,UACYu3H,cAEpCG,aACFjkC,UACAhsF,KACIgsF,UACAI,qBAIF8jC,aD5FgB,SAAzBC,uBAA0BC,UAAW1D,UAAW6C,iBAAvB,OAA2CA,gBAAgB/5H,OAAO,SAAC+4D,MAAS,IAAAp5C,KAAA+1C,MAAA7lD,MACxG8wG,SAAW5nD,gBAAgBljE,MAAQkjE,MAAQA,MAC3C8hE,aAAcl7G,SAAGtX,OAAH9T,MAAAorB,KAAAm7G,iCAAana,SAAS1rH,IAAI,SAAApP,GAAC,OAAIA,EAAE+wG,WAAU52F,OAAO,SAAAna,GAAC,YAAUyU,IAANzU,MAE3E,IAAKg1I,YAAYnsI,OACb,OAAO,EAGX,IAAMiyF,SAAUjrB,UAAGrtD,OAAH9T,MAAAmhE,MAAAolE,iCAAaD,YAAY5lI,IAAI,SAAApP,GAAC,OAAKA,EAAEsjC,GAAKtjC,EAAEsjC,EAAE7wB,MAAOzS,EAAEgnD,IAAMhnD,EAAEgnD,GAAGv0C,WACrE0H,OAAO,SAAAna,GAAC,YAAUyU,IAANzU,GAAyB,OAANA,IACtC+6F,SAAU/wE,UAAGxH,OAAH9T,MAAAsb,MAAAirH,iCAAaD,YAAY5lI,IAAI,SAAApP,GAAC,OAAKA,EAAE2K,GAAK3K,EAAE2K,EAAE8H,MAAOzS,EAAE+5D,IAAM/5D,EAAE+5D,GAAGtnD,WACrE0H,OAAO,SAAAna,GAAC,YAAUyU,IAANzU,GAAyB,OAANA,IAE5C,IAAK86F,QAAQjyF,SAAWkyF,QAAQlyF,OAC5B,OAAO,EAGX,IAAMqsI,gBAAgBp6C,QAAQjyF,QAASiyF,QAAQj2E,MAAM,SAAA7kB,GAAC,OAA8B,IAA1B+0I,UAAU3nI,QAAQpN,KACtEm1I,gBAAgBp6C,QAAQlyF,QAASkyF,QAAQl2E,MAAM,SAAA7kB,GAAC,OAA8B,IAA1BqxI,UAAUjkI,QAAQpN,KAC5E,OAAI86F,QAAQjyF,QAAUkyF,QAAQlyF,OACnBqsI,eAAiBC,cAErBD,eAAiBC,gBCsESL,CAAuBV,SAASn2C,aACjDq2C,SAASr2C,aAAci2C,qBAEvBK,QADAM,aAAahsI,OACHgsI,aAAazlI,IAAI,SAACgmI,WACxB,IAAMC,gBAAkB3gE,eAAeA,kBAAmBkgE,WAAW,GAAGjwH,KAAMywH,WACxEE,sBAAwB7L,kBAAaM,kBAAkBsL,gBAAgB1kC,KACzE0kC,iBACJ,OACI1kC,KAAM0kC,gBAAgB1kC,KACtBvjF,MAAOioH,gBAAgBjoH,MACvBzI,IAAK2wH,yBAIHV,WAGdT,YAAY9mI,KAAZqB,MAAAylI,YAAWoB,oCAAShB,cAGrBJ,kDArUP,MXwMiB,syEY3NJqB,qvBAAqB1G,qUAU1BkB,aAAcpc,WAAW,IAI3Bud,aADFnB,aADApyC,KAIAwP,QACAwmB,UADAxmB,QAGAmkC,SAEAnkC,QAFAmkC,SACAC,YACApkC,QADAokC,YAGEiE,QAAUtE,aAAat4D,QAS7B,OAPA48D,QAAQlE,UAAYkE,QAAQlE,cAC5BkE,QAAQlE,UAAUC,gBAElBL,aAAat4D,IAAM48D,QACnBtE,aAAa7tG,EAAI,KACjB6tG,aAAaxmI,EAAI,KAEVwmI,qFAUcphI,QASrB,IARA,IAAI+iI,QAAU,EACRD,UACAzB,eACA6B,cAAgBljI,OAAO,GACvBmjI,gBAAkBnjI,OAAO,GACzBojI,WAAaF,cAAcpqI,OAC3BuqI,aAAeF,gBAAgBrqI,OAE5BnJ,EAAI,EAAGA,EAAIyzI,WAAYzzI,IAAK,CACjC,IAAM4zI,aAAeL,cAAcvzI,GACnC,GZJW,YYIP4zI,aAAa9wI,OAAoB,CACjC,IAAM+wI,eAAiBL,gBAAgBJ,WACjCO,QAAUE,gBAAkBD,aAAcC,iBAAmBD,cACnElC,YAAY/jI,KAAKgmI,cAEjBR,OAAOxlI,KAAKimI,cAGpB,GAAIF,aAAeN,QACf,IAAK,IAAIpzI,GAAIozI,QAASpzI,GAAI0zI,aAAc1zI,KAAK,CACzC,IAAM6zI,gBAAiBL,gBAAgBxzI,IACjC2zI,UAAWE,iBZfV,YYgBHA,gBAAe/wI,OACf4uI,YAAY/jI,KAAKgmI,UAEjBR,OAAOxlI,KAAKkmI,iBAIxB,OACIV,cACAzB,mFAIUvvG,SACd,IAAM/xB,MAAQ+xB,QAAQ/xB,QAChB8/D,QAAU9/D,MAAMvP,IAAN,GAAAiiB,OAAawvF,0BAAiB97C,sBAA9B,YACVw/E,aACF9oE,QAASvmB,KAAWA,MAExBjmD,OAAOskB,OAAOkrD,SAAS3/D,QAAQ,SAACsuG,WAC5B,IAAK,IAAMt9G,OAAOs9G,UACdm3B,YAAYz0I,MAAQ+J,KAAK2P,IAAI4jG,UAAUt9G,KAAK,GAAIy0I,YAAYz0I,KAAK,IAC7D+J,KAAK2P,IAAI4jG,UAAUt9G,KAAK,GAAIy0I,YAAYz0I,KAAK,OAGzD6O,MAAMknH,OAAN,GAAAx0G,OAAgBwvF,0BAAiB17C,uBAAjC,kBAAyEo/E,YAAY9oE,kEAWrF,OAAOzlE,6CAcP,OAAIoF,UAAO1D,QACP1B,KAAK+qG,QAAL3lG,UAAA1D,QAAA,OAAA4L,EAAAlI,UAAA,GACOpF,MAEJA,KAAK+qG,8DAUAk7B,UAAWr5H,QACvB,IAAI4hI,sBACAC,yBACE7lI,OAAS8lI,kBAAAC,6BAAAN,aAAAh0I,WAAA,iBAAA2F,MAAAtH,KAAAsH,KAAqBimI,UAAWr5H,QAE3CqtF,OACArtF,OADAqtF,OAGAz/E,KAEA5R,OAFA4R,KACAjB,QACA3Q,OADA2Q,QAGEqwF,SADQ3P,OAAO,GACE2P,SACjBnkC,OAASmkC,UAAYA,SAASnkC,OAASmkC,SAASnkC,OAAOn6D,MAAQ,KAC/DglG,MAAQ1G,UAAYA,SAAS0G,MAAQ1G,SAAS0G,MAAMhlG,MAAQ,KAC5DsjI,iBAAmBJ,cAAeC,kBAYxC,OAVCj0H,KAAMjB,SAASzQ,QAAQ,SAAC8+D,UAAWinE,WAChCjnE,UAAU9+D,QAAQ,SAACgmI,SAAUv2I,GAAX,OAAiBu2I,SAAShmI,QAAQ,SAACwC,OAC7CA,MAAMhJ,aAAemjE,QAAUn6D,MAAMhJ,aAAeguG,OZnGjD,YYmG0DhlG,MAAMjQ,QACnEuzI,gBAAgBC,WAAWt2I,GAAG2N,KAAKoF,aAI/CmjI,iBAAmBM,gCAAI,IAAIx4H,IAAIk4H,mBAC/BD,cAAgBO,gCAAI,IAAIx4H,IAAIi4H,gBAC5BxuI,KAAKysH,WAAYjyG,KAAMg0H,cAAej1H,QAASk1H,mBACxCzuI,KAAKysH,kFAGQ/mB,WAAYkE,SAAUolC,YAAapnH,SACvD,IAAI4mG,UACAF,WACE1lH,UACAqxF,OAASj6F,KAAKi6F,SACdh9E,UAAYyoF,WAAWgnC,aACvBtvH,aAAeH,UAAUI,kBACzBorD,WACN,GAAIwxB,QAAUA,OAAO,GAAI,CACrB,IACMg1C,cADQh1C,OAAO,GACOz8E,IAAIosF,cAE/BgC,iBAAQD,gBAAOE,qBAAMC,uBAAOhjG,QAAQ,SAAComI,SAClC,IAAM5jI,MAAQ2jI,cAAcC,SAAWD,cAAcC,SAAS5jI,MAAQ,GAChEsf,aAAexN,aAAa9R,QZ5H3B,YY4HqC8R,aAAa9R,OAAOkS,IAAIniB,KAChE6zI,UAAYrjC,sBAAQjhF,eACpB4jG,UAAYljH,OAEZ4jI,UAAYpjC,wBACZwiB,WAAahjH,OAEjB8R,aAAa9R,SAAWsf,cAAgBhiB,OAAO1C,KAAKoF,SAU5D,GANIkjH,YACA/lD,QAAQ+lD,WAAavxG,UAAU2K,QAAQonH,6LAAlBG,IAChB3gB,UAAY,QACd5/G,gBAAgBxD,YAAYojH,WAAWh4G,UAG1C83G,WAAY,CACZ,IAAM57G,GAAKuK,UAAU2K,WAAVvM,OAAA0zH,gCAAsBC,aAAgBpmI,QAASgf,QAAQK,UAClEwgD,QAAQ6lD,YAAc57G,GAAG9D,gBAAgBxD,YAAYkjH,YAAY93G,SAErE,OAAOiyD,8DAUK7/D,OAAQmkI,iBACpB,IAAIC,eAEI7C,aAEAvhI,OAFAuhI,aACAD,UACAthI,OADAshI,UAsBR,SApBe7uH,OAAA0zH,gCAAO5E,cAAP4E,gCAAwB7E,YAE7BphI,QAAQ,WACd,IACI8D,QACA48F,KZAG,MYCHhsF,KACIosF,cAGJmjC,iBAAmBA,gBAAgBrrI,OAAS,IAC5CkL,OAAS2gE,eAAe3gE,OAAQmgI,gBAAgB,KAEpDC,YAAY9mI,KAAK0G,UAEM,IAAvBogI,YAAYtrI,SACZsrI,YAAcD,iBAGlB/sI,KAAKi6F,OAAO+yC,aACLA,8EAUWH,YAClB,IAAMC,oBASN,OAPAD,WAAWnrI,QAAUmrI,WAAW/jI,QAAQ,SAACoxF,OACrC,IAAM18E,IAAM8kH,kBAAaM,kBAAkB1oC,MAAMsP,KAAMtP,OACvD4yC,iBAAiB5mI,MACbsjG,KAAMtP,MAAMsP,KACZhsF,YAGDsvH,uDA3IP,MZgHa,qyCa/NAsC,2wBAAuBzH,6UAS5BkB,cAAc,IACdzrH,aAAyByrH,aAAzBzrH,aAAcxQ,OAAWi8H,aAAXj8H,OAChByiI,WAKN,OAHCvjC,sBAAOC,sBAAOF,sBAAM/iG,QAAQ,SAACq2H,UAC1BkQ,QAAO,GAAAh0H,OAAI8jH,WHkLU,SAApBmQ,kBAAqBzG,cAAkC,IAApB0G,WAAoBnqI,UAAA1D,OAAA,QAAA4L,IAAAlI,UAAA,GAAAA,UAAA,MACxD+5H,SAA2B0J,aAA3B1J,SAAU/hH,aAAiByrH,aAAjBzrH,aACZ9R,MAAQikI,WAAWjkI,MACnB4kD,QACA05E,IAAMlB,UAAUvJ,UAItB,OAFAoQ,WAAWl0I,KAAOk0I,WAAWl0I,KAAOk0I,WAAWl0I,KAAOm0I,wBAAYpyH,aAAc9R,OAAS,MACzF4kD,KAAKhqD,KAAK,IAAI0jI,IAAI2F,aACXr/E,KG1L0Bo/E,EAAoBnQ,kBAAU/hH,2BAAgBxQ,OAAOuyH,aAE3EkQ,8DAsBKI,gBAAiB1C,iBAC7B,IAAMC,eAqBN,OApBAD,gBAAgBjkI,QAAQ,SAACrO,GACrB,IAAMmS,OAASnS,GACdqxG,sBAAOC,sBAAOF,sBAAM/iG,QAAQ,SAAConD,MAC1B,GAAIu/E,gBAAgBv/E,OAASu/E,gBAAgBv/E,MAAM5kD,MAAO,CACtD,IAAMkS,IAAM5Q,OAAO4Q,IACf5Q,OAAO4Q,eAAe3U,MACtB2U,IAAI1U,QAAQ,SAACijE,MACTA,KAAK69B,SAAW79B,KAAK69B,cACpB79B,KAAK69B,SAAS15C,QAAU6b,KAAK69B,SAAS15C,UACvC6b,KAAK69B,SAAS15C,MAAM5kD,MAAQmkI,gBAAgBv/E,MAAM5kD,SAGtDkS,IAAIosF,SAAWpsF,IAAIosF,cAClBpsF,IAAIosF,SAAS15C,QAAU1yC,IAAIosF,SAAS15C,UACrC1yC,IAAIosF,SAAS15C,MAAM5kD,MAAQmkI,gBAAgBv/E,MAAM5kD,UAI7D0hI,YAAY9mI,KAAK0G,UAEdogI,oEAUMtyG,SAAS,IACd+tC,QAA4B/tC,QAA5B+tC,QAASguB,KAAmB/7D,QAAnB+7D,KAAMmT,SAAalvE,QAAbkvE,SAevB,OAbA3wG,OAAOub,QAAQo1F,UAAU9gG,QAAQ,SAACqqH,KAC9B,GAAIA,IAAI,IAAMA,IAAI,GAAG7nH,MAAO,CACxB,IAAM4jI,QAAU/b,IAAI,GACd7nH,MAAQ6nH,IAAI,GAAG7nH,MAEjBA,OACAmrF,KAAKy4C,SAASpmI,QAAQ,SAAConD,MACnB,IAAM15C,OAASiyD,QAAQn9D,QACtB6nH,IAAI,GAAG38G,QAAU05C,KAAKo2D,aAAa9vG,aAK7CigF,2CA3DP,MAAO,wwCCFR,wBASMi5C,gCAAsB,SAAtBA,oBAAsBr/H,KAAG,SAAIgL,OAAAs0H,8BAAIt/H,IAAI,IAARs/H,8BAAet/H,IAAI,KAAI0B,OAAO,SAACi7D,QAASjyD,KAC9E,IAAM60H,QAAU70H,IAAI1f,OAKpB,MdSmB,YcZfu0I,SdkMgB,aclMOA,UACvB5iE,SAAU,GAEPA,UACR,IAMU6iE,oBAAsB,SAAtBA,sBAAsB,OAC/BC,QAAS,IAAI1+H,IACb2+H,SAAU,IAAI3+H,IACd4+H,SAAU,IAAI5+H,IACd6+H,aAAc,IAAI7+H,IAClB8+H,YAAa,IAAI9+H,MASR+3H,WAAa,SAAbA,WAAcr6B,UAAD,QAAAjoC,KAAAzhE,UAAA1D,OAAcgf,OAAd,IAAA7X,MAAAg+D,KAAA,EAAAA,KAAA,KAAAC,KAAA,EAAAA,KAAAD,KAAAC,OAAcpmD,OAAdomD,KAAA,GAAA1hE,UAAA0hE,MAAA,SAAAzrD,OAA4ByzF,SAA5B,UAAAzzF,OAA6CqF,OAAO3d,KAAK,OA6DtEotI,0BAAgB,SAAhBA,cAAiBvnI,OAAQwnI,aAAcC,SAAvB3nE,OAAmE,IAAhCiyB,YAAgCjyB,MAAhCiyB,YAAaiV,aAAmBlnC,MAAnBknC,aAQzE,OAPgBhnG,OAAOlH,OAAS,EAAIkH,OAAO,GAAGX,IAAI,SAAC04D,KAAMpoE,GAAP,OAAa,IAAI83I,UAC/Dh1I,KdmJc,SclJd6jC,UAAS,GAAA7jB,OAAKs/E,YAAL,mBAETiV,4BACDnsF,OA9BsB,SAAhB6sH,cAAiBt3H,QAAS/W,MAAOsuI,WAC1C,IAAIr3H,OAAS,GAEb,GAAIjX,QAAUsuI,UAAY,GAAKv3H,QAAQtX,OAAS6uI,UAAW,CACvD,IAAK,IAAIh4I,EAAI0J,MAAO1J,EAAIygB,QAAQtX,OAAS,EAAGnJ,IACxC2gB,QAAM,GAAAmC,OAAOrC,QAAQzgB,GAAG+J,WAAlB,OAGV,OADA4W,QAAUF,QAAQA,QAAQtX,OAAS,GAAGY,WAEnC,OAAI0W,QAAQ/W,OACR+W,QAAQ/W,OAAOK,WAEnB,GAkBGguI,CAAcF,aAAc73I,EAAGqQ,OAAO,GAAGlH,SAClCkL,QAASmwF,KAAMp8B,KAAK/zD,SAASmwF,aAyDrCyyC,wBAAc,SAAdA,YAAepyH,aAAc9R,OACtC,IAAIs8D,Ud1De,Uc+DnB,OAHIt8D,OdjJiB,cciJR8R,aAAa9R,OAAOkS,IAAIniB,OACjCusE,UdxDc,Uc0DXA,WAUEglE,sBAAwB,SAAxBA,sBAAyB3G,UAAWnzH,WAE7C,OADcmzH,UAAUr3H,gBAAgBhG,OAAOwhB,KAAK,SAAAvxB,GAAC,OAAIA,EAAEC,SAAWga,UAAUxQ,aACnEkU,UA6DJ2xH,8BAAoB,SAApBA,kBAAqB9sI,KAAMuN,OAAQ4nI,oBAC5C,IAAIxI,SAAWwI,mBAAmBn1I,MAC9BotI,WAAa,GACX9hI,QAAUtL,OAAS4oI,KAAOx3B,eAAMC,kBdtHpB,SAJH,OcuHoD3kC,QAAA0oE,0BAIjC7nI,OAJiC,GAI5D8nI,WAJ4D3oE,QAAA,GAIhD4oE,YAJgD5oE,QAAA,GAK7D6oE,eAAiB,SAAjBA,eAAiBr4I,GAAC,OAAKm4I,WAAWhvI,OAASgvI,WAAWn4I,GAAG8C,OAAS,MAClEw1I,gBAAkB,SAAlBA,gBAAkBt4I,GAAC,OAAKo4I,YAAYjvI,OAASivI,YAAYp4I,GAAG8C,OAAS,MAwB3E,Md3PqB,ccqOjBu1I,eAAeF,WAAWhvI,OAAS,IdrOlB,ccqOsCmvI,gBAAgB,IACvEpI,WAAaT,SAAWrhI,QAAQ,EAAIA,QAAQV,QAAQ+hI,WAAarhI,QAAQ,GAGrEqhI,SdvLU,WcsLV3sI,MAAoBq1I,WAAWA,WAAWhvI,OAAS,GAAGY,aAAequI,YAAY,GAAGruI,WdlI7E,McqII0lI,UAAYrhI,QAAQ,Id3OlB,cc6OVkqI,gBAAgBF,YAAYjvI,OAAS,IAC5C+mI,WAAaptI,OAAS4oI,IAAMv3B,gBdpId,ScqIds7B,SAAW3sI,OAAS4oI,IAAMv3B,gBdrIZ,WcuId+7B,WAAaptI,OAAS4oI,IAAMx3B,ed3IjB,Mc4IXu7B,SAAW3sI,OAAS4oI,IAAMx3B,ed5If,OAjGI,Yc+OfmkC,eAAeF,WAAWhvI,OAAS,Id/OpB,Yc+OsCmvI,gBAAgB,GACrE7I,SAAW3sI,OAAS4oI,IAAMx3B,ed/If,MAjGI,YciPRokC,gBAAgB,GACvB7I,SAAW3sI,OAAS4oI,IAAMv3B,gBd7IZ,SArGC,YcmPRkkC,eAAeF,WAAWhvI,OAAS,KAC1CsmI,SAAW3sI,OAAS4oI,IAAMx3B,ednJf,QcqJPg8B,WAAYT,WAYX8I,wBAA0B,SAA1BA,wBAA2Bp2G,QAAS+xF,UAAWskB,SAAY,IAEhEnoI,OAEA6jH,UAFA7jH,OACAvN,KACAoxH,UADApxH,KAHgE21I,sBAKpCD,QAAQE,cAAcC,wBAAwBtoI,OAAQvN,MAA9EqwI,OAL4DsF,sBAK5DtF,OAAQzB,YALoD+G,sBAKpD/G,YAKhB,OAHAvvG,QAAQgxG,OAARyF,8BAAA,GAAA91H,OAAqBhgB,KAArB,UAAoCqwI,SACpChxG,QAAQuvG,YAARkH,8BAAA,GAAA91H,OAA0BhgB,KAA1B,eAA8C4uI,eAErCyB,cAAQzB,wBAAarhI,gBAiDrBwoI,uBAAa,SAAbA,WAAcC,SAAUN,SACjC,IAAIO,gBAAmB5wG,KAAK,EAAOovB,QAAQ,GACvCyhF,gBAAmBztG,MAAM,EAAOC,OAAO,GACvCytG,kBAAqB9wG,KAAK,EAAOovB,QAAQ,EAAOhsB,MAAM,EAAOC,OAAO,GAEpEvpB,KAGA62H,SAHA72H,KACAjB,QAEA83H,SAFA93H,QACQk4H,YACRJ,SADA9zH,OAPyCm0H,MAAAjB,0BASfj2H,KATe,GAStCm3H,SATsCD,MAAA,GAS5BE,UAT4BF,MAAA,GAAAG,SAAApB,0BAUTl3H,QAVS,GAUtCu4H,WAVsCD,SAAA,GAU1BE,cAV0BF,SAAA,GAAAG,mBAkBzCjB,QAAQtkB,YANR0a,cAZyC6K,mBAYzC7K,cACAI,iBAbyCyK,mBAazCzK,iBACAF,kBAdyC2K,mBAczC3K,kBACAI,qBAfyCuK,mBAezCvK,qBACAD,eAhByCwK,mBAgBzCxK,eACAJ,YAjByC4K,mBAiBzC5K,YAEE6K,mBAAqB9K,cAAczlI,OAAS6lI,iBAAiB7lI,OAC7DwwI,kBAAoB9K,YAAY1lI,OAAS8lI,eAAe9lI,OACxDywI,wBAA0B9K,kBAAkB3lI,OAAS+lI,qBAAqB/lI,OAEhF,GdtKiB,UcsKbqvI,QAAQ/rH,YAAY3pB,QACpB,IAAK42I,mBACD,OAASX,8BAAgBC,8BAAgBC,wCAE1C,IAAKU,oBAAsBC,yBAA2BF,oBAAsB,EAC/E,OAASX,8BAAgBC,8BAAgBC,mCAe7C,OAZAF,eA7EkB,SAAhBc,cAAiBtuG,KAAMC,OACzB,IAAMsuG,SACNA,KAAc,EACdA,QAAiB,GAKjB,OAJIvuG,KAAKpiC,OAAS,GAAKqiC,MAAMriC,OAAS,KAClC2wI,QAAQ3xG,KAAM,EACd2xG,QAAQviF,QAAS,GAEduiF,QAqEUD,CAAcT,SAAUC,WACzCL,eAnEsB,SAApBe,kBAAqB5xG,IAAKovB,QAC5B,IAAMuiF,SACNA,MAAe,EACfA,OAAgB,GAOhB,OANI3xG,IAAIh/B,QAAUouD,OAAOpuD,UAChBg/B,IAAI,IAAMA,IAAI,GAAGh/B,OAAS,GAAOouD,OAAO,IAAMA,OAAO,GAAGpuD,OAAS,KAClE2wI,QAAQvuG,MAAO,EACfuuG,QAAQtuG,OAAQ,GAGjBsuG,QAyDUC,CAAkBR,WAAYC,eAC/CP,iBAvDoB,SAAlBe,gBAAmB/3H,KAAMjB,SAC3B,IAAM84H,SAAY3xG,KAAK,EAAMoD,MAAM,EAAMgsB,QAAQ,EAAM/rB,OAAO,GACxDyuG,eAAiB/lC,eAAMC,iBACvB+lC,edzMS,MAIG,UcqNlB,OAfAj4H,KAAK1R,QAAQ,SAACrO,EAAGlC,GACTkC,EAAE,IAAMA,EAAE,GAAGiH,OACb2wI,QAAQG,cAAcj6I,KAAM,EAE5B85I,QAAQG,cAAcj6I,KAAM,IAGpCghB,QAAQzQ,QAAQ,SAACrO,EAAGlC,GACZkC,EAAEiH,OACF2wI,QAAQI,cAAcl6I,KAAM,EAE5B85I,QAAQI,cAAcl6I,KAAM,IAI7B85I,QAoCYE,EAAiBZ,SAAUC,YAAaE,WAAYC,gBAEnEN,YAAY/vI,OAAS,IACrB8vI,iBAAiB9wG,KAAM,EACvB8wG,iBAAiB1hF,QAAS,GAE1B2hF,YAAY/vI,QAAU+vI,YAAY,GAAG/vI,OAAS,IAC9C8vI,iBAAiB1tG,MAAO,EACxB0tG,iBAAiBztG,OAAQ,IAEpButG,8BAAgBC,8BAAgBC,4NClatC,IAAMp/C,oBAAkBsgD,oCAAAvjD,uBAC1BwjD,wBAAQ1nD,MACLmF,YAAaqb,2BAAWhW,OACxBrX,OAAO,IAHgBs0D,oCAAAvjD,oBAK1BwjD,wBAAQznD,OACLkF,YAAaqb,2BAAW/V,aANDg9C,oCAAAvjD,oBAQ1BwjD,wBAAQtnD,WACL+E,YAAaqb,2BAAW5V,QACxBzX,OAAO,IAVgBs0D,oCAAAvjD,oBAY1BwjD,wBAAQrnD,WACL8E,YAAaqb,2BAAWhW,OACxBrX,OAAO,IAdgBs0D,oCAAAvjD,oBAgB1BwjD,wBAAQvnD,OACLgF,YAAaqb,2BAAW5V,QACxBzX,OAAO,IAlBgB+Q,+fCaxB,IAyCMyjD,uBAAkB,SAAlBA,gBAAmBl4G,QAAS4N,WAAYuqG,cAAe/9D,YAChE,IAAIi1B,UAAY8oC,cACVp3I,aAAei/B,QAAQo4G,WACvBroC,QAAU/vE,QAAQ+vE,UACnBooC,gBACD9oC,UAAYu4B,kBAAae,iBAAiB/6F,YAC1ChV,QAAQy2E,WAAWjhG,QAAQ,SAACiqI,KAAMx6I,GAC9Bw6I,KAAKtoC,SACD4mB,aAAc5mB,QAAQ2/B,SACtB9Y,aAAc7mB,QAAQuoC,SACtB7nE,UAAW2J,WAAWv8E,KAE1Bw6I,KAAKpqI,MAAM+xB,QAAQ/xB,YAG3B,IAAMsxF,UACAg5C,YAAc3/G,QAAQy2E,WAgB5B,OAfAzhE,WAAahV,QAAQgV,aACVv2B,OAAO,SAACC,IAAKwL,IAAKtL,KACzB,IAAMw9F,SAAWujC,YAAY/gI,KAW7B,OAVAw9F,SAAS9iG,OAAO4Q,KAChBkyF,SAAShW,YAAYh/D,QAAQg/D,eAC7BgW,SAASj0G,aAAaA,cACtBi0G,SAASud,WACLptB,UAAWnlE,QAAQw4G,aAEnB11H,IAAI1kB,MACJ42G,SAASghB,MAAMlzG,IAAI1kB,MAEvBmhG,OAAOyV,SAASghB,SAAWhhB,SACpB19F,SAEJioF,QAGEk5C,yBAA2B,SAA3BA,yBAA4BC,UAAWzqI,OAChD,IAAM2jH,kBAAoB8mB,UAAUxmI,SAAS0/G,sBACvC+mB,WAAa/mB,kBAAkB+mB,WACjCC,UACJ,GAAID,WAAY,CACZ,IAAMz/G,SAAWy/G,WAAW1qI,OAC5B2qI,OAAS1/G,SAAS0/G,OAClBF,UAAU9mB,kBAAkB14F,SAAS7V,SAC9BuuG,6BAA6Bx3G,UACpCs+H,UAAU9mB,kBAAkBA,mBAEhC,OAAOgnB,QAgDEC,wBAAmB,SAAnBA,iBAAoBlqC,WAC7B,IAAMmqC,iBAoBN,OAnBAnqC,UAAUvgG,QAAQ,SAACygG,SAAUhxG,GACzB,IAAMilB,IAAM+rF,SAAS/rF,IACfgsF,KAAOD,SAASC,KACtB,GAAKhsF,IAUIA,IAAI1kB,OACL0kB,IAAI1kB,KAAJ,GAAAuiB,OAAcmuF,KAAd,KAAAnuF,OAAsB9iB,IAE1Bi7I,cAActtI,KAAKqjG,cAbb,CACN,IAAMkqC,MAAQnR,kBAAaM,kBAAkBr5B,SAASC,KAAMD,UACvDkqC,MAAM36I,OACP26I,MAAM36I,KAAN,GAAAuiB,OAAgBmuF,KAAhB,KAAAnuF,OAAwB9iB,IAE5Bi7I,cAActtI,MACVsjG,KAAMD,SAASC,KACfhsF,IAAKi2H,WASVD,eA4IEE,YAAc,SAAdA,YAAez5C,OAAQ05C,SAAUn6I,OAAnB,OAA6BygG,OAAOjnF,OAAO,SAACknF,OAEnE,OAD0B,SAAby5C,SAAsBz5C,MAAMl1E,YAAYslE,aAAe4P,MAAMw2B,WAC1Dl3H,SAGPo6I,eAAiB,SAAjBA,eAAkB35C,OAAQ05C,SAAUn6I,OAC7CygG,OAAOjnF,OAAO,SAAC+/H,MAEX,OAD0B,SAAbY,SAAsBZ,KAAKnmI,SAAS48F,KAAOupC,KAAKriB,WAChDl3H,QACTu5I,KAAKvtG,UACE,MAQNquG,oBAAsB,SAAtBA,oBAAuBp8H,MACRA,KAAKq8H,iBACb1pD,KAAK,WACjB3yE,KAAKq8H,iBAAmB,IAAIttD,QAAQ,SAACn+D,SACjC5Q,KAAKs8H,iBAAmB1rH,UAE5BwrH,oBAAoBp8H,SCxUfu8H,UAAY,YACZC,UAAY,6uCCGjBhS,qBAA0B4B,4BAA1B5B,UAAWC,sBAAe2B,4BAAf3B,WAEbn1B,kBAAS4B,2BAAU5B,OAiEZmnC,mCAA0B,SAA1BA,wBAA2Bx5G,QAAS9tB,OAAQvR,MAAlB,OAA4B,IAAK,KAAK4M,IAAI,SAACk3H,UAC9E,IAAM1oC,KAAO/7D,QAAQ+7D,OACrB,OAAKA,KAAK0oC,WAGG50D,aAAa39D,OAAOuyH,WAAavyH,OAAOuyH,UAAUpiC,KAZvC,SAAtBo3C,oBAAuBp3C,KAAM7sC,MAC/B,OAAIA,KAAKlrC,YAAY3pB,SAAW0xG,mBACrBhQ,KAWPo3C,CAAoBvnI,OAAOmwF,KAAMtG,KAAK0oC,UAAU,KArE7B,SAArBiV,mBAAsB15G,QAAS+7D,KAAMp7F,KAAMuoG,aAAgB,IAAAywC,YACzDzqC,SAUqC0qC,UATnC1nI,OAAS8tB,QAAQ9tB,SACf+tF,YAAsC/tF,OAAtC+tF,YAAa45C,UAAyB3nI,OAAzB2nI,UAAWC,UAAc5nI,OAAd4nI,UAC1BC,cAAgBF,UAAU/hG,MAC1BkiG,cAAgBH,UAAUG,cAC1Bh6C,aAAer/F,OAAS24I,UAAYQ,UAAU95C,aAAe65C,UAAU75C,aACvEi6C,cAAgBH,UAAU5wC,aAAapxD,MACvC0d,KAAOumC,KAAKmN,aAAa,GACzBgxC,cAAgB1kF,KAAKlrC,YAAY3pB,SAAW0xG,kBAE9C1xG,OAAS24I,WAAaY,eACdC,0BAAAP,aACH1wC,YADG,GAAAvoF,OACcuoF,YADd,UAAAixC,0BAAAP,UAAA,GAAAj5H,OAEAuoF,YAFA,QAAAvoF,OAEoBuoF,YAFpB,WAARgG,SAAQ0qC,WAKR1qC,SAAWirC,6BACNjxC,YAA2B,GAAAvoF,OAAMuoF,YAAnBgxC,cAAa,gBAapC,OAVAhrC,SAASp3D,OACLh5C,MAAO,SAAAA,MAACuR,KAAMxS,GACV,IAAMu8I,iBAAmBF,eAAiB1kF,KAAK15C,SAAS,GAAK,EAC7D,OAAInb,OAAS24I,UACFW,cAAcp8I,EAAI,GAEtBu8I,kBAA0C,IAAtB/pI,KAAK64F,aAAqB8wC,cAAgBD,iBAKzEnsG,YAAU+rG,aACN35C,aAAY,GAAAr/E,OAAKq/E,aAAL,KAAAr/E,OAAqBuoF,aACjC1kE,UAAWtyB,OAAOsyB,UAClBpmC,KAAM8qG,YACNkoB,oBAAqB,SAAAA,oBAAC/gH,KAAMxS,GAQxB,OANyBq8I,eAAiB1kF,KAAK15C,SAAS,GAAK,GAC1B,IAAXzL,KAAKvH,GAAWnI,OAAS24I,UACpC,GAAA34H,OAAMs/E,YAAN,mBAEA,GAAAt/E,OAAMs/E,YAAN,UAAAt/E,OAA0BhgB,KAA1B,KAAAggB,OAAkCuoF,YAAlC,KAAAvoF,OAAiD9iB,EAAI,KAVhEs8I,0BAAAR,YAAA,MAAAh5H,OAcCuoF,YAAY/lD,eAAkBxiD,OAAS24I,UAAY,OAAI1mI,GAdxDunI,0BAAAR,YAAA,WAeNzqC,UAfMyqC,aAiBV59C,KAAMo+C,6BACDjxC,YAAc1zC,MAEnBiqC,aAAa,GAmBHi6C,CAAmB15G,QAAS+7D,KAAMp7F,KAAM8jI,UAL3C,OAMZnsH,OAAO,SAAAna,GAAC,OAAU,OAANA,KA8GFk8I,2BAA6B,SAA7BA,2BAA8Br6G,SAAY,IAAA/H,KAC7C8jE,KAAO/7D,QAAQ+7D,OACfyH,aACFrkE,MAAOa,QAAQb,QACfC,OAAQY,QAAQZ,UAEdy6G,UAAY75G,QAAQs6G,WACpBR,UAAY95G,QAAQu6G,WACpBC,cApHsB,SAAnBC,iBAAoB1+C,KAAM7tF,OAAQwU,cAC3C,IAAMg4H,YAyCN,OAxCC,IAAK,KAAKtsI,QAAQ,SAACzN,MAChB,IAAIspC,MAAQ8xD,KAAKp7F,MAAM,GAAG83G,gBACpBp9F,QAAUs1D,WAAWjuD,aAAciuD,WAAWziE,OAAQvN,KAAM,GAAGy7F,aAAa,GAAI,MAAO,WACvFhyE,YACApZ,SAEE5S,KAAM,SACNuC,KAAM,YAENvC,KAAM,SACNuC,KAAM,YAGNvC,KAAM,UACNuC,KAAM,YAENvC,KAAM,UACNuC,KAAM,YAENvC,KAAM,OACNuC,KAAM,YACN0a,kBAEAjd,KAAM,OACNuC,KAAM,YACN0a,kBAGFtN,IAAM5E,KAAK6P,IAAIixB,MAAMjjC,QAC3BijC,MAAQ5uB,UAAYnX,gCAAiBE,SAAW6lC,MAAM18B,IAAI,SAAApP,GAAC,OAAIA,EAAE0R,YAAao6B,MAC9E,IAAK,IAAIpsC,EAAI,EAAGA,EAAIkQ,IAAKlQ,GAAK,EAAG,KAAA88I,eAC7BvwH,SAAS5e,MAAT2uI,0BAAAQ,kBAAA,GAAAh6H,OACQhgB,KADR,SACsBspC,MAAMpsC,IAD5Bs8I,0BAAAQ,eAAA,GAAAh6H,OAEQhgB,KAFR,UAEuBspC,MAAMpsC,EAAI,IAFjCs8I,0BAAAQ,eAAA,GAAAh6H,OAGQhgB,KAHR,OAGoBspC,MAAMpsC,IAH1Bs8I,0BAAAQ,eAAA,GAAAh6H,OAIQhgB,KAJR,OAIoBspC,MAAMpsC,IAJ1B88I,iBAOJD,SAAS/5I,MAAQ,IAAIgD,oBAAUymB,SAAUpZ,UAEtC0pI,SA0EeD,CAAiB1+C,KAAM/7D,QAAQ9xB,SAAU8xB,QAAQ3vB,OAAOsS,oBAC9EsV,SAAGtX,OAAH9T,MAAAorB,KAAA2iH,6BAAad,WAAbn5H,OAAAi6H,6BAA2Bf,aAAWzrI,QAAQ,SAACiqI,MAC3CA,KAAKhoI,KAAKgoI,KAAKt8C,OAAOt6D,EAAI+4G,cAAc/4G,EAAI+4G,cAAc1xI,GAAG06F,YAAYA,gBCzMpEt+E,kCACT+6E,YFPuB,OEQvBD,aAAc,cACdx7D,UAAW,GACXq2G,iBAAkB,sBAClBhB,WACI75C,aAAc,kBACdx7D,UAAW,GACX69D,MAAM,EACNvqD,MAAO,UACPkiG,cAAe,WAEnBF,WACI95C,aAAc,kBACdx7D,UAAW,GACX69D,MAAM,EACNv5F,GACIgvC,OAAQ,OAAQ,YAEpBrW,GACIqW,OAAQ,OAAQ,aAGxBgjG,kBAAmB,YACnB98C,aACIC,SACIj/F,KFvBgB,iBE0BxB+7I,oBAAqB,osBC9BzB,IAAAC,mBAAAC,iCAAAC,yBCLsB,UDOdp8I,MAAO,KACPijB,MACI+vD,aAAc,SAAAA,aAAC5/D,OAAQ8oG,WAAT,OACVnoC,eAAemoC,WAAanoC,kBAAmB3tD,kCAAgBhT,YAL/E+oI,iCAAAC,sBCFyB,YDYjBp8I,MAAO,KACPijB,MACIkwD,OAAQ,SAAAA,OAAA48B,UAAQ,OAAIgqC,wBAAiBhqC,cAZjDosC,iCAAAC,sBCEyB,aDcjBp8I,MAAO,OAhBfm8I,iCAAAC,sBCOsB,UDYdp8I,MAAO,OAnBfm8I,iCAAAC,sBCJoB,QD0BZp8I,MAAO,KACPijB,MACIgwD,UAAW,SAAAA,UAAA5zE,GAAC,OAAIA,aAAawF,qBAC7BsuE,OAAQ,SAAAA,OAAC5hE,KAAM2vB,SACX,GAAIA,QAAQC,OAAQ,CAChB,IAAMk7G,WAAan7G,QAAQm7G,aAC3Bn7G,QAAQm7G,cAARx6H,OAAAy6H,gCAAuBD,aAAY9qI,YAChC,CACH,IAAMgrI,QAAUr7G,QAAQ3vB,OACxBgrI,SAAWA,QAAQxjD,YAAY,eAC/B73D,QAAQm7G,YAAY9qI,YAhCxC4qI,iCAAAC,sBCG+B,mBDmCvBp8I,MAAO,KACPijB,MACIwvD,aAAa,KAxCzB2pE,8lBEOA,WAgBaI,qCAA0B,SAA1BA,wBAA2Bt7G,QAASywC,WAAV,OAAwB,WAC3D,IAAM30D,ON+L2B,SAAxBy/H,sBAAyBh8C,OAAQrD,WAAYs/C,eAAgB94H,cACtE,IAAIqrD,WA4BJ,OA3BAwxB,OAASA,OAAOjnF,OAAO,SAAAknF,OAAK,OAA8B,OAA1BA,MAAMi8C,mBAC/BrtI,QAAQ,SAACoxF,OACZ,IAAIk8C,gBACExpI,OAASstF,MAAMttF,SACfg9F,SAAWh9F,OAAOg9F,SAClBysC,YAAcn8C,MAAMi8C,gBACpB1gB,QAAUv7B,MAAMpjE,KAEF,OAAhBu/G,cAAmD,IAA3BzpI,OAAOq9F,kBAC/BmsC,aAAen9I,OAAOub,QAAQ6hI,aAC9B5tE,QAAU2tE,aAAarkI,OAAO,SAACukI,YAAa9/H,QACxC,IAAMs7G,aAAet7G,OAAO,GACtBlL,MAAQs+F,SAASkoB,cAAcxmH,MAC/Bs8F,UAAYsuC,eAAezgB,SAAS3D,cAC1C,GAAIA,gBAAgBl7B,WAAY,CAC5B,IAAM2/C,SAAQ,GAAAl7H,OAAMu7E,WAAWk7B,cAAclqB,YAC7C0uC,YAAYC,UAAYD,YAAYC,cACpCD,YAAYC,UAAY/tE,0BAAc8tE,YAAYC,UAAW//H,OAAO,IAChE4G,aAAa9R,OAAOkS,IAAIzH,QAAUqH,aAAa9R,OAAOkS,IAAIzH,QAClDqH,aAAa9R,OAAOkS,IAAIniB,WAEpCi7I,YAAYxkB,cAAgBt7G,OAAO,GAEvC,OAAO8/H,aACR7tE,YAGJA,QM5NQwtE,CAAsBv7G,QAAQu/D,SAAUv/D,QAAQ9xB,SAAU8xB,QAAQ87G,gBAC7E97G,QAAQ3vB,OAAOsS,mBACnBqd,QAAQ/xB,QAAQknH,OAAhB,GAAAx0G,OAA0BwvF,0BAAiB97C,sBAA3C,KAAA1zC,ODlBkB,SCkBlB,KAAAA,OAAoF8vD,WAAa30D,UAGxFs4D,6BAAc,SAAdA,YAAep0C,QAASywC,UAAWs/B,SAArB,QAEnBpvG,KAAM,4BACNm3B,OAAO,GAAAnX,OAAI8vD,UAAU+D,MAAd,KAAA7zD,ODrCO,WCsCdi0D,SAAU,SAAAA,SAAA38C,MAAgB,IAAZ/lB,OAAY6pI,+BAAA9jH,KAAA,MACtB/lB,QAAU8tB,QAAQ25D,WAAWznF,OAAOA,OAAO8rF,gBAI/Cr9F,KAAM,4BACNm3B,OAAO,GAAAnX,OAAI8vD,UAAU+D,MAAd,KAAA7zD,ODzCU,aC0CjBi0D,SAAU,SAAAA,SAAAzsD,OAAmB,IAAfwmF,UAAeotC,+BAAA5zH,MAAA,MACnB6zH,UAAYh8G,QAAQ9xB,SAC1B,GAAIygG,WAAaqtC,UAAW,EAnCf,SAAnBC,iBAAoBttC,UAAW3uE,SACjC,IAAMk8G,UAAYl8G,QAAQ6vE,WACpBssC,WAMN,IAAK,IAAM/8I,OALXuvG,UAAUvgG,QAAQ,SAACygG,SAAUhxG,GACzB,IAAMu+B,GAAE,GAAAzb,OAAMkuF,SAASC,KAAf,KAAAnuF,OAAuB9iB,GAC/Bs+I,QAAQ//G,KAAM,IAGA8/G,UACR98I,OAAO+8I,UACTD,UAAU98I,KAAKgP,QAAQ,SAAAoxF,OAAK,OAAIA,MAAM10D,kBAC/BoxG,UAAU98I,MAyBb68I,CAAiBttC,UAAW3uE,SAC5B,IAAM+7D,KAAO/7D,QAAQ+7D,OACrB,GAAIA,KAAKt6D,GAAKs6D,KAAKjzF,EAAG,CAClB,IAAMgvB,OAAQ,GAAAnX,OAAIwvF,0BAAiB17C,uBAArB,cAAA9zC,OAAwDovF,QAAQ2/B,SAAhE,QAAA/uH,OACPwvF,0BAAiB17C,uBADV,cAAA9zC,OAC6CovF,QAAQuoC,SADrD,MAERrqI,MAAQ+xB,QAAQ/xB,QAChBmuI,aACF3rE,UAAWA,UAAU+D,MACrBp1E,IAAK,oBAET6O,MAAM4pF,YAAYukD,aAClBnuI,MAAM+mH,uBAAuBl9F,MAAO,WAChCuiH,2BAA2Br6G,WAC5B,EAAOo8G,aAGdp8G,QAAQ0uE,SAASC,WACjB3uE,QAAQq8G,kBAAkBC,QACtBzsD,OAAQ7vD,QAAQu/D,SAChB73E,OAAQ,cACRkoE,WAAY,cAMxBjvF,KAAM,4BACNm3B,OAAO,GAAAnX,OAAI8vD,UAAU+D,MAAd,KAAA7zD,OD1EK,SC2EZi0D,SAAU,SAAAA,SAAA28C,OAAmB,IAAfhvG,UAAew5H,+BAAAxqB,MAAA,MACnBgrB,QAAUv8G,QAAQ+7D,OAClBoJ,aACAgH,oBAEN5tG,OAAOub,Q/Ou5CI,SAAjB0iI,eAAkBj6H,WACpB,IAAMk6H,kBAMN,OALAl+I,OAAOub,QAAQyI,UAAUrO,gBAAgBjD,gBAAgB7C,QAAQ,SAAAmjH,OAA2B,IAAAmrB,MAAApvE,eAAAikD,MAAA,GAAzBn5G,UAAyBskI,MAAA,GAAd/1C,SAAc+1C,MAAA,GACpF/1C,SAAStrF,YAAcnX,gCAAiBE,WACxCq4I,eAAerkI,WAAauuF,YAG7B81C,e+O95CgBD,CAAej6H,YAAYnU,QAAQ,SAAAuuI,OAA2B,IAAAC,MAAAb,+BAAAY,MAAA,GAAzBvkI,UAAyBwkI,MAAA,GAAdj2C,SAAci2C,MAAA,GACzEzwC,iBAAiB/zF,WAAauuF,SAASykC,iCAG3C7sI,OAAOub,QAAQkmB,QAAQ9xB,UAAUE,QAAQ,SAAAyuI,OAAqB,IAAAC,OAAAf,+BAAAc,MAAA,GAAnBl8I,KAAmBm8I,OAAA,GAAZlsI,MAAYmrI,+BAAAe,OAAA,SAC1D,GAAIlsI,MAAO,CACP,IAAMkmG,SAAW3K,iBAAgB,GAAAxrF,OAAI/P,QACjCkmG,WACA3R,UAAUxkG,MAAQm2G,SAClBylC,QAAQ57I,MAAMyN,QAAQ,SAAAonD,MAAI,OAAIA,KAAKn5C,QAAQy6F,gBAKvD92E,QAAQ+8G,kBAAoB5wC,iBAC5BnsE,QAAQw4G,WAAarzC,aAIzBxkG,KAAM,4BACNm3B,OAAO,GAAAnX,OAAI8vD,UAAU+D,MAAd,KAAA7zD,ODrGO,WCsGdi0D,SAAU,SAAAA,YJqDiB,SAAtBooE,oBAAuBh9G,SAChC,IAAMi9G,OAASj9G,QAAQ9tB,SACjB69F,QAAU/vE,QAAQ+vE,UAClB9hG,MAAQ+xB,QAAQ/xB,QAChBk3F,UAAYnlE,QAAQw4G,YACzBc,UAAWC,WAAWnrI,QAAQ,SAACzN,MAC5B,IAAImuG,KACA58F,OACAvR,OAAS24I,WACTxqC,KAAOy4B,qBACPr1H,OAAS+qI,OAAOnD,YAEhBhrC,KAAO04B,sBACPt1H,OAAS+qI,OAAOpD,WAEpB,IAAMpwI,YAAc+vI,mCAAwBx5G,QAAS9tB,OAAQvR,MAEvDqyE,IAAG,IAAAryD,OAAOhgB,KAAP,aACTq/B,QAAQgzC,KAtCe,SAAlBkqE,kBAAyE,IAAtD7tC,UAAsD3kG,UAAA1D,OAAA,QAAA4L,IAAAlI,UAAA,GAAAA,UAAA,MAAtCyyI,SAAsCzyI,UAAA1D,OAAA,EAAA0D,UAAA,QAAAkI,EAA5BnJ,YAA4BiB,UAAA1D,OAAA,EAAA0D,UAAA,QAAAkI,EAAfwqI,WAAe1yI,UAAA1D,OAAA,EAAA0D,UAAA,QAAAkI,EAC5ErF,OAUN,IAAK,IAAMnO,OATXqK,YAAY2E,QAAQ,SAAC0U,KACjB,IAAM1kB,KAAO0kB,IAAI8qB,WAAWxvC,KACxB42G,SAAW3F,UAAUjxG,MACpB42G,WACD3F,UAAUjxG,MAAQ42G,SAAWmoC,SAASr6H,MAE1Cs6H,WAAWpoC,SAAUlyF,IAAK1kB,MAC1BmP,IAAInP,MAAQ,IAEEixG,UACRjwG,OAAOmO,MACT8hG,UAAUjwG,KAAK0rC,gBACRukE,UAAUjwG,MAGzB,OAAOiwG,UAqBY6tC,CAAgBl9G,QAAQgzC,KAAM,WACzC,IAAMqlE,KAAOzQ,kBAAae,kBAAmB75B,YAE7C,OADAupC,KAAKt3I,aAAai/B,QAAQo4G,YACnBC,MACR5uI,YAAa,SAAC+1F,MAAO69C,UAAWj+I,KAC/B,IAAMwuC,WAAayvG,UAAUzvG,WACvBmrG,MAAQnR,kBAAaM,kBAAkBp5B,KAAMlhE,YAC7C2uG,QAAUc,UAAUthD,KAC1ByD,MAAMuQ,SACF4mB,aAAc5mB,QAAQ2/B,SACtB9Y,aAAc7mB,QAAQuoC,SACtB7nE,UAAS,GAAA9vD,OAAKovF,QAAQt/B,WAAb9vD,OAAyBhgB,MAAzBggB,OAAgCvhB,OAExC6O,MAAMA,OACNiE,OAAO6mI,OACPxmB,WACGptB,sBAEHpJ,KAAKwgD,WAEdv8G,QAAO,IAAArf,OAAKhgB,OAAUpC,OAAOskB,OAAOmd,QAAQgzC,QI1FxCgqE,CAAoBh9G,YAIxBr/B,KAAM,4BACNm3B,OAAO,GAAAnX,OAAI8vD,UAAU+D,MAAd,KAAA7zD,OD3GK,QC2GL,GAAAA,OACA8vD,UAAU+D,MADV,KAAA7zD,ODrGU,cCuGjBi0D,SAAU,SAAAA,SAAA0oE,OAAAC,QAAkC,IAA9Bh7H,UAA8Bw5H,+BAAAuB,OAAA,MAAfh+F,UAAey8F,+BAAAwB,OAAA,MACxC,GAAIh7H,UAAW,CACX,IAAMyoF,WNpEa,SAAtBwyC,oBAAuBl+F,UAAW/8B,WAC3C,IAAMyoF,cACN,IAAK,IAAM5rG,OAAOkgD,UACd,MAAO1/C,eAAe5B,KAAKshD,UAAWlgD,KAAM,CACxC,IAAMq+I,aAAen+F,UAAUlgD,KAC/B4rG,WAAW5rG,KAAOq+I,aAAal7H,WAIvC,OAAOyoF,WM2DwBwyC,CAAoBl+F,UAAW/8B,WAClDyd,QAAQ/xB,QAAQknH,OAAhB,GAAAx0G,OAA0B8vD,UAAU+D,MAApC,KAAA7zD,ODzGe,mBCyGuDqqF,gBAK9ErqG,KAAM,4BACNm3B,OAAO,GAAAnX,OAAI8vD,UAAU+D,MAAd,KAAA7zD,OD/GgB,mBC+GhB,GAAAA,OACA8vD,UAAU+D,MADV,KAAA7zD,OD3GO,WC6Gdi0D,SAAU,SAAAA,SAAA8oE,OAAAC,QAAqC,IAAjCjtC,gBAAiCqrC,+BAAA2B,OAAA,MAAZn+C,OAAYw8C,+BAAA4B,OAAA,MACrCC,kBAAoB59G,QAAQ87G,gBAC5B+B,QAAU79G,QAAQ+7D,OAClBx5E,UAAYyd,QAAQ3vB,OAC1B,GAAIqgG,iBAAmBnR,QAAUs+C,SAAWD,kBAAmB,CAC3D59G,QAAQq8G,kBAAkBC,QAASzsD,OAAQ0P,OAAQ73E,OAAQ,eAAgBkoE,WAAY,UACvF,IAAMnuE,MAAQue,QAAQ/xB,QAAQwT,MAC9B89E,OAAOnxF,QAAQ,SAAA0vI,KAAG,OAAIA,IAAIC,kBN8CR,SAArBC,mBAAsBz+C,OAAQvnF,GAAIimI,uBAC3C1+C,OAAOnxF,QAAQ,SAACoxF,OACZ,IAAM0+C,WAAa1+C,MAAMttF,SAAS6W,OAC5BxG,UAAY27H,sBAAsB9jI,SAAW8jI,WAAWlmI,IACzDimI,sBAAsBC,aAAelmI,GACtCwnF,MAAMnvF,SAAWkS,WACjBi9E,MAAMnvF,KAAKkS,aMnDPy7H,CAAmBz+C,OAAQh9E,UAAWmuF,iBACtCjvF,MAAMquH,OACNvwC,OAAOnxF,QAAQ,SAAC0vI,KACZA,IAAIK,eAAeriI,OAAOgiI,IAAIhjC,WAElCr5F,MAAMsuH,SACN/vG,QAAQo+G,qBNxHc,SAAzBC,uBAA0B9+C,OAAQ78E,cAC3C,IAAM47H,+BAoBN,IAAK,IAAMl/I,OAlBXmgG,OAAOnxF,QAAQ,SAACoxF,OAAU,IAAA++C,sBAOlB/+C,MAAMwyB,oBALN4B,WAFkB2qB,sBAElB3qB,WACAE,UAHkByqB,sBAGlBzqB,UACAD,WAJkB0qB,sBAIlB1qB,WAIEtmG,UARgBgxH,sBAKlBpiD,OALkBoiD,sBAMlBliD,QAE8B/jF,OAAO,SAAA1H,OAAK,OAAI8R,aAAa9R,QAAU8R,aAAa9R,OAAOkS,IAAIniB,OAC7F8D,yBAAUC,WACbkvH,WAAYE,UAAWD,YAAYzlH,QAAQ,SAACwC,OACwC,IAAA4tI,sBAA7E97H,aAAa9R,QAAU8R,aAAa9R,OAAOkS,IAAIniB,OAAS8D,yBAAUE,aACjE25I,4BAA4B1tI,SAAW0tI,4BAA4B1tI,YACpE4tI,sBAAAF,4BAA4B1tI,QAAOpF,KAAnCqB,MAAA2xI,sBAAAC,6BAA2ClxH,gBAKrC+wH,iCACP1+I,eAAe5B,KAAKsgJ,4BAA6Bl/I,OACpDk/I,4BAA4Bl/I,KAA5Bq/I,6BAAuC,IAAI5iI,IAAIyiI,4BAA4Bl/I,QAGnF,OAAOk/I,4BM8FoCD,CAAuB9+C,OAClDh9E,UAAUI,kBAAmBqd,QAAQ0+G,iBNiDvB,SAArBC,mBAAsB5iD,KAAMwD,OAAQi8C,gBAC7Cj8C,OAAOnxF,QAAQ,SAACoxF,OACZ,IAAMu7B,QAAUv7B,MAAMpjE,KAChBmgH,WAENrsE,eAAe6rB,KAAM,SAAC38F,KAClB,IAAMw/I,QAAUpD,eAAezgB,SAC3B6jB,SACA7iD,KAAK38F,OAASm9I,QAAQn9I,KAAO28F,KAAK38F,KAAKw/I,QAAQx/I,MAAQ,MAG/Db,OAAO6M,KAAKmxI,SAASv1I,QAAUw4F,MAAMzD,KAAKwgD,WM3DlCoC,CAAmBd,QAASt+C,OAAQq+C,mBACpC59G,QAAQq8G,kBAAkBC,QAASzsD,OAAQ0P,OAAQ73E,OAAQ,UAAWkoE,WAAY,wLCxI3F,IAAMmP,iBAAK8/C,qBAAAC,UNSa,oBMTbD,qBAAAC,ONUY,oBMVZD,qBAAAC,ONWU,kBMXVD,qBAAAC,ONYI,aMZJD,qBAAAC,ONaS,iBMbTD,qBAAAC,OAAA,mBAAAD,qBAAAC,OAAA,QAQVjvE,cACIpuC,KACA34B,QAVM+1I,qBAAAC,OAAA,aAAAD,qBAAAC,OAAA,cAAAD,qBAAAC,OAAA,eAAAD,qBAAAC,OAAA,YAAAD,qBAAAC,OAAA,aAAAD,qBAAAC,OAAA,yBAAAD,qBAAAC,OAAA,eAoBVjvE,aAAc,SAAAA,aAAArpE,KAAG,OAAIA,OApBXs4I,ykCCEX,IA8BM3qE,yBAAoB,SAApBA,kBAAqBwlB,UAC9B,IAAM35D,QAAU25D,SAAS35D,QACnB/xB,MAAQ+xB,QAAQ/xB,QAEtBA,MAAMiiG,2BAA0B,eAAAvvF,OAAgBqf,QAAQ+vE,UAAUt/B,UAAlC,KAAA9vD,OHrChB,SGqCwE,SAAC4B,WAGrF,GAFWA,UAAU,GAEb,CACJo3E,SAASolD,mBAAmBplD,SAAS35D,QAAQ3vB,OAAOoS,UAAUoJ,MAC9D8tE,SAAS5D,wBACT,IAAMipD,aAAerlD,SAAS35D,QAAQm7G,aAAa,GACnDxhD,SAASslD,0BAA0BD,iBAI3C/wI,MAAM+mH,wBAAuB,eAAAr0G,OAAgBqf,QAAQ+vE,UAAUt/B,UAAlC,KAAA9vD,OHhDb,SGgDqE,WAC5Eg5E,SAAS35D,QAAQ3I,SACGsiE,SAAS35D,QAAQm7G,aAAa,GACtCtjD,YAAY,iBAIjC73D,QAAQo4G,WAAWljB,UAAUF,wBAAwBjgE,aAAYE,eAC7D,SAAAh9B,MAAqBinH,8BAAAjnH,KAAA,QAhCY,SAA5BknH,0BAA6Bn/G,SACtC,IAAMk2D,kBAAoBl2D,QAAQ80D,mBAClCv2F,OAAOub,QAAQo8E,mBAAmB9nF,QAAQ,SAACqZ,OACvC,IAAM0uE,WAAa1uE,MAAM,GACzBuY,QAAQ82D,mBAARjqF,MAAAmzB,SAA2Bm2D,WAAW/3F,MAA/BuiB,OAAAy+H,kCAAwCjpD,WAAWnwE,YAE9Dga,QAAQ80D,sBA4BIqqD,CAA0BxlD,UA3CR,SAArB0lD,mBAAsBr/G,SAC/B,IAAMi2D,cAAgBj2D,QAAQ60D,eAC9B,IAAK,IAAMz1F,OAAO62F,cACVA,cAAc72F,KAAKmwB,wBACZyQ,QAAQ60D,eAAez1F,KAwC1BigJ,CAAmB1lD,ohBC1DnC,IAoCa2lD,kBACTC,MAAO,SAAAA,MAACvqC,SAAUwqC,mBAAoBn3H,YAClC,IAAMo3H,YAAcp3H,WAAWmH,QACzBxN,SAvCW,SAAnB09H,iBAAoB1qC,SAAUwqC,mBAAoBn3H,YACpD,IACM/F,QAAUk9H,mBAAmB,GAAG/8H,UAChCk9H,aAAet3H,WAAWmH,QAAQxN,SAClCsG,kBAAoBD,WAAWC,kBAC/BtX,OAASsR,QAAQtR,OACjBsoF,SAAW0b,SAAS3kG,OAAOsS,kBAC3BtS,KAAOiS,QAAQjS,KA0BrB,OAzB2B2kG,SAAS54E,OAAS/T,WAAWnB,SAGzCy4H,aAEuB,OAAtBr3H,kBAA8BtX,OAAOqG,OAAO,SAACC,IAAK9J,IAAKjG,OAC/D,IAAIV,MACE+J,MAAQpD,IAAIpP,KACZuoG,SAAWrN,SAAS1oF,OAEpBgvI,aADOj5C,WAAaA,SAAS7jF,IAAIzH,QAAUsrF,SAAS7jF,IAAIzH,QAAUsrF,SAAS7jF,IAAIniB,SACxDuD,gCAAiBC,YAE9C,OAAKwiG,UAOD9/F,MAHC+4I,YAGOvvI,KAAK9C,IAAI,SAAApP,GAAC,OAAIA,EAAEoJ,UAFf4B,KAAK2P,IAALjM,MAAA1D,KAAI02I,oCAAQxvI,KAAK9C,IAAI,SAAApP,GAAC,OAAIA,EAAEoJ,WAAU4B,KAAK6P,IAALnM,MAAA1D,KAAI02I,oCAAQxvI,KAAK9C,IAAI,SAAApP,GAAC,OAAIA,EAAEoJ,YAI/E+P,IAAI1G,OAAS/J,MACNyQ,KATIA,SAUN,KAQQooI,CAAiB1qC,SAAUwqC,mBAAoBn3H,YAC1DmH,QAAUjxB,OAAO4T,UAAWstI,aAElC,OADAjwH,QAAQxN,SAAWA,SACZwN,SAGXswH,UAAW,SAAAA,UAAC9qC,SAAUwqC,mBAAoBn3H,YACtC,IAAMo3H,YAAcp3H,WAAWmH,QACzBlH,kBAAoBD,WAAWC,kBAC/BhG,QAAUk9H,mBAAmB,GAAG/8H,UAClCzR,OAASsR,QAAQtR,OACfwe,QAAUjxB,OAAO4T,UAAWstI,aAClCzuI,OAASsR,QAAQtR,OACjB,IAAMX,KAAOiS,QAAQjS,KACfi7F,aAAet6F,OAAOzD,IAAI,SAAApP,GAAC,OAAIA,EAAEC,OAIvC,OAHAoxB,QAAQxN,UAAYsG,mBAAqBk3H,mBAAmB,GAAG30C,UAAY,MACtES,cADc3qF,OAAAk/H,oCACGxvI,OACtBmf,QAAQ87E,aAAehjF,kBAAoBA,kBAAkB6I,YAAY5jB,IAAI,SAAApP,GAAC,OAAIA,EAAEC,UAC7EoxB,wgBCzDf,IAyBauwH,gCAAkB,SAAlBA,gBAAmB/qC,SAAUttF,QAAwB,IAC1D0rE,gBAD0ClhF,OAAgBxH,UAAA1D,OAAA,QAAA4L,IAAAlI,UAAA,GAAAA,UAAA,MAExD8kB,QAAUtd,OAAOsd,QACjB2jE,aAAejhF,OAAOihF,aACtB6sD,oBAAsB9tI,OAAO+tI,kBAAkBv4H,YAC/Cu4H,kBAAoBD,oBAAoB9xI,WACxCsqB,OAASwnH,oBAAoBxnH,OAC7BxW,SAAWwN,QAAQxN,SACnBge,QAAUg1E,SAASh1E,QACnBzd,UAAYyd,QAAQm7G,aAAa,GACjCj0H,SAAW8Y,QAAQ5D,KACnB8jH,aAAelrC,SAAS7iB,cACxBuB,mBAAqBshB,SAASrgB,oBAC9BwrD,YAAchtD,aAAaN,YAAYpxE,MACvCiB,aAAeH,UAAUI,kBAC/B6M,QAAQ4wH,WAAal5H,SACrBsI,QAAQ9H,OAASA,OACjB8H,QAAQ6wH,aAAergH,QAAQsgH,cAC/B,IACMC,qBAD0BvrC,SAASzgB,yBACY7sE,SAAWA,OAE5D84H,cACa,OAAbx+H,SACAoxE,gBAAkB,KACXtgE,eAAe9Q,WACtBw+H,WAAajiJ,OAAO6M,KAAK4W,cACzBoxE,gBAAkB+sD,YAAcA,YAAYruH,QAAQ0uH,YAAc,OAElEA,WAAax+H,SAAS,GACtBoxE,gBAAkB+sD,YAAcA,YAAYruH,QAAQ0uH,YAAc,MAGtE,IAAMC,cAAgBzgH,QAAQygH,gBAC9B,GAAwB,OAApBrtD,iBAA4B6sD,kBAAkBj5I,OAAQ,CACtD,IAAMkH,OAASklF,gBAAgB3wE,UAAUzR,OAAOzD,IAAI,SAAApP,GAAC,OAAIA,EAAEC,OAC3Dg1F,gBA5DsB,SAAxBstD,sBAAyB1oI,GAAI3H,MAC/B,IAAMiS,QAAUtK,GAAGyK,UACbk+H,QAAUr+H,QAAQtR,OAClB4vI,MAAQt+H,QAAQjS,KAChB+Z,YACAy2H,QAAUxwI,KAAK,GAAG9C,IAAI,SAAApP,GAAC,OACzBC,KAAI,GAAAuiB,OAAKxiB,GACTwC,KAAM8D,yBAAUE,aAEdm8I,MAAQzwI,KAAK,GAanB,OAXAuwI,MAAMxyI,QAAQ,SAACjQ,GACX,IAAM0W,SACN8rI,QAAQvyI,QAAQ,SAACZ,IAAK3P,GAClBgX,MAAMrH,IAAIpP,MAAQD,EAAEN,KAExBgjJ,QAAQzyI,QAAQ,SAACZ,IAAK3P,GAClBgX,MAAMrH,IAAIpP,MAAQ0iJ,MAAMjjJ,KAE5BusB,SAAS5e,KAAKqJ,SAGX,IAAIlR,oBAAUymB,YAAdzJ,OAAAogI,kCAA4BJ,SAA5BI,kCAAwCF,WAsCzBH,CAAsBttD,gBAAiBqtD,eACzDD,WAAahoH,UAAM7X,OAAAogI,kCAAO7yI,QAAP6yI,kCAAkBd,oBAAqBA,kBAC1D7sD,gBAAkBA,gBAAgBthE,QAAQ0uH,YAG9C,IAAIr5H,6BAA8B,EAC9Bq5H,WAAWx5I,QAAUw5I,WAAWx9H,MAAM,SAAApS,OAAK,OAAI8R,aAAa9R,QAC5D8R,aAAa9R,OAAOkS,IAAIniB,OAAS8D,yBAAUC,YAC3CyiB,6BAA8B,GAGlC,IAAM65H,QAAUhhH,QAAQsgH,cACxB9wH,QAAQ9H,OAASA,OACjB,IAAMu5H,kBAAoBjsC,SAASjhB,SAASC,YAAYusD,sBAClDhxH,kBAAkB0xH,mBAAoBA,kBAAkB32H,YAAYusE,UAEpEhjF,SAAW,SAAXA,SAAY4T,MAAOy5H,iBACrB,IAAM1rD,QAAU9B,mBAAmBjsE,MAAMvV,OAAOwV,QAC1CmvE,SAAUpvE,MAAMvV,OAAO8uI,SACzBxrD,QAAQzyE,KAAK,SAAA5kB,GAAC,OAAI+hJ,aAAa/hJ,EAAEC,MAAQD,GAAGmsB,YAAYusE,YAC5D,OAAOpvE,MAAMvV,OAAO8uI,UAAYE,gBAAgBF,SAAWnqD,SAGzDsqD,gBAAkBnsC,SAASjhB,SAASC,YAAYtsE,QAChDmvE,UAAUsqD,iBAAkBA,gBAAgB72H,YAAYusE,UAC1DxuE,YACAmH,gBACA9H,cACA1F,SAAUoxE,gBACV7jE,gBAAiBsnE,QACjB1vE,wDACA65H,gBACA95H,SAAU2vE,QAAUmqD,QAAU95H,SAC9BrT,kBACAutI,QAAS,SAAAA,QAACC,SAAU1nD,UAAX,OAAyBjyE,SAAW64H,sBACzCc,SAAS7xH,QAAQ6wH,eAAiB1mD,SAAS35D,QAAQsgH,gBAG3D/9H,UAAUy0E,UAAU5D,gBAAiB/qE,YAAY,GAE7CX,SAAW64H,uBACXl4H,YACImH,gBACAtI,SAAUqI,gBAAkByxH,QAAU95H,SACtClF,SAAUoxE,gBACV7jE,gCACApI,wDACAO,OAAQ64H,qBACRS,gBACAl5H,cAAeJ,SAAW64H,qBAC1Ba,QAAS,SAAAA,QAACC,SAAU1nD,UAAX,OAAwB0nD,SAAS7xH,QAAQ6wH,eAAiB1mD,SAAS35D,QAAQsgH,eACpFzsI,mBAGJ0O,UAAUy0E,UAAU5D,gBAAiB/qE,YAAY,GAC7CuH,sBAAuB,SAAAA,sBAAChI,UAAW05H,SAAZ,OAAwB15H,UAAUo5H,UAAYM,QAAQN,qlDC3GpEO,0CACjB,SAAAA,eAAwB,IAAAj3C,iBAAAvwF,iKAAAynI,CAAAl8I,KAAAi8I,cAAA,QAAAp1E,KAAAzhE,UAAA1D,OAARgf,OAAQ,IAAA7X,MAAAg+D,MAAAC,KAAA,EAAAA,KAAAD,KAAAC,OAARpmD,OAAQomD,MAAA1hE,UAAA0hE,MAAA,OACpBryD,kLAAA0nI,CAAAn8I,MAAAglG,iBAAAo3C,wBAAAH,eAAAvjJ,KAAA6O,MAAAy9F,kBAAAhlG,MAAAqb,OAASqF,UACTmuD,yBAAkBwtE,8DAAA5nI,SAFEA,gYADcy5E,qTAM3B8C,UAAW9mE,QAAS2jE,aAAchB,aACzC4tD,gCAAgBz6I,KAAMgxF,WAClB9mE,gBACA2jE,0BACAhB,wBACA8tD,kBAAmB36I,KAAK8uF,+FAINjC,YAAa3iE,QAAS1I,gBAC5C,IAAMkZ,QAAU16B,KAAK06B,QACf4hH,OAAS5hH,QAAQ5D,KACjBylH,UAAY7hH,QAAQsgH,cACpBwB,wBAA0Bh7H,eAAe24H,aAAe34H,eAAe24H,YAAYY,aACnF0B,aAAej7H,eAAe24H,aAAe34H,eAAe24H,YAAYW,WACxE4B,kBAAoB18I,KAAK+uF,mBACzB4tD,oBAAsB38I,KAAK6sF,cAC3B+vD,gBAAiBH,cAAeA,eAAiBH,OAEjDtqD,sBAAwB9nE,QAAQ2iE,cAClCqD,QAAShmE,QAAQ2iE,YACjBuD,YAAalmE,QAAQ9H,UACpByqE,YAoBL,OAnBAmF,sBAAsBlpF,QAAQ,SAACjQ,GAC3B,IAAIgkJ,cAAgBhkJ,EAAEq3F,QACtB2sD,cAAgBA,cAAc7pI,OAAO,SAACgC,IAElC,GADgB2nI,oBAAoB3nI,GAAGlc,MAAQkc,IAAIgQ,YAAYusE,YACb,IAAnC/vE,eAAeyI,gBAC1B,OAAO,EAEX,IAAK2yH,gBAAuC,OAArB1yH,QAAQxN,SAAmB,CAC9C,IAAMogI,kBAAoBJ,kBAAkB1nI,GAAGlc,MAAQkc,IACvD,OAAO8nI,mBAAoBA,kBAAkBt7H,eAAe24H,YAAaz/G,SAE7E,OAAI8hH,0BAA4BD,YAAaK,iBACb,IAArB5nI,GAAGwN,gBAKlB3pB,EAAEq3F,QAAU2sD,gBAET7qD,4FAGaN,WACpB,OAAqB,IAAdA,kFAGe,IAAA/8E,OAAA3U,KACtB,OAAO,SAAC+K,KAAM6B,QACV,IAAIsoF,sBAAuB,EACvBjrE,iBAAkB,EAChBkwH,YAAcvtI,OAAOsd,QACrBlH,kBAAoBpW,OAAOoW,kBAC3B+5H,UAAYnwI,OAAOkvI,QACnB15H,OAASxV,OAAOwV,OAChB46H,UAAYhD,iBAAiB53H,SAAW43H,iBAAiBQ,UAE/D,GAAIx3H,kBAAmB,CACnB,IAAM5F,aAAe4F,kBAAkB3F,kBACjC4/H,uBAAyBhkJ,OAAO6M,KAAKsX,cACrC89H,WAAajiJ,OAAO6M,KAAKiF,KAAK,GAAGsS,mBAClCpkB,OAAOskB,OAAOH,cAAcK,KAAK,SAAA5kB,GAAC,OAAIA,EAAE2kB,IAAIniB,OAAS8D,yBAAUC,YAChE81F,qBAAuB+nD,uBAAuBx/H,KAAK,SAAA5kB,GAAC,OAA+B,IAA3BqiJ,WAAWj1I,QAAQpN,MAInF,IAAMqxB,QAAU8yH,UAAUroI,OAAK+lB,QAAS3vB,KAAM6B,QACxCswI,iBAAmBvoI,OAAKu6E,kBACxB3gF,SAAW2uI,iBAAiB96H,SAAW86H,iBAAiB,KAC1DpB,SAAU,EAUd,GARIvtI,WACAutI,QAAUvtI,SAAS4rI,gBAAmBxlI,OAAK+lB,UAG3CqiH,YACAjB,QAAUiB,UAAUnwI,OAAQ+H,UAAqB,IAAZmnI,SAGrCA,QAAS,CACT,IAAM5rD,QAAUv7E,OAAK06E,oBAAoBjtE,QACnCu6H,oBAAsBhoI,OAAKk4E,cACjC5iE,gBAAkBrd,OAAO8uI,QACrBxrD,QAAQzyE,KAAK,SAAA5kB,GAAC,OAAI8jJ,oBAAoB9jJ,EAAEC,MAAQD,GAAGmsB,YAAYusE,YAAa3kF,OAAOqd,gBAEvF,IAAMzI,gBACFkwE,WAAW,EACX3mF,UACAovI,wBACAn3H,oCACAjB,YAAY,EACZmzE,0CACAtzE,SAAUhV,OAAO+U,oBACjBsI,gBAAiBrd,OAAOqd,iBAG5BtV,OAAK46E,eAAentE,SAChB8H,gBACA1I,8BACAyI,iCAEJtV,OAAK+9E,kBAAkBtwE,OAAQ8H,QAAS1I,oFAK9B4uE,YAClB,IAAMrlF,KAAO/K,KAAK06B,QAAQ3vB,OAI1B,OAHIA,MACA/K,KAAKy5I,mBAAmB1uI,KAAKoS,UAAUoJ,KAAM6pE,YAE1CpwF,2EAOP,OAHIA,KAAK06B,QAAQ3vB,QACboyI,aAAAf,wBAAAH,aAAA5hJ,WAAA,wBAAA2F,MAAAtH,KAAAsH,MAEGA,6CAKP,OADAA,KAAK06B,QAAQm7G,aAAa,GAAGtjD,YAAY,eAClCvyF,uuDClGf,IAYqBo9I,kCAQjB,SAAAA,WAAa1yC,SAAUjvG,cAAc,IAAAgZ,MAAAzU,+JAAAq9I,CAAAr9I,KAAAo9I,YACjCp9I,KAAKgkF,IAAM15E,cACXtK,KAAKu2G,cAAgB96G,aACrBuE,KAAK8yI,YACDljB,UAAW,IAAItkD,mBAAJgyE,8BACN7tF,aAAYE,eAAgB,IAEjC9xB,WAAYpiC,aAAaoiC,WACzB0/G,iBAAkB9hJ,aAAa8hJ,kBAEnCv9I,KAAK+zI,iBAAmB,KACxB/zI,KAAK8zI,iBAAmB,IAAIttD,QAAQ,SAACn+D,SACjC5T,MAAKs/H,iBAAmB1rH,UAE5BwrH,oBAAoB7zI,MACpBA,KAAK8yI,WAAWljB,UAAUF,wBAAwBjgE,aAAYE,eAAgB,WAC1El7C,MAAKs/H,mBACLt/H,MAAKsiI,kBAAkBC,QAASzsD,OAAQ91E,MAAKwlF,SAAU73E,OAAQ,QAASkoE,WAAY,YAGxFtqF,KAAK+2I,kBAAoBt7I,aAAa8hJ,iBACtCv9I,KAAKuqG,cACLvqG,KAAKw9I,uBACLx9I,KAAKy9I,uBACLz9I,KAAKg1I,cACLh1I,KAAKi1I,cACLj1I,KAAK09I,oBACL19I,KAAKw2I,mBACLx2I,KAAK29I,0BACLrb,kBAAaG,iBAAiB/3B,SAASpB,eACvCz8B,sBAAsB7sE,KAAMy5F,iBAC5Bz5F,KAAK0qG,SAASA,UACd1qG,KAAK61I,6SAiBL,GAAIzwI,UAAO1D,OAAQ,CACf1B,KAAK6wH,OAALzrH,UAAA1D,QAAA,OAAA4L,EAAAlI,UAAA,GACA,IAAMqlG,QAAUzqG,KAAKyqG,UACrBzqG,KAAK2I,QAAQuqB,OAAb,GAAA7X,OAAuBwvF,0BAAiB77C,sBAAxCsuF,8BAAA,GAAAjiI,OACQovF,QAAQt/B,WAAc,OAE9B,IAAM2lD,QAAO,GAAAz1G,OAAMwvF,0BAAiB77C,qBAAvB,KAAA3zC,OAA+CovF,QAAQt/B,WAgBpE,OAfAU,wBAAW7rE,KAAM49I,kBAAc59I,KAAK2I,QAAQwT,OACxCgvD,UAAW2lD,UAEfjiD,+BAAkB7uE,KAAM8uE,8BACpBI,MAAO4hD,QACPM,OAAQvmB,0BAAiB97C,wBAEzBq7E,SAAU3/B,QAAQ2/B,SAClB4I,SAAUvoC,QAAQuoC,WAEtBhzI,KAAKq0F,SAAS,IAAI4nD,sBAAaj8I,MAC3B2uF,SAAUyE,gBACV1E,YAAakE,4BACb/C,uBAAwBuC,oBACzBvF,6BAAauB,0CACTpuF,KAEX,OAAOA,KAAK6wH,mDAyBZ,OAAIzrH,UAAS1D,QACT1B,KAAK69I,UAALz4I,UAAA1D,QAAA,OAAA4L,EAAAlI,UAAA,GACOpF,MAEJA,KAAK69I,0CAUZ,OAAO79I,KAAKgkF,kDAKZ,OADAhkF,KAAK6wH,OAAO10G,MAAMquH,OACXxqI,uDAKP,OADAA,KAAK6wH,OAAO10G,MAAMsuH,SACXzqI,iEAIP,OAAIoF,UAAO1D,OACA1B,KAEJA,KAAKy3I,wDAQR1gH,WACJ,IAAMnqB,OAAS5M,KAAK4M,SACZsyB,UAA8DtyB,OAA9DsyB,UAAWw7D,aAAmD9tF,OAAnD8tF,aAAc+6C,oBAAqC7oI,OAArC6oI,oBAAqB96C,YAAgB/tF,OAAhB+tF,YAChDmI,mBAAqB14B,sBAAsBswB,aAAc16F,KAAK82B,KAAMlqB,OAAO+tF,aAC3E9gE,MAAQ75B,KAAK65B,QACbC,OAAS95B,KAAK85B,SACd86F,mBAAqB9tC,6BAAc/vD,WAAWgB,MAAM,WAAY,YAEtE/3B,KAAK89I,SAAW92D,YAAY4tC,mBAAoB,OAAQ,MAAO11F,WAC9CnH,MAAM,QADP,GAAA1c,OACmBwe,MADnB,OAC8B9B,MAAM,SADpC,GAAA1c,OACiDye,OADjD,OAGhB,IAAMhL,KAAO9uB,KAAK89I,SAAShvH,OAC3Bg5D,wBAASh5D,MACL+K,YACAC,cACAikH,MAAOj7C,mBAAmB//F,KAAK,OVJP,SAAvBi7I,qBAAwBtjH,QAAS3D,WAC1C,IACM4jE,YADSjgE,QAAQ9tB,SACI+tF,YACrB45C,UAAY75G,QAAQs6G,WACpBR,UAAY95G,QAAQu6G,WAEpBgJ,oBAAsBj3D,YAAYjwD,UAAW,KAAM,GAAlB,GAAA1b,OAAyBs/E,YAAzB,KAAAt/E,ODrNV,wBCsN3Bk5H,UAAD,GAAAl5H,OAAes/E,YAAf,KAAAt/E,ODxNuC,gBCyN/Bm5H,UAAD,GAAAn5H,OAAes/E,YAAf,KAAAt/E,ODxNgC,gBCwN+BvS,QAAQ,SAACqZ,OAAU,IAAA+7H,OAAAC,yBACxCh8H,MADwC,GACvE4nF,UADuEm0C,OAAA,GAC5DE,iBAD4DF,OAAA,GAExE5pH,WAAa0yD,YAAYi3D,oBAAqB,KAAM,GAA5B,IAAA5iI,OAAoC+iI,mBAC5Dl/G,UAAS,GAAA7jB,OAAM+iI,iBAAN,UACfp3D,YAAY1yD,WAAY,IAAKy1E,UAAlB,IAAA1uF,OAAiC6jB,YACxCvL,OAAQ,SAAAA,OAACsqB,MAAOyxD,UACZA,SAASud,WAAYptB,UAAWnlE,QAAQw4G,aAAcnhH,MAAMksB,MAAMnvB,aURlFkvH,CAAqBh+I,KAAM8uB,MZmCP,SAAfuvH,aAAgB3jH,QAAS3D,UAAWkjE,OAAQiE,aACrDxjE,QAAQq8G,kBAAkBC,QAASzsD,OAAQ0P,OAAQ73E,OAAQ,aAAckoE,WAAY,UACrF,IACMqQ,YADSjgE,QAAQ9tB,SACI+tF,YACrB2jD,cAAgB5jH,QAAQu/D,SAAS1pF,KAAK,SAAC5V,EAAGyI,GAAJ,OAAUzI,EAAEiS,SAASqZ,MAAQ7iB,EAAEwJ,SAASqZ,QAC9Es4H,iBAAmBv3D,YAAYjwD,UAAW,KAAM,GAAlB,GAAA1b,OAAyBs/E,YAAzB,iBAC9B6jD,cAAgBh0E,mBAAmB9vC,QAAQ+jH,gBAC3CjlE,UACNwN,YAAYu3D,iBAAkB,IAAKD,cAAe,MAC9C3qH,OAAQ,SAAAA,OAACsqB,MAAOi8C,OACZ1gB,OAAO0gB,MAAMw2B,UACTzyE,YACAi8C,gBAIKskD,cAAcv2I,IAAI,SAAAnP,MAAI,OAAI0gF,OAAO1gF,QACzCgQ,QAAQ,SAAC9P,GACd,IAAMkhG,MAAQlhG,EAAEkhG,MACVj8C,MAAQjlD,EAAEilD,MAChBi8C,MAAMgE,YAAYA,aAClBhE,MAAM+yB,WACFptB,UAAWnlE,QAAQw4G,cAEG,IAA1Bh5C,MAAMttF,SAASw2F,QAAoBlJ,MAAMnoE,MAAMksB,MAAMnvB,UY1DrDuvH,CAAar+I,KAAM8uB,KAAM9uB,KAAKi6F,UAC1BpgE,YACAC,gBAEJ95B,KAAK0+I,iBZyGwB,SAAxBC,sBAAyB5nH,UAAWmI,WAAZ,OAA0B8nD,YAAYjwD,UAAW,KAAM,GAAImI,WAAWpQ,OYzG3E6vH,CAAsB7vH,KAAD,GAAAzT,OAAUs/E,YAAV,KAAAt/E,OAAyBo6H,sBACtE,IAAMphD,SAAWr0F,KAAKq0F,WAEtB,OJ7NuB,SAAlBuqD,gBAAmB/xD,YAAawH,UACzC,IAAK,IAAMv6F,OAAO+yF,iBACPvyF,eAAe5B,KAAKm0F,YAAa/yF,OACpC+yF,YAAY/yF,eAAgBugG,+BAAuBxN,YAAY/yF,KAAKihG,eAAe,WAE/E,OADgB1G,SAAS35D,QACV29D,sBAEnBxL,YAAY/yF,KAAK4/F,YAAYrF,SAAS35D,QAAQg/D,gBIqNlDklD,CAAgBvqD,SAASxH,cAAewH,UACjCr0F,yCAIP,OAAOA,KAAK8zI,uEAaZ,OADA9zI,KAAK26B,QAAS,EACP36B,yDAaP,OAFAA,KAAK26B,QAAS,EACd36B,KAAK61I,YAAY71I,KAAK61I,aAAa,KAC5B71I,mEAwBP,IAAM6+I,QAAU7+I,KAAK89I,UAAY99I,KAAK89I,SAAShvH,OACzC+K,MAAQ75B,KAAK65B,QACbC,OAAS95B,KAAK85B,SAHHglH,sBAIU9+I,KAAK++I,qBAAxB58C,GAJS28C,sBAIT38C,GAAIp6E,WAJK+2H,sBAIL/2H,WACZ,OACIs6E,cAAeriG,KAAK+xB,QACpB6mE,aAAcimD,QACdhlH,YACAC,cACA0gE,gBAAiBx6F,KAAK0+I,iBACtB1mH,gBAAiBmqE,GACjBqE,0BAA2Bz+E,WAC3B+/E,QAAS,EACT0H,QAAS,iDAUb,OACIvV,OAAQj6F,KAAKi6F,SAAShyF,IAAI,SAAAiyF,OAAK,OAAIA,MAAMtuE,cACzChf,OAAQ5M,KAAK4M,SACb6pF,KAAMz2F,KAAKy2F,OAAOxuF,IAAI,SAAAioD,MAAI,OAAIA,KAAKtkC,qDAKvC,OAAIxmB,UAAM1D,QACN1B,KAAK+hG,OAAL38F,UAAA1D,QAAA,OAAA4L,EAAAlI,UAAA,GACApF,KAAKojG,OAALh+F,UAAA1D,QAAA,OAAA4L,EAAAlI,UAAA,IACApF,KAAKq0F,WAAW/B,yBACTtyF,MAEJA,KAAK+hG,iDAyBNi9C,iBAAiB,IAAAt2E,MAAA7lD,MAAAlO,OAAA3U,KACjBi/I,iBAAmB1L,wBAAiBjgH,QAAQ0rH,kBAE5CpI,UAAY52I,KAAKuqG,WACjBssC,WACAluI,OACFsxF,UACAilD,YACIznI,KAAMzX,OAGVm/I,WAAa,EACbC,YAAa12E,UAAGrtD,OAAH9T,MAAAmhE,MAAA22E,8BAAapmJ,OAAOskB,OAAOvd,KAAKuqG,cAAa7oG,OACxD+oG,QAAUzqG,KAAKyqG,UACfj4E,MAAQxyB,KAAK09I,iBACbzjD,OAASglD,iBAAiB1uI,KAAK,SAAC5V,EAAGyI,GAAJ,OAAUzI,EAAEsrB,MAAQ7iB,EAAE6iB,QAAOlU,OAAO,SAACutI,UAAW/1C,UAAa,IAAAg2C,WACxFj3G,WAAaihE,SAAS/rF,IACtBgiI,OAASl3G,WAAWxvC,KACpB2mJ,OAASnsH,QAAQgV,YACjBwsC,cACN2qE,OAAO32I,QAAQ,SAAC0U,KACZA,IAAIyI,MAAQsjF,SAAStjF,MAAQk5H,WAC7B,IAAMh0E,UAAS,GAAA9vD,OAAMovF,QAAQt/B,WAAd9vD,OAA0B+jI,YACpCxI,UAAU4I,UACXJ,cACmC,IAA/B92G,WAAW2hE,kBACXz3E,MAAK,GAAAnX,OAAIwvF,0BAAiB37C,uBAArB,KAAA7zC,OPlWP,SOkWO,KAAAA,OAAyD8vD,aAAe,IAGrF2J,WAAW5uE,KAAKilE,aAEpBg0E,YAAcM,OAAO/9I,OACrB,IAAMqoG,UAAY6oC,uBAAgBj+H,OAAM2zB,WAAYsuG,UAAU4I,QAAS1qE,YACvEnsE,MAAMsxF,OAAShhG,OAAO4T,OAAOlE,MAAMsxF,OAAQ8P,WAC3C,IAAM21C,eAAiBzmJ,OAAOskB,OAAOwsF,WAIrC,OAHAu1C,WAAYC,WAAAD,WAAUjkI,OAAV9T,MAAAg4I,WAAAF,8BAAoBK,iBAChC9I,UAAU4I,QAAUE,eACpB7I,QAAQ2I,QAAUA,OACXF,eAGX32I,MAAM8O,KAAOzX,KACb,IAAM2/I,aACAL,WAAYz8H,UAAGxH,OAAH9T,MAAAsb,MAAAw8H,8BAAapmJ,OAAOskB,OAAOvd,KAAKuqG,cAElD+0C,UAAUx2I,QAAQ,SAACoxF,OACf,IAAMw2B,MAAQx2B,MAAMw2B,QACpB/nH,MAAMsxF,OAAOy2B,OAASx2B,MACtBylD,UAAUjvB,YAEdz2B,OAAOnxF,QAAQ,SAACoxF,OACZ,IAAMo5C,OAASH,yBAAyBj5C,MAAOvxF,OAC/Cg3I,UAAUzlD,MAAMw2B,SAAW4iB,SAG/BtzI,KAAKy+I,eAAiBkB,UACtB3/I,KAAKw2I,gBAAkBv9I,OAAO4T,OAAO7M,KAAKw2I,gBZrMjB,SAApBoJ,kBAAqB3lD,OAAQrxF,QACtC,IAAMstI,kBAgBN,OAfAj8C,OAAOnxF,QAAQ,SAACoxF,OAAU,IAAA2lD,cACK3lD,MAAMttF,SAAzBsjD,KADc2vF,cACd3vF,KAAM05C,SADQi2C,cACRj2C,SACR9yE,GAAKojE,MAAMpjE,MAChB,IAAK,KAAKhuB,QAAQ,SAACzN,MAChB,IAAI4G,MACEqJ,MAAQi/D,aAAac,WAAWnb,KAAM70D,MAAOuuG,SAASvuG,OAASuuG,SAASvuG,MAAMiQ,OAEhFrJ,MADA2G,OAAOvN,MACCuN,OAAOvN,MAAMkqB,UAAU,SAAAsiF,WAAS,OAA+C,IAA3CA,UAAU/Q,aAAa7wF,QAAQqF,SAEnE,GAEX4qI,eAAep/G,MAAQo/G,eAAep/G,QACvCo/G,eAAep/G,IAAIz7B,MAAQ4G,UAG5Bi0I,eYoLwD0J,CAAkB3lD,OAAQj6F,KAAK4I,WAC1F,IAAMk3I,WAAa9/I,KAAK2I,QAYxB,OAVAm3I,WAAWvtD,aACPz4F,IAAK,0BACLqxE,UAAS,GAAA9vD,OAAKwvF,0BAAiB77C,qBAAtB,KAAA3zC,OAA8CovF,QAAQt/B,aAEnE20E,WAAWl1C,0BAA0B3xG,OAAO6M,KAAK0sB,OAAQwjH,qCAAwBh2I,KAAMyqG,QAAQt/B,YAC3F,GACIrxE,IAAK,0BACLqxE,UAAS,GAAA9vD,OAAKwvF,0BAAiB77C,qBAAtB,KAAA3zC,OAA8CovF,QAAQt/B,aAEvEnrE,KAAKi6F,OAAOqlD,WACLrlD,+CAUP,IAAMsjD,iBAAmBv9I,KAAKu2G,cAAcgnC,iBAY5C,OAXAA,iBAAiBvG,QAASzsD,OAAQvqF,KAAMoiB,OAAQ,eAAgBkoE,WAAY,SAC5EtqF,KAAK2I,QAAQ4pF,aACTpnB,UAAS,GAAA9vD,OAAKwvF,0BAAiB77C,qBAAtB,KAAA3zC,OAA8Crb,KAAKyqG,UAAUt/B,aAE1E2b,6BAAc9mF,KAAK+xB,SAASyT,SAC5BxlC,KAAKq0F,WAAW7uD,SAEhB+3G,iBAAiBvG,QAASzsD,OAAQvqF,KAAKi6F,SAAU73E,OAAQ,eAAgBkoE,WAAY,UACrFtqF,KAAKi6F,SAASnxF,QAAQ,SAAAoxF,OAAK,OAAIA,MAAM10D,WACrC+3G,iBAAiBvG,QAASzsD,OAAQvqF,KAAKi6F,SAAU73E,OAAQ,UAAWkoE,WAAY,UAChFizD,iBAAiBvG,QAASzsD,OAAQvqF,KAAMoiB,OAAQ,UAAWkoE,WAAY,SAChEtqF,qFAUkBshB,YAAa5nB,KAAMqmJ,aAC5C,GAAoB,OAAhBz+H,YACA,OAAO,KAEX,IAAMrE,UAAY8iI,aAAe//I,KAAK+K,OACtC,OAAOyjE,yCAA4BvxD,UAAWqE,YAAa5nB,oDAY3D,OADAsG,KAAK+K,KAAK/K,KAAK61I,aAAa,IACrB71I,2DAUP,OACI4/F,oBAAqB5/F,KAAK84I,qBAC1BlwI,OAAQ5I,KAAK4I,SACbmC,KAAM/K,KAAK+K,OACX0rF,KAAMz2F,KAAKy2F,sFAUU,IAAA+Q,aACaxnG,KAAK4M,SAAnC+tF,YADiB6M,aACjB7M,YAAaD,aADI8M,aACJ9M,aACrB,OAAO,IAAAr/E,OAAKs/E,YAAL,KAAAt/E,OAAoBq/E,uEAYdr/F,MAEb,OADeq4I,YAAY1zI,KAAKi6F,SAAU,OAAQ5+F,4DAatCvC,MAEZ,OADe46I,YAAY1zI,KAAKi6F,SAAU,OAAQnhG,MACpC,2DA2BDqjC,EAAG34B,EAAGoJ,QACnB,IAAIqlH,UACAn7F,GAAI,MAEFkpH,SZvQ4B,SAA7BC,2BAA8BvlH,QAAS+F,UAChD,IAAM73B,OAAS8xB,QAAQ9xB,SACvB,IAAKA,OAAOuzB,EAAEz6B,SAAWkH,OAAOpF,EAAE9B,OAC9B,OAAO,KAEX,IAAMqJ,KAAO2vB,QAAQ3vB,OACf0rF,KAAO/7D,QAAQ+7D,OACfr5E,aAAerS,KAAKsS,kBACpBw5E,OAASxrB,WAAWziE,OAAQ,IAAK,GAAGkuF,aAAa,GACjDC,OAAS1rB,WAAWziE,OAAQ,IAAK,GAAGkuF,aAAa,GACjDE,WAAa55E,aAAay5E,QAAQr5E,IAAIzH,QACtCkhF,WAAa75E,aAAa25E,QAAQv5E,IAAIzH,QAEtCmqI,WAAa,IAAKlpD,WAAYH,SAAU,IAAKI,WAAYF,SAAS3sE,KAAK,SAAAjI,OAAK,OAC9EA,MAAM,KAAOvjB,gCAAiBC,aAAesjB,MAAM,KAAOvjB,gCAAiBE,WAE/E,IAAKohJ,UAAalpD,aAAe/3F,8BAAeC,YAAc+3F,aAAeh4F,8BAAeC,WACxF,OAAO,KAEX,IAAMoM,MAAQ40I,SAAS,GACjBj+I,MAAQmb,aAAa9R,OAAOrJ,MAC9BnI,IAAM28F,KAAKypD,SAAS,IAAI,GAAGn4G,OAAOtH,SAASy/G,SAAS,KACxD,GAAIA,SAAS,KAAOthJ,gCAAiBE,SAAU,CAC3C,IAAMorE,WAAaivE,6BAAI,IAAI5iI,IAAIxL,KAAKoS,UAAUpS,KAAK9C,IAAI,SAAApP,GAAC,OAAIA,EAAEoJ,WAC9DnI,IAAMmwE,gBAAgBC,WAAYpwE,KAGtC,YAAewT,IAARxT,MAAsBwR,QAASxR,MAAQ,KY4OzBmmJ,CAA2BjgJ,MACxCm8B,IACA34B,MAGJ,GAAiB,OAAbw8I,UAAqBpzI,OAAOmsF,aAAc,CAC1Ck5B,SAASn7F,GAAKkpH,SACd,IAAMG,SAAWngJ,KAAKogJ,qBAAqBjkH,EAAG34B,EAAGoJ,QAEjD,OADAqlH,SAASv2E,OAASykG,UAAYA,SAASrpH,GAAKqpH,SAASrpH,GAAKm7F,SAASn7F,GAC5Dm7F,SAGX,IAAMouB,QAAUrgJ,KAAKogJ,qBAAqBjkH,EAAG34B,EAAGoJ,UAAakqB,GAAI,MAIjE,OAHAm7F,SAAWh5H,OAAO4T,UAAWwzI,UAEpB3kG,OAAS2kG,QAAQvpH,GACnBm7F,2EAGW91F,EAAG34B,EAAGwD,MAMxB,IALA,IAAMizF,OAASj6F,KAAKi6F,SACdxxF,IAAMwxF,OAAOv4F,OACfk1D,MAAQ,KAGHr+D,EAAI,EAAGA,EAAIkQ,IAAKlQ,IAAK,CAC1B,IAAM2hG,MAAQD,OAAO1hG,GAKrB,IAH2B,IADZ2hG,MAAMttF,SACVutF,cACPvjC,MAAQsjC,MAAMpB,gBAAgB38D,EAAG34B,EAAGwD,OAEpC4vD,MACA,OAAOA,MAGf,OAAOA,wFAsDmBt1C,aAA0B,IAAb1U,OAAaxH,UAAA1D,OAAA,QAAA4L,IAAAlI,UAAA,GAAAA,UAAA,MAChDouE,UACA8sE,kBAAoBh/H,YACxB,GAAoB,OAAhBA,YACA,SAEJ,IAAM24E,OAASj6F,KAAKi6F,SACdxxF,IAAMwxF,OAAOv4F,OACf8rB,eAAelM,eACfg/H,mBAAqBrnJ,OAAO6M,KAAKwb,cACjCg/H,qBAAiBjlI,OAAAgkI,8BAAOiB,mBAAPjB,8BrPksBN,SAAjBkB,eAAiBlwI,KAAG,OAAIA,IAAI,GAAGpI,IAAI,SAACmmE,IAAK71E,GAAN,OAAY8X,IAAIpI,IAAI,SAAA8S,KAAG,OAAIA,IAAIxiB,OqPlsBdgoJ,CAAetnJ,OAAOskB,OAAO+D,iBAE/E,IAAK,IAAI/oB,EAAI,EAAGA,EAAIkQ,IAAKlQ,IAAK,CAC1B,IAAM2hG,MAAQD,OAAO1hG,IACc,IAA/B2hG,MAAMttF,SAASutF,cACf3mB,UAAMn4D,OAAAgkI,8BAAO7rE,QAAP6rE,8BAAkBnlD,MAAMsmD,yBAAyBF,kBAAmB1zI,WAGlF,OAAO4mE,mEAWQ16E,MAEf,OADA86I,eAAe,OAAQ96I,MAChBkH,mEAWS3E,MAEhB,OADAu4I,eAAe,OAAQv4I,MAChB2E,uDAlkBP,MAxDY,mDA4DZ,QAEQwW,WAEJonI,2DAyCkB,QAAA/2E,KAAAzhE,UAAA1D,OAARgf,OAAQ,IAAA7X,MAAAg+D,MAAAC,KAAA,EAAAA,KAAAD,KAAAC,OAARpmD,OAAQomD,MAAA1hE,UAAA0hE,MACtB,OAAA25E,sBAAWzgJ,KAAQ0gB,mkCC1I3B,IAAMggI,cAAgB,SAAhBA,cAAiBC,SAAD,OAA4BA,QAA5Bv7I,UAAA1D,OAAA,QAAA4L,IAAAlI,UAAA,GAAAA,UAAA,OAA8C6C,IAAI,SAAAW,QAAM,OAAIA,OAAOmJ,OAAO,SAACC,IAAKnZ,GAElG,OADAmZ,OAAGqJ,OAAAulI,+BAAO5uI,KAAP4uI,+BAAe/nJ,EAAEi+F,uBAYlB+pD,wBAA0B,SAA1BA,wBAA2B5a,UAAW9+G,WAAYo4E,aAAxB,OAC5B0mC,UAAUnoH,OAAO,SAAAlV,QAAM,OAAIue,WAAWzJ,MAAM,SAACpS,MAAOo7B,GAAR,OAAc99B,OAAO0C,OAAO9R,QAAU+lG,YAAY74D,QAS5Fo6G,gCAAqB,SAArBA,mBAAsBC,SAAUrmH,SAAiC,IAAxBsL,MAAwB5gC,UAAA1D,OAAA,QAAA4L,IAAAlI,UAAA,GAAAA,UAAA,GAAhB,EAAGlE,IAAakE,UAAA1D,OAAA,QAAA4L,IAAAlI,UAAA,GAAAA,UAAA,MAE/DsmI,OAGAhxG,QAHAgxG,OACAzuH,UAEAyd,QAFAzd,UACA+mG,aACAtpF,QADAspF,aAIJ,GAAI0nB,OAAO1lG,MAAQ,GAAI,CACnB,IAAM16B,MAAQogI,OAAO1lG,OACrBg+E,aAAal7G,QAAQ,SAACtP,OAClB,IAAMwnJ,MAAQ/jI,UAAUa,OAAO,SAAAlV,QAAM,OAAIA,OAAO0C,OAAO9R,QAAUA,QAC3DynJ,sBAAwBrU,sBAAsBoU,MAAOtV,OAAO1lG,MAAQ,IAO1E86G,mBAAmBC,UALfrV,cACAzuH,UAAW+jI,MACXh9B,aAAci9B,uBAGuBj7G,MAAQ,KAA/B3qB,OAAAulI,+BAAsC1/I,MAAK1H,gBAGjEwqH,aAAal7G,QAAQ,SAACtP,OAClBunJ,SAAS76I,QAATmV,OAAAulI,+BAAkB1/I,MAAK1H,YAW7B0nJ,YAAc,SAAdA,YAAejb,UAAWgE,aAAgB,IAExCkX,qBAGAlX,YAHAkX,qBACAC,eAEAnX,YAFAmX,eACAC,oBACApX,YADAoX,oBAGJ,OAAID,eAAe1/I,OAAS,EACjB0/I,eAAen5I,IAAI,SAACq5I,eAAkB,IAAAC,gBAAAC,2BACGd,cAAcY,cAAeH,sBADhC,GAClCM,eADkCF,gBAAA,GAClBG,kBADkBH,gBAAA,GAEzC,OAAOtb,UAAUz5G,WAAVnR,OAAAulI,+BAAsBa,gBAAtBb,+BAAyCc,mBAAzCd,+BAA+DS,0BAGtEpb,YASN0b,aAAe,SAAfA,aAAgBjnH,QAASknH,kBAAqB,IAAAC,iBAC5CniF,SAEAnlB,OAIA7f,QAJA6f,OACA0rF,UAGAvrG,QAHAurG,UACA6b,UAEApnH,QAFAonH,UACAr1B,UACA/xF,QADA+xF,UAIA20B,eAGA30B,UAHA20B,eACAW,eAEAt1B,UAFAs1B,eACAV,oBACA50B,UADA40B,oBAGAjX,SAEA0X,UAFA1X,SACAC,YACAyX,UADAzX,YAEE2X,QAAUZ,eAAgBhX,SAAYgX,eAAe1/I,YAIvDqgJ,eAAergJ,OAAS,EACxBg+D,MAAQqiF,eAAe95I,IAAI,SAACq5I,cAAeW,SAAY,IAAAC,gBAAAV,2BACJd,cAAcY,cAAeU,SADzB,GAC5CN,kBAD4CQ,gBAAA,GACzBC,kBADyBD,gBAAA,GAE7CE,YAAcnc,UAAUz5G,WAAVnR,OAAAulI,+BAAsBc,mBAAtBd,+BAA4CuB,mBAA5CvB,+BAAkES,uBAChFpX,aAAgBC,UAAW8X,QAAS7X,aAAcmX,eAClDr7C,SAAYmkC,kBAAUC,YAAaA,YAAc0X,eAAergJ,OAASugJ,SAE/E,OAAOL,iBAAiBQ,aAAenY,wBAAahkC,iBAAW67C,aAMnEpiF,OAASkiF,iBAAiB3b,WAAagE,aAHjBC,UAAW8X,QAAS7X,iBAGUlkC,SAFlCmkC,kBAAUC,0BAEmCyX,YAGnEvnG,OAAO6vF,UAAY7vF,OAAO6vF,eAC1ByX,iBAAAtnG,OAAO6vF,WAAUlkI,KAAjBqB,MAAAs6I,iBAAAjB,+BAAyBlhF,kjCCxG7B,IAoBa2iF,8BAAmB,SAAnBA,iBAAoB3nH,QAASurG,UAAWxZ,UAAWif,QAAW,IAEnEzB,YAEAxd,UAFAwd,YACAhkC,QACAwmB,UADAxmB,QAGAikC,UAEAD,YAFAC,UACAC,aACAF,YADAE,aAGCC,SAEDnkC,QAFCmkC,SACAC,YACDpkC,QADCokC,YAGDiY,eAMA5nH,QANA4nH,eACMC,SAKN7nH,QALAimC,KACAhxC,SAIA+K,QAJA/K,SACA/iB,OAGA8tB,QAHA9tB,OACAmkI,QAEAr2G,QAFAq2G,QACAtxC,aACA/kE,QADA+kE,aAEEhJ,KAAO9mE,SAAS8mE,OAChBwyC,UAAYt5G,SAASs5G,YACrBuZ,aAAe7yH,SAAS6yH,eACxB5yC,aAAejgF,SAASl0B,eAAe68B,WACvCmqH,eAAiB9yH,SAAS8yH,iBAC1BC,aAAe/yH,SAAS+yH,eACxBC,mBAAqBhzH,SAASgzH,qBAEhC1S,aAEAhH,UAFAgH,aACAC,YACAjH,UADAiH,YAEE0S,eAAiB7R,QAAQ8R,gBAAiB1Y,0BAAcD,qBAAaoY,oBACrEzZ,cAAiBj8H,cAAQgjG,0BAAcnZ,UAAMwyC,qBAEnDxc,UAAUq2B,kBAAoBJ,aAAa95I,OAC3C6jH,UAAUs2B,eAAiBN,eAAe75I,OAE1C,IAAMmgI,UAAYgI,QAAQ76B,WAAW2yB,aAAcpc,UAAW/xF,SAE9D8nH,aAAapY,UAAYoY,aAAapY,UAAYoY,aAAapY,aAC/DoY,aAAapY,UAAUC,aAAeuY,eAGtC,IAAMI,YhBTgB,SAAbC,WAAcxuB,MAAOyuB,UAAR,cAAA7nI,OAA6Bo5G,MAA7B,KAAAp5G,OAAsC6nI,UgBSxCD,CAAW7Y,SAAUC,aACnCzhI,QACFpF,EAAG0mI,UACH/tG,EAAGguG,cAGDgZ,cAAY9nI,OAAA+nI,+BACV1X,OAAO2X,UAAU,IADPD,+BACc1X,OAAO4X,UAAU,QAD/BjoI,OAAA+nI,+BAEV1X,OAAO2X,UAAU,IAFPD,+BAEc1X,OAAO4X,UAAU,MAE3CC,SAAYrT,YAAY1+H,IAAIwxI,aAAgC9S,YAAY92I,IAAI4pJ,aAAjC,IAAIT,SAarD,OAXAgB,SAASx4I,KAAKk7H,WACGxvC,KAAKsyC,WACLngI,OAAOA,QACPoxC,UAAU2oG,oBACVljD,aAAaA,cACb07C,cAAcgI,WAC/BlT,aAAax+H,IAAIuxI,YAAaO,UAC9BrT,YAAYr7H,OAAOmuI,aAnFH,SAAdQ,YAAe7zH,SAAU+7G,OAAQ6X,WAClCtf,IAAKD,KAAKl7H,QAAQ,SAACwC,OAChB,IAAMo0D,MAAQ/vC,SAAQ,GAAAtU,OAAI/P,MAAJ,YAChBm4I,SAAW/X,OAAM,GAAArwH,OAAI/P,MAAJ,WAAmB,GAAGvI,QAE5C28D,MAAM+jF,YAAc/jF,MAAM+jF,cAC3B/jF,MAAM+jF,UAAUv9I,KAAKq9I,UACrB5zH,SAAQ,GAAAtU,OAAI/P,MAAJ,UAAkBo0D,SA8E9B8jF,CAAY7zH,SAAU+7G,OAAQ6X,UAEvBtT,aAAa72I,IAAI4pJ,cAatBU,6BAAkB,SAAlBA,gBAAmB5yF,UAAW2lC,KAAMmR,UAAWloC,OAA7B,OACpB+N,6BAAgB3c,UAAW,SAAAZ,MAAI,OAAIA,MAAMumC,KAAM,SAACzsF,KAAMzR,GAAP,OAAaA,EAAIyR,KAAK+H,OAAO,SAACtX,EAAGT,GAE5E,OAAOS,GADIT,EAAE88B,GAAK8wE,YAEnB,MAAK3/F,IAAI,SAACioD,MACT,GAAIA,MAAQA,KAAK03C,WAAY,CACzB,IAAM+7C,SAAWzzF,KAAK03C,WADGg8C,iBAEKD,SAAS/2I,SAA/Bg3F,YAFiBggD,iBAEjBhgD,YAAa7G,KAFI6mD,iBAEJ7mD,KAErB,OAAO,IAAIr9B,MAAMmkF,UAAWpgI,OAAOkgI,UAAU/2I,QACzCqlG,SAAUrO,cAAgBkJ,iCAAgBL,MAAQ7I,cAAgBkJ,iCAAgBN,IAClFzP,YAGR,OAAO,IAAIr9B,MAAMokF,WAAYl3I,QAASmwF,MAAM,OAoE9CgnD,iCAAsB,SAAtBA,oBAAuBrpH,QAASspH,aAActkF,MAAOkwC,cAAiB,IAEpE1/C,KAIAx1B,QAJAw1B,KACApqD,KAGA40B,QAHA50B,KACAzK,KAEAq/B,QAFAr/B,KACAgxI,MACA3xG,QADA2xG,MAEEV,QAAUz7E,KAAKxuD,OAASoE,KAAKpE,OAC7BuiJ,cAAgBn+I,KAAKpE,OAASwuD,KAAKjoD,IAAI,SAACpP,EAAGN,GAAJ,OAAUuN,KAAKjC,KAAK8M,MAAMpY,EAAIozI,eAE3E,OAAOl+D,6BAAgBu2E,aAAY,GAAA3oI,OAAIhgB,KAAJ,YAAoB,SAAA6oJ,QAAM,OAAIA,QAAQD,cACrE,SAACC,OAAQ3rJ,GAAT,SAAA8iB,OAAkB6oI,OAAOnhJ,KAAK,KAA9B,KAAAsY,OAAsC9iB,KACzB0P,IAAI,SAAAi8I,QAAM,OAxBP,SAAlBC,gBAAmBrzF,UAAW93C,QAAS0mD,MAAOkwC,cAA5B,OAA6CniC,6BAAgB3c,UACjF,SAAAh/C,OAAK,OAAI,IAAI4tD,MAAM2wE,aAAezgC,4BAAgBnsF,OAAO3R,QAAQkH,QAAS,SAAClf,IAAKvB,GAAN,OAAYuB,IAAMvB,IAuB7D4rJ,CAAgB,KAAMD,OAAQxkF,MAAOkwC,cACnC3nG,IAAI,SAAC04D,KAAMj6B,EAAGnuC,GAAV,OAAgBooE,KAAKl9C,OAAOygI,OAAO3rJ,IAAIqU,OAAOy/H,YAajF+X,kCAAuB,SAAvBA,qBAAwB1pH,QAASglC,MAAOkwC,cAC1C,IAAIo0C,aAEA3S,SAOA32G,QAPA22G,SACAzoI,OAMA8xB,QANA9xB,OACAy7I,qBAKA3pH,QALA2pH,qBACAvzF,UAIAp2B,QAJAo2B,UACAu7E,MAGA3xG,QAHA2xG,MACAiY,SAEA5pH,QAFA4pH,SACA30H,SACA+K,QADA/K,SAGAnV,KAEA5R,OAFA4R,KACAjB,QACA3Q,OADA2Q,QAGAgrI,aACAlT,SADAkT,aAGAnD,eAEAiD,qBAFAjD,eACAW,eACAsC,qBADAtC,eAGAyC,QAEAD,aAFAC,QACAC,WACAF,aADAE,WAEEC,aAAeJ,SAASrT,cAAcpJ,UACtC8c,eAAiBL,SAASrT,cAAcnJ,YAE9Ckc,aAAelzF,eAEd,MAAOlT,EAAG35C,GAAG6E,QAAQ,SAAConD,MACnB,IAAM83E,SAAW93E,OAAStS,EAAI8mG,aAAatpI,OAASspI,aAAa3pI,IACjEipI,aApHkB,SAApBY,kBAAqBlqH,QAASmqH,OAAQnlF,OAAU,IAK9ColF,WAFApqH,QADA22G,SAGAyT,WAGJ,OAAO,SAACzpJ,KAAM2sI,UACV,IAAMvxC,KAAOquD,WAAU,GAAAzpI,OAAIhgB,OAE3B,GAAIo7F,MAAQA,KAAK/0F,OACb,GAAIrG,OAASuiD,GAAKviD,OAAS4I,EAAG,CAC1B,IAAMkjB,WAAa9rB,OAAS4I,EAAI6/H,KAAOC,SAEtCQ,QAASC,WAAW17H,QAAQ,SAAC8+D,UAAW3lE,OACrC,IAAM8iJ,WAAU,GAAA1pI,OAAM8L,YAAN9L,OAAmBusD,WAC/BggC,UAAY3lG,MACZ+iJ,YAAcvuD,KACduxC,WAAat7B,iB9BRf,W8BQwBs7B,WACtBpgC,UAAY,EAAIA,WAEfv8B,WAAWorB,KAAM,EAAGmR,aACrBo9C,gBAEJH,OAAOE,YAAcrB,6BAAgBmB,OAAOE,YAAaC,YAAap9C,UAAWloC,cAGrFmlF,OAAOI,YAAcvB,6BAAgBmB,OAAOK,SAAUzuD,KAAKxuF,IAAI,sBAAW,EAAGy3D,OAC7EmlF,OAAOM,eAAiBzB,6BAAgBmB,OAAOO,SAAU3uD,KAAK,GAAI,EAAG/2B,OAG7E,OAAOmlF,QAoFQD,CAAkBlqH,QAASspH,aAActkF,MAAzCklF,CAAgD10F,KAAM83E,YAjCd,IAAAqd,cAyCvDrB,aAJAiB,YArCuDI,cAqCvDJ,YACAK,cAtCuDD,cAsCvDC,cACAH,eAvCuDE,cAuCvDF,eACAI,iBAxCuDF,cAwCvDE,iBAGEld,QAAU4c,aAAeA,YAAYO,aAAa9jJ,OAASujJ,YAAYO,aACxEF,eAAiBA,cAAcE,aAAa9jJ,OAAS4jJ,cAAcE,gBAClEhd,QAAU2c,gBAAkBA,eAAeK,aAAa9jJ,OAASyjJ,eAAeK,aACjFD,kBAAoBA,iBAAiBC,aAAa9jJ,OAAS6jJ,iBAAiBC,gBA6CjF,QA1CMnqJ,KAAMoxG,eAAMg5C,QAASjrI,KAAK,GAAI01C,KAAMm4E,QAASI,WAAYkc,eAAe5pI,MACxE1f,KAAMqxG,gBAAO+4C,QAASjrI,KAAK,GAAI01C,KAAMm4E,QAASI,WAAYkc,eAAe5pI,MACzE1f,K9B/HS,M8B+HEoqJ,QAASlsI,QAAQ,GAAI22C,KAAMs4E,QAASC,WAAYkc,eAAevpI,SAC1E/f,K9B5HY,S8B4HEoqJ,QAASlsI,QAAQ,GAAI22C,KAAMs4E,QAASC,WAAYkc,eAAevpI,SAGtEtS,QAAQ,SAAC8D,OAAQ3K,OAC1B,IAAI6D,KACApE,OAEArG,KAIAuR,OAJAvR,KACAoqJ,QAGA74I,OAHA64I,QACAv1F,KAEAtjD,OAFAsjD,KACAu4E,WACA77H,OADA67H,WAWJ,GARIxmI,MAAQ,GACR6D,KAAO0+I,QACP9iJ,OAAS0/I,eAAe1/I,OAAS,EAAI0/I,eAAe1/I,OAAS,IAE7DoE,KAAO2+I,WACP/iJ,OAASqgJ,eAAergJ,OAAS,EAAIqgJ,eAAergJ,OAAS,GAEjEoE,KAAOA,KAAKmC,IAAI,SAAAoI,KAAG,OAAIA,IAAIpI,IAAI,SAAA/G,KAAG,OAAIyuB,SAAS+pE,aAAT/pE,CAAuBzuB,SACzDukJ,QAAQ/jJ,QAAU+mI,aAAeptI,MAAQ60D,MAAQpqD,KAAKpE,OAAQ,CAC9D,IAAMgkJ,UAAax1F,UAAMxuD,cAAQrG,WAC7B2d,WACA/W,MAAQ,GACRyjJ,SAAS5/I,KAAOA,KAChB4/I,SAASrZ,MAAQA,MAAM7xH,KACvBxB,QAAU+qI,iCAAoB2B,SAAU1B,aAActkF,MAAOkwC,gBAE7D81C,SAASrZ,MAAQA,MAAM9yH,QACvBmsI,SAAS5/I,KAAOA,KAAK,GAAGmC,IAAI,SAACnO,IAAKvB,GAAN,OAAYuN,KAAKmC,IAAI,SAAAxN,GAAC,OAAIA,EAAElC,OAExDygB,QAAU+qI,iCAAoB2B,SAAU1B,aAActkF,MAAOkwC,eAEjEo0C,aAAY,GAAA3oI,OAAIhgB,KAAJ,YAAqB2d,aAEjCgrI,aAAY,GAAA3oI,OAAIhgB,KAAJ,YAAqB,OAGlC2oJ,cAqIE2B,6BAAkB,SAAlBA,gBAAmBjrH,QAAS9tB,QAAW,IAE5C+iB,SAIA+K,QAJA/K,SACAs2G,UAGAvrG,QAHAurG,UACA2f,kBAEAlrH,QAFAkrH,kBACAtB,SACA5pH,QADA4pH,SAGIuB,aAGAj5I,OAHAi5I,aACA/0F,UAEAlkD,OAFAkkD,UACA9W,UACAptC,OADAotC,UAEFpyB,QAAUi+H,aAAaC,YACTl2C,aAAiBjgF,SAASl0B,eAAtC68B,WACF07D,SAAWiyC,UAAU5oH,kBACrB2vH,YAAcr9G,SAASq9G,cACvBtiC,SAAW/6E,SAAS+6E,WACVq4C,eAAmBpzH,SAAS8yH,iBAApC75I,OACQk6I,kBAAsBnzH,SAAS+yH,eAAvC95I,OACFm9I,eAAiBp2H,SAAS0xH,oBAAoBz0I,OAAQogI,aACtDqX,qBAAuB10H,SAAS9K,eAChCmhI,iBAGFlD,oCACAC,8BACAsB,0CACApqD,OAAQ+yC,YACRh5C,kBACA+xD,8BACAzB,kBACAjY,MAAOwZ,aAAaxZ,UACpBrE,SAAU6d,aAAa7d,aACvBl3E,oBACAnhC,mBAEE+vC,OACF6iF,SAAU5yH,SAASs2H,WAAWv7C,SAAS63C,UACvCsB,SAAUl0H,SAASs2H,WAAWv7C,SAASm5C,UACvCC,UAAWn0H,SAASs2H,WAAWv7C,SAASo5C,WACxCzT,SAAU1gH,SAASs2H,WAAWv7C,SAAS2lC,WAErC6V,eAAiBxW,gCAAoBqT,gBACrCoD,kBAAoBzW,gCAAoBoT,mBAE9CnzH,SAASy2H,aACTz2H,SAAS02H,aACT12H,SAASgzH,mBAAmB3oG,eAG5BrqB,SAAS22H,kBAlDuC,IAuD1CC,aACFrW,YAFAvgH,SAASs5G,YADTgH,aAIAA,aAAc,IAAI7+H,KAGtBue,SAASs5G,UAAUsd,aAEnB,IAAMC,kBACF55I,OAAQi5I,aACRvD,eAAgBgC,SAASrT,cAAcwV,qBAAqB92H,SAASq9G,eACrEr9G,kBACAgxC,KAAMjB,MAAM6iF,SACZxR,QAASuT,SAASrT,cAClBsV,wBACA9mD,aAAc7yF,OAAO2sE,QAEnBn8D,aAAe6oH,UAAU5oH,kBAC3BqvH,aAAezG,UACnB,IAAKr+G,QAAQm2E,SAAU,CACnB,IACM1+E,UhBrGe,SAAhBqnI,cAAiBrC,qBAAsBsC,aAAgB,IAAAvP,MAC1DxuI,OAAS3P,OAAOskB,OAAO8mI,sBAAsBp8I,IAAI,SAACoI,KAAQ,IAAAi7G,MAAAW,MACtD26B,cAAet7B,UAAGjwG,OAAH9T,MAAA+jH,MAAAqkB,8BAAat/H,MAClC,OAAO47G,UAAG5wG,OAAH9T,MAAA0kH,MAAA0jB,8BAAaiX,aAAa3+I,IAAI,SAACqD,OAClC,OAAIA,iBAAiBu5H,kBACVv5H,MAAMwrF,aAEVxrF,YAGf,OAAO8rI,UAAG/7H,OAAH9T,MAAA6vI,MAAAzH,8BAAa/mI,QAAbyS,OAAAs0H,8BAAwBgX,egB2FTD,CAAcrC,qBhB7GG,SAA9BwC,4BAA+BC,oBAAqB1pI,cAAiB,IAAAyF,MAC1Eja,UACEilI,YAAciZ,oBAAoB7+I,IAAI,SAAA8jE,MAAI,OAAKA,KAAK69B,eAG1D,OADAhhG,QADAA,UAAMyS,OAAAs0H,8BAAO/mI,UAAQia,UAAGxH,OAAH9T,MAAAsb,MAAA8sH,8BAAa9B,YAAY5lI,IAAI,SAAAkrH,KAAG,OAAIl6H,OAAOskB,OAAO41G,KAAKlrH,IAAI,SAAApP,GAAC,OAAIA,EAAEyS,eACvE0H,OAAO,SAAA1H,OAAK,OAAI8R,aAAa9R,QAAU8R,aAAa9R,OAAOkS,IAAIniB,OAAS8D,yBAAUE,YgBwG/EwnJ,CAA4BL,iBAAiBlE,eAAgBrc,UAAU5oH,oBAGhF0K,WAAa1I,UAAUrM,OAAO,SAAA1H,OAAK,OACrC8R,aAAa9R,QAAU8R,aAAa9R,OAAOkS,IAAIniB,OAAS8D,yBAAUE,YAChE0nJ,eAAiBn/H,QAAQK,SACzB68E,aAAe7rG,OAAO6M,KAAKmgI,UAAUr3H,gBAAgBrD,cACrDy7I,cAAgBjzE,4CAA8BxsE,WAA9B,GAA+B0+H,WAA/B5qH,OAAA+nI,+BAA6Ct+C,gBAC7DmiD,eAAiB15E,eAAey5E,cAAeD,gBAErDra,aAAezG,UAAUr+G,QAAQG,WAAWrmB,OAASqmB,YAAc,IAAKk/H,gBAAgBz6H,QAAQnN,WAIpG,IAEM6nI,gBDtZoB,SAAjBC,eAAkBlqI,UAAWonI,qBAAsBzC,kBAC5D,IAAIwF,iBACE5C,WACAC,cACAtD,wBACA5mG,UACAunG,aAEAr1B,UAAYxzH,OAAO4T,UAAWw3I,sBAEhChB,UAGA52B,UAHA42B,UACAC,UAEA72B,UAFA62B,UAUJ,GARI72B,UADAs1B,eAGWj5I,QAAQ,SAACu+I,SACpBlG,qBAAqBj7I,KAArBqB,MAAA45I,qBAAoBP,+BAASyG,YAEjC56B,UAAU00B,qBAAuBA,qBAG7BkC,UAAU3hJ,OAAS,EAAG,CAEtB,IAAM4J,MAAQ+3I,UAAU,GAAG/gJ,WACrBglJ,kBAAoB1a,sBAAsB3vH,UAAW3R,OAG3Dw1I,gCAAmB0D,SAAW9Y,OAAQ2X,UAAWpmI,oBAAW+mG,aAAcsjC,oBAG1E9C,QAAQ17I,QAAQ,SAAC5H,KAAQ,IAAAqmJ,eAEdC,mBAFchG,2BAEQd,cAAc2C,WAFtB,MAGfoE,kBAAoB5G,wBAAwB5jI,UAAWuqI,mBAAoBtmJ,KAG3EwmJ,uBAAyBxG,YAAYuG,kBAAmBh7B,YAC9D86B,eAAAH,eAAclhJ,KAAdqB,MAAAggJ,eAAA3G,+BAAsB8G,yBAEtBA,uBAAuB5+I,QAAQ,WAC3Bg5I,UAAU57I,MAAMm9I,UAAWniJ,cAGhC,KAAAymJ,iBAEHA,gBAAAP,eAAclhJ,KAAdqB,MAAAogJ,gBAAA/G,+BAAsBM,YAAYjkI,UAAWwvG,aAOjD,GAHA26B,cAAgBA,cAAc1lJ,OAAS,EAAI0lJ,mBAGvC9D,UAAU5hJ,OAAS,EAAG,CACtB,IAAMkmJ,cAAgBtE,UAAUr7I,IAAI,SAAApP,GAAC,SAAAwiB,OAAOxiB,KAEtCyS,OAAQs8I,cAAc,GACtBC,qBAAuBjb,sBAAsB3vH,UAAW3R,QAG9Dw1I,gCAAmB2D,YACf/Y,OAAQkc,cACR3qI,oBACA+mG,aAAc6jC,uBAGlBT,cAAct+I,QAAQ,SAACg/I,IAAKC,QACxBjG,UAAUiG,QAAUjG,UAAUiG,iBAC9BtD,WAAW37I,QAAQ,SAAC5H,IAAK8mJ,QACrBztG,OAAOwtG,QAAUxtG,OAAOwtG,YAGxB,IAAM9hB,UAAY6hB,eAAezpJ,oBAAYypJ,IAAM7qI,UAG7CwqI,kBAAoB5G,wBAAwB5a,UAAW2hB,cAAe1mJ,KACtEw5B,SACF6f,cACA0rF,UAAWwhB,kBACX3F,WACIuB,UAAWvB,UAAUiG,QACrBzE,WAAYA,UAAWpiJ,KACvBkpI,SAAU2d,OACV1d,YAAa2d,QAEjBv7B,qBAEJk1B,aAAajnH,QAASknH,2BAK9BwF,cAAct+I,QAAQ,SAACg/I,IAAKC,QACxBjG,UAAUiG,QAAUjG,UAAUiG,iBAC9B,IAAMrtH,SACF6f,cACA0rF,UAAW6hB,KAAO7qI,UAClB6kI,WACIuB,UAAWvB,UAAUiG,QACrBzE,kBACAlZ,SAAU2d,OACV1d,YAAa,GAEjB5d,qBAGJk1B,aAAajnH,QAASknH,oBAK9B,IAAMqG,kBAAoBxD,WAAW/iJ,OAAS,EAAI+iJ,WAAW,GAAGx8I,IAAI,SAACmmE,IAAK71E,GAAN,OACpDksJ,WAAWx8I,IAAI,SAAA8S,KAAG,OAAIA,IAAIxiB,OAAOksJ,WAEjD,OAASlqG,cAAQiqG,gBAASC,WAAYwD,mBCqSdd,CAAeza,aAAc2X,qBAFjC10H,SAASu4H,kBAAkB1B,mBAI/C72H,SAASs5G,YAAYiH,YAAYpnI,QAAQ,SAACq/I,aACtCA,YAAY3iH,WAEhB7V,SAASs5G,YAAYiH,YAAYzqG,QACjC9V,SAAS8hH,YAAYyV,gBAAgB3sG,QAhGW,IAAA6tG,mBhB1OnB,SAApBC,kBAAqBpf,UAAWxyC,MACzC,IAAI6zC,MAAQ,KACRC,MAAQ,KAERwF,SAEA9G,UAFA8G,SACAC,SACA/G,UADA+G,SAGGsY,SAEH7xD,KAFAt6D,EACGosH,SACH9xD,KADAjzF,EAeJ,OAZA8kJ,UAAYA,SAASx/I,QAAQ,SAAC0/I,QAC1B,IAAM9xD,MAAQq5C,SAAS32I,IAAIovJ,SAC3Ble,MAAQA,WACFpkI,KAAKwwF,SAGf6xD,UAAYA,SAASz/I,QAAQ,SAAC0/I,QAC1B,IAAM7xD,MAAQq5C,SAAS52I,IAAIovJ,SAC3Bje,MAAQA,WACFrkI,KAAKywF,UAIX2zC,YAAOC,agBmTc8d,CAAkB14H,SAASs5G,YAAat5G,SAAS8mE,QAAlE6zC,MAlGwC8d,mBAkGxC9d,MAAOC,MAlGiC6d,mBAkGjC7d,MAEf56G,SAAS8mE,MACLt6D,EAAGmuG,MACH9mI,EAAG+mI,QAEP,IAAM5hI,MAAQgnB,SAAShnB,SAEtB2hI,MAAOC,OAAOzhI,QAAQ,SAACqiI,QAAS9vI,MAC7B,IAAM2wE,eACNm/D,QAAUA,aACFriI,QAAQ,SAAC2tF,KAAMvkF,KACnBukF,KAAK3tF,QAAQ,SAAConD,KAAM03C,WAChB57B,WAAU,GAAA3wD,OAAInJ,KAAJmJ,OAAUusF,YAAe,SAG3Cj/F,MAAMuqB,OAAN,GAAA7X,OAAgBwvF,0BAAiB17C,uBAAjC,YAAA9zC,OAAkEhgB,KAAO,IAAM,KAAO2wE,cAE1Fr8C,SAAS84H,YAAY7C,kBAAmBh5I,QAExC,IAtHgD87I,kBAzHpB,SAAnBC,iBAAoBjuH,QAAS22G,SAAU3xE,MAAOkwC,cAAiB,IAEpE3U,WAUCvgE,QAVDugE,WACAD,UASCtgE,QATDsgE,UACAqpD,qBAQC3pH,QARD2pH,qBACAtB,eAOCroH,QAPDqoH,eACAD,kBAMCpoH,QANDooH,kBACAhyF,UAKCp2B,QALDo2B,UACAk3E,SAICttG,QAJDstG,SACAqE,MAGC3xG,QAHD2xG,MACAiY,SAEC5pH,QAFD4pH,SACA30H,SACC+K,QADD/K,SAgBEq0H,aAAeI,mCAbjBx7I,QACI4R,KAAMuoI,eACNxpI,QAASupI,mBAEbzR,kBACAgT,0CACAvzF,oBACAk3E,kBACAqE,YACAiY,kBACA30H,mBAG0D+vC,MAAOkwC,cAEjEu1C,eAQAnB,aARAmB,eACAI,iBAOAvB,aAPAuB,iBACAN,YAMAjB,aANAiB,YACAK,cAKAtB,aALAsB,cACAsD,YAIA5E,aAJA4E,YACAC,WAGA7E,aAHA6E,WACAC,cAEA9E,aAFA8E,cACAC,aACA/E,aADA+E,aApCoEt9B,MAAAu9B,4BAsC1B/D,YAAaK,cAAeH,eAAgBI,kBACrFt9I,IAAI,SAAApP,GAAC,OAAKA,EAAIA,EAAE2sJ,kBAvCmD,GAsCjEN,SAtCiEz5B,MAAA,GAsCvDw9B,OAtCuDx9B,MAAA,GAsC/C25B,SAtC+C35B,MAAA,GAsCrCy9B,OAtCqCz9B,MAAA,GAAAC,MAAAs9B,4BAwCrCJ,YAAaG,cAC3C9gJ,IAAI,SAAAxN,GAAC,OAAKA,EAAIA,EAAE+qJ,aACAv9I,IAAI,SAAAsS,GAAC,OAAIA,EAAEirI,oBA1CwC,GAwCjE2D,WAxCiEz9B,MAAA,GAwCrD09B,YAxCqD19B,MAAA,GA2CpE29B,YAAcJ,OAAOvnJ,OAAS,GAAK,EACvCwjJ,SAASxjJ,QAAU2nJ,cACnB,IAAIC,YAAcJ,OAAOxnJ,OAAS,GAAK,EACvC0jJ,SAAS1jJ,QAAU4nJ,cAGnB,IAAIC,WAAaJ,WAAWznJ,OAASynJ,WAAWlhJ,IAAI,SAACpP,EAAGN,GAEpD,OADA2sJ,SAAS3sJ,GAAK2sJ,SAAS3sJ,IAAM2sJ,SAAS3sJ,UACtC8iB,OAAA+nI,+BAAWvqJ,GAAXuqJ,+BAAiB8B,SAAS3sJ,OACxB2sJ,SAAWA,SAASj9I,IAAI,SAAApP,GAAC,OAAKA,QAG9B2wJ,YAAcP,OAAOvnJ,OAASunJ,OAAOhhJ,IAAI,SAACpP,EAAGN,GAAJ,OAAWM,GAAXwiB,OAAA+nI,+BAAkBgG,YAAY7wJ,WAAe6wJ,YAAY1nJ,OACpG0nJ,YAAYnhJ,IAAI,SAAApP,GAAC,OAAAuqJ,+BAAQvqJ,QAEvB4wJ,aACFZ,YACgBA,WAAWrD,aACnB18I,QAAQ,SAACrO,GACQA,EAAE+qJ,aACV18I,QAAQ,SAACqzB,EAAG5jC,GACrBkxJ,UAAUlxJ,GAAKkxJ,UAAUlxJ,OACzBkxJ,UAAUlxJ,GAAG2N,KAAKi2B,OAK1BipH,SAAS1jJ,QACT+nJ,UAAUvjJ,KAAKk/I,UAInB,IAAIsE,gBACAR,OAAOxnJ,QACPgoJ,aAAaxjJ,KAAKgjJ,QAEtB,IAAMS,oBAAsBD,aAAahoJ,OACrConJ,eACgBA,cAActD,aACtB18I,QAAQ,SAACrO,GACQA,EAAE+qJ,aACV18I,QAAQ,SAACqzB,EAAG5jC,GACrBmxJ,aAAanxJ,EAAIoxJ,qBAAuBD,aAAanxJ,EAAIoxJ,yBACzDD,aAAanxJ,EAAIoxJ,qBAAqBzjJ,KAAKi2B,OAKvD,IAAKotH,WAAW7nJ,SAAW8nJ,YAAY9nJ,OAAQ,CAC3C,IAAMi/D,KAAO,IAAIjB,MAAMokF,UACvBnjF,KAAKipF,kBAAkB5uD,UAAWC,YAClCsuD,aAAe5oF,OAGnB,KAAK8oF,UAAU/nJ,QAAYgoJ,aAAahoJ,QAAWgoJ,aAAa,GAAGhoJ,QAAS,CACxE,IAAMi/D,MAAO,IAAIjB,MAAMokF,UACvBnjF,MAAKipF,kBAAkB5uD,UAAWC,YAClCyuD,eAAiB/oF,QAGrB,OACInmD,MAAO+uI,WAAYC,aACnBjwI,SAAUkwI,UAAWC,cACrB1F,0BACAsF,wBACAD,yBA8IAV,CAAiB3C,iBAVjBzB,aAAc2C,gBACdpC,WAAYn1H,SAAS8mE,QASuB/2B,MAAOkwC,cALnDp1F,KA5H4CkuI,kBA4H5CluI,KACAjB,QA7H4CmvI,kBA6H5CnvI,QACAyqI,aA9H4C0E,kBA8H5C1E,aACAqF,YA/H4CX,kBA+H5CW,YACAC,YAhI4CZ,kBAgI5CY,YAMJ,OAHA35H,SAASk6H,UAAUrvI,MACnBmV,SAASm6H,aAAavwI,UAGlBiB,KAAMmV,SAASk6H,YACftwI,QAASoW,SAASm6H,eAClBvsI,OAAQoS,SAAS8hH,cACjB0U,oCACAD,8BACA1qE,UACIzgE,IAAKsuI,YACLj7E,IAAKk7E,aAETx4F,UAAWkzF,aACXt+C,YACIgnC,0BACAqT,YAAa9Z,aC5lBZ8jB,gBACTtuJ,gBACAkvI,SACAgY,sBACA3V,eACAwV,gBACA4D,YACAC,YACAwD,aACAC,gBACArY,eACAV,WACAr3C,w3CCSiBswD,0CAOjB,SAAAA,eAAavuJ,4KAAcwuJ,CAAAjqJ,KAAAgqJ,gBACvBhqJ,KAAKkqJ,aACLlqJ,KAAKmqJ,gBACLnqJ,KAAKoqJ,iBACLpqJ,KAAKu2G,cAAgB96G,aACrBuE,KAAKqqJ,cACLrqJ,KAAKsqJ,iBACLtqJ,KAAKuqJ,gBACLvqJ,KAAKwqJ,SAAYnH,aAAeC,cAChCtjJ,KAAKyqJ,cAAiBrJ,kBAAoBW,mBAC1C/hJ,KAAK0qJ,uBACL1qJ,KAAK2qJ,UACL3qJ,KAAK4qJ,cACL5qJ,KAAK6qJ,OACD1uH,KACA34B,KACAgvC,SACA9Z,QACA6nE,UAEJ1zB,sBAAsB7sE,KAAM+pJ,gBAC5B/pJ,KAAKipI,UAAU4G,2UAUQ,IAAAp7H,MAAAzU,KACvB,OAAIoF,UAAa1D,QACbzI,OAAOub,QAAPpP,UAAA1D,QAAA,OAAA4L,EAAAlI,UAAA,IAAgC0D,QAAQ,SAAC5H,KACrCuT,MAAKy1I,UAAUhpJ,IAAI,IAAMA,IAAI,KAE1BlB,MAEJA,KAAKkqJ,wDAUI,QAAAv1I,OAAA3U,KAAA6mE,KAAAzhE,UAAA1D,OAANopJ,KAAM,IAAAjiJ,MAAAg+D,MAAAC,KAAA,EAAAA,KAAAD,KAAAC,OAANgkF,KAAMhkF,MAAA1hE,UAAA0hE,MAChB,OAAIgkF,KAAKppJ,SACJwiI,KAAMC,OAAQC,OAAQC,YAAaC,YAAYx7H,QAAQ,SAACrO,GACrDka,OAAKi2I,WAAL,GAAAvvI,OAAmB5gB,EAAnB,QAA6BqwJ,KAAK,GAAL,GAAAzvI,OAAW5gB,EAAX,SAAsBka,OAAKi2I,WAAL,GAAAvvI,OAAmB5gB,EAAnB,UAEhDuF,MAEJA,KAAK4qJ,+CAWZ,OAAIxlJ,UAAK1D,QACL1B,KAAK6qJ,MAAQ5xJ,OAAO4T,UAAW7M,KAAK6qJ,MAAvBzlJ,UAAA1D,QAAA,OAAA4L,EAAAlI,UAAA,IACNpF,MAEJA,KAAK6qJ,8CAUG,IAAAzzI,OAAApX,KACf,OAAIoF,UAAO1D,QACPzI,OAAOub,QAAPpP,UAAA1D,QAAA,OAAA4L,EAAAlI,UAAA,IAA0B0D,QAAQ,SAACrO,GAC/B2c,OAAKozI,QAAQ/vJ,EAAE,IAAMA,EAAE,KAEpBuF,MAEJA,KAAKwqJ,0DAUa,IAAA92H,OAAA1zB,KACzB,OAAIoF,UAAY1D,QACZzI,OAAOub,QAAPpP,UAAA1D,QAAA,OAAA4L,EAAAlI,UAAA,IAA+B0D,QAAQ,SAACrO,GACpCi5B,OAAK+2H,aAAahwJ,EAAE,IAAMA,EAAE,KAEzBuF,MAEJA,KAAKyqJ,6EAWK79I,OAAQogI,aACzB,IAAM+Y,kBACA1E,uBA2BN,OA1B4Bx1C,qBAAMC,sBAAOC,uBAEtBjjG,QAAQ,SAACzN,MACxB,GAAIuR,OAAOvR,OAASuR,OAAOvR,MAAMiQ,MAAO,CACpC,IAAM6nH,IAAMvmH,OAAOvR,MACnB0qJ,eAAe1qJ,MAAQ83H,IAAI7nH,MAC3B+1I,oBAAoBn7I,KAAKitH,IAAI7nH,UAIjCsB,OAAM,QACNy0I,oBAAoBn7I,KAApBqB,MAAA85I,oBAAmB0J,kCAASn+I,OAAO2sE,SAGnCyzD,YAAYtrI,QACZsrI,YAAYlkI,QAAQ,SAACoxF,OACbA,MAAM0P,UACN3wG,OAAOskB,OAAO28E,MAAM0P,UAAU9gG,QAAQ,SAACqqH,KAC/BA,MAAmD,IAA5CkuB,oBAAoBp7I,QAAQktH,IAAI7nH,QACvC+1I,oBAAoBn7I,KAAKitH,IAAI7nH,MAAQ6nH,IAAI7nH,MAAQ6nH,SAMrEnzH,KAAKiqI,aAAcoX,0CACZ0E,qEAUKvrI,KAAMu2H,SAClB,OAAIv2H,MACAxa,KAAKgrJ,gBAAkBla,wBAAwB9wI,MAAQ3E,KAAM4oI,IAAKr7H,OAAQ4R,MAAQu2H,SAC3E/wI,MAEJA,KAAKgrJ,kEAUFzxI,QAASw3H,SACnB,OAAIx3H,SACAvZ,KAAKirJ,cAAgBna,wBAAwB9wI,MAAQ3E,KAAM2oI,IAAKp7H,OAAQ2Q,SAAWw3H,SAC5E/wI,MAEJA,KAAKirJ,4DAWJtqF,MACR,IAAM+pC,SAAW1qG,KAAK0qG,WAOtB,OALAzxG,OAAOskB,OAAOmtF,UAAU5hG,QAAQ,SAACrO,GACzBA,EAAEJ,qBAAqBsmE,OACvBA,KAAOlmE,KAGRkmE,iEAWQjmC,SAIf,OAFA16B,KAAKwiJ,iBAEE,SAACvc,UAAWxZ,UAAWif,QAAvB,OAAkC2W,8BAAiB3nH,QAASurG,UAAWxZ,UAAWif,iDAUpFwf,WAAY7+I,UACjBrM,KAAKkrJ,cAAcpiJ,QAAQ,SAACiS,IAAKgtI,QAC7BhtI,IAAIjS,QAAQ,SAACslE,IAAK45E,QACd37I,SAAS07I,OAAQC,OAAQ55E,6DAYjC,IAAM9nD,OAAStmB,KAAKiqI,cAKpB,OAHAhxI,OAAOub,QAAQxU,KAAK0rI,UAAU5iI,QAAQ,SAACrO,GACnC6rB,OAAO7rB,EAAE,IAAMA,EAAE,KAEd6rB,iEASP,OAAOtmB,KAAKy2F,MACRt6D,EAAG,IAAI5lB,IACP/S,EAAG,IAAI+S,sDAWFqvI,kBAAmBh5I,QAAQ,IAAAm6D,OAAA/mE,KAEhC6lJ,aAEAj5I,OAFAi5I,aACAn1B,MACA9jH,OADA8jH,MAGApnB,cAEAs8C,kBAFAt8C,cACA6hD,mBACAvF,kBADAuF,mBAPgCC,mBAYhCprJ,KAAKvE,eAFOoiC,WAVoButH,mBAUhC9yH,WACAilH,iBAXgC6N,mBAWhC7N,iBAGE5S,WAEA0gB,WlBxNmB,SAApBC,kBAAqB1+I,QAC9B,IAAMy+I,cAQN,Od6KuB,cAID,YAIA,ac1LZviJ,QAAQ,SAACuoD,WACM/jD,IAAjBV,OAAOykD,QACPg6F,WAAWh6F,MAAQzkD,OAAOykD,SAG3Bg6F,WkB+MgBC,CAAkBzF,kBAC/B70B,YAAcosB,uBAAWnsB,WAAW,GACpCs6B,gBACA5iJ,MAAQ3I,KAAK2I,QA6BnB,IAAK,IAAM7O,OA5BXkG,KAAK8I,QhClGe,cgCkGO,SAACvQ,EAAGsiB,EAAGsnF,IAC9B,IAAI1qF,KAAO0qF,GAAG1+E,SACd,IAAKhM,KAAM,CACP,IAAM0zD,UAAS,GAAA9vD,OAAM9iB,GAAN8iB,OAAUR,GAEzBpD,KAAO2lI,uBAAWvjJ,QACdyvG,4BACA6hD,wCAEAttH,sBACA0/G,oCAEJgO,aAAapgF,WAAa,KAC1B1zD,KAAKgzF,SACD2/B,SAAU7xI,EACVy6I,SAAUn4H,EACVswD,sBAEJ1zD,KAAK9O,MAAMA,OACXw5F,GAAG1+E,OAAOhM,OAEbkzH,MAAMpyI,KAAOoyI,MAAMpyI,OACpBoyI,MAAMpyI,GAAGsiB,GAAKpD,KACdA,KAAKujI,YAAYtqB,OACjBj5G,KAAKiiF,YAAY3yB,OAAK2yB,eACtByI,GAAGv1F,OAAOy+I,cAGIr6B,YACdroH,MAAMuqB,OAAN,GAAA7X,OAAgBwvF,0BAAiB97C,sBAAjC,KAAA1zC,OAA0DvhB,KAAOyxJ,cAIrE,OADAhO,iBAAiBvG,QAASzsD,OAAQogD,MAAOvoH,OhC1JtB,cgC0J2CkoE,WhC9IlD,SgC+ILtqF,KAAK2qI,MAAMA,qDASV/9H,OAAQq5H,UAAWqe,UAAU,IAEjC9xG,MAIA5lC,OAJA4lC,MACA+tD,MAGA3zF,OAHA2zF,MACA7nE,KAEA9rB,OAFA8rB,KAGE9Q,QADFhb,OADAi5I,aAEyBC,YAPQ0F,mBAWjCxrJ,KAAK6kB,eAFLw+H,UATiCmI,mBASjCnI,UACAC,UAViCkI,mBAUjClI,UAEE15C,UACFp3D,YACA+tD,YACA7nE,WAEEs2G,eAAW3zH,OAAA0vI,kCAAO1H,UAAUp7I,IAAI,SAAAxN,GAAC,OAAIA,EAAE6H,cAA5ByoJ,kCAA4CzH,UAAUr7I,IAAI,SAAAxN,GAAC,OAAIA,EAAE6H,eAC5EmpJ,YACFhjF,QAAS67E,SAASrT,cAAcya,uBAAuBzlB,UAAWr8B,SAAUolC,YAAapnH,SACzF6uE,KAAMz2F,KAAKy2F,OACXmT,mBAGJ,OADA06C,SAASqH,eAAeC,gBAAgBH,YACjCzrJ,mFAMP,OAFAA,KAAKwqJ,WACLxqJ,KAAKyqJ,gBACEzqJ,6DASO,IAAA6rJ,WAKV7rJ,KAAKy2F,OAHLjkD,MAFUq5G,WAEVr5G,MACA+tD,MAHUsrD,WAGVtrD,MACA7nE,KAJUmzH,WAIVnzH,KAGJ,OACI8Z,MAAOu4G,kCAAIv4G,OACX+tD,MAAOwqD,kCAAIxqD,OACX7nE,KAAMqyH,kCAAIryH,2DAWHr9B,MACX,OAAO2E,KAAKy2F,OAAL,GAAAp7E,OAAehgB,mEAUP+hB,aAAcxQ,OAAQ03I,UAAU,IAAAwH,OAAA9rJ,KACzCgtI,YAAchtI,KAAKgtI,cACzBhtI,KAAKqhJ,oBAAoBz0I,OAAQogI,aACjC,IAAM+e,YAAczH,SAASqH,eAAez1C,YACxC94F,0BACAxQ,cACA6pF,KAAMz2F,KAAKy2F,SAGX8mD,iBACAv9I,KAAKvE,eADL8hJ,kBAGHzxC,sBAAOC,sBAAOF,sBAAM/iG,QAAQ,SAACrO,GAC1BqxJ,OAAKr1D,OAAOh8F,GAAKsxJ,YAAYtxJ,KAGjC8iJ,iBAAiBvG,QAASzsD,OAAQvqF,KAAKy2F,OAAQr0E,OhC3P5B,cgC2PiDkoE,WhCnPxD,SgCoPZizD,iBAAiBvG,QAASzsD,OAAQvqF,KAAK2qI,QAASvoH,OhCxO3B,egCwOkDkoE,WhChP3D,SgCkPZ,IAAMqgD,SACA6X,aAAexiJ,KAAKwiJ,eAY1B,OAVAxiJ,KAAK8I,QhCzOe,cgCyOO,SAACvQ,EAAGsiB,EAAGsnF,IAC9BA,GAAG1L,KAAKs1D,aACR5pD,GAAG1+E,UAAY0+E,GAAG1+E,SAAS21H,cAAcxsI,QACzCu1F,GAAGoH,SAAS+6C,SAASqH,eAAe9I,eAAej2I,OAAQ41I,aAAajqJ,GAAGsiB,KAC3EsnF,GAAG6pD,cAEHrhB,MAAMzkI,KAAKi8F,GAAG1+E,YAGlB85H,iBAAiBvG,QAASzsD,OAAQogD,MAAOvoH,OhC1P1B,UgC0P2CkoE,WhC9P9C,SgC+PLtqF,yDAWIisJ,aAAc9kI,WAAYva,QACrC,IAAIs/I,cACAC,eAEA3xI,KAEAyxI,aAFAzxI,KACAjB,QACA0yI,aADA1yI,QALyC6yI,oBAUzCpsJ,KAAKvE,eAFOm0G,aAR6Bw8C,oBAQzC9zH,WACAilH,iBATyC6O,oBASzC7O,iBAGA8O,YAEAz/I,OAFAy/I,YACA1xD,YACA/tF,OADA+tF,YAEE01C,SAAWrwI,KAAKimJ,WAAWjmJ,KAAK0qG,WAAW2lC,UAC3CyT,UAAY9jJ,KAAKimJ,WAAWjmJ,KAAK0qG,WAAWo5C,WAhBLpS,MAAA4a,8BAiBf9xI,KAjBe,GAiBtCm3H,SAjBsCD,MAAA,GAiB5BE,UAjB4BF,MAAA,GAAAG,SAAAya,8BAkBf/yI,QAlBe,GAkBtCgzI,QAlBsC1a,SAAA,GAkB7B2a,WAlB6B3a,SAAA,GAmBvC4a,WAAatlI,WAAW3M,KACxBkyI,iBAAmB,SAAnBA,iBAAmB/rF,MAAI,OAAI,IAAImjF,WAAYl3I,QAASmwF,KAAMp8B,KAAK/zD,SAASmwF,QAIxE/jF,SACF8qB,KAAMqsG,0BAAcwB,SAAU8a,WAAW,GAAIJ,YAAchc,SAAWyT,WAChEnpD,wBAAaiV,4BACnB7rE,MAAOosG,0BAAcyB,UAAW6a,WAAW,GAAIJ,YAAchc,SAAWyT,WAClEnpD,wBAAaiV,6BAEjB+8C,SACF7oH,KAAM6tG,SAASjwI,OAAS,EAAIiwI,SAAS,GAAG1pI,IAAIykJ,qBAC5C3oH,MAAO6tG,UAAUlwI,OAAS,EAAIkwI,UAAU,GAAG3pI,IAAIykJ,sBAhCNjhC,MAAA6gC,+BAkChB7/C,eAAMC,iBAAOzkG,IAAI,SAAA5M,MAAI,OAAIkxJ,QAAQtkJ,IAAI,SAACmmE,IAAK71E,GACpE,OAAIA,IAAMg0J,QAAQ7qJ,OAAS,EAChBsX,QAAQ3d,MAEZsxJ,QAAQtxJ,UAtC0B,GAkCtCuxJ,QAlCsCnhC,MAAA,GAkC7BohC,SAlC6BphC,MAAA,GA0C7C,GAAuB,IAAnB8gC,QAAQ7qJ,OAAc,KAAAgqH,MAAA4gC,+BACO7/C,eAAMC,iBAAOzkG,IAAI,SAAA5M,MAAI,OAAImxJ,WAAWvkJ,IAAI,SAACmmE,IAAK71E,GACvE,OAAU,IAANA,EACOygB,QAAQ3d,MAEZsxJ,QAAQtxJ,UALG,GACrB6wJ,WADqBxgC,MAAA,GACTygC,YADSzgC,MAAA,QAQtBwgC,WAAaM,WAAWvkJ,IAAI,kBAAO0pI,SAASjwI,OAAS,EAAIiwI,SAAS,GAAG1pI,IAAIykJ,uBACzEP,YAAcK,WAAWvkJ,IAAI,kBAAO2pI,UAAUlwI,OAAS,EAAIkwI,UAAU,GAAG3pI,IAAIykJ,uBAShF,OANAnP,iBAAiBvG,QACbzsD,QAASqiE,QAASC,SAAUX,WAAYC,aACxC/pI,OhC9Ue,cgC+UfkoE,WhCnTiB,mBgCsTZsiE,gBAASC,kBAAUX,sBAAYC,yEAa/BlmB,UAAWr5H,OAAQg5I,kBAAmBtB,UAQ/C,OAAOqB,8BANH1f,oBACA2f,oCACAtB,kBACA30H,SAAU3vB,MAGkB4M,8CAIhC,OAAIxH,UAAO1D,QACP1B,KAAK6wH,OAALzrH,UAAA1D,QAAA,OAAA4L,EAAAlI,UAAA,GACOpF,MAEJA,KAAK6wH,iUClaLi8B,wBAzHX,SAAAA,YAAaC,sKAAWC,CAAAhtJ,KAAA8sJ,aACpB,IAAMG,iBAENjtJ,KAAKu6C,OAAOwyG,eACZ/sJ,KAAKgT,OAAO,kBAAM,IAElBhT,KAAKulC,KAAK,SAAC48D,GAAI0oC,KAAMG,MACjB,IAAMkiB,UAAY/qD,GAAGvkF,UACrB,GAAIsvI,WAAaA,UAAUp2H,GAAI,CAC3B,IAAMA,GAAKo2H,UAAUp2H,KACrBm2H,cAAcn2H,KACV44E,SAAUw9C,UACV9iB,SAAUS,KACVmI,SAAUhI,SAKtBhrI,KAAKitJ,cAAcA,iUAInB,OAAI7nJ,UAAG1D,QACH1B,KAAKmtJ,eAAL/nJ,UAAA1D,QAAA,OAAA4L,EAAAlI,UAAA,GACOpF,MAEJA,KAAKmtJ,uDAUZ,OAAI/nJ,UAAO1D,QACP1B,KAAKotJ,QAALhoJ,UAAA1D,QAAA,OAAA4L,EAAAlI,UAAA,GACOpF,MAEJA,KAAKotJ,gDAYZ,OAAIhoJ,UAAG1D,QACH1B,KAAKqtJ,UAALjoJ,UAAA1D,QAAA,OAAA4L,EAAAlI,UAAA,GACOpF,MAEJA,KAAKqtJ,gDASZ,IAAIC,SAAW,EASf,OAPAttJ,KAAKu6C,SAASzxC,QAAQ,SAACiS,KACnB,IAAIwyI,gBAAkB,EACtBxyI,IAAIjS,QAAQ,SAAC63D,MACT4sF,iBAAmB5sF,KAAK6sF,kBAAkB3zH,QAE9CyzH,SAAWzpJ,KAAK6P,IAAI45I,SAAUC,mBAE3BD,iDASP,IAAIG,UAAY,EAShB,OAPAztJ,KAAKu6C,SAASzxC,QAAQ,SAACiS,KACnB,IAAI2yI,iBAAmB,EACvB3yI,IAAIjS,QAAQ,SAAC63D,MACT+sF,iBAAmB7pJ,KAAK6P,IAAIg6I,iBAAkB/sF,KAAK6sF,kBAAkB1zH,UAEzE2zH,WAAaC,mBAEVD,4CAUL1vI,IACF,IAAMw8B,OAASv6C,KAAKu6C,SACdhsC,SAAWvO,KAAKgT,SAStB,OAPAunC,OAAOzxC,QAAQ,SAACiS,IAAKgtI,QACjBhtI,IAAIjS,QAAQ,SAACslE,IAAK45E,QACVz5I,SAAS6/D,MACTrwD,GAAGqwD,IAAK25E,OAAQC,OAAQztG,YAI7Bv6C,qEAGU82B,IACjB,OAAO92B,KAAKitJ,gBAAgBn2H,0mBC3H7B,6BAgCM62H,0BAAqB,SAArBA,mBAAsBjzH,QAASytH,aAAgB,IAEpD5qI,OAGA4qI,YAHA5qI,OACA/C,KAEA2tI,YAFA3tI,KACAjB,QACA4uI,YADA5uI,QAcJ,OAZAgE,OAASA,WACT/C,KAAOA,SACPjB,QAAUA,YACVmhB,QAAQkzH,aAAavc,UACjB73I,MAAO,IAAIszJ,aAAYvvI,QACvBumB,KAAM,IAAIgpH,aAAYtyI,KAAK,IAC3BupB,MAAO,IAAI+oH,aAAYtyI,KAAK,IAC5BkmB,IAAK,IAAIosH,aAAYvzI,QAAQ,IAC7Bu2C,OAAQ,IAAIg9F,aAAYvzI,QAAQ,KAGpCmhB,QAAQ67E,cAAcqZ,UAAUC,OAAOpgE,aAAYG,gBAAgB,GAC5Dl1B,SAGEmzH,sBAAiB,SAAjBA,eAAkBnzH,SAC3B,IAAMlgB,KAAOkgB,QAAQlgB,OACfjB,QAAUmhB,QAAQnhB,UAClBi5B,MAAQ9X,QAAQ8X,QAChByzF,UAAYvrG,QAAQ3vB,OACpB2tB,KAAOgC,QAAQhC,OACf6gD,OAAS7+C,QAAQ6+C,SACjB0gB,OAASv/D,QAAQu/D,SACjBjgD,UAAYtf,QAAQsf,YACpBptC,OAAS8tB,QAAQ9tB,SACjB2zF,MAAQ7lE,QAAQ6lE,QAGhB5wE,SAAW+K,QAAQ/K,WACzBA,SAAShnB,MAAM+xB,QAAQ/xB,SACvBgnB,SAAS+pE,YAAYh/D,QAAQg/D,eAE7B,IAAIo0D,cACAh9F,UAAWp2B,QAAQo2B,YACnB4/D,MAAOh2F,QAAQg2F,QACfm1B,aAAcj5I,WACd4N,UACAjB,gBACAggE,cACA0gB,cACAjgD,sBCxDkC,SAA7B+zG,2BAA8BrzH,SACvCA,QAAQ/xB,QAAQ4pF,aACZpnB,UAAW,QACXrxE,IAAK,gBDwDTi0J,CAA2BrzH,SAE3B,IAAMszH,cAlEoB,SAAxBC,sBAAyBC,aAC3B,IAAMniF,QACN,IAAK,IAAMjyE,OAAOo0J,YAAa,CAC3B,IAAMC,UAAYD,YAAYp0J,KAM1BiyE,KAAKjyE,KALgB,iBAAdq0J,WAA2BA,UAKtBA,WAHR7iJ,MAAO4iJ,YAAYp0J,MAM/B,OAAOiyE,KAsDekiF,EAClBz7G,YACA+tD,YACA7nE,YAGJo1H,aAAe70J,OAAO4T,OAAOihJ,aAAcE,eAE3C,IAAM1J,YACNA,SAASqH,eAAiB,IAAIvc,+BAC9BkV,SAASrT,cpB6Ja,SAAbmd,WAAcn0D,QACvB,IAAI82C,QAAU,IAAIhH,mCAMlB,OAJI9vC,OAAOv4F,SAEPqvI,QAAU92C,OAAOv8E,MAAM,SAAAjjB,GAAC,MAAe,QAAXA,EAAE+uG,OAAkB,IAAI6kC,2BAAiB0C,SAElEA,QoBpKkBqd,CAAWn0D,QACpCtqE,SAASohH,QAAQuT,SAASrT,eAG1Bv2G,QAAQ2zH,UAAU/J,SAASrT,cAAcjsH,YAAY3pB,QAGrD,IAAMuN,OAAS07I,SAASrT,cAAcqd,eAAeroB,UAAW6nB,cAChExJ,SAASrT,cAAcsd,kBAAkB3hJ,OAASA,OAAOo7H,YAAep/H,QAExEqxF,QAAUtqE,SAASq9G,YAAY/yC,QAE/BtqE,SAAS8yH,eAAe75I,OAAO4R,KAAM8pI,UAAU5B,aAAa95I,OAAO2Q,QAAS+qI,UAE5E,IAAMkK,gBAAkB7+H,SAAS8+H,YAAYxoB,UAAW6nB,aAAcpzH,QAAQgwE,WAAY45C,UA6B1F,OA5BA5pH,QAAQg0H,kBAAoBF,gBAAgB9oD,WAAWgnC,aAEvDhyG,QAAQo2B,UAAU09F,gBAAgB19F,WAGlCnhC,SAASg/H,kBAAkBH,gBAAgB9oD,WAAWq6C,YAAY1iI,kBAAmB2wI,cAC7E1J,UAGR30H,SAASi/H,WAAWd,aAAcU,gBAAgB9oD,WAAY4+C,UAG9DqJ,0BAAmBjzH,QAAS8zH,iBAG5B9zH,QAAQm0H,eAAel/H,SAASm/H,cAAcN,gBAAiB5lJ,OAAQgE,SAGvE8tB,QAAQ8zH,gBAAgBA,iBAExB9zH,QAAQkzH,aAAan3D,KAAO9mE,SAAS8mE,OACrC/7D,QAAQq0H,UACJC,OAAQ5d,uBAAWod,gBAAiBlK,SAASrT,iBAGjDthH,SAASohH,UAAUke,iBAAiBv0H,SCzHI,SAA/Bw0H,6BAAgCx0H,SAC3BA,QAAQ/xB,QAChB+mH,wBAAuB,GAAAr0G,OAAIwvF,0BAAiB97C,sBAArB,YAAsD,WAC/Er0B,QAAQ/K,WAAWohH,UAAUke,iBAAiBv0H,WAC/C,GACCywC,UAAW,QACXrxE,IAAK,gBDqHTo1J,CAA6Bx0H,SACtBA,+LE9IJ,IAAM++D,8BAAK01D,kCAAAC,0BACd1+B,SACA3lH,QACA8jJ,gBACItkF,cACIqiF,WACAC,YACAX,cACAC,iBAGRkC,aAEAU,UACIxkF,cACIykF,YAGRR,iBACIjkF,iBAEJ56C,YACA+pE,aACInvB,aAAc,SAAAA,aAAArpE,KAAG,OAAIA,MAEzBwpG,UACIl+B,aAAc,SAAAA,aAAC9xC,QAASlhC,OAIpB,OAHIkhC,QAAQ/K,UACR+K,QAAQ/K,WAAW+6E,SAASlxG,MAAM61J,cAE/B71J,QAGfs3D,cpCLkB,aoC5BJq+F,kCAAAC,yBAmCbtrB,SAnCaqrB,kCAAAC,yBAoCbrrB,YApCaorB,kCAAAC,yBAqCbtjD,0BArCaqjD,kCAAAC,yBAsCbrjD,0BAtCaojD,kCAAAC,yBAuCbvjD,yBAvCasjD,kCAAAC,yBpC2HI,aoC3HJD,kCAAAC,yBpCgII,aoChIJD,kCAAAC,yBpCqIO,gBoCrIPA,myCC0PHE,oCApNX,SAAAA,YAAa5kD,SAAUjvG,cAAc,IAAAgZ,iKAAA86I,CAAAvvJ,KAAAsvJ,aACjC76I,0LAAA+6I,CAAAxvJ,KAAAyvJ,4BAAAH,aAAA52J,KAAAsH,OADiC,IAI7B0vJ,qBACAhlD,SADAglD,qBAJ6B,OAOjCj7I,MAAK8hG,cAAgB96G,aAKrBoxE,sBAAsB8iF,sEAAAl7I,QAAMglF,8BAC5B5sB,sBAAsB8iF,sEAAAl7I,QAAMmpI,eAG5BnpI,MAAKm5I,gBAELn5I,MAAKuxD,SAELvxD,MAAKstF,OAAS,KAEdttF,MAAKm7I,cAELn7I,MAAKkb,SAAS,IAAIq6H,+BAAev1I,MAAK8hG,gBAEtCo3C,0BAAmBgC,sEAAAl7I,YAEnBA,MAAKi2F,UACDpB,cAAeomD,qBAAqBpmD,cAAclwG,MAClDi2J,aAAcK,qBAAqBL,aAAaj2J,QA9BnBqb,uYAVfmwH,ySAuDlB,OAAIx/H,UAAO1D,QACP1B,KAAK6wH,OAALzrH,UAAA1D,QAAA,OAAA4L,EAAAlI,UAAA,GHxEyB,SAAxB2rH,sBAAyBr2F,SAClC,IAAMs2F,YAAct2F,QAAQ1V,YAAYisG,WAAW,GACrCv2F,QAAQ/xB,QAChBuqB,OAAO23E,0BAAiB17C,uBAAwB6hE,aGsE9CD,CAAsB/wH,MH/EH,SAAlB6vJ,gBAAmBn1H,SAAY,IACjCs2F,YADiC8+B,kCAClB1S,uBAAWnsB,WADO,MAE1Bv2F,QAAQ/xB,QAChBuqB,OAAO23E,0BAAiB97C,sBAAuBiiE,aG6E7C6+B,CAAgB7vJ,MHpEI,SAAnB+vJ,iBAAoBr1H,SAAY,IAClCs2F,YADkC8+B,kCACnBz/B,qBAAUY,WADS,MAEzCv2F,QAAQ/xB,QAAQuqB,OAAO23E,0BAAiB37C,uBAAwB8hE,aGmExD++B,CAAiB/vJ,MFvFO,SAAvBgwJ,qBAAwBt1H,SACjC,IAAM/xB,MAAQ+xB,QAAQ/xB,QAEtBA,MAAM+mH,wBAAuB,GAAAr0G,OAAIwvF,0BAAiB17C,uBAArB,cAAyD,WAChEz0B,QAAQ/K,WAAW8mE,OAC3Bt6D,EAAErzB,QAAQ,SAAA2tF,MAAI,OAAIA,KAAK3tF,QAAQ,SAAConD,MACtCA,KAAKkzC,eAIbz6F,MAAM+mH,wBAAuB,GAAAr0G,OAAIwvF,0BAAiB17C,uBAArB,cAAyD,WAChEz0B,QAAQ/K,WAAW8mE,OAC3BjzF,EAAEsF,QAAQ,SAAA2tF,MAAI,OAAIA,KAAK3tF,QAAQ,SAAConD,MACtCA,KAAKkzC,eE4EL4sD,CAAqBhwJ,MACdA,MAEJA,KAAK6wH,+DASZ,OAAIzrH,UAAS1D,OACF1B,KAEJA,KAAKopF,cAAcioD,2DA8B1B,OAAIjsI,UAAO1D,OACA1B,KAEJA,KAAK4tJ,2DAWZ,OADA5tJ,KAAK2I,QAAQwT,MAAMquH,OACZxqI,uDAUP,OADAA,KAAK2I,QAAQwT,MAAMsuH,SACZzqI,yCAWJiwJ,UACH,OvBrBmB,SAAdC,YAAeD,SAAU5wI,WAClC,IAAI8wI,QAAU,KAQd,OANCrkD,sBAAOD,qBAAME,uBAAOjjG,QAAQ,SAACrO,GACtB21J,iBAAKznJ,MAAMvP,IAAIqB,IAAMw1J,WAAaG,iBAAKznJ,MAAMvP,IAAIqB,GAAG,KACpD01J,QAAU11J,KAId01J,SACSA,mBAEZlsB,IAAKD,KAAKl7H,QAAQ,SAACunJ,WAChBhxI,UAAS,GAAAhE,OAAIg1I,UAAJ,WAAuBvnJ,QAAQ,SAACrO,GACjCA,EAAE6H,aAAe2tJ,WACjBE,SAAYA,QdwHP,QcxHuB90J,KAAMg1J,YAAcrsB,Id7D1C,Sc6DyDC,UAKvEksB,WAIHlsB,IAAKD,KAAKl7H,QAAQ,SAACwnJ,UAChBjxI,UAAS,GAAAhE,OAAIi1I,SAAJ,gBAA2BxnJ,QAAQ,SAACrO,GACzCA,EAAEqO,QAAQ,SAACnQ,GACHA,EAAE2J,aAAe2tJ,WACjBE,QAAUG,WAAatsB,IAAMpmF,EAAI35C,SAM7CksJ,SACSA,iBAEN,OuBhBID,CAAYD,SAAUjwJ,KAAK2vB,WAAW9K,wDAWxCxpB,MACL,MrClBe,YqCkBXA,KACO2E,KAAK2vB,WAAW4gI,iBAEpBvwJ,KAAK2vB,WAAW6gI,cAAcn1J,gDAS/BA,MACN,OAAO2E,KAAK2vB,WAAL,GAAAtU,OAAmBhgB,KAAnB,8EAGW80J,SAAS,IAAAM,sBAIvBzwJ,KAAK2vB,WAAW9K,eAFhBu8H,eAFuBqP,sBAEvBrP,eACAW,eAHuB0O,sBAGvB1O,eAEJ,OAAOoO,UAAYlsJ,EAAIm9I,eAAiBW,6EAGxB0B,UAChB,IAAM9zH,SAAW3vB,KAAK2vB,WAEtB,OADcA,SAAS02H,WAAW5C,WAAa9zH,SAASy2H,WAAW3C,0EAIpDtkB,SAAUskB,UACzB,IAAM9zH,SAAW3vB,KAAK2vB,WAItB,OAHcA,SAAS02H,WAAW5C,WAAa9zH,SAASy2H,WAAW3C,WAChD,GAAG7lI,UAAU64E,OAAO0oC,4DAW9B,IAAAxsG,KACHhqB,MAAQ3I,KAAK2I,QAEnB,OAAA+nJ,4BAAA/9H,QrCzMc,SqC0MAhqB,MAAMvP,IrC1MN,WqCyMds3J,4BAAA/9H,KrC5Ja,QqC8JAhqB,MAAMvP,IrC9JN,UqC4Jbu5B,6DAaA,OAAO3yB,KAAK0uJ,0EAIZb,sBAAe7tJ,oDA7Kf,QACIwW,QACI2lB,KACA34B,KACAiiE,y3DC7EK6wB,wyBAAwBJ,mWAKxB1J,OAAQqB,cACrB,GAAe,OAAXrB,OACAqB,aAAawH,aACV,GAAI7I,OAAO9qF,OAAQ,CAEtB,IAAMivJ,kBAAoBnkE,OAAOx5E,OAAO,SAAAna,GAAC,OAAIg1F,aAAa5gE,KAAKp0B,KAAOw0F,gCAAUzB,oBACzEiC,aAAa5gE,KAAKp0B,KAAOw0F,gCAAU5B,qBAEtCklE,kBAAkBjvJ,QAClBmsF,aAAasI,cACbtI,aAAap3E,IAAIk6I,qBAEjB9iE,aAAa0H,aACb1H,aAAaroD,OAAOgnD,SAVF,IAYdF,QAAYuB,aAAamH,UAAzB1I,QACF8J,iBAAa/6E,OAAAu1I,yBAAO,IAAIr6I,IAAI+1E,QAAQ,KAAvBskE,yBAA+B,IAAIr6I,IAAI+1E,QAAQ,MAC5D+J,iBAAmBxI,aAAa2H,iBAAiB9zF,OACnD4qF,QAAQ,GAAG5qF,SAAW20F,kBAAoBD,cAAc10F,SAAW20F,kBACnExI,aAAawH,aAGjBxH,aAAaroD,OAAOqoD,aAAa2H,kBAErC,OAAOx1F,uDA3BP,MAAO,iOCFf,2EAEaoyF,kDAAkBy+D,6CAAAC,2CAC1Bne,wBAAQ1nD,MACLvvC,OAAM,IAAArgC,OAJM,OAIN,kBACN+0E,YAAaqb,2BAAWhW,SAHDo7D,6CAAAC,wCAK1Bne,wBAAQznD,OACLxvC,QAAQ,IAAArgC,OARI,OAQJ,oBACR+0E,YAAaqb,2BAAW/V,aAPDm7D,6CAAAC,wCAS1Bne,wBAAQvnD,OACL1vC,QAAQ,IAAArgC,OAZI,OAYJ,oBACR+0E,YAAaqb,2BAAW5V,UAXDi7D,yCAelBC,8CAAuBF,6CAAAG,yBAC/BvlD,2BAAW5V,OAAS4V,2BAAW7V,QADAi7D,6CAAAG,sBAE/BvlD,2BAAWhW,MAAQgW,2BAAW/V,WAFCs7D,wNChB7B,IAAM5iE,sDAAkB6iE,6CAAAC,oDCHV,SCAO,gBFKpBp4J,KEJmB,cFKnB6N,SACI66F,SAAU,WAJSyvD,6CAAAC,iDCFN,aCAE,gBFEID,6CAAAC,iDAAA,WASvBp4J,KEXmB,cFYnB6N,SACI66F,SAAU,WAXS0vD,kDAgBlBC,wBAAsBF,6CAAAG,yBCnBd,UDqBbt4J,KEpBmB,cFqBnB6N,SACI66F,SAAU,WAJayvD,6CAAAG,sBClBV,cD0BjBt4J,KE1BmB,cF2BnB6N,SACI66F,SAAU,WAVayvD,6CAAAG,sBCfb,UD4BI,WAbSA,uBGCtBC,iBACT34H,KAAM,UACN6nE,MAAO,WACP/tD,MAAO,YASE8+G,MAAQ,shBC3Bd,IAAM5/D,iBAAY,SAAZA,UAAa2C,SAAUjyE,OAAQyrE,cAA8B,IAClEC,gBADkDlhF,OAAgBxH,UAAA1D,OAAA,QAAA4L,IAAAlI,UAAA,GAAAA,UAAA,MAEhE/J,KAAOg5F,SAAS35D,QAAQ1V,YAAY3pB,OACpC6uB,QAAUtd,OAAOsd,QACjBnf,KAAOspF,SAAS35D,QAAQ3vB,OACxBgkJ,SAAW16D,SAAS35D,QAAQq0H,WAC5BnnF,UAAYmnF,SAAS5xI,UAAUzR,OAAO,GAAGrQ,KAEzC8+I,eACAv4H,SAAWyyE,SAAS35D,QAAQspD,IAClCm2D,YAAY/3H,OAAS2uI,6CAAwB3uI,SAAWA,OACxD+3H,YAAYttD,YAAcskE,uBAAuB/uI,QACjD+3H,YAAYY,aAAe1mD,SAAS35D,QAAQ62H,cAC5C,IAAMtnI,gBAAkBoqE,SAAS5F,SAASC,YAAYyrD,YAAY/3H,QAAQ4C,YAAYusE,UACtF,GAAyB,OAArBrnE,QAAQxN,SACRoxE,gBAAkB,SACf,CACH,IAAMzB,SAAWwB,aAAaN,YAC1BhwE,OAASxS,KAAKiI,OAAO,SAAAna,GAAC,OAAqC,IAAjCwzF,SAAS9lE,KAAKtgB,QAAQpN,EAAEi+B,MAAY7uB,IAAI,SAAApP,GAAC,OAAIA,EAAE24J,SAC7E,GDPY,SCORn2J,MDkBY,aClBMA,MDmBP,YCnB4BusE,UAAwB,CAC/D,IAAMt8D,MAAQrS,OAAO6M,KAAKokB,QAAQxN,cAAgB,GAElDoxE,iBADAvwE,OAASxS,KAAKiI,OAAO,SAAAna,GAAC,OAAqC,IAAjCwzF,SAAS9lE,KAAKtgB,QAAQpN,EAAEi+B,MAAY7uB,IAAI,SAAApP,GAAC,OAAIA,EAAE0I,SAChDG,OAASqtJ,SAASjxI,OAAO,SAAClV,QAE/C,IADA,IAAI6oJ,OAAQ,EACHl5J,EAAI,EAAGA,EAAIglB,OAAO7b,SAET,KADd+vJ,MAAQ7oJ,OAAO0C,OAAO9R,OAAS+jB,OAAOhlB,GAAG,IAAMqQ,OAAO0C,OAAO9R,OAAS+jB,OAAOhlB,GAAG,IADjDA,KAMnC,OAAOk5J,QAEPzzI,WAAW,IACV,SDpBO,aCqBL3iB,KACPyyF,gBAAkBzf,sBAAsB0gF,SAAU7kI,QAAQxN,UACnDa,OAAO7b,OACdosF,gBrQwoCyB,SAA/B4jE,6BAAgCv1I,MAAOmF,aACzC,IACIvW,KADAW,UAEEsoF,SAAW73E,MAAMkB,kBA2BvB,OA1BIiE,YAAY5f,OAAQ,WAGpB,IAFA,IAAMkH,OAAS0Y,YAAY,GACrB7Y,IAAMG,OAAOlH,OACVnJ,EAAI,EAAGA,EAAIkQ,IAAKlQ,IAAK,CAC1B,IAAM+S,MAAQ1C,OAAOrQ,GACf8oG,SAAWrN,SAAS1oF,QAAUrS,OAAO4T,UAAWmnF,SAAS1oF,OAAOkS,KAClE6jF,UACA31F,OAAOxF,KAAKjN,OAAO4T,OAAOw0F,WAIlCt2F,QAEA,IADA,IAAMmO,OAASoI,YAAY,GAZPypH,OAAA,SAAAA,OAaXxyI,KACL,IACMquE,QADOtlD,YAAY/oB,KAEpBuQ,QAAQ,SAACyI,SAAUy5H,MACpBpkE,KAAK1tD,OAAO8xH,OAASz5H,WAEzBxG,KAAK7E,KAAK0gE,OANLruE,IAAI,EAAGA,IAAI+oB,YAAY5f,OAAQnJ,KAAK,EAAGwyI,OAAvCxyI,KAbW,IAsBpBwS,QACAW,WAGG,IAAIyQ,MAAM6I,YAAYja,KAAMW,QqQtqCTgmJ,CAA6B3C,UAAW7kI,QAAQxN,SAAS,IAA7BrB,OAAAs2I,sCAAoCp0I,OAAOtV,IAAI,SAAApP,GAAC,OAAKA,SAEnGshJ,YAAYz9H,SAAW,KACvBoxE,gBAAkBihE,SAASjxI,OAAO,kBAAM,IACpCE,WAAW,KAKvB,IAAI6D,6BAA8B,EAE9BisE,kBAEAjsE,4BADeisE,gBAAgBjiE,YACMnO,MAAM,SAAA7kB,GAAC,MDZ7B,YCYiCA,EAAEwC,QAGtD,IAAM0nB,YACFnB,SAAQ,UAAAvG,OAAYuG,UACpBsI,QAASiwH,YACTz9H,SAAmC,OAAzBy9H,YAAYz9H,SAAoB,KAAOoxE,gBACjD7jE,gCACApI,wDACAO,OAAQ+3H,YAAY/3H,QAGxB2sI,SAASr9D,UAAU5D,gBAAiB/qE,YAAY,ywCCzD7C,IAAM6uI,+BAAb,SAAAC,WACI,SAAAD,iBAAwB,IAAA5sD,iBAAAvwF,oKAAAq9I,CAAA9xJ,KAAA4xJ,gBAAA,QAAA/qF,KAAAzhE,UAAA1D,OAARgf,OAAQ,IAAA7X,MAAAg+D,MAAAC,KAAA,EAAAA,KAAAD,KAAAC,OAARpmD,OAAQomD,MAAA1hE,UAAA0hE,MAAA,OACpBryD,MAAAs9I,0CAAA/xJ,MAAAglG,iBAAAgtD,+BAAAJ,iBAAAl5J,KAAA6O,MAAAy9F,kBAAAhlG,MAAAqb,OAASqF,WACJ+vE,wBAFeh8E,MAD5B,0XAAAw9I,CAAAL,eAAoC1jE,qQAApCgkE,CAAAN,iBAAA93J,IAAA,6BAAAN,MAAA,SAAAq4F,2BAMgChE,cACxB,OAAOA,aAAa,MAP5B/zF,IAAA,YAAAN,MAAA,SAAAk4F,UAUeygE,cAAejoI,QAAS2jE,cAC/B6D,iBAAU1xF,KAAMmyJ,cAAetkE,cAC3B3jE,qBAZZpwB,IAAA,wBAAAN,MAAA,SAAAm7F,sBAgB2Bj4E,UACnB,IAAIa,OACAo1E,UACEt3F,KAAO2E,KAAK06B,QAAQ1V,YAAY3pB,OAkBtC,OAhBiB,OAAbqhB,SACAi2E,UAAY,KFfJ,SEgBDt3F,MACPkiB,OAAStkB,OAAOskB,OAAOb,UACvBi2E,UAAY3yF,KAAK06B,QAAQ3vB,OAAOiI,OAAO,SAAAna,GAAC,OAAiC,IAA7B0kB,OAAOtX,QAAQpN,EAAE0I,SAAe0G,IAAI,SAAApP,GAAC,OAAIA,EAAEi+B,MFjB3E,aEkBLz7B,KACPs3F,cAEAp1E,OAASb,SAAS,IAEdi2E,UAAY3yF,KAAK06B,QAAQ3vB,OAAOiI,OAAO,SAAAna,GAAC,OAAkC,IAA9B0kB,OAAOtX,QAAQpN,EAAE24J,UAAgBvpJ,IAAI,SAAApP,GAAC,OAAIA,EAAEi+B,MAExFvZ,OAAStkB,OAAOskB,OAAOb,UACvBi2E,UAAY3yF,KAAK06B,QAAQ3vB,OAAOiI,OAAO,SAAAna,GAAC,OAAiC,IAA7B0kB,OAAOtX,QAAQpN,EAAE0I,SAAe0G,IAAI,SAAApP,GAAC,OAAIA,EAAEi+B,OAI3FvQ,KAAMosE,UACNx2E,MAAO,SAvCnBriB,IAAA,cAAAN,MAAA,SAAAy6F,cA4CQ,OAAO,SA5Cf29D,eAAA,2KCC2B,6BCkBZn5D,wBArB0B,SAARA,MAAQpE,UAAQ,OAAI,SAAC4D,SAAU7H,YAC5D,IAAMsC,kBAAoB,SAApBA,kBAA8B1rF,MAChC,IAAM6wE,MAAQwQ,0BACRn+D,SACFxN,SAAU23E,SAAS35D,QAAQ03H,oBAAoBprJ,OAEnDopF,WAAWtnF,QAAQ,SAAAkoF,WAAS,OAAIqD,SAAS3B,kBAAkB1B,UAAW9mE,WACtE2tD,MAAM1iD,mBAGV8iE,SAASvsB,GAAG,YAAagnB,mBACRhnB,GAAG,YAAagnB,mBAChBhnB,GAAG,WAAY,WACZ,IAAMmM,MAAQwQ,0BACd+H,WAAWtnF,QAAQ,SAAAkoF,WAAS,OAAIqD,SAAS3B,kBAAkB1B,WACvDt0E,SAAU,SAEdm7D,MAAM1iD,sBCRf+jE,wBAXD,SAARA,MAAQ7E,UAAQ,OAAI,SAAC4D,SAAU7H,YAQjC6H,SAASvsB,GAAG,QAPc,SAApBgnB,kBAA8B1rF,MAChC,IAAMkjB,SACFxN,SAAU23E,SAAS35D,QAAQ03H,oBAAoBprJ,OAEnDopF,WAAWtnF,QAAQ,SAAAkoF,WAAS,OAAIqD,SAAS3B,kBAAkB1B,UAAW9mE,oMCNvE,IAAMkpE,mCAAei/D,iCAAAC,4BCLR,OJWoB,SAAPryE,KAAOoU,UAAQ,OAAI,SAAC4D,SAAU7H,YAC3D,IAEIlmE,QAFAitE,YACAC,UAEEgB,OAAS7P,2BACT7tD,QAAU25D,SAAS35D,QACnB63H,YAAc73H,QAAQwjE,cAAcs0D,mBACpCrzB,SAAsC,eAA3BzkG,QAAQ9tB,SAAS06B,MAAyB,IAAM,IAC3DmrH,UAAY/3H,QAAQw1B,OAAOzsC,SAASsjB,QACpC2rH,aAAeD,UAAUlxJ,QAAqB,MAAb49H,SAAmB,EAAI,GAE9DlnC,SAASv/F,KAAK0/F,SAAS1sB,GAAG,QAAS,WAC/B,IAAMmM,MAAQwQ,0BACd8O,UACIh7D,EAAG07C,MAAM17C,EACT34B,EAAGq0E,MAAMr0E,KAEdkoE,GAAG,OAAQ,WACV,IAAMmM,MAAQwQ,2BAEd+O,QACIj7D,EAAG07C,MAAM17C,EACT34B,EAAGq0E,MAAMr0E,IAEN24B,EAAIt4B,KAAK6P,IAAI,EAAG7P,KAAK2P,IAAI4jF,OAAOj7D,EAAGo2H,YAAY14H,QACtDu9D,OAAO5zF,EAAIK,KAAK6P,IAAI,EAAG7P,KAAK2P,IAAI4jF,OAAO5zF,EAAG+uJ,YAAYz4H,SAEtD5P,SACIxN,SAAUi2I,uBACLj4H,QAAQ5nB,aAAe2/I,UAAU1qH,OAAOovD,SAASgoC,UAA2B,EAAfuzB,cAC1DD,UAAU1qH,OAAOqvD,OAAO+nC,UAA2B,EAAfuzB,eAAmBniJ,KAAK,SAAC5V,EAAGyI,GAAJ,OAAUzI,EAAIyI,MAGtFgtF,WAAWtnF,QAAQ,SAAAkoF,WAAS,OAAIqD,SAAS3B,kBAAkB1B,UAAW9mE,aACvEwhD,GAAG,MAAO,WACT,IAAMmM,MAAQwQ,2BAEd+O,QACIj7D,EAAG07C,MAAM17C,EACT34B,EAAGq0E,MAAMr0E,IAEN24B,EAAIt4B,KAAK6P,IAAI,EAAG7P,KAAK2P,IAAI4jF,OAAOj7D,EAAGo2H,YAAY14H,QACtDu9D,OAAO5zF,EAAIK,KAAK6P,IAAI,EAAG7P,KAAK2P,IAAI4jF,OAAO5zF,EAAG+uJ,YAAYz4H,SAElD5P,QADAitE,SAASgoC,YAAc/nC,OAAO+nC,WAE1BziH,cAIAA,SAAUi2I,uBACLj4H,QAAQ5nB,aAAe2/I,UAAU1qH,OAAOovD,SAASgoC,UAA2B,EAAfuzB,cAC1DD,UAAU1qH,OAAOqvD,OAAO+nC,UAA2B,EAAfuzB,eAAmBniJ,KAAK,SAAC5V,EAAGyI,GAAJ,OAAUzI,EAAIyI,MAI1FgtF,WAAWtnF,QAAQ,SAAAkoF,WAAS,OAAIqD,SAAS3B,kBAAkB1B,UAAW9mE,iBG7DlDmoI,iCAAAC,yBCJP,QDMI75D,yBAFG45D,iCAAAC,yBCFP,QDKIp5D,yBAHGo5D,gNEE5B,IAAMM,qBAAuB,SAAvBA,qBAAwB1zE,QAAShvB,KAAMjoC,UACzC,IAAIvL,YAEA+1I,UAEAviG,KAFAuiG,UACAtzB,SACAjvE,KADAivE,SAGAhoC,SAKAlvE,SALAkvE,SACAC,OAIAnvE,SAJAmvE,OACAy7D,oBAGA5qI,SAHA4qI,oBACAC,kBAEA7qI,SAFA6qI,kBACA7xG,OACAh5B,SADAg5B,OAEE8xG,kBAAoB7zE,QAAQigD,UAalC,OAVIziH,SADAy6E,SAASgoC,YAAc/nC,OAAO+nC,aAEvB4zB,kBAAoBF,qBAAuBC,kBAAoB7xG,QAC1DwxG,UAAU1qH,OAAO+qH,kBAAoB7xG,OAAS4xG,qBACtDJ,UAAU1qH,OAAO+qH,kBAAoB7xG,SAClC8xG,kBAAoB9xG,OAASA,QACxBwxG,UAAU1qH,OAAgB,EAATkZ,QAAawxG,UAAU1qH,OAAO8qH,oBAA+B,EAAT5xG,UAErEwxG,UAAU1qH,OAAOgrH,mBAAoBN,UAAU1qH,OAAOgrH,kBAAoBF,sBAE7E,MAAb1zB,UAA8BziH,SAAS4G,UAChC5G,y5CC6CIk+E,4zBAlEuCP,mWAmBhBxM,aAAc3jE,SAC5C,IAAIiS,EACA34B,EACAq2B,MACAC,OACEu6D,SAAWr0F,KAAKq0F,SAChB35D,QAAU25D,SAAS35D,QACnB9tB,OAAS5M,KAAK4M,SACdsjD,KAAOx1B,QAAQw1B,OAAOzsC,SACtByb,UAAS,GAAA7jB,OAAMzO,OAAO+tF,YAAb,KAAAt/E,OAA4BzO,OAAOsyB,WAE5C1oB,OAAS0T,QAAQxN,SAAS23E,SAAS35D,QAAQ5nB,aAC3C2/I,UAAYviG,KAAKnpB,QACjBxlC,MAAQiV,QAAU05C,KAAKmsC,cAAc7lF,OAAO,IAAK05C,KAAKmsC,cAAc7lF,OAAO,QAE3E2oH,STjBY,eSiBDzkG,QAAQ9tB,SAAS06B,MAAuB,IAAM,IAEzD0rH,kBAAoB3+D,SAAS35D,QAAQwjE,cAAcs0D,mBAAgC,MAAbrzB,STxC9D,SAFD,SS6CPuzB,aAAeD,UAAUlxJ,QAAqB,MAAb49H,SAAmB,EAAI,GACxD8zB,oBAAsBv4H,QAAQ29D,oBAAoBO,aAClDs6D,eAAiBlsE,YAAYisE,oBAAqB,KAAM,GAA5B,GAAA53I,OAAmCzO,OAAO+tF,YAA1C,yBTxBhB,eS0BdtG,SAAS35D,QAAQ9tB,SAAS06B,OAC1BnL,EAAI56B,MAAM,GAAKmxJ,cAAgB,EAC/BlvJ,EAAI,EACJq2B,MAAQt4B,MAAM,GAAKA,MAAM,IAAM,EAC/Bu4B,OAASk5H,oBAET72H,EAAI,EACJ34B,EAAIjC,MAAM,GAAKmxJ,cAAgB,EAC/B54H,OAASv4B,MAAM,GAAKA,MAAM,IAAM,EAChCs4B,MAAQm5H,mBAKGhsE,YAAYksE,eTjCf,SSiCwC18I,cAAQ2lB,IAAG34B,IAAGq2B,YAAOC,gBAAWoF,WAC9EkyB,MAJU,SAAV+hG,QAAoBhxD,KD9BF,SAAnBnF,iBAAmB3I,UAAQ,OAAI,SAAC4D,SAAU7H,YACnD,IACIlmE,QADAitE,YAEEC,UACAgB,OAAS7P,2BACT7tD,QAAU25D,SAAS35D,QACnB+3H,UAAY/3H,QAAQw1B,OAAOzsC,SAASsjB,QACpCo4F,SRdgB,eQcLzkG,QAAQ9tB,SAAS06B,MAAuB,IAAM,IAIzDrf,UACF6qI,kBAJsBp4H,QAAQwjE,cAAcs0D,mBAAgC,MAAbrzB,SRtClD,QAEC,UQyCdl+E,OAHWwxG,UAAUlxJ,QAAqB,MAAb49H,SAAmB,EAAI,IAKpDjgD,WAEJ+Y,SAASv/F,KAAK0/F,SAAS1sB,GAAG,QAAS,WAC/B,IAAMmM,MAAQwQ,0BACd8O,ShL6LY,SAAdi8D,YAAersE,QAASlP,OAC1B,IAAMw7E,mBAAqBtsE,QAAQnJ,wBACnC,OACIzhD,EAAG07C,MAAM17C,EAAIk3H,mBAAmBl3H,EAChC34B,EAAGq0E,MAAMr0E,EAAI6vJ,mBAAmB7vJ,GgLjMrB4vJ,CAAYpzJ,KAAM63E,MAAMmB,aACnCkG,QAAUrH,MAAMqH,UACjBxT,GAAG,OAAQ,WACV,IAAMmM,MAAQwQ,0BACRwqE,oBAAsB3zE,QAAqB,MAAbigD,SRrDvB,QAEC,UQqDdjgD,QAAQ/iD,GAAK07C,MAAM/jB,GACnBorB,QAAQ17E,GAAKq0E,MAAM9jB,GAEnB9rC,SAAS4qI,oBAAsBA,oBAC/B5qI,SAASkvE,SAAWA,SACpBlvE,SAASmvE,OAASA,OAClB,IAAM16E,SAAWk2I,qBAAqB1zE,SAAWuzE,oBAAWtzB,mBAAYl3G,UAExEiC,SACIxN,SAAU42I,qCACL54H,QAAQ5nB,YAAc4J,UAE3B62I,SAAS,GAEbl/D,SAAS3B,kBAAkBtC,WAAW,GAAIlmE,WAC3CwhD,GAAG,MAAO,WACT,IAAMmM,MAAQwQ,0BACRwqE,oBAAsB3zE,QAAqB,MAAbigD,SRxEvB,QAEC,UQuEdl3G,SAAS4qI,oBAAsBA,oBAC/B5qI,SAASkvE,SAAWA,SACpBlvE,SAASmvE,OAASA,OAClB,IAAM16E,SAAWk2I,qBAAqB/6E,OAAS46E,oBAAWtzB,mBAAYl3G,UACtEiC,SACIxN,SAAU42I,qCACL54H,QAAQ5nB,YAAc4J,UAE3B62I,SAAS,EACT3mJ,QACI4kD,YACIoyB,SAAU,OAItByQ,SAAS3B,kBAAkBtC,WAAW,GAAIlmE,aC3BtC8yE,CAAiB3I,SAAjB2I,CAA2BmF,IAAK,aAI7B9wC,KAAK,IAAK7tD,GACA6tD,KAAK,IAAKl1B,GACVk1B,KTnEJ,QSmEgBx3B,OACZw3B,KTlEH,SSkEgBv3B,0DA5D9B,MVdoB,qEUsBpB,OACIoF,UAAW,uBACXy7D,YTxBe,4BUEd+J,yCAAa,SAAbA,WAAcrQ,UACvB,IAAM35D,QAAU25D,SAAS35D,QACnBuhD,QAAU,SAAVA,QAAWxqE,IAAKytB,UAAW4tD,QAC7B,IAAM6N,YAAcjgE,QAAQ9tB,SAAS+tF,YACrC7T,6BAAcpsD,QAAQ3I,SACLg/B,UADjB,IAAA11C,OAC+Bs/E,YAD/B,oBAEiB3nF,OAAO,SAAAna,GAAC,OAAgC,IAA5B4Y,IAAI8U,KAAKtgB,QAAQpN,EAAEi+B,MAC/Bi6B,UAAU,OACVkrB,QAAQ/8C,UAAW4tD,SAGxC,OACIyb,KAAM,SAAAA,KAAC92F,KAAqB,IAAhB7E,OAAgBxH,UAAA1D,OAAA,QAAA4L,IAAAlI,UAAA,GAAAA,UAAA,MAClBu1F,YAAcjgE,QAAQ9tB,SAAS+tF,YAChClpF,IAAI87E,YAAY7rF,QAAW+P,IAAIi8E,WAAWhsF,QAG3Cu6E,QAAQxqE,IAAIi8E,WAAY9gF,OAAOsyB,WAAP,GAAA7jB,OAAuBs/E,YAAvB,qBAAsD,GAC9E1e,QAAQxqE,IAAIi8E,WAAY9gF,OAAOsyB,WAAP,GAAA7jB,OAAuBs/E,YAAvB,oBAAqD,GAC7E1e,QAAQxqE,IAAI87E,YAAa3gF,OAAOsyB,WAAP,GAAA7jB,OAAuBs/E,YAAvB,oBAAqD,IAJ9E1e,QAAQxqE,IAAIq6E,YAAal/E,OAAOsyB,WAAP,GAAA7jB,OAAuBs/E,YAAvB,oBAAqD,IAOtF64D,SAAU,SAAAA,SAAC/hJ,KAAqB,IAAhB7E,OAAgBxH,UAAA1D,OAAA,QAAA4L,IAAAlI,UAAA,GAAAA,UAAA,MACtBu1F,YAAcjgE,QAAQ9tB,SAAS+tF,YAChClpF,IAAI87E,YAAY7rF,QAAW+P,IAAIi8E,WAAWhsF,QAG3Cu6E,QAAQxqE,IAAI87E,YAAa3gF,OAAOsyB,WAAP,GAAA7jB,OAAuBs/E,YAAvB,qBAAsD,GAC/E1e,QAAQxqE,IAAIi8E,WAAY9gF,OAAOsyB,WAAP,GAAA7jB,OAAuBs/E,YAAvB,qBAAsD,IAH9E1e,QAAQxqE,IAAIq6E,YAAal/E,OAAOsyB,WAAP,GAAA7jB,OAAuBs/E,YAAvB,qBAAsD,6yCCvB1E84D,kEACjB,SAAAA,oBAAwB,IAAAzuD,iBAAAvwF,uKAAAi/I,CAAA1zJ,KAAAyzJ,mBAAA,QAAA5sF,KAAAzhE,UAAA1D,OAARgf,OAAQ,IAAA7X,MAAAg+D,MAAAC,KAAA,EAAAA,KAAAD,KAAAC,OAARpmD,OAAQomD,MAAA1hE,UAAA0hE,MAAA,OACpBryD,MAAAk/I,6CAAA3zJ,MAAAglG,iBAAA4uD,kCAAAH,oBAAA/6J,KAAA6O,MAAAy9F,kBAAAhlG,MAAAqb,OAASqF,WACJo5E,YAAc4K,yCAAWjwF,MAAK4/E,UACnC5/E,MAAKolF,UAAY,WAHGplF,yZADmBklF,0TAWpC9L,aAAc3jE,SAAuB,IAAdvjB,QAAcvB,UAAA1D,OAAA,QAAA4L,IAAAlI,UAAA,GAAAA,UAAA,OAGxCo8F,EAFiBxhG,KAAK85F,YAAYnzF,QAAQ66F,UAAYxhG,KAAK65F,YAElDhM,aAAc7tF,wDANvB,MZXmB,uCaCdy5F,oBACT7sF,QACI4/D,aAAc,SAAAA,aAAC9xC,QAASlhC,OAAV,OAAoB+zE,eAAe7yC,QAAQ00D,YAAe51F,SAE5EuR,QACA+H,aACA+gJ,mBACA31D,aACI1xB,aAAc,SAAAA,aAAC9xC,QAASlhC,OACpB,IAAM0kG,YAAc3wB,eAAe7yC,QAAQk2F,aAAcp3H,OAKzD,OAJC,UAAW,SAAU,UAAUsP,QAAQ,SAACisE,OACrCmpB,YAAYnpB,OAASlxE,KAAK2P,IAAI0qF,YAAYnpB,OAAS,EAAImpB,YAAYnpB,OAAS,EAChD,GAAvBmpB,YAAYjjE,SAAwC,GAAxBijE,YAAYhjE,aAE1CgjE,cAGf0V,gBACAm7C,YACAxtJ,OACIirE,aAAc,SAAAA,aAAC9xC,QAASlhC,OAIpB,OAHAkhC,QAAQqM,QAAQxlC,MAAM/H,OACtBkhC,QAAQo5H,oBACRp5H,QAAQ/xB,QAAQknH,OAAO,QAASr2H,OACzBA,QAGfutC,SACAooE,cACAxmG,SACAorJ,OACIvnF,aAAc,SAAAA,aAAC9xC,QAASlhC,OAAV,OAAoB+zE,eAAe7yC,QAAQs5H,WAAcx6J,SAE3EkgG,aACInvB,aAAc,SAAAA,aAAArpE,KAAG,OAAIA,OC7BhB+yJ,iBACG,aADHA,eAEC,WAGDC,qBACTp6H,OAAQ,GACRD,MAAO,GACPoB,SAAUikB,IACVhkB,UAAWgkB,IACXte,QAAS,EACTy8D,OAAQ,EACR2xD,OAAQ,GAGCmF,cACT9zJ,KAAM,GACNujG,YAAa,SAAAA,YAACzb,KACV,MbCY,SaDRA,KbES,UaFOA,IbCR,OAKE,WaATk7B,gCACT1oB,YAAa,OACby5D,YAAa,QACbC,YAAa,gBACbjyJ,WACIkyJ,QACIj9E,MAAO,YACPk9E,MAAO,cAGfvqJ,MACI3J,MACIujG,YAAa,QACb/pE,MAAO,GACPz3B,UAAW,SAAAA,UAAClB,IAAK3I,EAAGwS,KAAM2vB,SAAf,OAA2BA,QAAQg/D,aAARh/D,CAAsBx5B,OAEhEy/F,MACIzhE,UAAW,cACXpF,OAAQ,GACRD,MAAO,GACP2Y,MAAO,iBACPn3C,KAAM,YAWLm5J,kBAAW,SAAXA,SAAY7zD,MACrB,OAAIA,MAA0B,iBAAVA,KACTnxB,uBAAUmxB,MACZA,uLC/CN,IAAM8zD,2BAAe,SAAfA,aAAgB1tH,OACzB,IAAM2tH,UAAY3tH,MAAM/hB,YAAY3pB,OAKpC,OAASq5J,oBAAWl+I,OAJLuwB,MAAMi9E,eAIO2wC,MAHd5tH,MAAMn6B,SAAS02G,OAAS,EAGHsxC,QAFnBvD,gBAAgBqD,aAYvBG,kCAAsB,SAAtBA,oBAAuBr+I,OAAQm+I,OAIxC,IAHA,IAAMG,mBACAC,eAAiBhnF,kCAAqBv3D,OAAO,GAAIA,OAAO,IAErDje,EAAI,EAAGA,GAAKo8J,MAAOp8J,IACxBu8J,gBAAgBv8J,GAAKw8J,eAAex8J,EAAIo8J,OAE5C,OAAOG,iBAmMEE,gBAAkB,SAAlBA,gBAAmB35J,KAAMwrH,UAAWiB,YAAe,IAAAn1F,KAExDiiI,QAGA/tC,UAHA+tC,QACAF,UAEA7tC,UAFA6tC,UACA3tH,MACA8/E,UADA9/E,MAGAvwB,OAIAsxG,WAJAtxG,OACAy+I,aAGAntC,WAHAmtC,aACAC,UAEAptC,WAFAotC,UACAP,MACA7sC,WADA6sC,MAEEQ,IAAM3+I,OAAgB,UAATnb,KAAmB,EAAImb,OAAO9U,OAAS,GACpD4iC,KAAOqwH,MAAe,UAATt5J,KAAmB,EAAIs5J,MAAMjzJ,OAAS,GAEzD,OAAA0zJ,6BAAAziI,QACK+hI,UAA0B,SAAdA,UAAuB3tH,MAAM6tH,SAASO,KAAOpuH,MAAMsuH,iBAAmBtuH,MAAM6tH,SAASO,MADtGC,6BAAAziI,KAAA,QAEWsiI,aAAa55J,OAFxB+5J,6BAAAziI,KAAA,KAGiB,UAATt3B,KAAmB,EAAI65J,UAAUxzJ,OAAS,GAHlD0zJ,6BAAAziI,KAAA,SAIYwiI,IAAK7wH,OAJjB3R,uWCjOiB2iI,sCAOjB,SAAAA,aAAa75J,0KAAc85J,CAAAv1J,KAAAs1J,cACvBt1J,KAAKgmE,SACLhmE,KAAKw1J,aACLx1J,KAAK+hG,OAAS,KACd/hG,KAAKy1J,WAAa,KAClBz1J,KAAKg0J,OAAS/6J,OAAO4T,UAAWsnJ,cAChCn0J,KAAKw1J,UAAY,KACjBx1J,KAAK01J,cAAgBj6J,aAAam0G,aAClC5vG,KAAK21J,OAASl6J,aAAaikE,MAC3B1/D,KAAKgkF,IAAM15E,cACXtK,KAAK4wH,aAAe33H,OAAO4T,UAAW7M,KAAKglB,YAAY4wI,sBACvD51J,KAAKovF,QAAU7hB,kBAAmBvtE,KAAKglB,YAAYpF,iBAEnDitD,sBAAsB7sE,KAAMy5F,oBAC5Bz5F,KAAK61J,eAAiBptE,qCAAsB3B,6BAAc,QAAf,GAAAzrE,OACpCrb,KAAK4M,SAAS+tF,YADsB,sBAG3C36F,KAAK69I,UAAY,IAAI+T,+BAAe5xJ,MAChC0uF,YAAaz1F,OAAO4T,UAAW+lF,4BAAoBkjE,sCACnDnnE,SAAUyE,kCACVvD,uBAAwBuC,kDACzBvF,sCAAauB,sVAIhB,OAAOpuF,KAAKgkF,gDA2CZ,OAAI5+E,UAAO1D,OACA1B,KAEJA,KAAK69I,sDAUZ,MflFY,yDesFZ,OAAIz4I,UAAM1D,QACN1B,KAAK+1J,aAAL3wJ,UAAA1D,QAAA,OAAA4L,EAAAlI,UAAA,GACOpF,MAEJA,KAAK+1J,mDAUZ,OAAI3wJ,UAAO1D,QACP1B,KAAK+hG,OAAL38F,UAAA1D,QAAA,OAAA4L,EAAAlI,UAAA,GACApF,KAAKojG,SACEpjG,MAEJA,KAAK+hG,+DAWE,IAAAyF,aAIVxnG,KAAK4M,SAFL5C,KAFUw9F,aAEVx9F,KACA2wF,YAHU6M,aAGV7M,YAIJ,OAFA36F,KAAK01J,cAAct9H,SAASqwD,qCAAsB3B,6BAAc,QAAf,GAAAzrE,OAC1Cs/E,YAD0C,uBDnD1B,SAAlBq7D,gBAAmBt7H,QAASnI,KAAMnwB,WAC3C,IAAM2yE,SACAhqE,KAAO2vB,QAAQ3vB,OACf6kG,aAAel1E,QAAQg7H,cAO7B,OALA3qJ,KAAKjC,QAAQ,SAACkB,KAAM/H,OAChB,IAAMzI,MAAQ+4B,KAAOvoB,KAAKuoB,MAAQvoB,KADRisJ,sBAEArmD,aAAaxxE,WAAWh8B,UAAU5I,MAAOyI,MAAO8I,KAAM2vB,UAAxEZ,OAFkBm8H,sBAElBn8H,OAAQD,MAFUo8H,sBAEVp8H,MAChBk7C,MAAM9yE,QAAW63B,OAAQA,OAAS,EAAGD,MAAOA,MAAQ,KAEjDk7C,MC2CIihF,CAAgBh2J,KAAMsxJ,MAAOtnJ,KAAK3J,KAAK+B,yEAU7B,IAAAs2H,kBASb14H,KAAKk+F,cAPLrkE,MAFa6+F,kBAEb7+F,MACAC,OAHa4+F,kBAGb5+F,OACAmB,SAJay9F,kBAIbz9F,SACAC,UALaw9F,kBAKbx9F,UACA0F,QANa83F,kBAMb93F,QACAy8D,OAPaq7B,kBAObr7B,OACA2xD,OARat2B,kBAQbs2B,OAGA1nH,MACAtnC,KAAK4M,SADL06B,MAIE4uH,WAAuB,EAAVt1H,QACbu1H,UAAqB,EAATnH,OACZoH,UAAqB,EAAT/4D,OAElBr9F,KAAK+K,KAAK/K,KAAKq2J,cAAcr2J,KAAK+mC,UAElC,IAAMuvH,WAAat2J,KAAKu2J,gBAClBC,YAAcF,WAAWx8H,OAAS,EAAIw8H,WAAWx8H,OAASo8H,WAAa,EACvEO,WAAaH,WAAWz8H,MAAQq8H,WAGhCQ,YAAc12J,KAAK22J,eAAeT,WAAY5uH,OA1BnCsvH,mBDzCQ,SAApBC,kBAAqBjqJ,OAAQqb,SAAUld,MAChD,IAAIs6F,YAAc,EACdC,WAAa,EACbwxD,eACAj9H,MAAO,EAAGC,OAAQ,GAGlBo8H,WAKAjuI,SALAiuI,WACAO,WAIAxuI,SAJAwuI,WACAC,YAGAzuI,SAHAyuI,YACAF,YAEAvuI,SAFAuuI,YACAv7H,SACAhT,SADAgT,SAGAjxB,KAEA4C,OAFA5C,KACAs9B,MACA16B,OADA06B,MAGAq5D,KAEA32F,KAFA22F,KAGEo2D,gBADF/sJ,KADA3J,KAEyBujG,YACvBozD,cACAC,cACFC,aAAe,EA6EnB,OA5EAR,YAAY5tJ,QAAQ,SAACquJ,WAAY5+J,GAC7B,IAAM6+J,WAAcv9H,MAAO,EAAGC,OAAQ,GAChCu9H,WAAcx9H,MAAO,EAAGC,OAAQ,GAChCxoB,MAAQvG,KAAKxS,Od/HP,SciIRw+J,iBdhIS,UcgImBA,iBAE5BI,WAAWt9H,OAASq8H,WACpBmB,UAAUx9H,OAASvoB,MAAMonB,KAAO,EAAI70B,KAAKkQ,KAAKzC,MAAMonB,KAAO70B,KAAKgwC,IAAM8sD,KAAK9mE,OAASq8H,WACpFgB,aAAerzJ,KAAK6P,IAAI2jJ,UAAUx9H,MAAOq9H,cACzCE,UAAUv9H,MAAQs9H,WAAWt9H,MAAQq9H,aAGrCC,WAAWr9H,OAASj2B,KAAK6P,IAAIyjJ,WAAWr9H,OAAQ6mE,KAAK7mE,QAAUo8H,WAC/DmB,UAAUv9H,OAASq9H,WAAWr9H,OAC9Bs9H,UAAUt9H,OAASq9H,WAAWr9H,SAG9Bq9H,WAAWt9H,MAAQh2B,KAAK6P,IAAIyjJ,WAAWt9H,MAAOvoB,MAAMonB,KAAO,EAAI70B,KAAKkQ,KAAKzC,MAAMonB,KAAO70B,KAAKgwC,IACzF8sD,KAAK9mE,OAASq8H,WAChBmB,UAAUx9H,MAAQs9H,WAAWt9H,MAC7Bu9H,UAAUv9H,MAAQs9H,WAAWt9H,MAC7Bq9H,aAAerzJ,KAAK6P,IAAI2jJ,UAAUx9H,MAAOq9H,cAGzCC,WAAWr9H,QAAUo8H,WACrBmB,UAAUv9H,OAAS6mE,KAAK7mE,OAASo8H,WACjCkB,UAAUt9H,OAASq9H,WAAWr9H,OAASu9H,UAAUv9H,QAGvC,eAAVwN,MACA+9D,YAAcxhG,KAAK6P,IAAI2xF,YAAa+xD,UAAUt9H,SAE9CurE,aAAe+xD,UAAUt9H,OACzBwrE,WAAazhG,KAAK6P,IAAI4xF,WAAY8xD,UAAUv9H,MAAO48H,aAEvDK,eACIj9H,MAAOh2B,KAAK6P,IAAI0jJ,UAAUv9H,MAAOi9H,cAAcj9H,OAC/CC,OAAQj2B,KAAK6P,IAAI0jJ,UAAUt9H,OAAQg9H,cAAch9H,SAErDk9H,WAAW9wJ,KAAKkxJ,WAChBH,WAAW/wJ,KAAKmxJ,aAEpBL,WAAWluJ,QAAQ,SAACsuJ,UAAW7+J,GAC3B,GAAc,eAAV+uC,MACA8vH,UAAUt9H,OAASurE,YACnB4xD,WAAW1+J,GAAGshC,MAAQq9H,ad1Kd,Sc2KJH,iBd1KK,Uc0KuBA,iBAC5BL,YAAYn+J,GAAGuhC,OAASurE,YACxB4xD,WAAW1+J,GAAGuhC,OAASurE,YACvB2xD,WAAWz+J,GAAGshC,MAAQ68H,YAAYn+J,GAAGshC,MAAQq9H,eAE7CR,YAAYn+J,GAAGshC,MAAQq9H,aACvBF,WAAWz+J,GAAGshC,MAAQq9H,aACtBR,YAAYn+J,GAAGshC,MAAQq9H,cAE3B5xD,WAAazhG,KAAK6P,IAAI4xF,WAAa0xD,WAAWz+J,GAAGshC,YAGjD,GADAu9H,UAAUv9H,MAAQh2B,KAAK6P,IAAI4xF,WAAYrqE,UdvLhC,QcwLH87H,iBdrLM,WcqLqBA,gBAC3BL,YAAYn+J,GAAGshC,MAAQyrE,WACvB2xD,WAAW1+J,GAAGshC,MAAQyrE,WACtB4xD,aAAe5xD,eACZ,CACH,IAAMkS,WAAak/C,YAAYn+J,GAAGshC,MAC5By9H,cAAiBR,cAAcj9H,MAAQq9H,aAC7CD,WAAW1+J,GAAGshC,MAAQq9H,aACtBF,WAAWz+J,GAAGshC,MAAQ68H,YAAYn+J,GAAGshC,MAAQq9H,aAC7CR,YAAYn+J,GAAGshC,MAAQh2B,KAAK6P,IAAI8jG,WAAY8/C,eAC5ChyD,WAAazhG,KAAK6P,IAAI4xF,WAAY8xD,UAAUv9H,UAIxDyrE,WAAazhG,KAAKqnB,KAAKrnB,KAAK6P,IAAI4xF,WAAYmxD,aAAeP,WAC3D7wD,aAAemxD,YAAcN,YAEpB7wD,YADTA,YAAcxhG,KAAKqnB,KAAKm6E,aACFC,sBAAY0xD,sBAAYC,sBAAYH,4BAAeI,2BC/BjEL,CAAkB72J,KAAK4M,UACzBspJ,sBAAYO,sBAAYC,wBAAaF,wBAAav7H,kBAAUC,qBAAal7B,KAAK+K,QAF5Es6F,YA5BauxD,mBA4BbvxD,YAAaC,WA5BAsxD,mBA4BAtxD,WAAY0xD,WA5BZJ,mBA4BYI,WAAYC,WA5BxBL,mBA4BwBK,WAAYH,cA5BpCF,mBA4BoCE,cAAeI,aA5BnDN,mBA4BmDM,aAiBpE,OAbAl3J,KAAKk+F,aACDrkE,MAAOh2B,KAAK6P,IAAI4xF,WAAYzrE,OAASu8H,UAAYD,UACjDr8H,OAAQj2B,KAAK6P,IAAI2xF,YAAavrE,QAAUs8H,UAAYD,UACpDO,wBACAO,sBACAD,sBACAF,4BACAI,0BACAK,aACI19H,MAAOh2B,KAAK2P,IAAIynB,SAAUj7B,KAAKk+F,cAAcrkE,OAASu8H,UAAYD,UAClEr8H,OAAQ08H,eAGTx2J,2DAYP,OAFAA,KAAK01J,cAAct9H,SAASqwD,qCAAsB3B,6BAAc,QAAf,GAAAzrE,OACNrb,KAAK4M,SAAS+tF,YADR,mBAE1C36F,KAAK01J,cAAct3H,WAAWp+B,KAAK+zJ,QAAQ1zJ,KAAOL,KAAK+zJ,QAAQ1zJ,KAAO,oDAUpE02B,WAAW,IAAAygI,mBACsCx3J,KAAKk+F,cAAvDq5D,YADYC,mBACZD,YAAavI,OADDwI,mBACCxI,OAAQpuH,QADT42H,mBACS52H,QAAS/G,MADlB29H,mBACkB39H,MAAOoB,SADzBu8H,mBACyBv8H,SADzBk+E,cAEiBn5G,KAAK4M,SAAlCwnJ,YAFYj7C,cAEZi7C,YAAaC,YAFDl7C,cAECk7C,YACrB,ODvLoB,SAAfoD,aAAgB1gI,UAAWg9H,MAAO71D,YAAatxF,QACxD,IAAM6pJ,WAAa5yJ,KAAK2P,IAAI0qF,YAAYjjE,SAAUijE,YAAYrkE,OAExD69H,eAAiB1wE,YAAYjwD,UAAW,SAAU,GAAtB,GAAA1b,OAA6BzO,OAAO+tF,YAApC,kBACzB5iE,MdnDQ,QckDM,GAAA1c,OACEo7I,WADF,OAEd1+H,MdlDS,ScgDK,GAAA1c,OAEG6iF,YAAYpkE,OAFf,OAGd/B,MAAM,gBAHQ,GAAA1c,OAGY6iF,YAAY8wD,OAHxB,OAAA3zI,OAGoCzO,OAAOwnJ,YAH3C,KAAA/4I,OAG0DzO,OAAOynJ,cAC/Et8H,MAAM,aAAcg8H,MAAMnwD,uBAAuB9uF,SAClDi/I,MAAMnwD,YAAYh3F,OAAO6zB,UAAYszH,MAAMnwD,aACnD,OAAO5c,YAAY0wE,eAAgB,MAAO,GAAxB,GAAAr8I,OAA+BzO,OAAO+tF,YAAtC,uBACD5iE,MdzDA,QcwDV,GAAA1c,OAC0Bo7I,WAD1B,OAEU1+H,MdzDG,YcuDb,GAAA1c,OAE6Bo7I,WAF7B,OAGU1+H,MdzDC,ScyDa,QACdA,MAAM,cAAe,GACrBA,MAAM,UALhB,GAAA1c,OAK8B6iF,YAAYt9D,QAL1C,OAMUvgC,KAAK0zJ,MAAM1zJ,MACX03B,MAAM,aAAc,UACpBjJ,OCsKN2oI,CAAa1gI,UAAW/2B,KAAK+zJ,SAChCj6H,OAAQy9H,YAAYz9H,OACpBD,YACAoB,kBACA+zH,cACApuH,gBACAwzH,wBACAC,yBACDr0J,KAAK4M,kDAWR,IAgBI+qJ,eAhBEtjE,SAAWr0F,KAAKq0F,WADhBujE,cAOF53J,KAAK4M,SAJL+tF,YAHEi9D,cAGFj9D,YACAy5D,YAJEwD,cAIFxD,YACAC,YALEuD,cAKFvD,YACA5zH,SANEm3H,cAMFn3H,SANEo3H,mBAeF73J,KAAKk+F,cANLjjE,SATE48H,mBASF58H,SACAC,UAVE28H,mBAUF38H,UACArB,MAXEg+H,mBAWFh+H,MACAC,OAZE+9H,mBAYF/9H,OACAujE,OAbEw6D,mBAaFx6D,OACA2xD,OAdE6I,mBAcF7I,OAEE6E,gBAAkB7sE,YAAYF,6BAAc9mF,KAAK+xB,SAAU,OAAQ,GAAtC,GAAA1W,OAA6Cs/E,YAA7C,gBAEnC,OAAQl6D,UACR,IfxPW,MeyPPk3H,eAAc,UAAAt8I,OftPJ,UeuPV,MACJ,If1PY,Oe2PRs8I,eAAc,UAAAt8I,Of1PL,Se2PT,MACJ,If3Pc,Se4PVs8I,eAAc,UAAAt8I,Of/PP,OegQP,MACJ,QACIs8I,eAAc,UAAAt8I,OfjQN,Qe+QZ,OAZAw4I,gBAAgB53E,QAAhB,GAAA5gE,OAA2Bs/E,YAA3B,gBAAAt/E,OAAqDrb,KAAKgkF,MAAO,GACjE6vE,gBAAgB97H,MAAM,QAAS,QAE/B87H,gBAAgB97H,MAAM,QAAtB,GAAA1c,OAAkCxX,KAAK2P,IAAIynB,SAAUpB,OAAkB,EAATwjE,OAA9D,OACiBtlE,MAAM,SADvB,GAAA1c,OACoCxX,KAAK2P,IAAI0nB,UAAWpB,QAAmB,EAATujE,OADlE,OAEiBtlE,MAFjB,GAAA1c,OAE0Bs8I,gBAF1B,GAAAt8I,OAE+CgiF,OAF/C,OAGiBtlE,MAAM,SAHvB,GAAA1c,OAGoC2zI,OAHpC,OAAA3zI,OAGgD+4I,YAHhD,KAAA/4I,OAG+Dg5I,cAC/Dr0J,KAAK6zJ,gBAAgBA,gBAAgB/kI,QAGrC9uB,KAAK83J,YAAYjE,iBACjBx/D,SAASolD,mBAAmBz5I,KAAK+K,OAAO9C,IAAI,SAAApP,GAAC,OAAIA,EAAEi+B,MAC5C+8H,gFASU9oJ,MACjB,IAAM+H,UAAY9S,KAAK8S,YAEvB,MAAa,YADA9S,KAAK+uJ,WAAW5xI,UAAUzR,OAAO,GAAGrQ,sLAE7C08J,IACKjlJ,UAAY/H,KAAKxJ,SAGjBuR,YAAa/H,KAAKymJ,iDArPhB/1J,cACX,OAAO,IAAI65J,aAAa75J,oEAWxB,OAAO4nH,+FAWP,OAAO6wC,2NC9Ef,IAAM8D,mBAAiBC,+BAAAC,sBhBeG,cgBblBC,SAAU,SAAAA,SAAAptJ,MAAI,OACVgQ,KAAM,GACNK,OAAQrQ,OAEZqtJ,sBAAuB,SAAAA,sBAACl6D,aAAgB,IAEhC84D,WAEA94D,YAFA84D,WACAn9H,MACAqkE,YADArkE,MAEJ,OACI9e,KACI8e,MAAK,GAAAxe,OAAKwe,MAAL,MACL+G,QAAO,GAAAvlB,OAAK,EAAL,OAEXD,QACIye,MAAO,SAAAA,MAAChhC,EAAGN,GAAJ,SAAA8iB,OAAa27I,WAAWz+J,GAAGshC,MAA3B,OACP+G,QAAO,GAAAvlB,OAAK,EAAL,SAInBg9I,kBAAmB,SAAAA,kBAACn6D,aAAgB,IACxB44D,cAA0B54D,YAA1B44D,cACR,OACIwB,WAF8Bp6D,YAAXpkE,OAGnBy+H,UAAWzB,cAAcj9H,MACzB2+H,aACIC,YAAY,EACZC,UAAU,OA7BPT,+BAAAC,mBhBgBC,YgBmBhBC,SAAU,SAAAA,SAAAptJ,MAAI,OACVgQ,IAAKhQ,KACLqQ,OAAQ,SAAAA,OAAAviB,GAAC,OAAKA,MAElBu/J,sBAAuB,SAAAA,sBAACl6D,YAAatxF,QAAW,IAExCitB,MACAqkE,YADArkE,MAEI+G,QAAYh0B,OAAZg0B,QAER,OACI7lB,KACI8e,MAAK,GAAAxe,OAAKwe,MAAL,MACL+G,QAAO,GAAAvlB,OAAKulB,QAAL,OAEXxlB,QACIye,MAAK,GAAAxe,OAAKwe,MAAL,MACL+G,QAAO,GAAAvlB,OAAK,EAAL,SAInBg9I,kBAAmB,SAAAA,kBAACn6D,aAAgB,IACxB44D,cAAyB54D,YAAzB44D,cAAej9H,MAAUqkE,YAAVrkE,MACvB,OACIy+H,WAAYxB,cAAch9H,OAC1By+H,UAAW1+H,MACX2+H,aACIC,YAAY,EACZC,UAAU,OA/DPR,oBAsEVS,gBAAcV,+BAAAW,mBhB1DP,OgB2DRZ,kBAAiB,UADFC,+BAAAW,gBhBzDN,QgB2DRZ,kBAAiB,UAFHC,+BAAAW,gBhB3DR,MgB8DRZ,kBAAiB,YAHDC,+BAAAW,gBhBxDL,SgB4DRZ,kBAAiB,YAJJY,iBAOdC,cAAYZ,+BAAAa,iBhBjEL,OAcD,OgBmDMb,+BAAAa,chBhEJ,QAUA,SgBsDIb,+BAAAa,chBlEN,MAMG,UgB4DGb,+BAAAa,chB/DH,SAGA,UgB4DGA,eAgBZC,WAASd,+BAAAe,chBjFF,QgBkFP1H,MhB1EQ,UgByEC2G,+BAAAe,WhBhFD,SAOA,QgB2EA1H,QAFC2G,+BAAAe,WhBlFH,OgBqFP1H,MhB5ES,UgByEC2G,+BAAAe,WhB/EA,UAMD,QgB6EC1H,QAJA0H,YClDTC,8BAAuB,SAAvBA,qBAAwBv+H,QAAS3D,UAAW4jE,YAAa5vF,MAClE,IAAImuJ,UACAC,WACAC,cACAC,aACEn7D,YAAcxjE,QAAQwjE,cAEpBb,OAOAa,YAPAb,OACA2xD,OAMA9wD,YANA8wD,OACAuI,YAKAr5D,YALAq5D,YACA19H,MAIAqkE,YAJArkE,MACAC,OAGAokE,YAHApkE,OACAmB,SAEAijE,YAFAjjE,SACAC,UACAgjE,YADAhjE,UAGRi+H,WAAar/H,QAAUy9H,YAAYz9H,OAAS,EAAIujE,OAAS,EAAI2xD,QAC7DkK,UAAYr/H,OAAkB,EAATwjE,OAAsB,EAAT2xD,QAElCoK,cAAgBl+H,WAAaq8H,YAAYz9H,OAAkB,EAATujE,OAAsB,EAAT2xD,QAC/DqK,aAAep+H,UAAqB,EAAToiE,OAAsB,EAAT2xD,QAExC,IAAIsK,WAAatyE,YAAYjwD,UAAW,OAAQ,GAApB,GAAA1b,OAA2Bs/E,YAA3B,iBAiB5B,OAhBA2+D,WAAWx7I,OAAX,IAAAzC,OAAsBs/E,YAAtB,qBAAqDn1D,SAEjD6zH,cAAgBA,aAAeH,YAC/BI,WAAaA,WAAWvhI,MjB7EX,QiB6EA,GAAA1c,OAA2Bg+I,aAA3B,OAA6CthI,MAAM,aAAc,WAG9EqhI,eAAiBA,cAAgBD,YACjCG,WAAWvhI,MjB/EG,SiB+Ed,GAAA1c,OAA4B+9I,cAA5B,OAA+CrhI,MAAM,aAAc,WAGvEuhI,WAAatyE,YAAYsyE,WAAY,OAAQ,GAArB,GAAAj+I,OAA4Bs/E,YAA5B,sBAEb5iE,MjBtFM,QiBsFjB,GAAA1c,OAA2B69I,UAA3B,OACAI,WAAWvhI,MjBrFO,SiBqFlB,GAAA1c,OAA4B89I,WAA5B,QAGSI,WA1EoB,SAApBC,kBAAqBziI,UAAWhsB,KAAM0uJ,gBAC/C,IAAMv7D,YAAcu7D,eAAev7D,cAC7BtxF,OAAS6sJ,eAAe7sJ,SAE1BoqJ,WACA94D,YADA84D,WAGAr8D,YAEA/tF,OAFA+tF,YACAl6D,SACA7zB,OADA6zB,SAEEi5H,YAAcf,eAAel4H,UAC7B03H,SAAWuB,YAAYvB,SAASptJ,MAChCkd,SAAWyxI,YAAYtB,sBAAsBl6D,YAAatxF,QAE1D4N,KAAOwsE,YAAYjwD,UAAW,MAAOohI,SAASp9I,IAA5B,GAAAM,OAAoCs/E,YAApC,gBACxBngF,KAAKud,MjB7Ba,SiB6BC,SAACl/B,EAAGN,GAAJ,SAAA8iB,OAAa27I,WAAWz+J,GAAGuhC,OAA3B,QACnBtf,KAAKud,MjBhCY,QiBgCC9P,SAASlN,IAAI8e,OAC/Brf,KAAKud,MAAM,UAAW9P,SAASlN,IAAI6lB,SAEnC,IAAMrnB,QAAUytE,YAAYxsE,KAAM,MAAO29I,SAAS/8I,OAAvB,GAAAC,OAAkCs/E,YAAlC,oBAI3B,OAHAphF,QAAQwe,MjBpCS,QiBoCI9P,SAAS7M,OAAOye,OACrCtgB,QAAQwe,MAAM,UAAW9P,SAAS7M,OAAOwlB,SAElCrnB,QAkDYigJ,CAAkBF,WAAYvuJ,KAAM2vB,WAW9Ci/H,4BAAqB,SAArBA,mBAAsBj/H,QAAS3D,WAAc,IAAAm9E,gBAIlDx5E,QAAQ9tB,SAFR+tF,YAFkDuZ,gBAElDvZ,YAGEo8D,gBALgD7iD,gBAGlDlqG,KAEyB3J,KAAKujG,YAE5BrzB,MAAQwoF,UAAUhC,iBAClB6C,aAAe5yE,YAAYjwD,UAAW,MAAO,SAACl+B,EAAGN,GAAJ,OAAUg4E,MAAMtoE,IAAI,SAAAxN,GAAC,OAAKA,EAAG5B,EAAE4B,GAAI5B,EAAE25C,MAAO35C,EAAE6/B,KAC7F7/B,EAAEW,MAAOkhC,QAAQ5nB,YAAava,MADF,GAAA8iB,OACUs/E,YADV,sBAG1Bk/D,WAAahB,aAAa9B,iBAGhC,OADA6C,aAAa39E,QAAQ49E,YAAY,IACxBD,4BASAE,wBAAiB,SAAjBA,eAAkB9vJ,KAAM+vJ,YAAaC,eAAgBt/H,SAAY,IAAAu/H,qBAMtEv/H,QAAQwjE,cAJRt9D,QAFsEq5H,qBAEtEr5H,QACA81H,YAHsEuD,qBAGtEvD,YACAO,WAJsEgD,qBAItEhD,WACAC,aALsE+C,qBAKtE/C,aAEEl0H,KAAOg3H,eAA4B,GAAVp5H,QAAc,EAE7C,OAAI52B,KAAK,KAAOsnJ,MACZ,GAAAj2I,OAAUq7I,YAAY1sJ,KAAK,IAAI+vJ,aAA/B,MAEJ,GAAA1+I,OAA0B,UAAhB0+I,aAA4BC,eAAgC/C,WAAWjtJ,KAAK,IAAI+vJ,aAAe/2H,KAAlDk0H,aAAvD,OA+ESgD,oBAAa,SAAbA,WAAcv5D,KAAM5pE,UAAWzlB,MAAOopB,SAAY,IAEvDigE,YAMAjgE,QANAigE,YACA29D,WAKA59H,QALA49H,WACAC,UAIA79H,QAJA69H,UACArB,aAGAx8H,QAHAw8H,aACAt2H,QAEAlG,QAFAkG,QACA4R,MACA9X,QADA8X,MAEE9P,IAAMskD,YAAYjwD,UAAW,MAAO,SAAAxc,GAAC,OAAKA,IAAzB,GAAAc,OAAgCs/E,YAAhC,qBACtBtpC,KjBhOgB,QiBgOJ6lG,cACZ7lG,KjB/NiB,SiB+NJinG,YACbvgI,MjBlOgB,QiB+NL,GAAA1c,OAGK67I,aAHL,OAIXn/H,MjBjOiB,SiB6NN,GAAA1c,OAIMi9I,WAJN,OjBjMI,SiBuMZ33D,KAxEY,SAAd+6B,YAAwB7iI,EAAGwuB,KAAM8yI,YAAatgI,MAAOC,QACvD,IAAM6hG,aAAet0G,KAEfqR,KAAO7/B,EAAE,IAAMgL,KAAK2P,IAAIqmB,MAAOC,QAAUj2B,KAAKgwC,GAC9C0sD,MAAQ1nG,EAAE,IAAMshK,YAEtB,GAAI55D,iBAAiB/Z,QACjB+Z,MAAMnW,KAAK,SAAC/7D,KAER,OADAx1B,EAAE0nG,MAAQlyE,IACHqtG,YAAY7iI,EAAGwuB,YAEvB,IAAIk5E,iBAAiBq7B,QAAS,CACjC,IAAIC,SAAWt7B,MAAM7oB,WAAU,GAE/B,GAAwC,QAApCmkD,SAASC,SAASr6H,cAAyB,CAC3C,IAAMs6H,IAAMF,SAASE,KAAOF,SAASG,MACrCH,SAAWvlG,SAASuM,gBAAgB,6BAA8B,UACzDd,aAAa,OAAQg6F,KAIlC,OAFqBj1C,6BAAc+0C,UACtBxqE,KAAK,YAAlB,SAAAh2C,OAAwCqd,KAAO,IAA/C,MACOouD,6BAAc60C,aAAa7sG,OAAOgT,YAAY+5F,WAErD,IAAIK,QADD,GAAqB,iBAAV37B,MAOd,OAFI27B,QAxCM,SAAZC,UAAahyH,KACf,SAAI,0CAA0CtM,KAAKsM,MAAQ,UAAUtM,KAAKsM,MAAQA,IAAIzI,OAAS,GAoCvFy6H,CAAU57B,OACAA,MAEAi0D,kBAASj0D,OAAO7nE,KAAKA,KAArB87H,GAEPxtE,YAAY20C,aAAc,OAAQ,SAAA5wH,MAAI,OAAKA,QAAOsmD,KAAK,IAAK6qE,SAGvE,OADArjI,EAAE,GAAK,SACA6iI,YAAY7iI,EAAGwuB,KAAM,UA0CxBq0G,CAAYpqH,MADE01E,YAAYtkD,IAAK,KAAMpxB,MAAM,IAAlB,GAAA+J,OAA0Bs/E,YAA1B,iBACCrpF,MAAM,GAAK,SAAW,SAAUinJ,UAAWD,YACpDjnG,KAAK,YADtB,aAAAh2C,OACgD67I,aAAe,EAAIt2H,QADnE,KAAAvlB,OAC8Ei9I,WAAa,EAD3F,MAEiBjnG,KAAK,OAAQ//C,MAAM,IAAMkhC,OAE1Cw0C,YAAYtkD,IjB7MA,QiB6MYpxB,MAAM,IAAnB,GAAA+J,OAA2Bs/E,YAA3B,iBACMtpC,KAAK,IAAK,GACVA,KAAK,IAAK,GACVA,KjB9OJ,QiB8OgB6lG,cACZ7lG,KjB7OH,SiB6OgBinG,YACbjnG,KAAK,OAAQ//C,MAAM,IAAMkhC,i+ECrO7B4nH,0wBAAuB9E,iVAgCzBvuH,OAAO,IAAAszH,cACqB5F,2BAAa1tH,OAA5C2tH,UADU2F,cACV3F,UAAWl+I,OADD6jJ,cACC7jJ,OAAQo+I,QADTyF,cACSzF,QACvBE,gBAAkBwF,kCAAI,IAAI/jJ,IAAIC,SAC5BlL,MAAQtL,KAAK+uJ,WAAWngJ,gBAAgBhG,OAAO,GAHnC2xJ,cAIQjvJ,MAAMI,SAAxBrQ,KAJUk/J,cAIVl/J,KAAM0a,QAJIwkJ,cAIJxkJ,QA6Bd,OA3BA++I,gBAAkBA,gBAAgB7sJ,IAAI,SAACktJ,IAAK58J,GAAM,IAAAo6B,KAC1Cn5B,MAAQ,EACR+H,MAAQ,EACNiwJ,OAASsD,gBAAgBv8J,GAC/B,GAAI8C,OAAS8D,yBAAUC,QAAS,CAG5BmC,OAFA/H,QAAUs7J,gBAAgBv8J,IAAImlD,QAAQ,IACtBo3G,gBAAgBv8J,EAAI,IAAMu8J,gBAAgBv8J,EAAI,IAAMiB,OAC5CkkD,QAAQ,QAC7B,CACH,IAAI05D,UAAYo6C,OACZz7I,UAAYnX,gCAAiBE,WAC7Bs4G,UAAYzjC,4BAAemhF,gBAAgBv8J,GAAI+S,MAAMw6H,iCAEzDtsI,MAAQ49G,UACR71G,OAAS61G,WAEb,OAAAojD,+BAAA7nI,QACK+hI,UAAY3tH,MAAM6tH,SAASO,MADhCqF,+BAAA7nI,KAAA,QAEIn5B,OAFJghK,+BAAA7nI,KAAA,KAGQp6B,GAHRiiK,+BAAA7nI,KAAA,QAIIpxB,OAJJi5J,+BAAA7nI,KAAA,SAKI6+H,QALJ7+H,OAOD3f,OAAO,SAAAna,GAAC,OAAgB,OAAZA,EAAEW,QAEjBs7J,gBlBvCY,SkBuCMJ,UAAqBI,gBAAgBvkJ,KAAK,SAAC5V,EAAGyI,GAAJ,OAAUzI,EAAE+5J,WAAatxJ,EAAEsxJ,aACjFI,wDAYN,IAAMzgE,SAAWr0F,KAAKq0F,WAChBtpF,KAAO/K,KAAK+K,OACV4vF,YAAgB36F,KAAK4M,SAArB+tF,YACFk5D,gBAAkB4G,oBAAAC,+BAAAN,eAAA//J,WAAA,SAAA2F,MAAAtH,KAAAsH,KAAaA,KAAK+xB,SAElCwnI,WAAeN,8BAAqBj5J,KAAM6zJ,gBAAiBl5D,YAAa5vF,MAAxEwuJ,WAMR,ODwJ0B,SAArBoB,mBAAsBjgI,QAAS3D,WACxC,IAAM64E,aAAel1E,QAAQg7H,cADyBvjD,iBAKlDz3E,QAAQ9tB,SAFL5C,KAH+CmoG,iBAG/CnoG,KACA2wF,YAJ+CwX,iBAI/CxX,YAJ+CigE,sBASlDlgI,QAAQwjE,cAFRg5D,aAPkD0D,sBAOlD1D,aACAt2H,QARkDg6H,sBAQlDh6H,QARkDi6H,WAe9C7wJ,KAAK22F,KAJE43D,UAXuCsC,WAW9ChhI,MACQy+H,WAZsCuC,WAY9C/gI,OACA0Y,MAb8CqoH,WAa9CroH,MACAtT,UAd8C27H,WAc9C37H,UAGF63H,gBAAkB/sJ,KAAK3J,KAAKujG,YAC5BxhG,UAAY4H,KAAK3J,KAAK+B,UAE5BwtG,aAAa70E,uBAAsB,GACnC4sD,WAAW5wD,WACP8C,MAAO,SAAAA,MAAAhhC,GAAC,OAAIihK,wBAAejhK,EjBhRd,SiBgRwB,EAAO6hC,UAC5CZ,OAAQ,SAAAA,OAAAjhC,GAAC,OAAIihK,wBAAejhK,EjB/Qd,UiB+QyB,EAAO6hC,UAC9CogI,ajBzPc,SiB0Pdl6H,QAAO,GAAAvlB,OAAKulB,QAAL,QAGXgvE,aAAax3E,SAASsC,QAAQm7H,gBAC9B,IAAMnnF,QAAU33C,UAAUhsB,OAC1BgsB,UAAUwO,KAAK,SAAU1sC,EAAGN,GACpBM,EAAE,KAAOy4J,MACTxqE,6BAAc9mF,MAAMK,KAAK+B,UAAUvJ,EAAE,GAAIN,EAAGm2E,QAASh0C,UACpC3C,MADjB,WAAA1c,OjBrQS,UiBsQyB07I,gBjBvQ1B,OACC,SiBsQqE,QAG9EjwE,6BAAc9mF,MAAMi8E,QAApB,GAAA5gE,OAA+Bs/E,YAA/B,KAAAt/E,OAA8C6jB,YAAa,GAC3D4nD,6BAAc9mF,MAAMi8E,QAApB,GAAA5gE,OAA+Bs/E,YAA/B,KAAAt/E,OAA8C6jB,UAA9C,KAAA7jB,OAA2D9iB,IAAK,GAChE2hK,oBAAW,SAAUpzE,6BAAc9mF,MAAOnH,GACtC8hG,wBACA49D,oBAEAD,sBACApB,0BACAt2H,gBACA4R,iBCzMRmoH,CAAmB36J,KADM25J,4BAAmB35J,KAAMu5J,YAA1CK,cAER/F,gBAAgB9iG,UAAU,OAAOh5B,MAAM,QlB3E3B,QkB4EZs8D,SAAS/B,yBACT+B,SAASolD,mBAAmBz5I,KAAK+K,OAAO9C,IAAI,SAAApP,GAAC,OAAIA,EAAEi+B,MAC5C+8H,wDA7EIp4J,cACX,OAAO,IAAI2+J,eAAe3+J,kDAW1B,MlBGgB,iCmB9BXs/J,kBAAoB,SAApBA,kBAAqBhwJ,MAC9B,MAA6B,iBAAlBA,KAAK,GAAGvR,MACRuR,KAAKgH,OAAO,SAACipJ,YAAaC,cAAd,OACdp3J,KAAK2P,IAAIynJ,aAAazhK,MAAOwhK,YAAY,IAAKn3J,KAAK6P,IAAIunJ,aAAazhK,MAAOwhK,YAAY,OACnFxyJ,OAAO0yJ,UAAW1yJ,OAAO2yJ,YAE/BpwJ,KAAK9C,IAAI,SAAAxN,GAAC,OAAIA,EAAEjB,SA+DrBy/J,qCAAuB,SAAvBA,qBAAwBliI,UAAW4jE,YAAa5vF,MAClD,IAAMyL,OAASukJ,kBAAkBhwJ,MAC3B8oJ,gBAAkB7sE,YAAYjwD,UAAW,OAAQ,GAApB,GAAA1b,OAA2Bs/E,YAA3B,iBAC7BygE,cAAgBp0E,YAAY6sE,gBAAiB,OAAQ,GAA1B,GAAAx4I,OAAiCs/E,YAAjC,cAC3B0gE,eAAiBr0E,YAAYo0E,cAAe,KAAM,GAAtB,GAAA//I,OAA6Bs/E,YAA7B,oBAIlC,OACIk5D,gCACAwH,8BACAD,4BACAE,eAhE0B,SAArBC,mBAAsBxkI,UAAWhsB,KAAMyL,QAChD,IAAMssH,KAAO97C,YAAYjwD,UAAW,QAAS,IACvCukI,eAAiBt0E,YAAY87C,KAAM,kBAAmB,IAC/CzxE,KAAK,KAAM,mBACXA,KAAK,KAAM,MACXA,KAAK,KAAM,MAIxB,OAHA21B,YAAYs0E,eAAgB,OAAQvwJ,KAAM,iBACzBsmD,KAAK,SAAU,SAAAx4D,GAAC,SAAAwiB,OAA+B,KAAvBxiB,EAAEW,MAAQgd,OAAO,KAAaA,OAAO,GAAKA,OAAO,IAAzD,OAChB66C,KAAK,aAAc,SAAAx4D,GAAC,OAAIA,EAAE25C,QACpC8oH,eAgDgBC,CAAmBH,cAAerwJ,KAAMyL,QAQ3DglJ,WAPex0E,YAAYq0E,eAAgB,QAAS,GAA1B,GAAAhgJ,OAAiCs/E,YAAjC,qBAmBrBmd,2BAAa,SAAbA,WAAcp9E,QAAS3D,UAAW+C,OAAQD,OACnD,IAAMq2B,KAAOx1B,QAAQw1B,OAErBA,KAAK05F,kBAAkB/vH,MAAOC,QAC9Bo2B,KAAKkzC,OAAOrsE,UAAUjI,QACtBohC,KAAKzsC,SAAS2/E,m+ECnGGq4D,0wBAAuBnG,iUAiCpC,OAAIlwJ,UAAK1D,QACL1B,KAAKi2G,MAAL7wG,UAAA1D,QAAA,OAAA4L,EAAAlI,UAAA,GACOpF,MAEJA,KAAKi2G,0DAUDlvE,OACX,IAAI+tH,mBADcuF,cAE4B5F,2BAAa1tH,OAAnD2tH,UAFU2F,cAEV3F,UAAWl+I,OAFD6jJ,cAEC7jJ,OAAQm+I,MAFT0F,cAES1F,MAAOC,QAFhByF,cAEgBzF,QAelC,OAbID,iBAAiB9rJ,OACb2N,OAAO,GAAKm+I,MAAM,KAClBG,gBAAgB,GAAKt+I,OAAO,IAEhCs+I,mBAAez5I,OAAAqgJ,kCAAO5G,iBAAP4G,kCAA2B/G,QACtCn+I,OAAOA,OAAO9U,OAAS,GAAKizJ,MAAMA,MAAMjzJ,OAAS,IACjDozJ,gBAAgB5uJ,KAAKsQ,OAAO,KAGhCs+I,gBAAkBD,kCAAoBr+I,OAAQm+I,MAAQ,IAE1DG,gBAAkB4G,kCAAI,IAAInlJ,IAAIu+I,kBAAkBvkJ,KAAK,SAAC5V,EAAGyI,GAAJ,OAAUzI,EAAIyI,KAE5C6E,IAAI,SAACktJ,IAAK58J,GAAM,IAAAo6B,KAC7Bn5B,MAAQs7J,gBAAgBv8J,GAC9B,OAAAojK,+BAAAhpI,QACK+hI,UpBtCG,SoBsCSA,UAAqB3tH,MAAM6tH,SAASO,KAAOpuH,MAAMsuH,iBACxDtuH,MAAM6tH,SAAS/wJ,KAAK8M,MAAMwkJ,OAFpCwG,+BAAAhpI,KAAA,SAGYn5B,MAAMkkD,QAAQ,IAH1Bi+G,+BAAAhpI,KAAA,KAIQp6B,GAJRo6B,OAMD3f,OAAO,SAAAna,GAAC,OAAgB,OAAZA,EAAEW,8DAWL08J,YACZl2J,KAAK4M,QACD5C,MACI3J,MACIujG,YAAa5jG,KAAK4M,SAAS6zB,aAIvC,IAAMyvB,KDvDY,SAAbgmD,WAAcx7E,SACvB,IAAM3vB,KAAO2vB,QAAQ3vB,OACbu8B,MAAU5M,QAAQ9tB,SAAlB06B,MACFu8G,SAAWnpH,QAAQi7H,OAAO9R,SAC1B+X,QAAU,IAAIjjD,8BAChB7hF,GAAE,UAAAzb,OAAYqf,QAAQspD,KACtB4f,YAAat8D,QAAU2sH,enB3BV,QACC,SmB2Bdl8H,MAAO2C,QAAQm7H,eACfl2G,MAAM,EACN0vD,cAAc,EACdh/C,WAAYtlD,KAAK9C,IAAI,SAAApP,GAAC,OAAIA,EAAEW,QAC5Bw1G,eAAe,EACfC,QACIC,SAAU,KAEbU,aAAcl1E,QAAQg7H,gBAI3B,OAFAkG,QAAQplJ,OAAOukJ,kBAAkBhwJ,OACjC6wJ,QAAQr6J,OAAO,EAAG,KACX,IAAIsiJ,UAAWpgI,OAAOm4I,SAAShvJ,QAClCywF,QAAUv5D,KAAM,EAAGgsB,OAAQ,EAAGpvB,IAAK,EAAGqD,MAAO,KCmChCmyE,CAAWl2G,MAClB67J,UAAY3rG,KAAKs9F,kBACjBz4E,OAAUl7C,MAAOgiI,UAAUhiI,MAAQq8H,WAAYp8H,OAAQ+hI,UAAU/hI,OAASo8H,YAC1E4F,iBAAmB5rG,KAAKzsC,SAASjN,SAAS9U,OAC1Cg1J,YAAc,IAAI7tJ,MAAMizJ,kBAAkBn/G,KAAKo4B,OAGrD,OADA/0E,KAAKkwD,KAAKA,MACHwmG,0EAUP,OACI99D,aAAc54F,KAAK+7J,4DAYvB,IAAM1nE,SAAWr0F,KAAKq0F,WAChBw/D,gBAAkBmI,oBAAAC,+BAAAR,eAAAphK,WAAA,SAAA2F,MAAAtH,KAAAsH,KAAaA,KAAK+xB,SAM1C,ODpBsB,SAAjBmqI,eAAkBxhI,QAAS3D,WACpC,IAAIoiI,WACAD,UAF8C/mD,iBAO9Cz3E,QAAQ9tB,SAHR06B,MAJ8C6qE,iBAI9C7qE,MACAqzD,YAL8CwX,iBAK9CxX,YACA3wF,KAN8CmoG,iBAM9CnoG,KAEEe,KAAO2vB,QAAQ3vB,OAR6BoxJ,sBAgB9ClD,qCAAqBliI,UAAW4jE,YAAa5vF,MAL7C8oJ,gBAX8CsI,sBAW9CtI,gBACAuH,cAZ8Ce,sBAY9Cf,cACAC,eAb8Cc,sBAa9Cd,eACAC,eAd8Ca,sBAc9Cb,eACAE,WAf8CW,sBAe9CX,WAEEniD,SAAW3+E,QAAQw1B,OAAOzsC,SAAS4uF,oBAAoBC,eAjBX2nD,qBA4B9Cv/H,QAAQwjE,cATRt9D,QAnB8Cq5H,qBAmB9Cr5H,QACAy8D,OApB8C48D,qBAoB9C58D,OACA2xD,OArB8CiL,qBAqB9CjL,OACAuI,YAtB8C0C,qBAsB9C1C,YACAT,cAvB8CmD,qBAuB9CnD,cACA57H,UAxB8C++H,qBAwB9C/+H,UACAD,SAzB8Cg/H,qBAyB9Ch/H,SACAnB,OA1B8CmgI,qBA0B9CngI,OACAD,MA3B8CogI,qBA2B9CpgI,MAEE24H,sBAEN2G,WAAat1J,KAAK8M,MAAMmpB,QAAUy9H,YAAYz9H,OAAS,EAAIujE,OAAS,EAAI2xD,SACxEkK,UAAYr1J,KAAK8M,MAAMkpB,OAAkB,EAATwjE,OAAsB,EAAT2xD,SAEzC1nH,QAAU2sH,kBACVzB,mBAAmB14H,OAAS9vB,KAAK22F,KAAK7mE,OACtC04H,mBAAmB34H,MAAQq/H,UAAY,EAAIt4H,QAAUy4E,SAASx/E,MAAQ,EACtEyhI,eAAejqG,KAAK,KAAM,QAAQA,KAAK,KAAM,MAC7CgqG,eAAehqG,KAAK,YAApB,cAAAh2C,OAA+Cg+F,SAASx/E,MAAQ,EAAhE,QACAi+E,2BAAWp9E,QAASm5H,gBAAiBsF,WAAanvJ,KAAK22F,KAAK7mE,OAAS8G,QAASs4H,UAAY,EAAIt4H,QAAU,GACxGizH,gBAAgB53E,QAAhB,GAAA5gE,OAA2Bs/E,YAA3B,eAAqD9gE,MAAQoB,UAE7D0sD,WAAWksE,iBACP/5H,OAAM,GAAAze,OAAKy7I,cAAch9H,OAASk1H,OAASpuH,QAArC,MACN/G,MAAK,GAAAxe,OAAKxX,KAAK2P,IAAIqmB,MAAOoB,UAArB,MACL2F,QAAO,GAAAvlB,OAAKulB,QAAL,QAGX46H,WAAWnqG,KAAK,SAAUmhG,mBAAmB14H,QAC7C0hI,WAAWnqG,KAAK,QAASmhG,mBAAmB34H,MAAQw/E,SAASx/E,MAAQ,KAErE24H,mBAAmB14H,OAASq/H,WAAa,EAAIv4H,QAAUy4E,SAASv/E,OAAS,EACzE04H,mBAAmB34H,MAAQ7vB,KAAK22F,KAAK9mE,MACrCyhI,eAAejqG,KAAK,KAAM,MAAMA,KAAK,KAAM,QAC3CgqG,eAAehqG,KAAK,YAApB,eAAAh2C,OAAgDg+F,SAASv/E,OAAS,EAAlE,MACAg+E,2BAAWp9E,QAASm5H,gBAAiBsF,WAAa,EAAIv4H,QAAU,EAAGs4H,UAAYlvJ,KAAK22F,KAAK9mE,MAAkB,EAAV+G,SACjGizH,gBAAgB53E,QAAhB,GAAA5gE,OAA2Bs/E,YAA3B,eAAqD7gE,OAASoB,WAC9DysD,WAAWksE,iBACP/5H,OAAM,GAAAze,OAAKxX,KAAK2P,IAAIsmB,OAAQoB,WAAtB,MACNrB,MAAK,GAAAxe,OAAKwe,MAAL,MACL+G,QAAO,GAAAvlB,OAAKulB,QAAL,QAEX46H,WAAWnqG,KAAK,SAAUmhG,mBAAmB14H,OAASu/E,SAASv/E,OAAS,GACxE0hI,WAAWnqG,KAAK,QAASmhG,mBAAmB34H,QAIhD8tD,WAAWyzE,eACPthI,OAAM,GAAAze,OAAKm3I,mBAAmB14H,OAAxB,MACND,MAAK,GAAAxe,OAAKm3I,mBAAmB34H,MAAxB,QAIT8tD,WAAW6zE,YACP7+G,KAAM,0BAEVy+G,cAAc/pG,KAAK,SAAUmhG,mBAAmB14H,QAChDshI,cAAc/pG,KAAK,QAASmhG,mBAAmB34H,OAE/Ca,QAAQwjE,aACJs0D,wCAEJ93H,QAAQqhI,mBAAqBX,cClEzBc,CAAel8J,KAAM6zJ,iBACrBA,gBAAgB9iG,UAAU,OAAOh5B,MAAM,QpB/G3B,QoBgHZs8D,SAAS/B,yBACT+B,SAASolD,mBAAmBz5I,KAAK+K,OAAO9C,IAAI,SAAApP,GAAC,OAAIA,EAAEi+B,MAC5C+8H,gFASU9oJ,MACjB,QAAS/K,KAAK8S,cAAe/H,KAAKvR,gDAhIvBiC,cACX,OAAO,IAAIggK,eAAehgK,kDAW1B,MpBhBgB,+7EqBGH2gK,8tBAAmB9G,iUAgCrBvuH,OACX,IAAImuH,aADcmF,cAE4B5F,2BAAa1tH,OAAnD2tH,UAFU2F,cAEV3F,UAAWl+I,OAFD6jJ,cAEC7jJ,OAAQm+I,MAFT0F,cAES1F,MAAOC,QAFhByF,cAEgBzF,QAE1BxyJ,UAAcpC,KAAK4M,SAAnBxK,UACF6yJ,cACF59E,MAAO,KAAMk9E,MAAO,MA6BxB,GA1BII,iBAAiB9rJ,OACb2N,OAAO,GAAKm+I,MAAM,KAClBM,aAAa59E,OAAQ,GAAAh8D,OAAIjZ,UAAUkyJ,OAAOj9E,MAArB,KAAAh8D,OAA8Bs5I,MAAM,MAE7DO,aAAS75I,OAAAghJ,8BAAOnH,WAAPmH,8BAAqB1H,QAC1Bn+I,OAAOA,OAAO9U,OAAS,GAAKizJ,MAAMA,MAAMjzJ,OAAS,KACjDuzJ,aAAaV,OAAQ,GAAAl5I,OAAIjZ,UAAUkyJ,OAAOC,MAArB,KAAAl5I,OAA8Bs5I,MAAMA,MAAMjzJ,OAAS,OAG5EwzJ,UAAYL,kCAAoBr+I,OAAQm+I,OAI5CO,WADAA,UAAYmH,8BAAI,IAAI9lJ,IAAI2+I,YAAY3kJ,KAAK,SAAC5V,EAAGyI,GAAJ,OAAUzI,EAAIyI,KACjC6E,IAAI,SAACktJ,IAAK58J,GAAM,IAAAo6B,KAC9Bn5B,MAAQ,KAIZ,OAHIjB,EAAI28J,UAAUxzJ,OAAS,IACvBlI,MAAK,GAAA6hB,OAAO85I,IAAIz3G,QAAQ,GAAnB,OAAAriC,QAA8B65I,UAAU38J,EAAI,GAAGmlD,QAAQ,KAEhE4+G,2BAAA3pI,QACK+hI,UrBxCG,SqBwCSA,UAAqB3tH,MAAM6tH,SAASO,KAAOpuH,MAAMsuH,iBAAmBtuH,MAAM6tH,SAASO,MADpGmH,2BAAA3pI,KAAA,QAEIn5B,OAFJ8iK,2BAAA3pI,KAAA,KAGQp6B,EAAI,GAHZ+jK,2BAAA3pI,KAAA,SAIYwiI,IAAKD,UAAU38J,EAAI,KAJ/Bo6B,OAMD3f,OAAO,SAAAna,GAAC,OAAgB,OAAZA,EAAEW,QAEby7J,aAAa59E,MAAO,CACpB,IAAMklF,YAAcvH,gBrBlDX,SqBkDoCjuH,YAAO6tH,gBAASF,sBACvDl+I,cAAQm+I,YAAOM,4BACrBC,WAAaqH,aAAJlhJ,OAAAghJ,8BAAoBnH,YAEjC,GAAID,aAAaV,MAAO,CACpB,IAAMiI,YAAcxH,gBrBxDX,SqBwDoCjuH,YAAO6tH,gBAASF,sBAC3Dl+I,cAAQm+I,YAAOM,0BAAcC,sBAC/BA,aAAS75I,OAAAghJ,8BAAOnH,YAAWsH,cAE/B,OAAOtH,gEAWKgB,WAAY5uH,OAQxB,OAPAtnC,KAAK4M,QACD5C,MACI3J,MACIujG,YAAa5jG,KAAK4M,SAAS6zB,aAIvCg8H,gBAAAC,2BAAAN,WAAA/hK,WAAA,iBAAA2F,MAAAtH,KAAAsH,KAA4Bk2J,WAAY5uH,mDAUxC,MrB3FY,+CqBsGZ,IAAM+sD,SAAWr0F,KAAKq0F,WADhBulB,cAE4B55G,KAAK4M,SAA/B+tF,YAFFif,cAEEjf,YAAal6D,SAFfm5E,cAEen5E,SACf11B,KLzCU,SAAX4xJ,SAAW5xJ,MAAI,IAAA4nB,KAAA,OAAAslI,+BAAAtlI,QhBzER,OgB0ER5nB,KAAKuY,WADW20I,+BAAAtlI,KhBxEP,QgB0ER5nB,KAAKuY,WAFU20I,+BAAAtlI,KhB1ET,MgB6ER5nB,MAHiBktJ,+BAAAtlI,KhBvEN,SgB2ER5nB,MAJc4nB,KKyCPgqI,CAAS38J,KAAK+K,QAAQ01B,UAE7BozH,gBAAkB4I,gBAAAC,2BAAAN,WAAA/hK,WAAA,SAAA2F,MAAAtH,KAAAsH,KAAaA,KAAK+xB,SAGlCwnI,WAAeN,8BAAqBj5J,KAAM6zJ,gBAAiBl5D,YAAa5vF,MAAxEwuJ,WAOR,OJiKsB,SAAjBqD,eAAkBliI,QAAS3D,WACpC,IAAM64E,aAAel1E,QAAQg7H,cADqB3gD,iBAM/Cr6E,QAAQ9tB,SAHT5C,KAHgD+qG,iBAGhD/qG,KACAy2B,SAJgDs0E,iBAIhDt0E,SACAk6D,YALgDoa,iBAKhDpa,YALgDkiE,sBAW/CniI,QAAQwjE,cAHT44D,cARgD+F,sBAQhD/F,cACAI,aATgD2F,sBAShD3F,aACAt2H,QAVgDi8H,sBAUhDj8H,QAVgDk8H,YAgB/C9yJ,KAAK22F,KAHL9mE,MAb+CijI,YAa/CjjI,MACAC,OAd+CgjI,YAc/ChjI,OACA0Y,MAf+CsqH,YAe/CtqH,MAGCpwC,UACD4H,KAAK3J,KADJ+B,UAGJwtG,aAAa70E,uBAAsB,GArBe,IAAAgiI,sBAsBHpE,eAAel4H,UAAU43H,mBACpEvB,4BAAeh9H,cAAQD,cADnBy+H,WAtB0CyE,sBAsB1CzE,WAAYC,UAtB8BwE,sBAsB9BxE,UAAWC,YAtBmBuE,sBAsBnBvE,YAI/B7wE,WAAW5wD,WACP8C,MAAO,SAAAA,MAAAhhC,GAAC,OAAIihK,wBAAejhK,EjB9Ud,QiB8UwB2/J,YAAYC,WAAY/9H,UAC7DZ,OAAQ,SAAAA,OAAAjhC,GAAC,OAAIihK,wBAAejhK,EjB7Ud,SiB6UyB2/J,YAAYE,SAAUh+H,UAC7DogI,aAAc,SACdl6H,QAAO,GAAAvlB,OAAKulB,QAAL,QAGXgvE,aAAax3E,SAASsC,QAAQm7H,gBAC9B,IAAMnnF,QAAU33C,UAAUhsB,OAC1BgsB,UAAUwO,KAAK,SAAU1sC,EAAGN,GACpBM,EAAE,KAAOy4J,MACTxqE,6BAAc9mF,MAAMK,KAAK+B,UAAUvJ,EAAE,GAAIN,EAAGm2E,QAASh0C,UAErDw/H,oBjB5TQ,OiB4TSpzE,6BAAc9mF,MAAOnH,GAClC8hG,wBACA49D,oBACAD,sBACApB,0BACA1kH,gBIjNRoqH,CAAe58J,KAFU25J,4BAAmB35J,KAAMu5J,YAA1CK,cAGR/F,gBAAgB9iG,UAAU,OAAOh5B,MAAM,QrB3H3B,QqB4HZs8D,SAAS/B,yBACT+B,SAASolD,mBAAmBz5I,KAAK+K,OAAO9C,IAAI,SAAApP,GAAC,OAAIA,EAAEi+B,MAC5C+8H,gFAUU9oJ,MAEjB,OAAAuxJ,8BADkBt8J,KAAK8S,YAEN/H,KAAKxJ,+CAtIX9F,cACX,OAAO,IAAI2gK,WAAW3gK,kDAWtB,MrB1BY,sMsBZb,IAaMuhK,QAAU,UACVC,OAAS,SACTC,OAAS,SAiBTC,iCACT,SACA,SAGSC,iBAAeC,yBAAAC,oBAAA,GAAAjiJ,OARL,UAQK,KACT,EADS,KAAAA,OAlCP,SAmCgB++I,gCADTiD,yBAAAC,iBAAA,GAAAjiJ,OARL,UAQK,KAET,EAFS,KAAAA,OAhCR,QAkCgB++I,gCAFRiD,yBAAAC,iBAAA,GAAAjiJ,OARL,UAQK,KAGT,EAHS,KAAAA,OAjCP,SAoCgB++I,gCAHTiD,yBAAAC,iBAAA,GAAAjiJ,OARL,UAQK,KAIT,EAJS,KAAAA,OAlCP,SAsCiB++I,gCAJViD,yBAAAC,iBAAA,GAAAjiJ,OARL,UAQK,KAKT,EALS,KAAAA,OAjCP,SAsCiB++I,gCALViD,yBAAAC,iBAAA,GAAAjiJ,OARL,UAQK,KAMT,EANS,KAAAA,OAhCR,QAsCiB++I,gCANTiD,yBAAAC,iBAAA,GAAAjiJ,OATN,SASM,KAOV,EAPU,KAAAA,OAhCR,QAuCgB++I,gCAPRiD,yBAAAC,iBAAA,GAAAjiJ,OATN,SASM,KAQV,EARU,KAAAA,OAhCR,QAwCe++I,gCARPiD,yBAAAC,iBAAA,GAAAjiJ,OATN,SASM,KASV,EATU,KAAAA,OAjCP,SA0CgB++I,gCATTiD,yBAAAC,iBAAA,GAAAjiJ,OATN,SASM,KAUV,EAVU,KAAAA,OAlCP,SA4Ce+gJ,wBAVRiB,yBAAAC,iBAAA,GAAAjiJ,OATN,SASM,KAWV,EAXU,KAAAA,OAlCP,SA6CgBogJ,gCAXT6B,kBAcf7wD,mBAAO,OACPC,oBAAQ,QACRH,qBAAS,SACTC,kBAAM,MAQN+wD,kBAAoB,WACpBC,gBAAkB,+tCC/CxB,IAAMC,gBAAQ,SAARA,QAAQ,QAAA52F,KAAAzhE,UAAA1D,OAAIyjI,KAAJ,IAAAt8H,MAAAg+D,MAAAC,KAAA,EAAAA,KAAAD,KAAAC,OAAIq+D,KAAJr+D,MAAA1hE,UAAA0hE,MAAA,OAAA42F,oBAAiB54B,cAAjB64B,4BAAiCx4B,KAAKl9H,IAAI,SAAAgoJ,UAAQ,OAAI,IAAI1qB,0BAAe0qB,eAqCvF,SAAS1zE,eAAMqhF,SAKlB,IAJA,IAAIC,SAAW,GACTC,MAAK14J,UAAA1D,QAAA,IAAA0D,UAAA1D,OAAA,EACPnJ,EAAI,EAEDA,EAAIulK,QAASvlK,EAChBslK,UAAYD,QAAQrlK,IAAUA,EAAlB,KAAA6M,UAAA1D,QAAkBnJ,EAAlB,OAAA+U,EAAAlI,UAAkB7M,EAAlB,IAEhBslK,UAAYD,QAAQrlK,GAEpB,IAAMwlK,KAAOznI,SAAS0nI,yBAChB/mI,QAAUX,SAASmJ,cAAc,OAEvCs+H,KAAKj8H,YAAY7K,SACjBA,QAAQO,UAAYqmI,SA3CxB,SAASI,cAAenvI,MACpB,GAAIA,KAAKovI,WAAaC,KAAKC,aAE3B,IAA6E,IAAzEjB,gCAAgCl3J,QAAQ6oB,KAAKuvI,QAAQ58J,eACrDqtB,KAAKyQ,WAAWja,YAAYwJ,UACzB,KAAAhQ,2BAAA,EAAAw/I,mBAAA,EAAAC,oBAAAjxJ,EAAA,IACH,QAAAkxJ,MAAAC,UAAwB3vI,KAAK4vI,WAA7BplK,OAAA2b,cAAA6J,2BAAA0/I,MAAAC,UAAAxsJ,QAAAkD,MAAA2J,2BAAA,EACIm/I,cADqCO,MAAAhlK,OADtC,MAAAmlK,KAAAL,mBAAA,EAAAC,eAAAI,IAAA,YAAA7/I,2BAAA,MAAA2/I,UAAArpJ,QAAAqpJ,UAAArpJ,SAAA,WAAAkpJ,kBAAA,MAAAC,kBAwCPN,CAAchnI,SAhBsB,IAiB5BO,UAAcP,QAAdO,UAER,OAAO,kBAAMA,2SC3EjB,iCAiBMonI,4BAAiB,SAAjBA,eAAkBC,SAAU/mB,WAAYgnB,KAC1CD,SAAS/1J,QAAQ,SAACi2J,QACCA,OAAO31E,cAAc41E,YAAYC,iBAAiBzlK,MAC1D+rC,KAAK,SAAAo7B,MAAI,OAAIm3E,WAAWn3E,KAAK/iD,UAAUy2E,cAC9CyqE,KAAOA,IAAIC,QAEOA,OAAOG,WAEft0D,2BAA2Bn7C,aAAYG,gBAbtC,SAAbyf,WAAc0vF,OAAQhhJ,IAAT,OAAgB,WACXghJ,OAAO31E,cAAc41E,YAAYC,iBAAiBzlK,MAC1D+rC,KAAK,SAAAo7B,MAAI,OAAI5iD,GAAG4iD,KAAK/iD,UAAUy2E,eAYnChlB,CAAW0vF,OAAQjnB,gBAsWlBqnB,YAAqB,eArV9B,SAAAC,yKAAeC,CAAAr/J,KAAAo/J,aACXp/J,KAAKs/J,yTAWW,QAAAz4F,KAAAzhE,UAAA1D,OAAZw9I,WAAY,IAAAr2I,MAAAg+D,MAAAC,KAAA,EAAAA,KAAAD,KAAAC,OAAZo4E,WAAYp4E,MAAA1hE,UAAA0hE,MAEhB,OADA9mE,KAAKs/J,uBAAyBpgB,WACvBl/I,6EAsCcoiB,QAOrB,OANAw8I,4BAAe5+J,KAAKs/J,uBAAwB,SAACjrE,UACzCA,SAASvE,wBAAwB1tE,SAClC,SAAC28I,QACAA,OAAO1qE,WAAWvE,wBAAwB1tE,UAGvCpiB,qFAuC6B,QAAAgnE,MAAA5hE,UAAA1D,OAATysF,QAAS,IAAAtlF,MAAAm+D,OAAAC,MAAA,EAAAA,MAAAD,MAAAC,QAATknB,QAASlnB,OAAA7hE,UAAA6hE,OAOpC,OANA23F,4BAAe5+J,KAAKs/J,uBAAwB,SAACjrE,UACzCA,SAAS3E,2BAA2BvB,UACrC,SAAC4wE,QACAA,OAAO1qE,WAAW3E,2BAA2BvB,WAG1CnuF,2FAiCqBiI,KAM5B,OALA22J,4BAAe5+J,KAAKs/J,uBAAwB,SAACjrE,UACzCA,SAASzE,+BAA+B3nF,MACzC,SAAC82J,QACAA,OAAO1qE,WAAWzE,+BAA+B3nF,OAE9CjI,6FAqBsBiI,KAO7B,OANA22J,4BAAe5+J,KAAKs/J,uBAAwB,SAACjrE,UACzCA,SAASkrE,gCAAgCt3J,MAC1C,SAAC82J,QACAA,OAAO1qE,WAAWkrE,gCAAgCt3J,OAG/CjI,2DA+BKiI,KAMZ,OALA22J,4BAAe5+J,KAAKs/J,uBAAwB,SAACjrE,UACzCA,SAAS5E,eAAexnF,MACzB,SAAC82J,QACAA,OAAO1qE,WAAW5E,eAAexnF,OAE9BjI,uEAyB0B,QAAA+uE,MAAA3pE,UAAA1D,OAAbmrF,YAAa,IAAAhkF,MAAAkmE,OAAAC,MAAA,EAAAA,MAAAD,MAAAC,QAAb6d,YAAa7d,OAAA5pE,UAAA4pE,OAMjC,OALA4vF,4BAAe5+J,KAAKs/J,uBAAwB,SAACjrE,UACzCA,SAAS1E,oBAAoB9C,cAC9B,SAACkyE,QACAA,OAAO1qE,WAAW1E,oBAAoB9C,eAEnC7sF,uEAgBmB,QAAAq0E,MAAAjvE,UAAA1D,OAANopJ,KAAM,IAAAjiJ,MAAAwrE,OAAAE,MAAA,EAAAA,MAAAF,MAAAE,QAANu2E,KAAMv2E,OAAAnvE,UAAAmvE,OAM1B,OALAqqF,4BAAe5+J,KAAKs/J,uBAAwB,SAACjrE,UACzCy2D,KAAKhiJ,QAAQ,SAAA5H,KAAG,OAAImzF,SAASmrE,oBAAoBt+J,IAAI,GAAIA,IAAI,OAC9D,SAAC69J,QACAjU,KAAKhiJ,QAAQ,SAAA5H,KAAG,OAAI69J,OAAO1qE,WAAWmrE,oBAAoBt+J,IAAI,GAAIA,IAAI,QAEnElB,yEAgBoB,QAAAy/J,MAAAr6J,UAAA1D,OAANopJ,KAAM,IAAAjiJ,MAAA42J,OAAAC,MAAA,EAAAA,MAAAD,MAAAC,QAAN5U,KAAM4U,OAAAt6J,UAAAs6J,OAM3B,OALAd,4BAAe5+J,KAAKs/J,uBAAwB,SAACjrE,UACzCy2D,KAAKhiJ,QAAQ,SAAA5H,KAAG,OAAImzF,SAASsrE,qBAAqBz+J,IAAI,GAAIA,IAAI,OAC/D,SAAC69J,QACAjU,KAAKhiJ,QAAQ,SAAA5H,KAAG,OAAI69J,OAAO1qE,WAAWsrE,qBAAqBz+J,IAAI,GAAIA,IAAI,QAEpElB,iFA6C4B,IAAb4/J,OAAax6J,UAAA1D,OAAA,QAAA4L,IAAAlI,UAAA,GAAAA,UAAA,MAC7By6J,sBAAwB7/J,KAAKs/J,uBAC7BQ,aAAevyF,eAAeA,kBAtXtB,SAAhB2iD,cAAiB2vC,uBACnB,IAAME,QAAUF,sBAAsB53J,IAAI,SAAA+3J,MAAI,OAAIA,KAAKtvC,UACvD,OACItgC,YACI6vE,IAAK,SAAA9/I,EAAC+/I,oBACF,IAAMC,kBAAoBD,mBAAmBnlB,aAC7C,OAAOolB,oBAA4D,IAAxCJ,QAAQ95J,QAAQk6J,sBAgXIjwC,CAAc2vC,wBAAyBD,QAM9F,OAJAC,sBAAsB/2J,QAAQ,SAACi2J,QAC3BA,OAAO1qE,WAAW+rE,uBAAuBN,gBAGtC9/J,yBC5XFqgK,cACT5/H,SAAU,MACV6G,MAAO,OACP1G,QAAS,EACT1B,UAAS,GAAA7jB,OH6Bc,OG7Bd,qBAGAilJ,kBACT7/H,SAAU,MACV6G,MAAO,OACP1G,QAAS,GACT2/H,SAAU,EACVrhI,UAAS,GAAA7jB,OHqBc,OGrBd,wBAOAmlJ,kBAEH,+LCWH,IAAM5iB,cAAY6iB,oCAAAC,iBJ7BL,QI+BZlnK,MAAO,KACPijB,MACIgwD,UAAW,cACXC,aAAc,WALD+zF,oCAAAC,cJ5BF,WIqCflnK,MAAO,KACPijB,MACIgwD,UAAW,cACXC,aAAc,WAZD+zF,oCAAAC,cJ1BJ,SI0CblnK,MAAO,KACPijB,MACIgwD,UAAW,cACXC,aAAc,SACdF,aAAc,SAAAA,aAAC5/D,QACX,MAAsB,iBAAXA,QAAkC,OAAXA,QAE1BtB,MAAOsB,QAGRA,WA1BE6zJ,oCAAAC,cJzBJ,SIwDblnK,MAAO,KACPijB,MACIgwD,UAAW,cACXC,aAAc,SACdF,aAAc,SAAAA,aAAC5/D,QACX,MAAsB,iBAAXA,QAAkC,OAAXA,QAE1BtB,MAAOsB,QAGRA,WAzCE6zJ,oCAAAC,cJxBL,QIsEZlnK,MAAO,KACPijB,MACIgwD,UAAW,cACXC,aAAc,SACdF,aAAc,SAAAA,aAAC5/D,QACX,MAAsB,iBAAXA,QAAkC,OAAXA,QAE1BtB,MAAOsB,QAGRA,WAxDE6zJ,oCAAAC,cJvBH,UIoFdlnK,SACAijB,MACIgwD,UAAW,cACXC,aAAc,WAhED+zF,oCAAAC,cJtBH,UI2FdlnK,SACAijB,MACIgwD,UAAW,cACXC,aAAc,WAxED+zF,oCAAAC,cJrBA,aIiGjBlnK,MAAO,KACPijB,MACIgwD,UAAW,cACXC,aAAc,YA/EDg0F,eAoFZC,eAAaF,oCAAAG,kBJ3FL,SI6FbpnK,OAAQ,KAAM,MACdijB,MACIgwD,WAAY,cAAe,eAC3BC,cAAe,WAAY,UAC3BH,cAAc,EACdC,cAAe,SAACunF,OACZ,GAAqB,iBAAVA,MAAoB,CAC3B,IAAMt6J,EAAI,SAAJA,IAAI,OAAMs6J,OAEhB,OADAt6J,EAAEonK,YAAa,EACRpnK,EAEX,OAAOs6J,OACR,SAAC+M,aACA,IAAMp8I,UAAY6oD,kBAAmB8yF,cACrC,OAAO9yF,eAAe7oD,UAAWo8I,kBAhBvBL,oCAAAG,eJ1FD,YI+GjBpnK,OAAQ,KAAM,MACdijB,MACIgwD,WAAY,cAAe,eAC3BC,cAAe,WAAY,UAC3BH,cAAc,EACdC,cAAe,SAACu0F,UACZ,GAAwB,iBAAbA,SAAuB,CAC9B,IAAMC,IAAM,SAANA,MAAM,OAAMD,UAElB,OADAC,IAAIH,YAAa,EACVG,IAEX,OAAOD,UACR,SAACE,gBACA,IAAMv8I,UAAY6oD,kBAAmB+yF,kBACrC,OAAO/yF,eAAe7oD,UAAWu8I,qBAnCvBL,uTCtHLM,2BACjB,SAAAA,gBAAapoK,KAAMivB,WAAYkH,oKAAMkyI,CAAAnhK,KAAAkhK,iBACjClhK,KAAKqwB,MAAQpB,KACbjvB,KAAKohK,WACDtnI,OAAQ/R,WAAW+R,OACnBD,MAAO9R,WAAW8R,MAClB6G,IAAK,KACLoD,KAAM,MAEV9jC,KAAKqhK,UAAY,KACjBrhK,KAAKshK,WAAa,KAClBthK,KAAKuhK,WAAa,KAClBvhK,KAAKqjG,QAAU,KACfrjG,KAAKwkG,UAAY,KACjBxkG,KAAKwhK,eAAiB1oK,KACtBkH,KAAKyhK,WAAa,wUAIlB,MAAM,IAAIxyJ,MAAM,8FAIhB,MAAM,IAAIA,MAAM,oEAGd7H,OAIF,OAHIA,QACApH,KAAKwhK,eAAiBp6J,OAEnBpH,KAAKwhK,qDAGRp6J,OAIJ,OAHIA,QACApH,KAAKqjG,QAAUj8F,OAEZpH,KAAKqjG,kDAGNj8F,OAIN,OAHIA,QACApH,KAAKwkG,UAAYp9F,OAEdpH,KAAKwkG,sDAGLp9F,OAIP,OAHIA,QACApH,KAAKuhK,WAAan6J,OAEfpH,KAAKuhK,uDAGLn6J,OAIP,OAHIA,QACApH,KAAKshK,WAAal6J,OAEfpH,KAAKshK,qDAGNl6J,OAIN,OAHIA,QACApH,KAAKqhK,UAAYj6J,OAEdpH,KAAKqhK,oDAGNj6J,OAIN,OAHIA,OACAnO,OAAO4T,OAAO7M,KAAKohK,UAAWh6J,OAE3BpH,KAAKohK,sDAGLh6J,OAIP,OAHIA,QACApH,KAAKyhK,WAAar6J,OAEfpH,KAAKyhK,+CAIZ,MAAM,IAAIxyJ,MAAM,uzCCtDTyyJ,8vBA3BcR,4UAErB,OACIrnI,MAAO75B,KAAKylG,WAAW5rE,MACvBC,OAAQ95B,KAAKylG,WAAW3rE,kEAIdiyC,MAOd,OANA/rE,KAAKylG,UAAW/kE,IAAKqrC,KAAKvoE,EAAGsgC,KAAMioC,KAAK5vC,IACxCn8B,KAAK2hK,eACD9nI,MAAOkyC,KAAKlyC,MACZC,OAAQiyC,KAAKjyC,QAEjB95B,KAAK4hK,SAAS71F,KAAK61F,UACZ5hK,yCAIP,IAAKA,KAAK6hK,UACN,MAAM,IAAI5yJ,MAAJ,yBAAAoM,OAAmCrb,KAAK8hK,gBAGlD,OADA9hK,KAAK6hK,UAAU9vI,MAAMuE,SAASgB,eAAet3B,KAAK4hK,WAC3C5hK,2BCzBFqjH,6BACT1oB,YAAa,OACbjC,aACI7H,WAAY,cAEhBkxE,WAAY,SACZC,WACIC,UAAW,GACXC,MAAO,EACPxJ,UACIpxH,MAAO,SAEXmxH,YACInxH,MAAO,WAGf66H,QACI1hI,SAAU,QACV+R,OACIuqD,MAAM,EACNn8D,QAAS,EACTy8D,OAAQ,EACR2xD,OAAQ,EACRl1H,OAAQ,GACRD,MAAO,IAEX0mE,OACIxD,MAAM,EACNn8D,QAAS,EACTy8D,OAAQ,EACR2xD,OAAQ,EACRl1H,OAAQ,GACRD,MAAO,IAEXnB,MACIqkE,MAAM,EACNn8D,QAAS,EACTy8D,OAAQ,EACR2xD,OAAQ,EACRl1H,OAAQ,GACRD,MAAO,KAGfwyH,aAAa,EACbjwH,SAAU,IACVgmI,UAAW,IACX/1B,OACI7xH,MACI6nJ,cAAe,GAEnB9oJ,SACIgnJ,SAAU,EACV+B,cAAe,SACfD,cAAe,IAGvBrT,QACIj3H,MAAO,QACPya,MAAO,UACP3Y,MAAO,EACP0oI,UAAU,EACV7xG,QAAS,GAEbo1F,aACI/nD,UAAU,GAEdykE,kBChEEC,cAAgB,IAChBC,eAAiB,IACjBC,mBAAkB,GAAAtnJ,OAAMgoG,4BAAe1oB,YAArB,+BAClBioE,YAAW,GAAAvnJ,OAAMgoG,4BAAe1oB,YAArB,4TCLIkoE,2BACjB,SAAAA,gBAAaj2J,sKAAQk2J,CAAA9iK,KAAA6iK,iBACjB7iK,KAAK+iK,MAAQn2J,OAAOo2J,MAAQ,KAC5BhjK,KAAKijK,KAAOr2J,OAAOs2J,KAAO,KAC1BljK,KAAKmjK,aAAsC,IAAvBv2J,OAAOw2J,YAAoB,EAAIx2J,OAAOw2J,aAAe,EACzEpjK,KAAKqjK,WAAaz2J,OAAO02J,YAAa,EACtCtjK,KAAKujK,OAAS32J,OAAO42J,UACrBxjK,KAAKyjK,iBAAmB,EACxBzjK,KAAK0jK,gBAAkB,6SAGrBV,OAIF,OAHIA,QACAhjK,KAAK+iK,MAAQC,OAEVhjK,KAAK+iK,kDAGLO,YAIP,OAHIA,aACAtjK,KAAKqjK,WAAaC,YAEftjK,KAAKqjK,2CAGXH,MAID,OAHIA,OACAljK,KAAKijK,KAAOC,MAETljK,KAAKijK,qDAGHG,cAIT,OAHIA,eACApjK,KAAKmjK,aAAeC,cAEjBpjK,KAAKmjK,iDAGTK,QAIH,OAHIA,SACAxjK,KAAKujK,OAASC,QAEXxjK,KAAKujK,+DAGCI,kBAIb,OAHIA,mBACA3jK,KAAKyjK,iBAAmBE,kBAErB3jK,KAAKyjK,uEAGAG,iBAIZ,OAHIA,kBACA5jK,KAAK0jK,gBAAkBE,iBAEpB5jK,KAAK0jK,uCCvCb,IAAMG,UAAa,WACtB,IAAIC,KAAO,EACX,OAAO,oBAAAzoJ,OAASunJ,YAAT,KAAAvnJ,SAA0ByoJ,OAFX,GAKnB,SAASC,YAAaj1I,MACzB,IAAIk1I,eAAiB,EACrB,GAA0B,MAAtBl1I,KAAKm1I,aACLD,eAmBD,SAASE,gCAAiCp1I,MAC7C,IAAIk1I,eAAiBx7J,OAAO27J,iBAO5B,OANAr1I,KAAKiH,WAAWjtB,QAAQ,SAAC0X,OACrB,IAAM9X,EAAIq7J,YAAYvjJ,OAClB9X,EAAIs7J,iBACJA,eAAiBt7J,KAGlBs7J,eA3BcE,CAAgCp1I,WAC9C,GAA0B,MAAtBA,KAAKm1I,aACZn1I,KAAKiH,WAAWjtB,QAAQ,SAAC0X,OACrBwjJ,gBAAkBD,YAAYvjJ,cAE/B,GAAIsO,KAAK3S,QAAQ6mJ,QAAUl0I,KAAK3S,QAAQ6mJ,OAAOxV,gBAAiB,CACnE,IAAM4W,gBAAkBt1I,KAAK22E,WAAW3rE,OAClCuqI,WAAav1I,KAAK3S,QAAQ6mJ,OAAOxV,kBAAkB1zH,QAEzDkqI,eAAiBI,gBAAkBC,YACd,IACjBL,eAAiB,QAGrBA,eAAiB,EAErB,OAAOA,eAcJ,SAASM,YAAax1I,MACzB,IAAIy1I,cAAgB,EACpB,GAA0B,MAAtBz1I,KAAKm1I,aACLM,cAkBD,SAASC,6BAA8B11I,MAC1C,IAAIy1I,cAAgB/7J,OAAO27J,iBAO3B,OANAr1I,KAAKiH,WAAWjtB,QAAQ,SAAC0X,OACrB,IAAM2kC,EAAIm/G,YAAY9jJ,OAClB2kC,EAAIo/G,gBACJA,cAAgBp/G,KAGjBo/G,cA1BaC,CAA6B11I,WAC1C,GAA0B,MAAtBA,KAAKm1I,aACZn1I,KAAKiH,WAAWjtB,QAAQ,SAAC0X,OACrB+jJ,eAAiBD,YAAY9jJ,cAE9B,GAAIsO,KAAK3S,QAAQ6mJ,QAAUl0I,KAAK3S,QAAQ6mJ,OAAOxV,gBAAiB,CACnE,IAAMiX,eAAiB31I,KAAK22E,WAAW5rE,MACjC6qI,UAAY51I,KAAK3S,QAAQ6mJ,OAAOxV,kBAAkB3zH,OACxD0qI,cAAgBE,eAAiBC,WACb,IAChBH,cAAgB,QAGpBA,cAAgB,EAEpB,OAAOA,cA0DJ,SAASI,2BAA4B7qI,OAAQD,MAAO4G,UACvD,IAAMu/H,KAAO,IAAI0B,gBAAe,GAAK5nI,cAAQD,cAG7C,OAFAmmI,KAAKlnK,KAAK,eACVknK,KAAKv/H,SAASA,UACPu/H,KAGJ,SAAS4E,eAAgBC,gBAAiBhD,WAAyD,IAGlGiD,6BAHoDC,YAA8C3/J,UAAA1D,OAAA,QAAA4L,IAAAlI,UAAA,IAAAA,UAAA,GAAzB4/J,gBAAyB5/J,UAAA1D,OAAA,QAAA4L,IAAAlI,UAAA,IAAAA,UAAA,GAClG89J,IAAM,GACN+B,oBAAsB,EAEtBC,WAAa,EACbC,UAAY,EAEhB,IAAKtD,UACD,OAASluJ,MAAOkxJ,gBAAiBvjH,OAAQujH,iBARyD,IAAAO,sBAW3CvD,UAAUrU,kBAArD6X,gBAXsFD,sBAW9FtrI,OAAgCwrI,eAX8DF,sBAWrEvrI,MAC3B4G,SAAWohI,UAAUphI,WACV,QAAbA,UAAmC,WAAbA,UACtByiI,IAAM,IACN+B,oBAAsBI,gBAAkBR,gBAAgBlB,kBACxDuB,WAAaL,gBAAgBlB,kBAAoB0B,gBACjDF,UAAYN,gBAAgBjB,mBAE5BV,IAAM,IACN+B,oBAAsBK,eAAiBT,gBAAgBjB,iBACvDuB,UAAYN,gBAAgBjB,iBAAmB0B,eAC/CJ,WAAaL,gBAAgBlB,mBAEjCmB,6BAA+B,EAAIG,oBAGnCJ,gBAAgB3B,IAAIA,KACpB,IAAMqC,iBACFvC,KAAMnB,UAAU/oK,OAChBoqK,IAAK,KACLE,YAAa6B,oBACb3B,WAAW0B,iBAA0BD,YACrCvB,UAEEgC,UAAY,IAAI3C,gBAAgB0C,iBACtCC,UAAU7B,gBAAgB0B,iBAC1BG,UAAU5B,eAAe0B,gBAEzB,IAOMG,WAAa,IAAI5C,iBANnBG,KAAM,KACNE,IAAK,KACLE,YAAa0B,6BACbxB,WAAW0B,kBAA2BD,YACtCvB,WAYJ,OATAiC,WAAW9B,gBAAgBuB,YAC3BO,WAAW7B,eAAeuB,WACtBJ,YACAF,gBAAgBrB,OAAOgC,YACH,QAAb/kI,UAAmC,SAAbA,SAC7BokI,gBAAgBrB,OAAOgC,UAAWC,aAElCZ,gBAAgBrB,OAAOiC,WAAYD,aAE9B7xJ,MAAO6xJ,UAAWlkH,OAAQmkH,0vBChDxBtH,kCA/IX,SAAAA,KAAapzJ,yJAAM26J,CAAA1lK,KAAAm+J,MACfn+J,KAAK4hG,OAAS72F,KACd/K,KAAK4iB,QAAU,KACf5iB,KAAKohB,aACLphB,KAAK2lK,WAAa,KAClB3lK,KAAKohK,WACD1gI,IAAK,KACLoD,KAAM,KACNhK,OAAQ,KACRD,MAAO,MAGX75B,KAAKgkF,IAAMhkF,KAAK4hG,OAAOohE,iBAAkB9B,iBAAmBlhK,KAAK4hG,OAAOohE,OAAOpB,WACnE5hK,KAAK4hG,OAAOohE,OAAOpB,WACnBiC,yRAGHrvJ,SAAS,IAAAoxJ,gBAAAnxJ,MAAAzU,MAClB4lK,gBAAA5lK,KAAKohB,WAAUlb,KAAfqB,MAAAq+J,gBAAAC,uBAAuBrxJ,UACvBA,QAAQ1L,QAAQ,SAACrO,GAAQA,EAAEgrB,OAAOhR,iDAIlC,OAAwB,OAAjBzU,KAAK4iB,gDAIZ,OAAQ5iB,KAAKohB,UAAU1f,uDAIvB,OAAO1B,KAAK4hG,OAAOshE,wDAInB,QAASljK,KAAK4hG,OAAO0hE,sDAGfvtI,WAIN,OAHIA,YACA/1B,KAAKohB,UAAY2U,WAEd/1B,KAAKohB,gDAGRqE,SAIJ,OAHIA,UACAzlB,KAAK4iB,QAAU6C,SAEZzlB,KAAK4iB,oDAGLkjJ,YAIP,OAHIA,aACA9lK,KAAK2lK,WAAaG,YAEf9lK,KAAK2lK,yCAGZ7uI,KAIA,OAHIA,MACA92B,KAAKgkF,IAAMltD,KAER92B,KAAKgkF,wCAGT7nE,QAIH,OAHIA,SACAnc,KAAK4hG,OAASzlF,QAEXnc,KAAK4hG,iDAGNmkE,OASN,OARIA,QACA/lK,KAAKohK,WACD1gI,IAAKqlI,MAAMrlI,IACXoD,KAAMiiI,MAAMjiI,KACZhK,OAAQisI,MAAMjsI,OACdD,MAAOksI,MAAMlsI,QAGd75B,KAAKohK,wDAMJ4E,YAAY,IAAArxJ,OAAA3U,KAChBA,KAAKgkF,MAAQgiF,WAAWhiF,KACxBhkF,KAAK4hG,OAAOshE,IAAI8C,WAAW9C,KAC3BljK,KAAK4hG,OAAOwhE,YAAY4C,WAAW5C,cAEnCpjK,KAAKohB,UAAUtY,QAAQ,SAACgmB,MACpB,GAAIA,KAAKk1D,MAAQgiF,WAAWhiF,IAGxB,OAFAl1D,KAAK3S,MAAM+mJ,IAAI8C,WAAW9C,UAC1Bp0I,KAAK3S,MAAMinJ,YAAY4C,WAAW5C,aAGtCzuJ,OAAKsxJ,WAAWn3I,KAAMk3I,4DAMtBl3I,KAAMk3I,YAAY,IAAA5uJ,OAAApX,KAC1B8uB,KAAKiH,WAAWjtB,QAAQ,SAACo9J,WACjBA,UAAUpvI,OAASkvI,WAAWhiF,KAC9BkiF,UAAU/pJ,QAAQ+mJ,IAAI8C,WAAW9C,KACjCgD,UAAU/pJ,QAAQinJ,YAAY4C,WAAW5C,cAEzChsJ,OAAK6uJ,WAAWC,UAAWF,qDAS/BG,QAAQ,IAAAzyI,OAAA1zB,KACZA,KAAKohB,UAAUtY,QAAQ,SAACgmB,MACpB,GAAIA,KAAKgI,OAASqvI,OAAQ,CACtB,IAAMlkK,MAAQyxB,OAAKtS,UAAUnb,QAAQ6oB,MACrC4E,OAAKkuE,OAAO4hE,QAAQl8J,OAAOrF,MAAO,GAEtCyxB,OAAK0yI,iBAAiBt3I,KAAMq3I,oEAKlBr3I,KAAMq3I,QAAQ,IAAAp/F,OAAA/mE,KAC5B8uB,KAAKiH,WAAWjtB,QAAQ,SAACo9J,WACrB,GAAIA,UAAUpvI,OAASqvI,OAAQ,CAC3B,IAAMlkK,MAAQ6sB,KAAKiH,WAAW9vB,QAAQigK,WACtCp3I,KAAK3S,QAAQqnJ,QAAQl8J,OAAOrF,MAAO,QAEnC8kE,OAAKq/F,iBAAiBF,UAAWC,0TCtI5BE,oCACjB,SAAAA,YAAaC,aAAc15J,mKAAQ25J,CAAAvmK,KAAAqmK,aAC/BrmK,KAAKwmK,cAAgBF,aACrBtmK,KAAKovF,QAAUxiF,OACf5M,KAAKymK,MAAQzmK,KAAK0mK,WAAW1mK,KAAKovF,QAAS,MAC3CpvF,KAAK2mK,wTAGG/5J,OAAQ6Y,QAChB,IAAMqJ,KAAO,IAAIqvI,uBAAKvxJ,QAClB6Y,QACAqJ,KAAKg3I,UAAUrgJ,OAAOw+I,cACtBx+I,OAAOmhJ,aAAa93I,QAEpB9uB,KAAKymK,MAAQ33I,KANO,IAAAhQ,2BAAA,EAAAw/I,mBAAA,EAAAC,oBAAAjxJ,EAAA,IAQxB,QAAAkxJ,MAAAC,UAAmB7xJ,OAAO42J,QAA1BlqK,OAAA2b,cAAA6J,2BAAA0/I,MAAAC,UAAAxsJ,QAAAkD,MAAA2J,2BAAA,EAAmC,KAAxB+nJ,KAAwBrI,MAAAhlK,MAC/BwG,KAAK0mK,WAAWG,KAAM/3I,OATF,MAAA6vI,KAAAL,mBAAA,EAAAC,eAAAI,IAAA,YAAA7/I,2BAAA,MAAA2/I,UAAArpJ,QAAAqpJ,UAAArpJ,SAAA,WAAAkpJ,kBAAA,MAAAC,gBAYxB,OAAOv+J,KAAKymK,wDAIZzmK,KAAKymK,MAAMhhE,UACP/kE,IAAK,EACLoD,KAAM,EACNjK,MAAO75B,KAAKwmK,cAAc3sI,MAC1BC,OAAQ95B,KAAKwmK,cAAc1sI,SF8OhC,SAASgtI,oBAAqBh4I,MACjC,IAAMi4I,YAAcj4I,KAAKiH,WACA9tB,IAAI,SAAAuY,OAAK,OAAIA,MAAMrE,QAAQinJ,gBAC3BrxJ,OAAO,SAACi1J,MAAO9lK,KAAR,OAAgB8lK,MAAQ9lK,KAAK,GAE7D4tB,KAAKiH,WAAWjtB,QAAQ,SAAC0X,MAAOjoB,EAAGw9B,UAC/B,IAAMkxI,YAAclxI,SAASx9B,EAAI,GAC3B2uK,MAAQ1mJ,MAAMrE,QAAQinJ,cAAgB2D,YAElB,MAAtBvmJ,MAAMslJ,YACNtlJ,MAAMilF,UACF/kE,IAAKnoC,EAAI0uK,YAAYxhE,WAAW/kE,IAAMumI,YAAYxhE,WAAW3rE,OAAS,EACtEgK,KAAMtjB,MAAMiF,SAASggF,WAAW3hE,KAChChK,OAAQtZ,MAAMiF,SAASggF,WAAW3rE,OAASotI,MAC3CrtI,MAAOrZ,MAAMiF,SAASggF,WAAW5rE,QAGrCrZ,MAAMilF,UACF/kE,IAAKlgB,MAAMiF,SAASggF,WAAW/kE,IAC/BoD,KAAMvrC,EAAI0uK,YAAYxhE,WAAW3hE,KAAOmjI,YAAYxhE,WAAW5rE,MAAQ,EACvEC,OAAQtZ,MAAMiF,SAASggF,WAAW3rE,OAClCD,MAAOrZ,MAAMiF,SAASggF,WAAW5rE,MAAQqtI,QAGjDJ,oBAAoBtmJ,SEpQpBsmJ,CAAoB9mK,KAAKymK,+DAGZ33I,MAAM,IAAAra,MAAAzU,KACnB8uB,KAAKiH,WAAWjtB,QAAQ,SAAC0X,OACrB6lJ,YAAYc,qBAAqB3mJ,OACjC/L,MAAK2yJ,gBAAgB5mJ,uDAsBzB,OF0JD,SAAS6mJ,mBAAoBv4I,MAQhC,IAPA,IAAIw0I,UAEAgE,WACAC,cAFAC,uBAAyB,EAIvBC,eAAiB34I,KAAKiH,WAAWr0B,OAE9BO,MAAQ,EAAGA,MAAQwlK,eAAgBxlK,QAAS,CACjD,IACIylK,cADA3pJ,QAAE,EAEAyC,MAAQsO,KAAKiH,WAAW9zB,OAEJ,MAAtBue,MAAMslJ,aACN/nJ,GAAKgmJ,YACLuD,WAAa,SACbC,cAAgB,UAEhBxpJ,GAAKumJ,YACLgD,WAAa,QACbC,cAAgB,UAIhB/mJ,MAAMukJ,cAENzB,UAAY9iJ,OAKhBgnJ,wBAA2BE,cAAgB3pJ,GAAGyC,OAC9CA,MAAMilF,WAAW6hE,aAAeI,cAEhClnJ,MAAMilF,WAAW8hE,eAAiB/mJ,MAAMiF,SAASggF,WAAW8hE,eAE5DF,mBAAmB7mJ,QAGnB8iJ,YACAA,UAAU79D,WAAW6hE,aAAeE,uBACpClE,UAAU79D,WAAW8hE,eAAiBjE,UAAU79I,SAASggF,WAAW8hE,eACpEF,mBAAmB/D,YEtMnB+D,CAAmBrnK,KAAKymK,OF0MzB,SAASkB,gBAAiB74I,MAC7BA,KAAKiH,WAAWjtB,QAAQ,SAAC0X,MAAOjoB,EAAGw9B,UAC/B,IAAM0vE,SAnLP,SAASmiE,kBAAmBC,GAAItvK,EAAG8X,IAAKq/F,UAC3C,GAAIn3G,EAAG,CAEH,IAFGuvK,sBAEiBz3J,IAAI9X,EAAI,GACmDktG,WAAlEsiE,MAHVD,sBAGKpnI,IAAiBsnI,OAHtBF,sBAGgBhkI,KAAqBmkI,QAHrCH,sBAG6BhuI,OAAwBouI,OAHrDJ,sBAG8CjuI,MACjD,OACIA,MAAOguI,GAAGhuI,MACVC,OAAQ+tI,GAAG/tI,OAEX4G,IAA8B,MAAzBgvE,SAASo2D,YAChBiC,MAAOE,QAAUF,MAEfjkI,KAA+B,MAAzB4rE,SAASo2D,YACjBkC,OAAQA,OAAQE,QAb+B,IAAAC,sBAiBlBz4D,SAASjqF,SAASggF,WAAxCsiE,KAjBwCI,sBAiB7CznI,IAAiBsnI,MAjB4BG,sBAiBlCrkI,KACnB,OACIjK,MAAOguI,GAAGhuI,MACVC,OAAQ+tI,GAAG/tI,OACX4G,IAAKqnI,KACLjkI,KAAMkkI,OA6JWJ,CAAkBpnJ,MAAMilF,WAAYltG,EAAGw9B,SAAUvV,OAClEA,MAAMilF,SAASA,UACfkiE,gBAAgBnnJ,SE7MhBmnJ,CAAgB3nK,KAAKymK,OACdzmK,mDAKP,OADAA,KAAKonK,gBAAgBpnK,KAAKymK,OACnBzmK,yCAIP,OAAOA,KAAKymK,0EA3Ba33I,MACzB,IAAM+4I,GAAK/4I,KAAK22E,WACVu9D,KAAOl0I,KAAK3S,QAAQ6mJ,OAC1B,GAAIA,MAAQA,KAAKoF,iBAAkB,CAC/B,IAAMr8F,MACF5vC,EAAG0rI,GAAG/jI,KACNtgC,EAAGqkK,GAAGnnI,IACN7G,MAAOguI,GAAGhuI,MACVC,OAAQ+tI,GAAG/tI,OACX8nI,SAAU9yI,KAAKgI,MAEnBksI,KAAKoF,iBAAiBr8F,mTCxD3B,IAAMs8F,MAAb,oBAAAA,4JAAAr4I,CAAAhwB,KAAAqoK,OAAA,2NAAAC,CAAAD,MAAA,OAAAvuK,IAAA,eAAAN,MAAA,SAAA+uK,aACyBxhF,SACjB,OAAOA,mBAAmB60C,WAFlC9hI,IAAA,QAAAN,MAAA,SAAAgvK,MAKkBzhF,SACV,OAAOA,QAAQjwD,MANvBh9B,IAAA,aAAAN,MAAA,SAAAivK,WASuB3xI,IACf,OAAOR,SAASgB,eAAeR,OAVvCh9B,IAAA,gBAAAN,MAAA,SAAAkvK,cAa0B39J,MAClB,OAAOA,KAAKiI,OAAO,SAAA21J,YAAU,OAAyB,MAArBA,WAAWljJ,SAAgB,MAdpE3rB,IAAA,YAAAN,MAAA,SAAAovK,UAoBsBC,OACyB,OAAnCvyI,SAASgB,eAAeuxI,QAAmBvyI,SAASgB,eAAeuxI,OAAOrjI,aArBtF6iI,MAAA,qSCCqBS,gCACjB,SAAAA,UAAah6I,+JAAMi6I,CAAA/oK,KAAA8oK,WACf9oK,KAAKoyB,MAAQtD,KACb9uB,KAAKyhK,WAAa3yI,KAAK3S,QAAQ6mJ,iBAAkB9B,gBAC7BpyI,KAAK3S,QAAQ6mJ,OAAO9jI,YAAcyjI,2SAItD,OAAO3iK,KAAKoyB,gDAIZ,OAAOpyB,KAAKoyB,MAAMjW,QAAQ6mJ,iBAAkB9B,8DAI5C,OAAOlhK,KAAKyhK,YAAckB,mUCjB3B,IAAMqG,uBAAb,WACI,SAAAA,WAAaj+J,gKAAMk+J,CAAAjpK,KAAAgpK,YACfhpK,KAAKgmE,MAAQj7D,KAFrB,6OAAAm+J,CAAAF,aAAAlvK,IAAA,wBAAAN,MAAA,SAAA2vK,wBAMQ,IAAMC,cAEN,OCRqB,SAAhBC,cAAiBv6I,KAAMs6I,YAChC,IAAME,UAAY,IAAIR,qBAAUh6I,MAChCs6I,WAAWljK,KAAKojK,WAChBx6I,KAAKiH,WAAWjtB,QAAQ,SAAC0X,OACrB6oJ,cAAc7oJ,MAAO4oJ,cDGrBC,CAAcrpK,KAAKgmE,MAAOojG,YACnBA,eARfJ,WAAA,mtDEAO,IAAMO,gBAAb,SAAAC,aAAA,SAAAD,kBAAA,8JAAAE,CAAAzpK,KAAAupK,iBAAAG,oCAAA1pK,KAAA2pK,yBAAAJ,iBAAAhiK,MAAAvH,KAAAoF,YAAA,8WAAAwkK,CAAAL,gBAAqCP,wPAArCa,CAAAN,kBAAAzvK,IAAA,iBAAAN,MAAA,SAAAswK,iBAEQ,OAAAC,cAAAJ,yBAAAJ,gBAAAlvK,WAAA,wBAAA2F,MAAAtH,KAAAsH,UAFRupK,gBAAA,+RCFO,IAAMS,SAAb,oBAAAA,kKAAAC,CAAAjqK,KAAAgqK,UAAA,oOAAAE,CAAAF,WAAAlwK,IAAA,eAAAN,MAAA,SAAA2wK,aAEkBr7I,KAAMowC,MAChBpwC,KAAKs7I,cAAgBlrG,SAH7B8qG,SAAA,i3ECIO,IAAMK,2BAAb,SAAAC,WACI,SAAAD,aAAat/J,MAAM,IAAA0J,MAAA,kKAAA81J,CAAAvqK,KAAAqqK,eACf51J,MAAA+1J,wCAAAxqK,KAAAyqK,6BAAAJ,cAAA3xK,KAAAsH,QACKgmE,MAAQj7D,KACb0J,MAAKi2J,aAAe,IAAInB,gBAAgB90J,MAAKuxD,OAAO8jG,iBAHrCr1J,MADvB,sXAAAk2J,CAAAN,aAAkCL,sPAAlCY,CAAAP,eAAAvwK,IAAA,aAAAN,MAAA,SAAAqxK,WAOgB94I,MAAOmN,WAAW,IAAAvqB,OAAA3U,KACpB8qK,QAAU/4I,MAChBg5I,kBAAAN,6BAAAJ,aAAAhwK,WAAA,eAAA2F,MAAAtH,KAAAsH,KAAmB8qK,QAAS9qK,KAAKgmE,OACjChmE,KAAKgrK,UAAYhrK,KAAKirK,yBAAyB/rI,WAC/Cl/B,KAAK0qK,aAAa5hK,QAAQ,SAACgmB,MACvB,GAAIA,KAAKo8I,UAAW,CAChB,IAAMlI,KAAOl0I,KAAKA,OAClBna,OAAKq2J,UAAUlpI,YAAYntB,OAAKw2J,qBAALC,iBAA+BpI,KAAKv9D,YAC3D3uE,GAAIksI,KAAKlsI,KACToI,UAAWpQ,KAAKoQ,mBAG5B4rI,QAAQhpI,YAAY9hC,KAAKgrK,cAnBjClxK,IAAA,uBAAAN,MAAA,SAAA2xK,qBAsB0Bv+J,QAAQ,IAClB8zB,IAA4C9zB,OAA5C8zB,IAAKoD,KAAuCl3B,OAAvCk3B,KAAMhK,OAAiCltB,OAAjCktB,OAAQD,MAAyBjtB,OAAzBitB,MAAOqF,UAAkBtyB,OAAlBsyB,UAAWpI,GAAOlqB,OAAPkqB,GAEvCu0I,IADc/0I,SAASgB,eAAeR,KACjBR,SAASmJ,cAAc,OAQlD,OAPA4rI,IAAItzI,MAAM0I,SAAW,WACrB4qI,IAAItzI,MAAM+L,KAAV,GAAAzoB,OAAoByoB,KAApB,MACAunI,IAAItzI,MAAM2I,IAAV,GAAArlB,OAAmBqlB,IAAnB,MACA2qI,IAAItzI,MAAM+B,OAAV,GAAAze,OAAsBye,OAAtB,MACAuxI,IAAItzI,MAAM8B,MAAV,GAAAxe,OAAqBwe,MAArB,MACAwxI,IAAIv0I,GAAKA,GACTu0I,IAAInsI,UAAYA,UACTmsI,OAjCfvxK,IAAA,2BAAAN,MAAA,SAAAyxK,yBAoC8B/rI,WACtB,IAAMnI,UAAYsxI,MAAMK,cAAc1oK,KAAK0qK,cACrC1H,KAAOjsI,UAAUjI,OACjBk8I,UAAYhrK,KAAKmrK,qBAALC,iBAA+BpI,KAAKv9D,YAClD3uE,GAAIksI,KAAKlsI,KACToI,UAAWnI,UAAUmI,eAGzB,OAFA8rI,UAAU9rI,UAAYA,UACtB8rI,UAAUjzI,MAAM0I,SAAW,WACpBuqI,aA5CflxK,IAAA,cAAAN,MAAA,SAAA8xK,cAgDQ,OAAOtrK,KAAK0qK,iBAhDpBL,aAAA,GCEakB,SAAW,SAAXA,SAAY7wI,QAAS8wI,QAAV,OACA9wI,QAAQ+wI,WAAWH,cAAclhJ,KAAK,SAAAwsC,OAAK,OAAIA,MAAM9nC,OAAOgI,OAAS00I,UAEhFE,kBAAa,SAAbA,WAAchxI,SACvBA,QAAQ+wI,SAAS,IAAIpB,2BAAa3vI,QAAQ3vB,SAC1C2vB,QAAQ+wI,WAAWZ,WAAWnwI,QAAQ3I,QAAS2I,QAAQwE,iTCRpD,IAAMysI,+BAAb,WACI,SAAAA,eAAa5gK,KAAM0gK,SAAU10I,yKAAW60I,CAAA5rK,KAAA2rK,gBACpC3rK,KAAKgmE,MAAQj7D,KAAKm0D,KAClBl/D,KAAK6rK,cAAgB9gK,KAAK+gK,aAC1B9rK,KAAK+rK,iBAAmBhhK,KAAKihK,gBAC7BhsK,KAAKisK,UAAYR,SACjBzrK,KAAK+hG,OAASsmE,MAAME,aAAaxxI,WAAaA,UAAYsxI,MAAMI,WAAW1xI,WANnF,yPAAAm1I,CAAAP,iBAAA7xK,IAAA,OAAAN,MAAA,SAAA8+D,OAaQ,ODFkB,SAAb6zG,WAAczxI,SACvB,OAAQA,QAAQ+wI,YAChB,IAAK,OACDC,kBAAWhxI,SACX,MACJ,QACIgxI,kBAAWhxI,UCPXyxI,CAAWnsK,MDyBY,SAAlBosK,gBAAmB1xI,QAAS2xI,eACrCA,cAAct2I,WAAWjtB,QAAQ,SAAC+4J,WAC9B,IAAMmB,KAAOnB,UAAU1lJ,QAAQ6mJ,OAC/B,GAAIA,gBAAgB9B,iBAAmB8B,KAAKsJ,YAAa,CACrD,IAAIC,iBACE31G,MAAQ20G,SAAS7wI,QAASmnI,UAAU/qI,MAAMhI,OAC1CA,KAAO8nC,MAAM6uC,WACb+mE,QAAUjB,SAAS7wI,QAASA,QAAQoxI,eAAe1yK,IAAI4pK,KAAKsJ,aAAa1K,YAC1D9yI,OACA22E,WACrB,OAAQu9D,KAAKyJ,aACb,IAAK,OACDF,eACI7rI,IAAK5R,KAAK4R,IACVoD,KAAM0oI,QAAQ1oI,KACdhK,OAAQhL,KAAKgL,OACbD,MAAOh2B,KAAKsnB,IAAI2D,KAAK+K,MAAQh2B,KAAKsnB,IAAIqhJ,QAAQ1oI,KAAOhV,KAAKgV,QAE9D,MAEJ,IAAK,QACDyoI,eACI7rI,IAAK5R,KAAK4R,IACVoD,KAAMhV,KAAKgV,KACXhK,OAAQhL,KAAKgL,OACbD,MAAOh2B,KAAKsnB,IAAI2D,KAAK+K,MAAQh2B,KAAKsnB,IAAI2D,KAAKgV,KAAOhV,KAAK+K,OAAS2yI,QAAQ1oI,KAAO0oI,QAAQ3yI,UAE3F,MAEJ,IAAK,MACD0yI,eACI7rI,IAAK8rI,QAAQ9rI,IACboD,KAAMhV,KAAKgV,KACXhK,OAAQj2B,KAAKsnB,IAAI2D,KAAKgL,OAASj2B,KAAKsnB,IAAIqhJ,QAAQ9rI,IAAM5R,KAAK4R,MAC3D7G,MAAO/K,KAAK+K,OAEhB,MAEJ,IAAK,SACD0yI,eACI7rI,IAAK5R,KAAK4R,IACVoD,KAAMhV,KAAKgV,KACXhK,OAAQj2B,KAAKsnB,IAAI2D,KAAK4R,IAAM8rI,QAAQ9rI,IAAM8rI,QAAQ1yI,QAClDD,MAAO/K,KAAK+K,OAEhB,MAEJ,IAAK,WACD0yI,eACI7rI,IAAK5R,KAAK4R,IACVoD,KAAM0oI,QAAQ1oI,KACdhK,OAAQhL,KAAKgL,OACbD,MAAO2yI,QAAQ3yI,OAEnB,MAEJ,IAAK,WACD0yI,eACI7rI,IAAK8rI,QAAQ9rI,IACboD,KAAMhV,KAAKgV,KACXhK,OAAQ0yI,QAAQ9rI,IAChB7G,MAAO/K,KAAK+K,OAOpB5gC,OAAO4T,OAAO0/J,eAAiBz1I,GAAI8/B,MAAM9/B,KAAMoI,UAAW8jI,KAAK9jI,cAC/DxE,QAAQ+wI,WAAWN,qBAAqBoB,eACxC7xI,QAAQoxI,eAAe1yK,IAAI4pK,KAAKlqK,QAAQsvK,kBACpCjsI,EAAGowI,cAAczoI,KACjBtgC,EAAG+oK,cAAc7rI,IACjB5G,OAAQyyI,cAAczyI,OACtBD,MAAO0yI,cAAc1yI,QAI7BuyI,gBAAgB1xI,QAASmnI,aCtGzBuK,CAAgBpsK,KAAMA,KAAKgmE,ODUN,SAAhB0mG,cAAiBL,eAC1BA,cAAct2I,WAAWjtB,QAAQ,SAACgmB,MAC9B,IAAMk0I,KAAOl0I,KAAK3S,QAAQ6mJ,OACtBA,gBAAgB9B,iBAChB8B,KAAK1qG,OAETo0G,cAAc59I,QCfd49I,CAAc1sK,KAAKgmE,OACZhmE,QAbflG,IAAA,OAAAN,MAAA,SAAAuR,KAgBUA,OAIF,OAHIA,QACA/K,KAAKgmE,MAAQj7D,OAEV/K,KAAKgmE,SApBpBlsE,IAAA,eAAAN,MAAA,SAAAsyK,aAuBkB1kK,OAIV,OAHIA,QACApH,KAAK6rK,cAAgBzkK,OAElBpH,KAAK6rK,iBA3BpB/xK,IAAA,YAAAN,MAAA,SAAA0lC,UA8Be93B,OAIP,OAHIA,QACApH,KAAK+rK,iBAAmB3kK,OAErBpH,KAAK+rK,oBAlCpBjyK,IAAA,WAAAN,MAAA,SAAAiyK,SAqCcrkK,OAIN,OAHIA,QACApH,KAAKisK,UAAY7kK,OAEdpH,KAAKisK,aAzCpBnyK,IAAA,QAAAN,MAAA,SAAAu4B,MA4CW3qB,OAIH,OAHIA,QACApH,KAAK+hG,OAAS36F,OAEXpH,KAAK+hG,WAhDpB4pE,eAAA,6SCAqBgB,gDACjB,SAAAA,kBAAab,aAActkI,SAAU69D,YAAaC,6KAAYsnE,CAAA5sK,KAAA2sK,mBAC1D3sK,KAAK6rK,cAAgBC,aACrB9rK,KAAK6sK,kBAAoBrlI,SACzBxnC,KAAK8sK,aAAeznE,YACpBrlG,KAAK+sK,YAAcznE,WACnBtlG,KAAKgtK,oBAAsB,4VZ0G5B,SAASC,0BAA2BvyI,SACvCA,QAAQwyI,mBAAmB,IAAI97J,KAC/BspB,QAAQoxI,eAAehjK,QAAQ,SAACtP,OAC5B,GAAIkhC,QAAQwyI,qBAAqB17J,IAAIhY,MAAMkiD,UACvChhB,QAAQwyI,qBAAqB9zK,IAAII,MAAMkiD,UAAUx1C,KAAK1M,WACnD,CACH,IAAMotE,QACNA,KAAK1gE,KAAK1M,OACVkhC,QAAQwyI,qBAAqBz7J,IAAIjY,MAAMkiD,SAAUkrB,SY7GrDqmG,CAA0BjtK,MAC1B,IAAMmtK,gBAAkBntK,KAAKgtK,oBAAoB5zK,IAAI,UAC/CyrK,gBAAkB,IAAIhC,oBACxBuK,aAAevI,gBACnBA,gBAAgBlB,gBAAgB3jK,KAAK8sK,cACrCjI,gBAAgBjB,eAAe5jK,KAAK+sK,aAEpC,IAAIM,aAAe,KAUnB,OARArtK,KAAK6sK,kBAAkB/jK,QAAQ,SAAChQ,MAC5Bu0K,aZwGL,SAASC,aAAcH,gBAAiBrL,eAC3C,IAAM9B,KAAOmN,gBAAgB/iJ,KAAK,SAAAy3I,WAAS,OAAIA,UAAU/oK,SAAWgpK,gBACpE,OAAQ9B,OAAkB,IAAVA,KAAeA,KAAO,KY1GfsN,CAAaH,gBAAiBr0K,MAEzCs0K,aADS,SAATt0K,KACe8rK,eAAewI,aAAcC,cAAc/rH,OZ4KnE,SAASisH,mBAAoB1I,gBAAiB2I,gBAMjD,IALA,IAAIJ,aAAevI,gBACbrqJ,KAAOgzJ,eAAe9rK,OACtB0Z,OAASZ,KAAOgzJ,eAAe,GAAG9rK,OAAS,EAC3Co4B,OAAS0zI,eAAez7J,OAAO,SAACC,IAAK9Q,KAAN,OAAe8Q,IAAM9Q,IAAI,GAAGssJ,kBAAkB1zH,QAAS,GAEnFvhC,EAAI,EAAGA,EAAI6iB,OAAQ7iB,IAAK,CAC7B,IAAMk1K,kBAAoBl1K,IAAM6iB,OAAS,EADZsyJ,gBAIH9I,eAAewI,aAFNzI,2BAA2B7qI,OAClB0zI,eAAe,GAAGj1K,GAAGi1J,kBAAkB3zH,MAAO,QACP4zI,mBAA3E95J,MAJqB+5J,gBAIrB/5J,MAAO2tC,OAJcosH,gBAIdpsH,OACf8rH,aAAez5J,MACf,IAAK,IAAIkH,EAAI,EAAGA,EAAIL,KAAMK,IAAK,CAC3B,IAAM8yJ,YAAc9yJ,IAAOL,KAAO,EAClC4yJ,aAAexI,eAAewI,aAAcI,eAAe3yJ,GAAGtiB,GAAIo1K,aAAa,GAAMrsH,OAEzF8rH,aAAe9rH,OAEnB,OAAO8rH,aY5LoBG,CAAmBH,aAAcC,aAAaxL,aAG9DgD,kEAGGz9J,OAIV,OAHIA,QACApH,KAAK6rK,cAAgBzkK,OAElBpH,KAAK6rK,4EAGIzkK,OAIhB,OAHIA,QACApH,KAAKgtK,oBAAsB5lK,OAExBpH,KAAKgtK,2UC3Cb,IAAMY,qBAAb,WACI,SAAAA,qKAAeC,CAAA7tK,KAAA4tK,WACX5tK,KAAK6rK,cAAgB,IAAIz6J,IACzBpR,KAAK8tK,kBAAoB,KAHjC,0OAAAC,CAAAH,YAAA9zK,IAAA,eAAAN,MAAA,SAAAw0K,aAMkBnM,WACV7hK,KAAK6rK,cAAcp6J,IAAIowJ,UAAU/oK,OAAQ+oK,cAPjD/nK,IAAA,mBAAAN,MAAA,SAAAy0K,iBAUsBzwJ,KAId,OAHIA,MACAxd,KAAK8tK,kBAAoBtwJ,KAEtBxd,KAAK8tK,qBAdpBh0K,IAAA,uBAAAN,MAAA,SAAA00K,qBAiB0BC,gBAAgB,IAAA15J,MAAAzU,KAClCmuK,eAAerlK,QAAQ,SAACk3J,MACpBvrJ,MAAKu5J,aAAahO,WAnB9BlmK,IAAA,sBAAAN,MAAA,SAAA40K,sBAyBQ,OCzBD,SAASC,eAAgB3zI,QAAS4zI,SACrC,IAAMC,OAASD,QAAQtL,OACnBsL,QAAQ9K,SAAW8K,QAAQ9K,QAAQ9hK,QACnC4sK,QAAQ9K,QAAQ16J,QAAQ,SAAA0lK,WAAS,OAAIH,eAAe3zI,QAAS8zI,aAEnD,MAAVD,QAAsC,iBAAZA,aACiBjhK,IAAvCotB,QAAQoxI,eAAe1yK,IAAIm1K,SAC3BD,QAAQtL,KAAKtoI,QAAQoxI,eAAe1yK,IAAIm1K,SDiB5CF,CAAeruK,KAAMA,KAAK8tK,mBACnB9tK,KAAKiuK,sBAzBpBn0K,IAAA,eAAAN,MAAA,SAAAsyK,eA6BQ,OAAO9rK,KAAK6rK,iBA7BpB/xK,IAAA,oBAAAN,MAAA,SAAAi1K,oBAgCQzuK,KAAK6rK,cAAcpmI,YAhC3BmoI,UAAA,ySEYqBc,wCACjB,SAAAA,cAAa3iG,mKAAM4iG,CAAA3uK,KAAA0uK,eACf1uK,KAAKqhK,UAAYt1F,KAAK61F,SACtB5hK,KAAK+rK,iBAAmBhgG,KAAK7sC,UAC7Bl/B,KAAK4uK,YACD/0I,MAAOkyC,KAAKlyC,OAAS4oI,cACrB3oI,OAAQiyC,KAAKjyC,QAAU4oI,gBAG3B1iK,KAAK6uK,cAAgB9iG,KAAK+iG,cAAgB,OAC1C9uK,KAAK8tK,kBAAoB,KACzB9tK,KAAK+uK,WAAa,IAAInB,qBACtB5tK,KAAKgvK,gBAAkB,KACvBhvK,KAAK6sK,qBACL7sK,KAAKk/D,KAAO,KACZl/D,KAAKivK,YAAc,qTAGZ7nK,OAIP,OAHIA,QACApH,KAAK+uK,WAAa3nK,OAEfpH,KAAK+uK,qEAGE3nK,OAId,OAHIA,QACApH,KAAK6sK,kBAAoBzlK,OAEtBpH,KAAK6sK,8DAGLzlK,OAIP,OAHIA,OACAnO,OAAO4T,OAAO7M,KAAK4uK,WAAYxnK,OAE5BpH,KAAK4uK,6DAGF/M,WACV7hK,KAAK+uK,WAAWf,aAAanM,6EAGXsM,gBAClBnuK,KAAK+uK,WAAWb,qBAAqBC,4DAG9Br/I,MACH9uB,KAAKkvK,KACLlvK,KAAKkvK,IAAIC,UAAUrgJ,oDAQfliB,QACR5M,KAAKk/D,KAAKkwG,WAAWxiK,QACrB5M,KAAK8tK,kBAAoB9tK,KAAKk/D,KAAK/iD,MACnCnc,KAAKqvK,oDAKDhH,MAAME,aAAavoK,KAAKqhK,WACxBrhK,KAAKqhK,UAAUiO,QAAUtvK,KAEzBs2B,SAASgB,eAAet3B,KAAKqhK,WAAWiO,QAAUtvK,KAGtDA,KAAK8tK,kBDvEN,SAASyB,aAAc70I,SAAS,IAAA80I,mBACT90I,QAAQoiE,YAA1BhjE,OAD2B01I,mBAC3B11I,OAAQD,MADmB21I,mBACnB31I,MAMhB,OALmB,IAAI8yI,qCAAkBjyI,QAAQ+0I,YAAY3D,eACnBpxI,QAAQg1I,mBACR51I,OACAD,OACV81I,sBCiEHJ,CAAavvK,MACtCA,KAAK+uK,WAAWd,iBAAiBjuK,KAAK8tK,mBACtC9tK,KAAK8tK,kBAAoB9tK,KAAK+uK,WAAWX,sBACzCpuK,KAAKsvK,QAAU,IAAIjJ,0BACfxsI,MAAO75B,KAAK4uK,WAAW/0I,MACvBC,OAAQ95B,KAAK4uK,WAAW90I,QAExB95B,KAAK8tK,mBACT9tK,KAAKk/D,KAAOl/D,KAAKsvK,QAAQM,YAAY1wG,OACrCl/D,KAAKsvK,QAAQO,YACb7vK,KAAKgvK,gBAAkB,IAAIrD,gCACvBzsG,KAAMl/D,KAAKk/D,KACX4sG,aAAc9rK,KAAK+uK,WAAWjD,eAC9BE,gBAAiBhsK,KAAK+rK,kBACvB/rK,KAAK6uK,cAAe7uK,KAAKqhK,WAExBrhK,KAAKivK,YACLjvK,KAAKk/D,KAAKpoC,GAAG92B,KAAKivK,aAElBjvK,KAAKivK,YAAcjvK,KAAKk/D,KAAKpoC,KAGjC92B,KAAKgvK,gBAAgB12G,6DAIrB,OAAOt4D,KAAKivK,0EAOIa,kBAAkB,IAAAr7J,MAAAzU,KAgBlC,OAfAA,KAAK6sK,kBAAkBnrK,OAAS,EAChC1B,KAAK+uK,WAAWN,oBAChBqB,iBAAiBhnK,QAAQ,SAACiuB,WAClBA,YACAtiB,MAAKo4J,kBAAkB3mK,KAAK6wB,UAAUj+B,QACtC2b,MAAKu5J,aAAaj3I,WACO,SAArBA,UAAUj+B,QACVi+B,UAAU8qI,UAAU/4J,QAAQ,SAACinK,cACzBA,aAAajnK,QAAQ,SAACknK,OAClBv7J,MAAKu5J,aAAagC,cAM/BhwK,uDAGG8hK,eACV,OAAO9hK,KAAK+uK,WAAWjD,eAAe1yK,IAAI0oK,yDAGpC/vI,OAIN,OAHIA,QACA/xB,KAAKqhK,UAAYtvI,OAEd/xB,KAAKqhK,glCClIb,IAyIM4O,2BAAsB,SAAtBA,oBAAuBv1I,SAChC,IAAM/xB,MAAQ+xB,QAAQm2F,OAEhBq/C,WAAaj3K,OAAO6M,KAAK40B,QAAQy1I,aACjC39I,SAAKnX,OAAA+0J,gCAAOF,YAAPE,gCAAsBn3K,OAAO6M,KAAK66J,iBACvC0P,kBAAiBh1J,OAAA+0J,gCAAIF,YAAJE,gCAAmBn3K,OAAO6M,KAAK66J,iBAAgB14J,IAAI,SAAAsqB,MAAI,SAAAlX,OACvEwvF,0BAAiBx7C,uBADsD,KAAAh0C,OAC5BkX,QAClD5pB,MAAM+mH,uBAAuB2gD,eAAgB,WAAe,QAAAxpG,KAAAzhE,UAAA1D,OAAXgf,OAAW,IAAA7X,MAAAg+D,MAAAC,KAAA,EAAAA,KAAAD,KAAAC,OAAXpmD,OAAWomD,MAAA1hE,UAAA0hE,OA5FxC,SAAlBwpG,gBAAmB99I,MAAO9R,QAC5B,IAAI3B,QAAU,SAAAA,UAAA,OAAM,GACZyT,MAAM9U,MAAM,SAAC6yJ,OAAQh4K,GACzB,OAAQg4K,QACR,I1BlEY,O0BmEZ,I1BlEe,U0BmEf,I1B9Dc,S0B+DVxxJ,QAAUiuD,qBAAQ,SAClB,MAEJ,I1BpEa,Q0BqEb,I1BpEY,O0BqEZ,I1BvEa,Q0BwEb,I1BzEY,O0B0EZ,I1B5Dc,S0B6DVjuD,QAAUiuD,qBAAQ,UAClB,MACJ,QACIjuD,QAAU,SAAAA,UAAA,OAAM,GAGpB,IAAMkuD,OAASvsD,OAAOnoB,GAAG,GACnB20E,OAASxsD,OAAOnoB,GAAG,GAEzB,OAAOwmB,QAAQkuD,OAAQC,UAqELojG,CAAgB99I,MAAO9R,SAjE3B,SAAhB8vJ,cAAiBh+I,MAAO9R,QAAR,OAAmB8R,MAAM9U,MAAM,SAAC6yJ,OAAQh4K,GAC1D,IAAM2I,IAAMwf,OAAOnoB,GAAG,GACtB,OAAQg4K,QACR,I1B7FgB,O0B8FhB,I1B7FmB,U0B8Ff,OAAe,OAARrvK,IAEX,I1B/FgB,O0BgGZ,OAAOA,MAAQA,IAAIqkG,UAEvB,QACI,OAAO,MAuDOirE,CAAch+I,MAAO9R,SAGhBga,QAAQ3I,WAtHN,SAAhB0+I,cAAiB/1I,SAC1B,IAAM6iH,iBAAmB7iH,QAAQj/B,eAAe8hJ,iBAChDA,iBAAiBvG,QAASzsD,OAAQ7vD,QAAStY,OAAQ,iBACnD,IAAM48I,YAActkI,QAAQ0uD,cAAc41E,YAEpCkR,WAAax1I,QAAQy1I,YAC3B,IAAK,IAAMr2K,OAAOo2K,WAAY,CAC1B,IAAM12K,MAAQkhC,QAAQ5gC,OACR,OAAVN,OACAwlK,YAAYllK,MAAQklK,YAAYllK,KAAKN,OATP,IAY9BgpK,cAAkB9nI,QAAQ9tB,SAA1B41J,cAERxD,YAAYtlE,YAAY5lB,eAAe0uF,gBACvCxD,YAAYnR,iBACZnzH,QAAQg2I,gBACRnzB,iBAAiBvG,QAASzsD,OAAQ7vD,QAAStY,OAAQ,gBACnDm7H,iBAAiBvG,QAASzsD,OAAQ7vD,QAAStY,OAAQ,YAqG3CquJ,CAAc/1I,SACdA,QAAQ0oE,UAvDc,SAArButE,mBAAsBj2I,SAC/B,IAAMk2I,aAAel2I,QAAQm2I,SAASC,WAAWC,iBAAiB1/B,SAASxgF,OAAO,OAC5EmgH,YACNJ,aAAa9nK,QAAQ,SAACmoK,SAClBA,QAAQnoK,QAAQ,SAAC63D,MACbqwG,SAAS9qK,KAAKy6D,KAAK/iD,UAAUzI,YAGrC,IAAMooI,iBAAmB7iH,QAAQw2I,YAC7BF,SAAStvK,OACT8kF,QAAQ4xB,IAAI44D,UAAU5mF,KAAK,WAEvBmzD,iBAAiBvG,QAASzsD,OAAQ7vD,QAAStY,OAAQ,UACnD,IAAM+uJ,oBAENP,aAAa9nK,QAAQ,SAACmoK,SAClBA,QAAQnoK,QAAQ,SAAC63D,MACbA,KAAK/iD,UAAUq8E,SAASnxF,QAAQ,SAACoxF,OAC7Bi3E,iBAAiBjrK,KAAKg0F,MAAMk3E,wBAKvC12I,QAAQ4vG,QAAS5vG,QAAQ6vG,SAASzhI,QAAQ,SAACuoK,UACxCA,QAAUA,aACFvoK,QAAQ,SAAC2tF,MACbA,KAAK3tF,QAAQ,SAAC66I,UACVwtB,iBAAiBjrK,KAAKy9I,SAASytB,uBAK3C5qF,QAAQ4xB,IAAI+4D,kBAAkB/mF,KAAK,WAC/BmzD,iBAAiBvG,QAASzsD,OAAQ7vD,QAAStY,OAAQ,qBAI3Dm7H,iBAAiBvG,QAASzsD,OAAQ7vD,QAAStY,OAAQ,iBAoBnDuuJ,CAAmBj2I,WACpB,IAGM42I,uBAAyB,SAAzBA,uBAA0Bj9E,UACnC,IACM2qE,YADS3qE,SAAS35D,QACG0uD,cAAc41E,YACzC,GAAIA,YAAa,CACb,IAAMvtB,YAAcutB,YAAYC,iBAAiBzlK,OAEjD+3K,EAD0Bl9E,SAASm9E,oBACjB//B,YAAap9C,UAC/B,IAAM+rE,uBAAyB/rE,SAASo9E,wBAClCrhF,WAAagwE,uBAAuBhwE,WACpCvD,YAAcuzE,uBAAuBvzE,YAC3C4kD,YAAYlsG,KAAK,SAACo7B,MACd,IAAM+wG,aAAe/wG,KAAK/iD,UAAUy2E,WACpC,IAAK,IAAMv6F,OAAOs2F,WACdshF,aAAaC,kCAAkC73K,IAAKs2F,WAAWt2F,MAEnE,IAAK,IAAMA,SAAO+yF,YACd6kF,aAAaE,mCAAmC93K,MAAK+yF,YAAY/yF,YAoDpE+3K,2BAAsB,SAAtBA,sBAIT,OAHsB,IAAInD,8BACtBxvI,UAAW,0BC9NJ4yI,aACX/mK,MACIvR,MAAO,KACPijB,MACIgwD,UAAW,SAAAA,UAAA5zE,GAAC,OAAIA,aAAawF,uBAGrCw7B,OACIrgC,MAAO,EACPijB,MACI+vD,aAAcZ,aACda,UAAWjkE,OAAOupK,YAG1Bj4I,QACItgC,MAAO,EACPijB,MACI+vD,aAAcZ,aACda,UAAWjkE,OAAOupK,YAG1BC,cACIx4K,MAAO,GACPijB,MACI+vD,aAAcZ,aACda,UAAWjkE,OAAOupK,YAG1BE,eACIz4K,MAAO,GACPijB,MACI+vD,aAAcZ,aACda,UAAWjkE,OAAOupK,YAG1BnlK,QACIpT,MAAO,KACPijB,MACIgwD,UAAW,cACXC,aAAc,SACdF,aAAc,SAAAA,aAAC5/D,OAAQ8oG,WAEnB,IAAMw8D,QAAU3kG,kBAA8B,OAAX3gE,UAAuB8oG,WACpDhxF,UAAY6oD,eAAe2kG,QAAS7uD,6BACtC4M,QAAU1iD,eAAe7oD,UAAW9X,QAGxC,OAFAqjH,QD1CkB,SAArBkiD,mBAAsBvlK,QAE/B,OADAA,OAAOo1J,UAAUC,UAAYp+J,KAAK2P,IAAI,GAAI3P,KAAK6P,IAAI,GAAI9G,OAAOo1J,UAAUC,YACjEr1J,OCwCeulK,CAAmBliD,aC1DhCmiD,YACT1xI,IAAK,EACLmwB,OAAQ,EACRf,OAAQ,GAGCuiH,kBACT3tH,EAAG,MACHkmF,EAAG,SACH0nC,EAAG,UAGMC,qBACT7tH,EAAG,OACHkmF,EAAG,SACH0nC,EAAG,SAiNME,uBAAS,SAgBTC,SAAW,UACXC,YAAc,aAGdC,yBAAW,WACXC,2BAAa,kXC7OLC,wCAYjB,SAAAA,cAAav+I,WAAY4pE,YAAatxF,OAAQnR,2KAAcq3K,CAAA9yK,KAAA6yK,eACxD7yK,KAAKovF,WACLpvF,KAAK4wH,gBACL5wH,KAAK+yK,aAGL/yK,KAAKu2G,cAAgB96G,aAErBuE,KAAKk+F,YAAYA,aACjBl+F,KAAKs0B,WAAWA,YAChBt0B,KAAK4M,OAAOA,0TAQZ,OACIsxF,YAAal+F,KAAKk+F,cAClBtxF,OAAQ5M,KAAK4M,SACbykI,SAAUrxI,KAAKqxI,kDASfzkI,SACJ,OAAIA,SACA5M,KAAKovF,QAAU7hB,eAAevtE,KAAKovF,YAAexiF,SAClD5M,KAAKovF,QAAQ4/D,OAAOn1H,MAAQh2B,KAAK6P,IAAI,EAAG1T,KAAKovF,QAAQ4/D,OAAOn1H,OACrD75B,MAEJA,KAAKovF,wDAQH8O,cACT,OAAIA,cACAl+F,KAAK4wH,aAAerjD,eAAevtE,KAAK4wH,iBAAoB1yB,cAErDl+F,MAEJA,KAAK4wH,uDAQNygB,WACN,OAAIA,WACArxI,KAAK+yK,UAAY3rG,oBDmJV,MAIG,SADA,UCtJiDiqE,WAEpDrxI,MAEJA,KAAK+yK,sDAQLx4H,QACP,OAAIA,QACAv6C,KAAKqqJ,WAAa9vG,OACXv6C,MAEJA,KAAKqqJ,6DAQF9vG,QACV,OAAIA,QACAv6C,KAAKsqJ,cAAgB/vG,OACdv6C,MAEJA,KAAKsqJ,gEAQF/vG,QACV,OAAIA,QACAv6C,KAAKgzK,cAAgBz4H,OACdv6C,MAEJA,KAAKgzK,4DAQJ1+I,aACR,OAAIA,aACAt0B,KAAKizK,YAAc3+I,YAEZt0B,MAEJA,KAAKizK,yNC1Ib,IAAMC,uBAAqBC,oCAAAC,yBFgCZ,UEhCYD,oCAAAE,sBF6Kb,QE3KO,SAFMF,oCAAAE,mBFkLb,QE/KO,WAHMF,oCAAAE,mBFuLb,QEnLO,GAJMF,oCAAAE,mBF4LV,YEvLO,GALGF,oCAAAE,mBFiMX,UE3LO,GANIA,qBAAAF,oCAAAC,sBF0PR,aElPG,UARKD,oCAAAC,sBF2PZ,SElPG,IATSD,oCAAAC,sBF2MP,eEjMK54J,QAAUjB,aAVR45J,oCAAAC,sBFsMN,gBE3LK54J,QAAUjB,aAXT45J,oCAAAC,sBFgNR,aEpMK54J,QAAUjB,aAZP45J,oCAAAC,sBF+CD,kBElCG,GAbFD,oCAAAC,sBFoDE,qBEtCG,GAdLD,oCAAAC,sBF0CJ,gBE3BG,GAfCD,oCAAAC,sBFqCP,aErBG,GAhBIA,uBAuBrBE,sBAAoBH,oCAAAI,yBFDP,QEEG,KADIJ,oCAAAI,sBFIN,SEFG,KAFGJ,oCAAAI,sBF4IP,YEzIG,KAHIJ,oCAAAI,sBFiJN,aE7IG,KAJGA,spBCvBjC,IAAMztI,WAAOurC,QAAQvrC,KA2Bf0tI,WAAa,SAAbA,WAAcj7K,EAAGk7K,MACnB,IAAI5/J,MAAQ,EACZ,IAAK,IAAMsoB,KAAKs3I,KACZ,GAAIl7K,EAAIk7K,KAAKt3I,GAAI,CACbtoB,MAAQsoB,EACR,MAGR,OAAOtoB,OAUE6/J,gBAAkB,SAAlBA,gBAAmBn5H,OAAQ3tC,QAAW,IACvC+mK,aAAiB/mK,OAAjB+mK,aACJC,aAAer5H,OAAO,GAAG74C,OAAS,EAAI64C,OAAO,GAAKA,OAAO,GAgB7D,OAfIo5H,cACAC,aAAer5H,OAAO,GAAG74C,OAAS,EAAnBmyK,wBAA2Bt5H,OAAO,OACjDq5H,aAAer5H,OAAO,GAAG74C,OAAS,KAAnB2Z,OAAAw4J,wBAA2BD,cAA3BC,wBAA4Ct5H,OAAO,KAAMq5H,cAExEA,aAAeA,aAAa3rK,IAAI,SAAC8S,IAAKqvH,UAClC,IAAI0pC,WAOJ,OANIv5H,OAAO,GAAG74C,OAAS,IACnBoyK,QAAUD,wBAAIt5H,OAAO,GAAG6vF,YAExB7vF,OAAO,GAAG74C,OAAS,IACnBoyK,WAAOz4J,OAAAw4J,wBAAOC,SAAPD,wBAAmBt5H,OAAO,GAAG6vF,aAEjC0pC,UAGRF,cAyKEG,0BAAsB,SAAtBA,sBAA0D,IAAnC/pK,KAAmC5E,UAAA1D,OAAA,QAAA4L,IAAAlI,UAAA,GAAAA,UAAA,MAAxBwH,OAAwBxH,UAAA1D,OAAA,EAAA0D,UAAA,QAAAkI,EAAhB0mK,YAAgB5uK,UAAA1D,OAAA,EAAA0D,UAAA,QAAAkI,EAAA2mK,qBACpBrnK,OAAvC+mK,+BAD2D,IAAAM,2CACrCC,aAAiBtnK,OAAjBsnK,aADqCC,gBAjOhD,SAAjBC,eAAkBT,cACpB,OAAIA,cAEIU,aAAc7B,uBACd8B,cH4KS,UGxKbD,aHwKa,QGvKbC,cAAe9B,wBA0NqB4B,CAAeT,cAA/CU,aAF2DF,gBAE3DE,aAAcC,cAF6CH,gBAE7CG,cACd/2J,OAAWvT,KAAXuT,OACFg3J,YA/DoB,SAAjBC,eAAkBb,aAAcO,cACzC,OAAKP,cAOD75I,OAAQ,EACRD,MAAOq6I,aAAar6I,QANhBC,OAAQo6I,aAAap6I,OACrBD,MAAO,GA2DK26I,CAAeb,aAAcO,cACjD,GAAI32J,OAAO,GAAGzjB,IAAK,KAAA26K,cACT7gE,cAAY8gE,qBAAAD,iBAAMJ,aAAe,GAArBK,qBAAAD,cAAyBH,cAAgB,GAAzCG,eAYlB,OAVAl3J,OAAOzU,QAAQ,SAAC6rK,WAEZ,IAAM5/F,MAAQg/F,oBAAoBY,UAAW/nK,OAAQonK,aAErDpgE,aAAaygE,cAAgBxwK,KAAK6P,IAAIkgG,aAAaygE,cAAet/F,MAAMs/F,cACpEE,YAAYF,eAEhBzgE,aAAa0gE,iBAAmBv/F,MAAMu/F,iBAE1CtqK,KAAK+qE,MAAQ6+B,aACNA,aAEX,OAzD2B,SAAlB45C,gBAAmBxjJ,KAAMie,SAAUssJ,aAAiC,IAAA5hJ,KAApBiiJ,WAAoBxvK,UAAA1D,OAAA,QAAA4L,IAAAlI,UAAA,GAAAA,UAAA,MACrEivK,aAAgCpsJ,SAAhCosJ,aAAcC,cAAkBrsJ,SAAlBqsJ,cAClBO,kBAAoB,EACpBC,mBAAqB,EAmBzB,OAlBA9qK,KAAKuT,OAAOzU,QAAQ,SAACisK,YAAe,IAAAC,YAC5BC,SAAW,EACXC,SAAW,EACfH,WAAWjsK,QAAQ,SAACq/I,YAAanV,UAC7BmV,YAAYyB,oBACZ,IAAM70E,MAAQozE,YAAYqF,kBAE1B0nB,SAAWrxK,KAAK6P,IAAIwhK,UAAWngG,MAAMu/F,eAAgBC,YAAYD,gBACjEM,WAAW5hC,UAAYnvI,KAAK6P,IAAIkhK,WAAW5hC,WAAa,EAAGj+D,MAAMs/F,eACjEY,WAAaL,WAAW5hC,YAE5B8hC,oBAAsBI,SACtBL,kBAAoBhxK,KAAK6P,IAAImhK,kBAAmBI,UAChDjrK,KAAK+qE,OAAL2/F,qBAAAM,eACKV,cAAgBzwK,KAAKqnB,KAAK4pJ,qBAD/BJ,qBAAAM,YAEKX,aAAexwK,KAAKqnB,KAAK2pJ,oBAF9BG,eAKJN,qBAAA/hJ,QACK2hJ,cAAgBQ,oBADrBJ,qBAAA/hJ,KAEK0hJ,aAAeQ,mBAFpBliJ,KAmCO66H,CAAgBxjJ,MAAQqqK,0BAAcC,6BAAiBC,YAAaP,cAoDlEmB,sBAAwB,SAAxBA,sBAAyBnrK,KAAM2pK,cACxC,GAAI3pK,KAAKuT,OAAO,GAAGzjB,IAAK,CACpB,IAAMuW,OAaN,OAZArG,KAAKuT,OAAOzU,QAAQ,SAAC0X,OACZmzJ,aAGiBwB,sBAAsB30J,MAAOmzJ,cACrC7qK,QAAQ,SAACrO,EAAGlC,GAAM,IAAA68K,OACxB/kK,IAAI9X,GAAK8X,IAAI9X,QACb68K,OAAA/kK,IAAI9X,IAAG2N,KAAPqB,MAAA6tK,OAAAvB,wBAAep5K,MALnB4V,IAAInK,KAAJqB,MAAA8I,IAAGwjK,wBAASsB,sBAAsB30J,MAAOmzJ,kBASjD3pK,KAAKuwC,OAASlqC,IACPA,IAOX,OAFIrG,KAAKuwC,OAHJo5H,aAGa3pK,KAAKuT,OAAO,GAAGtV,IAAI,SAACmmE,IAAK4kE,UAAN,OAAmBhpI,KAAKuT,OAAOtV,IAAI,SAAA8S,KAAG,OAAIA,IAAIi4H,cAFjEhpI,KAAKuT,OAIhBvT,KAAKuwC,QAwIH86H,kBAAoB,SAApBA,kBAAqBhlK,IAAKilK,IAAK7oK,KAAX,OAAmB4D,IAAIyK,MAAMw6J,KAAM7oK,MCldvDgtF,2BACT7sF,QACI4/D,aAAc,SAAAA,aAAC9xC,QAASlhC,OAAV,OAAoB+zE,eAAe7yC,QAAQ00D,YAAe51F,SAE5Ew6K,eACA9iE,kBACA0C,iBCHSh0F,4CACT21J,gBACA56E,YAAa,OACb+0C,qBAAqB,EACrBwkC,cACIp6I,OAAQ,IACRD,MAAO,IACPm1H,OAAQ,GAEZ2kB,cAAc,EACdtnC,ML0OmB,UKzOnBmpC,0TCDiBC,sCAQjB,SAAAA,aAAal7H,QAAqB,IAAb3tC,OAAaxH,UAAA1D,OAAA,QAAA4L,IAAAlI,UAAA,GAAAA,UAAA,kKAAAswK,CAAA11K,KAAAy1K,cAE9Bz1K,KAAK21K,cAAgB,EACrB31K,KAAK41K,eAAiBr7H,OAAO,OAC7Bv6C,KAAK61K,iBAAmBt7H,OAAO,OAC/Bv6C,KAAK81K,gBACL91K,KAAK+1K,mBAGLlpG,sBAAsB7sE,KAAMy5F,2BAC5B,IAAMkd,OAAS19G,OAAO4T,UAAW7M,KAAKglB,YAAYpF,iBAClD5f,KAAK4M,OAAO2gE,eAAeopC,OAAQ/pG,SAEnC5M,KAAKg2K,cAAgBtC,iBAAiBn5H,OAAO,OAAUA,OAAO,QAAWv6C,KAAK4M,4UAU9E,MAAM,IAAIqC,MAAMo+D,UAAUC,sFAI1B,MAAM,IAAIr+D,MAAMo+D,UAAUC,4EAU1B,MAAM,IAAIr+D,MAAMo+D,UAAUC,0FAI1B,MAAM,IAAIr+D,MAAMo+D,UAAUC,wEAY1B,MAAM,IAAIr+D,MAAMo+D,UAAUC,gFAa1B,MAAM,IAAIr+D,MAAMo+D,UAAUC,wFAU1B,MAAM,IAAIr+D,MAAMo+D,UAAUC,8EAW1B,MAAM,IAAIr+D,MAAMo+D,UAAUC,sEAW1B,OAAIloE,UAAO1D,OACA1B,KAEJA,KAAK41K,yEAIZ,OAAIxwK,UAAO1D,OACA1B,KAEJA,KAAK61K,qDAIZ,OAAIzwK,UAAO1D,OACA1B,KAEJA,KAAKi2K,sDAOF,IAAAC,aHnEQ,SAAbxP,WAAchsI,SACvB,IAAIy7I,cACAC,aAAe,EACf/pC,MHwKe,UGvKbvjB,OAAShjF,aACThgC,QACAuwK,aAAe37I,QAAQs7I,cACvBM,cAAgB57I,QAAQ47I,gBACxBC,gBAAkB77I,QAAQ67I,kBARGriE,gBASCx5E,QAAQ9tB,SAApC+mK,aAT2Bz/D,gBAS3By/D,aAAc6C,UATatiE,gBASbsiE,UAEtB,GAAK7C,aAsCE,CAQH,GANItnC,MADyB,IAAzBiqC,cAAc50K,OHyHH,UGvHuB,IAA3B60K,gBAAgB70K,OHwHV,YGrHL40K,cAAc50K,QAAU60K,gBAAgB70K,OHoHrC,UACE,YGnHb40K,cAAc50K,OAAS,EAAG,CAC1B,IAAK,IAAInJ,IAAI,EAAGA,IAAI+9K,cAAc50K,OAAS,EAAGnJ,MAC1CuN,KAAKI,KAAK3N,KAGduN,KAAKI,KAAKowK,cAAc50K,OAAS,GH8GpB,cG5GT2qI,QACA+pC,aAAeE,cAAc50K,OAAS,GAG9C,GAAI60K,gBAAgB70K,OAAS,EAAG,CAE5B,IADA,IAAM+0K,oBAAsBH,cAAc50K,OACjCnJ,IAAIg+K,gBAAgB70K,OAAS,EAAGnJ,IAAI,EAAGA,MAC5CuN,KAAKI,KAAK3N,IAAIk+K,qBAGlB3wK,KAAKI,KAAKuwK,qBHiGC,YG/FPpqC,QACA+pC,aAAeK,qBAUvB,IAAIC,UAPJ5wK,KAAKgD,QAAQ,SAAChP,KACV,IAAI6xI,SAAW,EACf,OAAO7iB,OAAOhvH,IAAI,SAACjB,GAEf,OADA8yI,UACA,GAAAtwH,OAAUxiB,EAAEiB,KAAK8jB,UAAjB,KAAAvC,OAA8Bm4J,WAAW7nC,QAAS6qC,gBAI1DE,UAAYL,aAAa,GAAGpuK,IAAI,SAACmmE,IAAK4kE,UAAN,OAAmBqjC,aAAapuK,IAAI,SAAA8S,KAAG,OAAIA,IAAIi4H,cAC/EmjC,WAAartD,OAAOt0G,QAAQkiK,eA9Eb,CAQf,GANIrqC,MADyB,IAAzBiqC,cAAc50K,OH+JH,UG7JuB,IAA3B60K,gBAAgB70K,OH8JV,YG3JL40K,cAAc50K,QAAU60K,gBAAgB70K,OH0JrC,UACE,YGzJb40K,cAAc50K,OAAS,EAAG,CAC1B,IAAK,IAAInJ,EAAI,EAAGA,EAAI+9K,cAAc,GAAG50K,OAAS,EAAGnJ,IAC7CuN,KAAKI,KAAK3N,GAEduN,KAAKI,KAAKowK,cAAc,GAAG50K,OAAS,GHqJvB,cGpJT2qI,OAAkD,IAA3BkqC,gBAAgB70K,SACvC00K,aAAeE,cAAc,GAAG50K,OAAS,GAGjD,GAAI60K,gBAAgB70K,OAAS,EAAG,CAE5B,IADA,IAAMi1K,UAAYL,cAAc50K,OAAS,EAAI40K,cAAc,GAAG50K,OAAS,EAC9DnJ,GAAIg+K,gBAAgB,GAAG70K,OAAS,EAAGnJ,GAAI,EAAGA,KAC/CuN,KAAKI,KAAK3N,GAAIo+K,WAElB7wK,KAAKI,KAAKywK,WH0IC,YGxIPtqC,QACA+pC,aAAeO,gBAGnBP,aAAeE,cAAc50K,OAAS,EAAI40K,cAAc,GAAG50K,OAAS,EAAI,EAE5EoE,KAAKgD,QAAQ,SAAChP,KACV,IAAI6xI,SAAW,EACf,OAAO7iB,OAAOhvH,IAAI,SAACjB,GAEf,OADA8yI,UACA,GAAAtwH,OAAUxiB,EAAEiB,KAAK8jB,UAAjB,KAAAvC,OAA8Bm4J,WAAW7nC,QAAS6qC,gBAG1DL,WAAartD,OAAOt0G,QAAQ6hK,cA2ChC,OAASn3G,KAAMi3G,WAAYC,2BGvBQ1P,CAAW1mK,MAAlCk/D,KADEg3G,aACFh3G,KAAMk3G,aADJF,aACIE,aAEd,OADAp2K,KAAK21K,cAAgBS,aACdl3G,+DAUP,OAAOl/D,KAAK4zG,2EAUG/5E,MAAOC,QACtB95B,KAAKkxG,gBAAiBr3E,YAAOC,gBAC7B,IAAMolC,KAAOl/D,KAAKk/D,OACZ03G,eAAiB52K,KAAK62K,oBAAoBrE,uBAAQtzG,MAClD43G,cAAgB92K,KAAK62K,oBNiBd,QMjByC33G,MAChDl5B,MAAQhmC,KAAK+2K,eAAeD,cAAeF,gBAIjD,OAFA52K,KAAKg3K,eAAiBh3K,KAAKi3K,qBAAqBjxI,OAChDhmC,KAAKk3K,iBAAmBl3K,KAAKm3K,mBAAmBt9I,MAAOC,QAChD95B,qEAYU3E,KAAM86K,YAAsC,IAAA1hK,MAAAzU,KAA1BgmC,MAA0B5gC,UAAA1D,OAAA,QAAA4L,IAAAlI,UAAA,GAAAA,UAAA,GAAlB,EAAG6iB,SAAe7iB,UAAA1D,OAAA,QAAA4L,IAAAlI,UAAA,GAAAA,UAAA,MAE7D,GADA6iB,SAAS+d,OAASniC,KAAK6P,IAAIuU,SAAS+d,QAAU,EAAGmwI,WAAWphG,MAAM15E,OAC9D86K,WAAW54J,OAAQ,CACnB,IAAM65J,WAAapxI,MAAQ,EAC3BmwI,WAAW54J,OAAOzU,QAAQ,SAAC0X,OACnBA,MAAMu0D,QACN9sD,SAAWxT,MAAKoiK,oBAAoBx7K,KAAMmlB,MAAO42J,WAAYnvJ,aAIzE,OAAOA,uEAUP,OAAOjoB,KAAKk3K,mFAUZ,OAAOl3K,KAAKg3K,iFAUMhxI,OAClB,IAAM31B,OAEN,OHsP6B,SAAxBgnK,wBAAiE,IAAxChnK,IAAwCjL,UAAA1D,OAAA,QAAA4L,IAAAlI,UAAA,GAAAA,UAAA,MAA9B4gC,MAA8B5gC,UAAA1D,OAAA,EAAA0D,UAAA,QAAAkI,EAAvBgqK,WAAuBlyK,UAAA1D,OAAA,EAAA0D,UAAA,QAAAkI,EAAXujK,OAAWzrK,UAAA1D,OAAA,EAAA0D,UAAA,QAAAkI,EACpEiqK,aAAe1G,OAAO2G,cAGxB7D,aAFW9C,OAAOjkK,SAElB+mK,aAGAz0G,KAEAo4G,WAFAp4G,KACAm3G,aACAiB,WADAjB,aAGJ,GAAc,IAAVrwI,MAAa,CACb,IAAMyxI,aAnJa,SAAdC,YAAen9H,OAAQo5H,aAAc4D,cAC9C,IAAMjB,iBACAC,mBAsBN,OArBI5C,aACAp5H,OAAOzxC,QAAQ,SAACiS,IAAKqvH,UACbA,UAAYmtC,aACZhB,gBAAgBrwK,KAAK6U,KAErBu7J,cAAcpwK,KAAK6U,OAI3Bw/B,OAAOzxC,QAAQ,SAACiS,IAAKqvH,UACjBrvH,IAAIjS,QAAQ,SAACsS,OAAQivH,aACbA,aAAektC,cACfhB,gBAAgBnsC,UAAYmsC,gBAAgBnsC,cAC5CmsC,gBAAgBnsC,UAAUlkI,KAAKkV,UAE/Bk7J,cAAclsC,UAAYksC,cAAclsC,cACxCksC,cAAclsC,UAAUlkI,KAAKkV,cAKrCk7J,cAAeC,iBA2HEmB,CAAYx4G,KAAK3kB,OAAQo5H,aAAc4D,cAO5D,OANAlnK,IAAInK,MACAq0C,OAAQ2kB,KAAK3kB,OACb+7H,cAAemB,aAAa,GAC5BlB,gBAAiBkB,aAAa,GAC9B1iG,MAAO7V,KAAK6V,QAET1kE,IAEX,IAAMsnK,UAAY3xI,MAAQ,EAO1B,OANAk5B,KAAK3hD,OAAOzU,QAAQ,SAACrO,GACjB48K,sBAAsBhnK,IAAKsnK,WACvBz4G,KAAMzkE,EACN47K,2BACDxF,UAEAxgK,IGnRHgnK,CAAsBhnK,IAAK21B,MAAOhmC,KAAK43K,mBAAoB53K,MACpDqQ,4DA1FP,OAAOuP,sxCC7HMi4J,mDAQjB,SAAAA,gBAAat9H,QAAqB,IAAA9lC,MAAb7H,OAAaxH,UAAA1D,OAAA,QAAA4L,IAAAlI,UAAA,GAAAA,UAAA,qKAAA0yK,CAAA93K,KAAA63K,kBAC9BpjK,MAAAsjK,qCAAA/3K,KAAAg4K,0BAAAH,iBAAAn/K,KAAAsH,KAAMu6C,OAAQ3tC,UAET4qK,cAAiBj9H,OAAO,GAAG74C,OAAS,EAAI64C,OAAO,GAAG,GAAG74C,OAAS,EACnE+S,MAAKuhK,cAAgBtC,iBAAiBn5H,OAAO,OAAUA,OAAO,QAAW9lC,MAAK7H,UAG9E6H,MAAKwhK,OACDn8K,IAAK24K,SACLl1J,OAAQ9I,MAAKiyJ,cAEjBjyJ,MAAKggK,cAAgBhgK,MAAKs/J,sBAXIt/J,uYAROghK,iVA6BrC,IAAMU,WAAan2K,KAAKk/D,OAExB,OADAi2G,sBAAsBgB,YAAY,GAC3BpC,0BAAoBoC,WAAYn2K,KAAK4M,SAAU5M,KAAKg0K,mFAGxC/rJ,UAAU,IAAAtT,OAAA3U,KAEzBi4K,WAGAhwJ,SAHAgwJ,WACAC,UAEAjwJ,SAFAiwJ,UACAp+I,OACA7R,SADA6R,OAEJ,OAAO95B,KAAKg3K,eAAe/uK,IAAI,SAACkwK,WAAY5/K,GACxC,IAAM6/K,gBAAmBD,sBAAYD,oBAAWD,sBAAYI,YAAa9/K,GAD3B+/K,sBAED3jK,OAAK4jK,kBAAkBH,gBAA5DI,OAFsCF,sBAEtCE,OAAQC,WAF8BH,sBAE9BG,WAAYC,aAFkBJ,sBAElBI,aACtB9B,gBAAkB98I,OAAQA,QAC1B0tG,eAAiBgxC,OAEvB,OACIC,YACIE,QAASF,WAAW,GACpBG,UAAWH,WAAW,IAE1BC,cACIC,QAASD,aAAa,GACtBE,UAAWF,aAAa,IAE5B5+I,QACI6+I,QAAS/B,eAAe,GACxBgC,UAAWhC,eAAe,IAE9B/8I,OACI8+I,QAASnxC,eAAe,GACxBoxC,UAAWpxC,eAAe,mEAYtB,IAAAhgC,aAIZxnG,KAAK4M,SAFL+mK,aAFYnsE,aAEZmsE,aACA6B,iBAHYhuE,aAGZguE,iBAEEj7H,OAASv6C,KAAKg2K,cACd92G,KAAOqO,kBAAmBvtE,KAAKk/D,QAC/B25G,WAAarD,iBAAiB,GAC9BsD,WAAatD,iBAAiB,IAAMhtK,OAAOqP,kBAC3Cw+J,aAAgB1C,aACtBp5H,OAAOz/B,MAAM,GAAG7S,IAAI,SAAAxN,GAAC,OAAI46K,kBAAkB56K,EAAGo+K,WAAYC,cADrBzD,kBAAkB96H,OAAQs+H,WAAYC,YAM3E,OAHA55G,KAAK3hD,OAAS83J,kBAAkBn2G,KAAK3hD,OAAQs7J,WAAYC,YACzD55G,KAAK3kB,OAAS86H,kBAAkBn2G,KAAK3kB,OAAQs+H,WAAYC,aAGrD55G,UACAm3G,mGAIiBpuJ,UACrB,IAAI8wJ,qBACAC,gBACAC,WACAC,cACAC,iBAAmB,EAEnB5+H,OAKAtyB,SALAsyB,OACO6+H,eAIPnxJ,SAJA4R,MACaq+I,UAGbjwJ,SAHA+rJ,YACUqF,aAEVpxJ,SAFAgT,SACAnB,OACA7R,SADA6R,OAEE0hD,SAAWx7E,KAAK4M,SAAS4uE,SACzBi7F,oBAAsBz2K,KAAKs2K,gBAAgB50K,OAAS1B,KAAKs2K,gBAAgB,GAAG50K,OAAS,EAErFo1G,QAENiiE,qBAAuBK,eACvBJ,gBAAkBK,cAGdH,WADa,IAAb19F,UACci7F,oBAAsB,EAAGA,qBAGb,IAAbj7F,UAAkBi7F,oBAAsB,IAAMA,sBAGpD3tK,QAAQ,SAACvQ,GAChBu+G,KAAKv+G,GAAK2/K,UAAU3/K,GACpB4gL,kBAAoBjB,UAAU3/K,GAC9BwgL,sBAAwBjiE,KAAKv+G,GAC7BygL,iBAAmBliE,KAAKv+G,KAE5BgiD,OAAO,GAAGzxC,QAAQ,SAACrO,EAAGlC,IACa,IAA3B2gL,WAAWjzK,QAAQ1N,KACnBu+G,KAAKv+G,GAAKwgL,sBAAwBb,UAAU3/K,GAAKygL,oBAGzDz+H,OAAOzxC,QAAQ,SAAAiS,KAAG,OAAIA,IAAIjS,QAAQ,SAACslE,IAAK48D,OACF,IAA9BkuC,WAAWjzK,QAAQ+kI,OACnB58D,IAAIw7E,kBAAkB9yC,KAAKk0B,MAAOlxG,QAElCm/I,QAAQjuC,MAAQnnI,KAAK6P,IAAIulK,QAAQjuC,OAAS,EAAGnnI,KAAK8M,MAAMy9D,IAAIo/E,kBAAkB3zH,SAE9Eo/I,QAAQjuC,MAAQ,MAIxB,IAAMsuC,cAAgBF,eAAiBH,QAAQlnK,OAAO,SAACtY,EAAGO,GAAJ,OAAUP,EAAIO,IAQpE,OAPIs/K,cAAgB,EAChBL,QAAUA,QAAQhxK,IAAI,kBAAM,IAE5BixK,WAAWpwK,QAAQ,SAACvQ,GAChB0gL,QAAQ1gL,GAAKsL,KAAK8M,MAAM2oK,eAAiBxiE,KAAKv+G,GAAK4gL,kBAAoB,MAGxEF,8DAWKnC,cAAeF,gBAC3B,IAAIr+K,EACIuhC,OAAW95B,KAAKkxG,iBAAhBp3E,OAER,IAAKvhC,EAAI,EAAGA,EAAIq+K,eAAel1K,UACvBk1K,eAAer+K,IAAMuhC,QADUvhC,KAIvC,OAAOsL,KAAK2P,IAAIsjK,cAAcp1K,OAAS,EAAGnJ,iEAY1BshC,MAAOC,QAAQ,IAAA1iB,OAAApX,KAC3Bi4K,cACAC,aACElE,YAAch0K,KAAKg0K,cAEnB/4I,SAAW+4I,YAAYjiK,OAAO,SAACtY,EAAGO,GAEpC,OADAP,GAAKO,IAGHu/K,cAAgBv5K,KAAKw5K,yBACvBj/H,OAAQv6C,KAAKg2K,cACb/6I,kBACA+4I,wBACAn6I,YACAC,gBAYJ,OATA95B,KAAKg3K,eAAeluK,QAAQ,SAACqvK,YACzB,IAGMxxK,SAAY8yK,OAFH,EAEWC,QADV,EACmBn/H,OAHpB49H,WAAW59H,OAGiB1gB,YAAOC,cAAQm+I,sBAAYC,oBAAWqB,6BAC3EtxJ,SAAW7Q,OAAKuiK,uBAAuBhzK,SAC7CuxK,UAAYjwJ,SAASiwJ,UACrBD,WAAahwJ,SAASgwJ,aAEnBj4K,KAAK45K,uBAAwB9/I,cAAQD,YAAOo+I,sBAAYC,4FAS3CjwJ,UACpB,IACI4xJ,SACAH,QAFAT,WAGEjF,YAAch0K,KAAKg0K,cAJKp6D,cAW1B55G,KAAK4M,SAJL8iI,oBAP0B91B,cAO1B81B,oBACA6lC,aAR0B37D,cAQ1B27D,aACA5B,aAT0B/5D,cAS1B+5D,aACAmG,OAV0BlgE,cAU1BkgE,OAEIv/H,OAAyDtyB,SAAzDsyB,OAAQzgB,OAAiD7R,SAAjD6R,OAAQm+I,WAAyChwJ,SAAzCgwJ,WAAYC,UAA6BjwJ,SAA7BiwJ,UAAWqB,cAAkBtxJ,SAAlBsxJ,cAC/CG,QJyC0B,SAArBK,mBAAsBx/H,OAAQy4F,UACvC,IAAIl5G,OAAS,EACTD,MAAQ,EAOZ,OANA0gB,OAAOzxC,QAAQ,SAACiS,KACZ,IACMi/J,OADMj/J,IAAIi4H,UACGwa,kBACnB3zH,MAAQh2B,KAAK6P,IAAImmB,MAAOmgJ,OAAOngJ,OAC/BC,QAAUkgJ,OAAOlgJ,UAGjBD,YACAC,eIpDUigJ,CAAmBx/H,OAAQv6C,KAAK21K,eAAe77I,OAEzD,IAAMmB,SAAW+4I,YAAYjiK,OAAO,SAACtY,EAAGO,GAEpC,OADAP,GAAKO,IAGTiuB,SAAS+rJ,YAAcA,YACvB/rJ,SAASgT,SAAWA,SAEhBg+I,QADAh+I,SAAW,EACDs+I,cAEAvF,YAAY/rK,IAAI,kBAAM,IAEpC4xK,SJ2J4B,SAAvBI,qBAAwBv/I,SACjC,IAEIw/I,oBAFAC,QAAU,EACVC,UAAY,EAGZzG,aAQAj5I,QARAi5I,aACA4B,aAOA76I,QAPA66I,aACA8E,gBAMA3/I,QANA2/I,gBACAvgJ,OAKAY,QALAZ,OACA41G,oBAIAh1G,QAJAg1G,oBACAoqC,OAGAp/I,QAHAo/I,OACAv/H,OAEA7f,QAFA6f,OACAywF,KACAtwG,QADAswG,KAGAuqC,mBAAoCjoK,IAApBioK,aAAa,KAC7B4E,QAAU5E,aAAaxjK,OAAO,SAACtY,EAAGO,GAE9B,OADAP,GAAKO,KAIT8/K,aAAwBxsK,IAAdwsK,OAAO,KACjBM,UAAYN,OAAO/nK,OAAO,SAACtY,EAAGO,GAE1B,OADAP,GAAKO,KAIbkgL,oBAAsBG,gBAAkBx2K,KAAK8M,MAAM0pK,gBAAkBD,WAErE,IAAME,OAAS//H,OAAO74C,OACtB,OAAO64C,OAAOtyC,IAAI,SAAC8S,IAAK8vH,MACpB,IACM91D,MADMh6D,IAAIiwH,MACEwiB,kBAAkB1zH,OAChCygJ,WAAcxlG,MAA0CA,MAAQj7C,QAAzCogJ,oBAAsBpgJ,QASjD,OAPK65I,eACG4B,aAAa7zK,OAAS,GAAK44K,SAAW/E,aAAa7zK,OACnD64K,WAAcL,oBAAsB3E,aAAa1qC,MAAQsvC,SAClDzqC,qBAA0C,IAAnBh1G,QAAQZ,UACtCygJ,WAAcL,oBAAsBI,SAGrCz2K,KAAK8M,MAAM4pK,cIrMPN,EACP1/H,cACAywF,KAAMhrI,KAAK21K,cACX77I,OAAQ4/I,QACRW,gBAAiBvgJ,OACjB41G,wCACA6lC,0BACA5B,0BACAmG,gBAEA5B,UAAUx2K,OAAS,IACnBu3K,QAAUA,QAAQhxK,IAAI,SAACxN,EAAGlC,GAAJ,OAAUsL,KAAK6P,IAAIjZ,EAAGy9K,UAAU,GAAG3/K,IAAM,MAEnE2/K,UAAUhyK,KAAK+yK,SACf,IAAK,IAAI98I,EAAI,EAAGA,EAAI+7I,UAAUx2K,OAAQy6B,IAClC+7I,UAAU/7I,GAAK88I,QAGnB,OADAhB,WAAW/xK,KAAK2zK,WACP3B,oBAAWD,mFAULhwJ,UAAU,IAAAyL,OAAA1zB,KAInBw6K,YADFx6K,KAAK4M,SADLsnK,aAE6BllB,OACzBmpB,WAAmDlwJ,SAAnDkwJ,WAAYD,UAAuCjwJ,SAAvCiwJ,UAAWD,WAA4BhwJ,SAA5BgwJ,WAAYI,YAAgBpwJ,SAAhBowJ,YACrC99H,OAAS49H,WAAW59H,OACpBk+H,aAAe,IAAK,IACpBC,eAAiB,IAAK,IAEtBF,QAAU,EAAG,GACbjB,aAAev3K,KAAKw3K,cAsB1B,OApBAj9H,OAAOzxC,QAAQ,SAACiS,IAAK8vH,MACjB9vH,IAAIjS,QAAQ,SAAC63D,KAAMqqE,MACf,IAAMyvC,UAAYxC,WAAWI,aAAaxtC,OAAS,EAC7C6vC,SAAWxC,UAAUG,aAAartC,MAExCrqE,KAAKipF,kBAAkB8wB,SAAUD,UAAYD,aAEhC,IAAT3vC,MAAcG,KAAOusC,cACrBmB,aAAa,GAAG1tC,MAAQ0vC,SACxBlC,OAAO,IAAMA,OAAO,IAAM,GAAKkC,UACf,IAAT7vC,MAAcG,MAAQusC,eAC7BmB,aAAa,GAAG1tC,KAAOusC,cAAgBmD,SACvClC,OAAO,IAAMA,OAAO,IAAM,GAAKkC,UAE/B1vC,OAASt3G,OAAKiiJ,gBACd8C,WAAW,GAAG5tC,MAAQ4vC,UACtBhC,WAAW,GAAG5tC,MAAQ4vC,gBAK9BE,SAzBa,EAAG,GA0BhBnC,cACAC,sBACAC,uyCCrTSkC,yDAQjB,SAAAA,mBAAargI,QAAqB,IAAA9lC,MAAb7H,OAAaxH,UAAA1D,OAAA,QAAA4L,IAAAlI,UAAA,GAAAA,UAAA,wKAAAy1K,CAAA76K,KAAA46K,qBAC9BnmK,MAAAqmK,wCAAA96K,KAAA+6K,6BAAAH,oBAAAliL,KAAAsH,KAAMu6C,OAAQ3tC,UAET4qK,cAAgBj9H,OAAO,GAAG74C,OAG/B+S,MAAKwhK,OACDn8K,IAAK44K,YACLn1J,OAAQ9I,MAAKiyJ,cAEjBjyJ,MAAKggK,cAAgBhgK,MAAKs/J,sBAVIt/J,gZARUghK,6VA4BxC,IAAMU,WAAan2K,KAAKk/D,OAExB,OADAi2G,sBAAsBgB,YAAY,GAC3BpC,0BAAoBoC,WAAYn2K,KAAK4M,SAAU5M,KAAKg0K,mFAGxC/rJ,UAAU,IAAAtT,OAAA3U,KAEzBi4K,WAIAhwJ,SAJAgwJ,WACAC,UAGAjwJ,SAHAiwJ,UACAp+I,OAEA7R,SAFA6R,OACAD,MACA5R,SADA4R,MAGJ,OAAO75B,KAAKg3K,eAAe/uK,IAAI,SAACkwK,WAAY5/K,GACxC,IAAM6/K,gBAAmBD,sBAAYD,oBAAWD,sBAAYI,YAAa9/K,EAAGuhC,eAD9Bw+I,sBAM1C3jK,OAAK4jK,kBAAkBH,gBAHvBuC,QAH0CrC,sBAG1CqC,QACAlC,WAJ0CH,sBAI1CG,WACAC,aAL0CJ,sBAK1CI,aAEE9B,eAAiB+D,QACjBnzC,gBAAkB3tG,MAAOA,OAE/B,OACI4+I,YACIE,QAASF,WAAW,GACpBG,UAAWH,WAAW,IAE1BC,cACIC,QAASD,aAAa,GACtBE,UAAWF,aAAa,IAE5B5+I,QACI6+I,QAAS/B,eAAe,GACxBgC,UAAWhC,eAAe,IAE9B/8I,OACI8+I,QAASnxC,eAAe,GACxBoxC,UAAWpxC,eAAe,mEAYtB,IAAAhgC,aAIZxnG,KAAK4M,SAFL+mK,aAFYnsE,aAEZmsE,aACA6B,iBAHYhuE,aAGZguE,iBAEEj7H,OAASv6C,KAAKg2K,cACd92G,KAAOqO,kBAAmBvtE,KAAKk/D,QAC/B25G,WAAarD,iBAAiB,GAC9BsD,WAAatD,iBAAiB,IAAMhtK,OAAOqP,kBAC3Cw+J,aAAgB1C,aACtBp5H,OAAOz/B,MAAM,GAAG7S,IAAI,SAAAxN,GAAC,OAAI46K,kBAAkB56K,EAAGo+K,WAAYC,cADrBzD,kBAAkB96H,OAAQs+H,WAAYC,YAO3E,OAJA55G,KAAK3hD,OAAS83J,kBAAkBn2G,KAAK3hD,OAAQs7J,WAAYC,YAEzD55G,KAAK3kB,OAAS2kB,KAAK3kB,OAAOtyC,IAAI,SAAAxN,GAAC,OAAI46K,kBAAkB56K,EAAGo+K,WAAYC,eAGhE55G,UACAm3G,mGAIiBpuJ,UAAU,IAE3B6R,OAEA7R,SAFA6R,OACAm+I,WACAhwJ,SADAgwJ,WAEA+C,iBAAmBlhJ,OACnBmhJ,cACA/B,cACAgC,QAAU,EACR1/F,SAAWx7E,KAAK4M,SAAS4uE,SACzBi7F,oBAAsBz2K,KAAKs2K,gBAAgB50K,OA0BjD,OAxBiB,IAAb85E,UACA09F,YAAczC,oBAAsB,EAAGA,qBACvCyE,QAAU,IAEVhC,WAA0B,IAAb19F,UAAkBi7F,oBAAsB,IAAMA,qBAC3DyE,QAAU,GAEdjD,WAAWnvK,QAAQ,SAACrO,EAAGlC,IACY,IAA3B2gL,WAAWjzK,QAAQ1N,KACnB0iL,WAAW1iL,GAAKkC,EAChBugL,kBAAoBvgL,KAGxBugL,iBAAmB,EACnBC,WAAaA,WAAWhzK,IAAI,kBAAM,IAElCixK,WAAWpwK,QAAQ,SAACrO,GACZugL,iBAAmBE,QAAUjD,WAAWx9K,GACxCwgL,WAAWxgL,GAAK,EAEhBwgL,WAAWxgL,GAAKoJ,KAAK2P,IAAIykK,WAAWx9K,GAAKugL,iBAAoBE,WAIlED,iEAWKnE,eACZ,IAAIj8J,EACIgf,MAAU75B,KAAKkxG,iBAAfr3E,MAER,IAAKhf,EAAI,EAAGA,EAAIi8J,cAAcp1K,UACtBo1K,cAAcj8J,IAAMgf,OADUhf,KAGtC,OAAOhX,KAAK2P,IAAIsjK,cAAcp1K,OAAS,EAAGmZ,iEAY1Bgf,MAAOC,QAAQ,IAAA1iB,OAAApX,KAC3Bi4K,cACAC,aAYJ,OAVAl4K,KAAKg3K,eAAeluK,QAAQ,SAACqvK,YACzB,IAGMxxK,SAAY8yK,OAFH,EAEWC,QADV,EACmBn/H,OAHpB49H,WAAW59H,OAGiB1gB,YAAOC,cAAQm+I,sBAAYC,qBAChElE,YAAc58J,OAAKuiK,uBAAuBhzK,SAChDuxK,UAAYlE,YAAYkE,UACxBD,WAAajE,YAAYiE,aAGtBj4K,KAAK45K,uBAAwB9/I,cAAQD,YAAOo+I,sBAAYC,4FAS3CjwJ,UACpB,IAAI4xJ,YAEAt/H,OAIAtyB,SAJAsyB,OACA1gB,MAGA5R,SAHA4R,MACAo+I,WAEAhwJ,SAFAgwJ,WACAC,UACAjwJ,SADAiwJ,UAEEsC,YAAcx6K,KAAK4M,SAASsnK,aAAallB,OAEzCyqB,OLoDiB,SAAlB0B,gBAAmBpgK,KAC5B,IAAI+e,OAAS,EACTD,MAAQ,EAMZ,OALA9e,IAAIjS,QAAQ,SAACslE,KACT,IAAM4rG,OAAS5rG,IAAIo/E,kBACnB1zH,OAASj2B,KAAK6P,IAAIomB,OAAQkgJ,OAAOlgJ,QACjCD,OAASmgJ,OAAOngJ,SAGhBA,YACAC,eK9DeqhJ,CAAgB5gI,OAAOv6C,KAAK21K,gBAAgB97I,MACrDo/I,QLgKqB,SAAtBmC,oBAAuB1gJ,QAAS2gJ,cAAiB,IAEtDjC,eAGA1+I,QAHA0+I,eACAv/I,MAEAa,QAFAb,MACA9e,IACA2f,QADA3f,IAGA20H,oBAGA2rC,aAHA3rC,oBACAikC,aAEA0H,aAFA1H,aACA4B,aACA8F,aADA9F,aAEA4E,QAAU,EAOd,OANI5E,cAAgBA,aAAa,KAC7B4E,QAAU5E,aAAaxjK,OAAO,SAACtY,EAAGO,GAE9B,OADAP,GAAKO,KAIN+gB,IAAI9S,IAAI,SAACmmE,IAAK4kE,UACjB,IAAMj+D,MAAQ3G,IAAIo/E,kBAAkB3zH,MAChCyhJ,UAAavmG,MAAoCA,MAAQl7C,OAAnCu/I,eAAiBv/I,OAC3C,GAAI85I,aACA,GAAI4B,aAAa7zK,OAAS,EACtB45K,UAAalC,eAAiB7D,aAAaviC,UAAYmnC,aACpD,GAAIzqC,qBAAiC,IAAV71G,MAAa,CAC3C,IAAM0hJ,OAASxgK,IAAIrZ,OACnB45K,UAAalC,eAAiBmC,OAGtC,OAAO13K,KAAK8M,MAAM2qK,aK7LFF,EACZrgK,IAAKw/B,OAAOv6C,KAAK21K,eACjB97I,MAAO4/I,OACPL,eAAgBv/I,OACjB75B,KAAK4M,UAER2tC,OAAOzxC,QAAQ,SAACiS,IAAK8vH,MAAN,OAAe9vH,IAAIjS,QAAQ,SAACslE,IAAK48D,MAC5C,IAAMwwC,gBAAkBptG,IAAIo/E,kBAE5Bp/E,IAAIw7E,kBAAkBqvB,QAAQjuC,MAAQwvC,YAAagB,gBAAgB1hJ,QACnE+/I,SAAShvC,MAAQhnI,KAAK6P,IAAImmK,SAAShvC,OAAS,EAAGhnI,KAAK8M,MAAMy9D,IAAIo/E,kBAAkB1zH,aAEhFm+I,WAAWv2K,OAAS,IACpBm4K,SAAWA,SAAS5xK,IAAI,SAACxN,EAAGlC,GAAJ,OAAUsL,KAAK6P,IAAIjZ,EAAGw9K,WAAW,GAAG1/K,OAEhE0/K,WAAW/xK,KAAK2zK,UAChB,IAAK,IAAI19I,EAAI,EAAGA,EAAI87I,WAAWv2K,OAAQy6B,IACnC87I,WAAW97I,GAAK09I,SAGpB,OADA3B,UAAUhyK,KAAK+yK,UACNhB,sBAAYC,iFAUNjwJ,UAAU,IAAAyL,OAAA1zB,KAInBw6K,YADFx6K,KAAK4M,SADLsnK,aAE6BllB,OACzBmpB,WAA2DlwJ,SAA3DkwJ,WAAYr+I,OAA+C7R,SAA/C6R,OAAQo+I,UAAuCjwJ,SAAvCiwJ,UAAWD,WAA4BhwJ,SAA5BgwJ,WAAYI,YAAgBpwJ,SAAhBowJ,YAC7C99H,OAAS49H,WAAW59H,OACpBk+H,aAAe,IAAK,IACpBC,eAAiB,IAAK,IACtBiC,SAAW,EAAG,GAEdpD,aAAev3K,KAAKw3K,cAEpBiE,mBAAqBz7K,KAAKw5K,yBAA0B1/I,cAAQm+I,WAAYA,WAAW,SAsBzF,OApBA19H,OAAOzxC,QAAQ,SAACiS,IAAK8vH,MACjB9vH,IAAIjS,QAAQ,SAAC63D,KAAMqqE,MACf,IAAMyvC,UAAYgB,mBAAmB5wC,OAAS,EACxC6vC,SAAWxC,UAAUG,aAAartC,MAExCrqE,KAAKipF,kBAAkB8wB,SAAWF,YAAaC,WAElC,IAATzvC,MAAcH,KAAO0sC,cACrBkB,WAAW,GAAG5tC,MAAQ4vC,UACtBE,QAAQ,IAAMA,QAAQ,IAAM,GAAKF,WACjB,IAATzvC,MAAcH,MAAQ0sC,eAC7BkB,WAAW,GAAG5tC,KAAO0sC,cAAgBkD,UACrCE,QAAQ,IAAMA,QAAQ,IAAM,GAAKF,WAEjC5vC,OAASn3G,OAAKiiJ,gBACd+C,aAAa,GAAG1tC,MAAQ0vC,SACxBhC,aAAa,GAAG1tC,MAAQ0vC,eAKhCC,gBACAnC,QA3BY,EAAG,GA4BfC,sBACAC,+zECjRL,SAASgD,qBAAsBnhI,OAAQl/C,MAC1C,OAAIk/C,OACOA,OAAOizG,kBAAkBnyJ,MAE7B,EAoBX,IAAMuuJ,+BAAoB,SAApBA,kBAAqBrvG,OAAQi+H,OAAQmC,SACvCpgI,OAAOzxC,QAAQ,SAACiS,IAAK8vH,MACjB9vH,IAAIjS,QAAQ,SAACq/I,YAAand,MACtBmd,YAAYyB,kBAAkB4uB,OAAOxtC,MAAO2vC,QAAQ9vC,YAK1D8wC,cAAgB,SAAhBA,cAAiB9K,OAAQ+K,YAAaC,YACxC,IAAIC,QAAUjL,OAAOjkK,SAAP,GAAAyO,OAAmBugK,YAAnB,YAKd,OAJIC,WAAWn6K,OAAS,EAAIo6K,UACxBA,QAAU,EACVjL,OAAOjkK,OAAPmvK,+BAAA,GAAA1gK,OAAoBugK,YAApB,WAA2CE,WAExCA,SAGLE,sBACF5gK,QACIw5J,WTgNsC,mCS/MtCr6H,OTgNqB,eS/MrBw/G,YToIa,QSnIbkiB,WAAYrJ,4BAEhB73J,KACI65J,WT4MuC,iCS3MvCr6H,OT4MkB,YS3MlBw/G,YAAayY,uBACbyJ,WAAYtJ,2BAkDduJ,wBAA0B,SAA1BA,wBAA2BrL,OAAQ3lB,WAAYixB,kBAAmB/kH,QAAxC,OAlCM,SAAhCglH,8BAAiCvL,OAAQwL,eAAgBzH,WAAYx9G,QAAW,IAE9E2qG,WACA8O,OAAOjkK,SADPm1J,WAGAxnH,OAGA8hI,eAHA9hI,OACAw/G,YAEAsiB,eAFAtiB,YACAkiB,WACAI,eADAJ,WAGJ,OAAQla,YACR,ITuKoB,WStKhB,OAAO6S,WACX,QACI,IAAM0H,cAAgBZ,qBAAqB7K,OAAOt2H,UAAWw/G,aAAe3iG,OAK5E,OAHIklH,cAAgB1H,YAChB/D,OAAO0L,WAAPR,+BAAqBE,YAAa,IAE/Bp4K,KAAK6P,IAAIkhK,WAAY0H,gBAgBhCF,CAA8BvL,OAAQmL,qBAAqB9wB,YAAaixB,kBAAmB/kH,SA+DzFolH,oCAAyB,SAAzBA,uBAA0B3L,OAAQ4L,mBAAsB,IAEtD3iJ,OACA+2I,OAAO3yE,cADPpkE,OAGAs9B,OACAy5G,OAAOjkK,SADPwqD,OALsDslH,sBA5BzB,SAA/BC,6BAAgC9L,OAAQ4L,mBAAsB,IAE5D3iJ,OACA+2I,OAAO3yE,cADPpkE,OAEEgwH,aAAe+mB,OAAO/mB,eAGtB8yB,sBAAwB/4K,KAAK2P,IAAIs2I,aAAa0D,kBAAkB1zH,OAAQA,OAAS,GAIvFgwH,aAAaF,kBAAkB6yB,kBAAmBG,uBAGlD,IAGMC,gBAHkB/yB,aAAagzB,oBAGGjM,OAAOjkK,SAASmwK,eAKxD,OACIC,mBAHuBH,gBAAgB/iJ,OAAO6+I,QAAUkE,gBAAgB/iJ,OAAO8+I,UAI/EgE,6CAakDD,CAA6B9L,OAAQ4L,mBAAnFO,mBATkDN,sBASlDM,mBAAoBJ,sBAT8BF,sBAS9BE,sBAGtBK,+BAAiCnjJ,OAASj2B,KAAK2P,IAAIopK,sBAAuBI,oBAKhF,OACIA,sCACAJ,4CACAM,gBALoBhB,wBAAwBrL,OTwCjC,MSxC8CoM,+BAAgC7lH,QAMzF6lH,gEAoDFE,iBACFC,UAAU,EACVrb,WTMkB,USWhBsb,uCAA4B,SAA5BA,0BAA6BxM,QAAW,IAEtCz5G,OACAy5G,OAAOjkK,SADPwqD,OAFsCq0D,MAAA6xD,4BAIE1K,2BAAYD,0BAAU1qK,IAAI,SAAC5M,MACnE,OAnBuB,SAAzBkiL,uBAA0B1M,OAAQx1K,MACpC,IAAMkhL,WAAa1L,OAAO0L,aAKpBiB,mBACFzb,WAHA8O,OAAOjkK,SADPm1J,WAKAqb,SAAUb,WAAWlhL,OAGzB,OAAOpC,OAAO6M,KAAKq3K,iBAAiBz/J,MAAM,SAAAjjB,GAAC,OAAI0iL,gBAAgB1iL,KAAO+iL,kBAAkB/iL,KAQhF8iL,CAAuB1M,OAAQx1K,MACxB+7D,OAEJ,IAR+B,GAW1C,OACIqmH,iBAZsChyD,MAAA,GAatCiyD,eAbsCjyD,MAAA,KAuBjCkyD,uCAA4B,SAA5BA,0BAA6B9M,QACtC,IAAMhnB,UAAYgnB,OAAOhnB,YACnBC,aAAe+mB,OAAO/mB,eAFqB8zB,sBAhLvB,SAAxBC,sBAAyBhN,QAC3B,IAAMhnB,UAAYgnB,OAAOhnB,YAErBhwH,MACAg3I,OAAO3yE,cADPrkE,MAHkCikJ,gBAQlCjN,OAAOjkK,SAFPoiJ,OANkC8uB,gBAMlC9uB,OACA53F,OAPkC0mH,gBAOlC1mH,OAIEojH,YAAcxrB,OAAOn1H,MAGrBkkJ,eAAiBrC,qBAAqB7xB,UT0D3B,SSvDXm0B,kBAAoBn6K,KAAK2P,IAAIuqK,eAAiB3mH,OAAQv9B,MAAQ,GAG9DokJ,iCAAmCpkJ,MAAQmkJ,kBAAoBxD,YAKrE,OACIuD,8BACAC,oCACAvB,kBALsBP,wBAAwBrL,OT4FhC,SS5FgDoN,iCAAkC,GAMhGA,mEA6JAJ,CAAsBhN,QAJtBkN,eAN6CH,sBAM7CG,eACAC,kBAP6CJ,sBAO7CI,kBACAC,iCAR6CL,sBAQ7CK,iCACAxB,kBAT6CmB,sBAS7CnB,kBAT6CyB,sBAiB7C1B,oCAAuB3L,OAAQ4L,mBAH/BO,mBAd6CkB,sBAc7ClB,mBACAE,gBAf6CgB,sBAe7ChB,gBACAD,+BAhB6CiB,sBAgB7CjB,+BAhB6CkB,sBAsB7Cd,uCAA0BxM,QAF1B4M,iBApB6CU,sBAoB7CV,iBACAC,eArB6CS,sBAqB7CT,eAEJ7zB,UAAUD,kBAAkBo0B,kBAAoBN,eAAgBR,gBAAkBO,kBAGlF,IAAMW,kBAAoBv0B,UAAUizB,oBAC9BuB,qBAAuBv0B,aAAagzB,oBAS1C,OANAnB,cAAc9K,OT1FC,MS0FYuN,mBAC3BzC,cAAc9K,OT5FI,SS4FYwN,sBAzHC,SAA7BC,2BAA8BzN,OAAQuN,kBAAmBC,sBAAyB,IAAA1rJ,KAAA+1C,MAAA7lD,MAAAyoG,MAAAW,MAC9E2kD,aAAeC,OAAOD,eAGxB5hB,OACA6hB,OAAOjkK,SADPoiJ,OAEE3d,SAAWw/B,OAAOx/B,WAEpB3wG,IAEA2wG,SAFA3wG,IACAovB,OACAuhF,SADAvhF,OAIE0qH,YAAcxrB,OAAOn1H,MAGrB4+I,YAAa9lJ,SAAGtX,OAAH9T,MAAAorB,KAAA4rJ,+BAAaH,kBAAkBn2K,IAAI,SAAAxN,GAAC,OAAIA,EAAEg+K,WAAWE,YAGlE6F,kBAAmB91G,UAAGrtD,OAAH9T,MAAAmhE,MAAA61G,+BAAaH,kBAAkBn2K,IAAI,SAAAxN,GAAC,OAAIA,EAAEi+K,aAAaC,YAC1E8F,oBAAqB57J,UAAGxH,OAAH9T,MAAAsb,MAAA07J,+BAAaH,kBAAkBn2K,IAAI,SAAAxN,GAAC,OAAIA,EAAEi+K,aAAaE,cAG5EF,cAAeptD,UAAGjwG,OAAH9T,MAAA+jH,MAAAizD,+BAAaF,qBAAqBp2K,IAAI,SAAAxN,GAAC,OAAIA,EAAEi+K,aAAaC,YAGzE+F,qBAAuBL,qBAAqB,GAAG5F,WAAWE,QAC1DgG,wBAAyB1yD,UAAG5wG,OAAH9T,MAAA0kH,MAAAsyD,+BAAaF,qBAAqBp2K,IAAI,SAAAxN,GAAC,OAAIA,EAAEg+K,WAAWG,cAIvFhI,aAAa9nK,QAAQ,SAACyxC,OAAQswF,MAC1BtwF,OAAOzxC,QAAQ,SAACq/I,YAAand,MACzBmd,YAAYyB,kBAAkB8uB,aAAa1tC,MAAQwvC,YAAa/B,WAAW5tC,MAAQ2vC,iBAM3F5wB,+BAAkBlpH,IAAI,GAAI89I,iBAAkBE,sBAE5C90B,+BAAkBlpH,IAAI,GAAI+9I,mBAAoBC,sBAE9C90B,+BAAkB95F,OAAO,GAAI0uH,iBAAkBG,wBAE/C/0B,+BAAkB95F,OAAO,GAAI2uH,mBAAoBE,wBA+EjDL,CAA2BzN,OAAQuN,kBAAmBC,uBAGlDnB,gBAAiBA,gBAAkBO,iBACnCM,eAAgBA,eAAiBL,eACjCT,+BAAgCA,+BAAiCQ,iBAEjET,sCACAP,oCACAwB,oEC1RFW,WAAa,SAAbA,WAAan2J,YAAU,OAAIA,WAAW1W,OAAO,SAAC8sK,MAAO79E,SAAR,OAAoB69E,MAAQ79E,SAAS,yrDCrCnE89E,2CAUjB,SAAAA,WAAaztC,SAAU/8G,WAAY4pE,YAAatxF,QAAQ,IAAA6H,MAAA,2JAAAsqK,CAAA/+K,KAAA8+K,aACpDrqK,MAAAuqK,iCAAAh/K,KAAAi/K,sBAAAH,YAAApmL,KAAAsH,KAAMs0B,WAAY4pE,YAAatxF,UAC1BykI,SAASA,UACd58H,MAAK7H,OAAO6H,MAAKuQ,YAAYpF,iBAC7BnL,MAAKyqK,UAAY50K,cACjBmK,MAAK0qK,UAAY1qK,MAAKuQ,YAAYo6J,kBAClC3qK,MAAK4qK,aAAgB5mB,YAAY,EAAOC,UAAU,GANEjkJ,0XAVpBo+J,0SA0E1BxhC,WACN,OAAIA,WACArxI,KAAK+yK,UC1FqB,SAAzBuM,uBAA0B5kJ,QAAS22G,UAE5C,IAIIkuC,YACAC,YALAj2B,cACAC,eACAC,aACAC,gBALqDx1C,gBAgBrDx5E,QAAQ9tB,SAPRs5I,eATqDhyC,gBASrDgyC,eACAC,kBAVqDjyC,gBAUrDiyC,kBACAs5B,YAXqDvrE,gBAWrDurE,YACAlK,aAZqDrhE,gBAYrDqhE,aACAvmB,OAbqD96C,gBAarD86C,OACAwnB,UAdqDtiE,gBAcrDsiE,UACAh7F,SAfqD04B,gBAerD14B,SAfqDy+E,qBAoBrDv/H,QAAQwjE,cAFR+zE,cAlBqDhY,qBAkBrDgY,cACAD,aAnBqD/X,qBAmBrD+X,aAEItxI,IAAwB2wG,SAAxB3wG,IAAKmwB,OAAmBwgF,SAAnBxgF,OAAQf,OAAWuhF,SAAXvhF,OArBoCi4G,KAAA2X,4BAsBjBh/I,IAtBiB,GAsBlDksH,QAtBkDmb,KAAA,GAsBzCj2B,WAtByCi2B,KAAA,GAsB7Blb,SAtB6Bkb,KAAA,GAAA4X,QAAAD,4BAuBd7uH,OAvBc,GAuBlD8gF,SAvBkDguC,QAAA,GAuBxCluC,YAvBwCkuC,QAAA,GAuB3B/tC,UAvB2B+tC,QAAA,GAAAC,QAAAF,4BAwBR5vH,OAxBQ,GAwBlDo8F,WAxBkD0zB,QAAA,GAwBtC7tC,cAxBsC6tC,QAAA,GAwBvBzzB,YAxBuByzB,QAAA,GAqFzD,OA3DIjuC,SAASjwI,OAAS,IAElB6nJ,cAAUluI,OAAAwkK,gCAAOjzB,SAAPizB,gCAAmBluC,UAAnBkuC,gCAAgC3zB,cAE1Cta,UAAUlwI,OAAS,IAEnB8nJ,eAAWnuI,OAAAwkK,gCAAOhzB,UAAPgzB,gCAAoBjuC,WAApBiuC,gCAAkC1zB,eAE7Cra,WAAWpwI,OAAS,GAAKowI,WAAW,GAAGpwI,OAAS,IAEhD+nJ,UAAY3X,WAAW7pI,IAAI,SAACpP,EAAGN,GAAJ,SAAA8iB,OAAAwkK,gCAAcjzB,QAAQr0J,IAAtBsnL,gCAA6BhnL,GAA7BgnL,gCAAmChzB,SAASt0J,QAEvEw5I,cAAcrwI,OAAS,GAAKqwI,cAAc,GAAGrwI,OAAS,IAEtDgoJ,aAAe3X,cAAc9pI,IAAI,SAACpP,EAAGN,GAAJ,SAAA8iB,OAAAwkK,gCAAc3zB,WAAW3zJ,IAAzBsnL,gCAAgChnL,GAAhCgnL,gCAAsC1zB,YAAY5zJ,QAGvFmiC,QAAQmvH,UAAU,IAAIi2B,4BAAWv2B,WAAYC,cACzC9Z,oBAAqBwW,eACrBqvB,aAAcA,aAAa/6J,KAC3Bs/J,OAAQ2F,YAAYjlK,KACpB05J,cACIr6I,MAAOm4I,aACPl4I,OAAQm4I,cACRjjB,OAAQA,OAAOn1H,OAEnB2hD,SAAUA,SAASzgE,IACnBy7J,UAAWA,UAAUh8J,KAAKvS,IAAI,SAAAxN,GAAC,OAAIA,EAAIoJ,KAAK6P,IAAIk5I,QAAQlrJ,OAAQmrJ,SAASnrJ,UACzE8zK,kBAAmB5oB,QAAQlrJ,OAAQwqJ,WAAWxqJ,WAI9C69K,YADA3yB,QAAQlrJ,OAAS,EACHkrJ,QAAQ,GAAGlrJ,OAEXwqJ,WAAWxqJ,OAAS,EAAIwqJ,WAAW,GAAGxqJ,OAAS,EAI7D89K,YADA3yB,SAASnrJ,OAAS,EACJmrJ,SAAS,GAAGnrJ,OAEZyqJ,YAAYzqJ,OAAS,EAAIyqJ,YAAY,GAAGzqJ,OAAS,EAGnEg5B,QAAQovH,aAAa,IAAIi2B,kCAAct2B,UAAWC,eAC9Cha,oBAAqByW,kBACrBovB,aAAcA,aAAah8J,QAC3BugK,OAAQ2F,YAAYlmK,QACpBo6J,cAAc,EACdO,cACIr6I,MAAOm4I,aACPl4I,OAAQm4I,cACRjjB,OAAQA,OAAOn1H,OAEnB2hD,SAAUA,SAASpN,IACnBooG,UAAWA,UAAUj9J,QACrBi8J,kBAAmB+J,YAAaC,gBAEpC9kJ,QAAQk2I,aAAan/B,aAEdJ,SDKkBiuC,CAAuBt/K,KAAMqxI,WACvCrxI,MAEXggL,WAAAf,sBAAAH,WAAAzkL,WAAA,WAAA2F,MAAAtH,KAAAsH,KAAsBqxI,iEAWtBrxI,KAAKu8K,YAAa9jB,YAAY,EAAOC,UAAU,IADlC,IAAAunB,sBAKTtC,uCAA0B39K,MAF1Bi9K,+BAHSgD,sBAGThD,+BACAgB,iCAJSgC,sBAIThC,iCAIJ,OADAj+K,KAAKkgL,mBAAmBjD,+BAAgCgB,kCACjDj+K,+CAGD3E,KAAM8kL,YACZ,IAAMC,SAAW/kL,KAAKoG,cAEhB4+K,WADuBrgL,KAAK8wK,WAA1BC,iBAC2B,GAAA11J,OAAI+kK,SAAJ,UAC7BtE,QAAUj4K,KAAK2P,IAAI3P,KAAK6P,IAAI,EAAGysK,YAAaE,YAMlD,OALArgL,KAAK4M,iLAAL0zK,IAAA,GAAAjlK,OACQ+kK,SADR,WAC4BtE,QAAU,IAEtC97K,KAAKkgL,qBACLlgL,KAAKugL,aACEvgL,yCAGJ3E,MAAM,IACD01K,iBAAqB/wK,KAAK8wK,WAA1BC,iBACFqP,SAAW/kL,KAAKoG,cACtB,OACI4+K,WAAYtP,iBAAgB,GAAA11J,OAAI+kK,SAAJ,UAC5BI,YAAaxgL,KAAK4M,SAAL,GAAAyO,OAAiB+kK,SAAjB,YAAsC,+CAKvD,OAAIh7K,UAAS1D,QACT1B,KAAKm/K,UAAL/5K,UAAA1D,QAAA,OAAA4L,EAAAlI,UAAA,GACOpF,MAEJA,KAAKm/K,0DAIZ,OAAI/5K,UAAW1D,QACX1B,KAAKq/K,YAAc9xG,eAAevtE,KAAKq/K,YAANj6K,UAAA1D,QAAA,OAAA4L,EAAAlI,UAAA,IAC1BpF,MAEJA,KAAKq/K,0EASIoB,aAAcC,aAAa,IAAA9mE,cAKvC55G,KAAK4M,SAHL+zK,WAFuC/mE,cAEvC+mE,WACA5D,cAHuCnjE,cAGvCmjE,cACA/tB,OAJuCp1C,cAIvCo1C,OAEE+hB,iBD/JiB,SAAlB6P,gBAAmB/P,OAAQ8P,WAAY5D,eAYhD,IAXA,IAAMlzB,UAAYgnB,OAAOhnB,YACnBC,aAAe+mB,OAAO/mB,eACtB8mB,aAAeC,OAAOD,eACtBv/B,SAAWw/B,OAAOx/B,WAClBwvC,YAAch3B,UAAUi3B,sBACxBC,eAAiBj3B,aAAag3B,sBAC9BE,sBACFjmK,IAAK,EACLK,OAAQ,GAGH7iB,EAAIooL,WAAa,EAAGpoL,GAAK,EAAGA,IAAK,CACtC,IAAMmJ,OAASmC,KAAK6P,IAAImtK,YAAYtoL,GAAG+9K,cAAc50K,OACjDm/K,YAAYtoL,GAAGg+K,gBAAgB70K,QACnCs/K,qBAAqBjmK,KAAOrZ,OAGhC,IAAK,IAAInJ,GAAIwkL,cAAgB,EAAGxkL,IAAK,EAAGA,KAAK,CACzC,IAAMgiD,OAASwmI,eAAexoL,IACtB+9K,cAAmC/7H,OAAnC+7H,cAAeC,gBAAoBh8H,OAApBg8H,gBACjB70K,QAASmC,KAAK6P,IAAI4iK,cAAc,GAAKA,cAAc,GAAG50K,OAAS,EACjE60K,gBAAgB,GAAKA,gBAAgB,GAAG70K,OAAS,GACrDs/K,qBAAqB5lK,QAAU1Z,QAGnC2vI,SAAS3wG,IAAI,GAAKqgJ,eAAehE,eAAezG,cAChDjlC,SAASvhF,OAAO,GAAKixH,eAAehE,eAAexG,gBAEnDllC,SAASxgF,OAAO,GAAKgwH,YAAYF,YAAYrK,cAC7CjlC,SAASxgF,OAAO,GAAKgwH,YAAYF,YAAYpK,gBAE7C,IAAM0K,aAAep9K,KAAK6P,IAAI29H,SAASxgF,OAAO,GAAGnvD,OAAQ2vI,SAASxgF,OAAO,GAAGnvD,QAEtEw/K,gBAAkBr9K,KAAK6P,IAAI29H,SAAS3wG,IAAI,GAAG,GAAK2wG,SAAS3wG,IAAI,GAAG,GAAGh/B,OAAS,EAAG2vI,SAASvhF,OAAO,GAAG,GAChGuhF,SAASvhF,OAAO,GAAG,GAAGpuD,OAAS,GAIvC,OAHA2vI,SAASxgF,OAAO,GAAK+/G,aAAa91J,MAAMkmK,qBAAqBjmK,IAAKimK,qBAAqBjmK,IAAMkmK,cACxFh5K,IAAI,SAAAsyC,QAAM,OAAIA,OAAOz/B,MAAMkmK,qBAAqB5lK,OAAQ4lK,qBAAqB5lK,OAAS8lK,oBAGvF7vC,kBACA8vC,SAAUN,YAAYn/K,OACtB0/K,YAAaL,eAAer/K,QCqHHk/K,CAAgB5gL,KAAM2gL,WAAY5D,eACrDsE,iBD3GqB,SAAtBC,oBAAuBzQ,OAAQ4P,aAAcC,aACtD,IAAM72B,UAAYgnB,OAAOhnB,YACnBC,aAAe+mB,OAAO/mB,eAF0Cy3B,eAMlE1Q,OAAOjkK,SAFPmwK,cAJkEwE,eAIlExE,cACA4D,WALkEY,eAKlEZ,WAGEa,UAAY33B,UAAUizB,oBAAoB6D,YAC1Cc,UAAY33B,aAAagzB,oBAAoBC,eAG/CtE,WAEA+I,UAFA/I,WACOsF,eACPyD,UADA3nJ,MAGA6+I,aAEA+I,UAFA/I,aACQsE,mBACRyE,UADA3nJ,OAGaqrI,UAAqC4Y,eAA9CpF,QAA+B+I,WAAe3D,eAA1BnF,UACX+I,UAAuC3E,mBAAhDrE,QAA+BiJ,aAAiB5E,mBAA5BpE,UAEtBiJ,aAAejD,WAAWnG,WAAWE,SACrCmJ,YAAclD,WAAWlG,aAAaC,SACtCoJ,WAAa5c,UAAWthK,KAAK2P,IAAIsuK,YAAapB,aAAcgB,YAC5DM,YAAcL,UAAW99K,KAAK2P,IAAIquK,aAAcpB,cAAemB,cAErE,OACIG,oBACAC,sBACAC,sBACInoJ,OAAQ+nJ,aACRhoJ,MAAOioJ,aAEXI,eACIroJ,MAAO+kJ,WAAWmD,WAClBjoJ,OAAQ8kJ,WAAWoD,aAEvBG,YAAa1J,WACb2J,WAAY1J,cCmEa4I,CAAoBthL,KAAMygL,aAAcC,aAMjE,OALAW,iBAAiBryB,OAASA,OAC1BhvJ,KAAK8wK,UACDC,kCACAsQ,oCAEGrhL,iEAzIP,OAAO/G,OAAO4T,WACVw0K,kBACIryB,OAAQhvJ,KAAK4f,gBAAgBovI,OAC7BgzB,YAAa,EAAG,EAAG,GACnBD,WAAY,EAAG,EAAG,IAEtBhR,kBACIqQ,YAAa,EACbD,SAAU,EACV9vC,UAAY3wG,OAASmwB,UAAYf,8EAazC,OAAOwjH,2EAWP,OAAOJ,8DAWP,OAAO,IAAI4L,WAAW,KAAM,KAAM9+K,KAAK41J,qBAAsB51J,KAAK4f,oNE5E1E,0CAAMyiK,WAASC,6BAAAC,cAAA,GAAAlnK,ObqOI,MarOJ,KAAAA,ObsOK,QA0BM,MahQXinK,6BAAAC,WAAA,GAAAlnK,ObqOI,MarOJ,KAAAA,Ob+PO,UA5BA,UanOPinK,6BAAAC,WAAA,GAAAlnK,ObqOI,MarOJ,KAAAA,ObuOM,SAyBK,MahQXinK,6BAAAC,WAAA,GAAAlnK,ObyOO,SazOP,KAAAA,ObsOK,QAFD,OapOJinK,6BAAAC,WAAA,GAAAlnK,ObyOO,SazOP,KAAAA,Ob+PO,UAtBA,UazOPinK,6BAAAC,WAAA,GAAAlnK,ObyOO,SazOP,KAAAA,ObuOM,SAHF,OapOJinK,6BAAAC,WAAA,GAAAlnK,ObwOO,SaxOP,KAAAA,ObsOK,QA0BM,MahQXinK,6BAAAC,WAAA,GAAAlnK,ObwOO,SaxOP,KAAAA,Ob+PO,UA5BA,UanOPinK,6BAAAC,WAAA,GAAAlnK,ObwOO,SaxOP,KAAAA,ObuOM,SAyBK,MahQXknK,YAgBTC,oCAAwB,SAAxBA,sBAAyBC,YAAaC,YAAahjH,MAAOijH,YAAe,IAEvEnwI,MAGAmwI,WAHAnwI,MACA3Y,MAEA8oJ,WAFA9oJ,MACA9B,MACA4qJ,WADA5qJ,MAEEq8H,YAAW,GAAA/4I,OAAMwe,MAAN,OAAAxe,OAAiB0c,OAElC0qJ,YAAY35K,QAAQ,SAAC85K,aAZG,SAAtBC,oBAAuBnjH,MAAOltB,MAAOn3C,KAAM08B,OAC7C2nC,MAAM3nC,MAAN,UAAA1c,OAAsBhgB,MAAtB,GAAAggB,OAAiC0c,MAAjC,KAAA1c,OAA0Cm3B,QAYtCqwI,CAAoBnjH,MAAOgjH,YAAYE,YAAcpwI,MbgOhC,gBahOuDowI,WAAYxuB,gBAiBnF0uB,2BAAe,SAAfA,aAAgBpjH,MAAOsvF,OAAQj0I,IAAKK,QAC7C,IAAM2nK,gBAdY,SAAhBC,cAAiBtjH,MAAOijH,YAAe,IAEtCrxC,eAGDqxC,WAHCrxC,eACDC,eAEAoxC,WAFApxC,eACAC,iBACAmxC,WADAnxC,iBAEF,OACIz2H,IAAK,SAAAA,MAAA,OAAMynK,qCbiMA,MAGG,UapMkClxC,eAAgB5xE,MAAOijH,aACvEvnK,OAAQ,SAAAA,SAAA,OAAMonK,qCbiMF,OACC,SalMsCjxC,eAAgB7xE,MAAOijH,aAC1E9xH,OAAQ,SAAAA,SAAA,OAAM2xH,qCbgMF,OACC,QAFF,MAGG,UalMkDhxC,iBAAkB9xE,MAAOijH,cAKrEK,CAActjH,MAAOsvF,QACvCi0B,aAAeZ,UAAS,GAAAhnK,OAAIg3J,iBAAiBD,WAAWr3J,MAAhC,KAAAM,OAAyCk3J,oBAAoBn3J,UACvF6nK,cACAF,gBAAgBE,+LC9CxB,IAAMC,WAAa,SAAbA,WAAa7yK,KAAG,OAAIxH,MAAMG,KAAKH,MAAMwH,IAAI3O,QAAQoE,SAEjDq9K,YAAc,SAAdA,YAAe5yG,MAAO6yG,WAAmC,IAAxBC,eAAwBj+K,UAAA1D,OAAA,QAAA4L,IAAAlI,UAAA,GAAAA,UAAA,MAEvD6gB,MAEAo9J,eAFAp9J,MACAkhE,MACAk8F,eADAl8F,MAEE92E,IAAM+yK,UAAUtoK,QAChBwoK,UAAY/yG,MAAMz1D,QAClByoK,UAAYD,UAAUxoK,QAS5B,GANAmL,MAAQA,OAASpd,MAAMG,KAAKH,MAAMwH,IAAI3O,QAAQoE,QAG9CqhF,MAAQA,OAAU,SAAAv9E,GAAC,OAAIA,GAGE,IAArB05K,UAAU5hL,OAAc,CACxB,IAAMooH,WAIN,OAHA7jG,MAAMnd,QAAQ,SAACrO,GACXqvH,QAAO5jH,KAAKmK,IAAI5V,OAEX8oL,oBAAWD,UAAWjzK,IAAKA,IAAKy5G,SAQ7C,IALA,IAAI05D,OAAS,GACTC,SAAW,GACT35D,UAGGvxH,EAAI0tB,MAAMvkB,OAAS,EAAGnJ,GAAK,EAAGA,IAAK,CAExC,IAAMmrL,cAAgBz9J,MAAM1tB,GAO5B,IAJAirL,QAAUr8F,MAAM92E,IAAIqzK,oBACpBD,UAAYt8F,MAAMm8F,UAAUI,iBAIxB55D,OAAO45D,eAAiB,SACrB,CACHD,SAAW,GAGX,IAAK,IAAI5oK,EAAItiB,EAAGsiB,EAAIoL,MAAMvkB,OAAQmZ,IAAK,CACnC,IAAM8oK,QAAU19J,MAAMpL,GAChB+oK,QAAUvzK,IAAIszK,SAEpB75D,OAAO65D,SAAWC,QAGlBN,UAAUK,SAAWC,QACrBH,SAAWD,SAIvB,IAAMK,aAIN,OAHA59J,MAAMnd,QAAQ,SAACrO,GACXopL,UAAU39K,KAAK4jH,OAAOrvH,OAEjB8oL,oBAAWD,oBAAWjzK,IAAKwzK,YAGlCC,eAAiB,SAAjBA,eAAkBh7J,QAASI,OAAQqxB,OAAQswF,MAG7C,IAAK/hH,QACD,OAAO,kBAAM,GAGjB,IAAMowJ,YACFn+J,IAAK,SAAAA,IAAAlH,OAAK,OAAI0mC,OAAOswF,KAAOh3H,QAAU0mC,OAAOswF,KAAOh3H,OAAOqV,SAC3D9N,OAAQ,SAAAA,OAAAvH,OAAK,OAAI0mC,OAAOswF,MAAM3hH,OAASrV,SAG3C,OAAO,SAACxY,MAIJ,IAHA,IAAIwY,MAAQ,EACRkwK,QAAS,GAELA,QAC4B,OAA5B7K,WAAW79K,MAAMwY,OACjBA,OAAS,EAETkwK,QAAS,EAGjB,OAAOlwK,QAITmwK,YAAc,SAAdA,YAAezpI,OAAQt0B,OAAT,OAChBlL,IAAK,SAAAA,MACD,IAAIw1D,SACJ,OAAOh2B,OAAOtyC,IAAI,SAACxN,GAAM,IAAAwpL,aAIbd,YAAY5yG,MAAO91E,GAAK0sF,MAAO,SAAAA,MAAAjmF,KAAG,OAAIA,IAAI0c,WAAWqI,cAFrDq9J,UAFaW,aAEbX,UACAjzK,IAHa4zK,aAGb5zK,IAIR,OADAkgE,MAAQ+yG,UACDjzK,OAGf+K,OAAQ,SAAAA,SACJ,IAAIm1D,SACE2zG,cAiBN,OAhBA3pI,OAAO74C,QAAU64C,OAAO,GAAGzxC,QAAQ,SAAC63D,KAAMqyE,UACtC,IAAMmxC,aACN5pI,OAAOzxC,QAAQ,SAACiS,KACZopK,UAAUj+K,KAAK6U,IAAIi4H,aAH4B,IAAAoxC,cAQ3CjB,YAAY5yG,MAAO4zG,WAAah9F,MAAO,SAAAA,MAAAjmF,KAAG,OAAIA,IAAI0c,WAAWqI,cAF7Dq9J,UAN2Cc,cAM3Cd,UACAjzK,IAP2C+zK,cAO3C/zK,IAERkgE,MAAQ+yG,UAER/oI,OAAOzxC,QAAQ,SAACiS,IAAKqvH,UACjB85C,WAAW95C,UAAY85C,WAAW95C,cAClC85C,WAAW95C,UAAU4I,UAAY3iI,IAAI+5H,cAGtC85C,cAITG,cAAgB,SAAhBA,cAAgBH,YAAU,OAC5BnpK,IAAK,SAAAA,MACD,IAAMupK,SAUN,OATAJ,WAAWp7K,QAAQ,SAACiS,IAAKwpK,MACrBD,MAAMC,MAAQD,MAAMC,UACpBxpK,IAAIjS,QAAQ,SAACslE,IAAK71E,GACd,GAAI2rL,WAAWK,MAAMhsL,GAAI,CACrB,IAAMisL,SAAWV,eAAe11G,IAAK71E,EAAG2rL,WAAYK,KAAnCT,CAAyC,OAC1DU,UAAYF,MAAMC,MAAMr+K,KAAKs+K,eAIlCF,OAEXlpK,OAAQ,SAAAA,SAAA,OAAM8oK,WAAWj8K,IAAI,SAAC8S,IAAKwpK,MAAN,OAAexpK,IAAI9S,IAAI,SAACmmE,IAAK71E,GAAN,OAAYurL,eAAe11G,IAAK71E,EAAG2rL,WAAYK,KAAnCT,CAAyC,YACxF9wK,OAAO,SAAAo7D,KAAG,OAAY,IAARA,WAG7Bq2G,SAAW,SAAXA,SAAWC,WAAS,OACtB3pK,IAAK,SAAAA,IAACw/B,QACF,OAAImqI,UACOxB,WAAW3oI,OAAO,IAAIj3B,UAE1B4/J,WAAW3oI,OAAO,KAE7Bn/B,OAAQ,SAAAA,OAACm/B,QACL,OAAImqI,UACOxB,WAAW3oI,QAAQj3B,UAEvB4/J,WAAW3oI,WAIpBoqI,wBAAsBC,0BAAAC,yBAAA,GAAAxpK,OdoET,McpES,OAEpBypK,YAAaL,UAAS,GAAT,OACbM,gBAAiB,SAAAA,kBAAA,OAAef,YAAWz8K,WAAX,EAAAnC,WAAA,QAChC4/K,UAAW,SAAAA,YAAA,OAAeX,cAAa98K,WAAb,EAAAnC,WAAA,UAJNw/K,0BAAAC,sBAAA,GAAAxpK,OduEN,ScvEM,OAOpBypK,YAAaL,UAAS,GAAT,OACbM,gBAAiB,SAAAA,kBAAA,OAAef,YAAWz8K,WAAX,EAAAnC,WAAA,QAChC4/K,UAAW,SAAAA,YAAA,OAAeX,cAAa98K,WAAb,EAAAnC,WAAA,UATNw/K,0BAAAC,sBAAA,GAAAxpK,OdwEN,ScxEM,OAYpBypK,YAAaL,UAAS,GAAT,IACbM,gBAAiB,SAAAA,kBAAA,OAAef,YAAWz8K,WAAX,EAAAnC,WAAA,KAChC4/K,UAAW,SAAAA,YAAA,OAAeX,cAAa98K,WAAb,EAAAnC,WAAA,OAdNw/K,0BAAAC,sBAAA,GAAAxpK,OdwEN,ScxEM,OAiBpBypK,YAAaL,UAAS,GAAT,IACbM,gBAAiB,SAAAA,kBAAA,OAAef,YAAWz8K,WAAX,EAAAnC,WAAA,KAChC4/K,UAAW,SAAAA,YAAA,OAAeX,cAAa98K,WAAb,EAAAnC,WAAA,OAnBNy/K,uBAuBtBI,oBAAsB,SAAtBA,oBAAuB5pL,MACzB,IAAM2sH,UAAY28D,uBAAuBtpL,MACzC,OAAI2sH,YAIA88D,YAAa,SAAAA,cAAA,OAAM,MACnBC,gBAAiB,SAAAA,gBAAAxqI,QAAM,OAAI,kBAAMA,SACjCyqI,UAAW,SAAAA,YAAA,OAAM,kBAAM,SA+B/B,IAqBME,YAAc,SAAdA,YAAexlH,MAAO4kH,MAAO13K,OAAQvR,MACvC,IAAMm/K,YAAc5tK,OAAOoiJ,OAAOn1H,MAElC6lC,MAAMrO,KAAKh2D,KAAM,SAAUslE,KAAMqyE,UAC7B,IAAMnmB,KAAOy3D,MAAM3jH,KAAKypE,UAAU4I,UAIlC,OA7ByB,SAA3BmyC,yBAA4Bt4D,KAAMs7B,YAAaqyB,aAAgB,IAAA7nJ,KAC3DmH,OAASquH,YAAYn2C,cACrBn4E,MAAQsuH,YAAYp2C,aAE1B,OAAA6yE,0BAAAjyJ,QdaoB,UcbpB,WAEQm0D,6BAAc9mF,MAAM+3B,MAAM,SAA1B,GAAA1c,OAAuCye,OAAS0gJ,YAAhD,OACI3tD,KAAO,IACP/lC,6BAAc9mF,MAAM+3B,MAAM,SAA1B,GAAA1c,OAAuCye,OAAS+yF,KAAO2tD,YAAe3tD,KAAtE,OACAs7B,YAAYyB,kBAAkB/vH,MAAOC,OAAS+yF,SAL1D+3D,0BAAAjyJ,KdcoB,UcdpB,WASYk6F,KAAO,GACPs7B,YAAYyB,kBAAkB/vH,MAAQgzF,KAAO2tD,aAAe3tD,KAAO,GAAI/yF,QAE3EgtD,6BAAc9mF,MAAM+3B,MAAM,SAA1B,GAAA1c,OAAuCye,OAAvC,SAZRnH,KAwBIwyJ,CAAyBt4D,KAFLlsD,KAAKwnF,YAEmBqyB,aAAan/K,MAAMtB,KAAKiG,KAApEmlL,GACOt4D,QAITu4D,gBAAcR,0BAAAS,mBAAA,GAAAhqK,Od3BD,Mc2BC,MACF,MADEupK,0BAAAS,gBAAA,GAAAhqK,Od3BD,Mc2BC,MAEF,SAAA8E,IAAA,QAAA0mD,KAAAzhE,UAAA1D,OAAIgf,OAAJ,IAAA7X,MAAAg+D,MAAAC,KAAA,EAAAA,KAAAD,KAAAC,OAAIpmD,OAAJomD,MAAA1hE,UAAA0hE,MAAA,OAAeo+G,YAAW39K,WAAX,EAAemZ,OAAfrF,QdjBT,eceJupK,0BAAAS,gBAAA,GAAAhqK,Od3BD,Mc2BC,MAGF,MAHEupK,0BAAAS,gBAAA,GAAAhqK,OdvBE,ScuBF,MAIC,SAAA8E,IAAA,QAAA6mD,MAAA5hE,UAAA1D,OAAIgf,OAAJ,IAAA7X,MAAAm+D,OAAAC,MAAA,EAAAA,MAAAD,MAAAC,QAAIvmD,OAAJumD,OAAA7hE,UAAA6hE,OAAA,OAAei+G,YAAW39K,WAAX,EAAemZ,OAAfrF,QdpBZ,ecgBJupK,0BAAAS,gBAAA,GAAAhqK,OdvBE,ScuBF,MAKC,MALDupK,0BAAAS,gBAAA,GAAAhqK,OdvBE,ScuBF,MAMC,SAAA8E,IAAA,QAAA4uD,MAAA3pE,UAAA1D,OAAIgf,OAAJ,IAAA7X,MAAAkmE,OAAAC,MAAA,EAAAA,MAAAD,MAAAC,QAAItuD,OAAJsuD,OAAA5pE,UAAA4pE,OAAA,OAAek2G,YAAW39K,WAAX,EAAemZ,OAAfrF,QdtBZ,ecgBJupK,0BAAAS,gBAAA,GAAAhqK,OdxBE,ScwBF,MAOC,MAPDupK,0BAAAS,gBAAA,GAAAhqK,OdxBE,ScwBF,MAQC,SAAA8E,IAAA,QAAAk0D,MAAAjvE,UAAA1D,OAAIgf,OAAJ,IAAA7X,MAAAwrE,OAAAE,MAAA,EAAAA,MAAAF,MAAAE,QAAI7zD,OAAJ6zD,OAAAnvE,UAAAmvE,OAAA,OAAe2wG,YAAW39K,WAAX,EAAemZ,OAAfrF,QdvBZ,eceJupK,0BAAAS,gBAAA,GAAAhqK,OdxBE,ScwBF,MASC,MATDgqK,4TChQCC,wkBAKb,MAAM,IAAIr2K,MAAMo+D,UAAUk4G,sDAO1B,MAAM,IAAIt2K,MAAMo+D,UAAUk4G,wDAO1B,MAAM,IAAIt2K,MAAMo+D,UAAUk4G,wDAO1B,MAAM,IAAIt2K,MAAMo+D,UAAUk4G,gOCvB3B,ICJM94E,qCAAO,OACPC,sCAAQ,QACRH,uCAAS,SACTC,oCAAM,MAENg5E,4CAAc,OASdC,iBAAS,SAGTC,qBAAO,OACPC,qBAAO,OACPC,0BAAkB,gBAClBC,iBAAS,SACTC,0BAAY,YACZC,UAAY,WACZC,2BAAS,SACTC,cAAgB,eCzBhBC,eAAO,OAEPC,eAAO,OAEPC,KAAO,OAEPC,MAAQ,6UCsHNC,uBArGX,SAAAA,WAAa15K,kKAAQ25K,CAAAvmL,KAAAsmL,YACjBtmL,KAAKgkF,IAAM15E,cAEX,IAAMoa,UAAY6oD,kBAAmBvtE,KAAKglB,YAAYpF,iBACtD5f,KAAKovF,QAAU7hB,eAAe7oD,UAAW9X,YAEzC5M,KAAK+hG,OAAS,uSA8Bd,MAAM,IAAI9yF,MAAMo+D,UAAUC,gDAU1B,MAAM,IAAIr+D,MAAMo+D,UAAUC,8DAS1B,MAAM,IAAIr+D,MAAMo+D,UAAUC,0EAU1B,MAAM,IAAIr+D,MAAMo+D,UAAUC,8EAW1B,MAAM,IAAIr+D,MAAMo+D,UAAUC,wDAU1B,MAAM,IAAIr+D,MAAMo+D,UAAUC,wDAU1B,MAAM,IAAIr+D,MAAMo+D,UAAUC,iDAhF1B,MDzCc,iECoDd,6MC3CD,gCAAM+1C,+BAAcmjE,8BAAAC,mBHPL,UGOKD,8BAAAE,qBAElBC,qCAAiB,GAFCH,8BAAAE,kBAGlBC,sCAAkB,GAHAH,8BAAAE,kBAIlBC,oCAAgB,GAJEH,8BAAAE,kBAKlBC,uCAAmB,GALDD,oBAAAF,8BAAAC,gBHFA,aGSE,GAPFD,8BAAAC,gBHEF,YGME,GARAD,8BAAAC,gBHAG,gBGSE,MATLD,8BAAAC,gBHCD,YAKJ,UGNKD,8BAAAC,gBHKP,QGME,GAXKD,8BAAAC,gBHmBF,WGPE,GAZAD,8BAAAC,gBHoBF,gBGPE,GAbAD,8BAAAC,gBHqBH,WGPE,MAdCA,8LCP3B,IAAMG,eACF70J,SACAigF,eACAD,cACAnlG,QACI4/D,aAAc,SAAAA,aAAC9xC,QAASlhC,OAAV,OAAoB+zE,eAAe7yC,QAAQ00D,QAAS51F,SAEtEo6G,gBACAizE,cACApjK,WAoBSg2E,sCAAKqtF,yBAAAC,+BACbX,KAAO74G,gBAjBRxiE,QACAi8K,WACAp6K,UACA6pF,MACIjqB,aAAc,SAAAA,aAAC9xC,QAASlhC,OAAV,OAAoBP,OAAO4T,OAAO6tB,QAAQmwH,MAAOrxJ,SAEnE2hJ,iBACAvyI,UACAoxC,aACAuvD,YACA9J,iBAOkCmnF,gBADpBE,yBAAAC,4BAEbb,eAAO34G,gBAJR05G,cAIkCL,gBAFpBE,yBAAAC,4BAGbZ,eAAOS,eAHME,yBAAAC,4BAIbV,MAAQO,eAJKG,0lCCdlB,IA+MeljC,gCAvKX,SAAAA,SAAaj3I,QAAQ,IAAA6H,MAAA,8JAAAyyK,CAAAlnL,KAAA6jJ,WACjBpvI,iLAAA0yK,CAAAnnL,KAAAonL,yBAAAvjC,UAAAnrJ,KAAAsH,KAAM4M,UAEDqpG,MAAQ,KACbxhG,MAAK4yK,aAAe,KACpB5yK,MAAK6yK,YAAc,KACnB7yK,MAAKggK,cAAgB,KAErB5nG,sBAAsB06G,gEAAA9yK,QAAMglF,qCAAM0sF,iBARjB1xK,8XARF6xK,gSAoCf,OAAOtmL,KAAKyjB,SAASqT,iDAoBrB,OACIz7B,KAAM8qL,eACNj2H,KAAMlwD,KAAKyjB,SAASmI,uEAyBxB,OAHK5rB,KAAK4zG,gBACN5zG,KAAK4zG,aAjHQ,SAAnB4zE,iBAAoB9sJ,SACtB,IAAI+sJ,aACAC,cACEx3H,KAAOx1B,QAAQjX,SAHaywF,gBAO9Bx5E,QAAQ9tB,SAFR+6K,WAL8BzzE,gBAK9ByzE,WACAtqF,OAN8B6W,gBAM9B7W,OAN8BuqF,sBAW9B13H,KAAKs9F,kBAFL3zH,MAT8B+tJ,sBAS9B/tJ,MACAC,OAV8B8tJ,sBAU9B9tJ,OAWJ,OANa,IADLo2B,KAAKtjD,SADLmwF,MAGJ2qF,cAAgB7jL,KAAK8M,MAAMmpB,OAASujE,OAAO38D,IAAM28D,OAAOvtC,OAAS63H,YACjEF,aAAe5jL,KAAK8M,MAAMkpB,MAAQwjE,OAAOv5D,KAAOu5D,OAAOt5D,MAAQ4jJ,cAE9DF,aAAgC5tJ,MAAlB6tJ,cAAyB5tJ,SAGxCD,MAAO4tJ,aACP3tJ,OAAQ4tJ,eA0FcF,CAAiBxnL,OAEhCA,KAAK4zG,2EAYG/5E,MAAOC,QACtB95B,KAAK+xG,WAAWl4E,OAChB75B,KAAKgyG,YAAYl4E,QAFa,IAAA0tE,aAM1BxnG,KAAK4M,SAFLywF,OAJ0BmK,aAI1BnK,OACA4U,SAL0BzK,aAK1ByK,SAUJ,OAPIp4E,OAASC,QACT95B,KAAKyjB,SAASmmI,kBAAkB/vH,MAAOC,OAAQujE,OAAQ4U,UACvDjyG,KAAKyjB,SAASmwF,aAAa,OAE3B5zG,KAAKyjB,SAASqwI,oBAElB9zJ,KAAK4zG,aAAa,MACX5zG,2CAUuB+xB,OAC9B,IAAKA,MACD,OAAO/xB,KAEX,IAAMkwD,KAAOlwD,KAAKyjB,SACZuuF,YAAchyG,KAAKgyG,cACnBD,WAAa/xG,KAAK+xG,aAEpB1U,OACAr9F,KAAK4M,SADLywF,OAGA38D,IAIA28D,OAJA38D,IACAovB,OAGAutC,OAHAvtC,OACAhsB,KAEAu5D,OAFAv5D,KACAC,MACAs5D,OADAt5D,MAdiC8jJ,cAmBjC33H,KAAKtjD,SAFLmwF,KAjBiC8qF,cAiBjC9qF,KACA6G,YAlBiCikF,cAkBjCjkF,YAEEkkF,WAAa9gG,YAAYF,6BAAc/0D,OAAQ,OAAQ/xB,MAA/B,GAAAqb,OAAyCmqK,4CAAzC,KAAAnqK,OL5Jb,cK6JXy1C,UAAYk2B,YAAY8gG,WAAY,OAAQ,GAArB,GAAAzsK,OAA4BmqK,4CAA5B,oBAkB7B,OAjBA10H,UAAUmrB,QAAV,GAAA5gE,OAAqBmqK,4CAArB,oBAAAnqK,OAAmDuoF,cAAe,GAElE5jG,KAAK+xB,MAAMA,OACNggF,YACDjhD,UAAUO,KLhLD,QKgLT,GAAAh2C,OAAyB,EAAzB,OAEC22F,aACDlhD,UAAUO,KLpLA,SKoLV,GAAAh2C,OAA0B,EAA1B,OAEJysK,WAAW/vJ,MLrLE,QKqLb,GAAA1c,OAA2B0hF,KAAOl5F,KAAK8M,MAAMohG,YAAc,EAA3D,OACiBh6E,MLvLH,SKsLd,GAAA1c,OACkC0hF,KAAOl5F,KAAK8M,MAAMqhG,aAAe,EADnE,OAEiBj6E,MAAM,aAAc2I,KACpB3I,MAAM,gBAAiB+3B,QACvB/3B,MAAM,cAAe+L,MACrB/L,MAAM,eAAgBgM,OAEvCmsB,KAAKn+B,MAAM++B,UAAUhiC,QACdgiC,kDAYP,OAFA9wD,KAAKyjB,UAAYzjB,KAAKyjB,SAAS+hB,SAC/BxlC,KAAK+xB,SAAW/xB,KAAK+xB,QAAQyT,SACtBxlC,sCAjJP,OAAOmmL,8CAoBP,OAAOnmL,KAAKgkF,4DAwBZ,OAAOq/B,unCCqCAygC,iCAjIX,SAAAA,UAAal3I,QAAQ,IAAA6H,MAAA,+JAAAszK,CAAA/nL,KAAA8jJ,WACjBrvI,oLAAAuzK,CAAAhoL,KAAAioL,0BAAAnkC,WAAAprJ,KAAAsH,KAAM4M,SAENigE,sBAAsBq7G,kEAAAzzK,QAAMglF,qCAAM4sF,QAHjB5xK,iYAPD6xK,oSA8BhB,OAAOtmL,KAAK82B,iDAgCZ,OACIz7B,KAAMgrL,iEAYV,OAAKrmL,KAAK4zG,eAMH5zG,KAAK4zG,gBAJJ/5E,MAAO75B,KAAK65B,OAAS,EACrBC,OAAQ95B,KAAK85B,QAAU,+DAchBD,MAAOC,QAItB,OAHA95B,KAAK+xG,WAAWl4E,OAChB75B,KAAKgyG,YAAYl4E,QACjB95B,KAAK4zG,aAAa,MACX5zG,2CAWuB+xB,OAC9B,GAAIA,MAAO,KACCgG,MAAU/3B,KAAK4M,SAAfmrB,MAER/3B,KAAK+xB,MAAMA,OACX,IAAMgF,UAAY+vD,6BAAc/0D,OAC1B1K,KAAO2/D,YAAYjwD,UAAW,OAAQ/2B,KAAK82B,KACjDzP,KAAK40D,QAAL,GAAA5gE,OAAgBmqK,4CAAhB,KAAAnqK,ONnGc,eMmG+B,GAC7CgM,KAAK0Q,MAAM,QAAX,GAAA1c,OAAuBrb,KAAK+xG,aAA5B,OACA1qF,KAAK0Q,MAAM,SAAX,GAAA1c,OAAwBrb,KAAKgyG,cAA7B,OACA3qF,KAAKk1D,KAAK,IAENxkD,OACA4vD,WAAWtgE,KAAM0Q,OAEvB,OAAO/3B,6CAWT,OADAA,KAAK+xB,SAAW/xB,KAAK+xB,QAAQyT,SACtBxlC,sCAjHP,OAAOqmL,qCAgCP,OAAOrmL,KAAKgkF,4DAXZ,OAAOq/B,ooCC5Cf,IAAM8kE,aAAe,SAAfA,aAAgBztJ,SAClB,IAAMjX,OAASiX,QAAQjX,SADO2kK,oBAK1B1tJ,QAAQmsJ,aAFAwB,eAHkBD,oBAG1BtuJ,OACOwuJ,cAJmBF,oBAI1BvuJ,MAJ0Bq6E,gBAS3Bx5E,QAAQ9tB,SAFRywF,OAP2B6W,gBAO3B7W,OACA6R,SAR2BgF,gBAQ3BhF,SAGCprE,KAICu5D,OAJDv5D,KACAC,MAGCs5D,OAHDt5D,MAIEwkJ,aADDlrF,OAFD38D,IAEC28D,OADDvtC,OAEgCu4H,eAC9BG,YAAc1kJ,KAAOC,MAAQukJ,cAC7Bt2E,YAAct3E,QAAQs3E,cAAgBu2E,aACtCx2E,WAAar3E,QAAQq3E,aAAey2E,YACpC54E,aAAel1E,QAAQj/B,eAAem0G,aAO5C,OALAA,aAAax3E,SAASsC,QAAQm7H,iBAE7B3mD,UAAYx0E,QAAQusJ,UAAUr3E,aAAa50E,aAAavX,OAAQsuF,WAAYC,aAAa,IAC1F9C,UAAYx0E,QAAQusJ,UAAUr3E,aAAa50E,aAAavX,OAAQuuF,YAAaD,YAAY,IAElFr3E,SAiQI21G,oCArLX,SAAAA,SAAazjI,OAAQnR,cAAc,IAAAgZ,8JAAAg0K,CAAAzoL,KAAAqwI,WAC/B57H,iLAAAi0K,CAAA1oL,KAAA2oL,yBAAAt4C,UAAA33I,KAAAsH,KAAM4M,UAED2pG,cAAgB96G,aACrBgZ,MAAKgtJ,WAAahtJ,MAAK26E,QAAQlwD,YAClBzqB,MAAK26E,QAAQ/zF,OAASoqL,iBAAtB,GAAApqK,OAAkCmqK,4CAAlC,KAAAnqK,OAAiDoqK,iBAAjD,YAAApqK,OAAoEmqK,4CAApE,KAAAnqK,OAAmF6qK,eAAnF,UACbzxK,MAAKohJ,eAAiBptE,qCAAsB3B,6BAAc,QAASryE,MAAKgtJ,YACxEhtJ,MAAK8hG,cAAc3G,aAAax3E,SAAS3jB,MAAKohJ,gBAC9ChpF,sBAAsB+7G,gEAAAn0K,QAAMglF,qCAAMysF,iBAClC,IAAMnxG,MAAQtgE,MAAK8hG,cAAc3G,aAAaxxE,WAAW,KAT1B,OAU/B3pB,MAAKoyK,YAAahtJ,MAAOh2B,KAAK8M,MAAoB,EAAdokE,MAAMl7C,MAAY,GAAIC,OAAQj2B,KAAK8M,MAAMokE,MAAMj7C,OAAS,KAC5FquJ,aAAaS,gEAAAn0K,SAXkBA,8XARhB6xK,gSAuCf,OAAOtmL,KAAKyjB,6DAqBZ,OAAOzjB,KAAKu2G,4DAUZ,OACIl2G,KAAML,KAAKyjB,SACXpoB,KAAM6qL,0EA0BV,OAHKlmL,KAAK4zG,gBACN5zG,KAAK4zG,aA1JQ,SAAnBi1E,iBAAoBnuJ,SAAY,IAC1Bk1E,aAAiBl1E,QAAQj/B,eAAzBm0G,aAD0Bk5E,qBAK9BpuJ,QAAQmsJ,aAFAwB,eAHsBS,qBAG9BhvJ,OACOwuJ,cAJuBQ,qBAI9BjvJ,MAJ8Bs4E,iBAW/Bz3E,QAAQ9tB,SAJRywF,OAP+B8U,iBAO/B9U,OACAN,KAR+BoV,iBAQ/BpV,KACAwjE,SAT+BpuD,iBAS/BouD,SACA8B,cAV+BlwD,iBAU/BkwD,cAGAv+H,KAICu5D,OAJDv5D,KACAC,MAGCs5D,OAHDt5D,MAIGwkJ,aADFlrF,OAFD38D,IAEC28D,OADDvtC,OAEiCu4H,eAC9BG,YAAc1kJ,KAAOC,MAAQukJ,cAC7Bt2E,YAAct3E,QAAQs3E,cAAgBu2E,aACtCx2E,WAAar3E,QAAQq3E,aAAey2E,YACpC/kK,OAASiX,QAAQjX,SACjBsxD,MAAQr6C,QAAQusJ,YAChB8B,QAAU,IAAIlgL,MAAMw5J,eAAe1lH,KAAK,KAAK55C,KAAK,IAClDimL,cAAgBp5E,aAAaxxE,WAAW2qJ,SAS9C,GAPAruJ,QAAQ9tB,QAASsiG,UAAU,IACvBn6B,MAAMl7C,OAASk4E,YAAc,IAAMwuD,WACnCxrF,MAAMj7C,OAASi7C,MAAMh3C,cAAgBwiI,UAErCxuD,YAAcA,WAAah9B,MAAMl7C,QACjCk7C,MAAMl7C,MAAQmvJ,cAAcnvJ,OAE5Bk4E,YAAcA,WAAaluG,KAAK2P,IAAIw1K,cAAcnvJ,MAAOk7C,MAAMj3C,cAAe,CAC9E,IAAMmrJ,WAAar5E,aAAa50E,aAAavX,OAAQuuF,YAAag3E,cAAclvJ,QAAQ,GACxFi7C,MAAMl7C,MAAQovJ,WAAWnvJ,OACzBi7C,MAAMj7C,OAASmvJ,WAAWpvJ,MAC1Ba,QAAQ9tB,QAASsiG,UAAU,IAC3Bx0E,QAAQusJ,UAAUgC,YAGtB,OAAIlsF,MAEIljE,MAAOh2B,KAAKqnB,KAAK6pD,MAAMl7C,OAAS2uJ,YAChC1uJ,OAAQj2B,KAAKqnB,KAAK6pD,MAAMj7C,QAAUyuJ,eAGtC1uJ,MAAO,EACPC,OAAQ,GAyGc+uJ,CAAiB7oL,OAEhCA,KAAK4zG,2EAWG/5E,MAAOC,QAKtB,OAJA95B,KAAK+xG,WAAWl4E,OAChB75B,KAAKgyG,YAAYl4E,QACjBquJ,aAAanoL,MACbA,KAAK4zG,aAAa,MACX5zG,2CAWH+xB,OACJ,IAAMggF,WAAa/xG,KAAK+xG,aAClBC,YAAchyG,KAAKgyG,cAFdxK,aASPxnG,KAAK4M,SALLywF,OAJOmK,aAIPnK,OACAN,KALOyK,aAKPzK,KACAulE,cANO96D,aAMP86D,cACA4mB,UAPO1hF,aAOP0hF,UACAh6E,SARO1H,aAQP0H,SAIJ,GADAlvG,KAAK+xB,MAAMA,OACPgrE,KAAM,CACN,IAAMhmE,UAAY+vD,6BAAc/0D,OAC1B1K,KAAO2/D,YAAYjwD,UAAW,OAAQ/2B,KAAK82B,IAAzB,GAAAzb,OAAiCmqK,4CAAjC,KAAAnqK,OP3NX,cO4NP8tK,OAAS7mB,eAAiBpzD,SAAW,SAAW,MAHhDk6E,gBAOFppL,KAAKinL,YAFLptJ,MALEuvJ,gBAKFvvJ,MACAC,OANEsvJ,gBAMFtvJ,OAGQuuJ,eACRroL,KAAK6mL,aADL/sJ,OAEEuvJ,aACF3oJ,IAAK7G,MAAQwuJ,eAAiB,EAC9BiB,OAAQzvJ,MAAQ,EAAIwuJ,eACpBv4H,OAAQu4H,gBAGZtxJ,UAAUgB,MAAM,iBAAkBoxJ,QAGlC9hK,KAAK40D,QAAQj8E,KAAKyhK,YAAY,GAG9Bp6I,KAAK0Q,MAAM,aAAcmxJ,WACzB7hK,KAAK0Q,MAAM,UAAW,UACtB1Q,KAAK0Q,MAAM,YAAam3E,SAAQ,aAAA7zF,OAAgBye,OAAS,EAAzB,yBAAAze,OAC1BguK,YAAYF,QADc,sBACgB,IAChD9hK,KAAK0Q,MPjQI,QOiQSg6E,WAAU,GAAA12F,OAAM02F,WAAN,MAAuB,SAClDvF,oCAAKD,uCAAQE,qCAAMC,uCAAO5jG,QAAQ,SAACzN,MAChC07B,UAAUgB,MAAV,UAAA1c,OAA0BhgB,MAA1B,GAAAggB,OAAqCgiF,OAAOhiG,MAA5C,SAEJgsB,KAAK0Q,MAAM,aAAcmxJ,WACzB7hK,KAAK0Q,MAAM,UAAW,UAEtB/3B,KAAKu2G,cAAc3G,aAAax3E,SAASp4B,KAAK61J,gBAC9CxuI,KAAKk1D,KAAKv8E,KAAKu2G,cAAc3G,aAAa50E,aAAah7B,KAAKyjB,SAAUsuF,WAAYC,aAAa,GAAM3xG,MAEzG,OAAOL,6CAWP,OADAA,KAAK+xB,SAAW/xB,KAAK+xB,QAAQyT,SACtBxlC,sCA5JP,OAAOkmL,8CAqBP,OAAOlmL,KAAKgkF,4DAkCZ,OAAOq/B,2mCC9Kf,0BAwMek/B,gCAnLX,SAAAA,SAAa31I,QAAQ,IAAA6H,MAAA,8JAAA80K,CAAAvpL,KAAAuiJ,WACjB9tI,iLAAA+0K,CAAAxpL,KAAAypL,yBAAAlnC,UAAA7pJ,KAAAsH,KAAM4M,UAED88K,MAAQ,KACbj1K,MAAKs2F,QAAU,KACft2F,MAAKo2I,SACLp2I,MAAKk1K,cACLl1K,MAAKm1K,kBACLn1K,MAAKszD,QAAU,KACftzD,MAAKo1K,WAAa,KAClBp1K,MAAKq1K,SAAW,KAEhBj9G,sBAAsBk9G,gEAAAt1K,QAAMglF,qCAAM2sF,OAZjB3xK,8XAPF6xK,gSAuCf,OAAOtmL,KAAKyjB,uDAsBZ,OACIpoB,KAAM+qL,KACN3uK,KAAMzX,KAAKyjB,SAASmI,YACpBo7J,QAAShnL,KAAKgnL,6DAqBP,IAAAryK,OAAA3U,KACLyX,KAAOzX,KAAKyjB,SAMlB,OALAhM,KAAKuyK,aACJjE,UAAWD,0BAAWH,qBAAME,iBAAQG,2BAAQN,qBAAMC,qBAAMC,0BAAiBK,eAAen9K,QAAQ,SAACypB,MAC9F5d,OAAK4d,SAAW9a,KAAK8a,MAAM5d,OAAK4d,WAEpC9a,KAAKwyK,cACEjqL,+DAUP,IAAMgnL,QAAUhnL,KAAKgnL,UAEjBkD,cAAiBrwJ,MAAO,EAAGC,OAAQ,GAIvC,OAHIktJ,UACAkD,aAAelD,QAAQx5B,mBAEpB08B,uEAaP,OAHKlqL,KAAK4zG,gBACN5zG,KAAK4zG,aArIQ,SAAnBu2E,iBAAoBzvJ,SACtB,IAAM9tB,OAAS8tB,QAAQjX,SAAS7W,SACxBitB,MAAkBjtB,OAAlBitB,MAAOC,OAAWltB,OAAXktB,OACf,OACID,MAAOh2B,KAAKqnB,KAAK2O,OACjBC,OAAQj2B,KAAKqnB,KAAK4O,OAASY,QAAQ0vJ,kBAAkBtwJ,SAgI/BqwJ,CAAiBnqL,OAEhCA,KAAK4zG,2EAYG/5E,MAAOC,QACtB,IAAMriB,KAAOzX,KAAKyjB,SAQlB,OANAzjB,KAAK+xG,WAAWl4E,OAChB75B,KAAKgyG,YAAYl4E,QACjBriB,KAAKuyK,YACLvyK,KAAKoiB,MAAMA,OAAOC,OAAOA,OAAS95B,KAAKoqL,kBAAkBtwJ,QACzDriB,KAAKwyK,cACLjqL,KAAK4zG,aAAa,MACX5zG,2CAUH+xB,OACJ,GAAIA,MAAO,CACP/xB,KAAK+xB,MAAMA,OACX,IAAMigF,YAAchyG,KAAKgyG,cACnBD,WAAa/xG,KAAK+xG,aAClBi1E,QAAUhnL,KAAKgnL,UACfc,WAAa9gG,YAAYF,6BAAc/0D,OAAQ,OAAQ,GAA/B,GAAA1W,OAAsCmqK,4CAAtC,KAAAnqK,ORhKjB,cQkKb,GAAI2rK,QAAS,CACT,IAAMqD,WAAarjG,YAAY8gG,WAAY,OAAQd,SAArB,GAAA3rK,OAAkCmqK,4CAAlC,kBAA8D12J,OAC5Fk4J,QAAQ5jF,OAAOinF,YAEnB,IAAMv5H,UAAYk2B,YAAY8gG,WAAY,OAAQ,GAArB,GAAAzsK,OAA4BmqK,4CAA5B,UAC7BsC,WAAW/vJ,MRtLF,QQsLT,GAAA1c,OAA2B02F,WAA3B,OAA2Ch6E,MRvLjC,SQuLV,GAAA1c,OAA4D22F,YAA5D,OACAlhD,UAAU/4B,MRvLD,QQuLT,GAAA1c,OAA0B02F,WAA1B,OACiBh6E,MRzLP,SQwLV,GAAA1c,OACkC22F,YAAchyG,KAAKoqL,kBAAkBtwJ,OADvE,OAEA95B,KAAKyjB,SAASsO,MAAM++B,UAAUhiC,QAElC,OAAO9uB,6CAYP,OAFAA,KAAK+xB,SAAW/xB,KAAK+xB,QAAQyT,SAC7BxlC,KAAKyjB,SAAS+hB,SACPxlC,sCAzJP,OAAOomL,oCAqBP,OAAOpmL,KAAKyjB,SAASqT,6DA0BrB,OAAOusF,8NCzGR,IAAMinE,sBAAoBC,4BAAAC,yBCRN,aDSElE,aADIiE,4BAAAC,sBCPR,WDSEn6C,eAFMk6C,4BAAAC,sBCNR,WDSE3mC,WAHM0mC,4BAAAC,sBCJR,WDQEjoC,WAJMgoC,4BAAAC,sBCLP,YDUE1mC,YALK0mC,uBEYlBn7B,cAZM,SAAfA,eACF,IAAM3sB,IAAM4nD,qBACZ,OACI74K,IAAK,SAAAA,IAAC3X,IAAK0jB,KAIP,OAHI1jB,OAAO4oI,MACPA,IAAI5oI,KAAO0jB,KAER6xI,cAEXj2J,IAAK,SAAAA,MAAA,OAAMspI,OCPb+nD,wCAA8B,SAA9BA,4BAA+BC,YACjC,MAA0B,mBAAfA,YAA8BA,WAAW7xK,UnVwyCrC,SAAb8xK,WAAcxgL,KAChB,IAAMygL,aACFC,IAAK,QACLC,IAAK,OACLC,IAAK,OACLC,IAAK,SACLC,IAAK,SACLC,IAAK,UAGT,MAAO,GAAA7vK,OAAIlR,KAAO7J,QADE,YACmB,SAAA+H,OAAK,OAAIuiL,YAAYviL,SmV/yCrDsiL,CAAWD,cAFPA,cAuDTS,cAAgB,SAAhBA,cAAiBv+K,OAAQvR,KAAMu0G,aAAcw7E,UAC/C,OAAKx+K,OA1Ca,SAAhBujI,cAAiBvjI,OAAQy+K,SAAUz7E,aAAcw7E,UACnD,IAAI/tF,UAEAC,QAGA1wF,OAHA0wF,QACA3C,YAEA/tF,OAFA+tF,YACA4lE,SACA3zJ,OADA2zJ,SAEE5/F,KAAOyqH,UAAY,IAAI/6C,eAErBh1I,KAAmB,UAAbgwL,SAAuB,SAAW,OACxCnsJ,UAAS,GAAA7jB,OAAKs/E,YAAL,KAAAt/E,OAAoBgwK,SAApB,WAETz7E,4BAENhjG,QAAS2zJ,oBAAYsmB,YAAahtJ,MAAO,EAAGC,OAAQ,IAYtD,OAVA6mC,KAAKl9C,OAAO65E,SACZ38B,KAAK2qH,cAAiBxxJ,OAAQ,EAAGD,MAAO,GAGpCwjE,OADAzwF,OAAO6zB,WAAa+rE,mBACT9rE,IAAK,EAAGovB,OAAQljD,OAAOg0B,UAEvBF,IAAK9zB,OAAOg0B,QAASkvB,OAAQ,GAE5C6Q,KAAK/zD,QAASywF,iBAGVvjE,OAAQ6mC,KAAK6sF,kBAAkB1zH,OAC/B6mC,WAgBGwvE,CACHvjI,OACAvR,KACAu0G,aACAw7E,UANkB,ICrBbG,+BAAoB,SAApBA,kBAAqBC,aAAczsB,OAAQ7gE,YAAautF,aACjE,IAAMC,WAEF5xJ,OAGAokE,YAHApkE,OACAD,MAEAqkE,YAFArkE,MACA8xJ,aACAztF,YADAytF,aAGAlrJ,SAEA+qJ,aAFA/qJ,SACA6G,MACAkkJ,aADAlkJ,MAGEskJ,WA9CmB,SAAhBC,cAAiB9sB,QAC1B,IAAI+sB,UACEC,WACAt1F,KAAOsoE,OAAOxO,iBAmBpB,OAjBAt3J,OAAOub,QAAQiiF,MAAM3tF,QAAQ,SAACwgI,UAC1B,IAAMviG,MAAQuiG,SAAS,GAAG,GACpBorB,UAAYprB,SAAS,GACrB0iD,WAAajtB,OAAOrK,aAE1B,GAAIs3B,WAAW1gL,OAASy7B,MAAO,KAAAklJ,cAIvBllJ,MAAMn6B,SAFNvR,KAFuB4wL,cAEvB5wL,KACAipC,KAHuB2nJ,cAGvB3nJ,KAGE4nJ,WAA6B,kBAAT5nJ,MAAqBA,KAC/CwnJ,UAAY1uB,gBAAe,GAAA/hJ,OAAIhgB,KAAJ,KAAAggB,OAAY6wK,WAAZ,KAAA7wK,OAA0Bq5I,YACrDq3B,QAAQ7lL,MAAO6gC,YAAOg4H,cAAQjsJ,UAAWk5K,WAAW1gL,MAAOwgL,oBAAWp3B,yBAIvEq3B,QAwBYF,CAAc9sB,QACzByD,cAAkBzD,OAAOnyJ,SAAzB41J,cAEFrgK,OAAS2xE,eAAe0uF,eAkD9B,OAjDAopB,WAAW9iL,QAAQ,SAACqjL,SAAUlqL,OAC1B,IAAIkgK,UAEEiqB,kBAEEN,UAIAK,SAJAL,UACA/kJ,MAGAolJ,SAHAplJ,MACAj0B,UAEAq5K,SAFAr5K,UACA4hJ,UACAy3B,SADAz3B,UAEF9nJ,OAAS4+K,aAAa92B,eACtBX,MAAQnnJ,OAAOmnJ,UACrBA,MAAM1zJ,KAAO0zJ,MAAM1zJ,MAAQyS,UACvBlG,OAAOmwF,OACPnwF,OAAO6zB,SAAWA,SAClB7zB,OAAO06B,MAAQA,MAGX66H,OADAspB,YAAYxpL,OACHwpL,YAAYxpL,OAAOkgK,OAEnB2pB,UAAUjyL,QACf+1G,aAAcmvD,OAAOxoD,cAAcj+E,WACnConC,OACImkF,mBAAUxT,0BAItB+7C,eAAelxJ,U1DzBH,a0DyBeoM,MAAsBxN,OAAS6xJ,aAAyB,GAAT7xJ,OAC1EsyJ,eAAenxJ,S1DzBD,e0DyBYqM,MAAuBzN,MAAgB,GAARA,MACzDuyJ,eAAevyJ,MAAQh2B,KAAK2P,IAAI44K,eAAenxJ,SAAUruB,OAAOitB,OAChEuyJ,eAAetyJ,OAASj2B,KAAK2P,IAAI44K,eAAelxJ,UAAWtuB,OAAOktB,SAEjEkjI,QAASC,OAAQC,QAAQp0J,QAAQ,SAACrO,GAC/B2xL,eAAe3xL,GAAKmS,OAAOnS,KAG/B0nK,OAAOp7H,MAAMA,OACI2yD,YAAYv3F,QACZ4xJ,MAAMA,OACNjhJ,UAAUA,WACVlG,OAAOA,QACPmiJ,SAASgQ,OAAO31E,cAAc41E,YAAYqtB,iBAAiB7/J,SAAS1Z,aACpEorF,YAAYkuF,gBACZ76B,YAAYwN,OAAOruC,SACnB47D,oBAEjBZ,QAAQxlL,MAAO64J,cAAQoD,cAAQzN,yBAGhCg3B,o0CC9GUa,ixBAAsBrrB,0VACpB,IAAAsrB,eACWxsL,KAAKylG,WAC/B,OAAS5rE,MAFM2yJ,eACP3yJ,MACQC,OAFD0yJ,eACA1yJ,kEAIDiyC,MACd/rE,KAAKylG,UAAW/kE,IAAKqrC,KAAKvoE,EAAGsgC,KAAMioC,KAAK5vC,IACxCn8B,KAAK2hK,eACD9nI,MAAOkyC,KAAKlyC,MACZC,OAAQiyC,KAAKjyC,QAEjB95B,KAAK4hK,SAAS71F,KAAK61F,4DAInB,OAAO5hK,KAAKylG,iEAIZ,MAAMx2F,MAAM,2EAIZ,MAAMA,MAAM,+zCCtBCw9K,yDACjB,SAAAA,gBAAa/rK,QAAQ,IAAAjM,MAAA,oKAAAi4K,CAAA1sL,KAAAysL,kBACjBh4K,MAAAk4K,0CAAA3sL,KAAA4sL,+BAAAH,iBAAA/zL,KAAAsH,KAAM0gB,OAAO5nB,KAAM4nB,OAAOmhJ,UAAUrU,kBAAmB,KAClDq/B,UAAUnsK,QAFEjM,iZADoB83K,mUAM3Bx1J,WACV,IAAMskJ,aAAer7K,KAAK0gB,OAAO9T,OACjCmqB,UAAY+vD,6BAAc/vD,WAFL,IAGbuQ,MAAU+zI,aAAV/zI,MACFomC,IAAM32C,UACTg6B,UADS,IAAA11C,OACKggK,aAAa1gF,YADlB,qBAET5vF,MAAM/K,KAAKlH,OACd40E,IAAIxc,OAAO1rB,SACX,IAEMsnJ,KAFWp/G,IAAItc,QAAQl+B,OAAO,OAEdrpB,MAAM6jE,KAC5Bo/G,KAAK7wG,QAAL,GAAA5gE,OAAgBggK,aAAa1gF,YAA7B,qBAA4D,GAXvC,IAAA6xF,eAYKxsL,KAAKylG,WAAvB3rE,OAZa0yJ,eAYb1yJ,OAAQD,MAZK2yJ,eAYL3yJ,MAChB75B,KAAK6hK,UAAUjY,kBAAkB/vH,MAAOC,QAExC95B,KAAK6hK,WAAa7hK,KAAK6hK,UAAUz+D,OAAO0pF,KAAKh+J,QAE7Cg+J,KAAK/7H,UAAU,OAAOkrB,QAAtB,GAAA5gE,OAAiCggK,aAAa1gF,YAA9C,mBAA2E,GAC3EmyF,KAAK/0J,MAAM,QAAX,GAAA1c,OAAuB,IAAvB,MAEIggK,cAAgBr7K,KAAK6hK,WACrBirB,KAAK/0J,MAAM,QAAS00E,oBACH10E,MAAM,aAAcuP,yCAKvCvQ,WACF/2B,KAAK+sL,aAAah2J,WAAaT,SAASgB,eAAet3B,KAAK4hK,iEAGjDlhJ,QAGX,OAFA1gB,KAAKlH,KAAK4nB,OAAO5nB,MACjBkH,KAAKylG,SAAS/kF,OAAOmhJ,UAAUrU,mBACxBxtJ,iDAGA0gB,QACP1gB,KAAK6hK,UAAYnhJ,OAAOmhJ,UACxB7hK,KAAK0gB,OAASA,OACd1gB,KAAK07C,OAAOh7B,OAAO9T,OAAO8uC,QAC1B17C,KAAKygC,SAAS/f,OAAO9T,OAAO6zB,UAC5BzgC,KAAKk/B,UAAUxe,OAAO9T,OAAOsyB,WAC7Bl/B,KAAKssK,UAAU5rJ,OAAO9T,OAAO0/J,WAC7BtsK,KAAKysK,UAAU/rJ,OAAO9T,OAAO6/J,qEAGf1gG,MACd/rE,KAAKylG,UAAW/kE,IAAKqrC,KAAKvoE,EACtBsgC,KAAMioC,KAAK5vC,EACXtC,MAAOkyC,KAAKlyC,MACZC,OAAQiyC,KAAKjyC,SACjB95B,KAAK4hK,SAAS71F,KAAK61F,0yCCtCNorB,yDACjB,SAAAA,gBAAatsK,QAAQ,IAAAjM,MAAA,oKAAAw4K,CAAAjtL,KAAAgtL,kBACjBv4K,MAAAy4K,0CAAAltL,KAAAmtL,+BAAAH,iBAAAt0L,KAAAsH,KAAM0gB,OAAO5nB,KAAM4nB,OAAO9T,OAAOsxF,YAAYkvF,YAAa,KACrDP,UAAUnsK,QAFEjM,iZADoB83K,mUAM3Bx1J,WACVA,UAAY+vD,6BAAc/vD,WAC1B,IAAMs2J,qBAFeC,oBAGattL,KAAK0gB,OAAO9T,OAAtC6zB,SAHa6sJ,oBAGb7sJ,SAAUk6D,YAHG2yF,oBAGH3yF,YACZ4yF,YAAcvmG,YAAYjwD,UAAW,OAAQ/2B,KAAKk/I,YAAzB,GAAA7jI,OACIs/E,YADJ,qBACqC,SAAA9hG,GAAC,OAAIA,IACzE00L,YAAYtxG,QAAZ,GAAA5gE,OAAuBs/E,YAAvB,YAA6C,GAC7C,IAAMrzD,MAAS7G,WAAagsE,oBAAQhsE,WAAaisE,oB7D4BjC,WACE,a6D5BZ8gF,SAAWxtL,KAAK2hK,cAAc9nI,MAC9B4zJ,UAAYztL,KAAK2hK,cAAc7nI,OAQrC,IANC/C,UAAWw2J,aAAazkL,QAAQ,SAACue,MAC9BA,KAAK0Q,MAAM,QAAX,GAAA1c,OAAuBxX,KAAK8M,MAAM68K,UAAlC,OACiBz1J,MAAM,SADvB,GAAA1c,OACoCoyK,UADpC,OAEiB11J,MAAM,QAAS00E,sB7DqBpB,a6DlBZnlE,MAAoB,CACpB,IAAIomJ,UAAY,EACZC,WAAaF,UACbG,UAAY,EAEhB5tL,KAAKk/I,WAAWp2I,QAAQ,SAAC8iL,YACrB,IAAMiC,IAAMjC,WAAWzpB,OACnB0rB,IAAI3vF,cAAcpkE,OAAS6zJ,YAC3BD,WACAE,UAAY,EACZD,WAAaF,WAEbC,SAAW,GAAKA,WAEpBL,kBAAkBK,UAAYL,kBAAkBK,cAChDC,YAAc9pL,KAAK2P,IAAIq6K,IAAI3vF,cAAcpkE,OAAQ6zJ,YACjDC,UAAY/pL,KAAK6P,IAAI7P,KAAK2P,IAAIq6K,IAAI3vF,cAAcrkE,MAAOg0J,IAAI3vF,cAAcjjE,UAAW2yJ,WACpFP,kBAAkBK,UAAUxnL,MACxBi8J,OAAQ0rB,IACRC,aAAcL,UACdM,YAAaH,cAIrB,IAAM77J,MAAQi1D,YAAYumG,aAAc,OAAQF,kBAAvB,GAAAhyK,OAA6Cs/E,YAA7C,oBAEzB5oE,MAAMkqD,QAAN,GAAA5gE,OAAiBs/E,YAAjB,6BAAwD,GACvC5iE,MAAM,QAAS,SAAAl/B,GAAC,SAAAwiB,OAAOxiB,EAAE,GAAGk1L,YAAZ,QACjC/mG,YAAYj1D,OAAQ,OAAQ,SAAAl5B,GAAC,OAAIA,GAAtB,GAAAwiB,OAA4Bs/E,YAA5B,yBAAiE,SAAA9hG,GAAC,OAAIA,EAAEspK,OAAOrrI,OACzEyO,KAAK,SAAU1sC,GACZA,EAAEspK,OAAOpwI,MAAM/xB,QAElB+3B,MAAM,QAAS,SAAAl/B,GAAC,SAAAwiB,OAAOxiB,EAAEk1L,YAAT,YAC9B,CACH,IAAMh8J,OAAQi1D,YAAYumG,YAAa,OAAQ,GAAtB,GAAAlyK,OAA6Bs/E,YAA7B,oBACzB5oE,OAAMkqD,QAAN,GAAA5gE,OAAiBs/E,YAAjB,+BAA0D,GAC1D5oE,OAAMkqD,QAAN,GAAA5gE,OAAiBs/E,YAAjB,mBAA+C,IAAK,GACnC5iE,MAAM,QADvB,GAAA1c,OACmCmyK,SADnC,OAGAxmG,YAAYj1D,OAAO,MAAO/xB,KAAKk/I,WAApB,GAAA7jI,OAAmCs/E,YAAnC,yBAAwE,SAAA9hG,GAAC,OAAIA,EAAEspK,OAAOrrI,OAChFyO,KAAK,SAAU1sC,GAAKA,EAAEspK,OAAOpwI,MAAM/xB,QACnC+3B,MAAM,QAAS,SAAAl/B,GAAC,SAAAwiB,OAAOxiB,EAAEspK,OAAOjkE,cAAcrkE,MAA9B,2CAInC9C,WACF/2B,KAAKguL,aAAaj3J,WAAaT,SAASgB,eAAet3B,KAAK4hK,iEAGjDlhJ,QAIX,OAHA1gB,KAAKlH,KAAK4nB,OAAO5nB,MACjBkH,KAAKylG,SAAS/kF,OAAO9T,OAAOsxF,YAAYkvF,aACxCptL,KAAK6sL,UAAUnsK,QACR1gB,iDAGA0gB,QACP1gB,KAAKk/I,WAAax+H,OAAOmhJ,UACzB7hK,KAAK0gB,OAASA,OACd1gB,KAAK07C,OAAOh7B,OAAO9T,OAAO8uC,QAC1B17C,KAAKygC,SAAS/f,OAAO9T,OAAO6zB,UAJb,IAAAwtJ,sBAhGvB,SAASC,uBAAwBztJ,UAC7B,IAAIgsI,UAAY,KACVH,UAAS,GAAAjxJ,OAAMg3J,iBAAiB,GAAvB,KAAAh3J,OAA6Bk3J,oBAAoB,IAChE,OAAQ9xI,UACR,KAAK+rE,kBACL,KAAKD,qBACDkgE,UAAYlP,kBACZ,MACJ,KAAK9wD,mBACL,KAAKC,oBACD+/D,UAAYjP,gBACZ,MACJ,QACIiP,UAAYjP,gBAEhB,OAASiP,oBAAWH,qBAsFiB4hB,CAAuBxtK,OAAO9T,OAAO6zB,UAA9D6rI,UALO2hB,sBAKP3hB,UAAWG,UALJwhB,sBAKIxhB,UACnBzsK,KAAKk/B,UAAUxe,OAAO9T,OAAOsyB,WAC7Bl/B,KAAKssK,UAAU5rJ,OAAO9T,OAAO0/J,WAAaA,WAC1CtsK,KAAKysK,UAAU/rJ,OAAO9T,OAAO6/J,WAAaA,kCCpG5Cr0E,uCAAS7P,4BAET4lG,cACFrqJ,K9DEiB,Q8DDjBC,M9DCiB,Q8DAjBrD,I9DCkB,S8DAlBovB,O9DAkB,U8DGTs+H,iBAAmB,SAAnBA,iBAAoBla,aAAcma,YAAaC,YACxD,IAAIC,WAAa,EAIjB,OAHiBra,aAAayE,SAAWzE,aAAayE,QAAQj3K,OAC1DwyK,aAAayE,QAAUzE,aAAa0E,WAExB3wK,IAAI,SAACxN,GACjB,IAAM+zL,aAA4B,IAAbD,YAAoBF,YAAcC,YAEvD,OADAC,YAAc9zL,EACP+zL,gBAIFC,4BAAuB,SAAvBA,qBAAwB18J,MAAO12B,KAAMuR,QAAW,IAErD+tF,YAEA/tF,OAFA+tF,YACAsnE,UACAr1J,OADAq1J,UAEEnkE,MAAQ9W,YAAYj1D,MAAO,OAAQ12B,MAAhB,GAAAggB,OAA0Bs/E,YAA1B,kBAAAt/E,OAAsDhgB,OAS/E,OAPAyiG,MAAM7hB,QAAN,GAAA5gE,OAAiBs/E,YAAjB,kBAA6C,GAC7CmD,MAAM/lE,MAAMo2J,aAAa9yL,MAAzB,GAAAggB,OAAmC4mJ,UAAnC,OAEgBj7E,YAAY8W,MAAO,OAAQ,GAAhB,GAAAziF,OAAuBs/E,YAAvB,0BAEnBtpC,KAAK,KAAb,GAAAh2C,OAAsBs/E,YAAtB,0BAAAt/E,OAA0DhgB,OAEnDyiG,OAGE4wF,2BAAsB,SAAtBA,oBAAuB38J,MAAOnlB,QAAW,IAE9C+tF,YACA/tF,OADA+tF,YAEEzmC,KAAO8yB,YAAYj1D,MAAO,OAAQ,GAAhB,GAAA1W,OAAuBs/E,YAAvB,iBAGxB,OAASzmC,UAAMy6H,MAFD3nG,YAAY9yB,KAAM,OAAQ,GAAf,GAAA74C,OAAsBs/E,YAAtB,oBAyDvBi0F,2BAA6B,SAA7BA,2BAA8BC,UAAWC,YAAa5sB,OAAU,IAE9DysB,MAEAE,UAFAF,MACAz6H,KACA26H,UADA36H,KAH8D66H,sBAKjDJ,MAAM7/J,OAAO8uD,wBAAtBzhD,EAL0D4yJ,sBAK1D5yJ,EAAG34B,EALuDurL,sBAKvDvrL,EALuDwrL,sBAMnC96H,KAAKplC,OAAO8uD,wBAAhCqxG,MANuDD,sBAM1D7yJ,EAAa+yJ,MAN6CF,sBAMhDxrL,EAElBsrL,YAAYK,qBAAsBhzJ,EAAGA,EAAI8yJ,MAAQ/sB,MAAO1+J,EAAGA,EAAI0rL,MAAQhtB,SAGrEktB,+BAA0B,SAA1BA,wBAA2BN,YAAaD,UAAWQ,UAAWntB,OAChE,IAAIlgF,MAAQ,GACN8b,MAAQgxF,YAAYQ,YAAYD,WAChCE,cAAgBtmG,WAEtB6U,MAAMpyB,GAAG6jH,cAAgB,aAAe,YAAa,WACnClnG,0BAER1J,iBAENqD,MAAQS,YAAY,WAChBmsG,2BAA2BC,UAAWC,YAAa5sB,QACpD,OACJx2F,GAAG6jH,cAAgB,WAAa,UAAW,WAC5BlnG,0BAER1J,iBAEN6D,cAAcR,SACftW,GAAG,QAAS,WACXkjH,2BAA2BC,UAAWC,YAAa5sB,UAI9CrzF,0CAAoB,SAApBA,kBAAqBigH,aAAgB,IAE1CD,UACAC,YAAYQ,YADZT,UAGE3sB,MAAQ4sB,YAAYliL,SAASs1J,MAEnCktB,+BAAwBN,YAAaD,UAAW,aAAc3sB,OAnF3C,SAAjBstB,eAAkBV,YAAaD,WACjC,IAAI13F,YACAs4F,cAAgB,EAChBr4F,UAEAu3F,MAEAE,UAFAF,MAGEe,aADFb,UADA36H,KAEsBplC,OAAO8uD,wBAEjC+wG,MAAMj2L,KAAK0/F,gBACM1sB,GAAG,QAAS,WACT,IAAMmM,MAAQwQ,0BAEdonG,cAAgBd,MAAM7/J,OAAO8uD,wBAC7BuZ,UACIh7D,EAAG07C,MAAM17C,EACT34B,EAAGq0E,MAAMr0E,KAGhBkoE,GAAG,OAAQ,WACR,IAAMmM,MAAQwQ,0BACRlwF,OAASgyE,YAMTwlH,iBAJNv4F,QACIj7D,EAAG07C,MAAM17C,EACT34B,EAAGq0E,MAAMr0E,IAGC24B,EAAIg7D,SAASh7D,EADrBwzJ,gBAECv4F,OAAO5zF,EAAI2zF,SAAS3zF,EAErBosL,gBACFzzJ,EAAGszJ,cAActzJ,EAAIwzJ,gBAAkBD,aAAavzJ,EAAIhkC,OAAO03L,YAC/DrsL,EAAGisL,cAAcjsL,EAAImsL,gBAAkBD,aAAalsL,EAAIrL,OAAO23L,aAGnEhB,YAAYK,oBAAoBS,mBA+CpDJ,CAAeV,YAAaD,WA/FF,SAAjBkB,eAAkBjB,YAAaD,WAGpCA,UADA36H,KAGCwX,GAAG,QAAS,WACb,IAAMmM,MAAQwQ,0BACdymG,YAAYkB,qBAAqBn4G,SAyFrCk4G,CAAejB,YAAaD,WAC5BO,+BAAwBN,YAAaD,UAAW,YAAa3sB,QC1JpDzoE,8BAET7sF,QACI4/D,aAAc,SAAAA,aAAC9xC,QAASlhC,OAEpB,OADAA,MAAQ+zE,eAAe7yC,QAAQ00D,QAAS51F,SAIhDy2L,WACAC,iBACAt8E,iTCLG,IAAMu8E,yBAAb,WAEI,SAAAA,yKAAeC,CAAApwL,KAAAmwL,aACXnwL,KAAKsvL,eACLtvL,KAAKy0K,iBACLz0K,KAAKqwL,sBAAwB,aAC7BrwL,KAAKovF,SACD6yE,UAAW,GACXC,MAAO,GAEXliK,KAAKswL,eAAiB,KAEtBzjH,sBAAsB7sE,KAAMy5F,8BAZpC,gPAAA82F,CAAAJ,cAAAr2L,IAAA,uBAAAN,MAAA,SAAAw2L,uBAoBQ,MAAM,IAAI3iH,UAAU,6BApB5BvzE,IAAA,sBAAAN,MAAA,SAAA21L,sBAwBQ,MAAM,IAAI9hH,UAAU,6BAxB5BvzE,IAAA,WAAAN,MAAA,SAAAg3L,WA4BQ,MAAM,IAAInjH,UAAU,6BA5B5BvzE,IAAA,gBAAAN,MAAA,SAAAi3L,gBAgCQ,MAAM,IAAIpjH,UAAU,6BAhC5BvzE,IAAA,eAAAN,MAAA,SAAAk3L,aAmCkBp8J,YAGV,OACIq8J,mBFiHyB,SAAxBC,sBAAyBt8J,WAAY1nB,OAAQmb,WAAY1sB,MAAS,IAEvEs/F,YACA/tF,OADA+tF,YAEEg2F,mBAAqB3pG,YAAYF,6BAAcxyD,YAAa,OAAQ,GAApC,IAAAjZ,OAA4Cs/E,YAA5C,gBAAAt/E,OAAsEhgB,OAK5G,OAHAs1L,mBAAmB10G,QAAnB,GAAA5gE,OAA8Bs/E,YAA9B,gBAAwD,GACxDg2F,mBAAmB54J,M9DtJF,Q8DsJjB,GAAA1c,OAAmC0M,WAAW8R,MAA9C,OACA82J,mBAAmB54J,M9DtJD,S8DsJlB,GAAA1c,OAAoC0M,WAAW+R,OAA/C,OACO62J,mBE1HqBC,CAAsBt8J,WAH/Bt0B,KAAK4M,SAG8C5M,KAAK4zG,eAAgB5zG,KAAKglB,YAAY3pB,YAvChHvB,IAAA,qBAAAN,MAAA,SAAAq3L,mBA2CwBC,sBAEhB,OADA9wL,KAAKqwL,sBAAwBS,qBACtB9wL,QA7CflG,IAAA,qBAAAN,MAAA,SAAAu3L,qBAkDQ,OADA/wL,KAAKqwL,sBAAwB,aACtBrwL,QAlDflG,IAAA,kBAAAN,MAAA,SAAAg0J,kBAsDQ,OAAOxtJ,KAAK4zG,kBAtDpB95G,IAAA,oBAAAN,MAAA,SAAAq1E,oBA2DQ,OADAA,0CAAkB7uE,MACXA,QA3DflG,IAAA,SAAAN,MAAA,SAAAgsC,SAgEQ,OADAxlC,KAAKsvL,YAAYqB,mBAAmBnrJ,SAC7BxlC,UAhEflG,IAAA,OAAAN,MAAA,SAAA6B,OAgBQ,MAAM,IAAIgyE,UAAU,8BAhB5B8iH,YAAA,8hKCHA,IAAMa,gBACFv4B,WCDJ,SAAAw4B,cAAA,SAAAC,wBAAA,4KAAAC,CAAAnxL,KAAAkxL,uBAAAE,kDAAApxL,KAAAqxL,uCAAAH,uBAAA3pL,MAAAvH,KAAAoF,YAAA,0YAAAksL,CAAAJ,sBAA2Cf,oSAA3CoB,CAAAL,wBAAAp3L,IAAA,eAAAN,MAAA,SAAAk3L,aAakBp8J,YAA8C,IAAlCvM,WAAkC3iB,UAAA1D,OAAA,QAAA4L,IAAAlI,UAAA,GAAAA,UAAA,GAArBpF,KAAK4zG,eAClChnG,OAAS5M,KAAK4M,SACZ+jL,mBAFgDa,4BAAAH,uCAAAH,sBAAA72L,WAAA,eAAA2F,MAAAtH,KAAAsH,KAENs0B,WAAY1nB,OAAQmb,YAA9D4oK,mBACFc,UAAYhD,4BAAqBkC,mBAAoB,OAAQ/jL,QAC7DiiL,UAAYH,2BAAoBiC,mBAAoB/jL,QACpD8kL,UAAYjD,4BAAqBkC,mBAAoB,QAAS/jL,QAEhE+hL,MAEAE,UAFAF,MACAz6H,KACA26H,UADA36H,KARoDy9H,mBAWO3xL,KAAK4zG,eAA5D95E,OAXgD63J,mBAWhD73J,OAAQD,MAXwC83J,mBAWxC93J,MAAOw0J,YAXiCsD,mBAWjCtD,YAAaC,WAXoBqD,mBAWpBrD,WAAYlM,WAXQuP,mBAWRvP,WAC1CwP,2BAA6B/3J,MAAiB,EAATC,OAE3Co6B,KAAKn8B,MlEfQ,QkEeb,GAAA1c,OAAqB0M,WAAW8R,MAAiB,EAATC,OAAxC,OACAo6B,KAAKn8B,MlEfS,SkEed,GAAA1c,OAAsB,IAAtB,MACAszK,MAAM52J,MlEjBO,QkEiBb,GAAA1c,OAAuBizK,WAAasD,2BAA8BvD,YAAlE,OACAM,MAAM52J,MlEjBQ,SkEiBd,GAAA1c,OAAuB,IAAvB,MACAszK,MAAM52J,MAAM00E,mBAAZ,GAAApxF,OAAqB,EAArB,OAEArb,KAAKsvL,aACDmC,oBACAC,oBACA7C,oBACA8B,uCAEJ3wL,KAAK6xL,4BAA8BD,2BACnC5xL,KAAKkwL,cAAc9B,iBAAiBhM,WAAYiM,YAAaC,aAC7DtuL,KAAK6uE,uBAzCb/0E,IAAA,uBAAAN,MAAA,SAAAw2L,qBA4C0Bn4G,OAAO,IAAAi6G,sBAIrB9xL,KAAKsvL,YAAYT,UAFjBF,MAFqBmD,sBAErBnD,MACAz6H,KAHqB49H,sBAGrB59H,KAEEguG,MAAQliK,KAAK4M,SAASs1J,MALH6sB,sBAMRJ,MAAM7/J,OAAO8uD,wBAAtBzhD,EANiB4yJ,sBAMjB5yJ,EAAG34B,EANcurL,sBAMdvrL,EANcwrL,sBAOM96H,KAAKplC,OAAO8uD,wBAAhCqxG,MAPcD,sBAOjB7yJ,EAAa+yJ,MAPIF,sBAOPxrL,EACduuL,iBAA2B,GAAR7vB,MACnBrqF,MAAM17C,EAAIA,IACV41J,iBAA4B,IAAR7vB,OAExBliK,KAAKmvL,qBAAsBhzJ,EAAGA,EAAI8yJ,MAAQ8C,iBAAkBvuL,EAAGA,EAAI0rL,MAAQ6C,sBAxDnFj4L,IAAA,sBAAAN,MAAA,SAAA21L,oBA2DyB6C,aACjB,IAAIC,WAD0BC,uBAK1BlyL,KAAKsvL,YAAYT,UAFjBF,MAH0BuD,uBAG1BvD,MAGEe,aANwBwC,uBAI1Bh+H,KAEsBplC,OAAO8uD,wBAC3Bu0G,SAAWxD,MAAM7/J,OAAO8uD,wBAE1BywG,YACCruL,KAAK4zG,eADNy6E,YAIA4D,WADAD,YAAY71J,EAAI,EACH,EACN61J,YAAY71J,EAAIg2J,SAASt4J,MAAQ61J,aAAa71J,MACxC61J,aAAa71J,MAAQs4J,SAASt4J,MAE9Bm4J,YAAY71J,EAG7BwyJ,MAAM52J,MAAM00E,mBAAZ,GAAApxF,OAAqB42K,WAArB,OACA,IACMG,gBAAmBH,WAAa5D,YADhBruL,KAAK6xL,4BAG3B7xL,KAAKiwL,UAAUoC,8BAA8BryL,KAAKglB,YAAY3pB,OAAQ+2L,oBAnF9Et4L,IAAA,gBAAAN,MAAA,SAAAi3L,cAsFmB6B,OAAO,IAAAC,uBAIdvyL,KAAKsvL,YAAYT,UAFjBF,MAFc4D,uBAEd5D,MACAz6H,KAHcq+H,uBAGdr+H,KAEEi+H,SAAWxD,MAAM7/J,OAAO8uD,wBACxB8xG,aAAex7H,KAAKplC,OAAO8uD,wBAGjC,OADA59E,KAAKmvL,qBAAsB3rL,EAAG,EAAG24B,EAAGg2J,SAASh2J,EAAIuzJ,aAAavzJ,EAAIm2J,QAC3DtyL,QA/FflG,IAAA,WAAAN,MAAA,SAAAg3L,SA0GcgC,kBAAkB,IAIlBL,SADFnyL,KAAKsvL,YAAYT,UADjBF,MAEmB7/J,OAAO8uD,wBACxB60G,SAAYD,kBAAoBxyL,KAAK6xL,4BAA8BM,SAASt4J,OAAU,IAG5F,OADA75B,KAAKmvL,qBAAsB3rL,EAAG,EAAG24B,EAAGs2J,WAC7BzyL,UAlHflG,IAAA,OAAAN,MAAA,SAAA6B,OAUQ,MlEoDkB,iBkE9D1B61L,sBAAA,GDEIx4B,SEFJ,SAAAu4B,cAAA,SAAAyB,sBAAA,0KAAAC,CAAA3yL,KAAA0yL,qBAAAE,gDAAA5yL,KAAA6yL,qCAAAH,qBAAAnrL,MAAAvH,KAAAoF,YAAA,sYAAA0tL,CAAAJ,oBAAyCvC,8RAAzC4C,CAAAL,sBAAA54L,IAAA,eAAAN,MAAA,SAAAk3L,aAakBp8J,YAA8C,IAAlCvM,WAAkC3iB,UAAA1D,OAAA,QAAA4L,IAAAlI,UAAA,GAAAA,UAAA,GAArBpF,KAAK4zG,eAClChnG,OAAS5M,KAAK4M,SACZ+jL,mBAFgDqC,0BAAAH,qCAAAH,oBAAAr4L,WAAA,eAAA2F,MAAAtH,KAAAsH,KAENs0B,WAAYvM,YAAtD4oK,mBACFc,UAAYhD,4BAAqBkC,mBAAoB,MAAO/jL,QAC5DiiL,UAAYH,2BAAoBiC,mBAAoB/jL,QACpD8kL,UAAYjD,4BAAqBkC,mBAAoB,SAAU/jL,QAEjE+hL,MAEAE,UAFAF,MACAz6H,KACA26H,UADA36H,KARoDy9H,mBAUQ3xL,KAAK4zG,eAA7D95E,OAVgD63J,mBAUhD73J,OAAQD,MAVwC83J,mBAUxC93J,MAAOw0J,YAViCsD,mBAUjCtD,YAAaC,WAVoBqD,mBAUpBrD,WAAYnM,YAVQwP,mBAURxP,YAC1CyP,2BAA6B93J,OAAiB,EAARD,MAE5Cq6B,KAAKn8B,MnEbS,SmEad,GAAA1c,OAAsBu2K,2BAAtB,OACA19H,KAAKn8B,MnEfQ,QmEeb,GAAA1c,OAAqB,IAArB,MACAszK,MAAM52J,MnEhBO,QmEgBb,GAAA1c,OAAsB,IAAtB,MACAszK,MAAM52J,MnEhBQ,SmEgBd,GAAA1c,OAAwBizK,WAAasD,2BAA8BvD,YAAnE,OACAM,MAAM52J,MAAMy0E,kBAAZ,GAAAnxF,OAAoB,EAApB,OAEArb,KAAKsvL,aACDmC,oBACAC,oBACA7C,oBACA8B,uCAEJ3wL,KAAK6xL,4BAA8BD,2BAEnC5xL,KAAKkwL,cAAc9B,iBAAiBjM,YAAakM,YAAaC,aAC9DtuL,KAAK6uE,uBAzCb/0E,IAAA,uBAAAN,MAAA,SAAAw2L,qBA4C0Bn4G,OAAO,IAAAi6G,sBAIrB9xL,KAAKsvL,YAAYT,UAFjBF,MAFqBmD,sBAErBnD,MACAz6H,KAHqB49H,sBAGrB59H,KAEEguG,MAAQliK,KAAK4M,SAASs1J,MALH6sB,sBAMRJ,MAAM7/J,OAAO8uD,wBAAtBzhD,EANiB4yJ,sBAMjB5yJ,EAAG34B,EANcurL,sBAMdvrL,EANcwrL,sBAOM96H,KAAKplC,OAAO8uD,wBAAhCqxG,MAPcD,sBAOjB7yJ,EAAa+yJ,MAPIF,sBAOPxrL,EAEduuL,iBAA2B,GAAR7vB,MACnBrqF,MAAMr0E,EAAIA,IACVuuL,iBAA4B,IAAR7vB,OAExBliK,KAAKmvL,qBAAsBhzJ,EAAGA,EAAI8yJ,MAAQ8C,iBAAkBvuL,EAAGA,EAAI0rL,MAAQ6C,sBAzDnFj4L,IAAA,sBAAAN,MAAA,SAAA21L,oBA4DyB6C,aACjB,IAAIC,WAD0BC,uBAK1BlyL,KAAKsvL,YAAYT,UAFjBF,MAH0BuD,uBAG1BvD,MACAz6H,KAJ0Bg+H,uBAI1Bh+H,KAGAm6H,YACCruL,KAAK4zG,eADNy6E,YAEEqB,aAAex7H,KAAKplC,OAAO8uD,wBAC3Bu0G,SAAWxD,MAAM7/J,OAAO8uD,wBAG1Bq0G,WADAD,YAAYxuL,EAAI,EACH,EACNwuL,YAAYxuL,EAAI2uL,SAASr4J,OAAS41J,aAAa51J,OACzC41J,aAAa51J,OAASq4J,SAASr4J,OAE/Bk4J,YAAYxuL,EAE7BmrL,MAAM52J,MAAMy0E,kBAAZ,GAAAnxF,OAAoB42K,WAApB,OACA,IACMG,gBAAmBH,WAAa5D,YADhBruL,KAAK6xL,4BAG3B7xL,KAAKiwL,UAAUoC,8BAA8BryL,KAAKglB,YAAY3pB,OAAQ+2L,oBAnF9Et4L,IAAA,gBAAAN,MAAA,SAAAi3L,cAgGmB6B,OAAO,IAAAC,uBAIdvyL,KAAKsvL,YAAYT,UAFjBF,MAFc4D,uBAEd5D,MACAz6H,KAHcq+H,uBAGdr+H,KAEEi+H,SAAWxD,MAAM7/J,OAAO8uD,wBACxB8xG,aAAex7H,KAAKplC,OAAO8uD,wBAGjC,OADA59E,KAAKmvL,qBAAsB3rL,EAAG2uL,SAAS3uL,EAAIksL,aAAalsL,EAAI8uL,MAAOn2J,EAAG,IAC/Dn8B,QAzGflG,IAAA,WAAAN,MAAA,SAAAg3L,SAoHcgC,kBAAkB,IAIlBL,SADFnyL,KAAKsvL,YAAYT,UADjBF,MAEmB7/J,OAAO8uD,wBACxB60G,SAAYD,kBAAoBxyL,KAAK6xL,4BAA8BM,SAASr4J,QAAW,IAG7F,OADA95B,KAAKmvL,qBAAsBhzJ,EAAG,EAAG34B,EAAGivL,WAC7BzyL,UA5HflG,IAAA,OAAAN,MAAA,SAAA6B,OAUQ,MnEmDgB,emE7DxBq3L,oBAAA,IFcqBO,yCAEjB,SAAAA,gBAAavyK,QAAQ,IAAAjM,qKAAAy+K,CAAAlzL,KAAAizL,iBACjB,IAAM9C,YAAca,eAAetwK,OAAO9T,OAAOvR,MADhC,OAGjBqlB,OAAOmhJ,UAAY,IAAIsuB,YACvBzvK,OAAOmhJ,UAAUj1J,OAAO8T,OAAO9T,OAAOumL,0BACtCzyK,OAAOmhJ,UAAUjuD,aAAalzF,OAAOqH,aACrCtT,MAAA2+K,2CAAApzL,KAAAqzL,gCAAAJ,iBAAAv6L,KAAAsH,KAAM0gB,OAAO5nB,KAAM4nB,OAAOmhJ,UAAUrU,kBAAmB,KAClDq/B,UAAUnsK,QAPEjM,mZAFoB83K,8TAarC,OAAInnL,UAAQ1D,QACR1B,KAAK6hK,UAAUouB,QAAf7qL,UAAA1D,QAAA,OAAA4L,EAAAlI,UAAA,IACOpF,MAEJA,KAAK6hK,UAAUouB,8DAaXqC,OAEX,OADAtyL,KAAK6hK,UAAU4uB,cAAc6B,OACtBtyL,+CAWDwyL,kBAEN,OADAxyL,KAAK6hK,UAAU2uB,SAASgC,kBACjBxyL,iEAcQszL,WACf,IAAMpD,cAAgBlwL,KAAK6hK,UAAUquB,gBAC/BqD,mBAAqB1vL,KAAK2P,IAAI3P,KAAK6P,IAAI,EAAG4/K,WAAYpD,cAAcxuL,OAAS,GAEnF,OADA1B,KAAK6hK,UAAU2uB,SAASN,cAAcqD,qBAC/BvzL,qFAaP,OAAOA,KAAK6hK,UAAUquB,kDAGpBn5J,WAEF,OADA/2B,KAAK6hK,UAAU6uB,aAAa35J,WAAaT,SAASgB,eAAet3B,KAAK4hK,aAC/D5hK,mEAUSwzL,gBAEhB,OADAxzL,KAAK6hK,UAAUgvB,mBAAmB2C,gBAC3BxzL,qEAWP,OADAA,KAAK6hK,UAAUkvB,qBACR/wL,yDAGI0gB,QAMX,OALA1gB,KAAKlH,KAAK4nB,OAAO5nB,MACjBkH,KAAK6hK,UAAUj1J,OAAO8T,OAAO9T,OAAOumL,0BACpCnzL,KAAK6hK,UAAUjuD,aAAalzF,OAAOqH,YACnC/nB,KAAKylG,SAASzlG,KAAK6hK,UAAUrU,mBAC7BxtJ,KAAK6sL,UAAUnsK,QACR1gB,iDAGA0gB,QACP1gB,KAAK6hK,UAAYnhJ,OAAOmhJ,WAAa7hK,KAAK6hK,UAC1C7hK,KAAK0gB,OAASA,OACd1gB,KAAK07C,OAAOh7B,OAAO9T,OAAO8uC,QAC1B17C,KAAKygC,SAAS/f,OAAO9T,OAAO6zB,UAC5BzgC,KAAKk/B,UAAUxe,OAAO9T,OAAOsyB,WAC7Bl/B,KAAKssK,UAAU5rJ,OAAO9T,OAAO0/J,WAC7BtsK,KAAKysK,UAAU/rJ,OAAO9T,OAAO6/J,mDAI7BzsK,KAAK6hK,UAAUr8H,+yCGvIvB,IAOqBiuJ,0DAEjB,SAAAA,gBAAa/yK,QAAQ,IAAAjM,MAAA,qKAAAi/K,CAAA1zL,KAAAyzL,kBACjBh/K,MAAAk/K,2CAAA3zL,KAAA4zL,gCAAAH,iBAAA/6L,KAAAsH,KAAM0gB,OAAO5nB,KAAM4nB,OAAO9T,OAAOmb,WAAY,KACxC8kK,UAAUnsK,QACfjM,MAAKyqB,UAAUxe,OAAO9T,OAAOsyB,WAHZzqB,mZAFoB83K,oUAQ5Bx1J,WACT,IAAMhc,IAAM/a,KAAK0gB,OAAO9T,OAAOmO,IACzBK,OAASpb,KAAK0gB,OAAO9T,OAAOwO,OAFdy4K,sBAGa7zL,KAAK0gB,OAAO9T,OAAO2vK,WAA5C9jB,WAHYo7B,sBAGZp7B,WAAYC,SAHAm7B,sBAGAn7B,SACpB3hI,UAAUgB,MpEyCM,WAID,WoE5CfhB,UAAUgB,MpEdG,QAyDD,QoE1CZhB,UAAUgB,MpEdI,SAwDF,QoExCR0gI,YAAyB,IAAXr9I,SACd2b,UAAUgB,MpEoCE,WADF,UoElCVhB,UAAUgB,MpEnBD,QoEmBc,SAGvB2gI,UxCwMU,WwCxME39I,MACZgc,UAAUgB,MpE+BE,WADF,UoE7BVhB,UAAUgB,MpEvBA,SoEuBc,2DAIlBzD,YAEV,IAAMqmE,YAAc36F,KAAK0gB,OAAO9T,OAAO+tF,YACjC5/E,IAAM/a,KAAK0gB,OAAO9T,OAAOmO,IACzBK,OAASpb,KAAK0gB,OAAO9T,OAAOwO,OAC5B2M,WAAa/nB,KAAK0gB,OAAO9T,OAAOmb,WAChCinI,OAAShvJ,KAAK0gB,OAAO9T,OAAOoiJ,OAG5B8kC,mBAAqB9sG,YAAY1yD,WAAY,OAAQ,GAArB,GAAAjZ,OAA4Bs/E,YAA5B,UAAAt/E,OAAgDN,IAAhD,KAAAM,OAAuDD,OAAS,IACjG6gE,QADsB,GAAA5gE,OACXs/E,YADW,UAAAt/E,OACSN,MAAO,GACtCkhE,QAFsB,GAAA5gE,OAEXs/E,YAFW,UAES,GAEpC36F,KAAK+zL,YAAYD,oBAbK,IAAAE,e1BuKvB,SAASC,cAAe15I,OAAQl/C,KAAM4G,OACzC,IAAIqiL,MAAQ,KACRJ,WAAa3pI,OAF+B25I,qBAO5CjP,oBAAmB,GAAA5pK,OAAIhgB,KAAJ,KAAAggB,OAAYpZ,QAH/B6iL,YAJ4CoP,qBAI5CpP,YACAC,gBAL4CmP,qBAK5CnP,gBACAC,UAN4CkP,qBAM5ClP,UAQJ,OALIzqI,OAAO74C,SAGP4iL,MAAQU,UADRd,WAAaa,gBAAgBxqI,OADfuqI,YAAYvqI,QACbwqI,GACLC,KAEHd,sBAAYI,a0BnKb2P,CAAcj0L,KAAK6hK,UAAW9mJ,IAAKK,QAFnC8oK,WAhBkB8P,eAgBlB9P,WACAI,MAjBkB0P,eAiBlB1P,MAII5kH,MAAU1/D,KAAKm0L,YAAYL,mBAAjB,GAAAz4K,OAAwCs/E,YAAxC,SAA4DupF,YAAtExkH,O1BgNU,SAAb00H,WAAc10H,MAAO4kH,MAAO13K,OAAQvR,MAC7C,IAAMg5L,QAAUjP,eAAe/pL,MAC3Bg5L,SACAA,QAAQ30H,MAAO4kH,MAAO13K,Q0BjNtBwnL,CAAW10H,MAAO4kH,OAASv8J,sBAAYinI,eAA7B,GAAA3zI,OAA0CN,IAA1C,KAAAM,OAAiDD,SAzDxC,SAArBk5K,mBAAsB50H,OAExBA,MAAMn6B,KAAK,SAAUo7B,MACjBA,KAAKwnF,YAAY/kD,OAAOpjG,QAuDxBs0L,CAAmB50H,OAEnBA,MAAMxO,OAAO3rB,KAAK,SAACo7B,MACfA,KAAKwnF,YAAY3iH,WAGrBs9I,2BAAapjH,MAAOsvF,OAAQj0I,IAAKK,wDAGxB2W,MAAOmN,UAAW40I,SAC3B,IAAM9xE,MAAQhb,YAAYj1D,MAAO,SAAU,UAAlB,GAAA1W,OAAgC6jB,UAAhC,WACnB2C,KAAOmlD,YAAYgb,MAAO,SAAU,UAAlB,GAAA3mF,OAAgC6jB,UAAhC,UAClB1kB,KAAOwsE,YAAYnlD,KAAM,KAAMiyI,QAAb,GAAAz4J,OAAyB6jB,UAAzB,QAIxB,OAAS8iE,YAAOngE,UAAMrnB,UAAMklD,MAHdsnB,YAAYxsE,KAAM,KAAM,SAAC3hB,EAAGN,GAAJ,OAAUM,EAAEma,OAAO,SAAAvY,GAAC,OAAU,OAANA,IAAYwN,IAAI,SAAAxN,GAAC,OAClD0tJ,YAAa1tJ,EAAG2vI,SAAU7xI,MAD9B,GAAA8iB,OACwC6jB,UADxC,UAC4D,SAAAplC,KAAG,OAAIA,IAAIquJ,YAAYrxH,wCAK1GC,WACF/2B,KAAKu0L,aAAax9J,WAAaT,SAASgB,eAAet3B,KAAK4hK,iEAGjDlhJ,QAIX,OAHA1gB,KAAKlH,KAAK4nB,OAAO5nB,MACjBkH,KAAKylG,SAAS/kF,OAAO9T,OAAOmb,YAC5B/nB,KAAK6sL,UAAUnsK,QACR1gB,iDAGA0gB,QACP1gB,KAAK6hK,UAAYnhJ,OAAOmhJ,UACxB7hK,KAAK0gB,OAASA,OACd1gB,KAAK07C,OAAOh7B,OAAO9T,OAAO8uC,QAC1B17C,KAAKygC,SxCoIM,OwCnIXzgC,KAAKk/B,UAAUxe,OAAO9T,OAAOsyB,6xCC5FrC,IAAMs1J,iCAAoB,SAApBA,kBAAqBntK,KAAMszE,YAAa85F,cAAep5L,MACzDyrF,6BAAcz/D,MACG0pC,UADjB,IAAA11C,OAC+Bs/E,YAD/B,UAEiBvgG,SAASiB,KAAMo5L,gBAwBfC,sDAEjB,SAAAA,cAAah0K,QAAQ,IAAAjM,MAAA,mKAAAkgL,CAAA30L,KAAA00L,gBACjBjgL,MAAAmgL,yCAAA50L,KAAA60L,8BAAAH,eAAAh8L,KAAAsH,KAAM0gB,OAAO5nB,KAAM4nB,OAAO9T,OAAOmb,WAAY,KACxCylJ,kBACL/4J,MAAKo4K,UAAUnsK,QAHEjM,6YAFkB83K,gUAcnC,IALA,IAAIzyJ,OAAS,EACTD,MAAQ,EAFAi7J,sBAGmC90L,KAAK6hK,UAAUiP,WAAtDC,iBAHI+jB,sBAGJ/jB,iBAAkBsQ,iBAHdyT,sBAGczT,iBACpB9E,WAAav8K,KAAK6hK,UAAU0a,aAEzBhkL,EAAI,EAAGA,EAAI,EAAGA,IAAK,CAClByH,KAAKwtK,eAAe9rK,QAAU1B,KAAKwtK,eAAej1K,aAAcsQ,QAClE7I,KAAKwtK,eAAej1K,OAExB,IAAK,IAAIsiB,EAAI,EAAGA,EAAI,EAAGA,IAAK,CACxB,IAAMk6K,WAAcj7J,OAAQunJ,iBAAiBW,WAAWzpL,GAAIshC,MAAOwnJ,iBAAiBU,UAAUlnK,IACxF0/B,OAASw2H,iBAAiB1/B,SAAjB,GAAAh2H,OAA6Bg3J,iBAAiB95K,KAAMsiB,GAC7Dm6K,WAAU,GAAA35K,OAAMg3J,iBAAiB95K,GAAvB,KAAA8iB,OAA6Bk3J,oBAAoB13J,IAC3DizI,cACF/lI,WAAYgtK,UACZ/lC,OAAQqyB,iBAAiBryB,OACzBr0D,YAAa36F,KAAK0gB,OAAO9T,OAAO+tF,YAChC4hF,sBACAxhK,IAAKs3J,iBAAiB95K,GACtB6iB,OAAQP,GAEZ,GAAI7a,KAAKwtK,eAAej1K,GAAGsiB,aAAc0xK,cACrCvsL,KAAKwtK,eAAej1K,GAAGsiB,GAAGo6K,eACtBn8L,KAAMk8L,WACNnzB,UAAWtnH,OACX3tC,OAAQkhJ,mBAET,CACH,IAAMonC,cAAgB,IAAIzB,kCACtB36L,KAAMk8L,WACNnzB,UAAWtnH,OACX3tC,OAAQkhJ,eAEZ9tJ,KAAKwtK,eAAej1K,GAAG2N,KAAKgvL,eAEtB,IAAN38L,IACAshC,OAASk7J,UAAUl7J,OAEb,IAANhf,IACAif,QAAUi7J,UAAUj7J,SAIhC95B,KAAKylG,UAAW3rE,cAAQD,cAExB75B,KAAK6hK,UAAY7hK,KAAKwtK,eACtBxtK,KAAKm1L,cAAgBn1L,KAAKwtK,2EAI1B,OAAIpoK,UAAQ1D,QACR1B,KAAKo1L,kBAALhwL,UAAA1D,QAAA,OAAA4L,EAAAlI,UAAA,GACOpF,MAEJA,KAAKo1L,sFAUQ,IAAAzgL,OAAA3U,KAuBpB,OAtBA8mF,6BAAa,IAAAzrE,OAAKrb,KAAK6hK,UAAU,GAAG,GAAGD,aACtBl2F,GAAG,QAAS,WACT,IAAMmM,MAAQwQ,0BAEVgtG,YAEAx9G,MAFAw9G,YACAC,YACAz9G,MADAy9G,YAIJz9G,MAAM8G,iBACN9G,MAAM1iD,kBAGc,IAAhBkgK,aAAqBxxL,KAAKsnB,IAAIkqK,aAAexxL,KAAKsnB,IAAImqK,cACtD3gL,OAAK4gL,mBAAmBC,uBAAuB,aAAcH,aAI7C,IAAhBC,aAAqBzxL,KAAKsnB,IAAIkqK,aAAexxL,KAAKsnB,IAAImqK,cACtD3gL,OAAK4gL,mBAAmBC,uBAAuB,WAAYF,eAG5Et1L,qEAGUu7F,UAAWk6F,WAE5B,OApHoB,SAAtBC,oBAAuBjD,SAAU/3J,SACnC,IAAMigE,YAAcjgE,QAAQha,OAAO9T,OAAO+tF,YAE1C,OACI89D,WAAY,SAAAA,cACP,EAAG,EAAG,GAAG3vJ,QAAQ,SAAArO,GAAC,OACf+5L,iCAAiB,IAAAn5K,OAAKqf,QAAQmnI,UAAUpnK,GAAG,GAAGmnK,YAAcjnE,YAAa83F,SAAU,iBAE3F/5B,SAAU,SAAAA,YACL,EAAG,EAAG,GAAG5vJ,QAAQ,SAAArO,GAAC,OACf+5L,iCAAiB,IAAAn5K,OAAKqf,QAAQmnI,UAAU,GAAGpnK,GAAGmnK,YAAcjnE,YAAa83F,SAAU,iBAyG3FiD,CAAoBD,UAAWz1L,MAAMu7F,aAC9Bv7F,uDAGI,IAAA21L,sBACW31L,KAAK6hK,UAAU,GAAG,GAAGp8D,WAAnC/kE,IADGi1J,sBACHj1J,IAAKoD,KADF6xJ,sBACE7xJ,KADF0oJ,eAEexsL,KAAKylG,WAE/B,OACI/kE,QACAoD,UACAhK,OAPO0yJ,eAEH1yJ,OAMJD,MARO2yJ,eAEK3yJ,2DAULnZ,QAIX,OAHA1gB,KAAKlH,KAAK4nB,OAAO5nB,MACjBkH,KAAKylG,SAAS/kF,OAAO9T,OAAOmb,YAC5B/nB,KAAK6sL,UAAUnsK,QACR1gB,iDAGA0gB,QAMP,OALA1gB,KAAK6hK,UAAYnhJ,OAAOmhJ,UACxB7hK,KAAK0gB,OAASA,OACd1gB,KAAK07C,OAAOh7B,OAAO9T,OAAO8uC,QAC1B17C,KAAKk/B,UAAUxe,OAAO9T,OAAOsyB,WAC7Bl/B,KAAK41L,eACE51L,2qBC9Jf,IAAM61L,WACF9hC,OACI+hC,WAAY,YACZC,WAAY11B,cAEhBU,UACI+0B,WAAY,eACZC,WAAYz1B,mBAad01B,4CAAsB,SAAtBA,oBAAuBC,WAAYC,cAAeC,eACpD,IAAIl/J,QAAU,KAENioH,WAA6Bi3C,cAA7Bj3C,WAAYm8B,aAAiB8a,cAAjB9a,aAHkD+a,sBAInCP,UAAUI,YAArCH,WAJ8DM,sBAI9DN,WAAYC,WAJkDK,sBAIlDL,WACdr6I,QAAWA,OnEfC,UmEiBlB,GAAIwjG,WAAWlmI,SAAWkmI,WAAWlmI,QAAQ88K,YAAa,CACtD,IAAIO,aAAehb,aAAa4a,YAC1B/8K,OAASgmI,WAAWlmI,QAAQ88K,Y1CwMpB,Y0CtMdO,aAAep9L,OAAO4T,UAAWwpL,aAAlBC,sCACX37F,YAAa0gF,aAAa1gF,aACvBj/C,QACH4wH,UAAS,GAAAjxJ,OAAKg3J,iBAAiB,GAAtB,KAAAh3J,OAA4Bk3J,oBAAoB,IACzD9F,UAAWjM,kBACXthI,UAAW62J,WAAW72J,cAGToI,QACb+uJ,aAAa5pB,UAAY,KACzB4pB,aAAa/pB,UAAY,MAEzB+pB,aAAa/uJ,QAAUolE,sBACvB2pF,aAAa5pB,UAAY//D,qBAG7B,IAAM6pF,eACFz9L,KAAMm9L,WACNp0B,UAAW3oJ,OACXtM,OAAQypL,cAGNG,kBAAoBN,cAAc5oB,aAAa2oB,YAEjDh/J,QADAu/J,kBACUA,kBACCvB,cAAcsB,eAEf,IAAI9J,gCAAgB8J,eAGtC,OAAOt/J,SAuCLw/J,+CAAyB,SAAzBA,uBAA0BC,cAAeR,cAAeC,cAAeQ,MACzE,IACQtb,aAAiB8a,cAAjB9a,aACF3/H,QAAWA,OnE7FC,UmE8FVsmH,UAAcqZ,aAAdrZ,UACAqf,iBAAqBsV,KAAK7lB,WAA1BuQ,iBAEJY,qBAGAZ,iBAHAY,qBACAE,YAEAd,iBAFAc,YACAC,WACAf,iBADAe,WAT8EwU,sBAnCjE,SAAfC,aAAejqL,QAAM,OACvB8rJ,UACIoJ,cAAe,oBACfjoI,MAAO,YACPC,OAAQ,qBACRg9J,mBtE9Dc,SsE+DdC,YAAa,aACbC,SAAU,EACVC,SAA2B,UAAjBrqL,OAAO06B,MAAoB,EAAI,EACzC7G,SAAU7zB,OAAO06B,MACjBmlI,UAAWjgE,mBAEfisD,YACIqJ,cAAe,sBACfjoI,MAAO,qBACPi9J,mBtEzEa,QsE0EbC,YAAa,YACbj9J,OAAQ,YACRk9J,SAA2B,QAAjBpqL,OAAO06B,MAAkB,EAAI,EACvC2vJ,SAAU,EACVx2J,SAAU7zB,OAAO06B,MACjBmlI,UAAWhgE,qBA4BXoqF,CAAa70B,UAAU00B,gBAAgBA,eAFvC50B,cAZ8E80B,sBAY9E90B,cAAeg1B,mBAZ+DF,sBAY/DE,mBAAoBj9J,MAZ2C+8J,sBAY3C/8J,MAAOC,OAZoC88J,sBAYpC98J,OAAQk9J,SAZ4BJ,sBAY5BI,SAAUC,SAZkBL,sBAYlBK,SAC5DF,YAb8EH,sBAa9EG,YAAat2J,SAbiEm2J,sBAajEn2J,SAAUgsI,UAbuDmqB,sBAavDnqB,UAErB1kJ,YACFk6I,UAAWD,UAAUC,UACrB60B,mBAAoBzV,iBAAiB0V,aAAa,IAEhD3Z,SAAWuZ,KAAKpa,aAAama,eAC7BrI,YAAcpM,qBAAqB6U,oBACnCxI,WAAajN,iBAAiB0V,aAAa,GAgB3CR,eACFz9L,KAAMgpK,cACNl1J,OAhBiB3T,OAAO4T,UAAPypL,sCACjB37F,YAAa0gF,aAAa1gF,aACvBj/C,QACHy3I,yBAA0BmD,wCACnBt0B,WACHrnE,YAAa0gF,aAAa1gF,cAG9Bt/F,KAAMq7L,cACNpqB,UAAS,GAAAjxJ,OAAKg3J,iBAAiB2kB,UAAtB,KAAA37K,OAAmCk3J,oBAAoB0kB,WAChExqB,oBACAhsI,qBAMA1Y,YACI8R,MAAO9R,WAAW8R,OAClBC,OAAQ/R,WAAW+R,QACnBu0J,wBACAC,sBACAnM,wBACAC,wBAIFoU,kBAAoBN,cAAc5oB,aAAaxL,eAErD,OAAKsb,SAKDoZ,kBACmBA,kBACMvB,cAAcsB,eAEpB,IAAItD,gBAAgBsD,gBARvCC,mBAAqBA,kBAAkBhxJ,SAChC,OA4FF0xJ,8CAAwB,SAAxBA,sBAAyBhB,cAAeS,KAAMR,eAAtB,OACjCpiC,MAAOiiC,4CtErOU,QsEqOiBE,cAAeC,eACjDp1B,SAAUi1B,4CtErOW,WsEqOoBE,cAAeC,eACxDh0B,OA1EwB,SAAtBg1B,oBAAuBjB,cAAeC,eACxC,IAAIiB,cAAgB,KACZl4C,WAA0Ci3C,cAA1Cj3C,WAAYm8B,aAA8B8a,cAA9B9a,aAAcn9E,YAAgBi4F,cAAhBj4F,YAC5BxiD,QAAWA,OnExKC,UmE0KlB,GAAIwjG,WAAWwsC,SAAWxsC,WAAWwsC,QAAQhqL,OAAQ,CACjD,IAAM8pL,aAAe8K,wCAAKjb,aAAalZ,OAAWzmH,QAAQwiD,0BACpDq4F,eACFz9L,KtEtKU,SsEuKV+oK,UAAW3iB,WAAWwsC,QACtB9+K,OAAQ4+K,cAGNgL,kBAAoBN,cAAc5oB,atE3K1B,UsE8KV8pB,cADAZ,kBACgBA,kBACJvB,cAAcsB,eAEV,IAAIvJ,gCAAgBuJ,eAG5C,OAAOa,cAoDCD,CAAoBjB,cAAeC,eAC3CQ,KAzCsB,SAApBU,kBAAqBnB,cAAeC,cAAeQ,MACrD,IACMj7I,QAAWA,OnEzMC,UmE0MV2/H,aAAiB8a,cAAjB9a,aAQFkb,eACFz9L,KnErNY,OmEsNZ+oK,UAAW80B,KACX/pL,OATW0pL,wCACR56I,QACHqmH,WAAYsZ,aAAatZ,WACzBpnE,YAAa0gF,aAAa1gF,YAC1B5yE,YAAc+R,OAAQ,EAAGD,MAAO,MAO9B28J,kBAAoBN,cAAc5oB,anEzNxB,QmEgOhB,OANIkpB,kBACcA,kBACDvB,cAAcsB,eAEb,IAAI7B,6BAAc6B,eAoB9Bc,CAAkBnB,cAAeC,cAAeQ,MACtDW,kBAAmBb,+CtEnMC,WsEmMgCP,cAAeC,cAAeQ,MAClFY,oBAAqBd,+CtEnMC,asEmMkCP,cAAeC,cAAeQ,0SCrQnF,IAAMa,cAAb,WAEI,SAAAA,6KAAeC,CAAAz3L,KAAAw3L,eACXx3L,KAAK03L,wBACL13L,KAAK23L,uBAJb,sPAAAC,CAAAJ,gBAAA19L,IAAA,sBAAAN,MAAA,SAAAq+L,sBAQQ,OAAIzyL,UAAI1D,QACJ1B,KAAK03L,qBAALtyL,UAAA1D,QAAA,OAAA4L,EAAAlI,UAAA,GACOpF,MAEJA,KAAK03L,wBAZpB59L,IAAA,qBAAAN,MAAA,SAAAs+L,qBAgBQ,OAAI1yL,UAAI1D,QACJ1B,KAAK23L,oBAALvyL,UAAA1D,QAAA,OAAA4L,EAAAlI,UAAA,GACOpF,MAEJA,KAAK23L,uBApBpB79L,IAAA,gCAAAN,MAAA,SAAA64L,8BAuBmCh3L,KAAM+2L,iBACjCn5L,OAAOskB,OAAOvd,KAAK83L,sBAAsBhvL,QAAQ,SAACrO,GAC9CA,EAAEs9L,oBAAoB18L,KAAM+2L,sBAzBxCt4L,IAAA,yBAAAN,MAAA,SAAAg8L,uBA6B4Bn6L,KAAMi3L,OAC1BtyL,KAAK63L,sBAAsBx8L,OAAS2E,KAAK63L,sBAAsBx8L,MAAMo1L,cAAc6B,WA9B3FkF,cAAA,GC+CaQ,8BAAmB,SAAnBA,iBAAoBt9J,QAAS3I,OACtC,IAAIspJ,aAAe9tG,kBAAmB7yC,QAAQ9tB,UADEqrL,sBAGxBlmK,MAAM6rD,wBAAxB9jD,OAH0Cm+J,sBAG1Cn+J,OAAQD,MAHkCo+J,sBAGlCp+J,MACRq+J,WAAax9J,QAAQZ,SACrBq+J,UAAYz9J,QAAQb,QACpBu+J,SAAW19J,QAAQ0uD,cAAc41E,YANSq5B,sBAc5CD,SAAS5pC,kBANTrI,kBAR4CkyC,sBAQ5ClyC,kBACAD,eAT4CmyC,sBAS5CnyC,eACA1qE,SAV4C68G,sBAU5C78G,SACAhhE,KAX4C69K,sBAW5C79K,KACAjB,QAZ4C8+K,sBAY5C9+K,QACAgE,OAb4C86K,sBAa5C96K,OAb4C22F,gBAuB5Cx5E,QAAQ9tB,SAPRwvB,SAhB4C83E,gBAgB5C93E,SACAgmI,UAjB4CluD,gBAiB5CkuD,UACAznE,YAlB4CuZ,gBAkB5CvZ,YACA0xD,YAnB4Cn4C,gBAmB5Cm4C,YACA8V,OApB4CjuD,gBAoB5CiuD,OACAJ,WArB4C7tD,gBAqB5C6tD,WACAC,UAtB4C9tD,gBAsB5C8tD,UAIElB,YAAcpmI,QAAQq5H,QAAQ,GAE9BkN,eAAiBvmI,QAAQqmI,WAAW,GAEpCu3B,eAAiBn2B,OAAO1hI,SAExB83J,kB5BvEuB,SAApBC,kBAAqB99J,SAAY,IAAA+9J,cACpCjN,aAAe9wJ,QAAQ9tB,SAASu1J,OAChCrB,YAAcpmI,QAAQq5H,QAAQ,GAC9BkN,eAAiBvmI,QAAQqmI,WAAW,GACpC23B,cAAYC,kCAAAF,iBAAA,GAAAp9K,OACVmxF,kBADU,KAAAnxF,OACHmxF,oB5CcE,QACI,WAgCJ,U4ChDCmsF,kCAAAF,cAAA,GAAAp9K,OAEVkxF,qBAFU,KAAAlxF,OAEAkxF,uB5C8CD,QAhCI,WADJ,U4CfCosF,kCAAAF,cAAA,GAAAp9K,OAGVmxF,kBAHU,KAAAnxF,OAGHkxF,uB5CYE,QAiCA,QAhCI,a4ChBHosF,kCAAAF,cAAA,GAAAp9K,OAIVkxF,qBAJU,KAAAlxF,OAIAmxF,oB5CYG,WAgCJ,QAjCA,U4CfCisF,eAMZG,gB5CQY,SAmCA,oBAnCA,W4CJZC,cAAgB/3B,YAAYrgI,UAAY+rE,kBACxCssF,iBAAmB73B,eAAexgI,UAAY+rE,kBAEpD,OACIxzF,QAAS0/K,aAAY,GAAAr9K,OAAIw9K,cAAJ,KAAAx9K,OAAqBy9K,mBAC1CpN,QAASF,aAAa/qJ,WAAagsE,oBAAQ++E,aAAa/qJ,WAAa+rE,kBACrEosF,cAAc,GAAKA,cAAc,I4BmDXJ,CAAkB99J,SAE5CZ,OAASj2B,KAAK8M,MAAMmpB,QACpBD,MAAQh2B,KAAK8M,MAAMkpB,OAEnB,IAAMk/J,yBAA2Bl1L,KAAK6P,IAAIwkL,WAAa,EAAIA,WAAap+J,OAAQsoI,WAC1E42B,wBAA0Bn1L,KAAK6P,IAAIykL,UAAY,EAAIA,UAAYt+J,MAAOuC,UAtC5B68J,efoCvB,SAAhBnqC,cAAiBp0H,QAASw+J,aAAcC,aACjD,IAAIxN,aAAe,EACb3yK,WACA+nJ,SAAWrmI,QAAQqmI,WACnBq4B,WAAa3O,wCAA4B1pB,SAAS,IAsBxD,OApBAm4B,cAAgB,KAAOC,aAAe,MAAQ,QAAS,YAAYrwL,QAAQ,SAACzN,MACxE,IAAMg+L,cAAgB3+J,QAAQr/B,QACxBiiG,QAAUmtF,wCAA4B4O,cAAc,IAC1D,GAAI/7F,QAAQ57F,OAAQ,CAChB,IAAMkL,OAASysL,cAAc,GAE7BzsL,OAAOitB,MAAQa,QAAQb,QACvBjtB,OAAOktB,OAASY,QAAQZ,SACxBltB,OAAO+tF,YAAcjgE,QAAQ9tB,SAAS+tF,YACtC/tF,OAAO0wF,QAAUA,QACjB1wF,OAAOg0B,QAAoB,UAATvlC,MAAqB+9L,WAAW13L,OAAgCkL,OAAOg0B,QAA7BmgI,SAAS,GAAGngI,QAPxD,IAAA04J,eASSnO,cAAcv+K,OAAQvR,KAAMq/B,QAAQj/B,eAAe68B,WACxEoC,QAAO,GAAArf,OAAIhgB,KAAJ,UADHy+B,OATQw/J,eASRx/J,OAAQ6mC,KATA24H,eASA34H,KAGhB3nD,QAAO,GAAAqC,OAAIhgB,KAAJ,SAAkBslE,KACzBjmC,QAAQkzH,aAAavyJ,MAAQslE,KAC7BgrH,cAAgB7xJ,WAGf6xJ,0BAAc3yK,iBerBW81I,CAAcp0H,QAASq+J,yBAA0BC,yBAA3EhgL,QAzCwCigL,eAyCxCjgL,QAAS2yK,aAzC+BsN,eAyC/BtN,aAGXD,QdwEkB,SAAf6N,aAAgB7+J,QAASixJ,aAAc7xJ,OAAQD,OACxD,IAAMqkE,aACFpkE,cACAD,YACA8xJ,2BAEIxpB,OAAWznI,QAAQ9tB,SAAnBu1J,OACAplE,KAAmBolE,OAAnBplE,KAAMt8D,SAAa0hI,OAAb1hI,SAEd0hI,OAAOxnE,YAAcjgE,QAAQ9tB,SAAS+tF,YACtC,IAAMrzD,MAAS7G,WAAagsE,oBAAQhsE,WAAaisE,oB1D5G7B,WACE,a0D+GtB,OAFAy1D,OAAOplE,KAAOA,K1D9GM,a0D8GGz1D,OAAsBzN,MAAQ,K1D7G/B,e0D6GwCyN,OAAwBxN,OAAS,IAAQijE,KACvGolE,OAAO76H,MAAQA,MACRikJ,+BAAkBppB,OAAQznI,QAASwjE,YAAaxjE,QAAQgxJ,actF/C6N,CAAa7+J,QAASixJ,aAAcoN,yBAA0BC,yBAC9Et+J,QAAQkzH,aAAauU,UACrBupB,QAAQ5iL,QAAQ,SAACrO,GACbigC,QAAQkzH,aAAauU,OAAO1nK,EAAEi6J,WAAaj6J,EAAE0nK,SAGjD,IAAMirB,Yd2BoB,SAAjBoM,eAAkB9N,QAASF,aAAcnR,gBAAiBjB,gBACnE,IACMgU,aAAgBvzJ,MAAO,EAAGC,OAAQ,GA2BxC,OA5BuB4xJ,QAAQzjL,IAAI,SAAA2jL,YAAU,OAAIA,WAAWzpB,OAAOjkE,gBAGpDp1F,QAAQ,SAACisE,OACpB,IAAIj7C,OACAD,MACJA,MAAQh2B,KAAK2P,IAAIuhE,MAAMl7C,MAAOk7C,MAAM95C,UACpCnB,OAASj2B,KAAK2P,IAAIuhE,MAAMj7C,OAAQi7C,MAAM75C,W1DlEpB,e0DoEdswJ,aAAalkJ,MACT8lJ,YAAYvzJ,MAAQA,MAAQu/I,gBAC5BgU,YAAYvzJ,MAAQu/I,eACpBgU,YAAYtzJ,QAAUA,SAEtBszJ,YAAYvzJ,OAASA,MACrBuzJ,YAAYtzJ,OAASj2B,KAAK6P,IAAI05K,YAAYtzJ,OAAQA,SAE/CszJ,YAAYtzJ,OAASA,OAASugJ,iBACrC+S,YAAYtzJ,OAASA,OACrBszJ,YAAYvzJ,OAASA,QAErBuzJ,YAAYtzJ,QAAUA,OACtBszJ,YAAYvzJ,MAAQh2B,KAAK6P,IAAI05K,YAAYvzJ,MAAOA,U1DjFlC,e0DoFlB2xJ,aAAalkJ,QACb8lJ,YAAYvzJ,MAAQu/I,gBAEjBgU,YcxDaoM,CAAe9N,QAASvpB,OAAQ42B,yBAA0BC,yBACxEjL,YAAeuK,iBAAmB7rF,oBAAQ6rF,iBAAmB5rF,oBAAS0gF,YAAYvzJ,MAAQ,EAC1Fi0J,aAAgBwK,iBAAmB9rF,mBAAO8rF,iBAAmB/rF,qBAAU6gF,YAAYtzJ,OAAS,EAG5FolH,YACFlmI,gBACA0yK,gBACA7sB,UAAWnkI,SACXlgB,UACAjB,gBACAgE,cACAsxI,eAAgBupC,SAASvpC,kBAGvB3wD,aACFu7F,YACI3/J,cACAD,aAEJ8xJ,0BACAyB,wBACA+L,YAAaH,wBACbE,aAAcH,yBACdl/J,MAAOm/J,wBAA0BjL,YACjCj0J,OAAQi/J,yBAA2BpN,aAAemC,aAClD7b,cAAev3I,QAAQu3I,gBACvBD,aAAct3I,QAAQs3I,gBAiB1B,OACIqJ,aAhBJA,aAAe9tG,eAAe8tG,cAC1B1gF,wBACA0xD,wBACA2C,OAAQzhF,eAAe6qH,SAASrpC,WAAWC,OAAQt0H,QAAQ9tB,SAASoiJ,QACpEupC,oCACAp2B,cACA/qG,OAAQ4qG,UAAUC,UAClBF,sBACAhO,MAAO+M,YACPC,SAAUE,eACV9a,oCACAD,8BACAn0H,YACAypD,oBAIA0jE,sBACAhhD,0BAIFw7F,kBACF3lC,MAAO,EACPgN,SAAU,EACVoB,OAAQ,EACRm1B,kBAAmB,EACnBC,oBAAqB,EACrBZ,KAAM,GA0CGgD,0BAAe,SAAfA,aAAgB56B,OAAQo3B,eACjC,IAAMD,cAAgBn3B,OAAO66B,eACvBC,WAAa96B,OAAO8R,SAGtB8lB,KACA+C,iBADA/C,KAIEmD,aAAe5C,8CAAsBhB,cAAe2D,WAAY1D,eAChE4D,kBAAoB9gM,OAAO6M,KAAK4zL,kBAAkBzxL,IAAI,SAAAxN,GAAC,OAAIq/L,aAAar/L,KACxEu/L,YAAcD,kBAAkBpD,OA1Cd,SAAtBsD,oBAAuBF,kBAAmBh7B,QAAW,IAGnDu4B,kBAEAoC,iBAFApC,kBACAX,KACA+C,iBADA/C,KAGEuD,wBAA0BH,kBAF5BL,iBAHAnC,qBAME4C,sBAAwBJ,kBAAkBzC,mBAC1C0C,YAAcD,kBAAkBpD,MAChCpB,iBAAmB,IAAIiC,cACvBK,uBAENsC,wBAA0BtC,oBAAoBn/B,SAAWyhC,uBACzDD,0BAA4BrC,oBAAoBp/B,WAAayhC,yBAE7D3E,iBACiBsC,oBAAoBA,qBACpBC,oBACGnB,KAAMqD,cAE1Bj7B,OAAO31E,cAAcgxG,WAAaF,wBAClCn7B,OAAO31E,cAAcixG,WAAaF,uBAEjCD,wBAAyBC,uBAAuBrxL,QAAQ,SAACmuB,SACtDA,SAAWA,QAAQg5J,QAAQsF,oBAG/ByE,YAAYzE,iBAAiBA,kBAe7B0E,CAAoBF,kBAAmBh7B,QAEvCm3B,cAAcoE,mBAAmBP,mBAAmB1qB,UACpD2qB,YAAYO,6wDCxMhB,IAAMC,0BAA2B,SAA3BA,yBAA4B/oD,YAAap9C,UAAa,IAAA1hE,KAAA+1C,MAClD+xH,UAAY,SAAZA,UAAYnvL,OAAK,OAAIA,MAAMjQ,SAAW8D,yBAAUC,SAEhD4/J,YADS3qE,SAAS35D,QACG0uD,cAAc41E,YACnCrrE,SAAUhhE,SAAGtX,OAAH9T,MAAAorB,KAAA+nK,iCAAa17B,YAAY27B,qBAAqB,OACxD/mG,SAAUlrB,UAAGrtD,OAAH9T,MAAAmhE,MAAAgyH,iCAAa17B,YAAY27B,qBAAqB,OACxDC,OAASjnG,QAAQj2E,MAAM,SAAApS,OAAK,OAAIA,MAAMjQ,SAAW8D,yBAAUE,YAC3Dw7L,SAAW77B,YAAYrvI,WAAW9K,eAClCw+H,UAAYw3C,SAASx3C,UACrBC,UAAYu3C,SAASv3C,UAC3B7R,YAAYlsG,KAAK,SAACo7B,MACd,IAAM+wG,aAAe/wG,KAAK/iD,UAAUy2E,WACpC,IAAMV,QAAQj2E,MAAM+8K,aAAc7mG,QAAQl2E,MAAM+8K,WAAa,CACzD,IAGIv/C,WAHElM,YAAcruE,KAAK/iD,UAAUu9H,gBAAgB,GAC7C2/C,cAAgB9rD,YAAYh8H,OAAO,SAAAna,GAAC,OAA+C,IAA3CyqJ,UAAU/9H,UAAU,SAAA3b,GAAC,OAAIA,EAAEmxL,OAAOliM,OAC1EmiM,cAAgBhsD,YAAYh8H,OAAO,SAAAna,GAAC,OAA+C,IAA3CwqJ,UAAU99H,UAAU,SAAA3b,GAAC,OAAIA,EAAEmxL,OAAOliM,OAG5EqiJ,WADA0/C,OACaE,cAAc7yL,IAAI,SAAApP,GAAC,SAAAwiB,OAAOxiB,KAE1BmiM,cAAc/yL,IAAI,SAAApP,GAAC,SAAAwiB,OAAOxiB,KAG3C64K,aAAaupB,cAAc,IAAK//C,YAAY,OAKlDggD,gCACF9qG,YACI6vE,IAAK,SAAA9/I,EAAC+/I,mBAAoBxlI,SACtB,IAAMygK,uBAAyBj7B,mBAAmBnlB,aAC5CwW,YAAc72H,QAAQsgH,cAC5B,OAAOmgD,wBAAyB5pC,cAAgB4pC,yBAGxDtuG,aACI8L,QAAS,SAAAA,QAACunE,mBAAoBxlI,SAC1B,IAAM0gK,gBAAkBl7B,mBAAmBplB,WACrCqlB,kBAAoBD,mBAAmBnlB,aACvCuB,OAAS5hH,QAAQ5D,KACjBy6H,YAAc72H,QAAQsgH,cAC5B,OAAImlB,oBACOA,oBAAsB5O,aAAqBjV,SAAW8+C,oBCpD9DC,oCD0EX,SAAAA,gBAAwB,IAAAr2F,iBAAAvwF,mKAAA6mL,CAAAt7L,KAAAq7L,eAAA,QAAAx0H,KAAAzhE,UAAA1D,OAARgf,OAAQ,IAAA7X,MAAAg+D,MAAAC,KAAA,EAAAA,KAAAD,KAAAC,OAARpmD,OAAQomD,MAAA1hE,UAAA0hE,MAAA,OACpBryD,MAAA8mL,yCAAAv7L,MAAAglG,iBAAAw2F,8BAAAH,gBAAA3iM,KAAA6O,MAAAy9F,kBAAAhlG,MAAAqb,OAASqF,WACJ8wJ,mBAAqB/8J,MAAKuQ,YAAYw1K,2BAC3C/lL,MAAK2rJ,uBAAuB3rJ,MAAKuQ,YAAYk2K,iCAHzBzmL,6YADey5E,8UAgBnC,OAAI9oF,UAAO1D,QACP1B,KAAKwxK,oBAAqBpsK,UAAA1D,QAAA,OAAA4L,EAAAlI,UAAA,KAAapF,KAAKglB,YAAYw1K,2BACjDx6L,MAEJA,KAAKwxK,2FAGmB,IAAA78J,OAAA3U,KAC/B,GAAIoF,UAAO1D,OAAQ,CACf1B,KAAKyxK,wBAA0BlkG,eAAeA,kBAC1CvtE,KAAKglB,YAAYk2K,kCAAkC91L,UAAA1D,QAAA,OAAA4L,EAAAlI,UAAA,SACvD,IAAMs1B,QAAU16B,KAAK06B,QAKrB,OAJA42I,uBAAuBtxK,MACvB06B,QAAQwkI,WAAWt0D,2BAA2Bn7C,aAAYG,gBAAiB,WACvE0hH,uBAAuB38J,UAEpB3U,KAEX,OAAOA,KAAKyxK,oFA8CGzgF,UAAW9mE,SAC1B,IAAMiwH,YAAclhJ,OAAO4T,OAAOqd,SAC5BxN,SAAWy9H,YAAYz9H,SACvB3R,KAAO/K,KAAK06B,QAAQ0uD,cAAc41E,YAAYqtB,iBAC9CjvK,aAAerS,KAAKsS,kBACpBlB,MAAQqyD,yCAA4BzjE,KAAM2R,UAC1C++K,kBAAoBz7L,KAAKyuF,SAASC,YAAYsC,WAEpD,GAAIyqG,kBAAmB,CACnB,IACMC,aADSluK,eAAe9Q,UAAYzjB,OAAO6M,KAAK4W,UAAaA,SAAWA,SAAS,OAC5D1J,OAAO,SAAA1H,OAAK,OAAIA,SAAS8R,eAC9Cm0E,QAAUkqG,kBAAkBz2K,YAAYusE,UACxCxuE,YACFmH,QAASiwH,YACT/3H,OAAQ4uE,UACRt0E,SAAUP,MACVyF,SAAU5hB,KAAK06B,QAAQg2F,QACvBzmG,gBAAiBsnE,QACjB1vE,4BAA6B65K,YAAYh+K,MAAM,SAAApS,OAAK,OAAI8R,aAAa9R,OAAOkS,IAAIniB,OAC5E8D,yBAAUC,WAElB2L,KAAK2mF,UAAUv1E,MAAO4G,YAAY,GAEtC,OAAO/iB,qEAGU6sF,aACjB,IAAK,IAAM/yF,OAAO+yF,YACd7sF,KAAKsuF,uBAAuBzB,YAAY/yF,KAAKwwF,cAAgBuC,YAAY/yF,KAE7E,OAAOkG,mFAtGP,OAAOw6L,gHAIP,OAAOU,oDEvFFS,mBACTC,KACI39I,SACA0sF,SACA1wC,UACA8kE,WAEJ7vF,OACI6vF,UACA9gH,SACA0sF,SACA1wC,olDCsBa4hG,4CAUjB,SAAAA,OAAaC,oBAAoB,IAAArnL,2JAAAsnL,CAAA/7L,KAAA67L,SAC7BpnL,wKAAAunL,CAAAh8L,KAAAi8L,sBAAAJ,QAAAnjM,KAAAsH,QAEKmwK,YAAcl3K,OAAO4T,UAAWlG,YAASi3I,cAC9CnpI,MAAKy1I,aACLz1I,MAAKm5I,gBACLn5I,MAAKi8J,gBACLj8J,MAAKg9G,OAAS,KACdh9G,MAAKs/H,iBAAmB,KACxBt/H,MAAKq/H,iBAAmB,IAAIttD,QAAQ,SAACn+D,SACjC5T,MAAKs/H,iBAAmB1rH,UAE5B5T,MAAKm5I,aAAaijB,OAAS,IAAIiO,kBAC/BrqK,MAAKo8G,OAAS,IAAIvlD,mBAAMqwH,mBAExBlnL,MAAKyqJ,WAAa,IAAI5zF,6LAAJ4wH,IACbzsI,aAAYG,gBAAiB,IAIlC,IAAMub,UAAY0/B,0BAAiBx7C,uBAC1B1mD,MArBoBwzL,qBAqBXtwH,wBAAWuwH,0DAAA3nL,QAAM9N,YAAS8N,MAAKo8G,OAAO10G,OACpDgvD,sBAtByB,aAwB7BU,wBAAWuwH,0DAAA3nL,QAAMmpI,aAAcj1I,OAC3BwiE,sBAEJU,wBAAWuwH,0DAAA3nL,QAAMksJ,cAAeh4J,OAC5BwiE,sBAGJ12D,MAAKhZ,aAAaxC,OAAO4T,UAAWivL,mBAAoBrnL,MAAK8hG,gBAC7D9hG,MAAK4/E,SAAS,IAAIgnG,gBAAJe,0DAAA3nL,SACVi6E,YAAakE,4BACbjE,SAAUyE,gBACVvD,2BACDhD,6BAAauB,0CAChB35E,MAAKi8G,MAAL,UAAAr1G,OAAqB/Q,gBACrBmK,MAAKs/I,MAAM,OACXt/I,MAAKssJ,SAAS,OACdtsJ,MAAK0tJ,WACL1tJ,MAAK+9B,UACL/9B,MAAK8rF,UACL9rF,MAAKikB,SACLu3I,2BAAoBmsB,0DAAA3nL,SAEpBA,MAAKmlL,eAAiB/nB,6BA9COp9J,sXAVD6wK,8SAoE5B,OAAIlgL,UAAO1D,OACA1B,KAEJA,KAAKopF,cAAcynF,yDAoB1B,OAAIzrK,UAAO1D,OACA1B,KAEJA,KAAK4tJ,iDAIZ,OAAO5tJ,KAAK8zI,uDAkBZ,GAAI1uI,UAAO1D,OAAQ,CACf,IAAMs9J,YAAch/J,KAAKopF,cAAc41E,YAGvC,OAFAh/J,KAAKyxH,OAALrsH,UAAA1D,QAAA,OAAA4L,EAAAlI,UAAA,GACA45J,aAAeA,YAAYtuC,MAAM1wH,KAAK0wH,SAC/B1wH,KAEX,OAAOA,KAAKyxH,mDA4CZ,OAAIrsH,UAAS1D,QACT1B,KAAK69I,UAALz4I,UAAA1D,QAAA,OAAA4L,EAAAlI,UAAA,GACOpF,MAEJA,KAAK69I,sDASK,QAAAh3E,KAAAzhE,UAAA1D,OAARgf,OAAQ,IAAA7X,MAAAg+D,MAAAC,KAAA,EAAAA,KAAAD,KAAAC,OAARpmD,OAAQomD,MAAA1hE,UAAA0hE,MACjB,GAAIpmD,OAAOhf,OAAQ,CACf,IAAMw9I,WAAajmJ,OAAO4T,UAAW6T,OAAO,GAAGw+H,YACzCwQ,qBAAuBz2J,OAAO4T,UAAW6T,OAAO,GAAGgvI,sBAEzD1vJ,KAAKkqJ,WAAchL,sBAAYwQ,2CAC/B,IAAM2sC,iBlD3MQ,SAAbC,WAAc5hK,SAGvB,OAAQ,IAFIA,QAAQwvH,UAAUhL,WAEdoQ,YAAY50H,QAAQwvH,UAAWjxJ,OAAO4T,QAClD+iH,UAAWl1F,QAAQwkI,YACpBxkI,QAAQj/B,kBkDsMsB6gM,CAAWt8L,MAKpC,OAHAA,KAAK4tJ,aAAaoR,YAAcq9B,iBAAiB,GlDO7B,SAAnBE,iBAAoB7hK,SAAY,IAAA8hK,uBAAAC,4BACPntC,aAAYr+B,WADL,GAClCD,YADkCwrE,uBAAA,GACrBE,WADqBF,uBAAA,GAEnC7zL,MAAQ+xB,QAAQm2F,OACtBloH,MAAMuqB,OAAO,YAAa89F,aAC1BroH,MAAMuqB,OAAO,cAAewpK,YkDVpBH,CAAiBv8L,MACjBA,KAAKopF,cAAc41E,YAAYtuC,MAAM1wH,KAAK0wH,SAAS/nH,MAAM3I,KAAK6wH,QACvD7wH,KAEX,OAAOA,KAAKkqJ,8DAOZ,OAAI9kJ,UAAM1D,QACN1B,KAAKu2G,cAALnxG,UAAA1D,QAAA,OAAA4L,EAAAlI,UAAA,GACOpF,MAGJA,KAAKu2G,0DAULvrB,YACP,IAAMuyD,iBAAmBv9I,KAAKvE,eAAe8hJ,iBAC7C,OAAIvyD,YACAuyD,iBAAiBo/C,SAAS3xG,YACnBhrF,MAEJu9I,yDAUP,OAAIn4I,UAAO1D,OACA1B,KAEJA,KAAKopF,cAAc+4E,yCAmBxB33I,WAEF,OADyBxqB,KAAKvE,eAAe8hJ,iBACrB3yD,SAASpgE,mDASjC,IAAMuH,MAAQ/xB,KAAK+xB,QAEbwrH,iBAAmBv9I,KAAKvE,eAAe8hJ,iBAEvC44C,cAAgB6B,8BAAiBh4L,KAAM+xB,OAC7CwrH,iBAAiBvG,QAASzsD,OAAQvqF,KAAMoiB,OAAQ,eJ/R3B,SAAhBw6K,cAAiB/rB,OAAQslB,eAAkB,IAC5Cj3C,WAA0Ci3C,cAA1Cj3C,WAAYm8B,aAA8B8a,cAA9B9a,aAAcn9E,YAAgBi4F,cAAhBj4F,YAE9B1jF,KAIA0kI,WAJA1kI,KACAjB,QAGA2lI,WAHA3lI,QACAgE,OAEA2hI,WAFA3hI,OACAsxI,eACA3P,WADA2P,eAGAjC,QAIAiC,eAJAjC,QACAC,SAGAgC,eAHAhC,SACAX,WAEA2C,eAFA3C,WACAC,YACA0C,eADA1C,YAEA3xI,MAAQjB,SACRs3J,OAAO3yE,YAAYA,aACFtxF,OAAOyuK,cACPhqC,UACG3wG,KAAMksH,QAASrzI,QAAQ,GAAIszI,UAC3Bh8F,QAASr2C,KAAK,GAAI+C,OAAQ/C,KAAK,IAC/Bs1C,QAASo8F,WAAY3yI,QAAQ,GAAI4yI,eAEpC0wC,gBI2QjBD,CAAc58L,KAAK6wK,SAAUslB,eAE7Bn2L,KAAK45L,eAAe98F,WAChBhjE,OAAQq8J,cAAcj4F,YAAYg7F,aAClCr/J,MAAOs8J,cAAcj4F,YAAYi7F,cAGrCn5L,KAAK45L,eAAeh4B,SAAS7vI,OAG7B4nK,0BAAa35L,KAAMm2L,elD7RS,SAAvB2G,qBAAwBpiK,SACjC,IAAMw7J,cAAgBx7J,QAAQk/J,eACxBn0F,SAAWywF,cAAc5oB,aAAa,QAAQyvB,cAC9CtrD,YAAc/2G,QAAQ0uD,cAAc41E,YAAYC,iBAAiBzlK,MACjEw+B,gBAAkB8uD,6BAAa,IAAAzrE,OAAK66K,cAAc8G,kBAAmBluK,OAC3E2iH,YAAYlsG,KAAK,SAACo7B,MACdA,KAAK/iD,UAAUmhI,oBACX58C,GAAInqE,gBACJjQ,WAAY09E,akDuRhBq3F,CAAqB98L,MlDnHU,SAA1Bi9L,wBAA2BviK,SACpC,IAAIw0E,SAAW,EAETo7B,MAAQ5vG,QAAQ4vG,aAEtB,WACI,IAAK,IAAI/xI,EAAI,EAAGA,EAAI+xI,MAAM5oI,OAAQnJ,IAC9B,IAAK,IAAIsiB,EAAI,EAAGA,EAAIyvH,MAAM/xI,GAAGmJ,OAAQmZ,IAAK,CACtC,IAAMqiL,YAAc5yD,MAAM/xI,GAAGsiB,GAAGg1F,eAAeZ,OAAOC,SACtD,GAAIguF,aAA+B,IAAhBA,YAEf,YADAhuF,SAAWguF,cAL3B,GAYIhuF,UACAo7B,MAAMxhI,QAAQ,SAAC2tF,MACXA,KAAK3tF,QAAQ,SAAConD,MACVA,KAAK2/C,cAAeZ,QAAUC,qBAC9Bh/C,KAAKi/C,WAAWj/C,KAAKinD,qBkDiG7B8lF,CAAwBj9L,4CAmBxB,OAAOA,KAAKopF,cAAc41E,YAAYm+B,QAAQ,2CAkB9C,OAAOn9L,KAAKopF,cAAc41E,YAAYm+B,QAAQ,6DAkB9C,OADoBn9L,KAAKopF,cAAc41E,YACpBm+B,Q5EvTJ,iD4E2Tf,GAAI/3L,UAAO1D,OAAQ,CACf,IAAIlI,MAAK4L,UAAA1D,QAAA,OAAA4L,EAAAlI,UAAA,GAKT,MAJyB,iBAArBA,UAAA1D,QAAA,OAAA4L,EAAAlI,UAAA,MACA5L,MAAQstF,6BAAa1hF,UAAA1D,QAAA,OAAA4L,EAAAlI,UAAA,IAAY0pB,QAErC9uB,KAAK+hG,OAASvoG,MACPwG,KAEX,OAAOA,KAAK+hG,2DA1NKq7F,gBAAiBC,SAAUvB,oBAC5C,IAAMpsF,SAAW,IAAImsF,OAAOC,oBAE5B,IAAK,IAAMhiM,OAAOsjM,gBACd1tF,SAAS51G,KAAKsjM,gBAAgBtjM,MAIlC,OADA41G,SAAShF,SAAS2yF,UACX3tF,yDAWP,MAAO,uBCrLF4tF,YACThuC,yBACAlS,mCAESmgD,eACTluC,2BACA/lD,cCTW,WACX,IAAMo5B,IAAMgB,eACN85D,QACF/rL,IAAK,SAAAA,IAAC3X,IAAK0jB,KAEP,OADAklH,IAAI5oI,KAAO0jB,IACJggL,QAEXpkM,IAAK,SAAAA,MAAA,OAAMspI,MAEf,OAAO86D,wjBCuBX,IAAMC,eACAC,gBAAkBJ,WAElBK,4BAA8B,SAA9BA,4BAA+BC,iBAAkBlzF,UACnD,IAAK,IAAMn4E,QAAQqrK,iBACflzF,SAASj5F,IAAI8gB,KAAMqrK,iBAAiBrrK,QA+BtCsrK,UAAO,SAAPA,OAAa,IAAAC,aAAAC,mBAEYlyH,2BAAellE,aAF3B,GAERq3L,IAFQF,aAAA,GAEHG,YAFGH,aAAA,GAGT5+C,WAAajmJ,OAAO4T,UAAWywL,YAC/BY,wBAA0BjlM,OAAO4T,OAAO0wL,eACxC7tC,wBAEN,IAAK,IAAMn9H,QAAQ2rK,wBACfxuC,qBAAqBn9H,MAAQ2rK,wBAAwB3rK,QAgEzD,OA5DAyrK,IAAIj/B,OAAS,WAET,IAAMo/B,SAAWF,YAAYryK,YACvBmzI,OAAS88B,cAAOuC,aAAaD,UAC/Bj/C,sBACAwQ,2CACDsuC,IAAIlC,sBAKP,OzWgyByB,SAA3BuC,yBAA4BC,iBAAkBC,oBAAqBC,kBACrEA,iBAAiB11L,QAAQ,SAAAkB,MAAI,OAAIs0L,iBAAiB5yH,GAAG1hE,KAAM,SAAA6Y,OAAA,IAAIqqD,OAAJlF,eAAAnlD,MAAA,aAAgB07K,oBAAoBv0L,MAAMkjE,YyWnyBjGmxH,CAAyBJ,YAAal/B,OAAQ9lK,OAAO6M,KAAKq4L,WAEnDp/B,QAIXi/B,IAAIlC,mBAAqB,WAIrB,OAHK2B,YAAYnlK,aACbmlK,YAAYnlK,WAAa,IAAImmK,4BAAW,EAAG,UAG3CnmK,WAAYmlK,YAAYnlK,WACxBilH,iBAAkB,IAAI/zD,oBAM9Bw0G,IAAIG,SAAW,kBAAMF,YAAYryK,aAEjCoyK,IAAItzF,SAAW,WAAyB,QAAA7jC,KAAAzhE,UAAA1D,OAArBk8L,iBAAqB,IAAA/0L,MAAAg+D,MAAAC,KAAA,EAAAA,KAAAD,KAAAC,OAArB82H,iBAAqB92H,MAAA1hE,UAAA0hE,MAEpC,GAAI82H,iBAAiBl8L,OAAQ,CACzB,IAAK,IAAM6wB,SAAQqrK,iBACXrrK,SAAQmrK,kBACRx+C,WAAW3sH,OAAQqrK,iBAAiBrrK,QAG5C,OAAOyrK,IAEX,OAAO9+C,YAGX8+C,IAAI3uC,aAAe,WACf,IAAMA,aAAeK,qBAAqBL,aAC1C,OAAIjqJ,UAAiB1D,QACjBi8L,4BAA2Bv4L,UAAA1D,QAAA,OAAA4L,EAAAlI,UAAA,GAAsBiqJ,cAC1C2uC,KAEJ3uC,aAAaj2J,OAGxB4kM,IAAI10F,cAAgB,WAChB,IAAMA,cAAgBomD,qBAAqBpmD,cAC3C,OAAIlkG,UAAiB1D,QACjBi8L,4BAA2Bv4L,UAAA1D,QAAA,OAAA4L,EAAAlI,UAAA,GAAsBkkG,eAC1C00F,KAEJ10F,cAAclwG,OAGlB4kM,KAGLU,aACF7xG,yCACA8xG,WACI5kG,wCACAM,kDACAV,4BAIFilG,YACFhsG,+CACA+rG,WACIvqG,0CACA8B,mDACAd,+CAIRyoG,UAAKx/L,UAAYA,oBACjBw/L,UAAK9iM,QAAU+xB,aAAI/xB,QACnB8iM,UAAKa,YAAcA,YACnBb,UAAKz+B,YAAcA,YACnBy+B,UAAKv7D,aAAeA,kBACpBu7D,UAAK9xK,UAAY8yK,0BACjBhB,UAAKe,WAAaA,WAClBf,UAAKiB,OACD52G,6CACAG,iCACArB,wBACAF,2CACAhnF,mDACAxB,QzWk0CY,SAAVA,QAAWygM,WAAYC,eAAb,OACZ3rD,WAAY,SAAAA,WAAC1qI,OACT,IAAMs2L,aAAet2L,MAAMo2L,YACrBzrD,OAAS0rD,cAAclkL,MAAM,EAAGkkL,cAAct9L,OAAS,GACvDqc,GAAKihL,cAAcA,cAAct9L,OAAS,GAE1Cw9L,KAAO5rD,OAAOrrI,IAAI,SAAAkC,KAAG,OAAI80L,aAAa90L,OAC5C,OACI4T,GAAIA,GAAExW,WAAF,EAAAkgE,mBAAMy3H,OACV5rD,mByWx0CGuqD","file":"muze.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"muze\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"muze\"] = factory();\n\telse\n\t\troot[\"muze\"] = factory();\n})(window, function() {\nreturn "," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 7);\n","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"DataModel\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"DataModel\"] = factory();\n\telse\n\t\troot[\"DataModel\"] = factory();\n})(window, function() {\nreturn "," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 1);\n","const DataModel = require('./export');\n\nmodule.exports = DataModel.default ? DataModel.default : DataModel;\n","/**\n * DataFormat Enum defines the format of the input data.\n * Based on the format of the data the respective adapter is loaded.\n *\n * @readonly\n * @enum {string}\n */\nconst DataFormat = {\n FLAT_JSON: 'FlatJSON',\n DSV_STR: 'DSVStr',\n DSV_ARR: 'DSVArr',\n AUTO: 'Auto'\n};\n\nexport default DataFormat;\n","/**\n * DimensionSubtype enum defines the sub types of the Dimensional Field.\n *\n * @readonly\n * @enum {string}\n */\nconst DimensionSubtype = {\n CATEGORICAL: 'categorical',\n TEMPORAL: 'temporal',\n GEO: 'geo',\n BINNED: 'binned'\n};\n\nexport default DimensionSubtype;\n","/**\n * MeasureSubtype enum defines the sub types of the Measure Field.\n *\n * @readonly\n * @enum {string}\n */\nconst MeasureSubtype = {\n CONTINUOUS: 'continuous'\n};\n\nexport default MeasureSubtype;\n","/**\n * FieldType enum defines the high level field based on which visuals are controlled.\n * Measure in a high level is numeric field and Dimension in a high level is string field.\n *\n * @readonly\n * @enum {string}\n */\nconst FieldType = {\n MEASURE: 'measure',\n DIMENSION: 'dimension'\n};\n\nexport default FieldType;\n","/**\n * Filtering mode enum defines the filering modes of DataModel.\n *\n * @readonly\n * @enum {string}\n */\nconst FilteringMode = {\n NORMAL: 'normal',\n INVERSE: 'inverse',\n ALL: 'all'\n};\n\nexport default FilteringMode;\n","/**\n * Creates a JS native date object from input\n *\n * @param {string | number | Date} date Input using which date object to be created\n * @return {Date} : JS native date object\n */\nfunction convertToNativeDate (date) {\n if (date instanceof Date) {\n return date;\n }\n\n return new Date(date);\n}\n/**\n * Apply padding before a number if its less than 1o. This is used when constant digit's number to be returned\n * between 0 - 99\n *\n * @param {number} n Input to be padded\n * @return {string} Padded number\n */\nfunction pad (n) {\n return (n < 10) ? (`0${n}`) : n;\n}\n/*\n * DateFormatter utility to convert any date format to any other date format\n * DateFormatter parse a date time stamp specified by a user abiding by rules which are defined\n * by user in terms of token. It creates JS native date object from the user specified format.\n * That native date can also be displayed\n * in any specified format.\n * This utility class only takes care of format conversion only\n */\n\n/*\n * Escapes all the special character that are used in regular expression.\n * Like\n * RegExp.escape('sgfd-$') // Output: sgfd\\-\\$\n *\n * @param text {String} : text which is to be escaped\n */\nRegExp.escape = function (text) {\n return text.replace(/[-[\\]{}()*+?.,\\\\^$|#\\s]/g, '\\\\$&');\n};\n\n/**\n * DateTimeFormatter class to convert any user format of date time stamp to any other format\n * of date time stamp.\n *\n * @param {string} format Format of the date given. For the above date,\n * 'year: %Y, month: %b, day: %d'.\n * @class\n */\n/* istanbul ignore next */ function DateTimeFormatter (format) {\n this.format = format;\n this.dtParams = undefined;\n this.nativeDate = undefined;\n}\n\n// The identifier of the tokens\nDateTimeFormatter.TOKEN_PREFIX = '%';\n\n// JS native Date constructor takes the date params (year, month, etc) in a certail sequence.\n// This defines the sequence of the date parameters in the constructor.\nDateTimeFormatter.DATETIME_PARAM_SEQUENCE = {\n YEAR: 0,\n MONTH: 1,\n DAY: 2,\n HOUR: 3,\n MINUTE: 4,\n SECOND: 5,\n MILLISECOND: 6\n};\n\n/*\n * This is a default number parsing utility. It tries to parse a number in integer, if parsing is unsuccessful, it\n * gives back a default value.\n *\n * @param: defVal {Number} : Default no if the parsing to integer is not successful\n * @return {Function} : An closure function which is to be called by passing an the value which needs to be parsed.\n */\nDateTimeFormatter.defaultNumberParser = function (defVal) {\n return function (val) {\n let parsedVal;\n if (isFinite(parsedVal = parseInt(val, 10))) {\n return parsedVal;\n }\n\n return defVal;\n };\n};\n\n/*\n * This is a default number range utility. It tries to find an element in the range. If not found it returns a\n * default no as an index.\n *\n * @param: range {Array} : The list which is to be serached\n * @param: defVal {Number} : Default no if the serach and find does not return anything\n * @return {Function} : An closure function which is to be called by passing an the value which needs to be found\n */\nDateTimeFormatter.defaultRangeParser = function (range, defVal) {\n return (val) => {\n let i;\n let l;\n\n if (!val) { return defVal; }\n\n const nVal = val.toLowerCase();\n\n for (i = 0, l = range.length; i < l; i++) {\n if (range[i].toLowerCase() === nVal) {\n return i;\n }\n }\n\n if (i === undefined) {\n return defVal;\n }\n return null;\n };\n};\n\n/*\n * Defines the tokens which are supporter by the dateformatter. Using this definitation a value gets extracted from\n * the user specifed date string. This also formats the value for display purpose from native JS date.\n * The definition of each token contains the following named properties\n * {\n * %token_name% : {\n * name: name of the token, this is used in reverse lookup,\n * extract: a function that returns the regular expression to extract that piece of information. All the\n * regex should be gouped by using ()\n * parser: a function which receives value extracted by the above regex and parse it to get the date params\n * formatter: a formatter function that takes milliseconds or JS Date object and format the param\n * represented by the token only.\n * }\n * }\n *\n * @return {Object} : Definition of the all the supported tokens.\n */\nDateTimeFormatter.getTokenDefinitions = function () {\n const daysDef = {\n short: [\n 'Sun',\n 'Mon',\n 'Tue',\n 'Wed',\n 'Thu',\n 'Fri',\n 'Sat'\n ],\n long: [\n 'Sunday',\n 'Monday',\n 'Tuesday',\n 'Wednesday',\n 'Thursday',\n 'Friday',\n 'Saturday'\n ]\n };\n const monthsDef = {\n short: [\n 'Jan',\n 'Feb',\n 'Mar',\n 'Apr',\n 'May',\n 'Jun',\n 'Jul',\n 'Aug',\n 'Sep',\n 'Oct',\n 'Nov',\n 'Dec'\n ],\n long: [\n 'January',\n 'February',\n 'March',\n 'April',\n 'May',\n 'June',\n 'July',\n 'August',\n 'September',\n 'October',\n 'November',\n 'December'\n ]\n };\n\n const definitions = {\n H: {\n // 24 hours format\n name: 'H',\n index: 3,\n extract () { return '(\\\\d+)'; },\n parser: DateTimeFormatter.defaultNumberParser(),\n formatter (val) {\n const d = convertToNativeDate(val);\n\n return d.getHours().toString();\n }\n },\n l: {\n // 12 hours format\n name: 'l',\n index: 3,\n extract () { return '(\\\\d+)'; },\n parser: DateTimeFormatter.defaultNumberParser(),\n formatter (val) {\n const d = convertToNativeDate(val);\n const hours = d.getHours() % 12;\n\n return (hours === 0 ? 12 : hours).toString();\n }\n },\n p: {\n // AM or PM\n name: 'p',\n index: 3,\n extract () { return '(AM|PM)'; },\n parser: (val) => {\n if (val) {\n return val.toLowerCase();\n }\n return null;\n },\n formatter: (val) => {\n const d = convertToNativeDate(val);\n const hours = d.getHours();\n\n return (hours < 12 ? 'AM' : 'PM');\n }\n },\n P: {\n // am or pm\n name: 'P',\n index: 3,\n extract () { return '(am|pm)'; },\n parser: (val) => {\n if (val) {\n return val.toLowerCase();\n }\n return null;\n },\n formatter: (val) => {\n const d = convertToNativeDate(val);\n const hours = d.getHours();\n\n return (hours < 12 ? 'am' : 'pm');\n }\n },\n M: {\n // Two digit minutes 00 - 59\n name: 'M',\n index: 4,\n extract () { return '(\\\\d+)'; },\n parser: DateTimeFormatter.defaultNumberParser(),\n formatter (val) {\n const d = convertToNativeDate(val);\n const mins = d.getMinutes();\n\n return pad(mins);\n }\n },\n S: {\n // Two digit seconds 00 - 59\n name: 'S',\n index: 5,\n extract () { return '(\\\\d+)'; },\n parser: DateTimeFormatter.defaultNumberParser(),\n formatter (val) {\n const d = convertToNativeDate(val);\n const seconds = d.getSeconds();\n\n return pad(seconds);\n }\n },\n K: {\n // Milliseconds\n name: 'K',\n index: 6,\n extract () { return '(\\\\d+)'; },\n parser: DateTimeFormatter.defaultNumberParser(),\n formatter (val) {\n const d = convertToNativeDate(val);\n const ms = d.getMilliseconds();\n\n return ms.toString();\n }\n },\n a: {\n // Short name of day, like Mon\n name: 'a',\n index: 2,\n extract () { return `(${daysDef.short.join('|')})`; },\n parser: DateTimeFormatter.defaultRangeParser(daysDef.short),\n formatter (val) {\n const d = convertToNativeDate(val);\n const day = d.getDay();\n\n return (daysDef.short[day]).toString();\n }\n },\n A: {\n // Long name of day, like Monday\n name: 'A',\n index: 2,\n extract () { return `(${daysDef.long.join('|')})`; },\n parser: DateTimeFormatter.defaultRangeParser(daysDef.long),\n formatter (val) {\n const d = convertToNativeDate(val);\n const day = d.getDay();\n\n return (daysDef.long[day]).toString();\n }\n },\n e: {\n // 8 of March, 11 of November\n name: 'e',\n index: 2,\n extract () { return '(\\\\d+)'; },\n parser: DateTimeFormatter.defaultNumberParser(),\n formatter (val) {\n const d = convertToNativeDate(val);\n const day = d.getDate();\n\n return day.toString();\n }\n },\n d: {\n // 08 of March, 11 of November\n name: 'd',\n index: 2,\n extract () { return '(\\\\d+)'; },\n parser: DateTimeFormatter.defaultNumberParser(),\n formatter (val) {\n const d = convertToNativeDate(val);\n const day = d.getDate();\n\n return pad(day);\n }\n },\n b: {\n // Short month, like Jan\n name: 'b',\n index: 1,\n extract () { return `(${monthsDef.short.join('|')})`; },\n parser: DateTimeFormatter.defaultRangeParser(monthsDef.short),\n formatter (val) {\n const d = convertToNativeDate(val);\n const month = d.getMonth();\n\n return (monthsDef.short[month]).toString();\n }\n },\n B: {\n // Long month, like January\n name: 'B',\n index: 1,\n extract () { return `(${monthsDef.long.join('|')})`; },\n parser: DateTimeFormatter.defaultRangeParser(monthsDef.long),\n formatter (val) {\n const d = convertToNativeDate(val);\n const month = d.getMonth();\n\n return (monthsDef.long[month]).toString();\n }\n },\n m: {\n // Two digit month of year like 01 for January\n name: 'm',\n index: 1,\n extract () { return '(\\\\d+)'; },\n parser (val) { return DateTimeFormatter.defaultNumberParser()(val) - 1; },\n formatter (val) {\n const d = convertToNativeDate(val);\n const month = d.getMonth();\n\n return pad(month + 1);\n }\n },\n y: {\n // Short year like 90 for 1990\n name: 'y',\n index: 0,\n extract () { return '(\\\\d{2})'; },\n parser (val) {\n let result;\n if (val) {\n const l = val.length;\n val = val.substring(l - 2, l);\n }\n let parsedVal = DateTimeFormatter.defaultNumberParser()(val);\n let presentDate = new Date();\n let presentYear = Math.trunc((presentDate.getFullYear()) / 100);\n\n result = `${presentYear}${parsedVal}`;\n\n if (convertToNativeDate(result).getFullYear() > presentDate.getFullYear()) {\n result = `${presentYear - 1}${parsedVal}`;\n }\n return convertToNativeDate(result).getFullYear();\n },\n formatter (val) {\n const d = convertToNativeDate(val);\n let year = d.getFullYear().toString();\n let l;\n\n if (year) {\n l = year.length;\n year = year.substring(l - 2, l);\n }\n\n return year;\n }\n },\n Y: {\n // Long year like 1990\n name: 'Y',\n index: 0,\n extract () { return '(\\\\d{4})'; },\n parser: DateTimeFormatter.defaultNumberParser(),\n formatter (val) {\n const d = convertToNativeDate(val);\n const year = d.getFullYear().toString();\n\n return year;\n }\n }\n };\n\n return definitions;\n};\n\n/*\n * The tokens which works internally is not user friendly in terms of memorizing the names. This gives a formal\n * definition to the informal notations.\n *\n * @return {Object} : Formal definition of the tokens\n */\nDateTimeFormatter.getTokenFormalNames = function () {\n const definitions = DateTimeFormatter.getTokenDefinitions();\n\n return {\n HOUR: definitions.H,\n HOUR_12: definitions.l,\n AMPM_UPPERCASE: definitions.p,\n AMPM_LOWERCASE: definitions.P,\n MINUTE: definitions.M,\n SECOND: definitions.S,\n SHORT_DAY: definitions.a,\n LONG_DAY: definitions.A,\n DAY_OF_MONTH: definitions.e,\n DAY_OF_MONTH_CONSTANT_WIDTH: definitions.d,\n SHORT_MONTH: definitions.b,\n LONG_MONTH: definitions.B,\n MONTH_OF_YEAR: definitions.m,\n SHORT_YEAR: definitions.y,\n LONG_YEAR: definitions.Y\n };\n};\n\n/*\n * This defines the rules and declares dependencies that resolves a date parameter (year, month etc) from\n * the date time parameter array.\n *\n * @return {Object} : An object that contains dependencies and a resolver function. The dependencies values are fed\n * to the resolver function in that particular sequence only.\n */\nDateTimeFormatter.tokenResolver = function () {\n const definitions = DateTimeFormatter.getTokenDefinitions();\n const defaultResolver = (...args) => { // eslint-disable-line require-jsdoc\n let i = 0;\n let arg;\n let targetParam;\n const l = args.length;\n\n for (; i < l; i++) {\n arg = args[i];\n if (args[i]) {\n targetParam = arg;\n }\n }\n\n if (!targetParam) { return null; }\n\n return targetParam[0].parser(targetParam[1]);\n };\n\n return {\n YEAR: [definitions.y, definitions.Y,\n defaultResolver\n ],\n MONTH: [definitions.b, definitions.B, definitions.m,\n defaultResolver\n ],\n DAY: [definitions.a, definitions.A, definitions.e, definitions.d,\n defaultResolver\n ],\n HOUR: [definitions.H, definitions.l, definitions.p, definitions.P,\n function (hourFormat24, hourFormat12, ampmLower, ampmUpper) {\n let targetParam;\n let amOrpm;\n let isPM;\n let val;\n\n if (hourFormat12 && (amOrpm = (ampmLower || ampmUpper))) {\n if (amOrpm[0].parser(amOrpm[1]) === 'pm') {\n isPM = true;\n }\n\n targetParam = hourFormat12;\n } else if (hourFormat12) {\n targetParam = hourFormat12;\n } else {\n targetParam = hourFormat24;\n }\n\n if (!targetParam) { return null; }\n\n val = targetParam[0].parser(targetParam[1]);\n if (isPM) {\n val += 12;\n }\n return val;\n }\n ],\n MINUTE: [definitions.M,\n defaultResolver\n ],\n SECOND: [definitions.S,\n defaultResolver\n ]\n };\n};\n\n/*\n * Finds token from the format rule specified by a user.\n * @param format {String} : The format of the input date specified by the user\n * @return {Array} : An array of objects which contains the available token and their occurence index in the format\n */\nDateTimeFormatter.findTokens = function (format) {\n const tokenPrefix = DateTimeFormatter.TOKEN_PREFIX;\n const definitions = DateTimeFormatter.getTokenDefinitions();\n const tokenLiterals = Object.keys(definitions);\n const occurrence = [];\n let i;\n let forwardChar;\n\n while ((i = format.indexOf(tokenPrefix, i + 1)) >= 0) {\n forwardChar = format[i + 1];\n if (tokenLiterals.indexOf(forwardChar) === -1) { continue; }\n\n occurrence.push({\n index: i,\n token: forwardChar\n });\n }\n\n return occurrence;\n};\n\n/*\n * Format any JS date to a specified date given by user.\n *\n * @param date {Number | Date} : The date object which is to be formatted\n * @param format {String} : The format using which the date will be formatted for display\n */\nDateTimeFormatter.formatAs = function (date, format) {\n const nDate = convertToNativeDate(date);\n const occurrence = DateTimeFormatter.findTokens(format);\n const definitions = DateTimeFormatter.getTokenDefinitions();\n let formattedStr = String(format);\n const tokenPrefix = DateTimeFormatter.TOKEN_PREFIX;\n let token;\n let formattedVal;\n let i;\n let l;\n\n for (i = 0, l = occurrence.length; i < l; i++) {\n token = occurrence[i].token;\n formattedVal = definitions[token].formatter(nDate);\n formattedStr = formattedStr.replace(new RegExp(tokenPrefix + token, 'g'), formattedVal);\n }\n\n return formattedStr;\n};\n\n/*\n * Parses the user specified date string to extract the date time params.\n *\n * @return {Array} : Value of date time params in an array [year, month, day, hour, minutes, seconds, milli]\n */\nDateTimeFormatter.prototype.parse = function (dateTimeStamp, options) {\n const tokenResolver = DateTimeFormatter.tokenResolver();\n const dtParams = this.extractTokenValue(dateTimeStamp);\n const dtParamSeq = DateTimeFormatter.DATETIME_PARAM_SEQUENCE;\n const noBreak = options && options.noBreak;\n const dtParamArr = [];\n const args = [];\n let resolverKey;\n let resolverParams;\n let resolverFn;\n let val;\n let i;\n let param;\n let resolvedVal;\n let l;\n let result = [];\n\n for (resolverKey in tokenResolver) {\n if (!{}.hasOwnProperty.call(tokenResolver, resolverKey)) { continue; }\n\n args.length = 0;\n resolverParams = tokenResolver[resolverKey];\n resolverFn = resolverParams.splice(resolverParams.length - 1, 1)[0];\n\n for (i = 0, l = resolverParams.length; i < l; i++) {\n param = resolverParams[i];\n val = dtParams[param.name];\n\n if (val === undefined) {\n args.push(null);\n } else {\n args.push([param, val]);\n }\n }\n\n resolvedVal = resolverFn.apply(this, args);\n\n if ((resolvedVal === undefined || resolvedVal === null) && !noBreak) {\n break;\n }\n\n dtParamArr[dtParamSeq[resolverKey]] = resolvedVal;\n }\n\n if (dtParamArr.length && this.checkIfOnlyYear(dtParamArr.length))\n {\n result.unshift(dtParamArr[0], 0, 1); }\n else {\n result.unshift(...dtParamArr);\n }\n\n return result;\n};\n\n/*\n * Extract the value of the token from user specified date time string.\n *\n * @return {Object} : An key value pair which contains the tokens as key and value as pair\n */\nDateTimeFormatter.prototype.extractTokenValue = function (dateTimeStamp) {\n const format = this.format;\n const definitions = DateTimeFormatter.getTokenDefinitions();\n const tokenPrefix = DateTimeFormatter.TOKEN_PREFIX;\n const occurrence = DateTimeFormatter.findTokens(format);\n const tokenObj = {};\n\n let lastOccurrenceIndex;\n let occObj;\n let occIndex;\n let targetText;\n let regexFormat;\n\n let l;\n let i;\n\n regexFormat = String(format);\n\n const tokenArr = occurrence.map(obj => obj.token);\n const occurrenceLength = occurrence.length;\n for (i = occurrenceLength - 1; i >= 0; i--) {\n occIndex = occurrence[i].index;\n\n if (occIndex + 1 === regexFormat.length - 1) {\n lastOccurrenceIndex = occIndex;\n continue;\n }\n\n if (lastOccurrenceIndex === undefined) {\n lastOccurrenceIndex = regexFormat.length;\n }\n\n targetText = regexFormat.substring(occIndex + 2, lastOccurrenceIndex);\n regexFormat = regexFormat.substring(0, occIndex + 2) +\n RegExp.escape(targetText) +\n regexFormat.substring(lastOccurrenceIndex, regexFormat.length);\n\n lastOccurrenceIndex = occIndex;\n }\n\n for (i = 0; i < occurrenceLength; i++) {\n occObj = occurrence[i];\n regexFormat = regexFormat.replace(tokenPrefix + occObj.token, definitions[occObj.token].extract());\n }\n\n const extractValues = dateTimeStamp.match(new RegExp(regexFormat)) || [];\n extractValues.shift();\n\n for (i = 0, l = tokenArr.length; i < l; i++) {\n tokenObj[tokenArr[i]] = extractValues[i];\n }\n return tokenObj;\n};\n\n/*\n * Give back the JS native date formed from user specified date string\n *\n * @return {Date} : Native JS Date\n */\nDateTimeFormatter.prototype.getNativeDate = function (dateTimeStamp) {\n let date = null;\n if (Number.isFinite(dateTimeStamp)) {\n date = new Date(dateTimeStamp);\n } else if (!this.format && Date.parse(dateTimeStamp)) {\n date = new Date(dateTimeStamp);\n }\n else {\n const dtParams = this.dtParams = this.parse(dateTimeStamp);\n if (dtParams.length) {\n this.nativeDate = new Date(...dtParams);\n date = this.nativeDate;\n }\n }\n return date;\n};\n\nDateTimeFormatter.prototype.checkIfOnlyYear = function(len) {\n return len === 1 && this.format.match(/y|Y/g).length;\n};\n\n/*\n * Represents JS native date to a user specified format.\n *\n * @param format {String} : The format according to which the date is to be represented\n * @return {String} : The formatted date string\n */\nDateTimeFormatter.prototype.formatAs = function (format, dateTimeStamp) {\n let nativeDate;\n\n if (dateTimeStamp) {\n nativeDate = this.nativeDate = this.getNativeDate(dateTimeStamp);\n } else if (!(nativeDate = this.nativeDate)) {\n nativeDate = this.getNativeDate(dateTimeStamp);\n }\n\n return DateTimeFormatter.formatAs(nativeDate, format);\n};\n\nexport { DateTimeFormatter as default };\n","/**\n * The utility function to calculate major column.\n *\n * @param {Object} store - The store object.\n * @return {Function} Returns the push function.\n */\nexport default (store) => {\n let i = 0;\n return (...fields) => {\n fields.forEach((val, fieldIndex) => {\n if (!(store[fieldIndex] instanceof Array)) {\n store[fieldIndex] = Array.from({ length: i });\n }\n store[fieldIndex].push(val);\n });\n i++;\n };\n};\n","/* eslint-disable */\nconst OBJECTSTRING = 'object';\nconst objectToStrFn = Object.prototype.toString;\nconst objectToStr = '[object Object]';\nconst arrayToStr = '[object Array]';\n\nfunction checkCyclicRef(obj, parentArr) {\n let i = parentArr.length;\n let bIndex = -1;\n\n while (i) {\n if (obj === parentArr[i]) {\n bIndex = i;\n return bIndex;\n }\n i -= 1;\n }\n\n return bIndex;\n}\n\nfunction merge(obj1, obj2, skipUndef, tgtArr, srcArr) {\n var item,\n srcVal,\n tgtVal,\n str,\n cRef;\n // check whether obj2 is an array\n // if array then iterate through it's index\n // **** MOOTOOLS precution\n\n if (!srcArr) {\n tgtArr = [obj1];\n srcArr = [obj2];\n }\n else {\n tgtArr.push(obj1);\n srcArr.push(obj2);\n }\n\n if (obj2 instanceof Array) {\n for (item = 0; item < obj2.length; item += 1) {\n try {\n srcVal = obj1[item];\n tgtVal = obj2[item];\n }\n catch (e) {\n continue;\n }\n\n if (typeof tgtVal !== OBJECTSTRING) {\n if (!(skipUndef && tgtVal === undefined)) {\n obj1[item] = tgtVal;\n }\n }\n else {\n if (srcVal === null || typeof srcVal !== OBJECTSTRING) {\n srcVal = obj1[item] = tgtVal instanceof Array ? [] : {};\n }\n cRef = checkCyclicRef(tgtVal, srcArr);\n if (cRef !== -1) {\n srcVal = obj1[item] = tgtArr[cRef];\n }\n else {\n merge(srcVal, tgtVal, skipUndef, tgtArr, srcArr);\n }\n }\n }\n }\n else {\n for (item in obj2) {\n try {\n srcVal = obj1[item];\n tgtVal = obj2[item];\n }\n catch (e) {\n continue;\n }\n\n if (tgtVal !== null && typeof tgtVal === OBJECTSTRING) {\n // Fix for issue BUG: FWXT-602\n // IE < 9 Object.prototype.toString.call(null) gives\n // '[object Object]' instead of '[object Null]'\n // that's why null value becomes Object in IE < 9\n str = objectToStrFn.call(tgtVal);\n if (str === objectToStr) {\n if (srcVal === null || typeof srcVal !== OBJECTSTRING) {\n srcVal = obj1[item] = {};\n }\n cRef = checkCyclicRef(tgtVal, srcArr);\n if (cRef !== -1) {\n srcVal = obj1[item] = tgtArr[cRef];\n }\n else {\n merge(srcVal, tgtVal, skipUndef, tgtArr, srcArr);\n }\n }\n else if (str === arrayToStr) {\n if (srcVal === null || !(srcVal instanceof Array)) {\n srcVal = obj1[item] = [];\n }\n cRef = checkCyclicRef(tgtVal, srcArr);\n if (cRef !== -1) {\n srcVal = obj1[item] = tgtArr[cRef];\n }\n else {\n merge(srcVal, tgtVal, skipUndef, tgtArr, srcArr);\n }\n }\n else {\n obj1[item] = tgtVal;\n }\n }\n else {\n if (skipUndef && tgtVal === undefined) {\n continue;\n }\n obj1[item] = tgtVal;\n }\n }\n }\n return obj1;\n}\n\n\nfunction extend2 (obj1, obj2, skipUndef) {\n //if none of the arguments are object then return back\n if (typeof obj1 !== OBJECTSTRING && typeof obj2 !== OBJECTSTRING) {\n return null;\n }\n\n if (typeof obj2 !== OBJECTSTRING || obj2 === null) {\n return obj1;\n }\n\n if (typeof obj1 !== OBJECTSTRING) {\n obj1 = obj2 instanceof Array ? [] : {};\n }\n merge(obj1, obj2, skipUndef);\n return obj1;\n}\n\nexport { extend2 as default };\n","import { DataFormat } from '../enums';\n\n/**\n * Checks whether the value is an array.\n *\n * @param {*} val - The value to be checked.\n * @return {boolean} Returns true if the value is an array otherwise returns false.\n */\nexport function isArray (val) {\n return Array.isArray(val);\n}\n\n/**\n * Checks whether the value is an object.\n *\n * @param {*} val - The value to be checked.\n * @return {boolean} Returns true if the value is an object otherwise returns false.\n */\nexport function isObject (val) {\n return val === Object(val);\n}\n\n/**\n * Checks whether the value is a string value.\n *\n * @param {*} val - The value to be checked.\n * @return {boolean} Returns true if the value is a string value otherwise returns false.\n */\nexport function isString (val) {\n return typeof val === 'string';\n}\n\n/**\n * Checks whether the value is callable.\n *\n * @param {*} val - The value to be checked.\n * @return {boolean} Returns true if the value is callable otherwise returns false.\n */\nexport function isCallable (val) {\n return typeof val === 'function';\n}\n\n/**\n * Returns the unique values from the input array.\n *\n * @param {Array} data - The input array.\n * @return {Array} Returns a new array of unique values.\n */\nexport function uniqueValues (data) {\n return [...new Set(data)];\n}\n\nexport const getUniqueId = () => `id-${new Date().getTime()}${Math.round(Math.random() * 10000)}`;\n\n/**\n * Checks Whether two arrays have same content.\n *\n * @param {Array} arr1 - The first array.\n * @param {Array} arr2 - The 2nd array.\n * @return {boolean} Returns whether two array have same content.\n */\nexport function isArrEqual(arr1, arr2) {\n if (!isArray(arr1) || !isArray(arr2)) {\n return arr1 === arr2;\n }\n\n if (arr1.length !== arr2.length) {\n return false;\n }\n\n for (let i = 0; i < arr1.length; i++) {\n if (arr1[i] !== arr2[i]) {\n return false;\n }\n }\n\n return true;\n}\n\n/**\n * It is the default number format function for the measure field type.\n *\n * @param {any} val - The input value.\n * @return {number} Returns a number value.\n */\nexport function formatNumber(val) {\n return val;\n}\n\n/**\n * Returns the detected data format.\n *\n * @param {any} data - The input data to be tested.\n * @return {string} Returns the data format name.\n */\nexport const detectDataFormat = (data) => {\n if (isString(data)) {\n return DataFormat.DSV_STR;\n } else if (isArray(data) && isArray(data[0])) {\n return DataFormat.DSV_ARR;\n } else if (isArray(data) && (data.length === 0 || isObject(data[0]))) {\n return DataFormat.FLAT_JSON;\n }\n return null;\n};\n","import { FieldType } from './enums';\nimport { getUniqueId } from './utils';\n\nconst fieldStore = {\n data: {},\n\n createNamespace (fieldArr, name) {\n const dataId = name || getUniqueId();\n\n this.data[dataId] = {\n name: dataId,\n fields: fieldArr,\n\n fieldsObj () {\n let fieldsObj = this._cachedFieldsObj;\n\n if (!fieldsObj) {\n fieldsObj = this._cachedFieldsObj = {};\n this.fields.forEach((field) => {\n fieldsObj[field.name()] = field;\n });\n }\n return fieldsObj;\n },\n getMeasure () {\n let measureFields = this._cachedMeasure;\n\n if (!measureFields) {\n measureFields = this._cachedMeasure = {};\n this.fields.forEach((field) => {\n if (field.schema().type === FieldType.MEASURE) {\n measureFields[field.name()] = field;\n }\n });\n }\n return measureFields;\n },\n getDimension () {\n let dimensionFields = this._cachedDimension;\n\n if (!this._cachedDimension) {\n dimensionFields = this._cachedDimension = {};\n this.fields.forEach((field) => {\n if (field.schema().type === FieldType.DIMENSION) {\n dimensionFields[field.name()] = field;\n }\n });\n }\n return dimensionFields;\n },\n };\n return this.data[dataId];\n },\n};\n\nexport default fieldStore;\n","/**\n * The wrapper class on top of the primitive value of a field.\n *\n * @todo Need to have support for StringValue, NumberValue, DateTimeValue\n * and GeoValue. These types should expose predicate API mostly.\n */\nclass Value {\n\n /**\n * Creates new Value instance.\n *\n * @param {*} val - the primitive value from the field cell.\n * @param {string | Field} field - The field from which the value belongs.\n */\n constructor (val, field) {\n Object.defineProperty(this, '_value', {\n enumerable: false,\n configurable: false,\n writable: false,\n value: val\n });\n\n this.field = field;\n }\n\n /**\n * Returns the field value.\n *\n * @return {*} Returns the current value.\n */\n get value () {\n return this._value;\n }\n\n /**\n * Converts to human readable string.\n *\n * @override\n * @return {string} Returns a human readable string of the field value.\n *\n */\n toString () {\n return String(this.value);\n }\n\n /**\n * Returns the value of the field.\n *\n * @override\n * @return {*} Returns the field value.\n */\n valueOf () {\n return this.value;\n }\n}\n\nexport default Value;\n","/**\n * Iterates through the diffSet array and call the callback with the current\n * index.\n *\n * @param {string} rowDiffset - The row diffset string e.g. '0-4,6,10-13'.\n * @param {Function} callback - The callback function to be called with every index.\n */\nexport function rowDiffsetIterator (rowDiffset, callback) {\n if (rowDiffset.length > 0) {\n const rowDiffArr = rowDiffset.split(',');\n rowDiffArr.forEach((diffStr) => {\n const diffStsArr = diffStr.split('-');\n const start = +(diffStsArr[0]);\n const end = +(diffStsArr[1] || diffStsArr[0]);\n if (end >= start) {\n for (let i = start; i <= end; i += 1) {\n callback(i);\n }\n }\n });\n }\n}\n","/**\n * A parser to parser null, undefined, invalid and NIL values.\n *\n * @public\n * @class\n */\nclass InvalidAwareTypes {\n /**\n * Static method which gets/sets the invalid value registry.\n *\n * @public\n * @param {Object} config - The custom configuration supplied by user.\n * @return {Object} Returns the invalid values registry.\n */\n static invalidAwareVals (config) {\n if (!config) {\n return InvalidAwareTypes._invalidAwareValsMap;\n }\n return Object.assign(InvalidAwareTypes._invalidAwareValsMap, config);\n }\n\n /**\n * Initialize a new instance.\n *\n * @public\n * @param {string} value - The value of the invalid data type.\n */\n constructor (value) {\n this._value = value;\n }\n\n /**\n * Returns the current value of the instance.\n *\n * @public\n * @return {string} Returns the value of the invalid data type.\n */\n value () {\n return this._value;\n }\n\n /**\n * Returns the current value of the instance in string format.\n *\n * @public\n * @return {string} Returns the value of the invalid data type.\n */\n toString () {\n return String(this._value);\n }\n\n static isInvalid(val) {\n return (val instanceof InvalidAwareTypes) || !!InvalidAwareTypes.invalidAwareVals()[val];\n }\n\n static getInvalidType(val) {\n return val instanceof InvalidAwareTypes ? val : InvalidAwareTypes.invalidAwareVals()[val];\n }\n}\n\n/**\n * Enums for Invalid types.\n */\nInvalidAwareTypes.NULL = new InvalidAwareTypes('null');\nInvalidAwareTypes.NA = new InvalidAwareTypes('na');\nInvalidAwareTypes.NIL = new InvalidAwareTypes('nil');\n\n/**\n * Default Registry for mapping the invalid values.\n *\n * @private\n */\nInvalidAwareTypes._invalidAwareValsMap = {\n invalid: InvalidAwareTypes.NA,\n nil: InvalidAwareTypes.NIL,\n null: InvalidAwareTypes.NULL,\n undefined: InvalidAwareTypes.NA\n};\n\nexport default InvalidAwareTypes;\n","/**\n * The helper function that returns an array of common schema\n * from two fieldStore instances.\n *\n * @param {FieldStore} fs1 - The first FieldStore instance.\n * @param {FieldStore} fs2 - The second FieldStore instance.\n * @return {Array} An array containing the common schema.\n */\nexport function getCommonSchema (fs1, fs2) {\n const retArr = [];\n const fs1Arr = [];\n fs1.fields.forEach((field) => {\n fs1Arr.push(field.schema().name);\n });\n fs2.fields.forEach((field) => {\n if (fs1Arr.indexOf(field.schema().name) !== -1) {\n retArr.push(field.schema().name);\n }\n });\n return retArr;\n}\n","export { DataFormat, FilteringMode } from '../enums';\n/**\n * The event name for data propagation.\n */\nexport const PROPAGATION = 'propagation';\n\n/**\n * The name of the unique row id column in DataModel.\n */\nexport const ROW_ID = '__id__';\n\n/**\n * The enums for operation names performed on DataModel.\n */\nexport const DM_DERIVATIVES = {\n SELECT: 'select',\n PROJECT: 'project',\n GROUPBY: 'group',\n COMPOSE: 'compose',\n CAL_VAR: 'calculatedVariable',\n BIN: 'bin'\n};\n\nexport const JOINS = {\n CROSS: 'cross',\n LEFTOUTER: 'leftOuter',\n RIGHTOUTER: 'rightOuter',\n NATURAL: 'natural',\n FULLOUTER: 'fullOuter'\n};\n\nexport const LOGICAL_OPERATORS = {\n AND: 'and',\n OR: 'or'\n};\n","import DataModel from '../datamodel';\nimport { extend2 } from '../utils';\nimport { getCommonSchema } from './get-common-schema';\nimport { rowDiffsetIterator } from './row-diffset-iterator';\nimport { JOINS } from '../constants';\nimport { prepareJoinData } from '../helper';\n/**\n * Default filter function for crossProduct.\n *\n * @return {boolean} Always returns true.\n */\nfunction defaultFilterFn() { return true; }\n\n/**\n * Implementation of cross product operation between two DataModel instances.\n * It internally creates the data and schema for the new DataModel.\n *\n * @param {DataModel} dataModel1 - The left DataModel instance.\n * @param {DataModel} dataModel2 - The right DataModel instance.\n * @param {Function} filterFn - The filter function which is used to filter the tuples.\n * @param {boolean} [replaceCommonSchema=false] - The flag if the common name schema should be there.\n * @return {DataModel} Returns The newly created DataModel instance from the crossProduct operation.\n */\nexport function crossProduct (dm1, dm2, filterFn, replaceCommonSchema = false, jointype = JOINS.CROSS) {\n const schema = [];\n const data = [];\n const applicableFilterFn = filterFn || defaultFilterFn;\n const dm1FieldStore = dm1.getFieldspace();\n const dm2FieldStore = dm2.getFieldspace();\n const dm1FieldStoreName = dm1FieldStore.name;\n const dm2FieldStoreName = dm2FieldStore.name;\n const name = `${dm1FieldStore.name}.${dm2FieldStore.name}`;\n const commonSchemaList = getCommonSchema(dm1FieldStore, dm2FieldStore);\n\n if (dm1FieldStoreName === dm2FieldStoreName) {\n throw new Error('DataModels must have different alias names');\n }\n // Here prepare the schema\n dm1FieldStore.fields.forEach((field) => {\n const tmpSchema = extend2({}, field.schema());\n if (commonSchemaList.indexOf(tmpSchema.name) !== -1 && !replaceCommonSchema) {\n tmpSchema.name = `${dm1FieldStore.name}.${tmpSchema.name}`;\n }\n schema.push(tmpSchema);\n });\n dm2FieldStore.fields.forEach((field) => {\n const tmpSchema = extend2({}, field.schema());\n if (commonSchemaList.indexOf(tmpSchema.name) !== -1) {\n if (!replaceCommonSchema) {\n tmpSchema.name = `${dm2FieldStore.name}.${tmpSchema.name}`;\n schema.push(tmpSchema);\n }\n } else {\n schema.push(tmpSchema);\n }\n });\n\n // Here prepare Data\n rowDiffsetIterator(dm1._rowDiffset, (i) => {\n let rowAdded = false;\n let rowPosition;\n rowDiffsetIterator(dm2._rowDiffset, (ii) => {\n const tuple = [];\n const userArg = {};\n userArg[dm1FieldStoreName] = {};\n userArg[dm2FieldStoreName] = {};\n dm1FieldStore.fields.forEach((field) => {\n tuple.push(field.partialField.data[i]);\n userArg[dm1FieldStoreName][field.name()] = field.partialField.data[i];\n });\n dm2FieldStore.fields.forEach((field) => {\n if (!(commonSchemaList.indexOf(field.schema().name) !== -1 && replaceCommonSchema)) {\n tuple.push(field.partialField.data[ii]);\n }\n userArg[dm2FieldStoreName][field.name()] = field.partialField.data[ii];\n });\n\n let cachedStore = {};\n let cloneProvider1 = () => dm1.detachedRoot();\n let cloneProvider2 = () => dm2.detachedRoot();\n\n const dm1Fields = prepareJoinData(userArg[dm1FieldStoreName]);\n const dm2Fields = prepareJoinData(userArg[dm2FieldStoreName]);\n if (applicableFilterFn(dm1Fields, dm2Fields, cloneProvider1, cloneProvider2, cachedStore)) {\n const tupleObj = {};\n tuple.forEach((cellVal, iii) => {\n tupleObj[schema[iii].name] = cellVal;\n });\n if (rowAdded && JOINS.CROSS !== jointype) {\n data[rowPosition] = tupleObj;\n }\n else {\n data.push(tupleObj);\n rowAdded = true;\n rowPosition = i;\n }\n } else if ((jointype === JOINS.LEFTOUTER || jointype === JOINS.RIGHTOUTER) && !rowAdded) {\n const tupleObj = {};\n let len = dm1FieldStore.fields.length - 1;\n tuple.forEach((cellVal, iii) => {\n if (iii <= len) {\n tupleObj[schema[iii].name] = cellVal;\n }\n else {\n tupleObj[schema[iii].name] = null;\n }\n });\n rowAdded = true;\n rowPosition = i;\n data.push(tupleObj);\n }\n });\n });\n\n return new DataModel(data, schema, { name });\n}\n","/**\n * The default sort function.\n *\n * @param {*} a - The first value.\n * @param {*} b - The second value.\n * @return {number} Returns the comparison result e.g. 1 or 0 or -1.\n */\nfunction defSortFn (a, b) {\n const a1 = `${a}`;\n const b1 = `${b}`;\n if (a1 < b1) {\n return -1;\n }\n if (a1 > b1) {\n return 1;\n }\n return 0;\n}\n\n/**\n * The helper function for merge sort which creates the sorted array\n * from the two halves of the input array.\n *\n * @param {Array} arr - The target array which needs to be merged.\n * @param {number} lo - The starting index of the first array half.\n * @param {number} mid - The ending index of the first array half.\n * @param {number} hi - The ending index of the second array half.\n * @param {Function} sortFn - The sort function.\n */\nfunction merge (arr, lo, mid, hi, sortFn) {\n const mainArr = arr;\n const auxArr = [];\n for (let i = lo; i <= hi; i += 1) {\n auxArr[i] = mainArr[i];\n }\n let a = lo;\n let b = mid + 1;\n\n for (let i = lo; i <= hi; i += 1) {\n if (a > mid) {\n mainArr[i] = auxArr[b];\n b += 1;\n } else if (b > hi) {\n mainArr[i] = auxArr[a];\n a += 1;\n } else if (sortFn(auxArr[a], auxArr[b]) <= 0) {\n mainArr[i] = auxArr[a];\n a += 1;\n } else {\n mainArr[i] = auxArr[b];\n b += 1;\n }\n }\n}\n\n/**\n * The helper function for merge sort which would be called\n * recursively for sorting the array halves.\n *\n * @param {Array} arr - The target array which needs to be sorted.\n * @param {number} lo - The starting index of the array half.\n * @param {number} hi - The ending index of the array half.\n * @param {Function} sortFn - The sort function.\n * @return {Array} Returns the target array itself.\n */\nfunction sort (arr, lo, hi, sortFn) {\n if (hi === lo) { return arr; }\n\n const mid = lo + Math.floor((hi - lo) / 2);\n sort(arr, lo, mid, sortFn);\n sort(arr, mid + 1, hi, sortFn);\n merge(arr, lo, mid, hi, sortFn);\n\n return arr;\n}\n\n/**\n * The implementation of merge sort.\n * It is used in DataModel for stable sorting as it is not sure\n * what the sorting algorithm used by browsers is stable or not.\n *\n * @param {Array} arr - The target array which needs to be sorted.\n * @param {Function} [sortFn=defSortFn] - The sort function.\n * @return {Array} Returns the input array itself in sorted order.\n */\nexport function mergeSort (arr, sortFn = defSortFn) {\n if (arr.length > 1) {\n sort(arr, 0, arr.length - 1, sortFn);\n }\n return arr;\n}\n","import { DimensionSubtype, MeasureSubtype } from '../enums';\nimport { rowDiffsetIterator } from './row-diffset-iterator';\nimport { mergeSort } from './merge-sort';\nimport { fieldInSchema } from '../helper';\nimport { isCallable, isArray, } from '../utils';\n/**\n * Generates the sorting functions to sort the data of a DataModel instance\n * according to the input data type.\n *\n * @param {string} dataType - The data type e.g. 'measure', 'datetime' etc.\n * @param {string} sortType - The sorting order i.e. 'asc' or 'desc'.\n * @param {integer} index - The index of the data which will be sorted.\n * @return {Function} Returns the the sorting function.\n */\nfunction getSortFn (dataType, sortType, index) {\n let retFunc;\n switch (dataType) {\n case MeasureSubtype.CONTINUOUS:\n case DimensionSubtype.TEMPORAL:\n if (sortType === 'desc') {\n retFunc = (a, b) => b[index] - a[index];\n } else {\n retFunc = (a, b) => a[index] - b[index];\n }\n break;\n default:\n retFunc = (a, b) => {\n const a1 = `${a[index]}`;\n const b1 = `${b[index]}`;\n if (a1 < b1) {\n return sortType === 'desc' ? 1 : -1;\n }\n if (a1 > b1) {\n return sortType === 'desc' ? -1 : 1;\n }\n return 0;\n };\n }\n return retFunc;\n}\n\n/**\n * Groups the data according to the specified target field.\n *\n * @param {Array} data - The input data array.\n * @param {number} fieldIndex - The target field index within schema array.\n * @return {Array} Returns an array containing the grouped data.\n */\nfunction groupData(data, fieldIndex) {\n const hashMap = new Map();\n const groupedData = [];\n\n data.forEach((datum) => {\n const fieldVal = datum[fieldIndex];\n if (hashMap.has(fieldVal)) {\n groupedData[hashMap.get(fieldVal)][1].push(datum);\n } else {\n groupedData.push([fieldVal, [datum]]);\n hashMap.set(fieldVal, groupedData.length - 1);\n }\n });\n\n return groupedData;\n}\n\n/**\n * Creates the argument value used for sorting function when sort is done\n * with another fields.\n *\n * @param {Array} groupedDatum - The grouped datum for a single dimension field value.\n * @param {Array} targetFields - An array of the sorting fields.\n * @param {Array} targetFieldDetails - An array of the sorting field details in schema.\n * @return {Object} Returns an object containing the value of sorting fields and the target field name.\n */\nfunction createSortingFnArg(groupedDatum, targetFields, targetFieldDetails) {\n const arg = {\n label: groupedDatum[0]\n };\n\n targetFields.reduce((acc, next, idx) => {\n acc[next] = groupedDatum[1].map(datum => datum[targetFieldDetails[idx].index]);\n return acc;\n }, arg);\n\n return arg;\n}\n\n/**\n * Sorts the data before return in dataBuilder.\n *\n * @param {Object} dataObj - An object containing the data and schema.\n * @param {Array} sortingDetails - An array containing the sorting configs.\n */\nfunction sortData(dataObj, sortingDetails) {\n const { data, schema } = dataObj;\n let fieldName;\n let sortMeta;\n let fDetails;\n let i = sortingDetails.length - 1;\n\n for (; i >= 0; i--) {\n fieldName = sortingDetails[i][0];\n sortMeta = sortingDetails[i][1];\n fDetails = fieldInSchema(schema, fieldName);\n\n if (!fDetails) {\n // eslint-disable-next-line no-continue\n continue;\n }\n\n if (isCallable(sortMeta)) {\n // eslint-disable-next-line no-loop-func\n mergeSort(data, (a, b) => sortMeta(a[fDetails.index], b[fDetails.index]));\n } else if (isArray(sortMeta)) {\n const groupedData = groupData(data, fDetails.index);\n const sortingFn = sortMeta[sortMeta.length - 1];\n const targetFields = sortMeta.slice(0, sortMeta.length - 1);\n const targetFieldDetails = targetFields.map(f => fieldInSchema(schema, f));\n\n groupedData.forEach((groupedDatum) => {\n groupedDatum.push(createSortingFnArg(groupedDatum, targetFields, targetFieldDetails));\n });\n\n mergeSort(groupedData, (a, b) => {\n const m = a[2];\n const n = b[2];\n return sortingFn(m, n);\n });\n\n // Empty the array\n data.length = 0;\n groupedData.forEach((datum) => {\n data.push(...datum[1]);\n });\n } else {\n sortMeta = String(sortMeta).toLowerCase() === 'desc' ? 'desc' : 'asc';\n mergeSort(data, getSortFn(fDetails.type, sortMeta, fDetails.index));\n }\n }\n\n dataObj.uids = [];\n data.forEach((value) => {\n dataObj.uids.push(value.pop());\n });\n}\n\n\n/**\n * Builds the actual data array.\n *\n * @param {Array} fieldStore - An array of field.\n * @param {string} rowDiffset - A string consisting of which rows to be included eg. '0-2,4,6';\n * @param {string} colIdentifier - A string consisting of the details of which column\n * to be included eg 'date,sales,profit';\n * @param {Object} sortingDetails - An object containing the sorting details of the DataModel instance.\n * @param {Object} options - The options required to create the type of the data.\n * @return {Object} Returns an object containing the multidimensional array and the relative schema.\n */\nexport function dataBuilder (fieldStore, rowDiffset, colIdentifier, sortingDetails, options) {\n const defOptions = {\n addUid: false,\n columnWise: false\n };\n options = Object.assign({}, defOptions, options);\n\n const retObj = {\n schema: [],\n data: [],\n uids: []\n };\n const addUid = options.addUid;\n const reqSorting = sortingDetails && sortingDetails.length > 0;\n // It stores the fields according to the colIdentifier argument\n const tmpDataArr = [];\n // Stores the fields according to the colIdentifier argument\n const colIArr = colIdentifier.split(',');\n\n colIArr.forEach((colName) => {\n for (let i = 0; i < fieldStore.length; i += 1) {\n if (fieldStore[i].name() === colName) {\n tmpDataArr.push(fieldStore[i]);\n break;\n }\n }\n });\n\n // Inserts the schema to the schema object\n tmpDataArr.forEach((field) => {\n /** @todo Need to use extend2 here otherwise user can overwrite the schema. */\n retObj.schema.push(field.schema());\n });\n\n if (addUid) {\n retObj.schema.push({\n name: 'uid',\n type: 'identifier'\n });\n }\n\n rowDiffsetIterator(rowDiffset, (i) => {\n retObj.data.push([]);\n const insertInd = retObj.data.length - 1;\n let start = 0;\n tmpDataArr.forEach((field, ii) => {\n retObj.data[insertInd][ii + start] = field.partialField.data[i];\n });\n if (addUid) {\n retObj.data[insertInd][tmpDataArr.length] = i;\n }\n // Creates an array of unique identifiers for each row\n retObj.uids.push(i);\n\n // If sorting needed then there is the need to expose the index\n // mapping from the old index to its new index\n if (reqSorting) { retObj.data[insertInd].push(i); }\n });\n\n // Handles the sort functionality\n if (reqSorting) {\n sortData(retObj, sortingDetails);\n }\n\n if (options.columnWise) {\n const tmpData = Array(...Array(retObj.schema.length)).map(() => []);\n retObj.data.forEach((tuple) => {\n tuple.forEach((data, i) => {\n tmpData[i].push(data);\n });\n });\n retObj.data = tmpData;\n }\n\n return retObj;\n}\n","import DataModel from '../datamodel';\nimport { extend2 } from '../utils';\nimport { rowDiffsetIterator } from './row-diffset-iterator';\nimport { isArrEqual } from '../utils/helper';\n\n/**\n * Performs the union operation between two dm instances.\n *\n * @todo Fix the conflicts between union and difference terminology here.\n *\n * @param {dm} dm1 - The first dm instance.\n * @param {dm} dm2 - The second dm instance.\n * @return {dm} Returns the newly created dm after union operation.\n */\nexport function difference (dm1, dm2) {\n const hashTable = {};\n const schema = [];\n const schemaNameArr = [];\n const data = [];\n const dm1FieldStore = dm1.getFieldspace();\n const dm2FieldStore = dm2.getFieldspace();\n const dm1FieldStoreFieldObj = dm1FieldStore.fieldsObj();\n const dm2FieldStoreFieldObj = dm2FieldStore.fieldsObj();\n const name = `${dm1FieldStore.name} union ${dm2FieldStore.name}`;\n\n // For union the columns should match otherwise return a clone of the dm1\n if (!isArrEqual(dm1._colIdentifier.split(',').sort(), dm2._colIdentifier.split(',').sort())) {\n return null;\n }\n\n // Prepare the schema\n (dm1._colIdentifier.split(',')).forEach((fieldName) => {\n const field = dm1FieldStoreFieldObj[fieldName];\n schema.push(extend2({}, field.schema()));\n schemaNameArr.push(field.schema().name);\n });\n\n /**\n * The helper function to create the data.\n *\n * @param {dm} dm - The dm instance for which the data is inserted.\n * @param {Object} fieldsObj - The fieldStore object format.\n * @param {boolean} addData - If true only tuple will be added to the data.\n */\n function prepareDataHelper(dm, fieldsObj, addData) {\n rowDiffsetIterator(dm._rowDiffset, (i) => {\n const tuple = {};\n let hashData = '';\n schemaNameArr.forEach((schemaName) => {\n const value = fieldsObj[schemaName].partialField.data[i];\n hashData += `-${value}`;\n tuple[schemaName] = value;\n });\n if (!hashTable[hashData]) {\n if (addData) { data.push(tuple); }\n hashTable[hashData] = true;\n }\n });\n }\n\n // Prepare the data\n prepareDataHelper(dm2, dm2FieldStoreFieldObj, false);\n prepareDataHelper(dm1, dm1FieldStoreFieldObj, true);\n\n return new DataModel(data, schema, { name });\n}\n\n","import { isArray } from '../utils';\nimport InvalidAwareTypes from '../invalid-aware-types';\n\n\nfunction getFilteredValues(arr) {\n return arr.filter(item => !(item instanceof InvalidAwareTypes));\n}\n/**\n * Reducer function that returns the sum of all the values.\n *\n * @public\n * @param {Array.} arr - The input array.\n * @return {number} Returns the sum of the array.\n */\nfunction sum (arr) {\n if (isArray(arr) && !(arr[0] instanceof Array)) {\n const filteredNumber = getFilteredValues(arr);\n const totalSum = filteredNumber.length ?\n filteredNumber.reduce((acc, curr) => acc + curr, 0)\n : InvalidAwareTypes.NULL;\n return totalSum;\n }\n return InvalidAwareTypes.NULL;\n}\n\n/**\n * Reducer function that returns the average of all the values.\n *\n * @public\n * @param {Array.} arr - The input array.\n * @return {number} Returns the mean value of the array.\n */\nfunction avg (arr) {\n if (isArray(arr) && !(arr[0] instanceof Array)) {\n const totalSum = sum(arr);\n const len = arr.length || 1;\n return (Number.isNaN(totalSum) || totalSum instanceof InvalidAwareTypes) ?\n InvalidAwareTypes.NULL : totalSum / len;\n }\n return InvalidAwareTypes.NULL;\n}\n\n/**\n * Reducer function that gives the min value amongst all the values.\n *\n * @public\n * @param {Array.} arr - The input array.\n * @return {number} Returns the minimum value of the array.\n */\nfunction min (arr) {\n if (isArray(arr) && !(arr[0] instanceof Array)) {\n // Filter out undefined, null and NaN values\n const filteredValues = getFilteredValues(arr);\n\n return (filteredValues.length) ? Math.min(...filteredValues) : InvalidAwareTypes.NULL;\n }\n return InvalidAwareTypes.NULL;\n}\n\n/**\n * Reducer function that gives the max value amongst all the values.\n *\n * @public\n * @param {Array.} arr - The input array.\n * @return {number} Returns the maximum value of the array.\n */\nfunction max (arr) {\n if (isArray(arr) && !(arr[0] instanceof Array)) {\n // Filter out undefined, null and NaN values\n const filteredValues = getFilteredValues(arr);\n\n return (filteredValues.length) ? Math.max(...filteredValues) : InvalidAwareTypes.NULL;\n }\n return InvalidAwareTypes.NULL;\n}\n\n/**\n * Reducer function that gives the first value of the array.\n *\n * @public\n * @param {Array} arr - The input array.\n * @return {number} Returns the first value of the array.\n */\nfunction first (arr) {\n return arr[0];\n}\n\n/**\n * Reducer function that gives the last value of the array.\n *\n * @public\n * @param {Array} arr - The input array.\n * @return {number} Returns the last value of the array.\n */\nfunction last (arr) {\n return arr[arr.length - 1];\n}\n\n/**\n * Reducer function that gives the count value of the array.\n *\n * @public\n * @param {Array} arr - The input array.\n * @return {number} Returns the length of the array.\n */\nfunction count (arr) {\n if (isArray(arr)) {\n return arr.length;\n }\n return InvalidAwareTypes.NULL;\n}\n\n/**\n * Calculates the variance of the input array.\n *\n * @param {Array.} arr - The input array.\n * @return {number} Returns the variance of the input array.\n */\nfunction variance (arr) {\n let mean = avg(arr);\n return avg(arr.map(num => (num - mean) ** 2));\n}\n\n/**\n * Calculates the square root of the variance of the input array.\n *\n * @public\n * @param {Array.} arr - The input array.\n * @return {number} Returns the square root of the variance.\n */\nfunction std (arr) {\n return Math.sqrt(variance(arr));\n}\n\n\nconst fnList = {\n sum,\n avg,\n min,\n max,\n first,\n last,\n count,\n std\n};\n\nconst defaultReducerName = 'sum';\n\nexport {\n defaultReducerName,\n sum as defReducer,\n fnList,\n};\n","import { defReducer, fnList } from '../operator';\n\n/**\n * A page level storage which stores, registers, unregisters reducers for all the datamodel instances. There is only one\n * reducer store available in a page. All the datamodel instances receive same instance of reducer store. DataModel\n * out of the box provides handful of {@link reducer | reducers} which can be used as reducer funciton.\n *\n * @public\n * @namespace DataModel\n */\nclass ReducerStore {\n constructor () {\n this.store = new Map();\n this.store.set('defReducer', defReducer);\n\n Object.entries(fnList).forEach((key) => {\n this.store.set(key[0], key[1]);\n });\n }\n\n /**\n * Changes the `defaultReducer` globally. For all the fields which does not have `defAggFn` mentioned in schema, the\n * value of `defaultReducer` is used for aggregation.\n *\n * @public\n * @param {string} [reducer='sum'] - The name of the default reducer. It picks up the definition from store by doing\n * name lookup. If no name is found then it takes `sum` as the default reducer.\n * @return {ReducerStore} Returns instance of the singleton store in page.\n */\n defaultReducer (...params) {\n if (!params.length) {\n return this.store.get('defReducer');\n }\n\n let reducer = params[0];\n\n if (typeof reducer === 'function') {\n this.store.set('defReducer', reducer);\n } else {\n reducer = String(reducer);\n if (Object.keys(fnList).indexOf(reducer) !== -1) {\n this.store.set('defReducer', fnList[reducer]);\n } else {\n throw new Error(`Reducer ${reducer} not found in registry`);\n }\n }\n return this;\n }\n\n /**\n *\n * Registers a {@link reducer | reducer}.\n * A {@link reducer | reducer} has to be registered before it is used.\n *\n * @example\n * // find the mean squared value of a given set\n * const reducerStore = DataModel.Reducers();\n *\n * reducers.register('meanSquared', (arr) => {\n * const squaredVal = arr.map(item => item * item);\n * let sum = 0;\n * for (let i = 0, l = squaredVal.length; i < l; i++) {\n * sum += squaredVal[i++];\n * }\n *\n * return sum;\n * })\n *\n * // datamodel (dm) is already prepared with cars.json\n * const dm1 = dm.groupBy(['origin'], {\n * accleration: 'meanSquared'\n * });\n *\n * @public\n *\n * @param {string} name formal name for a reducer. If the given name already exists in store it is overridden by new\n * definition.\n * @param {Function} reducer definition of {@link reducer} function.\n *\n * @return {Function} function for unregistering the reducer.\n */\n register (name, reducer) {\n if (typeof reducer !== 'function') {\n throw new Error('Reducer should be a function');\n }\n\n name = String(name);\n this.store.set(name, reducer);\n\n return () => { this.__unregister(name); };\n }\n\n __unregister (name) {\n if (this.store.has(name)) {\n this.store.delete(name);\n }\n }\n\n resolve (name) {\n if (name instanceof Function) {\n return name;\n }\n return this.store.get(name);\n }\n}\n\nconst reducerStore = (function () {\n let store = null;\n\n function getStore () {\n if (store === null) {\n store = new ReducerStore();\n }\n return store;\n }\n return getStore();\n}());\n\nexport default reducerStore;\n","import { getCommonSchema } from './get-common-schema';\n\n/**\n * The filter function used in natural join.\n * It generates a function that will have the logic to join two\n * DataModel instances by the process of natural join.\n *\n * @param {DataModel} dm1 - The left DataModel instance.\n * @param {DataModel} dm2 - The right DataModel instance.\n * @return {Function} Returns a function that is used in cross-product operation.\n */\nexport function naturalJoinFilter (dm1, dm2) {\n const dm1FieldStore = dm1.getFieldspace();\n const dm2FieldStore = dm2.getFieldspace();\n // const dm1FieldStoreName = dm1FieldStore.name;\n // const dm2FieldStoreName = dm2FieldStore.name;\n const commonSchemaArr = getCommonSchema(dm1FieldStore, dm2FieldStore);\n\n return (dm1Fields, dm2Fields) => {\n let retainTuple = true;\n commonSchemaArr.forEach((fieldName) => {\n if (dm1Fields[fieldName].value ===\n dm2Fields[fieldName].value && retainTuple) {\n retainTuple = true;\n } else {\n retainTuple = false;\n }\n });\n return retainTuple;\n };\n}\n","import DataModel from '../export';\nimport { extend2 } from '../utils';\nimport { rowDiffsetIterator } from './row-diffset-iterator';\nimport { isArrEqual } from '../utils/helper';\n/**\n * Performs the union operation between two dm instances.\n *\n * @param {dm} dm1 - The first dm instance.\n * @param {dm} dm2 - The second dm instance.\n * @return {dm} Returns the newly created dm after union operation.\n */\nexport function union (dm1, dm2) {\n const hashTable = {};\n const schema = [];\n const schemaNameArr = [];\n const data = [];\n const dm1FieldStore = dm1.getFieldspace();\n const dm2FieldStore = dm2.getFieldspace();\n const dm1FieldStoreFieldObj = dm1FieldStore.fieldsObj();\n const dm2FieldStoreFieldObj = dm2FieldStore.fieldsObj();\n const name = `${dm1FieldStore.name} union ${dm2FieldStore.name}`;\n\n // For union the columns should match otherwise return a clone of the dm1\n if (!isArrEqual(dm1._colIdentifier.split(',').sort(), dm2._colIdentifier.split(',').sort())) {\n return null;\n }\n\n // Prepare the schema\n (dm1._colIdentifier.split(',')).forEach((fieldName) => {\n const field = dm1FieldStoreFieldObj[fieldName];\n schema.push(extend2({}, field.schema()));\n schemaNameArr.push(field.schema().name);\n });\n\n /**\n * The helper function to create the data.\n *\n * @param {dm} dm - The dm instance for which the data is inserted.\n * @param {Object} fieldsObj - The fieldStore object format.\n */\n function prepareDataHelper (dm, fieldsObj) {\n rowDiffsetIterator(dm._rowDiffset, (i) => {\n const tuple = {};\n let hashData = '';\n schemaNameArr.forEach((schemaName) => {\n const value = fieldsObj[schemaName].partialField.data[i];\n hashData += `-${value}`;\n tuple[schemaName] = value;\n });\n if (!hashTable[hashData]) {\n data.push(tuple);\n hashTable[hashData] = true;\n }\n });\n }\n\n // Prepare the data\n prepareDataHelper(dm1, dm1FieldStoreFieldObj);\n prepareDataHelper(dm2, dm2FieldStoreFieldObj);\n\n return new DataModel(data, schema, { name });\n}\n","import { crossProduct } from './cross-product';\nimport { JOINS } from '../constants';\nimport { union } from './union';\n\n\nexport function leftOuterJoin (dataModel1, dataModel2, filterFn) {\n return crossProduct(dataModel1, dataModel2, filterFn, false, JOINS.LEFTOUTER);\n}\n\nexport function rightOuterJoin (dataModel1, dataModel2, filterFn) {\n return crossProduct(dataModel2, dataModel1, filterFn, false, JOINS.RIGHTOUTER);\n}\n\nexport function fullOuterJoin (dataModel1, dataModel2, filterFn) {\n return union(leftOuterJoin(dataModel1, dataModel2, filterFn), rightOuterJoin(dataModel1, dataModel2, filterFn));\n}\n","import { rowDiffsetIterator } from '../../operator/row-diffset-iterator';\n\n/**\n * In {@link DataModel}, every tabular data consists of column, a column is stored as field.\n * Field contains all the data for a given column in an array.\n *\n * Each record consists of several fields; the fields of all records form the columns.\n * Examples of fields: name, gender, sex etc.\n *\n * In DataModel, each field can have multiple attributes which describes its data and behaviour.\n * A field can have two types of data: Measure and Dimension.\n *\n * A Dimension Field is the context on which a data is categorized and the measure is the numerical values that\n * quantify the data set.\n * In short a dimension is the lens through which you are looking at your measure data.\n *\n * Refer to {@link Schema} to get info about possible field attributes.\n *\n * @public\n * @class\n */\nexport default class Field {\n /**\n * Initialize a new instance.\n *\n * @public\n * @param {PartialField} partialField - The partialField instance which holds the whole data.\n * @param {string} rowDiffset - The data subset definition.\n */\n constructor (partialField, rowDiffset) {\n this.partialField = partialField;\n this.rowDiffset = rowDiffset;\n }\n\n /**\n * Generates the field type specific domain.\n *\n * @public\n * @abstract\n */\n domain () {\n throw new Error('Not yet implemented');\n }\n\n /**\n * Returns the the field schema.\n *\n * @public\n * @return {string} Returns the field schema.\n */\n schema () {\n return this.partialField.schema;\n }\n\n /**\n * Returns the name of the field.\n *\n * @public\n * @return {string} Returns the name of the field.\n */\n name () {\n return this.partialField.name;\n }\n\n /**\n * Returns the type of the field.\n *\n * @public\n * @return {string} Returns the type of the field.\n */\n type () {\n return this.partialField.schema.type;\n }\n\n /**\n * Returns the subtype of the field.\n *\n * @public\n * @return {string} Returns the subtype of the field.\n */\n subtype () {\n return this.partialField.schema.subtype;\n }\n\n /**\n * Returns the description of the field.\n *\n * @public\n * @return {string} Returns the description of the field.\n */\n description () {\n return this.partialField.schema.description;\n }\n\n /**\n * Returns the display name of the field.\n *\n * @public\n * @return {string} Returns the display name of the field.\n */\n displayName () {\n return this.partialField.schema.displayName || this.partialField.schema.name;\n }\n\n /**\n * Returns the data associated with the field.\n *\n * @public\n * @return {Array} Returns the data.\n */\n data () {\n const data = [];\n rowDiffsetIterator(this.rowDiffset, (i) => {\n data.push(this.partialField.data[i]);\n });\n return data;\n }\n\n /**\n * Returns the formatted version of the underlying field data.\n *\n * @public\n * @abstract\n */\n formattedData () {\n throw new Error('Not yet implemented');\n }\n}\n","import Field from '../field';\n\n/**\n * Represents dimension field type.\n *\n * @public\n * @class\n * @extends Field\n */\nexport default class Dimension extends Field {\n /**\n * Returns the domain for the dimension field.\n *\n * @override\n * @public\n * @return {any} Returns the calculated domain.\n */\n domain () {\n if (!this._cachedDomain) {\n this._cachedDomain = this.calculateDataDomain();\n }\n return this._cachedDomain;\n }\n\n /**\n * Calculates the corresponding field domain.\n *\n * @public\n * @abstract\n */\n calculateDataDomain () {\n throw new Error('Not yet implemented');\n }\n\n /**\n * Returns the formatted version of the underlying field data.\n *\n * @public\n * @override\n * @return {Array} Returns the formatted data.\n */\n formattedData () {\n return this.data();\n }\n}\n","import { rowDiffsetIterator } from '../../operator/row-diffset-iterator';\nimport { DimensionSubtype } from '../../enums';\nimport Dimension from '../dimension';\n/**\n * Represents categorical field subtype.\n *\n * @public\n * @class\n * @extends Dimension\n */\nexport default class Categorical extends Dimension {\n /**\n * Returns the subtype of the field.\n *\n * @public\n * @override\n * @return {string} Returns the subtype of the field.\n */\n subtype () {\n return DimensionSubtype.CATEGORICAL;\n }\n\n /**\n * Calculates the corresponding field domain.\n *\n * @public\n * @override\n * @return {Array} Returns the unique values.\n */\n calculateDataDomain () {\n const hash = new Set();\n const domain = [];\n\n // here don't use this.data() as the iteration will be occurred two times on same data.\n rowDiffsetIterator(this.rowDiffset, (i) => {\n const datum = this.partialField.data[i];\n if (!hash.has(datum)) {\n hash.add(datum);\n domain.push(datum);\n }\n });\n return domain;\n }\n}\n","import { rowDiffsetIterator } from '../../operator/row-diffset-iterator';\nimport Dimension from '../dimension';\nimport { DateTimeFormatter } from '../../utils';\nimport InvalidAwareTypes from '../../invalid-aware-types';\n\n/**\n * Represents temporal field subtype.\n *\n * @public\n * @class\n * @extends Dimension\n */\nexport default class Temporal extends Dimension {\n /**\n * Initialize a new instance.\n *\n * @public\n * @param {PartialField} partialField - The partialField instance which holds the whole data.\n * @param {string} rowDiffset - The data subset definition.\n */\n constructor (partialField, rowDiffset) {\n super(partialField, rowDiffset);\n\n this._cachedMinDiff = null;\n }\n\n /**\n * Calculates the corresponding field domain.\n *\n * @public\n * @override\n * @return {Array} Returns the unique values.\n */\n calculateDataDomain () {\n const hash = new Set();\n const domain = [];\n\n // here don't use this.data() as the iteration will be\n // occurred two times on same data.\n rowDiffsetIterator(this.rowDiffset, (i) => {\n const datum = this.partialField.data[i];\n if (!hash.has(datum)) {\n hash.add(datum);\n domain.push(datum);\n }\n });\n\n return domain;\n }\n\n\n /**\n * Calculates the minimum consecutive difference from the associated field data.\n *\n * @public\n * @return {number} Returns the minimum consecutive diff in milliseconds.\n */\n minimumConsecutiveDifference () {\n if (this._cachedMinDiff) {\n return this._cachedMinDiff;\n }\n\n const sortedData = this.data().filter(item => !(item instanceof InvalidAwareTypes)).sort((a, b) => a - b);\n const arrLn = sortedData.length;\n let minDiff = Number.POSITIVE_INFINITY;\n let prevDatum;\n let nextDatum;\n let processedCount = 0;\n\n for (let i = 1; i < arrLn; i++) {\n prevDatum = sortedData[i - 1];\n nextDatum = sortedData[i];\n\n if (nextDatum === prevDatum) {\n continue;\n }\n\n minDiff = Math.min(minDiff, nextDatum - sortedData[i - 1]);\n processedCount++;\n }\n\n if (!processedCount) {\n minDiff = null;\n }\n this._cachedMinDiff = minDiff;\n\n return this._cachedMinDiff;\n }\n\n /**\n * Returns the format specified in the input schema while creating field.\n *\n * @public\n * @return {string} Returns the datetime format.\n */\n format () {\n return this.partialField.schema.format;\n }\n\n /**\n * Returns the formatted version of the underlying field data.\n *\n * @public\n * @override\n * @return {Array} Returns the formatted data.\n */\n formattedData () {\n const data = [];\n rowDiffsetIterator(this.rowDiffset, (i) => {\n const datum = this.partialField.data[i];\n if (datum instanceof InvalidAwareTypes) {\n data.push(datum);\n } else {\n data.push(DateTimeFormatter.formatAs(datum, this.format()));\n }\n });\n return data;\n }\n}\n\n","import Dimension from '../dimension';\n\n/**\n * Represents binned field subtype.\n *\n * @public\n * @class\n * @extends Dimension\n */\nexport default class Binned extends Dimension {\n /**\n * Calculates the corresponding field domain.\n *\n * @public\n * @override\n * @return {Array} Returns the last and first values of bins config array.\n */\n calculateDataDomain () {\n const binsArr = this.partialField.schema.bins;\n return [binsArr[0], binsArr[binsArr.length - 1]];\n }\n\n /**\n * Returns the bins config provided while creating the field instance.\n *\n * @public\n * @return {Array} Returns the bins array config.\n */\n bins () {\n return this.partialField.schema.bins;\n }\n}\n","import { formatNumber } from '../../utils';\nimport { defaultReducerName } from '../../operator/group-by-function';\nimport Field from '../field';\n\n/**\n * Represents measure field type.\n *\n * @public\n * @class\n * @extends Field\n */\nexport default class Measure extends Field {\n /**\n * Returns the domain for the measure field.\n *\n * @override\n * @public\n * @return {any} Returns the calculated domain.\n */\n domain () {\n if (!this._cachedDomain) {\n this._cachedDomain = this.calculateDataDomain();\n }\n return this._cachedDomain;\n }\n\n /**\n * Returns the unit of the measure field.\n *\n * @public\n * @return {string} Returns unit of the field.\n */\n unit () {\n return this.partialField.schema.unit;\n }\n\n /**\n * Returns the aggregation function name of the measure field.\n *\n * @public\n * @return {string} Returns aggregation function name of the field.\n */\n defAggFn () {\n return this.partialField.schema.defAggFn || defaultReducerName;\n }\n\n /**\n * Returns the number format of the measure field.\n *\n * @public\n * @return {Function} Returns number format of the field.\n */\n numberFormat () {\n const { numberFormat } = this.partialField.schema;\n return numberFormat instanceof Function ? numberFormat : formatNumber;\n }\n\n /**\n * Calculates the corresponding field domain.\n *\n * @public\n * @abstract\n */\n calculateDataDomain () {\n throw new Error('Not yet implemented');\n }\n\n /**\n * Returns the formatted version of the underlying field data.\n *\n * @public\n * @override\n * @return {Array} Returns the formatted data.\n */\n formattedData () {\n return this.data();\n }\n}\n","import { rowDiffsetIterator } from '../../operator/row-diffset-iterator';\nimport { MeasureSubtype } from '../../enums';\nimport Measure from '../measure';\nimport InvalidAwareTypes from '../../invalid-aware-types';\n\n/**\n * Represents continuous field subtype.\n *\n * @public\n * @class\n * @extends Measure\n */\nexport default class Continuous extends Measure {\n /**\n * Returns the subtype of the field.\n *\n * @public\n * @override\n * @return {string} Returns the subtype of the field.\n */\n subtype () {\n return MeasureSubtype.CONTINUOUS;\n }\n\n /**\n * Calculates the corresponding field domain.\n *\n * @public\n * @override\n * @return {Array} Returns the min and max values.\n */\n calculateDataDomain () {\n let min = Number.POSITIVE_INFINITY;\n let max = Number.NEGATIVE_INFINITY;\n\n // here don't use this.data() as the iteration will be occurred two times on same data.\n rowDiffsetIterator(this.rowDiffset, (i) => {\n const datum = this.partialField.data[i];\n if (datum instanceof InvalidAwareTypes) {\n return;\n }\n\n if (datum < min) {\n min = datum;\n }\n if (datum > max) {\n max = datum;\n }\n });\n\n return [min, max];\n }\n}\n","/**\n * A interface to represent a parser which is responsible to parse the field.\n *\n * @public\n * @interface\n */\nexport default class FieldParser {\n /**\n * Parses a single value of a field and return the sanitized form.\n *\n * @public\n * @abstract\n */\n parse () {\n throw new Error('Not yet implemented');\n }\n}\n","import FieldParser from '../field-parser';\nimport InvalidAwareTypes from '../../../invalid-aware-types';\n\n/**\n * A FieldParser which parses the categorical values.\n *\n * @public\n * @class\n * @implements {FieldParser}\n */\nexport default class CategoricalParser extends FieldParser {\n /**\n * Parses a single value of a field and returns the stringified form.\n *\n * @public\n * @param {string|number} val - The value of the field.\n * @return {string} Returns the stringified value.\n */\n parse (val) {\n let result;\n // check if invalid date value\n if (!InvalidAwareTypes.isInvalid(val)) {\n result = String(val).trim();\n } else {\n result = InvalidAwareTypes.getInvalidType(val);\n }\n return result;\n }\n}\n","import { DateTimeFormatter } from '../../../utils';\nimport FieldParser from '../field-parser';\nimport InvalidAwareTypes from '../../../invalid-aware-types';\n\n/**\n * A FieldParser which parses the temporal values.\n *\n * @public\n * @class\n * @implements {FieldParser}\n */\nexport default class TemporalParser extends FieldParser {\n /**\n * Initialize a new instance.\n *\n * @public\n * @param {Object} schema - The schema object for the corresponding field.\n */\n constructor (schema) {\n super();\n this.schema = schema;\n this._dtf = new DateTimeFormatter(this.schema.format);\n }\n\n /**\n * Parses a single value of a field and returns the millisecond value.\n *\n * @public\n * @param {string|number} val - The value of the field.\n * @return {number} Returns the millisecond value.\n */\n parse (val) {\n let result;\n // check if invalid date value\n if (!InvalidAwareTypes.isInvalid(val)) {\n let nativeDate = this._dtf.getNativeDate(val);\n result = nativeDate ? nativeDate.getTime() : InvalidAwareTypes.NA;\n } else {\n result = InvalidAwareTypes.getInvalidType(val);\n }\n return result;\n }\n}\n","import FieldParser from '../field-parser';\nimport InvalidAwareTypes from '../../../invalid-aware-types';\n\n/**\n * A FieldParser which parses the binned values.\n *\n * @public\n * @class\n * @implements {FieldParser}\n */\nexport default class BinnedParser extends FieldParser {\n /**\n * Parses a single binned value of a field and returns the sanitized value.\n *\n * @public\n * @param {string} val - The value of the field.\n * @return {string} Returns the sanitized value.\n */\n parse (val) {\n const regex = /^\\s*([+-]?\\d+(?:\\.\\d+)?)\\s*-\\s*([+-]?\\d+(?:\\.\\d+)?)\\s*$/;\n val = String(val);\n let result;\n // check if invalid date value\n if (!InvalidAwareTypes.isInvalid(val)) {\n let matched = val.match(regex);\n result = matched ? `${Number.parseFloat(matched[1])}-${Number.parseFloat(matched[2])}`\n : InvalidAwareTypes.NA;\n } else {\n result = InvalidAwareTypes.getInvalidType(val);\n }\n return result;\n }\n}\n","import FieldParser from '../field-parser';\nimport InvalidAwareTypes from '../../../invalid-aware-types';\n\n/**\n * A FieldParser which parses the continuous values.\n *\n * @public\n * @class\n * @implements {FieldParser}\n */\nexport default class ContinuousParser extends FieldParser {\n /**\n * Parses a single value of a field and returns the number form.\n *\n * @public\n * @param {string|number} val - The value of the field.\n * @return {string} Returns the number value.\n */\n parse (val) {\n let result;\n // check if invalid date value\n if (!InvalidAwareTypes.isInvalid(val)) {\n let parsedVal = parseFloat(val, 10);\n result = Number.isNaN(parsedVal) ? InvalidAwareTypes.NA : parsedVal;\n } else {\n result = InvalidAwareTypes.getInvalidType(val);\n }\n return result;\n }\n}\n","/**\n * Stores the full data and the metadata of a field. It provides\n * a single source of data from which the future Field\n * instance can get a subset of it with a rowDiffset config.\n *\n * @class\n * @public\n */\nexport default class PartialField {\n /**\n * Initialize a new instance.\n *\n * @public\n * @param {string} name - The name of the field.\n * @param {Array} data - The data array.\n * @param {Object} schema - The schema object of the corresponding field.\n * @param {FieldParser} parser - The parser instance corresponding to that field.\n */\n constructor (name, data, schema, parser) {\n this.name = name;\n this.schema = schema;\n this.parser = parser;\n this.data = this._sanitize(data);\n }\n\n /**\n * Sanitizes the field data.\n *\n * @private\n * @param {Array} data - The actual input data.\n * @return {Array} Returns the sanitized data.\n */\n _sanitize (data) {\n return data.map(datum => this.parser.parse(datum));\n }\n}\n","import { FieldType, DimensionSubtype, MeasureSubtype } from './enums';\nimport {\n Categorical,\n Temporal,\n Binned,\n Continuous,\n CategoricalParser,\n TemporalParser,\n BinnedParser,\n ContinuousParser,\n PartialField\n} from './fields';\n\n/**\n * Creates a field instance according to the provided data and schema.\n *\n * @param {Array} data - The field data array.\n * @param {Object} schema - The field schema object.\n * @return {Field} Returns the newly created field instance.\n */\nfunction createUnitField(data, schema) {\n data = data || [];\n let partialField;\n\n switch (schema.type) {\n case FieldType.MEASURE:\n switch (schema.subtype) {\n case MeasureSubtype.CONTINUOUS:\n partialField = new PartialField(schema.name, data, schema, new ContinuousParser());\n return new Continuous(partialField, `0-${data.length - 1}`);\n default:\n partialField = new PartialField(schema.name, data, schema, new ContinuousParser());\n return new Continuous(partialField, `0-${data.length - 1}`);\n }\n case FieldType.DIMENSION:\n switch (schema.subtype) {\n case DimensionSubtype.CATEGORICAL:\n partialField = new PartialField(schema.name, data, schema, new CategoricalParser());\n return new Categorical(partialField, `0-${data.length - 1}`);\n case DimensionSubtype.TEMPORAL:\n partialField = new PartialField(schema.name, data, schema, new TemporalParser(schema));\n return new Temporal(partialField, `0-${data.length - 1}`);\n case DimensionSubtype.BINNED:\n partialField = new PartialField(schema.name, data, schema, new BinnedParser());\n return new Binned(partialField, `0-${data.length - 1}`);\n default:\n partialField = new PartialField(schema.name, data, schema, new CategoricalParser());\n return new Categorical(partialField, `0-${data.length - 1}`);\n }\n default:\n partialField = new PartialField(schema.name, data, schema, new CategoricalParser());\n return new Categorical(partialField, `0-${data.length - 1}`);\n }\n}\n\n\n/**\n * Creates a field instance from partialField and rowDiffset.\n *\n * @param {PartialField} partialField - The corresponding partial field.\n * @param {string} rowDiffset - The data subset config.\n * @return {Field} Returns the newly created field instance.\n */\nexport function createUnitFieldFromPartial(partialField, rowDiffset) {\n const { schema } = partialField;\n\n switch (schema.type) {\n case FieldType.MEASURE:\n switch (schema.subtype) {\n case MeasureSubtype.CONTINUOUS:\n return new Continuous(partialField, rowDiffset);\n default:\n return new Continuous(partialField, rowDiffset);\n }\n case FieldType.DIMENSION:\n switch (schema.subtype) {\n case DimensionSubtype.CATEGORICAL:\n return new Categorical(partialField, rowDiffset);\n case DimensionSubtype.TEMPORAL:\n return new Temporal(partialField, rowDiffset);\n case DimensionSubtype.BINNED:\n return new Binned(partialField, rowDiffset);\n default:\n return new Categorical(partialField, rowDiffset);\n }\n default:\n return new Categorical(partialField, rowDiffset);\n }\n}\n\n/**\n * Creates the field instances with input data and schema.\n *\n * @param {Array} dataColumn - The data array for fields.\n * @param {Array} schema - The schema array for fields.\n * @param {Array} headers - The array of header names.\n * @return {Array.} Returns an array of newly created field instances.\n */\nexport function createFields(dataColumn, schema, headers) {\n const headersObj = {};\n\n if (!(headers && headers.length)) {\n headers = schema.map(item => item.name);\n }\n\n headers.forEach((header, i) => {\n headersObj[header] = i;\n });\n\n return schema.map(item => createUnitField(dataColumn[headersObj[item.name]], item));\n}\n","import { DataFormat } from './enums';\n\nexport default {\n dataFormat: DataFormat.AUTO\n};\n","import { columnMajor } from '../utils';\n\n/**\n * Parses and converts data formatted in DSV array to a manageable internal format.\n *\n * @param {Array.} arr - A 2D array containing of the DSV data.\n * @param {Object} options - Option to control the behaviour of the parsing.\n * @param {boolean} [options.firstRowHeader=true] - Whether the first row of the dsv data is header or not.\n * @return {Array} Returns an array of headers and column major data.\n * @example\n *\n * // Sample input data:\n * const data = [\n * [\"a\", \"b\", \"c\"],\n * [1, 2, 3],\n * [4, 5, 6],\n * [7, 8, 9]\n * ];\n */\nfunction DSVArr (arr, options) {\n const defaultOption = {\n firstRowHeader: true,\n };\n options = Object.assign({}, defaultOption, options);\n\n let header;\n const columns = [];\n const push = columnMajor(columns);\n\n if (options.firstRowHeader) {\n // If header present then mutate the array.\n // Do in-place mutation to save space.\n header = arr.splice(0, 1)[0];\n } else {\n header = [];\n }\n\n arr.forEach(field => push(...field));\n\n return [header, columns];\n}\n\nexport default DSVArr;\n","var EOL = {},\n EOF = {},\n QUOTE = 34,\n NEWLINE = 10,\n RETURN = 13;\n\nfunction objectConverter(columns) {\n return new Function(\"d\", \"return {\" + columns.map(function(name, i) {\n return JSON.stringify(name) + \": d[\" + i + \"]\";\n }).join(\",\") + \"}\");\n}\n\nfunction customConverter(columns, f) {\n var object = objectConverter(columns);\n return function(row, i) {\n return f(object(row), i, columns);\n };\n}\n\n// Compute unique columns in order of discovery.\nfunction inferColumns(rows) {\n var columnSet = Object.create(null),\n columns = [];\n\n rows.forEach(function(row) {\n for (var column in row) {\n if (!(column in columnSet)) {\n columns.push(columnSet[column] = column);\n }\n }\n });\n\n return columns;\n}\n\nexport default function(delimiter) {\n var reFormat = new RegExp(\"[\\\"\" + delimiter + \"\\n\\r]\"),\n DELIMITER = delimiter.charCodeAt(0);\n\n function parse(text, f) {\n var convert, columns, rows = parseRows(text, function(row, i) {\n if (convert) return convert(row, i - 1);\n columns = row, convert = f ? customConverter(row, f) : objectConverter(row);\n });\n rows.columns = columns || [];\n return rows;\n }\n\n function parseRows(text, f) {\n var rows = [], // output rows\n N = text.length,\n I = 0, // current character index\n n = 0, // current line number\n t, // current token\n eof = N <= 0, // current token followed by EOF?\n eol = false; // current token followed by EOL?\n\n // Strip the trailing newline.\n if (text.charCodeAt(N - 1) === NEWLINE) --N;\n if (text.charCodeAt(N - 1) === RETURN) --N;\n\n function token() {\n if (eof) return EOF;\n if (eol) return eol = false, EOL;\n\n // Unescape quotes.\n var i, j = I, c;\n if (text.charCodeAt(j) === QUOTE) {\n while (I++ < N && text.charCodeAt(I) !== QUOTE || text.charCodeAt(++I) === QUOTE);\n if ((i = I) >= N) eof = true;\n else if ((c = text.charCodeAt(I++)) === NEWLINE) eol = true;\n else if (c === RETURN) { eol = true; if (text.charCodeAt(I) === NEWLINE) ++I; }\n return text.slice(j + 1, i - 1).replace(/\"\"/g, \"\\\"\");\n }\n\n // Find next delimiter or newline.\n while (I < N) {\n if ((c = text.charCodeAt(i = I++)) === NEWLINE) eol = true;\n else if (c === RETURN) { eol = true; if (text.charCodeAt(I) === NEWLINE) ++I; }\n else if (c !== DELIMITER) continue;\n return text.slice(j, i);\n }\n\n // Return last token before EOF.\n return eof = true, text.slice(j, N);\n }\n\n while ((t = token()) !== EOF) {\n var row = [];\n while (t !== EOL && t !== EOF) row.push(t), t = token();\n if (f && (row = f(row, n++)) == null) continue;\n rows.push(row);\n }\n\n return rows;\n }\n\n function format(rows, columns) {\n if (columns == null) columns = inferColumns(rows);\n return [columns.map(formatValue).join(delimiter)].concat(rows.map(function(row) {\n return columns.map(function(column) {\n return formatValue(row[column]);\n }).join(delimiter);\n })).join(\"\\n\");\n }\n\n function formatRows(rows) {\n return rows.map(formatRow).join(\"\\n\");\n }\n\n function formatRow(row) {\n return row.map(formatValue).join(delimiter);\n }\n\n function formatValue(text) {\n return text == null ? \"\"\n : reFormat.test(text += \"\") ? \"\\\"\" + text.replace(/\"/g, \"\\\"\\\"\") + \"\\\"\"\n : text;\n }\n\n return {\n parse: parse,\n parseRows: parseRows,\n format: format,\n formatRows: formatRows\n };\n}\n","import dsv from \"./dsv\";\n\nvar csv = dsv(\",\");\n\nexport var csvParse = csv.parse;\nexport var csvParseRows = csv.parseRows;\nexport var csvFormat = csv.format;\nexport var csvFormatRows = csv.formatRows;\n","import dsv from \"./dsv\";\n\nvar tsv = dsv(\"\\t\");\n\nexport var tsvParse = tsv.parse;\nexport var tsvParseRows = tsv.parseRows;\nexport var tsvFormat = tsv.format;\nexport var tsvFormatRows = tsv.formatRows;\n","import { dsvFormat as d3Dsv } from 'd3-dsv';\nimport DSVArr from './dsv-arr';\n\n/**\n * Parses and converts data formatted in DSV string to a manageable internal format.\n *\n * @todo Support to be given for https://tools.ietf.org/html/rfc4180.\n * @todo Sample implementation https://github.com/knrz/CSV.js/.\n *\n * @param {string} str - The input DSV string.\n * @param {Object} options - Option to control the behaviour of the parsing.\n * @param {boolean} [options.firstRowHeader=true] - Whether the first row of the dsv string data is header or not.\n * @param {string} [options.fieldSeparator=\",\"] - The separator of two consecutive field.\n * @return {Array} Returns an array of headers and column major data.\n * @example\n *\n * // Sample input data:\n * const data = `\n * a,b,c\n * 1,2,3\n * 4,5,6\n * 7,8,9\n * `\n */\nfunction DSVStr (str, options) {\n const defaultOption = {\n firstRowHeader: true,\n fieldSeparator: ','\n };\n options = Object.assign({}, defaultOption, options);\n\n const dsv = d3Dsv(options.fieldSeparator);\n return DSVArr(dsv.parseRows(str), options);\n}\n\nexport default DSVStr;\n","import { columnMajor } from '../utils';\n\n/**\n * Parses and converts data formatted in JSON to a manageable internal format.\n *\n * @param {Array.} arr - The input data formatted in JSON.\n * @return {Array.} Returns an array of headers and column major data.\n * @example\n *\n * // Sample input data:\n * const data = [\n * {\n * \"a\": 1,\n * \"b\": 2,\n * \"c\": 3\n * },\n * {\n * \"a\": 4,\n * \"b\": 5,\n * \"c\": 6\n * },\n * {\n * \"a\": 7,\n * \"b\": 8,\n * \"c\": 9\n * }\n * ];\n */\nfunction FlatJSON (arr) {\n const header = {};\n let i = 0;\n let insertionIndex;\n const columns = [];\n const push = columnMajor(columns);\n\n arr.forEach((item) => {\n const fields = [];\n for (let key in item) {\n if (key in header) {\n insertionIndex = header[key];\n } else {\n header[key] = i++;\n insertionIndex = i - 1;\n }\n fields[insertionIndex] = item[key];\n }\n push(...fields);\n });\n\n return [Object.keys(header), columns];\n}\n\nexport default FlatJSON;\n","import FlatJSON from './flat-json';\nimport DSVArr from './dsv-arr';\nimport DSVStr from './dsv-str';\nimport { detectDataFormat } from '../utils';\n\n/**\n * Parses the input data and detect the format automatically.\n *\n * @param {string|Array} data - The input data.\n * @param {Object} options - An optional config specific to data format.\n * @return {Array.} Returns an array of headers and column major data.\n */\nfunction Auto (data, options) {\n const converters = { FlatJSON, DSVStr, DSVArr };\n const dataFormat = detectDataFormat(data);\n\n if (!dataFormat) {\n throw new Error('Couldn\\'t detect the data format');\n }\n\n return converters[dataFormat](data, options);\n}\n\nexport default Auto;\n","import { FieldType, FilteringMode, DimensionSubtype, MeasureSubtype, DataFormat } from './enums';\nimport fieldStore from './field-store';\nimport Value from './value';\nimport {\n rowDiffsetIterator\n} from './operator';\nimport { DM_DERIVATIVES, LOGICAL_OPERATORS } from './constants';\nimport { createFields, createUnitFieldFromPartial } from './field-creator';\nimport defaultConfig from './default-config';\nimport * as converter from './converter';\nimport { extend2, detectDataFormat } from './utils';\n\n/**\n * Prepares the selection data.\n */\nfunction prepareSelectionData (fields, i) {\n const resp = {};\n for (let field of fields) {\n resp[field.name()] = new Value(field.partialField.data[i], field);\n }\n return resp;\n}\n\nexport function prepareJoinData (fields) {\n const resp = {};\n Object.keys(fields).forEach((key) => { resp[key] = new Value(fields[key], key); });\n return resp;\n}\n\nexport const updateFields = ([rowDiffset, colIdentifier], partialFieldspace, fieldStoreName) => {\n let collID = colIdentifier.length ? colIdentifier.split(',') : [];\n let partialFieldMap = partialFieldspace.fieldsObj();\n let newFields = collID.map(coll => createUnitFieldFromPartial(partialFieldMap[coll].partialField, rowDiffset));\n return fieldStore.createNamespace(newFields, fieldStoreName);\n};\n\nexport const persistDerivation = (model, operation, config = {}, criteriaFn) => {\n let derivative;\n if (operation !== DM_DERIVATIVES.COMPOSE) {\n derivative = {\n op: operation,\n meta: config,\n criteria: criteriaFn\n };\n model._derivation.push(derivative);\n }\n else {\n derivative = [...criteriaFn];\n model._derivation.length = 0;\n model._derivation.push(...derivative);\n }\n};\n\nexport const selectHelper = (rowDiffset, fields, selectFn, config, sourceDm) => {\n const newRowDiffSet = [];\n let lastInsertedValue = -1;\n let { mode } = config;\n let li;\n let cachedStore = {};\n let cloneProvider = () => sourceDm.detachedRoot();\n const selectorHelperFn = index => selectFn(\n prepareSelectionData(fields, index),\n index,\n cloneProvider,\n cachedStore\n );\n\n let checker;\n if (mode === FilteringMode.INVERSE) {\n checker = index => !selectorHelperFn(index);\n } else {\n checker = index => selectorHelperFn(index);\n }\n\n rowDiffsetIterator(rowDiffset, (i) => {\n if (checker(i)) {\n if (lastInsertedValue !== -1 && i === (lastInsertedValue + 1)) {\n li = newRowDiffSet.length - 1;\n newRowDiffSet[li] = `${newRowDiffSet[li].split('-')[0]}-${i}`;\n } else {\n newRowDiffSet.push(`${i}`);\n }\n lastInsertedValue = i;\n }\n });\n return newRowDiffSet.join(',');\n};\n\nexport const filterPropagationModel = (model, propModels, config = {}) => {\n const operation = config.operation || LOGICAL_OPERATORS.AND;\n const filterByMeasure = config.filterByMeasure || false;\n let fns = [];\n if (!propModels.length) {\n fns = [() => false];\n } else {\n fns = propModels.map(propModel => ((dataModel) => {\n const dataObj = dataModel.getData();\n const schema = dataObj.schema;\n const fieldsConfig = dataModel.getFieldsConfig();\n const fieldsSpace = dataModel.getFieldspace().fieldsObj();\n const data = dataObj.data;\n const domain = Object.values(fieldsConfig).reduce((acc, v) => {\n acc[v.def.name] = fieldsSpace[v.def.name].domain();\n return acc;\n }, {});\n\n return (fields) => {\n const include = !data.length ? false : data.some(row => schema.every((propField) => {\n if (!(propField.name in fields)) {\n return true;\n }\n const value = fields[propField.name].valueOf();\n if (filterByMeasure && propField.type === FieldType.MEASURE) {\n return value >= domain[propField.name][0] && value <= domain[propField.name][1];\n }\n\n if (propField.type !== FieldType.DIMENSION) {\n return true;\n }\n const idx = fieldsConfig[propField.name].index;\n return row[idx] === fields[propField.name].valueOf();\n }));\n return include;\n };\n })(propModel));\n }\n\n let filteredModel;\n if (operation === LOGICAL_OPERATORS.AND) {\n const clonedModel = model.clone(false, false);\n filteredModel = clonedModel.select(fields => fns.every(fn => fn(fields)), {\n saveChild: false,\n mode: FilteringMode.ALL\n });\n } else {\n filteredModel = model.clone(false, false).select(fields => fns.some(fn => fn(fields)), {\n mode: FilteringMode.ALL,\n saveChild: false\n });\n }\n\n return filteredModel;\n};\n\nexport const cloneWithSelect = (sourceDm, selectFn, selectConfig, cloneConfig) => {\n const cloned = sourceDm.clone(cloneConfig.saveChild);\n const rowDiffset = selectHelper(\n cloned._rowDiffset,\n cloned.getPartialFieldspace().fields,\n selectFn,\n selectConfig,\n sourceDm\n );\n cloned._rowDiffset = rowDiffset;\n cloned.__calculateFieldspace().calculateFieldsConfig();\n\n persistDerivation(cloned, DM_DERIVATIVES.SELECT, { config: selectConfig }, selectFn);\n\n return cloned;\n};\n\nexport const cloneWithProject = (sourceDm, projField, config, allFields) => {\n const cloned = sourceDm.clone(config.saveChild);\n let projectionSet = projField;\n if (config.mode === FilteringMode.INVERSE) {\n projectionSet = allFields.filter(fieldName => projField.indexOf(fieldName) === -1);\n }\n // cloned._colIdentifier = sourceDm._colIdentifier.split(',')\n // .filter(coll => projectionSet.indexOf(coll) !== -1).join();\n cloned._colIdentifier = projectionSet.join(',');\n cloned.__calculateFieldspace().calculateFieldsConfig();\n\n persistDerivation(\n cloned,\n DM_DERIVATIVES.PROJECT,\n { projField, config, actualProjField: projectionSet },\n null\n );\n\n return cloned;\n};\n\nexport const sanitizeUnitSchema = (unitSchema) => {\n // Do deep clone of the unit schema as the user might change it later.\n unitSchema = extend2({}, unitSchema);\n if (!unitSchema.type) {\n unitSchema.type = FieldType.DIMENSION;\n }\n\n if (!unitSchema.subtype) {\n switch (unitSchema.type) {\n case FieldType.MEASURE:\n unitSchema.subtype = MeasureSubtype.CONTINUOUS;\n break;\n default:\n case FieldType.DIMENSION:\n unitSchema.subtype = DimensionSubtype.CATEGORICAL;\n break;\n }\n }\n\n return unitSchema;\n};\n\nexport const sanitizeSchema = schema => schema.map(unitSchema => sanitizeUnitSchema(unitSchema));\n\nexport const updateData = (relation, data, schema, options) => {\n schema = sanitizeSchema(schema);\n options = Object.assign(Object.assign({}, defaultConfig), options);\n const converterFn = converter[options.dataFormat];\n\n if (!(converterFn && typeof converterFn === 'function')) {\n throw new Error(`No converter function found for ${options.dataFormat} format`);\n }\n\n const [header, formattedData] = converterFn(data, options);\n const fieldArr = createFields(formattedData, schema, header);\n\n // This will create a new fieldStore with the fields\n const nameSpace = fieldStore.createNamespace(fieldArr, options.name);\n relation._partialFieldspace = nameSpace;\n // If data is provided create the default colIdentifier and rowDiffset\n relation._rowDiffset = formattedData.length && formattedData[0].length ? `0-${formattedData[0].length - 1}` : '';\n relation._colIdentifier = (schema.map(_ => _.name)).join();\n relation._dataFormat = options.dataFormat === DataFormat.AUTO ? detectDataFormat(data) : options.dataFormat;\n return relation;\n};\n\nexport const fieldInSchema = (schema, field) => {\n let i = 0;\n\n for (; i < schema.length; ++i) {\n if (field === schema[i].name) {\n return {\n type: schema[i].subtype || schema[i].type,\n index: i\n };\n }\n }\n return null;\n};\n\n\nexport const getOperationArguments = (child) => {\n const derivation = child._derivation;\n let params = [];\n let operation;\n if (derivation && derivation.length === 1) {\n operation = derivation[0].op;\n switch (operation) {\n case DM_DERIVATIVES.SELECT:\n params = [derivation[0].criteria];\n break;\n case DM_DERIVATIVES.PROJECT:\n params = [derivation[0].meta.actualProjField];\n break;\n case DM_DERIVATIVES.GROUPBY:\n operation = 'groupBy';\n params = [derivation[0].meta.groupByString.split(','), derivation[0].criteria];\n break;\n default:\n break;\n }\n }\n\n return {\n operation,\n params\n };\n};\n\nconst applyExistingOperationOnModel = (propModel, dataModel) => {\n const { operation, params } = getOperationArguments(dataModel);\n let selectionModel = propModel[0];\n let rejectionModel = propModel[1];\n if (operation && params.length) {\n selectionModel = propModel[0][operation](...params, {\n saveChild: false\n });\n rejectionModel = propModel[1][operation](...params, {\n saveChild: false\n });\n }\n return [selectionModel, rejectionModel];\n};\n\nconst getFilteredModel = (propModel, path) => {\n for (let i = 0, len = path.length; i < len; i++) {\n const model = path[i];\n propModel = applyExistingOperationOnModel(propModel, model);\n }\n return propModel;\n};\n\nconst propagateIdentifiers = (dataModel, propModel, config = {}, propModelInf = {}) => {\n const nonTraversingModel = propModelInf.nonTraversingModel;\n const excludeModels = propModelInf.excludeModels || [];\n\n if (dataModel === nonTraversingModel) {\n return;\n }\n\n const propagate = excludeModels.length ? excludeModels.indexOf(dataModel) === -1 : true;\n\n propagate && dataModel.handlePropagation(propModel, config);\n\n const children = dataModel._children;\n children.forEach((child) => {\n let [selectionModel, rejectionModel] = applyExistingOperationOnModel(propModel, child);\n propagateIdentifiers(child, [selectionModel, rejectionModel], config, propModelInf);\n });\n};\n\nexport const getRootGroupByModel = (model) => {\n if (model._parent && model._derivation.find(d => d.op !== 'group')) {\n return getRootGroupByModel(model._parent);\n }\n return model;\n};\n\nexport const getRootDataModel = (model) => {\n while (model._parent) {\n model = model._parent;\n }\n return model;\n};\n\nexport const getPathToRootModel = (model, path = []) => {\n while (model._parent) {\n path.push(model);\n model = model._parent;\n }\n return path;\n};\n\nexport const propagateToAllDataModels = (identifiers, rootModels, propagationInf, config) => {\n let criteria;\n let propModel;\n const { propagationNameSpace, propagateToSource } = propagationInf;\n const propagationSourceId = propagationInf.sourceId;\n const propagateInterpolatedValues = config.propagateInterpolatedValues;\n const filterFn = (entry) => {\n const filter = config.filterFn || (() => true);\n return filter(entry, config);\n };\n\n let criterias = [];\n\n if (identifiers === null && config.persistent !== true) {\n criterias = [{\n criteria: []\n }];\n } else {\n let actionCriterias = Object.values(propagationNameSpace.mutableActions);\n if (propagateToSource !== false) {\n actionCriterias = actionCriterias.filter(d => d.config.sourceId !== propagationSourceId);\n }\n\n const filteredCriteria = actionCriterias.filter(filterFn).map(action => action.config.criteria);\n\n const excludeModels = [];\n\n if (propagateToSource !== false) {\n const sourceActionCriterias = Object.values(propagationNameSpace.mutableActions);\n\n sourceActionCriterias.forEach((actionInf) => {\n const actionConf = actionInf.config;\n if (actionConf.applyOnSource === false && actionConf.action === config.action &&\n actionConf.sourceId !== propagationSourceId) {\n excludeModels.push(actionInf.model);\n criteria = sourceActionCriterias.filter(d => d !== actionInf).map(d => d.config.criteria);\n criteria.length && criterias.push({\n criteria,\n models: actionInf.model,\n path: getPathToRootModel(actionInf.model)\n });\n }\n });\n }\n\n\n criteria = [].concat(...[...filteredCriteria, identifiers]).filter(d => d !== null);\n criterias.push({\n criteria,\n excludeModels: [...excludeModels, ...config.excludeModels || []]\n });\n }\n\n const rootModel = rootModels.model;\n\n const propConfig = Object.assign({\n sourceIdentifiers: identifiers,\n propagationSourceId\n }, config);\n\n const rootGroupByModel = rootModels.groupByModel;\n if (propagateInterpolatedValues && rootGroupByModel) {\n propModel = filterPropagationModel(rootGroupByModel, criteria, {\n filterByMeasure: propagateInterpolatedValues\n });\n propagateIdentifiers(rootGroupByModel, propModel, propConfig);\n }\n\n criterias.forEach((inf) => {\n const propagationModel = filterPropagationModel(rootModel, inf.criteria);\n const path = inf.path;\n\n if (path) {\n const filteredModel = getFilteredModel(propagationModel, path.reverse());\n inf.models.handlePropagation(filteredModel, propConfig);\n } else {\n propagateIdentifiers(rootModel, propagationModel, propConfig, {\n excludeModels: inf.excludeModels,\n nonTraversingModel: propagateInterpolatedValues && rootGroupByModel\n });\n }\n });\n};\n\nexport const propagateImmutableActions = (propagationNameSpace, rootModels, propagationInf) => {\n const immutableActions = propagationNameSpace.immutableActions;\n\n for (const action in immutableActions) {\n const actionInf = immutableActions[action];\n const actionConf = actionInf.config;\n const propagationSourceId = propagationInf.config.sourceId;\n const filterImmutableAction = propagationInf.propConfig.filterImmutableAction ?\n propagationInf.propConfig.filterImmutableAction(actionConf, propagationInf.config) : true;\n if (actionConf.sourceId !== propagationSourceId && filterImmutableAction) {\n const criteriaModel = actionConf.criteria;\n propagateToAllDataModels(criteriaModel, rootModels, {\n propagationNameSpace,\n propagateToSource: false,\n sourceId: propagationSourceId\n }, actionConf);\n }\n }\n};\n\nexport const addToPropNamespace = (propagationNameSpace, config = {}, model) => {\n let sourceNamespace;\n const isMutableAction = config.isMutableAction;\n const criteria = config.criteria;\n const key = `${config.action}-${config.sourceId}`;\n\n if (isMutableAction) {\n sourceNamespace = propagationNameSpace.mutableActions;\n } else {\n sourceNamespace = propagationNameSpace.immutableActions;\n }\n\n if (criteria === null) {\n delete sourceNamespace[key];\n } else {\n sourceNamespace[key] = {\n model,\n config\n };\n }\n\n return this;\n};\n","import { FilteringMode } from './enums';\nimport { getUniqueId } from './utils';\nimport { persistDerivation, updateFields, cloneWithSelect, cloneWithProject, updateData } from './helper';\nimport { crossProduct, difference, naturalJoinFilter, union } from './operator';\nimport { DM_DERIVATIVES } from './constants';\n\n/**\n * Relation provides the definitions of basic operators of relational algebra like *selection*, *projection*, *union*,\n * *difference* etc.\n *\n * It is extended by {@link DataModel} to inherit the functionalities of relational algebra concept.\n *\n * @class\n * @public\n * @module Relation\n * @namespace DataModel\n */\nclass Relation {\n\n /**\n * Creates a new Relation instance by providing underlying data and schema.\n *\n * @private\n *\n * @param {Object | string | Relation} data - The input tabular data in dsv or json format or\n * an existing Relation instance object.\n * @param {Array} schema - An array of data schema.\n * @param {Object} [options] - The optional options.\n */\n constructor (...params) {\n let source;\n\n this._parent = null;\n this._derivation = [];\n this._children = [];\n\n if (params.length === 1 && ((source = params[0]) instanceof Relation)) {\n // parent datamodel was passed as part of source\n this._colIdentifier = source._colIdentifier;\n this._rowDiffset = source._rowDiffset;\n this._dataFormat = source._dataFormat;\n this._parent = source;\n this._partialFieldspace = this._parent._partialFieldspace;\n this._fieldStoreName = getUniqueId();\n this.__calculateFieldspace().calculateFieldsConfig();\n } else {\n updateData(this, ...params);\n this._fieldStoreName = this._partialFieldspace.name;\n this.__calculateFieldspace().calculateFieldsConfig();\n this._propagationNameSpace = {\n mutableActions: {},\n immutableActions: {}\n };\n }\n }\n\n /**\n * Retrieves the {@link Schema | schema} details for every {@link Field | field} as an array.\n *\n * @public\n *\n * @return {Array.} Array of fields schema.\n * ```\n * [\n * { name: 'Name', type: 'dimension' },\n * { name: 'Miles_per_Gallon', type: 'measure', numberFormat: (val) => `${val} miles / gallon` },\n * { name: 'Cylinder', type: 'dimension' },\n * { name: 'Displacement', type: 'measure', defAggFn: 'max' },\n * { name: 'HorsePower', type: 'measure', defAggFn: 'max' },\n * { name: 'Weight_in_lbs', type: 'measure', defAggFn: 'avg', },\n * { name: 'Acceleration', type: 'measure', defAggFn: 'avg' },\n * { name: 'Year', type: 'dimension', subtype: 'datetime', format: '%Y' },\n * { name: 'Origin' }\n * ]\n * ```\n */\n getSchema () {\n return this.getFieldspace().fields.map(d => d.schema());\n }\n\n /**\n * Returns the name of the {@link DataModel} instance. If no name was specified during {@link DataModel}\n * initialization, then it returns a auto-generated name.\n *\n * @public\n *\n * @return {string} Name of the DataModel instance.\n */\n getName() {\n return this._fieldStoreName;\n }\n\n getFieldspace () {\n return this._fieldspace;\n }\n\n __calculateFieldspace () {\n this._fieldspace = updateFields([this._rowDiffset, this._colIdentifier],\n this.getPartialFieldspace(), this._fieldStoreName);\n return this;\n }\n\n getPartialFieldspace () {\n return this._partialFieldspace;\n }\n\n /**\n * Performs {@link link_of_cross_product | cross-product} between two {@link DataModel} instances and returns a\n * new {@link DataModel} instance containing the results. This operation is also called theta join.\n *\n * Cross product takes two set and create one set where each value of one set is paired with each value of another\n * set.\n *\n * This method takes an optional predicate which filters the generated result rows. If the predicate returns true\n * the combined row is included in the resulatant table.\n *\n * @example\n * let originDM = dm.project(['Origin','Origin_Formal_Name']);\n * let carsDM = dm.project(['Name','Miles_per_Gallon','Origin'])\n *\n * console.log(carsDM.join(originDM)));\n *\n * console.log(carsDM.join(originDM,\n * obj => obj.[originDM.getName()].Origin === obj.[carsDM.getName()].Origin));\n *\n * @text\n * This is chained version of `join` operator. `join` can also be used as\n * {@link link_to_join_op | functional operator}.\n *\n * @public\n *\n * @param {DataModel} joinWith - The DataModel to be joined with the current instance DataModel.\n * @param {SelectionPredicate} filterFn - The predicate function that will filter the result of the crossProduct.\n *\n * @return {DataModel} New DataModel instance created after joining.\n */\n join (joinWith, filterFn) {\n return crossProduct(this, joinWith, filterFn);\n }\n\n /**\n * {@link natural_join | Natural join} is a special kind of cross-product join where filtering of rows are performed\n * internally by resolving common fields are from both table and the rows with common value are included.\n *\n * @example\n * let originDM = dm.project(['Origin','Origin_Formal_Name']);\n * let carsDM = dm.project(['Name','Miles_per_Gallon','Origin'])\n *\n * console.log(carsDM.naturalJoin(originDM));\n *\n * @text\n * This is chained version of `naturalJoin` operator. `naturalJoin` can also be used as\n * {@link link_to_join_op | functional operator}.\n *\n * @public\n *\n * @param {DataModel} joinWith - The DataModel with which the current instance of DataModel on which the method is\n * called will be joined.\n * @return {DataModel} New DataModel instance created after joining.\n */\n naturalJoin (joinWith) {\n return crossProduct(this, joinWith, naturalJoinFilter(this, joinWith), true);\n }\n\n /**\n * {@link link_to_union | Union} operation can be termed as vertical stacking of all rows from both the DataModel\n * instances, provided that both of the {@link DataModel} instances should have same column names.\n *\n * @example\n * console.log(EuropeanMakerDM.union(USAMakerDM));\n *\n * @text\n * This is chained version of `naturalJoin` operator. `naturalJoin` can also be used as\n * {@link link_to_join_op | functional operator}.\n *\n * @public\n *\n * @param {DataModel} unionWith - DataModel instance for which union has to be applied with the instance on which\n * the method is called\n *\n * @return {DataModel} New DataModel instance with the result of the operation\n */\n union (unionWith) {\n return union(this, unionWith);\n }\n\n /**\n * {@link link_to_difference | Difference } operation only include rows which are present in the datamodel on which\n * it was called but not on the one passed as argument.\n *\n * @example\n * console.log(highPowerDM.difference(highExpensiveDM));\n *\n * @text\n * This is chained version of `naturalJoin` operator. `naturalJoin` can also be used as\n * {@link link_to_join_op | functional operator}.\n *\n * @public\n *\n * @param {DataModel} differenceWith - DataModel instance for which difference has to be applied with the instance\n * on which the method is called\n * @return {DataModel} New DataModel instance with the result of the operation\n */\n difference (differenceWith) {\n return difference(this, differenceWith);\n }\n\n /**\n * {@link link_to_selection | Selection} is a row filtering operation. It expects a predicate and an optional mode\n * which control which all rows should be included in the resultant DataModel instance.\n *\n * {@link SelectionPredicate} is a function which returns a boolean value. For selection operation the selection\n * function is called for each row of DataModel instance with the current row passed as argument.\n *\n * After executing {@link SelectionPredicate} the rows are labeled as either an entry of selection set or an entry\n * of rejection set.\n *\n * {@link FilteringMode} operates on the selection and rejection set to determine which one would reflect in the\n * resultant datamodel.\n *\n * @warning\n * Selection and rejection set is only a logical idea for concept explanation purpose.\n *\n * @example\n * // with selection mode NORMAL:\n * const normDt = dt.select(fields => fields.Origin.value === \"USA\")\n * console.log(normDt));\n *\n * // with selection mode INVERSE:\n * const inverDt = dt.select(fields => fields.Origin.value === \"USA\", { mode: DataModel.FilteringMode.INVERSE })\n * console.log(inverDt);\n *\n * // with selection mode ALL:\n * const dtArr = dt.select(fields => fields.Origin.value === \"USA\", { mode: DataModel.FilteringMode.ALL })\n * // print the selected parts\n * console.log(dtArr[0]);\n * // print the inverted parts\n * console.log(dtArr[1]);\n *\n * @text\n * This is chained version of `select` operator. `select` can also be used as\n * {@link link_to_join_op | functional operator}.\n *\n * @public\n *\n * @param {Function} selectFn - The predicate function which is called for each row with the current row.\n * ```\n * function (row, i, cloneProvider, store) { ... }\n * ```\n * @param {Object} config - The configuration object to control the inclusion exclusion of a row in resultant\n * DataModel instance.\n * @param {FilteringMode} [config.mode=FilteringMode.NORMAL] - The mode of the selection.\n * @return {DataModel} Returns the new DataModel instance(s) after operation.\n */\n select (selectFn, config) {\n const defConfig = {\n mode: FilteringMode.NORMAL,\n saveChild: true\n };\n config = Object.assign({}, defConfig, config);\n\n const cloneConfig = { saveChild: config.saveChild };\n let oDm;\n\n if (config.mode === FilteringMode.ALL) {\n const selectDm = cloneWithSelect(\n this,\n selectFn,\n { mode: FilteringMode.NORMAL },\n cloneConfig\n );\n const rejectDm = cloneWithSelect(\n this,\n selectFn,\n { mode: FilteringMode.INVERSE },\n cloneConfig\n );\n oDm = [selectDm, rejectDm];\n } else {\n oDm = cloneWithSelect(\n this,\n selectFn,\n config,\n cloneConfig\n );\n }\n\n return oDm;\n }\n\n /**\n * Retrieves a boolean value if the current {@link DataModel} instance has data.\n *\n * @example\n * const schema = [\n * { name: 'CarName', type: 'dimension' },\n * { name: 'HorsePower', type: 'measure' },\n * { name: \"Origin\", type: 'dimension' }\n * ];\n * const data = [];\n *\n * const dt = new DataModel(data, schema);\n * console.log(dt.isEmpty());\n *\n * @public\n *\n * @return {Boolean} True if the datamodel has no data, otherwise false.\n */\n isEmpty () {\n return !this._rowDiffset.length || !this._colIdentifier.length;\n }\n\n /**\n * Creates a clone from the current DataModel instance with child parent relationship.\n *\n * @private\n * @param {boolean} [saveChild=true] - Whether the cloned instance would be recorded in the parent instance.\n * @return {DataModel} - Returns the newly cloned DataModel instance.\n */\n clone (saveChild = true, linkParent = true) {\n let retDataModel;\n if (linkParent === false) {\n const dataObj = this.getData({\n getAllFields: true\n });\n const data = dataObj.data;\n const schema = dataObj.schema;\n const jsonData = data.map((row) => {\n const rowObj = {};\n schema.forEach((field, i) => {\n rowObj[field.name] = row[i];\n });\n return rowObj;\n });\n retDataModel = new this.constructor(jsonData, schema);\n }\n else {\n retDataModel = new this.constructor(this);\n }\n\n if (saveChild) {\n this._children.push(retDataModel);\n }\n return retDataModel;\n }\n\n /**\n * {@link Projection} is filter column (field) operation. It expects list of fields' name and either include those\n * or exclude those based on {@link FilteringMode} on the resultant variable.\n *\n * Projection expects array of fields name based on which it creates the selection and rejection set. All the field\n * whose name is present in array goes in selection set and rest of the fields goes in rejection set.\n *\n * {@link FilteringMode} operates on the selection and rejection set to determine which one would reflect in the\n * resulatant datamodel.\n *\n * @warning\n * Selection and rejection set is only a logical idea for concept explanation purpose.\n *\n * @example\n * const dm = new DataModel(data, schema);\n *\n * // with projection mode NORMAL:\n * const normDt = dt.project([\"Name\", \"HorsePower\"]);\n * console.log(normDt.getData());\n *\n * // with projection mode INVERSE:\n * const inverDt = dt.project([\"Name\", \"HorsePower\"], { mode: DataModel.FilteringMode.INVERSE })\n * console.log(inverDt.getData());\n *\n * // with selection mode ALL:\n * const dtArr = dt.project([\"Name\", \"HorsePower\"], { mode: DataModel.FilteringMode.ALL })\n * // print the normal parts\n * console.log(dtArr[0].getData());\n * // print the inverted parts\n * console.log(dtArr[1].getData());\n *\n * @text\n * This is chained version of `select` operator. `select` can also be used as\n * {@link link_to_join_op | functional operator}.\n *\n * @public\n *\n * @param {Array.} projField - An array of column names in string or regular expression.\n * @param {Object} [config] - An optional config to control the creation of new DataModel\n * @param {FilteringMode} [config.mode=FilteringMode.NORMAL] - Mode of the projection\n *\n * @return {DataModel} Returns the new DataModel instance after operation.\n */\n project (projField, config) {\n const defConfig = {\n mode: FilteringMode.NORMAL,\n saveChild: true\n };\n config = Object.assign({}, defConfig, config);\n const fieldConfig = this.getFieldsConfig();\n const allFields = Object.keys(fieldConfig);\n const { mode } = config;\n\n let normalizedProjField = projField.reduce((acc, field) => {\n if (field.constructor.name === 'RegExp') {\n acc.push(...allFields.filter(fieldName => fieldName.search(field) !== -1));\n } else if (field in fieldConfig) {\n acc.push(field);\n }\n return acc;\n }, []);\n\n normalizedProjField = Array.from(new Set(normalizedProjField)).map(field => field.trim());\n let dataModel;\n\n if (mode === FilteringMode.ALL) {\n let projectionClone = cloneWithProject(this, normalizedProjField, {\n mode: FilteringMode.NORMAL,\n saveChild: config.saveChild\n }, allFields);\n let rejectionClone = cloneWithProject(this, normalizedProjField, {\n mode: FilteringMode.INVERSE,\n saveChild: config.saveChild\n }, allFields);\n dataModel = [projectionClone, rejectionClone];\n } else {\n let projectionClone = cloneWithProject(this, normalizedProjField, config, allFields);\n dataModel = projectionClone;\n }\n\n return dataModel;\n }\n\n getFieldsConfig () {\n return this._fieldConfig;\n }\n\n calculateFieldsConfig () {\n this._fieldConfig = this._fieldspace.fields.reduce((acc, fieldDef, i) => {\n acc[fieldDef.name()] = {\n index: i,\n def: { name: fieldDef.name(), type: fieldDef.type(), subtype: fieldDef.subtype() }\n };\n return acc;\n }, {});\n return this;\n }\n\n\n /**\n * Frees up the resources associated with the current DataModel instance and breaks all the links instance has in\n * the DAG.\n *\n * @public\n */\n dispose () {\n this._parent.removeChild(this);\n this._parent = null;\n }\n\n /**\n * Removes the specified child {@link DataModel} from the child list of the current {@link DataModel} instance.\n *\n * @example\n * const schema = [\n * { name: 'Name', type: 'dimension' },\n * { name: 'HorsePower', type: 'measure' },\n * { name: \"Origin\", type: 'dimension' }\n * ];\n *\n * const data = [\n * { Name: \"chevrolet chevelle malibu\", Horsepower: 130, Origin: \"USA\" },\n * { Name: \"citroen ds-21 pallas\", Horsepower: 115, Origin: \"Europe\" },\n * { Name: \"datsun pl510\", Horsepower: 88, Origin: \"Japan\" },\n * { Name: \"amc rebel sst\", Horsepower: 150, Origin: \"USA\"},\n * ]\n *\n * const dt = new DataModel(data, schema);\n *\n * const dt2 = dt.select(fields => fields.Origin.value === \"USA\")\n * dt.removeChild(dt2);\n *\n * @private\n *\n * @param {DataModel} child - Delegates the parent to remove this child.\n */\n removeChild (child) {\n let idx = this._children.findIndex(sibling => sibling === child);\n idx !== -1 ? this._children.splice(idx, 1) : true;\n }\n\n /**\n * Adds the specified {@link DataModel} as a parent for the current {@link DataModel} instance.\n *\n * The optional criteriaQueue is an array containing the history of transaction performed on parent\n * {@link DataModel} to get the current one.\n *\n * @param {DataModel} parent - The datamodel instance which will act as parent.\n * @param {Array} criteriaQueue - Queue contains in-between operation meta-data.\n */\n addParent (parent, criteriaQueue = []) {\n persistDerivation(this, DM_DERIVATIVES.COMPOSE, null, criteriaQueue);\n this._parent = parent;\n parent._children.push(this);\n }\n\n /**\n * Returns the parent {@link DataModel} instance.\n *\n * @example\n * const schema = [\n * { name: 'Name', type: 'dimension' },\n * { name: 'HorsePower', type: 'measure' },\n * { name: \"Origin\", type: 'dimension' }\n * ];\n *\n * const data = [\n * { Name: \"chevrolet chevelle malibu\", Horsepower: 130, Origin: \"USA\" },\n * { Name: \"citroen ds-21 pallas\", Horsepower: 115, Origin: \"Europe\" },\n * { Name: \"datsun pl510\", Horsepower: 88, Origin: \"Japan\" },\n * { Name: \"amc rebel sst\", Horsepower: 150, Origin: \"USA\"},\n * ]\n *\n * const dt = new DataModel(data, schema);\n *\n * const dt2 = dt.select(fields => fields.Origin.value === \"USA\");\n * const parentDm = dt2.getParent();\n *\n * @return {DataModel} Returns the parent DataModel instance.\n */\n getParent () {\n return this._parent;\n }\n\n /**\n * Returns the immediate child {@link DataModel} instances.\n *\n * @example\n * const schema = [\n * { name: 'Name', type: 'dimension' },\n * { name: 'HorsePower', type: 'measure' },\n * { name: \"Origin\", type: 'dimension' }\n * ];\n *\n * const data = [\n * { Name: \"chevrolet chevelle malibu\", Horsepower: 130, Origin: \"USA\" },\n * { Name: \"citroen ds-21 pallas\", Horsepower: 115, Origin: \"Europe\" },\n * { Name: \"datsun pl510\", Horsepower: 88, Origin: \"Japan\" },\n * { Name: \"amc rebel sst\", Horsepower: 150, Origin: \"USA\"},\n * ]\n *\n * const dt = new DataModel(data, schema);\n *\n * const childDm1 = dt.select(fields => fields.Origin.value === \"USA\");\n * const childDm2 = dt.select(fields => fields.Origin.value === \"Japan\");\n * const childDm3 = dt.groupBy([\"Origin\"]);\n *\n * @return {DataModel[]} Returns the immediate child DataModel instances.\n */\n getChildren() {\n return this._children;\n }\n\n /**\n * Returns the in-between operation meta data while creating the current {@link DataModel} instance.\n *\n * @example\n * const schema = [\n * { name: 'Name', type: 'dimension' },\n * { name: 'HorsePower', type: 'measure' },\n * { name: \"Origin\", type: 'dimension' }\n * ];\n *\n * const data = [\n * { Name: \"chevrolet chevelle malibu\", Horsepower: 130, Origin: \"USA\" },\n * { Name: \"citroen ds-21 pallas\", Horsepower: 115, Origin: \"Europe\" },\n * { Name: \"datsun pl510\", Horsepower: 88, Origin: \"Japan\" },\n * { Name: \"amc rebel sst\", Horsepower: 150, Origin: \"USA\"},\n * ]\n *\n * const dt = new DataModel(data, schema);\n * const dt2 = dt.select(fields => fields.Origin.value === \"USA\");\n * const dt3 = dt2.groupBy([\"Origin\"]);\n * const derivations = dt3.getDerivations();\n *\n * @return {Any[]} Returns the derivation meta data.\n */\n getDerivations() {\n return this._derivation;\n }\n}\n\nexport default Relation;\n","/* eslint-disable default-case */\n\nimport { FieldType, DimensionSubtype, DataFormat } from './enums';\nimport {\n persistDerivation,\n getRootGroupByModel,\n propagateToAllDataModels,\n getRootDataModel,\n propagateImmutableActions,\n addToPropNamespace,\n sanitizeUnitSchema\n} from './helper';\nimport { DM_DERIVATIVES, PROPAGATION } from './constants';\nimport {\n dataBuilder,\n rowDiffsetIterator,\n groupBy\n} from './operator';\nimport { createBinnedFieldData } from './operator/bucket-creator';\nimport Relation from './relation';\nimport reducerStore from './utils/reducer-store';\nimport { createFields } from './field-creator';\nimport InvalidAwareTypes from './invalid-aware-types';\n\n/**\n * DataModel is an in-browser representation of tabular data. It supports\n * {@link https://en.wikipedia.org/wiki/Relational_algebra | relational algebra} operators as well as generic data\n * processing opearators.\n * DataModel extends {@link Relation} class which defines all the relational algebra opreators. DataModel gives\n * definition of generic data processing operators which are not relational algebra complient.\n *\n * @public\n * @class\n * @extends Relation\n * @memberof Datamodel\n */\nclass DataModel extends Relation {\n /**\n * Creates a new DataModel instance by providing data and schema. Data could be in the form of\n * - Flat JSON\n * - DSV String\n * - 2D Array\n *\n * By default DataModel finds suitable adapter to serialize the data. DataModel also expects a\n * {@link Schema | schema} for identifying the variables present in data.\n *\n * @constructor\n * @example\n * const data = loadData('cars.csv');\n * const schema = [\n * { name: 'Name', type: 'dimension' },\n * { name: 'Miles_per_Gallon', type: 'measure', unit : 'cm', scale: '1000', numberformat: val => `${val}G`},\n * { name: 'Cylinders', type: 'dimension' },\n * { name: 'Displacement', type: 'measure' },\n * { name: 'Horsepower', type: 'measure' },\n * { name: 'Weight_in_lbs', type: 'measure' },\n * { name: 'Acceleration', type: 'measure' },\n * { name: 'Year', type: 'dimension', subtype: 'datetime', format: '%Y' },\n * { name: 'Origin', type: 'dimension' }\n * ];\n * const dm = new DataModel(data, schema, { name: 'Cars' });\n * table(dm);\n *\n * @public\n *\n * @param {Array. | string | Array.} data Input data in any of the mentioned formats\n * @param {Array.} schema Defination of the variables. Order of the variables in data and order of the\n * variables in schema has to be same.\n * @param {object} [options] Optional arguments to specify more settings regarding the creation part\n * @param {string} [options.name] Name of the datamodel instance. If no name is given an auto generated name is\n * assigned to the instance.\n * @param {string} [options.fieldSeparator=','] specify field separator type if the data is of type dsv string.\n */\n constructor (...args) {\n super(...args);\n\n this._onPropagation = [];\n this._sortingDetails = [];\n }\n\n /**\n * Reducers are simple functions which reduces an array of numbers to a representative number of the set.\n * Like an array of numbers `[10, 20, 5, 15]` can be reduced to `12.5` if average / mean reducer function is\n * applied. All the measure fields in datamodel (variables in data) needs a reducer to handle aggregation.\n *\n * @public\n *\n * @return {ReducerStore} Singleton instance of {@link ReducerStore}.\n */\n static get Reducers () {\n return reducerStore;\n }\n\n /**\n * Configure null, undefined, invalid values in the source data\n *\n * @public\n *\n * @param {Object} [config] - Configuration to control how null, undefined and non-parsable values are\n * represented in DataModel.\n * @param {string} [config.undefined] - Define how an undefined value will be represented.\n * @param {string} [config.null] - Define how a null value will be represented.\n * @param {string} [config.invalid] - Define how a non-parsable value will be represented.\n */\n static configureInvalidAwareTypes (config) {\n return InvalidAwareTypes.invalidAwareVals(config);\n }\n\n /**\n * Retrieve the data attached to an instance in JSON format.\n *\n * @example\n * // DataModel instance is already prepared and assigned to dm variable\n * const data = dm.getData({\n * order: 'column',\n * formatter: {\n * origin: (val) => val === 'European Union' ? 'EU' : val;\n * }\n * });\n * console.log(data);\n *\n * @public\n *\n * @param {Object} [options] Options to control how the raw data is to be returned.\n * @param {string} [options.order='row'] Defines if data is retieved in row order or column order. Possible values\n * are `'rows'` and `'columns'`\n * @param {Function} [options.formatter=null] Formats the output data. This expects an object, where the keys are\n * the name of the variable needs to be formatted. The formatter function is called for each row passing the\n * value of the cell for a particular row as arguments. The formatter is a function in the form of\n * `function (value, rowId, schema) => { ... }`\n * Know more about {@link Fomatter}.\n *\n * @return {Array} Returns a multidimensional array of the data with schema. The return format looks like\n * ```\n * {\n * data,\n * schema\n * }\n * ```\n */\n getData (options) {\n const defOptions = {\n order: 'row',\n formatter: null,\n withUid: false,\n getAllFields: false,\n sort: []\n };\n options = Object.assign({}, defOptions, options);\n const fields = this.getPartialFieldspace().fields;\n\n const dataGenerated = dataBuilder.call(\n this,\n this.getPartialFieldspace().fields,\n this._rowDiffset,\n options.getAllFields ? fields.map(d => d.name()).join() : this._colIdentifier,\n options.sort,\n {\n columnWise: options.order === 'column',\n addUid: !!options.withUid\n }\n );\n\n if (!options.formatter) {\n return dataGenerated;\n }\n\n const { formatter } = options;\n const { data, schema, uids } = dataGenerated;\n const fieldNames = schema.map((e => e.name));\n const fmtFieldNames = Object.keys(formatter);\n const fmtFieldIdx = fmtFieldNames.reduce((acc, next) => {\n const idx = fieldNames.indexOf(next);\n if (idx !== -1) {\n acc.push([idx, formatter[next]]);\n }\n return acc;\n }, []);\n\n if (options.order === 'column') {\n fmtFieldIdx.forEach((elem) => {\n const fIdx = elem[0];\n const fmtFn = elem[1];\n\n data[fIdx].forEach((datum, datumIdx) => {\n data[fIdx][datumIdx] = fmtFn.call(\n undefined,\n datum,\n uids[datumIdx],\n schema[fIdx]\n );\n });\n });\n } else {\n data.forEach((datum, datumIdx) => {\n fmtFieldIdx.forEach((elem) => {\n const fIdx = elem[0];\n const fmtFn = elem[1];\n\n datum[fIdx] = fmtFn.call(\n undefined,\n datum[fIdx],\n uids[datumIdx],\n schema[fIdx]\n );\n });\n });\n }\n\n return dataGenerated;\n }\n\n /**\n * Groups the data using particular dimensions and by reducing measures. It expects a list of dimensions using which\n * it projects the datamodel and perform aggregations to reduce the duplicate tuples. Refer this\n * {@link link_to_one_example_with_group_by | document} to know the intuition behind groupBy.\n *\n * DataModel by default provides definition of few {@link reducer | Reducers}.\n * {@link ReducerStore | User defined reducers} can also be registered.\n *\n * This is the chained implementation of `groupBy`.\n * `groupBy` also supports {@link link_to_compose_groupBy | composability}\n *\n * @example\n * const groupedDM = dm.groupBy(['Year'], { horsepower: 'max' } );\n * console.log(groupedDm);\n *\n * @public\n *\n * @param {Array.} fieldsArr - Array containing the name of dimensions\n * @param {Object} [reducers={}] - A map whose key is the variable name and value is the name of the reducer. If its\n * not passed, or any variable is ommitted from the object, default aggregation function is used from the\n * schema of the variable.\n *\n * @return {DataModel} Returns a new DataModel instance after performing the groupby.\n */\n groupBy (fieldsArr, reducers = {}, config = { saveChild: true }) {\n const groupByString = `${fieldsArr.join()}`;\n let params = [this, fieldsArr, reducers];\n const newDataModel = groupBy(...params);\n\n persistDerivation(\n newDataModel,\n DM_DERIVATIVES.GROUPBY,\n { fieldsArr, groupByString, defaultReducer: reducerStore.defaultReducer() },\n reducers\n );\n\n if (config.saveChild) {\n this._children.push(newDataModel);\n }\n newDataModel._parent = this;\n\n return newDataModel;\n }\n\n /**\n * Performs sorting operation on the current {@link DataModel} instance according to the specified sorting details.\n * Like every other operator it doesn't mutate the current DataModel instance on which it was called, instead\n * returns a new DataModel instance containing the sorted data.\n *\n * DataModel support multi level sorting by listing the variables using which sorting needs to be performed and\n * the type of sorting `ASC` or `DESC`.\n *\n * In the following example, data is sorted by `Origin` field in `DESC` order in first level followed by another\n * level of sorting by `Acceleration` in `ASC` order.\n *\n * @example\n * // here dm is the pre-declared DataModel instance containing the data of 'cars.json' file\n * let sortedDm = dm.sort([\n * [\"Origin\", \"DESC\"]\n * [\"Acceleration\"] // Default value is ASC\n * ]);\n *\n * console.log(dm.getData());\n * console.log(sortedDm.getData());\n *\n * // Sort with a custom sorting function\n * sortedDm = dm.sort([\n * [\"Origin\", \"DESC\"]\n * [\"Acceleration\", (a, b) => a - b] // Custom sorting function\n * ]);\n *\n * console.log(dm.getData());\n * console.log(sortedDm.getData());\n *\n * @text\n * DataModel also provides another sorting mechanism out of the box where sort is applied to a variable using\n * another variable which determines the order.\n * Like the above DataModel contains three fields `Origin`, `Name` and `Acceleration`. Now, the data in this\n * model can be sorted by `Origin` field according to the average value of all `Acceleration` for a\n * particular `Origin` value.\n *\n * @example\n * // here dm is the pre-declared DataModel instance containing the data of 'cars.json' file\n * const sortedDm = dm.sort([\n * ['Origin', ['Acceleration', (a, b) => avg(...a.Acceleration) - avg(...b.Acceleration)]]\n * ]);\n *\n * console.log(dm.getData());\n * console.log(sortedDm.getData());\n *\n * @public\n *\n * @param {Array.} sortingDetails - Sorting details based on which the sorting will be performed.\n * @return {DataModel} Returns a new instance of DataModel with sorted data.\n */\n sort (sortingDetails) {\n const rawData = this.getData({\n order: 'row',\n sort: sortingDetails\n });\n const header = rawData.schema.map(field => field.name);\n const dataInCSVArr = [header].concat(rawData.data);\n\n const sortedDm = new this.constructor(dataInCSVArr, rawData.schema, { dataFormat: 'DSVArr' });\n sortedDm._sortingDetails = sortingDetails;\n return sortedDm;\n }\n\n /**\n * Performs the serialization operation on the current {@link DataModel} instance according to the specified data\n * type. When an {@link DataModel} instance is created, it de-serializes the input data into its internal format,\n * and during its serialization process, it converts its internal data format to the specified data type and returns\n * that data regardless what type of data is used during the {@link DataModel} initialization.\n *\n * @example\n * // here dm is the pre-declared DataModel instance.\n * const csvData = dm.serialize(DataModel.DataFormat.DSV_STR, { fieldSeparator: \",\" });\n * console.log(csvData); // The csv formatted data.\n *\n * const jsonData = dm.serialize(DataModel.DataFormat.FLAT_JSON);\n * console.log(jsonData); // The json data.\n *\n * @public\n *\n * @param {string} type - The data type name for serialization.\n * @param {Object} options - The optional option object.\n * @param {string} options.fieldSeparator - The field separator character for DSV data type.\n * @return {Array|string} Returns the serialized data.\n */\n serialize (type, options) {\n type = type || this._dataFormat;\n options = Object.assign({}, { fieldSeparator: ',' }, options);\n\n const fields = this.getFieldspace().fields;\n const colData = fields.map(f => f.formattedData());\n const rowsCount = colData[0].length;\n let serializedData;\n let rowIdx;\n let colIdx;\n\n if (type === DataFormat.FLAT_JSON) {\n serializedData = [];\n for (rowIdx = 0; rowIdx < rowsCount; rowIdx++) {\n const row = {};\n for (colIdx = 0; colIdx < fields.length; colIdx++) {\n row[fields[colIdx].name()] = colData[colIdx][rowIdx];\n }\n serializedData.push(row);\n }\n } else if (type === DataFormat.DSV_STR) {\n serializedData = [fields.map(f => f.name()).join(options.fieldSeparator)];\n for (rowIdx = 0; rowIdx < rowsCount; rowIdx++) {\n const row = [];\n for (colIdx = 0; colIdx < fields.length; colIdx++) {\n row.push(colData[colIdx][rowIdx]);\n }\n serializedData.push(row.join(options.fieldSeparator));\n }\n serializedData = serializedData.join('\\n');\n } else if (type === DataFormat.DSV_ARR) {\n serializedData = [fields.map(f => f.name())];\n for (rowIdx = 0; rowIdx < rowsCount; rowIdx++) {\n const row = [];\n for (colIdx = 0; colIdx < fields.length; colIdx++) {\n row.push(colData[colIdx][rowIdx]);\n }\n serializedData.push(row);\n }\n } else {\n throw new Error(`Data type ${type} is not supported`);\n }\n\n return serializedData;\n }\n\n addField (field) {\n const fieldName = field.name();\n this._colIdentifier += `,${fieldName}`;\n const partialFieldspace = this._partialFieldspace;\n\n if (!partialFieldspace.fieldsObj()[field.name()]) {\n partialFieldspace.fields.push(field);\n } else {\n const fieldIndex = partialFieldspace.fields.findIndex(fieldinst => fieldinst.name() === fieldName);\n fieldIndex >= 0 && (partialFieldspace.fields[fieldIndex] = field);\n }\n\n // flush out cached namespace values on addition of new fields\n partialFieldspace._cachedFieldsObj = null;\n partialFieldspace._cachedDimension = null;\n partialFieldspace._cachedMeasure = null;\n\n this.__calculateFieldspace().calculateFieldsConfig();\n return this;\n }\n\n /**\n * Creates a new variable calculated from existing variables. This method expects the definition of the newly created\n * variable and a function which resolves the value of the new variable from existing variables.\n *\n * Can create a new measure based on existing variables:\n * @example\n * // DataModel already prepared and assigned to dm variable;\n * const newDm = dataModel.calculateVariable({\n * name: 'powerToWeight',\n * type: 'measure'\n * }, ['horsepower', 'weight_in_lbs', (hp, weight) => hp / weight ]);\n *\n *\n * Can create a new dimension based on existing variables:\n * @example\n * // DataModel already prepared and assigned to dm variable;\n * const child = dataModel.calculateVariable(\n * {\n * name: 'Efficiency',\n * type: 'dimension'\n * }, ['horsepower', (hp) => {\n * if (hp < 80) { return 'low'; },\n * else if (hp < 120) { return 'moderate'; }\n * else { return 'high' }\n * }]);\n *\n * @public\n *\n * @param {Object} schema - The schema of newly defined variable.\n * @param {Array.} dependency - An array containing the dependency variable names and a resolver\n * function as the last element.\n * @param {Object} config - An optional config object.\n * @param {boolean} [config.saveChild] - Whether the newly created DataModel will be a child.\n * @param {boolean} [config.replaceVar] - Whether the newly created variable will replace the existing variable.\n * @return {DataModel} Returns an instance of DataModel with the new field.\n */\n calculateVariable (schema, dependency, config) {\n schema = sanitizeUnitSchema(schema);\n config = Object.assign({}, { saveChild: true, replaceVar: false }, config);\n\n const fieldsConfig = this.getFieldsConfig();\n const depVars = dependency.slice(0, dependency.length - 1);\n const retrieveFn = dependency[dependency.length - 1];\n\n if (fieldsConfig[schema.name] && !config.replaceVar) {\n throw new Error(`${schema.name} field already exists in datamodel`);\n }\n\n const depFieldIndices = depVars.map((field) => {\n const fieldSpec = fieldsConfig[field];\n if (!fieldSpec) {\n // @todo dont throw error here, use warning in production mode\n throw new Error(`${field} is not a valid column name.`);\n }\n return fieldSpec.index;\n });\n\n const clone = this.clone();\n\n const fs = clone.getFieldspace().fields;\n const suppliedFields = depFieldIndices.map(idx => fs[idx]);\n\n let cachedStore = {};\n let cloneProvider = () => this.detachedRoot();\n\n const computedValues = [];\n rowDiffsetIterator(clone._rowDiffset, (i) => {\n const fieldsData = suppliedFields.map(field => field.partialField.data[i]);\n computedValues[i] = retrieveFn(...fieldsData, i, cloneProvider, cachedStore);\n });\n const [field] = createFields([computedValues], [schema], [schema.name]);\n clone.addField(field);\n\n persistDerivation(clone, DM_DERIVATIVES.CAL_VAR, { config: schema, fields: depVars }, retrieveFn);\n\n return clone;\n }\n\n /**\n * Propagates changes across all the connected DataModel instances.\n *\n * @param {Array} identifiers - A list of identifiers that were interacted with.\n * @param {Object} payload - The interaction specific details.\n *\n * @return {DataModel} DataModel instance.\n */\n propagate (identifiers, config = {}, addToNameSpace, propConfig = {}) {\n const isMutableAction = config.isMutableAction;\n const propagationSourceId = config.sourceId;\n const payload = config.payload;\n const rootModel = getRootDataModel(this);\n const propagationNameSpace = rootModel._propagationNameSpace;\n const rootGroupByModel = getRootGroupByModel(this);\n const rootModels = {\n groupByModel: rootGroupByModel,\n model: rootModel\n };\n\n addToNameSpace && addToPropNamespace(propagationNameSpace, config, this);\n propagateToAllDataModels(identifiers, rootModels, { propagationNameSpace, sourceId: propagationSourceId },\n Object.assign({\n payload\n }, config));\n\n if (isMutableAction) {\n propagateImmutableActions(propagationNameSpace, rootModels, {\n config,\n propConfig\n }, this);\n }\n\n return this;\n }\n\n /**\n * Associates a callback with an event name.\n *\n * @param {string} eventName - The name of the event.\n * @param {Function} callback - The callback to invoke.\n * @return {DataModel} Returns this current DataModel instance itself.\n */\n on (eventName, callback) {\n switch (eventName) {\n case PROPAGATION:\n this._onPropagation.push(callback);\n break;\n }\n return this;\n }\n\n /**\n * Unsubscribes the callbacks for the provided event name.\n *\n * @param {string} eventName - The name of the event to unsubscribe.\n * @return {DataModel} Returns the current DataModel instance itself.\n */\n unsubscribe (eventName) {\n switch (eventName) {\n case PROPAGATION:\n this._onPropagation = [];\n break;\n\n }\n return this;\n }\n\n /**\n * This method is used to invoke the method associated with propagation.\n *\n * @param {Object} payload The interaction payload.\n * @param {DataModel} identifiers The propagated DataModel.\n * @memberof DataModel\n */\n handlePropagation (propModel, payload) {\n let propListeners = this._onPropagation;\n propListeners.forEach(fn => fn.call(this, propModel, payload));\n }\n\n /**\n * Performs the binning operation on a measure field based on the binning configuration. Binning means discretizing\n * values of a measure. Binning configuration contains an array; subsequent values from the array marks the boundary\n * of buckets in [inclusive, exclusive) range format. This operation does not mutate the subject measure field,\n * instead, it creates a new field (variable) of type dimension and subtype binned.\n *\n * Binning can be configured by\n * - providing custom bin configuration with non-uniform buckets,\n * - providing bins count,\n * - providing each bin size,\n *\n * When custom `buckets` are provided as part of binning configuration:\n * @example\n * // DataModel already prepared and assigned to dm variable\n * const config = { name: 'binnedHP', buckets: [30, 80, 100, 110] }\n * const binnedDM = dataModel.bin('horsepower', config);\n *\n * @text\n * When `binsCount` is defined as part of binning configuration:\n * @example\n * // DataModel already prepared and assigned to dm variable\n * const config = { name: 'binnedHP', binsCount: 5, start: 0, end: 100 }\n * const binDM = dataModel.bin('horsepower', config);\n *\n * @text\n * When `binSize` is defined as part of binning configuration:\n * @example\n * // DataModel already prepared and assigned to dm variable\n * const config = { name: 'binnedHorsepower', binSize: 20, start: 5}\n * const binDM = dataModel.bin('horsepower', config);\n *\n * @public\n *\n * @param {string} measureFieldName - The name of the target measure field.\n * @param {Object} config - The config object.\n * @param {string} [config.name] - The name of the new field which will be created.\n * @param {string} [config.buckets] - An array containing the bucket ranges.\n * @param {string} [config.binSize] - The size of each bin. It is ignored when buckets are given.\n * @param {string} [config.binsCount] - The total number of bins to generate. It is ignored when buckets are given.\n * @param {string} [config.start] - The start value of the bucket ranges. It is ignored when buckets are given.\n * @param {string} [config.end] - The end value of the bucket ranges. It is ignored when buckets are given.\n * @return {DataModel} Returns a new {@link DataModel} instance with the new field.\n */\n bin (measureFieldName, config) {\n const fieldsConfig = this.getFieldsConfig();\n\n if (!fieldsConfig[measureFieldName]) {\n throw new Error(`Field ${measureFieldName} doesn't exist`);\n }\n\n const binFieldName = config.name || `${measureFieldName}_binned`;\n\n if (fieldsConfig[binFieldName]) {\n throw new Error(`Field ${binFieldName} already exists`);\n }\n\n const measureField = this.getFieldspace().fieldsObj()[measureFieldName];\n const { binnedData, bins } = createBinnedFieldData(measureField, this._rowDiffset, config);\n\n const binField = createFields([binnedData], [\n {\n name: binFieldName,\n type: FieldType.DIMENSION,\n subtype: DimensionSubtype.BINNED,\n bins\n }], [binFieldName])[0];\n\n const clone = this.clone();\n clone.addField(binField);\n\n persistDerivation(clone, DM_DERIVATIVES.BIN, { measureFieldName, config, binFieldName }, null);\n\n return clone;\n }\n\n /**\n * Creates a new {@link DataModel} instance with completely detached root from current {@link DataModel} instance,\n * the new {@link DataModel} instance has no parent-children relationship with the current one, but has same data as\n * the current one.\n * This API is useful when a completely different {@link DataModel} but with same data as the current instance is\n * needed.\n *\n * @example\n * const dm = new DataModel(data, schema);\n * const detachedDm = dm.detachedRoot();\n *\n * // has different namespace\n * console.log(dm.getPartialFieldspace().name);\n * console.log(detachedDm.getPartialFieldspace().name);\n *\n * // has same data\n * console.log(dm.getData());\n * console.log(detachedDm.getData());\n *\n * @public\n *\n * @return {DataModel} Returns a detached {@link DataModel} instance.\n */\n detachedRoot () {\n const data = this.serialize(DataFormat.FLAT_JSON);\n const schema = this.getSchema();\n\n return new DataModel(data, schema);\n }\n}\n\nexport default DataModel;\n","import { extend2 } from '../utils';\nimport { rowDiffsetIterator } from './row-diffset-iterator';\nimport DataModel from '../export';\nimport reducerStore from '../utils/reducer-store';\nimport { defaultReducerName } from './group-by-function';\nimport { FieldType } from '../enums';\n\n/**\n * This function sanitize the user given field and return a common Array structure field\n * list\n * @param {DataModel} dataModel the dataModel operating on\n * @param {Array} fieldArr user input of field Array\n * @return {Array} arrays of field name\n */\nfunction getFieldArr (dataModel, fieldArr) {\n const retArr = [];\n const fieldStore = dataModel.getFieldspace();\n const dimensions = fieldStore.getDimension();\n\n Object.entries(dimensions).forEach(([key]) => {\n if (fieldArr && fieldArr.length) {\n if (fieldArr.indexOf(key) !== -1) {\n retArr.push(key);\n }\n } else {\n retArr.push(key);\n }\n });\n\n return retArr;\n}\n\n/**\n * This sanitize the reducer provide by the user and create a common type of object.\n * user can give function Also\n * @param {DataModel} dataModel dataModel to worked on\n * @param {Object|function} [reducers={}] reducer provided by the users\n * @return {Object} object containing reducer function for every measure\n */\nfunction getReducerObj (dataModel, reducers = {}) {\n const retObj = {};\n const fieldStore = dataModel.getFieldspace();\n const measures = fieldStore.getMeasure();\n const defReducer = reducerStore.defaultReducer();\n\n Object.keys(measures).forEach((measureName) => {\n if (typeof reducers[measureName] !== 'string') {\n reducers[measureName] = measures[measureName].defAggFn();\n }\n const reducerFn = reducerStore.resolve(reducers[measureName]);\n if (reducerFn) {\n retObj[measureName] = reducerFn;\n } else {\n retObj[measureName] = defReducer;\n reducers[measureName] = defaultReducerName;\n }\n });\n return retObj;\n}\n\n/**\n * main function which perform the group-by operations which reduce the measures value is the\n * fields are common according to the reducer function provided\n * @param {DataModel} dataModel the dataModel to worked\n * @param {Array} fieldArr fields according to which the groupby should be worked\n * @param {Object|Function} reducers reducers function\n * @param {DataModel} existingDataModel Existing datamodel instance\n * @return {DataModel} new dataModel with the group by\n */\nfunction groupBy (dataModel, fieldArr, reducers, existingDataModel) {\n const sFieldArr = getFieldArr(dataModel, fieldArr);\n const reducerObj = getReducerObj(dataModel, reducers);\n const fieldStore = dataModel.getFieldspace();\n const fieldStoreObj = fieldStore.fieldsObj();\n const dbName = fieldStore.name;\n const dimensionArr = [];\n const measureArr = [];\n const schema = [];\n const hashMap = {};\n const data = [];\n let newDataModel;\n\n // Prepare the schema\n Object.entries(fieldStoreObj).forEach(([key, value]) => {\n if (sFieldArr.indexOf(key) !== -1 || reducerObj[key]) {\n schema.push(extend2({}, value.schema()));\n\n switch (value.schema().type) {\n case FieldType.MEASURE:\n measureArr.push(key);\n break;\n default:\n case FieldType.DIMENSION:\n dimensionArr.push(key);\n }\n }\n });\n // Prepare the data\n let rowCount = 0;\n rowDiffsetIterator(dataModel._rowDiffset, (i) => {\n let hash = '';\n dimensionArr.forEach((_) => {\n hash = `${hash}-${fieldStoreObj[_].partialField.data[i]}`;\n });\n if (hashMap[hash] === undefined) {\n hashMap[hash] = rowCount;\n data.push({});\n dimensionArr.forEach((_) => {\n data[rowCount][_] = fieldStoreObj[_].partialField.data[i];\n });\n measureArr.forEach((_) => {\n data[rowCount][_] = [fieldStoreObj[_].partialField.data[i]];\n });\n rowCount += 1;\n } else {\n measureArr.forEach((_) => {\n data[hashMap[hash]][_].push(fieldStoreObj[_].partialField.data[i]);\n });\n }\n });\n\n // reduction\n let cachedStore = {};\n let cloneProvider = () => dataModel.detachedRoot();\n data.forEach((row) => {\n const tuple = row;\n measureArr.forEach((_) => {\n tuple[_] = reducerObj[_](row[_], cloneProvider, cachedStore);\n });\n });\n if (existingDataModel) {\n existingDataModel.__calculateFieldspace();\n newDataModel = existingDataModel;\n }\n else {\n newDataModel = new DataModel(data, schema, { name: dbName });\n }\n return newDataModel;\n}\n\nexport { groupBy, getFieldArr, getReducerObj };\n","import { rowDiffsetIterator } from './row-diffset-iterator';\nimport InvalidAwareTypes from '../invalid-aware-types';\n\nconst generateBuckets = (binSize, start, end) => {\n const buckets = [];\n let next = start;\n\n while (next < end) {\n buckets.push(next);\n next += binSize;\n }\n buckets.push(next);\n\n return buckets;\n};\n\nconst findBucketRange = (bucketRanges, value) => {\n let leftIdx = 0;\n let rightIdx = bucketRanges.length - 1;\n let midIdx;\n let range;\n\n // Here use binary search as the bucketRanges is a sorted array\n while (leftIdx <= rightIdx) {\n midIdx = leftIdx + Math.floor((rightIdx - leftIdx) / 2);\n range = bucketRanges[midIdx];\n\n if (value >= range.start && value < range.end) {\n return range;\n } else if (value >= range.end) {\n leftIdx = midIdx + 1;\n } else if (value < range.start) {\n rightIdx = midIdx - 1;\n }\n }\n\n return null;\n};\n\n /**\n * Creates the bin data from input measure field and supplied configs.\n *\n * @param {Measure} measureField - The Measure field instance.\n * @param {string} rowDiffset - The datamodel rowDiffset values.\n * @param {Object} config - The config object.\n * @return {Object} Returns the binned data and the corresponding bins.\n */\nexport function createBinnedFieldData (measureField, rowDiffset, config) {\n let { buckets, binsCount, binSize, start, end } = config;\n const [dMin, dMax] = measureField.domain();\n\n if (!buckets) {\n start = (start !== 0 && (!start || start > dMin)) ? dMin : start;\n end = (end !== 0 && (!end || end < dMax)) ? (dMax + 1) : end;\n\n if (binsCount) {\n binSize = Math.ceil(Math.abs(end - start) / binsCount);\n }\n\n buckets = generateBuckets(binSize, start, end);\n }\n\n if (buckets[0] > dMin) {\n buckets.unshift(dMin);\n }\n if (buckets[buckets.length - 1] <= dMax) {\n buckets.push(dMax + 1);\n }\n\n const bucketRanges = [];\n for (let i = 0; i < buckets.length - 1; i++) {\n bucketRanges.push({\n start: buckets[i],\n end: buckets[i + 1]\n });\n }\n\n const binnedData = [];\n rowDiffsetIterator(rowDiffset, (i) => {\n const datum = measureField.partialField.data[i];\n if (datum instanceof InvalidAwareTypes) {\n binnedData.push(datum);\n return;\n }\n\n const range = findBucketRange(bucketRanges, datum);\n binnedData.push(`${range.start}-${range.end}`);\n });\n\n return { binnedData, bins: buckets };\n}\n","import { fnList } from '../operator/group-by-function';\n\nexport const { sum, avg, min, max, first, last, count, std: sd } = fnList;\n","import DataModel from './datamodel';\nimport {\n compose,\n bin,\n select,\n project,\n groupby as groupBy,\n calculateVariable,\n sort,\n crossProduct,\n difference,\n naturalJoin,\n leftOuterJoin,\n rightOuterJoin,\n fullOuterJoin,\n union\n} from './operator';\nimport * as Stats from './stats';\nimport * as enums from './enums';\nimport { DateTimeFormatter } from './utils';\nimport { DataFormat, FilteringMode } from './constants';\nimport InvalidAwareTypes from './invalid-aware-types';\nimport pkg from '../package.json';\n\nDataModel.Operators = {\n compose,\n bin,\n select,\n project,\n groupBy,\n calculateVariable,\n sort,\n crossProduct,\n difference,\n naturalJoin,\n leftOuterJoin,\n rightOuterJoin,\n fullOuterJoin,\n union\n};\nDataModel.Stats = Stats;\nObject.assign(DataModel, enums);\nDataModel.DateTimeFormatter = DateTimeFormatter;\nDataModel.DataFormat = DataFormat;\nDataModel.FilteringMode = FilteringMode;\nDataModel.InvalidAwareTypes = InvalidAwareTypes;\nDataModel.version = pkg.version;\n\nexport default DataModel;\n","\n/**\n * DataModel's opearators are exposed as composable functional operators as well as chainable operators. Chainable\n * operators are called on the instances of {@link Datamodel} and {@link Relation} class.\n *\n * Those same operators can be used as composable operators from `DataModel.Operators` namespace.\n *\n * All these operators have similar behaviour. All these operators when called with the argument returns a function\n * which expects a DataModel instance.\n *\n * @public\n * @module Operators\n * @namespace DataModel\n */\n\n/**\n * This is functional version of selection operator. {@link link_to_selection | Selection} is a row filtering operation.\n * It takes {@link SelectionPredicate | predicate} for filtering criteria and returns a function.\n * The returned function is called with the DataModel instance on which the action needs to be performed.\n *\n * {@link SelectionPredicate} is a function which returns a boolean value. For selection opearation the selection\n * function is called for each row of DataModel instance with the current row passed as argument.\n *\n * After executing {@link SelectionPredicate} the rows are labeled as either an entry of selection set or an entry\n * of rejection set.\n *\n * {@link FilteringMode} operates on the selection and rejection set to determine which one would reflect in the\n * resulatant datamodel.\n *\n * @warning\n * [Warn] Selection and rejection set is only a logical idea for concept explanation purpose.\n *\n * @error\n * [Error] `FilteringMode.ALL` is not a valid working mode for functional version of `select`. Its only avialable on the\n * chained version.\n *\n * @example\n * const select = DataModel.Operators.select;\n * usaCarsFn = select(fields => fields.Origin.value === 'USA');\n * usaCarsDm = usaCarsFn(dm);\n * console.log(usaCarsDm);\n *\n * @public\n * @namespace DataModel\n * @module Operators\n *\n * @param {SelectionPredicate} selectFn - Predicate funciton which is called for each row with the current row\n * ```\n * function (row, i) { ... }\n * ```\n * @param {Object} [config] - The configuration object to control the inclusion exclusion of a row in resultant\n * DataModel instance\n * @param {FilteringMode} [config.mode=FilteringMode.NORMAL] - The mode of the selection\n *\n * @return {PreparatorFunction} Function which expects an instance of DataModel on which the operator needs to be\n * applied.\n */\nexport const select = (...args) => dm => dm.select(...args);\n\n/**\n * This is functional version of projection operator. {@link link_to_projection | Projection} is a column filtering\n * operation.It expects list of fields name and either include those or exclude those based on {@link FilteringMode} on\n * the resultant variable.It returns a function which is called with the DataModel instance on which the action needs\n * to be performed.\n *\n * Projection expects array of fields name based on which it creates the selection and rejection set. All the field\n * whose name is present in array goes in selection set and rest of the fields goes in rejection set.\n *\n * {@link FilteringMode} operates on the selection and rejection set to determine which one would reflect in the\n * resulatant datamodel.\n *\n * @warning\n * Selection and rejection set is only a logical idea for concept explanation purpose.\n *\n * @error\n * `FilteringMode.ALL` is not a valid working mode for functional version of `select`. Its only avialable on the\n * chained version.\n *\n * @public\n * @namespace DataModel\n * @module Operators\n *\n * @param {Array.} projField - An array of column names in string or regular expression.\n * @param {Object} [config] - An optional config to control the creation of new DataModel\n * @param {FilteringMode} [config.mode=FilteringMode.NORMAL] - Mode of the projection\n *\n * @return {PreparatorFunction} Function which expects an instance of DataModel on which the operator needs to be\n * applied.\n */\nexport const project = (...args) => dm => dm.project(...args);\n\n/**\n * This is functional version of binnig operator. Binning happens on a measure field based on a binning configuration.\n * Binning in DataModel does not aggregate the number of rows present in DataModel instance after binning, it just adds\n * a new field with the binned value. Refer binning {@link example_of_binning | example} to have a intuition of what\n * binning is and the use case.\n *\n * Binning can be configured by\n * - providing custom bin configuration with non uniform buckets\n * - providing bin count\n * - providing each bin size\n *\n * When custom buckets are provided as part of binning configuration\n * @example\n * // DataModel already prepared and assigned to dm vairable\n * const buckets = {\n * start: 30\n * stops: [80, 100, 110]\n * };\n * const config = { buckets, name: 'binnedHP' }\n * const binFn = bin('horsepower', config);\n * const binnedDm = binFn(dm);\n *\n * @text\n * When `binCount` is defined as part of binning configuration\n * @example\n * // DataModel already prepared and assigned to dm vairable\n * const config = { binCount: 5, name: 'binnedHP' }\n * const binFn = bin('horsepower', config);\n * const binnedDm = binFn(Dm);\n *\n * @text\n * When `binSize` is defined as part of binning configuration\n * @example\n * // DataModel already prepared and assigned to dm vairable\n * const config = { binSize: 200, name: 'binnedHorsepower' }\n * const binnedDm = dataModel.bin('horsepower', config);\n * const binnedDm = binFn(Dm);\n *\n * @public\n * @namespace DataModel\n * @module Operators\n *\n * @param {String} name Name of measure which will be used to create bin\n * @param {Object} config Config required for bin creation\n * @param {Array.} config.bucketObj.stops Defination of bucket ranges. Two subsequent number from arrays\n * are picked and a range is created. The first number from range is inclusive and the second number from range\n * is exclusive.\n * @param {Number} [config.bucketObj.startAt] Force the start of the bin from a particular number.\n * If not mentioned, the start of the bin or the lower domain of the data if stops is not mentioned, else its\n * the first value of the stop.\n * @param {Number} config.binSize Bucket size for each bin\n * @param {Number} config.binCount Number of bins which will be created\n * @param {String} config.name Name of the new binned field to be created\n *\n * @return {PreparatorFunction} Function which expects an instance of DataModel on which the operator needs to be\n * applied.\n */\nexport const bin = (...args) => dm => dm.bin(...args);\n\n/**\n * This is functional version of `groupBy` operator.Groups the data using particular dimensions and by reducing\n * measures. It expects a list of dimensions using which it projects the datamodel and perform aggregations to reduce\n * the duplicate tuples. Refer this {@link link_to_one_example_with_group_by | document} to know the intuition behind\n * groupBy.\n *\n * DataModel by default provides definition of few {@link reducer | Reducers}.\n * {@link ReducerStore | User defined reducers} can also be registered.\n *\n * This is the chained implementation of `groupBy`.\n * `groupBy` also supports {@link link_to_compose_groupBy | composability}\n *\n * @example\n * const groupBy = DataModel.Operators.groupBy;\n * const groupedFn = groupBy(['Year'], { horsepower: 'max' } );\n * groupedDM = groupByFn(dm);\n *\n * @public\n *\n * @param {Array.} fieldsArr - Array containing the name of dimensions\n * @param {Object} [reducers={}] - A map whose key is the variable name and value is the name of the reducer. If its\n * not passed, or any variable is ommitted from the object, default aggregation function is used from the\n * schema of the variable.\n *\n * @return {PreparatorFunction} Function which expects an instance of DataModel on which the operator needs to be\n * applied.\n */\nexport const groupBy = (...args) => dm => dm.groupBy(...args);\n\n/**\n * Enables composing operators to run multiple operations and save group of operataion as named opration on a DataModel.\n * The resulting DataModel will be the result of all the operation provided. The operations provided will be executed in\n * a serial manner ie. result of one operation will be the input for the next operations (like pipe operator in unix).\n *\n * Suported operations in compose are\n * - `select`\n * - `project`\n * - `groupBy`\n * - `bin`\n * - `compose`\n *\n * @example\n * const compose = DataModel.Operators.compose;\n * const select = DataModel.Operators.select;\n * const project = DataModel.Operators.project;\n *\n * let composedFn = compose(\n * select(fields => fields.netprofit.value <= 15),\n * project(['netprofit', 'netsales']));\n *\n * const dataModel = new DataModel(data1, schema1);\n *\n * let composedDm = composedFn(dataModel);\n *\n * @public\n * @namespace DataModel\n * @module Operators\n *\n * @param {Array.} operators: An array of operation that will be applied on the\n * datatable.\n *\n * @returns {DataModel} Instance of resultant DataModel\n */\nexport const compose = (...operations) =>\n (dm, config = { saveChild: true }) => {\n let currentDM = dm;\n let frstChild;\n const derivations = [];\n const saveChild = config.saveChild;\n\n operations.forEach((operation) => {\n currentDM = operation(currentDM);\n derivations.push(...currentDM._derivation);\n if (!frstChild) {\n frstChild = currentDM;\n }\n });\n\n saveChild && currentDM.addParent(dm, derivations);\n if (derivations.length > 1) {\n frstChild.dispose();\n }\n\n return currentDM;\n };\n","/**\n * Wrapper on calculateVariable() method of DataModel to behave\n * the pure-function functionality.\n *\n * @param {Array} args - The argument list.\n * @return {any} Returns the returned value of calling function.\n */\nexport const calculateVariable = (...args) => dm => dm.calculateVariable(...args);\n\n/**\n * Wrapper on sort() method of DataModel to behave\n * the pure-function functionality.\n *\n * @param {Array} args - The argument list.\n * @return {any} Returns the returned value of calling function.\n */\nexport const sort = (...args) => dm => dm.sort(...args);\n","import { crossProduct } from './cross-product';\nimport { naturalJoinFilter } from './natural-join-filter-function';\n\nexport function naturalJoin (dataModel1, dataModel2) {\n return crossProduct(dataModel1, dataModel2, naturalJoinFilter(dataModel1, dataModel2), true);\n}\n","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"hyperdis\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"hyperdis\"] = factory();\n\telse\n\t\troot[\"hyperdis\"] = factory();\n})(window, function() {\nreturn "," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 0);\n","const makeEntry = (arr, sCon) => {\n arr.forEach((elem) => {\n if (elem === undefined || elem === null) {\n return;\n }\n sCon[elem] = 1;\n });\n};\n\nexport default class ForeignSet {\n constructor (arr) {\n this._set = {};\n makeEntry(arr, this._set);\n }\n\n append (arr) {\n makeEntry(arr, this._set);\n return this;\n }\n\n toArray () {\n return Object.keys(this._set);\n }\n\n static difference (set1, set2) {\n let key;\n const filteredKeys = [],\n s1 = set1._set,\n s2 = set2._set;\n for (key in s1) {\n if (!({}).hasOwnProperty.call(s1, key)) {\n continue;\n }\n if (key in s2) {\n continue;\n }\n filteredKeys.push(key);\n }\n return new ForeignSet(filteredKeys);\n }\n}\n","/* global window */\n\nimport ForeignSet from './set';\n\nconst\n isSimpleObject = (obj) => {\n let token;\n if (typeof obj === 'object') {\n if (obj === null) { return false; }\n token = Object.prototype.toString.call(obj);\n if (token === '[object Object]') {\n return (obj.constructor.toString().match(/^function (.*)\\(\\)/m) || [])[1] === 'Object';\n }\n }\n return false;\n },\n minMsThreshold = 16,\n /* istanbul ignore next */win = typeof window === 'undefined' ? (this || {}) : window,\n /* istanbul ignore next */ reqAnimFrame = win.requestAnimationFrame || win.webkitRequestAnimationFrame ||\n win.mozRequestAnimationFrame || win.oRequestAnimationFrame ||\n win.msRequestAnimationFrame ||\n function (callback) {\n setTimeout(callback, minMsThreshold);\n },\n\n getTimeBasedId = () => {\n if (getTimeBasedId.__lastTime === new Date().getTime()) {\n return (getTimeBasedId.__lastTime).toString() + (getTimeBasedId.__id++).toString();\n }\n\n getTimeBasedId.__id = 0;\n getTimeBasedId.__lastTime = new Date().getTime();\n return (getTimeBasedId.__lastTime).toString() + (getTimeBasedId.__id++).toString();\n },\n pullableRecent = (nodes, fn) => {\n let nFn = () => {\n fn(...nodes.map((node) => {\n const\n hist = node.history,\n l = hist.length - 1;\n return [hist[l - 1 < 0 ? 0 : l - 1], hist[l]];\n }));\n };\n nFn.__id = getTimeBasedId();\n return nFn;\n },\n pullableEnd = (nodes, fn) => {\n let nFn = () => {\n fn(...nodes.map((node) => {\n const hist = node.history;\n return [hist[0], hist[hist.length - 1]];\n }));\n };\n nFn.__id = getTimeBasedId();\n return nFn;\n },\n unique = fns => fns\n .reduce((store, fn) => {\n // @warn function with side effect, it mutates the store passed during initialization\n if (fn.__id in store.map) {\n return store;\n }\n\n store.map[fn.__id] = 1;\n store.unique.push(fn);\n\n return store;\n }, { map: {}, unique: [] })\n .unique,\n compose = fns => () => {\n fns.forEach(fn => fn());\n },\n flat = (...params) => {\n const res = [];\n params.forEach(param => res.push(...param));\n return res;\n },\n identityMap = arrays => arrays,\n splitPathProp = (path) => {\n const pathArr = path.split('.'),\n len = pathArr.length;\n return [pathArr.slice(0, len - 1), pathArr[len - 1]];\n },\n scheduler = (onFinishCallback) => {\n let queue = [],\n animationFrame = null;\n\n onFinishCallback = onFinishCallback &&\n typeof onFinishCallback === 'function' && onFinishCallback || (() => { });\n\n return (listeners, payload) => {\n [].push.apply(queue, listeners);\n if (animationFrame === null) {\n animationFrame = reqAnimFrame(() => {\n const tempQ = queue.slice(0);\n queue.length = 0;\n animationFrame = null;\n\n unique(tempQ).forEach(fn => fn());\n onFinishCallback(payload);\n });\n }\n };\n },\n fetch = namedNode => (...params) => params.map((param) => {\n const node = namedNode[param];\n return {\n name: node.name,\n qualifiedName: node.qualifiedName,\n value: node.seed\n };\n }),\n fetchAggregator = (...params) => ({\n dependencies: params.slice(0, params.length - 1),\n fn: params[params.length - 1]\n }),\n getUpstreamNodes = (list) => {\n let res = [];\n const map = {};\n list.forEach(node => map[node.qualifiedName] = -1);\n function rec (arr) {\n arr.forEach((node) => {\n let qname,\n placedIndex,\n preArr,\n postArr;\n if (!((qname = node.qualifiedName) in map)) {\n map[qname] = res.push(node) - 1;\n } else {\n placedIndex = map[qname];\n if (placedIndex !== -1 && placedIndex !== res.length - 1) {\n // If not the last element, readjust the array so that the later dependency position is saved\n preArr = res.slice(0, placedIndex);\n postArr = res.slice(placedIndex + 1);\n res = preArr.concat(postArr);\n\n // reset the index in map\n postArr.forEach((elem, i) => map[elem.qualifiedName] = i + preArr.length);\n map[qname] = res.push(node) - 1;\n }\n }\n rec(node.outgoingEdges);\n });\n }\n rec(list);\n return res;\n },\n resolver = {\n accumulate: (...params) => {\n const resp = {};\n params.forEach((nodeDetails) => {\n Object.assign(resp, { [nodeDetails.name]: nodeDetails.value });\n });\n return resp;\n },\n identity: nodeDetails => nodeDetails.value\n };\n\nfunction resolveDependencyOrder (node, resolved, resolveMap) {\n let qname;\n node.edges.forEach((neighbour) => {\n resolveDependencyOrder(neighbour, resolved, resolveMap);\n });\n\n if (node.isRoot() || (qname = node.qualifiedName) in resolveMap) {\n return;\n }\n resolved.push(node);\n resolveMap[qname] = 1;\n}\n\nclass CustomResolver {\n constructor (resolver) {\n this.fn = resolver;\n this.dep = [];\n }\n\n addDependencies(...dep) {\n this.dep.push(...dep);\n return this;\n }\n\n getDependencies () {\n return this.dep;\n }\n\n get () {\n return this.fn;\n }\n}\n\nexport {\n isSimpleObject,\n scheduler,\n compose,\n flat,\n identityMap,\n pullableEnd,\n pullableRecent,\n unique,\n splitPathProp,\n resolver,\n ForeignSet,\n resolveDependencyOrder,\n fetch,\n fetchAggregator,\n CustomResolver,\n getUpstreamNodes\n};\n","export default class GraphNode {\n constructor (name, qualifiedName, options) {\n /* istanbul ignore next */options = options || {};\n this.name = name;\n this.qualifiedName = qualifiedName;\n this.edges = [];\n this.outgoingEdges = [];\n this._seed = null;\n this.requireResolve = true;\n this.retriever = options.retriever;\n this.history = [];\n this.resolver = null;\n this.electricEdges = [];\n }\n\n addDependencies (...dep) {\n this.edges.push(...dep);\n dep.forEach(entry => entry.outgoingEdges.push(this));\n return this;\n }\n\n addElectricNode (node) {\n this.electricEdges.push(node);\n return this;\n }\n\n get seed () {\n return this._seed;\n }\n\n set seed (value) {\n this._seed = value;\n this.requireResolve = true;\n return this;\n }\n\n resolve () {\n this.seed = this.resolver(...this.retrieveDetails());\n this.history.push(this.seed);\n this.requireResolve = false;\n return this;\n }\n\n retrieveDetails () {\n if (this.edges.length === 0) {\n return [{\n name: this.name,\n qualifiedName: this.qualifiedName,\n value: this.seed\n }];\n }\n return this.retriever(...this.edges.map(edge => edge.qualifiedName));\n }\n\n repeatHead () {\n const\n history = this.history,\n head = history[history.length - 1];\n // @todo- Akash, write test case if history.length === 0 to pass code coverage\n if (history.length === 0) {\n return this;\n }\n history.push(head);\n return this;\n }\n\n flush () {\n const hist = this.history,\n head = hist[hist.length - 1];\n hist.length = 0;\n hist.push(head);\n return this;\n }\n\n isRoot () {\n return this.name === null;\n }\n}\n","import {\n pullableRecent,\n pullableEnd\n} from './utils';\n\nexport default class ElectricNode {\n constructor () {\n this.edges = [];\n this.listeners = {\n nextFrame: [],\n currentFrame: []\n };\n }\n\n addEdges (...nodes) {\n this.edges.push(...nodes);\n return this;\n }\n\n regListenerForCurrFrame (fn) {\n const lstnrs = this.listeners.currentFrame;\n let index = lstnrs.push(pullableRecent(this.edges, fn)) - 1;\n\n return () => {\n this.listeners.currentFrame = lstnrs.filter((fn, i) => i !== index);\n };\n }\n\n regListenerForNextFrame (fn) {\n const lstnrs = this.listeners.nextFrame;\n let index = lstnrs.push(pullableEnd(this.edges, fn)) - 1;\n\n return () => {\n this.listeners.nextFrame = lstnrs.filter((fn, i) => i !== index);\n };\n }\n\n hasNextFrameListener () {\n return !!this.listeners.nextFrame.length;\n }\n}\n","import {\n isSimpleObject,\n resolver,\n // upstreamNodes,\n flat,\n resolveDependencyOrder,\n getUpstreamNodes,\n ForeignSet,\n fetch,\n CustomResolver,\n scheduler\n} from './utils';\nimport Node from './graph-node';\nimport ElectricNode from './electric-node';\n\nexport default class Graph {\n constructor () {\n this.qualifiedNodeMap = {};\n this.retriever = fetch(this.qualifiedNodeMap);\n this.root = new Node(null, null, { retriever: this.retriever });\n this.root.resolver = resolver.accumulate;\n\n this._wholeSet = null;\n this._propagate = true;\n this.propagationOverride = {\n currentFrameListeners: false,\n nextFrameListeners: false\n };\n\n this._schedule = scheduler((payload) => {\n let qname;\n for (qname in payload.flushTarget) {\n if (!({}).hasOwnProperty.call(this.qualifiedNodeMap, qname)) {\n return;\n }\n this.qualifiedNodeMap[qname].flush();\n }\n });\n }\n\n createNodesFrom (obj, mount) {\n let val,\n resolveReqList;\n const qualifiedNodeMap = this.qualifiedNodeMap,\n root = this.root,\n retriever = this.retriever;\n\n (function rec (objn, qualifiedName, history) {\n let key,\n qname,\n perv,\n node;\n\n for (key in objn) {\n if (!({}).hasOwnProperty.call(objn, key)) {\n continue;\n }\n qname = `${qualifiedName}${key}`;\n node = new Node(key, qname, { retriever });\n qualifiedNodeMap[qname] = node;\n\n if ((perv = history.perv) !== undefined) {\n perv.addDependencies(node);\n } else {\n // top most level entries\n root.addDependencies(node);\n }\n\n if (isSimpleObject(val = objn[key])) {\n rec(val, `${qualifiedName}${key}.`, { perv: node });\n node.resolver = resolver.accumulate;\n } else if (val instanceof CustomResolver) {\n node.resolver = val.get();\n node.addDependencies(...val.getDependencies().map(qname => qualifiedNodeMap[qname]));\n } else {\n node.resolver = resolver.identity;\n node.seed = val;\n // node.resolve();\n }\n }\n }(obj, mount === null ? '' : `${mount}.`, {\n perv: qualifiedNodeMap[mount]\n }));\n\n this._wholeSet = new ForeignSet(Object.keys(this.qualifiedNodeMap));\n\n // Recalculate the model without firing the listeners\n // @todo selective branch resolve. Currently resolve gets called even for a branch which was updated\n resolveReqList = this.constructor.getResolvedList(root).concat(root).filter(node => node.requireResolve);\n resolveReqList.forEach(node => node.resolve());\n getUpstreamNodes(resolveReqList).forEach(node => node.resolve());\n return this;\n }\n\n getNodeValue (prop) {\n if (prop in this.qualifiedNodeMap) {\n return this.qualifiedNodeMap[prop].seed;\n }\n return undefined;\n }\n\n createElectricNodeOf (props, fnSpec) {\n const nodes = props.map(prop => this.qualifiedNodeMap[prop]),\n eNode = new ElectricNode().addEdges(...nodes);\n\n nodes.forEach(node => node.addElectricNode(eNode));\n return eNode[`regListenerFor${fnSpec.type}`](fnSpec.fn);\n }\n\n update (...params) {\n let changedSet,\n upstreamNodes;\n const\n electricEdges = [],\n nodes = params.map((entry) => {\n entry[0].seed = entry[1];\n return entry[0];\n });\n nodes.forEach(node => node.resolve());\n electricEdges.push(...flat(...nodes.map(node => node.electricEdges)));\n changedSet = new ForeignSet(nodes.map(node => node.qualifiedName));\n\n if (!this._propagate) {\n this.__execUniqueElectricEdges(electricEdges);\n this._propagate = true;\n return this;\n }\n\n upstreamNodes = getUpstreamNodes(nodes);\n upstreamNodes.forEach(upstreamNode => upstreamNode.resolve());\n changedSet.append(upstreamNodes.map(node => node.qualifiedName));\n electricEdges.push(...flat(...upstreamNodes.map(node => node.electricEdges)));\n\n this.__execUniqueElectricEdges(Array.from(new Set(electricEdges)), changedSet);\n return this;\n }\n\n __execUniqueElectricEdges (electricEdges, changedSet) {\n const\n cfLstnrs = [], // current frame listeners\n nfLstnrs = []; // next frame listeners\n if (changedSet) {\n const\n differenceSet = ForeignSet.difference(this._wholeSet, changedSet),\n entries = differenceSet.toArray();\n\n entries.forEach(entry => this.qualifiedNodeMap[entry].repeatHead());\n }\n\n electricEdges.forEach((e) => {\n cfLstnrs.push(...e.listeners.currentFrame);\n });\n electricEdges.forEach((e) => {\n nfLstnrs.push(...e.listeners.nextFrame);\n });\n\n !this.propagationOverride.currentFrameListeners && cfLstnrs.forEach(fn => fn());\n !this.propagationOverride.nextFrameListeners && this._schedule(nfLstnrs, { flushTarget: changedSet });\n this.resetPropagationOverride();\n return this;\n }\n\n resetNodeValue (...qnames) {\n const nodes = qnames.map(qname => this.qualifiedNodeMap[qname]),\n args = nodes.map(node => [node, node.seed]);\n this.update(...args);\n return this;\n }\n\n static getResolvedList (node) {\n const resolved = [];\n resolveDependencyOrder(node, resolved, {});\n return resolved;\n }\n\n stopPropagation () {\n this._propagate = false;\n return this;\n }\n\n resetPropagationOverride () {\n this.propagationOverride.currentFrameListeners = false;\n this.propagationOverride.nextFrameListeners = false;\n return this;\n }\n\n setPropagationOverride (key) {\n this.propagationOverride[`${key}Listeners`] = true;\n return this;\n }\n\n getNodeFromQualifiedName (qname) {\n return this.qualifiedNodeMap[qname];\n }\n}\n","import Graph from './graph';\nimport { CustomResolver, fetchAggregator } from './utils';\n\n/**\n * The container class for Hyperdis. Hyperdis is an enabler for observable object with few interesting features like,\n * calculated property, next frame and same frame listeners, multiple listeners etc with a dependency resolving system.\n * It internally uses a graph to hold the hierarchial relationship of a object. Model is merely a container which\n * ties all the components together.\n *\n * @todo Circular dependency detection is not present\n *\n * @example check src/index.spec.js\n * @class\n */\nclass Model {\n constructor () {\n this._graph = new Graph();\n this._lockFlag = false;\n this._reqQ = [];\n }\n\n /**\n * Static method to create and init the model with an observable seed\n *\n * @param {Object} obj The target object which is required to be made observable\n * @return {Model} instance of the observable object model\n */\n static create (obj) {\n return new Model()._addPropInModel(null, obj);\n }\n\n /**\n * Appends more observable property on the already observable instance. This mutates the original model.\n *\n * This function works in two mode. One being\n * @param {String} mountPoint the property on which the new set of properties will be mounted. If its a nested\n * property then the mountPoint has to be written such a way so it feels like you are\n * accessing the object. If the mount point is not found then he obeservables are added in\n * the root.\n * @param {Object} The target object which is required to be made observable\n *\n * Another being\n * @param {Object} The target object which is required to be made observable\n *\n * @return {Model} instance of the observable object model\n */\n append (...params) {\n let mountPoint,\n obj;\n\n if (params.length === 1) {\n mountPoint = null;\n obj = params[0];\n } else {\n mountPoint = params[0];\n obj = params[1];\n }\n\n this._addPropInModel(mountPoint, obj);\n return this;\n }\n\n /**\n * Creates a calculated variable from existing variable. This variable can't be updated from outside.\n * @param {string} mountpoint property path on which the new variable will be placed\n * @param {string} name name of the variable. If the variable could have hierarchy like `limits.start`\n * @param {Function} fn funtion where the dependent variables are injected based on the dependency requirement\n */\n calculatedProp (...params) {\n let calculationConfig,\n customResolver,\n varName,\n mount,\n fetchFn;\n\n if (params.length > 2) {\n mount = params[0];\n varName = params[1];\n fetchFn = params[2];\n } else {\n mount = null;\n varName = params[0];\n fetchFn = params[1];\n }\n\n calculationConfig = fetchFn(fetchAggregator);\n customResolver = new CustomResolver(calculationConfig.fn);\n customResolver.addDependencies(...calculationConfig.dependencies);\n\n this._addPropInModel(mount, { [varName]: customResolver });\n return this;\n }\n\n // eslint-disable-next-line require-jsdoc\n _addPropInModel (mountPoint, obj) {\n this._graph.createNodesFrom(obj, mountPoint);\n return this;\n }\n\n /**\n * Register a listener in the current frame when a property or group of properties is changed.\n *\n * @example\n * This function takes a single or group of property and handler which is called when any of the properties are\n * changed.\n * When a single property is changed the handler is called with two parameter, what was the old value of the state\n * property and what is the new value.\n * myState.on('range.start', (oldValue, newValue) => {\n * console.log('Value before prop change', oldValue);\n * console.log('Value after prop change', newValue);\n * });\n *\n * myState.prop('range.start', 9);\n * // Output\n * Value before prop change 1\n * Value after prop change 9\n *\n * If a handler is registered on change of a property which has another state property as value, then the handler\n * gets called whenever any state property connected to it gets changed\n *\n * myState.on('range', (oldValue, newValue) => {\n * console.log('Value before prop change', oldValue);\n * console.log('Value after prop change', newValue);\n * });\n *\n * myState.prop('range.start', 10);\n * myState.prop('range.type.absolute', false);\n *\n * // Output\n * Value before prop change\n * range {\n * start: 9,\n * end: 5,\n * type: {\n * absolute: true\n * }\n * }\n * Value after prop change\n * range: {\n * start: 10,\n * end: 5,\n * type: {\n * absolute: false\n * }\n * }\n * If a handler is registered with more than one property change then, the handler is called when any of the\n * properties gets changed. In this cast the handler is called with more than one parameter: each for one state\n * property which is registered for listening. Each parameter is of type array containing [oldValue, newValue]\n *\n * myState.on('range.start', 'range.end', (start, end) => {\n * console.log('Start', start);\n * console.log('End', end);\n * });\n *\n * myState.prop('range.start', 12);\n *\n * // Output\n * Start [10, 12]\n * End [5, 5]\n *\n * myState.prop('range.end', 7);\n *\n * // Output\n * Start [12, 12]\n * End [5, 7]\n *\n * The on returns a function which is when called the listener registered gets unregistered\n *\n * let unsub = myState.on(['range.start', 'range.end'], (start, end) => {\n * console.log('Start', start);\n * console.log('End', end);\n * });\n *\n * // Unsubscribe\n * unsub()\n *\n * On takes an optional boolean value as the last parameter, which if passed as a true value the handler gets called\n * during registration itself.\n *\n * @param {Array.} props List of properties which is of interest\n * @param {Function} fn Listener to be executed when any of them is changed. The listener is called with the old\n * value and new value of the properties\n * @param {*} instantCall When registered if the function is to be triggered with the value of the property\n *\n * @return {Function} function to unsubscribe from the listeners registry\n */\n on (props, fn, instantCall) {\n const\n propsArr = props instanceof Array ? props : [props],\n // All there listeners will be executed in the current stack frame\n unsub = this._graph.createElectricNodeOf(propsArr, {\n type: 'CurrFrame',\n fn\n });\n\n if (instantCall) {\n // Bar current next frame listeners from getting fired\n this._graph.stopPropagation().setPropagationOverride('nextFrame').resetNodeValue(...props);\n }\n return unsub;\n }\n\n /**\n * Register a listener for the next frame when a property or group of properties is changed.\n *\n * @example\n * See the examples for the on listener\n *\n * @param {Array.} props List of properties which is of interest\n * @param {Function} fn Listener to be executed when any of them is changed. The listener is called with the old\n * value and new value of the properties. Here the oldvalue is last value of the last frame\n * @param {*} instantCall When registered if the function is to be triggered with the value of the property\n *\n * @return {Function} function to unsubscribe from the listeners registry\n */\n next (props, fn, instantCall) {\n const\n propsArr = props instanceof Array ? props : [props],\n // All there listeners will be executed at the tick of next animation frame\n unsub = this._graph.createElectricNodeOf(propsArr, {\n type: 'NextFrame',\n fn\n });\n\n // @todo check support for this from the graph side\n if (instantCall) {\n // Bar current frame listeners from getting fired\n this._graph.stopPropagation().setPropagationOverride('currentFrame').resetNodeValue(...props);\n }\n\n return unsub;\n }\n\n /**\n * Lock queues the request of property change and releases the change when unlock is called. This is helpful when\n * multiple property is getting called and the model listeners are to be fired once at the end of update.\n *\n * @return {Model} instance of the model\n */\n lock () {\n this._lockFlag = true;\n this._reqQ.length = 0;\n return this;\n }\n\n /**\n * Unlock unleashes the change done after the lock was called.\n\n * @return {Model} instance of the model\n */\n unlock () {\n this._lockFlag = false;\n this.setProp(...this._reqQ);\n this._reqQ.length = 0;\n return this;\n }\n\n /**\n * This acts as getter and setter. If the function is called by passing only one argument, it retrieve the value\n * associated with the property. If the same function is called using two parameters, first one being the property\n * and second one being the value, then the value is set for the property and the handlers are called (if any)\n * which got registered using the on function\n *\n * Getter\n * @param {string} prop property path whose value to be retrieved\n * @return {Object} value of the property at the time of call\n *\n * Setter\n * @param {string} property property path whose value to be ser\n * @return {Model} instance of the model\n */\n prop (...params) {\n let prop,\n val,\n len;\n\n switch (len = params.length) {\n case 1:\n prop = params[0];\n break;\n\n case 2:\n prop = params[0];\n val = params[1];\n break;\n\n default:\n return this;\n }\n\n if (len === 2) {\n this._lockFlag ? this._reqQ.push([prop, val]) : this.setProp([prop, val]);\n return this;\n }\n\n return this._graph.getNodeValue(prop);\n }\n\n // eslint-disable-next-line require-jsdoc\n setProp (...props) {\n // Filter out the calculated variables, so that it cant be changed from outside\n // @todo if a node is not leafValue, and change is called, ignore it too\n // props = props.filter(prop => !(VirtualObj.walkTill(prop[0].split('.'), this._vObj).leafValue()\n // instanceof CalculatedVar));\n\n if (props.length === 0) {\n return this;\n }\n\n this._graph.update(...props.map(prop => [this._graph.getNodeFromQualifiedName(prop[0]), prop[1]]));\n return this;\n }\n\n /**\n * Retrieves the graph representation of the object\n * @return {Graph} instance of the graph associated to the model\n */\n graph () {\n return this._graph;\n }\n\n /**\n * Get serialized data from the model\n *\n * @return {Object} Serialized data\n */\n serialize () {\n return this._graph.root.seed;\n }\n}\n\nexport default Model;\n","import Model from './model';\n\nexport default Model;\n","module.exports = function(module) {\n\tif (!module.webpackPolyfill) {\n\t\tmodule.deprecate = function() {};\n\t\tmodule.paths = [];\n\t\t// module.parent = undefined by default\n\t\tif (!module.children) module.children = [];\n\t\tObject.defineProperty(module, \"loaded\", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.l;\n\t\t\t}\n\t\t});\n\t\tObject.defineProperty(module, \"id\", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.i;\n\t\t\t}\n\t\t});\n\t\tmodule.webpackPolyfill = 1;\n\t}\n\treturn module;\n};\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _lib = require('./lib');\n\nvar _lib2 = _interopRequireDefault(_lib);\n\nvar _containerManager = require('./container-manager');\n\nvar _containerManager2 = _interopRequireDefault(_containerManager);\n\nvar slLib = _lib2['default'].init(typeof window !== \"undefined\" ? window : undefined),\n doc = slLib.win.document,\n M = slLib.win.Math,\n max = M.max,\n round = M.round,\n BLANK = '',\n htmlSplCharSpace = { ' ': ' ' },\n documentSupport = slLib.getDocumentSupport(),\n SVG_BBOX_CORRECTION = documentSupport.isWebKit ? 0 : 4.5;\n\n/*\n * Create new instance of SmartLabelManager.\n *\n * SmartLabelManager controls the lifetime of the execution space where the text's metrics will be calculated.\n * This takes a string for a given style and returns the height, width.\n * If a bound box is defined it wraps the text and returns the wrapped height and width.\n * It allows to append ellipsis at the end if the text is truncated.\n *\n * @param {String | Number} id - Id of the instance. If the same id is passed, it disposes the old instance and\n * save the new one;\n * @param {String | HTMLElement} container - The id or the instance of the container where the intermediate dom\n * elements are to be attached. If not passed, it appends in div\n *\n * @param {Boolean} useEllipses - This decides if a ellipses to be appended if the text is truncated.\n * @param {Object} options - Control options\n * {\n * maxCacheLimit: No of letter to be cached. Default: 500.\n * }\n * @constructor\n */\nfunction SmartLabelManager(id, container, useEllipses, options) {\n var wrapper,\n prop,\n max,\n prevInstance,\n isBrowserLess = false,\n store = SmartLabelManager.store;\n\n if (typeof id === 'undefined' || typeof id === 'object') {\n return;\n }\n\n if (prevInstance = store[id]) {\n prevInstance.dispose();\n }\n\n store[id] = this;\n options = options || {};\n options.maxCacheLimit = isFinite(max = options.maxCacheLimit) ? max : slLib.maxDefaultCacheLimit;\n\n if (typeof container === 'string') {\n container = doc.getElementById(container);\n }\n\n wrapper = slLib.createContainer(container);\n wrapper.innerHTML = slLib.testStrAvg;\n\n if (documentSupport.isHeadLess || !documentSupport.isIE && !wrapper.offsetHeight && !wrapper.offsetWidth) {\n isBrowserLess = true;\n }\n\n wrapper.innerHTML = '';\n for (prop in slLib.parentContainerStyle) {\n wrapper.style[prop] = slLib.parentContainerStyle[prop];\n }\n\n this.id = id;\n this.parentContainer = wrapper;\n\n this._containerManager = new _containerManager2['default'](wrapper, isBrowserLess, 10);\n this._showNoEllipses = !useEllipses;\n this._init = true;\n this.style = {};\n this.options = options;\n\n this.setStyle();\n}\n\n/*\n * getSmartText returns the text separated by
whenever a break is necessary. This is to recgonize one\n * generalized format independent of the implementation (canvas based solution, svg based solution). This method\n * converts the output of getSmartText().text to array of lines if the text is wrapped. It sets a named property\n * `lines` on the object passed as parameter.\n *\n * @param {Object} smartlabel - the object returned by getSmartText based on which line arr which to be formed.\n *\n * @return {Object} - The same object which was passed in the arguments. Also a named property `lines` is set.\n */\nSmartLabelManager.textToLines = function (smartlabel) {\n smartlabel = smartlabel || {};\n\n if (!smartlabel.text) {\n smartlabel.text = '';\n } else if (typeof smartlabel.text !== 'string') {\n smartlabel.text = smartlabel.text.toString();\n }\n\n smartlabel.lines = smartlabel.text.split(/\\n|/ig);\n return smartlabel;\n};\n\n// Saves all the instance created so far\nSmartLabelManager.store = {};\n\n// Calculates space taken by a character with an approximation value which is calculated by repeating the\n// character by string length times.\nSmartLabelManager.prototype._calCharDimWithCache = function (text, calculateDifference, length) {\n if (!this._init) {\n return false;\n }\n\n var size,\n csArr,\n tw,\n twi,\n cachedStyle,\n asymmetricDifference,\n maxAdvancedCacheLimit = this.options.maxCacheLimit,\n container = this._container,\n style = this.style || {},\n cache = this._advancedCache || (this._advancedCache = {}),\n advancedCacheKey = this._advancedCacheKey || (this._advancedCacheKey = []),\n cacheName = text + (style.fontSize || BLANK) + (style.fontFamily || BLANK) + (style.fontWeight || BLANK) + (style.fontStyle || BLANK),\n cacheInitName = text + 'init' + (style.fontSize || BLANK) + (style.fontFamily || BLANK) + (style.fontWeight || BLANK) + (style.fontStyle || BLANK);\n\n htmlSplCharSpace[text] && (text = htmlSplCharSpace[text]);\n\n if (!calculateDifference) {\n asymmetricDifference = 0;\n } else {\n if ((asymmetricDifference = cache[cacheInitName]) === undefined) {\n container.innerHTML = text.repeat ? text.repeat(length) : Array(length + 1).join(text); // jshint ignore:line\n tw = container.offsetWidth;\n\n container.innerHTML = text;\n twi = container.offsetWidth;\n\n asymmetricDifference = cache[cacheInitName] = (tw - length * twi) / (length + 1);\n advancedCacheKey.push(cacheInitName);\n if (advancedCacheKey.length > maxAdvancedCacheLimit) {\n delete cache[advancedCacheKey.shift()];\n }\n }\n }\n\n if (cachedStyle = cache[cacheName]) {\n csArr = cachedStyle.split(',');\n return {\n width: parseFloat(csArr[0], 10),\n height: parseFloat(csArr[1], 10)\n };\n }\n\n container.innerHTML = text;\n\n size = {\n height: container.offsetHeight,\n width: container.offsetWidth + asymmetricDifference\n };\n\n cache[cacheName] = size.width + ',' + size.height;\n advancedCacheKey.push(cacheName);\n if (advancedCacheKey.length > maxAdvancedCacheLimit) {\n delete cache[advancedCacheKey.shift()];\n }\n\n return size;\n};\n\n// Provide function to calculate the height and width based on the environment and available support from dom.\nSmartLabelManager.prototype._getWidthFn = function () {\n var contObj = this._containerObj,\n container = this._container,\n svgText = contObj.svgText;\n\n if (svgText) {\n return function (str) {\n var bbox, width;\n\n svgText.textContent = str;\n bbox = svgText.getBBox();\n width = bbox.width - SVG_BBOX_CORRECTION;\n if (width < 1) {\n width = bbox.width;\n }\n\n return width;\n };\n } else {\n return function (str) {\n container.innerHTML = str;\n return container.offsetWidth;\n };\n }\n};\n\n/*\n * Sets the style based on which the text's metrics to be calculated.\n *\n * @param {Object} style - The style object which affects the text size\n * {\n * fontSize / 'font-size' : MUST BE FOLLOWED BY PX (10px, 11px)\n * fontFamily / 'font-family'\n * fontWeight / 'font-weight'\n * fontStyle / 'font-style'\n * }\n *\n * @return {SmartLabelManager} - Current instance of SmartLabelManager\n */\nSmartLabelManager.prototype.setStyle = function (style) {\n if (!this._init) {\n return this;\n }\n\n var sCont;\n\n if (style === this.style && !this._styleNotSet) {\n return;\n }\n\n if (!style) {\n style = this.style;\n }\n\n slLib.setLineHeight(style);\n this.style = style;\n\n this._containerObj = sCont = this._containerManager.get(style);\n\n if (this._containerObj) {\n this._container = sCont.node;\n this._context = sCont.context;\n this._cache = sCont.charCache;\n this._lineHeight = sCont.lineHeight;\n this._styleNotSet = false;\n } else {\n this._styleNotSet = true;\n }\n\n return this;\n};\n\n/*\n * Decides whether ellipses to be shown if the node is truncated\n *\n * @param {Boolean} useEllipses - decides if a ellipses to be appended if the text is truncated. Default: false\n *\n * @return {SmartLabelManager} - Current instance of SmartLabelManager\n */\nSmartLabelManager.prototype.useEllipsesOnOverflow = function (useEllipses) {\n if (!this._init) {\n return this;\n }\n this._showNoEllipses = !useEllipses;\n return this;\n};\n\n/*\n * Get wrapped or truncated text if a bound box is defined around it. The result text would be separated by
\n * if wrapped\n *\n * @param {String} text - the subject text\n * @param {Number} maxWidth - width in px of the the bound box\n * @param {Number} maxHeight - height in px of the the bound box\n * @param {Boolean} noWrap - whether the text to be wrapped. Default false.\n *\n * @return {Object} - The metrics of the text bounded by the box\n * {\n * height : height of the wrapped text\n * width : width of the wrapped text\n * isTruncated : whether the text is truncated\n * maxHeight : Maximum height given\n * maxWidth : Maximum width given\n * oriText : Original text sent\n * oriTextHeight : Original text height\n * oriTextWidth : Original text width\n * text : SMART TEXT\n * }\n */\nSmartLabelManager.prototype.getSmartText = function (text, maxWidth, maxHeight, noWrap) {\n if (!this._init) {\n return false;\n }\n\n if (text === undefined || text === null) {\n text = '';\n } else if (typeof text !== 'string') {\n text = text.toString();\n }\n\n var len,\n trimStr,\n tempArr,\n tmpText,\n maxWidthWithEll,\n toolText,\n oriWidth,\n oriHeight,\n newCharIndex,\n nearestChar,\n tempChar,\n getWidth,\n initialLeft,\n initialTop,\n getOriSizeImproveObj,\n spanArr,\n x,\n y,\n minWidth,\n elem,\n chr,\n elemRightMostPoint,\n elemLowestPoint,\n lastBR,\n removeFromIndex,\n removeFromIndexForEllipses,\n hasHTMLTag = false,\n maxStrWidth = 0,\n lastDash = -1,\n lastSpace = -1,\n lastIndexBroken = -1,\n strWidth = 0,\n strHeight = 0,\n oriTextArr = [],\n i = 0,\n ellipsesStr = this._showNoEllipses ? '' : '...',\n lineHeight = this._lineHeight,\n context = this._context,\n container = this._container,\n sCont = this._containerObj,\n ellipsesWidth = sCont.ellipsesWidth,\n dotWidth = sCont.dotWidth,\n characterArr = [],\n dashIndex = -1,\n spaceIndex = -1,\n lastLineBreak = -1,\n fastTrim = function fastTrim(str) {\n str = str.replace(/^\\s\\s*/, '');\n var ws = /\\s/,\n i = str.length;\n while (ws.test(str.charAt(i -= 1))) {/* jshint noempty:false */}\n return str.slice(0, i + 1);\n },\n smartLabel = {\n text: text,\n maxWidth: maxWidth,\n maxHeight: maxHeight,\n width: null,\n height: null,\n oriTextWidth: null,\n oriTextHeight: null,\n oriText: text,\n isTruncated: false\n };\n\n getWidth = this._getWidthFn();\n\n // In some browsers, offsetheight of a single-line text is getting little (1 px) heigher value of the\n // lineheight. As a result, smartLabel is unable to return single-line text.\n // To fix this, increase the maxHeight a little amount. Hence maxHeight = lineHeight * 1.2\n if (maxHeight === lineHeight) {\n maxHeight *= 1.2;\n }\n\n if (container) {\n if (!documentSupport.isBrowserLess) {\n hasHTMLTag = slLib.xmlTagRegEx.test(text);\n if (!hasHTMLTag) {\n // Due to support of <,> for xml we convert <, > to <,> respectively so to get the correct\n // width it is required to convert the same before calculation for the new improve version of the\n // get text width.\n tmpText = text.replace(slLib.ltgtRegex, function (match) {\n return match === '<' ? '<' : '>';\n });\n getOriSizeImproveObj = this.getOriSize(tmpText, true);\n\n smartLabel.oriTextWidth = oriWidth = getOriSizeImproveObj.width;\n smartLabel.oriTextHeight = oriHeight = getOriSizeImproveObj.height;\n } else {\n container.innerHTML = text;\n smartLabel.oriTextWidth = oriWidth = container.offsetWidth;\n smartLabel.oriTextHeight = oriHeight = container.offsetHeight;\n }\n\n if (oriHeight <= maxHeight && oriWidth <= maxWidth) {\n smartLabel.width = smartLabel.oriTextWidth = oriWidth;\n smartLabel.height = smartLabel.oriTextHeight = oriHeight;\n return smartLabel;\n }\n\n if (lineHeight > maxHeight) {\n smartLabel.text = '';\n smartLabel.width = smartLabel.oriTextWidth = 0;\n smartLabel.height = smartLabel.oriTextHeight = 0;\n return smartLabel;\n }\n }\n\n // Calculate width with ellipses\n text = fastTrim(text).replace(/(\\s+)/g, ' ');\n maxWidthWithEll = this._showNoEllipses ? maxWidth : maxWidth - ellipsesWidth;\n\n if (!hasHTMLTag) {\n oriTextArr = text.split('');\n len = oriTextArr.length;\n trimStr = '', tempArr = [];\n tempChar = oriTextArr[0];\n\n if (this._cache[tempChar]) {\n minWidth = this._cache[tempChar].width;\n } else {\n minWidth = getWidth(tempChar);\n this._cache[tempChar] = { width: minWidth };\n }\n\n if (maxWidthWithEll > minWidth) {\n tempArr = text.substr(0, slLib.getNearestBreakIndex(text, maxWidthWithEll, this)).split('');\n i = tempArr.length;\n } else if (minWidth > maxWidth) {\n smartLabel.text = '';\n smartLabel.width = smartLabel.oriTextWidth = smartLabel.height = smartLabel.oriTextHeight = 0;\n return smartLabel;\n } else if (ellipsesStr) {\n maxWidthWithEll = maxWidth - 2 * dotWidth;\n if (maxWidthWithEll > minWidth) {\n ellipsesStr = '..';\n } else {\n maxWidthWithEll = maxWidth - dotWidth;\n if (maxWidthWithEll > minWidth) {\n ellipsesStr = '.';\n } else {\n maxWidthWithEll = 0;\n ellipsesStr = '';\n }\n }\n }\n\n strWidth = getWidth(tempArr.join(''));\n strHeight = this._lineHeight;\n\n if (noWrap) {\n for (; i < len; i += 1) {\n tempChar = tempArr[i] = oriTextArr[i];\n if (this._cache[tempChar]) {\n minWidth = this._cache[tempChar].width;\n } else {\n if (!getOriSizeImproveObj || !(minWidth = getOriSizeImproveObj.detailObj[tempChar])) {\n minWidth = getWidth(tempChar);\n }\n this._cache[tempChar] = {\n width: minWidth\n };\n }\n strWidth += minWidth;\n if (strWidth > maxWidthWithEll) {\n if (!trimStr) {\n trimStr = tempArr.slice(0, -1).join('');\n }\n if (strWidth > maxWidth) {\n smartLabel.text = fastTrim(trimStr) + ellipsesStr;\n smartLabel.tooltext = smartLabel.oriText;\n smartLabel.width = getWidth(smartLabel.text);\n smartLabel.height = this._lineHeight;\n return smartLabel;\n }\n }\n }\n\n smartLabel.text = tempArr.join('');\n smartLabel.width = strWidth;\n smartLabel.height = this._lineHeight;\n return smartLabel;\n } else {\n for (; i < len; i += 1) {\n tempChar = tempArr[i] = oriTextArr[i];\n if (tempChar === ' ' && !context) {\n tempChar = ' ';\n }\n\n if (this._cache[tempChar]) {\n minWidth = this._cache[tempChar].width;\n } else {\n if (!getOriSizeImproveObj || !(minWidth = getOriSizeImproveObj.detailObj[tempChar])) {\n minWidth = getWidth(tempChar);\n }\n this._cache[tempChar] = {\n width: minWidth\n };\n }\n strWidth += minWidth;\n\n if (strWidth > maxWidthWithEll) {\n if (!trimStr) {\n trimStr = tempArr.slice(0, -1).join('');\n }\n if (strWidth > maxWidth) {\n /** @todo use regular expressions for better performance. */\n lastSpace = text.substr(0, tempArr.length).lastIndexOf(' ');\n lastDash = text.substr(0, tempArr.length).lastIndexOf('-');\n if (lastSpace > lastIndexBroken) {\n strWidth = getWidth(tempArr.slice(lastIndexBroken + 1, lastSpace).join(''));\n tempArr.splice(lastSpace, 1, '
');\n lastIndexBroken = lastSpace;\n newCharIndex = lastSpace + 1;\n } else if (lastDash > lastIndexBroken) {\n if (lastDash === tempArr.length - 1) {\n strWidth = getWidth(tempArr.slice(lastIndexBroken + 1, lastSpace).join(''));\n tempArr.splice(lastDash, 1, '
-');\n } else {\n strWidth = getWidth(tempArr.slice(lastIndexBroken + 1, lastSpace).join(''));\n tempArr.splice(lastDash, 1, '-
');\n }\n lastIndexBroken = lastDash;\n newCharIndex = lastDash + 1;\n } else {\n tempArr.splice(tempArr.length - 1, 1, '
' + oriTextArr[i]);\n lastLineBreak = tempArr.length - 2;\n strWidth = getWidth(tempArr.slice(lastIndexBroken + 1, lastLineBreak + 1).join(''));\n lastIndexBroken = lastLineBreak;\n newCharIndex = i;\n }\n strHeight += this._lineHeight;\n if (strHeight > maxHeight) {\n smartLabel.text = fastTrim(trimStr) + ellipsesStr;\n smartLabel.tooltext = smartLabel.oriText;\n // The max width among all the lines will be the width of the string.\n smartLabel.width = maxWidth;\n smartLabel.height = strHeight - this._lineHeight;\n return smartLabel;\n } else {\n maxStrWidth = max(maxStrWidth, strWidth);\n trimStr = null;\n nearestChar = slLib.getNearestBreakIndex(text.substr(newCharIndex), maxWidthWithEll, this);\n strWidth = getWidth(text.substr(newCharIndex, nearestChar || 1));\n if (tempArr.length < newCharIndex + nearestChar) {\n tempArr = tempArr.concat(text.substr(tempArr.length, newCharIndex + nearestChar - tempArr.length).split(''));\n i = tempArr.length - 1;\n }\n }\n }\n }\n }\n\n maxStrWidth = max(maxStrWidth, strWidth);\n\n smartLabel.text = tempArr.join('');\n smartLabel.width = maxStrWidth;\n smartLabel.height = strHeight;\n return smartLabel;\n }\n } else {\n toolText = text.replace(slLib.spanAdditionRegx, '$2');\n text = text.replace(slLib.spanAdditionRegx, slLib.spanAdditionReplacer);\n text = text.replace(/()/g, '$1');\n\n container.innerHTML = text;\n\n spanArr = container[documentSupport.childRetriverFn](documentSupport.childRetriverString);\n\n for (x = 0, y = spanArr.length; x < y; x += 1) {\n elem = spanArr[x];\n //chech whether this span is temporary inserted span from it's class\n if (documentSupport.noClassTesting || slLib.classNameReg.test(elem.className)) {\n chr = elem.innerHTML;\n if (chr !== '') {\n if (chr === ' ') {\n spaceIndex = characterArr.length;\n } else if (chr === '-') {\n dashIndex = characterArr.length;\n }\n\n characterArr.push({\n spaceIdx: spaceIndex,\n dashIdx: dashIndex,\n elem: elem\n });\n oriTextArr.push(chr);\n }\n }\n }\n\n i = 0;\n len = characterArr.length;\n minWidth = characterArr[0].elem.offsetWidth;\n\n if (minWidth > maxWidth) {\n smartLabel.text = '';\n smartLabel.width = smartLabel.oriTextWidth = smartLabel.height = smartLabel.oriTextHeight = 0;\n\n return smartLabel;\n } else if (minWidth > maxWidthWithEll && !this._showNoEllipses) {\n\n maxWidthWithEll = maxWidth - 2 * dotWidth;\n if (maxWidthWithEll > minWidth) {\n ellipsesStr = '..';\n } else {\n maxWidthWithEll = maxWidth - dotWidth;\n if (maxWidthWithEll > minWidth) {\n ellipsesStr = '.';\n } else {\n maxWidthWithEll = 0;\n ellipsesStr = '';\n }\n }\n }\n\n initialLeft = characterArr[0].elem.offsetLeft;\n initialTop = characterArr[0].elem.offsetTop;\n\n if (noWrap) {\n for (; i < len; i += 1) {\n elem = characterArr[i].elem;\n elemRightMostPoint = elem.offsetLeft - initialLeft + elem.offsetWidth;\n\n if (elemRightMostPoint > maxWidthWithEll) {\n if (!removeFromIndexForEllipses) {\n removeFromIndexForEllipses = i;\n }\n if (container.offsetWidth > maxWidth) {\n removeFromIndex = i;\n i = len;\n }\n }\n }\n } else {\n for (; i < len; i += 1) {\n elem = characterArr[i].elem;\n elemLowestPoint = elem.offsetHeight + (elem.offsetTop - initialTop);\n elemRightMostPoint = elem.offsetLeft - initialLeft + elem.offsetWidth;\n\n lastBR = null;\n\n if (elemRightMostPoint > maxWidthWithEll) {\n if (!removeFromIndexForEllipses) {\n removeFromIndexForEllipses = i;\n }\n\n if (elemRightMostPoint > maxWidth) {\n lastSpace = characterArr[i].spaceIdx;\n lastDash = characterArr[i].dashIdx;\n if (lastSpace > lastIndexBroken) {\n characterArr[lastSpace].elem.innerHTML = '
';\n lastIndexBroken = lastSpace;\n } else if (lastDash > lastIndexBroken) {\n if (lastDash === i) {\n // in case the overflowing character itself is the '-'\n characterArr[lastDash].elem.innerHTML = '
-';\n } else {\n characterArr[lastDash].elem.innerHTML = '-
';\n }\n lastIndexBroken = lastDash;\n } else {\n elem.parentNode.insertBefore(lastBR = doc.createElement('br'), elem);\n }\n\n //check whether this break made current element outside the area height\n if (elem.offsetHeight + elem.offsetTop > maxHeight) {\n //remove the lastly inserted line break\n if (lastBR) {\n lastBR.parentNode.removeChild(lastBR);\n } else if (lastIndexBroken === lastDash) {\n characterArr[lastDash].elem.innerHTML = '-';\n } else {\n characterArr[lastSpace].elem.innerHTML = ' ';\n }\n removeFromIndex = i;\n //break the looping condition\n i = len;\n } else {\n removeFromIndexForEllipses = null;\n }\n }\n } else {\n //check whether this break made current element outside the area height\n if (elemLowestPoint > maxHeight) {\n removeFromIndex = i;\n i = len;\n }\n }\n }\n }\n\n if (removeFromIndex < len) {\n //set the trancated property of the smartlabel\n smartLabel.isTruncated = true;\n\n /** @todo is this really needed? */\n removeFromIndexForEllipses = removeFromIndexForEllipses ? removeFromIndexForEllipses : removeFromIndex;\n\n for (i = len - 1; i >= removeFromIndexForEllipses; i -= 1) {\n elem = characterArr[i].elem;\n //chech whether this span is temporary inserted span from it's class\n elem.parentNode.removeChild(elem);\n }\n\n for (; i >= 0; i -= 1) {\n elem = characterArr[i].elem;\n if (slLib.classNameBrReg.test(elem.className)) {\n //chech whether this span is temporary inserted span from it's class\n elem.parentNode.removeChild(elem);\n } else {\n i = 0;\n }\n }\n }\n\n //get the smart text\n smartLabel.text = container.innerHTML.replace(slLib.spanRemovalRegx, '$1').replace(/\\&\\;/g, '&');\n if (smartLabel.isTruncated) {\n smartLabel.text += ellipsesStr;\n smartLabel.tooltext = toolText;\n }\n }\n\n smartLabel.height = container.offsetHeight;\n smartLabel.width = container.offsetWidth;\n\n return smartLabel;\n } else {\n smartLabel.error = new Error('Body Tag Missing!');\n return smartLabel;\n }\n};\n\n/*\n * Get the height and width of a text.\n *\n * @param {String} text - Text whose metrics to be measured\n * @param {Boolean} Optional detailedCalculationFlag - this flag if set it calculates per letter position\n * information and returns it. Ideally you dont need it unless you want to post process the\n * string. And its an EXPENSIVE OPERATION.\n *\n * @return {Object} - If detailedCalculationFlag is set to true the returned object would be\n * {\n * height: height of the text\n * width: width of the text\n * detailObj: detail calculation of letters in the format {lettername: width}\n * }\n * If detailedCalculationFlag is set to false the returned object wont have the detailObj prop.\n */\nSmartLabelManager.prototype.getOriSize = function (text, detailedCalculationFlag) {\n if (!this._init) {\n return false;\n }\n\n var textArr,\n letter,\n lSize,\n i,\n l,\n cumulativeSize = 0,\n height = 0,\n indiSizeStore = {};\n\n if (!detailedCalculationFlag) {\n return this._calCharDimWithCache(text);\n }\n\n // Calculate the width of every letter with an approximation\n textArr = text.split('');\n for (i = 0, l = textArr.length; i < l; i++) {\n letter = textArr[i];\n lSize = this._calCharDimWithCache(letter, true, textArr.length);\n height = max(height, lSize.height);\n cumulativeSize += lSize.width;\n indiSizeStore[letter] = lSize.width;\n }\n\n return {\n width: round(cumulativeSize),\n height: height,\n detailObj: indiSizeStore\n };\n};\n\n/*\n * Dispose the container and object allocated by the smartlabel\n */\nSmartLabelManager.prototype.dispose = function () {\n if (!this._init) {\n return this;\n }\n\n this._containerManager && this._containerManager.dispose && this._containerManager.dispose();\n\n delete this._container;\n delete this._context;\n delete this._cache;\n delete this._containerManager;\n delete this._containerObj;\n delete this.id;\n delete this.style;\n delete this.parentContainer;\n delete this._showNoEllipses;\n\n return this;\n};\n\nexports['default'] = SmartLabelManager;\nmodule.exports = exports['default'];","'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n\tvalue: true\n});\nvar lib = {\n\tinit: function init(win) {\n\t\tvar doc = win.document,\n\t\t nav = win.navigator,\n\t\t userAgent = nav.userAgent,\n\t\t DIV = 'DIV',\n\t\t ceil = Math.ceil,\n\t\t floor = Math.floor,\n\t\t containerInstanceCount = 0,\n\t\t clsNameSpace = 'fusioncharts-smartlabel-',\n\t\t containerClass = clsNameSpace + 'container',\n\t\t classNameWithTag = clsNameSpace + 'tag',\n\t\t classNameWithTagBR = clsNameSpace + 'br';\n\n\t\tlib = {\n\t\t\twin: win,\n\n\t\t\tcontainerClass: containerClass,\n\n\t\t\tclassNameWithTag: classNameWithTag,\n\n\t\t\tclassNameWithTagBR: classNameWithTagBR,\n\n\t\t\tmaxDefaultCacheLimit: 500,\n\n\t\t\tclassNameReg: new RegExp('\\b' + classNameWithTag + '\\b'),\n\n\t\t\tclassNameBrReg: new RegExp('\\b' + classNameWithTagBR + '\\b'),\n\n\t\t\tspanAdditionRegx: /(<[^<\\>]+?\\>)|(&(?:[a-z]+|#[0-9]+);|.)/ig,\n\n\t\t\tspanAdditionReplacer: '$1$2',\n\n\t\t\tspanRemovalRegx: new RegExp('\\\\]+?' + classNameWithTag + '[^\\\\>]{0,}\\\\>(.*?)\\\\<\\\\/span\\\\>', 'ig'),\n\n\t\t\txmlTagRegEx: new RegExp('<[^>][^<]*[^>]+>', 'i'),\n\n\t\t\tltgtRegex: /<|>/g,\n\n\t\t\tbrReplaceRegex: //ig,\n\n\t\t\ttestStrAvg: 'WgI',\n\n\t\t\t// This style is applied over the parent smartlabel container. The container is kept hidden from the viewport\n\t\t\tparentContainerStyle: {\n\t\t\t\tposition: 'absolute',\n\t\t\t\ttop: '-9999em',\n\t\t\t\twhiteSpace: 'nowrap',\n\t\t\t\tpadding: '0px',\n\t\t\t\twidth: '1px',\n\t\t\t\theight: '1px',\n\t\t\t\toverflow: 'hidden'\n\t\t\t},\n\n\t\t\t// All the style which might affect the text metrics\n\t\t\tsupportedStyle: {\n\t\t\t\tfont: 'font',\n\t\t\t\tfontFamily: 'font-family',\n\t\t\t\t'font-family': 'font-family',\n\t\t\t\tfontWeight: 'font-weight',\n\t\t\t\t'font-weight': 'font-weight',\n\t\t\t\tfontSize: 'font-size',\n\t\t\t\t'font-size': 'font-size',\n\t\t\t\tlineHeight: 'line-height',\n\t\t\t\t'line-height': 'line-height',\n\t\t\t\tfontStyle: 'font-style',\n\t\t\t\t'font-style': 'font-style'\n\t\t\t},\n\n\t\t\t// Get the support list for html the document where the text calcution is to be done.\n\t\t\tgetDocumentSupport: function getDocumentSupport() {\n\t\t\t\tvar childRetriverFn, childRetriverString, noClassTesting;\n\n\t\t\t\tif (doc.getElementsByClassName) {\n\t\t\t\t\tchildRetriverFn = 'getElementsByClassName';\n\t\t\t\t\tchildRetriverString = classNameWithTag;\n\t\t\t\t\tnoClassTesting = true;\n\t\t\t\t} else {\n\t\t\t\t\tchildRetriverFn = 'getElementsByTagName';\n\t\t\t\t\tchildRetriverString = 'span';\n\t\t\t\t\tnoClassTesting = false;\n\t\t\t\t}\n\n\t\t\t\treturn {\n\t\t\t\t\tisIE: /msie/i.test(userAgent) && !win.opera,\n\t\t\t\t\thasSVG: Boolean(win.SVGAngle || doc.implementation.hasFeature('http://www.w3.org/TR/SVG11/feature#BasicStructure', '1.1')),\n\t\t\t\t\tisHeadLess: new RegExp(' HtmlUnit').test(userAgent),\n\t\t\t\t\tisWebKit: new RegExp(' AppleWebKit/').test(userAgent),\n\t\t\t\t\tchildRetriverFn: childRetriverFn,\n\t\t\t\t\tchildRetriverString: childRetriverString,\n\t\t\t\t\tnoClassTesting: noClassTesting\n\t\t\t\t};\n\t\t\t},\n\n\t\t\t/*\n * Create a html div element and attach it with a parent. All the subsequent operations are performed\n * by upding this dom tree only.\n *\n * @param {HTMLElement} - The html element where the newly created div is to be attached. If not passed,\n * the new div is appended on the body.\n */\n\t\t\tcreateContainer: function createContainer(containerParent) {\n\t\t\t\tvar body, container;\n\n\t\t\t\tif (containerParent && (containerParent.offsetWidth || containerParent.offsetHeight)) {\n\t\t\t\t\tif (containerParent.appendChild) {\n\t\t\t\t\t\tcontainerParent.appendChild(container = doc.createElement(DIV));\n\t\t\t\t\t\tcontainer.className = containerClass;\n\t\t\t\t\t\tcontainer.setAttribute('aria-hidden', 'true');\n\t\t\t\t\t\tcontainer.setAttribute('role', 'presentation');\n\t\t\t\t\t\treturn container;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tbody = doc.getElementsByTagName('body')[0];\n\n\t\t\t\t\tif (body && body.appendChild) {\n\t\t\t\t\t\tcontainer = doc.createElement(DIV);\n\t\t\t\t\t\tcontainer.className = containerClass;\n\t\t\t\t\t\tcontainer.setAttribute('aria-hidden', 'true');\n\t\t\t\t\t\tcontainer.setAttribute('role', 'presentation');\n\t\t\t\t\t\tcontainerInstanceCount += 1;\n\t\t\t\t\t\tbody.appendChild(container);\n\t\t\t\t\t\treturn container;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// Finds a approximate position where the text is to be broken\n\t\t\tgetNearestBreakIndex: function getNearestBreakIndex(text, maxWidth, sl) {\n\t\t\t\tif (!text || !text.length) {\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\n\t\t\t\tvar difference,\n\t\t\t\t getWidth = sl._getWidthFn(),\n\t\t\t\t charLen = 0,\n\t\t\t\t increment = 0,\n\t\t\t\t oriWidth = getWidth(text),\n\t\t\t\t avgWidth = oriWidth / text.length;\n\n\t\t\t\tdifference = maxWidth;\n\t\t\t\tcharLen = ceil(maxWidth / avgWidth);\n\n\t\t\t\tif (oriWidth < maxWidth) {\n\t\t\t\t\treturn text.length - 1;\n\t\t\t\t}\n\n\t\t\t\tif (charLen > text.length) {\n\t\t\t\t\tdifference = maxWidth - oriWidth;\n\t\t\t\t\tcharLen = text.length;\n\t\t\t\t}\n\n\t\t\t\twhile (difference > 0) {\n\t\t\t\t\tdifference = maxWidth - getWidth(text.substr(0, charLen));\n\t\t\t\t\tincrement = floor(difference / avgWidth);\n\t\t\t\t\tif (increment) {\n\t\t\t\t\t\tcharLen += increment;\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn charLen;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\twhile (difference < 0) {\n\t\t\t\t\tdifference = maxWidth - getWidth(text.substr(0, charLen));\n\t\t\t\t\tincrement = floor(difference / avgWidth);\n\t\t\t\t\tif (increment) {\n\t\t\t\t\t\tcharLen += increment;\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn charLen;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn charLen;\n\t\t\t},\n\n\t\t\t/*\n * Determine lineheight of a text for a given style. It adds propery lineHeight to the style passed\n *\n * @param {Object} - The style based on which the text's metric needs to be calculated. The calculation happens\n * based on fontSize property, if its not present a default font size is assumed.\n *\n * @return {Object} - The style that was passed with lineHeight as a named propery set on the object.\n */\n\t\t\tsetLineHeight: function setLineHeight(styleObj) {\n\t\t\t\tvar fSize = styleObj.fontSize = styleObj.fontSize || '12px';\n\t\t\t\tstyleObj.lineHeight = styleObj.lineHeight || styleObj['line-height'] || parseInt(fSize, 10) * 1.2 + 'px';\n\t\t\t\treturn styleObj;\n\t\t\t}\n\t\t};\n\n\t\treturn lib;\n\t}\n};\n\nexports['default'] = lib;\nmodule.exports = exports['default'];","const Muze = require('./muze');\n\nmodule.exports = Muze.default ? Muze.default : Muze;\n","'use strict';\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _lib = require('./lib');\n\nvar _lib2 = _interopRequireDefault(_lib);\n\nvar slLib = _lib2['default'].init(typeof window !== \"undefined\" ? window : undefined),\n doc = slLib.win.document,\n documentSupport = slLib.getDocumentSupport(),\n SVG_BBOX_CORRECTION = documentSupport.isWebKit ? 0 : 4.5;\n\nfunction ContainerManager(parentContainer, isBrowserLess, maxContainers) {\n var svg;\n\n maxContainers = maxContainers > 5 ? maxContainers : 5;\n maxContainers = maxContainers < 20 ? maxContainers : 20;\n\n this.maxContainers = maxContainers;\n this.first = null;\n this.last = null;\n this.containers = {};\n this.length = 0;\n this.rootNode = parentContainer;\n\n if (isBrowserLess) {\n svg = doc.createElementNS('http://www.w3.org/2000/svg', 'svg');\n svg.setAttributeNS('http://www.w3.org/2000/svg', 'xlink', 'http://www.w3.org/1999/xlink');\n svg.setAttributeNS('http://www.w3.org/2000/svg', 'height', '0');\n svg.setAttributeNS('http://www.w3.org/2000/svg', 'width', '0');\n this.svgRoot = svg;\n this.rootNode.appendChild(svg);\n }\n}\n\nContainerManager.prototype.get = function (style) {\n var diff,\n key,\n containerObj,\n containers = this.containers,\n len = this.length,\n max = this.maxContainers,\n keyStr = '';\n\n for (key in slLib.supportedStyle) {\n if (style[key] !== undefined) {\n keyStr += slLib.supportedStyle[key] + ':' + style[key] + ';';\n }\n }\n\n if (!keyStr) {\n return false;\n }\n\n if (containerObj = containers[keyStr]) {\n if (this.first !== containerObj) {\n containerObj.prev && (containerObj.prev.next = containerObj.next);\n containerObj.next && (containerObj.next.prev = containerObj.prev);\n containerObj.next = this.first;\n containerObj.next.prev = containerObj;\n this.last === containerObj && (this.last = containerObj.prev);\n containerObj.prev = null;\n this.first = containerObj;\n }\n } else {\n if (len >= max) {\n diff = len - max + 1;\n // +1 is to remove an extra entry to make space for the new container to be added.\n while (diff--) {\n this.removeContainer(this.last);\n }\n }\n containerObj = this.addContainer(keyStr);\n }\n\n return containerObj;\n};\n\nContainerManager.prototype.addContainer = function (keyStr) {\n var node, container;\n\n this.containers[keyStr] = container = {\n next: null,\n prev: null,\n node: null,\n ellipsesWidth: 0,\n lineHeight: 0,\n dotWidth: 0,\n avgCharWidth: 4,\n keyStr: keyStr,\n charCache: {}\n };\n\n // Since the container objects are arranged from most recent to least recent order, we need to add the new\n // object at the beginning of the list.\n container.next = this.first;\n container.next && (container.next.prev = container);\n this.first = container;\n if (!this.last) {\n this.last = container;\n }\n this.length += 1;\n\n node = container.node = doc.createElement('div');\n this.rootNode.appendChild(node);\n\n if (documentSupport.isIE && !documentSupport.hasSVG) {\n node.style.setAttribute('cssText', keyStr);\n } else {\n node.setAttribute('style', keyStr);\n }\n\n node.setAttribute('aria-hidden', 'true');\n node.setAttribute('role', 'presentation');\n node.style.display = 'inline-block';\n\n node.innerHTML = slLib.testStrAvg; // A test string.\n container.lineHeight = node.offsetHeight;\n container.avgCharWidth = node.offsetWidth / 3;\n\n if (documentSupport.isBrowserLess) {\n node = container.svgText = doc.createElementNS('http://www.w3.org/2000/svg', 'text');\n node.setAttribute('style', keyStr);\n this.svgRoot.appendChild(node);\n\n node.textContent = slLib.testStrAvg; // A test string.\n container.lineHeight = node.getBBox().height;\n container.avgCharWidth = (node.getBBox().width - SVG_BBOX_CORRECTION) / 3;\n\n node.textContent = '...';\n container.ellipsesWidth = node.getBBox().width - SVG_BBOX_CORRECTION;\n node.textContent = '.';\n container.dotWidth = node.getBBox().width - SVG_BBOX_CORRECTION;\n } else {\n node.innerHTML = '...';\n container.ellipsesWidth = node.offsetWidth;\n node.innerHTML = '.';\n container.dotWidth = node.offsetWidth;\n node.innerHTML = '';\n }\n\n return container;\n};\n\nContainerManager.prototype.removeContainer = function (cObj) {\n var keyStr = cObj.keyStr;\n\n if (!keyStr || !this.length || !cObj) {\n return;\n }\n this.length -= 1;\n\n cObj.prev && (cObj.prev.next = cObj.next);\n cObj.next && (cObj.next.prev = cObj.prev);\n this.first === cObj && (this.first = cObj.next);\n this.last === cObj && (this.last = cObj.prev);\n\n cObj.node.parentNode.removeChild(cObj.node);\n\n delete this.containers[keyStr];\n};\n\nContainerManager.prototype.dispose = function () {\n var key,\n containers = this.containers;\n\n this.maxContainers = null;\n for (key in containers) {\n this.removeContainer(containers[key]);\n }\n\n this.rootNode.parentNode.removeChild(this.rootNode);\n\n this.rootNode = null;\n this.first = null;\n this.last = null;\n};\n\nmodule.exports = ContainerManager;","export default function(a, b) {\n return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n","import ascending from \"./ascending\";\n\nexport default function(compare) {\n if (compare.length === 1) compare = ascendingComparator(compare);\n return {\n left: function(a, x, lo, hi) {\n if (lo == null) lo = 0;\n if (hi == null) hi = a.length;\n while (lo < hi) {\n var mid = lo + hi >>> 1;\n if (compare(a[mid], x) < 0) lo = mid + 1;\n else hi = mid;\n }\n return lo;\n },\n right: function(a, x, lo, hi) {\n if (lo == null) lo = 0;\n if (hi == null) hi = a.length;\n while (lo < hi) {\n var mid = lo + hi >>> 1;\n if (compare(a[mid], x) > 0) hi = mid;\n else lo = mid + 1;\n }\n return lo;\n }\n };\n}\n\nfunction ascendingComparator(f) {\n return function(d, x) {\n return ascending(f(d), x);\n };\n}\n","import ascending from \"./ascending\";\nimport bisector from \"./bisector\";\n\nvar ascendingBisect = bisector(ascending);\nexport var bisectRight = ascendingBisect.right;\nexport var bisectLeft = ascendingBisect.left;\nexport default bisectRight;\n","import {pair} from \"./pairs\";\n\nexport default function(values0, values1, reduce) {\n var n0 = values0.length,\n n1 = values1.length,\n values = new Array(n0 * n1),\n i0,\n i1,\n i,\n value0;\n\n if (reduce == null) reduce = pair;\n\n for (i0 = i = 0; i0 < n0; ++i0) {\n for (value0 = values0[i0], i1 = 0; i1 < n1; ++i1, ++i) {\n values[i] = reduce(value0, values1[i1]);\n }\n }\n\n return values;\n}\n","export default function(x) {\n return x === null ? NaN : +x;\n}\n","var array = Array.prototype;\n\nexport var slice = array.slice;\nexport var map = array.map;\n","export default function(start, stop, step) {\n start = +start, stop = +stop, step = (n = arguments.length) < 2 ? (stop = start, start = 0, 1) : n < 3 ? 1 : +step;\n\n var i = -1,\n n = Math.max(0, Math.ceil((stop - start) / step)) | 0,\n range = new Array(n);\n\n while (++i < n) {\n range[i] = start + i * step;\n }\n\n return range;\n}\n","var e10 = Math.sqrt(50),\n e5 = Math.sqrt(10),\n e2 = Math.sqrt(2);\n\nexport default function(start, stop, count) {\n var reverse,\n i = -1,\n n,\n ticks,\n step;\n\n stop = +stop, start = +start, count = +count;\n if (start === stop && count > 0) return [start];\n if (reverse = stop < start) n = start, start = stop, stop = n;\n if ((step = tickIncrement(start, stop, count)) === 0 || !isFinite(step)) return [];\n\n if (step > 0) {\n start = Math.ceil(start / step);\n stop = Math.floor(stop / step);\n ticks = new Array(n = Math.ceil(stop - start + 1));\n while (++i < n) ticks[i] = (start + i) * step;\n } else {\n start = Math.floor(start * step);\n stop = Math.ceil(stop * step);\n ticks = new Array(n = Math.ceil(start - stop + 1));\n while (++i < n) ticks[i] = (start - i) / step;\n }\n\n if (reverse) ticks.reverse();\n\n return ticks;\n}\n\nexport function tickIncrement(start, stop, count) {\n var step = (stop - start) / Math.max(0, count),\n power = Math.floor(Math.log(step) / Math.LN10),\n error = step / Math.pow(10, power);\n return power >= 0\n ? (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1) * Math.pow(10, power)\n : -Math.pow(10, -power) / (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1);\n}\n\nexport function tickStep(start, stop, count) {\n var step0 = Math.abs(stop - start) / Math.max(0, count),\n step1 = Math.pow(10, Math.floor(Math.log(step0) / Math.LN10)),\n error = step0 / step1;\n if (error >= e10) step1 *= 10;\n else if (error >= e5) step1 *= 5;\n else if (error >= e2) step1 *= 2;\n return stop < start ? -step1 : step1;\n}\n","export default function(values) {\n return Math.ceil(Math.log(values.length) / Math.LN2) + 1;\n}\n","import number from \"./number\";\n\nexport default function(values, p, valueof) {\n if (valueof == null) valueof = number;\n if (!(n = values.length)) return;\n if ((p = +p) <= 0 || n < 2) return +valueof(values[0], 0, values);\n if (p >= 1) return +valueof(values[n - 1], n - 1, values);\n var n,\n i = (n - 1) * p,\n i0 = Math.floor(i),\n value0 = +valueof(values[i0], i0, values),\n value1 = +valueof(values[i0 + 1], i0 + 1, values);\n return value0 + (value1 - value0) * (i - i0);\n}\n","export var prefix = \"$\";\n\nfunction Map() {}\n\nMap.prototype = map.prototype = {\n constructor: Map,\n has: function(key) {\n return (prefix + key) in this;\n },\n get: function(key) {\n return this[prefix + key];\n },\n set: function(key, value) {\n this[prefix + key] = value;\n return this;\n },\n remove: function(key) {\n var property = prefix + key;\n return property in this && delete this[property];\n },\n clear: function() {\n for (var property in this) if (property[0] === prefix) delete this[property];\n },\n keys: function() {\n var keys = [];\n for (var property in this) if (property[0] === prefix) keys.push(property.slice(1));\n return keys;\n },\n values: function() {\n var values = [];\n for (var property in this) if (property[0] === prefix) values.push(this[property]);\n return values;\n },\n entries: function() {\n var entries = [];\n for (var property in this) if (property[0] === prefix) entries.push({key: property.slice(1), value: this[property]});\n return entries;\n },\n size: function() {\n var size = 0;\n for (var property in this) if (property[0] === prefix) ++size;\n return size;\n },\n empty: function() {\n for (var property in this) if (property[0] === prefix) return false;\n return true;\n },\n each: function(f) {\n for (var property in this) if (property[0] === prefix) f(this[property], property.slice(1), this);\n }\n};\n\nfunction map(object, f) {\n var map = new Map;\n\n // Copy constructor.\n if (object instanceof Map) object.each(function(value, key) { map.set(key, value); });\n\n // Index array by numeric index or specified key function.\n else if (Array.isArray(object)) {\n var i = -1,\n n = object.length,\n o;\n\n if (f == null) while (++i < n) map.set(i, object[i]);\n else while (++i < n) map.set(f(o = object[i], i, object), o);\n }\n\n // Convert object to map.\n else if (object) for (var key in object) map.set(key, object[key]);\n\n return map;\n}\n\nexport default map;\n","import map from \"./map\";\n\nexport default function() {\n var keys = [],\n sortKeys = [],\n sortValues,\n rollup,\n nest;\n\n function apply(array, depth, createResult, setResult) {\n if (depth >= keys.length) {\n if (sortValues != null) array.sort(sortValues);\n return rollup != null ? rollup(array) : array;\n }\n\n var i = -1,\n n = array.length,\n key = keys[depth++],\n keyValue,\n value,\n valuesByKey = map(),\n values,\n result = createResult();\n\n while (++i < n) {\n if (values = valuesByKey.get(keyValue = key(value = array[i]) + \"\")) {\n values.push(value);\n } else {\n valuesByKey.set(keyValue, [value]);\n }\n }\n\n valuesByKey.each(function(values, key) {\n setResult(result, key, apply(values, depth, createResult, setResult));\n });\n\n return result;\n }\n\n function entries(map, depth) {\n if (++depth > keys.length) return map;\n var array, sortKey = sortKeys[depth - 1];\n if (rollup != null && depth >= keys.length) array = map.entries();\n else array = [], map.each(function(v, k) { array.push({key: k, values: entries(v, depth)}); });\n return sortKey != null ? array.sort(function(a, b) { return sortKey(a.key, b.key); }) : array;\n }\n\n return nest = {\n object: function(array) { return apply(array, 0, createObject, setObject); },\n map: function(array) { return apply(array, 0, createMap, setMap); },\n entries: function(array) { return entries(apply(array, 0, createMap, setMap), 0); },\n key: function(d) { keys.push(d); return nest; },\n sortKeys: function(order) { sortKeys[keys.length - 1] = order; return nest; },\n sortValues: function(order) { sortValues = order; return nest; },\n rollup: function(f) { rollup = f; return nest; }\n };\n}\n\nfunction createObject() {\n return {};\n}\n\nfunction setObject(object, key, value) {\n object[key] = value;\n}\n\nfunction createMap() {\n return map();\n}\n\nfunction setMap(map, key, value) {\n map.set(key, value);\n}\n","import {default as map, prefix} from \"./map\";\n\nfunction Set() {}\n\nvar proto = map.prototype;\n\nSet.prototype = set.prototype = {\n constructor: Set,\n has: proto.has,\n add: function(value) {\n value += \"\";\n this[prefix + value] = value;\n return this;\n },\n remove: proto.remove,\n clear: proto.clear,\n values: proto.keys,\n size: proto.size,\n empty: proto.empty,\n each: proto.each\n};\n\nfunction set(object, f) {\n var set = new Set;\n\n // Copy constructor.\n if (object instanceof Set) object.each(function(value) { set.add(value); });\n\n // Otherwise, assume it’s an array.\n else if (object) {\n var i = -1, n = object.length;\n if (f == null) while (++i < n) set.add(object[i]);\n else while (++i < n) set.add(f(object[i], i, object));\n }\n\n return set;\n}\n\nexport default set;\n","var array = Array.prototype;\n\nexport var map = array.map;\nexport var slice = array.slice;\n","import {map} from \"d3-collection\";\nimport {slice} from \"./array\";\n\nexport var implicit = {name: \"implicit\"};\n\nexport default function ordinal(range) {\n var index = map(),\n domain = [],\n unknown = implicit;\n\n range = range == null ? [] : slice.call(range);\n\n function scale(d) {\n var key = d + \"\", i = index.get(key);\n if (!i) {\n if (unknown !== implicit) return unknown;\n index.set(key, i = domain.push(d));\n }\n return range[(i - 1) % range.length];\n }\n\n scale.domain = function(_) {\n if (!arguments.length) return domain.slice();\n domain = [], index = map();\n var i = -1, n = _.length, d, key;\n while (++i < n) if (!index.has(key = (d = _[i]) + \"\")) index.set(key, domain.push(d));\n return scale;\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = slice.call(_), scale) : range.slice();\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n scale.copy = function() {\n return ordinal()\n .domain(domain)\n .range(range)\n .unknown(unknown);\n };\n\n return scale;\n}\n","import {range as sequence} from \"d3-array\";\nimport ordinal from \"./ordinal\";\n\nexport default function band() {\n var scale = ordinal().unknown(undefined),\n domain = scale.domain,\n ordinalRange = scale.range,\n range = [0, 1],\n step,\n bandwidth,\n round = false,\n paddingInner = 0,\n paddingOuter = 0,\n align = 0.5;\n\n delete scale.unknown;\n function rescale() {\n var n = domain().length,\n reverse = range[1] < range[0],\n start = range[reverse - 0],\n stop = range[1 - reverse];\n step = (stop - start) / Math.max(1, n - paddingInner + paddingOuter * 2);\n if (round) step = Math.floor(step);\n start += (stop - start - step * (n - paddingInner)) * align;\n bandwidth = step * (1 - paddingInner);\n if (round) start = Math.round(start), bandwidth = Math.round(bandwidth);\n var values = sequence(n).map(function(i) { return start + step * i; });\n return ordinalRange(reverse ? values.reverse() : values);\n }\n\n scale.domain = function(_) {\n return arguments.length ? (domain(_), rescale()) : domain();\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = [+_[0], +_[1]], rescale()) : range.slice();\n };\n\n scale.rangeRound = function(_) {\n return range = [+_[0], +_[1]], round = true, rescale();\n };\n\n scale.bandwidth = function() {\n return bandwidth;\n };\n\n scale.step = function() {\n return step;\n };\n\n scale.round = function(_) {\n return arguments.length ? (round = !!_, rescale()) : round;\n };\n\n scale.padding = function(_) {\n return arguments.length ? (paddingInner = paddingOuter = Math.max(0, Math.min(1, _)), rescale()) : paddingInner;\n };\n\n scale.paddingInner = function(_) {\n return arguments.length ? (paddingInner = Math.max(0, Math.min(1, _)), rescale()) : paddingInner;\n };\n\n scale.paddingOuter = function(_) {\n return arguments.length ? (paddingOuter = Math.max(0, Math.min(1, _)), rescale()) : paddingOuter;\n };\n\n scale.align = function(_) {\n return arguments.length ? (align = Math.max(0, Math.min(1, _)), rescale()) : align;\n };\n\n scale.copy = function() {\n return band()\n .domain(domain())\n .range(range)\n .round(round)\n .paddingInner(paddingInner)\n .paddingOuter(paddingOuter)\n .align(align);\n };\n\n scale.invertExtent = function(r0, r1) {\n var lo = +r0,\n hi = arguments.length > 1 ? +r1 : lo,\n reverse = range[1] < range[0],\n values = reverse ? ordinalRange().reverse() : ordinalRange(),\n n = values.length - 1, a, b, t,\n hiIndex;\n values.push(values[n] + this.step());\n // order range inputs, bail if outside of scale range\n if (hi < lo) t = lo, lo = hi, hi = t;\n if (hi < values[0] || lo > range[1-reverse]) return undefined;\n\n // binary search to index into scale range\n a = Math.max(0, getClosestIndexOf(values, lo));\n hiIndex = getClosestIndexOf(values, hi);\n b = lo===hi ? a : Math.max(a, hiIndex - 1);\n\n // increment index a if lo is within padding gap\n // if (lo - values[a] > bandwidth + 1e-10) ++a;\n\n if (reverse) t = a, a = n - b, b = n - t; // map + swap\n return (a > b) ? undefined : domain().slice(a, b+1);\n };\n\n scale.invert = function (r0, r1) {\n var lo = +r0,\n hi = arguments.length > 1 ? +r1 : lo,\n reverse = range[1] < range[0],\n values = reverse ? ordinalRange().reverse() : ordinalRange(),\n n = values.length - 1,\n a,\n t;\n\n // order range inputs, bail if outside of scale range\n if (hi < lo) t = lo, lo = hi, hi = t;\n if (hi < values[0] || lo > range[1-reverse]) return undefined;\n\n // binary search to index into scale range\n a = Math.max(0, getClosestIndexOf(values, lo, 'left'));\n\n // increment index a if lo is within padding gap\n // if (lo - values[a] > bandwidth + 1e-10) ++a;\n\n return domain()[reverse ? n - a : a];\n }\n return rescale();\n}\n\nfunction pointish(scale) {\n var copy = scale.copy;\n\n scale.padding = scale.paddingOuter;\n delete scale.paddingInner;\n delete scale.paddingOuter;\n\n scale.copy = function() {\n return pointish(copy());\n };\n\n return scale;\n}\n\nexport function point() {\n return pointish(band().paddingInner(1));\n}\n\nfunction getClosestIndexOf (arr, value, side) {\n var low = 0,\n arrLen = arr.length,\n high = arrLen - 1,\n highVal,\n mid,\n d1,\n d2;\n\n while (low < high) {\n mid = Math.floor((low + high) / 2);\n d1 = Math.abs(arr[mid] - value);\n d2 = Math.abs(arr[mid + 1] - value);\n\n if (d2 <= d1) {\n low = mid + 1;\n }\n else {\n high = mid;\n }\n }\n\n if (!side) {\n return high;\n }\n\n highVal = arr[high];\n if (highVal === value) {\n return high;\n } else if (highVal > value) {\n if (high === 0) { return high; }\n return side === 'left'? high - 1 : high;\n } else {\n if (high === arr.length - 1) { return high; }\n return side === 'left'? high : high + 1;\n }\n}","export default function(constructor, factory, prototype) {\n constructor.prototype = factory.prototype = prototype;\n prototype.constructor = constructor;\n}\n\nexport function extend(parent, definition) {\n var prototype = Object.create(parent.prototype);\n for (var key in definition) prototype[key] = definition[key];\n return prototype;\n}\n","import define, {extend} from \"./define\";\n\nexport function Color() {}\n\nexport var darker = 0.7;\nexport var brighter = 1 / darker;\n\nvar reI = \"\\\\s*([+-]?\\\\d+)\\\\s*\",\n reN = \"\\\\s*([+-]?\\\\d*\\\\.?\\\\d+(?:[eE][+-]?\\\\d+)?)\\\\s*\",\n reP = \"\\\\s*([+-]?\\\\d*\\\\.?\\\\d+(?:[eE][+-]?\\\\d+)?)%\\\\s*\",\n reHex3 = /^#([0-9a-f]{3})$/,\n reHex6 = /^#([0-9a-f]{6})$/,\n reRgbInteger = new RegExp(\"^rgb\\\\(\" + [reI, reI, reI] + \"\\\\)$\"),\n reRgbPercent = new RegExp(\"^rgb\\\\(\" + [reP, reP, reP] + \"\\\\)$\"),\n reRgbaInteger = new RegExp(\"^rgba\\\\(\" + [reI, reI, reI, reN] + \"\\\\)$\"),\n reRgbaPercent = new RegExp(\"^rgba\\\\(\" + [reP, reP, reP, reN] + \"\\\\)$\"),\n reHslPercent = new RegExp(\"^hsl\\\\(\" + [reN, reP, reP] + \"\\\\)$\"),\n reHslaPercent = new RegExp(\"^hsla\\\\(\" + [reN, reP, reP, reN] + \"\\\\)$\");\n\nvar named = {\n aliceblue: 0xf0f8ff,\n antiquewhite: 0xfaebd7,\n aqua: 0x00ffff,\n aquamarine: 0x7fffd4,\n azure: 0xf0ffff,\n beige: 0xf5f5dc,\n bisque: 0xffe4c4,\n black: 0x000000,\n blanchedalmond: 0xffebcd,\n blue: 0x0000ff,\n blueviolet: 0x8a2be2,\n brown: 0xa52a2a,\n burlywood: 0xdeb887,\n cadetblue: 0x5f9ea0,\n chartreuse: 0x7fff00,\n chocolate: 0xd2691e,\n coral: 0xff7f50,\n cornflowerblue: 0x6495ed,\n cornsilk: 0xfff8dc,\n crimson: 0xdc143c,\n cyan: 0x00ffff,\n darkblue: 0x00008b,\n darkcyan: 0x008b8b,\n darkgoldenrod: 0xb8860b,\n darkgray: 0xa9a9a9,\n darkgreen: 0x006400,\n darkgrey: 0xa9a9a9,\n darkkhaki: 0xbdb76b,\n darkmagenta: 0x8b008b,\n darkolivegreen: 0x556b2f,\n darkorange: 0xff8c00,\n darkorchid: 0x9932cc,\n darkred: 0x8b0000,\n darksalmon: 0xe9967a,\n darkseagreen: 0x8fbc8f,\n darkslateblue: 0x483d8b,\n darkslategray: 0x2f4f4f,\n darkslategrey: 0x2f4f4f,\n darkturquoise: 0x00ced1,\n darkviolet: 0x9400d3,\n deeppink: 0xff1493,\n deepskyblue: 0x00bfff,\n dimgray: 0x696969,\n dimgrey: 0x696969,\n dodgerblue: 0x1e90ff,\n firebrick: 0xb22222,\n floralwhite: 0xfffaf0,\n forestgreen: 0x228b22,\n fuchsia: 0xff00ff,\n gainsboro: 0xdcdcdc,\n ghostwhite: 0xf8f8ff,\n gold: 0xffd700,\n goldenrod: 0xdaa520,\n gray: 0x808080,\n green: 0x008000,\n greenyellow: 0xadff2f,\n grey: 0x808080,\n honeydew: 0xf0fff0,\n hotpink: 0xff69b4,\n indianred: 0xcd5c5c,\n indigo: 0x4b0082,\n ivory: 0xfffff0,\n khaki: 0xf0e68c,\n lavender: 0xe6e6fa,\n lavenderblush: 0xfff0f5,\n lawngreen: 0x7cfc00,\n lemonchiffon: 0xfffacd,\n lightblue: 0xadd8e6,\n lightcoral: 0xf08080,\n lightcyan: 0xe0ffff,\n lightgoldenrodyellow: 0xfafad2,\n lightgray: 0xd3d3d3,\n lightgreen: 0x90ee90,\n lightgrey: 0xd3d3d3,\n lightpink: 0xffb6c1,\n lightsalmon: 0xffa07a,\n lightseagreen: 0x20b2aa,\n lightskyblue: 0x87cefa,\n lightslategray: 0x778899,\n lightslategrey: 0x778899,\n lightsteelblue: 0xb0c4de,\n lightyellow: 0xffffe0,\n lime: 0x00ff00,\n limegreen: 0x32cd32,\n linen: 0xfaf0e6,\n magenta: 0xff00ff,\n maroon: 0x800000,\n mediumaquamarine: 0x66cdaa,\n mediumblue: 0x0000cd,\n mediumorchid: 0xba55d3,\n mediumpurple: 0x9370db,\n mediumseagreen: 0x3cb371,\n mediumslateblue: 0x7b68ee,\n mediumspringgreen: 0x00fa9a,\n mediumturquoise: 0x48d1cc,\n mediumvioletred: 0xc71585,\n midnightblue: 0x191970,\n mintcream: 0xf5fffa,\n mistyrose: 0xffe4e1,\n moccasin: 0xffe4b5,\n navajowhite: 0xffdead,\n navy: 0x000080,\n oldlace: 0xfdf5e6,\n olive: 0x808000,\n olivedrab: 0x6b8e23,\n orange: 0xffa500,\n orangered: 0xff4500,\n orchid: 0xda70d6,\n palegoldenrod: 0xeee8aa,\n palegreen: 0x98fb98,\n paleturquoise: 0xafeeee,\n palevioletred: 0xdb7093,\n papayawhip: 0xffefd5,\n peachpuff: 0xffdab9,\n peru: 0xcd853f,\n pink: 0xffc0cb,\n plum: 0xdda0dd,\n powderblue: 0xb0e0e6,\n purple: 0x800080,\n rebeccapurple: 0x663399,\n red: 0xff0000,\n rosybrown: 0xbc8f8f,\n royalblue: 0x4169e1,\n saddlebrown: 0x8b4513,\n salmon: 0xfa8072,\n sandybrown: 0xf4a460,\n seagreen: 0x2e8b57,\n seashell: 0xfff5ee,\n sienna: 0xa0522d,\n silver: 0xc0c0c0,\n skyblue: 0x87ceeb,\n slateblue: 0x6a5acd,\n slategray: 0x708090,\n slategrey: 0x708090,\n snow: 0xfffafa,\n springgreen: 0x00ff7f,\n steelblue: 0x4682b4,\n tan: 0xd2b48c,\n teal: 0x008080,\n thistle: 0xd8bfd8,\n tomato: 0xff6347,\n turquoise: 0x40e0d0,\n violet: 0xee82ee,\n wheat: 0xf5deb3,\n white: 0xffffff,\n whitesmoke: 0xf5f5f5,\n yellow: 0xffff00,\n yellowgreen: 0x9acd32\n};\n\ndefine(Color, color, {\n displayable: function() {\n return this.rgb().displayable();\n },\n hex: function() {\n return this.rgb().hex();\n },\n toString: function() {\n return this.rgb() + \"\";\n }\n});\n\nexport default function color(format) {\n var m;\n format = (format + \"\").trim().toLowerCase();\n return (m = reHex3.exec(format)) ? (m = parseInt(m[1], 16), new Rgb((m >> 8 & 0xf) | (m >> 4 & 0x0f0), (m >> 4 & 0xf) | (m & 0xf0), ((m & 0xf) << 4) | (m & 0xf), 1)) // #f00\n : (m = reHex6.exec(format)) ? rgbn(parseInt(m[1], 16)) // #ff0000\n : (m = reRgbInteger.exec(format)) ? new Rgb(m[1], m[2], m[3], 1) // rgb(255, 0, 0)\n : (m = reRgbPercent.exec(format)) ? new Rgb(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, 1) // rgb(100%, 0%, 0%)\n : (m = reRgbaInteger.exec(format)) ? rgba(m[1], m[2], m[3], m[4]) // rgba(255, 0, 0, 1)\n : (m = reRgbaPercent.exec(format)) ? rgba(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, m[4]) // rgb(100%, 0%, 0%, 1)\n : (m = reHslPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, 1) // hsl(120, 50%, 50%)\n : (m = reHslaPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, m[4]) // hsla(120, 50%, 50%, 1)\n : named.hasOwnProperty(format) ? rgbn(named[format])\n : format === \"transparent\" ? new Rgb(NaN, NaN, NaN, 0)\n : null;\n}\n\nfunction rgbn(n) {\n return new Rgb(n >> 16 & 0xff, n >> 8 & 0xff, n & 0xff, 1);\n}\n\nfunction rgba(r, g, b, a) {\n if (a <= 0) r = g = b = NaN;\n return new Rgb(r, g, b, a);\n}\n\nexport function rgbConvert(o) {\n if (!(o instanceof Color)) o = color(o);\n if (!o) return new Rgb;\n o = o.rgb();\n return new Rgb(o.r, o.g, o.b, o.opacity);\n}\n\nexport function rgb(r, g, b, opacity) {\n return arguments.length === 1 ? rgbConvert(r) : new Rgb(r, g, b, opacity == null ? 1 : opacity);\n}\n\nexport function Rgb(r, g, b, opacity) {\n this.r = +r;\n this.g = +g;\n this.b = +b;\n this.opacity = +opacity;\n}\n\ndefine(Rgb, rgb, extend(Color, {\n brighter: function(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n },\n darker: function(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n },\n rgb: function() {\n return this;\n },\n displayable: function() {\n return (0 <= this.r && this.r <= 255)\n && (0 <= this.g && this.g <= 255)\n && (0 <= this.b && this.b <= 255)\n && (0 <= this.opacity && this.opacity <= 1);\n },\n hex: function() {\n return \"#\" + hex(this.r) + hex(this.g) + hex(this.b);\n },\n toString: function() {\n var a = this.opacity; a = isNaN(a) ? 1 : Math.max(0, Math.min(1, a));\n return (a === 1 ? \"rgb(\" : \"rgba(\")\n + Math.max(0, Math.min(255, Math.round(this.r) || 0)) + \", \"\n + Math.max(0, Math.min(255, Math.round(this.g) || 0)) + \", \"\n + Math.max(0, Math.min(255, Math.round(this.b) || 0))\n + (a === 1 ? \")\" : \", \" + a + \")\");\n }\n}));\n\nfunction hex(value) {\n value = Math.max(0, Math.min(255, Math.round(value) || 0));\n return (value < 16 ? \"0\" : \"\") + value.toString(16);\n}\n\nfunction hsla(h, s, l, a) {\n if (a <= 0) h = s = l = NaN;\n else if (l <= 0 || l >= 1) h = s = NaN;\n else if (s <= 0) h = NaN;\n return new Hsl(h, s, l, a);\n}\n\nexport function hslConvert(o) {\n if (o instanceof Hsl) return new Hsl(o.h, o.s, o.l, o.opacity);\n if (!(o instanceof Color)) o = color(o);\n if (!o) return new Hsl;\n if (o instanceof Hsl) return o;\n o = o.rgb();\n var r = o.r / 255,\n g = o.g / 255,\n b = o.b / 255,\n min = Math.min(r, g, b),\n max = Math.max(r, g, b),\n h = NaN,\n s = max - min,\n l = (max + min) / 2;\n if (s) {\n if (r === max) h = (g - b) / s + (g < b) * 6;\n else if (g === max) h = (b - r) / s + 2;\n else h = (r - g) / s + 4;\n s /= l < 0.5 ? max + min : 2 - max - min;\n h *= 60;\n } else {\n s = l > 0 && l < 1 ? 0 : h;\n }\n return new Hsl(h, s, l, o.opacity);\n}\n\nexport function hsl(h, s, l, opacity) {\n return arguments.length === 1 ? hslConvert(h) : new Hsl(h, s, l, opacity == null ? 1 : opacity);\n}\n\nfunction Hsl(h, s, l, opacity) {\n this.h = +h;\n this.s = +s;\n this.l = +l;\n this.opacity = +opacity;\n}\n\ndefine(Hsl, hsl, extend(Color, {\n brighter: function(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Hsl(this.h, this.s, this.l * k, this.opacity);\n },\n darker: function(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Hsl(this.h, this.s, this.l * k, this.opacity);\n },\n rgb: function() {\n var h = this.h % 360 + (this.h < 0) * 360,\n s = isNaN(h) || isNaN(this.s) ? 0 : this.s,\n l = this.l,\n m2 = l + (l < 0.5 ? l : 1 - l) * s,\n m1 = 2 * l - m2;\n return new Rgb(\n hsl2rgb(h >= 240 ? h - 240 : h + 120, m1, m2),\n hsl2rgb(h, m1, m2),\n hsl2rgb(h < 120 ? h + 240 : h - 120, m1, m2),\n this.opacity\n );\n },\n displayable: function() {\n return (0 <= this.s && this.s <= 1 || isNaN(this.s))\n && (0 <= this.l && this.l <= 1)\n && (0 <= this.opacity && this.opacity <= 1);\n }\n}));\n\n/* From FvD 13.37, CSS Color Module Level 3 */\nfunction hsl2rgb(h, m1, m2) {\n return (h < 60 ? m1 + (m2 - m1) * h / 60\n : h < 180 ? m2\n : h < 240 ? m1 + (m2 - m1) * (240 - h) / 60\n : m1) * 255;\n}\n","export var deg2rad = Math.PI / 180;\nexport var rad2deg = 180 / Math.PI;\n","import define, {extend} from \"./define\";\nimport {Color, rgbConvert, Rgb} from \"./color\";\nimport {deg2rad, rad2deg} from \"./math\";\n\n// https://beta.observablehq.com/@mbostock/lab-and-rgb\nvar K = 18,\n Xn = 0.96422,\n Yn = 1,\n Zn = 0.82521,\n t0 = 4 / 29,\n t1 = 6 / 29,\n t2 = 3 * t1 * t1,\n t3 = t1 * t1 * t1;\n\nfunction labConvert(o) {\n if (o instanceof Lab) return new Lab(o.l, o.a, o.b, o.opacity);\n if (o instanceof Hcl) {\n if (isNaN(o.h)) return new Lab(o.l, 0, 0, o.opacity);\n var h = o.h * deg2rad;\n return new Lab(o.l, Math.cos(h) * o.c, Math.sin(h) * o.c, o.opacity);\n }\n if (!(o instanceof Rgb)) o = rgbConvert(o);\n var r = rgb2lrgb(o.r),\n g = rgb2lrgb(o.g),\n b = rgb2lrgb(o.b),\n y = xyz2lab((0.2225045 * r + 0.7168786 * g + 0.0606169 * b) / Yn), x, z;\n if (r === g && g === b) x = z = y; else {\n x = xyz2lab((0.4360747 * r + 0.3850649 * g + 0.1430804 * b) / Xn);\n z = xyz2lab((0.0139322 * r + 0.0971045 * g + 0.7141733 * b) / Zn);\n }\n return new Lab(116 * y - 16, 500 * (x - y), 200 * (y - z), o.opacity);\n}\n\nexport function gray(l, opacity) {\n return new Lab(l, 0, 0, opacity == null ? 1 : opacity);\n}\n\nexport default function lab(l, a, b, opacity) {\n return arguments.length === 1 ? labConvert(l) : new Lab(l, a, b, opacity == null ? 1 : opacity);\n}\n\nexport function Lab(l, a, b, opacity) {\n this.l = +l;\n this.a = +a;\n this.b = +b;\n this.opacity = +opacity;\n}\n\ndefine(Lab, lab, extend(Color, {\n brighter: function(k) {\n return new Lab(this.l + K * (k == null ? 1 : k), this.a, this.b, this.opacity);\n },\n darker: function(k) {\n return new Lab(this.l - K * (k == null ? 1 : k), this.a, this.b, this.opacity);\n },\n rgb: function() {\n var y = (this.l + 16) / 116,\n x = isNaN(this.a) ? y : y + this.a / 500,\n z = isNaN(this.b) ? y : y - this.b / 200;\n x = Xn * lab2xyz(x);\n y = Yn * lab2xyz(y);\n z = Zn * lab2xyz(z);\n return new Rgb(\n lrgb2rgb( 3.1338561 * x - 1.6168667 * y - 0.4906146 * z),\n lrgb2rgb(-0.9787684 * x + 1.9161415 * y + 0.0334540 * z),\n lrgb2rgb( 0.0719453 * x - 0.2289914 * y + 1.4052427 * z),\n this.opacity\n );\n }\n}));\n\nfunction xyz2lab(t) {\n return t > t3 ? Math.pow(t, 1 / 3) : t / t2 + t0;\n}\n\nfunction lab2xyz(t) {\n return t > t1 ? t * t * t : t2 * (t - t0);\n}\n\nfunction lrgb2rgb(x) {\n return 255 * (x <= 0.0031308 ? 12.92 * x : 1.055 * Math.pow(x, 1 / 2.4) - 0.055);\n}\n\nfunction rgb2lrgb(x) {\n return (x /= 255) <= 0.04045 ? x / 12.92 : Math.pow((x + 0.055) / 1.055, 2.4);\n}\n\nfunction hclConvert(o) {\n if (o instanceof Hcl) return new Hcl(o.h, o.c, o.l, o.opacity);\n if (!(o instanceof Lab)) o = labConvert(o);\n if (o.a === 0 && o.b === 0) return new Hcl(NaN, 0, o.l, o.opacity);\n var h = Math.atan2(o.b, o.a) * rad2deg;\n return new Hcl(h < 0 ? h + 360 : h, Math.sqrt(o.a * o.a + o.b * o.b), o.l, o.opacity);\n}\n\nexport function lch(l, c, h, opacity) {\n return arguments.length === 1 ? hclConvert(l) : new Hcl(h, c, l, opacity == null ? 1 : opacity);\n}\n\nexport function hcl(h, c, l, opacity) {\n return arguments.length === 1 ? hclConvert(h) : new Hcl(h, c, l, opacity == null ? 1 : opacity);\n}\n\nexport function Hcl(h, c, l, opacity) {\n this.h = +h;\n this.c = +c;\n this.l = +l;\n this.opacity = +opacity;\n}\n\ndefine(Hcl, hcl, extend(Color, {\n brighter: function(k) {\n return new Hcl(this.h, this.c, this.l + K * (k == null ? 1 : k), this.opacity);\n },\n darker: function(k) {\n return new Hcl(this.h, this.c, this.l - K * (k == null ? 1 : k), this.opacity);\n },\n rgb: function() {\n return labConvert(this).rgb();\n }\n}));\n","import define, {extend} from \"./define\";\nimport {Color, rgbConvert, Rgb, darker, brighter} from \"./color\";\nimport {deg2rad, rad2deg} from \"./math\";\n\nvar A = -0.14861,\n B = +1.78277,\n C = -0.29227,\n D = -0.90649,\n E = +1.97294,\n ED = E * D,\n EB = E * B,\n BC_DA = B * C - D * A;\n\nfunction cubehelixConvert(o) {\n if (o instanceof Cubehelix) return new Cubehelix(o.h, o.s, o.l, o.opacity);\n if (!(o instanceof Rgb)) o = rgbConvert(o);\n var r = o.r / 255,\n g = o.g / 255,\n b = o.b / 255,\n l = (BC_DA * b + ED * r - EB * g) / (BC_DA + ED - EB),\n bl = b - l,\n k = (E * (g - l) - C * bl) / D,\n s = Math.sqrt(k * k + bl * bl) / (E * l * (1 - l)), // NaN if l=0 or l=1\n h = s ? Math.atan2(k, bl) * rad2deg - 120 : NaN;\n return new Cubehelix(h < 0 ? h + 360 : h, s, l, o.opacity);\n}\n\nexport default function cubehelix(h, s, l, opacity) {\n return arguments.length === 1 ? cubehelixConvert(h) : new Cubehelix(h, s, l, opacity == null ? 1 : opacity);\n}\n\nexport function Cubehelix(h, s, l, opacity) {\n this.h = +h;\n this.s = +s;\n this.l = +l;\n this.opacity = +opacity;\n}\n\ndefine(Cubehelix, cubehelix, extend(Color, {\n brighter: function(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Cubehelix(this.h, this.s, this.l * k, this.opacity);\n },\n darker: function(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Cubehelix(this.h, this.s, this.l * k, this.opacity);\n },\n rgb: function() {\n var h = isNaN(this.h) ? 0 : (this.h + 120) * deg2rad,\n l = +this.l,\n a = isNaN(this.s) ? 0 : this.s * l * (1 - l),\n cosh = Math.cos(h),\n sinh = Math.sin(h);\n return new Rgb(\n 255 * (l + a * (A * cosh + B * sinh)),\n 255 * (l + a * (C * cosh + D * sinh)),\n 255 * (l + a * (E * cosh)),\n this.opacity\n );\n }\n}));\n","export function basis(t1, v0, v1, v2, v3) {\n var t2 = t1 * t1, t3 = t2 * t1;\n return ((1 - 3 * t1 + 3 * t2 - t3) * v0\n + (4 - 6 * t2 + 3 * t3) * v1\n + (1 + 3 * t1 + 3 * t2 - 3 * t3) * v2\n + t3 * v3) / 6;\n}\n\nexport default function(values) {\n var n = values.length - 1;\n return function(t) {\n var i = t <= 0 ? (t = 0) : t >= 1 ? (t = 1, n - 1) : Math.floor(t * n),\n v1 = values[i],\n v2 = values[i + 1],\n v0 = i > 0 ? values[i - 1] : 2 * v1 - v2,\n v3 = i < n - 1 ? values[i + 2] : 2 * v2 - v1;\n return basis((t - i / n) * n, v0, v1, v2, v3);\n };\n}\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","import constant from \"./constant\";\n\nfunction linear(a, d) {\n return function(t) {\n return a + t * d;\n };\n}\n\nfunction exponential(a, b, y) {\n return a = Math.pow(a, y), b = Math.pow(b, y) - a, y = 1 / y, function(t) {\n return Math.pow(a + t * b, y);\n };\n}\n\nexport function hue(a, b) {\n var d = b - a;\n return d ? linear(a, d > 180 || d < -180 ? d - 360 * Math.round(d / 360) : d) : constant(isNaN(a) ? b : a);\n}\n\nexport function gamma(y) {\n return (y = +y) === 1 ? nogamma : function(a, b) {\n return b - a ? exponential(a, b, y) : constant(isNaN(a) ? b : a);\n };\n}\n\nexport default function nogamma(a, b) {\n var d = b - a;\n return d ? linear(a, d) : constant(isNaN(a) ? b : a);\n}\n","import {rgb as colorRgb} from \"d3-color\";\nimport basis from \"./basis\";\nimport basisClosed from \"./basisClosed\";\nimport nogamma, {gamma} from \"./color\";\n\nexport default (function rgbGamma(y) {\n var color = gamma(y);\n\n function rgb(start, end) {\n var r = color((start = colorRgb(start)).r, (end = colorRgb(end)).r),\n g = color(start.g, end.g),\n b = color(start.b, end.b),\n opacity = nogamma(start.opacity, end.opacity);\n return function(t) {\n start.r = r(t);\n start.g = g(t);\n start.b = b(t);\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n\n rgb.gamma = rgbGamma;\n\n return rgb;\n})(1);\n\nfunction rgbSpline(spline) {\n return function(colors) {\n var n = colors.length,\n r = new Array(n),\n g = new Array(n),\n b = new Array(n),\n i, color;\n for (i = 0; i < n; ++i) {\n color = colorRgb(colors[i]);\n r[i] = color.r || 0;\n g[i] = color.g || 0;\n b[i] = color.b || 0;\n }\n r = spline(r);\n g = spline(g);\n b = spline(b);\n color.opacity = 1;\n return function(t) {\n color.r = r(t);\n color.g = g(t);\n color.b = b(t);\n return color + \"\";\n };\n };\n}\n\nexport var rgbBasis = rgbSpline(basis);\nexport var rgbBasisClosed = rgbSpline(basisClosed);\n","export default function(a, b) {\n return a = +a, b -= a, function(t) {\n return a + b * t;\n };\n}\n","import {basis} from \"./basis\";\n\nexport default function(values) {\n var n = values.length;\n return function(t) {\n var i = Math.floor(((t %= 1) < 0 ? ++t : t) * n),\n v0 = values[(i + n - 1) % n],\n v1 = values[i % n],\n v2 = values[(i + 1) % n],\n v3 = values[(i + 2) % n];\n return basis((t - i / n) * n, v0, v1, v2, v3);\n };\n}\n","import value from \"./value\";\n\nexport default function(a, b) {\n var i = {},\n c = {},\n k;\n\n if (a === null || typeof a !== \"object\") a = {};\n if (b === null || typeof b !== \"object\") b = {};\n\n for (k in b) {\n if (k in a) {\n i[k] = value(a[k], b[k]);\n } else {\n c[k] = b[k];\n }\n }\n\n return function(t) {\n for (k in i) c[k] = i[k](t);\n return c;\n };\n}\n","import number from \"./number\";\n\nvar reA = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n reB = new RegExp(reA.source, \"g\");\n\nfunction zero(b) {\n return function() {\n return b;\n };\n}\n\nfunction one(b) {\n return function(t) {\n return b(t) + \"\";\n };\n}\n\nexport default function(a, b) {\n var bi = reA.lastIndex = reB.lastIndex = 0, // scan index for next number in b\n am, // current match in a\n bm, // current match in b\n bs, // string preceding current number in b, if any\n i = -1, // index in s\n s = [], // string constants and placeholders\n q = []; // number interpolators\n\n // Coerce inputs to strings.\n a = a + \"\", b = b + \"\";\n\n // Interpolate pairs of numbers in a & b.\n while ((am = reA.exec(a))\n && (bm = reB.exec(b))) {\n if ((bs = bm.index) > bi) { // a string precedes the next number in b\n bs = b.slice(bi, bs);\n if (s[i]) s[i] += bs; // coalesce with previous string\n else s[++i] = bs;\n }\n if ((am = am[0]) === (bm = bm[0])) { // numbers in a & b match\n if (s[i]) s[i] += bm; // coalesce with previous string\n else s[++i] = bm;\n } else { // interpolate non-matching numbers\n s[++i] = null;\n q.push({i: i, x: number(am, bm)});\n }\n bi = reB.lastIndex;\n }\n\n // Add remains of b.\n if (bi < b.length) {\n bs = b.slice(bi);\n if (s[i]) s[i] += bs; // coalesce with previous string\n else s[++i] = bs;\n }\n\n // Special optimization for only a single match.\n // Otherwise, interpolate each of the numbers and rejoin the string.\n return s.length < 2 ? (q[0]\n ? one(q[0].x)\n : zero(b))\n : (b = q.length, function(t) {\n for (var i = 0, o; i < b; ++i) s[(o = q[i]).i] = o.x(t);\n return s.join(\"\");\n });\n}\n","import {color} from \"d3-color\";\nimport rgb from \"./rgb\";\nimport array from \"./array\";\nimport date from \"./date\";\nimport number from \"./number\";\nimport object from \"./object\";\nimport string from \"./string\";\nimport constant from \"./constant\";\n\nexport default function(a, b) {\n var t = typeof b, c;\n return b == null || t === \"boolean\" ? constant(b)\n : (t === \"number\" ? number\n : t === \"string\" ? ((c = color(b)) ? (b = c, rgb) : string)\n : b instanceof color ? rgb\n : b instanceof Date ? date\n : Array.isArray(b) ? array\n : typeof b.valueOf !== \"function\" && typeof b.toString !== \"function\" || isNaN(b) ? object\n : number)(a, b);\n}\n","import decompose, {identity} from \"./decompose\";\n\nvar cssNode,\n cssRoot,\n cssView,\n svgNode;\n\nexport function parseCss(value) {\n if (value === \"none\") return identity;\n if (!cssNode) cssNode = document.createElement(\"DIV\"), cssRoot = document.documentElement, cssView = document.defaultView;\n cssNode.style.transform = value;\n value = cssView.getComputedStyle(cssRoot.appendChild(cssNode), null).getPropertyValue(\"transform\");\n cssRoot.removeChild(cssNode);\n value = value.slice(7, -1).split(\",\");\n return decompose(+value[0], +value[1], +value[2], +value[3], +value[4], +value[5]);\n}\n\nexport function parseSvg(value) {\n if (value == null) return identity;\n if (!svgNode) svgNode = document.createElementNS(\"http://www.w3.org/2000/svg\", \"g\");\n svgNode.setAttribute(\"transform\", value);\n if (!(value = svgNode.transform.baseVal.consolidate())) return identity;\n value = value.matrix;\n return decompose(value.a, value.b, value.c, value.d, value.e, value.f);\n}\n","export default function(a, b) {\n var d = new Date;\n return a = +a, b -= a, function(t) {\n return d.setTime(a + b * t), d;\n };\n}\n","import value from \"./value\";\n\nexport default function(a, b) {\n var nb = b ? b.length : 0,\n na = a ? Math.min(nb, a.length) : 0,\n x = new Array(na),\n c = new Array(nb),\n i;\n\n for (i = 0; i < na; ++i) x[i] = value(a[i], b[i]);\n for (; i < nb; ++i) c[i] = b[i];\n\n return function(t) {\n for (i = 0; i < na; ++i) c[i] = x[i](t);\n return c;\n };\n}\n","export default function(a, b) {\n return a = +a, b -= a, function(t) {\n return Math.round(a + b * t);\n };\n}\n","var degrees = 180 / Math.PI;\n\nexport var identity = {\n translateX: 0,\n translateY: 0,\n rotate: 0,\n skewX: 0,\n scaleX: 1,\n scaleY: 1\n};\n\nexport default function(a, b, c, d, e, f) {\n var scaleX, scaleY, skewX;\n if (scaleX = Math.sqrt(a * a + b * b)) a /= scaleX, b /= scaleX;\n if (skewX = a * c + b * d) c -= a * skewX, d -= b * skewX;\n if (scaleY = Math.sqrt(c * c + d * d)) c /= scaleY, d /= scaleY, skewX /= scaleY;\n if (a * d < b * c) a = -a, b = -b, skewX = -skewX, scaleX = -scaleX;\n return {\n translateX: e,\n translateY: f,\n rotate: Math.atan2(b, a) * degrees,\n skewX: Math.atan(skewX) * degrees,\n scaleX: scaleX,\n scaleY: scaleY\n };\n}\n","import number from \"../number\";\nimport {parseCss, parseSvg} from \"./parse\";\n\nfunction interpolateTransform(parse, pxComma, pxParen, degParen) {\n\n function pop(s) {\n return s.length ? s.pop() + \" \" : \"\";\n }\n\n function translate(xa, ya, xb, yb, s, q) {\n if (xa !== xb || ya !== yb) {\n var i = s.push(\"translate(\", null, pxComma, null, pxParen);\n q.push({i: i - 4, x: number(xa, xb)}, {i: i - 2, x: number(ya, yb)});\n } else if (xb || yb) {\n s.push(\"translate(\" + xb + pxComma + yb + pxParen);\n }\n }\n\n function rotate(a, b, s, q) {\n if (a !== b) {\n if (a - b > 180) b += 360; else if (b - a > 180) a += 360; // shortest path\n q.push({i: s.push(pop(s) + \"rotate(\", null, degParen) - 2, x: number(a, b)});\n } else if (b) {\n s.push(pop(s) + \"rotate(\" + b + degParen);\n }\n }\n\n function skewX(a, b, s, q) {\n if (a !== b) {\n q.push({i: s.push(pop(s) + \"skewX(\", null, degParen) - 2, x: number(a, b)});\n } else if (b) {\n s.push(pop(s) + \"skewX(\" + b + degParen);\n }\n }\n\n function scale(xa, ya, xb, yb, s, q) {\n if (xa !== xb || ya !== yb) {\n var i = s.push(pop(s) + \"scale(\", null, \",\", null, \")\");\n q.push({i: i - 4, x: number(xa, xb)}, {i: i - 2, x: number(ya, yb)});\n } else if (xb !== 1 || yb !== 1) {\n s.push(pop(s) + \"scale(\" + xb + \",\" + yb + \")\");\n }\n }\n\n return function(a, b) {\n var s = [], // string constants and placeholders\n q = []; // number interpolators\n a = parse(a), b = parse(b);\n translate(a.translateX, a.translateY, b.translateX, b.translateY, s, q);\n rotate(a.rotate, b.rotate, s, q);\n skewX(a.skewX, b.skewX, s, q);\n scale(a.scaleX, a.scaleY, b.scaleX, b.scaleY, s, q);\n a = b = null; // gc\n return function(t) {\n var i = -1, n = q.length, o;\n while (++i < n) s[(o = q[i]).i] = o.x(t);\n return s.join(\"\");\n };\n };\n}\n\nexport var interpolateTransformCss = interpolateTransform(parseCss, \"px, \", \"px)\", \"deg)\");\nexport var interpolateTransformSvg = interpolateTransform(parseSvg, \", \", \")\", \")\");\n","var rho = Math.SQRT2,\n rho2 = 2,\n rho4 = 4,\n epsilon2 = 1e-12;\n\nfunction cosh(x) {\n return ((x = Math.exp(x)) + 1 / x) / 2;\n}\n\nfunction sinh(x) {\n return ((x = Math.exp(x)) - 1 / x) / 2;\n}\n\nfunction tanh(x) {\n return ((x = Math.exp(2 * x)) - 1) / (x + 1);\n}\n\n// p0 = [ux0, uy0, w0]\n// p1 = [ux1, uy1, w1]\nexport default function(p0, p1) {\n var ux0 = p0[0], uy0 = p0[1], w0 = p0[2],\n ux1 = p1[0], uy1 = p1[1], w1 = p1[2],\n dx = ux1 - ux0,\n dy = uy1 - uy0,\n d2 = dx * dx + dy * dy,\n i,\n S;\n\n // Special case for u0 ≅ u1.\n if (d2 < epsilon2) {\n S = Math.log(w1 / w0) / rho;\n i = function(t) {\n return [\n ux0 + t * dx,\n uy0 + t * dy,\n w0 * Math.exp(rho * t * S)\n ];\n }\n }\n\n // General case.\n else {\n var d1 = Math.sqrt(d2),\n b0 = (w1 * w1 - w0 * w0 + rho4 * d2) / (2 * w0 * rho2 * d1),\n b1 = (w1 * w1 - w0 * w0 - rho4 * d2) / (2 * w1 * rho2 * d1),\n r0 = Math.log(Math.sqrt(b0 * b0 + 1) - b0),\n r1 = Math.log(Math.sqrt(b1 * b1 + 1) - b1);\n S = (r1 - r0) / rho;\n i = function(t) {\n var s = t * S,\n coshr0 = cosh(r0),\n u = w0 / (rho2 * d1) * (coshr0 * tanh(rho * s + r0) - sinh(r0));\n return [\n ux0 + u * dx,\n uy0 + u * dy,\n w0 * coshr0 / cosh(rho * s + r0)\n ];\n }\n }\n\n i.duration = S * 1000;\n\n return i;\n}\n","import {hsl as colorHsl} from \"d3-color\";\nimport color, {hue} from \"./color\";\n\nfunction hsl(hue) {\n return function(start, end) {\n var h = hue((start = colorHsl(start)).h, (end = colorHsl(end)).h),\n s = color(start.s, end.s),\n l = color(start.l, end.l),\n opacity = color(start.opacity, end.opacity);\n return function(t) {\n start.h = h(t);\n start.s = s(t);\n start.l = l(t);\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n}\n\nexport default hsl(hue);\nexport var hslLong = hsl(color);\n","import {hcl as colorHcl} from \"d3-color\";\nimport color, {hue} from \"./color\";\n\nfunction hcl(hue) {\n return function(start, end) {\n var h = hue((start = colorHcl(start)).h, (end = colorHcl(end)).h),\n c = color(start.c, end.c),\n l = color(start.l, end.l),\n opacity = color(start.opacity, end.opacity);\n return function(t) {\n start.h = h(t);\n start.c = c(t);\n start.l = l(t);\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n}\n\nexport default hcl(hue);\nexport var hclLong = hcl(color);\n","import {cubehelix as colorCubehelix} from \"d3-color\";\nimport color, {hue} from \"./color\";\n\nfunction cubehelix(hue) {\n return (function cubehelixGamma(y) {\n y = +y;\n\n function cubehelix(start, end) {\n var h = hue((start = colorCubehelix(start)).h, (end = colorCubehelix(end)).h),\n s = color(start.s, end.s),\n l = color(start.l, end.l),\n opacity = color(start.opacity, end.opacity);\n return function(t) {\n start.h = h(t);\n start.s = s(t);\n start.l = l(Math.pow(t, y));\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n\n cubehelix.gamma = cubehelixGamma;\n\n return cubehelix;\n })(1);\n}\n\nexport default cubehelix(hue);\nexport var cubehelixLong = cubehelix(color);\n","export default function piecewise(interpolate, values) {\n var i = 0, n = values.length - 1, v = values[0], I = new Array(n < 0 ? 0 : n);\n while (i < n) I[i] = interpolate(v, v = values[++i]);\n return function(t) {\n var i = Math.max(0, Math.min(n - 1, Math.floor(t *= n)));\n return I[i](t - i);\n };\n}\n","export default function(interpolator, n) {\n var samples = new Array(n);\n for (var i = 0; i < n; ++i) samples[i] = interpolator(i / (n - 1));\n return samples;\n}\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","export default function(x) {\n return +x;\n}\n","import {bisect} from \"d3-array\";\nimport {interpolate as interpolateValue, interpolateRound} from \"d3-interpolate\";\nimport {map, slice} from \"./array\";\nimport constant from \"./constant\";\nimport number from \"./number\";\n\nvar unit = [0, 1];\n\nexport function deinterpolateLinear(a, b) {\n return (b -= (a = +a))\n ? function(x) { return (x - a) / b; }\n : constant(b);\n}\n\nfunction deinterpolateClamp(deinterpolate) {\n return function(a, b) {\n var d = deinterpolate(a = +a, b = +b);\n return function(x) { return x <= a ? 0 : x >= b ? 1 : d(x); };\n };\n}\n\nfunction reinterpolateClamp(reinterpolate) {\n return function(a, b) {\n var r = reinterpolate(a = +a, b = +b);\n return function(t) { return t <= 0 ? a : t >= 1 ? b : r(t); };\n };\n}\n\nfunction bimap(domain, range, deinterpolate, reinterpolate) {\n var d0 = domain[0], d1 = domain[1], r0 = range[0], r1 = range[1];\n if (d1 < d0) d0 = deinterpolate(d1, d0), r0 = reinterpolate(r1, r0);\n else d0 = deinterpolate(d0, d1), r0 = reinterpolate(r0, r1);\n return function(x) { return r0(d0(x)); };\n}\n\nfunction polymap(domain, range, deinterpolate, reinterpolate) {\n var j = Math.min(domain.length, range.length) - 1,\n d = new Array(j),\n r = new Array(j),\n i = -1;\n\n // Reverse descending domains.\n if (domain[j] < domain[0]) {\n domain = domain.slice().reverse();\n range = range.slice().reverse();\n }\n\n while (++i < j) {\n d[i] = deinterpolate(domain[i], domain[i + 1]);\n r[i] = reinterpolate(range[i], range[i + 1]);\n }\n\n return function(x) {\n var i = bisect(domain, x, 1, j) - 1;\n return r[i](d[i](x));\n };\n}\n\nexport function copy(source, target) {\n return target\n .domain(source.domain())\n .range(source.range())\n .interpolate(source.interpolate())\n .clamp(source.clamp());\n}\n\n// deinterpolate(a, b)(x) takes a domain value x in [a,b] and returns the corresponding parameter t in [0,1].\n// reinterpolate(a, b)(t) takes a parameter t in [0,1] and returns the corresponding domain value x in [a,b].\nexport default function continuous(deinterpolate, reinterpolate) {\n var domain = unit,\n range = unit,\n interpolate = interpolateValue,\n clamp = false,\n piecewise,\n output,\n input;\n\n function rescale() {\n piecewise = Math.min(domain.length, range.length) > 2 ? polymap : bimap;\n output = input = null;\n return scale;\n }\n\n function scale(x) {\n return (output || (output = piecewise(domain, range, clamp ? deinterpolateClamp(deinterpolate) : deinterpolate, interpolate)))(+x);\n }\n\n scale.invert = function(y) {\n return (input || (input = piecewise(range, domain, deinterpolateLinear, clamp ? reinterpolateClamp(reinterpolate) : reinterpolate)))(+y);\n };\n\n scale.domain = function(_) {\n return arguments.length ? (domain = map.call(_, number), rescale()) : domain.slice();\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = slice.call(_), rescale()) : range.slice();\n };\n\n scale.rangeRound = function(_) {\n return range = slice.call(_), interpolate = interpolateRound, rescale();\n };\n\n scale.clamp = function(_) {\n return arguments.length ? (clamp = !!_, rescale()) : clamp;\n };\n\n scale.interpolate = function(_) {\n return arguments.length ? (interpolate = _, rescale()) : interpolate;\n };\n\n return rescale();\n}\n","// Computes the decimal coefficient and exponent of the specified number x with\n// significant digits p, where x is positive and p is in [1, 21] or undefined.\n// For example, formatDecimal(1.23) returns [\"123\", 0].\nexport default function(x, p) {\n if ((i = (x = p ? x.toExponential(p - 1) : x.toExponential()).indexOf(\"e\")) < 0) return null; // NaN, ±Infinity\n var i, coefficient = x.slice(0, i);\n\n // The string returned by toExponential either has the form \\d\\.\\d+e[-+]\\d+\n // (e.g., 1.2e+3) or the form \\de[-+]\\d+ (e.g., 1e+3).\n return [\n coefficient.length > 1 ? coefficient[0] + coefficient.slice(2) : coefficient,\n +x.slice(i + 1)\n ];\n}\n","import formatDecimal from \"./formatDecimal\";\n\nexport default function(x) {\n return x = formatDecimal(Math.abs(x)), x ? x[1] : NaN;\n}\n","// [[fill]align][sign][symbol][0][width][,][.precision][~][type]\nvar re = /^(?:(.)?([<>=^]))?([+\\-( ])?([$#])?(0)?(\\d+)?(,)?(\\.\\d+)?(~)?([a-z%])?$/i;\n\nexport default function formatSpecifier(specifier) {\n return new FormatSpecifier(specifier);\n}\n\nformatSpecifier.prototype = FormatSpecifier.prototype; // instanceof\n\nfunction FormatSpecifier(specifier) {\n if (!(match = re.exec(specifier))) throw new Error(\"invalid format: \" + specifier);\n var match;\n this.fill = match[1] || \" \";\n this.align = match[2] || \">\";\n this.sign = match[3] || \"-\";\n this.symbol = match[4] || \"\";\n this.zero = !!match[5];\n this.width = match[6] && +match[6];\n this.comma = !!match[7];\n this.precision = match[8] && +match[8].slice(1);\n this.trim = !!match[9];\n this.type = match[10] || \"\";\n}\n\nFormatSpecifier.prototype.toString = function() {\n return this.fill\n + this.align\n + this.sign\n + this.symbol\n + (this.zero ? \"0\" : \"\")\n + (this.width == null ? \"\" : Math.max(1, this.width | 0))\n + (this.comma ? \",\" : \"\")\n + (this.precision == null ? \"\" : \".\" + Math.max(0, this.precision | 0))\n + (this.trim ? \"~\" : \"\")\n + this.type;\n};\n","// Trims insignificant zeros, e.g., replaces 1.2000k with 1.2k.\nexport default function(s) {\n out: for (var n = s.length, i = 1, i0 = -1, i1; i < n; ++i) {\n switch (s[i]) {\n case \".\": i0 = i1 = i; break;\n case \"0\": if (i0 === 0) i0 = i; i1 = i; break;\n default: if (i0 > 0) { if (!+s[i]) break out; i0 = 0; } break;\n }\n }\n return i0 > 0 ? s.slice(0, i0) + s.slice(i1 + 1) : s;\n}\n","import formatDecimal from \"./formatDecimal\";\n\nexport var prefixExponent;\n\nexport default function(x, p) {\n var d = formatDecimal(x, p);\n if (!d) return x + \"\";\n var coefficient = d[0],\n exponent = d[1],\n i = exponent - (prefixExponent = Math.max(-8, Math.min(8, Math.floor(exponent / 3))) * 3) + 1,\n n = coefficient.length;\n return i === n ? coefficient\n : i > n ? coefficient + new Array(i - n + 1).join(\"0\")\n : i > 0 ? coefficient.slice(0, i) + \".\" + coefficient.slice(i)\n : \"0.\" + new Array(1 - i).join(\"0\") + formatDecimal(x, Math.max(0, p + i - 1))[0]; // less than 1y!\n}\n","import formatLocale from \"./locale\";\n\nvar locale;\nexport var format;\nexport var formatPrefix;\n\ndefaultLocale({\n decimal: \".\",\n thousands: \",\",\n grouping: [3],\n currency: [\"$\", \"\"]\n});\n\nexport default function defaultLocale(definition) {\n locale = formatLocale(definition);\n format = locale.format;\n formatPrefix = locale.formatPrefix;\n return locale;\n}\n","import formatDecimal from \"./formatDecimal\";\n\nexport default function(x, p) {\n var d = formatDecimal(x, p);\n if (!d) return x + \"\";\n var coefficient = d[0],\n exponent = d[1];\n return exponent < 0 ? \"0.\" + new Array(-exponent).join(\"0\") + coefficient\n : coefficient.length > exponent + 1 ? coefficient.slice(0, exponent + 1) + \".\" + coefficient.slice(exponent + 1)\n : coefficient + new Array(exponent - coefficient.length + 2).join(\"0\");\n}\n","import formatPrefixAuto from \"./formatPrefixAuto\";\nimport formatRounded from \"./formatRounded\";\n\nexport default {\n \"%\": function(x, p) { return (x * 100).toFixed(p); },\n \"b\": function(x) { return Math.round(x).toString(2); },\n \"c\": function(x) { return x + \"\"; },\n \"d\": function(x) { return Math.round(x).toString(10); },\n \"e\": function(x, p) { return x.toExponential(p); },\n \"f\": function(x, p) { return x.toFixed(p); },\n \"g\": function(x, p) { return x.toPrecision(p); },\n \"o\": function(x) { return Math.round(x).toString(8); },\n \"p\": function(x, p) { return formatRounded(x * 100, p); },\n \"r\": formatRounded,\n \"s\": formatPrefixAuto,\n \"X\": function(x) { return Math.round(x).toString(16).toUpperCase(); },\n \"x\": function(x) { return Math.round(x).toString(16); }\n};\n","export default function(x) {\n return x;\n}\n","import exponent from \"./exponent\";\nimport formatGroup from \"./formatGroup\";\nimport formatNumerals from \"./formatNumerals\";\nimport formatSpecifier from \"./formatSpecifier\";\nimport formatTrim from \"./formatTrim\";\nimport formatTypes from \"./formatTypes\";\nimport {prefixExponent} from \"./formatPrefixAuto\";\nimport identity from \"./identity\";\n\nvar prefixes = [\"y\",\"z\",\"a\",\"f\",\"p\",\"n\",\"µ\",\"m\",\"\",\"k\",\"M\",\"G\",\"T\",\"P\",\"E\",\"Z\",\"Y\"];\n\nexport default function(locale) {\n var group = locale.grouping && locale.thousands ? formatGroup(locale.grouping, locale.thousands) : identity,\n currency = locale.currency,\n decimal = locale.decimal,\n numerals = locale.numerals ? formatNumerals(locale.numerals) : identity,\n percent = locale.percent || \"%\";\n\n function newFormat(specifier) {\n specifier = formatSpecifier(specifier);\n\n var fill = specifier.fill,\n align = specifier.align,\n sign = specifier.sign,\n symbol = specifier.symbol,\n zero = specifier.zero,\n width = specifier.width,\n comma = specifier.comma,\n precision = specifier.precision,\n trim = specifier.trim,\n type = specifier.type;\n\n // The \"n\" type is an alias for \",g\".\n if (type === \"n\") comma = true, type = \"g\";\n\n // The \"\" type, and any invalid type, is an alias for \".12~g\".\n else if (!formatTypes[type]) precision == null && (precision = 12), trim = true, type = \"g\";\n\n // If zero fill is specified, padding goes after sign and before digits.\n if (zero || (fill === \"0\" && align === \"=\")) zero = true, fill = \"0\", align = \"=\";\n\n // Compute the prefix and suffix.\n // For SI-prefix, the suffix is lazily computed.\n var prefix = symbol === \"$\" ? currency[0] : symbol === \"#\" && /[boxX]/.test(type) ? \"0\" + type.toLowerCase() : \"\",\n suffix = symbol === \"$\" ? currency[1] : /[%p]/.test(type) ? percent : \"\";\n\n // What format function should we use?\n // Is this an integer type?\n // Can this type generate exponential notation?\n var formatType = formatTypes[type],\n maybeSuffix = /[defgprs%]/.test(type);\n\n // Set the default precision if not specified,\n // or clamp the specified precision to the supported range.\n // For significant precision, it must be in [1, 21].\n // For fixed precision, it must be in [0, 20].\n precision = precision == null ? 6\n : /[gprs]/.test(type) ? Math.max(1, Math.min(21, precision))\n : Math.max(0, Math.min(20, precision));\n\n function format(value) {\n var valuePrefix = prefix,\n valueSuffix = suffix,\n i, n, c;\n\n if (type === \"c\") {\n valueSuffix = formatType(value) + valueSuffix;\n value = \"\";\n } else {\n value = +value;\n\n // Perform the initial formatting.\n var valueNegative = value < 0;\n value = formatType(Math.abs(value), precision);\n\n // Trim insignificant zeros.\n if (trim) value = formatTrim(value);\n\n // If a negative value rounds to zero during formatting, treat as positive.\n if (valueNegative && +value === 0) valueNegative = false;\n\n // Compute the prefix and suffix.\n valuePrefix = (valueNegative ? (sign === \"(\" ? sign : \"-\") : sign === \"-\" || sign === \"(\" ? \"\" : sign) + valuePrefix;\n valueSuffix = (type === \"s\" ? prefixes[8 + prefixExponent / 3] : \"\") + valueSuffix + (valueNegative && sign === \"(\" ? \")\" : \"\");\n\n // Break the formatted value into the integer “value” part that can be\n // grouped, and fractional or exponential “suffix” part that is not.\n if (maybeSuffix) {\n i = -1, n = value.length;\n while (++i < n) {\n if (c = value.charCodeAt(i), 48 > c || c > 57) {\n valueSuffix = (c === 46 ? decimal + value.slice(i + 1) : value.slice(i)) + valueSuffix;\n value = value.slice(0, i);\n break;\n }\n }\n }\n }\n\n // If the fill character is not \"0\", grouping is applied before padding.\n if (comma && !zero) value = group(value, Infinity);\n\n // Compute the padding.\n var length = valuePrefix.length + value.length + valueSuffix.length,\n padding = length < width ? new Array(width - length + 1).join(fill) : \"\";\n\n // If the fill character is \"0\", grouping is applied after padding.\n if (comma && zero) value = group(padding + value, padding.length ? width - valueSuffix.length : Infinity), padding = \"\";\n\n // Reconstruct the final output based on the desired alignment.\n switch (align) {\n case \"<\": value = valuePrefix + value + valueSuffix + padding; break;\n case \"=\": value = valuePrefix + padding + value + valueSuffix; break;\n case \"^\": value = padding.slice(0, length = padding.length >> 1) + valuePrefix + value + valueSuffix + padding.slice(length); break;\n default: value = padding + valuePrefix + value + valueSuffix; break;\n }\n\n return numerals(value);\n }\n\n format.toString = function() {\n return specifier + \"\";\n };\n\n return format;\n }\n\n function formatPrefix(specifier, value) {\n var f = newFormat((specifier = formatSpecifier(specifier), specifier.type = \"f\", specifier)),\n e = Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3,\n k = Math.pow(10, -e),\n prefix = prefixes[8 + e / 3];\n return function(value) {\n return f(k * value) + prefix;\n };\n }\n\n return {\n format: newFormat,\n formatPrefix: formatPrefix\n };\n}\n","export default function(grouping, thousands) {\n return function(value, width) {\n var i = value.length,\n t = [],\n j = 0,\n g = grouping[0],\n length = 0;\n\n while (i > 0 && g > 0) {\n if (length + g + 1 > width) g = Math.max(1, width - length);\n t.push(value.substring(i -= g, i + g));\n if ((length += g + 1) > width) break;\n g = grouping[j = (j + 1) % grouping.length];\n }\n\n return t.reverse().join(thousands);\n };\n}\n","export default function(numerals) {\n return function(value) {\n return value.replace(/[0-9]/g, function(i) {\n return numerals[+i];\n });\n };\n}\n","import exponent from \"./exponent\";\n\nexport default function(step) {\n return Math.max(0, -exponent(Math.abs(step)));\n}\n","import {tickStep} from \"d3-array\";\nimport {format, formatPrefix, formatSpecifier, precisionFixed, precisionPrefix, precisionRound} from \"d3-format\";\n\nexport default function(domain, count, specifier) {\n var start = domain[0],\n stop = domain[domain.length - 1],\n step = tickStep(start, stop, count == null ? 10 : count),\n precision;\n specifier = formatSpecifier(specifier == null ? \",f\" : specifier);\n switch (specifier.type) {\n case \"s\": {\n var value = Math.max(Math.abs(start), Math.abs(stop));\n if (specifier.precision == null && !isNaN(precision = precisionPrefix(step, value))) specifier.precision = precision;\n return formatPrefix(specifier, value);\n }\n case \"\":\n case \"e\":\n case \"g\":\n case \"p\":\n case \"r\": {\n if (specifier.precision == null && !isNaN(precision = precisionRound(step, Math.max(Math.abs(start), Math.abs(stop))))) specifier.precision = precision - (specifier.type === \"e\");\n break;\n }\n case \"f\":\n case \"%\": {\n if (specifier.precision == null && !isNaN(precision = precisionFixed(step))) specifier.precision = precision - (specifier.type === \"%\") * 2;\n break;\n }\n }\n return format(specifier);\n}\n","import exponent from \"./exponent\";\n\nexport default function(step, value) {\n return Math.max(0, Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3 - exponent(Math.abs(step)));\n}\n","import exponent from \"./exponent\";\n\nexport default function(step, max) {\n step = Math.abs(step), max = Math.abs(max) - step;\n return Math.max(0, exponent(max) - exponent(step)) + 1;\n}\n","import {ticks, tickIncrement} from \"d3-array\";\nimport {interpolateNumber as reinterpolate} from \"d3-interpolate\";\nimport {default as continuous, copy, deinterpolateLinear as deinterpolate} from \"./continuous\";\nimport tickFormat from \"./tickFormat\";\n\nexport function linearish(scale) {\n var domain = scale.domain;\n\n scale.ticks = function(count) {\n var d = domain();\n return ticks(d[0], d[d.length - 1], count == null ? 10 : count);\n };\n\n scale.tickFormat = function(count, specifier) {\n return tickFormat(domain(), count, specifier);\n };\n\n scale.nice = function(count) {\n if (count == null) count = 10;\n\n var d = domain(),\n i0 = 0,\n i1 = d.length - 1,\n start = d[i0],\n stop = d[i1],\n step;\n\n if (stop < start) {\n step = start, start = stop, stop = step;\n step = i0, i0 = i1, i1 = step;\n }\n\n step = tickIncrement(start, stop, count);\n\n if (step > 0) {\n start = Math.floor(start / step) * step;\n stop = Math.ceil(stop / step) * step;\n step = tickIncrement(start, stop, count);\n } else if (step < 0) {\n start = Math.ceil(start * step) / step;\n stop = Math.floor(stop * step) / step;\n step = tickIncrement(start, stop, count);\n }\n\n if (step > 0) {\n d[i0] = Math.floor(start / step) * step;\n d[i1] = Math.ceil(stop / step) * step;\n domain(d);\n } else if (step < 0) {\n d[i0] = Math.ceil(start * step) / step;\n d[i1] = Math.floor(stop * step) / step;\n domain(d);\n }\n\n return scale;\n };\n\n return scale;\n}\n\nexport default function linear() {\n var scale = continuous(deinterpolate, reinterpolate);\n\n scale.copy = function() {\n return copy(scale, linear());\n };\n\n return linearish(scale);\n}\n","import {map} from \"./array\";\nimport {linearish} from \"./linear\";\nimport number from \"./number\";\n\nexport default function identity() {\n var domain = [0, 1];\n\n function scale(x) {\n return +x;\n }\n\n scale.invert = scale;\n\n scale.domain = scale.range = function(_) {\n return arguments.length ? (domain = map.call(_, number), scale) : domain.slice();\n };\n\n scale.copy = function() {\n return identity().domain(domain);\n };\n\n return linearish(scale);\n}\n","export default function(domain, interval) {\n domain = domain.slice();\n\n var i0 = 0,\n i1 = domain.length - 1,\n x0 = domain[i0],\n x1 = domain[i1],\n t;\n\n if (x1 < x0) {\n t = i0, i0 = i1, i1 = t;\n t = x0, x0 = x1, x1 = t;\n }\n\n domain[i0] = interval.floor(x0);\n domain[i1] = interval.ceil(x1);\n return domain;\n}\n","import {ticks} from \"d3-array\";\nimport {format} from \"d3-format\";\nimport constant from \"./constant\";\nimport nice from \"./nice\";\nimport {default as continuous, copy} from \"./continuous\";\n\nfunction deinterpolate(a, b) {\n return (b = Math.log(b / a))\n ? function(x) { return Math.log(x / a) / b; }\n : constant(b);\n}\n\nfunction reinterpolate(a, b) {\n return a < 0\n ? function(t) { return -Math.pow(-b, t) * Math.pow(-a, 1 - t); }\n : function(t) { return Math.pow(b, t) * Math.pow(a, 1 - t); };\n}\n\nfunction pow10(x) {\n return isFinite(x) ? +(\"1e\" + x) : x < 0 ? 0 : x;\n}\n\nfunction powp(base) {\n return base === 10 ? pow10\n : base === Math.E ? Math.exp\n : function(x) { return Math.pow(base, x); };\n}\n\nfunction logp(base) {\n return base === Math.E ? Math.log\n : base === 10 && Math.log10\n || base === 2 && Math.log2\n || (base = Math.log(base), function(x) { return Math.log(x) / base; });\n}\n\nfunction reflect(f) {\n return function(x) {\n return -f(-x);\n };\n}\n\nexport default function log() {\n var scale = continuous(deinterpolate, reinterpolate).domain([1, 10]),\n domain = scale.domain,\n base = 10,\n logs = logp(10),\n pows = powp(10);\n\n function rescale() {\n logs = logp(base), pows = powp(base);\n if (domain()[0] < 0) logs = reflect(logs), pows = reflect(pows);\n return scale;\n }\n\n scale.base = function(_) {\n return arguments.length ? (base = +_, rescale()) : base;\n };\n\n scale.domain = function(_) {\n return arguments.length ? (domain(_), rescale()) : domain();\n };\n\n scale.ticks = function(count) {\n var d = domain(),\n u = d[0],\n v = d[d.length - 1],\n r;\n\n if (r = v < u) i = u, u = v, v = i;\n\n var i = logs(u),\n j = logs(v),\n p,\n k,\n t,\n n = count == null ? 10 : +count,\n z = [];\n\n if (!(base % 1) && j - i < n) {\n i = Math.round(i) - 1, j = Math.round(j) + 1;\n if (u > 0) for (; i < j; ++i) {\n for (k = 1, p = pows(i); k < base; ++k) {\n t = p * k;\n if (t < u) continue;\n if (t > v) break;\n z.push(t);\n }\n } else for (; i < j; ++i) {\n for (k = base - 1, p = pows(i); k >= 1; --k) {\n t = p * k;\n if (t < u) continue;\n if (t > v) break;\n z.push(t);\n }\n }\n } else {\n z = ticks(i, j, Math.min(j - i, n)).map(pows);\n }\n\n return r ? z.reverse() : z;\n };\n\n scale.tickFormat = function(count, specifier) {\n if (specifier == null) specifier = base === 10 ? \".0e\" : \",\";\n if (typeof specifier !== \"function\") specifier = format(specifier);\n if (count === Infinity) return specifier;\n if (count == null) count = 10;\n var k = Math.max(1, base * count / scale.ticks().length); // TODO fast estimate?\n return function(d) {\n var i = d / pows(Math.round(logs(d)));\n if (i * base < base - 0.5) i *= base;\n return i <= k ? specifier(d) : \"\";\n };\n };\n\n scale.nice = function() {\n return domain(nice(domain(), {\n floor: function(x) { return pows(Math.floor(logs(x))); },\n ceil: function(x) { return pows(Math.ceil(logs(x))); }\n }));\n };\n\n scale.copy = function() {\n return copy(scale, log().base(base));\n };\n\n return scale;\n}\n","import constant from \"./constant\";\nimport {linearish} from \"./linear\";\nimport {default as continuous, copy} from \"./continuous\";\n\nfunction raise(x, exponent) {\n return x < 0 ? -Math.pow(-x, exponent) : Math.pow(x, exponent);\n}\n\nexport default function pow() {\n var exponent = 1,\n scale = continuous(deinterpolate, reinterpolate),\n domain = scale.domain;\n\n function deinterpolate(a, b) {\n return (b = raise(b, exponent) - (a = raise(a, exponent)))\n ? function(x) { return (raise(x, exponent) - a) / b; }\n : constant(b);\n }\n\n function reinterpolate(a, b) {\n b = raise(b, exponent) - (a = raise(a, exponent));\n return function(t) { return raise(a + b * t, 1 / exponent); };\n }\n\n scale.exponent = function(_) {\n return arguments.length ? (exponent = +_, domain(domain())) : exponent;\n };\n\n scale.copy = function() {\n return copy(scale, pow().exponent(exponent));\n };\n\n return linearish(scale);\n}\n\nexport function sqrt() {\n return pow().exponent(0.5);\n}\n","import {ascending, bisect, quantile as threshold} from \"d3-array\";\nimport {slice} from \"./array\";\n\nexport default function quantile() {\n var domain = [],\n range = [],\n thresholds = [];\n\n function rescale() {\n var i = 0, n = Math.max(1, range.length);\n thresholds = new Array(n - 1);\n while (++i < n) thresholds[i - 1] = threshold(domain, i / n);\n return scale;\n }\n\n function scale(x) {\n if (!isNaN(x = +x)) return range[bisect(thresholds, x)];\n }\n\n scale.invertExtent = function(y) {\n var i = range.indexOf(y);\n return i < 0 ? [NaN, NaN] : [\n i > 0 ? thresholds[i - 1] : domain[0],\n i < thresholds.length ? thresholds[i] : domain[domain.length - 1]\n ];\n };\n\n scale.domain = function(_) {\n if (!arguments.length) return domain.slice();\n domain = [];\n for (var i = 0, n = _.length, d; i < n; ++i) if (d = _[i], d != null && !isNaN(d = +d)) domain.push(d);\n domain.sort(ascending);\n return rescale();\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = slice.call(_), rescale()) : range.slice();\n };\n\n scale.quantiles = function() {\n return thresholds.slice();\n };\n\n scale.copy = function() {\n return quantile()\n .domain(domain)\n .range(range);\n };\n\n return scale;\n}\n","import {bisect} from \"d3-array\";\nimport {slice} from \"./array\";\nimport {linearish} from \"./linear\";\n\nexport default function quantize() {\n var x0 = 0,\n x1 = 1,\n n = 1,\n domain = [0.5],\n range = [0, 1];\n\n function scale(x) {\n if (x <= x) return range[bisect(domain, x, 0, n)];\n }\n\n function rescale() {\n var i = -1;\n domain = new Array(n);\n while (++i < n) domain[i] = ((i + 1) * x1 - (i - n) * x0) / (n + 1);\n return scale;\n }\n\n scale.domain = function(_) {\n return arguments.length ? (x0 = +_[0], x1 = +_[1], rescale()) : [x0, x1];\n };\n\n scale.range = function(_) {\n return arguments.length ? (n = (range = slice.call(_)).length - 1, rescale()) : range.slice();\n };\n\n scale.invertExtent = function(y) {\n var i = range.indexOf(y);\n return i < 0 ? [NaN, NaN]\n : i < 1 ? [x0, domain[0]]\n : i >= n ? [domain[n - 1], x1]\n : [domain[i - 1], domain[i]];\n };\n\n scale.copy = function() {\n return quantize()\n .domain([x0, x1])\n .range(range);\n };\n\n return linearish(scale);\n}\n","import {bisect} from \"d3-array\";\nimport {slice} from \"./array\";\n\nexport default function threshold() {\n var domain = [0.5],\n range = [0, 1],\n n = 1;\n\n function scale(x) {\n if (x <= x) return range[bisect(domain, x, 0, n)];\n }\n\n scale.domain = function(_) {\n return arguments.length ? (domain = slice.call(_), n = Math.min(domain.length, range.length - 1), scale) : domain.slice();\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = slice.call(_), n = Math.min(domain.length, range.length - 1), scale) : range.slice();\n };\n\n scale.invertExtent = function(y) {\n var i = range.indexOf(y);\n return [domain[i - 1], domain[i]];\n };\n\n scale.copy = function() {\n return threshold()\n .domain(domain)\n .range(range);\n };\n\n return scale;\n}\n","var t0 = new Date,\n t1 = new Date;\n\nexport default function newInterval(floori, offseti, count, field) {\n\n function interval(date) {\n return floori(date = new Date(+date)), date;\n }\n\n interval.floor = interval;\n\n interval.ceil = function(date) {\n return floori(date = new Date(date - 1)), offseti(date, 1), floori(date), date;\n };\n\n interval.round = function(date) {\n var d0 = interval(date),\n d1 = interval.ceil(date);\n return date - d0 < d1 - date ? d0 : d1;\n };\n\n interval.offset = function(date, step) {\n return offseti(date = new Date(+date), step == null ? 1 : Math.floor(step)), date;\n };\n\n interval.range = function(start, stop, step) {\n var range = [], previous;\n start = interval.ceil(start);\n step = step == null ? 1 : Math.floor(step);\n if (!(start < stop) || !(step > 0)) return range; // also handles Invalid Date\n do range.push(previous = new Date(+start)), offseti(start, step), floori(start);\n while (previous < start && start < stop);\n return range;\n };\n\n interval.filter = function(test) {\n return newInterval(function(date) {\n if (date >= date) while (floori(date), !test(date)) date.setTime(date - 1);\n }, function(date, step) {\n if (date >= date) {\n if (step < 0) while (++step <= 0) {\n while (offseti(date, -1), !test(date)) {} // eslint-disable-line no-empty\n } else while (--step >= 0) {\n while (offseti(date, +1), !test(date)) {} // eslint-disable-line no-empty\n }\n }\n });\n };\n\n if (count) {\n interval.count = function(start, end) {\n t0.setTime(+start), t1.setTime(+end);\n floori(t0), floori(t1);\n return Math.floor(count(t0, t1));\n };\n\n interval.every = function(step) {\n step = Math.floor(step);\n return !isFinite(step) || !(step > 0) ? null\n : !(step > 1) ? interval\n : interval.filter(field\n ? function(d) { return field(d) % step === 0; }\n : function(d) { return interval.count(0, d) % step === 0; });\n };\n }\n\n return interval;\n}\n","import interval from \"./interval\";\n\nvar millisecond = interval(function() {\n // noop\n}, function(date, step) {\n date.setTime(+date + step);\n}, function(start, end) {\n return end - start;\n});\n\n// An optimized implementation for this simple case.\nmillisecond.every = function(k) {\n k = Math.floor(k);\n if (!isFinite(k) || !(k > 0)) return null;\n if (!(k > 1)) return millisecond;\n return interval(function(date) {\n date.setTime(Math.floor(date / k) * k);\n }, function(date, step) {\n date.setTime(+date + step * k);\n }, function(start, end) {\n return (end - start) / k;\n });\n};\n\nexport default millisecond;\nexport var milliseconds = millisecond.range;\n","export var durationSecond = 1e3;\nexport var durationMinute = 6e4;\nexport var durationHour = 36e5;\nexport var durationDay = 864e5;\nexport var durationWeek = 6048e5;\n","import interval from \"./interval\";\nimport {durationSecond} from \"./duration\";\n\nvar second = interval(function(date) {\n date.setTime(Math.floor(date / durationSecond) * durationSecond);\n}, function(date, step) {\n date.setTime(+date + step * durationSecond);\n}, function(start, end) {\n return (end - start) / durationSecond;\n}, function(date) {\n return date.getUTCSeconds();\n});\n\nexport default second;\nexport var seconds = second.range;\n","import interval from \"./interval\";\nimport {durationMinute} from \"./duration\";\n\nvar minute = interval(function(date) {\n date.setTime(Math.floor(date / durationMinute) * durationMinute);\n}, function(date, step) {\n date.setTime(+date + step * durationMinute);\n}, function(start, end) {\n return (end - start) / durationMinute;\n}, function(date) {\n return date.getMinutes();\n});\n\nexport default minute;\nexport var minutes = minute.range;\n","import interval from \"./interval\";\nimport {durationHour, durationMinute} from \"./duration\";\n\nvar hour = interval(function(date) {\n var offset = date.getTimezoneOffset() * durationMinute % durationHour;\n if (offset < 0) offset += durationHour;\n date.setTime(Math.floor((+date - offset) / durationHour) * durationHour + offset);\n}, function(date, step) {\n date.setTime(+date + step * durationHour);\n}, function(start, end) {\n return (end - start) / durationHour;\n}, function(date) {\n return date.getHours();\n});\n\nexport default hour;\nexport var hours = hour.range;\n","import interval from \"./interval\";\nimport {durationDay, durationMinute} from \"./duration\";\n\nvar day = interval(function(date) {\n date.setHours(0, 0, 0, 0);\n}, function(date, step) {\n date.setDate(date.getDate() + step);\n}, function(start, end) {\n return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationDay;\n}, function(date) {\n return date.getDate() - 1;\n});\n\nexport default day;\nexport var days = day.range;\n","import interval from \"./interval\";\nimport {durationMinute, durationWeek} from \"./duration\";\n\nfunction weekday(i) {\n return interval(function(date) {\n date.setDate(date.getDate() - (date.getDay() + 7 - i) % 7);\n date.setHours(0, 0, 0, 0);\n }, function(date, step) {\n date.setDate(date.getDate() + step * 7);\n }, function(start, end) {\n return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationWeek;\n });\n}\n\nexport var sunday = weekday(0);\nexport var monday = weekday(1);\nexport var tuesday = weekday(2);\nexport var wednesday = weekday(3);\nexport var thursday = weekday(4);\nexport var friday = weekday(5);\nexport var saturday = weekday(6);\n\nexport var sundays = sunday.range;\nexport var mondays = monday.range;\nexport var tuesdays = tuesday.range;\nexport var wednesdays = wednesday.range;\nexport var thursdays = thursday.range;\nexport var fridays = friday.range;\nexport var saturdays = saturday.range;\n","import interval from \"./interval\";\n\nvar month = interval(function(date) {\n date.setDate(1);\n date.setHours(0, 0, 0, 0);\n}, function(date, step) {\n date.setMonth(date.getMonth() + step);\n}, function(start, end) {\n return end.getMonth() - start.getMonth() + (end.getFullYear() - start.getFullYear()) * 12;\n}, function(date) {\n return date.getMonth();\n});\n\nexport default month;\nexport var months = month.range;\n","import interval from \"./interval\";\n\nvar year = interval(function(date) {\n date.setMonth(0, 1);\n date.setHours(0, 0, 0, 0);\n}, function(date, step) {\n date.setFullYear(date.getFullYear() + step);\n}, function(start, end) {\n return end.getFullYear() - start.getFullYear();\n}, function(date) {\n return date.getFullYear();\n});\n\n// An optimized implementation for this simple case.\nyear.every = function(k) {\n return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : interval(function(date) {\n date.setFullYear(Math.floor(date.getFullYear() / k) * k);\n date.setMonth(0, 1);\n date.setHours(0, 0, 0, 0);\n }, function(date, step) {\n date.setFullYear(date.getFullYear() + step * k);\n });\n};\n\nexport default year;\nexport var years = year.range;\n","import interval from \"./interval\";\nimport {durationMinute} from \"./duration\";\n\nvar utcMinute = interval(function(date) {\n date.setUTCSeconds(0, 0);\n}, function(date, step) {\n date.setTime(+date + step * durationMinute);\n}, function(start, end) {\n return (end - start) / durationMinute;\n}, function(date) {\n return date.getUTCMinutes();\n});\n\nexport default utcMinute;\nexport var utcMinutes = utcMinute.range;\n","import interval from \"./interval\";\nimport {durationHour} from \"./duration\";\n\nvar utcHour = interval(function(date) {\n date.setUTCMinutes(0, 0, 0);\n}, function(date, step) {\n date.setTime(+date + step * durationHour);\n}, function(start, end) {\n return (end - start) / durationHour;\n}, function(date) {\n return date.getUTCHours();\n});\n\nexport default utcHour;\nexport var utcHours = utcHour.range;\n","import interval from \"./interval\";\nimport {durationDay} from \"./duration\";\n\nvar utcDay = interval(function(date) {\n date.setUTCHours(0, 0, 0, 0);\n}, function(date, step) {\n date.setUTCDate(date.getUTCDate() + step);\n}, function(start, end) {\n return (end - start) / durationDay;\n}, function(date) {\n return date.getUTCDate() - 1;\n});\n\nexport default utcDay;\nexport var utcDays = utcDay.range;\n","import interval from \"./interval\";\nimport {durationWeek} from \"./duration\";\n\nfunction utcWeekday(i) {\n return interval(function(date) {\n date.setUTCDate(date.getUTCDate() - (date.getUTCDay() + 7 - i) % 7);\n date.setUTCHours(0, 0, 0, 0);\n }, function(date, step) {\n date.setUTCDate(date.getUTCDate() + step * 7);\n }, function(start, end) {\n return (end - start) / durationWeek;\n });\n}\n\nexport var utcSunday = utcWeekday(0);\nexport var utcMonday = utcWeekday(1);\nexport var utcTuesday = utcWeekday(2);\nexport var utcWednesday = utcWeekday(3);\nexport var utcThursday = utcWeekday(4);\nexport var utcFriday = utcWeekday(5);\nexport var utcSaturday = utcWeekday(6);\n\nexport var utcSundays = utcSunday.range;\nexport var utcMondays = utcMonday.range;\nexport var utcTuesdays = utcTuesday.range;\nexport var utcWednesdays = utcWednesday.range;\nexport var utcThursdays = utcThursday.range;\nexport var utcFridays = utcFriday.range;\nexport var utcSaturdays = utcSaturday.range;\n","import interval from \"./interval\";\n\nvar utcMonth = interval(function(date) {\n date.setUTCDate(1);\n date.setUTCHours(0, 0, 0, 0);\n}, function(date, step) {\n date.setUTCMonth(date.getUTCMonth() + step);\n}, function(start, end) {\n return end.getUTCMonth() - start.getUTCMonth() + (end.getUTCFullYear() - start.getUTCFullYear()) * 12;\n}, function(date) {\n return date.getUTCMonth();\n});\n\nexport default utcMonth;\nexport var utcMonths = utcMonth.range;\n","import interval from \"./interval\";\n\nvar utcYear = interval(function(date) {\n date.setUTCMonth(0, 1);\n date.setUTCHours(0, 0, 0, 0);\n}, function(date, step) {\n date.setUTCFullYear(date.getUTCFullYear() + step);\n}, function(start, end) {\n return end.getUTCFullYear() - start.getUTCFullYear();\n}, function(date) {\n return date.getUTCFullYear();\n});\n\n// An optimized implementation for this simple case.\nutcYear.every = function(k) {\n return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : interval(function(date) {\n date.setUTCFullYear(Math.floor(date.getUTCFullYear() / k) * k);\n date.setUTCMonth(0, 1);\n date.setUTCHours(0, 0, 0, 0);\n }, function(date, step) {\n date.setUTCFullYear(date.getUTCFullYear() + step * k);\n });\n};\n\nexport default utcYear;\nexport var utcYears = utcYear.range;\n","import {\n timeDay,\n timeSunday,\n timeMonday,\n timeThursday,\n timeYear,\n utcDay,\n utcSunday,\n utcMonday,\n utcThursday,\n utcYear\n} from \"d3-time\";\n\nfunction localDate(d) {\n if (0 <= d.y && d.y < 100) {\n var date = new Date(-1, d.m, d.d, d.H, d.M, d.S, d.L);\n date.setFullYear(d.y);\n return date;\n }\n return new Date(d.y, d.m, d.d, d.H, d.M, d.S, d.L);\n}\n\nfunction utcDate(d) {\n if (0 <= d.y && d.y < 100) {\n var date = new Date(Date.UTC(-1, d.m, d.d, d.H, d.M, d.S, d.L));\n date.setUTCFullYear(d.y);\n return date;\n }\n return new Date(Date.UTC(d.y, d.m, d.d, d.H, d.M, d.S, d.L));\n}\n\nfunction newYear(y) {\n return {y: y, m: 0, d: 1, H: 0, M: 0, S: 0, L: 0};\n}\n\nexport default function formatLocale(locale) {\n var locale_dateTime = locale.dateTime,\n locale_date = locale.date,\n locale_time = locale.time,\n locale_periods = locale.periods,\n locale_weekdays = locale.days,\n locale_shortWeekdays = locale.shortDays,\n locale_months = locale.months,\n locale_shortMonths = locale.shortMonths;\n\n var periodRe = formatRe(locale_periods),\n periodLookup = formatLookup(locale_periods),\n weekdayRe = formatRe(locale_weekdays),\n weekdayLookup = formatLookup(locale_weekdays),\n shortWeekdayRe = formatRe(locale_shortWeekdays),\n shortWeekdayLookup = formatLookup(locale_shortWeekdays),\n monthRe = formatRe(locale_months),\n monthLookup = formatLookup(locale_months),\n shortMonthRe = formatRe(locale_shortMonths),\n shortMonthLookup = formatLookup(locale_shortMonths);\n\n var formats = {\n \"a\": formatShortWeekday,\n \"A\": formatWeekday,\n \"b\": formatShortMonth,\n \"B\": formatMonth,\n \"c\": null,\n \"d\": formatDayOfMonth,\n \"e\": formatDayOfMonth,\n \"f\": formatMicroseconds,\n \"H\": formatHour24,\n \"I\": formatHour12,\n \"j\": formatDayOfYear,\n \"L\": formatMilliseconds,\n \"m\": formatMonthNumber,\n \"M\": formatMinutes,\n \"p\": formatPeriod,\n \"Q\": formatUnixTimestamp,\n \"s\": formatUnixTimestampSeconds,\n \"S\": formatSeconds,\n \"u\": formatWeekdayNumberMonday,\n \"U\": formatWeekNumberSunday,\n \"V\": formatWeekNumberISO,\n \"w\": formatWeekdayNumberSunday,\n \"W\": formatWeekNumberMonday,\n \"x\": null,\n \"X\": null,\n \"y\": formatYear,\n \"Y\": formatFullYear,\n \"Z\": formatZone,\n \"%\": formatLiteralPercent\n };\n\n var utcFormats = {\n \"a\": formatUTCShortWeekday,\n \"A\": formatUTCWeekday,\n \"b\": formatUTCShortMonth,\n \"B\": formatUTCMonth,\n \"c\": null,\n \"d\": formatUTCDayOfMonth,\n \"e\": formatUTCDayOfMonth,\n \"f\": formatUTCMicroseconds,\n \"H\": formatUTCHour24,\n \"I\": formatUTCHour12,\n \"j\": formatUTCDayOfYear,\n \"L\": formatUTCMilliseconds,\n \"m\": formatUTCMonthNumber,\n \"M\": formatUTCMinutes,\n \"p\": formatUTCPeriod,\n \"Q\": formatUnixTimestamp,\n \"s\": formatUnixTimestampSeconds,\n \"S\": formatUTCSeconds,\n \"u\": formatUTCWeekdayNumberMonday,\n \"U\": formatUTCWeekNumberSunday,\n \"V\": formatUTCWeekNumberISO,\n \"w\": formatUTCWeekdayNumberSunday,\n \"W\": formatUTCWeekNumberMonday,\n \"x\": null,\n \"X\": null,\n \"y\": formatUTCYear,\n \"Y\": formatUTCFullYear,\n \"Z\": formatUTCZone,\n \"%\": formatLiteralPercent\n };\n\n var parses = {\n \"a\": parseShortWeekday,\n \"A\": parseWeekday,\n \"b\": parseShortMonth,\n \"B\": parseMonth,\n \"c\": parseLocaleDateTime,\n \"d\": parseDayOfMonth,\n \"e\": parseDayOfMonth,\n \"f\": parseMicroseconds,\n \"H\": parseHour24,\n \"I\": parseHour24,\n \"j\": parseDayOfYear,\n \"L\": parseMilliseconds,\n \"m\": parseMonthNumber,\n \"M\": parseMinutes,\n \"p\": parsePeriod,\n \"Q\": parseUnixTimestamp,\n \"s\": parseUnixTimestampSeconds,\n \"S\": parseSeconds,\n \"u\": parseWeekdayNumberMonday,\n \"U\": parseWeekNumberSunday,\n \"V\": parseWeekNumberISO,\n \"w\": parseWeekdayNumberSunday,\n \"W\": parseWeekNumberMonday,\n \"x\": parseLocaleDate,\n \"X\": parseLocaleTime,\n \"y\": parseYear,\n \"Y\": parseFullYear,\n \"Z\": parseZone,\n \"%\": parseLiteralPercent\n };\n\n // These recursive directive definitions must be deferred.\n formats.x = newFormat(locale_date, formats);\n formats.X = newFormat(locale_time, formats);\n formats.c = newFormat(locale_dateTime, formats);\n utcFormats.x = newFormat(locale_date, utcFormats);\n utcFormats.X = newFormat(locale_time, utcFormats);\n utcFormats.c = newFormat(locale_dateTime, utcFormats);\n\n function newFormat(specifier, formats) {\n return function(date) {\n var string = [],\n i = -1,\n j = 0,\n n = specifier.length,\n c,\n pad,\n format;\n\n if (!(date instanceof Date)) date = new Date(+date);\n\n while (++i < n) {\n if (specifier.charCodeAt(i) === 37) {\n string.push(specifier.slice(j, i));\n if ((pad = pads[c = specifier.charAt(++i)]) != null) c = specifier.charAt(++i);\n else pad = c === \"e\" ? \" \" : \"0\";\n if (format = formats[c]) c = format(date, pad);\n string.push(c);\n j = i + 1;\n }\n }\n\n string.push(specifier.slice(j, i));\n return string.join(\"\");\n };\n }\n\n function newParse(specifier, newDate) {\n return function(string) {\n var d = newYear(1900),\n i = parseSpecifier(d, specifier, string += \"\", 0),\n week, day;\n if (i != string.length) return null;\n\n // If a UNIX timestamp is specified, return it.\n if (\"Q\" in d) return new Date(d.Q);\n\n // The am-pm flag is 0 for AM, and 1 for PM.\n if (\"p\" in d) d.H = d.H % 12 + d.p * 12;\n\n // Convert day-of-week and week-of-year to day-of-year.\n if (\"V\" in d) {\n if (d.V < 1 || d.V > 53) return null;\n if (!(\"w\" in d)) d.w = 1;\n if (\"Z\" in d) {\n week = utcDate(newYear(d.y)), day = week.getUTCDay();\n week = day > 4 || day === 0 ? utcMonday.ceil(week) : utcMonday(week);\n week = utcDay.offset(week, (d.V - 1) * 7);\n d.y = week.getUTCFullYear();\n d.m = week.getUTCMonth();\n d.d = week.getUTCDate() + (d.w + 6) % 7;\n } else {\n week = newDate(newYear(d.y)), day = week.getDay();\n week = day > 4 || day === 0 ? timeMonday.ceil(week) : timeMonday(week);\n week = timeDay.offset(week, (d.V - 1) * 7);\n d.y = week.getFullYear();\n d.m = week.getMonth();\n d.d = week.getDate() + (d.w + 6) % 7;\n }\n } else if (\"W\" in d || \"U\" in d) {\n if (!(\"w\" in d)) d.w = \"u\" in d ? d.u % 7 : \"W\" in d ? 1 : 0;\n day = \"Z\" in d ? utcDate(newYear(d.y)).getUTCDay() : newDate(newYear(d.y)).getDay();\n d.m = 0;\n d.d = \"W\" in d ? (d.w + 6) % 7 + d.W * 7 - (day + 5) % 7 : d.w + d.U * 7 - (day + 6) % 7;\n }\n\n // If a time zone is specified, all fields are interpreted as UTC and then\n // offset according to the specified time zone.\n if (\"Z\" in d) {\n d.H += d.Z / 100 | 0;\n d.M += d.Z % 100;\n return utcDate(d);\n }\n\n // Otherwise, all fields are in local time.\n return newDate(d);\n };\n }\n\n function parseSpecifier(d, specifier, string, j) {\n var i = 0,\n n = specifier.length,\n m = string.length,\n c,\n parse;\n\n while (i < n) {\n if (j >= m) return -1;\n c = specifier.charCodeAt(i++);\n if (c === 37) {\n c = specifier.charAt(i++);\n parse = parses[c in pads ? specifier.charAt(i++) : c];\n if (!parse || ((j = parse(d, string, j)) < 0)) return -1;\n } else if (c != string.charCodeAt(j++)) {\n return -1;\n }\n }\n\n return j;\n }\n\n function parsePeriod(d, string, i) {\n var n = periodRe.exec(string.slice(i));\n return n ? (d.p = periodLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n }\n\n function parseShortWeekday(d, string, i) {\n var n = shortWeekdayRe.exec(string.slice(i));\n return n ? (d.w = shortWeekdayLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n }\n\n function parseWeekday(d, string, i) {\n var n = weekdayRe.exec(string.slice(i));\n return n ? (d.w = weekdayLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n }\n\n function parseShortMonth(d, string, i) {\n var n = shortMonthRe.exec(string.slice(i));\n return n ? (d.m = shortMonthLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n }\n\n function parseMonth(d, string, i) {\n var n = monthRe.exec(string.slice(i));\n return n ? (d.m = monthLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n }\n\n function parseLocaleDateTime(d, string, i) {\n return parseSpecifier(d, locale_dateTime, string, i);\n }\n\n function parseLocaleDate(d, string, i) {\n return parseSpecifier(d, locale_date, string, i);\n }\n\n function parseLocaleTime(d, string, i) {\n return parseSpecifier(d, locale_time, string, i);\n }\n\n function formatShortWeekday(d) {\n return locale_shortWeekdays[d.getDay()];\n }\n\n function formatWeekday(d) {\n return locale_weekdays[d.getDay()];\n }\n\n function formatShortMonth(d) {\n return locale_shortMonths[d.getMonth()];\n }\n\n function formatMonth(d) {\n return locale_months[d.getMonth()];\n }\n\n function formatPeriod(d) {\n return locale_periods[+(d.getHours() >= 12)];\n }\n\n function formatUTCShortWeekday(d) {\n return locale_shortWeekdays[d.getUTCDay()];\n }\n\n function formatUTCWeekday(d) {\n return locale_weekdays[d.getUTCDay()];\n }\n\n function formatUTCShortMonth(d) {\n return locale_shortMonths[d.getUTCMonth()];\n }\n\n function formatUTCMonth(d) {\n return locale_months[d.getUTCMonth()];\n }\n\n function formatUTCPeriod(d) {\n return locale_periods[+(d.getUTCHours() >= 12)];\n }\n\n return {\n format: function(specifier) {\n var f = newFormat(specifier += \"\", formats);\n f.toString = function() { return specifier; };\n return f;\n },\n parse: function(specifier) {\n var p = newParse(specifier += \"\", localDate);\n p.toString = function() { return specifier; };\n return p;\n },\n utcFormat: function(specifier) {\n var f = newFormat(specifier += \"\", utcFormats);\n f.toString = function() { return specifier; };\n return f;\n },\n utcParse: function(specifier) {\n var p = newParse(specifier, utcDate);\n p.toString = function() { return specifier; };\n return p;\n }\n };\n}\n\nvar pads = {\"-\": \"\", \"_\": \" \", \"0\": \"0\"},\n numberRe = /^\\s*\\d+/, // note: ignores next directive\n percentRe = /^%/,\n requoteRe = /[\\\\^$*+?|[\\]().{}]/g;\n\nfunction pad(value, fill, width) {\n var sign = value < 0 ? \"-\" : \"\",\n string = (sign ? -value : value) + \"\",\n length = string.length;\n return sign + (length < width ? new Array(width - length + 1).join(fill) + string : string);\n}\n\nfunction requote(s) {\n return s.replace(requoteRe, \"\\\\$&\");\n}\n\nfunction formatRe(names) {\n return new RegExp(\"^(?:\" + names.map(requote).join(\"|\") + \")\", \"i\");\n}\n\nfunction formatLookup(names) {\n var map = {}, i = -1, n = names.length;\n while (++i < n) map[names[i].toLowerCase()] = i;\n return map;\n}\n\nfunction parseWeekdayNumberSunday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 1));\n return n ? (d.w = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekdayNumberMonday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 1));\n return n ? (d.u = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberSunday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.U = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberISO(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.V = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberMonday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.W = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseFullYear(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 4));\n return n ? (d.y = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseYear(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.y = +n[0] + (+n[0] > 68 ? 1900 : 2000), i + n[0].length) : -1;\n}\n\nfunction parseZone(d, string, i) {\n var n = /^(Z)|([+-]\\d\\d)(?::?(\\d\\d))?/.exec(string.slice(i, i + 6));\n return n ? (d.Z = n[1] ? 0 : -(n[2] + (n[3] || \"00\")), i + n[0].length) : -1;\n}\n\nfunction parseMonthNumber(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.m = n[0] - 1, i + n[0].length) : -1;\n}\n\nfunction parseDayOfMonth(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.d = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseDayOfYear(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 3));\n return n ? (d.m = 0, d.d = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseHour24(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.H = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseMinutes(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.M = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseSeconds(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.S = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseMilliseconds(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 3));\n return n ? (d.L = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseMicroseconds(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 6));\n return n ? (d.L = Math.floor(n[0] / 1000), i + n[0].length) : -1;\n}\n\nfunction parseLiteralPercent(d, string, i) {\n var n = percentRe.exec(string.slice(i, i + 1));\n return n ? i + n[0].length : -1;\n}\n\nfunction parseUnixTimestamp(d, string, i) {\n var n = numberRe.exec(string.slice(i));\n return n ? (d.Q = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseUnixTimestampSeconds(d, string, i) {\n var n = numberRe.exec(string.slice(i));\n return n ? (d.Q = (+n[0]) * 1000, i + n[0].length) : -1;\n}\n\nfunction formatDayOfMonth(d, p) {\n return pad(d.getDate(), p, 2);\n}\n\nfunction formatHour24(d, p) {\n return pad(d.getHours(), p, 2);\n}\n\nfunction formatHour12(d, p) {\n return pad(d.getHours() % 12 || 12, p, 2);\n}\n\nfunction formatDayOfYear(d, p) {\n return pad(1 + timeDay.count(timeYear(d), d), p, 3);\n}\n\nfunction formatMilliseconds(d, p) {\n return pad(d.getMilliseconds(), p, 3);\n}\n\nfunction formatMicroseconds(d, p) {\n return formatMilliseconds(d, p) + \"000\";\n}\n\nfunction formatMonthNumber(d, p) {\n return pad(d.getMonth() + 1, p, 2);\n}\n\nfunction formatMinutes(d, p) {\n return pad(d.getMinutes(), p, 2);\n}\n\nfunction formatSeconds(d, p) {\n return pad(d.getSeconds(), p, 2);\n}\n\nfunction formatWeekdayNumberMonday(d) {\n var day = d.getDay();\n return day === 0 ? 7 : day;\n}\n\nfunction formatWeekNumberSunday(d, p) {\n return pad(timeSunday.count(timeYear(d), d), p, 2);\n}\n\nfunction formatWeekNumberISO(d, p) {\n var day = d.getDay();\n d = (day >= 4 || day === 0) ? timeThursday(d) : timeThursday.ceil(d);\n return pad(timeThursday.count(timeYear(d), d) + (timeYear(d).getDay() === 4), p, 2);\n}\n\nfunction formatWeekdayNumberSunday(d) {\n return d.getDay();\n}\n\nfunction formatWeekNumberMonday(d, p) {\n return pad(timeMonday.count(timeYear(d), d), p, 2);\n}\n\nfunction formatYear(d, p) {\n return pad(d.getFullYear() % 100, p, 2);\n}\n\nfunction formatFullYear(d, p) {\n return pad(d.getFullYear() % 10000, p, 4);\n}\n\nfunction formatZone(d) {\n var z = d.getTimezoneOffset();\n return (z > 0 ? \"-\" : (z *= -1, \"+\"))\n + pad(z / 60 | 0, \"0\", 2)\n + pad(z % 60, \"0\", 2);\n}\n\nfunction formatUTCDayOfMonth(d, p) {\n return pad(d.getUTCDate(), p, 2);\n}\n\nfunction formatUTCHour24(d, p) {\n return pad(d.getUTCHours(), p, 2);\n}\n\nfunction formatUTCHour12(d, p) {\n return pad(d.getUTCHours() % 12 || 12, p, 2);\n}\n\nfunction formatUTCDayOfYear(d, p) {\n return pad(1 + utcDay.count(utcYear(d), d), p, 3);\n}\n\nfunction formatUTCMilliseconds(d, p) {\n return pad(d.getUTCMilliseconds(), p, 3);\n}\n\nfunction formatUTCMicroseconds(d, p) {\n return formatUTCMilliseconds(d, p) + \"000\";\n}\n\nfunction formatUTCMonthNumber(d, p) {\n return pad(d.getUTCMonth() + 1, p, 2);\n}\n\nfunction formatUTCMinutes(d, p) {\n return pad(d.getUTCMinutes(), p, 2);\n}\n\nfunction formatUTCSeconds(d, p) {\n return pad(d.getUTCSeconds(), p, 2);\n}\n\nfunction formatUTCWeekdayNumberMonday(d) {\n var dow = d.getUTCDay();\n return dow === 0 ? 7 : dow;\n}\n\nfunction formatUTCWeekNumberSunday(d, p) {\n return pad(utcSunday.count(utcYear(d), d), p, 2);\n}\n\nfunction formatUTCWeekNumberISO(d, p) {\n var day = d.getUTCDay();\n d = (day >= 4 || day === 0) ? utcThursday(d) : utcThursday.ceil(d);\n return pad(utcThursday.count(utcYear(d), d) + (utcYear(d).getUTCDay() === 4), p, 2);\n}\n\nfunction formatUTCWeekdayNumberSunday(d) {\n return d.getUTCDay();\n}\n\nfunction formatUTCWeekNumberMonday(d, p) {\n return pad(utcMonday.count(utcYear(d), d), p, 2);\n}\n\nfunction formatUTCYear(d, p) {\n return pad(d.getUTCFullYear() % 100, p, 2);\n}\n\nfunction formatUTCFullYear(d, p) {\n return pad(d.getUTCFullYear() % 10000, p, 4);\n}\n\nfunction formatUTCZone() {\n return \"+0000\";\n}\n\nfunction formatLiteralPercent() {\n return \"%\";\n}\n\nfunction formatUnixTimestamp(d) {\n return +d;\n}\n\nfunction formatUnixTimestampSeconds(d) {\n return Math.floor(+d / 1000);\n}\n","import formatLocale from \"./locale\";\n\nvar locale;\nexport var timeFormat;\nexport var timeParse;\nexport var utcFormat;\nexport var utcParse;\n\ndefaultLocale({\n dateTime: \"%x, %X\",\n date: \"%-m/%-d/%Y\",\n time: \"%-I:%M:%S %p\",\n periods: [\"AM\", \"PM\"],\n days: [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"],\n shortDays: [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"],\n months: [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"],\n shortMonths: [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"]\n});\n\nexport default function defaultLocale(definition) {\n locale = formatLocale(definition);\n timeFormat = locale.format;\n timeParse = locale.parse;\n utcFormat = locale.utcFormat;\n utcParse = locale.utcParse;\n return locale;\n}\n","import {utcFormat} from \"./defaultLocale\";\n\nexport var isoSpecifier = \"%Y-%m-%dT%H:%M:%S.%LZ\";\n\nfunction formatIsoNative(date) {\n return date.toISOString();\n}\n\nvar formatIso = Date.prototype.toISOString\n ? formatIsoNative\n : utcFormat(isoSpecifier);\n\nexport default formatIso;\n","import {isoSpecifier} from \"./isoFormat\";\nimport {utcParse} from \"./defaultLocale\";\n\nfunction parseIsoNative(string) {\n var date = new Date(string);\n return isNaN(date) ? null : date;\n}\n\nvar parseIso = +new Date(\"2000-01-01T00:00:00.000Z\")\n ? parseIsoNative\n : utcParse(isoSpecifier);\n\nexport default parseIso;\n","import {bisector, tickStep} from \"d3-array\";\nimport {interpolateNumber as reinterpolate} from \"d3-interpolate\";\nimport {timeYear, timeMonth, timeWeek, timeDay, timeHour, timeMinute, timeSecond, timeMillisecond} from \"d3-time\";\nimport {timeFormat} from \"d3-time-format\";\nimport {map} from \"./array\";\nimport {default as continuous, copy, deinterpolateLinear as deinterpolate} from \"./continuous\";\nimport nice from \"./nice\";\n\nvar durationSecond = 1000,\n durationMinute = durationSecond * 60,\n durationHour = durationMinute * 60,\n durationDay = durationHour * 24,\n durationWeek = durationDay * 7,\n durationMonth = durationDay * 30,\n durationYear = durationDay * 365;\n\nfunction date(t) {\n return new Date(t);\n}\n\nfunction number(t) {\n return t instanceof Date ? +t : +new Date(+t);\n}\n\nexport function calendar(year, month, week, day, hour, minute, second, millisecond, format) {\n var scale = continuous(deinterpolate, reinterpolate),\n invert = scale.invert,\n domain = scale.domain;\n\n var formatMillisecond = format(\".%L\"),\n formatSecond = format(\":%S\"),\n formatMinute = format(\"%I:%M\"),\n formatHour = format(\"%I %p\"),\n formatDay = format(\"%a %d\"),\n formatWeek = format(\"%b %d\"),\n formatMonth = format(\"%B\"),\n formatYear = format(\"%Y\");\n\n var tickIntervals = [\n [second, 1, durationSecond],\n [second, 5, 5 * durationSecond],\n [second, 15, 15 * durationSecond],\n [second, 30, 30 * durationSecond],\n [minute, 1, durationMinute],\n [minute, 5, 5 * durationMinute],\n [minute, 15, 15 * durationMinute],\n [minute, 30, 30 * durationMinute],\n [ hour, 1, durationHour ],\n [ hour, 3, 3 * durationHour ],\n [ hour, 6, 6 * durationHour ],\n [ hour, 12, 12 * durationHour ],\n [ day, 1, durationDay ],\n [ day, 2, 2 * durationDay ],\n [ week, 1, durationWeek ],\n [ month, 1, durationMonth ],\n [ month, 3, 3 * durationMonth ],\n [ year, 1, durationYear ]\n ];\n\n function tickFormat(date) {\n return (second(date) < date ? formatMillisecond\n : minute(date) < date ? formatSecond\n : hour(date) < date ? formatMinute\n : day(date) < date ? formatHour\n : month(date) < date ? (week(date) < date ? formatDay : formatWeek)\n : year(date) < date ? formatMonth\n : formatYear)(date);\n }\n\n function tickInterval(interval, start, stop, step) {\n if (interval == null) interval = 10;\n\n // If a desired tick count is specified, pick a reasonable tick interval\n // based on the extent of the domain and a rough estimate of tick size.\n // Otherwise, assume interval is already a time interval and use it.\n if (typeof interval === \"number\") {\n var target = Math.abs(stop - start) / interval,\n i = bisector(function(i) { return i[2]; }).right(tickIntervals, target);\n if (i === tickIntervals.length) {\n step = tickStep(start / durationYear, stop / durationYear, interval);\n interval = year;\n } else if (i) {\n i = tickIntervals[target / tickIntervals[i - 1][2] < tickIntervals[i][2] / target ? i - 1 : i];\n step = i[1];\n interval = i[0];\n } else {\n step = Math.max(tickStep(start, stop, interval), 1);\n interval = millisecond;\n }\n }\n\n return step == null ? interval : interval.every(step);\n }\n\n scale.invert = function(y) {\n return new Date(invert(y));\n };\n\n scale.domain = function(_) {\n return arguments.length ? domain(map.call(_, number)) : domain().map(date);\n };\n\n scale.ticks = function(interval, step) {\n var d = domain(),\n t0 = d[0],\n t1 = d[d.length - 1],\n r = t1 < t0,\n t;\n if (r) t = t0, t0 = t1, t1 = t;\n t = tickInterval(interval, t0, t1, step);\n t = t ? t.range(t0, t1 + 1) : []; // inclusive stop\n return r ? t.reverse() : t;\n };\n\n scale.tickFormat = function(count, specifier) {\n return specifier == null ? tickFormat : format(specifier);\n };\n\n scale.nice = function(interval, step) {\n var d = domain();\n return (interval = tickInterval(interval, d[0], d[d.length - 1], step))\n ? domain(nice(d, interval))\n : scale;\n };\n\n scale.copy = function() {\n return copy(scale, calendar(year, month, week, day, hour, minute, second, millisecond, format));\n };\n\n return scale;\n}\n\nexport default function() {\n return calendar(timeYear, timeMonth, timeWeek, timeDay, timeHour, timeMinute, timeSecond, timeMillisecond, timeFormat).domain([new Date(2000, 0, 1), new Date(2000, 0, 2)]);\n}\n","export default function(s) {\n return s.match(/.{6}/g).map(function(x) {\n return \"#\" + x;\n });\n}\n","import colors from \"./colors\";\n\nexport default colors(\"1f77b4ff7f0e2ca02cd627289467bd8c564be377c27f7f7fbcbd2217becf\");\n","import colors from \"./colors\";\n\nexport default colors(\"393b795254a36b6ecf9c9ede6379398ca252b5cf6bcedb9c8c6d31bd9e39e7ba52e7cb94843c39ad494ad6616be7969c7b4173a55194ce6dbdde9ed6\");\n","import colors from \"./colors\";\n\nexport default colors(\"1f77b4aec7e8ff7f0effbb782ca02c98df8ad62728ff98969467bdc5b0d58c564bc49c94e377c2f7b6d27f7f7fc7c7c7bcbd22dbdb8d17becf9edae5\");\n","import colors from \"./colors\";\n\nexport default colors(\"3182bd6baed69ecae1c6dbefe6550dfd8d3cfdae6bfdd0a231a35474c476a1d99bc7e9c0756bb19e9ac8bcbddcdadaeb636363969696bdbdbdd9d9d9\");\n","import {cubehelix} from \"d3-color\";\nimport {interpolateCubehelixLong} from \"d3-interpolate\";\n\nexport default interpolateCubehelixLong(cubehelix(300, 0.5, 0.0), cubehelix(-240, 0.5, 1.0));\n","import {cubehelix} from \"d3-color\";\nimport {interpolateCubehelixLong} from \"d3-interpolate\";\n\nexport var warm = interpolateCubehelixLong(cubehelix(-100, 0.75, 0.35), cubehelix(80, 1.50, 0.8));\n\nexport var cool = interpolateCubehelixLong(cubehelix(260, 0.75, 0.35), cubehelix(80, 1.50, 0.8));\n\nvar rainbow = cubehelix();\n\nexport default function(t) {\n if (t < 0 || t > 1) t -= Math.floor(t);\n var ts = Math.abs(t - 0.5);\n rainbow.h = 360 * t - 100;\n rainbow.s = 1.5 - 1.5 * ts;\n rainbow.l = 0.8 - 0.9 * ts;\n return rainbow + \"\";\n}\n","import colors from \"./colors\";\n\nfunction ramp(range) {\n var n = range.length;\n return function(t) {\n return range[Math.max(0, Math.min(n - 1, Math.floor(t * n)))];\n };\n}\n\nexport default ramp(colors(\"44015444025645045745055946075a46085c460a5d460b5e470d60470e6147106347116447136548146748166848176948186a481a6c481b6d481c6e481d6f481f70482071482173482374482475482576482677482878482979472a7a472c7a472d7b472e7c472f7d46307e46327e46337f463480453581453781453882443983443a83443b84433d84433e85423f854240864241864142874144874045884046883f47883f48893e49893e4a893e4c8a3d4d8a3d4e8a3c4f8a3c508b3b518b3b528b3a538b3a548c39558c39568c38588c38598c375a8c375b8d365c8d365d8d355e8d355f8d34608d34618d33628d33638d32648e32658e31668e31678e31688e30698e306a8e2f6b8e2f6c8e2e6d8e2e6e8e2e6f8e2d708e2d718e2c718e2c728e2c738e2b748e2b758e2a768e2a778e2a788e29798e297a8e297b8e287c8e287d8e277e8e277f8e27808e26818e26828e26828e25838e25848e25858e24868e24878e23888e23898e238a8d228b8d228c8d228d8d218e8d218f8d21908d21918c20928c20928c20938c1f948c1f958b1f968b1f978b1f988b1f998a1f9a8a1e9b8a1e9c891e9d891f9e891f9f881fa0881fa1881fa1871fa28720a38620a48621a58521a68522a78522a88423a98324aa8325ab8225ac8226ad8127ad8128ae8029af7f2ab07f2cb17e2db27d2eb37c2fb47c31b57b32b67a34b67935b77937b87838b9773aba763bbb753dbc743fbc7340bd7242be7144bf7046c06f48c16e4ac16d4cc26c4ec36b50c46a52c56954c56856c66758c7655ac8645cc8635ec96260ca6063cb5f65cb5e67cc5c69cd5b6ccd5a6ece5870cf5773d05675d05477d1537ad1517cd2507fd34e81d34d84d44b86d54989d5488bd6468ed64590d74393d74195d84098d83e9bd93c9dd93ba0da39a2da37a5db36a8db34aadc32addc30b0dd2fb2dd2db5de2bb8de29bade28bddf26c0df25c2df23c5e021c8e020cae11fcde11dd0e11cd2e21bd5e21ad8e219dae319dde318dfe318e2e418e5e419e7e419eae51aece51befe51cf1e51df4e61ef6e620f8e621fbe723fde725\"));\n\nexport var magma = ramp(colors(\"00000401000501010601010802010902020b02020d03030f03031204041405041606051806051a07061c08071e0907200a08220b09240c09260d0a290e0b2b100b2d110c2f120d31130d34140e36150e38160f3b180f3d19103f1a10421c10441d11471e114920114b21114e22115024125325125527125829115a2a115c2c115f2d11612f116331116533106734106936106b38106c390f6e3b0f703d0f713f0f72400f74420f75440f764510774710784910784a10794c117a4e117b4f127b51127c52137c54137d56147d57157e59157e5a167e5c167f5d177f5f187f601880621980641a80651a80671b80681c816a1c816b1d816d1d816e1e81701f81721f817320817521817621817822817922827b23827c23827e24828025828125818326818426818627818827818928818b29818c29818e2a81902a81912b81932b80942c80962c80982d80992d809b2e7f9c2e7f9e2f7fa02f7fa1307ea3307ea5317ea6317da8327daa337dab337cad347cae347bb0357bb2357bb3367ab5367ab73779b83779ba3878bc3978bd3977bf3a77c03a76c23b75c43c75c53c74c73d73c83e73ca3e72cc3f71cd4071cf4070d0416fd2426fd3436ed5446dd6456cd8456cd9466bdb476adc4869de4968df4a68e04c67e24d66e34e65e44f64e55064e75263e85362e95462ea5661eb5760ec5860ed5a5fee5b5eef5d5ef05f5ef1605df2625df2645cf3655cf4675cf4695cf56b5cf66c5cf66e5cf7705cf7725cf8745cf8765cf9785df9795df97b5dfa7d5efa7f5efa815ffb835ffb8560fb8761fc8961fc8a62fc8c63fc8e64fc9065fd9266fd9467fd9668fd9869fd9a6afd9b6bfe9d6cfe9f6dfea16efea36ffea571fea772fea973feaa74feac76feae77feb078feb27afeb47bfeb67cfeb77efeb97ffebb81febd82febf84fec185fec287fec488fec68afec88cfeca8dfecc8ffecd90fecf92fed194fed395fed597fed799fed89afdda9cfddc9efddea0fde0a1fde2a3fde3a5fde5a7fde7a9fde9aafdebacfcecaefceeb0fcf0b2fcf2b4fcf4b6fcf6b8fcf7b9fcf9bbfcfbbdfcfdbf\"));\n\nexport var inferno = ramp(colors(\"00000401000501010601010802010a02020c02020e03021004031204031405041706041907051b08051d09061f0a07220b07240c08260d08290e092b10092d110a30120a32140b34150b37160b39180c3c190c3e1b0c411c0c431e0c451f0c48210c4a230c4c240c4f260c51280b53290b552b0b572d0b592f0a5b310a5c320a5e340a5f3609613809623909633b09643d09653e0966400a67420a68440a68450a69470b6a490b6a4a0c6b4c0c6b4d0d6c4f0d6c510e6c520e6d540f6d550f6d57106e59106e5a116e5c126e5d126e5f136e61136e62146e64156e65156e67166e69166e6a176e6c186e6d186e6f196e71196e721a6e741a6e751b6e771c6d781c6d7a1d6d7c1d6d7d1e6d7f1e6c801f6c82206c84206b85216b87216b88226a8a226a8c23698d23698f24699025689225689326679526679727669827669a28659b29649d29649f2a63a02a63a22b62a32c61a52c60a62d60a82e5fa92e5eab2f5ead305dae305cb0315bb1325ab3325ab43359b63458b73557b93556ba3655bc3754bd3853bf3952c03a51c13a50c33b4fc43c4ec63d4dc73e4cc83f4bca404acb4149cc4248ce4347cf4446d04545d24644d34743d44842d54a41d74b3fd84c3ed94d3dda4e3cdb503bdd513ade5238df5337e05536e15635e25734e35933e45a31e55c30e65d2fe75e2ee8602de9612bea632aeb6429eb6628ec6726ed6925ee6a24ef6c23ef6e21f06f20f1711ff1731df2741cf3761bf37819f47918f57b17f57d15f67e14f68013f78212f78410f8850ff8870ef8890cf98b0bf98c0af98e09fa9008fa9207fa9407fb9606fb9706fb9906fb9b06fb9d07fc9f07fca108fca309fca50afca60cfca80dfcaa0ffcac11fcae12fcb014fcb216fcb418fbb61afbb81dfbba1ffbbc21fbbe23fac026fac228fac42afac62df9c72ff9c932f9cb35f8cd37f8cf3af7d13df7d340f6d543f6d746f5d949f5db4cf4dd4ff4df53f4e156f3e35af3e55df2e661f2e865f2ea69f1ec6df1ed71f1ef75f1f179f2f27df2f482f3f586f3f68af4f88ef5f992f6fa96f8fb9af9fc9dfafda1fcffa4\"));\n\nexport var plasma = ramp(colors(\"0d088710078813078916078a19068c1b068d1d068e20068f2206902406912605912805922a05932c05942e05952f059631059733059735049837049938049a3a049a3c049b3e049c3f049c41049d43039e44039e46039f48039f4903a04b03a14c02a14e02a25002a25102a35302a35502a45601a45801a45901a55b01a55c01a65e01a66001a66100a76300a76400a76600a76700a86900a86a00a86c00a86e00a86f00a87100a87201a87401a87501a87701a87801a87a02a87b02a87d03a87e03a88004a88104a78305a78405a78606a68707a68808a68a09a58b0aa58d0ba58e0ca48f0da4910ea3920fa39410a29511a19613a19814a099159f9a169f9c179e9d189d9e199da01a9ca11b9ba21d9aa31e9aa51f99a62098a72197a82296aa2395ab2494ac2694ad2793ae2892b02991b12a90b22b8fb32c8eb42e8db52f8cb6308bb7318ab83289ba3388bb3488bc3587bd3786be3885bf3984c03a83c13b82c23c81c33d80c43e7fc5407ec6417dc7427cc8437bc9447aca457acb4679cc4778cc4977cd4a76ce4b75cf4c74d04d73d14e72d24f71d35171d45270d5536fd5546ed6556dd7566cd8576bd9586ada5a6ada5b69db5c68dc5d67dd5e66de5f65de6164df6263e06363e16462e26561e26660e3685fe4695ee56a5de56b5de66c5ce76e5be76f5ae87059e97158e97257ea7457eb7556eb7655ec7754ed7953ed7a52ee7b51ef7c51ef7e50f07f4ff0804ef1814df1834cf2844bf3854bf3874af48849f48948f58b47f58c46f68d45f68f44f79044f79143f79342f89441f89540f9973ff9983ef99a3efa9b3dfa9c3cfa9e3bfb9f3afba139fba238fca338fca537fca636fca835fca934fdab33fdac33fdae32fdaf31fdb130fdb22ffdb42ffdb52efeb72dfeb82cfeba2cfebb2bfebd2afebe2afec029fdc229fdc328fdc527fdc627fdc827fdca26fdcb26fccd25fcce25fcd025fcd225fbd324fbd524fbd724fad824fada24f9dc24f9dd25f8df25f8e125f7e225f7e425f6e626f6e826f5e926f5eb27f4ed27f3ee27f3f027f2f227f1f426f1f525f0f724f0f921\"));\n","import {linearish} from \"./linear\";\n\nexport default function sequential(interpolator) {\n var x0 = 0,\n x1 = 1,\n clamp = false;\n\n function scale(x) {\n var t = (x - x0) / (x1 - x0);\n return interpolator(clamp ? Math.max(0, Math.min(1, t)) : t);\n }\n\n scale.domain = function(_) {\n return arguments.length ? (x0 = +_[0], x1 = +_[1], scale) : [x0, x1];\n };\n\n scale.clamp = function(_) {\n return arguments.length ? (clamp = !!_, scale) : clamp;\n };\n\n scale.interpolator = function(_) {\n return arguments.length ? (interpolator = _, scale) : interpolator;\n };\n\n scale.copy = function() {\n return sequential(interpolator).domain([x0, x1]).clamp(clamp);\n };\n\n return linearish(scale);\n}\n","export default function(specifier) {\n var n = specifier.length / 6 | 0, colors = new Array(n), i = 0;\n while (i < n) colors[i] = \"#\" + specifier.slice(i * 6, ++i * 6);\n return colors;\n}\n","import colors from \"../colors\";\n\nexport default colors(\"7fc97fbeaed4fdc086ffff99386cb0f0027fbf5b17666666\");\n","import colors from \"../colors\";\n\nexport default colors(\"1f77b4ff7f0e2ca02cd627289467bd8c564be377c27f7f7fbcbd2217becf\");\n","import colors from \"../colors\";\n\nexport default colors(\"1b9e77d95f027570b3e7298a66a61ee6ab02a6761d666666\");\n","import colors from \"../colors\";\n\nexport default colors(\"a6cee31f78b4b2df8a33a02cfb9a99e31a1cfdbf6fff7f00cab2d66a3d9affff99b15928\");\n","import colors from \"../colors\";\n\nexport default colors(\"fbb4aeb3cde3ccebc5decbe4fed9a6ffffcce5d8bdfddaecf2f2f2\");\n","import colors from \"../colors\";\n\nexport default colors(\"b3e2cdfdcdaccbd5e8f4cae4e6f5c9fff2aef1e2cccccccc\");\n","import colors from \"../colors\";\n\nexport default colors(\"e41a1c377eb84daf4a984ea3ff7f00ffff33a65628f781bf999999\");\n","import colors from \"../colors\";\n\nexport default colors(\"66c2a5fc8d628da0cbe78ac3a6d854ffd92fe5c494b3b3b3\");\n","import colors from \"../colors\";\n\nexport default colors(\"8dd3c7ffffb3bebadafb807280b1d3fdb462b3de69fccde5d9d9d9bc80bdccebc5ffed6f\");\n","import {interpolateRgbBasis} from \"d3-interpolate\";\n\nexport default function(scheme) {\n return interpolateRgbBasis(scheme[scheme.length - 1]);\n}\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"d8b365f5f5f55ab4ac\",\n \"a6611adfc27d80cdc1018571\",\n \"a6611adfc27df5f5f580cdc1018571\",\n \"8c510ad8b365f6e8c3c7eae55ab4ac01665e\",\n \"8c510ad8b365f6e8c3f5f5f5c7eae55ab4ac01665e\",\n \"8c510abf812ddfc27df6e8c3c7eae580cdc135978f01665e\",\n \"8c510abf812ddfc27df6e8c3f5f5f5c7eae580cdc135978f01665e\",\n \"5430058c510abf812ddfc27df6e8c3c7eae580cdc135978f01665e003c30\",\n \"5430058c510abf812ddfc27df6e8c3f5f5f5c7eae580cdc135978f01665e003c30\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"af8dc3f7f7f77fbf7b\",\n \"7b3294c2a5cfa6dba0008837\",\n \"7b3294c2a5cff7f7f7a6dba0008837\",\n \"762a83af8dc3e7d4e8d9f0d37fbf7b1b7837\",\n \"762a83af8dc3e7d4e8f7f7f7d9f0d37fbf7b1b7837\",\n \"762a839970abc2a5cfe7d4e8d9f0d3a6dba05aae611b7837\",\n \"762a839970abc2a5cfe7d4e8f7f7f7d9f0d3a6dba05aae611b7837\",\n \"40004b762a839970abc2a5cfe7d4e8d9f0d3a6dba05aae611b783700441b\",\n \"40004b762a839970abc2a5cfe7d4e8f7f7f7d9f0d3a6dba05aae611b783700441b\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"e9a3c9f7f7f7a1d76a\",\n \"d01c8bf1b6dab8e1864dac26\",\n \"d01c8bf1b6daf7f7f7b8e1864dac26\",\n \"c51b7de9a3c9fde0efe6f5d0a1d76a4d9221\",\n \"c51b7de9a3c9fde0eff7f7f7e6f5d0a1d76a4d9221\",\n \"c51b7dde77aef1b6dafde0efe6f5d0b8e1867fbc414d9221\",\n \"c51b7dde77aef1b6dafde0eff7f7f7e6f5d0b8e1867fbc414d9221\",\n \"8e0152c51b7dde77aef1b6dafde0efe6f5d0b8e1867fbc414d9221276419\",\n \"8e0152c51b7dde77aef1b6dafde0eff7f7f7e6f5d0b8e1867fbc414d9221276419\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"998ec3f7f7f7f1a340\",\n \"5e3c99b2abd2fdb863e66101\",\n \"5e3c99b2abd2f7f7f7fdb863e66101\",\n \"542788998ec3d8daebfee0b6f1a340b35806\",\n \"542788998ec3d8daebf7f7f7fee0b6f1a340b35806\",\n \"5427888073acb2abd2d8daebfee0b6fdb863e08214b35806\",\n \"5427888073acb2abd2d8daebf7f7f7fee0b6fdb863e08214b35806\",\n \"2d004b5427888073acb2abd2d8daebfee0b6fdb863e08214b358067f3b08\",\n \"2d004b5427888073acb2abd2d8daebf7f7f7fee0b6fdb863e08214b358067f3b08\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"ef8a62f7f7f767a9cf\",\n \"ca0020f4a58292c5de0571b0\",\n \"ca0020f4a582f7f7f792c5de0571b0\",\n \"b2182bef8a62fddbc7d1e5f067a9cf2166ac\",\n \"b2182bef8a62fddbc7f7f7f7d1e5f067a9cf2166ac\",\n \"b2182bd6604df4a582fddbc7d1e5f092c5de4393c32166ac\",\n \"b2182bd6604df4a582fddbc7f7f7f7d1e5f092c5de4393c32166ac\",\n \"67001fb2182bd6604df4a582fddbc7d1e5f092c5de4393c32166ac053061\",\n \"67001fb2182bd6604df4a582fddbc7f7f7f7d1e5f092c5de4393c32166ac053061\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"ef8a62ffffff999999\",\n \"ca0020f4a582bababa404040\",\n \"ca0020f4a582ffffffbababa404040\",\n \"b2182bef8a62fddbc7e0e0e09999994d4d4d\",\n \"b2182bef8a62fddbc7ffffffe0e0e09999994d4d4d\",\n \"b2182bd6604df4a582fddbc7e0e0e0bababa8787874d4d4d\",\n \"b2182bd6604df4a582fddbc7ffffffe0e0e0bababa8787874d4d4d\",\n \"67001fb2182bd6604df4a582fddbc7e0e0e0bababa8787874d4d4d1a1a1a\",\n \"67001fb2182bd6604df4a582fddbc7ffffffe0e0e0bababa8787874d4d4d1a1a1a\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"fc8d59ffffbf91bfdb\",\n \"d7191cfdae61abd9e92c7bb6\",\n \"d7191cfdae61ffffbfabd9e92c7bb6\",\n \"d73027fc8d59fee090e0f3f891bfdb4575b4\",\n \"d73027fc8d59fee090ffffbfe0f3f891bfdb4575b4\",\n \"d73027f46d43fdae61fee090e0f3f8abd9e974add14575b4\",\n \"d73027f46d43fdae61fee090ffffbfe0f3f8abd9e974add14575b4\",\n \"a50026d73027f46d43fdae61fee090e0f3f8abd9e974add14575b4313695\",\n \"a50026d73027f46d43fdae61fee090ffffbfe0f3f8abd9e974add14575b4313695\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"fc8d59ffffbf91cf60\",\n \"d7191cfdae61a6d96a1a9641\",\n \"d7191cfdae61ffffbfa6d96a1a9641\",\n \"d73027fc8d59fee08bd9ef8b91cf601a9850\",\n \"d73027fc8d59fee08bffffbfd9ef8b91cf601a9850\",\n \"d73027f46d43fdae61fee08bd9ef8ba6d96a66bd631a9850\",\n \"d73027f46d43fdae61fee08bffffbfd9ef8ba6d96a66bd631a9850\",\n \"a50026d73027f46d43fdae61fee08bd9ef8ba6d96a66bd631a9850006837\",\n \"a50026d73027f46d43fdae61fee08bffffbfd9ef8ba6d96a66bd631a9850006837\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"fc8d59ffffbf99d594\",\n \"d7191cfdae61abdda42b83ba\",\n \"d7191cfdae61ffffbfabdda42b83ba\",\n \"d53e4ffc8d59fee08be6f59899d5943288bd\",\n \"d53e4ffc8d59fee08bffffbfe6f59899d5943288bd\",\n \"d53e4ff46d43fdae61fee08be6f598abdda466c2a53288bd\",\n \"d53e4ff46d43fdae61fee08bffffbfe6f598abdda466c2a53288bd\",\n \"9e0142d53e4ff46d43fdae61fee08be6f598abdda466c2a53288bd5e4fa2\",\n \"9e0142d53e4ff46d43fdae61fee08bffffbfe6f598abdda466c2a53288bd5e4fa2\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"e5f5f999d8c92ca25f\",\n \"edf8fbb2e2e266c2a4238b45\",\n \"edf8fbb2e2e266c2a42ca25f006d2c\",\n \"edf8fbccece699d8c966c2a42ca25f006d2c\",\n \"edf8fbccece699d8c966c2a441ae76238b45005824\",\n \"f7fcfde5f5f9ccece699d8c966c2a441ae76238b45005824\",\n \"f7fcfde5f5f9ccece699d8c966c2a441ae76238b45006d2c00441b\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"e0ecf49ebcda8856a7\",\n \"edf8fbb3cde38c96c688419d\",\n \"edf8fbb3cde38c96c68856a7810f7c\",\n \"edf8fbbfd3e69ebcda8c96c68856a7810f7c\",\n \"edf8fbbfd3e69ebcda8c96c68c6bb188419d6e016b\",\n \"f7fcfde0ecf4bfd3e69ebcda8c96c68c6bb188419d6e016b\",\n \"f7fcfde0ecf4bfd3e69ebcda8c96c68c6bb188419d810f7c4d004b\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"e0f3dba8ddb543a2ca\",\n \"f0f9e8bae4bc7bccc42b8cbe\",\n \"f0f9e8bae4bc7bccc443a2ca0868ac\",\n \"f0f9e8ccebc5a8ddb57bccc443a2ca0868ac\",\n \"f0f9e8ccebc5a8ddb57bccc44eb3d32b8cbe08589e\",\n \"f7fcf0e0f3dbccebc5a8ddb57bccc44eb3d32b8cbe08589e\",\n \"f7fcf0e0f3dbccebc5a8ddb57bccc44eb3d32b8cbe0868ac084081\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"fee8c8fdbb84e34a33\",\n \"fef0d9fdcc8afc8d59d7301f\",\n \"fef0d9fdcc8afc8d59e34a33b30000\",\n \"fef0d9fdd49efdbb84fc8d59e34a33b30000\",\n \"fef0d9fdd49efdbb84fc8d59ef6548d7301f990000\",\n \"fff7ecfee8c8fdd49efdbb84fc8d59ef6548d7301f990000\",\n \"fff7ecfee8c8fdd49efdbb84fc8d59ef6548d7301fb300007f0000\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"ece2f0a6bddb1c9099\",\n \"f6eff7bdc9e167a9cf02818a\",\n \"f6eff7bdc9e167a9cf1c9099016c59\",\n \"f6eff7d0d1e6a6bddb67a9cf1c9099016c59\",\n \"f6eff7d0d1e6a6bddb67a9cf3690c002818a016450\",\n \"fff7fbece2f0d0d1e6a6bddb67a9cf3690c002818a016450\",\n \"fff7fbece2f0d0d1e6a6bddb67a9cf3690c002818a016c59014636\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"ece7f2a6bddb2b8cbe\",\n \"f1eef6bdc9e174a9cf0570b0\",\n \"f1eef6bdc9e174a9cf2b8cbe045a8d\",\n \"f1eef6d0d1e6a6bddb74a9cf2b8cbe045a8d\",\n \"f1eef6d0d1e6a6bddb74a9cf3690c00570b0034e7b\",\n \"fff7fbece7f2d0d1e6a6bddb74a9cf3690c00570b0034e7b\",\n \"fff7fbece7f2d0d1e6a6bddb74a9cf3690c00570b0045a8d023858\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"e7e1efc994c7dd1c77\",\n \"f1eef6d7b5d8df65b0ce1256\",\n \"f1eef6d7b5d8df65b0dd1c77980043\",\n \"f1eef6d4b9dac994c7df65b0dd1c77980043\",\n \"f1eef6d4b9dac994c7df65b0e7298ace125691003f\",\n \"f7f4f9e7e1efd4b9dac994c7df65b0e7298ace125691003f\",\n \"f7f4f9e7e1efd4b9dac994c7df65b0e7298ace125698004367001f\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"fde0ddfa9fb5c51b8a\",\n \"feebe2fbb4b9f768a1ae017e\",\n \"feebe2fbb4b9f768a1c51b8a7a0177\",\n \"feebe2fcc5c0fa9fb5f768a1c51b8a7a0177\",\n \"feebe2fcc5c0fa9fb5f768a1dd3497ae017e7a0177\",\n \"fff7f3fde0ddfcc5c0fa9fb5f768a1dd3497ae017e7a0177\",\n \"fff7f3fde0ddfcc5c0fa9fb5f768a1dd3497ae017e7a017749006a\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"edf8b17fcdbb2c7fb8\",\n \"ffffcca1dab441b6c4225ea8\",\n \"ffffcca1dab441b6c42c7fb8253494\",\n \"ffffccc7e9b47fcdbb41b6c42c7fb8253494\",\n \"ffffccc7e9b47fcdbb41b6c41d91c0225ea80c2c84\",\n \"ffffd9edf8b1c7e9b47fcdbb41b6c41d91c0225ea80c2c84\",\n \"ffffd9edf8b1c7e9b47fcdbb41b6c41d91c0225ea8253494081d58\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"f7fcb9addd8e31a354\",\n \"ffffccc2e69978c679238443\",\n \"ffffccc2e69978c67931a354006837\",\n \"ffffccd9f0a3addd8e78c67931a354006837\",\n \"ffffccd9f0a3addd8e78c67941ab5d238443005a32\",\n \"ffffe5f7fcb9d9f0a3addd8e78c67941ab5d238443005a32\",\n \"ffffe5f7fcb9d9f0a3addd8e78c67941ab5d238443006837004529\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"fff7bcfec44fd95f0e\",\n \"ffffd4fed98efe9929cc4c02\",\n \"ffffd4fed98efe9929d95f0e993404\",\n \"ffffd4fee391fec44ffe9929d95f0e993404\",\n \"ffffd4fee391fec44ffe9929ec7014cc4c028c2d04\",\n \"ffffe5fff7bcfee391fec44ffe9929ec7014cc4c028c2d04\",\n \"ffffe5fff7bcfee391fec44ffe9929ec7014cc4c02993404662506\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"ffeda0feb24cf03b20\",\n \"ffffb2fecc5cfd8d3ce31a1c\",\n \"ffffb2fecc5cfd8d3cf03b20bd0026\",\n \"ffffb2fed976feb24cfd8d3cf03b20bd0026\",\n \"ffffb2fed976feb24cfd8d3cfc4e2ae31a1cb10026\",\n \"ffffccffeda0fed976feb24cfd8d3cfc4e2ae31a1cb10026\",\n \"ffffccffeda0fed976feb24cfd8d3cfc4e2ae31a1cbd0026800026\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"deebf79ecae13182bd\",\n \"eff3ffbdd7e76baed62171b5\",\n \"eff3ffbdd7e76baed63182bd08519c\",\n \"eff3ffc6dbef9ecae16baed63182bd08519c\",\n \"eff3ffc6dbef9ecae16baed64292c62171b5084594\",\n \"f7fbffdeebf7c6dbef9ecae16baed64292c62171b5084594\",\n \"f7fbffdeebf7c6dbef9ecae16baed64292c62171b508519c08306b\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"e5f5e0a1d99b31a354\",\n \"edf8e9bae4b374c476238b45\",\n \"edf8e9bae4b374c47631a354006d2c\",\n \"edf8e9c7e9c0a1d99b74c47631a354006d2c\",\n \"edf8e9c7e9c0a1d99b74c47641ab5d238b45005a32\",\n \"f7fcf5e5f5e0c7e9c0a1d99b74c47641ab5d238b45005a32\",\n \"f7fcf5e5f5e0c7e9c0a1d99b74c47641ab5d238b45006d2c00441b\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"f0f0f0bdbdbd636363\",\n \"f7f7f7cccccc969696525252\",\n \"f7f7f7cccccc969696636363252525\",\n \"f7f7f7d9d9d9bdbdbd969696636363252525\",\n \"f7f7f7d9d9d9bdbdbd969696737373525252252525\",\n \"fffffff0f0f0d9d9d9bdbdbd969696737373525252252525\",\n \"fffffff0f0f0d9d9d9bdbdbd969696737373525252252525000000\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"efedf5bcbddc756bb1\",\n \"f2f0f7cbc9e29e9ac86a51a3\",\n \"f2f0f7cbc9e29e9ac8756bb154278f\",\n \"f2f0f7dadaebbcbddc9e9ac8756bb154278f\",\n \"f2f0f7dadaebbcbddc9e9ac8807dba6a51a34a1486\",\n \"fcfbfdefedf5dadaebbcbddc9e9ac8807dba6a51a34a1486\",\n \"fcfbfdefedf5dadaebbcbddc9e9ac8807dba6a51a354278f3f007d\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"fee0d2fc9272de2d26\",\n \"fee5d9fcae91fb6a4acb181d\",\n \"fee5d9fcae91fb6a4ade2d26a50f15\",\n \"fee5d9fcbba1fc9272fb6a4ade2d26a50f15\",\n \"fee5d9fcbba1fc9272fb6a4aef3b2ccb181d99000d\",\n \"fff5f0fee0d2fcbba1fc9272fb6a4aef3b2ccb181d99000d\",\n \"fff5f0fee0d2fcbba1fc9272fb6a4aef3b2ccb181da50f1567000d\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"fee6cefdae6be6550d\",\n \"feeddefdbe85fd8d3cd94701\",\n \"feeddefdbe85fd8d3ce6550da63603\",\n \"feeddefdd0a2fdae6bfd8d3ce6550da63603\",\n \"feeddefdd0a2fdae6bfd8d3cf16913d948018c2d04\",\n \"fff5ebfee6cefdd0a2fdae6bfd8d3cf16913d948018c2d04\",\n \"fff5ebfee6cefdd0a2fdae6bfd8d3cf16913d94801a636037f2704\"\n).map(colors);\n\nexport default ramp(scheme);\n","import {cubehelix} from \"d3-color\";\nimport {interpolateCubehelixLong} from \"d3-interpolate\";\n\nexport default interpolateCubehelixLong(cubehelix(300, 0.5, 0.0), cubehelix(-240, 0.5, 1.0));\n","import {cubehelix} from \"d3-color\";\nimport {interpolateCubehelixLong} from \"d3-interpolate\";\n\nexport var warm = interpolateCubehelixLong(cubehelix(-100, 0.75, 0.35), cubehelix(80, 1.50, 0.8));\n\nexport var cool = interpolateCubehelixLong(cubehelix(260, 0.75, 0.35), cubehelix(80, 1.50, 0.8));\n\nvar c = cubehelix();\n\nexport default function(t) {\n if (t < 0 || t > 1) t -= Math.floor(t);\n var ts = Math.abs(t - 0.5);\n c.h = 360 * t - 100;\n c.s = 1.5 - 1.5 * ts;\n c.l = 0.8 - 0.9 * ts;\n return c + \"\";\n}\n","import {rgb} from \"d3-color\";\n\nvar c = rgb(),\n pi_1_3 = Math.PI / 3,\n pi_2_3 = Math.PI * 2 / 3;\n\nexport default function(t) {\n var x;\n t = (0.5 - t) * Math.PI;\n c.r = 255 * (x = Math.sin(t)) * x;\n c.g = 255 * (x = Math.sin(t + pi_1_3)) * x;\n c.b = 255 * (x = Math.sin(t + pi_2_3)) * x;\n return c + \"\";\n}\n","import colors from \"../colors\";\n\nfunction ramp(range) {\n var n = range.length;\n return function(t) {\n return range[Math.max(0, Math.min(n - 1, Math.floor(t * n)))];\n };\n}\n\nexport default ramp(colors(\"44015444025645045745055946075a46085c460a5d460b5e470d60470e6147106347116447136548146748166848176948186a481a6c481b6d481c6e481d6f481f70482071482173482374482475482576482677482878482979472a7a472c7a472d7b472e7c472f7d46307e46327e46337f463480453581453781453882443983443a83443b84433d84433e85423f854240864241864142874144874045884046883f47883f48893e49893e4a893e4c8a3d4d8a3d4e8a3c4f8a3c508b3b518b3b528b3a538b3a548c39558c39568c38588c38598c375a8c375b8d365c8d365d8d355e8d355f8d34608d34618d33628d33638d32648e32658e31668e31678e31688e30698e306a8e2f6b8e2f6c8e2e6d8e2e6e8e2e6f8e2d708e2d718e2c718e2c728e2c738e2b748e2b758e2a768e2a778e2a788e29798e297a8e297b8e287c8e287d8e277e8e277f8e27808e26818e26828e26828e25838e25848e25858e24868e24878e23888e23898e238a8d228b8d228c8d228d8d218e8d218f8d21908d21918c20928c20928c20938c1f948c1f958b1f968b1f978b1f988b1f998a1f9a8a1e9b8a1e9c891e9d891f9e891f9f881fa0881fa1881fa1871fa28720a38620a48621a58521a68522a78522a88423a98324aa8325ab8225ac8226ad8127ad8128ae8029af7f2ab07f2cb17e2db27d2eb37c2fb47c31b57b32b67a34b67935b77937b87838b9773aba763bbb753dbc743fbc7340bd7242be7144bf7046c06f48c16e4ac16d4cc26c4ec36b50c46a52c56954c56856c66758c7655ac8645cc8635ec96260ca6063cb5f65cb5e67cc5c69cd5b6ccd5a6ece5870cf5773d05675d05477d1537ad1517cd2507fd34e81d34d84d44b86d54989d5488bd6468ed64590d74393d74195d84098d83e9bd93c9dd93ba0da39a2da37a5db36a8db34aadc32addc30b0dd2fb2dd2db5de2bb8de29bade28bddf26c0df25c2df23c5e021c8e020cae11fcde11dd0e11cd2e21bd5e21ad8e219dae319dde318dfe318e2e418e5e419e7e419eae51aece51befe51cf1e51df4e61ef6e620f8e621fbe723fde725\"));\n\nexport var magma = ramp(colors(\"00000401000501010601010802010902020b02020d03030f03031204041405041606051806051a07061c08071e0907200a08220b09240c09260d0a290e0b2b100b2d110c2f120d31130d34140e36150e38160f3b180f3d19103f1a10421c10441d11471e114920114b21114e22115024125325125527125829115a2a115c2c115f2d11612f116331116533106734106936106b38106c390f6e3b0f703d0f713f0f72400f74420f75440f764510774710784910784a10794c117a4e117b4f127b51127c52137c54137d56147d57157e59157e5a167e5c167f5d177f5f187f601880621980641a80651a80671b80681c816a1c816b1d816d1d816e1e81701f81721f817320817521817621817822817922827b23827c23827e24828025828125818326818426818627818827818928818b29818c29818e2a81902a81912b81932b80942c80962c80982d80992d809b2e7f9c2e7f9e2f7fa02f7fa1307ea3307ea5317ea6317da8327daa337dab337cad347cae347bb0357bb2357bb3367ab5367ab73779b83779ba3878bc3978bd3977bf3a77c03a76c23b75c43c75c53c74c73d73c83e73ca3e72cc3f71cd4071cf4070d0416fd2426fd3436ed5446dd6456cd8456cd9466bdb476adc4869de4968df4a68e04c67e24d66e34e65e44f64e55064e75263e85362e95462ea5661eb5760ec5860ed5a5fee5b5eef5d5ef05f5ef1605df2625df2645cf3655cf4675cf4695cf56b5cf66c5cf66e5cf7705cf7725cf8745cf8765cf9785df9795df97b5dfa7d5efa7f5efa815ffb835ffb8560fb8761fc8961fc8a62fc8c63fc8e64fc9065fd9266fd9467fd9668fd9869fd9a6afd9b6bfe9d6cfe9f6dfea16efea36ffea571fea772fea973feaa74feac76feae77feb078feb27afeb47bfeb67cfeb77efeb97ffebb81febd82febf84fec185fec287fec488fec68afec88cfeca8dfecc8ffecd90fecf92fed194fed395fed597fed799fed89afdda9cfddc9efddea0fde0a1fde2a3fde3a5fde5a7fde7a9fde9aafdebacfcecaefceeb0fcf0b2fcf2b4fcf4b6fcf6b8fcf7b9fcf9bbfcfbbdfcfdbf\"));\n\nexport var inferno = ramp(colors(\"00000401000501010601010802010a02020c02020e03021004031204031405041706041907051b08051d09061f0a07220b07240c08260d08290e092b10092d110a30120a32140b34150b37160b39180c3c190c3e1b0c411c0c431e0c451f0c48210c4a230c4c240c4f260c51280b53290b552b0b572d0b592f0a5b310a5c320a5e340a5f3609613809623909633b09643d09653e0966400a67420a68440a68450a69470b6a490b6a4a0c6b4c0c6b4d0d6c4f0d6c510e6c520e6d540f6d550f6d57106e59106e5a116e5c126e5d126e5f136e61136e62146e64156e65156e67166e69166e6a176e6c186e6d186e6f196e71196e721a6e741a6e751b6e771c6d781c6d7a1d6d7c1d6d7d1e6d7f1e6c801f6c82206c84206b85216b87216b88226a8a226a8c23698d23698f24699025689225689326679526679727669827669a28659b29649d29649f2a63a02a63a22b62a32c61a52c60a62d60a82e5fa92e5eab2f5ead305dae305cb0315bb1325ab3325ab43359b63458b73557b93556ba3655bc3754bd3853bf3952c03a51c13a50c33b4fc43c4ec63d4dc73e4cc83f4bca404acb4149cc4248ce4347cf4446d04545d24644d34743d44842d54a41d74b3fd84c3ed94d3dda4e3cdb503bdd513ade5238df5337e05536e15635e25734e35933e45a31e55c30e65d2fe75e2ee8602de9612bea632aeb6429eb6628ec6726ed6925ee6a24ef6c23ef6e21f06f20f1711ff1731df2741cf3761bf37819f47918f57b17f57d15f67e14f68013f78212f78410f8850ff8870ef8890cf98b0bf98c0af98e09fa9008fa9207fa9407fb9606fb9706fb9906fb9b06fb9d07fc9f07fca108fca309fca50afca60cfca80dfcaa0ffcac11fcae12fcb014fcb216fcb418fbb61afbb81dfbba1ffbbc21fbbe23fac026fac228fac42afac62df9c72ff9c932f9cb35f8cd37f8cf3af7d13df7d340f6d543f6d746f5d949f5db4cf4dd4ff4df53f4e156f3e35af3e55df2e661f2e865f2ea69f1ec6df1ed71f1ef75f1f179f2f27df2f482f3f586f3f68af4f88ef5f992f6fa96f8fb9af9fc9dfafda1fcffa4\"));\n\nexport var plasma = ramp(colors(\"0d088710078813078916078a19068c1b068d1d068e20068f2206902406912605912805922a05932c05942e05952f059631059733059735049837049938049a3a049a3c049b3e049c3f049c41049d43039e44039e46039f48039f4903a04b03a14c02a14e02a25002a25102a35302a35502a45601a45801a45901a55b01a55c01a65e01a66001a66100a76300a76400a76600a76700a86900a86a00a86c00a86e00a86f00a87100a87201a87401a87501a87701a87801a87a02a87b02a87d03a87e03a88004a88104a78305a78405a78606a68707a68808a68a09a58b0aa58d0ba58e0ca48f0da4910ea3920fa39410a29511a19613a19814a099159f9a169f9c179e9d189d9e199da01a9ca11b9ba21d9aa31e9aa51f99a62098a72197a82296aa2395ab2494ac2694ad2793ae2892b02991b12a90b22b8fb32c8eb42e8db52f8cb6308bb7318ab83289ba3388bb3488bc3587bd3786be3885bf3984c03a83c13b82c23c81c33d80c43e7fc5407ec6417dc7427cc8437bc9447aca457acb4679cc4778cc4977cd4a76ce4b75cf4c74d04d73d14e72d24f71d35171d45270d5536fd5546ed6556dd7566cd8576bd9586ada5a6ada5b69db5c68dc5d67dd5e66de5f65de6164df6263e06363e16462e26561e26660e3685fe4695ee56a5de56b5de66c5ce76e5be76f5ae87059e97158e97257ea7457eb7556eb7655ec7754ed7953ed7a52ee7b51ef7c51ef7e50f07f4ff0804ef1814df1834cf2844bf3854bf3874af48849f48948f58b47f58c46f68d45f68f44f79044f79143f79342f89441f89540f9973ff9983ef99a3efa9b3dfa9c3cfa9e3bfb9f3afba139fba238fca338fca537fca636fca835fca934fdab33fdac33fdae32fdaf31fdb130fdb22ffdb42ffdb52efeb72dfeb82cfeba2cfebb2bfebd2afebe2afec029fdc229fdc328fdc527fdc627fdc827fdca26fdcb26fccd25fcce25fcd025fcd225fbd324fbd524fbd724fad824fada24f9dc24f9dd25f8df25f8e125f7e225f7e425f6e626f6e826f5e926f5eb27f4ed27f3ee27f3f027f2f227f1f426f1f525f0f724f0f921\"));\n","export const UNIT_GLOBAL_NAMESPACE = 'app.units';\nexport const UNIT_LOCAL_NAMESPACE = 'local.units';\nexport const LAYER_LOCAL_NAMESPACE = 'local.layers';\nexport const LAYER_GLOBAL_NAMESPACE = 'app.layers';\nexport const GROUP_GLOBAL_NAMESPACE = 'app.group';\nexport const GROUP_LOCAL_NAMESPACE = 'local.group';\nexport const CANVAS_LOCAL_NAMESPACE = 'local.canvas';\nexport const CANVAS_GLOBAL_NAMESPACE = 'app.canvas';\n\n","const ReservedFields = {\n ROW_ID: '__id__'\n};\n\nexport default ReservedFields;\n","const CommonProps = {\n ACTION_INF: 'actionInf',\n ON_LAYER_DRAW: 'onLayerDraw',\n MATRIX_CREATED: 'matrixCreated'\n};\n\nexport default CommonProps;\n","export var slice = Array.prototype.slice;\n","export default function(x) {\n return x;\n}\n","import {slice} from \"./array\";\nimport identity from \"./identity\";\n\nvar top = 1,\n right = 2,\n bottom = 3,\n left = 4,\n epsilon = 1e-6;\n\nfunction translateX(x) {\n return \"translate(\" + (x + 0.5) + \",0)\";\n}\n\nfunction translateY(y) {\n return \"translate(0,\" + (y + 0.5) + \")\";\n}\n\nfunction number(scale) {\n return function(d) {\n return +scale(d);\n };\n}\n\nfunction center(scale) {\n var offset = Math.max(0, scale.bandwidth() - 1) / 2; // Adjust for 0.5px offset.\n if (scale.round()) offset = Math.round(offset);\n return function(d) {\n return +scale(d) + offset;\n };\n}\n\nfunction entering() {\n return !this.__axis;\n}\n\nfunction axis(orient, scale) {\n var tickArguments = [],\n tickValues = null,\n tickFormat = null,\n tickTransform = null,\n tickSizeInner = 6,\n tickSizeOuter = 6,\n tickPadding = 3,\n k = orient === top || orient === left ? -1 : 1,\n x = orient === left || orient === right ? \"x\" : \"y\",\n transform = orient === top || orient === bottom ? translateX : translateY;\n\n function axis(context) {\n var values = tickValues == null ? (scale.ticks ? scale.ticks.apply(scale, tickArguments) : scale.domain()) : tickValues,\n format = tickFormat == null ? (scale.tickFormat ? scale.tickFormat.apply(scale, tickArguments) : identity) : tickFormat,\n spacing = Math.max(tickSizeInner, 0) + tickPadding,\n range = scale.range(),\n range0 = +range[0] + 0.5,\n range1 = +range[range.length - 1] + 0.5,\n position = (scale.bandwidth ? center : number)(scale.copy()),\n selection = context.selection ? context.selection() : context,\n path = selection.selectAll(\".domain\").data([null]),\n tick = selection.selectAll(\".tick\").data(values, scale).order(),\n tickExit = tick.exit(),\n tickEnter = tick.enter().append(\"g\").attr(\"class\", \"tick\"),\n line = tick.select(\"line\"),\n text = tick.select(\"text\");\n\n path = path.merge(path.enter().insert(\"path\", \".tick\")\n .attr(\"class\", \"domain\")\n .attr(\"stroke\", \"#000\"));\n\n tick = tick.merge(tickEnter);\n\n line = line.merge(tickEnter.append(\"line\")\n .attr(\"stroke\", \"#000\")\n .attr(x + \"2\", k * tickSizeInner));\n\n text = text.merge(tickEnter.append(\"text\")\n .attr(\"fill\", \"#000\")\n .attr(x, k * spacing)\n .attr(\"dy\", orient === top ? \"0em\" : orient === bottom ? \"0.71em\" : \"0.32em\"))\n .style('transform', tickTransform);\n\n if (context !== selection) {\n path = path.transition(context);\n tick = tick.transition(context);\n line = line.transition(context);\n text = text.transition(context);\n\n tickExit = tickExit.transition(context)\n .attr(\"opacity\", epsilon)\n .attr(\"transform\", function(d) { return isFinite(d = position(d)) ? transform(d) : this.getAttribute(\"transform\"); });\n\n tickEnter\n .attr(\"opacity\", epsilon)\n .attr(\"transform\", function(d) { var p = this.parentNode.__axis; return transform(p && isFinite(p = p(d)) ? p : position(d)); });\n }\n\n tickExit.remove();\n\n path\n .attr(\"d\", orient === left || orient == right\n ? \"M\" + k * tickSizeOuter + \",\" + range0 + \"H0.5V\" + range1 + \"H\" + k * tickSizeOuter\n : \"M\" + range0 + \",\" + k * tickSizeOuter + \"V0.5H\" + range1 + \"V\" + k * tickSizeOuter);\n\n tick\n .attr(\"opacity\", 1)\n .attr(\"transform\", function(d) { return transform(position(d)); });\n\n line\n .attr(x + \"2\", k * tickSizeInner);\n\n text\n .attr(x, k * spacing)\n .text(format);\n\n selection.filter(entering)\n .attr(\"fill\", \"none\")\n .attr(\"font-size\", 10)\n .attr(\"font-family\", \"sans-serif\")\n .attr(\"text-anchor\", orient === right ? \"start\" : orient === left ? \"end\" : \"middle\");\n\n selection\n .each(function() { this.__axis = position; });\n }\n\n axis.scale = function(_) {\n return arguments.length ? (scale = _, axis) : scale;\n };\n\n axis.tickTransform = function(_) {\n return arguments.length ? (tickTransform = _, axis) : tickTransform;\n };\n\n axis.ticks = function() {\n return tickArguments = slice.call(arguments), axis;\n };\n\n axis.tickArguments = function(_) {\n return arguments.length ? (tickArguments = _ == null ? [] : slice.call(_), axis) : tickArguments.slice();\n };\n\n axis.tickValues = function(_) {\n return arguments.length ? (tickValues = _ == null ? null : slice.call(_), axis) : tickValues && tickValues.slice();\n };\n\n axis.tickFormat = function(_) {\n return arguments.length ? (tickFormat = _, axis) : tickFormat;\n };\n\n axis.tickSize = function(_) {\n return arguments.length ? (tickSizeInner = tickSizeOuter = +_, axis) : tickSizeInner;\n };\n\n axis.tickSizeInner = function(_) {\n return arguments.length ? (tickSizeInner = +_, axis) : tickSizeInner;\n };\n\n axis.tickSizeOuter = function(_) {\n return arguments.length ? (tickSizeOuter = +_, axis) : tickSizeOuter;\n };\n\n axis.tickPadding = function(_) {\n return arguments.length ? (tickPadding = +_, axis) : tickPadding;\n };\n\n return axis;\n}\n\nexport function axisTop(scale) {\n return axis(top, scale);\n}\n\nexport function axisRight(scale) {\n return axis(right, scale);\n}\n\nexport function axisBottom(scale) {\n return axis(bottom, scale);\n}\n\nexport function axisLeft(scale) {\n return axis(left, scale);\n}\n","var pi = Math.PI,\n tau = 2 * pi,\n epsilon = 1e-6,\n tauEpsilon = tau - epsilon;\n\nfunction Path() {\n this._x0 = this._y0 = // start of current subpath\n this._x1 = this._y1 = null; // end of current subpath\n this._ = \"\";\n}\n\nfunction path() {\n return new Path;\n}\n\nPath.prototype = path.prototype = {\n constructor: Path,\n moveTo: function(x, y) {\n this._ += \"M\" + (this._x0 = this._x1 = +x) + \",\" + (this._y0 = this._y1 = +y);\n },\n closePath: function() {\n if (this._x1 !== null) {\n this._x1 = this._x0, this._y1 = this._y0;\n this._ += \"Z\";\n }\n },\n lineTo: function(x, y) {\n this._ += \"L\" + (this._x1 = +x) + \",\" + (this._y1 = +y);\n },\n quadraticCurveTo: function(x1, y1, x, y) {\n this._ += \"Q\" + (+x1) + \",\" + (+y1) + \",\" + (this._x1 = +x) + \",\" + (this._y1 = +y);\n },\n bezierCurveTo: function(x1, y1, x2, y2, x, y) {\n this._ += \"C\" + (+x1) + \",\" + (+y1) + \",\" + (+x2) + \",\" + (+y2) + \",\" + (this._x1 = +x) + \",\" + (this._y1 = +y);\n },\n arcTo: function(x1, y1, x2, y2, r) {\n x1 = +x1, y1 = +y1, x2 = +x2, y2 = +y2, r = +r;\n var x0 = this._x1,\n y0 = this._y1,\n x21 = x2 - x1,\n y21 = y2 - y1,\n x01 = x0 - x1,\n y01 = y0 - y1,\n l01_2 = x01 * x01 + y01 * y01;\n\n // Is the radius negative? Error.\n if (r < 0) throw new Error(\"negative radius: \" + r);\n\n // Is this path empty? Move to (x1,y1).\n if (this._x1 === null) {\n this._ += \"M\" + (this._x1 = x1) + \",\" + (this._y1 = y1);\n }\n\n // Or, is (x1,y1) coincident with (x0,y0)? Do nothing.\n else if (!(l01_2 > epsilon));\n\n // Or, are (x0,y0), (x1,y1) and (x2,y2) collinear?\n // Equivalently, is (x1,y1) coincident with (x2,y2)?\n // Or, is the radius zero? Line to (x1,y1).\n else if (!(Math.abs(y01 * x21 - y21 * x01) > epsilon) || !r) {\n this._ += \"L\" + (this._x1 = x1) + \",\" + (this._y1 = y1);\n }\n\n // Otherwise, draw an arc!\n else {\n var x20 = x2 - x0,\n y20 = y2 - y0,\n l21_2 = x21 * x21 + y21 * y21,\n l20_2 = x20 * x20 + y20 * y20,\n l21 = Math.sqrt(l21_2),\n l01 = Math.sqrt(l01_2),\n l = r * Math.tan((pi - Math.acos((l21_2 + l01_2 - l20_2) / (2 * l21 * l01))) / 2),\n t01 = l / l01,\n t21 = l / l21;\n\n // If the start tangent is not coincident with (x0,y0), line to.\n if (Math.abs(t01 - 1) > epsilon) {\n this._ += \"L\" + (x1 + t01 * x01) + \",\" + (y1 + t01 * y01);\n }\n\n this._ += \"A\" + r + \",\" + r + \",0,0,\" + (+(y01 * x20 > x01 * y20)) + \",\" + (this._x1 = x1 + t21 * x21) + \",\" + (this._y1 = y1 + t21 * y21);\n }\n },\n arc: function(x, y, r, a0, a1, ccw) {\n x = +x, y = +y, r = +r;\n var dx = r * Math.cos(a0),\n dy = r * Math.sin(a0),\n x0 = x + dx,\n y0 = y + dy,\n cw = 1 ^ ccw,\n da = ccw ? a0 - a1 : a1 - a0;\n\n // Is the radius negative? Error.\n if (r < 0) throw new Error(\"negative radius: \" + r);\n\n // Is this path empty? Move to (x0,y0).\n if (this._x1 === null) {\n this._ += \"M\" + x0 + \",\" + y0;\n }\n\n // Or, is (x0,y0) not coincident with the previous point? Line to (x0,y0).\n else if (Math.abs(this._x1 - x0) > epsilon || Math.abs(this._y1 - y0) > epsilon) {\n this._ += \"L\" + x0 + \",\" + y0;\n }\n\n // Is this arc empty? We’re done.\n if (!r) return;\n\n // Does the angle go the wrong way? Flip the direction.\n if (da < 0) da = da % tau + tau;\n\n // Is this a complete circle? Draw two arcs to complete the circle.\n if (da > tauEpsilon) {\n this._ += \"A\" + r + \",\" + r + \",0,1,\" + cw + \",\" + (x - dx) + \",\" + (y - dy) + \"A\" + r + \",\" + r + \",0,1,\" + cw + \",\" + (this._x1 = x0) + \",\" + (this._y1 = y0);\n }\n\n // Is this arc non-empty? Draw an arc!\n else if (da > epsilon) {\n this._ += \"A\" + r + \",\" + r + \",0,\" + (+(da >= pi)) + \",\" + cw + \",\" + (this._x1 = x + r * Math.cos(a1)) + \",\" + (this._y1 = y + r * Math.sin(a1));\n }\n },\n rect: function(x, y, w, h) {\n this._ += \"M\" + (this._x0 = this._x1 = +x) + \",\" + (this._y0 = this._y1 = +y) + \"h\" + (+w) + \"v\" + (+h) + \"h\" + (-w) + \"Z\";\n },\n toString: function() {\n return this._;\n }\n};\n\nexport default path;\n","export default function(x) {\n return function constant() {\n return x;\n };\n}\n","export var abs = Math.abs;\nexport var atan2 = Math.atan2;\nexport var cos = Math.cos;\nexport var max = Math.max;\nexport var min = Math.min;\nexport var sin = Math.sin;\nexport var sqrt = Math.sqrt;\n\nexport var epsilon = 1e-12;\nexport var pi = Math.PI;\nexport var halfPi = pi / 2;\nexport var tau = 2 * pi;\n\nexport function acos(x) {\n return x > 1 ? 0 : x < -1 ? pi : Math.acos(x);\n}\n\nexport function asin(x) {\n return x >= 1 ? halfPi : x <= -1 ? -halfPi : Math.asin(x);\n}\n","import {path} from \"d3-path\";\nimport constant from \"./constant\";\nimport {abs, acos, asin, atan2, cos, epsilon, halfPi, max, min, pi, sin, sqrt, tau} from \"./math\";\n\nfunction arcInnerRadius(d) {\n return d.innerRadius;\n}\n\nfunction arcOuterRadius(d) {\n return d.outerRadius;\n}\n\nfunction arcStartAngle(d) {\n return d.startAngle;\n}\n\nfunction arcEndAngle(d) {\n return d.endAngle;\n}\n\nfunction arcPadAngle(d) {\n return d && d.padAngle; // Note: optional!\n}\n\nfunction intersect(x0, y0, x1, y1, x2, y2, x3, y3) {\n var x10 = x1 - x0, y10 = y1 - y0,\n x32 = x3 - x2, y32 = y3 - y2,\n t = y32 * x10 - x32 * y10;\n if (t * t < epsilon) return;\n t = (x32 * (y0 - y2) - y32 * (x0 - x2)) / t;\n return [x0 + t * x10, y0 + t * y10];\n}\n\n// Compute perpendicular offset line of length rc.\n// http://mathworld.wolfram.com/Circle-LineIntersection.html\nfunction cornerTangents(x0, y0, x1, y1, r1, rc, cw) {\n var x01 = x0 - x1,\n y01 = y0 - y1,\n lo = (cw ? rc : -rc) / sqrt(x01 * x01 + y01 * y01),\n ox = lo * y01,\n oy = -lo * x01,\n x11 = x0 + ox,\n y11 = y0 + oy,\n x10 = x1 + ox,\n y10 = y1 + oy,\n x00 = (x11 + x10) / 2,\n y00 = (y11 + y10) / 2,\n dx = x10 - x11,\n dy = y10 - y11,\n d2 = dx * dx + dy * dy,\n r = r1 - rc,\n D = x11 * y10 - x10 * y11,\n d = (dy < 0 ? -1 : 1) * sqrt(max(0, r * r * d2 - D * D)),\n cx0 = (D * dy - dx * d) / d2,\n cy0 = (-D * dx - dy * d) / d2,\n cx1 = (D * dy + dx * d) / d2,\n cy1 = (-D * dx + dy * d) / d2,\n dx0 = cx0 - x00,\n dy0 = cy0 - y00,\n dx1 = cx1 - x00,\n dy1 = cy1 - y00;\n\n // Pick the closer of the two intersection points.\n // TODO Is there a faster way to determine which intersection to use?\n if (dx0 * dx0 + dy0 * dy0 > dx1 * dx1 + dy1 * dy1) cx0 = cx1, cy0 = cy1;\n\n return {\n cx: cx0,\n cy: cy0,\n x01: -ox,\n y01: -oy,\n x11: cx0 * (r1 / r - 1),\n y11: cy0 * (r1 / r - 1)\n };\n}\n\nexport default function() {\n var innerRadius = arcInnerRadius,\n outerRadius = arcOuterRadius,\n cornerRadius = constant(0),\n padRadius = null,\n startAngle = arcStartAngle,\n endAngle = arcEndAngle,\n padAngle = arcPadAngle,\n context = null;\n\n function arc() {\n var buffer,\n r,\n r0 = +innerRadius.apply(this, arguments),\n r1 = +outerRadius.apply(this, arguments),\n a0 = startAngle.apply(this, arguments) - halfPi,\n a1 = endAngle.apply(this, arguments) - halfPi,\n da = abs(a1 - a0),\n cw = a1 > a0;\n\n if (!context) context = buffer = path();\n\n // Ensure that the outer radius is always larger than the inner radius.\n if (r1 < r0) r = r1, r1 = r0, r0 = r;\n\n // Is it a point?\n if (!(r1 > epsilon)) context.moveTo(0, 0);\n\n // Or is it a circle or annulus?\n else if (da > tau - epsilon) {\n context.moveTo(r1 * cos(a0), r1 * sin(a0));\n context.arc(0, 0, r1, a0, a1, !cw);\n if (r0 > epsilon) {\n context.moveTo(r0 * cos(a1), r0 * sin(a1));\n context.arc(0, 0, r0, a1, a0, cw);\n }\n }\n\n // Or is it a circular or annular sector?\n else {\n var a01 = a0,\n a11 = a1,\n a00 = a0,\n a10 = a1,\n da0 = da,\n da1 = da,\n ap = padAngle.apply(this, arguments) / 2,\n rp = (ap > epsilon) && (padRadius ? +padRadius.apply(this, arguments) : sqrt(r0 * r0 + r1 * r1)),\n rc = min(abs(r1 - r0) / 2, +cornerRadius.apply(this, arguments)),\n rc0 = rc,\n rc1 = rc,\n t0,\n t1;\n\n // Apply padding? Note that since r1 ≥ r0, da1 ≥ da0.\n if (rp > epsilon) {\n var p0 = asin(rp / r0 * sin(ap)),\n p1 = asin(rp / r1 * sin(ap));\n if ((da0 -= p0 * 2) > epsilon) p0 *= (cw ? 1 : -1), a00 += p0, a10 -= p0;\n else da0 = 0, a00 = a10 = (a0 + a1) / 2;\n if ((da1 -= p1 * 2) > epsilon) p1 *= (cw ? 1 : -1), a01 += p1, a11 -= p1;\n else da1 = 0, a01 = a11 = (a0 + a1) / 2;\n }\n\n var x01 = r1 * cos(a01),\n y01 = r1 * sin(a01),\n x10 = r0 * cos(a10),\n y10 = r0 * sin(a10);\n\n // Apply rounded corners?\n if (rc > epsilon) {\n var x11 = r1 * cos(a11),\n y11 = r1 * sin(a11),\n x00 = r0 * cos(a00),\n y00 = r0 * sin(a00),\n oc;\n\n // Restrict the corner radius according to the sector angle.\n if (da <= tau - epsilon && (oc = intersect(x01, y01, x00, y00, x11, y11, x10, y10))) {\n var ax = x01 - oc[0],\n ay = y01 - oc[1],\n bx = x11 - oc[0],\n by = y11 - oc[1],\n kc = 1 / sin(acos((ax * bx + ay * by) / (sqrt(ax * ax + ay * ay) * sqrt(bx * bx + by * by))) / 2),\n lc = sqrt(oc[0] * oc[0] + oc[1] * oc[1]);\n rc0 = min(rc, (r0 - lc) / (kc - 1));\n rc1 = min(rc, (r1 - lc) / (kc + 1));\n }\n }\n\n // Is the sector collapsed to a line?\n if (!(da1 > epsilon)) context.moveTo(x01, y01);\n\n // Does the sector’s outer ring have rounded corners?\n else if (rc1 > epsilon) {\n t0 = cornerTangents(x00, y00, x01, y01, r1, rc1, cw);\n t1 = cornerTangents(x11, y11, x10, y10, r1, rc1, cw);\n\n context.moveTo(t0.cx + t0.x01, t0.cy + t0.y01);\n\n // Have the corners merged?\n if (rc1 < rc) context.arc(t0.cx, t0.cy, rc1, atan2(t0.y01, t0.x01), atan2(t1.y01, t1.x01), !cw);\n\n // Otherwise, draw the two corners and the ring.\n else {\n context.arc(t0.cx, t0.cy, rc1, atan2(t0.y01, t0.x01), atan2(t0.y11, t0.x11), !cw);\n context.arc(0, 0, r1, atan2(t0.cy + t0.y11, t0.cx + t0.x11), atan2(t1.cy + t1.y11, t1.cx + t1.x11), !cw);\n context.arc(t1.cx, t1.cy, rc1, atan2(t1.y11, t1.x11), atan2(t1.y01, t1.x01), !cw);\n }\n }\n\n // Or is the outer ring just a circular arc?\n else context.moveTo(x01, y01), context.arc(0, 0, r1, a01, a11, !cw);\n\n // Is there no inner ring, and it’s a circular sector?\n // Or perhaps it’s an annular sector collapsed due to padding?\n if (!(r0 > epsilon) || !(da0 > epsilon)) context.lineTo(x10, y10);\n\n // Does the sector’s inner ring (or point) have rounded corners?\n else if (rc0 > epsilon) {\n t0 = cornerTangents(x10, y10, x11, y11, r0, -rc0, cw);\n t1 = cornerTangents(x01, y01, x00, y00, r0, -rc0, cw);\n\n context.lineTo(t0.cx + t0.x01, t0.cy + t0.y01);\n\n // Have the corners merged?\n if (rc0 < rc) context.arc(t0.cx, t0.cy, rc0, atan2(t0.y01, t0.x01), atan2(t1.y01, t1.x01), !cw);\n\n // Otherwise, draw the two corners and the ring.\n else {\n context.arc(t0.cx, t0.cy, rc0, atan2(t0.y01, t0.x01), atan2(t0.y11, t0.x11), !cw);\n context.arc(0, 0, r0, atan2(t0.cy + t0.y11, t0.cx + t0.x11), atan2(t1.cy + t1.y11, t1.cx + t1.x11), cw);\n context.arc(t1.cx, t1.cy, rc0, atan2(t1.y11, t1.x11), atan2(t1.y01, t1.x01), !cw);\n }\n }\n\n // Or is the inner ring just a circular arc?\n else context.arc(0, 0, r0, a10, a00, cw);\n }\n\n context.closePath();\n\n if (buffer) return context = null, buffer + \"\" || null;\n }\n\n arc.centroid = function() {\n var r = (+innerRadius.apply(this, arguments) + +outerRadius.apply(this, arguments)) / 2,\n a = (+startAngle.apply(this, arguments) + +endAngle.apply(this, arguments)) / 2 - pi / 2;\n return [cos(a) * r, sin(a) * r];\n };\n\n arc.innerRadius = function(_) {\n return arguments.length ? (innerRadius = typeof _ === \"function\" ? _ : constant(+_), arc) : innerRadius;\n };\n\n arc.outerRadius = function(_) {\n return arguments.length ? (outerRadius = typeof _ === \"function\" ? _ : constant(+_), arc) : outerRadius;\n };\n\n arc.cornerRadius = function(_) {\n return arguments.length ? (cornerRadius = typeof _ === \"function\" ? _ : constant(+_), arc) : cornerRadius;\n };\n\n arc.padRadius = function(_) {\n return arguments.length ? (padRadius = _ == null ? null : typeof _ === \"function\" ? _ : constant(+_), arc) : padRadius;\n };\n\n arc.startAngle = function(_) {\n return arguments.length ? (startAngle = typeof _ === \"function\" ? _ : constant(+_), arc) : startAngle;\n };\n\n arc.endAngle = function(_) {\n return arguments.length ? (endAngle = typeof _ === \"function\" ? _ : constant(+_), arc) : endAngle;\n };\n\n arc.padAngle = function(_) {\n return arguments.length ? (padAngle = typeof _ === \"function\" ? _ : constant(+_), arc) : padAngle;\n };\n\n arc.context = function(_) {\n return arguments.length ? ((context = _ == null ? null : _), arc) : context;\n };\n\n return arc;\n}\n","function Linear(context) {\n this._context = context;\n}\n\nLinear.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; // proceed\n default: this._context.lineTo(x, y); break;\n }\n }\n};\n\nexport default function(context) {\n return new Linear(context);\n}\n","export function x(p) {\n return p[0];\n}\n\nexport function y(p) {\n return p[1];\n}\n","import {path} from \"d3-path\";\nimport constant from \"./constant\";\nimport curveLinear from \"./curve/linear\";\nimport {x as pointX, y as pointY} from \"./point\";\n\nexport default function() {\n var x = pointX,\n y = pointY,\n defined = constant(true),\n context = null,\n curve = curveLinear,\n output = null;\n\n function line(data) {\n var i,\n n = data.length,\n d,\n defined0 = false,\n buffer;\n\n if (context == null) output = curve(buffer = path());\n\n for (i = 0; i <= n; ++i) {\n if (!(i < n && defined(d = data[i], i, data)) === defined0) {\n if (defined0 = !defined0) output.lineStart();\n else output.lineEnd();\n }\n if (defined0) output.point(+x(d, i, data), +y(d, i, data));\n }\n\n if (buffer) return output = null, buffer + \"\" || null;\n }\n\n line.x = function(_) {\n return arguments.length ? (x = typeof _ === \"function\" ? _ : constant(+_), line) : x;\n };\n\n line.y = function(_) {\n return arguments.length ? (y = typeof _ === \"function\" ? _ : constant(+_), line) : y;\n };\n\n line.defined = function(_) {\n return arguments.length ? (defined = typeof _ === \"function\" ? _ : constant(!!_), line) : defined;\n };\n\n line.curve = function(_) {\n return arguments.length ? (curve = _, context != null && (output = curve(context)), line) : curve;\n };\n\n line.context = function(_) {\n return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), line) : context;\n };\n\n return line;\n}\n","import {path} from \"d3-path\";\nimport constant from \"./constant\";\nimport curveLinear from \"./curve/linear\";\nimport line from \"./line\";\nimport {x as pointX, y as pointY} from \"./point\";\n\nexport default function() {\n var x0 = pointX,\n x1 = null,\n y0 = constant(0),\n y1 = pointY,\n defined = constant(true),\n context = null,\n curve = curveLinear,\n output = null;\n\n function area(data) {\n var i,\n j,\n k,\n n = data.length,\n d,\n defined0 = false,\n buffer,\n x0z = new Array(n),\n y0z = new Array(n);\n\n if (context == null) output = curve(buffer = path());\n\n for (i = 0; i <= n; ++i) {\n if (!(i < n && defined(d = data[i], i, data)) === defined0) {\n if (defined0 = !defined0) {\n j = i;\n output.areaStart();\n output.lineStart();\n } else {\n output.lineEnd();\n output.lineStart();\n for (k = i - 1; k >= j; --k) {\n output.point(x0z[k], y0z[k]);\n }\n output.lineEnd();\n output.areaEnd();\n }\n }\n if (defined0) {\n x0z[i] = +x0(d, i, data), y0z[i] = +y0(d, i, data);\n output.point(x1 ? +x1(d, i, data) : x0z[i], y1 ? +y1(d, i, data) : y0z[i]);\n }\n }\n\n if (buffer) return output = null, buffer + \"\" || null;\n }\n\n function arealine() {\n return line().defined(defined).curve(curve).context(context);\n }\n\n area.x = function(_) {\n return arguments.length ? (x0 = typeof _ === \"function\" ? _ : constant(+_), x1 = null, area) : x0;\n };\n\n area.x0 = function(_) {\n return arguments.length ? (x0 = typeof _ === \"function\" ? _ : constant(+_), area) : x0;\n };\n\n area.x1 = function(_) {\n return arguments.length ? (x1 = _ == null ? null : typeof _ === \"function\" ? _ : constant(+_), area) : x1;\n };\n\n area.y = function(_) {\n return arguments.length ? (y0 = typeof _ === \"function\" ? _ : constant(+_), y1 = null, area) : y0;\n };\n\n area.y0 = function(_) {\n return arguments.length ? (y0 = typeof _ === \"function\" ? _ : constant(+_), area) : y0;\n };\n\n area.y1 = function(_) {\n return arguments.length ? (y1 = _ == null ? null : typeof _ === \"function\" ? _ : constant(+_), area) : y1;\n };\n\n area.lineX0 =\n area.lineY0 = function() {\n return arealine().x(x0).y(y0);\n };\n\n area.lineY1 = function() {\n return arealine().x(x0).y(y1);\n };\n\n area.lineX1 = function() {\n return arealine().x(x1).y(y0);\n };\n\n area.defined = function(_) {\n return arguments.length ? (defined = typeof _ === \"function\" ? _ : constant(!!_), area) : defined;\n };\n\n area.curve = function(_) {\n return arguments.length ? (curve = _, context != null && (output = curve(context)), area) : curve;\n };\n\n area.context = function(_) {\n return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), area) : context;\n };\n\n return area;\n}\n","export default function(a, b) {\n return b < a ? -1 : b > a ? 1 : b >= a ? 0 : NaN;\n}\n","export default function(d) {\n return d;\n}\n","import curveLinear from \"./linear\";\n\nexport var curveRadialLinear = curveRadial(curveLinear);\n\nfunction Radial(curve) {\n this._curve = curve;\n}\n\nRadial.prototype = {\n areaStart: function() {\n this._curve.areaStart();\n },\n areaEnd: function() {\n this._curve.areaEnd();\n },\n lineStart: function() {\n this._curve.lineStart();\n },\n lineEnd: function() {\n this._curve.lineEnd();\n },\n point: function(a, r) {\n this._curve.point(r * Math.sin(a), r * -Math.cos(a));\n }\n};\n\nexport default function curveRadial(curve) {\n\n function radial(context) {\n return new Radial(curve(context));\n }\n\n radial._curve = curve;\n\n return radial;\n}\n","import curveRadial, {curveRadialLinear} from \"./curve/radial\";\nimport line from \"./line\";\n\nexport function lineRadial(l) {\n var c = l.curve;\n\n l.angle = l.x, delete l.x;\n l.radius = l.y, delete l.y;\n\n l.curve = function(_) {\n return arguments.length ? c(curveRadial(_)) : c()._curve;\n };\n\n return l;\n}\n\nexport default function() {\n return lineRadial(line().curve(curveRadialLinear));\n}\n","export var slice = Array.prototype.slice;\n","import {pi, tau} from \"../math\";\n\nexport default {\n draw: function(context, size) {\n var r = Math.sqrt(size / pi);\n context.moveTo(r, 0);\n context.arc(0, 0, r, 0, tau);\n }\n};\n","export default {\n draw: function(context, size) {\n var r = Math.sqrt(size / 5) / 2;\n context.moveTo(-3 * r, -r);\n context.lineTo(-r, -r);\n context.lineTo(-r, -3 * r);\n context.lineTo(r, -3 * r);\n context.lineTo(r, -r);\n context.lineTo(3 * r, -r);\n context.lineTo(3 * r, r);\n context.lineTo(r, r);\n context.lineTo(r, 3 * r);\n context.lineTo(-r, 3 * r);\n context.lineTo(-r, r);\n context.lineTo(-3 * r, r);\n context.closePath();\n }\n};\n","var tan30 = Math.sqrt(1 / 3),\n tan30_2 = tan30 * 2;\n\nexport default {\n draw: function(context, size) {\n var y = Math.sqrt(size / tan30_2),\n x = y * tan30;\n context.moveTo(0, -y);\n context.lineTo(x, 0);\n context.lineTo(0, y);\n context.lineTo(-x, 0);\n context.closePath();\n }\n};\n","import {pi, tau} from \"../math\";\n\nvar ka = 0.89081309152928522810,\n kr = Math.sin(pi / 10) / Math.sin(7 * pi / 10),\n kx = Math.sin(tau / 10) * kr,\n ky = -Math.cos(tau / 10) * kr;\n\nexport default {\n draw: function(context, size) {\n var r = Math.sqrt(size * ka),\n x = kx * r,\n y = ky * r;\n context.moveTo(0, -r);\n context.lineTo(x, y);\n for (var i = 1; i < 5; ++i) {\n var a = tau * i / 5,\n c = Math.cos(a),\n s = Math.sin(a);\n context.lineTo(s * r, -c * r);\n context.lineTo(c * x - s * y, s * x + c * y);\n }\n context.closePath();\n }\n};\n","export default {\n draw: function(context, size) {\n var w = Math.sqrt(size),\n x = -w / 2;\n context.rect(x, x, w, w);\n }\n};\n","var sqrt3 = Math.sqrt(3);\n\nexport default {\n draw: function(context, size) {\n var y = -Math.sqrt(size / (sqrt3 * 3));\n context.moveTo(0, y * 2);\n context.lineTo(-sqrt3 * y, -y);\n context.lineTo(sqrt3 * y, -y);\n context.closePath();\n }\n};\n","var c = -0.5,\n s = Math.sqrt(3) / 2,\n k = 1 / Math.sqrt(12),\n a = (k / 2 + 1) * 3;\n\nexport default {\n draw: function(context, size) {\n var r = Math.sqrt(size / a),\n x0 = r / 2,\n y0 = r * k,\n x1 = x0,\n y1 = r * k + r,\n x2 = -x1,\n y2 = y1;\n context.moveTo(x0, y0);\n context.lineTo(x1, y1);\n context.lineTo(x2, y2);\n context.lineTo(c * x0 - s * y0, s * x0 + c * y0);\n context.lineTo(c * x1 - s * y1, s * x1 + c * y1);\n context.lineTo(c * x2 - s * y2, s * x2 + c * y2);\n context.lineTo(c * x0 + s * y0, c * y0 - s * x0);\n context.lineTo(c * x1 + s * y1, c * y1 - s * x1);\n context.lineTo(c * x2 + s * y2, c * y2 - s * x2);\n context.closePath();\n }\n};\n","export default function() {}\n","export function point(that, x, y) {\n that._context.bezierCurveTo(\n (2 * that._x0 + that._x1) / 3,\n (2 * that._y0 + that._y1) / 3,\n (that._x0 + 2 * that._x1) / 3,\n (that._y0 + 2 * that._y1) / 3,\n (that._x0 + 4 * that._x1 + x) / 6,\n (that._y0 + 4 * that._y1 + y) / 6\n );\n}\n\nexport function Basis(context) {\n this._context = context;\n}\n\nBasis.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 =\n this._y0 = this._y1 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 3: point(this, this._x1, this._y1); // proceed\n case 2: this._context.lineTo(this._x1, this._y1); break;\n }\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; this._context.lineTo((5 * this._x0 + this._x1) / 6, (5 * this._y0 + this._y1) / 6); // proceed\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = x;\n this._y0 = this._y1, this._y1 = y;\n }\n};\n\nexport default function(context) {\n return new Basis(context);\n}\n","import noop from \"../noop\";\nimport {point} from \"./basis\";\n\nfunction BasisClosed(context) {\n this._context = context;\n}\n\nBasisClosed.prototype = {\n areaStart: noop,\n areaEnd: noop,\n lineStart: function() {\n this._x0 = this._x1 = this._x2 = this._x3 = this._x4 =\n this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 1: {\n this._context.moveTo(this._x2, this._y2);\n this._context.closePath();\n break;\n }\n case 2: {\n this._context.moveTo((this._x2 + 2 * this._x3) / 3, (this._y2 + 2 * this._y3) / 3);\n this._context.lineTo((this._x3 + 2 * this._x2) / 3, (this._y3 + 2 * this._y2) / 3);\n this._context.closePath();\n break;\n }\n case 3: {\n this.point(this._x2, this._y2);\n this.point(this._x3, this._y3);\n this.point(this._x4, this._y4);\n break;\n }\n }\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._x2 = x, this._y2 = y; break;\n case 1: this._point = 2; this._x3 = x, this._y3 = y; break;\n case 2: this._point = 3; this._x4 = x, this._y4 = y; this._context.moveTo((this._x0 + 4 * this._x1 + x) / 6, (this._y0 + 4 * this._y1 + y) / 6); break;\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = x;\n this._y0 = this._y1, this._y1 = y;\n }\n};\n\nexport default function(context) {\n return new BasisClosed(context);\n}\n","import {point} from \"./basis\";\n\nfunction BasisOpen(context) {\n this._context = context;\n}\n\nBasisOpen.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 =\n this._y0 = this._y1 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; var x0 = (this._x0 + 4 * this._x1 + x) / 6, y0 = (this._y0 + 4 * this._y1 + y) / 6; this._line ? this._context.lineTo(x0, y0) : this._context.moveTo(x0, y0); break;\n case 3: this._point = 4; // proceed\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = x;\n this._y0 = this._y1, this._y1 = y;\n }\n};\n\nexport default function(context) {\n return new BasisOpen(context);\n}\n","import {Basis} from \"./basis\";\n\nfunction Bundle(context, beta) {\n this._basis = new Basis(context);\n this._beta = beta;\n}\n\nBundle.prototype = {\n lineStart: function() {\n this._x = [];\n this._y = [];\n this._basis.lineStart();\n },\n lineEnd: function() {\n var x = this._x,\n y = this._y,\n j = x.length - 1;\n\n if (j > 0) {\n var x0 = x[0],\n y0 = y[0],\n dx = x[j] - x0,\n dy = y[j] - y0,\n i = -1,\n t;\n\n while (++i <= j) {\n t = i / j;\n this._basis.point(\n this._beta * x[i] + (1 - this._beta) * (x0 + t * dx),\n this._beta * y[i] + (1 - this._beta) * (y0 + t * dy)\n );\n }\n }\n\n this._x = this._y = null;\n this._basis.lineEnd();\n },\n point: function(x, y) {\n this._x.push(+x);\n this._y.push(+y);\n }\n};\n\nexport default (function custom(beta) {\n\n function bundle(context) {\n return beta === 1 ? new Basis(context) : new Bundle(context, beta);\n }\n\n bundle.beta = function(beta) {\n return custom(+beta);\n };\n\n return bundle;\n})(0.85);\n","export function point(that, x, y) {\n that._context.bezierCurveTo(\n that._x1 + that._k * (that._x2 - that._x0),\n that._y1 + that._k * (that._y2 - that._y0),\n that._x2 + that._k * (that._x1 - x),\n that._y2 + that._k * (that._y1 - y),\n that._x2,\n that._y2\n );\n}\n\nexport function Cardinal(context, tension) {\n this._context = context;\n this._k = (1 - tension) / 6;\n}\n\nCardinal.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 = this._x2 =\n this._y0 = this._y1 = this._y2 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 2: this._context.lineTo(this._x2, this._y2); break;\n case 3: point(this, this._x1, this._y1); break;\n }\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; this._x1 = x, this._y1 = y; break;\n case 2: this._point = 3; // proceed\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(tension) {\n\n function cardinal(context) {\n return new Cardinal(context, tension);\n }\n\n cardinal.tension = function(tension) {\n return custom(+tension);\n };\n\n return cardinal;\n})(0);\n","import noop from \"../noop\";\nimport {point} from \"./cardinal\";\n\nexport function CardinalClosed(context, tension) {\n this._context = context;\n this._k = (1 - tension) / 6;\n}\n\nCardinalClosed.prototype = {\n areaStart: noop,\n areaEnd: noop,\n lineStart: function() {\n this._x0 = this._x1 = this._x2 = this._x3 = this._x4 = this._x5 =\n this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = this._y5 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 1: {\n this._context.moveTo(this._x3, this._y3);\n this._context.closePath();\n break;\n }\n case 2: {\n this._context.lineTo(this._x3, this._y3);\n this._context.closePath();\n break;\n }\n case 3: {\n this.point(this._x3, this._y3);\n this.point(this._x4, this._y4);\n this.point(this._x5, this._y5);\n break;\n }\n }\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._x3 = x, this._y3 = y; break;\n case 1: this._point = 2; this._context.moveTo(this._x4 = x, this._y4 = y); break;\n case 2: this._point = 3; this._x5 = x, this._y5 = y; break;\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(tension) {\n\n function cardinal(context) {\n return new CardinalClosed(context, tension);\n }\n\n cardinal.tension = function(tension) {\n return custom(+tension);\n };\n\n return cardinal;\n})(0);\n","import {point} from \"./cardinal\";\n\nexport function CardinalOpen(context, tension) {\n this._context = context;\n this._k = (1 - tension) / 6;\n}\n\nCardinalOpen.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 = this._x2 =\n this._y0 = this._y1 = this._y2 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; this._line ? this._context.lineTo(this._x2, this._y2) : this._context.moveTo(this._x2, this._y2); break;\n case 3: this._point = 4; // proceed\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(tension) {\n\n function cardinal(context) {\n return new CardinalOpen(context, tension);\n }\n\n cardinal.tension = function(tension) {\n return custom(+tension);\n };\n\n return cardinal;\n})(0);\n","import {epsilon} from \"../math\";\nimport {Cardinal} from \"./cardinal\";\n\nexport function point(that, x, y) {\n var x1 = that._x1,\n y1 = that._y1,\n x2 = that._x2,\n y2 = that._y2;\n\n if (that._l01_a > epsilon) {\n var a = 2 * that._l01_2a + 3 * that._l01_a * that._l12_a + that._l12_2a,\n n = 3 * that._l01_a * (that._l01_a + that._l12_a);\n x1 = (x1 * a - that._x0 * that._l12_2a + that._x2 * that._l01_2a) / n;\n y1 = (y1 * a - that._y0 * that._l12_2a + that._y2 * that._l01_2a) / n;\n }\n\n if (that._l23_a > epsilon) {\n var b = 2 * that._l23_2a + 3 * that._l23_a * that._l12_a + that._l12_2a,\n m = 3 * that._l23_a * (that._l23_a + that._l12_a);\n x2 = (x2 * b + that._x1 * that._l23_2a - x * that._l12_2a) / m;\n y2 = (y2 * b + that._y1 * that._l23_2a - y * that._l12_2a) / m;\n }\n\n that._context.bezierCurveTo(x1, y1, x2, y2, that._x2, that._y2);\n}\n\nfunction CatmullRom(context, alpha) {\n this._context = context;\n this._alpha = alpha;\n}\n\nCatmullRom.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 = this._x2 =\n this._y0 = this._y1 = this._y2 = NaN;\n this._l01_a = this._l12_a = this._l23_a =\n this._l01_2a = this._l12_2a = this._l23_2a =\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 2: this._context.lineTo(this._x2, this._y2); break;\n case 3: this.point(this._x2, this._y2); break;\n }\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n\n if (this._point) {\n var x23 = this._x2 - x,\n y23 = this._y2 - y;\n this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));\n }\n\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; // proceed\n default: point(this, x, y); break;\n }\n\n this._l01_a = this._l12_a, this._l12_a = this._l23_a;\n this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(alpha) {\n\n function catmullRom(context) {\n return alpha ? new CatmullRom(context, alpha) : new Cardinal(context, 0);\n }\n\n catmullRom.alpha = function(alpha) {\n return custom(+alpha);\n };\n\n return catmullRom;\n})(0.5);\n","import {CardinalClosed} from \"./cardinalClosed\";\nimport noop from \"../noop\";\nimport {point} from \"./catmullRom\";\n\nfunction CatmullRomClosed(context, alpha) {\n this._context = context;\n this._alpha = alpha;\n}\n\nCatmullRomClosed.prototype = {\n areaStart: noop,\n areaEnd: noop,\n lineStart: function() {\n this._x0 = this._x1 = this._x2 = this._x3 = this._x4 = this._x5 =\n this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = this._y5 = NaN;\n this._l01_a = this._l12_a = this._l23_a =\n this._l01_2a = this._l12_2a = this._l23_2a =\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 1: {\n this._context.moveTo(this._x3, this._y3);\n this._context.closePath();\n break;\n }\n case 2: {\n this._context.lineTo(this._x3, this._y3);\n this._context.closePath();\n break;\n }\n case 3: {\n this.point(this._x3, this._y3);\n this.point(this._x4, this._y4);\n this.point(this._x5, this._y5);\n break;\n }\n }\n },\n point: function(x, y) {\n x = +x, y = +y;\n\n if (this._point) {\n var x23 = this._x2 - x,\n y23 = this._y2 - y;\n this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));\n }\n\n switch (this._point) {\n case 0: this._point = 1; this._x3 = x, this._y3 = y; break;\n case 1: this._point = 2; this._context.moveTo(this._x4 = x, this._y4 = y); break;\n case 2: this._point = 3; this._x5 = x, this._y5 = y; break;\n default: point(this, x, y); break;\n }\n\n this._l01_a = this._l12_a, this._l12_a = this._l23_a;\n this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(alpha) {\n\n function catmullRom(context) {\n return alpha ? new CatmullRomClosed(context, alpha) : new CardinalClosed(context, 0);\n }\n\n catmullRom.alpha = function(alpha) {\n return custom(+alpha);\n };\n\n return catmullRom;\n})(0.5);\n","import {CardinalOpen} from \"./cardinalOpen\";\nimport {point} from \"./catmullRom\";\n\nfunction CatmullRomOpen(context, alpha) {\n this._context = context;\n this._alpha = alpha;\n}\n\nCatmullRomOpen.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 = this._x2 =\n this._y0 = this._y1 = this._y2 = NaN;\n this._l01_a = this._l12_a = this._l23_a =\n this._l01_2a = this._l12_2a = this._l23_2a =\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n\n if (this._point) {\n var x23 = this._x2 - x,\n y23 = this._y2 - y;\n this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));\n }\n\n switch (this._point) {\n case 0: this._point = 1; break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; this._line ? this._context.lineTo(this._x2, this._y2) : this._context.moveTo(this._x2, this._y2); break;\n case 3: this._point = 4; // proceed\n default: point(this, x, y); break;\n }\n\n this._l01_a = this._l12_a, this._l12_a = this._l23_a;\n this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(alpha) {\n\n function catmullRom(context) {\n return alpha ? new CatmullRomOpen(context, alpha) : new CardinalOpen(context, 0);\n }\n\n catmullRom.alpha = function(alpha) {\n return custom(+alpha);\n };\n\n return catmullRom;\n})(0.5);\n","import noop from \"../noop\";\n\nfunction LinearClosed(context) {\n this._context = context;\n}\n\nLinearClosed.prototype = {\n areaStart: noop,\n areaEnd: noop,\n lineStart: function() {\n this._point = 0;\n },\n lineEnd: function() {\n if (this._point) this._context.closePath();\n },\n point: function(x, y) {\n x = +x, y = +y;\n if (this._point) this._context.lineTo(x, y);\n else this._point = 1, this._context.moveTo(x, y);\n }\n};\n\nexport default function(context) {\n return new LinearClosed(context);\n}\n","function sign(x) {\n return x < 0 ? -1 : 1;\n}\n\n// Calculate the slopes of the tangents (Hermite-type interpolation) based on\n// the following paper: Steffen, M. 1990. A Simple Method for Monotonic\n// Interpolation in One Dimension. Astronomy and Astrophysics, Vol. 239, NO.\n// NOV(II), P. 443, 1990.\nfunction slope3(that, x2, y2) {\n var h0 = that._x1 - that._x0,\n h1 = x2 - that._x1,\n s0 = (that._y1 - that._y0) / (h0 || h1 < 0 && -0),\n s1 = (y2 - that._y1) / (h1 || h0 < 0 && -0),\n p = (s0 * h1 + s1 * h0) / (h0 + h1);\n return (sign(s0) + sign(s1)) * Math.min(Math.abs(s0), Math.abs(s1), 0.5 * Math.abs(p)) || 0;\n}\n\n// Calculate a one-sided slope.\nfunction slope2(that, t) {\n var h = that._x1 - that._x0;\n return h ? (3 * (that._y1 - that._y0) / h - t) / 2 : t;\n}\n\n// According to https://en.wikipedia.org/wiki/Cubic_Hermite_spline#Representations\n// \"you can express cubic Hermite interpolation in terms of cubic Bézier curves\n// with respect to the four values p0, p0 + m0 / 3, p1 - m1 / 3, p1\".\nfunction point(that, t0, t1) {\n var x0 = that._x0,\n y0 = that._y0,\n x1 = that._x1,\n y1 = that._y1,\n dx = (x1 - x0) / 3;\n that._context.bezierCurveTo(x0 + dx, y0 + dx * t0, x1 - dx, y1 - dx * t1, x1, y1);\n}\n\nfunction MonotoneX(context) {\n this._context = context;\n}\n\nMonotoneX.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 =\n this._y0 = this._y1 =\n this._t0 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 2: this._context.lineTo(this._x1, this._y1); break;\n case 3: point(this, this._t0, slope2(this, this._t0)); break;\n }\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n var t1 = NaN;\n\n x = +x, y = +y;\n if (x === this._x1 && y === this._y1) return; // Ignore coincident points.\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; point(this, slope2(this, t1 = slope3(this, x, y)), t1); break;\n default: point(this, this._t0, t1 = slope3(this, x, y)); break;\n }\n\n this._x0 = this._x1, this._x1 = x;\n this._y0 = this._y1, this._y1 = y;\n this._t0 = t1;\n }\n}\n\nfunction MonotoneY(context) {\n this._context = new ReflectContext(context);\n}\n\n(MonotoneY.prototype = Object.create(MonotoneX.prototype)).point = function(x, y) {\n MonotoneX.prototype.point.call(this, y, x);\n};\n\nfunction ReflectContext(context) {\n this._context = context;\n}\n\nReflectContext.prototype = {\n moveTo: function(x, y) { this._context.moveTo(y, x); },\n closePath: function() { this._context.closePath(); },\n lineTo: function(x, y) { this._context.lineTo(y, x); },\n bezierCurveTo: function(x1, y1, x2, y2, x, y) { this._context.bezierCurveTo(y1, x1, y2, x2, y, x); }\n};\n\nexport function monotoneX(context) {\n return new MonotoneX(context);\n}\n\nexport function monotoneY(context) {\n return new MonotoneY(context);\n}\n","function Natural(context) {\n this._context = context;\n}\n\nNatural.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x = [];\n this._y = [];\n },\n lineEnd: function() {\n var x = this._x,\n y = this._y,\n n = x.length;\n\n if (n) {\n this._line ? this._context.lineTo(x[0], y[0]) : this._context.moveTo(x[0], y[0]);\n if (n === 2) {\n this._context.lineTo(x[1], y[1]);\n } else {\n var px = controlPoints(x),\n py = controlPoints(y);\n for (var i0 = 0, i1 = 1; i1 < n; ++i0, ++i1) {\n this._context.bezierCurveTo(px[0][i0], py[0][i0], px[1][i0], py[1][i0], x[i1], y[i1]);\n }\n }\n }\n\n if (this._line || (this._line !== 0 && n === 1)) this._context.closePath();\n this._line = 1 - this._line;\n this._x = this._y = null;\n },\n point: function(x, y) {\n this._x.push(+x);\n this._y.push(+y);\n }\n};\n\n// See https://www.particleincell.com/2012/bezier-splines/ for derivation.\nfunction controlPoints(x) {\n var i,\n n = x.length - 1,\n m,\n a = new Array(n),\n b = new Array(n),\n r = new Array(n);\n a[0] = 0, b[0] = 2, r[0] = x[0] + 2 * x[1];\n for (i = 1; i < n - 1; ++i) a[i] = 1, b[i] = 4, r[i] = 4 * x[i] + 2 * x[i + 1];\n a[n - 1] = 2, b[n - 1] = 7, r[n - 1] = 8 * x[n - 1] + x[n];\n for (i = 1; i < n; ++i) m = a[i] / b[i - 1], b[i] -= m, r[i] -= m * r[i - 1];\n a[n - 1] = r[n - 1] / b[n - 1];\n for (i = n - 2; i >= 0; --i) a[i] = (r[i] - a[i + 1]) / b[i];\n b[n - 1] = (x[n] + a[n - 1]) / 2;\n for (i = 0; i < n - 1; ++i) b[i] = 2 * x[i + 1] - a[i + 1];\n return [a, b];\n}\n\nexport default function(context) {\n return new Natural(context);\n}\n","function Step(context, t) {\n this._context = context;\n this._t = t;\n}\n\nStep.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x = this._y = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n if (0 < this._t && this._t < 1 && this._point === 2) this._context.lineTo(this._x, this._y);\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n if (this._line >= 0) this._t = 1 - this._t, this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; // proceed\n default: {\n if (this._t <= 0) {\n this._context.lineTo(this._x, y);\n this._context.lineTo(x, y);\n } else {\n var x1 = this._x * (1 - this._t) + x * this._t;\n this._context.lineTo(x1, this._y);\n this._context.lineTo(x1, y);\n }\n break;\n }\n }\n this._x = x, this._y = y;\n }\n};\n\nexport default function(context) {\n return new Step(context, 0.5);\n}\n\nexport function stepBefore(context) {\n return new Step(context, 0);\n}\n\nexport function stepAfter(context) {\n return new Step(context, 1);\n}\n","export default function(series, order) {\n if (!((n = series.length) > 1)) return;\n for (var i = 1, j, s0, s1 = series[order[0]], n, m = s1.length; i < n; ++i) {\n s0 = s1, s1 = series[order[i]];\n for (j = 0; j < m; ++j) {\n s1[j][1] += s1[j][0] = isNaN(s0[j][1]) ? s0[j][0] : s0[j][1];\n }\n }\n}\n","export default function(series) {\n var n = series.length, o = new Array(n);\n while (--n >= 0) o[n] = n;\n return o;\n}\n","import {slice} from \"./array\";\nimport constant from \"./constant\";\nimport offsetNone from \"./offset/none\";\nimport orderNone from \"./order/none\";\n\nfunction stackValue(d, key) {\n return d[key];\n}\n\nexport default function() {\n var keys = constant([]),\n order = orderNone,\n offset = offsetNone,\n value = stackValue;\n\n function stack(data) {\n var kz = keys.apply(this, arguments),\n i,\n m = data.length,\n n = kz.length,\n sz = new Array(n),\n oz;\n\n for (i = 0; i < n; ++i) {\n for (var ki = kz[i], si = sz[i] = new Array(m), j = 0, sij; j < m; ++j) {\n si[j] = sij = [0, +value(data[j], ki, j, data)];\n sij.data = data[j];\n }\n si.key = ki;\n }\n\n for (i = 0, oz = order(sz); i < n; ++i) {\n sz[oz[i]].index = i;\n }\n\n offset(sz, oz);\n return sz;\n }\n\n stack.keys = function(_) {\n return arguments.length ? (keys = typeof _ === \"function\" ? _ : constant(slice.call(_)), stack) : keys;\n };\n\n stack.value = function(_) {\n return arguments.length ? (value = typeof _ === \"function\" ? _ : constant(+_), stack) : value;\n };\n\n stack.order = function(_) {\n return arguments.length ? (order = _ == null ? orderNone : typeof _ === \"function\" ? _ : constant(slice.call(_)), stack) : order;\n };\n\n stack.offset = function(_) {\n return arguments.length ? (offset = _ == null ? offsetNone : _, stack) : offset;\n };\n\n return stack;\n}\n","import none from \"./none\";\n\nexport default function(series) {\n var sums = series.map(sum);\n return none(series).sort(function(a, b) { return sums[a] - sums[b]; });\n}\n\nexport function sum(series) {\n var s = 0, i = -1, n = series.length, v;\n while (++i < n) if (v = +series[i][1]) s += v;\n return s;\n}\n","export function cubicIn(t) {\n return t * t * t;\n}\n\nexport function cubicOut(t) {\n return --t * t * t + 1;\n}\n\nexport function cubicInOut(t) {\n return ((t *= 2) <= 1 ? t * t * t : (t -= 2) * t * t + 2) / 2;\n}\n","var exponent = 3;\n\nexport var polyIn = (function custom(e) {\n e = +e;\n\n function polyIn(t) {\n return Math.pow(t, e);\n }\n\n polyIn.exponent = custom;\n\n return polyIn;\n})(exponent);\n\nexport var polyOut = (function custom(e) {\n e = +e;\n\n function polyOut(t) {\n return 1 - Math.pow(1 - t, e);\n }\n\n polyOut.exponent = custom;\n\n return polyOut;\n})(exponent);\n\nexport var polyInOut = (function custom(e) {\n e = +e;\n\n function polyInOut(t) {\n return ((t *= 2) <= 1 ? Math.pow(t, e) : 2 - Math.pow(2 - t, e)) / 2;\n }\n\n polyInOut.exponent = custom;\n\n return polyInOut;\n})(exponent);\n","var pi = Math.PI,\n halfPi = pi / 2;\n\nexport function sinIn(t) {\n return 1 - Math.cos(t * halfPi);\n}\n\nexport function sinOut(t) {\n return Math.sin(t * halfPi);\n}\n\nexport function sinInOut(t) {\n return (1 - Math.cos(pi * t)) / 2;\n}\n","var b1 = 4 / 11,\n b2 = 6 / 11,\n b3 = 8 / 11,\n b4 = 3 / 4,\n b5 = 9 / 11,\n b6 = 10 / 11,\n b7 = 15 / 16,\n b8 = 21 / 22,\n b9 = 63 / 64,\n b0 = 1 / b1 / b1;\n\nexport function bounceIn(t) {\n return 1 - bounceOut(1 - t);\n}\n\nexport function bounceOut(t) {\n return (t = +t) < b1 ? b0 * t * t : t < b3 ? b0 * (t -= b2) * t + b4 : t < b6 ? b0 * (t -= b5) * t + b7 : b0 * (t -= b8) * t + b9;\n}\n\nexport function bounceInOut(t) {\n return ((t *= 2) <= 1 ? 1 - bounceOut(1 - t) : bounceOut(t - 1) + 1) / 2;\n}\n","var overshoot = 1.70158;\n\nexport var backIn = (function custom(s) {\n s = +s;\n\n function backIn(t) {\n return t * t * ((s + 1) * t - s);\n }\n\n backIn.overshoot = custom;\n\n return backIn;\n})(overshoot);\n\nexport var backOut = (function custom(s) {\n s = +s;\n\n function backOut(t) {\n return --t * t * ((s + 1) * t + s) + 1;\n }\n\n backOut.overshoot = custom;\n\n return backOut;\n})(overshoot);\n\nexport var backInOut = (function custom(s) {\n s = +s;\n\n function backInOut(t) {\n return ((t *= 2) < 1 ? t * t * ((s + 1) * t - s) : (t -= 2) * t * ((s + 1) * t + s) + 2) / 2;\n }\n\n backInOut.overshoot = custom;\n\n return backInOut;\n})(overshoot);\n","var tau = 2 * Math.PI,\n amplitude = 1,\n period = 0.3;\n\nexport var elasticIn = (function custom(a, p) {\n var s = Math.asin(1 / (a = Math.max(1, a))) * (p /= tau);\n\n function elasticIn(t) {\n return a * Math.pow(2, 10 * --t) * Math.sin((s - t) / p);\n }\n\n elasticIn.amplitude = function(a) { return custom(a, p * tau); };\n elasticIn.period = function(p) { return custom(a, p); };\n\n return elasticIn;\n})(amplitude, period);\n\nexport var elasticOut = (function custom(a, p) {\n var s = Math.asin(1 / (a = Math.max(1, a))) * (p /= tau);\n\n function elasticOut(t) {\n return 1 - a * Math.pow(2, -10 * (t = +t)) * Math.sin((t + s) / p);\n }\n\n elasticOut.amplitude = function(a) { return custom(a, p * tau); };\n elasticOut.period = function(p) { return custom(a, p); };\n\n return elasticOut;\n})(amplitude, period);\n\nexport var elasticInOut = (function custom(a, p) {\n var s = Math.asin(1 / (a = Math.max(1, a))) * (p /= tau);\n\n function elasticInOut(t) {\n return ((t = t * 2 - 1) < 0\n ? a * Math.pow(2, 10 * t) * Math.sin((s - t) / p)\n : 2 - a * Math.pow(2, -10 * t) * Math.sin((s + t) / p)) / 2;\n }\n\n elasticInOut.amplitude = function(a) { return custom(a, p * tau); };\n elasticInOut.period = function(p) { return custom(a, p); };\n\n return elasticInOut;\n})(amplitude, period);\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","export function x(d) {\n return d[0];\n}\n\nexport function y(d) {\n return d[1];\n}\n","function RedBlackTree() {\n this._ = null; // root node\n}\n\nexport function RedBlackNode(node) {\n node.U = // parent node\n node.C = // color - true for red, false for black\n node.L = // left node\n node.R = // right node\n node.P = // previous node\n node.N = null; // next node\n}\n\nRedBlackTree.prototype = {\n constructor: RedBlackTree,\n\n insert: function(after, node) {\n var parent, grandpa, uncle;\n\n if (after) {\n node.P = after;\n node.N = after.N;\n if (after.N) after.N.P = node;\n after.N = node;\n if (after.R) {\n after = after.R;\n while (after.L) after = after.L;\n after.L = node;\n } else {\n after.R = node;\n }\n parent = after;\n } else if (this._) {\n after = RedBlackFirst(this._);\n node.P = null;\n node.N = after;\n after.P = after.L = node;\n parent = after;\n } else {\n node.P = node.N = null;\n this._ = node;\n parent = null;\n }\n node.L = node.R = null;\n node.U = parent;\n node.C = true;\n\n after = node;\n while (parent && parent.C) {\n grandpa = parent.U;\n if (parent === grandpa.L) {\n uncle = grandpa.R;\n if (uncle && uncle.C) {\n parent.C = uncle.C = false;\n grandpa.C = true;\n after = grandpa;\n } else {\n if (after === parent.R) {\n RedBlackRotateLeft(this, parent);\n after = parent;\n parent = after.U;\n }\n parent.C = false;\n grandpa.C = true;\n RedBlackRotateRight(this, grandpa);\n }\n } else {\n uncle = grandpa.L;\n if (uncle && uncle.C) {\n parent.C = uncle.C = false;\n grandpa.C = true;\n after = grandpa;\n } else {\n if (after === parent.L) {\n RedBlackRotateRight(this, parent);\n after = parent;\n parent = after.U;\n }\n parent.C = false;\n grandpa.C = true;\n RedBlackRotateLeft(this, grandpa);\n }\n }\n parent = after.U;\n }\n this._.C = false;\n },\n\n remove: function(node) {\n if (node.N) node.N.P = node.P;\n if (node.P) node.P.N = node.N;\n node.N = node.P = null;\n\n var parent = node.U,\n sibling,\n left = node.L,\n right = node.R,\n next,\n red;\n\n if (!left) next = right;\n else if (!right) next = left;\n else next = RedBlackFirst(right);\n\n if (parent) {\n if (parent.L === node) parent.L = next;\n else parent.R = next;\n } else {\n this._ = next;\n }\n\n if (left && right) {\n red = next.C;\n next.C = node.C;\n next.L = left;\n left.U = next;\n if (next !== right) {\n parent = next.U;\n next.U = node.U;\n node = next.R;\n parent.L = node;\n next.R = right;\n right.U = next;\n } else {\n next.U = parent;\n parent = next;\n node = next.R;\n }\n } else {\n red = node.C;\n node = next;\n }\n\n if (node) node.U = parent;\n if (red) return;\n if (node && node.C) { node.C = false; return; }\n\n do {\n if (node === this._) break;\n if (node === parent.L) {\n sibling = parent.R;\n if (sibling.C) {\n sibling.C = false;\n parent.C = true;\n RedBlackRotateLeft(this, parent);\n sibling = parent.R;\n }\n if ((sibling.L && sibling.L.C)\n || (sibling.R && sibling.R.C)) {\n if (!sibling.R || !sibling.R.C) {\n sibling.L.C = false;\n sibling.C = true;\n RedBlackRotateRight(this, sibling);\n sibling = parent.R;\n }\n sibling.C = parent.C;\n parent.C = sibling.R.C = false;\n RedBlackRotateLeft(this, parent);\n node = this._;\n break;\n }\n } else {\n sibling = parent.L;\n if (sibling.C) {\n sibling.C = false;\n parent.C = true;\n RedBlackRotateRight(this, parent);\n sibling = parent.L;\n }\n if ((sibling.L && sibling.L.C)\n || (sibling.R && sibling.R.C)) {\n if (!sibling.L || !sibling.L.C) {\n sibling.R.C = false;\n sibling.C = true;\n RedBlackRotateLeft(this, sibling);\n sibling = parent.L;\n }\n sibling.C = parent.C;\n parent.C = sibling.L.C = false;\n RedBlackRotateRight(this, parent);\n node = this._;\n break;\n }\n }\n sibling.C = true;\n node = parent;\n parent = parent.U;\n } while (!node.C);\n\n if (node) node.C = false;\n }\n};\n\nfunction RedBlackRotateLeft(tree, node) {\n var p = node,\n q = node.R,\n parent = p.U;\n\n if (parent) {\n if (parent.L === p) parent.L = q;\n else parent.R = q;\n } else {\n tree._ = q;\n }\n\n q.U = parent;\n p.U = q;\n p.R = q.L;\n if (p.R) p.R.U = p;\n q.L = p;\n}\n\nfunction RedBlackRotateRight(tree, node) {\n var p = node,\n q = node.L,\n parent = p.U;\n\n if (parent) {\n if (parent.L === p) parent.L = q;\n else parent.R = q;\n } else {\n tree._ = q;\n }\n\n q.U = parent;\n p.U = q;\n p.L = q.R;\n if (p.L) p.L.U = p;\n q.R = p;\n}\n\nfunction RedBlackFirst(node) {\n while (node.L) node = node.L;\n return node;\n}\n\nexport default RedBlackTree;\n","import {cells, edges, epsilon} from \"./Diagram\";\n\nexport function createEdge(left, right, v0, v1) {\n var edge = [null, null],\n index = edges.push(edge) - 1;\n edge.left = left;\n edge.right = right;\n if (v0) setEdgeEnd(edge, left, right, v0);\n if (v1) setEdgeEnd(edge, right, left, v1);\n cells[left.index].halfedges.push(index);\n cells[right.index].halfedges.push(index);\n return edge;\n}\n\nexport function createBorderEdge(left, v0, v1) {\n var edge = [v0, v1];\n edge.left = left;\n return edge;\n}\n\nexport function setEdgeEnd(edge, left, right, vertex) {\n if (!edge[0] && !edge[1]) {\n edge[0] = vertex;\n edge.left = left;\n edge.right = right;\n } else if (edge.left === right) {\n edge[1] = vertex;\n } else {\n edge[0] = vertex;\n }\n}\n\n// Liang–Barsky line clipping.\nfunction clipEdge(edge, x0, y0, x1, y1) {\n var a = edge[0],\n b = edge[1],\n ax = a[0],\n ay = a[1],\n bx = b[0],\n by = b[1],\n t0 = 0,\n t1 = 1,\n dx = bx - ax,\n dy = by - ay,\n r;\n\n r = x0 - ax;\n if (!dx && r > 0) return;\n r /= dx;\n if (dx < 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n } else if (dx > 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n }\n\n r = x1 - ax;\n if (!dx && r < 0) return;\n r /= dx;\n if (dx < 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n } else if (dx > 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n }\n\n r = y0 - ay;\n if (!dy && r > 0) return;\n r /= dy;\n if (dy < 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n } else if (dy > 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n }\n\n r = y1 - ay;\n if (!dy && r < 0) return;\n r /= dy;\n if (dy < 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n } else if (dy > 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n }\n\n if (!(t0 > 0) && !(t1 < 1)) return true; // TODO Better check?\n\n if (t0 > 0) edge[0] = [ax + t0 * dx, ay + t0 * dy];\n if (t1 < 1) edge[1] = [ax + t1 * dx, ay + t1 * dy];\n return true;\n}\n\nfunction connectEdge(edge, x0, y0, x1, y1) {\n var v1 = edge[1];\n if (v1) return true;\n\n var v0 = edge[0],\n left = edge.left,\n right = edge.right,\n lx = left[0],\n ly = left[1],\n rx = right[0],\n ry = right[1],\n fx = (lx + rx) / 2,\n fy = (ly + ry) / 2,\n fm,\n fb;\n\n if (ry === ly) {\n if (fx < x0 || fx >= x1) return;\n if (lx > rx) {\n if (!v0) v0 = [fx, y0];\n else if (v0[1] >= y1) return;\n v1 = [fx, y1];\n } else {\n if (!v0) v0 = [fx, y1];\n else if (v0[1] < y0) return;\n v1 = [fx, y0];\n }\n } else {\n fm = (lx - rx) / (ry - ly);\n fb = fy - fm * fx;\n if (fm < -1 || fm > 1) {\n if (lx > rx) {\n if (!v0) v0 = [(y0 - fb) / fm, y0];\n else if (v0[1] >= y1) return;\n v1 = [(y1 - fb) / fm, y1];\n } else {\n if (!v0) v0 = [(y1 - fb) / fm, y1];\n else if (v0[1] < y0) return;\n v1 = [(y0 - fb) / fm, y0];\n }\n } else {\n if (ly < ry) {\n if (!v0) v0 = [x0, fm * x0 + fb];\n else if (v0[0] >= x1) return;\n v1 = [x1, fm * x1 + fb];\n } else {\n if (!v0) v0 = [x1, fm * x1 + fb];\n else if (v0[0] < x0) return;\n v1 = [x0, fm * x0 + fb];\n }\n }\n }\n\n edge[0] = v0;\n edge[1] = v1;\n return true;\n}\n\nexport function clipEdges(x0, y0, x1, y1) {\n var i = edges.length,\n edge;\n\n while (i--) {\n if (!connectEdge(edge = edges[i], x0, y0, x1, y1)\n || !clipEdge(edge, x0, y0, x1, y1)\n || !(Math.abs(edge[0][0] - edge[1][0]) > epsilon\n || Math.abs(edge[0][1] - edge[1][1]) > epsilon)) {\n delete edges[i];\n }\n }\n}\n","import {createBorderEdge} from \"./Edge\";\nimport {cells, edges, epsilon} from \"./Diagram\";\n\nexport function createCell(site) {\n return cells[site.index] = {\n site: site,\n halfedges: []\n };\n}\n\nfunction cellHalfedgeAngle(cell, edge) {\n var site = cell.site,\n va = edge.left,\n vb = edge.right;\n if (site === vb) vb = va, va = site;\n if (vb) return Math.atan2(vb[1] - va[1], vb[0] - va[0]);\n if (site === va) va = edge[1], vb = edge[0];\n else va = edge[0], vb = edge[1];\n return Math.atan2(va[0] - vb[0], vb[1] - va[1]);\n}\n\nexport function cellHalfedgeStart(cell, edge) {\n return edge[+(edge.left !== cell.site)];\n}\n\nexport function cellHalfedgeEnd(cell, edge) {\n return edge[+(edge.left === cell.site)];\n}\n\nexport function sortCellHalfedges() {\n for (var i = 0, n = cells.length, cell, halfedges, j, m; i < n; ++i) {\n if ((cell = cells[i]) && (m = (halfedges = cell.halfedges).length)) {\n var index = new Array(m),\n array = new Array(m);\n for (j = 0; j < m; ++j) index[j] = j, array[j] = cellHalfedgeAngle(cell, edges[halfedges[j]]);\n index.sort(function(i, j) { return array[j] - array[i]; });\n for (j = 0; j < m; ++j) array[j] = halfedges[index[j]];\n for (j = 0; j < m; ++j) halfedges[j] = array[j];\n }\n }\n}\n\nexport function clipCells(x0, y0, x1, y1) {\n var nCells = cells.length,\n iCell,\n cell,\n site,\n iHalfedge,\n halfedges,\n nHalfedges,\n start,\n startX,\n startY,\n end,\n endX,\n endY,\n cover = true;\n\n for (iCell = 0; iCell < nCells; ++iCell) {\n if (cell = cells[iCell]) {\n site = cell.site;\n halfedges = cell.halfedges;\n iHalfedge = halfedges.length;\n\n // Remove any dangling clipped edges.\n while (iHalfedge--) {\n if (!edges[halfedges[iHalfedge]]) {\n halfedges.splice(iHalfedge, 1);\n }\n }\n\n // Insert any border edges as necessary.\n iHalfedge = 0, nHalfedges = halfedges.length;\n while (iHalfedge < nHalfedges) {\n end = cellHalfedgeEnd(cell, edges[halfedges[iHalfedge]]), endX = end[0], endY = end[1];\n start = cellHalfedgeStart(cell, edges[halfedges[++iHalfedge % nHalfedges]]), startX = start[0], startY = start[1];\n if (Math.abs(endX - startX) > epsilon || Math.abs(endY - startY) > epsilon) {\n halfedges.splice(iHalfedge, 0, edges.push(createBorderEdge(site, end,\n Math.abs(endX - x0) < epsilon && y1 - endY > epsilon ? [x0, Math.abs(startX - x0) < epsilon ? startY : y1]\n : Math.abs(endY - y1) < epsilon && x1 - endX > epsilon ? [Math.abs(startY - y1) < epsilon ? startX : x1, y1]\n : Math.abs(endX - x1) < epsilon && endY - y0 > epsilon ? [x1, Math.abs(startX - x1) < epsilon ? startY : y0]\n : Math.abs(endY - y0) < epsilon && endX - x0 > epsilon ? [Math.abs(startY - y0) < epsilon ? startX : x0, y0]\n : null)) - 1);\n ++nHalfedges;\n }\n }\n\n if (nHalfedges) cover = false;\n }\n }\n\n // If there weren’t any edges, have the closest site cover the extent.\n // It doesn’t matter which corner of the extent we measure!\n if (cover) {\n var dx, dy, d2, dc = Infinity;\n\n for (iCell = 0, cover = null; iCell < nCells; ++iCell) {\n if (cell = cells[iCell]) {\n site = cell.site;\n dx = site[0] - x0;\n dy = site[1] - y0;\n d2 = dx * dx + dy * dy;\n if (d2 < dc) dc = d2, cover = cell;\n }\n }\n\n if (cover) {\n var v00 = [x0, y0], v01 = [x0, y1], v11 = [x1, y1], v10 = [x1, y0];\n cover.halfedges.push(\n edges.push(createBorderEdge(site = cover.site, v00, v01)) - 1,\n edges.push(createBorderEdge(site, v01, v11)) - 1,\n edges.push(createBorderEdge(site, v11, v10)) - 1,\n edges.push(createBorderEdge(site, v10, v00)) - 1\n );\n }\n }\n\n // Lastly delete any cells with no edges; these were entirely clipped.\n for (iCell = 0; iCell < nCells; ++iCell) {\n if (cell = cells[iCell]) {\n if (!cell.halfedges.length) {\n delete cells[iCell];\n }\n }\n }\n}\n","import {RedBlackNode} from \"./RedBlackTree\";\nimport {circles, epsilon2} from \"./Diagram\";\n\nvar circlePool = [];\n\nexport var firstCircle;\n\nfunction Circle() {\n RedBlackNode(this);\n this.x =\n this.y =\n this.arc =\n this.site =\n this.cy = null;\n}\n\nexport function attachCircle(arc) {\n var lArc = arc.P,\n rArc = arc.N;\n\n if (!lArc || !rArc) return;\n\n var lSite = lArc.site,\n cSite = arc.site,\n rSite = rArc.site;\n\n if (lSite === rSite) return;\n\n var bx = cSite[0],\n by = cSite[1],\n ax = lSite[0] - bx,\n ay = lSite[1] - by,\n cx = rSite[0] - bx,\n cy = rSite[1] - by;\n\n var d = 2 * (ax * cy - ay * cx);\n if (d >= -epsilon2) return;\n\n var ha = ax * ax + ay * ay,\n hc = cx * cx + cy * cy,\n x = (cy * ha - ay * hc) / d,\n y = (ax * hc - cx * ha) / d;\n\n var circle = circlePool.pop() || new Circle;\n circle.arc = arc;\n circle.site = cSite;\n circle.x = x + bx;\n circle.y = (circle.cy = y + by) + Math.sqrt(x * x + y * y); // y bottom\n\n arc.circle = circle;\n\n var before = null,\n node = circles._;\n\n while (node) {\n if (circle.y < node.y || (circle.y === node.y && circle.x <= node.x)) {\n if (node.L) node = node.L;\n else { before = node.P; break; }\n } else {\n if (node.R) node = node.R;\n else { before = node; break; }\n }\n }\n\n circles.insert(before, circle);\n if (!before) firstCircle = circle;\n}\n\nexport function detachCircle(arc) {\n var circle = arc.circle;\n if (circle) {\n if (!circle.P) firstCircle = circle.N;\n circles.remove(circle);\n circlePool.push(circle);\n RedBlackNode(circle);\n arc.circle = null;\n }\n}\n","import {RedBlackNode} from \"./RedBlackTree\";\nimport {createCell} from \"./Cell\";\nimport {attachCircle, detachCircle} from \"./Circle\";\nimport {createEdge, setEdgeEnd} from \"./Edge\";\nimport {beaches, epsilon} from \"./Diagram\";\n\nvar beachPool = [];\n\nfunction Beach() {\n RedBlackNode(this);\n this.edge =\n this.site =\n this.circle = null;\n}\n\nfunction createBeach(site) {\n var beach = beachPool.pop() || new Beach;\n beach.site = site;\n return beach;\n}\n\nfunction detachBeach(beach) {\n detachCircle(beach);\n beaches.remove(beach);\n beachPool.push(beach);\n RedBlackNode(beach);\n}\n\nexport function removeBeach(beach) {\n var circle = beach.circle,\n x = circle.x,\n y = circle.cy,\n vertex = [x, y],\n previous = beach.P,\n next = beach.N,\n disappearing = [beach];\n\n detachBeach(beach);\n\n var lArc = previous;\n while (lArc.circle\n && Math.abs(x - lArc.circle.x) < epsilon\n && Math.abs(y - lArc.circle.cy) < epsilon) {\n previous = lArc.P;\n disappearing.unshift(lArc);\n detachBeach(lArc);\n lArc = previous;\n }\n\n disappearing.unshift(lArc);\n detachCircle(lArc);\n\n var rArc = next;\n while (rArc.circle\n && Math.abs(x - rArc.circle.x) < epsilon\n && Math.abs(y - rArc.circle.cy) < epsilon) {\n next = rArc.N;\n disappearing.push(rArc);\n detachBeach(rArc);\n rArc = next;\n }\n\n disappearing.push(rArc);\n detachCircle(rArc);\n\n var nArcs = disappearing.length,\n iArc;\n for (iArc = 1; iArc < nArcs; ++iArc) {\n rArc = disappearing[iArc];\n lArc = disappearing[iArc - 1];\n setEdgeEnd(rArc.edge, lArc.site, rArc.site, vertex);\n }\n\n lArc = disappearing[0];\n rArc = disappearing[nArcs - 1];\n rArc.edge = createEdge(lArc.site, rArc.site, null, vertex);\n\n attachCircle(lArc);\n attachCircle(rArc);\n}\n\nexport function addBeach(site) {\n var x = site[0],\n directrix = site[1],\n lArc,\n rArc,\n dxl,\n dxr,\n node = beaches._;\n\n while (node) {\n dxl = leftBreakPoint(node, directrix) - x;\n if (dxl > epsilon) node = node.L; else {\n dxr = x - rightBreakPoint(node, directrix);\n if (dxr > epsilon) {\n if (!node.R) {\n lArc = node;\n break;\n }\n node = node.R;\n } else {\n if (dxl > -epsilon) {\n lArc = node.P;\n rArc = node;\n } else if (dxr > -epsilon) {\n lArc = node;\n rArc = node.N;\n } else {\n lArc = rArc = node;\n }\n break;\n }\n }\n }\n\n createCell(site);\n var newArc = createBeach(site);\n beaches.insert(lArc, newArc);\n\n if (!lArc && !rArc) return;\n\n if (lArc === rArc) {\n detachCircle(lArc);\n rArc = createBeach(lArc.site);\n beaches.insert(newArc, rArc);\n newArc.edge = rArc.edge = createEdge(lArc.site, newArc.site);\n attachCircle(lArc);\n attachCircle(rArc);\n return;\n }\n\n if (!rArc) { // && lArc\n newArc.edge = createEdge(lArc.site, newArc.site);\n return;\n }\n\n // else lArc !== rArc\n detachCircle(lArc);\n detachCircle(rArc);\n\n var lSite = lArc.site,\n ax = lSite[0],\n ay = lSite[1],\n bx = site[0] - ax,\n by = site[1] - ay,\n rSite = rArc.site,\n cx = rSite[0] - ax,\n cy = rSite[1] - ay,\n d = 2 * (bx * cy - by * cx),\n hb = bx * bx + by * by,\n hc = cx * cx + cy * cy,\n vertex = [(cy * hb - by * hc) / d + ax, (bx * hc - cx * hb) / d + ay];\n\n setEdgeEnd(rArc.edge, lSite, rSite, vertex);\n newArc.edge = createEdge(lSite, site, null, vertex);\n rArc.edge = createEdge(site, rSite, null, vertex);\n attachCircle(lArc);\n attachCircle(rArc);\n}\n\nfunction leftBreakPoint(arc, directrix) {\n var site = arc.site,\n rfocx = site[0],\n rfocy = site[1],\n pby2 = rfocy - directrix;\n\n if (!pby2) return rfocx;\n\n var lArc = arc.P;\n if (!lArc) return -Infinity;\n\n site = lArc.site;\n var lfocx = site[0],\n lfocy = site[1],\n plby2 = lfocy - directrix;\n\n if (!plby2) return lfocx;\n\n var hl = lfocx - rfocx,\n aby2 = 1 / pby2 - 1 / plby2,\n b = hl / plby2;\n\n if (aby2) return (-b + Math.sqrt(b * b - 2 * aby2 * (hl * hl / (-2 * plby2) - lfocy + plby2 / 2 + rfocy - pby2 / 2))) / aby2 + rfocx;\n\n return (rfocx + lfocx) / 2;\n}\n\nfunction rightBreakPoint(arc, directrix) {\n var rArc = arc.N;\n if (rArc) return leftBreakPoint(rArc, directrix);\n var site = arc.site;\n return site[1] === directrix ? site[0] : Infinity;\n}\n","import {addBeach, removeBeach} from \"./Beach\";\nimport {sortCellHalfedges, cellHalfedgeStart, clipCells} from \"./Cell\";\nimport {firstCircle} from \"./Circle\";\nimport {clipEdges} from \"./Edge\";\nimport RedBlackTree from \"./RedBlackTree\";\n\nexport var epsilon = 1e-6;\nexport var epsilon2 = 1e-12;\nexport var beaches;\nexport var cells;\nexport var circles;\nexport var edges;\n\nfunction triangleArea(a, b, c) {\n return (a[0] - c[0]) * (b[1] - a[1]) - (a[0] - b[0]) * (c[1] - a[1]);\n}\n\nfunction lexicographic(a, b) {\n return b[1] - a[1]\n || b[0] - a[0];\n}\n\nexport default function Diagram(sites, extent) {\n var site = sites.sort(lexicographic).pop(),\n x,\n y,\n circle;\n\n edges = [];\n cells = new Array(sites.length);\n beaches = new RedBlackTree;\n circles = new RedBlackTree;\n\n while (true) {\n circle = firstCircle;\n if (site && (!circle || site[1] < circle.y || (site[1] === circle.y && site[0] < circle.x))) {\n if (site[0] !== x || site[1] !== y) {\n addBeach(site);\n x = site[0], y = site[1];\n }\n site = sites.pop();\n } else if (circle) {\n removeBeach(circle.arc);\n } else {\n break;\n }\n }\n\n sortCellHalfedges();\n\n if (extent) {\n var x0 = +extent[0][0],\n y0 = +extent[0][1],\n x1 = +extent[1][0],\n y1 = +extent[1][1];\n clipEdges(x0, y0, x1, y1);\n clipCells(x0, y0, x1, y1);\n }\n\n this.edges = edges;\n this.cells = cells;\n\n beaches =\n circles =\n edges =\n cells = null;\n}\n\nDiagram.prototype = {\n constructor: Diagram,\n\n polygons: function() {\n var edges = this.edges;\n\n return this.cells.map(function(cell) {\n var polygon = cell.halfedges.map(function(i) { return cellHalfedgeStart(cell, edges[i]); });\n polygon.data = cell.site.data;\n return polygon;\n });\n },\n\n triangles: function() {\n var triangles = [],\n edges = this.edges;\n\n this.cells.forEach(function(cell, i) {\n if (!(m = (halfedges = cell.halfedges).length)) return;\n var site = cell.site,\n halfedges,\n j = -1,\n m,\n s0,\n e1 = edges[halfedges[m - 1]],\n s1 = e1.left === site ? e1.right : e1.left;\n\n while (++j < m) {\n s0 = s1;\n e1 = edges[halfedges[j]];\n s1 = e1.left === site ? e1.right : e1.left;\n if (s0 && s1 && i < s0.index && i < s1.index && triangleArea(site, s0, s1) < 0) {\n triangles.push([site.data, s0.data, s1.data]);\n }\n }\n });\n\n return triangles;\n },\n\n links: function() {\n return this.edges.filter(function(edge) {\n return edge.right;\n }).map(function(edge) {\n return {\n source: edge.left.data,\n target: edge.right.data\n };\n });\n },\n\n find: function(x, y, radius) {\n var that = this, i0, i1 = that._found || 0, n = that.cells.length, cell;\n\n // Use the previously-found cell, or start with an arbitrary one.\n while (!(cell = that.cells[i1])) if (++i1 >= n) return null;\n var dx = x - cell.site[0], dy = y - cell.site[1], d2 = dx * dx + dy * dy;\n\n // Traverse the half-edges to find a closer cell, if any.\n do {\n cell = that.cells[i0 = i1], i1 = null;\n cell.halfedges.forEach(function(e) {\n var edge = that.edges[e], v = edge.left;\n if ((v === cell.site || !v) && !(v = edge.right)) return;\n var vx = x - v[0], vy = y - v[1], v2 = vx * vx + vy * vy;\n if (v2 < d2) d2 = v2, i1 = v.index;\n });\n } while (i1 !== null);\n\n that._found = i0;\n\n return radius == null || d2 <= radius * radius ? cell.site : null;\n }\n}\n","import constant from \"./constant\";\nimport {x as pointX, y as pointY} from \"./point\";\nimport Diagram, {epsilon} from \"./Diagram\";\n\nexport default function() {\n var x = pointX,\n y = pointY,\n extent = null;\n\n function voronoi(data) {\n return new Diagram(data.map(function(d, i) {\n var s = [Math.round(x(d, i, data) / epsilon) * epsilon, Math.round(y(d, i, data) / epsilon) * epsilon];\n s.index = i;\n s.data = d;\n return s;\n }), extent);\n }\n\n voronoi.polygons = function(data) {\n return voronoi(data).polygons();\n };\n\n voronoi.links = function(data) {\n return voronoi(data).links();\n };\n\n voronoi.triangles = function(data) {\n return voronoi(data).triangles();\n };\n\n voronoi.x = function(_) {\n return arguments.length ? (x = typeof _ === \"function\" ? _ : constant(+_), voronoi) : x;\n };\n\n voronoi.y = function(_) {\n return arguments.length ? (y = typeof _ === \"function\" ? _ : constant(+_), voronoi) : y;\n };\n\n voronoi.extent = function(_) {\n return arguments.length ? (extent = _ == null ? null : [[+_[0][0], +_[0][1]], [+_[1][0], +_[1][1]]], voronoi) : extent && [[extent[0][0], extent[0][1]], [extent[1][0], extent[1][1]]];\n };\n\n voronoi.size = function(_) {\n return arguments.length ? (extent = _ == null ? null : [[0, 0], [+_[0], +_[1]]], voronoi) : extent && [extent[1][0] - extent[0][0], extent[1][1] - extent[0][1]];\n };\n\n return voronoi;\n}\n","/**\n * This class represents a selection applied on a data array.\n *\n * @class Selection\n */\nclass Selection {\n /**\n * Creates an instance of Selection.\n * @param {Array} data Array of DataObjects.\n * @memberof Selection\n */\n constructor () {\n this._data = [];\n // // map of id to data\n this._idMap = {};\n this._dataMap = {};\n this._mode = '';\n // data.forEach((item, idx) => {\n // const index = item.id || idx;\n // this._idMap[index] = item;\n // });\n // // array to store data in enter phase\n this._enterdata = [];\n // // array to store data in exit phase\n this._exitdata = [];\n }\n /**\n * Gets the object bound to a class\n *\n * @return {Object} current data set bound to the class\n * @memberof Selection\n */\n getObjects () {\n return Object.values(this._idMap);\n }\n\n /**\n * This method is used to supply seed data to a selection.\n *\n * @param {Array} newData Seed data to create the enter selection.\n * @param {Functon | undefined } idGetter This function is used to uniqely identify a data entry.\n * @return {Selection} Modified selection.\n * @memberof Selection\n */\n data (newData, idGetter) {\n if (idGetter) {\n this._data = [];\n this._idGetter = idGetter;\n const tempMap = {};\n\n newData.forEach((...params) => {\n const index = idGetter(...params);\n tempMap[index] = params[0];\n });\n // check if any data items have been removed\n const purgedIds = [];\n\n Object.keys(this._idMap).forEach((id) => {\n if (!tempMap[id]) {\n purgedIds.push(id);\n }\n });\n\n Object.keys(tempMap).forEach((id) => {\n if (!this._idMap[id]) {\n this._enterdata.push(tempMap[id]);\n } else {\n this._idMap[id] = tempMap[id];\n this._data.push(tempMap[id]);\n }\n });\n // move the purged items to exit selection\n purgedIds.forEach((id) => {\n const purged = this._idMap[id];\n this._exitdata.push(purged);\n // this._data = this._data.slice(id, 1);\n delete this._idMap[id];\n });\n // this._data = this._data.slice(temp, this._data.length);\n\n return this;\n }\n // no id getter supplied so use indices\n if (newData.length > this._data.length) {\n const startIdx = this._data.length;\n for (let i = startIdx; i < newData.length; i += 1) {\n this._enterdata.push(newData[i]);\n }\n } else {\n // push to exit selection\n const temp = newData.length;\n for (let i = temp; i < this._data.length; i += 1) {\n const purged = this._data[i];\n delete this._idMap[purged.id];\n this._exitdata.push(purged);\n }\n this._data = this._data.slice(temp, this._data.length);\n }\n return this;\n }\n\n /**\n * Applies the supplied callback to each data element\n * and returns a new selection.\n *\n * @param {Function} callback Callback to execute on each item.\n * @return {Selection} New selection with data created using callback.\n * @memberof EnterSelection\n */\n append (callback) {\n this[`_${this._mode}data`].forEach((...params) => {\n const data = params[0];\n const id = this._idGetter ? this._idGetter(...params) : (data.id || params[1]);\n this._idMap[id] = callback(...params);\n this._dataMap[id] = data;\n });\n this._mode = '';\n return this;\n }\n\n /**\n * This method returns an enter selection that\n * allows or update operations.\n *\n * @return {EnterSelection} Instance of enter selection.\n * @memberof Selection\n */\n enter () {\n this._mode = 'enter';\n return this;\n // return new EnterSelection(this._enterdata, this._idMap, this._idGetter);\n }\n\n /**\n * This method is used to set key value pairs\n * on data objects.\n *\n * @param {string} key Name of property.\n * @param {any} value Value of property.\n * @return {Selection} Modified selection.\n * @memberof Selection\n */\n attr (key, value) {\n this._data.forEach(item => item.attr(key, value));\n return this;\n }\n\n /**\n * This method merges the data of one selection with another.\n *\n * @param {Selection} selection Instance of selection.\n * @return {Selection} Modified selection.\n * @memberof Selection\n */\n merge (selection) {\n selection._data.forEach((...params) => {\n const id = this._idGetter ? this._idGetter(...params) : (params[0].id || params[1]);\n this._idMap[id] = params[0];\n this._data.push(params[0]);\n });\n // reset enter selection\n this._enterdata = [];\n return this;\n }\n\n /**\n * Returns a selection with exit data.\n *\n * @return {Selection} Instance of selection.\n * @memberof Selection\n */\n exit () {\n this._mode = 'exit';\n // const exitdata = this._exitdata;\n // const exitSelection = new Selection(exitdata);\n // this._exitdata = [];\n return this;\n }\n\n each (fn) {\n Object.keys(this._idMap).forEach((e, i) => {\n fn(this._idMap[e], this._dataMap[e], i);\n });\n return this;\n }\n\n map (fn) {\n Object.keys(this._idMap).forEach((...params) => {\n const key = params[0];\n this._idMap[key] = fn(this._idMap[key], ...params, this._dataMap[key]);\n });\n return this;\n }\n\n /**\n * Executes the cleanup operation associated with data objets.\n *\n * @memberof Selection\n */\n remove () {\n // do cleanup on DDO's\n const data = this[`_${this._mode}data`];\n\n data.forEach(item => item.remove());\n if (this._mode === '') {\n this.each(e => e.remove());\n }\n this[`_${this._mode}data`] = [];\n this._mode = '';\n }\n}\n\nexport default Selection;\n","/* global window, requestAnimationFrame, cancelAnimationFrame */\nimport { FieldType, DimensionSubtype, DateTimeFormatter, default as DataModel } from 'datamodel';\nimport {\n axisLeft,\n axisRight,\n axisTop,\n axisBottom\n} from 'd3-axis';\nimport {\n symbolCircle,\n symbolCross,\n symbolDiamond,\n symbolSquare,\n symbolStar,\n symbolWye,\n symbolTriangle,\n symbol,\n stack as d3Stack,\n stackOffsetDiverging,\n stackOrderNone,\n stackOrderAscending,\n stackOrderDescending,\n stackOffsetNone,\n stackOffsetExpand,\n stackOffsetWiggle,\n pie,\n arc,\n line,\n curveLinear,\n curveStepAfter,\n curveStepBefore,\n curveStep,\n curveCatmullRom,\n area\n} from 'd3-shape';\nimport { scaleBand } from 'd3-scale';\nimport { nest } from 'd3-collection';\nimport {\n interpolate,\n interpolateRgb,\n piecewise,\n interpolateNumber,\n interpolateHslLong\n} from 'd3-interpolate';\nimport {\n easeCubic,\n easeBounce,\n easePoly,\n easeBack,\n easeCircle,\n easeLinear,\n easeElastic\n} from 'd3-ease';\nimport {\n color,\n rgb,\n hsl\n} from 'd3-color';\nimport { voronoi } from 'd3-voronoi';\nimport Model from 'hyperdis';\nimport { dataSelect } from './DataSystem';\nimport * as STACK_CONFIG from './enums/stack-config';\nimport { DM_OPERATION_GROUP } from './enums';\n\nconst { InvalidAwareTypes } = DataModel;\nconst HTMLElement = window.HTMLElement;\n\nconst isSimpleObject = (obj) => {\n let token;\n if (typeof obj === 'object') {\n if (obj === null) { return false; }\n token = Object.prototype.toString.call(obj);\n if (token === '[object Object]') {\n return (obj.constructor.toString().match(/^function (.*)\\(\\)/m) || [])[1] === 'Object';\n }\n }\n return false;\n};\n\n/**\n * Returns unique id\n * @return {string} Unique id string\n */\nconst\n getUniqueId = () => `id-${new Date().getTime()}${Math.round(Math.random() * 10000)}`;\n\n/**\n * Deep copies an object and returns a new object.\n * @param {Object} o Object to clone\n * @return {Object} New Object.\n */\nconst clone = (o) => {\n const output = {};\n let v;\n for (const key in o) {\n if ({}.hasOwnProperty.call(o, key)) {\n v = o[key];\n output[key] = isSimpleObject(v) ? clone(v) : v;\n }\n }\n return output;\n};\n\n/**\n* Checks the existence of keys in an object\n* @param {Array} keys Set of keys which are to be checked\n* @param {Object} obj whose keys are checked from the set of keys provided\n* @return {Object} Error if the keys are absent, or the object itself\n*/\nconst checkExistence = (keys, obj) => {\n const nonExistentKeys = [];\n keys.forEach((key) => {\n if (key in obj) {\n return;\n }\n nonExistentKeys.push(key);\n });\n return nonExistentKeys;\n};\n\nconst sanitizeIP = {\n typeObj: (keys, obj) => {\n if (typeof obj !== 'object') {\n return Error('Argument type object expected');\n }\n\n const nonExistentKeys = checkExistence(keys, obj);\n if (nonExistentKeys.length) {\n return Error(`Missing keys from parameter ${nonExistentKeys.join(', ')}`);\n }\n return obj;\n },\n\n /* istanbul ignore next */ htmlElem: (elem) => {\n if (!(elem instanceof HTMLElement)) {\n return Error('HTMLElement required');\n }\n return elem;\n }\n};\n\n/**\n * Gets the maximum value from an array of objects for a given property name\n * @param {Array.} data Array of objects\n * @param {string} field Field name\n * @return {number} Maximum value\n */\nconst getMax = (data, field) => Math.max(...data.map(d => d[field]));\n\n/**\n * Gets the minimum value from an array of objects for a given property name\n * @param {Array.} data Array of objects\n * @param {string} field Field name\n * @return {number} Minimum value\n */\nconst getMin = (data, field) => Math.min(...data.map(d => d[field]));\n\n/**\n * Gets the domain from the data based on the field name and type of field\n * @param {Array. | Array.} data Data Array\n * @param {Array.} fields Array of fields from where the domain will be calculated\n * @param {string} fieldType Type of field - nominal, quantitiative, temporal.\n * @return {Array} Usually contains a min and max value if field is quantitative or\n * an array of values if field type is nominal or ordinal\n */\nconst getDomainFromData = (data, fields, fieldType) => {\n let domain;\n const domArr = [];\n data = data[0] instanceof Array ? data : [data];\n switch (fieldType) {\n case DimensionSubtype.CATEGORICAL:\n domain = [].concat(...data.map(arr => arr.map(d => d[fields[0]]).filter(d => d !== undefined)));\n break;\n default:\n for (let i = 0, len = data.length; i < len; i++) {\n const arr = data[i];\n const [field0, field1] = fields;\n const arr0 = arr.filter(d => !isNaN(d[field0]));\n const arr1 = arr.filter(d => !isNaN(d[field1]));\n if (arr0.length || arr1.length) {\n const firstMin = getMin(arr0, field0);\n const secondMin = getMin(arr1, field1);\n const firstMax = getMax(arr0, field0);\n const secondMax = getMax(arr1, field1);\n domArr.push([Math.min(firstMin, secondMin), Math.max(firstMax, secondMax)]);\n }\n }\n domain = domArr.length ? [Math.min(...domArr.map(d => d[0])), Math.max(...domArr.map(d => d[1]))] : [];\n break;\n }\n return domain;\n};\n\n/**\n * Union Domain values\n * @param {Array.} domains Array of domain values\n * @param {string} fieldType type of field - dimension,measure or datetime.\n * @return {Array} Unioned domain of all domain values.\n */\nconst unionDomain = (domains, fieldType) => {\n let domain = [];\n domains = domains.filter(dom => dom && dom.length);\n if (domains.length) {\n if (fieldType === DimensionSubtype.CATEGORICAL) {\n domain = [].concat(...domains);\n } else {\n domain = [Math.min(...domains.map(d => d[0])), Math.max(...domains.map(d => d[1]))];\n }\n }\n\n return domain;\n};\n\nconst symbolFns = {\n circle: symbolCircle,\n cross: symbolCross,\n diamond: symbolDiamond,\n square: symbolSquare,\n star: symbolStar,\n wye: symbolWye,\n triangle: symbolTriangle\n};\n\nconst easeFns = {\n cubic: easeCubic,\n bounce: easeBounce,\n linear: easeLinear,\n elastic: easeElastic,\n back: easeBack,\n poly: easePoly,\n circle: easeCircle\n};\n\n/**\n * Returns the maximum or minimum points of a compare value from an array of objects.\n * @param {Array} points Array of objects\n * @param {string} compareValue Key in the object on which the comparing will be done.\n * @param {string} minOrMax minimum or maximum.\n * @return {Object} Minimum or maximum point.\n */\nconst getExtremePoint = (points, compareValue, minOrMax) => {\n let extremePoint;\n let point;\n const len = points.length;\n let minOrMaxVal = minOrMax === 'max' ? -Infinity : Infinity;\n let val;\n\n for (let i = 0; i < len; i++) {\n point = points[i];\n val = point[compareValue];\n if (minOrMax === 'min' ? val < minOrMaxVal : val > minOrMaxVal) {\n minOrMaxVal = val;\n extremePoint = point;\n }\n }\n\n return extremePoint;\n};\n\n/**\n * Returns the minimum point of a compare value from an array of objects.\n * @param {Array} points Array of objects\n * @param {string} compareValue Key in the object on which the comparing will be done.\n * @return {Object} Minimum point.\n */\nconst getMinPoint = (points, compareValue) => getExtremePoint(points, compareValue, 'min');\n\n/**\n * Returns the maximum point of a compare value from an array of objects.\n * @param {Array} points Array of objects\n * @param {string} compareValue Key in the object on which the comparing will be done.\n * @return {Object} Maximum point.\n */\nconst getMaxPoint = (points, compareValue) => getExtremePoint(points, compareValue, 'max');\n\n/**\n * Gets the index of the closest value of the given value from the array.\n * @param {Array} arr Array of values\n * @param {number} value Value from which the nearest value will be calculated.\n * @param {string} side side property.\n * @return {number} index of the closest value\n */\n/* istanbul ignore next */const getClosestIndexOf = (arr, value, side) => {\n let low = 0;\n const arrLen = arr.length;\n let high = arrLen - 1;\n\n let mid;\n let d1;\n let d2;\n\n while (low < high) {\n mid = Math.floor((low + high) / 2);\n d1 = Math.abs(arr[mid] - value);\n d2 = Math.abs(arr[mid + 1] - value);\n\n if (d2 <= d1) {\n low = mid + 1;\n } else {\n high = mid;\n }\n }\n\n if (!side) {\n return high;\n }\n\n const highVal = arr[high];\n if (highVal === value) {\n return high;\n } else if (highVal > value) {\n if (high === 0) { return high; }\n return side === 'left' ? high - 1 : high;\n }\n if (high === arr.length - 1) { return high; }\n return side === 'left' ? high : high + 1;\n};\n\nconst getNearestValue = (data, key) => {\n const filterData = data.filter(d => typeof d === 'number');\n return filterData[getClosestIndexOf(filterData, key)];\n};\n\n/**\n * Returns the browser window object\n * @return {Window} Window object\n*/\nconst getWindow = () => window;\n\n/**\n * Returns the browser window object\n * @return {Window} Window object\n*/\nconst reqAnimFrame = (() => requestAnimationFrame)();\n\nconst cancelAnimFrame = (() => cancelAnimationFrame)();\n\n/**\n * Capitalizes the first letter of the word\n * @param {string} text word\n * @return {string} Capitalized word\n */\nconst capitalizeFirst = (text) => {\n text = text.toLowerCase();\n\n return text.replace(/\\w\\S*/g, txt => txt.charAt(0).toUpperCase() + txt.substr(1));\n};\n\n/**\n *\n *\n * @param {*} arr\n */\nconst unique = arr => ([...new Set(arr)]);\n\n/**\n * Gets the minimum difference between two consecutive numbers in an array.\n * @param {Array} arr Array of numbers\n * @param {number} index index of the value\n * @return {number} minimum difference between values\n */\n/* istanbul ignore next */ const getMinDiff = (arr, index) => {\n let diff;\n let uniqueVals;\n if (index !== undefined) {\n uniqueVals = unique(arr.map(d => d[index]));\n } else {\n uniqueVals = unique(arr);\n }\n if (uniqueVals.length > 1) {\n diff = Math.abs(uniqueVals[1] - uniqueVals[0]);\n for (let i = 2, len = uniqueVals.length; i < len; i++) {\n diff = Math.min(diff, Math.abs(uniqueVals[i] - uniqueVals[i - 1]));\n }\n } else {\n diff = uniqueVals[0];\n }\n\n return diff;\n};\n\n/**\n * Returns the class name appended with a given id.\n * @param {string} cls class name\n * @param {string} id unique identifier\n * @param {string} prefix string needed to add before the classname\n * @return {string} qualified class name\n */\n/* istanbul ignore next */const getQualifiedClassName = (cls, id, prefix) => {\n cls = cls.replace(/^\\.*/, '');\n return [`${prefix}-${cls}`, `${prefix}-${cls}-${id}`];\n};\n\n/**\n * This method is used to set the default value for variables\n * without sullying the code with conditional statements.\n *\n * @export\n * @param {any} param The parameter to test.\n * @param {any} value The default value to assign.\n * @return {any} The value.\n */\n/* istanbul ignore next */ const defaultValue = (param, value) => {\n if (typeof param === 'undefined' || (typeof param === 'object' && !param)) {\n return value;\n }\n return param;\n};\n\n/**\n * DESCRIPTION TODO\n *\n * @export\n * @param {Object} graph graph whose dependency order has to be generated\n * @return {Object}\n */\nconst getDependencyOrder = (graph) => {\n const dependencyOrder = [];\n const visited = {};\n const keys = Object.keys(graph);\n /**\n * DESCRIPTION TODO\n *\n * @export\n * @param {Object} name\n * @return {Object}\n */\n const visit = (name) => {\n if (dependencyOrder.length === keys.length) {\n return true;\n }\n visited[name] = true;\n const edges = graph[name];\n for (let e = 0; e < edges.length; e++) {\n const dep = edges[e];\n if (!visited[dep]) {\n visit(dep);\n }\n }\n\n dependencyOrder.push(name);\n return false;\n };\n\n for (let i = 0; i < keys.length; i++) {\n if (visit(keys[i], i)) break;\n }\n\n return dependencyOrder;\n};\n\n/**\n * Iterates over the properties of an object and applies the function\n *\n * @param {any} obj object to be iterated upon\n * @param {any} fn function to be applied on it\n */\nconst objectIterator = (obj, fn) => {\n for (const key in obj) {\n if (Object.hasOwnProperty.call(obj, key)) {\n fn(key, obj);\n }\n }\n};\n\n/**\n * This class creates a d3 voronoi for retrieving the nearest neighbour of any point from a set of two\n * dimensional points\n * @class Voronoi\n */\n/* istanbul ignore next */ class Voronoi {\n /**\n * Initialize the voronoi with the data given.\n * @param {Array.} data Array of points.\n */\n constructor (data = []) {\n this._voronoi = voronoi().x(d => d.x).y(d => d.y);\n this.data(data);\n }\n\n /**\n * Sets the data to voronoi\n * @param {Array.} data Array of objects.\n * @return {Voronoi} Instance of voronoi.\n */\n data (data) {\n if (data) {\n this._voronoiFn = this._voronoi(data);\n }\n return this;\n }\n\n /**\n * Finds the closest point to the x and y position given.\n * @param {number} x x value\n * @param {number} y y value\n * @param {number} radius search radius.\n * @return {Object} Details of the nearest point.\n */\n find (x, y, radius) {\n return this._voronoiFn.find(x, y, radius);\n }\n}\n\nconst addListenerToNamespace = (namespaceInf, fn, context) => {\n let key = namespaceInf.key;\n const namespace = namespaceInf.namespace;\n if (namespace) {\n !context._listeners[namespace] && (context._listeners[namespace] = []);\n if (!key) {\n key = Object.keys(context._listeners[namespace]).length;\n }\n context._listeners[namespace][key] = fn;\n } else {\n key = Object.keys(context._listeners).length;\n context._listeners[key] = fn;\n }\n};\n\n/**\n *\n *\n * @param {*} obj\n * @param {*} fields\n *\n */\nconst getObjProp = (obj, ...fields) => {\n if (obj === undefined || obj === null) {\n return obj;\n }\n let retObj = obj;\n for (let i = 0, len = fields.length; i < len; i++) {\n retObj = retObj[fields[i]];\n if (retObj === undefined || retObj === null) {\n break;\n }\n }\n return retObj;\n};\n\n/**\n * Methods to handle changes to table configuration and reactivity are handled by this\n * class.\n */\n/**\n * Common store class\n *\n * @class Store\n */\nclass Store {\n /**\n * Creates an instance of Store.\n * @param {Object} config The object to create the state store with.\n * @memberof Store\n */\n constructor (config) {\n // create reactive model\n this.model = Model.create(config);\n this._listeners = {};\n }\n\n /**\n * This method returns a plain JSON object\n * with all the fields in the state store.\n *\n * @return {Object} Serialized representation of state store.\n * @memberof Store\n */\n serialize () {\n return this.model.serialize();\n }\n\n /**\n * This method is used to update the value of a property in the state store.\n *\n * @param {string} propName The name of the property.\n * @param {number} value The new value of the property.\n * @memberof Store\n */\n commit (propName, value) {\n // check if appropriate enum has been used\n this.model.prop(propName, value);\n }\n\n /**\n * This method is used to register a callbacl that will execute\n * when one or more properties change.\n *\n * @param {string | Array} propNames name of property or array of props.\n * @param {Function} callBack The callback to execute.\n * @memberof Store\n */\n /* istanbul ignore next */registerChangeListener (propNames, callBack, instantCall, namespaceInf = {}) {\n let props = propNames;\n if (!Array.isArray(propNames)) {\n props = [propNames];\n }\n const fn = this.model.next(props, callBack, instantCall);\n addListenerToNamespace(namespaceInf, fn, this);\n return this;\n }\n /**\n * This method is used to register a callbacl that will execute\n * when one or more properties change.\n *\n * @param {string | Array} propNames name of property or array of props.\n * @param {Function} callBack The callback to execute.\n * @memberof Store\n */\n /* istanbul ignore next */ registerImmediateListener (propNames, callBack, instantCall, namespaceInf = {}) {\n let props = propNames;\n if (!Array.isArray(propNames)) {\n props = [propNames];\n }\n const fn = this.model.on(props, callBack, instantCall);\n addListenerToNamespace(namespaceInf, fn, this);\n return this;\n }\n /**\n * This method is used to get the name of the property\n * from the state store.\n *\n * @param {string} propName The name of the field in state store.\n * @return {any} The value of the field.\n * @memberof Store\n */\n get (propName) {\n return this.model.prop(propName);\n }\n\n /**\n * This method is used to register a computed property that is computed every time\n * the store value changes.\n *\n * @param {string} propName The name of the property to create.\n * @param {Function} callBack The function to execute when depemdent props change.\n * @memberof Store\n */\n computed (propName, callBack) {\n return this.model.calculatedProp(propName, callBack);\n }\n\n append (propName, value) {\n this.model.append(propName, value);\n return this;\n }\n\n unsubscribeAll () {\n Object.values(this._listeners).forEach(fn => fn());\n return this;\n }\n\n unsubscribe (namespaceInf = {}) {\n const { namespace, key } = namespaceInf;\n const listeners = this._listeners[namespace];\n if (key) {\n const fn = getObjProp(listeners, key);\n fn && fn();\n } else {\n Object.values(listeners).forEach(fn => fn());\n this._listeners[namespace] = [];\n }\n return this;\n }\n}\n\n/**\n * Sanitize an input number / string mixed number. Currently dot in the no is not supported.\n *\n * @param {number | string} val pure number or string mixed number\n * @return {number | null} Number if it can be extracted. Otherwise null\n */\nconst intSanitizer = (val) => {\n const arr = val.toString().match(/(\\d+)(px)*/g);\n if (!arr) {\n // If only characters are passed\n return null;\n }\n\n return parseInt(arr[0], 10);\n};\n\n/**\n * Setter getter creator from config\n * Format\n * PROPERTRY_NAME: {\n * value: // default value of the property,\n * meta: {\n * typeCheck: // The setter value will be checked using this. If the value is function then the setter value\n * // is passed as args. (Optional)\n * typeExpected: // The output of typecheck action will be tested against this. Truthy value will set the\n * // value to the setter\n * sanitizaiton: // Need for sanitization before type is checked\n * }\n * }\n *\n * @param {Object} holder an empty object on which the getters and setters will be mounted\n * @param {Object} options options config based on which the getters and setters are determined.\n * @param {Hyperdis} model optional model to attach the property. If not sent new moel is created.\n * @return {Array}\n */\nconst transactor = (holder, options, model, namespaceInf = {}) => {\n let conf;\n const store = model && model instanceof Model ? model : Model.create({});\n const stateProps = {};\n for (const prop in options) {\n if ({}.hasOwnProperty.call(options, prop)) {\n conf = options[prop];\n const addAsMethod = conf.meta ? conf.meta.addAsMethod : true;\n let nameSpaceProp;\n const namespace = namespaceInf.namespace;\n if (namespace) {\n nameSpaceProp = `${namespace}.${prop}`;\n } else {\n nameSpaceProp = prop;\n }\n if (!store.prop(`${nameSpaceProp}`)) {\n stateProps[prop] = conf.value;\n }\n if (addAsMethod !== false) {\n holder[prop] = ((context, meta, nsProp) => (...params) => {\n let val;\n let compareTo;\n const paramsLen = params.length;\n const prevVal = store.prop(nsProp);\n if (paramsLen) {\n // If parameters are passed then it's a setter\n const spreadParams = meta && meta.spreadParams;\n val = params;\n const values = [];\n if (meta) {\n for (let i = 0; i < paramsLen; i++) {\n val = params[i];\n const sanitization = meta.sanitization && (spreadParams ? meta.sanitization[i] :\n meta.sanitization);\n const typeCheck = meta.typeCheck && (spreadParams ? meta.typeCheck[i] : meta.typeCheck);\n if (sanitization && typeof sanitization === 'function') {\n // Sanitize if required\n val = sanitization(val, prevVal, holder);\n }\n\n if (typeCheck) {\n // Checking if a setter is valid\n if (typeof typeCheck === 'function') {\n let typeExpected = meta.typeExpected;\n if (typeExpected && spreadParams) {\n typeExpected = typeExpected[i];\n }\n if (typeExpected) {\n compareTo = typeExpected;\n } else {\n compareTo = true;\n }\n\n if (typeCheck(val) === compareTo) {\n values.push(val);\n }\n } else if (typeof typeCheck === 'string') {\n if (typeCheck === 'constructor') {\n const typeExpected = spreadParams ? meta.typeExpected[i] :\n meta.typeExpected;\n if (val && (val.constructor.name === typeExpected)) {\n values.push(val);\n }\n }\n } else {\n // context.prop(key, val);\n values.push(val);\n }\n } else {\n values.push(val);\n }\n }\n const preset = meta.preset;\n const oldValues = context.prop(nsProp);\n preset && preset(values[0], holder);\n if (spreadParams) {\n oldValues.forEach((value, i) => {\n if (values[i] === undefined) {\n values[i] = value;\n }\n });\n }\n values.length && context.prop(nsProp, spreadParams ? values : values[0]);\n } else {\n context.prop(nsProp, spreadParams ? val : val[0]);\n }\n return holder;\n }\n // No parameters are passed hence its a getter\n return context.prop(nsProp);\n })(store, conf.meta, nameSpaceProp);\n }\n }\n }\n\n if (namespaceInf.namespace === undefined) {\n store.append(stateProps);\n } else {\n const namespace = namespaceInf.namespace;\n store.append(namespace, stateProps);\n }\n\n return [holder, store];\n};\n\n/**\n *\n *\n * @param {*} context\n * @param {*} props\n */\nconst generateGetterSetters = (context, props) => {\n Object.entries(props).forEach((propInfo) => {\n const prop = propInfo[0];\n const typeChecker = propInfo[1].typeChecker;\n const defVal = propInfo[1].defaultValue;\n const sanitization = propInfo[1].sanitization;\n const prototype = context.constructor.prototype;\n if (!(Object.hasOwnProperty.call(prototype, prop))) {\n if (defVal) {\n context[`_${prop}`] = defVal;\n }\n context[prop] = (...params) => {\n if (params.length) {\n let value = params[0];\n if (sanitization) {\n value = sanitization(context, params[0]);\n }\n if (typeChecker && !typeChecker(value)) {\n return context[`_${prop}`];\n }\n context[`_${prop}`] = value;\n return context;\n } return context[`_${prop}`];\n };\n }\n });\n};\n\n/**\n *\n *\n * @param {*} arr\n * @param {*} prop\n */\nconst getArraySum = (arr, prop) => arr.reduce((total, elem) => {\n total += prop ? elem[prop] : elem;\n return total;\n}, 0);\n\n/**\n *\n *\n * @param {*} arr1\n * @param {*} arr2\n *\n */\nconst arraysEqual = (arr1, arr2) => {\n if (arr1.length !== arr2.length) { return false; }\n for (let i = arr1.length; i >= 0; i--) {\n if (arr1[i] !== arr2[i]) { return false; }\n }\n\n return true;\n};\n\n/* eslint valid-typeof:0 */\n/**\n * Returns a validation function which can be used to validate variables against a type and value\n *\n * @param {any} type type of value that the object should have\n * @return {Object} validation function\n */\nconst isEqual = type => (oldVal, newVal) => {\n if (type === 'Array') {\n if (!oldVal) {\n return false;\n }\n return arraysEqual(oldVal, newVal);\n } else if (type === 'Object') {\n return Object.is(oldVal, newVal);\n } return oldVal === newVal;\n};\n\n/**\n * Description @todo\n *\n * @param {any} transactionModel @todo\n * @param {any} transactionEndpoint @todo\n * @param {any} transactionItems @todo\n * @return {any} @todo\n */\nconst enableChainedTransaction = (transactionModel, transactionEndpoint, transactionItems) =>\n transactionItems.forEach(item => transactionModel.on(item, ([, newVal]) => transactionEndpoint[item](newVal)));\n\n/**\n * Chceks if the element is istanceof HTMLElement\n *\n * @param {Object} elem any JS Object\n */\nconst isHTMLElem = elem => elem instanceof HTMLElement;\n\nconst ERROR_MSG = {\n INTERFACE_IMPL: 'Method not implemented'\n};\n\n/**\n * Merges the sink object in the source by recursively iterating through the object properties\n * @param {Object} source Source Object\n * @param {Object} sink Sink Object\n * @return {Object} Merged object\n */\nconst mergeRecursive = (source, sink) => {\n for (const prop in sink) {\n if (isSimpleObject(source[prop]) && isSimpleObject(sink[prop])) {\n mergeRecursive(source[prop], sink[prop]);\n } else if (sink[prop] instanceof Object && sink[prop].constructor === Object) {\n source[prop] = {};\n mergeRecursive(source[prop], sink[prop]);\n } else {\n source[prop] = sink[prop];\n }\n }\n return source;\n};\n\n/**\n * Creates a selection set from a data set with corresponding attributes\n *\n * @export\n * @param {Selection} sel contains previous selection\n * @param {Object} appendObj Object to be appended\n * @param {Array} data Data based on which the selection is entered/updated/removed\n * @param {Object} [attrs={}] Attributes to be set on the data\n * @return {Selection} Merged selection\n */\nconst createSelection = (sel, appendObj, data, idFn) => {\n let selection = sel || dataSelect([]);\n\n selection = selection.data(data, idFn);\n\n const enter = selection.enter().append(appendObj);\n const mergedSelection = enter.merge(selection);\n\n selection.exit() && selection.exit().remove();\n return mergedSelection;\n};\n\nconst interpolateArray = (data, fitCount) => {\n const linearInterpolate = function (before, after, atPoint) {\n return before + (after - before) * atPoint;\n };\n const newData = [];\n const springFactor = ((data.length - 1) / (fitCount - 1));\n newData[0] = data[0]; // for new allocation\n for (let i = 1; i < fitCount - 1; i++) {\n const tmp = i * springFactor;\n const before = (Math.floor(tmp)).toFixed();\n const after = (Math.ceil(tmp)).toFixed();\n const atPoint = tmp - before;\n newData[i] = linearInterpolate(data[before], data[after], atPoint);\n }\n newData[fitCount - 1] = data[data.length - 1]; // for new allocation\n return newData;\n};\n\n/**\n *\n *\n * @param {*} fn\n */\nconst nextFrame = (fn) => {\n setTimeout(() => {\n fn();\n }, 0);\n};\n\n/**\n *\n *\n * @param {*} angle\n */\nconst angleToRadian = angle => angle * Math.PI / 180;\n\n/**\n *\n *\n * @param {*} newName\n * @param {*} oldName\n */\nconst replaceCSSPrefix = () => {\n // @todo\n};\n\n/**\n * Gets the interpolator function from d3 color\n *\n */\nconst interpolator = () => interpolate;\n\n/**\n * Gets the number interpolator from d3 color\n *\n */\nconst numberInterpolator = () => interpolateNumber;\n\n/**\n * Gets the rgb interpolator from d3 color\n *\n */\nconst colorInterpolator = () => interpolateRgb;\n\n/**\n * Gets the hsl interpolator from d3 color\n *\n */\nconst hslInterpolator = () => interpolateHslLong;\n\nconst transformColors = () => ({\n color,\n rgb,\n hsl\n});\n\n/**\n * Gets the piecewise interpolator from d3 color\n *\n */\nconst piecewiseInterpolator = () => piecewise;\n\nfunction hue2rgb (p, q, t) {\n if (t < 0) t += 1;\n if (t > 1) t -= 1;\n if (t < 1 / 6) return p + (q - p) * 6 * t;\n if (t < 1 / 2) return q;\n if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;\n return p;\n}\n\n /**\n * Converts an HSL color value to RGB. Conversion formula\n * adapted from http://en.wikipedia.org/wiki/HSL_color_space.\n * Assumes h, s, and l are contained in the set [0, 1] and\n * returns r, g, and b in the set [0, 255].\n *\n * @param Number h The hue\n * @param Number s The saturation\n * @param Number l The lightness\n * @return Array The RGB representation\n */\nconst hslToRgb = (h, s, l, a = 1) => {\n let r;\n let g;\n let b;\n\n if (s === 0) {\n r = g = b = l; // achromatic\n } else {\n const q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n const p = 2 * l - q;\n\n r = hue2rgb(p, q, h + 1 / 3);\n g = hue2rgb(p, q, h);\n b = hue2rgb(p, q, h - 1 / 3);\n }\n\n return [r * 255, g * 255, b * 255, a];\n};\n\n /**\n * Converts an RGB color value to HSV. Conversion formula\n * adapted from http://en.wikipedia.org/wiki/HSV_color_space.\n * Assumes r, g, and b are contained in the set [0, 255] and\n * returns h, s, and v in the set [0, 1].\n *\n * @param Number r The red color value\n * @param Number g The green color value\n * @param Number b The blue color value\n * @return Array The HSV representation\n */\nconst rgbToHsv = (r, g, b, a = 1) => {\n r = +r; g = +g; b = +b; a = +a;\n r /= 255; g /= 255; b /= 255;\n const max = Math.max(r, g, b);\n const min = Math.min(r, g, b);\n let h;\n let s;\n const l = (max + min) / 2;\n\n if (max === min) {\n h = s = 0; // achromatic\n } else {\n const d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n switch (max) {\n case r: h = (g - b) / d + (g < b ? 6 : 0); break;\n case g: h = (b - r) / d + 2; break;\n case b: h = (r - g) / d + 4; break;\n default: break;\n }\n h /= 6;\n }\n return [h, s, l, a];\n};\n\n /**\n * Converts an HSV color value to RGB. Conversion formula\n * adapted from http://en.wikipedia.org/wiki/HSV_color_space.\n * Assumes h, s, and v are contained in the set [0, 1] and\n * returns r, g, and b in the set [0, 255].\n *\n * @param Number h The hue\n * @param Number s The saturation\n * @param Number v The value\n * @return Array The RGB representation\n */\nconst hsvToRgb = (h, s, v, a = 1) => {\n let r;\n let g;\n let b;\n\n const i = Math.floor(h * 6);\n const f = h * 6 - i;\n const p = v * (1 - s);\n const q = v * (1 - f * s);\n const t = v * (1 - (1 - f) * s);\n\n switch (i % 6) {\n case 0: r = v; g = t; b = p; break;\n case 1: r = q; g = v; b = p; break;\n case 2: r = p; g = v; b = t; break;\n case 3: r = p; g = q; b = v; break;\n case 4: r = t; g = p; b = v; break;\n case 5: r = v; g = p; b = q; break;\n default: break;\n }\n\n return [r * 255, g * 255, b * 255, a];\n};\n\nconst hexToHsv = (hex) => {\n const result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex);\n\n const r = parseInt(result[1], 16);\n const g = parseInt(result[2], 16);\n const b = parseInt(result[3], 16);\n const a = result[4] ? parseInt(result[4], 16) : 1;\n return rgbToHsv(r, g, b, a);\n};\n\nconst detectColor = (col) => {\n const matchRgb = /rgb\\((\\d{1,3}), (\\d{1,3}), (\\d{1,3})\\)/;\n const matchHsl = /hsl\\((\\d+),\\s*([\\d.]+)%,\\s*([\\d.]+)%\\)/g;\n\n // Source : https://gist.github.com/sethlopezme/d072b945969a3cc2cc11\n // eslint-disable-next-line\n const matchRgba = /rgba?\\(((25[0-5]|2[0-4]\\d|1\\d{1,2}|\\d\\d?)\\s*,\\s*?){2}(25[0-5]|2[0-4]\\d|1\\d{1,2}|\\d\\d?)\\s*,?\\s*([01]\\.?\\d*?)?\\)/;\n // eslint-disable-next-line\n const matchHsla = /^hsla\\((0|360|35\\d|3[0-4]\\d|[12]\\d\\d|0?\\d?\\d),(0|100|\\d{1,2})%,(0|100|\\d{1,2})%,(0?\\.\\d|1(\\.0)?)\\)$/;\n const matchHex = /^#([0-9a-f]{3}){1,2}$/i;\n\n if (matchRgb.test(col) || matchRgba.test(col)) {\n return 'rgb';\n } else if (matchHsl.test(col) || matchHsla.test(col)) {\n return 'hsl';\n } else if (matchHex.test(col)) {\n return 'hex';\n } return col;\n};\n\n/**\n *\n *\n * @param {*} model\n * @param {*} propModel\n *\n */\nconst filterPropagationModel = (model, propModel, measures) => {\n const { data, schema } = propModel.getData();\n let filteredModel;\n if (schema.length) {\n const fieldMap = model.getFieldsConfig();\n filteredModel = model.select((fields) => {\n const include = data.some(row => schema.every((propField, idx) => {\n if (!measures && (!(propField.name in fieldMap) ||\n fieldMap[propField.name].def.type === FieldType.MEASURE)) {\n return true;\n }\n return row[idx] === fields[propField.name].valueOf();\n }));\n return include;\n }, {\n saveChild: false\n });\n } else {\n filteredModel = propModel;\n }\n\n return filteredModel;\n};\n\nconst assembleModelFromIdentifiers = (model, identifiers) => {\n let schema = [];\n let data;\n const fieldMap = model.getFieldsConfig();\n if (identifiers.length) {\n const fields = identifiers[0];\n const len = fields.length;\n for (let i = 0; i < len; i++) {\n const field = fields[i];\n const fieldObj = fieldMap[field] && Object.assign({}, fieldMap[field].def);\n if (fieldObj) {\n schema.push(Object.assign(fieldObj));\n }\n }\n\n data = [];\n const header = identifiers[0];\n for (let i = 1; i < identifiers.length; i += 1) {\n const vals = identifiers[i];\n const temp = {};\n vals.forEach((fieldVal, cIdx) => {\n temp[header[cIdx]] = fieldVal;\n });\n data.push(temp);\n }\n } else {\n data = [];\n schema = [];\n }\n\n return new model.constructor(data, schema);\n};\n\n/**\n *\n *\n * @param {*} dataModel\n * @param {*} criteria\n *\n */\nconst getDataModelFromRange = (dataModel, criteria, mode) => {\n if (criteria === null) {\n return null;\n }\n const selFields = Object.keys(criteria);\n const selFn = fields => selFields.every((field) => {\n const val = fields[field].value;\n const range = criteria[field][0] instanceof Array ? criteria[field][0] : criteria[field];\n if (typeof range[0] === 'string') {\n return range.find(d => d === val) !== undefined;\n }\n return range ? val >= range[0] && val <= range[1] : true;\n });\n\n return dataModel.select(selFn, {\n saveChild: false,\n mode\n });\n};\n\n/**\n *\n *\n * @param {*} dataModel\n * @param {*} identifiers\n *\n */\nconst getDataModelFromIdentifiers = (dataModel, identifiers, mode) => {\n let filteredDataModel;\n if (identifiers instanceof Array) {\n const fieldsConfig = dataModel.getFieldsConfig();\n\n const dataArr = identifiers.slice(1, identifiers.length);\n if (identifiers instanceof Function) {\n filteredDataModel = identifiers(dataModel, {}, false);\n } else if (identifiers instanceof Array && identifiers[0].length) {\n const filteredSchema = identifiers[0].filter(d => d in fieldsConfig);\n filteredDataModel = dataModel.select((fields) => {\n let include = true;\n filteredSchema.forEach((propField, idx) => {\n const value = fields[propField].valueOf();\n const index = dataArr.findIndex(d => d[idx] === value);\n include = include && index !== -1;\n });\n return include;\n }, {\n saveChild: false,\n mode\n });\n }\n } else {\n filteredDataModel = getDataModelFromRange(dataModel, identifiers, mode);\n }\n return filteredDataModel;\n};\n\n/**\n *\n *\n * @param {*} context\n * @param {*} listenerMap\n */\nconst registerListeners = (context, listenerMap, ...params) => {\n const propListenerMap = listenerMap(context, ...params);\n for (const key in propListenerMap) {\n if ({}.hasOwnProperty.call(propListenerMap, key)) {\n const namespace = params[0];\n let ns = null;\n if (namespace) {\n ns = namespace.local;\n }\n const mapObj = propListenerMap[key];\n const propType = mapObj.type;\n const props = mapObj.props;\n const listenerFn = mapObj.listener;\n context.store()[propType](props, listenerFn, false, {\n namespace: ns\n });\n }\n }\n};\n\nconst isValidValue = value => !isNaN(value) && value !== -Infinity && value !== Infinity;\n/**\n *\n *\n * @param {*} str\n *\n */\nconst escapeHTML = (str) => {\n const htmlEscapes = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": ''',\n '/': '/'\n };\n const htmlEscaper = /[&<>\"'/]/g;\n return (`${str}`).replace(htmlEscaper, match => htmlEscapes[match]);\n};\n\n/**\n *\n *\n * @param {*} arr\n */\nconst transposeArray = arr => arr[0].map((col, i) => arr.map(row => row[i]));\nconst toArray = arr => (arr instanceof Array ? arr : [arr]);\nconst extendsClass = (cls, extendsFrom, found) => {\n if (!cls) {\n return false;\n }\n const prototype = cls.prototype;\n if (prototype instanceof extendsFrom) {\n found = true;\n } else {\n found = extendsClass(prototype, extendsFrom, found);\n }\n return found;\n};\n\n/**\n *\n * @param {*} dm1\n * @param {*} dm2\n */\nconst concatModels = (dm1, dm2) => {\n const dataObj1 = dm1.getData();\n const dataObj2 = dm2.getData();\n const data1 = dataObj1.data;\n const data2 = dataObj2.data;\n const schema1 = dataObj1.schema;\n const schema2 = dataObj2.schema;\n const tuples1 = {};\n const tuples2 = {};\n const commonTuples = {};\n for (let i = 0; i < data1.length; i++) {\n for (let ii = 0; ii < data2.length; ii++) {\n const row1 = data1[i];\n const row2 = data2[ii];\n const dim1Values = row1.filter((d, idx) => schema1[idx].type === FieldType.DIMENSION);\n const dim2Values = row2.filter((d, idx) => schema2[idx].type === FieldType.DIMENSION);\n const allDimSame = dim1Values.every(value => dim2Values.indexOf(value) !== -1);\n if (allDimSame) {\n const key = dim1Values.join();\n !commonTuples[key] && (commonTuples[key] = {});\n row1.forEach((value, idx) => {\n commonTuples[key][schema1[idx].name] = value;\n });\n row2.forEach((value, idx) => {\n commonTuples[key][schema2[idx].name] = value;\n });\n } else {\n const dm1Key = dim1Values.join();\n const dm2Key = dim2Values.join();\n if (!commonTuples[dm1Key] && !commonTuples[dm2Key]) {\n !tuples1[dm1Key] && (tuples1[dm1Key] = {});\n !tuples2[dm2Key] && (tuples2[dm2Key] = {});\n row1.forEach((value, idx) => {\n tuples1[dm1Key][schema1[idx].name] = value;\n });\n row2.forEach((value, idx) => {\n tuples2[dm2Key][schema2[idx].name] = value;\n });\n }\n }\n }\n }\n\n const commonSchema = [...schema1, ...schema2.filter(s2 => schema1.findIndex(s1 => s1.name === s2.name) === -1)];\n const data = [...Object.values(tuples1), ...Object.values(tuples2), ...Object.values(commonTuples)];\n return [data, commonSchema];\n};\n\nconst getSymbol = type => symbol().type(symbolFns[type]);\n\nconst stackOrders = {\n [STACK_CONFIG.ORDER_NONE]: stackOrderNone,\n [STACK_CONFIG.ORDER_ASCENDING]: stackOrderAscending,\n [STACK_CONFIG.ORDER_DESCENDING]: stackOrderDescending\n};\nconst stackOffsets = {\n [STACK_CONFIG.OFFSET_DIVERGING]: stackOffsetDiverging,\n [STACK_CONFIG.OFFSET_NONE]: stackOffsetNone,\n [STACK_CONFIG.OFFSET_EXPAND]: stackOffsetExpand,\n [STACK_CONFIG.OFFSET_WIGGLE]: stackOffsetWiggle\n};\n\n// eslint-disable-next-line require-jsdoc\nconst stack = params => d3Stack().keys(params.keys).offset(stackOffsets[params.offset])\n .order(stackOrders[params.order])(params.data);\n\n/**\n * Groups the data into a hierarchical tree structure based on one or more fields.\n * @param { Object } params Configuration properties for nesting data\n * @param { Array. } params.data Data which needs to be grouped\n * @param { Array. } params.keys Field indices by which the data will be grouped\n * @return { Array. } Grouped data array\n */\nconst nestCollection = (params) => {\n const nestFn = nest();\n params.keys.forEach(key => nestFn.key(d => d[key]));\n return nestFn.entries(params.data);\n};\n\nconst pathInterpolators = {\n curveLinear,\n curveStepAfter,\n curveStepBefore,\n curveStep,\n curveCatmullRom,\n stepAfter: curveStepAfter,\n catmullRom: curveCatmullRom,\n step: curveStep,\n stepBefore: curveStepBefore,\n linear: curveLinear\n};\n\nconst Symbols = {\n axisLeft,\n axisRight,\n axisTop,\n axisBottom,\n line,\n area,\n pie,\n arc,\n nest\n};\n\nconst Scales = {\n band: scaleBand\n};\n\nconst getSmallestDiff = (points) => {\n points = points.sort((a, b) => a - b);\n let minDiff = points[1] - points[0];\n for (let i = 2; i < points.length; i++) {\n minDiff = Math.min(minDiff, points[i] - points[i - 1]);\n }\n\n return minDiff;\n};\n\nconst timeFormats = {\n millisecond: '%A, %b %e, %H:%M:%S.%L',\n second: '%A, %b %e, %H:%M:%S',\n minute: '%A, %b %e, %H:%M',\n hour: '%A, %b %e, %H:%M',\n day: '%A, %b %e, %Y',\n month: '%B %Y',\n year: '%Y'\n};\n\nconst timeDurations = [\n ['millisecond', 'second', 'minute', 'hour', 'day', 'month', 'year'],\n [1, 1000, 60000, 3600000, 86400000, 2592000000, 31536000000]\n];\n\nconst getNearestInterval = (interval) => {\n const index = getClosestIndexOf(timeDurations[1], interval);\n return timeDurations[0][index];\n};\n\nconst formatTemporal = (value, interval) => {\n const nearestInterval = getNearestInterval(interval);\n return DateTimeFormatter.formatAs(value, timeFormats[nearestInterval]);\n};\n\nconst temporalFields = (dataModel) => {\n const filteredFields = {};\n Object.entries(dataModel.getFieldspace().getDimension()).forEach(([fieldName, fieldObj]) => {\n if (fieldObj.subtype() === DimensionSubtype.TEMPORAL) {\n filteredFields[fieldName] = fieldObj;\n }\n });\n return filteredFields;\n};\n\nconst require = (lookupWhat, lookupDetails) => ({\n resolvable: (store) => {\n const lookupTarget = store[lookupWhat];\n const depArr = lookupDetails.slice(0, lookupDetails.length - 1);\n const fn = lookupDetails[lookupDetails.length - 1]; // fn\n\n const deps = depArr.map(str => lookupTarget[str]);\n return {\n fn: fn(...deps),\n depArr\n };\n }\n});\n\nconst nextAnimFrame = window.requestAnimationFrame || window.webkitRequestAnimationFrame ||\n window.mozRequestAnimationFrame || window.oRequestAnimationFrame || window.msRequestAnimationFrame ||\n function (callback) {\n setTimeout(callback, 16);\n };\n\nconst getValueParser = config => (val) => {\n if (val instanceof InvalidAwareTypes) {\n return val in config ? config[val] : `${val}`;\n }\n return val;\n};\n\nconst retrieveNearestGroupByReducers = (dataModel, ...measureFieldNames) => {\n let nearestReducers = {};\n let next = dataModel;\n do {\n const derivations = next.getDerivations();\n if (derivations) {\n const groupDerivation = derivations.reverse().find(derivation => derivation.op === DM_OPERATION_GROUP);\n if (groupDerivation) {\n nearestReducers = groupDerivation.criteria || {};\n break;\n }\n }\n } while (next = next.getParent());\n\n const filteredReducers = {};\n const measures = dataModel.getFieldspace().getMeasure();\n measureFieldNames.forEach((measureName) => {\n if (nearestReducers[measureName]) {\n filteredReducers[measureName] = nearestReducers[measureName];\n } else {\n const measureField = measures[measureName];\n if (measureField) {\n filteredReducers[measureName] = measureField.defAggFn();\n }\n }\n });\n\n return filteredReducers;\n};\n\nexport {\n getValueParser,\n require,\n Scales,\n Symbols,\n pathInterpolators,\n stack,\n nestCollection,\n getSymbol,\n transformColors,\n detectColor,\n hexToHsv,\n hslToRgb,\n rgbToHsv,\n hsvToRgb,\n concatModels,\n toArray,\n angleToRadian,\n escapeHTML,\n generateGetterSetters,\n getArraySum,\n interpolator,\n piecewiseInterpolator,\n getDataModelFromIdentifiers,\n getDataModelFromRange,\n colorInterpolator,\n numberInterpolator,\n ERROR_MSG,\n reqAnimFrame,\n nextAnimFrame,\n filterPropagationModel,\n transposeArray,\n cancelAnimFrame,\n getMax,\n getMin,\n getDomainFromData,\n getUniqueId,\n mergeRecursive,\n unionDomain,\n symbolFns,\n easeFns,\n clone,\n isEqual,\n interpolateArray,\n getMinPoint,\n defaultValue,\n getMaxPoint,\n getClosestIndexOf,\n Voronoi,\n checkExistence,\n sanitizeIP,\n getMinDiff,\n capitalizeFirst,\n getWindow,\n getQualifiedClassName,\n Store,\n getDependencyOrder,\n objectIterator,\n intSanitizer,\n transactor,\n enableChainedTransaction,\n isHTMLElem,\n isSimpleObject,\n nextFrame,\n registerListeners,\n replaceCSSPrefix,\n getObjProp,\n extendsClass,\n assembleModelFromIdentifiers,\n isValidValue,\n hslInterpolator,\n getSmallestDiff,\n getNearestValue,\n retrieveNearestGroupByReducers,\n createSelection,\n formatTemporal,\n temporalFields\n};\n","export function linear(t) {\n return +t;\n}\n","export function circleIn(t) {\n return 1 - Math.sqrt(1 - t * t);\n}\n\nexport function circleOut(t) {\n return Math.sqrt(1 - --t * t);\n}\n\nexport function circleInOut(t) {\n return ((t *= 2) <= 1 ? 1 - Math.sqrt(1 - t * t) : Math.sqrt(1 - (t -= 2) * t) + 1) / 2;\n}\n","import Selection from './selection';\n/**\n * This function applies a selection operation on a data array.\n *\n * @export\n * @param {Array} [data=[]] The data array to be observed.\n * @return {Selection} Instance of a selection.\n */\nexport default function dataSelect (data = []) {\n return new Selection(data);\n}\n\n","import {path} from \"d3-path\";\nimport circle from \"./symbol/circle\";\nimport cross from \"./symbol/cross\";\nimport diamond from \"./symbol/diamond\";\nimport star from \"./symbol/star\";\nimport square from \"./symbol/square\";\nimport triangle from \"./symbol/triangle\";\nimport wye from \"./symbol/wye\";\nimport constant from \"./constant\";\n\nexport var symbols = [\n circle,\n cross,\n diamond,\n square,\n star,\n triangle,\n wye\n];\n\nexport default function() {\n var type = constant(circle),\n size = constant(64),\n context = null;\n\n function symbol() {\n var buffer;\n if (!context) context = buffer = path();\n type.apply(this, arguments).draw(context, +size.apply(this, arguments));\n if (buffer) return context = null, buffer + \"\" || null;\n }\n\n symbol.type = function(_) {\n return arguments.length ? (type = typeof _ === \"function\" ? _ : constant(_), symbol) : type;\n };\n\n symbol.size = function(_) {\n return arguments.length ? (size = typeof _ === \"function\" ? _ : constant(+_), symbol) : size;\n };\n\n symbol.context = function(_) {\n return arguments.length ? (context = _ == null ? null : _, symbol) : context;\n };\n\n return symbol;\n}\n","export const ORDER_ASCENDING = 'ascending';\nexport const ORDER_DESCENDING = 'descending';\nexport const ORDER_NONE = 'none';\nexport const OFFSET_DIVERGING = 'diverging';\nexport const OFFSET_NONE = 'none';\nexport const OFFSET_EXPAND = 'expand';\nexport const OFFSET_WIGGLE = 'wiggle';\n","import ascending from \"./ascending\";\n\nexport default function(series) {\n return ascending(series).reverse();\n}\n","export default function(series, order) {\n if (!((n = series.length) > 1)) return;\n for (var i, j = 0, d, dy, yp, yn, n, m = series[order[0]].length; j < m; ++j) {\n for (yp = yn = 0, i = 0; i < n; ++i) {\n if ((dy = (d = series[order[i]][j])[1] - d[0]) >= 0) {\n d[0] = yp, d[1] = yp += dy;\n } else if (dy < 0) {\n d[1] = yn, d[0] = yn += dy;\n } else {\n d[0] = yp;\n }\n }\n }\n}\n","import none from \"./none\";\n\nexport default function(series, order) {\n if (!((n = series.length) > 0)) return;\n for (var i, n, j = 0, m = series[0].length, y; j < m; ++j) {\n for (y = i = 0; i < n; ++i) y += series[i][j][1] || 0;\n if (y) for (i = 0; i < n; ++i) series[i][j][1] /= y;\n }\n none(series, order);\n}\n","import none from \"./none\";\n\nexport default function(series, order) {\n if (!((n = series.length) > 0) || !((m = (s0 = series[order[0]]).length) > 0)) return;\n for (var y = 0, j = 1, s0, m, n; j < m; ++j) {\n for (var i = 0, s1 = 0, s2 = 0; i < n; ++i) {\n var si = series[order[i]],\n sij0 = si[j][1] || 0,\n sij1 = si[j - 1][1] || 0,\n s3 = (sij0 - sij1) / 2;\n for (var k = 0; k < i; ++k) {\n var sk = series[order[k]],\n skj0 = sk[j][1] || 0,\n skj1 = sk[j - 1][1] || 0;\n s3 += skj0 - skj1;\n }\n s1 += sij0, s2 += s3 * sij0;\n }\n s0[j - 1][1] += s0[j - 1][0] = y;\n if (s1) y -= s2 / s1;\n }\n s0[j - 1][1] += s0[j - 1][0] = y;\n none(series, order);\n}\n","import constant from \"./constant\";\nimport descending from \"./descending\";\nimport identity from \"./identity\";\nimport {tau} from \"./math\";\n\nexport default function() {\n var value = identity,\n sortValues = descending,\n sort = null,\n startAngle = constant(0),\n endAngle = constant(tau),\n padAngle = constant(0);\n\n function pie(data) {\n var i,\n n = data.length,\n j,\n k,\n sum = 0,\n index = new Array(n),\n arcs = new Array(n),\n a0 = +startAngle.apply(this, arguments),\n da = Math.min(tau, Math.max(-tau, endAngle.apply(this, arguments) - a0)),\n a1,\n p = Math.min(Math.abs(da) / n, padAngle.apply(this, arguments)),\n pa = p * (da < 0 ? -1 : 1),\n v;\n\n for (i = 0; i < n; ++i) {\n if ((v = arcs[index[i] = i] = +value(data[i], i, data)) > 0) {\n sum += v;\n }\n }\n\n // Optionally sort the arcs by previously-computed values or by data.\n if (sortValues != null) index.sort(function(i, j) { return sortValues(arcs[i], arcs[j]); });\n else if (sort != null) index.sort(function(i, j) { return sort(data[i], data[j]); });\n\n // Compute the arcs! They are stored in the original data's order.\n for (i = 0, k = sum ? (da - n * pa) / sum : 0; i < n; ++i, a0 = a1) {\n j = index[i], v = arcs[j], a1 = a0 + (v > 0 ? v * k : 0) + pa, arcs[j] = {\n data: data[j],\n index: i,\n value: v,\n startAngle: a0,\n endAngle: a1,\n padAngle: p\n };\n }\n\n return arcs;\n }\n\n pie.value = function(_) {\n return arguments.length ? (value = typeof _ === \"function\" ? _ : constant(+_), pie) : value;\n };\n\n pie.sortValues = function(_) {\n return arguments.length ? (sortValues = _, sort = null, pie) : sortValues;\n };\n\n pie.sort = function(_) {\n return arguments.length ? (sort = _, sortValues = null, pie) : sort;\n };\n\n pie.startAngle = function(_) {\n return arguments.length ? (startAngle = typeof _ === \"function\" ? _ : constant(+_), pie) : startAngle;\n };\n\n pie.endAngle = function(_) {\n return arguments.length ? (endAngle = typeof _ === \"function\" ? _ : constant(+_), pie) : endAngle;\n };\n\n pie.padAngle = function(_) {\n return arguments.length ? (padAngle = typeof _ === \"function\" ? _ : constant(+_), pie) : padAngle;\n };\n\n return pie;\n}\n","export const DM_OPERATION_GROUP = 'group';\n","export var xhtml = \"http://www.w3.org/1999/xhtml\";\n\nexport default {\n svg: \"http://www.w3.org/2000/svg\",\n xhtml: xhtml,\n xlink: \"http://www.w3.org/1999/xlink\",\n xml: \"http://www.w3.org/XML/1998/namespace\",\n xmlns: \"http://www.w3.org/2000/xmlns/\"\n};\n","import namespaces from \"./namespaces\";\n\nexport default function(name) {\n var prefix = name += \"\", i = prefix.indexOf(\":\");\n if (i >= 0 && (prefix = name.slice(0, i)) !== \"xmlns\") name = name.slice(i + 1);\n return namespaces.hasOwnProperty(prefix) ? {space: namespaces[prefix], local: name} : name;\n}\n","import namespace from \"./namespace\";\nimport {xhtml} from \"./namespaces\";\n\nfunction creatorInherit(name) {\n return function() {\n var document = this.ownerDocument,\n uri = this.namespaceURI;\n return uri === xhtml && document.documentElement.namespaceURI === xhtml\n ? document.createElement(name)\n : document.createElementNS(uri, name);\n };\n}\n\nfunction creatorFixed(fullname) {\n return function() {\n return this.ownerDocument.createElementNS(fullname.space, fullname.local);\n };\n}\n\nexport default function(name) {\n var fullname = namespace(name);\n return (fullname.local\n ? creatorFixed\n : creatorInherit)(fullname);\n}\n","function none() {}\n\nexport default function(selector) {\n return selector == null ? none : function() {\n return this.querySelector(selector);\n };\n}\n","function empty() {\n return [];\n}\n\nexport default function(selector) {\n return selector == null ? empty : function() {\n return this.querySelectorAll(selector);\n };\n}\n","export default function(selector) {\n return function() {\n return this.matches(selector);\n };\n}\n","export default function(update) {\n return new Array(update.length);\n}\n","import sparse from \"./sparse\";\nimport {Selection} from \"./index\";\n\nexport default function() {\n return new Selection(this._enter || this._groups.map(sparse), this._parents);\n}\n\nexport function EnterNode(parent, datum) {\n this.ownerDocument = parent.ownerDocument;\n this.namespaceURI = parent.namespaceURI;\n this._next = null;\n this._parent = parent;\n this.__data__ = datum;\n}\n\nEnterNode.prototype = {\n constructor: EnterNode,\n appendChild: function(child) { return this._parent.insertBefore(child, this._next); },\n insertBefore: function(child, next) { return this._parent.insertBefore(child, next); },\n querySelector: function(selector) { return this._parent.querySelector(selector); },\n querySelectorAll: function(selector) { return this._parent.querySelectorAll(selector); }\n};\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","import {Selection} from \"./index\";\nimport {EnterNode} from \"./enter\";\nimport constant from \"../constant\";\n\nvar keyPrefix = \"$\"; // Protect against keys like “__proto__”.\n\nfunction bindIndex(parent, group, enter, update, exit, data) {\n var i = 0,\n node,\n groupLength = group.length,\n dataLength = data.length;\n\n // Put any non-null nodes that fit into update.\n // Put any null nodes into enter.\n // Put any remaining data into enter.\n for (; i < dataLength; ++i) {\n if (node = group[i]) {\n node.__data__ = data[i];\n update[i] = node;\n } else {\n enter[i] = new EnterNode(parent, data[i]);\n }\n }\n\n // Put any non-null nodes that don’t fit into exit.\n for (; i < groupLength; ++i) {\n if (node = group[i]) {\n exit[i] = node;\n }\n }\n}\n\nfunction bindKey(parent, group, enter, update, exit, data, key) {\n var i,\n node,\n nodeByKeyValue = {},\n groupLength = group.length,\n dataLength = data.length,\n keyValues = new Array(groupLength),\n keyValue;\n\n // Compute the key for each node.\n // If multiple nodes have the same key, the duplicates are added to exit.\n for (i = 0; i < groupLength; ++i) {\n if (node = group[i]) {\n keyValues[i] = keyValue = keyPrefix + key.call(node, node.__data__, i, group);\n if (keyValue in nodeByKeyValue) {\n exit[i] = node;\n } else {\n nodeByKeyValue[keyValue] = node;\n }\n }\n }\n\n // Compute the key for each datum.\n // If there a node associated with this key, join and add it to update.\n // If there is not (or the key is a duplicate), add it to enter.\n for (i = 0; i < dataLength; ++i) {\n keyValue = keyPrefix + key.call(parent, data[i], i, data);\n if (node = nodeByKeyValue[keyValue]) {\n update[i] = node;\n node.__data__ = data[i];\n nodeByKeyValue[keyValue] = null;\n } else {\n enter[i] = new EnterNode(parent, data[i]);\n }\n }\n\n // Add any remaining nodes that were not bound to data to exit.\n for (i = 0; i < groupLength; ++i) {\n if ((node = group[i]) && (nodeByKeyValue[keyValues[i]] === node)) {\n exit[i] = node;\n }\n }\n}\n\nexport default function(value, key) {\n if (!value) {\n data = new Array(this.size()), j = -1;\n this.each(function(d) { data[++j] = d; });\n return data;\n }\n\n var bind = key ? bindKey : bindIndex,\n parents = this._parents,\n groups = this._groups;\n\n if (typeof value !== \"function\") value = constant(value);\n\n for (var m = groups.length, update = new Array(m), enter = new Array(m), exit = new Array(m), j = 0; j < m; ++j) {\n var parent = parents[j],\n group = groups[j],\n groupLength = group.length,\n data = value.call(parent, parent && parent.__data__, j, parents),\n dataLength = data.length,\n enterGroup = enter[j] = new Array(dataLength),\n updateGroup = update[j] = new Array(dataLength),\n exitGroup = exit[j] = new Array(groupLength);\n\n bind(parent, group, enterGroup, updateGroup, exitGroup, data, key);\n\n // Now connect the enter nodes to their following update node, such that\n // appendChild can insert the materialized enter node before this node,\n // rather than at the end of the parent node.\n for (var i0 = 0, i1 = 0, previous, next; i0 < dataLength; ++i0) {\n if (previous = enterGroup[i0]) {\n if (i0 >= i1) i1 = i0 + 1;\n while (!(next = updateGroup[i1]) && ++i1 < dataLength);\n previous._next = next || null;\n }\n }\n }\n\n update = new Selection(update, parents);\n update._enter = enter;\n update._exit = exit;\n return update;\n}\n","import {Selection} from \"./index\";\n\nexport default function(compare) {\n if (!compare) compare = ascending;\n\n function compareNode(a, b) {\n return a && b ? compare(a.__data__, b.__data__) : !a - !b;\n }\n\n for (var groups = this._groups, m = groups.length, sortgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, sortgroup = sortgroups[j] = new Array(n), node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n sortgroup[i] = node;\n }\n }\n sortgroup.sort(compareNode);\n }\n\n return new Selection(sortgroups, this._parents).order();\n}\n\nfunction ascending(a, b) {\n return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n","import namespace from \"../namespace\";\n\nfunction attrRemove(name) {\n return function() {\n this.removeAttribute(name);\n };\n}\n\nfunction attrRemoveNS(fullname) {\n return function() {\n this.removeAttributeNS(fullname.space, fullname.local);\n };\n}\n\nfunction attrConstant(name, value) {\n return function() {\n this.setAttribute(name, value);\n };\n}\n\nfunction attrConstantNS(fullname, value) {\n return function() {\n this.setAttributeNS(fullname.space, fullname.local, value);\n };\n}\n\nfunction attrFunction(name, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) this.removeAttribute(name);\n else this.setAttribute(name, v);\n };\n}\n\nfunction attrFunctionNS(fullname, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) this.removeAttributeNS(fullname.space, fullname.local);\n else this.setAttributeNS(fullname.space, fullname.local, v);\n };\n}\n\nexport default function(name, value) {\n var fullname = namespace(name);\n\n if (arguments.length < 2) {\n var node = this.node();\n return fullname.local\n ? node.getAttributeNS(fullname.space, fullname.local)\n : node.getAttribute(fullname);\n }\n\n return this.each((value == null\n ? (fullname.local ? attrRemoveNS : attrRemove) : (typeof value === \"function\"\n ? (fullname.local ? attrFunctionNS : attrFunction)\n : (fullname.local ? attrConstantNS : attrConstant)))(fullname, value));\n}\n","export default function(node) {\n return (node.ownerDocument && node.ownerDocument.defaultView) // node is a Node\n || (node.document && node) // node is a Window\n || node.defaultView; // node is a Document\n}\n","import defaultView from \"../window\";\n\nfunction styleRemove(name) {\n return function() {\n this.style.removeProperty(name);\n };\n}\n\nfunction styleConstant(name, value, priority) {\n return function() {\n this.style.setProperty(name, value, priority);\n };\n}\n\nfunction styleFunction(name, value, priority) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) this.style.removeProperty(name);\n else this.style.setProperty(name, v, priority);\n };\n}\n\nexport default function(name, value, priority) {\n return arguments.length > 1\n ? this.each((value == null\n ? styleRemove : typeof value === \"function\"\n ? styleFunction\n : styleConstant)(name, value, priority == null ? \"\" : priority))\n : styleValue(this.node(), name);\n}\n\nexport function styleValue(node, name) {\n return node.style.getPropertyValue(name)\n || defaultView(node).getComputedStyle(node, null).getPropertyValue(name);\n}\n","function classArray(string) {\n return string.trim().split(/^|\\s+/);\n}\n\nfunction classList(node) {\n return node.classList || new ClassList(node);\n}\n\nfunction ClassList(node) {\n this._node = node;\n this._names = classArray(node.getAttribute(\"class\") || \"\");\n}\n\nClassList.prototype = {\n add: function(name) {\n var i = this._names.indexOf(name);\n if (i < 0) {\n this._names.push(name);\n this._node.setAttribute(\"class\", this._names.join(\" \"));\n }\n },\n remove: function(name) {\n var i = this._names.indexOf(name);\n if (i >= 0) {\n this._names.splice(i, 1);\n this._node.setAttribute(\"class\", this._names.join(\" \"));\n }\n },\n contains: function(name) {\n return this._names.indexOf(name) >= 0;\n }\n};\n\nfunction classedAdd(node, names) {\n var list = classList(node), i = -1, n = names.length;\n while (++i < n) list.add(names[i]);\n}\n\nfunction classedRemove(node, names) {\n var list = classList(node), i = -1, n = names.length;\n while (++i < n) list.remove(names[i]);\n}\n\nfunction classedTrue(names) {\n return function() {\n classedAdd(this, names);\n };\n}\n\nfunction classedFalse(names) {\n return function() {\n classedRemove(this, names);\n };\n}\n\nfunction classedFunction(names, value) {\n return function() {\n (value.apply(this, arguments) ? classedAdd : classedRemove)(this, names);\n };\n}\n\nexport default function(name, value) {\n var names = classArray(name + \"\");\n\n if (arguments.length < 2) {\n var list = classList(this.node()), i = -1, n = names.length;\n while (++i < n) if (!list.contains(names[i])) return false;\n return true;\n }\n\n return this.each((typeof value === \"function\"\n ? classedFunction : value\n ? classedTrue\n : classedFalse)(names, value));\n}\n","function textRemove() {\n this.textContent = \"\";\n}\n\nfunction textConstant(value) {\n return function() {\n this.textContent = value;\n };\n}\n\nfunction textFunction(value) {\n return function() {\n var v = value.apply(this, arguments);\n this.textContent = v == null ? \"\" : v;\n };\n}\n\nexport default function(value) {\n return arguments.length\n ? this.each(value == null\n ? textRemove : (typeof value === \"function\"\n ? textFunction\n : textConstant)(value))\n : this.node().textContent;\n}\n","function htmlRemove() {\n this.innerHTML = \"\";\n}\n\nfunction htmlConstant(value) {\n return function() {\n this.innerHTML = value;\n };\n}\n\nfunction htmlFunction(value) {\n return function() {\n var v = value.apply(this, arguments);\n this.innerHTML = v == null ? \"\" : v;\n };\n}\n\nexport default function(value) {\n return arguments.length\n ? this.each(value == null\n ? htmlRemove : (typeof value === \"function\"\n ? htmlFunction\n : htmlConstant)(value))\n : this.node().innerHTML;\n}\n","function raise() {\n if (this.nextSibling) this.parentNode.appendChild(this);\n}\n\nexport default function() {\n return this.each(raise);\n}\n","function lower() {\n if (this.previousSibling) this.parentNode.insertBefore(this, this.parentNode.firstChild);\n}\n\nexport default function() {\n return this.each(lower);\n}\n","import creator from \"../creator\";\nimport selector from \"../selector\";\n\nfunction constantNull() {\n return null;\n}\n\nexport default function(name, before) {\n var create = typeof name === \"function\" ? name : creator(name),\n select = before == null ? constantNull : typeof before === \"function\" ? before : selector(before);\n return this.select(function() {\n return this.insertBefore(create.apply(this, arguments), select.apply(this, arguments) || null);\n });\n}\n","function remove() {\n var parent = this.parentNode;\n if (parent) parent.removeChild(this);\n}\n\nexport default function() {\n return this.each(remove);\n}\n","function selection_cloneShallow() {\n return this.parentNode.insertBefore(this.cloneNode(false), this.nextSibling);\n}\n\nfunction selection_cloneDeep() {\n return this.parentNode.insertBefore(this.cloneNode(true), this.nextSibling);\n}\n\nexport default function(deep) {\n return this.select(deep ? selection_cloneDeep : selection_cloneShallow);\n}\n","var filterEvents = {};\n\nexport var event = null;\n\nif (typeof document !== \"undefined\") {\n var element = document.documentElement;\n if (!(\"onmouseenter\" in element)) {\n filterEvents = {mouseenter: \"mouseover\", mouseleave: \"mouseout\"};\n }\n}\n\nfunction filterContextListener(listener, index, group) {\n listener = contextListener(listener, index, group);\n return function(event) {\n var related = event.relatedTarget;\n if (!related || (related !== this && !(related.compareDocumentPosition(this) & 8))) {\n listener.call(this, event);\n }\n };\n}\n\nfunction contextListener(listener, index, group) {\n return function(event1) {\n var event0 = event; // Events can be reentrant (e.g., focus).\n event = event1;\n try {\n listener.call(this, this.__data__, index, group);\n } finally {\n event = event0;\n }\n };\n}\n\nfunction parseTypenames(typenames) {\n return typenames.trim().split(/^|\\s+/).map(function(t) {\n var name = \"\", i = t.indexOf(\".\");\n if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);\n return {type: t, name: name};\n });\n}\n\nfunction onRemove(typename) {\n return function() {\n var on = this.__on;\n if (!on) return;\n for (var j = 0, i = -1, m = on.length, o; j < m; ++j) {\n if (o = on[j], (!typename.type || o.type === typename.type) && o.name === typename.name) {\n this.removeEventListener(o.type, o.listener, o.capture);\n } else {\n on[++i] = o;\n }\n }\n if (++i) on.length = i;\n else delete this.__on;\n };\n}\n\nfunction onAdd(typename, value, capture) {\n var wrap = filterEvents.hasOwnProperty(typename.type) ? filterContextListener : contextListener;\n return function(d, i, group) {\n var on = this.__on, o, listener = wrap(value, i, group);\n if (on) for (var j = 0, m = on.length; j < m; ++j) {\n if ((o = on[j]).type === typename.type && o.name === typename.name) {\n this.removeEventListener(o.type, o.listener, o.capture);\n this.addEventListener(o.type, o.listener = listener, o.capture = capture);\n o.value = value;\n return;\n }\n }\n this.addEventListener(typename.type, listener, capture);\n o = {type: typename.type, name: typename.name, value: value, listener: listener, capture: capture};\n if (!on) this.__on = [o];\n else on.push(o);\n };\n}\n\nexport default function(typename, value, capture) {\n var typenames = parseTypenames(typename + \"\"), i, n = typenames.length, t;\n\n if (arguments.length < 2) {\n var on = this.node().__on;\n if (on) for (var j = 0, m = on.length, o; j < m; ++j) {\n for (i = 0, o = on[j]; i < n; ++i) {\n if ((t = typenames[i]).type === o.type && t.name === o.name) {\n return o.value;\n }\n }\n }\n return;\n }\n\n on = value ? onAdd : onRemove;\n if (capture == null) capture = false;\n for (i = 0; i < n; ++i) this.each(on(typenames[i], value, capture));\n return this;\n}\n\nexport function customEvent(event1, listener, that, args) {\n var event0 = event;\n event1.sourceEvent = event;\n event = event1;\n try {\n return listener.apply(that, args);\n } finally {\n event = event0;\n }\n}\n","import defaultView from \"../window\";\n\nfunction dispatchEvent(node, type, params) {\n var window = defaultView(node),\n event = window.CustomEvent;\n\n if (typeof event === \"function\") {\n event = new event(type, params);\n } else {\n event = window.document.createEvent(\"Event\");\n if (params) event.initEvent(type, params.bubbles, params.cancelable), event.detail = params.detail;\n else event.initEvent(type, false, false);\n }\n\n node.dispatchEvent(event);\n}\n\nfunction dispatchConstant(type, params) {\n return function() {\n return dispatchEvent(this, type, params);\n };\n}\n\nfunction dispatchFunction(type, params) {\n return function() {\n return dispatchEvent(this, type, params.apply(this, arguments));\n };\n}\n\nexport default function(type, params) {\n return this.each((typeof params === \"function\"\n ? dispatchFunction\n : dispatchConstant)(type, params));\n}\n","import selection_select from \"./select\";\nimport selection_selectAll from \"./selectAll\";\nimport selection_filter from \"./filter\";\nimport selection_data from \"./data\";\nimport selection_enter from \"./enter\";\nimport selection_exit from \"./exit\";\nimport selection_join from \"./join\";\nimport selection_merge from \"./merge\";\nimport selection_order from \"./order\";\nimport selection_sort from \"./sort\";\nimport selection_call from \"./call\";\nimport selection_nodes from \"./nodes\";\nimport selection_node from \"./node\";\nimport selection_size from \"./size\";\nimport selection_empty from \"./empty\";\nimport selection_each from \"./each\";\nimport selection_attr from \"./attr\";\nimport selection_style from \"./style\";\nimport selection_property from \"./property\";\nimport selection_classed from \"./classed\";\nimport selection_text from \"./text\";\nimport selection_html from \"./html\";\nimport selection_raise from \"./raise\";\nimport selection_lower from \"./lower\";\nimport selection_append from \"./append\";\nimport selection_insert from \"./insert\";\nimport selection_remove from \"./remove\";\nimport selection_clone from \"./clone\";\nimport selection_datum from \"./datum\";\nimport selection_on from \"./on\";\nimport selection_dispatch from \"./dispatch\";\n\nexport var root = [null];\n\nexport function Selection(groups, parents) {\n this._groups = groups;\n this._parents = parents;\n}\n\nfunction selection() {\n return new Selection([[document.documentElement]], root);\n}\n\nSelection.prototype = selection.prototype = {\n constructor: Selection,\n select: selection_select,\n selectAll: selection_selectAll,\n filter: selection_filter,\n data: selection_data,\n enter: selection_enter,\n exit: selection_exit,\n join: selection_join,\n merge: selection_merge,\n order: selection_order,\n sort: selection_sort,\n call: selection_call,\n nodes: selection_nodes,\n node: selection_node,\n size: selection_size,\n empty: selection_empty,\n each: selection_each,\n attr: selection_attr,\n style: selection_style,\n property: selection_property,\n classed: selection_classed,\n text: selection_text,\n html: selection_html,\n raise: selection_raise,\n lower: selection_lower,\n append: selection_append,\n insert: selection_insert,\n remove: selection_remove,\n clone: selection_clone,\n datum: selection_datum,\n on: selection_on,\n dispatch: selection_dispatch\n};\n\nexport default selection;\n","import {Selection} from \"./index\";\nimport selector from \"../selector\";\n\nexport default function(select) {\n if (typeof select !== \"function\") select = selector(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) {\n if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) {\n if (\"__data__\" in node) subnode.__data__ = node.__data__;\n subgroup[i] = subnode;\n }\n }\n }\n\n return new Selection(subgroups, this._parents);\n}\n","import {Selection} from \"./index\";\nimport selectorAll from \"../selectorAll\";\n\nexport default function(select) {\n if (typeof select !== \"function\") select = selectorAll(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n subgroups.push(select.call(node, node.__data__, i, group));\n parents.push(node);\n }\n }\n }\n\n return new Selection(subgroups, parents);\n}\n","import {Selection} from \"./index\";\nimport matcher from \"../matcher\";\n\nexport default function(match) {\n if (typeof match !== \"function\") match = matcher(match);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) {\n if ((node = group[i]) && match.call(node, node.__data__, i, group)) {\n subgroup.push(node);\n }\n }\n }\n\n return new Selection(subgroups, this._parents);\n}\n","import sparse from \"./sparse\";\nimport {Selection} from \"./index\";\n\nexport default function() {\n return new Selection(this._exit || this._groups.map(sparse), this._parents);\n}\n","export default function(onenter, onupdate, onexit) {\n var enter = this.enter(), update = this, exit = this.exit();\n enter = typeof onenter === \"function\" ? onenter(enter) : enter.append(onenter + \"\");\n if (onupdate != null) update = onupdate(update);\n if (onexit == null) exit.remove(); else onexit(exit);\n return enter && update ? enter.merge(update).order() : update;\n}\n","import {Selection} from \"./index\";\n\nexport default function(selection) {\n\n for (var groups0 = this._groups, groups1 = selection._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) {\n for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {\n if (node = group0[i] || group1[i]) {\n merge[i] = node;\n }\n }\n }\n\n for (; j < m0; ++j) {\n merges[j] = groups0[j];\n }\n\n return new Selection(merges, this._parents);\n}\n","export default function() {\n\n for (var groups = this._groups, j = -1, m = groups.length; ++j < m;) {\n for (var group = groups[j], i = group.length - 1, next = group[i], node; --i >= 0;) {\n if (node = group[i]) {\n if (next && node.compareDocumentPosition(next) ^ 4) next.parentNode.insertBefore(node, next);\n next = node;\n }\n }\n }\n\n return this;\n}\n","export default function() {\n var callback = arguments[0];\n arguments[0] = this;\n callback.apply(null, arguments);\n return this;\n}\n","export default function() {\n var nodes = new Array(this.size()), i = -1;\n this.each(function() { nodes[++i] = this; });\n return nodes;\n}\n","export default function() {\n\n for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n for (var group = groups[j], i = 0, n = group.length; i < n; ++i) {\n var node = group[i];\n if (node) return node;\n }\n }\n\n return null;\n}\n","export default function() {\n var size = 0;\n this.each(function() { ++size; });\n return size;\n}\n","export default function() {\n return !this.node();\n}\n","export default function(callback) {\n\n for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n for (var group = groups[j], i = 0, n = group.length, node; i < n; ++i) {\n if (node = group[i]) callback.call(node, node.__data__, i, group);\n }\n }\n\n return this;\n}\n","function propertyRemove(name) {\n return function() {\n delete this[name];\n };\n}\n\nfunction propertyConstant(name, value) {\n return function() {\n this[name] = value;\n };\n}\n\nfunction propertyFunction(name, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) delete this[name];\n else this[name] = v;\n };\n}\n\nexport default function(name, value) {\n return arguments.length > 1\n ? this.each((value == null\n ? propertyRemove : typeof value === \"function\"\n ? propertyFunction\n : propertyConstant)(name, value))\n : this.node()[name];\n}\n","import creator from \"../creator\";\n\nexport default function(name) {\n var create = typeof name === \"function\" ? name : creator(name);\n return this.select(function() {\n return this.appendChild(create.apply(this, arguments));\n });\n}\n","export default function(value) {\n return arguments.length\n ? this.property(\"__data__\", value)\n : this.node().__data__;\n}\n","import {Selection, root} from \"./selection/index\";\n\nexport default function(selector) {\n return typeof selector === \"string\"\n ? new Selection([[document.querySelector(selector)]], [document.documentElement])\n : new Selection([[selector]], root);\n}\n","var nextId = 0;\n\nexport default function local() {\n return new Local;\n}\n\nfunction Local() {\n this._ = \"@\" + (++nextId).toString(36);\n}\n\nLocal.prototype = local.prototype = {\n constructor: Local,\n get: function(node) {\n var id = this._;\n while (!(id in node)) if (!(node = node.parentNode)) return;\n return node[id];\n },\n set: function(node, value) {\n return node[this._] = value;\n },\n remove: function(node) {\n return this._ in node && delete node[this._];\n },\n toString: function() {\n return this._;\n }\n};\n","import {event} from \"./selection/on\";\n\nexport default function() {\n var current = event, source;\n while (source = current.sourceEvent) current = source;\n return current;\n}\n","export default function(node, event) {\n var svg = node.ownerSVGElement || node;\n\n if (svg.createSVGPoint) {\n var point = svg.createSVGPoint();\n point.x = event.clientX, point.y = event.clientY;\n point = point.matrixTransform(node.getScreenCTM().inverse());\n return [point.x, point.y];\n }\n\n var rect = node.getBoundingClientRect();\n return [event.clientX - rect.left - node.clientLeft, event.clientY - rect.top - node.clientTop];\n}\n","import sourceEvent from \"./sourceEvent\";\nimport point from \"./point\";\n\nexport default function(node) {\n var event = sourceEvent();\n if (event.changedTouches) event = event.changedTouches[0];\n return point(node, event);\n}\n","import sourceEvent from \"./sourceEvent\";\nimport point from \"./point\";\n\nexport default function(node, touches, identifier) {\n if (arguments.length < 3) identifier = touches, touches = sourceEvent().changedTouches;\n\n for (var i = 0, n = touches ? touches.length : 0, touch; i < n; ++i) {\n if ((touch = touches[i]).identifier === identifier) {\n return point(node, touch);\n }\n }\n\n return null;\n}\n","var noop = {value: function() {}};\n\nfunction dispatch() {\n for (var i = 0, n = arguments.length, _ = {}, t; i < n; ++i) {\n if (!(t = arguments[i] + \"\") || (t in _)) throw new Error(\"illegal type: \" + t);\n _[t] = [];\n }\n return new Dispatch(_);\n}\n\nfunction Dispatch(_) {\n this._ = _;\n}\n\nfunction parseTypenames(typenames, types) {\n return typenames.trim().split(/^|\\s+/).map(function(t) {\n var name = \"\", i = t.indexOf(\".\");\n if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);\n if (t && !types.hasOwnProperty(t)) throw new Error(\"unknown type: \" + t);\n return {type: t, name: name};\n });\n}\n\nDispatch.prototype = dispatch.prototype = {\n constructor: Dispatch,\n on: function(typename, callback) {\n var _ = this._,\n T = parseTypenames(typename + \"\", _),\n t,\n i = -1,\n n = T.length;\n\n // If no callback was specified, return the callback of the given type and name.\n if (arguments.length < 2) {\n while (++i < n) if ((t = (typename = T[i]).type) && (t = get(_[t], typename.name))) return t;\n return;\n }\n\n // If a type was specified, set the callback for the given type and name.\n // Otherwise, if a null callback was specified, remove callbacks of the given name.\n if (callback != null && typeof callback !== \"function\") throw new Error(\"invalid callback: \" + callback);\n while (++i < n) {\n if (t = (typename = T[i]).type) _[t] = set(_[t], typename.name, callback);\n else if (callback == null) for (t in _) _[t] = set(_[t], typename.name, null);\n }\n\n return this;\n },\n copy: function() {\n var copy = {}, _ = this._;\n for (var t in _) copy[t] = _[t].slice();\n return new Dispatch(copy);\n },\n call: function(type, that) {\n if ((n = arguments.length - 2) > 0) for (var args = new Array(n), i = 0, n, t; i < n; ++i) args[i] = arguments[i + 2];\n if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\n for (t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n },\n apply: function(type, that, args) {\n if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\n for (var t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n }\n};\n\nfunction get(type, name) {\n for (var i = 0, n = type.length, c; i < n; ++i) {\n if ((c = type[i]).name === name) {\n return c.value;\n }\n }\n}\n\nfunction set(type, name, callback) {\n for (var i = 0, n = type.length; i < n; ++i) {\n if (type[i].name === name) {\n type[i] = noop, type = type.slice(0, i).concat(type.slice(i + 1));\n break;\n }\n }\n if (callback != null) type.push({name: name, value: callback});\n return type;\n}\n\nexport default dispatch;\n","import {event} from \"d3-selection\";\n\nexport function nopropagation() {\n event.stopImmediatePropagation();\n}\n\nexport default function() {\n event.preventDefault();\n event.stopImmediatePropagation();\n}\n","import {select} from \"d3-selection\";\nimport noevent from \"./noevent\";\n\nexport default function(view) {\n var root = view.document.documentElement,\n selection = select(view).on(\"dragstart.drag\", noevent, true);\n if (\"onselectstart\" in root) {\n selection.on(\"selectstart.drag\", noevent, true);\n } else {\n root.__noselect = root.style.MozUserSelect;\n root.style.MozUserSelect = \"none\";\n }\n}\n\nexport function yesdrag(view, noclick) {\n var root = view.document.documentElement,\n selection = select(view).on(\"dragstart.drag\", null);\n if (noclick) {\n selection.on(\"click.drag\", noevent, true);\n setTimeout(function() { selection.on(\"click.drag\", null); }, 0);\n }\n if (\"onselectstart\" in root) {\n selection.on(\"selectstart.drag\", null);\n } else {\n root.style.MozUserSelect = root.__noselect;\n delete root.__noselect;\n }\n}\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","export default function DragEvent(target, type, subject, id, active, x, y, dx, dy, dispatch) {\n this.target = target;\n this.type = type;\n this.subject = subject;\n this.identifier = id;\n this.active = active;\n this.x = x;\n this.y = y;\n this.dx = dx;\n this.dy = dy;\n this._ = dispatch;\n}\n\nDragEvent.prototype.on = function() {\n var value = this._.on.apply(this._, arguments);\n return value === this._ ? this : value;\n};\n","import {dispatch} from \"d3-dispatch\";\nimport {event, customEvent, select, mouse, touch} from \"d3-selection\";\nimport nodrag, {yesdrag} from \"./nodrag\";\nimport noevent, {nopropagation} from \"./noevent\";\nimport constant from \"./constant\";\nimport DragEvent from \"./event\";\n\n// Ignore right-click, since that should open the context menu.\nfunction defaultFilter() {\n return !event.button;\n}\n\nfunction defaultContainer() {\n return this.parentNode;\n}\n\nfunction defaultSubject(d) {\n return d == null ? {x: event.x, y: event.y} : d;\n}\n\nfunction defaultTouchable() {\n return \"ontouchstart\" in this;\n}\n\nexport default function() {\n var filter = defaultFilter,\n container = defaultContainer,\n subject = defaultSubject,\n touchable = defaultTouchable,\n gestures = {},\n listeners = dispatch(\"start\", \"drag\", \"end\"),\n active = 0,\n mousedownx,\n mousedowny,\n mousemoving,\n touchending,\n clickDistance2 = 0;\n\n function drag(selection) {\n selection\n .on(\"mousedown.drag\", mousedowned)\n .filter(touchable)\n .on(\"touchstart.drag\", touchstarted)\n .on(\"touchmove.drag\", touchmoved)\n .on(\"touchend.drag touchcancel.drag\", touchended)\n .style(\"touch-action\", \"none\")\n .style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\");\n }\n\n function mousedowned() {\n if (touchending || !filter.apply(this, arguments)) return;\n var gesture = beforestart(\"mouse\", container.apply(this, arguments), mouse, this, arguments);\n if (!gesture) return;\n select(event.view).on(\"mousemove.drag\", mousemoved, true).on(\"mouseup.drag\", mouseupped, true);\n nodrag(event.view);\n nopropagation();\n mousemoving = false;\n mousedownx = event.clientX;\n mousedowny = event.clientY;\n gesture(\"start\");\n }\n\n function mousemoved() {\n noevent();\n if (!mousemoving) {\n var dx = event.clientX - mousedownx, dy = event.clientY - mousedowny;\n mousemoving = dx * dx + dy * dy > clickDistance2;\n }\n gestures.mouse(\"drag\");\n }\n\n function mouseupped() {\n select(event.view).on(\"mousemove.drag mouseup.drag\", null);\n yesdrag(event.view, mousemoving);\n noevent();\n gestures.mouse(\"end\");\n }\n\n function touchstarted() {\n if (!filter.apply(this, arguments)) return;\n var touches = event.changedTouches,\n c = container.apply(this, arguments),\n n = touches.length, i, gesture;\n\n for (i = 0; i < n; ++i) {\n if (gesture = beforestart(touches[i].identifier, c, touch, this, arguments)) {\n nopropagation();\n gesture(\"start\");\n }\n }\n }\n\n function touchmoved() {\n var touches = event.changedTouches,\n n = touches.length, i, gesture;\n\n for (i = 0; i < n; ++i) {\n if (gesture = gestures[touches[i].identifier]) {\n noevent();\n gesture(\"drag\");\n }\n }\n }\n\n function touchended() {\n var touches = event.changedTouches,\n n = touches.length, i, gesture;\n\n if (touchending) clearTimeout(touchending);\n touchending = setTimeout(function() { touchending = null; }, 500); // Ghost clicks are delayed!\n for (i = 0; i < n; ++i) {\n if (gesture = gestures[touches[i].identifier]) {\n nopropagation();\n gesture(\"end\");\n }\n }\n }\n\n function beforestart(id, container, point, that, args) {\n var p = point(container, id), s, dx, dy,\n sublisteners = listeners.copy();\n\n if (!customEvent(new DragEvent(drag, \"beforestart\", s, id, active, p[0], p[1], 0, 0, sublisteners), function() {\n if ((event.subject = s = subject.apply(that, args)) == null) return false;\n dx = s.x - p[0] || 0;\n dy = s.y - p[1] || 0;\n return true;\n })) return;\n\n return function gesture(type) {\n var p0 = p, n;\n switch (type) {\n case \"start\": gestures[id] = gesture, n = active++; break;\n case \"end\": delete gestures[id], --active; // nobreak\n case \"drag\": p = point(container, id), n = active; break;\n }\n customEvent(new DragEvent(drag, type, s, id, n, p[0] + dx, p[1] + dy, p[0] - p0[0], p[1] - p0[1], sublisteners), sublisteners.apply, sublisteners, [type, that, args]);\n };\n }\n\n drag.filter = function(_) {\n return arguments.length ? (filter = typeof _ === \"function\" ? _ : constant(!!_), drag) : filter;\n };\n\n drag.container = function(_) {\n return arguments.length ? (container = typeof _ === \"function\" ? _ : constant(_), drag) : container;\n };\n\n drag.subject = function(_) {\n return arguments.length ? (subject = typeof _ === \"function\" ? _ : constant(_), drag) : subject;\n };\n\n drag.touchable = function(_) {\n return arguments.length ? (touchable = typeof _ === \"function\" ? _ : constant(!!_), drag) : touchable;\n };\n\n drag.on = function() {\n var value = listeners.on.apply(listeners, arguments);\n return value === listeners ? drag : value;\n };\n\n drag.clickDistance = function(_) {\n return arguments.length ? (clickDistance2 = (_ = +_) * _, drag) : Math.sqrt(clickDistance2);\n };\n\n return drag;\n}\n","var frame = 0, // is an animation frame pending?\n timeout = 0, // is a timeout pending?\n interval = 0, // are any timers active?\n pokeDelay = 1000, // how frequently we check for clock skew\n taskHead,\n taskTail,\n clockLast = 0,\n clockNow = 0,\n clockSkew = 0,\n clock = typeof performance === \"object\" && performance.now ? performance : Date,\n setFrame = typeof window === \"object\" && window.requestAnimationFrame ? window.requestAnimationFrame.bind(window) : function(f) { setTimeout(f, 17); };\n\nexport function now() {\n return clockNow || (setFrame(clearNow), clockNow = clock.now() + clockSkew);\n}\n\nfunction clearNow() {\n clockNow = 0;\n}\n\nexport function Timer() {\n this._call =\n this._time =\n this._next = null;\n}\n\nTimer.prototype = timer.prototype = {\n constructor: Timer,\n restart: function(callback, delay, time) {\n if (typeof callback !== \"function\") throw new TypeError(\"callback is not a function\");\n time = (time == null ? now() : +time) + (delay == null ? 0 : +delay);\n if (!this._next && taskTail !== this) {\n if (taskTail) taskTail._next = this;\n else taskHead = this;\n taskTail = this;\n }\n this._call = callback;\n this._time = time;\n sleep();\n },\n stop: function() {\n if (this._call) {\n this._call = null;\n this._time = Infinity;\n sleep();\n }\n }\n};\n\nexport function timer(callback, delay, time) {\n var t = new Timer;\n t.restart(callback, delay, time);\n return t;\n}\n\nexport function timerFlush() {\n now(); // Get the current time, if not already set.\n ++frame; // Pretend we’ve set an alarm, if we haven’t already.\n var t = taskHead, e;\n while (t) {\n if ((e = clockNow - t._time) >= 0) t._call.call(null, e);\n t = t._next;\n }\n --frame;\n}\n\nfunction wake() {\n clockNow = (clockLast = clock.now()) + clockSkew;\n frame = timeout = 0;\n try {\n timerFlush();\n } finally {\n frame = 0;\n nap();\n clockNow = 0;\n }\n}\n\nfunction poke() {\n var now = clock.now(), delay = now - clockLast;\n if (delay > pokeDelay) clockSkew -= delay, clockLast = now;\n}\n\nfunction nap() {\n var t0, t1 = taskHead, t2, time = Infinity;\n while (t1) {\n if (t1._call) {\n if (time > t1._time) time = t1._time;\n t0 = t1, t1 = t1._next;\n } else {\n t2 = t1._next, t1._next = null;\n t1 = t0 ? t0._next = t2 : taskHead = t2;\n }\n }\n taskTail = t0;\n sleep(time);\n}\n\nfunction sleep(time) {\n if (frame) return; // Soonest alarm already set, or will be.\n if (timeout) timeout = clearTimeout(timeout);\n var delay = time - clockNow; // Strictly less than if we recomputed clockNow.\n if (delay > 24) {\n if (time < Infinity) timeout = setTimeout(wake, time - clock.now() - clockSkew);\n if (interval) interval = clearInterval(interval);\n } else {\n if (!interval) clockLast = clock.now(), interval = setInterval(poke, pokeDelay);\n frame = 1, setFrame(wake);\n }\n}\n","import {Timer} from \"./timer\";\n\nexport default function(callback, delay, time) {\n var t = new Timer;\n delay = delay == null ? 0 : +delay;\n t.restart(function(elapsed) {\n t.stop();\n callback(elapsed + delay);\n }, delay, time);\n return t;\n}\n","import {dispatch} from \"d3-dispatch\";\nimport {timer, timeout} from \"d3-timer\";\n\nvar emptyOn = dispatch(\"start\", \"end\", \"cancel\", \"interrupt\");\nvar emptyTween = [];\n\nexport var CREATED = 0;\nexport var SCHEDULED = 1;\nexport var STARTING = 2;\nexport var STARTED = 3;\nexport var RUNNING = 4;\nexport var ENDING = 5;\nexport var ENDED = 6;\n\nexport default function(node, name, id, index, group, timing) {\n var schedules = node.__transition;\n if (!schedules) node.__transition = {};\n else if (id in schedules) return;\n create(node, id, {\n name: name,\n index: index, // For context during callback.\n group: group, // For context during callback.\n on: emptyOn,\n tween: emptyTween,\n time: timing.time,\n delay: timing.delay,\n duration: timing.duration,\n ease: timing.ease,\n timer: null,\n state: CREATED\n });\n}\n\nexport function init(node, id) {\n var schedule = get(node, id);\n if (schedule.state > CREATED) throw new Error(\"too late; already scheduled\");\n return schedule;\n}\n\nexport function set(node, id) {\n var schedule = get(node, id);\n if (schedule.state > STARTED) throw new Error(\"too late; already running\");\n return schedule;\n}\n\nexport function get(node, id) {\n var schedule = node.__transition;\n if (!schedule || !(schedule = schedule[id])) throw new Error(\"transition not found\");\n return schedule;\n}\n\nfunction create(node, id, self) {\n var schedules = node.__transition,\n tween;\n\n // Initialize the self timer when the transition is created.\n // Note the actual delay is not known until the first callback!\n schedules[id] = self;\n self.timer = timer(schedule, 0, self.time);\n\n function schedule(elapsed) {\n self.state = SCHEDULED;\n self.timer.restart(start, self.delay, self.time);\n\n // If the elapsed delay is less than our first sleep, start immediately.\n if (self.delay <= elapsed) start(elapsed - self.delay);\n }\n\n function start(elapsed) {\n var i, j, n, o;\n\n // If the state is not SCHEDULED, then we previously errored on start.\n if (self.state !== SCHEDULED) return stop();\n\n for (i in schedules) {\n o = schedules[i];\n if (o.name !== self.name) continue;\n\n // While this element already has a starting transition during this frame,\n // defer starting an interrupting transition until that transition has a\n // chance to tick (and possibly end); see d3/d3-transition#54!\n if (o.state === STARTED) return timeout(start);\n\n // Interrupt the active transition, if any.\n if (o.state === RUNNING) {\n o.state = ENDED;\n o.timer.stop();\n o.on.call(\"interrupt\", node, node.__data__, o.index, o.group);\n delete schedules[i];\n }\n\n // Cancel any pre-empted transitions.\n else if (+i < id) {\n o.state = ENDED;\n o.timer.stop();\n o.on.call(\"cancel\", node, node.__data__, o.index, o.group);\n delete schedules[i];\n }\n }\n\n // Defer the first tick to end of the current frame; see d3/d3#1576.\n // Note the transition may be canceled after start and before the first tick!\n // Note this must be scheduled before the start event; see d3/d3-transition#16!\n // Assuming this is successful, subsequent callbacks go straight to tick.\n timeout(function() {\n if (self.state === STARTED) {\n self.state = RUNNING;\n self.timer.restart(tick, self.delay, self.time);\n tick(elapsed);\n }\n });\n\n // Dispatch the start event.\n // Note this must be done before the tween are initialized.\n self.state = STARTING;\n self.on.call(\"start\", node, node.__data__, self.index, self.group);\n if (self.state !== STARTING) return; // interrupted\n self.state = STARTED;\n\n // Initialize the tween, deleting null tween.\n tween = new Array(n = self.tween.length);\n for (i = 0, j = -1; i < n; ++i) {\n if (o = self.tween[i].value.call(node, node.__data__, self.index, self.group)) {\n tween[++j] = o;\n }\n }\n tween.length = j + 1;\n }\n\n function tick(elapsed) {\n var t = elapsed < self.duration ? self.ease.call(null, elapsed / self.duration) : (self.timer.restart(stop), self.state = ENDING, 1),\n i = -1,\n n = tween.length;\n\n while (++i < n) {\n tween[i].call(node, t);\n }\n\n // Dispatch the end event.\n if (self.state === ENDING) {\n self.on.call(\"end\", node, node.__data__, self.index, self.group);\n stop();\n }\n }\n\n function stop() {\n self.state = ENDED;\n self.timer.stop();\n delete schedules[id];\n for (var i in schedules) return; // eslint-disable-line no-unused-vars\n delete node.__transition;\n }\n}\n","import {get, set} from \"./schedule\";\n\nfunction tweenRemove(id, name) {\n var tween0, tween1;\n return function() {\n var schedule = set(this, id),\n tween = schedule.tween;\n\n // If this node shared tween with the previous node,\n // just assign the updated shared tween and we’re done!\n // Otherwise, copy-on-write.\n if (tween !== tween0) {\n tween1 = tween0 = tween;\n for (var i = 0, n = tween1.length; i < n; ++i) {\n if (tween1[i].name === name) {\n tween1 = tween1.slice();\n tween1.splice(i, 1);\n break;\n }\n }\n }\n\n schedule.tween = tween1;\n };\n}\n\nfunction tweenFunction(id, name, value) {\n var tween0, tween1;\n if (typeof value !== \"function\") throw new Error;\n return function() {\n var schedule = set(this, id),\n tween = schedule.tween;\n\n // If this node shared tween with the previous node,\n // just assign the updated shared tween and we’re done!\n // Otherwise, copy-on-write.\n if (tween !== tween0) {\n tween1 = (tween0 = tween).slice();\n for (var t = {name: name, value: value}, i = 0, n = tween1.length; i < n; ++i) {\n if (tween1[i].name === name) {\n tween1[i] = t;\n break;\n }\n }\n if (i === n) tween1.push(t);\n }\n\n schedule.tween = tween1;\n };\n}\n\nexport default function(name, value) {\n var id = this._id;\n\n name += \"\";\n\n if (arguments.length < 2) {\n var tween = get(this.node(), id).tween;\n for (var i = 0, n = tween.length, t; i < n; ++i) {\n if ((t = tween[i]).name === name) {\n return t.value;\n }\n }\n return null;\n }\n\n return this.each((value == null ? tweenRemove : tweenFunction)(id, name, value));\n}\n\nexport function tweenValue(transition, name, value) {\n var id = transition._id;\n\n transition.each(function() {\n var schedule = set(this, id);\n (schedule.value || (schedule.value = {}))[name] = value.apply(this, arguments);\n });\n\n return function(node) {\n return get(node, id).value[name];\n };\n}\n","import {color} from \"d3-color\";\nimport {interpolateNumber, interpolateRgb, interpolateString} from \"d3-interpolate\";\n\nexport default function(a, b) {\n var c;\n return (typeof b === \"number\" ? interpolateNumber\n : b instanceof color ? interpolateRgb\n : (c = color(b)) ? (b = c, interpolateRgb)\n : interpolateString)(a, b);\n}\n","function removeFunction(id) {\n return function() {\n var parent = this.parentNode;\n for (var i in this.__transition) if (+i !== id) return;\n if (parent) parent.removeChild(this);\n };\n}\n\nexport default function() {\n return this.on(\"end.remove\", removeFunction(this._id));\n}\n","import {selection} from \"d3-selection\";\n\nvar Selection = selection.prototype.constructor;\n\nexport default function() {\n return new Selection(this._groups, this._parents);\n}\n","import {interpolateTransformCss as interpolateTransform} from \"d3-interpolate\";\nimport {style} from \"d3-selection\";\nimport {set} from \"./schedule\";\nimport {tweenValue} from \"./tween\";\nimport interpolate from \"./interpolate\";\n\nfunction styleNull(name, interpolate) {\n var string00,\n string10,\n interpolate0;\n return function() {\n var string0 = style(this, name),\n string1 = (this.style.removeProperty(name), style(this, name));\n return string0 === string1 ? null\n : string0 === string00 && string1 === string10 ? interpolate0\n : interpolate0 = interpolate(string00 = string0, string10 = string1);\n };\n}\n\nfunction styleRemove(name) {\n return function() {\n this.style.removeProperty(name);\n };\n}\n\nfunction styleConstant(name, interpolate, value1) {\n var string00,\n string1 = value1 + \"\",\n interpolate0;\n return function() {\n var string0 = style(this, name);\n return string0 === string1 ? null\n : string0 === string00 ? interpolate0\n : interpolate0 = interpolate(string00 = string0, value1);\n };\n}\n\nfunction styleFunction(name, interpolate, value) {\n var string00,\n string10,\n interpolate0;\n return function() {\n var string0 = style(this, name),\n value1 = value(this),\n string1 = value1 + \"\";\n if (value1 == null) string1 = value1 = (this.style.removeProperty(name), style(this, name));\n return string0 === string1 ? null\n : string0 === string00 && string1 === string10 ? interpolate0\n : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));\n };\n}\n\nfunction styleMaybeRemove(id, name) {\n var on0, on1, listener0, key = \"style.\" + name, event = \"end.\" + key, remove;\n return function() {\n var schedule = set(this, id),\n on = schedule.on,\n listener = schedule.value[key] == null ? remove || (remove = styleRemove(name)) : undefined;\n\n // If this node shared a dispatch with the previous node,\n // just assign the updated shared dispatch and we’re done!\n // Otherwise, copy-on-write.\n if (on !== on0 || listener0 !== listener) (on1 = (on0 = on).copy()).on(event, listener0 = listener);\n\n schedule.on = on1;\n };\n}\n\nexport default function(name, value, priority) {\n var i = (name += \"\") === \"transform\" ? interpolateTransform : interpolate;\n return value == null ? this\n .styleTween(name, styleNull(name, i))\n .on(\"end.style.\" + name, styleRemove(name))\n : typeof value === \"function\" ? this\n .styleTween(name, styleFunction(name, i, tweenValue(this, \"style.\" + name, value)))\n .each(styleMaybeRemove(this._id, name))\n : this\n .styleTween(name, styleConstant(name, i, value), priority)\n .on(\"end.style.\" + name, null);\n}\n","import {tweenValue} from \"./tween\";\n\nfunction textConstant(value) {\n return function() {\n this.textContent = value;\n };\n}\n\nfunction textFunction(value) {\n return function() {\n var value1 = value(this);\n this.textContent = value1 == null ? \"\" : value1;\n };\n}\n\nexport default function(value) {\n return this.tween(\"text\", typeof value === \"function\"\n ? textFunction(tweenValue(this, \"text\", value))\n : textConstant(value == null ? \"\" : value + \"\"));\n}\n","import {selection} from \"d3-selection\";\nimport transition_attr from \"./attr\";\nimport transition_attrTween from \"./attrTween\";\nimport transition_delay from \"./delay\";\nimport transition_duration from \"./duration\";\nimport transition_ease from \"./ease\";\nimport transition_filter from \"./filter\";\nimport transition_merge from \"./merge\";\nimport transition_on from \"./on\";\nimport transition_remove from \"./remove\";\nimport transition_select from \"./select\";\nimport transition_selectAll from \"./selectAll\";\nimport transition_selection from \"./selection\";\nimport transition_style from \"./style\";\nimport transition_styleTween from \"./styleTween\";\nimport transition_text from \"./text\";\nimport transition_transition from \"./transition\";\nimport transition_tween from \"./tween\";\nimport transition_end from \"./end\";\n\nvar id = 0;\n\nexport function Transition(groups, parents, name, id) {\n this._groups = groups;\n this._parents = parents;\n this._name = name;\n this._id = id;\n}\n\nexport default function transition(name) {\n return selection().transition(name);\n}\n\nexport function newId() {\n return ++id;\n}\n\nvar selection_prototype = selection.prototype;\n\nTransition.prototype = transition.prototype = {\n constructor: Transition,\n select: transition_select,\n selectAll: transition_selectAll,\n filter: transition_filter,\n merge: transition_merge,\n selection: transition_selection,\n transition: transition_transition,\n call: selection_prototype.call,\n nodes: selection_prototype.nodes,\n node: selection_prototype.node,\n size: selection_prototype.size,\n empty: selection_prototype.empty,\n each: selection_prototype.each,\n on: transition_on,\n attr: transition_attr,\n attrTween: transition_attrTween,\n style: transition_style,\n styleTween: transition_styleTween,\n text: transition_text,\n remove: transition_remove,\n tween: transition_tween,\n delay: transition_delay,\n duration: transition_duration,\n ease: transition_ease,\n end: transition_end\n};\n","import {selector} from \"d3-selection\";\nimport {Transition} from \"./index\";\nimport schedule, {get} from \"./schedule\";\n\nexport default function(select) {\n var name = this._name,\n id = this._id;\n\n if (typeof select !== \"function\") select = selector(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) {\n if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) {\n if (\"__data__\" in node) subnode.__data__ = node.__data__;\n subgroup[i] = subnode;\n schedule(subgroup[i], name, id, i, subgroup, get(node, id));\n }\n }\n }\n\n return new Transition(subgroups, this._parents, name, id);\n}\n","import {selectorAll} from \"d3-selection\";\nimport {Transition} from \"./index\";\nimport schedule, {get} from \"./schedule\";\n\nexport default function(select) {\n var name = this._name,\n id = this._id;\n\n if (typeof select !== \"function\") select = selectorAll(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n for (var children = select.call(node, node.__data__, i, group), child, inherit = get(node, id), k = 0, l = children.length; k < l; ++k) {\n if (child = children[k]) {\n schedule(child, name, id, k, children, inherit);\n }\n }\n subgroups.push(children);\n parents.push(node);\n }\n }\n }\n\n return new Transition(subgroups, parents, name, id);\n}\n","import {matcher} from \"d3-selection\";\nimport {Transition} from \"./index\";\n\nexport default function(match) {\n if (typeof match !== \"function\") match = matcher(match);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) {\n if ((node = group[i]) && match.call(node, node.__data__, i, group)) {\n subgroup.push(node);\n }\n }\n }\n\n return new Transition(subgroups, this._parents, this._name, this._id);\n}\n","import {Transition} from \"./index\";\n\nexport default function(transition) {\n if (transition._id !== this._id) throw new Error;\n\n for (var groups0 = this._groups, groups1 = transition._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) {\n for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {\n if (node = group0[i] || group1[i]) {\n merge[i] = node;\n }\n }\n }\n\n for (; j < m0; ++j) {\n merges[j] = groups0[j];\n }\n\n return new Transition(merges, this._parents, this._name, this._id);\n}\n","import {Transition, newId} from \"./index\";\nimport schedule, {get} from \"./schedule\";\n\nexport default function() {\n var name = this._name,\n id0 = this._id,\n id1 = newId();\n\n for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n var inherit = get(node, id0);\n schedule(node, name, id1, i, group, {\n time: inherit.time + inherit.delay + inherit.duration,\n delay: 0,\n duration: inherit.duration,\n ease: inherit.ease\n });\n }\n }\n }\n\n return new Transition(groups, this._parents, name, id1);\n}\n","import {get, set, init} from \"./schedule\";\n\nfunction start(name) {\n return (name + \"\").trim().split(/^|\\s+/).every(function(t) {\n var i = t.indexOf(\".\");\n if (i >= 0) t = t.slice(0, i);\n return !t || t === \"start\";\n });\n}\n\nfunction onFunction(id, name, listener) {\n var on0, on1, sit = start(name) ? init : set;\n return function() {\n var schedule = sit(this, id),\n on = schedule.on;\n\n // If this node shared a dispatch with the previous node,\n // just assign the updated shared dispatch and we’re done!\n // Otherwise, copy-on-write.\n if (on !== on0) (on1 = (on0 = on).copy()).on(name, listener);\n\n schedule.on = on1;\n };\n}\n\nexport default function(name, listener) {\n var id = this._id;\n\n return arguments.length < 2\n ? get(this.node(), id).on.on(name)\n : this.each(onFunction(id, name, listener));\n}\n","import {interpolateTransformSvg as interpolateTransform} from \"d3-interpolate\";\nimport {namespace} from \"d3-selection\";\nimport {tweenValue} from \"./tween\";\nimport interpolate from \"./interpolate\";\n\nfunction attrRemove(name) {\n return function() {\n this.removeAttribute(name);\n };\n}\n\nfunction attrRemoveNS(fullname) {\n return function() {\n this.removeAttributeNS(fullname.space, fullname.local);\n };\n}\n\nfunction attrConstant(name, interpolate, value1) {\n var string00,\n string1 = value1 + \"\",\n interpolate0;\n return function() {\n var string0 = this.getAttribute(name);\n return string0 === string1 ? null\n : string0 === string00 ? interpolate0\n : interpolate0 = interpolate(string00 = string0, value1);\n };\n}\n\nfunction attrConstantNS(fullname, interpolate, value1) {\n var string00,\n string1 = value1 + \"\",\n interpolate0;\n return function() {\n var string0 = this.getAttributeNS(fullname.space, fullname.local);\n return string0 === string1 ? null\n : string0 === string00 ? interpolate0\n : interpolate0 = interpolate(string00 = string0, value1);\n };\n}\n\nfunction attrFunction(name, interpolate, value) {\n var string00,\n string10,\n interpolate0;\n return function() {\n var string0, value1 = value(this), string1;\n if (value1 == null) return void this.removeAttribute(name);\n string0 = this.getAttribute(name);\n string1 = value1 + \"\";\n return string0 === string1 ? null\n : string0 === string00 && string1 === string10 ? interpolate0\n : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));\n };\n}\n\nfunction attrFunctionNS(fullname, interpolate, value) {\n var string00,\n string10,\n interpolate0;\n return function() {\n var string0, value1 = value(this), string1;\n if (value1 == null) return void this.removeAttributeNS(fullname.space, fullname.local);\n string0 = this.getAttributeNS(fullname.space, fullname.local);\n string1 = value1 + \"\";\n return string0 === string1 ? null\n : string0 === string00 && string1 === string10 ? interpolate0\n : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));\n };\n}\n\nexport default function(name, value) {\n var fullname = namespace(name), i = fullname === \"transform\" ? interpolateTransform : interpolate;\n return this.attrTween(name, typeof value === \"function\"\n ? (fullname.local ? attrFunctionNS : attrFunction)(fullname, i, tweenValue(this, \"attr.\" + name, value))\n : value == null ? (fullname.local ? attrRemoveNS : attrRemove)(fullname)\n : (fullname.local ? attrConstantNS : attrConstant)(fullname, i, value));\n}\n","import {namespace} from \"d3-selection\";\n\nfunction attrInterpolate(name, i) {\n return function(t) {\n this.setAttribute(name, i(t));\n };\n}\n\nfunction attrInterpolateNS(fullname, i) {\n return function(t) {\n this.setAttributeNS(fullname.space, fullname.local, i(t));\n };\n}\n\nfunction attrTweenNS(fullname, value) {\n var t0, i0;\n function tween() {\n var i = value.apply(this, arguments);\n if (i !== i0) t0 = (i0 = i) && attrInterpolateNS(fullname, i);\n return t0;\n }\n tween._value = value;\n return tween;\n}\n\nfunction attrTween(name, value) {\n var t0, i0;\n function tween() {\n var i = value.apply(this, arguments);\n if (i !== i0) t0 = (i0 = i) && attrInterpolate(name, i);\n return t0;\n }\n tween._value = value;\n return tween;\n}\n\nexport default function(name, value) {\n var key = \"attr.\" + name;\n if (arguments.length < 2) return (key = this.tween(key)) && key._value;\n if (value == null) return this.tween(key, null);\n if (typeof value !== \"function\") throw new Error;\n var fullname = namespace(name);\n return this.tween(key, (fullname.local ? attrTweenNS : attrTween)(fullname, value));\n}\n","function styleInterpolate(name, i, priority) {\n return function(t) {\n this.style.setProperty(name, i(t), priority);\n };\n}\n\nfunction styleTween(name, value, priority) {\n var t, i0;\n function tween() {\n var i = value.apply(this, arguments);\n if (i !== i0) t = (i0 = i) && styleInterpolate(name, i, priority);\n return t;\n }\n tween._value = value;\n return tween;\n}\n\nexport default function(name, value, priority) {\n var key = \"style.\" + (name += \"\");\n if (arguments.length < 2) return (key = this.tween(key)) && key._value;\n if (value == null) return this.tween(key, null);\n if (typeof value !== \"function\") throw new Error;\n return this.tween(key, styleTween(name, value, priority == null ? \"\" : priority));\n}\n","import {get, init} from \"./schedule\";\n\nfunction delayFunction(id, value) {\n return function() {\n init(this, id).delay = +value.apply(this, arguments);\n };\n}\n\nfunction delayConstant(id, value) {\n return value = +value, function() {\n init(this, id).delay = value;\n };\n}\n\nexport default function(value) {\n var id = this._id;\n\n return arguments.length\n ? this.each((typeof value === \"function\"\n ? delayFunction\n : delayConstant)(id, value))\n : get(this.node(), id).delay;\n}\n","import {get, set} from \"./schedule\";\n\nfunction durationFunction(id, value) {\n return function() {\n set(this, id).duration = +value.apply(this, arguments);\n };\n}\n\nfunction durationConstant(id, value) {\n return value = +value, function() {\n set(this, id).duration = value;\n };\n}\n\nexport default function(value) {\n var id = this._id;\n\n return arguments.length\n ? this.each((typeof value === \"function\"\n ? durationFunction\n : durationConstant)(id, value))\n : get(this.node(), id).duration;\n}\n","import {get, set} from \"./schedule\";\n\nfunction easeConstant(id, value) {\n if (typeof value !== \"function\") throw new Error;\n return function() {\n set(this, id).ease = value;\n };\n}\n\nexport default function(value) {\n var id = this._id;\n\n return arguments.length\n ? this.each(easeConstant(id, value))\n : get(this.node(), id).ease;\n}\n","import {set} from \"./schedule\";\n\nexport default function() {\n var on0, on1, that = this, id = that._id, size = that.size();\n return new Promise(function(resolve, reject) {\n var cancel = {value: reject},\n end = {value: function() { if (--size === 0) resolve(); }};\n\n that.each(function() {\n var schedule = set(this, id),\n on = schedule.on;\n\n // If this node shared a dispatch with the previous node,\n // just assign the updated shared dispatch and we’re done!\n // Otherwise, copy-on-write.\n if (on !== on0) {\n on1 = (on0 = on).copy();\n on1._.cancel.push(cancel);\n on1._.interrupt.push(cancel);\n on1._.end.push(end);\n }\n\n schedule.on = on1;\n });\n });\n}\n","import {Transition, newId} from \"../transition/index\";\nimport schedule from \"../transition/schedule\";\nimport {easeCubicInOut} from \"d3-ease\";\nimport {now} from \"d3-timer\";\n\nvar defaultTiming = {\n time: null, // Set on use.\n delay: 0,\n duration: 250,\n ease: easeCubicInOut\n};\n\nfunction inherit(node, id) {\n var timing;\n while (!(timing = node.__transition) || !(timing = timing[id])) {\n if (!(node = node.parentNode)) {\n return defaultTiming.time = now(), defaultTiming;\n }\n }\n return timing;\n}\n\nexport default function(name) {\n var id,\n timing;\n\n if (name instanceof Transition) {\n id = name._id, name = name._name;\n } else {\n id = newId(), (timing = defaultTiming).time = now(), name = name == null ? null : name + \"\";\n }\n\n for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n schedule(node, name, id, i, group, timing || inherit(node, id));\n }\n }\n }\n\n return new Transition(groups, this._parents, name, id);\n}\n","import {selection} from \"d3-selection\";\nimport selection_interrupt from \"./interrupt\";\nimport selection_transition from \"./transition\";\n\nselection.prototype.interrupt = selection_interrupt;\nselection.prototype.transition = selection_transition;\n","import interrupt from \"../interrupt\";\n\nexport default function(name) {\n return this.each(function() {\n interrupt(this, name);\n });\n}\n","import {STARTING, ENDING, ENDED} from \"./transition/schedule\";\n\nexport default function(node, name) {\n var schedules = node.__transition,\n schedule,\n active,\n empty = true,\n i;\n\n if (!schedules) return;\n\n name = name == null ? null : name + \"\";\n\n for (i in schedules) {\n if ((schedule = schedules[i]).name !== name) { empty = false; continue; }\n active = schedule.state > STARTING && schedule.state < ENDING;\n schedule.state = ENDED;\n schedule.timer.stop();\n schedule.on.call(active ? \"interrupt\" : \"cancel\", node, node.__data__, schedule.index, schedule.group);\n delete schedules[i];\n }\n\n if (empty) delete node.__transition;\n}\n","import { select, event as d3event, selection, clientPoint } from 'd3-selection';\nimport { drag as d3drag } from 'd3-drag';\nimport 'd3-transition';\nimport { mergeRecursive } from './common-utils';\n/**\n * This function takes a raw DOM element or\n * a string and returns a d3 selection of that element.\n *\n * @param {HTMLElement | string} element The element to wrap in d3 selection.\n * @return {Selection} Instance of d3 selection.\n */\nconst selectElement = element => select(element);\n\n/**\n * It creates a new d3 element on the parent element\n * @param {Selection} parent Element to which the element is to be appended\n * @param {Object} elemType Type of the new element\n * @param {Array} data Data for the new element\n * @param {Object} selector classname/id/tagname for the element\n * @return {HTMLElement} Newly Created Element\n */\nconst makeElement = (parent, elemType, data, selector, callbacks = {}, keyFn) => {\n if ((parent instanceof HTMLElement || parent instanceof SVGElement)) {\n parent = selectElement(parent);\n }\n\n const selectorVal = selector ? selector[0] : null;\n let selectorType = null;\n let actualSelector = null;\n let element = null;\n let enterSel = null;\n let mergeSel = null;\n let filter;\n if (selectorVal) {\n if (selectorVal === '#') {\n selectorType = 'id';\n actualSelector = selector;\n } else {\n selectorType = 'class';\n actualSelector = selector[0] === '.' ? selector : `.${selector}`;\n }\n } else {\n actualSelector = elemType;\n filter = true;\n }\n element = parent.selectAll(actualSelector);\n\n filter && (element = element.filter(function () {\n return this.parentNode === parent.node();\n }));\n element = element.data(data, keyFn);\n\n enterSel = element.enter()\n .append(elemType || 'div');\n callbacks.enter && enterSel.each(function (...params) {\n callbacks.enter(selectElement(this), ...params);\n });\n\n mergeSel = enterSel.merge(element);\n callbacks.update && mergeSel.each(function (...params) {\n callbacks.update(selectElement(this), ...params);\n });\n if (selectorType === 'class') {\n mergeSel.classed(selectorVal === '.' ? selector.substring(1, selector.length) : selector, true);\n } else if (selectorType === 'id') {\n mergeSel.attr('id', selector.substring(1, selector.length));\n }\n const exitSel = element.exit();\n\n if (callbacks.exit) {\n exitSel.each(function (...params) {\n callbacks.exit(selectElement(this), ...params);\n });\n } else {\n exitSel.remove();\n }\n return mergeSel;\n};\n\n/**\n * This function applies styles to an element\n * @param {Object} elem Element Selection\n * @param {Object} styleObj Style Object to be applied\n * @return {Element} Newly Created Element\n*/\nconst applyStyle = (elem, styleObj) => {\n Object.entries(styleObj).forEach((d) => {\n elem.style(d[0], d[1]);\n }, this);\n return elem;\n};\n\n/**\n * This function appends a dom element in another element.\n * @param {HTMLElement | SVGElement} element1 The element in which to append the second element\n * @param {HTMLElement | SVGElement} element2 The element which will be appended.\n */\nconst appendElement = (element1, element2) => {\n element1.appendChild(element2);\n};\n\n/**\n * Sets the attributes to the element.\n * @param {HTMLElement | SVGElement} element Element on which attributes will be applied\n * @param {Object} attrs Attributes which need to be applied\n */\nconst setElementAttrs = (element, attrs) => {\n for (const key in attrs) {\n if ({}.hasOwnProperty.call(attrs, key)) {\n element.attr(key, attrs[key]);\n }\n }\n};\n\n/**\n * Sets attributes in the svg or html element\n * @param {SVGElement | HTMLElement} element The element on which attrs will be applied\n * @param {Array.} attrs Array of attributes\n * @param {string} className className of elements to select.\n * @return {SVGElement | HTMLElement} SVGElement or html element.\n */\nconst setAttrs = (element, attrs, className) => {\n if (!(element instanceof selection)) {\n element = selectElement(element);\n }\n className !== undefined ? element.selectAll(`.${className}`).each(function () {\n setElementAttrs(select(this), attrs);\n }) : setElementAttrs(element, attrs);\n return element;\n};\n\n/**\n * Adds a css class to elements which passes the filter function.If filter function is not given,\n * then all elements will be applied the class.\n * @param {HTMLElement | SVGElement} element element\n * @param {string} className css class\n * @param {string} selector css selector\n * @param {Function} filterFn filter method.\n */\nconst addClass = (element, className, selector, filterFn) => {\n select(element).selectAll(selector).each(function (data) {\n const elem = select(this);\n filterFn ? filterFn(data) && elem.classed(className, true) :\n elem.classed(className, true);\n });\n};\n\n/**\n * Removes the css class from elements which passes the filter function.If filter function is not given,\n * then all elements will be applied the class.\n * @param {HTMLElement | SVGElement} element element\n * @param {string} className css class\n * @param {string} selector css selector\n * @param {Function} filterFn filter method.\n */\nconst removeClass = (element, className, selector, filterFn) => {\n select(element).selectAll(selector).each(function (data) {\n const elem = select(this);\n filterFn ? filterFn(data) && elem.classed(className, false) :\n elem.classed(className, false);\n });\n};\n\n/**\n * Sets styles in the svg or html element\n * @param {SVGElement | HTMLElement} element The element on which styles will be applied\n * @param {Array.} styles Array of style attributes\n * @return {SVGElement | HTMLElement} SVGElement or html element.\n */\nconst setStyles = (element, styles) => {\n if (!(element instanceof selection)) {\n element = selectElement(element);\n }\n for (const key in styles) {\n if ({}.hasOwnProperty.call(styles, key)) {\n element.style(key, styles[key]);\n }\n }\n return element;\n};\n\n/**\n * Creates svg or html elements by binding data to the selection.Removes extra elements\n * on exit.\n * @param {Object} params Parameter object\n * @param {SVGElement | HTMLElement} params.container Container element where all elements will be appended\n * @param {string} params.selector Selector by which elements will be selected from dom\n * @param {string} params.append Append tag\n * @param {Function} params.each Function which will be executed for each data point and element.\n */\nconst createElements = (params) => {\n const container = select(params.container);\n let data;\n let sel;\n\n data = params.data;\n if (typeof data === 'number') {\n data = Array(data).fill().map((d, i) => i);\n }\n sel = container.selectAll(params.selector).data(data);\n\n sel = container.selectAll(params.selector).filter(function () {\n return this.parentNode === container.node();\n }).data(params.data);\n\n const selectionMerge = sel.enter().append(params.append).merge(sel).each(function (d, i) {\n params.each(d, select(this), i);\n });\n\n selectionMerge.attr('class', params.className || '');\n sel.exit().remove();\n};\n\n/**\n * Clips an element with given measurement. Basically it is used to hide overflowing portions\n * of any element.\n * @param {SVGElement} container svg element which needs to be clipped.\n * @param {Object} measurement Dimensions of the clipped rectangle.\n * @param {string} id Unique id of the clip element\n */\nconst clipElement = (container, measurement, id) => {\n const clipPathElement = makeElement(select(container), 'clipPath', [1], `#${id}`);\n const clipPathRect = makeElement(clipPathElement, 'rect', [1]);\n clipPathRect.attr('x', measurement.x)\n .attr('y', measurement.x)\n .attr('width', measurement.width)\n .attr('height', measurement.height);\n clipPathElement.attr('clip-path', `url(#${id})`);\n};\n\n/**\n * Returns the element of the corresponding classname.\n * @param {HTMLElement | SVGElement} node html or svg node element.\n * @param {string} className css class to be applied.\n * @return {HTMLElement | SVGElement} html or svg element.\n */\nconst getElementsByClassName = (node, className) => select(node).selectAll(className).nodes();\n\n/**\n * Gets the mouse position relative to an svg type of element\n * @param {SVGElement} element Any svg element like rect, circle, etc.\n * @param {Event} event Event object.\n * @return {Object} x and y position relative to the container element passed.\n */\nconst getMousePos = (element, event) => {\n const boundingClientRect = element.getBoundingClientRect();\n return {\n x: event.x - boundingClientRect.x,\n y: event.y - boundingClientRect.y\n };\n};\n\nconst getClientPoint = (...params) => {\n const pos = clientPoint(...params);\n return {\n x: pos[0],\n y: pos[1]\n };\n};\n\n/** This function appends a dom element in another element.\n * @param {Object} tag The tag name of the element to append\n * @param {Object} mount Mount point fo the element\n * @return {Object} selection of the appended element\n */\nconst createElement = (tag, mount) => select(mount).append(tag).node();\n\n/**\n * Gets the d3 event function\n * @return {Object} d3 event\n */\nconst getEvent = () => d3event;\n\n/**\n * Gets the d3 drag function\n * @return {Object} d3 drag\n */\nconst getD3Drag = () => d3drag;\n\nconst getSmartComputedStyle = (group, css) => {\n let textEl;\n const testText = 'W';\n const mandatoryStyle = {\n 'fill-opacity': 0\n };\n const className = typeof css === 'string' ? css : (css instanceof Array ? css.join(' ') : undefined);\n\n if (group.node() instanceof HTMLElement) {\n textEl = group.append('div').html(testText);\n } else {\n textEl = group.append('text').text(testText);\n }\n\n if (className) {\n textEl.attr('class', className);\n } else if (typeof css === 'object') {\n delete css['fill-opacity'];\n mergeRecursive(mandatoryStyle, css);\n }\n\n textEl.style(mandatoryStyle);\n const computedStyle = window.getComputedStyle(textEl.node());\n const styleForSmartLabel = {\n fontSize: computedStyle.fontSize,\n fontFamily: computedStyle.fontFamily,\n fontWeight: computedStyle.fontWeight,\n fontStyle: computedStyle.fontStyle\n };\n\n textEl.remove();\n\n return styleForSmartLabel;\n};\n\nconst hasTouch = () => 'ontouchstart' in document.documentElement;\n\nexport {\n hasTouch,\n selectElement,\n makeElement,\n applyStyle,\n addClass,\n removeClass,\n appendElement,\n setAttrs,\n setStyles,\n createElement,\n createElements,\n clipElement,\n getElementsByClassName,\n getMousePos,\n getEvent,\n getD3Drag,\n getSmartComputedStyle,\n getClientPoint\n};\n","const events = [\n 'initialized',\n 'beforeupdate',\n 'updated',\n 'beforedraw',\n 'drawn',\n 'beforeremove',\n 'removed',\n 'animationend'\n];\n\nconst compositions = [\n 'canvas',\n 'unit',\n 'layer',\n 'axis',\n 'facet-headers',\n 'legend',\n 'caption'\n];\n\nconst EVENT_LIST = [];\n\ncompositions.forEach((composition) => {\n events.forEach((event) => {\n EVENT_LIST.push(`${composition}.${event}`);\n });\n});\n\nexport default EVENT_LIST;\n","import EVENT_LIST from './event-list';\nimport { createPromise } from './helper';\n\n/**\n * At first call it accepts one function\n * calling it second time accepts notification object.\n * notification object then called with first accepted function\n *\n * @param {Function} resolveFn a promise's resolve function\n * @return {Function} a function to accept notification object\n */\nconst resolver = resolveFn => notification => resolveFn(notification);\n\n/**\n * Checks if the property string is present in the source object\n *\n * @param {Object} source source object whom you want to check the property\n * @param {string} property key name that need to be checked\n * @return {boolean} returns true if the property found in the source object\n */\nconst hasOwn = (source, property) => Object.prototype.hasOwnProperty.call(source, property);\n\n/**\n * LifeCycleManager which goes as a dependendecy to a muze\n * it accepts notification from the entire library throughout\n * the exeecution life\n *\n * @export\n * @class LifeCycleManager\n */\nexport default class LifeCycleManager {\n\n /**\n * Creates an instance of LifeCycleManager.\n * @memberof LifeCycleManager\n */\n constructor () {\n this._eventList = EVENT_LIST;\n this._promises = new Map();\n this._notifiers = {};\n this._lifeCycles = {};\n this._unreleasedLifeCycles = {};\n this._boot();\n }\n\n /**\n * Fills all the notifiers with resolver callback\n *\n * @memberof LifeCycleManager\n */\n _boot () {\n this._notifiers = this._eventList.reduce((acc, name) => {\n acc[name] = resolver;\n return acc;\n }, {});\n this._preparePromises();\n }\n\n /**\n * Public method which gives the promise corresponding\n * to the event name\n *\n * @param {string} eventName name of the event like `canvas.drawn`\n * @return {promise} promise that is passed to the user\n * @memberof LifeCycleManager\n */\n retrieve (eventName) {\n return this._promises.get(eventName);\n }\n\n /**\n * Creates a promise that will be passed to user's callback\n *\n * @param {string} eventName name of the event like `canvas.drawn`\n * @return {promise} a pending promise waiting for resolve to be called\n * @memberof LifeCycleManager\n */\n _makeNotifierPromise (eventName) {\n return new Promise((resolve) => {\n this._notifiers[eventName] = resolver(resolve);\n });\n }\n\n /**\n * Prepares the promise map with pending promises\n * all the promises are in a pending state where their's\n * resolve function waiting to be called with notification object\n * @memberof LifeCycleManager\n */\n _preparePromises () {\n this._eventList.forEach((eventName) => {\n const promise = this._makeNotifierPromise(eventName);\n this._promises.set(eventName, promise);\n createPromise(promise, eventName, this);\n });\n }\n\n /**\n * Resolves the promise with notification object\n *\n * @param {string} eventName name of the event in the system\n * @param {Object} notification notification object\n * @param {string} notification.formalName name of the sender creating the notification\n * @param {Object} notification.client instance or array of instances sending the notification\n * @param {string} notification.action the stage name when the event happened like `beforedraw`\n *\n * @memberof LifeCycleManager\n */\n _resolvePromise (eventName, notification) {\n this._notifiers[eventName](notification);\n }\n\n /**\n * Public method which is being called by different\n * subcompoents of the system at different execution atages\n * @param {Object} notification notification object\n * @param {string} notification.formalName name of the sender creating the notification\n * @param {Object} notification.client instance or array of instances sending the notification\n * @param {string} notification.action the stage name when the event happened like `beforedraw`\n * @memberof LifeCycleManager\n */\n notify (notification) {\n // get the composition name from notification\n // or from static formalName() method\n const composition = notification.formalName || notification.client.constructor.formalName();\n notification.formalName = composition;\n this._releasePromisesFromCache();\n this._notify(composition, notification);\n }\n\n /**\n * Notify user the with promsie in a callback\n * if callback not found then cache it\n *\n * @param {string} composition\n * @param {Object} notification notification object\n * @param {string} notification.formalName name of the sender creating the notification\n * @param {Object} notification.client instance or array of instances sending the notification\n * @param {string} notification.action the stage name when the event happened like `beforedraw`\n * @memberof LifeCycleManager\n */\n _notify (composition, notification) {\n const stage = notification.action;\n const eventName = `${composition}.${stage}`;\n\n // resolves promise with the notification object\n this._resolvePromise(eventName, notification);\n\n // get the promise from the promise map\n const promise = this.retrieve(eventName);\n\n if (this._lifeCycles[composition]) {\n if (this._lifeCycles[composition][stage]) {\n // if user given call back exists, then call with promise\n this._callLifeCycleCallback(composition, stage, promise);\n } else {\n // otherwise cache the promise\n this._cachePromise(composition, stage, promise);\n }\n } else {\n this._cachePromise(composition, stage, promise);\n }\n }\n\n /**\n * Calls the user's callback with callback\n *\n * @param {string} composition name of the compositon like `canvas`\n * @param {string} stage the stage name when the event happened like `beforedraw`\n * @param {promise} promise promise that is passed to the user\n * @memberof LifeCycleManager\n */\n _callLifeCycleCallback (composition, stage, promise) {\n const eventName = `${composition}.${stage}`;\n this._lifeCycles[composition][stage](promise);\n this._resetTargetPromise(eventName);\n }\n\n /**\n * Try to clear the cached promsies once we have\n * macthed callbacks from the user\n *\n * @memberof LifeCycleManager\n */\n _releasePromisesFromCache () {\n const compositions = Object.keys(this._unreleasedLifeCycles);\n compositions.forEach((composition) => {\n const stages = Object.keys(this._unreleasedLifeCycles[composition]);\n stages.forEach((stage) => {\n if (this._lifeCycles[composition]) {\n if (this._lifeCycles[composition][stage]) {\n // take the promise from unreleased lifeCycles\n const promise = this._unreleasedLifeCycles[composition][stage];\n // call the user given callback with that promise\n this._callLifeCycleCallback(composition, stage, promise);\n // delete promise from unreleased lifeCycles\n delete this._unreleasedLifeCycles[composition][stage];\n }\n }\n });\n });\n }\n\n /**\n * Cache the promise in the map. This cache\n * then get consumed if we get user callbacks\n * @param {string} composition name of the compositon like `canvas`\n * @param {string} stage the stage name when the event happened like `beforedraw`\n * @param {promise} promise promise that is passed to the user\n * @memberof LifeCycleManager\n */\n _cachePromise (composition, stage, promise) {\n if (!hasOwn(this._unreleasedLifeCycles, composition)) {\n this._unreleasedLifeCycles[composition] = {};\n }\n\n if (!hasOwn(this._unreleasedLifeCycles[composition], stage)) {\n this._unreleasedLifeCycles[composition][stage] = {};\n }\n this._unreleasedLifeCycles[composition][stage] = promise;\n }\n\n /**\n * It register's the callbacks gievn the user\n *\n * @param {Object} [lifeCycles={}] a object with list of callbacks\n * @memberof LifeCycleManager\n */\n register (lifeCycles = {}) {\n this._lifeCycles = lifeCycles;\n // as we get all the callbacks, try to call them\n // from unreleased promise map\n this._releasePromisesFromCache();\n }\n\n /**\n * Reset the promise into pending state\n *\n * @param {string} eventName name of the event happening\n * @memberof LifeCycleManager\n */\n _resetTargetPromise (eventName) {\n setTimeout(() => {\n this._notifiers[eventName] = resolver;\n this._promises.set(eventName, this._makeNotifierPromise(eventName));\n }, 0);\n }\n}\n","import LifeCycleManager from './lifecycle-manager';\n\nexport default LifeCycleManager;\n","/**\n * Creates a new promise when the given promise is resolved. This needs to be done so that after the lifecycle event\n * is completed, then again when the event gets completed, then a new promise gets resolved.\n *\n * @param {Promise} promise Instance of promise\n * @param {string} eventName name of event\n * @param {LifeCycleManager} context Instance of lifecyclemanager\n */\nexport const createPromise = (promise, eventName, context) => {\n promise.then(() => {\n const prm = context._makeNotifierPromise(eventName);\n context._promises.set(eventName, prm);\n createPromise(prm, eventName, context);\n });\n};\n","import { default as DataModel } from 'datamodel';\nimport * as scales from './scales';\nimport * as colorSchemes from './color-schemes';\nimport * as STATE_NAMESPACES from './enums/namespace';\n\nconst InvalidAwareTypes = DataModel.InvalidAwareTypes;\n\nexport {\n InvalidAwareTypes,\n DataModel\n};\n\nexport {\n ReservedFields,\n CommonProps\n} from './enums';\n\nexport { STATE_NAMESPACES };\n\nexport {\n scales,\n colorSchemes\n};\n\nexport {\n getNearestValue,\n getValueParser,\n transformColors,\n detectColor,\n hslToRgb,\n rgbToHsv,\n hexToHsv,\n hsvToRgb,\n escapeHTML,\n angleToRadian,\n generateGetterSetters,\n getArraySum,\n ERROR_MSG,\n interpolator,\n colorInterpolator,\n numberInterpolator,\n piecewiseInterpolator,\n reqAnimFrame,\n cancelAnimFrame,\n nextAnimFrame,\n getMax,\n getMin,\n getDomainFromData,\n getUniqueId,\n mergeRecursive,\n unionDomain,\n replaceCSSPrefix,\n symbolFns,\n defaultValue,\n easeFns,\n clone,\n interpolateArray,\n getMinPoint,\n getMaxPoint,\n getClosestIndexOf,\n registerListeners,\n Voronoi,\n checkExistence,\n sanitizeIP,\n getMinDiff,\n capitalizeFirst,\n getWindow,\n getQualifiedClassName,\n Store,\n getDependencyOrder,\n objectIterator,\n intSanitizer,\n transactor,\n enableChainedTransaction,\n isHTMLElem,\n isEqual,\n isSimpleObject,\n nextFrame,\n filterPropagationModel,\n getObjProp,\n getDataModelFromIdentifiers,\n getDataModelFromRange,\n transposeArray,\n toArray,\n extendsClass,\n concatModels,\n assembleModelFromIdentifiers,\n isValidValue,\n nestCollection,\n stack,\n getSymbol,\n Scales,\n Symbols,\n pathInterpolators,\n hslInterpolator,\n getSmallestDiff,\n require,\n formatTemporal,\n createSelection,\n temporalFields,\n retrieveNearestGroupByReducers\n} from './common-utils';\n\nexport {\n selectElement,\n makeElement,\n applyStyle,\n addClass,\n removeClass,\n appendElement,\n setAttrs,\n setStyles,\n createElement,\n createElements,\n clipElement,\n getElementsByClassName,\n getMousePos,\n getEvent,\n getD3Drag,\n getSmartComputedStyle,\n getClientPoint,\n hasTouch\n} from './renderer-utils';\n\nexport { default as Smartlabel } from 'fusioncharts-smartlabel';\n\nexport { dataSelect, DataObject } from './DataSystem';\n\nexport { default as LifeCycleManager } from './lifecycle-manager';\n\nexport { DimensionSubtype, FieldType, MeasureSubtype, DateTimeFormatter } from 'datamodel';\n\n","export const DRAG = 'drag';\nexport const HOVER = 'hover';\nexport const SELECTIONDRAG = 'selectiondrag';\nexport const CLICK = 'click';\nexport const LONGTOUCH = 'longtouch';\nexport const TOUCHDRAG = 'touchdrag';\nexport const ALL_ACTIONS = '*';\n","const SELECTION_NEW_ENTRY = 1;\nconst SELECTION_NEW_EXIT = -1;\nconst SELECTION_NULL = 0;\nconst SELECTION_OLD_ENTRY = 2;\nconst SELECTION_OLD_EXIT = -2;\n\nexport {\n SELECTION_NEW_ENTRY,\n SELECTION_NEW_EXIT,\n SELECTION_NULL,\n SELECTION_OLD_ENTRY,\n SELECTION_OLD_EXIT\n};\n","import SelectionSet from './selection-set';\n\nexport default SelectionSet;\n","import {\n SELECTION_NEW_ENTRY, SELECTION_NEW_EXIT, SELECTION_NULL, SELECTION_OLD_ENTRY, SELECTION_OLD_EXIT\n} from '../enums/selection';\n/* eslint-disable guard-for-in */\n\n/**\n * This component is used to keep track of the row tuples of the data which gets added and removed. This keeps\n * information of which rows are in previous and new entry set and previous and new exit set. This is initialized by\n * {@link Firebolt}.\n *\n * @public\n *\n * @class SelectionSet\n */\nclass SelectionSet {\n /**\n * Creates an instance of selection set\n *\n * @param {Array.} completeSet Set of unique ids.\n */\n constructor (completeSet, _volatile) {\n this.completeSet = completeSet;\n this._set = completeSet.reduce((obj, key) => {\n obj[key] = SELECTION_NULL;\n return obj;\n }, {});\n this._volatile = _volatile;\n this._completeSetCount = completeSet.length;\n this._lockedSelection = {};\n this._resetted = true;\n }\n\n /**\n * Adds a set of ids to the selection set. This also moves the other rows to exit set.\n *\n * @public\n * @param {Array.} ids Array of unique ids.\n *\n * @return {SelectionSet} Instance of selection set.\n */\n add (ids) {\n this._resetted = false;\n\n const set = this._set;\n // from exitset to entryset\n ids.forEach((i) => {\n set[i] = SELECTION_NEW_ENTRY;\n });\n\n for (const key in set) {\n if (set[key] !== SELECTION_NEW_ENTRY && set[key] !== SELECTION_OLD_ENTRY) {\n set[key] = set[key] < 0 ? SELECTION_OLD_EXIT : SELECTION_NEW_EXIT;\n }\n }\n return this;\n }\n\n /**\n * Adds an array of ids to the old entry set.\n *\n * @param {Array.} ids Array of unique ids\n *\n * @return {SelectionSet} Instance of selection set.\n */\n update (ids) {\n const set = this._set;\n // from exitset to entryset\n ids.forEach((i) => {\n set[i] = SELECTION_OLD_ENTRY;\n });\n\n return this;\n }\n\n /**\n * Moves all ids which in new entry set to old entry set.\n *\n * @public\n * @param {Array.} ids Array of unique ids\n *\n * @return {SelectionSet} Instance of selection set.\n */\n updateEntry () {\n const set = this._set;\n\n // from exitset to entryset\n for (const key in set) {\n set[key] = set[key] === SELECTION_NEW_ENTRY ? SELECTION_OLD_ENTRY : set[key];\n }\n return this;\n }\n\n /**\n * Moves an array of ids which are in new exit set to old exit set.\n *\n * @public\n *\n * @param {Array.} ids Array of unique ids.\n *\n * @return {SelectionSet} Instance of selection set.\n */\n updateExit () {\n const set = this._set;\n // from exitset to entryset\n for (const key in set) {\n set[key] = set[key] === SELECTION_NEW_EXIT ? SELECTION_OLD_EXIT : set[key];\n }\n return this;\n }\n\n /**\n * Removes an array of ids from the selection set. It also moves the remaining row ids to entry set.\n *\n * @public\n * @param {Array.} ids Array of unique ids\n *\n * @return {SelectionSet} Instance of selection set\n */\n remove (ids) {\n this._resetted = false;\n\n const set = this._set;\n ids.forEach((i) => {\n set[i] = SELECTION_NEW_EXIT;\n });\n\n for (const key in set) {\n if (set[key] !== SELECTION_NEW_EXIT && set[key] !== SELECTION_OLD_EXIT) {\n set[key] = set[key] === 0 ? SELECTION_NEW_ENTRY : SELECTION_OLD_ENTRY;\n }\n }\n\n return this;\n }\n\n getSets () {\n const set = this._set;\n const retObj = {\n entrySet: [[], []],\n exitSet: [[], []],\n completeSet: []\n };\n\n for (const key in set) {\n if (set[key] > 0) {\n set[key] === SELECTION_OLD_ENTRY && retObj.entrySet[0].push(key);\n set[key] === SELECTION_NEW_ENTRY && retObj.entrySet[1].push(key);\n } else if (set[key] < 0) {\n set[key] === SELECTION_OLD_EXIT && retObj.exitSet[0].push(key);\n set[key] === SELECTION_NEW_EXIT && retObj.exitSet[1].push(key);\n }\n retObj.completeSet.push(key);\n }\n\n ['entrySet', 'exitSet'].forEach((type) => {\n retObj[type] = retObj[type].map(e => e.map(Number));\n });\n retObj.completeSet = retObj.completeSet.map(Number);\n\n return retObj;\n }\n\n /**\n * Resets an array of ids in the selection set to initial state. It sets the value of every unique id value to\n * null in the selection set which means they are neither in entry set nor in exit set. If no ids are passed,\n * then it resets all the ids to null.\n *\n * @public\n *\n * @param {Array} ids Array of unique ids.\n * @return {SelectionSet} Instance of selection set.\n */\n reset (ids) {\n const set = this._set;\n if (ids) {\n ids.forEach((i) => {\n set[i] = SELECTION_NULL;\n });\n } else {\n const lockedSel = this._lockedSelection;\n for (const key in set) {\n if (!(key in lockedSel)) {\n set[key] = SELECTION_NULL;\n }\n }\n }\n this._resetted = true;\n return this;\n }\n\n /**\n * Gets the set of ids which are added in the selection set.\n *\n * @public\n *\n * @return {Array.} Array of unique ids\n */\n getEntrySet () {\n const set = this._set;\n const addSet = [];\n\n for (const key in set) {\n set[key] === SELECTION_NEW_ENTRY && addSet.push(key);\n }\n\n return addSet;\n }\n\n /**\n * Returns a set of unique ids which are already present in entry set.\n *\n * @public\n * @param {Array} addSet Array of unique ids which are added\n *\n * @return {Array} Array of unique ids which are already in old entry set or new entry set\n */\n getExistingEntrySet (addSet) {\n const set = this._set;\n return addSet.filter(d => set[d] === SELECTION_NEW_ENTRY || set[d] === SELECTION_OLD_ENTRY);\n }\n\n /**\n * Returns a set of unique ids which are already present in exit set.\n *\n * @public\n * @param {Array} addSet Array of unique ids which are added\n *\n * @return {Array} Array of unique ids which are already in old exit set or new exit set\n */\n getExistingExitSet (removeSet) {\n const set = this._set;\n return removeSet.filter(d => set[d] === SELECTION_NEW_EXIT || set[d] === SELECTION_OLD_EXIT);\n }\n\n /**\n * Gets the set of ids which are added in the selection set.\n * @return {Array.} Array of unique ids\n */\n getOldEntry () {\n const set = this._set;\n const updateSet = [];\n\n for (const key in set) {\n set[key] === SELECTION_OLD_ENTRY && updateSet.push(key);\n }\n return updateSet;\n }\n\n /**\n * Gets the set of ids which are added in the selection set.\n * @return {Array.} Array of unique ids\n */\n getOldExit () {\n const set = this._set;\n const updateSet = [];\n\n for (const key in set) {\n set[key] === SELECTION_OLD_EXIT && updateSet.push(key);\n }\n\n return updateSet;\n }\n\n /**\n * Gets the array of ids which are in the exit set.\n *\n * @public\n * @return {Array.} Array of unique ids\n */\n getExitSet () {\n const set = this._set;\n const removeSet = [];\n\n for (const key in set) {\n set[key] === SELECTION_NEW_EXIT && removeSet.push(key);\n }\n return removeSet;\n }\n\n /**\n * Gets all the ids which are either in exit or entry set.\n *\n * @public\n * @return {Array} Array of unique ids\n */\n getCompleteSet () {\n const set = this._set;\n const completeSet = [];\n\n for (const key in set) {\n completeSet.push(key);\n }\n\n return completeSet;\n }\n\n getCompleteSetCount () {\n return this._completeSetCount;\n }\n\n resetted () {\n return this._resetted;\n }\n\n /**\n * Swaps the add set and remove set in the selection set.\n * @return {SelectionSet} Instance of selection set.\n */\n toggle () {\n const set = this._set;\n\n for (const key in set) {\n if (set[key] === SELECTION_NEW_ENTRY) {\n set[key] = SELECTION_NEW_EXIT;\n } else if (set[key] === SELECTION_NEW_EXIT) {\n set[key] = SELECTION_NEW_ENTRY;\n } else if (set[key] === SELECTION_OLD_ENTRY) {\n set[key] = SELECTION_OLD_EXIT;\n } else {\n set[key] = SELECTION_OLD_ENTRY;\n }\n }\n\n return this;\n }\n}\n\nexport default SelectionSet;\n","import { clone } from 'muze-utils';\nimport * as SELECTION from '../enums/selection';\n\nexport const initializeSideEffects = (context, sideEffects) => {\n const sideEffectsMap = context._sideEffects;\n const config = context.config();\n sideEffects = sideEffects instanceof Array ? sideEffects : Object.values(sideEffects);\n sideEffects.forEach((SideEffect) => {\n const formalName = SideEffect.formalName();\n const sideEffectInstance = sideEffectsMap[formalName];\n sideEffectsMap[formalName] = sideEffectInstance || new SideEffect(context);\n const sideEffectConf = config[formalName];\n sideEffectConf && sideEffectsMap[formalName].config(sideEffectConf);\n });\n return sideEffectsMap;\n};\n\nexport const initializeBehaviouralActions = (context, actions) => {\n const dispatchableBehaviours = {};\n\n actions = actions instanceof Array ? actions : Object.values(actions);\n actions.forEach((Action) => {\n dispatchableBehaviours[Action.formalName()] = new Action(context);\n });\n return dispatchableBehaviours;\n};\n\nexport const initializePhysicalActions = (context, actions) => {\n const physicalActions = {};\n\n for (const name in actions) {\n if (!({}).hasOwnProperty.call(name, actions)) {\n physicalActions[name] = actions[name](context);\n }\n }\n return physicalActions;\n};\n\nexport const changeSideEffectAvailability = (context, fn, toEnable) => {\n const sideEffects = context.sideEffects();\n for (const key in sideEffects) {\n if ({}.hasOwnProperty.call(sideEffects, key)) {\n let change = true;\n if (fn && fn(key) === false) {\n change = false;\n }\n if (change) {\n toEnable ? sideEffects[key].enable() : sideEffects[key].disable();\n }\n }\n }\n};\n\nexport const getMergedSet = set => [...new Set([...set[0], ...set[1]])];\n\nexport const getSourceFields = (propagationInf, criteria = {}) => {\n const sourceIdentifiers = propagationInf.sourceIdentifiers;\n let sourceFields;\n if (sourceIdentifiers) {\n sourceFields = sourceIdentifiers.getSchema().map(d => d.name);\n } else if (criteria instanceof Array) {\n sourceFields = criteria[0];\n } else {\n sourceFields = Object.keys(criteria || {});\n }\n return sourceFields;\n};\n\nconst conditionsMap = {\n newEntry: [SELECTION.SELECTION_NEW_ENTRY],\n oldEntry: [SELECTION.SELECTION_OLD_ENTRY],\n mergedEnter: [SELECTION.SELECTION_NEW_ENTRY, SELECTION.SELECTION_OLD_ENTRY],\n newExit: [SELECTION.SELECTION_NEW_EXIT],\n oldExit: [SELECTION.SELECTION_OLD_EXIT],\n mergedExit: [SELECTION.SELECTION_NEW_EXIT, SELECTION.SELECTION_OLD_EXIT],\n complete: []\n};\n\nexport const getModelFromSet = (type, model, set) => {\n if (model) {\n return model.select((fields, i) =>\n (conditionsMap[type].some(condition => set[i] === condition)), {\n saveChild: false\n });\n }\n return null;\n};\n\nexport const getSetInfo = (type, set, config) => {\n let model = null;\n const filteredDataModel = config.filteredDataModel;\n const selectionSet = config.selectionSet;\n if (!config.propagationData) {\n if (selectionSet.resetted()) {\n model = null;\n } else {\n model = getModelFromSet(type, config.dataModel, config.selectionSet._set);\n }\n } else if (filteredDataModel) {\n model = type === 'mergedEnter' ? filteredDataModel[0] : filteredDataModel[1];\n }\n return {\n uids: set,\n length: set.length,\n model\n };\n};\n\nexport const getSideEffects = (behaviour, behaviourEffectMap) => {\n const sideEffects = [];\n for (const key in behaviourEffectMap) {\n const behaviours = key.split(',');\n const found = behaviours.some(d => d === behaviour);\n if (found) {\n sideEffects.push({\n effects: behaviourEffectMap[key],\n behaviours\n });\n }\n }\n return sideEffects;\n};\n\nexport const unionSets = (context, behaviours) => {\n let combinedSet = {};\n const models = {\n mergedEnter: null,\n mergedExit: null\n };\n behaviours.forEach((behaviour) => {\n const entryExitSet = context._entryExitSet[behaviour];\n if (entryExitSet) {\n combinedSet = Object.assign(combinedSet, clone(entryExitSet));\n ['mergedEnter', 'mergedExit'].forEach((type) => {\n const model = entryExitSet[type].model;\n let existingModel = models[type];\n if (!existingModel) {\n existingModel = models[type] = model;\n } else if (`${model.getSchema().map(d => d.name).sort()}` ===\n `${existingModel.getSchema().map(d => d.name).sort()}`) {\n existingModel = models[type] = model.union(existingModel);\n } else {\n existingModel = model;\n }\n combinedSet[type].model = existingModel;\n });\n }\n });\n return combinedSet;\n};\n","import {\n mergeRecursive,\n hasTouch,\n filterPropagationModel,\n FieldType,\n selectElement,\n isSimpleObject\n} from 'muze-utils';\nimport { ALL_ACTIONS } from './enums/actions';\nimport SelectionSet from './selection-set';\nimport {\n initializeBehaviouralActions,\n initializeSideEffects,\n changeSideEffectAvailability,\n initializePhysicalActions,\n unionSets,\n getSideEffects\n} from './helper';\n\n/**\n * This class is responsible for dispatching behavioural actions and side effects. It also keeps the information of\n * registered physical actions, behavioural actions and side effects. Also, it keeps the map of physical and behavioural\n * actions and behavioural actions and side effects. Whenever any behavioural action is dispatched, it also propagates\n * the rows which got affected to the other datamodels. This class is initialized by {@link VisualUnit} and legend to\n * manage it's interaction.\n *\n * @public\n * @class Firebolt\n * @module Firebolt\n */\nexport default class Firebolt {\n constructor (context, actions, sideEffects, behaviourEffectMap) {\n this.context = context;\n this._sideEffectDefinitions = {};\n this._sideEffects = {};\n this._propagationInf = {};\n this._actions = {\n behavioural: {},\n physical: {}\n };\n this._selectionSet = {};\n this._volatileSelectionSet = {};\n this._propagationFields = {};\n this._sourceSideEffects = {\n selectionBox: () => false\n };\n this._propagationBehaviourMap = {};\n this._sourceBehaviours = {};\n this._actionBehaviourMap = {};\n this._config = {};\n this._behaviourEffectMap = {};\n this._entryExitSet = {};\n this._actionHistory = {};\n this._queuedSideEffects = {};\n\n this.mapSideEffects(behaviourEffectMap);\n this.registerBehaviouralActions(actions.behavioural);\n this.registerSideEffects(sideEffects);\n this.registerPhysicalBehaviouralMap(actions.physicalBehaviouralMap);\n this.registerPhysicalActions(actions.physical);\n }\n\n config (...config) {\n if (config.length) {\n this._config = mergeRecursive(this._config, config[0]);\n return this;\n }\n return this._config;\n }\n\n mapSideEffects (behEffectMap) {\n const behaviourEffectMap = this._behaviourEffectMap;\n for (const key in behEffectMap) {\n if ({}.hasOwnProperty.call(behEffectMap, key)) {\n const sideEffects = behEffectMap[key] || [];\n let preventDefaultActions = false;\n let effectNames;\n if (isSimpleObject(sideEffects)) {\n effectNames = sideEffects.effects;\n preventDefaultActions = sideEffects.preventDefaultActions;\n } else {\n effectNames = sideEffects;\n }\n !behaviourEffectMap[key] && (behaviourEffectMap[key] = []);\n this._behaviourEffectMap[key] = [...new Set(preventDefaultActions ? effectNames :\n [...behaviourEffectMap[key], ...effectNames])];\n }\n }\n return this;\n }\n\n registerBehaviouralActions (actions) {\n const behaviours = initializeBehaviouralActions(this, actions);\n this.prepareSelectionSets(behaviours);\n Object.assign(this._actions.behavioural, behaviours);\n return this;\n }\n\n prepareSelectionSets () {\n return this;\n }\n\n registerSideEffects (sideEffects) {\n for (const key in sideEffects) {\n this._sideEffectDefinitions[sideEffects[key].formalName()] = sideEffects[key];\n }\n this.initializeSideEffects();\n return this;\n }\n\n applySideEffects (sideEffects, selectionSet, payload) {\n const sideEffectStore = this.sideEffects();\n const actionHistory = this._actionHistory;\n const queuedSideEffects = this._queuedSideEffects;\n sideEffects.forEach((sideEffect) => {\n let options;\n let name;\n const effects = sideEffect.effects;\n const behaviours = sideEffect.behaviours;\n const combinedSet = unionSets(this, behaviours, selectionSet);\n effects.forEach((effect) => {\n if (typeof effect === 'object') {\n name = effect.name;\n options = effect.options;\n } else {\n name = effect;\n }\n\n const sideEffectInstance = sideEffectStore[name];\n if (sideEffectInstance.isEnabled()) {\n if (!sideEffectInstance.constructor.mutates() &&\n Object.values(actionHistory).some(d => d.isMutableAction)) {\n queuedSideEffects[`${name}-${behaviours.join()}`] = {\n name,\n params: [combinedSet, payload, options]\n };\n } else {\n this.dispatchSideEffect(name, combinedSet, payload, options);\n }\n }\n });\n });\n return this;\n }\n\n dispatchSideEffect (name, selectionSet, payload, options = {}) {\n const sideEffectStore = this.sideEffects();\n const sideEffect = sideEffectStore[name];\n let disable = false;\n if (options.filter && options.filter(sideEffect)) {\n disable = true;\n }\n !disable && sideEffectStore[name].apply(selectionSet, payload, options);\n }\n\n registerPropagationBehaviourMap (map) {\n this._propagationBehaviourMap = Object.assign(this._propagationBehaviourMap, map || {});\n return this;\n }\n\n dispatchBehaviour (behaviour, payload, propagationInfo = {}) {\n const propagate = propagationInfo.propagate !== undefined ? propagationInfo.propagate : true;\n const behaviouralActions = this._actions.behavioural;\n const action = behaviouralActions[behaviour];\n const behaviourEffectMap = this._behaviourEffectMap;\n const sideEffects = getSideEffects(behaviour, behaviourEffectMap);\n this._propagationInf = propagationInfo;\n\n if (action) {\n const selectionSet = action.dispatch(payload);\n const propagationSelectionSet = this.getPropagationSelectionSet(selectionSet);\n this._entryExitSet[behaviour] = propagationSelectionSet;\n const shouldApplySideEffects = this.shouldApplySideEffects(propagate);\n\n if (propagate) {\n this.propagate(behaviour, payload, selectionSet.find(d => d.sourceSelectionSet), sideEffects);\n }\n if (shouldApplySideEffects) {\n const applicableSideEffects = this.getApplicableSideEffects(sideEffects, payload, propagationInfo);\n this.applySideEffects(applicableSideEffects, propagationSelectionSet, payload);\n }\n }\n\n return this;\n }\n\n getPropagationSelectionSet (selectionSet) {\n return selectionSet.find(d => !d.sourceSelectionSet);\n }\n\n shouldApplySideEffects () {\n return true;\n }\n\n changeBehaviourStateOnPropagation (behaviour, value) {\n if (value instanceof Function) {\n this._sourceBehaviours[behaviour] = value;\n } else {\n this._sourceBehaviours[behaviour] = () => value;\n }\n return this;\n }\n\n changeSideEffectStateOnPropagation (sideEffect, value) {\n if (value instanceof Function) {\n this._sourceSideEffects[sideEffect] = value;\n } else {\n this._sourceSideEffects[sideEffect] = () => value;\n }\n }\n\n propagate () {\n return this;\n }\n\n sideEffects (...sideEffects) {\n if (sideEffects.length) {\n this._sideEffects = sideEffects[0];\n return this;\n }\n return this._sideEffects;\n }\n\n enableSideEffects (fn) {\n changeSideEffectAvailability(this, fn, true);\n return this;\n }\n\n disableSideEffects (fn) {\n changeSideEffectAvailability(this, fn, false);\n return this;\n }\n\n dissociateBehaviour (behaviour, physicalAction) {\n const actionBehaviourMap = this._actionBehaviourMap;\n for (const key in actionBehaviourMap) {\n if (key === physicalAction) {\n const behaviourMap = actionBehaviourMap[key];\n behaviourMap.behaviours = behaviourMap.behaviours.filter(d => d !== behaviour);\n this.mapActionsAndBehaviour(key);\n }\n }\n\n return this;\n }\n\n dissociateSideEffect (sideEffect, behaviour) {\n const behaviourEffectMap = this._behaviourEffectMap;\n behaviourEffectMap[behaviour] = behaviourEffectMap[behaviour].filter(d => (d.name || d) !== sideEffect);\n return this;\n }\n\n getApplicableSideEffects (sideEffects) {\n return sideEffects;\n }\n\n attachPropagationListener (dataModel) {\n dataModel.unsubscribe('propagation');\n dataModel.on('propagation', this.onDataModelPropagation());\n return this;\n }\n\n onDataModelPropagation () {\n return (propValue) => {\n const payload = propValue.payload;\n const action = payload.action;\n\n this.dispatchBehaviour(action, payload, {\n propagate: false\n });\n };\n }\n\n createSelectionSet (uniqueIds, behaviouralActions) {\n const behaviours = behaviouralActions || this._actions.behavioural;\n const selectionSet = this._selectionSet;\n const volatileSelectionSet = this._volatileSelectionSet;\n\n for (const key in behaviours) {\n if ({}.hasOwnProperty.call(behaviours, key)) {\n selectionSet[key] = new SelectionSet(uniqueIds);\n volatileSelectionSet[key] = new SelectionSet(uniqueIds, true);\n }\n }\n this._volatileSelectionSet = volatileSelectionSet;\n this.selectionSet(selectionSet);\n return this;\n }\n\n selectionSet (...selectionSet) {\n if (selectionSet.length) {\n this._selectionSet = selectionSet[0];\n return this;\n }\n return this._selectionSet;\n }\n\n initializeSideEffects () {\n const sideEffectDefinitions = this._sideEffectDefinitions;\n this.sideEffects(initializeSideEffects(this, sideEffectDefinitions));\n return this;\n }\n\n registerPhysicalActions (actions) {\n const initedActions = initializePhysicalActions(this, actions);\n Object.assign(this._actions.physical, initedActions);\n return this;\n }\n\n /**\n * Allows to propagate the datamodel with only the supplied fields. When propagation is done, then the fields\n * which are supplied for the specified behavioural action is propagated.\n *\n * @public\n *\n * @param {string} action Name of behavioural action. If '*' is specified, then for all behavioural actions it is\n * applied.\n * @param {Array} fields Array of field names which will be propagated.\n * @param {boolean} append If true, then it is appended to the existing propagation data model fields else only\n * those fields are projected from propagation data model and propagated.\n *\n * @return {Firebolt} Instance of firebolt\n */\n propagateWith (action, fields, append = false) {\n const behaviouralActions = this._actions.behavioural;\n if (fields.length) {\n if (action === ALL_ACTIONS) {\n for (const key in behaviouralActions) {\n this._propagationFields[key] = {\n fields,\n append\n };\n }\n } else {\n this._propagationFields[action] = {\n fields,\n append\n };\n }\n return this;\n }\n return this._propagationFields;\n }\n\n /**\n * Map actions and behaviours\n * @return {Firebolt} Firebolt instance\n */\n mapActionsAndBehaviour (phyAction) {\n const initedPhysicalActions = this._actions.physical;\n const map = this._actionBehaviourMap;\n\n for (const action in map) {\n if (!({}).hasOwnProperty.call(action, map) && action === (phyAction || action)) {\n let target;\n const mapObj = map[action];\n target = mapObj.target;\n const touch = mapObj.touch;\n if (!target) {\n target = this.context.getDefaultTargetContainer();\n }\n const bind = hasTouch() ? touch === true || touch === undefined : !touch;\n bind && this.bindActionWithBehaviour(initedPhysicalActions[action],\n target, mapObj.behaviours);\n }\n }\n return this;\n }\n\n registerPhysicalBehaviouralMap (map) {\n this._actionBehaviourMap = mergeRecursive(this._actionBehaviourMap, map);\n return this;\n }\n\n /**\n * Binds a target element with an action.\n *\n * @param {Function} action Action method\n * @param {string} target Class name of element\n * @param {Array} behaviourList Array of behaviours\n * @return {FireBolt} Instance of firebolt\n */\n bindActionWithBehaviour (action, targets, behaviourList) {\n if (typeof (targets) === 'string') {\n targets = [targets];\n }\n targets.forEach((target) => {\n const mount = this.context.mount();\n const nodes = target.node instanceof Function ? target : selectElement(mount).selectAll(target);\n if (!nodes.empty()) {\n if (nodes instanceof Array) {\n nodes.forEach((node) => {\n action(selectElement(node), behaviourList);\n });\n } else {\n action(nodes, behaviourList);\n }\n }\n });\n return this;\n }\n\n getPropagationInf () {\n return this._propagationInf;\n }\n\n getAddSetFromCriteria (criteria, propagationInf = {}) {\n const context = this.context;\n const filteredDataModel = propagationInf.data ? propagationInf.data :\n context.getDataModelFromIdentifiers(criteria, 'all');\n const xFields = context.fields().x || [];\n const yFields = context.fields().y || [];\n const xMeasures = xFields.every(field => field.type() === FieldType.MEASURE);\n const yMeasures = yFields.every(field => field.type() === FieldType.MEASURE);\n return {\n model: filteredDataModel,\n uids: criteria === null ? null : (propagationInf.data ? filterPropagationModel(this.getFullData(),\n propagationInf.data[0], xMeasures && yMeasures).getData().uids : filteredDataModel[0].getData().uids)\n };\n }\n\n getSelectionSets (action) {\n const sourceId = this.context.id();\n const propagationInf = this._propagationInf || {};\n const propagationSource = propagationInf.sourceId;\n let applicableSelectionSets = [];\n if (propagationSource !== sourceId) {\n applicableSelectionSets = [this._volatileSelectionSet[action]];\n }\n\n if (propagationSource) {\n applicableSelectionSets.push(this.selectionSet()[action]);\n }\n return applicableSelectionSets;\n }\n\n getFullData () {\n return this.context.data();\n }\n\n resetted () {\n return this._resetted;\n }\n\n /**\n * Returns the entry and exit set information of the specified behavioural action.\n *\n * @public\n *\n * @param {string} behaviour Name of behavioural action.\n *\n * @return {Object} Entry exit set information.\n */\n getEntryExitSet (behaviour) {\n return this._entryExitSet[behaviour];\n }\n}\n","import { getSetInfo, getMergedSet, getSourceFields } from '../../helper';\n\n/**\n * This is the base class has all the common functionalities needed for all behavioural actions. Any other behavioural\n * action needs to extend this class.\n *\n * @public\n * @class GenericBehaviour\n * @module GenericBehaviour\n */\nexport default class GenericBehaviour {\n constructor (firebolt) {\n this.firebolt = firebolt;\n this._enabled = true;\n }\n\n /**\n * Returns entry and exit set information. This method is called by firebolt when ```dispatchBehaviour``` is called\n * dynamically or when any physical action is triggered on the chart.\n *\n * @param {Object} payload Payload information.\n * @param {Object|Array} payload.criteria Identifiers of data interacted with.\n *\n * @return {Array} Entry and exit set information.\n */\n dispatch (payload) {\n const criteria = payload.criteria;\n const firebolt = this.firebolt;\n const formalName = this.constructor.formalName();\n const selectionSets = firebolt.getSelectionSets(formalName);\n const {\n model: filteredDataModel,\n uids\n } = this.firebolt.getAddSetFromCriteria(criteria, this.firebolt.getPropagationInf());\n const entryExitSets = selectionSets.map((selectionSet) => {\n this.setSelectionSet(uids, selectionSet);\n return this.getEntryExitSet(selectionSet, filteredDataModel, payload);\n });\n\n return entryExitSets;\n }\n\n /**\n * Updates the selection set by adding uids to the instance of {@link SelectionSet} or removing them.\n * {@link SelectionSet} keeps the information of which rows are in the entry set and exit set.\n *\n * @public\n * @param {Array} addSet Array of row ids which got affected during interaction.\n * @param {SelectionSet} selectionSet Instance of selection set.\n *\n * @return {GenericBehaviour} Instance of behaviour.\n */\n setSelectionSet () {\n return this;\n }\n\n getEntryExitSet (selectionSet, filteredDataModel, payload) {\n const {\n entrySet,\n exitSet,\n completeSet\n } = selectionSet.getSets();\n const propagationInf = this.firebolt.getPropagationInf();\n const dataModel = this.firebolt.getFullData();\n const setConfig = {\n isSourceFieldPresent: propagationInf.isSourceFieldPresent,\n dataModel,\n filteredDataModel,\n propagationData: propagationInf.data,\n selectionSet\n };\n\n return {\n entrySet: [getSetInfo('oldEntry', entrySet[0], setConfig),\n getSetInfo('newEntry', entrySet[1], setConfig)],\n exitSet: [getSetInfo('oldEntry', exitSet[0], setConfig),\n getSetInfo('newExit', exitSet[1], setConfig)],\n mergedEnter: getSetInfo('mergedEnter', getMergedSet(entrySet), setConfig),\n mergedExit: getSetInfo('mergedExit', getMergedSet(exitSet), setConfig),\n completeSet: getSetInfo('complete', completeSet, setConfig),\n isSourceFieldPresent: propagationInf.isSourceFieldPresent,\n fields: getSourceFields(propagationInf, payload.criteria),\n sourceSelectionSet: selectionSet._volatile === true\n };\n }\n\n static mutates () {\n return false;\n }\n\n enable () {\n this._enabled = true;\n }\n\n disable () {\n this._enabled = false;\n }\n\n isEnabled () {\n return this._enabled;\n }\n}\n\n","import GenericBehaviour from './generic';\nimport { getMergedSet } from '../../helper';\nimport * as SELECTION from '../../enums/selection';\n\nexport default class VolatileBehaviour extends GenericBehaviour {\n setSelectionSet (addSet, selectionSet) {\n if (addSet === null) {\n selectionSet.reset();\n } else if (addSet.length) {\n // new add set\n const existingAddSet = addSet.filter(d => selectionSet._set[d] === SELECTION.SELECTION_NEW_ENTRY\n || selectionSet._set[d] === SELECTION.SELECTION_OLD_ENTRY);\n selectionSet.updateExit();\n const { entrySet } = selectionSet.getSets();\n selectionSet.reset(getMergedSet(entrySet));\n selectionSet.add(addSet);\n selectionSet.update(existingAddSet);\n } else {\n selectionSet.remove(selectionSet.getCompleteSet());\n }\n }\n}\n","export const BRUSH = 'brush';\nexport const HIGHLIGHT = 'highlight';\nexport const TOOLTIP = 'tooltip';\nexport const FILTER = 'filter';\nexport const SELECT = 'select';\n","import VolatileBehaviour from './volatile';\nimport { HIGHLIGHT } from '../../enums/behaviours';\n\nexport default class HighlightBehaviour extends VolatileBehaviour {\n static formalName () {\n return HIGHLIGHT;\n }\n}\n","import VolatileBehaviour from './volatile';\nimport * as BEHAVIOURNAMES from '../../enums/behaviours';\n\n/**\n * This is the behaviour for brushing a region on the chart. It accepts a payload\n * which contains the x and y range of the data and other configuration. It will then\n * create a selection box from the range and select the points which fall within the range.\n */\nexport default class BrushBehaviour extends VolatileBehaviour {\n static formalName () {\n return BEHAVIOURNAMES.BRUSH;\n }\n}\n","import VolatileBehaviour from './volatile';\nimport { FILTER } from '../../enums/behaviours';\n\nexport default class FilterBehaviour extends VolatileBehaviour {\n static formalName () {\n return FILTER;\n }\n\n static mutates () {\n return true;\n }\n}\n","import GenericBehaviour from './generic';\nimport { getMergedSet } from '../../helper';\nimport * as SELECTION from '../../enums/selection';\n\nexport default class PersistentBehaviour extends GenericBehaviour {\n setSelectionSet (addSet, selectionSet) {\n if (addSet === null) {\n selectionSet.reset();\n } else if (addSet.length) {\n const propagationInf = this.firebolt.getPropagationInf();\n // new add set\n const existingAddSet = addSet.filter(d => selectionSet._set[d] === SELECTION.SELECTION_NEW_ENTRY\n || selectionSet._set[d] === SELECTION.SELECTION_OLD_ENTRY);\n if (propagationInf.propagate === false) {\n selectionSet.updateExit();\n const { entrySet } = selectionSet.getSets();\n selectionSet.reset(getMergedSet(entrySet));\n selectionSet.add(addSet);\n selectionSet.update(existingAddSet);\n } else {\n // existing add set\n if (existingAddSet.length) {\n selectionSet.updateExit();\n selectionSet.remove(existingAddSet);\n } else {\n selectionSet.updateEntry();\n selectionSet.add(addSet);\n }\n const { exitSet } = selectionSet.getSets();\n const mergedExitSet = getMergedSet(exitSet);\n const completeSetCount = selectionSet.getCompleteSet().length;\n if (mergedExitSet.length === completeSetCount) {\n selectionSet.reset();\n }\n }\n } else {\n selectionSet.remove(selectionSet.getCompleteSet());\n }\n\n return this;\n }\n}\n","import PersistentBehaviour from './persistent';\nimport { SELECT } from '../../enums/behaviours';\n\nexport default class SelectBehaviour extends PersistentBehaviour {\n static formalName () {\n return SELECT;\n }\n}\n\n","import { DimensionSubtype, MeasureSubtype } from 'muze-utils';\n/**\n * Gets the drag action configuration\n * @param {VisualUnit} instance instance of visual unit\n * @param {Object} config x y positions\n * @return {Object} Payload of behaviour\n*/\n/* istanbul ignore next */ const getDragActionConfig = (sourceInfo, config, fieldsConfig) => {\n if (!(sourceInfo.axes.x || sourceInfo.axes.y)) {\n return {\n criteria: null\n };\n }\n\n const axes = sourceInfo.axes;\n const xAxis = axes.x[0];\n const yAxis = axes.y[0];\n const axisFields = sourceInfo.fields;\n const xField = axisFields.x[0].getMembers()[0];\n const yField = axisFields.y[0].getMembers()[0];\n const xFieldType = fieldsConfig[xField].def.subtype;\n const yFieldType = fieldsConfig[yField].def.subtype;\n const dimensions = {};\n const stPos = config.startPos;\n const endPos = config.endPos;\n\n if (stPos.x === endPos.x && stPos.y === endPos.y) {\n return {\n criteria: null\n };\n }\n\n const dragDim = xFieldType === MeasureSubtype.CONTINUOUS ? (yFieldType === MeasureSubtype.CONTINUOUS ?\n ['x', 'y'] : ['y']) : ['x'];\n const criteria = {};\n const isXDimension = xFieldType === DimensionSubtype.CATEGORICAL;\n const isYDimension = yFieldType === DimensionSubtype.CATEGORICAL;\n const xRange = xAxis.invertExtent(stPos.x, endPos.x);\n const yRange = yAxis.invertExtent(stPos.y, endPos.y);\n const selectedDomains = {\n x: stPos.x === endPos.x ? [] : (isXDimension ? xRange : xRange.sort((a, b) => a - b)),\n y: stPos.y === endPos.y ? [] : (isYDimension ? yRange : yRange.sort((a, b) => a - b))\n };\n const rangeObj = {};\n\n if (dragDim.length === 2) {\n rangeObj[xField] = selectedDomains.x;\n rangeObj[yField] = selectedDomains.y;\n if (xField === yField) {\n const xdom = selectedDomains.x;\n const ydom = selectedDomains.y;\n const min = xdom[0] > ydom[0] ? ydom : xdom;\n const max = min === ydom ? xdom : ydom;\n if (min[1] < max[0]) {\n rangeObj[xField] = [];\n } else {\n rangeObj[xField] = [max[0], min[1] < max[1] ? min[1] : max[1]];\n }\n dimensions.x = [stPos.x, endPos.x];\n dimensions.y = [stPos.y, endPos.y];\n }\n } else {\n criteria[dragDim[0]] = selectedDomains[dragDim[0]] || [];\n\n if (dragDim[0] === 'x') {\n rangeObj[xField] = criteria.x;\n if (xFieldType === DimensionSubtype.CATEGORICAL) {\n dimensions.x = (config.snap && stPos.x !== endPos.x) ? xAxis.getNearestRange(stPos.x, endPos.x) :\n [stPos.x, endPos.x];\n }\n } else {\n rangeObj[yField] = criteria.y;\n if (yFieldType === DimensionSubtype.CATEGORICAL) {\n dimensions.y = (config.snap && stPos.y !== endPos.y) ? yAxis.getNearestRange(stPos.y, endPos.y) :\n [stPos.y, endPos.y];\n }\n }\n }\n\n return {\n criteria: rangeObj,\n dimensions\n };\n};\n\nexport default getDragActionConfig;\n","import {\n getEvent,\n getD3Drag\n } from 'muze-utils';\n\nimport getDragActionConfig from './drag-action-config';\n\n/**\n * Adds dragging action to the target element.\n * @param {VisualUnit} instance Instance of visual unit.\n * @param {SVGElement} targetEl Element on which brushing action is needed.\n * @param {Array} behaviours Array of behaviours\n */\nexport const attachDragEvent = (targetEl, behaviours, firebolt, touch) => {\n let startPos = {};\n let endPos = {};\n let drawingInf;\n\n const d3Drag = getD3Drag();\n let touchStart;\n targetEl.call(d3Drag().on('start', () => {\n const event = getEvent();\n startPos = {\n x: event.x,\n y: event.y\n };\n drawingInf = firebolt.context.getDrawingContext();\n touchStart = new Date().getTime();\n }).on('drag', () => {\n const event = getEvent();\n endPos = {\n x: event.x,\n y: event.y\n };\n if (touch && Math.abs(startPos.x - endPos.x) <= 5) {\n return;\n }\n endPos.x = Math.max(0, Math.min(endPos.x, drawingInf.width));\n endPos.y = Math.max(0, Math.min(endPos.y, drawingInf.height));\n\n const payload = getDragActionConfig(firebolt.context.getSourceInfo(), {\n startPos,\n endPos\n }, firebolt.context.data().getFieldsConfig());\n behaviours.forEach(beh => firebolt.dispatchBehaviour(beh, payload));\n }).on('end', () => {\n const event = getEvent();\n endPos = {\n x: event.x,\n y: event.y\n };\n const duration = new Date().getTime() - touchStart;\n\n if (touch && duration > 100 && Math.abs(startPos.x - endPos.x) <= 5) {\n return;\n }\n endPos.x = Math.max(0, Math.min(endPos.x, drawingInf.width));\n endPos.y = Math.max(0, Math.min(endPos.y, drawingInf.height));\n\n const payload = getDragActionConfig(firebolt.context.getSourceInfo(), {\n startPos,\n endPos,\n snap: true\n }, firebolt.context.data().getFieldsConfig());\n payload.dragEnd = true;\n behaviours.forEach(beh => firebolt.dispatchBehaviour(beh, payload));\n }));\n};\n\n","import { getClientPoint, getEvent } from 'muze-utils';\nimport { CONSOLIDATED, FRAGMENTED } from '../../enums/constants';\n\n/**\n * Adds mouse interactions to target element.\n * @param {Firebolt} instance instance of firebolt.\n * @param {SVGElement} targetEl Element on which the event listeners will be attached.\n * @param {Array} behaviours Array of behaviours\n */\n/* istanbul ignore next */ const hover = firebolt => (targetEl, behaviours) => {\n const dispatchBehaviour = function (args) {\n const event = getEvent();\n const context = firebolt.context;\n const tooltipConf = context.config().interaction.tooltip;\n const mode = tooltipConf.mode;\n const pos = getClientPoint(context.getDrawingContext().svgContainer, event);\n const nearestPoint = context.getNearestPoint(pos.x, pos.y, {\n getAllPoints: mode === CONSOLIDATED || mode === FRAGMENTED,\n data: args,\n event\n });\n const payload = {\n criteria: nearestPoint ? nearestPoint.id : null,\n showInPosition: nearestPoint.showInPosition,\n target: nearestPoint.target,\n position: pos,\n mode\n };\n\n behaviours.forEach(beh => firebolt.dispatchBehaviour(beh, payload));\n event.stopPropagation();\n };\n\n targetEl.on('mouseover', dispatchBehaviour)\n .on('mousemove', dispatchBehaviour)\n .on('mouseout', () => {\n behaviours.forEach(beh => firebolt.dispatchBehaviour(beh, {\n criteria: null\n }));\n });\n};\n\nexport default hover;\n","export const CLASSPREFIX = 'muze';\nexport const CONSOLIDATED = 'consolidated';\nexport const FRAGMENTED = 'fragmented';\n\n","import { getClientPoint } from 'muze-utils';\n\nexport const generatePayloadFromEvent = function (args, event, firebolt) {\n const context = firebolt.context;\n const pos = getClientPoint(context.getDrawingContext().svgContainer, event.touches ? event.touches[0] : event);\n const nearestPoint = context.getNearestPoint(pos.x, pos.y, {\n data: args,\n event\n });\n return {\n criteria: nearestPoint ? nearestPoint.id : null,\n showInPosition: nearestPoint.showInPosition,\n target: nearestPoint.target,\n position: pos\n };\n};\n","import { getEvent } from 'muze-utils';\nimport { generatePayloadFromEvent } from './helpers';\n\n/**\n * Adds mouse interactions to target element.\n * @param {VisualUnit} instance instance of visual unit.\n * @param {SVGElement} targetEl Element on which the event listeners will be attached.\n * @param {Array} behaviours Array of behaviours\n */\n/* istanbul ignore next */ const click = firebolt => (targetEl, behaviours) => {\n const dispatchBehaviour = function (args) {\n const event = getEvent();\n const payload = generatePayloadFromEvent(args, event, firebolt);\n behaviours.forEach(beh => firebolt.dispatchBehaviour(beh, payload));\n event.stopPropagation();\n };\n\n targetEl.on('click', dispatchBehaviour);\n};\nexport default click;\n","import drag from './drag';\nimport hover from './hover';\nimport { longtouch } from './longtouch';\nimport { touchdrag } from './touch-drag';\nimport * as ACTIONNAMES from '../../enums/actions';\nimport click from './click';\n\nexport const physicalActions = {\n [ACTIONNAMES.DRAG]: drag,\n [ACTIONNAMES.HOVER]: hover,\n [ACTIONNAMES.CLICK]: click,\n [ACTIONNAMES.LONGTOUCH]: longtouch,\n [ACTIONNAMES.TOUCHDRAG]: touchdrag\n};\n\n","import { attachDragEvent } from './helpers/drag-event';\n\n/**\n * Adds dragging action to the target element.\n * @param {VisualUnit} instance Instance of visual unit.\n * @param {SVGElement} targetEl Element on which brushing action is needed.\n * @param {Array} behaviours Array of behaviours\n */\n/* istanbul ignore next */ const drag = firebolt => (targetEl, behaviours) => {\n attachDragEvent(targetEl, behaviours, firebolt);\n};\n\nexport default drag;\n","/* global setTimeout */\nimport { getEvent } from 'muze-utils';\nimport { generatePayloadFromEvent } from './helpers';\n\n/**\n * Adds mouse interactions to target element.\n * @param {VisualUnit} instance instance of visual unit.\n * @param {SVGElement} targetEl Element on which the event listeners will be attached.\n * @param {Array} behaviours Array of behaviours\n */\nexport const longtouch = firebolt => (targetEl, behaviours) => {\n let event;\n let touchEnd;\n const dispatchBehaviour = function (args) {\n const payload = generatePayloadFromEvent(args, event, firebolt);\n behaviours.forEach(beh => firebolt.dispatchBehaviour(beh, payload));\n event.stopPropagation();\n };\n\n touchEnd = false;\n event = getEvent();\n targetEl.on('touchstart', (args) => {\n event = getEvent();\n touchEnd = false;\n setTimeout(() => {\n if (!touchEnd) {\n dispatchBehaviour(args);\n } else {\n behaviours.forEach(beh => firebolt.dispatchBehaviour(beh, {\n criteria: null\n }));\n }\n }, 100);\n }).on('touchend', () => {\n touchEnd = true;\n });\n};\n","import { attachDragEvent } from './helpers/drag-event';\n\n/**\n * Adds dragging action to the target element.\n * @param {VisualUnit} instance Instance of visual unit.\n * @param {SVGElement} targetEl Element on which brushing action is needed.\n * @param {Array} behaviours Array of behaviours\n */\nexport const touchdrag = firebolt => (targetEl, behaviours) => {\n attachDragEvent(targetEl, behaviours, firebolt, true);\n};\n\n","export const PROPS = {\n valueParser: {\n defaultValue: val => val\n }\n};\n","import GenericSideEffect from './generic-sideeffect';\n\nexport default GenericSideEffect;\n","import { mergeRecursive, getUniqueId, generateGetterSetters } from 'muze-utils';\nimport { PROPS } from './props';\n\n/**\n * This is the base class of all side effects. It contains all common methods like setting configuration, disabling,\n * enabling side effect, etc. Every new side effect has to inherit this class or {@link SpawnableSideEffect} or\n * {@link SurrogateSideEffect} class. All side effects are initialized by firebolt. The instance of firebolt is\n * passed on initialization. The firebolt instance contains ```context``` which is the instance of visual unit with\n * which the firebolt is attached.\n *\n * @public\n * @class\n * @module GenericSideEffect\n */\nexport default class GenericSideEffect {\n constructor (firebolt) {\n this.firebolt = firebolt;\n this._enabled = true;\n this._strategy = 'default';\n this._config = {};\n this._id = getUniqueId();\n this._strategies = {};\n generateGetterSetters(this, PROPS);\n this.config(this.constructor.defaultConfig());\n }\n\n /**\n * Returns the default configuration of the side effect.\n *\n * @public\n * @return {Object} Default configuration of side effect.\n */\n static defaultConfig () {\n return {};\n }\n\n /**\n * Returns the formal name of a side effect. This method must be implemented by all side effects which changes\n * or adds any element in the visualization.\n *\n * @return {string} Formal name of side effect.\n */\n static formalName () {\n return 'generic';\n }\n\n static target () {\n return 'all';\n }\n\n /**\n * Returns true if the side effects mutates the data of chart.\n *\n * @public\n *\n * @return {boolean} If the side effect mutates the data of chart.\n */\n static mutates () {\n return false;\n }\n\n /**\n * Sets or gets the configuration of side effect.\n *\n * When setter,\n * @param {Object} config Configuration of side effect.\n * @return {GenericSideEffect} Side effect instance.\n *\n * When getter,\n * @return {Object} Side effect configuration.\n */\n config (...params) {\n if (params.length) {\n this._config = mergeRecursive(this._config, params[0]);\n return this;\n }\n return this._config;\n }\n\n disable () {\n this._enabled = false;\n return this;\n }\n\n enable () {\n this._enabled = true;\n return this;\n }\n\n isEnabled () {\n return this._enabled;\n }\n\n /**\n * Applies the interaction effect on the chart. This is where the implemntation of the side effect is defined.\n *\n * @param {Object} selectionSet Contains the entry and exit set of data which got affected during interaction.\n * @param {Object} selectionSet.mergedEnter Combined previous entry and new entry set.\n * @param {DataModel} selectionSet.mergedEnter.model Instance of data model containing all rows which got\n * affected during interaction.\n * @param {Array} selectionSet.mergedEnter.uids Ids of all rows which were affected during interaction.\n * @param {Object} selectionSet.mergedExit Combined previous exit and new exit set.\n * @param {DataModel} selectionSet.mergedExit.model Instance of data model containing rows which were not affected\n * during interaction.\n * @param {Array} selectionSet.mergedExit.uids Ids of all rows which were not affected during interaction.\n * @param {Object} selectionSet.entrySet Entry set information.\n * @param {Array} selectionSet.entrySet[0].uids All row ids which got affected during previous interaction.\n * @param {Array} selectionSet.entrySet[1].uids All row ids which got affected during current interaction.\n * @param {Array} selectionSet.exitSet[0].uids All row ids which were not affected during previous interaction.\n * @param {Array} selectionSet.exitSet[1].uids All row ids which were not affected during current interaction.\n * @param {Object} payload Payload information of the behavioural action on trigger of which this side effect\n * is applied.\n * @param {Object} options Optional information for side effect like strategy, etc.\n */\n apply () {\n return this;\n }\n\n /**\n * Adds a new strategy method for this side effect. The strategy method is implemented by side effect class.\n *\n * @param {string} name Name of the strategy.\n * @param {Function} fn Strategy method.\n *\n * @return {GenericSideEffect} Instance of side effect.\n */\n addStrategy (name, fn) {\n this._strategies[name] = fn;\n return this;\n }\n}\n","import GenericSideEffect from './generic';\n\n/**\n * This class is inherited by all side effects which changes the look of any existing elements in the visualization.\n * For example, if a side effect wants to change the color of bar plots, then it is a surrogate side effect.\n *\n * To use this,\n * ```\n * const SurrogateSideEffect = muze.SideEffects.standards.SurrogateSideEffect;\n *\n * class BarColorChanger extends SurrogateSideEffect {\n * static formalName () {\n * return 'colorChanger';\n * }\n *\n * // Implement the logic of applying the style here.\n * apply () {\n * }\n * }\n * ```\n * @public\n *\n * @module SurrogateSideEffect\n * @class\n * @extends GenericSideEffect\n */\nexport default class SurrogateSideEffect extends GenericSideEffect {\n /**\n * Applies or removes interaction styles from plot elements. An array of row ids needs to be passed\n * which identifies the plot elements and applies styles to them.\n *\n * To apply the interaction style,\n * ```\n * const entryRowIds = entrySet[0].uids;\n * const interactionStyle = [{\n * type: 'fill',\n * intensity: [0, 0, 15, 0] // hsla configuration\n * }];\n *\n * this.applyInteractionStyle(entryRowIds, interactionStyle, 'brighten', true);\n * ```\n * @public\n * @param {Array} set Array of row ids.\n * @param {Array} config Style configuration.\n * @param {Object} config[0] fill or stroke configuration.\n * @param {string} config[0].type Type of style - fill or stroke.\n * @param {Array} config[0].intensity hsla configuration.\n * @param {string} interactionType Type of interaction. This is needed for storing the styles for\n * each type of interaction in the plot elements.\n * @param {boolean} apply Whether to apply or remove the interaction style.\n *\n * @return {SurrogateSideEffect} Instance of surrogate side effect.\n */\n applyInteractionStyle (set, config = {}, interactionType, apply) {\n const layers = this.firebolt.context.layers();\n layers.forEach(layer => layer.config().interactive !== false &&\n layer.applyInteractionStyle(interactionType, set.uids, apply));\n return this;\n }\n}\n","import { makeElement } from 'muze-utils';\n\nimport GenericSideEffect from './generic';\n\n/**\n * Any side effect which will add any new element to the chart like drawing a rectangular box or any annotation over\n * the chart needs to inherit this class. This class has methods which returns the container where the dom elements\n * needs to be created.\n *\n * To use this,\n * ```\n * const SpawnableSideEffect = muze.SideEffects.standards.SpawnableSideEffect;\n *\n * class SelectionBox extends SpawnableSideEffect {\n * static formalName () {\n * return 'selectionBox';\n * }\n *\n * // Implement the logic of applying the style here.\n * apply () {\n * }\n * }\n * ```\n * @public\n * @class\n * @extends GenericSideEffect\n * @module SpawnableSideEffect\n */\nexport default class SpawnableSideEffect extends GenericSideEffect {\n /**\n * Creates a html or svg element in the container.\n *\n * @public\n * @param {SVGElement|HTMLElement} container Container where the dom element will be rendered.\n * @param {string} elemType Type of dom element.\n * @param {Array} data Array of objects with which the dom elements will be binded.\n * @param {string} className class name of the element.\n *\n * @return {Selection} D3 Selection of the element.\n */\n createElement (container, elemType, data, className, callbacks) {\n return makeElement(container, elemType, data, className, callbacks);\n }\n\n /**\n * Returns the drawing information for side effect like svg container, dimensions of the visual unit.\n *\n * @public\n * @return {Object} Drawing information for side effect.\n * ```\n * sideEffectGroup: // svg container where the side effect needs to be appended.\n * svgContainer: // svg container of the {@link VisualUnit}.\n * htmlContainer: // html div container of the {@link VisualUnit}.\n * width: // Width of the {@link VisualUnit}\n * height: // Height of the {@link VisualUnit}\n * ```\n */\n drawingContext (...drawingContext) {\n if (drawingContext.length) {\n this._drawingContext = drawingContext[0];\n return this;\n }\n return this._drawingContext();\n }\n\n show () {\n return this;\n }\n\n hide () {\n return this;\n }\n}\n","import { selectElement } from 'muze-utils';\n\nexport const getBoxDimensionsFromPayload = (payload, axes, axisFields) => {\n let x1;\n let x2;\n let y1;\n let y2;\n let xRange;\n let yRange;\n let direction;\n const criteria = payload.criteria;\n const dimensions = payload.dimensions || {};\n const xDim = dimensions.x;\n const yDim = dimensions.y;\n\n if (criteria === null) {\n return null;\n }\n\n const xAxis = axes.x[0];\n const yAxis = axes.y[0];\n const xLinear = xAxis.constructor.type() === 'linear';\n const yLinear = yAxis.constructor.type() === 'linear';\n const xField = `${axisFields.x[0]}`;\n const yField = `${axisFields.y[0]}`;\n const xCriteria = criteria[xField];\n const yCriteria = criteria[yField];\n\n if (xCriteria && xCriteria[0] instanceof Array) {\n xRange = xCriteria[0];\n yRange = xCriteria[1];\n } else {\n xRange = xCriteria || [];\n yRange = yCriteria || [];\n }\n direction = xCriteria && yCriteria ? 'both' : (xCriteria ? 'vertical' : 'horizontal');\n if (xRange && xRange.length) {\n if ((yAxis.constructor.type() === 'band' && xLinear)) {\n x1 = x2 = undefined;\n direction = 'horizontal';\n } else {\n const domain = xAxis.domain();\n const bandScale = xAxis.constructor.type() === 'band';\n let x1Val;\n let x2Val;\n if (bandScale) {\n let x1DomainIndex = domain.indexOf(xRange[0]);\n let x2DomainIndex = domain.indexOf(xRange[xRange.length - 1]);\n [x1DomainIndex, x2DomainIndex] = [x1DomainIndex, x2DomainIndex].sort((a, b) => a - b);\n x1Val = domain[x1DomainIndex];\n x2Val = domain[x2DomainIndex];\n } else {\n x1Val = xRange[0];\n x2Val = xRange[xRange.length - 1];\n }\n x1 = xAxis.getScaleValue(x1Val);\n x2 = xAxis.getScaleValue(x2Val);\n x2 += bandScale ? xAxis.getUnitWidth() : 0;\n }\n } else {\n x1 = x2 = undefined;\n }\n if (yRange && yRange.length) {\n if ((xAxis.constructor.type() === 'band' && yLinear)) {\n y1 = y2 = undefined;\n direction = 'vertical';\n } else {\n const domain = yAxis.domain();\n const bandScale = yAxis.constructor.type() === 'band';\n let y1Val;\n let y2Val;\n if (bandScale) {\n let y1DomainIndex = domain.indexOf(yRange[0]);\n let y2DomainIndex = domain.indexOf(yRange[yRange.length - 1]);\n [y1DomainIndex, y2DomainIndex] = [y1DomainIndex, y2DomainIndex].sort(((a, b) => b - a));\n y1Val = domain[y1DomainIndex];\n y2Val = domain[y2DomainIndex];\n } else {\n y1Val = yRange[0];\n y2Val = yRange[yRange.length - 1];\n }\n y1 = yAxis.getScaleValue(y1Val);\n y2 = yAxis.getScaleValue(y2Val);\n y2 += yAxis.constructor.type() === 'band' ? yAxis.getUnitWidth() : 0;\n }\n } else {\n y1 = y2 = undefined;\n }\n\n if ((yLinear && xLinear) || !payload.dragEnd) {\n if (xDim) {\n [x1, x2] = xDim;\n }\n if (yDim) {\n [y1, y2] = yDim;\n }\n }\n\n return {\n dimension: {\n x1,\n x2,\n y1,\n y2\n },\n direction\n };\n};\n\nexport const changeVisibility = (context, sideEffectGroup, visible) => {\n const config = context.config();\n const className = config.defClassName;\n const classPrefix = config.classPrefix;\n selectElement(sideEffectGroup).selectAll(`.${classPrefix}-${className}`)\n .style('display', visible ? 'block' : 'none');\n};\n","import {\n getQualifiedClassName,\n selectElement,\n makeElement,\n isValidValue\n} from 'muze-utils';\nimport { CLASSPREFIX } from '../../enums/constants';\nimport './styles.scss';\nimport SpawnableSideEffect from '../spawnable';\nimport { selectionBoxDrag } from '../../actions/physical/selection-box-drag';\nimport { getBoxDimensionsFromPayload, changeVisibility } from './helper';\n\n/**\n * This class is used to create a selection box which is used by visual unit for brushing and\n * selection in the canvas.\n * @class SelectionBox\n */\nclass SelectionBox extends SpawnableSideEffect {\n /**\n * It returns the default configuration needed by selectionbox.\n * @return {Object} Default configuration of the selection box.\n */\n static defaultConfig () {\n return {\n defClassName: 'selection-box-group',\n className: '',\n classPrefix: CLASSPREFIX,\n box: {\n defClassName: 'selection-box',\n className: ''\n },\n transition: {\n duration: 200\n }\n };\n }\n\n static formalName () {\n return 'selectionBox';\n }\n\n /**\n * Draws the selectionbox with the specified dimensions.\n * @param {Object} dimension Dimensions of the selection box.\n * @param {number} dimension.x1 Starting x position\n * @param {number} dimension.x2 Ending x position\n * @param {number} dimension.y1 Starting y position\n * @param {number} dimension.y2 Ending y position\n * @param {Object} conf Configuration needed to draw the selection box\n * @param {number} unitWidth Width of the visual unit.\n * @param {number} unitHeight Height of the visual unit.\n */\n apply (selectionSet, payload) {\n let x;\n let y;\n let width;\n let height;\n const config = this._config;\n const boxConf = config.box;\n const firebolt = this.firebolt;\n const drawingInf = this.drawingContext();\n const mountPoint = drawingInf.sideEffectGroup;\n const unitWidth = drawingInf.width;\n const unitHeight = drawingInf.height;\n const classPrefix = config.classPrefix;\n const selectionGroupClassName = config.defClassName;\n\n if (payload.criteria === null) {\n this.hide(drawingInf);\n return this;\n }\n\n const sourceInf = firebolt.context.getSourceInfo();\n const { dimension, direction } = getBoxDimensionsFromPayload(payload, sourceInf.axes,\n sourceInf.fields);\n const transition = payload.dragEnd && config.transition;\n\n if (direction === 'both' || direction === 'vertical') {\n x = Math.min(dimension.x1, dimension.x2);\n width = Math.abs(dimension.x2 - dimension.x1);\n } else {\n x = 0;\n width = unitWidth;\n }\n if (direction === 'both' || direction === 'horizontal') {\n y = Math.min(dimension.y1, dimension.y2);\n height = Math.abs(dimension.y2 - dimension.y1);\n } else {\n height = unitHeight;\n y = 0;\n }\n this.show(drawingInf);\n // Create the data array for drawing the rectangle\n const points = [\n {\n x,\n y,\n width,\n height\n }\n ];\n // Create the container group for selection box.\n const selectionGroup = makeElement(selectElement(mountPoint), 'g', [1],\n `.${classPrefix}-${selectionGroupClassName}`);\n const sideEffect = this;\n const selection = selectionGroup.selectAll('rect').data(points);\n const selectionBox = selection.enter().append('rect')\n .each(function () {\n selectionBoxDrag(firebolt)(selectElement(this), ['brush'], sideEffect);\n })\n .merge(selection)\n .each(function (attrs) {\n let element = selectElement(this);\n transition && (element = element.transition().duration(transition.duration));\n for (const key in attrs) {\n if ({}.hasOwnProperty.call(attrs, key)) {\n isValidValue(attrs[key]) && element.attr(key, attrs[key]);\n }\n }\n });\n // Get the qualified class name for selection box rectangle\n const boxClassName = getQualifiedClassName(boxConf.defClassName, this._id, classPrefix);\n selectionBox.classed(boxClassName.join(' '), true);\n selectionBox.classed(boxConf.className, true);\n\n return this;\n }\n\n hide (drawingInf) {\n changeVisibility(this, drawingInf.sideEffectGroup, false);\n }\n\n show (drawingInf) {\n changeVisibility(this, drawingInf.sideEffectGroup, true);\n }\n}\n\nexport default SelectionBox;\n\n","import {\n getEvent,\n getD3Drag\n } from 'muze-utils';\n\nimport getDragActionConfig from './helpers/drag-action-config';\n\nexport const selectionBoxDrag = firebolt => (targetEl, behaviours) => {\n let subject;\n let drawingInf;\n const context = firebolt.context;\n const onDrag = (payload) => {\n behaviours.forEach(action => firebolt.dispatchBehaviour(action, payload));\n };\n const d3Drag = getD3Drag();\n\n targetEl.call(d3Drag().on('start', () => {\n const event = getEvent();\n drawingInf = context.getDrawingContext();\n subject = event.subject;\n }).on('drag', () => {\n const event = getEvent();\n subject.x += event.dx;\n subject.y += event.dy;\n const width = drawingInf.width;\n const height = drawingInf.height;\n const x = Math.min(width - subject.width, Math.max(subject.x, 0));\n const y = Math.min(height - subject.height, Math.max(subject.y, 0));\n const y2 = y + subject.height;\n const x2 = x + subject.width;\n\n if (x >= 0 && x2 <= width && y >= 0 && y2 <= height) {\n const payload = getDragActionConfig(context.getSourceInfo(), {\n startPos: {\n x,\n y\n },\n endPos: {\n x: x2,\n y: y2\n }\n }, context.data().getFieldsConfig());\n onDrag(payload);\n }\n }).on('end', () => {\n const width = drawingInf.width;\n const height = drawingInf.height;\n const x = Math.min(width - subject.width, Math.max(subject.x, 0));\n const y = Math.min(height - subject.height, Math.max(subject.y, 0));\n const y2 = y + subject.height;\n const x2 = x + subject.width;\n\n if (x >= 0 && x2 <= width && y >= 0 && y2 <= height) {\n const payload = getDragActionConfig(context.getSourceInfo(), {\n startPos: {\n x,\n y\n },\n endPos: {\n x: x2,\n y: y2\n },\n snap: true\n }, context.data().getFieldsConfig());\n payload.dragEnd = true;\n onDrag(payload);\n }\n }));\n};\n","export const CLASSPREFIX = 'muze';\nexport const ARROW_RIGHT = 'right';\nexport const ARROW_TOP = 'top';\nexport const ARROW_BOTTOM = 'bottom';\nexport const ARROW_LEFT = 'left';\nexport const TOOLTIP_LEFT = 'left';\nexport const TOOLTIP_RIGHT = 'right';\nexport const TOOLTIP_BOTTOM = 'bottom';\nexport const TOOLTIP_TOP = 'top';\nexport const INITIAL_STYLE = {\n position: 'absolute',\n width: 0,\n height: 0\n};\n","import { CLASSPREFIX } from './constants';\n\nexport const defaultConfig = {\n classPrefix: CLASSPREFIX,\n defClassName: 'tooltip-box',\n connectorClassName: 'tooltip-connectors',\n className: '',\n row: {\n margin: 0\n },\n content: {\n spacing: 5,\n iconContainerSize: 10,\n iconScale: 1,\n iconShape: 'circle',\n iconColor: '#ff0000',\n rowMargin: '0px',\n margin: 10,\n separator: ':',\n className: 'tooltip-content-container',\n parentClassName: 'tooltip-content-parent-container'\n },\n arrow: {\n size: 10,\n disabled: false,\n defClassName: 'tooltip-arrow',\n className: '',\n color: 'rgba(195,195,195,0.85)'\n }\n};\n","import { getQualifiedClassName } from 'muze-utils';\nimport { TOOLTIP_LEFT, TOOLTIP_RIGHT, ARROW_RIGHT, ARROW_LEFT, TOOLTIP_BOTTOM } from './constants';\n\nexport const getArrowPos = (orient, dim, measurement, config) => {\n let arrowPos;\n const { x, y, boxHeight, boxWidth } = measurement;\n const arrowDisabled = config.arrow.disabled;\n const arrowWidth = arrowDisabled ? 0 : config.arrow.size;\n\n if (orient === ARROW_LEFT || orient === ARROW_RIGHT) {\n let start = 0;\n let diff = boxHeight / 2;\n const plotBottom = dim.y + dim.height;\n const boxBottom = y + boxHeight;\n\n if (dim.y > y) {\n start = dim.y - y;\n diff = (plotBottom >= boxBottom ? (boxBottom - dim.y) : dim.height) / 2;\n } else if (boxBottom > plotBottom) {\n diff = Math.abs(y - (dim.y + dim.height)) / 2;\n }\n arrowPos = start + diff - arrowWidth / 2;\n } else {\n let start = 0;\n let diff = boxWidth / 2;\n const plotRight = dim.x + dim.width;\n const boxRight = x + boxWidth;\n\n if (dim.x > x) {\n start = dim.x - x;\n diff = (plotRight >= boxRight ? (boxRight - dim.x) : dim.width) / 2;\n } else if (boxRight > plotRight) {\n diff = Math.abs(x - (dim.x + dim.width)) / 2;\n }\n arrowPos = start + diff - arrowWidth / 2;\n }\n return arrowPos;\n};\n\n/**\n * Places the arrow in the specified arrow position. It also applies appropriate arrow\n * class name to the arrow element.\n * @param {string} position Left, bottom or right position of the arrow;\n * @param {number} arrowPos position of arrow in pixels\n * @return {Tooltip} Instance of tooltip.\n */\nexport const placeArrow = (context, position, arrowPos) => {\n const tooltipArrow = context._tooltipArrow;\n const tooltipBackground = context._tooltipBackground;\n const config = context._config;\n const classPrefix = config.classPrefix;\n const arrowConf = config.arrow;\n const className = getQualifiedClassName(arrowConf.defClassName, context._id, config.classPrefix);\n\n tooltipArrow.style('display', 'block');\n tooltipArrow.attr('class', `${className.join(' ')}`);\n if (position === TOOLTIP_LEFT || position === TOOLTIP_RIGHT) {\n tooltipArrow.style('top', `${arrowPos}px`);\n tooltipArrow.style('left', '');\n tooltipBackground.style('top', `${arrowPos}px`);\n tooltipBackground.style('left', '');\n } else {\n position === TOOLTIP_BOTTOM ? tooltipArrow.style('top', '100%') : tooltipArrow.style('top',\n `-${arrowConf.size}px`);\n tooltipArrow.style('left', `${arrowPos}px`);\n position === TOOLTIP_BOTTOM ? tooltipBackground.style('top', '100%') : tooltipBackground.style('top',\n `-${arrowConf.size + 3}px`);\n tooltipBackground.style('left', `${arrowPos}px`);\n }\n tooltipArrow.classed(`${classPrefix}-tooltip-arrow`, true);\n tooltipArrow.classed(`${classPrefix}-tooltip-arrow-${context._arrowOrientation}`, false);\n tooltipArrow.classed(`${classPrefix}-tooltip-arrow-${position}`, true);\n tooltipBackground.classed(`${classPrefix}-tooltip-background-arrow`, true);\n tooltipBackground.classed(`${classPrefix}-tooltip-background-arrow-${context._arrowOrientation}`, false);\n tooltipBackground.classed(`${classPrefix}-tooltip-background-arrow-${position}`, true);\n return this;\n};\n\nexport const reorderContainers = (parentContainer, className) => {\n parentContainer.selectAll(className).sort((a, b) => a - b);\n};\n","import {\n formatTemporal,\n DimensionSubtype,\n MeasureSubtype,\n FieldType,\n DataModel,\n defaultValue\n} from 'muze-utils';\n\nconst { InvalidAwareTypes } = DataModel;\n\nconst formatters = (formatter, interval, valueParser) => ({\n [DimensionSubtype.TEMPORAL]: (value) => {\n if (value instanceof InvalidAwareTypes) {\n return valueParser(value);\n }\n return formatTemporal(value, interval);\n },\n [MeasureSubtype.CONTINUOUS]: value => (value instanceof InvalidAwareTypes ? valueParser(value) :\n formatter(value.toFixed(2))),\n [DimensionSubtype.CATEGORICAL]: value => valueParser(value)\n});\n\nconst getDefaultTooltipFormatterFn = (formatter, defaultFormatter) => defaultValue(formatter, defaultFormatter);\n\nconst getTabularData = (dataObj, context, defaultFormatter) => {\n const rows = [];\n const { data, schema, fieldspace } = dataObj;\n rows.push(schema.map(d => d.name));\n const { valueParser, timeDiffs } = context;\n data.forEach((d) => {\n const row = [];\n schema.forEach((fieldObj, i) => {\n const interval = fieldObj.subtype === DimensionSubtype.TEMPORAL ? timeDiffs[fieldObj.name] : 0;\n const numberFormat = fieldObj.type === FieldType.MEASURE && fieldspace.fields[i].numberFormat();\n const formatterFn = getDefaultTooltipFormatterFn(formatters(numberFormat,\n interval, valueParser)[fieldObj.subtype], defaultFormatter);\n const value = formatterFn(d[i]);\n row.push(value);\n });\n rows.push(row);\n });\n return rows;\n};\n\nexport const buildTooltipData = (dataModel, config = {}, context) => {\n let fieldValues = [];\n const dataObj = dataModel.getData();\n const data = dataObj.data;\n const schema = dataObj.schema;\n const separator = config.separator;\n const fieldsConfig = dataModel.getFieldsConfig();\n const fieldspace = dataModel.getFieldspace();\n const detailFields = context.detailFields || [];\n const dimensions = schema.filter(d => d.type === FieldType.DIMENSION);\n const measures = schema.filter(d => d.type === FieldType.MEASURE);\n const containsDetailField = schema.find(d => detailFields.indexOf(d.name) !== -1);\n const dataLen = data.length;\n const {\n valueParser,\n axes,\n dimensionMeasureMap,\n timeDiffs\n } = context;\n const defFormatter = formatters(null, null, valueParser)[DimensionSubtype.CATEGORICAL];\n const getRowContent = (field, type) => {\n let value;\n let formattedValue;\n let measureIndex;\n const values = [];\n const index = fieldsConfig[field].index;\n const interval = fieldsConfig[field].def.subtype === DimensionSubtype.TEMPORAL ? timeDiffs[field] : 0;\n const formatterFn = getDefaultTooltipFormatterFn(formatters(val => val, interval, valueParser)[type],\n defFormatter);\n\n if (value !== null) {\n let uniqueVals = type === MeasureSubtype.CONTINUOUS ? data.map(d => d[index]) :\n [...new Set(data.map(d => d[index]))];\n uniqueVals = uniqueVals.filter(d => d !== '');\n const colorAxis = axes.color[0];\n const shapeAxis = axes.shape[0];\n const sizeAxis = axes.size[0];\n const isRetinalField = (colorAxis || shapeAxis || sizeAxis) && dataLen > 1 &&\n type !== MeasureSubtype.CONTINUOUS;\n\n uniqueVals.forEach((val, i) => {\n let key;\n const associatedMeasures = dimensionMeasureMap[field];\n\n if (associatedMeasures && associatedMeasures.length && dataLen > 1) {\n key = val;\n let icon = {\n value: ''\n };\n\n if (isRetinalField) {\n icon = {\n type: 'icon',\n color: colorAxis.getColor(val),\n shape: shapeAxis.getShape(val),\n size: sizeAxis.getSize(val) * config.iconScale\n };\n }\n if (associatedMeasures.length > 1) {\n const formattedKey = type === DimensionSubtype.TEMPORAL ? formatterFn(key, interval) : key;\n values.push([icon, `${formattedKey}`]);\n associatedMeasures.forEach((measure) => {\n measureIndex = fieldsConfig[measure].index;\n value = data[i][measureIndex];\n const numberFormat = fieldspace.fields[measureIndex].numberFormat();\n const measureFormatter = getDefaultTooltipFormatterFn(\n formatters(numberFormat, interval, valueParser)[MeasureSubtype.CONTINUOUS]);\n formattedValue = measureFormatter(value);\n values.push([{\n value: `${measure}${separator}`,\n style: {\n 'margin-left': `${config.margin}px}`\n },\n className: `${config.classPrefix}-tooltip-key`\n }, {\n value: `${formattedValue}`,\n className: `${config.classPrefix}-tooltip-value`\n }]);\n });\n } else {\n measureIndex = fieldsConfig[associatedMeasures[0]].index;\n value = data[i][measureIndex];\n const numberFormat = fieldspace.fields[measureIndex].numberFormat();\n const measureFormatter = getDefaultTooltipFormatterFn(\n formatters(numberFormat, interval, valueParser)[MeasureSubtype.CONTINUOUS]);\n formattedValue = measureFormatter(value);\n const formattedKey = type === DimensionSubtype.TEMPORAL ? formatterFn(key, interval) : key;\n values.push([\n icon,\n {\n value: `${formattedKey}`,\n className: `${config.classPrefix}-tooltip-key`\n },\n {\n value: `${formattedValue}`,\n className: `${config.classPrefix}-tooltip-value`\n }\n ]);\n }\n } else {\n key = field;\n value = val;\n formattedValue = formatterFn(value);\n values.push([{\n value: `${key}${separator}`,\n className: `${config.classPrefix}-tooltip-key`\n }, {\n value: `${formattedValue}`,\n className: `${config.classPrefix}-tooltip-value`\n }]);\n }\n });\n }\n return values;\n };\n let displayFormat = 'keyValue';\n\n if (dataLen > 1 && containsDetailField) {\n fieldValues = getTabularData({\n data,\n schema,\n fieldspace\n }, context, defFormatter);\n displayFormat = 'table';\n } else {\n dimensions.forEach((item) => {\n const type = item.subtype ? item.subtype : item.type;\n fieldValues = [...fieldValues, ...getRowContent(item.name, type)];\n });\n\n const allMeasures = [...new Set(...Object.values(dimensionMeasureMap))];\n const filteredMeasures = dataLen > 1 ? measures.filter(d => allMeasures.indexOf(d.name) === -1)\n : measures;\n\n filteredMeasures.forEach((item) => {\n const type = item.subtype ? item.subtype : item.type;\n fieldValues = [...fieldValues, ...getRowContent(item.name, type)];\n });\n }\n\n return {\n content: fieldValues,\n displayFormat\n };\n};\n\n/**\n * This contains the strategy methods for showing tooltip in the chart.\n * @param {VisualUnit} context Attached instance.\n */\nexport const strategy = {\n keyValue: (data, config, context) => {\n const values = buildTooltipData(data, config, context);\n return values;\n }\n};\n\nexport const DEFAULT_STRATEGY = 'keyValue';\n","import {\n selectElement,\n mergeRecursive,\n makeElement,\n setAttrs,\n setStyles,\n getSymbol,\n isSimpleObject\n} from 'muze-utils';\nimport { DEFAULT_STRATEGY, strategy } from './strategy';\nimport { defaultConfig } from './default-config';\n\n/**\n * This class is used to manage the content of tooltip.\n */\nexport default class Content {\n /**\n * Creates an instance of content.\n */\n constructor () {\n this._model = null;\n this._strategy = DEFAULT_STRATEGY;\n this._formatter = null;\n this._config = this.constructor.defaultConfig();\n }\n /**\n * Returns the default configuration of tooltip\n * @return {Object} Configuration of tooltip.\n */\n static defaultConfig () {\n const config = defaultConfig.content;\n config.classPrefix = defaultConfig.classPrefix;\n return config;\n }\n\n config (...c) {\n if (c.length > 0) {\n this._config = mergeRecursive(this._config, c[0]);\n return this;\n }\n return this._config;\n }\n\n /**\n * Update model. The format contains presentation strategy which determines how to show the content.\n * If no strategy is mentioned then default is to show key value pair\n */\n update (item) {\n this._model = item.model;\n this._strategy = item.strategy !== undefined ? item.strategy : DEFAULT_STRATEGY;\n this._formatter = item.formatter;\n return this;\n }\n\n context (ctx) {\n this._context = ctx;\n return this;\n }\n\n render (mount) {\n let data;\n const config = this._config;\n const iconContainerSize = config.iconContainerSize;\n const formatter = this._formatter;\n const rowMargin = config.rowMargin;\n const model = this._model;\n\n this._mount = mount;\n if (model instanceof Array) {\n data = model;\n } else {\n data = formatter instanceof Function ? formatter(this._model, this._context) :\n strategy[this._strategy](this._model, this.config(), this._context);\n }\n\n if (data instanceof Function) {\n mount.html(data());\n } else {\n let content = data;\n let displayFormat = 'default';\n\n if (isSimpleObject(data)) {\n content = data.content;\n displayFormat = data.displayFormat;\n }\n\n const body = makeElement(mount, 'div', [displayFormat], `${config.classPrefix}-tooltip-content`, {},\n d => d);\n\n if (displayFormat === 'table') {\n const table = makeElement(body, 'table', [1], `${config.classPrefix}-tooltip-table`);\n const tbody = makeElement(table, 'tbody', [1], `${config.classPrefix}-tooltip-table-tbody`);\n const rows = makeElement(tbody, 'tr', content, `${config.classPrefix}-tooltip-table-row`);\n rows.each(function (d, i) {\n selectElement(this).classed(`${config.classPrefix}-tooltip-table-row-${i}`, true);\n });\n const cells = makeElement(rows, 'td', d => d, `${config.classPrefix}-tooltip-table-cell`);\n cells.each(function (d) {\n selectElement(this).html(d);\n });\n } else {\n const rows = makeElement(body, 'div', content, `${config.classPrefix}-tooltip-row`);\n const cells = makeElement(rows, 'span', d => d, `${config.classPrefix}-tooltip-content`);\n cells.attr('class', `${config.classPrefix}-tooltip-content`);\n setStyles(rows, {\n margin: rowMargin\n });\n setStyles(cells, {\n display: 'inline-block',\n 'margin-right': `${config.spacing}px`\n });\n\n cells.each(function (d) {\n const el = selectElement(this);\n el.html('');\n if (d instanceof Object) {\n if (d.type === 'icon') {\n const svg = makeElement(el, 'svg', [1]);\n const path = makeElement(svg, 'path', [1]);\n const shape = d.shape instanceof Function ? d.shape : getSymbol(d.shape);\n\n setAttrs(svg, {\n x: 0,\n y: 0,\n width: iconContainerSize,\n height: iconContainerSize\n });\n setAttrs(path, {\n d: shape.size(d.size)(),\n transform: `translate(${iconContainerSize / 2}, ${iconContainerSize / 2})`\n });\n setStyles(path, {\n fill: d.color\n });\n setStyles(svg, {\n width: `${iconContainerSize}px`,\n height: `${iconContainerSize}px`\n });\n } else {\n el.html(d.value);\n d.className && el.classed(d.className, true);\n setStyles(el, d.style);\n }\n } else {\n el.html(d);\n }\n });\n }\n }\n return this;\n }\n\n clear () {\n this._model = null;\n return this;\n }\n}\n","import {\n mergeRecursive,\n getQualifiedClassName,\n getUniqueId,\n selectElement,\n setStyles,\n makeElement\n} from 'muze-utils';\nimport { ARROW_BOTTOM, ARROW_LEFT, ARROW_RIGHT, TOOLTIP_LEFT, TOOLTIP_RIGHT, TOOLTIP_BOTTOM, TOOLTIP_TOP,\n INITIAL_STYLE } from './constants';\nimport { defaultConfig } from './default-config';\nimport { getArrowPos, placeArrow, reorderContainers } from './helper';\nimport './styles.scss';\nimport Content from './content';\n\n/**\n * This component is responsible for creating a tooltip element. It appends the tooltip\n * in the body element.\n * @class Tooltip\n */\nexport default class Tooltip {\n /**\n * Initializes the tooltip with the container element and configuration\n * @param {HTMLElement} container container where the tooltip will be mounted.\n * @param {string} className Class name of the tooltip.\n */\n constructor (htmlContainer, svgContainer) {\n let connectorContainer = svgContainer;\n this._id = getUniqueId();\n this._config = {};\n this.config({});\n const tooltipConf = this._config;\n const classPrefix = tooltipConf.classPrefix;\n const contentClass = tooltipConf.content.parentClassName;\n const container = makeElement(htmlContainer, 'div', [1], `${classPrefix}-tooltip-container`);\n this._container = container;\n this._tooltipContainer = container.append('div').style('position', 'absolute');\n this._contentContainer = this._tooltipContainer.append('div').attr('class', `${classPrefix}-${contentClass}`);\n this._tooltipBackground = this._tooltipContainer.append('div').style('position', 'relative');\n this._tooltipArrow = this._tooltipContainer.append('div');\n\n if (!svgContainer) {\n connectorContainer = htmlContainer.append('svg').style('pointer-events', 'none');\n }\n this._contents = {};\n this._tooltipConnectorContainer = selectElement(connectorContainer)\n .append('g')\n .attr('class', `${tooltipConf.classPrefix}-${tooltipConf.connectorClassName}`);\n const id = this._id;\n const defClassName = tooltipConf.defClassName;\n const qualifiedClassName = getQualifiedClassName(defClassName, id, tooltipConf.classPrefix);\n\n setStyles(this._tooltipArrow, INITIAL_STYLE);\n setStyles(this._tooltipBackground, INITIAL_STYLE);\n this.addClass(qualifiedClassName.join(' '));\n this.addClass(tooltipConf.className);\n this.hide();\n }\n\n /**\n * Sets the configuration of tooltip.\n * @param {Object} config Configuration of tooltip\n * @return {Tooltip} Instance of tooltip\n */\n config (...config) {\n if (config.length > 0) {\n const defConf = mergeRecursive({}, this.constructor.defaultConfig());\n this._config = mergeRecursive(defConf, config[0]);\n return this;\n }\n return this._config;\n }\n\n /**\n * Returns the default configuration of tooltip\n * @return {Object} Configuration of tooltip.\n */\n static defaultConfig () {\n return defaultConfig;\n }\n /**\n * Sets the class name of tooltip\n * @param {string} className tooltip class name\n * @return {Tooltip} Instance of tooltip.\n */\n addClass (className) {\n this._tooltipContainer.classed(className, true);\n return this;\n }\n\n context (...ctx) {\n if (ctx.length) {\n this._context = ctx[0];\n return this;\n }\n return this._context;\n }\n\n content (name, data, contentConfig = {}) {\n const config = this.config();\n const { classPrefix } = config;\n const contentClass = config.content.className;\n const formatter = config.formatter;\n const className = contentConfig.className || `${classPrefix}-${contentClass}-${name}`;\n const content = this._contents[name] = this._contents[name] || new Content();\n const container = makeElement(this._contentContainer, 'div', [contentConfig.order], className);\n container.attr('class', `${classPrefix}-${contentClass} ${className}`);\n reorderContainers(this._contentContainer, `.${classPrefix}-${contentClass}`);\n const contentConf = config.content;\n contentConfig.classPrefix = this._config.classPrefix;\n content.config(contentConf);\n\n if (data === null) {\n content.clear();\n container.remove();\n delete this._contents[name];\n } else {\n content.update({\n model: data,\n formatter: contentConfig.formatter || formatter\n });\n content.context(this._context);\n content.render(container);\n }\n\n if (!Object.keys(this._contents).length) {\n this.hide();\n }\n return this;\n }\n\n getContents () {\n return Object.values(this._contents);\n }\n\n /**\n * Positions the tooltip at the given x and y position.\n * @param {number} x x position\n * @param {number} y y position\n * @return {Tooltip} Instance of tooltip.\n */\n position (x, y, conf = {}) {\n if (!Object.keys(this._contents).length) {\n this.hide();\n return this;\n }\n this.show();\n const target = this._target;\n const repositionArrow = conf.repositionArrow;\n\n if (target && repositionArrow) {\n const node = this._tooltipContainer.node();\n const config = this._config;\n const arrowDisabled = config.arrow.disabled;\n const arrowWidth = arrowDisabled ? 0 : config.arrow.size;\n const arrowOrient = this._arrowOrientation;\n const outsidePlot = arrowOrient === ARROW_LEFT || arrowOrient === ARROW_RIGHT ?\n (y + node.offsetHeight - arrowWidth) < target.y || y > (target.y + target.height) :\n (x + node.offsetWidth - arrowWidth) < target.x || x > (target.x + target.width);\n\n if (!arrowDisabled) {\n if (outsidePlot) {\n let path;\n this._tooltipArrow.style('display', 'none');\n this._tooltipBackground.style('display', 'none');\n this._tooltipConnectorContainer.style('display', 'block');\n const connector = this._tooltipConnectorContainer.selectAll('path').data([1]);\n const enter = connector.enter().append('path');\n if (arrowOrient === ARROW_LEFT) {\n path = `M ${x} ${y + node.offsetHeight / 2} L ${target.x + target.width}`\n + ` ${target.y + target.height / 2}`;\n } else if (arrowOrient === ARROW_RIGHT) {\n path = `M ${x + node.offsetWidth} ${y + node.offsetHeight / 2}`\n + ` L ${target.x} ${target.y + target.height / 2}`;\n } else if (arrowOrient === ARROW_BOTTOM) {\n path = `M ${x + node.offsetWidth / 2} ${y + node.offsetHeight}`\n + ` L ${target.x + target.width / 2} ${target.y}`;\n }\n enter.merge(connector).attr('d', path).style('display', 'block');\n } else {\n const arrowPos = getArrowPos(arrowOrient, target, {\n x,\n y,\n boxHeight: node.offsetHeight,\n boxWidth: node.offsetWidth\n }, this._config);\n\n placeArrow(this, this._arrowOrientation, arrowPos);\n this._tooltipConnectorContainer.style('display', 'none');\n }\n }\n }\n\n const offset = this._offset || {\n x: 0,\n y: 0\n };\n this._tooltipContainer.style('left', `${offset.x + x}px`).style('top',\n `${offset.y + y}px`);\n\n return this;\n }\n\n /**\n * Positions the tooltip relative to a rectangular box. It takes care of tooltip overflowing the\n * boundaries.\n * @param {Object} dim Dimensions of the plot.\n */\n positionRelativeTo (dim, tooltipConf = {}) {\n let obj;\n let orientation = tooltipConf.orientation;\n this.show();\n if (!dim) {\n this.hide();\n return this;\n }\n\n const extent = this._extent;\n const node = this._tooltipContainer.node();\n\n this._tooltipContainer.style('top', '0px')\n .style('left', '0px');\n const offsetWidth = node.offsetWidth + 2;\n const offsetHeight = node.offsetHeight + 2;\n const config = this._config;\n const offset = this._offset;\n const arrowDisabled = config.arrow.disabled;\n const arrowSize = arrowDisabled ? 0 : config.arrow.size;\n const draw = tooltipConf.draw !== undefined ? tooltipConf.draw : true;\n const topSpace = dim.y;\n // When there is no space in right\n const dimX = dim.x + dim.width + offset.x;\n const rightSpace = extent.width - dimX;\n const leftSpace = dim.x + offset.x - extent.x;\n const positionTop = topSpace > (offsetHeight + arrowSize);\n const positionRight = rightSpace >= offsetWidth + arrowSize;\n const positionLeft = leftSpace >= offsetWidth + arrowSize;\n\n const positionHorizontal = () => {\n let position;\n let x = dim.x + dim.width;\n let y = dim.y;\n\n if (positionRight) {\n position = TOOLTIP_LEFT;\n x += arrowSize;\n } else if (positionLeft) {\n x = dim.x - offsetWidth;\n position = TOOLTIP_RIGHT;\n x -= arrowSize;\n } else {\n position = 'left';\n x += arrowSize;\n }\n if (dim.height < offsetHeight) {\n y = Math.max(0, dim.y + dim.height / 2 - offsetHeight / 2);\n }\n\n const arrowPos = getArrowPos(position, dim, {\n x,\n y,\n boxHeight: offsetHeight,\n boxWidth: offsetWidth\n }, this._config);\n\n return {\n position,\n arrowPos,\n x,\n y\n };\n };\n\n const positionVertical = () => {\n let position;\n let y;\n // Position tooltip at the center of plot\n let x = dim.x - offsetWidth / 2 + dim.width / 2;\n\n // Overflows to the right\n if ((extent.width - (dim.x + offset.x)) < offsetWidth) {\n x = extent.width - offsetWidth - offset.x;\n } else if ((x + offset.x) < extent.x) { // Overflows to the left\n x = extent.x;\n }\n\n if (positionTop) {\n y = dim.y - offsetHeight - arrowSize;\n position = TOOLTIP_BOTTOM;\n } else {\n y = dim.y + dim.height + arrowSize;\n position = TOOLTIP_TOP;\n }\n\n const arrowPos = getArrowPos(position, dim, {\n x,\n y,\n boxHeight: offsetHeight,\n boxWidth: offsetWidth\n }, this._config);\n\n return {\n position,\n arrowPos,\n x,\n y\n };\n };\n\n this._target = dim;\n if (!orientation) {\n if (positionTop) {\n orientation = 'vertical';\n } else if (positionRight || positionLeft) {\n orientation = 'horizontal';\n } else {\n orientation = 'vertical';\n }\n }\n\n if (orientation === 'horizontal') {\n obj = positionHorizontal();\n } else if (orientation === 'vertical') {\n obj = positionVertical();\n }\n\n this._position = {\n x: obj.x,\n y: obj.y\n };\n\n this._arrowPos = obj.arrowPos;\n if (!arrowDisabled) {\n placeArrow(this, obj.position, obj.arrowPos);\n } else {\n this._tooltipArrow.style('display', 'none');\n this._tooltipBackground.style('display', 'none');\n }\n this._arrowOrientation = obj.position;\n draw && this.position(obj.x, obj.y);\n return this;\n }\n\n /**\n * Hides the tooltip element.\n * @return {Tooltip} Instance of tooltip.\n */\n hide () {\n this._tooltipContainer.style('display', 'none');\n this._tooltipConnectorContainer.style('display', 'none');\n return this;\n }\n\n /**\n * Shows the tooltip element.\n * @return {Tooltip} Instance of tooltip.\n */\n show () {\n this._tooltipContainer.style('display', 'block');\n return this;\n }\n\n extent (extent) {\n this._extent = extent;\n return this;\n }\n\n offset (offset) {\n this._offset = offset;\n return this;\n }\n\n remove () {\n this._tooltipContainer.remove();\n this._tooltipBackground.remove();\n this._tooltipConnectorContainer.remove();\n return this;\n }\n}\n","import { FieldType } from 'muze-utils';\n\nexport const strategies = {\n showSelectedItems: (dm) => {\n const dataObj = dm.getData();\n const measures = dataObj.schema.filter(d => d.type === FieldType.MEASURE);\n const aggregatedModel = dm.groupBy([''], measures.reduce((acc, v) => {\n acc[v.name] = v.defAggFn === 'count' ? 'sum' : v.defAggFn;\n return acc;\n }, {}));\n const fieldsObj = dm.getFieldspace().fieldsObj();\n const fieldsConf = aggregatedModel.getFieldsConfig();\n let values = [{\n value: `${dataObj.data.length}`,\n style: {\n 'font-weight': 'bold'\n }\n }, 'Items Selected'];\n const measureNames = measures.map(d => d.name);\n if (measureNames.length) {\n values = [...values, ...[`(${fieldsObj[measureNames[0]].defAggFn().toUpperCase()}) ${measureNames[0]}`,\n {\n value: `${aggregatedModel.getData().data[0][fieldsConf[measureNames[0]].index].toFixed(2)}`,\n style: {\n 'font-weight': 'bold'\n }\n }]];\n }\n return [values];\n }\n};\n","import { Tooltip as TooltipRenderer } from '@chartshq/muze-tooltip';\nimport { FieldType } from 'muze-utils';\nimport { spaceOutBoxes } from '../helper';\nimport { strategies } from './strategies';\nimport { FRAGMENTED } from '../../enums/constants';\nimport SpawnableSideEffect from '../spawnable';\n\nimport './styles.scss';\n\nexport default class Tooltip extends SpawnableSideEffect {\n constructor (...params) {\n super(...params);\n this._tooltips = {};\n this._strategies = strategies;\n this._strategy = 'default';\n }\n\n static defaultConfig () {\n return {\n padding: 5,\n offset: {\n x: 0,\n y: 0\n }\n };\n }\n\n static formalName () {\n return 'tooltip';\n }\n\n apply (selectionSet, payload, options = {}) {\n let totalHeight = 0;\n let totalWidth = 0;\n const dataModel = selectionSet.mergedEnter.model;\n const context = this.firebolt.context;\n const drawingInf = this.drawingContext();\n if ((dataModel.isEmpty() || payload.criteria === null) || selectionSet.isSourceFieldPresent === false) {\n this.hide(options, null);\n return this;\n }\n\n const tooltips = this._tooltips;\n const config = this.config();\n const boundBox = {\n width: drawingInf.width,\n height: drawingInf.height\n };\n const showInPosition = payload.showInPosition;\n const pad = config.padding;\n const dataModels = [];\n const fragmented = config.mode === FRAGMENTED;\n const sourceInf = context.getSourceInfo();\n const fields = sourceInf.fields;\n const xFieldDim = fields.x[0] ? fields.x[0].type() === FieldType.DIMENSION : false;\n const showVertically = !!xFieldDim;\n const tooltipPos = payload.position;\n const boxes = [];\n const enter = {};\n const uids = dataModel.getData().uids;\n if (fragmented) {\n dataModels.push(...uids.map(d => dataModel.select((fieldsArr, i) => i === d, {\n saveChild: false\n })));\n } else {\n dataModels.push(dataModel);\n }\n\n let target = payload.target;\n let targetFields = [];\n if (target) {\n targetFields = target[0] || [];\n const sourceFields = payload.sourceFields;\n const indices = [];\n for (let i = 0, len = targetFields.length; i < len; i++) {\n if (sourceFields.indexOf(targetFields[i]) !== -1) {\n indices.push(i);\n }\n }\n target = target.map(d => d.filter((v, i) => indices.indexOf(i) !== -1));\n }\n\n const plotDimensions = context.getPlotPointsFromIdentifiers(target || payload.criteria, {\n getBBox: true\n });\n\n // Show tooltip for each datamodel\n for (let i = 0; i < dataModels.length; i++) {\n let plotDim = plotDimensions[i];\n if (fragmented) {\n const dimensions = dataModels[i].getData().schema.filter(d => d.type === FieldType.DIMENSION)\n .map(d => d.name);\n plotDim = context.getPlotPointsFromIdentifiers(dataModels[i].project(dimensions), { getBBox: true });\n plotDim = plotDim && plotDim[0];\n }\n\n let dt = dataModels[i];\n if (config.fields) {\n dt = dt.project(config.fields, {\n saveChild: false\n });\n }\n if (config.dataTransform) {\n dt = config.dataTransform(dt, i);\n }\n\n enter[i] = true;\n const { parentContainer: layoutContainer, parentContainerDimensions } = drawingInf;\n const layoutBoundBox = layoutContainer.getBoundingClientRect();\n const unitBoundBox = drawingInf.htmlContainer.getBoundingClientRect();\n\n const offsetLeft = unitBoundBox.left - layoutBoundBox.left;\n const offsetTop = unitBoundBox.top - layoutBoundBox.top;\n const tooltipInst = tooltips[i] = tooltips[i] || new TooltipRenderer(layoutContainer,\n drawingInf.svgContainer);\n\n sourceInf.payload = payload;\n sourceInf.firebolt = this.firebolt;\n sourceInf.detailFields = context.detailFields();\n sourceInf.timeDiffs = context.timeDiffsByField();\n sourceInf.valueParser = context.valueParser();\n tooltipInst.context(sourceInf);\n const strategy = strategies[options.strategy];\n tooltipInst.content(options.strategy || this._strategy, dt, {\n formatter: strategy,\n order: options.order\n })\n .config(this.config())\n .extent({\n x: 0,\n y: 0,\n width: parentContainerDimensions.width,\n height: parentContainerDimensions.height\n })\n .offset({\n x: offsetLeft + (config.offset.x || 0),\n y: offsetTop + (config.offset.y || 0)\n });\n\n if (showInPosition) {\n tooltipInst.position(tooltipPos.x + pad, tooltipPos.y + pad);\n } else if (plotDim) {\n tooltipInst.positionRelativeTo({\n x: plotDim.x,\n y: plotDim.y,\n width: plotDim.width || 0,\n height: plotDim.height || 0\n }, {\n orientation: fragmented ?\n (showVertically ? 'horizontal' : 'vertical') : undefined\n });\n } else {\n tooltipInst.hide();\n break;\n }\n\n if (fragmented) {\n const position = tooltipInst._position;\n const tooltipBoundBox = tooltipInst._tooltipContainer.node().getBoundingClientRect();\n\n totalHeight += tooltipBoundBox.height + pad;\n totalWidth += tooltipBoundBox.width + pad;\n if (showVertically ? totalHeight > drawingInf.height : totalWidth > drawingInf.width) {\n break;\n }\n boxes.push({\n x: position.x,\n y: position.y,\n width: tooltipBoundBox.width,\n height: tooltipBoundBox.height,\n tooltip: tooltipInst\n });\n }\n }\n\n for (const key in tooltips) {\n if (!enter[key]) {\n const tooltip = tooltips[key];\n tooltip.content(payload.action, null);\n if (!tooltip.getContents().length) {\n tooltip.remove();\n delete tooltips[key];\n }\n }\n }\n if (fragmented) {\n spaceOutBoxes(boxes, boundBox, showVertically);\n boxes.forEach(box => box.tooltip.position(box.x, box.y, {\n repositionArrow: true\n }));\n }\n return this;\n }\n\n hide (options) {\n const tooltips = this._tooltips;\n for (const key in tooltips) {\n if ({}.hasOwnProperty.call(tooltips, key)) {\n const strategy = options.strategy || this._strategy;\n tooltips[key].content(strategy, null);\n tooltips[key].hide();\n }\n }\n }\n}\n","export const spaceOutBoxes = (boxes, extent, showVertically) => {\n let y;\n let height;\n let x;\n let width;\n let i;\n const pad = 5;\n const len = boxes.length;\n const spaceOutIfOverlap = (firstBox, secondBox, opposite) => {\n x = firstBox.x;\n width = firstBox.width;\n y = firstBox.y;\n height = firstBox.height;\n const bottom = y + height;\n const right = x + width;\n\n if (showVertically) {\n if (opposite ? y < (secondBox.y + secondBox.height) : bottom > secondBox.y) {\n secondBox.y = opposite ? firstBox.y - secondBox.height - pad :\n bottom + pad;\n }\n } else if (opposite ? x < (secondBox.x + secondBox.width) : right > secondBox.x) {\n secondBox.x = opposite ? firstBox.x - secondBox.width - pad :\n right + pad;\n }\n };\n\n boxes.sort((a, b) => (showVertically ? a.y - b.y : a.x - b.x));\n i = 0;\n\n for (i = 0; i < len - 1; i++) {\n spaceOutIfOverlap(boxes[i], boxes[i + 1]);\n }\n\n if ((boxes[i].y + boxes[i].height) > extent.height ||\n (boxes[i].x + boxes[i].width) > extent.width) {\n if (showVertically) {\n boxes[i].y -= (boxes[i].height + boxes[i].y) - extent.height;\n } else {\n boxes[i].x -= (boxes[i].width + boxes[i].x) - extent.width;\n }\n for (i = len - 1; i > 0; i--) {\n spaceOutIfOverlap(boxes[i], boxes[i - 1], true);\n }\n }\n return boxes;\n}\n;\n","import { selectElement, FieldType } from 'muze-utils';\n\nimport './styles.scss';\nimport { CLASSPREFIX } from '../../enums/constants';\nimport SpawnableSideEffect from '../spawnable';\n\nexport default class Crossline extends SpawnableSideEffect {\n static defaultConfig () {\n return {\n className: `${CLASSPREFIX}-crossline-group`,\n bandClass: `${CLASSPREFIX}-crossband`,\n lineClass: `${CLASSPREFIX}-crossline`\n };\n }\n\n static formalName () {\n return 'crossline';\n }\n\n apply (selectionSet, payload) {\n let height;\n let bandWidth;\n let px;\n let width;\n const {\n className,\n bandClass,\n lineClass\n } = this.config();\n const dataModel = selectionSet.mergedEnter.model;\n const drawingInf = this.drawingContext();\n if (payload.criteria && dataModel && dataModel.isEmpty()) {\n return this;\n }\n if (payload.criteria === null || !dataModel) {\n this.hide();\n return this;\n }\n\n const dataObj = dataModel.getData();\n const sourceInf = this.firebolt.context.getSourceInfo();\n const axes = sourceInf.axes;\n const axisFields = sourceInf.fields;\n const fields = selectionSet.fields;\n const data = dataObj.data;\n const fieldsConfig = dataModel.getFieldsConfig();\n const svgContainer = drawingInf.sideEffectGroup;\n\n const elemData = [];\n fields.forEach((field) => {\n const fieldIndex = fieldsConfig[field] && fieldsConfig[field].index;\n const dataArr = data.map(d => d[fieldIndex]);\n const axisIndex = [['x', 0], ['x', 1], ['y', 0], ['y', 1]].find((arr) => {\n const fieldInst = axisFields[arr[0]][arr[1]];\n return fieldInst && fieldInst.type() === FieldType.DIMENSION &&\n fieldInst.getMembers().indexOf(field) !== -1;\n });\n if (axisIndex !== undefined && data.length) {\n const type = axisIndex[0];\n const axis = axes[type][axisIndex[1]];\n const value = dataArr[0];\n bandWidth = axis.getUnitWidth() || 0;\n px = axis.getScaleValue(value) + bandWidth / 2 + drawingInf.xOffset;\n const plotWidth = Math.max(...this.firebolt.context.layers().map(layer => layer.getPlotSpan()[type]));\n const pad = Math.max(...this.firebolt.context.layers().map(layer => layer.getPlotPadding()[type]));\n height = drawingInf.height;\n width = drawingInf.width;\n const startPx = px - plotWidth / 2 - pad / 2;\n const endPx = px + plotWidth / 2 + pad / 2;\n const dataPoint = {};\n if (type === 'y') {\n dataPoint.d = `M 0 ${startPx} L 0 ${endPx} L ${width} ${endPx} L ${width} ${startPx} Z`;\n } else {\n dataPoint.d = `M ${startPx} 0 L ${endPx} 0 L ${endPx} ${height} L ${startPx} ${height} Z`;\n }\n dataPoint.className = plotWidth ? bandClass : lineClass;\n elemData.push(dataPoint);\n }\n });\n if (elemData.length) {\n const parentGroup = this.createElement(svgContainer, 'g', [1], className);\n const elem = this.createElement(parentGroup, 'path', elemData);\n elem.attr('d', d => d.d).style('pointer-events', 'none')\n .attr('class', d => d.className);\n }\n return this;\n }\n\n hide () {\n const className = this.config().className;\n const drawingInf = this.drawingContext();\n selectElement(drawingInf.sideEffectGroup).selectAll(`.${className}`).remove();\n }\n}\n","const fadeFn = (set, context, strategy) => {\n const {\n mergedEnter,\n mergedExit,\n exitSet,\n completeSet\n } = set;\n\n if (!mergedEnter.length && !mergedExit.length) {\n context.applyInteractionStyle(completeSet, {}, strategy, false);\n } else {\n context.applyInteractionStyle(exitSet[1], {}, strategy, true);\n context.applyInteractionStyle(mergedEnter, {}, strategy, false);\n }\n};\n\nexport const strategies = {\n fade: fadeFn,\n focus: (set, context) => {\n const {\n mergedEnter,\n mergedExit,\n completeSet\n } = set;\n if (!mergedEnter.length && !mergedExit.length) {\n context.applyInteractionStyle(completeSet, {}, 'focus', false);\n } else {\n context.applyInteractionStyle(mergedExit, {}, 'focus', true);\n context.applyInteractionStyle(mergedEnter, {}, 'focus', false);\n }\n },\n highlight: (set, context) => {\n const {\n mergedEnter,\n mergedExit,\n entrySet,\n exitSet,\n completeSet\n } = set;\n if (!mergedEnter.length && !mergedExit.length) {\n context.applyInteractionStyle(completeSet, {}, 'highlight', false);\n } else {\n context.applyInteractionStyle(entrySet[1], {}, 'highlight', true);\n context.applyInteractionStyle(exitSet[1], {}, 'highlight', false);\n }\n }\n};\n","import SurrogateSideEffect from '../surrogate';\nimport { strategies } from './strategy';\n\nexport default class PlotHighlighter extends SurrogateSideEffect {\n constructor (...params) {\n super(...params);\n this._strategy = 'highlight';\n this._strategies = strategies;\n }\n\n static formalName () {\n return 'highlighter';\n }\n\n static target () {\n return 'visual-unit';\n }\n\n apply (selectionSet, payload, options = {}) {\n const strategy = this._strategies[options.strategy || this._strategy];\n\n if (selectionSet.isSourceFieldPresent !== false) {\n strategy(selectionSet, this, options.strategy || this._strategy);\n }\n\n return this;\n }\n}\n","import SurrogateSideEffect from '../surrogate';\n\nexport default class FilterEffect extends SurrogateSideEffect {\n static formalName () {\n return 'filter';\n }\n\n static target () {\n return 'visual-unit';\n }\n\n static mutates () {\n return true;\n }\n\n apply (selectionSet, payload) {\n const context = this.firebolt.context;\n const entryModel = selectionSet.mergedEnter.model;\n if (payload.criteria === null) {\n context.clearCaching().resetData();\n } else {\n context.enableCaching().data(entryModel);\n }\n return this;\n }\n}\n","import { DataModel, STATE_NAMESPACES, getObjProp } from 'muze-utils';\nimport { CLASSPREFIX } from '../../enums/constants';\nimport SpawnableSideEffect from '../spawnable';\n\nimport './styles.scss';\n\nconst addLayer = (layerDefs, layerRegistry, context, sideEffect) => {\n const layers = [];\n if (layerDefs) {\n layerDefs.forEach((layerDef) => {\n const mark = layerDef.mark;\n const layerCls = layerRegistry[mark];\n if (layerCls && layerCls.shouldDrawAnchors()) {\n const depLayerEncoding = layerDef.def.encoding;\n const encoding = {\n x: getObjProp(depLayerEncoding, 'x', 'field'),\n y: getObjProp(depLayerEncoding, 'y', 'field'),\n color: getObjProp(depLayerEncoding, 'color', 'field'),\n size: {\n field: getObjProp(depLayerEncoding, 'size', 'field'),\n value: sideEffect.defaultSizeValue()\n }\n };\n const name = `${layerDef.def.name}-${sideEffect.constructor.formalName()}`;\n const layerObj = {\n instances: context.addLayer({\n name,\n mark: 'point',\n className: sideEffect.constructor.defaultConfig().className,\n encoding,\n transform: {\n type: 'identity'\n },\n transition: sideEffect.getTransitionConfig(),\n calculateDomain: false,\n source: dm => dm.select(() => false, {\n saveChild: false\n }),\n interactive: false,\n render: false\n }),\n linkedLayer: layerDef.def.name\n };\n layers.push(layerObj);\n }\n });\n }\n return layers;\n};\n\nexport default class AnchorEffect extends SpawnableSideEffect {\n constructor (...params) {\n super(...params);\n this._layersMap = {};\n this.addAnchorLayers();\n }\n\n static target () {\n return 'visual-unit';\n }\n\n static defaultConfig () {\n return {\n className: `${CLASSPREFIX}-anchors-group`\n };\n }\n\n static formalName () {\n return 'anchors';\n }\n\n addAnchorLayers () {\n const context = this.firebolt.context;\n const metaInf = context.metaInf();\n const layerRegistry = context.registry().layerRegistry;\n const layerDefsVal = context.layerDef();\n context.store().registerImmediateListener(\n `${STATE_NAMESPACES.UNIT_LOCAL_NAMESPACE}.${metaInf.namespace}.layerDef`, ([, layerDefs]) => {\n this._layers = addLayer(layerDefs, layerRegistry, context, this);\n });\n this._layers = addLayer(layerDefsVal, layerRegistry, context, this);\n return this;\n }\n\n getTransitionConfig () {\n return {\n disabled: true\n };\n }\n\n /**\n * Returns the default area value of the anchor point.\n * @return { number } Default area value of anchor.\n */\n defaultSizeValue () {\n return 100;\n }\n\n apply (selectionSet) {\n const self = this;\n const dataModel = selectionSet.mergedEnter.model;\n if (selectionSet.isSourceFieldPresent !== false) {\n const drawingInf = this.drawingContext();\n const sideEffectGroup = drawingInf.sideEffectGroup;\n const className = `${this.config().className}`;\n const layers = this._layers;\n const parentGroup = this.createElement(sideEffectGroup, 'g', [1], `${className}-container`);\n const anchorGroups = this.createElement(parentGroup, 'g', Object.values(layers));\n anchorGroups.each(function (layer) {\n const instances = layer.instances;\n const elems = self.createElement(this, 'g', instances, className);\n const linkedLayer = self.firebolt.context.getLayerByName(layer.linkedLayer);\n const [transformedData, schema] = linkedLayer.getTransformedDataFromIdentifiers(dataModel);\n const transformedDataModel = new DataModel(transformedData, schema);\n elems.each(function (d, i) {\n instances[i].data(transformedDataModel).mount(this);\n });\n });\n }\n return this;\n }\n}\n","import AnchorEffect from './anchors';\nimport { CLASSPREFIX } from '../enums/constants';\n\nexport default class PersistentAnchors extends AnchorEffect {\n static formalName () {\n return 'persistent-anchors';\n }\n\n static defaultConfig () {\n return {\n className: `${CLASSPREFIX}-persistent-anchors`\n };\n }\n\n getTransitionConfig () {\n return {\n disabled: true\n };\n }\n}\n","import AnchorEffect from './anchors';\nimport { CLASSPREFIX } from '../enums/constants';\n\nexport default class BrushAnchors extends AnchorEffect {\n static formalName () {\n return 'brush-anchors';\n }\n\n static defaultConfig () {\n return {\n className: `${CLASSPREFIX}-brush-anchors`\n };\n }\n\n getTransitionConfig () {\n return {\n disabled: true\n };\n }\n}\n","import * as BEHAVIOURS from './enums/behaviours';\n\nexport const behaviourEffectMap = {\n [BEHAVIOURS.BRUSH]: ['selectionBox', {\n name: 'highlighter',\n options: {\n strategy: 'fade'\n }\n }, 'brush-anchors'],\n [`${BEHAVIOURS.BRUSH},${BEHAVIOURS.SELECT}`]: [{\n name: 'tooltip',\n options: {\n strategy: 'showSelectedItems',\n order: 0,\n filter: context => context.config().mode === 'fragmented'\n }\n }],\n [BEHAVIOURS.HIGHLIGHT]: [{\n name: 'highlighter',\n options: {\n strategy: 'highlight'\n }\n }, 'crossline', {\n name: 'tooltip',\n options: {\n order: 9999\n }\n }, 'anchors'],\n [BEHAVIOURS.FILTER]: ['filter'],\n [BEHAVIOURS.SELECT]: [{\n name: 'highlighter',\n options: {\n strategy: 'focus'\n }\n }, 'persistent-anchors']\n};\n","export const CLASSPREFIX = 'muze';\nexport const STACK = 'stack';\nexport const GROUP = 'group';\nexport const IDENTITY = 'identity';\nexport const ANGLE = 'angle';\nexport const RADIUS = 'radius';\nexport const SIZE = 'size';\nexport const COLOR = 'color';\nexport const SHAPE = 'shape';\nexport const OUTER_RADIUS_VALUE = 'outerRadiusValue';\nexport const TEXT_ANCHOR_MIDDLE = 'middle';\nexport const ENCODING = {\n X: 'x',\n Y: 'y',\n X0: 'x0',\n Y0: 'y0'\n};\n\nexport const ASCENDING = 'asc';\n\nexport const AGG_FN_SUM = 'sum';\n\nexport const AREA_LAYER = 'area';\nexport const ARC_LAYER = 'arc';\nexport const LINE_LAYER = 'line';\nexport const TEXT_LAYER = 'text';\nexport const POINT_LAYER = 'point';\nexport const BAR_LAYER = 'bar';\nexport const TICK_LAYER = 'tick';\nexport const SIMPLE_LAYER = 'simple';\nexport const BASE_LAYER = 'base';\n","import { CLASSPREFIX, STACK } from '../../enums/constants';\n\nexport const defaultConfig = {\n classPrefix: CLASSPREFIX,\n defClassName: 'layer-area',\n className: '',\n interpolate: 'linear',\n transform: {\n type: STACK\n },\n interaction: {\n\n },\n nearestPointThreshold: 10,\n encoding: {\n color: {},\n x: {},\n y: {},\n y0: {},\n strokeOpacity: {\n value: 1\n }\n },\n transition: {\n effect: 'cubic',\n duration: 1000\n },\n connectNullData: false\n};\n","import { ERROR_MSG } from 'muze-utils';\n\n/**\n * This is an interface class which any new layer class has to extend.\n *\n * @example\n * class BarLayer extends BaseLayer {\n * update (params) {\n * // super.update(params);\n * // Update the bar layer\n * }\n * }\n * @class\n */\nexport default class SimpleLayer {\n\n formalName () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Sets or gets the dependencies.\n * @param {Object} dependencies Dependencies needed by layer\n * @return {BaseLayer} Instance of base layer.\n */\n dependencies () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Returns the config of the layer\n *\n * @param {Object} config Configuration of layer\n * @return {Object} configuration of layer\n */\n config () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Acts as a getter or setter function\n * When setter\n * Returns the datamodel of the layer\n * @param { DataModel } dataModel instance of DataModel\n * @return { DataModel } DataModel instance of the layer\n */\n data () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Returns a serialized schema of the layer\n * @return {Object} Serialized schema\n */\n serialize () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Returns the unique identifier of this layer\n * @return {string} id of the layer\n */\n id () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n /*\n * This method resolves the x, y, x0 and y0 values from the transformed data.\n * It also checks the type of transformed data for example, if it is a stacked data\n * then it fetches the y and y0 values from the stacked data.\n * @param {Array.} transformedData transformed data\n * @param {Object} fieldMap field definitions\n * @param {string} transformType type of transformed data - stack, group or identity.\n * @return {Array.} Normalized data\n * @private\n */\n normalizeTransformedData () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Gets the transform method from transform factory based on type of transform. It then calls the\n * transform method with the data and passes the configuration parameters of transform such as\n * groupBy, value field, etc.\n *\n * @param {DataModel} dataModel Instance of dataModel\n * @param {Object} config configuration for transforming data\n * @return {Array.} Transformed data.\n * @private\n */\n getTransformedData () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Calculates the domain from the data.\n * It checks the type of field and calculates the domain based on that. For example, if it\n * is a quantitative or temporal field, then it calculates the min and max from the data or\n * if it is a nominal field then it gets all the values from the data of that field.\n * @param {Array} data DataArray\n * @return {Array} Domain values array.\n */\n _calculateDomainFromData () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Returns the domain for the axis.\n *\n * @param {string} encodingType type of encoding x, y, color, etc.\n * @return {Object} Axis domains\n */\n getDomain () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Abstract method for getting nearest point\n * @return {BaseLayer} Instance of base layer\n */\n getNearestPoint () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Abstract method for highlighting points\n * @return {BaseLayer} Instance of base layer\n */\n highlightPoint () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Abstract method for deselecting points\n * @return {BaseLayer} Instance of base layer\n */\n dehighlightPoint () {\n return this;\n }\n\n linkLayerStore () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Sets the container element for the layer to be renderered.\n * @param {SVGElement} mountPoint SVG element or group element.\n */\n mount () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n render () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n}\n","export const props = {\n axes: {},\n mount: {},\n measurement: {},\n metaInf: {},\n data: {},\n config: {},\n valueParser: {\n defaultValue: val => val\n }\n};\n","/**\n * @module Axis\n * This file declares a class that is used to render an axis to add meaning to\n * plots.\n */\nimport { Symbols } from 'muze-utils';\nimport * as AxisOrientation from '../enums/axis-orientation';\n\n/**\n * @module Axis\n * This file exports constants that are used to reference axis orientations\n * in a consistent manner.\n */\nexport const BOTTOM = 'bottom';\nexport const TOP = 'top';\nexport const LEFT = 'left';\nexport const RIGHT = 'right';\n\n/**\n * This object is used to associate the axis orientation with the d3 class\n * used to represent that axis.\n */\nexport const axisOrientationMap = {\n [AxisOrientation.LEFT]: Symbols.axisLeft,\n [AxisOrientation.BOTTOM]: Symbols.axisBottom,\n [AxisOrientation.RIGHT]: Symbols.axisRight,\n [AxisOrientation.TOP]: Symbols.axisTop\n};\n","/**\n * @module axis\n * This file exports constants used to reference scale type\n * consistently throughout the project.\n */\nexport const LINEAR = 'linear';\nexport const BAND = 'band';\nexport const TIME = 'temporal';\nexport const COLOR = 'color';\nexport const ORDINAL = 'ordinal';\nexport const QUANTIZE = 'quantize';\nexport const QUANTILE = 'quantile';\nexport const LOG = 'log';\nexport const POW = 'pow';\nexport const IDENTITY = 'identity';\nexport const SEQUENTIAL = 'sequential';\nexport const THRESHOLD = 'threshold';\n","export const CLASSPREFIX = 'muze';\n\nexport const CONTINOUS = 'continous';\nexport const DISCRETE = 'discrete';\nexport const SEQUENTIAL = 'sequential';\nexport const ORDINAL = 'ordinal';\nexport const LINEAR = 'linear';\nexport const THRESHOLD = 'threshold';\nexport const QUANTIZE = 'quantize';\nexport const QUANTILE = 'quantile';\n\nexport const COLOR = 'color';\nexport const SHAPE = 'shape';\nexport const SIZE = 'size';\n\nexport const DOMAIN = 'domain';\nexport const BAND = 'band';\nexport const HIDDEN = 'hidden';\nexport const NUMBER = 'number';\nexport const BOTTOM = 'bottom';\nexport const TOP = 'top';\n\nexport const RGB = 'rgb';\nexport const HEX = 'hex';\nexport const HSLA = 'hsla';\nexport const HSL = 'hsl';\n\n","import { scales, colorSchemes } from 'muze-utils';\n\nimport {\n SEQUENTIAL,\n ORDINAL,\n LINEAR,\n CONTINOUS,\n THRESHOLD,\n QUANTIZE\n} from './enums/constants';\n\nimport * as ScaleType from './enums/scale-type';\n\nconst {\n scaleLinear,\n scaleThreshold,\n scaleLog,\n scalePow,\n scaleIdentity,\n scaleOrdinal,\n scaleSequential,\n scaleQuantize,\n scaleQuantile,\n schemeCategory10,\n schemeCategory20,\n schemeCategory20b,\n scaleBand,\n scaleTime\n} = scales;\nexport const scaleMap = {\n [ScaleType.LINEAR]: scaleLinear,\n [ScaleType.BAND]: scaleBand,\n [ScaleType.QUANTIZE]: scaleQuantize,\n [ScaleType.QUANTILE]: scaleQuantile,\n [ScaleType.THRESHOLD]: scaleThreshold,\n [ScaleType.SEQUENTIAL]: scaleSequential,\n [ScaleType.LOG]: scaleLog,\n [ScaleType.POW]: scalePow,\n [ScaleType.IDENTITY]: scaleIdentity,\n [ScaleType.TIME]: scaleTime,\n [ScaleType.COLOR]: scaleLinear,\n [ScaleType.ORDINAL]: scaleOrdinal\n};\nexport const SCHEMES = {\n SCHEME1: schemeCategory10,\n SCHEME2: schemeCategory20,\n SCHEME3: schemeCategory20b\n};\n\n/**\n * Accepts a scheme in a string format and returns the scale from d3-scale-chromatic\n *\n * @export\n * @param {string} scheme a string representing the kind of scheme for the color axis\n * @return {Object} The corresponding scale from a scheme type from d3 chromatic scale\n */\nexport function getScheme (scheme) {\n if (scheme[0] === 'i') {\n return scaleSequential(colorSchemes[scheme]);\n }\n return scaleOrdinal(colorSchemes[scheme]);\n}\n\n/**\n *\n *\n * @export\n * @param {*} scheme\n *\n */\nexport function getSchemeType (scheme) {\n let schemeType = '';\n if (scheme && typeof (scheme) === 'string') {\n schemeType = scheme[0] === 'i' ? SEQUENTIAL : ORDINAL;\n } else {\n schemeType = ORDINAL;\n }\n return schemeType;\n}\n\n/**\n * This function is used to create a scale that is assigned to\n * an instance of axis.\n *\n * @export\n * @param {Object} params the input parameters to create a Scale object\n * @param {string} params.type the type of scale\n * @param {Array} params.range the range of scale\n * @return {Object} instance of scale\n */\nexport function createScale (params) {\n if (!params.type || !scaleMap[params.type]) {\n throw new Error(`${params.type} is not a valid scale type`);\n }\n if (!Array.isArray(params.range)) {\n throw new Error('range parameter must be an array');\n }\n let scaleFactory = null;\n const range = params.range;\n // @todo: do it using scale decorator\n if (params.type === LINEAR && params.interpolator) {\n scaleFactory = scaleMap[params.interpolator];\n if (params.interpolator === ScaleType.POW) {\n return scaleFactory().range(range).exponent(params.exponent);\n } else if (params.interpolator === ScaleType.LOG) {\n return scaleFactory().range(range).base([params.base]);\n }\n } else {\n scaleFactory = scaleMap[params.type];\n }\n\n if (params.type === QUANTIZE) {\n scaleFactory().nice();\n }\n return scaleFactory().range(range);\n}\n\n/**\n * This method is used to update the range of a scale\n * so that the core module can remain agnostic of the d3\n * scale api.\n *\n * @export\n * @param {Scale} scale Instance of d3 Scale.\n * @param {Array} range new range of the scale.\n * @return {Scale} Updated scale.\n */\nexport function updateScaleRange (scale, range) {\n return scale.range(range);\n}\n\n/**\n *\n *\n * @export\n * @param {*} domainType\n * @param {*} rangeType\n * @param {*} steps\n *\n */\nexport function getScaleType (domainType, rangeType, steps) {\n if (rangeType === CONTINOUS) {\n return LINEAR;\n }\n if (domainType === CONTINOUS) {\n if (steps instanceof Array) {\n return THRESHOLD;\n }\n return QUANTIZE;\n }\n return ORDINAL;\n}\n","import { getUniqueId } from 'muze-utils';\nimport { CLASSPREFIX } from '../enums/constants';\n\n/**\n *\n *\n */\nexport const defaultConfig = {\n id: getUniqueId(),\n axisName: {\n defClassName: 'axis-name'\n },\n axisNamePadding: 12,\n base: 10,\n classPrefix: CLASSPREFIX,\n className: `${CLASSPREFIX}-axis`,\n exponent: 1,\n interpolator: 'linear',\n fixedBaseline: true,\n labels: {\n rotation: null,\n smartTicks: null\n },\n orientation: 'left',\n numberFormat: val => val,\n padding: 0.3,\n nice: true,\n numberOfTicks: 10,\n rotate: false,\n show: true,\n showAxisName: true,\n showInnerTicks: true,\n showOuterTicks: true,\n style: {},\n type: 'linear',\n tickFormat: null,\n tickValues: null,\n xOffset: 0,\n yOffset: 0\n};\n\n","/**\n * This file exports functionality that is used to render axis.\n */\nimport { selectElement, makeElement, angleToRadian } from 'muze-utils';\nimport * as AxisOrientation from './enums/axis-orientation';\nimport { LINEAR, HIDDEN, BOTTOM, TOP } from './enums/constants';\n\n/**\n *\n *\n * @param {*} instance\n * @param {*} container\n * @param {*} labelManager\n * @param {*} config\n */\nconst rotateAxis = (instance, tickText, labelManager) => {\n let rotation;\n const axis = instance.axis();\n const config = instance.config();\n const renderConfig = instance.renderConfig();\n const smartTicks = instance.smartTicks();\n const scale = axis.scale();\n const labelFunc = scale.ticks || scale.quantile || scale.domain;\n const ticks = labelFunc();\n const {\n orientation,\n fixedBaseline,\n type\n } = config;\n const {\n labels\n } = renderConfig;\n\n rotation = labels.rotation;\n\n const tickSize = instance.getTickSize();\n tickText.each(function (d, index) {\n let yShift;\n let xShift;\n let datum = smartTicks[index] ? smartTicks[index].text : d;\n\n const tickFormatter = axis.tickFormat() ? axis.tickFormat : null;\n\n const temp = tickSize ? (tickFormatter ? tickFormatter()(d) : datum) : '';\n\n datum = temp.toString();\n\n const tickLabelDim = labelManager.getOriSize(datum);\n\n const width = tickLabelDim.width * 0.5;\n const height = tickLabelDim.height * 0.5;\n\n if (rotation < 0) {\n rotation = 360 + rotation;\n }\n\n const quadrant = 4 - Math.floor(rotation / 90);\n const rotationNormalizer = ((quadrant % 2 === 0) ? rotation : 180 * Math.ceil(rotation / 180) - rotation) % 180;\n\n yShift = Math.sqrt(height ** 2 + width ** 2) * Math.sin(angleToRadian(rotationNormalizer));\n\n if ((quadrant === 3 || quadrant === 2) && !(rotationNormalizer > 67.5 && rotationNormalizer <= 90)) {\n yShift += height * 2;\n }\n xShift = width;\n\n if (rotation === 90) {\n xShift = height;\n } else if (rotation === 270) {\n xShift = -height;\n } else {\n xShift = 0;\n }\n\n if (orientation === AxisOrientation.TOP) {\n xShift = (fixedBaseline && ticks[0] === d && type === LINEAR) ? xShift + xShift / 2 : xShift;\n selectElement(this)\n .attr('transform', `translate(${-xShift + tickSize}\n ${-yShift - tickSize}) rotate(${rotation})`);\n } else {\n xShift = (fixedBaseline && ticks[0] === d && type === LINEAR) ? xShift - xShift / 2 : xShift;\n\n selectElement(this)\n .attr('transform', `translate(${xShift - tickSize}\n ${yShift + tickSize}) rotate(${rotation})`);\n }\n selectElement(this).transition()\n .duration(1000).text(datum);\n });\n return tickText;\n};\n\n/**\n *\n *\n * @param {*} tickText\n * @param {*} axisInstance\n */\nconst changeTickOrientation = (selectContainer, axisInstance, tickSize) => {\n const {\n _smartTicks\n } = axisInstance;\n const config = axisInstance.config();\n const renderConfig = axisInstance.renderConfig();\n const labelManager = axisInstance.dependencies().labelManager;\n const {\n orientation,\n classPrefix\n } = config;\n const {\n labels\n } = renderConfig;\n const {\n rotation,\n smartTicks: isSmartTicks\n } = labels;\n\n const tickText = selectContainer.selectAll('.tick text');\n tickText.selectAll('tspan').remove();\n\n // rotate labels if not enough space is available\n if (rotation && (orientation === TOP || orientation === BOTTOM)) {\n rotateAxis(axisInstance, tickText, labelManager);\n } else if (!rotation && !isSmartTicks) {\n tickText.attr('transform', '');\n } else {\n tickText.text('');\n if (orientation === TOP || orientation === BOTTOM) {\n tickText.attr('y', 0)\n .attr('x', 0)\n .attr('transform', '')\n .text('');\n const tspan = makeElement(tickText, 'tspan', (d, i) => {\n if (_smartTicks[i]) {\n return _smartTicks[i].lines;\n } return [];\n }, `${classPrefix}-smart-text`);\n\n tspan.attr('dy', '0')\n .style('opacity', '0')\n\n .transition()\n .duration(1000)\n .on('end', axisInstance.registerAnimationDoneHook())\n .attr('dy', (d, i) => {\n if (orientation === BOTTOM || i !== 0) {\n return _smartTicks[0].oriTextHeight;\n }\n return -_smartTicks[0].oriTextHeight * (_smartTicks[0].lines.length - 1) - tickSize;\n })\n .style('opacity', 1)\n .text(e => e)\n .attr('x', 0);\n } else {\n const tspan = makeElement(tickText, 'tspan', (d, i) => _smartTicks[i].lines, `${classPrefix}-smart-text`);\n tspan.text(e => e);\n }\n }\n\n return tickText;\n};\n\nconst setFixedBaseline = (axisInstance) => {\n const {\n fixedBaseline\n } = axisInstance.config();\n const domain = axisInstance.domain();\n if (fixedBaseline && domain.length) {\n axisInstance.setFixedBaseline();\n }\n};\n\n/**\n *\n *\n * @param {*} textNode\n * @param {*} orientation\n * @param {*} measures\n */\nconst setAxisNamePos = (textNode, orientation, measures) => {\n const {\n axisNameHeight,\n yOffset,\n labelOffset,\n availableSpace\n } = measures;\n switch (orientation) {\n case AxisOrientation.LEFT:\n textNode.attr('transform',\n `translate(${-(availableSpace.width - axisNameHeight)},${yOffset + labelOffset})rotate(-90)`);\n break;\n case AxisOrientation.RIGHT:\n textNode.attr('transform',\n `translate(${(availableSpace.width - axisNameHeight)},${yOffset + labelOffset})rotate(90)`);\n break;\n case AxisOrientation.TOP:\n textNode.attr('transform',\n `translate(${availableSpace.width / 2},${-availableSpace.height + axisNameHeight})`);\n break;\n case AxisOrientation.BOTTOM:\n textNode.attr('transform',\n `translate(${availableSpace.width / 2},${availableSpace.height - axisNameHeight / 2})`);\n break;\n default:\n }\n return textNode;\n};\n\n/**\n * This method is used to render the axis inside an\n * svg container.\n *\n * @export\n * @param {Object} axisInstance the nput object required to render axis\n * @param {string} axisInstance.orientation the orientation of axis\n * @param {Object} axisInstance.scale instance of d3 scale\n * @param {SVGElement} axisInstance.container the container in which to render\n */\nexport function renderAxis (axisInstance) {\n const config = axisInstance.config();\n const renderConfig = axisInstance.renderConfig();\n const labelManager = axisInstance.dependencies().labelManager;\n const mount = axisInstance.mount();\n const range = axisInstance.range();\n const axis = axisInstance.axis();\n const scale = axisInstance.scale();\n const {\n _axisNameStyle: axisNameStyle,\n _tickLabelStyle: tickLabelStyle,\n _tickFormatter: axisTickFormatter,\n tickValues\n } = axisInstance;\n const {\n orientation,\n name,\n xOffset,\n yOffset,\n axisNamePadding,\n className,\n id,\n classPrefix\n } = config;\n const {\n show,\n showAxisName,\n labels\n } = renderConfig;\n\n if (!show) {\n return;\n }\n\n const tickSize = axisInstance.getTickSize();\n\n const selectContainer = makeElement(selectElement(mount), 'g', [axisInstance], `${className}`, {},\n key => key.config().id);\n\n // Set style for tick labels\n labelManager.setStyle(tickLabelStyle);\n\n const labelFunc = scale.ticks || scale.quantile || scale.domain;\n\n axis.tickFormat(axisTickFormatter(tickValues || axis.tickValues() || labelFunc()));\n\n // Get range(length of range)\n const availableSpace = Math.abs(range[0] - range[1]);\n\n // Get width and height taken by axis labels\n const labelProps = axisInstance.axisComponentDimensions().largestTickDimensions;\n\n // Draw axis ticks\n selectContainer.attr('transform', `translate(${xOffset},${yOffset})`);\n setFixedBaseline(axisInstance);\n if (labels.smartTicks === false || tickSize === 0) {\n selectContainer.transition()\n .duration(1000)\n .on('end', axisInstance.registerAnimationDoneHook())\n .call(axis);\n } else {\n selectContainer.call(axis);\n }\n selectContainer.selectAll('.tick').classed(`${classPrefix}-ticks`, true);\n selectContainer.selectAll('.tick line').classed(`${classPrefix}-tick-lines`, true);\n\n // Set classes for ticks\n const tickText = selectContainer.selectAll('.tick text');\n tickText.classed(`${classPrefix}-ticks`, true)\n .classed(`${classPrefix}-ticks-${id}`, true);\n\n changeTickOrientation(selectContainer, axisInstance, tickSize);\n\n // Create axis name\n const textNode = makeElement(selectContainer, 'text', [name], `${classPrefix}-axis-name`)\n .attr('text-anchor', 'middle')\n .classed(`${classPrefix}-axis-name-${id}`, true)\n .text(d => d);\n\n // Hide axis name if show is off\n textNode.classed(HIDDEN, !showAxisName);\n\n // render labels based on orientation of axis\n const labelOffset = availableSpace / 2;\n\n // Set style for axis name\n labelManager.setStyle(axisNameStyle);\n const axisNameSpace = labelManager.getOriSize(name);\n const measures = {\n labelProps,\n tickSize,\n axisNamePadding,\n axisNameHeight: axisNameSpace.height,\n axisNameWidth: axisNameSpace.width,\n yOffset,\n xOffset,\n labelOffset,\n availableSpace: axisInstance.availableSpace()\n };\n // Set position for axis name\n setAxisNamePos(textNode, orientation, measures);\n}\n","import { BOTTOM, TOP } from '../enums/axis-orientation';\n\nconst setAxisRange = (context, type, rangeBounds, offset) => {\n context.range(rangeBounds);\n offset && context.config({ [`${type}Offset`]: offset });\n};\n\nconst getAxisOffset = (timeDiff, range, domain) => {\n const pvr = Math.abs(range[1] - range[0]) / (domain[1] - domain[0]);\n const width = (pvr * timeDiff);\n const avWidth = (range[1] - range[0]);\n const bars = avWidth / width;\n const barWidth = avWidth / (bars + 1);\n const diff = avWidth - barWidth * bars;\n\n return diff / 2;\n};\n\nexport const adjustRange = (minDiff, range, domain, orientation) => {\n const diff = getAxisOffset(minDiff, range, domain);\n\n if (orientation === TOP || orientation === BOTTOM) {\n range[0] += diff;\n range[1] -= diff;\n } else {\n range[0] -= diff;\n range[1] += diff;\n }\n return range;\n};\n\nexport const spaceSetter = (context, spaceConfig) => {\n let tickInterval;\n let heightForTicks;\n const {\n width: availWidth,\n height: availHeight,\n padding\n } = context.availableSpace();\n const {\n top,\n left,\n bottom,\n right\n } = padding;\n const {\n isOffset\n } = spaceConfig;\n const {\n showAxisName,\n labels\n } = context.renderConfig();\n const {\n rotation\n } = labels;\n const {\n orientation,\n fixedBaseline,\n axisNamePadding,\n tickValues\n } = context.config();\n const {\n tickDimensions,\n allTickDimensions,\n axisNameDimensions,\n tickSize\n } = context.getAxisDimensions();\n const {\n height: tickDimHeight,\n width: tickDimWidth\n } = tickDimensions;\n const namePadding = showAxisName ? axisNamePadding : 0;\n const labelConfig = { smartTicks: true, rotation: labels.rotation };\n const minTickDistance = context._minTickDistance;\n const minTickSpace = context._minTickSpace;\n const minDiff = context._minDiff;\n const domain = context.domain();\n const axisNameHeight = axisNameDimensions.height;\n\n return {\n time: {\n x: () => {\n const tickShifter = tickDimWidth / 2;\n\n setAxisRange(context, 'y', adjustRange(minDiff,\n [tickShifter, availWidth - left - right - tickShifter], domain, orientation),\n isOffset ? availHeight : null);\n\n tickInterval = ((availWidth) / context.getTickValues().length)\n - minTickDistance.width;\n\n heightForTicks = availHeight - axisNameDimensions.availHeight - tickSize - namePadding;\n\n if (tickInterval < minTickSpace.width && rotation !== 0) {\n // set smart ticks and rotation config\n labelConfig.rotation = labels.rotation === null ? -90 : rotation;\n\n // Remove ticks if not enough height\n if (tickInterval < minTickSpace.height) {\n heightForTicks = availHeight;\n tickInterval = minTickSpace.height;\n context.renderConfig({ showInnerTicks: false, showOuterTicks: false });\n }\n }\n if (availHeight < axisNameHeight) {\n context.renderConfig({ show: false });\n }\n\n context.maxTickSpaces({\n width: tickInterval,\n height: heightForTicks,\n noWrap: rotation !== null\n });\n return labelConfig;\n },\n y: () => {\n let widthForTicks = availWidth;\n const tickShifter = tickDimHeight / 2;\n\n setAxisRange(context, 'x', adjustRange(minDiff,\n [availHeight - top - bottom - tickShifter, tickShifter], domain, orientation),\n isOffset ? availWidth : null);\n\n if ((availWidth - axisNameHeight - namePadding) <= minTickDistance.width) {\n widthForTicks = 0;\n context.renderConfig({ showInnerTicks: false, showOuterTicks: false });\n }\n\n context.maxTickSpaces({\n width: widthForTicks,\n height: availHeight,\n noWrap: true\n });\n if (availWidth < axisNameHeight) {\n context.renderConfig({ show: false });\n }\n return labelConfig;\n }\n },\n band: {\n x: () => {\n setAxisRange(context, 'y', [0, availWidth - left - right], isOffset ? availHeight : null);\n const range = context.range();\n\n // Get Tick Interval\n tickInterval = ((range[1] - range[0]) / (tickValues || domain).length) - minTickDistance.width;\n\n // Get height available for ticks\n heightForTicks = availHeight - axisNameHeight - tickSize - namePadding;\n\n if (tickInterval < minTickSpace.width && rotation !== 0) {\n // set smart ticks and rotation config\n labelConfig.rotation = rotation === null ? -90 : rotation;\n labelConfig.smartTicks = false;\n\n // Ticks with overlapping height\n if (tickInterval < minTickSpace.height) {\n heightForTicks = 0;\n tickInterval = 0;\n context.renderConfig({ showInnerTicks: false, showOuterTicks: false });\n context.range([minTickSpace.height / 2, availWidth - minTickSpace.height / 2]);\n }\n } else if (tickValues) {\n const interval = (availWidth / domain.length) - minTickDistance.width;\n if (interval < minTickSpace.width) {\n context.range([minTickSpace.height / 2, availWidth - minTickSpace.height / 2]);\n }\n }\n if (availHeight < axisNameHeight) {\n context.renderConfig({ show: false, showInnerTicks: false, showOuterTicks: false });\n }\n\n context.maxTickSpaces({\n width: tickInterval,\n height: heightForTicks,\n noWrap: rotation !== null\n });\n return labelConfig;\n },\n y: () => {\n setAxisRange(context, 'x', [availHeight - bottom, top], isOffset ? availWidth : null);\n\n let widthForTicks = availWidth - axisNameHeight - tickSize - namePadding;\n if (widthForTicks <= minTickDistance.width) {\n widthForTicks = 0;\n context.renderConfig({ showInnerTicks: false, showOuterTicks: false });\n }\n\n context.maxTickSpaces({\n width: widthForTicks,\n height: availHeight,\n noWrap: true\n });\n if (availWidth < axisNameHeight) {\n context.renderConfig({ show: false });\n }\n return labelConfig;\n }\n },\n continous: {\n x: () => {\n labelConfig.smartTicks = false;\n const tickShifter = tickDimensions.width / 2;\n const baseline = fixedBaseline ? 0 : tickShifter;\n\n setAxisRange(context, 'y', [baseline + left, availWidth - right - tickShifter],\n isOffset ? availHeight : null);\n\n const range = context.range();\n\n // Get Tick widths and available space\n const totalTickWidth = allTickDimensions.length * (tickDimensions.width + minTickDistance.width);\n const availableSpace = range[1] - range[0];\n\n // Rotate labels if not enough width\n if (availableSpace < totalTickWidth && labels.rotation === null) {\n labelConfig.rotation = -90;\n }\n\n // Remove ticks if not enough height\n if (availHeight - axisNameHeight - namePadding < tickDimensions.height) {\n context.renderConfig({ showInnerTicks: false });\n if (availHeight < axisNameHeight) {\n context.renderConfig({ show: false });\n }\n }\n return labelConfig;\n },\n y: () => {\n labelConfig.smartTicks = false;\n const tickShifter = tickDimensions.height / 2;\n const baseline = fixedBaseline ? 1 : tickShifter;\n\n setAxisRange(context, 'x', [availHeight - bottom - baseline, tickShifter + top],\n isOffset ? availWidth : null);\n\n // Remove display of ticks if no space is left\n if (availWidth < tickDimensions.width + axisNameHeight + namePadding) {\n context.renderConfig({ showInnerTicks: false });\n if (availWidth < axisNameHeight) {\n context.renderConfig({ show: false });\n }\n }\n return labelConfig;\n }\n }\n };\n};\n","import { defaultValue } from 'muze-utils';\nimport { TOP, LEFT, BOTTOM } from '../enums/axis-orientation';\n\nexport const getRotatedSpaces = (rotation = 0, width, height) => {\n let rotatedHeight = height;\n let rotatedWidth = width;\n if (rotation) {\n const angle = ((rotation || 0) * Math.PI) / 180;\n rotatedWidth = Math.abs(height * Math.sin(angle)) + Math.abs(width * Math.cos(angle));\n rotatedHeight = Math.abs(width * Math.sin(angle)) + Math.abs(height * Math.cos(angle));\n }\n return { width: rotatedWidth, height: rotatedHeight };\n};\n\nexport const setOffset = (context) => {\n let x = 0;\n let y = 0;\n const logicalSpace = context.logicalSpace();\n const config = context.config();\n const {\n orientation,\n xOffset,\n yOffset\n } = config;\n if (orientation === LEFT) {\n x = xOffset === undefined ? logicalSpace.width : xOffset;\n }\n if (orientation === TOP) {\n y = yOffset === undefined ? logicalSpace.height : yOffset;\n }\n context.config({ xOffset: x, yOffset: y });\n};\n\nexport const getNumberOfTicks = (availableSpace, labelDim, axis, axisInstance) => {\n const ticks = axis.scale().ticks();\n const { numberOfTicks } = axisInstance.config();\n const tickLength = ticks.length;\n let numberOfValues = tickLength;\n\n if (tickLength * (labelDim * 1.5) > availableSpace) {\n numberOfValues = Math.floor(availableSpace / (labelDim * 1.5));\n }\n\n numberOfValues = Math.min(numberOfTicks, Math.max(2, numberOfValues));\n\n return axis.scale().ticks(numberOfValues);\n};\n\nexport const getAxisComponentDimensions = (context) => {\n let largestTick = '';\n let largestTickDimensions = { width: 0, height: 0 };\n let smartTick = {};\n let axisTicks;\n const allTickDimensions = [];\n const scale = context.scale();\n const { showAxisName } = context.renderConfig();\n const { tickValues, name } = context.config();\n const { labelManager } = context.dependencies();\n const labelFunc = scale.ticks || scale.quantile || scale.domain;\n\n // set the style on the shared label manager instance\n labelManager.setStyle(context._tickLabelStyle);\n\n // get the values along the domain\n axisTicks = tickValues || labelFunc();\n\n // Get the tick labels\n axisTicks = axisTicks.map((originalLabel, i) => {\n const label = context.getFormattedText(originalLabel, i, axisTicks);\n\n // convert to string for quant values\n const tickDimensions = labelManager.getOriSize(label);\n\n // Get spaces for all labels\n allTickDimensions.push(tickDimensions);\n\n // Getting largest label\n if (tickDimensions.width > largestTickDimensions.width) {\n largestTick = label;\n smartTick = context.smartTicks() ? context.smartTicks()[i] : {};\n largestTickDimensions = tickDimensions;\n }\n return label;\n });\n\n labelManager.setStyle(context._axisNameStyle);\n const axisNameDimensions = showAxisName ? labelManager.getOriSize(name) : { width: 0, height: 0 };\n\n return {\n axisNameDimensions,\n largestTick,\n largestTickDimensions,\n allTickDimensions,\n axisTicks,\n smartTick,\n tickSize: context.getTickSize()\n };\n};\n\nexport const computeAxisDimensions = (context) => {\n let tickDimensions = {};\n const { labels } = context.renderConfig();\n const { smartTicks, rotation } = labels;\n const {\n largestTickDimensions,\n axisTicks,\n smartTick,\n axisNameDimensions,\n allTickDimensions,\n tickSize\n } = getAxisComponentDimensions(context);\n const { height: labelHeight, width: labelWidth } = largestTickDimensions;\n\n // get the domain of axis\n const domain = context.domain();\n // const angle = ((rotation || 0) * Math.PI) / 180;\n\n if (domain.length === 0) {\n return null;\n }\n if (smartTicks) {\n tickDimensions = smartTick;\n } else {\n tickDimensions = { width: labelWidth, height: labelHeight };\n }\n tickDimensions = getRotatedSpaces(rotation, tickDimensions.width, tickDimensions.height);\n\n if (tickSize === 0) {\n tickDimensions = { width: 0, height: 0 };\n }\n return {\n allTickDimensions,\n tickSize,\n tickDimensions,\n axisNameDimensions,\n largestTickDimensions,\n axisTicks\n };\n};\n\n/**\n *\n *\n * @param {*} axisDimensions\n * @param {*} config\n * @param {*} range\n *\n */\nexport const getHorizontalAxisSpace = (context, axisDimensions, range) => {\n let width;\n let height;\n const domain = context.domain();\n const { tickSize, tickDimensions, axisNameDimensions } = axisDimensions;\n const { axisNamePadding, tickValues } = context.config();\n const { showAxisName } = context.renderConfig();\n const { height: axisDimHeight } = axisNameDimensions;\n const { height: tickDimHeight, width: tickDimWidth } = tickDimensions;\n\n width = range && range.length ? range[1] - range[0] : 0;\n\n height = 0;\n if (tickValues) {\n const minTickDiff = context.getMinTickDifference();\n const [min, max] = [\n Math.min(...tickValues, ...domain),\n Math.max(...tickValues, ...domain)\n ];\n\n width = ((max - min) / Math.abs(minTickDiff)) * (tickDimWidth + context._minTickDistance.width);\n }\n if (!width || width === 0) {\n height = Math.max(tickDimWidth, tickDimHeight);\n } else {\n height = tickDimHeight;\n }\n height += (showAxisName ? axisDimHeight + axisNamePadding : 0) + tickSize;\n\n return {\n width,\n height\n };\n};\n\n/**\n *\n *\n * @param {*} axisDimensions\n * @param {*} config\n * @param {*} range\n *\n */\nexport const getVerticalAxisSpace = (context, axisDimensions) => {\n let height;\n let width;\n const domain = context.domain();\n const { tickSize, tickDimensions, axisNameDimensions } = axisDimensions;\n const { axisNamePadding, tickValues } = context.config();\n const { showAxisName } = context.renderConfig();\n const { height: axisDimHeight } = axisNameDimensions;\n const { height: tickDimHeight, width: tickDimWidth } = tickDimensions;\n\n height = 0;\n width = tickDimWidth;\n if (tickValues) {\n const minTickDiff = context.getMinTickDifference();\n const [min, max] = [\n Math.min(...tickValues, ...domain),\n Math.max(...tickValues, ...domain)\n ];\n\n height = ((max - min) / Math.abs(minTickDiff)) * tickDimHeight;\n }\n width += (showAxisName ? axisDimHeight : 0) + tickSize + axisNamePadding;\n\n return {\n height,\n width\n };\n};\n\n/**\n * Calculates the logical space of the axis\n * @return {Object} Width and height occupied by the axis.\n */\nexport const calculateBandSpace = (context) => {\n const range = context.range();\n const axisDimensions = context.getAxisDimensions();\n const { orientation } = context.config();\n const { show } = context.renderConfig();\n const { largestTickDimensions, axisTicks, allTickDimensions } = axisDimensions;\n const { height: largestDimHeight } = largestTickDimensions;\n const minTickWidth = context._minTickDistance.width;\n if (orientation === TOP || orientation === BOTTOM) {\n let {\n width,\n height\n } = getHorizontalAxisSpace(context, axisDimensions, range);\n\n if (!width || width === 0) {\n width = allTickDimensions.reduce((t, n) =>\n t + Math.min(n.width, n.height) + minTickWidth, 0);\n }\n if (show === false) {\n height = 0;\n width = 0;\n }\n\n return {\n width,\n height\n };\n }\n\n let {\n width,\n height\n } = getVerticalAxisSpace(context, axisDimensions, range);\n\n if (!height || height === 0) {\n height = axisTicks.length * (largestDimHeight + context._minTickDistance.height) + largestDimHeight;\n }\n if (show === false) {\n width = 0;\n }\n\n return {\n width,\n height\n };\n};\n\n/**\n * Calculates the logical space of the axis\n * @return {Object} Width and height occupied by the axis.\n */\nexport const calculateContinousSpace = (context) => {\n const range = context.range();\n const axisDimensions = context.getAxisDimensions();\n const { orientation } = context.config();\n const { show, showAxisName } = context.renderConfig();\n const { axisNameDimensions } = axisDimensions;\n\n if (show === false) {\n return {\n width: 0,\n height: 0\n };\n }\n\n const { width: axisNameWidth } = axisNameDimensions;\n\n if (orientation === TOP || orientation === BOTTOM) {\n const {\n width,\n height\n } = getHorizontalAxisSpace(context, axisDimensions, range);\n const axisWidth = Math.max(width, axisNameWidth);\n\n return {\n width: axisWidth,\n height\n };\n }\n const {\n width,\n height\n } = getVerticalAxisSpace(context, axisDimensions, range);\n\n const effHeight = Math.max(height, showAxisName ? axisNameWidth : 0);\n\n return {\n width,\n height: effHeight\n };\n};\n\n/**\n * Overwrites domain with user defined domain (if present)\n * @param {Object} context reference to current axes\n * @param {Array} domain default domain\n *\n * @return {Array} domain\n */\nexport const getValidDomain = (context, domain) => {\n const { domain: userDom } = context.config();\n\n if (userDom) {\n domain = userDom;\n }\n\n return defaultValue(domain, []);\n};\n\nexport const setContinousAxisDomain = (context, domain) => {\n const { nice } = context.config();\n const scale = context.scale.bind(context);\n\n scale().domain(domain);\n nice && scale().nice();\n context._domain = scale().domain();\n};\n\n/**\n * Checks if any of the properties have changed between two objects\n * @param {Object} obj first object\n * @param {Object} obj1 second object\n * @param {Array} properties properties to be compared between two objects\n *\n * @return {Boolean} boolean value\n */\nexport const hasAxesConfigChanged = (obj = {}, obj1 = {}, properties) => {\n if (!Object.keys(obj).length || !Object.keys(obj1).length) {\n return false;\n }\n return properties.some(key => obj[key] !== obj1[key]);\n};\n","import { mergeRecursive } from 'muze-utils';\nimport { hasAxesConfigChanged } from './helper';\n\nexport const PROPS = {\n availableSpace: {},\n axisDimensions: {},\n axisComponentDimensions: {},\n config: {\n sanitization: (context, value) => {\n const oldConfig = Object.assign({}, context._config || {});\n const mockedOldConfig = mergeRecursive({}, oldConfig);\n value = mergeRecursive(mockedOldConfig, value);\n\n value.axisNamePadding = Math.max(value.axisNamePadding, 0);\n const shouldAxesScaleUpdate = hasAxesConfigChanged(\n value, oldConfig, ['interpolator', 'exponent', 'base', 'orientation']\n );\n const tickFormatter = context.sanitizeTickFormatter(value);\n\n if (shouldAxesScaleUpdate) {\n context._scale = context.createScale(value);\n context._axis = context.createAxis(value);\n }\n\n context._tickFormatter = ticks => tickFormatter(ticks);\n\n const {\n labels,\n show,\n showInnerTicks,\n showOuterTicks,\n showAxisName\n } = value;\n context.renderConfig({\n labels,\n show,\n showInnerTicks,\n showOuterTicks,\n showAxisName\n });\n return value;\n }\n },\n renderConfig: {\n sanitization: (context, value) => {\n const oldConfig = Object.assign({}, context._renderConfig || {});\n value = mergeRecursive(oldConfig, value);\n return value;\n }\n },\n logicalSpace: {},\n mount: {\n },\n range: {\n sanitization: (context, value) => {\n context.scale().range(value);\n context.logicalSpace(null);\n return value;\n }\n },\n\n smartTicks: {},\n tickSize: {},\n maxTickSpaces: {},\n valueParser: {\n defaultValue: val => val\n }\n};\n","import {\n mergeRecursive,\n getSmartComputedStyle,\n selectElement,\n generateGetterSetters,\n getUniqueId\n} from 'muze-utils';\nimport { createScale } from '../scale-creator';\nimport { axisOrientationMap, BOTTOM, TOP } from '../enums/axis-orientation';\nimport { defaultConfig } from './default-config';\nimport { renderAxis } from '../axis-renderer';\nimport { spaceSetter } from './space-setter';\nimport {\n getAxisComponentDimensions,\n computeAxisDimensions,\n calculateContinousSpace,\n setOffset,\n getValidDomain\n} from './helper';\nimport { PROPS } from './props';\n\nexport default class SimpleAxis {\n\n /**\n * Creates an instance of SimpleAxis.\n * @memberof SimpleAxis\n */\n constructor (config, dependencies) {\n this._id = getUniqueId();\n\n this._dependencies = dependencies;\n this._mount = null;\n this._range = [];\n this._domain = [];\n this._domainLock = false;\n this._axisDimensions = {};\n this._smartTicks = [];\n\n const defCon = mergeRecursive({}, this.constructor.defaultConfig());\n const simpleConfig = mergeRecursive(defCon, config);\n\n const bodyElem = selectElement('body');\n const classPrefix = simpleConfig.classPrefix;\n this._tickLabelStyle = getSmartComputedStyle(bodyElem, `${classPrefix}-ticks`);\n this._axisNameStyle = getSmartComputedStyle(bodyElem, `${classPrefix}-axis-name`);\n\n dependencies.labelManager.setStyle(this._tickLabelStyle);\n const dist = dependencies.labelManager.getOriSize('w');\n\n this._minTickDistance = { width: dist.width * 3 / 4, height: dist.height / 2 };\n this._minTickSpace = dependencies.labelManager.getOriSize('www');\n\n generateGetterSetters(this, PROPS);\n this.config(simpleConfig);\n\n this._scale = this.createScale(this._config);\n this._axis = this.createAxis(this._config);\n this._animationDonePromises = [];\n }\n\n /**\n * Returns the default configuration of simple axis\n * @return {Object} default configurations\n */\n static defaultConfig () {\n return defaultConfig;\n }\n\n /**\n * Sets a fixed baseline for the first ticks so that they can render effectively within\n * the given area\n *\n * @param {*} tickText\n * @param {*} config\n * @param {*} labelManager\n */\n setFixedBaseline () {\n return this;\n }\n\n /**\n *\n *\n * @readonly\n * @memberof SimpleAxis\n */\n scale (...params) {\n if (params.length) {\n this._scale = params[0];\n return this;\n }\n return this._scale;\n }\n\n resetDomain () {\n this._domain = [];\n return this;\n }\n\n /**\n *\n *\n * @readonly\n * @memberof SimpleAxis\n */\n axis (...params) {\n if (params.length) {\n this._axis = params[0];\n return this;\n }\n return this._axis;\n }\n\n /**\n *\n *\n * @param {*} d\n *\n * @memberof SimpleAxis\n */\n domain (...domain) {\n if (domain.length) {\n const domainValue = getValidDomain(this, domain[0]);\n this.scale().domain(domainValue);\n this._domain = this.scale().domain();\n this.setAxisComponentDimensions();\n this.logicalSpace(null);\n return this;\n }\n return this._domain;\n }\n\n setAxisComponentDimensions () {\n this.axisComponentDimensions(getAxisComponentDimensions(this));\n }\n\n /**\n *\n *\n *\n * @memberof SimpleAxis\n */\n dependencies () {\n return this._dependencies;\n }\n\n /**\n *\n *\n *\n * @memberof SimpleAxis\n */\n createScale (config) {\n const {\n base,\n padding,\n interpolator,\n exponent\n } = config;\n const range = this.range();\n const scale = createScale({\n padding,\n interpolator,\n exponent,\n base,\n range,\n type: this.constructor.type()\n });\n\n return scale;\n }\n\n sanitizeTickFormatter (value) {\n const { tickFormat, numberFormat } = value;\n\n if (tickFormat) {\n return ticks => (val, i) => tickFormat(numberFormat(val), val, i, ticks);\n }\n\n return () => val => numberFormat(val);\n }\n\n resetLogicalSpace () {\n this.logicalSpace(null);\n this.range([]);\n const {\n labels,\n show,\n showInnerTicks,\n showOuterTicks,\n showAxisName\n } = this.config();\n this.renderConfig({\n labels,\n show,\n showInnerTicks,\n showOuterTicks,\n showAxisName\n });\n }\n\n getFormattedText (text, index, axisTicks) {\n const formatter = this._tickFormatter;\n\n return formatter(axisTicks)(text, index);\n }\n\n /**\n *\n *\n *\n * @memberof SimpleAxis\n */\n createAxis (config) {\n const { orientation } = config;\n const axisClass = axisOrientationMap[orientation];\n\n if (axisClass) {\n const axis = axisClass(this.scale());\n return axis;\n }\n return null;\n }\n\n /**\n * This method is used to set the space availiable to render\n * the SimpleCell.\n *\n * @param {number} width The width of SimpleCell.\n * @param {number} height The height of SimpleCell.\n * @memberof AxisCell\n */\n setAvailableSpace (width = 0, height, padding, isOffset) {\n let labelConfig = {};\n const {\n orientation\n } = this.config();\n\n this.availableSpace({ width, height, padding });\n\n if (orientation === TOP || orientation === BOTTOM) {\n labelConfig = spaceSetter(this, { isOffset }).continous.x();\n } else {\n labelConfig = spaceSetter(this, { isOffset }).continous.y();\n }\n\n // Set config\n this.renderConfig({\n labels: labelConfig\n });\n this.setTickConfig();\n this.getTickSize();\n return this;\n }\n\n /**\n *\n *\n * @memberof SimpleAxis\n */\n setTickConfig () {\n return this;\n }\n\n getScaleValue (domainVal) {\n if (domainVal === null || domainVal === undefined) {\n return undefined;\n }\n return this.scale()(domainVal);\n }\n\n /**\n *\n *\n *\n * @memberof SimpleAxis\n */\n getTickSize () {\n return this.axis().tickSize();\n }\n\n /**\n * Gets the space occupied by the parts of an axis\n *\n * @return {Object} object with details about sizes of the axis.\n * @memberof SimpleAxis\n */\n getAxisDimensions (...params) {\n this.axisDimensions(computeAxisDimensions(this, ...params));\n return this.axisDimensions();\n }\n\n /**\n * Gets the space occupied by the axis\n *\n * @return {Object} object with details about size of the axis.\n * @memberof SimpleAxis\n */\n getLogicalSpace () {\n if (!this.logicalSpace()) {\n this.logicalSpace(calculateContinousSpace(this));\n this.logicalSpace();\n setOffset(this);\n }\n\n return this.logicalSpace();\n }\n\n /**\n * Returns the value from the domain when given a value from the range.\n * @param {number} value Value from the range.\n * @return {number} Value\n */\n invert (value) {\n return this.scale().invert(value);\n }\n\n /**\n * Gets the nearest range value from the given range values.\n * @param {number} v1 Start range value\n * @param {number} v2 End range value\n *\n * @return {Array} range values\n */\n getNearestRange (v1, v2) {\n return [v1, v2];\n }\n\n invertExtent (v1, v2) {\n return [this.invert(v1), this.invert(v2)];\n }\n\n getMinTickDifference () {\n return this.domain();\n }\n\n getFormattedTickValues (tickValues) {\n return tickValues;\n }\n\n /**\n * This method returns the width in pixels for one\n * unit along the axis. It is only applicable to band scale\n * and returns undefined for other scale type.\n *\n * @return {number} the width of one band along band scale axis\n * @memberof SimpleAxis\n */\n getUnitWidth () {\n return 0;\n }\n\n /**\n * This method returns an object that can be used to\n * reconstruct this instance.\n *\n * @return {Object} the serializable props of axis\n * @memberof SimpleAxis\n */\n serialize () {\n return {\n name: this.name,\n type: this.type,\n range: this.range(),\n config: this.config()\n };\n }\n\n /**\n * Returns the id of the axis.\n * @return {string} Unique identifier of the axis.\n */\n get id () {\n return this._id;\n }\n\n /**\n * This method is used to render the axis inside\n * the supplied svg container.\n *\n * @param {SVGElement} svg the svg element in which to render the path\n * @memberof SimpleAxis\n */\n /* istanbul ignore next */render () {\n if (this.mount()) {\n this.setTickConfig();\n renderAxis(this);\n }\n return this;\n }\n\n /**\n *\n *\n *\n * @memberof SimpleAxis\n */\n remove () {\n selectElement(this.mount()).remove();\n return this;\n }\n\n /**\n *\n *\n * @memberof SimpleAxis\n */\n unsubscribe () {\n return this;\n }\n\n /**\n *\n *\n *\n * @memberof SimpleAxis\n */\n isReverse () {\n const range = this.range();\n return range[0] > range[1];\n }\n\n /**\n *\n *\n *\n * @memberof SimpleAxis\n */\n getPixelToValueRatio () {\n const scale = this.scale();\n const range = scale.range();\n const domain = scale.domain();\n\n return Math.abs(range[1] - range[0]) / (domain[1] - domain[0]);\n }\n\n /**\n * Notifies when all animations/transitions of the axis are completed.\n *\n * @public\n * @return {Promise} Returns a promise to notify the animation completion.\n */\n animationDone () {\n return Promise.all(this._animationDonePromises);\n }\n\n registerAnimationDoneHook () {\n let resolveFn;\n const promise = new Promise((resolve) => {\n resolveFn = resolve;\n });\n this._animationDonePromises.push(promise);\n\n return () => {\n resolveFn();\n };\n }\n}\n\n","import { scaleMap } from '../../scale-creator';\n\nexport default class LinearInterpolator {\n\n createScale (config) {\n const {\n range\n } = config;\n const scaleFactory = scaleMap.linear;\n this._scale = scaleFactory().range(range);\n return this._scale;\n }\n\n getScaleValue (domainVal) {\n return this._scale(domainVal) + 0.5;\n }\n\n sanitizeDomain (domain) {\n if (domain.length && domain[0] === domain[1]) {\n domain = [0, +domain[0] * 2];\n }\n return domain;\n }\n}\n","import { scaleMap } from '../../scale-creator';\n\nexport default class LogInterpolator {\n\n createScale (config) {\n const {\n range,\n base\n } = config;\n const scaleFactory = scaleMap.log;\n this._scale = scaleFactory().range(range).base(base);\n return this._scale;\n }\n\n getScaleValue (domainVal) {\n if (domainVal <= 0) {\n return 1;\n }\n\n return this._scale(domainVal) + 0.5;\n }\n\n sanitizeDomain (domain) {\n if (domain[0] <= 0) {\n return [Math.max(1, domain[0]), Math.max(1, domain[1])];\n } return domain;\n }\n}\n","import { scaleMap } from '../../scale-creator';\n\nexport default class PowInterpolator {\n\n createScale (config) {\n const {\n range,\n exponent\n } = config;\n const scaleFactory = scaleMap.pow;\n this._scale = scaleFactory().range(range).exponent(exponent);\n return this._scale;\n }\n\n getScaleValue (domainVal) {\n return this._scale(domainVal) + 0.5;\n }\n\n sanitizeDomain (domain) {\n return domain;\n }\n}\n","import { getSmallestDiff } from 'muze-utils';\nimport SimpleAxis from './simple-axis';\nimport { BOTTOM, TOP, LEFT, RIGHT } from '../enums/axis-orientation';\nimport { spaceSetter } from './space-setter';\nimport { LINEAR, LOG, POW } from '../enums/scale-type';\nimport { LogInterpolator, PowInterpolator, LinearInterpolator } from './interpolators';\nimport {\n getNumberOfTicks,\n getValidDomain,\n setContinousAxisDomain\n} from './helper';\n\nexport const interpolatorMap = {\n [LOG]: LogInterpolator,\n [POW]: PowInterpolator,\n [LINEAR]: LinearInterpolator\n};\n\nexport default class ContinousAxis extends SimpleAxis {\n constructor (config, dependencies) {\n config.tickFormat = config.tickFormat || (val => val);\n super(config, dependencies);\n }\n /**\n *\n *\n *\n * @memberof SimpleAxis\n */\n createScale (config) {\n const {\n base,\n padding,\n interpolator,\n exponent\n } = config;\n const range = this.range();\n const InterpolatorCls = interpolatorMap[interpolator];\n\n this._interpolator = new InterpolatorCls();\n let scale = this._interpolator.createScale({\n padding,\n exponent,\n base,\n range\n });\n\n scale = scale.nice();\n return scale;\n }\n\n /**\n *\n *\n * @static\n *\n * @memberof ContinousAxis\n */\n static type () {\n return LINEAR;\n }\n\n getScaleValue (domainVal) {\n if (domainVal === null || domainVal === undefined) {\n return undefined;\n }\n return this._interpolator.getScaleValue(domainVal);\n }\n /**\n *\n *\n *\n * @memberof SimpleAxis\n */\n getTickSize () {\n const {\n showInnerTicks,\n showOuterTicks\n } = this.renderConfig();\n const axis = this.axis();\n axis.tickSizeInner(showInnerTicks === false ? 0 : 6);\n axis.tickSizeOuter(showOuterTicks === false ? 0 : 6);\n\n return axis.tickSize();\n }\n\n /**\n *\n *\n * @param {*} d\n *\n * @memberof SimpleAxis\n */\n domain (...domain) {\n if (domain.length) {\n const domainVal = this._interpolator.sanitizeDomain(getValidDomain(this, domain[0]));\n setContinousAxisDomain(this, domainVal);\n this.setAxisComponentDimensions();\n this.logicalSpace(null);\n return this;\n }\n return this._domain;\n }\n\n /**\n * This method is used to set the space availiable to render\n * the SimpleCell.\n *\n * @param {number} width The width of SimpleCell.\n * @param {number} height The height of SimpleCell.\n * @memberof AxisCell\n */\n setAvailableSpace (width = 0, height, padding, isOffset) {\n let labelConfig = {};\n const {\n orientation\n } = this.config();\n\n this.availableSpace({ width, height, padding });\n\n if (orientation === TOP || orientation === BOTTOM) {\n labelConfig = spaceSetter(this, { isOffset }).continous.x();\n } else {\n labelConfig = spaceSetter(this, { isOffset }).continous.y();\n }\n\n // Set config\n this.renderConfig({\n labels: labelConfig\n });\n this.setTickConfig();\n this.getTickSize();\n return this;\n }\n\n /**\n *\n *\n * @param {*} tickValues\n *\n * @memberof SimpleAxis\n */\n setTickConfig () {\n const {\n tickValues\n } = this.config();\n const {\n showInnerTicks\n } = this.renderConfig();\n const axis = this.axis();\n\n if (!showInnerTicks) {\n axis.tickValues([]);\n return this;\n }\n\n if (tickValues) {\n tickValues instanceof Array && this.axis().tickValues(tickValues);\n return this;\n }\n axis.tickValues(this.getTickValues());\n\n return this;\n }\n\n /**\n *\n *\n *\n * @memberof SimpleAxis\n */\n getTickValues () {\n let labelDim = 0;\n const {\n orientation,\n tickValues\n } = this.config();\n const range = this.range();\n const axis = this.axis();\n\n const availableSpace = Math.abs(range[0] - range[1]);\n\n const labelProps = this.axisComponentDimensions().largestTickDimensions;\n\n if (tickValues) {\n return axis.scale().ticks(tickValues);\n }\n labelDim = labelProps[orientation === BOTTOM || orientation === TOP ? 'width' : 'height'];\n\n return getNumberOfTicks(availableSpace, labelDim, axis, this);\n }\n\n getMinTickDifference () {\n return getSmallestDiff(this.config().tickValues);\n }\n\n /**\n * Sets a fixed baseline for the first ticks so that they can render effectively within\n * the given area\n *\n * @param {*} tickText\n * @param {*} config\n * @param {*} labelManager\n */\n setFixedBaseline (tickText) {\n const {\n orientation\n } = this.config();\n const {\n labels\n } = this.renderConfig();\n\n const {\n rotation\n } = labels;\n const axis = this.axis();\n const ticks = axis.scale().ticks();\n const { width, height } = this.axisComponentDimensions().allTickDimensions[0];\n axis.tickTransform((d) => {\n if (d === ticks[0]) {\n if ((orientation === LEFT || orientation === RIGHT)) {\n return `translate(0, -${(height) / 3}px)`;\n }\n if ((orientation === TOP || orientation === BOTTOM) && !rotation) {\n return `translate(${width / 2}px, ${0}px)`;\n }\n } return '';\n });\n return tickText;\n }\n\n}\n","import SimpleAxis from './simple-axis';\nimport { BAND } from '../enums/scale-type';\nimport { TOP, BOTTOM } from '../enums/axis-orientation';\nimport { calculateBandSpace, setOffset, getRotatedSpaces } from './helper';\nimport { spaceSetter } from './space-setter';\n\nexport default class BandAxis extends SimpleAxis {\n\n /**\n *\n *\n * @param {*} config axes configuration\n *\n * @memberof BandAxis\n */\n createScale (config) {\n return super.createScale(config);\n }\n\n /**\n *\n *\n * @static\n *\n * @memberof BandAxis\n */\n static type () {\n return BAND;\n }\n\n /**\n * This method is used to set the space availiable to render\n * the SimpleCell.\n *\n * @param {number} width The width of SimpleCell.\n * @param {number} height The height of SimpleCell.\n * @memberof AxisCell\n */\n setAvailableSpace (width = 0, height, padding, isOffset) {\n let labelConfig = {};\n const {\n orientation\n } = this.config();\n\n this.availableSpace({ width, height, padding });\n\n if (orientation === TOP || orientation === BOTTOM) {\n labelConfig = spaceSetter(this, { isOffset }).band.x();\n } else {\n labelConfig = spaceSetter(this, { isOffset }).band.y();\n }\n\n // Set config\n this.renderConfig({\n labels: labelConfig\n });\n this.setTickConfig();\n return this;\n }\n\n /**\n *\n *\n *\n * @memberof BandAxis\n */\n setTickConfig () {\n let smartTicks = '';\n let smartlabel;\n const domain = this.domain();\n const { labelManager } = this._dependencies;\n const { tickValues, padding } = this.config();\n const { labels } = this.renderConfig();\n const { height: availHeight, width: availWidth, noWrap } = this.maxTickSpaces();\n const { width, height } = getRotatedSpaces(labels.rotation, availWidth, availHeight);\n\n tickValues && this.axis().tickValues(tickValues);\n smartTicks = tickValues || domain;\n\n // set the style on the shared label manager instance\n labelManager.setStyle(this._tickLabelStyle);\n\n // Update padding between plots\n if (typeof padding === 'number' && padding >= 0 && padding <= 1) {\n this.scale().padding(padding);\n }\n\n if (domain && domain.length) {\n const values = tickValues || domain;\n const tickFormatter = this._tickFormatter(values);\n smartTicks = values.map((d, i) => {\n labelManager.useEllipsesOnOverflow(true);\n\n smartlabel = labelManager.getSmartText(tickFormatter(d, i), width, height, noWrap);\n return labelManager.constructor.textToLines(smartlabel);\n });\n }\n this.smartTicks(smartTicks);\n return this;\n }\n\n /**\n * Gets the space occupied by the axis\n *\n * @return {Object} object with details about size of the axis.\n * @memberof SimpleAxis\n */\n getLogicalSpace () {\n if (!this.logicalSpace()) {\n this.logicalSpace(calculateBandSpace(this));\n setOffset(this);\n this.logicalSpace();\n }\n return this.logicalSpace();\n }\n\n /**\n *\n *\n * @memberof BandAxis\n */\n getTickValues () {\n return this.axis().scale().domain();\n }\n\n sanitizeTickFormatter (value) {\n const { tickFormat } = value;\n\n if (tickFormat) {\n return ticks => (val, i) => tickFormat(val, val, i, ticks);\n }\n return () => val => this.valueParser()(val);\n }\n\n /**\n *\n *\n *\n * @memberof BandAxis\n */\n getUnitWidth () {\n return this.scale().bandwidth();\n }\n\n /**\n *\n *\n *\n * @memberof SimpleAxis\n */\n getTickSize () {\n const {\n showInnerTicks,\n showOuterTicks\n } = this.renderConfig();\n const axis = this.axis();\n\n axis.tickSizeInner(showInnerTicks ? 6 : 0);\n axis.tickSizeOuter(showOuterTicks ? 6 : 0);\n return axis.tickSize();\n }\n\n invertExtent (v1, v2) {\n return this.scale().invertExtent(v1, v2);\n }\n\n /**\n * Gets the nearest range value from the given range values.\n * @param {number} v1 Start range value\n * @param {number} v2 End range value\n * @return {Array} range values\n */\n getNearestRange (v1, v2) {\n const scale = this.scale();\n const range = scale.range();\n const reverse = range[0] > range[1];\n\n const extent = this.invertExtent(v1, v2);\n const p1 = scale(reverse ? extent[extent.length - 1] : extent[0]);\n const p2 = scale(reverse ? extent[0] : extent[extent.length - 1]) + scale.bandwidth();\n return [p1, p2];\n }\n}\n","import { getSmallestDiff } from 'muze-utils';\nimport SimpleAxis from './simple-axis';\nimport { TIME } from '../enums/scale-type';\nimport { axisOrientationMap, BOTTOM, TOP } from '../enums/axis-orientation';\nimport { calculateBandSpace, getRotatedSpaces, getValidDomain, setContinousAxisDomain, setOffset } from './helper';\nimport { spaceSetter } from './space-setter';\n\n/**\n *\n *\n * @export\n * @class TimeAxis\n * @extends {SimpleAxis}\n */\nexport default class TimeAxis extends SimpleAxis {\n\n constructor (...params) {\n super(...params);\n this._minDiff = Infinity;\n }\n\n /**\n *\n *\n * @param {*} range\n *\n * @memberof TimeAxis\n */\n createScale (range) {\n let scale = super.createScale(range);\n\n scale = scale.nice();\n return scale;\n }\n\n /**\n *\n *\n * @static\n *\n * @memberof TimeAxis\n */\n static type () {\n return TIME;\n }\n\n /**\n *\n *\n * @returns\n * @memberof SimpleAxis\n */\n createAxis (config) {\n const { orientation } = config;\n const axisClass = axisOrientationMap[orientation];\n\n if (axisClass) {\n const axis = axisClass(this.scale());\n return axis;\n }\n return null;\n }\n\n sanitizeTickFormatter (value) {\n const { tickFormat } = value;\n\n if (tickFormat) {\n return (ticks) => {\n const rawTicks = ticks.map(t => t.getTime());\n return (val, i) => tickFormat(val, val.getTime(), i, rawTicks);\n };\n }\n return () => text => this.scale().tickFormat()(text);\n }\n\n /**\n *\n *\n *\n * @memberof SimpleAxis\n */\n getTickSize () {\n const {\n showInnerTicks,\n showOuterTicks\n } = this.renderConfig();\n const axis = this.axis();\n axis.tickSizeInner(showInnerTicks === false ? 0 : 6);\n axis.tickSizeOuter(showOuterTicks === false ? 0 : 6);\n return super.getTickSize();\n }\n\n /**\n *\n *\n *\n * @memberof TimeAxis\n */\n getTickValues () {\n return this.config().tickValues || this.scale().ticks();\n }\n\n /**\n *\n *\n * @param {*} diff\n *\n * @memberof TimeAxis\n */\n minDiff (diff) {\n this._minDiff = Math.min(this._minDiff, diff);\n return this;\n }\n\n /**\n *\n *\n * @param {*} d\n *\n * @memberof SimpleAxis\n */\n domain (...domain) {\n if (domain.length) {\n const domainValue = getValidDomain(this, domain[0]);\n setContinousAxisDomain(this, domainValue);\n this.setAxisComponentDimensions();\n this.logicalSpace(null);\n return this;\n }\n return this._domain;\n }\n\n /**\n * Gets the space occupied by the axis\n *\n * @return {Object} object with details about size of the axis.\n * @memberof SimpleAxis\n */\n getLogicalSpace () {\n if (!this.logicalSpace()) {\n this.logicalSpace(calculateBandSpace(this));\n this.logicalSpace();\n setOffset(this);\n }\n return this.logicalSpace();\n }\n\n getMinTickDifference () {\n return getSmallestDiff(this.config().tickValues);\n }\n\n /**\n * This method is used to set the space availiable to render\n * the SimpleCell.\n *\n * @param {number} width The width of SimpleCell.\n * @param {number} height The height of SimpleCell.\n * @memberof AxisCell\n */\n setAvailableSpace (width = 0, height, padding, isOffset) {\n let labelConfig = {};\n const {\n orientation\n } = this.config();\n\n this.availableSpace({ width, height, padding });\n\n if (orientation === TOP || orientation === BOTTOM) {\n labelConfig = spaceSetter(this, { isOffset }).time.x();\n } else {\n labelConfig = spaceSetter(this, { isOffset }).time.y();\n }\n\n // Set config\n this.renderConfig({\n labels: labelConfig\n });\n this.setTickConfig();\n this.getTickSize();\n return this;\n }\n\n /**\n *\n *\n * @returns\n * @memberof BandAxis\n */\n setTickConfig () {\n let smartTicks;\n let smartlabel;\n const { tickValues } = this.config();\n const { labels } = this.renderConfig();\n const { height: availHeight, width: availWidth, noWrap } = this.maxTickSpaces();\n const { labelManager } = this._dependencies;\n const domain = this.getTickValues();\n\n tickValues && this.axis().tickValues(tickValues);\n\n const { width, height } = getRotatedSpaces(labels.rotation, availWidth, availHeight);\n\n smartTicks = tickValues || domain;\n\n // set the style on the shared label manager instance\n labelManager.setStyle(this._tickLabelStyle);\n\n if (domain && domain.length) {\n const values = tickValues || domain;\n const tickFormatter = this._tickFormatter(values);\n smartTicks = values.map((d, i) => {\n labelManager.useEllipsesOnOverflow(true);\n\n smartlabel = labelManager.getSmartText(tickFormatter(d, i), width, height, noWrap);\n return labelManager.constructor.textToLines(smartlabel);\n });\n }\n this.smartTicks(smartTicks);\n return this;\n }\n}\n","export const x11Colors = {\n Pink: { hex: 'ffc0cb', rgb: '255,192,203' },\n LightPink: { hex: 'ffb6c1', rgb: '255,182,193' },\n HotPink: { hex: 'ff69b4', rgb: '255,105,180' },\n DeepPink: { hex: 'ff1493', rgb: '255,20,147' },\n PaleVioletRed: { hex: 'db7093', rgb: '219,112,147' },\n MediumVioletRed: { hex: 'c71585', rgb: '199,21,133' },\n LightSalmon: { hex: 'ffa07a', rgb: '255,160,122' },\n Salmon: { hex: 'fa8072', rgb: '250,128,114' },\n DarkSalmon: { hex: 'e9967a', rgb: '233,150,122' },\n LightCoral: { hex: 'f08080', rgb: '240,128,128' },\n IndianRed: { hex: 'cd5c5c', rgb: '205,92,92' },\n Crimson: { hex: 'dc143c', rgb: '220,20,60' },\n FireBrick: { hex: 'b22222', rgb: '178,34,34' },\n DarkRed: { hex: '8b0000', rgb: '139,0,0' },\n Red: { hex: 'ff0000', rgb: '255,0,0' },\n OrangeRed: { hex: 'ff4500', rgb: '255,69,0' },\n Tomato: { hex: 'ff6347', rgb: '255,99,71' },\n Coral: { hex: 'ff7f50', rgb: '255,127,80' },\n DarkOrange: { hex: 'ff8c00', rgb: '255,140,0' },\n Orange: { hex: 'ffa500', rgb: '255,165,0' },\n Gold: { hex: 'ffd700', rgb: '255,215,0' },\n Yellow: { hex: 'ffff00', rgb: '255,255,0' },\n LightYellow: { hex: 'ffffe0', rgb: '255,255,224' },\n LemonChiffon: { hex: 'fffacd', rgb: '255,250,205' },\n LightGoldenrodYellow: { hex: 'fafad2', rgb: '250,250,210' },\n PapayaWhip: { hex: 'ffefd5', rgb: '255,239,213' },\n Moccasin: { hex: 'ffe4b5', rgb: '255,228,181' },\n PeachPuff: { hex: 'ffdab9', rgb: '255,218,185' },\n PaleGoldenrod: { hex: 'eee8aa', rgb: '238,232,170' },\n Khaki: { hex: 'f0e68c', rgb: '240,230,140' },\n DarkKhaki: { hex: 'bdb76b', rgb: '189,183,107' },\n Cornsilk: { hex: 'fff8dc', rgb: '255,248,220' },\n BlanchedAlmond: { hex: 'ffebcd', rgb: '255,235,205' },\n Bisque: { hex: 'ffe4c4', rgb: '255,228,196' },\n NavajoWhite: { hex: 'ffdead', rgb: '255,222,173' },\n Wheat: { hex: 'f5deb3', rgb: '245,222,179' },\n BurlyWood: { hex: 'deb887', rgb: '222,184,135' },\n Tan: { hex: 'd2b48c', rgb: '210,180,140' },\n RosyBrown: { hex: 'bc8f8f', rgb: '188,143,143' },\n SandyBrown: { hex: 'f4a460', rgb: '244,164,96' },\n Goldenrod: { hex: 'daa520', rgb: '218,165,32' },\n DarkGoldenrod: { hex: 'b8860b', rgb: '184,134,11' },\n Peru: { hex: 'cd853f', rgb: '205,133,63' },\n Chocolate: { hex: 'd2691e', rgb: '210,105,30' },\n SaddleBrown: { hex: '8b4513', rgb: '139,69,19' },\n Sienna: { hex: 'a0522d', rgb: '160,82,45' },\n Brown: { hex: 'a52a2a', rgb: '165,42,42' },\n Maroon: { hex: '800000', rgb: '128,0,0' },\n DarkOliveGreen: { hex: '556b2f', rgb: '85,107,47' },\n Olive: { hex: '808000', rgb: '128,128,0' },\n OliveDrab: { hex: '6b8e23', rgb: '107,142,35' },\n YellowGreen: { hex: '9acd32', rgb: '154,205,50' },\n LimeGreen: { hex: '32cd32', rgb: '50,205,50' },\n Lime: { hex: '00ff00', rgb: '0,255,0' },\n LawnGreen: { hex: '7cfc00', rgb: '124,252,0' },\n Chartreuse: { hex: '7fff00', rgb: '127,255,0' },\n GreenYellow: { hex: 'adff2f', rgb: '173,255,47' },\n SpringGreen: { hex: '00ff7f', rgb: '0,255,127' },\n MediumSpringGreen: { hex: '00fa9a', rgb: '0,250,154' },\n LightGreen: { hex: '90ee90', rgb: '144,238,144' },\n PaleGreen: { hex: '98fb98', rgb: '152,251,152' },\n DarkSeaGreen: { hex: '8fbc8f', rgb: '143,188,143' },\n MediumSeaGreen: { hex: '3cb371', rgb: '60,179,113' },\n SeaGreen: { hex: '2e8b57', rgb: '46,139,87' },\n ForestGreen: { hex: '228b22', rgb: '34,139,34' },\n Green: { hex: '008000', rgb: '0,128,0' },\n DarkGreen: { hex: '006400', rgb: '0,100,0' },\n MediumAquamarine: { hex: '66cdaa', rgb: '102,205,170' },\n Aqua: { hex: '00ffff', rgb: '0,255,255' },\n Cyan: { hex: '00ffff', rgb: '0,255,255' },\n LightCyan: { hex: 'e0ffff', rgb: '224,255,255' },\n PaleTurquoise: { hex: 'afeeee', rgb: '175,238,238' },\n Aquamarine: { hex: '7fffd4', rgb: '127,255,212' },\n Turquoise: { hex: '40e0d0', rgb: '64,224,208' },\n MediumTurquoise: { hex: '48d1cc', rgb: '72,209,204' },\n DarkTurquoise: { hex: '00ced1', rgb: '0,206,209' },\n LightSeaGreen: { hex: '20b2aa', rgb: '32,178,170' },\n CadetBlue: { hex: '5f9ea0', rgb: '95,158,160' },\n DarkCyan: { hex: '008b8b', rgb: '0,139,139' },\n Teal: { hex: '008080', rgb: '0,128,128' },\n LightSteelBlue: { hex: 'b0c4de', rgb: '176,196,222' },\n PowderBlue: { hex: 'b0e0e6', rgb: '176,224,230' },\n LightBlue: { hex: 'add8e6', rgb: '173,216,230' },\n SkyBlue: { hex: '87ceeb', rgb: '135,206,235' },\n LightSkyBlue: { hex: '87cefa', rgb: '135,206,250' },\n DeepSkyBlue: { hex: '00bfff', rgb: '0,191,255' },\n DodgerBlue: { hex: '1e90ff', rgb: '30,144,255' },\n CornflowerBlue: { hex: '6495ed', rgb: '100,149,237' },\n SteelBlue: { hex: '4682b4', rgb: '70,130,180' },\n RoyalBlue: { hex: '4169e1', rgb: '65,105,225' },\n Blue: { hex: '0000ff', rgb: '0,0,255' },\n MediumBlue: { hex: '0000cd', rgb: '0,0,205' },\n DarkBlue: { hex: '00008b', rgb: '0,0,139' },\n Navy: { hex: '000080', rgb: '0,0,128' },\n MidnightBlue: { hex: '191970', rgb: '25,25,112' },\n Lavender: { hex: 'e6e6fa', rgb: '230,230,250' },\n Thistle: { hex: 'd8bfd8', rgb: '216,191,216' },\n Plum: { hex: 'dda0dd', rgb: '221,160,221' },\n Violet: { hex: 'ee82ee', rgb: '238,130,238' },\n Orchid: { hex: 'da70d6', rgb: '218,112,214' },\n Fuchsia: { hex: 'ff00ff', rgb: '255,0,255' },\n Magenta: { hex: 'ff00ff', rgb: '255,0,255' },\n MediumOrchid: { hex: 'ba55d3', rgb: '186,85,211' },\n MediumPurple: { hex: '9370db', rgb: '147,112,219' },\n BlueViolet: { hex: '8a2be2', rgb: '138,43,226' },\n DarkViolet: { hex: '9400d3', rgb: '148,0,211' },\n DarkOrchid: { hex: '9932cc', rgb: '153,50,204' },\n DarkMagenta: { hex: '8b008b', rgb: '139,0,139' },\n Purple: { hex: '800080', rgb: '128,0,128' },\n Indigo: { hex: '4b0082', rgb: '75,0,130' },\n DarkSlateBlue: { hex: '483d8b', rgb: '72,61,139' },\n SlateBlue: { hex: '6a5acd', rgb: '106,90,205' },\n MediumSlateBlue: { hex: '7b68ee', rgb: '123,104,238' },\n White: { hex: 'ffffff', rgb: '255,255,255' },\n Snow: { hex: 'fffafa', rgb: '255,250,250' },\n Honeydew: { hex: 'f0fff0', rgb: '240,255,240' },\n MintCream: { hex: 'f5fffa', rgb: '245,255,250' },\n Azure: { hex: 'f0ffff', rgb: '240,255,255' },\n AliceBlue: { hex: 'f0f8ff', rgb: '240,248,255' },\n GhostWhite: { hex: 'f8f8ff', rgb: '248,248,255' },\n WhiteSmoke: { hex: 'f5f5f5', rgb: '245,245,245' },\n Seashell: { hex: 'fff5ee', rgb: '255,245,238' },\n Beige: { hex: 'f5f5dc', rgb: '245,245,220' },\n OldLace: { hex: 'fdf5e6', rgb: '253,245,230' },\n FloralWhite: { hex: 'fffaf0', rgb: '255,250,240' },\n Ivory: { hex: 'fffff0', rgb: '255,255,240' },\n AntiqueWhite: { hex: 'faebd7', rgb: '250,235,215' },\n Linen: { hex: 'faf0e6', rgb: '250,240,230' },\n LavenderBlush: { hex: 'fff0f5', rgb: '255,240,245' },\n MistyRose: { hex: 'ffe4e1', rgb: '255,228,225' },\n Gainsboro: { hex: 'dcdcdc', rgb: '220,220,220' },\n LightGray: { hex: 'd3d3d3', rgb: '211,211,211' },\n Silver: { hex: 'c0c0c0', rgb: '192,192,192' },\n DarkGrey: { hex: 'a9a9a9', rgb: '169,169,169' },\n Grey: { hex: '808080', rgb: '128,128,128' },\n DimGrey: { hex: '696969', rgb: '105,105,105' },\n LightSlateGrey: { hex: '778899', rgb: '119,136,153' },\n SlateGrey: { hex: '708090', rgb: '112,128,144' },\n DarkSlateGrey: { hex: '2f4f4f', rgb: '47,79,79' },\n Black: { hex: '000000', rgb: '0,0,0' }\n};\n","import {\n LINEAR\n} from '../enums/constants';\n/**\n * Set of default colors\n */\nexport const palette = [\n '#086bb6',\n '#f37d45',\n '#f5ce02',\n '#67bda0',\n '#c54e4e',\n '#ae70af'\n];\n\nexport const DEFAULT_GRADIENT_COLOR = '#eaeaea';\n\nexport const DEFAULT_CONFIG = {\n range: palette,\n value: palette[0],\n step: false,\n stops: 5,\n type: LINEAR\n};\n","import { mergeRecursive, detectColor, hexToHsv, rgbToHsv } from 'muze-utils';\nimport { x11Colors } from './color-maps';\nimport { palette, DEFAULT_GRADIENT_COLOR } from './defaults';\nimport { LINEAR, RGB, HEX, HSL, HSLA } from '../enums/constants';\n\nexport const getHslString = hslArr => `hsla(${hslArr[0] * 360},${hslArr[1] * 100}%,${hslArr[2] * 100}%,\\\n${hslArr[3] || 1})`;\n\nexport const convertToXllString = baseString => (baseString.split(' ') || [])\n .reduce((x, e) => `${x}${e.charAt(0).toUpperCase()}${e.slice(1)}`, '');\n\nexport const getActualHslColor = (e, paletteColor) => {\n let color = '';\n if (typeof e === 'string') {\n e = e.replace(/ /g, '');\n e = e.toLowerCase();\n if (detectColor(e) === HSL || detectColor(e) === HSLA) {\n color = e.match(/(\\d+(\\.\\d+)?)/g);\n color = [color[0] / 360, color[1] / 100, color[2] / 100, color[3] || 1];\n } else if (detectColor(e) === HEX) {\n color = hexToHsv(e);\n } else if (detectColor(e) === RGB) {\n const col = e.substring(e.indexOf('(') + 1, e.lastIndexOf(')')).split(/,\\s*/);\n color = rgbToHsv(...col);\n } else if (x11Colors[convertToXllString(e)]) {\n color = rgbToHsv(...x11Colors[convertToXllString(e)].rgb.split(','));\n }\n } else if (!(e instanceof Array)) {\n color = rgbToHsv(paletteColor);\n } else {\n color = e;\n }\n return color;\n};\n\nexport const PROPS = {\n config: {\n sanitization: (context, config) => {\n const defCon = mergeRecursive({}, context.constructor.defaultConfig());\n if (config.type === LINEAR) {\n config.range = config.range || [defCon.range[0]];\n config.range = config.range.length > 1 ? config.range : [DEFAULT_GRADIENT_COLOR, ...config.range];\n }\n const oldConfig = mergeRecursive(defCon, context.config());\n const newConfig = mergeRecursive(oldConfig, config);\n\n if (newConfig.range instanceof Array) {\n newConfig.range = newConfig.range.map((e, i) => getActualHslColor(e, palette[i]));\n newConfig.stops = config.stops || newConfig.range.length;\n }\n newConfig.value = getActualHslColor(newConfig.value, newConfig.value);\n return newConfig;\n }\n },\n domain: {},\n scale: {},\n uniqueValues: {}\n};\n","import { InvalidAwareTypes } from 'muze-utils';\n\nexport const treatNullMeasures = (domainVal, scaledVal, minDomainScaledVal) => {\n if (domainVal instanceof InvalidAwareTypes) {\n return minDomainScaledVal;\n }\n return scaledVal;\n};\n","import { numberInterpolator, piecewiseInterpolator, hslInterpolator } from 'muze-utils';\nimport { CONTINOUS, DISCRETE } from '../enums/constants';\nimport { LINEAR, SEQUENTIAL, ORDINAL, QUANTILE } from '../enums/scale-type';\nimport { getHslString } from './props';\nimport { treatNullMeasures } from '../helper';\n\nconst getStops = (domain, stops) => {\n let newStops = [];\n\n if (stops instanceof Array) {\n newStops = stops.slice().sort();\n newStops = [...new Set([domain[0], ...stops, domain[1]])].sort();\n } else {\n const interpolator = numberInterpolator()(...domain);\n for (let i = 0; i <= stops; i++) {\n newStops[i] = interpolator(i / stops);\n }\n }\n\n if (newStops[0] < domain[0]) {\n newStops.shift();\n }\n return { domain, newStops };\n};\n\nconst rangeStops = (newStopsLength, range) => {\n let newRange = [];\n const maxRangeLength = Math.min(range.length, 18);\n\n if (newStopsLength > maxRangeLength) {\n const interpolator = piecewiseInterpolator()(hslInterpolator(), range.map(e => getHslString(e)));\n for (let i = 0; i < newStopsLength; i++) {\n newRange[i] = interpolator(i / (newStopsLength - 1));\n }\n } else {\n newRange = range.slice(0, newStopsLength);\n }\n return { newRange };\n};\n\n/**\n*\n*\n* @param {*} domain\n*\n*/\nconst indexedDomain = (domain) => {\n const uniqueVals = domain;\n const retDomain = domain.map((d, i) => (i) / (domain.length - 1));\n return { domain: retDomain, uniqueVals, scaleDomain: [0, 1] };\n};\n\n/**\n *\n *\n * @param {*} domain\n *\n */\nconst indexedDomainMeasure = (domain, stops, range) => {\n const uniqueVals = domain;\n return { domain, uniqueVals, scaleDomain: [0, 1], range };\n};\n\n/**\n *\n *\n * @param {*} domain\n *\n */\nconst normalDomain = (domain, stops, range) => {\n const uniqueVals = domain;\n return { uniqueVals, domain, nice: true, range };\n};\n\n/**\n *\n *\n * @param {*} domain\n * @param {*} stops\n *\n */\nconst steppedDomain = (domain, stops, range) => {\n const { domain: uniqueVals, newStops } = getStops(domain, stops);\n const { newRange } = rangeStops(newStops.length - 1, range);\n\n return { uniqueVals, domain: newStops, nice: true, range: newRange };\n};\n\nconst continousSteppedDomain = (domain, stops, range) => {\n const { domain: uniqueVals, newStops } = getStops(domain, range.length - 1);\n const hslRange = range.map(e => getHslString(e));\n return { uniqueVals, domain: newStops, nice: true, range: hslRange };\n};\n\n/**\n *\n *\n * @param {*} domainValue\n * @param {*} scale\n * @param {*} domain\n * @param {*} uniqueVals\n *\n */\nconst uniqueRange = (domainValue, scale, domain, uniqueVals) => {\n const index = uniqueVals.indexOf(domainValue);\n const numVal = domain[index];\n return scale(numVal);\n};\n\n/**\n *\n *\n * @param {*} domainValue\n * @param {*} scale\n * @param {*} domain\n *\n */\nconst indexedRange = (domainValue, scale, domain) => {\n const numVal = (domainValue - domain[0]) / (domain[domain.length - 1] - domain[0]);\n\n return treatNullMeasures(domainValue, scale(numVal), scale(0));\n};\n\n/**\n *\n *\n * @param {*} domainValue\n * @param {*} scale\n */\nconst normalRange = (domainValue, scale, domain) => treatNullMeasures(domainValue, scale(domainValue),\n scale(domain[0]));\n\n/**\n *\n *\n * @param {*} stops\n */\nconst strategies = () => ({\n [`${CONTINOUS}-${CONTINOUS}-${SEQUENTIAL}`]: {\n scale: SEQUENTIAL,\n domainRange: () => indexedDomainMeasure,\n value: () => indexedRange\n },\n [`${CONTINOUS}-${DISCRETE}-${SEQUENTIAL}`]: {\n scale: SEQUENTIAL,\n domainRange: () => indexedDomainMeasure,\n value: () => indexedRange\n },\n [`${DISCRETE}-${DISCRETE}-${SEQUENTIAL}`]: {\n scale: SEQUENTIAL,\n domainRange: () => indexedDomain,\n value: () => uniqueRange\n },\n [`${DISCRETE}-${DISCRETE}-${ORDINAL}`]: {\n scale: ORDINAL,\n domainRange: () => normalDomain,\n value: () => normalRange\n },\n [`${CONTINOUS}-${CONTINOUS}-${ORDINAL}`]: {\n scale: LINEAR,\n domainRange: () => continousSteppedDomain,\n value: () => normalRange\n },\n [`${CONTINOUS}-${DISCRETE}-${ORDINAL}`]: {\n scale: QUANTILE,\n domainRange: () => steppedDomain,\n value: () => normalRange\n\n }\n});\n\n/**\n *\n *\n * @param {*} domainType\n * @param {*} rangeType\n * @param {*} schemeType\n * @param {*} stops\n */\nexport const strategyGetter = (domainType, rangeType, schemeType, stops) =>\n strategies(stops)[`${domainType}-${rangeType}-${schemeType || ''}`];\n","/**\n * @module Axis\n * This file declares a class that is used to render an axis to add meaning to\n * plots.\n */\nimport { getUniqueId, generateGetterSetters, rgbToHsv } from 'muze-utils';\nimport { createScale, getScheme, getSchemeType } from '../scale-creator';\nimport { CONTINOUS, DISCRETE, COLOR } from '../enums/constants';\nimport { strategyGetter } from './color-strategy';\nimport { DEFAULT_CONFIG } from './defaults';\nimport { PROPS, getHslString } from './props';\n\n/**\n* This class is used to instantiate a SimpleAxis.\n* @class SimpleAxis\n*/\nexport default class ColorAxis {\n\n /**\n * Creates an instance of SimpleAxis.\n * @param {Object} config input parameters.\n * @param {Object | undefined} params.range Type of color range.\n * @param {string} params.name the label to show on axis.\n * @param {string} params.type The type of scale to handle.\n * @memberof ColorAxis\n */\n constructor (config) {\n generateGetterSetters(this, PROPS);\n this.config(config);\n\n this._domainType = this._config.type === 'linear' ? CONTINOUS : DISCRETE;\n this._rangeType = (this._config.type === 'linear' && !this._config.step) ? CONTINOUS : DISCRETE;\n\n this._schemeType = getSchemeType(this._config.range);\n\n this._colorStrategy = this.setColorStrategy(this._domainType, this._rangeType, this._schemeType);\n this._scale = this.createScale(this._colorStrategy);\n\n this._id = getUniqueId();\n\n this.updateDomain(config.domain);\n }\n\n /**\n *\n *\n * @static\n *\n * @memberof ColorAxis\n */\n static defaultConfig () {\n return DEFAULT_CONFIG;\n }\n\n /**\n *\n *\n * @static\n *\n * @memberof ColorAxis\n */\n static type () {\n return COLOR;\n }\n\n /**\n *\n *\n * @param {*} colorStrategy\n *\n * @memberof ColorAxis\n */\n createScale (colorStrategy) {\n const { range } = this.config();\n if (range && typeof (range) === 'string') {\n return getScheme(range);\n }\n return createScale({\n type: colorStrategy.scale,\n range\n });\n }\n\n /**\n *\n *\n * @param {*} domainType\n * @param {*} rangeType\n * @param {*} schemeType\n *\n * @memberof ColorAxis\n */\n setColorStrategy (domainType, rangeType, schemeType) {\n const { stops } = this.config();\n\n return strategyGetter(domainType, rangeType, schemeType, stops);\n }\n\n /**\n *\n *\n * @param {*} domainVal\n *\n * @memberof ColorAxis\n */\n getHslString (hslColorArray) {\n return getHslString(hslColorArray);\n }\n /**\n *\n *\n * @param {*} domainVal\n *\n * @memberof ColorAxis\n */\n getColor (domainVal) {\n return this.getHslString(this.getRawColor(domainVal));\n }\n /**\n *\n *\n * @param {*} domainVal\n *\n * @memberof ColorAxis\n */\n getRawColor (domainVal) {\n if (this.domain() && domainVal !== undefined) {\n const scale = this.scale();\n const range = scale.range ? scale.range() : null;\n const color = this._colorStrategy.value(range)(domainVal, scale, this.domain(), this.uniqueValues());\n if (color) {\n if (typeof color === 'string') {\n const col = color.substring(color.indexOf('(') + 1, color.lastIndexOf(')')).split(/,\\s*/);\n return rgbToHsv(...col);\n }\n return [...color];\n }\n }\n return [...this.config().value];\n }\n\n /**\n *\n *\n * @param {*} [domain=[]]\n *\n * @memberof ColorAxis\n */\n updateDomain (domain = []) {\n if (domain.length) {\n const scale = this.scale();\n const range = scale.range ? scale.range() : null;\n const domainRangeFn = this._colorStrategy.domainRange();\n const scaleInfo = domainRangeFn(domain, this.config().stops, range);\n\n this.domain(scaleInfo.domain);\n scaleInfo.range && this.scale().range(scaleInfo.range);\n this.uniqueValues(scaleInfo.uniqueVals);\n this.scale().domain(scaleInfo.scaleDomain || this.domain());\n }\n return this;\n }\n\n /**\n * This method returns an object that can be used to\n * reconstruct this instance.\n *\n * @return {Object} the serializable props of axis\n * @memberof ShapeAxis\n */\n serialize () {\n return {\n type: this.constructor.type(),\n scale: this.scale(),\n domain: this.domain(),\n config: this.config()\n };\n }\n\n transformColor (color, transformationArr) {\n const h = color[0] * 360;\n const s = color[1] * 100;\n const l = color[2] * 100;\n const a = color[3] || 1;\n const newH = h + transformationArr[0];\n const newS = s + transformationArr[1];\n const newL = l + transformationArr[2];\n const newA = a + transformationArr[3] || 0;\n\n return { color: `hsla(${newH},${newS}%,${newL}%,${newA})`, hsla: [newH / 360, newS / 100, newL / 100, newA] };\n }\n\n /**\n * Returns the id of the axis.\n * @return {string} Unique identifier of the axis.\n */\n id () {\n return this._id;\n }\n\n}\n","export const DEFAULT_CONFIG = {\n value: 36,\n range: [36, 1000]\n};\n","import { numberInterpolator, piecewiseInterpolator } from 'muze-utils';\nimport { CONTINOUS, DISCRETE } from '../enums/constants';\nimport { LINEAR, THRESHOLD } from '../enums/scale-type';\nimport { treatNullMeasures } from '../helper';\n\n/**\n *\n *\n * @param {*} domain\n *\n */\nconst indexedDomain = (domain) => {\n const uniqueVals = domain;\n const retDomain = domain.map((d, i) => (i) / (domain.length - 1));\n return { domain: retDomain, uniqueVals, scaleDomain: [0, 1] };\n};\n\n/**\n *\n *\n * @param {*} domain\n *\n */\nconst normalDomain = (domain) => {\n const uniqueVals = domain;\n return { uniqueVals, domain };\n};\n\n/**\n *\n *\n * @param {*} domain\n * @param {*} intervals\n *\n */\nconst steppedDomain = (domain, intervals) => {\n let newIntervals = [];\n if (intervals instanceof Array) {\n newIntervals = intervals.slice().sort();\n } else {\n const interpolator = numberInterpolator()(...domain);\n for (let i = 0; i < intervals; i++) {\n newIntervals[i] = interpolator(i / (intervals - 1));\n }\n }\n if (newIntervals[0] < domain[0]) {\n newIntervals.shift();\n }\n const retDomain = newIntervals;\n return { uniqueVals: newIntervals, domain: retDomain, nice: true };\n};\n\n/**\n *\n *\n * @param {*} domainValue\n * @param {*} scale\n * @param {*} domain\n * @param {*} uniqueVals\n *\n */\nconst discreteRange = (domainValue, scale, domain) => {\n const numVal = (domainValue - domain[0]) / (domain[domain.length - 1] - domain[0]);\n const interpolator = numberInterpolator()(...scale.range());\n return treatNullMeasures(domainValue, interpolator(numVal), interpolator(domain[0]));\n};\n\n/**\n *\n *\n * @param {*} domainValue\n * @param {*} scale\n * @param {*} domain\n *\n */\nconst pieceWiseRange = (domainValue, scale, domain, uniqueVals) => {\n const index = uniqueVals.indexOf(domainValue);\n const numVal = domain[index];\n const fn = piecewiseInterpolator()(numberInterpolator(), [...scale.range()]);\n return fn(numVal);\n};\n\n/**\n *\n *\n * @param {*} domainValue\n * @param {*} scale\n */\nconst normalRange = (domainValue, scale, domain) =>\n treatNullMeasures(domainValue, scale(domainValue), scale(domain[0]));\n\n/**\n *\n *\n * @param {*} intervals\n */\nconst strategies = {\n [`${DISCRETE}-${CONTINOUS}`]: {\n scale: LINEAR,\n domain: indexedDomain,\n range: pieceWiseRange\n },\n [`${CONTINOUS}-${CONTINOUS}`]: {\n scale: LINEAR,\n domain: normalDomain,\n range: normalRange\n },\n [`${CONTINOUS}-${DISCRETE}`]: {\n scale: THRESHOLD,\n domain: steppedDomain,\n range: discreteRange\n }\n};\n\n/**\n *\n *\n * @param {*} domainType\n * @param {*} rangeType\n * @param {*} schemeType\n * @param {*} intervals\n */\nexport const strategyGetter = (domainType, rangeType) =>\n strategies[`${domainType}-${rangeType}`];\n","export const PROPS = {\n config: {},\n domain: {\n sanitization: (context, value) => {\n context.scale().domain(value);\n return value;\n }\n },\n range: {},\n scale: {},\n uniqueValues: {}\n};\n","/**\n * @module Axis\n * This file declares a class that is used to render an axis to add meaning to\n * plots.\n */\nimport { getUniqueId, generateGetterSetters } from 'muze-utils';\nimport { createScale } from '../scale-creator';\nimport { DEFAULT_CONFIG } from './defaults';\nimport { SIZE, CONTINOUS, DISCRETE } from '../enums/constants';\nimport { strategyGetter } from './size-strategy';\nimport { PROPS } from './props';\n\n/**\n* This class is used to instantiate a SimpleAxis.\n* @class SimpleAxis\n*/\nexport default class SizeAxis {\n\n /**\n * Creates an instance of SimpleAxis.\n * @param {Object} config input parameters.\n * @memberof SizeAxis\n */\n constructor (config) {\n generateGetterSetters(this, PROPS);\n\n this._id = getUniqueId();\n this._config = Object.assign({}, this.constructor.defaultConfig(), config);\n // @todo: Will use configuration override using scale decorator\n this._domainType = this._config.type === 'linear' ? CONTINOUS : DISCRETE;\n this._rangeType = CONTINOUS;\n\n this._sizeStrategy = this.setStrategy(this._domainType, this._rangeType);\n this._scale = this.createScale(this._sizeStrategy);\n this._range = this._config.range;\n\n this.updateDomain(config.domain);\n }\n\n /**\n *\n *\n * @param {*} domainType\n * @param {*} rangeType\n * @param {*} schemeType\n *\n * @memberof ColorAxis\n */\n setStrategy (domainType, rangeType) {\n return strategyGetter(domainType, rangeType);\n }\n\n /**\n *\n *\n *\n * @memberof SizeAxis\n */\n createScale (strategy) {\n const {\n range\n } = this.config();\n return createScale({\n type: strategy.scale,\n range\n });\n }\n\n /**\n *\n *\n * @static\n *\n * @memberof ColorAxis\n */\n static defaultConfig () {\n return DEFAULT_CONFIG;\n }\n\n /**\n *\n *\n * @static\n *\n * @memberof ColorAxis\n */\n static type () {\n return SIZE;\n }\n\n /**\n *\n *\n * @param {*} domainVal\n *\n * @memberof SizeAxis\n */\n getSize (domainVal = 0) {\n let sizeVal = 1;\n const {\n value\n } = this.config();\n const scale = this.scale();\n const domain = this.domain() || [1, 1];\n\n if (!scale || domain[0] === domain[1]) {\n sizeVal = value;\n } else {\n return this._sizeStrategy.range(domainVal, scale, this.domain(), this.uniqueValues());\n }\n return sizeVal;\n }\n\n /**\n * This method is used to assign a domain to the axis.\n *\n * @param {Array} domain the domain of the scale\n * @memberof SizeAxis\n */\n updateDomain (domain) {\n if (domain) {\n const domainFn = this._sizeStrategy.domain;\n\n const domainInfo = domainFn(domain, this.config().intervals);\n\n this.domain(domainInfo.domain);\n this.uniqueValues(domainInfo.uniqueVals);\n\n this.scale().domain(domainInfo.scaleDomain || this.domain());\n }\n return this;\n }\n\n /**\n * This method returns an object that can be used to\n * reconstruct this instance.\n *\n * @return {Object} the serializable props of axis\n * @memberof ShapeAxis\n */\n serialize () {\n return {\n type: this.constructor.type(),\n scale: this.scale(),\n domain: this.domain(),\n range: this.range(),\n config: this.config()\n };\n }\n\n /**\n * Returns the id of the axis.\n * @return {string} Unique identifier of the axis.\n */\n id () {\n return this._id;\n }\n}\n","export const DEFAULT_CONFIG = {\n generator: null,\n value: 'circle',\n range: ['circle', 'diamond', 'star', 'cross', 'square', 'wye', 'triangle']\n};\n","export const PROPS = {\n config: {},\n domain: {},\n scale: {},\n uniqueValues: {},\n generator: {}\n};\n\n","/**\n * @module Axis\n * This file declares a class that is used to render an axis to add meaning to\n * plots.\n */\nimport { getUniqueId, getSymbol, generateGetterSetters, mergeRecursive, InvalidAwareTypes } from 'muze-utils';\nimport { createScale } from '../scale-creator';\nimport { DEFAULT_CONFIG } from './defaults';\nimport { SHAPE } from '../enums/constants';\nimport { shapeGenerator } from './helper';\nimport { PROPS } from './props';\n\n/**\n* This class is used to instantiate a SimpleAxis.\n* @class SimpleAxis\n*/\nexport default class ShapeAxis {\n /**\n * Creates an instance of SimpleAxis.\n * @param {Object} params input parameters.\n * @param {Object | undefined} params.range Type of color scheme.\n * @memberof ShapeAxis\n */\n constructor (config) {\n generateGetterSetters(this, PROPS);\n\n this._id = getUniqueId();\n this._config = Object.assign({}, this.constructor.defaultConfig());\n this._config = mergeRecursive(this._config, config);\n\n this._scale = createScale({\n type: 'ordinal',\n range: this._config.range\n });\n this.updateDomain(config.domain);\n }\n\n /**\n *\n *\n * @static\n *\n * @memberof ColorAxis\n */\n static defaultConfig () {\n return DEFAULT_CONFIG;\n }\n\n /**\n *\n *\n * @static\n *\n * @memberof ColorAxis\n */\n static type () {\n return SHAPE;\n }\n\n /**\n *\n *\n * @param {*} value\n *\n * @memberof ShapeAxis\n */\n getShape (value) {\n if (!this.scale() || !this.domain() || !value || value instanceof InvalidAwareTypes) {\n return this.config().value;\n }\n\n if (this._generatedShapes) {\n return this._generatedShapes[value];\n }\n\n const shapeType = this.scale()(value);\n if (shapeType === 'string') {\n return getSymbol(shapeType);\n }\n\n return shapeType;\n }\n\n /**\n * This method is used to assign a domain to the axis.\n *\n * @param {Array} domain the domain of the scale\n * @memberof ShapeAxis\n */\n updateDomain (domain = []) {\n if (domain.length) {\n this.uniqueValues(domain);\n this.domain(domain);\n this.scale().domain(domain);\n\n if (this.config().generator) {\n this._generatedShapes = shapeGenerator(domain, this.config().generator);\n }\n }\n return this;\n }\n\n /**\n * This method returns an object that can be used to\n * reconstruct this instance.\n *\n * @return {Object} the serializable props of axis\n * @memberof ShapeAxis\n */\n serialize () {\n return {\n type: this.constructor.type(),\n scale: this.scale(),\n domain: this.domain(),\n range: this.config().range,\n config: this.config()\n };\n }\n\n /**\n * Returns the id of the axis.\n * @return {string} Unique identifier of the axis.\n */\n id () {\n return this._id;\n }\n}\n","/**\n *\n *\n * @param {*} domain\n * @param {*} generatorFn\n *\n */\nexport const shapeGenerator = (domain, generatorFn) => {\n const generatedShapes = {};\n domain.forEach((value) => {\n generatedShapes[value] = generatorFn(value);\n });\n return generatedShapes;\n};\n","import * as ScaleType from './enums/scale-type';\n\nconst DATA_TYPES = {\n DIMENSION: 'dimension',\n CATEGORICAL: 'categorical',\n MEASURE: 'measure',\n TEMPORAL: 'temporal'\n};\n\n/**\n * Map of DataModel types to associated field types.\n */\nexport const dataTypeScaleMap = {\n [DATA_TYPES.DIMENSION]: ScaleType.BAND,\n [DATA_TYPES.MEASURE]: ScaleType.LINEAR,\n [DATA_TYPES.TEMPORAL]: ScaleType.TIME\n};\n\n","import { nestCollection, InvalidAwareTypes } from 'muze-utils';\n\n/**\n * Create multiple datasets from a single dataset by grouping the data using\n * a dimensional field.\n * @param {Array} schema Name and type of fields are stored in schema\n * @param {Array} data Data array\n * @param {Object} config Configuration object\n * @return {Array} Grouped data array\n */\nexport default (schema, data, config) => {\n const groupBy = config.groupBy instanceof Array ? config.groupBy : [config.groupBy];\n const groupByIndices = groupBy.map(fieldName => schema.findIndex(d => d.name === fieldName));\n\n if (groupByIndices.find(d => d === -1) !== undefined) {\n throw new Error(`Groupby field ${groupBy} not found in schema`);\n }\n\n const groupedData = nestCollection({\n keys: groupByIndices,\n data\n });\n\n groupedData.forEach((d) => {\n const key = d.key;\n if (InvalidAwareTypes.isInvalid(key)) {\n d.key = InvalidAwareTypes.getInvalidType(key);\n }\n });\n return groupedData;\n};\n","/**\n * @module Transform\n * This file exports a function that is used to implement\n * the identity transform\n */\n /* eslint no-unused-vars: 0 */\n /**\n * This function accepts data and returns the data unchanged.\n * @param {Object} schema The schema.\n * @param {Array} data The data array.\n * @param {Object} config The config object.\n * @return {Array} The unchanged data.\n */\n function identityTransform (schema, data, config) {\n return data;\n }\n\n export default identityTransform;\n","/**\n * @module Transform\n * This file exports the transform factory.\n */\nimport * as TransformType from '../enums/transform-type';\nimport identity from '../identity-transform';\nimport group from '../group-transform';\nimport stack from '../stack-transform';\n\n/* istanbul ignore next */\nconst transformMap = {\n [TransformType.IDENTITY]: identity,\n [TransformType.GROUP]: group,\n [TransformType.STACK]: stack\n};\n\n/**\n * This function is used to retirn a transform associated\n * with the given type.\n *\n * @param {string} type The type of the transform.\n * @return {Function} The transform function.\n */\nfunction transformFactory (type) {\n const transform = transformMap[type];\n if (typeof transform !== 'function') {\n throw new Error('Invalid transform type supplied.');\n }\n return transform;\n}\n\nexport default transformFactory;\n","/**\n * @module Transform\n * This module exports constants that are used to reference transforms in\n * a consistent manner throughout the project.\n */\n/* eslint one-var: 0 */\n export const IDENTITY = 'identity';\n export const GROUP = 'group';\n export const STACK = 'stack';\n export const FRACTURE = 'fracture';\n","import { stack } from 'muze-utils';\n\nimport group from '../group-transform';\n/*\n Normalize the data to a form which can be given to d3 stack for stacking the data\n ['Product', 'Sales', 'Region'],\n 0 ['A', 2000, 'North'],\n 1 ['A', 3000, 'South'],\n 2 ['B', 3000, 'South'],\n 3 ['B', 2000, 'North'],\n 4 ['C', 3000, 'South'],\n 5 ['C', 2000, 'North']\n |\n |\n ['Product', 'North', 'South'],\n ['A', 2000, 3000],\n ['B', 2000, 3000],\n ['C', 2000, 3000]\n*/\n// eslint-disable-next-line require-jsdoc\nconst normalizeData = (data, schema, valueField, uniqueField, groupBy) => {\n const groupedData = group(schema, data, {\n groupBy: uniqueField\n });\n const uniqueFieldIndex = schema.findIndex(d => d.name === uniqueField);\n const valueFieldIndex = schema.findIndex(d => d.name === valueField);\n const seriesKeyIndex = schema.findIndex(d => d.name === groupBy);\n const seriesKeys = data.map(d => d[seriesKeyIndex]).filter((item, pos, arr) => arr.indexOf(item) === pos).sort();\n const fieldNames = schema.reduce((acc, obj, i) => {\n acc[i] = obj.name;\n return acc;\n }, {});\n const dataArr = groupedData.map((arr) => {\n const tuples = {};\n const rowObj = arr.values.reduce((acc, row) => {\n acc = row.reduce((obj, value, i) => {\n if (i === seriesKeyIndex) {\n obj[value] = row[valueFieldIndex];\n tuples[value] = row;\n } else if (i !== valueFieldIndex) {\n obj[fieldNames[i]] = value;\n }\n return obj;\n }, acc);\n return acc;\n }, {});\n rowObj._tuple = tuples;\n // Set missing values field to zero value\n seriesKeys.forEach((seriesKey) => {\n if (rowObj[seriesKey] === undefined) {\n rowObj[seriesKey] = 0;\n const newArr = new Array(arr.values[0].length);\n newArr[uniqueFieldIndex] = arr.key;\n newArr[seriesKeyIndex] = seriesKey;\n rowObj._tuple[seriesKey] = newArr;\n }\n });\n return rowObj;\n });\n\n return {\n data: dataArr,\n keys: seriesKeys\n };\n};\n/**\n * Generate a stacked representation of data\n * @param {Array} schema schema Array\n * @param {Array} data data array\n * @param {Object} config Configuration object\n * @return {Array} stacked data\n */\nexport default (schema, data, config) => {\n const uniqueField = config.uniqueField;\n const valueField = config.value;\n const groupBy = config.groupBy;\n const sort = config.sort || 'descending';\n const normalizedData = normalizeData(data, schema, valueField, uniqueField, groupBy);\n const keys = normalizedData.keys;\n const map = {};\n const orderBy = config.orderBy;\n const orderIndex = schema.findIndex(d => d.name === orderBy);\n const groupByIndex = schema.findIndex(d => d.name === groupBy);\n if (orderIndex !== -1) {\n keys.forEach((key) => {\n const name = data.find(d => d[groupByIndex] === key);\n map[key] = name[orderIndex];\n });\n normalizedData.keys.sort((a, b) => map[a].localeCompare(map[b]));\n }\n\n const stackData = stack({\n keys: normalizedData.keys,\n offset: config.offset || 'diverging',\n order: sort,\n data: normalizedData.data\n });\n stackData.forEach((seriesData) => {\n seriesData.forEach((dataObj) => {\n dataObj.data = dataObj.data._tuple[seriesData.key];\n });\n });\n return stackData;\n};\n\n","import {\n FieldType,\n getDomainFromData,\n setStyles,\n easeFns,\n selectElement,\n DimensionSubtype,\n STATE_NAMESPACES,\n retrieveNearestGroupByReducers,\n getObjProp\n} from 'muze-utils';\nimport { ScaleType } from '@chartshq/muze-axis';\nimport { transformFactory } from '@chartshq/transform';\nimport { IDENTITY, STACK, GROUP, COLOR, SHAPE, SIZE, ENCODING, AGG_FN_SUM } from '../enums/constants';\n\nconst BAND = ScaleType.BAND;\n\nexport const getLayerColor = ({ datum, index }, { colorEncoding, colorAxis, colorFieldIndex }) => {\n let rawColor = '';\n let color = '';\n if (colorEncoding && colorEncoding.value instanceof Function) {\n color = colorEncoding.value(datum, index);\n rawColor = colorEncoding.value(datum, index);\n } else {\n rawColor = colorAxis.getRawColor(datum._data[colorFieldIndex]);\n color = colorAxis.getHslString(rawColor);\n }\n return { color, rawColor };\n};\n\nconst transfromColor = (colorAxis, datum, styleType, intensity) => {\n datum.meta.stateColor[styleType] = datum.meta.stateColor[styleType] || datum.meta.originalColor;\n const fillColorInfo = colorAxis.transformColor(datum.meta.stateColor[styleType], intensity);\n datum.meta.stateColor[styleType] = fillColorInfo.hsla;\n\n return fillColorInfo;\n};\n\nexport const applyInteractionStyle = (context, selectionSet, interactionStyles, config) => {\n const elements = context.getPlotElementsFromSet(selectionSet);\n const axes = context.axes();\n const colorAxis = axes.color;\n const apply = config.apply;\n const interactionType = config.interactionType;\n interactionStyles.forEach((style) => {\n const styleType = style.type;\n elements.style(styleType, ((d) => {\n const { colorTransform, stateColor, originalColor } = d.meta;\n colorTransform[interactionType] = colorTransform[interactionType] || {};\n if (apply && !colorTransform[interactionType][styleType]) {\n // fade selections\n colorTransform[interactionType][styleType] = style.intensity;\n const color = transfromColor(colorAxis, d, styleType, style.intensity).color;\n return color;\n }\n if (!apply && colorTransform[interactionType][styleType]) {\n // unfade selections\n colorTransform[interactionType][styleType] = null;\n return transfromColor(colorAxis, d, styleType, style.intensity.map(e => -e)).color;\n }\n const [h, s, l, a] = stateColor[styleType] ? stateColor[styleType] : originalColor;\n return `hsla(${h * 360},${s * 100}%,${l * 100}%, ${a || 1})`;\n }));\n });\n};\n\n/**\n *\n *\n * @param {*} selectionSet\n * @param {*} className\n * @param {*} hasFaded\n */\nexport const fadeUnfadeSelection = (context, selectionSet, hasFaded, interaction) => {\n const interactionConfig = { interaction, apply: hasFaded };\n applyInteractionStyle(context, selectionSet, 'fade', interactionConfig);\n};\n\n/**\n *\n *\n * @param {*} selectionSet\n * @param {*} className\n * @param {*} hasFaded\n */\nexport const focusUnfocusSelection = (context, selectionSet, isFocussed, interaction) => {\n const interactionConfig = { interaction, apply: isFocussed };\n applyInteractionStyle(context, selectionSet, 'focus', interactionConfig);\n};\n\n/**\n *\n *\n * @param {*} axes\n *\n */\nexport const getAxesScales = (axes) => {\n const [xAxis, yAxis] = [ENCODING.X, ENCODING.Y].map(e => axes[e]);\n const [xScale, yScale] = [xAxis, yAxis].map(e => e && e.scale());\n return {\n xAxis,\n yAxis,\n xScale,\n yScale\n };\n};\n\n/**\n *\n *\n * @param {*} encoding\n * @param {*} fieldsConfig\n *\n */\nexport const getEncodingFieldInf = (encoding, fieldsConfig) => {\n const [xField, yField, x0Field, y0Field, colorField, shapeField, sizeField] =\n [ENCODING.X, ENCODING.Y, ENCODING.X0, ENCODING.Y0, COLOR, SHAPE, SIZE].map(e => encoding[e] &&\n encoding[e].field);\n\n const [xFieldType, yFieldType] = [xField, yField, x0Field, y0Field].map(e => fieldsConfig[e] &&\n fieldsConfig[e].def.type);\n\n const [xFieldSubType, yFieldSubType] = [xField, yField].map(e => fieldsConfig[e] && (fieldsConfig[e].def.subtype ||\n fieldsConfig[e].def.type));\n\n const [xFieldIndex, yFieldIndex, x0FieldIndex, y0FieldIndex] = [xField, yField, x0Field, y0Field]\n .map(e => fieldsConfig[e] && fieldsConfig[e].index);\n\n return {\n xField,\n yField,\n colorField,\n shapeField,\n sizeField,\n x0Field,\n y0Field,\n xFieldType,\n yFieldType,\n xFieldSubType,\n yFieldSubType,\n xFieldIndex,\n yFieldIndex,\n x0FieldIndex,\n y0FieldIndex\n };\n};\n\n/**\n *\n *\n * @param {*} dataModel\n * @param {*} config\n * @param {*} transformType\n *\n */\nexport const transformData = (dataModel, config, transformType, encodingFieldInf) => {\n const data = dataModel.getData({ withUid: true });\n const schema = data.schema;\n const transform = config.transform;\n const {\n xField,\n yField,\n xFieldType,\n yFieldType\n } = encodingFieldInf;\n const uniqueField = xFieldType === FieldType.MEASURE ? yField : xField;\n\n return transformFactory(transformType)(schema, data.data, {\n groupBy: transform.groupBy,\n uniqueField,\n sort: transform.sort || 'none',\n offset: transform.offset,\n orderBy: transform.orderBy,\n value: yFieldType === FieldType.MEASURE ? yField : xField\n }, data.uids);\n};\n\nexport const getIndividualClassName = (d, i, data, context) => {\n const className = context.config().individualClassName;\n let classNameStr = '';\n if (className instanceof Function) {\n classNameStr = className(d, i, data, context);\n }\n return classNameStr;\n};\n\n/*\n * This method resolves the x, y, x0 and y0 values from the transformed data.\n * It also checks the type of transformed data for example, if it is a stacked data\n * then it fetches the y and y0 values from the stacked data.\n * @param {Array.} transformedData transformed data\n * @param {Object} fieldsConfig field definitions\n * @param {string} transformType type of transformed data - stack, group or identity.\n * @return {Array.} Normalized data\n*/\nexport const getNormalizedData = (transformedData, fieldsConfig, encodingFieldInf, transformType) => {\n const transformedDataArr = transformType === IDENTITY ? [transformedData] : transformedData;\n const {\n xFieldType,\n xFieldIndex,\n yFieldIndex,\n x0FieldIndex,\n y0FieldIndex\n } = encodingFieldInf;\n const fieldsLen = Object.keys(fieldsConfig).length;\n /**\n * Returns normalized data from transformed data. It recursively traverses through\n * the transformed data if there it is nested.\n */\n return transformedDataArr.map((data) => {\n const values = transformType === GROUP ? data.values : data;\n return values.map((d) => {\n let pointObj = {};\n let tuple;\n if (transformType === STACK) {\n tuple = d.data || [];\n let y;\n let y0;\n let x;\n let x0;\n if (d[1] >= d[0]) {\n y = x0 = d[1];\n x = y0 = d[0];\n } else {\n y = x0 = d[0];\n x = y0 = d[1];\n }\n\n pointObj = xFieldType === FieldType.MEASURE ? {\n x,\n x0,\n y: tuple[yFieldIndex],\n y0: tuple[yFieldIndex]\n } : {\n x: tuple[xFieldIndex],\n x0: tuple[xFieldIndex],\n y,\n y0\n };\n pointObj._data = tuple;\n pointObj._id = tuple[fieldsLen];\n } else {\n pointObj = {\n x: d[xFieldIndex],\n y: d[yFieldIndex],\n x0: d[x0FieldIndex],\n y0: d[y0FieldIndex]\n };\n pointObj._data = d;\n pointObj._id = d[fieldsLen];\n }\n return pointObj;\n });\n }).filter(d => d.length);\n};\n\nexport const calculateDomainFromData = (data, encodingFieldInf, transformType) => {\n const {\n xFieldSubType,\n yFieldSubType,\n xField,\n yField,\n x0Field,\n y0Field\n } = encodingFieldInf;\n const domains = {};\n const yEnc = ENCODING.Y;\n const xEnc = ENCODING.X;\n if (xField) {\n domains.x = getDomainFromData(data, x0Field || transformType === STACK ? [xEnc, ENCODING.X0] : [xEnc, xEnc],\n xFieldSubType);\n }\n if (yField) {\n domains.y = getDomainFromData(data, y0Field || transformType === STACK ? [ENCODING.Y0, ENCODING.Y] :\n [yEnc, yEnc], yFieldSubType);\n }\n\n return domains;\n};\n\nexport const attachDataToVoronoi = (voronoi, points) => {\n voronoi.data([].concat(...points).filter(d => d._id !== undefined).map((d) => {\n const point = d.update;\n return {\n x: point.x,\n y: point.y,\n data: d\n };\n }));\n};\n\n/**\n *\n *\n * @param {*} target\n * @param {*} styles\n * @param {*} remove\n */\nexport const updateStyle = (target, styles, remove) => {\n for (const key in styles) {\n if ({}.hasOwnProperty.call(styles, key)) {\n target.style(key, remove ? null : styles[key]);\n }\n }\n};\n\n/**\n *\n *\n * @param {*} mount\n * @param {*} context\n */\nexport const animateGroup = (mount, context) => {\n let groupTransition;\n let update;\n const { transition, groupAnimateStyle } = context;\n const { duration, effect, disabled } = transition;\n if (groupAnimateStyle) {\n setStyles(mount.node(), groupAnimateStyle.enter);\n update = groupAnimateStyle.update;\n if (!disabled) {\n groupTransition = mount.transition()\n .ease(easeFns[effect])\n .duration(duration)\n .on('end', function () {\n updateStyle(selectElement(this), update, true);\n });\n } else {\n groupTransition = mount;\n }\n updateStyle(groupTransition, update);\n }\n};\n\nexport const positionPoints = (context, points) => {\n const positioner = context.encodingTransform();\n if (positioner) {\n return positioner(points, context, { smartLabel: context._dependencies.smartLabel });\n }\n return points;\n};\n\n/**\n * Gets the width of each group. It gets the width from axis if it is available for\n * example when the scale is nominal else it calculates the width from the\n * range of the axis and number of data points.\n *\n * @param {SimpleAxis} axis instance of axis\n * @param {number} minDiff Minimum difference between data points\n * @return {number} width of each bar\n * @private\n*/\nexport const getGroupSpan = (axis, minDiff) => {\n let groupSpan;\n const width = axis.getUnitWidth();\n const scale = axis.scale();\n const range = scale.range();\n const domain = scale.domain();\n !width ? groupSpan = (Math.abs(range[1] - range[0]) / Math.abs(domain[1] - domain[0])) * minDiff :\n (groupSpan = width);\n\n return groupSpan;\n};\n\nexport const getPlotMeasurement = (context, dimensionalValues) => {\n const fieldInfo = context.encodingFieldsInf();\n const axes = context.axes();\n const transformType = context.transformType();\n const config = context.config();\n const bandScale = context._bandScale;\n\n return ['x', 'y'].map((type) => {\n let span = 0;\n let groupSpan = 0;\n let padding = 0;\n let offsetValues = [];\n if (fieldInfo[`${type}FieldType`] === FieldType.DIMENSION) {\n let actualGroupWidth;\n const isTemporal = fieldInfo[`${type}FieldSubType`] === DimensionSubtype.TEMPORAL;\n const timeDiff = isTemporal ? context.dataProps().timeDiffs[type] : 0;\n const axis = axes[type];\n const pad = config[`pad${type.toUpperCase()}`];\n const innerPadding = config.innerPadding;\n const keys = dimensionalValues;\n const scale = axis.scale();\n groupSpan = getGroupSpan(axis, timeDiff);\n const isAxisBandScale = axis.constructor.type() === BAND;\n const axisPadding = axis.config().padding;\n // If it is a grouped bar then the width of each bar in a grouping is retrieved from\n // a band scale. The band scale will have range equal to width of one group of bars and\n // the domain is set to series keys.\n if (transformType === 'group') {\n const groupPadding = isAxisBandScale ? 0 : axisPadding * groupSpan / 2;\n bandScale.range([groupPadding, groupSpan - groupPadding]).domain(keys).paddingInner(innerPadding);\n span = bandScale.bandwidth();\n actualGroupWidth = groupSpan - (isAxisBandScale ? 0 : axisPadding * groupSpan);\n offsetValues = keys.map(key => bandScale(key) - (isAxisBandScale ? 0 : (groupSpan / 2)));\n } else if (pad !== undefined) {\n let offset;\n if (isAxisBandScale) {\n const step = scale.step();\n offset = scale.padding() * step;\n span = scale.bandwidth() + offset;\n } else {\n span = groupSpan;\n }\n offsetValues = keys.map(() => (isAxisBandScale ? -(offset / 2) : -(span / 2)));\n } else {\n padding = isAxisBandScale ? 0 : axisPadding * groupSpan;\n span = groupSpan - padding;\n actualGroupWidth = span;\n offsetValues = keys.map(() => (isAxisBandScale ? 0 : -(span / 2)));\n }\n\n groupSpan = actualGroupWidth;\n padding = isAxisBandScale ? axisPadding * axis.scale().step() : axisPadding * groupSpan;\n }\n\n return {\n span,\n offsetValues,\n groupSpan,\n padding\n };\n });\n};\n\nexport const initializeGlobalState = (context) => {\n const store = context.store();\n const globalState = context.constructor.getState()[0];\n const namespace = context.metaInf().namespace;\n for (const prop in globalState) {\n store.append(`${STATE_NAMESPACES.LAYER_GLOBAL_NAMESPACE}.${prop}`, {\n [namespace]: null\n });\n }\n};\n\nexport const resolveInvalidTransformType = (context) => {\n const {\n xField,\n yField,\n xFieldType,\n yFieldType\n } = context.encodingFieldsInf();\n const groupByField = context.config().transform.groupBy;\n const fieldsConfig = context.data().getFieldsConfig();\n const groupByFieldMeasure = fieldsConfig[groupByField] && fieldsConfig[groupByField].def.type === FieldType.MEASURE;\n if (!xField || !yField || groupByFieldMeasure || !groupByField || xFieldType === FieldType.DIMENSION &&\n yFieldType === FieldType.DIMENSION) {\n return IDENTITY;\n }\n return null;\n};\n\nexport const getValidTransform = context => resolveInvalidTransformType(context) || context.config().transform.type;\n\nexport const getValidTransformForAggFn = (context) => {\n const resolvedInvalidTransformType = resolveInvalidTransformType(context);\n if (resolvedInvalidTransformType) {\n return resolvedInvalidTransformType;\n }\n\n const {\n xField,\n yField,\n xFieldType,\n yFieldType\n } = context.encodingFieldsInf();\n const groupByField = context.config().transform.groupBy;\n const isCustomTransformTypeProvided = !!getObjProp(context._customConfig, 'transform', 'type');\n let transformType = context.config().transform.type;\n\n if (!isCustomTransformTypeProvided && groupByField && xFieldType !== yFieldType) {\n const measureField = xFieldType === FieldType.MEASURE ? xField : yField;\n const { [measureField]: aggFn } = retrieveNearestGroupByReducers(context.data(), measureField);\n transformType = aggFn === AGG_FN_SUM ? STACK : GROUP;\n }\n\n return transformType;\n};\n\nexport const getMarkId = (source, schema) => source.filter((val, i) => schema[i] &&\n schema[i].type === FieldType.DIMENSION).join();\n","import { CommonProps, STATE_NAMESPACES } from 'muze-utils';\nimport { getEncodingFieldInf } from '../helpers';\nimport * as PROPS from '../enums/props';\n\nconst renderLayer = (context) => {\n const mount = context.mount();\n if (mount) {\n context.render(mount);\n context.dependencies().throwback.commit(CommonProps.ON_LAYER_DRAW, true);\n }\n};\n\nexport const listenerMap = (context, ns) => [\n {\n props: [`${ns.local}.${PROPS.DATA}`],\n listener: ([, data]) => {\n const config = context.config();\n const encodingValue = config.encoding;\n if (data && encodingValue) {\n const fieldsConfig = data.getFieldsConfig();\n const encodingFieldsInf = getEncodingFieldInf(encodingValue, fieldsConfig);\n context.encodingFieldsInf(encodingFieldsInf);\n context.resolveTransformType();\n context._transformedData = context.getTransformedData(data, config,\n context.transformType(), encodingFieldsInf);\n context._normalizedData = context.getNormalizedData(context._transformedData, fieldsConfig);\n const domain = context.calculateDomainFromData(context._normalizedData, context.encodingFieldsInf(),\n context.data().getFieldsConfig());\n context._domain = domain;\n !context._updateLock && context.domain(domain);\n }\n },\n type: 'registerImmediateListener'\n },\n {\n props: [`${ns.local}.${PROPS.CONFIG}`],\n listener: ([, config]) => {\n const calculateDomain = config.calculateDomain;\n const props = context.getRenderProps();\n const store = context.store();\n const namespaceInf = {\n namespace: `${STATE_NAMESPACES.LAYER_LOCAL_NAMESPACE}.${context.metaInf().namespace}`,\n key: 'renderListener'\n };\n store.unsubscribe(namespaceInf);\n if (calculateDomain === false) {\n props.push(`${ns.local}.${PROPS.DATA}`);\n }\n store.registerChangeListener(props,\n () => {\n renderLayer(context);\n }, false, namespaceInf);\n },\n type: 'registerImmediateListener'\n }\n];\n\n","export const DATA = 'data';\nexport const CONFIG = 'config';\nexport const MEASUREMENT = 'measurement';\nexport const DOMAIN = 'domain';\nexport const MOUNT = 'mount';\n","import { mergeRecursive } from 'muze-utils';\nimport * as PROPS from '../enums/props';\n\nexport const defaultOptions = {\n [PROPS.CONFIG]: {\n value: null,\n meta: {\n sanitization: (config, oldConfig, context) => {\n context._customConfig = config;\n const constructor = context.constructor;\n const newConf = mergeRecursive({}, constructor.defaultConfig());\n return constructor.defaultPolicy(newConf, config);\n }\n }\n },\n [PROPS.DATA]: {\n value: null,\n meta: {\n preset: (data, context) => {\n if (context._cacheEnabled) {\n context._cachedData.push(data);\n } else {\n context._cachedData = [data];\n }\n }\n }\n }\n // [PROPS.MOUNT]: {\n // value: null\n // },\n // [PROPS.AXES]: {\n // value: null\n // },\n // [PROPS.MEASUREMENT]: {\n // value: null\n // }\n};\n","import {\n getUniqueId,\n mergeRecursive,\n FieldType,\n selectElement,\n ReservedFields,\n registerListeners,\n transactor,\n DataModel,\n clone,\n generateGetterSetters,\n STATE_NAMESPACES\n} from 'muze-utils';\nimport { SimpleLayer } from '../simple-layer';\nimport * as PROPS from '../enums/props';\nimport { props } from './props';\nimport {\n transformData,\n calculateDomainFromData,\n getNormalizedData,\n applyInteractionStyle,\n initializeGlobalState,\n getValidTransform\n} from '../helpers';\nimport { listenerMap } from './listener-map';\nimport { defaultOptions } from './default-options';\n\n/**\n * An abstract class which gives definition of common layer functionality like\n * - transforming data for various modes. Supported modes: identity, group and stack.\n * - calculating data domain\n * - linking dependent layers\n * - merging policy of configuration\n * - interaction sideffect helpers\n * - retrieving dom elements from data using id\n * - retrieving the physical dimensions of marks\n * - disposing layer\n *\n * Every layer has to extend base layer and give concrete definition.\n * This layer does not have any default visual. A new layer has to define the logic of `render` for rendering the\n * visuals\n *\n * @public\n * @class\n * @module BaseLayer\n */\nexport default class BaseLayer extends SimpleLayer {\n\n /**\n * Creates a layer using a configuration and data.\n *\n * @public\n * @constructor\n * @param {DataModel} data Instance of DataModel to be used. This DataModel instance serves as the data for a layer.\n * @param {Object} axes Axes instances to be used for rendering the layer. Axes are used for mapping data from\n * value to px.\n * @param {SimpleAxis} axes.x X axis of the layer. Based on the type of variable it gets instance of BandAxis,\n * TimeAxis, ContinuousAxis\n * @param {SimpleAxis} axes.y X axis of the layer. Based on the type of variable it gets instance of BandAxis,\n * TimeAxis, ContinuousAxis\n * @param {ColorAxis} axes.color Axis for coloring a layer using color interpolators\n * @param {ShapeAxis} axes.shape Axis for providing a shape\n * @param {SizeAxis} axes.size Axis for determining size of a mark using size interpolator\n * @param {LayerConfig} config Configuration of the layer\n * @param {Object} dependencies Dependencies of the layer\n * @param {SmartLabel} dependencies.smartLabel Smartlabel singleton instance\n */\n constructor (data, axes, config, dependencies = {}) {\n super();\n\n generateGetterSetters(this, props);\n this.data(data);\n this.axes(axes);\n this.config(config);\n this.alias(this.constructor.formalName() + getUniqueId());\n this.dependencies(dependencies);\n this._points = [];\n this._cachedData = [];\n this._id = getUniqueId();\n this._measurement = {};\n this._animationDonePromises = [];\n this._customConfig = null;\n }\n\n static getState () {\n return [\n {\n domain: {}\n },\n {\n config: {},\n data: {}\n }\n ];\n }\n\n store (...params) {\n if (params.length) {\n this._store = params[0];\n const metaInf = this.metaInf();\n const localNs = `${STATE_NAMESPACES.LAYER_LOCAL_NAMESPACE}.${metaInf.namespace}`;\n initializeGlobalState(this);\n const store = this.store();\n store.append(`${STATE_NAMESPACES.LAYER_LOCAL_NAMESPACE}`, {\n [metaInf.namespace]: null\n });\n\n transactor(this, defaultOptions, store.model, {\n namespace: localNs\n });\n registerListeners(this, listenerMap, {\n local: localNs,\n global: STATE_NAMESPACES.LAYER_GLOBAL_NAMESPACE\n }, {\n unitRowIndex: metaInf.unitRowIndex,\n unitColIndex: metaInf.unitColIndex\n });\n return this;\n }\n return this._store;\n }\n\n domain (...dom) {\n const prop = `${STATE_NAMESPACES.LAYER_GLOBAL_NAMESPACE}.${PROPS.DOMAIN}.${this.metaInf().namespace}`;\n if (dom.length) {\n this.store().commit(prop, dom[0]);\n return this;\n }\n return this.store().get(prop);\n }\n\n /**\n * Creates a layer instance\n * @return {BaseLayer} Instance of a layer\n */\n static create (...params) {\n return new this(...params);\n }\n\n /**\n * Default configuration of the layer. This configuration gets merged to the user passed configuration using a\n * plolicy. Base layer only returns part of configuraion, any layer overridding base layer should return its own\n * configuration.\n *\n * @public\n * @static\n *\n * @return {Object} Default configuration\n */\n static defaultConfig () {\n return {\n transform: {\n type: 'identity'\n }\n };\n }\n\n /**\n * Policy defines how user config gets merged to default config. The default policy here does a deep copy\n * operation.\n * Any policy which does more than deep copying should define the policy as a static member.\n *\n * @static\n * @public\n *\n * @param {LayerConfig} conf Configuration with which the user config will be merged\n * @param {LayerConfig} userConf Configuration given by the user\n *\n * @return {LayerConfig} Merged layer configuration\n */\n static defaultPolicy (conf, userConf) {\n return mergeRecursive(conf, userConf);\n }\n\n /**\n * Determines a name for a layer. This name of the layer is used in the input data to refer to this layer.\n * ```\n * .layers([\n * mark: 'bar',\n * encoding: { ... }\n * ])\n * ```\n *\n * @static\n * @public\n *\n * @return {string} name of layer\n */\n static formalName () {\n return 'base';\n }\n\n encodingFieldsInf (...fieldsInf) {\n if (fieldsInf.length) {\n this._encodingFieldsInf = fieldsInf[0];\n return this;\n }\n return this._encodingFieldsInf;\n }\n\n encodingTransform (...encodingTransform) {\n if (encodingTransform.length) {\n this._encodingTransform = encodingTransform[0];\n return this;\n }\n return this._encodingTransform;\n }\n\n /**\n * Provides a alias for a layer. Like it's possible to have same layer (like bar) multiple times, but among multiple\n * layers of same type if one layer has to be referred, alias is used. If no alias is given then `formalName` is set\n * as the alias name.\n *\n *\n * If used as setter\n * @param {string} alias Name of the alias\n * @return {BaseLayer} Instance of current base layer\n *\n * If used as getter\n * @return {string} Alias of the current layer\n *\n * @public\n */\n alias (...params) {\n if (params.length) {\n this._alias = params[0];\n return this;\n }\n return this._alias || this.constructor.formalName();\n }\n\n dependencies (...params) {\n if (params.length) {\n this._dependencies = params[0];\n return this;\n }\n return this._dependencies;\n }\n\n enableCaching () {\n this._cacheEnabled = true;\n return this;\n }\n\n clearCaching () {\n this._cacheEnabled = false;\n return this.data(this._cachedData[0]);\n }\n\n /**\n * Serialize the schema. Merge config is used for serialization.\n *\n * @public\n *\n * @return {LayerConfig} Serialized schema\n */\n serialize () {\n return this.config();\n }\n\n /**\n * Returns the unique identifier of this layer. Id is auto generated during the creation proceess of a schema.\n *\n * @public\n *\n * @return {string} id of the layer\n */\n id () {\n return this._id;\n }\n\n /**\n * Returns the transformed data based on given transform type.\n * It first gets the transform method from transform factory based on type of transform. It then calls the\n * transform method with the data and passes the configuration parameters of transform such as\n * groupBy, value field, etc.\n *\n * @param {DataModel} dataModel Instance of DataModel\n * @param {Object} config Configuration for transforming data\n * @return {Array.} Transformed data.\n */\n getTransformedData (dataModel, config, transformType, encodingFieldsInf) {\n return transformData(dataModel, config, transformType, encodingFieldsInf);\n }\n\n /**\n * Calculates the domain from the data.\n * It checks the type of field and calculates the domain based on that. For example, if it\n * is a quantitative or temporal field, then it calculates the min and max from the data or\n * if it is a categorical field then it gets all the values from the data of that field.\n * @param {Array} data DataArray\n * @param {Object} fieldsConfig Configuration of fields\n * @return {Array} Domain values array.\n */\n calculateDomainFromData (data) {\n let domains = {};\n const isEmpty = this.data().isEmpty();\n\n if (!isEmpty) {\n domains = calculateDomainFromData(data, this.encodingFieldsInf(), this.transformType());\n }\n return domains;\n }\n\n static shouldDrawAnchors () {\n return false;\n }\n\n /**\n * Returns the domain for the axis.\n *\n * @param {string} encodingType type of encoding x, y, etc.\n * @return {Object} Axis domains\n */\n getDataDomain (encodingType) {\n const domains = this.store()\n .get(`${STATE_NAMESPACES.LAYER_GLOBAL_NAMESPACE}.${PROPS.DOMAIN}.${this.metaInf().namespace}`);\n return encodingType !== undefined ? domains[encodingType] || [] : domains;\n }\n\n /**\n * Normalizes the transformed data and returns it.\n *\n * @param {string} encodingType type of encoding x, y, etc.\n * @return {Object} Axis domains\n */\n getNormalizedData (transformedData, fieldsConfig) {\n return getNormalizedData(transformedData, fieldsConfig, this.encodingFieldsInf(), this.transformType());\n }\n\n /**\n * Gets the nearest point closest to the given x and y coordinate. If no nearest point is found, then it returns\n * null.\n *\n * @public\n *\n * @param {number} x X Coordinate.\n * @param {number} y Y Coordinate.\n *\n * @return {Object} Information of the nearest point.\n * ```\n * {\n * // id property contains the field names and their corresponding values in a 2d array. This is the data\n * // associated with the nearest point.\n * id: // Example data: [['Origin'], ['USA']],\n * dimensions: // Physical dimensions of the point.\n * layerId: // Id of the layer instance.\n * }\n * ```\n */\n getNearestPoint () {\n return null;\n }\n\n applyInteractionStyle (interactionType, selectionSet, apply, styles) {\n const interactionConfig = this.config().interaction || {};\n\n let interactionStyles = interactionConfig[interactionType];\n interactionStyles = styles || interactionStyles;\n if (interactionStyles) {\n applyInteractionStyle(this, selectionSet, interactionStyles, {\n apply,\n interactionType\n });\n }\n }\n\n disableUpdate () {\n this._updateLock = true;\n return this;\n }\n\n enableUpdate () {\n this._updateLock = false;\n return this;\n }\n\n resolveTransformType () {\n this._transformType = getValidTransform(this);\n }\n\n transformType () {\n return this._transformType;\n }\n\n /**\n * Renders the layer\n * @return {BaseLayer} Instance of the layer.\n */\n render () {\n return this;\n }\n\n /**\n *\n *\n *\n * @memberof BaseLayer\n */\n elemType () {\n return 'g';\n }\n\n /**\n * Disposes the entire layer.\n *\n * @return {BaseLayer} Instance of layer.\n */\n remove () {\n this.store().unsubscribe({\n namespace: `${STATE_NAMESPACES.LAYER_LOCAL_NAMESPACE}.${this.metaInf().namespace}`\n });\n selectElement(this.mount()).remove();\n return this;\n }\n\n /**\n * Stores point in an object with key as the categorical value or temporal value\n *\n * @param {string} key categorical value or temporal value\n * @param {Object} data Information of the data point\n * @return {BarLayer} Instance of bar layer\n */\n cachePoint (key, data) {\n if (key === null) {\n return this;\n }\n const pointMap = this._pointMap;\n !pointMap[key] && (pointMap[key] = []);\n pointMap[key].push(data);\n return this;\n }\n\n /**\n *\n *\n * @param {*} dataProps\n *\n * @memberof BaseLayer\n */\n dataProps (...dataProps) {\n if (dataProps.length) {\n this._dataProps = dataProps[0];\n return this;\n }\n return this._dataProps;\n }\n\n /**\n *\n *\n * @param {*} data\n * @param {*} id\n *\n * @memberof BaseLayer\n */\n getIdentifiersFromData (data) {\n const schema = this.data().getData().schema;\n const fieldsConfig = this.data().getFieldsConfig();\n const identifiers = [[], []];\n const {\n xFieldType,\n yFieldType,\n xField,\n yField\n } = this.encodingFieldsInf();\n\n const [xMeasure, yMeasure] = [xFieldType, yFieldType].map(type => type === FieldType.MEASURE);\n schema.forEach((d, i) => {\n const name = d.name;\n if (fieldsConfig[name].def.type === FieldType.DIMENSION) {\n identifiers[0].push(name);\n identifiers[1].push(data[i]);\n }\n });\n\n if (xMeasure && yMeasure) {\n const xMeasureIndex = fieldsConfig[xField].index;\n const yMeasureIndex = fieldsConfig[yField].index;\n identifiers[0].push(...[xField, yField]);\n identifiers[1].push(...[data[xMeasureIndex], data[yMeasureIndex]]);\n }\n return identifiers;\n }\n\n getPlotSpan () {\n return {\n x: 0,\n y: 0\n };\n }\n\n getPlotPadding () {\n return {\n x: 0,\n y: 0\n };\n }\n\n /**\n * Returns the information of the marks corresponding to the supplied identifiers. Identifiers are a set of field\n * names and their corresponding values in an array. It can also be an instance of datamodel.\n *\n * For example,\n * ```\n * const identifiers = [\n * ['Origin', 'Cylinders'],\n * ['USA', '8']\n * ];\n * const points = barLayer.getPointsFromIdentifiers(identifiers);\n * ```\n * @public\n * @param {Array|DataModel} identifiers Identifiers of the marks.\n * @param {Object} config Optional configuration which describes how to get the information.\n * @param {boolean} config.getAllAttrs If true, then returns all the information of the points, else returns only\n * the positions of the points.\n * @param {boolean} config.getBBox If true, then returns the bounding box of all the marks.\n *\n * @return {Array} Array of points contains\n */\n getPointsFromIdentifiers (identifiers, config = {}) {\n const getAllAttrs = config.getAllAttrs;\n const getBBox = config.getBBox;\n if (!this.data()) {\n return [];\n }\n let fieldNames;\n let values;\n if (identifiers instanceof DataModel) {\n const dataObj = identifiers.getData();\n fieldNames = dataObj.schema.map(d => d.name);\n values = dataObj.data;\n } else {\n fieldNames = identifiers[0];\n values = identifiers.slice(1, identifiers.length);\n }\n\n const points = this._points;\n const fieldsConfig = this.data().getFieldsConfig();\n\n const filteredPoints = [].concat(...points).filter((point) => {\n const { _data, _id } = point;\n\n return fieldNames.every((field, idx) => {\n if (field in fieldsConfig && fieldsConfig[field].def.type === FieldType.DIMENSION) {\n return values.findIndex(d => d[idx] === _data[fieldsConfig[field].index]) !== -1;\n } else if (field === ReservedFields.ROW_ID) {\n return values.findIndex(d => d[idx] === _id) !== -1;\n } return true;\n });\n });\n return getAllAttrs ? filteredPoints : filteredPoints.map((d) => {\n const obj = clone(d);\n if (getBBox) {\n const update = obj.update || obj;\n if (obj.size !== undefined) {\n const sizeVal = Math.sqrt(obj.size / Math.PI) * 2;\n update.width = sizeVal;\n update.height = sizeVal;\n update.x -= sizeVal / 2;\n update.y -= sizeVal / 2;\n } else {\n if (update.width === undefined) {\n update.width = 2;\n }\n if (update.height === undefined) {\n update.height = 2;\n }\n }\n }\n\n return obj.update || obj;\n }).sort((a, b) => a.y - b.y);\n }\n\n getTransformedDataFromIdentifiers (identifiers) {\n const { data: identifierData, schema: identifierSchema } = identifiers.getData();\n const normalizedData = this._normalizedData;\n const fieldsConfig = this.data().getFieldsConfig();\n const {\n yField,\n xField,\n yFieldType,\n xFieldType\n } = this.encodingFieldsInf();\n let measureIndex;\n let enc;\n if (xFieldType === FieldType.MEASURE) {\n measureIndex = fieldsConfig[xField].index;\n enc = 'x';\n } else if (yFieldType === FieldType.MEASURE) {\n measureIndex = fieldsConfig[yField].index;\n enc = 'y';\n }\n\n const transformedData = [];\n normalizedData.forEach((dataArr) => {\n dataArr.forEach((dataObj) => {\n const tupleArr = dataObj._data;\n const exist = identifierSchema.every((obj, i) =>\n identifierData.findIndex(d => tupleArr[fieldsConfig[obj.name].index] === d[i]) !== -1);\n if (exist) {\n const transformedVal = dataObj[enc];\n const row = dataObj._data;\n const tuple = {};\n for (const key in fieldsConfig) {\n const index = fieldsConfig[key].index;\n tuple[key] = row[index];\n if (index === measureIndex) {\n tuple[key] = transformedVal;\n }\n }\n transformedData.push(tuple);\n }\n });\n });\n\n return [transformedData, this.data().getData().schema];\n }\n\n /**\n * Returns the dom elements associated with the supplied set of row ids.\n * Each element in the layer is mapped with a row of the datamodel. When given an array of row ids, it returns all\n * the elements which is mapped with those row ids.\n *\n * @public\n * @param {Array} set Array of row ids\n *\n * @return {Selection} D3 Selection of dom elements.\n */\n getPlotElementsFromSet (set) {\n return selectElement(this.mount()).selectAll(this.elemType()).filter(data =>\n (data ? set.indexOf(data._id) !== -1 : false));\n }\n\n /**\n * Notifies when all animations/transitions of the layer are completed.\n *\n * @public\n * @return {Promise} Returns a promise to notify the animation completion.\n */\n animationDone () {\n return Promise.all(this._animationDonePromises);\n }\n\n registerAnimationDoneHook () {\n let resolveFn;\n const promise = new Promise((resolve) => {\n resolveFn = resolve;\n });\n this._animationDonePromises.push(promise);\n\n return () => {\n resolveFn();\n };\n }\n\n getRenderProps () {\n const metaInf = this.metaInf();\n return [`${STATE_NAMESPACES.GROUP_GLOBAL_NAMESPACE}.domain.y.${metaInf.unitRowIndex}0`,\n `${STATE_NAMESPACES.GROUP_GLOBAL_NAMESPACE}.domain.x.${metaInf.unitColIndex}0`];\n }\n}\n","import {\n selectElement,\n makeElement,\n pathInterpolators,\n Symbols\n} from 'muze-utils';\nimport { updateStyle } from '../../helpers';\n\nconst line = Symbols.line;\n\nconst filterFn = (d) => {\n const { update } = d;\n return update.y !== null && update.x !== null;\n};\n\n/**\n * Draws a line from the points\n * Generates a svg path string\n * @param {Object} params Contains container, points and interpolate attribute.\n */\nexport const drawLine = (context) => {\n let filteredPoints;\n const { layer, container, points, interpolate, connectNullData, className, style, transition } = context;\n const mount = selectElement(container).attr('class', className);\n const curveInterpolatorFn = pathInterpolators[interpolate];\n const linepath = line()\n .curve(curveInterpolatorFn)\n .x(d => d.update.x)\n .y(d => d.update.y)\n .defined(filterFn);\n\n filteredPoints = points;\n if (connectNullData) {\n filteredPoints = points.filter(filterFn);\n }\n\n updateStyle(mount, style);\n let element = makeElement(mount, 'path', [1]);\n element.classed(points[0].className, true);\n if (!transition.disabled) {\n element = element.transition()\n .duration(transition.duration)\n .on('end', layer.registerAnimationDoneHook());\n }\n element.attr('d', linepath(filteredPoints))\n .style('fill-opacity', 0);\n return element;\n};\n","import { CLASSPREFIX } from '../../enums/constants';\n\nexport const defaultConfig = {\n classPrefix: CLASSPREFIX,\n defClassName: 'layer-line',\n className: '',\n interpolate: 'linear',\n transform: {\n type: 'group'\n },\n interaction: {\n highlight: [{\n type: 'stroke',\n intensity: [0, 0, -15, 0]\n }],\n fade: [{\n type: 'stroke',\n intensity: [0, 0, +15, 0]\n }],\n focus: [{\n type: 'stroke',\n intensity: [0, 0, +15, 0]\n }]\n },\n nearestPointThreshold: 20,\n encoding: {\n color: {},\n x: {},\n y: {},\n strokeOpacity: {\n value: 1\n }\n },\n transition: {\n effect: 'cubic',\n duration: 1000\n },\n connectNullData: false\n};\n\n","import {\n Voronoi,\n getQualifiedClassName,\n selectElement,\n makeElement,\n FieldType,\n getObjProp,\n InvalidAwareTypes\n} from 'muze-utils';\nimport { BaseLayer } from '../../base-layer';\nimport { drawLine } from './renderer';\nimport { defaultConfig } from './default-config';\nimport { ENCODING } from '../../enums/constants';\nimport {\n attachDataToVoronoi,\n animateGroup,\n getLayerColor,\n positionPoints,\n getIndividualClassName\n} from '../../helpers';\n\nimport './styles.scss';\n\n/**\n * This layer is used to render straight or smoothed line paths. The mark type of this layer is ```line```.\n *\n * @public\n *\n * @class\n * @module LineLayer\n * @extends BaseLayer\n */\nexport default class LineLayer extends BaseLayer {\n\n /**\n * Creates an instance of LineLayer.\n * @param {*} args\n * @memberof LineLayer\n */\n constructor (...args) {\n super(...args);\n this._voronoi = new Voronoi();\n }\n\n /**\n *\n *\n * @static\n *\n * @memberof LineLayer\n */\n static formalName () {\n return 'line';\n }\n\n /**\n *\n *\n *\n * @memberof LineLayer\n */\n elemType () {\n return 'path';\n }\n\n /**\n * Default configuration of line layer\n * @return {Object} Default configuration of layer\n */\n static defaultConfig () {\n return defaultConfig;\n }\n\n /**\n *\n *\n * @static\n * @param {*} conf\n * @param {*} userConf\n *\n * @memberof LineLayer\n */\n static defaultPolicy (conf, userConf) {\n const config = BaseLayer.defaultPolicy(conf, userConf);\n const encoding = config.encoding;\n const transform = config.transform;\n const colorField = encoding.color && encoding.color.field;\n\n if (colorField && !transform.groupBy) {\n transform.groupBy = colorField;\n }\n return config;\n }\n\n /**\n * Returns the draw method for line\n * @return {Function} Draw method of line layer\n */\n getDrawFn () {\n return drawLine;\n }\n\n static shouldDrawAnchors () {\n return true;\n }\n\n /**\n * Generates the x and y positions for each point\n * @param {Array} data Data Array\n * @param {Object} encoding Visual Encodings of the layer\n * @param {Object} axes Contains the axis\n * @param {number} seriesIndex index of series\n * @return {Array} Array of points\n */\n translatePoints (data, encodingFieldsInf, axes) {\n let points = [];\n const xAxis = axes.x;\n const yAxis = axes.y;\n const colorAxis = axes.color;\n const encoding = this.config().encoding;\n const { xFieldType, yFieldType } = encodingFieldsInf;\n const isXDim = xFieldType === FieldType.DIMENSION;\n const isYDim = yFieldType === FieldType.DIMENSION;\n const key = isXDim ? ENCODING.X : (isYDim ? ENCODING.Y : null);\n const colorEncoding = encoding.color;\n const colorField = colorEncoding.field;\n const fieldsConfig = this.data().getFieldsConfig();\n const colorFieldIndex = colorField && fieldsConfig[colorField].index;\n const style = {};\n const meta = {};\n\n points = data.map((d, i) => {\n const xPx = xAxis.getScaleValue(d.x) + xAxis.getUnitWidth() / 2;\n const yPx = yAxis.getScaleValue(d.y) + yAxis.getUnitWidth() / 2;\n const { color, rawColor } = getLayerColor({ datum: d, index: i }, {\n colorEncoding, colorAxis, colorFieldIndex });\n\n style.stroke = color;\n style['fill-opacity'] = 0;\n meta.stateColor = {};\n meta.originalColor = rawColor;\n meta.colorTransform = {};\n\n const point = {\n enter: {},\n update: {\n x: d.x instanceof InvalidAwareTypes ? null : xPx,\n y: d.y instanceof InvalidAwareTypes ? null : yPx\n },\n style,\n _data: d._data,\n _id: d._id,\n rowId: d._id,\n source: d._data,\n meta\n };\n point.className = getIndividualClassName(d, i, data, this);\n this.cachePoint(d[key], point);\n return point;\n });\n points = positionPoints(this, points);\n return points;\n }\n\n /**\n * Renders the line plot\n * @param {SVGElement} container svg element\n * @return {LineLayer} instance of line layer\n */\n render (container) {\n let points;\n let seriesClassName;\n let style;\n\n const config = this.config();\n const {\n encoding,\n interpolate,\n className,\n defClassName,\n transition\n } = config;\n const normalizedData = this._normalizedData;\n const transformedData = this._transformedData;\n const fieldsConfig = this.data().getFieldsConfig();\n const axes = this.axes();\n const keys = transformedData.map(d => d.key);\n const qualifiedClassName = getQualifiedClassName(defClassName, this.id(), config.classPrefix);\n const containerSelection = selectElement(container);\n const colorField = encoding.color.field;\n const colorFieldIndex = fieldsConfig[colorField] && fieldsConfig[colorField].index;\n\n this._points = [];\n this._pointMap = {};\n containerSelection.classed(qualifiedClassName.join(' '), true);\n containerSelection.classed(className, true);\n makeElement(container, 'g', normalizedData, null, {\n enter: (group) => {\n animateGroup(group, {\n transition,\n groupAnimateStyle: {\n enter: {\n 'stroke-opacity': 0,\n 'fill-opacity': this.getPathStyle()['fill-opacity']\n },\n update: {\n 'stroke-opacity': encoding.strokeOpacity.value\n }\n }\n });\n },\n update: (group, dataArr, i) => {\n points = this.translatePoints(dataArr, this.encodingFieldsInf(), axes, i);\n this._points.push(points);\n seriesClassName = `${qualifiedClassName[0]}-${keys[i] || i}`.toLowerCase();\n\n let color;\n const colorValFn = encoding.color.value;\n const colorVal = points.find(d => d._data[colorFieldIndex] !== null &&\n d._data[colorFieldIndex] !== undefined);\n\n if (colorValFn) {\n color = colorValFn(dataArr, i, normalizedData);\n } else {\n color = axes.color.getColor(colorVal && colorVal._data[colorFieldIndex]);\n }\n\n style = this.getPathStyle(color);\n this.getDrawFn()({\n layer: this,\n container: group.node(),\n interpolate,\n points,\n className: seriesClassName,\n transition,\n style: style || {},\n connectNullData: config.connectNullData\n });\n }\n }, d => d[0]._data[colorFieldIndex] || d[0]._id);\n\n attachDataToVoronoi(this._voronoi, this._points);\n return this;\n }\n\n /**\n * Get the css styles need to be applied on the line path\n * @param {string} color Color value\n * @return {Object} Path styles\n */\n getPathStyle (color) {\n return {\n stroke: color,\n 'fill-opacity': '0'\n };\n }\n\n /**\n * Gets the nearest point closest to the given position\n * @param {number} x x position\n * @param {number} y y position\n * @return {Object} Nearest point information\n */\n getNearestPoint (x, y, config) {\n let searchRadius = config.searchRadius;\n const data = this.data();\n\n if (!data || (data && data.isEmpty())) {\n return null;\n }\n\n searchRadius = searchRadius !== undefined ? searchRadius : this.config().nearestPointThreshold;\n const point = this._voronoi.find(x, y, searchRadius);\n const dimensions = getObjProp(point, 'data', 'data', 'update');\n\n if (point) {\n const { _data, _id } = point.data.data;\n const identifiers = this.getIdentifiersFromData(_data, _id);\n return {\n id: identifiers,\n dimensions: [{\n x: dimensions.x,\n y: dimensions.y,\n width: 2,\n height: 2\n }],\n layerId: this.id()\n };\n }\n return null;\n }\n}\n","import {\n easeFns,\n selectElement,\n pathInterpolators,\n Symbols\n} from 'muze-utils';\n\nconst area = Symbols.area;\n/**\n * Draws a line from the points\n * Generates a svg path string\n * @param {Object} params Contains container, points and interpolate attribute.\n */\nconst /* istanbul ignore next */ drawArea = (params) => {\n let filteredPoints;\n const { layer, container, points, style, transition, className, connectNullData, interpolate } = params;\n\n const { effect: easeEffect, duration } = transition;\n const mount = selectElement(container);\n const curveInterpolatorFn = pathInterpolators[interpolate];\n const selection = mount.selectAll('path').data([params.points]);\n const [enterAreaPath, updateAreaPath] = ['enter', 'update'].map(e => area().curve(curveInterpolatorFn)\n .x(d => d[e].x)\n .y1(d => d[e].y)\n .y0(d => d[e].y0)\n .defined(d => d[e].y !== null\n ));\n\n filteredPoints = points;\n mount.attr('class', className);\n if (connectNullData) {\n filteredPoints = points.filter(d => d.update.y !== null);\n }\n const selectionEnter = selection.enter().append('path').attr('d', enterAreaPath(filteredPoints));\n selection.merge(selectionEnter).transition().ease(easeFns[easeEffect])\n .duration(duration)\n .on('end', layer.registerAnimationDoneHook())\n .attr('d', updateAreaPath(filteredPoints))\n .each(function (d) {\n const element = selectElement(this);\n\n element.classed(d[0].className, true);\n Object.keys(style).forEach(key => element.style(key, style[key]));\n });\n};\n\nexport default drawArea;\n","import { FieldType, InvalidAwareTypes } from 'muze-utils';\nimport { defaultConfig } from './default-config';\nimport { LineLayer } from '../line';\nimport drawArea from './renderer';\nimport './styles.scss';\nimport { STACK, ENCODING } from '../../enums/constants';\nimport {\n getAxesScales,\n positionPoints,\n getLayerColor,\n getIndividualClassName,\n getValidTransformForAggFn\n} from '../../helpers';\n\n/**\n * Area layer renders a closed path. The mark type of this layer is ```area```. This layer can be used\n * to create stacked or multi-series areas and vertical range area plots by using the encoding properties.\n *\n * To create this layer using layer configuration from canvas,\n * ```\n * canvas.layers([{\n * mark: 'area',\n * transform: {\n * type: 'stack' // Produces a stacked area.\n * }\n * }]);\n * ```\n *\n * @public\n *\n * @class\n * @module AreaLayer\n * @extends LineLayer\n */\nexport default class AreaLayer extends LineLayer {\n /** oation of line layer\n * @return {Object} Default configuration of layer\n */\n static defaultConfig () {\n return defaultConfig;\n }\n\n /**\n *\n *\n * @static\n *\n * @memberof AreaLayer\n */\n static formalName () {\n return 'area';\n }\n\n /**\n * Calculates the domain from data. It calls its parent class's method which is line layer\n * to get the domain and overwrites the domain according to its need.\n * @return {Array} Domain values\n */\n calculateDomainFromData (data, encodingFieldsInf, fieldsConfig) {\n const domains = super.calculateDomainFromData(data, fieldsConfig);\n [ENCODING.X, ENCODING.Y].forEach((type) => {\n const { [`${type}FieldType`]: fieldType } = encodingFieldsInf;\n if (fieldType === FieldType.MEASURE && domains[type] !== undefined) {\n domains[type][0] = Math.min(domains[type][0], 0);\n }\n });\n return domains;\n }\n\n /**\n * Returns the drawing method of this layer\n * @return {Function} Draw method\n */\n getDrawFn () {\n return drawArea;\n }\n\n /**\n * Generates the x and y positions for each point\n * @param {Array} data Data Array\n * @param {Object} encoding Visual Encodings of the layer\n * @param {Object} axes Contains the axis\n * @return {Array} Array of points\n */\n translatePoints (data, encodingFieldsInf, axes) {\n let points = [];\n const transformType = this.transformType();\n const colorAxis = axes.color;\n const config = this.config();\n const encoding = config.encoding;\n const colorEncoding = encoding.color;\n const colorField = colorEncoding.field;\n const fieldsConfig = this.data().getFieldsConfig();\n const colorFieldIndex = colorField && fieldsConfig[colorField].index;\n const { xField, yField, y0Field } = encodingFieldsInf;\n const {\n xAxis,\n yAxis\n } = getAxesScales(axes);\n const classNameFn = config.individualClassName;\n const isXDim = fieldsConfig[xField] && fieldsConfig[xField].def.type === FieldType.DIMENSION;\n const isYDim = fieldsConfig[yField] && fieldsConfig[yField].def.type === FieldType.DIMENSION;\n const key = isXDim ? 'x' : (isYDim ? 'y' : null);\n points = data.map((d, i) => {\n const xPx = xAxis.getScaleValue(d.x) + xAxis.getUnitWidth() / 2;\n const yPx = yAxis.getScaleValue(d.y);\n const y0Px = (y0Field || transformType === STACK) ? yAxis.getScaleValue(d.y0) : yAxis.getScaleValue(0);\n const { color, rawColor } = getLayerColor({ datum: d, index: i }, {\n colorEncoding, colorAxis, colorFieldIndex });\n const style = {};\n const meta = {};\n style.fill = color;\n // style['fill-opacity'] = 0;\n meta.stateColor = {};\n meta.originalColor = rawColor;\n meta.colorTransform = {};\n const invalidY = d.y instanceof InvalidAwareTypes;\n const invalidY0 = d.y0 instanceof InvalidAwareTypes;\n const point = {\n enter: {\n x: xPx,\n y: invalidY ? null : yAxis.getScaleValue(0),\n y0: invalidY0 ? null : yAxis.getScaleValue(0)\n },\n update: {\n x: xPx,\n y: invalidY ? null : yPx,\n y0: invalidY0 ? null : y0Px\n },\n _id: d._id,\n _data: d._data,\n source: d._data,\n rowId: d._id,\n className: classNameFn ? classNameFn(d, i, data, this) : '',\n style,\n meta\n };\n point.className = getIndividualClassName(d, i, data, this);\n this.cachePoint(d[key], point);\n return point;\n });\n points = positionPoints(this, points);\n return points;\n }\n\n resolveTransformType () {\n this._transformType = getValidTransformForAggFn(this);\n }\n\n /**\n * Get the css styles need to be applied on the line path\n * @param {string} color Color value\n * @return {Object} Path styles\n */\n getPathStyle (color) {\n return {\n fill: color\n };\n }\n}\n\n","import { CLASSPREFIX } from '../../enums/constants';\n\nexport const defaultConfig = {\n classPrefix: CLASSPREFIX,\n defClassName: 'layer-arc',\n padding: { top: 1, bottom: 1, left: 1, right: 1 },\n className: '',\n minOuterRadius: 10,\n interaction: {\n highlight: [{\n type: 'fill',\n intensity: [0, 0, -15, 0]\n }],\n fade: [{\n type: 'fill',\n intensity: [0, 0, +15, 0]\n }],\n focus: [{\n type: 'fill',\n intensity: [0, 0, +15, 0]\n }]\n },\n height: 100,\n width: 100,\n sort: '',\n cornerRadius: 0,\n padAngle: 0,\n padRadius: 0,\n startAngle: 0,\n endAngle: 360,\n colors: ['#F44336', 'blue', 'green', 'yellow', 'orange', 'purple'],\n transform: {\n type: 'identity'\n },\n encoding: {\n 'stroke-width': {\n value: '2px'\n },\n 'stroke-linejoin': {\n value: 'round'\n },\n angle: {\n value: '1'\n },\n radius: {\n value: '1'\n },\n opacity: {\n value: '1'\n },\n color: {\n value: '1'\n },\n shape: {\n value: '1'\n },\n size: {\n value: '1'\n }\n },\n innerRadiusFixer: 10,\n transition: {\n effect: 'cubic',\n duration: 500\n },\n states: {\n highlight: {\n className: `${CLASSPREFIX}-layer-arc-highlight`\n },\n fadeout: {\n className: `${CLASSPREFIX}-layer-arc-fadeout`\n },\n selected: {\n className: `${CLASSPREFIX}-layer-arc-selected`\n }\n }\n};\n\n","import {\n makeElement,\n selectElement,\n getQualifiedClassName,\n isSimpleObject,\n getDomainFromData,\n Symbols,\n FieldType,\n ReservedFields,\n STATE_NAMESPACES\n} from 'muze-utils';\nimport { defaultConfig } from './default-config';\nimport { BaseLayer } from '../../base-layer';\nimport { ASCENDING, OUTER_RADIUS_VALUE } from '../../enums/constants';\nimport { getIndividualClassName } from '../../helpers';\nimport { getRangeValue, getRadiusRange, tweenPie, tweenExitPie, getFieldIndices, getPreviousPoint } from './arc-helper';\nimport './styles.scss';\n\nconst pie = Symbols.pie;\nconst arc = Symbols.arc;\n\n/**\n * Arc Layer creates a plot with polar coordinates.\n *\n * @public\n *\n * @class\n * @module ArcLayer\n * @extends BaseLayer\n */\nexport default class ArcLayer extends BaseLayer {\n\n constructor (data, axes, config, dependencies) {\n super(data, axes, config, dependencies);\n this._prevPieData = {};\n }\n\n /**\n * returns the default configuration of the layer\n *\n * @static\n * @return {Object} Default configuration for arc layer\n * @memberof ArcLayer\n */\n static defaultConfig () {\n return defaultConfig;\n }\n\n /**\n *\n *\n * @static\n *\n * @memberof ArcLayer\n */\n static formalName () {\n return 'arc';\n }\n\n /**\n *\n *\n *\n * @memberof ArcLayer\n */\n elemType () {\n return 'path';\n }\n\n /**\n * Transforms data in the appropriate data structure to be consumed by the layer for rendering\n *\n * @param {Object} data data model associated with the layer\n * @param {Object} config configuration of the layer that contains encoding and other parameters\n * @return {Object} Transformed pie data\n * @memberof ArcLayer\n */\n getTransformedData (dataModel, config) {\n let pieData = [];\n const pieIndex = {};\n const {\n startAngle,\n endAngle,\n encoding,\n sort,\n minOuterRadius\n } = config;\n const prevData = this._transformedData || [];\n const fieldsConfig = this.data().getFieldsConfig();\n const {\n angleIndex,\n sizeIndex,\n radiusIndex,\n colorIndex\n } = getFieldIndices(encoding, fieldsConfig);\n const dataVal = dataModel.getData();\n const data = dataVal.data;\n const uids = dataVal.uids;\n\n this._prevPieData = {};\n\n prevData.forEach((e, index) => {\n this._prevPieData[e.uid] = [e, index];\n pieIndex[e.index] = e;\n });\n // Creating pie data using angle field provided. If the angle field is a dimension,\n // all the angles will be equal(360/number of dimensions)\n\n pieData = pie()\n .startAngle((startAngle / 180) * Math.PI)\n .endAngle(Math.PI * endAngle / 180)\n .value(d => d[angleIndex] || 1)\n .sortValues(null);\n\n sort.length && radiusIndex && pieData.sort((a, b) => {\n if (sort === ASCENDING) {\n return a[radiusIndex] - b[radiusIndex];\n } return b[radiusIndex] - a[radiusIndex];\n });\n const sizeVal = data.reduce((acc, d) => acc + (d[sizeIndex] || 0), 1);\n\n // Adding the radius field values to each data point in pie data\n pieData = pieData(data).map((d, i) => {\n d.outerRadiusValue = data[i][radiusIndex] || minOuterRadius;\n d.innerRadius = config.innerRadius;\n d.colorVal = data[i][colorIndex];\n d.angleVal = data[i][angleIndex];\n d.sizeVal = sizeVal;\n d.uid = uids[i];\n d.rowId = d.uid;\n d.source = data[i];\n d._previousInfo = this._prevPieData[d.uid] ? this._prevPieData[d.uid][0] :\n getPreviousPoint(pieIndex, d.index, config);\n return d;\n });\n return pieData;\n }\n\n /**\n * Returns normalized data after transformation (it is the same in the case of pie layer)\n *\n * @param {Object} data transformed data\n * @return {Object} normalized data\n * @memberof ArcLayer\n */\n getNormalizedData (data) {\n return data;\n }\n\n /**\n *\n *\n * @param {Object} data\n * @return {}\n * @memberof ArcLayer\n */\n calculateDomainFromData (data) {\n const domainKey = OUTER_RADIUS_VALUE;\n return {\n radius: getDomainFromData([data], [domainKey, domainKey])\n };\n }\n\n /**\n *\n *\n * @param {Object} x\n * @param {Object} y\n * @return {}\n * @memberof ArcLayer\n */\n getNearestPoint (x, y, config = {}) {\n const dataPoint = selectElement(config.event.target).data()[0];\n if (isSimpleObject(dataPoint)) {\n const { data, uid } = dataPoint.datum;\n return {\n id: this.getIdentifiersFromData(data, uid),\n layerId: this.id()\n };\n }\n return null;\n }\n\n /**\n *\n *\n * @param {*} set\n *\n * @memberof ArcLayer\n */\n getPlotElementsFromSet (set) {\n return selectElement(this.mount()).selectAll(this.elemType()).filter(d => set.indexOf(d.datum.uid) !== -1);\n }\n\n /**\n *\n *\n * @param {Object} container\n * @return {}\n * @memberof ArcLayer\n */\n render (container) {\n const {\n height,\n width\n } = this.measurement();\n const {\n classPrefix,\n defClassName,\n minOuterRadius,\n innerRadius,\n outerRadius,\n cornerRadius,\n padAngle,\n padRadius,\n padding,\n transition,\n innerRadiusFixer\n } = this.config();\n const sizeAxis = this.axes().size;\n const transformedData = this._transformedData;\n const chartHeight = height - padding.top - padding.bottom;\n const chartWidth = width - padding.left - padding.right;\n const qualClassName = getQualifiedClassName(defClassName, this.id(), classPrefix);\n // Sets range for radius\n const range = getRadiusRange(chartWidth, chartHeight, {\n minOuterRadius,\n innerRadius,\n outerRadius,\n innerRadiusFixer\n });\n const colorAxis = this.axes().color;\n const defaultRadius = outerRadius || Math.min(chartHeight, chartWidth) / 2;\n const radiusDomain = this.domain().radius;\n const rangeValueGetter = d => getRangeValue(d, range, radiusDomain, defaultRadius, sizeAxis);\n // This returns a function that generates the arc path based on the datum provided\n const path = arc()\n // .outerRadius(d => rangeValueGetter(d))\n .innerRadius(innerRadius ? Math.min(chartHeight / 2, chartWidth / 2, innerRadius) : 0)\n .cornerRadius(cornerRadius)\n .padAngle(padAngle)\n .padRadius(padRadius);\n this._chartWidth = chartWidth;\n this._chartHeight = chartHeight;\n // Creating the group that holds all the arcs\n const g = makeElement(selectElement(container), 'g', [1], `${qualClassName[0]}-group`)\n .classed(`${qualClassName[1]}-group`, true)\n .attr('transform', `translate(${chartWidth / 2},${chartHeight / 2})`);\n const tween = (elem) => {\n makeElement(elem, 'path', (d, i) => [{\n datum: d,\n index: i,\n arcFn: path,\n meta: {\n originalColor: colorAxis.getRawColor(d.colorVal),\n stateColor: {},\n colorTransform: {}\n }\n }], `${qualClassName[0]}-path`)\n .style('fill', d => colorAxis.getColor(d.datum.colorVal))\n .transition()\n .duration(transition.duration)\n .on('end', this.registerAnimationDoneHook())\n .attrTween('d', (...params) => tweenPie(path, rangeValueGetter, params))\n .attr('class', (d, i) => {\n const individualClass = getIndividualClassName(d, i, transformedData, this);\n return `${qualClassName[0]}-path ${qualClassName[1]}-path-${d.index}\n ${individualClass}`;\n });\n };\n const consecutiveExits = [];\n let exitCounter = 0;\n const tweenExit = (elem, d) => {\n let exitArr = consecutiveExits[exitCounter];\n const oldExitCounter = exitCounter;\n if (!exitArr) {\n exitArr = [{ elem, datum: d }];\n } else if (exitArr[exitArr.length - 1].datum.index === d.index - 1) {\n exitArr.push({ elem, datum: d });\n } else {\n exitCounter++;\n }\n consecutiveExits[oldExitCounter] = exitArr;\n };\n // Creating groups for all the arcs present individually\n makeElement(g, 'g', transformedData, `${qualClassName[0]}`,\n {\n update: tween,\n exit: tweenExit\n })\n .attr('class', (d, i) => `${qualClassName[0]} ${qualClassName[1]}-${i}`);\n tweenExitPie(consecutiveExits, transition, rangeValueGetter, path);\n return this;\n }\n\n /**\n *\n *\n * @param {*} identifiers\n *\n * @memberof BaseLayer\n */\n getPointsFromIdentifiers (identifiers) {\n if (!this.data()) {\n return [];\n }\n const fieldNames = identifiers[0];\n const values = identifiers.slice(1, identifiers.length);\n const pieSlices = selectElement(this.mount()).selectAll('path').data();\n const fieldsConfig = this.data().getFieldsConfig();\n\n const filteredPies = pieSlices.filter((tData) => {\n const data = tData.datum.data;\n const uid = tData.datum.uid;\n return fieldNames.every((field, idx) => {\n if (field in fieldsConfig && fieldsConfig[field].def.type === FieldType.DIMENSION) {\n return values.findIndex(d => d[idx] === data[fieldsConfig[field].index]) !== -1;\n } else if (field === ReservedFields.ROW_ID) {\n return values.findIndex(d => d[idx] === uid) !== -1;\n } return true;\n });\n });\n\n const pieSliceInf = filteredPies[0];\n if (pieSliceInf) {\n const centroid = pieSliceInf.arcFn.centroid(pieSliceInf.datum);\n return [{\n x: centroid[0] + this._chartWidth / 2,\n y: centroid[1] + this._chartHeight / 2,\n width: 2,\n height: 2\n }];\n }\n return [];\n }\n\n getRenderProps () {\n return [`${STATE_NAMESPACES.GROUP_GLOBAL_NAMESPACE}.domain.radius`];\n }\n}\n","import { getObjProp, interpolator, FieldType, selectElement } from 'muze-utils';\nimport { ANGLE, RADIUS, SIZE, COLOR } from '../../enums/constants';\n\n/**\n * Returns the range value from a value inside the domain\n *\n * @param {Object} domainValue Value whose range has to be returned\n * @return {number} range value\n * @memberof ArcLayer\n */\nexport const getRangeValue = (datum, range, domain, defaultRadius, sizeAxis) => {\n let domainMultiplier = 1;\n const {\n outerRadiusValue,\n sizeVal\n } = datum;\n const sizeAxisDomain = sizeAxis.domain();\n const sizeMultiplier = sizeAxis.getSize(sizeVal) / (sizeAxisDomain ? sizeAxis.range()[1] : sizeAxis.config().value);\n\n domainMultiplier *= (range[1] - range[0]) / (domain[1] - domain[0]);\n const rangeVal = (range[0] + (outerRadiusValue - domain[0]) * domainMultiplier);\n return (rangeVal || defaultRadius) * sizeMultiplier;\n};\n\n/**\n *\n *\n * @memberof ArcLayer\n */\nexport const getRadiusRange = (width, height, config) => {\n const {\n minOuterRadius,\n innerRadius,\n outerRadius,\n innerRadiusFixer\n } = config;\n\n return [Math.max((innerRadius + innerRadiusFixer || 0), minOuterRadius), outerRadius || Math.min(height,\n width) / 2];\n};\nexport const getPreviousPoint = (prevData, currIndex, config) => {\n const prevArc = prevData[currIndex - 1];\n const nextArc = prevData[currIndex];\n\n if (prevArc && nextArc) {\n return {\n startAngle: prevArc.endAngle,\n endAngle: nextArc.startAngle\n };\n } else if (!nextArc) {\n return {\n startAngle: config.endAngle * Math.PI * 2 / 360,\n endAngle: config.endAngle * Math.PI * 2 / 360\n };\n }\n return {\n startAngle: config.startAngle * Math.PI * 2 / 360,\n endAngle: config.startAngle * Math.PI * 2 / 360\n };\n};\n\n/**\n *\n *\n * @param {*} path\n * @param {*} b\n *\n * @memberof ArcLayer\n */\nexport const tweenPie = (path, rangeValueGetter, b) => {\n const { datum } = b[0];\n const outerRadius = rangeValueGetter(datum);\n datum.outerRadius = outerRadius;\n datum._previousInfo.outerRadius = datum._previousInfo.outerRadius || outerRadius;\n return function (t) {\n return path(interpolator()(datum._previousInfo, datum)(t));\n };\n};\n\n/**\n *\n *\n * @param {*} path\n * @param {*} b\n *\n * @memberof ArcLayer\n */\nexport const tweenExitPie = (consecutiveExits, transition, rangeValueGetter, path) => {\n if (consecutiveExits.length > 0) {\n consecutiveExits.forEach((consecutiveExitArr) => {\n const startAngle = consecutiveExitArr[0].datum.startAngle;\n const endAngle = consecutiveExitArr[consecutiveExitArr.length - 1].datum.endAngle;\n const mid = (Math.PI * 2 * startAngle) / ((Math.PI * 2) + startAngle - endAngle);\n\n consecutiveExitArr.forEach((e) => {\n const { elem, datum } = e;\n\n elem.each(function () {\n const gElem = selectElement(this);\n gElem.selectAll('path')\n .transition()\n .duration(transition.duration)\n .attrTween('d', () => function (t) {\n const outerRadius = rangeValueGetter(datum);\n datum.outerRadius = outerRadius;\n return path(interpolator()(datum, {\n startAngle: mid,\n endAngle: mid,\n outerRadius\n })(t));\n })\n .remove();\n gElem.remove();\n });\n });\n });\n }\n};\n\nexport const getFieldIndices = (encoding, fieldsConfig) => {\n const [angleField, radiusField, colorField, sizeField] = [ANGLE, RADIUS, COLOR, SIZE]\n .map(e => encoding[e].field);\n const [angleIndex, sizeIndex, radiusIndex] = [angleField, sizeField, radiusField]\n .map((e) => {\n const conf = fieldsConfig[e];\n if (conf && conf.def.type === FieldType.MEASURE) {\n return conf.index;\n }\n return null;\n });\n const colorIndex = getObjProp(fieldsConfig, colorField, 'index');\n return {\n angleIndex,\n sizeIndex,\n radiusIndex,\n colorIndex\n };\n};\n","import {\n setAttrs,\n setStyles,\n selectElement,\n makeElement,\n getSmartComputedStyle\n} from 'muze-utils';\n\n/**\n * Draws svg text in the specified container.\n * @param {SVGElement} container Container where labels will be appended.\n * @param {Array.} data Data of the elements.\n * @return {Selection} d3 selection of the elements.\n */\nconst drawText = (container, data, config, smartLabel) => {\n const selection = selectElement(container).selectAll('g').data(data);\n\n const selectionMerge = selection.enter().append('g')\n .each(function (dataObj) {\n setAttrs(this, dataObj.enter);\n })\n .merge(selection);\n const style = getSmartComputedStyle(selectElement(container), config.className);\n const fontSize = parseInt(style.fontSize, 10);\n\n smartLabel.setStyle(style);\n selectionMerge.each(function (dataObj) {\n const element = selectElement(this);\n const { update, text, color, textanchor, style: textStyle } = dataObj;\n const background = dataObj.background;\n let backgroundVal;\n if (backgroundVal = background.value) {\n const backgroundPadding = background.padding;\n let diff;\n const { width, height } = smartLabel.getOriSize(dataObj.text);\n const backgroundEl = makeElement(element, 'rect', [1]);\n\n if (textanchor === 'end') {\n diff = width;\n } else if (textanchor === 'start') {\n diff = 0;\n } else {\n diff = width / 2;\n }\n\n setAttrs(backgroundEl.node(), {\n x: update.x - diff - backgroundPadding / 2,\n y: update.y - fontSize - backgroundPadding / 2,\n width: width + backgroundPadding,\n height: height + backgroundPadding\n });\n background && setStyles(backgroundEl, {\n background: backgroundVal\n });\n }\n const textEl = makeElement(element, 'text', d => [d]).text(text);\n const textNode = textEl.node();\n textStyle && setStyles(textNode, textStyle);\n color && setStyles(textNode, {\n fill: color\n });\n dataObj.className && textEl.classed(dataObj.className, true);\n setAttrs(textNode, update);\n textEl.attr('text-anchor', textanchor);\n });\n selection.exit().remove();\n return selection;\n};\n\nexport default drawText;\n","import { CLASSPREFIX } from '../../enums/constants';\n\nexport const defaultConfig = {\n defClassName: 'layer-text',\n classPrefix: CLASSPREFIX,\n className: '',\n transform: {\n type: 'identity'\n },\n interaction: {\n highlight: [{\n type: 'fill',\n intensity: [0, 0, -15, 0]\n }],\n fade: [{\n type: 'fill',\n intensity: [0, 0, +15, 0]\n }],\n focus: [{\n type: 'fill',\n intensity: [0, 0, +15, 0]\n }]\n },\n transition: {\n effect: 'cubic',\n duration: 1000\n },\n encoding: {\n color: {},\n text: {\n value: '',\n formatter: (val, i, data, context) => {\n const valueParser = context.valueParser();\n return valueParser(val);\n },\n background: {\n padding: 10\n }\n }\n },\n states: {\n highlight: {\n className: `${CLASSPREFIX}-layer-text-highlight`\n },\n fadeout: {\n className: `${CLASSPREFIX}-layer-text-fadeout`\n },\n selected: {\n className: `${CLASSPREFIX}-layer-text-selected`\n }\n }\n};\n","import {\n getQualifiedClassName,\n selectElement,\n setStyles,\n createElements\n} from 'muze-utils';\nimport { BaseLayer } from '../../base-layer';\nimport drawText from './renderer';\nimport { defaultConfig } from './default-config';\nimport { getLayerColor, positionPoints, getIndividualClassName } from '../../helpers';\nimport { TEXT_ANCHOR_MIDDLE, ENCODING } from '../../enums/constants';\n\nimport './styles.scss';\n\n/**\n * This layer is used to create labels for each data point. It has an encoding property ```text```\n * which determines from which field's data the value of the label will be taken. The text encoding\n * property is necessary for the layer to render the text.The mark type of this layer is ```text```.\n *\n * @public\n *\n * @class\n * @module TextLayer\n * @extends BaseLayer\n */\nexport default class TextLayer extends BaseLayer {\n /**\n * Returns the default configuration of the text layer\n * @return {Object} Default configuration of the text layer\n */\n static defaultConfig () {\n return defaultConfig;\n }\n\n static formalName () {\n return 'text';\n }\n\n elemType () {\n return 'text';\n }\n\n /**\n * Generates an array of objects containing x, y, width and height of the points from the data\n * @param {Array.} data Data Array\n * @param {Object} encoding Config\n * @param {Object} axes Axes object\n * @return {Array.} Array of points\n */\n translatePoints (data, encoding, axes) {\n let points = [];\n const colorAxis = axes.color;\n const textEncoding = encoding.text;\n const { field: textField, value, formatter: textFormatter } = textEncoding;\n const colorEncoding = encoding.color;\n const colorField = colorEncoding && colorEncoding.field;\n const fieldsConfig = this.data().getFieldsConfig();\n\n const backgroundEncoding = encoding.text.background;\n const backgroundPadding = backgroundEncoding.padding;\n const backgroundValue = backgroundEncoding.value;\n const colorFieldIndex = fieldsConfig[colorField] ? fieldsConfig[colorField].index : -1;\n const textFieldIndex = textField ? fieldsConfig[textField] && fieldsConfig[textField].index : -1;\n const xEnc = ENCODING.X;\n const yEnc = ENCODING.Y;\n for (let i = 0, len = data.length; i < len; i++) {\n const d = data[i];\n const row = d._data;\n const textValue = textField ? row[textFieldIndex] : value;\n\n const [xPx, yPx] = [xEnc, yEnc].map(type => (axes[type] ? axes[type].getScaleValue(d[type]) +\n axes[type].getUnitWidth() / 2 : 0));\n\n const { color, rawColor } = getLayerColor({ datum: d, index: i },\n { colorEncoding, colorAxis, colorFieldIndex });\n\n const point = {\n enter: {},\n update: {\n x: xPx,\n y: yPx\n },\n text: textFormatter(textValue, i, data, this),\n color,\n background: {\n value: backgroundValue instanceof Function ? backgroundValue(d, i, data, this) : null,\n padding: backgroundPadding\n },\n meta: {\n stateColor: {},\n originalColor: rawColor,\n colorTransform: {}\n },\n style: {},\n _data: row,\n _id: d._id,\n source: d._data,\n rowId: d._id\n };\n\n point.className = getIndividualClassName(d, i, data, this);\n points.push(point);\n }\n\n points = positionPoints(this, points);\n points = points.filter((d) => {\n const update = d.update;\n return !isNaN(update.x) && !isNaN(update.y);\n });\n return points;\n }\n\n /**\n * Renders the plot in the given container\n * @param {SVGElement} container SVGElement which will hold the plot\n * @return {textLayer} Instance of text layer\n */\n render (container) {\n let points;\n const config = this.config();\n const encoding = config.encoding;\n const normalizedData = this._normalizedData;\n const className = config.className;\n const qualifiedClassName = getQualifiedClassName(config.defClassName, this.id(), config.classPrefix);\n const axes = this.axes();\n const containerSelection = selectElement(container);\n\n containerSelection.classed(`${qualifiedClassName.join(' ')} ${className}`, true);\n createElements({\n data: normalizedData,\n append: 'g',\n selector: 'g',\n container,\n each: (dataArr, group, i) => {\n const node = group.node();\n points = this.translatePoints(dataArr, encoding, axes, i);\n setStyles(node, {\n 'text-anchor': TEXT_ANCHOR_MIDDLE\n });\n drawText(node, points, {\n className: qualifiedClassName[0]\n }, this._dependencies.smartLabel);\n }\n });\n return this;\n }\n}\n","/* global Element, document */\nimport {\n makeElement,\n selectElement,\n easeFns,\n objectIterator,\n getSymbol\n} from 'muze-utils';\n\n/**\n *\n *\n * @param {*} str\n *\n */\nconst checkPath = (str) => {\n if (/^[mzlhvcsqta]\\s*[-+.0-9][^mlhvzcsqta]+/i.test(str) && /[\\dz]$/i.test(str) && str.length > 4) {\n return true;\n }\n return false;\n};\n\n/**\n *\n *\n * @param {*} d\n * @param {*} elem\n */\nconst createShape = function (d, groupElement) {\n const { shape, size, update } = d;\n\n if (shape instanceof Promise) {\n shape.then((res) => {\n d.shape = res;\n createShape(d, groupElement);\n });\n } else if (shape instanceof Element) {\n let newShape = shape.cloneNode(true);\n\n if (newShape.nodeName.toLowerCase() === 'img') {\n const src = newShape.src || newShape.href;\n newShape = document.createElementNS('http://www.w3.org/2000/svg', 'image');\n newShape.setAttribute('href', src);\n }\n const shapeElement = selectElement(newShape);\n if (newShape.nodeName === 'path' || newShape.nodeName === 'image') {\n shapeElement.attr('transform', `scale(${size / 100})`);\n } else {\n shapeElement.attr('height', size);\n shapeElement.attr('width', size);\n }\n shapeElement.attr('x', -size / 2);\n shapeElement.attr('y', -size / 2);\n makeElement(groupElement, () => newShape, [1]);\n } else if (typeof shape === 'string') {\n let pathStr;\n if (checkPath(shape)) {\n pathStr = shape;\n } else {\n pathStr = getSymbol(shape).size(size)(update);\n }\n makeElement(groupElement, 'path', data => [data]).attr('d', pathStr);\n } else {\n d.shape = 'circle';\n createShape(d, groupElement);\n }\n};\n\n/**\n * Draws symbols using d3 symbol api\n * @param {Object} params Contains the svg container, points and other symbol related attributes.\n */\n/* istanbul ignore next */ const drawSymbols = (params) => {\n const { layer, container, points, transition, className } = params;\n const { duration, effect, disabled } = transition;\n const mount = selectElement(container);\n\n mount.attr('class', className);\n return makeElement(mount, 'g', points, null, {\n enter: (group, d) => {\n const { enter } = d;\n group.attr('transform', `translate(${enter.x},${enter.y})`);\n },\n update: (group, d) => {\n createShape(d, group);\n const { update, style } = d;\n objectIterator(style, key => group.style(key, style[key]));\n group.attr('class', className);\n group.classed(d.className, true);\n if (!disabled) {\n group = group.transition()\n .duration(transition.duration)\n .on('end', layer.registerAnimationDoneHook());\n }\n group.attr('transform', `translate(${update.x},${update.y})`);\n },\n exit: (exitGroup) => {\n if (!disabled) {\n exitGroup.transition().ease(easeFns[effect])\n .duration(duration)\n .on('end', () => exitGroup.remove())\n .style('fill-opacity', 0)\n .style('stroke-opacity', 0);\n } else {\n exitGroup.remove();\n }\n }\n }, params.keyFn);\n};\n\nexport default drawSymbols;\n","import { CLASSPREFIX } from '../../enums/constants';\n\nexport const defaultConfig = {\n defClassName: 'layer-point',\n className: '',\n classPrefix: CLASSPREFIX,\n defColorStyle: 'stroke',\n interaction: {\n highlight: [{\n type: 'fill',\n intensity: [0, 0, -20, 0]\n }],\n fade: [{\n type: 'fill',\n intensity: [0, 0, +20, 0]\n }],\n focus: [{\n type: 'fill',\n intensity: [0, 0, +20, 0]\n }\n ]\n },\n innerPadding: 0.1,\n nearestPointThreshold: 10,\n transform: {\n type: 'identity'\n },\n transition: {\n effect: 'cubic',\n duration: 1000\n },\n encoding: {\n size: {\n value: 30\n },\n color: { },\n shape: {\n value: 'circle'\n },\n x: {},\n y: {},\n strokeOpacity: {\n value: 0.5\n },\n fillOpacity: {\n value: 0.5\n }\n },\n shapes: ['circle', 'cross', 'diamond', 'square', 'star', 'wye', 'triangle'],\n sizes: [20, 30, 40, 50, 60, 70]\n};\n","import {\n Voronoi,\n selectElement,\n getQualifiedClassName,\n makeElement,\n FieldType,\n Scales\n} from 'muze-utils';\nimport { BaseLayer } from '../../base-layer';\nimport drawSymbols from './renderer';\nimport { defaultConfig } from './default-config';\nimport { ENCODING } from '../../enums/constants';\nimport {\n attachDataToVoronoi,\n getLayerColor,\n positionPoints,\n getPlotMeasurement,\n getIndividualClassName,\n getMarkId\n} from '../../helpers';\n\nimport './styles.scss';\n\n/**\n * This layer is used to create various symbols for each data point. This is commonly used in\n * scatterplot visualizations. The mark type of this layer is ```point```.\n *\n * @public\n *\n * @class\n * @module PointLayer\n * @extends BaseLayer\n */\nexport default class PointLayer extends BaseLayer {\n\n /**\n * Creates an instance of PointLayer.\n * @param {*} args\n * @memberof PointLayer\n */\n constructor (...args) {\n super(...args);\n this._voronoi = new Voronoi();\n this._bandScale = Scales.band();\n }\n\n /**\n *\n *\n *\n * @memberof PointLayer\n */\n elemType () {\n return 'g';\n }\n\n /**\n * Returns the default configuration of the point layer\n * @return {Object} Default configuration of the point layer\n */\n static defaultConfig () {\n return defaultConfig;\n }\n\n static defaultPolicy (conf, userConf) {\n const config = BaseLayer.defaultPolicy(conf, userConf);\n const encoding = config.encoding;\n const transform = config.transform;\n const colorField = encoding.color && encoding.color.field;\n\n if (colorField) {\n transform.groupBy = colorField;\n }\n return config;\n }\n\n /**\n *\n *\n * @static\n *\n * @memberof PointLayer\n */\n static formalName () {\n return 'point';\n }\n\n /**\n *\n *\n * @static\n *\n * @memberof PointLayer\n */\n static drawFn () {\n return drawSymbols;\n }\n\n /**\n * Generates an array of objects containing x, y, width and height of the points from the data\n * @param {Array.} data Data Array\n * @param {Object} encoding Config\n * @param {Object} axes Axes object\n * @return {Array.} Array of points\n */\n translatePoints (data, encoding, axes, config = {}) {\n let points = [];\n const {\n size: sizeEncoding,\n shape: shapeEncoding,\n color: colorEncoding,\n x,\n y\n } = encoding;\n const sizeField = sizeEncoding.field;\n const sizeValue = sizeEncoding.value;\n const shapeField = shapeEncoding.field;\n const xField = x.field;\n const yField = y.field;\n const { size: sizeAxis, shape: shapeAxis } = axes;\n const fieldsConfig = this.data().getFieldsConfig();\n const isXDim = fieldsConfig[xField] && fieldsConfig[xField].def.type === FieldType.DIMENSION;\n const isYDim = fieldsConfig[yField] && fieldsConfig[yField].def.type === FieldType.DIMENSION;\n const key = isXDim ? ENCODING.X : (isYDim ? ENCODING.Y : null);\n const colorField = colorEncoding && colorEncoding.field;\n const colorFieldIndex = fieldsConfig[colorField] && fieldsConfig[colorField].index;\n const measurement = this.measurement();\n const shapeFieldIndex = fieldsConfig[shapeField] && fieldsConfig[shapeField].index;\n const sizeFieldIndex = fieldsConfig[sizeField] && fieldsConfig[sizeField].index;\n const colorAxis = axes.color;\n const { x: offsetX, y: offsetY } = config.offset;\n\n for (let i = 0, len = data.length; i < len; i++) {\n const d = data[i];\n const row = d._data;\n const size = sizeValue instanceof Function ? sizeValue(d, i) : sizeAxis.getSize(row[sizeFieldIndex]);\n const shape = shapeAxis.getShape(row[shapeFieldIndex]);\n\n let [xPx, yPx] = [ENCODING.X, ENCODING.Y].map((type) => {\n const value = d[type] === null ? undefined : d[type];\n const measure = type === ENCODING.X ? measurement.width : measurement.height;\n return !encoding[type].field ? measure / 2 : axes[type].getScaleValue(value);\n });\n\n xPx += offsetX;\n yPx += offsetY;\n\n const { color, rawColor } = getLayerColor({ datum: d, index: i },\n { colorEncoding, colorAxis, colorFieldIndex });\n\n const style = {\n fill: color,\n stroke: color\n };\n\n if (!isNaN(xPx) && !isNaN(yPx)) {\n const point = {\n enter: {\n x: xPx,\n y: yPx\n },\n update: {\n x: xPx,\n y: yPx\n },\n shape,\n size: Math.abs(size),\n meta: {\n stateColor: {},\n originalColor: rawColor,\n colorTransform: {}\n },\n style,\n _data: row,\n _id: d._id,\n source: d._data,\n rowId: d._id\n };\n point.className = getIndividualClassName(d, i, data, this);\n points.push(point);\n this.cachePoint(d[key], point);\n }\n }\n points = positionPoints(this, points);\n return points;\n }\n\n /**\n * Renders the plot in the given container.\n *\n * @param {SVGElement} container SVGElement which will hold the plot\n * @return {BarLayer} Instance of bar layer\n */\n render (container) {\n let maxSize = 0;\n let seriesClassName;\n const config = this.config();\n const keys = this._transformedData.map(d => d.key);\n const { transition, className, defClassName, classPrefix } = config;\n const normalizedData = this._normalizedData;\n const containerSelection = selectElement(container);\n const qualifiedClassName = getQualifiedClassName(defClassName, this.id(), classPrefix);\n this._points = [];\n this._pointMap = {};\n\n containerSelection.classed(qualifiedClassName.join(' '), true).classed(className, true);\n\n this._points = this.generateDataPoints(normalizedData, keys);\n const schema = this.data().getSchema();\n makeElement(container, 'g', this._points, null, {\n update: (group, points) => {\n maxSize = Math.max(maxSize, ...points.map(d => d.size));\n seriesClassName = `${qualifiedClassName[0]}`;\n this.constructor.drawFn()({\n layer: this,\n container: group.node(),\n points,\n className: seriesClassName,\n transition,\n keyFn: v => getMarkId(v.source, schema)\n });\n }\n }, data => data[0]._id);\n this._maxSize = Math.sqrt(maxSize / Math.PI) * 2;\n attachDataToVoronoi(this._voronoi, this._points);\n return this;\n }\n\n generateDataPoints (normalizedData, keys) {\n const encoding = this.config().encoding;\n const axes = this.axes();\n const [widthMetrics, heightMetrics] = getPlotMeasurement(this, keys);\n const offsetXValues = widthMetrics.offsetValues || [];\n const offsetYValues = heightMetrics.offsetValues || [];\n return normalizedData.map((dataArr, i) => {\n const measurementConf = this.getMeasurementConfig(offsetXValues[i], offsetYValues[i], widthMetrics.span,\n heightMetrics.span);\n return this.translatePoints(dataArr, encoding, axes, measurementConf);\n }).filter(d => d.length);\n }\n\n getMeasurementConfig (offsetX, offsetY, widthSpan, heightSpan) {\n return {\n offset: {\n x: (offsetX || 0) + widthSpan / 2,\n y: (offsetY || 0) + heightSpan / 2\n },\n span: {\n x: widthSpan,\n y: heightSpan\n }\n };\n }\n\n /**\n * Gets the nearest point from a position.\n * @param {number} x x position\n * @param {number} y y position\n * @return {Object} Point details\n */\n getNearestPoint (x, y) {\n const distanceLimit = Math.max(this._maxSize, this.config().nearestPointThreshold);\n\n if (!this.data()) {\n return null;\n }\n\n const point = this._voronoi.find(x, y, distanceLimit);\n const dimensions = point && point.data.data.update;\n const radius = point ? Math.sqrt(point.data.data.size / Math.PI) : 0;\n\n if (point) {\n const { _data, _id } = point.data.data;\n const identifiers = this.getIdentifiersFromData(_data, _id);\n return {\n id: identifiers,\n dimensions: [{\n x: dimensions.x,\n y: dimensions.y,\n width: radius,\n height: radius\n }],\n layerId: this.id()\n };\n }\n return null;\n }\n}\n","import { makeElement, easeFns } from 'muze-utils';\n\n/**\n *\n *\n * @param {*} elem\n * @param {*} datum\n * @param {*} index\n * @param {*} context\n */\nconst transitionBars = (layer, elem, datum, index, context) => {\n const { transition } = context;\n const { duration, disabled, effect } = transition;\n const selection = elem;\n\n const selTransition = disabled ? selection :\n selection.transition()\n .duration(duration)\n .ease(easeFns[effect])\n .on('end', layer.registerAnimationDoneHook());\n const update = datum.update || datum;\n const updateStyle = datum.style || {};\n datum.className && selection.classed(datum.className, true);\n Object.entries(update).forEach(attr => (!isNaN(attr[1]) && selTransition.attr(attr[0], attr[1])));\n Object.entries(updateStyle).forEach(styleObj => selection.style(styleObj[0], styleObj[1]));\n};\n\n/**\n *\n *\n * @param {*} elem\n * @param {*} d\n */\nconst barEnterFn = (elem, d) => {\n const selection = elem;\n const enter = d.enter || {};\n Object.entries(enter).forEach(attr => (!isNaN(attr[1]) && selection.attr(attr[0], attr[1])));\n};\n\n/**\n * Draws rectangles by using d3 selection\n * @param {Object} params Contains container element and points\n * @return {Selection} Bar Selection\n */\n/* istanbul ignore next */ export const drawRects = (params) => {\n const { layer, points, container, keyFn } = params;\n const updateFns = {\n enter (elem, d) { barEnterFn(elem, d); },\n update (elem, d, i) { transitionBars(layer, elem, d, i, params); }\n };\n return makeElement(container, 'rect', points, null, updateFns, keyFn);\n};\n","import { CLASSPREFIX } from '../../enums/constants';\n\nexport const defaultConfig = {\n classPrefix: CLASSPREFIX,\n defClassName: 'layer-bar',\n className: '',\n interaction: {\n highlight: [{\n type: 'fill',\n intensity: [0, 0, -15, 0]\n }],\n fade: [{\n type: 'fill',\n intensity: [0, 0, +15, 0]\n }],\n focus: [{\n type: 'fill',\n intensity: [0, 0, +15, 0]\n }]\n },\n transform: {\n type: 'stack'\n },\n transition: {\n effect: 'cubic',\n duration: 1000\n },\n innerPadding: 0.1,\n encoding: {\n color: {},\n x: {},\n y: {},\n x0: {},\n y0: {}\n },\n states: {\n highlight: {\n className: `${CLASSPREFIX}-layer-bar-highlight`\n },\n fadeout: {\n className: `${CLASSPREFIX}-layer-bar-fadeout`\n },\n selected: {\n className: `${CLASSPREFIX}-layer-bar-selected`\n }\n }\n};\n\n","import { MeasureSubtype, DimensionSubtype } from 'muze-utils';\nimport { STACK } from '../../enums/constants';\nimport { getLayerColor, positionPoints, getIndividualClassName } from '../../helpers';\n\n/**\n *\n *\n * @param {*} type\n * @param {*} fieldInfo\n * @param {*} config\n * @param {*} data\n *\n */\nconst resolveDimByField = (type, axesInfo, config, data) => {\n const spaceType = type === 'x' ? 'width' : 'height';\n const [fieldType, axis] = [config[`${type}FieldType`], axesInfo[`${type}Axis`]];\n const {\n transformType,\n sizeEncoding,\n sizeConfig,\n measurement\n } = config;\n\n const sizeValue = sizeEncoding.value;\n let enter = 0;\n let pos;\n let space = 0;\n let enterSpace = 0;\n if (fieldType !== undefined) {\n if (config[`${type}0Field`]) {\n const minVal = data[type];\n const maxVal = data[`${type}0`];\n let min;\n let max;\n if (minVal === null || maxVal === null) {\n return {\n enterSpace: undefined,\n enter: undefined,\n pos: undefined,\n space: undefined\n };\n } else if (fieldType === MeasureSubtype.CONTINUOUS || fieldType === DimensionSubtype.TEMPORAL) {\n min = Math.min(minVal, maxVal);\n max = Math.max(minVal, maxVal);\n } else {\n min = minVal;\n max = maxVal;\n }\n const scales = type === 'x' ? [min, max] : [max, min];\n pos = axis.getScaleValue(scales[0]) + axis.getUnitWidth() / 2;\n space = Math.abs(axis.getScaleValue(scales[1]) - pos) + axis.getUnitWidth() / 2;\n\n enter = pos;\n enterSpace = 0;\n } else if (fieldType === DimensionSubtype.CATEGORICAL || fieldType === DimensionSubtype.TEMPORAL) {\n pos = axis.getScaleValue(data[type]) +\n (sizeConfig[type === 'x' ? 'barWidthOffset' : 'barHeightOffset'] || 0);\n\n space = sizeConfig[type === 'x' ? 'barWidth' : 'barHeight'];\n if (sizeValue !== undefined) {\n const diffPx = sizeValue * space;\n space -= diffPx;\n pos += diffPx / 2;\n }\n enter = pos;\n enterSpace = space;\n } else {\n const zeroPos = axis.getScaleValue(0);\n const axisType = axis.getScaleValue(data[type]);\n const axisType0 = axis.getScaleValue(data[`${type}0`]);\n\n enterSpace = 0;\n if (type === 'x') {\n pos = data[type] < 0 || transformType === STACK ? axisType : zeroPos;\n space = Math.abs(pos - (transformType === STACK ? axisType0 : (data[type] >= 0 ? axisType : zeroPos)));\n } else {\n pos = transformType === STACK || data[type] >= 0 ? axisType : zeroPos;\n space = Math.abs(pos - (transformType === STACK ? axisType0 : (data[type] >= 0 ? zeroPos : axisType)));\n }\n enter = zeroPos;\n }\n } else {\n pos = 0;\n space = measurement[spaceType];\n }\n\n return {\n enterSpace,\n enter,\n pos,\n space\n };\n};\n\n/**\n *\n *\n * @param {*} data\n * @param {*} config\n * @param {*} axes\n *\n */\nconst resolveDimensions = (data, config, axes) => {\n const axesInfo = {\n xAxis: axes.x,\n yAxis: axes.y\n };\n const {\n enterSpace: enterWidth,\n enter: enterX,\n pos: xPos,\n space: width\n } = resolveDimByField('x', axesInfo, config, data);\n\n const {\n enterSpace: enterHeight,\n enter: enterY,\n pos: yPos,\n space: height\n } = resolveDimByField('y', axesInfo, config, data);\n return {\n enter: {\n x: enterX,\n y: enterY,\n width: enterWidth,\n height: enterHeight\n },\n update: {\n x: xPos,\n y: yPos,\n width,\n height\n }\n };\n};\n\n/**\n * Generates an array of objects containing x, y, width and height of the bars from the data\n * @param {Array.} data Data Array\n * @param {Object} encoding Config\n * @param {Object} axes Axes object\n * @param {Object} conf config object for point generation\n * @return {Array.} Array of points\n */\nexport const getTranslatedPoints = (context, data, sizeConfig) => {\n let points = [];\n const encoding = context.config().encoding;\n const axes = context.axes();\n const colorAxis = axes.color;\n const fieldsConfig = context.data().getFieldsConfig();\n const colorEncoding = encoding.color;\n const colorField = colorEncoding.field;\n const sizeEncoding = encoding.size || {};\n const {\n x0Field,\n y0Field,\n xFieldSubType,\n yFieldSubType\n } = context.encodingFieldsInf();\n const measurement = context.measurement();\n const isXDim = xFieldSubType === DimensionSubtype.CATEGORICAL || xFieldSubType === DimensionSubtype.TEMPORAL;\n const isYDim = yFieldSubType === DimensionSubtype.CATEGORICAL || yFieldSubType === DimensionSubtype.TEMPORAL;\n const key = isXDim ? 'x' : (isYDim ? 'y' : null);\n const transformType = context.transformType();\n const colorFieldIndex = colorField && fieldsConfig[colorField] && fieldsConfig[colorField].index;\n\n for (let i = 0, len = data.length; i < len; i++) {\n const d = data[i];\n const style = {};\n const meta = {};\n const dimensions = resolveDimensions(d, {\n xFieldType: xFieldSubType,\n yFieldType: yFieldSubType,\n x0Field,\n y0Field,\n transformType,\n measurement,\n sizeConfig,\n sizeEncoding\n }, axes);\n\n const { color, rawColor } = getLayerColor({ datum: d, index: i },\n { colorEncoding, colorAxis, colorFieldIndex });\n\n style.fill = color;\n meta.stateColor = {};\n meta.originalColor = rawColor;\n meta.colorTransform = {};\n\n const update = dimensions.update;\n\n if (!isNaN(update.x) && !isNaN(update.y) && d._id !== undefined) {\n let point = null;\n point = {\n enter: dimensions.enter,\n update,\n style,\n _data: d._data,\n _id: d._id,\n source: d._data,\n rowId: d._id,\n meta\n };\n point.className = getIndividualClassName(d, i, data, context);\n points.push(point);\n // Store each point in a hashmap with key as the dimensional or temporal field value\n context.cachePoint(d[key], point);\n }\n }\n\n points = positionPoints(context, points);\n return points;\n};\n","import {\n getQualifiedClassName,\n selectElement,\n createElements,\n clipElement,\n DimensionSubtype,\n FieldType,\n MeasureSubtype,\n Scales,\n getNearestValue\n} from 'muze-utils';\nimport { BaseLayer } from '../../base-layer';\nimport { drawRects } from './renderer';\nimport { defaultConfig } from './default-config';\nimport { getPlotMeasurement, getValidTransformForAggFn } from '../../helpers';\nimport './styles.scss';\nimport { getTranslatedPoints } from './bar-helper';\n\nconst MEASURE = FieldType.MEASURE;\nconst scaleBand = Scales.band;\n\n/**\n * Bar layer creates rectangle marks. The mark type of this layer is ```bar```. This layer can be used\n * to create stacked or grouped bars, range bars, heatmap plots and also reference bands by using\n * the encoding properties.\n *\n * @public\n *\n * @class\n * @module BarLayer\n * @extends BaseLayer\n */\nexport default class BarLayer extends BaseLayer {\n /**\n * Creates an instance of bar layer\n */\n constructor (...params) {\n super(...params);\n this._bandScale = scaleBand();\n this._plotPadding = {\n x: 0,\n y: 0\n };\n this._plotSpan = {\n x: 0,\n y: 0\n };\n this._pointMap = {};\n }\n\n /**\n *\n *\n *\n * @memberof BarLayer\n */\n elemType () {\n return 'rect';\n }\n\n /**\n *\n *\n * @static\n *\n * @memberof BarLayer\n */\n static formalName () {\n return 'bar';\n }\n\n /**\n * Returns the default configuration of the bar layer\n * @return {Object} Default configuration of the bar layer\n */\n static defaultConfig () {\n return defaultConfig;\n }\n\n /**\n *\n *\n * @static\n * @param {*} conf\n * @param {*} userConf\n *\n * @memberof BarLayer\n */\n static defaultPolicy (conf, userConf) {\n const config = BaseLayer.defaultPolicy(conf, userConf);\n const encoding = config.encoding;\n const colorField = encoding.color.field;\n const transform = config.transform;\n\n if (colorField) {\n transform.groupBy = colorField;\n }\n return config;\n }\n\n /**\n *\n *\n * @param {*} data\n * @param {*} fieldsConfig\n *\n * @memberof BarLayer\n */\n calculateDomainFromData (data, encodingFieldInf, fieldsConfig) {\n const domain = super.calculateDomainFromData(data, encodingFieldInf, fieldsConfig);\n ['x', 'y'].forEach((d) => {\n if (encodingFieldInf[`${d}FieldType`] === MEASURE && domain[d]) {\n encodingFieldInf[`${d}0Field}`] ? domain[d] = domain[d].sort((a, b) => a - b) :\n (domain[d][0] = Math.min(domain[d][0], 0));\n }\n });\n return domain;\n }\n\n /**\n * Generates an array of objects containing x, y, width and height of the bars from the data\n * @param {Array.} data Data Array\n * @param {Object} encoding Config\n * @param {Object} axes Axes object\n * @param {Object} conf config object for point generation\n * @return {Array.} Array of points\n */\n translatePoints (data, sizeConfig) {\n return getTranslatedPoints(this, data, sizeConfig);\n }\n\n /**\n * Renders the plot in the given container\n * @param {SVGGroup} container SVGGroup where plot will be rendered.\n * @return {BarLayer} Instance of bar layer.\n */\n render (container) {\n const config = this.config();\n const transition = config.transition;\n const normalizedDataArr = this._normalizedData;\n const transformedData = this._transformedData;\n const keys = transformedData.map(d => d.key);\n const fieldsConfig = this.data().getFieldsConfig();\n const axes = this.axes();\n const height = axes.y && axes.y.scale().range()[0];\n const width = axes.x && axes.x.scale().range()[1];\n const defClassName = config.defClassName;\n const qualifiedClassName = getQualifiedClassName(defClassName, this.id(), config.classPrefix);\n const className = config.className;\n const containerSelection = selectElement(container);\n const dimensions = Object.values(fieldsConfig).filter(e => e.def.type === FieldType.DIMENSION)\n .map(e => e.index);\n containerSelection.classed(qualifiedClassName.join(' '), true);\n containerSelection.classed(className, true);\n clipElement(container, {\n x: 0,\n y: 0,\n width,\n height\n }, `id-${this.id()}`);\n\n this._points = this.generateDataPoints(normalizedDataArr, keys);\n\n createElements({\n data: this._points,\n container,\n selector: 'g',\n append: 'g',\n each: (points, group, i) => {\n const seriesClassName = `${qualifiedClassName[0]}-${keys[i] || i}`.toLowerCase();\n group.style('display', 'block');\n drawRects({\n layer: this,\n container: group.node(),\n points,\n className: seriesClassName,\n transition,\n style: {},\n keyFn: d => dimensions.map(key => d._data[key]).join('-')\n });\n }\n });\n return this;\n }\n\n /**\n *\n *\n * @param {*} normalizedData\n * @param {*} keys\n *\n * @memberof BarLayer\n */\n generateDataPoints (normalizedData, keys) {\n const [barWidthMetrics, barHeightMetrics] = getPlotMeasurement(this, keys);\n const barWidthOffsets = barWidthMetrics.offsetValues || [];\n const barHeightOffsets = barHeightMetrics.offsetValues || [];\n this._plotSpan = {\n x: barWidthMetrics.groupSpan || 0,\n y: barHeightMetrics.groupSpan || 0\n };\n this._plotPadding = {\n x: barWidthMetrics.padding || 0,\n y: barHeightMetrics.padding || 0\n };\n\n this._pointMap = {};\n return normalizedData.map((data, i) => this.translatePoints(data,\n {\n barWidth: barWidthMetrics.span,\n barWidthOffset: barWidthOffsets[i] || 0,\n barHeight: barHeightMetrics.span,\n barHeightOffset: barHeightOffsets[i] || 0\n }));\n }\n\n getPlotPadding () {\n return this._plotPadding;\n }\n\n resolveTransformType () {\n this._transformType = getValidTransformForAggFn(this);\n }\n\n /**\n * Gets the nearest point of the position passed.\n * @param {number} x x position\n * @param {number} y y position\n * @return {Object} Nearest point.\n */\n getNearestPoint (x, y) {\n if (!this.data()) {\n return null;\n }\n let axis;\n let value;\n let points;\n let uniqueFieldType;\n let uniqueFieldIndex;\n let filterData;\n let identifiers;\n let pointFound = null;\n const dataModel = this.data();\n const dataObj = dataModel.getData();\n const fieldsConfig = dataModel.getFieldsConfig();\n const axes = this.axes();\n const data = dataObj.data;\n const pointMap = this._pointMap;\n const {\n xField,\n yField,\n xFieldSubType,\n yFieldSubType\n } = this.encodingFieldsInf();\n\n if (xFieldSubType === MeasureSubtype.CONTINUOUS) {\n axis = axes.y;\n value = axis.invert(y);\n uniqueFieldIndex = fieldsConfig[yField].index;\n uniqueFieldType = yFieldSubType;\n } else {\n axis = axes.x;\n value = axis.invert(x);\n uniqueFieldIndex = fieldsConfig[xField].index;\n uniqueFieldType = xFieldSubType;\n }\n\n if (uniqueFieldType === DimensionSubtype.CATEGORICAL) {\n points = pointMap[value];\n }\n\n if (uniqueFieldType === DimensionSubtype.TEMPORAL) {\n filterData = [...new Set(data.map(d => d[uniqueFieldIndex]))];\n value = getNearestValue(filterData, value);\n points = pointMap[value];\n }\n const len = points && points.length;\n points && points.sort((p1, p2) => p1.update.y - p2.update.y);\n for (let i = 0; i < len; i++) {\n const point = points[i];\n const update = point.update;\n if (x >= update.x && x <= (update.width + update.x) && y >= update.y && y <= (update.height + update.y)) {\n pointFound = point;\n break;\n }\n pointFound = null;\n }\n\n const values = pointFound && pointFound._data;\n if (values) {\n identifiers = this.getIdentifiersFromData(values, pointFound._id);\n }\n return pointFound ? {\n dimensions: [pointFound.update],\n id: identifiers,\n layerId: this.id()\n } : pointFound;\n }\n\n getPlotSpan () {\n return this._plotSpan;\n }\n}\n","import { CLASSPREFIX } from '../../enums/constants';\n\nexport const defaultConfig = {\n defClassName: 'layer-tick',\n className: '',\n classPrefix: CLASSPREFIX,\n interaction: {\n highlight: [{\n type: 'stroke',\n intensity: [0, 0, -15, 0]\n }],\n fade: [{\n type: 'stroke',\n intensity: [0, 0, 15, 0]\n }],\n focus: [{\n type: 'stroke',\n intensity: [0, 0, 15, 0]\n }]\n },\n innerPadding: 0.1,\n transform: {\n type: 'identity'\n },\n transition: {\n effect: 'cubic',\n duration: 1000\n },\n encoding: {\n color: { },\n x: {},\n y: {},\n x0: {},\n y0: {},\n strokeOpacity: {\n value: 0.5\n },\n fillOpacity: {\n value: 0.5\n }\n },\n states: {\n highlight: {\n className: `${CLASSPREFIX}-layer-tick-highlight`\n },\n fadeout: {\n className: `${CLASSPREFIX}-layer-tick-fadeout`\n },\n selected: {\n className: `${CLASSPREFIX}-layer-tick-selected`\n }\n }\n};\n","import { selectElement } from 'muze-utils';\n\n/**\n * Draws ticks by using d3 selection\n * @param {Object} params Contains container element and points\n * @return {Selection} Ticks Selection\n */\nexport default /* istanbul ignore next */ (params) => {\n const { points, container, keyFn, className } = params;\n const mount = selectElement(container);\n const ticks = mount.selectAll('path').data(points, keyFn);\n const ticksEnter = ticks.enter().append('path');\n\n mount.attr('class', className || '');\n ticksEnter.each(function (d) {\n const selection = selectElement(this);\n const enter = d.enter || {};\n Object.entries(enter).forEach(attr => (!isNaN(attr[1]) && selection.attr(attr[0], attr[1])));\n });\n\n ticks.exit().remove();\n return ticks.merge(ticksEnter)\n .each(function (d) {\n const selection = selectElement(this);\n const update = d.update;\n const updateStyle = d.style || {};\n const x0 = update.x0 !== undefined ? update.x0 : update.x;\n const y0 = update.y0 !== undefined ? update.y0 : update.y;\n const path = `M ${update.x} ${update.y} L ${x0} ${y0}`;\n d.className && selection.classed(d.className, true);\n selection.attr('d', path);\n Object.entries(updateStyle).forEach(styleObj => selection.style(styleObj[0], styleObj[1]));\n });\n};\n\n","import { FieldType } from 'muze-utils';\nimport { PointLayer } from '../point';\nimport { defaultConfig } from './default-config';\nimport { ENCODING } from '../../enums/constants';\nimport drawTicks from './renderer';\nimport './styles.scss';\nimport { getAxesScales, getLayerColor, positionPoints, getIndividualClassName } from '../../helpers';\n\n/**\n * This layer is used to create small lines. The orientation of the line is determined by the positional\n * encoding properties x0 and y0. The mark type of the layer is ```tick```.\n *\n * @public\n *\n * @class\n * @module TickLayer\n * @extends BaseLayer\n */\nexport default class TickLayer extends PointLayer {\n\n /**\n *\n *\n * @staticg\n *\n * @memberof TickLayer\n */\n static defaultConfig () {\n return defaultConfig;\n }\n\n /**\n *\n *\n * @static\n *\n * @memberof TickLayer\n */\n static formalName () {\n return 'tick';\n }\n\n /**\n *\n *\n * @static\n *\n * @memberof TickLayer\n */\n static drawFn () {\n return drawTicks;\n }\n\n /**\n *\n *\n *\n * @memberof TickLayer\n */\n elemType () {\n return 'path';\n }\n\n /**\n * Generates an array of objects containing x, y, width and height of the points from the data\n * @param {Array.} data Data Array\n * @param {Object} encoding Config\n * @param {Object} axes Axes object\n * @return {Array.} Array of points\n */\n translatePoints (data, encoding, axes, config = {}) {\n let points = [];\n const {\n xAxis,\n yAxis\n } = getAxesScales(axes);\n const fieldsConfig = this.data().getFieldsConfig();\n const {\n xField,\n yField,\n x0Field,\n y0Field,\n xFieldType,\n yFieldType\n } = this.encodingFieldsInf();\n const isXDim = xFieldType === FieldType.DIMENSION;\n const isYDim = yFieldType === FieldType.DIMENSION;\n const key = isXDim ? ENCODING.X : (isYDim ? ENCODING.Y : null);\n const colorEncoding = encoding.color;\n const colorField = colorEncoding && colorEncoding.field;\n const colorFieldIndex = fieldsConfig[colorField] && fieldsConfig[colorField].index;\n const measurement = this.measurement();\n const colorAxis = axes.color;\n const { x: offsetX, y: offsetY } = config.offset;\n const { x: xSpan, y: ySpan } = config.span;\n for (let i = 0, len = data.length; i < len; i++) {\n let xPx;\n let x0Px;\n let y0Px;\n let yPx;\n const d = data[i];\n const row = d._data;\n if (xField) {\n xPx = xAxis.getScaleValue(d.x) + offsetX;\n x0Px = xPx + xSpan;\n }\n\n if (yField) {\n yPx = yAxis.getScaleValue(d.y) + offsetY;\n y0Px = yPx !== null ? yPx + ySpan : null;\n }\n\n if (!xField) {\n xPx = 0;\n x0Px = measurement.width;\n if (!isNaN(yPx)) {\n yPx += ySpan / 2;\n y0Px = yPx;\n }\n }\n\n if (!yField) {\n yPx = 0;\n y0Px = measurement.height;\n x0Px = xPx += xSpan / 2;\n }\n\n if (x0Field) {\n x0Px = xAxis.getScaleValue(d.x0) + xSpan;\n yPx += ySpan / 2;\n y0Px -= ySpan / 2;\n }\n\n if (y0Field) {\n y0Px = yAxis.getScaleValue(d.y0) + ySpan;\n xPx += xSpan / 2;\n x0Px -= xSpan / 2;\n }\n const style = {};\n const meta = {};\n const { color, rawColor } = getLayerColor({ datum: d, index: i },\n { colorEncoding, colorAxis, colorFieldIndex });\n\n style.stroke = color;\n meta.stateColor = {};\n meta.originalColor = rawColor;\n meta.colorTransform = {};\n if (!isNaN(xPx) && !isNaN(yPx)) {\n const point = {\n enter: {},\n update: {\n x: xPx,\n y: yPx,\n x0: x0Px,\n y0: y0Px\n },\n style,\n _data: row,\n _id: d._id,\n source: row,\n rowId: d._id,\n meta\n };\n point.className = getIndividualClassName(d, i, data, this);\n points.push(point);\n this.cachePoint(d[key], point);\n }\n }\n points = positionPoints(this, points);\n return points;\n }\n\n getMeasurementConfig (offsetX, offsetY, widthSpan, heightSpan) {\n return {\n offset: {\n x: (offsetX || 0),\n y: (offsetY || 0)\n },\n span: {\n x: widthSpan,\n y: heightSpan\n }\n };\n }\n}\n","export const AREA_LAYER = 'area';\nexport const ARC_LAYER = 'arc';\nexport const LINE_LAYER = 'line';\nexport const TEXT_LAYER = 'text';\nexport const POINT_LAYER = 'point';\nexport const BAR_LAYER = 'bar';\nexport const TICK_LAYER = 'tick';\nexport const SIMPLE_LAYER = 'simple';\nexport const BASE_LAYER = 'base';\n","import { isSimpleObject, mergeRecursive, getObjProp } from 'muze-utils';\n\nconst parseLayerDefinition = (sink, definition, layerDef, layerType) => {\n for (const key in definition) {\n if (Object.hasOwnProperty.call(definition, key)) {\n let strs;\n let propValue;\n const def = definition[key];\n if (isSimpleObject(def)) {\n sink[key] = {};\n parseLayerDefinition(sink[key], def, layerDef, layerType);\n } else if (typeof def === 'string' && (strs = def.split('.')) && strs[0] === layerType) {\n propValue = getObjProp(layerDef, ...strs.slice(1, strs.length));\n if (propValue !== undefined) {\n sink[key] = propValue;\n }\n } else {\n sink[key] = def;\n }\n }\n }\n};\n\nconst sanitizeEncoding = (encoding) => {\n // Create object for each encoding value if encoding value is a string\n for (const key in encoding) {\n if (typeof encoding[key] === 'string') {\n encoding[key] = {\n field: encoding[key]\n };\n }\n }\n};\n\n/**\n * Layer Factory creates layers based on the layer type. All types of layers needs to register in\n * the layer factory. For getting a layer instance, getLayer method needs to invoked with the\n * layerType and other arguments. It also registers the definition of composite layers.\n *\n * @public\n *\n * @module LayerFactory\n */\nconst layerFactory = (() => {\n const compositeLayers = {};\n const factoryObj = {\n setLayerRegistry: (reg) => {\n factoryObj._layerRegistry = reg;\n },\n getSerializedConf: (mark, layerDef) => {\n let serializedDefs;\n const defs = compositeLayers[mark];\n const newConf = mergeRecursive({}, layerDef);\n\n // If it is a composite layer then resolve all the definitions of each unit layer\n if (defs) {\n serializedDefs = defs.map((unitLayerDef) => {\n const sDef = {};\n parseLayerDefinition(sDef, unitLayerDef, newConf, mark);\n sanitizeEncoding(sDef.encoding);\n return sDef;\n });\n } else {\n const encoding = newConf.encoding;\n // Create object for each encoding value if encoding value is a string\n sanitizeEncoding(encoding);\n serializedDefs = newConf;\n }\n\n return serializedDefs;\n },\n getLayerInstance: (layerDef, ...params) => {\n const layerRegistry = factoryObj._layerRegistry;\n layerDef = !(layerDef instanceof Array) ? [layerDef] : layerDef;\n const instances = layerDef.map((layerObj) => {\n const layerConstructor = layerRegistry[layerObj.mark];\n return layerConstructor.create(...params);\n });\n return instances.length === 1 ? instances[0] : instances;\n },\n getLayerClass: mark => factoryObj._layerRegistry[mark],\n /**\n * Registers a new composite layer definition in the layer factory.\n *\n * @public\n *\n * @param {string} layerType Mark type of the new composite layer.\n * @param {Array} layerDefs Layer definitions of the composite layer.\n */\n composeLayers: (layerType, layerDefs) => {\n compositeLayers[layerType] = layerDefs;\n },\n sanitizeLayerConfig: (layerDef) => {\n const newConf = mergeRecursive({}, layerDef);\n sanitizeEncoding(newConf.encoding);\n return newConf;\n }\n };\n return factoryObj;\n})();\n\nexport default layerFactory;\n","import layerFactory from './layer-factory';\n\nexport default layerFactory;\n","import { AreaLayer } from './layers/area';\nimport { ArcLayer } from './layers/arc';\nimport { LineLayer } from './layers/line';\nimport { TextLayer } from './layers/text';\nimport { PointLayer } from './layers/point';\nimport { BarLayer } from './layers/bar';\nimport { BaseLayer } from './base-layer';\nimport * as LAYER_TYPES from './enums/layer-types';\nimport { TickLayer } from './layers/tick';\n\nexport const DEFAULT_LAYERS = {\n [LAYER_TYPES.AREA_LAYER]: AreaLayer,\n [LAYER_TYPES.ARC_LAYER]: ArcLayer,\n [LAYER_TYPES.LINE_LAYER]: LineLayer,\n [LAYER_TYPES.TEXT_LAYER]: TextLayer,\n [LAYER_TYPES.POINT_LAYER]: PointLayer,\n [LAYER_TYPES.TICK_LAYER]: TickLayer,\n [LAYER_TYPES.BAR_LAYER]: BarLayer,\n [LAYER_TYPES.BASE_LAYER]: BaseLayer\n};\n","/**\n * This file exports constants that are used as enums in the\n * crosstab group implementation.\n */\n/**\n * Width of the crosstab.\n */\nexport const X = 'x';\n/**\n * Width of the crosstab.\n */\nexport const Y = 'y';\n/**\n * Width of the crosstab.\n */\nexport const WIDTH = 'width';\n\n/**\n * Height of the crosstab.\n */\nexport const HEIGHT = 'height';\n\n/**\n * Field referring to object storing measurement configuration.\n */\nexport const MEASUREMENT = 'measurement';\n\n/**\n * Field referring to object storing configuration properties.\n */\nexport const CONFIG = 'config';\n\n/**\n * Width of visual unit in crosstab.\n */\nexport const MIN_UNIT_WIDTH = 'minUnitWidth';\n\n/**\n * Height of visual unit.\n */\nexport const MIN_UNIT_HEIGHT = 'minUnitHeight';\n\n/**\n * Field to store the array of dimensions to facet by.\n */\nexport const DIMENSIONS = 'dimensions';\n\n/**\n * Field to store array of measures to use as x axis.\n */\nexport const MEASURES = 'measures';\n\n/**\n * Field to store the array of dimensions to facet by.\n */\nexport const DIMENSION = 'dimension';\n\n/**\n * Field to store array of measures to use as x axis.\n */\nexport const MEASURE = 'measure';\n\n/**\n * Flag to specify if model should be pivoted.\n */\nexport const PIVOT = 'pivot';\n\n/**\n * Flag to specify format\n */\nexport const FORMAT = 'format';\n\n/**\n * Mount point where the variable will be hosted\n */\nexport const MOUNT = 'mount';\n\n/**\n * Data update flag\n */\nexport const HAS_DATA_UPDATED = 'hasDataUpdated';\n\n/**\n * Field referring to object storing set of rows\n */\nexport const ROWS = 'rows';\n\n/**\n * Field referring to object storing set of columns\n */\nexport const COLUMNS = 'columns';\n\n/**\n * Field referring to object storing set of columns\n */\nexport const COL = 'col';\n\n/**\n * Field referring to object storing set of rows\n */\nexport const ROW = 'row';\n\n/**\n * Field referring to object storing set of columns\n */\nexport const COLUMN = 'column';\n\n/**\n * Field referring to object storing color field\n */\nexport const COLOR = 'color';\n\n/**\n * Field referring to object storing shape field\n */\nexport const SHAPE = 'shape';\n\n/**\n * Field referring to object storing size field\n */\nexport const SIZE = 'size';\n\n/**\n * Field referring to object storing detail field\n */\nexport const DETAIL = 'detail';\n\n/**\n * Field referring to object storing set of layers\n */\nexport const LAYERS = 'layers';\n\n/**\n * Field referring to object storing the transforms\n */\nexport const TRANSFORM = 'transform';\n\n/**\n * Field referring to object storing the transforms\n */\nexport const ORDINAL = 'ordinal';\n\n/**\n * Field referring to object storing the transforms\n */\nexport const LINEAR = 'linear';\n/**\n * Field referring to object storing the transforms\n */\nexport const LEFT = 'left';\n/**\n * Field referring to object storing the transforms\n */\nexport const RIGHT = 'right';\n/**\n * Field referring to object storing the transforms\n */\nexport const TOP = 'top';\n/**\n * Field referring to object storing the transforms\n */\nexport const BOTTOM = 'bottom';\n\n/**\n * Field referring to object storing the transforms\n */\nexport const RETINAL = 'retinal';\n/**\n * Field referring to object storing the transforms\n */\nexport const CELL = 'cell';\n/**\n * Field referring to object storing the transforms\n */\nexport const X_AXES = 'xAxes';\n/**\n * Field referring to object storing the transforms\n */\nexport const Y_AXES = 'yAxes';\n/**\n * Field referring to object storing the transforms\n */\nexport const ENTRY_CELLS = 'entryCell';\n/**\n * Field referring to object storing the transforms\n */\nexport const INITIALIZED = 'initialized';\n/**\n * Field referring to object storing the transforms\n */\nexport const EXIT_CELLS = 'exitCell';\n/**\n * Field referring to object storing the transforms\n */\nexport const AXIS = 'axis';\n/**\n * Field referring to object storing the transforms\n */\nexport const UNIT = 'unit';\n/**\n * Field referring to object storing the transforms\n */\nexport const UPDATED = 'updated';\n/**\n * Field referring to object storing the transforms\n */\nexport const BEFORE_UPDATE = 'beforeupdate';\n/**\n * Field referring to object storing the transforms\n */\nexport const VALUE_MATRIX = 'valueMatrix';\n/**\n * Field referring to object storing the transforms\n */\nexport const FACET_HEADERS = 'facet-headers';\n/**\n * Field referring to object storing the transforms\n */\nexport const RADIUS = 'radius';\n/**\n * Field referring to object storing the transforms\n */\nexport const ANGLE = 'angle';\n/**\n * Field referring to object storing the transforms\n */\nexport const ARC = 'arc';\n/**\n * Field referring to object storing the transforms\n */\nexport const CARTESIAN = 'cartesian';\n/**\n * Field referring to object storing the transforms\n */\nexport const POLAR = 'polar';\n/**\n * Field referring to object storing the transforms\n */\nexport const CATEGORICAL = 'categorical';\n/**\n * Field referring to object storing the transforms\n */\nexport const TEMPORAL = 'temporal';\n/**\n * Field referring to object storing the transforms\n */\nexport const BAR = 'bar';\n/**\n * Field referring to object storing the transforms\n */\nexport const LINE = 'line';\n/**\n * Field referring to object storing the transforms\n */\nexport const POINT = 'point';\n/**\n * Field referring to object storing the transforms\n */\nexport const PRIMARY = 'Primary';\n/**\n * Field referring to object storing the transforms\n */\nexport const SECONDARY = 'Secondary';\n/**\n * Field referring to object storing the transforms\n */\nexport const BOTH = 'both';\n/**\n * Field referring to object storing the transforms\n */\nexport const INTERACTION = 'interaction';\n/**\n * Field referring to object storing the transforms\n */\nexport const GRID_LINES = 'gridLines';\n/**\n * Field referring to object storing the transforms\n */\nexport const GRID_BANDS = 'gridBands';\n/**\n * Field referring to object storing the transforms\n */\nexport const HEADER = 'header';\n/**\n * Field referring to object storing the transforms\n */\nexport const FACET = 'facet';\n\n","import { ROWS, COLUMNS, COLOR, SHAPE, SIZE, DETAIL, LAYERS, TRANSFORM, CONFIG } from '../enums/constants';\n\n/**\n * This is the local options semantics based on which setters getters are created and reactivity is initiated.\n * This local object is only valid for Artboard.\n * Artboard merges global and local object both to the model\n *\n * Format\n * PROPERTRY_NAME: {\n * value: // default value of the property,\n * meta: {\n * typeCheck: // The setter value will be checked using this. If the value is function then the setter value\n * // is passed as args.\n * typeExpected: // The output of typecheck action will be tested against this. Truthy value will set the\n * // value to the setter\n * sanitizaiton: // Need for sanitization before type is checked\n * }\n * }\n *\n * @module\n */\n\nexport default {\n [CONFIG]: {},\n [ROWS]: {},\n [COLUMNS]: {},\n [COLOR]: {},\n [SHAPE]: {},\n [SIZE]: {},\n [DETAIL]: {},\n [LAYERS]: {},\n [TRANSFORM]: {}\n};\n","import { ERROR_MSG } from 'muze-utils';\n\n/**\n * Interfaces for VisualGroup. Any new VisualGroup has to implement this class.\n * @class SimpleGroup\n */\nclass SimpleGroup {\n\n /**\n * This method is used to set or get the DataModel instance.\n *\n * @param {DataModel | undefined} dataModel Instance of datamodel.\n\n * @memberof SimpleGroup\n */\n data () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * This method is used to set or get the group specific configuration\n * properties\n *\n * @param {Object | undefined} configObj The input configuration.\n * or instance of visual group.\n * @memberof SimpleGroup\n */\n config () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * This method is used to return a serialized representation of the\n * instance's properties.\n *\n * @memberof SimpleGroup\n */\n serialize () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * This method is used to get or set the measurement object which houses\n * layout properties like width and height.\n *\n * @param {Object | undefined} mObj The measurement properties.\n * @memberof SimpleGroup\n */\n measurement () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n}\n\nexport default SimpleGroup;\n","import { ERROR_MSG } from 'muze-utils';\n\n/**\n *\n *\n * @export\n * @class Variable\n */\nexport default class Variable {\n\n /**\n *\n *\n * @memberof Variable\n */\n type () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n *\n *\n * @memberof Variable\n */\n toString () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n}\n","import Variable from './variable';\n\n/**\n * This is a wrapper on top of multiple variables which are of same type but they are shown in the same axis.This is\n * required in case of range plots or ohlc plots where one plot is mapped to multiple measure fields. At that time,\n * we need to create a composed variable from multiple variables. This class just wraps them into one variable instance\n * and provides methods to get the type and other common functionalities which can be performed on a simple variable\n * instance.\n *\n * @public\n * @class ComposeVars\n */\nclass ComposedVars extends Variable {\n\n /**\n * Creates an instance of ComposeVars.\n *\n * @param {Array} texts Array of field names\n */\n constructor (...texts) {\n super(...texts);\n this.vars(texts);\n }\n\n vars (...params) {\n if (params.length) {\n this._vars = params[0];\n return this;\n }\n return this._vars;\n }\n\n data (...dm) {\n if (dm.length) {\n this.vars().forEach(d => d.data(dm[0]));\n return this;\n }\n return this._data;\n }\n\n /**\n * Get all the field names from composed variable instance.\n *\n * @public\n * @return {Array} Array of field names.\n */\n getMembers () {\n const vars = this.vars();\n return vars.map(member => member.getMembers()[0]);\n }\n\n /**\n * Type of field associated with this composed variable.\n *\n * @return {string} Type of variable (Measure/Dimension).\n */\n type () {\n return this.vars()[0].type();\n }\n\n toString () {\n return this.vars().map(d => d.toString()).join(',');\n }\n\n /**\n * Returns the number formatter function of the variable.\n *\n * @return {Function} Number formatter function of the variable.\n */\n numberFormat () {\n return this.vars()[0].numberFormat();\n }\n\n format (values) {\n return this.vars()[0].format(values);\n }\n\n /**\n * Returns the subtype of the fields associated with this variable instance.\n *\n * @public\n * @return {string} Subtype of the variable.\n */\n subtype () {\n return this.vars()[0].subtype();\n }\n\n /**\n * Returns the consecutive minimum difference of the field values.\n *\n * @public\n * @return {number} Minimum consecutive difference.\n */\n getMinDiff () {\n return this.vars()[0].getMinDiff();\n }\n}\n\nexport default ComposedVars;\n","import { DateTimeFormatter } from 'muze-utils';\nimport Variable from './variable';\n\n/**\n * This is a wrapper on top of fields passed in rows or columns in canvas. This is used to get the type of field or\n * get min difference from the field values.\n *\n * @public\n * @class SimpleVariable\n */\nexport default class SimpleVariable extends Variable {\n\n /**\n * Creates an instance of simple variable instance.\n *\n * @param {string} text Field name.\n */\n constructor (text) {\n super();\n this.oneVar(text);\n }\n\n /**\n * Gets the field name associated with this variable instance.\n *\n * @public\n * @return {string} Name of the field.\n */\n oneVar (...oneV) {\n if (oneV.length) {\n this._oneVar = oneV[0];\n return this;\n }\n return this._oneVar;\n }\n\n data (...dm) {\n if (dm.length) {\n this._data = dm[0];\n return this;\n }\n return this._data;\n }\n\n toString () {\n return this.oneVar();\n }\n\n /**\n * Gets the number formatter function of this variable.\n *\n * @public\n * @return {Function} Number formatter function.\n */\n numberFormat () {\n if (this.type() === 'measure') {\n const formatter = this.data().getFieldspace().getMeasure()[this.oneVar()];\n return formatter.numberFormat();\n } return val => val;\n }\n\n format (values) {\n if (values && this.subtype() === 'temporal') {\n const formatter = this.data().getFieldspace().getDimension()[this.oneVar()].schema().format;\n const dtFormat = new DateTimeFormatter(formatter);\n values = values.map(e => dtFormat.getNativeDate(e));\n }\n return values;\n }\n\n /**\n * Return the field names associated with this variable instance.\n *\n * @public\n * @return {Array} Array of fields.\n */\n getMembers () {\n return [this.oneVar()];\n }\n\n /**\n * Returns the type of the variable. Whether it is measure or dimension.\n *\n * @public\n * @return {string} Type of variable.\n */\n type () {\n const fieldDef = this.data().getFieldsConfig()[this.oneVar()].def;\n return fieldDef.type;\n }\n\n /**\n * Returns the subtype of the variable. Subtype can be categorical or temporal. If no subtype is found, then it\n * returns the type of the variable.\n *\n * @public\n * @return {string} Subtype of variable.\n */\n subtype () {\n const fieldDef = this.data().getFieldsConfig()[this.oneVar()].def;\n return fieldDef.subtype || fieldDef.type;\n }\n\n /**\n * Returns the minimum consecutive difference between the data values of this variable.\n *\n * @return {number} Minimum consecutive difference.\n */\n getMinDiff () {\n const fieldSpace = this.data().getFieldspace();\n return fieldSpace.fieldsObj()[this.oneVar()].minimumConsecutiveDifference();\n }\n\n /**\n * Returns true if two variable instances are same.If both variable has the same field names, they are equal.\n *\n * @return {Boolean} Whether two variable instances are same.\n */\n equals (varInst) {\n return this.oneVar() === varInst.oneVar();\n }\n}\n","import { ComposedVars, SimpleVariable } from '../variable';\nimport { DIMENSION, COLUMNS, ROWS, TEMPORAL } from '../enums/constants';\n\n/**\n * Gets the list of fields in a sorted order by measurement and dimension\n *\n * @param {Array} fieldList List of fields in the view\n * @param {Object} fieldMap Mapping of fields in the datamodel\n * @return {Array} fields sorted by measurement and dimensions\n */\nconst orderFields = (fieldArray, type) => {\n const dimensionArr = [[], []];\n const measureArr = [[], []];\n const temporalArr = [[], []];\n const categoricalArr = [[], []];\n\n fieldArray.forEach((fieldList, index) => {\n fieldList.forEach((field) => {\n if (field.type() === DIMENSION) {\n dimensionArr[index].push(field);\n field.subtype() === TEMPORAL ? temporalArr[index].push(field) : categoricalArr[index].push(field);\n } else {\n measureArr[index].push(field);\n }\n });\n });\n\n const numOfMeasures = measureArr[0].length + (measureArr[1] ? measureArr[1].length : 0);\n\n // Single array of fields\n if (!fieldArray[1]) {\n // Push measures to bottom\n measureArr[1] = type === COLUMNS ? measureArr[0] : [];\n // Push measures to left\n measureArr[0] = type !== COLUMNS ? measureArr[0] : [];\n // Bottom and right dimensions empty\n dimensionArr[1] = [];\n // Left and top filled with dimensions\n dimensionArr[0] = dimensionArr[0];\n if (numOfMeasures === 0) {\n const allDimensions = [...dimensionArr[0], ...dimensionArr[1]];\n if (type === COLUMNS) {\n dimensionArr[1] = allDimensions[allDimensions.length - 1] ? [allDimensions[allDimensions.length - 1]]\n : [];\n allDimensions.splice(-1, 1);\n } else {\n dimensionArr[1] = [];\n }\n dimensionArr[0] = [...allDimensions];\n }\n }\n\n if (dimensionArr[0].length && dimensionArr[1].length && numOfMeasures > 0) {\n dimensionArr[0] = [...dimensionArr[0], ...dimensionArr[1]];\n dimensionArr[1] = [];\n }\n return {\n fields: dimensionArr.map((list, i) => (i === 1 ?\n measureArr[i].concat(dimensionArr[i]) : dimensionArr[i].concat(measureArr[i]))),\n dimensions: [...dimensionArr[0], ...dimensionArr[1]],\n measures: [...measureArr[0], ...measureArr[1]],\n temporal: [...temporalArr[0], ...temporalArr[1]],\n categorical: [...categoricalArr[0], ...categoricalArr[1]]\n };\n};\n\n/**\n * Gets the list of normalized fields\n *\n * @param {Array} fields List of fields in the view\n * @param {Object} fieldMap Mapping of fields in the datamodel\n * @return {Array} fields normalized by measurement and dimensions\n */\nconst normalizeFields = (config, type) => {\n const fieldsArr = [];\n const fields = config[type];\n\n if (!(fields[0] instanceof Array)) {\n fieldsArr[0] = fields;\n } else {\n fieldsArr[0] = fields[0] || [];\n fieldsArr[1] = fields[1] || [];\n }\n return fieldsArr;\n};\n\n/**\n *\n *\n * @param {*} fields\n * @param {*} datamodel\n *\n */\nconst convertToVar = (datamodel, fields) => {\n const vars = [];\n\n fields && fields.forEach((field) => {\n if (field instanceof ComposedVars) {\n vars.push(field);\n field.data(datamodel);\n } else {\n vars.push(new SimpleVariable(field).data(datamodel));\n }\n });\n return vars;\n};\n\n/**\n *\n *\n * @param {*} rows\n * @param {*} columns\n * @param {*} datamodel\n *\n */\nexport const transformFields = (datamodel, config) => {\n const [rowsInfo, columnsInfo] = [ROWS, COLUMNS].map((fields) => {\n const normalizedFields = normalizeFields(config, fields);\n const norFields = [convertToVar(datamodel, normalizedFields[0])];\n\n if (normalizedFields[1]) {\n norFields[1] = convertToVar(datamodel, normalizedFields[1]);\n }\n return orderFields(norFields, fields);\n });\n const {\n fields: rows,\n dimensions: rowDimensions,\n measures: rowMeasures,\n temporal: rowTemporalFields,\n categorical: rowCategoricalFields\n } = rowsInfo;\n const {\n fields: columns,\n dimensions: columnDimensions,\n measures: columnMeasures,\n temporal: columnTemporalFields,\n categorical: columnCategoricalFields\n } = columnsInfo;\n return {\n rows,\n rowDimensions,\n rowMeasures,\n rowTemporalFields,\n rowCategoricalFields,\n columns,\n columnTemporalFields,\n columnCategoricalFields,\n columnDimensions,\n columnMeasures\n };\n};\n","import { ERROR_MSG, mergeRecursive } from 'muze-utils';\nimport { transformFields } from './field-sanitizer';\nimport { getHeaderAxisFrom } from '../group-helper/group-utils';\nimport { ROW, COLUMN } from '../enums/constants';\n\n/**\n *\n *\n * @export\n * @class VisualEncoder\n */\nexport default class VisualEncoder {\n\n /**\n *\n *\n * @memberof VisualEncoder\n */\n createAxis () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n *\n *\n * @memberof VisualEncoder\n */\n setCommonDomain () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n *\n *\n * @memberof VisualEncoder\n */\n getLayerConfig () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n fieldInfo (...info) {\n if (info.length) {\n this._fieldInfo = mergeRecursive(this._fieldInfo || {}, info[0]);\n return this;\n }\n return this._fieldInfo;\n }\n\n /**\n *\n *\n * @param {*} datamodel\n * @param {*} config\n *\n * @memberof VisualEncoder\n */\n fieldSanitizer (datamodel, config) {\n this.fieldInfo(transformFields(datamodel, config));\n return this.fieldInfo();\n }\n\n /**\n *\n *\n * @param {*} params\n *\n * @memberof VisualEncoder\n */\n axisFrom (...params) {\n if (params.length) {\n this._axisFrom = params[0];\n return this;\n }\n return this._axisFrom;\n }\n\n /**\n *\n *\n * @param {*} params\n *\n * @memberof VisualEncoder\n */\n headerFrom (...params) {\n if (params.length) {\n this._headerFrom = params[0];\n return this;\n }\n return this.__headerFrom;\n }\n\n /**\n *\n *\n * @param {*} axisFrom\n *\n * @memberof CartesianEncoder\n */\n setAxisAndHeaders (axisFrom = {}, fields) {\n const [rowHeader, rowAxis] = getHeaderAxisFrom(ROW, fields.rows, axisFrom);\n const [colHeader, colAxis] = getHeaderAxisFrom(COLUMN, fields.columns, axisFrom);\n\n this.axisFrom({\n row: rowAxis,\n column: colAxis\n });\n this.headerFrom({\n row: rowHeader,\n column: colHeader\n });\n return this;\n }\n}\n","import { ContinousAxis, BandAxis, TimeAxis, ColorAxis, SizeAxis, ShapeAxis } from '@chartshq/muze-axis';\n\nexport const scaleMaps = {\n linear: ContinousAxis,\n band: BandAxis,\n temporal: TimeAxis,\n size: SizeAxis,\n color: ColorAxis,\n shape: ShapeAxis\n};\n","import { ScaleType } from '@chartshq/muze-axis';\n\n/**\n * Map of DataModel types to associated field types.\n */\nexport const dataTypeScaleMap = {\n dimension: ScaleType.BAND,\n categorical: ScaleType.BAND,\n temporal: ScaleType.TIME,\n measure: ScaleType.LINEAR,\n continuous: ScaleType.LINEAR\n};\n","import { mergeRecursive } from 'muze-utils';\nimport { AxisOrientation } from '@chartshq/muze-axis';\nimport { scaleMaps } from '../enums/scale-maps';\nimport { getAxisType, getAxisKey } from '../group-helper';\nimport { dataTypeScaleMap } from '../data-type-scale-map';\nimport { CATEGORICAL, TEMPORAL, BAR, LINE, POINT, BOTH, Y } from '../enums/constants';\n\n/**\n *\n *\n * @param {*} axisInfo\n * @param {*} field\n * @param {*} axesCreators\n *\n */\nconst getAxisConfig = (axisInfo, field, axesCreators) => {\n let axisOrientation;\n const { index, axisIndex, axisType } = axisInfo;\n const { config, position } = axesCreators;\n const userAxisConfig = config.axes ? (config.axes[axisType] || {}) : {};\n const {\n LEFT,\n RIGHT,\n TOP,\n BOTTOM\n } = AxisOrientation;\n const allOrientations = axisType === Y ? [LEFT, RIGHT] : [TOP, BOTTOM];\n\n if (position === BOTH) {\n axisOrientation = allOrientations[axisIndex];\n } else {\n axisOrientation = position;\n }\n const axisConfig = {\n id: `${axisType}-${index}-${axisIndex}`,\n name: field.toString(),\n field: field.toString(),\n numberFormat: field.numberFormat(),\n orientation: axisOrientation,\n showAxisName: true,\n show: true,\n type: dataTypeScaleMap[field.subtype()]\n };\n userAxisConfig.tickValues = field.format(userAxisConfig.tickValues);\n userAxisConfig.domain = field.format(userAxisConfig.domain);\n\n return mergeRecursive(axisConfig, userAxisConfig);\n};\n\n/**\n *\n *\n * @param {*} axisInfo\n * @param {*} field\n * @param {*} axesCreators\n *\n */\nconst createSimpleAxis = (axisConfig, field, axesCreators) => {\n const { labelManager } = axesCreators;\n const Cls = scaleMaps[dataTypeScaleMap[field.subtype()]];\n const simpleAxis = new Cls(axisConfig, { labelManager });\n return simpleAxis;\n};\n\nexport const getAdjustedDomain = (max, min) => {\n const y1ratio = max[0] / (max[0] - min[0]);\n const y2ratio = max[1] / (max[1] - min[1]);\n\n // adjust min/max values for positive negative values zero line etc\n let allSameSign = false;\n\n // if all numbers are positive set floor to zero\n if (min[0] > 0 && min[1] > 0 && min[1] > 0 && max[1] > 0) {\n allSameSign = true;\n min[0] = 0;\n min[1] = 0;\n }\n\n // if all numbers are negative set ceiling to zero\n if (min[0] < 0 && min[1] < 0 && min[1] < 0 && max[1] < 0) {\n allSameSign = true;\n max[0] = 0;\n max[1] = 0;\n }\n\n // align zero line if necessary\n if (!allSameSign && y1ratio !== y2ratio) {\n if (y1ratio < y2ratio) {\n // adjust min[1]\n min[1] = min[0] / max[0] * max[1];\n } else {\n // adjust min[0]\n min[0] = min[1] / max[1] * max[0];\n }\n }\n return [\n [min[0], max[0]],\n [min[1], max[1]]\n ];\n};\n\n/**\n *\n *\n * @param {*} axisType\n * @param {*} fieldInfo\n * @param {*} axesCreators\n * @param {*} groupAxes\n *\n */\nexport const generateAxisFromMap = (axisType, fieldInfo, axesCreators, axesInfo) => {\n let axisKey;\n const { groupAxes, valueParser } = axesInfo;\n const currentAxes = [];\n const { fields, index } = fieldInfo;\n const { cacheMaps } = axesCreators;\n const map = cacheMaps[`${axisType}AxesMap`];\n\n const commonAxisKey = getAxisKey(axisType, index);\n fields.forEach((field, axisIndex) => {\n axisKey = getAxisKey(axisType, index, axisIndex, dataTypeScaleMap[field.subtype()]);\n const axisConfig = getAxisConfig({ index, axisIndex, axisType }, field, axesCreators);\n\n let axis;\n if (!map.has(axisKey)) {\n axis = createSimpleAxis(axisConfig, field, axesCreators);\n } else {\n axis = map.get(axisKey);\n axis._rotationLock = false;\n axis.config(axisConfig);\n axisConfig.domain ? axis.domain(axisConfig.domain) : axis.resetDomain();\n }\n axis.valueParser(valueParser);\n currentAxes.push(axis);\n map.set(axisKey, axis);\n });\n\n if (currentAxes.length) {\n map.set(commonAxisKey, currentAxes);\n groupAxes.add(commonAxisKey);\n }\n\n return currentAxes;\n};\n\n/**\n *\n *\n * @memberof MatrixResolver\n */\nexport const mutateAxesFromMap = (cacheMaps, axes) => {\n const {\n xAxesMap,\n yAxesMap\n } = cacheMaps;\n const {\n x: xAxisSet,\n y: yAxisSet\n } = axes;\n const xAxes = [];\n const yAxes = [];\n\n xAxisSet.forEach((axisId) => {\n const xAxis = xAxesMap.get(axisId);\n xAxes.push(xAxis);\n });\n yAxisSet.forEach((axisId) => {\n const yAxis = yAxesMap.get(axisId);\n yAxes.push(yAxis);\n });\n return {\n xAxes, yAxes\n };\n};\n\n/**\n * return a default mark based on predefined set of rules of type and subtype of the fields\n *\n * @param {string} colFieldType dimension/measure - temporal/ordinal/nominal\n * @param {string} rowFieldType dimension/measure - temporal/ordinal/nominal\n * @return {Object} return mark type\n */\nexport const getDefaultMark = (colFieldType, rowFieldType) => {\n let mark;\n\n if (colFieldType === CATEGORICAL || rowFieldType === CATEGORICAL) {\n mark = BAR;\n } else if (colFieldType === TEMPORAL || rowFieldType === TEMPORAL) {\n mark = LINE;\n } else {\n mark = POINT;\n }\n\n return mark;\n};\n\n/**\n *\n *\n * @param {*} axesCreators\n * @param {*} [fieldInfo=[]]\n *\n */\nexport const createRetinalAxis = (axesCreators, fieldProps = {}) => {\n const { axisType, fieldsConfig } = axesCreators;\n const field = fieldProps.field;\n const axis = [];\n const Cls = scaleMaps[axisType];\n\n fieldProps.type = fieldProps.type ? fieldProps.type : getAxisType(fieldsConfig, field || null);\n axis.push(new Cls(fieldProps));\n return axis;\n};\n\n/**\n *\n *\n * @param {*} arr\n * @param {*} val\n *\n */\nexport const getIndex = (arr, val) => {\n let i = 0;\n let arrIndex = -1;\n\n while (arrIndex === -1 && i < arr.length) {\n if (arr[i].toString() === val.toString()) {\n arrIndex = i;\n }\n i++;\n }\n return arrIndex;\n};\n\n/**\n *\n *\n * @param {*} colFields\n * @param {*} rowFields\n * @param {*} userLayerConfig\n *\n * @memberof CartesianEncoder\n */\nexport const getLayerConfFromFields = (colFields, rowFields, userLayerConfig) => userLayerConfig.filter((conf) => {\n const userConf = conf instanceof Array ? conf : [conf];\n const encodingArr = [].concat(...userConf.map(d => d.encoding).filter(d => d !== undefined));\n\n if (!encodingArr.length) {\n return true;\n }\n\n const xFields = [].concat(...encodingArr.map(d => [d.x && d.x.field, d.x0 && d.x0.field]))\n .filter(d => d !== undefined && d !== null);\n const yFields = [].concat(...encodingArr.map(d => [d.y && d.y.field, d.y0 && d.y0.field]))\n .filter(d => d !== undefined && d !== null);\n\n if (!xFields.length && !yFields.length) {\n return true;\n }\n\n const colFieldExist = xFields.length ? xFields.every(d => colFields.indexOf(d) !== -1) : false;\n const rowFieldExist = yFields.length ? yFields.every(d => rowFields.indexOf(d) !== -1) : false;\n if (xFields.length && yFields.length) {\n return colFieldExist && rowFieldExist;\n }\n return colFieldExist || rowFieldExist;\n});\n","import { layerFactory } from '@chartshq/visual-layer';\nimport { mergeRecursive, STATE_NAMESPACES, unionDomain } from 'muze-utils';\nimport {\n generateAxisFromMap,\n getDefaultMark,\n getIndex,\n getLayerConfFromFields,\n getAdjustedDomain\n} from './encoder-helper';\nimport { retriveDomainFromData } from '../group-helper';\n\nimport { ROW, COLUMN, COL, LEFT, TOP, CARTESIAN, MEASURE, BOTH, X, Y } from '../enums/constants';\nimport VisualEncoder from './visual-encoder';\n\n/**\n *\n *\n * @export\n * @class CartesianEncoder\n * @extends {VisualEncoder}\n */\nexport default class CartesianEncoder extends VisualEncoder {\n\n /**\n *\n *\n *\n * @memberof CartesianEncoder\n */\n static type () {\n return CARTESIAN;\n }\n\n /**\n *\n *\n * @param {*} axesCreators\n * @param {*} fieldInfo\n *\n * @memberof CartesianEncoder\n */\n createAxis (axesCreators, fieldInfo, context) {\n const geomCellAxes = {};\n const {\n axes\n } = axesCreators;\n const {\n projections,\n indices\n } = fieldInfo;\n const {\n rowFields,\n columnFields\n } = projections;\n const {\n rowIndex,\n columnIndex\n } = indices;\n const axisFields = [{\n fields: rowFields,\n index: rowIndex\n }, {\n fields: columnFields,\n index: columnIndex\n }];\n const xAxes = axes.x || [];\n const yAxes = axes.y || [];\n\n [rowFields, columnFields].forEach((fields, i) => {\n const type = i === 0 ? ROW : COLUMN;\n const axis = i === 0 ? Y : X;\n\n if (fields.length > 1) {\n axesCreators.position = BOTH;\n } else {\n axesCreators.position = this.axisFrom()[type];\n }\n geomCellAxes[axis] = generateAxisFromMap(axis, axisFields[i], axesCreators, {\n groupAxes: axis === X ? xAxes : yAxes,\n valueParser: context.resolver.valueParser()\n });\n });\n return geomCellAxes;\n }\n\n updateDomains (store, axes) {\n const xAxes = axes.x;\n const yAxes = axes.y;\n store.model.lock();\n for (let i = 0; i < xAxes.length; i++) {\n for (let j = 0; j < xAxes[i].length; j++) {\n store.commit(`${STATE_NAMESPACES.GROUP_GLOBAL_NAMESPACE}.domain.x.${0}${i}0`, xAxes[i][j].domain());\n }\n }\n for (let i = 0; i < yAxes.length; i++) {\n for (let j = 0; j < yAxes[i].length; j++) {\n store.commit(`${STATE_NAMESPACES.GROUP_GLOBAL_NAMESPACE}.domain.y.${i}${0}0`, yAxes[i][j].domain());\n yAxes[i][j]._domainLock = false;\n }\n }\n\n store.model.unlock();\n }\n\n unionUnitDomains (context) {\n const store = context.store();\n const unitDomains = store.get(`${STATE_NAMESPACES.UNIT_GLOBAL_NAMESPACE}.domain`);\n const resolver = context.resolver();\n const units = resolver.units();\n const domains = {\n 0: {},\n 1: {}\n };\n\n for (let rIdx = 0, len = units.length; rIdx < len; rIdx++) {\n const unitsArr = units[rIdx];\n for (let cIdx = 0, len2 = unitsArr.length; cIdx < len2; cIdx++) {\n const unit = unitsArr[cIdx];\n const axisFields = unit.fields();\n [axisFields.x, axisFields.y].forEach((fieldArr, axisType) => {\n fieldArr.forEach((field, axisIndex) => {\n const key = !axisType ? `0${cIdx}${axisIndex}` : `${rIdx}0${axisIndex}`;\n const dom = unitDomains[`${rIdx}${cIdx}`];\n if (dom && Object.keys(dom).length !== 0) {\n domains[axisType][key] = unionDomain([(domains[axisType] && domains[axisType][key]) || [],\n dom[`${field}`]], field.subtype());\n }\n });\n });\n }\n }\n\n const { x: xAxes, y: yAxes } = resolver.axes();\n store.model.lock();\n [xAxes, yAxes].forEach((axesArr, axisType) => {\n axesArr.forEach((axes, idx) => {\n const min = [];\n const max = [];\n let domain = [];\n let adjustedDomain = [];\n if (axes.length > 1 && axes[0].constructor.type() === 'linear' && axes[0].config().alignZeroLine) {\n axes.forEach((axis, i) => {\n const key = !axisType ? `0${idx}${i}` : `${idx}0${i}`;\n domain = domains[axisType][key];\n min[i] = domain[0];\n max[i] = domain[1];\n });\n adjustedDomain = getAdjustedDomain(max, min);\n }\n\n axes.forEach((axis, index) => {\n const key = !axisType ? `0${idx}${index}` : `${idx}0${index}`;\n domain = adjustedDomain[index] || domains[axisType][key];\n axis.domain(domain);\n const type = !axisType ? 'x' : 'y';\n store.commit(`${STATE_NAMESPACES.GROUP_GLOBAL_NAMESPACE}.domain.${type}.${idx}${index}`, domain);\n });\n });\n });\n store.model.unlock();\n }\n\n /**\n *\n *\n * @param {*} fields\n *\n * @memberof CartesianEncoder\n */\n getFacetsAndProjections (fields, type) {\n let facets = [];\n let projections = [];\n let counter = 0;\n const primaryFacets = [];\n const secondaryFacets = [];\n const primaryFields = fields[0];\n const secondaryFields = fields[1];\n const primaryLen = primaryFields.length;\n const secondaryLen = secondaryFields.length;\n const axisFrom = this.axisFrom();\n\n for (let i = 0; i < primaryLen; i++) {\n let projArr = [primaryFields[i]];\n const primaryField = primaryFields[i];\n\n if (primaryField.type() === MEASURE) {\n const secondaryField = secondaryFields[counter];\n if (secondaryField && secondaryField.type() === MEASURE) {\n counter++;\n projArr = [primaryField, secondaryField];\n }\n projections.push(projArr);\n } else {\n facets.push(primaryField);\n primaryFacets.push(primaryField);\n }\n }\n if (secondaryLen > counter) {\n for (let i = counter; i < secondaryLen; i++) {\n const secondaryField = secondaryFields[i];\n const projArr = [secondaryField];\n if (secondaryField.type() === MEASURE) {\n projections.push(projArr);\n } else {\n facets.push(secondaryField);\n secondaryFacets.push(secondaryField);\n }\n }\n }\n if ((primaryFacets.length || secondaryFacets.length) && !projections.length) {\n type = type === COL ? COLUMN : type;\n if ((axisFrom[type] === LEFT || axisFrom[type] === TOP) && primaryFacets.length) {\n const axisFromIndex = primaryFacets.length - 1;\n const facet = primaryFacets[axisFromIndex];\n projections = [[facet]];\n const existIndex = getIndex(secondaryFacets, facet);\n if (existIndex > -1) {\n projections = [[facet, facet]];\n secondaryFacets.splice(existIndex, 1);\n }\n primaryFacets.splice(axisFromIndex, 1);\n } else {\n const axisFromIndex = 0;\n const facet = secondaryFacets[axisFromIndex];\n projections = [[facet]];\n const existIndex = getIndex(primaryFacets, facet);\n if (existIndex > -1) {\n projections = [[facet, facet]];\n primaryFacets.splice(existIndex, 1);\n }\n secondaryFacets.splice(axisFromIndex, 1);\n }\n }\n\n facets = [...primaryFacets, ...secondaryFacets];\n facets = facets.filter((el, index, self) => index === self.findIndex(t => (t.toString() === el.toString())));\n return {\n facets,\n projections\n };\n }\n\n /**\n *\n *\n * @param {*} datamodel\n * @param {*} config\n *\n * @memberof CartesianEncoder\n */\n fieldSanitizer (datamodel, config) {\n return super.fieldSanitizer(datamodel, config);\n }\n\n /**\n *\n *\n * @param {*} datamodel\n *\n * @memberof CartesianEncoder\n */\n getRetinalFieldsDomain (dataModels, encoding) {\n const groupedModel = dataModels.groupedModel;\n const domains = {};\n for (const key in encoding) {\n if ({}.hasOwnProperty.call(encoding, key)) {\n const encodingObj = encoding[key];\n const field = encodingObj.field;\n if (!encodingObj.domain && field) {\n const domain = retriveDomainFromData(groupedModel, field);\n domains[field] = domain;\n }\n }\n }\n return domains;\n }\n\n /**\n *\n *\n * @param {*} layerArray\n * @memberof CartesianEncoder\n */\n serializeLayerConfig (layerArray) {\n const serializedLayers = [];\n // let currentLayerIndex = 0;\n layerArray.length && layerArray.forEach((layer, i) => {\n const def = layerFactory.sanitizeLayerConfig(layer);\n def.order = i;\n serializedLayers.push(def);\n });\n return serializedLayers;\n }\n\n /**\n *\n *\n * @param {*} fields\n * @param {*} userLayerConfig\n *\n * @memberof CartesianEncoder\n */\n getLayerConfig (fields, userLayerConfig) {\n const layerConfig = [];\n const {\n columnFields,\n rowFields\n } = fields;\n\n // let currentLayerIndex = 0;\n columnFields.forEach((colField) => {\n const colFieldName = colField.toString();\n rowFields.forEach((rowField) => {\n let configs = [];\n const rowFieldName = rowField.toString();\n const encoding = {\n x: {\n field: colFieldName\n },\n y: {\n field: rowFieldName\n }\n };\n const rowFieldType = rowField.subtype();\n const colFieldType = colField.subtype();\n const mark = getDefaultMark(colFieldType, rowFieldType);\n\n const defConfigs = [{\n mark,\n def: {\n mark,\n encoding\n }\n }];\n\n const layerConfigs = getLayerConfFromFields(colField.getMembers(),\n rowField.getMembers(), userLayerConfig || []);\n if (layerConfigs.length) {\n configs = layerConfigs.map((layerConf) => {\n const mergedLayerConf = mergeRecursive(mergeRecursive({}, defConfigs[0].def), layerConf);\n const serializedLayerConfig = layerFactory.getSerializedConf(mergedLayerConf.mark,\n mergedLayerConf);\n return {\n mark: mergedLayerConf.mark,\n order: mergedLayerConf.order,\n def: serializedLayerConfig\n };\n });\n } else {\n configs = defConfigs;\n }\n\n layerConfig.push(...configs);\n });\n });\n return layerConfig;\n }\n}\n","import { layerFactory } from '@chartshq/visual-layer';\nimport { mergeRecursive, STATE_NAMESPACES } from 'muze-utils';\nimport VisualEncoder from './visual-encoder';\nimport { RADIUS, ANGLE, SIZE, MEASURE, ARC, POLAR, COLOR } from '../enums/constants';\n/**\n *\n *\n * @export\n * @class PolarEncoder\n * @extends {VisualEncoder}\n */\nexport default class PolarEncoder extends VisualEncoder {\n\n /**\n *\n *\n * @param {*} axesCreators\n * @param {*} fieldInfo\n *\n * @memberof PolarEncoder\n */\n createAxis (axesCreators, fieldInfo) {\n const {\n axes\n } = axesCreators;\n const geomCellAxes = axes;\n const {\n indices\n } = fieldInfo;\n const {\n rowIndex,\n columnIndex\n } = indices;\n // Dummy axes for polar, to create blank cells\n const pieAxes = geomCellAxes.pie || [];\n\n pieAxes[rowIndex] = pieAxes[rowIndex] || [];\n pieAxes[rowIndex][columnIndex] = [];\n\n geomCellAxes.pie = pieAxes;\n geomCellAxes.x = null;\n geomCellAxes.y = null;\n\n return geomCellAxes;\n }\n\n /**\n *\n *\n * @param {*} fields\n *\n * @memberof CartesianEncoder\n */\n getFacetsAndProjections (fields) {\n let counter = 0;\n const facets = [];\n const projections = [];\n const primaryFields = fields[0];\n const secondaryFields = fields[1];\n const primaryLen = primaryFields.length;\n const secondaryLen = secondaryFields.length;\n\n for (let i = 0; i < primaryLen; i++) {\n const primaryField = primaryFields[i];\n if (primaryField.type() === MEASURE) {\n const secondaryField = secondaryFields[counter++];\n const projArr = secondaryField ? [primaryField, secondaryField] : [primaryField];\n projections.push(projArr);\n } else {\n facets.push(primaryField);\n }\n }\n if (secondaryLen > counter) {\n for (let i = counter; i < secondaryLen; i++) {\n const secondaryField = secondaryFields[i];\n const projArr = [secondaryField];\n if (secondaryField.type() === MEASURE) {\n projections.push(projArr);\n } else {\n facets.push(secondaryField);\n }\n }\n }\n return {\n facets,\n projections\n };\n }\n\n unionUnitDomains (context) {\n const store = context.store();\n const domains = store.get(`${STATE_NAMESPACES.UNIT_GLOBAL_NAMESPACE}.domain`);\n const domainProps = {\n radius: [Infinity, -Infinity]\n };\n Object.values(domains).forEach((domainVal) => {\n for (const key in domainVal) {\n domainProps[key] = [Math.min(domainVal[key][0], domainProps[key][0]),\n Math.min(domainVal[key][1], domainProps[key][1])];\n }\n });\n store.commit(`${STATE_NAMESPACES.GROUP_GLOBAL_NAMESPACE}.domain.radius`, domainProps.radius);\n }\n\n /**\n *\n *\n *\n * @memberof PolarEncoder\n */\n setCommonDomain () {\n // No domain to be set\n return this;\n }\n\n /**\n *\n *\n *\n * @memberof PolarEncoder\n */\n static type () {\n return POLAR;\n }\n\n layers (...layers) {\n if (layers.length) {\n this._layers = layers[0];\n return this;\n }\n return this._layers;\n }\n\n /**\n *\n *\n * @param {*} datamodel\n * @param {*} config\n * @memberof PolarEncoder\n */\n fieldSanitizer (datamodel, config) {\n let sanitizedRows = [[], []];\n let sanitizedColumns = [[], []];\n const fields = super.fieldSanitizer(datamodel, config);\n const {\n layers\n } = config;\n const {\n rows,\n columns\n } = fields;\n const layer = layers[0];\n const encoding = layer.encoding;\n const radius = encoding && encoding.radius ? encoding.radius.field : null;\n const angle = encoding && encoding.angle ? encoding.angle.field : null;\n const sanitizedFields = [sanitizedRows, sanitizedColumns];\n\n [rows, columns].forEach((fieldType, typeIndex) => {\n fieldType.forEach((fieldSet, i) => fieldSet.forEach((field) => {\n if (field.toString() !== radius && field.toString() !== angle && field.type() !== MEASURE) {\n sanitizedFields[typeIndex][i].push(field);\n }\n }));\n });\n sanitizedColumns = [...new Set(sanitizedColumns)];\n sanitizedRows = [...new Set(sanitizedRows)];\n this.fieldInfo({ rows: sanitizedRows, columns: sanitizedColumns });\n return this.fieldInfo();\n }\n\n getRetinalFieldsDomain (dataModels, encoding, facetFields, groupBy) {\n let sizeField;\n let colorField;\n const fields = [];\n const layers = this.layers();\n const dataModel = dataModels.groupedModel;\n const fieldsConfig = dataModel.getFieldsConfig();\n const domains = {};\n if (layers && layers[0]) {\n const layer = layers[0];\n const layerEncoding = layer.def.encoding || {};\n\n [RADIUS, ANGLE, SIZE, COLOR].forEach((encType) => {\n const field = layerEncoding[encType] ? layerEncoding[encType].field : '';\n const measureField = fieldsConfig[field] && fieldsConfig[field].def.type === MEASURE;\n if (encType === SIZE && measureField) {\n sizeField = field;\n }\n if (encType === COLOR) {\n colorField = field;\n }\n fieldsConfig[field] && !measureField && fields.push(field);\n });\n }\n\n if (sizeField) {\n domains[sizeField] = dataModel.groupBy(facetFields, {\n [sizeField]: 'sum'\n }).getFieldspace().fieldsObj()[sizeField].domain();\n }\n\n if (colorField) {\n const dm = dataModel.groupBy([...facetFields, ...fields], groupBy.measures);\n domains[colorField] = dm.getFieldspace().fieldsObj()[colorField].domain();\n }\n return domains;\n }\n /**\n *\n *\n * @param {*} fields\n * @param {*} userLayerConfig\n *\n * @memberof PolarEncoder\n */\n getLayerConfig (fields, userLayerConfig) {\n let layerConfig = [];\n const {\n columnFields,\n rowFields\n } = fields;\n const allFields = [...columnFields, ...rowFields];\n\n allFields.forEach(() => {\n const encoding = {};\n let config = {\n mark: ARC,\n def: {\n encoding\n }\n };\n if (userLayerConfig && userLayerConfig.length > 0) {\n config = mergeRecursive(config, userLayerConfig[0]);\n }\n layerConfig.push(config);\n });\n if (layerConfig.length === 0) {\n layerConfig = userLayerConfig;\n }\n\n this.layers(layerConfig);\n return layerConfig;\n }\n\n /**\n *\n *\n * @param {*} layerArray\n *\n * @memberof PolarEncoder\n */\n serializeLayerConfig (layerArray) {\n const serializedLayers = [];\n\n layerArray.length && layerArray.forEach((layer) => {\n const def = layerFactory.getSerializedConf(layer.mark, layer);\n serializedLayers.push({\n mark: layer.mark,\n def\n });\n });\n return serializedLayers;\n }\n}\n","import { createRetinalAxis } from './encoder-helper';\nimport { COLOR, SHAPE, SIZE } from '../enums/constants';\nimport VisualEncoder from './visual-encoder';\n\n/**\n *\n *\n * @export\n * @class RetinalEncoder\n * @extends {VisualEncoder}\n */\nexport default class RetinalEncoder extends VisualEncoder {\n\n /**\n *\n *\n * @param {*} axesCreators\n *\n * @memberof RetinalEncoder\n */\n createAxis (axesCreators) {\n const { fieldsConfig, config } = axesCreators;\n const newAxes = {};\n\n [COLOR, SHAPE, SIZE].forEach((axisType) => {\n newAxes[`${axisType}`] = createRetinalAxis({ axisType, fieldsConfig }, config[axisType]);\n });\n return newAxes;\n }\n\n /**\n *\n *\n * @static\n *\n * @memberof RetinalEncoder\n */\n static type () {\n return 'retinal';\n }\n\n /**\n *\n *\n * @param {*} fields\n * @param {*} userLayerConfig\n *\n * @memberof RetinalEncoder\n */\n getLayerConfig (encodingConfigs, userLayerConfig) {\n const layerConfig = [];\n userLayerConfig.forEach((e) => {\n const config = e;\n [COLOR, SHAPE, SIZE].forEach((axis) => {\n if (encodingConfigs[axis] && encodingConfigs[axis].field) {\n const def = config.def;\n if (config.def instanceof Array) {\n def.forEach((conf) => {\n conf.encoding = conf.encoding || {};\n !conf.encoding[axis] && (conf.encoding[axis] = {});\n conf.encoding[axis].field = encodingConfigs[axis].field;\n });\n } else {\n def.encoding = def.encoding || {};\n !def.encoding[axis] && (def.encoding[axis] = {});\n def.encoding[axis].field = encodingConfigs[axis].field;\n }\n }\n });\n layerConfig.push(config);\n });\n return layerConfig;\n }\n\n /**\n *\n *\n * @param {*} context\n *\n * @memberof RetinalEncoder\n */\n setCommonDomain (context) {\n const { domains, axes, encoding } = context;\n\n Object.entries(encoding).forEach((enc) => {\n if (enc[1] && enc[1].field) {\n const encType = enc[0];\n const field = enc[1].field;\n\n if (field) {\n axes[encType].forEach((axis) => {\n const domain = domains[field];\n !enc[1].domain && axis.updateDomain(domain);\n });\n }\n }\n });\n return axes;\n }\n}\n","import { Store, FieldType } from 'muze-utils';\nimport { DATA_UPDATE_COUNTER } from '../enums/defaults';\nimport { Variable } from '../variable';\nimport { PolarEncoder, CartesianEncoder } from '../encoder';\nimport {\n DIMENSION,\n MEASURE,\n ORDINAL,\n LINEAR,\n ROW,\n COLUMN,\n COL,\n LEFT,\n RIGHT,\n TOP,\n BOTTOM,\n COLOR,\n SIZE,\n TEMPORAL,\n SHAPE,\n INTERACTION,\n GRID_LINES,\n GRID_BANDS,\n HEADER,\n FACET,\n X,\n Y,\n POLAR\n} from '../enums/constants';\n\n/**\n * Creates an instance of a store which contains the arguments to make the class reactive\n *\n * @return {Object} instance of store\n * @memberof VisualGroup\n */\nexport const initStore = () => new Store({\n [DATA_UPDATE_COUNTER]: DATA_UPDATE_COUNTER\n});\n\n/**\n *\n *\n * @param {*} arr\n */\nexport const isDistributionEqual = arr => [...arr[0], ...arr[1]].reduce((isEqual, row) => {\n const rowType = row.type();\n\n if (rowType === MEASURE || rowType === TEMPORAL) {\n isEqual = true;\n }\n return isEqual;\n}, false);\n\n/**\n *\n *\n */\nexport const initializeCacheMaps = () => ({\n cellMap: new Map(),\n xAxesMap: new Map(),\n yAxesMap: new Map(),\n entryCellMap: new Map(),\n exitCellMap: new Map()\n});\n\n/**\n *\n *\n * @param {*} axisName\n * @param {*} id\n */\nexport const getAxisKey = (axisName, ...params) => `${axisName}-axis-${params.join('-')}`;\n\n/**\n *\n *\n * @param {*} rowId\n * @param {*} columnId\n */\nexport const getCellKey = (rowId, columnId) => `cell-${rowId}-${columnId}`;\n\n/**\n *\n *\n * @param {*} config\n *\n */\nexport const extractUnitConfig = (config) => {\n const unitConfig = {};\n const attrNames = [INTERACTION, GRID_LINES, GRID_BANDS];\n\n attrNames.forEach((attr) => {\n if (config[attr] !== undefined) {\n unitConfig[attr] = config[attr];\n }\n });\n return unitConfig;\n};\n\n/**\n *\n *\n * @param {*} headers\n * @param {*} index\n * @param {*} rowLength\n *\n * @memberof MatrixResolver\n */\nexport const getHeaderText = (headers, index, rowLength) => {\n let header = '';\n\n if (index === rowLength - 1 && headers.length > rowLength) {\n for (let i = index; i < headers.length - 1; i++) {\n header += `${headers[i].toString()} / `;\n }\n header += headers[headers.length - 1].toString();\n return header;\n } else if (headers[index]) {\n return headers[index].toString();\n }\n return '';\n};\n\n/**\n *\n *\n * @param {*} fields\n * @param {*} fieldHeaders\n * @param {*} TextCell\n * @param {*} labelManager\n *\n */\nexport const headerCreator = (fields, fieldHeaders, TextCell, { classPrefix, labelManager }) => {\n const headers = fields.length > 0 ? fields[0].map((cell, i) => new TextCell({\n type: HEADER,\n className: `${classPrefix}-grid-headers`\n }, {\n labelManager\n }).source(getHeaderText(fieldHeaders, i, fields[0].length))\n .config({ show: cell.config().show })) : [];\n return headers;\n};\n\n/**\n *\n *\n * @param {*} variable\n * @param {*} allFields\n *\n */\nexport const findInGroup = (variable, allFields) => {\n let channel = null;\n\n [COLOR, SIZE, SHAPE].forEach((e) => {\n if (this.store.get(e) && variable === this.store.get(e)[0]) {\n channel = e;\n }\n });\n\n if (channel) {\n return { channel };\n }\n [ROW, COL].forEach((facetType) => {\n allFields[`${facetType}Facets`].forEach((e) => {\n if (e.toString() === variable) {\n channel = { channel: FACET, type: facetType === COL ? COLUMN : ROW };\n }\n });\n });\n\n if (channel) {\n return channel;\n }\n\n [ROW, COL].forEach((projType) => {\n allFields[`${projType}Projections`].forEach((e) => {\n e.forEach((m) => {\n if (m.toString() === variable) {\n channel = projType === COL ? X : Y;\n }\n });\n });\n });\n\n if (channel) {\n return { channel };\n }\n return null;\n};\n\n/**\n *\n *\n * @param {*} datamodel\n * @param {*} field\n */\nexport const getAxisType = (fieldsConfig, field) => {\n let fieldType = ORDINAL;\n\n if (field && fieldsConfig[field].def.type !== DIMENSION) {\n fieldType = LINEAR;\n }\n return fieldType;\n};\n\n/**\n *\n *\n * @param {*} datamodel\n * @param {*} fieldName\n *\n */\nexport const retriveDomainFromData = (datamodel, fieldName) => {\n const field = datamodel.getFieldspace().fields.find(d => d.name() === fieldName.toString());\n return field.domain();\n};\n\n/**\n *\n *\n * @memberof MatrixResolver\n */\nexport const mutateAxesFromMap = (cacheMaps, axes) => {\n let xAxes = null;\n let yAxes = null;\n const {\n xAxesMap,\n yAxesMap\n } = cacheMaps;\n const {\n x: xAxisSet,\n y: yAxisSet\n } = axes;\n\n xAxisSet && xAxisSet.forEach((axisId) => {\n const xAxis = xAxesMap.get(axisId);\n xAxes = xAxes || [];\n xAxes.push(xAxis);\n });\n\n yAxisSet && yAxisSet.forEach((axisId) => {\n const yAxis = yAxesMap.get(axisId);\n yAxes = yAxes || [];\n yAxes.push(yAxis);\n });\n\n return {\n xAxes, yAxes\n };\n};\n\n/**\n *\n *\n * @param {*} layers\n *\n */\nexport const getEncoder = (layers) => {\n let encoder = new CartesianEncoder();\n\n if (layers.length) {\n // Figuring out the kind of layers the group will have\n encoder = layers.every(e => e.mark === 'arc') ? new PolarEncoder() : encoder;\n }\n return encoder;\n};\n\n/**\n *\n *\n * @param {*} type\n * @param {*} fields\n * @param {*} userAxisFromConfig\n *\n */\nexport const getHeaderAxisFrom = (type, fields, userAxisFromConfig) => {\n let axisFrom = userAxisFromConfig[type];\n let headerFrom = '';\n const options = type === ROW ? [LEFT, RIGHT] : [BOTTOM, TOP];\n const [firstField, secondField] = fields;\n const firstFieldType = i => (firstField.length ? firstField[i].type() : null);\n const secondFieldType = i => (secondField.length ? secondField[i].type() : null);\n\n if (firstFieldType(firstField.length - 1) === DIMENSION && secondFieldType(0) === DIMENSION) {\n headerFrom = axisFrom ? options[1 - options.indexOf(axisFrom)] : options[1];\n\n if (type === COLUMN && (firstField[firstField.length - 1].toString() === secondField[0].toString())) {\n axisFrom = TOP;\n } else {\n axisFrom = axisFrom || options[0];\n }\n } else if (secondFieldType(secondField.length - 1) === DIMENSION) {\n headerFrom = type === ROW ? RIGHT : BOTTOM;\n axisFrom = type === ROW ? RIGHT : BOTTOM;\n } else {\n headerFrom = type === ROW ? LEFT : TOP;\n axisFrom = type === ROW ? LEFT : TOP;\n }\n if (firstFieldType(firstField.length - 1) === MEASURE && secondFieldType(0) === MEASURE) {\n axisFrom = type === ROW ? LEFT : TOP;\n } else if (secondFieldType(0) === MEASURE) {\n axisFrom = type === ROW ? RIGHT : BOTTOM;\n } else if (firstFieldType(firstField.length - 1) === MEASURE) {\n axisFrom = type === ROW ? LEFT : TOP;\n }\n return [headerFrom, axisFrom];\n};\n\n/**\n *\n *\n * @param {*} type\n * @param {*} fields\n * @param {*} layers\n *\n * @memberof MatrixResolver\n */\nexport const setFacetsAndProjections = (context, fieldInfo, encoder) => {\n const {\n fields,\n type\n } = fieldInfo;\n const { facets, projections } = encoder.simpleEncoder.getFacetsAndProjections(fields, type);\n\n context.facets({ [`${type}Facets`]: facets });\n context.projections({ [`${type}Projections`]: projections });\n\n return { facets, projections, fields };\n};\n\nconst getRowBorders = (left, right) => {\n const borders = {};\n borders.top = false;\n borders.bottom = false;\n if (left.length > 1 || right.length > 1) {\n borders.top = true;\n borders.bottom = true;\n }\n return borders;\n};\n\nconst getColumnsBorders = (top, bottom) => {\n const borders = {};\n borders.left = false;\n borders.right = false;\n if (top.length || bottom.length) {\n if ((top[0] && top[0].length > 1) || (bottom[0] && bottom[0].length > 1)) {\n borders.left = true;\n borders.right = true;\n }\n }\n return borders;\n};\n\nconst getValueBorders = (rows, columns) => {\n const borders = { top: true, left: true, bottom: true, right: true };\n const borderTypeRow = [LEFT, RIGHT];\n const borderTypeCol = [TOP, BOTTOM];\n rows.forEach((e, i) => {\n if (e[0] && e[0].length) {\n borders[borderTypeRow[i]] = true;\n } else {\n borders[borderTypeRow[i]] = false;\n }\n });\n columns.forEach((e, i) => {\n if (e.length) {\n borders[borderTypeCol[i]] = true;\n } else {\n borders[borderTypeCol[i]] = false;\n }\n });\n\n return borders;\n};\n\nexport const getBorders = (matrices, encoder) => {\n let showRowBorders = { top: false, bottom: false };\n let showColBorders = { left: false, right: false };\n let showValueBorders = { top: false, bottom: false, left: false, right: false };\n const {\n rows,\n columns,\n values: valueMatrix\n } = matrices;\n const [leftRows, rightRows] = rows;\n const [topColumns, bottomColumns] = columns;\n const {\n rowDimensions,\n columnDimensions,\n rowTemporalFields,\n columnTemporalFields,\n columnMeasures,\n rowMeasures\n } = encoder.fieldInfo();\n const allDimensionLength = rowDimensions.length + columnDimensions.length;\n const allMeasuresLength = rowMeasures.length + columnMeasures.length;\n const allTemporalFieldsLength = rowTemporalFields.length + columnTemporalFields.length;\n\n if (encoder.constructor.type() === POLAR) {\n if (!allDimensionLength) {\n return { showRowBorders, showColBorders, showValueBorders };\n }\n } else if (!allMeasuresLength && !allTemporalFieldsLength && allDimensionLength <= 2) {\n return { showRowBorders, showColBorders, showValueBorders };\n }\n\n showRowBorders = getRowBorders(leftRows, rightRows);\n showColBorders = getColumnsBorders(topColumns, bottomColumns);\n showValueBorders = getValueBorders([leftRows, rightRows], [topColumns, bottomColumns]);\n\n if (valueMatrix.length > 1) {\n showValueBorders.top = true;\n showValueBorders.bottom = true;\n }\n if (valueMatrix.length && valueMatrix[0].length > 1) {\n showValueBorders.left = true;\n showValueBorders.right = true;\n }\n return { showRowBorders, showColBorders, showValueBorders };\n};\n\nexport const getFieldsFromSuppliedLayers = (suppliedLayerConfig, fieldsConfig) => {\n let fields = [];\n const encodingArr = suppliedLayerConfig.map(conf => (conf.encoding || {}));\n fields = [...fields, [].concat(...encodingArr.map(enc => Object.values(enc).map(d => d.field)))];\n fields = fields.filter(field => fieldsConfig[field] && fieldsConfig[field].def.type === FieldType.DIMENSION);\n return fields;\n};\n\nexport const extractFields = (facetsAndProjections, layerFields) => {\n const fields = Object.values(facetsAndProjections).map((arr) => {\n const flattenArray = [].concat(...arr);\n return [].concat(...flattenArray.map((field) => {\n if (field instanceof Variable) {\n return field.getMembers();\n }\n return field;\n }));\n });\n return [].concat(...fields, ...layerFields);\n};\n","import { BEHAVIOURS, ACTIONS } from '@chartshq/muze-firebolt';\n\nexport const actionBehaviourMap = {\n [ACTIONS.DRAG]: {\n behaviours: [BEHAVIOURS.BRUSH],\n touch: false\n },\n [ACTIONS.HOVER]: {\n behaviours: [BEHAVIOURS.HIGHLIGHT]\n },\n [ACTIONS.LONGTOUCH]: {\n behaviours: [BEHAVIOURS.SELECT],\n touch: true\n },\n [ACTIONS.TOUCHDRAG]: {\n behaviours: [BEHAVIOURS.BRUSH],\n touch: true\n },\n [ACTIONS.CLICK]: {\n behaviours: [BEHAVIOURS.SELECT],\n touch: false\n }\n};\n","import {\n FieldType,\n getDependencyOrder,\n getObjProp,\n defaultValue,\n objectIterator,\n unionDomain,\n makeElement,\n DimensionSubtype,\n toArray,\n MeasureSubtype,\n getNearestValue\n} from 'muze-utils';\nimport { layerFactory } from '@chartshq/visual-layer';\n\nexport const getDimensionMeasureMap = (layers, fieldsConfig) => {\n const retinalEncodingsAndMeasures = {};\n\n layers.forEach((layer) => {\n const {\n colorField,\n sizeField,\n shapeField,\n xField,\n yField\n } = layer.encodingFieldsInf();\n const measures = [xField, yField].filter(field => fieldsConfig[field] && fieldsConfig[field].def.type ===\n FieldType.MEASURE);\n [colorField, sizeField, shapeField].forEach((field) => {\n if (fieldsConfig[field] && fieldsConfig[field].def.type === FieldType.DIMENSION) {\n !retinalEncodingsAndMeasures[field] && (retinalEncodingsAndMeasures[field] = []);\n retinalEncodingsAndMeasures[field].push(...measures);\n }\n });\n });\n\n for (const key in retinalEncodingsAndMeasures) {\n if ({}.hasOwnProperty.call(retinalEncodingsAndMeasures, key)) {\n retinalEncodingsAndMeasures[key] = [...new Set(retinalEncodingsAndMeasures[key])];\n }\n }\n return retinalEncodingsAndMeasures;\n};\n\nexport const transformDataModels = (transform, dataModel) => {\n const dataModels = {};\n for (const key in transform) {\n if ({}.hasOwnProperty.call(transform, key)) {\n const transformVal = transform[key];\n dataModels[key] = transformVal(dataModel);\n }\n }\n\n return dataModels;\n};\n\nexport const getLayerFromDef = (context, definition, existingLayer, namespaces) => {\n let instances = existingLayer;\n const dependencies = context._layerDeps;\n const metaInf = context.metaInf();\n if (!existingLayer) {\n instances = layerFactory.getLayerInstance(definition);\n toArray(instances).forEach((inst, i) => {\n inst.metaInf({\n unitRowIndex: metaInf.rowIndex,\n unitColIndex: metaInf.colIndex,\n namespace: namespaces[i]\n });\n inst.store(context.store());\n });\n }\n const layers = {};\n const instanceArr = toArray(instances);\n definition = toArray(definition);\n definition.reduce((acc, def, idx) => {\n const instance = instanceArr[idx];\n instance.config(def);\n instance.valueParser(context.valueParser());\n instance.dependencies(dependencies);\n instance.dataProps({\n timeDiffs: context._timeDiffs\n });\n if (def.name) {\n instance.alias(def.name);\n }\n layers[instance.alias()] = instance;\n return acc;\n }, {});\n return layers;\n};\n\nexport const resolveEncodingTransform = (layerInst, store) => {\n const encodingTransform = layerInst.config().encodingTransform || {};\n const resolvable = encodingTransform.resolvable;\n let depArr = [];\n if (resolvable) {\n const resolved = resolvable(store);\n depArr = resolved.depArr;\n layerInst.encodingTransform(resolved.fn);\n } else if (encodingTransform instanceof Function) {\n layerInst.encodingTransform(encodingTransform);\n }\n return depArr;\n};\n\nexport const createLayers = (context, layerDefinitions) => {\n const layersMap = context._layersMap;\n const markSet = {};\n const store = {\n layers: {},\n components: {\n unit: context\n }\n };\n let layerIndex = 0;\n let layers = layerDefinitions.sort((a, b) => a.order - b.order).reduce((layersArr, layerDef, i) => {\n const mark = layerDef.mark;\n const definition = layerDef.def;\n const markId = `${mark}-${i}`;\n const defArr = toArray(definition);\n defArr.forEach((def) => {\n def.order = layerDef.order + layerIndex;\n });\n layerIndex += defArr.length;\n const instances = getLayerFromDef(context, definition, layersMap[markId], i);\n store.layers = Object.assign(store.layers, instances);\n const instanceValues = Object.values(instances);\n layersArr = layersArr.concat(...instanceValues);\n layersMap[markId] = instanceValues;\n markSet[markId] = markId;\n return layersArr;\n }, []);\n store.unit = context;\n const layerdeps = {};\n layers.forEach((layer) => {\n const depArr = resolveEncodingTransform(layer, store);\n layerdeps[layer.alias()] = depArr;\n });\n\n const order = getDependencyOrder(layerdeps);\n layers = order.map(name => store.layers[name]);\n for (const key in layersMap) {\n if (!(key in markSet)) {\n layersMap[key].forEach(layer => layer.remove());\n delete layersMap[key];\n }\n }\n return layers;\n};\n\nexport const sanitizeLayerDef = (layerDefs) => {\n const sanitizedDefs = [];\n layerDefs.forEach((layerDef, i) => {\n const def = layerDef.def;\n const mark = layerDef.mark;\n if (!def) {\n const sConf = layerFactory.getSerializedConf(layerDef.mark, layerDef);\n if (!sConf.name) {\n sConf.name = `${mark}-${i}`;\n }\n sanitizedDefs.push({\n mark: layerDef.mark,\n def: sConf\n });\n } else {\n if (!def.name) {\n def.name = `${mark}-${i}`;\n }\n sanitizedDefs.push(layerDef);\n }\n });\n return sanitizedDefs;\n};\n\nexport const attachDataToLayers = (layers, dm, transformedDataModels) => {\n layers.forEach((layer) => {\n const dataSource = layer.config().source;\n const dataModel = dataSource instanceof Function ? dataSource(dm) :\n (transformedDataModels[dataSource] || dm);\n if (layer.data() !== dataModel) {\n layer.data(dataModel);\n }\n });\n};\n\nexport const attachAxisToLayers = (axes, layers, layerAxisIndex) => {\n layers.forEach((layer) => {\n const layerId = layer.id();\n const axesObj = {};\n\n objectIterator(axes, (key) => {\n const axisInf = layerAxisIndex[layerId];\n if (axisInf) {\n axes[key] && (axesObj[key] = axes[key][axisInf[key] || 0]);\n }\n });\n Object.keys(axesObj).length && layer.axes(axesObj);\n });\n};\n\nexport const getLayerAxisIndex = (layers, fields) => {\n const layerAxisIndex = {};\n layers.forEach((layer) => {\n const { axis, encoding } = layer.config();\n const id = layer.id();\n ['x', 'y'].forEach((type) => {\n let index;\n const field = defaultValue(getObjProp(axis, type), encoding[type] && encoding[type].field);\n if (fields[type]) {\n index = fields[type].findIndex(fieldInst => fieldInst.getMembers().indexOf(field) !== -1);\n } else {\n index = 0;\n }\n !layerAxisIndex[id] && (layerAxisIndex[id] = {});\n layerAxisIndex[id][type] = index;\n });\n });\n return layerAxisIndex;\n};\n\nexport const unionDomainFromLayers = (layers, axisFields, layerAxisIndex, fieldsConfig) => {\n let domains = {};\n layers = layers.filter(layer => layer.getDataDomain() !== null);\n layers.forEach((layer) => {\n let domainValues = {};\n const config = layer.config();\n const encoding = config.encoding;\n const layerDomain = layer.getDataDomain();\n const layerId = layer.id();\n\n if (layerDomain !== null && config.calculateDomain !== false) {\n domainValues = Object.entries(layerDomain);\n domains = domainValues.reduce((fieldDomain, domain) => {\n const encodingType = domain[0];\n const field = encoding[encodingType].field;\n const axisIndex = layerAxisIndex[layerId][encodingType];\n if (encodingType in axisFields) {\n const fieldStr = `${axisFields[encodingType][axisIndex]}`;\n fieldDomain[fieldStr] = fieldDomain[fieldStr] || [];\n fieldDomain[fieldStr] = unionDomain(([fieldDomain[fieldStr], domain[1]]),\n fieldsConfig[field].def.subtype ? fieldsConfig[field].def.subtype :\n fieldsConfig[field].def.type);\n } else {\n fieldDomain[encodingType] = domain[1];\n }\n return fieldDomain;\n }, domains);\n }\n });\n return domains;\n};\n\nexport const renderLayers = (context, container, layers, measurement) => {\n context._lifeCycleManager.notify({ client: layers, action: 'beforedraw', formalName: 'layer' });\n const config = context.config();\n const classPrefix = config.classPrefix;\n const orderedLayers = context.layers().sort((a, b) => a.config().order - b.config().order);\n const layerParentGroup = makeElement(container, 'g', [1], `${classPrefix}-layer-group`);\n const layerDepOrder = getDependencyOrder(context._layerDepOrder);\n const groups = {};\n makeElement(layerParentGroup, 'g', orderedLayers, null, {\n update: (group, layer) => {\n groups[layer.alias()] = {\n group,\n layer\n };\n }\n });\n const layerSeq = layerDepOrder.map(name => groups[name]);\n layerSeq.forEach((o) => {\n const layer = o.layer;\n const group = o.group;\n layer.measurement(measurement);\n layer.dataProps({\n timeDiffs: context._timeDiffs\n });\n layer.config().render !== false && layer.mount(group.node());\n });\n return this;\n};\n\nexport const getNearestDimensionalValue = (context, position) => {\n const fields = context.fields();\n if (!fields.x.length || !fields.y.length) {\n return null;\n }\n const data = context.data();\n const axes = context.axes();\n const fieldsConfig = data.getFieldsConfig();\n const xField = getObjProp(fields, 'x', 0).getMembers()[0];\n const yField = getObjProp(fields, 'y', 0).getMembers()[0];\n const xFieldType = fieldsConfig[xField].def.subtype;\n const yFieldType = fieldsConfig[yField].def.subtype;\n\n const entryVal = [['x', xFieldType, xField], ['y', yFieldType, yField]].find(entry =>\n entry[1] === DimensionSubtype.CATEGORICAL || entry[1] === DimensionSubtype.TEMPORAL);\n\n if (!entryVal || (xFieldType !== MeasureSubtype.CONTINUOUS && yFieldType !== MeasureSubtype.CONTINUOUS)) {\n return null;\n }\n const field = entryVal[2];\n const index = fieldsConfig[field].index;\n let key = axes[entryVal[0]][0].invert(position[entryVal[0]]);\n if (entryVal[1] === DimensionSubtype.TEMPORAL) {\n const filterData = [...new Set(data.getData().data.map(d => d[index]))];\n key = getNearestValue(filterData, key);\n }\n\n return key !== undefined ? [[field], [key]] : null;\n};\n\nexport const getLayersBy = (layers, searchBy, value) => layers.filter((layer) => {\n const name = searchBy === 'type' ? layer.constructor.formalName() : layer.alias();\n return name === value;\n});\n\nexport const removeLayersBy = (layers, searchBy, value) => {\n layers.filter((inst) => {\n const name = searchBy === 'type' ? inst.config().mark : inst.alias();\n if (name === value) {\n inst.remove();\n return false;\n }\n return true;\n });\n};\n\nexport const createSideEffectGroup = (container, className) => makeElement(container, 'g', [1], className).node();\n\nexport const createRenderPromise = (unit) => {\n const renderedPromise = unit._renderedPromise;\n renderedPromise.then(() => {\n unit._renderedPromise = new Promise((resolve) => {\n unit._renderedResolve = resolve;\n });\n createRenderPromise(unit);\n });\n};\n","export const CLASSPREFIX = 'muze';\nexport const IDFIELD = '__id__';\nexport const GRID_LINE_PARENT_GROUP_CLASS = 'grid-lines';\nexport const GRID_BAND_PARENT_GROUP_CLASS = 'grid-bands';\nexport const GRID_PARENT_GROUP = 'grid-parent-group';\nexport const BAND = 'band';\nexport const TICK = 'tick';\nexport const GRID_BAND = 'gridBands';\nexport const GRID_LINE = 'gridLines';\nexport const CONSOLIDATED = 'consolidated';\nexport const FRAGMENTED = 'fragmented';\nexport const FACET_BY_FIELDS = 'facetByFields';\nexport const RETINAL_FIELDS = 'retinalFields';\nexport const PARENT_ALIAS = 'parentAlias';\nexport const LAYERS = 'layers';\nexport const CACHED_DATA = 'cachedData';\nexport const STORE = 'store';\n","import { getObjProp, defaultValue, makeElement, DimensionSubtype, DataModel } from 'muze-utils';\nimport { ScaleType } from '@chartshq/muze-axis';\nimport { layerFactory, LAYER_TYPES } from '@chartshq/visual-layer';\nimport {\n GRID_BAND,\n GRID_LINE,\n GRID_BAND_PARENT_GROUP_CLASS,\n GRID_LINE_PARENT_GROUP_CLASS,\n GRID_PARENT_GROUP\n} from '../enums/constants';\n\nconst { BAR_LAYER, TICK_LAYER } = LAYER_TYPES;\n\nconst LINEAR = ScaleType.LINEAR;\n\nconst getLayerDefinition = (context, axes, type, orientation) => {\n let encoding;\n const config = context.config();\n const { classPrefix, gridLines, gridBands } = config;\n const gridLineColor = gridLines.color;\n const zeroLineColor = gridLines.zeroLineColor;\n const defClassName = type === GRID_BAND ? gridBands.defClassName : gridLines.defClassName;\n const gridBandColor = gridBands[orientation].color;\n const axis = axes[orientation][0];\n const isLinearScale = axis.constructor.type() === LINEAR;\n\n if (type === GRID_BAND && isLinearScale) {\n encoding = {\n [orientation]: `${orientation}value`,\n [`${orientation}0`]: `${orientation}value0`\n };\n } else {\n encoding = {\n [orientation]: isLinearScale ? `${orientation}value` : `${orientation}dim`\n };\n }\n encoding.color = {\n value: (data, i) => {\n const isNegativeDomain = isLinearScale && axis.domain()[0] < 0;\n if (type === GRID_BAND) {\n return gridBandColor[i % 2];\n }\n return isNegativeDomain && data[orientation] === 0 ? zeroLineColor : gridLineColor;\n }\n };\n\n return {\n definition: {\n defClassName: `${defClassName}-${orientation}`,\n className: config.className,\n name: orientation,\n individualClassName: (data, i) => {\n let className;\n const isNegativeDomain = isLinearScale && axis.domain()[0] < 0;\n if (isNegativeDomain && data.y === 0 && type !== GRID_BAND) {\n className = `${classPrefix}-axis-zero-line`;\n } else {\n className = `${classPrefix}-grid-${type}-${orientation}-${i % 2}`;\n }\n return className;\n },\n [`pad${orientation.toUpperCase()}`]: type === GRID_BAND ? 0 : undefined,\n encoding\n },\n axes: {\n [orientation]: axis\n },\n interactive: false\n };\n};\n\nconst getDefaultVisibilty = (show, axis) => {\n if (axis.constructor.type() === LINEAR) {\n return show;\n }\n return false;\n};\n\nexport const getGridLayerDefinitions = (context, config, type) => ['x', 'y'].map((axisType) => {\n const axes = context.axes();\n if (!axes[axisType]) {\n return null;\n }\n const show = defaultValue(config[axisType] && config[axisType].show,\n getDefaultVisibilty(config.show, axes[axisType][0]));\n\n return show ? getLayerDefinition(context, axes, type, axisType) : null;\n}).filter(d => d !== null);\n\nexport const getGridLayerData = (axes, fields, fieldsConfig) => {\n const gridData = {};\n ['x', 'y'].forEach((type) => {\n let ticks = axes[type][0].getTickValues();\n const subtype = getObjProp(fieldsConfig, getObjProp(fields, type, 0).getMembers()[0], 'def', 'subtype');\n const jsonData = [];\n const schema = [\n {\n name: 'yvalue',\n type: 'measure'\n }, {\n name: 'xvalue',\n type: 'measure'\n },\n {\n name: 'yvalue0',\n type: 'measure'\n }, {\n name: 'xvalue0',\n type: 'measure'\n }, {\n name: 'xdim',\n type: 'dimension',\n subtype\n }, {\n name: 'ydim',\n type: 'dimension',\n subtype\n }\n ];\n const len = Math.max(ticks.length);\n ticks = subtype === DimensionSubtype.TEMPORAL ? ticks.map(d => d.getTime()) : ticks;\n for (let i = 0; i < len; i += 1) {\n jsonData.push({\n [`${type}value`]: ticks[i],\n [`${type}value0`]: ticks[i + 1],\n [`${type}dim`]: ticks[i],\n [`${type}dim`]: ticks[i]\n });\n }\n gridData[type] = new DataModel(jsonData, schema);\n });\n return gridData;\n};\n\n// @todo Use dataSelect method to reuse instances when the method is fixed. #110\nexport const createGridLines = (instances = {}, createFn, definitions, iteratorFn) => {\n const map = {};\n definitions.forEach((def) => {\n const name = def.definition.name;\n let instance = instances[name];\n if (!instance) {\n instances[name] = instance = createFn(def);\n }\n iteratorFn(instance, def, name);\n map[name] = 1;\n });\n for (const key in instances) {\n if (!(key in map)) {\n instances[key].remove();\n delete instances[key];\n }\n }\n return instances;\n};\n\nexport const createGridLineLayer = (context) => {\n const vuConf = context.config();\n const metaInf = context.metaInf();\n const store = context.store();\n const timeDiffs = context._timeDiffs;\n [GRID_BAND, GRID_LINE].forEach((type) => {\n let mark;\n let config;\n if (type === GRID_BAND) {\n mark = BAR_LAYER;\n config = vuConf.gridBands;\n } else {\n mark = TICK_LAYER;\n config = vuConf.gridLines;\n }\n const definitions = getGridLayerDefinitions(context, config, type);\n\n const sel = `_${type}Selection`;\n context[sel] = createGridLines(context[sel], () => {\n const inst = layerFactory.getLayerInstance({ mark });\n inst.dependencies(context._layerDeps);\n return inst;\n }, definitions, (layer, atomicDef, key) => {\n const definition = atomicDef.definition;\n const sConf = layerFactory.getSerializedConf(mark, definition);\n const axesObj = atomicDef.axes;\n layer.metaInf({\n unitRowIndex: metaInf.rowIndex,\n unitColIndex: metaInf.colIndex,\n namespace: `${metaInf.namespace}${type}${key}`\n })\n .store(store)\n .config(sConf)\n .dataProps({\n timeDiffs\n })\n .axes(axesObj);\n });\n context[`_${type}`] = Object.values(context[sel]);\n });\n};\n\nexport const attachDataToGridLineLayers = (context) => {\n const axes = context.axes();\n const measurement = {\n width: context.width(),\n height: context.height()\n };\n const gridLines = context._gridLines;\n const gridBands = context._gridBands;\n const gridLayerData = getGridLayerData(axes, context.fields(), context.data().getFieldsConfig());\n [].concat(...gridBands, ...gridLines).forEach((inst) => {\n inst.data(inst.axes().x ? gridLayerData.x : gridLayerData.y).measurement(measurement);\n });\n};\n\nexport const renderGridLineLayers = (context, container) => {\n const config = context.config();\n const classPrefix = config.classPrefix;\n const gridLines = context._gridLines;\n const gridBands = context._gridBands;\n\n const gridLineParentGroup = makeElement(container, 'g', [1], `${classPrefix}-${GRID_PARENT_GROUP}`);\n [[gridLines, `${classPrefix}-${GRID_LINE_PARENT_GROUP_CLASS}`],\n [gridBands, `${classPrefix}-${GRID_BAND_PARENT_GROUP_CLASS}`]].forEach((entry) => {\n const [instances, parentGroupClass] = entry;\n const mountPoint = makeElement(gridLineParentGroup, 'g', [1], `.${parentGroupClass}`);\n const className = `${parentGroupClass}-group`;\n makeElement(mountPoint, 'g', instances, `.${className}`, {\n update: (group, instance) => {\n instance.dataProps({ timeDiffs: context._timeDiffs }).mount(group.node());\n }\n });\n });\n};\n","import { CLASSPREFIX, CONSOLIDATED } from './enums/constants';\n\n/**\n * Returns the default configuration of the visual unit\n * @return {Object} Default configuration of visual unit\n */\nexport const defaultConfig = {\n classPrefix: CLASSPREFIX,\n defClassName: 'visual-unit',\n className: '',\n trackerClassName: 'visual-unit-tracker',\n gridLines: {\n defClassName: 'axis-grid-lines',\n className: '',\n show: true,\n color: '#efefef',\n zeroLineColor: '#b6b6b6'\n },\n gridBands: {\n defClassName: 'axis-grid-bands',\n className: '',\n show: false,\n y: {\n color: ['#fff', '#fbfbfb']\n },\n x: {\n color: ['#fff', '#f9f9f9']\n }\n },\n arcLayerClassName: 'layer-arc',\n interaction: {\n tooltip: {\n mode: CONSOLIDATED\n }\n },\n sideEffectClassName: 'side-effect-container'\n};\n","import { mergeRecursive, DataModel } from 'muze-utils';\nimport { defaultConfig } from './default-config';\nimport { CONFIG, LAYERDEFS, TRANSFORM, DATA, LAYERS, TRANSFORMEDDATA } from './enums/reactive-props';\nimport { sanitizeLayerDef } from './helper';\n\nexport default {\n [CONFIG]: {\n value: null,\n meta: {\n sanitization: (config, oldConfig) => (\n mergeRecursive(oldConfig || mergeRecursive({}, defaultConfig), config)\n )\n }\n },\n [LAYERDEFS]: {\n value: null,\n meta: {\n preset: layerDef => sanitizeLayerDef(layerDef)\n }\n },\n [TRANSFORM]: {\n value: null\n },\n [LAYERS]: {\n value: null\n },\n [DATA]: {\n value: null,\n meta: {\n typeCheck: d => d instanceof DataModel,\n preset: (data, context) => {\n if (context._cache) {\n const cachedData = context.cachedData();\n context.cachedData([...cachedData, data]);\n } else {\n const oldData = context.data();\n oldData && oldData.unsubscribe('propagation');\n context.cachedData([data]);\n }\n }\n }\n },\n [TRANSFORMEDDATA]: {\n value: null,\n meta: {\n addAsMethod: false\n }\n }\n};\n","export const CONFIG = 'config';\nexport const DATA = 'data';\nexport const AXES = 'axes';\nexport const LAYERDEFS = 'layerDef';\nexport const WIDTH = 'width';\nexport const HEIGHT = 'height';\nexport const MOUNT = 'mount';\nexport const TRANSFORM = 'transform';\nexport const TRANSFORMEDDATA = 'transformedData';\nexport const DATADOMAIN = 'dataDomain';\nexport const FIELDS = 'fields';\nexport const LAYERAXISINDEX = 'layerAxisIndex';\nexport const LAYERS = 'layers';\nexport const DOMAIN = 'domain';\n\n","import { STATE_NAMESPACES, temporalFields } from 'muze-utils';\nimport * as PROPS from './enums/reactive-props';\nimport {\n transformDataModels,\n getDimensionMeasureMap,\n attachDataToLayers,\n attachAxisToLayers,\n unionDomainFromLayers\n} from './helper';\n\nimport { createGridLineLayer, attachDataToGridLineLayers } from './helper/grid-lines';\n\nconst removeExitLayers = (layerDefs, context) => {\n const layersMap = context._layersMap;\n const markSet = {};\n layerDefs.forEach((layerDef, i) => {\n const id = `${layerDef.mark}-${i}`;\n markSet[id] = true;\n });\n\n for (const key in layersMap) {\n if (!(key in markSet)) {\n layersMap[key].forEach(layer => layer.remove());\n delete layersMap[key];\n }\n }\n};\n\nexport const calculateDomainListener = (context, namespace) => () => {\n const domain = unionDomainFromLayers(context.layers(), context.fields(), context._layerAxisIndex,\n context.data().getFieldsConfig());\n context.store().commit(`${STATE_NAMESPACES.UNIT_GLOBAL_NAMESPACE}.${PROPS.DOMAIN}.${namespace}`, domain);\n};\n\nexport const listenerMap = (context, namespace, metaInf) => ([\n {\n type: 'registerImmediateListener',\n props: [`${namespace.local}.${PROPS.CONFIG}`],\n listener: ([, config]) => {\n config && context.firebolt().config(config.interaction);\n }\n },\n {\n type: 'registerImmediateListener',\n props: [`${namespace.local}.${PROPS.LAYERDEFS}`],\n listener: ([, layerDefs]) => {\n const fieldsVal = context.fields();\n if (layerDefs && fieldsVal) {\n removeExitLayers(layerDefs, context);\n const axes = context.axes();\n if (axes.x || axes.y) {\n const props = [`${STATE_NAMESPACES.GROUP_GLOBAL_NAMESPACE}.domain.y.${metaInf.rowIndex}0`,\n `${STATE_NAMESPACES.GROUP_GLOBAL_NAMESPACE}.domain.x.${metaInf.colIndex}0`];\n const store = context.store();\n const listenerInf = {\n namespace: namespace.local,\n key: 'gridLineListener'\n };\n store.unsubscribe(listenerInf);\n store.registerChangeListener(props, () => {\n attachDataToGridLineLayers(context);\n }, false, listenerInf);\n }\n\n context.addLayer(layerDefs);\n context._lifeCycleManager.notify({\n client: context.layers(),\n action: 'initialized',\n formalName: 'layer'\n });\n }\n }\n },\n {\n type: 'registerImmediateListener',\n props: [`${namespace.local}.${PROPS.DATA}`],\n listener: ([, dataModel]) => {\n const axesObj = context.axes();\n const timeDiffs = {};\n const timeDiffsByField = {};\n\n Object.entries(temporalFields(dataModel)).forEach(([fieldName, fieldObj]) => {\n timeDiffsByField[fieldName] = fieldObj.minimumConsecutiveDifference();\n });\n\n Object.entries(context.fields()).forEach(([type, [field]]) => {\n if (field) {\n const timeDiff = timeDiffsByField[`${field}`];\n if (timeDiff) {\n timeDiffs[type] = timeDiff;\n axesObj[type].forEach(axis => axis.minDiff(timeDiff));\n }\n }\n });\n\n context._timeDiffsByField = timeDiffsByField;\n context._timeDiffs = timeDiffs;\n }\n },\n {\n type: 'registerImmediateListener',\n props: [`${namespace.local}.${PROPS.CONFIG}`],\n listener: () => {\n createGridLineLayer(context);\n }\n },\n {\n type: 'registerImmediateListener',\n props: [`${namespace.local}.${PROPS.DATA}`,\n `${namespace.local}.${PROPS.TRANSFORM}`],\n listener: ([, dataModel], [, transform]) => {\n if (dataModel) {\n const dataModels = transformDataModels(transform, dataModel);\n context.store().commit(`${namespace.local}.${PROPS.TRANSFORMEDDATA}`, dataModels);\n }\n }\n },\n {\n type: 'registerImmediateListener',\n props: [`${namespace.local}.${PROPS.TRANSFORMEDDATA}`,\n `${namespace.local}.${PROPS.LAYERS}`],\n listener: ([, transformedData], [, layers]) => {\n const layerAxisIndexVal = context._layerAxisIndex;\n const axesVal = context.axes();\n const dataModel = context.data();\n if (transformedData && layers && axesVal && layerAxisIndexVal) {\n context._lifeCycleManager.notify({ client: layers, action: 'beforeupdate', formalName: 'layer' });\n const model = context.store().model;\n layers.forEach(lyr => lyr.disableUpdate());\n attachDataToLayers(layers, dataModel, transformedData);\n model.lock();\n layers.forEach((lyr) => {\n lyr.enableUpdate().domain(lyr._domain);\n });\n model.unlock();\n context._dimensionMeasureMap = getDimensionMeasureMap(layers,\n dataModel.getFieldsConfig(), context.retinalFields());\n attachAxisToLayers(axesVal, layers, layerAxisIndexVal);\n context._lifeCycleManager.notify({ client: layers, action: 'updated', formalName: 'layer' });\n }\n }\n }\n]);\n","import { FACET_BY_FIELDS, RETINAL_FIELDS, PARENT_ALIAS, LAYERS, CACHED_DATA } from './enums/constants';\n\nexport const PROPS = {\n [FACET_BY_FIELDS]: {},\n [RETINAL_FIELDS]: {},\n [PARENT_ALIAS]: {},\n [LAYERS]: {},\n [CACHED_DATA]: {},\n detailFields: {},\n axes: {\n defaultValue: {\n x: [],\n y: []\n }\n },\n fields: {},\n metaInf: {},\n registry: {},\n width: {},\n height: {},\n parentContainerInf: {},\n valueParser: {\n defaultValue: val => val\n }\n};\n","import { CommonProps } from 'muze-utils';\nimport { SpawnableSideEffect } from '@chartshq/muze-firebolt';\nimport { DATA } from '../enums/reactive-props';\n\nexport const initSideEffects = (sideEffects, firebolt) => {\n for (const key in sideEffects) {\n if ({}.hasOwnProperty.call(sideEffects, key)) {\n sideEffects[key] instanceof SpawnableSideEffect && sideEffects[key].drawingContext(() => {\n const context = firebolt.context;\n return context.getDrawingContext();\n });\n sideEffects[key].valueParser(firebolt.context.valueParser());\n }\n }\n};\n\nexport const clearActionHistory = (context) => {\n const actionHistory = context._actionHistory;\n for (const key in actionHistory) {\n if (actionHistory[key].isMutableAction) {\n delete context._actionHistory[key];\n }\n }\n};\n\nexport const dispatchQueuedSideEffects = (context) => {\n const queuedSideEffects = context._queuedSideEffects;\n Object.entries(queuedSideEffects).forEach((entry) => {\n const sideEffect = entry[1];\n context.dispatchSideEffect(sideEffect.name, ...sideEffect.params);\n });\n context._queuedSideEffects = {};\n};\n\nexport const registerListeners = (firebolt) => {\n const context = firebolt.context;\n const store = context.store();\n\n store.registerImmediateListener([`local.units.${context.metaInf().namespace}.${DATA}`], (dataModel) => {\n const dm = dataModel[1];\n\n if (dm) {\n firebolt.createSelectionSet(firebolt.context.data().getData().uids);\n firebolt.initializeSideEffects();\n const originalData = firebolt.context.cachedData()[0];\n firebolt.attachPropagationListener(originalData);\n }\n });\n\n store.registerChangeListener([`local.units.${context.metaInf().namespace}.${DATA}`], () => {\n if (!firebolt.context.mount()) {\n const originalData = firebolt.context.cachedData()[0];\n originalData.unsubscribe('propagation');\n }\n });\n\n context._layerDeps.throwback.registerChangeListener([CommonProps.ON_LAYER_DRAW],\n ([, onlayerdraw]) => {\n if (onlayerdraw) {\n dispatchQueuedSideEffects(firebolt);\n clearActionHistory(firebolt);\n }\n });\n};\n","import { DimensionSubtype } from 'muze-utils';\n\nconst getRangeFromData = (instance, selectionDataModel, propConfig) => {\n let criteria;\n const dataObj = selectionDataModel[0].getData();\n const propCriteria = propConfig.payload.criteria;\n const sourceIdentifiers = propConfig.sourceIdentifiers;\n const schema = dataObj.schema;\n const fieldMap = instance.data().getFieldsConfig();\n const data = dataObj.data;\n const isActionSourceSame = instance.id() === propConfig.sourceId;\n\n if (isActionSourceSame) {\n criteria = propCriteria;\n } else {\n criteria = (sourceIdentifiers !== null) ? schema.reduce((acc, obj, index) => {\n let range;\n const field = obj.name;\n const fieldObj = fieldMap[field];\n const type = fieldObj && (fieldObj.def.subtype ? fieldObj.def.subtype : fieldObj.def.type);\n const isDimension = type === DimensionSubtype.CATEGORICAL;\n\n if (!fieldObj) {\n return acc;\n }\n\n if (!isDimension) {\n range = [Math.min(...data.map(d => d[index])), Math.max(...data.map(d => d[index]))];\n } else {\n range = data.map(d => d[index]);\n }\n acc[field] = range;\n return acc;\n }, {}) : null;\n }\n return criteria;\n};\n\nexport const payloadGenerator = {\n brush: (instance, selectionDataModel, propConfig) => {\n const propPayload = propConfig.payload;\n const criteria = getRangeFromData(instance, selectionDataModel, propConfig);\n const payload = Object.assign({}, propPayload);\n payload.criteria = criteria;\n return payload;\n },\n\n __default: (instance, selectionDataModel, propConfig) => {\n const propPayload = propConfig.payload;\n const sourceIdentifiers = propConfig.sourceIdentifiers;\n const dataObj = selectionDataModel[0].getData();\n let schema = dataObj.schema;\n const payload = Object.assign({}, propPayload);\n schema = dataObj.schema;\n const data = dataObj.data;\n const sourceFields = schema.map(d => d.name);\n payload.criteria = !sourceIdentifiers && selectionDataModel[0].isEmpty() ? null :\n [sourceFields, ...data];\n payload.sourceFields = sourceIdentifiers ? sourceIdentifiers.getSchema().map(d => d.name) : [];\n return payload;\n }\n};\n\n","import { isSimpleObject, FieldType, DataModel } from 'muze-utils';\n\nconst getModelWithFacetData = (dm, data) => {\n const dataObj = dm.getData();\n const schema1 = dataObj.schema;\n const data1 = dataObj.data;\n const jsonData = [];\n const schema2 = data[0].map(d => ({\n name: `${d}`,\n type: FieldType.DIMENSION\n }));\n const data2 = data[1];\n\n data1.forEach((d) => {\n const tuple = {};\n schema1.forEach((obj, i) => {\n tuple[obj.name] = d[i];\n });\n schema2.forEach((obj, i) => {\n tuple[obj.name] = data2[i];\n });\n jsonData.push(tuple);\n });\n\n return new DataModel(jsonData, [...schema1, ...schema2]);\n};\n\nexport const propagateValues = (instance, action, config = {}) => {\n let propagationData;\n const payload = config.payload;\n const selectionSet = config.selectionSet;\n const propagationFieldInf = config.propagationFields[action] || {};\n const propagationFields = propagationFieldInf.fields || [];\n const append = propagationFieldInf.append;\n const criteria = payload.criteria;\n const context = instance.context;\n const dataModel = context.cachedData()[0];\n const sourceId = context.id();\n const sideEfffects = instance.sideEffects();\n const behaviourEffectMap = instance._behaviourEffectMap;\n const mergedModel = selectionSet.mergedEnter.model;\n const fieldsConfig = dataModel.getFieldsConfig();\n payload.sourceUnit = sourceId;\n payload.action = action;\n payload.sourceCanvas = context.parentAlias();\n const propagationBehaviourMap = instance._propagationBehaviourMap;\n const propagationBehaviour = propagationBehaviourMap[action] || action;\n\n let propFields = [];\n if (criteria === null) {\n propagationData = null;\n } else if (isSimpleObject(criteria)) {\n propFields = Object.keys(criteria || {});\n propagationData = mergedModel ? mergedModel.project(propFields) : null;\n } else {\n propFields = criteria[0];\n propagationData = mergedModel ? mergedModel.project(propFields) : null;\n }\n\n const facetByFields = context.facetByFields();\n if (propagationData !== null && propagationFields.length) {\n const fields = propagationData.getData().schema.map(d => d.name);\n propagationData = getModelWithFacetData(propagationData, facetByFields);\n propFields = append ? [...fields, ...propagationFields] : propagationFields;\n propagationData = propagationData.project(propFields);\n }\n\n let propagateInterpolatedValues = false;\n if (propFields.length && propFields.every(field => fieldsConfig[field] &&\n fieldsConfig[field].def.type === FieldType.MEASURE)) {\n propagateInterpolatedValues = true;\n }\n\n const groupId = context.parentAlias();\n payload.action = action;\n const behaviourInstance = instance._actions.behavioural[propagationBehaviour];\n const isMutableAction = behaviourInstance ? behaviourInstance.constructor.mutates() : false;\n\n const filterFn = (entry, propagationConf) => {\n const effects = behaviourEffectMap[entry.config.action];\n const mutates = entry.config.groupId ?\n effects.some(d => sideEfffects[d.name || d].constructor.mutates()) : true;\n return entry.config.groupId !== propagationConf.groupId && mutates;\n };\n\n const sourceBehaviour = instance._actions.behavioural[action];\n const mutates = sourceBehaviour ? sourceBehaviour.constructor.mutates() : false;\n let propConfig = {\n payload,\n action,\n criteria: propagationData,\n isMutableAction: mutates,\n propagateInterpolatedValues,\n groupId,\n sourceId: mutates ? groupId : sourceId,\n filterFn,\n enabled: (propConf, firebolt) => (action !== propagationBehaviour ?\n propConf.payload.sourceCanvas === firebolt.context.parentAlias() : true)\n };\n\n dataModel.propagate(propagationData, propConfig, true);\n\n if (action !== propagationBehaviour) {\n propConfig = {\n payload,\n sourceId: isMutableAction ? groupId : sourceId,\n criteria: propagationData,\n isMutableAction,\n propagateInterpolatedValues,\n action: propagationBehaviour,\n groupId,\n applyOnSource: action === propagationBehaviour,\n enabled: (propConf, firebolt) => propConf.payload.sourceCanvas !== firebolt.context.parentAlias(),\n filterFn\n };\n\n dataModel.propagate(propagationData, propConfig, true, {\n filterImmutableAction: (actionInf, propInf) => actionInf.groupId !== propInf.groupId\n });\n }\n};\n","import { FieldType } from 'muze-utils';\nimport { Firebolt } from '@chartshq/muze-firebolt';\nimport { registerListeners } from './helper';\nimport { payloadGenerator } from './payload-generator';\nimport { propagateValues } from './data-propagator';\n\n/**\n * This class manages the interactions of visual unit. It associates physical actions with\n * behavioural actions. It also propagates the behavioural actions to other datamodels.\n */\nexport default class UnitFireBolt extends Firebolt {\n constructor (...params) {\n super(...params);\n registerListeners(this);\n }\n\n propagate (behaviour, payload, selectionSet, sideEffects) {\n propagateValues(this, behaviour, {\n payload,\n selectionSet,\n sideEffects,\n propagationFields: this._propagationFields\n });\n }\n\n getApplicableSideEffects (sideEffects, payload, propagationInf) {\n const context = this.context;\n const unitId = context.id();\n const aliasName = context.parentAlias();\n const propagationSourceCanvas = propagationInf.propPayload && propagationInf.propPayload.sourceCanvas;\n const sourceUnitId = propagationInf.propPayload && propagationInf.propPayload.sourceUnit;\n const sourceSideEffects = this._sourceSideEffects;\n const sideEffectInstances = this.sideEffects();\n const actionOnSource = sourceUnitId ? sourceUnitId === unitId : true;\n\n const applicableSideEffects = payload.sideEffects ? [{\n effects: payload.sideEffects,\n behaviours: [payload.action]\n }] : sideEffects;\n applicableSideEffects.forEach((d) => {\n let mappedEffects = d.effects;\n mappedEffects = mappedEffects.filter((se) => {\n const mutates = sideEffectInstances[se.name || se].constructor.mutates();\n if (mutates && propagationInf.isMutableAction === false) {\n return false;\n }\n if (!actionOnSource && payload.criteria !== null) {\n const sideEffectChecker = sourceSideEffects[se.name || se];\n return sideEffectChecker ? sideEffectChecker(propagationInf.propPayload, context) : true;\n }\n if (propagationSourceCanvas === aliasName || actionOnSource) {\n return se.applyOnSource !== false;\n }\n\n return true;\n });\n d.effects = mappedEffects;\n });\n return applicableSideEffects;\n }\n\n shouldApplySideEffects (propagate) {\n return propagate === false;\n }\n\n onDataModelPropagation () {\n return (data, config) => {\n let isSourceFieldPresent = true;\n let isMutableAction = false;\n const propPayload = config.payload;\n const sourceIdentifiers = config.sourceIdentifiers;\n const enabledFn = config.enabled;\n const action = config.action;\n const payloadFn = payloadGenerator[action] || payloadGenerator.__default;\n\n if (sourceIdentifiers) {\n const fieldsConfig = sourceIdentifiers.getFieldsConfig();\n const sourceIdentifierFields = Object.keys(fieldsConfig);\n const propFields = Object.keys(data[0].getFieldsConfig());\n if (!Object.values(fieldsConfig).some(d => d.def.type === FieldType.MEASURE)) {\n isSourceFieldPresent = sourceIdentifierFields.some(d => propFields.indexOf(d) !== -1);\n }\n }\n\n const payload = payloadFn(this.context, data, config);\n const sourceBehaviours = this._sourceBehaviours;\n const filterFn = sourceBehaviours[action] || sourceBehaviours['*'];\n let enabled = true;\n\n if (filterFn) {\n enabled = filterFn(propPayload || {}, this.context);\n }\n\n if (enabledFn) {\n enabled = enabledFn(config, this) && enabled !== false;\n }\n\n if (enabled) {\n const effects = this._behaviourEffectMap[action];\n const sideEffectInstances = this.sideEffects();\n isMutableAction = config.groupId ?\n effects.some(d => sideEffectInstances[d.name || d].constructor.mutates()) : config.isMutableAction;\n\n const propagationInf = {\n propagate: false,\n data,\n propPayload,\n sourceIdentifiers,\n persistent: false,\n isSourceFieldPresent,\n sourceId: config.propagationSourceId,\n isMutableAction: config.isMutableAction\n };\n\n this._actionHistory[action] = {\n payload,\n propagationInf,\n isMutableAction\n };\n this.dispatchBehaviour(action, payload, propagationInf);\n }\n };\n }\n\n prepareSelectionSets (behaviours) {\n const data = this.context.data();\n if (data) {\n this.createSelectionSet(data.getData().uids, behaviours);\n }\n return this;\n }\n\n initializeSideEffects () {\n if (this.context.data()) {\n super.initializeSideEffects();\n }\n return this;\n }\n\n remove () {\n this.context.cachedData()[0].unsubscribe('propagation');\n return this;\n }\n}\n","import { layerFactory } from '@chartshq/visual-layer';\nimport {\n Store,\n setAttrs,\n getUniqueId,\n getQualifiedClassName,\n selectElement,\n transactor,\n makeElement,\n registerListeners,\n generateGetterSetters,\n getDataModelFromIdentifiers,\n isSimpleObject,\n transposeArray,\n CommonProps,\n toArray,\n STATE_NAMESPACES\n} from 'muze-utils';\nimport { physicalActions, sideEffects, behaviouralActions, behaviourEffectMap } from '@chartshq/muze-firebolt';\nimport { actionBehaviourMap } from './firebolt/action-behaviour-map';\nimport {\n renderLayers,\n getNearestDimensionalValue,\n removeLayersBy,\n getLayersBy,\n getLayerFromDef,\n getLayerAxisIndex,\n sanitizeLayerDef,\n createSideEffectGroup,\n resolveEncodingTransform,\n createRenderPromise\n} from './helper';\nimport { renderGridLineLayers } from './helper/grid-lines';\nimport localOptions from './local-options';\nimport { listenerMap, calculateDomainListener } from './listener-map';\nimport {\n DOMAIN\n} from './enums/reactive-props';\nimport { PROPS } from './props';\nimport UnitFireBolt from './firebolt';\nimport { initSideEffects } from './firebolt/helper';\nimport './styles.scss';\n\nconst FORMAL_NAME = 'unit';\n\n/**\n * Visual Unit is hierarchical component created by {@link VisualGroup}. This component accepts layer definitions\n * and creates concrete layer instances from them, binds data and attaches axis to them. It also retreives the domain\n * from the layers and unions them and sets them on corresponding axis instances. This also creates the parent svg\n * groups for all the layers and delegates the rendering to all the layers.\n *\n * @public\n * @module VisualUnit\n * @class\n */\nexport default class VisualUnit {\n\n /**\n * Creates instance of visualization unit.\n *\n * @param {Object} registry Component registry\n * @param {Object} dependencies Dependencies required by visual unit.\n */\n constructor (registry, dependencies) {\n this._id = getUniqueId();\n this._dependencies = dependencies;\n this._layerDeps = {\n throwback: new Store({\n [CommonProps.ON_LAYER_DRAW]: false\n }),\n smartLabel: dependencies.smartLabel,\n lifeCycleManager: dependencies.lifeCycleManager\n };\n this._renderedResolve = null;\n this._renderedPromise = new Promise((resolve) => {\n this._renderedResolve = resolve;\n });\n createRenderPromise(this);\n this._layerDeps.throwback.registerChangeListener([CommonProps.ON_LAYER_DRAW], () => {\n this._renderedResolve();\n this._lifeCycleManager.notify({ client: this.layers(), action: 'drawn', formalName: 'layer' });\n });\n\n this._lifeCycleManager = dependencies.lifeCycleManager;\n this._layersMap = {};\n this._gridLinesSelection = {};\n this._gridBandsSelection = {};\n this._gridLines = [];\n this._gridBands = [];\n this._layerNamespaces = {};\n this._layerAxisIndex = {};\n this._transformedDataModels = {};\n layerFactory.setLayerRegistry(registry.layerRegistry);\n generateGetterSetters(this, PROPS);\n this.registry(registry);\n this.cachedData([]);\n }\n\n static formalName () {\n return FORMAL_NAME;\n }\n\n static getState () {\n return [\n {\n domain: {}\n },\n localOptions\n ];\n }\n\n store (...params) {\n if (params.length) {\n this._store = params[0];\n const metaInf = this.metaInf();\n this.store().append(`${STATE_NAMESPACES.UNIT_LOCAL_NAMESPACE}`, {\n [`${metaInf.namespace}`]: null\n });\n const localNs = `${STATE_NAMESPACES.UNIT_LOCAL_NAMESPACE}.${metaInf.namespace}`;\n transactor(this, localOptions, this.store().model, {\n namespace: localNs\n });\n registerListeners(this, listenerMap, {\n local: localNs,\n global: STATE_NAMESPACES.UNIT_GLOBAL_NAMESPACE\n }, {\n rowIndex: metaInf.rowIndex,\n colIndex: metaInf.colIndex\n });\n this.firebolt(new UnitFireBolt(this, {\n physical: physicalActions,\n behavioural: behaviouralActions,\n physicalBehaviouralMap: actionBehaviourMap\n }, sideEffects, behaviourEffectMap));\n return this;\n }\n return this._store;\n }\n\n /**\n * Static helper for creates a unit instance\n *\n * @param {Object} [id] optional unique identifier for a unit; , id is calculated internally\n * @param {DataModel} data instance of datamodel\n * @param {Array.} layers layer configuration\n * @param {Object} config configurtion for the visual unit\n * @return {VisualUnit} Instance of a unit\n */\n static create (...params) {\n return new this(...params);\n }\n\n /**\n * Returns the instance of firebolt associated with this visual unit. Firebolt dispatches the behavioural actions\n * when any physical action happens on the elements of visual unit.\n *\n * @public\n *\n * @return {Firebolt} Instance of firebolt.\n */\n firebolt (...firebolt) {\n if (firebolt.length) {\n this._firebolt = firebolt[0];\n return this;\n }\n return this._firebolt;\n }\n\n /**\n * Returns the unique id of this visual unit.\n *\n * @public\n * @return {string} Unique identifier.\n */\n id () {\n return this._id;\n }\n\n lockModel () {\n this._store.model.lock();\n return this;\n }\n\n unlockModel () {\n this._store.model.unlock();\n return this;\n }\n\n timeDiffsByField (...params) {\n if (params.length) {\n return this;\n }\n return this._timeDiffsByField;\n }\n\n /**\n * Renders the visual unit. It creates the layout and renders the axes and layers.\n *\n * @return {VisualUnit} Instance of visual unit.\n */\n render (container) {\n const config = this.config();\n const { className, defClassName, sideEffectClassName, classPrefix } = config;\n const qualifiedClassName = getQualifiedClassName(defClassName, this.id(), config.classPrefix);\n const width = this.width();\n const height = this.height();\n const containerSelection = selectElement(container).style('position', 'relative');\n\n this._rootSvg = makeElement(containerSelection, 'svg', [null], className)\n .style('width', `${width}px`).style('height', `${height}px`);\n\n const node = this._rootSvg.node();\n setAttrs(node, {\n width,\n height,\n class: qualifiedClassName.join(' ')\n });\n renderGridLineLayers(this, node);\n renderLayers(this, node, this.layers(), {\n width,\n height\n });\n this._sideEffectGroup = createSideEffectGroup(node, `${classPrefix}-${sideEffectClassName}`);\n const firebolt = this.firebolt();\n initSideEffects(firebolt.sideEffects(), firebolt);\n return this;\n }\n\n done () {\n return this._renderedPromise;\n }\n\n /**\n * Caches all the datamodels in an array from the next `data()` call on visual unit until `clearCaching()` or\n * `resetData()` is called on it.\n *\n * @public\n * @return {VisualUnit} Instance of visual unit.\n */\n\n enableCaching () {\n this._cache = true;\n return this;\n }\n\n /**\n * Clears all the previous cached data.\n *\n * @public\n * @segment VisualUnit\n * @return {VisualUnit} Instance of visual unit.\n */\n clearCaching () {\n this._cache = false;\n this.cachedData([this.cachedData()[0]]);\n return this;\n }\n\n /**\n * Returns the drawing information from visual unit.Drawing context contains the dimensions of unit and the svg\n * container of the visual unit.\n *\n * @public\n *\n * @return {Object} Drawing information.\n * ```\n * {\n * htmlContainer: // Html container of svg container of the visual unit\n * svgContainer: // Root svg container\n * width: // Width of the visual unit\n * height: // Height of the visual unit\n * sideEffectGroup: // Svg group for drawing side effect elements.\n * parentContainer: // Parent html container of the visual unit.\n * xOffset: // x offset space from the starting x position of the container,\n * yOffset: // y offset space from the starting y position of the container\n * }\n * ```\n */\n getDrawingContext () {\n const rootSvg = this._rootSvg && this._rootSvg.node();\n const width = this.width();\n const height = this.height();\n const { el, dimensions } = this.parentContainerInf();\n return {\n htmlContainer: this.mount(),\n svgContainer: rootSvg,\n width,\n height,\n sideEffectGroup: this._sideEffectGroup,\n parentContainer: el,\n parentContainerDimensions: dimensions,\n xOffset: 0,\n yOffset: 0\n };\n }\n\n /**\n * Returns the serialized configuration of visual unit.\n *\n * @return {Object} serialized configuration\n */\n serialize () {\n return {\n layers: this.layers().map(layer => layer.serialize()),\n config: this.config(),\n axes: this.axes().map(axis => axis.serialize())\n };\n }\n\n mount (...mount) {\n if (mount.length) {\n this._mount = mount[0];\n this.render(mount[0]);\n this.firebolt().mapActionsAndBehaviour();\n return this;\n }\n return this._mount;\n }\n\n /**\n * Adds a new layer to the visual unit. It takes a layer definition and creates layer instances from them. It does\n * not render the layers. It returns the layer instances in an array. If the layer definition is a composite layer,\n * then multiple layer instances will be returned in the array.\n *\n * To add a layer in the unit,\n * ```\n * unit.addLayer({\n * name: 'bullet',\n * mark: 'bar',\n * encoding: {\n * x: 'Year',\n * y: 'Acceleration',\n * color: 'Origin'\n * }\n * });\n * ```\n * @public\n * @param {Object} layerDef Definition of new layer.\n *\n * @return {Array} Array of layer instances.\n */\n addLayer (layerDefinition) {\n const layerDefinitions = sanitizeLayerDef(toArray(layerDefinition));\n\n const layersMap = this._layersMap;\n const markSet = {};\n const store = {\n layers: {},\n components: {\n unit: this\n }\n };\n let layerIndex = 0;\n let startIndex = [].concat(...Object.values(this._layersMap)).length;\n const metaInf = this.metaInf();\n const props = this._layerNamespaces;\n const layers = layerDefinitions.sort((a, b) => a.order - b.order).reduce((layersArr, layerDef) => {\n const definition = layerDef.def;\n const markId = definition.name;\n const defArr = toArray(definition);\n const namespaces = [];\n defArr.forEach((def) => {\n def.order = layerDef.order + layerIndex;\n const namespace = `${metaInf.namespace}${startIndex}`;\n if (!layersMap[markId]) {\n startIndex++;\n if (definition.calculateDomain !== false) {\n props[`${STATE_NAMESPACES.LAYER_GLOBAL_NAMESPACE}.${DOMAIN}.${namespace}`] = true;\n }\n }\n namespaces.push(namespace);\n });\n layerIndex += defArr.length;\n const instances = getLayerFromDef(this, definition, layersMap[markId], namespaces);\n store.layers = Object.assign(store.layers, instances);\n const instanceValues = Object.values(instances);\n layersArr = layersArr.concat(...instanceValues);\n layersMap[markId] = instanceValues;\n markSet[markId] = markId;\n return layersArr;\n }, []);\n\n store.unit = this;\n const layerdeps = {};\n const layersArr = [].concat(...Object.values(this._layersMap));\n\n layersArr.forEach((layer) => {\n const alias = layer.alias();\n store.layers[alias] = layer;\n layerdeps[alias] = [];\n });\n layers.forEach((layer) => {\n const depArr = resolveEncodingTransform(layer, store);\n layerdeps[layer.alias()] = depArr;\n });\n\n this._layerDepOrder = layerdeps;\n this._layerAxisIndex = Object.assign(this._layerAxisIndex, getLayerAxisIndex(layers, this.fields()));\n const stateStore = this.store();\n\n stateStore.unsubscribe({\n key: 'calculateDomainListener',\n namespace: `${STATE_NAMESPACES.UNIT_LOCAL_NAMESPACE}.${metaInf.namespace}`\n });\n stateStore.registerImmediateListener(Object.keys(props), calculateDomainListener(this, metaInf.namespace),\n false, {\n key: 'calculateDomainListener',\n namespace: `${STATE_NAMESPACES.UNIT_LOCAL_NAMESPACE}.${metaInf.namespace}`\n });\n this.layers(layersArr);\n return layers;\n }\n\n /**\n *\n *\n *\n * @memberof VisualUnit\n */\n remove () {\n const lifeCycleManager = this._dependencies.lifeCycleManager;\n lifeCycleManager.notify({ client: this, action: 'beforeremove', formalName: 'unit' });\n this.store().unsubscribe({\n namespace: `${STATE_NAMESPACES.UNIT_LOCAL_NAMESPACE}.${this.metaInf().namespace}`\n });\n selectElement(this.mount()).remove();\n this.firebolt().remove();\n // Remove layers\n lifeCycleManager.notify({ client: this.layers(), action: 'beforeremove', formalName: 'layer' });\n this.layers().forEach(layer => layer.remove());\n lifeCycleManager.notify({ client: this.layers(), action: 'removed', formalName: 'layer' });\n lifeCycleManager.notify({ client: this, action: 'removed', formalName: 'unit' });\n return this;\n }\n\n /**\n *\n *\n * @param {*} identifiers\n *\n * @memberof VisualUnit\n */\n getDataModelFromIdentifiers (identifiers, mode, parentModel) {\n if (identifiers === null) {\n return null;\n }\n const dataModel = parentModel || this.data();\n return getDataModelFromIdentifiers(dataModel, identifiers, mode);\n }\n\n /**\n * Resets the data of visual unit to original data model. It also clears the cached data.\n *\n * @public\n * @segment VisualUnit\n * @return {VisualUnit} Instance of visual unit.\n */\n resetData () {\n this.data(this.cachedData()[0]);\n return this;\n }\n\n /**\n *\n *\n *\n * @memberof VisualUnit\n */\n getSourceInfo () {\n return {\n dimensionMeasureMap: this._dimensionMeasureMap,\n fields: this.fields(),\n data: this.data(),\n axes: this.axes()\n };\n }\n\n /**\n *\n *\n *\n * @memberof VisualUnit\n */\n getDefaultTargetContainer () {\n const { classPrefix, defClassName } = this.config();\n return [`.${classPrefix}-${defClassName}`];\n }\n\n /**\n * Returns an array of layer instances which matches the supplied mark type.\n *\n * @public\n *\n * @param {string} type Mark type of layer.\n *\n * @return {Array} Array of layer instances.\n */\n getLayersByType (type) {\n const layers = getLayersBy(this.layers(), 'type', type);\n return layers;\n }\n\n /**\n * Returns the layer instance which matches the supplied layer name. If no layer is found, then it returns\n * undefined.\n *\n * @public\n * @param {string} name Name of layer.\n *\n * @return {VisualUnit} Layer instance.\n */\n getLayerByName (name) {\n const layers = getLayersBy(this.layers(), 'name', name);\n return layers[0];\n }\n\n /**\n * Returns the point located nearest to the supplied x and y position. It returns the unique identifiers of the\n * point. This function also accepts an additional configuration `getAllPoints` inside `config` object in the third\n * argument which if set to true, then it returns the identifiers of all the points which falls on the nearest\n * x value or y value if any one of the field is a dimension. Additionally, a target property is also returned\n * which contains the identifier of the nearest point. If no nearest point is found, then it returns identifier\n * as null.\n *\n * @public\n *\n * @param {number} x X Position of the point from where nearest point is to be found.\n * @param {number} y Y Position of the point from where nearest point is to be found.\n * @param {Object} config Additional configuration options.\n * @param {boolean} config.getAllPoints If true, then returns all the points nearest to the x value or y value if\n * it is dimension.\n * @param {Object} config.data Data associated with the nearest point.\n * @return {Object} Nearest point information\n * ```\n * {\n * id: [['Origin'], ['USA'], ['Japan']], // Identifiers of all the points closest to the x value.\n * target: [['Origin'], ['Japan']] // Identifier of the nearest point.\n * }\n * ```\n */\n getNearestPoint (x, y, config) {\n let pointObj = {\n id: null\n };\n const dimValue = getNearestDimensionalValue(this, {\n x,\n y\n });\n\n if (dimValue !== null && config.getAllPoints) {\n pointObj.id = dimValue;\n const pointInf = this.getMarkInfFromLayers(x, y, config);\n pointObj.target = pointInf && pointInf.id ? pointInf.id : pointObj.id;\n return pointObj;\n }\n\n const markInf = this.getMarkInfFromLayers(x, y, config) || { id: null };\n pointObj = Object.assign({}, markInf);\n\n pointObj.target = markInf.id;\n return pointObj;\n }\n\n getMarkInfFromLayers (x, y, args) {\n const layers = this.layers();\n const len = layers.length;\n let point = null;\n // Iterate through the layers array and fetch the nearest point from each layer. If a valid\n // nearest point is found from any layer, then return that point.\n for (let i = 0; i < len; i++) {\n const layer = layers[i];\n const config = layer.config();\n if (config.interactive !== false) {\n point = layer.getNearestPoint(x, y, args);\n }\n if (point) {\n return point;\n }\n }\n return point;\n }\n\n /**\n * Get the information of all the marks such as x, y position and size from supplied identifiers. It\n * returns an array of points whose data matches the given identifiers.\n *\n * @public\n *\n * @param {Array|Object} identifiers Field names and their corresponding values.\n * ```\n * identifiers can be given in an array of array,\n * ['Origin', 'Name'], // Names of the fields supplied in first array\n * ['USA', 'ford'], // Data values of each field supplied in rest of the arrays.\n * ['Japan', 'ford']\n * or in an object,\n * {\n * Origin: ['USA']\n * }\n * ```\n * @param {Object} config Optional configurations which decides which information of the mark will\n * be retrieved.\n * @param {boolean} [config.getAllAttrs = false] If true, then returns all the information of each mark.\n * @param {boolean} [config.getBBox = false] If true, then returns the bounding box of each mark.\n *\n * @return {Array} Array of objects containing the information of each point.\n * ```\n * By default, the method returns the array of points in this structure,\n * [\n * {\n * x: 20,\n * y: 100,\n * width: 200,\n * height: 100\n * }\n * ]\n * If 'config.getAllAttrs' is true, then it returns all the information of each mark,\n * [\n * // Positions of mark on initial state of transition.\n * enter: {\n * x: 0,\n * y: 0\n * },\n * // Final positions of the mark\n * update: {\n * x: 20,\n * y: 10\n * },\n * style: // css styles of each mark\n * source: [200, 'USA'] // Row information of each mark\n * id: 20 // Row id of each mark\n * ]\n * ```\n */\n getPlotPointsFromIdentifiers (identifiers, config = {}) {\n let points = [];\n let parsedIdentifiers = identifiers;\n if (identifiers === null) {\n return [];\n }\n const layers = this.layers();\n const len = layers.length;\n if (isSimpleObject(identifiers)) {\n parsedIdentifiers = [Object.keys(identifiers)];\n parsedIdentifiers = [...parsedIdentifiers, ...transposeArray(Object.values(identifiers))];\n }\n for (let i = 0; i < len; i++) {\n const layer = layers[i];\n if (layer.config().interactive !== false) {\n points = [...points, ...layer.getPointsFromIdentifiers(parsedIdentifiers, config)];\n }\n }\n return points;\n }\n\n /**\n * Removes the layer instance which matches the supplied layer name.\n *\n * @public\n * @param {string} name Name of layer\n *\n * @return {VisualUnit} Instance of visual unit.\n */\n removeLayerByName (name) {\n removeLayersBy('name', name);\n return this;\n }\n\n /**\n * Removes all the layer instances which matches the supplied mark type.\n *\n * @public\n * @param {string} type Mark type of layer.\n *\n * @return {VisualUnit} Instance of visual unit.\n */\n removeLayersByType (type) {\n removeLayersBy('type', type);\n return this;\n }\n}\n","import { DataModel } from 'muze-utils';\n\nimport { retriveDomainFromData } from './group-utils';\n\n/**\n * Gets name of fields form the variables\n *\n * @param {*} fields1\n * @param {*} [fields2=[]]\n *\n */\nconst getFieldNames = (fields1, fields2 = []) => [fields1, fields2].map(fields => fields.reduce((acc, d) => {\n acc = [...acc, ...d.getMembers()];\n return acc;\n}, []));\n\n/**\n * Creates a selected datamodel from a parent datamodel and a set of field names\n *\n * @param {Object} datamodel provided as input\n * @param {Array} fieldNames schema names\n * @param {Array} fieldValues values of those schema names to be selected\n * @return {Object} creates a new selected datamodel\n */\nconst createSelectedDataModel = (datamodel, fieldNames, fieldValues) =>\n datamodel.select(fields => fieldNames.every((field, k) => fields[field].value === fieldValues[k]));\n\n/**\n *\n *\n * @param {*} facets\n * @param {*} keyArray\n *\n */\nconst uniqueKeyGenerator = (keyArray, context, depth = 0, val = []) => {\n const {\n facets,\n dataModel,\n uniqueValues\n } = context;\n\n // Get unique keys for the next depth recursively if required\n if (facets[depth + 1]) {\n const field = facets[depth];\n uniqueValues.forEach((value) => {\n const newDm = dataModel.select(fields => fields[field].value === value);\n const nextDepthUniqueValues = retriveDomainFromData(newDm, facets[depth + 1]);\n const newContext = {\n facets,\n dataModel: newDm,\n uniqueValues: nextDepthUniqueValues\n };\n\n uniqueKeyGenerator(keyArray, newContext, depth + 1, [...val, value]);\n });\n } else {\n uniqueValues.forEach((value) => {\n keyArray.push([...val, value]);\n });\n }\n};\n\n/**\n * projects row model based on the set of row and/or column and other projection fields\n *\n * @param {Object} datamodel provided as input\n * @return {Object} Projected datamodel\n */\nconst projectRows = (datamodel, projections) => {\n const {\n allColumnProjections,\n rowProjections,\n optionalProjections\n } = projections;\n\n if (rowProjections.length > 0) {\n return rowProjections.map((projectFields) => {\n const [projFieldNames, colProjFieldNames] = getFieldNames(projectFields, allColumnProjections);\n return datamodel.project([...projFieldNames, ...colProjFieldNames, ...optionalProjections]);\n });\n }\n return [datamodel];\n};\n\n/**\n * Adds the datamodels to current row index based on column fields\n *\n * @param {Array} context current context\n * @param {Array} valueCellCreator List of facets applied to the current datamodel\n */\nconst pushToMatrix = (context, valueCellCreator) => {\n let cells = [];\n const {\n matrix,\n datamodel,\n facetInfo,\n fieldInfo\n } = context;\n // Get projected fields for current row\n const {\n rowProjections,\n colProjections,\n optionalProjections\n } = fieldInfo;\n const {\n rowIndex,\n columnIndex\n } = facetInfo;\n const rowProj = rowProjections[(rowIndex) % rowProjections.length] || [];\n\n // Get the cells for the matrix from the return function of the callback on the datamodel.\n // callback function -> (datamodel, {projections, indices}, facets)\n if (colProjections.length > 0) {\n cells = colProjections.map((projectFields, projIdx) => {\n const [colProjFieldNames, rowProjFieldNames] = getFieldNames(projectFields, rowProj);\n const projectedDm = datamodel.project([...colProjFieldNames, ...rowProjFieldNames, ...optionalProjections]);\n const projections = { rowFields: rowProj, columnFields: projectFields };\n const indices = { rowIndex, columnIndex: columnIndex * colProjections.length + projIdx };\n\n return valueCellCreator(projectedDm, { projections, indices }, facetInfo);\n });\n } else {\n const projections = { rowFields: rowProj, columnFields: [] };\n const indices = { rowIndex, columnIndex };\n\n cells = [valueCellCreator(datamodel, { projections, indices }, facetInfo)];\n }\n\n matrix[rowIndex] = matrix[rowIndex] || [];\n matrix[rowIndex].push(...cells);\n};\n\n/**\n * Gets Matrixes for corresponding datamodel, facets and projections\n *\n * @param {Object} dataModel input datamodel\n * @param {Object} fieldMap corresponding fieldmap\n * @param {Array} facetsAndProjections contains the set of facets and projections for the matrices\n * @param {Function} valueCellCreator Callback executed after datamodels are prepared after sel/proj\n * @return {Object} set of matrices with the corresponding row and column keys\n */\nexport const getMatrixModel = (dataModel, facetsAndProjections, valueCellCreator) => {\n let rowDataModels = [];\n const rowKeys = [];\n const columnKeys = [];\n const allColumnProjections = [];\n const matrix = [];\n const facetInfo = [];\n\n const fieldInfo = Object.assign({}, facetsAndProjections);\n const {\n rowFacets,\n colFacets,\n colProjections\n } = fieldInfo;\n\n colProjections.forEach((colProj) => {\n allColumnProjections.push(...colProj);\n });\n fieldInfo.allColumnProjections = allColumnProjections;\n\n // Performing row selection and projection\n if (rowFacets.length > 0) {\n // Get unique values for the root level of facet\n const field = rowFacets[0].toString();\n const firstLevelRowKeys = retriveDomainFromData(dataModel, field);\n\n // Get unique keys in the form of an array of arrays for each row\n uniqueKeyGenerator(rowKeys, { facets: rowFacets, dataModel, uniqueValues: firstLevelRowKeys });\n\n // Apply selection -> projection -> row datamodels\n rowKeys.forEach((val) => {\n // Create faceted datamodel\n const [rowFacetFieldNames] = getFieldNames(rowFacets);\n const selectedDataModel = createSelectedDataModel(dataModel, rowFacetFieldNames, val);\n\n // Project the datamodel based on the number of projections (based on last levels)\n const newProjectedDataModels = projectRows(selectedDataModel, fieldInfo);\n rowDataModels.push(...newProjectedDataModels);\n\n newProjectedDataModels.forEach(() => {\n facetInfo.push([rowFacets, val]);\n });\n });\n } else {\n // No row facets, hence only row projection\n rowDataModels.push(...projectRows(dataModel, fieldInfo));\n }\n\n // Maintaining set of row datamodels for column resolution\n rowDataModels = rowDataModels.length > 0 ? rowDataModels : [[]];\n\n // Performing column selection and projection\n if (colFacets.length > 0) {\n const colFacetNames = colFacets.map(d => `${d}`);\n // Get unique values for the root level of facet\n const field = colFacetNames[0];\n const firstLevelColumnKeys = retriveDomainFromData(dataModel, field);\n\n // Get unique keys to create faceted datamodels: this time for columns\n uniqueKeyGenerator(columnKeys, {\n facets: colFacetNames,\n dataModel,\n uniqueValues: firstLevelColumnKeys\n });\n // For each row in the datamodel, apply selection -> projection -> push the projection to matri\n rowDataModels.forEach((dme, rIndex) => {\n facetInfo[rIndex] = facetInfo[rIndex] || [[], []];\n columnKeys.forEach((val, cIndex) => {\n matrix[rIndex] = matrix[rIndex] || [];\n\n // If datamodel is not present in current row, choose parent datamodel\n const datamodel = dme instanceof DataModel ? dme : dataModel;\n\n // Selection is made on the datamodel for the current row\n const selectedDataModel = createSelectedDataModel(datamodel, colFacetNames, val);\n const context = {\n matrix,\n datamodel: selectedDataModel,\n facetInfo: {\n rowFacets: facetInfo[rIndex],\n colFacets: [colFacets, val],\n rowIndex: rIndex,\n columnIndex: cIndex\n },\n fieldInfo\n };\n pushToMatrix(context, valueCellCreator);\n });\n });\n } else {\n // No column facets, hence only row projection\n rowDataModels.forEach((dme, rIndex) => {\n facetInfo[rIndex] = facetInfo[rIndex] || [[], []];\n const context = {\n matrix,\n datamodel: dme || dataModel,\n facetInfo: {\n rowFacets: facetInfo[rIndex],\n colFacets: [[], []],\n rowIndex: rIndex,\n columnIndex: 0\n },\n fieldInfo\n };\n\n pushToMatrix(context, valueCellCreator);\n });\n }\n\n // Getting column keys\n const transposedColKeys = columnKeys.length > 0 ? columnKeys[0].map((col, i) =>\n columnKeys.map(row => row[i])) : columnKeys;\n\n return { matrix, rowKeys, columnKeys: transposedColKeys };\n};\n","import { AxisOrientation } from '@chartshq/muze-axis';\nimport {\n getObjProp,\n FieldType,\n STATE_NAMESPACES,\n retrieveNearestGroupByReducers,\n mergeRecursive,\n createSelection\n} from 'muze-utils';\nimport { getMatrixModel } from './matrix-model';\nimport {\n getCellKey,\n isDistributionEqual,\n mutateAxesFromMap,\n getFieldsFromSuppliedLayers,\n extractFields\n} from './group-utils';\nimport { ROW, ROWS, COLUMNS, COL, LEFT, RIGHT, TOP, BOTTOM, PRIMARY, SECONDARY, X, Y } from '../enums/constants';\n\n/**\n * Updates row and column cells with the geom cell corresponding to the facet keys\n *\n * @param {*} resolver\n * @param {*} facets\n */\nconst updateCells = (resolver, facets, geomCell) => {\n [ROW, COL].forEach((field) => {\n const cells = resolver[`${field}Cells`]();\n const facetKey = facets[`${field}Facets`][1].join();\n\n !cells[facetKey] && (cells[facetKey] = []);\n cells[facetKey].push(geomCell);\n resolver[`${field}Cells`](cells);\n });\n};\n\n/**\n *\n *\n * @param {*} context\n * @param {*} datamodel\n * @param {*} fieldInfo\n * @param {*} facets\n *\n */\nexport const createValueCells = (context, datamodel, fieldInfo, facets) => {\n const {\n projections,\n indices\n } = fieldInfo;\n const {\n rowFields,\n columnFields\n } = projections;\n const {\n rowIndex,\n columnIndex\n } = indices;\n const {\n suppliedLayers,\n cell: GeomCell,\n resolver,\n config,\n encoder,\n detailFields\n } = context;\n const axes = resolver.axes();\n const cacheMaps = resolver.cacheMaps();\n const matrixLayers = resolver.matrixLayers();\n const labelManager = resolver.dependencies().smartlabel;\n const horizontalAxis = resolver.horizontalAxis();\n const verticalAxis = resolver.verticalAxis();\n const datamodelTransform = resolver.datamodelTransform();\n const {\n entryCellMap,\n exitCellMap\n } = cacheMaps;\n const layerConfigArr = encoder.getLayerConfig({ columnFields, rowFields }, suppliedLayers || []);\n const axesCreators = { config, labelManager, axes, cacheMaps };\n\n fieldInfo.normalizedColumns = verticalAxis.fields;\n fieldInfo.normalizedRows = horizontalAxis.fields;\n\n const groupAxes = encoder.createAxis(axesCreators, fieldInfo, context);\n\n matrixLayers[rowIndex] = matrixLayers[rowIndex] ? matrixLayers[rowIndex] : [];\n matrixLayers[rowIndex][columnIndex] = layerConfigArr;\n\n // return from map if already there otherwise create and put in map\n const geomCellKey = getCellKey(rowIndex, columnIndex);\n const fields = {\n y: rowFields,\n x: columnFields\n };\n\n const allFacets = [\n [...facets.rowFacets[0], ...facets.colFacets[0]],\n [...facets.rowFacets[1], ...facets.colFacets[1]]\n ];\n const geomCell = !exitCellMap.has(geomCellKey) ? new GeomCell() : exitCellMap.get(geomCellKey);\n\n geomCell.data(datamodel)\n .axes(groupAxes)\n .fields(fields)\n .transform(datamodelTransform)\n .detailFields(detailFields)\n .facetByFields(allFacets);\n entryCellMap.set(geomCellKey, geomCell);\n exitCellMap.delete(geomCellKey);\n\n updateCells(resolver, facets, geomCell);\n\n return entryCellMap.get(geomCellKey);\n};\n\n/**\n * Creates axis cells based on the set of axes\n *\n * @param {Selection} selection Contains a selection of the axis units\n * @param {Array} axes Actual axis units\n * @param {number} axisIndex 0-> primary axis, 1-> secondary axis(when dual axis is made)\n * @param {Object} cells Contains a collection of the cells\n * @return {Object} return either set of axis/blank cells depending on the config\n */\n\nconst createAxisCells = (selection, axes, axisIndex, cells) =>\n createSelection(selection, axis => axis, axes, (item, i) => i + item.reduce((e, n) => {\n const id = n.id + axisIndex;\n return e + id;\n }, '')).map((axis) => {\n if (axis && axis[axisIndex]) {\n const axisInst = axis[axisIndex];\n const { orientation, show } = axisInst.config();\n\n return new cells.AxisCell().source(axisInst).config({\n isOffset: orientation === AxisOrientation.LEFT || orientation === AxisOrientation.TOP,\n show\n });\n }\n return new cells.BlankCell().config({ show: false });\n });\n\n/**\n *\n *\n * @param {*} context\n * @param {*} selectionObj\n * @param {*} cells\n * @retur\n */\nconst axisPlaceholderGn = (context, selObj, cells) => {\n const {\n matrices\n } = context;\n const {\n axesMatrix\n } = matrices;\n\n return (type, axisFrom) => {\n const axes = axesMatrix[`${type}`];\n\n if (axes && axes.length) {\n if (type === X || type === Y) {\n const fieldNames = type === Y ? ROWS : COLUMNS;\n\n [PRIMARY, SECONDARY].forEach((fieldType, index) => {\n const selObjProp = `${fieldNames}${fieldType}`;\n let axisIndex = index;\n let axesForDraw = axes;\n if (axisFrom === RIGHT || axisFrom === BOTTOM) {\n axisIndex = 1 - axisIndex;\n }\n if (!getObjProp(axes, 0, axisIndex)) {\n axesForDraw = [];\n }\n selObj[selObjProp] = createAxisCells(selObj[selObjProp], axesForDraw, axisIndex, cells);\n });\n } else {\n selObj.rowsPrimary = createAxisCells(selObj.rowPrime, axes.map(() => []), 0, cells);\n selObj.columnsPrimary = createAxisCells(selObj.colPrime, axes[0], 0, cells);\n }\n }\n return selObj;\n };\n};\n\n/**\n * Creates header cells based on the set of headers\n *\n * @param {Object} selection Contains a selection of the header units\n * @param {string} headers Contains a list of the headers\n * @param {Object} cells Contains a collection of the cells\n * @param {Object} labelManager smart label instance\n * @return {Object} return either set of header cells depending on the config\n */\nconst createTextCells = (selection, headers, cells, labelManager) => createSelection(selection,\n label => new cells.TextCell({}, { labelManager }).source(label), headers, (key, i) => key + i);\n\n/**\n *\n *\n * @param {*} context\n * @param {*} selectionObj\n * @param {*} cells\n * @param {*} labelManager\n *\n */\nconst headerPlaceholderGn = (context, selectionObj, cells, labelManager) => {\n const {\n axis,\n keys,\n type,\n facet\n } = context;\n const counter = axis.length / keys.length;\n const selectionKeys = keys.length ? axis.map((d, i) => keys[Math.floor(i / counter)]) : [];\n\n return createSelection(selectionObj[`${type}Headers`], keySet => keySet, selectionKeys,\n (keySet, i) => `${keySet.join(',')}-${i}`)\n .map(keySet => createTextCells(null, keySet, cells, labelManager)\n .map((cell, k, i) => cell.source(keySet[i]).config(facet)));\n};\n\n/**\n * Creates a set of placeholders as a part of selection object\n *\n * @param {Array} normalizedOptions contains normalized rows and columns\n * @param {Array} matrices contains axis and value matrices\n * @param {aArrayny} projections contains set of row and column projections\n * @param {Object} cells Contains a collection of the cells\n * @param {Object} labelManager smart label instance\n * @return {Object} Creates a set of placeholders as a part of selections\n */\nconst generatePlaceholders = (context, cells, labelManager) => {\n let selectionObj;\n const {\n matrices,\n fields,\n facetsAndProjections,\n selection,\n facet,\n encoders,\n resolver\n } = context;\n const {\n rows,\n columns\n } = fields;\n const {\n valuesMatrix\n } = matrices;\n const {\n rowProjections,\n colProjections\n } = facetsAndProjections;\n const {\n rowKeys,\n columnKeys\n } = valuesMatrix;\n const takeAxisFrom = encoders.simpleEncoder._axisFrom;\n const takeHeaderFrom = encoders.simpleEncoder._headerFrom;\n\n selectionObj = selection || {};\n\n ['pie', X, Y].forEach((axis) => {\n const axisFrom = axis === X ? takeAxisFrom.column : takeAxisFrom.row;\n selectionObj = axisPlaceholderGn(context, selectionObj, cells)(axis, axisFrom);\n });\n\n const {\n rowsPrimary,\n rowsSecondary,\n columnsPrimary,\n columnsSecondary\n } = selectionObj;\n\n const rowAxis = rowsPrimary && rowsPrimary.getObjects().length ? rowsPrimary.getObjects() :\n (rowsSecondary && rowsSecondary.getObjects().length ? rowsSecondary.getObjects() : []);\n const colAxis = columnsPrimary && columnsPrimary.getObjects().length ? columnsPrimary.getObjects() :\n (columnsSecondary && columnsSecondary.getObjects().length ? columnsSecondary.getObjects() : []);\n\n const headerConfig = [\n { type: LEFT, section: rows[0], axis: rowAxis, headerFrom: takeHeaderFrom.row },\n { type: RIGHT, section: rows[1], axis: rowAxis, headerFrom: takeHeaderFrom.row },\n { type: TOP, section: columns[0], axis: colAxis, headerFrom: takeHeaderFrom.column },\n { type: BOTTOM, section: columns[1], axis: colAxis, headerFrom: takeHeaderFrom.column }\n ];\n\n headerConfig.forEach((config, index) => {\n let keys;\n let length;\n const {\n type,\n section,\n axis,\n headerFrom\n } = config;\n\n if (index < 2) {\n keys = rowKeys;\n length = rowProjections.length > 0 ? rowProjections.length : 1;\n } else {\n keys = columnKeys;\n length = colProjections.length > 0 ? colProjections.length : 1;\n }\n keys = keys.map(arr => arr.map(val => resolver.valueParser()(val)));\n if (section.length && headerFrom === type && axis && keys.length) {\n const hContext = { axis, length, type };\n let headers = [];\n if (index < 2) {\n hContext.keys = keys;\n hContext.facet = facet.rows;\n headers = headerPlaceholderGn(hContext, selectionObj, cells, labelManager);\n } else {\n hContext.facet = facet.columns;\n hContext.keys = keys[0].map((key, i) => keys.map(e => e[i]));\n\n headers = headerPlaceholderGn(hContext, selectionObj, cells, labelManager);\n }\n selectionObj[`${type}Headers`] = headers;\n } else {\n selectionObj[`${type}Headers`] = null;\n }\n });\n return selectionObj;\n};\n\n/**\n * Generates matrices\n *\n * @param {Object} config Configuration to generate matrices\n * @param {Array} matrices Matrices containing the set of visual units and axes units\n * @param {Object} cells Contains a collection of the cells\n * @param {Object} labelManager smart label instance\n * @return {Object} contains a collection of matrices\n */\nexport const generateMatrices = (context, matrices, cells, labelManager) => {\n const {\n unitHeight,\n unitWidth,\n facetsAndProjections,\n normalizedRows,\n normalizedColumns,\n selection,\n axisFrom,\n facet,\n encoders,\n resolver\n } = context;\n const placeholderContext = {\n fields: {\n rows: normalizedRows,\n columns: normalizedColumns\n },\n matrices,\n facetsAndProjections,\n selection,\n axisFrom,\n facet,\n encoders,\n resolver\n };\n // Generate placeholders for all matrices\n const selectionObj = generatePlaceholders(placeholderContext, cells, labelManager);\n const {\n columnsPrimary,\n columnsSecondary,\n rowsPrimary,\n rowsSecondary,\n leftHeaders,\n topHeaders,\n bottomHeaders,\n rightHeaders\n } = selectionObj;\n const [rowPrime, rowSec, colPrime, colSec] = [rowsPrimary, rowsSecondary, columnsPrimary, columnsSecondary]\n .map(d => (d ? d.getObjects() : []));\n const [leftFacets, rightFacets] = [leftHeaders, rightHeaders]\n .map(e => (e ? e.getObjects()\n .map(f => f.getObjects()) : []));\n let rowPriority = rowSec.length ? 1 : -1;\n rowPrime.length && rowPriority++;\n let colPriority = colSec.length ? 1 : -1;\n colPrime.length && colPriority++;\n\n // Compute left matrix using left headers and the axes on the rows\n let leftMatrix = leftFacets.length ? leftFacets.map((d, i) => {\n rowPrime[i] = rowPrime[i] ? [rowPrime[i]] : [];\n return [...d, ...rowPrime[i]];\n }) : (rowPrime ? rowPrime.map(d => [d]) : []);\n\n // Compute right matrix using right headers and the axes on the rows\n const rightMatrix = rowSec.length ? rowSec.map((d, i) => [d, ...(rightFacets[i] || [])]) : (rightFacets.length ?\n rightFacets.map(d => [...d]) : []);\n\n const topMatrix = [];\n if (topHeaders) {\n const headers = topHeaders.getObjects();\n headers.forEach((e) => {\n const innerHeaders = e.getObjects();\n innerHeaders.forEach((x, i) => {\n topMatrix[i] = topMatrix[i] || [];\n topMatrix[i].push(x);\n });\n });\n }\n // Compute top matrix using the top headers and axes on the columns\n if (colPrime.length) {\n topMatrix.push(colPrime);\n }\n\n // Bottom and right matrices are prepared using the user config.\n let bottomMatrix = [];\n if (colSec.length) {\n bottomMatrix.push(colSec);\n }\n const currentBottomLength = bottomMatrix.length;\n if (bottomHeaders) {\n const headers = bottomHeaders.getObjects();\n headers.forEach((e) => {\n const innerHeaders = e.getObjects();\n innerHeaders.forEach((x, i) => {\n bottomMatrix[i + currentBottomLength] = bottomMatrix[i + currentBottomLength] || [];\n bottomMatrix[i + currentBottomLength].push(x);\n });\n });\n }\n\n if (!leftMatrix.length && !rightMatrix.length) {\n const cell = new cells.BlankCell();\n cell.setAvailableSpace(unitWidth, unitHeight);\n leftMatrix = [[cell]];\n }\n\n if (!topMatrix.length && (!bottomMatrix.length || !bottomMatrix[0].length)) {\n const cell = new cells.BlankCell();\n cell.setAvailableSpace(unitWidth, unitHeight);\n bottomMatrix = [[cell]];\n }\n\n return {\n rows: [leftMatrix, rightMatrix],\n columns: [topMatrix, bottomMatrix],\n selectionObj,\n colPriority,\n rowPriority\n };\n};\n\n/**\n * Computes matrices for a group\n *\n * @param {Object} datamodel on which the matrices are to be computed\n * @param {Object} config configuration of the matrices\n * @param {Object} layerRegistry contains the registered layers\n * @return {Object} conputed matrices\n * @memberof MatrixResolver\n */\nexport const computeMatrices = (context, config) => {\n const {\n resolver,\n datamodel,\n componentRegistry,\n encoders\n } = context;\n const {\n globalConfig,\n selection,\n transform\n } = config;\n const groupBy = globalConfig.autoGroupBy;\n const { smartlabel: labelManager } = resolver.dependencies();\n const fieldMap = datamodel.getFieldsConfig();\n const layerConfig = resolver.layerConfig();\n const registry = resolver.registry();\n const { fields: normalizedRows } = resolver.horizontalAxis();\n const { fields: normalizedColumns } = resolver.verticalAxis();\n const otherEncodings = resolver.optionalProjections(config, layerConfig);\n const facetsAndProjections = resolver.getAllFields();\n const matrixGnContext = {\n // Configuration to be passed to generate the different matrices.\n // A common config is used for both value matrices and other matrices\n normalizedColumns,\n normalizedRows,\n facetsAndProjections,\n layers: layerConfig,\n fieldMap,\n otherEncodings,\n encoders,\n facet: globalConfig.facet || {},\n axisFrom: globalConfig.axisFrom || {},\n selection,\n resolver\n };\n const cells = {\n GeomCell: resolver.getCellDef(registry.GeomCell),\n AxisCell: resolver.getCellDef(registry.AxisCell),\n BlankCell: resolver.getCellDef(registry.BlankCell),\n TextCell: resolver.getCellDef(registry.TextCell)\n };\n const isRowSizeEqual = isDistributionEqual(normalizedRows);\n const isColumnSizeEqual = isDistributionEqual(normalizedColumns);\n\n resolver.colCells({});\n resolver.rowCells({});\n resolver.datamodelTransform(transform || {});\n\n // Cell creation begins here\n resolver.resetSimpleAxes();\n\n const {\n entryCellMap\n } = resolver.cacheMaps();\n const newCacheMap = {\n exitCellMap: entryCellMap,\n entryCellMap: new Map()\n };\n\n resolver.cacheMaps(newCacheMap);\n\n const valueCellContext = {\n config: globalConfig,\n suppliedLayers: encoders.simpleEncoder.serializeLayerConfig(resolver.layerConfig()),\n resolver,\n cell: cells.GeomCell,\n encoder: encoders.simpleEncoder,\n newCacheMap,\n detailFields: config.detail\n };\n const fieldsConfig = datamodel.getFieldsConfig();\n let groupedModel = datamodel;\n if (!groupBy.disabled) {\n const fields = getFieldsFromSuppliedLayers(valueCellContext.suppliedLayers, datamodel.getFieldsConfig());\n const allFields = extractFields(facetsAndProjections, fields);\n\n const dimensions = allFields.filter(field =>\n fieldsConfig[field] && fieldsConfig[field].def.type === FieldType.DIMENSION);\n const aggregationFns = groupBy.measures;\n const measureNames = Object.keys(datamodel.getFieldspace().getMeasure());\n const nearestAggFns = retrieveNearestGroupByReducers(datamodel, ...measureNames);\n const resolvedAggFns = mergeRecursive(nearestAggFns, aggregationFns);\n\n groupedModel = datamodel.groupBy(dimensions.length ? dimensions : [''], resolvedAggFns).project(allFields);\n }\n\n // return a callback function to create the cells from the matrix\n const cellCreator = resolver.valueCellsCreator(valueCellContext);\n // Creates value matrices from the datamodel and configs\n const valueMatrixInfo = getMatrixModel(groupedModel, facetsAndProjections, cellCreator);\n\n resolver.cacheMaps().exitCellMap.forEach((placeholder) => {\n placeholder.remove();\n });\n resolver.cacheMaps().exitCellMap.clear();\n resolver.valueMatrix(valueMatrixInfo.matrix);\n\n const { xAxes, yAxes } = mutateAxesFromMap(resolver.cacheMaps(), resolver.axes());\n\n resolver.axes({\n x: xAxes,\n y: yAxes\n });\n const store = resolver.store();\n\n [xAxes, yAxes].forEach((axesArr, type) => {\n const stateProps = {};\n axesArr = axesArr || [];\n axesArr.forEach((axes, idx) => {\n axes.forEach((axis, axisIndex) => {\n stateProps[`${idx}${axisIndex}`] = null;\n });\n });\n store.append(`${STATE_NAMESPACES.GROUP_GLOBAL_NAMESPACE}.domain.${type ? 'y' : 'x'}`, stateProps);\n });\n resolver.createUnits(componentRegistry, config);\n\n const matrices = {\n valuesMatrix: valueMatrixInfo,\n axesMatrix: resolver.axes()\n };\n // Create all matrices\n const {\n rows,\n columns,\n selectionObj,\n rowPriority,\n colPriority\n } = generateMatrices(matrixGnContext, matrices, cells, labelManager);\n\n resolver.rowMatrix(rows);\n resolver.columnMatrix(columns);\n\n return {\n rows: resolver.rowMatrix(),\n columns: resolver.columnMatrix(),\n values: resolver.valueMatrix(),\n isColumnSizeEqual,\n isRowSizeEqual,\n priority: {\n row: rowPriority,\n col: colPriority\n },\n selection: selectionObj,\n dataModels: {\n groupedModel,\n parentModel: datamodel\n }\n };\n};\n","export const RESOLVER_PROPS = {\n dependencies: {},\n units: {},\n datamodelTransform: {},\n layerConfig: {},\n matrixLayers: {},\n colCells: {},\n rowCells: {},\n rowMatrix: {},\n columnMatrix: {},\n valueMatrix: {},\n encoder: {},\n valueParser: {}\n};\n","import { VisualUnit } from '@chartshq/visual-unit';\nimport { generateGetterSetters, STATE_NAMESPACES } from 'muze-utils';\nimport {\n initializeCacheMaps,\n headerCreator,\n extractUnitConfig,\n setFacetsAndProjections\n} from './group-utils';\nimport {\n ROW, COL, LEFT, RIGHT, COLOR, SIZE, SHAPE, DETAIL, CELL, X_AXES, Y_AXES, ENTRY_CELLS, EXIT_CELLS, INITIALIZED,\n AXIS, UNIT, BEFORE_UPDATE, UPDATED, VALUE_MATRIX, FACET_HEADERS\n} from '../enums/constants';\nimport { createValueCells, computeMatrices } from './cell-creator';\nimport { RESOLVER_PROPS } from './resolver-props';\n\n/**\n * Resolves the matrices from configuration provided\n *\n * @export\n * @class MatrixResolver\n */\nexport default class MatrixResolver {\n\n /**\n * Creates an instance of MatrixResolver.\n * @param {Object} dependencies needed to run the resolver\n * @memberof MatrixResolver\n */\n constructor (dependencies) {\n this._registry = {};\n this._layerConfig = [];\n this._matrixLayers = [];\n this._dependencies = dependencies;\n this._rowMatrix = [];\n this._columnMatrix = [];\n this._valueMatrix = [];\n this._facets = { rowFacets: [], colFacets: [] };\n this._projections = { rowProjections: [], colProjections: [] };\n this._datamodelTransform = {};\n this._units = [];\n this._cacheMaps = {};\n this._axes = {\n x: {},\n y: {},\n color: [],\n size: [],\n shape: []\n };\n generateGetterSetters(this, RESOLVER_PROPS);\n this.cacheMaps(initializeCacheMaps());\n }\n\n /**\n * Set: Registers placeholders, Get: return {Object} those placeholders\n *\n * @param {Object} placeholders cells that will construct the group\n * @return {Object} Either current instance or the set of placeholders\n * @memberof MatrixResolver\n */\n registry (...placeholders) {\n if (placeholders.length) {\n Object.entries(placeholders[0]).forEach((val) => {\n this._registry[val[0]] = val[1];\n });\n return this;\n }\n return this._registry;\n }\n\n /**\n * Used to set the layer config from outside or get current layer info\n *\n * @param {Object} type configuration of layer provided externally\n * @return {Object} either the layer or current instance\n * @memberof MatrixResolver\n */\n cacheMaps (...maps) {\n if (maps.length) {\n [CELL, X_AXES, Y_AXES, ENTRY_CELLS, EXIT_CELLS].forEach((e) => {\n this._cacheMaps[`${e}Map`] = maps[0][`${e}Map`] || this._cacheMaps[`${e}Map`];\n });\n return this;\n }\n return this._cacheMaps;\n }\n\n /**\n * Used to set the layer config from outside or get current layer info\n *\n * @param {Object} type configuration of layer provided externally\n * @return {Object} either the layer or current instance\n * @memberof MatrixResolver\n */\n axes (...axes) {\n if (axes.length) {\n this._axes = Object.assign({}, this._axes, axes[0]);\n return this;\n }\n return this._axes;\n }\n\n /**\n *\n *\n * @param {*} facets\n *\n * @memberof MatrixResolver\n */\n facets (...facets) {\n if (facets.length) {\n Object.entries(facets[0]).forEach((e) => {\n this._facets[e[0]] = e[1];\n });\n return this;\n }\n return this._facets;\n }\n\n /**\n *\n *\n * @param {*} projections\n *\n * @memberof MatrixResolver\n */\n projections (...projections) {\n if (projections.length) {\n Object.entries(projections[0]).forEach((e) => {\n this._projections[e[0]] = e[1];\n });\n return this;\n }\n return this._projections;\n }\n\n /**\n *\n *\n * @param {*} config\n * @param {*} layerConfig\n *\n * @memberof MatrixResolver\n */\n optionalProjections (config, layerConfig) {\n const otherEncodings = {};\n const optionalProjections = [];\n const otherEncodingTypes = [SIZE, COLOR, SHAPE];\n\n otherEncodingTypes.forEach((type) => {\n if (config[type] && config[type].field) {\n const enc = config[type];\n otherEncodings[type] = enc.field;\n optionalProjections.push(enc.field);\n }\n });\n\n if (config[DETAIL]) {\n optionalProjections.push(...config.detail);\n }\n\n if (layerConfig.length) {\n layerConfig.forEach((layer) => {\n if (layer.encoding) {\n Object.values(layer.encoding).forEach((enc) => {\n if (enc && optionalProjections.indexOf(enc.field) === -1) {\n optionalProjections.push(enc.field ? enc.field : enc);\n }\n });\n }\n });\n }\n this.projections({ optionalProjections });\n return otherEncodings;\n }\n\n /**\n * return the normalized set of rows and facets and projections\n *\n * @param {Object} rows parameters needed to set horizontal axis consisiting of rows\n * @return {Object} facets, projections and normalized rows\n * @memberof MatrixResolver\n */\n horizontalAxis (rows, encoder) {\n if (rows) {\n this._horizontalAxis = setFacetsAndProjections(this, { type: ROW, fields: rows }, encoder);\n return this;\n }\n return this._horizontalAxis;\n }\n\n /**\n * return the normalized set of columns and facets and projections\n *\n * @param {Object} columns parameters needed to set vertical axis consisiting of columns\n * @return {Object} facets, projections and normalized columns\n * @memberof MatrixResolver\n */\n verticalAxis (columns, encoder) {\n if (columns) {\n this._verticalAxis = setFacetsAndProjections(this, { type: COL, fields: columns }, encoder);\n return this;\n }\n return this._verticalAxis;\n }\n\n /**\n * Gets the class definition of a particular cell type(if the particular type has been extended, that particular\n * definition is returned)\n *\n * @param {Object} cell cell whose class definition is to be retrieved\n * @return {Object} cell definition\n * @memberof MatrixResolver\n */\n getCellDef (cell) {\n const registry = this.registry();\n\n Object.values(registry).forEach((e) => {\n if (e.prototype instanceof cell) {\n cell = e;\n }\n });\n return cell;\n }\n\n /**\n * return a visual cell creator along with its axis information to be injected to the datamodel creation\n * function\n *\n * @param {Object} GeomCell Type of cell to be created\n * @return {Object} Created cell\n * @memberof MatrixResolver\n */\n valueCellsCreator (context) {\n // reset matrix layers\n this.matrixLayers([]);\n\n return (datamodel, fieldInfo, facets) => createValueCells(context, datamodel, fieldInfo, facets);\n }\n\n /**\n * Callback to be applied on each cell of a matrix of a particular type\n *\n * @param {string} matrixType type of matrix on which callback is to be applied\n * @param {Function} callback function to be applied to each cell\n * @memberof MatrixResolver\n */\n forEach (matrixType, callback) {\n this[matrixType]().forEach((row, rIndex) => {\n row.forEach((col, cIndex) => {\n callback(rIndex, cIndex, col);\n });\n });\n }\n\n /**\n *\n *\n *\n * @memberof MatrixResolver\n */\n getAllFields () {\n const retObj = this.projections();\n\n Object.entries(this.facets()).forEach((e) => {\n retObj[e[0]] = e[1];\n });\n return retObj;\n }\n\n /**\n *\n *\n * @memberof MatrixResolver\n */\n resetSimpleAxes () {\n return this.axes({\n x: new Set(),\n y: new Set()\n });\n }\n\n /**\n *\n *\n * @param {*} componentRegistry\n * @param {*} config\n * @memberof MatrixResolver\n */\n createUnits (componentRegistry, config) {\n const {\n globalConfig,\n alias\n } = config;\n const {\n layerRegistry,\n sideEffectRegistry\n } = componentRegistry;\n const {\n smartlabel: smartLabel,\n lifeCycleManager\n } = this.dependencies();\n // Provide the source for the matrix\n const units = [[]];\n // Setting unit configuration\n const unitConfig = extractUnitConfig(globalConfig || {});\n const globalState = VisualUnit.getState()[0];\n const globalStates = {};\n const store = this.store();\n this.forEach(VALUE_MATRIX, (i, j, el) => {\n let unit = el.source();\n if (!unit) {\n const namespace = `${i}${j}`;\n\n unit = VisualUnit.create({\n layerRegistry,\n sideEffectRegistry\n }, {\n smartLabel,\n lifeCycleManager\n });\n globalStates[namespace] = null;\n unit.metaInf({\n rowIndex: i,\n colIndex: j,\n namespace\n });\n unit.store(store);\n el.source(unit);\n }\n !units[i] && (units[i] = []);\n units[i][j] = unit;\n unit.parentAlias(alias);\n unit.valueParser(this.valueParser());\n el.config(unitConfig);\n });\n\n for (const key in globalState) {\n store.append(`${STATE_NAMESPACES.UNIT_GLOBAL_NAMESPACE}.${key}`, globalStates);\n }\n\n lifeCycleManager.notify({ client: units, action: INITIALIZED, formalName: UNIT });\n return this.units(units);\n }\n\n /**\n *\n *\n * @param {*} config\n * @memberof MatrixResolver\n */\n setDomains (config, datamodel, encoders) {\n const {\n color,\n shape,\n size,\n globalConfig\n } = config;\n const groupBy = globalConfig.autoGroupBy;\n const {\n rowFacets,\n colFacets\n } = this.getAllFields();\n const encoding = {\n color,\n shape,\n size\n };\n const facetFields = [...rowFacets.map(e => e.toString()), ...colFacets.map(e => e.toString())];\n const retContext = {\n domains: encoders.simpleEncoder.getRetinalFieldsDomain(datamodel, encoding, facetFields, groupBy),\n axes: this.axes(),\n encoding\n };\n encoders.retinalEncoder.setCommonDomain(retContext);\n return this;\n }\n\n resetFacetsAndProjections () {\n this._facets = {};\n this._projections = {};\n return this;\n }\n\n /**\n *\n *\n *\n * @memberof MatrixResolver\n */\n getRetinalAxes () {\n const {\n color,\n shape,\n size\n } = this.axes();\n\n return {\n color: [...color],\n shape: [...shape],\n size: [...size]\n };\n }\n\n /**\n *\n *\n * @param {*} type\n *\n * @memberof MatrixResolver\n */\n getSimpleAxes (type) {\n return this.axes()[`${type}`];\n }\n\n /**\n *\n *\n * @param {*} datamodel\n * @param {*} config\n * @memberof MatrixResolver\n */\n createRetinalAxes (fieldsConfig, config, encoders) {\n const layerConfig = this.layerConfig();\n this.optionalProjections(config, layerConfig);\n const retinalAxes = encoders.retinalEncoder.createAxis({\n fieldsConfig,\n config,\n axes: this.axes()\n });\n const {\n lifeCycleManager\n } = this.dependencies();\n\n [COLOR, SHAPE, SIZE].forEach((e) => {\n this.axes()[e] = retinalAxes[e];\n });\n\n lifeCycleManager.notify({ client: this.axes(), action: INITIALIZED, formalName: AXIS });\n lifeCycleManager.notify({ client: this.units(), action: BEFORE_UPDATE, formalName: UNIT });\n\n const units = [];\n const matrixLayers = this.matrixLayers();\n\n this.forEach(VALUE_MATRIX, (i, j, el) => {\n el.axes(retinalAxes);\n el.source() && el.source().retinalFields(config);\n el.layerDef(encoders.retinalEncoder.getLayerConfig(config, matrixLayers[i][j]));\n el.updateModel();\n\n units.push(el.source());\n });\n\n lifeCycleManager.notify({ client: units, action: UPDATED, formalName: UNIT });\n return this;\n }\n\n /**\n *\n *\n * @param {*} placeholders\n * @param {*} fieldNames\n *\n * @memberof MatrixResolver\n */\n createHeaders (placeholders, fieldNames, config) {\n let bottomLeft = [];\n let bottomRight = [];\n const {\n rows,\n columns\n } = placeholders;\n const {\n smartlabel: labelManager,\n lifeCycleManager\n } = this.dependencies();\n const {\n showHeaders,\n classPrefix\n } = config;\n const TextCell = this.getCellDef(this.registry().TextCell);\n const BlankCell = this.getCellDef(this.registry().BlankCell);\n const [leftRows, rightRows] = rows;\n const [topCols, bottomCols] = columns;\n const rowHeaders = fieldNames.rows;\n const blankCellCreator = cell => new BlankCell().config({ show: cell.config().show });\n\n // Headers and footers are created based on the rows. Thereafter, using the column information\n // they are tabularized into the current structure\n const headers = {\n left: headerCreator(leftRows, rowHeaders[0], showHeaders ? TextCell : BlankCell,\n { classPrefix, labelManager }),\n right: headerCreator(rightRows, rowHeaders[1], showHeaders ? TextCell : BlankCell,\n { classPrefix, labelManager })\n };\n const footers = {\n left: leftRows.length > 0 ? leftRows[0].map(blankCellCreator) : [],\n right: rightRows.length > 0 ? rightRows[0].map(blankCellCreator) : []\n };\n const [topLeft, topRight] = [LEFT, RIGHT].map(type => topCols.map((col, i) => {\n if (i === topCols.length - 1) {\n return headers[type];\n }\n return footers[type];\n }));\n\n // Creating only bottom matrices if there is no information on the top\n if (topCols.length === 0) {\n [bottomLeft, bottomRight] = [LEFT, RIGHT].map(type => bottomCols.map((col, i) => {\n if (i === 0) {\n return headers[type];\n }\n return footers[type];\n }));\n } else {\n bottomLeft = bottomCols.map(() => (leftRows.length > 0 ? leftRows[0].map(blankCellCreator) : []));\n bottomRight = bottomCols.map(() => (rightRows.length > 0 ? rightRows[0].map(blankCellCreator) : []));\n }\n\n lifeCycleManager.notify({\n client: [topLeft, topRight, bottomLeft, bottomRight],\n action: INITIALIZED,\n formalName: FACET_HEADERS\n });\n\n return { topLeft, topRight, bottomLeft, bottomRight };\n }\n\n /**\n *\n *\n * @param {*} datamodel\n * @param {*} config\n * @param {*} componentRegistry\n * @param {*} encoders\n *\n * @memberof MatrixResolver\n */\n getMatrices (datamodel, config, componentRegistry, encoders) {\n const context = {\n datamodel,\n componentRegistry,\n encoders,\n resolver: this\n };\n\n return computeMatrices(context, config);\n }\n\n store (...params) {\n if (params.length) {\n this._store = params[0];\n return this;\n }\n return this._store;\n }\n}\n","/**\n * This is a wrapper class over the matrix of cells which gets created in visual group. Visual Group creates left,\n * right, bottom and top and center matrices and wraps them using this class.\n *\n * @public\n * @class ValueMatrix\n */\nclass ValueMatrix {\n\n /**\n * Creates an instance of ValueMatrix.\n *\n * @param {Array} matrixArr Matrix array.\n */\n constructor (matrixArr) {\n const instancesById = {};\n\n this.matrix(matrixArr || []);\n this.filter(() => true);\n\n this.each((el, rIdx, cIdx) => {\n const cellValue = el.valueOf();\n if (cellValue && cellValue.id) {\n const id = cellValue.id();\n instancesById[id] = {\n instance: cellValue,\n rowIndex: rIdx,\n colIndex: cIdx\n };\n }\n });\n\n this.instancesById(instancesById);\n }\n\n instancesById (...id) {\n if (id.length) {\n this._instancesById = id[0];\n return this;\n }\n return this._instancesById;\n }\n\n /**\n * Returns the array of matrices contained in this instance.\n *\n * @public\n * @return {Array} Array of matrices.\n */\n matrix (...matrix) {\n if (matrix.length) {\n this._matrix = matrix[0];\n return this;\n }\n return this._matrix;\n }\n\n /**\n * Sets a filter criteria. This filter criteria gets applied when each function is called.\n *\n * @public\n * @param {Function} fn Filter function.\n *\n * @return {ValueMatrix} Instance of value matrix.\n */\n filter (...fn) {\n if (fn.length) {\n this._filterFn = fn[0];\n return this;\n }\n return this._filterFn;\n }\n\n /**\n * Returns the total width occupied by all the cells of the matrix.\n *\n * @return {Number} Width of the matrix.\n */\n width () {\n let rowWidth = 0;\n\n this.matrix().forEach((row) => {\n let currentRowWidth = 0;\n row.forEach((cell) => {\n currentRowWidth += cell.getLogicalSpace().width;\n });\n rowWidth = Math.max(rowWidth, currentRowWidth);\n });\n return rowWidth;\n }\n\n /**\n * Returns the total width occupied by all the cells of the matrix.\n *\n * @return {Number} Width of the matrix.\n */\n height () {\n let rowHeight = 0;\n\n this.matrix().forEach((row) => {\n let currentRowHeight = 0;\n row.forEach((cell) => {\n currentRowHeight = Math.max(currentRowHeight, cell.getLogicalSpace().height);\n });\n rowHeight += currentRowHeight;\n });\n return rowHeight;\n }\n\n /**\n * Iterates through the two dimensional matrix array and calls the given callback function with the cell instance,\n * row index, column index and the matrix array.\n *\n * @param {Function} fn Callback function which will get called for every cell.\n * @return {ValueMatrix} Instance of the value matrix.\n */\n each (fn) {\n const matrix = this.matrix();\n const filterFn = this.filter();\n\n matrix.forEach((row, rIndex) => {\n row.forEach((col, cIndex) => {\n if (filterFn(col)) {\n fn(col, rIndex, cIndex, matrix);\n }\n });\n });\n return this;\n }\n\n findPlaceHolderById (id) {\n return this.instancesById()[id];\n }\n}\n\nexport default ValueMatrix;\n","import { VisualUnit } from '@chartshq/visual-unit';\nimport { STATE_NAMESPACES, CommonProps } from 'muze-utils';\nimport { BaseLayer } from '@chartshq/visual-layer';\nimport { getEncoder, getBorders } from '../group-helper';\nimport { RetinalEncoder } from '../encoder';\nimport { registerDomainChangeListener, unsubscribeChangeListeners } from './change-listener';\nimport ValueMatrix from './value-matrix';\n\nexport const createUnitState = (context) => {\n const [globalState] = VisualUnit.getState();\n const store = context.store();\n store.append(STATE_NAMESPACES.UNIT_GLOBAL_NAMESPACE, globalState);\n};\n\nexport const initializeGlobalState = (context) => {\n const globalState = context.constructor.getState()[0];\n const store = context.store();\n store.append(STATE_NAMESPACES.GROUP_GLOBAL_NAMESPACE, globalState);\n};\n\nexport const createLayerState = (context) => {\n const [globalState] = BaseLayer.getState();\n context.store().append(STATE_NAMESPACES.LAYER_GLOBAL_NAMESPACE, globalState);\n};\n\nconst sanitizeRetinalConfig = (retinalConf) => {\n const conf = {};\n for (const key in retinalConf) {\n const confValue = retinalConf[key];\n if (typeof confValue === 'string' || !confValue) {\n conf[key] = {\n field: retinalConf[key]\n };\n } else {\n conf[key] = confValue;\n }\n }\n return conf;\n};\n\nexport const setMatrixInstances = (context, placeholder) => {\n let {\n values,\n rows,\n columns\n } = placeholder;\n values = values || [];\n rows = rows || [];\n columns = columns || [];\n context._composition.matrices = {\n value: new ValueMatrix(values),\n left: new ValueMatrix(rows[0]),\n right: new ValueMatrix(rows[1]),\n top: new ValueMatrix(columns[0]),\n bottom: new ValueMatrix(columns[1])\n };\n\n context._dependencies.throwback.commit(CommonProps.MATRIX_CREATED, true);\n return context;\n};\n\nexport const createMatrices = (context) => {\n const rows = context.rows();\n const columns = context.columns();\n const color = context.color();\n const datamodel = context.data();\n const size = context.size();\n const detail = context.detail();\n const layers = context.layers();\n const transform = context.transform();\n const config = context.config();\n const shape = context.shape();\n\n // Get the resolver for the matrices\n const resolver = context.resolver();\n resolver.store(context.store());\n resolver.valueParser(context.valueParser());\n // Prepare configuration for matrix preparation\n let matrixConfig = {\n selection: context.selection(),\n alias: context.alias(),\n globalConfig: config || {},\n rows,\n columns,\n detail,\n layers,\n transform\n };\n\n unsubscribeChangeListeners(context);\n\n const retinalConfig = sanitizeRetinalConfig({\n color,\n shape,\n size\n });\n\n matrixConfig = Object.assign(matrixConfig, retinalConfig);\n // Create the encoders for the group\n const encoders = {};\n encoders.retinalEncoder = new RetinalEncoder();\n encoders.simpleEncoder = getEncoder(layers);\n resolver.encoder(encoders.simpleEncoder);\n\n // Set the group type\n context.groupType(encoders.simpleEncoder.constructor.type());\n\n // Get sanitized fields as instances of the Vars Class\n const fields = encoders.simpleEncoder.fieldSanitizer(datamodel, matrixConfig);\n encoders.simpleEncoder.setAxisAndHeaders(config ? config.axisFrom : {}, fields);\n // Setting layers for the code\n layers && resolver.layerConfig(layers);\n // Set the row and column axes\n resolver.horizontalAxis(fields.rows, encoders).verticalAxis(fields.columns, encoders);\n // Getting the placeholders\n const placeholderInfo = resolver.getMatrices(datamodel, matrixConfig, context.registry(), encoders);\n context._groupedDataModel = placeholderInfo.dataModels.groupedModel;\n // Set the selection object\n context.selection(placeholderInfo.selection);\n\n // Create retinal axes\n resolver.createRetinalAxes(placeholderInfo.dataModels.parentModel.getFieldsConfig(), retinalConfig,\n encoders);\n\n // Domains are evaluated for each of the axes for commonality\n resolver.setDomains(matrixConfig, placeholderInfo.dataModels, encoders);\n\n // Create matrix instances\n setMatrixInstances(context, placeholderInfo);\n\n // Prepare corner matrices\n context.cornerMatrices(resolver.createHeaders(placeholderInfo, fields, config));\n\n // Set placeholder information\n context.placeholderInfo(placeholderInfo);\n\n context._composition.axes = resolver.axes();\n context.metaData({\n border: getBorders(placeholderInfo, encoders.simpleEncoder)\n });\n\n resolver.encoder().unionUnitDomains(context);\n\n registerDomainChangeListener(context);\n return context;\n};\n","import { STATE_NAMESPACES } from 'muze-utils';\n\nexport const setupChangeListeners = (context) => {\n const store = context.store();\n\n store.registerChangeListener([`${STATE_NAMESPACES.GROUP_GLOBAL_NAMESPACE}.domain.x`], () => {\n const groupAxes = context.resolver().axes();\n groupAxes.x.forEach(axes => axes.forEach((axis) => {\n axis.render();\n }));\n });\n\n store.registerChangeListener([`${STATE_NAMESPACES.GROUP_GLOBAL_NAMESPACE}.domain.y`], () => {\n const groupAxes = context.resolver().axes();\n groupAxes.y.forEach(axes => axes.forEach((axis) => {\n axis.render();\n }));\n });\n};\n\nexport const registerDomainChangeListener = (context) => {\n const store = context.store();\n store.registerChangeListener([`${STATE_NAMESPACES.UNIT_GLOBAL_NAMESPACE}.domain`], () => {\n context.resolver().encoder().unionUnitDomains(context);\n }, false, {\n namespace: 'group',\n key: 'unionDomain'\n });\n};\n\nexport const unsubscribeChangeListeners = (context) => {\n context.store().unsubscribe({\n namespace: 'group',\n key: 'unionDomain'\n });\n};\n","import { ROWS, COLUMNS, COLOR, SHAPE, SIZE, DETAIL, LAYERS, TRANSFORM, CONFIG } from '../enums/constants';\n\nexport const PROPS = {\n alias: {},\n data: {},\n cornerMatrices: {\n defaultValue: {\n topLeft: [],\n topRight: [],\n bottomLeft: [],\n bottomRight: []\n }\n },\n groupType: {},\n\n metaData: {\n defaultValue: {\n border: {}\n }\n },\n placeholderInfo: {\n defaultValue: {}\n },\n resolver: {},\n valueParser: {\n defaultValue: val => val\n },\n registry: {\n sanitization: (context, value) => {\n if (context.resolver) {\n context.resolver().registry(value.cellRegistry);\n }\n return value;\n }\n },\n selection: {},\n [CONFIG]: {},\n [ROWS]: {},\n [COLUMNS]: {},\n [COLOR]: {},\n [SHAPE]: {},\n [SIZE]: {},\n [DETAIL]: {},\n [LAYERS]: {},\n [TRANSFORM]: {}\n};\n","import { generateGetterSetters } from 'muze-utils';\nimport localOptions from './local-options';\nimport { SimpleGroup } from '../simple-group';\nimport {\n MatrixResolver,\n findInGroup\n} from '../group-helper';\nimport { createUnitState, initializeGlobalState, setMatrixInstances, createMatrices, createLayerState } from './helper';\nimport { setupChangeListeners } from './change-listener';\nimport { PROPS } from './props';\nimport {\n CONFIG,\n MOUNT,\n RETINAL,\n Y\n} from '../enums/constants';\n\n/**\n * VisualGroup is instantiated by canvas for creating {@link VisualUnit} and axes instances.It creates the\n * the matrix of visual units and axes. It also creates the layout instance which manages the allocation\n * of space of matrices.\n *\n * To get instance of visual group,\n * ```\n * const visualGroup = canvas.composition().visualGroup;\n * ```\n * @public\n *\n * @class VisualGroup\n */\nclass VisualGroup extends SimpleGroup {\n\n /**\n * Creates an instance of VisualGroup. Requires dependencies and other registry options for placeholders\n * and layers that create individual units.\n *\n * @param {Object} registry Key value pair of compostions for the group\n * @param {Object} dependencies Dependencies needed to run the group\n * @memberof VisualGroup\n */\n constructor (registry, dependencies) {\n super();\n\n const {\n componentSubRegistry\n } = registry;\n\n this._dependencies = dependencies;\n // Generate getter/setter methods for all properties of the class\n // One can get each property by calling the method and can set it\n // by passing paramaters for the same. Thus, one can chain setter\n // getter methods.\n generateGetterSetters(this, PROPS);\n generateGetterSetters(this, localOptions);\n // Populate the store with default values\n // initialize group compositions\n this._composition = {};\n // store reference to data\n this._data = [];\n // store reference to mountpoint\n this._mount = null;\n // selection object that takes care of updating of components\n this._selection = {};\n // Create instance of matrix resolver\n this.resolver(new MatrixResolver(this._dependencies));\n // matrix instance store each of the matrices\n setMatrixInstances(this, {});\n // Getting indiviual registered items\n this.registry({\n layerRegistry: componentSubRegistry.layerRegistry.get(),\n cellRegistry: componentSubRegistry.cellRegistry.get()\n });\n }\n\n static getState () {\n return [{\n domain: {\n x: {},\n y: {},\n radius: {}\n }\n }, {}];\n }\n\n store (...params) {\n if (params.length) {\n this._store = params[0];\n initializeGlobalState(this);\n createUnitState(this);\n createLayerState(this);\n // Register listeners\n setupChangeListeners(this);\n return this;\n }\n return this._store;\n }\n\n /**\n * Return the instances of matrices created by the visual group.\n *\n * @return {Object} Instance of matrices.\n */\n matrixInstance (...matrices) {\n if (matrices.length) {\n return this;\n }\n return this.composition().matrices;\n }\n\n /**\n * Returns the composition of visual group.\n *\n * @public\n *\n * @return {Object} Composition of visual group. It contains instance of matrices {@link ValueMatrix}\n * and instances of axis.\n * ```\n * {\n * matrices: {\n * value: // Instance of center value matrix.\n * left: // Instance of left value matrix\n * right: // Instance of right value matrix\n * bottom: // Instance of bottom value matrix\n * top: // Instance of top value matrix.\n * },\n * axes: {\n * x: // Array of x axis.\n * y: // Array of y axis\n * color: // Array of color axis\n * shape: // Array of shape axis\n * size: // Array of size axis.\n * }\n * }\n * ```\n */\n composition (...params) {\n if (params.length) {\n return this;\n }\n return this._composition;\n }\n\n /**\n * Locks the model to prevent change listeners to be triggered until unlocked\n *\n * @return {Object} Instance of class VisualGroup\n * @memberof VisualGroup\n */\n lockModel () {\n this.store().model.lock();\n return this;\n }\n\n /**\n * Unlocks the model so that all change listeners can be triggered\n *\n * @return {Object} Instance of class VisualGroup\n */\n unlockModel () {\n this.store().model.unlock();\n return this;\n }\n\n /**\n * Returns the channel name of the variable. Channels are rows, columns, color, shape and size.\n *\n * @public\n * @param {string} variable Name of the variable.\n *\n * @return {string} Name of the channel.\n */\n where (variable) {\n return findInGroup(variable, this.resolver().getAllFields());\n }\n\n /**\n * Gets the axis instances of the visual group based on the given axis type.\n *\n * @public\n * @param {string} type Type of axis. X,Y or retinal axes.\n *\n * @return {Array} Array of axis instances.\n */\n getAxes (type) {\n if (type === RETINAL) {\n return this.resolver().getRetinalAxes();\n }\n return this.resolver().getSimpleAxes(type);\n }\n\n /**\n * Returns the instances of cells based on the given type. Type can be given as `row' or `col`.\n *\n * @public\n * @return {Array} Two dimensional array of cells.\n */\n getCells (type) {\n return this.resolver()[`${type}Cells`]();\n }\n\n getFieldsFromChannel (channel) {\n const {\n rowProjections,\n colProjections\n } = this.resolver().getAllFields();\n return channel === Y ? rowProjections : colProjections;\n }\n\n getCellsByFacetKey (facetKey) {\n const resolver = this.resolver();\n const cells = resolver.rowCells()[facetKey] || resolver.colCells()[facetKey] || [];\n return cells;\n }\n\n getAxesByFacetKey (axisType, facetKey) {\n const resolver = this.resolver();\n const cells = resolver.rowCells()[facetKey] || resolver.colCells()[facetKey];\n const axes = cells[0].valueOf().axes()[axisType] || [];\n\n return axes;\n }\n\n /**\n * This method is used to return a serialized representation of the instance's properties.\n *\n * @return {Object} Object with config proprties.\n * @memberof VisualGroup\n */\n serialize () {\n const store = this.store();\n\n return {\n [CONFIG]: store.get(CONFIG),\n [MOUNT]: store.get(MOUNT)\n };\n }\n\n /**\n * Returns the grouped datamodel prepared by visual group. If there is no group by performed, then it returns the\n * original data model passed to visual group.\n *\n * @return {DataModel} Grouped data model.\n */\n getGroupByData () {\n return this._groupedDataModel;\n }\n\n createMatrices () {\n createMatrices(this);\n }\n}\n\nexport default VisualGroup;\n","import { PersistentBehaviour, SELECTION } from '@chartshq/muze-firebolt';\n\nexport default class SelectBehaviour extends PersistentBehaviour {\n static formalName () {\n return 'select';\n }\n\n setSelectionSet (addSet, selectionSet) {\n if (addSet === null) {\n selectionSet.reset();\n } else if (addSet.length) {\n // new add set\n const existingRemoveSet = addSet.filter(d => selectionSet._set[d] === SELECTION.SELECTION_OLD_EXIT\n || selectionSet._set[d] === SELECTION.SELECTION_NEW_EXIT);\n // existing add set\n if (existingRemoveSet.length) {\n selectionSet.updateEntry();\n selectionSet.add(existingRemoveSet);\n } else {\n selectionSet.updateExit();\n selectionSet.remove(addSet);\n }\n const { exitSet } = selectionSet.getSets();\n const mergedExitSet = [...new Set(exitSet[1]), ...new Set(exitSet[0])];\n const completeSetCount = selectionSet.getCompleteSet().length;\n if (exitSet[1].length !== completeSetCount && mergedExitSet.length === completeSetCount) {\n selectionSet.reset();\n }\n } else {\n selectionSet.remove(selectionSet.getCompleteSet());\n }\n return this;\n }\n}\n","import { BEHAVIOURS, ACTIONS } from '@chartshq/muze-firebolt';\n\nconst CLASSPREFIX = 'muze';\n\nexport const actionBehaviourMap = {\n [ACTIONS.DRAG]: {\n target: `.${CLASSPREFIX}-gradient-rect`,\n behaviours: [BEHAVIOURS.BRUSH]\n },\n [ACTIONS.HOVER]: {\n target: [`.${CLASSPREFIX}-legend-columns`],\n behaviours: [BEHAVIOURS.HIGHLIGHT]\n },\n [ACTIONS.CLICK]: {\n target: [`.${CLASSPREFIX}-legend-columns`],\n behaviours: [BEHAVIOURS.SELECT]\n }\n};\n\nexport const propagationBehaviourMap = {\n [BEHAVIOURS.SELECT]: BEHAVIOURS.FILTER,\n [BEHAVIOURS.BRUSH]: BEHAVIOURS.HIGHLIGHT\n};\n","import * as BEHAVIOURS from '../enums/behaviours';\nimport * as sideEffects from '../enums/side-effects';\n\nexport const behaviourEffectMap = {\n [BEHAVIOURS.BRUSH]: [sideEffects.SELECTIONBOX, {\n name: sideEffects.Highlighter,\n options: {\n strategy: 'fade'\n }\n }],\n [BEHAVIOURS.HIGHLIGHT]: [sideEffects.Highlighter],\n select: [{\n name: sideEffects.Highlighter,\n options: {\n strategy: 'fade'\n }\n }]\n};\n\nexport const propagationSideEffects = {\n [BEHAVIOURS.BRUSH]: [{\n name: sideEffects.Highlighter,\n options: {\n strategy: 'fade'\n }\n }],\n [BEHAVIOURS.HIGHLIGHT]: [{\n name: sideEffects.Highlighter,\n options: {\n strategy: 'fade'\n }\n }],\n [BEHAVIOURS.SELECT]: ['filter']\n};\n\n","export const BRUSH = 'brush';\nexport const HIGHLIGHT = 'highlight';\nexport const TOOLTIP = 'tooltip';\nexport const FILTER = 'filter';\nexport const SELECT = 'select';\n\n","export const SELECTIONBOX = 'selectionBox';\nexport const Highlighter = 'highlighter';\n\n","export const CLASSPREFIX = 'muze';\nexport const IDFIELD = '__id__';\nexport const CONFIG = 'config';\nexport const DATAMODEL = 'dataModel';\nexport const AXES = 'axes';\nexport const LAYERDEFS = 'layerDef';\nexport const WIDTH = 'width';\nexport const MAXWIDTH = 'max-width';\nexport const HEIGHT = 'height';\nexport const MOUNTPOINT = 'mountPoint';\nexport const GRIDLINEPARENTGROUPCLASS = 'grid-lines';\nexport const TRANSFORM = 'transform';\nexport const CONSOLIDATED = 'consolidated';\nexport const FRAGMENTED = 'fragmented';\nexport const DEFAULTCOLOR = '#F44336';\nexport const DEFAULTSIZE = 50;\nexport const DEFAULTSHAPE = 'circle';\nexport const STEP = 'step';\nexport const GRADIENT = 'gradient';\nexport const ORDINAL = 'ordinal';\nexport const SCALE_FUNCTIONS = {\n size: 'getSize',\n shape: 'getShape',\n color: 'getColor'\n};\nexport const TOP = 'top';\nexport const LEFT = 'left';\nexport const RIGHT = 'right';\nexport const BOTTOM = 'bottom';\nexport const HORIZONTAL = 'horizontal';\nexport const VERTICAL = 'vertical';\nexport const CENTER = 'center';\nexport const VALUE = 'value';\nexport const PATH = 'path';\nexport const SHAPE = 'shape';\nexport const ICON = 'icon';\nexport const RECT = 'rect';\nexport const START = 'start';\nexport const UPPER = 'upper';\nexport const LOWER = 'lower';\nexport const END = 'end';\nexport const SIZE = 'size';\nexport const DISCRETE = 'discrete';\nexport const MEASURE = 'measure';\n\n","import { assembleModelFromIdentifiers, getDataModelFromRange } from 'muze-utils';\nimport { propagationBehaviourMap } from './action-behaviour-map';\nimport { propagationSideEffects } from './behaviour-effect-map';\nimport { STEP, GRADIENT, DISCRETE, MEASURE } from '../enums/constants';\n\nexport const propagate = (firebolt, action, selectionSet, config = {}) => {\n let propagationData;\n const type = firebolt.context.constructor.type();\n const payload = config.payload;\n const data = firebolt.context.data();\n const metaData = firebolt.context.metaData();\n const fieldType = metaData.getData().schema[0].type;\n\n const propPayload = {};\n const sourceId = firebolt.context._id;\n propPayload.action = propagationBehaviourMap[action] || action;\n propPayload.sideEffects = propagationSideEffects[action];\n propPayload.sourceCanvas = firebolt.context.canvasAlias();\n const isMutableAction = firebolt._actions.behavioural[propPayload.action].constructor.mutates();\n if (payload.criteria === null) {\n propagationData = null;\n } else {\n const entrySet = selectionSet.mergedEnter;\n let values = data.filter(d => entrySet.uids.indexOf(d.id) !== -1).map(d => d.rawVal);\n if (type === STEP || (type === DISCRETE && fieldType === MEASURE)) {\n const field = Object.keys(payload.criteria || {})[0];\n values = data.filter(d => entrySet.uids.indexOf(d.id) !== -1).map(d => d.range);\n propagationData = values.length ? metaData.select((fields) => {\n let check = false;\n for (let i = 0; i < values.length; i++) {\n check = fields[field].value >= values[i][0] && fields[field].value <= values[i][1];\n if (check === true) {\n break;\n }\n }\n return check;\n }, {\n saveChild: false\n }) : null;\n } else if (type === GRADIENT) {\n propagationData = getDataModelFromRange(metaData, payload.criteria);\n } else if (values.length) {\n propagationData = assembleModelFromIdentifiers(metaData, [payload.criteria[0], ...values.map(d => [d])]);\n } else {\n propPayload.criteria = null;\n propagationData = metaData.select(() => true, {\n saveChild: false\n });\n }\n }\n\n let propagateInterpolatedValues = false;\n\n if (propagationData) {\n const schema = propagationData.getSchema();\n propagateInterpolatedValues = schema.every(d => d.type === MEASURE);\n }\n\n const propConfig = {\n sourceId: `legend-${sourceId}`,\n payload: propPayload,\n criteria: propPayload.criteria === null ? null : propagationData,\n isMutableAction,\n propagateInterpolatedValues,\n action: propPayload.action\n };\n\n metaData.propagate(propagationData, propConfig, true);\n};\n","import { Firebolt } from '@chartshq/muze-firebolt';\nimport { propagate } from './helper';\nimport { STEP, GRADIENT } from '../enums/constants';\n\n/**\n * This class manages the interactions of legend.\n * @export\n * @class LegendFireBolt\n * @extends {Firebolt}\n */\nexport class LegendFireBolt extends Firebolt {\n constructor (...params) {\n super(...params);\n this.initializeSideEffects();\n }\n\n getPropagationSelectionSet (selectionSet) {\n return selectionSet[0];\n }\n\n propagate (behaviourName, payload, selectionSet) {\n propagate(this, behaviourName, selectionSet, {\n payload\n });\n }\n\n getAddSetFromCriteria (criteria) {\n let values;\n let uniqueIds;\n const type = this.context.constructor.type();\n\n if (criteria === null) {\n uniqueIds = null;\n } else if (type === STEP) {\n values = Object.values(criteria);\n uniqueIds = this.context.data().filter(d => values.indexOf(d.range) !== -1).map(d => d.id);\n } else if (type === GRADIENT) {\n uniqueIds = [];\n } else {\n values = criteria[1];\n if (values) {\n uniqueIds = this.context.data().filter(d => values.indexOf(d.rawVal) !== -1).map(d => d.id);\n } else {\n values = Object.values(criteria);\n uniqueIds = this.context.data().filter(d => values.indexOf(d.range) !== -1).map(d => d.id);\n }\n }\n return {\n uids: uniqueIds,\n model: null\n };\n }\n\n getFullData () {\n return null;\n }\n}\n","import {\n getEvent,\n getD3Drag\n } from 'muze-utils';\n\n/**\n * Adds dragging action to the target element.\n * @param {firebolt} firebolt firebolt\n * @param {SVGElement} targetEl Element on which brushing action is needed.\n * @param {Array} behaviours Array of behaviours\n */\n/* istanbul ignore next */ const drag = firebolt => (targetEl, behaviours) => {\n let startPos = {};\n let endPos = {};\n let payload;\n const d3Drag = getD3Drag();\n const context = firebolt.context;\n const boundingBox = context.measurement().gradientDimensions;\n const axisType = context.config().align === 'horizontal' ? 'x' : 'y';\n const axisScale = context.axis().source().scale();\n const rangeShifter = axisScale.range()[axisType === 'x' ? 0 : 1];\n\n targetEl.call(d3Drag().on('start', () => {\n const event = getEvent();\n startPos = {\n x: event.x,\n y: event.y\n };\n }).on('drag', () => {\n const event = getEvent();\n\n endPos = {\n x: event.x,\n y: event.y\n };\n endPos.x = Math.max(0, Math.min(endPos.x, boundingBox.width));\n endPos.y = Math.max(0, Math.min(endPos.y, boundingBox.height));\n\n payload = {\n criteria: {\n [context.fieldName()]: [axisScale.invert(startPos[axisType] + rangeShifter * 2),\n axisScale.invert(endPos[axisType] + rangeShifter * 2)].sort((a, b) => a - b)\n }\n };\n behaviours.forEach(behaviour => firebolt.dispatchBehaviour(behaviour, payload));\n }).on('end', () => {\n const event = getEvent();\n\n endPos = {\n x: event.x,\n y: event.y\n };\n endPos.x = Math.max(0, Math.min(endPos.x, boundingBox.width));\n endPos.y = Math.max(0, Math.min(endPos.y, boundingBox.height));\n if (startPos[axisType] === endPos[axisType]) {\n payload = {\n criteria: {}\n };\n } else {\n payload = {\n criteria: {\n [context.fieldName()]: [axisScale.invert(startPos[axisType] + rangeShifter * 2),\n axisScale.invert(endPos[axisType] + rangeShifter * 2)].sort((a, b) => a - b)\n }\n };\n }\n behaviours.forEach(behaviour => firebolt.dispatchBehaviour(behaviour, payload));\n }));\n};\n\nexport default drag;\n","import { getEvent } from 'muze-utils';\n\n/**\n * Adds mouse interactions to target element.\n * @param {Firebolt} Firebolt instance of firebolt.\n * @param {SVGElement} targetEl Element on which the event listeners will be attached.\n * @param {Array} behaviours Array of behaviours\n */\n/* istanbul ignore next */ const hover = firebolt => (targetEl, behaviours) => {\n const dispatchBehaviour = function (args) {\n const event = getEvent();\n const payload = {\n criteria: firebolt.context.getCriteriaFromData(args)\n };\n behaviours.forEach(behaviour => firebolt.dispatchBehaviour(behaviour, payload));\n event.stopPropagation();\n };\n\n targetEl.on('mouseover', dispatchBehaviour)\n .on('mousemove', dispatchBehaviour)\n .on('mouseout', () => {\n const event = getEvent();\n behaviours.forEach(behaviour => firebolt.dispatchBehaviour(behaviour, {\n criteria: null\n }));\n event.stopPropagation();\n });\n};\n\nexport default hover;\n","/**\n * Adds mouse interactions to target element.\n * @param {VisualUnit} instance instance of visual unit.\n * @param {SVGElement} targetEl Element on which the event listeners will be attached.\n * @param {Array} behaviours Array of behaviours\n */\nconst click = firebolt => (targetEl, behaviours) => {\n const dispatchBehaviour = function (args) {\n const payload = {\n criteria: firebolt.context.getCriteriaFromData(args)\n };\n behaviours.forEach(behaviour => firebolt.dispatchBehaviour(behaviour, payload));\n };\n\n targetEl.on('click', dispatchBehaviour);\n};\n\nexport default click;\n","import drag from './drag';\nimport hover from './hover';\nimport click from './click';\nimport * as ACTIONNAMES from '../../enums/actions';\n\nexport const physicalActions = {\n [ACTIONNAMES.DRAG]: drag,\n [ACTIONNAMES.HOVER]: hover,\n [ACTIONNAMES.CLICK]: click\n};\n\n","export const DRAG = 'drag';\nexport const HOVER = 'hover';\nexport const SELECTIONDRAG = 'selectiondrag';\nexport const CLICK = 'click';\n","import {\n getMousePos,\n getEvent,\n getD3Drag\n } from 'muze-utils';\nimport { HEIGHT, WIDTH, HORIZONTAL } from '../../enums/constants';\n\nconst getSelectionCriteria = (subject, axis, measures) => {\n let criteria = [];\n const {\n axisScale,\n axisType\n } = axis;\n const {\n startPos,\n endPos,\n selectionBoxMeasure,\n drawingInfMeasure,\n offset\n } = measures;\n const subjectStartPoint = subject[axisType];\n\n if (startPos[axisType] === endPos[axisType]) {\n criteria = [];\n } else if (subjectStartPoint + selectionBoxMeasure >= drawingInfMeasure + offset) {\n criteria = [axisScale.invert(drawingInfMeasure + offset - selectionBoxMeasure),\n axisScale.invert(drawingInfMeasure + offset)];\n } else if (subjectStartPoint - offset < offset) {\n criteria = [axisScale.invert(offset * 2), axisScale.invert(selectionBoxMeasure + offset * 2)];\n } else {\n criteria = [axisScale.invert(subjectStartPoint), axisScale.invert(subjectStartPoint + selectionBoxMeasure)];\n }\n axisType === 'x' ? criteria : criteria.reverse();\n return criteria;\n};\n\nexport const selectionBoxDrag = firebolt => (targetEl, behaviours) => {\n let startPos = {};\n let payload;\n const endPos = {};\n const d3Drag = getD3Drag();\n const context = firebolt.context;\n const axisScale = context.axis().source().scale();\n const axisType = context.config().align === HORIZONTAL ? 'x' : 'y';\n const drawingInfMeasure = context.measurement().gradientDimensions[axisType === 'x' ?\n WIDTH : HEIGHT];\n const offset = axisScale.range()[axisType === 'x' ? 0 : 1];\n const measures = {\n drawingInfMeasure,\n offset\n };\n let subject = {};\n\n targetEl.call(d3Drag().on('start', function () {\n const event = getEvent();\n startPos = getMousePos(this, event.sourceEvent);\n subject = event.subject;\n }).on('drag', () => {\n const event = getEvent();\n const selectionBoxMeasure = subject[axisType === 'x' ? WIDTH : HEIGHT];\n\n subject.x += event.dx;\n subject.y += event.dy;\n\n measures.selectionBoxMeasure = selectionBoxMeasure;\n measures.startPos = startPos;\n measures.endPos = endPos;\n const criteria = getSelectionCriteria(subject, { axisScale, axisType }, measures);\n\n payload = {\n criteria: {\n [context.fieldName()]: criteria\n },\n fadeOut: true\n };\n firebolt.dispatchBehaviour(behaviours[0], payload);\n }).on('end', () => {\n const event = getEvent();\n const selectionBoxMeasure = subject[axisType === 'x' ? WIDTH : HEIGHT];\n measures.selectionBoxMeasure = selectionBoxMeasure;\n measures.startPos = startPos;\n measures.endPos = endPos;\n const criteria = getSelectionCriteria(event, { axisScale, axisType }, measures);\n payload = {\n criteria: {\n [context.fieldName()]: criteria\n },\n fadeOut: true,\n config: {\n transition: {\n duration: 200\n }\n }\n };\n firebolt.dispatchBehaviour(behaviours[0], payload);\n }));\n};\n\n","import { makeElement } from 'muze-utils';\nimport { SpawnableSideEffect } from '@chartshq/muze-firebolt';\nimport { CLASSPREFIX, HEIGHT, WIDTH, HORIZONTAL, RECT } from '../../../enums/constants';\nimport { SELECTIONBOX } from '../../../enums/side-effects';\nimport { selectionBoxDrag } from '../../physical/selection-box-drag';\nimport './styles.scss';\n\n/**\n * This class is used to create a selection box which is used by visual unit for brushing and\n * selection in the canvas.\n * @class SelectionBox\n */\n/* istanbul ignore next */ class SelectionBox extends SpawnableSideEffect {\n static formalName () {\n return SELECTIONBOX;\n }\n\n /**\n * It returns the default configuration needed by selectionbox.\n * @return {Object} Default configuration of the selection box.\n */\n static defaultConfig () {\n return {\n className: 'legend-selection-box',\n classPrefix: CLASSPREFIX\n };\n }\n\n /**\n * Draws the selectionbox with the specified dimensions.\n */\n /* istanbul ignore next */ apply (selectionSet, payload) {\n let x;\n let y;\n let width;\n let height;\n const firebolt = this.firebolt;\n const context = firebolt.context;\n const config = this.config();\n const axis = context.axis().source();\n const className = `${config.classPrefix}-${config.className}`;\n\n const domain = payload.criteria[firebolt.context.fieldName()];\n const axisScale = axis.scale();\n const range = domain ? [axis.getScaleValue(domain[0]), axis.getScaleValue(domain[1])] : [];\n\n const axisType = context.config().align === HORIZONTAL ? 'x' : 'y';\n\n const gradientDimension = firebolt.context.measurement().gradientDimensions[axisType === 'x' ?\n HEIGHT : WIDTH];\n\n const rangeShifter = axisScale.range()[axisType === 'x' ? 0 : 1];\n const legendGradContainer = context.getDrawingContext().svgContainer;\n const legendSelGroup = makeElement(legendGradContainer, 'g', [1], `${config.classPrefix}-selection-box-group`);\n\n if (firebolt.context.config().align === HORIZONTAL) {\n x = range[0] - rangeShifter || 0;\n y = 0;\n width = range[1] - range[0] || 0;\n height = gradientDimension;\n } else {\n x = 0;\n y = range[1] - rangeShifter || 0;\n height = range[0] - range[1] || 0;\n width = gradientDimension;\n }\n const enterFn = function (el) {\n selectionBoxDrag(firebolt)(el, ['brush']);\n };\n const selBox = makeElement(legendSelGroup, RECT, [{ domain, x, y, width, height }], className,\n { enter: enterFn });\n selBox.attr('y', y)\n .attr('x', x)\n .attr(WIDTH, width)\n .attr(HEIGHT, height);\n }\n}\n\nexport default SelectionBox;\n\n","import { selectElement } from 'muze-utils';\n\nexport const strategies = (firebolt) => {\n const context = firebolt.context;\n const classed = (set, className, change) => {\n const classPrefix = context.config().classPrefix;\n selectElement(context.mount())\n .selectAll(`.${classPrefix}-legend-columns`)\n .filter(d => set.uids.indexOf(d.id) !== -1)\n .selectAll('div')\n .classed(className, change);\n };\n\n return {\n fade: (set, config = {}) => {\n const classPrefix = context.config().classPrefix;\n if (!set.mergedEnter.length && !set.mergedExit.length) {\n classed(set.completeSet, config.className || `${classPrefix}-legend-fadeout`, false);\n } else {\n classed(set.mergedExit, config.className || `${classPrefix}-legend-brighten`, false);\n classed(set.mergedExit, config.className || `${classPrefix}-legend-fadeout`, true);\n classed(set.mergedEnter, config.className || `${classPrefix}-legend-fadeout`, false);\n }\n },\n brighten: (set, config = {}) => {\n const classPrefix = context.config().classPrefix;\n if (!set.mergedEnter.length && !set.mergedExit.length) {\n classed(set.completeSet, config.className || `${classPrefix}-legend-brighten`, false);\n } else {\n classed(set.mergedEnter, config.className || `${classPrefix}-legend-brighten`, true);\n classed(set.mergedExit, config.className || `${classPrefix}-legend-brighten`, false);\n }\n }\n };\n};\n","import { GenericSideEffect } from '@chartshq/muze-firebolt';\nimport { strategies } from './strategies';\nimport { Highlighter } from '../../../enums/side-effects';\n\nexport default class LegendHighlighter extends GenericSideEffect {\n constructor (...params) {\n super(...params);\n this._strategies = strategies(this.firebolt);\n this._strategy = 'brighten';\n }\n\n static formalName () {\n return Highlighter;\n }\n\n apply (selectionSet, payload, options = {}) {\n const strategy = this._strategies[options.strategy || this._strategy];\n\n strategy(selectionSet, this);\n }\n}\n","import { mergeRecursive } from 'muze-utils';\n\nexport const PROPS = {\n config: {\n sanitization: (context, value) => mergeRecursive(context._config || {}, value)\n },\n data: {},\n fieldName: {},\n legendContainer: {},\n measurement: {\n sanitization: (context, value) => {\n const measurement = mergeRecursive(context._measurement, value);\n ['padding', 'border', 'margin'].forEach((space) => {\n measurement[space] = Math.min(measurement[space] > 0 ? measurement[space] : 0,\n measurement.maxWidth * 0.1, measurement.maxHeight * 0.1);\n });\n return measurement;\n }\n },\n logicalSpace: {},\n metaData: {},\n range: {\n sanitization: (context, value) => {\n context.scale().range(value);\n context.resetLogicalSpace();\n context.store().commit('range', value);\n return value;\n }\n },\n scale: {},\n smartTicks: {},\n store: {},\n title: {\n sanitization: (context, value) => mergeRecursive(context._title || {}, value)\n },\n valueParser: {\n defaultValue: val => val\n }\n};\n","import { getSymbol } from 'muze-utils';\nimport {\n CENTER,\n LEFT,\n RIGHT\n} from '../enums/constants';\n\nexport const ALIGN = {\n HORIZONTAL: 'horizontal',\n VERTICAL: 'vertical'\n};\n\nexport const DEFAULT_MEASUREMENT = {\n height: 30,\n width: 30,\n maxWidth: Infinity,\n maxHeight: Infinity,\n padding: 2,\n margin: 2,\n border: 1\n};\n\nexport const LEGEND_TITLE = {\n text: '',\n orientation: (pos) => {\n if (pos === LEFT || pos === RIGHT) {\n return LEFT;\n } return CENTER;\n }\n};\n\nexport const DEFAULT_CONFIG = {\n classPrefix: 'muze',\n borderStyle: 'solid',\n borderColor: 'rgba(0,0,0,0)',\n formatter: {\n bounds: {\n lower: 'less than',\n upper: 'more than'\n }\n },\n item: {\n text: {\n orientation: 'right',\n width: 10,\n formatter: (val, i, data, context) => context.valueParser()(val)\n },\n icon: {\n className: 'legend-icon',\n height: 20,\n width: 20,\n color: 'rgba(0,0,0,.5)',\n type: 'square'\n }\n }\n};\n\n/**\n * Creates a map of pre defined icons\n *\n * @param {string} icon Accepts a icon name like 'square', 'cross', 'diamond' etc\n * @return {Object} icon object which can be used to draw the icons\n */\nexport const ICON_MAP = (icon) => {\n if (icon && typeof (icon) === 'string') {\n return getSymbol(icon);\n } return icon;\n};\n","import { makeElement, numberInterpolator } from 'muze-utils';\n\nimport {\n SCALE_FUNCTIONS,\n WIDTH,\n HEIGHT,\n LEFT,\n RIGHT,\n TOP,\n BOTTOM,\n MAXWIDTH\n} from '../enums/constants';\n\n/**\n *\n *\n * @param {*} scale\n *\n */\nexport const getScaleInfo = (scale) => {\n const scaleType = scale.constructor.type();\n const domain = scale.uniqueValues();\n const steps = scale.config().stops || 1;\n const scaleFn = SCALE_FUNCTIONS[scaleType];\n\n return { scaleType, domain, steps, scaleFn };\n};\n\n/**\n *\n *\n * @param {*} domain\n * @param {*} steps\n *\n */\nexport const getInterpolatedData = (domain, steps) => {\n const domainForLegend = [];\n const interpolatedFn = numberInterpolator()(domain[0], domain[1]);\n\n for (let i = 0; i <= steps; i++) {\n domainForLegend[i] = interpolatedFn(i / steps);\n }\n return domainForLegend;\n};\n\n/**\n *\n *\n * @param {*} container\n * @param {*} text\n * @param {*} measurement\n * @param {*} classPrefix\n */\nexport const titleCreator = (container, title, measurement, config) => {\n const titleWidth = Math.min(measurement.maxWidth, measurement.width);\n\n const titleContainer = makeElement(container, 'table', [1], `${config.classPrefix}-legend-title`)\n .style(WIDTH, `${titleWidth}px`)\n .style(HEIGHT, `${measurement.height}px`)\n .style('border-bottom', `${measurement.border}px ${config.borderStyle} ${config.borderColor}`)\n .style('text-align', title.orientation instanceof Function ?\n title.orientation(config.position) : title.orientation);\n return makeElement(titleContainer, 'td', [1], `${config.classPrefix}-legend-title-text`)\n .style(WIDTH, `${titleWidth}px`)\n .style(MAXWIDTH, `${titleWidth}px`)\n .style(HEIGHT, '100%')\n .style('line-height', 1)\n .style('padding', `${measurement.padding}px`)\n .text(title.text)\n .style('overflow-x', 'scroll')\n .node();\n};\n\n/**\n *\n *\n * @param {*} data\n * @param {*} prop\n * @param {*} labelManager\n *\n */\nexport const getMaxMeasures = (data, prop, labelManager) => {\n let maxHeight = -Infinity;\n let maxWidth = -Infinity;\n\n data.forEach((item) => {\n const value = prop ? item[prop] : item;\n const space = labelManager.getOriSize(value);\n maxHeight = Math.max(space.height + 2, maxHeight);\n maxWidth = Math.max(space.width + 2, maxWidth);\n });\n\n return { height: maxHeight, width: maxWidth };\n};\n\n/**\n *\n *\n * @param {*} data\n * @param {*} prop\n * @param {*} labelManager\n *\n */\nexport const getItemMeasures = (context, prop, formatter) => {\n const space = [];\n const data = context.data();\n const labelManager = context._labelManager;\n\n data.forEach((item, index) => {\n const value = prop ? item[prop] : item;\n const { height, width } = labelManager.getOriSize(formatter(value, index, data, context));\n space[index] = { height: height + 1, width: width + 1 };\n });\n return space;\n};\n\n/**\n *\n *\n * @param {*} textOrientation\n * @param {*} effPadding\n * @param {*} titleSpace\n *\n * @memberof Legend\n */\nexport const computeItemSpaces = (config, measures, data) => {\n let totalHeight = 0;\n let totalWidth = 0;\n let maxItemSpaces = {\n width: 0, height: 0\n };\n const {\n effPadding,\n titleWidth,\n labelSpaces,\n titleHeight,\n maxWidth\n } = measures;\n const {\n item,\n align\n } = config;\n const {\n icon,\n text\n } = item;\n const textOrientation = text.orientation;\n const itemSpaces = [];\n const iconSpaces = [];\n let maxIconWidth = 0;\n labelSpaces.forEach((labelSpace, i) => {\n const itemSpace = { width: 0, height: 0 };\n const iconSpace = { width: 0, height: 0 };\n const datum = data[i] || {};\n // Compute each legend item height/width\n if (textOrientation === LEFT || textOrientation === RIGHT) {\n // Get label, icon and item widths\n labelSpace.width += effPadding;\n iconSpace.width = (datum.size ? 2 * Math.sqrt(datum.size / Math.PI) : icon.width) + effPadding;\n maxIconWidth = Math.max(iconSpace.width, maxIconWidth);\n itemSpace.width = labelSpace.width + maxIconWidth;\n\n // Get label, icon and item heights\n labelSpace.height = Math.max(labelSpace.height, icon.height) + effPadding;\n iconSpace.height = labelSpace.height;\n itemSpace.height = labelSpace.height;\n } else {\n // Get label, icon and item widths\n labelSpace.width = Math.max(labelSpace.width, datum.size ? 2 * Math.sqrt(datum.size / Math.PI)\n : icon.width) + effPadding;\n iconSpace.width = labelSpace.width;\n itemSpace.width = labelSpace.width;\n maxIconWidth = Math.max(iconSpace.width, maxIconWidth);\n\n // Get label, icon and item heights\n labelSpace.height += effPadding;\n iconSpace.height = icon.height + effPadding;\n itemSpace.height = labelSpace.height + iconSpace.height;\n }\n // Compute height and width of legend for each alignment\n if (align === 'horizontal') {\n totalHeight = Math.max(totalHeight, itemSpace.height);\n } else {\n totalHeight += itemSpace.height;\n totalWidth = Math.max(totalWidth, itemSpace.width, titleWidth);\n }\n maxItemSpaces = {\n width: Math.max(itemSpace.width, maxItemSpaces.width),\n height: Math.max(itemSpace.height, maxItemSpaces.height)\n };\n itemSpaces.push(itemSpace);\n iconSpaces.push(iconSpace);\n });\n itemSpaces.forEach((itemSpace, i) => {\n if (align === 'horizontal') {\n itemSpace.height = totalHeight;\n iconSpaces[i].width = maxIconWidth;\n if (textOrientation === LEFT || textOrientation === RIGHT) {\n labelSpaces[i].height = totalHeight;\n iconSpaces[i].height = totalHeight;\n itemSpaces[i].width = labelSpaces[i].width + maxIconWidth;\n } else {\n labelSpaces[i].width = maxIconWidth;\n itemSpaces[i].width = maxIconWidth;\n labelSpaces[i].width = maxIconWidth;\n }\n totalWidth = Math.max(totalWidth + itemSpaces[i].width);\n } else {\n itemSpace.width = Math.max(totalWidth, maxWidth);\n if (textOrientation === TOP || textOrientation === BOTTOM) {\n labelSpaces[i].width = totalWidth;\n iconSpaces[i].width = totalWidth;\n maxIconWidth = totalWidth;\n } else {\n const labelWidth = labelSpaces[i].width;\n const newLabelWidth = (maxItemSpaces.width - maxIconWidth);\n iconSpaces[i].width = maxIconWidth;\n itemSpaces[i].width = labelSpaces[i].width + maxIconWidth;\n labelSpaces[i].width = Math.max(labelWidth, newLabelWidth);\n totalWidth = Math.max(totalWidth, itemSpace.width);\n }\n }\n });\n totalWidth = Math.ceil(Math.max(totalWidth, titleWidth)) + effPadding;\n totalHeight += titleHeight + effPadding;\n totalHeight = Math.ceil(totalHeight);\n return { totalHeight, totalWidth, itemSpaces, iconSpaces, maxItemSpaces, maxIconWidth };\n};\n\n/**\n *\n *\n * @param {*} type\n * @param {*} scaleInfo\n * @param {*} domainInfo\n *\n */\nexport const getDomainBounds = (type, scaleInfo, domainInfo) => {\n const {\n scaleFn,\n scaleType,\n scale\n } = scaleInfo;\n const {\n domain,\n domainBounds,\n domainLeg,\n steps\n } = domainInfo;\n const ele = domain[type === 'lower' ? 0 : domain.length - 1];\n const step = steps[type === 'lower' ? 0 : steps.length - 1];\n\n return {\n [scaleType]: scaleType === 'size' ? scale[scaleFn](ele) * scale.getScaleFactor() : scale[scaleFn](ele),\n value: domainBounds[type],\n id: type === 'lower' ? 0 : domainLeg.length + 2,\n range: [ele, step]\n };\n};\n","import {\n makeElement,\n selectElement,\n getUniqueId,\n getSmartComputedStyle,\n generateGetterSetters,\n mergeRecursive\n} from 'muze-utils';\nimport { behaviouralActions } from '@chartshq/muze-firebolt';\nimport * as legendBehaviours from '../firebolt/behavioural';\n\nimport { LegendFireBolt } from '../firebolt/legend-firebolt';\nimport { actionBehaviourMap } from '../firebolt/action-behaviour-map';\nimport { physicalActions } from '../firebolt/physical';\nimport * as sideEffects from '../firebolt/side-effects';\nimport { behaviourEffectMap } from '../firebolt/behaviour-effect-map';\nimport { VALUE, PATH, RIGHT, LEFT, TOP, BOTTOM } from '../enums/constants';\nimport { PROPS } from './props';\nimport { DEFAULT_MEASUREMENT, DEFAULT_CONFIG, LEGEND_TITLE } from './defaults';\nimport { getItemMeasures, titleCreator, computeItemSpaces } from './legend-helper';\n\n/**\n * Creates a Legend from the axes of a canvas\n *\n * @param {Object} dependencies : legend data\n * @class SimpleLegend\n */\nexport default class SimpleLegend {\n\n /**\n * Creates an instance of Legend.\n * @param {Object} dependencies Set of dependencies required by the legend\n * @memberof Legend\n */\n constructor (dependencies) {\n this._data = [];\n this._metaData = [];\n this._mount = null;\n this._fieldName = null;\n this._title = Object.assign({}, LEGEND_TITLE);\n this._metaData = null;\n this._labelManager = dependencies.labelManager;\n this._cells = dependencies.cells;\n this._id = getUniqueId();\n this._measurement = Object.assign({}, this.constructor.defaultMeasurement());\n this._config = mergeRecursive({}, this.constructor.defaultConfig());\n\n generateGetterSetters(this, PROPS);\n this._computedStyle = getSmartComputedStyle(selectElement('body'),\n `${this.config().classPrefix}-legend-item-info`);\n\n this._firebolt = new LegendFireBolt(this, {\n behavioural: Object.assign({}, behaviouralActions, legendBehaviours),\n physical: physicalActions,\n physicalBehaviouralMap: actionBehaviourMap\n }, sideEffects, behaviourEffectMap);\n }\n\n id () {\n return this._id;\n }\n /**\n * Initializes an instance of the class\n *\n * @static\n * @param {Object} dependencies Set of dependencies required by the legend\n * @return {Instance} returns a new instance of Legend\n * @memberof Legend\n */\n static create (dependencies) {\n return new SimpleLegend(dependencies);\n }\n\n /**\n *\n *\n * @static\n *\n * @memberof SimpleLegend\n */\n static defaultConfig () {\n return DEFAULT_CONFIG;\n }\n\n /**\n *\n *\n * @static\n *\n * @memberof SimpleLegend\n */\n static defaultMeasurement () {\n return DEFAULT_MEASUREMENT;\n }\n\n /**\n *\n *\n * @readonly\n * @memberof SimpleLegend\n */\n firebolt (...params) {\n if (params.length) {\n return this;\n }\n return this._firebolt;\n }\n\n /**\n *\n *\n *\n * @memberof Legend\n */\n elemType () {\n return PATH;\n }\n\n canvasAlias (...alias) {\n if (alias.length) {\n this._canvasAlias = alias[0];\n return this;\n }\n return this._canvasAlias;\n }\n\n /**\n *\n *\n *\n * @memberof Legend\n */\n mount (...params) {\n if (params.length) {\n this._mount = params[0];\n this.render();\n return this;\n }\n return this._mount;\n }\n\n /**\n *\n *\n * @param {*} effPadding\n * @param {*} align\n *\n * @memberof Legend\n */\n getLabelSpaces () {\n const {\n item,\n classPrefix\n } = this.config();\n this._labelManager.setStyle(getSmartComputedStyle(selectElement('body'),\n `${classPrefix}-legend-item-info`));\n return getItemMeasures(this, VALUE, item.text.formatter);\n }\n\n /**\n * Sets the height and width of a legend based on provided max\n * height and width and based on its contents\n *\n * @return {Instance} Current instance\n * @memberof Legend\n */\n setLegendMeasures () {\n const {\n width,\n height,\n maxWidth,\n maxHeight,\n padding,\n margin,\n border\n } = this.measurement();\n const {\n align\n } = this.config();\n\n // Effective padding, margin and padding\n const effPadding = padding * 2;\n const effBorder = border * 2;\n const effMargin = margin * 2;\n\n this.data(this.dataFromScale(this.scale()));\n // Get space occupied by title\n const titleSpace = this.getTitleSpace();\n const titleHeight = titleSpace.height > 0 ? titleSpace.height + effPadding : 0;\n const titleWidth = titleSpace.width + effPadding;\n\n // Get space occupied by labels\n const labelSpaces = this.getLabelSpaces(effPadding, align);\n const {\n totalHeight, totalWidth, itemSpaces, iconSpaces, maxItemSpaces, maxIconWidth\n } = computeItemSpaces(this.config(),\n { effPadding, titleWidth, labelSpaces, titleHeight, maxWidth, maxHeight }, this.data());\n\n this.measurement({\n width: Math.max(totalWidth, width) + effMargin + effBorder,\n height: Math.max(totalHeight, height) + effMargin + effBorder,\n labelSpaces,\n iconSpaces,\n itemSpaces,\n maxItemSpaces,\n maxIconWidth,\n titleSpaces: {\n width: Math.min(maxWidth, this.measurement().width) - effMargin - effBorder,\n height: titleHeight\n }\n });\n return this;\n }\n\n /**\n * Returns the space occupied by the legend title\n *\n * @return {Object} Space occupied by title\n * @memberof Legend\n */\n getTitleSpace () {\n this._labelManager.setStyle(getSmartComputedStyle(selectElement('body'),\n `${this.config().classPrefix}-legend-title`));\n return this._labelManager.getOriSize(this.title().text ? this.title().text : '');\n }\n\n /**\n * Creates the title for the legend\n *\n * @param {DOM} container Container made for the title\n * @return {Selection} Title and it's node\n * @memberof Legend\n */\n renderTitle (container) {\n const { titleSpaces, border, padding, width, maxWidth } = this.measurement();\n const { borderStyle, borderColor } = this.config();\n return titleCreator(container, this.title(), {\n height: titleSpaces.height,\n width,\n maxWidth,\n border,\n padding,\n borderStyle,\n borderColor\n }, this.config());\n }\n\n /**\n * Render the legend with its title\n *\n * @param {DOM} mountPoint Point where the legend and title are to be appended\n * @return {Instance} Current instance of legend\n * @memberof Legend\n */\n render () {\n const firebolt = this.firebolt();\n const {\n classPrefix,\n borderStyle,\n borderColor,\n position\n } = this.config();\n const {\n maxWidth,\n maxHeight,\n width,\n height,\n margin,\n border\n } = this.measurement();\n const legendContainer = makeElement(selectElement(this.mount()), 'div', [1], `${classPrefix}-legend-box`);\n let marginPosition;\n switch (position) {\n case TOP:\n marginPosition = `margin-${BOTTOM}`;\n break;\n case LEFT:\n marginPosition = `margin-${RIGHT}`;\n break;\n case BOTTOM:\n marginPosition = `margin-${TOP}`;\n break;\n default:\n marginPosition = `margin-${LEFT}`;\n }\n legendContainer.classed(`${classPrefix}-legend-box-${this._id}`, true);\n legendContainer.style('float', 'left');\n // set height and width\n legendContainer.style('width', `${Math.min(maxWidth, width) - margin * 2}px`)\n .style('height', `${Math.min(maxHeight, height) - margin * 2}px`)\n .style(`${marginPosition}`, `${margin}px`)\n .style('border', `${border}px ${borderStyle} ${borderColor}`);\n this.legendContainer(legendContainer.node());\n\n // create title\n this.renderTitle(legendContainer);\n firebolt.createSelectionSet(this.data().map(d => d.id));\n return legendContainer;\n }\n /**\n *\n *\n * @param {*} data\n *\n * @memberof StepLegend\n */\n getCriteriaFromData (data) {\n const fieldName = this.fieldName();\n const type = this.metaData().getData().schema[0].type;\n if (type === 'measure') {\n return {\n [fieldName]: data.range\n };\n }\n return [[fieldName], [data.rawVal]];\n }\n}\n","import {\n LEFT,\n RIGHT,\n START,\n END,\n TOP,\n BOTTOM,\n HORIZONTAL,\n VERTICAL,\n CENTER,\n SHAPE,\n VALUE\n} from '../enums/constants';\n\nconst legendOrientation = {\n [HORIZONTAL]: {\n datasets: data => ({\n row: [1],\n column: data\n }),\n itemContainerMeasures: (measurement) => {\n const {\n itemSpaces,\n width\n } = measurement;\n return {\n row: {\n width: `${width}px`,\n padding: `${0}px`\n },\n column: {\n width: (d, i) => `${itemSpaces[i].width}px`,\n padding: `${0}px`\n }\n };\n },\n getStepSpacesInfo: (measurement) => {\n const { maxItemSpaces, height } = measurement;\n return {\n iconHeight: height,\n iconWidth: maxItemSpaces.width,\n stepPadding: {\n horizontal: true,\n vertical: false\n }\n };\n }\n },\n [VERTICAL]: {\n datasets: data => ({\n row: data,\n column: d => [d]\n }),\n itemContainerMeasures: (measurement, config) => {\n const {\n width\n } = measurement;\n const { padding } = config;\n\n return {\n row: {\n width: `${width}px`,\n padding: `${padding}px`\n },\n column: {\n width: `${width}px`,\n padding: `${0}px`\n }\n };\n },\n getStepSpacesInfo: (measurement) => {\n const { maxItemSpaces, width } = measurement;\n return {\n iconHeight: maxItemSpaces.height,\n iconWidth: width,\n stepPadding: {\n horizontal: false,\n vertical: true\n }\n };\n }\n }\n};\n\nexport const positionConfig = {\n [LEFT]: legendOrientation[VERTICAL],\n [RIGHT]: legendOrientation[VERTICAL],\n [TOP]: legendOrientation[HORIZONTAL],\n [BOTTOM]: legendOrientation[HORIZONTAL]\n};\n\nexport const alignmentMap = {\n [LEFT]: END,\n [RIGHT]: START,\n [TOP]: CENTER,\n [BOTTOM]: CENTER\n};\n\n// Reverses data for step legend\nexport const stepData = data => ({\n [LEFT]: data.reverse(),\n [RIGHT]: data.reverse(),\n [TOP]: data,\n [BOTTOM]: data\n});\n\n// Changes the item layout based on the position of the text\nexport const itemStack = {\n [LEFT]: [VALUE, SHAPE],\n [RIGHT]: [SHAPE, VALUE],\n [TOP]: [VALUE, SHAPE],\n [BOTTOM]: [SHAPE, VALUE]\n};\n","import { makeElement, selectElement, applyStyle } from 'muze-utils';\nimport { ICON_MAP } from './defaults';\nimport { positionConfig, alignmentMap, itemStack } from './position-config';\nimport {\n WIDTH,\n HEIGHT,\n CENTER,\n VALUE,\n RECT,\n LEFT,\n RIGHT\n} from '../enums/constants';\n\n/**\n *\n *\n * @param {*} container\n * @param {*} data\n * @param {*} legendInstance\n * @param {*} align\n *\n */\nexport const getItemContainers = (container, data, legendInstance) => {\n const measurement = legendInstance.measurement();\n const config = legendInstance.config();\n const {\n itemSpaces\n } = measurement;\n const {\n classPrefix,\n position\n } = config;\n const positionObj = positionConfig[position];\n const datasets = positionObj.datasets(data);\n const measures = positionObj.itemContainerMeasures(measurement, config);\n\n const rows = makeElement(container, 'div', datasets.row, `${classPrefix}-legend-row`);\n rows.style(HEIGHT, (d, i) => `${itemSpaces[i].height}px`);\n rows.style(WIDTH, measures.row.width);\n rows.style('padding', measures.row.padding);\n\n const columns = makeElement(rows, 'div', datasets.column, `${classPrefix}-legend-columns`);\n columns.style(WIDTH, measures.column.width);\n columns.style('padding', measures.column.padding);\n\n return columns;\n};\n\n/**\n *\n *\n * @param {*} container\n * @param {*} classPrefix\n * @param {*} data\n *\n * @memberof DiscreteLegend\n */\nexport const createLegendSkeleton = (context, container, classPrefix, data) => {\n let gradWidth = 0;\n let gradHeight = 0;\n let maxGradHeight = 0;\n let maxGradWidth = 0;\n const measurement = context.measurement();\n const {\n margin,\n border,\n titleSpaces,\n width,\n height,\n maxWidth,\n maxHeight\n } = measurement;\n\n gradHeight = height - (titleSpaces.height + 2 * margin + 2 * border);\n gradWidth = width - (margin * 2 + border * 2);\n\n maxGradHeight = maxHeight - (titleSpaces.height + margin * 2 + border * 2);\n maxGradWidth = maxWidth - (margin * 2 + border * 2);\n\n let legendBody = makeElement(container, 'div', [1], `${classPrefix}-legend-body`);\n legendBody.select(`.${classPrefix}-legend-overflow`).remove();\n // Create a div with scroll when overflow\n if (maxGradWidth && maxGradWidth < gradWidth) {\n legendBody = legendBody.style(WIDTH, `${maxGradWidth}px`).style('overflow-x', 'scroll');\n }\n // Create a div with scroll when overflow\n if (maxGradHeight && maxGradHeight < gradHeight) {\n legendBody.style(HEIGHT, `${maxGradHeight}px`).style('overflow-y', 'scroll');\n }\n\n legendBody = makeElement(legendBody, 'div', [1], `${classPrefix}-legend-overflow`);\n\n legendBody.style(WIDTH, `${gradWidth}px`);\n legendBody.style(HEIGHT, `${gradHeight}px`);\n\n const legendItem = getItemContainers(legendBody, data, context);\n return { legendItem };\n};\n\n/**\n * Creates legend item based on alignment and text orientation\n *\n * @param {Selection} container Point where items are to be mounted\n * @return {Instance} Current instance\n * @memberof Legend\n */\nexport const createItemSkeleton = (context, container) => {\n const {\n classPrefix,\n item\n } = context.config();\n const textOrientation = item.text.orientation;\n\n const stack = itemStack[textOrientation];\n const itemSkeleton = makeElement(container, 'div', (d, i) => stack.map(e => [e, d[e], d.color, d.size,\n d.value, context.fieldName(), i]), `${classPrefix}-legend-item-info`);\n\n const alignClass = alignmentMap[textOrientation];\n\n itemSkeleton.classed(alignClass, true);\n return { itemSkeleton };\n};\n\n/**\n *\n *\n * @param {*} measureType\n * @param {*} stepColorCheck\n */\nexport const applyItemStyle = (item, measureType, stepColorCheck, context) => {\n const {\n padding,\n labelSpaces,\n iconSpaces,\n maxIconWidth\n } = context.measurement();\n const diff = stepColorCheck ? -padding * 2 : 0;\n\n if (item[0] === VALUE) {\n return `${labelSpaces[item[6]][measureType]}px`;\n }\n return `${measureType === 'width' && !stepColorCheck ? maxIconWidth : iconSpaces[item[6]][measureType] - diff}px`;\n};\n\n/**\n *\n *\n * @param {*} str\n *\n */\nconst checkPath = (str) => {\n if (/^[mzlhvcsqta]\\s*[-+.0-9][^mlhvzcsqta]+/i.test(str) && /[\\dz]$/i.test(str) && str.length > 4) {\n return true;\n }\n return false;\n};\n\n/**\n *\n *\n * @param {*} d\n * @param {*} elem\n */\nconst createShape = function (d, elem, defaultIcon, width, height) {\n const groupElement = elem;\n // const { shape, size, update } = d;\n const size = d[3] || Math.min(width, height) * Math.PI;\n const shape = d[1] || defaultIcon;\n\n if (shape instanceof Promise) {\n shape.then((res) => {\n d.shape = res;\n return createShape(d, elem);\n });\n } else if (shape instanceof Element) {\n let newShape = shape.cloneNode(true);\n\n if (newShape.nodeName.toLowerCase() === 'img') {\n const src = newShape.src || newShape.href;\n newShape = document.createElementNS('http://www.w3.org/2000/svg', 'image');\n newShape.setAttribute('href', src);\n }\n const shapeElement = selectElement(newShape);\n shapeElement.attr('transform', `scale(${size / 100})`);\n return selectElement(groupElement.node().appendChild(newShape));\n } else if (typeof shape === 'string') {\n let pathStr;\n if (checkPath(shape)) {\n pathStr = shape;\n } else {\n pathStr = ICON_MAP(shape).size(size)();\n }\n return makeElement(groupElement, 'path', data => [data]).attr('d', pathStr);\n }\n d[1] = 'circle';\n return createShape(d, elem, 'circle');\n};\n\n/**\n * Returns the icon of the legend item\n *\n * @param {Object} datum Data property attached to the item\n * @param {number} width width of the item\n * @param {number} height height of the item\n * @return {Object|string} returns the path string or the string name of the icon\n * @memberof Legend\n */\nexport const getLegendIcon = (datum, width, height, defaultIcon) => {\n const icon = ICON_MAP(datum[1]);\n\n if (icon) {\n return icon.size(datum[3] || Math.min(width, height) * Math.PI);\n }\n return ICON_MAP(datum[3] ? 'circle' : defaultIcon).size(datum[3] || Math.min(width, height) * Math.PI);\n};\n\n/**\n *\n *\n */\nexport const renderIcon = (icon, container, datum, context) => {\n const {\n classPrefix,\n iconHeight,\n iconWidth,\n maxIconWidth,\n padding,\n color\n } = context;\n const svg = makeElement(container, 'svg', f => [f], `${classPrefix}-legend-icon-svg`)\n .attr(WIDTH, maxIconWidth)\n .attr(HEIGHT, iconHeight)\n .style(WIDTH, `${maxIconWidth}px`)\n .style(HEIGHT, `${iconHeight}px`);\n\n if (icon !== RECT) {\n const group = makeElement(svg, 'g', [datum[1]], `${classPrefix}-legend-icon`);\n createShape(datum, group, datum[3] ? 'circle' : 'square', iconWidth, iconHeight)\n .attr('transform', `translate(${maxIconWidth / 2 - padding} ${iconHeight / 2})`)\n .attr('fill', datum[2] || color);\n } else {\n makeElement(svg, RECT, [datum[1]], `${classPrefix}-legend-icon`)\n .attr('x', 0)\n .attr('y', 0)\n .attr(WIDTH, maxIconWidth)\n .attr(HEIGHT, iconHeight)\n .attr('fill', datum[2] || color);\n }\n};\n\n/**\n * Renders the items in the legend i.e, icon and text\n *\n * @param {DOM} container Point where item is to be mounted\n * @memberof Legend\n */\nexport const renderDiscreteItem = (context, container) => {\n const labelManager = context._labelManager;\n const {\n item,\n classPrefix\n } = context.config();\n const {\n maxIconWidth,\n padding\n } = context.measurement();\n const {\n width: iconWidth,\n height: iconHeight,\n color,\n className\n } = item.icon;\n\n const textOrientation = item.text.orientation;\n const formatter = item.text.formatter;\n\n labelManager.useEllipsesOnOverflow(true);\n applyStyle(container, {\n width: d => applyItemStyle(d, WIDTH, false, context),\n height: d => applyItemStyle(d, HEIGHT, false, context),\n 'text-align': CENTER,\n padding: `${padding}px`\n });\n\n labelManager.setStyle(context._computedStyle);\n const dataArr = container.data();\n container.each(function (d, i) {\n if (d[0] === VALUE) {\n selectElement(this).text(formatter(d[1], i, dataArr, context))\n .style(`padding-${textOrientation === RIGHT ? LEFT : RIGHT}`, '0px');\n } else {\n // const icon = getLegendIcon(d, iconWidth, iconHeight, type);\n selectElement(this).classed(`${classPrefix}-${className}`, true);\n selectElement(this).classed(`${classPrefix}-${className}-${i}`, true);\n renderIcon('circle', selectElement(this), d, {\n classPrefix,\n iconWidth,\n // iconWidth: 2 * Math.sqrt(d[3] / Math.PI) || iconWidth,\n iconHeight,\n maxIconWidth,\n padding,\n color\n });\n }\n });\n};\n\n/**\n* Renders the items in the legend i.e, icon and text\n*\n* @param {DOM} container Point where item is to be mounted\n* @memberof Legend\n*/\nexport const renderStepItem = (context, container) => {\n const labelManager = context._labelManager;\n const {\n item,\n position,\n classPrefix\n } = context.config();\n const {\n maxItemSpaces,\n maxIconWidth,\n padding\n } = context.measurement();\n const {\n width,\n height,\n color\n } = item.icon;\n const {\n formatter\n } = item.text;\n\n labelManager.useEllipsesOnOverflow(true);\n const { iconHeight, iconWidth, stepPadding } = positionConfig[position].getStepSpacesInfo({\n maxItemSpaces, height, width\n });\n\n applyStyle(container, {\n width: d => applyItemStyle(d, WIDTH, stepPadding.horizontal, context),\n height: d => applyItemStyle(d, HEIGHT, stepPadding.vertical, context),\n 'text-align': 'center',\n padding: `${padding}px`\n });\n\n labelManager.setStyle(context._computedStyle);\n const dataArr = container.data();\n container.each(function (d, i) {\n if (d[0] === VALUE) {\n selectElement(this).text(formatter(d[1], i, dataArr, context));\n } else {\n renderIcon(RECT, selectElement(this), d, {\n classPrefix,\n iconWidth,\n iconHeight,\n maxIconWidth,\n color\n });\n }\n });\n};\n","import {\n FieldType,\n DimensionSubtype,\n formatTemporal\n} from 'muze-utils';\nimport SimpleLegend from './simple-legend';\nimport { DISCRETE, LEFT, SIZE } from '../enums/constants';\nimport { getScaleInfo } from './legend-helper';\nimport { createLegendSkeleton, createItemSkeleton, renderDiscreteItem } from './renderer';\nimport '../styles.scss';\n\n/**\n * Creates a Legend from the axes of a canvas\n *\n * @param {Object} dependencies : legend data\n * @class Legend\n */\nexport default class DiscreteLegend extends SimpleLegend {\n\n /**\n * Initializes an instance of the class\n *\n * @static\n * @param {Object} dependencies Set of dependencies required by the legend\n * @return {Instance} returns a new instance of Legend\n * @memberof Legend\n */\n static create (dependencies) {\n return new DiscreteLegend(dependencies);\n }\n\n /**\n *\n *\n * @static\n *\n * @memberof DiscreteLegend\n */\n static type () {\n return DISCRETE;\n }\n\n /**\n *\n *\n * @param {*} scale\n *\n * @memberof DiscreteLegend\n */\n dataFromScale (scale) {\n const { scaleType, domain, scaleFn } = getScaleInfo(scale);\n let domainForLegend = [...new Set(domain)];\n const field = this.metaData().getFieldspace().fields[0];\n const { type, subtype } = field.schema();\n\n domainForLegend = domainForLegend.map((ele, i) => {\n let value = 0;\n let range = 0;\n const rawVal = domainForLegend[i];\n if (type === FieldType.MEASURE) {\n value = (+domainForLegend[i]).toFixed(0);\n const nextVal = domainForLegend[i + 1] ? +domainForLegend[i + 1] : +value;\n range = [value, nextVal.toFixed(0)];\n } else {\n let domainVal = rawVal;\n if (subtype === DimensionSubtype.TEMPORAL) {\n domainVal = formatTemporal(domainForLegend[i], field.minimumConsecutiveDifference());\n }\n value = domainVal;\n range = [domainVal];\n }\n return {\n [scaleType]: scale[scaleFn](ele),\n value,\n id: i,\n range,\n rawVal\n };\n }).filter(d => d.value !== null);\n\n domainForLegend = scaleType === SIZE ? domainForLegend.sort((a, b) => a[scaleType] - b[scaleType])\n : domainForLegend;\n return domainForLegend;\n }\n\n /**\n * Render the legend with its title\n *\n * @param {DOM} mountPoint Point where the legend and title are to be appended\n * @return {Instance} Current instance of legend\n * @memberof Legend\n */\n render () {\n const firebolt = this.firebolt();\n const data = this.data();\n const { classPrefix } = this.config();\n const legendContainer = super.render(this.mount());\n // create Legend\n const { legendItem } = createLegendSkeleton(this, legendContainer, classPrefix, data);\n const { itemSkeleton } = createItemSkeleton(this, legendItem);\n renderDiscreteItem(this, itemSkeleton);\n legendContainer.selectAll('div').style('float', LEFT);\n firebolt.mapActionsAndBehaviour();\n firebolt.createSelectionSet(this.data().map(d => d.id));\n return legendContainer;\n }\n}\n","import { makeElement, applyStyle } from 'muze-utils';\nimport { ContinousAxis } from '@chartshq/muze-axis';\nimport { BOTTOM, RIGHT } from '../enums/constants';\nimport { ALIGN } from './defaults';\nimport '../styles.scss';\n\n/**\n *\n *\n * @param {*} data\n *\n */\nexport const getGradientDomain = (data) => {\n if (typeof data[0].value === 'number') {\n return data.reduce((accumulator, currentValue) =>\n [Math.min(currentValue.value, accumulator[0]), Math.max(currentValue.value, accumulator[1])],\n [Number.MAX_VALUE, Number.MIN_VALUE]);\n }\n return data.map(e => e.value);\n};\n\n/**\n *\n *\n * @param {*} container\n * @param {*} data\n * @param {*} domain\n *\n */\nexport const makeLinearGradient = (container, data, domain) => {\n const defs = makeElement(container, 'defs', [1]);\n const linearGradient = makeElement(defs, 'linearGradient', [1])\n .attr('id', 'linear-gradient')\n .attr('x1', '0%')\n .attr('y2', '0%');\n makeElement(linearGradient, 'stop', data, 'stop-gradient')\n .attr('offset', d => `${(d.value - domain[0]) * 100 / (domain[1] - domain[0])}%`)\n .attr('stop-color', d => d.color);\n return linearGradient;\n};\n\n/**\n * Creates an axis cell with a linear axis for computing space and\n * creating gradient legend\n *\n * @return {AxisCell} Instance of Axis Cell for the gradient axis\n * @memberof Legend\n */\nexport const createAxis = (context) => {\n const data = context.data();\n const { align } = context.config();\n const AxisCell = context._cells.AxisCell;\n const newAxis = new ContinousAxis({\n id: `legend-${context._id}`,\n orientation: align === ALIGN.VERTICAL ? RIGHT : BOTTOM,\n style: context._computedStyle,\n nice: false,\n showAxisName: false,\n tickValues: data.map(d => d.value),\n fixedBaseline: false,\n labels: {\n rotation: 0\n }\n }, { labelManager: context._labelManager });\n\n newAxis.domain(getGradientDomain(data));\n newAxis.range([1, 1]);\n return new AxisCell().source(newAxis).config({\n margin: { left: 0, bottom: 0, top: 0, right: 0 }\n });\n};\n\n/**\n *\n *\n * @param {*} container\n * @param {*} data\n * @param {*} classPrefix\n *\n * @memberof GradientLegend\n */\nconst createLegendSkeleton = (container, classPrefix, data) => {\n const domain = getGradientDomain(data);\n const legendContainer = makeElement(container, 'div', [1], `${classPrefix}-legend-body`);\n const legendGradSvg = makeElement(legendContainer, 'svg', [1], `${classPrefix}-gradient`);\n const legendGradCont = makeElement(legendGradSvg, 'g', [1], `${classPrefix}-gradient-group`);\n const linearGradient = makeLinearGradient(legendGradSvg, data, domain);\n const legendRect = makeElement(legendGradCont, 'rect', [1], `${classPrefix}-gradient-rect`);\n\n return {\n legendContainer,\n legendGradCont,\n legendGradSvg,\n linearGradient,\n legendRect\n };\n};\n\n/**\n * Renders the axis for the gradient\n *\n * @param {Selection} container Point where axis is to be mounted\n * @param {number} height Height for axis\n * @param {number} width Width for axis\n * @memberof Legend\n */\nexport const renderAxis = (context, container, height, width) => {\n const axis = context.axis();\n\n axis.setAvailableSpace(width, height);\n axis.render(container.node());\n axis.source().render();\n};\n\n/**\n * Renders gradient legends\n *\n * @param {Selection} container Point where the legend is to be appended\n * @memberof GradientLegend\n */\nexport const renderGradient = (context, container) => {\n let gradHeight = 0;\n let gradWidth = 0;\n const {\n align,\n classPrefix,\n item\n } = context.config();\n const data = context.data();\n // Create the skeleton for the legend\n const {\n legendContainer,\n legendGradSvg,\n legendGradCont,\n linearGradient,\n legendRect\n } = createLegendSkeleton(container, classPrefix, data);\n const labelDim = context.axis().source().getAxisDimensions().tickDimensions;\n const {\n padding,\n margin,\n border,\n titleSpaces,\n maxItemSpaces,\n maxHeight,\n maxWidth,\n height,\n width\n } = context.measurement();\n const gradientDimensions = {};\n\n gradHeight = Math.floor(height - (titleSpaces.height + 2 * margin + 2 * border));\n gradWidth = Math.floor(width - (margin * 2 + border * 2));\n\n if (align === ALIGN.HORIZONTAL) {\n gradientDimensions.height = item.icon.height;\n gradientDimensions.width = gradWidth - 2 * padding - labelDim.width / 2;\n linearGradient.attr('x2', '100%').attr('y1', '0%');\n legendGradCont.attr('transform', `translate( ${labelDim.width / 2} 0)`);\n renderAxis(context, legendContainer, gradHeight - item.icon.height - padding, gradWidth - 2 * padding - 1);\n legendContainer.classed(`${classPrefix}-overflow-x`, width > maxWidth);\n\n applyStyle(legendContainer, {\n height: `${maxItemSpaces.height + border + padding}px`,\n width: `${Math.min(width, maxWidth)}px`,\n padding: `${padding}px`\n });\n\n legendRect.attr('height', gradientDimensions.height);\n legendRect.attr('width', gradientDimensions.width - labelDim.width / 2);\n } else {\n gradientDimensions.height = gradHeight - 2 * padding - labelDim.height / 2;\n gradientDimensions.width = item.icon.width;\n linearGradient.attr('x2', '0%').attr('y1', '100%');\n legendGradCont.attr('transform', `translate(0 ${labelDim.height / 2})`);\n renderAxis(context, legendContainer, gradHeight - 2 * padding - 1, gradWidth - item.icon.width - padding * 2);\n legendContainer.classed(`${classPrefix}-overflow-y`, height > maxHeight);\n applyStyle(legendContainer, {\n height: `${Math.min(height, maxHeight)}px`,\n width: `${width}px`,\n padding: `${padding}px`\n });\n legendRect.attr('height', gradientDimensions.height - labelDim.height / 2);\n legendRect.attr('width', gradientDimensions.width);\n }\n\n // Apply Styles to the legend plot area\n applyStyle(legendGradSvg, {\n height: `${gradientDimensions.height}px`,\n width: `${gradientDimensions.width}px`\n });\n\n // Apply styles to the legend rect\n applyStyle(legendRect, {\n fill: 'url(#linear-gradient)'\n });\n legendGradSvg.attr('height', gradientDimensions.height);\n legendGradSvg.attr('width', gradientDimensions.width);\n\n context.measurement({\n gradientDimensions\n });\n context._legendGradientSvg = legendGradSvg;\n return context;\n};\n","import SimpleLegend from './simple-legend';\nimport { getScaleInfo, getInterpolatedData } from './legend-helper';\nimport { GRADIENT, LEFT, SIZE } from '../enums/constants';\nimport { renderGradient, createAxis } from './gradient-helper';\nimport '../styles.scss';\n\n/**\n * Creates a Legend from the axes of a canvas\n *\n * @param {Object} dependencies : legend data\n * @class Legend\n */\nexport default class GradientLegend extends SimpleLegend {\n\n /**\n * Initializes an instance of the class\n *\n * @static\n * @param {Object} dependencies Set of dependencies required by the legend\n * @return {Instance} returns a new instance of Legend\n * @memberof Legend\n */\n static create (dependencies) {\n return new GradientLegend(dependencies);\n }\n\n /**\n *\n *\n * @static\n *\n * @memberof GradientLegend\n */\n static type () {\n return GRADIENT;\n }\n\n /**\n *\n *\n * @param {*} axis\n *\n * @memberof GradientLegend\n */\n axis (...axis) {\n if (axis.length) {\n this._axis = axis[0];\n return this;\n }\n return this._axis;\n }\n\n /**\n *\n *\n * @param {*} scale\n *\n * @memberof GradientLegend\n */\n dataFromScale (scale) {\n let domainForLegend = [];\n const { scaleType, domain, steps, scaleFn } = getScaleInfo(scale);\n\n if (steps instanceof Array) {\n if (domain[0] < steps[0]) {\n domainForLegend[0] = domain[0];\n }\n domainForLegend = [...domainForLegend, ...steps];\n if (domain[domain.length - 1] > steps[steps.length - 1]) {\n domainForLegend.push(domain[1]);\n }\n } else {\n domainForLegend = getInterpolatedData(domain, steps - 1);\n }\n domainForLegend = [...new Set(domainForLegend)].sort((a, b) => a - b);\n\n return domainForLegend.map((ele, i) => {\n const value = domainForLegend[i];\n return {\n [scaleType]: scaleType === SIZE ? scale[scaleFn](ele) * scale.getScaleFactor()\n : scale[scaleFn](Math.floor(ele)),\n value: +value.toFixed(2),\n id: i\n };\n }).filter(d => d.value !== null);\n }\n\n /**\n *\n *\n * @param {*} effPadding\n * @param {*} align\n *\n * @memberof Legend\n */\n getLabelSpaces (effPadding) {\n this.config({\n item: {\n text: {\n orientation: this.config().position\n }\n }\n });\n const axis = createAxis(this);\n const axisSpace = axis.getLogicalSpace();\n const space = { width: axisSpace.width - effPadding, height: axisSpace.height - effPadding };\n const axisDomainLength = axis.source().domain().length;\n const labelSpaces = new Array(axisDomainLength).fill(space);\n\n this.axis(axis);\n return labelSpaces;\n }\n\n /**\n *\n *\n *\n * @memberof GradientLegend\n */\n getDrawingContext () {\n return {\n svgContainer: this._legendGradientSvg\n };\n }\n\n /**\n * Render the legend with its title\n *\n * @param {DOM} mountPoint Point where the legend and title are to be appended\n * @return {Instance} Current instance of legend\n * @memberof Legend\n */\n render () {\n const firebolt = this.firebolt();\n const legendContainer = super.render(this.mount());\n // create Legend\n renderGradient(this, legendContainer);\n legendContainer.selectAll('div').style('float', LEFT);\n firebolt.mapActionsAndBehaviour();\n firebolt.createSelectionSet(this.data().map(d => d.id));\n return legendContainer;\n }\n /**\n *\n *\n * @param {*} data\n *\n * @memberof SimpleLegend\n */\n getCriteriaFromData (data) {\n return [[this.fieldName()], [data.value]];\n }\n}\n","import SimpleLegend from './simple-legend';\nimport {\n getScaleInfo,\n getInterpolatedData,\n getDomainBounds\n} from './legend-helper';\nimport {\n createLegendSkeleton,\n createItemSkeleton,\n renderStepItem\n} from './renderer';\nimport { STEP, RECT, LEFT, SIZE, UPPER, LOWER } from '../enums/constants';\nimport { stepData } from './position-config';\nimport '../styles.scss';\n\n/**\n * Creates a Legend from the axes of a canvas\n *\n * @param {Object} dependencies : legend data\n * @class Legend\n */\nexport default class StepLegend extends SimpleLegend {\n\n /**\n * Initializes an instance of the class\n *\n * @static\n * @param {Object} dependencies Set of dependencies required by the legend\n * @return {Instance} returns a new instance of Legend\n * @memberof Legend\n */\n static create (dependencies) {\n return new StepLegend(dependencies);\n }\n\n /**\n *\n *\n * @static\n *\n * @memberof StepLegend\n */\n static type () {\n return STEP;\n }\n\n /**\n *\n *\n * @param {*} scale\n *\n * @memberof StepLegend\n */\n dataFromScale (scale) {\n let domainLeg = [];\n const { scaleType, domain, steps, scaleFn } = getScaleInfo(scale);\n\n const { formatter } = this.config();\n const domainBounds = {\n lower: null, upper: null\n };\n\n if (steps instanceof Array) {\n if (domain[0] < steps[0]) {\n domainBounds.lower = [`${formatter.bounds.lower} ${steps[0]}`];\n }\n domainLeg = [...domainLeg, ...steps];\n if (domain[domain.length - 1] > steps[steps.length - 1]) {\n domainBounds.upper = [`${formatter.bounds.upper} ${steps[steps.length - 1]}`];\n }\n } else {\n domainLeg = getInterpolatedData(domain, steps);\n }\n\n domainLeg = [...new Set(domainLeg)].sort((a, b) => a - b);\n domainLeg = domainLeg.map((ele, i) => {\n let value = null;\n if (i < domainLeg.length - 1) {\n value = `${(ele.toFixed(1))} - ${(+domainLeg[i + 1].toFixed(1))}`;\n }\n return {\n [scaleType]: scaleType === SIZE ? scale[scaleFn](ele) * scale.getScaleFactor() : scale[scaleFn](ele),\n value,\n id: i + 1,\n range: [ele, domainLeg[i + 1]]\n };\n }).filter(d => d.value !== null);\n\n if (domainBounds.lower) {\n const lowerBounds = getDomainBounds(LOWER, { scale, scaleFn, scaleType },\n { domain, steps, domainBounds });\n domainLeg = [lowerBounds, ...domainLeg];\n }\n if (domainBounds.upper) {\n const upperBounds = getDomainBounds(UPPER, { scale, scaleFn, scaleType },\n { domain, steps, domainBounds, domainLeg });\n domainLeg = [...domainLeg, upperBounds];\n }\n return domainLeg;\n }\n\n /**\n *\n *\n * @param {*} effPadding\n * @param {*} align\n *\n * @memberof Legend\n */\n getLabelSpaces (effPadding, align) {\n this.config({\n item: {\n text: {\n orientation: this.config().position\n }\n }\n });\n return super.getLabelSpaces(effPadding, align);\n }\n\n /**\n *\n *\n *\n * @memberof Legend\n */\n elemType () {\n return RECT;\n }\n\n /**\n * Render the legend with its title\n *\n * @param {DOM} mountPoint Point where the legend and title are to be appended\n * @return {Instance} Current instance of legend\n * @memberof Legend\n */\n render () {\n const firebolt = this.firebolt();\n const { classPrefix, position } = this.config();\n const data = stepData(this.data())[position];\n\n const legendContainer = super.render(this.mount());\n\n // create Legend\n const { legendItem } = createLegendSkeleton(this, legendContainer, classPrefix, data);\n const { itemSkeleton } = createItemSkeleton(this, legendItem);\n\n renderStepItem(this, itemSkeleton);\n legendContainer.selectAll('div').style('float', LEFT);\n firebolt.mapActionsAndBehaviour();\n firebolt.createSelectionSet(this.data().map(d => d.id));\n return legendContainer;\n }\n\n /**\n *\n *\n * @param {*} data\n *\n * @memberof StepLegend\n */\n getCriteriaFromData (data) {\n const fieldName = this.fieldName();\n return {\n [fieldName]: data.range\n };\n }\n}\n","import { GradientLegend, DiscreteLegend, StepLegend } from '@chartshq/muze-legend';\n\n/**\n * Contants to be used as attr\n */\nexport const ROWS = 'rows';\nexport const COLUMNS = 'columns';\nexport const DATA = 'data';\nexport const COLOR = 'color';\nexport const SHAPE = 'shape';\nexport const SIZE = 'size';\nexport const DETAIL = 'detail';\nexport const LAYERS = 'layers';\nexport const TRANSFORM = 'transform';\nexport const INITIALIZED = 'isInitialized';\nexport const SOURCE = 'source';\nexport const WIDTH = 'width';\nexport const HEIGHT = 'height';\nexport const PADDING = 'padding';\nexport const BORDER = 'border';\nexport const MARGIN = 'margin';\nexport const CONFIG = 'config';\nexport const MOUNT = 'mount';\nexport const CANVAS_UPDATED = 'canvasUpdated';\nexport const CLASSPREFIX = 'classPrefix';\nexport const POLICIES = '_policies';\nexport const LEGEND = 'legend';\nexport const TITLE = 'title';\nexport const SUB_TITLE = 'subtitle';\nexport const RESOLVE = 'resolve';\nexport const DISCRETE = 'discrete';\nexport const STEP_COLOR = 'step-color';\nexport const GRADIENT = 'gradient';\nexport const LINEAR = 'linear';\nexport const ORDINAL = 'ordinal';\nexport const MUZE_PREFIX = 'muze';\n\nexport const TITLE_TEMPLATE_NOT_ALLOWED_TAGS = [\n 'script',\n 'style'\n];\n\nexport const LEGEND_TYPE_MAP = {\n [`${ORDINAL}-${true}-${COLOR}`]: DiscreteLegend,\n [`${ORDINAL}-${true}-${SIZE}`]: DiscreteLegend,\n [`${ORDINAL}-${true}-${SHAPE}`]: DiscreteLegend,\n [`${ORDINAL}-${false}-${COLOR}`]: DiscreteLegend,\n [`${ORDINAL}-${false}-${SHAPE}`]: DiscreteLegend,\n [`${ORDINAL}-${false}-${SIZE}`]: DiscreteLegend,\n [`${LINEAR}-${false}-${SIZE}`]: DiscreteLegend,\n [`${LINEAR}-${true}-${SIZE}`]: DiscreteLegend,\n [`${LINEAR}-${false}-${SHAPE}`]: DiscreteLegend,\n [`${LINEAR}-${true}-${COLOR}`]: StepLegend,\n [`${LINEAR}-${false}-${COLOR}`]: GradientLegend\n};\n\nexport const LEFT = 'left';\nexport const RIGHT = 'right';\nexport const BOTTOM = 'bottom';\nexport const TOP = 'top';\nexport const GROUP = 'group';\nexport const LAYOUT = 'layout';\nexport const RETINAL = 'retinal';\nexport const DIMENSION = 'dimension';\nexport const MEASURE = 'measure';\nexport const VERTICAL = 'vertical';\nexport const HORIZONTAL = 'horizontal';\nexport const HORIZONTAL_CENTER = 'h-center';\nexport const VERTICAL_CENTER = 'v-center';\nexport const HIDDEN = 'hidden';\nexport const OVERFLOW = 'overflow';\nexport const OVERFLOW_X = 'overflow-x';\nexport const OVERFLOW_Y = 'overflow-y';\nexport const AUTO = 'auto';\nexport const VISIBLE = 'visible';\n","import { ComposedVars, SimpleVariable } from '@chartshq/visual-group';\nimport { TITLE_TEMPLATE_NOT_ALLOWED_TAGS } from './constants';\n\n/**\n * This method creates a new composed variable instance from multiple variables. This is required when we have multiple\n * variables on a single axis and the union of domain of all the variables needs to be set on the axis.\n *\n * To create a new composed variable from multiple fields,\n * ```\n * const sharedVar = share('open', 'high', 'low', 'close');\n * canvas.rows([sharedVar])\n * .columns(['date']);\n * ```\n *\n * @module Operators\n * @public\n * @function share\n * @param {Array} vars Variable names.\n *\n * @return {ComposedVars} Instance of composed variable\n */\nexport const share = (...vars) => new ComposedVars(...vars.map(variable => new SimpleVariable(variable)));\n\n/**\n *\n *\n * @param {*} node\n *\n */\nfunction treeShakeNode (node) {\n if (node.nodeType !== Node.ELEMENT_NODE) { return; }\n\n if (TITLE_TEMPLATE_NOT_ALLOWED_TAGS.indexOf(node.tagName.toLowerCase()) !== -1) {\n node.parentNode.removeChild(node);\n } else {\n for (const childNode of node.childNodes) {\n treeShakeNode(childNode);\n }\n }\n}\n\n/**\n * A string template tagged function which sanitizes input html formatted string according to the allowed html tags.\n * This is used to render html in canvas components like title and tooltip.\n *\n * To render html in canvas components,\n * ```\n * canvas.title(html`TITLE`);\n * ```\n *\n * @public\n * @module Operators\n * @function html\n * @param {Array.} strings - The string parts of the template.\n * @param {Array} exps - The list of evaluated expression values.\n *\n * @return {Function} Returns a function which returns the sanitized html string.\n */\nexport function html (strings, ...exps) {\n let htmlCode = '';\n const expLn = exps.length;\n let i = 0;\n\n for (; i < expLn; ++i) {\n htmlCode += strings[i] + exps[i];\n }\n htmlCode += strings[i];\n\n const frag = document.createDocumentFragment();\n const wrapper = document.createElement('div');\n\n frag.appendChild(wrapper);\n wrapper.innerHTML = htmlCode;\n\n treeShakeNode(wrapper);\n const { innerHTML } = wrapper;\n\n return () => innerHTML;\n}\n","import { mergeRecursive, CommonProps } from 'muze-utils';\n\nconst defaultPolicy = (registrableComponents) => {\n const aliases = registrableComponents.map(comp => comp.alias());\n return {\n behaviours: {\n '*': (propagationPayload) => {\n const propagationCanvas = propagationPayload.sourceCanvas;\n return propagationCanvas ? aliases.indexOf(propagationCanvas) !== -1 : true;\n }\n }\n };\n};\n\nconst listenerFn = (canvas, fn) => () => {\n const valueMatrix = canvas.composition().visualGroup.matrixInstance().value;\n valueMatrix.each(cell => fn(cell.valueOf().firebolt()));\n};\n\nconst canvasIterator = (canvases, iteratorFn, cFn) => {\n canvases.forEach((canvas) => {\n const matrix = canvas.composition().visualGroup.matrixInstance().value;\n matrix.each(cell => iteratorFn(cell.valueOf().firebolt()));\n cFn && cFn(canvas);\n // Also register actions on canvas update\n const throwback = canvas._throwback;\n\n throwback.registerImmediateListener([CommonProps.MATRIX_CREATED],\n listenerFn(canvas, iteratorFn));\n });\n};\n\n/**\n * This class is initiated only once in lifecycle and is reponsible for regisration of physical and behavioural\n * actions and side effects and the mapping between them.\n *\n * To get the instance of action model\n * ```\n * const ActionModel = muze.ActionModel;\n * ```\n *\n * @public\n * @module ActionModel\n */\nclass ActionModel {\n constructor () {\n this._registrableComponents = [];\n }\n\n /**\n * Takes an array of canvases on which the physical and behavioural actions will get registered.\n *\n * @public\n * @param {Canvas} components Array of canvases\n *\n * @return {ActionModel} Instance of action model.\n */\n for (...components) {\n this._registrableComponents = components;\n return this;\n }\n\n /**\n * Registers physical actions on the canvases. It takes an object with key as the name of action and value having\n * the definition of the action.\n *\n * To register a {@link PhysicalAction},\n * ```\n * const ActionModel = muze.ActionModel;\n * ActionModel\n * // Physical actions will be registered on these canvases.\n * .for(canvas)\n * .registerPhysicalActions({\n * // Key is the name of physical action.\n * ctrlClick: (firebolt) => (targetEl, behaviours) => {\n * targetEl.on('click', function (data) {\n * const event = utils.getEvent();\n * const pos = utils.getClientPoint(event, this);\n * // Get the data point nearest to the mouse position.\n * const nearestPoint = firebolt.context.getNearestPoint(pos, {\n * data\n * });\n * // Prepare the payload\n * const payload = {\n * criteria: nearestPoint.id\n * };\n * behaviours.forEach((behaviour) => firebolt.dispatchBehaviour(behaviour, payload));\n * });\n * }\n * });\n * ```\n * @public\n *\n * @param {Object} action Names of physical actions and their definitions.\n *\n * @return {ActionModel} Instance of the action model.\n */\n registerPhysicalActions (action) {\n canvasIterator(this._registrableComponents, (firebolt) => {\n firebolt.registerPhysicalActions(action);\n }, (canvas) => {\n canvas.firebolt().registerPhysicalActions(action);\n });\n\n return this;\n }\n\n /**\n * Registers behavioural actions on the canvases. It takes definitions of the behavioural actions and registers\n * them on the canvases. Every behavioural action must inherit the {@link GenericBehaviour} class.\n *\n * To register a behavioural action\n * ```\n * // Define a new behavioural action\n * class SingleSelectBehaviour extends GenericBehaviour {\n * static formalName () {\n * return 'singleSelect';\n * }\n *\n * setSelectionSet (addSet, selectionSet) {\n * if (addSet === null) {\n * selectionSet.reset();\n * } else if (addSet.length) {\n * const existingAddSet = selectionSet.getExistingEntrySet(addSet);\n * if (existingAddSet.length){\n * selectionSet.reset();\n * } else {\n * selectionSet.add(addSet);\n * }\n * } else {\n * selectionSet.reset();\n * }\n * }\n * }\n * muze.ActionModel.registerBehaviouralActions(SingleSelectBehaviour);\n * ```\n *\n * @public\n *\n * @param {GenericBehaviour} actions Definition of behavioural actions.\n *\n * @return {ActionModel} Instance of action model.\n */\n registerBehaviouralActions (...actions) {\n canvasIterator(this._registrableComponents, (firebolt) => {\n firebolt.registerBehaviouralActions(actions);\n }, (canvas) => {\n canvas.firebolt().registerBehaviouralActions(actions);\n });\n\n return this;\n }\n\n /**\n * Registers the mapping of physical and behavioural actions. This mapping is used to establish which behavioural\n * actions should be dispatched on any triggering of physical actions.\n *\n * To map physical actions with behavioural actions,\n * ```\n * muze.ActionModel.registerPhysicalBehaviouralMap({\n * ctrlClick: {\n * behaviours: ['select'] // This array must be the formal names of the behavioural actions.\n * }\n * });\n * ```\n *\n * @public\n * @param {Object} map Contains the physical and behavioural action map.\n * ```\n * {\n * // Name of the physical action\n * click: {\n * // Target element selector. This is an optional field. If not passed, then by default takes the\n * // container element of visual unit.\n * target: '.muze-layers-area path',\n * // Behaviours which should be dispatched on triggering of the mapped physical action.\n * behaviours: ['select']\n * }\n * }\n * ```\n *\n * @return {ActionModel} Instance of action model.\n */\n registerPhysicalBehaviouralMap (map) {\n canvasIterator(this._registrableComponents, (firebolt) => {\n firebolt.registerPhysicalBehaviouralMap(map);\n }, (canvas) => {\n canvas.firebolt().registerPhysicalBehaviouralMap(map);\n });\n return this;\n }\n\n /**\n * Registers what behaviour to propagate on dispatch of a certain behavioural action. By default, when any\n * behavioural action is dispatched, then the same behavioural action gets propagated to all the other canvases.\n * This can be changed using this api.\n *\n * To register what behaviour should be propagated on dispatch of any behavioural action,\n * ```\n * ActionModel.for(canvas1, canvas2).registerPropagationBehaviourMap({\n * select: 'filter',\n * brush: 'filter'\n * });\n * ```\n *\n * @public\n * @param {Object} map Propagation behaviour map.\n *\n * @return {ActionModel} Instance of action model.\n */\n registerPropagationBehaviourMap (map) {\n canvasIterator(this._registrableComponents, (firebolt) => {\n firebolt.registerPropagationBehaviourMap(map);\n }, (canvas) => {\n canvas.firebolt().registerPropagationBehaviourMap(map);\n });\n\n return this;\n }\n\n /**\n * Registers the mapping of side effects and behavioural actions. It takes an object which contains key as the\n * name of behavioural action and the side effects which will be linked to it.\n *\n * To map side effects to select behaviour,\n * ```\n * muze.ActionModel.mapSideEffects({\n * select: ['infoBox'] // This array must be the formal names of the side effects\n * });\n * ```\n *\n * To map side effects to select behaviour, but disable all the default side effects attached with this behaviour,\n * ```\n * muze.ActionModel.mapSideEffects({\n * select: {\n * effects: ['infoBox'],\n * preventDefaultActions: true\n * }\n * });\n * @public\n * @param {Object} map Mapping of behavioural actions and side effects.\n * ```\n * {\n * select: ['infoBox']\n * }\n * ```\n * @return {ActionModel} Instance of action model.\n */\n mapSideEffects (map) {\n canvasIterator(this._registrableComponents, (firebolt) => {\n firebolt.mapSideEffects(map);\n }, (canvas) => {\n canvas.firebolt().mapSideEffects(map);\n });\n return this;\n }\n\n /**\n * Registers the side effects on the registered canvases. It takes definitions of side effects and registers them\n * on the canvases. Every side effect must inherit the base class {@link GenericSideEffect} or\n * {@link SpawnableSideEffect} or {@link SurrogateSideEffect} class.\n *\n * ```\n * // Define a custom side effect\n * class InfoBox extends SpawnableSideEffect {\n * static formalName () {\n * return 'infoBox';\n * }\n *\n * apply (selectionSet) {\n * }\n * }\n * muze.ActionModel.registerSideEffects(InfoBox);\n * ```\n * @public\n * @param {GenericSideEffect} sideEffects Definition of side effects.\n *\n * @return {ActionModel} Instance of action model.\n */\n registerSideEffects (...sideEffects) {\n canvasIterator(this._registrableComponents, (firebolt) => {\n firebolt.registerSideEffects(sideEffects);\n }, (canvas) => {\n canvas.firebolt().registerSideEffects(sideEffects);\n });\n return this;\n }\n\n /**\n * Breaks the link between behavioural actions and physical actions. It takes an array of behavioural action\n * and it's physical action.\n *\n * To dissociate behavioural actions from physical actions\n * ```\n * muze.ActionModel.dissociateBehaviour(['select', 'click'], ['highlight', 'hover']);\n * ```\n * @public\n * @param {Array} maps Array of behavioural action and physical action.\n *\n * @return {ActionModel} Instance of action model.\n */\n dissociateBehaviour (...maps) {\n canvasIterator(this._registrableComponents, (firebolt) => {\n maps.forEach(val => firebolt.dissociateBehaviour(val[0], val[1]));\n }, (canvas) => {\n maps.forEach(val => canvas.firebolt().dissociateBehaviour(val[0], val[1]));\n });\n return this;\n }\n\n /**\n * Breaks the link between side effects and behavioural actions. It takes an array of formal names of the side\n * effects and it's linked behavioural action.\n *\n * To dissociate side effects from behavioural actions\n * ```\n * muze.ActionModel.dissociateSideEffect(['crossline', 'highlight'], ['selectionBox', 'brush']);\n * ```\n * @public\n * @param {Array} maps Array of side effects and behavioural actions.\n *\n * @return {ActionModel} Instance of action model.\n */\n dissociateSideEffect (...maps) {\n canvasIterator(this._registrableComponents, (firebolt) => {\n maps.forEach(val => firebolt.dissociateSideEffect(val[0], val[1]));\n }, (canvas) => {\n maps.forEach(val => canvas.firebolt().dissociateSideEffect(val[0], val[1]));\n });\n return this;\n }\n\n /**\n * By default cross interactivity is disabled between canvases. This enables cross interaction between the canvases\n * so that any action happening in one canvas gets dispatched on other canvases as well. An optional policy can also\n * be passed in this method. The policy can be used to control on which canvases the behavioural actions and\n * side effects gets dispatched.\n *\n * To just enable cross interactivity between two canvases,\n * ```\n * ActionModel.for(canvas1, canvas2)\n * .enableCrossInteractivity();\n * ```\n *\n * To enable cross interactivity but enable any behavioural action only when it is triggered from canvas1.\n * ```\n * ActionModel.for(canvas1, canvas2)\n * .enableCrossInteractivity({\n * behaviours: {\n * // Here * stands for any behavioural action name. We can also give any name of behavioural action\n * // in place of this.\n * '*': (propPayload, context) => {\n * return propPayload.sourceCanvas === canvas1.alias();\n * }\n * }\n * });\n * ```\n *\n * To enable cross interactivity but enable tooltip effect if the action is propagated from canvas1,\n * ```\n * ActionModel.for(canvas1, canvas2)\n * .enableCrossInteractivity({\n * sideEffects: {\n * tooltip: (propPayload, context) => {\n * return propPayload.sourceCanvas === canvas1.alias();\n * }\n * }\n * });\n * ```\n * @public\n * @param {Object} policy Policy definition.\n *\n * @return {ActionModel} Instance of action model.\n */\n enableCrossInteractivity (policy = {}) {\n const registrableComponents = this._registrableComponents;\n const mergedPolicy = mergeRecursive(mergeRecursive({}, defaultPolicy(registrableComponents)), policy);\n\n registrableComponents.forEach((canvas) => {\n canvas.firebolt().crossInteractionPolicy(mergedPolicy);\n });\n\n return this;\n }\n}\n\nexport const actionModel = (() => new ActionModel())();\n","import { MUZE_PREFIX } from '../constants';\n\nexport const TITLE_CONFIG = {\n position: 'top',\n align: 'left',\n padding: 4,\n className: `${MUZE_PREFIX}-title-container`\n};\n\nexport const SUB_TITLE_CONFIG = {\n position: 'top',\n align: 'left',\n padding: 16,\n maxLines: 2,\n className: `${MUZE_PREFIX}-subtitle-container`\n};\n\nexport const GRID = 'grid';\n\nexport const CANVAS = 'canvas';\n\nexport const LAYOUT_ALIGN = {\n TOP: 'top',\n LEFT: 'left',\n RIGHT: 'right',\n BOTTOM: 'bottom'\n};\n","import { mergeRecursive } from 'muze-utils';\nimport {\n ROWS,\n COLUMNS,\n COLOR,\n SHAPE,\n SIZE,\n DETAIL,\n LAYERS,\n TRANSFORM,\n TITLE,\n SUB_TITLE\n} from '../constants';\nimport { TITLE_CONFIG, SUB_TITLE_CONFIG } from './defaults';\n/**\n * This is the local options semantics based on which setters getters are created and reactivity is initiated.\n * This local object is only valid for Canvas.\n * Canvas merges global and local object both to the model\n *\n * Format\n * PROPERTRY_NAME: {\n * value: // default value of the property,\n * meta: {\n * typeCheck: // The setter value will be checked using this. If the value is function then the setter value\n * // is passed as args.\n * typeExpected: // The output of typecheck action will be tested against this. Truthy value will set the\n * // value to the setter\n * sanitizaiton: // Need for sanitization before type is checked\n * }\n * }\n *\n * @module LocalOptions\n */\n\nexport const localOptions = {\n [ROWS]: {\n value: null,\n meta: {\n typeCheck: 'constructor',\n typeExpected: 'Array'\n }\n },\n [COLUMNS]: {\n value: null,\n meta: {\n typeCheck: 'constructor',\n typeExpected: 'Array'\n }\n },\n [COLOR]: {\n value: null,\n meta: {\n typeCheck: 'constructor',\n typeExpected: 'Object',\n sanitization: (config) => {\n if (typeof config === 'string' || config === null) {\n return {\n field: config\n };\n }\n return config;\n }\n }\n },\n [SHAPE]: {\n value: null,\n meta: {\n typeCheck: 'constructor',\n typeExpected: 'Object',\n sanitization: (config) => {\n if (typeof config === 'string' || config === null) {\n return {\n field: config\n };\n }\n return config;\n }\n }\n },\n [SIZE]: {\n value: null,\n meta: {\n typeCheck: 'constructor',\n typeExpected: 'Object',\n sanitization: (config) => {\n if (typeof config === 'string' || config === null) {\n return {\n field: config\n };\n }\n return config;\n }\n }\n },\n [DETAIL]: {\n value: [],\n meta: {\n typeCheck: 'constructor',\n typeExpected: 'Array'\n }\n },\n\n [LAYERS]: {\n value: [],\n meta: {\n typeCheck: 'constructor',\n typeExpected: 'Array'\n }\n },\n [TRANSFORM]: {\n value: null,\n meta: {\n typeCheck: 'constructor',\n typeExpected: 'Object'\n }\n }\n};\n\nexport const canvasOptions = {\n [TITLE]: {\n value: [null, null],\n meta: {\n typeCheck: ['constructor', 'constructor'],\n typeExpected: ['Function', 'Object'],\n spreadParams: true,\n sanitization: [(title) => {\n if (typeof title === 'string') {\n const t = () => title;\n t._sanitized = true;\n return t;\n }\n return title;\n }, (titleConfig) => {\n const defConfig = mergeRecursive({}, TITLE_CONFIG);\n return mergeRecursive(defConfig, titleConfig);\n }]\n }\n },\n [SUB_TITLE]: {\n value: [null, null],\n meta: {\n typeCheck: ['constructor', 'constructor'],\n typeExpected: ['Function', 'Object'],\n spreadParams: true,\n sanitization: [(subtitle) => {\n if (typeof subtitle === 'string') {\n const sub = () => subtitle;\n sub._sanitized = true;\n return sub;\n }\n return subtitle;\n }, (subtitleConfig) => {\n const defConfig = mergeRecursive({}, SUB_TITLE_CONFIG);\n return mergeRecursive(defConfig, subtitleConfig);\n }]\n }\n }\n};\n","export default class LayoutComponent {\n constructor (name, dimensions, seed) {\n this._seed = seed;\n this._boundBox = {\n height: dimensions.height,\n width: dimensions.width,\n top: null,\n left: null\n };\n this._renderAt = null;\n this._alignWith = null;\n this._alignment = null;\n this._target = null;\n this._position = null;\n this._componentName = name;\n this._className = null;\n }\n\n getLogicalSpace () {\n throw new Error('getLogicalSpace is not defined');\n }\n\n setSpatialConfig () {\n throw new Error('setSpatialSpace is not defined');\n }\n\n name (param) {\n if (param) {\n this._componentName = param;\n }\n return this._componentName;\n }\n\n target (param) {\n if (param) {\n this._target = param;\n }\n return this._target;\n }\n\n position (param) {\n if (param) {\n this._position = param;\n }\n return this._position;\n }\n\n alignment (param) {\n if (param) {\n this._alignment = param;\n }\n return this._alignment;\n }\n\n alignWith (param) {\n if (param) {\n this._alignWith = param;\n }\n return this._alignWith;\n }\n\n renderAt (param) {\n if (param) {\n this._renderAt = param;\n }\n return this._renderAt;\n }\n\n boundBox (param) {\n if (param) {\n Object.assign(this._boundBox, param);\n }\n return this._boundBox;\n }\n\n className (param) {\n if (param) {\n this._className = param;\n }\n return this._className;\n }\n\n draw () {\n throw new Error('draw is not defined');\n }\n }\n\n","import LayoutComponent from './layoutComponent';\n\nclass DummyComponent extends LayoutComponent {\n getLogicalSpace () {\n return {\n width: this.boundBox().width,\n height: this.boundBox().height\n };\n }\n\n setSpatialConfig (conf) {\n this.boundBox({ top: conf.y, left: conf.x });\n this.newDimensions = {\n width: conf.width,\n height: conf.height\n };\n this.renderAt(conf.renderAt);\n return this;\n }\n\n draw () {\n if (!this.component) {\n throw new Error(`Component not set for ${this.componentName}`);\n }\n this.component.mount(document.getElementById(this.renderAt)); // Change the draw method to component draw\n return this;\n }\n}\n\nexport default DummyComponent;\n","export const DEFAULT_CONFIG = {\n classPrefix: 'muze',\n interaction: {\n sideEffect: 'individual'\n },\n pagination: 'scroll',\n scrollBar: {\n thickness: 10,\n speed: 2,\n vertical: {\n align: 'right'\n },\n horizontal: {\n align: 'bottom'\n }\n },\n legend: {\n position: 'right',\n color: {\n show: true,\n padding: 1,\n margin: 3,\n border: 1,\n height: 20,\n width: 20\n },\n shape: {\n show: true,\n padding: 1,\n margin: 3,\n border: 1,\n height: 20,\n width: 20\n },\n size: {\n show: true,\n padding: 1,\n margin: 3,\n border: 1,\n height: 20,\n width: 20\n }\n },\n showHeaders: false,\n minWidth: 100,\n minHeight: 100,\n facet: {\n rows: {\n minCharacters: 3\n },\n columns: {\n maxLines: 2,\n verticalAlign: 'middle',\n minCharacters: 1\n }\n },\n border: {\n style: 'solid',\n color: '#d6d6d6',\n width: 2,\n collapse: true,\n spacing: 0\n },\n autoGroupBy: {\n disabled: false\n },\n invalidValues: {}\n};\n","import { DEFAULT_CONFIG } from '../../../../muze/src/defaults';\n\nconst DEFAULT_WIDTH = 600;\nconst DEFAULT_HEIGHT = 400;\nconst DEFAULT_CLASS_NAME = `${DEFAULT_CONFIG.classPrefix}-layout-container-component`;\nconst NODE_PREFIX = `${DEFAULT_CONFIG.classPrefix}-layout-container`;\n\nexport {\n DEFAULT_WIDTH,\n DEFAULT_HEIGHT,\n DEFAULT_CLASS_NAME,\n NODE_PREFIX\n};\n","export default class DefinitionModel {\n constructor (config) {\n this._host = config.host || null;\n this._cut = config.cut || null;\n this._ratioWeight = config.ratioWeight === 0 ? 0 : config.ratioWeight || 1;\n this._preferred = config.preferred || false;\n this._lanes = config.lanes || [];\n this._remainingHeight = 0;\n this._remainingWidth = 0;\n }\n\n host (host) {\n if (host) {\n this._host = host;\n }\n return this._host;\n }\n\n preferred (preferred) {\n if (preferred) {\n this._preferred = preferred;\n }\n return this._preferred;\n }\n\n cut (cut) {\n if (cut) {\n this._cut = cut;\n }\n return this._cut;\n }\n\n ratioWeight (ratioWeight) {\n if (ratioWeight) {\n this._ratioWeight = ratioWeight;\n }\n return this._ratioWeight;\n }\n\n lanes (lanes) {\n if (lanes) {\n this._lanes = lanes;\n }\n return this._lanes;\n }\n\n remainingHeight (remainingHeight) {\n if (remainingHeight) {\n this._remainingHeight = remainingHeight;\n }\n return this._remainingHeight;\n }\n\n remainingWidth (remainingWidth) {\n if (remainingWidth) {\n this._remainingWidth = remainingWidth;\n }\n return this._remainingWidth;\n }\n}\n","import { NODE_PREFIX } from '../../constants/defaults';\nimport DefinitionModel from '../definition-manager/definitionModel';\nimport DummyComponent from '../../layout-component/dummy-component';\n/**\n * Compares two strings in lowercase\n *\n * @export\n * @param {string} value the value to be compared\n * @param {string} compareTo whom the value would be compared\n * @return {boolean} true if values are equal\n */\nexport function isEqual (value, compareTo) {\n if (typeof value !== 'string' || typeof compareTo !== 'string') {\n throw new TypeError('value and compareTo must be string');\n }\n return value.toLowerCase() === compareTo.toLowerCase();\n}\n\nexport const getNodeId = (() => {\n let _uid = 0;\n return () => `${NODE_PREFIX}-${++_uid}`;\n})();\n\nexport function yExtraSpace (node) {\n let smallestHeight = 0;\n if (node.getCutType() === 'v') {\n smallestHeight = smallestExtraHeightHorizontally(node); // eslint-disable-line no-use-before-define\n } else if (node.getCutType() === 'h') {\n node.children().forEach((child) => {\n smallestHeight += yExtraSpace(child);\n });\n } else if (node.model().host() && node.model().host().getLogicalSpace) {\n const containerHeight = node.boundBox().height;\n const hostHeight = node.model().host().getLogicalSpace().height;\n\n smallestHeight = containerHeight - hostHeight;\n if (smallestHeight < 0) {\n smallestHeight = 0;\n }\n } else {\n smallestHeight = 0;\n }\n return smallestHeight;\n}\n\nexport function smallestExtraHeightHorizontally (node) {\n let smallestHeight = Number.MAX_SAFE_INTEGER;\n node.children().forEach((child) => {\n const h = yExtraSpace(child);\n if (h < smallestHeight) {\n smallestHeight = h;\n }\n });\n return smallestHeight;\n}\n\nexport function xExtraSpace (node) {\n let smallestWidth = 0;\n if (node.getCutType() === 'h') {\n smallestWidth = smallestExtraWidthVertically(node); // eslint-disable-line no-use-before-define\n } else if (node.getCutType() === 'v') {\n node.children().forEach((child) => {\n smallestWidth += xExtraSpace(child);\n });\n } else if (node.model().host() && node.model().host().getLogicalSpace) {\n const containerWidth = node.boundBox().width;\n const hostWidth = node.model().host().getLogicalSpace().width;\n smallestWidth = containerWidth - hostWidth;\n if (smallestWidth < 0) {\n smallestWidth = 0;\n }\n } else {\n smallestWidth = 0;\n }\n return smallestWidth;\n}\n\nexport function smallestExtraWidthVertically (node) {\n let smallestWidth = Number.MAX_SAFE_INTEGER;\n node.children().forEach((child) => {\n const w = xExtraSpace(child);\n if (w < smallestWidth) {\n smallestWidth = w;\n }\n });\n return smallestWidth;\n}\n\nexport function determineBoundBox (bb, i, arr, instance) {\n if (i) {\n // if not first sibling, take boundbox from previous sibling\n const lastSibling = arr[i - 1];\n const { top: _top, left: _left, height: _height, width: _width } = lastSibling.boundBox();\n return {\n width: bb.width,\n height: bb.height,\n\n top: instance.parentCut() === 'h'\n ? _top + _height : _top,\n\n left: instance.parentCut() === 'h'\n ? _left : _left + _width\n };\n }\n // if first sibling, take boundbox from parent\n const { top: _top, left: _left } = instance.parent().boundBox();\n return {\n width: bb.width,\n height: bb.height,\n top: _top,\n left: _left\n };\n}\n\n// prepares the targetComponent Map for target Mapping ie. where a component should lie\nexport function prepareTargetComponentMap (context) {\n context.targetComponentMap(new Map());\n context.componentMap().forEach((value) => {\n if (context.targetComponentMap().has(value.target())) {\n context.targetComponentMap().get(value.target()).push(value);\n } else {\n const temp = [];\n temp.push(value);\n context.targetComponentMap().set(value.target(), temp);\n }\n });\n}\n\nexport function getComponent (canvasComponent, componentName) {\n const comp = canvasComponent.find(component => component.name() === componentName);\n return (comp && comp !== -1) ? comp : null;\n}\nexport function createPlaceHolderComponent (height, width, position) {\n const comp = new DummyComponent(0, { height, width });\n comp.name('placeHolder');\n comp.position(position);\n return comp;\n}\n\nexport function placeComponent (definitionModel, component, isPreferred = false, isGridComponent = false) {\n let cut = '';\n let componentRatioWidth = 1;\n let leftOvercomponentRationWidth = 1;\n let leftHeight = 0;\n let leftWidth = 0;\n\n if (!component) {\n return { first: definitionModel, second: definitionModel };\n }\n\n const { height: componentHeight, width: componentWidth } = component.getLogicalSpace();\n const position = component.position();\n if (position === 'top' || position === 'bottom') {\n cut = 'h';\n componentRatioWidth = componentHeight / definitionModel.remainingHeight();\n leftHeight = definitionModel.remainingHeight() - componentHeight;\n leftWidth = definitionModel.remainingWidth();\n } else {\n cut = 'v';\n componentRatioWidth = componentWidth / definitionModel.remainingWidth();\n leftWidth = definitionModel.remainingWidth() - componentWidth;\n leftHeight = definitionModel.remainingHeight();\n }\n leftOvercomponentRationWidth = 1 - componentRatioWidth;\n\n// update parentModel\n definitionModel.cut(cut);\n const firstLaneConfig = {\n host: component.name(),\n cut: null,\n ratioWeight: componentRatioWidth,\n preferred: isGridComponent ? false : isPreferred,\n lanes: []\n };\n const firstLane = new DefinitionModel(firstLaneConfig);\n firstLane.remainingHeight(componentHeight);\n firstLane.remainingWidth(componentWidth);\n\n const secondLaneConfig = {\n host: null,\n cut: null,\n ratioWeight: leftOvercomponentRationWidth,\n preferred: isGridComponent ? false : !isPreferred,\n lanes: []\n };\n const secondLane = new DefinitionModel(secondLaneConfig);\n secondLane.remainingHeight(leftHeight);\n secondLane.remainingWidth(leftWidth);\n if (isPreferred) {\n definitionModel.lanes([firstLane]);\n } else if (position === 'top' || position === 'left') {\n definitionModel.lanes([firstLane, secondLane]);\n } else {\n definitionModel.lanes([secondLane, firstLane]);\n }\n return { first: firstLane, second: secondLane };\n}\n\nexport function placeGridComponent (definitionModel, gridComponents) {\n let tempDefModel = definitionModel;\n const rows = gridComponents.length;\n const column = rows ? gridComponents[0].length : 0;\n const height = gridComponents.reduce((acc, val) => (acc + val[0].getLogicalSpace().height), 0);\n\n for (let i = 0; i < column; i++) {\n const iscolumnPreffered = i === column - 1;\n const columnPlaceHolderComponent = createPlaceHolderComponent(height,\n gridComponents[0][i].getLogicalSpace().width, 'left');\n const { first, second } = placeComponent(tempDefModel, columnPlaceHolderComponent, iscolumnPreffered);\n tempDefModel = first;\n for (let j = 0; j < rows; j++) {\n const rowpreffred = j === (rows - 1);\n tempDefModel = placeComponent(tempDefModel, gridComponents[j][i], rowpreffred, true).second;\n }\n tempDefModel = second;\n }\n return tempDefModel;\n}\n\nexport function negotiateDimension (node) {\n let preferred;\n let cumultiveExtraSpaceAmt = 0;\n let alteredDim;\n let nonAlteredDim;\n\n const childrenLength = node.children().length;\n\n for (let index = 0; index < childrenLength; index++) {\n let fn;\n let extraSpaceAmt;\n const child = node.children()[index];\n\n if (child.parentCut() === 'h') {\n fn = yExtraSpace;\n alteredDim = 'height';\n nonAlteredDim = 'width';\n } else {\n fn = xExtraSpace;\n alteredDim = 'width';\n nonAlteredDim = 'height';\n }\n // if vertical then get extra height from other node and push it to the preferred node.\n // for horizontal cut the same thing is to be done with width\n if (child.isPreferred()) {\n // push extra space in sink. Execute it when all non preferred space are computed.\n preferred = child;\n\n continue; // eslint-disable-line no-continue\n }\n // reduce own height and save it in a var\n cumultiveExtraSpaceAmt += (extraSpaceAmt = fn(child));\n child.boundBox()[alteredDim] -= extraSpaceAmt;\n // update nonaltered dim from parent for any change which happened during negotiation\n child.boundBox()[nonAlteredDim] = child.parent().boundBox()[nonAlteredDim];\n\n negotiateDimension(child);\n }\n\n if (preferred) {\n preferred.boundBox()[alteredDim] += cumultiveExtraSpaceAmt;\n preferred.boundBox()[nonAlteredDim] = preferred.parent().boundBox()[nonAlteredDim];\n negotiateDimension(preferred);\n }\n}\n\nexport function computePosition (node) {\n node.children().forEach((child, i, children) => {\n const boundBox = determineBoundBox(child.boundBox(), i, children, child);\n child.boundBox(boundBox);\n computePosition(child);\n });\n}\n\nexport function allocateBoundingBox (node) {\n const totalWeight = node.children()\n .map(child => child.model().ratioWeight())\n .reduce((carry, val) => carry + val, 0);\n\n node.children().forEach((child, i, children) => {\n const lastSibling = children[i - 1];\n const ratio = child.model().ratioWeight() / totalWeight;\n\n if (child.parentCut() === 'h') {\n child.boundBox({\n top: i ? lastSibling.boundBox().top + lastSibling.boundBox().height : 0,\n left: child.parent().boundBox().left,\n height: child.parent().boundBox().height * ratio,\n width: child.parent().boundBox().width\n });\n } else {\n child.boundBox({\n top: child.parent().boundBox().top,\n left: i ? lastSibling.boundBox().left + lastSibling.boundBox().width : 0,\n height: child.parent().boundBox().height,\n width: child.parent().boundBox().width * ratio\n });\n }\n allocateBoundingBox(child);\n });\n}\n\n","import { getNodeId } from '../helper';\nimport { LayoutComponent } from '../../layout-component';\n\nclass Node {\n constructor (data) {\n this._model = data;\n this._parent = null;\n this._children = [];\n this._parentCut = null;\n this._boundBox = {\n top: null,\n left: null,\n height: null,\n width: null\n };\n\n this._id = this._model.host() instanceof LayoutComponent && this._model.host().renderAt() ?\n this._model.host().renderAt() :\n getNodeId();\n }\n\n addChildren (entries) {\n this._children.push(...entries);\n entries.forEach((e) => { e.parent(this); });\n }\n\n isRoot () {\n return this._parent === null;\n }\n\n isLeaf () {\n return !this._children.length;\n }\n\n getCutType () {\n return this._model.cut();\n }\n\n isPreferred () {\n return !!this._model.preferred();\n }\n\n children (children) {\n if (children) {\n this._children = children;\n }\n return this._children;\n }\n\n parent (parent) {\n if (parent) {\n this._parent = parent;\n }\n return this._parent;\n }\n\n parentCut (parentCut) {\n if (parentCut) {\n this._parentCut = parentCut;\n }\n return this._parentCut;\n }\n\n id (id) {\n if (id) {\n this._id = id;\n }\n return this._id;\n }\n\n model (model) {\n if (model) {\n this._model = model;\n }\n return this._model;\n }\n\n boundBox (bound) {\n if (bound) {\n this._boundBox = {\n top: bound.top,\n left: bound.left,\n height: bound.height,\n width: bound.width\n };\n }\n return this._boundBox;\n }\n /**\n * function to search a node and update it with the config provided.\n * @param {Object} nodeconfig\n */\n updateNode (nodeconfig) {\n if (this._id === nodeconfig._id) {\n this._model.cut(nodeconfig.cut);\n this._model.ratioWeight(nodeconfig.ratioWeight);\n } else {\n this._children.forEach((node) => {\n if (node._id === nodeconfig._id) {\n node.model.cut(nodeconfig.cut);\n node.model.ratioWeight(nodeconfig.ratioWeight);\n return;\n }\n this.searchNode(node, nodeconfig);\n });\n }\n }\n\n // Recursive function to search a node\n searchNode (node, nodeconfig) {\n node.children().forEach((childNode) => {\n if (childNode.id() === nodeconfig._id) {\n childNode.model().cut(nodeconfig.cut);\n childNode.model().ratioWeight(nodeconfig.ratioWeight);\n } else {\n this.searchNode(childNode, nodeconfig);\n }\n });\n }\n\n /**\n * function to delete a node from tree Structure.\n * @param {String} nodeId - node Id of the Node\n */\n delete (nodeId) {\n this._children.forEach((node) => {\n if (node.id() === nodeId) {\n const index = this._children.indexOf(node);\n this._model.lanes().splice(index, 1);\n }\n this.deleteSearchNode(node, nodeId);\n });\n }\n\n // Recursive function to search a node\n deleteSearchNode (node, nodeId) {\n node.children().forEach((childNode) => {\n if (childNode.id() === nodeId) {\n const index = node.children().indexOf(childNode);\n node.model().lanes().splice(index, 1);\n } else {\n this.deleteSearchNode(childNode, nodeId);\n }\n });\n }\n}\n\nexport default Node;\n","import Node from '../tree';\nimport {\n allocateBoundingBox,\n negotiateDimension,\n computePosition\n} from '../helper';\n\nexport default class LayoutModel {\n constructor (measurements, config) {\n this._measurements = measurements;\n this._config = config;\n this._root = this.createTree(this._config, null);\n this.setBoundBox();\n }\n\n createTree (config, parent) {\n const node = new Node(config);\n if (parent) {\n node.parentCut(parent.getCutType());\n parent.addChildren([node]);\n } else {\n this._root = node;\n }\n for (const lane of config.lanes()) {\n this.createTree(lane, node);\n }\n\n return this._root;\n }\n\n setBoundBox () {\n this._root.boundBox({\n top: 0,\n left: 0,\n width: this._measurements.width,\n height: this._measurements.height\n });\n allocateBoundingBox(this._root);\n }\n\n setHostPosition (node) {\n node.children().forEach((child) => {\n LayoutModel.setHostSpatialConfig(child);\n this.setHostPosition(child);\n });\n }\n\n static setHostSpatialConfig (node) {\n const bb = node.boundBox();\n const host = node.model().host();\n if (host && host.setSpatialConfig) {\n const conf = {\n x: bb.left,\n y: bb.top,\n width: bb.width,\n height: bb.height,\n renderAt: node.id()\n };\n host.setSpatialConfig(conf);\n }\n }\n\n negotiate () {\n negotiateDimension(this._root);\n computePosition(this._root);\n return this;\n }\n\n broadcast () {\n this.setHostPosition(this._root);\n return this;\n }\n\n tree () {\n return this._root;\n }\n}\n","/* eslint no-undef: \"off\" */\n/* eslint default-case: \"off\" */\nexport class Utils {\n static isDOMElement (element) {\n return element instanceof Element;\n }\n\n static getID (element) {\n return element.id;\n }\n\n static getElement (id) {\n return document.getElementById(id);\n }\n\n static findContainer (data) {\n return data.filter(coordinate => coordinate.parent == null)[0];\n }\n /**\n * static method to remove the div\n * @param {} divId - div ID to be removed.\n */\n static removeDiv (divId) {\n if (document.getElementById(divId) !== null) { document.getElementById(divId).remove(); }\n }\n}\n","import { DEFAULT_CLASS_NAME } from '../constants/defaults';\nimport { LayoutComponent } from '../layout-component';\n\nexport default class DataPoint {\n constructor (node) {\n this._node = node;\n this._className = node.model().host() instanceof LayoutComponent ?\n node.model().host().className() : DEFAULT_CLASS_NAME;\n }\n\n node () {\n return this._node;\n }\n\n hasHost () {\n return this._node.model().host() instanceof LayoutComponent;\n }\n\n className () {\n return this._className || DEFAULT_CLASS_NAME;\n }\n}\n","import { getnodePoints } from './helper';\n\nexport class DataParser {\n constructor (data) {\n this._data = data;\n }\n\n defaultDataPointLogic () {\n const nodepoints = [];\n getnodePoints(this._data, nodepoints);\n return nodepoints;\n }\n\n}\n","import DataPoint from './data-point';\n\nexport const getnodePoints = (node, nodepoints) => {\n const datapoint = new DataPoint(node);\n nodepoints.push(datapoint);\n node.children().forEach((child) => {\n getnodePoints(child, nodepoints);\n });\n};\n","import { DataParser } from './data-parser';\n\nexport class HTMLDataAdapter extends DataParser {\n getCoordinates () {\n return super.defaultDataPointLogic();\n }\n}\n","export class Renderer {\n\n initRenderer (node, tree) {\n node.__logicalTree = tree;\n }\n}\n","import { HTMLDataAdapter } from '../data-adapters/html-data';\nimport { Utils } from '../utils';\nimport { Renderer } from './renderer';\n\nexport class HTMLRenderer extends Renderer {\n constructor (data) {\n super();\n this._data = data;\n this._coordinates = new HTMLDataAdapter(this._data).getCoordinates();\n }\n\n createhtml (mount, className) {\n const mainDiv = mount;\n super.initRenderer(mainDiv, this._data); // Initialise node with layout id\n this.parentDiv = this.createAndCustomiseParent(className);\n this._coordinates.forEach((node) => {\n if (node.hasHost()) {\n const host = node.node();\n this.parentDiv.appendChild(this.createAndPositionDiv({ ...host.boundBox(),\n id: host.id(),\n className: node.className() }));\n }\n });\n mainDiv.appendChild(this.parentDiv);\n }\n\n createAndPositionDiv (config) {\n const { top, left, height, width, className, id } = config;\n const existingDiv = document.getElementById(id);\n const div = existingDiv || document.createElement('div');\n div.style.position = 'absolute';\n div.style.left = `${left}px`;\n div.style.top = `${top}px`;\n div.style.height = `${height}px`;\n div.style.width = `${width}px`;\n div.id = id;\n div.className = className;\n return div;\n }\n\n createAndCustomiseParent (className) {\n const container = Utils.findContainer(this._coordinates);\n const host = container.node();\n const parentDiv = this.createAndPositionDiv({ ...host.boundBox(),\n id: host.id(),\n className: container.className() });\n parentDiv.className = className;\n parentDiv.style.position = 'relative';\n return parentDiv;\n }\n\n coordinates () {\n return this._coordinates;\n }\n}\n","import { HTMLRenderer } from '../renderers/html-renderer';\nimport { LayoutComponent } from '../layout-component';\n\nexport const getChildNode = (context, config) =>\n context.renderer().createAndPositionDiv(config);\n\nexport const findNode = (context, nodeID) =>\n context.renderer().coordinates().find(point => point.node().id() === nodeID);\n\nexport const renderHTML = (context) => {\n context.renderer(new HTMLRenderer(context.data()));\n context.renderer().createhtml(context.mount(), context.className());\n};\n\nexport const drawLayout = (context) => {\n switch (context.renderer()) {\n case 'html' :\n renderHTML(context);\n break;\n default:\n renderHTML(context);\n }\n};\n\nexport const drawComponent = (componentData) => {\n componentData.children().forEach((node) => {\n const host = node.model().host();\n if (host instanceof LayoutComponent) {\n host.draw();\n }\n drawComponent(node);\n });\n};\n\nexport const removeElement = (elemID) => {\n document.removeElement(document.getElementById(elemID));\n};\n\nexport const resolveAligment = (context, componentData) => {\n componentData.children().forEach((component) => {\n const host = component.model().host();\n if (host instanceof LayoutComponent && host.alignWith()) {\n let newNodeConfig = {};\n const point = findNode(context, component.id()).node();\n const node = point.boundBox();\n const refNode = findNode(context, context.componentMap().get(host.alignWith()).renderAt())\n .node()\n .boundBox();\n switch (host.alignment()) {\n case 'left':\n newNodeConfig = {\n top: node.top,\n left: refNode.left,\n height: node.height,\n width: Math.abs(node.width - Math.abs(refNode.left - node.left))\n };\n break;\n\n case 'right':\n newNodeConfig = {\n top: node.top,\n left: node.left,\n height: node.height,\n width: Math.abs(node.width - Math.abs(node.left + node.width - (refNode.left + refNode.width)))\n };\n break;\n\n case 'top':\n newNodeConfig = {\n top: refNode.top,\n left: node.left,\n height: Math.abs(node.height - Math.abs(refNode.top - node.top)),\n width: node.width\n };\n break;\n\n case 'bottom':\n newNodeConfig = {\n top: node.top,\n left: node.left,\n height: Math.abs(node.top - refNode.top + refNode.height),\n width: node.width\n };\n break;\n\n case 'h-center':\n newNodeConfig = {\n top: node.top,\n left: refNode.left,\n height: node.height,\n width: refNode.width\n };\n break;\n\n case 'v-center':\n newNodeConfig = {\n top: refNode.top,\n left: node.left,\n height: refNode.top,\n width: node.width\n };\n break;\n default:\n break;\n }\n // check if model in parent component\n Object.assign(newNodeConfig, { id: point.id(), className: host.className() });\n context.renderer().createAndPositionDiv(newNodeConfig);\n context.componentMap().get(host.name()).setSpatialConfig({\n x: newNodeConfig.left,\n y: newNodeConfig.top,\n height: newNodeConfig.height,\n width: newNodeConfig.width\n\n });\n }\n resolveAligment(context, component);\n });\n};\n","import { Utils } from '../utils';\nimport { drawLayout, resolveAligment, drawComponent } from './helper';\n\nexport class DrawingManager {\n constructor (data, renderer, container) {\n this._data = data.tree;\n this._componentMap = data.componentMap;\n this._layoutClassName = data.layoutClassName;\n this._renderer = renderer;\n this._mount = Utils.isDOMElement(container) ? container : Utils.getElement(container);\n }\n\n draw () {\n drawLayout(this);\n resolveAligment(this, this._data);\n drawComponent(this._data);\n return this;\n }\n\n data (data) {\n if (data) {\n this._data = data;\n }\n return this._data;\n }\n\n componentMap (param) {\n if (param) {\n this._componentMap = param;\n }\n return this._componentMap;\n }\n\n className (param) {\n if (param) {\n this._layoutClassName = param;\n }\n return this._layoutClassName;\n }\n\n renderer (param) {\n if (param) {\n this._renderer = param;\n }\n return this._renderer;\n }\n\n mount (param) {\n if (param) {\n this._mount = param;\n }\n return this._mount;\n }\n}\n","import DefinitionModel from './definitionModel';\nimport { prepareTargetComponentMap, getComponent, placeComponent, placeGridComponent } from '../helper';\n\nexport default class DefinitionManager {\n constructor (componentMap, sequence, totalHeight, totalWidth) {\n this._componentMap = componentMap;\n this._prioritySequence = sequence;\n this._totalHeight = totalHeight;\n this._totalWidth = totalWidth;\n this._targetComponentMap = null;\n }\n\n // create the config model\n generateConfigModel () {\n prepareTargetComponentMap(this);\n const canvasComponent = this._targetComponentMap.get('canvas');\n const definitionModel = new DefinitionModel({});\n let tempDefModel = definitionModel;\n definitionModel.remainingHeight(this._totalHeight);\n definitionModel.remainingWidth(this._totalWidth);\n\n let componentRef = null;\n\n this._prioritySequence.forEach((name) => {\n componentRef = getComponent(canvasComponent, name);\n if (name !== 'grid') {\n tempDefModel = placeComponent(tempDefModel, componentRef).second;\n } else {\n tempDefModel = placeGridComponent(tempDefModel, componentRef.component);\n }\n });\n return definitionModel;\n }\n\n componentMap (param) {\n if (param) {\n this._componentMap = param;\n }\n return this._componentMap;\n }\n\n targetComponentMap (param) {\n if (param) {\n this._targetComponentMap = param;\n }\n return this._targetComponentMap;\n }\n}\n","import { sanitizeConfig } from './helper';\n\nexport class LayoutDef {\n constructor () {\n this._componentMap = new Map();\n this._layoutDefinition = null;\n }\n\n addComponent (component) {\n this._componentMap.set(component.name(), component);\n }\n\n layoutDefinition (def) {\n if (def) {\n this._layoutDefinition = def;\n }\n return this._layoutDefinition;\n }\n\n addMultipleComponent (componentArray) {\n componentArray.forEach((comp) => {\n this.addComponent(comp);\n });\n }\n\n sanitizedDefinition () {\n sanitizeConfig(this, this._layoutDefinition);\n return this.layoutDefinition();\n }\n\n componentMap () {\n return this._componentMap;\n }\n resetComponentMap () {\n this._componentMap.clear();\n }\n}\n","import DefinitionManager from '../layout-definition/definition-manager';\n\nexport function sanitizeConfig (context, hostObj) {\n const hostID = hostObj.host();\n if (hostObj.lanes() && hostObj.lanes().length) {\n hostObj.lanes().forEach(childHost => sanitizeConfig(context, childHost));\n }\n if (hostID != null && typeof (hostID) === 'string') {\n if (context.componentMap().get(hostID) !== undefined) {\n hostObj.host(context.componentMap().get(hostID));\n }\n }\n}\n\nexport function calLayOutDef (context) {\n const { height, width } = context.dimension();\n const defManager = new DefinitionManager(context.layoutDef().componentMap(),\n context.prioritySequence(),\n height,\n width);\n const genLayoutdef = defManager.generateConfigModel();\n return genLayoutdef;\n}\n","import {\n LayoutModel\n} from '../layout-definition';\n\nimport {\n DEFAULT_WIDTH,\n DEFAULT_HEIGHT\n} from '../constants/defaults';\n\nimport { DrawingManager } from '../drawing-manager';\nimport { Utils } from '../utils';\nimport { LayoutDef } from './layout-def';\nimport { calLayOutDef } from './helper';\n\nexport default class LayoutManager {\n constructor (conf) {\n this._renderAt = conf.renderAt;\n this._layoutClassName = conf.className;\n this._dimension = {\n width: conf.width || DEFAULT_WIDTH,\n height: conf.height || DEFAULT_HEIGHT\n };\n\n this._skeletonType = conf.skeletonType || 'html';\n this._layoutDefinition = null;\n this._layoutDef = new LayoutDef();\n this._drawingManager = null;\n this._prioritySequence = [];\n this.tree = null;\n this._rootNodeID = null;\n }\n\n layoutDef (param) {\n if (param) {\n this._layoutDef = param;\n }\n return this._layoutDef;\n }\n\n prioritySequence (param) {\n if (param) {\n this._prioritySequence = param;\n }\n return this._prioritySequence;\n }\n\n dimension (param) {\n if (param) {\n Object.assign(this._dimension, param);\n }\n return this._dimension;\n }\n\n addComponent (component) {\n this._layoutDef.addComponent(component);\n }\n\n addMultipleComponent (componentArray) {\n this._layoutDef.addMultipleComponent(componentArray);\n }\n\n resetNode (node) {\n if (this.con) {\n this.con.resetNode(node);\n }\n }\n\n /**\n * function to update the node and rerender the layout.\n * @param {} config - node configuration to change.\n */\n updateNode (config) {\n this.tree.updateNode(config);\n this._layoutDefinition = this.tree.model;\n this.compute();\n }\n\n compute () {\n //----\n if (Utils.isDOMElement(this._renderAt)) {\n this._renderAt._layout = this;\n } else {\n document.getElementById(this._renderAt)._layout = this;\n }\n //-----\n this._layoutDefinition = calLayOutDef(this);\n this._layoutDef.layoutDefinition(this._layoutDefinition);\n this._layoutDefinition = this._layoutDef.sanitizedDefinition();\n this._layout = new LayoutModel({\n width: this._dimension.width,\n height: this._dimension.height\n },\n this._layoutDefinition);\n this.tree = this._layout.negotiate().tree();\n this._layout.broadcast();\n this._drawingManager = new DrawingManager({\n tree: this.tree,\n componentMap: this._layoutDef.componentMap(),\n layoutClassName: this._layoutClassName\n }, this._skeletonType, this._renderAt);\n\n if (this._rootNodeID) {\n this.tree.id(this._rootNodeID);\n } else {\n this._rootNodeID = this.tree.id();\n }\n // this will draw all the components by calling their draw method\n this._drawingManager.draw();\n }\n\n getRootNodeId () {\n return this._rootNodeID;\n }\n\n /**\n * This function takes the LayoutComponents and Register them in component store\n * @param {Array} layoutComponents\n */\n registerComponents (layoutComponents) {\n this._prioritySequence.length = 0;\n this._layoutDef.resetComponentMap();\n layoutComponents.forEach((container) => {\n if (container) {\n this._prioritySequence.push(container.name());\n this.addComponent(container);\n if (container.name() === 'grid') {\n container.component.forEach((componentArr) => {\n componentArr.forEach((compo) => {\n this.addComponent(compo);\n });\n });\n }\n }\n });\n return this;\n }\n\n getComponent (componentName) {\n return this._layoutDef.componentMap().get(componentName);\n }\n\n renderAt (mount) {\n if (mount) {\n this._renderAt = mount;\n }\n return this._renderAt;\n }\n}\n","import { isEqual, STATE_NAMESPACES, selectElement, getValueParser } from 'muze-utils';\nimport { VisualGroup } from '@chartshq/visual-group';\nimport { ROWS, COLUMNS, COLOR, SHAPE, SIZE, DETAIL, DATA, CONFIG }\n from '../constants';\nimport { canvasOptions } from './local-options';\nimport { LayoutManager } from '../../../layout/src/tree-layout';\n\n/**\n * Instantiate high level components. Canvas knows what all high level component it has.\n * @nice-to-have dynamic high level components.\n * - Is it even required ?\n * - Reactive to source (canvas) streaming ?\n * @param {*} context Canvas instance\n * @return {Object.} Arrays of Title, visualGroup, Legend\n */\nexport const initCanvas = (context) => {\n const reg = context._registry.components;\n\n return [new reg.VisualGroup(context._registry, Object.assign({\n throwback: context._throwback\n }, context.dependencies()))];\n};\n\nexport const fixScrollBarConfig = (config) => {\n config.scrollBar.thickness = Math.min(50, Math.max(10, config.scrollBar.thickness));\n return config;\n};\n\nexport const setLayoutInfForUnits = (context) => {\n const layoutManager = context._layoutManager;\n const boundBox = layoutManager.getComponent('grid').getBoundBox();\n const valueMatrix = context.composition().visualGroup.matrixInstance().value;\n const parentContainer = selectElement(`#${layoutManager.getRootNodeId()}`).node();\n valueMatrix.each((cell) => {\n cell.valueOf().parentContainerInf({\n el: parentContainer,\n dimensions: boundBox\n });\n });\n};\n\n/**\n *\n *\n * @memberof Canvas\n */\nexport const dispatchProps = (context) => {\n const lifeCycleManager = context.dependencies().lifeCycleManager;\n lifeCycleManager.notify({ client: context, action: 'beforeupdate' });\n const visualGroup = context.composition().visualGroup;\n\n const allOptions = context._allOptions;\n for (const key in allOptions) {\n const value = context[key]();\n if (value !== null) {\n visualGroup[key] && visualGroup[key](value);\n }\n }\n const { invalidValues } = context.config();\n\n visualGroup.valueParser(getValueParser(invalidValues));\n visualGroup.createMatrices();\n context._cachedProps = {};\n lifeCycleManager.notify({ client: context, action: 'initialized' });\n lifeCycleManager.notify({ client: context, action: 'updated' });\n};\n\nconst equalityChecker = (props, params) => {\n let checker = () => false;\n return !props.every((option, i) => {\n switch (option) {\n case ROWS:\n case COLUMNS:\n case DETAIL:\n checker = isEqual('Array');\n break;\n\n case SHAPE:\n case SIZE:\n case COLOR:\n case DATA:\n case CONFIG:\n checker = isEqual('Object');\n break;\n default:\n checker = () => true;\n break;\n }\n const oldVal = params[i][0];\n const newVal = params[i][1];\n\n return checker(oldVal, newVal);\n });\n};\n\nconst updateChecker = (props, params) => props.every((option, i) => {\n const val = params[i][1];\n switch (option) {\n case ROWS:\n case COLUMNS:\n return val !== null;\n\n case DATA:\n return val && !val.isEmpty();\n\n default:\n return true;\n\n }\n});\n\nexport const notifyAnimationEnd = (context) => {\n const centerMatrix = context.layout().viewInfo().viewMatricesInfo.matrices.center[1] || [];\n const promises = [];\n centerMatrix.forEach((cellArr) => {\n cellArr.forEach((cell) => {\n promises.push(cell.valueOf().done());\n });\n });\n const lifeCycleManager = context.lifeCycle();\n if (promises.length) {\n Promise.all(promises).then(() => {\n // Update life cycle\n lifeCycleManager.notify({ client: context, action: 'drawn' });\n const animDonePromises = [];\n\n centerMatrix.forEach((cellArr) => {\n cellArr.forEach((cell) => {\n cell.valueOf().layers().forEach((layer) => {\n animDonePromises.push(layer.animationDone());\n });\n });\n });\n\n [context.xAxes(), context.yAxes()].forEach((axisArr) => {\n axisArr = axisArr || [];\n axisArr.forEach((axes) => {\n axes.forEach((axisInst) => {\n animDonePromises.push(axisInst.animationDone());\n });\n });\n });\n\n Promise.all(animDonePromises).then(() => {\n lifeCycleManager.notify({ client: context, action: 'animationend' });\n });\n });\n } else {\n lifeCycleManager.notify({ client: context, action: 'animationend' });\n }\n};\n\nexport const setupChangeListener = (context) => {\n const store = context._store;\n\n const allOptions = Object.keys(context._allOptions);\n const props = [...allOptions, ...Object.keys(canvasOptions)];\n const nameSpaceProps = [...allOptions, ...Object.keys(canvasOptions)].map(prop =>\n `${STATE_NAMESPACES.CANVAS_LOCAL_NAMESPACE}.${prop}`);\n store.registerChangeListener(nameSpaceProps, (...params) => {\n let updateProps = equalityChecker(props, params);\n updateProps = updateChecker(props, params);\n\n // inform attached board to rerender\n if (updateProps && context.mount()) {\n dispatchProps(context);\n context.render();\n }\n notifyAnimationEnd(context);\n }, true);\n};\n\nexport const applyInteractionPolicy = (firebolt) => {\n const canvas = firebolt.context;\n const visualGroup = canvas.composition().visualGroup;\n if (visualGroup) {\n const valueMatrix = visualGroup.matrixInstance().value;\n const interactionPolicy = firebolt._interactionPolicy;\n interactionPolicy(valueMatrix, firebolt);\n const crossInteractionPolicy = firebolt._crossInteractionPolicy;\n const behaviours = crossInteractionPolicy.behaviours;\n const sideEffects = crossInteractionPolicy.sideEffects;\n valueMatrix.each((cell) => {\n const unitFireBolt = cell.valueOf().firebolt();\n for (const key in behaviours) {\n unitFireBolt.changeBehaviourStateOnPropagation(key, behaviours[key]);\n }\n for (const key in sideEffects) {\n unitFireBolt.changeSideEffectStateOnPropagation(key, sideEffects[key]);\n }\n });\n }\n};\n\n/**\n * Sets the rotation for all x axes if any axis has the rotation config set in the\n * entire view\n *\n * @param {Array} columns Column cells that contain the axes cells\n */\nexport const setLabelRotationForAxes = (context) => {\n let rotation = 0;\n\n const xAxes = context.xAxes() || [];\n\n (() => {\n for (let i = 0; i < xAxes.length; i++) {\n for (let j = 0; j < xAxes[i].length; j++) {\n const rotationVal = xAxes[i][j].renderConfig().labels.rotation;\n if (rotationVal && rotationVal !== 0) {\n rotation = rotationVal;\n return;\n }\n }\n }\n })();\n\n if (rotation) {\n xAxes.forEach((axes) => {\n axes.forEach((axis) => {\n axis.renderConfig({ labels: { rotation } });\n axis.smartTicks(axis.setTickConfig());\n });\n });\n }\n};\n\nexport const createGroupState = (context) => {\n const [globalState, localState] = VisualGroup.getState();\n const store = context._store;\n store.append('app.group', globalState);\n store.append('local.group', localState);\n};\n\nexport const removeChild = (mount) => {\n while (mount.firstChild) {\n mount.removeChild(mount.firstChild);\n }\n};\n\nexport const createLayoutManager = () => {\n const layoutManager = new LayoutManager({\n className: 'muze-group-container'\n });\n return layoutManager;\n};\n","/**\n * This is the global options semantics based on which setters getters are created and reactivity is initiated.\n * Format\n * PROPERTRY_NAME: {\n * value: // default value of the property,\n * meta: {\n * typeCheck: // The setter value will be checked using this. If the value is function then the setter value\n * // is passed as args.\n * typeExpected: // The output of typecheck action will be tested against this. Truthy value will set the\n * // value to the setter\n * sanitizaiton: // Need for sanitization before type is checked\n * }\n * }\n * @module GlobalOptions\n */\n\nimport { intSanitizer, mergeRecursive, DataModel } from 'muze-utils';\nimport { fixScrollBarConfig } from './canvas/helper';\nimport { DEFAULT_CONFIG } from './defaults';\n\nexport default {\n data: {\n value: null,\n meta: {\n typeCheck: d => d instanceof DataModel\n }\n },\n width: {\n value: 0,\n meta: {\n sanitization: intSanitizer,\n typeCheck: Number.isInteger\n }\n },\n height: {\n value: 0,\n meta: {\n sanitization: intSanitizer,\n typeCheck: Number.isInteger\n }\n },\n minUnitWidth: {\n value: 50,\n meta: {\n sanitization: intSanitizer,\n typeCheck: Number.isInteger\n }\n },\n minUnitHeight: {\n value: 50,\n meta: {\n sanitization: intSanitizer,\n typeCheck: Number.isInteger\n }\n },\n config: {\n value: null,\n meta: {\n typeCheck: 'constructor',\n typeExpected: 'Object',\n sanitization: (config, oldConfig) => {\n // Reset the configuration when null is passed\n const oldConf = mergeRecursive({}, config === null ? {} : oldConfig);\n const defConfig = mergeRecursive(oldConf, DEFAULT_CONFIG);\n let newConf = mergeRecursive(defConfig, config);\n newConf = fixScrollBarConfig(newConf);\n\n return newConf;\n }\n\n }\n }\n};\n","/**\n * This file exports constants that will be used to\n * create the state store of the table layout.\n */\n/**\n * The index of top, bottom and center in the matrix\n */\nexport const VIEW_INDEX = {\n top: 0,\n center: 1,\n bottom: 2\n};\n\nexport const ROW_MATRIX_INDEX = {\n 0: 'top',\n 1: 'center',\n 2: 'bottom'\n};\n\nexport const COLUMN_MATRIX_INDEX = {\n 0: 'left',\n 1: 'middle',\n 2: 'right'\n};\n\n/**\n * The width of the grid suppied by the user.\n */\nexport const GRID_WIDTH = 'width';\n\n/**\n * The height of the grid supplied by the user.\n */\nexport const GRID_HEIGHT = 'height';\n\n/**\n * The border for the grid\n */\nexport const BORDER = 'border';\n\n /**\n * The index of the first visible row in view matrix.\n */\nexport const ROW_POINTER = 'rowPointer';\n\n/**\n * The index of the first visible column in the view matrix.\n */\nexport const COLUMN_POINTER = 'columnPointer';\n\n/**\n * Flag to specify whether row sizes should be equal.\n */\nexport const ROW_SIZE_IS_EQUAL = 'isRowSizeEqual';\n\n/**\n * Flag to specify whether column sizes are equal.\n */\nexport const COLUMN_SIZE_IS_EQUAL = 'isColumnSizeEqual';\n\n/**\n * Field to store an array an of the widths of visible columns.\n * @computed\n */\nexport const COLUMN_WIDTHS = 'visibleColumnWidths';\n\n/**\n * Field to store an array of heights of visible rows.\n * @computed\n */\nexport const ROW_HEIGHTS = 'visibleRowHeights';\n\n/**\n * Field to store the width of the left matrix.\n * @computed\n */\nexport const LEFT_MATRIX_WIDTH = 'leftMatrixWidth';\n\n/**\n * Field to store the width of the right matrix.\n * @computed\n */\nexport const RIGHT_MATRIX_WIDTH = 'rightMatrixWidth';\n\n/**\n * Field to store the height of the top matrix.\n * @computed\n */\nexport const TOP_MATRIX_HEIGHT = 'topMatrixHeight';\n\n/**\n * Field to store the height of the bottom matrix.\n * @computed\n */\nexport const BOTTOM_MATRIX_HEIGHT = 'bottomMatrixHeight';\n\n/**\n * The dom element to render the layout inside.\n */\nexport const MOUNT_POINT = 'mount';\n\n/**\n * The id attribute of the left table element.\n */\nexport const LEFT_TABLE_ID = 'grid-left';\n\n/**\n * The id attribute of the right table element.\n */\nexport const RIGHT_TABLE_ID = 'grid-right';\n\n/**\n * The id attribute of the top table.\n */\nexport const TOP_TABLE_ID = 'grid-top';\n\n/**\n * The id attribute of the bottom table.\n */\nexport const BOTTOM_TABLE_ID = 'grid-bottom';\n\n/**\n * The id attribute of the center table.\n */\nexport const CENTER_TABLE_ID = 'grid-center';\n\n/**\n * The id attribute of the top div.\n */\nexport const TOP_DIV_ID = 'muze-div-top';\n\n/**\n * The id attribute of the bottom div.\n */\nexport const BOTTOM_DIV_ID = 'muze-div-bottom';\n\n/**\n * The id attribute of the center div.\n */\nexport const CENTER_DIV_ID = 'muze-div-center';\n\n/**\n * Field that indicates if the row configuration has changed\n */\nexport const HAVE_ROWS_CHANGED = 'haveRowsChanged';\n\n/**\n * Field that indicates if the column configuration has changed\n */\nexport const HAVE_COLUMNS_CHANGED = 'haveColumnsChanged';\n\n/**\n * Field that indicates if the values configuration for the center matrix has changed\n */\nexport const HAVE_VALUES_CHANGED = 'haveValuesChanged';\n\n/**\n * Field that indicates the width of row matrix\n */\nexport const ROW_MATRIX_WIDTH = 'rowMatrixWidth';\n\n/**\n * Field that indicates the height of row matrix\n */\nexport const COLUMN_MATRIX_HEIGHT = 'columnMatrixHeight';\n\n/**\n * Field that indicates the unit width of layout\n */\nexport const UNIT_WIDTH = 'unitWidth';\n\n/**\n * Field that indicates the unit height of layout\n */\nexport const UNIT_HEIGHT = 'unitHeight';\n\n/**\n * Field that indicates the style object\n */\nexport const STYLE = 'style';\n\n/**\n * Field that indicates the color configuration\n */\nexport const COLOR = 'color';\n\n/**\n * Field that indicates width\n */\nexport const WIDTH = 'width';\n\n/**\n * Field that indicates collpase property for border\n */\nexport const COLLAPSE = 'collapse';\n\n/**\n * Field that indicates spacing property for border\n */\nexport const SPACING = 'spacing';\n\n/**\n * Field that indicates spacing property for border\n */\nexport const DISTRIBUTION = 'distribution';\n\n/**\n * Field that indicates spacing property for border\n */\nexport const GUTTERSPACE = 'gutterSpace';\n\n/**\n * Field that indicates spacing property for border\n */\nexport const BREAK_PAGE = 'breakPage';\n\n/**\n * Field that indicates spacing property for border\n */\nexport const SHOW_ROW_BORDERS = 'showRowBorders';\n\n/**\n * Field that indicates spacing property for border\n */\nexport const SHOW_COL_BORDERS = 'showColBorders';\n\n/**\n * Field that indicates spacing property for border\n */\nexport const SHOW_VALUE_BORDERS = 'showValueBorders';\n\nexport const HEIGHT = 'height';\nexport const COLUMN = 'column';\nexport const ROW = 'row';\nexport const TOP = 'top';\nexport const LEFT = 'left';\nexport const RIGHT = 'right';\nexport const BOTTOM = 'bottom';\nexport const CENTER = 'center';\nexport const CLICK = 'click';\nexport const ROW_LEFT = 'rowLeft';\nexport const ROW_RIGHT = 'rowRight';\nexport const COLUMN_BOTTOM = 'colBottom';\nexport const COLUMN_TOP = 'colTop';\nexport const AUTO = 'auto';\nexport const ROW_SPAN = 'rowSpan';\nexport const COL_SPAN = 'colSpan';\nexport const ROW_ROOT = 'rowRoot';\nexport const COLUMN_ROOT = 'columnRoot';\nexport const PRIMARY = 'primary';\nexport const SECONDARY = 'secondary';\nexport const VERTICAL = 'vertical';\nexport const HORIZONTAL = 'horizontal';\n\nexport const BLANK_BORDERS = 'rgba(0,0,0,0)';\n\nexport const PAGINATION = 'pagination';\nexport const BUFFER = 'buffer';\nexport const HOLISTIC = 'holistic';\nexport const SCROLL = 'scroll';\nexport const MIDDLE = 'middle';\nexport const NO_BORDERS = null;\n\nexport const MAX_WIDTH_AVAIL_FOR_COL_MATRIX = 'maxWidthAvailableForColumnMatrix';\nexport const COLUMN_MATRIX = 'columnMatrix';\nexport const MAX_HEIGHT_AVAIL_FOR_ROW_MATRIX = 'maxHeightAvailableForRowMatrix';\nexport const ROW_MATRIX = 'rowMatrix';\n","import { sanitizeIP, mergeRecursive } from 'muze-utils';\nimport { TOP, CENTER, BOTTOM } from '../enums/constants';\n\n/*\n * This is the abstract implementation of the root layout. This takes care of common work which all the layouts\n * has to handle. The common work includes sanitizaion of inputs, update, rerender, dispose etc. This class can't be\n * used directly (as ofcourse this is an abstract implementaiton), the class which is implementing it has to implement\n * the necessary methods and gives its on visual.\n */\n\n/**\n * This class is used to create a generic layout. It can be extended to create layouts\n * of different types\n * @class GenericLayout\n */\nexport default class GenericLayout {\n\n /**\n * Creates an instance of TableLayout.\n * @param {HTMLElement} mountPoint DOM element/d3 selection where the layout is to be mounted\n * @param {Object} measurement The dimensions of the layout\n * @param {Object} config configuration to be given for the layout\n * @param {Object} dependencies external dependencies.\n *\n * @memberof GenericLayout\n *\n */\n constructor (mountPoint, measurement, config, dependencies) {\n this._config = {};\n this._measurement = {};\n this._matrices = [];\n // External dependencies to be included for the layout. This includes the ext global dependencies like\n // smartlabel which has one single implementation of throughout the page or per isntance\n this._dependencies = dependencies;\n\n this.measurement(measurement);\n this.mountPoint(mountPoint);\n this.config(config);\n }\n\n /**\n * Returns an object which is used to recreate the layout.\n * @return {Object} the serialized components\n */\n serialize () {\n return {\n measurement: this.measurement(),\n config: this.config(),\n matrices: this.matrices()\n };\n }\n\n /**\n * Sets/Gets the config for the layout\n * @param {Object} config configuration for the layout\n * @return {Layout|Object} Gets the Config/ Returns this instance when set\n */\n config (config) {\n if (config) {\n this._config = mergeRecursive(this._config || {}, config);\n this._config.border.width = Math.max(0, this._config.border.width);\n return this;\n }\n return this._config;\n }\n\n /**\n * Sets/Gets the measurement for the layout\n * @param {Object} measurement measurement for the layout\n * @return {Layout|Object} Gets the measurement/ Returns this instance when set\n */\n measurement (measurement) {\n if (measurement) {\n this._measurement = mergeRecursive(this._measurement || {}, measurement);\n\n return this;\n }\n return this._measurement;\n }\n\n /**\n * Sets/Gets the matrices for the layout\n * @param {Object} matrices matrices for the layout\n * @return {Layout|Object} Gets the matrices/ Returns this instance when set\n */\n matrices (matrices) {\n if (matrices) {\n this._matrices = sanitizeIP.typeObj([TOP, CENTER, BOTTOM], matrices);\n\n return this;\n }\n return this._matrices;\n }\n\n /**\n * Sets/Gets the matrix for row\n * @param {Object} matrix matrices for the layout\n * @return {Layout|Object} Gets the matrix/ Returns this instance when set\n */\n rowMatrix (matrix) {\n if (matrix) {\n this._rowMatrix = matrix;\n return this;\n }\n return this._rowMatrix;\n }\n\n /**\n * Sets/Gets the matrix for columns\n * @param {Object} matrix matrices for the layout\n * @return {Layout|Object} Gets the matrix/ Returns this instance when set\n */\n columnMatrix (matrix) {\n if (matrix) {\n this._columnMatrix = matrix;\n return this;\n }\n return this._columnMatrix;\n }\n\n /**\n * Sets/Gets the matrix for value\n * @param {Object} matrix matrices for the layout\n * @return {Layout|Object} Gets the matrix/ Returns this instance when set\n */\n centerMatrix (matrix) {\n if (matrix) {\n this._centerMatrix = matrix;\n return this;\n }\n return this._centerMatrix;\n }\n\n /**\n * Sets/Gets the mountPoint for the layout\n * @param {Object} mountPoint mountPoint for the layout\n * @return {Layout|Object} Gets the mountPoint/ Returns this instance when set\n */\n mountPoint (mountPoint) {\n if (mountPoint) {\n this._mountPoint = mountPoint;\n\n return this;\n }\n return this._mountPoint;\n }\n}\n","import * as FieldNames from '../enums/constants';\n\n/**\n * Default configuration of the layout\n * @return {Object} returns the default configuration\n */\nexport const DEFAULT_CONFIGURATION = {\n [FieldNames.BORDER]: {\n [FieldNames.STYLE]: 'solid',\n [FieldNames.COLOR]: '#d6d6d6',\n [FieldNames.WIDTH]: 2,\n [FieldNames.COLLAPSE]: true,\n [FieldNames.SPACING]: 0\n },\n [FieldNames.PAGINATION]: 'scroll',\n [FieldNames.BUFFER]: 20,\n [FieldNames.GUTTERSPACE]: { rows: [], columns: [] },\n [FieldNames.DISTRIBUTION]: { rows: [], columns: [] },\n [FieldNames.BREAK_PAGE]: { rows: [], columns: [] },\n [FieldNames.ROW_SIZE_IS_EQUAL]: false,\n [FieldNames.COLUMN_SIZE_IS_EQUAL]: false,\n [FieldNames.COLUMN_POINTER]: 0,\n [FieldNames.ROW_POINTER]: 0\n};\n\n/**\n * Default measurements for the layout\n * @return {Object} returns the default measurements\n */\nexport const DEFAULT_MEASUREMENTS = {\n [FieldNames.GRID_WIDTH]: 100,\n [FieldNames.GRID_HEIGHT]: 100,\n [FieldNames.UNIT_WIDTH]: 100,\n [FieldNames.UNIT_HEIGHT]: 100\n};\n\nexport const BLANK_BORDERS = 'rgba(0,0,0,0)';\n","/**\n * This file exports utility functions that are used across the layout module\n */\nimport { Symbols } from 'muze-utils';\nimport { PRIMARY, SECONDARY, HEIGHT, WIDTH } from '../enums/constants';\n\nconst nest = Symbols.nest;\n/**\n *\n *\n * @param {*} isTransposed\n *\n */\nconst getMeasureInfo = (isTransposed) => {\n if (isTransposed) {\n return {\n firstMeasure: HEIGHT,\n secondMeasure: WIDTH\n };\n }\n return {\n firstMeasure: WIDTH,\n secondMeasure: HEIGHT\n };\n};\n\n/**\n *\n *\n * @param {*} i\n * @param {*} page\n *\n */\nconst findInPage = (i, page) => {\n let count = 0;\n for (const x in page) {\n if (i < page[x]) {\n count = x;\n break;\n }\n }\n return count;\n};\n\n/**\n * Creates a single matrix from two matrices\n *\n * @param {Array} matrix Input matrix\n * @return {Array} Joined matrix\n * @memberof VisualMatrix\n */\nexport const combineMatrices = (matrix, config) => {\n const { isTransposed } = config;\n let joinedMatrix = matrix[0].length > 0 ? matrix[0] : matrix[1];\n if (isTransposed) {\n joinedMatrix = matrix[0].length > 0 ? [...matrix[0]] : [];\n joinedMatrix = matrix[1].length > 0 ? [...joinedMatrix, ...matrix[1]] : joinedMatrix;\n } else {\n joinedMatrix = joinedMatrix.map((row, rowIndex) => {\n let rowData = [];\n if (matrix[0].length > 0) {\n rowData = [...matrix[0][rowIndex]];\n }\n if (matrix[1].length > 0) {\n rowData = [...rowData, ...matrix[1][rowIndex]];\n }\n return rowData;\n });\n }\n return joinedMatrix;\n};\n\n/**\n * Creates a hirachical tree from the context\n *\n * @param {Object} context context for creating tree\n * @return {Object} nested tree\n */\nexport const createTree = (context) => {\n let matrixTree = {};\n let lastLevelKey = 0;\n let facet = PRIMARY;\n const nestFn = nest();\n const keys = [];\n const layoutMatrix = context._layoutMatrix;\n const primaryMatrix = context.primaryMatrix();\n const secondaryMatrix = context.secondaryMatrix();\n const { isTransposed, breakPage } = context.config();\n\n if (!isTransposed) {\n if (primaryMatrix.length === 0) {\n facet = PRIMARY;\n } else if (secondaryMatrix.length === 0) {\n facet = SECONDARY;\n } else {\n facet = primaryMatrix.length >= secondaryMatrix.length ? PRIMARY : SECONDARY;\n }\n if (primaryMatrix.length > 0) {\n for (let i = 0; i < primaryMatrix[0].length - 1; i++) {\n keys.push(i);\n }\n keys.push(primaryMatrix[0].length - 1);\n if (facet === SECONDARY || secondaryMatrix.length === 0) {\n lastLevelKey = primaryMatrix[0].length - 1;\n }\n }\n if (secondaryMatrix.length > 0) {\n const keyLength = primaryMatrix.length > 0 ? primaryMatrix[0].length : 0;\n for (let i = secondaryMatrix[0].length - 1; i > 0; i--) {\n keys.push(i + keyLength);\n }\n keys.push(keyLength);\n\n if (facet === PRIMARY) {\n lastLevelKey = keyLength;\n }\n } else {\n lastLevelKey = primaryMatrix.length > 0 ? primaryMatrix[0].length - 1 : 0;\n }\n keys.forEach((key) => {\n let counter = -1;\n return nestFn.key((d) => {\n counter++;\n return `${d[key].valueOf()}-${findInPage(counter, breakPage)}`;\n });\n });\n matrixTree = nestFn.entries(layoutMatrix);\n } else {\n if (primaryMatrix.length === 0) {\n facet = PRIMARY;\n } else if (secondaryMatrix.length === 0) {\n facet = SECONDARY;\n } else {\n facet = primaryMatrix.length >= secondaryMatrix.length ? PRIMARY : SECONDARY;\n }\n if (primaryMatrix.length > 0) {\n for (let i = 0; i < primaryMatrix.length - 1; i++) {\n keys.push(i);\n }\n // if (facet === PRIMARY) {\n keys.push(primaryMatrix.length - 1);\n // } else {\n if (facet === SECONDARY) {\n lastLevelKey = primaryMatrix.length - 1;\n }\n }\n if (secondaryMatrix.length > 0) {\n const primaryMatrixLength = primaryMatrix.length;\n for (let i = secondaryMatrix.length - 1; i > 0; i--) {\n keys.push(i + primaryMatrixLength);\n }\n // if (facet === SECONDARY) {\n keys.push(primaryMatrixLength);\n // }\n if (facet === PRIMARY) {\n lastLevelKey = primaryMatrixLength;\n }\n }\n keys.forEach((key) => {\n let counter = -1;\n return nestFn.key((d) => {\n counter++;\n return `${d[key].valueOf()}-${findInPage(counter, breakPage)}`;\n });\n });\n let newMatrix = [];\n newMatrix = layoutMatrix[0].map((col, colIndex) => layoutMatrix.map(row => row[colIndex]));\n matrixTree = nestFn.entries(newMatrix);\n }\n return { tree: matrixTree, lastLevelKey };\n};\n\n/**\n * Gives the min measues\n *\n * @param {boolean} isTransposed is column matrix\n * @param {Object} unitMeasures min measures to be given to cells\n * @return {Object} dimension min cell\n */\nexport const getMinMeasures = (isTransposed, unitMeasures) => {\n if (!isTransposed) {\n return {\n height: unitMeasures.height,\n width: 0\n };\n }\n return {\n height: 0,\n width: unitMeasures.width\n };\n};\n\n/**\n * Get the logical space from the tree\n *\n * @param {Node} item tree to be calculated\n * @param {number} measures width and height\n * @param {Array} minMeasures min measures for a cell\n * @param {Array} maxMeasure max measures for a col/row\n * @return {Object} dimension\n */\nexport const getLogicalSpace = (item, measures, minMeasures, maxMeasure = []) => {\n const { firstMeasure, secondMeasure } = measures;\n let firstMeasureValue = 0;\n let secondMeasureValue = 0;\n item.values.forEach((valueArray) => {\n let fMeasure = 0;\n let sMeasure = 0;\n valueArray.forEach((placeholder, colIndex) => {\n placeholder.setAvailableSpace();\n const space = placeholder.getLogicalSpace();\n\n sMeasure = Math.max(sMeasure, +space[secondMeasure], minMeasures[secondMeasure]);\n maxMeasure[colIndex] = Math.max(maxMeasure[colIndex] || 0, space[firstMeasure]);\n fMeasure += +maxMeasure[colIndex];\n });\n secondMeasureValue += sMeasure;\n firstMeasureValue = Math.max(firstMeasureValue, fMeasure);\n item.space = {\n [secondMeasure]: Math.ceil(secondMeasureValue),\n [firstMeasure]: Math.ceil(firstMeasureValue)\n };\n });\n return {\n [secondMeasure]: secondMeasureValue,\n [firstMeasure]: firstMeasureValue\n };\n};\n\n/**\n * Computes the logical spcae taken by the matrix tree\n *\n * @param {*} [item={}] tree to be viewed\n * @param {boolean} [isTransposed=false] is column matrix\n * @param {*} unitMeasures min measues for a cell\n * @param {Array} maxMeasure max measures for a col/row\n * @return {Object} logical space taken\n */\nexport const computeLogicalSpace = (item = {}, config, maxMeasures) => {\n const { isTransposed = false, unitMeasures } = config;\n const { firstMeasure, secondMeasure } = getMeasureInfo(isTransposed);\n const { values } = item;\n const minMeasures = getMinMeasures(isTransposed, unitMeasures);\n if (values[0].key) {\n const logicalSpace = { [firstMeasure]: 0, [secondMeasure]: 0 };\n\n values.forEach((valueItem) => {\n // Compute logical space for lowest level\n const space = computeLogicalSpace(valueItem, config, maxMeasures);\n // Set logical space for first measure\n logicalSpace[firstMeasure] = Math.max(logicalSpace[firstMeasure], space[firstMeasure],\n minMeasures[firstMeasure]);\n // Set logical space for second measure\n logicalSpace[secondMeasure] += +space[secondMeasure];\n });\n item.space = logicalSpace;\n return logicalSpace;\n }\n return getLogicalSpace(item, { firstMeasure, secondMeasure }, minMeasures, maxMeasures);\n};\n\n/**\n * Gives the space taken by a row\n *\n * @param {Array} row matrix array of rows\n * @return {Object} dimension of the row\n */\nexport const spaceTakenByRow = (row) => {\n let height = 0;\n let width = 0;\n row.forEach((col) => {\n const spaces = col.getLogicalSpace();\n height = Math.max(height, spaces.height);\n width += spaces.width;\n });\n return {\n width,\n height\n };\n};\n\n/**\n * Gives the space taken by a column\n *\n * @param {Array} matrix column matrix\n * @param {number} colIndex column index\n * @return {Object} dimension of the column\n */\nexport const spaceTakenByColumn = (matrix, colIndex) => {\n let height = 0;\n let width = 0;\n matrix.forEach((row) => {\n const col = row[colIndex];\n const spaces = col.getLogicalSpace();\n width = Math.max(width, spaces.width);\n height += spaces.height;\n });\n return {\n width,\n height\n };\n};\n\n/**\n * Creates different level matrices\n *\n * @param {Object} item matrix tree\n * @param {boolean} isTransposed is column matrix\n * @return {Object} matrix of each level\n */\nexport const createMatrixEachLevel = (item, isTransposed) => {\n if (item.values[0].key) {\n const arr = [];\n item.values.forEach((child) => {\n if (!isTransposed) {\n arr.push(...createMatrixEachLevel(child, isTransposed));\n } else {\n const eachLevel = createMatrixEachLevel(child, isTransposed);\n eachLevel.forEach((e, i) => {\n arr[i] = arr[i] || [];\n arr[i].push(...e);\n });\n }\n });\n item.matrix = arr;\n return arr;\n }\n if (!isTransposed) {\n item.matrix = item.values;\n } else {\n item.matrix = item.values[0].map((col, colIndex) => item.values.map(row => row[colIndex]));\n }\n return item.matrix;\n};\n\n/**\n * Breaks the matrix into two part\n *\n * @param {Array} matrix input matrix\n * @param {boolean} isTransposed is column matrix\n * @param {number} breakPointer point in matrix where it is to be broken\n * @return {Array} two broken matrix\n */\nexport const breakMatrix = (matrix, isTransposed, breakPointer) => {\n const primaryMatrix = [];\n const secondaryMatrix = [];\n if (isTransposed) {\n matrix.forEach((row, rowIndex) => {\n if (rowIndex >= breakPointer) {\n secondaryMatrix.push(row);\n } else {\n primaryMatrix.push(row);\n }\n });\n } else {\n matrix.forEach((row, rowIndex) => {\n row.forEach((column, columnIndex) => {\n if (columnIndex >= breakPointer) {\n secondaryMatrix[rowIndex] = secondaryMatrix[rowIndex] || [];\n secondaryMatrix[rowIndex].push(column);\n } else {\n primaryMatrix[rowIndex] = primaryMatrix[rowIndex] || [];\n primaryMatrix[rowIndex].push(column);\n }\n });\n });\n }\n return [primaryMatrix, secondaryMatrix];\n};\n\n/**\n * Distributed width returned\n *\n * @param {Object} context context for the width distibution\n * @return {number} distributed widths\n */\nexport const getDistributedWidth = (context, layoutConfig) => {\n const {\n availableWidth,\n width,\n row\n } = context;\n const {\n isDistributionEqual,\n isTransposed,\n distribution\n } = layoutConfig;\n let distSum = 0;\n if (distribution && distribution[0]) {\n distSum = distribution.reduce((t, n) => {\n t += n;\n return t;\n });\n }\n return row.map((col, colIndex) => {\n const space = col.getLogicalSpace().width;\n let distWidth = (space + (availableWidth - width) * (space / width));\n if (isTransposed) {\n if (distribution.length > 0) {\n distWidth = (availableWidth * distribution[colIndex] / distSum);\n } else if (isDistributionEqual || width === 0) {\n const rowLen = row.length;\n distWidth = (availableWidth / rowLen);\n }\n }\n return Math.floor(distWidth);\n });\n};\n\n/**\n * Distributeed heights returned\n *\n * @param {Object} context input for the height distribution\n * @return {Object} distribured heights\n */\nexport const getDistributedHeight = (context) => {\n let distSum = 0;\n let gutterSum = 0;\n let heightWithoutGutter = 0;\n const {\n isTransposed,\n distribution,\n availableHeight,\n height,\n isDistributionEqual,\n gutter,\n matrix,\n cIdx\n } = context;\n\n if (distribution && distribution[0] !== undefined) {\n distSum = distribution.reduce((t, n) => {\n t += n;\n return t;\n });\n }\n if (gutter && gutter[0] !== undefined) {\n gutterSum = gutter.reduce((t, n) => {\n t += n;\n return t;\n });\n }\n heightWithoutGutter = availableHeight - Math.floor(availableHeight * gutterSum);\n\n const colLen = matrix.length;\n return matrix.map((row, rIdx) => {\n const col = row[cIdx];\n const space = col.getLogicalSpace().height;\n let distHeight = (space + (heightWithoutGutter - height) * (space / height));\n\n if (!isTransposed) {\n if (distribution.length > 0 && colLen === distribution.length) {\n distHeight = (heightWithoutGutter * distribution[rIdx] / distSum);\n } else if (isDistributionEqual || context.height === 0) {\n distHeight = (heightWithoutGutter / colLen);\n }\n }\n return Math.floor(distHeight);\n });\n};\n\n/**\n *\n *\n * @param {*} arr\n * @param {*} beg\n * @param {*} end\n */\nexport const extraCellsRemover = (arr, beg, end) => arr.slice(beg, -end);\n\n/**\n * Creates matrix instancess\n *\n * @param {Array} [arr=[]] mutated arry\n * @param {number} depth depth of the tree\n * @param {Array} matrixInfo Details about the matrix(tree, etc) to be inserted\n * @param {boolean} layout Instance of layout\n */\nexport const createMatrixInstances = (arr = [], depth, matrixInfo, layout) => {\n const breakPointer = layout._breakPointer;\n const config = layout.config();\n const {\n isTransposed\n } = config;\n const {\n tree,\n layoutMatrix\n } = matrixInfo;\n\n if (depth === 0) {\n const brokenMatrix = breakMatrix(tree.matrix, isTransposed, breakPointer);\n arr.push({\n matrix: tree.matrix,\n primaryMatrix: brokenMatrix[0],\n secondaryMatrix: brokenMatrix[1],\n space: tree.space\n });\n return arr;\n }\n const nextLevel = depth - 1;\n tree.values.forEach((e) => {\n createMatrixInstances(arr, nextLevel, {\n tree: e,\n layoutMatrix\n }, layout);\n });\n return arr;\n};\n","import { mergeRecursive } from 'muze-utils';\n\nexport const PROPS = {\n config: {\n sanitization: (context, value) => mergeRecursive(context._config || {}, value)\n },\n maxMeasures: {},\n availableSpace: {},\n logicalSpace: {}\n};\n","import { PRIMARY } from '../enums/constants';\n/**\n *\n *\n */\nexport const defaultConfig = {\n distribution: [],\n classPrefix: 'muze',\n isDistributionEqual: true,\n unitMeasures: {\n height: 100,\n width: 100,\n border: 1\n },\n isTransposed: false,\n facet: PRIMARY,\n extraCellLengths: []\n};\n","import { mergeRecursive, generateGetterSetters, ERROR_MSG } from 'muze-utils';\nimport {\n createTree,\n combineMatrices,\n createMatrixInstances\n } from '../utils';\nimport { PROPS } from './props';\nimport { HEIGHT, WIDTH } from '../enums/constants';\nimport { defaultConfig } from './default-config';\n\n/**\n * This class used to create column / row matrix for GridLayout\n *\n * @class VisualMatrix\n */\nexport default class VisualMatrix {\n\n /**\n *Creates an instance of VisualMatrix.\n * @param {any} matrix Two set of matrices\n * @param {any} [config={}] Configuration for VisualMatrix\n * @memberof VisualMatrix\n */\n constructor (matrix, config = {}) {\n // Prepare matrices\n this._lastLevelKey = 0;\n this._primaryMatrix = matrix[0] || [];\n this._secondaryMatrix = matrix[1] || [];\n this._maxMeasures = [];\n this._availableSpace = {};\n\n // Store the config\n generateGetterSetters(this, PROPS);\n const defCon = Object.assign({}, this.constructor.defaultConfig());\n this.config(mergeRecursive(defCon, config));\n\n this._layoutMatrix = combineMatrices([matrix[0] || [], matrix[1] || []], this.config());\n }\n\n /**\n * Computes the logical space taken by the entire matrixTree\n *\n * @return {Object} Logical space taken\n * @memberof VisualMatrix\n */\n computeLogicalSpace () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n computeViewableSpaces () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n *\n *\n * @return\n * @memberof VisualMatrix\n */\n removeExtraCells () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n getPriorityDistribution () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Calculates the depth of the tree that can be viewed\n *\n * @param {Array} widthMeasures array of widths\n * @param {Array} heightMeasures array of heights\n * @return {number} depth of the tree\n * @memberof VisualMatrix\n */\n calculateDepth () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Redistributes the provied space to all cells\n *\n * @param {*} viewableMatrix current viewport matrix\n * @param {*} width provied width\n * @param {*} height provied height\n * @return {Object} current viewports matrixes with measures\n * @memberof VisualMatrix\n */\n redistributeSpaces () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Distibutes the given space row wisely\n *\n * @param {Object} measures Redistribution information\n * @memberof VisualMatrix\n */\n redistributeViewSpaces () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Dispatch the calculated cell dimensions to all the cells\n *\n * @param {Object} measures cell dimension information\n * @return {Object} row and column heights / widths\n * @memberof VisualMatrix\n */\n getCellDimensions () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n *\n *\n * @param {*} params\n * @returns\n * @memberof VisualMatrix\n */\n primaryMatrix (...params) {\n if (params.length) {\n return this;\n }\n return this._primaryMatrix;\n }\n\n secondaryMatrix (...params) {\n if (params.length) {\n return this;\n }\n return this._secondaryMatrix;\n }\n\n tree (...params) {\n if (params.length) {\n return this;\n }\n return this._tree;\n }\n\n static defaultConfig () {\n return defaultConfig;\n }\n\n createTree () {\n const { tree, lastLevelKey } = createTree(this);\n this._lastLevelKey = lastLevelKey;\n return tree;\n }\n\n /**\n * Returns the space taken by visual matrix\n *\n * @return {Object} space taken by the matrix\n * @memberof VisualMatrix\n */\n getLogicalSpace () {\n return this.logicalSpace();\n }\n\n /**\n * Sets the provied space to the visual matrix\n *\n * @param {number} width width provided\n * @param {number} height height provided\n * @memberof VisualMatrix\n */\n setAvailableSpace (width, height) {\n this.availableSpace({ width, height });\n const tree = this.tree();\n const heightMeasures = this.populateMaxMeasures(HEIGHT, tree);\n const widthMeasures = this.populateMaxMeasures(WIDTH, tree);\n const depth = this.calculateDepth(widthMeasures, heightMeasures);\n\n this.viewableMatrix = this.createViewPortMatrix(depth);\n this.viewableMeasures = this.redistributeSpaces(width, height);\n return this;\n }\n\n /**\n * Populate the max measures in the array\n *\n * @param {Array} measures array to be filled with max measures\n * @param {Object} matrixTree matrix tree of visual matrix\n * @param {number} measure width or height\n * @param {number} [depth=0] depth of the tree that to be calculated\n * @memberof VisualMatrix\n */\n populateMaxMeasures (type, matrixTree, depth = 0, measures = []) {\n measures[depth] = Math.max(measures[depth] || 0, matrixTree.space[type]);\n if (matrixTree.values) {\n const childDepth = depth + 1;\n matrixTree.values.forEach((child) => {\n if (child.space) {\n measures = this.populateMaxMeasures(type, child, childDepth, measures);\n }\n });\n }\n return measures;\n }\n\n /**\n * Gets the viewable measures for the current viewable matrix\n *\n * @return {Object} Set of viewable measures\n * @memberof VisualMatrix\n */\n getViewableSpaces () {\n return this.viewableMeasures;\n }\n\n /**\n * Returns the matrix that can be viewed in the current viewport\n *\n * @return {Array} Set of matrices that can be viewed\n * @memberof VisualMatrix\n */\n getViewableMatrices () {\n return this.viewableMatrix;\n }\n\n /**\n * Creates the viewport that can be viewed together\n *\n * @param {number} depth maxDepth that can be viewed in the viewport\n * @return {Array} Set of matrices that can be viewed\n * @memberof VisualMatrix\n */\n createViewPortMatrix (depth) {\n const arr = [];\n createMatrixInstances(arr, depth, this.removeExtraCells(), this);\n return arr;\n }\n}\n\n","import { mergeRecursive } from 'muze-utils';\nimport {\n extraCellsRemover,\n combineMatrices,\n spaceTakenByColumn,\n getDistributedHeight,\n computeLogicalSpace,\n createMatrixEachLevel\n } from '../utils';\nimport { ROW_ROOT } from '../enums/constants';\nimport VisualMatrix from './visual-matrix';\n\n/**\n * This class used to create column / row matrix for GridLayout\n *\n * @class VisualMatrix\n */\nexport default class RowVisualMatrix extends VisualMatrix {\n\n /**\n *Creates an instance of VisualMatrix.\n * @param {any} matrix Two set of matrices\n * @param {any} [config={}] Configuration for VisualMatrix\n * @memberof VisualMatrix\n */\n constructor (matrix, config = {}) {\n super(matrix, config);\n\n this._breakPointer = (matrix[0].length > 0 ? matrix[0][0].length : 0);\n this._layoutMatrix = combineMatrices([matrix[0] || [], matrix[1] || []], this.config());\n\n // Create Tree\n this._tree = {\n key: ROW_ROOT,\n values: this.createTree()\n };\n this._logicalSpace = this.computeLogicalSpace();\n }\n\n /**\n * Computes the logical space taken by the entire matrixTree\n *\n * @return {Object} Logical space taken\n * @memberof VisualMatrix\n */\n computeLogicalSpace () {\n const matrixTree = this.tree();\n createMatrixEachLevel(matrixTree, false);\n return computeLogicalSpace(matrixTree, this.config(), this.maxMeasures());\n }\n\n computeViewableSpaces (measures) {\n const {\n maxHeights,\n maxWidths,\n height\n } = measures;\n return this.viewableMatrix.map((matrixInst, i) => {\n const cellDimOptions = { matrixInst, maxWidths, maxHeights, matrixIndex: i };\n const { widths, rowHeights, columnWidths } = this.getCellDimensions(cellDimOptions);\n const heightMeasures = [height, height];\n const columnMeasures = widths;\n\n return {\n rowHeights: {\n primary: rowHeights[0],\n secondary: rowHeights[1]\n },\n columnWidths: {\n primary: columnWidths[0],\n secondary: columnWidths[1]\n },\n height: {\n primary: heightMeasures[0],\n secondary: heightMeasures[1]\n },\n width: {\n primary: columnMeasures[0],\n secondary: columnMeasures[1]\n }\n };\n });\n }\n\n /**\n *\n *\n * @return\n * @memberof VisualMatrix\n */\n removeExtraCells () {\n const {\n isTransposed,\n extraCellLengths\n } = this.config();\n const matrix = this._layoutMatrix;\n const tree = mergeRecursive({}, this.tree());\n const begCellLen = extraCellLengths[0];\n const endCellLen = extraCellLengths[1] || Number.NEGATIVE_INFINITY;\n const layoutMatrix = !isTransposed ? extraCellsRemover(matrix, begCellLen, endCellLen) :\n matrix.slice(0).map(e => extraCellsRemover(e, begCellLen, endCellLen));\n\n tree.values = extraCellsRemover(tree.values, begCellLen, endCellLen);\n tree.matrix = extraCellsRemover(tree.matrix, begCellLen, endCellLen);\n\n return {\n tree,\n layoutMatrix\n };\n }\n\n getPriorityDistribution (measures) {\n let remainaingAvailWidth;\n let remainaingWidth;\n let cWidths = [];\n let conditions = [];\n let maxPrioritySpace = 0;\n const {\n matrix,\n width: availableWidth,\n maxMeasures: maxWidths,\n maxWidth: currentWidth,\n height\n } = measures;\n const priority = this.config().priority;\n const primaryMatrixLength = this.primaryMatrix().length ? this.primaryMatrix()[0].length : 0;\n\n const dist = [];\n\n remainaingAvailWidth = availableWidth;\n remainaingWidth = currentWidth;\n\n if (priority === 2) {\n conditions = [primaryMatrixLength - 1, primaryMatrixLength];\n // divider = Math.min(2, matrixLen);\n } else {\n conditions = priority === 0 ? [primaryMatrixLength - 1] : [primaryMatrixLength];\n // divider = Math.min(1, matrixLen);\n }\n conditions.forEach((i) => {\n dist[i] = maxWidths[i];\n maxPrioritySpace += maxWidths[i];\n remainaingAvailWidth -= dist[i];\n remainaingWidth -= dist[i];\n });\n matrix[0].forEach((e, i) => {\n if (conditions.indexOf(i) === -1) {\n dist[i] = remainaingAvailWidth * (maxWidths[i] / remainaingWidth);\n }\n });\n matrix.forEach(row => row.forEach((col, cIdx) => {\n if (conditions.indexOf(cIdx) === -1) {\n col.setAvailableSpace(dist[cIdx], height);\n\n cWidths[cIdx] = Math.max(cWidths[cIdx] || 0, Math.floor(col.getLogicalSpace().width));\n } else {\n cWidths[cIdx] = 0;\n }\n }));\n\n const prioritySpace = availableWidth - cWidths.reduce((t, n) => t + n);\n if (prioritySpace < 0) {\n cWidths = cWidths.map(() => 0);\n } else {\n conditions.forEach((i) => {\n cWidths[i] = Math.floor(prioritySpace * (dist[i] / maxPrioritySpace || 1));\n });\n }\n return cWidths;\n }\n\n /**\n * Calculates the depth of the tree that can be viewed\n *\n * @param {Array} widthMeasures array of widths\n * @param {Array} heightMeasures array of heights\n * @return {number} depth of the tree\n * @memberof VisualMatrix\n */\n calculateDepth (widthMeasures, heightMeasures) {\n let i;\n const { height } = this.availableSpace();\n\n for (i = 0; i < heightMeasures.length; i++) {\n if (heightMeasures[i] <= height) break;\n }\n\n return Math.min(widthMeasures.length - 1, i);\n }\n\n /**\n * Redistributes the provied space to all cells\n *\n * @param {*} viewableMatrix current viewport matrix\n * @param {*} width provied width\n * @param {*} height provied height\n * @return {Object} current viewports matrixes with measures\n * @memberof VisualMatrix\n */\n redistributeSpaces (width, height) {\n let maxHeights = [];\n let maxWidths = [];\n const maxMeasures = this.maxMeasures();\n\n const maxWidth = maxMeasures.reduce((t, n) => {\n t += n;\n return t;\n });\n const logicalWidths = this.getPriorityDistribution({\n matrix: this._layoutMatrix,\n maxWidth,\n maxMeasures,\n width,\n height\n });\n\n this.viewableMatrix.forEach((matrixInst) => {\n const matrix = matrixInst.matrix;\n const mWidth = 0;\n const mHeight = 0;\n const options = { mWidth, mHeight, matrix, width, height, maxHeights, maxWidths, logicalWidths };\n const measures = this.redistributeViewSpaces(options);\n maxWidths = measures.maxWidths;\n maxHeights = measures.maxHeights;\n });\n return this.computeViewableSpaces({ height, width, maxHeights, maxWidths });\n }\n\n /**\n * Distibutes the given space row wisely\n *\n * @param {Object} measures Redistribution information\n * @memberof VisualMatrix\n */\n redistributeViewSpaces (measures) {\n let cWidths = [];\n let rHeights = [];\n let mHeight = 0;\n const maxMeasures = this.maxMeasures();\n\n const {\n isDistributionEqual,\n distribution,\n isTransposed,\n gutter\n } = this.config();\n const { matrix, height, maxHeights, maxWidths, logicalWidths } = measures;\n mHeight = spaceTakenByColumn(matrix, this._lastLevelKey).height;\n\n const maxWidth = maxMeasures.reduce((t, n) => {\n t += n;\n return t;\n });\n measures.maxMeasures = maxMeasures;\n measures.maxWidth = maxWidth;\n if (maxWidth > 0) {\n cWidths = logicalWidths;\n } else {\n cWidths = maxMeasures.map(() => 0);\n }\n rHeights = getDistributedHeight({\n matrix,\n cIdx: this._lastLevelKey,\n height: mHeight,\n availableHeight: height,\n isDistributionEqual,\n distribution,\n isTransposed,\n gutter\n });\n if (maxWidths.length > 0) {\n cWidths = cWidths.map((e, i) => Math.max(e, maxWidths[0][i] || 0));\n }\n maxWidths.push(cWidths);\n for (let x = 0; x < maxWidths.length; x++) {\n maxWidths[x] = cWidths;\n }\n maxHeights.push(rHeights);\n return { maxWidths, maxHeights };\n }\n\n /**\n * Dispatch the calculated cell dimensions to all the cells\n *\n * @param {Object} measures cell dimension information\n * @return {Object} row and column heights / widths\n * @memberof VisualMatrix\n */\n getCellDimensions (measures) {\n const {\n unitMeasures\n } = this.config();\n const borderWidth = unitMeasures.border;\n const { matrixInst, maxWidths, maxHeights, matrixIndex } = measures;\n const matrix = matrixInst.matrix;\n const rowHeights = [[0], [0]];\n const columnWidths = [[0], [0]];\n const heights = [0, 0];\n const widths = [0, 0];\n const breakPointer = this._breakPointer;\n\n matrix.forEach((row, rIdx) => {\n row.forEach((cell, cIdx) => {\n const colHeight = maxHeights[matrixIndex][rIdx] || 0;\n const colWidth = maxWidths[matrixIndex][cIdx];\n\n cell.setAvailableSpace(colWidth, colHeight - borderWidth);\n\n if (rIdx === 0 && cIdx < breakPointer) {\n columnWidths[0][cIdx] = colWidth;\n widths[0] = (widths[0] || 0) + colWidth;\n } else if (rIdx === 0 && cIdx >= breakPointer) {\n columnWidths[1][cIdx - breakPointer] = colWidth;\n widths[1] = (widths[1] || 0) + colWidth;\n }\n if (cIdx === this._lastLevelKey) {\n rowHeights[0][rIdx] = colHeight;\n rowHeights[1][rIdx] = colHeight;\n }\n });\n });\n return {\n heights,\n widths,\n rowHeights,\n columnWidths\n };\n }\n}\n\n","import { mergeRecursive } from 'muze-utils';\nimport {\n extraCellsRemover,\n getDistributedWidth,\n spaceTakenByRow,\n createMatrixEachLevel,\n computeLogicalSpace\n } from '../utils';\nimport { COLUMN_ROOT } from '../enums/constants';\nimport VisualMatrix from './visual-matrix';\n\n/**\n * This class used to create column / row matrix for GridLayout\n *\n * @class VisualMatrix\n */\nexport default class ColumnVisualMatrix extends VisualMatrix {\n\n /**\n *Creates an instance of VisualMatrix.\n * @param {any} matrix Two set of matrices\n * @param {any} [config={}] Configuration for VisualMatrix\n * @memberof VisualMatrix\n */\n constructor (matrix, config = {}) {\n super(matrix, config);\n\n this._breakPointer = matrix[0].length;\n\n // Create Tree\n this._tree = {\n key: COLUMN_ROOT,\n values: this.createTree()\n };\n this._logicalSpace = this.computeLogicalSpace();\n }\n\n /**\n * Computes the logical space taken by the entire matrixTree\n *\n * @return {Object} Logical space taken\n * @memberof VisualMatrix\n */\n computeLogicalSpace () {\n const matrixTree = this.tree();\n createMatrixEachLevel(matrixTree, true);\n return computeLogicalSpace(matrixTree, this.config(), this.maxMeasures());\n }\n\n computeViewableSpaces (measures) {\n const {\n maxHeights,\n maxWidths,\n height,\n width\n } = measures;\n\n return this.viewableMatrix.map((matrixInst, i) => {\n const cellDimOptions = { matrixInst, maxWidths, maxHeights, matrixIndex: i, height };\n const {\n heights,\n rowHeights,\n columnWidths\n } = this.getCellDimensions(cellDimOptions);\n const heightMeasures = heights;\n const columnMeasures = [width, width];\n\n return {\n rowHeights: {\n primary: rowHeights[0],\n secondary: rowHeights[1]\n },\n columnWidths: {\n primary: columnWidths[0],\n secondary: columnWidths[1]\n },\n height: {\n primary: heightMeasures[0],\n secondary: heightMeasures[1]\n },\n width: {\n primary: columnMeasures[0],\n secondary: columnMeasures[1]\n }\n };\n });\n }\n\n /**\n *\n *\n * @return\n * @memberof VisualMatrix\n */\n removeExtraCells () {\n const {\n isTransposed,\n extraCellLengths\n } = this.config();\n const matrix = this._layoutMatrix;\n const tree = mergeRecursive({}, this.tree());\n const begCellLen = extraCellLengths[0];\n const endCellLen = extraCellLengths[1] || Number.NEGATIVE_INFINITY;\n const layoutMatrix = !isTransposed ? extraCellsRemover(matrix, begCellLen, endCellLen) :\n matrix.slice(0).map(e => extraCellsRemover(e, begCellLen, endCellLen));\n\n tree.values = extraCellsRemover(tree.values, begCellLen, endCellLen);\n\n tree.matrix = tree.matrix.map(e => extraCellsRemover(e, begCellLen, endCellLen));\n\n return {\n tree,\n layoutMatrix\n };\n }\n\n getPriorityDistribution (measures) {\n const {\n height,\n maxHeights\n } = measures;\n let remainaingHeight = height;\n let heightDist = [];\n let conditions = [];\n let divider = 2;\n const priority = this.config().priority;\n const primaryMatrixLength = this.primaryMatrix().length;\n\n if (priority === 2) {\n conditions = [primaryMatrixLength - 1, primaryMatrixLength];\n divider = 2;\n } else {\n conditions = priority === 0 ? [primaryMatrixLength - 1] : [primaryMatrixLength];\n divider = 1;\n }\n maxHeights.forEach((e, i) => {\n if (conditions.indexOf(i) === -1) {\n heightDist[i] = e;\n remainaingHeight -= e;\n }\n });\n if (remainaingHeight < 0) {\n heightDist = heightDist.map(() => 0);\n } else {\n conditions.forEach((e) => {\n if (remainaingHeight / divider < maxHeights[e]) {\n heightDist[e] = 0;\n } else {\n heightDist[e] = Math.min(maxHeights[e], (remainaingHeight) / divider);\n }\n });\n }\n return heightDist;\n }\n\n /**\n * Calculates the depth of the tree that can be viewed\n *\n * @param {Array} widthMeasures array of widths\n * @param {Array} heightMeasures array of heights\n * @return {number} depth of the tree\n * @memberof VisualMatrix\n */\n calculateDepth (widthMeasures) {\n let j;\n const { width } = this.availableSpace();\n\n for (j = 0; j < widthMeasures.length; j++) {\n if (widthMeasures[j] <= width) break;\n }\n return Math.min(widthMeasures.length - 1, j);\n }\n\n /**\n * Redistributes the provied space to all cells\n *\n * @param {*} viewableMatrix current viewport matrix\n * @param {*} width provied width\n * @param {*} height provied height\n * @return {Object} current viewports matrixes with measures\n * @memberof VisualMatrix\n */\n redistributeSpaces (width, height) {\n let maxHeights = [];\n let maxWidths = [];\n\n this.viewableMatrix.forEach((matrixInst) => {\n const matrix = matrixInst.matrix;\n const mWidth = 0;\n const mHeight = 0;\n const options = { mWidth, mHeight, matrix, width, height, maxHeights, maxWidths };\n const maxMeasures = this.redistributeViewSpaces(options);\n maxWidths = maxMeasures.maxWidths;\n maxHeights = maxMeasures.maxHeights;\n });\n\n return this.computeViewableSpaces({ height, width, maxHeights, maxWidths });\n }\n\n /**\n * Distibutes the given space column wisely\n *\n * @param {Object} measures Redistribution information\n * @memberof VisualMatrix\n */\n redistributeViewSpaces (measures) {\n let rHeights = [];\n const {\n matrix,\n width,\n maxHeights,\n maxWidths\n } = measures;\n const borderWidth = this.config().unitMeasures.border;\n\n const mWidth = spaceTakenByRow(matrix[this._lastLevelKey]).width;\n const cWidths = getDistributedWidth({\n row: matrix[this._lastLevelKey],\n width: mWidth,\n availableWidth: width\n }, this.config());\n\n matrix.forEach((row, rIdx) => row.forEach((col, cIdx) => {\n const oldLogicalSpace = col.getLogicalSpace();\n\n col.setAvailableSpace(cWidths[cIdx] - borderWidth, oldLogicalSpace.height);\n rHeights[rIdx] = Math.max(rHeights[rIdx] || 0, Math.floor(col.getLogicalSpace().height));\n }));\n if (maxHeights.length > 0) {\n rHeights = rHeights.map((e, i) => Math.max(e, maxHeights[0][i]));\n }\n maxHeights.push(rHeights);\n for (let x = 0; x < maxHeights.length; x++) {\n maxHeights[x] = rHeights;\n }\n maxWidths.push(cWidths);\n return { maxHeights, maxWidths };\n }\n\n /**\n * Dispatch the calculated cell dimensions to all the cells\n *\n * @param {Object} measures cell dimension information\n * @return {Object} row and column heights / widths\n * @memberof VisualMatrix\n */\n getCellDimensions (measures) {\n const {\n unitMeasures\n } = this.config();\n const borderWidth = unitMeasures.border;\n const { matrixInst, height, maxWidths, maxHeights, matrixIndex } = measures;\n const matrix = matrixInst.matrix;\n const rowHeights = [[0], [0]];\n const columnWidths = [[0], [0]];\n const heights = [0, 0];\n const widths = [0, 0];\n const breakPointer = this._breakPointer;\n\n const heightDistribution = this.getPriorityDistribution({ height, maxHeights: maxHeights[0] || [] });\n\n matrix.forEach((row, rIdx) => {\n row.forEach((cell, cIdx) => {\n const colHeight = heightDistribution[rIdx] || 0;\n const colWidth = maxWidths[matrixIndex][cIdx];\n\n cell.setAvailableSpace(colWidth - borderWidth, colHeight);\n\n if (cIdx === 0 && rIdx < breakPointer) {\n rowHeights[0][rIdx] = colHeight;\n heights[0] = (heights[0] || 0) + colHeight;\n } else if (cIdx === 0 && rIdx >= breakPointer) {\n rowHeights[1][rIdx - breakPointer] = colHeight;\n heights[1] = (heights[1] || 0) + colHeight;\n }\n if (rIdx === this._lastLevelKey) {\n columnWidths[0][cIdx] = colWidth;\n columnWidths[1][cIdx] = colWidth;\n }\n });\n });\n return {\n heights,\n widths,\n rowHeights,\n columnWidths\n };\n }\n}\n\n","import {\n HEIGHT, WIDTH, COLUMN, ROW, HORIZONTAL, VERTICAL, HOLISTIC,\n MAX_WIDTH_AVAIL_FOR_COL_MATRIX, COLUMN_MATRIX, MAX_HEIGHT_AVAIL_FOR_ROW_MATRIX, ROW_MATRIX, SCROLL\n} from '../enums/constants';\n\n/**\n * Gets measurement for an instance of visual matrix\n *\n * @param {Array} matrix instance of visual matrix\n * @param {string} type height/width\n * @return {Object} Logical height/width of the matrix\n */\nexport function getMatrixMeasurement (matrix, type) {\n if (matrix) {\n return matrix.getLogicalSpace()[type];\n }\n return 0;\n}\n\n/**\n * Sets available space for an instance of visual matrix\n *\n * @param {Array} matrix instance of visual matrix\n * @param {string} type height/width\n * @param {number} value Value of measurement\n */\nexport function setMatrixMeasurement (matrix, type, value) {\n if (matrix) {\n const spaces = matrix.getLogicalSpace();\n if (value && spaces[type] !== value) {\n type === HEIGHT ? matrix.setAvailableSpace(spaces.width, value) :\n matrix.setAvailableSpace(value, spaces.height);\n }\n }\n}\n\nconst setAvailableSpace = (matrix, widths, heights) => {\n matrix.forEach((row, rIdx) => {\n row.forEach((placeholder, cIdx) => {\n placeholder.setAvailableSpace(widths[cIdx], heights[rIdx]);\n });\n });\n};\n\nconst setViewSpaces = (layout, pointerType, viewSpaces) => {\n let pointer = layout.config()[`${pointerType}Pointer`];\n if (viewSpaces.length - 1 < pointer) {\n pointer = 0;\n layout.config({ [`${pointerType}Pointer`]: pointer });\n }\n return pointer;\n};\n\nconst paginationDetailsMap = {\n column: {\n maxMeasure: MAX_WIDTH_AVAIL_FOR_COL_MATRIX,\n matrix: COLUMN_MATRIX,\n measureType: WIDTH,\n scrollType: HORIZONTAL\n },\n row: {\n maxMeasure: MAX_HEIGHT_AVAIL_FOR_ROW_MATRIX,\n matrix: ROW_MATRIX,\n measureType: HEIGHT,\n scrollType: VERTICAL\n }\n};\n\n/**\n * This method provides the required width/height in the different pagination stages.\n * If the pagination is holistic, then only the max width/height will be provided for layouting\n * If scroll is enabled, then the entire width/height shall be provided for layouting\n * Note: width is required for scrolling the columns while height is required for scrolling rows\n *\n *\n * @param {Layout} layout Layout instance required for configuration details\n * @param {Object} measureDetails different measure details for row/column\n * @param {number} maxMeasure maximum width/height present for column/row respectively\n * @return {number} Provides the width/height based on which further calculation can occur\n */\nconst getMatrixMeasureForPagination = (layout, measureDetails, maxMeasure, buffer) => {\n const {\n pagination\n } = layout.config();\n const {\n matrix,\n measureType,\n scrollType\n } = measureDetails;\n\n switch (pagination) {\n case HOLISTIC:\n return maxMeasure;\n default: {\n const actualMeasure = getMatrixMeasurement(layout[matrix](), measureType) + buffer;\n\n if (actualMeasure > maxMeasure) {\n layout.scrollInfo({ [scrollType]: true });\n }\n return Math.max(maxMeasure, actualMeasure);\n }\n }\n};\n\n/**\n * This method uses the getMatrixMeasureForPagination function to calculate maximum measure\n * depending on the layouting algorithm used\n *\n *\n * @param {Layout} layout Layout instance required for configuration details\n * @param {string} matrixType row/column\n * @param {number} relatedMaxMeasure maximum width/height present for column/row respectively\n * @return {number} Provides the width/height based on which further calculation can occur\n */\nconst paginationMeasureGetter = (layout, matrixType, relatedMaxMeasure, buffer) =>\n getMatrixMeasureForPagination(layout, paginationDetailsMap[matrixType], relatedMaxMeasure, buffer);\n\nconst getMatrixWidthDetails = (layout) => {\n const rowMatrix = layout.rowMatrix();\n const {\n width\n } = layout.measurement();\n const {\n border,\n buffer\n } = layout.config();\n\n // Border adjustment for each cell in the central matrix\n const borderWidth = border.width;\n\n // Get width of row matrix\n const rowMatrixWidth = getMatrixMeasurement(rowMatrix, WIDTH);\n\n // Get maximum width allowed for the row matrix\n const maxRowMatrixWidth = Math.min(rowMatrixWidth + buffer, width / 2);\n\n // Get maximum width available for the column matrix\n const maxWidthAvailableForColumnMatrix = width - maxRowMatrixWidth - borderWidth;\n\n // Set width for column matrix\n const columnMatrixWidth = paginationMeasureGetter(layout, COLUMN, maxWidthAvailableForColumnMatrix, 0);\n\n return {\n rowMatrixWidth,\n maxRowMatrixWidth,\n columnMatrixWidth,\n maxWidthAvailableForColumnMatrix\n };\n};\n\nconst getHeightRequiredByColMatrix = (layout, columnMatrixWidth) => {\n const {\n height\n } = layout.measurement();\n const columnMatrix = layout.columnMatrix();\n\n // Get maximum allowed height for colum matrix\n const maxColumnMatrixHeight = Math.min(columnMatrix.getLogicalSpace().height, height / 2);\n\n // Set the computed width and max height to column matrix to determine the actual height\n // that will be taken by the column matrix\n columnMatrix.setAvailableSpace(columnMatrixWidth, maxColumnMatrixHeight);\n\n // Get the set of pages column view\n const columnViewPages = columnMatrix.getViewableSpaces();\n\n // Figuring out total space needed by current view space\n const columnViewSpace = columnViewPages[layout.config().columnPointer];\n\n // Getting height of column matrix\n const columnMatrixHeight = columnViewSpace.height.primary + columnViewSpace.height.secondary;\n\n return {\n columnMatrixHeight,\n maxColumnMatrixHeight\n };\n};\n\nconst getMatrixHeightDetails = (layout, columnMatrixWidth) => {\n const {\n height\n } = layout.measurement();\n const {\n buffer\n } = layout.config();\n\n // Get actual height required by column matrix\n const { columnMatrixHeight, maxColumnMatrixHeight } = getHeightRequiredByColMatrix(layout, columnMatrixWidth);\n\n // Based on column height, compute max height available for row matrix\n const maxHeightAvailableForRowMatrix = height - Math.min(maxColumnMatrixHeight, columnMatrixHeight);\n\n // Get height for row matrix\n const rowMatrixHeight = paginationMeasureGetter(layout, ROW, maxHeightAvailableForRowMatrix, buffer);\n\n return {\n columnMatrixHeight,\n maxColumnMatrixHeight,\n rowMatrixHeight,\n maxHeightAvailableForRowMatrix\n };\n};\n\nconst setValueMatrixMeasurements = (layout, rowViewableSpaces, columnViewableSpaces) => {\n const centerMatrix = layout.centerMatrix();\n\n const {\n border\n } = layout.config();\n const matrices = layout.matrices();\n const {\n top,\n bottom\n } = matrices;\n\n // Border adjustment for each cell in the central matrix\n const borderWidth = border.width;\n\n // Get the heights for each cell in the row matrix\n const rowHeights = [].concat(...rowViewableSpaces.map(e => e.rowHeights.primary));\n\n // Get the widths for each of the row matrix cells(primary and secondary)\n const rowWidthsPrimary = [].concat(...rowViewableSpaces.map(e => e.columnWidths.primary));\n const rowWidthsSecondary = [].concat(...rowViewableSpaces.map(e => e.columnWidths.secondary));\n\n // Get the widths for each cell in the column matrix\n const columnWidths = [].concat(...columnViewableSpaces.map(e => e.columnWidths.primary));\n\n // Get the widths for each of the column matrix cells(primary and secondary)\n const columnHeightsPrimary = columnViewableSpaces[0].rowHeights.primary;\n const columnHeightsSecondary = [].concat(...columnViewableSpaces.map(e => e.rowHeights.secondary));\n\n // Setting the available space for each cell in the centre matrix computed throught the row and\n // column matrices\n centerMatrix.forEach((matrix, rIdx) => {\n matrix.forEach((placeholder, cIdx) => {\n placeholder.setAvailableSpace(columnWidths[cIdx] - borderWidth, rowHeights[rIdx] - borderWidth);\n });\n });\n\n // Set the heights and widths for the corner matrices namely:\n // TOP_LEFT\n setAvailableSpace(top[0], rowWidthsPrimary, columnHeightsPrimary);\n // TOP_RIGHT\n setAvailableSpace(top[2], rowWidthsSecondary, columnHeightsPrimary);\n // BOTTOM_LEFT\n setAvailableSpace(bottom[0], rowWidthsPrimary, columnHeightsSecondary);\n // BOTTOM_RIGHT\n setAvailableSpace(bottom[2], rowWidthsSecondary, columnHeightsSecondary);\n};\n\nconst bufferCondition = {\n isScroll: true,\n pagination: SCROLL\n};\n\nconst getBufferFromCondition = (layout, type) => {\n const scrollInfo = layout.scrollInfo();\n const {\n pagination\n } = layout.config();\n\n const currentBufferType = {\n pagination,\n isScroll: scrollInfo[type]\n };\n\n return Object.keys(bufferCondition).every(e => bufferCondition[e] === currentBufferType[e]);\n};\n\nconst getActualBufferFromConfig = (layout) => {\n const {\n buffer\n } = layout.config();\n const [horizontalBuffer, verticalBuffer] = [HORIZONTAL, VERTICAL].map((type) => {\n if (getBufferFromCondition(layout, type)) {\n return buffer;\n }\n return 0;\n });\n\n return {\n horizontalBuffer,\n verticalBuffer\n };\n};\n/**\n * Computes the measurements of space for all matrices in the\n * layout\n *\n * @param {Object} layout Instance of grid layout\n * @return {Object} set of measurements for the layout\n */\nexport const computeLayoutMeasurements = (layout) => {\n const rowMatrix = layout.rowMatrix();\n const columnMatrix = layout.columnMatrix();\n\n // Compute the widths of the row and column matrices\n const {\n rowMatrixWidth,\n maxRowMatrixWidth,\n maxWidthAvailableForColumnMatrix,\n columnMatrixWidth\n } = getMatrixWidthDetails(layout);\n\n // Compute the heights of the row and column matrices\n const {\n columnMatrixHeight,\n rowMatrixHeight,\n maxHeightAvailableForRowMatrix\n } = getMatrixHeightDetails(layout, columnMatrixWidth);\n\n const {\n horizontalBuffer,\n verticalBuffer\n } = getActualBufferFromConfig(layout);\n rowMatrix.setAvailableSpace(maxRowMatrixWidth - verticalBuffer, rowMatrixHeight - horizontalBuffer);\n\n // Get row and columns viewable spaces\n const rowViewableSpaces = rowMatrix.getViewableSpaces();\n const columnViewableSpaces = columnMatrix.getViewableSpaces();\n\n // Set view spaces for row and columns\n setViewSpaces(layout, ROW, rowViewableSpaces);\n setViewSpaces(layout, COLUMN, columnViewableSpaces);\n\n // Set measures for each cell of the value matrix\n setValueMatrixMeasurements(layout, rowViewableSpaces, columnViewableSpaces);\n\n return {\n rowMatrixHeight: rowMatrixHeight - horizontalBuffer,\n rowMatrixWidth: rowMatrixWidth - verticalBuffer,\n maxHeightAvailableForRowMatrix: maxHeightAvailableForRowMatrix - horizontalBuffer,\n\n columnMatrixHeight,\n columnMatrixWidth,\n maxWidthAvailableForColumnMatrix\n };\n};\n","/**\n * Gets view matrices based on current pointers for row and column\n *\n * @param {Object} layout instance of layout\n * @param {number} rowPointer current row pointer\n * @param {number} columnPointer current column pointer\n * @return {Object} returns the view matrix and its relevant information\n */\nexport const getViewMatrices = (layout, rowPointer, columnPointer) => {\n const rowMatrix = layout.rowMatrix();\n const columnMatrix = layout.columnMatrix();\n const centerMatrix = layout.centerMatrix();\n const matrices = layout.matrices();\n const rowMatrices = rowMatrix.getViewableMatrices();\n const columnMatrices = columnMatrix.getViewableMatrices();\n const centralMatrixPointer = {\n row: 0,\n column: 0\n };\n\n for (let i = rowPointer - 1; i >= 0; i--) {\n const length = Math.max(rowMatrices[i].primaryMatrix.length,\n rowMatrices[i].secondaryMatrix.length);\n centralMatrixPointer.row += length;\n }\n /* istanbul ignore next */\n for (let i = columnPointer - 1; i >= 0; i--) {\n const matrix = columnMatrices[i];\n const { primaryMatrix, secondaryMatrix } = matrix;\n const length = Math.max(primaryMatrix[0] ? primaryMatrix[0].length : 0,\n secondaryMatrix[0] ? secondaryMatrix[0].length : 0);\n centralMatrixPointer.column += length;\n }\n\n matrices.top[1] = columnMatrices[columnPointer].primaryMatrix;\n matrices.bottom[1] = columnMatrices[columnPointer].secondaryMatrix;\n\n matrices.center[0] = rowMatrices[rowPointer].primaryMatrix;\n matrices.center[2] = rowMatrices[rowPointer].secondaryMatrix;\n\n const rowMatrixLen = Math.max(matrices.center[0].length, matrices.center[2].length);\n /* istanbul ignore next */\n const columnMatrixLen = Math.max(matrices.top[1][0] ? matrices.top[1][0].length : 0, matrices.bottom[1][0] ?\n matrices.bottom[1][0].length : 0);\n matrices.center[1] = centerMatrix.slice(centralMatrixPointer.row, centralMatrixPointer.row + rowMatrixLen)\n .map(matrix => matrix.slice(centralMatrixPointer.column, centralMatrixPointer.column + columnMatrixLen));\n\n return {\n matrices,\n rowPages: rowMatrices.length,\n columnPages: columnMatrices.length\n };\n};\n\nconst measureSum = measureArr => measureArr.reduce((total, measure) => total + measure, 0);\n/**\n * Returns measurements of the cells of the current matrix\n *\n * @param {Object} layout instance of layout\n * @return {Object} returns the measurements for current view matrix\n */\nexport const getViewMeasurements = (layout, maxRowHeight, maxColWidth) => {\n const rowMatrix = layout.rowMatrix();\n const columnMatrix = layout.columnMatrix();\n const {\n columnPointer,\n rowPointer\n } = layout.config();\n\n const rowSpaces = rowMatrix.getViewableSpaces()[rowPointer];\n const colSpaces = columnMatrix.getViewableSpaces()[columnPointer];\n\n const {\n rowHeights,\n width: rowMatrixWidth\n } = rowSpaces;\n const {\n columnWidths,\n height: columnMatrixHeight\n } = colSpaces;\n\n const { primary: leftWidth, secondary: rightWidth } = rowMatrixWidth;\n const { primary: topHeight, secondary: bottomHeight } = columnMatrixHeight;\n\n const centerHeight = measureSum(rowHeights.primary);\n const centerWidth = measureSum(columnWidths.primary);\n const viewWidth = [leftWidth, Math.min(centerWidth, maxColWidth), rightWidth];\n const viewHeight = [topHeight, Math.min(centerHeight, maxRowHeight), bottomHeight];\n\n return {\n viewWidth,\n viewHeight,\n actualCenterMeasures: {\n height: centerHeight,\n width: centerWidth\n },\n totalMeasures: {\n width: measureSum(viewWidth),\n height: measureSum(viewHeight)\n },\n unitHeights: rowHeights,\n unitWidths: columnWidths\n };\n};\n","/**\n * This file declares a table that can be extended to create a Datagrid, crosstab\n * and man other visualzations that require a tabular structure.\n */\n\nimport { getUniqueId, mergeRecursive } from 'muze-utils';\nimport GenericLayout from '../generic-layout';\nimport { DEFAULT_CONFIGURATION, DEFAULT_MEASUREMENTS } from './defaults';\nimport { generateVisualMatrices } from './layout-helper';\nimport { computeLayoutMeasurements } from './computations';\nimport { getViewMeasurements, getViewMatrices } from './view-info-getter';\n/**\n * This class is used to create a tabular structure that\n * can house charts and values.\n *\n * @class GridLayout\n */\nexport default class GridLayout extends GenericLayout {\n\n /**\n * Creates an instance of TableLayout.\n * @param {HTMLElement} matrices Set of upto 9 matrices containing the cells to be rendered\n * @param {HTMLElement} mountPoint DOM element/d3 selection where the layout is to be mounted\n * @param {Object} measurement The dimensions of the layout\n * @param {Object} config external configurations.\n * @memberof GenericLayout\n */\n constructor (matrices, mountPoint, measurement, config) {\n super(mountPoint, measurement, config);\n this.matrices(matrices);\n this.config(this.constructor.defaultConfig());\n this._layoutId = getUniqueId();\n this._viewInfo = this.constructor.defaultViewInfo();\n this._scrollInfo = { horizontal: false, vertical: false };\n }\n\n static defaultViewInfo () {\n return Object.assign({}, {\n layoutDimensions: {\n border: this.defaultConfig().border,\n viewHeight: [0, 0, 0],\n viewWidth: [0, 0, 0]\n },\n viewMatricesInfo: {\n columnPages: 0,\n rowPages: 0,\n matrices: { top: [], center: [], bottom: [] }\n }\n });\n }\n\n /**\n * Returns initial set of measurements for the grid layout\n *\n * @static\n * @return {Object} Returns initial set of measurements\n * @memberof GridLayout\n */\n static defaultMeasurement () {\n return DEFAULT_MEASUREMENTS;\n }\n\n /**\n * Returns initialconfiguration for grid layout\n *\n * @static\n * @return {Object} Returns initial configuration for grid layout\n * @memberof GridLayout\n */\n static defaultConfig () {\n return DEFAULT_CONFIGURATION;\n }\n\n /**\n * This function is used to return an instance of GridLayout\n *\n * @return {GridLayout} Instance of grid layout.\n * @static\n * @memberof GridLayout\n */\n static create () {\n return new GridLayout(null, null, this.defaultMeasurement(), this.defaultConfig());\n }\n\n /**\n * Sets/Gets the matrices for the layout\n *\n * @param {Array} matrices Set of matrices\n * @return {Object} Getter/Setter\n * @memberof GridLayout\n */\n matrices (matrices) {\n if (matrices) {\n this._matrices = generateVisualMatrices(this, matrices);\n return this;\n }\n return super.matrices(matrices);\n }\n\n /**\n * Triggers the computations for the layout based on the matrices available\n * This causes a reflow in the entire layout system.\n *\n * @return {Object} Layout instance\n * @memberof GridLayout\n */\n triggerReflow () {\n this.scrollInfo({ horizontal: false, vertical: false });\n const {\n maxHeightAvailableForRowMatrix,\n maxWidthAvailableForColumnMatrix\n } = computeLayoutMeasurements(this);\n\n this.setViewInformation(maxHeightAvailableForRowMatrix, maxWidthAvailableForColumnMatrix);\n return this;\n }\n\n gotoPage (type, pageNumber) {\n const pageType = type.toLowerCase();\n const { viewMatricesInfo } = this.viewInfo();\n const totalPages = viewMatricesInfo[`${pageType}Pages`];\n const pointer = Math.min(Math.max(1, pageNumber), totalPages);\n this.config({\n [`${pageType}Pointer`]: pointer - 1\n });\n this.setViewInformation();\n this.renderGrid();\n return this;\n }\n\n pages (type) {\n const { viewMatricesInfo } = this.viewInfo();\n const pageType = type.toLowerCase();\n return {\n totalPages: viewMatricesInfo[`${pageType}Pages`],\n currentPage: this.config()[`${pageType}Pointer`] + 1\n };\n }\n\n viewInfo (...viewInfo) {\n if (viewInfo.length) {\n this._viewInfo = viewInfo[0];\n return this;\n }\n return this._viewInfo;\n }\n\n scrollInfo (...scrollInfo) {\n if (scrollInfo.length) {\n this._scrollInfo = mergeRecursive(this._scrollInfo, scrollInfo[0]);\n return this;\n }\n return this._scrollInfo;\n }\n\n /**\n *\n *\n * @returns\n * @memberof GridLayout\n */\n setViewInformation (maxRowHeight, maxColWidth) {\n const {\n rowPointer,\n columnPointer,\n border\n } = this.config();\n const viewMatricesInfo = getViewMatrices(this, rowPointer, columnPointer);\n const layoutDimensions = getViewMeasurements(this, maxRowHeight, maxColWidth);\n layoutDimensions.border = border;\n this.viewInfo({\n viewMatricesInfo,\n layoutDimensions\n });\n return this;\n }\n}\n","import RowMatrix from '../visual-matrix/row-matrix';\nimport ColumnMatrix from '../visual-matrix/column-matrix';\n\nexport const generateVisualMatrices = (context, matrices) => {\n // Set of matrices for layout is generated starting with the left matrix\n let leftMatrix = [];\n let rightMatrix = [];\n let topMatrix = [];\n let bottomMatrix = [];\n let begColCells;\n let endColCells;\n const {\n isRowSizeEqual,\n isColumnSizeEqual,\n gutterSpace,\n distribution,\n border,\n breakPage,\n priority\n } = context.config();\n const {\n minUnitHeight,\n minUnitWidth\n } = context.measurement();\n const { top, center, bottom } = matrices;\n const [topLeft, topColumns, topRight] = top;\n const [leftRows, valueMatrix, rightRows] = center;\n const [bottomLeft, bottomColumns, bottomRight] = bottom;\n\n if (leftRows.length > 0) {\n // If no left matrix is present, context will be empty\n leftMatrix = [...topLeft, ...leftRows, ...bottomLeft];\n }\n if (rightRows.length > 0) {\n // If no right matrix is present, context will be empty\n rightMatrix = [...topRight, ...rightRows, ...bottomRight];\n }\n if (topColumns.length > 0 && topColumns[0].length > 0) {\n // If no top matrix is present, context will be empty\n topMatrix = topColumns.map((d, i) => [...topLeft[i], ...d, ...topRight[i]]);\n }\n if (bottomColumns.length > 0 && bottomColumns[0].length > 0) {\n // If no bottom matrix is present, context will be empty\n bottomMatrix = bottomColumns.map((d, i) => [...bottomLeft[i], ...d, ...bottomRight[i]]);\n }\n\n context.rowMatrix(new RowMatrix([leftMatrix, rightMatrix], {\n isDistributionEqual: isRowSizeEqual,\n distribution: distribution.rows,\n gutter: gutterSpace.rows,\n unitMeasures: {\n width: minUnitWidth,\n height: minUnitHeight,\n border: border.width\n },\n priority: priority.row,\n breakPage: breakPage.rows.map(e => e + Math.max(topLeft.length, topRight.length)),\n extraCellLengths: [topLeft.length, bottomLeft.length]\n }));\n\n if (topLeft.length > 0) {\n begColCells = topLeft[0].length;\n } else {\n begColCells = bottomLeft.length > 0 ? bottomLeft[0].length : 0;\n }\n\n if (topRight.length > 0) {\n endColCells = topRight[0].length;\n } else {\n endColCells = bottomRight.length > 0 ? bottomRight[0].length : 0;\n }\n\n context.columnMatrix(new ColumnMatrix([topMatrix, bottomMatrix], {\n isDistributionEqual: isColumnSizeEqual,\n distribution: distribution.columns,\n gutter: gutterSpace.columns,\n isTransposed: true,\n unitMeasures: {\n width: minUnitWidth,\n height: minUnitHeight,\n border: border.width\n },\n priority: priority.col,\n breakPage: breakPage.columns,\n extraCellLengths: [begColCells, endColCells]\n }));\n context.centerMatrix(valueMatrix);\n\n return matrices;\n};\n","import {\n TOP, BOTTOM, LEFT, RIGHT, CENTER, BLANK_BORDERS, COLUMN, ROW,\n VIEW_INDEX, ROW_MATRIX_INDEX, COLUMN_MATRIX_INDEX, MIDDLE, NO_BORDERS\n} from '../enums/constants';\n\nconst borderMap = {\n [`${TOP}-${LEFT}`]: NO_BORDERS,\n [`${TOP}-${MIDDLE}`]: COLUMN,\n [`${TOP}-${RIGHT}`]: NO_BORDERS,\n [`${CENTER}-${LEFT}`]: ROW,\n [`${CENTER}-${MIDDLE}`]: CENTER,\n [`${CENTER}-${RIGHT}`]: ROW,\n [`${BOTTOM}-${LEFT}`]: NO_BORDERS,\n [`${BOTTOM}-${MIDDLE}`]: COLUMN,\n [`${BOTTOM}-${RIGHT}`]: NO_BORDERS\n};\n\nconst applySpecificBorder = (cells, color, type, style) => {\n cells.style(`border-${type}`, `${style} ${color}`);\n};\n\nconst specificBorderApplier = (borderTypes, showBorders, cells, borderInfo) => {\n const {\n color,\n width,\n style\n } = borderInfo;\n const borderStyle = `${width}px ${style}`;\n\n borderTypes.forEach((borderType) => {\n applySpecificBorder(cells, showBorders[borderType] ? color : BLANK_BORDERS, borderType, borderStyle);\n });\n};\n\nconst borderApplier = (cells, borderInfo) => {\n const {\n showRowBorders,\n showColBorders,\n showValueBorders\n } = borderInfo;\n return {\n row: () => specificBorderApplier([TOP, BOTTOM], showRowBorders, cells, borderInfo),\n column: () => specificBorderApplier([LEFT, RIGHT], showColBorders, cells, borderInfo),\n center: () => specificBorderApplier([LEFT, RIGHT, TOP, BOTTOM], showValueBorders, cells, borderInfo)\n };\n};\n\nexport const applyBorders = (cells, border, row, column) => {\n const borderApplierFn = borderApplier(cells, border);\n const borderMapVal = borderMap[`${ROW_MATRIX_INDEX[VIEW_INDEX[row]]}-${COLUMN_MATRIX_INDEX[column]}`];\n if (borderMapVal) {\n borderApplierFn[borderMapVal]();\n }\n};\n","import { selectElement } from 'muze-utils';\nimport {\n TOP, BOTTOM, ROW_SPAN, COL_SPAN, CENTER, ROW, COLUMN\n} from '../enums/constants';\n\nconst orderMaker = arr => Array.from(Array(arr.length).keys());\n\nconst nestByStack = (stack, updateArr, optionalParams = {}) => {\n let {\n order,\n keyFn\n } = optionalParams;\n const arr = updateArr.slice();\n const currStack = stack.slice();\n const prevStack = currStack.slice();\n // Order in which element are to be checked for nesting, default normal looping\n // Order is always in the order of nest, i.e., left to right\n order = order || Array.from(Array(arr.length).keys());\n\n // Key function, if array of objects\n keyFn = keyFn || (v => v);\n\n // Return same array if stack is empty\n if (currStack.length === 0) {\n const newArr = [];\n order.forEach((e) => {\n newArr.push(arr[e]);\n });\n return { prevStack, currStack: arr, arr: newArr };\n }\n\n let arrVal = '';\n let stackVal = '';\n const newArr = [];\n\n // Loop in order\n for (let i = order.length - 1; i >= 0; i--) {\n // Get current element index from the order given\n const currElemIndex = order[i];\n\n // Crete a hashmap for the hierarchy by joining strings of the array for both stack and input array\n arrVal += keyFn(arr[currElemIndex]);\n stackVal += keyFn(currStack[currElemIndex]);\n\n // If the current value and value in stack is same, convert it to null\n if (arrVal === stackVal) {\n newArr[currElemIndex] = null;\n } else {\n stackVal = '';\n // Loop from the current index in order to the last element in order to change the\n // whole hierarchy\n for (let j = i; j < order.length; j++) {\n const newElem = order[j];\n const arrElem = arr[newElem];\n\n newArr[newElem] = arrElem;\n\n // Reset stack to new stack\n currStack[newElem] = arrElem;\n stackVal = arrVal;\n }\n }\n }\n const returnArr = [];\n order.forEach((e) => {\n returnArr.push(newArr[e]);\n });\n return { prevStack, currStack, arr: returnArr };\n};\n\nconst spanCalculator = (colData, colIdx, matrix, rIdx) => {\n // if data is not header cell then rowspan\n // has to be 1\n if (!colData) {\n return () => 1;\n }\n\n const conditions = {\n row: count => matrix[rIdx + count] && matrix[rIdx + count][colIdx],\n column: count => matrix[rIdx][colIdx + count]\n };\n\n return (type) => {\n let count = 1;\n let isNull = false;\n\n while (!isNull) {\n if (conditions[type](count) === null) {\n count += 1;\n } else {\n isNull = true;\n }\n }\n return count;\n };\n};\n\nconst maskCreator = (matrix, order) => ({\n row: () => {\n let stack = [];\n return matrix.map((e) => {\n const {\n currStack,\n arr\n } = nestByStack(stack, e, { keyFn: val => val.valueOf(), order });\n\n stack = currStack;\n return arr;\n });\n },\n column: () => {\n let stack = [];\n const viewMatrix = [];\n matrix.length && matrix[0].forEach((cell, colIndex) => {\n const hierarchy = [];\n matrix.forEach((row) => {\n hierarchy.push(row[colIndex]);\n });\n const {\n currStack,\n arr\n } = nestByStack(stack, hierarchy, { keyFn: val => val.valueOf(), order });\n stack = currStack;\n\n matrix.forEach((row, rowIndex) => {\n viewMatrix[rowIndex] = viewMatrix[rowIndex] || [];\n viewMatrix[rowIndex][colIndex] = arr[rowIndex];\n });\n });\n return viewMatrix;\n }\n});\n\nconst spanGenerator = viewMatrix => ({\n row: () => {\n const spans = [];\n viewMatrix.forEach((row, ridx) => {\n spans[ridx] = spans[ridx] || [];\n row.forEach((col, i) => {\n if (viewMatrix[ridx][i]) {\n const currSpan = spanCalculator(col, i, viewMatrix, ridx)('row');\n currSpan && spans[ridx].push(currSpan);\n }\n });\n });\n return spans;\n },\n column: () => viewMatrix.map((row, ridx) => row.map((col, i) => spanCalculator(col, i, viewMatrix, ridx)('column'))\n .filter(col => col !== 1))\n});\n\nconst getOrder = isReverse => ({\n row: (matrix) => {\n if (isReverse) {\n return orderMaker(matrix[0]).reverse();\n }\n return orderMaker(matrix[0]);\n },\n column: (matrix) => {\n if (isReverse) {\n return orderMaker(matrix).reverse();\n }\n return orderMaker(matrix);\n }\n});\n\nconst matrixSpanGeneratorMap = {\n [`${TOP}-1`]: {\n orderGetter: getOrder(false)[COLUMN],\n viewMatrixMaker: (...params) => maskCreator(...params)[COLUMN],\n spanMaker: (...params) => spanGenerator(...params)[COLUMN]\n },\n [`${BOTTOM}-1`]: {\n orderGetter: getOrder(true)[COLUMN],\n viewMatrixMaker: (...params) => maskCreator(...params)[COLUMN],\n spanMaker: (...params) => spanGenerator(...params)[COLUMN]\n },\n [`${CENTER}-0`]: {\n orderGetter: getOrder(false)[ROW],\n viewMatrixMaker: (...params) => maskCreator(...params)[ROW],\n spanMaker: (...params) => spanGenerator(...params)[ROW]\n },\n [`${CENTER}-2`]: {\n orderGetter: getOrder(true)[ROW],\n viewMatrixMaker: (...params) => maskCreator(...params)[ROW],\n spanMaker: (...params) => spanGenerator(...params)[ROW]\n }\n};\n\nconst matrixSpanGenerator = (type) => {\n const generator = matrixSpanGeneratorMap[type];\n if (generator) {\n return generator;\n }\n return {\n orderGetter: () => null,\n viewMatrixMaker: matrix => () => matrix,\n spanMaker: () => () => null\n };\n};\n\n/**\n * This function is used to set the col and row spans\n * for the matrices based on repeated/hierarchichal data\n *\n * @export\n * @param {Array} matrix The 2d array for which filtering is to be done\n * @param {string} type Type of array (center, top, bottom)\n * @param {number} index Index of array in the row\n * @return {Object} containing the view matrix and their spans\n */\nexport function cellSpanMaker (matrix, type, index) {\n let spans = null;\n let viewMatrix = matrix;\n const {\n orderGetter,\n viewMatrixMaker,\n spanMaker\n } = matrixSpanGenerator(`${type}-${index}`);\n\n if (matrix.length) {\n const order = orderGetter(matrix);\n viewMatrix = viewMatrixMaker(matrix, order)();\n spans = spanMaker(viewMatrix)();\n }\n return { viewMatrix, spans };\n}\n\nconst spaceAllocationDueToSpan = (span, placeholder, borderWidth) => {\n const height = placeholder.availHeight();\n const width = placeholder.availWidth();\n\n return {\n [ROW_SPAN] () {\n selectElement(this).style('height', `${height + borderWidth}px`);\n if (span > 1) {\n selectElement(this).style('height', `${height * span + borderWidth * (span)}px`);\n placeholder.setAvailableSpace(width, height * span);\n }\n },\n [COL_SPAN] () {\n if (span > 1) {\n placeholder.setAvailableSpace(width * span + borderWidth * (span - 1), height);\n }\n selectElement(this).style('height', `${height}px`);\n }\n };\n};\n\nconst spanApplier = (cells, spans, config, type) => {\n const borderWidth = config.border.width;\n\n cells.attr(type, function (cell, colIndex) {\n const span = spans[cell.rowIndex][colIndex];\n const placeholder = cell.placeholder;\n\n spaceAllocationDueToSpan(span, placeholder, borderWidth)[type].bind(this)();\n return span;\n });\n};\n\nconst spanApplierMap = {\n [`${TOP}-0`]: null,\n [`${TOP}-1`]: (...params) => spanApplier(...params, COL_SPAN),\n [`${TOP}-2`]: null,\n [`${CENTER}-0`]: (...params) => spanApplier(...params, ROW_SPAN),\n [`${CENTER}-1`]: null,\n [`${CENTER}-2`]: (...params) => spanApplier(...params, ROW_SPAN),\n [`${BOTTOM}-0`]: null,\n [`${BOTTOM}-1`]: (...params) => spanApplier(...params, COL_SPAN),\n [`${BOTTOM}-2`]: null\n};\n\nexport const applySpans = (cells, spans, config, type) => {\n const applier = spanApplierMap[type];\n if (applier) {\n applier(cells, spans, config);\n }\n};\n","import { ERROR_MSG } from 'muze-utils';\n/**\n * An Interface to be implemented if the transaction support is necessary. This class ensures reactivity to\n * global properties.\n */\nexport default class TransactionSupport {\n /**\n * Property accessor for data member of the class. Data is passed to the system by calling this method.\n */\n data () {\n throw new Error(ERROR_MSG.INTERFACE_IMPl);\n }\n\n /**\n * Property accessor for width of the class. Width is passed as an integer.\n */\n width () {\n throw new Error(ERROR_MSG.INTERFACE_IMPl);\n }\n\n /**\n * Property accessor for height of the class. Height is passed as an integer.\n */\n height () {\n throw new Error(ERROR_MSG.INTERFACE_IMPl);\n }\n\n /**\n * Property accessor for config of the class. Config is passed as an object.\n */\n config () {\n throw new Error(ERROR_MSG.INTERFACE_IMPl);\n }\n}\n","import { TOP, BOTTOM, LEFT, TITLE, SUB_TITLE, GROUP, LAYOUT, LEGEND } from '../constants';\n\n/**\n *\n *\n * @param {*} context\n *\n */\nexport const arrangeComponents = (context) => {\n const legendConfig = context.config().legend;\n const titleConfig = context.title()[1];\n const subtitleConfig = context.subtitle()[1];\n const titleLayouts = {\n [`${TOP}-${TOP}`]: [TITLE, SUB_TITLE, GROUP],\n [`${BOTTOM}-${BOTTOM}`]: [GROUP, SUB_TITLE, TITLE],\n [`${TOP}-${BOTTOM}`]: [TITLE, GROUP, SUB_TITLE],\n [`${BOTTOM}-${TOP}`]: [SUB_TITLE, GROUP, TITLE]\n };\n const legendLayouts = [\n [LEGEND, LAYOUT],\n [LAYOUT, LEGEND]\n ];\n const titlePosition = titleConfig.position || TOP;\n const subtitlePosition = subtitleConfig.position || TOP;\n\n return {\n headers: titleLayouts[`${titlePosition}-${subtitlePosition}`],\n legends: legendConfig.position === LEFT || legendConfig.position === TOP ?\n legendLayouts[0] : legendLayouts[1]\n };\n};\n","/**\n * Flag to specify whether direction is vertical.\n */\nexport const MARGIN = 'margin';\nexport const LEFT = 'left';\nexport const RIGHT = 'right';\nexport const BOTTOM = 'bottom';\nexport const TOP = 'top';\nexport const SPACE_FIXER = 'spaceFixer';\nexport const CLASSPREFIX = 'muze';\nexport const VERTICAL_ALIGN = 'verticalAlign';\nexport const TEXT_ALIGN = 'textAlign';\nexport const IS_OFFSET = 'isOffset';\nexport const MIDDLE = 'middle';\nexport const BASELINE = 'baseline';\nexport const SHOW = 'show';\nexport const CENTER = 'center';\nexport const TEXT = 'text';\nexport const HEADER = 'header';\nexport const HEIGHT = 'height';\nexport const WIDTH = 'width';\nexport const DATA = 'data';\nexport const AXES = 'axes';\nexport const FACET_BY_FIELDS = 'facetByFields';\nexport const FIELDS = 'fields';\nexport const TRANSFORM = 'transform';\nexport const LAYER_DEF = 'layerDef';\nexport const CONFIG = 'config';\nexport const DETAIL_FIELDS = 'detailFields';\nexport const MAX_LINES = 'maxLines';\nexport const MIN_CHARS = 'minCharacters';\nexport const ROTATION = 'rotation';\n\nexport const TEXT_CELL = 'text-cell';\nexport const AXIS_CELL = 'axis-cell';\nexport const GEOM_CELL = 'geom-cell';\nexport const BLANK_CELL = 'blank-cell';\n","// eneum to refer to simple cell\nexport const SIMPLE = 'simple';\n// eneum to refer to header cell\nexport const TEXT = 'text';\n// enum to refer to axis cell\nexport const AXIS = 'axis';\n// enum to refer to visual cell\nexport const GEOM = 'geom';\n// enum to refer blank cell\nexport const BLANK = 'blank';\n","import {\n ERROR_MSG,\n getUniqueId,\n mergeRecursive\n} from 'muze-utils';\nimport { SIMPLE } from './enums/cell-type';\n\n/**\n * This file declares a class that is used as an interface to create new\n * SimpleCell elements.\n * @module SimpleCell\n */\n/**\n * Base class for all table cells.\n *\n * @interface\n * @class SimpleCell\n */\nclass SimpleCell {\n\n /**\n * Creates an instance of SimpleCell.\n *\n * @param {*} config The input configuration.\n * @memberof SimpleCell\n */\n constructor (config) {\n this._id = getUniqueId();\n\n const defConfig = mergeRecursive({}, this.constructor.defaultConfig());\n this._config = mergeRecursive(defConfig, config || {});\n\n this._mount = null;\n }\n\n /**\n * Returns the type of the placehlder.\n *\n * @readonly\n * @memberof SimpleCell\n */\n get type () {\n return SIMPLE;\n }\n\n /**\n * Returns the type of the placehlder.\n *\n * @readonly\n * @memberof SimpleCell\n * @return {Object} Default config for the placeholder\n */\n static defaultConfig () {\n return {};\n }\n\n /**\n * Returns the value contained by the SimpleCell.\n *\n * @memberof SimpleCell\n */\n valueOf () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Returns a unique identifier for the instance used\n * to control selective rendering.\n *\n * @memberof SimpleCell\n */\n id () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Returns a serialized representation of the instance.\n *\n * @memberof SimpleCell\n */\n serialize () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Returns an object with width and height fields\n * specifying the space taken up by this metod.\n *\n * @memberof SimpleCell\n */\n getLogicalSpace () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Method used to set the space available to render the SimpleCell\n *\n * @param {number} width The available width.\n * @param {number} height The available height.\n * @memberof SimpleCell\n */\n setAvailableSpace () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Render the SimpleCell inthe supplied mount point.\n *\n * @param {HTMLElement} mount The mount point to render in.\n * @memberof SimpleCell\n */\n render () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Render the SimpleCell inthe supplied mount point.\n *\n * @param {HTMLElement} mount The mount point to render in.\n * @memberof SimpleCell\n */\n remove () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n}\n\nexport default SimpleCell;\n","/**\n * This file exports variables that are used as defaults for\n * the placeholders\n */\nimport * as CONSTANTS from './constants';\n\n /**\n * Default Configuration for the cells\n * @return {Object} Default configuration\n */\nexport const DEFAULT_CONFIG = {\n [CONSTANTS.MARGIN]: {\n [CONSTANTS.LEFT]: 0,\n [CONSTANTS.RIGHT]: 0,\n [CONSTANTS.TOP]: 0,\n [CONSTANTS.BOTTOM]: 0\n },\n [CONSTANTS.SPACE_FIXER]: 2,\n [CONSTANTS.IS_OFFSET]: false,\n [CONSTANTS.VERTICAL_ALIGN]: null,\n [CONSTANTS.TEXT_ALIGN]: CONSTANTS.CENTER,\n [CONSTANTS.SHOW]: true,\n [CONSTANTS.MAX_LINES]: 0,\n [CONSTANTS.MIN_CHARS]: 0,\n [CONSTANTS.ROTATION]: null\n};\n","import { mergeRecursive } from 'muze-utils';\nimport { GEOM, TEXT, AXIS, BLANK } from './enums/cell-type';\n\nconst DEFAULT_PROPS = {\n mount: {},\n availHeight: {},\n availWidth: {},\n config: {\n sanitization: (context, value) => mergeRecursive(context._config, value)\n },\n logicalSpace: {},\n minSpacing: {},\n source: {}\n};\n\nconst geomProps = {\n data: {},\n caption: {},\n config: {},\n axes: {\n sanitization: (context, value) => Object.assign(context._axes, value)\n },\n facetByFields: {},\n fields: {},\n transform: {},\n layerDef: {},\n detailFields: {}\n};\n\nconst textProps = {\n smartText: {}\n};\nexport const PROPS = {\n [GEOM]: mergeRecursive(geomProps, DEFAULT_PROPS),\n [TEXT]: mergeRecursive(textProps, DEFAULT_PROPS),\n [AXIS]: DEFAULT_PROPS,\n [BLANK]: DEFAULT_PROPS\n};\n","/**\n * This file declares a class that represents a table cell\n * used to house an axis.\n * @module VisualCell\n */\nimport { selectElement, makeElement, generateGetterSetters } from 'muze-utils';\nimport { CLASSPREFIX, HEIGHT, WIDTH, AXIS_CELL } from './enums/constants';\nimport SimpleCell from './simple-cell';\nimport { DEFAULT_CONFIG } from './enums/defaults';\nimport { AXIS } from './enums/cell-type';\nimport { PROPS } from './props';\n\n/**\n * Computes the logical space of the an axis instance within an axis cell\n *\n * @param {Object} context Required to get the needed parameters to compute axis space\n * @return {Object} Returns the logical space for axis\n */\nconst computeAxisSpace = (context) => {\n let logicalWidth;\n let logicalHeight;\n const axis = context.source();\n const {\n spaceFixer,\n margin\n } = context.config();\n const {\n width,\n height\n } = axis.getLogicalSpace();\n const {\n show\n } = axis.config();\n if (show === true) {\n logicalHeight = Math.floor(height + margin.top + margin.bottom + spaceFixer);\n logicalWidth = Math.floor(width + margin.left + margin.right + spaceFixer);\n } else {\n [logicalWidth, logicalHeight] = [width, height];\n }\n return {\n width: logicalWidth,\n height: logicalHeight\n };\n};\n\n/**\n * Represents an axis cell.\n *\n * @class Axis\n */\nclass AxisCell extends SimpleCell {\n\n /**\n * Creates an instance of AxisCell.\n *\n * @param {Object} config The input config.\n * @memberof AxisCell\n */\n constructor (config) {\n super(config);\n\n this._axis = null;\n this._availHeight = null;\n this._availWidth = null;\n this._logicalSpace = null;\n\n generateGetterSetters(this, PROPS[AXIS]);\n }\n\n /**\n * return the type pf SimpleCell cell.\n *\n * @readonly\n * @memberof AxisCell\n */\n get type () {\n return AXIS;\n }\n\n /**\n * This method return the value conatined by this SimpleCell.\n *\n * @return {SimpleAxis | ColorAxis} Instance of SimpleAxis or ColorAxis.\n * @memberof AxisCell\n */\n valueOf () {\n return this.source().id;\n }\n\n /**\n * This method return the unique identififer of the axis\n *\n * @return {string} Id of the axis.\n * @memberof AxisCell\n */\n get id () {\n return this._id;\n }\n\n /**\n * Retrns the serialized representation of this cell.\n *\n * @return {Object}Object with serializable props.\n * @memberof AxisCell\n */\n serialize () {\n return {\n type: AXIS,\n axis: this.source().serialize()\n };\n }\n\n /**\n * return the default configuration for the text cell\n *\n * @static\n * @return {Object} Default configuration of the cell\n * @memberof AxisCell\n */\n static defaultConfig () {\n return DEFAULT_CONFIG;\n }\n\n /**\n * return the space taken up by an axis element in the dom.\n *\n * @return {Object} Object with width and height fields.\n * @memberof AxisCell\n */\n getLogicalSpace () {\n if (!this.logicalSpace()) {\n this.logicalSpace(computeAxisSpace(this));\n }\n return this.logicalSpace();\n }\n\n /**\n * This method is used to set the space availiable to render\n * the SimpleCell.\n *\n * @param {number} width The width of SimpleCell.\n * @param {number} height The height of SimpleCell.\n * @return {Instance} Returns current Instance\n * @memberof AxisCell\n */\n setAvailableSpace (width, height) {\n this.availWidth(width);\n this.availHeight(height);\n const {\n margin,\n isOffset\n } = this.config();\n\n if (width || height) {\n this.source().setAvailableSpace(width, height, margin, isOffset);\n this.source().logicalSpace(null);\n } else {\n this.source().resetLogicalSpace();\n }\n this.logicalSpace(null);\n return this;\n }\n\n /**\n * This method is used to render the axis inside the axis cell.\n *\n * @param {HTMLElement} mount The mount point.\n * @return {Selection} node where axis mounted\n * @memberof AxisCell\n */\n /* istanbul ignore next */render (mount) {\n if (!mount) {\n return this;\n }\n const axis = this.source();\n const availHeight = this.availHeight();\n const availWidth = this.availWidth();\n const {\n margin\n } = this.config();\n const {\n top,\n bottom,\n left,\n right\n } = margin;\n const {\n show,\n orientation\n } = axis.config();\n const wrapperDiv = makeElement(selectElement(mount), 'div', [this], `${CLASSPREFIX}-${AXIS_CELL}`);\n const selection = makeElement(wrapperDiv, 'svg', [1], `${CLASSPREFIX}-axis-container`);\n selection.classed(`${CLASSPREFIX}-axis-container-${orientation}`, true);\n\n this.mount(mount);\n if (!availWidth) {\n selection.attr(WIDTH, `${0}px`);\n }\n if (!availHeight) {\n selection.attr(HEIGHT, `${0}px`);\n }\n wrapperDiv.style(WIDTH, `${show ? Math.floor(availWidth) : 0}px`)\n .style(HEIGHT, `${show ? Math.floor(availHeight) : 0}px`)\n .style('margin-top', top)\n .style('margin-bottom', bottom)\n .style('margin-left', left)\n .style('margin-right', right);\n\n axis.mount(selection.node());\n return selection;\n }\n\n /**\n * Disposes the cell\n *\n * @return {Instance} Current instance of AxisCell\n * @memberof AxisCell\n */\n remove () {\n this.source() && this.source().remove();\n this.mount() && this.mount().remove();\n return this;\n }\n}\n\nexport default AxisCell;\n\n","/**\n * This file declares a class that represents a BLANK element in a table.\n * @module VisualCell\n */\nimport {\n selectElement,\n makeElement,\n applyStyle,\n generateGetterSetters\n } from 'muze-utils';\nimport SimpleCell from './simple-cell';\nimport { CLASSPREFIX, BLANK_CELL } from './enums/constants';\nimport { BLANK } from './enums/cell-type';\nimport { DEFAULT_CONFIG } from './enums/defaults';\nimport { PROPS } from './props';\n\n/**\n * Represents a table haeder.\n *\n * @class BLANK\n */\nclass BlankCell extends SimpleCell {\n\n /**\n * Creates an instance of BLANK.\n * @param {Object} config The input configuration.\n * @memberof BLANK\n */\n constructor (config) {\n super(config);\n\n generateGetterSetters(this, PROPS[BLANK]);\n }\n\n /**\n * return the type pf SimpleCell cell.\n *\n * @readonly\n * @memberof BlankCell\n */\n get type () {\n return BLANK;\n }\n\n /**\n * This method return the value contained by this SimpleCell.\n *\n * @return {string} The text value contained by this cell.\n * @memberof BlankCell\n */\n valueOf () {\n return this.id;\n }\n\n /**\n * return the default configuration for the text cell\n *\n * @static\n * @return {Object} Default configuration of the cell\n * @memberof BlankCell\n */\n static defaultConfig () {\n return DEFAULT_CONFIG;\n }\n\n /**\n * This method is used to return a unique identifier for\n * the BLANK cell.\n *\n * @return {string} The unique identifier for the BLANK.\n * @memberof BlankCell\n */\n get id () {\n return this._id;\n }\n\n /**\n * This method is used to obtain a serialized representation of this instance.\n *\n * @return {Object} Object with serilizable props.\n * @memberof BLANK\n */\n serialize () {\n return {\n type: BLANK\n };\n }\n\n /**\n * This method return the space taken up\n * by the text with the style applied.\n *\n * @return {Object} width and height taken up by the text.\n * @memberof BLANK\n */\n getLogicalSpace () {\n if (!this.logicalSpace()) {\n return {\n width: this.width || 0,\n height: this.height || 0\n };\n }\n return this.logicalSpace();\n }\n\n /**\n * This method is used to set the available space.\n *\n * @param {number} width The available width.\n * @param {number} height The available height.\n * @return {Instance} Returns current Instance\n * @memberof BlankCell\n */\n setAvailableSpace (width, height) {\n this.availWidth(width);\n this.availHeight(height);\n this.logicalSpace(null);\n return this;\n }\n\n /**\n * This method is used to render the BLANK cell inside\n * the provided mount point.\n *\n * @param {HTMLElement} mount The mount point for this cell.\n * @return {Instance} Returns current Instance\n * @memberof BLANK\n */\n /* istanbul ignore next */render (mount) {\n if (mount) {\n const { style } = this.config();\n // append span element to mount point\n this.mount(mount);\n const container = selectElement(mount);\n const elem = makeElement(container, 'div', [this.id]);\n elem.classed(`${CLASSPREFIX}-${BLANK_CELL}`, true);\n elem.style('width', `${this.availWidth()}px`);\n elem.style('height', `${this.availHeight()}px`);\n elem.html('');\n // apply style on the returned element\n if (style) {\n applyStyle(elem, style);\n }\n } return this;\n }\n\n /**\n * Removes the cell(Disposal)\n *\n * @return {Instance} Returns current Instance\n * @memberof BlankCell\n */\n remove () {\n this.mount() && this.mount().remove();\n return this;\n }\n }\nexport default BlankCell;\n","/**\n * This file declares a class that represents a Text element in a table.\n * @module VisualCell\n */\n\nimport {\n selectElement,\n makeElement,\n getSmartComputedStyle,\n generateGetterSetters\n} from 'muze-utils';\nimport SimpleCell from './simple-cell';\nimport { TEXT } from './enums/cell-type';\nimport { PROPS } from './props';\nimport { DEFAULT_CONFIG } from './enums/defaults';\nimport { CLASSPREFIX, TOP, BOTTOM, LEFT, RIGHT, HEADER, WIDTH, TEXT_CELL } from './enums/constants';\nimport './text-cell.scss';\n\nconst setSmartText = (context) => {\n const source = context.source();\n const {\n height: minHeightSpace,\n width: minWidthSpace\n } = context.minSpacing();\n const {\n margin,\n rotation\n } = context.config();\n const {\n left,\n right,\n top,\n bottom\n } = margin;\n const paddedHeight = top + bottom + minHeightSpace;\n const paddedWidth = left + right + minWidthSpace;\n const availHeight = context.availHeight() - paddedHeight;\n const availWidth = context.availWidth() - paddedWidth;\n const labelManager = context.dependencies().labelManager;\n\n labelManager.setStyle(context._computedStyle);\n\n !rotation && context.smartText(labelManager.getSmartText(source, availWidth, availHeight, false));\n rotation && context.smartText(labelManager.getSmartText(source, availHeight, availWidth, true));\n\n return context;\n};\n\n/**\n* Computes the Logical Space for the text\n*\n* @param {Object} context Required to get the needed parameters to compute text space\n* @return {Object} Logical space taken up by text\n* @memberof TextCell\n*/\nconst computeTextSpace = (context) => {\n const { labelManager } = context.dependencies();\n const {\n height: minHeightSpace,\n width: minWidthSpace\n } = context.minSpacing();\n const {\n margin,\n show,\n maxLines,\n minCharacters\n } = context.config();\n const {\n left,\n right,\n top,\n bottom\n } = margin;\n const paddedHeight = top + bottom + minHeightSpace;\n const paddedWidth = left + right + minWidthSpace;\n const availHeight = context.availHeight() - paddedHeight;\n const availWidth = context.availWidth() - paddedWidth;\n const source = context.source();\n const space = context.smartText();\n const minText = new Array(minCharacters).fill('W').join('');\n const _minTextSpace = labelManager.getOriSize(minText);\n\n context.config({ rotation: false });\n if (space.width > (availWidth || 0) && maxLines) {\n space.height = space.oriTextHeight * maxLines;\n }\n if (availWidth && availWidth < space.width) {\n space.width = _minTextSpace.width;\n }\n if (availWidth && availWidth < Math.min(_minTextSpace.width, space.oriTextWidth)) {\n const smartSpace = labelManager.getSmartText(source, availHeight, _minTextSpace.height, true);\n space.width = smartSpace.height;\n space.height = smartSpace.width;\n context.config({ rotation: true });\n context.smartText(smartSpace);\n }\n\n if (show) {\n return {\n width: Math.ceil(space.width) + paddedWidth,\n height: Math.ceil(space.height) + paddedHeight\n };\n } return {\n width: 0,\n height: 0\n };\n};\n\n/**\n * Represents a table haeder.\n *\n * @class Text\n */\nclass TextCell extends SimpleCell {\n\n /**\n * Creates an instance of Text.\n * @param {Object} config The input configuration.\n * @param {string} dependencies Dependencies for the class(labelManager)\n * @memberof Text\n */\n constructor (config, dependencies) {\n super(config);\n\n this._dependencies = dependencies;\n this._className = this._config.className ||\n (this._config.type === HEADER ? `${CLASSPREFIX}-${HEADER}-cell` : `${CLASSPREFIX}-${TEXT}-cell`);\n this._computedStyle = getSmartComputedStyle(selectElement('body'), this._className);\n this._dependencies.labelManager.setStyle(this._computedStyle);\n generateGetterSetters(this, PROPS[TEXT]);\n const space = this._dependencies.labelManager.getOriSize('w');\n this.minSpacing({ width: Math.floor(space.width * 3 / 4), height: Math.floor(space.height / 2) });\n setSmartText(this);\n }\n\n /**\n * return the type pf SimpleCell cell.\n *\n * @readonly\n * @memberof TextCell\n */\n get type () {\n return TEXT;\n }\n\n /**\n * This method return the value contained by this SimpleCell.\n *\n * @return {string} The text value contained by this cell.\n * @memberof TextCell\n */\n valueOf () {\n return this.source();\n }\n\n /**\n * This method is used to return a unique identifier for\n * the Text cell.\n *\n * @return {string} The unique identifier for the Text.\n * @memberof TextCell\n */\n get id () {\n return this._id;\n }\n\n /**\n * Returns the dependencies of the instance\n *\n * @return {Object} Dependencies needed by the class\n * @memberof TextCell\n */\n dependencies () {\n return this._dependencies;\n }\n\n /**\n * This method is used to obtain a serialized representation of this instance.\n *\n * @return {Object} Object with serilizable props.\n * @memberof TextCell\n */\n serialize () {\n return {\n text: this.source(),\n type: TEXT\n };\n }\n\n /**\n * return the default configuration for the text cell\n *\n * @static\n * @return {Object} Default configuration of the cell\n * @memberof TextCell\n */\n static defaultConfig () {\n return DEFAULT_CONFIG;\n }\n\n /**\n * This method return the space taken up\n * by the text with the style applied.\n *\n * @return {Object} width and height taken up by the text.\n * @memberof Text\n */\n getLogicalSpace () {\n if (!this.logicalSpace()) {\n this.logicalSpace(computeTextSpace(this));\n }\n return this.logicalSpace();\n }\n\n /**\n * This method is used to set the available space.\n *\n * @param {number} width The available width.\n * @param {number} height The available height.\n * @return {Instance} Returns current Instance\n * @memberof TextCell\n */\n setAvailableSpace (width, height) {\n this.availWidth(width);\n this.availHeight(height);\n setSmartText(this);\n this.logicalSpace(null);\n return this;\n }\n\n /**\n * This method is used to render the Text cell inside\n * the provided mount point.\n *\n * @param {HTMLElement} mount The mount point for this cell.\n * @return {Instance} Returns current Instance\n * @memberof Text\n */\n render (mount) {\n const availWidth = this.availWidth();\n const availHeight = this.availHeight();\n const {\n margin,\n show,\n verticalAlign,\n textAlign,\n rotation\n } = this.config();\n\n this.mount(mount);\n if (show) {\n const container = selectElement(mount);\n const elem = makeElement(container, 'div', [this.id], `${CLASSPREFIX}-${TEXT_CELL}`);\n const vAlign = verticalAlign || rotation ? 'middle' : 'top';\n const {\n width,\n height\n } = this.smartText();\n const {\n height: minHeightSpace\n } = this.minSpacing();\n const translation = {\n top: width + minHeightSpace / 2,\n middle: width / 2 + minHeightSpace,\n bottom: minHeightSpace\n };\n\n container.style('vertical-align', vAlign);\n\n // Set class name\n elem.classed(this._className, true);\n\n // Apply styles\n elem.style('text-align', textAlign);\n elem.style('display', 'inline');\n elem.style('transform', rotation ? `translate(${height / 2}px,\n ${translation[vAlign]}px) rotate(-90deg)` : '');\n elem.style(WIDTH, availWidth ? `${availWidth}px` : '100%');\n [TOP, BOTTOM, LEFT, RIGHT].forEach((type) => {\n container.style(`margin-${type}`, `${margin[type]}px`);\n });\n elem.style('text-align', textAlign);\n elem.style('display', 'inline');\n // set the text as the innerHTML\n this._dependencies.labelManager.setStyle(this._computedStyle);\n elem.html(this._dependencies.labelManager.getSmartText(this.source(), availWidth, availHeight, true).text);\n }\n return this;\n }\n\n /**\n * Disposes the cell\n *\n * @return {Instance} Returns current Instance\n * @memberof TextCell\n */\n remove () {\n this.mount() && this.mount().remove();\n return this;\n }\n }\n\nexport default TextCell;\n","/**\n * This file declares a class that is used to represent a table cell\n * that houses a visual unit.\n * @module VisualCell\n */\n\nimport { selectElement, makeElement, generateGetterSetters } from 'muze-utils';\nimport SimpleCell from './simple-cell';\nimport { GEOM } from './enums/cell-type';\nimport { PROPS } from './props';\nimport {\n CLASSPREFIX, HEIGHT, WIDTH, DATA, AXES, FACET_BY_FIELDS, FIELDS, TRANSFORM, LAYER_DEF, CONFIG, GEOM_CELL,\n DETAIL_FIELDS\n} from './enums/constants';\nimport { DEFAULT_CONFIG } from './enums/defaults';\n\n/**\n * Calculates the logical space of the cell\n *\n * @param {Object} context Required to get the needed parameters to compute unit space\n * @return {Object} Logical space taken up by the unit\n * @memberof GeomCell\n */\nconst computeGeomSpace = (context) => {\n const config = context.source().config();\n const { width, height } = config;\n return {\n width: Math.ceil(width),\n height: Math.ceil(height + context.getCaptionSpace().height)\n };\n};\n\n /**\n * This class represents a SimpleCell for visual unit.\n *\n * @class GeomCell\n */\nclass GeomCell extends SimpleCell {\n\n /**\n * Creates an instance of GeomCell.\n * @param {Object} config The input configuration.\n * @memberof GeomCell\n */\n constructor (config) {\n super(config);\n\n this._unit = null;\n this._layers = null;\n this._axes = {};\n this._datamodel = {};\n this._facetByFields = {};\n this._fields = null;\n this._transform = null;\n this._caption = null;\n\n generateGetterSetters(this, PROPS[GEOM]);\n }\n\n /**\n * return the type pf SimpleCell cell.\n *\n * @readonly\n * @memberof GeomCell\n */\n get type () {\n return GEOM;\n }\n\n /**\n * This method return the value contained by this cell.\n *\n * @return {VisualUnit} Instance of visual unit contained by visual unit.\n * @memberof GeomCell\n */\n valueOf () {\n return this.source();\n }\n\n /**\n * This method is used to return the id of the\n * visual unit housed by this cell.\n *\n * @return {string} The unique id of the visual unit.\n * @memberof GeomCell\n */\n get id () {\n return this.source().id();\n }\n\n /**\n * This method return a serialized representation of\n * this instance.\n *\n * @return {Object} Object with serializable props.\n * @memberof GeomCell\n */\n serialize () {\n return {\n type: GEOM,\n unit: this.source().serialize(),\n caption: this.caption()\n };\n }\n\n /**\n * return the default configuration for the geom cell\n *\n * @static\n * @return {Object} Default configuration of the cell\n * @memberof GeomCell\n */\n static defaultConfig () {\n return DEFAULT_CONFIG;\n }\n\n /**\n * Updates the model based on the changed parameters\n *\n * @return {Instance} return instance\n * @memberof GeomCell\n */\n updateModel () {\n const unit = this.source();\n unit.lockModel();\n [LAYER_DEF, TRANSFORM, AXES, FIELDS, CONFIG, DATA, AXES, FACET_BY_FIELDS, DETAIL_FIELDS].forEach((prop) => {\n this[prop]() && unit[prop](this[prop]());\n });\n unit.unlockModel();\n return this;\n }\n\n /**\n * It gives the space taken by the caption of the unit\n *\n * @return {Object} return the space taken by caption\n * @memberof GeomCell\n */\n getCaptionSpace () {\n const caption = this.caption();\n\n let captionSpace = { width: 0, height: 0 };\n if (caption) {\n captionSpace = caption.getLogicalSpace();\n }\n return captionSpace;\n }\n\n /**\n * return the space taken up by the element in the dom.\n *\n * @return {Object} Object with width and height fields.\n * @memberof GeomCell\n */\n getLogicalSpace () {\n if (!this.logicalSpace()) {\n this.logicalSpace(computeGeomSpace(this));\n }\n return this.logicalSpace();\n }\n\n /**\n * This method is used to set the space available to\n * render the SimpleCell.\n *\n * @param {number} width The available width.\n * @param {number} height The available height.\n * @return {Instance} Returns current Instance\n * @memberof GeomCell\n */\n setAvailableSpace (width, height) {\n const unit = this.source();\n\n this.availWidth(width);\n this.availHeight(height);\n unit.lockModel();\n unit.width(width).height(height - this.getCaptionSpace().height);\n unit.unlockModel();\n this.logicalSpace(null);\n return this;\n }\n\n /**\n * his method is used to render the visual unit inside the provided cell.\n *\n * @param {HTMLElement} mount The mountpoint in the table.\n * @return {Instance} Returns current Instance\n * @memberof GeomCell\n */\n render (mount) {\n if (mount) {\n this.mount(mount);\n const availHeight = this.availHeight();\n const availWidth = this.availWidth();\n const caption = this.caption();\n const wrapperDiv = makeElement(selectElement(mount), 'div', [1], `${CLASSPREFIX}-${GEOM_CELL}`);\n\n if (caption) {\n const captionDom = makeElement(wrapperDiv, 'div', [caption], `${CLASSPREFIX}-unit-caption`).node();\n caption.render(captionDom);\n }\n const selection = makeElement(wrapperDiv, 'div', [1], `${CLASSPREFIX}-unit`);\n wrapperDiv.style(WIDTH, `${availWidth}px`).style(HEIGHT, `${availHeight}px`);\n selection.style(WIDTH, `${availWidth}px`)\n .style(HEIGHT, `${availHeight - this.getCaptionSpace().height}px`);\n this.source().mount(selection.node());\n }\n return this;\n }\n\n /**\n * Disposes the cell\n *\n * @return {Object} Current instance\n * @memberof GeomCell\n */\n remove () {\n this.mount() && this.mount().remove();\n this.source().remove();\n return this;\n }\n}\n\nexport default GeomCell;\n","import AxisCell from './axis-cell';\nimport BlankCell from './blank-cell';\nimport TextCell from './text-cell';\nimport GeomCell from './geom-cell';\nimport SimpleCell from './simple-cell';\n\nimport * as CONSTANTS from './constants';\n\nexport const DEFAULT_PLACEHOLDERS = {\n [CONSTANTS.SIMPLE_CELL]: SimpleCell,\n [CONSTANTS.TEXT_CELL]: TextCell,\n [CONSTANTS.AXIS_CELL]: AxisCell,\n [CONSTANTS.GEOM_CELL]: GeomCell,\n [CONSTANTS.BLANK_CELL]: BlankCell\n};\n\n","export const SIMPLE_CELL = 'SimpleCell';\nexport const TEXT_CELL = 'TextCell';\nexport const AXIS_CELL = 'AxisCell';\nexport const BLANK_CELL = 'BlankCell';\nexport const GEOM_CELL = 'GeomCell';\n\n","import { DEFAULT_PLACEHOLDERS } from './defaults';\n\n/**\n * Creates a registry for the cells, which can be used for\n * setting a new cell or getting the registered cells\n *\n * @return {Object} Setters and getters for registered cells\n */\nconst cellRegistry = () => {\n const reg = DEFAULT_PLACEHOLDERS;\n return {\n set: (key, def) => {\n if (key in reg) {\n reg[key] = def;\n }\n return cellRegistry;\n },\n get: () => reg\n };\n};\nexport default cellRegistry;\n","import { TextCell } from '@chartshq/visual-cell';\nimport { escapeHTML } from 'muze-utils';\nimport { TOP } from '../constants';\n\n/**\n *\n *\n * @param {*} rawContent\n *\n */\nconst resolveTitleSubTitleContent = (rawContent) => {\n if (typeof rawContent === 'function' && !rawContent._sanitize) {\n return rawContent();\n }\n return escapeHTML(rawContent());\n};\n\n/**\n *\n *\n * @param {*} config\n * @param {*} cellType\n * @param {*} labelManager\n * @param {*} prevCell\n *\n */\nconst headerCreator = (config, cellType, labelManager, prevCell) => {\n let margin = {};\n const {\n content,\n classPrefix,\n maxLines\n } = config;\n const cell = prevCell || new TextCell(\n {\n type: cellType === 'title' ? 'header' : 'text',\n className: `${classPrefix}-${cellType}-cell`\n }, {\n labelManager\n })\n .config({ maxLines }).minSpacing({ width: 0, height: 0 });\n\n cell.source(content);\n cell._minTickDiff = { height: 0, width: 0 };\n\n if (config.position === TOP) {\n margin = { top: 0, bottom: config.padding };\n } else {\n margin = { top: config.padding, bottom: 0 };\n }\n cell.config({ margin });\n\n return {\n height: cell.getLogicalSpace().height,\n cell\n };\n};\n\n/**\n *\n *\n * @param {*} config\n * @param {*} type\n * @param {*} labelManager\n * @param {*} cell\n *\n */\nconst createHeading = (config, type, labelManager, prevCell) => {\n if (!config) { return ''; }\n\n return headerCreator(\n config,\n type,\n labelManager,\n prevCell\n );\n};\n\n/**\n *\n *\n * @param {*} context\n */\nexport const createHeaders = (context, canvasHeight, canvasWidth) => {\n let headerHeight = 0;\n const headers = {};\n const subtitle = context.subtitle();\n const isSubtitle = resolveTitleSubTitleContent(subtitle[0]);\n\n canvasHeight >= 200 && canvasWidth >= 200 && ['title', 'subtitle'].forEach((type) => {\n const headerOptions = context[type]();\n const content = resolveTitleSubTitleContent(headerOptions[0]);\n if (content.length) {\n const config = headerOptions[1];\n\n config.width = context.width();\n config.height = context.height();\n config.classPrefix = context.config().classPrefix;\n config.content = content;\n config.padding = (type === 'title' && !isSubtitle.length) ? subtitle[1].padding : config.padding;\n\n const { height, cell } = createHeading(config, type, context.dependencies().smartlabel,\n context[`${type}Cell`]);\n\n headers[`${type}Cell`] = cell;\n context._composition[type] = cell;\n headerHeight += height;\n }\n });\n return { headerHeight, headers };\n};\n\n","import { TextCell, AxisCell } from '@chartshq/visual-cell';\nimport { getValueParser } from 'muze-utils';\nimport {\n VERTICAL, HORIZONTAL, LEFT, RIGHT, LEGEND_TYPE_MAP, PADDING, BORDER, MARGIN\n} from '../constants';\n\n/**\n *\n *\n * @param {*} legendConfig\n * @param {*} canvases\n *\n */\nexport const legendCreator = (canvas) => {\n let LegendCls;\n const dataset = [];\n const axes = canvas.getRetinalAxes();\n\n Object.entries(axes).forEach((axisInfo) => {\n const scale = axisInfo[1][0];\n const scaleType = axisInfo[0];\n const scaleProps = canvas[scaleType]();\n\n if (scaleProps.field && scale) {\n const {\n type,\n step\n } = scale.config();\n\n const stepMapper = typeof step === 'boolean' ? step : false;\n LegendCls = LEGEND_TYPE_MAP[`${type}-${stepMapper}-${scaleType}`];\n dataset.push({ scale, canvas, fieldName: scaleProps.field, LegendCls, scaleType });\n }\n });\n\n return dataset;\n};\n\n/**\n *\n *\n * @param {*} legendConfig\n * @param {*} canvases\n * @param {*} measurement\n * @param {*} prevLegends\n *\n */\nexport const legendInitializer = (legendConfig, canvas, measurement, prevLegends) => {\n const legends = [];\n const {\n height,\n width,\n headerHeight\n } = measurement;\n const {\n position,\n align\n } = legendConfig;\n\n const legendInfo = legendCreator(canvas);\n const { invalidValues } = canvas.config();\n\n const parser = getValueParser(invalidValues);\n legendInfo.forEach((dataInfo, index) => {\n let legend = {};\n\n const legendMeasures = {};\n const {\n LegendCls,\n scale,\n fieldName,\n scaleType\n } = dataInfo;\n const config = legendConfig[scaleType] || {};\n const title = config.title || {};\n title.text = title.text || fieldName;\n if (config.show) {\n config.position = position;\n config.align = align;\n\n if (prevLegends[index]) {\n legend = prevLegends[index].legend;\n } else {\n legend = LegendCls.create({\n labelManager: canvas._dependencies.smartlabel,\n cells: {\n AxisCell, TextCell\n }\n });\n }\n legendMeasures.maxHeight = align === VERTICAL ? (height - headerHeight) : height * 0.2;\n legendMeasures.maxWidth = align === HORIZONTAL ? width : width * 0.2;\n legendMeasures.width = Math.min(legendMeasures.maxWidth, config.width);\n legendMeasures.height = Math.min(legendMeasures.maxHeight, config.height);\n\n [PADDING, BORDER, MARGIN].forEach((e) => {\n legendMeasures[e] = config[e];\n });\n\n legend.scale(scale)\n .valueParser(parser)\n .title(title)\n .fieldName(fieldName)\n .config(config)\n .metaData(canvas.composition().visualGroup.getGroupByData().project([fieldName]))\n .measurement(legendMeasures)\n .canvasAlias(canvas.alias())\n .setLegendMeasures();\n\n legends.push({ canvas, legend, scaleType });\n }\n });\n return legends;\n};\n\n/**\n *\n *\n * @param {*} legends\n * @param {*} legendConfig\n * @param {*} availableHeight\n * @param {*} availableWidth\n *\n */\nexport const getLegendSpace = (legends, legendConfig, availableHeight, availableWidth) => {\n const legendMeasures = legends.map(legendInfo => legendInfo.legend.measurement());\n const legendSpace = { width: 0, height: 0 };\n\n legendMeasures.forEach((space) => {\n let height = 0;\n let width = 0;\n width = Math.min(space.width, space.maxWidth);\n height = Math.min(space.height, space.maxHeight);\n\n if (legendConfig.align === HORIZONTAL) {\n if (legendSpace.width + width > availableWidth) {\n legendSpace.width = availableWidth;\n legendSpace.height += height;\n } else {\n legendSpace.width += width;\n legendSpace.height = Math.max(legendSpace.height, height);\n }\n } else if (legendSpace.height + height > availableHeight) {\n legendSpace.height = height;\n legendSpace.width += width;\n } else {\n legendSpace.height += height;\n legendSpace.width = Math.max(legendSpace.width, width);\n }\n });\n if (legendConfig.align === HORIZONTAL) {\n legendSpace.width = availableWidth;\n }\n return legendSpace;\n};\n\n/**\n *\n *\n * @param {*} context\n * @param {*} headerHeight\n *\n */\nexport const createLegend = (context, headerHeight, height, width) => {\n const measurement = {\n height,\n width,\n headerHeight\n };\n const { legend } = context.config();\n const { show, position } = legend;\n\n legend.classPrefix = context.config().classPrefix;\n const align = (position === LEFT || position === RIGHT) ? VERTICAL : HORIZONTAL;\n\n legend.show = show ? ((align === VERTICAL && width > 200) || (align === HORIZONTAL && height > 200)) : show;\n legend.align = align;\n return legendInitializer(legend, context, measurement, context.legends || []);\n};\n","import { LayoutComponent } from '../../../../layout/src/tree-layout';\n\nexport default class MuzeComponent extends LayoutComponent {\n getLogicalSpace () {\n const { width, height } = this.boundBox();\n return { width, height };\n }\n\n setSpatialConfig (conf) {\n this.boundBox({ top: conf.y, left: conf.x });\n this.newDimensions = {\n width: conf.width,\n height: conf.height\n };\n this.renderAt(conf.renderAt);\n }\n\n getBoundBox () {\n return this.boundBox();\n }\n\n updateWrapper () {\n throw Error('Update is not implemented');\n }\n\n setParams () {\n throw Error('set params is not implemented');\n }\n}\n","import { selectElement } from 'muze-utils';\nimport MuzeComponent from './muze-chart-component';\nimport { LEFT } from '../../constants';\n\nexport default class HeaderComponent extends MuzeComponent {\n constructor (params) {\n super(params.name, params.component.getLogicalSpace(), 0);\n this.setParams(params);\n }\n\n renderHeader (container) {\n const layoutConfig = this.params.config;\n container = selectElement(container);\n const { align } = layoutConfig;\n const sel = container\n .selectAll(`.${layoutConfig.classPrefix}-inner-container`)\n .data([this.name]);\n sel.exit().remove();\n const selEnter = sel.enter().append('div');\n\n const cont = selEnter.merge(sel);\n cont.classed(`${layoutConfig.classPrefix}-inner-container`, true);\n const { height, width } = this.boundBox();\n this.component.setAvailableSpace(width, height);\n\n this.component && this.component.render(cont.node());\n\n cont.selectAll('div').classed(`${layoutConfig.classPrefix}-inner-content`, true);\n cont.style('width', `${100}%`);\n\n if (layoutConfig && this.component) {\n cont.style('float', LEFT)\n .style('text-align', align);\n // .style(`padding-${position === TOP ? BOTTOM : TOP}`, `${padding}px`);\n }\n }\n\n draw (container) {\n this.renderHeader(container || document.getElementById(this.renderAt()));\n }\n\n updateWrapper (params) {\n this.name(params.name);\n this.boundBox(params.component.getLogicalSpace());\n return this;\n }\n\n setParams (params) {\n this.component = params.component;\n this.params = params;\n this.target(params.config.target);\n this.position(params.config.position);\n this.className(params.config.className);\n this.alignWith(params.config.alignWith);\n this.alignment(params.config.alignment);\n }\n\n setSpatialConfig (conf) {\n this.boundBox({ top: conf.y,\n left: conf.x,\n width: conf.width,\n height: conf.height });\n this.renderAt(conf.renderAt);\n }\n}\n","import { makeElement, selectElement } from 'muze-utils';\nimport MuzeComponent from './muze-chart-component';\nimport {\n LEFT, RIGHT, VERTICAL, HORIZONTAL, TOP, BOTTOM, HORIZONTAL_CENTER, VERTICAL_CENTER\n} from '../../constants';\nimport { ROW_MATRIX_INDEX, COLUMN_MATRIX_INDEX } from '../../../../layout/src/enums/constants';\n\nfunction defaultAlignmentHelper (position) {\n let alignment = null;\n const alignWith = `${ROW_MATRIX_INDEX[1]}-${COLUMN_MATRIX_INDEX[1]}`;\n switch (position) {\n case TOP:\n case BOTTOM:\n alignment = HORIZONTAL_CENTER;\n break;\n case LEFT:\n case RIGHT:\n alignment = VERTICAL_CENTER;\n break;\n default:\n alignment = VERTICAL_CENTER;\n }\n return { alignment, alignWith };\n}\nexport default class LegendComponent extends MuzeComponent {\n constructor (params) {\n super(params.name, params.config.measurement.legendSpace, 0);\n this.setParams(params);\n }\n\n renderLegend (container) {\n container = selectElement(container);\n const sectionComponents = [];\n const { position, classPrefix } = this.params.config;\n const legendMount = makeElement(container, 'div', [this.components],\n `${classPrefix}-inner-content`, {}, d => d);\n legendMount.classed(`${classPrefix}-legend`, true);\n const align = (position === LEFT || position === RIGHT) ? VERTICAL : HORIZONTAL;\n const legWidth = this.newDimensions.width;\n const legHeight = this.newDimensions.height;\n\n [container, legendMount].forEach((elem) => {\n elem.style('width', `${Math.floor(legWidth)}px`)\n .style('height', `${legHeight}px`)\n .style('float', LEFT);\n });\n\n if (align === VERTICAL) {\n let sections = -1;\n let currHeight = legHeight;\n let currWidth = 0;\n\n this.components.forEach((legendInfo) => {\n const leg = legendInfo.legend;\n if (leg.measurement().height > currHeight) {\n sections++;\n currWidth = 0;\n currHeight = legHeight;\n } else {\n sections < 0 && sections++;\n }\n sectionComponents[sections] = sectionComponents[sections] || [];\n currHeight -= Math.min(leg.measurement().height, currHeight);\n currWidth = Math.max(Math.min(leg.measurement().width, leg.measurement().maxWidth), currWidth);\n sectionComponents[sections].push({\n legend: leg,\n legendHeight: legHeight,\n legendWidth: currWidth\n });\n });\n\n const mount = makeElement(legendMount, ['div'], sectionComponents, `${classPrefix}-legend-section`);\n // mount.each((d, i) => selectElement(this).classed(`${classPrefix}-legend-section-${i}`, true));\n mount.classed(`${classPrefix}-legend-vertical-section`, true)\n .style('width', d => `${d[0].legendWidth}px`);\n makeElement(mount, ['div'], d => d, `${classPrefix}-legend-components`, {}, d => d.legend.id())\n .each(function (d) {\n d.legend.mount(this);\n })\n .style('width', d => `${d.legendWidth}px`);\n } else {\n const mount = makeElement(legendMount, 'div', [1], `${classPrefix}-legend-section`);\n mount.classed(`${classPrefix}-legend-horizontal-section`, true);\n mount.classed(`${classPrefix}-legend-section-${0}`, true)\n .style('width', `${legWidth}px`);\n\n makeElement(mount, 'div', this.components, `${classPrefix}-legend-components`, {}, d => d.legend.id())\n .each(function (d) { d.legend.mount(this); })\n .style('width', d => `${d.legend.measurement().width}px`);\n }\n }\n\n draw (container) {\n this.renderLegend(container || document.getElementById(this.renderAt()));\n }\n\n updateWrapper (params) {\n this.name(params.name);\n this.boundBox(params.config.measurement.legendSpace);\n this.setParams(params);\n return this;\n }\n\n setParams (params) {\n this.components = params.component;\n this.params = params;\n this.target(params.config.target);\n this.position(params.config.position);\n const { alignWith, alignment } = defaultAlignmentHelper(params.config.position);\n this.className(params.config.className);\n this.alignWith(params.config.alignWith || alignWith);\n this.alignment(params.config.alignment || alignment);\n }\n\n}\n","import {\n selectElement,\n makeElement,\n getD3Drag,\n getEvent,\n getWindow,\n hasTouch\n} from 'muze-utils';\nimport './scroll-bar.scss';\nimport { WIDTH, HEIGHT } from '../../../constants';\n\nconst d3Drag = getD3Drag();\n\nconst arrowSizeMap = {\n left: WIDTH,\n right: WIDTH,\n top: HEIGHT,\n bottom: HEIGHT\n};\n\nexport const getUnitPositions = (unitMeasures, totalLength, viewLength) => {\n let currentLen = 0;\n const measures = unitMeasures.primary && unitMeasures.primary.length ?\n unitMeasures.primary : unitMeasures.secondary;\n\n return measures.map((e) => {\n const unitPosition = currentLen * 100 / (totalLength - viewLength);\n currentLen += e;\n return unitPosition;\n });\n};\n\nexport const createScrollBarArrow = (mount, type, config) => {\n const {\n classPrefix,\n thickness\n } = config;\n const arrow = makeElement(mount, 'div', [type], `${classPrefix}-scroll-arrow-${type}`);\n\n arrow.classed(`${classPrefix}-scroll-arrow`, true);\n arrow.style(arrowSizeMap[type], `${thickness}px`);\n\n const chevron = makeElement(arrow, 'div', [1], `${classPrefix}-scroll-arrow-chevron`);\n\n chevron.attr('id', `${classPrefix}-scroll-arrow-chevron-${type}`);\n\n return arrow;\n};\n\nexport const createScrollBarRect = (mount, config) => {\n const {\n classPrefix\n } = config;\n const rect = makeElement(mount, 'div', [1], `${classPrefix}-scroll-rect`);\n const mover = makeElement(rect, 'div', [1], `${classPrefix}-scroll-mover`);\n\n return { rect, mover };\n};\n\nexport const applyRectClick = (scrollMaker, moverRect) => {\n const {\n rect\n } = moverRect;\n\n rect.on('click', () => {\n const event = getEvent();\n scrollMaker.emptyScrollAreaClick(event);\n });\n};\n\nconst applyMoverDrag = (scrollMaker, moverRect) => {\n let startPos = {};\n let moverStartPos = 0;\n let endPos = {};\n const {\n mover,\n rect\n } = moverRect;\n const rectStartPos = rect.node().getBoundingClientRect();\n\n mover.call(d3Drag()\n .on('start', () => {\n const event = getEvent();\n\n moverStartPos = mover.node().getBoundingClientRect();\n startPos = {\n x: event.x,\n y: event.y\n };\n })\n .on('drag', () => {\n const event = getEvent();\n const window = getWindow();\n\n endPos = {\n x: event.x,\n y: event.y\n };\n const distanceMoved = {\n x: endPos.x - startPos.x,\n y: endPos.y - startPos.y\n };\n const actualPosition = {\n x: moverStartPos.x + distanceMoved.x - rectStartPos.x + window.pageXOffset,\n y: moverStartPos.y + distanceMoved.y - rectStartPos.y + window.pageYOffset\n };\n\n scrollMaker.changeMoverPosition(actualPosition);\n }));\n};\n\nconst applyScrollMouseDownAction = (moverRect, scrollMaker, speed) => {\n const {\n mover,\n rect\n } = moverRect;\n const { x, y } = mover.node().getBoundingClientRect();\n const { x: rectX, y: rectY } = rect.node().getBoundingClientRect();\n\n scrollMaker.changeMoverPosition({ x: x - rectX + speed, y: y - rectY + speed });\n};\n\nconst registerListenerOnArrow = (scrollMaker, moverRect, arrowType, speed) => {\n let timer = '';\n const arrow = scrollMaker._components[arrowType];\n const isTouchDevice = hasTouch();\n\n arrow.on(isTouchDevice ? 'touchstart' : 'mousedown', () => {\n const event = getEvent();\n\n event.preventDefault();\n\n timer = setInterval(() => {\n applyScrollMouseDownAction(moverRect, scrollMaker, speed);\n }, 100);\n }).on(isTouchDevice ? 'touchend' : 'mouseup', () => {\n const event = getEvent();\n\n event.preventDefault();\n\n clearInterval(timer);\n }).on('click', () => {\n applyScrollMouseDownAction(moverRect, scrollMaker, speed);\n });\n};\n\nexport const registerListeners = (scrollMaker) => {\n const {\n moverRect\n } = scrollMaker._components;\n\n const speed = scrollMaker.config().speed;\n\n registerListenerOnArrow(scrollMaker, moverRect, 'prevArrow', -speed);\n applyMoverDrag(scrollMaker, moverRect);\n applyRectClick(scrollMaker, moverRect);\n registerListenerOnArrow(scrollMaker, moverRect, 'nextArrow', speed);\n};\n\nexport const scrollContainerHelper = (mountPoint, config, dimensions, type) => {\n const {\n classPrefix\n } = config;\n const scrollBarContainer = makeElement(selectElement(mountPoint), 'div', [1], `#${classPrefix}-scroll-bar-${type}`);\n\n scrollBarContainer.classed(`${classPrefix}-scroll-bar`, true);\n scrollBarContainer.style(WIDTH, `${dimensions.width}px`);\n scrollBarContainer.style(HEIGHT, `${dimensions.height}px`);\n return scrollBarContainer;\n};\n\n","import { mergeRecursive } from 'muze-utils';\n\nexport const PROPS = {\n\n config: {\n sanitization: (context, value) => {\n value = mergeRecursive(context._config, value);\n return value;\n }\n },\n manager: {},\n unitPositions: {},\n logicalSpace: {}\n};\n\n","import { ERROR_MSG, generateGetterSetters } from 'muze-utils';\nimport {\n scrollContainerHelper,\n registerListeners\n} from './helper';\nimport { PROPS } from './props';\n\nexport class ScrollMaker {\n\n constructor () {\n this._components = {};\n this._logicalSpace = {};\n this._attachedScrollAction = () => {};\n this._config = {\n thickness: 10,\n speed: 2\n };\n this._unitPositions = null;\n\n generateGetterSetters(this, PROPS);\n }\n\n static type () {\n throw new ERROR_MSG('Method not implemented');\n }\n\n emptyScrollAreaClick () {\n throw new ERROR_MSG('Method not implemented');\n }\n\n changeMoverPosition () {\n throw new ERROR_MSG('Method not implemented');\n }\n\n scrollTo () {\n throw new ERROR_MSG('Method not implemented');\n }\n\n scrollDeltaTo () {\n throw new ERROR_MSG('Method not implemented');\n }\n\n createScroll (mountPoint) {\n const config = this.config();\n\n return {\n scrollBarContainer: scrollContainerHelper(mountPoint, config, this.logicalSpace(), this.constructor.type())\n };\n }\n\n attachScrollAction (externalScrollAction) {\n this._attachedScrollAction = externalScrollAction;\n return this;\n }\n\n detachScrollAction () {\n this._attachedScrollAction = () => {};\n return this;\n }\n\n getLogicalSpace () {\n return this.logicalSpace();\n }\n\n registerListeners () {\n registerListeners(this);\n return this;\n }\n\n remove () {\n this._components.scrollBarContainer.remove();\n return this;\n }\n}\n\n","import MuzeComponent from './muze-chart-component';\nimport { HorizontalScrollMaker } from './scroll-bar-maker/horizontal-scroll-maker';\nimport { VerticalScrollMaker } from './scroll-bar-maker/vertical-scroll-maker';\n\nconst scrollMakerMap = {\n horizontal: HorizontalScrollMaker,\n vertical: VerticalScrollMaker\n};\n\n/**\n * Scroll Component acts as a wrapper over the scoll bars created using the respective Scroll Makers\n * This provides a consistent API for layouting using the tree layout system.\n *\n *\n * @class\n * @public\n * @module ScrollComponent\n */\nexport default class ScrollComponent extends MuzeComponent {\n\n constructor (params) {\n const ScrollMaker = scrollMakerMap[params.config.type];\n\n params.component = new ScrollMaker();\n params.component.config(params.config.scrollBarComponentConfig);\n params.component.logicalSpace(params.dimensions);\n super(params.name, params.component.getLogicalSpace(), 0);\n this.setParams(params);\n }\n\n manager (...manager) {\n if (manager.length) {\n this.component.manager(manager[0]);\n return this;\n }\n return this.component.manager();\n }\n\n /**\n * Scrolls based on the actual pixel value provided. Since it's a delta change, the input will be\n * a delta between (-Infinity, Infinity), based on which the scroll will occur. Only a delta movement in\n * scroll occurs\n *\n * @public\n *\n * @param {number} delta Based on which the scroll will have a delta change in position\n * @return {ScrollComponent} Instance of the ScrollComponent\n */\n scrollDeltaTo (delta) {\n this.component.scrollDeltaTo(delta);\n return this;\n }\n\n /**\n * Scrolls to the specific point in the page. The input is provided as a percentage (0 - 100)\n *\n * @public\n *\n * @param {number} scrollPercentage Its the percentage based on which the scroll action will occur\n * @return {ScrollComponent} Instance of the ScrollComponent\n */\n scrollTo (scrollPercentage) {\n this.component.scrollTo(scrollPercentage);\n return this;\n }\n\n /**\n * Scrolls to the specific point in the page based on the unit index.\n * The input is provided as a number represting the index for the unit.\n * For vertical scroll, it's the row index that will be required.\n * For horizontal scroll, it's the column index that will be required\n *\n * @public\n *\n * @param {number} unitIndex Index of the unit appearing in the grid\n * @return {ScrollComponent} Instance of the ScrollComponent\n */\n scrollToUnitIndex (unitIndex) {\n const unitPositions = this.component.unitPositions();\n const sanitizedUnitIndex = Math.min(Math.max(0, unitIndex), unitPositions.length - 1);\n this.component.scrollTo(unitPositions[sanitizedUnitIndex]);\n return this;\n }\n\n /**\n * Provides the positions of the units(either horizontal or vertical based on the type\n * of scroll bar it wraps) relative to it's container. The position of the first unit starts at 0\n *\n *\n * @public\n *\n * @return {Array} Positions of units either horizontal or vertical\n */\n getScrollPositionsForUnits () {\n return this.component.unitPositions();\n }\n\n draw (container) {\n this.component.createScroll(container || document.getElementById(this.renderAt()));\n return this;\n }\n\n /**\n * Can be used to attach a scroll action whenever scrolling occurs in the canvas\n *\n * @public\n * @param {number} externalAction Action to be attached during scroll\n * @return {ScrollComponent} Instance of the ScrollComponent\n */\n attachScrollAction (externalAction) {\n this.component.attachScrollAction(externalAction);\n return this;\n }\n\n /**\n * Can be used to detach the scroll action already bound to the scroll bar\n *\n * @public\n * @return {ScrollComponent} Instance of the ScrollComponent\n */\n detachScrollAction () {\n this.component.detachScrollAction();\n return this;\n }\n\n updateWrapper (params) {\n this.name(params.name);\n this.component.config(params.config.scrollBarComponentConfig);\n this.component.logicalSpace(params.dimensions);\n this.boundBox(this.component.getLogicalSpace());\n this.setParams(params);\n return this;\n }\n\n setParams (params) {\n this.component = params.component || this.component;\n this.params = params;\n this.target(params.config.target);\n this.position(params.config.position);\n this.className(params.config.className);\n this.alignWith(params.config.alignWith);\n this.alignment(params.config.alignment);\n }\n\n remove () {\n this.component.remove();\n }\n}\n","import { ScrollMaker } from './scroll-maker';\nimport { createScrollBarRect, createScrollBarArrow, getUnitPositions } from './helper';\nimport { HORIZONTAL, HEIGHT, WIDTH, LEFT } from '../../../constants';\n\nexport class HorizontalScrollMaker extends ScrollMaker {\n\n /**\n * Describes the type of the ScrollMaker\n *\n * @public\n *\n * @return {String} Returns the type of scroll maker: horizontal\n */\n static type () {\n return HORIZONTAL;\n }\n\n createScroll (mountPoint, dimensions = this.logicalSpace()) {\n const config = this.config();\n const { scrollBarContainer } = super.createScroll(mountPoint, config, dimensions);\n const prevArrow = createScrollBarArrow(scrollBarContainer, 'left', config);\n const moverRect = createScrollBarRect(scrollBarContainer, config);\n const nextArrow = createScrollBarArrow(scrollBarContainer, 'right', config);\n const {\n mover,\n rect\n } = moverRect;\n\n const { height, width, totalLength, viewLength, unitWidths } = this.logicalSpace();\n const scrollBarWithouArrowLength = width - height * 2;\n\n rect.style(WIDTH, `${dimensions.width - height * 2}px`);\n rect.style(HEIGHT, `${100}%`);\n mover.style(WIDTH, `${(viewLength * scrollBarWithouArrowLength) / totalLength}px`);\n mover.style(HEIGHT, `${100}%`);\n mover.style(LEFT, `${0}px`);\n\n this._components = {\n prevArrow,\n nextArrow,\n moverRect,\n scrollBarContainer\n };\n this._scrollBarWithouArrowLength = scrollBarWithouArrowLength;\n this.unitPositions(getUnitPositions(unitWidths, totalLength, viewLength));\n this.registerListeners();\n }\n\n emptyScrollAreaClick (event) {\n const {\n mover,\n rect\n } = this._components.moverRect;\n const speed = this.config().speed;\n const { x, y } = mover.node().getBoundingClientRect();\n const { x: rectX, y: rectY } = rect.node().getBoundingClientRect();\n let positionAdjuster = speed * 10;\n if (event.x < x) {\n positionAdjuster = -speed * 10;\n }\n this.changeMoverPosition({ x: x - rectX + positionAdjuster, y: y - rectY + positionAdjuster });\n }\n\n changeMoverPosition (newPosition) {\n let currentPos;\n const {\n mover,\n rect\n } = this._components.moverRect;\n const rectStartPos = rect.node().getBoundingClientRect();\n const moverPos = mover.node().getBoundingClientRect();\n const {\n totalLength\n } = this.logicalSpace();\n\n if (newPosition.x < 0) {\n currentPos = 0;\n } else if (newPosition.x + moverPos.width > rectStartPos.width) {\n currentPos = rectStartPos.width - moverPos.width;\n } else {\n currentPos = newPosition.x;\n }\n\n mover.style(LEFT, `${currentPos}px`);\n const totalDistance = this._scrollBarWithouArrowLength;\n const movedViewLength = (currentPos * totalLength) / totalDistance;\n\n this.manager().performAttachedScrollFunction(this.constructor.type(), movedViewLength);\n }\n\n scrollDeltaTo (delta) {\n const {\n mover,\n rect\n } = this._components.moverRect;\n const moverPos = mover.node().getBoundingClientRect();\n const rectStartPos = rect.node().getBoundingClientRect();\n\n this.changeMoverPosition({ y: 0, x: moverPos.x - rectStartPos.x - delta });\n return this;\n }\n\n /**\n * Scrolls to the specific point in the page. The input is provided as a percentage (0 - 100)\n *\n * @public\n *\n * @param {number} scrollPercentage Its the percentage based on which the scroll action will occur\n * @return {HorizontalScrollMaker} Instance of the HorizontalScrollMaker\n */\n scrollTo (scrollPercentage) {\n const {\n mover\n } = this._components.moverRect;\n const moverPos = mover.node().getBoundingClientRect();\n const movement = (scrollPercentage * (this._scrollBarWithouArrowLength - moverPos.width)) / 100;\n\n this.changeMoverPosition({ y: 0, x: movement });\n return this;\n }\n\n}\n\n","import { ScrollMaker } from './scroll-maker';\nimport { createScrollBarRect, createScrollBarArrow, getUnitPositions } from './helper';\nimport { VERTICAL, TOP, HEIGHT, WIDTH } from '../../../constants';\n\nexport class VerticalScrollMaker extends ScrollMaker {\n\n /**\n * Describes the type of the ScrollMaker\n *\n * @public\n *\n * @return {String} Returns the type of scroll maker: vertical\n */\n static type () {\n return VERTICAL;\n }\n\n createScroll (mountPoint, dimensions = this.logicalSpace()) {\n const config = this.config();\n const { scrollBarContainer } = super.createScroll(mountPoint, dimensions);\n const prevArrow = createScrollBarArrow(scrollBarContainer, 'top', config);\n const moverRect = createScrollBarRect(scrollBarContainer, config);\n const nextArrow = createScrollBarArrow(scrollBarContainer, 'bottom', config);\n const {\n mover,\n rect\n } = moverRect;\n const { height, width, totalLength, viewLength, unitHeights } = this.logicalSpace();\n const scrollBarWithouArrowLength = height - width * 2;\n\n rect.style(HEIGHT, `${scrollBarWithouArrowLength}px`);\n rect.style(WIDTH, `${100}%`);\n mover.style(WIDTH, `${100}%`);\n mover.style(HEIGHT, `${(viewLength * scrollBarWithouArrowLength) / totalLength}px`);\n mover.style(TOP, `${0}px`);\n\n this._components = {\n prevArrow,\n nextArrow,\n moverRect,\n scrollBarContainer\n };\n this._scrollBarWithouArrowLength = scrollBarWithouArrowLength;\n\n this.unitPositions(getUnitPositions(unitHeights, totalLength, viewLength));\n this.registerListeners();\n }\n\n emptyScrollAreaClick (event) {\n const {\n mover,\n rect\n } = this._components.moverRect;\n const speed = this.config().speed;\n const { x, y } = mover.node().getBoundingClientRect();\n const { x: rectX, y: rectY } = rect.node().getBoundingClientRect();\n\n let positionAdjuster = speed * 10;\n if (event.y < y) {\n positionAdjuster = -speed * 10;\n }\n this.changeMoverPosition({ x: x - rectX + positionAdjuster, y: y - rectY + positionAdjuster });\n }\n\n changeMoverPosition (newPosition) {\n let currentPos;\n const {\n mover,\n rect\n } = this._components.moverRect;\n const {\n totalLength\n } = this.logicalSpace();\n const rectStartPos = rect.node().getBoundingClientRect();\n const moverPos = mover.node().getBoundingClientRect();\n\n if (newPosition.y < 0) {\n currentPos = 0;\n } else if (newPosition.y + moverPos.height > rectStartPos.height) {\n currentPos = rectStartPos.height - moverPos.height;\n } else {\n currentPos = newPosition.y;\n }\n mover.style(TOP, `${currentPos}px`);\n const totalDistance = this._scrollBarWithouArrowLength;\n const movedViewLength = (currentPos * totalLength) / totalDistance;\n\n this.manager().performAttachedScrollFunction(this.constructor.type(), movedViewLength);\n }\n\n /**\n * Scrolls based on the actual pixel value provided. Since it's a delta change, the input will be\n * a delta between (-Infinity, Infinity), based on which the scroll will occur. Only a delta movement in\n * scroll occurs\n *\n * @public\n *\n * @param {number} delta Based on which the scroll will have a delta change in position\n * @return {VerticalScrollMaker} Instance of the VerticalScrollMaker\n */\n scrollDeltaTo (delta) {\n const {\n mover,\n rect\n } = this._components.moverRect;\n const moverPos = mover.node().getBoundingClientRect();\n const rectStartPos = rect.node().getBoundingClientRect();\n\n this.changeMoverPosition({ y: moverPos.y - rectStartPos.y - delta, x: 0 });\n return this;\n }\n\n /**\n * Scrolls to the specific point in the page. The input is provided as a percentage (0 - 100)\n *\n * @public\n *\n * @param {number} scrollPercentage Its the percentage based on which the scroll action will occur\n * @return {VerticalScrollMaker} Instance of the VerticalScrollMaker\n */\n scrollTo (scrollPercentage) {\n const {\n mover\n } = this._components.moverRect;\n const moverPos = mover.node().getBoundingClientRect();\n const movement = (scrollPercentage * (this._scrollBarWithouArrowLength - moverPos.height)) / 100;\n\n this.changeMoverPosition({ x: 0, y: movement });\n return this;\n }\n\n}\n","import { makeElement } from 'muze-utils';\nimport { cellSpanMaker, applySpans } from '../../../../layout/src/grid-layout/span-maker';\nimport { applyBorders } from '../../../../layout/src/grid-layout/border-helper';\n\nimport {\n TOP, CENTER\n} from '../../../../layout/src/enums/constants';\nimport MuzeComponent from './muze-chart-component';\nimport { WIDTH, HEIGHT, HIDDEN, OVERFLOW, AUTO, VISIBLE } from '../../constants';\n\nconst renderPlaceholders = (cells) => {\n // Rendering content within placeholders\n cells.each(function (cell) {\n cell.placeholder.render(this);\n });\n};\n\nexport default class MatrixComponent extends MuzeComponent {\n\n constructor (params) {\n super(params.name, params.config.dimensions, 0);\n this.setParams(params);\n this.className(params.config.className);\n }\n\n applyScroll (container) {\n const row = this.params.config.row;\n const column = this.params.config.column;\n const { horizontal, vertical } = this.params.config.scrollInfo;\n container.style(OVERFLOW, VISIBLE);\n container.style(WIDTH, AUTO);\n container.style(HEIGHT, AUTO);\n\n if (horizontal && column === 1) {\n container.style(OVERFLOW, HIDDEN);\n container.style(WIDTH, '100%');\n }\n\n if (vertical && row === CENTER) {\n container.style(OVERFLOW, HIDDEN);\n container.style(HEIGHT, '100%');\n }\n }\n\n renderMatrix (mountPoint) {\n // Creating containers for each matrix individually\n const classPrefix = this.params.config.classPrefix;\n const row = this.params.config.row;\n const column = this.params.config.column;\n const dimensions = this.params.config.dimensions;\n const border = this.params.config.border;\n\n // Creating containers for each matrix individually\n const containerForMatrix = makeElement(mountPoint, 'div', [1], `${classPrefix}-grid-${row}-${column + 1}`)\n .classed(`${classPrefix}-grid-${row}`, true)\n .classed(`${classPrefix}-grid`, true);\n\n this.applyScroll(containerForMatrix);\n\n const {\n viewMatrix,\n spans\n } = cellSpanMaker(this.component, row, column);\n\n // Rendering the table components\n const { cells } = this.renderTable(containerForMatrix, `${classPrefix}-grid`, viewMatrix);\n\n applySpans(cells, spans, { dimensions, border }, `${row}-${column}`);\n renderPlaceholders(cells);\n\n cells.exit().each((cell) => {\n cell.placeholder.remove();\n });\n\n applyBorders(cells, border, row, column);\n }\n\n renderTable (mount, className, rowData) {\n const table = makeElement(mount, 'table', ['layout'], `${className}-table`);\n const body = makeElement(table, 'tbody', ['layout'], `${className}-body`);\n const rows = makeElement(body, 'tr', rowData, `${className}-tr`);\n const cells = makeElement(rows, 'td', (d, i) => d.filter(e => e !== null).map(e =>\n ({ placeholder: e, rowIndex: i })), `${className}-td`, {}, key => key.placeholder.id);\n\n return { table, body, rows, cells };\n }\n\n draw (container) {\n this.renderMatrix(container || document.getElementById(this.renderAt()));\n }\n\n updateWrapper (params) {\n this.name(params.name);\n this.boundBox(params.config.dimensions);\n this.setParams(params);\n return this;\n }\n\n setParams (params) {\n this.component = params.component;\n this.params = params;\n this.target(params.config.target);\n this.position(TOP);\n this.className(params.config.className);\n }\n}\n","import { selectElement, getEvent } from 'muze-utils';\nimport MuzeComponent from './muze-chart-component';\nimport MatrixComponent from './matrix-component';\nimport { ROW_MATRIX_INDEX, COLUMN_MATRIX_INDEX } from '../../../../layout/src/enums/constants';\n\n/**\n * Based on the type of scroll, it changes the scrollLeft/scrollTop property of the specific\n * elements based on the scroll distance provided\n *\n *\n */\nconst applyScrollAction = (elem, classPrefix, scollDistance, type) => {\n selectElement(elem)\n .selectAll(`.${classPrefix}-grid`)\n .property(type, scollDistance);\n};\n\n/**\n * Applies the action of the scroll by actually scrolling the respective matrices based on the\n * type of scroll. It returns a function which has both the scroll methods available\n *\n * @return {Object} contains the horizontal and vertical scroll actions on the grid component\n */\nconst scrollActionApplier = (movement, context) => {\n const classPrefix = context.params.config.classPrefix;\n\n return {\n horizontal: () => {\n [0, 1, 2].forEach(e =>\n applyScrollAction(`#${context.component[e][1].renderAt()}`, classPrefix, movement, 'scrollLeft'));\n },\n vertical: () => {\n [0, 1, 2].forEach(e =>\n applyScrollAction(`#${context.component[1][e].renderAt()}`, classPrefix, movement, 'scrollTop'));\n }\n };\n};\n\nexport default class GridComponent extends MuzeComponent {\n\n constructor (params) {\n super(params.name, params.config.dimensions, 0);\n this.gridComponents = [];\n this.setParams(params);\n }\n\n sanitizeGrid () {\n let height = 0;\n let width = 0;\n const { viewMatricesInfo, layoutDimensions } = this.component.viewInfo();\n const scrollInfo = this.component.scrollInfo();\n\n for (let i = 0; i < 3; i++) {\n if (!(this.gridComponents.length && this.gridComponents[i] instanceof Array)) {\n this.gridComponents[i] = [];\n }\n for (let j = 0; j < 3; j++) {\n const matrixDim = { height: layoutDimensions.viewHeight[i], width: layoutDimensions.viewWidth[j] };\n const matrix = viewMatricesInfo.matrices[`${ROW_MATRIX_INDEX[i]}`][j];\n const matrixName = `${ROW_MATRIX_INDEX[i]}-${COLUMN_MATRIX_INDEX[j]}`;\n const matrixConfig = {\n dimensions: matrixDim,\n border: layoutDimensions.border,\n classPrefix: this.params.config.classPrefix,\n scrollInfo,\n row: ROW_MATRIX_INDEX[i],\n column: j\n };\n if (this.gridComponents[i][j] instanceof MuzeComponent) {\n this.gridComponents[i][j].updateWrapper({\n name: matrixName,\n component: matrix,\n config: matrixConfig\n });\n } else {\n const matrixWrapper = new MatrixComponent({\n name: matrixName,\n component: matrix,\n config: matrixConfig\n });\n this.gridComponents[i].push(matrixWrapper);\n }\n if (i === 0) {\n width += matrixDim.width;\n }\n if (j === 0) {\n height += matrixDim.height;\n }\n }\n }\n this.boundBox({ height, width });\n\n this.component = this.gridComponents;\n this.allComponents = this.gridComponents;\n }\n\n scrollBarManager (...manager) {\n if (manager.length) {\n this._scrollBarManager = manager[0];\n return this;\n }\n return this._scrollBarManager;\n }\n\n /**\n * Attaches a mousewheel listener to the center matrix, based on which the scrolling can occur.\n * It uses the scroll component to change the position of the scroller, which ultimately scrolls the center matrix\n *\n *\n * @return {GridComponent} Instance of the GridComponent\n */\n attachScrollListener () {\n selectElement(`#${this.component[1][1].renderAt()}`)\n .on('wheel', () => {\n const event = getEvent();\n const {\n wheelDeltaX,\n wheelDeltaY\n } = event;\n\n // Prevent default behaviour and stop propagating\n event.preventDefault();\n event.stopPropagation();\n\n // Scrolling horizontally\n if (wheelDeltaX !== 0 && Math.abs(wheelDeltaX) > Math.abs(wheelDeltaY)) {\n this.scrollBarManager().triggerScrollBarAction('horizontal', wheelDeltaX);\n }\n\n // Scrolling Vertically\n if (wheelDeltaY !== 0 && Math.abs(wheelDeltaX) < Math.abs(wheelDeltaY)) {\n this.scrollBarManager().triggerScrollBarAction('vertical', wheelDeltaY);\n }\n });\n return this;\n }\n\n performScrollAction (direction, movedView) {\n scrollActionApplier(movedView, this)[direction]();\n return this;\n }\n\n getBoundBox () {\n const { top, left } = this.component[0][0].boundBox();\n const { height, width } = this.boundBox();\n\n return {\n top,\n left,\n height,\n width\n };\n }\n\n updateWrapper (params) {\n this.name(params.name);\n this.boundBox(params.config.dimensions);\n this.setParams(params);\n return this;\n }\n\n setParams (params) {\n this.component = params.component;\n this.params = params;\n this.target(params.config.target);\n this.className(params.config.className);\n this.sanitizeGrid();\n return this;\n }\n}\n","import { TITLE, SUB_TITLE, LEGEND, VERTICAL, HORIZONTAL, WIDTH, HEIGHT, TOP, LEFT, RIGHT } from '../constants';\nimport HeaderComponent from './components/headerComponent';\nimport LegendComponent from './components/legendComponent';\nimport ScrollComponent from './components/scroll-component';\nimport GridComponent from './components/grid-component';\nimport { TITLE_CONFIG, SUB_TITLE_CONFIG, GRID, CANVAS, LAYOUT_ALIGN } from './defaults';\nimport { ROW_MATRIX_INDEX, COLUMN_MATRIX_INDEX, CENTER } from '../../../layout/src/enums/constants';\n\n// Mapping between types of headers and their required configs for wrapper creation\nconst headerMap = {\n title: {\n headerCell: 'titleCell',\n configType: TITLE_CONFIG\n },\n subtitle: {\n headerCell: 'subtitleCell',\n configType: SUB_TITLE_CONFIG\n }\n};\n\n/**\n * Creates the wrapper for the header, i.e., title and subtitle to be used in the tree layout\n *\n *\n * @param {string} headerType type of header: title/subtite\n * @param {LayoutManager} layoutManager instance of Layout Manager which manages the layouting of the components\n * @param {Object} renderDetails Extra details required for rendering the headers\n * @return {Instance} Returns the respective wrappers\n */\nconst createHeaderWrapper = (headerType, layoutManager, renderDetails) => {\n let wrapper = null;\n\n const { components, layoutConfig } = renderDetails;\n const { headerCell, configType } = headerMap[headerType];\n const target = { target: CANVAS };\n\n if (components.headers && components.headers[headerCell]) {\n let headerConfig = layoutConfig[headerType];\n const header = components.headers[headerCell];\n\n headerConfig = Object.assign({}, headerConfig, {\n classPrefix: layoutConfig.classPrefix,\n ...target,\n alignWith: `${ROW_MATRIX_INDEX[0]}-${COLUMN_MATRIX_INDEX[1]}`,\n alignment: LAYOUT_ALIGN.LEFT,\n className: configType.className\n });\n\n if (headerConfig.align === CENTER) {\n headerConfig.alignment = null;\n headerConfig.alignWith = null;\n }\n if (headerConfig.align === RIGHT) {\n headerConfig.alignment = RIGHT;\n }\n\n const wrapperParams = {\n name: headerType,\n component: header,\n config: headerConfig\n };\n\n const existingComponent = layoutManager.getComponent(headerType);\n if (existingComponent) {\n wrapper = existingComponent\n .updateWrapper(wrapperParams);\n } else {\n wrapper = new HeaderComponent(wrapperParams);\n }\n }\n return wrapper;\n};\n\n// Mapping between types of scrollBars and their required configs for wrapper creation\nconst scrollBarMap = config => ({\n vertical: {\n componentName: 'verticalScrollBar',\n width: 'thickness',\n height: 'layoutBasedMeasure',\n layoutBasedMeasure: HEIGHT,\n viewMeasure: 'viewHeight',\n rowAlign: 1,\n colAlign: config.align === 'right' ? 2 : 0,\n position: config.align,\n alignment: TOP\n },\n horizontal: {\n componentName: 'horizontalScrollBar',\n width: 'layoutBasedMeasure',\n layoutBasedMeasure: WIDTH,\n viewMeasure: 'viewWidth',\n height: 'thickness',\n rowAlign: config.align === 'top' ? 0 : 2,\n colAlign: 1,\n position: config.align,\n alignment: LEFT\n }\n});\n\n/**\n * Creates the wrapper for the scroller, i.e., horizontal and vertical to be used in the tree layout\n *\n *\n * @param {string} scrollBarType type of scrollbar: horizontal/vertical\n * @param {LayoutManager} layoutManager instance of Layout Manager which manages the layouting of the components\n * @param {Object} renderDetails Extra details required for rendering the headers\n * @param {GridLayout} grid Instance of the grid layout\n * @return {Instance} Returns the respective wrappers\n */\nconst createScrollBarWrapper = (scrollBarType, layoutManager, renderDetails, grid) => {\n let scrollBarWrapper = null;\n const { layoutConfig } = renderDetails;\n const target = { target: CANVAS };\n const { scrollBar } = layoutConfig;\n const { layoutDimensions } = grid.viewInfo();\n const {\n actualCenterMeasures,\n unitHeights,\n unitWidths\n } = layoutDimensions;\n const {\n componentName, layoutBasedMeasure, width, height, rowAlign, colAlign,\n viewMeasure, position, alignment\n } = scrollBarMap(scrollBar[scrollBarType])[scrollBarType];\n const dimensions = {\n thickness: scrollBar.thickness,\n layoutBasedMeasure: layoutDimensions[viewMeasure][1]\n };\n const isScroll = grid.scrollInfo()[scrollBarType];\n const totalLength = actualCenterMeasures[layoutBasedMeasure];\n const viewLength = layoutDimensions[viewMeasure][1];\n\n const scrollConfig = Object.assign({}, {\n classPrefix: layoutConfig.classPrefix,\n ...target,\n scrollBarComponentConfig: {\n ...scrollBar,\n classPrefix: layoutConfig.classPrefix\n },\n\n type: scrollBarType,\n alignWith: `${ROW_MATRIX_INDEX[rowAlign]}-${COLUMN_MATRIX_INDEX[colAlign]}`,\n alignment,\n position\n });\n\n const wrapperParams = {\n name: componentName,\n config: scrollConfig,\n dimensions: {\n width: dimensions[width],\n height: dimensions[height],\n totalLength,\n viewLength,\n unitHeights,\n unitWidths\n }\n };\n\n const existingComponent = layoutManager.getComponent(componentName);\n\n if (!isScroll) {\n existingComponent && existingComponent.remove();\n return null;\n }\n\n if (existingComponent) {\n scrollBarWrapper = existingComponent\n .updateWrapper(wrapperParams);\n } else {\n scrollBarWrapper = new ScrollComponent(wrapperParams);\n }\n\n return scrollBarWrapper;\n};\n\n/**\n * Creates the wrapper for the legend to be used in the tree layout\n *\n *\n * @param {LayoutManager} layoutManager instance of Layout Manager which manages the layouting of the components\n * @param {Object} renderDetails Extra details required for rendering the headers\n * @return {Instance} Returns the respective wrappers\n */\nconst createLegendWrapper = (layoutManager, renderDetails) => {\n let legendWrapper = null;\n const { components, layoutConfig, measurement } = renderDetails;\n const target = { target: CANVAS };\n\n if (components.legends && components.legends.length) {\n const legendConfig = { ...layoutConfig.legend, ...target, measurement };\n const wrapperParams = {\n name: LEGEND,\n component: components.legends,\n config: legendConfig\n };\n\n const existingComponent = layoutManager.getComponent(LEGEND);\n\n if (existingComponent) {\n legendWrapper = existingComponent\n .updateWrapper(wrapperParams);\n } else {\n legendWrapper = new LegendComponent(wrapperParams);\n }\n }\n return legendWrapper;\n};\n\n/**\n * Creates the wrapper for the grid layout to be used in the tree layout\n *\n *\n * @param {LayoutManager} layoutManager instance of Layout Manager which manages the layouting of the components\n * @param {Object} renderDetails Extra details required for rendering the headers\n * @param {GridLayout} grid Instance of the grid layout\n * @return {Instance} Returns the respective wrappers\n */\nconst gridLayoutWrapper = (layoutManager, renderDetails, grid) => {\n let gridWrapper = null;\n const target = { target: CANVAS };\n const { layoutConfig } = renderDetails;\n\n const config = {\n ...target,\n pagination: layoutConfig.pagination,\n classPrefix: layoutConfig.classPrefix,\n dimensions: { height: 0, width: 0 }\n };\n const wrapperParams = {\n name: GRID,\n component: grid,\n config\n };\n const existingComponent = layoutManager.getComponent(GRID);\n if (existingComponent) {\n gridWrapper = existingComponent\n .updateWrapper(wrapperParams);\n } else {\n gridWrapper = new GridComponent(wrapperParams);\n }\n return gridWrapper;\n};\n\n/**\n * Responsible for providing the wrapper creators for every component in Muze.\n * This function, when called, returns the set of components and their respective wrappers.\n *\n *\n *\n * @param {LayoutManager} layoutManager instance of Layout Manager which manages the layouting of the components\n * @param {GridLayout} grid Instance of the grid layout\n * @param {Object} renderDetails Extra details required for rendering the headers\n * @return {Instance} Returns the respective wrappers for each component\n */\nexport const componentWrapperMaker = (layoutManager, grid, renderDetails) => ({\n title: createHeaderWrapper(TITLE, layoutManager, renderDetails),\n subtitle: createHeaderWrapper(SUB_TITLE, layoutManager, renderDetails),\n legend: createLegendWrapper(layoutManager, renderDetails),\n grid: gridLayoutWrapper(layoutManager, renderDetails, grid),\n verticalScrollBar: createScrollBarWrapper(VERTICAL, layoutManager, renderDetails, grid),\n horizontalScrollBar: createScrollBarWrapper(HORIZONTAL, layoutManager, renderDetails, grid)\n});\n","export class ScrollManager {\n\n constructor () {\n this._scrollBarComponents = {};\n this._attachedComponents = {};\n }\n\n scrollBarComponents (...sbc) {\n if (sbc.length) {\n this._scrollBarComponents = sbc[0];\n return this;\n }\n return this._scrollBarComponents;\n }\n\n attachedComponents (...abc) {\n if (abc.length) {\n this._attachedComponents = abc[0];\n return this;\n }\n return this._attachedComponents;\n }\n\n performAttachedScrollFunction (type, movedViewLength) {\n Object.values(this.attachedComponents()).forEach((e) => {\n e.performScrollAction(type, movedViewLength);\n });\n }\n\n triggerScrollBarAction (type, delta) {\n this.scrollBarComponents()[type] && this.scrollBarComponents()[type].scrollDeltaTo(delta);\n }\n}\n","import { mergeRecursive } from 'muze-utils';\nimport { arrangeComponents } from './component-resolver';\nimport { createHeaders } from './title-maker';\nimport { createLegend, getLegendSpace } from './legend-maker';\nimport { componentWrapperMaker } from './component-wrapper-maker';\nimport { TOP, BOTTOM, LEFT, RIGHT } from '../constants';\nimport { ScrollManager } from './scroll-manager';\n\n/**\n *\n *\n * @param {*} context\n *\n */\nexport const prepareLayout = (layout, renderDetails) => {\n const { components, layoutConfig, measurement } = renderDetails;\n const {\n rows,\n columns,\n values,\n cornerMatrices\n } = components;\n const {\n topLeft,\n topRight,\n bottomLeft,\n bottomRight\n } = cornerMatrices;\n if (rows && columns) {\n layout.measurement(measurement)\n .config(layoutConfig)\n .matrices({\n top: [topLeft, columns[0], topRight],\n center: [rows[0], values, rows[1]],\n bottom: [bottomLeft, columns[1], bottomRight]\n })\n .triggerReflow();\n }\n};\n\n/**\n *\n *\n * @param {*} context\n * @param {*} mount\n *\n */\nexport const getRenderDetails = (context, mount) => {\n let layoutConfig = mergeRecursive({}, context.config());\n // Get height width of the mount point\n let { height, width } = mount.getBoundingClientRect();\n const heightAttr = context.height();\n const widthAttr = context.width();\n const visGroup = context.composition().visualGroup;\n const {\n isColumnSizeEqual,\n isRowSizeEqual,\n priority,\n rows,\n columns,\n values\n } = visGroup.placeholderInfo();\n const {\n minWidth,\n minHeight,\n classPrefix,\n showHeaders,\n legend,\n pagination,\n scrollBar\n } = context.config();\n\n // Get title configuration\n const titleConfig = context.title()[1];\n // Get subtitle configuration\n const subtitleConfig = context.subtitle()[1];\n // Get legend position\n const legendPosition = legend.position;\n // Arrange components according to config\n const layoutArrangement = arrangeComponents(context);\n\n height = Math.floor(height);\n width = Math.floor(width);\n\n const availableHeightForCanvas = Math.max(heightAttr > 0 ? heightAttr : height, minHeight);\n const availableWidthForCanvas = Math.max(widthAttr > 0 ? widthAttr : width, minWidth);\n\n // Create headers and determine header height\n const { headers, headerHeight } = createHeaders(context, availableHeightForCanvas, availableWidthForCanvas);\n\n // Create legends and determine legend space\n const legends = createLegend(context, headerHeight, availableHeightForCanvas, availableWidthForCanvas);\n context._composition.legend = {};\n legends.forEach((e) => {\n context._composition.legend[e.scaleType] = e.legend;\n });\n\n const legendSpace = getLegendSpace(legends, legend, availableHeightForCanvas, availableWidthForCanvas);\n const legendWidth = (legendPosition === LEFT || legendPosition === RIGHT) ? legendSpace.width : 0;\n const legendHeight = (legendPosition === TOP || legendPosition === BOTTOM) ? legendSpace.height : 0;\n\n // Set components for layouting\n const components = {\n headers,\n legends,\n canvases: [context],\n rows,\n columns,\n values,\n cornerMatrices: visGroup.cornerMatrices()\n };\n\n const measurement = {\n mountSpace: {\n height,\n width\n },\n headerHeight,\n legendSpace,\n canvasWidth: availableWidthForCanvas,\n canvasHeight: availableHeightForCanvas,\n width: availableWidthForCanvas - legendWidth,\n height: availableHeightForCanvas - headerHeight - legendHeight,\n minUnitHeight: context.minUnitHeight(),\n minUnitWidth: context.minUnitWidth()\n };\n layoutConfig = mergeRecursive(layoutConfig, {\n classPrefix,\n showHeaders,\n border: mergeRecursive(visGroup.metaData().border, context.config().border),\n layoutArrangement,\n legend,\n buffer: scrollBar.thickness,\n pagination,\n title: titleConfig,\n subtitle: subtitleConfig,\n isColumnSizeEqual,\n isRowSizeEqual,\n mount,\n priority\n });\n return {\n layoutConfig,\n components,\n measurement\n };\n};\n\nconst componentIndexes = {\n title: 0,\n subtitle: 1,\n legend: 2,\n verticalScrollBar: 3,\n horizontalScrollBar: 4,\n grid: 5\n};\n\n/**\n * Responsible for creating a scroll manager that manages interactions between the grid\n * component and the scroll bar components\n *\n * @param {Array} componentWrappers Contains the wrappers for all the components\n * @param {Canvas} canvas Instance of the current canvas\n * @return {Array} Positions of units either horizontal or vertical\n */\nconst createScrollManager = (componentWrappers, canvas) => {\n const {\n horizontalScrollBar,\n verticalScrollBar,\n grid\n } = componentIndexes;\n\n const horizontalScrollWrapper = componentWrappers[horizontalScrollBar];\n const verticalScrollWrapper = componentWrappers[verticalScrollBar];\n const gridWrapper = componentWrappers[grid];\n const scrollBarManager = new ScrollManager();\n const scrollBarComponents = {};\n\n verticalScrollWrapper && (scrollBarComponents.vertical = verticalScrollWrapper);\n horizontalScrollWrapper && (scrollBarComponents.horizontal = horizontalScrollWrapper);\n\n scrollBarManager\n .scrollBarComponents(scrollBarComponents)\n .attachedComponents({\n grid: gridWrapper\n });\n canvas.composition().hScrollBar = horizontalScrollWrapper;\n canvas.composition().vScrollBar = verticalScrollWrapper;\n\n [horizontalScrollWrapper, verticalScrollWrapper].forEach((wrapper) => {\n wrapper && wrapper.manager(scrollBarManager);\n });\n\n gridWrapper.scrollBarManager(scrollBarManager);\n};\n\nexport const renderLayout = (canvas, renderDetails) => {\n const layoutManager = canvas._layoutManager;\n const gridLayout = canvas.layout();\n const {\n\n grid\n } = componentIndexes;\n\n // Get the component wrappers\n const compWrappers = componentWrapperMaker(layoutManager, gridLayout, renderDetails);\n const componentWrappers = Object.keys(componentIndexes).map(e => compWrappers[e]);\n const gridWrapper = componentWrappers[grid];\n createScrollManager(componentWrappers, canvas);\n\n layoutManager.registerComponents(componentWrappers).compute();\n gridWrapper.attachScrollListener();\n};\n\n","import {\n getDataModelFromIdentifiers,\n FieldType,\n mergeRecursive,\n isSimpleObject,\n CommonProps\n} from 'muze-utils';\nimport { Firebolt } from '@chartshq/muze-firebolt';\n\nimport { applyInteractionPolicy } from '../helper';\n\nconst defaultInteractionPolicy = (valueMatrix, firebolt) => {\n const isMeasure = field => field.type() === FieldType.MEASURE;\n const canvas = firebolt.context;\n const visualGroup = canvas.composition().visualGroup;\n const xFields = [].concat(...visualGroup.getFieldsFromChannel('x'));\n const yFields = [].concat(...visualGroup.getFieldsFromChannel('y'));\n const colDim = xFields.every(field => field.type() === FieldType.DIMENSION);\n const fieldInf = visualGroup.resolver().getAllFields();\n const rowFacets = fieldInf.rowFacets;\n const colFacets = fieldInf.colFacets;\n valueMatrix.each((cell) => {\n const unitFireBolt = cell.valueOf().firebolt();\n if (!(xFields.every(isMeasure) && yFields.every(isMeasure))) {\n const facetFields = cell.valueOf().facetByFields()[0];\n const unitColFacets = facetFields.filter(d => colFacets.findIndex(v => v.equals(d)) !== -1);\n const unitRowFacets = facetFields.filter(d => rowFacets.findIndex(v => v.equals(d)) !== -1);\n let propFields;\n if (colDim) {\n propFields = unitColFacets.map(d => `${d}`);\n } else {\n propFields = unitRowFacets.map(d => `${d}`);\n }\n\n unitFireBolt.propagateWith('*', propFields, true);\n }\n });\n};\n\nconst defaultCrossInteractionPolicy = {\n behaviours: {\n '*': (propagationPayload, context) => {\n const propagationCanvasAlias = propagationPayload.sourceCanvas;\n const canvasAlias = context.parentAlias();\n return propagationCanvasAlias ? canvasAlias === propagationCanvasAlias : true;\n }\n },\n sideEffects: {\n tooltip: (propagationPayload, context) => {\n const propagationUnit = propagationPayload.sourceUnit;\n const propagationCanvas = propagationPayload.sourceCanvas;\n const unitId = context.id();\n const canvasAlias = context.parentAlias();\n if (propagationCanvas) {\n return propagationCanvas !== canvasAlias ? true : unitId === propagationUnit;\n }\n return true;\n }\n }\n};\n\n/**\n * This class is responsible for dispatching any behavioural action to all the visual units housed by the canvas.\n * It is created by {@link Canvas}. This class does not handle any physical actions. Physical actions get triggered\n * in {@link VisualUnit} which is managed by it's own firebolt instance. The firebolt instance of canvas only\n * propagates the action to all the visual units in it's composition.\n *\n * To get the firebolt instance of {@link Canvas}\n * ```\n * const firebolt = canvas.firebolt();\n * ```\n *\n * @class GroupFireBolt\n * @public\n */\nexport default class GroupFireBolt extends Firebolt {\n constructor (...params) {\n super(...params);\n this._interactionPolicy = this.constructor.defaultInteractionPolicy();\n this.crossInteractionPolicy(this.constructor.defaultCrossInteractionPolicy());\n }\n\n static defaultInteractionPolicy () {\n return defaultInteractionPolicy;\n }\n\n static defaultCrossInteractionPolicy () {\n return defaultCrossInteractionPolicy;\n }\n\n interactionPolicy (...policy) {\n if (policy.length) {\n this._interactionPolicy = policy[0] || this.constructor.defaultInteractionPolicy();\n return this;\n }\n return this._interactionPolicy;\n }\n\n crossInteractionPolicy (...policy) {\n if (policy.length) {\n this._crossInteractionPolicy = mergeRecursive(mergeRecursive({},\n this.constructor.defaultCrossInteractionPolicy()), policy[0] || {});\n const context = this.context;\n applyInteractionPolicy(this);\n context._throwback.registerImmediateListener([CommonProps.MATRIX_CREATED], () => {\n applyInteractionPolicy(this);\n });\n return this;\n }\n return this._crossInteractionPolicy;\n }\n\n /**\n * Dispatches a behavioural action with a payload. It takes the name of the behavioural action and a payload\n * object which contains the criteria aend an array of side effects which determines what side effects are\n * going to be shown in each visual unit of the canvas. It prepares the datamodel from the given criteria\n * and initiates a propagation from the datamodel of canvas. Then all the visual units of canvas which listens\n * to the propagation gets informed on which rows got selected and dispatches the behavioural action sent during\n * propagation.\n *\n * To dispatch a behavioural action on the canvas\n * ```\n * // Get the firebolt instance of the canvas\n * const firebolt = canvas.firebolt();\n * // Dispatch a brush behaviour\n * firebolt.dispatchBehaviour('brush', {\n * // Selects all the rows with Horsepower having range between 100 and 200.\n * criteria: {\n * Horsepower: [100, 200]\n * }\n * });\n * // On dispatch of this behavioural action, a selection box gets created and plots gets faded out which are the\n * // default side effects mapped to this behavioural action.\n * ```\n *\n * ```\n * Additionally, it can also be passed an array of side effects in the payload.\n * // Dispatch a select behaviour with only crossline as side effect.\n * firebolt.dispatchBehaviour('select', {\n * criteria: {\n * Cylinders: ['8']\n * },\n * sideEffects: ['crossline']\n * });\n * ```\n *\n * @public\n *\n * @param {string} behaviour Name of the behavioural action\n * @param {Object} payload Object which contains the interaction information.\n * @param {Object | Array.} payload.criteria Identifiers by which the selection happens.\n * @param {Array.} payload.sideEffects Side effects which needs to be shown.\n *\n * @return {GroupFireBolt} Instance of firebolt.\n */\n dispatchBehaviour (behaviour, payload) {\n const propPayload = Object.assign(payload);\n const criteria = propPayload.criteria;\n const data = this.context.composition().visualGroup.getGroupByData();\n const fieldsConfig = data.getFieldsConfig();\n const model = getDataModelFromIdentifiers(data, criteria);\n const behaviouralAction = this._actions.behavioural[behaviour];\n\n if (behaviouralAction) {\n const fields = isSimpleObject(criteria) ? Object.keys(criteria) : (criteria ? criteria[0] : []);\n const validFields = fields.filter(field => field in fieldsConfig);\n const mutates = behaviouralAction.constructor.mutates();\n const propConfig = {\n payload: propPayload,\n action: behaviour,\n criteria: model,\n sourceId: this.context.alias(),\n isMutableAction: mutates,\n propagateInterpolatedValues: validFields.every(field => fieldsConfig[field].def.type ===\n FieldType.MEASURE)\n };\n data.propagate(model, propConfig, true);\n }\n return this;\n }\n\n registerSideEffects (sideEffects) {\n for (const key in sideEffects) {\n this._sideEffectDefinitions[sideEffects[key].formalName()] = sideEffects[key];\n }\n return this;\n }\n}\n","import GroupFireBolt from './group-firebolt';\n\nexport default GroupFireBolt;\n","export const APP_INITIAL_STATE = {\n app: {\n group: {},\n units: {},\n layers: {},\n canvas: {}\n },\n local: {\n canvas: {},\n group: {},\n units: {},\n layers: {}\n }\n};\n\n","import { GridLayout } from '@chartshq/layout';\nimport { transactor, Store, getUniqueId, selectElement, STATE_NAMESPACES, CommonProps } from 'muze-utils';\nimport { physicalActions, sideEffects, behaviouralActions, behaviourEffectMap } from '@chartshq/muze-firebolt';\nimport { RETINAL } from '../constants';\nimport TransactionSupport from '../transaction-support';\nimport { getRenderDetails, prepareLayout, renderLayout } from './layout-maker';\nimport { localOptions, canvasOptions } from './local-options';\nimport GroupFireBolt from './firebolt';\nimport options from '../options';\nimport { APP_INITIAL_STATE } from './app-state';\nimport { initCanvas,\n setupChangeListener,\n setLabelRotationForAxes,\n createGroupState,\n createLayoutManager,\n setLayoutInfForUnits\n} from './helper';\n/**\n * Canvas is a logical component which houses a visualization by taking multiple variable in different encoding channel.\n * Canvas manages lifecycle of many other logical component and exposes one consistent interface for creation of chart.\n * Canvas is intialized from environment with settings from environment and singleton dependencies.\n *\n * To create an instance of canvas\n * ```\n * const env = Muze();\n * const canvas = env.canvas()\n * ```\n *\n *\n * @class\n * @public\n * @module Canvas\n */\nexport default class Canvas extends TransactionSupport {\n\n /**\n * Creates reactive property accessors.\n * - data\n * - height\n * - width\n * - config\n * This configs are retrieved from options.\n */\n constructor (globalDependencies) {\n super();\n\n this._allOptions = Object.assign({}, options, localOptions);\n this._registry = {};\n this._composition = {};\n this._cachedProps = {};\n this._alias = null;\n this._renderedResolve = null;\n this._renderedPromise = new Promise((resolve) => {\n this._renderedResolve = resolve;\n });\n this._composition.layout = new GridLayout();\n this._store = new Store(APP_INITIAL_STATE);\n\n this._throwback = new Store({\n [CommonProps.MATRIX_CREATED]: false\n });\n\n // Setters and getters will be mounted on this. The object will be mutated.\n const namespace = STATE_NAMESPACES.CANVAS_LOCAL_NAMESPACE;\n const [, store] = transactor(this, options, this._store.model, {\n namespace\n });\n transactor(this, localOptions, store, {\n namespace\n });\n transactor(this, canvasOptions, store, {\n namespace\n });\n\n this.dependencies(Object.assign({}, globalDependencies, this._dependencies));\n this.firebolt(new GroupFireBolt(this, {\n behavioural: behaviouralActions,\n physical: physicalActions,\n physicalBehaviouralMap: {}\n }, sideEffects, behaviourEffectMap));\n this.alias(`canvas-${getUniqueId()}`);\n this.title('', {});\n this.subtitle('', {});\n this.legend({});\n this.color({});\n this.shape({});\n this.size({});\n setupChangeListener(this);\n // init layoutManager\n this._layoutManager = createLayoutManager();\n }\n\n /**\n * Retrieves an instance of layout which is responsible for layouting. Layout is responsible for creating faceted\n * presentation using table layout.\n *\n * @public\n *\n * @return {GridLayout} Instance of layout attached to canvas.\n */\n layout (...params) {\n if (params.length) {\n return this;\n }\n return this.composition().layout;\n }\n\n /**\n * Retrieves the composition for a canvas\n *\n * @public\n *\n * @return {object} Instances of the components which canvas requires to draw the full visualization.\n * ```\n * {\n * layout: // Instance of {@link GridLayout}\n * legend: // Instance of {@link Legend}\n * subtitle: // Instance of {@link TextCell} using which the title is rendered\n * title: // Instance of {@link TextCell} using which the title is rendered\n * visualGroup: // Instance of {@link visualGroup}\n * }\n * ```\n */\n composition (...params) {\n if (params.length) {\n return this;\n }\n return this._composition;\n }\n\n done () {\n return this._renderedPromise;\n }\n\n /**\n * Sets or gets the alias of the canvas. Alias is a name by which the canvas can be referred.\n *\n * When setter\n * @param {string} alias Name of the alias.\n *\n * @return {Canvas} Instance of the canvas.\n *\n * When getter\n *\n * @return {string} Alias of canvas.\n *\n * @public\n */\n alias (...params) {\n if (params.length) {\n const visualGroup = this.composition().visualGroup;\n this._alias = params[0];\n visualGroup && visualGroup.alias(this.alias());\n return this;\n }\n return this._alias;\n }\n\n /**\n * Creates an instance initiated with given settings.\n *\n * @param {Object} initialSettings Initial settings to be populated in the model\n * @param {Object} regEntry newly created instance with the initial settings\n * @param {Object} globalDependencies dependencies which will be created only once in the page\n *\n * @return {Object} newly created instance with the initial settings\n */\n static withSettings (initialSettings, regEntry, globalDependencies) {\n const instance = new Canvas(globalDependencies);\n\n for (const key in initialSettings) {\n instance[key](initialSettings[key]);\n }\n // set registry for instance\n instance.registry(regEntry);\n return instance;\n }\n\n /**\n *\n *\n * @static\n *\n * @memberof Canvas\n */\n static formalName () {\n return 'canvas';\n }\n\n /**\n * Returns the instance of firebolt associated with this canvas. The firebolt instance can be used to dispatch a\n * behaviour dynamically on the canvas. This firebolt does not handle any physical actions. It is just used to\n * propagate the action to all the visual units in it's composition.\n *\n * @public\n *\n * @return {GroupFireBolt} Instance of firebolt associated with canvas.\n */\n firebolt (...firebolt) {\n if (firebolt.length) {\n this._firebolt = firebolt[0];\n return this;\n }\n return this._firebolt;\n }\n\n /**\n * Registry peoperty accessor\n *\n * @param {Object} reg plain old javascript object keyvalue pairs. Key containing module name and value contains\n * module definition class. The reg object has to be flat object of level 1.\n */\n registry (...params) {\n if (params.length) {\n const components = Object.assign({}, params[0].components);\n const componentSubRegistry = Object.assign({}, params[0].componentSubRegistry);\n\n this._registry = { components, componentSubRegistry };\n const initedComponents = initCanvas(this);\n // @todo is it okay to continue this tight behaviour? If not use a resolver to resolve diff component type.\n this._composition.visualGroup = initedComponents[0];\n createGroupState(this);\n this.composition().visualGroup.alias(this.alias()).store(this._store);\n return this;\n }\n return this._registry;\n }\n\n /*\n * Prepare dependencies for top level elements\n */\n dependencies (...param) {\n if (param.length) {\n this._dependencies = param[0];\n return this;\n }\n // @todo prepare dependencies here.\n return this._dependencies;\n }\n\n /**\n *\n *\n * @param {*} lifeCycles\n *\n * @memberof Canvas\n */\n lifeCycle (lifeCycles) {\n const lifeCycleManager = this.dependencies().lifeCycleManager;\n if (lifeCycles) {\n lifeCycleManager.register(lifeCycles);\n return this;\n }\n return lifeCycleManager;\n }\n\n /**\n *\n *\n * @readonly\n * @memberof Canvas\n */\n legend (...params) {\n if (params.length) {\n return this;\n }\n return this.composition().legend;\n }\n\n /**\n * Returns a promise for various {@link LifecycleEvents} of the various components of canvas. The promise gets\n * resolved once the particular event gets completed.\n *\n * To use this,\n * ```\n * canvas.once('layer.drawn').then(() => {\n * // Do any post drawing work here.\n * });\n * ```\n * @public\n *\n * @param {string} eventName Name of the lifecycle event.\n *\n * @return {Promise} A pending promise waiting for resolve to be called.\n */\n once (eventName) {\n const lifeCycleManager = this.dependencies().lifeCycleManager;\n return lifeCycleManager.retrieve(eventName);\n }\n\n /**\n * Internal function to trigger render, this method is cognizant of all the properties of the core modules and\n * establish a passive reactivity. Passive reactivity is not always a bad thing :)\n * @internal\n */\n render () {\n const mount = this.mount();\n // removeChild(mount);\n const lifeCycleManager = this.dependencies().lifeCycleManager;\n // Get render details including arrangement and measurement\n const renderDetails = getRenderDetails(this, mount);\n lifeCycleManager.notify({ client: this, action: 'beforedraw' });\n // Prepare the layout by triggering the matrix calculation\n prepareLayout(this.layout(), renderDetails);\n\n this._layoutManager.dimension({\n height: renderDetails.measurement.canvasHeight,\n width: renderDetails.measurement.canvasWidth\n });\n\n this._layoutManager.renderAt(mount);\n\n // Render each component\n renderLayout(this, renderDetails);\n\n setLayoutInfForUnits(this);\n\n // setLabelRotation\n setLabelRotationForAxes(this);\n }\n\n /**\n * Returns the instances of x axis of the canvas. It returns the instances in a two dimensional array form.\n *\n * ```\n * // The first element in the sub array represents the top axis and the second element represents the bottom\n * // axis.\n * [\n * [X1, X2],\n * [X3, X4]\n * ]\n * ```\n * @public\n *\n * @return {Array.} Instances of x axis.\n */\n xAxes () {\n return this.composition().visualGroup.getAxes('x');\n }\n\n /**\n * Returns the instances of y axis of the canvas. It returns the instances in a two dimensional array form.\n *\n * ```\n * // The first element in the sub array represents the left axis and the second element represents the right\n * // axis.\n * [\n * [Y1, Y2],\n * [Y3, Y4]\n * ]\n * ```\n * @public\n * @return {Array.} Instances of y axis.\n */\n yAxes () {\n return this.composition().visualGroup.getAxes('y');\n }\n\n /**\n * Returns all the retinal axis of the canvas. Color, shape and size axis are combinedly called retinal axis.\n *\n * @public\n * @return {Object} Instances of retinal axis.\n * ```\n * {\n * color: [ColorAxis], // Array of color axis.\n * shape: [ShapeAxis], // Array of shape axis.\n * size: [SizeAxis] // Array of size axis.\n * }\n * ```\n */\n getRetinalAxes () {\n const visualGroup = this.composition().visualGroup;\n return visualGroup.getAxes(RETINAL);\n }\n\n mount (...params) {\n if (params.length) {\n let value = params[0];\n if (typeof params[0] === 'string') {\n value = selectElement(params[0]).node();\n }\n this._mount = value;\n return this;\n }\n return this._mount;\n }\n}\n","import { cellRegistry, SimpleCell } from '@chartshq/visual-cell';\nimport { VisualUnit } from '@chartshq/visual-unit';\nimport { layerRegistry } from '@chartshq/visual-layer';\nimport { SimpleGroup, VisualGroup } from '@chartshq/visual-group';\n\nexport const COMPONENTS = {\n VisualGroup,\n VisualUnit\n};\nexport const SUBREGISTRIES = {\n cellRegistry,\n layerRegistry\n};\nexport const INTERFACES = {\n SimpleGroup,\n SimpleCell\n};\n\n","import { DEFAULT_LAYERS } from './defaults';\n\nexport default () => {\n const reg = DEFAULT_LAYERS;\n const regObj = {\n set: (key, def) => {\n reg[key] = def;\n return regObj;\n },\n get: () => reg\n };\n return regObj;\n};\n","import {\n transactor,\n Smartlabel,\n enableChainedTransaction,\n LifeCycleManager,\n DataModel,\n makeElement,\n getClientPoint,\n selectElement,\n getEvent,\n require,\n DateTimeFormatter\n} from 'muze-utils';\n\nimport {\n SurrogateSideEffect,\n SpawnableSideEffect,\n sideEffects,\n PersistentBehaviour,\n GenericBehaviour,\n VolatileBehaviour,\n behaviouralActions,\n GenericSideEffect\n} from '@chartshq/muze-firebolt';\nimport { layerFactory } from '@chartshq/visual-layer';\nimport pkg from '../package.json';\nimport * as operators from './operators';\nimport { actionModel as ActionModel } from './action-model';\nimport options from './options';\nimport { Canvas } from './canvas';\nimport { COMPONENTS, SUBREGISTRIES } from './default-registry';\nimport './muze.scss';\n\n// Cache singleton instances which should be included only once in a page\nconst globalCache = {};\nconst defaultRegistry = COMPONENTS;\n\nconst overrideRegistryDefinitions = (overrideRegistry, registry) => {\n for (const prop in overrideRegistry) {\n registry.set(prop, overrideRegistry[prop]);\n }\n};\n\n/**\n * Entry point to renderer. Initializes an environment with settings and registries for canvas. This is a simple wrapper\n * over {@link Canvas} which enables common configuration passing to multiple such canvases.\n *\n * Everytime `muze()` is called it creates an environment. These environment supports subset of APIs of Canvas. If\n * common configuration is used to render multiple canvases then it can be set directly in the env. Like if data is\n * common across all the visulization then its better to set the data in env. When a canvas is created it receives all\n * those configuration from env.\n *\n * ```\n * // Creates an environment\n * const env = muze()\n * // Set data property in environment, so that all the canvas created from the same environment gets this data\n * // automatically\n * env.data(dm);\n * // Creates canvas, by default env pushes data to canvas instance\n * const canvas = env.canvas();\n * ```\n *\n * If a property is set on both environment and canvas instance, property set on canvas instance gets more priority.\n *\n * @public\n * @module muze\n * @namespace Muze\n *\n * @return {Env} Instance of an environment\n */\nconst muze = () => {\n // Setters and getters will be mounted on this. Object will be mutated.\n const [env, globalStore] = transactor({}, options);\n const components = Object.assign({}, COMPONENTS);\n const componentSubRegistryDef = Object.assign(SUBREGISTRIES);\n const componentSubRegistry = {};\n\n for (const prop in componentSubRegistryDef) {\n componentSubRegistry[prop] = componentSubRegistryDef[prop]();\n }\n\n // Apart form the setter getter, an instance method is injected to create real renderer instances\n env.canvas = () => {\n // Create a canvas instance with this settings\n const settings = globalStore.serialize();\n const canvas = Canvas.withSettings(settings, { /* registry */\n components,\n componentSubRegistry\n }, env.globalDependencies());\n\n // Whenever settings is changed canvas is updated\n enableChainedTransaction(globalStore, canvas, Object.keys(settings));\n\n return canvas;\n };\n\n // Global dependencies for for compositions. Only one copy of the same should be in the page\n env.globalDependencies = () => {\n if (!globalCache.smartlabel) {\n globalCache.smartlabel = new Smartlabel(1, 'body');\n }\n return {\n smartlabel: globalCache.smartlabel,\n lifeCycleManager: new LifeCycleManager()\n };\n };\n\n // Retrieves global settings. This getter is readonly so that user can't change this as change should happen\n // only from setter to avoid unwanted sync issues.\n env.settings = () => globalStore.serialize();\n\n env.registry = (...overrideRegistry) => {\n // Selectively copy the properties from COMPONENTS\n if (overrideRegistry.length) {\n for (const prop in overrideRegistry) {\n if (prop in defaultRegistry) {\n components[prop] = overrideRegistry[prop];\n }\n }\n return env;\n }\n return components;\n };\n\n env.cellRegistry = (...overrideRegistry) => {\n const cellRegistry = componentSubRegistry.cellRegistry;\n if (overrideRegistry.length) {\n overrideRegistryDefinitions(overrideRegistry[0], cellRegistry);\n return env;\n }\n return cellRegistry.get();\n };\n\n env.layerRegistry = (...overrideRegistry) => {\n const layerRegistry = componentSubRegistry.layerRegistry;\n if (overrideRegistry.length) {\n overrideRegistryDefinitions(overrideRegistry[0], layerRegistry);\n return env;\n }\n return layerRegistry.get();\n };\n\n return env;\n};\n\nconst SideEffects = {\n sideEffects,\n standards: {\n SurrogateSideEffect,\n SpawnableSideEffect,\n GenericSideEffect\n }\n};\n\nconst Behaviours = {\n behaviouralActions,\n standards: {\n GenericBehaviour,\n PersistentBehaviour,\n VolatileBehaviour\n }\n};\n\nmuze.DataModel = DataModel;\nmuze.version = pkg.version;\nmuze.SideEffects = SideEffects;\nmuze.ActionModel = ActionModel;\nmuze.layerFactory = layerFactory;\nmuze.Operators = operators;\nmuze.Behaviours = Behaviours;\nmuze.utils = {\n getClientPoint,\n getEvent,\n makeElement,\n selectElement,\n DateTimeFormatter,\n require\n};\n\nexport default muze;\n"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack://muze/webpack/universalModuleDefinition","webpack://muze/webpack/bootstrap","webpack://muze/webpack://DataModel/webpack/universalModuleDefinition","webpack://muze/webpack://DataModel/webpack/bootstrap","webpack://muze/webpack://DataModel/src/index.js","webpack://muze/webpack://DataModel/src/enums/data-format.js","webpack://muze/webpack://DataModel/src/enums/dimension-subtype.js","webpack://muze/webpack://DataModel/src/enums/measure-subtype.js","webpack://muze/webpack://DataModel/src/enums/field-type.js","webpack://muze/webpack://DataModel/src/enums/filtering-mode.js","webpack://muze/webpack://DataModel/src/enums/group-by-functions.js","webpack://muze/webpack://DataModel/src/utils/date-time-formatter.js","webpack://muze/webpack://DataModel/src/utils/column-major.js","webpack://muze/webpack://DataModel/src/utils/extend2.js","webpack://muze/webpack://DataModel/src/utils/helper.js","webpack://muze/webpack://DataModel/src/field-store.js","webpack://muze/webpack://DataModel/src/value.js","webpack://muze/webpack://DataModel/src/operator/row-diffset-iterator.js","webpack://muze/webpack://DataModel/src/invalid-aware-types.js","webpack://muze/webpack://DataModel/src/operator/compose.js","webpack://muze/webpack://DataModel/src/constants/index.js","webpack://muze/webpack://DataModel/src/operator/get-common-schema.js","webpack://muze/webpack://DataModel/src/operator/cross-product.js","webpack://muze/webpack://DataModel/src/operator/merge-sort.js","webpack://muze/webpack://DataModel/src/operator/data-builder.js","webpack://muze/webpack://DataModel/src/operator/difference.js","webpack://muze/webpack://DataModel/src/operator/group-by-function.js","webpack://muze/webpack://DataModel/src/utils/reducer-store.js","webpack://muze/webpack://DataModel/src/operator/natural-join-filter-function.js","webpack://muze/webpack://DataModel/src/operator/union.js","webpack://muze/webpack://DataModel/src/operator/outer-join.js","webpack://muze/webpack://DataModel/src/fields/field/index.js","webpack://muze/webpack://DataModel/src/fields/dimension/index.js","webpack://muze/webpack://DataModel/src/fields/categorical/index.js","webpack://muze/webpack://DataModel/src/fields/temporal/index.js","webpack://muze/webpack://DataModel/src/fields/binned/index.js","webpack://muze/webpack://DataModel/src/fields/measure/index.js","webpack://muze/webpack://DataModel/src/fields/continuous/index.js","webpack://muze/webpack://DataModel/src/fields/parsers/field-parser/index.js","webpack://muze/webpack://DataModel/src/fields/parsers/categorical-parser/index.js","webpack://muze/webpack://DataModel/src/fields/parsers/temporal-parser/index.js","webpack://muze/webpack://DataModel/src/fields/parsers/binned-parser/index.js","webpack://muze/webpack://DataModel/src/fields/parsers/continuous-parser/index.js","webpack://muze/webpack://DataModel/src/fields/partial-field/index.js","webpack://muze/webpack://DataModel/src/field-creator.js","webpack://muze/webpack://DataModel/src/default-config.js","webpack://muze/webpack://DataModel/src/converter/dsv-arr.js","webpack://muze/webpack://DataModel/node_modules/d3-dsv/src/dsv.js","webpack://muze/webpack://DataModel/node_modules/d3-dsv/src/csv.js","webpack://muze/webpack://DataModel/node_modules/d3-dsv/src/tsv.js","webpack://muze/webpack://DataModel/src/converter/dsv-str.js","webpack://muze/webpack://DataModel/src/converter/flat-json.js","webpack://muze/webpack://DataModel/src/converter/auto-resolver.js","webpack://muze/webpack://DataModel/src/helper.js","webpack://muze/webpack://DataModel/src/relation.js","webpack://muze/webpack://DataModel/src/datamodel.js","webpack://muze/webpack://DataModel/src/operator/group-by.js","webpack://muze/webpack://DataModel/src/operator/bucket-creator.js","webpack://muze/webpack://DataModel/src/stats/index.js","webpack://muze/webpack://DataModel/src/export.js","webpack://muze/webpack://DataModel/src/operator/pure-operators.js","webpack://muze/webpack://DataModel/src/operator/natural-join.js","webpack://muze/webpack://hyperdis/webpack/universalModuleDefinition","webpack://muze/webpack://hyperdis/webpack/bootstrap","webpack://muze/webpack://hyperdis/src/utils/set.js","webpack://muze/webpack://hyperdis/src/utils/index.js","webpack://muze/webpack://hyperdis/src/graph-node.js","webpack://muze/webpack://hyperdis/src/electric-node.js","webpack://muze/webpack://hyperdis/src/graph.js","webpack://muze/webpack://hyperdis/src/model.js","webpack://muze/webpack://hyperdis/src/index.js","webpack://muze/(webpack)/buildin/module.js","webpack://muze/./packages/muze-utils/node_modules/fusioncharts-smartlabel/lib/SmartlabelManager.js","webpack://muze/./packages/muze-utils/node_modules/fusioncharts-smartlabel/lib/lib.js","webpack://muze/./packages/muze/src/index.js","webpack://muze/./packages/muze-utils/node_modules/fusioncharts-smartlabel/lib/container-manager.js","webpack://muze/./packages/muze-utils/node_modules/d3-array/src/ascending.js","webpack://muze/./packages/muze-utils/node_modules/d3-array/src/bisector.js","webpack://muze/./packages/muze-utils/node_modules/d3-array/src/bisect.js","webpack://muze/./packages/muze-utils/node_modules/d3-array/src/cross.js","webpack://muze/./packages/muze-utils/node_modules/d3-array/src/number.js","webpack://muze/./packages/muze-utils/node_modules/d3-array/src/array.js","webpack://muze/./packages/muze-utils/node_modules/d3-array/src/range.js","webpack://muze/./packages/muze-utils/node_modules/d3-array/src/ticks.js","webpack://muze/./packages/muze-utils/node_modules/d3-array/src/threshold/sturges.js","webpack://muze/./packages/muze-utils/node_modules/d3-array/src/quantile.js","webpack://muze/./packages/muze-utils/node_modules/d3-collection/src/map.js","webpack://muze/./packages/muze-utils/node_modules/d3-collection/src/nest.js","webpack://muze/./packages/muze-utils/node_modules/d3-collection/src/set.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/array.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/ordinal.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/band.js","webpack://muze/./packages/muze-utils/node_modules/d3-color/src/define.js","webpack://muze/./packages/muze-utils/node_modules/d3-color/src/color.js","webpack://muze/./packages/muze-utils/node_modules/d3-color/src/math.js","webpack://muze/./packages/muze-utils/node_modules/d3-color/src/lab.js","webpack://muze/./packages/muze-utils/node_modules/d3-color/src/cubehelix.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/basis.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/constant.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/color.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/rgb.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/number.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/basisClosed.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/object.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/string.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/value.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/transform/parse.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/date.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/array.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/round.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/transform/decompose.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/transform/index.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/zoom.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/hsl.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/hcl.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/cubehelix.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/piecewise.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/quantize.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/constant.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/number.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/continuous.js","webpack://muze/./packages/muze-utils/node_modules/d3-format/src/formatDecimal.js","webpack://muze/./packages/muze-utils/node_modules/d3-format/src/exponent.js","webpack://muze/./packages/muze-utils/node_modules/d3-format/src/formatSpecifier.js","webpack://muze/./packages/muze-utils/node_modules/d3-format/src/formatTrim.js","webpack://muze/./packages/muze-utils/node_modules/d3-format/src/formatPrefixAuto.js","webpack://muze/./packages/muze-utils/node_modules/d3-format/src/defaultLocale.js","webpack://muze/./packages/muze-utils/node_modules/d3-format/src/formatRounded.js","webpack://muze/./packages/muze-utils/node_modules/d3-format/src/formatTypes.js","webpack://muze/./packages/muze-utils/node_modules/d3-format/src/identity.js","webpack://muze/./packages/muze-utils/node_modules/d3-format/src/locale.js","webpack://muze/./packages/muze-utils/node_modules/d3-format/src/formatGroup.js","webpack://muze/./packages/muze-utils/node_modules/d3-format/src/formatNumerals.js","webpack://muze/./packages/muze-utils/node_modules/d3-format/src/precisionFixed.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/tickFormat.js","webpack://muze/./packages/muze-utils/node_modules/d3-format/src/precisionPrefix.js","webpack://muze/./packages/muze-utils/node_modules/d3-format/src/precisionRound.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/linear.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/identity.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/nice.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/log.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/pow.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/quantile.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/quantize.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/threshold.js","webpack://muze/./packages/muze-utils/node_modules/d3-time/src/interval.js","webpack://muze/./packages/muze-utils/node_modules/d3-time/src/millisecond.js","webpack://muze/./packages/muze-utils/node_modules/d3-time/src/duration.js","webpack://muze/./packages/muze-utils/node_modules/d3-time/src/second.js","webpack://muze/./packages/muze-utils/node_modules/d3-time/src/minute.js","webpack://muze/./packages/muze-utils/node_modules/d3-time/src/hour.js","webpack://muze/./packages/muze-utils/node_modules/d3-time/src/day.js","webpack://muze/./packages/muze-utils/node_modules/d3-time/src/week.js","webpack://muze/./packages/muze-utils/node_modules/d3-time/src/month.js","webpack://muze/./packages/muze-utils/node_modules/d3-time/src/year.js","webpack://muze/./packages/muze-utils/node_modules/d3-time/src/utcMinute.js","webpack://muze/./packages/muze-utils/node_modules/d3-time/src/utcHour.js","webpack://muze/./packages/muze-utils/node_modules/d3-time/src/utcDay.js","webpack://muze/./packages/muze-utils/node_modules/d3-time/src/utcWeek.js","webpack://muze/./packages/muze-utils/node_modules/d3-time/src/utcMonth.js","webpack://muze/./packages/muze-utils/node_modules/d3-time/src/utcYear.js","webpack://muze/./packages/muze-utils/node_modules/d3-time-format/src/locale.js","webpack://muze/./packages/muze-utils/node_modules/d3-time-format/src/defaultLocale.js","webpack://muze/./packages/muze-utils/node_modules/d3-time-format/src/isoFormat.js","webpack://muze/./packages/muze-utils/node_modules/d3-time-format/src/isoParse.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/time.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/colors.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/category10.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/category20b.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/category20.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/category20c.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/cubehelix.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/rainbow.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/viridis.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/sequential.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/colors.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/categorical/Accent.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/categorical/category10.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/categorical/Dark2.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/categorical/Paired.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/categorical/Pastel1.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/categorical/Pastel2.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/categorical/Set1.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/categorical/Set2.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/categorical/Set3.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/ramp.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/diverging/BrBG.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/diverging/PRGn.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/diverging/PiYG.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/diverging/PuOr.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/diverging/RdBu.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/diverging/RdGy.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/diverging/RdYlBu.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/diverging/RdYlGn.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/diverging/Spectral.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-multi/BuGn.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-multi/BuPu.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-multi/GnBu.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-multi/OrRd.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-multi/PuBuGn.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-multi/PuBu.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-multi/PuRd.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-multi/RdPu.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-multi/YlGnBu.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-multi/YlGn.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-multi/YlOrBr.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-multi/YlOrRd.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-single/Blues.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-single/Greens.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-single/Greys.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-single/Purples.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-single/Reds.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-single/Oranges.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-multi/cubehelix.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-multi/rainbow.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-multi/sinebow.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-multi/viridis.js","webpack://muze/./packages/muze-utils/src/enums/namespace.js","webpack://muze/./packages/muze-utils/src/enums/reserved-fields.js","webpack://muze/./packages/muze-utils/src/enums/common-props.js","webpack://muze/./packages/muze-utils/src/enums/constants.js","webpack://muze/./packages/muze-utils/node_modules/d3-axis/src/array.js","webpack://muze/./packages/muze-utils/node_modules/d3-axis/src/identity.js","webpack://muze/./packages/muze-utils/node_modules/d3-axis/src/axis.js","webpack://muze/./packages/muze-utils/node_modules/d3-path/src/path.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/constant.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/math.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/arc.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/curve/linear.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/point.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/line.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/area.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/descending.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/identity.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/curve/radial.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/lineRadial.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/array.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/symbol/circle.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/symbol/cross.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/symbol/diamond.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/symbol/star.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/symbol/square.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/symbol/triangle.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/symbol/wye.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/noop.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/curve/basis.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/curve/basisClosed.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/curve/basisOpen.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/curve/bundle.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/curve/cardinal.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/curve/cardinalClosed.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/curve/cardinalOpen.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/curve/catmullRom.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/curve/catmullRomClosed.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/curve/catmullRomOpen.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/curve/linearClosed.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/curve/monotone.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/curve/natural.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/curve/step.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/offset/none.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/order/none.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/stack.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/order/ascending.js","webpack://muze/./packages/muze-utils/node_modules/d3-ease/src/cubic.js","webpack://muze/./packages/muze-utils/node_modules/d3-ease/src/poly.js","webpack://muze/./packages/muze-utils/node_modules/d3-ease/src/sin.js","webpack://muze/./packages/muze-utils/node_modules/d3-ease/src/bounce.js","webpack://muze/./packages/muze-utils/node_modules/d3-ease/src/back.js","webpack://muze/./packages/muze-utils/node_modules/d3-ease/src/elastic.js","webpack://muze/./packages/muze-utils/node_modules/d3-voronoi/src/constant.js","webpack://muze/./packages/muze-utils/node_modules/d3-voronoi/src/point.js","webpack://muze/./packages/muze-utils/node_modules/d3-voronoi/src/RedBlackTree.js","webpack://muze/./packages/muze-utils/node_modules/d3-voronoi/src/Edge.js","webpack://muze/./packages/muze-utils/node_modules/d3-voronoi/src/Cell.js","webpack://muze/./packages/muze-utils/node_modules/d3-voronoi/src/Circle.js","webpack://muze/./packages/muze-utils/node_modules/d3-voronoi/src/Beach.js","webpack://muze/./packages/muze-utils/node_modules/d3-voronoi/src/Diagram.js","webpack://muze/./packages/muze-utils/node_modules/d3-voronoi/src/voronoi.js","webpack://muze/./packages/muze-utils/src/DataSystem/selection.js","webpack://muze/./packages/muze-utils/src/enums/stack-config.js","webpack://muze/./packages/muze-utils/src/common-utils.js","webpack://muze/./packages/muze-utils/node_modules/d3-ease/src/linear.js","webpack://muze/./packages/muze-utils/node_modules/d3-ease/src/circle.js","webpack://muze/./packages/muze-utils/src/DataSystem/dataSelect.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/symbol.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/order/descending.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/offset/diverging.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/offset/expand.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/offset/wiggle.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/pie.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/namespaces.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/namespace.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/creator.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selector.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selectorAll.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/matcher.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/sparse.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/enter.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/constant.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/data.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/sort.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/attr.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/window.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/style.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/classed.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/text.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/html.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/raise.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/lower.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/insert.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/remove.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/clone.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/on.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/dispatch.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/index.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/select.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/selectAll.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/filter.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/exit.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/join.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/merge.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/order.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/call.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/nodes.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/node.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/size.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/empty.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/each.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/property.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/append.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/datum.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/select.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/local.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/sourceEvent.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/point.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/mouse.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/touch.js","webpack://muze/./packages/muze-utils/node_modules/d3-dispatch/src/dispatch.js","webpack://muze/./packages/muze-utils/node_modules/d3-drag/src/noevent.js","webpack://muze/./packages/muze-utils/node_modules/d3-drag/src/nodrag.js","webpack://muze/./packages/muze-utils/node_modules/d3-drag/src/constant.js","webpack://muze/./packages/muze-utils/node_modules/d3-drag/src/event.js","webpack://muze/./packages/muze-utils/node_modules/d3-drag/src/drag.js","webpack://muze/./packages/muze-utils/node_modules/d3-timer/src/timer.js","webpack://muze/./packages/muze-utils/node_modules/d3-timer/src/timeout.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/schedule.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/tween.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/interpolate.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/remove.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/selection.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/style.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/text.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/index.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/select.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/selectAll.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/filter.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/merge.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/transition.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/on.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/attr.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/attrTween.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/styleTween.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/delay.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/duration.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/ease.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/end.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/selection/transition.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/selection/index.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/selection/interrupt.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/interrupt.js","webpack://muze/./packages/muze-utils/src/renderer-utils.js","webpack://muze/./packages/muze-utils/src/lifecycle-manager/event-list.js","webpack://muze/./packages/muze-utils/src/lifecycle-manager/lifecycle-manager.js","webpack://muze/./packages/muze-utils/src/lifecycle-manager/index.js","webpack://muze/./packages/muze-utils/src/lifecycle-manager/helper.js","webpack://muze/./packages/muze-utils/src/index.js","webpack://muze/./packages/muze-firebolt/src/enums/actions.js","webpack://muze/./packages/muze-firebolt/src/enums/selection.js","webpack://muze/./packages/muze-firebolt/src/selection-set/index.js","webpack://muze/./packages/muze-firebolt/src/selection-set/selection-set.js","webpack://muze/./packages/muze-firebolt/src/helper/index.js","webpack://muze/./packages/muze-firebolt/src/firebolt.js","webpack://muze/./packages/muze-firebolt/src/actions/behavioural/generic.js","webpack://muze/./packages/muze-firebolt/src/actions/behavioural/volatile.js","webpack://muze/./packages/muze-firebolt/src/enums/behaviours.js","webpack://muze/./packages/muze-firebolt/src/actions/behavioural/highlight.js","webpack://muze/./packages/muze-firebolt/src/actions/behavioural/brush.js","webpack://muze/./packages/muze-firebolt/src/actions/behavioural/filter.js","webpack://muze/./packages/muze-firebolt/src/actions/behavioural/persistent.js","webpack://muze/./packages/muze-firebolt/src/actions/behavioural/select.js","webpack://muze/./packages/muze-firebolt/src/actions/physical/helpers/drag-action-config.js","webpack://muze/./packages/muze-firebolt/src/actions/physical/helpers/drag-event.js","webpack://muze/./packages/muze-firebolt/src/actions/physical/hover.js","webpack://muze/./packages/muze-firebolt/src/enums/constants.js","webpack://muze/./packages/muze-firebolt/src/actions/physical/helpers/index.js","webpack://muze/./packages/muze-firebolt/src/actions/physical/click.js","webpack://muze/./packages/muze-firebolt/src/actions/physical/index.js","webpack://muze/./packages/muze-firebolt/src/actions/physical/drag.js","webpack://muze/./packages/muze-firebolt/src/actions/physical/longtouch.js","webpack://muze/./packages/muze-firebolt/src/actions/physical/touch-drag.js","webpack://muze/./packages/muze-firebolt/src/side-effects/generic/props.js","webpack://muze/./packages/muze-firebolt/src/side-effects/generic/index.js","webpack://muze/./packages/muze-firebolt/src/side-effects/generic/generic-sideeffect.js","webpack://muze/./packages/muze-firebolt/src/side-effects/surrogate.js","webpack://muze/./packages/muze-firebolt/src/side-effects/spawnable.js","webpack://muze/./packages/muze-firebolt/src/side-effects/selection-box/helper.js","webpack://muze/./packages/muze-firebolt/src/side-effects/selection-box/index.js","webpack://muze/./packages/muze-firebolt/src/actions/physical/selection-box-drag.js","webpack://muze/./packages/muze-tooltip/src/constants.js","webpack://muze/./packages/muze-tooltip/src/default-config.js","webpack://muze/./packages/muze-tooltip/src/helper.js","webpack://muze/./packages/muze-tooltip/src/content.js","webpack://muze/./packages/muze-tooltip/src/tooltip.js","webpack://muze/./packages/muze-firebolt/src/side-effects/tooltip/strategies.js","webpack://muze/./packages/muze-firebolt/src/side-effects/tooltip/index.js","webpack://muze/./packages/muze-firebolt/src/side-effects/helper/index.js","webpack://muze/./packages/muze-firebolt/src/side-effects/crossline/index.js","webpack://muze/./packages/muze-firebolt/src/side-effects/plot-highlighter/strategy.js","webpack://muze/./packages/muze-firebolt/src/side-effects/plot-highlighter/index.js","webpack://muze/./packages/muze-firebolt/src/side-effects/filter/index.js","webpack://muze/./packages/muze-firebolt/src/side-effects/anchors/index.js","webpack://muze/./packages/muze-firebolt/src/side-effects/persistent-anchors.js","webpack://muze/./packages/muze-firebolt/src/side-effects/brush-anchors.js","webpack://muze/./packages/muze-firebolt/src/behaviour-effect-map.js","webpack://muze/./packages/visual-layer/src/enums/constants.js","webpack://muze/./packages/visual-layer/src/layers/area/default-config.js","webpack://muze/./packages/visual-layer/src/simple-layer/simple-layer.js","webpack://muze/./packages/visual-layer/src/base-layer/props.js","webpack://muze/./packages/muze-axis/src/enums/axis-orientation.js","webpack://muze/./packages/muze-axis/src/enums/scale-type.js","webpack://muze/./packages/muze-axis/src/enums/constants.js","webpack://muze/./packages/muze-axis/src/scale-creator.js","webpack://muze/./packages/muze-axis/src/cartesian-axis/default-config.js","webpack://muze/./packages/muze-axis/src/axis-renderer.js","webpack://muze/./packages/muze-axis/src/cartesian-axis/skip-ticks.js","webpack://muze/./packages/muze-axis/src/cartesian-axis/space-setter.js","webpack://muze/./packages/muze-axis/src/cartesian-axis/helper.js","webpack://muze/./packages/muze-axis/src/cartesian-axis/props.js","webpack://muze/./packages/muze-axis/src/cartesian-axis/simple-axis.js","webpack://muze/./packages/muze-axis/src/cartesian-axis/interpolators/linear.js","webpack://muze/./packages/muze-axis/src/cartesian-axis/interpolators/log.js","webpack://muze/./packages/muze-axis/src/cartesian-axis/interpolators/pow.js","webpack://muze/./packages/muze-axis/src/cartesian-axis/continous-axis.js","webpack://muze/./packages/muze-axis/src/cartesian-axis/band-axis.js","webpack://muze/./packages/muze-axis/src/cartesian-axis/time-axis.js","webpack://muze/./packages/muze-axis/src/color-axis/color-maps.js","webpack://muze/./packages/muze-axis/src/color-axis/defaults.js","webpack://muze/./packages/muze-axis/src/color-axis/props.js","webpack://muze/./packages/muze-axis/src/helper.js","webpack://muze/./packages/muze-axis/src/color-axis/color-strategy.js","webpack://muze/./packages/muze-axis/src/color-axis/color-axis.js","webpack://muze/./packages/muze-axis/src/size-axis/defaults.js","webpack://muze/./packages/muze-axis/src/size-axis/size-strategy.js","webpack://muze/./packages/muze-axis/src/size-axis/props.js","webpack://muze/./packages/muze-axis/src/size-axis/size-axis.js","webpack://muze/./packages/muze-axis/src/shape-axis/defaults.js","webpack://muze/./packages/muze-axis/src/shape-axis/props.js","webpack://muze/./packages/muze-axis/src/shape-axis/shape-axis.js","webpack://muze/./packages/muze-axis/src/shape-axis/helper.js","webpack://muze/./packages/muze-axis/src/polar-axis/props.js","webpack://muze/./packages/muze-axis/src/polar-axis/angle-axis.js","webpack://muze/./packages/visual-group/src/enums/constants.js","webpack://muze/./packages/muze-axis/src/polar-axis/radius-axis.js","webpack://muze/./packages/muze-axis/src/data-type-scale-map.js","webpack://muze/./packages/transform/src/group-transform/index.js","webpack://muze/./packages/transform/src/identity-transform/index.js","webpack://muze/./packages/transform/src/transform-factory/index.js","webpack://muze/./packages/transform/src/enums/transform-type.js","webpack://muze/./packages/transform/src/stack-transform/index.js","webpack://muze/./packages/visual-layer/src/helpers/index.js","webpack://muze/./packages/visual-layer/src/base-layer/listener-map.js","webpack://muze/./packages/visual-layer/src/enums/props.js","webpack://muze/./packages/visual-layer/src/base-layer/default-options.js","webpack://muze/./packages/visual-layer/src/base-layer/base-layer.js","webpack://muze/./packages/visual-layer/src/layers/line/renderer.js","webpack://muze/./packages/visual-layer/src/layers/line/default-config.js","webpack://muze/./packages/visual-layer/src/layers/line/line.js","webpack://muze/./packages/visual-layer/src/layers/area/renderer.js","webpack://muze/./packages/visual-layer/src/layers/area/area.js","webpack://muze/./packages/visual-layer/src/layers/arc/default-config.js","webpack://muze/./packages/visual-layer/src/layers/arc/arc.js","webpack://muze/./packages/visual-layer/src/layers/arc/arc-helper.js","webpack://muze/./packages/visual-layer/src/layers/text/renderer.js","webpack://muze/./packages/visual-layer/src/layers/text/default-config.js","webpack://muze/./packages/visual-layer/src/layers/text/text.js","webpack://muze/./packages/visual-layer/src/layers/point/renderer.js","webpack://muze/./packages/visual-layer/src/layers/point/default-config.js","webpack://muze/./packages/visual-layer/src/layers/point/point.js","webpack://muze/./packages/visual-layer/src/layers/bar/renderer.js","webpack://muze/./packages/visual-layer/src/layers/bar/default-config.js","webpack://muze/./packages/visual-layer/src/layers/bar/bar-helper.js","webpack://muze/./packages/visual-layer/src/layers/bar/bar.js","webpack://muze/./packages/visual-layer/src/layers/tick/default-config.js","webpack://muze/./packages/visual-layer/src/layers/tick/renderer.js","webpack://muze/./packages/visual-layer/src/layers/tick/tick.js","webpack://muze/./packages/visual-layer/src/enums/layer-types.js","webpack://muze/./packages/visual-layer/src/layer-factory/layer-factory.js","webpack://muze/./packages/visual-layer/src/layer-factory/index.js","webpack://muze/./packages/visual-layer/src/defaults.js","webpack://muze/./packages/visual-group/src/visual-group/local-options.js","webpack://muze/./packages/visual-group/src/simple-group/simple-group.js","webpack://muze/./packages/visual-group/src/variable/variable.js","webpack://muze/./packages/visual-group/src/variable/composed-vars.js","webpack://muze/./packages/visual-group/src/variable/simple-var.js","webpack://muze/./packages/visual-group/src/encoder/field-sanitizer.js","webpack://muze/./packages/visual-group/src/encoder/visual-encoder.js","webpack://muze/./packages/visual-group/src/enums/scale-maps.js","webpack://muze/./packages/visual-group/src/data-type-scale-map.js","webpack://muze/./packages/visual-group/src/encoder/encoder-helper.js","webpack://muze/./packages/visual-group/src/encoder/cartesian-encoder.js","webpack://muze/./packages/visual-group/src/encoder/polar-encoder.js","webpack://muze/./packages/visual-group/src/encoder/retinal-encoder.js","webpack://muze/./packages/visual-group/src/group-helper/group-utils.js","webpack://muze/./packages/visual-unit/src/firebolt/action-behaviour-map.js","webpack://muze/./packages/visual-unit/src/helper/index.js","webpack://muze/./packages/visual-unit/src/enums/constants.js","webpack://muze/./packages/visual-unit/src/helper/grid-lines.js","webpack://muze/./packages/visual-unit/src/default-config.js","webpack://muze/./packages/visual-unit/src/local-options.js","webpack://muze/./packages/visual-unit/src/enums/reactive-props.js","webpack://muze/./packages/visual-unit/src/listener-map.js","webpack://muze/./packages/visual-unit/src/props.js","webpack://muze/./packages/visual-unit/src/firebolt/helper.js","webpack://muze/./packages/visual-unit/src/firebolt/payload-generator.js","webpack://muze/./packages/visual-unit/src/firebolt/data-propagator.js","webpack://muze/./packages/visual-unit/src/firebolt/index.js","webpack://muze/./packages/visual-unit/src/visual-unit.js","webpack://muze/./packages/visual-group/src/group-helper/matrix-model.js","webpack://muze/./packages/visual-group/src/group-helper/cell-creator.js","webpack://muze/./packages/visual-group/src/group-helper/resolver-props.js","webpack://muze/./packages/visual-group/src/group-helper/matrix-resolver.js","webpack://muze/./packages/visual-group/src/visual-group/value-matrix.js","webpack://muze/./packages/visual-group/src/visual-group/helper.js","webpack://muze/./packages/visual-group/src/visual-group/change-listener.js","webpack://muze/./packages/visual-group/src/visual-group/props.js","webpack://muze/./packages/visual-group/src/visual-group/visual-group.js","webpack://muze/./packages/muze-legend/src/firebolt/behavioural/select.js","webpack://muze/./packages/muze-legend/src/firebolt/action-behaviour-map.js","webpack://muze/./packages/muze-legend/src/firebolt/behaviour-effect-map.js","webpack://muze/./packages/muze-legend/src/enums/behaviours.js","webpack://muze/./packages/muze-legend/src/enums/side-effects.js","webpack://muze/./packages/muze-legend/src/enums/constants.js","webpack://muze/./packages/muze-legend/src/firebolt/helper.js","webpack://muze/./packages/muze-legend/src/firebolt/legend-firebolt.js","webpack://muze/./packages/muze-legend/src/firebolt/physical/drag.js","webpack://muze/./packages/muze-legend/src/firebolt/physical/hover.js","webpack://muze/./packages/muze-legend/src/firebolt/physical/click.js","webpack://muze/./packages/muze-legend/src/firebolt/physical/index.js","webpack://muze/./packages/muze-legend/src/enums/actions.js","webpack://muze/./packages/muze-legend/src/firebolt/physical/selection-box-drag.js","webpack://muze/./packages/muze-legend/src/firebolt/side-effects/selection-box/index.js","webpack://muze/./packages/muze-legend/src/firebolt/side-effects/legend-highlighter/strategies.js","webpack://muze/./packages/muze-legend/src/firebolt/side-effects/legend-highlighter/index.js","webpack://muze/./packages/muze-legend/src/legend/props.js","webpack://muze/./packages/muze-legend/src/legend/defaults.js","webpack://muze/./packages/muze-legend/src/legend/legend-helper.js","webpack://muze/./packages/muze-legend/src/legend/simple-legend.js","webpack://muze/./packages/muze-legend/src/legend/position-config.js","webpack://muze/./packages/muze-legend/src/legend/renderer.js","webpack://muze/./packages/muze-legend/src/legend/discrete-legend.js","webpack://muze/./packages/muze-legend/src/legend/gradient-helper.js","webpack://muze/./packages/muze-legend/src/legend/gradient-legend.js","webpack://muze/./packages/muze-legend/src/legend/step-legend.js","webpack://muze/./packages/muze/src/constants.js","webpack://muze/./packages/muze/src/operators.js","webpack://muze/./packages/muze/src/action-model.js","webpack://muze/./packages/muze/src/canvas/defaults.js","webpack://muze/./packages/muze/src/canvas/local-options.js","webpack://muze/./packages/layout/src/tree-layout/layout-component/layoutComponent.js","webpack://muze/./packages/layout/src/tree-layout/layout-component/dummy-component.js","webpack://muze/./packages/muze/src/defaults.js","webpack://muze/./packages/layout/src/tree-layout/constants/defaults.js","webpack://muze/./packages/layout/src/tree-layout/layout-definition/definition-manager/definitionModel.js","webpack://muze/./packages/layout/src/tree-layout/layout-definition/helper/index.js","webpack://muze/./packages/layout/src/tree-layout/layout-definition/tree/index.js","webpack://muze/./packages/layout/src/tree-layout/layout-definition/layout-model/index.js","webpack://muze/./packages/layout/src/tree-layout/utils/index.js","webpack://muze/./packages/layout/src/tree-layout/data-adapters/data-point.js","webpack://muze/./packages/layout/src/tree-layout/data-adapters/data-parser.js","webpack://muze/./packages/layout/src/tree-layout/data-adapters/helper.js","webpack://muze/./packages/layout/src/tree-layout/data-adapters/html-data.js","webpack://muze/./packages/layout/src/tree-layout/renderers/renderer.js","webpack://muze/./packages/layout/src/tree-layout/renderers/html-renderer.js","webpack://muze/./packages/layout/src/tree-layout/drawing-manager/helper.js","webpack://muze/./packages/layout/src/tree-layout/drawing-manager/index.js","webpack://muze/./packages/layout/src/tree-layout/layout-definition/definition-manager/index.js","webpack://muze/./packages/layout/src/tree-layout/layout-manager/layout-def.js","webpack://muze/./packages/layout/src/tree-layout/layout-manager/helper.js","webpack://muze/./packages/layout/src/tree-layout/layout-manager/index.js","webpack://muze/./packages/muze/src/canvas/helper.js","webpack://muze/./packages/muze/src/options.js","webpack://muze/./packages/layout/src/enums/constants.js","webpack://muze/./packages/layout/src/generic-layout/index.js","webpack://muze/./packages/layout/src/grid-layout/defaults.js","webpack://muze/./packages/layout/src/utils/index.js","webpack://muze/./packages/layout/src/visual-matrix/props.js","webpack://muze/./packages/layout/src/visual-matrix/default-config.js","webpack://muze/./packages/layout/src/visual-matrix/visual-matrix.js","webpack://muze/./packages/layout/src/visual-matrix/row-matrix.js","webpack://muze/./packages/layout/src/visual-matrix/column-matrix.js","webpack://muze/./packages/layout/src/grid-layout/computations.js","webpack://muze/./packages/layout/src/grid-layout/view-info-getter.js","webpack://muze/./packages/layout/src/grid-layout/layout.js","webpack://muze/./packages/layout/src/grid-layout/layout-helper.js","webpack://muze/./packages/layout/src/grid-layout/border-helper.js","webpack://muze/./packages/layout/src/grid-layout/span-maker.js","webpack://muze/./packages/muze/src/transaction-support.js","webpack://muze/./packages/muze/src/canvas/component-resolver.js","webpack://muze/./packages/visual-cell/src/enums/constants.js","webpack://muze/./packages/visual-cell/src/enums/cell-type.js","webpack://muze/./packages/visual-cell/src/simple-cell.js","webpack://muze/./packages/visual-cell/src/enums/defaults.js","webpack://muze/./packages/visual-cell/src/props.js","webpack://muze/./packages/visual-cell/src/axis-cell.js","webpack://muze/./packages/visual-cell/src/blank-cell.js","webpack://muze/./packages/visual-cell/src/text-cell.js","webpack://muze/./packages/visual-cell/src/geom-cell.js","webpack://muze/./packages/visual-cell/src/defaults.js","webpack://muze/./packages/visual-cell/src/constants.js","webpack://muze/./packages/visual-cell/src/cell-registry.js","webpack://muze/./packages/muze/src/canvas/title-maker.js","webpack://muze/./packages/muze/src/canvas/legend-maker.js","webpack://muze/./packages/muze/src/canvas/components/muze-chart-component.js","webpack://muze/./packages/muze/src/canvas/components/headerComponent.js","webpack://muze/./packages/muze/src/canvas/components/legendComponent.js","webpack://muze/./packages/muze/src/canvas/components/scroll-bar-maker/helper.js","webpack://muze/./packages/muze/src/canvas/components/scroll-bar-maker/props.js","webpack://muze/./packages/muze/src/canvas/components/scroll-bar-maker/scroll-maker.js","webpack://muze/./packages/muze/src/canvas/components/scroll-component.js","webpack://muze/./packages/muze/src/canvas/components/scroll-bar-maker/horizontal-scroll-maker.js","webpack://muze/./packages/muze/src/canvas/components/scroll-bar-maker/vertical-scroll-maker.js","webpack://muze/./packages/muze/src/canvas/components/matrix-component.js","webpack://muze/./packages/muze/src/canvas/components/grid-component.js","webpack://muze/./packages/muze/src/enums/constants.js","webpack://muze/./packages/muze/src/canvas/component-wrapper-maker.js","webpack://muze/./packages/muze/src/canvas/scroll-manager.js","webpack://muze/./packages/muze/src/canvas/layout-maker.js","webpack://muze/./packages/muze/src/canvas/firebolt/group-firebolt.js","webpack://muze/./packages/muze/src/canvas/firebolt/index.js","webpack://muze/./packages/muze/src/canvas/app-state.js","webpack://muze/./packages/muze/src/canvas/canvas.js","webpack://muze/./packages/muze/src/default-registry.js","webpack://muze/./packages/visual-layer/src/layer-registry.js","webpack://muze/./packages/muze/src/muze.js"],"names":["webpackUniversalModuleDefinition","root","factory","exports","module","define","amd","window","installedModules","__webpack_require__","moduleId","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","getDefault","getModuleExports","object","property","prototype","hasOwnProperty","p","s","e","_typeof","a","default","description","homepage","version","license","main","keywords","author","repository","type","url","contributors","email","dependencies","d3-dsv","devDependencies","babel-cli","babel-core","babel-eslint","babel-loader","babel-plugin-transform-runtime","babel-preset-env","babel-preset-es2015","babel-preset-flow","chai","cross-env","eslint","eslint-config-airbnb","eslint-plugin-import","eslint-plugin-jsx-a11y","eslint-plugin-react","istanbul-instrumenter-loader","jsdoc","json2yaml","karma","karma-chai","karma-chrome-launcher","karma-coverage-istanbul-reporter","karma-mocha","karma-spec-reporter","karma-webpack","marked","mocha","mocha-webpack","transform-runtime","webpack","webpack-cli","webpack-dev-server","scripts","test","ut","utd","build","start","lint","lint-errors","docs","DataModel","require","DataFormat","FLAT_JSON","DSV_STR","DSV_ARR","AUTO","DimensionSubtype","CATEGORICAL","TEMPORAL","GEO","BINNED","MeasureSubtype","CONTINUOUS","FieldType","MEASURE","DIMENSION","FilteringMode","NORMAL","INVERSE","ALL","GROUP_BY_FUNCTIONS","SUM","AVG","MIN","MAX","FIRST","LAST","COUNT","STD","convertToNativeDate","date","Date","pad","DateTimeFormatter","format","this","dtParams","nativeDate","RegExp","escape","text","replace","TOKEN_PREFIX","DATETIME_PARAM_SEQUENCE","YEAR","MONTH","DAY","HOUR","MINUTE","SECOND","MILLISECOND","defaultNumberParser","defVal","val","parsedVal","isFinite","parseInt","defaultRangeParser","range","nVal","toLowerCase","length","getTokenDefinitions","daysDef","short","long","monthsDef","H","index","extract","parser","formatter","getHours","toString","hours","P","M","getMinutes","S","getSeconds","K","getMilliseconds","join","day","getDay","A","getDate","b","month","getMonth","B","y","result","substring","presentDate","presentYear","Math","trunc","getFullYear","year","Y","getTokenFormalNames","definitions","HOUR_12","AMPM_UPPERCASE","AMPM_LOWERCASE","SHORT_DAY","LONG_DAY","DAY_OF_MONTH","DAY_OF_MONTH_CONSTANT_WIDTH","SHORT_MONTH","LONG_MONTH","MONTH_OF_YEAR","SHORT_YEAR","LONG_YEAR","tokenResolver","defaultResolver","arg","targetParam","arguments","hourFormat24","hourFormat12","ampmLower","ampmUpper","amOrpm","isPM","findTokens","tokenPrefix","tokenLiterals","keys","occurrence","forwardChar","indexOf","push","token","formatAs","nDate","formattedStr","String","formattedVal","parse","dateTimeStamp","options","extractTokenValue","dtParamSeq","noBreak","dtParamArr","args","resolverKey","resolverParams","resolverFn","param","resolvedVal","splice","apply","checkIfOnlyYear","unshift","tokenObj","lastOccurrenceIndex","occObj","occIndex","targetText","regexFormat","tokenArr","map","obj","occurrenceLength","extractValues","match","shift","getNativeDate","Number","len","v","store","fields","Array","forEach","fieldIndex","from","OBJECTSTRING","objectToStrFn","objectToStr","arrayToStr","checkCyclicRef","parentArr","bIndex","extend2","obj1","obj2","skipUndef","merge","tgtArr","srcArr","item","srcVal","tgtVal","str","cRef","isArray","getUniqueId","getTime","round","random","isArrEqual","arr1","arr2","formatNumber","detectDataFormat","data","fieldStore","createNamespace","fieldArr","dataId","fieldsObj","_cachedFieldsObj","field","getMeasure","measureFields","_cachedMeasure","schema","getDimension","dimensionFields","_cachedDimension","Value","_classCallCheck","configurable","writable","_value","rowDiffsetIterator","rowDiffset","callback","split","diffStr","diffStsArr","end","InvalidAwareTypes","invalid_aware_types_classCallCheck","config","assign","_invalidAwareValsMap","invalidAwareVals","NULL","NA","NIL","invalid","nil","null","undefined","DM_DERIVATIVES","SELECT","PROJECT","GROUPBY","COMPOSE","CAL_VAR","BIN","SORT","JOINS","CROSS","LEFTOUTER","RIGHTOUTER","NATURAL","FULLOUTER","getCommonSchema","fs1","fs2","retArr","fs1Arr","defaultFilterFn","crossProduct","dm1","dm2","filterFn","replaceCommonSchema","jointype","applicableFilterFn","dm1FieldStore","getFieldspace","dm2FieldStore","dm1FieldStoreName","dm2FieldStoreName","commonSchemaList","Error","tmpSchema","_rowDiffset","rowAdded","rowPosition","ii","tuple","userArg","partialField","dm1Fields","prepareJoinData","dm2Fields","detachedRoot","tupleObj","cellVal","iii","defSortFn","a1","b1","mergeSort","arr","sortFn","sort","lo","hi","mid","floor","mainArr","auxArr","getSortFn","dataType","sortType","retFunc","groupData","hashMap","Map","groupedData","datum","fieldVal","has","set","createSortingFnArg","groupedDatum","targetFields","targetFieldDetails","label","reduce","acc","next","idx","difference","hashTable","schemaNameArr","dm1FieldStoreFieldObj","dm2FieldStoreFieldObj","_colIdentifier","prepareDataHelper","dm","addData","hashData","schemaName","fieldName","getFilteredValues","filter","sum","filteredNumber","curr","avg","totalSum","isNaN","fnList","filteredValues","min","max","sqrt","mean","pow","num","defaultReducerName","ReducerStore","TypeError","defReducer","entries","_this","he","reducer","_this2","__unregister","delete","Function","reducerStore","ye","iterator","u","done","return","naturalJoinFilter","commonSchemaArr","retainTuple","union","leftOuterJoin","dataModel1","dataModel2","rightOuterJoin","Field","field_classCallCheck","subtype","displayName","Se","Dimension","_cachedDomain","calculateDataDomain","Categorical","hash","Set","domain","add","Temporal","temporal_classCallCheck","_cachedMinDiff","sortedData","arrLn","minDiff","POSITIVE_INFINITY","prevDatum","nextDatum","processedCount","_this3","Binned","binsArr","bins","Measure","unit","defAggFn","numberFormat","Continuous","NEGATIVE_INFINITY","FieldParser","Ue","CategoricalParser","isInvalid","getInvalidType","trim","TemporalParser","temporal_parser_classCallCheck","_dtf","BinnedParser","matched","parseFloat","ContinuousParser","PartialField","partial_field_classCallCheck","_sanitize","createFields","dataColumn","headers","headersObj","header","qe","dataFormat","DSVArr","firstRowHeader","columns","columnMajor","EOL","EOF","QUOTE","NEWLINE","RETURN","objectConverter","JSON","stringify","inferColumns","rows","columnSet","row","column","width","delimiter","reFormat","DELIMITER","charCodeAt","parseRows","f","N","I","eof","eol","j","slice","preformatBody","formatValue","formatRow","formatDate","getUTCHours","minutes","getUTCMinutes","seconds","getUTCSeconds","milliseconds","getUTCMilliseconds","getUTCFullYear","getUTCMonth","getUTCDate","convert","concat","formatBody","formatRows","csv","dsv","tsv","DSVStr","fieldSeparator","d3Dsv","FlatJSON","insertionIndex","Auto","converters","resp","persistDerivations","sourceDm","model","operation","_model$_derivation","criteriaFn","_derivation","op","meta","criteria","newDm","_newDm$_ancestorDeriv","_ancestorDerivation","cloneWithAllFields","clonedDm","clone","partialFieldspace","getPartialFieldspace","__calculateFieldspace","calculateFieldsConfig","filterPropagationModel","propModels","filterByMeasure","fns","dataObj","dataModel","propModel","getData","fieldsConfig","getFieldsConfig","fieldsSpace","values","def","some","every","propField","valueOf","select","fn","saveChild","cloneWithSelect","selectFn","selectConfig","cloneConfig","cloned","selectHelper","newRowDiffSet","lastInsertedValue","li","cachedStore","cloneProvider","selectorHelperFn","_iteratorNormalCompletion","checker","cloneWithProject","projField","allFields","projectionSet","actualProjField","sanitizeUnitSchema","unitSchema","sanitizeAndValidateSchema","supportedMeasureSubTypes","supportedDimSubTypes","updateData","relation","defaultConfig","converterFn","converter","pt","formattedData","dataHeader","fieldNameAs","as","nameSpace","_partialFieldspace","_","_dataFormat","fieldInSchema","applyExistingOperationOnModel","derivations","getDerivations","selectionModel","rejectionModel","derivation","_selectionModel","params","groupByString","_rejectionModel","propagateIdentifiers","propModelInf","nonTraversingModel","excludeModels","handlePropagation","_children","child","propagateToAllDataModels","identifiers","rootModels","propagationInf","propagationNameSpace","propagateToSource","propagationSourceId","sourceId","propagateInterpolatedValues","criterias","persistent","actionCriterias","mutableActions","filteredCriteria","entry","action","sourceActionCriterias","actionInf","actionConf","applyOnSource","models","path","getPathToRootModel","_parent","_ref3","rootModel","propConfig","sourceIdentifiers","rootGroupByModel","groupByModel","inf","propagationModel","filteredModel","reverse","Relation","relation_classCallCheck","source","_fieldStoreName","_propagationNameSpace","immutableActions","Dt","_fieldspace","updateFields","fieldStoreName","colIdentifier","collID","partialFieldMap","newFields","coll","joinWith","unionWith","differenceWith","defConfig","oDm","constructor","setParent","fieldConfig","normalizedProjField","search","_fieldConfig","fieldObj","removeChild","findIndex","sibling","parent","ReferenceError","__proto__","getPrototypeOf","_onPropagation","setPrototypeOf","order","withUid","getAllFields","dataGenerated","dataBuilder","sortingDetails","retObj","uids","addUid","columnWise","reqSorting","tmpDataArr","colName","insertInd","sortMeta","fDetails","sortingFn","pop","tmpData","fieldNames","fmtFieldIdx","elem","fIdx","fmtFn","datumIdx","fieldsArr","reducers","newDataModel","groupBy","existingDataModel","sFieldArr","dimensions","reducerObj","measures","defaultReducer","measureName","reducerFn","resolve","fieldStoreObj","dbName","dimensionArr","measureArr","rowCount","rawData","dataInCSVArr","sortedDm","colData","rowsCount","serializedData","rowIdx","colIdx","fieldinst","dependency","replaceVar","depVars","retrieveFn","depFieldIndices","fieldSpec","fs","suppliedFields","computedValues","fieldsData","h","Mt","addField","addToNameSpace","isMutableAction","payload","find","sourceNamespace","filterImmutableAction","criteriaModel","eventName","measureFieldName","binFieldName","_createBinnedFieldDat","measureField","buckets","binsCount","binSize","dMin","dMax","ceil","abs","generateBuckets","bucketRanges","binnedData","findBucketRange","leftIdx","rightIdx","midIdx","binField","serialize","getSchema","first","last","count","sd","std","Operators","compose","operations","currentDM","firstChild","dispose","bin","project","calculateVariable","naturalJoin","fullOuterJoin","Stats","enums","makeEntry","sCon","_set","set1","set2","filteredKeys","s1","s2","ForeignSet","isSimpleObject","win","reqAnimFrame","requestAnimationFrame","webkitRequestAnimationFrame","mozRequestAnimationFrame","oRequestAnimationFrame","msRequestAnimationFrame","setTimeout","getTimeBasedId","__lastTime","__id","flat","res","scheduler","onFinishCallback","queue","animationFrame","listeners","tempQ","unique","fetch","node","namedNode","qualifiedName","seed","fetchAggregator","getUpstreamNodes","list","rec","qname","placedIndex","preArr","postArr","outgoingEdges","resolver","accumulate","nodeDetails","identity","CustomResolver","utils_classCallCheck","dep","_dep","graph_node_classCallCheck","edges","_seed","requireResolve","retriever","history","electricEdges","_edges","retrieveDetails","edge","head","hist","electric_node_classCallCheck","nextFrame","currentFrame","lstnrs","nodes","nFn","qualifiedNodeMap","graph_node","_wholeSet","_propagate","propagationOverride","currentFrameListeners","nextFrameListeners","_schedule","flushTarget","flush","mount","resolveReqList","objn","perv","addDependencies","_node","getDependencies","getResolvedList","prop","props","fnSpec","eNode","_ref","electric_node","addEdges","addElectricNode","changedSet","upstreamNodes","upstreamNode","append","__execUniqueElectricEdges","cfLstnrs","nfLstnrs","toArray","repeatHead","resetPropagationOverride","qnames","_this4","update","resolved","resolveDependencyOrder","resolveMap","neighbour","isRoot","model_classCallCheck","_graph","graph","_lockFlag","_reqQ","mountPoint","_addPropInModel","calculationConfig","customResolver","varName","fetchFn","_customResolver","createNodesFrom","instantCall","_graph$stopPropagatio","propsArr","unsub","createElectricNodeOf","stopPropagation","setPropagationOverride","resetNodeValue","_graph$stopPropagatio2","setProp","getNodeValue","getNodeFromQualifiedName","Model","__webpack_exports__","webpackPolyfill","deprecate","paths","children","_interopRequireDefault","_lib2","_containerManager2","slLib","init","doc","document","htmlSplCharSpace"," ","documentSupport","getDocumentSupport","SVG_BBOX_CORRECTION","isWebKit","SmartLabelManager","id","container","useEllipses","wrapper","prevInstance","isBrowserLess","maxCacheLimit","maxDefaultCacheLimit","getElementById","createContainer","innerHTML","testStrAvg","isHeadLess","isIE","offsetHeight","offsetWidth","parentContainerStyle","style","parentContainer","_containerManager","_showNoEllipses","_init","setStyle","textToLines","smartlabel","lines","_calCharDimWithCache","calculateDifference","size","csArr","tw","twi","cachedStyle","asymmetricDifference","maxAdvancedCacheLimit","_container","cache","_advancedCache","advancedCacheKey","_advancedCacheKey","cacheName","fontSize","fontFamily","fontWeight","fontStyle","cacheInitName","repeat","height","_getWidthFn","contObj","_containerObj","svgText","bbox","textContent","getBBox","_styleNotSet","setLineHeight","sCont","_context","context","_cache","charCache","_lineHeight","lineHeight","useEllipsesOnOverflow","getSmartText","maxWidth","maxHeight","noWrap","trimStr","tempArr","tmpText","maxWidthWithEll","toolText","oriWidth","oriHeight","newCharIndex","nearestChar","tempChar","getWidth","initialLeft","initialTop","getOriSizeImproveObj","spanArr","x","minWidth","chr","elemRightMostPoint","elemLowestPoint","lastBR","removeFromIndex","removeFromIndexForEllipses","hasHTMLTag","maxStrWidth","lastDash","lastSpace","lastIndexBroken","strWidth","strHeight","oriTextArr","ellipsesStr","ellipsesWidth","dotWidth","characterArr","dashIndex","spaceIndex","lastLineBreak","fastTrim","ws","charAt","smartLabel","oriTextWidth","oriTextHeight","oriText","isTruncated","xmlTagRegEx","ltgtRegex","getOriSize","substr","getNearestBreakIndex","detailObj","tooltext","lastIndexOf","spanAdditionRegx","spanAdditionReplacer","classNameWithTag","classNameWithTagBR","childRetriverFn","childRetriverString","noClassTesting","classNameReg","className","spaceIdx","dashIdx","offsetLeft","offsetTop","parentNode","insertBefore","createElement","classNameBrReg","spanRemovalRegx","error","detailedCalculationFlag","textArr","letter","lSize","cumulativeSize","indiSizeStore","lib","userAgent","navigator","clsNameSpace","containerClass","brReplaceRegex","position","top","whiteSpace","padding","overflow","supportedStyle","font","font-family","font-weight","font-size","line-height","font-style","getElementsByClassName","opera","hasSVG","Boolean","SVGAngle","implementation","hasFeature","containerParent","body","appendChild","setAttribute","getElementsByTagName","sl","charLen","increment","avgWidth","styleObj","fSize","Muze","ContainerManager","maxContainers","svg","containers","rootNode","createElementNS","setAttributeNS","svgRoot","diff","containerObj","keyStr","prev","removeContainer","addContainer","avgCharWidth","display","cObj","ascending","NaN","bisector","compare","ascendingComparator","left","right","ascendingBisect","bisectRight","number","array","src_range","stop","step","e10","e5","e2","src_ticks","ticks","tickIncrement","power","log","LN10","tickStep","step0","step1","quantile","valueof","i0","value0","each","remove","clear","empty","src_nest","sortValues","rollup","nest","sortKeys","depth","createResult","setResult","keyValue","valuesByKey","createObject","setObject","createMap","setMap","sortKey","k","proto","implicit","ordinal","unknown","scale","copy","band","bandwidth","ordinalRange","paddingInner","paddingOuter","align","rescale","sequence","rangeRound","invertExtent","r0","r1","hiIndex","getClosestIndexOf","invert","side","highVal","d1","low","high","extend","definition","Color","reI","reN","reP","reHex3","reHex6","reRgbInteger","reRgbPercent","reRgbaInteger","reRgbaPercent","reHslPercent","reHslaPercent","named","aliceblue","antiquewhite","aqua","aquamarine","azure","beige","bisque","black","blanchedalmond","blue","blueviolet","brown","burlywood","cadetblue","chartreuse","chocolate","coral","cornflowerblue","cornsilk","crimson","cyan","darkblue","darkcyan","darkgoldenrod","darkgray","darkgreen","darkgrey","darkkhaki","darkmagenta","darkolivegreen","darkorange","darkorchid","darkred","darksalmon","darkseagreen","darkslateblue","darkslategray","darkslategrey","darkturquoise","darkviolet","deeppink","deepskyblue","dimgray","dimgrey","dodgerblue","firebrick","floralwhite","forestgreen","fuchsia","gainsboro","ghostwhite","gold","goldenrod","gray","green","greenyellow","grey","honeydew","hotpink","indianred","indigo","ivory","khaki","lavender","lavenderblush","lawngreen","lemonchiffon","lightblue","lightcoral","lightcyan","lightgoldenrodyellow","lightgray","lightgreen","lightgrey","lightpink","lightsalmon","lightseagreen","lightskyblue","lightslategray","lightslategrey","lightsteelblue","lightyellow","lime","limegreen","linen","magenta","maroon","mediumaquamarine","mediumblue","mediumorchid","mediumpurple","mediumseagreen","mediumslateblue","mediumspringgreen","mediumturquoise","mediumvioletred","midnightblue","mintcream","mistyrose","moccasin","navajowhite","navy","oldlace","olive","olivedrab","orange","orangered","orchid","palegoldenrod","palegreen","paleturquoise","palevioletred","papayawhip","peachpuff","peru","pink","plum","powderblue","purple","rebeccapurple","red","rosybrown","royalblue","saddlebrown","salmon","sandybrown","seagreen","seashell","sienna","silver","skyblue","slateblue","slategray","slategrey","snow","springgreen","steelblue","tan","teal","thistle","tomato","turquoise","violet","wheat","white","whitesmoke","yellow","yellowgreen","color","exec","Rgb","rgbn","rgba","hsla","g","rgbConvert","rgb","opacity","hex","Hsl","hsl","hslConvert","hsl2rgb","m1","m2","displayable","brighter","darker","deg2rad","PI","rad2deg","Xn","Yn","Zn","t0","t1","t2","t3","labConvert","Lab","Hcl","cos","sin","z","rgb2lrgb","xyz2lab","lab","lab2xyz","lrgb2rgb","hclConvert","atan2","hcl","C","D","E","ED","EB","BC_DA","cubehelix","cubehelixConvert","Cubehelix","bl","basis","v0","v1","v2","v3","cosh","sinh","src_constant","linear","hue","constant","gamma","nogamma","exponential","src_rgb","rgbGamma","colorRgb","rgbSpline","spline","colors","rgbBasis","src_number","reA","reB","src_string","am","bm","bs","bi","lastIndex","q","one","zero","cssNode","cssRoot","cssView","svgNode","src_value","value_typeof","string","setTime","nb","na","src_round","degrees","translateX","translateY","rotate","skewX","scaleX","scaleY","decompose","atan","interpolateTransform","pxComma","pxParen","degParen","translate","xa","ya","xb","yb","interpolateTransformCss","parseCss","documentElement","defaultView","transform","getComputedStyle","getPropertyValue","interpolateTransformSvg","parseSvg","baseVal","consolidate","matrix","SQRT2","colorHsl","hslLong","colorHcl","cubehelixGamma","colorCubehelix","cubehelixLong","piecewise","interpolate","d3_scale_src_constant","d3_scale_src_number","deinterpolateLinear","bimap","deinterpolate","reinterpolate","d0","polymap","bisect","target","clamp","continuous","output","input","interpolateValue","deinterpolateClamp","reinterpolateClamp","interpolateRound","formatDecimal","toExponential","coefficient","src_exponent","re","formatSpecifier","specifier","FormatSpecifier","fill","sign","symbol","comma","precision","prefixExponent","locale","formatPrefix","formatTrim","out","i1","formatRounded","exponent","formatTypes","%","toFixed","toPrecision","X","toUpperCase","src_identity","prefixes","src_locale","group","grouping","thousands","formatGroup","currency","decimal","numerals","formatNumerals","percent","newFormat","prefix","suffix","formatType","maybeSuffix","valuePrefix","valueSuffix","valueNegative","Infinity","defaultLocale","formatLocale","src_tickFormat","precisionPrefix","precisionRound","precisionFixed","linearish","tickFormat","nice","interval","x0","x1","pow10","powp","base","exp","logp","log10","log2","reflect","logs","pows","raise","thresholds","threshold","quantiles","quantize","newInterval","floori","offseti","offset","previous","millisecond","durationMinute","durationWeek","second","minute","hour","setHours","setDate","getTimezoneOffset","weekday","sunday","monday","tuesday","wednesday","thursday","friday","saturday","setMonth","setFullYear","utcMinute","setUTCSeconds","utcHour","setUTCMinutes","utcDay","setUTCHours","setUTCDate","utcWeekday","getUTCDay","utcSunday","utcMonday","utcTuesday","utcWednesday","utcThursday","utcFriday","utcSaturday","utcMonth","setUTCMonth","utcYear","setUTCFullYear","localDate","L","utcDate","UTC","newYear","timeFormat","utcFormat","utcParse","pads","-","0","numberRe","percentRe","requoteRe","requote","formatRe","names","formatLookup","parseWeekdayNumberSunday","w","parseWeekdayNumberMonday","parseWeekNumberSunday","U","parseWeekNumberISO","V","parseWeekNumberMonday","W","parseFullYear","parseYear","parseZone","Z","parseMonthNumber","parseDayOfMonth","parseDayOfYear","parseHour24","parseMinutes","parseSeconds","parseMilliseconds","parseMicroseconds","parseLiteralPercent","parseUnixTimestamp","Q","parseUnixTimestampSeconds","formatDayOfMonth","formatHour24","formatHour12","formatDayOfYear","timeDay","timeYear","formatMilliseconds","formatMicroseconds","formatMonthNumber","formatMinutes","formatSeconds","formatWeekdayNumberMonday","formatWeekNumberSunday","timeSunday","formatWeekNumberISO","timeThursday","formatWeekdayNumberSunday","formatWeekNumberMonday","timeMonday","formatYear","formatFullYear","formatZone","formatUTCDayOfMonth","formatUTCHour24","formatUTCHour12","formatUTCDayOfYear","formatUTCMilliseconds","formatUTCMicroseconds","formatUTCMonthNumber","formatUTCMinutes","formatUTCSeconds","formatUTCWeekdayNumberMonday","dow","formatUTCWeekNumberSunday","formatUTCWeekNumberISO","formatUTCWeekdayNumberSunday","formatUTCWeekNumberMonday","formatUTCYear","formatUTCFullYear","formatUTCZone","formatLiteralPercent","formatUnixTimestamp","formatUnixTimestampSeconds","locale_dateTime","dateTime","locale_date","locale_time","time","locale_periods","periods","locale_weekdays","days","locale_shortWeekdays","shortDays","locale_months","months","locale_shortMonths","shortMonths","periodRe","periodLookup","weekdayRe","weekdayLookup","shortWeekdayRe","shortWeekdayLookup","monthRe","monthLookup","shortMonthRe","shortMonthLookup","formats","formatShortWeekday","formatWeekday","formatShortMonth","formatMonth","formatPeriod","utcFormats","formatUTCShortWeekday","formatUTCWeekday","formatUTCShortMonth","formatUTCMonth","formatUTCPeriod","parses","parseShortWeekday","parseWeekday","parseShortMonth","parseMonth","parseLocaleDateTime","parseSpecifier","parsePeriod","parseLocaleDate","parseLocaleTime","newParse","newDate","week","toISOString","durationSecond","durationHour","durationDay","durationMonth","durationYear","calendar","formatMillisecond","formatSecond","formatMinute","formatHour","formatDay","formatWeek","tickIntervals","tickInterval","src_time","timeMonth","timeWeek","timeHour","timeMinute","timeSecond","timeMillisecond","src_colors","interpolateCubehelixLong","ramp","sequential","interpolator","d3_scale_chromatic_src_colors","src_ramp","scheme","interpolateRgbBasis","warm","cool","sequential_multi_rainbow","ts","magma","inferno","plasma","UNIT_GLOBAL_NAMESPACE","UNIT_LOCAL_NAMESPACE","LAYER_LOCAL_NAMESPACE","LAYER_GLOBAL_NAMESPACE","GROUP_GLOBAL_NAMESPACE","GROUP_LOCAL_NAMESPACE","CANVAS_LOCAL_NAMESPACE","CANVAS_GLOBAL_NAMESPACE","ReservedFields","ROW_ID","CommonProps","ACTION_INF","ON_LAYER_DRAW","MATRIX_CREATED","COORD_TYPES","d3_axis_src_identity","bottom","epsilon","entering","__axis","axis","orient","tickArguments","tickValues","tickTransform","tickSizeInner","tickSizeOuter","tickPadding","spacing","range0","range1","center","selection","selectAll","tick","tickExit","exit","tickEnter","enter","attr","line","insert","transition","getAttribute","tickSize","pi","tau","tauEpsilon","Path","_x0","_y0","_x1","_y1","moveTo","closePath","lineTo","quadraticCurveTo","y1","bezierCurveTo","x2","y2","arcTo","y0","x21","y21","x01","y01","l01_2","x20","y20","l21_2","l20_2","l21","l01","acos","t01","t21","arc","a0","ccw","dx","dy","cw","da","rect","d3_shape_src_constant","halfPi","asin","arcInnerRadius","innerRadius","arcOuterRadius","outerRadius","arcStartAngle","startAngle","arcEndAngle","endAngle","arcPadAngle","padAngle","cornerTangents","rc","ox","oy","x11","y11","x10","y10","x00","y00","d2","cx0","cy0","cx1","cy1","dx0","dy0","dx1","dy1","cx","cy","Linear","areaStart","_line","areaEnd","lineStart","_point","lineEnd","point","curve_linear","src_line","pointX","pointY","defined","curve","curveLinear","buffer","defined0","src_area","area","x0z","y0z","arealine","lineX0","lineY0","lineY1","lineX1","src_descending","d3_shape_src_identity","curveRadial","Radial","_curve","radial","symbol_circle","draw","symbol_cross","tan30","tan30_2","diamond","kr","kx","ky","star","square","sqrt3","triangle","wye","noop","that","Basis","BasisClosed","_x2","_x3","_x4","_y2","_y3","_y4","BasisOpen","Bundle","beta","_basis","_beta","_x","_y","custom","bundle","_k","Cardinal","tension","cardinal","CardinalClosed","_x5","_y5","CardinalOpen","_l01_a","_l01_2a","_l12_a","_l12_2a","_l23_a","_l23_2a","CatmullRom","alpha","_alpha","x23","y23","curve_catmullRom","catmullRom","CatmullRomClosed","CatmullRomOpen","LinearClosed","slope3","h0","h1","s0","slope2","MonotoneX","MonotoneY","ReflectContext","Natural","controlPoints","_t0","px","py","Step","_t","curve_step","stepBefore","stepAfter","none","series","order_none","stackValue","order_ascending","sums","cubicInOut","polyIn","polyOut","polyInOut","b2","b3","b4","b5","b6","b7","b8","b9","b0","bounceOut","backIn","overshoot","backOut","backInOut","elasticOut","elasticIn","amplitude","period","d3_voronoi_src_constant","elasticInOut","RedBlackTree","RedBlackNode","R","RedBlackRotateLeft","tree","RedBlackRotateRight","RedBlackFirst","after","grandpa","uncle","createEdge","setEdgeEnd","cells","halfedges","createBorderEdge","vertex","clipEdge","ax","ay","connectEdge","fm","fb","lx","ly","rx","ry","fx","fy","cellHalfedgeAngle","cell","site","va","vb","cellHalfedgeStart","cellHalfedgeEnd","firstCircle","circlePool","attachCircle","lArc","rArc","lSite","cSite","rSite","bx","by","epsilon2","ha","hc","circle","Circle","before","circles","detachCircle","beachPool","createBeach","beach","Beach","detachBeach","beaches","removeBeach","disappearing","iArc","nArcs","addBeach","dxl","dxr","directrix","leftBreakPoint","rightBreakPoint","createCell","newArc","hb","rfocx","rfocy","pby2","lfocx","lfocy","plby2","hl","aby2","triangleArea","lexicographic","Diagram","sites","extent","sortCellHalfedges","clipEdges","clipCells","iCell","iHalfedge","nHalfedges","startX","startY","endX","endY","nCells","cover","dc","v00","v01","v11","v10","polygons","polygon","triangles","e1","links","radius","_found","vx","vy","src_voronoi","voronoi","Selection","idGetter","_dataObjects","_updatedata","_mode","_enterdata","_exitdata","_idGetter","newData","entryData","exitdata","tempMap","duplicateData","updatedData","newSelection","currentData","dataObjects","mergedObjects","mergedData","newdata","objects","HTMLElement","common_utils_typeof","sanitizeIP","typeObj","nonExistentKeys","checkExistence","getMax","_toConsumableArray","getMin","getDomainFromData","fieldType","domArr","_loop","_fields","_slicedToArray","field0","field1","arr0","firstMin","secondMin","firstMax","secondMax","sanitizeDomainWhenEqual","unionDomain","domains","_ref2","dom","symbolFns","symbolCircle","cross","symbolCross","symbolDiamond","symbolSquare","symbolStar","symbolWye","symbolTriangle","easeFns","cubic","easeCubic","bounce","easeBounce","elastic","easeElastic","back","easeBack","poly","easePoly","circleInOut","getNearestValue","filterData","getWindow","getQualifiedClassName","cancelAnimationFrame","cls","defaultValue","objectIterator","Voronoi","common_utils_classCallCheck","_voronoi","_voronoiFn","addListenerToNamespace","namespaceInf","namespace","_listeners","getObjProp","_len","_key","Store","propName","propNames","callBack","on","calculatedProp","intSanitizer","transactor","holder","conf","stateProps","addAsMethod","nameSpaceProp","nsProp","compareTo","_len2","_key2","paramsLen","prevVal","spreadParams","sanitization","typeCheck","typeExpected","preset","oldValues","generateGetterSetters","propInfo","typeChecker","isEqual","oldVal","newVal","arraysEqual","is","ERROR_MSG","INTERFACE_IMPL","mergeRecursive","sink","createSelection","sel","appendObj","idFn","dataSelect","mergedSelection","exitSelection","getObjects","inst","numberInterpolator","interpolateNumber","piecewiseInterpolator","rgbToHsv","detectColor","col","getDataModelFromRange","selFields","selFn","getDataModelFromIdentifiers","filteredDataModel","dataArr","filteredSchema","include","registerListeners","listenerMap","_len3","_key3","propListenerMap","local","mapObj","propType","listenerFn","listener","isValidValue","getSymbol","stackOrders","_defineProperty","_stackOrders","stackOrderNone","stackOrderAscending","stackOffsets","_stackOffsets","yp","yn","stackOffsetNone","si","sij0","s3","sk","stack","orderNone","offsetNone","oz","kz","sz","sij","ki","d3Stack","pathInterpolators","curveStepAfter","curveStepBefore","curveStep","curveCatmullRom","Symbols","axisLeft","axisRight","axisTop","axisBottom","pie","descending","arcs","pa","cornerRadius","padRadius","a01","a11","a00","a10","da0","da1","ap","rp","rc0","rc1","p0","p1","oc","intersect","x3","y3","x32","y32","kc","lc","centroid","Scales","scaleBand","getSmallestDiff","points","timeFormats","timeDurations","formatTemporal","nearestInterval","getNearestInterval","getValueParser","retrieveNearestGroupByReducers","_len4","measureFieldNames","_key4","filteredReducers","getAncestorDerivations","nearestReducers","derv","retrieveFieldDisplayName","xhtml","src_namespaces","xlink","xml","xmlns","src_namespace","namespaces","space","creator","fullname","creatorFixed","ownerDocument","creatorInherit","uri","namespaceURI","src_selector","selector","querySelector","selectorAll","querySelectorAll","matcher","matches","sparse","EnterNode","_next","__data__","keyPrefix","bindIndex","groupLength","dataLength","bindKey","nodeByKeyValue","keyValues","src_window","styleValue","classArray","classList","ClassList","_names","classedAdd","classedRemove","contains","textRemove","htmlRemove","nextSibling","lower","previousSibling","constantNull","selection_cloneShallow","cloneNode","selection_cloneDeep","filterEvents","event","mouseenter","mouseleave","filterContextListener","contextListener","related","relatedTarget","compareDocumentPosition","event1","event0","onRemove","typename","__on","removeEventListener","capture","onAdd","wrap","addEventListener","customEvent","sourceEvent","dispatchEvent","CustomEvent","createEvent","initEvent","bubbles","cancelable","detail","groups","parents","_groups","_parents","subgroups","subnode","subgroup","enterGroup","updateGroup","_enter","_exit","onenter","onupdate","onexit","groups0","groups1","m0","merges","group0","group1","compareNode","sortgroups","sortgroup","getAttributeNS","attrRemoveNS","removeAttributeNS","attrRemove","removeAttribute","attrFunctionNS","attrFunction","attrConstantNS","attrConstant","priority","styleRemove","removeProperty","styleFunction","setProperty","styleConstant","propertyRemove","propertyFunction","propertyConstant","classed","classedFunction","classedTrue","classedFalse","textFunction","textConstant","html","htmlFunction","htmlConstant","deep","typenames","parseTypenames","dispatch","dispatchFunction","dispatchConstant","src_select","nextId","Local","current","src_point","ownerSVGElement","createSVGPoint","clientX","clientY","matrixTransform","getScreenCTM","inverse","getBoundingClientRect","clientLeft","clientTop","mouse","changedTouches","src_touch","touches","identifier","touch","Dispatch","T","types","nopropagation","stopImmediatePropagation","noevent","preventDefault","nodrag","view","__noselect","MozUserSelect","d3_drag_src_constant","DragEvent","subject","active","defaultFilter","button","defaultContainer","defaultSubject","defaultTouchable","src_drag","mousedownx","mousedowny","mousemoving","touchending","touchable","gestures","clickDistance2","drag","mousedowned","touchstarted","touchmoved","touchended","gesture","beforestart","mousemoved","mouseupped","yesdrag","noclick","clearTimeout","sublisteners","clickDistance","taskHead","taskTail","frame","timeout","pokeDelay","clockLast","clockNow","clockSkew","clock","performance","timer_typeof","now","setFrame","clearNow","Timer","_call","_time","timer","delay","restart","wake","timerFlush","nap","sleep","poke","clearInterval","setInterval","src_timeout","elapsed","emptyOn","emptyTween","CREATED","SCHEDULED","STARTING","STARTED","RUNNING","ENDING","ENDED","transition_schedule","timing","schedules","__transition","self","tween","state","duration","ease","schedule","tweenValue","_id","transition_interpolate","interpolateRgb","interpolateString","Transition","_name","newId","selection_prototype","inherit","id0","id1","onFunction","on0","on1","sit","attrTween","string00","string10","interpolate0","string0","string1","value1","attrTweenNS","attrInterpolateNS","attrInterpolate","styleTween","styleNull","styleMaybeRemove","listener0","styleInterpolate","removeFunction","tweenRemove","tween0","tween1","tweenFunction","delayFunction","delayConstant","durationFunction","durationConstant","easeConstant","Promise","reject","cancel","interrupt","defaultTiming","easeCubicInOut","selectElement","element","makeElement","elemType","callbacks","keyFn","SVGElement","selectorVal","selectorType","actualSelector","enterSel","mergeSel","exitSel","applyStyle","setElementAttrs","attrs","setAttrs","setStyles","styles","createElements","getClientPoint","pos","clientPoint","getEvent","d3event","getD3Drag","d3drag","getSmartComputedStyle","css","textEl","mandatoryStyle","fill-opacity","renderer_utils_typeof","computedStyle","styleForSmartLabel","hasTouch","events","EVENT_LIST","composition","resolveFn","notification","hasOwn","LifeCycleManager","lifecycle_manager_classCallCheck","_eventList","_promises","_notifiers","_lifeCycles","_unreleasedLifeCycles","_boot","_preparePromises","promise","_makeNotifierPromise","createPromise","then","prm","formalName","client","_releasePromisesFromCache","_notify","stage","_resolvePromise","retrieve","_callLifeCycleCallback","_cachePromise","_resetTargetPromise","lifeCycles","DRAG","HOVER","SELECTIONDRAG","CLICK","LONGTOUCH","TOUCHDRAG","ALL_ACTIONS","SELECTION_NEW_ENTRY","SELECTION_NEW_EXIT","SELECTION_NULL","SELECTION_OLD_ENTRY","SELECTION_OLD_EXIT","SelectionSet","completeSet","_volatile","selection_set_classCallCheck","_completeSetCount","_lockedSelection","_resetted","ids","entrySet","exitSet","lockedSel","addSet","removeSet","updateSet","changeSideEffectAvailability","toEnable","sideEffects","change","enable","disable","getMergedSet","helper_toConsumableArray","conditionsMap","newEntry","SELECTION","oldEntry","mergedEnter","newExit","oldExit","mergedExit","complete","getSetInfo","selectionSet","propagationData","resetted","getModelFromSet","condition","Firebolt","actions","behaviourEffectMap","firebolt_classCallCheck","_sideEffectDefinitions","_sideEffects","_propagationInf","_actions","behavioural","physical","_selectionSet","_volatileSelectionSet","_propagationFields","_sourceSideEffects","selectionBox","_propagationBehaviourMap","_sourceBehaviours","_actionBehaviourMap","_config","_behaviourEffectMap","_entryExitSet","_actionHistory","_queuedSideEffects","mapSideEffects","registerBehaviouralActions","registerSideEffects","registerPhysicalBehaviouralMap","physicalBehaviouralMap","registerPhysicalActions","behEffectMap","preventDefaultActions","effectNames","effects","firebolt_toConsumableArray","behaviours","initializeBehaviouralActions","dispatchableBehaviours","Action","prepareSelectionSets","initializeSideEffects","sideEffectStore","actionHistory","queuedSideEffects","sideEffect","combinedSet","unionSets","behaviour","entryExitSet","existingModel","aggFns","effect","firebolt_typeof","sideEffectInstance","isEnabled","mutates","dispatchSideEffect","propagationInfo","propagate","getSideEffects","propagationSelectionSet","getPropagationSelectionSet","shouldApplySideEffects","sourceSelectionSet","applicableSideEffects","getApplicableSideEffects","applySideEffects","physicalAction","actionBehaviourMap","behaviourMap","mapActionsAndBehaviour","unsubscribe","onDataModelPropagation","propValue","dispatchBehaviour","uniqueIds","behaviouralActions","volatileSelectionSet","sideEffectDefinitions","sideEffectsMap","SideEffect","sideEffectConf","initedActions","initializePhysicalActions","physicalActions","phyAction","initedPhysicalActions","getDefaultTargetContainer","bindActionWithBehaviour","targets","behaviourList","xFields","yFields","xMeasures","yMeasures","_propModel$getData","fieldMap","getFullData","propagationSource","applicableSelectionSets","GenericBehaviour","firebolt","generic_classCallCheck","_enabled","selectionSets","getSelectionSets","_this$firebolt$getAdd","getAddSetFromCriteria","getPropagationInf","setSelectionSet","getEntryExitSet","_selectionSet$getSets","getSets","setConfig","isSourceFieldPresent","getSourceFields","VolatileBehaviour","reset","existingAddSet","updateExit","getCompleteSet","BRUSH","HIGHLIGHT","TOOLTIP","FILTER","HighlightBehaviour","BrushBehaviour","BEHAVIOURNAMES","FilterBehaviour","PersistentBehaviour","updateEntry","mergedExitSet","completeSetCount","SelectBehaviour","getDragActionConfig","sourceInfo","axes","xAxis","yAxis","axisFields","xField","getMembers","yField","xFieldType","yFieldType","stPos","startPos","endPos","dragDim","isXDimension","isYDimension","xRange","yRange","selectedDomains","rangeObj","xdom","ydom","snap","getNearestRange","attachDragEvent","targetEl","drawingInf","touchStart","d3Drag","getDrawingContext","getSourceInfo","beh","dragEnd","hover","interaction","tooltip","svgContainer","nearestPoint","getNearestPoint","getAllPoints","showInPosition","generatePayloadFromEvent","click","physical_defineProperty","_physicalActions","ACTIONNAMES","longtouch","touchEnd","touchdrag","PROPS","valueParser","GenericSideEffect","generic_sideeffect_classCallCheck","_strategy","_strategies","SurrogateSideEffect","interactionType","layers","layer","interactive","applyInteractionStyle","SpawnableSideEffect","_drawingContext","changeVisibility","sideEffectGroup","visible","defClassName","classPrefix","SelectionBox","boxConf","box","drawingContext","unitWidth","unitHeight","selectionGroupClassName","hide","sourceInf","_getBoxDimensionsFrom","getBoxDimensionsFromPayload","direction","xDim","yDim","xLinear","yLinear","xCriteria","yCriteria","x1Val","x2Val","bandScale","x1DomainIndex","x2DomainIndex","_sort2","helper_slicedToArray","getScaleValue","getUnitWidth","y1Val","y2Val","y1DomainIndex","y2DomainIndex","_sort4","_xDim","_yDim","dimension","show","selectionBoxDrag","onDrag","boxClassName","INITIAL_STYLE","connectorClassName","margin","content","iconContainerSize","iconScale","iconShape","iconColor","rowMargin","separator","parentClassName","arrow","disabled","getArrowPos","dim","measurement","arrowPos","boxHeight","boxWidth","arrowWidth","plotBottom","boxBottom","plotRight","boxRight","placeArrow","tooltipArrow","_tooltipArrow","tooltipBackground","_tooltipBackground","arrowConf","_arrowOrientation","Content","content_classCallCheck","_model","_formatter","ctx","_mount","displayFormat","table","tbody","margin-right","el","shape","Tooltip","htmlContainer","tooltip_classCallCheck","connectorContainer","tooltipConf","contentClass","_tooltipContainer","_contentContainer","_contents","_tooltipConnectorContainer","qualifiedClassName","addClass","defConf","contentConfig","reorderContainers","contentConf","render","_target","repositionArrow","arrowDisabled","arrowOrient","outsidePlot","connector","_offset","orientation","_extent","arrowSize","topSpace","dimX","rightSpace","leftSpace","positionTop","positionRight","positionLeft","positionHorizontal","positionVertical","_position","_arrowPos","formatters","strategies_defineProperty","getDefaultTooltipFormatterFn","defaultFormatter","getRowContent","fieldInf","dataInf","formattedValue","measureIndex","dimensionMeasureMap","timeDiffs","defFormatter","fieldspace","dataLen","formatterFn","uniqueVals","strategies_toConsumableArray","colorAxis","shapeAxis","sizeAxis","isRetinalField","associatedMeasures","icon","getColor","getShape","getSize","formattedKey","measure","measureFormatter","margin-left","buildTooltipData","fieldValues","detailFields","containsDetailField","getTabularData","allMeasures","_construct","strategies","selectionSummary","aggregatedModel","fieldsConf","measureNames","highlightSummary","configResolvers","specificConf","_default","_getPrototypeOf2","side_effects_tooltip_classCallCheck","tooltip_possibleConstructorReturn","tooltip_getPrototypeOf","_tooltips","sanitizeConfig","strategyObj","sanitizedConf","setStrategy","totalHeight","totalWidth","isEmpty","tooltips","boundBox","dataModels","fragmented","showVertically","tooltipPos","boxes","tooltip_toConsumableArray","sourceFields","indices","plotDimensions","getPlotPointsFromIdentifiers","strategy","strategyConf","dataTransform","projectFields","plotDim","dt","layoutContainer","parentContainerDimensions","layoutBoundBox","unitBoundBox","tooltipInst","TooltipRenderer","timeDiffsByField","strategyFn","positionRelativeTo","tooltipBoundBox","getContents","spaceOutBoxes","spaceOutIfOverlap","firstBox","secondBox","opposite","projectedFields","Crossline","bandWidth","_this$config","bandClass","lineClass","elemData","axisIndex","fieldInst","xOffset","plotWidth","crossline_toConsumableArray","getPlotSpan","getPlotPadding","startPx","endPx","dataPoint","parentGroup","fade","fadeFn","focus","highlight","PlotHighlighter","plot_highlighter_classCallCheck","plot_highlighter_possibleConstructorReturn","plot_highlighter_getPrototypeOf","FilterEffect","entryModel","clearCaching","resetData","enableCaching","addLayer","layerDefs","layerRegistry","layerDef","mark","layerCls","shouldDrawAnchors","depLayerEncoding","encoding","defaultSizeValue","layerObj","instances","getTransitionConfig","calculateDomain","linkedLayer","AnchorEffect","anchors_classCallCheck","anchors_possibleConstructorReturn","anchors_getPrototypeOf","_layersMap","addAnchorLayers","metaInf","registry","layerDefsVal","registerImmediateListener","STATE_NAMESPACES","anchors_slicedToArray","_layers","elems","_linkedLayer$getTrans2","getLayerByName","getTransformedDataFromIdentifiers","transformedData","transformedDataModel","PersistentAnchors","BrushAnchors","behaviour_effect_map_defineProperty","BEHAVIOURS","SIZE","COLOR","SHAPE","TEXT","ENCODING","X0","Y0","RADIUS","RADIUS0","ANGLE","ANGLE0","nearestPointThreshold","strokeOpacity","connectNullData","SimpleLayer","coord","BOTTOM","TOP","LEFT","RIGHT","axisOrientationMap","axis_orientation_defineProperty","_axisOrientationMap","AxisOrientation","LINEAR","BAND","TIME","ORDINAL","QUANTIZE","QUANTILE","LOG","POW","IDENTITY","SEQUENTIAL","THRESHOLD","CONTINOUS","DISCRETE","HIDDEN","DEFAULT_ANGLE_DOMAIN","scaleLinear","scales","scaleThreshold","scaleLog","scalePow","scaleIdentity","scaleOrdinal","scaleSequential","scaleQuantize","scaleQuantile","scaleTime","scaleMap","scale_creator_defineProperty","_scaleMap","ScaleType","createScale","scaleFactory","adjustRange","axisName","axisNamePadding","fixedBaseline","labels","rotation","smartTicks","numberOfTicks","showAxisName","showInnerTicks","showOuterTicks","yOffset","rotateAxis","instance","tickText","labelManager","renderConfig","getTickSize","yShift","xShift","tickLabelDim","quadrant","rotationNormalizer","angleToRadian","angle","changeTickOrientation","selectContainer","axisInstance","_smartTicks","isSmartTicks","registerAnimationDoneHook","setFixedBaseline","setAxisNamePos","textNode","axisNameHeight","labelOffset","availableSpace","longestWord","quarter","halfYearly","mintues","getTickIntervalFnBasedOnNumberOfTicks","possibleTickLevelIndex","maxPossibleTicks","tickIntervalLevelInfo","tickIntervalInfo","numOfPossibleTicks","getActualTickInterval","noOfTicks","minWidthBetweenTicks","_minTickDistance","getTickIntervalBasedOnCurrentLevel","_dependencies","longestWordType","applyTickSkipping","minTickDistance","minTickSpace","_minTickSpace","minTickWidth","maxTicks","getSkippedTicks","actualNumberOfTicks","_minDiff","millisecondInterval","numOfTicksAccordingToMinDiff","adjustHorizontalRange","adjustVerticalRange","rangeAdjustmentMap","space_setter_defineProperty","_rangeAdjustmentMap","setAxisRange","rangeBounds","getAdjustedRange","getAxisOffset","timeDiff","avWidth","bars","spaceSetter","spaceConfig","heightForTicks","_context$availableSpa2","availWidth","availHeight","isOffset","_context$renderConfig2","_context$getAxisDimen","getAxisDimensions","tickDimensions","allTickDimensions","axisNameDimensions","tickDimHeight","tickDimWidth","namePadding","labelConfig","minTickHeight","getTickValues","tickShifter","maxTickSpaces","widthForTicks","totalTickWidth","getRotatedSpaces","rotatedHeight","rotatedWidth","setOffset","logicalSpace","getAxisComponentDimensions","axisTicks","largestTick","largestTickDimensions","smartTick","_context$renderConfig","labelFunc","_tickLabelStyle","originalLabel","getFormattedText","_axisNameStyle","getHorizontalAxisSpace","axisDimensions","_context$config2","axisDimHeight","minTickDiff","getMinTickDifference","cartesian_axis_helper_toConsumableArray","getVerticalAxisSpace","_context$config3","calculateBandSpace","largestDimHeight","_getHorizontalAxisSpa","_getVerticalAxisSpace","getValidDomain","userDom","setContinousAxisDomain","_domain","axisComponentDimensions","oldConfig","mockedOldConfig","shouldAxesScaleUpdate","hasAxesConfigChanged","properties","tickFormatter","sanitizeTickFormatter","_scale","_axis","createAxis","_tickFormatter","resetRenderConfig","_renderConfig","_maxTickSpaces","SimpleAxis","simple_axis_classCallCheck","_range","_domainLock","_axisDimensions","defCon","simpleConfig","bodyElem","dist","_animationDonePromises","domainValue","setAxisComponentDimensions","smartAxisName","axisClass","_objectSpread","setTickConfig","setSmartAxisName","_this$config2","dimType","widthDim","getSmartAxisName","oriSize","domainVal","computeAxisDimensions","_getAxisComponentDime","labelHeight","labelWidth","calculateContinousSpace","_context$renderConfig6","axisNameWidth","_getHorizontalAxisSpa2","_getVerticalAxisSpace2","renderAxis","axisNameStyle","tickLabelStyle","axisTickFormatter","labelProps","axisNameSpace","all","LinearInterpolator","LogInterpolator","PowInterpolator","interpolatorMap","continous_axis_defineProperty","_interpolatorMap","ContinousAxis","continous_axis_classCallCheck","continous_axis_possibleConstructorReturn","continous_axis_getPrototypeOf","InterpolatorCls","_interpolator","_this$renderConfig","sanitizeDomain","_get2","_get","_this$renderConfig2","newTickValues","tickSpace","getNumberOfTicks","labelDim","numberOfValues","tickLength","_this$smartTicks$","BandAxis","_this$maxTickSpaces","_getRotatedSpaces","paddingNormalized","formatTickValue","TimeAxis","time_axis_classCallCheck","time_axis_possibleConstructorReturn","time_axis_getPrototypeOf","time_axis_get","rawTicks","resetTickInterval","_context$config8","_context$availableSpa","adjustedRange","x11Colors","Pink","LightPink","HotPink","DeepPink","PaleVioletRed","MediumVioletRed","LightSalmon","Salmon","DarkSalmon","LightCoral","IndianRed","Crimson","FireBrick","DarkRed","Red","OrangeRed","Tomato","Coral","DarkOrange","Orange","Gold","Yellow","LightYellow","LemonChiffon","LightGoldenrodYellow","PapayaWhip","Moccasin","PeachPuff","PaleGoldenrod","Khaki","DarkKhaki","Cornsilk","BlanchedAlmond","Bisque","NavajoWhite","Wheat","BurlyWood","Tan","RosyBrown","SandyBrown","Goldenrod","DarkGoldenrod","Peru","Chocolate","SaddleBrown","Sienna","Brown","Maroon","DarkOliveGreen","Olive","OliveDrab","YellowGreen","LimeGreen","Lime","LawnGreen","Chartreuse","GreenYellow","SpringGreen","MediumSpringGreen","LightGreen","PaleGreen","DarkSeaGreen","MediumSeaGreen","SeaGreen","ForestGreen","Green","DarkGreen","MediumAquamarine","Aqua","Cyan","LightCyan","PaleTurquoise","Aquamarine","Turquoise","MediumTurquoise","DarkTurquoise","LightSeaGreen","CadetBlue","DarkCyan","Teal","LightSteelBlue","PowderBlue","LightBlue","SkyBlue","LightSkyBlue","DeepSkyBlue","DodgerBlue","CornflowerBlue","SteelBlue","RoyalBlue","Blue","MediumBlue","DarkBlue","Navy","MidnightBlue","Lavender","Thistle","Plum","Violet","Orchid","Fuchsia","Magenta","MediumOrchid","MediumPurple","BlueViolet","DarkViolet","DarkOrchid","DarkMagenta","Purple","Indigo","DarkSlateBlue","SlateBlue","MediumSlateBlue","White","Snow","Honeydew","MintCream","Azure","AliceBlue","GhostWhite","WhiteSmoke","Seashell","Beige","OldLace","FloralWhite","Ivory","AntiqueWhite","Linen","LavenderBlush","MistyRose","Gainsboro","LightGray","Silver","DarkGrey","Grey","DimGrey","LightSlateGrey","SlateGrey","DarkSlateGrey","Black","palette","DEFAULT_GRADIENT_COLOR","DEFAULT_CONFIG","stops","getHslString","hslArr","convertToXllString","baseString","getActualHslColor","paletteColor","hexToHsv","props_toConsumableArray","newConfig","uniqueValues","treatNullMeasures","scaledVal","minDomainScaledVal","resolveAxisConfig","propVal","defaultVal","getStops","newStops","color_strategy_toConsumableArray","rangeStops","newStopsLength","newRange","hslInterpolator","interpolateHslLong","indexedDomain","scaleDomain","indexedDomainMeasure","normalDomain","steppedDomain","_getStops","continousSteppedDomain","_getStops2","uniqueRange","indexedRange","numVal","normalRange","strategyGetter","domainType","rangeType","schemeType","color_strategy_defineProperty","domainRange","ColorAxis","color_axis_classCallCheck","_domainType","_rangeType","_schemeType","getSchemeType","_colorStrategy","setColorStrategy","updateDomain","colorStrategy","getScheme","colorSchemes","hslColorArray","getRawColor","color_axis_toConsumableArray","scaleInfo","domainRangeFn","transformationArr","newH","newS","newL","newA","size_strategy_defineProperty","pieceWiseRange","size_strategy_toConsumableArray","intervals","newIntervals","discreteRange","SizeAxis","size_axis_classCallCheck","_sizeStrategy","domainInfo","domainFn","generator","ShapeAxis","shape_axis_classCallCheck","_generatedShapes","shapeType","shapeGenerator","generatorFn","generatedShapes","createAngleValues","angleData","_angleFn","_angleValues","AngleAxis","angle_axis_classCallCheck","customDomain","customRange","_this$_range","angle_axis_slicedToArray","ROWS","COLUMNS","COL","ROW","CELL","X_AXES","Y_AXES","ENTRY_CELLS","EXIT_CELLS","PRIMARY","SECONDARY","adjustDomain","minOuterRadius","RadiusAxis","radius_axis_classCallCheck","_radiusFactor","sanitizedRange","rangeVal","DATA_TYPES","group_transform","data_type_scale_map_defineProperty","_dataTypeScaleMap","groupByIndices","nestCollection","nestFn","identityTransform","transformMap","transform_factory_defineProperty","_transformMap","uniqueField","valueField","normalizedData","normalizeData","uniqueFieldIndex","valueFieldIndex","seriesKeyIndex","seriesKeys","tuples","rowObj","_tuple","seriesKey","newArr","orderBy","orderIndex","groupByIndex","localeCompare","stackData","seriesData","transformFactory","POLAR","CARTESIAN","transfromColor","styleType","intensity","stateColor","originalColor","fillColorInfo","transformColor","interactionStyles","elements","getPlotElementsFromSet","_d$meta","colorTransform","helpers_slicedToArray","getAxesScales","_map2","_map4","xScale","yScale","encodingFieldInfRetriever","helpers_defineProperty","_encodingFieldInfRetr","encodingInf","getIndividualClassName","individualClassName","classNameStr","dataNormalizers","_dataNormalizers","encodingFieldInf","radiusFieldIndex","angleFieldIndex","radius0FieldIndex","angle0FieldIndex","fieldsLen","pointObj","radius0","angle0","enc","rowId","transformType","xFieldIndex","yFieldIndex","x0FieldIndex","y0FieldIndex","domainCalculator","_domainCalculator","layerInst","angleValues","radius0Field","encodingFieldsInf","xFieldSubType","yFieldSubType","x0Field","y0Field","yEnc","xEnc","attachDataToVoronoi","helpers_toConsumableArray","updateStyle","positionPoints","positioner","encodingTransform","getPlotMeasurement","dimensionalValues","fieldInfo","_bandScale","span","groupSpan","offsetValues","actualGroupWidth","dataProps","innerPadding","getGroupSpan","isAxisBandScale","axisPadding","groupPadding","resolveInvalidTransformType","_context$encodingFiel","groupByField","groupByFieldMeasure","getValidTransformForAggFn","resolvedInvalidTransformType","_context$encodingFiel2","isCustomTransformTypeProvided","_customConfig","resolveEncodingValues","transformedValues","getColorMetaInf","getHslArray","getCoordValue","trig","coordValueGetter","toCartesianCoordinates","rangePlot","_point$update","_coordValueGetter","sortData","axisArr","listener_map_slicedToArray","encodingValue","resolveTransformType","_transformedData","getTransformedData","_normalizedData","getNormalizedData","calculateDomainFromData","_updateLock","getRenderProps","registerChangeListener","renderLayer","throwback","commit","defaultOptions","default_options_defineProperty","_defaultOptions","newConf","defaultPolicy","_cacheEnabled","_cachedData","BaseLayer","base_layer_classCallCheck","base_layer_possibleConstructorReturn","base_layer_getPrototypeOf","base_layer_assertThisInitialized","alias","_points","_measurement","_store","localNs","initializeGlobalState","globalState","getState","base_layer_defineProperty","global","unitRowIndex","unitColIndex","_encodingFieldsInf","_encodingTransform","_alias","transformData","encodingType","transformedDataArr","_transformType","getValidTransform","pointMap","_pointMap","_dataProps","_this$encodingFieldsI","base_layer_slicedToArray","xMeasure","yMeasure","_identifiers$","_identifiers$2","xMeasureIndex","yMeasureIndex","getAllAttrs","filteredPoints","base_layer_toConsumableArray","sizeVal","_identifiers$getData","identifierData","identifierSchema","_this$encodingFieldsI2","tupleArr","transformedVal","base_layer_construct","userConf","drawLine","curveInterpolatorFn","linepath","LineLayer","line_classCallCheck","line_possibleConstructorReturn","line_getPrototypeOf","isXDim","isYDim","xPx","yPx","resolvedEncodings","stroke","cachePoint","seriesClassName","containerSelection","colorField","colorFieldIndex","animateGroup","groupTransition","groupAnimateStyle","stroke-opacity","getPathStyle","translatePoints","colorValFn","colorVal","getDrawFn","searchRadius","_point$data$data","getIdentifiersFromData","layerId","drawArea","easeEffect","renderer_slicedToArray","enterAreaPath","updateAreaPath","selectionEnter","AreaLayer","area_get","area_getPrototypeOf","_getAxesScales","classNameFn","minYVal","basePos","y0Px","invalidY","invalidY0","resolvedValues","stroke-width","stroke-linejoin","states","fadeout","selected","ArcLayer","arc_classCallCheck","arc_possibleConstructorReturn","arc_getPrototypeOf","_prevPieData","_this$axes","radiusAxis","pieIndex","prevData","angleV","angles","_angles","uid","getOuterRadius","getInnerRadius","startAngle0","endAngle0","_previousInfo","getPreviousPoint","currIndex","prevArc","nextArc","_context$axes$angle$r2","arc_helper_slicedToArray","qualClassName","_arcFn","consecutiveExits","exitCounter","tweenPie","individualClass","tweenExit","exitArr","oldExitCounter","tweenExitPie","consecutiveExitArr","gElem","pieSlices","pieSliceInf","tData","drawText","selectionMerge","backgroundVal","textanchor","textStyle","background","backgroundPadding","_smartLabel$getOriSiz","backgroundEl","alignment-baseline","defaultEncoding","alignmentBaseLine","defRotation","pointTranslators","polar","textEncoding","angleAxis","textFormatter","backgroundEncoding","backgroundValue","cartesian","textField","textFieldIndex","textValue","text_slicedToArray","TextLayer","text-anchor","drawSymbols","createShape","groupElement","Element","newShape","nodeName","src","href","shapeElement","pathStr","checkPath","exitGroup","defColorStyle","fillOpacity","shapes","sizes","PointLayer","point_classCallCheck","point_possibleConstructorReturn","point_getPrototypeOf","_config$offset","offsetX","offsetY","point_slicedToArray","maxSize","generateDataPoints","point_toConsumableArray","drawFn","getMarkId","_maxSize","_getPlotMeasurement2","widthMetrics","heightMetrics","offsetXValues","offsetYValues","measurementConf","getMeasurementConfig","widthSpan","heightSpan","distanceLimit","drawRects","barEnterFn","transitionBars","selTransition","positionRetriever","isNegativeVal","barBasePos","resolveDimByField","axesInfo","spaceType","sizeEncoding","sizeConfig","sizeValue","enterSpace","minVal","maxVal","diffPx","minDomVal","_positionRetriever$ty2","bar_helper_slicedToArray","resolveDimensions","_resolveDimByField","enterWidth","enterX","xPos","_resolveDimByField2","enterHeight","BarLayer","bar_classCallCheck","bar_possibleConstructorReturn","bar_getPrototypeOf","_plotPadding","_plotSpan","bar_get","getTranslatedPoints","normalizedDataArr","clipElement","clipPathElement","bar_slicedToArray","barWidthMetrics","barHeightMetrics","barWidthOffsets","barHeightOffsets","barWidth","barWidthOffset","barHeight","barHeightOffset","uniqueFieldType","pointFound","bar_toConsumableArray","p2","tick_renderer","ticksEnter","angle0Axis","angle0V","angles0","_angles2","_layerInst$encodingFi","_config$span","xSpan","ySpan","x0Px","TickLayer","drawTicks","AREA_LAYER","ARC_LAYER","LINE_LAYER","TEXT_LAYER","POINT_LAYER","BAR_LAYER","TICK_LAYER","SIMPLE_LAYER","BASE_LAYER","sanitizeEncoding","layerFactory","compositeLayers","factoryObj","setLayerRegistry","reg","_layerRegistry","getSerializedConf","serializedDefs","defs","unitLayerDef","sDef","parseLayerDefinition","layerType","strs","layer_factory_toConsumableArray","getLayerInstance","layerConstructor","getLayerClass","composeLayers","sanitizeLayerConfig","DEFAULT_LAYERS","defaults_defineProperty","_DEFAULT_LAYERS","LAYER_TYPES","local_options","local_options_defineProperty","_CONFIG$ROWS$COLUMNS$","SimpleGroup","Variable","ComposedVars","composed_vars_classCallCheck","composed_vars_possibleConstructorReturn","composed_vars_getPrototypeOf","vars","_vars","_data","member","getMinDiff","SimpleVariable","simple_var_classCallCheck","simple_var_possibleConstructorReturn","simple_var_getPrototypeOf","oneVar","_oneVar","dtFormat","dateFormat","fieldDef","minimumConsecutiveDifference","varInst","convertToVar","datamodel","transformFields","field_sanitizer_slicedToArray","normalizedFields","normalizeFields","norFields","orderFields","fieldArray","temporalArr","categoricalArr","fieldList","numOfMeasures","allDimensions","field_sanitizer_toConsumableArray","temporal","categorical","rowsInfo","columnsInfo","rowDimensions","rowMeasures","rowTemporalFields","rowCategoricalFields","columnDimensions","columnMeasures","columnTemporalFields","columnCategoricalFields","VisualEncoder","_fieldInfo","_axisFrom","_headerFrom","__headerFrom","axisFrom","_getHeaderAxisFrom2","visual_encoder_slicedToArray","getHeaderAxisFrom","rowHeader","rowAxis","_getHeaderAxisFrom4","colHeader","colAxis","headerFrom","scaleMaps","dataTypeScaleMap","generateAxisFromMap","axisType","axesCreators","facetFields","axisKey","groupAxes","currentAxes","cacheMaps","commonAxisKey","getAxisKey","axisConfig","getAxisConfig","axisInfo","axisOrientation","rowIndex","columnIndex","rawUserAxisConfig","userAxisConfig","_rotationLock","createSimpleAxis","Cls","sanitizeIndividualLayerConfig","encodingConfigs","getIndex","arrIndex","CartesianEncoder","geomCellAxes","projections","rowFields","columnFields","geomCell","xAxes","yAxes","lock","unlock","units","1","rIdx","unitsArr","_loop2","cIdx","len2","encodingDomains","getDataDomain","axisTypeIndex","typeOfField","_resolver$axes","axesArr","adjustedDomain","typeOfAxis","alignZeroLine","getAdjustedDomain","y1ratio","y2ratio","allSameSign","currentFieldName","sortingOrder","facets","counter","primaryFacets","secondaryFacets","primaryFields","secondaryFields","primaryLen","secondaryLen","projArr","primaryField","secondaryField","facet","existIndex","axisFromIndex","cartesian_encoder_get","cartesian_encoder_getPrototypeOf","groupedModel","encodingObj","retriveDomainFromData","layerArray","serializedLayers","userLayerConfig","layerConfig","retinalConfig","colField","colFieldName","rowField","configs","rowFieldName","rowFieldType","getDefaultMark","colFieldType","defConfigs","layerConfigs","getLayerConfFromFields","colFields","encodingArr","encoder_helper_toConsumableArray","colFieldExist","rowFieldExist","layerConf","mergedLayerConf","serializedLayerConfig","cartesian_encoder_toConsumableArray","axesCls","polar_encoder_defineProperty","_axesCls","PolarEncoder","pieAxes","axesObj","matrixLayers","resolverAxes","varInstances","encType","userConfig","domainProps","matrixInstance","unitDomains","setRadiusFactor","sizeField","retinalFields","_context$axes","sizeFieldIndex","sizeMultiplier","getSizeMultiplier","sizeAxisDomain","encodingFields","sanitizedRows","sanitizedColumns","polar_encoder_get","polar_encoder_getPrototypeOf","sanitizedFields","typeIndex","fieldSet","polar_encoder_toConsumableArray","layerEncoding","sanitizedConfig","angleField","angle0Field","RetinalEncoder","newAxes","createRetinalAxis","fieldProps","getAxisType","isDistributionEqual","group_utils_toConsumableArray","rowType","initializeCacheMaps","cellMap","xAxesMap","yAxesMap","entryCellMap","exitCellMap","headerCreator","fieldHeaders","TextCell","getHeaderText","rowLength","getEncoder","encoder","hasPolarEncodings","userAxisFromConfig","group_utils_slicedToArray","firstField","secondField","firstFieldType","secondFieldType","setFacetsAndProjections","_encoder$simpleEncode","simpleEncoder","getFacetsAndProjections","group_utils_defineProperty","getBorders","matrices","showRowBorders","showColBorders","showValueBorders","valueMatrix","_rows","leftRows","rightRows","_columns","topColumns","bottomColumns","_encoder$fieldInfo","allDimensionLength","allMeasuresLength","allTemporalFieldsLength","getRowBorders","borders","getColumnsBorders","getValueBorders","borderTypeRow","borderTypeCol","sortFacetFields","facetName","action_behaviour_map_defineProperty","ACTIONS","sanitizeLayerDef","sanitizedDefs","sConf","unionDomainFromLayers","layerAxisIndex","domainValues","layerDomain","fieldDomain","encodingDomain","fieldStr","domain1","renderLayers","_lifeCycleManager","notify","orderedLayers","layerParentGroup","layerDepOrder","getDependencyOrder","dependencyOrder","visited","visit","_layerDepOrder","_timeDiffs","getLayersBy","searchBy","removeLayersBy","createRenderPromise","_renderedPromise","_renderedResolve","radiusAxes","getRadiusRange","GRID_BAND","GRID_LINE","getGridLayerDefinitions","getDefaultVisibilty","getLayerDefinition","_definition","_axes","_encoding","gridLines","gridBands","gridLineColor","zeroLineColor","gridBandColor","isLinearScale","grid_lines_defineProperty","isNegativeDomain","dimensionSubTypes","getValidSubtype","attachDataToGridLineLayers","_gridLines","_gridBands","gridLayerData","getGridLayerData","gridData","jsonData","_jsonData$push","grid_lines_toConsumableArray","trackerClassName","arcLayerClassName","sideEffectClassName","src_local_options","src_local_options_defineProperty","_CONFIG$LAYERDEFS$TRA","cachedData","local_options_toConsumableArray","oldData","src_listener_map_slicedToArray","fieldsVal","removeExitLayers","layersMap","markSet","colIndex","listenerInf","hasPlotSpan","_ref5","temporalFields","filteredFields","_ref6","_ref7","_ref8","_ref9","_ref10","_timeDiffsByField","createGridLineLayer","vuConf","_layerDeps","atomicDef","_ref11","_ref12","transformDataModels","transformVal","_ref15","_ref16","layerAxisIndexVal","_layerAxisIndex","axesVal","lyr","disableUpdate","attachDataToLayers","transformedDataModels","dataSource","enableUpdate","_dimensionMeasureMap","getDimensionMeasureMap","retinalEncodingsAndMeasures","_layer$encodingFields","shapeField","_retinalEncodingsAndM","src_helper_toConsumableArray","attachAxisToLayers","axisInf","props_defineProperty","_PROPS","createSelectionSet","originalData","attachPropagationListener","firebolt_helper_slicedToArray","dispatchQueuedSideEffects","firebolt_helper_toConsumableArray","clearActionHistory","payloadGenerator","brush","selectionDataModel","propPayload","getRangeFromData","propCriteria","isDimension","payload_generator_toConsumableArray","__default","propagateValues","propagationFieldInf","propagationFields","sideEfffects","mergedModel","sourceUnit","sourceCanvas","parentAlias","propagationBehaviour","propFields","facetByFields","getModelWithFacetData","schema1","data1","schema2","data2","data_propagator_toConsumableArray","groupId","behaviourInstance","propagationConf","sourceBehaviour","enabled","propConf","propInf","UnitFireBolt","src_firebolt_classCallCheck","firebolt_possibleConstructorReturn","firebolt_getPrototypeOf","firebolt_assertThisInitialized","unitId","aliasName","propagationSourceCanvas","sourceUnitId","sourceSideEffects","sideEffectInstances","actionOnSource","mappedEffects","se","sideEffectChecker","enabledFn","payloadFn","sourceIdentifierFields","sourceBehaviours","firebolt_get","VisualUnit","visual_unit_classCallCheck","visual_unit_defineProperty","lifeCycleManager","_gridLinesSelection","_gridBandsSelection","_layerNamespaces","_transformedDataModels","localOptions","_firebolt","_rootSvg","class","renderGridLineLayers","gridLineParentGroup","_entry","grid_lines_slicedToArray","parentGroupClass","_sideEffectGroup","createSideEffectGroup","initSideEffects","rootSvg","_this$parentContainer","parentContainerInf","layerDefinition","layerDefinitions","components","layerIndex","startIndex","visual_unit_toConsumableArray","layersArr","_layersArr","markId","defArr","getLayerFromDef","existingLayer","instanceArr","instanceValues","layerdeps","depArr","resolveEncodingTransform","resolvable","getLayerAxisIndex","_layer$config","specificField","encodingField","stateStore","calculateDomainListener","parentModel","dimValue","getNearestDimensionalValue","entryVal","pointInf","getMarkInfFromLayers","markInf","parsedIdentifiers","transposeArray","getPointsFromIdentifiers","visual_unit_construct","getFieldNames","fields1","matrix_model_toConsumableArray","createSelectedDataModel","uniqueKeyGenerator","keyArray","nextDepthUniqueValues","projectRows","allColumnProjections","rowProjections","optionalProjections","_getFieldNames2","matrix_model_slicedToArray","projFieldNames","colProjFieldNames","pushToMatrix","valueCellCreator","_matrix$rowIndex","facetInfo","colProjections","rowProj","projIdx","_getFieldNames4","rowProjFieldNames","projectedDm","formatKeys","formatterList","rKeys","createValueCells","suppliedLayers","GeomCell","horizontalAxis","verticalAxis","datamodelTransform","layerConfigArr","getLayerConfig","normalizedColumns","normalizedRows","allFacets","cell_creator_toConsumableArray","rowFacets","colFacets","facetField","geomCellKey","getCellKey","columnId","updateCells","facetKey","createAxisCells","currObj","axisInst","_axisInst$config","AxisCell","BlankCell","headerPlaceholderGn","selectionObj","selectionKeys","keySet","textCells","createTextCells","textCell","generatePlaceholders","facetsAndProjections","encoders","valuesMatrix","rowKeys","columnKeys","takeAxisFrom","takeHeaderFrom","axisPlaceholderGn","selObj","axesMatrix","selObjProp","axesForDraw","rowsPrimary","rowPrime","rowsSecondary","rowSec","columnsPrimary","colPrime","columnsSecondary","colSec","_selectionObj","section","hContext","getAxisFields","fieldHolder","ac","computeMatrices","componentRegistry","globalConfig","autoGroupBy","otherEncodings","matrixGnContext","getCellDef","isRowSizeEqual","isColumnSizeEqual","colCells","rowCells","resetSimpleAxes","newCacheMap","valueCellContext","serializeLayerConfig","extractFields","layerFields","_ref4","flattenArray","getFieldsFromSuppliedLayers","suppliedLayerConfig","aggregationFns","nearestAggFns","resolvedAggFns","valueMatrixInfo","getMatrixModel","rowDataModels","colProj","firstLevelRowKeys","_rowDataModels","rowFacetFieldNames","selectedDataModel","newProjectedDataModels","_rowDataModels2","colFacetNames","firstLevelColumnKeys","dme","rIndex","cIndex","rawFormat","transposedColKeys","sortDmTemporalFields","valueCellsCreator","placeholder","_mutateAxesFromMap","mutateAxesFromMap","xAxisSet","yAxisSet","axisId","createUnits","_generateMatrices","generateMatrices","leftHeaders","topHeaders","bottomHeaders","rightHeaders","cell_creator_slicedToArray","leftFacets","rightFacets","rowPriority","colPriority","leftMatrix","rightMatrix","topMatrix","bottomMatrix","currentBottomLength","setAvailableSpace","rowMatrix","columnMatrix","RESOLVER_PROPS","MatrixResolver","matrix_resolver_classCallCheck","_registry","_layerConfig","_matrixLayers","_rowMatrix","_columnMatrix","_valueMatrix","_facets","_projections","_datamodelTransform","_units","_cacheMaps","maps","matrix_resolver_toConsumableArray","_horizontalAxis","_verticalAxis","matrixType","_this5","sideEffectRegistry","_this$dependencies","unitConfig","extractUnitConfig","globalStates","_this$getAllFields","retContext","getRetinalFieldsDomain","retinalEncoder","setCommonDomain","_this6","retinalAxes","updateModel","placeholders","bottomLeft","bottomRight","_this$dependencies3","showHeaders","matrix_resolver_slicedToArray","topCols","bottomCols","rowHeaders","blankCellCreator","footers","topLeft","topRight","ValueMatrix","matrixArr","value_matrix_classCallCheck","instancesById","cellValue","_instancesById","_matrix","_filterFn","rowWidth","currentRowWidth","getLogicalSpace","rowHeight","currentRowHeight","setMatrixInstances","_composition","createMatrices","matrixConfig","unsubscribeChangeListeners","sanitizeRetinalConfig","retinalConf","confValue","groupType","fieldSanitizer","setAxisAndHeaders","placeholderInfo","getMatrices","_groupedDataModel","createRetinalAxes","setDomains","cornerMatrices","createHeaders","metaData","border","unionUnitDomains","registerDomainChangeListener","visual_group_props_defineProperty","visual_group_props_PROPS","cellRegistry","VisualGroup","visual_group_classCallCheck","visual_group_possibleConstructorReturn","visual_group_getPrototypeOf","componentSubRegistry","visual_group_assertThisInitialized","_selection","createUnitState","visual_group_helper_slicedToArray","createLayerState","setupChangeListeners","variable","findInGroup","channel","group_utils_this","facetType","projType","getRetinalAxes","getSimpleAxes","_this$resolver$getAll","visual_group_defineProperty","existingRemoveSet","select_toConsumableArray","firebolt_action_behaviour_map_defineProperty","action_behaviour_map_actionBehaviourMap","propagationBehaviourMap","_propagationBehaviour","firebolt_behaviour_effect_map_defineProperty","firebolt_behaviour_effect_map_behaviourEffectMap","propagationSideEffects","_propagationSideEffec","SCALE_FUNCTIONS","VALUE","canvasAlias","rawVal","check","assembleModelFromIdentifiers","temp","src_firebolt_helper_toConsumableArray","LegendFireBolt","_Firebolt","legend_firebolt_classCallCheck","legend_firebolt_possibleConstructorReturn","legend_firebolt_getPrototypeOf","legend_firebolt_inherits","legend_firebolt_createClass","behaviourName","getCriteriaFromData","firebolt_physical_defineProperty","physical_physicalActions","boundingBox","gradientDimensions","axisScale","rangeShifter","drag_defineProperty","getSelectionCriteria","selectionBoxMeasure","drawingInfMeasure","subjectStartPoint","gradientDimension","legendGradContainer","legendSelGroup","enterFn","getMousePos","boundingClientRect","selection_box_drag_defineProperty","fadeOut","brighten","LegendHighlighter","legend_highlighter_classCallCheck","legend_highlighter_possibleConstructorReturn","legend_highlighter_getPrototypeOf","legendContainer","resetLogicalSpace","title","_title","ALIGN","DEFAULT_MEASUREMENT","LEGEND_TITLE","borderStyle","borderColor","bounds","upper","ICON_MAP","getScaleInfo","scaleType","steps","scaleFn","getInterpolatedArrayData","domainForLegend","scaleParams","requiredWidth","requiredHeight","upperBound","maxTickDiff","alignment","smartLabelCalc","minimumTickSize","_smartLabelCalc$getOr","isInteger","getcomputedArray","computationhelper","requiredMeasure","availableMeasure","currentTickValue","nextTickValue","measureParam","pixelPerTick","getInterpolatedData","recomputeSteps","getTickMeasure","_scaleParams$measures","interpolatedFn","tickValue","getDomainBounds","domainBounds","domainLeg","ele","legend_helper_defineProperty","getScaleFactor","SimpleLegend","simple_legend_classCallCheck","_metaData","_fieldName","_labelManager","_cells","defaultMeasurement","_computedStyle","legendBehaviours","_canvasAlias","getItemMeasures","_labelManager$getOriS","_this$measurement","effPadding","effBorder","effMargin","dataFromScale","titleSpace","getTitleSpace","titleHeight","titleWidth","labelSpaces","getLabelSpaces","_computeItemSpaces","computeItemSpaces","maxItemSpaces","textOrientation","itemSpaces","iconSpaces","maxIconWidth","labelSpace","itemSpace","iconSpace","newLabelWidth","titleSpaces","_this$measurement2","_this$config3","titleCreator","titleContainer","marginPosition","_this$config4","_this$measurement3","renderTitle","simple_legend_defineProperty","legendOrientation","position_config_defineProperty","_legendOrientation","datasets","itemContainerMeasures","getStepSpacesInfo","iconHeight","iconWidth","stepPadding","horizontal","vertical","positionConfig","_positionConfig","alignmentMap","_alignmentMap","itemStack","_itemStack","createLegendSkeleton","gradWidth","gradHeight","maxGradHeight","maxGradWidth","legendBody","legendItem","getItemContainers","legendInstance","positionObj","createItemSkeleton","_context$config","itemSkeleton","alignClass","applyItemStyle","measureType","stepColorCheck","_context$measurement","renderIcon","defaultIcon","DiscreteLegend","_getScaleInfo","discrete_legend_toConsumableArray","_field$schema","discrete_legend_defineProperty","discrete_legend_get","discrete_legend_getPrototypeOf","renderDiscreteItem","_context$measurement2","_item$icon","text-align","getGradientDomain","accumulator","currentValue","MAX_VALUE","MIN_VALUE","legendGradSvg","legendGradCont","linearGradient","makeLinearGradient","legendRect","GradientLegend","gradient_legend_toConsumableArray","gradient_legend_defineProperty","newAxis","axisSpace","axisDomainLength","_legendGradientSvg","gradient_legend_get","gradient_legend_getPrototypeOf","renderGradient","_createLegendSkeleton","StepLegend","step_legend_toConsumableArray","step_legend_defineProperty","lowerBounds","upperBounds","step_legend_get","step_legend_getPrototypeOf","stepData","renderStepItem","_context$measurement3","_item$icon2","_positionConfig$posit","PADDING","BORDER","MARGIN","TITLE_TEMPLATE_NOT_ALLOWED_TAGS","LEGEND_TYPE_MAP","constants_defineProperty","_LEGEND_TYPE_MAP","HORIZONTAL_CENTER","VERTICAL_CENTER","share","operators_construct","operators_toConsumableArray","strings","htmlCode","expLn","frag","createDocumentFragment","treeShakeNode","nodeType","Node","ELEMENT_NODE","tagName","_didIteratorError","_iteratorError","_step","_iterator","childNodes","err","canvasIterator","canvases","iteratorFn","cFn","canvas","visualGroup","_throwback","actionModel","ActionModel","action_model_classCallCheck","_registrableComponents","registerPropagationBehaviourMap","dissociateBehaviour","_len5","_key5","dissociateSideEffect","policy","registrableComponents","mergedPolicy","aliases","comp","*","propagationPayload","propagationCanvas","crossInteractionPolicy","TITLE_CONFIG","SUB_TITLE_CONFIG","maxLines","LAYOUT_ALIGN","canvas_local_options_defineProperty","_localOptions","prevDm","sanitizedDm","canvasOptions","_canvasOptions","titleConfig","subtitle","sub","subtitleConfig","LayoutComponent","layoutComponent_classCallCheck","_boundBox","_renderAt","_alignWith","_alignment","_componentName","_className","DummyComponent","newDimensions","renderAt","component","componentName","pagination","scrollBar","thickness","speed","legend","minHeight","minCharacters","verticalAlign","collapse","invalidValues","DEFAULT_WIDTH","DEFAULT_HEIGHT","DEFAULT_CLASS_NAME","NODE_PREFIX","DefinitionModel","definitionModel_classCallCheck","_host","host","_cut","cut","_ratioWeight","ratioWeight","_preferred","preferred","_lanes","lanes","_remainingHeight","_remainingWidth","remainingHeight","remainingWidth","getNodeId","_uid","yExtraSpace","smallestHeight","getCutType","smallestExtraHeightHorizontally","MAX_SAFE_INTEGER","containerHeight","hostHeight","xExtraSpace","smallestWidth","smallestExtraWidthVertically","containerWidth","hostWidth","createPlaceHolderComponent","placeComponent","definitionModel","leftOvercomponentRationWidth","isPreferred","isGridComponent","componentRatioWidth","leftHeight","leftWidth","_component$getLogical","componentHeight","componentWidth","firstLaneConfig","firstLane","secondLane","tree_classCallCheck","_parentCut","_this$_children","tree_toConsumableArray","parentCut","bound","nodeconfig","searchNode","childNode","nodeId","deleteSearchNode","LayoutModel","measurements","layout_model_classCallCheck","_measurements","_root","createTree","setBoundBox","addChildren","lane","allocateBoundingBox","totalWeight","carry","lastSibling","ratio","setHostSpatialConfig","setHostPosition","negotiateDimension","alteredDim","nonAlteredDim","cumultiveExtraSpaceAmt","childrenLength","extraSpaceAmt","computePosition","determineBoundBox","bb","_lastSibling$boundBox","_top","_left","_height","_width","_instance$parent$boun","setSpatialConfig","Utils","utils_createClass","isDOMElement","getID","getElement","findContainer","coordinate","removeDiv","divId","DataPoint","data_point_classCallCheck","DataParser","data_parser_classCallCheck","data_parser_createClass","defaultDataPointLogic","nodepoints","getnodePoints","datapoint","HTMLDataAdapter","_DataParser","html_data_classCallCheck","html_data_possibleConstructorReturn","html_data_getPrototypeOf","html_data_inherits","html_data_createClass","getCoordinates","html_data_get","Renderer","renderer_classCallCheck","renderer_createClass","initRenderer","__logicalTree","HTMLRenderer","_Renderer","html_renderer_classCallCheck","html_renderer_possibleConstructorReturn","html_renderer_getPrototypeOf","_coordinates","html_renderer_inherits","html_renderer_createClass","createhtml","mainDiv","html_renderer_get","parentDiv","createAndCustomiseParent","hasHost","createAndPositionDiv","html_renderer_objectSpread","div","coordinates","findNode","nodeID","renderer","renderHTML","DrawingManager","drawing_manager_classCallCheck","_componentMap","componentMap","_layoutClassName","layoutClassName","_renderer","drawing_manager_createClass","drawLayout","resolveAligment","componentData","alignWith","newNodeConfig","refNode","drawComponent","DefinitionManager","definition_manager_classCallCheck","_prioritySequence","_totalHeight","_totalWidth","_targetComponentMap","prepareTargetComponentMap","targetComponentMap","canvasComponent","tempDefModel","componentRef","getComponent","placeGridComponent","gridComponents","iscolumnPreffered","_placeComponent","rowpreffred","LayoutDef","layout_def_classCallCheck","_layoutDefinition","layout_def_createClass","addComponent","layoutDefinition","addMultipleComponent","componentArray","sanitizedDefinition","hostObj","hostID","childHost","resetComponentMap","LayoutManager","layout_manager_classCallCheck","_dimension","_skeletonType","skeletonType","_layoutDef","_drawingManager","_rootNodeID","con","resetNode","updateNode","compute","_layout","calLayOutDef","_context$dimension","layoutDef","prioritySequence","generateConfigModel","negotiate","broadcast","layoutComponents","componentArr","compo","removeElement","elemID","setupChangeListener","allOptions","_allOptions","canvas_helper_toConsumableArray","nameSpaceProps","equalityChecker","option","updateChecker","dispatchProps","_cachedProps","notifyAnimationEnd","centerMatrix","layout","viewInfo","viewMatricesInfo","promises","cellArr","lifeCycle","animDonePromises","animationDone","applyInteractionPolicy","interactionPolicy","_interactionPolicy","_crossInteractionPolicy","unitFireBolt","changeBehaviourStateOnPropagation","changeSideEffectStateOnPropagation","createLayoutManager","src_options","minUnitWidth","minUnitHeight","oldConf","fixScrollBarConfig","VIEW_INDEX","ROW_MATRIX_INDEX","2","COLUMN_MATRIX_INDEX","HEIGHT","ROW_ROOT","COLUMN_ROOT","VERTICAL","HORIZONTAL","GenericLayout","generic_layout_classCallCheck","_matrices","_centerMatrix","_mountPoint","DEFAULT_CONFIGURATION","grid_layout_defaults_defineProperty","_DEFAULT_CONFIGURATIO","_FieldNames$BORDER","DEFAULT_MEASUREMENTS","_DEFAULT_MEASUREMENTS","findInPage","page","combineMatrices","isTransposed","joinedMatrix","utils_toConsumableArray","rowData","computeLogicalSpace","maxMeasures","_config$isTransposed","unitMeasures","_getMeasureInfo","getMeasureInfo","firstMeasure","secondMeasure","minMeasures","getMinMeasures","_logicalSpace","utils_defineProperty","valueItem","maxMeasure","firstMeasureValue","secondMeasureValue","valueArray","_item$space","fMeasure","sMeasure","minSecondMeasure","createMatrixEachLevel","_arr$i","extraCellsRemover","beg","distribution","extraCellLengths","VisualMatrix","visual_matrix_classCallCheck","_lastLevelKey","_primaryMatrix","_secondaryMatrix","_maxMeasures","_availableSpace","_layoutMatrix","_tree","_createTree2","matrixTree","lastLevelKey","layoutMatrix","primaryMatrix","secondaryMatrix","breakPage","primaryMatrixLength","newMatrix","keyLength","heightMeasures","populateMaxMeasures","widthMeasures","calculateDepth","viewableMatrix","createViewPortMatrix","viewableMeasures","redistributeSpaces","childDepth","createMatrixInstances","matrixInfo","breakPointer","_breakPointer","brokenMatrix","breakMatrix","nextLevel","removeExtraCells","RowVisualMatrix","row_matrix_classCallCheck","row_matrix_possibleConstructorReturn","row_matrix_getPrototypeOf","maxHeights","maxWidths","matrixInst","cellDimOptions","matrixIndex","_this2$getCellDimensi","getCellDimensions","widths","rowHeights","columnWidths","primary","secondary","begCellLen","endCellLen","remainingAvailWidth","cWidths","conditions","maxPrioritySpace","availableWidth","currentWidth","prioritySpace","logicalWidths","getPriorityDistribution","mWidth","mHeight","redistributeViewSpaces","computeViewableSpaces","rHeights","gutter","spaceTakenByColumn","spaces","getDistributedHeight","heightWithoutGutter","distSum","gutterSum","availableHeight","colLen","distHeight","borderWidth","colHeight","colWidth","heights","ColumnVisualMatrix","column_matrix_classCallCheck","column_matrix_possibleConstructorReturn","column_matrix_getPrototypeOf","heightDist","divider","spaceTakenByRow","getDistributedWidth","layoutConfig","distWidth","rowLen","oldLogicalSpace","heightDistribution","getMatrixMeasurement","setViewSpaces","pointerType","viewSpaces","pointer","computations_defineProperty","paginationDetailsMap","scrollType","paginationMeasureGetter","relatedMaxMeasure","getMatrixMeasureForPagination","measureDetails","actualMeasure","scrollInfo","getMatrixHeightDetails","columnMatrixWidth","_getHeightRequiredByC","getHeightRequiredByColMatrix","maxColumnMatrixHeight","columnViewSpace","getViewableSpaces","columnPointer","columnMatrixHeight","maxHeightAvailableForRowMatrix","rowMatrixHeight","bufferCondition","isScroll","getActualBufferFromConfig","computations_slicedToArray","getBufferFromCondition","currentBufferType","horizontalBuffer","verticalBuffer","computeLayoutMeasurements","_getMatrixWidthDetail","getMatrixWidthDetails","_layout$config3","rowMatrixWidth","maxRowMatrixWidth","maxWidthAvailableForColumnMatrix","_getMatrixHeightDetai","_getActualBufferFromC","rowViewableSpaces","columnViewableSpaces","setValueMatrixMeasurements","computations_toConsumableArray","rowWidthsPrimary","rowWidthsSecondary","columnHeightsPrimary","columnHeightsSecondary","measureSum","total","GridLayout","layout_classCallCheck","layout_possibleConstructorReturn","layout_getPrototypeOf","_layoutId","_viewInfo","defaultViewInfo","_scrollInfo","generateVisualMatrices","begColCells","endColCells","gutterSpace","layout_helper_slicedToArray","_center","_bottom","layout_helper_toConsumableArray","RowMatrix","ColumnMatrix","layout_get","_computeLayoutMeasure","setViewInformation","pageNumber","pageType","totalPages","layout_defineProperty","renderGrid","currentPage","maxRowHeight","maxColWidth","rowPointer","getViewMatrices","rowMatrices","getViewableMatrices","columnMatrices","centralMatrixPointer","rowMatrixLen","columnMatrixLen","rowPages","columnPages","layoutDimensions","getViewMeasurements","_layout$config","rowSpaces","colSpaces","rightWidth","topHeight","bottomHeight","centerHeight","centerWidth","viewWidth","viewHeight","actualCenterMeasures","totalMeasures","unitHeights","unitWidths","borderMap","border_helper_defineProperty","_borderMap","specificBorderApplier","borderTypes","showBorders","borderInfo","borderType","applySpecificBorder","applyBorders","borderApplierFn","borderApplier","borderMapVal","orderMaker","nestByStack","updateArr","optionalParams","currStack","prevStack","arrVal","stackVal","currElemIndex","newElem","arrElem","returnArr","spanCalculator","isNull","maskCreator","_nestByStack","viewMatrix","hierarchy","_nestByStack2","spanGenerator","spans","ridx","currSpan","getOrder","isReverse","matrixSpanGeneratorMap","span_maker_defineProperty","_matrixSpanGeneratorM","orderGetter","viewMatrixMaker","spanMaker","matrixSpanGenerator","spanApplier","cellCounter","spaceAllocationDueToSpan","cumulativeWidth","spanApplierMap","_spanApplierMap","TransactionSupport","INTERFACE_IMPl","CLASSPREFIX","HEADER","DATA","AXES","FACET_BY_FIELDS","FIELDS","TRANSFORM","LAYER_DEF","CONFIG","DETAIL_FIELDS","AXIS","GEOM","BLANK","SimpleCell","simple_cell_classCallCheck","enums_defaults_defineProperty","_DEFAULT_CONFIG","_CONSTANTS$MARGIN","CONSTANTS","DEFAULT_PROPS","minSpacing","src_props_defineProperty","visual_cell_src_props_PROPS","caption","smartText","axis_cell_classCallCheck","axis_cell_possibleConstructorReturn","axis_cell_getPrototypeOf","_availHeight","_availWidth","axis_cell_assertThisInitialized","computeAxisSpace","logicalWidth","logicalHeight","spaceFixer","_axis$getLogicalSpace","actualWidth","actualHeight","_axis$config2","wrapperDiv","blank_cell_classCallCheck","blank_cell_possibleConstructorReturn","blank_cell_getPrototypeOf","blank_cell_assertThisInitialized","setSmartText","_context$minSpacing","minHeightSpace","minWidthSpace","paddedHeight","paddedWidth","text_cell_classCallCheck","text_cell_possibleConstructorReturn","text_cell_getPrototypeOf","text_cell_assertThisInitialized","computeTextSpace","_context$minSpacing2","minText","_minTextSpace","smartSpace","textAlign","vAlign","_this$smartText","translation","middle","geom_cell_classCallCheck","geom_cell_possibleConstructorReturn","geom_cell_getPrototypeOf","_unit","_datamodel","_facetByFields","_transform","_caption","geom_cell_assertThisInitialized","lockModel","unlockModel","captionSpace","computeGeomSpace","getCaptionSpace","captionDom","DEFAULT_PLACEHOLDERS","src_defaults_defineProperty","_DEFAULT_PLACEHOLDERS","resolveTitleSubTitleContent","rawContent","escapeHTML","htmlEscapes","&","<",">","\"","'","/","createHeading","prevCell","cellType","_minTickDiff","legendInitializer","legendConfig","prevLegends","legends","headerHeight","legendInfo","legendCreator","LegendCls","dataset","scaleProps","_scale$config","stepMapper","dataInfo","legendMeasures","titleText","getGroupByData","setLegendMeasures","MuzeComponent","_this$boundBox","HeaderComponent","headerComponent_classCallCheck","headerComponent_possibleConstructorReturn","headerComponent_getPrototypeOf","setParams","cont","renderHeader","LegendComponent","legendComponent_classCallCheck","legendComponent_possibleConstructorReturn","legendComponent_getPrototypeOf","legendSpace","sectionComponents","_this$params$config","legendMount","legWidth","legHeight","sections","currHeight","currWidth","leg","legendHeight","legendWidth","renderLegend","_defaultAlignmentHelp","defaultAlignmentHelper","arrowSizeMap","getUnitPositions","totalLength","viewLength","currentLen","unitPosition","createScrollBarArrow","createScrollBarRect","mover","applyScrollMouseDownAction","moverRect","scrollMaker","_mover$node$getBoundi","_rect$node$getBoundin","rectX","rectY","changeMoverPosition","registerListenerOnArrow","arrowType","_components","isTouchDevice","applyMoverDrag","moverStartPos","rectStartPos","distanceMoved","actualPosition","pageXOffset","pageYOffset","applyRectClick","emptyScrollAreaClick","manager","unitPositions","ScrollMaker","scroll_maker_classCallCheck","_attachedScrollAction","_unitPositions","scroll_maker_createClass","scrollTo","scrollDeltaTo","createScroll","scrollBarContainer","scrollContainerHelper","attachScrollAction","externalScrollAction","detachScrollAction","scrollMakerMap","_ScrollMaker","HorizontalScrollMaker","horizontal_scroll_maker_classCallCheck","horizontal_scroll_maker_possibleConstructorReturn","horizontal_scroll_maker_getPrototypeOf","horizontal_scroll_maker_inherits","horizontal_scroll_maker_createClass","horizontal_scroll_maker_get","prevArrow","nextArrow","_this$logicalSpace","scrollBarWithouArrowLength","_scrollBarWithouArrowLength","_this$_components$mov","positionAdjuster","newPosition","currentPos","_this$_components$mov2","moverPos","movedViewLength","performAttachedScrollFunction","delta","_this$_components$mov3","scrollPercentage","movement","VerticalScrollMaker","vertical_scroll_maker_classCallCheck","vertical_scroll_maker_possibleConstructorReturn","vertical_scroll_maker_getPrototypeOf","vertical_scroll_maker_inherits","vertical_scroll_maker_createClass","vertical_scroll_maker_get","ScrollComponent","scroll_component_classCallCheck","scrollBarComponentConfig","scroll_component_possibleConstructorReturn","scroll_component_getPrototypeOf","unitIndex","sanitizedUnitIndex","externalAction","MatrixComponent","matrix_component_classCallCheck","matrix_component_possibleConstructorReturn","matrix_component_getPrototypeOf","_this$params$config$s","containerForMatrix","applyScroll","_cellSpanMaker","cellSpanMaker","_matrixSpanGenerator","renderTable","applySpans","applier","renderPlaceholders","renderMatrix","applyScrollAction","scollDistance","GridComponent","grid_component_classCallCheck","grid_component_possibleConstructorReturn","grid_component_getPrototypeOf","_this$component$viewI","matrixDim","matrixName","updateWrapper","matrixWrapper","allComponents","_scrollBarManager","wheelDeltaX","wheelDeltaY","scrollBarManager","triggerScrollBarAction","movedView","scrollActionApplier","_this$component$0$0$b","sanitizeGrid","headerMap","headerCell","configType","createHeaderWrapper","headerType","layoutManager","renderDetails","_headerMap$headerType","headerConfig","component_wrapper_maker_objectSpread","wrapperParams","existingComponent","createScrollBarWrapper","scrollBarType","grid","_scrollBarMap$scrollB","scrollBarMap","layoutBasedMeasure","viewMeasure","rowAlign","colAlign","componentWrapperMaker","createLegendWrapper","legendWrapper","gridLayoutWrapper","verticalScrollBar","horizontalScrollBar","ScrollManager","scroll_manager_classCallCheck","_scrollBarComponents","_attachedComponents","scroll_manager_createClass","scrollBarComponents","attachedComponents","performScrollAction","getRenderDetails","_mount$getBoundingCli","heightAttr","widthAttr","visGroup","_visGroup$placeholder","legendPosition","layoutArrangement","arrangeComponents","_titleLayouts","titleLayouts","component_resolver_defineProperty","legendLayouts","titlePosition","subtitlePosition","availableHeightForCanvas","availableWidthForCanvas","_createHeaders","canvasHeight","canvasWidth","isSubtitle","headerOptions","_createHeading","createLegend","getLegendSpace","mountSpace","componentIndexes","componentNames","3","4","5","renderLayout","_layoutManager","gridLayout","compWrappers","componentWrappers","gridWrapper","createScrollManager","horizontalScrollWrapper","verticalScrollWrapper","hScrollBar","vScrollBar","componentWrapper","deleteElementName","deleteElementId","removeComponent","registerComponents","attachScrollListener","defaultInteractionPolicy","isMeasure","group_firebolt_toConsumableArray","getFieldsFromChannel","colDim","unitColFacets","equals","unitRowFacets","propagateWith","defaultCrossInteractionPolicy","propagationCanvasAlias","propagationUnit","GroupFireBolt","group_firebolt_classCallCheck","group_firebolt_possibleConstructorReturn","group_firebolt_getPrototypeOf","behaviouralAction","validFields","APP_INITIAL_STATE","app","Canvas","globalDependencies","canvas_classCallCheck","canvas_possibleConstructorReturn","canvas_getPrototypeOf","canvas_defineProperty","canvas_assertThisInitialized","initedComponents","initCanvas","createGroupState","_VisualGroup$getState2","canvas_helper_slicedToArray","localState","register","prepareLayout","triggerReflow","setLayoutInfForUnits","getBoundBox","getRootNodeId","setLabelRotationForAxes","rotationVal","getAxes","initialSettings","regEntry","COMPONENTS","SUBREGISTRIES","regObj","globalCache","defaultRegistry","overrideRegistryDefinitions","overrideRegistry","muze","_transactor2","muze_slicedToArray","env","globalStore","componentSubRegistryDef","settings","withSettings","enableChainedTransaction","transactionModel","transactionEndpoint","transactionItems","Smartlabel","SideEffects","standards","Behaviours","pkg","operators","utils","lookupWhat","lookupDetails","lookupTarget","deps"],"mappings":"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","file":"muze.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"muze\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"muze\"] = factory();\n\telse\n\t\troot[\"muze\"] = factory();\n})(window, function() {\nreturn "," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 7);\n","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"DataModel\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"DataModel\"] = factory();\n\telse\n\t\troot[\"DataModel\"] = factory();\n})(window, function() {\nreturn "," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 1);\n","const DataModel = require('./export');\n\nmodule.exports = DataModel.default ? DataModel.default : DataModel;\n","/**\n * DataFormat Enum defines the format of the input data.\n * Based on the format of the data the respective adapter is loaded.\n *\n * @readonly\n * @enum {string}\n */\nconst DataFormat = {\n FLAT_JSON: 'FlatJSON',\n DSV_STR: 'DSVStr',\n DSV_ARR: 'DSVArr',\n AUTO: 'Auto'\n};\n\nexport default DataFormat;\n","/**\n * DimensionSubtype enum defines the sub types of the Dimensional Field.\n *\n * @readonly\n * @enum {string}\n */\nconst DimensionSubtype = {\n CATEGORICAL: 'categorical',\n TEMPORAL: 'temporal',\n GEO: 'geo',\n BINNED: 'binned'\n};\n\nexport default DimensionSubtype;\n","/**\n * MeasureSubtype enum defines the sub types of the Measure Field.\n *\n * @readonly\n * @enum {string}\n */\nconst MeasureSubtype = {\n CONTINUOUS: 'continuous'\n};\n\nexport default MeasureSubtype;\n","/**\n * FieldType enum defines the high level field based on which visuals are controlled.\n * Measure in a high level is numeric field and Dimension in a high level is string field.\n *\n * @readonly\n * @enum {string}\n */\nconst FieldType = {\n MEASURE: 'measure',\n DIMENSION: 'dimension'\n};\n\nexport default FieldType;\n","/**\n * Filtering mode enum defines the filering modes of DataModel.\n *\n * @readonly\n * @enum {string}\n */\nconst FilteringMode = {\n NORMAL: 'normal',\n INVERSE: 'inverse',\n ALL: 'all'\n};\n\nexport default FilteringMode;\n","/**\n * Group by function names\n *\n * @readonly\n * @enum {string}\n */\nconst GROUP_BY_FUNCTIONS = {\n SUM: 'sum',\n AVG: 'avg',\n MIN: 'min',\n MAX: 'max',\n FIRST: 'first',\n LAST: 'last',\n COUNT: 'count',\n STD: 'std'\n};\n\nexport default GROUP_BY_FUNCTIONS;\n","/**\n * Creates a JS native date object from input\n *\n * @param {string | number | Date} date Input using which date object to be created\n * @return {Date} : JS native date object\n */\nfunction convertToNativeDate (date) {\n if (date instanceof Date) {\n return date;\n }\n\n return new Date(date);\n}\n/**\n * Apply padding before a number if its less than 1o. This is used when constant digit's number to be returned\n * between 0 - 99\n *\n * @param {number} n Input to be padded\n * @return {string} Padded number\n */\nfunction pad (n) {\n return (n < 10) ? (`0${n}`) : n;\n}\n/*\n * DateFormatter utility to convert any date format to any other date format\n * DateFormatter parse a date time stamp specified by a user abiding by rules which are defined\n * by user in terms of token. It creates JS native date object from the user specified format.\n * That native date can also be displayed\n * in any specified format.\n * This utility class only takes care of format conversion only\n */\n\n/*\n * Escapes all the special character that are used in regular expression.\n * Like\n * RegExp.escape('sgfd-$') // Output: sgfd\\-\\$\n *\n * @param text {String} : text which is to be escaped\n */\nRegExp.escape = function (text) {\n return text.replace(/[-[\\]{}()*+?.,\\\\^$|#\\s]/g, '\\\\$&');\n};\n\n/**\n * DateTimeFormatter class to convert any user format of date time stamp to any other format\n * of date time stamp.\n *\n * @param {string} format Format of the date given. For the above date,\n * 'year: %Y, month: %b, day: %d'.\n * @class\n */\n/* istanbul ignore next */ function DateTimeFormatter (format) {\n this.format = format;\n this.dtParams = undefined;\n this.nativeDate = undefined;\n}\n\n// The identifier of the tokens\nDateTimeFormatter.TOKEN_PREFIX = '%';\n\n// JS native Date constructor takes the date params (year, month, etc) in a certail sequence.\n// This defines the sequence of the date parameters in the constructor.\nDateTimeFormatter.DATETIME_PARAM_SEQUENCE = {\n YEAR: 0,\n MONTH: 1,\n DAY: 2,\n HOUR: 3,\n MINUTE: 4,\n SECOND: 5,\n MILLISECOND: 6\n};\n\n/*\n * This is a default number parsing utility. It tries to parse a number in integer, if parsing is unsuccessful, it\n * gives back a default value.\n *\n * @param: defVal {Number} : Default no if the parsing to integer is not successful\n * @return {Function} : An closure function which is to be called by passing an the value which needs to be parsed.\n */\nDateTimeFormatter.defaultNumberParser = function (defVal) {\n return function (val) {\n let parsedVal;\n if (isFinite(parsedVal = parseInt(val, 10))) {\n return parsedVal;\n }\n\n return defVal;\n };\n};\n\n/*\n * This is a default number range utility. It tries to find an element in the range. If not found it returns a\n * default no as an index.\n *\n * @param: range {Array} : The list which is to be serached\n * @param: defVal {Number} : Default no if the serach and find does not return anything\n * @return {Function} : An closure function which is to be called by passing an the value which needs to be found\n */\nDateTimeFormatter.defaultRangeParser = function (range, defVal) {\n return (val) => {\n let i;\n let l;\n\n if (!val) { return defVal; }\n\n const nVal = val.toLowerCase();\n\n for (i = 0, l = range.length; i < l; i++) {\n if (range[i].toLowerCase() === nVal) {\n return i;\n }\n }\n\n if (i === undefined) {\n return defVal;\n }\n return null;\n };\n};\n\n/*\n * Defines the tokens which are supporter by the dateformatter. Using this definitation a value gets extracted from\n * the user specifed date string. This also formats the value for display purpose from native JS date.\n * The definition of each token contains the following named properties\n * {\n * %token_name% : {\n * name: name of the token, this is used in reverse lookup,\n * extract: a function that returns the regular expression to extract that piece of information. All the\n * regex should be gouped by using ()\n * parser: a function which receives value extracted by the above regex and parse it to get the date params\n * formatter: a formatter function that takes milliseconds or JS Date object and format the param\n * represented by the token only.\n * }\n * }\n *\n * @return {Object} : Definition of the all the supported tokens.\n */\nDateTimeFormatter.getTokenDefinitions = function () {\n const daysDef = {\n short: [\n 'Sun',\n 'Mon',\n 'Tue',\n 'Wed',\n 'Thu',\n 'Fri',\n 'Sat'\n ],\n long: [\n 'Sunday',\n 'Monday',\n 'Tuesday',\n 'Wednesday',\n 'Thursday',\n 'Friday',\n 'Saturday'\n ]\n };\n const monthsDef = {\n short: [\n 'Jan',\n 'Feb',\n 'Mar',\n 'Apr',\n 'May',\n 'Jun',\n 'Jul',\n 'Aug',\n 'Sep',\n 'Oct',\n 'Nov',\n 'Dec'\n ],\n long: [\n 'January',\n 'February',\n 'March',\n 'April',\n 'May',\n 'June',\n 'July',\n 'August',\n 'September',\n 'October',\n 'November',\n 'December'\n ]\n };\n\n const definitions = {\n H: {\n // 24 hours format\n name: 'H',\n index: 3,\n extract () { return '(\\\\d+)'; },\n parser: DateTimeFormatter.defaultNumberParser(),\n formatter (val) {\n const d = convertToNativeDate(val);\n\n return d.getHours().toString();\n }\n },\n l: {\n // 12 hours format\n name: 'l',\n index: 3,\n extract () { return '(\\\\d+)'; },\n parser: DateTimeFormatter.defaultNumberParser(),\n formatter (val) {\n const d = convertToNativeDate(val);\n const hours = d.getHours() % 12;\n\n return (hours === 0 ? 12 : hours).toString();\n }\n },\n p: {\n // AM or PM\n name: 'p',\n index: 3,\n extract () { return '(AM|PM)'; },\n parser: (val) => {\n if (val) {\n return val.toLowerCase();\n }\n return null;\n },\n formatter: (val) => {\n const d = convertToNativeDate(val);\n const hours = d.getHours();\n\n return (hours < 12 ? 'AM' : 'PM');\n }\n },\n P: {\n // am or pm\n name: 'P',\n index: 3,\n extract () { return '(am|pm)'; },\n parser: (val) => {\n if (val) {\n return val.toLowerCase();\n }\n return null;\n },\n formatter: (val) => {\n const d = convertToNativeDate(val);\n const hours = d.getHours();\n\n return (hours < 12 ? 'am' : 'pm');\n }\n },\n M: {\n // Two digit minutes 00 - 59\n name: 'M',\n index: 4,\n extract () { return '(\\\\d+)'; },\n parser: DateTimeFormatter.defaultNumberParser(),\n formatter (val) {\n const d = convertToNativeDate(val);\n const mins = d.getMinutes();\n\n return pad(mins);\n }\n },\n S: {\n // Two digit seconds 00 - 59\n name: 'S',\n index: 5,\n extract () { return '(\\\\d+)'; },\n parser: DateTimeFormatter.defaultNumberParser(),\n formatter (val) {\n const d = convertToNativeDate(val);\n const seconds = d.getSeconds();\n\n return pad(seconds);\n }\n },\n K: {\n // Milliseconds\n name: 'K',\n index: 6,\n extract () { return '(\\\\d+)'; },\n parser: DateTimeFormatter.defaultNumberParser(),\n formatter (val) {\n const d = convertToNativeDate(val);\n const ms = d.getMilliseconds();\n\n return ms.toString();\n }\n },\n a: {\n // Short name of day, like Mon\n name: 'a',\n index: 2,\n extract () { return `(${daysDef.short.join('|')})`; },\n parser: DateTimeFormatter.defaultRangeParser(daysDef.short),\n formatter (val) {\n const d = convertToNativeDate(val);\n const day = d.getDay();\n\n return (daysDef.short[day]).toString();\n }\n },\n A: {\n // Long name of day, like Monday\n name: 'A',\n index: 2,\n extract () { return `(${daysDef.long.join('|')})`; },\n parser: DateTimeFormatter.defaultRangeParser(daysDef.long),\n formatter (val) {\n const d = convertToNativeDate(val);\n const day = d.getDay();\n\n return (daysDef.long[day]).toString();\n }\n },\n e: {\n // 8 of March, 11 of November\n name: 'e',\n index: 2,\n extract () { return '(\\\\d+)'; },\n parser: DateTimeFormatter.defaultNumberParser(),\n formatter (val) {\n const d = convertToNativeDate(val);\n const day = d.getDate();\n\n return day.toString();\n }\n },\n d: {\n // 08 of March, 11 of November\n name: 'd',\n index: 2,\n extract () { return '(\\\\d+)'; },\n parser: DateTimeFormatter.defaultNumberParser(),\n formatter (val) {\n const d = convertToNativeDate(val);\n const day = d.getDate();\n\n return pad(day);\n }\n },\n b: {\n // Short month, like Jan\n name: 'b',\n index: 1,\n extract () { return `(${monthsDef.short.join('|')})`; },\n parser: DateTimeFormatter.defaultRangeParser(monthsDef.short),\n formatter (val) {\n const d = convertToNativeDate(val);\n const month = d.getMonth();\n\n return (monthsDef.short[month]).toString();\n }\n },\n B: {\n // Long month, like January\n name: 'B',\n index: 1,\n extract () { return `(${monthsDef.long.join('|')})`; },\n parser: DateTimeFormatter.defaultRangeParser(monthsDef.long),\n formatter (val) {\n const d = convertToNativeDate(val);\n const month = d.getMonth();\n\n return (monthsDef.long[month]).toString();\n }\n },\n m: {\n // Two digit month of year like 01 for January\n name: 'm',\n index: 1,\n extract () { return '(\\\\d+)'; },\n parser (val) { return DateTimeFormatter.defaultNumberParser()(val) - 1; },\n formatter (val) {\n const d = convertToNativeDate(val);\n const month = d.getMonth();\n\n return pad(month + 1);\n }\n },\n y: {\n // Short year like 90 for 1990\n name: 'y',\n index: 0,\n extract () { return '(\\\\d{2})'; },\n parser (val) {\n let result;\n if (val) {\n const l = val.length;\n val = val.substring(l - 2, l);\n }\n let parsedVal = DateTimeFormatter.defaultNumberParser()(val);\n let presentDate = new Date();\n let presentYear = Math.trunc((presentDate.getFullYear()) / 100);\n\n result = `${presentYear}${parsedVal}`;\n\n if (convertToNativeDate(result).getFullYear() > presentDate.getFullYear()) {\n result = `${presentYear - 1}${parsedVal}`;\n }\n return convertToNativeDate(result).getFullYear();\n },\n formatter (val) {\n const d = convertToNativeDate(val);\n let year = d.getFullYear().toString();\n let l;\n\n if (year) {\n l = year.length;\n year = year.substring(l - 2, l);\n }\n\n return year;\n }\n },\n Y: {\n // Long year like 1990\n name: 'Y',\n index: 0,\n extract () { return '(\\\\d{4})'; },\n parser: DateTimeFormatter.defaultNumberParser(),\n formatter (val) {\n const d = convertToNativeDate(val);\n const year = d.getFullYear().toString();\n\n return year;\n }\n }\n };\n\n return definitions;\n};\n\n/*\n * The tokens which works internally is not user friendly in terms of memorizing the names. This gives a formal\n * definition to the informal notations.\n *\n * @return {Object} : Formal definition of the tokens\n */\nDateTimeFormatter.getTokenFormalNames = function () {\n const definitions = DateTimeFormatter.getTokenDefinitions();\n\n return {\n HOUR: definitions.H,\n HOUR_12: definitions.l,\n AMPM_UPPERCASE: definitions.p,\n AMPM_LOWERCASE: definitions.P,\n MINUTE: definitions.M,\n SECOND: definitions.S,\n SHORT_DAY: definitions.a,\n LONG_DAY: definitions.A,\n DAY_OF_MONTH: definitions.e,\n DAY_OF_MONTH_CONSTANT_WIDTH: definitions.d,\n SHORT_MONTH: definitions.b,\n LONG_MONTH: definitions.B,\n MONTH_OF_YEAR: definitions.m,\n SHORT_YEAR: definitions.y,\n LONG_YEAR: definitions.Y\n };\n};\n\n/*\n * This defines the rules and declares dependencies that resolves a date parameter (year, month etc) from\n * the date time parameter array.\n *\n * @return {Object} : An object that contains dependencies and a resolver function. The dependencies values are fed\n * to the resolver function in that particular sequence only.\n */\nDateTimeFormatter.tokenResolver = function () {\n const definitions = DateTimeFormatter.getTokenDefinitions();\n const defaultResolver = (...args) => { // eslint-disable-line require-jsdoc\n let i = 0;\n let arg;\n let targetParam;\n const l = args.length;\n\n for (; i < l; i++) {\n arg = args[i];\n if (args[i]) {\n targetParam = arg;\n }\n }\n\n if (!targetParam) { return null; }\n\n return targetParam[0].parser(targetParam[1]);\n };\n\n return {\n YEAR: [definitions.y, definitions.Y,\n defaultResolver\n ],\n MONTH: [definitions.b, definitions.B, definitions.m,\n defaultResolver\n ],\n DAY: [definitions.a, definitions.A, definitions.e, definitions.d,\n defaultResolver\n ],\n HOUR: [definitions.H, definitions.l, definitions.p, definitions.P,\n function (hourFormat24, hourFormat12, ampmLower, ampmUpper) {\n let targetParam;\n let amOrpm;\n let isPM;\n let val;\n\n if (hourFormat12 && (amOrpm = (ampmLower || ampmUpper))) {\n if (amOrpm[0].parser(amOrpm[1]) === 'pm') {\n isPM = true;\n }\n\n targetParam = hourFormat12;\n } else if (hourFormat12) {\n targetParam = hourFormat12;\n } else {\n targetParam = hourFormat24;\n }\n\n if (!targetParam) { return null; }\n\n val = targetParam[0].parser(targetParam[1]);\n if (isPM) {\n val += 12;\n }\n return val;\n }\n ],\n MINUTE: [definitions.M,\n defaultResolver\n ],\n SECOND: [definitions.S,\n defaultResolver\n ]\n };\n};\n\n/*\n * Finds token from the format rule specified by a user.\n * @param format {String} : The format of the input date specified by the user\n * @return {Array} : An array of objects which contains the available token and their occurence index in the format\n */\nDateTimeFormatter.findTokens = function (format) {\n const tokenPrefix = DateTimeFormatter.TOKEN_PREFIX;\n const definitions = DateTimeFormatter.getTokenDefinitions();\n const tokenLiterals = Object.keys(definitions);\n const occurrence = [];\n let i;\n let forwardChar;\n\n while ((i = format.indexOf(tokenPrefix, i + 1)) >= 0) {\n forwardChar = format[i + 1];\n if (tokenLiterals.indexOf(forwardChar) === -1) { continue; }\n\n occurrence.push({\n index: i,\n token: forwardChar\n });\n }\n\n return occurrence;\n};\n\n/*\n * Format any JS date to a specified date given by user.\n *\n * @param date {Number | Date} : The date object which is to be formatted\n * @param format {String} : The format using which the date will be formatted for display\n */\nDateTimeFormatter.formatAs = function (date, format) {\n const nDate = convertToNativeDate(date);\n const occurrence = DateTimeFormatter.findTokens(format);\n const definitions = DateTimeFormatter.getTokenDefinitions();\n let formattedStr = String(format);\n const tokenPrefix = DateTimeFormatter.TOKEN_PREFIX;\n let token;\n let formattedVal;\n let i;\n let l;\n\n for (i = 0, l = occurrence.length; i < l; i++) {\n token = occurrence[i].token;\n formattedVal = definitions[token].formatter(nDate);\n formattedStr = formattedStr.replace(new RegExp(tokenPrefix + token, 'g'), formattedVal);\n }\n\n return formattedStr;\n};\n\n/*\n * Parses the user specified date string to extract the date time params.\n *\n * @return {Array} : Value of date time params in an array [year, month, day, hour, minutes, seconds, milli]\n */\nDateTimeFormatter.prototype.parse = function (dateTimeStamp, options) {\n const tokenResolver = DateTimeFormatter.tokenResolver();\n const dtParams = this.extractTokenValue(dateTimeStamp);\n const dtParamSeq = DateTimeFormatter.DATETIME_PARAM_SEQUENCE;\n const noBreak = options && options.noBreak;\n const dtParamArr = [];\n const args = [];\n let resolverKey;\n let resolverParams;\n let resolverFn;\n let val;\n let i;\n let param;\n let resolvedVal;\n let l;\n let result = [];\n\n for (resolverKey in tokenResolver) {\n if (!{}.hasOwnProperty.call(tokenResolver, resolverKey)) { continue; }\n\n args.length = 0;\n resolverParams = tokenResolver[resolverKey];\n resolverFn = resolverParams.splice(resolverParams.length - 1, 1)[0];\n\n for (i = 0, l = resolverParams.length; i < l; i++) {\n param = resolverParams[i];\n val = dtParams[param.name];\n\n if (val === undefined) {\n args.push(null);\n } else {\n args.push([param, val]);\n }\n }\n\n resolvedVal = resolverFn.apply(this, args);\n\n if ((resolvedVal === undefined || resolvedVal === null) && !noBreak) {\n break;\n }\n\n dtParamArr[dtParamSeq[resolverKey]] = resolvedVal;\n }\n\n if (dtParamArr.length && this.checkIfOnlyYear(dtParamArr.length))\n {\n result.unshift(dtParamArr[0], 0, 1); }\n else {\n result.unshift(...dtParamArr);\n }\n\n return result;\n};\n\n/*\n * Extract the value of the token from user specified date time string.\n *\n * @return {Object} : An key value pair which contains the tokens as key and value as pair\n */\nDateTimeFormatter.prototype.extractTokenValue = function (dateTimeStamp) {\n const format = this.format;\n const definitions = DateTimeFormatter.getTokenDefinitions();\n const tokenPrefix = DateTimeFormatter.TOKEN_PREFIX;\n const occurrence = DateTimeFormatter.findTokens(format);\n const tokenObj = {};\n\n let lastOccurrenceIndex;\n let occObj;\n let occIndex;\n let targetText;\n let regexFormat;\n\n let l;\n let i;\n\n regexFormat = String(format);\n\n const tokenArr = occurrence.map(obj => obj.token);\n const occurrenceLength = occurrence.length;\n for (i = occurrenceLength - 1; i >= 0; i--) {\n occIndex = occurrence[i].index;\n\n if (occIndex + 1 === regexFormat.length - 1) {\n lastOccurrenceIndex = occIndex;\n continue;\n }\n\n if (lastOccurrenceIndex === undefined) {\n lastOccurrenceIndex = regexFormat.length;\n }\n\n targetText = regexFormat.substring(occIndex + 2, lastOccurrenceIndex);\n regexFormat = regexFormat.substring(0, occIndex + 2) +\n RegExp.escape(targetText) +\n regexFormat.substring(lastOccurrenceIndex, regexFormat.length);\n\n lastOccurrenceIndex = occIndex;\n }\n\n for (i = 0; i < occurrenceLength; i++) {\n occObj = occurrence[i];\n regexFormat = regexFormat.replace(tokenPrefix + occObj.token, definitions[occObj.token].extract());\n }\n\n const extractValues = dateTimeStamp.match(new RegExp(regexFormat)) || [];\n extractValues.shift();\n\n for (i = 0, l = tokenArr.length; i < l; i++) {\n tokenObj[tokenArr[i]] = extractValues[i];\n }\n return tokenObj;\n};\n\n/*\n * Give back the JS native date formed from user specified date string\n *\n * @return {Date} : Native JS Date\n */\nDateTimeFormatter.prototype.getNativeDate = function (dateTimeStamp) {\n let date = null;\n if (Number.isFinite(dateTimeStamp)) {\n date = new Date(dateTimeStamp);\n } else if (!this.format && Date.parse(dateTimeStamp)) {\n date = new Date(dateTimeStamp);\n }\n else {\n const dtParams = this.dtParams = this.parse(dateTimeStamp);\n if (dtParams.length) {\n this.nativeDate = new Date(...dtParams);\n date = this.nativeDate;\n }\n }\n return date;\n};\n\nDateTimeFormatter.prototype.checkIfOnlyYear = function(len) {\n return len === 1 && this.format.match(/y|Y/g).length;\n};\n\n/*\n * Represents JS native date to a user specified format.\n *\n * @param format {String} : The format according to which the date is to be represented\n * @return {String} : The formatted date string\n */\nDateTimeFormatter.prototype.formatAs = function (format, dateTimeStamp) {\n let nativeDate;\n\n if (dateTimeStamp) {\n nativeDate = this.nativeDate = this.getNativeDate(dateTimeStamp);\n } else if (!(nativeDate = this.nativeDate)) {\n nativeDate = this.getNativeDate(dateTimeStamp);\n }\n\n return DateTimeFormatter.formatAs(nativeDate, format);\n};\n\nexport { DateTimeFormatter as default };\n","/**\n * The utility function to calculate major column.\n *\n * @param {Object} store - The store object.\n * @return {Function} Returns the push function.\n */\nexport default (store) => {\n let i = 0;\n return (...fields) => {\n fields.forEach((val, fieldIndex) => {\n if (!(store[fieldIndex] instanceof Array)) {\n store[fieldIndex] = Array.from({ length: i });\n }\n store[fieldIndex].push(val);\n });\n i++;\n };\n};\n","/* eslint-disable */\nconst OBJECTSTRING = 'object';\nconst objectToStrFn = Object.prototype.toString;\nconst objectToStr = '[object Object]';\nconst arrayToStr = '[object Array]';\n\nfunction checkCyclicRef(obj, parentArr) {\n let i = parentArr.length;\n let bIndex = -1;\n\n while (i) {\n if (obj === parentArr[i]) {\n bIndex = i;\n return bIndex;\n }\n i -= 1;\n }\n\n return bIndex;\n}\n\nfunction merge(obj1, obj2, skipUndef, tgtArr, srcArr) {\n var item,\n srcVal,\n tgtVal,\n str,\n cRef;\n // check whether obj2 is an array\n // if array then iterate through it's index\n // **** MOOTOOLS precution\n\n if (!srcArr) {\n tgtArr = [obj1];\n srcArr = [obj2];\n }\n else {\n tgtArr.push(obj1);\n srcArr.push(obj2);\n }\n\n if (obj2 instanceof Array) {\n for (item = 0; item < obj2.length; item += 1) {\n try {\n srcVal = obj1[item];\n tgtVal = obj2[item];\n }\n catch (e) {\n continue;\n }\n\n if (typeof tgtVal !== OBJECTSTRING) {\n if (!(skipUndef && tgtVal === undefined)) {\n obj1[item] = tgtVal;\n }\n }\n else {\n if (srcVal === null || typeof srcVal !== OBJECTSTRING) {\n srcVal = obj1[item] = tgtVal instanceof Array ? [] : {};\n }\n cRef = checkCyclicRef(tgtVal, srcArr);\n if (cRef !== -1) {\n srcVal = obj1[item] = tgtArr[cRef];\n }\n else {\n merge(srcVal, tgtVal, skipUndef, tgtArr, srcArr);\n }\n }\n }\n }\n else {\n for (item in obj2) {\n try {\n srcVal = obj1[item];\n tgtVal = obj2[item];\n }\n catch (e) {\n continue;\n }\n\n if (tgtVal !== null && typeof tgtVal === OBJECTSTRING) {\n // Fix for issue BUG: FWXT-602\n // IE < 9 Object.prototype.toString.call(null) gives\n // '[object Object]' instead of '[object Null]'\n // that's why null value becomes Object in IE < 9\n str = objectToStrFn.call(tgtVal);\n if (str === objectToStr) {\n if (srcVal === null || typeof srcVal !== OBJECTSTRING) {\n srcVal = obj1[item] = {};\n }\n cRef = checkCyclicRef(tgtVal, srcArr);\n if (cRef !== -1) {\n srcVal = obj1[item] = tgtArr[cRef];\n }\n else {\n merge(srcVal, tgtVal, skipUndef, tgtArr, srcArr);\n }\n }\n else if (str === arrayToStr) {\n if (srcVal === null || !(srcVal instanceof Array)) {\n srcVal = obj1[item] = [];\n }\n cRef = checkCyclicRef(tgtVal, srcArr);\n if (cRef !== -1) {\n srcVal = obj1[item] = tgtArr[cRef];\n }\n else {\n merge(srcVal, tgtVal, skipUndef, tgtArr, srcArr);\n }\n }\n else {\n obj1[item] = tgtVal;\n }\n }\n else {\n if (skipUndef && tgtVal === undefined) {\n continue;\n }\n obj1[item] = tgtVal;\n }\n }\n }\n return obj1;\n}\n\n\nfunction extend2 (obj1, obj2, skipUndef) {\n //if none of the arguments are object then return back\n if (typeof obj1 !== OBJECTSTRING && typeof obj2 !== OBJECTSTRING) {\n return null;\n }\n\n if (typeof obj2 !== OBJECTSTRING || obj2 === null) {\n return obj1;\n }\n\n if (typeof obj1 !== OBJECTSTRING) {\n obj1 = obj2 instanceof Array ? [] : {};\n }\n merge(obj1, obj2, skipUndef);\n return obj1;\n}\n\nexport { extend2 as default };\n","import { DataFormat } from '../enums';\n\n/**\n * Checks whether the value is an array.\n *\n * @param {*} val - The value to be checked.\n * @return {boolean} Returns true if the value is an array otherwise returns false.\n */\nexport function isArray (val) {\n return Array.isArray(val);\n}\n\n/**\n * Checks whether the value is an object.\n *\n * @param {*} val - The value to be checked.\n * @return {boolean} Returns true if the value is an object otherwise returns false.\n */\nexport function isObject (val) {\n return val === Object(val);\n}\n\n/**\n * Checks whether the value is a string value.\n *\n * @param {*} val - The value to be checked.\n * @return {boolean} Returns true if the value is a string value otherwise returns false.\n */\nexport function isString (val) {\n return typeof val === 'string';\n}\n\n/**\n * Checks whether the value is callable.\n *\n * @param {*} val - The value to be checked.\n * @return {boolean} Returns true if the value is callable otherwise returns false.\n */\nexport function isCallable (val) {\n return typeof val === 'function';\n}\n\n/**\n * Returns the unique values from the input array.\n *\n * @param {Array} data - The input array.\n * @return {Array} Returns a new array of unique values.\n */\nexport function uniqueValues (data) {\n return [...new Set(data)];\n}\n\nexport const getUniqueId = () => `id-${new Date().getTime()}${Math.round(Math.random() * 10000)}`;\n\n/**\n * Checks Whether two arrays have same content.\n *\n * @param {Array} arr1 - The first array.\n * @param {Array} arr2 - The 2nd array.\n * @return {boolean} Returns whether two array have same content.\n */\nexport function isArrEqual(arr1, arr2) {\n if (!isArray(arr1) || !isArray(arr2)) {\n return arr1 === arr2;\n }\n\n if (arr1.length !== arr2.length) {\n return false;\n }\n\n for (let i = 0; i < arr1.length; i++) {\n if (arr1[i] !== arr2[i]) {\n return false;\n }\n }\n\n return true;\n}\n\n/**\n * It is the default number format function for the measure field type.\n *\n * @param {any} val - The input value.\n * @return {number} Returns a number value.\n */\nexport function formatNumber(val) {\n return val;\n}\n\n/**\n * Returns the detected data format.\n *\n * @param {any} data - The input data to be tested.\n * @return {string} Returns the data format name.\n */\nexport const detectDataFormat = (data) => {\n if (isString(data)) {\n return DataFormat.DSV_STR;\n } else if (isArray(data) && isArray(data[0])) {\n return DataFormat.DSV_ARR;\n } else if (isArray(data) && (data.length === 0 || isObject(data[0]))) {\n return DataFormat.FLAT_JSON;\n }\n return null;\n};\n","import { FieldType } from './enums';\nimport { getUniqueId } from './utils';\n\nconst fieldStore = {\n data: {},\n\n createNamespace (fieldArr, name) {\n const dataId = name || getUniqueId();\n\n this.data[dataId] = {\n name: dataId,\n fields: fieldArr,\n\n fieldsObj () {\n let fieldsObj = this._cachedFieldsObj;\n\n if (!fieldsObj) {\n fieldsObj = this._cachedFieldsObj = {};\n this.fields.forEach((field) => {\n fieldsObj[field.name()] = field;\n });\n }\n return fieldsObj;\n },\n getMeasure () {\n let measureFields = this._cachedMeasure;\n\n if (!measureFields) {\n measureFields = this._cachedMeasure = {};\n this.fields.forEach((field) => {\n if (field.schema().type === FieldType.MEASURE) {\n measureFields[field.name()] = field;\n }\n });\n }\n return measureFields;\n },\n getDimension () {\n let dimensionFields = this._cachedDimension;\n\n if (!this._cachedDimension) {\n dimensionFields = this._cachedDimension = {};\n this.fields.forEach((field) => {\n if (field.schema().type === FieldType.DIMENSION) {\n dimensionFields[field.name()] = field;\n }\n });\n }\n return dimensionFields;\n },\n };\n return this.data[dataId];\n },\n};\n\nexport default fieldStore;\n","/**\n * The wrapper class on top of the primitive value of a field.\n *\n * @todo Need to have support for StringValue, NumberValue, DateTimeValue\n * and GeoValue. These types should expose predicate API mostly.\n */\nclass Value {\n\n /**\n * Creates new Value instance.\n *\n * @param {*} val - the primitive value from the field cell.\n * @param {string | Field} field - The field from which the value belongs.\n */\n constructor (val, field) {\n Object.defineProperty(this, '_value', {\n enumerable: false,\n configurable: false,\n writable: false,\n value: val\n });\n\n this.field = field;\n }\n\n /**\n * Returns the field value.\n *\n * @return {*} Returns the current value.\n */\n get value () {\n return this._value;\n }\n\n /**\n * Converts to human readable string.\n *\n * @override\n * @return {string} Returns a human readable string of the field value.\n *\n */\n toString () {\n return String(this.value);\n }\n\n /**\n * Returns the value of the field.\n *\n * @override\n * @return {*} Returns the field value.\n */\n valueOf () {\n return this.value;\n }\n}\n\nexport default Value;\n","/**\n * Iterates through the diffSet array and call the callback with the current\n * index.\n *\n * @param {string} rowDiffset - The row diffset string e.g. '0-4,6,10-13'.\n * @param {Function} callback - The callback function to be called with every index.\n */\nexport function rowDiffsetIterator (rowDiffset, callback) {\n if (rowDiffset.length > 0) {\n const rowDiffArr = rowDiffset.split(',');\n rowDiffArr.forEach((diffStr) => {\n const diffStsArr = diffStr.split('-');\n const start = +(diffStsArr[0]);\n const end = +(diffStsArr[1] || diffStsArr[0]);\n if (end >= start) {\n for (let i = start; i <= end; i += 1) {\n callback(i);\n }\n }\n });\n }\n}\n","/**\n * A parser to parser null, undefined, invalid and NIL values.\n *\n * @public\n * @class\n */\nclass InvalidAwareTypes {\n /**\n * Static method which gets/sets the invalid value registry.\n *\n * @public\n * @param {Object} config - The custom configuration supplied by user.\n * @return {Object} Returns the invalid values registry.\n */\n static invalidAwareVals (config) {\n if (!config) {\n return InvalidAwareTypes._invalidAwareValsMap;\n }\n return Object.assign(InvalidAwareTypes._invalidAwareValsMap, config);\n }\n\n /**\n * Initialize a new instance.\n *\n * @public\n * @param {string} value - The value of the invalid data type.\n */\n constructor (value) {\n this._value = value;\n }\n\n /**\n * Returns the current value of the instance.\n *\n * @public\n * @return {string} Returns the value of the invalid data type.\n */\n value () {\n return this._value;\n }\n\n /**\n * Returns the current value of the instance in string format.\n *\n * @public\n * @return {string} Returns the value of the invalid data type.\n */\n toString () {\n return String(this._value);\n }\n\n static isInvalid(val) {\n return (val instanceof InvalidAwareTypes) || !!InvalidAwareTypes.invalidAwareVals()[val];\n }\n\n static getInvalidType(val) {\n return val instanceof InvalidAwareTypes ? val : InvalidAwareTypes.invalidAwareVals()[val];\n }\n}\n\n/**\n * Enums for Invalid types.\n */\nInvalidAwareTypes.NULL = new InvalidAwareTypes('null');\nInvalidAwareTypes.NA = new InvalidAwareTypes('na');\nInvalidAwareTypes.NIL = new InvalidAwareTypes('nil');\n\n/**\n * Default Registry for mapping the invalid values.\n *\n * @private\n */\nInvalidAwareTypes._invalidAwareValsMap = {\n invalid: InvalidAwareTypes.NA,\n nil: InvalidAwareTypes.NIL,\n null: InvalidAwareTypes.NULL,\n undefined: InvalidAwareTypes.NA\n};\n\nexport default InvalidAwareTypes;\n","import { persistDerivations } from '../helper';\nimport { DM_DERIVATIVES } from '../constants';\n\n/**\n * DataModel's opearators are exposed as composable functional operators as well as chainable operators. Chainable\n * operators are called on the instances of {@link Datamodel} and {@link Relation} class.\n *\n * Those same operators can be used as composable operators from `DataModel.Operators` namespace.\n *\n * All these operators have similar behaviour. All these operators when called with the argument returns a function\n * which expects a DataModel instance.\n *\n * @public\n * @module Operators\n * @namespace DataModel\n */\n\n/**\n * This is functional version of selection operator. {@link link_to_selection | Selection} is a row filtering operation.\n * It takes {@link SelectionPredicate | predicate} for filtering criteria and returns a function.\n * The returned function is called with the DataModel instance on which the action needs to be performed.\n *\n * {@link SelectionPredicate} is a function which returns a boolean value. For selection opearation the selection\n * function is called for each row of DataModel instance with the current row passed as argument.\n *\n * After executing {@link SelectionPredicate} the rows are labeled as either an entry of selection set or an entry\n * of rejection set.\n *\n * {@link FilteringMode} operates on the selection and rejection set to determine which one would reflect in the\n * resulatant datamodel.\n *\n * @warning\n * [Warn] Selection and rejection set is only a logical idea for concept explanation purpose.\n *\n * @error\n * [Error] `FilteringMode.ALL` is not a valid working mode for functional version of `select`. Its only avialable on the\n * chained version.\n *\n * @example\n * const select = DataModel.Operators.select;\n * usaCarsFn = select(fields => fields.Origin.value === 'USA');\n * usaCarsDm = usaCarsFn(dm);\n * console.log(usaCarsDm);\n *\n * @public\n * @namespace DataModel\n * @module Operators\n *\n * @param {SelectionPredicate} selectFn - Predicate funciton which is called for each row with the current row\n * ```\n * function (row, i) { ... }\n * ```\n * @param {Object} [config] - The configuration object to control the inclusion exclusion of a row in resultant\n * DataModel instance\n * @param {FilteringMode} [config.mode=FilteringMode.NORMAL] - The mode of the selection\n *\n * @return {PreparatorFunction} Function which expects an instance of DataModel on which the operator needs to be\n * applied.\n */\nexport const select = (...args) => dm => dm.select(...args);\n\n/**\n * This is functional version of projection operator. {@link link_to_projection | Projection} is a column filtering\n * operation.It expects list of fields name and either include those or exclude those based on {@link FilteringMode} on\n * the resultant variable.It returns a function which is called with the DataModel instance on which the action needs\n * to be performed.\n *\n * Projection expects array of fields name based on which it creates the selection and rejection set. All the field\n * whose name is present in array goes in selection set and rest of the fields goes in rejection set.\n *\n * {@link FilteringMode} operates on the selection and rejection set to determine which one would reflect in the\n * resulatant datamodel.\n *\n * @warning\n * Selection and rejection set is only a logical idea for concept explanation purpose.\n *\n * @error\n * `FilteringMode.ALL` is not a valid working mode for functional version of `select`. Its only avialable on the\n * chained version.\n *\n * @public\n * @namespace DataModel\n * @module Operators\n *\n * @param {Array.} projField - An array of column names in string or regular expression.\n * @param {Object} [config] - An optional config to control the creation of new DataModel\n * @param {FilteringMode} [config.mode=FilteringMode.NORMAL] - Mode of the projection\n *\n * @return {PreparatorFunction} Function which expects an instance of DataModel on which the operator needs to be\n * applied.\n */\nexport const project = (...args) => dm => dm.project(...args);\n\n/**\n * This is functional version of binnig operator. Binning happens on a measure field based on a binning configuration.\n * Binning in DataModel does not aggregate the number of rows present in DataModel instance after binning, it just adds\n * a new field with the binned value. Refer binning {@link example_of_binning | example} to have a intuition of what\n * binning is and the use case.\n *\n * Binning can be configured by\n * - providing custom bin configuration with non uniform buckets\n * - providing bin count\n * - providing each bin size\n *\n * When custom buckets are provided as part of binning configuration\n * @example\n * // DataModel already prepared and assigned to dm vairable\n * const buckets = {\n * start: 30\n * stops: [80, 100, 110]\n * };\n * const config = { buckets, name: 'binnedHP' }\n * const binFn = bin('horsepower', config);\n * const binnedDm = binFn(dm);\n *\n * @text\n * When `binCount` is defined as part of binning configuration\n * @example\n * // DataModel already prepared and assigned to dm vairable\n * const config = { binCount: 5, name: 'binnedHP' }\n * const binFn = bin('horsepower', config);\n * const binnedDm = binFn(Dm);\n *\n * @text\n * When `binSize` is defined as part of binning configuration\n * @example\n * // DataModel already prepared and assigned to dm vairable\n * const config = { binSize: 200, name: 'binnedHorsepower' }\n * const binnedDm = dataModel.bin('horsepower', config);\n * const binnedDm = binFn(Dm);\n *\n * @public\n * @namespace DataModel\n * @module Operators\n *\n * @param {String} name Name of measure which will be used to create bin\n * @param {Object} config Config required for bin creation\n * @param {Array.} config.bucketObj.stops Defination of bucket ranges. Two subsequent number from arrays\n * are picked and a range is created. The first number from range is inclusive and the second number from range\n * is exclusive.\n * @param {Number} [config.bucketObj.startAt] Force the start of the bin from a particular number.\n * If not mentioned, the start of the bin or the lower domain of the data if stops is not mentioned, else its\n * the first value of the stop.\n * @param {Number} config.binSize Bucket size for each bin\n * @param {Number} config.binCount Number of bins which will be created\n * @param {String} config.name Name of the new binned field to be created\n *\n * @return {PreparatorFunction} Function which expects an instance of DataModel on which the operator needs to be\n * applied.\n */\nexport const bin = (...args) => dm => dm.bin(...args);\n\n/**\n * This is functional version of `groupBy` operator.Groups the data using particular dimensions and by reducing\n * measures. It expects a list of dimensions using which it projects the datamodel and perform aggregations to reduce\n * the duplicate tuples. Refer this {@link link_to_one_example_with_group_by | document} to know the intuition behind\n * groupBy.\n *\n * DataModel by default provides definition of few {@link reducer | Reducers}.\n * {@link ReducerStore | User defined reducers} can also be registered.\n *\n * This is the chained implementation of `groupBy`.\n * `groupBy` also supports {@link link_to_compose_groupBy | composability}\n *\n * @example\n * const groupBy = DataModel.Operators.groupBy;\n * const groupedFn = groupBy(['Year'], { horsepower: 'max' } );\n * groupedDM = groupByFn(dm);\n *\n * @public\n *\n * @param {Array.} fieldsArr - Array containing the name of dimensions\n * @param {Object} [reducers={}] - A map whose key is the variable name and value is the name of the reducer. If its\n * not passed, or any variable is ommitted from the object, default aggregation function is used from the\n * schema of the variable.\n *\n * @return {PreparatorFunction} Function which expects an instance of DataModel on which the operator needs to be\n * applied.\n */\nexport const groupBy = (...args) => dm => dm.groupBy(...args);\n\n/**\n * Enables composing operators to run multiple operations and save group of operataion as named opration on a DataModel.\n * The resulting DataModel will be the result of all the operation provided. The operations provided will be executed in\n * a serial manner ie. result of one operation will be the input for the next operations (like pipe operator in unix).\n *\n * Suported operations in compose are\n * - `select`\n * - `project`\n * - `groupBy`\n * - `bin`\n * - `compose`\n *\n * @example\n * const compose = DataModel.Operators.compose;\n * const select = DataModel.Operators.select;\n * const project = DataModel.Operators.project;\n *\n * let composedFn = compose(\n * select(fields => fields.netprofit.value <= 15),\n * project(['netprofit', 'netsales']));\n *\n * const dataModel = new DataModel(data1, schema1);\n *\n * let composedDm = composedFn(dataModel);\n *\n * @public\n * @namespace DataModel\n * @module Operators\n *\n * @param {Array.} operators: An array of operation that will be applied on the\n * datatable.\n *\n * @returns {DataModel} Instance of resultant DataModel\n */\nexport const compose = (...operations) =>\n (dm, config = { saveChild: true }) => {\n let currentDM = dm;\n let firstChild;\n const derivations = [];\n\n operations.forEach((operation) => {\n currentDM = operation(currentDM);\n derivations.push(...currentDM._derivation);\n if (!firstChild) {\n firstChild = currentDM;\n }\n });\n\n if (firstChild && firstChild !== currentDM) {\n firstChild.dispose();\n }\n\n // reset all ancestorDerivation saved in-between compose\n currentDM._ancestorDerivation = [];\n persistDerivations(\n dm,\n currentDM,\n DM_DERIVATIVES.COMPOSE,\n null,\n derivations\n );\n\n if (config.saveChild) {\n currentDM.setParent(dm);\n } else {\n currentDM.setParent(null);\n }\n\n return currentDM;\n };\n","export { DataFormat, FilteringMode } from '../enums';\n/**\n * The event name for data propagation.\n */\nexport const PROPAGATION = 'propagation';\n\n/**\n * The name of the unique row id column in DataModel.\n */\nexport const ROW_ID = '__id__';\n\n/**\n * The enums for operation names performed on DataModel.\n */\nexport const DM_DERIVATIVES = {\n SELECT: 'select',\n PROJECT: 'project',\n GROUPBY: 'group',\n COMPOSE: 'compose',\n CAL_VAR: 'calculatedVariable',\n BIN: 'bin',\n SORT: 'sort'\n};\n\nexport const JOINS = {\n CROSS: 'cross',\n LEFTOUTER: 'leftOuter',\n RIGHTOUTER: 'rightOuter',\n NATURAL: 'natural',\n FULLOUTER: 'fullOuter'\n};\n\nexport const LOGICAL_OPERATORS = {\n AND: 'and',\n OR: 'or'\n};\n","/**\n * The helper function that returns an array of common schema\n * from two fieldStore instances.\n *\n * @param {FieldStore} fs1 - The first FieldStore instance.\n * @param {FieldStore} fs2 - The second FieldStore instance.\n * @return {Array} An array containing the common schema.\n */\nexport function getCommonSchema (fs1, fs2) {\n const retArr = [];\n const fs1Arr = [];\n fs1.fields.forEach((field) => {\n fs1Arr.push(field.schema().name);\n });\n fs2.fields.forEach((field) => {\n if (fs1Arr.indexOf(field.schema().name) !== -1) {\n retArr.push(field.schema().name);\n }\n });\n return retArr;\n}\n","import DataModel from '../datamodel';\nimport { extend2 } from '../utils';\nimport { getCommonSchema } from './get-common-schema';\nimport { rowDiffsetIterator } from './row-diffset-iterator';\nimport { JOINS } from '../constants';\nimport { prepareJoinData } from '../helper';\n/**\n * Default filter function for crossProduct.\n *\n * @return {boolean} Always returns true.\n */\nfunction defaultFilterFn() { return true; }\n\n/**\n * Implementation of cross product operation between two DataModel instances.\n * It internally creates the data and schema for the new DataModel.\n *\n * @param {DataModel} dataModel1 - The left DataModel instance.\n * @param {DataModel} dataModel2 - The right DataModel instance.\n * @param {Function} filterFn - The filter function which is used to filter the tuples.\n * @param {boolean} [replaceCommonSchema=false] - The flag if the common name schema should be there.\n * @return {DataModel} Returns The newly created DataModel instance from the crossProduct operation.\n */\nexport function crossProduct (dm1, dm2, filterFn, replaceCommonSchema = false, jointype = JOINS.CROSS) {\n const schema = [];\n const data = [];\n const applicableFilterFn = filterFn || defaultFilterFn;\n const dm1FieldStore = dm1.getFieldspace();\n const dm2FieldStore = dm2.getFieldspace();\n const dm1FieldStoreName = dm1FieldStore.name;\n const dm2FieldStoreName = dm2FieldStore.name;\n const name = `${dm1FieldStore.name}.${dm2FieldStore.name}`;\n const commonSchemaList = getCommonSchema(dm1FieldStore, dm2FieldStore);\n\n if (dm1FieldStoreName === dm2FieldStoreName) {\n throw new Error('DataModels must have different alias names');\n }\n // Here prepare the schema\n dm1FieldStore.fields.forEach((field) => {\n const tmpSchema = extend2({}, field.schema());\n if (commonSchemaList.indexOf(tmpSchema.name) !== -1 && !replaceCommonSchema) {\n tmpSchema.name = `${dm1FieldStore.name}.${tmpSchema.name}`;\n }\n schema.push(tmpSchema);\n });\n dm2FieldStore.fields.forEach((field) => {\n const tmpSchema = extend2({}, field.schema());\n if (commonSchemaList.indexOf(tmpSchema.name) !== -1) {\n if (!replaceCommonSchema) {\n tmpSchema.name = `${dm2FieldStore.name}.${tmpSchema.name}`;\n schema.push(tmpSchema);\n }\n } else {\n schema.push(tmpSchema);\n }\n });\n\n // Here prepare Data\n rowDiffsetIterator(dm1._rowDiffset, (i) => {\n let rowAdded = false;\n let rowPosition;\n rowDiffsetIterator(dm2._rowDiffset, (ii) => {\n const tuple = [];\n const userArg = {};\n userArg[dm1FieldStoreName] = {};\n userArg[dm2FieldStoreName] = {};\n dm1FieldStore.fields.forEach((field) => {\n tuple.push(field.partialField.data[i]);\n userArg[dm1FieldStoreName][field.name()] = field.partialField.data[i];\n });\n dm2FieldStore.fields.forEach((field) => {\n if (!(commonSchemaList.indexOf(field.schema().name) !== -1 && replaceCommonSchema)) {\n tuple.push(field.partialField.data[ii]);\n }\n userArg[dm2FieldStoreName][field.name()] = field.partialField.data[ii];\n });\n\n let cachedStore = {};\n let cloneProvider1 = () => dm1.detachedRoot();\n let cloneProvider2 = () => dm2.detachedRoot();\n\n const dm1Fields = prepareJoinData(userArg[dm1FieldStoreName]);\n const dm2Fields = prepareJoinData(userArg[dm2FieldStoreName]);\n if (applicableFilterFn(dm1Fields, dm2Fields, cloneProvider1, cloneProvider2, cachedStore)) {\n const tupleObj = {};\n tuple.forEach((cellVal, iii) => {\n tupleObj[schema[iii].name] = cellVal;\n });\n if (rowAdded && JOINS.CROSS !== jointype) {\n data[rowPosition] = tupleObj;\n }\n else {\n data.push(tupleObj);\n rowAdded = true;\n rowPosition = i;\n }\n } else if ((jointype === JOINS.LEFTOUTER || jointype === JOINS.RIGHTOUTER) && !rowAdded) {\n const tupleObj = {};\n let len = dm1FieldStore.fields.length - 1;\n tuple.forEach((cellVal, iii) => {\n if (iii <= len) {\n tupleObj[schema[iii].name] = cellVal;\n }\n else {\n tupleObj[schema[iii].name] = null;\n }\n });\n rowAdded = true;\n rowPosition = i;\n data.push(tupleObj);\n }\n });\n });\n\n return new DataModel(data, schema, { name });\n}\n","/**\n * The default sort function.\n *\n * @param {*} a - The first value.\n * @param {*} b - The second value.\n * @return {number} Returns the comparison result e.g. 1 or 0 or -1.\n */\nfunction defSortFn (a, b) {\n const a1 = `${a}`;\n const b1 = `${b}`;\n if (a1 < b1) {\n return -1;\n }\n if (a1 > b1) {\n return 1;\n }\n return 0;\n}\n\n/**\n * The helper function for merge sort which creates the sorted array\n * from the two halves of the input array.\n *\n * @param {Array} arr - The target array which needs to be merged.\n * @param {number} lo - The starting index of the first array half.\n * @param {number} mid - The ending index of the first array half.\n * @param {number} hi - The ending index of the second array half.\n * @param {Function} sortFn - The sort function.\n */\nfunction merge (arr, lo, mid, hi, sortFn) {\n const mainArr = arr;\n const auxArr = [];\n for (let i = lo; i <= hi; i += 1) {\n auxArr[i] = mainArr[i];\n }\n let a = lo;\n let b = mid + 1;\n\n for (let i = lo; i <= hi; i += 1) {\n if (a > mid) {\n mainArr[i] = auxArr[b];\n b += 1;\n } else if (b > hi) {\n mainArr[i] = auxArr[a];\n a += 1;\n } else if (sortFn(auxArr[a], auxArr[b]) <= 0) {\n mainArr[i] = auxArr[a];\n a += 1;\n } else {\n mainArr[i] = auxArr[b];\n b += 1;\n }\n }\n}\n\n/**\n * The helper function for merge sort which would be called\n * recursively for sorting the array halves.\n *\n * @param {Array} arr - The target array which needs to be sorted.\n * @param {number} lo - The starting index of the array half.\n * @param {number} hi - The ending index of the array half.\n * @param {Function} sortFn - The sort function.\n * @return {Array} Returns the target array itself.\n */\nfunction sort (arr, lo, hi, sortFn) {\n if (hi === lo) { return arr; }\n\n const mid = lo + Math.floor((hi - lo) / 2);\n sort(arr, lo, mid, sortFn);\n sort(arr, mid + 1, hi, sortFn);\n merge(arr, lo, mid, hi, sortFn);\n\n return arr;\n}\n\n/**\n * The implementation of merge sort.\n * It is used in DataModel for stable sorting as it is not sure\n * what the sorting algorithm used by browsers is stable or not.\n *\n * @param {Array} arr - The target array which needs to be sorted.\n * @param {Function} [sortFn=defSortFn] - The sort function.\n * @return {Array} Returns the input array itself in sorted order.\n */\nexport function mergeSort (arr, sortFn = defSortFn) {\n if (arr.length > 1) {\n sort(arr, 0, arr.length - 1, sortFn);\n }\n return arr;\n}\n","import { DimensionSubtype, MeasureSubtype } from '../enums';\nimport { rowDiffsetIterator } from './row-diffset-iterator';\nimport { mergeSort } from './merge-sort';\nimport { fieldInSchema } from '../helper';\nimport { isCallable, isArray, } from '../utils';\n/**\n * Generates the sorting functions to sort the data of a DataModel instance\n * according to the input data type.\n *\n * @param {string} dataType - The data type e.g. 'measure', 'datetime' etc.\n * @param {string} sortType - The sorting order i.e. 'asc' or 'desc'.\n * @param {integer} index - The index of the data which will be sorted.\n * @return {Function} Returns the the sorting function.\n */\nfunction getSortFn (dataType, sortType, index) {\n let retFunc;\n switch (dataType) {\n case MeasureSubtype.CONTINUOUS:\n case DimensionSubtype.TEMPORAL:\n if (sortType === 'desc') {\n retFunc = (a, b) => b[index] - a[index];\n } else {\n retFunc = (a, b) => a[index] - b[index];\n }\n break;\n default:\n retFunc = (a, b) => {\n const a1 = `${a[index]}`;\n const b1 = `${b[index]}`;\n if (a1 < b1) {\n return sortType === 'desc' ? 1 : -1;\n }\n if (a1 > b1) {\n return sortType === 'desc' ? -1 : 1;\n }\n return 0;\n };\n }\n return retFunc;\n}\n\n/**\n * Groups the data according to the specified target field.\n *\n * @param {Array} data - The input data array.\n * @param {number} fieldIndex - The target field index within schema array.\n * @return {Array} Returns an array containing the grouped data.\n */\nfunction groupData(data, fieldIndex) {\n const hashMap = new Map();\n const groupedData = [];\n\n data.forEach((datum) => {\n const fieldVal = datum[fieldIndex];\n if (hashMap.has(fieldVal)) {\n groupedData[hashMap.get(fieldVal)][1].push(datum);\n } else {\n groupedData.push([fieldVal, [datum]]);\n hashMap.set(fieldVal, groupedData.length - 1);\n }\n });\n\n return groupedData;\n}\n\n/**\n * Creates the argument value used for sorting function when sort is done\n * with another fields.\n *\n * @param {Array} groupedDatum - The grouped datum for a single dimension field value.\n * @param {Array} targetFields - An array of the sorting fields.\n * @param {Array} targetFieldDetails - An array of the sorting field details in schema.\n * @return {Object} Returns an object containing the value of sorting fields and the target field name.\n */\nfunction createSortingFnArg(groupedDatum, targetFields, targetFieldDetails) {\n const arg = {\n label: groupedDatum[0]\n };\n\n targetFields.reduce((acc, next, idx) => {\n acc[next] = groupedDatum[1].map(datum => datum[targetFieldDetails[idx].index]);\n return acc;\n }, arg);\n\n return arg;\n}\n\n/**\n * Sorts the data before return in dataBuilder.\n *\n * @param {Object} dataObj - An object containing the data and schema.\n * @param {Array} sortingDetails - An array containing the sorting configs.\n */\nfunction sortData(dataObj, sortingDetails) {\n const { data, schema } = dataObj;\n let fieldName;\n let sortMeta;\n let fDetails;\n let i = sortingDetails.length - 1;\n\n for (; i >= 0; i--) {\n fieldName = sortingDetails[i][0];\n sortMeta = sortingDetails[i][1];\n fDetails = fieldInSchema(schema, fieldName);\n\n if (!fDetails) {\n // eslint-disable-next-line no-continue\n continue;\n }\n\n if (isCallable(sortMeta)) {\n // eslint-disable-next-line no-loop-func\n mergeSort(data, (a, b) => sortMeta(a[fDetails.index], b[fDetails.index]));\n } else if (isArray(sortMeta)) {\n const groupedData = groupData(data, fDetails.index);\n const sortingFn = sortMeta[sortMeta.length - 1];\n const targetFields = sortMeta.slice(0, sortMeta.length - 1);\n const targetFieldDetails = targetFields.map(f => fieldInSchema(schema, f));\n\n groupedData.forEach((groupedDatum) => {\n groupedDatum.push(createSortingFnArg(groupedDatum, targetFields, targetFieldDetails));\n });\n\n mergeSort(groupedData, (a, b) => {\n const m = a[2];\n const n = b[2];\n return sortingFn(m, n);\n });\n\n // Empty the array\n data.length = 0;\n groupedData.forEach((datum) => {\n data.push(...datum[1]);\n });\n } else {\n sortMeta = String(sortMeta).toLowerCase() === 'desc' ? 'desc' : 'asc';\n mergeSort(data, getSortFn(fDetails.type, sortMeta, fDetails.index));\n }\n }\n\n dataObj.uids = [];\n data.forEach((value) => {\n dataObj.uids.push(value.pop());\n });\n}\n\n\n/**\n * Builds the actual data array.\n *\n * @param {Array} fieldStore - An array of field.\n * @param {string} rowDiffset - A string consisting of which rows to be included eg. '0-2,4,6';\n * @param {string} colIdentifier - A string consisting of the details of which column\n * to be included eg 'date,sales,profit';\n * @param {Object} sortingDetails - An object containing the sorting details of the DataModel instance.\n * @param {Object} options - The options required to create the type of the data.\n * @return {Object} Returns an object containing the multidimensional array and the relative schema.\n */\nexport function dataBuilder (fieldStore, rowDiffset, colIdentifier, sortingDetails, options) {\n const defOptions = {\n addUid: false,\n columnWise: false\n };\n options = Object.assign({}, defOptions, options);\n\n const retObj = {\n schema: [],\n data: [],\n uids: []\n };\n const addUid = options.addUid;\n const reqSorting = sortingDetails && sortingDetails.length > 0;\n // It stores the fields according to the colIdentifier argument\n const tmpDataArr = [];\n // Stores the fields according to the colIdentifier argument\n const colIArr = colIdentifier.split(',');\n\n colIArr.forEach((colName) => {\n for (let i = 0; i < fieldStore.length; i += 1) {\n if (fieldStore[i].name() === colName) {\n tmpDataArr.push(fieldStore[i]);\n break;\n }\n }\n });\n\n // Inserts the schema to the schema object\n tmpDataArr.forEach((field) => {\n /** @todo Need to use extend2 here otherwise user can overwrite the schema. */\n retObj.schema.push(field.schema());\n });\n\n if (addUid) {\n retObj.schema.push({\n name: 'uid',\n type: 'identifier'\n });\n }\n\n rowDiffsetIterator(rowDiffset, (i) => {\n retObj.data.push([]);\n const insertInd = retObj.data.length - 1;\n let start = 0;\n tmpDataArr.forEach((field, ii) => {\n retObj.data[insertInd][ii + start] = field.partialField.data[i];\n });\n if (addUid) {\n retObj.data[insertInd][tmpDataArr.length] = i;\n }\n // Creates an array of unique identifiers for each row\n retObj.uids.push(i);\n\n // If sorting needed then there is the need to expose the index\n // mapping from the old index to its new index\n if (reqSorting) { retObj.data[insertInd].push(i); }\n });\n\n // Handles the sort functionality\n if (reqSorting) {\n sortData(retObj, sortingDetails);\n }\n\n if (options.columnWise) {\n const tmpData = Array(...Array(retObj.schema.length)).map(() => []);\n retObj.data.forEach((tuple) => {\n tuple.forEach((data, i) => {\n tmpData[i].push(data);\n });\n });\n retObj.data = tmpData;\n }\n\n return retObj;\n}\n","import DataModel from '../datamodel';\nimport { extend2 } from '../utils';\nimport { rowDiffsetIterator } from './row-diffset-iterator';\nimport { isArrEqual } from '../utils/helper';\n\n/**\n * Performs the union operation between two dm instances.\n *\n * @todo Fix the conflicts between union and difference terminology here.\n *\n * @param {dm} dm1 - The first dm instance.\n * @param {dm} dm2 - The second dm instance.\n * @return {dm} Returns the newly created dm after union operation.\n */\nexport function difference (dm1, dm2) {\n const hashTable = {};\n const schema = [];\n const schemaNameArr = [];\n const data = [];\n const dm1FieldStore = dm1.getFieldspace();\n const dm2FieldStore = dm2.getFieldspace();\n const dm1FieldStoreFieldObj = dm1FieldStore.fieldsObj();\n const dm2FieldStoreFieldObj = dm2FieldStore.fieldsObj();\n const name = `${dm1FieldStore.name} union ${dm2FieldStore.name}`;\n\n // For union the columns should match otherwise return a clone of the dm1\n if (!isArrEqual(dm1._colIdentifier.split(',').sort(), dm2._colIdentifier.split(',').sort())) {\n return null;\n }\n\n // Prepare the schema\n (dm1._colIdentifier.split(',')).forEach((fieldName) => {\n const field = dm1FieldStoreFieldObj[fieldName];\n schema.push(extend2({}, field.schema()));\n schemaNameArr.push(field.schema().name);\n });\n\n /**\n * The helper function to create the data.\n *\n * @param {dm} dm - The dm instance for which the data is inserted.\n * @param {Object} fieldsObj - The fieldStore object format.\n * @param {boolean} addData - If true only tuple will be added to the data.\n */\n function prepareDataHelper(dm, fieldsObj, addData) {\n rowDiffsetIterator(dm._rowDiffset, (i) => {\n const tuple = {};\n let hashData = '';\n schemaNameArr.forEach((schemaName) => {\n const value = fieldsObj[schemaName].partialField.data[i];\n hashData += `-${value}`;\n tuple[schemaName] = value;\n });\n if (!hashTable[hashData]) {\n if (addData) { data.push(tuple); }\n hashTable[hashData] = true;\n }\n });\n }\n\n // Prepare the data\n prepareDataHelper(dm2, dm2FieldStoreFieldObj, false);\n prepareDataHelper(dm1, dm1FieldStoreFieldObj, true);\n\n return new DataModel(data, schema, { name });\n}\n\n","import { isArray } from '../utils';\nimport InvalidAwareTypes from '../invalid-aware-types';\nimport { GROUP_BY_FUNCTIONS } from '../enums';\n\nconst { SUM, AVG, FIRST, LAST, COUNT, STD, MIN, MAX } = GROUP_BY_FUNCTIONS;\n\nfunction getFilteredValues(arr) {\n return arr.filter(item => !(item instanceof InvalidAwareTypes));\n}\n/**\n * Reducer function that returns the sum of all the values.\n *\n * @public\n * @param {Array.} arr - The input array.\n * @return {number} Returns the sum of the array.\n */\nfunction sum (arr) {\n if (isArray(arr) && !(arr[0] instanceof Array)) {\n const filteredNumber = getFilteredValues(arr);\n const totalSum = filteredNumber.length ?\n filteredNumber.reduce((acc, curr) => acc + curr, 0)\n : InvalidAwareTypes.NULL;\n return totalSum;\n }\n return InvalidAwareTypes.NULL;\n}\n\n/**\n * Reducer function that returns the average of all the values.\n *\n * @public\n * @param {Array.} arr - The input array.\n * @return {number} Returns the mean value of the array.\n */\nfunction avg (arr) {\n if (isArray(arr) && !(arr[0] instanceof Array)) {\n const totalSum = sum(arr);\n const len = arr.length || 1;\n return (Number.isNaN(totalSum) || totalSum instanceof InvalidAwareTypes) ?\n InvalidAwareTypes.NULL : totalSum / len;\n }\n return InvalidAwareTypes.NULL;\n}\n\n/**\n * Reducer function that gives the min value amongst all the values.\n *\n * @public\n * @param {Array.} arr - The input array.\n * @return {number} Returns the minimum value of the array.\n */\nfunction min (arr) {\n if (isArray(arr) && !(arr[0] instanceof Array)) {\n // Filter out undefined, null and NaN values\n const filteredValues = getFilteredValues(arr);\n\n return (filteredValues.length) ? Math.min(...filteredValues) : InvalidAwareTypes.NULL;\n }\n return InvalidAwareTypes.NULL;\n}\n\n/**\n * Reducer function that gives the max value amongst all the values.\n *\n * @public\n * @param {Array.} arr - The input array.\n * @return {number} Returns the maximum value of the array.\n */\nfunction max (arr) {\n if (isArray(arr) && !(arr[0] instanceof Array)) {\n // Filter out undefined, null and NaN values\n const filteredValues = getFilteredValues(arr);\n\n return (filteredValues.length) ? Math.max(...filteredValues) : InvalidAwareTypes.NULL;\n }\n return InvalidAwareTypes.NULL;\n}\n\n/**\n * Reducer function that gives the first value of the array.\n *\n * @public\n * @param {Array} arr - The input array.\n * @return {number} Returns the first value of the array.\n */\nfunction first (arr) {\n return arr[0];\n}\n\n/**\n * Reducer function that gives the last value of the array.\n *\n * @public\n * @param {Array} arr - The input array.\n * @return {number} Returns the last value of the array.\n */\nfunction last (arr) {\n return arr[arr.length - 1];\n}\n\n/**\n * Reducer function that gives the count value of the array.\n *\n * @public\n * @param {Array} arr - The input array.\n * @return {number} Returns the length of the array.\n */\nfunction count (arr) {\n if (isArray(arr)) {\n return arr.length;\n }\n return InvalidAwareTypes.NULL;\n}\n\n/**\n * Calculates the variance of the input array.\n *\n * @param {Array.} arr - The input array.\n * @return {number} Returns the variance of the input array.\n */\nfunction variance (arr) {\n let mean = avg(arr);\n return avg(arr.map(num => (num - mean) ** 2));\n}\n\n/**\n * Calculates the square root of the variance of the input array.\n *\n * @public\n * @param {Array.} arr - The input array.\n * @return {number} Returns the square root of the variance.\n */\nfunction std (arr) {\n return Math.sqrt(variance(arr));\n}\n\n\nconst fnList = {\n [SUM]: sum,\n [AVG]: avg,\n [MIN]: min,\n [MAX]: max,\n [FIRST]: first,\n [LAST]: last,\n [COUNT]: count,\n [STD]: std\n};\n\nconst defaultReducerName = SUM;\n\nexport {\n defaultReducerName,\n sum as defReducer,\n fnList,\n};\n","import { defReducer, fnList } from '../operator';\n\n/**\n * A page level storage which stores, registers, unregisters reducers for all the datamodel instances. There is only one\n * reducer store available in a page. All the datamodel instances receive same instance of reducer store. DataModel\n * out of the box provides handful of {@link reducer | reducers} which can be used as reducer funciton.\n *\n * @public\n * @namespace DataModel\n */\nclass ReducerStore {\n constructor () {\n this.store = new Map();\n this.store.set('defReducer', defReducer);\n\n Object.entries(fnList).forEach((key) => {\n this.store.set(key[0], key[1]);\n });\n }\n\n /**\n * Changes the `defaultReducer` globally. For all the fields which does not have `defAggFn` mentioned in schema, the\n * value of `defaultReducer` is used for aggregation.\n *\n * @public\n * @param {string} [reducer='sum'] - The name of the default reducer. It picks up the definition from store by doing\n * name lookup. If no name is found then it takes `sum` as the default reducer.\n * @return {ReducerStore} Returns instance of the singleton store in page.\n */\n defaultReducer (...params) {\n if (!params.length) {\n return this.store.get('defReducer');\n }\n\n let reducer = params[0];\n\n if (typeof reducer === 'function') {\n this.store.set('defReducer', reducer);\n } else {\n reducer = String(reducer);\n if (Object.keys(fnList).indexOf(reducer) !== -1) {\n this.store.set('defReducer', fnList[reducer]);\n } else {\n throw new Error(`Reducer ${reducer} not found in registry`);\n }\n }\n return this;\n }\n\n /**\n *\n * Registers a {@link reducer | reducer}.\n * A {@link reducer | reducer} has to be registered before it is used.\n *\n * @example\n * // find the mean squared value of a given set\n * const reducerStore = DataModel.Reducers();\n *\n * reducers.register('meanSquared', (arr) => {\n * const squaredVal = arr.map(item => item * item);\n * let sum = 0;\n * for (let i = 0, l = squaredVal.length; i < l; i++) {\n * sum += squaredVal[i++];\n * }\n *\n * return sum;\n * })\n *\n * // datamodel (dm) is already prepared with cars.json\n * const dm1 = dm.groupBy(['origin'], {\n * accleration: 'meanSquared'\n * });\n *\n * @public\n *\n * @param {string} name formal name for a reducer. If the given name already exists in store it is overridden by new\n * definition.\n * @param {Function} reducer definition of {@link reducer} function.\n *\n * @return {Function} function for unregistering the reducer.\n */\n register (name, reducer) {\n if (typeof reducer !== 'function') {\n throw new Error('Reducer should be a function');\n }\n\n name = String(name);\n this.store.set(name, reducer);\n\n return () => { this.__unregister(name); };\n }\n\n __unregister (name) {\n if (this.store.has(name)) {\n this.store.delete(name);\n }\n }\n\n resolve (name) {\n if (name instanceof Function) {\n return name;\n }\n return this.store.get(name);\n }\n}\n\nconst reducerStore = (function () {\n let store = null;\n\n function getStore () {\n if (store === null) {\n store = new ReducerStore();\n }\n return store;\n }\n return getStore();\n}());\n\nexport default reducerStore;\n","import { getCommonSchema } from './get-common-schema';\n\n/**\n * The filter function used in natural join.\n * It generates a function that will have the logic to join two\n * DataModel instances by the process of natural join.\n *\n * @param {DataModel} dm1 - The left DataModel instance.\n * @param {DataModel} dm2 - The right DataModel instance.\n * @return {Function} Returns a function that is used in cross-product operation.\n */\nexport function naturalJoinFilter (dm1, dm2) {\n const dm1FieldStore = dm1.getFieldspace();\n const dm2FieldStore = dm2.getFieldspace();\n // const dm1FieldStoreName = dm1FieldStore.name;\n // const dm2FieldStoreName = dm2FieldStore.name;\n const commonSchemaArr = getCommonSchema(dm1FieldStore, dm2FieldStore);\n\n return (dm1Fields, dm2Fields) => {\n let retainTuple = true;\n commonSchemaArr.forEach((fieldName) => {\n if (dm1Fields[fieldName].value ===\n dm2Fields[fieldName].value && retainTuple) {\n retainTuple = true;\n } else {\n retainTuple = false;\n }\n });\n return retainTuple;\n };\n}\n","import DataModel from '../export';\nimport { extend2 } from '../utils';\nimport { rowDiffsetIterator } from './row-diffset-iterator';\nimport { isArrEqual } from '../utils/helper';\n/**\n * Performs the union operation between two dm instances.\n *\n * @param {dm} dm1 - The first dm instance.\n * @param {dm} dm2 - The second dm instance.\n * @return {dm} Returns the newly created dm after union operation.\n */\nexport function union (dm1, dm2) {\n const hashTable = {};\n const schema = [];\n const schemaNameArr = [];\n const data = [];\n const dm1FieldStore = dm1.getFieldspace();\n const dm2FieldStore = dm2.getFieldspace();\n const dm1FieldStoreFieldObj = dm1FieldStore.fieldsObj();\n const dm2FieldStoreFieldObj = dm2FieldStore.fieldsObj();\n const name = `${dm1FieldStore.name} union ${dm2FieldStore.name}`;\n\n // For union the columns should match otherwise return a clone of the dm1\n if (!isArrEqual(dm1._colIdentifier.split(',').sort(), dm2._colIdentifier.split(',').sort())) {\n return null;\n }\n\n // Prepare the schema\n (dm1._colIdentifier.split(',')).forEach((fieldName) => {\n const field = dm1FieldStoreFieldObj[fieldName];\n schema.push(extend2({}, field.schema()));\n schemaNameArr.push(field.schema().name);\n });\n\n /**\n * The helper function to create the data.\n *\n * @param {dm} dm - The dm instance for which the data is inserted.\n * @param {Object} fieldsObj - The fieldStore object format.\n */\n function prepareDataHelper (dm, fieldsObj) {\n rowDiffsetIterator(dm._rowDiffset, (i) => {\n const tuple = {};\n let hashData = '';\n schemaNameArr.forEach((schemaName) => {\n const value = fieldsObj[schemaName].partialField.data[i];\n hashData += `-${value}`;\n tuple[schemaName] = value;\n });\n if (!hashTable[hashData]) {\n data.push(tuple);\n hashTable[hashData] = true;\n }\n });\n }\n\n // Prepare the data\n prepareDataHelper(dm1, dm1FieldStoreFieldObj);\n prepareDataHelper(dm2, dm2FieldStoreFieldObj);\n\n return new DataModel(data, schema, { name });\n}\n","import { crossProduct } from './cross-product';\nimport { JOINS } from '../constants';\nimport { union } from './union';\n\n\nexport function leftOuterJoin (dataModel1, dataModel2, filterFn) {\n return crossProduct(dataModel1, dataModel2, filterFn, false, JOINS.LEFTOUTER);\n}\n\nexport function rightOuterJoin (dataModel1, dataModel2, filterFn) {\n return crossProduct(dataModel2, dataModel1, filterFn, false, JOINS.RIGHTOUTER);\n}\n\nexport function fullOuterJoin (dataModel1, dataModel2, filterFn) {\n return union(leftOuterJoin(dataModel1, dataModel2, filterFn), rightOuterJoin(dataModel1, dataModel2, filterFn));\n}\n","import { rowDiffsetIterator } from '../../operator/row-diffset-iterator';\n\n/**\n * In {@link DataModel}, every tabular data consists of column, a column is stored as field.\n * Field contains all the data for a given column in an array.\n *\n * Each record consists of several fields; the fields of all records form the columns.\n * Examples of fields: name, gender, sex etc.\n *\n * In DataModel, each field can have multiple attributes which describes its data and behaviour.\n * A field can have two types of data: Measure and Dimension.\n *\n * A Dimension Field is the context on which a data is categorized and the measure is the numerical values that\n * quantify the data set.\n * In short a dimension is the lens through which you are looking at your measure data.\n *\n * Refer to {@link Schema} to get info about possible field attributes.\n *\n * @public\n * @class\n */\nexport default class Field {\n /**\n * Initialize a new instance.\n *\n * @public\n * @param {PartialField} partialField - The partialField instance which holds the whole data.\n * @param {string} rowDiffset - The data subset definition.\n */\n constructor (partialField, rowDiffset) {\n this.partialField = partialField;\n this.rowDiffset = rowDiffset;\n }\n\n /**\n * Generates the field type specific domain.\n *\n * @public\n * @abstract\n */\n domain () {\n throw new Error('Not yet implemented');\n }\n\n /**\n * Returns the the field schema.\n *\n * @public\n * @return {string} Returns the field schema.\n */\n schema () {\n return this.partialField.schema;\n }\n\n /**\n * Returns the name of the field.\n *\n * @public\n * @return {string} Returns the name of the field.\n */\n name () {\n return this.partialField.name;\n }\n\n /**\n * Returns the type of the field.\n *\n * @public\n * @return {string} Returns the type of the field.\n */\n type () {\n return this.partialField.schema.type;\n }\n\n /**\n * Returns the subtype of the field.\n *\n * @public\n * @return {string} Returns the subtype of the field.\n */\n subtype () {\n return this.partialField.schema.subtype;\n }\n\n /**\n * Returns the description of the field.\n *\n * @public\n * @return {string} Returns the description of the field.\n */\n description () {\n return this.partialField.schema.description;\n }\n\n /**\n * Returns the display name of the field.\n *\n * @public\n * @return {string} Returns the display name of the field.\n */\n displayName () {\n return this.partialField.schema.displayName || this.partialField.schema.name;\n }\n\n /**\n * Returns the data associated with the field.\n *\n * @public\n * @return {Array} Returns the data.\n */\n data () {\n const data = [];\n rowDiffsetIterator(this.rowDiffset, (i) => {\n data.push(this.partialField.data[i]);\n });\n return data;\n }\n\n /**\n * Returns the formatted version of the underlying field data.\n *\n * @public\n * @abstract\n */\n formattedData () {\n throw new Error('Not yet implemented');\n }\n}\n","import Field from '../field';\n\n/**\n * Represents dimension field type.\n *\n * @public\n * @class\n * @extends Field\n */\nexport default class Dimension extends Field {\n /**\n * Returns the domain for the dimension field.\n *\n * @override\n * @public\n * @return {any} Returns the calculated domain.\n */\n domain () {\n if (!this._cachedDomain) {\n this._cachedDomain = this.calculateDataDomain();\n }\n return this._cachedDomain;\n }\n\n /**\n * Calculates the corresponding field domain.\n *\n * @public\n * @abstract\n */\n calculateDataDomain () {\n throw new Error('Not yet implemented');\n }\n\n /**\n * Returns the formatted version of the underlying field data.\n *\n * @public\n * @override\n * @return {Array} Returns the formatted data.\n */\n formattedData () {\n return this.data();\n }\n}\n","import { rowDiffsetIterator } from '../../operator/row-diffset-iterator';\nimport { DimensionSubtype } from '../../enums';\nimport Dimension from '../dimension';\n/**\n * Represents categorical field subtype.\n *\n * @public\n * @class\n * @extends Dimension\n */\nexport default class Categorical extends Dimension {\n /**\n * Returns the subtype of the field.\n *\n * @public\n * @override\n * @return {string} Returns the subtype of the field.\n */\n subtype () {\n return DimensionSubtype.CATEGORICAL;\n }\n\n /**\n * Calculates the corresponding field domain.\n *\n * @public\n * @override\n * @return {Array} Returns the unique values.\n */\n calculateDataDomain () {\n const hash = new Set();\n const domain = [];\n\n // here don't use this.data() as the iteration will be occurred two times on same data.\n rowDiffsetIterator(this.rowDiffset, (i) => {\n const datum = this.partialField.data[i];\n if (!hash.has(datum)) {\n hash.add(datum);\n domain.push(datum);\n }\n });\n return domain;\n }\n}\n","import { rowDiffsetIterator } from '../../operator/row-diffset-iterator';\nimport Dimension from '../dimension';\nimport { DateTimeFormatter } from '../../utils';\nimport InvalidAwareTypes from '../../invalid-aware-types';\n\n/**\n * Represents temporal field subtype.\n *\n * @public\n * @class\n * @extends Dimension\n */\nexport default class Temporal extends Dimension {\n /**\n * Initialize a new instance.\n *\n * @public\n * @param {PartialField} partialField - The partialField instance which holds the whole data.\n * @param {string} rowDiffset - The data subset definition.\n */\n constructor (partialField, rowDiffset) {\n super(partialField, rowDiffset);\n\n this._cachedMinDiff = null;\n }\n\n /**\n * Calculates the corresponding field domain.\n *\n * @public\n * @override\n * @return {Array} Returns the unique values.\n */\n calculateDataDomain () {\n const hash = new Set();\n const domain = [];\n\n // here don't use this.data() as the iteration will be\n // occurred two times on same data.\n rowDiffsetIterator(this.rowDiffset, (i) => {\n const datum = this.partialField.data[i];\n if (!hash.has(datum)) {\n hash.add(datum);\n domain.push(datum);\n }\n });\n\n return domain;\n }\n\n\n /**\n * Calculates the minimum consecutive difference from the associated field data.\n *\n * @public\n * @return {number} Returns the minimum consecutive diff in milliseconds.\n */\n minimumConsecutiveDifference () {\n if (this._cachedMinDiff) {\n return this._cachedMinDiff;\n }\n\n const sortedData = this.data().filter(item => !(item instanceof InvalidAwareTypes)).sort((a, b) => a - b);\n const arrLn = sortedData.length;\n let minDiff = Number.POSITIVE_INFINITY;\n let prevDatum;\n let nextDatum;\n let processedCount = 0;\n\n for (let i = 1; i < arrLn; i++) {\n prevDatum = sortedData[i - 1];\n nextDatum = sortedData[i];\n\n if (nextDatum === prevDatum) {\n continue;\n }\n\n minDiff = Math.min(minDiff, nextDatum - sortedData[i - 1]);\n processedCount++;\n }\n\n if (!processedCount) {\n minDiff = null;\n }\n this._cachedMinDiff = minDiff;\n\n return this._cachedMinDiff;\n }\n\n /**\n * Returns the format specified in the input schema while creating field.\n *\n * @public\n * @return {string} Returns the datetime format.\n */\n format () {\n return this.partialField.schema.format;\n }\n\n /**\n * Returns the formatted version of the underlying field data.\n *\n * @public\n * @override\n * @return {Array} Returns the formatted data.\n */\n formattedData () {\n const data = [];\n rowDiffsetIterator(this.rowDiffset, (i) => {\n const datum = this.partialField.data[i];\n if (datum instanceof InvalidAwareTypes) {\n data.push(datum);\n } else {\n data.push(DateTimeFormatter.formatAs(datum, this.format()));\n }\n });\n return data;\n }\n}\n\n","import Dimension from '../dimension';\n\n/**\n * Represents binned field subtype.\n *\n * @public\n * @class\n * @extends Dimension\n */\nexport default class Binned extends Dimension {\n /**\n * Calculates the corresponding field domain.\n *\n * @public\n * @override\n * @return {Array} Returns the last and first values of bins config array.\n */\n calculateDataDomain () {\n const binsArr = this.partialField.schema.bins;\n return [binsArr[0], binsArr[binsArr.length - 1]];\n }\n\n /**\n * Returns the bins config provided while creating the field instance.\n *\n * @public\n * @return {Array} Returns the bins array config.\n */\n bins () {\n return this.partialField.schema.bins;\n }\n}\n","import { formatNumber } from '../../utils';\nimport { defaultReducerName } from '../../operator/group-by-function';\nimport Field from '../field';\n\n/**\n * Represents measure field type.\n *\n * @public\n * @class\n * @extends Field\n */\nexport default class Measure extends Field {\n /**\n * Returns the domain for the measure field.\n *\n * @override\n * @public\n * @return {any} Returns the calculated domain.\n */\n domain () {\n if (!this._cachedDomain) {\n this._cachedDomain = this.calculateDataDomain();\n }\n return this._cachedDomain;\n }\n\n /**\n * Returns the unit of the measure field.\n *\n * @public\n * @return {string} Returns unit of the field.\n */\n unit () {\n return this.partialField.schema.unit;\n }\n\n /**\n * Returns the aggregation function name of the measure field.\n *\n * @public\n * @return {string} Returns aggregation function name of the field.\n */\n defAggFn () {\n return this.partialField.schema.defAggFn || defaultReducerName;\n }\n\n /**\n * Returns the number format of the measure field.\n *\n * @public\n * @return {Function} Returns number format of the field.\n */\n numberFormat () {\n const { numberFormat } = this.partialField.schema;\n return numberFormat instanceof Function ? numberFormat : formatNumber;\n }\n\n /**\n * Calculates the corresponding field domain.\n *\n * @public\n * @abstract\n */\n calculateDataDomain () {\n throw new Error('Not yet implemented');\n }\n\n /**\n * Returns the formatted version of the underlying field data.\n *\n * @public\n * @override\n * @return {Array} Returns the formatted data.\n */\n formattedData () {\n return this.data();\n }\n}\n","import { rowDiffsetIterator } from '../../operator/row-diffset-iterator';\nimport { MeasureSubtype } from '../../enums';\nimport Measure from '../measure';\nimport InvalidAwareTypes from '../../invalid-aware-types';\n\n/**\n * Represents continuous field subtype.\n *\n * @public\n * @class\n * @extends Measure\n */\nexport default class Continuous extends Measure {\n /**\n * Returns the subtype of the field.\n *\n * @public\n * @override\n * @return {string} Returns the subtype of the field.\n */\n subtype () {\n return MeasureSubtype.CONTINUOUS;\n }\n\n /**\n * Calculates the corresponding field domain.\n *\n * @public\n * @override\n * @return {Array} Returns the min and max values.\n */\n calculateDataDomain () {\n let min = Number.POSITIVE_INFINITY;\n let max = Number.NEGATIVE_INFINITY;\n\n // here don't use this.data() as the iteration will be occurred two times on same data.\n rowDiffsetIterator(this.rowDiffset, (i) => {\n const datum = this.partialField.data[i];\n if (datum instanceof InvalidAwareTypes) {\n return;\n }\n\n if (datum < min) {\n min = datum;\n }\n if (datum > max) {\n max = datum;\n }\n });\n\n return [min, max];\n }\n}\n","/**\n * A interface to represent a parser which is responsible to parse the field.\n *\n * @public\n * @interface\n */\nexport default class FieldParser {\n /**\n * Parses a single value of a field and return the sanitized form.\n *\n * @public\n * @abstract\n */\n parse () {\n throw new Error('Not yet implemented');\n }\n}\n","import FieldParser from '../field-parser';\nimport InvalidAwareTypes from '../../../invalid-aware-types';\n\n/**\n * A FieldParser which parses the categorical values.\n *\n * @public\n * @class\n * @implements {FieldParser}\n */\nexport default class CategoricalParser extends FieldParser {\n /**\n * Parses a single value of a field and returns the stringified form.\n *\n * @public\n * @param {string|number} val - The value of the field.\n * @return {string} Returns the stringified value.\n */\n parse (val) {\n let result;\n // check if invalid date value\n if (!InvalidAwareTypes.isInvalid(val)) {\n result = String(val).trim();\n } else {\n result = InvalidAwareTypes.getInvalidType(val);\n }\n return result;\n }\n}\n","import { DateTimeFormatter } from '../../../utils';\nimport FieldParser from '../field-parser';\nimport InvalidAwareTypes from '../../../invalid-aware-types';\n\n/**\n * A FieldParser which parses the temporal values.\n *\n * @public\n * @class\n * @implements {FieldParser}\n */\nexport default class TemporalParser extends FieldParser {\n /**\n * Initialize a new instance.\n *\n * @public\n * @param {Object} schema - The schema object for the corresponding field.\n */\n constructor (schema) {\n super();\n this.schema = schema;\n this._dtf = new DateTimeFormatter(this.schema.format);\n }\n\n /**\n * Parses a single value of a field and returns the millisecond value.\n *\n * @public\n * @param {string|number} val - The value of the field.\n * @return {number} Returns the millisecond value.\n */\n parse (val) {\n let result;\n // check if invalid date value\n if (!InvalidAwareTypes.isInvalid(val)) {\n let nativeDate = this._dtf.getNativeDate(val);\n result = nativeDate ? nativeDate.getTime() : InvalidAwareTypes.NA;\n } else {\n result = InvalidAwareTypes.getInvalidType(val);\n }\n return result;\n }\n}\n","import FieldParser from '../field-parser';\nimport InvalidAwareTypes from '../../../invalid-aware-types';\n\n/**\n * A FieldParser which parses the binned values.\n *\n * @public\n * @class\n * @implements {FieldParser}\n */\nexport default class BinnedParser extends FieldParser {\n /**\n * Parses a single binned value of a field and returns the sanitized value.\n *\n * @public\n * @param {string} val - The value of the field.\n * @return {string} Returns the sanitized value.\n */\n parse (val) {\n const regex = /^\\s*([+-]?\\d+(?:\\.\\d+)?)\\s*-\\s*([+-]?\\d+(?:\\.\\d+)?)\\s*$/;\n val = String(val);\n let result;\n // check if invalid date value\n if (!InvalidAwareTypes.isInvalid(val)) {\n let matched = val.match(regex);\n result = matched ? `${Number.parseFloat(matched[1])}-${Number.parseFloat(matched[2])}`\n : InvalidAwareTypes.NA;\n } else {\n result = InvalidAwareTypes.getInvalidType(val);\n }\n return result;\n }\n}\n","import FieldParser from '../field-parser';\nimport InvalidAwareTypes from '../../../invalid-aware-types';\n\n/**\n * A FieldParser which parses the continuous values.\n *\n * @public\n * @class\n * @implements {FieldParser}\n */\nexport default class ContinuousParser extends FieldParser {\n /**\n * Parses a single value of a field and returns the number form.\n *\n * @public\n * @param {string|number} val - The value of the field.\n * @return {string} Returns the number value.\n */\n parse (val) {\n let result;\n // check if invalid date value\n if (!InvalidAwareTypes.isInvalid(val)) {\n let parsedVal = parseFloat(val, 10);\n result = Number.isNaN(parsedVal) ? InvalidAwareTypes.NA : parsedVal;\n } else {\n result = InvalidAwareTypes.getInvalidType(val);\n }\n return result;\n }\n}\n","/**\n * Stores the full data and the metadata of a field. It provides\n * a single source of data from which the future Field\n * instance can get a subset of it with a rowDiffset config.\n *\n * @class\n * @public\n */\nexport default class PartialField {\n /**\n * Initialize a new instance.\n *\n * @public\n * @param {string} name - The name of the field.\n * @param {Array} data - The data array.\n * @param {Object} schema - The schema object of the corresponding field.\n * @param {FieldParser} parser - The parser instance corresponding to that field.\n */\n constructor (name, data, schema, parser) {\n this.name = name;\n this.schema = schema;\n this.parser = parser;\n this.data = this._sanitize(data);\n }\n\n /**\n * Sanitizes the field data.\n *\n * @private\n * @param {Array} data - The actual input data.\n * @return {Array} Returns the sanitized data.\n */\n _sanitize (data) {\n return data.map(datum => this.parser.parse(datum));\n }\n}\n","import { FieldType, DimensionSubtype, MeasureSubtype } from './enums';\nimport {\n Categorical,\n Temporal,\n Binned,\n Continuous,\n CategoricalParser,\n TemporalParser,\n BinnedParser,\n ContinuousParser,\n PartialField\n} from './fields';\n\n/**\n * Creates a field instance according to the provided data and schema.\n *\n * @param {Array} data - The field data array.\n * @param {Object} schema - The field schema object.\n * @return {Field} Returns the newly created field instance.\n */\nfunction createUnitField(data, schema) {\n data = data || [];\n let partialField;\n\n switch (schema.type) {\n case FieldType.MEASURE:\n switch (schema.subtype) {\n case MeasureSubtype.CONTINUOUS:\n partialField = new PartialField(schema.name, data, schema, new ContinuousParser());\n return new Continuous(partialField, `0-${data.length - 1}`);\n default:\n partialField = new PartialField(schema.name, data, schema, new ContinuousParser());\n return new Continuous(partialField, `0-${data.length - 1}`);\n }\n case FieldType.DIMENSION:\n switch (schema.subtype) {\n case DimensionSubtype.CATEGORICAL:\n partialField = new PartialField(schema.name, data, schema, new CategoricalParser());\n return new Categorical(partialField, `0-${data.length - 1}`);\n case DimensionSubtype.TEMPORAL:\n partialField = new PartialField(schema.name, data, schema, new TemporalParser(schema));\n return new Temporal(partialField, `0-${data.length - 1}`);\n case DimensionSubtype.BINNED:\n partialField = new PartialField(schema.name, data, schema, new BinnedParser());\n return new Binned(partialField, `0-${data.length - 1}`);\n default:\n partialField = new PartialField(schema.name, data, schema, new CategoricalParser());\n return new Categorical(partialField, `0-${data.length - 1}`);\n }\n default:\n partialField = new PartialField(schema.name, data, schema, new CategoricalParser());\n return new Categorical(partialField, `0-${data.length - 1}`);\n }\n}\n\n\n/**\n * Creates a field instance from partialField and rowDiffset.\n *\n * @param {PartialField} partialField - The corresponding partial field.\n * @param {string} rowDiffset - The data subset config.\n * @return {Field} Returns the newly created field instance.\n */\nexport function createUnitFieldFromPartial(partialField, rowDiffset) {\n const { schema } = partialField;\n\n switch (schema.type) {\n case FieldType.MEASURE:\n switch (schema.subtype) {\n case MeasureSubtype.CONTINUOUS:\n return new Continuous(partialField, rowDiffset);\n default:\n return new Continuous(partialField, rowDiffset);\n }\n case FieldType.DIMENSION:\n switch (schema.subtype) {\n case DimensionSubtype.CATEGORICAL:\n return new Categorical(partialField, rowDiffset);\n case DimensionSubtype.TEMPORAL:\n return new Temporal(partialField, rowDiffset);\n case DimensionSubtype.BINNED:\n return new Binned(partialField, rowDiffset);\n default:\n return new Categorical(partialField, rowDiffset);\n }\n default:\n return new Categorical(partialField, rowDiffset);\n }\n}\n\n/**\n * Creates the field instances with input data and schema.\n *\n * @param {Array} dataColumn - The data array for fields.\n * @param {Array} schema - The schema array for fields.\n * @param {Array} headers - The array of header names.\n * @return {Array.} Returns an array of newly created field instances.\n */\nexport function createFields(dataColumn, schema, headers) {\n const headersObj = {};\n\n if (!(headers && headers.length)) {\n headers = schema.map(item => item.name);\n }\n\n headers.forEach((header, i) => {\n headersObj[header] = i;\n });\n\n return schema.map(item => createUnitField(dataColumn[headersObj[item.name]], item));\n}\n","import { DataFormat } from './enums';\n\nexport default {\n dataFormat: DataFormat.AUTO\n};\n","import { columnMajor } from '../utils';\n\n/**\n * Parses and converts data formatted in DSV array to a manageable internal format.\n *\n * @param {Array.} arr - A 2D array containing of the DSV data.\n * @param {Object} options - Option to control the behaviour of the parsing.\n * @param {boolean} [options.firstRowHeader=true] - Whether the first row of the dsv data is header or not.\n * @return {Array} Returns an array of headers and column major data.\n * @example\n *\n * // Sample input data:\n * const data = [\n * [\"a\", \"b\", \"c\"],\n * [1, 2, 3],\n * [4, 5, 6],\n * [7, 8, 9]\n * ];\n */\nfunction DSVArr (arr, options) {\n const defaultOption = {\n firstRowHeader: true,\n };\n options = Object.assign({}, defaultOption, options);\n\n let header;\n const columns = [];\n const push = columnMajor(columns);\n\n if (options.firstRowHeader) {\n // If header present then mutate the array.\n // Do in-place mutation to save space.\n header = arr.splice(0, 1)[0];\n } else {\n header = [];\n }\n\n arr.forEach(field => push(...field));\n\n return [header, columns];\n}\n\nexport default DSVArr;\n","var EOL = {},\n EOF = {},\n QUOTE = 34,\n NEWLINE = 10,\n RETURN = 13;\n\nfunction objectConverter(columns) {\n return new Function(\"d\", \"return {\" + columns.map(function(name, i) {\n return JSON.stringify(name) + \": d[\" + i + \"]\";\n }).join(\",\") + \"}\");\n}\n\nfunction customConverter(columns, f) {\n var object = objectConverter(columns);\n return function(row, i) {\n return f(object(row), i, columns);\n };\n}\n\n// Compute unique columns in order of discovery.\nfunction inferColumns(rows) {\n var columnSet = Object.create(null),\n columns = [];\n\n rows.forEach(function(row) {\n for (var column in row) {\n if (!(column in columnSet)) {\n columns.push(columnSet[column] = column);\n }\n }\n });\n\n return columns;\n}\n\nfunction pad(value, width) {\n var s = value + \"\", length = s.length;\n return length < width ? new Array(width - length + 1).join(0) + s : s;\n}\n\nfunction formatYear(year) {\n return year < 0 ? \"-\" + pad(-year, 6)\n : year > 9999 ? \"+\" + pad(year, 6)\n : pad(year, 4);\n}\n\nfunction formatDate(date) {\n var hours = date.getUTCHours(),\n minutes = date.getUTCMinutes(),\n seconds = date.getUTCSeconds(),\n milliseconds = date.getUTCMilliseconds();\n return isNaN(date) ? \"Invalid Date\"\n : formatYear(date.getUTCFullYear(), 4) + \"-\" + pad(date.getUTCMonth() + 1, 2) + \"-\" + pad(date.getUTCDate(), 2)\n + (milliseconds ? \"T\" + pad(hours, 2) + \":\" + pad(minutes, 2) + \":\" + pad(seconds, 2) + \".\" + pad(milliseconds, 3) + \"Z\"\n : seconds ? \"T\" + pad(hours, 2) + \":\" + pad(minutes, 2) + \":\" + pad(seconds, 2) + \"Z\"\n : minutes || hours ? \"T\" + pad(hours, 2) + \":\" + pad(minutes, 2) + \"Z\"\n : \"\");\n}\n\nexport default function(delimiter) {\n var reFormat = new RegExp(\"[\\\"\" + delimiter + \"\\n\\r]\"),\n DELIMITER = delimiter.charCodeAt(0);\n\n function parse(text, f) {\n var convert, columns, rows = parseRows(text, function(row, i) {\n if (convert) return convert(row, i - 1);\n columns = row, convert = f ? customConverter(row, f) : objectConverter(row);\n });\n rows.columns = columns || [];\n return rows;\n }\n\n function parseRows(text, f) {\n var rows = [], // output rows\n N = text.length,\n I = 0, // current character index\n n = 0, // current line number\n t, // current token\n eof = N <= 0, // current token followed by EOF?\n eol = false; // current token followed by EOL?\n\n // Strip the trailing newline.\n if (text.charCodeAt(N - 1) === NEWLINE) --N;\n if (text.charCodeAt(N - 1) === RETURN) --N;\n\n function token() {\n if (eof) return EOF;\n if (eol) return eol = false, EOL;\n\n // Unescape quotes.\n var i, j = I, c;\n if (text.charCodeAt(j) === QUOTE) {\n while (I++ < N && text.charCodeAt(I) !== QUOTE || text.charCodeAt(++I) === QUOTE);\n if ((i = I) >= N) eof = true;\n else if ((c = text.charCodeAt(I++)) === NEWLINE) eol = true;\n else if (c === RETURN) { eol = true; if (text.charCodeAt(I) === NEWLINE) ++I; }\n return text.slice(j + 1, i - 1).replace(/\"\"/g, \"\\\"\");\n }\n\n // Find next delimiter or newline.\n while (I < N) {\n if ((c = text.charCodeAt(i = I++)) === NEWLINE) eol = true;\n else if (c === RETURN) { eol = true; if (text.charCodeAt(I) === NEWLINE) ++I; }\n else if (c !== DELIMITER) continue;\n return text.slice(j, i);\n }\n\n // Return last token before EOF.\n return eof = true, text.slice(j, N);\n }\n\n while ((t = token()) !== EOF) {\n var row = [];\n while (t !== EOL && t !== EOF) row.push(t), t = token();\n if (f && (row = f(row, n++)) == null) continue;\n rows.push(row);\n }\n\n return rows;\n }\n\n function preformatBody(rows, columns) {\n return rows.map(function(row) {\n return columns.map(function(column) {\n return formatValue(row[column]);\n }).join(delimiter);\n });\n }\n\n function format(rows, columns) {\n if (columns == null) columns = inferColumns(rows);\n return [columns.map(formatValue).join(delimiter)].concat(preformatBody(rows, columns)).join(\"\\n\");\n }\n\n function formatBody(rows, columns) {\n if (columns == null) columns = inferColumns(rows);\n return preformatBody(rows, columns).join(\"\\n\");\n }\n\n function formatRows(rows) {\n return rows.map(formatRow).join(\"\\n\");\n }\n\n function formatRow(row) {\n return row.map(formatValue).join(delimiter);\n }\n\n function formatValue(value) {\n return value == null ? \"\"\n : value instanceof Date ? formatDate(value)\n : reFormat.test(value += \"\") ? \"\\\"\" + value.replace(/\"/g, \"\\\"\\\"\") + \"\\\"\"\n : value;\n }\n\n return {\n parse: parse,\n parseRows: parseRows,\n format: format,\n formatBody: formatBody,\n formatRows: formatRows\n };\n}\n","import dsv from \"./dsv\";\n\nvar csv = dsv(\",\");\n\nexport var csvParse = csv.parse;\nexport var csvParseRows = csv.parseRows;\nexport var csvFormat = csv.format;\nexport var csvFormatBody = csv.formatBody;\nexport var csvFormatRows = csv.formatRows;\n","import dsv from \"./dsv\";\n\nvar tsv = dsv(\"\\t\");\n\nexport var tsvParse = tsv.parse;\nexport var tsvParseRows = tsv.parseRows;\nexport var tsvFormat = tsv.format;\nexport var tsvFormatBody = tsv.formatBody;\nexport var tsvFormatRows = tsv.formatRows;\n","import { dsvFormat as d3Dsv } from 'd3-dsv';\nimport DSVArr from './dsv-arr';\n\n/**\n * Parses and converts data formatted in DSV string to a manageable internal format.\n *\n * @todo Support to be given for https://tools.ietf.org/html/rfc4180.\n * @todo Sample implementation https://github.com/knrz/CSV.js/.\n *\n * @param {string} str - The input DSV string.\n * @param {Object} options - Option to control the behaviour of the parsing.\n * @param {boolean} [options.firstRowHeader=true] - Whether the first row of the dsv string data is header or not.\n * @param {string} [options.fieldSeparator=\",\"] - The separator of two consecutive field.\n * @return {Array} Returns an array of headers and column major data.\n * @example\n *\n * // Sample input data:\n * const data = `\n * a,b,c\n * 1,2,3\n * 4,5,6\n * 7,8,9\n * `\n */\nfunction DSVStr (str, options) {\n const defaultOption = {\n firstRowHeader: true,\n fieldSeparator: ','\n };\n options = Object.assign({}, defaultOption, options);\n\n const dsv = d3Dsv(options.fieldSeparator);\n return DSVArr(dsv.parseRows(str), options);\n}\n\nexport default DSVStr;\n","import { columnMajor } from '../utils';\n\n/**\n * Parses and converts data formatted in JSON to a manageable internal format.\n *\n * @param {Array.} arr - The input data formatted in JSON.\n * @return {Array.} Returns an array of headers and column major data.\n * @example\n *\n * // Sample input data:\n * const data = [\n * {\n * \"a\": 1,\n * \"b\": 2,\n * \"c\": 3\n * },\n * {\n * \"a\": 4,\n * \"b\": 5,\n * \"c\": 6\n * },\n * {\n * \"a\": 7,\n * \"b\": 8,\n * \"c\": 9\n * }\n * ];\n */\nfunction FlatJSON (arr) {\n const header = {};\n let i = 0;\n let insertionIndex;\n const columns = [];\n const push = columnMajor(columns);\n\n arr.forEach((item) => {\n const fields = [];\n for (let key in item) {\n if (key in header) {\n insertionIndex = header[key];\n } else {\n header[key] = i++;\n insertionIndex = i - 1;\n }\n fields[insertionIndex] = item[key];\n }\n push(...fields);\n });\n\n return [Object.keys(header), columns];\n}\n\nexport default FlatJSON;\n","import FlatJSON from './flat-json';\nimport DSVArr from './dsv-arr';\nimport DSVStr from './dsv-str';\nimport { detectDataFormat } from '../utils';\n\n/**\n * Parses the input data and detect the format automatically.\n *\n * @param {string|Array} data - The input data.\n * @param {Object} options - An optional config specific to data format.\n * @return {Array.} Returns an array of headers and column major data.\n */\nfunction Auto (data, options) {\n const converters = { FlatJSON, DSVStr, DSVArr };\n const dataFormat = detectDataFormat(data);\n\n if (!dataFormat) {\n throw new Error('Couldn\\'t detect the data format');\n }\n\n return converters[dataFormat](data, options);\n}\n\nexport default Auto;\n","import { FieldType, FilteringMode, DimensionSubtype, MeasureSubtype, DataFormat } from './enums';\nimport fieldStore from './field-store';\nimport Value from './value';\nimport {\n rowDiffsetIterator\n} from './operator';\nimport { DM_DERIVATIVES, LOGICAL_OPERATORS } from './constants';\nimport { createFields, createUnitFieldFromPartial } from './field-creator';\nimport defaultConfig from './default-config';\nimport * as converter from './converter';\nimport { extend2, detectDataFormat } from './utils';\n\n/**\n * Prepares the selection data.\n */\nfunction prepareSelectionData (fields, i) {\n const resp = {};\n for (let field of fields) {\n resp[field.name()] = new Value(field.partialField.data[i], field);\n }\n return resp;\n}\n\nexport function prepareJoinData (fields) {\n const resp = {};\n Object.keys(fields).forEach((key) => { resp[key] = new Value(fields[key], key); });\n return resp;\n}\n\nexport const updateFields = ([rowDiffset, colIdentifier], partialFieldspace, fieldStoreName) => {\n let collID = colIdentifier.length ? colIdentifier.split(',') : [];\n let partialFieldMap = partialFieldspace.fieldsObj();\n let newFields = collID.map(coll => createUnitFieldFromPartial(partialFieldMap[coll].partialField, rowDiffset));\n return fieldStore.createNamespace(newFields, fieldStoreName);\n};\n\nexport const persistCurrentDerivation = (model, operation, config = {}, criteriaFn) => {\n if (operation === DM_DERIVATIVES.COMPOSE) {\n model._derivation.length = 0;\n model._derivation.push(...criteriaFn);\n } else {\n model._derivation.push({\n op: operation,\n meta: config,\n criteria: criteriaFn\n });\n }\n};\n\nexport const persistAncestorDerivation = (sourceDm, newDm) => {\n newDm._ancestorDerivation.push(...sourceDm._ancestorDerivation, ...sourceDm._derivation);\n};\n\nexport const persistDerivations = (sourceDm, model, operation, config = {}, criteriaFn) => {\n persistCurrentDerivation(model, operation, config, criteriaFn);\n persistAncestorDerivation(sourceDm, model);\n};\n\nexport const selectHelper = (rowDiffset, fields, selectFn, config, sourceDm) => {\n const newRowDiffSet = [];\n let lastInsertedValue = -1;\n let { mode } = config;\n let li;\n let cachedStore = {};\n let cloneProvider = () => sourceDm.detachedRoot();\n const selectorHelperFn = index => selectFn(\n prepareSelectionData(fields, index),\n index,\n cloneProvider,\n cachedStore\n );\n\n let checker;\n if (mode === FilteringMode.INVERSE) {\n checker = index => !selectorHelperFn(index);\n } else {\n checker = index => selectorHelperFn(index);\n }\n\n rowDiffsetIterator(rowDiffset, (i) => {\n if (checker(i)) {\n if (lastInsertedValue !== -1 && i === (lastInsertedValue + 1)) {\n li = newRowDiffSet.length - 1;\n newRowDiffSet[li] = `${newRowDiffSet[li].split('-')[0]}-${i}`;\n } else {\n newRowDiffSet.push(`${i}`);\n }\n lastInsertedValue = i;\n }\n });\n return newRowDiffSet.join(',');\n};\n\nexport const cloneWithAllFields = (model) => {\n const clonedDm = model.clone(false);\n const partialFieldspace = model.getPartialFieldspace();\n clonedDm._colIdentifier = partialFieldspace.fields.map(f => f.name()).join(',');\n\n // flush out cached namespace values on addition of new fields\n partialFieldspace._cachedFieldsObj = null;\n partialFieldspace._cachedDimension = null;\n partialFieldspace._cachedMeasure = null;\n clonedDm.__calculateFieldspace().calculateFieldsConfig();\n\n return clonedDm;\n};\n\nexport const filterPropagationModel = (model, propModels, config = {}) => {\n const operation = config.operation || LOGICAL_OPERATORS.AND;\n const filterByMeasure = config.filterByMeasure || false;\n let fns = [];\n if (!propModels.length) {\n fns = [() => false];\n } else {\n fns = propModels.map(propModel => ((dataModel) => {\n const dataObj = dataModel.getData();\n const schema = dataObj.schema;\n const fieldsConfig = dataModel.getFieldsConfig();\n const fieldsSpace = dataModel.getFieldspace().fieldsObj();\n const data = dataObj.data;\n const domain = Object.values(fieldsConfig).reduce((acc, v) => {\n acc[v.def.name] = fieldsSpace[v.def.name].domain();\n return acc;\n }, {});\n\n return (fields) => {\n const include = !data.length ? false : data.some(row => schema.every((propField) => {\n if (!(propField.name in fields)) {\n return true;\n }\n const value = fields[propField.name].valueOf();\n if (filterByMeasure && propField.type === FieldType.MEASURE) {\n return value >= domain[propField.name][0] && value <= domain[propField.name][1];\n }\n\n if (propField.type !== FieldType.DIMENSION) {\n return true;\n }\n const idx = fieldsConfig[propField.name].index;\n return row[idx] === fields[propField.name].valueOf();\n }));\n return include;\n };\n })(propModel));\n }\n\n let filteredModel;\n if (operation === LOGICAL_OPERATORS.AND) {\n filteredModel = cloneWithAllFields(model).select(fields => fns.every(fn => fn(fields)), {\n saveChild: false,\n mode: FilteringMode.ALL\n });\n } else {\n filteredModel = cloneWithAllFields(model).select(fields => fns.some(fn => fn(fields)), {\n mode: FilteringMode.ALL,\n saveChild: false\n });\n }\n\n return filteredModel;\n};\n\nexport const cloneWithSelect = (sourceDm, selectFn, selectConfig, cloneConfig) => {\n const cloned = sourceDm.clone(cloneConfig.saveChild);\n const rowDiffset = selectHelper(\n cloned._rowDiffset,\n cloned.getPartialFieldspace().fields,\n selectFn,\n selectConfig,\n sourceDm\n );\n cloned._rowDiffset = rowDiffset;\n cloned.__calculateFieldspace().calculateFieldsConfig();\n\n persistDerivations(\n sourceDm,\n cloned,\n DM_DERIVATIVES.SELECT,\n { config: selectConfig },\n selectFn\n );\n\n return cloned;\n};\n\nexport const cloneWithProject = (sourceDm, projField, config, allFields) => {\n const cloned = sourceDm.clone(config.saveChild);\n let projectionSet = projField;\n if (config.mode === FilteringMode.INVERSE) {\n projectionSet = allFields.filter(fieldName => projField.indexOf(fieldName) === -1);\n }\n // cloned._colIdentifier = sourceDm._colIdentifier.split(',')\n // .filter(coll => projectionSet.indexOf(coll) !== -1).join();\n cloned._colIdentifier = projectionSet.join(',');\n cloned.__calculateFieldspace().calculateFieldsConfig();\n\n persistDerivations(\n sourceDm,\n cloned,\n DM_DERIVATIVES.PROJECT,\n { projField, config, actualProjField: projectionSet },\n null\n );\n\n return cloned;\n};\n\nexport const sanitizeUnitSchema = (unitSchema) => {\n // Do deep clone of the unit schema as the user might change it later.\n unitSchema = extend2({}, unitSchema);\n if (!unitSchema.type) {\n unitSchema.type = FieldType.DIMENSION;\n }\n\n if (!unitSchema.subtype) {\n switch (unitSchema.type) {\n case FieldType.MEASURE:\n unitSchema.subtype = MeasureSubtype.CONTINUOUS;\n break;\n default:\n case FieldType.DIMENSION:\n unitSchema.subtype = DimensionSubtype.CATEGORICAL;\n break;\n }\n }\n\n return unitSchema;\n};\n\nexport const validateUnitSchema = (unitSchema) => {\n const supportedMeasureSubTypes = [MeasureSubtype.CONTINUOUS];\n const supportedDimSubTypes = [\n DimensionSubtype.CATEGORICAL,\n DimensionSubtype.BINNED,\n DimensionSubtype.TEMPORAL,\n DimensionSubtype.GEO\n ];\n const { type, subtype, name } = unitSchema;\n\n switch (type) {\n case FieldType.DIMENSION:\n if (supportedDimSubTypes.indexOf(subtype) === -1) {\n throw new Error(`DataModel doesn't support dimension field subtype ${subtype} used for ${name} field`);\n }\n break;\n case FieldType.MEASURE:\n if (supportedMeasureSubTypes.indexOf(subtype) === -1) {\n throw new Error(`DataModel doesn't support measure field subtype ${subtype} used for ${name} field`);\n }\n break;\n default:\n throw new Error(`DataModel doesn't support field type ${type} used for ${name} field`);\n }\n};\n\nexport const sanitizeAndValidateSchema = schema => schema.map((unitSchema) => {\n unitSchema = sanitizeUnitSchema(unitSchema);\n validateUnitSchema(unitSchema);\n return unitSchema;\n});\n\nexport const resolveFieldName = (schema, dataHeader) => {\n schema.forEach((unitSchema) => {\n const fieldNameAs = unitSchema.as;\n if (!fieldNameAs) { return; }\n\n const idx = dataHeader.indexOf(unitSchema.name);\n dataHeader[idx] = fieldNameAs;\n unitSchema.name = fieldNameAs;\n delete unitSchema.as;\n });\n};\n\nexport const updateData = (relation, data, schema, options) => {\n schema = sanitizeAndValidateSchema(schema);\n options = Object.assign(Object.assign({}, defaultConfig), options);\n const converterFn = converter[options.dataFormat];\n\n if (!(converterFn && typeof converterFn === 'function')) {\n throw new Error(`No converter function found for ${options.dataFormat} format`);\n }\n\n const [header, formattedData] = converterFn(data, options);\n resolveFieldName(schema, header);\n const fieldArr = createFields(formattedData, schema, header);\n\n // This will create a new fieldStore with the fields\n const nameSpace = fieldStore.createNamespace(fieldArr, options.name);\n relation._partialFieldspace = nameSpace;\n // If data is provided create the default colIdentifier and rowDiffset\n relation._rowDiffset = formattedData.length && formattedData[0].length ? `0-${formattedData[0].length - 1}` : '';\n relation._colIdentifier = (schema.map(_ => _.name)).join();\n relation._dataFormat = options.dataFormat === DataFormat.AUTO ? detectDataFormat(data) : options.dataFormat;\n return relation;\n};\n\nexport const fieldInSchema = (schema, field) => {\n let i = 0;\n\n for (; i < schema.length; ++i) {\n if (field === schema[i].name) {\n return {\n type: schema[i].subtype || schema[i].type,\n index: i\n };\n }\n }\n return null;\n};\n\n\nexport const getDerivationArguments = (derivation) => {\n let params = [];\n let operation;\n operation = derivation.op;\n switch (operation) {\n case DM_DERIVATIVES.SELECT:\n params = [derivation.criteria];\n break;\n case DM_DERIVATIVES.PROJECT:\n params = [derivation.meta.actualProjField];\n break;\n case DM_DERIVATIVES.GROUPBY:\n operation = 'groupBy';\n params = [derivation.meta.groupByString.split(','), derivation.criteria];\n break;\n default:\n operation = null;\n }\n\n return {\n operation,\n params\n };\n};\n\nconst applyExistingOperationOnModel = (propModel, dataModel) => {\n const derivations = dataModel.getDerivations();\n let selectionModel = propModel[0];\n let rejectionModel = propModel[1];\n\n derivations.forEach((derivation) => {\n if (!derivation) {\n return;\n }\n\n const { operation, params } = getDerivationArguments(derivation);\n if (operation) {\n selectionModel = selectionModel[operation](...params, {\n saveChild: false\n });\n rejectionModel = rejectionModel[operation](...params, {\n saveChild: false\n });\n }\n });\n\n return [selectionModel, rejectionModel];\n};\n\nconst getFilteredModel = (propModel, path) => {\n for (let i = 0, len = path.length; i < len; i++) {\n const model = path[i];\n propModel = applyExistingOperationOnModel(propModel, model);\n }\n return propModel;\n};\n\nconst propagateIdentifiers = (dataModel, propModel, config = {}, propModelInf = {}) => {\n const nonTraversingModel = propModelInf.nonTraversingModel;\n const excludeModels = propModelInf.excludeModels || [];\n\n if (dataModel === nonTraversingModel) {\n return;\n }\n\n const propagate = excludeModels.length ? excludeModels.indexOf(dataModel) === -1 : true;\n\n propagate && dataModel.handlePropagation(propModel, config);\n\n const children = dataModel._children;\n children.forEach((child) => {\n let [selectionModel, rejectionModel] = applyExistingOperationOnModel(propModel, child);\n propagateIdentifiers(child, [selectionModel, rejectionModel], config, propModelInf);\n });\n};\n\nexport const getRootGroupByModel = (model) => {\n while (model._parent && model._derivation.find(d => d.op !== DM_DERIVATIVES.GROUPBY)) {\n model = model._parent;\n }\n return model;\n};\n\nexport const getRootDataModel = (model) => {\n while (model._parent) {\n model = model._parent;\n }\n return model;\n};\n\nexport const getPathToRootModel = (model, path = []) => {\n while (model._parent) {\n path.push(model);\n model = model._parent;\n }\n return path;\n};\n\nexport const propagateToAllDataModels = (identifiers, rootModels, propagationInf, config) => {\n let criteria;\n let propModel;\n const { propagationNameSpace, propagateToSource } = propagationInf;\n const propagationSourceId = propagationInf.sourceId;\n const propagateInterpolatedValues = config.propagateInterpolatedValues;\n const filterFn = (entry) => {\n const filter = config.filterFn || (() => true);\n return filter(entry, config);\n };\n\n let criterias = [];\n\n if (identifiers === null && config.persistent !== true) {\n criterias = [{\n criteria: []\n }];\n } else {\n let actionCriterias = Object.values(propagationNameSpace.mutableActions);\n if (propagateToSource !== false) {\n actionCriterias = actionCriterias.filter(d => d.config.sourceId !== propagationSourceId);\n }\n\n const filteredCriteria = actionCriterias.filter(filterFn).map(action => action.config.criteria);\n\n const excludeModels = [];\n\n if (propagateToSource !== false) {\n const sourceActionCriterias = Object.values(propagationNameSpace.mutableActions);\n\n sourceActionCriterias.forEach((actionInf) => {\n const actionConf = actionInf.config;\n if (actionConf.applyOnSource === false && actionConf.action === config.action &&\n actionConf.sourceId !== propagationSourceId) {\n excludeModels.push(actionInf.model);\n criteria = sourceActionCriterias.filter(d => d !== actionInf).map(d => d.config.criteria);\n criteria.length && criterias.push({\n criteria,\n models: actionInf.model,\n path: getPathToRootModel(actionInf.model)\n });\n }\n });\n }\n\n\n criteria = [].concat(...[...filteredCriteria, identifiers]).filter(d => d !== null);\n criterias.push({\n criteria,\n excludeModels: [...excludeModels, ...config.excludeModels || []]\n });\n }\n\n const rootModel = rootModels.model;\n\n const propConfig = Object.assign({\n sourceIdentifiers: identifiers,\n propagationSourceId\n }, config);\n\n const rootGroupByModel = rootModels.groupByModel;\n if (propagateInterpolatedValues && rootGroupByModel) {\n propModel = filterPropagationModel(rootGroupByModel, criteria, {\n filterByMeasure: propagateInterpolatedValues\n });\n propagateIdentifiers(rootGroupByModel, propModel, propConfig);\n }\n\n criterias.forEach((inf) => {\n const propagationModel = filterPropagationModel(rootModel, inf.criteria);\n const path = inf.path;\n\n if (path) {\n const filteredModel = getFilteredModel(propagationModel, path.reverse());\n inf.models.handlePropagation(filteredModel, propConfig);\n } else {\n propagateIdentifiers(rootModel, propagationModel, propConfig, {\n excludeModels: inf.excludeModels,\n nonTraversingModel: propagateInterpolatedValues && rootGroupByModel\n });\n }\n });\n};\n\nexport const propagateImmutableActions = (propagationNameSpace, rootModels, propagationInf) => {\n const immutableActions = propagationNameSpace.immutableActions;\n\n for (const action in immutableActions) {\n const actionInf = immutableActions[action];\n const actionConf = actionInf.config;\n const propagationSourceId = propagationInf.config.sourceId;\n const filterImmutableAction = propagationInf.propConfig.filterImmutableAction ?\n propagationInf.propConfig.filterImmutableAction(actionConf, propagationInf.config) : true;\n if (actionConf.sourceId !== propagationSourceId && filterImmutableAction) {\n const criteriaModel = actionConf.criteria;\n propagateToAllDataModels(criteriaModel, rootModels, {\n propagationNameSpace,\n propagateToSource: false,\n sourceId: propagationSourceId\n }, actionConf);\n }\n }\n};\n\nexport const addToPropNamespace = (propagationNameSpace, config = {}, model) => {\n let sourceNamespace;\n const isMutableAction = config.isMutableAction;\n const criteria = config.criteria;\n const key = `${config.action}-${config.sourceId}`;\n\n if (isMutableAction) {\n sourceNamespace = propagationNameSpace.mutableActions;\n } else {\n sourceNamespace = propagationNameSpace.immutableActions;\n }\n\n if (criteria === null) {\n delete sourceNamespace[key];\n } else {\n sourceNamespace[key] = {\n model,\n config\n };\n }\n\n return this;\n};\n","import { FilteringMode } from './enums';\nimport { getUniqueId } from './utils';\nimport { updateFields, cloneWithSelect, cloneWithProject, updateData } from './helper';\nimport { crossProduct, difference, naturalJoinFilter, union } from './operator';\n\n/**\n * Relation provides the definitions of basic operators of relational algebra like *selection*, *projection*, *union*,\n * *difference* etc.\n *\n * It is extended by {@link DataModel} to inherit the functionalities of relational algebra concept.\n *\n * @class\n * @public\n * @module Relation\n * @namespace DataModel\n */\nclass Relation {\n\n /**\n * Creates a new Relation instance by providing underlying data and schema.\n *\n * @private\n *\n * @param {Object | string | Relation} data - The input tabular data in dsv or json format or\n * an existing Relation instance object.\n * @param {Array} schema - An array of data schema.\n * @param {Object} [options] - The optional options.\n */\n constructor (...params) {\n let source;\n\n this._parent = null;\n this._derivation = [];\n this._ancestorDerivation = [];\n this._children = [];\n\n if (params.length === 1 && ((source = params[0]) instanceof Relation)) {\n // parent datamodel was passed as part of source\n this._colIdentifier = source._colIdentifier;\n this._rowDiffset = source._rowDiffset;\n this._dataFormat = source._dataFormat;\n this._parent = source;\n this._partialFieldspace = this._parent._partialFieldspace;\n this._fieldStoreName = getUniqueId();\n this.__calculateFieldspace().calculateFieldsConfig();\n } else {\n updateData(this, ...params);\n this._fieldStoreName = this._partialFieldspace.name;\n this.__calculateFieldspace().calculateFieldsConfig();\n this._propagationNameSpace = {\n mutableActions: {},\n immutableActions: {}\n };\n }\n }\n\n /**\n * Retrieves the {@link Schema | schema} details for every {@link Field | field} as an array.\n *\n * @public\n *\n * @return {Array.} Array of fields schema.\n * ```\n * [\n * { name: 'Name', type: 'dimension' },\n * { name: 'Miles_per_Gallon', type: 'measure', numberFormat: (val) => `${val} miles / gallon` },\n * { name: 'Cylinder', type: 'dimension' },\n * { name: 'Displacement', type: 'measure', defAggFn: 'max' },\n * { name: 'HorsePower', type: 'measure', defAggFn: 'max' },\n * { name: 'Weight_in_lbs', type: 'measure', defAggFn: 'avg', },\n * { name: 'Acceleration', type: 'measure', defAggFn: 'avg' },\n * { name: 'Year', type: 'dimension', subtype: 'datetime', format: '%Y' },\n * { name: 'Origin' }\n * ]\n * ```\n */\n getSchema () {\n return this.getFieldspace().fields.map(d => d.schema());\n }\n\n /**\n * Returns the name of the {@link DataModel} instance. If no name was specified during {@link DataModel}\n * initialization, then it returns a auto-generated name.\n *\n * @public\n *\n * @return {string} Name of the DataModel instance.\n */\n getName() {\n return this._fieldStoreName;\n }\n\n getFieldspace () {\n return this._fieldspace;\n }\n\n __calculateFieldspace () {\n this._fieldspace = updateFields([this._rowDiffset, this._colIdentifier],\n this.getPartialFieldspace(), this._fieldStoreName);\n return this;\n }\n\n getPartialFieldspace () {\n return this._partialFieldspace;\n }\n\n /**\n * Performs {@link link_of_cross_product | cross-product} between two {@link DataModel} instances and returns a\n * new {@link DataModel} instance containing the results. This operation is also called theta join.\n *\n * Cross product takes two set and create one set where each value of one set is paired with each value of another\n * set.\n *\n * This method takes an optional predicate which filters the generated result rows. If the predicate returns true\n * the combined row is included in the resulatant table.\n *\n * @example\n * let originDM = dm.project(['Origin','Origin_Formal_Name']);\n * let carsDM = dm.project(['Name','Miles_per_Gallon','Origin'])\n *\n * console.log(carsDM.join(originDM)));\n *\n * console.log(carsDM.join(originDM,\n * obj => obj.[originDM.getName()].Origin === obj.[carsDM.getName()].Origin));\n *\n * @text\n * This is chained version of `join` operator. `join` can also be used as\n * {@link link_to_join_op | functional operator}.\n *\n * @public\n *\n * @param {DataModel} joinWith - The DataModel to be joined with the current instance DataModel.\n * @param {SelectionPredicate} filterFn - The predicate function that will filter the result of the crossProduct.\n *\n * @return {DataModel} New DataModel instance created after joining.\n */\n join (joinWith, filterFn) {\n return crossProduct(this, joinWith, filterFn);\n }\n\n /**\n * {@link natural_join | Natural join} is a special kind of cross-product join where filtering of rows are performed\n * internally by resolving common fields are from both table and the rows with common value are included.\n *\n * @example\n * let originDM = dm.project(['Origin','Origin_Formal_Name']);\n * let carsDM = dm.project(['Name','Miles_per_Gallon','Origin'])\n *\n * console.log(carsDM.naturalJoin(originDM));\n *\n * @text\n * This is chained version of `naturalJoin` operator. `naturalJoin` can also be used as\n * {@link link_to_join_op | functional operator}.\n *\n * @public\n *\n * @param {DataModel} joinWith - The DataModel with which the current instance of DataModel on which the method is\n * called will be joined.\n * @return {DataModel} New DataModel instance created after joining.\n */\n naturalJoin (joinWith) {\n return crossProduct(this, joinWith, naturalJoinFilter(this, joinWith), true);\n }\n\n /**\n * {@link link_to_union | Union} operation can be termed as vertical stacking of all rows from both the DataModel\n * instances, provided that both of the {@link DataModel} instances should have same column names.\n *\n * @example\n * console.log(EuropeanMakerDM.union(USAMakerDM));\n *\n * @text\n * This is chained version of `naturalJoin` operator. `naturalJoin` can also be used as\n * {@link link_to_join_op | functional operator}.\n *\n * @public\n *\n * @param {DataModel} unionWith - DataModel instance for which union has to be applied with the instance on which\n * the method is called\n *\n * @return {DataModel} New DataModel instance with the result of the operation\n */\n union (unionWith) {\n return union(this, unionWith);\n }\n\n /**\n * {@link link_to_difference | Difference } operation only include rows which are present in the datamodel on which\n * it was called but not on the one passed as argument.\n *\n * @example\n * console.log(highPowerDM.difference(highExpensiveDM));\n *\n * @text\n * This is chained version of `naturalJoin` operator. `naturalJoin` can also be used as\n * {@link link_to_join_op | functional operator}.\n *\n * @public\n *\n * @param {DataModel} differenceWith - DataModel instance for which difference has to be applied with the instance\n * on which the method is called\n * @return {DataModel} New DataModel instance with the result of the operation\n */\n difference (differenceWith) {\n return difference(this, differenceWith);\n }\n\n /**\n * {@link link_to_selection | Selection} is a row filtering operation. It expects a predicate and an optional mode\n * which control which all rows should be included in the resultant DataModel instance.\n *\n * {@link SelectionPredicate} is a function which returns a boolean value. For selection operation the selection\n * function is called for each row of DataModel instance with the current row passed as argument.\n *\n * After executing {@link SelectionPredicate} the rows are labeled as either an entry of selection set or an entry\n * of rejection set.\n *\n * {@link FilteringMode} operates on the selection and rejection set to determine which one would reflect in the\n * resultant datamodel.\n *\n * @warning\n * Selection and rejection set is only a logical idea for concept explanation purpose.\n *\n * @example\n * // with selection mode NORMAL:\n * const normDt = dt.select(fields => fields.Origin.value === \"USA\")\n * console.log(normDt));\n *\n * // with selection mode INVERSE:\n * const inverDt = dt.select(fields => fields.Origin.value === \"USA\", { mode: DataModel.FilteringMode.INVERSE })\n * console.log(inverDt);\n *\n * // with selection mode ALL:\n * const dtArr = dt.select(fields => fields.Origin.value === \"USA\", { mode: DataModel.FilteringMode.ALL })\n * // print the selected parts\n * console.log(dtArr[0]);\n * // print the inverted parts\n * console.log(dtArr[1]);\n *\n * @text\n * This is chained version of `select` operator. `select` can also be used as\n * {@link link_to_join_op | functional operator}.\n *\n * @public\n *\n * @param {Function} selectFn - The predicate function which is called for each row with the current row.\n * ```\n * function (row, i, cloneProvider, store) { ... }\n * ```\n * @param {Object} config - The configuration object to control the inclusion exclusion of a row in resultant\n * DataModel instance.\n * @param {FilteringMode} [config.mode=FilteringMode.NORMAL] - The mode of the selection.\n * @return {DataModel} Returns the new DataModel instance(s) after operation.\n */\n select (selectFn, config) {\n const defConfig = {\n mode: FilteringMode.NORMAL,\n saveChild: true\n };\n config = Object.assign({}, defConfig, config);\n\n const cloneConfig = { saveChild: config.saveChild };\n let oDm;\n\n if (config.mode === FilteringMode.ALL) {\n const selectDm = cloneWithSelect(\n this,\n selectFn,\n { mode: FilteringMode.NORMAL },\n cloneConfig\n );\n const rejectDm = cloneWithSelect(\n this,\n selectFn,\n { mode: FilteringMode.INVERSE },\n cloneConfig\n );\n oDm = [selectDm, rejectDm];\n } else {\n oDm = cloneWithSelect(\n this,\n selectFn,\n config,\n cloneConfig\n );\n }\n\n return oDm;\n }\n\n /**\n * Retrieves a boolean value if the current {@link DataModel} instance has data.\n *\n * @example\n * const schema = [\n * { name: 'CarName', type: 'dimension' },\n * { name: 'HorsePower', type: 'measure' },\n * { name: \"Origin\", type: 'dimension' }\n * ];\n * const data = [];\n *\n * const dt = new DataModel(data, schema);\n * console.log(dt.isEmpty());\n *\n * @public\n *\n * @return {Boolean} True if the datamodel has no data, otherwise false.\n */\n isEmpty () {\n return !this._rowDiffset.length || !this._colIdentifier.length;\n }\n\n /**\n * Creates a clone from the current DataModel instance with child parent relationship.\n *\n * @private\n * @param {boolean} [saveChild=true] - Whether the cloned instance would be recorded in the parent instance.\n * @return {DataModel} - Returns the newly cloned DataModel instance.\n */\n clone (saveChild = true) {\n const clonedDm = new this.constructor(this);\n if (saveChild) {\n clonedDm.setParent(this);\n } else {\n clonedDm.setParent(null);\n }\n return clonedDm;\n }\n\n /**\n * {@link Projection} is filter column (field) operation. It expects list of fields' name and either include those\n * or exclude those based on {@link FilteringMode} on the resultant variable.\n *\n * Projection expects array of fields name based on which it creates the selection and rejection set. All the field\n * whose name is present in array goes in selection set and rest of the fields goes in rejection set.\n *\n * {@link FilteringMode} operates on the selection and rejection set to determine which one would reflect in the\n * resulatant datamodel.\n *\n * @warning\n * Selection and rejection set is only a logical idea for concept explanation purpose.\n *\n * @example\n * const dm = new DataModel(data, schema);\n *\n * // with projection mode NORMAL:\n * const normDt = dt.project([\"Name\", \"HorsePower\"]);\n * console.log(normDt.getData());\n *\n * // with projection mode INVERSE:\n * const inverDt = dt.project([\"Name\", \"HorsePower\"], { mode: DataModel.FilteringMode.INVERSE })\n * console.log(inverDt.getData());\n *\n * // with selection mode ALL:\n * const dtArr = dt.project([\"Name\", \"HorsePower\"], { mode: DataModel.FilteringMode.ALL })\n * // print the normal parts\n * console.log(dtArr[0].getData());\n * // print the inverted parts\n * console.log(dtArr[1].getData());\n *\n * @text\n * This is chained version of `select` operator. `select` can also be used as\n * {@link link_to_join_op | functional operator}.\n *\n * @public\n *\n * @param {Array.} projField - An array of column names in string or regular expression.\n * @param {Object} [config] - An optional config to control the creation of new DataModel\n * @param {FilteringMode} [config.mode=FilteringMode.NORMAL] - Mode of the projection\n *\n * @return {DataModel} Returns the new DataModel instance after operation.\n */\n project (projField, config) {\n const defConfig = {\n mode: FilteringMode.NORMAL,\n saveChild: true\n };\n config = Object.assign({}, defConfig, config);\n const fieldConfig = this.getFieldsConfig();\n const allFields = Object.keys(fieldConfig);\n const { mode } = config;\n\n let normalizedProjField = projField.reduce((acc, field) => {\n if (field.constructor.name === 'RegExp') {\n acc.push(...allFields.filter(fieldName => fieldName.search(field) !== -1));\n } else if (field in fieldConfig) {\n acc.push(field);\n }\n return acc;\n }, []);\n\n normalizedProjField = Array.from(new Set(normalizedProjField)).map(field => field.trim());\n let dataModel;\n\n if (mode === FilteringMode.ALL) {\n let projectionClone = cloneWithProject(this, normalizedProjField, {\n mode: FilteringMode.NORMAL,\n saveChild: config.saveChild\n }, allFields);\n let rejectionClone = cloneWithProject(this, normalizedProjField, {\n mode: FilteringMode.INVERSE,\n saveChild: config.saveChild\n }, allFields);\n dataModel = [projectionClone, rejectionClone];\n } else {\n let projectionClone = cloneWithProject(this, normalizedProjField, config, allFields);\n dataModel = projectionClone;\n }\n\n return dataModel;\n }\n\n getFieldsConfig () {\n return this._fieldConfig;\n }\n\n calculateFieldsConfig () {\n this._fieldConfig = this._fieldspace.fields.reduce((acc, fieldObj, i) => {\n acc[fieldObj.name()] = {\n index: i,\n def: fieldObj.schema(),\n };\n return acc;\n }, {});\n return this;\n }\n\n\n /**\n * Frees up the resources associated with the current DataModel instance and breaks all the links instance has in\n * the DAG.\n *\n * @public\n */\n dispose () {\n this._parent && this._parent.removeChild(this);\n this._parent = null;\n this._children.forEach((child) => {\n child._parent = null;\n });\n this._children = [];\n }\n\n /**\n * Removes the specified child {@link DataModel} from the child list of the current {@link DataModel} instance.\n *\n * @example\n * const schema = [\n * { name: 'Name', type: 'dimension' },\n * { name: 'HorsePower', type: 'measure' },\n * { name: \"Origin\", type: 'dimension' }\n * ];\n *\n * const data = [\n * { Name: \"chevrolet chevelle malibu\", Horsepower: 130, Origin: \"USA\" },\n * { Name: \"citroen ds-21 pallas\", Horsepower: 115, Origin: \"Europe\" },\n * { Name: \"datsun pl510\", Horsepower: 88, Origin: \"Japan\" },\n * { Name: \"amc rebel sst\", Horsepower: 150, Origin: \"USA\"},\n * ]\n *\n * const dt = new DataModel(data, schema);\n *\n * const dt2 = dt.select(fields => fields.Origin.value === \"USA\")\n * dt.removeChild(dt2);\n *\n * @private\n *\n * @param {DataModel} child - Delegates the parent to remove this child.\n */\n removeChild (child) {\n let idx = this._children.findIndex(sibling => sibling === child);\n idx !== -1 ? this._children.splice(idx, 1) : true;\n }\n\n /**\n * Sets the specified {@link DataModel} as a parent for the current {@link DataModel} instance.\n *\n * @param {DataModel} parent - The datamodel instance which will act as parent.\n */\n setParent (parent) {\n this._parent && this._parent.removeChild(this);\n this._parent = parent;\n parent && parent._children.push(this);\n }\n\n /**\n * Returns the parent {@link DataModel} instance.\n *\n * @example\n * const schema = [\n * { name: 'Name', type: 'dimension' },\n * { name: 'HorsePower', type: 'measure' },\n * { name: \"Origin\", type: 'dimension' }\n * ];\n *\n * const data = [\n * { Name: \"chevrolet chevelle malibu\", Horsepower: 130, Origin: \"USA\" },\n * { Name: \"citroen ds-21 pallas\", Horsepower: 115, Origin: \"Europe\" },\n * { Name: \"datsun pl510\", Horsepower: 88, Origin: \"Japan\" },\n * { Name: \"amc rebel sst\", Horsepower: 150, Origin: \"USA\"},\n * ]\n *\n * const dt = new DataModel(data, schema);\n *\n * const dt2 = dt.select(fields => fields.Origin.value === \"USA\");\n * const parentDm = dt2.getParent();\n *\n * @return {DataModel} Returns the parent DataModel instance.\n */\n getParent () {\n return this._parent;\n }\n\n /**\n * Returns the immediate child {@link DataModel} instances.\n *\n * @example\n * const schema = [\n * { name: 'Name', type: 'dimension' },\n * { name: 'HorsePower', type: 'measure' },\n * { name: \"Origin\", type: 'dimension' }\n * ];\n *\n * const data = [\n * { Name: \"chevrolet chevelle malibu\", Horsepower: 130, Origin: \"USA\" },\n * { Name: \"citroen ds-21 pallas\", Horsepower: 115, Origin: \"Europe\" },\n * { Name: \"datsun pl510\", Horsepower: 88, Origin: \"Japan\" },\n * { Name: \"amc rebel sst\", Horsepower: 150, Origin: \"USA\"},\n * ]\n *\n * const dt = new DataModel(data, schema);\n *\n * const childDm1 = dt.select(fields => fields.Origin.value === \"USA\");\n * const childDm2 = dt.select(fields => fields.Origin.value === \"Japan\");\n * const childDm3 = dt.groupBy([\"Origin\"]);\n *\n * @return {DataModel[]} Returns the immediate child DataModel instances.\n */\n getChildren () {\n return this._children;\n }\n\n /**\n * Returns the in-between operation meta data while creating the current {@link DataModel} instance.\n *\n * @example\n * const schema = [\n * { name: 'Name', type: 'dimension' },\n * { name: 'HorsePower', type: 'measure' },\n * { name: \"Origin\", type: 'dimension' }\n * ];\n *\n * const data = [\n * { Name: \"chevrolet chevelle malibu\", Horsepower: 130, Origin: \"USA\" },\n * { Name: \"citroen ds-21 pallas\", Horsepower: 115, Origin: \"Europe\" },\n * { Name: \"datsun pl510\", Horsepower: 88, Origin: \"Japan\" },\n * { Name: \"amc rebel sst\", Horsepower: 150, Origin: \"USA\"},\n * ]\n *\n * const dt = new DataModel(data, schema);\n * const dt2 = dt.select(fields => fields.Origin.value === \"USA\");\n * const dt3 = dt2.groupBy([\"Origin\"]);\n * const derivations = dt3.getDerivations();\n *\n * @return {Any[]} Returns the derivation meta data.\n */\n getDerivations () {\n return this._derivation;\n }\n\n /**\n * Returns the in-between operation meta data happened from root {@link DataModel} to current instance.\n *\n * @example\n * const schema = [\n * { name: 'Name', type: 'dimension' },\n * { name: 'HorsePower', type: 'measure' },\n * { name: \"Origin\", type: 'dimension' }\n * ];\n *\n * const data = [\n * { Name: \"chevrolet chevelle malibu\", Horsepower: 130, Origin: \"USA\" },\n * { Name: \"citroen ds-21 pallas\", Horsepower: 115, Origin: \"Europe\" },\n * { Name: \"datsun pl510\", Horsepower: 88, Origin: \"Japan\" },\n * { Name: \"amc rebel sst\", Horsepower: 150, Origin: \"USA\"},\n * ]\n *\n * const dt = new DataModel(data, schema);\n * const dt2 = dt.select(fields => fields.Origin.value === \"USA\");\n * const dt3 = dt2.groupBy([\"Origin\"]);\n * const ancDerivations = dt3.getAncestorDerivations();\n *\n * @return {Any[]} Returns the previous derivation meta data.\n */\n getAncestorDerivations () {\n return this._ancestorDerivation;\n }\n}\n\nexport default Relation;\n","/* eslint-disable default-case */\n\nimport { FieldType, DimensionSubtype, DataFormat } from './enums';\nimport {\n persistDerivations,\n getRootGroupByModel,\n propagateToAllDataModels,\n getRootDataModel,\n propagateImmutableActions,\n addToPropNamespace,\n sanitizeUnitSchema\n} from './helper';\nimport { DM_DERIVATIVES, PROPAGATION } from './constants';\nimport {\n dataBuilder,\n rowDiffsetIterator,\n groupBy\n} from './operator';\nimport { createBinnedFieldData } from './operator/bucket-creator';\nimport Relation from './relation';\nimport reducerStore from './utils/reducer-store';\nimport { createFields } from './field-creator';\nimport InvalidAwareTypes from './invalid-aware-types';\n\n/**\n * DataModel is an in-browser representation of tabular data. It supports\n * {@link https://en.wikipedia.org/wiki/Relational_algebra | relational algebra} operators as well as generic data\n * processing opearators.\n * DataModel extends {@link Relation} class which defines all the relational algebra opreators. DataModel gives\n * definition of generic data processing operators which are not relational algebra complient.\n *\n * @public\n * @class\n * @extends Relation\n * @memberof Datamodel\n */\nclass DataModel extends Relation {\n /**\n * Creates a new DataModel instance by providing data and schema. Data could be in the form of\n * - Flat JSON\n * - DSV String\n * - 2D Array\n *\n * By default DataModel finds suitable adapter to serialize the data. DataModel also expects a\n * {@link Schema | schema} for identifying the variables present in data.\n *\n * @constructor\n * @example\n * const data = loadData('cars.csv');\n * const schema = [\n * { name: 'Name', type: 'dimension' },\n * { name: 'Miles_per_Gallon', type: 'measure', unit : 'cm', scale: '1000', numberformat: val => `${val}G`},\n * { name: 'Cylinders', type: 'dimension' },\n * { name: 'Displacement', type: 'measure' },\n * { name: 'Horsepower', type: 'measure' },\n * { name: 'Weight_in_lbs', type: 'measure' },\n * { name: 'Acceleration', type: 'measure' },\n * { name: 'Year', type: 'dimension', subtype: 'datetime', format: '%Y' },\n * { name: 'Origin', type: 'dimension' }\n * ];\n * const dm = new DataModel(data, schema, { name: 'Cars' });\n * table(dm);\n *\n * @public\n *\n * @param {Array. | string | Array.} data Input data in any of the mentioned formats\n * @param {Array.} schema Defination of the variables. Order of the variables in data and order of the\n * variables in schema has to be same.\n * @param {object} [options] Optional arguments to specify more settings regarding the creation part\n * @param {string} [options.name] Name of the datamodel instance. If no name is given an auto generated name is\n * assigned to the instance.\n * @param {string} [options.fieldSeparator=','] specify field separator type if the data is of type dsv string.\n */\n constructor (...args) {\n super(...args);\n\n this._onPropagation = [];\n }\n\n /**\n * Reducers are simple functions which reduces an array of numbers to a representative number of the set.\n * Like an array of numbers `[10, 20, 5, 15]` can be reduced to `12.5` if average / mean reducer function is\n * applied. All the measure fields in datamodel (variables in data) needs a reducer to handle aggregation.\n *\n * @public\n *\n * @return {ReducerStore} Singleton instance of {@link ReducerStore}.\n */\n static get Reducers () {\n return reducerStore;\n }\n\n /**\n * Configure null, undefined, invalid values in the source data\n *\n * @public\n *\n * @param {Object} [config] - Configuration to control how null, undefined and non-parsable values are\n * represented in DataModel.\n * @param {string} [config.undefined] - Define how an undefined value will be represented.\n * @param {string} [config.null] - Define how a null value will be represented.\n * @param {string} [config.invalid] - Define how a non-parsable value will be represented.\n */\n static configureInvalidAwareTypes (config) {\n return InvalidAwareTypes.invalidAwareVals(config);\n }\n\n /**\n * Retrieve the data attached to an instance in JSON format.\n *\n * @example\n * // DataModel instance is already prepared and assigned to dm variable\n * const data = dm.getData({\n * order: 'column',\n * formatter: {\n * origin: (val) => val === 'European Union' ? 'EU' : val;\n * }\n * });\n * console.log(data);\n *\n * @public\n *\n * @param {Object} [options] Options to control how the raw data is to be returned.\n * @param {string} [options.order='row'] Defines if data is retieved in row order or column order. Possible values\n * are `'rows'` and `'columns'`\n * @param {Function} [options.formatter=null] Formats the output data. This expects an object, where the keys are\n * the name of the variable needs to be formatted. The formatter function is called for each row passing the\n * value of the cell for a particular row as arguments. The formatter is a function in the form of\n * `function (value, rowId, schema) => { ... }`\n * Know more about {@link Fomatter}.\n *\n * @return {Array} Returns a multidimensional array of the data with schema. The return format looks like\n * ```\n * {\n * data,\n * schema\n * }\n * ```\n */\n getData (options) {\n const defOptions = {\n order: 'row',\n formatter: null,\n withUid: false,\n getAllFields: false,\n sort: []\n };\n options = Object.assign({}, defOptions, options);\n const fields = this.getPartialFieldspace().fields;\n\n const dataGenerated = dataBuilder.call(\n this,\n this.getPartialFieldspace().fields,\n this._rowDiffset,\n options.getAllFields ? fields.map(d => d.name()).join() : this._colIdentifier,\n options.sort,\n {\n columnWise: options.order === 'column',\n addUid: !!options.withUid\n }\n );\n\n if (!options.formatter) {\n return dataGenerated;\n }\n\n const { formatter } = options;\n const { data, schema, uids } = dataGenerated;\n const fieldNames = schema.map((e => e.name));\n const fmtFieldNames = Object.keys(formatter);\n const fmtFieldIdx = fmtFieldNames.reduce((acc, next) => {\n const idx = fieldNames.indexOf(next);\n if (idx !== -1) {\n acc.push([idx, formatter[next]]);\n }\n return acc;\n }, []);\n\n if (options.order === 'column') {\n fmtFieldIdx.forEach((elem) => {\n const fIdx = elem[0];\n const fmtFn = elem[1];\n\n data[fIdx].forEach((datum, datumIdx) => {\n data[fIdx][datumIdx] = fmtFn.call(\n undefined,\n datum,\n uids[datumIdx],\n schema[fIdx]\n );\n });\n });\n } else {\n data.forEach((datum, datumIdx) => {\n fmtFieldIdx.forEach((elem) => {\n const fIdx = elem[0];\n const fmtFn = elem[1];\n\n datum[fIdx] = fmtFn.call(\n undefined,\n datum[fIdx],\n uids[datumIdx],\n schema[fIdx]\n );\n });\n });\n }\n\n return dataGenerated;\n }\n\n /**\n * Groups the data using particular dimensions and by reducing measures. It expects a list of dimensions using which\n * it projects the datamodel and perform aggregations to reduce the duplicate tuples. Refer this\n * {@link link_to_one_example_with_group_by | document} to know the intuition behind groupBy.\n *\n * DataModel by default provides definition of few {@link reducer | Reducers}.\n * {@link ReducerStore | User defined reducers} can also be registered.\n *\n * This is the chained implementation of `groupBy`.\n * `groupBy` also supports {@link link_to_compose_groupBy | composability}\n *\n * @example\n * const groupedDM = dm.groupBy(['Year'], { horsepower: 'max' } );\n * console.log(groupedDm);\n *\n * @public\n *\n * @param {Array.} fieldsArr - Array containing the name of dimensions\n * @param {Object} [reducers={}] - A map whose key is the variable name and value is the name of the reducer. If its\n * not passed, or any variable is ommitted from the object, default aggregation function is used from the\n * schema of the variable.\n *\n * @return {DataModel} Returns a new DataModel instance after performing the groupby.\n */\n groupBy (fieldsArr, reducers = {}, config = { saveChild: true }) {\n const groupByString = `${fieldsArr.join()}`;\n let params = [this, fieldsArr, reducers];\n const newDataModel = groupBy(...params);\n\n persistDerivations(\n this,\n newDataModel,\n DM_DERIVATIVES.GROUPBY,\n { fieldsArr, groupByString, defaultReducer: reducerStore.defaultReducer() },\n reducers\n );\n\n if (config.saveChild) {\n newDataModel.setParent(this);\n } else {\n newDataModel.setParent(null);\n }\n\n return newDataModel;\n }\n\n /**\n * Performs sorting operation on the current {@link DataModel} instance according to the specified sorting details.\n * Like every other operator it doesn't mutate the current DataModel instance on which it was called, instead\n * returns a new DataModel instance containing the sorted data.\n *\n * DataModel support multi level sorting by listing the variables using which sorting needs to be performed and\n * the type of sorting `ASC` or `DESC`.\n *\n * In the following example, data is sorted by `Origin` field in `DESC` order in first level followed by another\n * level of sorting by `Acceleration` in `ASC` order.\n *\n * @example\n * // here dm is the pre-declared DataModel instance containing the data of 'cars.json' file\n * let sortedDm = dm.sort([\n * [\"Origin\", \"DESC\"]\n * [\"Acceleration\"] // Default value is ASC\n * ]);\n *\n * console.log(dm.getData());\n * console.log(sortedDm.getData());\n *\n * // Sort with a custom sorting function\n * sortedDm = dm.sort([\n * [\"Origin\", \"DESC\"]\n * [\"Acceleration\", (a, b) => a - b] // Custom sorting function\n * ]);\n *\n * console.log(dm.getData());\n * console.log(sortedDm.getData());\n *\n * @text\n * DataModel also provides another sorting mechanism out of the box where sort is applied to a variable using\n * another variable which determines the order.\n * Like the above DataModel contains three fields `Origin`, `Name` and `Acceleration`. Now, the data in this\n * model can be sorted by `Origin` field according to the average value of all `Acceleration` for a\n * particular `Origin` value.\n *\n * @example\n * // here dm is the pre-declared DataModel instance containing the data of 'cars.json' file\n * const sortedDm = dm.sort([\n * ['Origin', ['Acceleration', (a, b) => avg(...a.Acceleration) - avg(...b.Acceleration)]]\n * ]);\n *\n * console.log(dm.getData());\n * console.log(sortedDm.getData());\n *\n * @public\n *\n * @param {Array.} sortingDetails - Sorting details based on which the sorting will be performed.\n * @return {DataModel} Returns a new instance of DataModel with sorted data.\n */\n sort (sortingDetails, config = { saveChild: false }) {\n const rawData = this.getData({\n order: 'row',\n sort: sortingDetails\n });\n const header = rawData.schema.map(field => field.name);\n const dataInCSVArr = [header].concat(rawData.data);\n\n const sortedDm = new this.constructor(dataInCSVArr, rawData.schema, { dataFormat: 'DSVArr' });\n\n persistDerivations(\n this,\n sortedDm,\n DM_DERIVATIVES.SORT,\n config,\n sortingDetails\n );\n\n if (config.saveChild) {\n sortedDm.setParent(this);\n } else {\n sortedDm.setParent(null);\n }\n\n return sortedDm;\n }\n\n /**\n * Performs the serialization operation on the current {@link DataModel} instance according to the specified data\n * type. When an {@link DataModel} instance is created, it de-serializes the input data into its internal format,\n * and during its serialization process, it converts its internal data format to the specified data type and returns\n * that data regardless what type of data is used during the {@link DataModel} initialization.\n *\n * @example\n * // here dm is the pre-declared DataModel instance.\n * const csvData = dm.serialize(DataModel.DataFormat.DSV_STR, { fieldSeparator: \",\" });\n * console.log(csvData); // The csv formatted data.\n *\n * const jsonData = dm.serialize(DataModel.DataFormat.FLAT_JSON);\n * console.log(jsonData); // The json data.\n *\n * @public\n *\n * @param {string} type - The data type name for serialization.\n * @param {Object} options - The optional option object.\n * @param {string} options.fieldSeparator - The field separator character for DSV data type.\n * @return {Array|string} Returns the serialized data.\n */\n serialize (type, options) {\n type = type || this._dataFormat;\n options = Object.assign({}, { fieldSeparator: ',' }, options);\n\n const fields = this.getFieldspace().fields;\n const colData = fields.map(f => f.formattedData());\n const rowsCount = colData[0].length;\n let serializedData;\n let rowIdx;\n let colIdx;\n\n if (type === DataFormat.FLAT_JSON) {\n serializedData = [];\n for (rowIdx = 0; rowIdx < rowsCount; rowIdx++) {\n const row = {};\n for (colIdx = 0; colIdx < fields.length; colIdx++) {\n row[fields[colIdx].name()] = colData[colIdx][rowIdx];\n }\n serializedData.push(row);\n }\n } else if (type === DataFormat.DSV_STR) {\n serializedData = [fields.map(f => f.name()).join(options.fieldSeparator)];\n for (rowIdx = 0; rowIdx < rowsCount; rowIdx++) {\n const row = [];\n for (colIdx = 0; colIdx < fields.length; colIdx++) {\n row.push(colData[colIdx][rowIdx]);\n }\n serializedData.push(row.join(options.fieldSeparator));\n }\n serializedData = serializedData.join('\\n');\n } else if (type === DataFormat.DSV_ARR) {\n serializedData = [fields.map(f => f.name())];\n for (rowIdx = 0; rowIdx < rowsCount; rowIdx++) {\n const row = [];\n for (colIdx = 0; colIdx < fields.length; colIdx++) {\n row.push(colData[colIdx][rowIdx]);\n }\n serializedData.push(row);\n }\n } else {\n throw new Error(`Data type ${type} is not supported`);\n }\n\n return serializedData;\n }\n\n addField (field) {\n const fieldName = field.name();\n this._colIdentifier += `,${fieldName}`;\n const partialFieldspace = this._partialFieldspace;\n\n if (!partialFieldspace.fieldsObj()[field.name()]) {\n partialFieldspace.fields.push(field);\n } else {\n const fieldIndex = partialFieldspace.fields.findIndex(fieldinst => fieldinst.name() === fieldName);\n fieldIndex >= 0 && (partialFieldspace.fields[fieldIndex] = field);\n }\n\n // flush out cached namespace values on addition of new fields\n partialFieldspace._cachedFieldsObj = null;\n partialFieldspace._cachedDimension = null;\n partialFieldspace._cachedMeasure = null;\n\n this.__calculateFieldspace().calculateFieldsConfig();\n return this;\n }\n\n /**\n * Creates a new variable calculated from existing variables. This method expects the definition of the newly created\n * variable and a function which resolves the value of the new variable from existing variables.\n *\n * Can create a new measure based on existing variables:\n * @example\n * // DataModel already prepared and assigned to dm variable;\n * const newDm = dataModel.calculateVariable({\n * name: 'powerToWeight',\n * type: 'measure'\n * }, ['horsepower', 'weight_in_lbs', (hp, weight) => hp / weight ]);\n *\n *\n * Can create a new dimension based on existing variables:\n * @example\n * // DataModel already prepared and assigned to dm variable;\n * const child = dataModel.calculateVariable(\n * {\n * name: 'Efficiency',\n * type: 'dimension'\n * }, ['horsepower', (hp) => {\n * if (hp < 80) { return 'low'; },\n * else if (hp < 120) { return 'moderate'; }\n * else { return 'high' }\n * }]);\n *\n * @public\n *\n * @param {Object} schema - The schema of newly defined variable.\n * @param {Array.} dependency - An array containing the dependency variable names and a resolver\n * function as the last element.\n * @param {Object} config - An optional config object.\n * @param {boolean} [config.saveChild] - Whether the newly created DataModel will be a child.\n * @param {boolean} [config.replaceVar] - Whether the newly created variable will replace the existing variable.\n * @return {DataModel} Returns an instance of DataModel with the new field.\n */\n calculateVariable (schema, dependency, config) {\n schema = sanitizeUnitSchema(schema);\n config = Object.assign({}, { saveChild: true, replaceVar: false }, config);\n\n const fieldsConfig = this.getFieldsConfig();\n const depVars = dependency.slice(0, dependency.length - 1);\n const retrieveFn = dependency[dependency.length - 1];\n\n if (fieldsConfig[schema.name] && !config.replaceVar) {\n throw new Error(`${schema.name} field already exists in datamodel`);\n }\n\n const depFieldIndices = depVars.map((field) => {\n const fieldSpec = fieldsConfig[field];\n if (!fieldSpec) {\n // @todo dont throw error here, use warning in production mode\n throw new Error(`${field} is not a valid column name.`);\n }\n return fieldSpec.index;\n });\n\n const clone = this.clone(config.saveChild);\n\n const fs = clone.getFieldspace().fields;\n const suppliedFields = depFieldIndices.map(idx => fs[idx]);\n\n let cachedStore = {};\n let cloneProvider = () => this.detachedRoot();\n\n const computedValues = [];\n rowDiffsetIterator(clone._rowDiffset, (i) => {\n const fieldsData = suppliedFields.map(field => field.partialField.data[i]);\n computedValues[i] = retrieveFn(...fieldsData, i, cloneProvider, cachedStore);\n });\n const [field] = createFields([computedValues], [schema], [schema.name]);\n clone.addField(field);\n\n persistDerivations(\n this,\n clone,\n DM_DERIVATIVES.CAL_VAR,\n { config: schema, fields: depVars },\n retrieveFn\n );\n\n return clone;\n }\n\n /**\n * Propagates changes across all the connected DataModel instances.\n *\n * @param {Array} identifiers - A list of identifiers that were interacted with.\n * @param {Object} payload - The interaction specific details.\n *\n * @return {DataModel} DataModel instance.\n */\n propagate (identifiers, config = {}, addToNameSpace, propConfig = {}) {\n const isMutableAction = config.isMutableAction;\n const propagationSourceId = config.sourceId;\n const payload = config.payload;\n const rootModel = getRootDataModel(this);\n const propagationNameSpace = rootModel._propagationNameSpace;\n const rootGroupByModel = getRootGroupByModel(this);\n const rootModels = {\n groupByModel: rootGroupByModel,\n model: rootModel\n };\n\n addToNameSpace && addToPropNamespace(propagationNameSpace, config, this);\n propagateToAllDataModels(identifiers, rootModels, { propagationNameSpace, sourceId: propagationSourceId },\n Object.assign({\n payload\n }, config));\n\n if (isMutableAction) {\n propagateImmutableActions(propagationNameSpace, rootModels, {\n config,\n propConfig\n }, this);\n }\n\n return this;\n }\n\n /**\n * Associates a callback with an event name.\n *\n * @param {string} eventName - The name of the event.\n * @param {Function} callback - The callback to invoke.\n * @return {DataModel} Returns this current DataModel instance itself.\n */\n on (eventName, callback) {\n switch (eventName) {\n case PROPAGATION:\n this._onPropagation.push(callback);\n break;\n }\n return this;\n }\n\n /**\n * Unsubscribes the callbacks for the provided event name.\n *\n * @param {string} eventName - The name of the event to unsubscribe.\n * @return {DataModel} Returns the current DataModel instance itself.\n */\n unsubscribe (eventName) {\n switch (eventName) {\n case PROPAGATION:\n this._onPropagation = [];\n break;\n\n }\n return this;\n }\n\n /**\n * This method is used to invoke the method associated with propagation.\n *\n * @param {Object} payload The interaction payload.\n * @param {DataModel} identifiers The propagated DataModel.\n * @memberof DataModel\n */\n handlePropagation (propModel, payload) {\n let propListeners = this._onPropagation;\n propListeners.forEach(fn => fn.call(this, propModel, payload));\n }\n\n /**\n * Performs the binning operation on a measure field based on the binning configuration. Binning means discretizing\n * values of a measure. Binning configuration contains an array; subsequent values from the array marks the boundary\n * of buckets in [inclusive, exclusive) range format. This operation does not mutate the subject measure field,\n * instead, it creates a new field (variable) of type dimension and subtype binned.\n *\n * Binning can be configured by\n * - providing custom bin configuration with non-uniform buckets,\n * - providing bins count,\n * - providing each bin size,\n *\n * When custom `buckets` are provided as part of binning configuration:\n * @example\n * // DataModel already prepared and assigned to dm variable\n * const config = { name: 'binnedHP', buckets: [30, 80, 100, 110] }\n * const binnedDM = dataModel.bin('horsepower', config);\n *\n * @text\n * When `binsCount` is defined as part of binning configuration:\n * @example\n * // DataModel already prepared and assigned to dm variable\n * const config = { name: 'binnedHP', binsCount: 5, start: 0, end: 100 }\n * const binDM = dataModel.bin('horsepower', config);\n *\n * @text\n * When `binSize` is defined as part of binning configuration:\n * @example\n * // DataModel already prepared and assigned to dm variable\n * const config = { name: 'binnedHorsepower', binSize: 20, start: 5}\n * const binDM = dataModel.bin('horsepower', config);\n *\n * @public\n *\n * @param {string} measureFieldName - The name of the target measure field.\n * @param {Object} config - The config object.\n * @param {string} [config.name] - The name of the new field which will be created.\n * @param {string} [config.buckets] - An array containing the bucket ranges.\n * @param {string} [config.binSize] - The size of each bin. It is ignored when buckets are given.\n * @param {string} [config.binsCount] - The total number of bins to generate. It is ignored when buckets are given.\n * @param {string} [config.start] - The start value of the bucket ranges. It is ignored when buckets are given.\n * @param {string} [config.end] - The end value of the bucket ranges. It is ignored when buckets are given.\n * @return {DataModel} Returns a new {@link DataModel} instance with the new field.\n */\n bin (measureFieldName, config) {\n const fieldsConfig = this.getFieldsConfig();\n\n if (!fieldsConfig[measureFieldName]) {\n throw new Error(`Field ${measureFieldName} doesn't exist`);\n }\n\n const binFieldName = config.name || `${measureFieldName}_binned`;\n\n if (fieldsConfig[binFieldName]) {\n throw new Error(`Field ${binFieldName} already exists`);\n }\n\n const measureField = this.getFieldspace().fieldsObj()[measureFieldName];\n const { binnedData, bins } = createBinnedFieldData(measureField, this._rowDiffset, config);\n\n const binField = createFields([binnedData], [\n {\n name: binFieldName,\n type: FieldType.DIMENSION,\n subtype: DimensionSubtype.BINNED,\n bins\n }], [binFieldName])[0];\n\n const clone = this.clone(config.saveChild);\n clone.addField(binField);\n\n persistDerivations(\n this,\n clone,\n DM_DERIVATIVES.BIN,\n { measureFieldName, config, binFieldName },\n null\n );\n\n return clone;\n }\n\n /**\n * Creates a new {@link DataModel} instance with completely detached root from current {@link DataModel} instance,\n * the new {@link DataModel} instance has no parent-children relationship with the current one, but has same data as\n * the current one.\n * This API is useful when a completely different {@link DataModel} but with same data as the current instance is\n * needed.\n *\n * @example\n * const dm = new DataModel(data, schema);\n * const detachedDm = dm.detachedRoot();\n *\n * // has different namespace\n * console.log(dm.getPartialFieldspace().name);\n * console.log(detachedDm.getPartialFieldspace().name);\n *\n * // has same data\n * console.log(dm.getData());\n * console.log(detachedDm.getData());\n *\n * @public\n *\n * @return {DataModel} Returns a detached {@link DataModel} instance.\n */\n detachedRoot () {\n const data = this.serialize(DataFormat.FLAT_JSON);\n const schema = this.getSchema();\n\n return new DataModel(data, schema);\n }\n}\n\nexport default DataModel;\n","import { extend2 } from '../utils';\nimport { rowDiffsetIterator } from './row-diffset-iterator';\nimport DataModel from '../export';\nimport reducerStore from '../utils/reducer-store';\nimport { defaultReducerName } from './group-by-function';\nimport { FieldType } from '../enums';\n\n/**\n * This function sanitize the user given field and return a common Array structure field\n * list\n * @param {DataModel} dataModel the dataModel operating on\n * @param {Array} fieldArr user input of field Array\n * @return {Array} arrays of field name\n */\nfunction getFieldArr (dataModel, fieldArr) {\n const retArr = [];\n const fieldStore = dataModel.getFieldspace();\n const dimensions = fieldStore.getDimension();\n\n Object.entries(dimensions).forEach(([key]) => {\n if (fieldArr && fieldArr.length) {\n if (fieldArr.indexOf(key) !== -1) {\n retArr.push(key);\n }\n } else {\n retArr.push(key);\n }\n });\n\n return retArr;\n}\n\n/**\n * This sanitize the reducer provide by the user and create a common type of object.\n * user can give function Also\n * @param {DataModel} dataModel dataModel to worked on\n * @param {Object|function} [reducers={}] reducer provided by the users\n * @return {Object} object containing reducer function for every measure\n */\nfunction getReducerObj (dataModel, reducers = {}) {\n const retObj = {};\n const fieldStore = dataModel.getFieldspace();\n const measures = fieldStore.getMeasure();\n const defReducer = reducerStore.defaultReducer();\n\n Object.keys(measures).forEach((measureName) => {\n if (typeof reducers[measureName] !== 'string') {\n reducers[measureName] = measures[measureName].defAggFn();\n }\n const reducerFn = reducerStore.resolve(reducers[measureName]);\n if (reducerFn) {\n retObj[measureName] = reducerFn;\n } else {\n retObj[measureName] = defReducer;\n reducers[measureName] = defaultReducerName;\n }\n });\n return retObj;\n}\n\n/**\n * main function which perform the group-by operations which reduce the measures value is the\n * fields are common according to the reducer function provided\n * @param {DataModel} dataModel the dataModel to worked\n * @param {Array} fieldArr fields according to which the groupby should be worked\n * @param {Object|Function} reducers reducers function\n * @param {DataModel} existingDataModel Existing datamodel instance\n * @return {DataModel} new dataModel with the group by\n */\nfunction groupBy (dataModel, fieldArr, reducers, existingDataModel) {\n const sFieldArr = getFieldArr(dataModel, fieldArr);\n const reducerObj = getReducerObj(dataModel, reducers);\n const fieldStore = dataModel.getFieldspace();\n const fieldStoreObj = fieldStore.fieldsObj();\n const dbName = fieldStore.name;\n const dimensionArr = [];\n const measureArr = [];\n const schema = [];\n const hashMap = {};\n const data = [];\n let newDataModel;\n\n // Prepare the schema\n Object.entries(fieldStoreObj).forEach(([key, value]) => {\n if (sFieldArr.indexOf(key) !== -1 || reducerObj[key]) {\n schema.push(extend2({}, value.schema()));\n\n switch (value.schema().type) {\n case FieldType.MEASURE:\n measureArr.push(key);\n break;\n default:\n case FieldType.DIMENSION:\n dimensionArr.push(key);\n }\n }\n });\n // Prepare the data\n let rowCount = 0;\n rowDiffsetIterator(dataModel._rowDiffset, (i) => {\n let hash = '';\n dimensionArr.forEach((_) => {\n hash = `${hash}-${fieldStoreObj[_].partialField.data[i]}`;\n });\n if (hashMap[hash] === undefined) {\n hashMap[hash] = rowCount;\n data.push({});\n dimensionArr.forEach((_) => {\n data[rowCount][_] = fieldStoreObj[_].partialField.data[i];\n });\n measureArr.forEach((_) => {\n data[rowCount][_] = [fieldStoreObj[_].partialField.data[i]];\n });\n rowCount += 1;\n } else {\n measureArr.forEach((_) => {\n data[hashMap[hash]][_].push(fieldStoreObj[_].partialField.data[i]);\n });\n }\n });\n\n // reduction\n let cachedStore = {};\n let cloneProvider = () => dataModel.detachedRoot();\n data.forEach((row) => {\n const tuple = row;\n measureArr.forEach((_) => {\n tuple[_] = reducerObj[_](row[_], cloneProvider, cachedStore);\n });\n });\n if (existingDataModel) {\n existingDataModel.__calculateFieldspace();\n newDataModel = existingDataModel;\n }\n else {\n newDataModel = new DataModel(data, schema, { name: dbName });\n }\n return newDataModel;\n}\n\nexport { groupBy, getFieldArr, getReducerObj };\n","import { rowDiffsetIterator } from './row-diffset-iterator';\nimport InvalidAwareTypes from '../invalid-aware-types';\n\nconst generateBuckets = (binSize, start, end) => {\n const buckets = [];\n let next = start;\n\n while (next < end) {\n buckets.push(next);\n next += binSize;\n }\n buckets.push(next);\n\n return buckets;\n};\n\nconst findBucketRange = (bucketRanges, value) => {\n let leftIdx = 0;\n let rightIdx = bucketRanges.length - 1;\n let midIdx;\n let range;\n\n // Here use binary search as the bucketRanges is a sorted array\n while (leftIdx <= rightIdx) {\n midIdx = leftIdx + Math.floor((rightIdx - leftIdx) / 2);\n range = bucketRanges[midIdx];\n\n if (value >= range.start && value < range.end) {\n return range;\n } else if (value >= range.end) {\n leftIdx = midIdx + 1;\n } else if (value < range.start) {\n rightIdx = midIdx - 1;\n }\n }\n\n return null;\n};\n\n /**\n * Creates the bin data from input measure field and supplied configs.\n *\n * @param {Measure} measureField - The Measure field instance.\n * @param {string} rowDiffset - The datamodel rowDiffset values.\n * @param {Object} config - The config object.\n * @return {Object} Returns the binned data and the corresponding bins.\n */\nexport function createBinnedFieldData (measureField, rowDiffset, config) {\n let { buckets, binsCount, binSize, start, end } = config;\n const [dMin, dMax] = measureField.domain();\n\n if (!buckets) {\n start = (start !== 0 && (!start || start > dMin)) ? dMin : start;\n end = (end !== 0 && (!end || end < dMax)) ? (dMax + 1) : end;\n\n if (binsCount) {\n binSize = Math.ceil(Math.abs(end - start) / binsCount);\n }\n\n buckets = generateBuckets(binSize, start, end);\n }\n\n if (buckets[0] > dMin) {\n buckets.unshift(dMin);\n }\n if (buckets[buckets.length - 1] <= dMax) {\n buckets.push(dMax + 1);\n }\n\n const bucketRanges = [];\n for (let i = 0; i < buckets.length - 1; i++) {\n bucketRanges.push({\n start: buckets[i],\n end: buckets[i + 1]\n });\n }\n\n const binnedData = [];\n rowDiffsetIterator(rowDiffset, (i) => {\n const datum = measureField.partialField.data[i];\n if (datum instanceof InvalidAwareTypes) {\n binnedData.push(datum);\n return;\n }\n\n const range = findBucketRange(bucketRanges, datum);\n binnedData.push(`${range.start}-${range.end}`);\n });\n\n return { binnedData, bins: buckets };\n}\n","import { fnList } from '../operator/group-by-function';\n\nexport const { sum, avg, min, max, first, last, count, std: sd } = fnList;\n","import DataModel from './datamodel';\nimport {\n compose,\n bin,\n select,\n project,\n groupby as groupBy,\n calculateVariable,\n sort,\n crossProduct,\n difference,\n naturalJoin,\n leftOuterJoin,\n rightOuterJoin,\n fullOuterJoin,\n union\n} from './operator';\nimport * as Stats from './stats';\nimport * as enums from './enums';\nimport { DateTimeFormatter } from './utils';\nimport { DataFormat, FilteringMode, DM_DERIVATIVES } from './constants';\nimport InvalidAwareTypes from './invalid-aware-types';\nimport pkg from '../package.json';\n\nconst Operators = {\n compose,\n bin,\n select,\n project,\n groupBy,\n calculateVariable,\n sort,\n crossProduct,\n difference,\n naturalJoin,\n leftOuterJoin,\n rightOuterJoin,\n fullOuterJoin,\n union\n};\n\nconst version = pkg.version;\nObject.assign(DataModel, {\n Operators,\n Stats,\n DM_DERIVATIVES,\n DateTimeFormatter,\n DataFormat,\n FilteringMode,\n InvalidAwareTypes,\n version\n}, enums);\n\nexport default DataModel;\n","/**\n * Wrapper on calculateVariable() method of DataModel to behave\n * the pure-function functionality.\n *\n * @param {Array} args - The argument list.\n * @return {any} Returns the returned value of calling function.\n */\nexport const calculateVariable = (...args) => dm => dm.calculateVariable(...args);\n\n/**\n * Wrapper on sort() method of DataModel to behave\n * the pure-function functionality.\n *\n * @param {Array} args - The argument list.\n * @return {any} Returns the returned value of calling function.\n */\nexport const sort = (...args) => dm => dm.sort(...args);\n","import { crossProduct } from './cross-product';\nimport { naturalJoinFilter } from './natural-join-filter-function';\n\nexport function naturalJoin (dataModel1, dataModel2) {\n return crossProduct(dataModel1, dataModel2, naturalJoinFilter(dataModel1, dataModel2), true);\n}\n","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"hyperdis\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"hyperdis\"] = factory();\n\telse\n\t\troot[\"hyperdis\"] = factory();\n})(window, function() {\nreturn "," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 0);\n","const makeEntry = (arr, sCon) => {\n arr.forEach((elem) => {\n if (elem === undefined || elem === null) {\n return;\n }\n sCon[elem] = 1;\n });\n};\n\nexport default class ForeignSet {\n constructor (arr) {\n this._set = {};\n makeEntry(arr, this._set);\n }\n\n append (arr) {\n makeEntry(arr, this._set);\n return this;\n }\n\n toArray () {\n return Object.keys(this._set);\n }\n\n static difference (set1, set2) {\n let key;\n const filteredKeys = [],\n s1 = set1._set,\n s2 = set2._set;\n for (key in s1) {\n if (!({}).hasOwnProperty.call(s1, key)) {\n continue;\n }\n if (key in s2) {\n continue;\n }\n filteredKeys.push(key);\n }\n return new ForeignSet(filteredKeys);\n }\n}\n","/* global window */\n\nimport ForeignSet from './set';\n\nconst\n isSimpleObject = (obj) => {\n let token;\n if (typeof obj === 'object') {\n if (obj === null) { return false; }\n token = Object.prototype.toString.call(obj);\n if (token === '[object Object]') {\n return (obj.constructor.toString().match(/^function (.*)\\(\\)/m) || [])[1] === 'Object';\n }\n }\n return false;\n },\n minMsThreshold = 16,\n /* istanbul ignore next */win = typeof window === 'undefined' ? (this || {}) : window,\n /* istanbul ignore next */ reqAnimFrame = win.requestAnimationFrame || win.webkitRequestAnimationFrame ||\n win.mozRequestAnimationFrame || win.oRequestAnimationFrame ||\n win.msRequestAnimationFrame ||\n function (callback) {\n setTimeout(callback, minMsThreshold);\n },\n\n getTimeBasedId = () => {\n if (getTimeBasedId.__lastTime === new Date().getTime()) {\n return (getTimeBasedId.__lastTime).toString() + (getTimeBasedId.__id++).toString();\n }\n\n getTimeBasedId.__id = 0;\n getTimeBasedId.__lastTime = new Date().getTime();\n return (getTimeBasedId.__lastTime).toString() + (getTimeBasedId.__id++).toString();\n },\n pullableRecent = (nodes, fn) => {\n let nFn = () => {\n fn(...nodes.map((node) => {\n const\n hist = node.history,\n l = hist.length - 1;\n return [hist[l - 1 < 0 ? 0 : l - 1], hist[l]];\n }));\n };\n nFn.__id = getTimeBasedId();\n return nFn;\n },\n pullableEnd = (nodes, fn) => {\n let nFn = () => {\n fn(...nodes.map((node) => {\n const hist = node.history;\n return [hist[0], hist[hist.length - 1]];\n }));\n };\n nFn.__id = getTimeBasedId();\n return nFn;\n },\n unique = fns => fns\n .reduce((store, fn) => {\n // @warn function with side effect, it mutates the store passed during initialization\n if (fn.__id in store.map) {\n return store;\n }\n\n store.map[fn.__id] = 1;\n store.unique.push(fn);\n\n return store;\n }, { map: {}, unique: [] })\n .unique,\n compose = fns => () => {\n fns.forEach(fn => fn());\n },\n flat = (...params) => {\n const res = [];\n params.forEach(param => res.push(...param));\n return res;\n },\n identityMap = arrays => arrays,\n splitPathProp = (path) => {\n const pathArr = path.split('.'),\n len = pathArr.length;\n return [pathArr.slice(0, len - 1), pathArr[len - 1]];\n },\n scheduler = (onFinishCallback) => {\n let queue = [],\n animationFrame = null;\n\n onFinishCallback = onFinishCallback &&\n typeof onFinishCallback === 'function' && onFinishCallback || (() => { });\n\n return (listeners, payload) => {\n [].push.apply(queue, listeners);\n if (animationFrame === null) {\n animationFrame = reqAnimFrame(() => {\n const tempQ = queue.slice(0);\n queue.length = 0;\n animationFrame = null;\n\n unique(tempQ).forEach(fn => fn());\n onFinishCallback(payload);\n });\n }\n };\n },\n fetch = namedNode => (...params) => params.map((param) => {\n const node = namedNode[param];\n return {\n name: node.name,\n qualifiedName: node.qualifiedName,\n value: node.seed\n };\n }),\n fetchAggregator = (...params) => ({\n dependencies: params.slice(0, params.length - 1),\n fn: params[params.length - 1]\n }),\n getUpstreamNodes = (list) => {\n let res = [];\n const map = {};\n list.forEach(node => map[node.qualifiedName] = -1);\n function rec (arr) {\n arr.forEach((node) => {\n let qname,\n placedIndex,\n preArr,\n postArr;\n if (!((qname = node.qualifiedName) in map)) {\n map[qname] = res.push(node) - 1;\n } else {\n placedIndex = map[qname];\n if (placedIndex !== -1 && placedIndex !== res.length - 1) {\n // If not the last element, readjust the array so that the later dependency position is saved\n preArr = res.slice(0, placedIndex);\n postArr = res.slice(placedIndex + 1);\n res = preArr.concat(postArr);\n\n // reset the index in map\n postArr.forEach((elem, i) => map[elem.qualifiedName] = i + preArr.length);\n map[qname] = res.push(node) - 1;\n }\n }\n rec(node.outgoingEdges);\n });\n }\n rec(list);\n return res;\n },\n resolver = {\n accumulate: (...params) => {\n const resp = {};\n params.forEach((nodeDetails) => {\n Object.assign(resp, { [nodeDetails.name]: nodeDetails.value });\n });\n return resp;\n },\n identity: nodeDetails => nodeDetails.value\n };\n\nfunction resolveDependencyOrder (node, resolved, resolveMap) {\n let qname;\n node.edges.forEach((neighbour) => {\n resolveDependencyOrder(neighbour, resolved, resolveMap);\n });\n\n if (node.isRoot() || (qname = node.qualifiedName) in resolveMap) {\n return;\n }\n resolved.push(node);\n resolveMap[qname] = 1;\n}\n\nclass CustomResolver {\n constructor (resolver) {\n this.fn = resolver;\n this.dep = [];\n }\n\n addDependencies(...dep) {\n this.dep.push(...dep);\n return this;\n }\n\n getDependencies () {\n return this.dep;\n }\n\n get () {\n return this.fn;\n }\n}\n\nexport {\n isSimpleObject,\n scheduler,\n compose,\n flat,\n identityMap,\n pullableEnd,\n pullableRecent,\n unique,\n splitPathProp,\n resolver,\n ForeignSet,\n resolveDependencyOrder,\n fetch,\n fetchAggregator,\n CustomResolver,\n getUpstreamNodes\n};\n","export default class GraphNode {\n constructor (name, qualifiedName, options) {\n /* istanbul ignore next */options = options || {};\n this.name = name;\n this.qualifiedName = qualifiedName;\n this.edges = [];\n this.outgoingEdges = [];\n this._seed = null;\n this.requireResolve = true;\n this.retriever = options.retriever;\n this.history = [];\n this.resolver = null;\n this.electricEdges = [];\n }\n\n addDependencies (...dep) {\n this.edges.push(...dep);\n dep.forEach(entry => entry.outgoingEdges.push(this));\n return this;\n }\n\n addElectricNode (node) {\n this.electricEdges.push(node);\n return this;\n }\n\n get seed () {\n return this._seed;\n }\n\n set seed (value) {\n this._seed = value;\n this.requireResolve = true;\n return this;\n }\n\n resolve () {\n this.seed = this.resolver(...this.retrieveDetails());\n this.history.push(this.seed);\n this.requireResolve = false;\n return this;\n }\n\n retrieveDetails () {\n if (this.edges.length === 0) {\n return [{\n name: this.name,\n qualifiedName: this.qualifiedName,\n value: this.seed\n }];\n }\n return this.retriever(...this.edges.map(edge => edge.qualifiedName));\n }\n\n repeatHead () {\n const\n history = this.history,\n head = history[history.length - 1];\n // @todo- Akash, write test case if history.length === 0 to pass code coverage\n if (history.length === 0) {\n return this;\n }\n history.push(head);\n return this;\n }\n\n flush () {\n const hist = this.history,\n head = hist[hist.length - 1];\n hist.length = 0;\n hist.push(head);\n return this;\n }\n\n isRoot () {\n return this.name === null;\n }\n}\n","import {\n pullableRecent,\n pullableEnd\n} from './utils';\n\nexport default class ElectricNode {\n constructor () {\n this.edges = [];\n this.listeners = {\n nextFrame: [],\n currentFrame: []\n };\n }\n\n addEdges (...nodes) {\n this.edges.push(...nodes);\n return this;\n }\n\n regListenerForCurrFrame (fn) {\n const lstnrs = this.listeners.currentFrame;\n let index = lstnrs.push(pullableRecent(this.edges, fn)) - 1;\n\n return () => {\n this.listeners.currentFrame = lstnrs.filter((fn, i) => i !== index);\n };\n }\n\n regListenerForNextFrame (fn) {\n const lstnrs = this.listeners.nextFrame;\n let index = lstnrs.push(pullableEnd(this.edges, fn)) - 1;\n\n return () => {\n this.listeners.nextFrame = lstnrs.filter((fn, i) => i !== index);\n };\n }\n\n hasNextFrameListener () {\n return !!this.listeners.nextFrame.length;\n }\n}\n","import {\n isSimpleObject,\n resolver,\n // upstreamNodes,\n flat,\n resolveDependencyOrder,\n getUpstreamNodes,\n ForeignSet,\n fetch,\n CustomResolver,\n scheduler\n} from './utils';\nimport Node from './graph-node';\nimport ElectricNode from './electric-node';\n\nexport default class Graph {\n constructor () {\n this.qualifiedNodeMap = {};\n this.retriever = fetch(this.qualifiedNodeMap);\n this.root = new Node(null, null, { retriever: this.retriever });\n this.root.resolver = resolver.accumulate;\n\n this._wholeSet = null;\n this._propagate = true;\n this.propagationOverride = {\n currentFrameListeners: false,\n nextFrameListeners: false\n };\n\n this._schedule = scheduler((payload) => {\n let qname;\n for (qname in payload.flushTarget) {\n if (!({}).hasOwnProperty.call(this.qualifiedNodeMap, qname)) {\n return;\n }\n this.qualifiedNodeMap[qname].flush();\n }\n });\n }\n\n createNodesFrom (obj, mount) {\n let val,\n resolveReqList;\n const qualifiedNodeMap = this.qualifiedNodeMap,\n root = this.root,\n retriever = this.retriever;\n\n (function rec (objn, qualifiedName, history) {\n let key,\n qname,\n perv,\n node;\n\n for (key in objn) {\n if (!({}).hasOwnProperty.call(objn, key)) {\n continue;\n }\n qname = `${qualifiedName}${key}`;\n node = new Node(key, qname, { retriever });\n qualifiedNodeMap[qname] = node;\n\n if ((perv = history.perv) !== undefined) {\n perv.addDependencies(node);\n } else {\n // top most level entries\n root.addDependencies(node);\n }\n\n if (isSimpleObject(val = objn[key])) {\n rec(val, `${qualifiedName}${key}.`, { perv: node });\n node.resolver = resolver.accumulate;\n } else if (val instanceof CustomResolver) {\n node.resolver = val.get();\n node.addDependencies(...val.getDependencies().map(qname => qualifiedNodeMap[qname]));\n } else {\n node.resolver = resolver.identity;\n node.seed = val;\n // node.resolve();\n }\n }\n }(obj, mount === null ? '' : `${mount}.`, {\n perv: qualifiedNodeMap[mount]\n }));\n\n this._wholeSet = new ForeignSet(Object.keys(this.qualifiedNodeMap));\n\n // Recalculate the model without firing the listeners\n // @todo selective branch resolve. Currently resolve gets called even for a branch which was updated\n resolveReqList = this.constructor.getResolvedList(root).concat(root).filter(node => node.requireResolve);\n resolveReqList.forEach(node => node.resolve());\n getUpstreamNodes(resolveReqList).forEach(node => node.resolve());\n return this;\n }\n\n getNodeValue (prop) {\n if (prop in this.qualifiedNodeMap) {\n return this.qualifiedNodeMap[prop].seed;\n }\n return undefined;\n }\n\n createElectricNodeOf (props, fnSpec) {\n const nodes = props.map(prop => this.qualifiedNodeMap[prop]),\n eNode = new ElectricNode().addEdges(...nodes);\n\n nodes.forEach(node => node.addElectricNode(eNode));\n return eNode[`regListenerFor${fnSpec.type}`](fnSpec.fn);\n }\n\n update (...params) {\n let changedSet,\n upstreamNodes;\n const\n electricEdges = [],\n nodes = params.map((entry) => {\n entry[0].seed = entry[1];\n return entry[0];\n });\n nodes.forEach(node => node.resolve());\n electricEdges.push(...flat(...nodes.map(node => node.electricEdges)));\n changedSet = new ForeignSet(nodes.map(node => node.qualifiedName));\n\n if (!this._propagate) {\n this.__execUniqueElectricEdges(electricEdges);\n this._propagate = true;\n return this;\n }\n\n upstreamNodes = getUpstreamNodes(nodes);\n upstreamNodes.forEach(upstreamNode => upstreamNode.resolve());\n changedSet.append(upstreamNodes.map(node => node.qualifiedName));\n electricEdges.push(...flat(...upstreamNodes.map(node => node.electricEdges)));\n\n this.__execUniqueElectricEdges(Array.from(new Set(electricEdges)), changedSet);\n return this;\n }\n\n __execUniqueElectricEdges (electricEdges, changedSet) {\n const\n cfLstnrs = [], // current frame listeners\n nfLstnrs = []; // next frame listeners\n if (changedSet) {\n const\n differenceSet = ForeignSet.difference(this._wholeSet, changedSet),\n entries = differenceSet.toArray();\n\n entries.forEach(entry => this.qualifiedNodeMap[entry].repeatHead());\n }\n\n electricEdges.forEach((e) => {\n cfLstnrs.push(...e.listeners.currentFrame);\n });\n electricEdges.forEach((e) => {\n nfLstnrs.push(...e.listeners.nextFrame);\n });\n\n !this.propagationOverride.currentFrameListeners && cfLstnrs.forEach(fn => fn());\n !this.propagationOverride.nextFrameListeners && this._schedule(nfLstnrs, { flushTarget: changedSet });\n this.resetPropagationOverride();\n return this;\n }\n\n resetNodeValue (...qnames) {\n const nodes = qnames.map(qname => this.qualifiedNodeMap[qname]),\n args = nodes.map(node => [node, node.seed]);\n this.update(...args);\n return this;\n }\n\n static getResolvedList (node) {\n const resolved = [];\n resolveDependencyOrder(node, resolved, {});\n return resolved;\n }\n\n stopPropagation () {\n this._propagate = false;\n return this;\n }\n\n resetPropagationOverride () {\n this.propagationOverride.currentFrameListeners = false;\n this.propagationOverride.nextFrameListeners = false;\n return this;\n }\n\n setPropagationOverride (key) {\n this.propagationOverride[`${key}Listeners`] = true;\n return this;\n }\n\n getNodeFromQualifiedName (qname) {\n return this.qualifiedNodeMap[qname];\n }\n}\n","import Graph from './graph';\nimport { CustomResolver, fetchAggregator } from './utils';\n\n/**\n * The container class for Hyperdis. Hyperdis is an enabler for observable object with few interesting features like,\n * calculated property, next frame and same frame listeners, multiple listeners etc with a dependency resolving system.\n * It internally uses a graph to hold the hierarchial relationship of a object. Model is merely a container which\n * ties all the components together.\n *\n * @todo Circular dependency detection is not present\n *\n * @example check src/index.spec.js\n * @class\n */\nclass Model {\n constructor () {\n this._graph = new Graph();\n this._lockFlag = false;\n this._reqQ = [];\n }\n\n /**\n * Static method to create and init the model with an observable seed\n *\n * @param {Object} obj The target object which is required to be made observable\n * @return {Model} instance of the observable object model\n */\n static create (obj) {\n return new Model()._addPropInModel(null, obj);\n }\n\n /**\n * Appends more observable property on the already observable instance. This mutates the original model.\n *\n * This function works in two mode. One being\n * @param {String} mountPoint the property on which the new set of properties will be mounted. If its a nested\n * property then the mountPoint has to be written such a way so it feels like you are\n * accessing the object. If the mount point is not found then he obeservables are added in\n * the root.\n * @param {Object} The target object which is required to be made observable\n *\n * Another being\n * @param {Object} The target object which is required to be made observable\n *\n * @return {Model} instance of the observable object model\n */\n append (...params) {\n let mountPoint,\n obj;\n\n if (params.length === 1) {\n mountPoint = null;\n obj = params[0];\n } else {\n mountPoint = params[0];\n obj = params[1];\n }\n\n this._addPropInModel(mountPoint, obj);\n return this;\n }\n\n /**\n * Creates a calculated variable from existing variable. This variable can't be updated from outside.\n * @param {string} mountpoint property path on which the new variable will be placed\n * @param {string} name name of the variable. If the variable could have hierarchy like `limits.start`\n * @param {Function} fn funtion where the dependent variables are injected based on the dependency requirement\n */\n calculatedProp (...params) {\n let calculationConfig,\n customResolver,\n varName,\n mount,\n fetchFn;\n\n if (params.length > 2) {\n mount = params[0];\n varName = params[1];\n fetchFn = params[2];\n } else {\n mount = null;\n varName = params[0];\n fetchFn = params[1];\n }\n\n calculationConfig = fetchFn(fetchAggregator);\n customResolver = new CustomResolver(calculationConfig.fn);\n customResolver.addDependencies(...calculationConfig.dependencies);\n\n this._addPropInModel(mount, { [varName]: customResolver });\n return this;\n }\n\n // eslint-disable-next-line require-jsdoc\n _addPropInModel (mountPoint, obj) {\n this._graph.createNodesFrom(obj, mountPoint);\n return this;\n }\n\n /**\n * Register a listener in the current frame when a property or group of properties is changed.\n *\n * @example\n * This function takes a single or group of property and handler which is called when any of the properties are\n * changed.\n * When a single property is changed the handler is called with two parameter, what was the old value of the state\n * property and what is the new value.\n * myState.on('range.start', (oldValue, newValue) => {\n * console.log('Value before prop change', oldValue);\n * console.log('Value after prop change', newValue);\n * });\n *\n * myState.prop('range.start', 9);\n * // Output\n * Value before prop change 1\n * Value after prop change 9\n *\n * If a handler is registered on change of a property which has another state property as value, then the handler\n * gets called whenever any state property connected to it gets changed\n *\n * myState.on('range', (oldValue, newValue) => {\n * console.log('Value before prop change', oldValue);\n * console.log('Value after prop change', newValue);\n * });\n *\n * myState.prop('range.start', 10);\n * myState.prop('range.type.absolute', false);\n *\n * // Output\n * Value before prop change\n * range {\n * start: 9,\n * end: 5,\n * type: {\n * absolute: true\n * }\n * }\n * Value after prop change\n * range: {\n * start: 10,\n * end: 5,\n * type: {\n * absolute: false\n * }\n * }\n * If a handler is registered with more than one property change then, the handler is called when any of the\n * properties gets changed. In this cast the handler is called with more than one parameter: each for one state\n * property which is registered for listening. Each parameter is of type array containing [oldValue, newValue]\n *\n * myState.on('range.start', 'range.end', (start, end) => {\n * console.log('Start', start);\n * console.log('End', end);\n * });\n *\n * myState.prop('range.start', 12);\n *\n * // Output\n * Start [10, 12]\n * End [5, 5]\n *\n * myState.prop('range.end', 7);\n *\n * // Output\n * Start [12, 12]\n * End [5, 7]\n *\n * The on returns a function which is when called the listener registered gets unregistered\n *\n * let unsub = myState.on(['range.start', 'range.end'], (start, end) => {\n * console.log('Start', start);\n * console.log('End', end);\n * });\n *\n * // Unsubscribe\n * unsub()\n *\n * On takes an optional boolean value as the last parameter, which if passed as a true value the handler gets called\n * during registration itself.\n *\n * @param {Array.} props List of properties which is of interest\n * @param {Function} fn Listener to be executed when any of them is changed. The listener is called with the old\n * value and new value of the properties\n * @param {*} instantCall When registered if the function is to be triggered with the value of the property\n *\n * @return {Function} function to unsubscribe from the listeners registry\n */\n on (props, fn, instantCall) {\n const\n propsArr = props instanceof Array ? props : [props],\n // All there listeners will be executed in the current stack frame\n unsub = this._graph.createElectricNodeOf(propsArr, {\n type: 'CurrFrame',\n fn\n });\n\n if (instantCall) {\n // Bar current next frame listeners from getting fired\n this._graph.stopPropagation().setPropagationOverride('nextFrame').resetNodeValue(...props);\n }\n return unsub;\n }\n\n /**\n * Register a listener for the next frame when a property or group of properties is changed.\n *\n * @example\n * See the examples for the on listener\n *\n * @param {Array.} props List of properties which is of interest\n * @param {Function} fn Listener to be executed when any of them is changed. The listener is called with the old\n * value and new value of the properties. Here the oldvalue is last value of the last frame\n * @param {*} instantCall When registered if the function is to be triggered with the value of the property\n *\n * @return {Function} function to unsubscribe from the listeners registry\n */\n next (props, fn, instantCall) {\n const\n propsArr = props instanceof Array ? props : [props],\n // All there listeners will be executed at the tick of next animation frame\n unsub = this._graph.createElectricNodeOf(propsArr, {\n type: 'NextFrame',\n fn\n });\n\n // @todo check support for this from the graph side\n if (instantCall) {\n // Bar current frame listeners from getting fired\n this._graph.stopPropagation().setPropagationOverride('currentFrame').resetNodeValue(...props);\n }\n\n return unsub;\n }\n\n /**\n * Lock queues the request of property change and releases the change when unlock is called. This is helpful when\n * multiple property is getting called and the model listeners are to be fired once at the end of update.\n *\n * @return {Model} instance of the model\n */\n lock () {\n this._lockFlag = true;\n this._reqQ.length = 0;\n return this;\n }\n\n /**\n * Unlock unleashes the change done after the lock was called.\n\n * @return {Model} instance of the model\n */\n unlock () {\n this._lockFlag = false;\n this.setProp(...this._reqQ);\n this._reqQ.length = 0;\n return this;\n }\n\n /**\n * This acts as getter and setter. If the function is called by passing only one argument, it retrieve the value\n * associated with the property. If the same function is called using two parameters, first one being the property\n * and second one being the value, then the value is set for the property and the handlers are called (if any)\n * which got registered using the on function\n *\n * Getter\n * @param {string} prop property path whose value to be retrieved\n * @return {Object} value of the property at the time of call\n *\n * Setter\n * @param {string} property property path whose value to be ser\n * @return {Model} instance of the model\n */\n prop (...params) {\n let prop,\n val,\n len;\n\n switch (len = params.length) {\n case 1:\n prop = params[0];\n break;\n\n case 2:\n prop = params[0];\n val = params[1];\n break;\n\n default:\n return this;\n }\n\n if (len === 2) {\n this._lockFlag ? this._reqQ.push([prop, val]) : this.setProp([prop, val]);\n return this;\n }\n\n return this._graph.getNodeValue(prop);\n }\n\n // eslint-disable-next-line require-jsdoc\n setProp (...props) {\n // Filter out the calculated variables, so that it cant be changed from outside\n // @todo if a node is not leafValue, and change is called, ignore it too\n // props = props.filter(prop => !(VirtualObj.walkTill(prop[0].split('.'), this._vObj).leafValue()\n // instanceof CalculatedVar));\n\n if (props.length === 0) {\n return this;\n }\n\n this._graph.update(...props.map(prop => [this._graph.getNodeFromQualifiedName(prop[0]), prop[1]]));\n return this;\n }\n\n /**\n * Retrieves the graph representation of the object\n * @return {Graph} instance of the graph associated to the model\n */\n graph () {\n return this._graph;\n }\n\n /**\n * Get serialized data from the model\n *\n * @return {Object} Serialized data\n */\n serialize () {\n return this._graph.root.seed;\n }\n}\n\nexport default Model;\n","import Model from './model';\n\nexport default Model;\n","module.exports = function(module) {\n\tif (!module.webpackPolyfill) {\n\t\tmodule.deprecate = function() {};\n\t\tmodule.paths = [];\n\t\t// module.parent = undefined by default\n\t\tif (!module.children) module.children = [];\n\t\tObject.defineProperty(module, \"loaded\", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.l;\n\t\t\t}\n\t\t});\n\t\tObject.defineProperty(module, \"id\", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.i;\n\t\t\t}\n\t\t});\n\t\tmodule.webpackPolyfill = 1;\n\t}\n\treturn module;\n};\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _lib = require('./lib');\n\nvar _lib2 = _interopRequireDefault(_lib);\n\nvar _containerManager = require('./container-manager');\n\nvar _containerManager2 = _interopRequireDefault(_containerManager);\n\nvar slLib = _lib2['default'].init(typeof window !== \"undefined\" ? window : undefined),\n doc = slLib.win.document,\n M = slLib.win.Math,\n max = M.max,\n round = M.round,\n BLANK = '',\n htmlSplCharSpace = { ' ': ' ' },\n documentSupport = slLib.getDocumentSupport(),\n SVG_BBOX_CORRECTION = documentSupport.isWebKit ? 0 : 4.5;\n\n/*\n * Create new instance of SmartLabelManager.\n *\n * SmartLabelManager controls the lifetime of the execution space where the text's metrics will be calculated.\n * This takes a string for a given style and returns the height, width.\n * If a bound box is defined it wraps the text and returns the wrapped height and width.\n * It allows to append ellipsis at the end if the text is truncated.\n *\n * @param {String | Number} id - Id of the instance. If the same id is passed, it disposes the old instance and\n * save the new one;\n * @param {String | HTMLElement} container - The id or the instance of the container where the intermediate dom\n * elements are to be attached. If not passed, it appends in div\n *\n * @param {Boolean} useEllipses - This decides if a ellipses to be appended if the text is truncated.\n * @param {Object} options - Control options\n * {\n * maxCacheLimit: No of letter to be cached. Default: 500.\n * }\n * @constructor\n */\nfunction SmartLabelManager(id, container, useEllipses, options) {\n var wrapper,\n prop,\n max,\n prevInstance,\n isBrowserLess = false,\n store = SmartLabelManager.store;\n\n if (typeof id === 'undefined' || typeof id === 'object') {\n return;\n }\n\n if (prevInstance = store[id]) {\n prevInstance.dispose();\n }\n\n store[id] = this;\n options = options || {};\n options.maxCacheLimit = isFinite(max = options.maxCacheLimit) ? max : slLib.maxDefaultCacheLimit;\n\n if (typeof container === 'string') {\n container = doc.getElementById(container);\n }\n\n wrapper = slLib.createContainer(container);\n wrapper.innerHTML = slLib.testStrAvg;\n\n if (documentSupport.isHeadLess || !documentSupport.isIE && !wrapper.offsetHeight && !wrapper.offsetWidth) {\n isBrowserLess = true;\n }\n\n wrapper.innerHTML = '';\n for (prop in slLib.parentContainerStyle) {\n wrapper.style[prop] = slLib.parentContainerStyle[prop];\n }\n\n this.id = id;\n this.parentContainer = wrapper;\n\n this._containerManager = new _containerManager2['default'](wrapper, isBrowserLess, 10);\n this._showNoEllipses = !useEllipses;\n this._init = true;\n this.style = {};\n this.options = options;\n\n this.setStyle();\n}\n\n/*\n * getSmartText returns the text separated by
whenever a break is necessary. This is to recgonize one\n * generalized format independent of the implementation (canvas based solution, svg based solution). This method\n * converts the output of getSmartText().text to array of lines if the text is wrapped. It sets a named property\n * `lines` on the object passed as parameter.\n *\n * @param {Object} smartlabel - the object returned by getSmartText based on which line arr which to be formed.\n *\n * @return {Object} - The same object which was passed in the arguments. Also a named property `lines` is set.\n */\nSmartLabelManager.textToLines = function (smartlabel) {\n smartlabel = smartlabel || {};\n\n if (!smartlabel.text) {\n smartlabel.text = '';\n } else if (typeof smartlabel.text !== 'string') {\n smartlabel.text = smartlabel.text.toString();\n }\n\n smartlabel.lines = smartlabel.text.split(/\\n|/ig);\n return smartlabel;\n};\n\n// Saves all the instance created so far\nSmartLabelManager.store = {};\n\n// Calculates space taken by a character with an approximation value which is calculated by repeating the\n// character by string length times.\nSmartLabelManager.prototype._calCharDimWithCache = function (text, calculateDifference, length) {\n if (!this._init) {\n return false;\n }\n\n var size,\n csArr,\n tw,\n twi,\n cachedStyle,\n asymmetricDifference,\n maxAdvancedCacheLimit = this.options.maxCacheLimit,\n container = this._container,\n style = this.style || {},\n cache = this._advancedCache || (this._advancedCache = {}),\n advancedCacheKey = this._advancedCacheKey || (this._advancedCacheKey = []),\n cacheName = text + (style.fontSize || BLANK) + (style.fontFamily || BLANK) + (style.fontWeight || BLANK) + (style.fontStyle || BLANK),\n cacheInitName = text + 'init' + (style.fontSize || BLANK) + (style.fontFamily || BLANK) + (style.fontWeight || BLANK) + (style.fontStyle || BLANK);\n\n htmlSplCharSpace[text] && (text = htmlSplCharSpace[text]);\n\n if (!calculateDifference) {\n asymmetricDifference = 0;\n } else {\n if ((asymmetricDifference = cache[cacheInitName]) === undefined) {\n container.innerHTML = text.repeat ? text.repeat(length) : Array(length + 1).join(text); // jshint ignore:line\n tw = container.offsetWidth;\n\n container.innerHTML = text;\n twi = container.offsetWidth;\n\n asymmetricDifference = cache[cacheInitName] = (tw - length * twi) / (length + 1);\n advancedCacheKey.push(cacheInitName);\n if (advancedCacheKey.length > maxAdvancedCacheLimit) {\n delete cache[advancedCacheKey.shift()];\n }\n }\n }\n\n if (cachedStyle = cache[cacheName]) {\n csArr = cachedStyle.split(',');\n return {\n width: parseFloat(csArr[0], 10),\n height: parseFloat(csArr[1], 10)\n };\n }\n\n container.innerHTML = text;\n\n size = {\n height: container.offsetHeight,\n width: container.offsetWidth + asymmetricDifference\n };\n\n cache[cacheName] = size.width + ',' + size.height;\n advancedCacheKey.push(cacheName);\n if (advancedCacheKey.length > maxAdvancedCacheLimit) {\n delete cache[advancedCacheKey.shift()];\n }\n\n return size;\n};\n\n// Provide function to calculate the height and width based on the environment and available support from dom.\nSmartLabelManager.prototype._getWidthFn = function () {\n var contObj = this._containerObj,\n container = this._container,\n svgText = contObj.svgText;\n\n if (svgText) {\n return function (str) {\n var bbox, width;\n\n svgText.textContent = str;\n bbox = svgText.getBBox();\n width = bbox.width - SVG_BBOX_CORRECTION;\n if (width < 1) {\n width = bbox.width;\n }\n\n return width;\n };\n } else {\n return function (str) {\n container.innerHTML = str;\n return container.offsetWidth;\n };\n }\n};\n\n/*\n * Sets the style based on which the text's metrics to be calculated.\n *\n * @param {Object} style - The style object which affects the text size\n * {\n * fontSize / 'font-size' : MUST BE FOLLOWED BY PX (10px, 11px)\n * fontFamily / 'font-family'\n * fontWeight / 'font-weight'\n * fontStyle / 'font-style'\n * }\n *\n * @return {SmartLabelManager} - Current instance of SmartLabelManager\n */\nSmartLabelManager.prototype.setStyle = function (style) {\n if (!this._init) {\n return this;\n }\n\n var sCont;\n\n if (style === this.style && !this._styleNotSet) {\n return;\n }\n\n if (!style) {\n style = this.style;\n }\n\n slLib.setLineHeight(style);\n this.style = style;\n\n this._containerObj = sCont = this._containerManager.get(style);\n\n if (this._containerObj) {\n this._container = sCont.node;\n this._context = sCont.context;\n this._cache = sCont.charCache;\n this._lineHeight = sCont.lineHeight;\n this._styleNotSet = false;\n } else {\n this._styleNotSet = true;\n }\n\n return this;\n};\n\n/*\n * Decides whether ellipses to be shown if the node is truncated\n *\n * @param {Boolean} useEllipses - decides if a ellipses to be appended if the text is truncated. Default: false\n *\n * @return {SmartLabelManager} - Current instance of SmartLabelManager\n */\nSmartLabelManager.prototype.useEllipsesOnOverflow = function (useEllipses) {\n if (!this._init) {\n return this;\n }\n this._showNoEllipses = !useEllipses;\n return this;\n};\n\n/*\n * Get wrapped or truncated text if a bound box is defined around it. The result text would be separated by
\n * if wrapped\n *\n * @param {String} text - the subject text\n * @param {Number} maxWidth - width in px of the the bound box\n * @param {Number} maxHeight - height in px of the the bound box\n * @param {Boolean} noWrap - whether the text to be wrapped. Default false.\n *\n * @return {Object} - The metrics of the text bounded by the box\n * {\n * height : height of the wrapped text\n * width : width of the wrapped text\n * isTruncated : whether the text is truncated\n * maxHeight : Maximum height given\n * maxWidth : Maximum width given\n * oriText : Original text sent\n * oriTextHeight : Original text height\n * oriTextWidth : Original text width\n * text : SMART TEXT\n * }\n */\nSmartLabelManager.prototype.getSmartText = function (text, maxWidth, maxHeight, noWrap) {\n if (!this._init) {\n return false;\n }\n\n if (text === undefined || text === null) {\n text = '';\n } else if (typeof text !== 'string') {\n text = text.toString();\n }\n\n var len,\n trimStr,\n tempArr,\n tmpText,\n maxWidthWithEll,\n toolText,\n oriWidth,\n oriHeight,\n newCharIndex,\n nearestChar,\n tempChar,\n getWidth,\n initialLeft,\n initialTop,\n getOriSizeImproveObj,\n spanArr,\n x,\n y,\n minWidth,\n elem,\n chr,\n elemRightMostPoint,\n elemLowestPoint,\n lastBR,\n removeFromIndex,\n removeFromIndexForEllipses,\n hasHTMLTag = false,\n maxStrWidth = 0,\n lastDash = -1,\n lastSpace = -1,\n lastIndexBroken = -1,\n strWidth = 0,\n strHeight = 0,\n oriTextArr = [],\n i = 0,\n ellipsesStr = this._showNoEllipses ? '' : '...',\n lineHeight = this._lineHeight,\n context = this._context,\n container = this._container,\n sCont = this._containerObj,\n ellipsesWidth = sCont.ellipsesWidth,\n dotWidth = sCont.dotWidth,\n characterArr = [],\n dashIndex = -1,\n spaceIndex = -1,\n lastLineBreak = -1,\n fastTrim = function fastTrim(str) {\n str = str.replace(/^\\s\\s*/, '');\n var ws = /\\s/,\n i = str.length;\n while (ws.test(str.charAt(i -= 1))) {/* jshint noempty:false */}\n return str.slice(0, i + 1);\n },\n smartLabel = {\n text: text,\n maxWidth: maxWidth,\n maxHeight: maxHeight,\n width: null,\n height: null,\n oriTextWidth: null,\n oriTextHeight: null,\n oriText: text,\n isTruncated: false\n };\n\n getWidth = this._getWidthFn();\n\n // In some browsers, offsetheight of a single-line text is getting little (1 px) heigher value of the\n // lineheight. As a result, smartLabel is unable to return single-line text.\n // To fix this, increase the maxHeight a little amount. Hence maxHeight = lineHeight * 1.2\n if (maxHeight === lineHeight) {\n maxHeight *= 1.2;\n }\n\n if (container) {\n if (!documentSupport.isBrowserLess) {\n hasHTMLTag = slLib.xmlTagRegEx.test(text);\n if (!hasHTMLTag) {\n // Due to support of <,> for xml we convert <, > to <,> respectively so to get the correct\n // width it is required to convert the same before calculation for the new improve version of the\n // get text width.\n tmpText = text.replace(slLib.ltgtRegex, function (match) {\n return match === '<' ? '<' : '>';\n });\n getOriSizeImproveObj = this.getOriSize(tmpText, true);\n\n smartLabel.oriTextWidth = oriWidth = getOriSizeImproveObj.width;\n smartLabel.oriTextHeight = oriHeight = getOriSizeImproveObj.height;\n } else {\n container.innerHTML = text;\n smartLabel.oriTextWidth = oriWidth = container.offsetWidth;\n smartLabel.oriTextHeight = oriHeight = container.offsetHeight;\n }\n\n if (oriHeight <= maxHeight && oriWidth <= maxWidth) {\n smartLabel.width = smartLabel.oriTextWidth = oriWidth;\n smartLabel.height = smartLabel.oriTextHeight = oriHeight;\n return smartLabel;\n }\n\n if (lineHeight > maxHeight) {\n smartLabel.text = '';\n smartLabel.width = smartLabel.oriTextWidth = 0;\n smartLabel.height = smartLabel.oriTextHeight = 0;\n return smartLabel;\n }\n }\n\n // Calculate width with ellipses\n text = fastTrim(text).replace(/(\\s+)/g, ' ');\n maxWidthWithEll = this._showNoEllipses ? maxWidth : maxWidth - ellipsesWidth;\n\n if (!hasHTMLTag) {\n oriTextArr = text.split('');\n len = oriTextArr.length;\n trimStr = '', tempArr = [];\n tempChar = oriTextArr[0];\n\n if (this._cache[tempChar]) {\n minWidth = this._cache[tempChar].width;\n } else {\n minWidth = getWidth(tempChar);\n this._cache[tempChar] = { width: minWidth };\n }\n\n if (maxWidthWithEll > minWidth) {\n tempArr = text.substr(0, slLib.getNearestBreakIndex(text, maxWidthWithEll, this)).split('');\n i = tempArr.length;\n } else if (minWidth > maxWidth) {\n smartLabel.text = '';\n smartLabel.width = smartLabel.oriTextWidth = smartLabel.height = smartLabel.oriTextHeight = 0;\n return smartLabel;\n } else if (ellipsesStr) {\n maxWidthWithEll = maxWidth - 2 * dotWidth;\n if (maxWidthWithEll > minWidth) {\n ellipsesStr = '..';\n } else {\n maxWidthWithEll = maxWidth - dotWidth;\n if (maxWidthWithEll > minWidth) {\n ellipsesStr = '.';\n } else {\n maxWidthWithEll = 0;\n ellipsesStr = '';\n }\n }\n }\n\n strWidth = getWidth(tempArr.join(''));\n strHeight = this._lineHeight;\n\n if (noWrap) {\n for (; i < len; i += 1) {\n tempChar = tempArr[i] = oriTextArr[i];\n if (this._cache[tempChar]) {\n minWidth = this._cache[tempChar].width;\n } else {\n if (!getOriSizeImproveObj || !(minWidth = getOriSizeImproveObj.detailObj[tempChar])) {\n minWidth = getWidth(tempChar);\n }\n this._cache[tempChar] = {\n width: minWidth\n };\n }\n strWidth += minWidth;\n if (strWidth > maxWidthWithEll) {\n if (!trimStr) {\n trimStr = tempArr.slice(0, -1).join('');\n }\n if (strWidth > maxWidth) {\n smartLabel.text = fastTrim(trimStr) + ellipsesStr;\n smartLabel.tooltext = smartLabel.oriText;\n smartLabel.width = getWidth(smartLabel.text);\n smartLabel.height = this._lineHeight;\n return smartLabel;\n }\n }\n }\n\n smartLabel.text = tempArr.join('');\n smartLabel.width = strWidth;\n smartLabel.height = this._lineHeight;\n return smartLabel;\n } else {\n for (; i < len; i += 1) {\n tempChar = tempArr[i] = oriTextArr[i];\n if (tempChar === ' ' && !context) {\n tempChar = ' ';\n }\n\n if (this._cache[tempChar]) {\n minWidth = this._cache[tempChar].width;\n } else {\n if (!getOriSizeImproveObj || !(minWidth = getOriSizeImproveObj.detailObj[tempChar])) {\n minWidth = getWidth(tempChar);\n }\n this._cache[tempChar] = {\n width: minWidth\n };\n }\n strWidth += minWidth;\n\n if (strWidth > maxWidthWithEll) {\n if (!trimStr) {\n trimStr = tempArr.slice(0, -1).join('');\n }\n if (strWidth > maxWidth) {\n /** @todo use regular expressions for better performance. */\n lastSpace = text.substr(0, tempArr.length).lastIndexOf(' ');\n lastDash = text.substr(0, tempArr.length).lastIndexOf('-');\n if (lastSpace > lastIndexBroken) {\n strWidth = getWidth(tempArr.slice(lastIndexBroken + 1, lastSpace).join(''));\n tempArr.splice(lastSpace, 1, '
');\n lastIndexBroken = lastSpace;\n newCharIndex = lastSpace + 1;\n } else if (lastDash > lastIndexBroken) {\n if (lastDash === tempArr.length - 1) {\n strWidth = getWidth(tempArr.slice(lastIndexBroken + 1, lastSpace).join(''));\n tempArr.splice(lastDash, 1, '
-');\n } else {\n strWidth = getWidth(tempArr.slice(lastIndexBroken + 1, lastSpace).join(''));\n tempArr.splice(lastDash, 1, '-
');\n }\n lastIndexBroken = lastDash;\n newCharIndex = lastDash + 1;\n } else {\n tempArr.splice(tempArr.length - 1, 1, '
' + oriTextArr[i]);\n lastLineBreak = tempArr.length - 2;\n strWidth = getWidth(tempArr.slice(lastIndexBroken + 1, lastLineBreak + 1).join(''));\n lastIndexBroken = lastLineBreak;\n newCharIndex = i;\n }\n strHeight += this._lineHeight;\n if (strHeight > maxHeight) {\n smartLabel.text = fastTrim(trimStr) + ellipsesStr;\n smartLabel.tooltext = smartLabel.oriText;\n // The max width among all the lines will be the width of the string.\n smartLabel.width = maxWidth;\n smartLabel.height = strHeight - this._lineHeight;\n return smartLabel;\n } else {\n maxStrWidth = max(maxStrWidth, strWidth);\n trimStr = null;\n nearestChar = slLib.getNearestBreakIndex(text.substr(newCharIndex), maxWidthWithEll, this);\n strWidth = getWidth(text.substr(newCharIndex, nearestChar || 1));\n if (tempArr.length < newCharIndex + nearestChar) {\n tempArr = tempArr.concat(text.substr(tempArr.length, newCharIndex + nearestChar - tempArr.length).split(''));\n i = tempArr.length - 1;\n }\n }\n }\n }\n }\n\n maxStrWidth = max(maxStrWidth, strWidth);\n\n smartLabel.text = tempArr.join('');\n smartLabel.width = maxStrWidth;\n smartLabel.height = strHeight;\n return smartLabel;\n }\n } else {\n toolText = text.replace(slLib.spanAdditionRegx, '$2');\n text = text.replace(slLib.spanAdditionRegx, slLib.spanAdditionReplacer);\n text = text.replace(/()/g, '$1');\n\n container.innerHTML = text;\n\n spanArr = container[documentSupport.childRetriverFn](documentSupport.childRetriverString);\n\n for (x = 0, y = spanArr.length; x < y; x += 1) {\n elem = spanArr[x];\n //chech whether this span is temporary inserted span from it's class\n if (documentSupport.noClassTesting || slLib.classNameReg.test(elem.className)) {\n chr = elem.innerHTML;\n if (chr !== '') {\n if (chr === ' ') {\n spaceIndex = characterArr.length;\n } else if (chr === '-') {\n dashIndex = characterArr.length;\n }\n\n characterArr.push({\n spaceIdx: spaceIndex,\n dashIdx: dashIndex,\n elem: elem\n });\n oriTextArr.push(chr);\n }\n }\n }\n\n i = 0;\n len = characterArr.length;\n minWidth = characterArr[0].elem.offsetWidth;\n\n if (minWidth > maxWidth) {\n smartLabel.text = '';\n smartLabel.width = smartLabel.oriTextWidth = smartLabel.height = smartLabel.oriTextHeight = 0;\n\n return smartLabel;\n } else if (minWidth > maxWidthWithEll && !this._showNoEllipses) {\n\n maxWidthWithEll = maxWidth - 2 * dotWidth;\n if (maxWidthWithEll > minWidth) {\n ellipsesStr = '..';\n } else {\n maxWidthWithEll = maxWidth - dotWidth;\n if (maxWidthWithEll > minWidth) {\n ellipsesStr = '.';\n } else {\n maxWidthWithEll = 0;\n ellipsesStr = '';\n }\n }\n }\n\n initialLeft = characterArr[0].elem.offsetLeft;\n initialTop = characterArr[0].elem.offsetTop;\n\n if (noWrap) {\n for (; i < len; i += 1) {\n elem = characterArr[i].elem;\n elemRightMostPoint = elem.offsetLeft - initialLeft + elem.offsetWidth;\n\n if (elemRightMostPoint > maxWidthWithEll) {\n if (!removeFromIndexForEllipses) {\n removeFromIndexForEllipses = i;\n }\n if (container.offsetWidth > maxWidth) {\n removeFromIndex = i;\n i = len;\n }\n }\n }\n } else {\n for (; i < len; i += 1) {\n elem = characterArr[i].elem;\n elemLowestPoint = elem.offsetHeight + (elem.offsetTop - initialTop);\n elemRightMostPoint = elem.offsetLeft - initialLeft + elem.offsetWidth;\n\n lastBR = null;\n\n if (elemRightMostPoint > maxWidthWithEll) {\n if (!removeFromIndexForEllipses) {\n removeFromIndexForEllipses = i;\n }\n\n if (elemRightMostPoint > maxWidth) {\n lastSpace = characterArr[i].spaceIdx;\n lastDash = characterArr[i].dashIdx;\n if (lastSpace > lastIndexBroken) {\n characterArr[lastSpace].elem.innerHTML = '
';\n lastIndexBroken = lastSpace;\n } else if (lastDash > lastIndexBroken) {\n if (lastDash === i) {\n // in case the overflowing character itself is the '-'\n characterArr[lastDash].elem.innerHTML = '
-';\n } else {\n characterArr[lastDash].elem.innerHTML = '-
';\n }\n lastIndexBroken = lastDash;\n } else {\n elem.parentNode.insertBefore(lastBR = doc.createElement('br'), elem);\n }\n\n //check whether this break made current element outside the area height\n if (elem.offsetHeight + elem.offsetTop > maxHeight) {\n //remove the lastly inserted line break\n if (lastBR) {\n lastBR.parentNode.removeChild(lastBR);\n } else if (lastIndexBroken === lastDash) {\n characterArr[lastDash].elem.innerHTML = '-';\n } else {\n characterArr[lastSpace].elem.innerHTML = ' ';\n }\n removeFromIndex = i;\n //break the looping condition\n i = len;\n } else {\n removeFromIndexForEllipses = null;\n }\n }\n } else {\n //check whether this break made current element outside the area height\n if (elemLowestPoint > maxHeight) {\n removeFromIndex = i;\n i = len;\n }\n }\n }\n }\n\n if (removeFromIndex < len) {\n //set the trancated property of the smartlabel\n smartLabel.isTruncated = true;\n\n /** @todo is this really needed? */\n removeFromIndexForEllipses = removeFromIndexForEllipses ? removeFromIndexForEllipses : removeFromIndex;\n\n for (i = len - 1; i >= removeFromIndexForEllipses; i -= 1) {\n elem = characterArr[i].elem;\n //chech whether this span is temporary inserted span from it's class\n elem.parentNode.removeChild(elem);\n }\n\n for (; i >= 0; i -= 1) {\n elem = characterArr[i].elem;\n if (slLib.classNameBrReg.test(elem.className)) {\n //chech whether this span is temporary inserted span from it's class\n elem.parentNode.removeChild(elem);\n } else {\n i = 0;\n }\n }\n }\n\n //get the smart text\n smartLabel.text = container.innerHTML.replace(slLib.spanRemovalRegx, '$1').replace(/\\&\\;/g, '&');\n if (smartLabel.isTruncated) {\n smartLabel.text += ellipsesStr;\n smartLabel.tooltext = toolText;\n }\n }\n\n smartLabel.height = container.offsetHeight;\n smartLabel.width = container.offsetWidth;\n\n return smartLabel;\n } else {\n smartLabel.error = new Error('Body Tag Missing!');\n return smartLabel;\n }\n};\n\n/*\n * Get the height and width of a text.\n *\n * @param {String} text - Text whose metrics to be measured\n * @param {Boolean} Optional detailedCalculationFlag - this flag if set it calculates per letter position\n * information and returns it. Ideally you dont need it unless you want to post process the\n * string. And its an EXPENSIVE OPERATION.\n *\n * @return {Object} - If detailedCalculationFlag is set to true the returned object would be\n * {\n * height: height of the text\n * width: width of the text\n * detailObj: detail calculation of letters in the format {lettername: width}\n * }\n * If detailedCalculationFlag is set to false the returned object wont have the detailObj prop.\n */\nSmartLabelManager.prototype.getOriSize = function (text, detailedCalculationFlag) {\n if (!this._init) {\n return false;\n }\n\n var textArr,\n letter,\n lSize,\n i,\n l,\n cumulativeSize = 0,\n height = 0,\n indiSizeStore = {};\n\n if (!detailedCalculationFlag) {\n return this._calCharDimWithCache(text);\n }\n\n // Calculate the width of every letter with an approximation\n textArr = text.split('');\n for (i = 0, l = textArr.length; i < l; i++) {\n letter = textArr[i];\n lSize = this._calCharDimWithCache(letter, true, textArr.length);\n height = max(height, lSize.height);\n cumulativeSize += lSize.width;\n indiSizeStore[letter] = lSize.width;\n }\n\n return {\n width: round(cumulativeSize),\n height: height,\n detailObj: indiSizeStore\n };\n};\n\n/*\n * Dispose the container and object allocated by the smartlabel\n */\nSmartLabelManager.prototype.dispose = function () {\n if (!this._init) {\n return this;\n }\n\n this._containerManager && this._containerManager.dispose && this._containerManager.dispose();\n\n delete this._container;\n delete this._context;\n delete this._cache;\n delete this._containerManager;\n delete this._containerObj;\n delete this.id;\n delete this.style;\n delete this.parentContainer;\n delete this._showNoEllipses;\n\n return this;\n};\n\nexports['default'] = SmartLabelManager;\nmodule.exports = exports['default'];","'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n\tvalue: true\n});\nvar lib = {\n\tinit: function init(win) {\n\t\tvar doc = win.document,\n\t\t nav = win.navigator,\n\t\t userAgent = nav.userAgent,\n\t\t DIV = 'DIV',\n\t\t ceil = Math.ceil,\n\t\t floor = Math.floor,\n\t\t containerInstanceCount = 0,\n\t\t clsNameSpace = 'fusioncharts-smartlabel-',\n\t\t containerClass = clsNameSpace + 'container',\n\t\t classNameWithTag = clsNameSpace + 'tag',\n\t\t classNameWithTagBR = clsNameSpace + 'br';\n\n\t\tlib = {\n\t\t\twin: win,\n\n\t\t\tcontainerClass: containerClass,\n\n\t\t\tclassNameWithTag: classNameWithTag,\n\n\t\t\tclassNameWithTagBR: classNameWithTagBR,\n\n\t\t\tmaxDefaultCacheLimit: 500,\n\n\t\t\tclassNameReg: new RegExp('\\b' + classNameWithTag + '\\b'),\n\n\t\t\tclassNameBrReg: new RegExp('\\b' + classNameWithTagBR + '\\b'),\n\n\t\t\tspanAdditionRegx: /(<[^<\\>]+?\\>)|(&(?:[a-z]+|#[0-9]+);|.)/ig,\n\n\t\t\tspanAdditionReplacer: '$1$2',\n\n\t\t\tspanRemovalRegx: new RegExp('\\\\]+?' + classNameWithTag + '[^\\\\>]{0,}\\\\>(.*?)\\\\<\\\\/span\\\\>', 'ig'),\n\n\t\t\txmlTagRegEx: new RegExp('<[^>][^<]*[^>]+>', 'i'),\n\n\t\t\tltgtRegex: /<|>/g,\n\n\t\t\tbrReplaceRegex: //ig,\n\n\t\t\ttestStrAvg: 'WgI',\n\n\t\t\t// This style is applied over the parent smartlabel container. The container is kept hidden from the viewport\n\t\t\tparentContainerStyle: {\n\t\t\t\tposition: 'absolute',\n\t\t\t\ttop: '-9999em',\n\t\t\t\twhiteSpace: 'nowrap',\n\t\t\t\tpadding: '0px',\n\t\t\t\twidth: '1px',\n\t\t\t\theight: '1px',\n\t\t\t\toverflow: 'hidden'\n\t\t\t},\n\n\t\t\t// All the style which might affect the text metrics\n\t\t\tsupportedStyle: {\n\t\t\t\tfont: 'font',\n\t\t\t\tfontFamily: 'font-family',\n\t\t\t\t'font-family': 'font-family',\n\t\t\t\tfontWeight: 'font-weight',\n\t\t\t\t'font-weight': 'font-weight',\n\t\t\t\tfontSize: 'font-size',\n\t\t\t\t'font-size': 'font-size',\n\t\t\t\tlineHeight: 'line-height',\n\t\t\t\t'line-height': 'line-height',\n\t\t\t\tfontStyle: 'font-style',\n\t\t\t\t'font-style': 'font-style'\n\t\t\t},\n\n\t\t\t// Get the support list for html the document where the text calcution is to be done.\n\t\t\tgetDocumentSupport: function getDocumentSupport() {\n\t\t\t\tvar childRetriverFn, childRetriverString, noClassTesting;\n\n\t\t\t\tif (doc.getElementsByClassName) {\n\t\t\t\t\tchildRetriverFn = 'getElementsByClassName';\n\t\t\t\t\tchildRetriverString = classNameWithTag;\n\t\t\t\t\tnoClassTesting = true;\n\t\t\t\t} else {\n\t\t\t\t\tchildRetriverFn = 'getElementsByTagName';\n\t\t\t\t\tchildRetriverString = 'span';\n\t\t\t\t\tnoClassTesting = false;\n\t\t\t\t}\n\n\t\t\t\treturn {\n\t\t\t\t\tisIE: /msie/i.test(userAgent) && !win.opera,\n\t\t\t\t\thasSVG: Boolean(win.SVGAngle || doc.implementation.hasFeature('http://www.w3.org/TR/SVG11/feature#BasicStructure', '1.1')),\n\t\t\t\t\tisHeadLess: new RegExp(' HtmlUnit').test(userAgent),\n\t\t\t\t\tisWebKit: new RegExp(' AppleWebKit/').test(userAgent),\n\t\t\t\t\tchildRetriverFn: childRetriverFn,\n\t\t\t\t\tchildRetriverString: childRetriverString,\n\t\t\t\t\tnoClassTesting: noClassTesting\n\t\t\t\t};\n\t\t\t},\n\n\t\t\t/*\n * Create a html div element and attach it with a parent. All the subsequent operations are performed\n * by upding this dom tree only.\n *\n * @param {HTMLElement} - The html element where the newly created div is to be attached. If not passed,\n * the new div is appended on the body.\n */\n\t\t\tcreateContainer: function createContainer(containerParent) {\n\t\t\t\tvar body, container;\n\n\t\t\t\tif (containerParent && (containerParent.offsetWidth || containerParent.offsetHeight)) {\n\t\t\t\t\tif (containerParent.appendChild) {\n\t\t\t\t\t\tcontainerParent.appendChild(container = doc.createElement(DIV));\n\t\t\t\t\t\tcontainer.className = containerClass;\n\t\t\t\t\t\tcontainer.setAttribute('aria-hidden', 'true');\n\t\t\t\t\t\tcontainer.setAttribute('role', 'presentation');\n\t\t\t\t\t\treturn container;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tbody = doc.getElementsByTagName('body')[0];\n\n\t\t\t\t\tif (body && body.appendChild) {\n\t\t\t\t\t\tcontainer = doc.createElement(DIV);\n\t\t\t\t\t\tcontainer.className = containerClass;\n\t\t\t\t\t\tcontainer.setAttribute('aria-hidden', 'true');\n\t\t\t\t\t\tcontainer.setAttribute('role', 'presentation');\n\t\t\t\t\t\tcontainerInstanceCount += 1;\n\t\t\t\t\t\tbody.appendChild(container);\n\t\t\t\t\t\treturn container;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// Finds a approximate position where the text is to be broken\n\t\t\tgetNearestBreakIndex: function getNearestBreakIndex(text, maxWidth, sl) {\n\t\t\t\tif (!text || !text.length) {\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\n\t\t\t\tvar difference,\n\t\t\t\t getWidth = sl._getWidthFn(),\n\t\t\t\t charLen = 0,\n\t\t\t\t increment = 0,\n\t\t\t\t oriWidth = getWidth(text),\n\t\t\t\t avgWidth = oriWidth / text.length;\n\n\t\t\t\tdifference = maxWidth;\n\t\t\t\tcharLen = ceil(maxWidth / avgWidth);\n\n\t\t\t\tif (oriWidth < maxWidth) {\n\t\t\t\t\treturn text.length - 1;\n\t\t\t\t}\n\n\t\t\t\tif (charLen > text.length) {\n\t\t\t\t\tdifference = maxWidth - oriWidth;\n\t\t\t\t\tcharLen = text.length;\n\t\t\t\t}\n\n\t\t\t\twhile (difference > 0) {\n\t\t\t\t\tdifference = maxWidth - getWidth(text.substr(0, charLen));\n\t\t\t\t\tincrement = floor(difference / avgWidth);\n\t\t\t\t\tif (increment) {\n\t\t\t\t\t\tcharLen += increment;\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn charLen;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\twhile (difference < 0) {\n\t\t\t\t\tdifference = maxWidth - getWidth(text.substr(0, charLen));\n\t\t\t\t\tincrement = floor(difference / avgWidth);\n\t\t\t\t\tif (increment) {\n\t\t\t\t\t\tcharLen += increment;\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn charLen;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn charLen;\n\t\t\t},\n\n\t\t\t/*\n * Determine lineheight of a text for a given style. It adds propery lineHeight to the style passed\n *\n * @param {Object} - The style based on which the text's metric needs to be calculated. The calculation happens\n * based on fontSize property, if its not present a default font size is assumed.\n *\n * @return {Object} - The style that was passed with lineHeight as a named propery set on the object.\n */\n\t\t\tsetLineHeight: function setLineHeight(styleObj) {\n\t\t\t\tvar fSize = styleObj.fontSize = styleObj.fontSize || '12px';\n\t\t\t\tstyleObj.lineHeight = styleObj.lineHeight || styleObj['line-height'] || parseInt(fSize, 10) * 1.2 + 'px';\n\t\t\t\treturn styleObj;\n\t\t\t}\n\t\t};\n\n\t\treturn lib;\n\t}\n};\n\nexports['default'] = lib;\nmodule.exports = exports['default'];","const Muze = require('./muze');\n\nmodule.exports = Muze.default ? Muze.default : Muze;\n","'use strict';\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _lib = require('./lib');\n\nvar _lib2 = _interopRequireDefault(_lib);\n\nvar slLib = _lib2['default'].init(typeof window !== \"undefined\" ? window : undefined),\n doc = slLib.win.document,\n documentSupport = slLib.getDocumentSupport(),\n SVG_BBOX_CORRECTION = documentSupport.isWebKit ? 0 : 4.5;\n\nfunction ContainerManager(parentContainer, isBrowserLess, maxContainers) {\n var svg;\n\n maxContainers = maxContainers > 5 ? maxContainers : 5;\n maxContainers = maxContainers < 20 ? maxContainers : 20;\n\n this.maxContainers = maxContainers;\n this.first = null;\n this.last = null;\n this.containers = {};\n this.length = 0;\n this.rootNode = parentContainer;\n\n if (isBrowserLess) {\n svg = doc.createElementNS('http://www.w3.org/2000/svg', 'svg');\n svg.setAttributeNS('http://www.w3.org/2000/svg', 'xlink', 'http://www.w3.org/1999/xlink');\n svg.setAttributeNS('http://www.w3.org/2000/svg', 'height', '0');\n svg.setAttributeNS('http://www.w3.org/2000/svg', 'width', '0');\n this.svgRoot = svg;\n this.rootNode.appendChild(svg);\n }\n}\n\nContainerManager.prototype.get = function (style) {\n var diff,\n key,\n containerObj,\n containers = this.containers,\n len = this.length,\n max = this.maxContainers,\n keyStr = '';\n\n for (key in slLib.supportedStyle) {\n if (style[key] !== undefined) {\n keyStr += slLib.supportedStyle[key] + ':' + style[key] + ';';\n }\n }\n\n if (!keyStr) {\n return false;\n }\n\n if (containerObj = containers[keyStr]) {\n if (this.first !== containerObj) {\n containerObj.prev && (containerObj.prev.next = containerObj.next);\n containerObj.next && (containerObj.next.prev = containerObj.prev);\n containerObj.next = this.first;\n containerObj.next.prev = containerObj;\n this.last === containerObj && (this.last = containerObj.prev);\n containerObj.prev = null;\n this.first = containerObj;\n }\n } else {\n if (len >= max) {\n diff = len - max + 1;\n // +1 is to remove an extra entry to make space for the new container to be added.\n while (diff--) {\n this.removeContainer(this.last);\n }\n }\n containerObj = this.addContainer(keyStr);\n }\n\n return containerObj;\n};\n\nContainerManager.prototype.addContainer = function (keyStr) {\n var node, container;\n\n this.containers[keyStr] = container = {\n next: null,\n prev: null,\n node: null,\n ellipsesWidth: 0,\n lineHeight: 0,\n dotWidth: 0,\n avgCharWidth: 4,\n keyStr: keyStr,\n charCache: {}\n };\n\n // Since the container objects are arranged from most recent to least recent order, we need to add the new\n // object at the beginning of the list.\n container.next = this.first;\n container.next && (container.next.prev = container);\n this.first = container;\n if (!this.last) {\n this.last = container;\n }\n this.length += 1;\n\n node = container.node = doc.createElement('div');\n this.rootNode.appendChild(node);\n\n if (documentSupport.isIE && !documentSupport.hasSVG) {\n node.style.setAttribute('cssText', keyStr);\n } else {\n node.setAttribute('style', keyStr);\n }\n\n node.setAttribute('aria-hidden', 'true');\n node.setAttribute('role', 'presentation');\n node.style.display = 'inline-block';\n\n node.innerHTML = slLib.testStrAvg; // A test string.\n container.lineHeight = node.offsetHeight;\n container.avgCharWidth = node.offsetWidth / 3;\n\n if (documentSupport.isBrowserLess) {\n node = container.svgText = doc.createElementNS('http://www.w3.org/2000/svg', 'text');\n node.setAttribute('style', keyStr);\n this.svgRoot.appendChild(node);\n\n node.textContent = slLib.testStrAvg; // A test string.\n container.lineHeight = node.getBBox().height;\n container.avgCharWidth = (node.getBBox().width - SVG_BBOX_CORRECTION) / 3;\n\n node.textContent = '...';\n container.ellipsesWidth = node.getBBox().width - SVG_BBOX_CORRECTION;\n node.textContent = '.';\n container.dotWidth = node.getBBox().width - SVG_BBOX_CORRECTION;\n } else {\n node.innerHTML = '...';\n container.ellipsesWidth = node.offsetWidth;\n node.innerHTML = '.';\n container.dotWidth = node.offsetWidth;\n node.innerHTML = '';\n }\n\n return container;\n};\n\nContainerManager.prototype.removeContainer = function (cObj) {\n var keyStr = cObj.keyStr;\n\n if (!keyStr || !this.length || !cObj) {\n return;\n }\n this.length -= 1;\n\n cObj.prev && (cObj.prev.next = cObj.next);\n cObj.next && (cObj.next.prev = cObj.prev);\n this.first === cObj && (this.first = cObj.next);\n this.last === cObj && (this.last = cObj.prev);\n\n cObj.node.parentNode.removeChild(cObj.node);\n\n delete this.containers[keyStr];\n};\n\nContainerManager.prototype.dispose = function () {\n var key,\n containers = this.containers;\n\n this.maxContainers = null;\n for (key in containers) {\n this.removeContainer(containers[key]);\n }\n\n this.rootNode.parentNode.removeChild(this.rootNode);\n\n this.rootNode = null;\n this.first = null;\n this.last = null;\n};\n\nmodule.exports = ContainerManager;","export default function(a, b) {\n return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n","import ascending from \"./ascending\";\n\nexport default function(compare) {\n if (compare.length === 1) compare = ascendingComparator(compare);\n return {\n left: function(a, x, lo, hi) {\n if (lo == null) lo = 0;\n if (hi == null) hi = a.length;\n while (lo < hi) {\n var mid = lo + hi >>> 1;\n if (compare(a[mid], x) < 0) lo = mid + 1;\n else hi = mid;\n }\n return lo;\n },\n right: function(a, x, lo, hi) {\n if (lo == null) lo = 0;\n if (hi == null) hi = a.length;\n while (lo < hi) {\n var mid = lo + hi >>> 1;\n if (compare(a[mid], x) > 0) hi = mid;\n else lo = mid + 1;\n }\n return lo;\n }\n };\n}\n\nfunction ascendingComparator(f) {\n return function(d, x) {\n return ascending(f(d), x);\n };\n}\n","import ascending from \"./ascending\";\nimport bisector from \"./bisector\";\n\nvar ascendingBisect = bisector(ascending);\nexport var bisectRight = ascendingBisect.right;\nexport var bisectLeft = ascendingBisect.left;\nexport default bisectRight;\n","import {pair} from \"./pairs\";\n\nexport default function(values0, values1, reduce) {\n var n0 = values0.length,\n n1 = values1.length,\n values = new Array(n0 * n1),\n i0,\n i1,\n i,\n value0;\n\n if (reduce == null) reduce = pair;\n\n for (i0 = i = 0; i0 < n0; ++i0) {\n for (value0 = values0[i0], i1 = 0; i1 < n1; ++i1, ++i) {\n values[i] = reduce(value0, values1[i1]);\n }\n }\n\n return values;\n}\n","export default function(x) {\n return x === null ? NaN : +x;\n}\n","var array = Array.prototype;\n\nexport var slice = array.slice;\nexport var map = array.map;\n","export default function(start, stop, step) {\n start = +start, stop = +stop, step = (n = arguments.length) < 2 ? (stop = start, start = 0, 1) : n < 3 ? 1 : +step;\n\n var i = -1,\n n = Math.max(0, Math.ceil((stop - start) / step)) | 0,\n range = new Array(n);\n\n while (++i < n) {\n range[i] = start + i * step;\n }\n\n return range;\n}\n","var e10 = Math.sqrt(50),\n e5 = Math.sqrt(10),\n e2 = Math.sqrt(2);\n\nexport default function(start, stop, count) {\n var reverse,\n i = -1,\n n,\n ticks,\n step;\n\n stop = +stop, start = +start, count = +count;\n if (start === stop && count > 0) return [start];\n if (reverse = stop < start) n = start, start = stop, stop = n;\n if ((step = tickIncrement(start, stop, count)) === 0 || !isFinite(step)) return [];\n\n if (step > 0) {\n start = Math.ceil(start / step);\n stop = Math.floor(stop / step);\n ticks = new Array(n = Math.ceil(stop - start + 1));\n while (++i < n) ticks[i] = (start + i) * step;\n } else {\n start = Math.floor(start * step);\n stop = Math.ceil(stop * step);\n ticks = new Array(n = Math.ceil(start - stop + 1));\n while (++i < n) ticks[i] = (start - i) / step;\n }\n\n if (reverse) ticks.reverse();\n\n return ticks;\n}\n\nexport function tickIncrement(start, stop, count) {\n var step = (stop - start) / Math.max(0, count),\n power = Math.floor(Math.log(step) / Math.LN10),\n error = step / Math.pow(10, power);\n return power >= 0\n ? (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1) * Math.pow(10, power)\n : -Math.pow(10, -power) / (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1);\n}\n\nexport function tickStep(start, stop, count) {\n var step0 = Math.abs(stop - start) / Math.max(0, count),\n step1 = Math.pow(10, Math.floor(Math.log(step0) / Math.LN10)),\n error = step0 / step1;\n if (error >= e10) step1 *= 10;\n else if (error >= e5) step1 *= 5;\n else if (error >= e2) step1 *= 2;\n return stop < start ? -step1 : step1;\n}\n","export default function(values) {\n return Math.ceil(Math.log(values.length) / Math.LN2) + 1;\n}\n","import number from \"./number\";\n\nexport default function(values, p, valueof) {\n if (valueof == null) valueof = number;\n if (!(n = values.length)) return;\n if ((p = +p) <= 0 || n < 2) return +valueof(values[0], 0, values);\n if (p >= 1) return +valueof(values[n - 1], n - 1, values);\n var n,\n i = (n - 1) * p,\n i0 = Math.floor(i),\n value0 = +valueof(values[i0], i0, values),\n value1 = +valueof(values[i0 + 1], i0 + 1, values);\n return value0 + (value1 - value0) * (i - i0);\n}\n","export var prefix = \"$\";\n\nfunction Map() {}\n\nMap.prototype = map.prototype = {\n constructor: Map,\n has: function(key) {\n return (prefix + key) in this;\n },\n get: function(key) {\n return this[prefix + key];\n },\n set: function(key, value) {\n this[prefix + key] = value;\n return this;\n },\n remove: function(key) {\n var property = prefix + key;\n return property in this && delete this[property];\n },\n clear: function() {\n for (var property in this) if (property[0] === prefix) delete this[property];\n },\n keys: function() {\n var keys = [];\n for (var property in this) if (property[0] === prefix) keys.push(property.slice(1));\n return keys;\n },\n values: function() {\n var values = [];\n for (var property in this) if (property[0] === prefix) values.push(this[property]);\n return values;\n },\n entries: function() {\n var entries = [];\n for (var property in this) if (property[0] === prefix) entries.push({key: property.slice(1), value: this[property]});\n return entries;\n },\n size: function() {\n var size = 0;\n for (var property in this) if (property[0] === prefix) ++size;\n return size;\n },\n empty: function() {\n for (var property in this) if (property[0] === prefix) return false;\n return true;\n },\n each: function(f) {\n for (var property in this) if (property[0] === prefix) f(this[property], property.slice(1), this);\n }\n};\n\nfunction map(object, f) {\n var map = new Map;\n\n // Copy constructor.\n if (object instanceof Map) object.each(function(value, key) { map.set(key, value); });\n\n // Index array by numeric index or specified key function.\n else if (Array.isArray(object)) {\n var i = -1,\n n = object.length,\n o;\n\n if (f == null) while (++i < n) map.set(i, object[i]);\n else while (++i < n) map.set(f(o = object[i], i, object), o);\n }\n\n // Convert object to map.\n else if (object) for (var key in object) map.set(key, object[key]);\n\n return map;\n}\n\nexport default map;\n","import map from \"./map\";\n\nexport default function() {\n var keys = [],\n sortKeys = [],\n sortValues,\n rollup,\n nest;\n\n function apply(array, depth, createResult, setResult) {\n if (depth >= keys.length) {\n if (sortValues != null) array.sort(sortValues);\n return rollup != null ? rollup(array) : array;\n }\n\n var i = -1,\n n = array.length,\n key = keys[depth++],\n keyValue,\n value,\n valuesByKey = map(),\n values,\n result = createResult();\n\n while (++i < n) {\n if (values = valuesByKey.get(keyValue = key(value = array[i]) + \"\")) {\n values.push(value);\n } else {\n valuesByKey.set(keyValue, [value]);\n }\n }\n\n valuesByKey.each(function(values, key) {\n setResult(result, key, apply(values, depth, createResult, setResult));\n });\n\n return result;\n }\n\n function entries(map, depth) {\n if (++depth > keys.length) return map;\n var array, sortKey = sortKeys[depth - 1];\n if (rollup != null && depth >= keys.length) array = map.entries();\n else array = [], map.each(function(v, k) { array.push({key: k, values: entries(v, depth)}); });\n return sortKey != null ? array.sort(function(a, b) { return sortKey(a.key, b.key); }) : array;\n }\n\n return nest = {\n object: function(array) { return apply(array, 0, createObject, setObject); },\n map: function(array) { return apply(array, 0, createMap, setMap); },\n entries: function(array) { return entries(apply(array, 0, createMap, setMap), 0); },\n key: function(d) { keys.push(d); return nest; },\n sortKeys: function(order) { sortKeys[keys.length - 1] = order; return nest; },\n sortValues: function(order) { sortValues = order; return nest; },\n rollup: function(f) { rollup = f; return nest; }\n };\n}\n\nfunction createObject() {\n return {};\n}\n\nfunction setObject(object, key, value) {\n object[key] = value;\n}\n\nfunction createMap() {\n return map();\n}\n\nfunction setMap(map, key, value) {\n map.set(key, value);\n}\n","import {default as map, prefix} from \"./map\";\n\nfunction Set() {}\n\nvar proto = map.prototype;\n\nSet.prototype = set.prototype = {\n constructor: Set,\n has: proto.has,\n add: function(value) {\n value += \"\";\n this[prefix + value] = value;\n return this;\n },\n remove: proto.remove,\n clear: proto.clear,\n values: proto.keys,\n size: proto.size,\n empty: proto.empty,\n each: proto.each\n};\n\nfunction set(object, f) {\n var set = new Set;\n\n // Copy constructor.\n if (object instanceof Set) object.each(function(value) { set.add(value); });\n\n // Otherwise, assume it’s an array.\n else if (object) {\n var i = -1, n = object.length;\n if (f == null) while (++i < n) set.add(object[i]);\n else while (++i < n) set.add(f(object[i], i, object));\n }\n\n return set;\n}\n\nexport default set;\n","var array = Array.prototype;\n\nexport var map = array.map;\nexport var slice = array.slice;\n","import {map} from \"d3-collection\";\nimport {slice} from \"./array\";\n\nexport var implicit = {name: \"implicit\"};\n\nexport default function ordinal(range) {\n var index = map(),\n domain = [],\n unknown = implicit;\n\n range = range == null ? [] : slice.call(range);\n\n function scale(d) {\n var key = d + \"\", i = index.get(key);\n if (!i) {\n if (unknown !== implicit) return unknown;\n index.set(key, i = domain.push(d));\n }\n return range[(i - 1) % range.length];\n }\n\n scale.domain = function(_) {\n if (!arguments.length) return domain.slice();\n domain = [], index = map();\n var i = -1, n = _.length, d, key;\n while (++i < n) if (!index.has(key = (d = _[i]) + \"\")) index.set(key, domain.push(d));\n return scale;\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = slice.call(_), scale) : range.slice();\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n scale.copy = function() {\n return ordinal()\n .domain(domain)\n .range(range)\n .unknown(unknown);\n };\n\n return scale;\n}\n","import {range as sequence} from \"d3-array\";\nimport ordinal from \"./ordinal\";\n\nexport default function band() {\n var scale = ordinal().unknown(undefined),\n domain = scale.domain,\n ordinalRange = scale.range,\n range = [0, 1],\n step,\n bandwidth,\n round = false,\n paddingInner = 0,\n paddingOuter = 0,\n align = 0.5;\n\n delete scale.unknown;\n function rescale() {\n var n = domain().length,\n reverse = range[1] < range[0],\n start = range[reverse - 0],\n stop = range[1 - reverse];\n step = (stop - start) / Math.max(1, n - paddingInner + paddingOuter * 2);\n if (round) step = Math.floor(step);\n start += (stop - start - step * (n - paddingInner)) * align;\n bandwidth = step * (1 - paddingInner);\n if (round) start = Math.round(start), bandwidth = Math.round(bandwidth);\n var values = sequence(n).map(function(i) { return start + step * i; });\n return ordinalRange(reverse ? values.reverse() : values);\n }\n\n scale.domain = function(_) {\n return arguments.length ? (domain(_), rescale()) : domain();\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = [+_[0], +_[1]], rescale()) : range.slice();\n };\n\n scale.rangeRound = function(_) {\n return range = [+_[0], +_[1]], round = true, rescale();\n };\n\n scale.bandwidth = function() {\n return bandwidth;\n };\n\n scale.step = function() {\n return step;\n };\n\n scale.round = function(_) {\n return arguments.length ? (round = !!_, rescale()) : round;\n };\n\n scale.padding = function(_) {\n return arguments.length ? (paddingInner = paddingOuter = Math.max(0, Math.min(1, _)), rescale()) : paddingInner;\n };\n\n scale.paddingInner = function(_) {\n return arguments.length ? (paddingInner = Math.max(0, Math.min(1, _)), rescale()) : paddingInner;\n };\n\n scale.paddingOuter = function(_) {\n return arguments.length ? (paddingOuter = Math.max(0, Math.min(1, _)), rescale()) : paddingOuter;\n };\n\n scale.align = function(_) {\n return arguments.length ? (align = Math.max(0, Math.min(1, _)), rescale()) : align;\n };\n\n scale.copy = function() {\n return band()\n .domain(domain())\n .range(range)\n .round(round)\n .paddingInner(paddingInner)\n .paddingOuter(paddingOuter)\n .align(align);\n };\n\n scale.invertExtent = function(r0, r1) {\n var lo = +r0,\n hi = arguments.length > 1 ? +r1 : lo,\n reverse = range[1] < range[0],\n values = reverse ? ordinalRange().reverse() : ordinalRange(),\n n = values.length - 1, a, b, t,\n hiIndex;\n values.push(values[n] + this.step());\n // order range inputs, bail if outside of scale range\n if (hi < lo) t = lo, lo = hi, hi = t;\n if (hi < values[0] || lo > range[1-reverse]) return undefined;\n\n // binary search to index into scale range\n a = Math.max(0, getClosestIndexOf(values, lo));\n hiIndex = getClosestIndexOf(values, hi);\n b = lo===hi ? a : Math.max(a, hiIndex - 1);\n\n // increment index a if lo is within padding gap\n // if (lo - values[a] > bandwidth + 1e-10) ++a;\n\n if (reverse) t = a, a = n - b, b = n - t; // map + swap\n return (a > b) ? undefined : domain().slice(a, b+1);\n };\n\n scale.invert = function (r0, r1) {\n var lo = +r0,\n hi = arguments.length > 1 ? +r1 : lo,\n reverse = range[1] < range[0],\n values = reverse ? ordinalRange().reverse() : ordinalRange(),\n n = values.length - 1,\n a,\n t;\n\n // order range inputs, bail if outside of scale range\n if (hi < lo) t = lo, lo = hi, hi = t;\n if (hi < values[0] || lo > range[1-reverse]) return undefined;\n\n // binary search to index into scale range\n a = Math.max(0, getClosestIndexOf(values, lo, 'left'));\n\n // increment index a if lo is within padding gap\n // if (lo - values[a] > bandwidth + 1e-10) ++a;\n\n return domain()[reverse ? n - a : a];\n }\n return rescale();\n}\n\nfunction pointish(scale) {\n var copy = scale.copy;\n\n scale.padding = scale.paddingOuter;\n delete scale.paddingInner;\n delete scale.paddingOuter;\n\n scale.copy = function() {\n return pointish(copy());\n };\n\n return scale;\n}\n\nexport function point() {\n return pointish(band().paddingInner(1));\n}\n\nfunction getClosestIndexOf (arr, value, side) {\n var low = 0,\n arrLen = arr.length,\n high = arrLen - 1,\n highVal,\n mid,\n d1,\n d2;\n\n while (low < high) {\n mid = Math.floor((low + high) / 2);\n d1 = Math.abs(arr[mid] - value);\n d2 = Math.abs(arr[mid + 1] - value);\n\n if (d2 <= d1) {\n low = mid + 1;\n }\n else {\n high = mid;\n }\n }\n\n if (!side) {\n return high;\n }\n\n highVal = arr[high];\n if (highVal === value) {\n return high;\n } else if (highVal > value) {\n if (high === 0) { return high; }\n return side === 'left'? high - 1 : high;\n } else {\n if (high === arr.length - 1) { return high; }\n return side === 'left'? high : high + 1;\n }\n}","export default function(constructor, factory, prototype) {\n constructor.prototype = factory.prototype = prototype;\n prototype.constructor = constructor;\n}\n\nexport function extend(parent, definition) {\n var prototype = Object.create(parent.prototype);\n for (var key in definition) prototype[key] = definition[key];\n return prototype;\n}\n","import define, {extend} from \"./define\";\n\nexport function Color() {}\n\nexport var darker = 0.7;\nexport var brighter = 1 / darker;\n\nvar reI = \"\\\\s*([+-]?\\\\d+)\\\\s*\",\n reN = \"\\\\s*([+-]?\\\\d*\\\\.?\\\\d+(?:[eE][+-]?\\\\d+)?)\\\\s*\",\n reP = \"\\\\s*([+-]?\\\\d*\\\\.?\\\\d+(?:[eE][+-]?\\\\d+)?)%\\\\s*\",\n reHex3 = /^#([0-9a-f]{3})$/,\n reHex6 = /^#([0-9a-f]{6})$/,\n reRgbInteger = new RegExp(\"^rgb\\\\(\" + [reI, reI, reI] + \"\\\\)$\"),\n reRgbPercent = new RegExp(\"^rgb\\\\(\" + [reP, reP, reP] + \"\\\\)$\"),\n reRgbaInteger = new RegExp(\"^rgba\\\\(\" + [reI, reI, reI, reN] + \"\\\\)$\"),\n reRgbaPercent = new RegExp(\"^rgba\\\\(\" + [reP, reP, reP, reN] + \"\\\\)$\"),\n reHslPercent = new RegExp(\"^hsl\\\\(\" + [reN, reP, reP] + \"\\\\)$\"),\n reHslaPercent = new RegExp(\"^hsla\\\\(\" + [reN, reP, reP, reN] + \"\\\\)$\");\n\nvar named = {\n aliceblue: 0xf0f8ff,\n antiquewhite: 0xfaebd7,\n aqua: 0x00ffff,\n aquamarine: 0x7fffd4,\n azure: 0xf0ffff,\n beige: 0xf5f5dc,\n bisque: 0xffe4c4,\n black: 0x000000,\n blanchedalmond: 0xffebcd,\n blue: 0x0000ff,\n blueviolet: 0x8a2be2,\n brown: 0xa52a2a,\n burlywood: 0xdeb887,\n cadetblue: 0x5f9ea0,\n chartreuse: 0x7fff00,\n chocolate: 0xd2691e,\n coral: 0xff7f50,\n cornflowerblue: 0x6495ed,\n cornsilk: 0xfff8dc,\n crimson: 0xdc143c,\n cyan: 0x00ffff,\n darkblue: 0x00008b,\n darkcyan: 0x008b8b,\n darkgoldenrod: 0xb8860b,\n darkgray: 0xa9a9a9,\n darkgreen: 0x006400,\n darkgrey: 0xa9a9a9,\n darkkhaki: 0xbdb76b,\n darkmagenta: 0x8b008b,\n darkolivegreen: 0x556b2f,\n darkorange: 0xff8c00,\n darkorchid: 0x9932cc,\n darkred: 0x8b0000,\n darksalmon: 0xe9967a,\n darkseagreen: 0x8fbc8f,\n darkslateblue: 0x483d8b,\n darkslategray: 0x2f4f4f,\n darkslategrey: 0x2f4f4f,\n darkturquoise: 0x00ced1,\n darkviolet: 0x9400d3,\n deeppink: 0xff1493,\n deepskyblue: 0x00bfff,\n dimgray: 0x696969,\n dimgrey: 0x696969,\n dodgerblue: 0x1e90ff,\n firebrick: 0xb22222,\n floralwhite: 0xfffaf0,\n forestgreen: 0x228b22,\n fuchsia: 0xff00ff,\n gainsboro: 0xdcdcdc,\n ghostwhite: 0xf8f8ff,\n gold: 0xffd700,\n goldenrod: 0xdaa520,\n gray: 0x808080,\n green: 0x008000,\n greenyellow: 0xadff2f,\n grey: 0x808080,\n honeydew: 0xf0fff0,\n hotpink: 0xff69b4,\n indianred: 0xcd5c5c,\n indigo: 0x4b0082,\n ivory: 0xfffff0,\n khaki: 0xf0e68c,\n lavender: 0xe6e6fa,\n lavenderblush: 0xfff0f5,\n lawngreen: 0x7cfc00,\n lemonchiffon: 0xfffacd,\n lightblue: 0xadd8e6,\n lightcoral: 0xf08080,\n lightcyan: 0xe0ffff,\n lightgoldenrodyellow: 0xfafad2,\n lightgray: 0xd3d3d3,\n lightgreen: 0x90ee90,\n lightgrey: 0xd3d3d3,\n lightpink: 0xffb6c1,\n lightsalmon: 0xffa07a,\n lightseagreen: 0x20b2aa,\n lightskyblue: 0x87cefa,\n lightslategray: 0x778899,\n lightslategrey: 0x778899,\n lightsteelblue: 0xb0c4de,\n lightyellow: 0xffffe0,\n lime: 0x00ff00,\n limegreen: 0x32cd32,\n linen: 0xfaf0e6,\n magenta: 0xff00ff,\n maroon: 0x800000,\n mediumaquamarine: 0x66cdaa,\n mediumblue: 0x0000cd,\n mediumorchid: 0xba55d3,\n mediumpurple: 0x9370db,\n mediumseagreen: 0x3cb371,\n mediumslateblue: 0x7b68ee,\n mediumspringgreen: 0x00fa9a,\n mediumturquoise: 0x48d1cc,\n mediumvioletred: 0xc71585,\n midnightblue: 0x191970,\n mintcream: 0xf5fffa,\n mistyrose: 0xffe4e1,\n moccasin: 0xffe4b5,\n navajowhite: 0xffdead,\n navy: 0x000080,\n oldlace: 0xfdf5e6,\n olive: 0x808000,\n olivedrab: 0x6b8e23,\n orange: 0xffa500,\n orangered: 0xff4500,\n orchid: 0xda70d6,\n palegoldenrod: 0xeee8aa,\n palegreen: 0x98fb98,\n paleturquoise: 0xafeeee,\n palevioletred: 0xdb7093,\n papayawhip: 0xffefd5,\n peachpuff: 0xffdab9,\n peru: 0xcd853f,\n pink: 0xffc0cb,\n plum: 0xdda0dd,\n powderblue: 0xb0e0e6,\n purple: 0x800080,\n rebeccapurple: 0x663399,\n red: 0xff0000,\n rosybrown: 0xbc8f8f,\n royalblue: 0x4169e1,\n saddlebrown: 0x8b4513,\n salmon: 0xfa8072,\n sandybrown: 0xf4a460,\n seagreen: 0x2e8b57,\n seashell: 0xfff5ee,\n sienna: 0xa0522d,\n silver: 0xc0c0c0,\n skyblue: 0x87ceeb,\n slateblue: 0x6a5acd,\n slategray: 0x708090,\n slategrey: 0x708090,\n snow: 0xfffafa,\n springgreen: 0x00ff7f,\n steelblue: 0x4682b4,\n tan: 0xd2b48c,\n teal: 0x008080,\n thistle: 0xd8bfd8,\n tomato: 0xff6347,\n turquoise: 0x40e0d0,\n violet: 0xee82ee,\n wheat: 0xf5deb3,\n white: 0xffffff,\n whitesmoke: 0xf5f5f5,\n yellow: 0xffff00,\n yellowgreen: 0x9acd32\n};\n\ndefine(Color, color, {\n displayable: function() {\n return this.rgb().displayable();\n },\n hex: function() {\n return this.rgb().hex();\n },\n toString: function() {\n return this.rgb() + \"\";\n }\n});\n\nexport default function color(format) {\n var m;\n format = (format + \"\").trim().toLowerCase();\n return (m = reHex3.exec(format)) ? (m = parseInt(m[1], 16), new Rgb((m >> 8 & 0xf) | (m >> 4 & 0x0f0), (m >> 4 & 0xf) | (m & 0xf0), ((m & 0xf) << 4) | (m & 0xf), 1)) // #f00\n : (m = reHex6.exec(format)) ? rgbn(parseInt(m[1], 16)) // #ff0000\n : (m = reRgbInteger.exec(format)) ? new Rgb(m[1], m[2], m[3], 1) // rgb(255, 0, 0)\n : (m = reRgbPercent.exec(format)) ? new Rgb(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, 1) // rgb(100%, 0%, 0%)\n : (m = reRgbaInteger.exec(format)) ? rgba(m[1], m[2], m[3], m[4]) // rgba(255, 0, 0, 1)\n : (m = reRgbaPercent.exec(format)) ? rgba(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, m[4]) // rgb(100%, 0%, 0%, 1)\n : (m = reHslPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, 1) // hsl(120, 50%, 50%)\n : (m = reHslaPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, m[4]) // hsla(120, 50%, 50%, 1)\n : named.hasOwnProperty(format) ? rgbn(named[format])\n : format === \"transparent\" ? new Rgb(NaN, NaN, NaN, 0)\n : null;\n}\n\nfunction rgbn(n) {\n return new Rgb(n >> 16 & 0xff, n >> 8 & 0xff, n & 0xff, 1);\n}\n\nfunction rgba(r, g, b, a) {\n if (a <= 0) r = g = b = NaN;\n return new Rgb(r, g, b, a);\n}\n\nexport function rgbConvert(o) {\n if (!(o instanceof Color)) o = color(o);\n if (!o) return new Rgb;\n o = o.rgb();\n return new Rgb(o.r, o.g, o.b, o.opacity);\n}\n\nexport function rgb(r, g, b, opacity) {\n return arguments.length === 1 ? rgbConvert(r) : new Rgb(r, g, b, opacity == null ? 1 : opacity);\n}\n\nexport function Rgb(r, g, b, opacity) {\n this.r = +r;\n this.g = +g;\n this.b = +b;\n this.opacity = +opacity;\n}\n\ndefine(Rgb, rgb, extend(Color, {\n brighter: function(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n },\n darker: function(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n },\n rgb: function() {\n return this;\n },\n displayable: function() {\n return (0 <= this.r && this.r <= 255)\n && (0 <= this.g && this.g <= 255)\n && (0 <= this.b && this.b <= 255)\n && (0 <= this.opacity && this.opacity <= 1);\n },\n hex: function() {\n return \"#\" + hex(this.r) + hex(this.g) + hex(this.b);\n },\n toString: function() {\n var a = this.opacity; a = isNaN(a) ? 1 : Math.max(0, Math.min(1, a));\n return (a === 1 ? \"rgb(\" : \"rgba(\")\n + Math.max(0, Math.min(255, Math.round(this.r) || 0)) + \", \"\n + Math.max(0, Math.min(255, Math.round(this.g) || 0)) + \", \"\n + Math.max(0, Math.min(255, Math.round(this.b) || 0))\n + (a === 1 ? \")\" : \", \" + a + \")\");\n }\n}));\n\nfunction hex(value) {\n value = Math.max(0, Math.min(255, Math.round(value) || 0));\n return (value < 16 ? \"0\" : \"\") + value.toString(16);\n}\n\nfunction hsla(h, s, l, a) {\n if (a <= 0) h = s = l = NaN;\n else if (l <= 0 || l >= 1) h = s = NaN;\n else if (s <= 0) h = NaN;\n return new Hsl(h, s, l, a);\n}\n\nexport function hslConvert(o) {\n if (o instanceof Hsl) return new Hsl(o.h, o.s, o.l, o.opacity);\n if (!(o instanceof Color)) o = color(o);\n if (!o) return new Hsl;\n if (o instanceof Hsl) return o;\n o = o.rgb();\n var r = o.r / 255,\n g = o.g / 255,\n b = o.b / 255,\n min = Math.min(r, g, b),\n max = Math.max(r, g, b),\n h = NaN,\n s = max - min,\n l = (max + min) / 2;\n if (s) {\n if (r === max) h = (g - b) / s + (g < b) * 6;\n else if (g === max) h = (b - r) / s + 2;\n else h = (r - g) / s + 4;\n s /= l < 0.5 ? max + min : 2 - max - min;\n h *= 60;\n } else {\n s = l > 0 && l < 1 ? 0 : h;\n }\n return new Hsl(h, s, l, o.opacity);\n}\n\nexport function hsl(h, s, l, opacity) {\n return arguments.length === 1 ? hslConvert(h) : new Hsl(h, s, l, opacity == null ? 1 : opacity);\n}\n\nfunction Hsl(h, s, l, opacity) {\n this.h = +h;\n this.s = +s;\n this.l = +l;\n this.opacity = +opacity;\n}\n\ndefine(Hsl, hsl, extend(Color, {\n brighter: function(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Hsl(this.h, this.s, this.l * k, this.opacity);\n },\n darker: function(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Hsl(this.h, this.s, this.l * k, this.opacity);\n },\n rgb: function() {\n var h = this.h % 360 + (this.h < 0) * 360,\n s = isNaN(h) || isNaN(this.s) ? 0 : this.s,\n l = this.l,\n m2 = l + (l < 0.5 ? l : 1 - l) * s,\n m1 = 2 * l - m2;\n return new Rgb(\n hsl2rgb(h >= 240 ? h - 240 : h + 120, m1, m2),\n hsl2rgb(h, m1, m2),\n hsl2rgb(h < 120 ? h + 240 : h - 120, m1, m2),\n this.opacity\n );\n },\n displayable: function() {\n return (0 <= this.s && this.s <= 1 || isNaN(this.s))\n && (0 <= this.l && this.l <= 1)\n && (0 <= this.opacity && this.opacity <= 1);\n }\n}));\n\n/* From FvD 13.37, CSS Color Module Level 3 */\nfunction hsl2rgb(h, m1, m2) {\n return (h < 60 ? m1 + (m2 - m1) * h / 60\n : h < 180 ? m2\n : h < 240 ? m1 + (m2 - m1) * (240 - h) / 60\n : m1) * 255;\n}\n","export var deg2rad = Math.PI / 180;\nexport var rad2deg = 180 / Math.PI;\n","import define, {extend} from \"./define\";\nimport {Color, rgbConvert, Rgb} from \"./color\";\nimport {deg2rad, rad2deg} from \"./math\";\n\n// https://beta.observablehq.com/@mbostock/lab-and-rgb\nvar K = 18,\n Xn = 0.96422,\n Yn = 1,\n Zn = 0.82521,\n t0 = 4 / 29,\n t1 = 6 / 29,\n t2 = 3 * t1 * t1,\n t3 = t1 * t1 * t1;\n\nfunction labConvert(o) {\n if (o instanceof Lab) return new Lab(o.l, o.a, o.b, o.opacity);\n if (o instanceof Hcl) {\n if (isNaN(o.h)) return new Lab(o.l, 0, 0, o.opacity);\n var h = o.h * deg2rad;\n return new Lab(o.l, Math.cos(h) * o.c, Math.sin(h) * o.c, o.opacity);\n }\n if (!(o instanceof Rgb)) o = rgbConvert(o);\n var r = rgb2lrgb(o.r),\n g = rgb2lrgb(o.g),\n b = rgb2lrgb(o.b),\n y = xyz2lab((0.2225045 * r + 0.7168786 * g + 0.0606169 * b) / Yn), x, z;\n if (r === g && g === b) x = z = y; else {\n x = xyz2lab((0.4360747 * r + 0.3850649 * g + 0.1430804 * b) / Xn);\n z = xyz2lab((0.0139322 * r + 0.0971045 * g + 0.7141733 * b) / Zn);\n }\n return new Lab(116 * y - 16, 500 * (x - y), 200 * (y - z), o.opacity);\n}\n\nexport function gray(l, opacity) {\n return new Lab(l, 0, 0, opacity == null ? 1 : opacity);\n}\n\nexport default function lab(l, a, b, opacity) {\n return arguments.length === 1 ? labConvert(l) : new Lab(l, a, b, opacity == null ? 1 : opacity);\n}\n\nexport function Lab(l, a, b, opacity) {\n this.l = +l;\n this.a = +a;\n this.b = +b;\n this.opacity = +opacity;\n}\n\ndefine(Lab, lab, extend(Color, {\n brighter: function(k) {\n return new Lab(this.l + K * (k == null ? 1 : k), this.a, this.b, this.opacity);\n },\n darker: function(k) {\n return new Lab(this.l - K * (k == null ? 1 : k), this.a, this.b, this.opacity);\n },\n rgb: function() {\n var y = (this.l + 16) / 116,\n x = isNaN(this.a) ? y : y + this.a / 500,\n z = isNaN(this.b) ? y : y - this.b / 200;\n x = Xn * lab2xyz(x);\n y = Yn * lab2xyz(y);\n z = Zn * lab2xyz(z);\n return new Rgb(\n lrgb2rgb( 3.1338561 * x - 1.6168667 * y - 0.4906146 * z),\n lrgb2rgb(-0.9787684 * x + 1.9161415 * y + 0.0334540 * z),\n lrgb2rgb( 0.0719453 * x - 0.2289914 * y + 1.4052427 * z),\n this.opacity\n );\n }\n}));\n\nfunction xyz2lab(t) {\n return t > t3 ? Math.pow(t, 1 / 3) : t / t2 + t0;\n}\n\nfunction lab2xyz(t) {\n return t > t1 ? t * t * t : t2 * (t - t0);\n}\n\nfunction lrgb2rgb(x) {\n return 255 * (x <= 0.0031308 ? 12.92 * x : 1.055 * Math.pow(x, 1 / 2.4) - 0.055);\n}\n\nfunction rgb2lrgb(x) {\n return (x /= 255) <= 0.04045 ? x / 12.92 : Math.pow((x + 0.055) / 1.055, 2.4);\n}\n\nfunction hclConvert(o) {\n if (o instanceof Hcl) return new Hcl(o.h, o.c, o.l, o.opacity);\n if (!(o instanceof Lab)) o = labConvert(o);\n if (o.a === 0 && o.b === 0) return new Hcl(NaN, 0, o.l, o.opacity);\n var h = Math.atan2(o.b, o.a) * rad2deg;\n return new Hcl(h < 0 ? h + 360 : h, Math.sqrt(o.a * o.a + o.b * o.b), o.l, o.opacity);\n}\n\nexport function lch(l, c, h, opacity) {\n return arguments.length === 1 ? hclConvert(l) : new Hcl(h, c, l, opacity == null ? 1 : opacity);\n}\n\nexport function hcl(h, c, l, opacity) {\n return arguments.length === 1 ? hclConvert(h) : new Hcl(h, c, l, opacity == null ? 1 : opacity);\n}\n\nexport function Hcl(h, c, l, opacity) {\n this.h = +h;\n this.c = +c;\n this.l = +l;\n this.opacity = +opacity;\n}\n\ndefine(Hcl, hcl, extend(Color, {\n brighter: function(k) {\n return new Hcl(this.h, this.c, this.l + K * (k == null ? 1 : k), this.opacity);\n },\n darker: function(k) {\n return new Hcl(this.h, this.c, this.l - K * (k == null ? 1 : k), this.opacity);\n },\n rgb: function() {\n return labConvert(this).rgb();\n }\n}));\n","import define, {extend} from \"./define\";\nimport {Color, rgbConvert, Rgb, darker, brighter} from \"./color\";\nimport {deg2rad, rad2deg} from \"./math\";\n\nvar A = -0.14861,\n B = +1.78277,\n C = -0.29227,\n D = -0.90649,\n E = +1.97294,\n ED = E * D,\n EB = E * B,\n BC_DA = B * C - D * A;\n\nfunction cubehelixConvert(o) {\n if (o instanceof Cubehelix) return new Cubehelix(o.h, o.s, o.l, o.opacity);\n if (!(o instanceof Rgb)) o = rgbConvert(o);\n var r = o.r / 255,\n g = o.g / 255,\n b = o.b / 255,\n l = (BC_DA * b + ED * r - EB * g) / (BC_DA + ED - EB),\n bl = b - l,\n k = (E * (g - l) - C * bl) / D,\n s = Math.sqrt(k * k + bl * bl) / (E * l * (1 - l)), // NaN if l=0 or l=1\n h = s ? Math.atan2(k, bl) * rad2deg - 120 : NaN;\n return new Cubehelix(h < 0 ? h + 360 : h, s, l, o.opacity);\n}\n\nexport default function cubehelix(h, s, l, opacity) {\n return arguments.length === 1 ? cubehelixConvert(h) : new Cubehelix(h, s, l, opacity == null ? 1 : opacity);\n}\n\nexport function Cubehelix(h, s, l, opacity) {\n this.h = +h;\n this.s = +s;\n this.l = +l;\n this.opacity = +opacity;\n}\n\ndefine(Cubehelix, cubehelix, extend(Color, {\n brighter: function(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Cubehelix(this.h, this.s, this.l * k, this.opacity);\n },\n darker: function(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Cubehelix(this.h, this.s, this.l * k, this.opacity);\n },\n rgb: function() {\n var h = isNaN(this.h) ? 0 : (this.h + 120) * deg2rad,\n l = +this.l,\n a = isNaN(this.s) ? 0 : this.s * l * (1 - l),\n cosh = Math.cos(h),\n sinh = Math.sin(h);\n return new Rgb(\n 255 * (l + a * (A * cosh + B * sinh)),\n 255 * (l + a * (C * cosh + D * sinh)),\n 255 * (l + a * (E * cosh)),\n this.opacity\n );\n }\n}));\n","export function basis(t1, v0, v1, v2, v3) {\n var t2 = t1 * t1, t3 = t2 * t1;\n return ((1 - 3 * t1 + 3 * t2 - t3) * v0\n + (4 - 6 * t2 + 3 * t3) * v1\n + (1 + 3 * t1 + 3 * t2 - 3 * t3) * v2\n + t3 * v3) / 6;\n}\n\nexport default function(values) {\n var n = values.length - 1;\n return function(t) {\n var i = t <= 0 ? (t = 0) : t >= 1 ? (t = 1, n - 1) : Math.floor(t * n),\n v1 = values[i],\n v2 = values[i + 1],\n v0 = i > 0 ? values[i - 1] : 2 * v1 - v2,\n v3 = i < n - 1 ? values[i + 2] : 2 * v2 - v1;\n return basis((t - i / n) * n, v0, v1, v2, v3);\n };\n}\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","import constant from \"./constant\";\n\nfunction linear(a, d) {\n return function(t) {\n return a + t * d;\n };\n}\n\nfunction exponential(a, b, y) {\n return a = Math.pow(a, y), b = Math.pow(b, y) - a, y = 1 / y, function(t) {\n return Math.pow(a + t * b, y);\n };\n}\n\nexport function hue(a, b) {\n var d = b - a;\n return d ? linear(a, d > 180 || d < -180 ? d - 360 * Math.round(d / 360) : d) : constant(isNaN(a) ? b : a);\n}\n\nexport function gamma(y) {\n return (y = +y) === 1 ? nogamma : function(a, b) {\n return b - a ? exponential(a, b, y) : constant(isNaN(a) ? b : a);\n };\n}\n\nexport default function nogamma(a, b) {\n var d = b - a;\n return d ? linear(a, d) : constant(isNaN(a) ? b : a);\n}\n","import {rgb as colorRgb} from \"d3-color\";\nimport basis from \"./basis\";\nimport basisClosed from \"./basisClosed\";\nimport nogamma, {gamma} from \"./color\";\n\nexport default (function rgbGamma(y) {\n var color = gamma(y);\n\n function rgb(start, end) {\n var r = color((start = colorRgb(start)).r, (end = colorRgb(end)).r),\n g = color(start.g, end.g),\n b = color(start.b, end.b),\n opacity = nogamma(start.opacity, end.opacity);\n return function(t) {\n start.r = r(t);\n start.g = g(t);\n start.b = b(t);\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n\n rgb.gamma = rgbGamma;\n\n return rgb;\n})(1);\n\nfunction rgbSpline(spline) {\n return function(colors) {\n var n = colors.length,\n r = new Array(n),\n g = new Array(n),\n b = new Array(n),\n i, color;\n for (i = 0; i < n; ++i) {\n color = colorRgb(colors[i]);\n r[i] = color.r || 0;\n g[i] = color.g || 0;\n b[i] = color.b || 0;\n }\n r = spline(r);\n g = spline(g);\n b = spline(b);\n color.opacity = 1;\n return function(t) {\n color.r = r(t);\n color.g = g(t);\n color.b = b(t);\n return color + \"\";\n };\n };\n}\n\nexport var rgbBasis = rgbSpline(basis);\nexport var rgbBasisClosed = rgbSpline(basisClosed);\n","export default function(a, b) {\n return a = +a, b -= a, function(t) {\n return a + b * t;\n };\n}\n","import {basis} from \"./basis\";\n\nexport default function(values) {\n var n = values.length;\n return function(t) {\n var i = Math.floor(((t %= 1) < 0 ? ++t : t) * n),\n v0 = values[(i + n - 1) % n],\n v1 = values[i % n],\n v2 = values[(i + 1) % n],\n v3 = values[(i + 2) % n];\n return basis((t - i / n) * n, v0, v1, v2, v3);\n };\n}\n","import value from \"./value\";\n\nexport default function(a, b) {\n var i = {},\n c = {},\n k;\n\n if (a === null || typeof a !== \"object\") a = {};\n if (b === null || typeof b !== \"object\") b = {};\n\n for (k in b) {\n if (k in a) {\n i[k] = value(a[k], b[k]);\n } else {\n c[k] = b[k];\n }\n }\n\n return function(t) {\n for (k in i) c[k] = i[k](t);\n return c;\n };\n}\n","import number from \"./number\";\n\nvar reA = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n reB = new RegExp(reA.source, \"g\");\n\nfunction zero(b) {\n return function() {\n return b;\n };\n}\n\nfunction one(b) {\n return function(t) {\n return b(t) + \"\";\n };\n}\n\nexport default function(a, b) {\n var bi = reA.lastIndex = reB.lastIndex = 0, // scan index for next number in b\n am, // current match in a\n bm, // current match in b\n bs, // string preceding current number in b, if any\n i = -1, // index in s\n s = [], // string constants and placeholders\n q = []; // number interpolators\n\n // Coerce inputs to strings.\n a = a + \"\", b = b + \"\";\n\n // Interpolate pairs of numbers in a & b.\n while ((am = reA.exec(a))\n && (bm = reB.exec(b))) {\n if ((bs = bm.index) > bi) { // a string precedes the next number in b\n bs = b.slice(bi, bs);\n if (s[i]) s[i] += bs; // coalesce with previous string\n else s[++i] = bs;\n }\n if ((am = am[0]) === (bm = bm[0])) { // numbers in a & b match\n if (s[i]) s[i] += bm; // coalesce with previous string\n else s[++i] = bm;\n } else { // interpolate non-matching numbers\n s[++i] = null;\n q.push({i: i, x: number(am, bm)});\n }\n bi = reB.lastIndex;\n }\n\n // Add remains of b.\n if (bi < b.length) {\n bs = b.slice(bi);\n if (s[i]) s[i] += bs; // coalesce with previous string\n else s[++i] = bs;\n }\n\n // Special optimization for only a single match.\n // Otherwise, interpolate each of the numbers and rejoin the string.\n return s.length < 2 ? (q[0]\n ? one(q[0].x)\n : zero(b))\n : (b = q.length, function(t) {\n for (var i = 0, o; i < b; ++i) s[(o = q[i]).i] = o.x(t);\n return s.join(\"\");\n });\n}\n","import {color} from \"d3-color\";\nimport rgb from \"./rgb\";\nimport array from \"./array\";\nimport date from \"./date\";\nimport number from \"./number\";\nimport object from \"./object\";\nimport string from \"./string\";\nimport constant from \"./constant\";\n\nexport default function(a, b) {\n var t = typeof b, c;\n return b == null || t === \"boolean\" ? constant(b)\n : (t === \"number\" ? number\n : t === \"string\" ? ((c = color(b)) ? (b = c, rgb) : string)\n : b instanceof color ? rgb\n : b instanceof Date ? date\n : Array.isArray(b) ? array\n : typeof b.valueOf !== \"function\" && typeof b.toString !== \"function\" || isNaN(b) ? object\n : number)(a, b);\n}\n","import decompose, {identity} from \"./decompose\";\n\nvar cssNode,\n cssRoot,\n cssView,\n svgNode;\n\nexport function parseCss(value) {\n if (value === \"none\") return identity;\n if (!cssNode) cssNode = document.createElement(\"DIV\"), cssRoot = document.documentElement, cssView = document.defaultView;\n cssNode.style.transform = value;\n value = cssView.getComputedStyle(cssRoot.appendChild(cssNode), null).getPropertyValue(\"transform\");\n cssRoot.removeChild(cssNode);\n value = value.slice(7, -1).split(\",\");\n return decompose(+value[0], +value[1], +value[2], +value[3], +value[4], +value[5]);\n}\n\nexport function parseSvg(value) {\n if (value == null) return identity;\n if (!svgNode) svgNode = document.createElementNS(\"http://www.w3.org/2000/svg\", \"g\");\n svgNode.setAttribute(\"transform\", value);\n if (!(value = svgNode.transform.baseVal.consolidate())) return identity;\n value = value.matrix;\n return decompose(value.a, value.b, value.c, value.d, value.e, value.f);\n}\n","export default function(a, b) {\n var d = new Date;\n return a = +a, b -= a, function(t) {\n return d.setTime(a + b * t), d;\n };\n}\n","import value from \"./value\";\n\nexport default function(a, b) {\n var nb = b ? b.length : 0,\n na = a ? Math.min(nb, a.length) : 0,\n x = new Array(na),\n c = new Array(nb),\n i;\n\n for (i = 0; i < na; ++i) x[i] = value(a[i], b[i]);\n for (; i < nb; ++i) c[i] = b[i];\n\n return function(t) {\n for (i = 0; i < na; ++i) c[i] = x[i](t);\n return c;\n };\n}\n","export default function(a, b) {\n return a = +a, b -= a, function(t) {\n return Math.round(a + b * t);\n };\n}\n","var degrees = 180 / Math.PI;\n\nexport var identity = {\n translateX: 0,\n translateY: 0,\n rotate: 0,\n skewX: 0,\n scaleX: 1,\n scaleY: 1\n};\n\nexport default function(a, b, c, d, e, f) {\n var scaleX, scaleY, skewX;\n if (scaleX = Math.sqrt(a * a + b * b)) a /= scaleX, b /= scaleX;\n if (skewX = a * c + b * d) c -= a * skewX, d -= b * skewX;\n if (scaleY = Math.sqrt(c * c + d * d)) c /= scaleY, d /= scaleY, skewX /= scaleY;\n if (a * d < b * c) a = -a, b = -b, skewX = -skewX, scaleX = -scaleX;\n return {\n translateX: e,\n translateY: f,\n rotate: Math.atan2(b, a) * degrees,\n skewX: Math.atan(skewX) * degrees,\n scaleX: scaleX,\n scaleY: scaleY\n };\n}\n","import number from \"../number\";\nimport {parseCss, parseSvg} from \"./parse\";\n\nfunction interpolateTransform(parse, pxComma, pxParen, degParen) {\n\n function pop(s) {\n return s.length ? s.pop() + \" \" : \"\";\n }\n\n function translate(xa, ya, xb, yb, s, q) {\n if (xa !== xb || ya !== yb) {\n var i = s.push(\"translate(\", null, pxComma, null, pxParen);\n q.push({i: i - 4, x: number(xa, xb)}, {i: i - 2, x: number(ya, yb)});\n } else if (xb || yb) {\n s.push(\"translate(\" + xb + pxComma + yb + pxParen);\n }\n }\n\n function rotate(a, b, s, q) {\n if (a !== b) {\n if (a - b > 180) b += 360; else if (b - a > 180) a += 360; // shortest path\n q.push({i: s.push(pop(s) + \"rotate(\", null, degParen) - 2, x: number(a, b)});\n } else if (b) {\n s.push(pop(s) + \"rotate(\" + b + degParen);\n }\n }\n\n function skewX(a, b, s, q) {\n if (a !== b) {\n q.push({i: s.push(pop(s) + \"skewX(\", null, degParen) - 2, x: number(a, b)});\n } else if (b) {\n s.push(pop(s) + \"skewX(\" + b + degParen);\n }\n }\n\n function scale(xa, ya, xb, yb, s, q) {\n if (xa !== xb || ya !== yb) {\n var i = s.push(pop(s) + \"scale(\", null, \",\", null, \")\");\n q.push({i: i - 4, x: number(xa, xb)}, {i: i - 2, x: number(ya, yb)});\n } else if (xb !== 1 || yb !== 1) {\n s.push(pop(s) + \"scale(\" + xb + \",\" + yb + \")\");\n }\n }\n\n return function(a, b) {\n var s = [], // string constants and placeholders\n q = []; // number interpolators\n a = parse(a), b = parse(b);\n translate(a.translateX, a.translateY, b.translateX, b.translateY, s, q);\n rotate(a.rotate, b.rotate, s, q);\n skewX(a.skewX, b.skewX, s, q);\n scale(a.scaleX, a.scaleY, b.scaleX, b.scaleY, s, q);\n a = b = null; // gc\n return function(t) {\n var i = -1, n = q.length, o;\n while (++i < n) s[(o = q[i]).i] = o.x(t);\n return s.join(\"\");\n };\n };\n}\n\nexport var interpolateTransformCss = interpolateTransform(parseCss, \"px, \", \"px)\", \"deg)\");\nexport var interpolateTransformSvg = interpolateTransform(parseSvg, \", \", \")\", \")\");\n","var rho = Math.SQRT2,\n rho2 = 2,\n rho4 = 4,\n epsilon2 = 1e-12;\n\nfunction cosh(x) {\n return ((x = Math.exp(x)) + 1 / x) / 2;\n}\n\nfunction sinh(x) {\n return ((x = Math.exp(x)) - 1 / x) / 2;\n}\n\nfunction tanh(x) {\n return ((x = Math.exp(2 * x)) - 1) / (x + 1);\n}\n\n// p0 = [ux0, uy0, w0]\n// p1 = [ux1, uy1, w1]\nexport default function(p0, p1) {\n var ux0 = p0[0], uy0 = p0[1], w0 = p0[2],\n ux1 = p1[0], uy1 = p1[1], w1 = p1[2],\n dx = ux1 - ux0,\n dy = uy1 - uy0,\n d2 = dx * dx + dy * dy,\n i,\n S;\n\n // Special case for u0 ≅ u1.\n if (d2 < epsilon2) {\n S = Math.log(w1 / w0) / rho;\n i = function(t) {\n return [\n ux0 + t * dx,\n uy0 + t * dy,\n w0 * Math.exp(rho * t * S)\n ];\n }\n }\n\n // General case.\n else {\n var d1 = Math.sqrt(d2),\n b0 = (w1 * w1 - w0 * w0 + rho4 * d2) / (2 * w0 * rho2 * d1),\n b1 = (w1 * w1 - w0 * w0 - rho4 * d2) / (2 * w1 * rho2 * d1),\n r0 = Math.log(Math.sqrt(b0 * b0 + 1) - b0),\n r1 = Math.log(Math.sqrt(b1 * b1 + 1) - b1);\n S = (r1 - r0) / rho;\n i = function(t) {\n var s = t * S,\n coshr0 = cosh(r0),\n u = w0 / (rho2 * d1) * (coshr0 * tanh(rho * s + r0) - sinh(r0));\n return [\n ux0 + u * dx,\n uy0 + u * dy,\n w0 * coshr0 / cosh(rho * s + r0)\n ];\n }\n }\n\n i.duration = S * 1000;\n\n return i;\n}\n","import {hsl as colorHsl} from \"d3-color\";\nimport color, {hue} from \"./color\";\n\nfunction hsl(hue) {\n return function(start, end) {\n var h = hue((start = colorHsl(start)).h, (end = colorHsl(end)).h),\n s = color(start.s, end.s),\n l = color(start.l, end.l),\n opacity = color(start.opacity, end.opacity);\n return function(t) {\n start.h = h(t);\n start.s = s(t);\n start.l = l(t);\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n}\n\nexport default hsl(hue);\nexport var hslLong = hsl(color);\n","import {hcl as colorHcl} from \"d3-color\";\nimport color, {hue} from \"./color\";\n\nfunction hcl(hue) {\n return function(start, end) {\n var h = hue((start = colorHcl(start)).h, (end = colorHcl(end)).h),\n c = color(start.c, end.c),\n l = color(start.l, end.l),\n opacity = color(start.opacity, end.opacity);\n return function(t) {\n start.h = h(t);\n start.c = c(t);\n start.l = l(t);\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n}\n\nexport default hcl(hue);\nexport var hclLong = hcl(color);\n","import {cubehelix as colorCubehelix} from \"d3-color\";\nimport color, {hue} from \"./color\";\n\nfunction cubehelix(hue) {\n return (function cubehelixGamma(y) {\n y = +y;\n\n function cubehelix(start, end) {\n var h = hue((start = colorCubehelix(start)).h, (end = colorCubehelix(end)).h),\n s = color(start.s, end.s),\n l = color(start.l, end.l),\n opacity = color(start.opacity, end.opacity);\n return function(t) {\n start.h = h(t);\n start.s = s(t);\n start.l = l(Math.pow(t, y));\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n\n cubehelix.gamma = cubehelixGamma;\n\n return cubehelix;\n })(1);\n}\n\nexport default cubehelix(hue);\nexport var cubehelixLong = cubehelix(color);\n","export default function piecewise(interpolate, values) {\n var i = 0, n = values.length - 1, v = values[0], I = new Array(n < 0 ? 0 : n);\n while (i < n) I[i] = interpolate(v, v = values[++i]);\n return function(t) {\n var i = Math.max(0, Math.min(n - 1, Math.floor(t *= n)));\n return I[i](t - i);\n };\n}\n","export default function(interpolator, n) {\n var samples = new Array(n);\n for (var i = 0; i < n; ++i) samples[i] = interpolator(i / (n - 1));\n return samples;\n}\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","export default function(x) {\n return +x;\n}\n","import {bisect} from \"d3-array\";\nimport {interpolate as interpolateValue, interpolateRound} from \"d3-interpolate\";\nimport {map, slice} from \"./array\";\nimport constant from \"./constant\";\nimport number from \"./number\";\n\nvar unit = [0, 1];\n\nexport function deinterpolateLinear(a, b) {\n return (b -= (a = +a))\n ? function(x) { return (x - a) / b; }\n : constant(b);\n}\n\nfunction deinterpolateClamp(deinterpolate) {\n return function(a, b) {\n var d = deinterpolate(a = +a, b = +b);\n return function(x) { return x <= a ? 0 : x >= b ? 1 : d(x); };\n };\n}\n\nfunction reinterpolateClamp(reinterpolate) {\n return function(a, b) {\n var r = reinterpolate(a = +a, b = +b);\n return function(t) { return t <= 0 ? a : t >= 1 ? b : r(t); };\n };\n}\n\nfunction bimap(domain, range, deinterpolate, reinterpolate) {\n var d0 = domain[0], d1 = domain[1], r0 = range[0], r1 = range[1];\n if (d1 < d0) d0 = deinterpolate(d1, d0), r0 = reinterpolate(r1, r0);\n else d0 = deinterpolate(d0, d1), r0 = reinterpolate(r0, r1);\n return function(x) { return r0(d0(x)); };\n}\n\nfunction polymap(domain, range, deinterpolate, reinterpolate) {\n var j = Math.min(domain.length, range.length) - 1,\n d = new Array(j),\n r = new Array(j),\n i = -1;\n\n // Reverse descending domains.\n if (domain[j] < domain[0]) {\n domain = domain.slice().reverse();\n range = range.slice().reverse();\n }\n\n while (++i < j) {\n d[i] = deinterpolate(domain[i], domain[i + 1]);\n r[i] = reinterpolate(range[i], range[i + 1]);\n }\n\n return function(x) {\n var i = bisect(domain, x, 1, j) - 1;\n return r[i](d[i](x));\n };\n}\n\nexport function copy(source, target) {\n return target\n .domain(source.domain())\n .range(source.range())\n .interpolate(source.interpolate())\n .clamp(source.clamp());\n}\n\n// deinterpolate(a, b)(x) takes a domain value x in [a,b] and returns the corresponding parameter t in [0,1].\n// reinterpolate(a, b)(t) takes a parameter t in [0,1] and returns the corresponding domain value x in [a,b].\nexport default function continuous(deinterpolate, reinterpolate) {\n var domain = unit,\n range = unit,\n interpolate = interpolateValue,\n clamp = false,\n piecewise,\n output,\n input;\n\n function rescale() {\n piecewise = Math.min(domain.length, range.length) > 2 ? polymap : bimap;\n output = input = null;\n return scale;\n }\n\n function scale(x) {\n return (output || (output = piecewise(domain, range, clamp ? deinterpolateClamp(deinterpolate) : deinterpolate, interpolate)))(+x);\n }\n\n scale.invert = function(y) {\n return (input || (input = piecewise(range, domain, deinterpolateLinear, clamp ? reinterpolateClamp(reinterpolate) : reinterpolate)))(+y);\n };\n\n scale.domain = function(_) {\n return arguments.length ? (domain = map.call(_, number), rescale()) : domain.slice();\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = slice.call(_), rescale()) : range.slice();\n };\n\n scale.rangeRound = function(_) {\n return range = slice.call(_), interpolate = interpolateRound, rescale();\n };\n\n scale.clamp = function(_) {\n return arguments.length ? (clamp = !!_, rescale()) : clamp;\n };\n\n scale.interpolate = function(_) {\n return arguments.length ? (interpolate = _, rescale()) : interpolate;\n };\n\n return rescale();\n}\n","// Computes the decimal coefficient and exponent of the specified number x with\n// significant digits p, where x is positive and p is in [1, 21] or undefined.\n// For example, formatDecimal(1.23) returns [\"123\", 0].\nexport default function(x, p) {\n if ((i = (x = p ? x.toExponential(p - 1) : x.toExponential()).indexOf(\"e\")) < 0) return null; // NaN, ±Infinity\n var i, coefficient = x.slice(0, i);\n\n // The string returned by toExponential either has the form \\d\\.\\d+e[-+]\\d+\n // (e.g., 1.2e+3) or the form \\de[-+]\\d+ (e.g., 1e+3).\n return [\n coefficient.length > 1 ? coefficient[0] + coefficient.slice(2) : coefficient,\n +x.slice(i + 1)\n ];\n}\n","import formatDecimal from \"./formatDecimal\";\n\nexport default function(x) {\n return x = formatDecimal(Math.abs(x)), x ? x[1] : NaN;\n}\n","// [[fill]align][sign][symbol][0][width][,][.precision][~][type]\nvar re = /^(?:(.)?([<>=^]))?([+\\-( ])?([$#])?(0)?(\\d+)?(,)?(\\.\\d+)?(~)?([a-z%])?$/i;\n\nexport default function formatSpecifier(specifier) {\n return new FormatSpecifier(specifier);\n}\n\nformatSpecifier.prototype = FormatSpecifier.prototype; // instanceof\n\nfunction FormatSpecifier(specifier) {\n if (!(match = re.exec(specifier))) throw new Error(\"invalid format: \" + specifier);\n var match;\n this.fill = match[1] || \" \";\n this.align = match[2] || \">\";\n this.sign = match[3] || \"-\";\n this.symbol = match[4] || \"\";\n this.zero = !!match[5];\n this.width = match[6] && +match[6];\n this.comma = !!match[7];\n this.precision = match[8] && +match[8].slice(1);\n this.trim = !!match[9];\n this.type = match[10] || \"\";\n}\n\nFormatSpecifier.prototype.toString = function() {\n return this.fill\n + this.align\n + this.sign\n + this.symbol\n + (this.zero ? \"0\" : \"\")\n + (this.width == null ? \"\" : Math.max(1, this.width | 0))\n + (this.comma ? \",\" : \"\")\n + (this.precision == null ? \"\" : \".\" + Math.max(0, this.precision | 0))\n + (this.trim ? \"~\" : \"\")\n + this.type;\n};\n","// Trims insignificant zeros, e.g., replaces 1.2000k with 1.2k.\nexport default function(s) {\n out: for (var n = s.length, i = 1, i0 = -1, i1; i < n; ++i) {\n switch (s[i]) {\n case \".\": i0 = i1 = i; break;\n case \"0\": if (i0 === 0) i0 = i; i1 = i; break;\n default: if (i0 > 0) { if (!+s[i]) break out; i0 = 0; } break;\n }\n }\n return i0 > 0 ? s.slice(0, i0) + s.slice(i1 + 1) : s;\n}\n","import formatDecimal from \"./formatDecimal\";\n\nexport var prefixExponent;\n\nexport default function(x, p) {\n var d = formatDecimal(x, p);\n if (!d) return x + \"\";\n var coefficient = d[0],\n exponent = d[1],\n i = exponent - (prefixExponent = Math.max(-8, Math.min(8, Math.floor(exponent / 3))) * 3) + 1,\n n = coefficient.length;\n return i === n ? coefficient\n : i > n ? coefficient + new Array(i - n + 1).join(\"0\")\n : i > 0 ? coefficient.slice(0, i) + \".\" + coefficient.slice(i)\n : \"0.\" + new Array(1 - i).join(\"0\") + formatDecimal(x, Math.max(0, p + i - 1))[0]; // less than 1y!\n}\n","import formatLocale from \"./locale\";\n\nvar locale;\nexport var format;\nexport var formatPrefix;\n\ndefaultLocale({\n decimal: \".\",\n thousands: \",\",\n grouping: [3],\n currency: [\"$\", \"\"]\n});\n\nexport default function defaultLocale(definition) {\n locale = formatLocale(definition);\n format = locale.format;\n formatPrefix = locale.formatPrefix;\n return locale;\n}\n","import formatDecimal from \"./formatDecimal\";\n\nexport default function(x, p) {\n var d = formatDecimal(x, p);\n if (!d) return x + \"\";\n var coefficient = d[0],\n exponent = d[1];\n return exponent < 0 ? \"0.\" + new Array(-exponent).join(\"0\") + coefficient\n : coefficient.length > exponent + 1 ? coefficient.slice(0, exponent + 1) + \".\" + coefficient.slice(exponent + 1)\n : coefficient + new Array(exponent - coefficient.length + 2).join(\"0\");\n}\n","import formatPrefixAuto from \"./formatPrefixAuto\";\nimport formatRounded from \"./formatRounded\";\n\nexport default {\n \"%\": function(x, p) { return (x * 100).toFixed(p); },\n \"b\": function(x) { return Math.round(x).toString(2); },\n \"c\": function(x) { return x + \"\"; },\n \"d\": function(x) { return Math.round(x).toString(10); },\n \"e\": function(x, p) { return x.toExponential(p); },\n \"f\": function(x, p) { return x.toFixed(p); },\n \"g\": function(x, p) { return x.toPrecision(p); },\n \"o\": function(x) { return Math.round(x).toString(8); },\n \"p\": function(x, p) { return formatRounded(x * 100, p); },\n \"r\": formatRounded,\n \"s\": formatPrefixAuto,\n \"X\": function(x) { return Math.round(x).toString(16).toUpperCase(); },\n \"x\": function(x) { return Math.round(x).toString(16); }\n};\n","export default function(x) {\n return x;\n}\n","import exponent from \"./exponent\";\nimport formatGroup from \"./formatGroup\";\nimport formatNumerals from \"./formatNumerals\";\nimport formatSpecifier from \"./formatSpecifier\";\nimport formatTrim from \"./formatTrim\";\nimport formatTypes from \"./formatTypes\";\nimport {prefixExponent} from \"./formatPrefixAuto\";\nimport identity from \"./identity\";\n\nvar prefixes = [\"y\",\"z\",\"a\",\"f\",\"p\",\"n\",\"µ\",\"m\",\"\",\"k\",\"M\",\"G\",\"T\",\"P\",\"E\",\"Z\",\"Y\"];\n\nexport default function(locale) {\n var group = locale.grouping && locale.thousands ? formatGroup(locale.grouping, locale.thousands) : identity,\n currency = locale.currency,\n decimal = locale.decimal,\n numerals = locale.numerals ? formatNumerals(locale.numerals) : identity,\n percent = locale.percent || \"%\";\n\n function newFormat(specifier) {\n specifier = formatSpecifier(specifier);\n\n var fill = specifier.fill,\n align = specifier.align,\n sign = specifier.sign,\n symbol = specifier.symbol,\n zero = specifier.zero,\n width = specifier.width,\n comma = specifier.comma,\n precision = specifier.precision,\n trim = specifier.trim,\n type = specifier.type;\n\n // The \"n\" type is an alias for \",g\".\n if (type === \"n\") comma = true, type = \"g\";\n\n // The \"\" type, and any invalid type, is an alias for \".12~g\".\n else if (!formatTypes[type]) precision == null && (precision = 12), trim = true, type = \"g\";\n\n // If zero fill is specified, padding goes after sign and before digits.\n if (zero || (fill === \"0\" && align === \"=\")) zero = true, fill = \"0\", align = \"=\";\n\n // Compute the prefix and suffix.\n // For SI-prefix, the suffix is lazily computed.\n var prefix = symbol === \"$\" ? currency[0] : symbol === \"#\" && /[boxX]/.test(type) ? \"0\" + type.toLowerCase() : \"\",\n suffix = symbol === \"$\" ? currency[1] : /[%p]/.test(type) ? percent : \"\";\n\n // What format function should we use?\n // Is this an integer type?\n // Can this type generate exponential notation?\n var formatType = formatTypes[type],\n maybeSuffix = /[defgprs%]/.test(type);\n\n // Set the default precision if not specified,\n // or clamp the specified precision to the supported range.\n // For significant precision, it must be in [1, 21].\n // For fixed precision, it must be in [0, 20].\n precision = precision == null ? 6\n : /[gprs]/.test(type) ? Math.max(1, Math.min(21, precision))\n : Math.max(0, Math.min(20, precision));\n\n function format(value) {\n var valuePrefix = prefix,\n valueSuffix = suffix,\n i, n, c;\n\n if (type === \"c\") {\n valueSuffix = formatType(value) + valueSuffix;\n value = \"\";\n } else {\n value = +value;\n\n // Perform the initial formatting.\n var valueNegative = value < 0;\n value = formatType(Math.abs(value), precision);\n\n // Trim insignificant zeros.\n if (trim) value = formatTrim(value);\n\n // If a negative value rounds to zero during formatting, treat as positive.\n if (valueNegative && +value === 0) valueNegative = false;\n\n // Compute the prefix and suffix.\n valuePrefix = (valueNegative ? (sign === \"(\" ? sign : \"-\") : sign === \"-\" || sign === \"(\" ? \"\" : sign) + valuePrefix;\n valueSuffix = (type === \"s\" ? prefixes[8 + prefixExponent / 3] : \"\") + valueSuffix + (valueNegative && sign === \"(\" ? \")\" : \"\");\n\n // Break the formatted value into the integer “value” part that can be\n // grouped, and fractional or exponential “suffix” part that is not.\n if (maybeSuffix) {\n i = -1, n = value.length;\n while (++i < n) {\n if (c = value.charCodeAt(i), 48 > c || c > 57) {\n valueSuffix = (c === 46 ? decimal + value.slice(i + 1) : value.slice(i)) + valueSuffix;\n value = value.slice(0, i);\n break;\n }\n }\n }\n }\n\n // If the fill character is not \"0\", grouping is applied before padding.\n if (comma && !zero) value = group(value, Infinity);\n\n // Compute the padding.\n var length = valuePrefix.length + value.length + valueSuffix.length,\n padding = length < width ? new Array(width - length + 1).join(fill) : \"\";\n\n // If the fill character is \"0\", grouping is applied after padding.\n if (comma && zero) value = group(padding + value, padding.length ? width - valueSuffix.length : Infinity), padding = \"\";\n\n // Reconstruct the final output based on the desired alignment.\n switch (align) {\n case \"<\": value = valuePrefix + value + valueSuffix + padding; break;\n case \"=\": value = valuePrefix + padding + value + valueSuffix; break;\n case \"^\": value = padding.slice(0, length = padding.length >> 1) + valuePrefix + value + valueSuffix + padding.slice(length); break;\n default: value = padding + valuePrefix + value + valueSuffix; break;\n }\n\n return numerals(value);\n }\n\n format.toString = function() {\n return specifier + \"\";\n };\n\n return format;\n }\n\n function formatPrefix(specifier, value) {\n var f = newFormat((specifier = formatSpecifier(specifier), specifier.type = \"f\", specifier)),\n e = Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3,\n k = Math.pow(10, -e),\n prefix = prefixes[8 + e / 3];\n return function(value) {\n return f(k * value) + prefix;\n };\n }\n\n return {\n format: newFormat,\n formatPrefix: formatPrefix\n };\n}\n","export default function(grouping, thousands) {\n return function(value, width) {\n var i = value.length,\n t = [],\n j = 0,\n g = grouping[0],\n length = 0;\n\n while (i > 0 && g > 0) {\n if (length + g + 1 > width) g = Math.max(1, width - length);\n t.push(value.substring(i -= g, i + g));\n if ((length += g + 1) > width) break;\n g = grouping[j = (j + 1) % grouping.length];\n }\n\n return t.reverse().join(thousands);\n };\n}\n","export default function(numerals) {\n return function(value) {\n return value.replace(/[0-9]/g, function(i) {\n return numerals[+i];\n });\n };\n}\n","import exponent from \"./exponent\";\n\nexport default function(step) {\n return Math.max(0, -exponent(Math.abs(step)));\n}\n","import {tickStep} from \"d3-array\";\nimport {format, formatPrefix, formatSpecifier, precisionFixed, precisionPrefix, precisionRound} from \"d3-format\";\n\nexport default function(domain, count, specifier) {\n var start = domain[0],\n stop = domain[domain.length - 1],\n step = tickStep(start, stop, count == null ? 10 : count),\n precision;\n specifier = formatSpecifier(specifier == null ? \",f\" : specifier);\n switch (specifier.type) {\n case \"s\": {\n var value = Math.max(Math.abs(start), Math.abs(stop));\n if (specifier.precision == null && !isNaN(precision = precisionPrefix(step, value))) specifier.precision = precision;\n return formatPrefix(specifier, value);\n }\n case \"\":\n case \"e\":\n case \"g\":\n case \"p\":\n case \"r\": {\n if (specifier.precision == null && !isNaN(precision = precisionRound(step, Math.max(Math.abs(start), Math.abs(stop))))) specifier.precision = precision - (specifier.type === \"e\");\n break;\n }\n case \"f\":\n case \"%\": {\n if (specifier.precision == null && !isNaN(precision = precisionFixed(step))) specifier.precision = precision - (specifier.type === \"%\") * 2;\n break;\n }\n }\n return format(specifier);\n}\n","import exponent from \"./exponent\";\n\nexport default function(step, value) {\n return Math.max(0, Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3 - exponent(Math.abs(step)));\n}\n","import exponent from \"./exponent\";\n\nexport default function(step, max) {\n step = Math.abs(step), max = Math.abs(max) - step;\n return Math.max(0, exponent(max) - exponent(step)) + 1;\n}\n","import {ticks, tickIncrement} from \"d3-array\";\nimport {interpolateNumber as reinterpolate} from \"d3-interpolate\";\nimport {default as continuous, copy, deinterpolateLinear as deinterpolate} from \"./continuous\";\nimport tickFormat from \"./tickFormat\";\n\nexport function linearish(scale) {\n var domain = scale.domain;\n\n scale.ticks = function(count) {\n var d = domain();\n return ticks(d[0], d[d.length - 1], count == null ? 10 : count);\n };\n\n scale.tickFormat = function(count, specifier) {\n return tickFormat(domain(), count, specifier);\n };\n\n scale.nice = function(count) {\n if (count == null) count = 10;\n\n var d = domain(),\n i0 = 0,\n i1 = d.length - 1,\n start = d[i0],\n stop = d[i1],\n step;\n\n if (stop < start) {\n step = start, start = stop, stop = step;\n step = i0, i0 = i1, i1 = step;\n }\n\n step = tickIncrement(start, stop, count);\n\n if (step > 0) {\n start = Math.floor(start / step) * step;\n stop = Math.ceil(stop / step) * step;\n step = tickIncrement(start, stop, count);\n } else if (step < 0) {\n start = Math.ceil(start * step) / step;\n stop = Math.floor(stop * step) / step;\n step = tickIncrement(start, stop, count);\n }\n\n if (step > 0) {\n d[i0] = Math.floor(start / step) * step;\n d[i1] = Math.ceil(stop / step) * step;\n domain(d);\n } else if (step < 0) {\n d[i0] = Math.ceil(start * step) / step;\n d[i1] = Math.floor(stop * step) / step;\n domain(d);\n }\n\n return scale;\n };\n\n return scale;\n}\n\nexport default function linear() {\n var scale = continuous(deinterpolate, reinterpolate);\n\n scale.copy = function() {\n return copy(scale, linear());\n };\n\n return linearish(scale);\n}\n","import {map} from \"./array\";\nimport {linearish} from \"./linear\";\nimport number from \"./number\";\n\nexport default function identity() {\n var domain = [0, 1];\n\n function scale(x) {\n return +x;\n }\n\n scale.invert = scale;\n\n scale.domain = scale.range = function(_) {\n return arguments.length ? (domain = map.call(_, number), scale) : domain.slice();\n };\n\n scale.copy = function() {\n return identity().domain(domain);\n };\n\n return linearish(scale);\n}\n","export default function(domain, interval) {\n domain = domain.slice();\n\n var i0 = 0,\n i1 = domain.length - 1,\n x0 = domain[i0],\n x1 = domain[i1],\n t;\n\n if (x1 < x0) {\n t = i0, i0 = i1, i1 = t;\n t = x0, x0 = x1, x1 = t;\n }\n\n domain[i0] = interval.floor(x0);\n domain[i1] = interval.ceil(x1);\n return domain;\n}\n","import {ticks} from \"d3-array\";\nimport {format} from \"d3-format\";\nimport constant from \"./constant\";\nimport nice from \"./nice\";\nimport {default as continuous, copy} from \"./continuous\";\n\nfunction deinterpolate(a, b) {\n return (b = Math.log(b / a))\n ? function(x) { return Math.log(x / a) / b; }\n : constant(b);\n}\n\nfunction reinterpolate(a, b) {\n return a < 0\n ? function(t) { return -Math.pow(-b, t) * Math.pow(-a, 1 - t); }\n : function(t) { return Math.pow(b, t) * Math.pow(a, 1 - t); };\n}\n\nfunction pow10(x) {\n return isFinite(x) ? +(\"1e\" + x) : x < 0 ? 0 : x;\n}\n\nfunction powp(base) {\n return base === 10 ? pow10\n : base === Math.E ? Math.exp\n : function(x) { return Math.pow(base, x); };\n}\n\nfunction logp(base) {\n return base === Math.E ? Math.log\n : base === 10 && Math.log10\n || base === 2 && Math.log2\n || (base = Math.log(base), function(x) { return Math.log(x) / base; });\n}\n\nfunction reflect(f) {\n return function(x) {\n return -f(-x);\n };\n}\n\nexport default function log() {\n var scale = continuous(deinterpolate, reinterpolate).domain([1, 10]),\n domain = scale.domain,\n base = 10,\n logs = logp(10),\n pows = powp(10);\n\n function rescale() {\n logs = logp(base), pows = powp(base);\n if (domain()[0] < 0) logs = reflect(logs), pows = reflect(pows);\n return scale;\n }\n\n scale.base = function(_) {\n return arguments.length ? (base = +_, rescale()) : base;\n };\n\n scale.domain = function(_) {\n return arguments.length ? (domain(_), rescale()) : domain();\n };\n\n scale.ticks = function(count) {\n var d = domain(),\n u = d[0],\n v = d[d.length - 1],\n r;\n\n if (r = v < u) i = u, u = v, v = i;\n\n var i = logs(u),\n j = logs(v),\n p,\n k,\n t,\n n = count == null ? 10 : +count,\n z = [];\n\n if (!(base % 1) && j - i < n) {\n i = Math.round(i) - 1, j = Math.round(j) + 1;\n if (u > 0) for (; i < j; ++i) {\n for (k = 1, p = pows(i); k < base; ++k) {\n t = p * k;\n if (t < u) continue;\n if (t > v) break;\n z.push(t);\n }\n } else for (; i < j; ++i) {\n for (k = base - 1, p = pows(i); k >= 1; --k) {\n t = p * k;\n if (t < u) continue;\n if (t > v) break;\n z.push(t);\n }\n }\n } else {\n z = ticks(i, j, Math.min(j - i, n)).map(pows);\n }\n\n return r ? z.reverse() : z;\n };\n\n scale.tickFormat = function(count, specifier) {\n if (specifier == null) specifier = base === 10 ? \".0e\" : \",\";\n if (typeof specifier !== \"function\") specifier = format(specifier);\n if (count === Infinity) return specifier;\n if (count == null) count = 10;\n var k = Math.max(1, base * count / scale.ticks().length); // TODO fast estimate?\n return function(d) {\n var i = d / pows(Math.round(logs(d)));\n if (i * base < base - 0.5) i *= base;\n return i <= k ? specifier(d) : \"\";\n };\n };\n\n scale.nice = function() {\n return domain(nice(domain(), {\n floor: function(x) { return pows(Math.floor(logs(x))); },\n ceil: function(x) { return pows(Math.ceil(logs(x))); }\n }));\n };\n\n scale.copy = function() {\n return copy(scale, log().base(base));\n };\n\n return scale;\n}\n","import constant from \"./constant\";\nimport {linearish} from \"./linear\";\nimport {default as continuous, copy} from \"./continuous\";\n\nfunction raise(x, exponent) {\n return x < 0 ? -Math.pow(-x, exponent) : Math.pow(x, exponent);\n}\n\nexport default function pow() {\n var exponent = 1,\n scale = continuous(deinterpolate, reinterpolate),\n domain = scale.domain;\n\n function deinterpolate(a, b) {\n return (b = raise(b, exponent) - (a = raise(a, exponent)))\n ? function(x) { return (raise(x, exponent) - a) / b; }\n : constant(b);\n }\n\n function reinterpolate(a, b) {\n b = raise(b, exponent) - (a = raise(a, exponent));\n return function(t) { return raise(a + b * t, 1 / exponent); };\n }\n\n scale.exponent = function(_) {\n return arguments.length ? (exponent = +_, domain(domain())) : exponent;\n };\n\n scale.copy = function() {\n return copy(scale, pow().exponent(exponent));\n };\n\n return linearish(scale);\n}\n\nexport function sqrt() {\n return pow().exponent(0.5);\n}\n","import {ascending, bisect, quantile as threshold} from \"d3-array\";\nimport {slice} from \"./array\";\n\nexport default function quantile() {\n var domain = [],\n range = [],\n thresholds = [];\n\n function rescale() {\n var i = 0, n = Math.max(1, range.length);\n thresholds = new Array(n - 1);\n while (++i < n) thresholds[i - 1] = threshold(domain, i / n);\n return scale;\n }\n\n function scale(x) {\n if (!isNaN(x = +x)) return range[bisect(thresholds, x)];\n }\n\n scale.invertExtent = function(y) {\n var i = range.indexOf(y);\n return i < 0 ? [NaN, NaN] : [\n i > 0 ? thresholds[i - 1] : domain[0],\n i < thresholds.length ? thresholds[i] : domain[domain.length - 1]\n ];\n };\n\n scale.domain = function(_) {\n if (!arguments.length) return domain.slice();\n domain = [];\n for (var i = 0, n = _.length, d; i < n; ++i) if (d = _[i], d != null && !isNaN(d = +d)) domain.push(d);\n domain.sort(ascending);\n return rescale();\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = slice.call(_), rescale()) : range.slice();\n };\n\n scale.quantiles = function() {\n return thresholds.slice();\n };\n\n scale.copy = function() {\n return quantile()\n .domain(domain)\n .range(range);\n };\n\n return scale;\n}\n","import {bisect} from \"d3-array\";\nimport {slice} from \"./array\";\nimport {linearish} from \"./linear\";\n\nexport default function quantize() {\n var x0 = 0,\n x1 = 1,\n n = 1,\n domain = [0.5],\n range = [0, 1];\n\n function scale(x) {\n if (x <= x) return range[bisect(domain, x, 0, n)];\n }\n\n function rescale() {\n var i = -1;\n domain = new Array(n);\n while (++i < n) domain[i] = ((i + 1) * x1 - (i - n) * x0) / (n + 1);\n return scale;\n }\n\n scale.domain = function(_) {\n return arguments.length ? (x0 = +_[0], x1 = +_[1], rescale()) : [x0, x1];\n };\n\n scale.range = function(_) {\n return arguments.length ? (n = (range = slice.call(_)).length - 1, rescale()) : range.slice();\n };\n\n scale.invertExtent = function(y) {\n var i = range.indexOf(y);\n return i < 0 ? [NaN, NaN]\n : i < 1 ? [x0, domain[0]]\n : i >= n ? [domain[n - 1], x1]\n : [domain[i - 1], domain[i]];\n };\n\n scale.copy = function() {\n return quantize()\n .domain([x0, x1])\n .range(range);\n };\n\n return linearish(scale);\n}\n","import {bisect} from \"d3-array\";\nimport {slice} from \"./array\";\n\nexport default function threshold() {\n var domain = [0.5],\n range = [0, 1],\n n = 1;\n\n function scale(x) {\n if (x <= x) return range[bisect(domain, x, 0, n)];\n }\n\n scale.domain = function(_) {\n return arguments.length ? (domain = slice.call(_), n = Math.min(domain.length, range.length - 1), scale) : domain.slice();\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = slice.call(_), n = Math.min(domain.length, range.length - 1), scale) : range.slice();\n };\n\n scale.invertExtent = function(y) {\n var i = range.indexOf(y);\n return [domain[i - 1], domain[i]];\n };\n\n scale.copy = function() {\n return threshold()\n .domain(domain)\n .range(range);\n };\n\n return scale;\n}\n","var t0 = new Date,\n t1 = new Date;\n\nexport default function newInterval(floori, offseti, count, field) {\n\n function interval(date) {\n return floori(date = new Date(+date)), date;\n }\n\n interval.floor = interval;\n\n interval.ceil = function(date) {\n return floori(date = new Date(date - 1)), offseti(date, 1), floori(date), date;\n };\n\n interval.round = function(date) {\n var d0 = interval(date),\n d1 = interval.ceil(date);\n return date - d0 < d1 - date ? d0 : d1;\n };\n\n interval.offset = function(date, step) {\n return offseti(date = new Date(+date), step == null ? 1 : Math.floor(step)), date;\n };\n\n interval.range = function(start, stop, step) {\n var range = [], previous;\n start = interval.ceil(start);\n step = step == null ? 1 : Math.floor(step);\n if (!(start < stop) || !(step > 0)) return range; // also handles Invalid Date\n do range.push(previous = new Date(+start)), offseti(start, step), floori(start);\n while (previous < start && start < stop);\n return range;\n };\n\n interval.filter = function(test) {\n return newInterval(function(date) {\n if (date >= date) while (floori(date), !test(date)) date.setTime(date - 1);\n }, function(date, step) {\n if (date >= date) {\n if (step < 0) while (++step <= 0) {\n while (offseti(date, -1), !test(date)) {} // eslint-disable-line no-empty\n } else while (--step >= 0) {\n while (offseti(date, +1), !test(date)) {} // eslint-disable-line no-empty\n }\n }\n });\n };\n\n if (count) {\n interval.count = function(start, end) {\n t0.setTime(+start), t1.setTime(+end);\n floori(t0), floori(t1);\n return Math.floor(count(t0, t1));\n };\n\n interval.every = function(step) {\n step = Math.floor(step);\n return !isFinite(step) || !(step > 0) ? null\n : !(step > 1) ? interval\n : interval.filter(field\n ? function(d) { return field(d) % step === 0; }\n : function(d) { return interval.count(0, d) % step === 0; });\n };\n }\n\n return interval;\n}\n","import interval from \"./interval\";\n\nvar millisecond = interval(function() {\n // noop\n}, function(date, step) {\n date.setTime(+date + step);\n}, function(start, end) {\n return end - start;\n});\n\n// An optimized implementation for this simple case.\nmillisecond.every = function(k) {\n k = Math.floor(k);\n if (!isFinite(k) || !(k > 0)) return null;\n if (!(k > 1)) return millisecond;\n return interval(function(date) {\n date.setTime(Math.floor(date / k) * k);\n }, function(date, step) {\n date.setTime(+date + step * k);\n }, function(start, end) {\n return (end - start) / k;\n });\n};\n\nexport default millisecond;\nexport var milliseconds = millisecond.range;\n","export var durationSecond = 1e3;\nexport var durationMinute = 6e4;\nexport var durationHour = 36e5;\nexport var durationDay = 864e5;\nexport var durationWeek = 6048e5;\n","import interval from \"./interval\";\nimport {durationSecond} from \"./duration\";\n\nvar second = interval(function(date) {\n date.setTime(date - date.getMilliseconds());\n}, function(date, step) {\n date.setTime(+date + step * durationSecond);\n}, function(start, end) {\n return (end - start) / durationSecond;\n}, function(date) {\n return date.getUTCSeconds();\n});\n\nexport default second;\nexport var seconds = second.range;\n","import interval from \"./interval\";\nimport {durationMinute, durationSecond} from \"./duration\";\n\nvar minute = interval(function(date) {\n date.setTime(date - date.getMilliseconds() - date.getSeconds() * durationSecond);\n}, function(date, step) {\n date.setTime(+date + step * durationMinute);\n}, function(start, end) {\n return (end - start) / durationMinute;\n}, function(date) {\n return date.getMinutes();\n});\n\nexport default minute;\nexport var minutes = minute.range;\n","import interval from \"./interval\";\nimport {durationHour, durationMinute, durationSecond} from \"./duration\";\n\nvar hour = interval(function(date) {\n date.setTime(date - date.getMilliseconds() - date.getSeconds() * durationSecond - date.getMinutes() * durationMinute);\n}, function(date, step) {\n date.setTime(+date + step * durationHour);\n}, function(start, end) {\n return (end - start) / durationHour;\n}, function(date) {\n return date.getHours();\n});\n\nexport default hour;\nexport var hours = hour.range;\n","import interval from \"./interval\";\nimport {durationDay, durationMinute} from \"./duration\";\n\nvar day = interval(function(date) {\n date.setHours(0, 0, 0, 0);\n}, function(date, step) {\n date.setDate(date.getDate() + step);\n}, function(start, end) {\n return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationDay;\n}, function(date) {\n return date.getDate() - 1;\n});\n\nexport default day;\nexport var days = day.range;\n","import interval from \"./interval\";\nimport {durationMinute, durationWeek} from \"./duration\";\n\nfunction weekday(i) {\n return interval(function(date) {\n date.setDate(date.getDate() - (date.getDay() + 7 - i) % 7);\n date.setHours(0, 0, 0, 0);\n }, function(date, step) {\n date.setDate(date.getDate() + step * 7);\n }, function(start, end) {\n return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationWeek;\n });\n}\n\nexport var sunday = weekday(0);\nexport var monday = weekday(1);\nexport var tuesday = weekday(2);\nexport var wednesday = weekday(3);\nexport var thursday = weekday(4);\nexport var friday = weekday(5);\nexport var saturday = weekday(6);\n\nexport var sundays = sunday.range;\nexport var mondays = monday.range;\nexport var tuesdays = tuesday.range;\nexport var wednesdays = wednesday.range;\nexport var thursdays = thursday.range;\nexport var fridays = friday.range;\nexport var saturdays = saturday.range;\n","import interval from \"./interval\";\n\nvar month = interval(function(date) {\n date.setDate(1);\n date.setHours(0, 0, 0, 0);\n}, function(date, step) {\n date.setMonth(date.getMonth() + step);\n}, function(start, end) {\n return end.getMonth() - start.getMonth() + (end.getFullYear() - start.getFullYear()) * 12;\n}, function(date) {\n return date.getMonth();\n});\n\nexport default month;\nexport var months = month.range;\n","import interval from \"./interval\";\n\nvar year = interval(function(date) {\n date.setMonth(0, 1);\n date.setHours(0, 0, 0, 0);\n}, function(date, step) {\n date.setFullYear(date.getFullYear() + step);\n}, function(start, end) {\n return end.getFullYear() - start.getFullYear();\n}, function(date) {\n return date.getFullYear();\n});\n\n// An optimized implementation for this simple case.\nyear.every = function(k) {\n return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : interval(function(date) {\n date.setFullYear(Math.floor(date.getFullYear() / k) * k);\n date.setMonth(0, 1);\n date.setHours(0, 0, 0, 0);\n }, function(date, step) {\n date.setFullYear(date.getFullYear() + step * k);\n });\n};\n\nexport default year;\nexport var years = year.range;\n","import interval from \"./interval\";\nimport {durationMinute} from \"./duration\";\n\nvar utcMinute = interval(function(date) {\n date.setUTCSeconds(0, 0);\n}, function(date, step) {\n date.setTime(+date + step * durationMinute);\n}, function(start, end) {\n return (end - start) / durationMinute;\n}, function(date) {\n return date.getUTCMinutes();\n});\n\nexport default utcMinute;\nexport var utcMinutes = utcMinute.range;\n","import interval from \"./interval\";\nimport {durationHour} from \"./duration\";\n\nvar utcHour = interval(function(date) {\n date.setUTCMinutes(0, 0, 0);\n}, function(date, step) {\n date.setTime(+date + step * durationHour);\n}, function(start, end) {\n return (end - start) / durationHour;\n}, function(date) {\n return date.getUTCHours();\n});\n\nexport default utcHour;\nexport var utcHours = utcHour.range;\n","import interval from \"./interval\";\nimport {durationDay} from \"./duration\";\n\nvar utcDay = interval(function(date) {\n date.setUTCHours(0, 0, 0, 0);\n}, function(date, step) {\n date.setUTCDate(date.getUTCDate() + step);\n}, function(start, end) {\n return (end - start) / durationDay;\n}, function(date) {\n return date.getUTCDate() - 1;\n});\n\nexport default utcDay;\nexport var utcDays = utcDay.range;\n","import interval from \"./interval\";\nimport {durationWeek} from \"./duration\";\n\nfunction utcWeekday(i) {\n return interval(function(date) {\n date.setUTCDate(date.getUTCDate() - (date.getUTCDay() + 7 - i) % 7);\n date.setUTCHours(0, 0, 0, 0);\n }, function(date, step) {\n date.setUTCDate(date.getUTCDate() + step * 7);\n }, function(start, end) {\n return (end - start) / durationWeek;\n });\n}\n\nexport var utcSunday = utcWeekday(0);\nexport var utcMonday = utcWeekday(1);\nexport var utcTuesday = utcWeekday(2);\nexport var utcWednesday = utcWeekday(3);\nexport var utcThursday = utcWeekday(4);\nexport var utcFriday = utcWeekday(5);\nexport var utcSaturday = utcWeekday(6);\n\nexport var utcSundays = utcSunday.range;\nexport var utcMondays = utcMonday.range;\nexport var utcTuesdays = utcTuesday.range;\nexport var utcWednesdays = utcWednesday.range;\nexport var utcThursdays = utcThursday.range;\nexport var utcFridays = utcFriday.range;\nexport var utcSaturdays = utcSaturday.range;\n","import interval from \"./interval\";\n\nvar utcMonth = interval(function(date) {\n date.setUTCDate(1);\n date.setUTCHours(0, 0, 0, 0);\n}, function(date, step) {\n date.setUTCMonth(date.getUTCMonth() + step);\n}, function(start, end) {\n return end.getUTCMonth() - start.getUTCMonth() + (end.getUTCFullYear() - start.getUTCFullYear()) * 12;\n}, function(date) {\n return date.getUTCMonth();\n});\n\nexport default utcMonth;\nexport var utcMonths = utcMonth.range;\n","import interval from \"./interval\";\n\nvar utcYear = interval(function(date) {\n date.setUTCMonth(0, 1);\n date.setUTCHours(0, 0, 0, 0);\n}, function(date, step) {\n date.setUTCFullYear(date.getUTCFullYear() + step);\n}, function(start, end) {\n return end.getUTCFullYear() - start.getUTCFullYear();\n}, function(date) {\n return date.getUTCFullYear();\n});\n\n// An optimized implementation for this simple case.\nutcYear.every = function(k) {\n return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : interval(function(date) {\n date.setUTCFullYear(Math.floor(date.getUTCFullYear() / k) * k);\n date.setUTCMonth(0, 1);\n date.setUTCHours(0, 0, 0, 0);\n }, function(date, step) {\n date.setUTCFullYear(date.getUTCFullYear() + step * k);\n });\n};\n\nexport default utcYear;\nexport var utcYears = utcYear.range;\n","import {\n timeDay,\n timeSunday,\n timeMonday,\n timeThursday,\n timeYear,\n utcDay,\n utcSunday,\n utcMonday,\n utcThursday,\n utcYear\n} from \"d3-time\";\n\nfunction localDate(d) {\n if (0 <= d.y && d.y < 100) {\n var date = new Date(-1, d.m, d.d, d.H, d.M, d.S, d.L);\n date.setFullYear(d.y);\n return date;\n }\n return new Date(d.y, d.m, d.d, d.H, d.M, d.S, d.L);\n}\n\nfunction utcDate(d) {\n if (0 <= d.y && d.y < 100) {\n var date = new Date(Date.UTC(-1, d.m, d.d, d.H, d.M, d.S, d.L));\n date.setUTCFullYear(d.y);\n return date;\n }\n return new Date(Date.UTC(d.y, d.m, d.d, d.H, d.M, d.S, d.L));\n}\n\nfunction newYear(y) {\n return {y: y, m: 0, d: 1, H: 0, M: 0, S: 0, L: 0};\n}\n\nexport default function formatLocale(locale) {\n var locale_dateTime = locale.dateTime,\n locale_date = locale.date,\n locale_time = locale.time,\n locale_periods = locale.periods,\n locale_weekdays = locale.days,\n locale_shortWeekdays = locale.shortDays,\n locale_months = locale.months,\n locale_shortMonths = locale.shortMonths;\n\n var periodRe = formatRe(locale_periods),\n periodLookup = formatLookup(locale_periods),\n weekdayRe = formatRe(locale_weekdays),\n weekdayLookup = formatLookup(locale_weekdays),\n shortWeekdayRe = formatRe(locale_shortWeekdays),\n shortWeekdayLookup = formatLookup(locale_shortWeekdays),\n monthRe = formatRe(locale_months),\n monthLookup = formatLookup(locale_months),\n shortMonthRe = formatRe(locale_shortMonths),\n shortMonthLookup = formatLookup(locale_shortMonths);\n\n var formats = {\n \"a\": formatShortWeekday,\n \"A\": formatWeekday,\n \"b\": formatShortMonth,\n \"B\": formatMonth,\n \"c\": null,\n \"d\": formatDayOfMonth,\n \"e\": formatDayOfMonth,\n \"f\": formatMicroseconds,\n \"H\": formatHour24,\n \"I\": formatHour12,\n \"j\": formatDayOfYear,\n \"L\": formatMilliseconds,\n \"m\": formatMonthNumber,\n \"M\": formatMinutes,\n \"p\": formatPeriod,\n \"Q\": formatUnixTimestamp,\n \"s\": formatUnixTimestampSeconds,\n \"S\": formatSeconds,\n \"u\": formatWeekdayNumberMonday,\n \"U\": formatWeekNumberSunday,\n \"V\": formatWeekNumberISO,\n \"w\": formatWeekdayNumberSunday,\n \"W\": formatWeekNumberMonday,\n \"x\": null,\n \"X\": null,\n \"y\": formatYear,\n \"Y\": formatFullYear,\n \"Z\": formatZone,\n \"%\": formatLiteralPercent\n };\n\n var utcFormats = {\n \"a\": formatUTCShortWeekday,\n \"A\": formatUTCWeekday,\n \"b\": formatUTCShortMonth,\n \"B\": formatUTCMonth,\n \"c\": null,\n \"d\": formatUTCDayOfMonth,\n \"e\": formatUTCDayOfMonth,\n \"f\": formatUTCMicroseconds,\n \"H\": formatUTCHour24,\n \"I\": formatUTCHour12,\n \"j\": formatUTCDayOfYear,\n \"L\": formatUTCMilliseconds,\n \"m\": formatUTCMonthNumber,\n \"M\": formatUTCMinutes,\n \"p\": formatUTCPeriod,\n \"Q\": formatUnixTimestamp,\n \"s\": formatUnixTimestampSeconds,\n \"S\": formatUTCSeconds,\n \"u\": formatUTCWeekdayNumberMonday,\n \"U\": formatUTCWeekNumberSunday,\n \"V\": formatUTCWeekNumberISO,\n \"w\": formatUTCWeekdayNumberSunday,\n \"W\": formatUTCWeekNumberMonday,\n \"x\": null,\n \"X\": null,\n \"y\": formatUTCYear,\n \"Y\": formatUTCFullYear,\n \"Z\": formatUTCZone,\n \"%\": formatLiteralPercent\n };\n\n var parses = {\n \"a\": parseShortWeekday,\n \"A\": parseWeekday,\n \"b\": parseShortMonth,\n \"B\": parseMonth,\n \"c\": parseLocaleDateTime,\n \"d\": parseDayOfMonth,\n \"e\": parseDayOfMonth,\n \"f\": parseMicroseconds,\n \"H\": parseHour24,\n \"I\": parseHour24,\n \"j\": parseDayOfYear,\n \"L\": parseMilliseconds,\n \"m\": parseMonthNumber,\n \"M\": parseMinutes,\n \"p\": parsePeriod,\n \"Q\": parseUnixTimestamp,\n \"s\": parseUnixTimestampSeconds,\n \"S\": parseSeconds,\n \"u\": parseWeekdayNumberMonday,\n \"U\": parseWeekNumberSunday,\n \"V\": parseWeekNumberISO,\n \"w\": parseWeekdayNumberSunday,\n \"W\": parseWeekNumberMonday,\n \"x\": parseLocaleDate,\n \"X\": parseLocaleTime,\n \"y\": parseYear,\n \"Y\": parseFullYear,\n \"Z\": parseZone,\n \"%\": parseLiteralPercent\n };\n\n // These recursive directive definitions must be deferred.\n formats.x = newFormat(locale_date, formats);\n formats.X = newFormat(locale_time, formats);\n formats.c = newFormat(locale_dateTime, formats);\n utcFormats.x = newFormat(locale_date, utcFormats);\n utcFormats.X = newFormat(locale_time, utcFormats);\n utcFormats.c = newFormat(locale_dateTime, utcFormats);\n\n function newFormat(specifier, formats) {\n return function(date) {\n var string = [],\n i = -1,\n j = 0,\n n = specifier.length,\n c,\n pad,\n format;\n\n if (!(date instanceof Date)) date = new Date(+date);\n\n while (++i < n) {\n if (specifier.charCodeAt(i) === 37) {\n string.push(specifier.slice(j, i));\n if ((pad = pads[c = specifier.charAt(++i)]) != null) c = specifier.charAt(++i);\n else pad = c === \"e\" ? \" \" : \"0\";\n if (format = formats[c]) c = format(date, pad);\n string.push(c);\n j = i + 1;\n }\n }\n\n string.push(specifier.slice(j, i));\n return string.join(\"\");\n };\n }\n\n function newParse(specifier, newDate) {\n return function(string) {\n var d = newYear(1900),\n i = parseSpecifier(d, specifier, string += \"\", 0),\n week, day;\n if (i != string.length) return null;\n\n // If a UNIX timestamp is specified, return it.\n if (\"Q\" in d) return new Date(d.Q);\n\n // The am-pm flag is 0 for AM, and 1 for PM.\n if (\"p\" in d) d.H = d.H % 12 + d.p * 12;\n\n // Convert day-of-week and week-of-year to day-of-year.\n if (\"V\" in d) {\n if (d.V < 1 || d.V > 53) return null;\n if (!(\"w\" in d)) d.w = 1;\n if (\"Z\" in d) {\n week = utcDate(newYear(d.y)), day = week.getUTCDay();\n week = day > 4 || day === 0 ? utcMonday.ceil(week) : utcMonday(week);\n week = utcDay.offset(week, (d.V - 1) * 7);\n d.y = week.getUTCFullYear();\n d.m = week.getUTCMonth();\n d.d = week.getUTCDate() + (d.w + 6) % 7;\n } else {\n week = newDate(newYear(d.y)), day = week.getDay();\n week = day > 4 || day === 0 ? timeMonday.ceil(week) : timeMonday(week);\n week = timeDay.offset(week, (d.V - 1) * 7);\n d.y = week.getFullYear();\n d.m = week.getMonth();\n d.d = week.getDate() + (d.w + 6) % 7;\n }\n } else if (\"W\" in d || \"U\" in d) {\n if (!(\"w\" in d)) d.w = \"u\" in d ? d.u % 7 : \"W\" in d ? 1 : 0;\n day = \"Z\" in d ? utcDate(newYear(d.y)).getUTCDay() : newDate(newYear(d.y)).getDay();\n d.m = 0;\n d.d = \"W\" in d ? (d.w + 6) % 7 + d.W * 7 - (day + 5) % 7 : d.w + d.U * 7 - (day + 6) % 7;\n }\n\n // If a time zone is specified, all fields are interpreted as UTC and then\n // offset according to the specified time zone.\n if (\"Z\" in d) {\n d.H += d.Z / 100 | 0;\n d.M += d.Z % 100;\n return utcDate(d);\n }\n\n // Otherwise, all fields are in local time.\n return newDate(d);\n };\n }\n\n function parseSpecifier(d, specifier, string, j) {\n var i = 0,\n n = specifier.length,\n m = string.length,\n c,\n parse;\n\n while (i < n) {\n if (j >= m) return -1;\n c = specifier.charCodeAt(i++);\n if (c === 37) {\n c = specifier.charAt(i++);\n parse = parses[c in pads ? specifier.charAt(i++) : c];\n if (!parse || ((j = parse(d, string, j)) < 0)) return -1;\n } else if (c != string.charCodeAt(j++)) {\n return -1;\n }\n }\n\n return j;\n }\n\n function parsePeriod(d, string, i) {\n var n = periodRe.exec(string.slice(i));\n return n ? (d.p = periodLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n }\n\n function parseShortWeekday(d, string, i) {\n var n = shortWeekdayRe.exec(string.slice(i));\n return n ? (d.w = shortWeekdayLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n }\n\n function parseWeekday(d, string, i) {\n var n = weekdayRe.exec(string.slice(i));\n return n ? (d.w = weekdayLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n }\n\n function parseShortMonth(d, string, i) {\n var n = shortMonthRe.exec(string.slice(i));\n return n ? (d.m = shortMonthLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n }\n\n function parseMonth(d, string, i) {\n var n = monthRe.exec(string.slice(i));\n return n ? (d.m = monthLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n }\n\n function parseLocaleDateTime(d, string, i) {\n return parseSpecifier(d, locale_dateTime, string, i);\n }\n\n function parseLocaleDate(d, string, i) {\n return parseSpecifier(d, locale_date, string, i);\n }\n\n function parseLocaleTime(d, string, i) {\n return parseSpecifier(d, locale_time, string, i);\n }\n\n function formatShortWeekday(d) {\n return locale_shortWeekdays[d.getDay()];\n }\n\n function formatWeekday(d) {\n return locale_weekdays[d.getDay()];\n }\n\n function formatShortMonth(d) {\n return locale_shortMonths[d.getMonth()];\n }\n\n function formatMonth(d) {\n return locale_months[d.getMonth()];\n }\n\n function formatPeriod(d) {\n return locale_periods[+(d.getHours() >= 12)];\n }\n\n function formatUTCShortWeekday(d) {\n return locale_shortWeekdays[d.getUTCDay()];\n }\n\n function formatUTCWeekday(d) {\n return locale_weekdays[d.getUTCDay()];\n }\n\n function formatUTCShortMonth(d) {\n return locale_shortMonths[d.getUTCMonth()];\n }\n\n function formatUTCMonth(d) {\n return locale_months[d.getUTCMonth()];\n }\n\n function formatUTCPeriod(d) {\n return locale_periods[+(d.getUTCHours() >= 12)];\n }\n\n return {\n format: function(specifier) {\n var f = newFormat(specifier += \"\", formats);\n f.toString = function() { return specifier; };\n return f;\n },\n parse: function(specifier) {\n var p = newParse(specifier += \"\", localDate);\n p.toString = function() { return specifier; };\n return p;\n },\n utcFormat: function(specifier) {\n var f = newFormat(specifier += \"\", utcFormats);\n f.toString = function() { return specifier; };\n return f;\n },\n utcParse: function(specifier) {\n var p = newParse(specifier, utcDate);\n p.toString = function() { return specifier; };\n return p;\n }\n };\n}\n\nvar pads = {\"-\": \"\", \"_\": \" \", \"0\": \"0\"},\n numberRe = /^\\s*\\d+/, // note: ignores next directive\n percentRe = /^%/,\n requoteRe = /[\\\\^$*+?|[\\]().{}]/g;\n\nfunction pad(value, fill, width) {\n var sign = value < 0 ? \"-\" : \"\",\n string = (sign ? -value : value) + \"\",\n length = string.length;\n return sign + (length < width ? new Array(width - length + 1).join(fill) + string : string);\n}\n\nfunction requote(s) {\n return s.replace(requoteRe, \"\\\\$&\");\n}\n\nfunction formatRe(names) {\n return new RegExp(\"^(?:\" + names.map(requote).join(\"|\") + \")\", \"i\");\n}\n\nfunction formatLookup(names) {\n var map = {}, i = -1, n = names.length;\n while (++i < n) map[names[i].toLowerCase()] = i;\n return map;\n}\n\nfunction parseWeekdayNumberSunday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 1));\n return n ? (d.w = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekdayNumberMonday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 1));\n return n ? (d.u = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberSunday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.U = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberISO(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.V = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberMonday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.W = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseFullYear(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 4));\n return n ? (d.y = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseYear(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.y = +n[0] + (+n[0] > 68 ? 1900 : 2000), i + n[0].length) : -1;\n}\n\nfunction parseZone(d, string, i) {\n var n = /^(Z)|([+-]\\d\\d)(?::?(\\d\\d))?/.exec(string.slice(i, i + 6));\n return n ? (d.Z = n[1] ? 0 : -(n[2] + (n[3] || \"00\")), i + n[0].length) : -1;\n}\n\nfunction parseMonthNumber(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.m = n[0] - 1, i + n[0].length) : -1;\n}\n\nfunction parseDayOfMonth(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.d = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseDayOfYear(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 3));\n return n ? (d.m = 0, d.d = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseHour24(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.H = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseMinutes(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.M = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseSeconds(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.S = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseMilliseconds(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 3));\n return n ? (d.L = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseMicroseconds(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 6));\n return n ? (d.L = Math.floor(n[0] / 1000), i + n[0].length) : -1;\n}\n\nfunction parseLiteralPercent(d, string, i) {\n var n = percentRe.exec(string.slice(i, i + 1));\n return n ? i + n[0].length : -1;\n}\n\nfunction parseUnixTimestamp(d, string, i) {\n var n = numberRe.exec(string.slice(i));\n return n ? (d.Q = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseUnixTimestampSeconds(d, string, i) {\n var n = numberRe.exec(string.slice(i));\n return n ? (d.Q = (+n[0]) * 1000, i + n[0].length) : -1;\n}\n\nfunction formatDayOfMonth(d, p) {\n return pad(d.getDate(), p, 2);\n}\n\nfunction formatHour24(d, p) {\n return pad(d.getHours(), p, 2);\n}\n\nfunction formatHour12(d, p) {\n return pad(d.getHours() % 12 || 12, p, 2);\n}\n\nfunction formatDayOfYear(d, p) {\n return pad(1 + timeDay.count(timeYear(d), d), p, 3);\n}\n\nfunction formatMilliseconds(d, p) {\n return pad(d.getMilliseconds(), p, 3);\n}\n\nfunction formatMicroseconds(d, p) {\n return formatMilliseconds(d, p) + \"000\";\n}\n\nfunction formatMonthNumber(d, p) {\n return pad(d.getMonth() + 1, p, 2);\n}\n\nfunction formatMinutes(d, p) {\n return pad(d.getMinutes(), p, 2);\n}\n\nfunction formatSeconds(d, p) {\n return pad(d.getSeconds(), p, 2);\n}\n\nfunction formatWeekdayNumberMonday(d) {\n var day = d.getDay();\n return day === 0 ? 7 : day;\n}\n\nfunction formatWeekNumberSunday(d, p) {\n return pad(timeSunday.count(timeYear(d), d), p, 2);\n}\n\nfunction formatWeekNumberISO(d, p) {\n var day = d.getDay();\n d = (day >= 4 || day === 0) ? timeThursday(d) : timeThursday.ceil(d);\n return pad(timeThursday.count(timeYear(d), d) + (timeYear(d).getDay() === 4), p, 2);\n}\n\nfunction formatWeekdayNumberSunday(d) {\n return d.getDay();\n}\n\nfunction formatWeekNumberMonday(d, p) {\n return pad(timeMonday.count(timeYear(d), d), p, 2);\n}\n\nfunction formatYear(d, p) {\n return pad(d.getFullYear() % 100, p, 2);\n}\n\nfunction formatFullYear(d, p) {\n return pad(d.getFullYear() % 10000, p, 4);\n}\n\nfunction formatZone(d) {\n var z = d.getTimezoneOffset();\n return (z > 0 ? \"-\" : (z *= -1, \"+\"))\n + pad(z / 60 | 0, \"0\", 2)\n + pad(z % 60, \"0\", 2);\n}\n\nfunction formatUTCDayOfMonth(d, p) {\n return pad(d.getUTCDate(), p, 2);\n}\n\nfunction formatUTCHour24(d, p) {\n return pad(d.getUTCHours(), p, 2);\n}\n\nfunction formatUTCHour12(d, p) {\n return pad(d.getUTCHours() % 12 || 12, p, 2);\n}\n\nfunction formatUTCDayOfYear(d, p) {\n return pad(1 + utcDay.count(utcYear(d), d), p, 3);\n}\n\nfunction formatUTCMilliseconds(d, p) {\n return pad(d.getUTCMilliseconds(), p, 3);\n}\n\nfunction formatUTCMicroseconds(d, p) {\n return formatUTCMilliseconds(d, p) + \"000\";\n}\n\nfunction formatUTCMonthNumber(d, p) {\n return pad(d.getUTCMonth() + 1, p, 2);\n}\n\nfunction formatUTCMinutes(d, p) {\n return pad(d.getUTCMinutes(), p, 2);\n}\n\nfunction formatUTCSeconds(d, p) {\n return pad(d.getUTCSeconds(), p, 2);\n}\n\nfunction formatUTCWeekdayNumberMonday(d) {\n var dow = d.getUTCDay();\n return dow === 0 ? 7 : dow;\n}\n\nfunction formatUTCWeekNumberSunday(d, p) {\n return pad(utcSunday.count(utcYear(d), d), p, 2);\n}\n\nfunction formatUTCWeekNumberISO(d, p) {\n var day = d.getUTCDay();\n d = (day >= 4 || day === 0) ? utcThursday(d) : utcThursday.ceil(d);\n return pad(utcThursday.count(utcYear(d), d) + (utcYear(d).getUTCDay() === 4), p, 2);\n}\n\nfunction formatUTCWeekdayNumberSunday(d) {\n return d.getUTCDay();\n}\n\nfunction formatUTCWeekNumberMonday(d, p) {\n return pad(utcMonday.count(utcYear(d), d), p, 2);\n}\n\nfunction formatUTCYear(d, p) {\n return pad(d.getUTCFullYear() % 100, p, 2);\n}\n\nfunction formatUTCFullYear(d, p) {\n return pad(d.getUTCFullYear() % 10000, p, 4);\n}\n\nfunction formatUTCZone() {\n return \"+0000\";\n}\n\nfunction formatLiteralPercent() {\n return \"%\";\n}\n\nfunction formatUnixTimestamp(d) {\n return +d;\n}\n\nfunction formatUnixTimestampSeconds(d) {\n return Math.floor(+d / 1000);\n}\n","import formatLocale from \"./locale\";\n\nvar locale;\nexport var timeFormat;\nexport var timeParse;\nexport var utcFormat;\nexport var utcParse;\n\ndefaultLocale({\n dateTime: \"%x, %X\",\n date: \"%-m/%-d/%Y\",\n time: \"%-I:%M:%S %p\",\n periods: [\"AM\", \"PM\"],\n days: [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"],\n shortDays: [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"],\n months: [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"],\n shortMonths: [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"]\n});\n\nexport default function defaultLocale(definition) {\n locale = formatLocale(definition);\n timeFormat = locale.format;\n timeParse = locale.parse;\n utcFormat = locale.utcFormat;\n utcParse = locale.utcParse;\n return locale;\n}\n","import {utcFormat} from \"./defaultLocale\";\n\nexport var isoSpecifier = \"%Y-%m-%dT%H:%M:%S.%LZ\";\n\nfunction formatIsoNative(date) {\n return date.toISOString();\n}\n\nvar formatIso = Date.prototype.toISOString\n ? formatIsoNative\n : utcFormat(isoSpecifier);\n\nexport default formatIso;\n","import {isoSpecifier} from \"./isoFormat\";\nimport {utcParse} from \"./defaultLocale\";\n\nfunction parseIsoNative(string) {\n var date = new Date(string);\n return isNaN(date) ? null : date;\n}\n\nvar parseIso = +new Date(\"2000-01-01T00:00:00.000Z\")\n ? parseIsoNative\n : utcParse(isoSpecifier);\n\nexport default parseIso;\n","import {bisector, tickStep} from \"d3-array\";\nimport {interpolateNumber as reinterpolate} from \"d3-interpolate\";\nimport {timeYear, timeMonth, timeWeek, timeDay, timeHour, timeMinute, timeSecond, timeMillisecond} from \"d3-time\";\nimport {timeFormat} from \"d3-time-format\";\nimport {map} from \"./array\";\nimport {default as continuous, copy, deinterpolateLinear as deinterpolate} from \"./continuous\";\nimport nice from \"./nice\";\n\nvar durationSecond = 1000,\n durationMinute = durationSecond * 60,\n durationHour = durationMinute * 60,\n durationDay = durationHour * 24,\n durationWeek = durationDay * 7,\n durationMonth = durationDay * 30,\n durationYear = durationDay * 365;\n\nfunction date(t) {\n return new Date(t);\n}\n\nfunction number(t) {\n return t instanceof Date ? +t : +new Date(+t);\n}\n\nexport function calendar(year, month, week, day, hour, minute, second, millisecond, format) {\n var scale = continuous(deinterpolate, reinterpolate),\n invert = scale.invert,\n domain = scale.domain;\n\n var formatMillisecond = format(\".%L\"),\n formatSecond = format(\":%S\"),\n formatMinute = format(\"%I:%M\"),\n formatHour = format(\"%I %p\"),\n formatDay = format(\"%a %d\"),\n formatWeek = format(\"%b %d\"),\n formatMonth = format(\"%B\"),\n formatYear = format(\"%Y\");\n\n var tickIntervals = [\n [second, 1, durationSecond],\n [second, 5, 5 * durationSecond],\n [second, 15, 15 * durationSecond],\n [second, 30, 30 * durationSecond],\n [minute, 1, durationMinute],\n [minute, 5, 5 * durationMinute],\n [minute, 15, 15 * durationMinute],\n [minute, 30, 30 * durationMinute],\n [ hour, 1, durationHour ],\n [ hour, 3, 3 * durationHour ],\n [ hour, 6, 6 * durationHour ],\n [ hour, 12, 12 * durationHour ],\n [ day, 1, durationDay ],\n [ day, 2, 2 * durationDay ],\n [ week, 1, durationWeek ],\n [ month, 1, durationMonth ],\n [ month, 3, 3 * durationMonth ],\n [ year, 1, durationYear ]\n ];\n\n function tickFormat(date) {\n return (second(date) < date ? formatMillisecond\n : minute(date) < date ? formatSecond\n : hour(date) < date ? formatMinute\n : day(date) < date ? formatHour\n : month(date) < date ? (week(date) < date ? formatDay : formatWeek)\n : year(date) < date ? formatMonth\n : formatYear)(date);\n }\n\n function tickInterval(interval, start, stop, step) {\n if (interval == null) interval = 10;\n\n // If a desired tick count is specified, pick a reasonable tick interval\n // based on the extent of the domain and a rough estimate of tick size.\n // Otherwise, assume interval is already a time interval and use it.\n if (typeof interval === \"number\") {\n var target = Math.abs(stop - start) / interval,\n i = bisector(function(i) { return i[2]; }).right(tickIntervals, target);\n if (i === tickIntervals.length) {\n step = tickStep(start / durationYear, stop / durationYear, interval);\n interval = year;\n } else if (i) {\n i = tickIntervals[target / tickIntervals[i - 1][2] < tickIntervals[i][2] / target ? i - 1 : i];\n step = i[1];\n interval = i[0];\n } else {\n step = Math.max(tickStep(start, stop, interval), 1);\n interval = millisecond;\n }\n }\n\n return step == null ? interval : interval.every(step);\n }\n\n scale.invert = function(y) {\n return new Date(invert(y));\n };\n\n scale.domain = function(_) {\n return arguments.length ? domain(map.call(_, number)) : domain().map(date);\n };\n\n scale.ticks = function(interval, step) {\n var d = domain(),\n t0 = d[0],\n t1 = d[d.length - 1],\n r = t1 < t0,\n t;\n if (r) t = t0, t0 = t1, t1 = t;\n t = tickInterval(interval, t0, t1, step);\n t = t ? t.range(t0, t1 + 1) : []; // inclusive stop\n return r ? t.reverse() : t;\n };\n\n scale.tickFormat = function(count, specifier) {\n return specifier == null ? tickFormat : format(specifier);\n };\n\n scale.nice = function(interval, step) {\n var d = domain();\n return (interval = tickInterval(interval, d[0], d[d.length - 1], step))\n ? domain(nice(d, interval))\n : scale;\n };\n\n scale.copy = function() {\n return copy(scale, calendar(year, month, week, day, hour, minute, second, millisecond, format));\n };\n\n return scale;\n}\n\nexport default function() {\n return calendar(timeYear, timeMonth, timeWeek, timeDay, timeHour, timeMinute, timeSecond, timeMillisecond, timeFormat).domain([new Date(2000, 0, 1), new Date(2000, 0, 2)]);\n}\n","export default function(s) {\n return s.match(/.{6}/g).map(function(x) {\n return \"#\" + x;\n });\n}\n","import colors from \"./colors\";\n\nexport default colors(\"1f77b4ff7f0e2ca02cd627289467bd8c564be377c27f7f7fbcbd2217becf\");\n","import colors from \"./colors\";\n\nexport default colors(\"393b795254a36b6ecf9c9ede6379398ca252b5cf6bcedb9c8c6d31bd9e39e7ba52e7cb94843c39ad494ad6616be7969c7b4173a55194ce6dbdde9ed6\");\n","import colors from \"./colors\";\n\nexport default colors(\"1f77b4aec7e8ff7f0effbb782ca02c98df8ad62728ff98969467bdc5b0d58c564bc49c94e377c2f7b6d27f7f7fc7c7c7bcbd22dbdb8d17becf9edae5\");\n","import colors from \"./colors\";\n\nexport default colors(\"3182bd6baed69ecae1c6dbefe6550dfd8d3cfdae6bfdd0a231a35474c476a1d99bc7e9c0756bb19e9ac8bcbddcdadaeb636363969696bdbdbdd9d9d9\");\n","import {cubehelix} from \"d3-color\";\nimport {interpolateCubehelixLong} from \"d3-interpolate\";\n\nexport default interpolateCubehelixLong(cubehelix(300, 0.5, 0.0), cubehelix(-240, 0.5, 1.0));\n","import {cubehelix} from \"d3-color\";\nimport {interpolateCubehelixLong} from \"d3-interpolate\";\n\nexport var warm = interpolateCubehelixLong(cubehelix(-100, 0.75, 0.35), cubehelix(80, 1.50, 0.8));\n\nexport var cool = interpolateCubehelixLong(cubehelix(260, 0.75, 0.35), cubehelix(80, 1.50, 0.8));\n\nvar rainbow = cubehelix();\n\nexport default function(t) {\n if (t < 0 || t > 1) t -= Math.floor(t);\n var ts = Math.abs(t - 0.5);\n rainbow.h = 360 * t - 100;\n rainbow.s = 1.5 - 1.5 * ts;\n rainbow.l = 0.8 - 0.9 * ts;\n return rainbow + \"\";\n}\n","import colors from \"./colors\";\n\nfunction ramp(range) {\n var n = range.length;\n return function(t) {\n return range[Math.max(0, Math.min(n - 1, Math.floor(t * n)))];\n };\n}\n\nexport default ramp(colors(\"44015444025645045745055946075a46085c460a5d460b5e470d60470e6147106347116447136548146748166848176948186a481a6c481b6d481c6e481d6f481f70482071482173482374482475482576482677482878482979472a7a472c7a472d7b472e7c472f7d46307e46327e46337f463480453581453781453882443983443a83443b84433d84433e85423f854240864241864142874144874045884046883f47883f48893e49893e4a893e4c8a3d4d8a3d4e8a3c4f8a3c508b3b518b3b528b3a538b3a548c39558c39568c38588c38598c375a8c375b8d365c8d365d8d355e8d355f8d34608d34618d33628d33638d32648e32658e31668e31678e31688e30698e306a8e2f6b8e2f6c8e2e6d8e2e6e8e2e6f8e2d708e2d718e2c718e2c728e2c738e2b748e2b758e2a768e2a778e2a788e29798e297a8e297b8e287c8e287d8e277e8e277f8e27808e26818e26828e26828e25838e25848e25858e24868e24878e23888e23898e238a8d228b8d228c8d228d8d218e8d218f8d21908d21918c20928c20928c20938c1f948c1f958b1f968b1f978b1f988b1f998a1f9a8a1e9b8a1e9c891e9d891f9e891f9f881fa0881fa1881fa1871fa28720a38620a48621a58521a68522a78522a88423a98324aa8325ab8225ac8226ad8127ad8128ae8029af7f2ab07f2cb17e2db27d2eb37c2fb47c31b57b32b67a34b67935b77937b87838b9773aba763bbb753dbc743fbc7340bd7242be7144bf7046c06f48c16e4ac16d4cc26c4ec36b50c46a52c56954c56856c66758c7655ac8645cc8635ec96260ca6063cb5f65cb5e67cc5c69cd5b6ccd5a6ece5870cf5773d05675d05477d1537ad1517cd2507fd34e81d34d84d44b86d54989d5488bd6468ed64590d74393d74195d84098d83e9bd93c9dd93ba0da39a2da37a5db36a8db34aadc32addc30b0dd2fb2dd2db5de2bb8de29bade28bddf26c0df25c2df23c5e021c8e020cae11fcde11dd0e11cd2e21bd5e21ad8e219dae319dde318dfe318e2e418e5e419e7e419eae51aece51befe51cf1e51df4e61ef6e620f8e621fbe723fde725\"));\n\nexport var magma = ramp(colors(\"00000401000501010601010802010902020b02020d03030f03031204041405041606051806051a07061c08071e0907200a08220b09240c09260d0a290e0b2b100b2d110c2f120d31130d34140e36150e38160f3b180f3d19103f1a10421c10441d11471e114920114b21114e22115024125325125527125829115a2a115c2c115f2d11612f116331116533106734106936106b38106c390f6e3b0f703d0f713f0f72400f74420f75440f764510774710784910784a10794c117a4e117b4f127b51127c52137c54137d56147d57157e59157e5a167e5c167f5d177f5f187f601880621980641a80651a80671b80681c816a1c816b1d816d1d816e1e81701f81721f817320817521817621817822817922827b23827c23827e24828025828125818326818426818627818827818928818b29818c29818e2a81902a81912b81932b80942c80962c80982d80992d809b2e7f9c2e7f9e2f7fa02f7fa1307ea3307ea5317ea6317da8327daa337dab337cad347cae347bb0357bb2357bb3367ab5367ab73779b83779ba3878bc3978bd3977bf3a77c03a76c23b75c43c75c53c74c73d73c83e73ca3e72cc3f71cd4071cf4070d0416fd2426fd3436ed5446dd6456cd8456cd9466bdb476adc4869de4968df4a68e04c67e24d66e34e65e44f64e55064e75263e85362e95462ea5661eb5760ec5860ed5a5fee5b5eef5d5ef05f5ef1605df2625df2645cf3655cf4675cf4695cf56b5cf66c5cf66e5cf7705cf7725cf8745cf8765cf9785df9795df97b5dfa7d5efa7f5efa815ffb835ffb8560fb8761fc8961fc8a62fc8c63fc8e64fc9065fd9266fd9467fd9668fd9869fd9a6afd9b6bfe9d6cfe9f6dfea16efea36ffea571fea772fea973feaa74feac76feae77feb078feb27afeb47bfeb67cfeb77efeb97ffebb81febd82febf84fec185fec287fec488fec68afec88cfeca8dfecc8ffecd90fecf92fed194fed395fed597fed799fed89afdda9cfddc9efddea0fde0a1fde2a3fde3a5fde5a7fde7a9fde9aafdebacfcecaefceeb0fcf0b2fcf2b4fcf4b6fcf6b8fcf7b9fcf9bbfcfbbdfcfdbf\"));\n\nexport var inferno = ramp(colors(\"00000401000501010601010802010a02020c02020e03021004031204031405041706041907051b08051d09061f0a07220b07240c08260d08290e092b10092d110a30120a32140b34150b37160b39180c3c190c3e1b0c411c0c431e0c451f0c48210c4a230c4c240c4f260c51280b53290b552b0b572d0b592f0a5b310a5c320a5e340a5f3609613809623909633b09643d09653e0966400a67420a68440a68450a69470b6a490b6a4a0c6b4c0c6b4d0d6c4f0d6c510e6c520e6d540f6d550f6d57106e59106e5a116e5c126e5d126e5f136e61136e62146e64156e65156e67166e69166e6a176e6c186e6d186e6f196e71196e721a6e741a6e751b6e771c6d781c6d7a1d6d7c1d6d7d1e6d7f1e6c801f6c82206c84206b85216b87216b88226a8a226a8c23698d23698f24699025689225689326679526679727669827669a28659b29649d29649f2a63a02a63a22b62a32c61a52c60a62d60a82e5fa92e5eab2f5ead305dae305cb0315bb1325ab3325ab43359b63458b73557b93556ba3655bc3754bd3853bf3952c03a51c13a50c33b4fc43c4ec63d4dc73e4cc83f4bca404acb4149cc4248ce4347cf4446d04545d24644d34743d44842d54a41d74b3fd84c3ed94d3dda4e3cdb503bdd513ade5238df5337e05536e15635e25734e35933e45a31e55c30e65d2fe75e2ee8602de9612bea632aeb6429eb6628ec6726ed6925ee6a24ef6c23ef6e21f06f20f1711ff1731df2741cf3761bf37819f47918f57b17f57d15f67e14f68013f78212f78410f8850ff8870ef8890cf98b0bf98c0af98e09fa9008fa9207fa9407fb9606fb9706fb9906fb9b06fb9d07fc9f07fca108fca309fca50afca60cfca80dfcaa0ffcac11fcae12fcb014fcb216fcb418fbb61afbb81dfbba1ffbbc21fbbe23fac026fac228fac42afac62df9c72ff9c932f9cb35f8cd37f8cf3af7d13df7d340f6d543f6d746f5d949f5db4cf4dd4ff4df53f4e156f3e35af3e55df2e661f2e865f2ea69f1ec6df1ed71f1ef75f1f179f2f27df2f482f3f586f3f68af4f88ef5f992f6fa96f8fb9af9fc9dfafda1fcffa4\"));\n\nexport var plasma = ramp(colors(\"0d088710078813078916078a19068c1b068d1d068e20068f2206902406912605912805922a05932c05942e05952f059631059733059735049837049938049a3a049a3c049b3e049c3f049c41049d43039e44039e46039f48039f4903a04b03a14c02a14e02a25002a25102a35302a35502a45601a45801a45901a55b01a55c01a65e01a66001a66100a76300a76400a76600a76700a86900a86a00a86c00a86e00a86f00a87100a87201a87401a87501a87701a87801a87a02a87b02a87d03a87e03a88004a88104a78305a78405a78606a68707a68808a68a09a58b0aa58d0ba58e0ca48f0da4910ea3920fa39410a29511a19613a19814a099159f9a169f9c179e9d189d9e199da01a9ca11b9ba21d9aa31e9aa51f99a62098a72197a82296aa2395ab2494ac2694ad2793ae2892b02991b12a90b22b8fb32c8eb42e8db52f8cb6308bb7318ab83289ba3388bb3488bc3587bd3786be3885bf3984c03a83c13b82c23c81c33d80c43e7fc5407ec6417dc7427cc8437bc9447aca457acb4679cc4778cc4977cd4a76ce4b75cf4c74d04d73d14e72d24f71d35171d45270d5536fd5546ed6556dd7566cd8576bd9586ada5a6ada5b69db5c68dc5d67dd5e66de5f65de6164df6263e06363e16462e26561e26660e3685fe4695ee56a5de56b5de66c5ce76e5be76f5ae87059e97158e97257ea7457eb7556eb7655ec7754ed7953ed7a52ee7b51ef7c51ef7e50f07f4ff0804ef1814df1834cf2844bf3854bf3874af48849f48948f58b47f58c46f68d45f68f44f79044f79143f79342f89441f89540f9973ff9983ef99a3efa9b3dfa9c3cfa9e3bfb9f3afba139fba238fca338fca537fca636fca835fca934fdab33fdac33fdae32fdaf31fdb130fdb22ffdb42ffdb52efeb72dfeb82cfeba2cfebb2bfebd2afebe2afec029fdc229fdc328fdc527fdc627fdc827fdca26fdcb26fccd25fcce25fcd025fcd225fbd324fbd524fbd724fad824fada24f9dc24f9dd25f8df25f8e125f7e225f7e425f6e626f6e826f5e926f5eb27f4ed27f3ee27f3f027f2f227f1f426f1f525f0f724f0f921\"));\n","import {linearish} from \"./linear\";\n\nexport default function sequential(interpolator) {\n var x0 = 0,\n x1 = 1,\n clamp = false;\n\n function scale(x) {\n var t = (x - x0) / (x1 - x0);\n return interpolator(clamp ? Math.max(0, Math.min(1, t)) : t);\n }\n\n scale.domain = function(_) {\n return arguments.length ? (x0 = +_[0], x1 = +_[1], scale) : [x0, x1];\n };\n\n scale.clamp = function(_) {\n return arguments.length ? (clamp = !!_, scale) : clamp;\n };\n\n scale.interpolator = function(_) {\n return arguments.length ? (interpolator = _, scale) : interpolator;\n };\n\n scale.copy = function() {\n return sequential(interpolator).domain([x0, x1]).clamp(clamp);\n };\n\n return linearish(scale);\n}\n","export default function(specifier) {\n var n = specifier.length / 6 | 0, colors = new Array(n), i = 0;\n while (i < n) colors[i] = \"#\" + specifier.slice(i * 6, ++i * 6);\n return colors;\n}\n","import colors from \"../colors\";\n\nexport default colors(\"7fc97fbeaed4fdc086ffff99386cb0f0027fbf5b17666666\");\n","import colors from \"../colors\";\n\nexport default colors(\"1f77b4ff7f0e2ca02cd627289467bd8c564be377c27f7f7fbcbd2217becf\");\n","import colors from \"../colors\";\n\nexport default colors(\"1b9e77d95f027570b3e7298a66a61ee6ab02a6761d666666\");\n","import colors from \"../colors\";\n\nexport default colors(\"a6cee31f78b4b2df8a33a02cfb9a99e31a1cfdbf6fff7f00cab2d66a3d9affff99b15928\");\n","import colors from \"../colors\";\n\nexport default colors(\"fbb4aeb3cde3ccebc5decbe4fed9a6ffffcce5d8bdfddaecf2f2f2\");\n","import colors from \"../colors\";\n\nexport default colors(\"b3e2cdfdcdaccbd5e8f4cae4e6f5c9fff2aef1e2cccccccc\");\n","import colors from \"../colors\";\n\nexport default colors(\"e41a1c377eb84daf4a984ea3ff7f00ffff33a65628f781bf999999\");\n","import colors from \"../colors\";\n\nexport default colors(\"66c2a5fc8d628da0cbe78ac3a6d854ffd92fe5c494b3b3b3\");\n","import colors from \"../colors\";\n\nexport default colors(\"8dd3c7ffffb3bebadafb807280b1d3fdb462b3de69fccde5d9d9d9bc80bdccebc5ffed6f\");\n","import {interpolateRgbBasis} from \"d3-interpolate\";\n\nexport default function(scheme) {\n return interpolateRgbBasis(scheme[scheme.length - 1]);\n}\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"d8b365f5f5f55ab4ac\",\n \"a6611adfc27d80cdc1018571\",\n \"a6611adfc27df5f5f580cdc1018571\",\n \"8c510ad8b365f6e8c3c7eae55ab4ac01665e\",\n \"8c510ad8b365f6e8c3f5f5f5c7eae55ab4ac01665e\",\n \"8c510abf812ddfc27df6e8c3c7eae580cdc135978f01665e\",\n \"8c510abf812ddfc27df6e8c3f5f5f5c7eae580cdc135978f01665e\",\n \"5430058c510abf812ddfc27df6e8c3c7eae580cdc135978f01665e003c30\",\n \"5430058c510abf812ddfc27df6e8c3f5f5f5c7eae580cdc135978f01665e003c30\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"af8dc3f7f7f77fbf7b\",\n \"7b3294c2a5cfa6dba0008837\",\n \"7b3294c2a5cff7f7f7a6dba0008837\",\n \"762a83af8dc3e7d4e8d9f0d37fbf7b1b7837\",\n \"762a83af8dc3e7d4e8f7f7f7d9f0d37fbf7b1b7837\",\n \"762a839970abc2a5cfe7d4e8d9f0d3a6dba05aae611b7837\",\n \"762a839970abc2a5cfe7d4e8f7f7f7d9f0d3a6dba05aae611b7837\",\n \"40004b762a839970abc2a5cfe7d4e8d9f0d3a6dba05aae611b783700441b\",\n \"40004b762a839970abc2a5cfe7d4e8f7f7f7d9f0d3a6dba05aae611b783700441b\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"e9a3c9f7f7f7a1d76a\",\n \"d01c8bf1b6dab8e1864dac26\",\n \"d01c8bf1b6daf7f7f7b8e1864dac26\",\n \"c51b7de9a3c9fde0efe6f5d0a1d76a4d9221\",\n \"c51b7de9a3c9fde0eff7f7f7e6f5d0a1d76a4d9221\",\n \"c51b7dde77aef1b6dafde0efe6f5d0b8e1867fbc414d9221\",\n \"c51b7dde77aef1b6dafde0eff7f7f7e6f5d0b8e1867fbc414d9221\",\n \"8e0152c51b7dde77aef1b6dafde0efe6f5d0b8e1867fbc414d9221276419\",\n \"8e0152c51b7dde77aef1b6dafde0eff7f7f7e6f5d0b8e1867fbc414d9221276419\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"998ec3f7f7f7f1a340\",\n \"5e3c99b2abd2fdb863e66101\",\n \"5e3c99b2abd2f7f7f7fdb863e66101\",\n \"542788998ec3d8daebfee0b6f1a340b35806\",\n \"542788998ec3d8daebf7f7f7fee0b6f1a340b35806\",\n \"5427888073acb2abd2d8daebfee0b6fdb863e08214b35806\",\n \"5427888073acb2abd2d8daebf7f7f7fee0b6fdb863e08214b35806\",\n \"2d004b5427888073acb2abd2d8daebfee0b6fdb863e08214b358067f3b08\",\n \"2d004b5427888073acb2abd2d8daebf7f7f7fee0b6fdb863e08214b358067f3b08\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"ef8a62f7f7f767a9cf\",\n \"ca0020f4a58292c5de0571b0\",\n \"ca0020f4a582f7f7f792c5de0571b0\",\n \"b2182bef8a62fddbc7d1e5f067a9cf2166ac\",\n \"b2182bef8a62fddbc7f7f7f7d1e5f067a9cf2166ac\",\n \"b2182bd6604df4a582fddbc7d1e5f092c5de4393c32166ac\",\n \"b2182bd6604df4a582fddbc7f7f7f7d1e5f092c5de4393c32166ac\",\n \"67001fb2182bd6604df4a582fddbc7d1e5f092c5de4393c32166ac053061\",\n \"67001fb2182bd6604df4a582fddbc7f7f7f7d1e5f092c5de4393c32166ac053061\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"ef8a62ffffff999999\",\n \"ca0020f4a582bababa404040\",\n \"ca0020f4a582ffffffbababa404040\",\n \"b2182bef8a62fddbc7e0e0e09999994d4d4d\",\n \"b2182bef8a62fddbc7ffffffe0e0e09999994d4d4d\",\n \"b2182bd6604df4a582fddbc7e0e0e0bababa8787874d4d4d\",\n \"b2182bd6604df4a582fddbc7ffffffe0e0e0bababa8787874d4d4d\",\n \"67001fb2182bd6604df4a582fddbc7e0e0e0bababa8787874d4d4d1a1a1a\",\n \"67001fb2182bd6604df4a582fddbc7ffffffe0e0e0bababa8787874d4d4d1a1a1a\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"fc8d59ffffbf91bfdb\",\n \"d7191cfdae61abd9e92c7bb6\",\n \"d7191cfdae61ffffbfabd9e92c7bb6\",\n \"d73027fc8d59fee090e0f3f891bfdb4575b4\",\n \"d73027fc8d59fee090ffffbfe0f3f891bfdb4575b4\",\n \"d73027f46d43fdae61fee090e0f3f8abd9e974add14575b4\",\n \"d73027f46d43fdae61fee090ffffbfe0f3f8abd9e974add14575b4\",\n \"a50026d73027f46d43fdae61fee090e0f3f8abd9e974add14575b4313695\",\n \"a50026d73027f46d43fdae61fee090ffffbfe0f3f8abd9e974add14575b4313695\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"fc8d59ffffbf91cf60\",\n \"d7191cfdae61a6d96a1a9641\",\n \"d7191cfdae61ffffbfa6d96a1a9641\",\n \"d73027fc8d59fee08bd9ef8b91cf601a9850\",\n \"d73027fc8d59fee08bffffbfd9ef8b91cf601a9850\",\n \"d73027f46d43fdae61fee08bd9ef8ba6d96a66bd631a9850\",\n \"d73027f46d43fdae61fee08bffffbfd9ef8ba6d96a66bd631a9850\",\n \"a50026d73027f46d43fdae61fee08bd9ef8ba6d96a66bd631a9850006837\",\n \"a50026d73027f46d43fdae61fee08bffffbfd9ef8ba6d96a66bd631a9850006837\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"fc8d59ffffbf99d594\",\n \"d7191cfdae61abdda42b83ba\",\n \"d7191cfdae61ffffbfabdda42b83ba\",\n \"d53e4ffc8d59fee08be6f59899d5943288bd\",\n \"d53e4ffc8d59fee08bffffbfe6f59899d5943288bd\",\n \"d53e4ff46d43fdae61fee08be6f598abdda466c2a53288bd\",\n \"d53e4ff46d43fdae61fee08bffffbfe6f598abdda466c2a53288bd\",\n \"9e0142d53e4ff46d43fdae61fee08be6f598abdda466c2a53288bd5e4fa2\",\n \"9e0142d53e4ff46d43fdae61fee08bffffbfe6f598abdda466c2a53288bd5e4fa2\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"e5f5f999d8c92ca25f\",\n \"edf8fbb2e2e266c2a4238b45\",\n \"edf8fbb2e2e266c2a42ca25f006d2c\",\n \"edf8fbccece699d8c966c2a42ca25f006d2c\",\n \"edf8fbccece699d8c966c2a441ae76238b45005824\",\n \"f7fcfde5f5f9ccece699d8c966c2a441ae76238b45005824\",\n \"f7fcfde5f5f9ccece699d8c966c2a441ae76238b45006d2c00441b\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"e0ecf49ebcda8856a7\",\n \"edf8fbb3cde38c96c688419d\",\n \"edf8fbb3cde38c96c68856a7810f7c\",\n \"edf8fbbfd3e69ebcda8c96c68856a7810f7c\",\n \"edf8fbbfd3e69ebcda8c96c68c6bb188419d6e016b\",\n \"f7fcfde0ecf4bfd3e69ebcda8c96c68c6bb188419d6e016b\",\n \"f7fcfde0ecf4bfd3e69ebcda8c96c68c6bb188419d810f7c4d004b\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"e0f3dba8ddb543a2ca\",\n \"f0f9e8bae4bc7bccc42b8cbe\",\n \"f0f9e8bae4bc7bccc443a2ca0868ac\",\n \"f0f9e8ccebc5a8ddb57bccc443a2ca0868ac\",\n \"f0f9e8ccebc5a8ddb57bccc44eb3d32b8cbe08589e\",\n \"f7fcf0e0f3dbccebc5a8ddb57bccc44eb3d32b8cbe08589e\",\n \"f7fcf0e0f3dbccebc5a8ddb57bccc44eb3d32b8cbe0868ac084081\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"fee8c8fdbb84e34a33\",\n \"fef0d9fdcc8afc8d59d7301f\",\n \"fef0d9fdcc8afc8d59e34a33b30000\",\n \"fef0d9fdd49efdbb84fc8d59e34a33b30000\",\n \"fef0d9fdd49efdbb84fc8d59ef6548d7301f990000\",\n \"fff7ecfee8c8fdd49efdbb84fc8d59ef6548d7301f990000\",\n \"fff7ecfee8c8fdd49efdbb84fc8d59ef6548d7301fb300007f0000\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"ece2f0a6bddb1c9099\",\n \"f6eff7bdc9e167a9cf02818a\",\n \"f6eff7bdc9e167a9cf1c9099016c59\",\n \"f6eff7d0d1e6a6bddb67a9cf1c9099016c59\",\n \"f6eff7d0d1e6a6bddb67a9cf3690c002818a016450\",\n \"fff7fbece2f0d0d1e6a6bddb67a9cf3690c002818a016450\",\n \"fff7fbece2f0d0d1e6a6bddb67a9cf3690c002818a016c59014636\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"ece7f2a6bddb2b8cbe\",\n \"f1eef6bdc9e174a9cf0570b0\",\n \"f1eef6bdc9e174a9cf2b8cbe045a8d\",\n \"f1eef6d0d1e6a6bddb74a9cf2b8cbe045a8d\",\n \"f1eef6d0d1e6a6bddb74a9cf3690c00570b0034e7b\",\n \"fff7fbece7f2d0d1e6a6bddb74a9cf3690c00570b0034e7b\",\n \"fff7fbece7f2d0d1e6a6bddb74a9cf3690c00570b0045a8d023858\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"e7e1efc994c7dd1c77\",\n \"f1eef6d7b5d8df65b0ce1256\",\n \"f1eef6d7b5d8df65b0dd1c77980043\",\n \"f1eef6d4b9dac994c7df65b0dd1c77980043\",\n \"f1eef6d4b9dac994c7df65b0e7298ace125691003f\",\n \"f7f4f9e7e1efd4b9dac994c7df65b0e7298ace125691003f\",\n \"f7f4f9e7e1efd4b9dac994c7df65b0e7298ace125698004367001f\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"fde0ddfa9fb5c51b8a\",\n \"feebe2fbb4b9f768a1ae017e\",\n \"feebe2fbb4b9f768a1c51b8a7a0177\",\n \"feebe2fcc5c0fa9fb5f768a1c51b8a7a0177\",\n \"feebe2fcc5c0fa9fb5f768a1dd3497ae017e7a0177\",\n \"fff7f3fde0ddfcc5c0fa9fb5f768a1dd3497ae017e7a0177\",\n \"fff7f3fde0ddfcc5c0fa9fb5f768a1dd3497ae017e7a017749006a\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"edf8b17fcdbb2c7fb8\",\n \"ffffcca1dab441b6c4225ea8\",\n \"ffffcca1dab441b6c42c7fb8253494\",\n \"ffffccc7e9b47fcdbb41b6c42c7fb8253494\",\n \"ffffccc7e9b47fcdbb41b6c41d91c0225ea80c2c84\",\n \"ffffd9edf8b1c7e9b47fcdbb41b6c41d91c0225ea80c2c84\",\n \"ffffd9edf8b1c7e9b47fcdbb41b6c41d91c0225ea8253494081d58\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"f7fcb9addd8e31a354\",\n \"ffffccc2e69978c679238443\",\n \"ffffccc2e69978c67931a354006837\",\n \"ffffccd9f0a3addd8e78c67931a354006837\",\n \"ffffccd9f0a3addd8e78c67941ab5d238443005a32\",\n \"ffffe5f7fcb9d9f0a3addd8e78c67941ab5d238443005a32\",\n \"ffffe5f7fcb9d9f0a3addd8e78c67941ab5d238443006837004529\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"fff7bcfec44fd95f0e\",\n \"ffffd4fed98efe9929cc4c02\",\n \"ffffd4fed98efe9929d95f0e993404\",\n \"ffffd4fee391fec44ffe9929d95f0e993404\",\n \"ffffd4fee391fec44ffe9929ec7014cc4c028c2d04\",\n \"ffffe5fff7bcfee391fec44ffe9929ec7014cc4c028c2d04\",\n \"ffffe5fff7bcfee391fec44ffe9929ec7014cc4c02993404662506\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"ffeda0feb24cf03b20\",\n \"ffffb2fecc5cfd8d3ce31a1c\",\n \"ffffb2fecc5cfd8d3cf03b20bd0026\",\n \"ffffb2fed976feb24cfd8d3cf03b20bd0026\",\n \"ffffb2fed976feb24cfd8d3cfc4e2ae31a1cb10026\",\n \"ffffccffeda0fed976feb24cfd8d3cfc4e2ae31a1cb10026\",\n \"ffffccffeda0fed976feb24cfd8d3cfc4e2ae31a1cbd0026800026\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"deebf79ecae13182bd\",\n \"eff3ffbdd7e76baed62171b5\",\n \"eff3ffbdd7e76baed63182bd08519c\",\n \"eff3ffc6dbef9ecae16baed63182bd08519c\",\n \"eff3ffc6dbef9ecae16baed64292c62171b5084594\",\n \"f7fbffdeebf7c6dbef9ecae16baed64292c62171b5084594\",\n \"f7fbffdeebf7c6dbef9ecae16baed64292c62171b508519c08306b\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"e5f5e0a1d99b31a354\",\n \"edf8e9bae4b374c476238b45\",\n \"edf8e9bae4b374c47631a354006d2c\",\n \"edf8e9c7e9c0a1d99b74c47631a354006d2c\",\n \"edf8e9c7e9c0a1d99b74c47641ab5d238b45005a32\",\n \"f7fcf5e5f5e0c7e9c0a1d99b74c47641ab5d238b45005a32\",\n \"f7fcf5e5f5e0c7e9c0a1d99b74c47641ab5d238b45006d2c00441b\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"f0f0f0bdbdbd636363\",\n \"f7f7f7cccccc969696525252\",\n \"f7f7f7cccccc969696636363252525\",\n \"f7f7f7d9d9d9bdbdbd969696636363252525\",\n \"f7f7f7d9d9d9bdbdbd969696737373525252252525\",\n \"fffffff0f0f0d9d9d9bdbdbd969696737373525252252525\",\n \"fffffff0f0f0d9d9d9bdbdbd969696737373525252252525000000\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"efedf5bcbddc756bb1\",\n \"f2f0f7cbc9e29e9ac86a51a3\",\n \"f2f0f7cbc9e29e9ac8756bb154278f\",\n \"f2f0f7dadaebbcbddc9e9ac8756bb154278f\",\n \"f2f0f7dadaebbcbddc9e9ac8807dba6a51a34a1486\",\n \"fcfbfdefedf5dadaebbcbddc9e9ac8807dba6a51a34a1486\",\n \"fcfbfdefedf5dadaebbcbddc9e9ac8807dba6a51a354278f3f007d\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"fee0d2fc9272de2d26\",\n \"fee5d9fcae91fb6a4acb181d\",\n \"fee5d9fcae91fb6a4ade2d26a50f15\",\n \"fee5d9fcbba1fc9272fb6a4ade2d26a50f15\",\n \"fee5d9fcbba1fc9272fb6a4aef3b2ccb181d99000d\",\n \"fff5f0fee0d2fcbba1fc9272fb6a4aef3b2ccb181d99000d\",\n \"fff5f0fee0d2fcbba1fc9272fb6a4aef3b2ccb181da50f1567000d\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"fee6cefdae6be6550d\",\n \"feeddefdbe85fd8d3cd94701\",\n \"feeddefdbe85fd8d3ce6550da63603\",\n \"feeddefdd0a2fdae6bfd8d3ce6550da63603\",\n \"feeddefdd0a2fdae6bfd8d3cf16913d948018c2d04\",\n \"fff5ebfee6cefdd0a2fdae6bfd8d3cf16913d948018c2d04\",\n \"fff5ebfee6cefdd0a2fdae6bfd8d3cf16913d94801a636037f2704\"\n).map(colors);\n\nexport default ramp(scheme);\n","import {cubehelix} from \"d3-color\";\nimport {interpolateCubehelixLong} from \"d3-interpolate\";\n\nexport default interpolateCubehelixLong(cubehelix(300, 0.5, 0.0), cubehelix(-240, 0.5, 1.0));\n","import {cubehelix} from \"d3-color\";\nimport {interpolateCubehelixLong} from \"d3-interpolate\";\n\nexport var warm = interpolateCubehelixLong(cubehelix(-100, 0.75, 0.35), cubehelix(80, 1.50, 0.8));\n\nexport var cool = interpolateCubehelixLong(cubehelix(260, 0.75, 0.35), cubehelix(80, 1.50, 0.8));\n\nvar c = cubehelix();\n\nexport default function(t) {\n if (t < 0 || t > 1) t -= Math.floor(t);\n var ts = Math.abs(t - 0.5);\n c.h = 360 * t - 100;\n c.s = 1.5 - 1.5 * ts;\n c.l = 0.8 - 0.9 * ts;\n return c + \"\";\n}\n","import {rgb} from \"d3-color\";\n\nvar c = rgb(),\n pi_1_3 = Math.PI / 3,\n pi_2_3 = Math.PI * 2 / 3;\n\nexport default function(t) {\n var x;\n t = (0.5 - t) * Math.PI;\n c.r = 255 * (x = Math.sin(t)) * x;\n c.g = 255 * (x = Math.sin(t + pi_1_3)) * x;\n c.b = 255 * (x = Math.sin(t + pi_2_3)) * x;\n return c + \"\";\n}\n","import colors from \"../colors\";\n\nfunction ramp(range) {\n var n = range.length;\n return function(t) {\n return range[Math.max(0, Math.min(n - 1, Math.floor(t * n)))];\n };\n}\n\nexport default ramp(colors(\"44015444025645045745055946075a46085c460a5d460b5e470d60470e6147106347116447136548146748166848176948186a481a6c481b6d481c6e481d6f481f70482071482173482374482475482576482677482878482979472a7a472c7a472d7b472e7c472f7d46307e46327e46337f463480453581453781453882443983443a83443b84433d84433e85423f854240864241864142874144874045884046883f47883f48893e49893e4a893e4c8a3d4d8a3d4e8a3c4f8a3c508b3b518b3b528b3a538b3a548c39558c39568c38588c38598c375a8c375b8d365c8d365d8d355e8d355f8d34608d34618d33628d33638d32648e32658e31668e31678e31688e30698e306a8e2f6b8e2f6c8e2e6d8e2e6e8e2e6f8e2d708e2d718e2c718e2c728e2c738e2b748e2b758e2a768e2a778e2a788e29798e297a8e297b8e287c8e287d8e277e8e277f8e27808e26818e26828e26828e25838e25848e25858e24868e24878e23888e23898e238a8d228b8d228c8d228d8d218e8d218f8d21908d21918c20928c20928c20938c1f948c1f958b1f968b1f978b1f988b1f998a1f9a8a1e9b8a1e9c891e9d891f9e891f9f881fa0881fa1881fa1871fa28720a38620a48621a58521a68522a78522a88423a98324aa8325ab8225ac8226ad8127ad8128ae8029af7f2ab07f2cb17e2db27d2eb37c2fb47c31b57b32b67a34b67935b77937b87838b9773aba763bbb753dbc743fbc7340bd7242be7144bf7046c06f48c16e4ac16d4cc26c4ec36b50c46a52c56954c56856c66758c7655ac8645cc8635ec96260ca6063cb5f65cb5e67cc5c69cd5b6ccd5a6ece5870cf5773d05675d05477d1537ad1517cd2507fd34e81d34d84d44b86d54989d5488bd6468ed64590d74393d74195d84098d83e9bd93c9dd93ba0da39a2da37a5db36a8db34aadc32addc30b0dd2fb2dd2db5de2bb8de29bade28bddf26c0df25c2df23c5e021c8e020cae11fcde11dd0e11cd2e21bd5e21ad8e219dae319dde318dfe318e2e418e5e419e7e419eae51aece51befe51cf1e51df4e61ef6e620f8e621fbe723fde725\"));\n\nexport var magma = ramp(colors(\"00000401000501010601010802010902020b02020d03030f03031204041405041606051806051a07061c08071e0907200a08220b09240c09260d0a290e0b2b100b2d110c2f120d31130d34140e36150e38160f3b180f3d19103f1a10421c10441d11471e114920114b21114e22115024125325125527125829115a2a115c2c115f2d11612f116331116533106734106936106b38106c390f6e3b0f703d0f713f0f72400f74420f75440f764510774710784910784a10794c117a4e117b4f127b51127c52137c54137d56147d57157e59157e5a167e5c167f5d177f5f187f601880621980641a80651a80671b80681c816a1c816b1d816d1d816e1e81701f81721f817320817521817621817822817922827b23827c23827e24828025828125818326818426818627818827818928818b29818c29818e2a81902a81912b81932b80942c80962c80982d80992d809b2e7f9c2e7f9e2f7fa02f7fa1307ea3307ea5317ea6317da8327daa337dab337cad347cae347bb0357bb2357bb3367ab5367ab73779b83779ba3878bc3978bd3977bf3a77c03a76c23b75c43c75c53c74c73d73c83e73ca3e72cc3f71cd4071cf4070d0416fd2426fd3436ed5446dd6456cd8456cd9466bdb476adc4869de4968df4a68e04c67e24d66e34e65e44f64e55064e75263e85362e95462ea5661eb5760ec5860ed5a5fee5b5eef5d5ef05f5ef1605df2625df2645cf3655cf4675cf4695cf56b5cf66c5cf66e5cf7705cf7725cf8745cf8765cf9785df9795df97b5dfa7d5efa7f5efa815ffb835ffb8560fb8761fc8961fc8a62fc8c63fc8e64fc9065fd9266fd9467fd9668fd9869fd9a6afd9b6bfe9d6cfe9f6dfea16efea36ffea571fea772fea973feaa74feac76feae77feb078feb27afeb47bfeb67cfeb77efeb97ffebb81febd82febf84fec185fec287fec488fec68afec88cfeca8dfecc8ffecd90fecf92fed194fed395fed597fed799fed89afdda9cfddc9efddea0fde0a1fde2a3fde3a5fde5a7fde7a9fde9aafdebacfcecaefceeb0fcf0b2fcf2b4fcf4b6fcf6b8fcf7b9fcf9bbfcfbbdfcfdbf\"));\n\nexport var inferno = ramp(colors(\"00000401000501010601010802010a02020c02020e03021004031204031405041706041907051b08051d09061f0a07220b07240c08260d08290e092b10092d110a30120a32140b34150b37160b39180c3c190c3e1b0c411c0c431e0c451f0c48210c4a230c4c240c4f260c51280b53290b552b0b572d0b592f0a5b310a5c320a5e340a5f3609613809623909633b09643d09653e0966400a67420a68440a68450a69470b6a490b6a4a0c6b4c0c6b4d0d6c4f0d6c510e6c520e6d540f6d550f6d57106e59106e5a116e5c126e5d126e5f136e61136e62146e64156e65156e67166e69166e6a176e6c186e6d186e6f196e71196e721a6e741a6e751b6e771c6d781c6d7a1d6d7c1d6d7d1e6d7f1e6c801f6c82206c84206b85216b87216b88226a8a226a8c23698d23698f24699025689225689326679526679727669827669a28659b29649d29649f2a63a02a63a22b62a32c61a52c60a62d60a82e5fa92e5eab2f5ead305dae305cb0315bb1325ab3325ab43359b63458b73557b93556ba3655bc3754bd3853bf3952c03a51c13a50c33b4fc43c4ec63d4dc73e4cc83f4bca404acb4149cc4248ce4347cf4446d04545d24644d34743d44842d54a41d74b3fd84c3ed94d3dda4e3cdb503bdd513ade5238df5337e05536e15635e25734e35933e45a31e55c30e65d2fe75e2ee8602de9612bea632aeb6429eb6628ec6726ed6925ee6a24ef6c23ef6e21f06f20f1711ff1731df2741cf3761bf37819f47918f57b17f57d15f67e14f68013f78212f78410f8850ff8870ef8890cf98b0bf98c0af98e09fa9008fa9207fa9407fb9606fb9706fb9906fb9b06fb9d07fc9f07fca108fca309fca50afca60cfca80dfcaa0ffcac11fcae12fcb014fcb216fcb418fbb61afbb81dfbba1ffbbc21fbbe23fac026fac228fac42afac62df9c72ff9c932f9cb35f8cd37f8cf3af7d13df7d340f6d543f6d746f5d949f5db4cf4dd4ff4df53f4e156f3e35af3e55df2e661f2e865f2ea69f1ec6df1ed71f1ef75f1f179f2f27df2f482f3f586f3f68af4f88ef5f992f6fa96f8fb9af9fc9dfafda1fcffa4\"));\n\nexport var plasma = ramp(colors(\"0d088710078813078916078a19068c1b068d1d068e20068f2206902406912605912805922a05932c05942e05952f059631059733059735049837049938049a3a049a3c049b3e049c3f049c41049d43039e44039e46039f48039f4903a04b03a14c02a14e02a25002a25102a35302a35502a45601a45801a45901a55b01a55c01a65e01a66001a66100a76300a76400a76600a76700a86900a86a00a86c00a86e00a86f00a87100a87201a87401a87501a87701a87801a87a02a87b02a87d03a87e03a88004a88104a78305a78405a78606a68707a68808a68a09a58b0aa58d0ba58e0ca48f0da4910ea3920fa39410a29511a19613a19814a099159f9a169f9c179e9d189d9e199da01a9ca11b9ba21d9aa31e9aa51f99a62098a72197a82296aa2395ab2494ac2694ad2793ae2892b02991b12a90b22b8fb32c8eb42e8db52f8cb6308bb7318ab83289ba3388bb3488bc3587bd3786be3885bf3984c03a83c13b82c23c81c33d80c43e7fc5407ec6417dc7427cc8437bc9447aca457acb4679cc4778cc4977cd4a76ce4b75cf4c74d04d73d14e72d24f71d35171d45270d5536fd5546ed6556dd7566cd8576bd9586ada5a6ada5b69db5c68dc5d67dd5e66de5f65de6164df6263e06363e16462e26561e26660e3685fe4695ee56a5de56b5de66c5ce76e5be76f5ae87059e97158e97257ea7457eb7556eb7655ec7754ed7953ed7a52ee7b51ef7c51ef7e50f07f4ff0804ef1814df1834cf2844bf3854bf3874af48849f48948f58b47f58c46f68d45f68f44f79044f79143f79342f89441f89540f9973ff9983ef99a3efa9b3dfa9c3cfa9e3bfb9f3afba139fba238fca338fca537fca636fca835fca934fdab33fdac33fdae32fdaf31fdb130fdb22ffdb42ffdb52efeb72dfeb82cfeba2cfebb2bfebd2afebe2afec029fdc229fdc328fdc527fdc627fdc827fdca26fdcb26fccd25fcce25fcd025fcd225fbd324fbd524fbd724fad824fada24f9dc24f9dd25f8df25f8e125f7e225f7e425f6e626f6e826f5e926f5eb27f4ed27f3ee27f3f027f2f227f1f426f1f525f0f724f0f921\"));\n","export const UNIT_GLOBAL_NAMESPACE = 'app.units';\nexport const UNIT_LOCAL_NAMESPACE = 'local.units';\nexport const LAYER_LOCAL_NAMESPACE = 'local.layers';\nexport const LAYER_GLOBAL_NAMESPACE = 'app.layers';\nexport const GROUP_GLOBAL_NAMESPACE = 'app.group';\nexport const GROUP_LOCAL_NAMESPACE = 'local.group';\nexport const CANVAS_LOCAL_NAMESPACE = 'local.canvas';\nexport const CANVAS_GLOBAL_NAMESPACE = 'app.canvas';\n\n","const ReservedFields = {\n ROW_ID: '__id__'\n};\n\nexport default ReservedFields;\n","const CommonProps = {\n ACTION_INF: 'actionInf',\n ON_LAYER_DRAW: 'onLayerDraw',\n MATRIX_CREATED: 'matrixCreated'\n};\n\nexport default CommonProps;\n","export const COORD_TYPES = {\n POLAR: 'polar',\n CARTESIAN: 'cartesian'\n};\n","export var slice = Array.prototype.slice;\n","export default function(x) {\n return x;\n}\n","import {slice} from \"./array\";\nimport identity from \"./identity\";\n\nvar top = 1,\n right = 2,\n bottom = 3,\n left = 4,\n epsilon = 1e-6;\n\nfunction translateX(x) {\n return \"translate(\" + (x + 0.5) + \",0)\";\n}\n\nfunction translateY(y) {\n return \"translate(0,\" + (y + 0.5) + \")\";\n}\n\nfunction number(scale) {\n return function(d) {\n return +scale(d);\n };\n}\n\nfunction center(scale) {\n var offset = Math.max(0, scale.bandwidth() - 1) / 2; // Adjust for 0.5px offset.\n if (scale.round()) offset = Math.round(offset);\n return function(d) {\n return +scale(d) + offset;\n };\n}\n\nfunction entering() {\n return !this.__axis;\n}\n\nfunction axis(orient, scale) {\n var tickArguments = [],\n tickValues = null,\n tickFormat = null,\n tickTransform = null,\n tickSizeInner = 6,\n tickSizeOuter = 6,\n tickPadding = 3,\n k = orient === top || orient === left ? -1 : 1,\n x = orient === left || orient === right ? \"x\" : \"y\",\n transform = orient === top || orient === bottom ? translateX : translateY;\n\n function axis(context) {\n var values = tickValues == null ? (scale.ticks ? scale.ticks.apply(scale, tickArguments) : scale.domain()) : tickValues,\n format = tickFormat == null ? (scale.tickFormat ? scale.tickFormat.apply(scale, tickArguments) : identity) : tickFormat,\n spacing = Math.max(tickSizeInner, 0) + tickPadding,\n range = scale.range(),\n range0 = +range[0] + 0.5,\n range1 = +range[range.length - 1] + 0.5,\n position = (scale.bandwidth ? center : number)(scale.copy()),\n selection = context.selection ? context.selection() : context,\n path = selection.selectAll(\".domain\").data([null]),\n tick = selection.selectAll(\".tick\").data(values, scale).order(),\n tickExit = tick.exit(),\n tickEnter = tick.enter().append(\"g\").attr(\"class\", \"tick\"),\n line = tick.select(\"line\"),\n text = tick.select(\"text\");\n\n path = path.merge(path.enter().insert(\"path\", \".tick\")\n .attr(\"class\", \"domain\")\n .attr(\"stroke\", \"#000\"));\n\n tick = tick.merge(tickEnter);\n\n line = line.merge(tickEnter.append(\"line\")\n .attr(\"stroke\", \"#000\")\n .attr(x + \"2\", k * tickSizeInner));\n\n text = text.merge(tickEnter.append(\"text\")\n .attr(\"fill\", \"#000\")\n .attr(x, k * spacing)\n .attr(\"dy\", orient === top ? \"0em\" : orient === bottom ? \"0.71em\" : \"0.32em\"))\n .style('transform', tickTransform);\n\n if (context !== selection) {\n path = path.transition(context);\n tick = tick.transition(context);\n line = line.transition(context);\n text = text.transition(context);\n\n tickExit = tickExit.transition(context)\n .attr(\"opacity\", epsilon)\n .attr(\"transform\", function(d) { return isFinite(d = position(d)) ? transform(d) : this.getAttribute(\"transform\"); });\n\n tickEnter\n .attr(\"opacity\", epsilon)\n .attr(\"transform\", function(d) { var p = this.parentNode.__axis; return transform(p && isFinite(p = p(d)) ? p : position(d)); });\n }\n\n tickExit.remove();\n\n path\n .attr(\"d\", orient === left || orient == right\n ? \"M\" + k * tickSizeOuter + \",\" + range0 + \"H0.5V\" + range1 + \"H\" + k * tickSizeOuter\n : \"M\" + range0 + \",\" + k * tickSizeOuter + \"V0.5H\" + range1 + \"V\" + k * tickSizeOuter);\n\n tick\n .attr(\"opacity\", 1)\n .attr(\"transform\", function(d) { return transform(position(d)); });\n\n line\n .attr(x + \"2\", k * tickSizeInner);\n\n text\n .attr(x, k * spacing)\n .text(format);\n\n selection.filter(entering)\n .attr(\"fill\", \"none\")\n .attr(\"font-size\", 10)\n .attr(\"font-family\", \"sans-serif\")\n .attr(\"text-anchor\", orient === right ? \"start\" : orient === left ? \"end\" : \"middle\");\n\n selection\n .each(function() { this.__axis = position; });\n }\n\n axis.scale = function(_) {\n return arguments.length ? (scale = _, axis) : scale;\n };\n\n axis.tickTransform = function(_) {\n return arguments.length ? (tickTransform = _, axis) : tickTransform;\n };\n\n axis.ticks = function() {\n return tickArguments = slice.call(arguments), axis;\n };\n\n axis.tickArguments = function(_) {\n return arguments.length ? (tickArguments = _ == null ? [] : slice.call(_), axis) : tickArguments.slice();\n };\n\n axis.tickValues = function(_) {\n return arguments.length ? (tickValues = _ == null ? null : slice.call(_), axis) : tickValues && tickValues.slice();\n };\n\n axis.tickFormat = function(_) {\n return arguments.length ? (tickFormat = _, axis) : tickFormat;\n };\n\n axis.tickSize = function(_) {\n return arguments.length ? (tickSizeInner = tickSizeOuter = +_, axis) : tickSizeInner;\n };\n\n axis.tickSizeInner = function(_) {\n return arguments.length ? (tickSizeInner = +_, axis) : tickSizeInner;\n };\n\n axis.tickSizeOuter = function(_) {\n return arguments.length ? (tickSizeOuter = +_, axis) : tickSizeOuter;\n };\n\n axis.tickPadding = function(_) {\n return arguments.length ? (tickPadding = +_, axis) : tickPadding;\n };\n\n return axis;\n}\n\nexport function axisTop(scale) {\n return axis(top, scale);\n}\n\nexport function axisRight(scale) {\n return axis(right, scale);\n}\n\nexport function axisBottom(scale) {\n return axis(bottom, scale);\n}\n\nexport function axisLeft(scale) {\n return axis(left, scale);\n}\n","var pi = Math.PI,\n tau = 2 * pi,\n epsilon = 1e-6,\n tauEpsilon = tau - epsilon;\n\nfunction Path() {\n this._x0 = this._y0 = // start of current subpath\n this._x1 = this._y1 = null; // end of current subpath\n this._ = \"\";\n}\n\nfunction path() {\n return new Path;\n}\n\nPath.prototype = path.prototype = {\n constructor: Path,\n moveTo: function(x, y) {\n this._ += \"M\" + (this._x0 = this._x1 = +x) + \",\" + (this._y0 = this._y1 = +y);\n },\n closePath: function() {\n if (this._x1 !== null) {\n this._x1 = this._x0, this._y1 = this._y0;\n this._ += \"Z\";\n }\n },\n lineTo: function(x, y) {\n this._ += \"L\" + (this._x1 = +x) + \",\" + (this._y1 = +y);\n },\n quadraticCurveTo: function(x1, y1, x, y) {\n this._ += \"Q\" + (+x1) + \",\" + (+y1) + \",\" + (this._x1 = +x) + \",\" + (this._y1 = +y);\n },\n bezierCurveTo: function(x1, y1, x2, y2, x, y) {\n this._ += \"C\" + (+x1) + \",\" + (+y1) + \",\" + (+x2) + \",\" + (+y2) + \",\" + (this._x1 = +x) + \",\" + (this._y1 = +y);\n },\n arcTo: function(x1, y1, x2, y2, r) {\n x1 = +x1, y1 = +y1, x2 = +x2, y2 = +y2, r = +r;\n var x0 = this._x1,\n y0 = this._y1,\n x21 = x2 - x1,\n y21 = y2 - y1,\n x01 = x0 - x1,\n y01 = y0 - y1,\n l01_2 = x01 * x01 + y01 * y01;\n\n // Is the radius negative? Error.\n if (r < 0) throw new Error(\"negative radius: \" + r);\n\n // Is this path empty? Move to (x1,y1).\n if (this._x1 === null) {\n this._ += \"M\" + (this._x1 = x1) + \",\" + (this._y1 = y1);\n }\n\n // Or, is (x1,y1) coincident with (x0,y0)? Do nothing.\n else if (!(l01_2 > epsilon));\n\n // Or, are (x0,y0), (x1,y1) and (x2,y2) collinear?\n // Equivalently, is (x1,y1) coincident with (x2,y2)?\n // Or, is the radius zero? Line to (x1,y1).\n else if (!(Math.abs(y01 * x21 - y21 * x01) > epsilon) || !r) {\n this._ += \"L\" + (this._x1 = x1) + \",\" + (this._y1 = y1);\n }\n\n // Otherwise, draw an arc!\n else {\n var x20 = x2 - x0,\n y20 = y2 - y0,\n l21_2 = x21 * x21 + y21 * y21,\n l20_2 = x20 * x20 + y20 * y20,\n l21 = Math.sqrt(l21_2),\n l01 = Math.sqrt(l01_2),\n l = r * Math.tan((pi - Math.acos((l21_2 + l01_2 - l20_2) / (2 * l21 * l01))) / 2),\n t01 = l / l01,\n t21 = l / l21;\n\n // If the start tangent is not coincident with (x0,y0), line to.\n if (Math.abs(t01 - 1) > epsilon) {\n this._ += \"L\" + (x1 + t01 * x01) + \",\" + (y1 + t01 * y01);\n }\n\n this._ += \"A\" + r + \",\" + r + \",0,0,\" + (+(y01 * x20 > x01 * y20)) + \",\" + (this._x1 = x1 + t21 * x21) + \",\" + (this._y1 = y1 + t21 * y21);\n }\n },\n arc: function(x, y, r, a0, a1, ccw) {\n x = +x, y = +y, r = +r;\n var dx = r * Math.cos(a0),\n dy = r * Math.sin(a0),\n x0 = x + dx,\n y0 = y + dy,\n cw = 1 ^ ccw,\n da = ccw ? a0 - a1 : a1 - a0;\n\n // Is the radius negative? Error.\n if (r < 0) throw new Error(\"negative radius: \" + r);\n\n // Is this path empty? Move to (x0,y0).\n if (this._x1 === null) {\n this._ += \"M\" + x0 + \",\" + y0;\n }\n\n // Or, is (x0,y0) not coincident with the previous point? Line to (x0,y0).\n else if (Math.abs(this._x1 - x0) > epsilon || Math.abs(this._y1 - y0) > epsilon) {\n this._ += \"L\" + x0 + \",\" + y0;\n }\n\n // Is this arc empty? We’re done.\n if (!r) return;\n\n // Does the angle go the wrong way? Flip the direction.\n if (da < 0) da = da % tau + tau;\n\n // Is this a complete circle? Draw two arcs to complete the circle.\n if (da > tauEpsilon) {\n this._ += \"A\" + r + \",\" + r + \",0,1,\" + cw + \",\" + (x - dx) + \",\" + (y - dy) + \"A\" + r + \",\" + r + \",0,1,\" + cw + \",\" + (this._x1 = x0) + \",\" + (this._y1 = y0);\n }\n\n // Is this arc non-empty? Draw an arc!\n else if (da > epsilon) {\n this._ += \"A\" + r + \",\" + r + \",0,\" + (+(da >= pi)) + \",\" + cw + \",\" + (this._x1 = x + r * Math.cos(a1)) + \",\" + (this._y1 = y + r * Math.sin(a1));\n }\n },\n rect: function(x, y, w, h) {\n this._ += \"M\" + (this._x0 = this._x1 = +x) + \",\" + (this._y0 = this._y1 = +y) + \"h\" + (+w) + \"v\" + (+h) + \"h\" + (-w) + \"Z\";\n },\n toString: function() {\n return this._;\n }\n};\n\nexport default path;\n","export default function(x) {\n return function constant() {\n return x;\n };\n}\n","export var abs = Math.abs;\nexport var atan2 = Math.atan2;\nexport var cos = Math.cos;\nexport var max = Math.max;\nexport var min = Math.min;\nexport var sin = Math.sin;\nexport var sqrt = Math.sqrt;\n\nexport var epsilon = 1e-12;\nexport var pi = Math.PI;\nexport var halfPi = pi / 2;\nexport var tau = 2 * pi;\n\nexport function acos(x) {\n return x > 1 ? 0 : x < -1 ? pi : Math.acos(x);\n}\n\nexport function asin(x) {\n return x >= 1 ? halfPi : x <= -1 ? -halfPi : Math.asin(x);\n}\n","import {path} from \"d3-path\";\nimport constant from \"./constant\";\nimport {abs, acos, asin, atan2, cos, epsilon, halfPi, max, min, pi, sin, sqrt, tau} from \"./math\";\n\nfunction arcInnerRadius(d) {\n return d.innerRadius;\n}\n\nfunction arcOuterRadius(d) {\n return d.outerRadius;\n}\n\nfunction arcStartAngle(d) {\n return d.startAngle;\n}\n\nfunction arcEndAngle(d) {\n return d.endAngle;\n}\n\nfunction arcPadAngle(d) {\n return d && d.padAngle; // Note: optional!\n}\n\nfunction intersect(x0, y0, x1, y1, x2, y2, x3, y3) {\n var x10 = x1 - x0, y10 = y1 - y0,\n x32 = x3 - x2, y32 = y3 - y2,\n t = y32 * x10 - x32 * y10;\n if (t * t < epsilon) return;\n t = (x32 * (y0 - y2) - y32 * (x0 - x2)) / t;\n return [x0 + t * x10, y0 + t * y10];\n}\n\n// Compute perpendicular offset line of length rc.\n// http://mathworld.wolfram.com/Circle-LineIntersection.html\nfunction cornerTangents(x0, y0, x1, y1, r1, rc, cw) {\n var x01 = x0 - x1,\n y01 = y0 - y1,\n lo = (cw ? rc : -rc) / sqrt(x01 * x01 + y01 * y01),\n ox = lo * y01,\n oy = -lo * x01,\n x11 = x0 + ox,\n y11 = y0 + oy,\n x10 = x1 + ox,\n y10 = y1 + oy,\n x00 = (x11 + x10) / 2,\n y00 = (y11 + y10) / 2,\n dx = x10 - x11,\n dy = y10 - y11,\n d2 = dx * dx + dy * dy,\n r = r1 - rc,\n D = x11 * y10 - x10 * y11,\n d = (dy < 0 ? -1 : 1) * sqrt(max(0, r * r * d2 - D * D)),\n cx0 = (D * dy - dx * d) / d2,\n cy0 = (-D * dx - dy * d) / d2,\n cx1 = (D * dy + dx * d) / d2,\n cy1 = (-D * dx + dy * d) / d2,\n dx0 = cx0 - x00,\n dy0 = cy0 - y00,\n dx1 = cx1 - x00,\n dy1 = cy1 - y00;\n\n // Pick the closer of the two intersection points.\n // TODO Is there a faster way to determine which intersection to use?\n if (dx0 * dx0 + dy0 * dy0 > dx1 * dx1 + dy1 * dy1) cx0 = cx1, cy0 = cy1;\n\n return {\n cx: cx0,\n cy: cy0,\n x01: -ox,\n y01: -oy,\n x11: cx0 * (r1 / r - 1),\n y11: cy0 * (r1 / r - 1)\n };\n}\n\nexport default function() {\n var innerRadius = arcInnerRadius,\n outerRadius = arcOuterRadius,\n cornerRadius = constant(0),\n padRadius = null,\n startAngle = arcStartAngle,\n endAngle = arcEndAngle,\n padAngle = arcPadAngle,\n context = null;\n\n function arc() {\n var buffer,\n r,\n r0 = +innerRadius.apply(this, arguments),\n r1 = +outerRadius.apply(this, arguments),\n a0 = startAngle.apply(this, arguments) - halfPi,\n a1 = endAngle.apply(this, arguments) - halfPi,\n da = abs(a1 - a0),\n cw = a1 > a0;\n\n if (!context) context = buffer = path();\n\n // Ensure that the outer radius is always larger than the inner radius.\n if (r1 < r0) r = r1, r1 = r0, r0 = r;\n\n // Is it a point?\n if (!(r1 > epsilon)) context.moveTo(0, 0);\n\n // Or is it a circle or annulus?\n else if (da > tau - epsilon) {\n context.moveTo(r1 * cos(a0), r1 * sin(a0));\n context.arc(0, 0, r1, a0, a1, !cw);\n if (r0 > epsilon) {\n context.moveTo(r0 * cos(a1), r0 * sin(a1));\n context.arc(0, 0, r0, a1, a0, cw);\n }\n }\n\n // Or is it a circular or annular sector?\n else {\n var a01 = a0,\n a11 = a1,\n a00 = a0,\n a10 = a1,\n da0 = da,\n da1 = da,\n ap = padAngle.apply(this, arguments) / 2,\n rp = (ap > epsilon) && (padRadius ? +padRadius.apply(this, arguments) : sqrt(r0 * r0 + r1 * r1)),\n rc = min(abs(r1 - r0) / 2, +cornerRadius.apply(this, arguments)),\n rc0 = rc,\n rc1 = rc,\n t0,\n t1;\n\n // Apply padding? Note that since r1 ≥ r0, da1 ≥ da0.\n if (rp > epsilon) {\n var p0 = asin(rp / r0 * sin(ap)),\n p1 = asin(rp / r1 * sin(ap));\n if ((da0 -= p0 * 2) > epsilon) p0 *= (cw ? 1 : -1), a00 += p0, a10 -= p0;\n else da0 = 0, a00 = a10 = (a0 + a1) / 2;\n if ((da1 -= p1 * 2) > epsilon) p1 *= (cw ? 1 : -1), a01 += p1, a11 -= p1;\n else da1 = 0, a01 = a11 = (a0 + a1) / 2;\n }\n\n var x01 = r1 * cos(a01),\n y01 = r1 * sin(a01),\n x10 = r0 * cos(a10),\n y10 = r0 * sin(a10);\n\n // Apply rounded corners?\n if (rc > epsilon) {\n var x11 = r1 * cos(a11),\n y11 = r1 * sin(a11),\n x00 = r0 * cos(a00),\n y00 = r0 * sin(a00),\n oc;\n\n // Restrict the corner radius according to the sector angle.\n if (da < pi && (oc = intersect(x01, y01, x00, y00, x11, y11, x10, y10))) {\n var ax = x01 - oc[0],\n ay = y01 - oc[1],\n bx = x11 - oc[0],\n by = y11 - oc[1],\n kc = 1 / sin(acos((ax * bx + ay * by) / (sqrt(ax * ax + ay * ay) * sqrt(bx * bx + by * by))) / 2),\n lc = sqrt(oc[0] * oc[0] + oc[1] * oc[1]);\n rc0 = min(rc, (r0 - lc) / (kc - 1));\n rc1 = min(rc, (r1 - lc) / (kc + 1));\n }\n }\n\n // Is the sector collapsed to a line?\n if (!(da1 > epsilon)) context.moveTo(x01, y01);\n\n // Does the sector’s outer ring have rounded corners?\n else if (rc1 > epsilon) {\n t0 = cornerTangents(x00, y00, x01, y01, r1, rc1, cw);\n t1 = cornerTangents(x11, y11, x10, y10, r1, rc1, cw);\n\n context.moveTo(t0.cx + t0.x01, t0.cy + t0.y01);\n\n // Have the corners merged?\n if (rc1 < rc) context.arc(t0.cx, t0.cy, rc1, atan2(t0.y01, t0.x01), atan2(t1.y01, t1.x01), !cw);\n\n // Otherwise, draw the two corners and the ring.\n else {\n context.arc(t0.cx, t0.cy, rc1, atan2(t0.y01, t0.x01), atan2(t0.y11, t0.x11), !cw);\n context.arc(0, 0, r1, atan2(t0.cy + t0.y11, t0.cx + t0.x11), atan2(t1.cy + t1.y11, t1.cx + t1.x11), !cw);\n context.arc(t1.cx, t1.cy, rc1, atan2(t1.y11, t1.x11), atan2(t1.y01, t1.x01), !cw);\n }\n }\n\n // Or is the outer ring just a circular arc?\n else context.moveTo(x01, y01), context.arc(0, 0, r1, a01, a11, !cw);\n\n // Is there no inner ring, and it’s a circular sector?\n // Or perhaps it’s an annular sector collapsed due to padding?\n if (!(r0 > epsilon) || !(da0 > epsilon)) context.lineTo(x10, y10);\n\n // Does the sector’s inner ring (or point) have rounded corners?\n else if (rc0 > epsilon) {\n t0 = cornerTangents(x10, y10, x11, y11, r0, -rc0, cw);\n t1 = cornerTangents(x01, y01, x00, y00, r0, -rc0, cw);\n\n context.lineTo(t0.cx + t0.x01, t0.cy + t0.y01);\n\n // Have the corners merged?\n if (rc0 < rc) context.arc(t0.cx, t0.cy, rc0, atan2(t0.y01, t0.x01), atan2(t1.y01, t1.x01), !cw);\n\n // Otherwise, draw the two corners and the ring.\n else {\n context.arc(t0.cx, t0.cy, rc0, atan2(t0.y01, t0.x01), atan2(t0.y11, t0.x11), !cw);\n context.arc(0, 0, r0, atan2(t0.cy + t0.y11, t0.cx + t0.x11), atan2(t1.cy + t1.y11, t1.cx + t1.x11), cw);\n context.arc(t1.cx, t1.cy, rc0, atan2(t1.y11, t1.x11), atan2(t1.y01, t1.x01), !cw);\n }\n }\n\n // Or is the inner ring just a circular arc?\n else context.arc(0, 0, r0, a10, a00, cw);\n }\n\n context.closePath();\n\n if (buffer) return context = null, buffer + \"\" || null;\n }\n\n arc.centroid = function() {\n var r = (+innerRadius.apply(this, arguments) + +outerRadius.apply(this, arguments)) / 2,\n a = (+startAngle.apply(this, arguments) + +endAngle.apply(this, arguments)) / 2 - pi / 2;\n return [cos(a) * r, sin(a) * r];\n };\n\n arc.innerRadius = function(_) {\n return arguments.length ? (innerRadius = typeof _ === \"function\" ? _ : constant(+_), arc) : innerRadius;\n };\n\n arc.outerRadius = function(_) {\n return arguments.length ? (outerRadius = typeof _ === \"function\" ? _ : constant(+_), arc) : outerRadius;\n };\n\n arc.cornerRadius = function(_) {\n return arguments.length ? (cornerRadius = typeof _ === \"function\" ? _ : constant(+_), arc) : cornerRadius;\n };\n\n arc.padRadius = function(_) {\n return arguments.length ? (padRadius = _ == null ? null : typeof _ === \"function\" ? _ : constant(+_), arc) : padRadius;\n };\n\n arc.startAngle = function(_) {\n return arguments.length ? (startAngle = typeof _ === \"function\" ? _ : constant(+_), arc) : startAngle;\n };\n\n arc.endAngle = function(_) {\n return arguments.length ? (endAngle = typeof _ === \"function\" ? _ : constant(+_), arc) : endAngle;\n };\n\n arc.padAngle = function(_) {\n return arguments.length ? (padAngle = typeof _ === \"function\" ? _ : constant(+_), arc) : padAngle;\n };\n\n arc.context = function(_) {\n return arguments.length ? ((context = _ == null ? null : _), arc) : context;\n };\n\n return arc;\n}\n","function Linear(context) {\n this._context = context;\n}\n\nLinear.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; // proceed\n default: this._context.lineTo(x, y); break;\n }\n }\n};\n\nexport default function(context) {\n return new Linear(context);\n}\n","export function x(p) {\n return p[0];\n}\n\nexport function y(p) {\n return p[1];\n}\n","import {path} from \"d3-path\";\nimport constant from \"./constant\";\nimport curveLinear from \"./curve/linear\";\nimport {x as pointX, y as pointY} from \"./point\";\n\nexport default function() {\n var x = pointX,\n y = pointY,\n defined = constant(true),\n context = null,\n curve = curveLinear,\n output = null;\n\n function line(data) {\n var i,\n n = data.length,\n d,\n defined0 = false,\n buffer;\n\n if (context == null) output = curve(buffer = path());\n\n for (i = 0; i <= n; ++i) {\n if (!(i < n && defined(d = data[i], i, data)) === defined0) {\n if (defined0 = !defined0) output.lineStart();\n else output.lineEnd();\n }\n if (defined0) output.point(+x(d, i, data), +y(d, i, data));\n }\n\n if (buffer) return output = null, buffer + \"\" || null;\n }\n\n line.x = function(_) {\n return arguments.length ? (x = typeof _ === \"function\" ? _ : constant(+_), line) : x;\n };\n\n line.y = function(_) {\n return arguments.length ? (y = typeof _ === \"function\" ? _ : constant(+_), line) : y;\n };\n\n line.defined = function(_) {\n return arguments.length ? (defined = typeof _ === \"function\" ? _ : constant(!!_), line) : defined;\n };\n\n line.curve = function(_) {\n return arguments.length ? (curve = _, context != null && (output = curve(context)), line) : curve;\n };\n\n line.context = function(_) {\n return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), line) : context;\n };\n\n return line;\n}\n","import {path} from \"d3-path\";\nimport constant from \"./constant\";\nimport curveLinear from \"./curve/linear\";\nimport line from \"./line\";\nimport {x as pointX, y as pointY} from \"./point\";\n\nexport default function() {\n var x0 = pointX,\n x1 = null,\n y0 = constant(0),\n y1 = pointY,\n defined = constant(true),\n context = null,\n curve = curveLinear,\n output = null;\n\n function area(data) {\n var i,\n j,\n k,\n n = data.length,\n d,\n defined0 = false,\n buffer,\n x0z = new Array(n),\n y0z = new Array(n);\n\n if (context == null) output = curve(buffer = path());\n\n for (i = 0; i <= n; ++i) {\n if (!(i < n && defined(d = data[i], i, data)) === defined0) {\n if (defined0 = !defined0) {\n j = i;\n output.areaStart();\n output.lineStart();\n } else {\n output.lineEnd();\n output.lineStart();\n for (k = i - 1; k >= j; --k) {\n output.point(x0z[k], y0z[k]);\n }\n output.lineEnd();\n output.areaEnd();\n }\n }\n if (defined0) {\n x0z[i] = +x0(d, i, data), y0z[i] = +y0(d, i, data);\n output.point(x1 ? +x1(d, i, data) : x0z[i], y1 ? +y1(d, i, data) : y0z[i]);\n }\n }\n\n if (buffer) return output = null, buffer + \"\" || null;\n }\n\n function arealine() {\n return line().defined(defined).curve(curve).context(context);\n }\n\n area.x = function(_) {\n return arguments.length ? (x0 = typeof _ === \"function\" ? _ : constant(+_), x1 = null, area) : x0;\n };\n\n area.x0 = function(_) {\n return arguments.length ? (x0 = typeof _ === \"function\" ? _ : constant(+_), area) : x0;\n };\n\n area.x1 = function(_) {\n return arguments.length ? (x1 = _ == null ? null : typeof _ === \"function\" ? _ : constant(+_), area) : x1;\n };\n\n area.y = function(_) {\n return arguments.length ? (y0 = typeof _ === \"function\" ? _ : constant(+_), y1 = null, area) : y0;\n };\n\n area.y0 = function(_) {\n return arguments.length ? (y0 = typeof _ === \"function\" ? _ : constant(+_), area) : y0;\n };\n\n area.y1 = function(_) {\n return arguments.length ? (y1 = _ == null ? null : typeof _ === \"function\" ? _ : constant(+_), area) : y1;\n };\n\n area.lineX0 =\n area.lineY0 = function() {\n return arealine().x(x0).y(y0);\n };\n\n area.lineY1 = function() {\n return arealine().x(x0).y(y1);\n };\n\n area.lineX1 = function() {\n return arealine().x(x1).y(y0);\n };\n\n area.defined = function(_) {\n return arguments.length ? (defined = typeof _ === \"function\" ? _ : constant(!!_), area) : defined;\n };\n\n area.curve = function(_) {\n return arguments.length ? (curve = _, context != null && (output = curve(context)), area) : curve;\n };\n\n area.context = function(_) {\n return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), area) : context;\n };\n\n return area;\n}\n","export default function(a, b) {\n return b < a ? -1 : b > a ? 1 : b >= a ? 0 : NaN;\n}\n","export default function(d) {\n return d;\n}\n","import curveLinear from \"./linear\";\n\nexport var curveRadialLinear = curveRadial(curveLinear);\n\nfunction Radial(curve) {\n this._curve = curve;\n}\n\nRadial.prototype = {\n areaStart: function() {\n this._curve.areaStart();\n },\n areaEnd: function() {\n this._curve.areaEnd();\n },\n lineStart: function() {\n this._curve.lineStart();\n },\n lineEnd: function() {\n this._curve.lineEnd();\n },\n point: function(a, r) {\n this._curve.point(r * Math.sin(a), r * -Math.cos(a));\n }\n};\n\nexport default function curveRadial(curve) {\n\n function radial(context) {\n return new Radial(curve(context));\n }\n\n radial._curve = curve;\n\n return radial;\n}\n","import curveRadial, {curveRadialLinear} from \"./curve/radial\";\nimport line from \"./line\";\n\nexport function lineRadial(l) {\n var c = l.curve;\n\n l.angle = l.x, delete l.x;\n l.radius = l.y, delete l.y;\n\n l.curve = function(_) {\n return arguments.length ? c(curveRadial(_)) : c()._curve;\n };\n\n return l;\n}\n\nexport default function() {\n return lineRadial(line().curve(curveRadialLinear));\n}\n","export var slice = Array.prototype.slice;\n","import {pi, tau} from \"../math\";\n\nexport default {\n draw: function(context, size) {\n var r = Math.sqrt(size / pi);\n context.moveTo(r, 0);\n context.arc(0, 0, r, 0, tau);\n }\n};\n","export default {\n draw: function(context, size) {\n var r = Math.sqrt(size / 5) / 2;\n context.moveTo(-3 * r, -r);\n context.lineTo(-r, -r);\n context.lineTo(-r, -3 * r);\n context.lineTo(r, -3 * r);\n context.lineTo(r, -r);\n context.lineTo(3 * r, -r);\n context.lineTo(3 * r, r);\n context.lineTo(r, r);\n context.lineTo(r, 3 * r);\n context.lineTo(-r, 3 * r);\n context.lineTo(-r, r);\n context.lineTo(-3 * r, r);\n context.closePath();\n }\n};\n","var tan30 = Math.sqrt(1 / 3),\n tan30_2 = tan30 * 2;\n\nexport default {\n draw: function(context, size) {\n var y = Math.sqrt(size / tan30_2),\n x = y * tan30;\n context.moveTo(0, -y);\n context.lineTo(x, 0);\n context.lineTo(0, y);\n context.lineTo(-x, 0);\n context.closePath();\n }\n};\n","import {pi, tau} from \"../math\";\n\nvar ka = 0.89081309152928522810,\n kr = Math.sin(pi / 10) / Math.sin(7 * pi / 10),\n kx = Math.sin(tau / 10) * kr,\n ky = -Math.cos(tau / 10) * kr;\n\nexport default {\n draw: function(context, size) {\n var r = Math.sqrt(size * ka),\n x = kx * r,\n y = ky * r;\n context.moveTo(0, -r);\n context.lineTo(x, y);\n for (var i = 1; i < 5; ++i) {\n var a = tau * i / 5,\n c = Math.cos(a),\n s = Math.sin(a);\n context.lineTo(s * r, -c * r);\n context.lineTo(c * x - s * y, s * x + c * y);\n }\n context.closePath();\n }\n};\n","export default {\n draw: function(context, size) {\n var w = Math.sqrt(size),\n x = -w / 2;\n context.rect(x, x, w, w);\n }\n};\n","var sqrt3 = Math.sqrt(3);\n\nexport default {\n draw: function(context, size) {\n var y = -Math.sqrt(size / (sqrt3 * 3));\n context.moveTo(0, y * 2);\n context.lineTo(-sqrt3 * y, -y);\n context.lineTo(sqrt3 * y, -y);\n context.closePath();\n }\n};\n","var c = -0.5,\n s = Math.sqrt(3) / 2,\n k = 1 / Math.sqrt(12),\n a = (k / 2 + 1) * 3;\n\nexport default {\n draw: function(context, size) {\n var r = Math.sqrt(size / a),\n x0 = r / 2,\n y0 = r * k,\n x1 = x0,\n y1 = r * k + r,\n x2 = -x1,\n y2 = y1;\n context.moveTo(x0, y0);\n context.lineTo(x1, y1);\n context.lineTo(x2, y2);\n context.lineTo(c * x0 - s * y0, s * x0 + c * y0);\n context.lineTo(c * x1 - s * y1, s * x1 + c * y1);\n context.lineTo(c * x2 - s * y2, s * x2 + c * y2);\n context.lineTo(c * x0 + s * y0, c * y0 - s * x0);\n context.lineTo(c * x1 + s * y1, c * y1 - s * x1);\n context.lineTo(c * x2 + s * y2, c * y2 - s * x2);\n context.closePath();\n }\n};\n","export default function() {}\n","export function point(that, x, y) {\n that._context.bezierCurveTo(\n (2 * that._x0 + that._x1) / 3,\n (2 * that._y0 + that._y1) / 3,\n (that._x0 + 2 * that._x1) / 3,\n (that._y0 + 2 * that._y1) / 3,\n (that._x0 + 4 * that._x1 + x) / 6,\n (that._y0 + 4 * that._y1 + y) / 6\n );\n}\n\nexport function Basis(context) {\n this._context = context;\n}\n\nBasis.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 =\n this._y0 = this._y1 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 3: point(this, this._x1, this._y1); // proceed\n case 2: this._context.lineTo(this._x1, this._y1); break;\n }\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; this._context.lineTo((5 * this._x0 + this._x1) / 6, (5 * this._y0 + this._y1) / 6); // proceed\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = x;\n this._y0 = this._y1, this._y1 = y;\n }\n};\n\nexport default function(context) {\n return new Basis(context);\n}\n","import noop from \"../noop\";\nimport {point} from \"./basis\";\n\nfunction BasisClosed(context) {\n this._context = context;\n}\n\nBasisClosed.prototype = {\n areaStart: noop,\n areaEnd: noop,\n lineStart: function() {\n this._x0 = this._x1 = this._x2 = this._x3 = this._x4 =\n this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 1: {\n this._context.moveTo(this._x2, this._y2);\n this._context.closePath();\n break;\n }\n case 2: {\n this._context.moveTo((this._x2 + 2 * this._x3) / 3, (this._y2 + 2 * this._y3) / 3);\n this._context.lineTo((this._x3 + 2 * this._x2) / 3, (this._y3 + 2 * this._y2) / 3);\n this._context.closePath();\n break;\n }\n case 3: {\n this.point(this._x2, this._y2);\n this.point(this._x3, this._y3);\n this.point(this._x4, this._y4);\n break;\n }\n }\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._x2 = x, this._y2 = y; break;\n case 1: this._point = 2; this._x3 = x, this._y3 = y; break;\n case 2: this._point = 3; this._x4 = x, this._y4 = y; this._context.moveTo((this._x0 + 4 * this._x1 + x) / 6, (this._y0 + 4 * this._y1 + y) / 6); break;\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = x;\n this._y0 = this._y1, this._y1 = y;\n }\n};\n\nexport default function(context) {\n return new BasisClosed(context);\n}\n","import {point} from \"./basis\";\n\nfunction BasisOpen(context) {\n this._context = context;\n}\n\nBasisOpen.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 =\n this._y0 = this._y1 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; var x0 = (this._x0 + 4 * this._x1 + x) / 6, y0 = (this._y0 + 4 * this._y1 + y) / 6; this._line ? this._context.lineTo(x0, y0) : this._context.moveTo(x0, y0); break;\n case 3: this._point = 4; // proceed\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = x;\n this._y0 = this._y1, this._y1 = y;\n }\n};\n\nexport default function(context) {\n return new BasisOpen(context);\n}\n","import {Basis} from \"./basis\";\n\nfunction Bundle(context, beta) {\n this._basis = new Basis(context);\n this._beta = beta;\n}\n\nBundle.prototype = {\n lineStart: function() {\n this._x = [];\n this._y = [];\n this._basis.lineStart();\n },\n lineEnd: function() {\n var x = this._x,\n y = this._y,\n j = x.length - 1;\n\n if (j > 0) {\n var x0 = x[0],\n y0 = y[0],\n dx = x[j] - x0,\n dy = y[j] - y0,\n i = -1,\n t;\n\n while (++i <= j) {\n t = i / j;\n this._basis.point(\n this._beta * x[i] + (1 - this._beta) * (x0 + t * dx),\n this._beta * y[i] + (1 - this._beta) * (y0 + t * dy)\n );\n }\n }\n\n this._x = this._y = null;\n this._basis.lineEnd();\n },\n point: function(x, y) {\n this._x.push(+x);\n this._y.push(+y);\n }\n};\n\nexport default (function custom(beta) {\n\n function bundle(context) {\n return beta === 1 ? new Basis(context) : new Bundle(context, beta);\n }\n\n bundle.beta = function(beta) {\n return custom(+beta);\n };\n\n return bundle;\n})(0.85);\n","export function point(that, x, y) {\n that._context.bezierCurveTo(\n that._x1 + that._k * (that._x2 - that._x0),\n that._y1 + that._k * (that._y2 - that._y0),\n that._x2 + that._k * (that._x1 - x),\n that._y2 + that._k * (that._y1 - y),\n that._x2,\n that._y2\n );\n}\n\nexport function Cardinal(context, tension) {\n this._context = context;\n this._k = (1 - tension) / 6;\n}\n\nCardinal.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 = this._x2 =\n this._y0 = this._y1 = this._y2 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 2: this._context.lineTo(this._x2, this._y2); break;\n case 3: point(this, this._x1, this._y1); break;\n }\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; this._x1 = x, this._y1 = y; break;\n case 2: this._point = 3; // proceed\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(tension) {\n\n function cardinal(context) {\n return new Cardinal(context, tension);\n }\n\n cardinal.tension = function(tension) {\n return custom(+tension);\n };\n\n return cardinal;\n})(0);\n","import noop from \"../noop\";\nimport {point} from \"./cardinal\";\n\nexport function CardinalClosed(context, tension) {\n this._context = context;\n this._k = (1 - tension) / 6;\n}\n\nCardinalClosed.prototype = {\n areaStart: noop,\n areaEnd: noop,\n lineStart: function() {\n this._x0 = this._x1 = this._x2 = this._x3 = this._x4 = this._x5 =\n this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = this._y5 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 1: {\n this._context.moveTo(this._x3, this._y3);\n this._context.closePath();\n break;\n }\n case 2: {\n this._context.lineTo(this._x3, this._y3);\n this._context.closePath();\n break;\n }\n case 3: {\n this.point(this._x3, this._y3);\n this.point(this._x4, this._y4);\n this.point(this._x5, this._y5);\n break;\n }\n }\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._x3 = x, this._y3 = y; break;\n case 1: this._point = 2; this._context.moveTo(this._x4 = x, this._y4 = y); break;\n case 2: this._point = 3; this._x5 = x, this._y5 = y; break;\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(tension) {\n\n function cardinal(context) {\n return new CardinalClosed(context, tension);\n }\n\n cardinal.tension = function(tension) {\n return custom(+tension);\n };\n\n return cardinal;\n})(0);\n","import {point} from \"./cardinal\";\n\nexport function CardinalOpen(context, tension) {\n this._context = context;\n this._k = (1 - tension) / 6;\n}\n\nCardinalOpen.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 = this._x2 =\n this._y0 = this._y1 = this._y2 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; this._line ? this._context.lineTo(this._x2, this._y2) : this._context.moveTo(this._x2, this._y2); break;\n case 3: this._point = 4; // proceed\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(tension) {\n\n function cardinal(context) {\n return new CardinalOpen(context, tension);\n }\n\n cardinal.tension = function(tension) {\n return custom(+tension);\n };\n\n return cardinal;\n})(0);\n","import {epsilon} from \"../math\";\nimport {Cardinal} from \"./cardinal\";\n\nexport function point(that, x, y) {\n var x1 = that._x1,\n y1 = that._y1,\n x2 = that._x2,\n y2 = that._y2;\n\n if (that._l01_a > epsilon) {\n var a = 2 * that._l01_2a + 3 * that._l01_a * that._l12_a + that._l12_2a,\n n = 3 * that._l01_a * (that._l01_a + that._l12_a);\n x1 = (x1 * a - that._x0 * that._l12_2a + that._x2 * that._l01_2a) / n;\n y1 = (y1 * a - that._y0 * that._l12_2a + that._y2 * that._l01_2a) / n;\n }\n\n if (that._l23_a > epsilon) {\n var b = 2 * that._l23_2a + 3 * that._l23_a * that._l12_a + that._l12_2a,\n m = 3 * that._l23_a * (that._l23_a + that._l12_a);\n x2 = (x2 * b + that._x1 * that._l23_2a - x * that._l12_2a) / m;\n y2 = (y2 * b + that._y1 * that._l23_2a - y * that._l12_2a) / m;\n }\n\n that._context.bezierCurveTo(x1, y1, x2, y2, that._x2, that._y2);\n}\n\nfunction CatmullRom(context, alpha) {\n this._context = context;\n this._alpha = alpha;\n}\n\nCatmullRom.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 = this._x2 =\n this._y0 = this._y1 = this._y2 = NaN;\n this._l01_a = this._l12_a = this._l23_a =\n this._l01_2a = this._l12_2a = this._l23_2a =\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 2: this._context.lineTo(this._x2, this._y2); break;\n case 3: this.point(this._x2, this._y2); break;\n }\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n\n if (this._point) {\n var x23 = this._x2 - x,\n y23 = this._y2 - y;\n this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));\n }\n\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; // proceed\n default: point(this, x, y); break;\n }\n\n this._l01_a = this._l12_a, this._l12_a = this._l23_a;\n this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(alpha) {\n\n function catmullRom(context) {\n return alpha ? new CatmullRom(context, alpha) : new Cardinal(context, 0);\n }\n\n catmullRom.alpha = function(alpha) {\n return custom(+alpha);\n };\n\n return catmullRom;\n})(0.5);\n","import {CardinalClosed} from \"./cardinalClosed\";\nimport noop from \"../noop\";\nimport {point} from \"./catmullRom\";\n\nfunction CatmullRomClosed(context, alpha) {\n this._context = context;\n this._alpha = alpha;\n}\n\nCatmullRomClosed.prototype = {\n areaStart: noop,\n areaEnd: noop,\n lineStart: function() {\n this._x0 = this._x1 = this._x2 = this._x3 = this._x4 = this._x5 =\n this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = this._y5 = NaN;\n this._l01_a = this._l12_a = this._l23_a =\n this._l01_2a = this._l12_2a = this._l23_2a =\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 1: {\n this._context.moveTo(this._x3, this._y3);\n this._context.closePath();\n break;\n }\n case 2: {\n this._context.lineTo(this._x3, this._y3);\n this._context.closePath();\n break;\n }\n case 3: {\n this.point(this._x3, this._y3);\n this.point(this._x4, this._y4);\n this.point(this._x5, this._y5);\n break;\n }\n }\n },\n point: function(x, y) {\n x = +x, y = +y;\n\n if (this._point) {\n var x23 = this._x2 - x,\n y23 = this._y2 - y;\n this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));\n }\n\n switch (this._point) {\n case 0: this._point = 1; this._x3 = x, this._y3 = y; break;\n case 1: this._point = 2; this._context.moveTo(this._x4 = x, this._y4 = y); break;\n case 2: this._point = 3; this._x5 = x, this._y5 = y; break;\n default: point(this, x, y); break;\n }\n\n this._l01_a = this._l12_a, this._l12_a = this._l23_a;\n this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(alpha) {\n\n function catmullRom(context) {\n return alpha ? new CatmullRomClosed(context, alpha) : new CardinalClosed(context, 0);\n }\n\n catmullRom.alpha = function(alpha) {\n return custom(+alpha);\n };\n\n return catmullRom;\n})(0.5);\n","import {CardinalOpen} from \"./cardinalOpen\";\nimport {point} from \"./catmullRom\";\n\nfunction CatmullRomOpen(context, alpha) {\n this._context = context;\n this._alpha = alpha;\n}\n\nCatmullRomOpen.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 = this._x2 =\n this._y0 = this._y1 = this._y2 = NaN;\n this._l01_a = this._l12_a = this._l23_a =\n this._l01_2a = this._l12_2a = this._l23_2a =\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n\n if (this._point) {\n var x23 = this._x2 - x,\n y23 = this._y2 - y;\n this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));\n }\n\n switch (this._point) {\n case 0: this._point = 1; break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; this._line ? this._context.lineTo(this._x2, this._y2) : this._context.moveTo(this._x2, this._y2); break;\n case 3: this._point = 4; // proceed\n default: point(this, x, y); break;\n }\n\n this._l01_a = this._l12_a, this._l12_a = this._l23_a;\n this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(alpha) {\n\n function catmullRom(context) {\n return alpha ? new CatmullRomOpen(context, alpha) : new CardinalOpen(context, 0);\n }\n\n catmullRom.alpha = function(alpha) {\n return custom(+alpha);\n };\n\n return catmullRom;\n})(0.5);\n","import noop from \"../noop\";\n\nfunction LinearClosed(context) {\n this._context = context;\n}\n\nLinearClosed.prototype = {\n areaStart: noop,\n areaEnd: noop,\n lineStart: function() {\n this._point = 0;\n },\n lineEnd: function() {\n if (this._point) this._context.closePath();\n },\n point: function(x, y) {\n x = +x, y = +y;\n if (this._point) this._context.lineTo(x, y);\n else this._point = 1, this._context.moveTo(x, y);\n }\n};\n\nexport default function(context) {\n return new LinearClosed(context);\n}\n","function sign(x) {\n return x < 0 ? -1 : 1;\n}\n\n// Calculate the slopes of the tangents (Hermite-type interpolation) based on\n// the following paper: Steffen, M. 1990. A Simple Method for Monotonic\n// Interpolation in One Dimension. Astronomy and Astrophysics, Vol. 239, NO.\n// NOV(II), P. 443, 1990.\nfunction slope3(that, x2, y2) {\n var h0 = that._x1 - that._x0,\n h1 = x2 - that._x1,\n s0 = (that._y1 - that._y0) / (h0 || h1 < 0 && -0),\n s1 = (y2 - that._y1) / (h1 || h0 < 0 && -0),\n p = (s0 * h1 + s1 * h0) / (h0 + h1);\n return (sign(s0) + sign(s1)) * Math.min(Math.abs(s0), Math.abs(s1), 0.5 * Math.abs(p)) || 0;\n}\n\n// Calculate a one-sided slope.\nfunction slope2(that, t) {\n var h = that._x1 - that._x0;\n return h ? (3 * (that._y1 - that._y0) / h - t) / 2 : t;\n}\n\n// According to https://en.wikipedia.org/wiki/Cubic_Hermite_spline#Representations\n// \"you can express cubic Hermite interpolation in terms of cubic Bézier curves\n// with respect to the four values p0, p0 + m0 / 3, p1 - m1 / 3, p1\".\nfunction point(that, t0, t1) {\n var x0 = that._x0,\n y0 = that._y0,\n x1 = that._x1,\n y1 = that._y1,\n dx = (x1 - x0) / 3;\n that._context.bezierCurveTo(x0 + dx, y0 + dx * t0, x1 - dx, y1 - dx * t1, x1, y1);\n}\n\nfunction MonotoneX(context) {\n this._context = context;\n}\n\nMonotoneX.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 =\n this._y0 = this._y1 =\n this._t0 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 2: this._context.lineTo(this._x1, this._y1); break;\n case 3: point(this, this._t0, slope2(this, this._t0)); break;\n }\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n var t1 = NaN;\n\n x = +x, y = +y;\n if (x === this._x1 && y === this._y1) return; // Ignore coincident points.\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; point(this, slope2(this, t1 = slope3(this, x, y)), t1); break;\n default: point(this, this._t0, t1 = slope3(this, x, y)); break;\n }\n\n this._x0 = this._x1, this._x1 = x;\n this._y0 = this._y1, this._y1 = y;\n this._t0 = t1;\n }\n}\n\nfunction MonotoneY(context) {\n this._context = new ReflectContext(context);\n}\n\n(MonotoneY.prototype = Object.create(MonotoneX.prototype)).point = function(x, y) {\n MonotoneX.prototype.point.call(this, y, x);\n};\n\nfunction ReflectContext(context) {\n this._context = context;\n}\n\nReflectContext.prototype = {\n moveTo: function(x, y) { this._context.moveTo(y, x); },\n closePath: function() { this._context.closePath(); },\n lineTo: function(x, y) { this._context.lineTo(y, x); },\n bezierCurveTo: function(x1, y1, x2, y2, x, y) { this._context.bezierCurveTo(y1, x1, y2, x2, y, x); }\n};\n\nexport function monotoneX(context) {\n return new MonotoneX(context);\n}\n\nexport function monotoneY(context) {\n return new MonotoneY(context);\n}\n","function Natural(context) {\n this._context = context;\n}\n\nNatural.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x = [];\n this._y = [];\n },\n lineEnd: function() {\n var x = this._x,\n y = this._y,\n n = x.length;\n\n if (n) {\n this._line ? this._context.lineTo(x[0], y[0]) : this._context.moveTo(x[0], y[0]);\n if (n === 2) {\n this._context.lineTo(x[1], y[1]);\n } else {\n var px = controlPoints(x),\n py = controlPoints(y);\n for (var i0 = 0, i1 = 1; i1 < n; ++i0, ++i1) {\n this._context.bezierCurveTo(px[0][i0], py[0][i0], px[1][i0], py[1][i0], x[i1], y[i1]);\n }\n }\n }\n\n if (this._line || (this._line !== 0 && n === 1)) this._context.closePath();\n this._line = 1 - this._line;\n this._x = this._y = null;\n },\n point: function(x, y) {\n this._x.push(+x);\n this._y.push(+y);\n }\n};\n\n// See https://www.particleincell.com/2012/bezier-splines/ for derivation.\nfunction controlPoints(x) {\n var i,\n n = x.length - 1,\n m,\n a = new Array(n),\n b = new Array(n),\n r = new Array(n);\n a[0] = 0, b[0] = 2, r[0] = x[0] + 2 * x[1];\n for (i = 1; i < n - 1; ++i) a[i] = 1, b[i] = 4, r[i] = 4 * x[i] + 2 * x[i + 1];\n a[n - 1] = 2, b[n - 1] = 7, r[n - 1] = 8 * x[n - 1] + x[n];\n for (i = 1; i < n; ++i) m = a[i] / b[i - 1], b[i] -= m, r[i] -= m * r[i - 1];\n a[n - 1] = r[n - 1] / b[n - 1];\n for (i = n - 2; i >= 0; --i) a[i] = (r[i] - a[i + 1]) / b[i];\n b[n - 1] = (x[n] + a[n - 1]) / 2;\n for (i = 0; i < n - 1; ++i) b[i] = 2 * x[i + 1] - a[i + 1];\n return [a, b];\n}\n\nexport default function(context) {\n return new Natural(context);\n}\n","function Step(context, t) {\n this._context = context;\n this._t = t;\n}\n\nStep.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x = this._y = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n if (0 < this._t && this._t < 1 && this._point === 2) this._context.lineTo(this._x, this._y);\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n if (this._line >= 0) this._t = 1 - this._t, this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; // proceed\n default: {\n if (this._t <= 0) {\n this._context.lineTo(this._x, y);\n this._context.lineTo(x, y);\n } else {\n var x1 = this._x * (1 - this._t) + x * this._t;\n this._context.lineTo(x1, this._y);\n this._context.lineTo(x1, y);\n }\n break;\n }\n }\n this._x = x, this._y = y;\n }\n};\n\nexport default function(context) {\n return new Step(context, 0.5);\n}\n\nexport function stepBefore(context) {\n return new Step(context, 0);\n}\n\nexport function stepAfter(context) {\n return new Step(context, 1);\n}\n","export default function(series, order) {\n if (!((n = series.length) > 1)) return;\n for (var i = 1, j, s0, s1 = series[order[0]], n, m = s1.length; i < n; ++i) {\n s0 = s1, s1 = series[order[i]];\n for (j = 0; j < m; ++j) {\n s1[j][1] += s1[j][0] = isNaN(s0[j][1]) ? s0[j][0] : s0[j][1];\n }\n }\n}\n","export default function(series) {\n var n = series.length, o = new Array(n);\n while (--n >= 0) o[n] = n;\n return o;\n}\n","import {slice} from \"./array\";\nimport constant from \"./constant\";\nimport offsetNone from \"./offset/none\";\nimport orderNone from \"./order/none\";\n\nfunction stackValue(d, key) {\n return d[key];\n}\n\nexport default function() {\n var keys = constant([]),\n order = orderNone,\n offset = offsetNone,\n value = stackValue;\n\n function stack(data) {\n var kz = keys.apply(this, arguments),\n i,\n m = data.length,\n n = kz.length,\n sz = new Array(n),\n oz;\n\n for (i = 0; i < n; ++i) {\n for (var ki = kz[i], si = sz[i] = new Array(m), j = 0, sij; j < m; ++j) {\n si[j] = sij = [0, +value(data[j], ki, j, data)];\n sij.data = data[j];\n }\n si.key = ki;\n }\n\n for (i = 0, oz = order(sz); i < n; ++i) {\n sz[oz[i]].index = i;\n }\n\n offset(sz, oz);\n return sz;\n }\n\n stack.keys = function(_) {\n return arguments.length ? (keys = typeof _ === \"function\" ? _ : constant(slice.call(_)), stack) : keys;\n };\n\n stack.value = function(_) {\n return arguments.length ? (value = typeof _ === \"function\" ? _ : constant(+_), stack) : value;\n };\n\n stack.order = function(_) {\n return arguments.length ? (order = _ == null ? orderNone : typeof _ === \"function\" ? _ : constant(slice.call(_)), stack) : order;\n };\n\n stack.offset = function(_) {\n return arguments.length ? (offset = _ == null ? offsetNone : _, stack) : offset;\n };\n\n return stack;\n}\n","import none from \"./none\";\n\nexport default function(series) {\n var sums = series.map(sum);\n return none(series).sort(function(a, b) { return sums[a] - sums[b]; });\n}\n\nexport function sum(series) {\n var s = 0, i = -1, n = series.length, v;\n while (++i < n) if (v = +series[i][1]) s += v;\n return s;\n}\n","export function cubicIn(t) {\n return t * t * t;\n}\n\nexport function cubicOut(t) {\n return --t * t * t + 1;\n}\n\nexport function cubicInOut(t) {\n return ((t *= 2) <= 1 ? t * t * t : (t -= 2) * t * t + 2) / 2;\n}\n","var exponent = 3;\n\nexport var polyIn = (function custom(e) {\n e = +e;\n\n function polyIn(t) {\n return Math.pow(t, e);\n }\n\n polyIn.exponent = custom;\n\n return polyIn;\n})(exponent);\n\nexport var polyOut = (function custom(e) {\n e = +e;\n\n function polyOut(t) {\n return 1 - Math.pow(1 - t, e);\n }\n\n polyOut.exponent = custom;\n\n return polyOut;\n})(exponent);\n\nexport var polyInOut = (function custom(e) {\n e = +e;\n\n function polyInOut(t) {\n return ((t *= 2) <= 1 ? Math.pow(t, e) : 2 - Math.pow(2 - t, e)) / 2;\n }\n\n polyInOut.exponent = custom;\n\n return polyInOut;\n})(exponent);\n","var pi = Math.PI,\n halfPi = pi / 2;\n\nexport function sinIn(t) {\n return 1 - Math.cos(t * halfPi);\n}\n\nexport function sinOut(t) {\n return Math.sin(t * halfPi);\n}\n\nexport function sinInOut(t) {\n return (1 - Math.cos(pi * t)) / 2;\n}\n","var b1 = 4 / 11,\n b2 = 6 / 11,\n b3 = 8 / 11,\n b4 = 3 / 4,\n b5 = 9 / 11,\n b6 = 10 / 11,\n b7 = 15 / 16,\n b8 = 21 / 22,\n b9 = 63 / 64,\n b0 = 1 / b1 / b1;\n\nexport function bounceIn(t) {\n return 1 - bounceOut(1 - t);\n}\n\nexport function bounceOut(t) {\n return (t = +t) < b1 ? b0 * t * t : t < b3 ? b0 * (t -= b2) * t + b4 : t < b6 ? b0 * (t -= b5) * t + b7 : b0 * (t -= b8) * t + b9;\n}\n\nexport function bounceInOut(t) {\n return ((t *= 2) <= 1 ? 1 - bounceOut(1 - t) : bounceOut(t - 1) + 1) / 2;\n}\n","var overshoot = 1.70158;\n\nexport var backIn = (function custom(s) {\n s = +s;\n\n function backIn(t) {\n return t * t * ((s + 1) * t - s);\n }\n\n backIn.overshoot = custom;\n\n return backIn;\n})(overshoot);\n\nexport var backOut = (function custom(s) {\n s = +s;\n\n function backOut(t) {\n return --t * t * ((s + 1) * t + s) + 1;\n }\n\n backOut.overshoot = custom;\n\n return backOut;\n})(overshoot);\n\nexport var backInOut = (function custom(s) {\n s = +s;\n\n function backInOut(t) {\n return ((t *= 2) < 1 ? t * t * ((s + 1) * t - s) : (t -= 2) * t * ((s + 1) * t + s) + 2) / 2;\n }\n\n backInOut.overshoot = custom;\n\n return backInOut;\n})(overshoot);\n","var tau = 2 * Math.PI,\n amplitude = 1,\n period = 0.3;\n\nexport var elasticIn = (function custom(a, p) {\n var s = Math.asin(1 / (a = Math.max(1, a))) * (p /= tau);\n\n function elasticIn(t) {\n return a * Math.pow(2, 10 * --t) * Math.sin((s - t) / p);\n }\n\n elasticIn.amplitude = function(a) { return custom(a, p * tau); };\n elasticIn.period = function(p) { return custom(a, p); };\n\n return elasticIn;\n})(amplitude, period);\n\nexport var elasticOut = (function custom(a, p) {\n var s = Math.asin(1 / (a = Math.max(1, a))) * (p /= tau);\n\n function elasticOut(t) {\n return 1 - a * Math.pow(2, -10 * (t = +t)) * Math.sin((t + s) / p);\n }\n\n elasticOut.amplitude = function(a) { return custom(a, p * tau); };\n elasticOut.period = function(p) { return custom(a, p); };\n\n return elasticOut;\n})(amplitude, period);\n\nexport var elasticInOut = (function custom(a, p) {\n var s = Math.asin(1 / (a = Math.max(1, a))) * (p /= tau);\n\n function elasticInOut(t) {\n return ((t = t * 2 - 1) < 0\n ? a * Math.pow(2, 10 * t) * Math.sin((s - t) / p)\n : 2 - a * Math.pow(2, -10 * t) * Math.sin((s + t) / p)) / 2;\n }\n\n elasticInOut.amplitude = function(a) { return custom(a, p * tau); };\n elasticInOut.period = function(p) { return custom(a, p); };\n\n return elasticInOut;\n})(amplitude, period);\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","export function x(d) {\n return d[0];\n}\n\nexport function y(d) {\n return d[1];\n}\n","function RedBlackTree() {\n this._ = null; // root node\n}\n\nexport function RedBlackNode(node) {\n node.U = // parent node\n node.C = // color - true for red, false for black\n node.L = // left node\n node.R = // right node\n node.P = // previous node\n node.N = null; // next node\n}\n\nRedBlackTree.prototype = {\n constructor: RedBlackTree,\n\n insert: function(after, node) {\n var parent, grandpa, uncle;\n\n if (after) {\n node.P = after;\n node.N = after.N;\n if (after.N) after.N.P = node;\n after.N = node;\n if (after.R) {\n after = after.R;\n while (after.L) after = after.L;\n after.L = node;\n } else {\n after.R = node;\n }\n parent = after;\n } else if (this._) {\n after = RedBlackFirst(this._);\n node.P = null;\n node.N = after;\n after.P = after.L = node;\n parent = after;\n } else {\n node.P = node.N = null;\n this._ = node;\n parent = null;\n }\n node.L = node.R = null;\n node.U = parent;\n node.C = true;\n\n after = node;\n while (parent && parent.C) {\n grandpa = parent.U;\n if (parent === grandpa.L) {\n uncle = grandpa.R;\n if (uncle && uncle.C) {\n parent.C = uncle.C = false;\n grandpa.C = true;\n after = grandpa;\n } else {\n if (after === parent.R) {\n RedBlackRotateLeft(this, parent);\n after = parent;\n parent = after.U;\n }\n parent.C = false;\n grandpa.C = true;\n RedBlackRotateRight(this, grandpa);\n }\n } else {\n uncle = grandpa.L;\n if (uncle && uncle.C) {\n parent.C = uncle.C = false;\n grandpa.C = true;\n after = grandpa;\n } else {\n if (after === parent.L) {\n RedBlackRotateRight(this, parent);\n after = parent;\n parent = after.U;\n }\n parent.C = false;\n grandpa.C = true;\n RedBlackRotateLeft(this, grandpa);\n }\n }\n parent = after.U;\n }\n this._.C = false;\n },\n\n remove: function(node) {\n if (node.N) node.N.P = node.P;\n if (node.P) node.P.N = node.N;\n node.N = node.P = null;\n\n var parent = node.U,\n sibling,\n left = node.L,\n right = node.R,\n next,\n red;\n\n if (!left) next = right;\n else if (!right) next = left;\n else next = RedBlackFirst(right);\n\n if (parent) {\n if (parent.L === node) parent.L = next;\n else parent.R = next;\n } else {\n this._ = next;\n }\n\n if (left && right) {\n red = next.C;\n next.C = node.C;\n next.L = left;\n left.U = next;\n if (next !== right) {\n parent = next.U;\n next.U = node.U;\n node = next.R;\n parent.L = node;\n next.R = right;\n right.U = next;\n } else {\n next.U = parent;\n parent = next;\n node = next.R;\n }\n } else {\n red = node.C;\n node = next;\n }\n\n if (node) node.U = parent;\n if (red) return;\n if (node && node.C) { node.C = false; return; }\n\n do {\n if (node === this._) break;\n if (node === parent.L) {\n sibling = parent.R;\n if (sibling.C) {\n sibling.C = false;\n parent.C = true;\n RedBlackRotateLeft(this, parent);\n sibling = parent.R;\n }\n if ((sibling.L && sibling.L.C)\n || (sibling.R && sibling.R.C)) {\n if (!sibling.R || !sibling.R.C) {\n sibling.L.C = false;\n sibling.C = true;\n RedBlackRotateRight(this, sibling);\n sibling = parent.R;\n }\n sibling.C = parent.C;\n parent.C = sibling.R.C = false;\n RedBlackRotateLeft(this, parent);\n node = this._;\n break;\n }\n } else {\n sibling = parent.L;\n if (sibling.C) {\n sibling.C = false;\n parent.C = true;\n RedBlackRotateRight(this, parent);\n sibling = parent.L;\n }\n if ((sibling.L && sibling.L.C)\n || (sibling.R && sibling.R.C)) {\n if (!sibling.L || !sibling.L.C) {\n sibling.R.C = false;\n sibling.C = true;\n RedBlackRotateLeft(this, sibling);\n sibling = parent.L;\n }\n sibling.C = parent.C;\n parent.C = sibling.L.C = false;\n RedBlackRotateRight(this, parent);\n node = this._;\n break;\n }\n }\n sibling.C = true;\n node = parent;\n parent = parent.U;\n } while (!node.C);\n\n if (node) node.C = false;\n }\n};\n\nfunction RedBlackRotateLeft(tree, node) {\n var p = node,\n q = node.R,\n parent = p.U;\n\n if (parent) {\n if (parent.L === p) parent.L = q;\n else parent.R = q;\n } else {\n tree._ = q;\n }\n\n q.U = parent;\n p.U = q;\n p.R = q.L;\n if (p.R) p.R.U = p;\n q.L = p;\n}\n\nfunction RedBlackRotateRight(tree, node) {\n var p = node,\n q = node.L,\n parent = p.U;\n\n if (parent) {\n if (parent.L === p) parent.L = q;\n else parent.R = q;\n } else {\n tree._ = q;\n }\n\n q.U = parent;\n p.U = q;\n p.L = q.R;\n if (p.L) p.L.U = p;\n q.R = p;\n}\n\nfunction RedBlackFirst(node) {\n while (node.L) node = node.L;\n return node;\n}\n\nexport default RedBlackTree;\n","import {cells, edges, epsilon} from \"./Diagram\";\n\nexport function createEdge(left, right, v0, v1) {\n var edge = [null, null],\n index = edges.push(edge) - 1;\n edge.left = left;\n edge.right = right;\n if (v0) setEdgeEnd(edge, left, right, v0);\n if (v1) setEdgeEnd(edge, right, left, v1);\n cells[left.index].halfedges.push(index);\n cells[right.index].halfedges.push(index);\n return edge;\n}\n\nexport function createBorderEdge(left, v0, v1) {\n var edge = [v0, v1];\n edge.left = left;\n return edge;\n}\n\nexport function setEdgeEnd(edge, left, right, vertex) {\n if (!edge[0] && !edge[1]) {\n edge[0] = vertex;\n edge.left = left;\n edge.right = right;\n } else if (edge.left === right) {\n edge[1] = vertex;\n } else {\n edge[0] = vertex;\n }\n}\n\n// Liang–Barsky line clipping.\nfunction clipEdge(edge, x0, y0, x1, y1) {\n var a = edge[0],\n b = edge[1],\n ax = a[0],\n ay = a[1],\n bx = b[0],\n by = b[1],\n t0 = 0,\n t1 = 1,\n dx = bx - ax,\n dy = by - ay,\n r;\n\n r = x0 - ax;\n if (!dx && r > 0) return;\n r /= dx;\n if (dx < 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n } else if (dx > 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n }\n\n r = x1 - ax;\n if (!dx && r < 0) return;\n r /= dx;\n if (dx < 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n } else if (dx > 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n }\n\n r = y0 - ay;\n if (!dy && r > 0) return;\n r /= dy;\n if (dy < 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n } else if (dy > 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n }\n\n r = y1 - ay;\n if (!dy && r < 0) return;\n r /= dy;\n if (dy < 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n } else if (dy > 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n }\n\n if (!(t0 > 0) && !(t1 < 1)) return true; // TODO Better check?\n\n if (t0 > 0) edge[0] = [ax + t0 * dx, ay + t0 * dy];\n if (t1 < 1) edge[1] = [ax + t1 * dx, ay + t1 * dy];\n return true;\n}\n\nfunction connectEdge(edge, x0, y0, x1, y1) {\n var v1 = edge[1];\n if (v1) return true;\n\n var v0 = edge[0],\n left = edge.left,\n right = edge.right,\n lx = left[0],\n ly = left[1],\n rx = right[0],\n ry = right[1],\n fx = (lx + rx) / 2,\n fy = (ly + ry) / 2,\n fm,\n fb;\n\n if (ry === ly) {\n if (fx < x0 || fx >= x1) return;\n if (lx > rx) {\n if (!v0) v0 = [fx, y0];\n else if (v0[1] >= y1) return;\n v1 = [fx, y1];\n } else {\n if (!v0) v0 = [fx, y1];\n else if (v0[1] < y0) return;\n v1 = [fx, y0];\n }\n } else {\n fm = (lx - rx) / (ry - ly);\n fb = fy - fm * fx;\n if (fm < -1 || fm > 1) {\n if (lx > rx) {\n if (!v0) v0 = [(y0 - fb) / fm, y0];\n else if (v0[1] >= y1) return;\n v1 = [(y1 - fb) / fm, y1];\n } else {\n if (!v0) v0 = [(y1 - fb) / fm, y1];\n else if (v0[1] < y0) return;\n v1 = [(y0 - fb) / fm, y0];\n }\n } else {\n if (ly < ry) {\n if (!v0) v0 = [x0, fm * x0 + fb];\n else if (v0[0] >= x1) return;\n v1 = [x1, fm * x1 + fb];\n } else {\n if (!v0) v0 = [x1, fm * x1 + fb];\n else if (v0[0] < x0) return;\n v1 = [x0, fm * x0 + fb];\n }\n }\n }\n\n edge[0] = v0;\n edge[1] = v1;\n return true;\n}\n\nexport function clipEdges(x0, y0, x1, y1) {\n var i = edges.length,\n edge;\n\n while (i--) {\n if (!connectEdge(edge = edges[i], x0, y0, x1, y1)\n || !clipEdge(edge, x0, y0, x1, y1)\n || !(Math.abs(edge[0][0] - edge[1][0]) > epsilon\n || Math.abs(edge[0][1] - edge[1][1]) > epsilon)) {\n delete edges[i];\n }\n }\n}\n","import {createBorderEdge} from \"./Edge\";\nimport {cells, edges, epsilon} from \"./Diagram\";\n\nexport function createCell(site) {\n return cells[site.index] = {\n site: site,\n halfedges: []\n };\n}\n\nfunction cellHalfedgeAngle(cell, edge) {\n var site = cell.site,\n va = edge.left,\n vb = edge.right;\n if (site === vb) vb = va, va = site;\n if (vb) return Math.atan2(vb[1] - va[1], vb[0] - va[0]);\n if (site === va) va = edge[1], vb = edge[0];\n else va = edge[0], vb = edge[1];\n return Math.atan2(va[0] - vb[0], vb[1] - va[1]);\n}\n\nexport function cellHalfedgeStart(cell, edge) {\n return edge[+(edge.left !== cell.site)];\n}\n\nexport function cellHalfedgeEnd(cell, edge) {\n return edge[+(edge.left === cell.site)];\n}\n\nexport function sortCellHalfedges() {\n for (var i = 0, n = cells.length, cell, halfedges, j, m; i < n; ++i) {\n if ((cell = cells[i]) && (m = (halfedges = cell.halfedges).length)) {\n var index = new Array(m),\n array = new Array(m);\n for (j = 0; j < m; ++j) index[j] = j, array[j] = cellHalfedgeAngle(cell, edges[halfedges[j]]);\n index.sort(function(i, j) { return array[j] - array[i]; });\n for (j = 0; j < m; ++j) array[j] = halfedges[index[j]];\n for (j = 0; j < m; ++j) halfedges[j] = array[j];\n }\n }\n}\n\nexport function clipCells(x0, y0, x1, y1) {\n var nCells = cells.length,\n iCell,\n cell,\n site,\n iHalfedge,\n halfedges,\n nHalfedges,\n start,\n startX,\n startY,\n end,\n endX,\n endY,\n cover = true;\n\n for (iCell = 0; iCell < nCells; ++iCell) {\n if (cell = cells[iCell]) {\n site = cell.site;\n halfedges = cell.halfedges;\n iHalfedge = halfedges.length;\n\n // Remove any dangling clipped edges.\n while (iHalfedge--) {\n if (!edges[halfedges[iHalfedge]]) {\n halfedges.splice(iHalfedge, 1);\n }\n }\n\n // Insert any border edges as necessary.\n iHalfedge = 0, nHalfedges = halfedges.length;\n while (iHalfedge < nHalfedges) {\n end = cellHalfedgeEnd(cell, edges[halfedges[iHalfedge]]), endX = end[0], endY = end[1];\n start = cellHalfedgeStart(cell, edges[halfedges[++iHalfedge % nHalfedges]]), startX = start[0], startY = start[1];\n if (Math.abs(endX - startX) > epsilon || Math.abs(endY - startY) > epsilon) {\n halfedges.splice(iHalfedge, 0, edges.push(createBorderEdge(site, end,\n Math.abs(endX - x0) < epsilon && y1 - endY > epsilon ? [x0, Math.abs(startX - x0) < epsilon ? startY : y1]\n : Math.abs(endY - y1) < epsilon && x1 - endX > epsilon ? [Math.abs(startY - y1) < epsilon ? startX : x1, y1]\n : Math.abs(endX - x1) < epsilon && endY - y0 > epsilon ? [x1, Math.abs(startX - x1) < epsilon ? startY : y0]\n : Math.abs(endY - y0) < epsilon && endX - x0 > epsilon ? [Math.abs(startY - y0) < epsilon ? startX : x0, y0]\n : null)) - 1);\n ++nHalfedges;\n }\n }\n\n if (nHalfedges) cover = false;\n }\n }\n\n // If there weren’t any edges, have the closest site cover the extent.\n // It doesn’t matter which corner of the extent we measure!\n if (cover) {\n var dx, dy, d2, dc = Infinity;\n\n for (iCell = 0, cover = null; iCell < nCells; ++iCell) {\n if (cell = cells[iCell]) {\n site = cell.site;\n dx = site[0] - x0;\n dy = site[1] - y0;\n d2 = dx * dx + dy * dy;\n if (d2 < dc) dc = d2, cover = cell;\n }\n }\n\n if (cover) {\n var v00 = [x0, y0], v01 = [x0, y1], v11 = [x1, y1], v10 = [x1, y0];\n cover.halfedges.push(\n edges.push(createBorderEdge(site = cover.site, v00, v01)) - 1,\n edges.push(createBorderEdge(site, v01, v11)) - 1,\n edges.push(createBorderEdge(site, v11, v10)) - 1,\n edges.push(createBorderEdge(site, v10, v00)) - 1\n );\n }\n }\n\n // Lastly delete any cells with no edges; these were entirely clipped.\n for (iCell = 0; iCell < nCells; ++iCell) {\n if (cell = cells[iCell]) {\n if (!cell.halfedges.length) {\n delete cells[iCell];\n }\n }\n }\n}\n","import {RedBlackNode} from \"./RedBlackTree\";\nimport {circles, epsilon2} from \"./Diagram\";\n\nvar circlePool = [];\n\nexport var firstCircle;\n\nfunction Circle() {\n RedBlackNode(this);\n this.x =\n this.y =\n this.arc =\n this.site =\n this.cy = null;\n}\n\nexport function attachCircle(arc) {\n var lArc = arc.P,\n rArc = arc.N;\n\n if (!lArc || !rArc) return;\n\n var lSite = lArc.site,\n cSite = arc.site,\n rSite = rArc.site;\n\n if (lSite === rSite) return;\n\n var bx = cSite[0],\n by = cSite[1],\n ax = lSite[0] - bx,\n ay = lSite[1] - by,\n cx = rSite[0] - bx,\n cy = rSite[1] - by;\n\n var d = 2 * (ax * cy - ay * cx);\n if (d >= -epsilon2) return;\n\n var ha = ax * ax + ay * ay,\n hc = cx * cx + cy * cy,\n x = (cy * ha - ay * hc) / d,\n y = (ax * hc - cx * ha) / d;\n\n var circle = circlePool.pop() || new Circle;\n circle.arc = arc;\n circle.site = cSite;\n circle.x = x + bx;\n circle.y = (circle.cy = y + by) + Math.sqrt(x * x + y * y); // y bottom\n\n arc.circle = circle;\n\n var before = null,\n node = circles._;\n\n while (node) {\n if (circle.y < node.y || (circle.y === node.y && circle.x <= node.x)) {\n if (node.L) node = node.L;\n else { before = node.P; break; }\n } else {\n if (node.R) node = node.R;\n else { before = node; break; }\n }\n }\n\n circles.insert(before, circle);\n if (!before) firstCircle = circle;\n}\n\nexport function detachCircle(arc) {\n var circle = arc.circle;\n if (circle) {\n if (!circle.P) firstCircle = circle.N;\n circles.remove(circle);\n circlePool.push(circle);\n RedBlackNode(circle);\n arc.circle = null;\n }\n}\n","import {RedBlackNode} from \"./RedBlackTree\";\nimport {createCell} from \"./Cell\";\nimport {attachCircle, detachCircle} from \"./Circle\";\nimport {createEdge, setEdgeEnd} from \"./Edge\";\nimport {beaches, epsilon} from \"./Diagram\";\n\nvar beachPool = [];\n\nfunction Beach() {\n RedBlackNode(this);\n this.edge =\n this.site =\n this.circle = null;\n}\n\nfunction createBeach(site) {\n var beach = beachPool.pop() || new Beach;\n beach.site = site;\n return beach;\n}\n\nfunction detachBeach(beach) {\n detachCircle(beach);\n beaches.remove(beach);\n beachPool.push(beach);\n RedBlackNode(beach);\n}\n\nexport function removeBeach(beach) {\n var circle = beach.circle,\n x = circle.x,\n y = circle.cy,\n vertex = [x, y],\n previous = beach.P,\n next = beach.N,\n disappearing = [beach];\n\n detachBeach(beach);\n\n var lArc = previous;\n while (lArc.circle\n && Math.abs(x - lArc.circle.x) < epsilon\n && Math.abs(y - lArc.circle.cy) < epsilon) {\n previous = lArc.P;\n disappearing.unshift(lArc);\n detachBeach(lArc);\n lArc = previous;\n }\n\n disappearing.unshift(lArc);\n detachCircle(lArc);\n\n var rArc = next;\n while (rArc.circle\n && Math.abs(x - rArc.circle.x) < epsilon\n && Math.abs(y - rArc.circle.cy) < epsilon) {\n next = rArc.N;\n disappearing.push(rArc);\n detachBeach(rArc);\n rArc = next;\n }\n\n disappearing.push(rArc);\n detachCircle(rArc);\n\n var nArcs = disappearing.length,\n iArc;\n for (iArc = 1; iArc < nArcs; ++iArc) {\n rArc = disappearing[iArc];\n lArc = disappearing[iArc - 1];\n setEdgeEnd(rArc.edge, lArc.site, rArc.site, vertex);\n }\n\n lArc = disappearing[0];\n rArc = disappearing[nArcs - 1];\n rArc.edge = createEdge(lArc.site, rArc.site, null, vertex);\n\n attachCircle(lArc);\n attachCircle(rArc);\n}\n\nexport function addBeach(site) {\n var x = site[0],\n directrix = site[1],\n lArc,\n rArc,\n dxl,\n dxr,\n node = beaches._;\n\n while (node) {\n dxl = leftBreakPoint(node, directrix) - x;\n if (dxl > epsilon) node = node.L; else {\n dxr = x - rightBreakPoint(node, directrix);\n if (dxr > epsilon) {\n if (!node.R) {\n lArc = node;\n break;\n }\n node = node.R;\n } else {\n if (dxl > -epsilon) {\n lArc = node.P;\n rArc = node;\n } else if (dxr > -epsilon) {\n lArc = node;\n rArc = node.N;\n } else {\n lArc = rArc = node;\n }\n break;\n }\n }\n }\n\n createCell(site);\n var newArc = createBeach(site);\n beaches.insert(lArc, newArc);\n\n if (!lArc && !rArc) return;\n\n if (lArc === rArc) {\n detachCircle(lArc);\n rArc = createBeach(lArc.site);\n beaches.insert(newArc, rArc);\n newArc.edge = rArc.edge = createEdge(lArc.site, newArc.site);\n attachCircle(lArc);\n attachCircle(rArc);\n return;\n }\n\n if (!rArc) { // && lArc\n newArc.edge = createEdge(lArc.site, newArc.site);\n return;\n }\n\n // else lArc !== rArc\n detachCircle(lArc);\n detachCircle(rArc);\n\n var lSite = lArc.site,\n ax = lSite[0],\n ay = lSite[1],\n bx = site[0] - ax,\n by = site[1] - ay,\n rSite = rArc.site,\n cx = rSite[0] - ax,\n cy = rSite[1] - ay,\n d = 2 * (bx * cy - by * cx),\n hb = bx * bx + by * by,\n hc = cx * cx + cy * cy,\n vertex = [(cy * hb - by * hc) / d + ax, (bx * hc - cx * hb) / d + ay];\n\n setEdgeEnd(rArc.edge, lSite, rSite, vertex);\n newArc.edge = createEdge(lSite, site, null, vertex);\n rArc.edge = createEdge(site, rSite, null, vertex);\n attachCircle(lArc);\n attachCircle(rArc);\n}\n\nfunction leftBreakPoint(arc, directrix) {\n var site = arc.site,\n rfocx = site[0],\n rfocy = site[1],\n pby2 = rfocy - directrix;\n\n if (!pby2) return rfocx;\n\n var lArc = arc.P;\n if (!lArc) return -Infinity;\n\n site = lArc.site;\n var lfocx = site[0],\n lfocy = site[1],\n plby2 = lfocy - directrix;\n\n if (!plby2) return lfocx;\n\n var hl = lfocx - rfocx,\n aby2 = 1 / pby2 - 1 / plby2,\n b = hl / plby2;\n\n if (aby2) return (-b + Math.sqrt(b * b - 2 * aby2 * (hl * hl / (-2 * plby2) - lfocy + plby2 / 2 + rfocy - pby2 / 2))) / aby2 + rfocx;\n\n return (rfocx + lfocx) / 2;\n}\n\nfunction rightBreakPoint(arc, directrix) {\n var rArc = arc.N;\n if (rArc) return leftBreakPoint(rArc, directrix);\n var site = arc.site;\n return site[1] === directrix ? site[0] : Infinity;\n}\n","import {addBeach, removeBeach} from \"./Beach\";\nimport {sortCellHalfedges, cellHalfedgeStart, clipCells} from \"./Cell\";\nimport {firstCircle} from \"./Circle\";\nimport {clipEdges} from \"./Edge\";\nimport RedBlackTree from \"./RedBlackTree\";\n\nexport var epsilon = 1e-6;\nexport var epsilon2 = 1e-12;\nexport var beaches;\nexport var cells;\nexport var circles;\nexport var edges;\n\nfunction triangleArea(a, b, c) {\n return (a[0] - c[0]) * (b[1] - a[1]) - (a[0] - b[0]) * (c[1] - a[1]);\n}\n\nfunction lexicographic(a, b) {\n return b[1] - a[1]\n || b[0] - a[0];\n}\n\nexport default function Diagram(sites, extent) {\n var site = sites.sort(lexicographic).pop(),\n x,\n y,\n circle;\n\n edges = [];\n cells = new Array(sites.length);\n beaches = new RedBlackTree;\n circles = new RedBlackTree;\n\n while (true) {\n circle = firstCircle;\n if (site && (!circle || site[1] < circle.y || (site[1] === circle.y && site[0] < circle.x))) {\n if (site[0] !== x || site[1] !== y) {\n addBeach(site);\n x = site[0], y = site[1];\n }\n site = sites.pop();\n } else if (circle) {\n removeBeach(circle.arc);\n } else {\n break;\n }\n }\n\n sortCellHalfedges();\n\n if (extent) {\n var x0 = +extent[0][0],\n y0 = +extent[0][1],\n x1 = +extent[1][0],\n y1 = +extent[1][1];\n clipEdges(x0, y0, x1, y1);\n clipCells(x0, y0, x1, y1);\n }\n\n this.edges = edges;\n this.cells = cells;\n\n beaches =\n circles =\n edges =\n cells = null;\n}\n\nDiagram.prototype = {\n constructor: Diagram,\n\n polygons: function() {\n var edges = this.edges;\n\n return this.cells.map(function(cell) {\n var polygon = cell.halfedges.map(function(i) { return cellHalfedgeStart(cell, edges[i]); });\n polygon.data = cell.site.data;\n return polygon;\n });\n },\n\n triangles: function() {\n var triangles = [],\n edges = this.edges;\n\n this.cells.forEach(function(cell, i) {\n if (!(m = (halfedges = cell.halfedges).length)) return;\n var site = cell.site,\n halfedges,\n j = -1,\n m,\n s0,\n e1 = edges[halfedges[m - 1]],\n s1 = e1.left === site ? e1.right : e1.left;\n\n while (++j < m) {\n s0 = s1;\n e1 = edges[halfedges[j]];\n s1 = e1.left === site ? e1.right : e1.left;\n if (s0 && s1 && i < s0.index && i < s1.index && triangleArea(site, s0, s1) < 0) {\n triangles.push([site.data, s0.data, s1.data]);\n }\n }\n });\n\n return triangles;\n },\n\n links: function() {\n return this.edges.filter(function(edge) {\n return edge.right;\n }).map(function(edge) {\n return {\n source: edge.left.data,\n target: edge.right.data\n };\n });\n },\n\n find: function(x, y, radius) {\n var that = this, i0, i1 = that._found || 0, n = that.cells.length, cell;\n\n // Use the previously-found cell, or start with an arbitrary one.\n while (!(cell = that.cells[i1])) if (++i1 >= n) return null;\n var dx = x - cell.site[0], dy = y - cell.site[1], d2 = dx * dx + dy * dy;\n\n // Traverse the half-edges to find a closer cell, if any.\n do {\n cell = that.cells[i0 = i1], i1 = null;\n cell.halfedges.forEach(function(e) {\n var edge = that.edges[e], v = edge.left;\n if ((v === cell.site || !v) && !(v = edge.right)) return;\n var vx = x - v[0], vy = y - v[1], v2 = vx * vx + vy * vy;\n if (v2 < d2) d2 = v2, i1 = v.index;\n });\n } while (i1 !== null);\n\n that._found = i0;\n\n return radius == null || d2 <= radius * radius ? cell.site : null;\n }\n}\n","import constant from \"./constant\";\nimport {x as pointX, y as pointY} from \"./point\";\nimport Diagram, {epsilon} from \"./Diagram\";\n\nexport default function() {\n var x = pointX,\n y = pointY,\n extent = null;\n\n function voronoi(data) {\n return new Diagram(data.map(function(d, i) {\n var s = [Math.round(x(d, i, data) / epsilon) * epsilon, Math.round(y(d, i, data) / epsilon) * epsilon];\n s.index = i;\n s.data = d;\n return s;\n }), extent);\n }\n\n voronoi.polygons = function(data) {\n return voronoi(data).polygons();\n };\n\n voronoi.links = function(data) {\n return voronoi(data).links();\n };\n\n voronoi.triangles = function(data) {\n return voronoi(data).triangles();\n };\n\n voronoi.x = function(_) {\n return arguments.length ? (x = typeof _ === \"function\" ? _ : constant(+_), voronoi) : x;\n };\n\n voronoi.y = function(_) {\n return arguments.length ? (y = typeof _ === \"function\" ? _ : constant(+_), voronoi) : y;\n };\n\n voronoi.extent = function(_) {\n return arguments.length ? (extent = _ == null ? null : [[+_[0][0], +_[0][1]], [+_[1][0], +_[1][1]]], voronoi) : extent && [[extent[0][0], extent[0][1]], [extent[1][0], extent[1][1]]];\n };\n\n voronoi.size = function(_) {\n return arguments.length ? (extent = _ == null ? null : [[0, 0], [+_[0], +_[1]]], voronoi) : extent && [extent[1][0] - extent[0][0], extent[1][1] - extent[0][1]];\n };\n\n return voronoi;\n}\n","/**\n * This class represents a selection applied on a data array.\n *\n * @class Selection\n */\nclass Selection {\n /**\n * Creates an instance of Selection.\n * @param {Array} data Array of DataObjects.\n * @memberof Selection\n */\n constructor (idGetter) {\n this._dataObjects = new Map();\n this._updatedata = new Map();\n this._mode = '';\n this._enterdata = new Map();\n this._exitdata = new Map();\n this._idGetter = idGetter;\n }\n\n /**\n * This method is used to supply seed data to a selection.\n *\n * @param {Array} newData Seed data to create the enter selection.\n * @param {Functon | undefined } idGetter This function is used to uniqely identify a data entry.\n * @return {Selection} Modified selection.\n * @memberof Selection\n */\n data (newData) {\n const entryData = new Map();\n const exitdata = new Map();\n const tempMap = new Map();\n const duplicateData = new Map();\n const updatedData = this._updatedata;\n\n newData.forEach((...params) => {\n const key = this.idGetter ? this._idGetter(...params) : params[1];\n if (!tempMap.has(key)) {\n tempMap.set(key, params[0]);\n } else {\n duplicateData.push(key, params[0]);\n }\n });\n\n let val;\n // prepare enter data\n let entries = tempMap.entries();\n while (val = entries.next().value) {\n if (!updatedData.has(val[0])) {\n entryData.set(val[0], val[1]);\n } else {\n updatedData.set(val[0], val[1]);\n }\n }\n // prepare exit data\n entries = updatedData.entries();\n while (val = entries.next().value) {\n if (!tempMap.has(val[0])) {\n exitdata.set(val[0], val[1]);\n }\n }\n\n // put duplicate data to exit list\n entries = duplicateData.entries();\n while (val = entries.next().value) {\n exitdata.set(val[0], val[1]);\n }\n\n const newSelection = new Selection(this._idGetter);\n newSelection._updatedata = updatedData;\n newSelection._dataObjects = this._dataObjects;\n newSelection._enterdata = entryData;\n newSelection._exitdata = exitdata;\n\n return newSelection;\n }\n\n /**\n * Applies the supplied callback to each data element\n * and returns a new selection.\n *\n * @param {Function} callback Callback to execute on each item.\n * @return {Selection} New selection with data created using callback.\n * @memberof Selection\n */\n append (callback) {\n let currentData;\n let val;\n const dataObjects = new Map();\n const data = new Map();\n\n // select the data to create object\n switch (this._mode) {\n case 'enter':\n currentData = this._enterdata;\n break;\n case 'exit':\n currentData = this._exitdata;\n break;\n default:\n currentData = this._updatedata;\n }\n\n const entries = currentData.entries();\n\n while (val = entries.next().value) {\n dataObjects.set(val[0], callback(val[1]));\n data.set(val[0], val[1]);\n }\n\n const newSelection = new Selection(this._idGetter);\n newSelection._updatedata = data;\n newSelection._dataObjects = dataObjects;\n this._mode = '';\n\n return newSelection;\n }\n\n /**\n * This method returns an enter selection that\n * allows or update operations.\n *\n * @return {Selection} Instance of enter selection.\n * @memberof Selection\n */\n enter () {\n this._mode = 'enter';\n return this;\n }\n\n /**\n * Returns a selection with exit data.\n *\n * @return {Selection} Instance of selection.\n * @memberof Selection\n */\n exit () {\n this._mode = 'exit';\n return this;\n }\n\n /**\n * This method merges the data of one selection with another.\n *\n * @param {Selection} selection Instance of selection.\n * @return {Selection} Modified selection.\n * @memberof Selection\n */\n merge (target) {\n const mergedObjects = new Map();\n const mergedData = new Map();\n let val;\n let entries;\n\n // merge Object and data present in this selection\n entries = this._updatedata.entries();\n while (val = entries.next().value) {\n if (!this._exitdata.has(val[0])) {\n mergedData.set(val[0], val[1]);\n mergedObjects.set(val[0], this._dataObjects.get(val[0]));\n }\n }\n\n // merge object from target selection\n entries = target._updatedata.entries();\n while (val = entries.next().value) {\n if (!(mergedData.has(val[0]) || target._exitdata.has(val[0]))) {\n mergedData.set(val[0], val[1]);\n mergedObjects.set(val[0], target._dataObjects.get(val[0]));\n }\n }\n\n const newSelection = new Selection(this._idGetter);\n newSelection._updatedata = mergedData;\n newSelection._dataObjects = mergedObjects;\n\n return newSelection;\n }\n\n each (fn) {\n let val;\n const entries = this._dataObjects.entries();\n\n while (val = entries.next().value) {\n fn(val[1], this._updatedata.get(val[0]), val[0]);\n }\n }\n\n map (fn) {\n const newdata = new Map();\n let val;\n const entries = this._dataObjects.entries();\n\n while (val = entries.next().value) {\n newdata.set(val[0], fn(val[1], this._updatedata.get(val[0]), val[0]));\n }\n const newSelection = new Selection(this._idGetter);\n newSelection._updatedata = this._updatedata;\n newSelection._dataObjects = newdata;\n\n return newSelection;\n }\n\n remove () {\n let currentData;\n\n switch (this._mode) {\n case 'enter':\n currentData = this._enterdata;\n break;\n case 'exit':\n currentData = this._exitdata;\n break;\n default:\n currentData = this._updatedata;\n }\n\n currentData.clear();\n\n return this;\n }\n\n /**\n * Gets the object bound to a class\n *\n * @return {Object} current data set bound to the class\n * @memberof Selection\n */\n getObjects () {\n const objects = [];\n let val;\n const values = this._dataObjects.values();\n\n while (val = values.next().value) {\n objects.push(val);\n }\n return objects;\n }\n\n}\n\nexport default Selection;\n","export const ORDER_ASCENDING = 'ascending';\nexport const ORDER_DESCENDING = 'descending';\nexport const ORDER_NONE = 'none';\nexport const OFFSET_DIVERGING = 'diverging';\nexport const OFFSET_NONE = 'none';\nexport const OFFSET_EXPAND = 'expand';\nexport const OFFSET_WIGGLE = 'wiggle';\n","/* global window, requestAnimationFrame, cancelAnimationFrame */\nimport { FieldType, DimensionSubtype, DateTimeFormatter, DM_DERIVATIVES, default as DataModel } from 'datamodel';\nimport {\n axisLeft,\n axisRight,\n axisTop,\n axisBottom\n} from 'd3-axis';\nimport {\n symbolCircle,\n symbolCross,\n symbolDiamond,\n symbolSquare,\n symbolStar,\n symbolWye,\n symbolTriangle,\n symbol,\n stack as d3Stack,\n stackOffsetDiverging,\n stackOrderNone,\n stackOrderAscending,\n stackOrderDescending,\n stackOffsetNone,\n stackOffsetExpand,\n stackOffsetWiggle,\n pie,\n arc,\n line,\n curveLinear,\n curveStepAfter,\n curveStepBefore,\n curveStep,\n curveCatmullRom,\n area\n} from 'd3-shape';\nimport { scaleBand } from 'd3-scale';\nimport { nest } from 'd3-collection';\nimport {\n interpolate,\n interpolateRgb,\n piecewise,\n interpolateNumber,\n interpolateHslLong\n} from 'd3-interpolate';\nimport {\n easeCubic,\n easeBounce,\n easePoly,\n easeBack,\n easeCircle,\n easeLinear,\n easeElastic\n} from 'd3-ease';\nimport {\n color,\n rgb,\n hsl\n} from 'd3-color';\nimport { voronoi } from 'd3-voronoi';\nimport Model from 'hyperdis';\nimport { dataSelect } from './DataSystem';\nimport * as STACK_CONFIG from './enums/stack-config';\n\nconst { InvalidAwareTypes } = DataModel;\nconst HTMLElement = window.HTMLElement;\n\nconst isSimpleObject = (obj) => {\n let token;\n if (typeof obj === 'object') {\n if (obj === null) { return false; }\n token = Object.prototype.toString.call(obj);\n if (token === '[object Object]') {\n return (obj.constructor.toString().match(/^function (.*)\\(\\)/m) || [])[1] === 'Object';\n }\n }\n return false;\n};\n\n/**\n * Returns unique id\n * @return {string} Unique id string\n */\nconst\n getUniqueId = () => `id-${new Date().getTime()}${Math.round(Math.random() * 10000)}`;\n\n/**\n * Deep copies an object and returns a new object.\n * @param {Object} o Object to clone\n * @return {Object} New Object.\n */\nconst clone = (o) => {\n const output = {};\n let v;\n for (const key in o) {\n if ({}.hasOwnProperty.call(o, key)) {\n v = o[key];\n output[key] = isSimpleObject(v) ? clone(v) : v;\n }\n }\n return output;\n};\n\n/**\n* Checks the existence of keys in an object\n* @param {Array} keys Set of keys which are to be checked\n* @param {Object} obj whose keys are checked from the set of keys provided\n* @return {Object} Error if the keys are absent, or the object itself\n*/\nconst checkExistence = (keys, obj) => {\n const nonExistentKeys = [];\n keys.forEach((key) => {\n if (key in obj) {\n return;\n }\n nonExistentKeys.push(key);\n });\n return nonExistentKeys;\n};\n\nconst sanitizeIP = {\n typeObj: (keys, obj) => {\n if (typeof obj !== 'object') {\n return Error('Argument type object expected');\n }\n\n const nonExistentKeys = checkExistence(keys, obj);\n if (nonExistentKeys.length) {\n return Error(`Missing keys from parameter ${nonExistentKeys.join(', ')}`);\n }\n return obj;\n },\n\n /* istanbul ignore next */ htmlElem: (elem) => {\n if (!(elem instanceof HTMLElement)) {\n return Error('HTMLElement required');\n }\n return elem;\n }\n};\n\n/**\n * Gets the maximum value from an array of objects for a given property name\n * @param {Array.} data Array of objects\n * @param {string} field Field name\n * @return {number} Maximum value\n */\nconst getMax = (data, field) => Math.max(...data.map(d => d[field]));\n\n/**\n * Gets the minimum value from an array of objects for a given property name\n * @param {Array.} data Array of objects\n * @param {string} field Field name\n * @return {number} Minimum value\n */\nconst getMin = (data, field) => Math.min(...data.map(d => d[field]));\n\n/**\n * Gets the domain from the data based on the field name and type of field\n * @param {Array. | Array.} data Data Array\n * @param {Array.} fields Array of fields from where the domain will be calculated\n * @param {string} fieldType Type of field - nominal, quantitiative, temporal.\n * @return {Array} Usually contains a min and max value if field is quantitative or\n * an array of values if field type is nominal or ordinal\n */\nconst getDomainFromData = (data, fields, fieldType) => {\n let domain;\n const domArr = [];\n data = data[0] instanceof Array ? data : [data];\n switch (fieldType) {\n case DimensionSubtype.CATEGORICAL:\n domain = [].concat(...data.map(arr => arr.map(d => d[fields[0]]).filter(d => d !== undefined)));\n break;\n default:\n for (let i = 0, len = data.length; i < len; i++) {\n const arr = data[i];\n const [field0, field1] = fields;\n const arr0 = arr.filter(d => !isNaN(d[field0]));\n const arr1 = arr.filter(d => !isNaN(d[field1]));\n if (arr0.length || arr1.length) {\n const firstMin = getMin(arr0, field0);\n const secondMin = getMin(arr1, field1);\n const firstMax = getMax(arr0, field0);\n const secondMax = getMax(arr1, field1);\n domArr.push([Math.min(firstMin, secondMin), Math.max(firstMax, secondMax)]);\n }\n }\n domain = domArr.length ? [Math.min(...domArr.map(d => d[0])), Math.max(...domArr.map(d => d[1]))] : [];\n break;\n }\n return domain;\n};\n\nconst sanitizeDomainWhenEqual = (domain) => {\n if (domain[0] === domain[1]) {\n domain[0] = domain[0] > 0 ? 0 : domain[0];\n domain[1] = domain[1] > 0 ? domain[1] : 0;\n }\n return domain;\n};\n\n/**\n * Union Domain values\n * @param {Array.} domains Array of domain values\n * @param {string} fieldType type of field - dimension,measure or datetime.\n * @return {Array} Unioned domain of all domain values.\n */\nconst unionDomain = (domains, fieldType) => {\n let domain = [];\n domains = domains.filter(dom => dom && dom.length);\n if (domains.length) {\n if (fieldType === DimensionSubtype.CATEGORICAL) {\n domain = [].concat(...domains);\n } else {\n domain = [Math.min(...domains.map(d => d[0])), Math.max(...domains.map(d => d[1]))];\n }\n }\n\n return domain;\n};\n\nconst symbolFns = {\n circle: symbolCircle,\n cross: symbolCross,\n diamond: symbolDiamond,\n square: symbolSquare,\n star: symbolStar,\n wye: symbolWye,\n triangle: symbolTriangle\n};\n\nconst easeFns = {\n cubic: easeCubic,\n bounce: easeBounce,\n linear: easeLinear,\n elastic: easeElastic,\n back: easeBack,\n poly: easePoly,\n circle: easeCircle\n};\n\n/**\n * Returns the maximum or minimum points of a compare value from an array of objects.\n * @param {Array} points Array of objects\n * @param {string} compareValue Key in the object on which the comparing will be done.\n * @param {string} minOrMax minimum or maximum.\n * @return {Object} Minimum or maximum point.\n */\nconst getExtremePoint = (points, compareValue, minOrMax) => {\n let extremePoint;\n let point;\n const len = points.length;\n let minOrMaxVal = minOrMax === 'max' ? -Infinity : Infinity;\n let val;\n\n for (let i = 0; i < len; i++) {\n point = points[i];\n val = point[compareValue];\n if (minOrMax === 'min' ? val < minOrMaxVal : val > minOrMaxVal) {\n minOrMaxVal = val;\n extremePoint = point;\n }\n }\n\n return extremePoint;\n};\n\n/**\n * Returns the minimum point of a compare value from an array of objects.\n * @param {Array} points Array of objects\n * @param {string} compareValue Key in the object on which the comparing will be done.\n * @return {Object} Minimum point.\n */\nconst getMinPoint = (points, compareValue) => getExtremePoint(points, compareValue, 'min');\n\n/**\n * Returns the maximum point of a compare value from an array of objects.\n * @param {Array} points Array of objects\n * @param {string} compareValue Key in the object on which the comparing will be done.\n * @return {Object} Maximum point.\n */\nconst getMaxPoint = (points, compareValue) => getExtremePoint(points, compareValue, 'max');\n\n/**\n * Gets the index of the closest value of the given value from the array.\n * @param {Array} arr Array of values\n * @param {number} value Value from which the nearest value will be calculated.\n * @param {string} side side property.\n * @return {number} index of the closest value\n */\n/* istanbul ignore next */const getClosestIndexOf = (arr, value, side) => {\n let low = 0;\n const arrLen = arr.length;\n let high = arrLen - 1;\n\n let mid;\n let d1;\n let d2;\n\n while (low < high) {\n mid = Math.floor((low + high) / 2);\n d1 = Math.abs(arr[mid] - value);\n d2 = Math.abs(arr[mid + 1] - value);\n\n if (d2 <= d1) {\n low = mid + 1;\n } else {\n high = mid;\n }\n }\n\n if (!side) {\n return high;\n }\n\n const highVal = arr[high];\n if (highVal === value) {\n return high;\n } else if (highVal > value) {\n if (high === 0) { return high; }\n return side === 'left' ? high - 1 : high;\n }\n if (high === arr.length - 1) { return high; }\n return side === 'left' ? high : high + 1;\n};\n\nconst getNearestValue = (data, key) => {\n const filterData = data.filter(d => typeof d === 'number');\n return filterData[getClosestIndexOf(filterData, key)];\n};\n\n/**\n * Returns the browser window object\n * @return {Window} Window object\n*/\nconst getWindow = () => window;\n\n/**\n * Returns the browser window object\n * @return {Window} Window object\n*/\nconst reqAnimFrame = (() => requestAnimationFrame)();\n\nconst cancelAnimFrame = (() => cancelAnimationFrame)();\n\n/**\n * Capitalizes the first letter of the word\n * @param {string} text word\n * @return {string} Capitalized word\n */\nconst capitalizeFirst = (text) => {\n text = text.toLowerCase();\n\n return text.replace(/\\w\\S*/g, txt => txt.charAt(0).toUpperCase() + txt.substr(1));\n};\n\n/**\n *\n *\n * @param {*} arr\n */\nconst unique = arr => ([...new Set(arr)]);\n\n/**\n * Gets the minimum difference between two consecutive numbers in an array.\n * @param {Array} arr Array of numbers\n * @param {number} index index of the value\n * @return {number} minimum difference between values\n */\n/* istanbul ignore next */ const getMinDiff = (arr, index) => {\n let diff;\n let uniqueVals;\n if (index !== undefined) {\n uniqueVals = unique(arr.map(d => d[index]));\n } else {\n uniqueVals = unique(arr);\n }\n if (uniqueVals.length > 1) {\n diff = Math.abs(uniqueVals[1] - uniqueVals[0]);\n for (let i = 2, len = uniqueVals.length; i < len; i++) {\n diff = Math.min(diff, Math.abs(uniqueVals[i] - uniqueVals[i - 1]));\n }\n } else {\n diff = uniqueVals[0];\n }\n\n return diff;\n};\n\n/**\n * Returns the class name appended with a given id.\n * @param {string} cls class name\n * @param {string} id unique identifier\n * @param {string} prefix string needed to add before the classname\n * @return {string} qualified class name\n */\n/* istanbul ignore next */const getQualifiedClassName = (cls, id, prefix) => {\n cls = cls.replace(/^\\.*/, '');\n return [`${prefix}-${cls}`, `${prefix}-${cls}-${id}`];\n};\n\n/**\n * This method is used to set the default value for variables\n * without sullying the code with conditional statements.\n *\n * @export\n * @param {any} param The parameter to test.\n * @param {any} value The default value to assign.\n * @return {any} The value.\n */\n/* istanbul ignore next */ const defaultValue = (param, value) => {\n if (typeof param === 'undefined' || (typeof param === 'object' && !param)) {\n return value;\n }\n return param;\n};\n\n/**\n * DESCRIPTION TODO\n *\n * @export\n * @param {Object} graph graph whose dependency order has to be generated\n * @return {Object}\n */\nconst getDependencyOrder = (graph) => {\n const dependencyOrder = [];\n const visited = {};\n const keys = Object.keys(graph);\n /**\n * DESCRIPTION TODO\n *\n * @export\n * @param {Object} name\n * @return {Object}\n */\n const visit = (name) => {\n if (dependencyOrder.length === keys.length) {\n return true;\n }\n visited[name] = true;\n const edges = graph[name];\n for (let e = 0; e < edges.length; e++) {\n const dep = edges[e];\n if (!visited[dep]) {\n visit(dep);\n }\n }\n\n dependencyOrder.push(name);\n return false;\n };\n\n for (let i = 0; i < keys.length; i++) {\n if (visit(keys[i], i)) break;\n }\n\n return dependencyOrder;\n};\n\n/**\n * Iterates over the properties of an object and applies the function\n *\n * @param {any} obj object to be iterated upon\n * @param {any} fn function to be applied on it\n */\nconst objectIterator = (obj, fn) => {\n for (const key in obj) {\n if (Object.hasOwnProperty.call(obj, key)) {\n fn(key, obj);\n }\n }\n};\n\n/**\n * This class creates a d3 voronoi for retrieving the nearest neighbour of any point from a set of two\n * dimensional points\n * @class Voronoi\n */\n/* istanbul ignore next */ class Voronoi {\n /**\n * Initialize the voronoi with the data given.\n * @param {Array.} data Array of points.\n */\n constructor (data = []) {\n this._voronoi = voronoi().x(d => d.x).y(d => d.y);\n this.data(data);\n }\n\n /**\n * Sets the data to voronoi\n * @param {Array.} data Array of objects.\n * @return {Voronoi} Instance of voronoi.\n */\n data (data) {\n if (data) {\n this._voronoiFn = this._voronoi(data);\n }\n return this;\n }\n\n /**\n * Finds the closest point to the x and y position given.\n * @param {number} x x value\n * @param {number} y y value\n * @param {number} radius search radius.\n * @return {Object} Details of the nearest point.\n */\n find (x, y, radius) {\n return this._voronoiFn.find(x, y, radius);\n }\n}\n\nconst addListenerToNamespace = (namespaceInf, fn, context) => {\n let key = namespaceInf.key;\n const namespace = namespaceInf.namespace;\n if (namespace) {\n !context._listeners[namespace] && (context._listeners[namespace] = []);\n if (!key) {\n key = Object.keys(context._listeners[namespace]).length;\n }\n context._listeners[namespace][key] = fn;\n } else {\n key = Object.keys(context._listeners).length;\n context._listeners[key] = fn;\n }\n};\n\n/**\n *\n *\n * @param {*} obj\n * @param {*} fields\n *\n */\nconst getObjProp = (obj, ...fields) => {\n if (obj === undefined || obj === null) {\n return obj;\n }\n let retObj = obj;\n for (let i = 0, len = fields.length; i < len; i++) {\n retObj = retObj[fields[i]];\n if (retObj === undefined || retObj === null) {\n break;\n }\n }\n return retObj;\n};\n\n/**\n * Methods to handle changes to table configuration and reactivity are handled by this\n * class.\n */\n/**\n * Common store class\n *\n * @class Store\n */\nclass Store {\n /**\n * Creates an instance of Store.\n * @param {Object} config The object to create the state store with.\n * @memberof Store\n */\n constructor (config) {\n // create reactive model\n this.model = Model.create(config);\n this._listeners = {};\n }\n\n /**\n * This method returns a plain JSON object\n * with all the fields in the state store.\n *\n * @return {Object} Serialized representation of state store.\n * @memberof Store\n */\n serialize () {\n return this.model.serialize();\n }\n\n /**\n * This method is used to update the value of a property in the state store.\n *\n * @param {string} propName The name of the property.\n * @param {number} value The new value of the property.\n * @memberof Store\n */\n commit (propName, value) {\n // check if appropriate enum has been used\n this.model.prop(propName, value);\n }\n\n /**\n * This method is used to register a callbacl that will execute\n * when one or more properties change.\n *\n * @param {string | Array} propNames name of property or array of props.\n * @param {Function} callBack The callback to execute.\n * @memberof Store\n */\n /* istanbul ignore next */registerChangeListener (propNames, callBack, instantCall, namespaceInf = {}) {\n let props = propNames;\n if (!Array.isArray(propNames)) {\n props = [propNames];\n }\n const fn = this.model.next(props, callBack, instantCall);\n addListenerToNamespace(namespaceInf, fn, this);\n return this;\n }\n /**\n * This method is used to register a callbacl that will execute\n * when one or more properties change.\n *\n * @param {string | Array} propNames name of property or array of props.\n * @param {Function} callBack The callback to execute.\n * @memberof Store\n */\n /* istanbul ignore next */ registerImmediateListener (propNames, callBack, instantCall, namespaceInf = {}) {\n let props = propNames;\n if (!Array.isArray(propNames)) {\n props = [propNames];\n }\n const fn = this.model.on(props, callBack, instantCall);\n addListenerToNamespace(namespaceInf, fn, this);\n return this;\n }\n /**\n * This method is used to get the name of the property\n * from the state store.\n *\n * @param {string} propName The name of the field in state store.\n * @return {any} The value of the field.\n * @memberof Store\n */\n get (propName) {\n return this.model.prop(propName);\n }\n\n /**\n * This method is used to register a computed property that is computed every time\n * the store value changes.\n *\n * @param {string} propName The name of the property to create.\n * @param {Function} callBack The function to execute when depemdent props change.\n * @memberof Store\n */\n computed (propName, callBack) {\n return this.model.calculatedProp(propName, callBack);\n }\n\n append (propName, value) {\n this.model.append(propName, value);\n return this;\n }\n\n unsubscribeAll () {\n Object.values(this._listeners).forEach(fn => fn());\n return this;\n }\n\n unsubscribe (namespaceInf = {}) {\n const { namespace, key } = namespaceInf;\n const listeners = this._listeners[namespace];\n if (key) {\n const fn = getObjProp(listeners, key);\n fn && fn();\n } else {\n Object.values(listeners).forEach(fn => fn());\n this._listeners[namespace] = [];\n }\n return this;\n }\n}\n\n/**\n * Sanitize an input number / string mixed number. Currently dot in the no is not supported.\n *\n * @param {number | string} val pure number or string mixed number\n * @return {number | null} Number if it can be extracted. Otherwise null\n */\nconst intSanitizer = (val) => {\n const arr = val.toString().match(/(\\d+)(px)*/g);\n if (!arr) {\n // If only characters are passed\n return null;\n }\n\n return parseInt(arr[0], 10);\n};\n\n/**\n * Setter getter creator from config\n * Format\n * PROPERTRY_NAME: {\n * value: // default value of the property,\n * meta: {\n * typeCheck: // The setter value will be checked using this. If the value is function then the setter value\n * // is passed as args. (Optional)\n * typeExpected: // The output of typecheck action will be tested against this. Truthy value will set the\n * // value to the setter\n * sanitizaiton: // Need for sanitization before type is checked\n * }\n * }\n *\n * @param {Object} holder an empty object on which the getters and setters will be mounted\n * @param {Object} options options config based on which the getters and setters are determined.\n * @param {Hyperdis} model optional model to attach the property. If not sent new moel is created.\n * @return {Array}\n */\nconst transactor = (holder, options, model, namespaceInf = {}) => {\n let conf;\n const store = model && model instanceof Model ? model : Model.create({});\n const stateProps = {};\n for (const prop in options) {\n if ({}.hasOwnProperty.call(options, prop)) {\n conf = options[prop];\n const addAsMethod = conf.meta ? conf.meta.addAsMethod : true;\n let nameSpaceProp;\n const namespace = namespaceInf.namespace;\n if (namespace) {\n nameSpaceProp = `${namespace}.${prop}`;\n } else {\n nameSpaceProp = prop;\n }\n\n stateProps[prop] = conf.value;\n if (addAsMethod !== false) {\n holder[prop] = ((context, meta, nsProp) => (...params) => {\n let val;\n let compareTo;\n const paramsLen = params.length;\n const prevVal = store.prop(nsProp);\n if (paramsLen) {\n // If parameters are passed then it's a setter\n const spreadParams = meta && meta.spreadParams;\n val = params;\n const values = [];\n if (meta) {\n for (let i = 0; i < paramsLen; i++) {\n val = params[i];\n const sanitization = meta.sanitization && (spreadParams ? meta.sanitization[i] :\n meta.sanitization);\n const typeCheck = meta.typeCheck && (spreadParams ? meta.typeCheck[i] : meta.typeCheck);\n if (sanitization && typeof sanitization === 'function') {\n // Sanitize if required\n val = sanitization(val, prevVal, holder);\n }\n\n if (typeCheck) {\n // Checking if a setter is valid\n if (typeof typeCheck === 'function') {\n let typeExpected = meta.typeExpected;\n if (typeExpected && spreadParams) {\n typeExpected = typeExpected[i];\n }\n if (typeExpected) {\n compareTo = typeExpected;\n } else {\n compareTo = true;\n }\n\n if (typeCheck(val) === compareTo) {\n values.push(val);\n }\n } else if (typeof typeCheck === 'string') {\n if (typeCheck === 'constructor') {\n const typeExpected = spreadParams ? meta.typeExpected[i] :\n meta.typeExpected;\n if (val && (val.constructor.name === typeExpected)) {\n values.push(val);\n }\n }\n } else {\n // context.prop(key, val);\n values.push(val);\n }\n } else {\n values.push(val);\n }\n }\n const preset = meta.preset;\n const oldValues = context.prop(nsProp);\n preset && preset(values[0], holder);\n if (spreadParams) {\n oldValues.forEach((value, i) => {\n if (values[i] === undefined) {\n values[i] = value;\n }\n });\n }\n values.length && context.prop(nsProp, spreadParams ? values : values[0]);\n } else {\n context.prop(nsProp, spreadParams ? val : val[0]);\n }\n return holder;\n }\n // No parameters are passed hence its a getter\n return context.prop(nsProp);\n })(store, conf.meta, nameSpaceProp);\n }\n }\n }\n\n if (namespaceInf.namespace === undefined) {\n store.append(stateProps);\n } else {\n const namespace = namespaceInf.namespace;\n store.append(namespace, stateProps);\n }\n\n return [holder, store];\n};\n\n/**\n *\n *\n * @param {*} context\n * @param {*} props\n */\nconst generateGetterSetters = (context, props) => {\n Object.entries(props).forEach((propInfo) => {\n const prop = propInfo[0];\n const typeChecker = propInfo[1].typeChecker;\n const defVal = propInfo[1].defaultValue;\n const sanitization = propInfo[1].sanitization;\n const preset = propInfo[1].preset;\n const prototype = context.constructor.prototype;\n if (!(Object.hasOwnProperty.call(prototype, prop))) {\n if (defVal) {\n context[`_${prop}`] = defVal;\n }\n context[prop] = (...params) => {\n if (params.length) {\n let value = params[0];\n if (sanitization) {\n value = sanitization(context, params[0]);\n }\n if (preset) {\n preset(context, value);\n }\n if (typeChecker && !typeChecker(value)) {\n return context[`_${prop}`];\n }\n context[`_${prop}`] = value;\n return context;\n } return context[`_${prop}`];\n };\n }\n });\n};\n\n/**\n *\n *\n * @param {*} arr\n * @param {*} prop\n */\nconst getArraySum = (arr, prop) => arr.reduce((total, elem) => {\n total += prop ? elem[prop] : elem;\n return total;\n}, 0);\n\n/**\n *\n *\n * @param {*} arr1\n * @param {*} arr2\n *\n */\nconst arraysEqual = (arr1, arr2) => {\n if (arr1.length !== arr2.length) { return false; }\n for (let i = arr1.length; i >= 0; i--) {\n if (arr1[i] !== arr2[i]) { return false; }\n }\n\n return true;\n};\n\n/* eslint valid-typeof:0 */\n/**\n * Returns a validation function which can be used to validate variables against a type and value\n *\n * @param {any} type type of value that the object should have\n * @return {Object} validation function\n */\nconst isEqual = type => (oldVal, newVal) => {\n if (type === 'Array') {\n if (!oldVal) {\n return false;\n }\n return arraysEqual(oldVal, newVal);\n } else if (type === 'Object') {\n return Object.is(oldVal, newVal);\n } return oldVal === newVal;\n};\n\n/**\n * Description @todo\n *\n * @param {any} transactionModel @todo\n * @param {any} transactionEndpoint @todo\n * @param {any} transactionItems @todo\n * @return {any} @todo\n */\nconst enableChainedTransaction = (transactionModel, transactionEndpoint, transactionItems) =>\n transactionItems.forEach(item => transactionModel.on(item, ([, newVal]) => transactionEndpoint[item](newVal)));\n\n/**\n * Chceks if the element is istanceof HTMLElement\n *\n * @param {Object} elem any JS Object\n */\nconst isHTMLElem = elem => elem instanceof HTMLElement;\n\nconst ERROR_MSG = {\n INTERFACE_IMPL: 'Method not implemented'\n};\n\n/**\n * Merges the sink object in the source by recursively iterating through the object properties\n * @param {Object} source Source Object\n * @param {Object} sink Sink Object\n * @return {Object} Merged object\n */\nconst mergeRecursive = (source, sink) => {\n for (const prop in sink) {\n if (isSimpleObject(source[prop]) && isSimpleObject(sink[prop])) {\n mergeRecursive(source[prop], sink[prop]);\n } else if (sink[prop] instanceof Object && sink[prop].constructor === Object) {\n source[prop] = {};\n mergeRecursive(source[prop], sink[prop]);\n } else {\n source[prop] = sink[prop];\n }\n }\n return source;\n};\n\n/**\n * Creates a selection set from a data set with corresponding attributes\n *\n * @export\n * @param {Selection} sel contains previous selection\n * @param {Object} appendObj Object to be appended\n * @param {Array} data Data based on which the selection is entered/updated/removed\n * @param {Object} [attrs={}] Attributes to be set on the data\n * @return {Selection} Merged selection\n */\nconst createSelection = (sel, appendObj, data, idFn) => {\n let selection = sel || dataSelect(idFn);\n\n selection = selection.data(data);\n\n const enter = selection.enter().append(appendObj);\n const mergedSelection = enter.merge(selection);\n\n const exitSelection = selection.exit();\n exitSelection.getObjects().forEach(inst => inst.remove());\n exitSelection.remove();\n return mergedSelection;\n};\n\nconst interpolateArray = (data, fitCount) => {\n const linearInterpolate = function (before, after, atPoint) {\n return before + (after - before) * atPoint;\n };\n const newData = [];\n const springFactor = ((data.length - 1) / (fitCount - 1));\n newData[0] = data[0]; // for new allocation\n for (let i = 1; i < fitCount - 1; i++) {\n const tmp = i * springFactor;\n const before = (Math.floor(tmp)).toFixed();\n const after = (Math.ceil(tmp)).toFixed();\n const atPoint = tmp - before;\n newData[i] = linearInterpolate(data[before], data[after], atPoint);\n }\n newData[fitCount - 1] = data[data.length - 1]; // for new allocation\n return newData;\n};\n\n/**\n *\n *\n * @param {*} fn\n */\nconst nextFrame = (fn) => {\n setTimeout(() => {\n fn();\n }, 0);\n};\n\n/**\n *\n *\n * @param {*} angle\n */\nconst angleToRadian = angle => angle * Math.PI / 180;\n\n/**\n *\n *\n * @param {*} newName\n * @param {*} oldName\n */\nconst replaceCSSPrefix = () => {\n // @todo\n};\n\n/**\n * Gets the interpolator function from d3 color\n *\n */\nconst interpolator = () => interpolate;\n\n/**\n * Gets the number interpolator from d3 color\n *\n */\nconst numberInterpolator = () => interpolateNumber;\n\n/**\n * Gets the rgb interpolator from d3 color\n *\n */\nconst colorInterpolator = () => interpolateRgb;\n\n/**\n * Gets the hsl interpolator from d3 color\n *\n */\nconst hslInterpolator = () => interpolateHslLong;\n\nconst transformColors = () => ({\n color,\n rgb,\n hsl\n});\n\n/**\n * Gets the piecewise interpolator from d3 color\n *\n */\nconst piecewiseInterpolator = () => piecewise;\n\nfunction hue2rgb (p, q, t) {\n if (t < 0) t += 1;\n if (t > 1) t -= 1;\n if (t < 1 / 6) return p + (q - p) * 6 * t;\n if (t < 1 / 2) return q;\n if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;\n return p;\n}\n\n /**\n * Converts an HSL color value to RGB. Conversion formula\n * adapted from http://en.wikipedia.org/wiki/HSL_color_space.\n * Assumes h, s, and l are contained in the set [0, 1] and\n * returns r, g, and b in the set [0, 255].\n *\n * @param Number h The hue\n * @param Number s The saturation\n * @param Number l The lightness\n * @return Array The RGB representation\n */\nconst hslToRgb = (h, s, l, a = 1) => {\n let r;\n let g;\n let b;\n\n if (s === 0) {\n r = g = b = l; // achromatic\n } else {\n const q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n const p = 2 * l - q;\n\n r = hue2rgb(p, q, h + 1 / 3);\n g = hue2rgb(p, q, h);\n b = hue2rgb(p, q, h - 1 / 3);\n }\n\n return [r * 255, g * 255, b * 255, a];\n};\n\n /**\n * Converts an RGB color value to HSV. Conversion formula\n * adapted from http://en.wikipedia.org/wiki/HSV_color_space.\n * Assumes r, g, and b are contained in the set [0, 255] and\n * returns h, s, and v in the set [0, 1].\n *\n * @param Number r The red color value\n * @param Number g The green color value\n * @param Number b The blue color value\n * @return Array The HSV representation\n */\nconst rgbToHsv = (r, g, b, a = 1) => {\n r = +r; g = +g; b = +b; a = +a;\n r /= 255; g /= 255; b /= 255;\n const max = Math.max(r, g, b);\n const min = Math.min(r, g, b);\n let h;\n let s;\n const l = (max + min) / 2;\n\n if (max === min) {\n h = s = 0; // achromatic\n } else {\n const d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n switch (max) {\n case r: h = (g - b) / d + (g < b ? 6 : 0); break;\n case g: h = (b - r) / d + 2; break;\n case b: h = (r - g) / d + 4; break;\n default: break;\n }\n h /= 6;\n }\n return [h, s, l, a];\n};\n\n /**\n * Converts an HSV color value to RGB. Conversion formula\n * adapted from http://en.wikipedia.org/wiki/HSV_color_space.\n * Assumes h, s, and v are contained in the set [0, 1] and\n * returns r, g, and b in the set [0, 255].\n *\n * @param Number h The hue\n * @param Number s The saturation\n * @param Number v The value\n * @return Array The RGB representation\n */\nconst hsvToRgb = (h, s, v, a = 1) => {\n let r;\n let g;\n let b;\n\n const i = Math.floor(h * 6);\n const f = h * 6 - i;\n const p = v * (1 - s);\n const q = v * (1 - f * s);\n const t = v * (1 - (1 - f) * s);\n\n switch (i % 6) {\n case 0: r = v; g = t; b = p; break;\n case 1: r = q; g = v; b = p; break;\n case 2: r = p; g = v; b = t; break;\n case 3: r = p; g = q; b = v; break;\n case 4: r = t; g = p; b = v; break;\n case 5: r = v; g = p; b = q; break;\n default: break;\n }\n\n return [r * 255, g * 255, b * 255, a];\n};\n\nconst hexToHsv = (hex) => {\n const shorthandRegex = /^#?([a-f\\d])([a-f\\d])([a-f\\d])$/i;\n hex = hex.replace(shorthandRegex, (m, r, g, b) => r + r + g + g + b + b);\n\n const result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex);\n return result ? rgbToHsv(parseInt(result[1], 16), parseInt(result[2], 16), parseInt(result[3], 16)) : '';\n};\n\nconst detectColor = (col) => {\n const matchRgb = /rgb\\((\\d{1,3}), (\\d{1,3}), (\\d{1,3})\\)/;\n const matchHsl = /hsl\\((\\d+),\\s*([\\d.]+)%,\\s*([\\d.]+)%\\)/g;\n\n // Source : https://gist.github.com/sethlopezme/d072b945969a3cc2cc11\n // eslint-disable-next-line\n const matchRgba = /rgba?\\(((25[0-5]|2[0-4]\\d|1\\d{1,2}|\\d\\d?)\\s*,\\s*?){2}(25[0-5]|2[0-4]\\d|1\\d{1,2}|\\d\\d?)\\s*,?\\s*([01]\\.?\\d*?)?\\)/;\n // eslint-disable-next-line\n const matchHsla = /^hsla\\((\\d.+),\\s*([\\d.]+)%,\\s*([\\d.]+)%,\\s*(\\d*(?:\\.\\d+)?)\\)$/;\n const matchHex = /^#([0-9a-f]{3}){1,2}$/i;\n\n if (matchRgb.test(col) || matchRgba.test(col)) {\n return 'rgb';\n } else if (matchHsl.test(col) || matchHsla.test(col)) {\n return 'hsl';\n } else if (matchHex.test(col)) {\n return 'hex';\n } return col;\n};\n\n/**\n *\n *\n * @param {*} model\n * @param {*} propModel\n *\n */\nconst filterPropagationModel = (model, propModel, measures) => {\n const { data, schema } = propModel.getData();\n let filteredModel;\n if (schema.length) {\n const fieldMap = model.getFieldsConfig();\n filteredModel = model.select((fields) => {\n const include = data.some(row => schema.every((propField, idx) => {\n if (!measures && (!(propField.name in fieldMap) ||\n fieldMap[propField.name].def.type === FieldType.MEASURE)) {\n return true;\n }\n return row[idx] === fields[propField.name].valueOf();\n }));\n return include;\n }, {\n saveChild: false\n });\n } else {\n filteredModel = propModel;\n }\n\n return filteredModel;\n};\n\nconst assembleModelFromIdentifiers = (model, identifiers) => {\n let schema = [];\n let data;\n const fieldMap = model.getFieldsConfig();\n if (identifiers.length) {\n const fields = identifiers[0];\n const len = fields.length;\n for (let i = 0; i < len; i++) {\n const field = fields[i];\n const fieldObj = fieldMap[field] && Object.assign({}, fieldMap[field].def);\n if (fieldObj) {\n schema.push(Object.assign(fieldObj));\n }\n }\n\n data = [];\n const header = identifiers[0];\n for (let i = 1; i < identifiers.length; i += 1) {\n const vals = identifiers[i];\n const temp = {};\n vals.forEach((fieldVal, cIdx) => {\n temp[header[cIdx]] = fieldVal;\n });\n data.push(temp);\n }\n } else {\n data = [];\n schema = [];\n }\n\n return new model.constructor(data, schema);\n};\n\n/**\n *\n *\n * @param {*} dataModel\n * @param {*} criteria\n *\n */\nconst getDataModelFromRange = (dataModel, criteria, mode) => {\n if (criteria === null) {\n return null;\n }\n const selFields = Object.keys(criteria);\n const selFn = fields => selFields.every((field) => {\n const val = fields[field].value;\n const range = criteria[field][0] instanceof Array ? criteria[field][0] : criteria[field];\n if (typeof range[0] === 'string') {\n return range.find(d => d === val) !== undefined;\n }\n return range ? val >= range[0] && val <= range[1] : true;\n });\n\n return dataModel.select(selFn, {\n saveChild: false,\n mode\n });\n};\n\n/**\n *\n *\n * @param {*} dataModel\n * @param {*} identifiers\n *\n */\nconst getDataModelFromIdentifiers = (dataModel, identifiers, mode) => {\n let filteredDataModel;\n if (identifiers instanceof Array) {\n const fieldsConfig = dataModel.getFieldsConfig();\n\n const dataArr = identifiers.slice(1, identifiers.length);\n if (identifiers instanceof Function) {\n filteredDataModel = identifiers(dataModel, {}, false);\n } else if (identifiers instanceof Array && identifiers[0].length) {\n const filteredSchema = identifiers[0].filter(d => d in fieldsConfig);\n filteredDataModel = dataModel.select((fields) => {\n let include = true;\n filteredSchema.forEach((propField, idx) => {\n const value = fields[propField].valueOf();\n const index = dataArr.findIndex(d => d[idx] === value);\n include = include && index !== -1;\n });\n return include;\n }, {\n saveChild: false,\n mode\n });\n } else {\n filteredDataModel = dataModel.select(() => false, {\n saveChild: false,\n mode\n });\n }\n } else {\n filteredDataModel = getDataModelFromRange(dataModel, identifiers, mode);\n }\n return filteredDataModel;\n};\n\n/**\n *\n *\n * @param {*} context\n * @param {*} listenerMap\n */\nconst registerListeners = (context, listenerMap, ...params) => {\n const propListenerMap = listenerMap(context, ...params);\n for (const key in propListenerMap) {\n if ({}.hasOwnProperty.call(propListenerMap, key)) {\n const namespace = params[0];\n let ns = null;\n if (namespace) {\n ns = namespace.local;\n }\n const mapObj = propListenerMap[key];\n const propType = mapObj.type;\n const props = mapObj.props;\n const listenerFn = mapObj.listener;\n context.store()[propType](props, listenerFn, false, {\n namespace: ns\n });\n }\n }\n};\n\nconst isValidValue = value => !isNaN(value) && value !== -Infinity && value !== Infinity;\n/**\n *\n *\n * @param {*} str\n *\n */\nconst escapeHTML = (str) => {\n const htmlEscapes = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": ''',\n '/': '/'\n };\n const htmlEscaper = /[&<>\"'/]/g;\n return (`${str}`).replace(htmlEscaper, match => htmlEscapes[match]);\n};\n\n/**\n *\n *\n * @param {*} arr\n */\nconst transposeArray = arr => arr[0].map((col, i) => arr.map(row => row[i]));\nconst toArray = arr => (arr instanceof Array ? arr : [arr]);\nconst extendsClass = (cls, extendsFrom, found) => {\n if (!cls) {\n return false;\n }\n const prototype = cls.prototype;\n if (prototype instanceof extendsFrom) {\n found = true;\n } else {\n found = extendsClass(prototype, extendsFrom, found);\n }\n return found;\n};\n\n/**\n *\n * @param {*} dm1\n * @param {*} dm2\n */\nconst concatModels = (dm1, dm2) => {\n const dataObj1 = dm1.getData();\n const dataObj2 = dm2.getData();\n const data1 = dataObj1.data;\n const data2 = dataObj2.data;\n const schema1 = dataObj1.schema;\n const schema2 = dataObj2.schema;\n const tuples1 = {};\n const tuples2 = {};\n const commonTuples = {};\n for (let i = 0; i < data1.length; i++) {\n for (let ii = 0; ii < data2.length; ii++) {\n const row1 = data1[i];\n const row2 = data2[ii];\n const dim1Values = row1.filter((d, idx) => schema1[idx].type === FieldType.DIMENSION);\n const dim2Values = row2.filter((d, idx) => schema2[idx].type === FieldType.DIMENSION);\n const allDimSame = dim1Values.every(value => dim2Values.indexOf(value) !== -1);\n if (allDimSame) {\n const key = dim1Values.join();\n !commonTuples[key] && (commonTuples[key] = {});\n row1.forEach((value, idx) => {\n commonTuples[key][schema1[idx].name] = value;\n });\n row2.forEach((value, idx) => {\n commonTuples[key][schema2[idx].name] = value;\n });\n } else {\n const dm1Key = dim1Values.join();\n const dm2Key = dim2Values.join();\n if (!commonTuples[dm1Key] && !commonTuples[dm2Key]) {\n !tuples1[dm1Key] && (tuples1[dm1Key] = {});\n !tuples2[dm2Key] && (tuples2[dm2Key] = {});\n row1.forEach((value, idx) => {\n tuples1[dm1Key][schema1[idx].name] = value;\n });\n row2.forEach((value, idx) => {\n tuples2[dm2Key][schema2[idx].name] = value;\n });\n }\n }\n }\n }\n\n const commonSchema = [...schema1, ...schema2.filter(s2 => schema1.findIndex(s1 => s1.name === s2.name) === -1)];\n const data = [...Object.values(tuples1), ...Object.values(tuples2), ...Object.values(commonTuples)];\n return [data, commonSchema];\n};\n\nconst getSymbol = type => symbol().type(symbolFns[type]);\n\nconst stackOrders = {\n [STACK_CONFIG.ORDER_NONE]: stackOrderNone,\n [STACK_CONFIG.ORDER_ASCENDING]: stackOrderAscending,\n [STACK_CONFIG.ORDER_DESCENDING]: stackOrderDescending\n};\nconst stackOffsets = {\n [STACK_CONFIG.OFFSET_DIVERGING]: stackOffsetDiverging,\n [STACK_CONFIG.OFFSET_NONE]: stackOffsetNone,\n [STACK_CONFIG.OFFSET_EXPAND]: stackOffsetExpand,\n [STACK_CONFIG.OFFSET_WIGGLE]: stackOffsetWiggle\n};\n\n// eslint-disable-next-line require-jsdoc\nconst stack = params => d3Stack().keys(params.keys).offset(stackOffsets[params.offset])\n .order(stackOrders[params.order])(params.data);\n\n/**\n * Groups the data into a hierarchical tree structure based on one or more fields.\n * @param { Object } params Configuration properties for nesting data\n * @param { Array. } params.data Data which needs to be grouped\n * @param { Array. } params.keys Field indices by which the data will be grouped\n * @return { Array. } Grouped data array\n */\nconst nestCollection = (params) => {\n const nestFn = nest();\n params.keys.forEach(key => nestFn.key(d => d[key]));\n return nestFn.entries(params.data);\n};\n\nconst pathInterpolators = {\n curveLinear,\n curveStepAfter,\n curveStepBefore,\n curveStep,\n curveCatmullRom,\n stepAfter: curveStepAfter,\n catmullRom: curveCatmullRom,\n step: curveStep,\n stepBefore: curveStepBefore,\n linear: curveLinear\n};\n\nconst Symbols = {\n axisLeft,\n axisRight,\n axisTop,\n axisBottom,\n line,\n area,\n pie,\n arc,\n nest\n};\n\nconst Scales = {\n band: scaleBand\n};\n\nconst getSmallestDiff = (points) => {\n points = points.sort((a, b) => a - b);\n let minDiff = points[1] - points[0];\n for (let i = 2; i < points.length; i++) {\n minDiff = Math.min(minDiff, points[i] - points[i - 1]);\n }\n\n return minDiff;\n};\n\nconst timeFormats = {\n millisecond: '%A, %b %e, %H:%M:%S.%L',\n second: '%A, %b %e, %H:%M:%S',\n minute: '%A, %b %e, %H:%M',\n hour: '%A, %b %e, %H:%M',\n day: '%A, %b %e, %Y',\n month: '%B %Y',\n year: '%Y'\n};\n\nconst timeDurations = [\n ['millisecond', 'second', 'minute', 'hour', 'day', 'month', 'year'],\n [1, 1000, 60000, 3600000, 86400000, 2592000000, 31536000000]\n];\n\nconst getNearestInterval = (interval) => {\n const index = getClosestIndexOf(timeDurations[1], interval);\n return timeDurations[0][index];\n};\n\nconst formatTemporal = (value, interval) => {\n const nearestInterval = getNearestInterval(interval);\n return DateTimeFormatter.formatAs(value, timeFormats[nearestInterval]);\n};\n\nconst temporalFields = (dataModel) => {\n const filteredFields = {};\n Object.entries(dataModel.getFieldspace().getDimension()).forEach(([fieldName, fieldObj]) => {\n if (fieldObj.subtype() === DimensionSubtype.TEMPORAL) {\n filteredFields[fieldName] = fieldObj;\n }\n });\n return filteredFields;\n};\n\nconst require = (lookupWhat, lookupDetails) => ({\n resolvable: (store) => {\n const lookupTarget = store[lookupWhat];\n const depArr = lookupDetails.slice(0, lookupDetails.length - 1);\n const fn = lookupDetails[lookupDetails.length - 1]; // fn\n\n const deps = depArr.map(str => lookupTarget[str]);\n return {\n fn: fn(...deps),\n depArr\n };\n }\n});\n\nconst nextAnimFrame = window.requestAnimationFrame || window.webkitRequestAnimationFrame ||\n window.mozRequestAnimationFrame || window.oRequestAnimationFrame || window.msRequestAnimationFrame ||\n function (callback) {\n setTimeout(callback, 16);\n };\n\nconst getValueParser = config => (val) => {\n if (val instanceof InvalidAwareTypes) {\n return val in config ? config[val] : `${val}`;\n }\n return val;\n};\n\nconst retrieveNearestGroupByReducers = (dataModel, ...measureFieldNames) => {\n const filteredReducers = {};\n if (dataModel instanceof DataModel) {\n const derivations = [...dataModel.getDerivations().reverse(), ...dataModel.getAncestorDerivations().reverse()];\n const nearestReducers = defaultValue(\n getObjProp(derivations.find(derv => derv.op === DM_DERIVATIVES.GROUPBY), 'criteria'), {});\n\n const measures = dataModel.getFieldspace().getMeasure();\n measureFieldNames = measureFieldNames.length ? measureFieldNames : Object.keys(measures);\n measureFieldNames.forEach((measureName) => {\n if (nearestReducers[measureName]) {\n filteredReducers[measureName] = nearestReducers[measureName];\n } else {\n const measureField = measures[measureName];\n if (measureField) {\n filteredReducers[measureName] = measureField.defAggFn();\n }\n }\n });\n }\n return filteredReducers;\n};\n\nconst retrieveFieldDisplayName = (dm, fieldName) => dm.getFieldspace().fieldsObj()[fieldName].displayName();\n/**\n * Fetches the nearest sort operation details by traversing the chain of parent DataModels\n * @param {Object} dataModel Instance of DataModel\n *\n * @return {Array|null} sort criteria, null if no sort operation found\n */\nconst nearestSortingDetails = (dataModel) => {\n const allDerivations = [...dataModel.getAncestorDerivations(), ...dataModel.getDerivations()];\n const nearestSortDerivation = allDerivations.reverse().find(derivation => derivation.op === DM_DERIVATIVES.SORT);\n\n return nearestSortDerivation ? nearestSortDerivation.criteria : null;\n};\n\nexport {\n getValueParser,\n require,\n Scales,\n Symbols,\n pathInterpolators,\n stack,\n nestCollection,\n getSymbol,\n transformColors,\n detectColor,\n hexToHsv,\n hslToRgb,\n rgbToHsv,\n hsvToRgb,\n concatModels,\n toArray,\n angleToRadian,\n escapeHTML,\n generateGetterSetters,\n getArraySum,\n interpolator,\n piecewiseInterpolator,\n getDataModelFromIdentifiers,\n getDataModelFromRange,\n colorInterpolator,\n numberInterpolator,\n ERROR_MSG,\n reqAnimFrame,\n nextAnimFrame,\n filterPropagationModel,\n transposeArray,\n cancelAnimFrame,\n getMax,\n getMin,\n getDomainFromData,\n getUniqueId,\n mergeRecursive,\n unionDomain,\n symbolFns,\n easeFns,\n clone,\n isEqual,\n interpolateArray,\n getMinPoint,\n defaultValue,\n getMaxPoint,\n getClosestIndexOf,\n Voronoi,\n checkExistence,\n sanitizeIP,\n getMinDiff,\n capitalizeFirst,\n getWindow,\n getQualifiedClassName,\n Store,\n getDependencyOrder,\n objectIterator,\n intSanitizer,\n transactor,\n enableChainedTransaction,\n isHTMLElem,\n isSimpleObject,\n nextFrame,\n registerListeners,\n replaceCSSPrefix,\n getObjProp,\n extendsClass,\n assembleModelFromIdentifiers,\n isValidValue,\n hslInterpolator,\n getSmallestDiff,\n getNearestValue,\n retrieveNearestGroupByReducers,\n nearestSortingDetails,\n createSelection,\n formatTemporal,\n temporalFields,\n retrieveFieldDisplayName,\n sanitizeDomainWhenEqual\n};\n","export function linear(t) {\n return +t;\n}\n","export function circleIn(t) {\n return 1 - Math.sqrt(1 - t * t);\n}\n\nexport function circleOut(t) {\n return Math.sqrt(1 - --t * t);\n}\n\nexport function circleInOut(t) {\n return ((t *= 2) <= 1 ? 1 - Math.sqrt(1 - t * t) : Math.sqrt(1 - (t -= 2) * t) + 1) / 2;\n}\n","import Selection from './selection';\n/**\n * This function applies a selection operation on a data array.\n *\n * @export\n * @param {Array} [data=[]] The data array to be observed.\n * @return {Selection} Instance of a selection.\n */\nexport default function dataSelect (idFn) {\n return new Selection(idFn);\n}\n\n","import {path} from \"d3-path\";\nimport circle from \"./symbol/circle\";\nimport cross from \"./symbol/cross\";\nimport diamond from \"./symbol/diamond\";\nimport star from \"./symbol/star\";\nimport square from \"./symbol/square\";\nimport triangle from \"./symbol/triangle\";\nimport wye from \"./symbol/wye\";\nimport constant from \"./constant\";\n\nexport var symbols = [\n circle,\n cross,\n diamond,\n square,\n star,\n triangle,\n wye\n];\n\nexport default function() {\n var type = constant(circle),\n size = constant(64),\n context = null;\n\n function symbol() {\n var buffer;\n if (!context) context = buffer = path();\n type.apply(this, arguments).draw(context, +size.apply(this, arguments));\n if (buffer) return context = null, buffer + \"\" || null;\n }\n\n symbol.type = function(_) {\n return arguments.length ? (type = typeof _ === \"function\" ? _ : constant(_), symbol) : type;\n };\n\n symbol.size = function(_) {\n return arguments.length ? (size = typeof _ === \"function\" ? _ : constant(+_), symbol) : size;\n };\n\n symbol.context = function(_) {\n return arguments.length ? (context = _ == null ? null : _, symbol) : context;\n };\n\n return symbol;\n}\n","import ascending from \"./ascending\";\n\nexport default function(series) {\n return ascending(series).reverse();\n}\n","export default function(series, order) {\n if (!((n = series.length) > 0)) return;\n for (var i, j = 0, d, dy, yp, yn, n, m = series[order[0]].length; j < m; ++j) {\n for (yp = yn = 0, i = 0; i < n; ++i) {\n if ((dy = (d = series[order[i]][j])[1] - d[0]) >= 0) {\n d[0] = yp, d[1] = yp += dy;\n } else if (dy < 0) {\n d[1] = yn, d[0] = yn += dy;\n } else {\n d[0] = yp;\n }\n }\n }\n}\n","import none from \"./none\";\n\nexport default function(series, order) {\n if (!((n = series.length) > 0)) return;\n for (var i, n, j = 0, m = series[0].length, y; j < m; ++j) {\n for (y = i = 0; i < n; ++i) y += series[i][j][1] || 0;\n if (y) for (i = 0; i < n; ++i) series[i][j][1] /= y;\n }\n none(series, order);\n}\n","import none from \"./none\";\n\nexport default function(series, order) {\n if (!((n = series.length) > 0) || !((m = (s0 = series[order[0]]).length) > 0)) return;\n for (var y = 0, j = 1, s0, m, n; j < m; ++j) {\n for (var i = 0, s1 = 0, s2 = 0; i < n; ++i) {\n var si = series[order[i]],\n sij0 = si[j][1] || 0,\n sij1 = si[j - 1][1] || 0,\n s3 = (sij0 - sij1) / 2;\n for (var k = 0; k < i; ++k) {\n var sk = series[order[k]],\n skj0 = sk[j][1] || 0,\n skj1 = sk[j - 1][1] || 0;\n s3 += skj0 - skj1;\n }\n s1 += sij0, s2 += s3 * sij0;\n }\n s0[j - 1][1] += s0[j - 1][0] = y;\n if (s1) y -= s2 / s1;\n }\n s0[j - 1][1] += s0[j - 1][0] = y;\n none(series, order);\n}\n","import constant from \"./constant\";\nimport descending from \"./descending\";\nimport identity from \"./identity\";\nimport {tau} from \"./math\";\n\nexport default function() {\n var value = identity,\n sortValues = descending,\n sort = null,\n startAngle = constant(0),\n endAngle = constant(tau),\n padAngle = constant(0);\n\n function pie(data) {\n var i,\n n = data.length,\n j,\n k,\n sum = 0,\n index = new Array(n),\n arcs = new Array(n),\n a0 = +startAngle.apply(this, arguments),\n da = Math.min(tau, Math.max(-tau, endAngle.apply(this, arguments) - a0)),\n a1,\n p = Math.min(Math.abs(da) / n, padAngle.apply(this, arguments)),\n pa = p * (da < 0 ? -1 : 1),\n v;\n\n for (i = 0; i < n; ++i) {\n if ((v = arcs[index[i] = i] = +value(data[i], i, data)) > 0) {\n sum += v;\n }\n }\n\n // Optionally sort the arcs by previously-computed values or by data.\n if (sortValues != null) index.sort(function(i, j) { return sortValues(arcs[i], arcs[j]); });\n else if (sort != null) index.sort(function(i, j) { return sort(data[i], data[j]); });\n\n // Compute the arcs! They are stored in the original data's order.\n for (i = 0, k = sum ? (da - n * pa) / sum : 0; i < n; ++i, a0 = a1) {\n j = index[i], v = arcs[j], a1 = a0 + (v > 0 ? v * k : 0) + pa, arcs[j] = {\n data: data[j],\n index: i,\n value: v,\n startAngle: a0,\n endAngle: a1,\n padAngle: p\n };\n }\n\n return arcs;\n }\n\n pie.value = function(_) {\n return arguments.length ? (value = typeof _ === \"function\" ? _ : constant(+_), pie) : value;\n };\n\n pie.sortValues = function(_) {\n return arguments.length ? (sortValues = _, sort = null, pie) : sortValues;\n };\n\n pie.sort = function(_) {\n return arguments.length ? (sort = _, sortValues = null, pie) : sort;\n };\n\n pie.startAngle = function(_) {\n return arguments.length ? (startAngle = typeof _ === \"function\" ? _ : constant(+_), pie) : startAngle;\n };\n\n pie.endAngle = function(_) {\n return arguments.length ? (endAngle = typeof _ === \"function\" ? _ : constant(+_), pie) : endAngle;\n };\n\n pie.padAngle = function(_) {\n return arguments.length ? (padAngle = typeof _ === \"function\" ? _ : constant(+_), pie) : padAngle;\n };\n\n return pie;\n}\n","export var xhtml = \"http://www.w3.org/1999/xhtml\";\n\nexport default {\n svg: \"http://www.w3.org/2000/svg\",\n xhtml: xhtml,\n xlink: \"http://www.w3.org/1999/xlink\",\n xml: \"http://www.w3.org/XML/1998/namespace\",\n xmlns: \"http://www.w3.org/2000/xmlns/\"\n};\n","import namespaces from \"./namespaces\";\n\nexport default function(name) {\n var prefix = name += \"\", i = prefix.indexOf(\":\");\n if (i >= 0 && (prefix = name.slice(0, i)) !== \"xmlns\") name = name.slice(i + 1);\n return namespaces.hasOwnProperty(prefix) ? {space: namespaces[prefix], local: name} : name;\n}\n","import namespace from \"./namespace\";\nimport {xhtml} from \"./namespaces\";\n\nfunction creatorInherit(name) {\n return function() {\n var document = this.ownerDocument,\n uri = this.namespaceURI;\n return uri === xhtml && document.documentElement.namespaceURI === xhtml\n ? document.createElement(name)\n : document.createElementNS(uri, name);\n };\n}\n\nfunction creatorFixed(fullname) {\n return function() {\n return this.ownerDocument.createElementNS(fullname.space, fullname.local);\n };\n}\n\nexport default function(name) {\n var fullname = namespace(name);\n return (fullname.local\n ? creatorFixed\n : creatorInherit)(fullname);\n}\n","function none() {}\n\nexport default function(selector) {\n return selector == null ? none : function() {\n return this.querySelector(selector);\n };\n}\n","function empty() {\n return [];\n}\n\nexport default function(selector) {\n return selector == null ? empty : function() {\n return this.querySelectorAll(selector);\n };\n}\n","export default function(selector) {\n return function() {\n return this.matches(selector);\n };\n}\n","export default function(update) {\n return new Array(update.length);\n}\n","import sparse from \"./sparse\";\nimport {Selection} from \"./index\";\n\nexport default function() {\n return new Selection(this._enter || this._groups.map(sparse), this._parents);\n}\n\nexport function EnterNode(parent, datum) {\n this.ownerDocument = parent.ownerDocument;\n this.namespaceURI = parent.namespaceURI;\n this._next = null;\n this._parent = parent;\n this.__data__ = datum;\n}\n\nEnterNode.prototype = {\n constructor: EnterNode,\n appendChild: function(child) { return this._parent.insertBefore(child, this._next); },\n insertBefore: function(child, next) { return this._parent.insertBefore(child, next); },\n querySelector: function(selector) { return this._parent.querySelector(selector); },\n querySelectorAll: function(selector) { return this._parent.querySelectorAll(selector); }\n};\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","import {Selection} from \"./index\";\nimport {EnterNode} from \"./enter\";\nimport constant from \"../constant\";\n\nvar keyPrefix = \"$\"; // Protect against keys like “__proto__”.\n\nfunction bindIndex(parent, group, enter, update, exit, data) {\n var i = 0,\n node,\n groupLength = group.length,\n dataLength = data.length;\n\n // Put any non-null nodes that fit into update.\n // Put any null nodes into enter.\n // Put any remaining data into enter.\n for (; i < dataLength; ++i) {\n if (node = group[i]) {\n node.__data__ = data[i];\n update[i] = node;\n } else {\n enter[i] = new EnterNode(parent, data[i]);\n }\n }\n\n // Put any non-null nodes that don’t fit into exit.\n for (; i < groupLength; ++i) {\n if (node = group[i]) {\n exit[i] = node;\n }\n }\n}\n\nfunction bindKey(parent, group, enter, update, exit, data, key) {\n var i,\n node,\n nodeByKeyValue = {},\n groupLength = group.length,\n dataLength = data.length,\n keyValues = new Array(groupLength),\n keyValue;\n\n // Compute the key for each node.\n // If multiple nodes have the same key, the duplicates are added to exit.\n for (i = 0; i < groupLength; ++i) {\n if (node = group[i]) {\n keyValues[i] = keyValue = keyPrefix + key.call(node, node.__data__, i, group);\n if (keyValue in nodeByKeyValue) {\n exit[i] = node;\n } else {\n nodeByKeyValue[keyValue] = node;\n }\n }\n }\n\n // Compute the key for each datum.\n // If there a node associated with this key, join and add it to update.\n // If there is not (or the key is a duplicate), add it to enter.\n for (i = 0; i < dataLength; ++i) {\n keyValue = keyPrefix + key.call(parent, data[i], i, data);\n if (node = nodeByKeyValue[keyValue]) {\n update[i] = node;\n node.__data__ = data[i];\n nodeByKeyValue[keyValue] = null;\n } else {\n enter[i] = new EnterNode(parent, data[i]);\n }\n }\n\n // Add any remaining nodes that were not bound to data to exit.\n for (i = 0; i < groupLength; ++i) {\n if ((node = group[i]) && (nodeByKeyValue[keyValues[i]] === node)) {\n exit[i] = node;\n }\n }\n}\n\nexport default function(value, key) {\n if (!value) {\n data = new Array(this.size()), j = -1;\n this.each(function(d) { data[++j] = d; });\n return data;\n }\n\n var bind = key ? bindKey : bindIndex,\n parents = this._parents,\n groups = this._groups;\n\n if (typeof value !== \"function\") value = constant(value);\n\n for (var m = groups.length, update = new Array(m), enter = new Array(m), exit = new Array(m), j = 0; j < m; ++j) {\n var parent = parents[j],\n group = groups[j],\n groupLength = group.length,\n data = value.call(parent, parent && parent.__data__, j, parents),\n dataLength = data.length,\n enterGroup = enter[j] = new Array(dataLength),\n updateGroup = update[j] = new Array(dataLength),\n exitGroup = exit[j] = new Array(groupLength);\n\n bind(parent, group, enterGroup, updateGroup, exitGroup, data, key);\n\n // Now connect the enter nodes to their following update node, such that\n // appendChild can insert the materialized enter node before this node,\n // rather than at the end of the parent node.\n for (var i0 = 0, i1 = 0, previous, next; i0 < dataLength; ++i0) {\n if (previous = enterGroup[i0]) {\n if (i0 >= i1) i1 = i0 + 1;\n while (!(next = updateGroup[i1]) && ++i1 < dataLength);\n previous._next = next || null;\n }\n }\n }\n\n update = new Selection(update, parents);\n update._enter = enter;\n update._exit = exit;\n return update;\n}\n","import {Selection} from \"./index\";\n\nexport default function(compare) {\n if (!compare) compare = ascending;\n\n function compareNode(a, b) {\n return a && b ? compare(a.__data__, b.__data__) : !a - !b;\n }\n\n for (var groups = this._groups, m = groups.length, sortgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, sortgroup = sortgroups[j] = new Array(n), node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n sortgroup[i] = node;\n }\n }\n sortgroup.sort(compareNode);\n }\n\n return new Selection(sortgroups, this._parents).order();\n}\n\nfunction ascending(a, b) {\n return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n","import namespace from \"../namespace\";\n\nfunction attrRemove(name) {\n return function() {\n this.removeAttribute(name);\n };\n}\n\nfunction attrRemoveNS(fullname) {\n return function() {\n this.removeAttributeNS(fullname.space, fullname.local);\n };\n}\n\nfunction attrConstant(name, value) {\n return function() {\n this.setAttribute(name, value);\n };\n}\n\nfunction attrConstantNS(fullname, value) {\n return function() {\n this.setAttributeNS(fullname.space, fullname.local, value);\n };\n}\n\nfunction attrFunction(name, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) this.removeAttribute(name);\n else this.setAttribute(name, v);\n };\n}\n\nfunction attrFunctionNS(fullname, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) this.removeAttributeNS(fullname.space, fullname.local);\n else this.setAttributeNS(fullname.space, fullname.local, v);\n };\n}\n\nexport default function(name, value) {\n var fullname = namespace(name);\n\n if (arguments.length < 2) {\n var node = this.node();\n return fullname.local\n ? node.getAttributeNS(fullname.space, fullname.local)\n : node.getAttribute(fullname);\n }\n\n return this.each((value == null\n ? (fullname.local ? attrRemoveNS : attrRemove) : (typeof value === \"function\"\n ? (fullname.local ? attrFunctionNS : attrFunction)\n : (fullname.local ? attrConstantNS : attrConstant)))(fullname, value));\n}\n","export default function(node) {\n return (node.ownerDocument && node.ownerDocument.defaultView) // node is a Node\n || (node.document && node) // node is a Window\n || node.defaultView; // node is a Document\n}\n","import defaultView from \"../window\";\n\nfunction styleRemove(name) {\n return function() {\n this.style.removeProperty(name);\n };\n}\n\nfunction styleConstant(name, value, priority) {\n return function() {\n this.style.setProperty(name, value, priority);\n };\n}\n\nfunction styleFunction(name, value, priority) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) this.style.removeProperty(name);\n else this.style.setProperty(name, v, priority);\n };\n}\n\nexport default function(name, value, priority) {\n return arguments.length > 1\n ? this.each((value == null\n ? styleRemove : typeof value === \"function\"\n ? styleFunction\n : styleConstant)(name, value, priority == null ? \"\" : priority))\n : styleValue(this.node(), name);\n}\n\nexport function styleValue(node, name) {\n return node.style.getPropertyValue(name)\n || defaultView(node).getComputedStyle(node, null).getPropertyValue(name);\n}\n","function classArray(string) {\n return string.trim().split(/^|\\s+/);\n}\n\nfunction classList(node) {\n return node.classList || new ClassList(node);\n}\n\nfunction ClassList(node) {\n this._node = node;\n this._names = classArray(node.getAttribute(\"class\") || \"\");\n}\n\nClassList.prototype = {\n add: function(name) {\n var i = this._names.indexOf(name);\n if (i < 0) {\n this._names.push(name);\n this._node.setAttribute(\"class\", this._names.join(\" \"));\n }\n },\n remove: function(name) {\n var i = this._names.indexOf(name);\n if (i >= 0) {\n this._names.splice(i, 1);\n this._node.setAttribute(\"class\", this._names.join(\" \"));\n }\n },\n contains: function(name) {\n return this._names.indexOf(name) >= 0;\n }\n};\n\nfunction classedAdd(node, names) {\n var list = classList(node), i = -1, n = names.length;\n while (++i < n) list.add(names[i]);\n}\n\nfunction classedRemove(node, names) {\n var list = classList(node), i = -1, n = names.length;\n while (++i < n) list.remove(names[i]);\n}\n\nfunction classedTrue(names) {\n return function() {\n classedAdd(this, names);\n };\n}\n\nfunction classedFalse(names) {\n return function() {\n classedRemove(this, names);\n };\n}\n\nfunction classedFunction(names, value) {\n return function() {\n (value.apply(this, arguments) ? classedAdd : classedRemove)(this, names);\n };\n}\n\nexport default function(name, value) {\n var names = classArray(name + \"\");\n\n if (arguments.length < 2) {\n var list = classList(this.node()), i = -1, n = names.length;\n while (++i < n) if (!list.contains(names[i])) return false;\n return true;\n }\n\n return this.each((typeof value === \"function\"\n ? classedFunction : value\n ? classedTrue\n : classedFalse)(names, value));\n}\n","function textRemove() {\n this.textContent = \"\";\n}\n\nfunction textConstant(value) {\n return function() {\n this.textContent = value;\n };\n}\n\nfunction textFunction(value) {\n return function() {\n var v = value.apply(this, arguments);\n this.textContent = v == null ? \"\" : v;\n };\n}\n\nexport default function(value) {\n return arguments.length\n ? this.each(value == null\n ? textRemove : (typeof value === \"function\"\n ? textFunction\n : textConstant)(value))\n : this.node().textContent;\n}\n","function htmlRemove() {\n this.innerHTML = \"\";\n}\n\nfunction htmlConstant(value) {\n return function() {\n this.innerHTML = value;\n };\n}\n\nfunction htmlFunction(value) {\n return function() {\n var v = value.apply(this, arguments);\n this.innerHTML = v == null ? \"\" : v;\n };\n}\n\nexport default function(value) {\n return arguments.length\n ? this.each(value == null\n ? htmlRemove : (typeof value === \"function\"\n ? htmlFunction\n : htmlConstant)(value))\n : this.node().innerHTML;\n}\n","function raise() {\n if (this.nextSibling) this.parentNode.appendChild(this);\n}\n\nexport default function() {\n return this.each(raise);\n}\n","function lower() {\n if (this.previousSibling) this.parentNode.insertBefore(this, this.parentNode.firstChild);\n}\n\nexport default function() {\n return this.each(lower);\n}\n","import creator from \"../creator\";\nimport selector from \"../selector\";\n\nfunction constantNull() {\n return null;\n}\n\nexport default function(name, before) {\n var create = typeof name === \"function\" ? name : creator(name),\n select = before == null ? constantNull : typeof before === \"function\" ? before : selector(before);\n return this.select(function() {\n return this.insertBefore(create.apply(this, arguments), select.apply(this, arguments) || null);\n });\n}\n","function remove() {\n var parent = this.parentNode;\n if (parent) parent.removeChild(this);\n}\n\nexport default function() {\n return this.each(remove);\n}\n","function selection_cloneShallow() {\n return this.parentNode.insertBefore(this.cloneNode(false), this.nextSibling);\n}\n\nfunction selection_cloneDeep() {\n return this.parentNode.insertBefore(this.cloneNode(true), this.nextSibling);\n}\n\nexport default function(deep) {\n return this.select(deep ? selection_cloneDeep : selection_cloneShallow);\n}\n","var filterEvents = {};\n\nexport var event = null;\n\nif (typeof document !== \"undefined\") {\n var element = document.documentElement;\n if (!(\"onmouseenter\" in element)) {\n filterEvents = {mouseenter: \"mouseover\", mouseleave: \"mouseout\"};\n }\n}\n\nfunction filterContextListener(listener, index, group) {\n listener = contextListener(listener, index, group);\n return function(event) {\n var related = event.relatedTarget;\n if (!related || (related !== this && !(related.compareDocumentPosition(this) & 8))) {\n listener.call(this, event);\n }\n };\n}\n\nfunction contextListener(listener, index, group) {\n return function(event1) {\n var event0 = event; // Events can be reentrant (e.g., focus).\n event = event1;\n try {\n listener.call(this, this.__data__, index, group);\n } finally {\n event = event0;\n }\n };\n}\n\nfunction parseTypenames(typenames) {\n return typenames.trim().split(/^|\\s+/).map(function(t) {\n var name = \"\", i = t.indexOf(\".\");\n if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);\n return {type: t, name: name};\n });\n}\n\nfunction onRemove(typename) {\n return function() {\n var on = this.__on;\n if (!on) return;\n for (var j = 0, i = -1, m = on.length, o; j < m; ++j) {\n if (o = on[j], (!typename.type || o.type === typename.type) && o.name === typename.name) {\n this.removeEventListener(o.type, o.listener, o.capture);\n } else {\n on[++i] = o;\n }\n }\n if (++i) on.length = i;\n else delete this.__on;\n };\n}\n\nfunction onAdd(typename, value, capture) {\n var wrap = filterEvents.hasOwnProperty(typename.type) ? filterContextListener : contextListener;\n return function(d, i, group) {\n var on = this.__on, o, listener = wrap(value, i, group);\n if (on) for (var j = 0, m = on.length; j < m; ++j) {\n if ((o = on[j]).type === typename.type && o.name === typename.name) {\n this.removeEventListener(o.type, o.listener, o.capture);\n this.addEventListener(o.type, o.listener = listener, o.capture = capture);\n o.value = value;\n return;\n }\n }\n this.addEventListener(typename.type, listener, capture);\n o = {type: typename.type, name: typename.name, value: value, listener: listener, capture: capture};\n if (!on) this.__on = [o];\n else on.push(o);\n };\n}\n\nexport default function(typename, value, capture) {\n var typenames = parseTypenames(typename + \"\"), i, n = typenames.length, t;\n\n if (arguments.length < 2) {\n var on = this.node().__on;\n if (on) for (var j = 0, m = on.length, o; j < m; ++j) {\n for (i = 0, o = on[j]; i < n; ++i) {\n if ((t = typenames[i]).type === o.type && t.name === o.name) {\n return o.value;\n }\n }\n }\n return;\n }\n\n on = value ? onAdd : onRemove;\n if (capture == null) capture = false;\n for (i = 0; i < n; ++i) this.each(on(typenames[i], value, capture));\n return this;\n}\n\nexport function customEvent(event1, listener, that, args) {\n var event0 = event;\n event1.sourceEvent = event;\n event = event1;\n try {\n return listener.apply(that, args);\n } finally {\n event = event0;\n }\n}\n","import defaultView from \"../window\";\n\nfunction dispatchEvent(node, type, params) {\n var window = defaultView(node),\n event = window.CustomEvent;\n\n if (typeof event === \"function\") {\n event = new event(type, params);\n } else {\n event = window.document.createEvent(\"Event\");\n if (params) event.initEvent(type, params.bubbles, params.cancelable), event.detail = params.detail;\n else event.initEvent(type, false, false);\n }\n\n node.dispatchEvent(event);\n}\n\nfunction dispatchConstant(type, params) {\n return function() {\n return dispatchEvent(this, type, params);\n };\n}\n\nfunction dispatchFunction(type, params) {\n return function() {\n return dispatchEvent(this, type, params.apply(this, arguments));\n };\n}\n\nexport default function(type, params) {\n return this.each((typeof params === \"function\"\n ? dispatchFunction\n : dispatchConstant)(type, params));\n}\n","import selection_select from \"./select\";\nimport selection_selectAll from \"./selectAll\";\nimport selection_filter from \"./filter\";\nimport selection_data from \"./data\";\nimport selection_enter from \"./enter\";\nimport selection_exit from \"./exit\";\nimport selection_join from \"./join\";\nimport selection_merge from \"./merge\";\nimport selection_order from \"./order\";\nimport selection_sort from \"./sort\";\nimport selection_call from \"./call\";\nimport selection_nodes from \"./nodes\";\nimport selection_node from \"./node\";\nimport selection_size from \"./size\";\nimport selection_empty from \"./empty\";\nimport selection_each from \"./each\";\nimport selection_attr from \"./attr\";\nimport selection_style from \"./style\";\nimport selection_property from \"./property\";\nimport selection_classed from \"./classed\";\nimport selection_text from \"./text\";\nimport selection_html from \"./html\";\nimport selection_raise from \"./raise\";\nimport selection_lower from \"./lower\";\nimport selection_append from \"./append\";\nimport selection_insert from \"./insert\";\nimport selection_remove from \"./remove\";\nimport selection_clone from \"./clone\";\nimport selection_datum from \"./datum\";\nimport selection_on from \"./on\";\nimport selection_dispatch from \"./dispatch\";\n\nexport var root = [null];\n\nexport function Selection(groups, parents) {\n this._groups = groups;\n this._parents = parents;\n}\n\nfunction selection() {\n return new Selection([[document.documentElement]], root);\n}\n\nSelection.prototype = selection.prototype = {\n constructor: Selection,\n select: selection_select,\n selectAll: selection_selectAll,\n filter: selection_filter,\n data: selection_data,\n enter: selection_enter,\n exit: selection_exit,\n join: selection_join,\n merge: selection_merge,\n order: selection_order,\n sort: selection_sort,\n call: selection_call,\n nodes: selection_nodes,\n node: selection_node,\n size: selection_size,\n empty: selection_empty,\n each: selection_each,\n attr: selection_attr,\n style: selection_style,\n property: selection_property,\n classed: selection_classed,\n text: selection_text,\n html: selection_html,\n raise: selection_raise,\n lower: selection_lower,\n append: selection_append,\n insert: selection_insert,\n remove: selection_remove,\n clone: selection_clone,\n datum: selection_datum,\n on: selection_on,\n dispatch: selection_dispatch\n};\n\nexport default selection;\n","import {Selection} from \"./index\";\nimport selector from \"../selector\";\n\nexport default function(select) {\n if (typeof select !== \"function\") select = selector(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) {\n if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) {\n if (\"__data__\" in node) subnode.__data__ = node.__data__;\n subgroup[i] = subnode;\n }\n }\n }\n\n return new Selection(subgroups, this._parents);\n}\n","import {Selection} from \"./index\";\nimport selectorAll from \"../selectorAll\";\n\nexport default function(select) {\n if (typeof select !== \"function\") select = selectorAll(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n subgroups.push(select.call(node, node.__data__, i, group));\n parents.push(node);\n }\n }\n }\n\n return new Selection(subgroups, parents);\n}\n","import {Selection} from \"./index\";\nimport matcher from \"../matcher\";\n\nexport default function(match) {\n if (typeof match !== \"function\") match = matcher(match);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) {\n if ((node = group[i]) && match.call(node, node.__data__, i, group)) {\n subgroup.push(node);\n }\n }\n }\n\n return new Selection(subgroups, this._parents);\n}\n","import sparse from \"./sparse\";\nimport {Selection} from \"./index\";\n\nexport default function() {\n return new Selection(this._exit || this._groups.map(sparse), this._parents);\n}\n","export default function(onenter, onupdate, onexit) {\n var enter = this.enter(), update = this, exit = this.exit();\n enter = typeof onenter === \"function\" ? onenter(enter) : enter.append(onenter + \"\");\n if (onupdate != null) update = onupdate(update);\n if (onexit == null) exit.remove(); else onexit(exit);\n return enter && update ? enter.merge(update).order() : update;\n}\n","import {Selection} from \"./index\";\n\nexport default function(selection) {\n\n for (var groups0 = this._groups, groups1 = selection._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) {\n for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {\n if (node = group0[i] || group1[i]) {\n merge[i] = node;\n }\n }\n }\n\n for (; j < m0; ++j) {\n merges[j] = groups0[j];\n }\n\n return new Selection(merges, this._parents);\n}\n","export default function() {\n\n for (var groups = this._groups, j = -1, m = groups.length; ++j < m;) {\n for (var group = groups[j], i = group.length - 1, next = group[i], node; --i >= 0;) {\n if (node = group[i]) {\n if (next && node.compareDocumentPosition(next) ^ 4) next.parentNode.insertBefore(node, next);\n next = node;\n }\n }\n }\n\n return this;\n}\n","export default function() {\n var callback = arguments[0];\n arguments[0] = this;\n callback.apply(null, arguments);\n return this;\n}\n","export default function() {\n var nodes = new Array(this.size()), i = -1;\n this.each(function() { nodes[++i] = this; });\n return nodes;\n}\n","export default function() {\n\n for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n for (var group = groups[j], i = 0, n = group.length; i < n; ++i) {\n var node = group[i];\n if (node) return node;\n }\n }\n\n return null;\n}\n","export default function() {\n var size = 0;\n this.each(function() { ++size; });\n return size;\n}\n","export default function() {\n return !this.node();\n}\n","export default function(callback) {\n\n for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n for (var group = groups[j], i = 0, n = group.length, node; i < n; ++i) {\n if (node = group[i]) callback.call(node, node.__data__, i, group);\n }\n }\n\n return this;\n}\n","function propertyRemove(name) {\n return function() {\n delete this[name];\n };\n}\n\nfunction propertyConstant(name, value) {\n return function() {\n this[name] = value;\n };\n}\n\nfunction propertyFunction(name, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) delete this[name];\n else this[name] = v;\n };\n}\n\nexport default function(name, value) {\n return arguments.length > 1\n ? this.each((value == null\n ? propertyRemove : typeof value === \"function\"\n ? propertyFunction\n : propertyConstant)(name, value))\n : this.node()[name];\n}\n","import creator from \"../creator\";\n\nexport default function(name) {\n var create = typeof name === \"function\" ? name : creator(name);\n return this.select(function() {\n return this.appendChild(create.apply(this, arguments));\n });\n}\n","export default function(value) {\n return arguments.length\n ? this.property(\"__data__\", value)\n : this.node().__data__;\n}\n","import {Selection, root} from \"./selection/index\";\n\nexport default function(selector) {\n return typeof selector === \"string\"\n ? new Selection([[document.querySelector(selector)]], [document.documentElement])\n : new Selection([[selector]], root);\n}\n","var nextId = 0;\n\nexport default function local() {\n return new Local;\n}\n\nfunction Local() {\n this._ = \"@\" + (++nextId).toString(36);\n}\n\nLocal.prototype = local.prototype = {\n constructor: Local,\n get: function(node) {\n var id = this._;\n while (!(id in node)) if (!(node = node.parentNode)) return;\n return node[id];\n },\n set: function(node, value) {\n return node[this._] = value;\n },\n remove: function(node) {\n return this._ in node && delete node[this._];\n },\n toString: function() {\n return this._;\n }\n};\n","import {event} from \"./selection/on\";\n\nexport default function() {\n var current = event, source;\n while (source = current.sourceEvent) current = source;\n return current;\n}\n","export default function(node, event) {\n var svg = node.ownerSVGElement || node;\n\n if (svg.createSVGPoint) {\n var point = svg.createSVGPoint();\n point.x = event.clientX, point.y = event.clientY;\n point = point.matrixTransform(node.getScreenCTM().inverse());\n return [point.x, point.y];\n }\n\n var rect = node.getBoundingClientRect();\n return [event.clientX - rect.left - node.clientLeft, event.clientY - rect.top - node.clientTop];\n}\n","import sourceEvent from \"./sourceEvent\";\nimport point from \"./point\";\n\nexport default function(node) {\n var event = sourceEvent();\n if (event.changedTouches) event = event.changedTouches[0];\n return point(node, event);\n}\n","import sourceEvent from \"./sourceEvent\";\nimport point from \"./point\";\n\nexport default function(node, touches, identifier) {\n if (arguments.length < 3) identifier = touches, touches = sourceEvent().changedTouches;\n\n for (var i = 0, n = touches ? touches.length : 0, touch; i < n; ++i) {\n if ((touch = touches[i]).identifier === identifier) {\n return point(node, touch);\n }\n }\n\n return null;\n}\n","var noop = {value: function() {}};\n\nfunction dispatch() {\n for (var i = 0, n = arguments.length, _ = {}, t; i < n; ++i) {\n if (!(t = arguments[i] + \"\") || (t in _)) throw new Error(\"illegal type: \" + t);\n _[t] = [];\n }\n return new Dispatch(_);\n}\n\nfunction Dispatch(_) {\n this._ = _;\n}\n\nfunction parseTypenames(typenames, types) {\n return typenames.trim().split(/^|\\s+/).map(function(t) {\n var name = \"\", i = t.indexOf(\".\");\n if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);\n if (t && !types.hasOwnProperty(t)) throw new Error(\"unknown type: \" + t);\n return {type: t, name: name};\n });\n}\n\nDispatch.prototype = dispatch.prototype = {\n constructor: Dispatch,\n on: function(typename, callback) {\n var _ = this._,\n T = parseTypenames(typename + \"\", _),\n t,\n i = -1,\n n = T.length;\n\n // If no callback was specified, return the callback of the given type and name.\n if (arguments.length < 2) {\n while (++i < n) if ((t = (typename = T[i]).type) && (t = get(_[t], typename.name))) return t;\n return;\n }\n\n // If a type was specified, set the callback for the given type and name.\n // Otherwise, if a null callback was specified, remove callbacks of the given name.\n if (callback != null && typeof callback !== \"function\") throw new Error(\"invalid callback: \" + callback);\n while (++i < n) {\n if (t = (typename = T[i]).type) _[t] = set(_[t], typename.name, callback);\n else if (callback == null) for (t in _) _[t] = set(_[t], typename.name, null);\n }\n\n return this;\n },\n copy: function() {\n var copy = {}, _ = this._;\n for (var t in _) copy[t] = _[t].slice();\n return new Dispatch(copy);\n },\n call: function(type, that) {\n if ((n = arguments.length - 2) > 0) for (var args = new Array(n), i = 0, n, t; i < n; ++i) args[i] = arguments[i + 2];\n if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\n for (t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n },\n apply: function(type, that, args) {\n if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\n for (var t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n }\n};\n\nfunction get(type, name) {\n for (var i = 0, n = type.length, c; i < n; ++i) {\n if ((c = type[i]).name === name) {\n return c.value;\n }\n }\n}\n\nfunction set(type, name, callback) {\n for (var i = 0, n = type.length; i < n; ++i) {\n if (type[i].name === name) {\n type[i] = noop, type = type.slice(0, i).concat(type.slice(i + 1));\n break;\n }\n }\n if (callback != null) type.push({name: name, value: callback});\n return type;\n}\n\nexport default dispatch;\n","import {event} from \"d3-selection\";\n\nexport function nopropagation() {\n event.stopImmediatePropagation();\n}\n\nexport default function() {\n event.preventDefault();\n event.stopImmediatePropagation();\n}\n","import {select} from \"d3-selection\";\nimport noevent from \"./noevent\";\n\nexport default function(view) {\n var root = view.document.documentElement,\n selection = select(view).on(\"dragstart.drag\", noevent, true);\n if (\"onselectstart\" in root) {\n selection.on(\"selectstart.drag\", noevent, true);\n } else {\n root.__noselect = root.style.MozUserSelect;\n root.style.MozUserSelect = \"none\";\n }\n}\n\nexport function yesdrag(view, noclick) {\n var root = view.document.documentElement,\n selection = select(view).on(\"dragstart.drag\", null);\n if (noclick) {\n selection.on(\"click.drag\", noevent, true);\n setTimeout(function() { selection.on(\"click.drag\", null); }, 0);\n }\n if (\"onselectstart\" in root) {\n selection.on(\"selectstart.drag\", null);\n } else {\n root.style.MozUserSelect = root.__noselect;\n delete root.__noselect;\n }\n}\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","export default function DragEvent(target, type, subject, id, active, x, y, dx, dy, dispatch) {\n this.target = target;\n this.type = type;\n this.subject = subject;\n this.identifier = id;\n this.active = active;\n this.x = x;\n this.y = y;\n this.dx = dx;\n this.dy = dy;\n this._ = dispatch;\n}\n\nDragEvent.prototype.on = function() {\n var value = this._.on.apply(this._, arguments);\n return value === this._ ? this : value;\n};\n","import {dispatch} from \"d3-dispatch\";\nimport {event, customEvent, select, mouse, touch} from \"d3-selection\";\nimport nodrag, {yesdrag} from \"./nodrag\";\nimport noevent, {nopropagation} from \"./noevent\";\nimport constant from \"./constant\";\nimport DragEvent from \"./event\";\n\n// Ignore right-click, since that should open the context menu.\nfunction defaultFilter() {\n return !event.button;\n}\n\nfunction defaultContainer() {\n return this.parentNode;\n}\n\nfunction defaultSubject(d) {\n return d == null ? {x: event.x, y: event.y} : d;\n}\n\nfunction defaultTouchable() {\n return \"ontouchstart\" in this;\n}\n\nexport default function() {\n var filter = defaultFilter,\n container = defaultContainer,\n subject = defaultSubject,\n touchable = defaultTouchable,\n gestures = {},\n listeners = dispatch(\"start\", \"drag\", \"end\"),\n active = 0,\n mousedownx,\n mousedowny,\n mousemoving,\n touchending,\n clickDistance2 = 0;\n\n function drag(selection) {\n selection\n .on(\"mousedown.drag\", mousedowned)\n .filter(touchable)\n .on(\"touchstart.drag\", touchstarted)\n .on(\"touchmove.drag\", touchmoved)\n .on(\"touchend.drag touchcancel.drag\", touchended)\n .style(\"touch-action\", \"none\")\n .style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\");\n }\n\n function mousedowned() {\n if (touchending || !filter.apply(this, arguments)) return;\n var gesture = beforestart(\"mouse\", container.apply(this, arguments), mouse, this, arguments);\n if (!gesture) return;\n select(event.view).on(\"mousemove.drag\", mousemoved, true).on(\"mouseup.drag\", mouseupped, true);\n nodrag(event.view);\n nopropagation();\n mousemoving = false;\n mousedownx = event.clientX;\n mousedowny = event.clientY;\n gesture(\"start\");\n }\n\n function mousemoved() {\n noevent();\n if (!mousemoving) {\n var dx = event.clientX - mousedownx, dy = event.clientY - mousedowny;\n mousemoving = dx * dx + dy * dy > clickDistance2;\n }\n gestures.mouse(\"drag\");\n }\n\n function mouseupped() {\n select(event.view).on(\"mousemove.drag mouseup.drag\", null);\n yesdrag(event.view, mousemoving);\n noevent();\n gestures.mouse(\"end\");\n }\n\n function touchstarted() {\n if (!filter.apply(this, arguments)) return;\n var touches = event.changedTouches,\n c = container.apply(this, arguments),\n n = touches.length, i, gesture;\n\n for (i = 0; i < n; ++i) {\n if (gesture = beforestart(touches[i].identifier, c, touch, this, arguments)) {\n nopropagation();\n gesture(\"start\");\n }\n }\n }\n\n function touchmoved() {\n var touches = event.changedTouches,\n n = touches.length, i, gesture;\n\n for (i = 0; i < n; ++i) {\n if (gesture = gestures[touches[i].identifier]) {\n noevent();\n gesture(\"drag\");\n }\n }\n }\n\n function touchended() {\n var touches = event.changedTouches,\n n = touches.length, i, gesture;\n\n if (touchending) clearTimeout(touchending);\n touchending = setTimeout(function() { touchending = null; }, 500); // Ghost clicks are delayed!\n for (i = 0; i < n; ++i) {\n if (gesture = gestures[touches[i].identifier]) {\n nopropagation();\n gesture(\"end\");\n }\n }\n }\n\n function beforestart(id, container, point, that, args) {\n var p = point(container, id), s, dx, dy,\n sublisteners = listeners.copy();\n\n if (!customEvent(new DragEvent(drag, \"beforestart\", s, id, active, p[0], p[1], 0, 0, sublisteners), function() {\n if ((event.subject = s = subject.apply(that, args)) == null) return false;\n dx = s.x - p[0] || 0;\n dy = s.y - p[1] || 0;\n return true;\n })) return;\n\n return function gesture(type) {\n var p0 = p, n;\n switch (type) {\n case \"start\": gestures[id] = gesture, n = active++; break;\n case \"end\": delete gestures[id], --active; // nobreak\n case \"drag\": p = point(container, id), n = active; break;\n }\n customEvent(new DragEvent(drag, type, s, id, n, p[0] + dx, p[1] + dy, p[0] - p0[0], p[1] - p0[1], sublisteners), sublisteners.apply, sublisteners, [type, that, args]);\n };\n }\n\n drag.filter = function(_) {\n return arguments.length ? (filter = typeof _ === \"function\" ? _ : constant(!!_), drag) : filter;\n };\n\n drag.container = function(_) {\n return arguments.length ? (container = typeof _ === \"function\" ? _ : constant(_), drag) : container;\n };\n\n drag.subject = function(_) {\n return arguments.length ? (subject = typeof _ === \"function\" ? _ : constant(_), drag) : subject;\n };\n\n drag.touchable = function(_) {\n return arguments.length ? (touchable = typeof _ === \"function\" ? _ : constant(!!_), drag) : touchable;\n };\n\n drag.on = function() {\n var value = listeners.on.apply(listeners, arguments);\n return value === listeners ? drag : value;\n };\n\n drag.clickDistance = function(_) {\n return arguments.length ? (clickDistance2 = (_ = +_) * _, drag) : Math.sqrt(clickDistance2);\n };\n\n return drag;\n}\n","var frame = 0, // is an animation frame pending?\n timeout = 0, // is a timeout pending?\n interval = 0, // are any timers active?\n pokeDelay = 1000, // how frequently we check for clock skew\n taskHead,\n taskTail,\n clockLast = 0,\n clockNow = 0,\n clockSkew = 0,\n clock = typeof performance === \"object\" && performance.now ? performance : Date,\n setFrame = typeof window === \"object\" && window.requestAnimationFrame ? window.requestAnimationFrame.bind(window) : function(f) { setTimeout(f, 17); };\n\nexport function now() {\n return clockNow || (setFrame(clearNow), clockNow = clock.now() + clockSkew);\n}\n\nfunction clearNow() {\n clockNow = 0;\n}\n\nexport function Timer() {\n this._call =\n this._time =\n this._next = null;\n}\n\nTimer.prototype = timer.prototype = {\n constructor: Timer,\n restart: function(callback, delay, time) {\n if (typeof callback !== \"function\") throw new TypeError(\"callback is not a function\");\n time = (time == null ? now() : +time) + (delay == null ? 0 : +delay);\n if (!this._next && taskTail !== this) {\n if (taskTail) taskTail._next = this;\n else taskHead = this;\n taskTail = this;\n }\n this._call = callback;\n this._time = time;\n sleep();\n },\n stop: function() {\n if (this._call) {\n this._call = null;\n this._time = Infinity;\n sleep();\n }\n }\n};\n\nexport function timer(callback, delay, time) {\n var t = new Timer;\n t.restart(callback, delay, time);\n return t;\n}\n\nexport function timerFlush() {\n now(); // Get the current time, if not already set.\n ++frame; // Pretend we’ve set an alarm, if we haven’t already.\n var t = taskHead, e;\n while (t) {\n if ((e = clockNow - t._time) >= 0) t._call.call(null, e);\n t = t._next;\n }\n --frame;\n}\n\nfunction wake() {\n clockNow = (clockLast = clock.now()) + clockSkew;\n frame = timeout = 0;\n try {\n timerFlush();\n } finally {\n frame = 0;\n nap();\n clockNow = 0;\n }\n}\n\nfunction poke() {\n var now = clock.now(), delay = now - clockLast;\n if (delay > pokeDelay) clockSkew -= delay, clockLast = now;\n}\n\nfunction nap() {\n var t0, t1 = taskHead, t2, time = Infinity;\n while (t1) {\n if (t1._call) {\n if (time > t1._time) time = t1._time;\n t0 = t1, t1 = t1._next;\n } else {\n t2 = t1._next, t1._next = null;\n t1 = t0 ? t0._next = t2 : taskHead = t2;\n }\n }\n taskTail = t0;\n sleep(time);\n}\n\nfunction sleep(time) {\n if (frame) return; // Soonest alarm already set, or will be.\n if (timeout) timeout = clearTimeout(timeout);\n var delay = time - clockNow; // Strictly less than if we recomputed clockNow.\n if (delay > 24) {\n if (time < Infinity) timeout = setTimeout(wake, time - clock.now() - clockSkew);\n if (interval) interval = clearInterval(interval);\n } else {\n if (!interval) clockLast = clock.now(), interval = setInterval(poke, pokeDelay);\n frame = 1, setFrame(wake);\n }\n}\n","import {Timer} from \"./timer\";\n\nexport default function(callback, delay, time) {\n var t = new Timer;\n delay = delay == null ? 0 : +delay;\n t.restart(function(elapsed) {\n t.stop();\n callback(elapsed + delay);\n }, delay, time);\n return t;\n}\n","import {dispatch} from \"d3-dispatch\";\nimport {timer, timeout} from \"d3-timer\";\n\nvar emptyOn = dispatch(\"start\", \"end\", \"cancel\", \"interrupt\");\nvar emptyTween = [];\n\nexport var CREATED = 0;\nexport var SCHEDULED = 1;\nexport var STARTING = 2;\nexport var STARTED = 3;\nexport var RUNNING = 4;\nexport var ENDING = 5;\nexport var ENDED = 6;\n\nexport default function(node, name, id, index, group, timing) {\n var schedules = node.__transition;\n if (!schedules) node.__transition = {};\n else if (id in schedules) return;\n create(node, id, {\n name: name,\n index: index, // For context during callback.\n group: group, // For context during callback.\n on: emptyOn,\n tween: emptyTween,\n time: timing.time,\n delay: timing.delay,\n duration: timing.duration,\n ease: timing.ease,\n timer: null,\n state: CREATED\n });\n}\n\nexport function init(node, id) {\n var schedule = get(node, id);\n if (schedule.state > CREATED) throw new Error(\"too late; already scheduled\");\n return schedule;\n}\n\nexport function set(node, id) {\n var schedule = get(node, id);\n if (schedule.state > STARTED) throw new Error(\"too late; already running\");\n return schedule;\n}\n\nexport function get(node, id) {\n var schedule = node.__transition;\n if (!schedule || !(schedule = schedule[id])) throw new Error(\"transition not found\");\n return schedule;\n}\n\nfunction create(node, id, self) {\n var schedules = node.__transition,\n tween;\n\n // Initialize the self timer when the transition is created.\n // Note the actual delay is not known until the first callback!\n schedules[id] = self;\n self.timer = timer(schedule, 0, self.time);\n\n function schedule(elapsed) {\n self.state = SCHEDULED;\n self.timer.restart(start, self.delay, self.time);\n\n // If the elapsed delay is less than our first sleep, start immediately.\n if (self.delay <= elapsed) start(elapsed - self.delay);\n }\n\n function start(elapsed) {\n var i, j, n, o;\n\n // If the state is not SCHEDULED, then we previously errored on start.\n if (self.state !== SCHEDULED) return stop();\n\n for (i in schedules) {\n o = schedules[i];\n if (o.name !== self.name) continue;\n\n // While this element already has a starting transition during this frame,\n // defer starting an interrupting transition until that transition has a\n // chance to tick (and possibly end); see d3/d3-transition#54!\n if (o.state === STARTED) return timeout(start);\n\n // Interrupt the active transition, if any.\n if (o.state === RUNNING) {\n o.state = ENDED;\n o.timer.stop();\n o.on.call(\"interrupt\", node, node.__data__, o.index, o.group);\n delete schedules[i];\n }\n\n // Cancel any pre-empted transitions.\n else if (+i < id) {\n o.state = ENDED;\n o.timer.stop();\n o.on.call(\"cancel\", node, node.__data__, o.index, o.group);\n delete schedules[i];\n }\n }\n\n // Defer the first tick to end of the current frame; see d3/d3#1576.\n // Note the transition may be canceled after start and before the first tick!\n // Note this must be scheduled before the start event; see d3/d3-transition#16!\n // Assuming this is successful, subsequent callbacks go straight to tick.\n timeout(function() {\n if (self.state === STARTED) {\n self.state = RUNNING;\n self.timer.restart(tick, self.delay, self.time);\n tick(elapsed);\n }\n });\n\n // Dispatch the start event.\n // Note this must be done before the tween are initialized.\n self.state = STARTING;\n self.on.call(\"start\", node, node.__data__, self.index, self.group);\n if (self.state !== STARTING) return; // interrupted\n self.state = STARTED;\n\n // Initialize the tween, deleting null tween.\n tween = new Array(n = self.tween.length);\n for (i = 0, j = -1; i < n; ++i) {\n if (o = self.tween[i].value.call(node, node.__data__, self.index, self.group)) {\n tween[++j] = o;\n }\n }\n tween.length = j + 1;\n }\n\n function tick(elapsed) {\n var t = elapsed < self.duration ? self.ease.call(null, elapsed / self.duration) : (self.timer.restart(stop), self.state = ENDING, 1),\n i = -1,\n n = tween.length;\n\n while (++i < n) {\n tween[i].call(node, t);\n }\n\n // Dispatch the end event.\n if (self.state === ENDING) {\n self.on.call(\"end\", node, node.__data__, self.index, self.group);\n stop();\n }\n }\n\n function stop() {\n self.state = ENDED;\n self.timer.stop();\n delete schedules[id];\n for (var i in schedules) return; // eslint-disable-line no-unused-vars\n delete node.__transition;\n }\n}\n","import {get, set} from \"./schedule\";\n\nfunction tweenRemove(id, name) {\n var tween0, tween1;\n return function() {\n var schedule = set(this, id),\n tween = schedule.tween;\n\n // If this node shared tween with the previous node,\n // just assign the updated shared tween and we’re done!\n // Otherwise, copy-on-write.\n if (tween !== tween0) {\n tween1 = tween0 = tween;\n for (var i = 0, n = tween1.length; i < n; ++i) {\n if (tween1[i].name === name) {\n tween1 = tween1.slice();\n tween1.splice(i, 1);\n break;\n }\n }\n }\n\n schedule.tween = tween1;\n };\n}\n\nfunction tweenFunction(id, name, value) {\n var tween0, tween1;\n if (typeof value !== \"function\") throw new Error;\n return function() {\n var schedule = set(this, id),\n tween = schedule.tween;\n\n // If this node shared tween with the previous node,\n // just assign the updated shared tween and we’re done!\n // Otherwise, copy-on-write.\n if (tween !== tween0) {\n tween1 = (tween0 = tween).slice();\n for (var t = {name: name, value: value}, i = 0, n = tween1.length; i < n; ++i) {\n if (tween1[i].name === name) {\n tween1[i] = t;\n break;\n }\n }\n if (i === n) tween1.push(t);\n }\n\n schedule.tween = tween1;\n };\n}\n\nexport default function(name, value) {\n var id = this._id;\n\n name += \"\";\n\n if (arguments.length < 2) {\n var tween = get(this.node(), id).tween;\n for (var i = 0, n = tween.length, t; i < n; ++i) {\n if ((t = tween[i]).name === name) {\n return t.value;\n }\n }\n return null;\n }\n\n return this.each((value == null ? tweenRemove : tweenFunction)(id, name, value));\n}\n\nexport function tweenValue(transition, name, value) {\n var id = transition._id;\n\n transition.each(function() {\n var schedule = set(this, id);\n (schedule.value || (schedule.value = {}))[name] = value.apply(this, arguments);\n });\n\n return function(node) {\n return get(node, id).value[name];\n };\n}\n","import {color} from \"d3-color\";\nimport {interpolateNumber, interpolateRgb, interpolateString} from \"d3-interpolate\";\n\nexport default function(a, b) {\n var c;\n return (typeof b === \"number\" ? interpolateNumber\n : b instanceof color ? interpolateRgb\n : (c = color(b)) ? (b = c, interpolateRgb)\n : interpolateString)(a, b);\n}\n","function removeFunction(id) {\n return function() {\n var parent = this.parentNode;\n for (var i in this.__transition) if (+i !== id) return;\n if (parent) parent.removeChild(this);\n };\n}\n\nexport default function() {\n return this.on(\"end.remove\", removeFunction(this._id));\n}\n","import {selection} from \"d3-selection\";\n\nvar Selection = selection.prototype.constructor;\n\nexport default function() {\n return new Selection(this._groups, this._parents);\n}\n","import {interpolateTransformCss as interpolateTransform} from \"d3-interpolate\";\nimport {style} from \"d3-selection\";\nimport {set} from \"./schedule\";\nimport {tweenValue} from \"./tween\";\nimport interpolate from \"./interpolate\";\n\nfunction styleNull(name, interpolate) {\n var string00,\n string10,\n interpolate0;\n return function() {\n var string0 = style(this, name),\n string1 = (this.style.removeProperty(name), style(this, name));\n return string0 === string1 ? null\n : string0 === string00 && string1 === string10 ? interpolate0\n : interpolate0 = interpolate(string00 = string0, string10 = string1);\n };\n}\n\nfunction styleRemove(name) {\n return function() {\n this.style.removeProperty(name);\n };\n}\n\nfunction styleConstant(name, interpolate, value1) {\n var string00,\n string1 = value1 + \"\",\n interpolate0;\n return function() {\n var string0 = style(this, name);\n return string0 === string1 ? null\n : string0 === string00 ? interpolate0\n : interpolate0 = interpolate(string00 = string0, value1);\n };\n}\n\nfunction styleFunction(name, interpolate, value) {\n var string00,\n string10,\n interpolate0;\n return function() {\n var string0 = style(this, name),\n value1 = value(this),\n string1 = value1 + \"\";\n if (value1 == null) string1 = value1 = (this.style.removeProperty(name), style(this, name));\n return string0 === string1 ? null\n : string0 === string00 && string1 === string10 ? interpolate0\n : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));\n };\n}\n\nfunction styleMaybeRemove(id, name) {\n var on0, on1, listener0, key = \"style.\" + name, event = \"end.\" + key, remove;\n return function() {\n var schedule = set(this, id),\n on = schedule.on,\n listener = schedule.value[key] == null ? remove || (remove = styleRemove(name)) : undefined;\n\n // If this node shared a dispatch with the previous node,\n // just assign the updated shared dispatch and we’re done!\n // Otherwise, copy-on-write.\n if (on !== on0 || listener0 !== listener) (on1 = (on0 = on).copy()).on(event, listener0 = listener);\n\n schedule.on = on1;\n };\n}\n\nexport default function(name, value, priority) {\n var i = (name += \"\") === \"transform\" ? interpolateTransform : interpolate;\n return value == null ? this\n .styleTween(name, styleNull(name, i))\n .on(\"end.style.\" + name, styleRemove(name))\n : typeof value === \"function\" ? this\n .styleTween(name, styleFunction(name, i, tweenValue(this, \"style.\" + name, value)))\n .each(styleMaybeRemove(this._id, name))\n : this\n .styleTween(name, styleConstant(name, i, value), priority)\n .on(\"end.style.\" + name, null);\n}\n","import {tweenValue} from \"./tween\";\n\nfunction textConstant(value) {\n return function() {\n this.textContent = value;\n };\n}\n\nfunction textFunction(value) {\n return function() {\n var value1 = value(this);\n this.textContent = value1 == null ? \"\" : value1;\n };\n}\n\nexport default function(value) {\n return this.tween(\"text\", typeof value === \"function\"\n ? textFunction(tweenValue(this, \"text\", value))\n : textConstant(value == null ? \"\" : value + \"\"));\n}\n","import {selection} from \"d3-selection\";\nimport transition_attr from \"./attr\";\nimport transition_attrTween from \"./attrTween\";\nimport transition_delay from \"./delay\";\nimport transition_duration from \"./duration\";\nimport transition_ease from \"./ease\";\nimport transition_filter from \"./filter\";\nimport transition_merge from \"./merge\";\nimport transition_on from \"./on\";\nimport transition_remove from \"./remove\";\nimport transition_select from \"./select\";\nimport transition_selectAll from \"./selectAll\";\nimport transition_selection from \"./selection\";\nimport transition_style from \"./style\";\nimport transition_styleTween from \"./styleTween\";\nimport transition_text from \"./text\";\nimport transition_transition from \"./transition\";\nimport transition_tween from \"./tween\";\nimport transition_end from \"./end\";\n\nvar id = 0;\n\nexport function Transition(groups, parents, name, id) {\n this._groups = groups;\n this._parents = parents;\n this._name = name;\n this._id = id;\n}\n\nexport default function transition(name) {\n return selection().transition(name);\n}\n\nexport function newId() {\n return ++id;\n}\n\nvar selection_prototype = selection.prototype;\n\nTransition.prototype = transition.prototype = {\n constructor: Transition,\n select: transition_select,\n selectAll: transition_selectAll,\n filter: transition_filter,\n merge: transition_merge,\n selection: transition_selection,\n transition: transition_transition,\n call: selection_prototype.call,\n nodes: selection_prototype.nodes,\n node: selection_prototype.node,\n size: selection_prototype.size,\n empty: selection_prototype.empty,\n each: selection_prototype.each,\n on: transition_on,\n attr: transition_attr,\n attrTween: transition_attrTween,\n style: transition_style,\n styleTween: transition_styleTween,\n text: transition_text,\n remove: transition_remove,\n tween: transition_tween,\n delay: transition_delay,\n duration: transition_duration,\n ease: transition_ease,\n end: transition_end\n};\n","import {selector} from \"d3-selection\";\nimport {Transition} from \"./index\";\nimport schedule, {get} from \"./schedule\";\n\nexport default function(select) {\n var name = this._name,\n id = this._id;\n\n if (typeof select !== \"function\") select = selector(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) {\n if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) {\n if (\"__data__\" in node) subnode.__data__ = node.__data__;\n subgroup[i] = subnode;\n schedule(subgroup[i], name, id, i, subgroup, get(node, id));\n }\n }\n }\n\n return new Transition(subgroups, this._parents, name, id);\n}\n","import {selectorAll} from \"d3-selection\";\nimport {Transition} from \"./index\";\nimport schedule, {get} from \"./schedule\";\n\nexport default function(select) {\n var name = this._name,\n id = this._id;\n\n if (typeof select !== \"function\") select = selectorAll(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n for (var children = select.call(node, node.__data__, i, group), child, inherit = get(node, id), k = 0, l = children.length; k < l; ++k) {\n if (child = children[k]) {\n schedule(child, name, id, k, children, inherit);\n }\n }\n subgroups.push(children);\n parents.push(node);\n }\n }\n }\n\n return new Transition(subgroups, parents, name, id);\n}\n","import {matcher} from \"d3-selection\";\nimport {Transition} from \"./index\";\n\nexport default function(match) {\n if (typeof match !== \"function\") match = matcher(match);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) {\n if ((node = group[i]) && match.call(node, node.__data__, i, group)) {\n subgroup.push(node);\n }\n }\n }\n\n return new Transition(subgroups, this._parents, this._name, this._id);\n}\n","import {Transition} from \"./index\";\n\nexport default function(transition) {\n if (transition._id !== this._id) throw new Error;\n\n for (var groups0 = this._groups, groups1 = transition._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) {\n for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {\n if (node = group0[i] || group1[i]) {\n merge[i] = node;\n }\n }\n }\n\n for (; j < m0; ++j) {\n merges[j] = groups0[j];\n }\n\n return new Transition(merges, this._parents, this._name, this._id);\n}\n","import {Transition, newId} from \"./index\";\nimport schedule, {get} from \"./schedule\";\n\nexport default function() {\n var name = this._name,\n id0 = this._id,\n id1 = newId();\n\n for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n var inherit = get(node, id0);\n schedule(node, name, id1, i, group, {\n time: inherit.time + inherit.delay + inherit.duration,\n delay: 0,\n duration: inherit.duration,\n ease: inherit.ease\n });\n }\n }\n }\n\n return new Transition(groups, this._parents, name, id1);\n}\n","import {get, set, init} from \"./schedule\";\n\nfunction start(name) {\n return (name + \"\").trim().split(/^|\\s+/).every(function(t) {\n var i = t.indexOf(\".\");\n if (i >= 0) t = t.slice(0, i);\n return !t || t === \"start\";\n });\n}\n\nfunction onFunction(id, name, listener) {\n var on0, on1, sit = start(name) ? init : set;\n return function() {\n var schedule = sit(this, id),\n on = schedule.on;\n\n // If this node shared a dispatch with the previous node,\n // just assign the updated shared dispatch and we’re done!\n // Otherwise, copy-on-write.\n if (on !== on0) (on1 = (on0 = on).copy()).on(name, listener);\n\n schedule.on = on1;\n };\n}\n\nexport default function(name, listener) {\n var id = this._id;\n\n return arguments.length < 2\n ? get(this.node(), id).on.on(name)\n : this.each(onFunction(id, name, listener));\n}\n","import {interpolateTransformSvg as interpolateTransform} from \"d3-interpolate\";\nimport {namespace} from \"d3-selection\";\nimport {tweenValue} from \"./tween\";\nimport interpolate from \"./interpolate\";\n\nfunction attrRemove(name) {\n return function() {\n this.removeAttribute(name);\n };\n}\n\nfunction attrRemoveNS(fullname) {\n return function() {\n this.removeAttributeNS(fullname.space, fullname.local);\n };\n}\n\nfunction attrConstant(name, interpolate, value1) {\n var string00,\n string1 = value1 + \"\",\n interpolate0;\n return function() {\n var string0 = this.getAttribute(name);\n return string0 === string1 ? null\n : string0 === string00 ? interpolate0\n : interpolate0 = interpolate(string00 = string0, value1);\n };\n}\n\nfunction attrConstantNS(fullname, interpolate, value1) {\n var string00,\n string1 = value1 + \"\",\n interpolate0;\n return function() {\n var string0 = this.getAttributeNS(fullname.space, fullname.local);\n return string0 === string1 ? null\n : string0 === string00 ? interpolate0\n : interpolate0 = interpolate(string00 = string0, value1);\n };\n}\n\nfunction attrFunction(name, interpolate, value) {\n var string00,\n string10,\n interpolate0;\n return function() {\n var string0, value1 = value(this), string1;\n if (value1 == null) return void this.removeAttribute(name);\n string0 = this.getAttribute(name);\n string1 = value1 + \"\";\n return string0 === string1 ? null\n : string0 === string00 && string1 === string10 ? interpolate0\n : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));\n };\n}\n\nfunction attrFunctionNS(fullname, interpolate, value) {\n var string00,\n string10,\n interpolate0;\n return function() {\n var string0, value1 = value(this), string1;\n if (value1 == null) return void this.removeAttributeNS(fullname.space, fullname.local);\n string0 = this.getAttributeNS(fullname.space, fullname.local);\n string1 = value1 + \"\";\n return string0 === string1 ? null\n : string0 === string00 && string1 === string10 ? interpolate0\n : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));\n };\n}\n\nexport default function(name, value) {\n var fullname = namespace(name), i = fullname === \"transform\" ? interpolateTransform : interpolate;\n return this.attrTween(name, typeof value === \"function\"\n ? (fullname.local ? attrFunctionNS : attrFunction)(fullname, i, tweenValue(this, \"attr.\" + name, value))\n : value == null ? (fullname.local ? attrRemoveNS : attrRemove)(fullname)\n : (fullname.local ? attrConstantNS : attrConstant)(fullname, i, value));\n}\n","import {namespace} from \"d3-selection\";\n\nfunction attrInterpolate(name, i) {\n return function(t) {\n this.setAttribute(name, i(t));\n };\n}\n\nfunction attrInterpolateNS(fullname, i) {\n return function(t) {\n this.setAttributeNS(fullname.space, fullname.local, i(t));\n };\n}\n\nfunction attrTweenNS(fullname, value) {\n var t0, i0;\n function tween() {\n var i = value.apply(this, arguments);\n if (i !== i0) t0 = (i0 = i) && attrInterpolateNS(fullname, i);\n return t0;\n }\n tween._value = value;\n return tween;\n}\n\nfunction attrTween(name, value) {\n var t0, i0;\n function tween() {\n var i = value.apply(this, arguments);\n if (i !== i0) t0 = (i0 = i) && attrInterpolate(name, i);\n return t0;\n }\n tween._value = value;\n return tween;\n}\n\nexport default function(name, value) {\n var key = \"attr.\" + name;\n if (arguments.length < 2) return (key = this.tween(key)) && key._value;\n if (value == null) return this.tween(key, null);\n if (typeof value !== \"function\") throw new Error;\n var fullname = namespace(name);\n return this.tween(key, (fullname.local ? attrTweenNS : attrTween)(fullname, value));\n}\n","function styleInterpolate(name, i, priority) {\n return function(t) {\n this.style.setProperty(name, i(t), priority);\n };\n}\n\nfunction styleTween(name, value, priority) {\n var t, i0;\n function tween() {\n var i = value.apply(this, arguments);\n if (i !== i0) t = (i0 = i) && styleInterpolate(name, i, priority);\n return t;\n }\n tween._value = value;\n return tween;\n}\n\nexport default function(name, value, priority) {\n var key = \"style.\" + (name += \"\");\n if (arguments.length < 2) return (key = this.tween(key)) && key._value;\n if (value == null) return this.tween(key, null);\n if (typeof value !== \"function\") throw new Error;\n return this.tween(key, styleTween(name, value, priority == null ? \"\" : priority));\n}\n","import {get, init} from \"./schedule\";\n\nfunction delayFunction(id, value) {\n return function() {\n init(this, id).delay = +value.apply(this, arguments);\n };\n}\n\nfunction delayConstant(id, value) {\n return value = +value, function() {\n init(this, id).delay = value;\n };\n}\n\nexport default function(value) {\n var id = this._id;\n\n return arguments.length\n ? this.each((typeof value === \"function\"\n ? delayFunction\n : delayConstant)(id, value))\n : get(this.node(), id).delay;\n}\n","import {get, set} from \"./schedule\";\n\nfunction durationFunction(id, value) {\n return function() {\n set(this, id).duration = +value.apply(this, arguments);\n };\n}\n\nfunction durationConstant(id, value) {\n return value = +value, function() {\n set(this, id).duration = value;\n };\n}\n\nexport default function(value) {\n var id = this._id;\n\n return arguments.length\n ? this.each((typeof value === \"function\"\n ? durationFunction\n : durationConstant)(id, value))\n : get(this.node(), id).duration;\n}\n","import {get, set} from \"./schedule\";\n\nfunction easeConstant(id, value) {\n if (typeof value !== \"function\") throw new Error;\n return function() {\n set(this, id).ease = value;\n };\n}\n\nexport default function(value) {\n var id = this._id;\n\n return arguments.length\n ? this.each(easeConstant(id, value))\n : get(this.node(), id).ease;\n}\n","import {set} from \"./schedule\";\n\nexport default function() {\n var on0, on1, that = this, id = that._id, size = that.size();\n return new Promise(function(resolve, reject) {\n var cancel = {value: reject},\n end = {value: function() { if (--size === 0) resolve(); }};\n\n that.each(function() {\n var schedule = set(this, id),\n on = schedule.on;\n\n // If this node shared a dispatch with the previous node,\n // just assign the updated shared dispatch and we’re done!\n // Otherwise, copy-on-write.\n if (on !== on0) {\n on1 = (on0 = on).copy();\n on1._.cancel.push(cancel);\n on1._.interrupt.push(cancel);\n on1._.end.push(end);\n }\n\n schedule.on = on1;\n });\n });\n}\n","import {Transition, newId} from \"../transition/index\";\nimport schedule from \"../transition/schedule\";\nimport {easeCubicInOut} from \"d3-ease\";\nimport {now} from \"d3-timer\";\n\nvar defaultTiming = {\n time: null, // Set on use.\n delay: 0,\n duration: 250,\n ease: easeCubicInOut\n};\n\nfunction inherit(node, id) {\n var timing;\n while (!(timing = node.__transition) || !(timing = timing[id])) {\n if (!(node = node.parentNode)) {\n return defaultTiming.time = now(), defaultTiming;\n }\n }\n return timing;\n}\n\nexport default function(name) {\n var id,\n timing;\n\n if (name instanceof Transition) {\n id = name._id, name = name._name;\n } else {\n id = newId(), (timing = defaultTiming).time = now(), name = name == null ? null : name + \"\";\n }\n\n for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n schedule(node, name, id, i, group, timing || inherit(node, id));\n }\n }\n }\n\n return new Transition(groups, this._parents, name, id);\n}\n","import {selection} from \"d3-selection\";\nimport selection_interrupt from \"./interrupt\";\nimport selection_transition from \"./transition\";\n\nselection.prototype.interrupt = selection_interrupt;\nselection.prototype.transition = selection_transition;\n","import interrupt from \"../interrupt\";\n\nexport default function(name) {\n return this.each(function() {\n interrupt(this, name);\n });\n}\n","import {STARTING, ENDING, ENDED} from \"./transition/schedule\";\n\nexport default function(node, name) {\n var schedules = node.__transition,\n schedule,\n active,\n empty = true,\n i;\n\n if (!schedules) return;\n\n name = name == null ? null : name + \"\";\n\n for (i in schedules) {\n if ((schedule = schedules[i]).name !== name) { empty = false; continue; }\n active = schedule.state > STARTING && schedule.state < ENDING;\n schedule.state = ENDED;\n schedule.timer.stop();\n schedule.on.call(active ? \"interrupt\" : \"cancel\", node, node.__data__, schedule.index, schedule.group);\n delete schedules[i];\n }\n\n if (empty) delete node.__transition;\n}\n","import { select, event as d3event, selection, clientPoint } from 'd3-selection';\nimport { drag as d3drag } from 'd3-drag';\nimport 'd3-transition';\nimport { mergeRecursive } from './common-utils';\n/**\n * This function takes a raw DOM element or\n * a string and returns a d3 selection of that element.\n *\n * @param {HTMLElement | string} element The element to wrap in d3 selection.\n * @return {Selection} Instance of d3 selection.\n */\nconst selectElement = element => select(element);\n\n/**\n * It creates a new d3 element on the parent element\n * @param {Selection} parent Element to which the element is to be appended\n * @param {Object} elemType Type of the new element\n * @param {Array} data Data for the new element\n * @param {Object} selector classname/id/tagname for the element\n * @return {HTMLElement} Newly Created Element\n */\nconst makeElement = (parent, elemType, data, selector, callbacks = {}, keyFn) => {\n if ((parent instanceof HTMLElement || parent instanceof SVGElement)) {\n parent = selectElement(parent);\n }\n\n const selectorVal = selector ? selector[0] : null;\n let selectorType = null;\n let actualSelector = null;\n let element = null;\n let enterSel = null;\n let mergeSel = null;\n let filter;\n if (selectorVal) {\n if (selectorVal === '#') {\n selectorType = 'id';\n actualSelector = selector;\n } else {\n selectorType = 'class';\n actualSelector = selector[0] === '.' ? selector : `.${selector}`;\n }\n } else {\n actualSelector = elemType;\n filter = true;\n }\n element = parent.selectAll(actualSelector);\n\n filter && (element = element.filter(function () {\n return this.parentNode === parent.node();\n }));\n element = element.data(data, keyFn);\n\n enterSel = element.enter()\n .append(elemType || 'div');\n callbacks.enter && enterSel.each(function (...params) {\n callbacks.enter(selectElement(this), ...params);\n });\n\n mergeSel = enterSel.merge(element);\n callbacks.update && mergeSel.each(function (...params) {\n callbacks.update(selectElement(this), ...params);\n });\n if (selectorType === 'class') {\n mergeSel.classed(selectorVal === '.' ? selector.substring(1, selector.length) : selector, true);\n } else if (selectorType === 'id') {\n mergeSel.attr('id', selector.substring(1, selector.length));\n }\n const exitSel = element.exit();\n\n if (callbacks.exit) {\n exitSel.each(function (...params) {\n callbacks.exit(selectElement(this), ...params);\n });\n } else {\n exitSel.remove();\n }\n return mergeSel;\n};\n\n/**\n * This function applies styles to an element\n * @param {Object} elem Element Selection\n * @param {Object} styleObj Style Object to be applied\n * @return {Element} Newly Created Element\n*/\nconst applyStyle = (elem, styleObj) => {\n Object.entries(styleObj).forEach((d) => {\n elem.style(d[0], d[1]);\n }, this);\n return elem;\n};\n\n/**\n * This function appends a dom element in another element.\n * @param {HTMLElement | SVGElement} element1 The element in which to append the second element\n * @param {HTMLElement | SVGElement} element2 The element which will be appended.\n */\nconst appendElement = (element1, element2) => {\n element1.appendChild(element2);\n};\n\n/**\n * Sets the attributes to the element.\n * @param {HTMLElement | SVGElement} element Element on which attributes will be applied\n * @param {Object} attrs Attributes which need to be applied\n */\nconst setElementAttrs = (element, attrs) => {\n for (const key in attrs) {\n if ({}.hasOwnProperty.call(attrs, key)) {\n element.attr(key, attrs[key]);\n }\n }\n};\n\n/**\n * Sets attributes in the svg or html element\n * @param {SVGElement | HTMLElement} element The element on which attrs will be applied\n * @param {Array.} attrs Array of attributes\n * @param {string} className className of elements to select.\n * @return {SVGElement | HTMLElement} SVGElement or html element.\n */\nconst setAttrs = (element, attrs, className) => {\n if (!(element instanceof selection)) {\n element = selectElement(element);\n }\n className !== undefined ? element.selectAll(`.${className}`).each(function () {\n setElementAttrs(select(this), attrs);\n }) : setElementAttrs(element, attrs);\n return element;\n};\n\n/**\n * Adds a css class to elements which passes the filter function.If filter function is not given,\n * then all elements will be applied the class.\n * @param {HTMLElement | SVGElement} element element\n * @param {string} className css class\n * @param {string} selector css selector\n * @param {Function} filterFn filter method.\n */\nconst addClass = (element, className, selector, filterFn) => {\n select(element).selectAll(selector).each(function (data) {\n const elem = select(this);\n filterFn ? filterFn(data) && elem.classed(className, true) :\n elem.classed(className, true);\n });\n};\n\n/**\n * Removes the css class from elements which passes the filter function.If filter function is not given,\n * then all elements will be applied the class.\n * @param {HTMLElement | SVGElement} element element\n * @param {string} className css class\n * @param {string} selector css selector\n * @param {Function} filterFn filter method.\n */\nconst removeClass = (element, className, selector, filterFn) => {\n select(element).selectAll(selector).each(function (data) {\n const elem = select(this);\n filterFn ? filterFn(data) && elem.classed(className, false) :\n elem.classed(className, false);\n });\n};\n\n/**\n * Sets styles in the svg or html element\n * @param {SVGElement | HTMLElement} element The element on which styles will be applied\n * @param {Array.} styles Array of style attributes\n * @return {SVGElement | HTMLElement} SVGElement or html element.\n */\nconst setStyles = (element, styles) => {\n if (!(element instanceof selection)) {\n element = selectElement(element);\n }\n for (const key in styles) {\n if ({}.hasOwnProperty.call(styles, key)) {\n element.style(key, styles[key]);\n }\n }\n return element;\n};\n\n/**\n * Creates svg or html elements by binding data to the selection.Removes extra elements\n * on exit.\n * @param {Object} params Parameter object\n * @param {SVGElement | HTMLElement} params.container Container element where all elements will be appended\n * @param {string} params.selector Selector by which elements will be selected from dom\n * @param {string} params.append Append tag\n * @param {Function} params.each Function which will be executed for each data point and element.\n */\nconst createElements = (params) => {\n const container = select(params.container);\n let data;\n let sel;\n\n data = params.data;\n if (typeof data === 'number') {\n data = Array(data).fill().map((d, i) => i);\n }\n sel = container.selectAll(params.selector).data(data);\n\n sel = container.selectAll(params.selector).filter(function () {\n return this.parentNode === container.node();\n }).data(params.data);\n\n const selectionMerge = sel.enter().append(params.append).merge(sel).each(function (d, i) {\n params.each(d, select(this), i);\n });\n\n selectionMerge.attr('class', params.className || '');\n sel.exit().remove();\n};\n\n/**\n * Clips an element with given measurement. Basically it is used to hide overflowing portions\n * of any element.\n * @param {SVGElement} container svg element which needs to be clipped.\n * @param {Object} measurement Dimensions of the clipped rectangle.\n * @param {string} id Unique id of the clip element\n */\nconst clipElement = (container, measurement, id) => {\n const clipPathElement = makeElement(select(container), 'clipPath', [1], `#${id}`);\n const clipPathRect = makeElement(clipPathElement, 'rect', [1]);\n clipPathRect.attr('x', measurement.x)\n .attr('y', measurement.x)\n .attr('width', measurement.width)\n .attr('height', measurement.height);\n clipPathElement.attr('clip-path', `url(#${id})`);\n};\n\n/**\n * Returns the element of the corresponding classname.\n * @param {HTMLElement | SVGElement} node html or svg node element.\n * @param {string} className css class to be applied.\n * @return {HTMLElement | SVGElement} html or svg element.\n */\nconst getElementsByClassName = (node, className) => select(node).selectAll(className).nodes();\n\n/**\n * Gets the mouse position relative to an svg type of element\n * @param {SVGElement} element Any svg element like rect, circle, etc.\n * @param {Event} event Event object.\n * @return {Object} x and y position relative to the container element passed.\n */\nconst getMousePos = (element, event) => {\n const boundingClientRect = element.getBoundingClientRect();\n return {\n x: event.x - boundingClientRect.x,\n y: event.y - boundingClientRect.y\n };\n};\n\nconst getClientPoint = (...params) => {\n const pos = clientPoint(...params);\n return {\n x: pos[0],\n y: pos[1]\n };\n};\n\n/** This function appends a dom element in another element.\n * @param {Object} tag The tag name of the element to append\n * @param {Object} mount Mount point fo the element\n * @return {Object} selection of the appended element\n */\nconst createElement = (tag, mount) => select(mount).append(tag).node();\n\n/**\n * Gets the d3 event function\n * @return {Object} d3 event\n */\nconst getEvent = () => d3event;\n\n/**\n * Gets the d3 drag function\n * @return {Object} d3 drag\n */\nconst getD3Drag = () => d3drag;\n\nconst getSmartComputedStyle = (group, css) => {\n let textEl;\n const testText = 'W';\n const mandatoryStyle = {\n 'fill-opacity': 0\n };\n const className = typeof css === 'string' ? css : (css instanceof Array ? css.join(' ') : undefined);\n\n if (group.node() instanceof HTMLElement) {\n textEl = group.append('div').html(testText);\n } else {\n textEl = group.append('text').text(testText);\n }\n\n if (className) {\n textEl.attr('class', className);\n } else if (typeof css === 'object') {\n delete css['fill-opacity'];\n mergeRecursive(mandatoryStyle, css);\n }\n\n textEl.style(mandatoryStyle);\n const computedStyle = window.getComputedStyle(textEl.node());\n const styleForSmartLabel = {\n fontSize: computedStyle.fontSize,\n fontFamily: computedStyle.fontFamily,\n fontWeight: computedStyle.fontWeight,\n fontStyle: computedStyle.fontStyle\n };\n\n textEl.remove();\n\n return styleForSmartLabel;\n};\n\nconst hasTouch = () => 'ontouchstart' in document.documentElement;\n\nexport {\n hasTouch,\n selectElement,\n makeElement,\n applyStyle,\n addClass,\n removeClass,\n appendElement,\n setAttrs,\n setStyles,\n createElement,\n createElements,\n clipElement,\n getElementsByClassName,\n getMousePos,\n getEvent,\n getD3Drag,\n getSmartComputedStyle,\n getClientPoint\n};\n","const events = [\n 'initialized',\n 'beforeupdate',\n 'updated',\n 'beforedraw',\n 'drawn',\n 'beforeremove',\n 'removed',\n 'animationend'\n];\n\nconst compositions = [\n 'canvas',\n 'unit',\n 'layer',\n 'axis',\n 'facet-headers',\n 'legend',\n 'caption'\n];\n\nconst EVENT_LIST = [];\n\ncompositions.forEach((composition) => {\n events.forEach((event) => {\n EVENT_LIST.push(`${composition}.${event}`);\n });\n});\n\nexport default EVENT_LIST;\n","import EVENT_LIST from './event-list';\nimport { createPromise } from './helper';\n\n/**\n * At first call it accepts one function\n * calling it second time accepts notification object.\n * notification object then called with first accepted function\n *\n * @param {Function} resolveFn a promise's resolve function\n * @return {Function} a function to accept notification object\n */\nconst resolver = resolveFn => notification => resolveFn(notification);\n\n/**\n * Checks if the property string is present in the source object\n *\n * @param {Object} source source object whom you want to check the property\n * @param {string} property key name that need to be checked\n * @return {boolean} returns true if the property found in the source object\n */\nconst hasOwn = (source, property) => Object.prototype.hasOwnProperty.call(source, property);\n\n/**\n * LifeCycleManager which goes as a dependendecy to a muze\n * it accepts notification from the entire library throughout\n * the exeecution life\n *\n * @export\n * @class LifeCycleManager\n */\nexport default class LifeCycleManager {\n\n /**\n * Creates an instance of LifeCycleManager.\n * @memberof LifeCycleManager\n */\n constructor () {\n this._eventList = EVENT_LIST;\n this._promises = new Map();\n this._notifiers = {};\n this._lifeCycles = {};\n this._unreleasedLifeCycles = {};\n this._boot();\n }\n\n /**\n * Fills all the notifiers with resolver callback\n *\n * @memberof LifeCycleManager\n */\n _boot () {\n this._notifiers = this._eventList.reduce((acc, name) => {\n acc[name] = resolver;\n return acc;\n }, {});\n this._preparePromises();\n }\n\n /**\n * Public method which gives the promise corresponding\n * to the event name\n *\n * @param {string} eventName name of the event like `canvas.drawn`\n * @return {promise} promise that is passed to the user\n * @memberof LifeCycleManager\n */\n retrieve (eventName) {\n return this._promises.get(eventName);\n }\n\n /**\n * Creates a promise that will be passed to user's callback\n *\n * @param {string} eventName name of the event like `canvas.drawn`\n * @return {promise} a pending promise waiting for resolve to be called\n * @memberof LifeCycleManager\n */\n _makeNotifierPromise (eventName) {\n return new Promise((resolve) => {\n this._notifiers[eventName] = resolver(resolve);\n });\n }\n\n /**\n * Prepares the promise map with pending promises\n * all the promises are in a pending state where their's\n * resolve function waiting to be called with notification object\n * @memberof LifeCycleManager\n */\n _preparePromises () {\n this._eventList.forEach((eventName) => {\n const promise = this._makeNotifierPromise(eventName);\n this._promises.set(eventName, promise);\n createPromise(promise, eventName, this);\n });\n }\n\n /**\n * Resolves the promise with notification object\n *\n * @param {string} eventName name of the event in the system\n * @param {Object} notification notification object\n * @param {string} notification.formalName name of the sender creating the notification\n * @param {Object} notification.client instance or array of instances sending the notification\n * @param {string} notification.action the stage name when the event happened like `beforedraw`\n *\n * @memberof LifeCycleManager\n */\n _resolvePromise (eventName, notification) {\n this._notifiers[eventName](notification);\n }\n\n /**\n * Public method which is being called by different\n * subcompoents of the system at different execution atages\n * @param {Object} notification notification object\n * @param {string} notification.formalName name of the sender creating the notification\n * @param {Object} notification.client instance or array of instances sending the notification\n * @param {string} notification.action the stage name when the event happened like `beforedraw`\n * @memberof LifeCycleManager\n */\n notify (notification) {\n // get the composition name from notification\n // or from static formalName() method\n const composition = notification.formalName || notification.client.constructor.formalName();\n notification.formalName = composition;\n this._releasePromisesFromCache();\n this._notify(composition, notification);\n }\n\n /**\n * Notify user the with promsie in a callback\n * if callback not found then cache it\n *\n * @param {string} composition\n * @param {Object} notification notification object\n * @param {string} notification.formalName name of the sender creating the notification\n * @param {Object} notification.client instance or array of instances sending the notification\n * @param {string} notification.action the stage name when the event happened like `beforedraw`\n * @memberof LifeCycleManager\n */\n _notify (composition, notification) {\n const stage = notification.action;\n const eventName = `${composition}.${stage}`;\n\n // resolves promise with the notification object\n this._resolvePromise(eventName, notification);\n\n // get the promise from the promise map\n const promise = this.retrieve(eventName);\n\n if (this._lifeCycles[composition]) {\n if (this._lifeCycles[composition][stage]) {\n // if user given call back exists, then call with promise\n this._callLifeCycleCallback(composition, stage, promise);\n } else {\n // otherwise cache the promise\n this._cachePromise(composition, stage, promise);\n }\n } else {\n this._cachePromise(composition, stage, promise);\n }\n }\n\n /**\n * Calls the user's callback with callback\n *\n * @param {string} composition name of the compositon like `canvas`\n * @param {string} stage the stage name when the event happened like `beforedraw`\n * @param {promise} promise promise that is passed to the user\n * @memberof LifeCycleManager\n */\n _callLifeCycleCallback (composition, stage, promise) {\n const eventName = `${composition}.${stage}`;\n this._lifeCycles[composition][stage](promise);\n this._resetTargetPromise(eventName);\n }\n\n /**\n * Try to clear the cached promsies once we have\n * macthed callbacks from the user\n *\n * @memberof LifeCycleManager\n */\n _releasePromisesFromCache () {\n const compositions = Object.keys(this._unreleasedLifeCycles);\n compositions.forEach((composition) => {\n const stages = Object.keys(this._unreleasedLifeCycles[composition]);\n stages.forEach((stage) => {\n if (this._lifeCycles[composition]) {\n if (this._lifeCycles[composition][stage]) {\n // take the promise from unreleased lifeCycles\n const promise = this._unreleasedLifeCycles[composition][stage];\n // call the user given callback with that promise\n this._callLifeCycleCallback(composition, stage, promise);\n // delete promise from unreleased lifeCycles\n delete this._unreleasedLifeCycles[composition][stage];\n }\n }\n });\n });\n }\n\n /**\n * Cache the promise in the map. This cache\n * then get consumed if we get user callbacks\n * @param {string} composition name of the compositon like `canvas`\n * @param {string} stage the stage name when the event happened like `beforedraw`\n * @param {promise} promise promise that is passed to the user\n * @memberof LifeCycleManager\n */\n _cachePromise (composition, stage, promise) {\n if (!hasOwn(this._unreleasedLifeCycles, composition)) {\n this._unreleasedLifeCycles[composition] = {};\n }\n\n if (!hasOwn(this._unreleasedLifeCycles[composition], stage)) {\n this._unreleasedLifeCycles[composition][stage] = {};\n }\n this._unreleasedLifeCycles[composition][stage] = promise;\n }\n\n /**\n * It register's the callbacks gievn the user\n *\n * @param {Object} [lifeCycles={}] a object with list of callbacks\n * @memberof LifeCycleManager\n */\n register (lifeCycles = {}) {\n this._lifeCycles = lifeCycles;\n // as we get all the callbacks, try to call them\n // from unreleased promise map\n this._releasePromisesFromCache();\n }\n\n /**\n * Reset the promise into pending state\n *\n * @param {string} eventName name of the event happening\n * @memberof LifeCycleManager\n */\n _resetTargetPromise (eventName) {\n setTimeout(() => {\n this._notifiers[eventName] = resolver;\n this._promises.set(eventName, this._makeNotifierPromise(eventName));\n }, 0);\n }\n}\n","import LifeCycleManager from './lifecycle-manager';\n\nexport default LifeCycleManager;\n","/**\n * Creates a new promise when the given promise is resolved. This needs to be done so that after the lifecycle event\n * is completed, then again when the event gets completed, then a new promise gets resolved.\n *\n * @param {Promise} promise Instance of promise\n * @param {string} eventName name of event\n * @param {LifeCycleManager} context Instance of lifecyclemanager\n */\nexport const createPromise = (promise, eventName, context) => {\n promise.then(() => {\n const prm = context._makeNotifierPromise(eventName);\n context._promises.set(eventName, prm);\n createPromise(prm, eventName, context);\n });\n};\n","import { default as DataModel } from 'datamodel';\nimport * as scales from './scales';\nimport * as colorSchemes from './color-schemes';\nimport * as STATE_NAMESPACES from './enums/namespace';\n\nconst InvalidAwareTypes = DataModel.InvalidAwareTypes;\n\nexport {\n InvalidAwareTypes,\n DataModel\n};\n\nexport {\n ReservedFields,\n CommonProps,\n COORD_TYPES\n} from './enums';\n\nexport { STATE_NAMESPACES };\n\nexport {\n scales,\n colorSchemes\n};\n\nexport {\n getNearestValue,\n getValueParser,\n transformColors,\n detectColor,\n hslToRgb,\n rgbToHsv,\n hexToHsv,\n hsvToRgb,\n escapeHTML,\n angleToRadian,\n generateGetterSetters,\n getArraySum,\n ERROR_MSG,\n interpolator,\n colorInterpolator,\n numberInterpolator,\n piecewiseInterpolator,\n reqAnimFrame,\n cancelAnimFrame,\n nextAnimFrame,\n getMax,\n getMin,\n getDomainFromData,\n getUniqueId,\n mergeRecursive,\n unionDomain,\n replaceCSSPrefix,\n symbolFns,\n defaultValue,\n easeFns,\n clone,\n interpolateArray,\n getMinPoint,\n getMaxPoint,\n getClosestIndexOf,\n registerListeners,\n Voronoi,\n checkExistence,\n sanitizeIP,\n getMinDiff,\n capitalizeFirst,\n getWindow,\n getQualifiedClassName,\n Store,\n getDependencyOrder,\n objectIterator,\n intSanitizer,\n transactor,\n enableChainedTransaction,\n isHTMLElem,\n isEqual,\n isSimpleObject,\n nextFrame,\n filterPropagationModel,\n getObjProp,\n getDataModelFromIdentifiers,\n getDataModelFromRange,\n transposeArray,\n toArray,\n extendsClass,\n concatModels,\n assembleModelFromIdentifiers,\n isValidValue,\n nestCollection,\n stack,\n getSymbol,\n Scales,\n Symbols,\n pathInterpolators,\n hslInterpolator,\n getSmallestDiff,\n require,\n formatTemporal,\n nearestSortingDetails,\n createSelection,\n temporalFields,\n retrieveNearestGroupByReducers,\n retrieveFieldDisplayName,\n sanitizeDomainWhenEqual\n} from './common-utils';\n\nexport {\n selectElement,\n makeElement,\n applyStyle,\n addClass,\n removeClass,\n appendElement,\n setAttrs,\n setStyles,\n createElement,\n createElements,\n clipElement,\n getElementsByClassName,\n getMousePos,\n getEvent,\n getD3Drag,\n getSmartComputedStyle,\n getClientPoint,\n hasTouch\n} from './renderer-utils';\n\nexport {\n timeMillisecond,\n timeSecond,\n timeMinute,\n timeHour,\n timeDay,\n timeWeek,\n timeMonth,\n timeYear\n} from 'd3-time';\n\nexport { default as Smartlabel } from 'fusioncharts-smartlabel';\n\nexport { dataSelect } from './DataSystem';\n\nexport { default as LifeCycleManager } from './lifecycle-manager';\n\nexport {\n DimensionSubtype,\n FieldType,\n MeasureSubtype,\n DateTimeFormatter,\n DM_DERIVATIVES,\n GROUP_BY_FUNCTIONS\n} from 'datamodel';\n\n","export const DRAG = 'drag';\nexport const HOVER = 'hover';\nexport const SELECTIONDRAG = 'selectiondrag';\nexport const CLICK = 'click';\nexport const LONGTOUCH = 'longtouch';\nexport const TOUCHDRAG = 'touchdrag';\nexport const ALL_ACTIONS = '*';\n","const SELECTION_NEW_ENTRY = 1;\nconst SELECTION_NEW_EXIT = -1;\nconst SELECTION_NULL = 0;\nconst SELECTION_OLD_ENTRY = 2;\nconst SELECTION_OLD_EXIT = -2;\n\nexport {\n SELECTION_NEW_ENTRY,\n SELECTION_NEW_EXIT,\n SELECTION_NULL,\n SELECTION_OLD_ENTRY,\n SELECTION_OLD_EXIT\n};\n","import SelectionSet from './selection-set';\n\nexport default SelectionSet;\n","import {\n SELECTION_NEW_ENTRY, SELECTION_NEW_EXIT, SELECTION_NULL, SELECTION_OLD_ENTRY, SELECTION_OLD_EXIT\n} from '../enums/selection';\n/* eslint-disable guard-for-in */\n\n/**\n * This component is used to keep track of the row tuples of the data which gets added and removed. This keeps\n * information of which rows are in previous and new entry set and previous and new exit set. This is initialized by\n * {@link Firebolt}.\n *\n * @public\n *\n * @class SelectionSet\n */\nclass SelectionSet {\n /**\n * Creates an instance of selection set\n *\n * @param {Array.} completeSet Set of unique ids.\n */\n constructor (completeSet, _volatile) {\n this.completeSet = completeSet;\n this._set = completeSet.reduce((obj, key) => {\n obj[key] = SELECTION_NULL;\n return obj;\n }, {});\n this._volatile = _volatile;\n this._completeSetCount = completeSet.length;\n this._lockedSelection = {};\n this._resetted = true;\n }\n\n /**\n * Adds a set of ids to the selection set. This also moves the other rows to exit set.\n *\n * @public\n * @param {Array.} ids Array of unique ids.\n *\n * @return {SelectionSet} Instance of selection set.\n */\n add (ids) {\n this._resetted = false;\n\n const set = this._set;\n // from exitset to entryset\n ids.forEach((i) => {\n set[i] = SELECTION_NEW_ENTRY;\n });\n\n for (const key in set) {\n if (set[key] !== SELECTION_NEW_ENTRY && set[key] !== SELECTION_OLD_ENTRY) {\n set[key] = set[key] < 0 ? SELECTION_OLD_EXIT : SELECTION_NEW_EXIT;\n }\n }\n return this;\n }\n\n /**\n * Adds an array of ids to the old entry set.\n *\n * @param {Array.} ids Array of unique ids\n *\n * @return {SelectionSet} Instance of selection set.\n */\n update (ids) {\n const set = this._set;\n // from exitset to entryset\n ids.forEach((i) => {\n set[i] = SELECTION_OLD_ENTRY;\n });\n\n return this;\n }\n\n /**\n * Moves all ids which in new entry set to old entry set.\n *\n * @public\n * @param {Array.} ids Array of unique ids\n *\n * @return {SelectionSet} Instance of selection set.\n */\n updateEntry () {\n const set = this._set;\n\n // from exitset to entryset\n for (const key in set) {\n set[key] = set[key] === SELECTION_NEW_ENTRY ? SELECTION_OLD_ENTRY : set[key];\n }\n return this;\n }\n\n /**\n * Moves an array of ids which are in new exit set to old exit set.\n *\n * @public\n *\n * @param {Array.} ids Array of unique ids.\n *\n * @return {SelectionSet} Instance of selection set.\n */\n updateExit () {\n const set = this._set;\n // from exitset to entryset\n for (const key in set) {\n set[key] = set[key] === SELECTION_NEW_EXIT ? SELECTION_OLD_EXIT : set[key];\n }\n return this;\n }\n\n /**\n * Removes an array of ids from the selection set. It also moves the remaining row ids to entry set.\n *\n * @public\n * @param {Array.} ids Array of unique ids\n *\n * @return {SelectionSet} Instance of selection set\n */\n remove (ids) {\n this._resetted = false;\n\n const set = this._set;\n ids.forEach((i) => {\n set[i] = SELECTION_NEW_EXIT;\n });\n\n for (const key in set) {\n if (set[key] !== SELECTION_NEW_EXIT && set[key] !== SELECTION_OLD_EXIT) {\n set[key] = set[key] === 0 ? SELECTION_NEW_ENTRY : SELECTION_OLD_ENTRY;\n }\n }\n\n return this;\n }\n\n getSets () {\n const set = this._set;\n const retObj = {\n entrySet: [[], []],\n exitSet: [[], []],\n completeSet: []\n };\n\n for (const key in set) {\n if (set[key] > 0) {\n set[key] === SELECTION_OLD_ENTRY && retObj.entrySet[0].push(key);\n set[key] === SELECTION_NEW_ENTRY && retObj.entrySet[1].push(key);\n } else if (set[key] < 0) {\n set[key] === SELECTION_OLD_EXIT && retObj.exitSet[0].push(key);\n set[key] === SELECTION_NEW_EXIT && retObj.exitSet[1].push(key);\n }\n retObj.completeSet.push(key);\n }\n\n ['entrySet', 'exitSet'].forEach((type) => {\n retObj[type] = retObj[type].map(e => e.map(Number));\n });\n retObj.completeSet = retObj.completeSet.map(Number);\n\n return retObj;\n }\n\n /**\n * Resets an array of ids in the selection set to initial state. It sets the value of every unique id value to\n * null in the selection set which means they are neither in entry set nor in exit set. If no ids are passed,\n * then it resets all the ids to null.\n *\n * @public\n *\n * @param {Array} ids Array of unique ids.\n * @return {SelectionSet} Instance of selection set.\n */\n reset (ids) {\n const set = this._set;\n if (ids) {\n ids.forEach((i) => {\n set[i] = SELECTION_NULL;\n });\n } else {\n const lockedSel = this._lockedSelection;\n for (const key in set) {\n if (!(key in lockedSel)) {\n set[key] = SELECTION_NULL;\n }\n }\n }\n this._resetted = true;\n return this;\n }\n\n /**\n * Gets the set of ids which are added in the selection set.\n *\n * @public\n *\n * @return {Array.} Array of unique ids\n */\n getEntrySet () {\n const set = this._set;\n const addSet = [];\n\n for (const key in set) {\n set[key] === SELECTION_NEW_ENTRY && addSet.push(key);\n }\n\n return addSet;\n }\n\n /**\n * Returns a set of unique ids which are already present in entry set.\n *\n * @public\n * @param {Array} addSet Array of unique ids which are added\n *\n * @return {Array} Array of unique ids which are already in old entry set or new entry set\n */\n getExistingEntrySet (addSet) {\n const set = this._set;\n return addSet.filter(d => set[d] === SELECTION_NEW_ENTRY || set[d] === SELECTION_OLD_ENTRY);\n }\n\n /**\n * Returns a set of unique ids which are already present in exit set.\n *\n * @public\n * @param {Array} addSet Array of unique ids which are added\n *\n * @return {Array} Array of unique ids which are already in old exit set or new exit set\n */\n getExistingExitSet (removeSet) {\n const set = this._set;\n return removeSet.filter(d => set[d] === SELECTION_NEW_EXIT || set[d] === SELECTION_OLD_EXIT);\n }\n\n /**\n * Gets the set of ids which are added in the selection set.\n * @return {Array.} Array of unique ids\n */\n getOldEntry () {\n const set = this._set;\n const updateSet = [];\n\n for (const key in set) {\n set[key] === SELECTION_OLD_ENTRY && updateSet.push(key);\n }\n return updateSet;\n }\n\n /**\n * Gets the set of ids which are added in the selection set.\n * @return {Array.} Array of unique ids\n */\n getOldExit () {\n const set = this._set;\n const updateSet = [];\n\n for (const key in set) {\n set[key] === SELECTION_OLD_EXIT && updateSet.push(key);\n }\n\n return updateSet;\n }\n\n /**\n * Gets the array of ids which are in the exit set.\n *\n * @public\n * @return {Array.} Array of unique ids\n */\n getExitSet () {\n const set = this._set;\n const removeSet = [];\n\n for (const key in set) {\n set[key] === SELECTION_NEW_EXIT && removeSet.push(key);\n }\n return removeSet;\n }\n\n /**\n * Gets all the ids which are either in exit or entry set.\n *\n * @public\n * @return {Array} Array of unique ids\n */\n getCompleteSet () {\n const set = this._set;\n const completeSet = [];\n\n for (const key in set) {\n completeSet.push(key);\n }\n\n return completeSet;\n }\n\n getCompleteSetCount () {\n return this._completeSetCount;\n }\n\n resetted () {\n return this._resetted;\n }\n\n /**\n * Swaps the add set and remove set in the selection set.\n * @return {SelectionSet} Instance of selection set.\n */\n toggle () {\n const set = this._set;\n\n for (const key in set) {\n if (set[key] === SELECTION_NEW_ENTRY) {\n set[key] = SELECTION_NEW_EXIT;\n } else if (set[key] === SELECTION_NEW_EXIT) {\n set[key] = SELECTION_NEW_ENTRY;\n } else if (set[key] === SELECTION_OLD_ENTRY) {\n set[key] = SELECTION_OLD_EXIT;\n } else {\n set[key] = SELECTION_OLD_ENTRY;\n }\n }\n\n return this;\n }\n}\n\nexport default SelectionSet;\n","import { clone, retrieveNearestGroupByReducers } from 'muze-utils';\nimport * as SELECTION from '../enums/selection';\n\nexport const initializeSideEffects = (context, sideEffects) => {\n const sideEffectsMap = context._sideEffects;\n const config = context.config();\n sideEffects = sideEffects instanceof Array ? sideEffects : Object.values(sideEffects);\n sideEffects.forEach((SideEffect) => {\n const formalName = SideEffect.formalName();\n const sideEffectInstance = sideEffectsMap[formalName];\n sideEffectsMap[formalName] = sideEffectInstance || new SideEffect(context);\n const sideEffectConf = config[formalName];\n sideEffectConf && sideEffectsMap[formalName].config(sideEffectConf);\n });\n return sideEffectsMap;\n};\n\nexport const initializeBehaviouralActions = (context, actions) => {\n const dispatchableBehaviours = {};\n\n actions = actions instanceof Array ? actions : Object.values(actions);\n actions.forEach((Action) => {\n dispatchableBehaviours[Action.formalName()] = new Action(context);\n });\n return dispatchableBehaviours;\n};\n\nexport const initializePhysicalActions = (context, actions) => {\n const physicalActions = {};\n\n for (const name in actions) {\n if (!({}).hasOwnProperty.call(name, actions)) {\n physicalActions[name] = actions[name](context);\n }\n }\n return physicalActions;\n};\n\nexport const changeSideEffectAvailability = (context, fn, toEnable) => {\n const sideEffects = context.sideEffects();\n for (const key in sideEffects) {\n if ({}.hasOwnProperty.call(sideEffects, key)) {\n let change = true;\n if (fn && fn(key) === false) {\n change = false;\n }\n if (change) {\n toEnable ? sideEffects[key].enable() : sideEffects[key].disable();\n }\n }\n }\n};\n\nexport const getMergedSet = set => [...new Set([...set[0], ...set[1]])];\n\nexport const getSourceFields = (propagationInf, criteria = {}) => {\n const sourceIdentifiers = propagationInf.sourceIdentifiers;\n let sourceFields;\n if (sourceIdentifiers) {\n sourceFields = sourceIdentifiers.getSchema().map(d => d.name);\n } else if (criteria instanceof Array) {\n sourceFields = criteria[0];\n } else {\n sourceFields = Object.keys(criteria || {});\n }\n return sourceFields;\n};\n\nconst conditionsMap = {\n newEntry: [SELECTION.SELECTION_NEW_ENTRY],\n oldEntry: [SELECTION.SELECTION_OLD_ENTRY],\n mergedEnter: [SELECTION.SELECTION_NEW_ENTRY, SELECTION.SELECTION_OLD_ENTRY],\n newExit: [SELECTION.SELECTION_NEW_EXIT],\n oldExit: [SELECTION.SELECTION_OLD_EXIT],\n mergedExit: [SELECTION.SELECTION_NEW_EXIT, SELECTION.SELECTION_OLD_EXIT],\n complete: []\n};\n\nexport const getModelFromSet = (type, model, set) => {\n if (model) {\n return model.select((fields, i) =>\n (conditionsMap[type].some(condition => set[i] === condition)), {\n saveChild: false\n });\n }\n return null;\n};\n\nexport const getSetInfo = (type, set, config) => {\n let model = null;\n const filteredDataModel = config.filteredDataModel;\n const selectionSet = config.selectionSet;\n if (!config.propagationData) {\n if (selectionSet.resetted()) {\n model = null;\n } else {\n model = getModelFromSet(type, config.dataModel, config.selectionSet._set);\n }\n } else if (filteredDataModel) {\n model = type === 'mergedEnter' ? filteredDataModel[0] : filteredDataModel[1];\n }\n return {\n uids: set,\n length: set.length,\n model\n };\n};\n\nexport const getSideEffects = (behaviour, behaviourEffectMap) => {\n const sideEffects = [];\n for (const key in behaviourEffectMap) {\n const behaviours = key.split(',');\n const found = behaviours.some(d => d === behaviour);\n if (found) {\n sideEffects.push({\n effects: behaviourEffectMap[key],\n behaviours\n });\n }\n }\n return sideEffects;\n};\n\nexport const unionSets = (context, behaviours) => {\n let combinedSet = {};\n const models = {\n mergedEnter: null,\n mergedExit: null\n };\n behaviours.forEach((behaviour) => {\n const entryExitSet = context._entryExitSet[behaviour];\n if (entryExitSet) {\n combinedSet = Object.assign(combinedSet, clone(entryExitSet));\n ['mergedEnter', 'mergedExit'].forEach((type) => {\n const model = entryExitSet[type].model;\n let existingModel = models[type];\n let aggFns = retrieveNearestGroupByReducers(model);\n if (!existingModel) {\n existingModel = models[type] = model;\n } else if (`${model.getSchema().map(d => d.name).sort()}` ===\n `${existingModel.getSchema().map(d => d.name).sort()}`) {\n aggFns = Object.assign({}, retrieveNearestGroupByReducers(existingModel));\n existingModel = models[type] = model.union(existingModel);\n } else {\n existingModel = model;\n }\n combinedSet[type].model = existingModel;\n combinedSet[type].aggFns = aggFns;\n });\n }\n });\n return combinedSet;\n};\n","import {\n mergeRecursive,\n hasTouch,\n filterPropagationModel,\n FieldType,\n selectElement,\n isSimpleObject\n} from 'muze-utils';\nimport { ALL_ACTIONS } from './enums/actions';\nimport SelectionSet from './selection-set';\nimport {\n initializeBehaviouralActions,\n initializeSideEffects,\n changeSideEffectAvailability,\n initializePhysicalActions,\n unionSets,\n getSideEffects\n} from './helper';\n\n/**\n * This class is responsible for dispatching behavioural actions and side effects. It also keeps the information of\n * registered physical actions, behavioural actions and side effects. Also, it keeps the map of physical and behavioural\n * actions and behavioural actions and side effects. Whenever any behavioural action is dispatched, it also propagates\n * the rows which got affected to the other datamodels. This class is initialized by {@link VisualUnit} and legend to\n * manage it's interaction.\n *\n * @public\n * @class Firebolt\n * @module Firebolt\n */\nexport default class Firebolt {\n constructor (context, actions, sideEffects, behaviourEffectMap) {\n this.context = context;\n this._sideEffectDefinitions = {};\n this._sideEffects = {};\n this._propagationInf = {};\n this._actions = {\n behavioural: {},\n physical: {}\n };\n this._selectionSet = {};\n this._volatileSelectionSet = {};\n this._propagationFields = {};\n this._sourceSideEffects = {\n selectionBox: () => false\n };\n this._propagationBehaviourMap = {};\n this._sourceBehaviours = {};\n this._actionBehaviourMap = {};\n this._config = {};\n this._behaviourEffectMap = {};\n this._entryExitSet = {};\n this._actionHistory = {};\n this._queuedSideEffects = {};\n\n this.mapSideEffects(behaviourEffectMap);\n this.registerBehaviouralActions(actions.behavioural);\n this.registerSideEffects(sideEffects);\n this.registerPhysicalBehaviouralMap(actions.physicalBehaviouralMap);\n this.registerPhysicalActions(actions.physical);\n }\n\n config (...config) {\n if (config.length) {\n this._config = mergeRecursive(this._config, config[0]);\n return this;\n }\n return this._config;\n }\n\n mapSideEffects (behEffectMap) {\n const behaviourEffectMap = this._behaviourEffectMap;\n for (const key in behEffectMap) {\n if ({}.hasOwnProperty.call(behEffectMap, key)) {\n const sideEffects = behEffectMap[key] || [];\n let preventDefaultActions = false;\n let effectNames;\n if (isSimpleObject(sideEffects)) {\n effectNames = sideEffects.effects;\n preventDefaultActions = sideEffects.preventDefaultActions;\n } else {\n effectNames = sideEffects;\n }\n !behaviourEffectMap[key] && (behaviourEffectMap[key] = []);\n this._behaviourEffectMap[key] = [...new Set(preventDefaultActions ? effectNames :\n [...behaviourEffectMap[key], ...effectNames])];\n }\n }\n return this;\n }\n\n registerBehaviouralActions (actions) {\n const behaviours = initializeBehaviouralActions(this, actions);\n this.prepareSelectionSets(behaviours);\n Object.assign(this._actions.behavioural, behaviours);\n return this;\n }\n\n prepareSelectionSets () {\n return this;\n }\n\n registerSideEffects (sideEffects) {\n for (const key in sideEffects) {\n this._sideEffectDefinitions[sideEffects[key].formalName()] = sideEffects[key];\n }\n this.initializeSideEffects();\n return this;\n }\n\n applySideEffects (sideEffects, selectionSet, payload) {\n const sideEffectStore = this.sideEffects();\n const actionHistory = this._actionHistory;\n const queuedSideEffects = this._queuedSideEffects;\n sideEffects.forEach((sideEffect) => {\n let options;\n let name;\n const effects = sideEffect.effects;\n const behaviours = sideEffect.behaviours;\n const combinedSet = unionSets(this, behaviours, selectionSet);\n effects.forEach((effect) => {\n if (typeof effect === 'object') {\n name = effect.name;\n options = effect.options;\n } else {\n name = effect;\n }\n\n const sideEffectInstance = sideEffectStore[name];\n if (sideEffectInstance.isEnabled()) {\n if (!sideEffectInstance.constructor.mutates() &&\n Object.values(actionHistory).some(d => d.isMutableAction)) {\n queuedSideEffects[`${name}-${behaviours.join()}`] = {\n name,\n params: [combinedSet, payload, options]\n };\n } else {\n this.dispatchSideEffect(name, combinedSet, payload, options);\n }\n }\n });\n });\n return this;\n }\n\n dispatchSideEffect (name, selectionSet, payload, options = {}) {\n const sideEffectStore = this.sideEffects();\n const sideEffect = sideEffectStore[name];\n let disable = false;\n if (options.filter && options.filter(sideEffect)) {\n disable = true;\n }\n !disable && sideEffectStore[name].apply(selectionSet, payload, options);\n }\n\n registerPropagationBehaviourMap (map) {\n this._propagationBehaviourMap = Object.assign(this._propagationBehaviourMap, map || {});\n return this;\n }\n\n dispatchBehaviour (behaviour, payload, propagationInfo = {}) {\n const propagate = propagationInfo.propagate !== undefined ? propagationInfo.propagate : true;\n const behaviouralActions = this._actions.behavioural;\n const action = behaviouralActions[behaviour];\n const behaviourEffectMap = this._behaviourEffectMap;\n const sideEffects = getSideEffects(behaviour, behaviourEffectMap);\n this._propagationInf = propagationInfo;\n\n if (action) {\n const selectionSet = action.dispatch(payload);\n const propagationSelectionSet = this.getPropagationSelectionSet(selectionSet);\n this._entryExitSet[behaviour] = propagationSelectionSet;\n const shouldApplySideEffects = this.shouldApplySideEffects(propagate);\n\n if (propagate) {\n this.propagate(behaviour, payload, selectionSet.find(d => d.sourceSelectionSet), sideEffects);\n }\n if (shouldApplySideEffects) {\n const applicableSideEffects = this.getApplicableSideEffects(sideEffects, payload, propagationInfo);\n this.applySideEffects(applicableSideEffects, propagationSelectionSet, payload);\n }\n }\n\n return this;\n }\n\n getPropagationSelectionSet (selectionSet) {\n return selectionSet.find(d => !d.sourceSelectionSet);\n }\n\n shouldApplySideEffects () {\n return true;\n }\n\n changeBehaviourStateOnPropagation (behaviour, value) {\n if (value instanceof Function) {\n this._sourceBehaviours[behaviour] = value;\n } else {\n this._sourceBehaviours[behaviour] = () => value;\n }\n return this;\n }\n\n changeSideEffectStateOnPropagation (sideEffect, value) {\n if (value instanceof Function) {\n this._sourceSideEffects[sideEffect] = value;\n } else {\n this._sourceSideEffects[sideEffect] = () => value;\n }\n }\n\n propagate () {\n return this;\n }\n\n sideEffects (...sideEffects) {\n if (sideEffects.length) {\n this._sideEffects = sideEffects[0];\n return this;\n }\n return this._sideEffects;\n }\n\n enableSideEffects (fn) {\n changeSideEffectAvailability(this, fn, true);\n return this;\n }\n\n disableSideEffects (fn) {\n changeSideEffectAvailability(this, fn, false);\n return this;\n }\n\n dissociateBehaviour (behaviour, physicalAction) {\n const actionBehaviourMap = this._actionBehaviourMap;\n for (const key in actionBehaviourMap) {\n if (key === physicalAction) {\n const behaviourMap = actionBehaviourMap[key];\n behaviourMap.behaviours = behaviourMap.behaviours.filter(d => d !== behaviour);\n this.mapActionsAndBehaviour(key);\n }\n }\n\n return this;\n }\n\n dissociateSideEffect (sideEffect, behaviour) {\n const behaviourEffectMap = this._behaviourEffectMap;\n behaviourEffectMap[behaviour] = behaviourEffectMap[behaviour].filter(d => (d.name || d) !== sideEffect);\n return this;\n }\n\n getApplicableSideEffects (sideEffects) {\n return sideEffects;\n }\n\n attachPropagationListener (dataModel) {\n dataModel.unsubscribe('propagation');\n dataModel.on('propagation', this.onDataModelPropagation());\n return this;\n }\n\n onDataModelPropagation () {\n return (propValue) => {\n const payload = propValue.payload;\n const action = payload.action;\n\n this.dispatchBehaviour(action, payload, {\n propagate: false\n });\n };\n }\n\n createSelectionSet (uniqueIds, behaviouralActions) {\n const behaviours = behaviouralActions || this._actions.behavioural;\n const selectionSet = this._selectionSet;\n const volatileSelectionSet = this._volatileSelectionSet;\n\n for (const key in behaviours) {\n if ({}.hasOwnProperty.call(behaviours, key)) {\n selectionSet[key] = new SelectionSet(uniqueIds);\n volatileSelectionSet[key] = new SelectionSet(uniqueIds, true);\n }\n }\n this._volatileSelectionSet = volatileSelectionSet;\n this.selectionSet(selectionSet);\n return this;\n }\n\n selectionSet (...selectionSet) {\n if (selectionSet.length) {\n this._selectionSet = selectionSet[0];\n return this;\n }\n return this._selectionSet;\n }\n\n initializeSideEffects () {\n const sideEffectDefinitions = this._sideEffectDefinitions;\n this.sideEffects(initializeSideEffects(this, sideEffectDefinitions));\n return this;\n }\n\n registerPhysicalActions (actions) {\n const initedActions = initializePhysicalActions(this, actions);\n Object.assign(this._actions.physical, initedActions);\n return this;\n }\n\n /**\n * Allows to propagate the datamodel with only the supplied fields. When propagation is done, then the fields\n * which are supplied for the specified behavioural action is propagated.\n *\n * @public\n *\n * @param {string} action Name of behavioural action. If '*' is specified, then for all behavioural actions it is\n * applied.\n * @param {Array} fields Array of field names which will be propagated.\n * @param {boolean} append If true, then it is appended to the existing propagation data model fields else only\n * those fields are projected from propagation data model and propagated.\n *\n * @return {Firebolt} Instance of firebolt\n */\n propagateWith (action, fields, append = false) {\n const behaviouralActions = this._actions.behavioural;\n if (fields.length) {\n if (action === ALL_ACTIONS) {\n for (const key in behaviouralActions) {\n this._propagationFields[key] = {\n fields,\n append\n };\n }\n } else {\n this._propagationFields[action] = {\n fields,\n append\n };\n }\n return this;\n }\n return this._propagationFields;\n }\n\n /**\n * Map actions and behaviours\n * @return {Firebolt} Firebolt instance\n */\n mapActionsAndBehaviour (phyAction) {\n const initedPhysicalActions = this._actions.physical;\n const map = this._actionBehaviourMap;\n\n for (const action in map) {\n if (!({}).hasOwnProperty.call(action, map) && action === (phyAction || action)) {\n let target;\n const mapObj = map[action];\n target = mapObj.target;\n const touch = mapObj.touch;\n if (!target) {\n target = this.context.getDefaultTargetContainer();\n }\n const bind = hasTouch() ? touch === true || touch === undefined : !touch;\n bind && this.bindActionWithBehaviour(initedPhysicalActions[action],\n target, mapObj.behaviours);\n }\n }\n return this;\n }\n\n registerPhysicalBehaviouralMap (map) {\n this._actionBehaviourMap = mergeRecursive(this._actionBehaviourMap, map);\n return this;\n }\n\n /**\n * Binds a target element with an action.\n *\n * @param {Function} action Action method\n * @param {string} target Class name of element\n * @param {Array} behaviourList Array of behaviours\n * @return {FireBolt} Instance of firebolt\n */\n bindActionWithBehaviour (action, targets, behaviourList) {\n if (typeof (targets) === 'string') {\n targets = [targets];\n }\n targets.forEach((target) => {\n const mount = this.context.mount();\n const nodes = target.node instanceof Function ? target : selectElement(mount).selectAll(target);\n if (!nodes.empty()) {\n if (nodes instanceof Array) {\n nodes.forEach((node) => {\n action(selectElement(node), behaviourList);\n });\n } else {\n action(nodes, behaviourList);\n }\n }\n });\n return this;\n }\n\n getPropagationInf () {\n return this._propagationInf;\n }\n\n getAddSetFromCriteria (criteria, propagationInf = {}) {\n const context = this.context;\n const filteredDataModel = propagationInf.data ? propagationInf.data :\n context.getDataModelFromIdentifiers(criteria, 'all');\n const xFields = context.fields().x || [];\n const yFields = context.fields().y || [];\n const xMeasures = xFields.every(field => field.type() === FieldType.MEASURE);\n const yMeasures = yFields.every(field => field.type() === FieldType.MEASURE);\n return {\n model: filteredDataModel,\n uids: criteria === null ? null : (propagationInf.data ? filterPropagationModel(this.getFullData(),\n propagationInf.data[0], xMeasures && yMeasures).getData().uids : filteredDataModel[0].getData().uids)\n };\n }\n\n getSelectionSets (action) {\n const sourceId = this.context.id();\n const propagationInf = this._propagationInf || {};\n const propagationSource = propagationInf.sourceId;\n let applicableSelectionSets = [];\n if (propagationSource !== sourceId) {\n applicableSelectionSets = [this._volatileSelectionSet[action]];\n }\n\n if (propagationSource) {\n applicableSelectionSets.push(this.selectionSet()[action]);\n }\n return applicableSelectionSets;\n }\n\n getFullData () {\n return this.context.data();\n }\n\n resetted () {\n return this._resetted;\n }\n\n /**\n * Returns the entry and exit set information of the specified behavioural action.\n *\n * @public\n *\n * @param {string} behaviour Name of behavioural action.\n *\n * @return {Object} Entry exit set information.\n */\n getEntryExitSet (behaviour) {\n return this._entryExitSet[behaviour];\n }\n}\n","import { getSetInfo, getMergedSet, getSourceFields } from '../../helper';\n\n/**\n * This is the base class has all the common functionalities needed for all behavioural actions. Any other behavioural\n * action needs to extend this class.\n *\n * @public\n * @class GenericBehaviour\n * @module GenericBehaviour\n */\nexport default class GenericBehaviour {\n constructor (firebolt) {\n this.firebolt = firebolt;\n this._enabled = true;\n }\n\n /**\n * Returns entry and exit set information. This method is called by firebolt when ```dispatchBehaviour``` is called\n * dynamically or when any physical action is triggered on the chart.\n *\n * @param {Object} payload Payload information.\n * @param {Object|Array} payload.criteria Identifiers of data interacted with.\n *\n * @return {Array} Entry and exit set information.\n */\n dispatch (payload) {\n const criteria = payload.criteria;\n const firebolt = this.firebolt;\n const formalName = this.constructor.formalName();\n const selectionSets = firebolt.getSelectionSets(formalName);\n const {\n model: filteredDataModel,\n uids\n } = this.firebolt.getAddSetFromCriteria(criteria, this.firebolt.getPropagationInf());\n const entryExitSets = selectionSets.map((selectionSet) => {\n this.setSelectionSet(uids, selectionSet);\n return this.getEntryExitSet(selectionSet, filteredDataModel, payload);\n });\n\n return entryExitSets;\n }\n\n /**\n * Updates the selection set by adding uids to the instance of {@link SelectionSet} or removing them.\n * {@link SelectionSet} keeps the information of which rows are in the entry set and exit set.\n *\n * @public\n * @param {Array} addSet Array of row ids which got affected during interaction.\n * @param {SelectionSet} selectionSet Instance of selection set.\n *\n * @return {GenericBehaviour} Instance of behaviour.\n */\n setSelectionSet () {\n return this;\n }\n\n getEntryExitSet (selectionSet, filteredDataModel, payload) {\n const {\n entrySet,\n exitSet,\n completeSet\n } = selectionSet.getSets();\n const propagationInf = this.firebolt.getPropagationInf();\n const dataModel = this.firebolt.getFullData();\n const setConfig = {\n isSourceFieldPresent: propagationInf.isSourceFieldPresent,\n dataModel,\n filteredDataModel,\n propagationData: propagationInf.data,\n selectionSet\n };\n\n return {\n entrySet: [getSetInfo('oldEntry', entrySet[0], setConfig),\n getSetInfo('newEntry', entrySet[1], setConfig)],\n exitSet: [getSetInfo('oldEntry', exitSet[0], setConfig),\n getSetInfo('newExit', exitSet[1], setConfig)],\n mergedEnter: getSetInfo('mergedEnter', getMergedSet(entrySet), setConfig),\n mergedExit: getSetInfo('mergedExit', getMergedSet(exitSet), setConfig),\n completeSet: getSetInfo('complete', completeSet, setConfig),\n isSourceFieldPresent: propagationInf.isSourceFieldPresent,\n fields: getSourceFields(propagationInf, payload.criteria),\n sourceSelectionSet: selectionSet._volatile === true\n };\n }\n\n static mutates () {\n return false;\n }\n\n enable () {\n this._enabled = true;\n }\n\n disable () {\n this._enabled = false;\n }\n\n isEnabled () {\n return this._enabled;\n }\n}\n\n","import GenericBehaviour from './generic';\nimport { getMergedSet } from '../../helper';\nimport * as SELECTION from '../../enums/selection';\n\nexport default class VolatileBehaviour extends GenericBehaviour {\n setSelectionSet (addSet, selectionSet) {\n if (addSet === null) {\n selectionSet.reset();\n } else if (addSet.length) {\n // new add set\n const existingAddSet = addSet.filter(d => selectionSet._set[d] === SELECTION.SELECTION_NEW_ENTRY\n || selectionSet._set[d] === SELECTION.SELECTION_OLD_ENTRY);\n selectionSet.updateExit();\n const { entrySet } = selectionSet.getSets();\n selectionSet.reset(getMergedSet(entrySet));\n selectionSet.add(addSet);\n selectionSet.update(existingAddSet);\n } else {\n selectionSet.remove(selectionSet.getCompleteSet());\n }\n }\n}\n","export const BRUSH = 'brush';\nexport const HIGHLIGHT = 'highlight';\nexport const TOOLTIP = 'tooltip';\nexport const FILTER = 'filter';\nexport const SELECT = 'select';\n","import VolatileBehaviour from './volatile';\nimport { HIGHLIGHT } from '../../enums/behaviours';\n\nexport default class HighlightBehaviour extends VolatileBehaviour {\n static formalName () {\n return HIGHLIGHT;\n }\n}\n","import VolatileBehaviour from './volatile';\nimport * as BEHAVIOURNAMES from '../../enums/behaviours';\n\n/**\n * This is the behaviour for brushing a region on the chart. It accepts a payload\n * which contains the x and y range of the data and other configuration. It will then\n * create a selection box from the range and select the points which fall within the range.\n */\nexport default class BrushBehaviour extends VolatileBehaviour {\n static formalName () {\n return BEHAVIOURNAMES.BRUSH;\n }\n}\n","import VolatileBehaviour from './volatile';\nimport { FILTER } from '../../enums/behaviours';\n\nexport default class FilterBehaviour extends VolatileBehaviour {\n static formalName () {\n return FILTER;\n }\n\n static mutates () {\n return true;\n }\n}\n","import GenericBehaviour from './generic';\nimport { getMergedSet } from '../../helper';\nimport * as SELECTION from '../../enums/selection';\n\nexport default class PersistentBehaviour extends GenericBehaviour {\n setSelectionSet (addSet, selectionSet) {\n if (addSet === null) {\n selectionSet.reset();\n } else if (addSet.length) {\n const propagationInf = this.firebolt.getPropagationInf();\n // new add set\n const existingAddSet = addSet.filter(d => selectionSet._set[d] === SELECTION.SELECTION_NEW_ENTRY\n || selectionSet._set[d] === SELECTION.SELECTION_OLD_ENTRY);\n if (propagationInf.propagate === false) {\n selectionSet.updateExit();\n const { entrySet } = selectionSet.getSets();\n selectionSet.reset(getMergedSet(entrySet));\n selectionSet.add(addSet);\n selectionSet.update(existingAddSet);\n } else {\n // existing add set\n if (existingAddSet.length) {\n selectionSet.updateExit();\n selectionSet.remove(existingAddSet);\n } else {\n selectionSet.updateEntry();\n selectionSet.add(addSet);\n }\n const { exitSet } = selectionSet.getSets();\n const mergedExitSet = getMergedSet(exitSet);\n const completeSetCount = selectionSet.getCompleteSet().length;\n if (mergedExitSet.length === completeSetCount) {\n selectionSet.reset();\n }\n }\n } else {\n selectionSet.remove(selectionSet.getCompleteSet());\n }\n\n return this;\n }\n}\n","import PersistentBehaviour from './persistent';\nimport { SELECT } from '../../enums/behaviours';\n\nexport default class SelectBehaviour extends PersistentBehaviour {\n static formalName () {\n return SELECT;\n }\n}\n\n","import { DimensionSubtype, MeasureSubtype } from 'muze-utils';\n/**\n * Gets the drag action configuration\n * @param {VisualUnit} instance instance of visual unit\n * @param {Object} config x y positions\n * @return {Object} Payload of behaviour\n*/\n/* istanbul ignore next */ const getDragActionConfig = (sourceInfo, config, fieldsConfig) => {\n if (!(sourceInfo.axes.x || sourceInfo.axes.y)) {\n return {\n criteria: null\n };\n }\n\n const axes = sourceInfo.axes;\n const xAxis = axes.x[0];\n const yAxis = axes.y[0];\n const axisFields = sourceInfo.fields;\n const xField = axisFields.x[0].getMembers()[0];\n const yField = axisFields.y[0].getMembers()[0];\n const xFieldType = fieldsConfig[xField].def.subtype;\n const yFieldType = fieldsConfig[yField].def.subtype;\n const dimensions = {};\n const stPos = config.startPos;\n const endPos = config.endPos;\n\n if (stPos.x === endPos.x && stPos.y === endPos.y) {\n return {\n criteria: null\n };\n }\n\n const dragDim = xFieldType === MeasureSubtype.CONTINUOUS ? (yFieldType === MeasureSubtype.CONTINUOUS ?\n ['x', 'y'] : ['y']) : ['x'];\n const criteria = {};\n const isXDimension = xFieldType === DimensionSubtype.CATEGORICAL;\n const isYDimension = yFieldType === DimensionSubtype.CATEGORICAL;\n const xRange = xAxis.invertExtent(stPos.x, endPos.x);\n const yRange = yAxis.invertExtent(stPos.y, endPos.y);\n const selectedDomains = {\n x: stPos.x === endPos.x ? [] : (isXDimension ? xRange : xRange.sort((a, b) => a - b)),\n y: stPos.y === endPos.y ? [] : (isYDimension ? yRange : yRange.sort((a, b) => a - b))\n };\n const rangeObj = {};\n\n if (dragDim.length === 2) {\n rangeObj[xField] = selectedDomains.x;\n rangeObj[yField] = selectedDomains.y;\n if (xField === yField) {\n const xdom = selectedDomains.x;\n const ydom = selectedDomains.y;\n const min = xdom[0] > ydom[0] ? ydom : xdom;\n const max = min === ydom ? xdom : ydom;\n if (min[1] < max[0]) {\n rangeObj[xField] = [];\n } else {\n rangeObj[xField] = [max[0], min[1] < max[1] ? min[1] : max[1]];\n }\n dimensions.x = [stPos.x, endPos.x];\n dimensions.y = [stPos.y, endPos.y];\n }\n } else {\n criteria[dragDim[0]] = selectedDomains[dragDim[0]] || [];\n\n if (dragDim[0] === 'x') {\n rangeObj[xField] = criteria.x;\n if (xFieldType === DimensionSubtype.CATEGORICAL) {\n dimensions.x = (config.snap && stPos.x !== endPos.x) ? xAxis.getNearestRange(stPos.x, endPos.x) :\n [stPos.x, endPos.x];\n }\n } else {\n rangeObj[yField] = criteria.y;\n if (yFieldType === DimensionSubtype.CATEGORICAL) {\n dimensions.y = (config.snap && stPos.y !== endPos.y) ? yAxis.getNearestRange(stPos.y, endPos.y) :\n [stPos.y, endPos.y];\n }\n }\n }\n\n return {\n criteria: rangeObj,\n dimensions\n };\n};\n\nexport default getDragActionConfig;\n","import {\n getEvent,\n getD3Drag\n } from 'muze-utils';\n\nimport getDragActionConfig from './drag-action-config';\n\n/**\n * Adds dragging action to the target element.\n * @param {VisualUnit} instance Instance of visual unit.\n * @param {SVGElement} targetEl Element on which brushing action is needed.\n * @param {Array} behaviours Array of behaviours\n */\nexport const attachDragEvent = (targetEl, behaviours, firebolt, touch) => {\n let startPos = {};\n let endPos = {};\n let drawingInf;\n\n const d3Drag = getD3Drag();\n let touchStart;\n targetEl.call(d3Drag().on('start', () => {\n const event = getEvent();\n startPos = {\n x: event.x,\n y: event.y\n };\n drawingInf = firebolt.context.getDrawingContext();\n touchStart = new Date().getTime();\n }).on('drag', () => {\n const event = getEvent();\n endPos = {\n x: event.x,\n y: event.y\n };\n if (touch && Math.abs(startPos.x - endPos.x) <= 5) {\n return;\n }\n endPos.x = Math.max(0, Math.min(endPos.x, drawingInf.width));\n endPos.y = Math.max(0, Math.min(endPos.y, drawingInf.height));\n\n const payload = getDragActionConfig(firebolt.context.getSourceInfo(), {\n startPos,\n endPos\n }, firebolt.context.data().getFieldsConfig());\n behaviours.forEach(beh => firebolt.dispatchBehaviour(beh, payload));\n }).on('end', () => {\n const event = getEvent();\n endPos = {\n x: event.x,\n y: event.y\n };\n const duration = new Date().getTime() - touchStart;\n\n if (touch && duration > 100 && Math.abs(startPos.x - endPos.x) <= 5) {\n return;\n }\n endPos.x = Math.max(0, Math.min(endPos.x, drawingInf.width));\n endPos.y = Math.max(0, Math.min(endPos.y, drawingInf.height));\n\n const payload = getDragActionConfig(firebolt.context.getSourceInfo(), {\n startPos,\n endPos,\n snap: true\n }, firebolt.context.data().getFieldsConfig());\n payload.dragEnd = true;\n behaviours.forEach(beh => firebolt.dispatchBehaviour(beh, payload));\n }));\n};\n\n","import { getClientPoint, getEvent } from 'muze-utils';\nimport { CONSOLIDATED, FRAGMENTED } from '../../enums/constants';\n\n/**\n * Adds mouse interactions to target element.\n * @param {Firebolt} instance instance of firebolt.\n * @param {SVGElement} targetEl Element on which the event listeners will be attached.\n * @param {Array} behaviours Array of behaviours\n */\n/* istanbul ignore next */ const hover = firebolt => (targetEl, behaviours) => {\n const dispatchBehaviour = function (args) {\n const event = getEvent();\n const context = firebolt.context;\n const tooltipConf = context.config().interaction.tooltip;\n const mode = tooltipConf.mode;\n const pos = getClientPoint(context.getDrawingContext().svgContainer, event);\n const nearestPoint = context.getNearestPoint(pos.x, pos.y, {\n getAllPoints: mode === CONSOLIDATED || mode === FRAGMENTED,\n data: args,\n event\n });\n const payload = {\n criteria: nearestPoint ? nearestPoint.id : null,\n showInPosition: nearestPoint.showInPosition,\n target: nearestPoint.target,\n position: pos,\n mode\n };\n\n behaviours.forEach(beh => firebolt.dispatchBehaviour(beh, payload));\n event.stopPropagation();\n };\n\n targetEl.on('mouseover', dispatchBehaviour)\n .on('mousemove', dispatchBehaviour)\n .on('mouseout', () => {\n behaviours.forEach(beh => firebolt.dispatchBehaviour(beh, {\n criteria: null\n }));\n });\n};\n\nexport default hover;\n","export const CLASSPREFIX = 'muze';\nexport const CONSOLIDATED = 'consolidated';\nexport const FRAGMENTED = 'fragmented';\n\n","import { getClientPoint } from 'muze-utils';\n\nexport const generatePayloadFromEvent = function (args, event, firebolt) {\n const context = firebolt.context;\n const pos = getClientPoint(context.getDrawingContext().svgContainer, event.touches ? event.touches[0] : event);\n const nearestPoint = context.getNearestPoint(pos.x, pos.y, {\n data: args,\n event\n });\n return {\n criteria: nearestPoint ? nearestPoint.id : null,\n showInPosition: nearestPoint.showInPosition,\n target: nearestPoint.target,\n position: pos\n };\n};\n","import { getEvent } from 'muze-utils';\nimport { generatePayloadFromEvent } from './helpers';\n\n/**\n * Adds mouse interactions to target element.\n * @param {VisualUnit} instance instance of visual unit.\n * @param {SVGElement} targetEl Element on which the event listeners will be attached.\n * @param {Array} behaviours Array of behaviours\n */\n/* istanbul ignore next */ const click = firebolt => (targetEl, behaviours) => {\n const dispatchBehaviour = function (args) {\n const event = getEvent();\n const payload = generatePayloadFromEvent(args, event, firebolt);\n behaviours.forEach(beh => firebolt.dispatchBehaviour(beh, payload));\n event.stopPropagation();\n };\n\n targetEl.on('click', dispatchBehaviour);\n};\nexport default click;\n","import drag from './drag';\nimport hover from './hover';\nimport { longtouch } from './longtouch';\nimport { touchdrag } from './touch-drag';\nimport * as ACTIONNAMES from '../../enums/actions';\nimport click from './click';\n\nexport const physicalActions = {\n [ACTIONNAMES.DRAG]: drag,\n [ACTIONNAMES.HOVER]: hover,\n [ACTIONNAMES.CLICK]: click,\n [ACTIONNAMES.LONGTOUCH]: longtouch,\n [ACTIONNAMES.TOUCHDRAG]: touchdrag\n};\n\n","import { attachDragEvent } from './helpers/drag-event';\n\n/**\n * Adds dragging action to the target element.\n * @param {VisualUnit} instance Instance of visual unit.\n * @param {SVGElement} targetEl Element on which brushing action is needed.\n * @param {Array} behaviours Array of behaviours\n */\n/* istanbul ignore next */ const drag = firebolt => (targetEl, behaviours) => {\n attachDragEvent(targetEl, behaviours, firebolt);\n};\n\nexport default drag;\n","/* global setTimeout */\nimport { getEvent } from 'muze-utils';\nimport { generatePayloadFromEvent } from './helpers';\n\n/**\n * Adds mouse interactions to target element.\n * @param {VisualUnit} instance instance of visual unit.\n * @param {SVGElement} targetEl Element on which the event listeners will be attached.\n * @param {Array} behaviours Array of behaviours\n */\nexport const longtouch = firebolt => (targetEl, behaviours) => {\n let event;\n let touchEnd;\n const dispatchBehaviour = function (args) {\n const payload = generatePayloadFromEvent(args, event, firebolt);\n behaviours.forEach(beh => firebolt.dispatchBehaviour(beh, payload));\n event.stopPropagation();\n };\n\n touchEnd = false;\n event = getEvent();\n targetEl.on('touchstart', (args) => {\n event = getEvent();\n touchEnd = false;\n setTimeout(() => {\n if (!touchEnd) {\n dispatchBehaviour(args);\n } else {\n behaviours.forEach(beh => firebolt.dispatchBehaviour(beh, {\n criteria: null\n }));\n }\n }, 100);\n }).on('touchend', () => {\n touchEnd = true;\n });\n};\n","import { attachDragEvent } from './helpers/drag-event';\n\n/**\n * Adds dragging action to the target element.\n * @param {VisualUnit} instance Instance of visual unit.\n * @param {SVGElement} targetEl Element on which brushing action is needed.\n * @param {Array} behaviours Array of behaviours\n */\nexport const touchdrag = firebolt => (targetEl, behaviours) => {\n attachDragEvent(targetEl, behaviours, firebolt, true);\n};\n\n","export const PROPS = {\n valueParser: {\n defaultValue: val => val\n }\n};\n","import GenericSideEffect from './generic-sideeffect';\n\nexport default GenericSideEffect;\n","import { mergeRecursive, getUniqueId, generateGetterSetters } from 'muze-utils';\nimport { PROPS } from './props';\n\n/**\n * This is the base class of all side effects. It contains all common methods like setting configuration, disabling,\n * enabling side effect, etc. Every new side effect has to inherit this class or {@link SpawnableSideEffect} or\n * {@link SurrogateSideEffect} class. All side effects are initialized by firebolt. The instance of firebolt is\n * passed on initialization. The firebolt instance contains ```context``` which is the instance of visual unit with\n * which the firebolt is attached.\n *\n * @public\n * @class\n * @module GenericSideEffect\n */\nexport default class GenericSideEffect {\n constructor (firebolt) {\n this.firebolt = firebolt;\n this._enabled = true;\n this._strategy = 'default';\n this._config = {};\n this._id = getUniqueId();\n this._strategies = {};\n generateGetterSetters(this, PROPS);\n this.config(this.constructor.defaultConfig());\n }\n\n /**\n * Returns the default configuration of the side effect.\n *\n * @public\n * @return {Object} Default configuration of side effect.\n */\n static defaultConfig () {\n return {};\n }\n\n /**\n * Returns the formal name of a side effect. This method must be implemented by all side effects which changes\n * or adds any element in the visualization.\n *\n * @return {string} Formal name of side effect.\n */\n static formalName () {\n return 'generic';\n }\n\n static target () {\n return 'all';\n }\n\n /**\n * Returns true if the side effects mutates the data of chart.\n *\n * @public\n *\n * @return {boolean} If the side effect mutates the data of chart.\n */\n static mutates () {\n return false;\n }\n\n /**\n * Sets or gets the configuration of side effect.\n *\n * When setter,\n * @param {Object} config Configuration of side effect.\n * @return {GenericSideEffect} Side effect instance.\n *\n * When getter,\n * @return {Object} Side effect configuration.\n */\n config (...params) {\n if (params.length) {\n this._config = mergeRecursive(this._config, params[0]);\n return this;\n }\n return this._config;\n }\n\n disable () {\n this._enabled = false;\n return this;\n }\n\n enable () {\n this._enabled = true;\n return this;\n }\n\n isEnabled () {\n return this._enabled;\n }\n\n /**\n * Applies the interaction effect on the chart. This is where the implemntation of the side effect is defined.\n *\n * @param {Object} selectionSet Contains the entry and exit set of data which got affected during interaction.\n * @param {Object} selectionSet.mergedEnter Combined previous entry and new entry set.\n * @param {DataModel} selectionSet.mergedEnter.model Instance of data model containing all rows which got\n * affected during interaction.\n * @param {Array} selectionSet.mergedEnter.uids Ids of all rows which were affected during interaction.\n * @param {Object} selectionSet.mergedExit Combined previous exit and new exit set.\n * @param {DataModel} selectionSet.mergedExit.model Instance of data model containing rows which were not affected\n * during interaction.\n * @param {Array} selectionSet.mergedExit.uids Ids of all rows which were not affected during interaction.\n * @param {Object} selectionSet.entrySet Entry set information.\n * @param {Array} selectionSet.entrySet[0].uids All row ids which got affected during previous interaction.\n * @param {Array} selectionSet.entrySet[1].uids All row ids which got affected during current interaction.\n * @param {Array} selectionSet.exitSet[0].uids All row ids which were not affected during previous interaction.\n * @param {Array} selectionSet.exitSet[1].uids All row ids which were not affected during current interaction.\n * @param {Object} payload Payload information of the behavioural action on trigger of which this side effect\n * is applied.\n * @param {Object} options Optional information for side effect like strategy, etc.\n */\n apply () {\n return this;\n }\n\n /**\n * Adds a new strategy method for this side effect. The strategy method is implemented by side effect class.\n *\n * @param {string} name Name of the strategy.\n * @param {Function} fn Strategy method.\n *\n * @return {GenericSideEffect} Instance of side effect.\n */\n setStrategy (name, fn) {\n if (fn) {\n this._strategies[name] = fn;\n }\n return this;\n }\n}\n","import GenericSideEffect from './generic';\n\n/**\n * This class is inherited by all side effects which changes the look of any existing elements in the visualization.\n * For example, if a side effect wants to change the color of bar plots, then it is a surrogate side effect.\n *\n * To use this,\n * ```\n * const SurrogateSideEffect = muze.SideEffects.standards.SurrogateSideEffect;\n *\n * class BarColorChanger extends SurrogateSideEffect {\n * static formalName () {\n * return 'colorChanger';\n * }\n *\n * // Implement the logic of applying the style here.\n * apply () {\n * }\n * }\n * ```\n * @public\n *\n * @module SurrogateSideEffect\n * @class\n * @extends GenericSideEffect\n */\nexport default class SurrogateSideEffect extends GenericSideEffect {\n /**\n * Applies or removes interaction styles from plot elements. An array of row ids needs to be passed\n * which identifies the plot elements and applies styles to them.\n *\n * To apply the interaction style,\n * ```\n * const entryRowIds = entrySet[0].uids;\n * const interactionStyle = [{\n * type: 'fill',\n * intensity: [0, 0, 15, 0] // hsla configuration\n * }];\n *\n * this.applyInteractionStyle(entryRowIds, interactionStyle, 'brighten', true);\n * ```\n * @public\n * @param {Array} set Array of row ids.\n * @param {Array} config Style configuration.\n * @param {Object} config[0] fill or stroke configuration.\n * @param {string} config[0].type Type of style - fill or stroke.\n * @param {Array} config[0].intensity hsla configuration.\n * @param {string} interactionType Type of interaction. This is needed for storing the styles for\n * each type of interaction in the plot elements.\n * @param {boolean} apply Whether to apply or remove the interaction style.\n *\n * @return {SurrogateSideEffect} Instance of surrogate side effect.\n */\n applyInteractionStyle (set, config = {}, interactionType, apply) {\n const layers = this.firebolt.context.layers();\n layers.forEach(layer => layer.config().interactive !== false &&\n layer.applyInteractionStyle(interactionType, set.uids, apply));\n return this;\n }\n}\n","import { makeElement } from 'muze-utils';\n\nimport GenericSideEffect from './generic';\n\n/**\n * Any side effect which will add any new element to the chart like drawing a rectangular box or any annotation over\n * the chart needs to inherit this class. This class has methods which returns the container where the dom elements\n * needs to be created.\n *\n * To use this,\n * ```\n * const SpawnableSideEffect = muze.SideEffects.standards.SpawnableSideEffect;\n *\n * class SelectionBox extends SpawnableSideEffect {\n * static formalName () {\n * return 'selectionBox';\n * }\n *\n * // Implement the logic of applying the style here.\n * apply () {\n * }\n * }\n * ```\n * @public\n * @class\n * @extends GenericSideEffect\n * @module SpawnableSideEffect\n */\nexport default class SpawnableSideEffect extends GenericSideEffect {\n /**\n * Creates a html or svg element in the container.\n *\n * @public\n * @param {SVGElement|HTMLElement} container Container where the dom element will be rendered.\n * @param {string} elemType Type of dom element.\n * @param {Array} data Array of objects with which the dom elements will be binded.\n * @param {string} className class name of the element.\n *\n * @return {Selection} D3 Selection of the element.\n */\n createElement (container, elemType, data, className, callbacks) {\n return makeElement(container, elemType, data, className, callbacks);\n }\n\n /**\n * Returns the drawing information for side effect like svg container, dimensions of the visual unit.\n *\n * @public\n * @return {Object} Drawing information for side effect.\n * ```\n * sideEffectGroup: // svg container where the side effect needs to be appended.\n * svgContainer: // svg container of the {@link VisualUnit}.\n * htmlContainer: // html div container of the {@link VisualUnit}.\n * width: // Width of the {@link VisualUnit}\n * height: // Height of the {@link VisualUnit}\n * ```\n */\n drawingContext (...drawingContext) {\n if (drawingContext.length) {\n this._drawingContext = drawingContext[0];\n return this;\n }\n return this._drawingContext();\n }\n\n show () {\n return this;\n }\n\n hide () {\n return this;\n }\n}\n","import { selectElement } from 'muze-utils';\n\nexport const getBoxDimensionsFromPayload = (payload, axes, axisFields) => {\n let x1;\n let x2;\n let y1;\n let y2;\n let xRange;\n let yRange;\n let direction;\n const criteria = payload.criteria;\n const dimensions = payload.dimensions || {};\n const xDim = dimensions.x;\n const yDim = dimensions.y;\n\n if (criteria === null) {\n return null;\n }\n\n const xAxis = axes.x[0];\n const yAxis = axes.y[0];\n const xLinear = xAxis.constructor.type() === 'linear';\n const yLinear = yAxis.constructor.type() === 'linear';\n const xField = `${axisFields.x[0]}`;\n const yField = `${axisFields.y[0]}`;\n const xCriteria = criteria[xField];\n const yCriteria = criteria[yField];\n\n if (xCriteria && xCriteria[0] instanceof Array) {\n xRange = xCriteria[0];\n yRange = xCriteria[1];\n } else {\n xRange = xCriteria || [];\n yRange = yCriteria || [];\n }\n direction = xCriteria && yCriteria ? 'both' : (xCriteria ? 'vertical' : 'horizontal');\n if (xRange && xRange.length) {\n if ((yAxis.constructor.type() === 'band' && xLinear)) {\n x1 = x2 = undefined;\n direction = 'horizontal';\n } else {\n const domain = xAxis.domain();\n const bandScale = xAxis.constructor.type() === 'band';\n let x1Val;\n let x2Val;\n if (bandScale) {\n let x1DomainIndex = domain.indexOf(xRange[0]);\n let x2DomainIndex = domain.indexOf(xRange[xRange.length - 1]);\n [x1DomainIndex, x2DomainIndex] = [x1DomainIndex, x2DomainIndex].sort((a, b) => a - b);\n x1Val = domain[x1DomainIndex];\n x2Val = domain[x2DomainIndex];\n } else {\n x1Val = xRange[0];\n x2Val = xRange[xRange.length - 1];\n }\n x1 = xAxis.getScaleValue(x1Val);\n x2 = xAxis.getScaleValue(x2Val);\n x2 += bandScale ? xAxis.getUnitWidth() : 0;\n }\n } else {\n x1 = x2 = undefined;\n }\n if (yRange && yRange.length) {\n if ((xAxis.constructor.type() === 'band' && yLinear)) {\n y1 = y2 = undefined;\n direction = 'vertical';\n } else {\n const domain = yAxis.domain();\n const bandScale = yAxis.constructor.type() === 'band';\n let y1Val;\n let y2Val;\n if (bandScale) {\n let y1DomainIndex = domain.indexOf(yRange[0]);\n let y2DomainIndex = domain.indexOf(yRange[yRange.length - 1]);\n [y1DomainIndex, y2DomainIndex] = [y1DomainIndex, y2DomainIndex].sort(((a, b) => b - a));\n y1Val = domain[y1DomainIndex];\n y2Val = domain[y2DomainIndex];\n } else {\n y1Val = yRange[0];\n y2Val = yRange[yRange.length - 1];\n }\n y1 = yAxis.getScaleValue(y1Val);\n y2 = yAxis.getScaleValue(y2Val);\n y2 += yAxis.constructor.type() === 'band' ? yAxis.getUnitWidth() : 0;\n }\n } else {\n y1 = y2 = undefined;\n }\n\n if ((yLinear && xLinear) || !payload.dragEnd) {\n if (xDim) {\n [x1, x2] = xDim;\n }\n if (yDim) {\n [y1, y2] = yDim;\n }\n }\n\n return {\n dimension: {\n x1,\n x2,\n y1,\n y2\n },\n direction\n };\n};\n\nexport const changeVisibility = (context, sideEffectGroup, visible) => {\n const config = context.config();\n const className = config.defClassName;\n const classPrefix = config.classPrefix;\n selectElement(sideEffectGroup).selectAll(`.${classPrefix}-${className}`)\n .style('display', visible ? 'block' : 'none');\n};\n","import {\n getQualifiedClassName,\n selectElement,\n makeElement,\n isValidValue\n} from 'muze-utils';\nimport { CLASSPREFIX } from '../../enums/constants';\nimport './styles.scss';\nimport SpawnableSideEffect from '../spawnable';\nimport { selectionBoxDrag } from '../../actions/physical/selection-box-drag';\nimport { getBoxDimensionsFromPayload, changeVisibility } from './helper';\n\n/**\n * This class is used to create a selection box which is used by visual unit for brushing and\n * selection in the canvas.\n * @class SelectionBox\n */\nclass SelectionBox extends SpawnableSideEffect {\n /**\n * It returns the default configuration needed by selectionbox.\n * @return {Object} Default configuration of the selection box.\n */\n static defaultConfig () {\n return {\n defClassName: 'selection-box-group',\n className: '',\n classPrefix: CLASSPREFIX,\n box: {\n defClassName: 'selection-box',\n className: ''\n },\n transition: {\n duration: 200\n }\n };\n }\n\n static formalName () {\n return 'selectionBox';\n }\n\n /**\n * Draws the selectionbox with the specified dimensions.\n * @param {Object} dimension Dimensions of the selection box.\n * @param {number} dimension.x1 Starting x position\n * @param {number} dimension.x2 Ending x position\n * @param {number} dimension.y1 Starting y position\n * @param {number} dimension.y2 Ending y position\n * @param {Object} conf Configuration needed to draw the selection box\n * @param {number} unitWidth Width of the visual unit.\n * @param {number} unitHeight Height of the visual unit.\n */\n apply (selectionSet, payload) {\n let x;\n let y;\n let width;\n let height;\n const config = this._config;\n const boxConf = config.box;\n const firebolt = this.firebolt;\n const drawingInf = this.drawingContext();\n const mountPoint = drawingInf.sideEffectGroup;\n const unitWidth = drawingInf.width;\n const unitHeight = drawingInf.height;\n const classPrefix = config.classPrefix;\n const selectionGroupClassName = config.defClassName;\n\n if (payload.criteria === null) {\n this.hide(drawingInf);\n return this;\n }\n\n const sourceInf = firebolt.context.getSourceInfo();\n const { dimension, direction } = getBoxDimensionsFromPayload(payload, sourceInf.axes,\n sourceInf.fields);\n const transition = payload.dragEnd && config.transition;\n\n if (direction === 'both' || direction === 'vertical') {\n x = Math.min(dimension.x1, dimension.x2);\n width = Math.abs(dimension.x2 - dimension.x1);\n } else {\n x = 0;\n width = unitWidth;\n }\n if (direction === 'both' || direction === 'horizontal') {\n y = Math.min(dimension.y1, dimension.y2);\n height = Math.abs(dimension.y2 - dimension.y1);\n } else {\n height = unitHeight;\n y = 0;\n }\n this.show(drawingInf);\n // Create the data array for drawing the rectangle\n const points = [\n {\n x,\n y,\n width,\n height\n }\n ];\n // Create the container group for selection box.\n const selectionGroup = makeElement(selectElement(mountPoint), 'g', [1],\n `.${classPrefix}-${selectionGroupClassName}`);\n const sideEffect = this;\n const selection = selectionGroup.selectAll('rect').data(points);\n const selectionBox = selection.enter().append('rect')\n .each(function () {\n selectionBoxDrag(firebolt)(selectElement(this), ['brush'], sideEffect);\n })\n .merge(selection)\n .each(function (attrs) {\n let element = selectElement(this);\n transition && (element = element.transition().duration(transition.duration));\n for (const key in attrs) {\n if ({}.hasOwnProperty.call(attrs, key)) {\n isValidValue(attrs[key]) && element.attr(key, attrs[key]);\n }\n }\n });\n // Get the qualified class name for selection box rectangle\n const boxClassName = getQualifiedClassName(boxConf.defClassName, this._id, classPrefix);\n selectionBox.classed(boxClassName.join(' '), true);\n selectionBox.classed(boxConf.className, true);\n\n return this;\n }\n\n hide (drawingInf) {\n changeVisibility(this, drawingInf.sideEffectGroup, false);\n }\n\n show (drawingInf) {\n changeVisibility(this, drawingInf.sideEffectGroup, true);\n }\n}\n\nexport default SelectionBox;\n\n","import {\n getEvent,\n getD3Drag\n } from 'muze-utils';\n\nimport getDragActionConfig from './helpers/drag-action-config';\n\nexport const selectionBoxDrag = firebolt => (targetEl, behaviours) => {\n let subject;\n let drawingInf;\n const context = firebolt.context;\n const onDrag = (payload) => {\n behaviours.forEach(action => firebolt.dispatchBehaviour(action, payload));\n };\n const d3Drag = getD3Drag();\n\n targetEl.call(d3Drag().on('start', () => {\n const event = getEvent();\n drawingInf = context.getDrawingContext();\n subject = event.subject;\n }).on('drag', () => {\n const event = getEvent();\n subject.x += event.dx;\n subject.y += event.dy;\n const width = drawingInf.width;\n const height = drawingInf.height;\n const x = Math.min(width - subject.width, Math.max(subject.x, 0));\n const y = Math.min(height - subject.height, Math.max(subject.y, 0));\n const y2 = y + subject.height;\n const x2 = x + subject.width;\n\n if (x >= 0 && x2 <= width && y >= 0 && y2 <= height) {\n const payload = getDragActionConfig(context.getSourceInfo(), {\n startPos: {\n x,\n y\n },\n endPos: {\n x: x2,\n y: y2\n }\n }, context.data().getFieldsConfig());\n onDrag(payload);\n }\n }).on('end', () => {\n const width = drawingInf.width;\n const height = drawingInf.height;\n const x = Math.min(width - subject.width, Math.max(subject.x, 0));\n const y = Math.min(height - subject.height, Math.max(subject.y, 0));\n const y2 = y + subject.height;\n const x2 = x + subject.width;\n\n if (x >= 0 && x2 <= width && y >= 0 && y2 <= height) {\n const payload = getDragActionConfig(context.getSourceInfo(), {\n startPos: {\n x,\n y\n },\n endPos: {\n x: x2,\n y: y2\n },\n snap: true\n }, context.data().getFieldsConfig());\n payload.dragEnd = true;\n onDrag(payload);\n }\n }));\n};\n","export const CLASSPREFIX = 'muze';\nexport const ARROW_RIGHT = 'right';\nexport const ARROW_TOP = 'top';\nexport const ARROW_BOTTOM = 'bottom';\nexport const ARROW_LEFT = 'left';\nexport const TOOLTIP_LEFT = 'left';\nexport const TOOLTIP_RIGHT = 'right';\nexport const TOOLTIP_BOTTOM = 'bottom';\nexport const TOOLTIP_TOP = 'top';\nexport const INITIAL_STYLE = {\n position: 'absolute',\n width: 0,\n height: 0\n};\n","import { CLASSPREFIX } from './constants';\n\nexport const defaultConfig = {\n classPrefix: CLASSPREFIX,\n defClassName: 'tooltip-box',\n connectorClassName: 'tooltip-connectors',\n className: '',\n row: {\n margin: 0\n },\n content: {\n spacing: 5,\n iconContainerSize: 10,\n iconScale: 1,\n iconShape: 'circle',\n iconColor: '#ff0000',\n rowMargin: '0px',\n margin: 10,\n separator: ':',\n className: 'tooltip-content-container',\n parentClassName: 'tooltip-content-parent-container'\n },\n arrow: {\n size: 10,\n disabled: false,\n defClassName: 'tooltip-arrow',\n className: '',\n color: 'rgba(195,195,195,0.85)'\n }\n};\n","import { getQualifiedClassName } from 'muze-utils';\nimport { TOOLTIP_LEFT, TOOLTIP_RIGHT, ARROW_RIGHT, ARROW_LEFT, TOOLTIP_BOTTOM } from './constants';\n\nexport const getArrowPos = (orient, dim, measurement, config) => {\n let arrowPos;\n const { x, y, boxHeight, boxWidth } = measurement;\n const arrowDisabled = config.arrow.disabled;\n const arrowWidth = arrowDisabled ? 0 : config.arrow.size;\n\n if (orient === ARROW_LEFT || orient === ARROW_RIGHT) {\n let start = 0;\n let diff = boxHeight / 2;\n const plotBottom = dim.y + dim.height;\n const boxBottom = y + boxHeight;\n\n if (dim.y > y) {\n start = dim.y - y;\n diff = (plotBottom >= boxBottom ? (boxBottom - dim.y) : dim.height) / 2;\n } else if (boxBottom > plotBottom) {\n diff = Math.abs(y - (dim.y + dim.height)) / 2;\n }\n arrowPos = start + diff - arrowWidth / 2;\n } else {\n let start = 0;\n let diff = boxWidth / 2;\n const plotRight = dim.x + dim.width;\n const boxRight = x + boxWidth;\n\n if (dim.x > x) {\n start = dim.x - x;\n diff = (plotRight >= boxRight ? (boxRight - dim.x) : dim.width) / 2;\n } else if (boxRight > plotRight) {\n diff = Math.abs(x - (dim.x + dim.width)) / 2;\n }\n arrowPos = start + diff - arrowWidth / 2;\n }\n return arrowPos;\n};\n\n/**\n * Places the arrow in the specified arrow position. It also applies appropriate arrow\n * class name to the arrow element.\n * @param {string} position Left, bottom or right position of the arrow;\n * @param {number} arrowPos position of arrow in pixels\n * @return {Tooltip} Instance of tooltip.\n */\nexport const placeArrow = (context, position, arrowPos) => {\n const tooltipArrow = context._tooltipArrow;\n const tooltipBackground = context._tooltipBackground;\n const config = context._config;\n const classPrefix = config.classPrefix;\n const arrowConf = config.arrow;\n const className = getQualifiedClassName(arrowConf.defClassName, context._id, config.classPrefix);\n\n tooltipArrow.style('display', 'block');\n tooltipArrow.attr('class', `${className.join(' ')}`);\n if (position === TOOLTIP_LEFT || position === TOOLTIP_RIGHT) {\n tooltipArrow.style('top', `${arrowPos}px`);\n tooltipArrow.style('left', '');\n tooltipBackground.style('top', `${arrowPos}px`);\n tooltipBackground.style('left', '');\n } else {\n position === TOOLTIP_BOTTOM ? tooltipArrow.style('top', '100%') : tooltipArrow.style('top',\n `-${arrowConf.size}px`);\n tooltipArrow.style('left', `${arrowPos}px`);\n position === TOOLTIP_BOTTOM ? tooltipBackground.style('top', '100%') : tooltipBackground.style('top',\n `-${arrowConf.size + 3}px`);\n tooltipBackground.style('left', `${arrowPos}px`);\n }\n tooltipArrow.classed(`${classPrefix}-tooltip-arrow`, true);\n tooltipArrow.classed(`${classPrefix}-tooltip-arrow-${context._arrowOrientation}`, false);\n tooltipArrow.classed(`${classPrefix}-tooltip-arrow-${position}`, true);\n tooltipBackground.classed(`${classPrefix}-tooltip-background-arrow`, true);\n tooltipBackground.classed(`${classPrefix}-tooltip-background-arrow-${context._arrowOrientation}`, false);\n tooltipBackground.classed(`${classPrefix}-tooltip-background-arrow-${position}`, true);\n return this;\n};\n\nexport const reorderContainers = (parentContainer, className) => {\n parentContainer.selectAll(className).sort((a, b) => a - b);\n};\n","import {\n selectElement,\n mergeRecursive,\n makeElement,\n setAttrs,\n setStyles,\n getSymbol,\n isSimpleObject\n} from 'muze-utils';\nimport { defaultConfig } from './default-config';\n\n/**\n * This class is used to manage the content of tooltip.\n */\nexport default class Content {\n /**\n * Creates an instance of content.\n */\n constructor () {\n this._model = null;\n this._formatter = null;\n this._config = this.constructor.defaultConfig();\n }\n /**\n * Returns the default configuration of tooltip\n * @return {Object} Configuration of tooltip.\n */\n static defaultConfig () {\n const config = defaultConfig.content;\n config.classPrefix = defaultConfig.classPrefix;\n return config;\n }\n\n config (...c) {\n if (c.length > 0) {\n this._config = mergeRecursive(this._config, c[0]);\n return this;\n }\n return this._config;\n }\n\n /**\n * Update model. The format contains presentation strategy which determines how to show the content.\n * If no strategy is mentioned then default is to show key value pair\n */\n update (item) {\n this._model = item.model;\n this._formatter = item.formatter;\n return this;\n }\n\n context (ctx) {\n this._context = ctx;\n return this;\n }\n\n render (mount) {\n let data;\n const config = this._config;\n const iconContainerSize = config.iconContainerSize;\n const formatter = this._formatter;\n const rowMargin = config.rowMargin;\n const model = this._model;\n\n this._mount = mount;\n if (model instanceof Array) {\n data = model;\n } else {\n data = formatter(this._model, this.config(), this._context);\n }\n\n if (data instanceof Function) {\n mount.html(data());\n } else {\n let content = data;\n let displayFormat = 'default';\n\n if (isSimpleObject(data)) {\n content = data.content;\n displayFormat = data.displayFormat;\n }\n\n const body = makeElement(mount, 'div', [displayFormat], `${config.classPrefix}-tooltip-content`, {},\n d => d);\n\n if (displayFormat === 'table') {\n const table = makeElement(body, 'table', [1], `${config.classPrefix}-tooltip-table`);\n const tbody = makeElement(table, 'tbody', [1], `${config.classPrefix}-tooltip-table-tbody`);\n const rows = makeElement(tbody, 'tr', content, `${config.classPrefix}-tooltip-table-row`);\n rows.each(function (d, i) {\n selectElement(this).classed(`${config.classPrefix}-tooltip-table-row-${i}`, true);\n });\n const cells = makeElement(rows, 'td', d => d, `${config.classPrefix}-tooltip-table-cell`);\n cells.each(function (d) {\n selectElement(this).html(d);\n });\n } else {\n const rows = makeElement(body, 'div', content, `${config.classPrefix}-tooltip-row`);\n const cells = makeElement(rows, 'span', d => d, `${config.classPrefix}-tooltip-content`);\n cells.attr('class', `${config.classPrefix}-tooltip-content`);\n setStyles(rows, {\n margin: rowMargin\n });\n setStyles(cells, {\n display: 'inline-block',\n 'margin-right': `${config.spacing}px`\n });\n\n cells.each(function (d) {\n const el = selectElement(this);\n el.html('');\n if (d instanceof Object) {\n if (d.type === 'icon') {\n const svg = makeElement(el, 'svg', [1]);\n const path = makeElement(svg, 'path', [1]);\n const shape = d.shape instanceof Function ? d.shape : getSymbol(d.shape);\n\n setAttrs(svg, {\n x: 0,\n y: 0,\n width: iconContainerSize,\n height: iconContainerSize\n });\n setAttrs(path, {\n d: shape.size(d.size)(),\n transform: `translate(${iconContainerSize / 2}, ${iconContainerSize / 2})`\n });\n setStyles(path, {\n fill: d.color\n });\n setStyles(svg, {\n width: `${iconContainerSize}px`,\n height: `${iconContainerSize}px`\n });\n } else {\n el.html(d.value);\n d.className && el.classed(d.className, true);\n setStyles(el, d.style);\n }\n } else {\n el.html(d);\n }\n });\n }\n }\n return this;\n }\n\n clear () {\n this._model = null;\n return this;\n }\n}\n","import {\n mergeRecursive,\n getQualifiedClassName,\n getUniqueId,\n selectElement,\n setStyles,\n makeElement\n} from 'muze-utils';\nimport { ARROW_BOTTOM, ARROW_LEFT, ARROW_RIGHT, TOOLTIP_LEFT, TOOLTIP_RIGHT, TOOLTIP_BOTTOM, TOOLTIP_TOP,\n INITIAL_STYLE } from './constants';\nimport { defaultConfig } from './default-config';\nimport { getArrowPos, placeArrow, reorderContainers } from './helper';\nimport './styles.scss';\nimport Content from './content';\n\n/**\n * This component is responsible for creating a tooltip element. It appends the tooltip\n * in the body element.\n * @class Tooltip\n */\nexport default class Tooltip {\n /**\n * Initializes the tooltip with the container element and configuration\n * @param {HTMLElement} container container where the tooltip will be mounted.\n * @param {string} className Class name of the tooltip.\n */\n constructor (htmlContainer, svgContainer) {\n let connectorContainer = svgContainer;\n this._id = getUniqueId();\n this._config = {};\n this.config({});\n const tooltipConf = this._config;\n const classPrefix = tooltipConf.classPrefix;\n const contentClass = tooltipConf.content.parentClassName;\n const container = makeElement(htmlContainer, 'div', [1], `${classPrefix}-tooltip-container`);\n this._container = container;\n this._tooltipContainer = container.append('div').style('position', 'absolute');\n this._contentContainer = this._tooltipContainer.append('div').attr('class', `${classPrefix}-${contentClass}`);\n this._tooltipBackground = this._tooltipContainer.append('div').style('position', 'relative');\n this._tooltipArrow = this._tooltipContainer.append('div');\n\n if (!svgContainer) {\n connectorContainer = htmlContainer.append('svg').style('pointer-events', 'none');\n }\n this._contents = {};\n this._tooltipConnectorContainer = selectElement(connectorContainer)\n .append('g')\n .attr('class', `${tooltipConf.classPrefix}-${tooltipConf.connectorClassName}`);\n const id = this._id;\n const defClassName = tooltipConf.defClassName;\n const qualifiedClassName = getQualifiedClassName(defClassName, id, tooltipConf.classPrefix);\n\n setStyles(this._tooltipArrow, INITIAL_STYLE);\n setStyles(this._tooltipBackground, INITIAL_STYLE);\n this.addClass(qualifiedClassName.join(' '));\n this.addClass(tooltipConf.className);\n this.hide();\n }\n\n /**\n * Sets the configuration of tooltip.\n * @param {Object} config Configuration of tooltip\n * @return {Tooltip} Instance of tooltip\n */\n config (...config) {\n if (config.length > 0) {\n const defConf = mergeRecursive({}, this.constructor.defaultConfig());\n this._config = mergeRecursive(defConf, config[0]);\n return this;\n }\n return this._config;\n }\n\n /**\n * Returns the default configuration of tooltip\n * @return {Object} Configuration of tooltip.\n */\n static defaultConfig () {\n return defaultConfig;\n }\n /**\n * Sets the class name of tooltip\n * @param {string} className tooltip class name\n * @return {Tooltip} Instance of tooltip.\n */\n addClass (className) {\n this._tooltipContainer.classed(className, true);\n return this;\n }\n\n context (...ctx) {\n if (ctx.length) {\n this._context = ctx[0];\n return this;\n }\n return this._context;\n }\n\n content (name, data, contentConfig = {}) {\n const config = this.config();\n const { classPrefix } = config;\n const contentClass = config.content.className;\n const formatter = config.formatter;\n const className = contentConfig.className || `${classPrefix}-${contentClass}-${name}`;\n const content = this._contents[name] = this._contents[name] || new Content();\n const container = makeElement(this._contentContainer, 'div', [contentConfig.order], className);\n container.attr('class', `${classPrefix}-${contentClass} ${className}`);\n reorderContainers(this._contentContainer, `.${classPrefix}-${contentClass}`);\n const contentConf = config.content;\n contentConfig.classPrefix = this._config.classPrefix;\n content.config(contentConf);\n\n if (data === null) {\n content.clear();\n container.remove();\n delete this._contents[name];\n } else {\n content.update({\n model: data,\n formatter: contentConfig.formatter || formatter\n });\n content.context(this._context);\n content.render(container);\n }\n\n if (!Object.keys(this._contents).length) {\n this.hide();\n }\n return this;\n }\n\n getContents () {\n return Object.values(this._contents);\n }\n\n /**\n * Positions the tooltip at the given x and y position.\n * @param {number} x x position\n * @param {number} y y position\n * @return {Tooltip} Instance of tooltip.\n */\n position (x, y, conf = {}) {\n if (!Object.keys(this._contents).length) {\n this.hide();\n return this;\n }\n this.show();\n const target = this._target;\n const repositionArrow = conf.repositionArrow;\n\n if (target && repositionArrow) {\n const node = this._tooltipContainer.node();\n const config = this._config;\n const arrowDisabled = config.arrow.disabled;\n const arrowWidth = arrowDisabled ? 0 : config.arrow.size;\n const arrowOrient = this._arrowOrientation;\n const outsidePlot = arrowOrient === ARROW_LEFT || arrowOrient === ARROW_RIGHT ?\n (y + node.offsetHeight - arrowWidth) < target.y || y > (target.y + target.height) :\n (x + node.offsetWidth - arrowWidth) < target.x || x > (target.x + target.width);\n\n if (!arrowDisabled) {\n if (outsidePlot) {\n let path;\n this._tooltipArrow.style('display', 'none');\n this._tooltipBackground.style('display', 'none');\n this._tooltipConnectorContainer.style('display', 'block');\n const connector = this._tooltipConnectorContainer.selectAll('path').data([1]);\n const enter = connector.enter().append('path');\n if (arrowOrient === ARROW_LEFT) {\n path = `M ${x} ${y + node.offsetHeight / 2} L ${target.x + target.width}`\n + ` ${target.y + target.height / 2}`;\n } else if (arrowOrient === ARROW_RIGHT) {\n path = `M ${x + node.offsetWidth} ${y + node.offsetHeight / 2}`\n + ` L ${target.x} ${target.y + target.height / 2}`;\n } else if (arrowOrient === ARROW_BOTTOM) {\n path = `M ${x + node.offsetWidth / 2} ${y + node.offsetHeight}`\n + ` L ${target.x + target.width / 2} ${target.y}`;\n }\n enter.merge(connector).attr('d', path).style('display', 'block');\n } else {\n const arrowPos = getArrowPos(arrowOrient, target, {\n x,\n y,\n boxHeight: node.offsetHeight,\n boxWidth: node.offsetWidth\n }, this._config);\n\n placeArrow(this, this._arrowOrientation, arrowPos);\n this._tooltipConnectorContainer.style('display', 'none');\n }\n }\n }\n\n const offset = this._offset || {\n x: 0,\n y: 0\n };\n this._tooltipContainer.style('left', `${offset.x + x}px`).style('top',\n `${offset.y + y}px`);\n\n return this;\n }\n\n /**\n * Positions the tooltip relative to a rectangular box. It takes care of tooltip overflowing the\n * boundaries.\n * @param {Object} dim Dimensions of the plot.\n */\n positionRelativeTo (dim, tooltipConf = {}) {\n let obj;\n let orientation = tooltipConf.orientation;\n this.show();\n if (!dim) {\n this.hide();\n return this;\n }\n\n const extent = this._extent;\n const node = this._tooltipContainer.node();\n\n this._tooltipContainer.style('top', '0px')\n .style('left', '0px');\n const offsetWidth = node.offsetWidth + 2;\n const offsetHeight = node.offsetHeight + 2;\n const config = this._config;\n const offset = this._offset;\n const arrowDisabled = config.arrow.disabled;\n const arrowSize = arrowDisabled ? 0 : config.arrow.size;\n const draw = tooltipConf.draw !== undefined ? tooltipConf.draw : true;\n const topSpace = dim.y;\n // When there is no space in right\n const dimX = dim.x + dim.width + offset.x;\n const rightSpace = extent.width - dimX;\n const leftSpace = dim.x + offset.x - extent.x;\n const positionTop = topSpace > (offsetHeight + arrowSize);\n const positionRight = rightSpace >= offsetWidth + arrowSize;\n const positionLeft = leftSpace >= offsetWidth + arrowSize;\n\n const positionHorizontal = () => {\n let position;\n let x = dim.x + dim.width;\n let y = dim.y;\n\n if (positionRight) {\n position = TOOLTIP_LEFT;\n x += arrowSize;\n } else if (positionLeft) {\n x = dim.x - offsetWidth;\n position = TOOLTIP_RIGHT;\n x -= arrowSize;\n } else {\n position = 'left';\n x += arrowSize;\n }\n if (dim.height < offsetHeight) {\n y = Math.max(0, dim.y + dim.height / 2 - offsetHeight / 2);\n }\n\n const arrowPos = getArrowPos(position, dim, {\n x,\n y,\n boxHeight: offsetHeight,\n boxWidth: offsetWidth\n }, this._config);\n\n return {\n position,\n arrowPos,\n x,\n y\n };\n };\n\n const positionVertical = () => {\n let position;\n let y;\n // Position tooltip at the center of plot\n let x = dim.x - offsetWidth / 2 + dim.width / 2;\n\n // Overflows to the right\n if ((extent.width - (dim.x + offset.x)) < offsetWidth) {\n x = extent.width - offsetWidth - offset.x;\n } else if ((x + offset.x) < extent.x) { // Overflows to the left\n x = extent.x;\n }\n\n if (positionTop) {\n y = dim.y - offsetHeight - arrowSize;\n position = TOOLTIP_BOTTOM;\n } else {\n y = dim.y + dim.height + arrowSize;\n position = TOOLTIP_TOP;\n }\n\n const arrowPos = getArrowPos(position, dim, {\n x,\n y,\n boxHeight: offsetHeight,\n boxWidth: offsetWidth\n }, this._config);\n\n return {\n position,\n arrowPos,\n x,\n y\n };\n };\n\n this._target = dim;\n if (!orientation) {\n if (positionTop) {\n orientation = 'vertical';\n } else if (positionRight || positionLeft) {\n orientation = 'horizontal';\n } else {\n orientation = 'vertical';\n }\n }\n\n if (orientation === 'horizontal') {\n obj = positionHorizontal();\n } else if (orientation === 'vertical') {\n obj = positionVertical();\n }\n\n this._position = {\n x: obj.x,\n y: obj.y\n };\n\n this._arrowPos = obj.arrowPos;\n if (!arrowDisabled) {\n placeArrow(this, obj.position, obj.arrowPos);\n } else {\n this._tooltipArrow.style('display', 'none');\n this._tooltipBackground.style('display', 'none');\n }\n this._arrowOrientation = obj.position;\n draw && this.position(obj.x, obj.y);\n return this;\n }\n\n /**\n * Hides the tooltip element.\n * @return {Tooltip} Instance of tooltip.\n */\n hide () {\n this._tooltipContainer.style('display', 'none');\n this._tooltipConnectorContainer.style('display', 'none');\n return this;\n }\n\n /**\n * Shows the tooltip element.\n * @return {Tooltip} Instance of tooltip.\n */\n show () {\n this._tooltipContainer.style('display', 'block');\n return this;\n }\n\n extent (extent) {\n this._extent = extent;\n return this;\n }\n\n offset (offset) {\n this._offset = offset;\n return this;\n }\n\n remove () {\n this._tooltipContainer.remove();\n this._tooltipBackground.remove();\n this._tooltipConnectorContainer.remove();\n return this;\n }\n}\n","import {\n FieldType,\n GROUP_BY_FUNCTIONS,\n formatTemporal,\n DimensionSubtype,\n MeasureSubtype,\n DataModel,\n defaultValue,\n retrieveFieldDisplayName\n} from 'muze-utils';\n\nconst { SUM, COUNT } = GROUP_BY_FUNCTIONS;\nconst { InvalidAwareTypes } = DataModel;\n\nconst formatters = (formatter, interval, valueParser) => ({\n [DimensionSubtype.TEMPORAL]: (value) => {\n if (value instanceof InvalidAwareTypes) {\n return valueParser(value);\n }\n return formatTemporal(value, interval);\n },\n [MeasureSubtype.CONTINUOUS]: value => (value instanceof InvalidAwareTypes ? valueParser(value) :\n formatter(value.toFixed(2))),\n [DimensionSubtype.CATEGORICAL]: value => valueParser(value)\n});\n\nconst getDefaultTooltipFormatterFn = (formatter, defaultFormatter) => defaultValue(formatter, defaultFormatter);\n\nconst getTabularData = (dataObj, context, defaultFormatter) => {\n const rows = [];\n const { data, schema, fieldspace } = dataObj;\n rows.push(schema.map(d => d.name));\n const { valueParser, timeDiffs } = context;\n data.forEach((d) => {\n const row = [];\n schema.forEach((fieldObj, i) => {\n const interval = fieldObj.subtype === DimensionSubtype.TEMPORAL ? timeDiffs[fieldObj.name] : 0;\n const numberFormat = fieldObj.type === FieldType.MEASURE && fieldspace.fields[i].numberFormat();\n const formatterFn = getDefaultTooltipFormatterFn(formatters(numberFormat,\n interval, valueParser)[fieldObj.subtype], defaultFormatter);\n const value = formatterFn(d[i]);\n row.push(value);\n });\n rows.push(row);\n });\n return rows;\n};\n\nconst getRowContent = (fieldInf, context, dataInf, config) => {\n let value;\n let formattedValue;\n let measureIndex;\n\n const {\n valueParser,\n axes,\n dimensionMeasureMap,\n timeDiffs\n } = context;\n const { subtype: type, name: field } = fieldInf;\n\n const { fieldsConfig, defFormatter, data, fieldspace } = dataInf;\n const { separator, classPrefix } = config;\n const dataLen = data.length;\n const values = [];\n const index = fieldsConfig[field].index;\n const interval = fieldsConfig[field].def.subtype === DimensionSubtype.TEMPORAL ? timeDiffs[field] : 0;\n const formatterFn = getDefaultTooltipFormatterFn(formatters(val => val, interval, valueParser)[type],\n defFormatter);\n\n let uniqueVals = type === MeasureSubtype.CONTINUOUS ? data.map(d => d[index]) :\n [...new Set(data.map(d => d[index]))];\n uniqueVals = uniqueVals.filter(d => d !== '');\n const colorAxis = axes.color[0];\n const shapeAxis = axes.shape[0];\n const sizeAxis = axes.size[0];\n const isRetinalField = (colorAxis || shapeAxis || sizeAxis) && dataLen > 1 &&\n type !== MeasureSubtype.CONTINUOUS;\n\n uniqueVals.forEach((val, i) => {\n let key;\n let associatedMeasures = dimensionMeasureMap[field];\n\n if (associatedMeasures instanceof Array && dataLen > 1) {\n associatedMeasures = associatedMeasures.filter(d => d in fieldsConfig);\n key = val;\n let icon = {\n value: ''\n };\n\n if (isRetinalField) {\n icon = {\n type: 'icon',\n color: colorAxis.getColor(val),\n shape: shapeAxis.getShape(val),\n size: sizeAxis.getSize(val) * config.iconScale\n };\n }\n if (associatedMeasures.length > 1) {\n const formattedKey = type === DimensionSubtype.TEMPORAL ? formatterFn(key, interval) : key;\n values.push([icon, `${formattedKey}`]);\n associatedMeasures.forEach((measure) => {\n measureIndex = fieldsConfig[measure].index;\n value = data[i][measureIndex];\n const numberFormat = fieldspace.fields[measureIndex].numberFormat();\n const measureFormatter = getDefaultTooltipFormatterFn(\n formatters(numberFormat, interval, valueParser)[MeasureSubtype.CONTINUOUS]);\n formattedValue = measureFormatter(value);\n values.push([{\n value: `${retrieveFieldDisplayName(context.data, measure)}${separator}`,\n style: {\n 'margin-left': `${config.margin}px}`\n },\n className: `${classPrefix}-tooltip-key`\n }, {\n value: `${formattedValue}`,\n className: `${classPrefix}-tooltip-value`\n }]);\n });\n } else {\n measureIndex = fieldsConfig[associatedMeasures[0]].index;\n value = data[i][measureIndex];\n const numberFormat = fieldspace.fields[measureIndex].numberFormat();\n const measureFormatter = getDefaultTooltipFormatterFn(\n formatters(numberFormat, interval, valueParser)[MeasureSubtype.CONTINUOUS]);\n formattedValue = measureFormatter(value);\n const formattedKey = type === DimensionSubtype.TEMPORAL ? formatterFn(key, interval) : key;\n values.push([\n icon,\n {\n value: `${formattedKey}`,\n className: `${classPrefix}-tooltip-key`\n },\n {\n value: `${formattedValue}`,\n className: `${classPrefix}-tooltip-value`\n }\n ]);\n }\n } else {\n key = field;\n value = val;\n formattedValue = formatterFn(value);\n values.push([{\n value: `${retrieveFieldDisplayName(context.data, key)}${separator}`,\n className: `${config.classPrefix}-tooltip-key`\n }, {\n value: `${formattedValue}`,\n className: `${config.classPrefix}-tooltip-value`\n }]);\n }\n });\n return values;\n};\n\nexport const buildTooltipData = (dataModel, config = {}, context) => {\n let fieldValues = [];\n const dataObj = dataModel.getData();\n const data = dataObj.data;\n const schema = dataObj.schema;\n const fieldspace = dataModel.getFieldspace();\n const fieldsConfig = dataModel.getFieldsConfig();\n const detailFields = context.detailFields || [];\n const dimensions = schema.filter(d => d.type === FieldType.DIMENSION);\n const measures = schema.filter(d => d.type === FieldType.MEASURE);\n const containsDetailField = schema.find(d => detailFields.indexOf(d.name) !== -1);\n const dataLen = data.length;\n const {\n valueParser,\n dimensionMeasureMap\n } = context;\n const defFormatter = formatters(null, null, valueParser)[DimensionSubtype.CATEGORICAL];\n\n if (dataLen > 1 && containsDetailField) {\n fieldValues = getTabularData({\n data,\n schema,\n fieldspace\n }, context, defFormatter);\n } else {\n dimensions.forEach((item) => {\n fieldValues = [...fieldValues, ...getRowContent(item, context, {\n fieldsConfig,\n data,\n defFormatter,\n fieldspace\n }, config)];\n });\n\n const allMeasures = [...new Set(...Object.values(dimensionMeasureMap))];\n const filteredMeasures = dataLen > 1 ? measures.filter(d => allMeasures.indexOf(d.name) === -1)\n : measures;\n\n filteredMeasures.forEach((item) => {\n fieldValues = [...fieldValues, ...getRowContent(item, context, {\n fieldsConfig,\n data,\n defFormatter,\n fieldspace\n }, config)];\n });\n }\n\n return fieldValues;\n};\n\nexport const strategies = {\n selectionSummary: (dm, config, context) => {\n const { selectionSet } = context;\n const aggFns = selectionSet.mergedEnter.aggFns;\n const dataObj = dm.getData();\n const measures = dataObj.schema.filter(d => d.type === FieldType.MEASURE);\n const aggregatedModel = dm.groupBy([''], measures.reduce((acc, v) => {\n acc[v.name] = aggFns[v.name] === COUNT ? SUM : aggFns[v.name];\n return acc;\n }, {\n saveChild: false\n }));\n const fieldsConf = aggregatedModel.getFieldsConfig();\n let values = [[{\n value: `${dataObj.data.length}`,\n style: {\n 'font-weight': 'bold'\n }\n }, 'Items Selected']];\n const measureNames = measures.map(d => d.name);\n measureNames.forEach((measure) => {\n values.push([`(${aggFns[measure].toUpperCase()})`, `${retrieveFieldDisplayName(dm, measure)}`,\n {\n value: `${aggregatedModel.getData().data[0][fieldsConf[measure].index].toFixed(2)}`,\n style: {\n 'font-weight': 'bold'\n }\n }]);\n });\n if (measureNames.length === 1) {\n values = [[...values[0], ...values[1]]];\n }\n return values;\n },\n highlightSummary: (data, config, context) => {\n const values = buildTooltipData(data, config, context);\n return values;\n }\n};\n","import { Tooltip as TooltipRenderer } from '@chartshq/muze-tooltip';\nimport { FieldType, mergeRecursive, defaultValue } from 'muze-utils';\nimport { spaceOutBoxes } from '../helper';\nimport { strategies } from './strategies';\nimport { FRAGMENTED } from '../../enums/constants';\nimport SpawnableSideEffect from '../spawnable';\n\nimport './styles.scss';\n\nconst configResolvers = {\n highlightSummary: (specificConf, config) => defaultValue(specificConf, config),\n default: specificConf => defaultValue(specificConf, {})\n};\n\nconst sanitizeConfig = (config, context) => {\n const strategyObj = context._strategies;\n const sanitizedConf = Object.assign({}, config);\n for (const key in strategyObj) {\n sanitizedConf[key] = defaultValue(configResolvers[key], configResolvers.default)(config[key], config);\n }\n return sanitizedConf;\n};\n\nexport default class Tooltip extends SpawnableSideEffect {\n constructor (...params) {\n super(...params);\n this._tooltips = {};\n this._strategies = strategies;\n this._strategy = 'highlightSummary';\n }\n\n static defaultConfig () {\n return {\n padding: 5,\n offset: {\n x: 0,\n y: 0\n },\n highlightSummary: {\n dataTransform: (dt, fields) => (fields ? dt.project(fields, { saveChild: false }) : dt\n )\n },\n selectionSummary: {\n dataTransform: (dt, fields) => {\n const fieldspace = dt.getFieldspace();\n const dimensions = Object.keys(fieldspace.getDimension());\n const measures = Object.keys(fieldspace.getMeasure());\n const projectedFields = defaultValue(fields, measures.length ? [measures[0]] : []);\n return dt.project([...dimensions, ...projectedFields], {\n saveChild: false\n });\n }\n }\n };\n }\n\n static formalName () {\n return 'tooltip';\n }\n\n config (...params) {\n if (params.length) {\n const config = this._config = mergeRecursive(this._config, sanitizeConfig(params[0], this));\n const strategyObj = this._strategies;\n for (const key in strategyObj) {\n const formatter = config[key].formatter;\n this.setStrategy(key, formatter);\n }\n return this;\n }\n return this._config;\n }\n\n apply (selectionSet, payload, options = {}) {\n let totalHeight = 0;\n let totalWidth = 0;\n const dataModel = selectionSet.mergedEnter.model;\n const context = this.firebolt.context;\n const drawingInf = this.drawingContext();\n if ((dataModel.isEmpty() || payload.criteria === null) || selectionSet.isSourceFieldPresent === false) {\n this.hide(options, null);\n return this;\n }\n\n const tooltips = this._tooltips;\n const config = this.config();\n const boundBox = {\n width: drawingInf.width,\n height: drawingInf.height\n };\n const showInPosition = payload.showInPosition;\n const pad = config.padding;\n const dataModels = [];\n const fragmented = config.mode === FRAGMENTED;\n const sourceInf = context.getSourceInfo();\n const fields = sourceInf.fields;\n const xFieldDim = fields.x[0] ? fields.x[0].type() === FieldType.DIMENSION : false;\n const showVertically = !!xFieldDim;\n const tooltipPos = payload.position;\n const boxes = [];\n const enter = {};\n const uids = dataModel.getData().uids;\n if (fragmented) {\n dataModels.push(...uids.map(d => dataModel.select((fieldsArr, i) => i === d, {\n saveChild: false\n })));\n } else {\n dataModels.push(dataModel);\n }\n\n let target = payload.target;\n let targetFields = [];\n if (target) {\n targetFields = target[0] || [];\n const sourceFields = payload.sourceFields;\n const indices = [];\n for (let i = 0, len = targetFields.length; i < len; i++) {\n if (sourceFields.indexOf(targetFields[i]) !== -1) {\n indices.push(i);\n }\n }\n target = target.map(d => d.filter((v, i) => indices.indexOf(i) !== -1));\n }\n\n const plotDimensions = context.getPlotPointsFromIdentifiers(target || payload.criteria, {\n getBBox: true\n });\n\n const strategy = defaultValue(options.strategy, this._strategy);\n const strategyConf = config[strategy];\n const { dataTransform, fields: projectFields } = strategyConf;\n // Show tooltip for each datamodel\n for (let i = 0; i < dataModels.length; i++) {\n let plotDim = plotDimensions[i];\n if (fragmented) {\n const dimensions = dataModels[i].getData().schema.filter(d => d.type === FieldType.DIMENSION)\n .map(d => d.name);\n plotDim = context.getPlotPointsFromIdentifiers(dataModels[i].project(dimensions), { getBBox: true });\n plotDim = plotDim && plotDim[0];\n }\n\n const dt = dataTransform(dataModels[i], projectFields, this);\n\n enter[i] = true;\n const { parentContainer: layoutContainer, parentContainerDimensions } = drawingInf;\n const layoutBoundBox = layoutContainer.getBoundingClientRect();\n const unitBoundBox = drawingInf.htmlContainer.getBoundingClientRect();\n\n const offsetLeft = unitBoundBox.left - layoutBoundBox.left;\n const offsetTop = unitBoundBox.top - layoutBoundBox.top;\n const tooltipInst = tooltips[i] = tooltips[i] || new TooltipRenderer(layoutContainer,\n drawingInf.svgContainer);\n\n sourceInf.payload = payload;\n sourceInf.firebolt = this.firebolt;\n sourceInf.detailFields = context.detailFields();\n sourceInf.timeDiffs = context.timeDiffsByField();\n sourceInf.valueParser = context.valueParser();\n sourceInf.selectionSet = selectionSet;\n tooltipInst.context(sourceInf);\n const strategyFn = strategies[strategy];\n tooltipInst.content(strategy, dt, {\n formatter: strategyFn,\n order: options.order\n })\n .config(this.config())\n .extent({\n x: 0,\n y: 0,\n width: parentContainerDimensions.width,\n height: parentContainerDimensions.height\n })\n .offset({\n x: offsetLeft + (config.offset.x || 0),\n y: offsetTop + (config.offset.y || 0)\n });\n\n if (showInPosition) {\n tooltipInst.position(tooltipPos.x + pad, tooltipPos.y + pad);\n } else if (plotDim) {\n tooltipInst.positionRelativeTo({\n x: plotDim.x,\n y: plotDim.y,\n width: plotDim.width || 0,\n height: plotDim.height || 0\n }, {\n orientation: fragmented ?\n (showVertically ? 'horizontal' : 'vertical') : undefined\n });\n } else {\n tooltipInst.hide();\n break;\n }\n\n if (fragmented) {\n const position = tooltipInst._position;\n const tooltipBoundBox = tooltipInst._tooltipContainer.node().getBoundingClientRect();\n\n totalHeight += tooltipBoundBox.height + pad;\n totalWidth += tooltipBoundBox.width + pad;\n if (showVertically ? totalHeight > drawingInf.height : totalWidth > drawingInf.width) {\n break;\n }\n boxes.push({\n x: position.x,\n y: position.y,\n width: tooltipBoundBox.width,\n height: tooltipBoundBox.height,\n tooltip: tooltipInst\n });\n }\n }\n\n for (const key in tooltips) {\n if (!enter[key]) {\n const tooltip = tooltips[key];\n tooltip.content(payload.action, null);\n if (!tooltip.getContents().length) {\n tooltip.remove();\n delete tooltips[key];\n }\n }\n }\n if (fragmented) {\n spaceOutBoxes(boxes, boundBox, showVertically);\n boxes.forEach(box => box.tooltip.position(box.x, box.y, {\n repositionArrow: true\n }));\n }\n return this;\n }\n\n hide (options) {\n const tooltips = this._tooltips;\n for (const key in tooltips) {\n if ({}.hasOwnProperty.call(tooltips, key)) {\n const strategy = options.strategy || this._strategy;\n tooltips[key].content(strategy, null);\n tooltips[key].hide();\n }\n }\n }\n}\n","export const spaceOutBoxes = (boxes, extent, showVertically) => {\n let y;\n let height;\n let x;\n let width;\n let i;\n const pad = 5;\n const len = boxes.length;\n const spaceOutIfOverlap = (firstBox, secondBox, opposite) => {\n x = firstBox.x;\n width = firstBox.width;\n y = firstBox.y;\n height = firstBox.height;\n const bottom = y + height;\n const right = x + width;\n\n if (showVertically) {\n if (opposite ? y < (secondBox.y + secondBox.height) : bottom > secondBox.y) {\n secondBox.y = opposite ? firstBox.y - secondBox.height - pad :\n bottom + pad;\n }\n } else if (opposite ? x < (secondBox.x + secondBox.width) : right > secondBox.x) {\n secondBox.x = opposite ? firstBox.x - secondBox.width - pad :\n right + pad;\n }\n };\n\n boxes.sort((a, b) => (showVertically ? a.y - b.y : a.x - b.x));\n i = 0;\n\n for (i = 0; i < len - 1; i++) {\n spaceOutIfOverlap(boxes[i], boxes[i + 1]);\n }\n\n if ((boxes[i].y + boxes[i].height) > extent.height ||\n (boxes[i].x + boxes[i].width) > extent.width) {\n if (showVertically) {\n boxes[i].y -= (boxes[i].height + boxes[i].y) - extent.height;\n } else {\n boxes[i].x -= (boxes[i].width + boxes[i].x) - extent.width;\n }\n for (i = len - 1; i > 0; i--) {\n spaceOutIfOverlap(boxes[i], boxes[i - 1], true);\n }\n }\n return boxes;\n}\n;\n","import { selectElement, FieldType } from 'muze-utils';\n\nimport './styles.scss';\nimport { CLASSPREFIX } from '../../enums/constants';\nimport SpawnableSideEffect from '../spawnable';\n\nexport default class Crossline extends SpawnableSideEffect {\n static defaultConfig () {\n return {\n className: `${CLASSPREFIX}-crossline-group`,\n bandClass: `${CLASSPREFIX}-crossband`,\n lineClass: `${CLASSPREFIX}-crossline`\n };\n }\n\n static formalName () {\n return 'crossline';\n }\n\n apply (selectionSet, payload) {\n let height;\n let bandWidth;\n let px;\n let width;\n const {\n className,\n bandClass,\n lineClass\n } = this.config();\n const dataModel = selectionSet.mergedEnter.model;\n const drawingInf = this.drawingContext();\n if (payload.criteria && dataModel && dataModel.isEmpty()) {\n return this;\n }\n if (payload.criteria === null || !dataModel) {\n this.hide();\n return this;\n }\n\n const dataObj = dataModel.getData();\n const sourceInf = this.firebolt.context.getSourceInfo();\n const axes = sourceInf.axes;\n const axisFields = sourceInf.fields;\n const fields = selectionSet.fields;\n const data = dataObj.data;\n const fieldsConfig = dataModel.getFieldsConfig();\n const svgContainer = drawingInf.sideEffectGroup;\n\n const elemData = [];\n fields.forEach((field) => {\n const fieldIndex = fieldsConfig[field] && fieldsConfig[field].index;\n const dataArr = data.map(d => d[fieldIndex]);\n const axisIndex = [['x', 0], ['x', 1], ['y', 0], ['y', 1]].find((arr) => {\n const fieldInst = axisFields[arr[0]][arr[1]];\n return fieldInst && fieldInst.type() === FieldType.DIMENSION &&\n fieldInst.getMembers().indexOf(field) !== -1;\n });\n if (axisIndex !== undefined && data.length) {\n const type = axisIndex[0];\n const axis = axes[type][axisIndex[1]];\n const value = dataArr[0];\n bandWidth = axis.getUnitWidth() || 0;\n px = axis.getScaleValue(value) + bandWidth / 2 + drawingInf.xOffset;\n const layers = this.firebolt.context.layers();\n const plotWidth = Math.max(...layers.map(layer => layer.getPlotSpan()[type]));\n const pad = Math.max(...layers.map(layer => layer.getPlotPadding()[type]));\n height = drawingInf.height;\n width = drawingInf.width;\n const startPx = px - plotWidth / 2 - pad / 2;\n const endPx = px + plotWidth / 2 + pad / 2;\n const dataPoint = {};\n if (type === 'y') {\n dataPoint.d = `M 0 ${startPx} L 0 ${endPx} L ${width} ${endPx} L ${width} ${startPx} Z`;\n } else {\n dataPoint.d = `M ${startPx} 0 L ${endPx} 0 L ${endPx} ${height} L ${startPx} ${height} Z`;\n }\n dataPoint.className = plotWidth ? bandClass : lineClass;\n !isNaN(px) && elemData.push(dataPoint);\n }\n });\n if (elemData.length) {\n const parentGroup = this.createElement(svgContainer, 'g', [1], className);\n const elem = this.createElement(parentGroup, 'path', elemData);\n elem.attr('d', d => d.d).style('pointer-events', 'none')\n .attr('class', d => d.className);\n }\n return this;\n }\n\n hide () {\n const className = this.config().className;\n const drawingInf = this.drawingContext();\n selectElement(drawingInf.sideEffectGroup).selectAll(`.${className}`).remove();\n }\n}\n","const fadeFn = (set, context, strategy) => {\n const {\n mergedEnter,\n mergedExit,\n exitSet,\n completeSet\n } = set;\n\n if (!mergedEnter.length && !mergedExit.length) {\n context.applyInteractionStyle(completeSet, {}, strategy, false);\n } else {\n context.applyInteractionStyle(exitSet[1], {}, strategy, true);\n context.applyInteractionStyle(mergedEnter, {}, strategy, false);\n }\n};\n\nexport const strategies = {\n fade: fadeFn,\n focus: (set, context) => {\n const {\n mergedEnter,\n mergedExit,\n completeSet\n } = set;\n if (!mergedEnter.length && !mergedExit.length) {\n context.applyInteractionStyle(completeSet, {}, 'focus', false);\n } else {\n context.applyInteractionStyle(mergedExit, {}, 'focus', true);\n context.applyInteractionStyle(mergedEnter, {}, 'focus', false);\n }\n },\n highlight: (set, context) => {\n const {\n mergedEnter,\n mergedExit,\n entrySet,\n exitSet,\n completeSet\n } = set;\n if (!mergedEnter.length && !mergedExit.length) {\n context.applyInteractionStyle(completeSet, {}, 'highlight', false);\n } else {\n context.applyInteractionStyle(entrySet[1], {}, 'highlight', true);\n context.applyInteractionStyle(exitSet[1], {}, 'highlight', false);\n }\n }\n};\n","import SurrogateSideEffect from '../surrogate';\nimport { strategies } from './strategy';\n\nexport default class PlotHighlighter extends SurrogateSideEffect {\n constructor (...params) {\n super(...params);\n this._strategy = 'highlight';\n this._strategies = strategies;\n }\n\n static formalName () {\n return 'highlighter';\n }\n\n static target () {\n return 'visual-unit';\n }\n\n apply (selectionSet, payload, options = {}) {\n const strategy = this._strategies[options.strategy || this._strategy];\n\n if (selectionSet.isSourceFieldPresent !== false) {\n strategy(selectionSet, this, options.strategy || this._strategy);\n }\n\n return this;\n }\n}\n","import SurrogateSideEffect from '../surrogate';\n\nexport default class FilterEffect extends SurrogateSideEffect {\n static formalName () {\n return 'filter';\n }\n\n static target () {\n return 'visual-unit';\n }\n\n static mutates () {\n return true;\n }\n\n apply (selectionSet, payload) {\n const context = this.firebolt.context;\n const entryModel = selectionSet.mergedEnter.model;\n if (payload.criteria === null) {\n context.clearCaching().resetData();\n } else {\n context.enableCaching().data(entryModel);\n }\n return this;\n }\n}\n","import { DataModel, STATE_NAMESPACES, getObjProp } from 'muze-utils';\nimport { CLASSPREFIX } from '../../enums/constants';\nimport SpawnableSideEffect from '../spawnable';\n\nimport './styles.scss';\n\nconst addLayer = (layerDefs, layerRegistry, context, sideEffect) => {\n const layers = [];\n if (layerDefs) {\n layerDefs.forEach((layerDef) => {\n const mark = layerDef.mark;\n const layerCls = layerRegistry[mark];\n if (layerCls && layerCls.shouldDrawAnchors()) {\n const depLayerEncoding = layerDef.def.encoding;\n const encoding = {\n x: getObjProp(depLayerEncoding, 'x', 'field'),\n y: getObjProp(depLayerEncoding, 'y', 'field'),\n color: getObjProp(depLayerEncoding, 'color', 'field'),\n size: {\n field: getObjProp(depLayerEncoding, 'size', 'field'),\n value: sideEffect.defaultSizeValue()\n }\n };\n const name = `${layerDef.def.name}-${sideEffect.constructor.formalName()}`;\n const layerObj = {\n instances: context.addLayer({\n name,\n mark: 'point',\n className: sideEffect.constructor.defaultConfig().className,\n encoding,\n transform: {\n type: 'identity'\n },\n transition: sideEffect.getTransitionConfig(),\n calculateDomain: false,\n source: dm => dm.select(() => false, {\n saveChild: false\n }),\n interactive: false,\n render: false\n }),\n linkedLayer: layerDef.def.name\n };\n layers.push(layerObj);\n }\n });\n }\n return layers;\n};\n\nexport default class AnchorEffect extends SpawnableSideEffect {\n constructor (...params) {\n super(...params);\n this._layersMap = {};\n this.addAnchorLayers();\n }\n\n static target () {\n return 'visual-unit';\n }\n\n static defaultConfig () {\n return {\n className: `${CLASSPREFIX}-anchors-group`\n };\n }\n\n static formalName () {\n return 'anchors';\n }\n\n addAnchorLayers () {\n const context = this.firebolt.context;\n const metaInf = context.metaInf();\n const layerRegistry = context.registry().layerRegistry;\n const layerDefsVal = context.layerDef();\n context.store().registerImmediateListener(\n `${STATE_NAMESPACES.UNIT_LOCAL_NAMESPACE}.${metaInf.namespace}.layerDef`, ([, layerDefs]) => {\n this._layers = addLayer(layerDefs, layerRegistry, context, this);\n });\n this._layers = addLayer(layerDefsVal, layerRegistry, context, this);\n return this;\n }\n\n getTransitionConfig () {\n return {\n disabled: true\n };\n }\n\n /**\n * Returns the default area value of the anchor point.\n * @return { number } Default area value of anchor.\n */\n defaultSizeValue () {\n return 100;\n }\n\n apply (selectionSet) {\n const self = this;\n const dataModel = selectionSet.mergedEnter.model;\n if (selectionSet.isSourceFieldPresent !== false) {\n const drawingInf = this.drawingContext();\n const sideEffectGroup = drawingInf.sideEffectGroup;\n const className = `${this.config().className}`;\n const layers = this._layers;\n const parentGroup = this.createElement(sideEffectGroup, 'g', [1], `${className}-container`);\n const anchorGroups = this.createElement(parentGroup, 'g', Object.values(layers));\n anchorGroups.each(function (layer) {\n const instances = layer.instances;\n const elems = self.createElement(this, 'g', instances, className);\n const linkedLayer = self.firebolt.context.getLayerByName(layer.linkedLayer);\n const [transformedData, schema] = linkedLayer.getTransformedDataFromIdentifiers(dataModel);\n const transformedDataModel = new DataModel(transformedData, schema);\n elems.each(function (d, i) {\n instances[i].data(transformedDataModel).mount(this);\n });\n });\n }\n return this;\n }\n}\n","import AnchorEffect from './anchors';\nimport { CLASSPREFIX } from '../enums/constants';\n\nexport default class PersistentAnchors extends AnchorEffect {\n static formalName () {\n return 'persistent-anchors';\n }\n\n static defaultConfig () {\n return {\n className: `${CLASSPREFIX}-persistent-anchors`\n };\n }\n\n getTransitionConfig () {\n return {\n disabled: true\n };\n }\n}\n","import AnchorEffect from './anchors';\nimport { CLASSPREFIX } from '../enums/constants';\n\nexport default class BrushAnchors extends AnchorEffect {\n static formalName () {\n return 'brush-anchors';\n }\n\n static defaultConfig () {\n return {\n className: `${CLASSPREFIX}-brush-anchors`\n };\n }\n\n getTransitionConfig () {\n return {\n disabled: true\n };\n }\n}\n","import * as BEHAVIOURS from './enums/behaviours';\n\nexport const behaviourEffectMap = {\n [BEHAVIOURS.BRUSH]: ['selectionBox', {\n name: 'highlighter',\n options: {\n strategy: 'fade'\n }\n }, 'brush-anchors'],\n [`${BEHAVIOURS.BRUSH},${BEHAVIOURS.SELECT}`]: [{\n name: 'tooltip',\n options: {\n strategy: 'selectionSummary',\n order: 0,\n filter: context => context.config().mode === 'fragmented'\n }\n }],\n [BEHAVIOURS.HIGHLIGHT]: [{\n name: 'highlighter',\n options: {\n strategy: 'highlight'\n }\n }, 'crossline', {\n name: 'tooltip',\n options: {\n order: 9999\n }\n }, 'anchors'],\n [BEHAVIOURS.FILTER]: ['filter'],\n [BEHAVIOURS.SELECT]: [{\n name: 'highlighter',\n options: {\n strategy: 'focus'\n }\n }, 'persistent-anchors']\n};\n","export const CLASSPREFIX = 'muze';\nexport const STACK = 'stack';\nexport const GROUP = 'group';\nexport const IDENTITY = 'identity';\nexport const ANGLE = 'angle';\nexport const RADIUS = 'radius';\nexport const SIZE = 'size';\nexport const COLOR = 'color';\nexport const SHAPE = 'shape';\nexport const TEXT = 'text';\nexport const OUTER_RADIUS_VALUE = 'outerRadiusValue';\nexport const TEXT_ANCHOR_MIDDLE = 'middle';\nexport const ENCODING = {\n X: 'x',\n Y: 'y',\n X0: 'x0',\n Y0: 'y0',\n RADIUS: 'radius',\n RADIUS0: 'radius0',\n ANGLE: 'angle',\n ANGLE0: 'angle0'\n};\n\nexport const ASCENDING = 'asc';\n\nexport const AGG_FN_SUM = 'sum';\n\nexport const AREA_LAYER = 'area';\nexport const ARC_LAYER = 'arc';\nexport const LINE_LAYER = 'line';\nexport const TEXT_LAYER = 'text';\nexport const POINT_LAYER = 'point';\nexport const BAR_LAYER = 'bar';\nexport const TICK_LAYER = 'tick';\nexport const SIMPLE_LAYER = 'simple';\nexport const BASE_LAYER = 'base';\n","import { CLASSPREFIX, STACK } from '../../enums/constants';\n\nexport const defaultConfig = {\n classPrefix: CLASSPREFIX,\n defClassName: 'layer-area',\n className: '',\n interpolate: 'linear',\n transform: {\n type: STACK\n },\n interaction: {\n\n },\n nearestPointThreshold: 10,\n encoding: {\n color: {},\n x: {},\n y: {},\n y0: {},\n strokeOpacity: {\n value: 1\n }\n },\n transition: {\n effect: 'cubic',\n duration: 1000\n },\n connectNullData: false\n};\n","import { ERROR_MSG } from 'muze-utils';\n\n/**\n * This is an interface class which any new layer class has to extend.\n *\n * @example\n * class BarLayer extends BaseLayer {\n * update (params) {\n * // super.update(params);\n * // Update the bar layer\n * }\n * }\n * @class\n */\nexport default class SimpleLayer {\n\n formalName () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Sets or gets the dependencies.\n * @param {Object} dependencies Dependencies needed by layer\n * @return {BaseLayer} Instance of base layer.\n */\n dependencies () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Returns the config of the layer\n *\n * @param {Object} config Configuration of layer\n * @return {Object} configuration of layer\n */\n config () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Acts as a getter or setter function\n * When setter\n * Returns the datamodel of the layer\n * @param { DataModel } dataModel instance of DataModel\n * @return { DataModel } DataModel instance of the layer\n */\n data () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Returns a serialized schema of the layer\n * @return {Object} Serialized schema\n */\n serialize () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Returns the unique identifier of this layer\n * @return {string} id of the layer\n */\n id () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n /*\n * This method resolves the x, y, x0 and y0 values from the transformed data.\n * It also checks the type of transformed data for example, if it is a stacked data\n * then it fetches the y and y0 values from the stacked data.\n * @param {Array.} transformedData transformed data\n * @param {Object} fieldMap field definitions\n * @param {string} transformType type of transformed data - stack, group or identity.\n * @return {Array.} Normalized data\n * @private\n */\n normalizeTransformedData () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Gets the transform method from transform factory based on type of transform. It then calls the\n * transform method with the data and passes the configuration parameters of transform such as\n * groupBy, value field, etc.\n *\n * @param {DataModel} dataModel Instance of dataModel\n * @param {Object} config configuration for transforming data\n * @return {Array.} Transformed data.\n * @private\n */\n getTransformedData () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Calculates the domain from the data.\n * It checks the type of field and calculates the domain based on that. For example, if it\n * is a quantitative or temporal field, then it calculates the min and max from the data or\n * if it is a nominal field then it gets all the values from the data of that field.\n * @param {Array} data DataArray\n * @return {Array} Domain values array.\n */\n _calculateDomainFromData () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Returns the domain for the axis.\n *\n * @param {string} encodingType type of encoding x, y, color, etc.\n * @return {Object} Axis domains\n */\n getDomain () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Abstract method for getting nearest point\n * @return {BaseLayer} Instance of base layer\n */\n getNearestPoint () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Abstract method for highlighting points\n * @return {BaseLayer} Instance of base layer\n */\n highlightPoint () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Abstract method for deselecting points\n * @return {BaseLayer} Instance of base layer\n */\n dehighlightPoint () {\n return this;\n }\n\n linkLayerStore () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Sets the container element for the layer to be renderered.\n * @param {SVGElement} mountPoint SVG element or group element.\n */\n mount () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n render () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n}\n","import { COORD_TYPES } from 'muze-utils';\n\nconst { CARTESIAN } = COORD_TYPES;\nexport const props = {\n axes: {},\n mount: {},\n measurement: {},\n metaInf: {},\n data: {},\n config: {},\n valueParser: {\n defaultValue: val => val\n },\n coord: {\n defaultValue: CARTESIAN\n }\n};\n","/**\n * @module Axis\n * This file declares a class that is used to render an axis to add meaning to\n * plots.\n */\nimport { Symbols } from 'muze-utils';\nimport * as AxisOrientation from '../enums/axis-orientation';\n\n/**\n * @module Axis\n * This file exports constants that are used to reference axis orientations\n * in a consistent manner.\n */\nexport const BOTTOM = 'bottom';\nexport const TOP = 'top';\nexport const LEFT = 'left';\nexport const RIGHT = 'right';\n\n/**\n * This object is used to associate the axis orientation with the d3 class\n * used to represent that axis.\n */\nexport const axisOrientationMap = {\n [AxisOrientation.LEFT]: Symbols.axisLeft,\n [AxisOrientation.BOTTOM]: Symbols.axisBottom,\n [AxisOrientation.RIGHT]: Symbols.axisRight,\n [AxisOrientation.TOP]: Symbols.axisTop\n};\n","/**\n * @module axis\n * This file exports constants used to reference scale type\n * consistently throughout the project.\n */\nexport const LINEAR = 'linear';\nexport const BAND = 'band';\nexport const TIME = 'temporal';\nexport const COLOR = 'color';\nexport const ORDINAL = 'ordinal';\nexport const QUANTIZE = 'quantize';\nexport const QUANTILE = 'quantile';\nexport const LOG = 'log';\nexport const POW = 'pow';\nexport const IDENTITY = 'identity';\nexport const SEQUENTIAL = 'sequential';\nexport const THRESHOLD = 'threshold';\n","export const CLASSPREFIX = 'muze';\n\nexport const CONTINOUS = 'continous';\nexport const DISCRETE = 'discrete';\nexport const SEQUENTIAL = 'sequential';\nexport const ORDINAL = 'ordinal';\nexport const LINEAR = 'linear';\nexport const BAND = 'band';\nexport const THRESHOLD = 'threshold';\nexport const QUANTIZE = 'quantize';\nexport const QUANTILE = 'quantile';\n\nexport const COLOR = 'color';\nexport const SHAPE = 'shape';\nexport const SIZE = 'size';\n\nexport const DOMAIN = 'domain';\nexport const HIDDEN = 'hidden';\nexport const NUMBER = 'number';\nexport const BOTTOM = 'bottom';\nexport const TOP = 'top';\n\nexport const RGB = 'rgb';\nexport const HEX = 'hex';\nexport const HSLA = 'hsla';\nexport const HSL = 'hsl';\n\nexport const DEFAULT_ANGLE_DOMAIN = [1];\nexport const MIN_NO_OF_TICKS = 2;\nexport const DEFAULT_NO_OF_TICKS = 10;\n\n","import { scales, colorSchemes } from 'muze-utils';\n\nimport {\n SEQUENTIAL,\n ORDINAL,\n LINEAR,\n CONTINOUS,\n THRESHOLD,\n QUANTIZE\n} from './enums/constants';\n\nimport * as ScaleType from './enums/scale-type';\n\nconst {\n scaleLinear,\n scaleThreshold,\n scaleLog,\n scalePow,\n scaleIdentity,\n scaleOrdinal,\n scaleSequential,\n scaleQuantize,\n scaleQuantile,\n schemeCategory10,\n schemeCategory20,\n schemeCategory20b,\n scaleBand,\n scaleTime\n} = scales;\nexport const scaleMap = {\n [ScaleType.LINEAR]: scaleLinear,\n [ScaleType.BAND]: scaleBand,\n [ScaleType.QUANTIZE]: scaleQuantize,\n [ScaleType.QUANTILE]: scaleQuantile,\n [ScaleType.THRESHOLD]: scaleThreshold,\n [ScaleType.SEQUENTIAL]: scaleSequential,\n [ScaleType.LOG]: scaleLog,\n [ScaleType.POW]: scalePow,\n [ScaleType.IDENTITY]: scaleIdentity,\n [ScaleType.TIME]: scaleTime,\n [ScaleType.COLOR]: scaleLinear,\n [ScaleType.ORDINAL]: scaleOrdinal\n};\nexport const SCHEMES = {\n SCHEME1: schemeCategory10,\n SCHEME2: schemeCategory20,\n SCHEME3: schemeCategory20b\n};\n\n/**\n * Accepts a scheme in a string format and returns the scale from d3-scale-chromatic\n *\n * @export\n * @param {string} scheme a string representing the kind of scheme for the color axis\n * @return {Object} The corresponding scale from a scheme type from d3 chromatic scale\n */\nexport function getScheme (scheme) {\n if (scheme[0] === 'i') {\n return scaleSequential(colorSchemes[scheme]);\n }\n return scaleOrdinal(colorSchemes[scheme]);\n}\n\n/**\n *\n *\n * @export\n * @param {*} scheme\n *\n */\nexport function getSchemeType (scheme) {\n let schemeType = '';\n if (scheme && typeof (scheme) === 'string') {\n schemeType = scheme[0] === 'i' ? SEQUENTIAL : ORDINAL;\n } else {\n schemeType = ORDINAL;\n }\n return schemeType;\n}\n\n/**\n * This function is used to create a scale that is assigned to\n * an instance of axis.\n *\n * @export\n * @param {Object} params the input parameters to create a Scale object\n * @param {string} params.type the type of scale\n * @param {Array} params.range the range of scale\n * @return {Object} instance of scale\n */\nexport function createScale (params) {\n if (!params.type || !scaleMap[params.type]) {\n throw new Error(`${params.type} is not a valid scale type`);\n }\n if (!Array.isArray(params.range)) {\n throw new Error('range parameter must be an array');\n }\n let scaleFactory = null;\n const range = params.range;\n // @todo: do it using scale decorator\n if (params.type === LINEAR && params.interpolator) {\n scaleFactory = scaleMap[params.interpolator];\n if (params.interpolator === ScaleType.POW) {\n return scaleFactory().range(range).exponent(params.exponent);\n } else if (params.interpolator === ScaleType.LOG) {\n return scaleFactory().range(range).base([params.base]);\n }\n } else {\n scaleFactory = scaleMap[params.type];\n }\n\n if (params.type === QUANTIZE) {\n scaleFactory().nice();\n }\n return scaleFactory().range(range);\n}\n\n/**\n * This method is used to update the range of a scale\n * so that the core module can remain agnostic of the d3\n * scale api.\n *\n * @export\n * @param {Scale} scale Instance of d3 Scale.\n * @param {Array} range new range of the scale.\n * @return {Scale} Updated scale.\n */\nexport function updateScaleRange (scale, range) {\n return scale.range(range);\n}\n\n/**\n *\n *\n * @export\n * @param {*} domainType\n * @param {*} rangeType\n * @param {*} steps\n *\n */\nexport function getScaleType (domainType, rangeType, steps) {\n if (rangeType === CONTINOUS) {\n return LINEAR;\n }\n if (domainType === CONTINOUS) {\n if (steps instanceof Array) {\n return THRESHOLD;\n }\n return QUANTIZE;\n }\n return ORDINAL;\n}\n","import { getUniqueId } from 'muze-utils';\nimport { CLASSPREFIX } from '../enums/constants';\n\n/**\n *\n *\n */\nexport const defaultConfig = {\n id: getUniqueId(),\n adjustRange: false,\n axisName: {\n defClassName: 'axis-name'\n },\n axisNamePadding: 12,\n base: 10,\n classPrefix: CLASSPREFIX,\n className: `${CLASSPREFIX}-axis`,\n exponent: 1,\n interpolator: 'linear',\n fixedBaseline: true,\n labels: {\n rotation: null,\n smartTicks: null\n },\n orientation: 'left',\n numberFormat: val => val,\n padding: 0.3,\n nice: true,\n numberOfTicks: null,\n rotate: false,\n show: true,\n showAxisName: true,\n showInnerTicks: true,\n showOuterTicks: true,\n style: {},\n type: 'linear',\n tickFormat: null,\n tickValues: null,\n xOffset: 0,\n yOffset: 0\n};\n\n","/**\n * This file exports functionality that is used to render axis.\n */\nimport { selectElement, makeElement, angleToRadian } from 'muze-utils';\nimport * as AxisOrientation from './enums/axis-orientation';\nimport { LINEAR, HIDDEN, BOTTOM, TOP } from './enums/constants';\n\n/**\n *\n *\n * @param {*} instance\n * @param {*} container\n * @param {*} labelManager\n * @param {*} config\n */\nconst rotateAxis = (instance, tickText, labelManager) => {\n let rotation;\n const axis = instance.axis();\n const config = instance.config();\n const renderConfig = instance.renderConfig();\n const smartTicks = instance.smartTicks();\n const scale = axis.scale();\n const labelFunc = scale.ticks || scale.quantile || scale.domain;\n const ticks = labelFunc();\n const {\n orientation,\n fixedBaseline,\n type\n } = config;\n const {\n labels\n } = renderConfig;\n\n rotation = labels.rotation;\n\n const tickSize = instance.getTickSize();\n tickText.each(function (d, index) {\n let yShift;\n let xShift;\n let datum = smartTicks[index] ? smartTicks[index].text : d;\n\n datum = datum.toString();\n\n const tickLabelDim = labelManager.getOriSize(datum);\n\n const width = tickLabelDim.width * 0.5;\n const height = tickLabelDim.height * 0.5;\n\n if (rotation < 0) {\n rotation = 360 + rotation;\n }\n\n const quadrant = 4 - Math.floor(rotation / 90);\n const rotationNormalizer = ((quadrant % 2 === 0) ? rotation : 180 * Math.ceil(rotation / 180) - rotation) % 180;\n\n yShift = Math.sqrt(height ** 2 + width ** 2) * Math.sin(angleToRadian(rotationNormalizer));\n\n if ((quadrant === 3 || quadrant === 2) && !(rotationNormalizer > 67.5 && rotationNormalizer <= 90)) {\n yShift += height * 2;\n }\n xShift = width;\n\n if (rotation === 90) {\n xShift = height;\n } else if (rotation === 270) {\n xShift = -height;\n } else {\n xShift = 0;\n }\n\n if (orientation === AxisOrientation.TOP) {\n xShift = (fixedBaseline && ticks[0] === d && type === LINEAR) ? xShift + xShift / 2 : xShift;\n selectElement(this)\n .attr('transform', `translate(${-xShift + tickSize}\n ${-yShift - tickSize}) rotate(${rotation})`);\n } else {\n xShift = (fixedBaseline && ticks[0] === d && type === LINEAR) ? xShift - xShift / 2 : xShift;\n\n selectElement(this)\n .attr('transform', `translate(${xShift - tickSize}\n ${yShift + tickSize}) rotate(${rotation})`);\n }\n selectElement(this).transition()\n .duration(1000).text(datum);\n });\n return tickText;\n};\n\n/**\n *\n *\n * @param {*} tickText\n * @param {*} axisInstance\n */\nconst changeTickOrientation = (selectContainer, axisInstance, tickSize) => {\n const {\n _smartTicks\n } = axisInstance;\n const config = axisInstance.config();\n const renderConfig = axisInstance.renderConfig();\n const labelManager = axisInstance.dependencies().labelManager;\n const {\n orientation,\n classPrefix\n } = config;\n const {\n labels\n } = renderConfig;\n const {\n rotation,\n smartTicks: isSmartTicks\n } = labels;\n\n const tickText = selectContainer.selectAll('.tick text');\n tickText.selectAll('tspan').remove();\n\n // rotate labels if not enough space is available\n if (rotation && (orientation === TOP || orientation === BOTTOM)) {\n rotateAxis(axisInstance, tickText, labelManager);\n } else if (!rotation && !isSmartTicks) {\n tickText.attr('transform', '');\n } else {\n tickText.text('');\n if (orientation === TOP || orientation === BOTTOM) {\n tickText.attr('y', 0)\n .attr('x', 0)\n .attr('transform', '')\n .text('');\n const tspan = makeElement(tickText, 'tspan', (d, i) => {\n if (_smartTicks[i]) {\n return _smartTicks[i].lines;\n } return [];\n }, `${classPrefix}-smart-text`);\n\n tspan.attr('dy', '0')\n .style('opacity', '0')\n\n .transition()\n .duration(1000)\n .on('end', axisInstance.registerAnimationDoneHook())\n .attr('dy', (d, i) => {\n if (orientation === BOTTOM || i !== 0) {\n return _smartTicks[0].oriTextHeight;\n }\n return -_smartTicks[0].oriTextHeight * (_smartTicks[0].lines.length - 1) - tickSize;\n })\n .style('opacity', 1)\n .text(e => e)\n .attr('x', 0);\n } else {\n const tspan = makeElement(tickText, 'tspan', (d, i) => _smartTicks[i].lines, `${classPrefix}-smart-text`);\n tspan.text(e => e);\n }\n }\n\n return tickText;\n};\n\nconst setFixedBaseline = (axisInstance) => {\n const {\n fixedBaseline\n } = axisInstance.config();\n const {\n showInnerTicks\n } = axisInstance.renderConfig();\n const domain = axisInstance.domain();\n if (fixedBaseline && domain.length && showInnerTicks) {\n axisInstance.setFixedBaseline();\n }\n};\n\n/**\n *\n *\n * @param {*} textNode\n * @param {*} orientation\n * @param {*} measures\n */\nconst setAxisNamePos = (textNode, orientation, measures) => {\n const {\n axisNameHeight,\n yOffset,\n labelOffset,\n availableSpace\n } = measures;\n\n switch (orientation) {\n case AxisOrientation.LEFT:\n textNode.attr('transform',\n `translate(${-(availableSpace.width - axisNameHeight)},${yOffset + labelOffset})rotate(-90)`);\n break;\n case AxisOrientation.RIGHT:\n textNode.attr('transform',\n `translate(${(availableSpace.width - axisNameHeight)},${yOffset + labelOffset})rotate(90)`);\n break;\n case AxisOrientation.TOP:\n textNode.attr('transform',\n `translate(${availableSpace.width / 2},${-availableSpace.height + axisNameHeight})`);\n break;\n case AxisOrientation.BOTTOM:\n textNode.attr('transform',\n `translate(${availableSpace.width / 2},${availableSpace.height - axisNameHeight / 2})`);\n break;\n default:\n }\n return textNode;\n};\n\n/**\n * This method is used to render the axis inside an\n * svg container.\n *\n * @export\n * @param {Object} axisInstance the nput object required to render axis\n * @param {string} axisInstance.orientation the orientation of axis\n * @param {Object} axisInstance.scale instance of d3 scale\n * @param {SVGElement} axisInstance.container the container in which to render\n */\nexport function renderAxis (axisInstance) {\n const config = axisInstance.config();\n const renderConfig = axisInstance.renderConfig();\n const labelManager = axisInstance.dependencies().labelManager;\n const mount = axisInstance.mount();\n const range = axisInstance.range();\n const axis = axisInstance.axis();\n const scale = axisInstance.scale();\n const {\n _axisNameStyle: axisNameStyle,\n _tickLabelStyle: tickLabelStyle,\n _tickFormatter: axisTickFormatter\n } = axisInstance;\n const {\n orientation,\n name,\n\n axisNamePadding,\n className,\n id,\n classPrefix\n } = config;\n const {\n show,\n xOffset,\n yOffset,\n showAxisName,\n labels,\n smartAxisName\n } = renderConfig;\n\n if (!show) {\n return;\n }\n\n const tickSize = axisInstance.getTickSize();\n\n const selectContainer = makeElement(selectElement(mount), 'g', [axisInstance], `${className}`, {},\n key => key.config().id);\n\n // Set style for tick labels\n labelManager.setStyle(tickLabelStyle);\n\n const labelFunc = scale.ticks || scale.quantile || scale.domain;\n\n const ticks = axis.tickValues() || labelFunc();\n\n axis.tickFormat(axisTickFormatter(ticks));\n\n // Get range(length of range)\n const availableSpace = Math.abs(range[0] - range[1]);\n\n // Get width and height taken by axis labels\n const labelProps = axisInstance.axisComponentDimensions().largestTickDimensions;\n\n // Draw axis ticks\n selectContainer.attr('transform', `translate(${xOffset},${yOffset})`);\n setFixedBaseline(axisInstance);\n if (labels.smartTicks === false || tickSize === 0) {\n selectContainer.transition()\n .duration(1000)\n .on('end', axisInstance.registerAnimationDoneHook())\n .call(axis);\n } else {\n selectContainer.call(axis);\n }\n selectContainer.selectAll('.tick').classed(`${classPrefix}-ticks`, true);\n selectContainer.selectAll('.tick line').classed(`${classPrefix}-tick-lines`, true);\n\n // Set classes for ticks\n const tickText = selectContainer.selectAll('.tick text');\n tickText.classed(`${classPrefix}-ticks`, true)\n .classed(`${classPrefix}-ticks-${id}`, true);\n\n changeTickOrientation(selectContainer, axisInstance, tickSize);\n\n // Create axis name\n const textNode = makeElement(selectContainer, 'text', [smartAxisName], `${classPrefix}-axis-name`)\n .attr('text-anchor', 'middle')\n .classed(`${classPrefix}-axis-name-${id}`, true)\n .text(d => d.text);\n\n // Hide axis name if show is off\n textNode.classed(HIDDEN, !showAxisName);\n\n // render labels based on orientation of axis\n const labelOffset = availableSpace / 2;\n\n // Set style for axis name\n labelManager.setStyle(axisNameStyle);\n const axisNameSpace = labelManager.getOriSize(name);\n const measures = {\n labelProps,\n tickSize,\n axisNamePadding,\n axisNameHeight: axisNameSpace.height,\n axisNameWidth: axisNameSpace.width,\n yOffset,\n xOffset,\n labelOffset,\n availableSpace: axisInstance.availableSpace()\n };\n // Set position for axis name\n setAxisNamePos(textNode, orientation, measures);\n}\n","import {\n timeMillisecond,\n timeSecond,\n timeMinute,\n timeHour,\n timeDay,\n timeWeek,\n timeMonth,\n timeYear\n} from 'muze-utils';\n\nconst durationSecond = 1000;\nconst durationMinute = durationSecond * 60;\nconst durationHour = durationMinute * 60;\nconst durationDay = durationHour * 24;\nconst durationWeek = durationDay * 7;\nconst durationMonth = durationDay * 30;\nconst durationYear = durationDay * 365;\n\n// Longest Word for each level based on which tick skipping is decided\nconst longestWord = {\n month: 'September',\n quarter: 'October',\n halfYearly: 'July',\n year: 9999,\n day: 'September',\n hour: '24 AM',\n mintues: '60:60',\n seconds: ':60',\n week: 'Wed 31'\n};\n\n// These are the various levels of ticks that can be shown by Muze.\n// Each level is described as how frequently the ticks appear\n// The format is as follows:\n// [Frequency, Milliseconds, Name of Seconds, Tick Generator, Level Type]\nconst tickIntervals = [\n [1, 1, 'milliseconds', timeMillisecond.every(1), 'seconds'],\n [1, durationSecond, 'seconds', timeSecond.every(1), 'seconds'],\n [5, 5 * durationSecond, 'five seconds', timeSecond.every(5), 'seconds'],\n [10, 10 * durationSecond, 'ten seconds', timeSecond.every(10), 'seconds'],\n [15, 15 * durationSecond, 'fifteen seconds', timeSecond.every(15), 'seconds'],\n [30, 30 * durationSecond, 'thirty seconds', timeSecond.every(30), 'seconds'],\n [1, durationMinute, 'minute', timeMinute.every(1), 'minutes'],\n [5, 5 * durationMinute, 'five minutes', timeMinute.every(5), 'minutes'],\n [10, 10 * durationMinute, 'ten minutes', timeMinute.every(10), 'minutes'],\n [15, 15 * durationMinute, 'fifteen minutes', timeMinute.every(15), 'minutes'],\n [30, 30 * durationMinute, 'thirty minutes', timeMinute.every(30), 'minutes'],\n [1, durationHour, 'hour', timeHour.every(1), 'hour'],\n [3, 3 * durationHour, 'three hours', timeHour.every(3), 'hour'],\n [6, 6 * durationHour, 'six hours', timeHour.every(6), 'hour'],\n [12, 12 * durationHour, 'twelve hours', timeHour.every(12), 'hour'],\n [1, durationDay, 'daily', timeDay.every(1), 'day'],\n [1, durationWeek, 'weekly', timeWeek.every(1), 'week'],\n [1, durationMonth, 'monthly', timeMonth.every(1), 'week'],\n [3, 3 * durationMonth, 'quaterly', timeMonth.every(3), 'quarter'],\n [6, 6 * durationMonth, 'half yearly', timeMonth.every(6), 'halfYearly'],\n [1, durationYear, 'yearly', timeYear.every(1), 'year'],\n [2, 2 * durationYear, '2 year', timeYear.every(2), 'year'],\n [3, 3 * durationYear, '3 year', timeYear.every(3), 'year'],\n [5, 5 * durationYear, '5 year', timeYear.every(5), 'year'],\n [10, 10 * durationYear, 'decade', timeYear.every(10), 'year'],\n [100, 100 * durationYear, 'century', timeYear.every(100), 'year'],\n [1000, 1000 * durationYear, 'millenium', timeYear.every(1000), 'year']\n];\n/**\n * Get the actual tick interval based on the available width, number of ticks\n * and the distance between two ticks\n *\n * @param {Object} context Axis Context\n * @param {number} noOfTicks Number of Ticks based on which interval is calculated\n * @return {number} The width for the tick interval\n */\nconst getActualTickInterval = (context, noOfTicks) => {\n const minTickDistance = context._minTickDistance;\n const minWidthBetweenTicks = minTickDistance.width;\n\n const { width } = context.availableSpace();\n const actualTickInterval = Math.floor(((width - (noOfTicks - 1) * (minWidthBetweenTicks)) / noOfTicks));\n\n return actualTickInterval;\n};\n\n/**\n * Get the tick interval based on the current level of ticks. Levels are decided on\n * the number of ticks that are possible to show\n *\n * @param {Object} context Axis Context\n * @param {string} type Type of level (yearly, monthly, etc)\n * @return {number} The width for the tick interval\n */\nconst getTickIntervalBasedOnCurrentLevel = (context, type) => {\n const labelManager = context._dependencies.labelManager;\n const longestWordType = longestWord[type];\n const measure = labelManager.getOriSize(longestWordType);\n\n return measure.width;\n};\n\nconst getTickIntervalFnBasedOnNumberOfTicks = (interval, count, context) => {\n let possibleTickLevelIndex = tickIntervals.length - 1;\n let maxPossibleTicks = 1;\n let tickIntervalLevelInfo = null;\n\n // Decide possible tick level based on min tick width (with ellipses)\n for (let i = tickIntervals.length - 1; i >= 0; i--) {\n const tickIntervalInfo = tickIntervals[i];\n const numOfPossibleTicks = Math.floor(interval / tickIntervalInfo[1]);\n if (numOfPossibleTicks <= count) {\n possibleTickLevelIndex = i;\n maxPossibleTicks = numOfPossibleTicks;\n }\n }\n\n tickIntervalLevelInfo = tickIntervals[possibleTickLevelIndex];\n\n // Get actual tick interval based on the level of ticks generated\n const actualTickInterval = getActualTickInterval(context, maxPossibleTicks);\n\n // Maximum Possible tick Interval for a particular level based on a pre decided set of values\n const maxTickInterval = getTickIntervalBasedOnCurrentLevel(context, tickIntervalLevelInfo[4]);\n\n // Display the next level involving tick skipping if current level does not meet the requirement\n // for displaying max tick\n if (actualTickInterval < maxTickInterval && possibleTickLevelIndex < tickIntervals.length - 1) {\n tickIntervalLevelInfo = tickIntervals[possibleTickLevelIndex + 1];\n }\n return tickIntervalLevelInfo[3];\n};\n\nexport const getSkippedTicks = (context, maxPossibleTicks) => {\n let actualNumberOfTicks = maxPossibleTicks;\n const domain = context.domain();\n const minDiff = context._minDiff;\n // Get the interval in ms from the domain\n const millisecondInterval = domain[1] - domain[0];\n // Get number of ticks based on the minimum difference in the data\n const numOfTicksAccordingToMinDiff = Math.floor(millisecondInterval / minDiff);\n\n // Show ticks according to min diff if possible\n if (maxPossibleTicks >= numOfTicksAccordingToMinDiff) {\n actualNumberOfTicks = numOfTicksAccordingToMinDiff;\n }\n\n return getTickIntervalFnBasedOnNumberOfTicks(millisecondInterval, actualNumberOfTicks, context);\n};\n","import { BOTTOM, TOP, LEFT, RIGHT } from '../enums/axis-orientation';\nimport { getSkippedTicks } from './skip-ticks';\nimport { TIME, LINEAR, BAND } from '../enums/scale-type';\n\nexport const applyTickSkipping = (context) => {\n const minTickDistance = context._minTickDistance;\n const minTickSpace = context._minTickSpace;\n const minWidthBetweenTicks = minTickDistance.width;\n const minTickWidth = minTickSpace.width;\n\n const { width } = context.availableSpace();\n\n const maxTicks = Math.floor((width + minWidthBetweenTicks) / (minTickWidth + minWidthBetweenTicks));\n\n const ticks = context.scale().ticks(getSkippedTicks(context, maxTicks));\n\n context.renderConfig({\n tickValues: ticks\n });\n};\n\nconst adjustHorizontalRange = (range, diff) => {\n range[0] += diff;\n range[1] -= diff;\n return range;\n};\n\nconst adjustVerticalRange = (range, diff) => {\n range[0] -= diff;\n range[1] += diff;\n return range;\n};\n\nconst rangeAdjustmentMap = {\n [TOP]: adjustHorizontalRange,\n [BOTTOM]: adjustHorizontalRange,\n [LEFT]: adjustVerticalRange,\n [RIGHT]: adjustVerticalRange\n};\n\nexport const setAxisRange = (context, type, rangeBounds, offset) => {\n context.range(rangeBounds);\n offset && context.renderConfig({ [`${type}Offset`]: offset });\n};\n\nconst getAxisOffset = (timeDiff, range, domain) => {\n const avWidth = Math.abs(range[1] - range[0]);\n const pvr = avWidth / (domain[1] - domain[0]);\n const width = (pvr * timeDiff);\n const bars = avWidth / width;\n const barWidth = avWidth / (bars + 1);\n const diff = avWidth - barWidth * bars;\n\n return diff / 2;\n};\n\nexport const getAdjustedRange = (minDiff, range, domain, config) => {\n const {\n orientation,\n adjustRange\n } = config;\n const diff = getAxisOffset(minDiff, range, domain);\n\n if (adjustRange) {\n return rangeAdjustmentMap[orientation](range, diff);\n }\n return range;\n};\n\nexport const spaceSetter = (context, spaceConfig) => {\n let tickInterval;\n let heightForTicks;\n const config = context.config();\n const {\n width: availWidth,\n height: availHeight,\n padding\n } = context.availableSpace();\n const {\n top,\n left,\n bottom,\n right\n } = padding;\n const {\n isOffset\n } = spaceConfig;\n const {\n showAxisName,\n labels\n } = context.renderConfig();\n const {\n rotation\n } = labels;\n const {\n fixedBaseline,\n axisNamePadding,\n tickValues\n } = config;\n const {\n tickDimensions,\n allTickDimensions,\n axisNameDimensions,\n tickSize\n } = context.getAxisDimensions();\n const {\n height: tickDimHeight,\n width: tickDimWidth\n } = tickDimensions;\n\n const namePadding = showAxisName ? axisNamePadding : 0;\n const labelConfig = { smartTicks: true, rotation: labels.rotation };\n const minTickDistance = context._minTickDistance;\n const minTickSpace = context._minTickSpace;\n const minDiff = context._minDiff;\n const domain = context.domain();\n const axisNameHeight = axisNameDimensions.height;\n const minWidthBetweenTicks = minTickDistance.width;\n const minTickWidth = minTickSpace.width;\n const minTickHeight = minTickSpace.height;\n\n return {\n [TIME]: {\n x: () => {\n !tickValues && context.applyTickSkipping();\n const noOfTicks = context.getTickValues().length;\n\n // Get the Tick Interval\n tickInterval = ((availWidth - (noOfTicks - 1) * (minWidthBetweenTicks)) / noOfTicks);\n\n // Get height for ticks\n heightForTicks = availHeight - axisNameHeight - tickSize - namePadding;\n\n if (tickInterval < minTickWidth && rotation !== 0) {\n // set smart ticks and rotation config\n labelConfig.rotation = labels.rotation === null ? -90 : rotation;\n // Remove ticks if not enough height\n if (tickInterval < minTickHeight) {\n heightForTicks = availHeight;\n tickInterval = minTickHeight;\n context.renderConfig({ showInnerTicks: false, showOuterTicks: false });\n }\n }\n if (availHeight < axisNameHeight) {\n context.renderConfig({ show: false });\n }\n\n const tickShifter = Math.min(tickInterval, tickDimWidth);\n // set range for axis\n setAxisRange(context, 'y', getAdjustedRange(minDiff, [tickShifter / 2,\n availWidth - left - right - tickShifter / 2], domain, config),\n isOffset ? availHeight : null);\n\n context.maxTickSpaces({\n width: tickInterval,\n height: heightForTicks,\n noWrap: rotation !== null\n });\n\n return labelConfig;\n },\n y: () => {\n let widthForTicks = availWidth;\n const tickShifter = tickDimHeight / 2;\n\n setAxisRange(context, 'x', getAdjustedRange(minDiff,\n [availHeight - top - bottom - tickShifter, tickShifter], domain, config),\n isOffset ? availWidth : null);\n\n if ((availWidth - axisNameHeight - namePadding) <= minWidthBetweenTicks) {\n widthForTicks = 0;\n context.renderConfig({ showInnerTicks: false, showOuterTicks: false });\n }\n\n context.maxTickSpaces({\n width: widthForTicks,\n height: availHeight,\n noWrap: true\n });\n if (availWidth < axisNameHeight) {\n context.renderConfig({ show: false });\n }\n return labelConfig;\n }\n },\n [BAND]: {\n x: () => {\n setAxisRange(context, 'y', [0, availWidth - left - right], isOffset ? availHeight : null);\n const range = context.range();\n\n // Get Tick Interval\n tickInterval = ((range[1] - range[0]) / (tickValues || domain).length) - minWidthBetweenTicks * 2;\n\n // Get height available for ticks\n heightForTicks = availHeight - axisNameHeight - tickSize - namePadding;\n\n if (tickInterval < minTickWidth && rotation !== 0) {\n // set smart ticks and rotation config\n labelConfig.rotation = rotation === null ? -90 : rotation;\n labelConfig.smartTicks = false;\n\n // Ticks with overlapping height\n if (tickInterval < minTickHeight) {\n heightForTicks = 0;\n tickInterval = 0;\n context.renderConfig({ showInnerTicks: false, showOuterTicks: false });\n context.range([minTickHeight / 2, availWidth - minTickHeight / 2]);\n }\n } else if (tickValues) {\n const interval = (availWidth / domain.length) - minWidthBetweenTicks;\n if (interval < minTickWidth) {\n context.range([minTickHeight / 2, availWidth - minTickHeight / 2]);\n }\n }\n if (availHeight < axisNameHeight) {\n context.renderConfig({ show: false, showInnerTicks: false, showOuterTicks: false });\n }\n\n context.maxTickSpaces({\n width: tickInterval,\n height: heightForTicks,\n noWrap: rotation !== null\n });\n return labelConfig;\n },\n y: () => {\n setAxisRange(context, 'x', [availHeight - bottom, top], isOffset ? availWidth : null);\n\n let widthForTicks = availWidth - axisNameHeight - tickSize - namePadding;\n if (widthForTicks <= minWidthBetweenTicks) {\n widthForTicks = 0;\n context.renderConfig({ showInnerTicks: false, showOuterTicks: false });\n }\n\n context.maxTickSpaces({\n width: widthForTicks,\n height: availHeight,\n noWrap: true\n });\n if (availWidth < axisNameHeight) {\n context.renderConfig({ show: false });\n }\n return labelConfig;\n }\n },\n [LINEAR]: {\n x: () => {\n labelConfig.smartTicks = false;\n const tickShifter = tickDimWidth / 2;\n\n const baseline = fixedBaseline ? 0 : tickShifter;\n\n setAxisRange(context, 'y', [baseline + left, availWidth - right - tickShifter],\n isOffset ? availHeight : null);\n\n const range = context.range();\n\n // Get Tick widths and available space\n const totalTickWidth = allTickDimensions.length * (tickDimWidth + minWidthBetweenTicks);\n const availableWidth = range[1] - range[0];\n\n // Rotate labels if not enough width\n if (availableWidth < totalTickWidth && labels.rotation !== null) {\n if (availHeight - tickDimWidth - namePadding - tickSize > axisNameHeight) {\n labelConfig.rotation = null;\n context.renderConfig({\n showInnerTicks: true,\n showAxisName: true\n });\n } else {\n labelConfig.rotation = -90;\n context.renderConfig({\n showInnerTicks: true,\n showAxisName: false\n\n });\n }\n }\n\n if (availHeight < axisNameHeight) {\n context.renderConfig({ show: false });\n }\n return labelConfig;\n },\n y: () => {\n labelConfig.smartTicks = false;\n const tickShifter = tickDimensions.height / 2;\n const baseline = fixedBaseline ? 1 : tickShifter;\n\n setAxisRange(context, 'x', [availHeight - bottom - baseline, tickShifter + top],\n isOffset ? availWidth : null);\n\n // Remove display of ticks if no space is left\n if (availWidth < tickDimWidth + axisNameHeight + namePadding) {\n context.renderConfig({ showInnerTicks: false });\n if (availWidth < axisNameHeight) {\n context.renderConfig({ show: false });\n }\n }\n return labelConfig;\n }\n }\n };\n};\n","import { defaultValue } from 'muze-utils';\nimport { TOP, LEFT, BOTTOM } from '../enums/axis-orientation';\nimport { MIN_NO_OF_TICKS, DEFAULT_NO_OF_TICKS } from '../enums/constants';\nimport { setAxisRange, getAdjustedRange } from './space-setter';\n\nexport const getRotatedSpaces = (rotation = 0, width, height) => {\n let rotatedHeight = height;\n let rotatedWidth = width;\n if (rotation) {\n const angle = ((rotation || 0) * Math.PI) / 180;\n rotatedWidth = Math.abs(height * Math.sin(angle)) + Math.abs(width * Math.cos(angle));\n rotatedHeight = Math.abs(width * Math.sin(angle)) + Math.abs(height * Math.cos(angle));\n }\n return { width: rotatedWidth, height: rotatedHeight };\n};\n\nexport const setOffset = (context) => {\n let x = 0;\n let y = 0;\n const logicalSpace = context.logicalSpace();\n const config = context.config();\n const {\n orientation,\n xOffset,\n yOffset\n } = config;\n if (orientation === LEFT) {\n x = xOffset === undefined ? logicalSpace.width : xOffset;\n }\n if (orientation === TOP) {\n y = yOffset === undefined ? logicalSpace.height : yOffset;\n }\n context.renderConfig({ xOffset: x, yOffset: y });\n};\n\nexport const getNumberOfTicks = (availableSpace, labelDim, axis, axisInstance) => {\n let numberOfValues = 0;\n let tickValues = [];\n let { numberOfTicks } = axisInstance.config();\n const ticks = axis.scale().ticks();\n const tickLength = ticks.length;\n const minTickDistance = axisInstance._minTickDistance.width;\n\n numberOfValues = tickLength;\n\n if (tickLength * (labelDim + minTickDistance) > availableSpace) {\n numberOfValues = Math.floor(availableSpace / (labelDim + minTickDistance));\n }\n\n numberOfTicks = numberOfTicks || numberOfValues;\n numberOfValues = Math.min(numberOfTicks, Math.max(MIN_NO_OF_TICKS, numberOfValues));\n\n tickValues = axis.scale().ticks(numberOfValues);\n\n if (tickValues.length > numberOfValues) {\n tickValues = tickValues.filter((e, i) => i % 2 === 0);\n }\n\n if (numberOfValues === MIN_NO_OF_TICKS) {\n tickValues = axis.scale().ticks(DEFAULT_NO_OF_TICKS);\n tickValues = [tickValues[0], tickValues[tickValues.length - 1]];\n }\n return tickValues;\n};\n\nexport const getAxisComponentDimensions = (context) => {\n let largestTick = '';\n let largestTickDimensions = { width: 0, height: 0 };\n let smartTick = {};\n let axisTicks;\n const allTickDimensions = [];\n const scale = context.scale();\n const { tickValues, showAxisName } = context.renderConfig();\n const { name } = context.config();\n const { labelManager } = context.dependencies();\n const labelFunc = scale.ticks || scale.quantile || scale.domain;\n\n // set the style on the shared label manager instance\n labelManager.setStyle(context._tickLabelStyle);\n\n // get the values along the domain\n axisTicks = tickValues || labelFunc();\n\n // Get the tick labels\n axisTicks = axisTicks.map((originalLabel, i) => {\n const label = context.getFormattedText(originalLabel, i, axisTicks);\n\n // convert to string for quant values\n const tickDimensions = labelManager.getOriSize(label);\n\n // Get spaces for all labels\n allTickDimensions.push(tickDimensions);\n\n // Getting largest label\n if (tickDimensions.width > largestTickDimensions.width) {\n largestTick = label;\n smartTick = context.smartTicks() ? context.smartTicks()[i] : {};\n\n largestTickDimensions = tickDimensions;\n smartTick = smartTick || tickDimensions;\n }\n return label;\n });\n\n labelManager.setStyle(context._axisNameStyle);\n const axisNameDimensions = showAxisName ? labelManager.getOriSize(name) : { width: 0, height: 0 };\n\n return {\n axisNameDimensions,\n largestTick,\n largestTickDimensions,\n allTickDimensions,\n axisTicks,\n smartTick,\n tickSize: context.getTickSize()\n };\n};\n\nexport const computeAxisDimensions = (context) => {\n let tickDimensions = {};\n const { labels } = context.renderConfig();\n const { smartTicks, rotation } = labels;\n const {\n largestTickDimensions,\n axisTicks,\n smartTick,\n axisNameDimensions,\n allTickDimensions,\n tickSize\n } = getAxisComponentDimensions(context);\n const { height: labelHeight, width: labelWidth } = largestTickDimensions;\n\n // get the domain of axis\n const domain = context.domain();\n // const angle = ((rotation || 0) * Math.PI) / 180;\n\n if (domain.length === 0) {\n return null;\n }\n\n if (smartTicks) {\n tickDimensions = smartTick;\n } else {\n tickDimensions = { width: labelWidth, height: labelHeight };\n }\n tickDimensions = getRotatedSpaces(rotation, tickDimensions.width, tickDimensions.height);\n\n if (tickSize === 0) {\n tickDimensions = { width: 0, height: 0 };\n }\n return {\n allTickDimensions,\n tickSize,\n tickDimensions,\n axisNameDimensions,\n largestTickDimensions,\n axisTicks\n };\n};\n\n/**\n *\n *\n * @param {*} axisDimensions\n * @param {*} config\n * @param {*} range\n *\n */\nexport const getHorizontalAxisSpace = (context, axisDimensions, range) => {\n let width;\n let height;\n const domain = context.domain();\n const minTickDistance = context._minTickDistance.width;\n const { tickSize, tickDimensions, axisNameDimensions } = axisDimensions;\n const { axisNamePadding, tickValues } = context.config();\n const { showAxisName } = context.renderConfig();\n const { height: axisDimHeight } = axisNameDimensions;\n const { height: tickDimHeight, width: tickDimWidth } = tickDimensions;\n\n width = range && range.length ? range[1] - range[0] : ((tickDimWidth + minTickDistance) * 3);\n\n height = 0;\n if (tickValues) {\n const minTickDiff = context.getMinTickDifference();\n const [min, max] = [\n Math.min(...tickValues, ...domain),\n Math.max(...tickValues, ...domain)\n ];\n\n width = ((max - min) / Math.abs(minTickDiff)) * (tickDimWidth + context._minTickDistance.width);\n }\n if (!width || width === 0) {\n height = Math.max(tickDimWidth, tickDimHeight);\n } else {\n height = tickDimHeight;\n }\n\n height += (showAxisName ? axisDimHeight + axisNamePadding : 0) + tickSize;\n\n return {\n width,\n height\n };\n};\n\n/**\n *\n *\n * @param {*} axisDimensions\n * @param {*} config\n * @param {*} range\n *\n */\nexport const getVerticalAxisSpace = (context, axisDimensions) => {\n let height;\n let width;\n const domain = context.domain();\n const { tickSize, tickDimensions, axisNameDimensions } = axisDimensions;\n const { axisNamePadding, tickValues } = context.config();\n const { showAxisName } = context.renderConfig();\n const { height: axisDimHeight } = axisNameDimensions;\n const { height: tickDimHeight, width: tickDimWidth } = tickDimensions;\n\n height = 0;\n width = tickDimWidth;\n if (tickValues) {\n const minTickDiff = context.getMinTickDifference();\n const [min, max] = [\n Math.min(...tickValues, ...domain),\n Math.max(...tickValues, ...domain)\n ];\n\n height = ((max - min) / Math.abs(minTickDiff)) * tickDimHeight;\n }\n width += (showAxisName ? axisDimHeight : 0) + tickSize + axisNamePadding;\n\n return {\n height,\n width\n };\n};\n\n/**\n * Calculates the logical space of the axis\n * @return {Object} Width and height occupied by the axis.\n */\nexport const calculateBandSpace = (context) => {\n const range = context.range();\n const axisDimensions = context.getAxisDimensions();\n\n const { orientation } = context.config();\n const { show } = context.renderConfig();\n const { largestTickDimensions, axisTicks, allTickDimensions } = axisDimensions;\n const { height: largestDimHeight } = largestTickDimensions;\n const minTickWidth = context._minTickDistance.width;\n if (orientation === TOP || orientation === BOTTOM) {\n let {\n width,\n height\n } = getHorizontalAxisSpace(context, axisDimensions, range);\n\n if (!width || width === 0) {\n width = allTickDimensions.reduce((t, n) =>\n t + Math.min(n.width, n.height) + minTickWidth, 0);\n }\n if (show === false) {\n height = 0;\n width = 0;\n }\n\n return {\n width,\n height\n };\n }\n\n let {\n width,\n height\n } = getVerticalAxisSpace(context, axisDimensions, range);\n\n if (!height || height === 0) {\n height = axisTicks.length * (largestDimHeight + context._minTickDistance.height);\n }\n if (show === false) {\n width = 0;\n }\n return {\n width,\n height\n };\n};\n\n/**\n * Calculates the logical space of the axis\n * @return {Object} Width and height occupied by the axis.\n */\nexport const calculateContinousSpace = (context) => {\n const range = context.range();\n const axisDimensions = context.getAxisDimensions();\n const { orientation } = context.config();\n const { show, showAxisName } = context.renderConfig();\n const { axisNameDimensions } = axisDimensions;\n\n if (show === false) {\n return {\n width: 0,\n height: 0\n };\n }\n\n const { width: axisNameWidth } = axisNameDimensions;\n\n if (orientation === TOP || orientation === BOTTOM) {\n const {\n width,\n height\n } = getHorizontalAxisSpace(context, axisDimensions, range);\n const axisWidth = Math.max(width, axisNameWidth);\n\n return {\n width: axisWidth,\n height\n };\n }\n const {\n width,\n height\n } = getVerticalAxisSpace(context, axisDimensions, range);\n\n const effHeight = Math.max(height, showAxisName ? axisNameWidth : 0);\n\n return {\n width,\n height: effHeight\n };\n};\n\n/**\n * Overwrites domain with user defined domain (if present)\n * @param {Object} context reference to current axes\n * @param {Array} domain default domain\n *\n * @return {Array} domain\n */\nexport const getValidDomain = (context, domain) => {\n const { domain: userDom } = context.config();\n\n if (userDom) {\n domain = userDom;\n }\n\n return defaultValue(domain, []);\n};\n\nexport const setContinousAxisDomain = (context, domain) => {\n const { nice } = context.config();\n const scale = context.scale.bind(context);\n\n scale().domain(domain);\n nice && scale().nice();\n context._domain = scale().domain();\n};\n\n/**\n * Checks if any of the properties have changed between two objects\n * @param {Object} obj first object\n * @param {Object} obj1 second object\n * @param {Array} properties properties to be compared between two objects\n *\n * @return {Boolean} boolean value\n */\nexport const hasAxesConfigChanged = (obj = {}, obj1 = {}, properties) => {\n if (!Object.keys(obj).length || !Object.keys(obj1).length) {\n return false;\n }\n return properties.some(key => obj[key] !== obj1[key]);\n};\n\nexport const resetTickInterval = (context, domain) => {\n const {\n orientation,\n isOffset\n } = context.config();\n\n const minDiff = context._minDiff;\n // Set available space on interaction\n if (context.range().length && (orientation === TOP || orientation === BOTTOM)) {\n context.applyTickSkipping();\n const {\n largestTickDimensions\n } = context.getAxisDimensions();\n\n const noOfTicks = context.getTickValues().length;\n\n const { width, height, padding } = context.availableSpace();\n const {\n left,\n right\n } = padding;\n // Get the Tick Interval\n const tickInterval = Math.min(largestTickDimensions.width,\n ((width - (noOfTicks - 1) * (context._minTickDistance.width)) / noOfTicks));\n\n context.maxTickSpaces({\n width: tickInterval\n });\n\n const adjustedRange = getAdjustedRange(minDiff, [tickInterval / 2,\n width - left - right - tickInterval / 2], domain, context.config());\n\n // set range for axis\n setAxisRange(context, 'y', adjustedRange, isOffset ? height : null);\n\n context.setTickConfig();\n }\n};\n\nexport const getSmartAxisName = (name, width, labelManager) => {\n const oriSize = labelManager.getOriSize(name);\n\n labelManager.useEllipsesOnOverflow(true);\n\n return labelManager.getSmartText(name, width, oriSize.height, true);\n};\n","import { mergeRecursive } from 'muze-utils';\nimport { hasAxesConfigChanged } from './helper';\n\nexport const PROPS = {\n availableSpace: {},\n axisDimensions: {},\n axisComponentDimensions: {},\n config: {\n sanitization: (context, value) => {\n const oldConfig = Object.assign({}, context._config || {});\n const mockedOldConfig = mergeRecursive({}, oldConfig);\n value = mergeRecursive(mockedOldConfig, value);\n\n value.axisNamePadding = Math.max(value.axisNamePadding, 0);\n const shouldAxesScaleUpdate = hasAxesConfigChanged(\n value, oldConfig, ['interpolator', 'exponent', 'base', 'orientation']\n );\n const tickFormatter = context.sanitizeTickFormatter(value);\n\n if (shouldAxesScaleUpdate) {\n context._scale = context.createScale(value);\n context._axis = context.createAxis(value);\n }\n\n context._tickFormatter = ticks => tickFormatter(ticks);\n\n context.resetRenderConfig(value);\n return value;\n }\n },\n renderConfig: {\n sanitization: (context, value) => {\n const oldConfig = Object.assign({}, context._renderConfig || {});\n value = mergeRecursive(oldConfig, value);\n return value;\n }\n },\n logicalSpace: {},\n mount: {\n },\n range: {\n sanitization: (context, value) => {\n context.scale().range(value);\n context.logicalSpace(null);\n return value;\n }\n },\n\n smartTicks: {},\n tickSize: {},\n maxTickSpaces: {\n sanitization: (context, value) => {\n const oldConfig = Object.assign({}, context._maxTickSpaces || {});\n value = mergeRecursive(oldConfig, value);\n return value;\n }\n },\n valueParser: {\n defaultValue: val => val\n }\n};\n","import {\n mergeRecursive,\n getSmartComputedStyle,\n selectElement,\n generateGetterSetters,\n getUniqueId\n} from 'muze-utils';\nimport { createScale } from '../scale-creator';\nimport { axisOrientationMap, BOTTOM, TOP } from '../enums/axis-orientation';\nimport { defaultConfig } from './default-config';\nimport { renderAxis } from '../axis-renderer';\nimport { spaceSetter } from './space-setter';\nimport {\n getAxisComponentDimensions,\n computeAxisDimensions,\n calculateContinousSpace,\n setOffset,\n getValidDomain,\n getSmartAxisName\n} from './helper';\nimport { PROPS } from './props';\n\nexport default class SimpleAxis {\n\n /**\n * Creates an instance of SimpleAxis.\n * @memberof SimpleAxis\n */\n constructor (config, dependencies) {\n this._id = getUniqueId();\n\n this._dependencies = dependencies;\n this._mount = null;\n this._range = [];\n this._domain = [];\n this._domainLock = false;\n this._axisDimensions = {};\n this._smartTicks = [];\n\n const defCon = mergeRecursive({}, this.constructor.defaultConfig());\n const simpleConfig = mergeRecursive(defCon, config);\n\n const bodyElem = selectElement('body');\n const classPrefix = simpleConfig.classPrefix;\n this._tickLabelStyle = getSmartComputedStyle(bodyElem, `${classPrefix}-ticks`);\n this._axisNameStyle = getSmartComputedStyle(bodyElem, `${classPrefix}-axis-name`);\n\n dependencies.labelManager.setStyle(this._tickLabelStyle);\n const dist = dependencies.labelManager.getOriSize('w');\n\n this._minTickDistance = { width: dist.width * 3 / 4, height: dist.height / 2 };\n this._minTickSpace = dependencies.labelManager.getOriSize('www');\n\n generateGetterSetters(this, PROPS);\n this.config(simpleConfig);\n\n this._scale = this.createScale(this._config);\n this._axis = this.createAxis(this._config);\n this._animationDonePromises = [];\n }\n\n /**\n * Returns the default configuration of simple axis\n * @return {Object} default configurations\n */\n static defaultConfig () {\n return defaultConfig;\n }\n\n /**\n * Sets a fixed baseline for the first ticks so that they can render effectively within\n * the given area\n *\n * @param {*} tickText\n * @param {*} config\n * @param {*} labelManager\n */\n setFixedBaseline () {\n return this;\n }\n\n /**\n *\n *\n * @readonly\n * @memberof SimpleAxis\n */\n scale (...params) {\n if (params.length) {\n this._scale = params[0];\n return this;\n }\n return this._scale;\n }\n\n resetDomain () {\n this._domain = [];\n return this;\n }\n\n /**\n *\n *\n * @readonly\n * @memberof SimpleAxis\n */\n axis (...params) {\n if (params.length) {\n this._axis = params[0];\n return this;\n }\n return this._axis;\n }\n\n /**\n *\n *\n * @param {*} d\n *\n * @memberof SimpleAxis\n */\n domain (...domain) {\n if (domain.length) {\n const domainValue = getValidDomain(this, domain[0]);\n this.scale().domain(domainValue);\n this._domain = this.scale().domain();\n this.setAxisComponentDimensions();\n this.logicalSpace(null);\n return this;\n }\n return this._domain;\n }\n\n setAxisComponentDimensions () {\n this.axisComponentDimensions(getAxisComponentDimensions(this));\n }\n\n /**\n *\n *\n *\n * @memberof SimpleAxis\n */\n dependencies () {\n return this._dependencies;\n }\n\n /**\n *\n *\n *\n * @memberof SimpleAxis\n */\n createScale (config) {\n const {\n base,\n padding,\n interpolator,\n exponent\n } = config;\n const range = this.range();\n const scale = createScale({\n padding,\n interpolator,\n exponent,\n base,\n range,\n type: this.constructor.type()\n });\n\n return scale;\n }\n\n sanitizeTickFormatter (value) {\n const { tickFormat, numberFormat } = value;\n\n if (tickFormat) {\n return ticks => (val, i) => tickFormat(numberFormat(val), val, i, ticks);\n }\n\n return () => val => numberFormat(val);\n }\n\n resetRenderConfig (config) {\n const {\n labels,\n show,\n showInnerTicks,\n showOuterTicks,\n showAxisName,\n xOffset,\n yOffset,\n tickValues,\n smartAxisName\n } = config;\n this.renderConfig({\n labels,\n show,\n showInnerTicks,\n showOuterTicks,\n showAxisName,\n xOffset,\n yOffset,\n tickValues,\n smartAxisName\n });\n return this;\n }\n\n resetLogicalSpace () {\n this.logicalSpace(null);\n this.range([]);\n\n this.resetRenderConfig(this.config());\n }\n\n getFormattedText (text, index, axisTicks) {\n const formatter = this._tickFormatter;\n\n return formatter(axisTicks)(text, index);\n }\n\n /**\n *\n *\n *\n * @memberof SimpleAxis\n */\n createAxis (config) {\n const { orientation } = config;\n const axisClass = axisOrientationMap[orientation];\n\n if (axisClass) {\n const axis = axisClass(this.scale());\n return axis;\n }\n return null;\n }\n\n setTickValues (tickValues) {\n const renderConfig = this.renderConfig();\n this.config({ ...renderConfig, tickValues });\n this.tickValues = tickValues;\n this.axis().tickValues(tickValues);\n }\n\n /**\n * This method is used to set the space availiable to render\n * the SimpleCell.\n *\n * @param {number} width The width of SimpleCell.\n * @param {number} height The height of SimpleCell.\n * @memberof AxisCell\n */\n setAvailableSpace (width = 0, height, padding, isOffset) {\n let labelConfig = {};\n const {\n orientation\n } = this.config();\n\n this.availableSpace({ width, height, padding });\n const type = this.constructor.type();\n\n if (orientation === TOP || orientation === BOTTOM) {\n labelConfig = spaceSetter(this, { isOffset })[type].x();\n } else {\n labelConfig = spaceSetter(this, { isOffset })[type].y();\n }\n\n // Set config\n this.renderConfig({\n labels: labelConfig\n });\n this.setTickConfig();\n this.setSmartAxisName();\n return this;\n }\n\n setSmartAxisName () {\n const { orientation, name } = this.config();\n const dimType = (orientation === TOP || orientation === BOTTOM) ? 'width' : 'height';\n const widthDim = this.availableSpace()[dimType];\n const labelManager = this.dependencies().labelManager;\n labelManager.setStyle(this._axisNameStyle);\n this.renderConfig({\n smartAxisName: getSmartAxisName(name, widthDim, labelManager)\n });\n return this;\n }\n\n /**\n *\n *\n * @memberof SimpleAxis\n */\n setTickConfig () {\n return this;\n }\n\n getScaleValue (domainVal) {\n if (domainVal === null || domainVal === undefined) {\n return undefined;\n }\n return this.scale()(domainVal);\n }\n\n /**\n *\n *\n *\n * @memberof SimpleAxis\n */\n getTickSize () {\n return this.axis().tickSize();\n }\n\n /**\n * Gets the space occupied by the parts of an axis\n *\n * @return {Object} object with details about sizes of the axis.\n * @memberof SimpleAxis\n */\n getAxisDimensions (...params) {\n this.axisDimensions(computeAxisDimensions(this, ...params));\n return this.axisDimensions();\n }\n\n /**\n * Gets the space occupied by the axis\n *\n * @return {Object} object with details about size of the axis.\n * @memberof SimpleAxis\n */\n getLogicalSpace () {\n if (!this.logicalSpace()) {\n this.logicalSpace(calculateContinousSpace(this));\n }\n setOffset(this);\n\n return this.logicalSpace();\n }\n\n /**\n * Returns the value from the domain when given a value from the range.\n * @param {number} value Value from the range.\n * @return {number} Value\n */\n invert (value) {\n return this.scale().invert(value);\n }\n\n /**\n * Gets the nearest range value from the given range values.\n * @param {number} v1 Start range value\n * @param {number} v2 End range value\n *\n * @return {Array} range values\n */\n getNearestRange (v1, v2) {\n return [v1, v2];\n }\n\n invertExtent (v1, v2) {\n return [this.invert(v1), this.invert(v2)];\n }\n\n getMinTickDifference () {\n return this.domain();\n }\n\n getFormattedTickValues (tickValues) {\n return tickValues;\n }\n\n /**\n * This method returns the width in pixels for one\n * unit along the axis. It is only applicable to band scale\n * and returns undefined for other scale type.\n *\n * @return {number} the width of one band along band scale axis\n * @memberof SimpleAxis\n */\n getUnitWidth () {\n return 0;\n }\n\n /**\n * This method returns an object that can be used to\n * reconstruct this instance.\n *\n * @return {Object} the serializable props of axis\n * @memberof SimpleAxis\n */\n serialize () {\n return {\n name: this.name,\n type: this.type,\n range: this.range(),\n config: this.config()\n };\n }\n\n /**\n * Returns the id of the axis.\n * @return {string} Unique identifier of the axis.\n */\n get id () {\n return this._id;\n }\n\n /**\n * This method is used to render the axis inside\n * the supplied svg container.\n *\n * @param {SVGElement} svg the svg element in which to render the path\n * @memberof SimpleAxis\n */\n /* istanbul ignore next */render () {\n if (this.mount()) {\n this.setTickConfig();\n renderAxis(this);\n }\n return this;\n }\n\n /**\n *\n *\n *\n * @memberof SimpleAxis\n */\n remove () {\n selectElement(this.mount()).remove();\n return this;\n }\n\n /**\n *\n *\n * @memberof SimpleAxis\n */\n unsubscribe () {\n return this;\n }\n\n /**\n *\n *\n *\n * @memberof SimpleAxis\n */\n isReverse () {\n const range = this.range();\n return range[0] > range[1];\n }\n\n /**\n *\n *\n *\n * @memberof SimpleAxis\n */\n getPixelToValueRatio () {\n const scale = this.scale();\n const range = scale.range();\n const domain = scale.domain();\n\n return Math.abs(range[1] - range[0]) / (domain[1] - domain[0]);\n }\n\n /**\n * Notifies when all animations/transitions of the axis are completed.\n *\n * @public\n * @return {Promise} Returns a promise to notify the animation completion.\n */\n animationDone () {\n return Promise.all(this._animationDonePromises);\n }\n\n registerAnimationDoneHook () {\n let resolveFn;\n const promise = new Promise((resolve) => {\n resolveFn = resolve;\n });\n this._animationDonePromises.push(promise);\n\n return () => {\n resolveFn();\n };\n }\n}\n\n","import { sanitizeDomainWhenEqual } from 'muze-utils';\nimport { scaleMap } from '../../scale-creator';\n\nexport default class LinearInterpolator {\n\n createScale (config) {\n const {\n range\n } = config;\n const scaleFactory = scaleMap.linear;\n this._scale = scaleFactory().range(range);\n return this._scale;\n }\n\n getScaleValue (domainVal) {\n return this._scale(domainVal) + 0.5;\n }\n\n sanitizeDomain (domain) {\n if (domain.length) {\n domain = sanitizeDomainWhenEqual(domain);\n }\n return domain;\n }\n}\n","import { scaleMap } from '../../scale-creator';\n\nexport default class LogInterpolator {\n\n createScale (config) {\n const {\n range,\n base\n } = config;\n const scaleFactory = scaleMap.log;\n this._scale = scaleFactory().range(range).base(base);\n return this._scale;\n }\n\n getScaleValue (domainVal) {\n const scale = this._scale;\n if (domainVal <= 0) {\n return scale(scale.domain()[0]);\n }\n\n return scale(domainVal) + 0.5;\n }\n\n sanitizeDomain (domain) {\n if (domain[0] <= 0) {\n domain[0] = Math.max(1, domain[0]);\n }\n if (domain[1] <= 0) {\n domain[1] = Math.max(1, domain[1]);\n }\n return domain;\n }\n}\n","import { scaleMap } from '../../scale-creator';\n\nexport default class PowInterpolator {\n\n createScale (config) {\n const {\n range,\n exponent\n } = config;\n const scaleFactory = scaleMap.pow;\n this._scale = scaleFactory().range(range).exponent(exponent);\n return this._scale;\n }\n\n getScaleValue (domainVal) {\n return this._scale(domainVal) + 0.5;\n }\n\n sanitizeDomain (domain) {\n return domain;\n }\n}\n","import { getSmallestDiff } from 'muze-utils';\nimport SimpleAxis from './simple-axis';\nimport { BOTTOM, TOP, LEFT, RIGHT } from '../enums/axis-orientation';\nimport { LINEAR, LOG, POW } from '../enums/scale-type';\nimport { LogInterpolator, PowInterpolator, LinearInterpolator } from './interpolators';\nimport {\n getNumberOfTicks,\n getValidDomain,\n setContinousAxisDomain\n} from './helper';\n\nexport const interpolatorMap = {\n [LOG]: LogInterpolator,\n [POW]: PowInterpolator,\n [LINEAR]: LinearInterpolator\n};\n\nexport default class ContinousAxis extends SimpleAxis {\n constructor (config, dependencies) {\n config.tickFormat = config.tickFormat || (val => val);\n super(config, dependencies);\n }\n /**\n *\n *\n *\n * @memberof SimpleAxis\n */\n createScale (config) {\n const {\n base,\n padding,\n interpolator,\n exponent\n } = config;\n const range = this.range();\n const InterpolatorCls = interpolatorMap[interpolator];\n\n this._interpolator = new InterpolatorCls();\n let scale = this._interpolator.createScale({\n padding,\n exponent,\n base,\n range\n });\n\n scale = scale.nice();\n return scale;\n }\n\n /**\n *\n *\n * @static\n *\n * @memberof ContinousAxis\n */\n static type () {\n return LINEAR;\n }\n\n getScaleValue (domainVal) {\n if (domainVal === null || domainVal === undefined) {\n return undefined;\n }\n return this._interpolator.getScaleValue(domainVal);\n }\n /**\n *\n *\n *\n * @memberof SimpleAxis\n */\n getTickSize () {\n const {\n showInnerTicks,\n showOuterTicks\n } = this.renderConfig();\n const axis = this.axis();\n axis.tickSizeInner(showInnerTicks === false ? 0 : 6);\n axis.tickSizeOuter(showOuterTicks === false ? 0 : 6);\n\n return axis.tickSize();\n }\n\n /**\n *\n *\n * @param {*} d\n *\n * @memberof SimpleAxis\n */\n domain (...domain) {\n if (domain.length) {\n const domainVal = this._interpolator.sanitizeDomain(getValidDomain(this, domain[0]));\n setContinousAxisDomain(this, domainVal);\n this.setAxisComponentDimensions();\n this.logicalSpace(null);\n return this;\n }\n return this._domain;\n }\n\n /**\n * This method is used to set the space availiable to render\n * the SimpleCell.\n *\n * @param {number} width The width of SimpleCell.\n * @param {number} height The height of SimpleCell.\n * @memberof AxisCell\n */\n setAvailableSpace (...params) {\n super.setAvailableSpace(...params);\n this.getTickSize();\n return this;\n }\n\n /**\n *\n *\n * @param {*} tickValues\n *\n * @memberof SimpleAxis\n */\n setTickConfig () {\n const {\n tickValues,\n showInnerTicks\n } = this.renderConfig();\n const axis = this.axis();\n\n if (!showInnerTicks) {\n axis.tickValues([]);\n return this;\n }\n\n if (tickValues) {\n tickValues instanceof Array && this.axis().tickValues(tickValues);\n }\n const newTickValues = this.getTickValues();\n\n axis.tickValues(newTickValues);\n const smartLabel = this.dependencies().labelManager;\n smartLabel.setStyle(this._tickLabelStyle);\n const formatter = this._tickFormatter(newTickValues);\n const smartTicks = newTickValues.map((val, i) => {\n const text = formatter(val, i);\n const tickSpace = smartLabel.getOriSize(text);\n\n tickSpace.text = text;\n return tickSpace;\n });\n\n this.smartTicks(smartTicks);\n return this;\n }\n\n /**\n *\n *\n *\n * @memberof SimpleAxis\n */\n getTickValues () {\n let labelDim = 0;\n const {\n orientation\n\n } = this.config();\n const {\n tickValues\n } = this.renderConfig();\n const range = this.range();\n const axis = this.axis();\n\n const availableSpace = Math.abs(range[0] - range[1]);\n\n const labelProps = this.axisComponentDimensions().largestTickDimensions;\n\n if (tickValues) {\n return tickValues;\n }\n labelDim = labelProps[orientation === BOTTOM || orientation === TOP ? 'width' : 'height'];\n\n return getNumberOfTicks(availableSpace, labelDim, axis, this);\n }\n\n getMinTickDifference () {\n return getSmallestDiff(this.renderConfig().tickValues);\n }\n\n /**\n * Sets a fixed baseline for the first ticks so that they can render effectively within\n * the given area\n *\n * @param {*} tickText\n * @param {*} config\n * @param {*} labelManager\n */\n setFixedBaseline (tickText) {\n const {\n orientation\n } = this.config();\n const {\n labels\n } = this.renderConfig();\n\n const {\n rotation\n } = labels;\n const axis = this.axis();\n const ticks = axis.tickValues();\n const smartTicks = this.smartTicks();\n\n if (smartTicks && smartTicks.length) {\n const { width, height } = this.smartTicks()[0];\n\n axis.tickTransform((d) => {\n if (d === ticks[0]) {\n if ((orientation === LEFT || orientation === RIGHT)) {\n return `translate(0, -${(height) / 3}px)`;\n }\n\n if ((orientation === TOP || orientation === BOTTOM) && !rotation) {\n return `translate(${width / 2}px, ${0}px)`;\n }\n } return '';\n });\n }\n return tickText;\n }\n\n}\n","import SimpleAxis from './simple-axis';\nimport { BAND } from '../enums/scale-type';\nimport { calculateBandSpace, setOffset, getRotatedSpaces } from './helper';\n\nexport default class BandAxis extends SimpleAxis {\n /**\n *\n *\n * @static\n *\n * @memberof BandAxis\n */\n static type () {\n return BAND;\n }\n\n /**\n *\n *\n *\n * @memberof BandAxis\n */\n setTickConfig () {\n let smartTicks = '';\n let smartlabel;\n const domain = this.domain();\n const { labelManager } = this._dependencies;\n const { padding } = this.config();\n const { labels, tickValues } = this.renderConfig();\n const { height: availHeight, width: availWidth, noWrap } = this.maxTickSpaces();\n const { width, height } = getRotatedSpaces(labels.rotation, availWidth, availHeight);\n\n tickValues && this.axis().tickValues(tickValues);\n smartTicks = tickValues || domain;\n\n // set the style on the shared label manager instance\n labelManager.setStyle(this._tickLabelStyle);\n\n // Update padding between plots\n if (typeof padding === 'number') {\n const paddingNormalized = Math.min(1, Math.max(0, padding));\n this.scale().padding(paddingNormalized);\n }\n\n if (domain && domain.length) {\n const values = tickValues || domain;\n const tickFormatter = this._tickFormatter(values);\n smartTicks = values.map((d, i) => {\n labelManager.useEllipsesOnOverflow(true);\n\n smartlabel = labelManager.getSmartText(tickFormatter(d, i), width, height, noWrap);\n return labelManager.constructor.textToLines(smartlabel);\n });\n }\n this.smartTicks(smartTicks);\n return this;\n }\n\n /**\n * Gets the space occupied by the axis\n *\n * @return {Object} object with details about size of the axis.\n * @memberof SimpleAxis\n */\n getLogicalSpace () {\n if (!this.logicalSpace()) {\n this.logicalSpace(calculateBandSpace(this));\n }\n setOffset(this);\n\n return this.logicalSpace();\n }\n\n /**\n *\n *\n * @memberof BandAxis\n */\n getTickValues () {\n return this.axis().scale().domain();\n }\n\n formatTickValue (val) {\n return this.valueParser()(val);\n }\n\n sanitizeTickFormatter (value) {\n const { tickFormat } = value;\n\n if (tickFormat) {\n return ticks => (val, i) => tickFormat(this.formatTickValue(val), val, i, ticks);\n }\n return () => val => this.formatTickValue(val);\n }\n\n /**\n *\n *\n *\n * @memberof BandAxis\n */\n getUnitWidth () {\n return this.scale().bandwidth();\n }\n\n /**\n *\n *\n *\n * @memberof SimpleAxis\n */\n getTickSize () {\n const {\n showInnerTicks,\n showOuterTicks\n } = this.renderConfig();\n const axis = this.axis();\n\n axis.tickSizeInner(showInnerTicks ? 6 : 0);\n axis.tickSizeOuter(showOuterTicks ? 6 : 0);\n return axis.tickSize();\n }\n\n invertExtent (v1, v2) {\n return this.scale().invertExtent(v1, v2);\n }\n\n /**\n * Gets the nearest range value from the given range values.\n * @param {number} v1 Start range value\n * @param {number} v2 End range value\n * @return {Array} range values\n */\n getNearestRange (v1, v2) {\n const scale = this.scale();\n const range = scale.range();\n const reverse = range[0] > range[1];\n\n const extent = this.invertExtent(v1, v2);\n const p1 = scale(reverse ? extent[extent.length - 1] : extent[0]);\n const p2 = scale(reverse ? extent[0] : extent[extent.length - 1]) + scale.bandwidth();\n return [p1, p2];\n }\n}\n","import { getSmallestDiff } from 'muze-utils';\nimport SimpleAxis from './simple-axis';\nimport { TIME } from '../enums/scale-type';\nimport { calculateBandSpace, getRotatedSpaces, getValidDomain, setContinousAxisDomain, setOffset,\n resetTickInterval } from './helper';\nimport { applyTickSkipping } from './space-setter';\n\n/**\n *\n *\n * @export\n * @class TimeAxis\n * @extends {SimpleAxis}\n */\nexport default class TimeAxis extends SimpleAxis {\n\n constructor (...params) {\n super(...params);\n this._minDiff = Infinity;\n }\n\n /**\n *\n *\n * @param {*} range\n *\n * @memberof TimeAxis\n */\n createScale (range) {\n let scale = super.createScale(range);\n\n scale = scale.nice();\n return scale;\n }\n\n /**\n *\n *\n * @static\n *\n * @memberof TimeAxis\n */\n static type () {\n return TIME;\n }\n\n formatTickValue (val) {\n return this.scale().tickFormat()(val);\n }\n\n sanitizeTickFormatter (value) {\n const { tickFormat } = value;\n\n if (tickFormat) {\n return (ticks) => {\n const rawTicks = ticks.map(t => t.getTime());\n return (val, i) => tickFormat(this.formatTickValue(val), val.getTime(), i, rawTicks);\n };\n }\n return () => val => this.formatTickValue(val);\n }\n\n /**\n *\n *\n *\n * @memberof SimpleAxis\n */\n getTickSize () {\n const {\n showInnerTicks,\n showOuterTicks\n } = this.renderConfig();\n const axis = this.axis();\n axis.tickSizeInner(showInnerTicks === false ? 0 : 6);\n axis.tickSizeOuter(showOuterTicks === false ? 0 : 6);\n return super.getTickSize();\n }\n\n /**\n *\n *\n *\n * @memberof TimeAxis\n */\n getTickValues () {\n return this.renderConfig().tickValues || this.scale().ticks();\n }\n\n /**\n *\n *\n * @param {*} diff\n *\n * @memberof TimeAxis\n */\n minDiff (diff) {\n this._minDiff = Math.min(this._minDiff, diff);\n return this;\n }\n\n applyTickSkipping () {\n applyTickSkipping(this);\n }\n\n /**\n *\n *\n * @param {*} d\n *\n * @memberof SimpleAxis\n */\n domain (...domain) {\n if (domain.length) {\n const domainValue = getValidDomain(this, domain[0]);\n setContinousAxisDomain(this, domainValue);\n this.setAxisComponentDimensions();\n this.logicalSpace(null);\n\n resetTickInterval(this, domainValue);\n return this;\n }\n return this._domain;\n }\n\n /**\n * Gets the space occupied by the axis\n *\n * @return {Object} object with details about size of the axis.\n * @memberof SimpleAxis\n */\n getLogicalSpace () {\n if (!this.logicalSpace()) {\n this.logicalSpace(calculateBandSpace(this));\n }\n setOffset(this);\n\n return this.logicalSpace();\n }\n\n getMinTickDifference () {\n return getSmallestDiff(this.config().tickValues);\n }\n\n /**\n * This method is used to set the space availiable to render\n * the SimpleCell.\n *\n * @param {number} width The width of SimpleCell.\n * @param {number} height The height of SimpleCell.\n * @memberof AxisCell\n */\n setAvailableSpace (...params) {\n super.setAvailableSpace(...params);\n this.getTickSize();\n return this;\n }\n\n /**\n *\n *\n * @returns\n * @memberof BandAxis\n */\n setTickConfig () {\n let smartTicks;\n let smartlabel;\n\n const { labels, tickValues } = this.renderConfig();\n const { height: availHeight, width: availWidth, noWrap } = this.maxTickSpaces();\n const { labelManager } = this._dependencies;\n const domain = this.getTickValues();\n\n tickValues && this.axis().tickValues(tickValues);\n\n const { width, height } = getRotatedSpaces(labels.rotation, availWidth, availHeight);\n\n smartTicks = tickValues || domain;\n\n // set the style on the shared label manager instance\n labelManager.setStyle(this._tickLabelStyle);\n\n if (domain && domain.length) {\n const values = tickValues || domain;\n const tickFormatter = this._tickFormatter(values);\n smartTicks = values.map((d, i) => {\n labelManager.useEllipsesOnOverflow(true);\n\n smartlabel = labelManager.getSmartText(tickFormatter(d, i), width, height, noWrap);\n return labelManager.constructor.textToLines(smartlabel);\n });\n }\n\n this.smartTicks(smartTicks);\n return this;\n }\n}\n","export const x11Colors = {\n Pink: { hex: 'ffc0cb', rgb: '255,192,203' },\n LightPink: { hex: 'ffb6c1', rgb: '255,182,193' },\n HotPink: { hex: 'ff69b4', rgb: '255,105,180' },\n DeepPink: { hex: 'ff1493', rgb: '255,20,147' },\n PaleVioletRed: { hex: 'db7093', rgb: '219,112,147' },\n MediumVioletRed: { hex: 'c71585', rgb: '199,21,133' },\n LightSalmon: { hex: 'ffa07a', rgb: '255,160,122' },\n Salmon: { hex: 'fa8072', rgb: '250,128,114' },\n DarkSalmon: { hex: 'e9967a', rgb: '233,150,122' },\n LightCoral: { hex: 'f08080', rgb: '240,128,128' },\n IndianRed: { hex: 'cd5c5c', rgb: '205,92,92' },\n Crimson: { hex: 'dc143c', rgb: '220,20,60' },\n FireBrick: { hex: 'b22222', rgb: '178,34,34' },\n DarkRed: { hex: '8b0000', rgb: '139,0,0' },\n Red: { hex: 'ff0000', rgb: '255,0,0' },\n OrangeRed: { hex: 'ff4500', rgb: '255,69,0' },\n Tomato: { hex: 'ff6347', rgb: '255,99,71' },\n Coral: { hex: 'ff7f50', rgb: '255,127,80' },\n DarkOrange: { hex: 'ff8c00', rgb: '255,140,0' },\n Orange: { hex: 'ffa500', rgb: '255,165,0' },\n Gold: { hex: 'ffd700', rgb: '255,215,0' },\n Yellow: { hex: 'ffff00', rgb: '255,255,0' },\n LightYellow: { hex: 'ffffe0', rgb: '255,255,224' },\n LemonChiffon: { hex: 'fffacd', rgb: '255,250,205' },\n LightGoldenrodYellow: { hex: 'fafad2', rgb: '250,250,210' },\n PapayaWhip: { hex: 'ffefd5', rgb: '255,239,213' },\n Moccasin: { hex: 'ffe4b5', rgb: '255,228,181' },\n PeachPuff: { hex: 'ffdab9', rgb: '255,218,185' },\n PaleGoldenrod: { hex: 'eee8aa', rgb: '238,232,170' },\n Khaki: { hex: 'f0e68c', rgb: '240,230,140' },\n DarkKhaki: { hex: 'bdb76b', rgb: '189,183,107' },\n Cornsilk: { hex: 'fff8dc', rgb: '255,248,220' },\n BlanchedAlmond: { hex: 'ffebcd', rgb: '255,235,205' },\n Bisque: { hex: 'ffe4c4', rgb: '255,228,196' },\n NavajoWhite: { hex: 'ffdead', rgb: '255,222,173' },\n Wheat: { hex: 'f5deb3', rgb: '245,222,179' },\n BurlyWood: { hex: 'deb887', rgb: '222,184,135' },\n Tan: { hex: 'd2b48c', rgb: '210,180,140' },\n RosyBrown: { hex: 'bc8f8f', rgb: '188,143,143' },\n SandyBrown: { hex: 'f4a460', rgb: '244,164,96' },\n Goldenrod: { hex: 'daa520', rgb: '218,165,32' },\n DarkGoldenrod: { hex: 'b8860b', rgb: '184,134,11' },\n Peru: { hex: 'cd853f', rgb: '205,133,63' },\n Chocolate: { hex: 'd2691e', rgb: '210,105,30' },\n SaddleBrown: { hex: '8b4513', rgb: '139,69,19' },\n Sienna: { hex: 'a0522d', rgb: '160,82,45' },\n Brown: { hex: 'a52a2a', rgb: '165,42,42' },\n Maroon: { hex: '800000', rgb: '128,0,0' },\n DarkOliveGreen: { hex: '556b2f', rgb: '85,107,47' },\n Olive: { hex: '808000', rgb: '128,128,0' },\n OliveDrab: { hex: '6b8e23', rgb: '107,142,35' },\n YellowGreen: { hex: '9acd32', rgb: '154,205,50' },\n LimeGreen: { hex: '32cd32', rgb: '50,205,50' },\n Lime: { hex: '00ff00', rgb: '0,255,0' },\n LawnGreen: { hex: '7cfc00', rgb: '124,252,0' },\n Chartreuse: { hex: '7fff00', rgb: '127,255,0' },\n GreenYellow: { hex: 'adff2f', rgb: '173,255,47' },\n SpringGreen: { hex: '00ff7f', rgb: '0,255,127' },\n MediumSpringGreen: { hex: '00fa9a', rgb: '0,250,154' },\n LightGreen: { hex: '90ee90', rgb: '144,238,144' },\n PaleGreen: { hex: '98fb98', rgb: '152,251,152' },\n DarkSeaGreen: { hex: '8fbc8f', rgb: '143,188,143' },\n MediumSeaGreen: { hex: '3cb371', rgb: '60,179,113' },\n SeaGreen: { hex: '2e8b57', rgb: '46,139,87' },\n ForestGreen: { hex: '228b22', rgb: '34,139,34' },\n Green: { hex: '008000', rgb: '0,128,0' },\n DarkGreen: { hex: '006400', rgb: '0,100,0' },\n MediumAquamarine: { hex: '66cdaa', rgb: '102,205,170' },\n Aqua: { hex: '00ffff', rgb: '0,255,255' },\n Cyan: { hex: '00ffff', rgb: '0,255,255' },\n LightCyan: { hex: 'e0ffff', rgb: '224,255,255' },\n PaleTurquoise: { hex: 'afeeee', rgb: '175,238,238' },\n Aquamarine: { hex: '7fffd4', rgb: '127,255,212' },\n Turquoise: { hex: '40e0d0', rgb: '64,224,208' },\n MediumTurquoise: { hex: '48d1cc', rgb: '72,209,204' },\n DarkTurquoise: { hex: '00ced1', rgb: '0,206,209' },\n LightSeaGreen: { hex: '20b2aa', rgb: '32,178,170' },\n CadetBlue: { hex: '5f9ea0', rgb: '95,158,160' },\n DarkCyan: { hex: '008b8b', rgb: '0,139,139' },\n Teal: { hex: '008080', rgb: '0,128,128' },\n LightSteelBlue: { hex: 'b0c4de', rgb: '176,196,222' },\n PowderBlue: { hex: 'b0e0e6', rgb: '176,224,230' },\n LightBlue: { hex: 'add8e6', rgb: '173,216,230' },\n SkyBlue: { hex: '87ceeb', rgb: '135,206,235' },\n LightSkyBlue: { hex: '87cefa', rgb: '135,206,250' },\n DeepSkyBlue: { hex: '00bfff', rgb: '0,191,255' },\n DodgerBlue: { hex: '1e90ff', rgb: '30,144,255' },\n CornflowerBlue: { hex: '6495ed', rgb: '100,149,237' },\n SteelBlue: { hex: '4682b4', rgb: '70,130,180' },\n RoyalBlue: { hex: '4169e1', rgb: '65,105,225' },\n Blue: { hex: '0000ff', rgb: '0,0,255' },\n MediumBlue: { hex: '0000cd', rgb: '0,0,205' },\n DarkBlue: { hex: '00008b', rgb: '0,0,139' },\n Navy: { hex: '000080', rgb: '0,0,128' },\n MidnightBlue: { hex: '191970', rgb: '25,25,112' },\n Lavender: { hex: 'e6e6fa', rgb: '230,230,250' },\n Thistle: { hex: 'd8bfd8', rgb: '216,191,216' },\n Plum: { hex: 'dda0dd', rgb: '221,160,221' },\n Violet: { hex: 'ee82ee', rgb: '238,130,238' },\n Orchid: { hex: 'da70d6', rgb: '218,112,214' },\n Fuchsia: { hex: 'ff00ff', rgb: '255,0,255' },\n Magenta: { hex: 'ff00ff', rgb: '255,0,255' },\n MediumOrchid: { hex: 'ba55d3', rgb: '186,85,211' },\n MediumPurple: { hex: '9370db', rgb: '147,112,219' },\n BlueViolet: { hex: '8a2be2', rgb: '138,43,226' },\n DarkViolet: { hex: '9400d3', rgb: '148,0,211' },\n DarkOrchid: { hex: '9932cc', rgb: '153,50,204' },\n DarkMagenta: { hex: '8b008b', rgb: '139,0,139' },\n Purple: { hex: '800080', rgb: '128,0,128' },\n Indigo: { hex: '4b0082', rgb: '75,0,130' },\n DarkSlateBlue: { hex: '483d8b', rgb: '72,61,139' },\n SlateBlue: { hex: '6a5acd', rgb: '106,90,205' },\n MediumSlateBlue: { hex: '7b68ee', rgb: '123,104,238' },\n White: { hex: 'ffffff', rgb: '255,255,255' },\n Snow: { hex: 'fffafa', rgb: '255,250,250' },\n Honeydew: { hex: 'f0fff0', rgb: '240,255,240' },\n MintCream: { hex: 'f5fffa', rgb: '245,255,250' },\n Azure: { hex: 'f0ffff', rgb: '240,255,255' },\n AliceBlue: { hex: 'f0f8ff', rgb: '240,248,255' },\n GhostWhite: { hex: 'f8f8ff', rgb: '248,248,255' },\n WhiteSmoke: { hex: 'f5f5f5', rgb: '245,245,245' },\n Seashell: { hex: 'fff5ee', rgb: '255,245,238' },\n Beige: { hex: 'f5f5dc', rgb: '245,245,220' },\n OldLace: { hex: 'fdf5e6', rgb: '253,245,230' },\n FloralWhite: { hex: 'fffaf0', rgb: '255,250,240' },\n Ivory: { hex: 'fffff0', rgb: '255,255,240' },\n AntiqueWhite: { hex: 'faebd7', rgb: '250,235,215' },\n Linen: { hex: 'faf0e6', rgb: '250,240,230' },\n LavenderBlush: { hex: 'fff0f5', rgb: '255,240,245' },\n MistyRose: { hex: 'ffe4e1', rgb: '255,228,225' },\n Gainsboro: { hex: 'dcdcdc', rgb: '220,220,220' },\n LightGray: { hex: 'd3d3d3', rgb: '211,211,211' },\n Silver: { hex: 'c0c0c0', rgb: '192,192,192' },\n DarkGrey: { hex: 'a9a9a9', rgb: '169,169,169' },\n Grey: { hex: '808080', rgb: '128,128,128' },\n DimGrey: { hex: '696969', rgb: '105,105,105' },\n LightSlateGrey: { hex: '778899', rgb: '119,136,153' },\n SlateGrey: { hex: '708090', rgb: '112,128,144' },\n DarkSlateGrey: { hex: '2f4f4f', rgb: '47,79,79' },\n Black: { hex: '000000', rgb: '0,0,0' }\n};\n","import {\n LINEAR\n} from '../enums/constants';\n/**\n * Set of default colors\n */\nexport const palette = [\n '#086bb6',\n '#f37d45',\n '#f5ce02',\n '#67bda0',\n '#c54e4e',\n '#ae70af'\n];\n\nexport const DEFAULT_GRADIENT_COLOR = '#eaeaea';\n\nexport const DEFAULT_CONFIG = {\n range: palette,\n value: palette[0],\n step: false,\n stops: 5,\n type: LINEAR\n};\n","import { mergeRecursive, detectColor, hexToHsv, rgbToHsv } from 'muze-utils';\nimport { x11Colors } from './color-maps';\nimport { palette, DEFAULT_GRADIENT_COLOR } from './defaults';\nimport { LINEAR, RGB, HEX, HSL, HSLA } from '../enums/constants';\n\nexport const getHslString = hslArr => `hsla(${hslArr[0] * 360},${hslArr[1] * 100}%,${hslArr[2] * 100}%,\\\n${hslArr[3] || 1})`;\n\nexport const convertToXllString = baseString => (baseString.split(' ') || [])\n .reduce((x, e) => `${x}${e.charAt(0).toUpperCase()}${e.slice(1)}`, '');\n\nexport const getActualHslColor = (e, paletteColor) => {\n let color = '';\n if (typeof e === 'string') {\n e = e.replace(/ /g, '');\n e = e.toLowerCase();\n if (detectColor(e) === HSL || detectColor(e) === HSLA) {\n color = e.match(/(\\d+(\\.\\d+)?)/g);\n color = [color[0] / 360, color[1] / 100, color[2] / 100, color[3] || 1];\n } else if (detectColor(e) === HEX) {\n color = hexToHsv(e);\n } else if (detectColor(e) === RGB) {\n const col = e.substring(e.indexOf('(') + 1, e.lastIndexOf(')')).split(/,\\s*/);\n color = rgbToHsv(...col);\n } else if (x11Colors[convertToXllString(e)]) {\n color = rgbToHsv(...x11Colors[convertToXllString(e)].rgb.split(','));\n }\n } else if (!(e instanceof Array)) {\n color = rgbToHsv(paletteColor);\n } else {\n color = e;\n }\n return color;\n};\n\nexport const PROPS = {\n config: {\n sanitization: (context, config) => {\n const defCon = mergeRecursive({}, context.constructor.defaultConfig());\n if (config.type === LINEAR) {\n config.range = config.range || [defCon.range[0]];\n config.range = config.range.length > 1 ? config.range : [DEFAULT_GRADIENT_COLOR, ...config.range];\n }\n const oldConfig = mergeRecursive(defCon, context.config());\n const newConfig = mergeRecursive(oldConfig, config);\n\n if (newConfig.range instanceof Array) {\n newConfig.range = newConfig.range.map((e, i) => getActualHslColor(e, palette[i]));\n newConfig.stops = config.stops || newConfig.range.length;\n }\n newConfig.value = getActualHslColor(newConfig.value, newConfig.value);\n return newConfig;\n }\n },\n domain: {},\n scale: {},\n uniqueValues: {}\n};\n","import { InvalidAwareTypes, getObjProp } from 'muze-utils';\n\nexport const treatNullMeasures = (domainVal, scaledVal, minDomainScaledVal) => {\n if (domainVal instanceof InvalidAwareTypes) {\n return minDomainScaledVal;\n }\n return scaledVal;\n};\n\nexport const resolveAxisConfig = (propVal, defaultVal, context) => {\n const constructor = getObjProp(propVal, 'constructor');\n switch (constructor) {\n case Function:\n return propVal(defaultVal, context);\n case Array:\n return propVal;\n default:\n return defaultVal;\n }\n};\n","import { numberInterpolator, piecewiseInterpolator, hslInterpolator, sanitizeDomainWhenEqual } from 'muze-utils';\nimport { CONTINOUS, DISCRETE } from '../enums/constants';\nimport { LINEAR, SEQUENTIAL, ORDINAL, QUANTILE } from '../enums/scale-type';\nimport { getHslString } from './props';\nimport { treatNullMeasures } from '../helper';\n\nconst getStops = (domain, stops) => {\n let newStops = [];\n\n if (stops instanceof Array) {\n newStops = stops.slice().sort();\n newStops = [...new Set([domain[0], ...stops, domain[1]])].sort();\n } else {\n const interpolator = numberInterpolator()(...domain);\n for (let i = 0; i <= stops; i++) {\n newStops[i] = interpolator(i / stops);\n }\n }\n\n if (newStops[0] < domain[0]) {\n newStops.shift();\n }\n return { domain, newStops };\n};\n\nconst rangeStops = (newStopsLength, range) => {\n let newRange = [];\n const maxRangeLength = Math.min(range.length, 18);\n\n if (newStopsLength > maxRangeLength) {\n const interpolator = piecewiseInterpolator()(hslInterpolator(), range.map(e => getHslString(e)));\n for (let i = 0; i < newStopsLength; i++) {\n newRange[i] = interpolator(i / (newStopsLength - 1));\n }\n } else {\n newRange = range.slice(0, newStopsLength);\n }\n return { newRange };\n};\n\n/**\n*\n*\n* @param {*} domain\n*\n*/\nconst indexedDomain = (domain) => {\n const uniqueVals = domain;\n const retDomain = domain.map((d, i) => (i) / (domain.length - 1));\n return { domain: retDomain, uniqueVals, scaleDomain: [0, 1] };\n};\n\n/**\n *\n *\n * @param {*} domain\n *\n */\nconst indexedDomainMeasure = (domain, stops, range) => {\n const uniqueVals = domain;\n return { domain, uniqueVals, scaleDomain: [0, 1], range };\n};\n\n/**\n *\n *\n * @param {*} domain\n *\n */\nconst normalDomain = (domain, stops, range) => {\n const uniqueVals = domain;\n return { uniqueVals, domain, nice: true, range };\n};\n\n/**\n *\n *\n * @param {*} domain\n * @param {*} stops\n *\n */\nconst steppedDomain = (domain, stops, range) => {\n const { domain: uniqueVals, newStops } = getStops(domain, stops);\n const { newRange } = rangeStops(newStops.length - 1, range);\n\n return { uniqueVals, domain: newStops, nice: true, range: newRange };\n};\n\nconst continousSteppedDomain = (domain, stops, range) => {\n const { domain: uniqueVals, newStops } = getStops(sanitizeDomainWhenEqual(domain), range.length - 1);\n const hslRange = range.map(e => getHslString(e));\n return { uniqueVals, domain: newStops, nice: true, range: hslRange };\n};\n\n/**\n *\n *\n * @param {*} domainValue\n * @param {*} scale\n * @param {*} domain\n * @param {*} uniqueVals\n *\n */\nconst uniqueRange = (domainValue, scale, domain, uniqueVals) => {\n const index = uniqueVals.indexOf(domainValue);\n const numVal = domain[index];\n return scale(numVal);\n};\n\n/**\n *\n *\n * @param {*} domainValue\n * @param {*} scale\n * @param {*} domain\n *\n */\nconst indexedRange = (domainValue, scale, domain) => {\n const numVal = (domainValue - domain[0]) / (domain[domain.length - 1] - domain[0]);\n\n return treatNullMeasures(domainValue, scale(numVal), scale(0));\n};\n\n/**\n *\n *\n * @param {*} domainValue\n * @param {*} scale\n */\nconst normalRange = (domainValue, scale, domain) => treatNullMeasures(domainValue, scale(domainValue),\n scale(domain[0]));\n\n/**\n *\n *\n * @param {*} stops\n */\nconst strategies = () => ({\n [`${CONTINOUS}-${CONTINOUS}-${SEQUENTIAL}`]: {\n scale: SEQUENTIAL,\n domainRange: () => indexedDomainMeasure,\n value: () => indexedRange\n },\n [`${CONTINOUS}-${DISCRETE}-${SEQUENTIAL}`]: {\n scale: SEQUENTIAL,\n domainRange: () => indexedDomainMeasure,\n value: () => indexedRange\n },\n [`${DISCRETE}-${DISCRETE}-${SEQUENTIAL}`]: {\n scale: SEQUENTIAL,\n domainRange: () => indexedDomain,\n value: () => uniqueRange\n },\n [`${DISCRETE}-${DISCRETE}-${ORDINAL}`]: {\n scale: ORDINAL,\n domainRange: () => normalDomain,\n value: () => normalRange\n },\n [`${CONTINOUS}-${CONTINOUS}-${ORDINAL}`]: {\n scale: LINEAR,\n domainRange: () => continousSteppedDomain,\n value: () => normalRange\n },\n [`${CONTINOUS}-${DISCRETE}-${ORDINAL}`]: {\n scale: QUANTILE,\n domainRange: () => steppedDomain,\n value: () => normalRange\n\n }\n});\n\n/**\n *\n *\n * @param {*} domainType\n * @param {*} rangeType\n * @param {*} schemeType\n * @param {*} stops\n */\nexport const strategyGetter = (domainType, rangeType, schemeType) =>\n strategies()[`${domainType}-${rangeType}-${schemeType || ''}`];\n","/**\n * @module Axis\n * This file declares a class that is used to render an axis to add meaning to\n * plots.\n */\nimport { getUniqueId, generateGetterSetters, rgbToHsv } from 'muze-utils';\nimport { createScale, getScheme, getSchemeType } from '../scale-creator';\nimport { CONTINOUS, DISCRETE, COLOR } from '../enums/constants';\nimport { strategyGetter } from './color-strategy';\nimport { DEFAULT_CONFIG } from './defaults';\nimport { PROPS, getHslString, getActualHslColor } from './props';\n\n/**\n* This class is used to instantiate a SimpleAxis.\n* @class SimpleAxis\n*/\nexport default class ColorAxis {\n\n /**\n * Creates an instance of SimpleAxis.\n * @param {Object} config input parameters.\n * @param {Object | undefined} params.range Type of color range.\n * @param {string} params.name the label to show on axis.\n * @param {string} params.type The type of scale to handle.\n * @memberof ColorAxis\n */\n constructor (config) {\n generateGetterSetters(this, PROPS);\n this.config(config);\n\n this._domainType = this._config.type === 'linear' ? CONTINOUS : DISCRETE;\n this._rangeType = (this._config.type === 'linear' && !this._config.step) ? CONTINOUS : DISCRETE;\n\n this._schemeType = getSchemeType(this._config.range);\n\n this._colorStrategy = this.setColorStrategy(this._domainType, this._rangeType, this._schemeType);\n this._scale = this.createScale(this._colorStrategy);\n\n this._id = getUniqueId();\n\n this.updateDomain(config.domain);\n }\n\n /**\n *\n *\n * @static\n *\n * @memberof ColorAxis\n */\n static defaultConfig () {\n return DEFAULT_CONFIG;\n }\n\n /**\n *\n *\n * @static\n *\n * @memberof ColorAxis\n */\n static type () {\n return COLOR;\n }\n\n /**\n *\n *\n * @param {*} colorStrategy\n *\n * @memberof ColorAxis\n */\n createScale (colorStrategy) {\n const { range } = this.config();\n if (range && typeof (range) === 'string') {\n return getScheme(range);\n }\n return createScale({\n type: colorStrategy.scale,\n range\n });\n }\n\n /**\n *\n *\n * @param {*} domainType\n * @param {*} rangeType\n * @param {*} schemeType\n *\n * @memberof ColorAxis\n */\n setColorStrategy (domainType, rangeType, schemeType) {\n return strategyGetter(domainType, rangeType, schemeType);\n }\n\n /**\n *\n *\n * @param {*} domainVal\n *\n * @memberof ColorAxis\n */\n getHslString (hslColorArray) {\n return getHslString(hslColorArray);\n }\n /**\n *\n *\n * @param {*} domainVal\n *\n * @memberof ColorAxis\n */\n getColor (domainVal) {\n return this.getHslString(this.getRawColor(domainVal));\n }\n /**\n *\n *\n * @param {*} domainVal\n *\n * @memberof ColorAxis\n */\n getRawColor (domainVal) {\n if (this.domain() && domainVal !== undefined) {\n const scale = this.scale();\n const range = scale.range ? scale.range() : null;\n const color = this._colorStrategy.value(range)(domainVal, scale, this.domain(), this.uniqueValues());\n if (color) {\n if (typeof color === 'string') {\n const col = color.substring(color.indexOf('(') + 1, color.lastIndexOf(')')).split(/,\\s*/);\n return rgbToHsv(...col);\n }\n return [...color];\n }\n }\n return [...this.config().value];\n }\n\n /**\n *\n *\n * @param {*} [domain=[]]\n *\n * @memberof ColorAxis\n */\n updateDomain (domain = []) {\n if (domain.length) {\n const scale = this.scale();\n const range = scale.range ? scale.range() : null;\n const domainRangeFn = this._colorStrategy.domainRange();\n const scaleInfo = domainRangeFn(domain, this.config().stops, range);\n\n this.domain(scaleInfo.domain);\n scaleInfo.range && this.scale().range(scaleInfo.range);\n this.uniqueValues(scaleInfo.uniqueVals);\n this.scale().domain(scaleInfo.scaleDomain || this.domain());\n }\n return this;\n }\n\n /**\n * This method returns an object that can be used to\n * reconstruct this instance.\n *\n * @return {Object} the serializable props of axis\n * @memberof ShapeAxis\n */\n serialize () {\n return {\n type: this.constructor.type(),\n scale: this.scale(),\n domain: this.domain(),\n config: this.config()\n };\n }\n\n transformColor (color, transformationArr) {\n const h = color[0] * 360;\n const s = color[1] * 100;\n const l = color[2] * 100;\n const a = color[3] || 1;\n const newH = h + transformationArr[0];\n const newS = s + transformationArr[1];\n const newL = l + transformationArr[2];\n const newA = a + transformationArr[3] || 0;\n\n return { color: `hsla(${newH},${newS}%,${newL}%,${newA})`, hsla: [newH / 360, newS / 100, newL / 100, newA] };\n }\n\n /**\n * Returns the id of the axis.\n * @return {string} Unique identifier of the axis.\n */\n id () {\n return this._id;\n }\n\n getHslArray (color) {\n return getActualHslColor(color);\n }\n\n}\n","export const DEFAULT_CONFIG = {\n value: 36,\n range: [36, 1000]\n};\n","import { numberInterpolator, piecewiseInterpolator } from 'muze-utils';\nimport { CONTINOUS, DISCRETE } from '../enums/constants';\nimport { LINEAR, THRESHOLD } from '../enums/scale-type';\nimport { treatNullMeasures } from '../helper';\n\n/**\n *\n *\n * @param {*} domain\n *\n */\nconst indexedDomain = (domain) => {\n const uniqueVals = domain;\n const retDomain = domain.map((d, i) => (i) / (domain.length - 1));\n return { domain: retDomain, uniqueVals, scaleDomain: [0, 1] };\n};\n\n/**\n *\n *\n * @param {*} domain\n *\n */\nconst normalDomain = (domain) => {\n const uniqueVals = domain;\n return { uniqueVals, domain };\n};\n\n/**\n *\n *\n * @param {*} domain\n * @param {*} intervals\n *\n */\nconst steppedDomain = (domain, intervals) => {\n let newIntervals = [];\n if (intervals instanceof Array) {\n newIntervals = intervals.slice().sort();\n } else {\n const interpolator = numberInterpolator()(...domain);\n for (let i = 0; i < intervals; i++) {\n newIntervals[i] = interpolator(i / (intervals - 1));\n }\n }\n if (newIntervals[0] < domain[0]) {\n newIntervals.shift();\n }\n const retDomain = newIntervals;\n return { uniqueVals: newIntervals, domain: retDomain, nice: true };\n};\n\n/**\n *\n *\n * @param {*} domainValue\n * @param {*} scale\n * @param {*} domain\n * @param {*} uniqueVals\n *\n */\nconst discreteRange = (domainValue, scale, domain) => {\n const numVal = (domainValue - domain[0]) / (domain[domain.length - 1] - domain[0]);\n const interpolator = numberInterpolator()(...scale.range());\n return treatNullMeasures(domainValue, interpolator(numVal), interpolator(domain[0]));\n};\n\n/**\n *\n *\n * @param {*} domainValue\n * @param {*} scale\n * @param {*} domain\n *\n */\nconst pieceWiseRange = (domainValue, scale, domain, uniqueVals) => {\n const index = uniqueVals.indexOf(domainValue);\n const numVal = domain[index];\n const fn = piecewiseInterpolator()(numberInterpolator(), [...scale.range()]);\n return fn(numVal);\n};\n\n/**\n *\n *\n * @param {*} domainValue\n * @param {*} scale\n */\nconst normalRange = (domainValue, scale, domain) =>\n treatNullMeasures(domainValue, scale(domainValue), scale(domain[0]));\n\n/**\n *\n *\n * @param {*} intervals\n */\nconst strategies = {\n [`${DISCRETE}-${CONTINOUS}`]: {\n scale: LINEAR,\n domain: indexedDomain,\n range: pieceWiseRange\n },\n [`${CONTINOUS}-${CONTINOUS}`]: {\n scale: LINEAR,\n domain: normalDomain,\n range: normalRange\n },\n [`${CONTINOUS}-${DISCRETE}`]: {\n scale: THRESHOLD,\n domain: steppedDomain,\n range: discreteRange\n }\n};\n\n/**\n *\n *\n * @param {*} domainType\n * @param {*} rangeType\n * @param {*} schemeType\n * @param {*} intervals\n */\nexport const strategyGetter = (domainType, rangeType) =>\n strategies[`${domainType}-${rangeType}`];\n","export const PROPS = {\n config: {},\n domain: {\n sanitization: (context, value) => {\n context.scale().domain(value);\n return value;\n }\n },\n range: {},\n scale: {},\n uniqueValues: {}\n};\n","/**\n * @module Axis\n * This file declares a class that is used to render an axis to add meaning to\n * plots.\n */\nimport { getUniqueId, generateGetterSetters } from 'muze-utils';\nimport { createScale } from '../scale-creator';\nimport { DEFAULT_CONFIG } from './defaults';\nimport { SIZE, CONTINOUS, DISCRETE } from '../enums/constants';\nimport { strategyGetter } from './size-strategy';\nimport { PROPS } from './props';\n\n/**\n* This class is used to instantiate a SimpleAxis.\n* @class SimpleAxis\n*/\nexport default class SizeAxis {\n\n /**\n * Creates an instance of SimpleAxis.\n * @param {Object} config input parameters.\n * @memberof SizeAxis\n */\n constructor (config) {\n generateGetterSetters(this, PROPS);\n\n this._id = getUniqueId();\n this._config = Object.assign({}, this.constructor.defaultConfig(), config);\n // @todo: Will use configuration override using scale decorator\n this._domainType = this._config.type === 'linear' ? CONTINOUS : DISCRETE;\n this._rangeType = CONTINOUS;\n\n this._sizeStrategy = this.setStrategy(this._domainType, this._rangeType);\n this._scale = this.createScale(this._sizeStrategy);\n this._range = this._config.range;\n\n this.updateDomain(config.domain);\n }\n\n /**\n *\n *\n * @param {*} domainType\n * @param {*} rangeType\n * @param {*} schemeType\n *\n * @memberof ColorAxis\n */\n setStrategy (domainType, rangeType) {\n return strategyGetter(domainType, rangeType);\n }\n\n /**\n *\n *\n *\n * @memberof SizeAxis\n */\n createScale (strategy) {\n const {\n range\n } = this.config();\n return createScale({\n type: strategy.scale,\n range\n });\n }\n\n /**\n *\n *\n * @static\n *\n * @memberof ColorAxis\n */\n static defaultConfig () {\n return DEFAULT_CONFIG;\n }\n\n /**\n *\n *\n * @static\n *\n * @memberof ColorAxis\n */\n static type () {\n return SIZE;\n }\n\n /**\n *\n *\n * @param {*} domainVal\n *\n * @memberof SizeAxis\n */\n getSize (domainVal = 0) {\n let sizeVal = 1;\n const {\n value\n } = this.config();\n const scale = this.scale();\n const domain = this.domain() || [1, 1];\n\n if (!scale || domain[0] === domain[1]) {\n sizeVal = value;\n } else {\n return this._sizeStrategy.range(domainVal, scale, this.domain(), this.uniqueValues());\n }\n return sizeVal;\n }\n\n /**\n * This method is used to assign a domain to the axis.\n *\n * @param {Array} domain the domain of the scale\n * @memberof SizeAxis\n */\n updateDomain (domain) {\n if (domain) {\n const domainFn = this._sizeStrategy.domain;\n\n const domainInfo = domainFn(domain, this.config().intervals);\n\n this.domain(domainInfo.domain);\n this.uniqueValues(domainInfo.uniqueVals);\n\n this.scale().domain(domainInfo.scaleDomain || this.domain());\n }\n return this;\n }\n\n /**\n * This method returns an object that can be used to\n * reconstruct this instance.\n *\n * @return {Object} the serializable props of axis\n * @memberof ShapeAxis\n */\n serialize () {\n return {\n type: this.constructor.type(),\n scale: this.scale(),\n domain: this.domain(),\n range: this.range(),\n config: this.config()\n };\n }\n\n /**\n * Returns the id of the axis.\n * @return {string} Unique identifier of the axis.\n */\n id () {\n return this._id;\n }\n}\n","export const DEFAULT_CONFIG = {\n generator: null,\n value: 'circle',\n range: ['circle', 'diamond', 'star', 'cross', 'square', 'wye', 'triangle']\n};\n","export const PROPS = {\n config: {},\n domain: {},\n scale: {},\n uniqueValues: {},\n generator: {}\n};\n\n","/**\n * @module Axis\n * This file declares a class that is used to render an axis to add meaning to\n * plots.\n */\nimport { getUniqueId, getSymbol, generateGetterSetters, mergeRecursive, InvalidAwareTypes } from 'muze-utils';\nimport { createScale } from '../scale-creator';\nimport { DEFAULT_CONFIG } from './defaults';\nimport { SHAPE } from '../enums/constants';\nimport { shapeGenerator } from './helper';\nimport { PROPS } from './props';\n\n/**\n* This class is used to instantiate a SimpleAxis.\n* @class SimpleAxis\n*/\nexport default class ShapeAxis {\n /**\n * Creates an instance of SimpleAxis.\n * @param {Object} params input parameters.\n * @param {Object | undefined} params.range Type of color scheme.\n * @memberof ShapeAxis\n */\n constructor (config) {\n generateGetterSetters(this, PROPS);\n\n this._id = getUniqueId();\n this._config = Object.assign({}, this.constructor.defaultConfig());\n this._config = mergeRecursive(this._config, config);\n\n this._scale = createScale({\n type: 'ordinal',\n range: this._config.range\n });\n this.updateDomain(config.domain);\n }\n\n /**\n *\n *\n * @static\n *\n * @memberof ColorAxis\n */\n static defaultConfig () {\n return DEFAULT_CONFIG;\n }\n\n /**\n *\n *\n * @static\n *\n * @memberof ColorAxis\n */\n static type () {\n return SHAPE;\n }\n\n /**\n *\n *\n * @param {*} value\n *\n * @memberof ShapeAxis\n */\n getShape (value) {\n if (!this.scale() || !this.domain() || !value || value instanceof InvalidAwareTypes) {\n return this.config().value;\n }\n\n if (this._generatedShapes) {\n return this._generatedShapes[value];\n }\n\n const shapeType = this.scale()(value);\n if (shapeType === 'string') {\n return getSymbol(shapeType);\n }\n\n return shapeType;\n }\n\n /**\n * This method is used to assign a domain to the axis.\n *\n * @param {Array} domain the domain of the scale\n * @memberof ShapeAxis\n */\n updateDomain (domain = []) {\n if (domain.length) {\n this.uniqueValues(domain);\n this.domain(domain);\n this.scale().domain(domain);\n\n if (this.config().generator) {\n this._generatedShapes = shapeGenerator(domain, this.config().generator);\n }\n }\n return this;\n }\n\n /**\n * This method returns an object that can be used to\n * reconstruct this instance.\n *\n * @return {Object} the serializable props of axis\n * @memberof ShapeAxis\n */\n serialize () {\n return {\n type: this.constructor.type(),\n scale: this.scale(),\n domain: this.domain(),\n range: this.config().range,\n config: this.config()\n };\n }\n\n /**\n * Returns the id of the axis.\n * @return {string} Unique identifier of the axis.\n */\n id () {\n return this._id;\n }\n}\n","/**\n *\n *\n * @param {*} domain\n * @param {*} generatorFn\n *\n */\nexport const shapeGenerator = (domain, generatorFn) => {\n const generatedShapes = {};\n domain.forEach((value) => {\n generatedShapes[value] = generatorFn(value);\n });\n return generatedShapes;\n};\n","import { mergeRecursive } from 'muze-utils';\n\nexport const PROPS = {\n config: {\n sanitization: (context, config) => mergeRecursive(context.config(), config),\n preset: (context, config) => {\n const { range, domain } = config;\n range && context.range(range);\n domain && context.domain(domain);\n }\n },\n domain: {},\n range: {}\n};\n","/**\n * @module Axis\n * This file declares a class that is used to render an axis to add meaning to\n * plots.\n */\nimport { getUniqueId, Symbols, mergeRecursive, generateGetterSetters } from 'muze-utils';\nimport { createScale } from '../scale-creator';\nimport { DEFAULT_ANGLE_DOMAIN } from '../enums/constants';\nimport { PROPS } from './props';\nimport { resolveAxisConfig } from '../helper';\n\nconst { pie } = Symbols;\n\nconst createAngleValues = (context) => {\n const angleData = context._angleFn(context._domain);\n angleData.forEach((v) => {\n v.startAngle -= Math.PI / 2;\n v.endAngle -= Math.PI / 2;\n });\n context._angleValues = angleData.reduce((values, d) => {\n const key = d.data;\n !values[key] && (values[key] = []);\n values[key].push(d);\n return values;\n }, {});\n};\n\n/**\n* This class is used to instantiate a AngleAxis.\n* @class AngleAxis\n*/\nexport default class AngleAxis {\n\n /**\n * Creates an instance of AngleAxis.\n * @param {Object} config input parameters.\n * @memberof AngleAxis\n */\n constructor (config = {}) {\n this._id = getUniqueId();\n generateGetterSetters(this, PROPS);\n this._config = mergeRecursive({}, this.constructor.defaultConfig());\n this.config(config);\n this._range = [0, 360];\n this._angleFn = pie()\n .value(d => (typeof d === 'string' ? 1 : d))\n .sortValues(null);\n this._angleValues = {};\n }\n\n static defaultConfig () {\n return {};\n }\n\n createScale (strategy) {\n const {\n range\n } = this.config();\n return createScale({\n type: strategy.scale,\n range\n });\n }\n\n getScaleValue (domainVal) {\n return this._angleValues[domainVal];\n }\n\n padAngle (angle) {\n this._angleFn = this._angleFn.padAngle(angle);\n }\n\n domain (...domainVal) {\n if (domainVal.length) {\n const { domain: customDomain } = this.config();\n const domain = domainVal[0].length ? domainVal[0] : DEFAULT_ANGLE_DOMAIN;\n this._domain = resolveAxisConfig(customDomain, domain, this);\n createAngleValues(this);\n return this;\n }\n return this._domain;\n }\n\n range (...range) {\n if (range.length) {\n const { range: customRange } = this.config();\n this._range = resolveAxisConfig(customRange, range[0], this);\n const domain = this.domain();\n const [startAngle, endAngle] = this._range;\n this._angleFn\n .startAngle((startAngle / 180) * Math.PI)\n .endAngle(Math.PI * endAngle / 180);\n if (domain && domain.length) {\n createAngleValues(this);\n }\n return this;\n }\n return this._range;\n }\n}\n","/**\n * This file exports constants that are used as enums in the\n * crosstab group implementation.\n */\n/**\n * Width of the crosstab.\n */\nexport const X = 'x';\n/**\n * Width of the crosstab.\n */\nexport const Y = 'y';\n/**\n * Width of the crosstab.\n */\nexport const WIDTH = 'width';\n\n/**\n * Height of the crosstab.\n */\nexport const HEIGHT = 'height';\n\n/**\n * Field referring to object storing measurement configuration.\n */\nexport const MEASUREMENT = 'measurement';\n\n/**\n * Field referring to object storing configuration properties.\n */\nexport const CONFIG = 'config';\n\n/**\n * Width of visual unit in crosstab.\n */\nexport const MIN_UNIT_WIDTH = 'minUnitWidth';\n\n/**\n * Height of visual unit.\n */\nexport const MIN_UNIT_HEIGHT = 'minUnitHeight';\n\n/**\n * Field to store the array of dimensions to facet by.\n */\nexport const DIMENSIONS = 'dimensions';\n\n/**\n * Field to store array of measures to use as x axis.\n */\nexport const MEASURES = 'measures';\n\n/**\n * Field to store the array of dimensions to facet by.\n */\nexport const DIMENSION = 'dimension';\n\n/**\n * Field to store array of measures to use as x axis.\n */\nexport const MEASURE = 'measure';\n\n/**\n * Flag to specify if model should be pivoted.\n */\nexport const PIVOT = 'pivot';\n\n/**\n * Flag to specify format\n */\nexport const FORMAT = 'format';\n\n/**\n * Mount point where the variable will be hosted\n */\nexport const MOUNT = 'mount';\n\n/**\n * Data update flag\n */\nexport const HAS_DATA_UPDATED = 'hasDataUpdated';\n\n/**\n * Field referring to object storing set of rows\n */\nexport const ROWS = 'rows';\n\n/**\n * Field referring to object storing set of columns\n */\nexport const COLUMNS = 'columns';\n\n/**\n * Field referring to object storing set of columns\n */\nexport const COL = 'col';\n\n/**\n * Field referring to object storing set of rows\n */\nexport const ROW = 'row';\n\n/**\n * Field referring to object storing set of columns\n */\nexport const COLUMN = 'column';\n\n/**\n * Field referring to object storing color field\n */\nexport const COLOR = 'color';\n\n/**\n * Field referring to object storing shape field\n */\nexport const SHAPE = 'shape';\n\n/**\n * Field referring to object storing size field\n */\nexport const SIZE = 'size';\n\n/**\n * Field referring to object storing detail field\n */\nexport const DETAIL = 'detail';\n\n/**\n * Field referring to object storing set of layers\n */\nexport const LAYERS = 'layers';\n\n/**\n * Field referring to object storing the transforms\n */\nexport const TRANSFORM = 'transform';\n\n/**\n * Field referring to object storing the transforms\n */\nexport const ORDINAL = 'ordinal';\n\n/**\n * Field referring to object storing the transforms\n */\nexport const LINEAR = 'linear';\n/**\n * Field referring to object storing the transforms\n */\nexport const LEFT = 'left';\n/**\n * Field referring to object storing the transforms\n */\nexport const RIGHT = 'right';\n/**\n * Field referring to object storing the transforms\n */\nexport const TOP = 'top';\n/**\n * Field referring to object storing the transforms\n */\nexport const BOTTOM = 'bottom';\n\n/**\n * Field referring to object storing the transforms\n */\nexport const RETINAL = 'retinal';\n/**\n * Field referring to object storing the transforms\n */\nexport const CELL = 'cell';\n/**\n * Field referring to object storing the transforms\n */\nexport const X_AXES = 'xAxes';\n/**\n * Field referring to object storing the transforms\n */\nexport const Y_AXES = 'yAxes';\n/**\n * Field referring to object storing the transforms\n */\nexport const ENTRY_CELLS = 'entryCell';\n/**\n * Field referring to object storing the transforms\n */\nexport const INITIALIZED = 'initialized';\n/**\n * Field referring to object storing the transforms\n */\nexport const EXIT_CELLS = 'exitCell';\n/**\n * Field referring to object storing the transforms\n */\nexport const AXIS = 'axis';\n/**\n * Field referring to object storing the transforms\n */\nexport const UNIT = 'unit';\n/**\n * Field referring to object storing the transforms\n */\nexport const UPDATED = 'updated';\n/**\n * Field referring to object storing the transforms\n */\nexport const BEFORE_UPDATE = 'beforeupdate';\n/**\n * Field referring to object storing the transforms\n */\nexport const VALUE_MATRIX = 'valueMatrix';\n/**\n * Field referring to object storing the transforms\n */\nexport const FACET_HEADERS = 'facet-headers';\n/**\n * Field referring to object storing the transforms\n */\nexport const RADIUS = 'radius';\n/**\n * Field referring to object storing the transforms\n */\nexport const ANGLE = 'angle';\n\nexport const ANGLE0 = 'angle0';\n/**\n * Field referring to object storing the transforms\n */\nexport const ARC = 'arc';\n/**\n * Field referring to object storing the transforms\n */\nexport const CATEGORICAL = 'categorical';\n/**\n * Field referring to object storing the transforms\n */\nexport const TEMPORAL = 'temporal';\n/**\n * Field referring to object storing the transforms\n */\nexport const BAR = 'bar';\n/**\n * Field referring to object storing the transforms\n */\nexport const LINE = 'line';\n/**\n * Field referring to object storing the transforms\n */\nexport const POINT = 'point';\n/**\n * Field referring to object storing the transforms\n */\nexport const PRIMARY = 'Primary';\n/**\n * Field referring to object storing the transforms\n */\nexport const SECONDARY = 'Secondary';\n/**\n * Field referring to object storing the transforms\n */\nexport const BOTH = 'both';\n/**\n * Field referring to object storing the transforms\n */\nexport const INTERACTION = 'interaction';\n/**\n * Field referring to object storing the transforms\n */\nexport const GRID_LINES = 'gridLines';\n/**\n * Field referring to object storing the transforms\n */\nexport const GRID_BANDS = 'gridBands';\n/**\n * Field referring to object storing the transforms\n */\nexport const HEADER = 'header';\n/**\n * Field referring to object storing the transforms\n */\nexport const FACET = 'facet';\n/**\n * Ordering type\n */\nexport const ASCENDING = 'asc';\n/**\n * Ordering type\n */\nexport const DESCENDING = 'desc';\n","/**\n * @module Axis\n * This file declares a class that is used to render an axis to add meaning to\n * plots.\n */\nimport { getUniqueId, mergeRecursive, generateGetterSetters, sanitizeDomainWhenEqual } from 'muze-utils';\nimport { createScale } from '../scale-creator';\nimport { LINEAR } from '../../../visual-group/src/enums/constants';\nimport { PROPS } from './props';\nimport { resolveAxisConfig } from '../helper';\n\nconst adjustDomain = (context) => {\n const minOuterRadius = context.config().minOuterRadius;\n const domain = context._domain;\n if (context._range.length) {\n const scale = context._scale;\n const value = scale.invert(minOuterRadius) - scale.invert(0);\n context._domain = [domain[0] - value, domain[1]];\n scale.domain(context._domain);\n }\n};\n\n/**\n* This class is used to instantiate a RadiusAxis.\n* @class RadiusAxis\n*/\nexport default class RadiusAxis {\n\n /**\n * Creates an instance of RadiusAxis.\n * @param {Object} config input parameters.\n * @memberof RadiusAxis\n */\n constructor (config = {}) {\n this._id = getUniqueId();\n generateGetterSetters(this, PROPS);\n this._range = [];\n this._radiusFactor = 1;\n this._config = mergeRecursive({}, this.constructor.defaultConfig());\n this.config(config);\n this._scale = this.createScale({\n scale: LINEAR\n });\n }\n\n static defaultConfig () {\n return {\n padding: [0, 1],\n minOuterRadius: 10\n };\n }\n\n config (...params) {\n if (params.length) {\n const config = mergeRecursive(this.config(), params[0]);\n this._config = config;\n return this;\n }\n return this._config;\n }\n\n createScale (strategy) {\n return createScale({\n type: strategy.scale,\n range: this.range()\n });\n }\n\n domain (...domainVal) {\n if (domainVal.length) {\n const { domain: customDomain } = this.config();\n let domain = resolveAxisConfig(customDomain, domainVal[0], this);\n domain = sanitizeDomainWhenEqual(domain);\n this._scale.domain(domain);\n this._domain = domain;\n adjustDomain(this);\n }\n return this._domain;\n }\n\n getInnerRadius (domainVal) {\n if (domainVal === undefined) {\n return this.range()[0];\n }\n return this._scale(domainVal);\n }\n\n getOuterRadius (domainVal) {\n if (domainVal === undefined) {\n return this.range()[1];\n }\n const radius = this._scale(domainVal) * this._radiusFactor;\n return radius;\n }\n\n range (...range) {\n if (range.length) {\n const { padding, range: customRange } = this.config();\n const sanitizedRange = range[0].map((v, i) => v + (i ? -padding[i] : padding[i]));\n const rangeVal = resolveAxisConfig(customRange, sanitizedRange, this);\n this._range = rangeVal;\n this._scale.range(rangeVal);\n adjustDomain(this);\n }\n return this._range;\n }\n\n setRadiusFactor (val) {\n this._radiusFactor = val;\n return this;\n }\n}\n","import * as ScaleType from './enums/scale-type';\n\nconst DATA_TYPES = {\n DIMENSION: 'dimension',\n CATEGORICAL: 'categorical',\n MEASURE: 'measure',\n TEMPORAL: 'temporal'\n};\n\n/**\n * Map of DataModel types to associated field types.\n */\nexport const dataTypeScaleMap = {\n [DATA_TYPES.DIMENSION]: ScaleType.BAND,\n [DATA_TYPES.MEASURE]: ScaleType.LINEAR,\n [DATA_TYPES.TEMPORAL]: ScaleType.TIME\n};\n\n","import { nestCollection, InvalidAwareTypes } from 'muze-utils';\n\n/**\n * Create multiple datasets from a single dataset by grouping the data using\n * a dimensional field.\n * @param {Array} schema Name and type of fields are stored in schema\n * @param {Array} data Data array\n * @param {Object} config Configuration object\n * @return {Array} Grouped data array\n */\nexport default (schema, data, config) => {\n const groupBy = config.groupBy instanceof Array ? config.groupBy : [config.groupBy];\n const groupByIndices = groupBy.map(fieldName => schema.findIndex(d => d.name === fieldName));\n\n if (groupByIndices.find(d => d === -1) !== undefined) {\n throw new Error(`Groupby field ${groupBy} not found in schema`);\n }\n\n const groupedData = nestCollection({\n keys: groupByIndices,\n data\n });\n\n groupedData.forEach((d) => {\n const key = d.key;\n if (InvalidAwareTypes.isInvalid(key)) {\n d.key = InvalidAwareTypes.getInvalidType(key);\n }\n });\n return groupedData;\n};\n","/**\n * @module Transform\n * This file exports a function that is used to implement\n * the identity transform\n */\n /* eslint no-unused-vars: 0 */\n /**\n * This function accepts data and returns the data unchanged.\n * @param {Object} schema The schema.\n * @param {Array} data The data array.\n * @param {Object} config The config object.\n * @return {Array} The unchanged data.\n */\n function identityTransform (schema, data, config) {\n return data;\n }\n\n export default identityTransform;\n","/**\n * @module Transform\n * This file exports the transform factory.\n */\nimport * as TransformType from '../enums/transform-type';\nimport identity from '../identity-transform';\nimport group from '../group-transform';\nimport stack from '../stack-transform';\n\n/* istanbul ignore next */\nconst transformMap = {\n [TransformType.IDENTITY]: identity,\n [TransformType.GROUP]: group,\n [TransformType.STACK]: stack\n};\n\n/**\n * This function is used to retirn a transform associated\n * with the given type.\n *\n * @param {string} type The type of the transform.\n * @return {Function} The transform function.\n */\nfunction transformFactory (type) {\n const transform = transformMap[type];\n if (typeof transform !== 'function') {\n throw new Error('Invalid transform type supplied.');\n }\n return transform;\n}\n\nexport default transformFactory;\n","/**\n * @module Transform\n * This module exports constants that are used to reference transforms in\n * a consistent manner throughout the project.\n */\n/* eslint one-var: 0 */\n export const IDENTITY = 'identity';\n export const GROUP = 'group';\n export const STACK = 'stack';\n export const FRACTURE = 'fracture';\n","import { stack } from 'muze-utils';\n\nimport group from '../group-transform';\n/*\n Normalize the data to a form which can be given to d3 stack for stacking the data\n ['Product', 'Sales', 'Region'],\n 0 ['A', 2000, 'North'],\n 1 ['A', 3000, 'South'],\n 2 ['B', 3000, 'South'],\n 3 ['B', 2000, 'North'],\n 4 ['C', 3000, 'South'],\n 5 ['C', 2000, 'North']\n |\n |\n ['Product', 'North', 'South'],\n ['A', 2000, 3000],\n ['B', 2000, 3000],\n ['C', 2000, 3000]\n*/\n// eslint-disable-next-line require-jsdoc\nconst normalizeData = (data, schema, valueField, uniqueField, groupBy) => {\n const groupedData = group(schema, data, {\n groupBy: uniqueField\n });\n const uniqueFieldIndex = schema.findIndex(d => d.name === uniqueField);\n const valueFieldIndex = schema.findIndex(d => d.name === valueField);\n const seriesKeyIndex = schema.findIndex(d => d.name === groupBy);\n const seriesKeys = data.map(d => d[seriesKeyIndex]).filter((item, pos, arr) => arr.indexOf(item) === pos).sort();\n const fieldNames = schema.reduce((acc, obj, i) => {\n acc[i] = obj.name;\n return acc;\n }, {});\n const dataArr = groupedData.map((arr) => {\n const tuples = {};\n const rowObj = arr.values.reduce((acc, row) => {\n acc = row.reduce((obj, value, i) => {\n if (i === seriesKeyIndex) {\n obj[value] = row[valueFieldIndex];\n tuples[value] = row;\n } else if (i !== valueFieldIndex) {\n obj[fieldNames[i]] = value;\n }\n return obj;\n }, acc);\n return acc;\n }, {});\n rowObj._tuple = tuples;\n // Set missing values field to zero value\n seriesKeys.forEach((seriesKey) => {\n if (rowObj[seriesKey] === undefined) {\n rowObj[seriesKey] = 0;\n const newArr = new Array(arr.values[0].length);\n newArr[uniqueFieldIndex] = arr.key;\n newArr[seriesKeyIndex] = seriesKey;\n rowObj._tuple[seriesKey] = newArr;\n }\n });\n return rowObj;\n });\n\n return {\n data: dataArr,\n keys: seriesKeys\n };\n};\n/**\n * Generate a stacked representation of data\n * @param {Array} schema schema Array\n * @param {Array} data data array\n * @param {Object} config Configuration object\n * @return {Array} stacked data\n */\nexport default (schema, data, config) => {\n const uniqueField = config.uniqueField;\n const valueField = config.value;\n const groupBy = config.groupBy;\n const sort = config.sort || 'descending';\n const normalizedData = normalizeData(data, schema, valueField, uniqueField, groupBy);\n const keys = normalizedData.keys;\n const map = {};\n const orderBy = config.orderBy;\n const orderIndex = schema.findIndex(d => d.name === orderBy);\n const groupByIndex = schema.findIndex(d => d.name === groupBy);\n if (orderIndex !== -1) {\n keys.forEach((key) => {\n const name = data.find(d => d[groupByIndex] === key);\n map[key] = name[orderIndex];\n });\n normalizedData.keys.sort((a, b) => map[a].localeCompare(map[b]));\n }\n\n const stackData = stack({\n keys: normalizedData.keys,\n offset: config.offset || 'diverging',\n order: sort,\n data: normalizedData.data\n });\n stackData.forEach((seriesData) => {\n seriesData.forEach((dataObj) => {\n dataObj.data = dataObj.data._tuple[seriesData.key];\n });\n });\n return stackData;\n};\n\n","import {\n FieldType,\n getDomainFromData,\n setStyles,\n easeFns,\n selectElement,\n DimensionSubtype,\n STATE_NAMESPACES,\n retrieveNearestGroupByReducers,\n getObjProp,\n COORD_TYPES\n} from 'muze-utils';\nimport { ScaleType } from '@chartshq/muze-axis';\nimport { transformFactory } from '@chartshq/transform';\nimport { IDENTITY, STACK, GROUP, COLOR, SHAPE, SIZE, ENCODING, AGG_FN_SUM, ASCENDING, TEXT } from '../enums/constants';\n\nconst BAND = ScaleType.BAND;\nconst { POLAR, CARTESIAN } = COORD_TYPES;\n\nconst transfromColor = (colorAxis, datum, styleType, intensity) => {\n datum.meta.stateColor[styleType] = datum.meta.stateColor[styleType] || datum.meta.originalColor;\n const fillColorInfo = colorAxis.transformColor(datum.meta.stateColor[styleType], intensity);\n datum.meta.stateColor[styleType] = fillColorInfo.hsla;\n\n return fillColorInfo;\n};\n\nexport const applyInteractionStyle = (context, selectionSet, interactionStyles, config) => {\n const elements = context.getPlotElementsFromSet(selectionSet);\n const axes = context.axes();\n const colorAxis = axes.color;\n const apply = config.apply;\n const interactionType = config.interactionType;\n interactionStyles.forEach((style) => {\n const styleType = style.type;\n elements.style(styleType, ((d) => {\n const { colorTransform, stateColor, originalColor } = d.meta;\n colorTransform[interactionType] = colorTransform[interactionType] || {};\n if (apply && !colorTransform[interactionType][styleType]) {\n // fade selections\n colorTransform[interactionType][styleType] = style.intensity;\n const color = transfromColor(colorAxis, d, styleType, style.intensity).color;\n return color;\n }\n if (!apply && colorTransform[interactionType][styleType]) {\n // unfade selections\n colorTransform[interactionType][styleType] = null;\n return transfromColor(colorAxis, d, styleType, style.intensity.map(e => -e)).color;\n }\n const [h, s, l, a] = stateColor[styleType] ? stateColor[styleType] : originalColor;\n return `hsla(${h * 360},${s * 100}%,${l * 100}%, ${a || 1})`;\n }));\n });\n};\n\n/**\n *\n *\n * @param {*} selectionSet\n * @param {*} className\n * @param {*} hasFaded\n */\nexport const fadeUnfadeSelection = (context, selectionSet, hasFaded, interaction) => {\n const interactionConfig = { interaction, apply: hasFaded };\n applyInteractionStyle(context, selectionSet, 'fade', interactionConfig);\n};\n\n/**\n *\n *\n * @param {*} selectionSet\n * @param {*} className\n * @param {*} hasFaded\n */\nexport const focusUnfocusSelection = (context, selectionSet, isFocussed, interaction) => {\n const interactionConfig = { interaction, apply: isFocussed };\n applyInteractionStyle(context, selectionSet, 'focus', interactionConfig);\n};\n\n/**\n *\n *\n * @param {*} axes\n *\n */\nexport const getAxesScales = (axes) => {\n const [xAxis, yAxis] = [ENCODING.X, ENCODING.Y].map(e => axes[e]);\n const [xScale, yScale] = [xAxis, yAxis].map(e => e && e.scale());\n return {\n xAxis,\n yAxis,\n xScale,\n yScale\n };\n};\n\nexport const encodingFieldInfRetriever = {\n [POLAR]: (encoding, fieldsConfig) => {\n const encodingInf = {};\n [ENCODING.RADIUS, ENCODING.RADIUS0, ENCODING.ANGLE, ENCODING.ANGLE0, COLOR, SHAPE, SIZE, TEXT]\n .forEach((e) => {\n const field = getObjProp(encoding, e, 'field');\n encodingInf[`${e}Field`] = field;\n encodingInf[`${e}FieldIndex`] = getObjProp(fieldsConfig, field, 'index');\n });\n return encodingInf;\n },\n [CARTESIAN]: (encoding, fieldsConfig) => {\n const encodingInf = {};\n [ENCODING.X, ENCODING.Y, ENCODING.X0, ENCODING.Y0, COLOR, SHAPE, SIZE, TEXT].forEach((e) => {\n const field = getObjProp(encoding, e, 'field');\n encodingInf[`${e}Field`] = field;\n encodingInf[`${e}FieldIndex`] = getObjProp(fieldsConfig, field, 'index');\n encodingInf[`${e}FieldType`] = getObjProp(fieldsConfig, field, 'def', 'type');\n encodingInf[`${e}FieldSubType`] = getObjProp(fieldsConfig, field, 'def', 'subtype');\n });\n\n return encodingInf;\n }\n};\n\n/**\n *\n *\n * @param {*} dataModel\n * @param {*} config\n * @param {*} transformType\n *\n */\nexport const transformData = (dataModel, config, transformType, encodingFieldInf) => {\n const data = dataModel.getData({ withUid: true });\n const schema = data.schema;\n const transform = config.transform;\n const {\n xField,\n yField,\n xFieldType,\n yFieldType\n } = encodingFieldInf;\n const uniqueField = xFieldType === FieldType.MEASURE ? yField : xField;\n\n return transformFactory(transformType)(schema, data.data, {\n groupBy: transform.groupBy,\n uniqueField,\n sort: transform.sort || 'none',\n offset: transform.offset,\n orderBy: transform.orderBy,\n value: yFieldType === FieldType.MEASURE ? yField : xField\n }, data.uids);\n};\n\nexport const getIndividualClassName = (d, i, data, context) => {\n const className = context.config().individualClassName;\n let classNameStr = '';\n if (className instanceof Function) {\n classNameStr = className(d, i, data, context);\n }\n return classNameStr;\n};\n\nconst dataNormalizers = {\n [POLAR]: (transformedData, encodingFieldInf, fieldsConfig) => {\n const {\n radiusFieldIndex,\n angleFieldIndex,\n radius0FieldIndex,\n angle0FieldIndex\n } = encodingFieldInf;\n const fieldsLen = Object.keys(fieldsConfig).length;\n\n /**\n * Returns normalized data from transformed data. It recursively traverses through\n * the transformed data if there it is nested.\n */\n return transformedData.map(data => data.map((d) => {\n const pointObj = {\n radius: d[radiusFieldIndex],\n angle: angleFieldIndex !== undefined ? d[angleFieldIndex] : 1,\n radius0: d[radius0FieldIndex],\n angle0: d[angle0FieldIndex]\n };\n [COLOR, SHAPE, SIZE, TEXT].forEach((enc) => {\n pointObj[enc] = d[encodingFieldInf[`${enc}FieldIndex`]];\n });\n pointObj.source = d;\n pointObj.rowId = d[fieldsLen];\n return pointObj;\n })).filter(d => d.length);\n },\n [CARTESIAN]: (transformedData, encodingFieldInf, fieldsConfig, transformType) => {\n const {\n xFieldType,\n xFieldIndex,\n yFieldIndex,\n x0FieldIndex,\n y0FieldIndex\n } = encodingFieldInf;\n const fieldsLen = Object.keys(fieldsConfig).length;\n /**\n * Returns normalized data from transformed data. It recursively traverses through\n * the transformed data if there it is nested.\n */\n return transformedData.map((data) => {\n const values = transformType === GROUP ? data.values : data;\n return values.map((d) => {\n let pointObj = {};\n let tuple;\n if (transformType === STACK) {\n tuple = d.data || [];\n let y;\n let y0;\n let x;\n let x0;\n if (d[1] >= d[0]) {\n y = x0 = d[1];\n x = y0 = d[0];\n } else {\n y = x0 = d[0];\n x = y0 = d[1];\n }\n\n pointObj = xFieldType === FieldType.MEASURE ? {\n x,\n x0,\n y: tuple[yFieldIndex],\n y0: tuple[yFieldIndex]\n } : {\n x: tuple[xFieldIndex],\n x0: tuple[xFieldIndex],\n y,\n y0\n };\n pointObj.source = tuple;\n pointObj.rowId = tuple[fieldsLen];\n [COLOR, SHAPE, SIZE, TEXT].forEach((enc) => {\n pointObj[enc] = tuple[encodingFieldInf[`${enc}FieldIndex`]];\n });\n } else {\n pointObj = {\n x: d[xFieldIndex],\n y: d[yFieldIndex],\n x0: d[x0FieldIndex],\n y0: d[y0FieldIndex]\n };\n pointObj.source = d;\n pointObj.rowId = d[fieldsLen];\n [COLOR, SHAPE, SIZE, TEXT].forEach((enc) => {\n pointObj[enc] = d[encodingFieldInf[`${enc}FieldIndex`]];\n });\n }\n return pointObj;\n });\n }).filter(d => d.length);\n }\n};\n/*\n * This method resolves the x, y, x0 and y0 values from the transformed data.\n * It also checks the type of transformed data for example, if it is a stacked data\n * then it fetches the y and y0 values from the stacked data.\n * @param {Array.} transformedData transformed data\n * @param {Object} fieldsConfig field definitions\n * @param {string} transformType type of transformed data - stack, group or identity.\n * @return {Array.} Normalized data\n*/\nexport const getNormalizedData = (transformedData, context) => {\n const transformType = context.transformType();\n const transformedDataArr = transformType === IDENTITY ? [transformedData] : transformedData;\n const encodingFieldInf = context.encodingFieldsInf();\n const fieldsConfig = context.data().getFieldsConfig();\n return dataNormalizers[context.coord()](transformedDataArr, encodingFieldInf, fieldsConfig, transformType);\n};\n\nexport const domainCalculator = {\n [POLAR]: (data, layerInst) => {\n const config = layerInst.config();\n const { sort } = config;\n let angleValues = data[0];\n const radius0Field = getObjProp(config.encoding.radius0, 'field');\n if (sort) {\n angleValues = angleValues.sort((a, b) => (sort === ASCENDING ? a.radius - b.radius : b.radius - a.radius));\n }\n const radiusDomain = getDomainFromData(data, [ENCODING.RADIUS, radius0Field ?\n ENCODING.RADIUS0 : ENCODING.RADIUS]);\n return {\n radius: radiusDomain,\n angle: angleValues.map(d => d.angle),\n angle0: angleValues.map(d => d.angle0)\n };\n },\n [CARTESIAN]: (data, layerInst) => {\n const transformType = layerInst.transformType();\n const encodingFieldInf = layerInst.encodingFieldsInf();\n const {\n xFieldSubType,\n yFieldSubType,\n xField,\n yField,\n x0Field,\n y0Field\n } = encodingFieldInf;\n const domains = {};\n const yEnc = ENCODING.Y;\n const xEnc = ENCODING.X;\n if (xField) {\n domains.x = getDomainFromData(data, x0Field || transformType === STACK ? [xEnc, ENCODING.X0] : [xEnc, xEnc],\n xFieldSubType);\n }\n if (yField) {\n domains.y = getDomainFromData(data, y0Field || transformType === STACK ? [ENCODING.Y0, ENCODING.Y] :\n [yEnc, yEnc], yFieldSubType);\n }\n\n return domains;\n }\n};\n\nexport const attachDataToVoronoi = (voronoi, points) => {\n voronoi.data([].concat(...points).filter(d => d.rowId !== undefined).map((d) => {\n const point = d.update;\n return {\n x: point.x,\n y: point.y,\n data: d\n };\n }));\n};\n\n/**\n *\n *\n * @param {*} target\n * @param {*} styles\n * @param {*} remove\n */\nexport const updateStyle = (target, styles, remove) => {\n for (const key in styles) {\n if ({}.hasOwnProperty.call(styles, key)) {\n target.style(key, remove ? null : styles[key]);\n }\n }\n};\n\n/**\n *\n *\n * @param {*} mount\n * @param {*} context\n */\nexport const animateGroup = (mount, context) => {\n let groupTransition;\n let update;\n const { transition, groupAnimateStyle } = context;\n const { duration, effect, disabled } = transition;\n if (groupAnimateStyle) {\n setStyles(mount.node(), groupAnimateStyle.enter);\n update = groupAnimateStyle.update;\n if (!disabled) {\n groupTransition = mount.transition()\n .ease(easeFns[effect])\n .duration(duration)\n .on('end', function () {\n updateStyle(selectElement(this), update, true);\n });\n } else {\n groupTransition = mount;\n }\n updateStyle(groupTransition, update);\n }\n};\n\nexport const positionPoints = (context, points) => {\n const positioner = context.encodingTransform();\n if (positioner) {\n return positioner(points, context, { smartLabel: context._dependencies.smartLabel });\n }\n return points;\n};\n\n/**\n * Gets the width of each group. It gets the width from axis if it is available for\n * example when the scale is nominal else it calculates the width from the\n * range of the axis and number of data points.\n *\n * @param {SimpleAxis} axis instance of axis\n * @param {number} minDiff Minimum difference between data points\n * @return {number} width of each bar\n * @private\n*/\nexport const getGroupSpan = (axis, minDiff) => {\n let groupSpan;\n const width = axis.getUnitWidth();\n const scale = axis.scale();\n const range = scale.range();\n const domain = scale.domain();\n !width ? groupSpan = (Math.abs(range[1] - range[0]) / Math.abs(domain[1] - domain[0])) * minDiff :\n (groupSpan = width);\n\n return groupSpan;\n};\n\nexport const getPlotMeasurement = (context, dimensionalValues) => {\n const fieldInfo = context.encodingFieldsInf();\n const axes = context.axes();\n const transformType = context.transformType();\n const config = context.config();\n const bandScale = context._bandScale;\n\n return ['x', 'y'].map((type) => {\n let span = 0;\n let groupSpan = 0;\n let padding = 0;\n let offsetValues = [];\n if (fieldInfo[`${type}FieldType`] === FieldType.DIMENSION) {\n let actualGroupWidth;\n const isTemporal = fieldInfo[`${type}FieldSubType`] === DimensionSubtype.TEMPORAL;\n const timeDiff = isTemporal ? context.dataProps().timeDiffs[type] : 0;\n const axis = axes[type];\n const pad = config[`pad${type.toUpperCase()}`];\n const innerPadding = config.innerPadding;\n const keys = dimensionalValues;\n const scale = axis.scale();\n groupSpan = getGroupSpan(axis, timeDiff);\n const isAxisBandScale = axis.constructor.type() === BAND;\n const axisPadding = axis.config().padding;\n // If it is a grouped bar then the width of each bar in a grouping is retrieved from\n // a band scale. The band scale will have range equal to width of one group of bars and\n // the domain is set to series keys.\n if (transformType === 'group') {\n const groupPadding = isAxisBandScale ? 0 : axisPadding * groupSpan / 2;\n bandScale.range([groupPadding, groupSpan - groupPadding]).domain(keys).paddingInner(innerPadding);\n span = bandScale.bandwidth();\n actualGroupWidth = groupSpan - (isAxisBandScale ? 0 : axisPadding * groupSpan);\n offsetValues = keys.map(key => bandScale(key) - (isAxisBandScale ? 0 : (groupSpan / 2)));\n } else if (pad !== undefined) {\n let offset;\n if (isAxisBandScale) {\n const step = scale.step();\n offset = scale.padding() * step;\n span = scale.bandwidth() + offset;\n } else {\n span = groupSpan;\n }\n offsetValues = keys.map(() => (isAxisBandScale ? -(offset / 2) : -(span / 2)));\n } else {\n padding = isAxisBandScale ? 0 : axisPadding * groupSpan;\n span = groupSpan - padding;\n actualGroupWidth = span;\n offsetValues = keys.map(() => (isAxisBandScale ? 0 : -(span / 2)));\n }\n\n groupSpan = actualGroupWidth;\n padding = isAxisBandScale ? axisPadding * axis.scale().step() : axisPadding * groupSpan;\n }\n\n return {\n span,\n offsetValues,\n groupSpan,\n padding\n };\n });\n};\n\nexport const initializeGlobalState = (context) => {\n const store = context.store();\n const globalState = context.constructor.getState()[0];\n const namespace = context.metaInf().namespace;\n for (const prop in globalState) {\n store.append(`${STATE_NAMESPACES.LAYER_GLOBAL_NAMESPACE}.${prop}`, {\n [namespace]: null\n });\n }\n};\n\nexport const resolveInvalidTransformType = (context) => {\n const {\n xField,\n yField,\n xFieldType,\n yFieldType\n } = context.encodingFieldsInf();\n const groupByField = context.config().transform.groupBy;\n const fieldsConfig = context.data().getFieldsConfig();\n const groupByFieldMeasure = fieldsConfig[groupByField] && fieldsConfig[groupByField].def.type === FieldType.MEASURE;\n if (!xField || !yField || groupByFieldMeasure || !groupByField || xFieldType === FieldType.DIMENSION &&\n yFieldType === FieldType.DIMENSION) {\n return IDENTITY;\n }\n return null;\n};\n\nexport const getValidTransform = context => resolveInvalidTransformType(context) || context.config().transform.type;\n\nexport const getValidTransformForAggFn = (context) => {\n const resolvedInvalidTransformType = resolveInvalidTransformType(context);\n if (resolvedInvalidTransformType) {\n return resolvedInvalidTransformType;\n }\n\n const {\n xField,\n yField,\n xFieldType,\n yFieldType\n } = context.encodingFieldsInf();\n const groupByField = context.config().transform.groupBy;\n const isCustomTransformTypeProvided = !!getObjProp(context._customConfig, 'transform', 'type');\n let transformType = context.config().transform.type;\n\n if (!isCustomTransformTypeProvided && groupByField && xFieldType !== yFieldType) {\n const measureField = xFieldType === FieldType.MEASURE ? xField : yField;\n const { [measureField]: aggFn } = retrieveNearestGroupByReducers(context.data(), measureField);\n transformType = aggFn === AGG_FN_SUM ? STACK : GROUP;\n }\n\n return transformType;\n};\n\nexport const getMarkId = (source, schema) => source.filter((val, i) => schema[i] &&\n schema[i].type === FieldType.DIMENSION).join();\n\nexport const resolveEncodingValues = (data, i, dataArr, layerInst) => {\n const transformedValues = {};\n const values = data.values;\n const encoding = layerInst.config().encoding;\n for (const key in values) {\n const value = getObjProp(encoding[key], 'value');\n if (value instanceof Function) {\n transformedValues[key] = value(values, i, dataArr, layerInst);\n } else {\n transformedValues[key] = values[key];\n }\n }\n return transformedValues;\n};\n\nexport const getColorMetaInf = (color, colorAxis) => ({\n originalColor: colorAxis.getHslArray(color),\n stateColor: {},\n colorTransform: {}\n});\n\nconst getCoordValue = (radius, trig, angle, offset) => radius * Math[trig](angle) + offset;\nconst coordValueGetter = (radius, angle, xOffset, yOffset) => ({\n x: getCoordValue(radius, 'cos', angle, xOffset),\n y: getCoordValue(radius, 'sin', angle, yOffset)\n});\nexport const toCartesianCoordinates = (points, measurement, rangePlot = false) => {\n const xOffset = measurement.width / 2;\n const yOffset = measurement.height / 2;\n for (let i = 0, len = points.length; i < len; i++) {\n const point = points[i];\n const { angle, radius, radius0, angle0 } = point.update;\n point.update = coordValueGetter(radius, angle, xOffset, yOffset);\n if (rangePlot) {\n const update = point.update = coordValueGetter(radius0, angle0, xOffset, yOffset);\n const { x: x0, y: y0 } = coordValueGetter(radius, angle, xOffset, yOffset);\n update.x0 = x0;\n update.y0 = y0;\n }\n }\n return points;\n};\n\nexport const sortData = (data, axes) => {\n const { x: xAxis, y: yAxis } = axes;\n const axisArr = [xAxis, yAxis];\n for (let i = 0, len = axisArr.length; i < len; i++) {\n const axis = axisArr[i];\n if (axis.constructor.type() === BAND) {\n const key = i ? 'y' : 'x';\n const dom = axis.domain();\n const indices = dom.reduce((acc, v, idx) => {\n acc[v] = idx;\n return acc;\n }, {});\n data.sort((a, b) => indices[a[key]] - indices[b[key]]);\n break;\n }\n }\n return data;\n};\n","import { CommonProps, STATE_NAMESPACES } from 'muze-utils';\nimport { encodingFieldInfRetriever } from '../helpers';\nimport * as PROPS from '../enums/props';\n\nconst renderLayer = (context) => {\n const mount = context.mount();\n if (mount) {\n context.render(mount);\n context.dependencies().throwback.commit(CommonProps.ON_LAYER_DRAW, true);\n }\n};\n\nexport const listenerMap = (context, ns) => [\n {\n props: [`${ns.local}.${PROPS.DATA}`],\n listener: ([, data]) => {\n const config = context.config();\n const encodingValue = config.encoding;\n if (data && encodingValue) {\n const fieldsConfig = data.getFieldsConfig();\n const encodingFieldsInf = encodingFieldInfRetriever[context.coord()](encodingValue, fieldsConfig);\n context.encodingFieldsInf(encodingFieldsInf);\n context.resolveTransformType();\n context._transformedData = context.getTransformedData(data, config,\n context.transformType(), encodingFieldsInf);\n context._normalizedData = context.getNormalizedData(context._transformedData, fieldsConfig);\n const domain = context.calculateDomainFromData(context._normalizedData, context.encodingFieldsInf(),\n context.data().getFieldsConfig());\n context._domain = domain;\n !context._updateLock && context.domain(domain);\n }\n },\n type: 'registerImmediateListener'\n },\n {\n props: [`${ns.local}.${PROPS.CONFIG}`],\n listener: ([, config]) => {\n const calculateDomain = config.calculateDomain;\n const props = context.getRenderProps();\n const store = context.store();\n const namespaceInf = {\n namespace: `${STATE_NAMESPACES.LAYER_LOCAL_NAMESPACE}.${context.metaInf().namespace}`,\n key: 'renderListener'\n };\n store.unsubscribe(namespaceInf);\n if (calculateDomain === false) {\n props.push(`${ns.local}.${PROPS.DATA}`);\n }\n store.registerChangeListener(props,\n () => {\n renderLayer(context);\n }, false, namespaceInf);\n },\n type: 'registerImmediateListener'\n }\n];\n\n","export const DATA = 'data';\nexport const CONFIG = 'config';\nexport const MEASUREMENT = 'measurement';\nexport const DOMAIN = 'domain';\nexport const MOUNT = 'mount';\n","import { mergeRecursive } from 'muze-utils';\nimport * as PROPS from '../enums/props';\n\nexport const defaultOptions = {\n [PROPS.CONFIG]: {\n value: null,\n meta: {\n sanitization: (config, oldConfig, context) => {\n context._customConfig = config;\n const constructor = context.constructor;\n const newConf = mergeRecursive({}, constructor.defaultConfig());\n\n return constructor.defaultPolicy(newConf, config);\n }\n }\n },\n [PROPS.DATA]: {\n value: null,\n meta: {\n preset: (data, context) => {\n if (context._cacheEnabled) {\n context._cachedData.push(data);\n } else {\n context._cachedData = [data];\n }\n }\n }\n }\n};\n","import {\n getUniqueId,\n mergeRecursive,\n FieldType,\n selectElement,\n ReservedFields,\n registerListeners,\n transactor,\n DataModel,\n clone,\n generateGetterSetters,\n STATE_NAMESPACES,\n COORD_TYPES\n} from 'muze-utils';\nimport { SimpleLayer } from '../simple-layer';\nimport * as PROPS from '../enums/props';\nimport { props } from './props';\nimport {\n transformData,\n getNormalizedData,\n applyInteractionStyle,\n initializeGlobalState,\n getValidTransform,\n domainCalculator\n} from '../helpers';\nimport { listenerMap } from './listener-map';\nimport { defaultOptions } from './default-options';\n\n/**\n * An abstract class which gives definition of common layer functionality like\n * - transforming data for various modes. Supported modes: identity, group and stack.\n * - calculating data domain\n * - linking dependent layers\n * - merging policy of configuration\n * - interaction sideffect helpers\n * - retrieving dom elements from data using id\n * - retrieving the physical dimensions of marks\n * - disposing layer\n *\n * Every layer has to extend base layer and give concrete definition.\n * This layer does not have any default visual. A new layer has to define the logic of `render` for rendering the\n * visuals\n *\n * @public\n * @class\n * @module BaseLayer\n */\nexport default class BaseLayer extends SimpleLayer {\n\n /**\n * Creates a layer using a configuration and data.\n *\n * @public\n * @constructor\n * @param {DataModel} data Instance of DataModel to be used. This DataModel instance serves as the data for a layer.\n * @param {Object} axes Axes instances to be used for rendering the layer. Axes are used for mapping data from\n * value to px.\n * @param {SimpleAxis} axes.x X axis of the layer. Based on the type of variable it gets instance of BandAxis,\n * TimeAxis, ContinuousAxis\n * @param {SimpleAxis} axes.y X axis of the layer. Based on the type of variable it gets instance of BandAxis,\n * TimeAxis, ContinuousAxis\n * @param {ColorAxis} axes.color Axis for coloring a layer using color interpolators\n * @param {ShapeAxis} axes.shape Axis for providing a shape\n * @param {SizeAxis} axes.size Axis for determining size of a mark using size interpolator\n * @param {LayerConfig} config Configuration of the layer\n * @param {Object} dependencies Dependencies of the layer\n * @param {SmartLabel} dependencies.smartLabel Smartlabel singleton instance\n */\n constructor (data, axes, config, dependencies = {}) {\n super();\n\n generateGetterSetters(this, props);\n this.data(data);\n this.axes(axes);\n this.config(config);\n this.alias(this.constructor.formalName() + getUniqueId());\n this.dependencies(dependencies);\n this._points = [];\n this._cachedData = [];\n this._id = getUniqueId();\n this._measurement = {};\n this._animationDonePromises = [];\n this._customConfig = null;\n }\n\n static getState () {\n return [\n {\n domain: {}\n },\n {\n config: {},\n data: {}\n }\n ];\n }\n\n store (...params) {\n if (params.length) {\n this._store = params[0];\n const metaInf = this.metaInf();\n const localNs = `${STATE_NAMESPACES.LAYER_LOCAL_NAMESPACE}.${metaInf.namespace}`;\n initializeGlobalState(this);\n const store = this.store();\n store.append(`${STATE_NAMESPACES.LAYER_LOCAL_NAMESPACE}`, {\n [metaInf.namespace]: null\n });\n\n transactor(this, defaultOptions, store.model, {\n namespace: localNs\n });\n registerListeners(this, listenerMap, {\n local: localNs,\n global: STATE_NAMESPACES.LAYER_GLOBAL_NAMESPACE\n }, {\n unitRowIndex: metaInf.unitRowIndex,\n unitColIndex: metaInf.unitColIndex\n });\n return this;\n }\n return this._store;\n }\n\n domain (...dom) {\n const prop = `${STATE_NAMESPACES.LAYER_GLOBAL_NAMESPACE}.${PROPS.DOMAIN}.${this.metaInf().namespace}`;\n if (dom.length) {\n this.store().commit(prop, dom[0]);\n return this;\n }\n return this.store().get(prop);\n }\n\n /**\n * Creates a layer instance\n * @return {BaseLayer} Instance of a layer\n */\n static create (...params) {\n return new this(...params);\n }\n\n /**\n * Default configuration of the layer. This configuration gets merged to the user passed configuration using a\n * plolicy. Base layer only returns part of configuraion, any layer overridding base layer should return its own\n * configuration.\n *\n * @public\n * @static\n *\n * @return {Object} Default configuration\n */\n static defaultConfig () {\n return {\n transform: {\n type: 'identity'\n }\n };\n }\n\n /**\n * Policy defines how user config gets merged to default config. The default policy here does a deep copy\n * operation.\n * Any policy which does more than deep copying should define the policy as a static member.\n *\n * @static\n * @public\n *\n * @param {LayerConfig} conf Configuration with which the user config will be merged\n * @param {LayerConfig} userConf Configuration given by the user\n *\n * @return {LayerConfig} Merged layer configuration\n */\n static defaultPolicy (conf, userConf) {\n return mergeRecursive(conf, userConf);\n }\n\n /**\n * Determines a name for a layer. This name of the layer is used in the input data to refer to this layer.\n * ```\n * .layers([\n * mark: 'bar',\n * encoding: { ... }\n * ])\n * ```\n *\n * @static\n * @public\n *\n * @return {string} name of layer\n */\n static formalName () {\n return 'base';\n }\n\n encodingFieldsInf (...fieldsInf) {\n if (fieldsInf.length) {\n this._encodingFieldsInf = fieldsInf[0];\n return this;\n }\n return this._encodingFieldsInf;\n }\n\n encodingTransform (...encodingTransform) {\n if (encodingTransform.length) {\n this._encodingTransform = encodingTransform[0];\n return this;\n }\n return this._encodingTransform;\n }\n\n /**\n * Provides a alias for a layer. Like it's possible to have same layer (like bar) multiple times, but among multiple\n * layers of same type if one layer has to be referred, alias is used. If no alias is given then `formalName` is set\n * as the alias name.\n *\n *\n * If used as setter\n * @param {string} alias Name of the alias\n * @return {BaseLayer} Instance of current base layer\n *\n * If used as getter\n * @return {string} Alias of the current layer\n *\n * @public\n */\n alias (...params) {\n if (params.length) {\n this._alias = params[0];\n return this;\n }\n return this._alias || this.constructor.formalName();\n }\n\n dependencies (...params) {\n if (params.length) {\n this._dependencies = params[0];\n return this;\n }\n return this._dependencies;\n }\n\n enableCaching () {\n this._cacheEnabled = true;\n return this;\n }\n\n clearCaching () {\n this._cacheEnabled = false;\n return this.data(this._cachedData[0]);\n }\n\n /**\n * Serialize the schema. Merge config is used for serialization.\n *\n * @public\n *\n * @return {LayerConfig} Serialized schema\n */\n serialize () {\n return this.config();\n }\n\n /**\n * Returns the unique identifier of this layer. Id is auto generated during the creation proceess of a schema.\n *\n * @public\n *\n * @return {string} id of the layer\n */\n id () {\n return this._id;\n }\n\n /**\n * Returns the transformed data based on given transform type.\n * It first gets the transform method from transform factory based on type of transform. It then calls the\n * transform method with the data and passes the configuration parameters of transform such as\n * groupBy, value field, etc.\n *\n * @param {DataModel} dataModel Instance of DataModel\n * @param {Object} config Configuration for transforming data\n * @return {Array.} Transformed data.\n */\n getTransformedData (dataModel, config, transformType, encodingFieldsInf) {\n return transformData(dataModel, config, transformType, encodingFieldsInf);\n }\n\n /**\n * Calculates the domain from the data.\n * It checks the type of field and calculates the domain based on that. For example, if it\n * is a quantitative or temporal field, then it calculates the min and max from the data or\n * if it is a categorical field then it gets all the values from the data of that field.\n * @param {Array} data DataArray\n * @param {Object} fieldsConfig Configuration of fields\n * @return {Array} Domain values array.\n */\n calculateDomainFromData (data) {\n let domains = {};\n const isEmpty = this.data().isEmpty();\n\n if (!isEmpty) {\n domains = domainCalculator[this.coord()](data, this);\n }\n return domains;\n }\n\n static shouldDrawAnchors () {\n return false;\n }\n\n /**\n * Returns the domain for the axis.\n *\n * @param {string} encodingType type of encoding x, y, etc.\n * @return {Object} Axis domains\n */\n getDataDomain (encodingType) {\n const domains = this.store()\n .get(`${STATE_NAMESPACES.LAYER_GLOBAL_NAMESPACE}.${PROPS.DOMAIN}.${this.metaInf().namespace}`);\n return encodingType !== undefined ? domains[encodingType] || [] : domains;\n }\n\n /**\n * Normalizes the transformed data and returns it.\n *\n * @param {string} encodingType type of encoding x, y, etc.\n * @return {Object} Axis domains\n */\n getNormalizedData (transformedData) {\n return getNormalizedData(transformedData, this);\n }\n\n /**\n * Gets the nearest point closest to the given x and y coordinate. If no nearest point is found, then it returns\n * null.\n *\n * @public\n *\n * @param {number} x X Coordinate.\n * @param {number} y Y Coordinate.\n *\n * @return {Object} Information of the nearest point.\n * ```\n * {\n * // id property contains the field names and their corresponding values in a 2d array. This is the data\n * // associated with the nearest point.\n * id: // Example data: [['Origin'], ['USA']],\n * dimensions: // Physical dimensions of the point.\n * layerId: // Id of the layer instance.\n * }\n * ```\n */\n getNearestPoint () {\n return null;\n }\n\n applyInteractionStyle (interactionType, selectionSet, apply, styles) {\n const interactionConfig = this.config().interaction || {};\n\n let interactionStyles = interactionConfig[interactionType];\n interactionStyles = styles || interactionStyles;\n if (interactionStyles) {\n applyInteractionStyle(this, selectionSet, interactionStyles, {\n apply,\n interactionType\n });\n }\n }\n\n disableUpdate () {\n this._updateLock = true;\n return this;\n }\n\n enableUpdate () {\n this._updateLock = false;\n return this;\n }\n\n resolveTransformType () {\n this._transformType = getValidTransform(this);\n }\n\n transformType () {\n return this._transformType;\n }\n\n /**\n * Renders the layer\n * @return {BaseLayer} Instance of the layer.\n */\n render () {\n return this;\n }\n\n /**\n *\n *\n *\n * @memberof BaseLayer\n */\n elemType () {\n return 'g';\n }\n\n /**\n * Disposes the entire layer.\n *\n * @return {BaseLayer} Instance of layer.\n */\n remove () {\n this.store().unsubscribe({\n namespace: `${STATE_NAMESPACES.LAYER_LOCAL_NAMESPACE}.${this.metaInf().namespace}`\n });\n selectElement(this.mount()).remove();\n return this;\n }\n\n /**\n * Stores point in an object with key as the categorical value or temporal value\n *\n * @param {string} key categorical value or temporal value\n * @param {Object} data Information of the data point\n * @return {BarLayer} Instance of bar layer\n */\n cachePoint (key, data) {\n if (key === null) {\n return this;\n }\n const pointMap = this._pointMap;\n !pointMap[key] && (pointMap[key] = []);\n pointMap[key].push(data);\n return this;\n }\n\n /**\n *\n *\n * @param {*} dataProps\n *\n * @memberof BaseLayer\n */\n dataProps (...dataProps) {\n if (dataProps.length) {\n this._dataProps = dataProps[0];\n return this;\n }\n return this._dataProps;\n }\n\n /**\n *\n *\n * @param {*} data\n * @param {*} id\n *\n * @memberof BaseLayer\n */\n getIdentifiersFromData (data) {\n const schema = this.data().getData().schema;\n const fieldsConfig = this.data().getFieldsConfig();\n const identifiers = [[], []];\n const {\n xFieldType,\n yFieldType,\n xField,\n yField\n } = this.encodingFieldsInf();\n\n const [xMeasure, yMeasure] = [xFieldType, yFieldType].map(type => type === FieldType.MEASURE);\n schema.forEach((d, i) => {\n const name = d.name;\n if (fieldsConfig[name].def.type === FieldType.DIMENSION) {\n identifiers[0].push(name);\n identifiers[1].push(data[i]);\n }\n });\n\n if (xMeasure && yMeasure) {\n const xMeasureIndex = fieldsConfig[xField].index;\n const yMeasureIndex = fieldsConfig[yField].index;\n identifiers[0].push(...[xField, yField]);\n identifiers[1].push(...[data[xMeasureIndex], data[yMeasureIndex]]);\n }\n return identifiers;\n }\n\n hasPlotSpan () {\n return false;\n }\n\n getPlotSpan () {\n return {\n x: 0,\n y: 0\n };\n }\n\n getPlotPadding () {\n return {\n x: 0,\n y: 0\n };\n }\n\n /**\n * Returns the information of the marks corresponding to the supplied identifiers. Identifiers are a set of field\n * names and their corresponding values in an array. It can also be an instance of datamodel.\n *\n * For example,\n * ```\n * const identifiers = [\n * ['Origin', 'Cylinders'],\n * ['USA', '8']\n * ];\n * const points = barLayer.getPointsFromIdentifiers(identifiers);\n * ```\n * @public\n * @param {Array|DataModel} identifiers Identifiers of the marks.\n * @param {Object} config Optional configuration which describes how to get the information.\n * @param {boolean} config.getAllAttrs If true, then returns all the information of the points, else returns only\n * the positions of the points.\n * @param {boolean} config.getBBox If true, then returns the bounding box of all the marks.\n *\n * @return {Array} Array of points contains\n */\n getPointsFromIdentifiers (identifiers, config = {}) {\n const getAllAttrs = config.getAllAttrs;\n const getBBox = config.getBBox;\n if (!this.data()) {\n return [];\n }\n let fieldNames;\n let values;\n if (identifiers instanceof DataModel) {\n const dataObj = identifiers.getData();\n fieldNames = dataObj.schema.map(d => d.name);\n values = dataObj.data;\n } else {\n fieldNames = identifiers[0];\n values = identifiers.slice(1, identifiers.length);\n }\n\n const points = this._points;\n const fieldsConfig = this.data().getFieldsConfig();\n\n const filteredPoints = [].concat(...points).filter((point) => {\n const { source, rowId } = point;\n\n return fieldNames.every((field, idx) => {\n if (field in fieldsConfig && fieldsConfig[field].def.type === FieldType.DIMENSION) {\n return values.findIndex(d => d[idx] === source[fieldsConfig[field].index]) !== -1;\n } else if (field === ReservedFields.ROW_ID) {\n return values.findIndex(d => d[idx] === rowId) !== -1;\n } return true;\n });\n });\n return getAllAttrs ? filteredPoints : filteredPoints.map((d) => {\n const obj = clone(d);\n if (getBBox) {\n const update = obj.update || obj;\n if (obj.size !== undefined) {\n const sizeVal = Math.sqrt(obj.size / Math.PI) * 2;\n update.width = sizeVal;\n update.height = sizeVal;\n update.x -= sizeVal / 2;\n update.y -= sizeVal / 2;\n } else {\n if (update.width === undefined) {\n update.width = 2;\n }\n if (update.height === undefined) {\n update.height = 2;\n }\n }\n }\n\n return obj.update || obj;\n }).sort((a, b) => a.y - b.y);\n }\n\n getTransformedDataFromIdentifiers (identifiers) {\n const { data: identifierData, schema: identifierSchema } = identifiers.getData();\n const normalizedData = this._normalizedData;\n const fieldsConfig = this.data().getFieldsConfig();\n const {\n yField,\n xField,\n yFieldType,\n xFieldType\n } = this.encodingFieldsInf();\n let measureIndex;\n let enc;\n if (xFieldType === FieldType.MEASURE) {\n measureIndex = fieldsConfig[xField].index;\n enc = 'x';\n } else if (yFieldType === FieldType.MEASURE) {\n measureIndex = fieldsConfig[yField].index;\n enc = 'y';\n }\n\n const transformedData = [];\n normalizedData.forEach((dataArr) => {\n dataArr.forEach((dataObj) => {\n const tupleArr = dataObj.source;\n const exist = identifierSchema.every((obj, i) =>\n identifierData.findIndex(d => tupleArr[fieldsConfig[obj.name].index] === d[i]) !== -1);\n if (exist) {\n const transformedVal = dataObj[enc];\n const row = dataObj.source;\n const tuple = {};\n for (const key in fieldsConfig) {\n const index = fieldsConfig[key].index;\n tuple[key] = row[index];\n if (index === measureIndex) {\n tuple[key] = transformedVal;\n }\n }\n transformedData.push(tuple);\n }\n });\n });\n\n return [transformedData, this.data().getData().schema];\n }\n\n /**\n * Returns the dom elements associated with the supplied set of row ids.\n * Each element in the layer is mapped with a row of the datamodel. When given an array of row ids, it returns all\n * the elements which is mapped with those row ids.\n *\n * @public\n * @param {Array} set Array of row ids\n *\n * @return {Selection} D3 Selection of dom elements.\n */\n getPlotElementsFromSet (set) {\n return selectElement(this.mount()).selectAll(this.elemType()).filter(data =>\n (data ? set.indexOf(data.rowId) !== -1 : false));\n }\n\n /**\n * Notifies when all animations/transitions of the layer are completed.\n *\n * @public\n * @return {Promise} Returns a promise to notify the animation completion.\n */\n animationDone () {\n return Promise.all(this._animationDonePromises);\n }\n\n registerAnimationDoneHook () {\n let resolveFn;\n const promise = new Promise((resolve) => {\n resolveFn = resolve;\n });\n this._animationDonePromises.push(promise);\n\n return () => {\n resolveFn();\n };\n }\n\n getRenderProps () {\n const metaInf = this.metaInf();\n if (this.coord() === COORD_TYPES.POLAR) {\n return [`${STATE_NAMESPACES.GROUP_GLOBAL_NAMESPACE}.domain.radius`];\n }\n return [`${STATE_NAMESPACES.GROUP_GLOBAL_NAMESPACE}.domain.y.${metaInf.unitRowIndex}0`,\n `${STATE_NAMESPACES.GROUP_GLOBAL_NAMESPACE}.domain.x.${metaInf.unitColIndex}0`];\n }\n}\n","import {\n selectElement,\n makeElement,\n pathInterpolators,\n Symbols\n} from 'muze-utils';\nimport { updateStyle } from '../../helpers';\n\nconst line = Symbols.line;\n\nconst filterFn = (d) => {\n const { update } = d;\n return update.y !== null && update.x !== null;\n};\n\n/**\n * Draws a line from the points\n * Generates a svg path string\n * @param {Object} params Contains container, points and interpolate attribute.\n */\nexport const drawLine = (context) => {\n let filteredPoints;\n const { layer, container, points, interpolate, connectNullData, className, style, transition } = context;\n const mount = selectElement(container).attr('class', className);\n const curveInterpolatorFn = pathInterpolators[interpolate];\n const linepath = line()\n .curve(curveInterpolatorFn)\n .x(d => d.update.x)\n .y(d => d.update.y)\n .defined(filterFn);\n\n filteredPoints = points;\n if (connectNullData) {\n filteredPoints = points.filter(filterFn);\n }\n\n updateStyle(mount, style);\n let element = makeElement(mount, 'path', points.length ? [points[0].className] : []);\n element.attr('class', d => d);\n if (!transition.disabled) {\n element = element.transition()\n .duration(transition.duration)\n .on('end', layer.registerAnimationDoneHook());\n }\n element.attr('d', linepath(filteredPoints))\n .style('fill-opacity', 0);\n return element;\n};\n","import { CLASSPREFIX } from '../../enums/constants';\n\nexport const defaultConfig = {\n classPrefix: CLASSPREFIX,\n defClassName: 'layer-line',\n className: '',\n interpolate: 'linear',\n transform: {\n type: 'group'\n },\n interaction: {\n highlight: [{\n type: 'stroke',\n intensity: [0, 0, -15, 0]\n }],\n fade: [{\n type: 'stroke',\n intensity: [0, 0, +15, 0]\n }],\n focus: [{\n type: 'stroke',\n intensity: [0, 0, +15, 0]\n }]\n },\n nearestPointThreshold: 20,\n encoding: {\n color: {},\n x: {},\n y: {},\n strokeOpacity: {\n value: 1\n }\n },\n transition: {\n effect: 'cubic',\n duration: 1000\n },\n connectNullData: false\n};\n\n","import {\n Voronoi,\n getQualifiedClassName,\n selectElement,\n makeElement,\n FieldType,\n InvalidAwareTypes,\n getObjProp\n} from 'muze-utils';\nimport { BaseLayer } from '../../base-layer';\nimport { drawLine } from './renderer';\nimport { defaultConfig } from './default-config';\nimport { ENCODING } from '../../enums/constants';\nimport {\n attachDataToVoronoi,\n animateGroup,\n positionPoints,\n getIndividualClassName,\n getColorMetaInf,\n resolveEncodingValues,\n sortData\n} from '../../helpers';\n\nimport './styles.scss';\n\n/**\n * This layer is used to render straight or smoothed line paths. The mark type of this layer is ```line```.\n *\n * @public\n *\n * @class\n * @module LineLayer\n * @extends BaseLayer\n */\nexport default class LineLayer extends BaseLayer {\n\n /**\n * Creates an instance of LineLayer.\n * @param {*} args\n * @memberof LineLayer\n */\n constructor (...args) {\n super(...args);\n this._voronoi = new Voronoi();\n }\n\n static formalName () {\n return 'line';\n }\n\n elemType () {\n return 'path';\n }\n\n /**\n * Default configuration of line layer\n * @return {Object} Default configuration of layer\n */\n static defaultConfig () {\n return defaultConfig;\n }\n\n static defaultPolicy (conf, userConf) {\n const config = BaseLayer.defaultPolicy(conf, userConf);\n const encoding = config.encoding;\n const transform = config.transform;\n const colorField = encoding.color && encoding.color.field;\n\n if (colorField && !transform.groupBy) {\n transform.groupBy = colorField;\n }\n return config;\n }\n\n /**\n * Returns the draw method for line\n * @return {Function} Draw method of line layer\n */\n getDrawFn () {\n return drawLine;\n }\n\n static shouldDrawAnchors () {\n return true;\n }\n\n /**\n * Generates the x and y positions for each point\n * @param {Array} data Data Array\n * @param {Object} encoding Visual Encodings of the layer\n * @param {Object} axes Contains the axis\n * @param {number} seriesIndex index of series\n * @return {Array} Array of points\n */\n translatePoints (data) {\n let points = [];\n const axes = this.axes();\n const xAxis = axes.x;\n const yAxis = axes.y;\n const colorAxis = axes.color;\n const { xFieldType, yFieldType } = this.encodingFieldsInf();\n const isXDim = xFieldType === FieldType.DIMENSION;\n const isYDim = yFieldType === FieldType.DIMENSION;\n const key = isXDim ? ENCODING.X : (isYDim ? ENCODING.Y : null);\n sortData(data, axes);\n points = data.map((d, i) => {\n const xPx = xAxis.getScaleValue(d.x) + xAxis.getUnitWidth() / 2;\n const yPx = yAxis.getScaleValue(d.y) + yAxis.getUnitWidth() / 2;\n const color = colorAxis.getColor(d.color);\n\n const resolvedEncodings = resolveEncodingValues({\n values: {\n x: xPx,\n y: yPx,\n color\n },\n data: d\n }, i, data, this);\n\n const point = {\n enter: {},\n update: {\n x: d.x instanceof InvalidAwareTypes ? null : resolvedEncodings.x,\n y: d.y instanceof InvalidAwareTypes ? null : resolvedEncodings.y\n },\n style: {\n stroke: resolvedEncodings.color,\n 'fill-opacity': 0\n },\n rowId: d.rowId,\n source: d.source,\n meta: getColorMetaInf(resolvedEncodings.color, colorAxis)\n };\n point.className = getIndividualClassName(d, i, data, this);\n this.cachePoint(d[key], point);\n return point;\n });\n points = positionPoints(this, points);\n\n points = points.filter((point) => {\n const { update } = point;\n return !isNaN(update.x) && !isNaN(update.y);\n });\n return points;\n }\n\n /**\n * Renders the line plot\n * @param {SVGElement} container svg element\n * @return {LineLayer} instance of line layer\n */\n render (container) {\n let points;\n let seriesClassName;\n let style;\n\n const config = this.config();\n const {\n encoding,\n interpolate,\n className,\n defClassName,\n transition\n } = config;\n const normalizedData = this._normalizedData;\n const transformedData = this._transformedData;\n const fieldsConfig = this.data().getFieldsConfig();\n const axes = this.axes();\n const keys = transformedData.map(d => d.key);\n const qualifiedClassName = getQualifiedClassName(defClassName, this.id(), config.classPrefix);\n const containerSelection = selectElement(container);\n const colorField = encoding.color.field;\n const colorFieldIndex = fieldsConfig[colorField] && fieldsConfig[colorField].index;\n\n this._points = [];\n this._pointMap = {};\n containerSelection.classed(qualifiedClassName.join(' '), true);\n containerSelection.classed(className, true);\n makeElement(container, 'g', normalizedData, null, {\n enter: (group) => {\n animateGroup(group, {\n transition,\n groupAnimateStyle: {\n enter: {\n 'stroke-opacity': 0,\n 'fill-opacity': this.getPathStyle()['fill-opacity']\n },\n update: {\n 'stroke-opacity': encoding.strokeOpacity.value\n }\n }\n });\n },\n update: (group, dataArr, i) => {\n points = this.translatePoints(dataArr);\n this._points.push(points);\n seriesClassName = `${qualifiedClassName[0]}-${keys[i] || i}`.toLowerCase();\n\n let color;\n const colorValFn = encoding.color.value;\n const colorVal = points.find(d => d.source[colorFieldIndex] !== null &&\n d.source[colorFieldIndex] !== undefined);\n\n if (colorValFn) {\n color = colorValFn(dataArr, i, normalizedData);\n } else {\n color = axes.color.getColor(colorVal && colorVal.source[colorFieldIndex]);\n }\n\n style = this.getPathStyle(color);\n this.getDrawFn()({\n layer: this,\n container: group.node(),\n interpolate,\n points,\n className: seriesClassName,\n transition,\n style: style || {},\n connectNullData: config.connectNullData\n });\n }\n }, d => d[0].source[colorFieldIndex] || d[0].rowId);\n\n attachDataToVoronoi(this._voronoi, this._points);\n return this;\n }\n\n /**\n * Get the css styles need to be applied on the line path\n * @param {string} color Color value\n * @return {Object} Path styles\n */\n getPathStyle (color) {\n return {\n stroke: color,\n 'fill-opacity': '0'\n };\n }\n\n /**\n * Gets the nearest point closest to the given position\n * @param {number} x x position\n * @param {number} y y position\n * @return {Object} Nearest point information\n */\n getNearestPoint (x, y, config) {\n let searchRadius = config.searchRadius;\n const data = this.data();\n\n if (!data || (data && data.isEmpty())) {\n return null;\n }\n\n searchRadius = searchRadius !== undefined ? searchRadius : this.config().nearestPointThreshold;\n const point = this._voronoi.find(x, y, searchRadius);\n const dimensions = getObjProp(point, 'data', 'data', 'update');\n\n if (point) {\n const { source, rowId } = point.data.data;\n const identifiers = this.getIdentifiersFromData(source, rowId);\n return {\n id: identifiers,\n dimensions: [{\n x: dimensions.x,\n y: dimensions.y,\n width: 2,\n height: 2\n }],\n layerId: this.id()\n };\n }\n return null;\n }\n}\n","import {\n easeFns,\n selectElement,\n pathInterpolators,\n Symbols\n} from 'muze-utils';\n\nconst area = Symbols.area;\n/**\n * Draws a line from the points\n * Generates a svg path string\n * @param {Object} params Contains container, points and interpolate attribute.\n */\nconst /* istanbul ignore next */ drawArea = (params) => {\n let filteredPoints;\n const { layer, container, points, style, transition, className, connectNullData, interpolate } = params;\n\n const { effect: easeEffect, duration } = transition;\n const mount = selectElement(container);\n const curveInterpolatorFn = pathInterpolators[interpolate];\n const selection = mount.selectAll('path').data(points.length ? [points[0].className] : []);\n const [enterAreaPath, updateAreaPath] = ['enter', 'update'].map(e => area().curve(curveInterpolatorFn)\n .x(d => d[e].x)\n .y1(d => d[e].y)\n .y0(d => d[e].y0)\n .defined(d => d[e].y !== null\n ));\n\n filteredPoints = points;\n mount.attr('class', className);\n if (connectNullData) {\n filteredPoints = points.filter(d => d.update.y !== null);\n }\n const selectionEnter = selection.enter().append('path').attr('d', enterAreaPath(filteredPoints));\n selection.merge(selectionEnter).transition().ease(easeFns[easeEffect])\n .duration(duration)\n .on('end', layer.registerAnimationDoneHook())\n .attr('d', updateAreaPath(filteredPoints))\n .each(function (d) {\n const element = selectElement(this);\n element.attr('class', d);\n Object.keys(style).forEach(key => element.style(key, style[key]));\n });\n};\n\nexport default drawArea;\n","import { FieldType, InvalidAwareTypes } from 'muze-utils';\nimport { defaultConfig } from './default-config';\nimport { LineLayer } from '../line';\nimport drawArea from './renderer';\nimport './styles.scss';\nimport { STACK, ENCODING } from '../../enums/constants';\nimport {\n getAxesScales,\n positionPoints,\n getIndividualClassName,\n getValidTransformForAggFn,\n getColorMetaInf,\n resolveEncodingValues,\n sortData\n} from '../../helpers';\n\n/**\n * Area layer renders a closed path. The mark type of this layer is ```area```. This layer can be used\n * to create stacked or multi-series areas and vertical range area plots by using the encoding properties.\n *\n * To create this layer using layer configuration from canvas,\n * ```\n * canvas.layers([{\n * mark: 'area',\n * transform: {\n * type: 'stack' // Produces a stacked area.\n * }\n * }]);\n * ```\n *\n * @public\n *\n * @class\n * @module AreaLayer\n * @extends LineLayer\n */\nexport default class AreaLayer extends LineLayer {\n /** oation of line layer\n * @return {Object} Default configuration of layer\n */\n static defaultConfig () {\n return defaultConfig;\n }\n\n /**\n *\n *\n * @static\n *\n * @memberof AreaLayer\n */\n static formalName () {\n return 'area';\n }\n\n /**\n * Calculates the domain from data. It calls its parent class's method which is line layer\n * to get the domain and overwrites the domain according to its need.\n * @return {Array} Domain values\n */\n calculateDomainFromData (data, encodingFieldsInf, fieldsConfig) {\n const domains = super.calculateDomainFromData(data, fieldsConfig);\n [ENCODING.X, ENCODING.Y].forEach((type) => {\n const { [`${type}FieldType`]: fieldType } = encodingFieldsInf;\n if (fieldType === FieldType.MEASURE && domains[type] !== undefined) {\n domains[type][0] = Math.min(domains[type][0], 0);\n domains[type][1] = Math.max(0, domains[type][1]);\n }\n });\n return domains;\n }\n\n /**\n * Returns the drawing method of this layer\n * @return {Function} Draw method\n */\n getDrawFn () {\n return drawArea;\n }\n\n /**\n * Generates the x and y positions for each point\n * @param {Array} data Data Array\n * @param {Object} encoding Visual Encodings of the layer\n * @param {Object} axes Contains the axis\n * @return {Array} Array of points\n */\n translatePoints (data) {\n let points = [];\n const transformType = this.transformType();\n const axes = this.axes();\n const colorAxis = axes.color;\n const config = this.config();\n const fieldsConfig = this.data().getFieldsConfig();\n const { xField, yField, y0Field } = this.encodingFieldsInf();\n const {\n xAxis,\n yAxis\n } = getAxesScales(axes);\n const classNameFn = config.individualClassName;\n const isXDim = fieldsConfig[xField] && fieldsConfig[xField].def.type === FieldType.DIMENSION;\n const isYDim = fieldsConfig[yField] && fieldsConfig[yField].def.type === FieldType.DIMENSION;\n const key = isXDim ? 'x' : (isYDim ? 'y' : null);\n const minYVal = yAxis.domain()[0];\n const basePos = minYVal < 0 ? yAxis.getScaleValue(0) : yAxis.getScaleValue(minYVal);\n sortData(data, axes);\n points = data.map((d, i) => {\n let color;\n const xPx = xAxis.getScaleValue(d.x) + xAxis.getUnitWidth() / 2;\n const yPx = yAxis.getScaleValue(d.y);\n const y0Px = (y0Field || transformType === STACK) ? yAxis.getScaleValue(d.y0) : basePos;\n color = colorAxis.getColor(d.color);\n const invalidY = d.y instanceof InvalidAwareTypes;\n const invalidY0 = d.y0 instanceof InvalidAwareTypes;\n const resolvedValues = resolveEncodingValues({\n values: {\n x: xPx,\n y: yPx,\n y0: y0Px,\n color\n },\n data: d\n }, i, data, this);\n color = resolvedValues.color;\n const point = {\n enter: {\n x: xPx,\n y: invalidY ? null : basePos,\n y0: invalidY0 ? null : basePos\n },\n update: {\n x: xPx,\n y: invalidY ? null : resolvedValues.y,\n y0: invalidY0 ? null : resolvedValues.y0\n },\n source: d.source,\n rowId: d.rowId,\n className: classNameFn ? classNameFn(d, i, data, this) : '',\n style: {\n fill: color\n },\n meta: getColorMetaInf(color, colorAxis)\n };\n point.className = getIndividualClassName(d, i, data, this);\n this.cachePoint(d[key], point);\n return point;\n });\n points = positionPoints(this, points);\n points = points.filter((point) => {\n const update = point.update;\n return !isNaN(update.x) && !isNaN(update.y);\n });\n return points;\n }\n\n resolveTransformType () {\n this._transformType = getValidTransformForAggFn(this);\n }\n\n /**\n * Get the css styles need to be applied on the line path\n * @param {string} color Color value\n * @return {Object} Path styles\n */\n getPathStyle (color) {\n return {\n fill: color\n };\n }\n}\n\n","import { CLASSPREFIX } from '../../enums/constants';\n\nexport const defaultConfig = {\n classPrefix: CLASSPREFIX,\n defClassName: 'layer-arc',\n padding: { top: 1, bottom: 1, left: 1, right: 1 },\n className: '',\n interaction: {\n highlight: [{\n type: 'fill',\n intensity: [0, 0, -15, 0]\n }],\n fade: [{\n type: 'fill',\n intensity: [0, 0, +15, 0]\n }],\n focus: [{\n type: 'fill',\n intensity: [0, 0, +15, 0]\n }]\n },\n height: 100,\n width: 100,\n sort: '',\n colors: ['#F44336', 'blue', 'green', 'yellow', 'orange', 'purple'],\n transform: {\n type: 'identity'\n },\n encoding: {\n 'stroke-width': {\n value: '2px'\n },\n 'stroke-linejoin': {\n value: 'round'\n },\n angle: {\n value: '1'\n },\n radius: {\n value: '1'\n },\n opacity: {\n value: '1'\n },\n color: {\n value: '1'\n },\n shape: {\n value: '1'\n },\n size: {\n value: '1'\n }\n },\n transition: {\n effect: 'cubic',\n duration: 500\n },\n states: {\n highlight: {\n className: `${CLASSPREFIX}-layer-arc-highlight`\n },\n fadeout: {\n className: `${CLASSPREFIX}-layer-arc-fadeout`\n },\n selected: {\n className: `${CLASSPREFIX}-layer-arc-selected`\n }\n }\n};\n\n","import {\n makeElement,\n selectElement,\n getQualifiedClassName,\n isSimpleObject,\n Symbols,\n FieldType,\n ReservedFields\n} from 'muze-utils';\nimport { defaultConfig } from './default-config';\nimport { BaseLayer } from '../../base-layer';\nimport { getIndividualClassName, resolveEncodingValues, getColorMetaInf } from '../../helpers';\nimport { tweenPie, tweenExitPie, getPreviousPoint } from './arc-helper';\nimport './styles.scss';\n\nconst arc = Symbols.arc;\n\n/**\n * Arc Layer creates a plot with polar coordinates.\n *\n * @public\n *\n * @class\n * @module ArcLayer\n * @extends BaseLayer\n */\nexport default class ArcLayer extends BaseLayer {\n\n constructor (data, axes, config, dependencies) {\n super(data, axes, config, dependencies);\n this._prevPieData = {};\n }\n\n /**\n * returns the default configuration of the layer\n *\n * @static\n * @return {Object} Default configuration for arc layer\n * @memberof ArcLayer\n */\n static defaultConfig () {\n return defaultConfig;\n }\n\n static formalName () {\n return 'arc';\n }\n\n elemType () {\n return 'path';\n }\n\n /**\n *\n *\n * @param {Object} x\n * @param {Object} y\n * @return {}\n * @memberof ArcLayer\n */\n getNearestPoint (x, y, config = {}) {\n const dataPoint = selectElement(config.event.target).data()[0];\n if (isSimpleObject(dataPoint)) {\n const { source, rowId } = dataPoint;\n return {\n id: this.getIdentifiersFromData(source, rowId),\n layerId: this.id()\n };\n }\n return null;\n }\n\n /**\n *\n *\n * @param {*} set\n *\n * @memberof ArcLayer\n */\n getPlotElementsFromSet (set) {\n return selectElement(this.mount()).selectAll(this.elemType()).filter(d => set.indexOf(d.rowId) !== -1);\n }\n\n translatePoints (data) {\n const { angle, color: colorAxis, radius: radiusAxis } = this.axes();\n const pieIndex = {};\n const prevData = this._points[0] || [];\n const points = [];\n const angleV = {};\n\n this._prevPieData = {};\n prevData.forEach((e, index) => {\n this._prevPieData[e.rowId] = [e, index];\n pieIndex[e.index] = e;\n });\n data.forEach((d, i) => {\n const angles = angle.getScaleValue(d.angle);\n !angleV[d.angle] && (angleV[d.angle] = 0);\n const { startAngle, endAngle } = angles[angleV[d.angle]++];\n const uid = d.rowId;\n const resolvedEncodings = resolveEncodingValues({\n values: {\n radius: radiusAxis.getOuterRadius(d.radius),\n radius0: radiusAxis.getInnerRadius(d.radius0),\n color: colorAxis.getColor(d.color),\n angle0: startAngle,\n angle: endAngle,\n startAngle,\n endAngle,\n startAngle0: startAngle,\n endAngle0: endAngle\n },\n data: d\n }, i, data, this);\n const color = resolvedEncodings.color;\n points.push({\n source: d.source,\n index: i,\n enter: {},\n update: {\n angle0: resolvedEncodings.angle0,\n angle: resolvedEncodings.angle,\n radius0: resolvedEncodings.radius0,\n radius: resolvedEncodings.radius\n },\n color,\n meta: getColorMetaInf(resolvedEncodings.color, colorAxis),\n rowId: uid,\n _previousInfo: this._prevPieData[uid] ? this._prevPieData[uid][0] :\n getPreviousPoint(pieIndex, i, this)\n });\n });\n return points;\n }\n\n /**\n *\n *\n * @param {Object} container\n * @return {}\n * @memberof ArcLayer\n */\n render (container) {\n const measurement = this.measurement();\n const {\n classPrefix,\n defClassName,\n cornerRadius,\n padAngle,\n padRadius,\n transition\n } = this.config();\n const qualClassName = getQualifiedClassName(defClassName, this.id(), classPrefix);\n // This returns a function that generates the arc path based on the datum provided\n const path = this._arcFn = arc()\n .cornerRadius(cornerRadius)\n .startAngle(d => d.update.angle0 + Math.PI / 2)\n .endAngle(d => d.update.angle + Math.PI / 2)\n .padAngle(padAngle)\n .padRadius(padRadius)\n .outerRadius(d => d.update.radius)\n .innerRadius(d => d.update.radius0);\n\n this._points = this._normalizedData.map(arr => this.translatePoints(arr));\n\n // Creating the group that holds all the arcs\n const g = makeElement(selectElement(container), 'g', this._points, `${qualClassName[0]}-group`)\n .classed(`${qualClassName[1]}-group`, true)\n .attr('transform', `translate(${measurement.width / 2},\n ${measurement.height / 2})`);\n const tween = (elem) => {\n makeElement(elem, 'path', d => [d], `${qualClassName[0]}-path`)\n .style('fill', d => d.color)\n .transition()\n .duration(transition.duration)\n .on('end', this.registerAnimationDoneHook())\n .attrTween('d', (...params) => tweenPie(path, params))\n .attr('class', (d, i) => {\n const individualClass = getIndividualClassName(d, i, this._points, this);\n return `${qualClassName[0]}-path ${qualClassName[1]}-path-${d.index}\n ${individualClass}`;\n });\n };\n const consecutiveExits = [];\n let exitCounter = 0;\n const tweenExit = (elem, d) => {\n let exitArr = consecutiveExits[exitCounter];\n const oldExitCounter = exitCounter;\n if (!exitArr) {\n exitArr = [{ elem, datum: d }];\n } else if (exitArr[exitArr.length - 1].datum.index === d.index - 1) {\n exitArr.push({ elem, datum: d });\n } else {\n exitCounter++;\n }\n consecutiveExits[oldExitCounter] = exitArr;\n };\n // Creating groups for all the arcs present individually\n makeElement(g, 'g', d => d, `${qualClassName[0]}`,\n {\n update: tween,\n exit: tweenExit\n })\n .attr('class', (d, i) => `${qualClassName[0]} ${qualClassName[1]}-${i}`);\n tweenExitPie(consecutiveExits, transition, path);\n return this;\n }\n\n getPointsFromIdentifiers (identifiers) {\n if (!this.data()) {\n return [];\n }\n const fieldNames = identifiers[0];\n const values = identifiers.slice(1, identifiers.length);\n const pieSlices = selectElement(this.mount()).selectAll('path').data();\n const fieldsConfig = this.data().getFieldsConfig();\n\n const filteredPies = pieSlices.filter((tData) => {\n const { source, rowId } = tData;\n return fieldNames.every((field, idx) => {\n if (field in fieldsConfig && fieldsConfig[field].def.type === FieldType.DIMENSION) {\n return values.findIndex(d => d[idx] === source[fieldsConfig[field].index]) !== -1;\n } else if (field === ReservedFields.ROW_ID) {\n return values.findIndex(d => d[idx] === rowId) !== -1;\n } return true;\n });\n });\n\n const pieSliceInf = filteredPies[0];\n if (pieSliceInf) {\n const measurement = this.measurement();\n const centroid = this._arcFn.centroid(pieSliceInf);\n return [{\n x: centroid[0] + measurement.width / 2,\n y: centroid[1] + measurement.height / 2,\n width: 2,\n height: 2\n }];\n }\n return [];\n }\n}\n","import { getObjProp, interpolator, FieldType, selectElement } from 'muze-utils';\nimport { ANGLE, RADIUS, SIZE, COLOR } from '../../enums/constants';\n\nexport const getPreviousPoint = (prevData, currIndex, context) => {\n const prevArc = prevData[currIndex - 1];\n const nextArc = prevData[currIndex];\n const [startAngle, endAngle] = context.axes().angle.range();\n if (prevArc && nextArc) {\n return {\n update: {\n angle0: getObjProp(prevArc, 'update', 'angle'),\n angle: getObjProp(nextArc, 'update', 'angle0')\n }\n };\n } else if (!nextArc) {\n return {\n update: {\n angle0: (endAngle - 90) * Math.PI * 2 / 360,\n angle: (endAngle - 90) * Math.PI * 2 / 360\n }\n };\n }\n return {\n update: {\n angle0: (startAngle - 90) * Math.PI * 2 / 360,\n angle: (startAngle - 90) * Math.PI * 2 / 360\n }\n };\n};\n\nexport const tweenPie = (path, b) => {\n const datum = b[0];\n return function (t) {\n return path(interpolator()(datum._previousInfo, datum)(t));\n };\n};\n\nexport const tweenExitPie = (consecutiveExits, transition, path) => {\n if (consecutiveExits.length > 0) {\n consecutiveExits.forEach((consecutiveExitArr) => {\n const startAngle = consecutiveExitArr[0].datum.update.angle0;\n const endAngle = consecutiveExitArr[consecutiveExitArr.length - 1].datum.update.angle;\n const mid = (Math.PI * 2 * startAngle) / ((Math.PI * 2) + startAngle - endAngle);\n\n consecutiveExitArr.forEach((e) => {\n const { elem, datum } = e;\n\n elem.each(function () {\n const gElem = selectElement(this);\n gElem.selectAll('path')\n .transition()\n .duration(transition.duration)\n .attrTween('d', () => function (t) {\n return path(interpolator()(datum, {\n update: {\n angle0: mid,\n angle: mid,\n radius: datum.radius,\n radius0: datum.radius0\n }\n })(t));\n })\n .remove();\n gElem.remove();\n });\n });\n });\n }\n};\n\nexport const getFieldIndices = (encoding, fieldsConfig) => {\n const [angleField, radiusField, colorField, sizeField] = [ANGLE, RADIUS, COLOR, SIZE]\n .map(e => encoding[e].field);\n const [angleIndex, sizeIndex, radiusIndex] = [angleField, sizeField, radiusField]\n .map((e) => {\n const conf = fieldsConfig[e];\n if (conf && conf.def.type === FieldType.MEASURE) {\n return conf.index;\n }\n return null;\n });\n const colorIndex = getObjProp(fieldsConfig, colorField, 'index');\n return {\n angleIndex,\n sizeIndex,\n radiusIndex,\n colorIndex\n };\n};\n","import {\n setAttrs,\n setStyles,\n selectElement,\n makeElement,\n getSmartComputedStyle\n} from 'muze-utils';\n\n/**\n * Draws svg text in the specified container.\n * @param {SVGElement} container Container where labels will be appended.\n * @param {Array.} data Data of the elements.\n * @return {Selection} d3 selection of the elements.\n */\nconst drawText = (container, data, config, smartLabel) => {\n const selection = selectElement(container).selectAll('g').data(data);\n\n const selectionMerge = selection.enter().append('g')\n .each(function (dataObj) {\n setAttrs(this, dataObj.enter);\n })\n .merge(selection);\n const style = getSmartComputedStyle(selectElement(container), config.className);\n const fontSize = parseInt(style.fontSize, 10);\n\n smartLabel.setStyle(style);\n selectionMerge.each(function (dataObj) {\n const element = selectElement(this);\n const { update, text, color, textanchor, style: textStyle } = dataObj;\n const background = dataObj.background;\n let backgroundVal;\n if (backgroundVal = background.value) {\n const backgroundPadding = background.padding;\n let diff;\n const { width, height } = smartLabel.getOriSize(dataObj.text);\n const backgroundEl = makeElement(element, 'rect', [1]);\n\n if (textanchor === 'end') {\n diff = width;\n } else if (textanchor === 'start') {\n diff = 0;\n } else {\n diff = width / 2;\n }\n\n setAttrs(backgroundEl.node(), {\n x: update.x - diff - backgroundPadding / 2,\n y: update.y - fontSize - backgroundPadding / 2,\n width: width + backgroundPadding,\n height: height + backgroundPadding\n });\n background && setStyles(backgroundEl, {\n background: backgroundVal\n });\n }\n const textEl = makeElement(element, 'text', d => [d]).text(text);\n const textNode = textEl.node();\n textStyle && setStyles(textNode, textStyle);\n color && setStyles(textNode, {\n fill: color\n });\n dataObj.className && textEl.classed(dataObj.className, true);\n setAttrs(textNode, update);\n textEl.attr('text-anchor', textanchor);\n textEl.attr('alignment-baseline', dataObj['alignment-baseline']);\n textEl.attr('transform', `rotate(${dataObj.rotation} ${update.x} ${update.y})`);\n });\n selection.exit().remove();\n return selection;\n};\n\nexport default drawText;\n","import { CLASSPREFIX } from '../../enums/constants';\n\nexport const defaultConfig = {\n defClassName: 'layer-text',\n classPrefix: CLASSPREFIX,\n className: '',\n transform: {\n type: 'identity'\n },\n interaction: {\n highlight: [{\n type: 'fill',\n intensity: [0, 0, -15, 0]\n }],\n fade: [{\n type: 'fill',\n intensity: [0, 0, +15, 0]\n }],\n focus: [{\n type: 'fill',\n intensity: [0, 0, +15, 0]\n }]\n },\n transition: {\n effect: 'cubic',\n duration: 1000\n },\n encoding: {\n color: {},\n size: {},\n radius: {},\n angle: {},\n text: {\n value: '',\n formatter: (val, i, data, context) => {\n const valueParser = context.valueParser();\n return valueParser(val);\n },\n background: {\n padding: 10\n }\n },\n rotation: {\n value: 0\n },\n 'alignment-baseline': {\n value: 'middle'\n }\n },\n states: {\n highlight: {\n className: `${CLASSPREFIX}-layer-text-highlight`\n },\n fadeout: {\n className: `${CLASSPREFIX}-layer-text-fadeout`\n },\n selected: {\n className: `${CLASSPREFIX}-layer-text-selected`\n }\n }\n};\n","import {\n getQualifiedClassName,\n selectElement,\n setStyles,\n createElements\n} from 'muze-utils';\nimport { BaseLayer } from '../../base-layer';\nimport drawText from './renderer';\nimport { defaultConfig } from './default-config';\nimport { positionPoints, getIndividualClassName, resolveEncodingValues, getColorMetaInf, toCartesianCoordinates }\n from '../../helpers';\nimport { TEXT_ANCHOR_MIDDLE, ENCODING } from '../../enums/constants';\n\nimport './styles.scss';\n\nconst defaultEncoding = defaultConfig.encoding;\nconst alignmentBaseLine = defaultEncoding['alignment-baseline'].value;\nconst defRotation = defaultEncoding.rotation.value;\n\nconst pointTranslators = {\n polar: (data, config, layerInst) => {\n let points = [];\n const axes = layerInst.axes();\n const encoding = layerInst.config().encoding;\n const textEncoding = encoding.text;\n const { radius: radiusAxis, color: colorAxis, angle: angleAxis } = axes;\n const { formatter: textFormatter } = textEncoding;\n const backgroundEncoding = encoding.text.background;\n const backgroundPadding = backgroundEncoding.padding;\n const backgroundValue = backgroundEncoding.value;\n const angleV = {};\n for (let i = 0, len = data.length; i < len; i++) {\n const d = data[i];\n const source = d.source;\n const text = d.text;\n\n const color = colorAxis.getColor(d.color);\n const radius = radiusAxis.getOuterRadius(d.radius);\n const angles = angleAxis.getScaleValue(d.angle);\n !angleV[d.angle] && (angleV[d.angle] = 0);\n const { startAngle, endAngle } = angles[angleV[d.angle]++];\n\n const angle = (startAngle + endAngle) / 2;\n const resolvedVal = resolveEncodingValues({\n values: {\n angle,\n radius,\n color,\n text,\n startAngle,\n endAngle,\n rotation: defRotation,\n 'alignment-baseline': alignmentBaseLine\n },\n data: d\n }, i, data, layerInst);\n const point = {\n enter: {},\n update: {\n angle: resolvedVal.angle,\n radius: resolvedVal.radius\n },\n text: textFormatter ? textFormatter(text, i, data, layerInst) : resolvedVal.text,\n color: resolvedVal.color,\n rotation: resolvedVal.rotation,\n background: {\n value: backgroundValue instanceof Function ? backgroundValue(d, i, data, layerInst) : null,\n padding: backgroundPadding\n },\n 'alignment-baseline': resolvedVal['alignment-baseline'],\n meta: getColorMetaInf(resolvedVal.color, colorAxis),\n style: {},\n source,\n rowId: d.rowId\n };\n\n point.className = getIndividualClassName(d, i, data, layerInst);\n points.push(point);\n }\n\n points = toCartesianCoordinates(positionPoints(layerInst, points), layerInst.measurement());\n\n points = points.filter((d) => {\n const update = d.update;\n return !isNaN(update.x) && !isNaN(update.y);\n });\n return points;\n },\n cartesian: (data, config, layerInst) => {\n let points = [];\n const axes = layerInst.axes();\n const colorAxis = axes.color;\n const encoding = layerInst.config().encoding;\n const textEncoding = encoding.text;\n const { field: textField, value, formatter: textFormatter } = textEncoding;\n const fieldsConfig = layerInst.data().getFieldsConfig();\n\n const backgroundEncoding = encoding.text.background;\n const backgroundPadding = backgroundEncoding.padding;\n const backgroundValue = backgroundEncoding.value;\n const textFieldIndex = textField ? fieldsConfig[textField] && fieldsConfig[textField].index : -1;\n const xEnc = ENCODING.X;\n const yEnc = ENCODING.Y;\n for (let i = 0, len = data.length; i < len; i++) {\n const d = data[i];\n const row = d.source;\n const textValue = textField ? row[textFieldIndex] : value;\n\n const [xPx, yPx] = [xEnc, yEnc].map(type => (axes[type] ? axes[type].getScaleValue(d[type]) +\n axes[type].getUnitWidth() / 2 : 0));\n\n const color = colorAxis.getColor(d.color, colorAxis);\n const resolvedEncodings = resolveEncodingValues({\n values: {\n x: xPx,\n y: yPx,\n text: textValue,\n color,\n rotation: defRotation,\n 'alignment-baseline': alignmentBaseLine\n },\n data: d\n }, i, data, layerInst);\n const point = {\n enter: {},\n update: {\n x: resolvedEncodings.x,\n y: resolvedEncodings.y\n },\n text: textFormatter(resolvedEncodings.text, i, data, layerInst),\n color: resolvedEncodings.color,\n background: {\n value: backgroundValue instanceof Function ? backgroundValue(d, i, data, layerInst) : null,\n padding: backgroundPadding\n },\n 'alignment-baseline': resolvedEncodings['alignment-baseline'],\n rotation: resolvedEncodings.rotation,\n meta: getColorMetaInf(resolvedEncodings.color, colorAxis),\n style: {},\n source: d.source,\n rowId: d.rowId\n };\n\n point.className = getIndividualClassName(d, i, data, layerInst);\n points.push(point);\n }\n\n points = positionPoints(layerInst, points);\n points = points.filter((d) => {\n const update = d.update;\n return !isNaN(update.x) && !isNaN(update.y);\n });\n return points;\n }\n};\n\n/**\n * This layer is used to create labels for each data point. It has an encoding property ```text```\n * which determines from which field's data the value of the label will be taken. The text encoding\n * property is necessary for the layer to render the text.The mark type of this layer is ```text```.\n *\n * @public\n *\n * @class\n * @module TextLayer\n * @extends BaseLayer\n */\nexport default class TextLayer extends BaseLayer {\n /**\n * Returns the default configuration of the text layer\n * @return {Object} Default configuration of the text layer\n */\n static defaultConfig () {\n return defaultConfig;\n }\n\n static formalName () {\n return 'text';\n }\n\n elemType () {\n return 'text';\n }\n\n getPointTranslator (val) {\n return pointTranslators[val];\n }\n\n /**\n * Generates an array of objects containing x, y, width and height of the points from the data\n * @param {Array.} data Data Array\n * @param {Object} encoding Config\n * @param {Object} axes Axes object\n * @return {Array.} Array of points\n */\n translatePoints (data, config = {}) {\n return pointTranslators[this.coord()](data, config, this);\n }\n\n /**\n * Renders the plot in the given container\n * @param {SVGElement} container SVGElement which will hold the plot\n * @return {textLayer} Instance of text layer\n */\n render (container) {\n const config = this.config();\n const normalizedData = this._normalizedData;\n const className = config.className;\n const qualifiedClassName = getQualifiedClassName(config.defClassName, this.id(), config.classPrefix);\n const containerSelection = selectElement(container);\n\n containerSelection.classed(`${qualifiedClassName.join(' ')} ${className}`, true);\n createElements({\n data: normalizedData,\n append: 'g',\n selector: 'g',\n container,\n each: (dataArr, group) => {\n const node = group.node();\n const points = this.translatePoints(dataArr, {}, this);\n setStyles(node, {\n 'text-anchor': TEXT_ANCHOR_MIDDLE\n });\n drawText(node, points, {\n className: qualifiedClassName[0]\n }, this._dependencies.smartLabel);\n }\n });\n return this;\n }\n}\n","/* global Element, document */\nimport {\n makeElement,\n selectElement,\n easeFns,\n objectIterator,\n getSymbol\n} from 'muze-utils';\n\n/**\n *\n *\n * @param {*} str\n *\n */\nconst checkPath = (str) => {\n if (/^[mzlhvcsqta]\\s*[-+.0-9][^mlhvzcsqta]+/i.test(str) && /[\\dz]$/i.test(str) && str.length > 4) {\n return true;\n }\n return false;\n};\n\n/**\n *\n *\n * @param {*} d\n * @param {*} elem\n */\nconst createShape = function (d, groupElement) {\n const { shape, size, update } = d;\n\n if (shape instanceof Promise) {\n shape.then((res) => {\n d.shape = res;\n createShape(d, groupElement);\n });\n } else if (shape instanceof Element) {\n let newShape = shape.cloneNode(true);\n\n if (newShape.nodeName.toLowerCase() === 'img') {\n const src = newShape.src || newShape.href;\n newShape = document.createElementNS('http://www.w3.org/2000/svg', 'image');\n newShape.setAttribute('href', src);\n }\n const shapeElement = selectElement(newShape);\n if (newShape.nodeName === 'path' || newShape.nodeName === 'image') {\n shapeElement.attr('transform', `scale(${size / 100})`);\n } else {\n shapeElement.attr('height', size);\n shapeElement.attr('width', size);\n }\n shapeElement.attr('x', -size / 2);\n shapeElement.attr('y', -size / 2);\n makeElement(groupElement, () => newShape, [1]);\n } else if (typeof shape === 'string') {\n let pathStr;\n if (checkPath(shape)) {\n pathStr = shape;\n } else {\n pathStr = getSymbol(shape).size(size)(update);\n }\n makeElement(groupElement, 'path', data => [data]).attr('d', pathStr);\n } else {\n d.shape = 'circle';\n createShape(d, groupElement);\n }\n};\n\n/**\n * Draws symbols using d3 symbol api\n * @param {Object} params Contains the svg container, points and other symbol related attributes.\n */\n/* istanbul ignore next */ const drawSymbols = (params) => {\n const { layer, container, points, transition, className } = params;\n const { duration, effect, disabled } = transition;\n const mount = selectElement(container);\n\n mount.attr('class', className);\n return makeElement(mount, 'g', points, null, {\n enter: (group, d) => {\n const { enter } = d;\n group.attr('transform', `translate(${enter.x},${enter.y})`);\n },\n update: (group, d) => {\n createShape(d, group);\n const { update, style } = d;\n objectIterator(style, key => group.style(key, style[key]));\n group.attr('class', className);\n group.classed(d.className, true);\n if (!disabled) {\n group = group.transition()\n .duration(transition.duration)\n .on('end', layer.registerAnimationDoneHook());\n }\n group.attr('transform', `translate(${update.x},${update.y})`);\n },\n exit: (exitGroup) => {\n if (!disabled) {\n exitGroup.transition().ease(easeFns[effect])\n .duration(duration)\n .on('end', () => exitGroup.remove())\n .style('fill-opacity', 0)\n .style('stroke-opacity', 0);\n } else {\n exitGroup.remove();\n }\n }\n }, params.keyFn);\n};\n\nexport default drawSymbols;\n","import { CLASSPREFIX } from '../../enums/constants';\n\nexport const defaultConfig = {\n defClassName: 'layer-point',\n className: '',\n classPrefix: CLASSPREFIX,\n defColorStyle: 'stroke',\n interaction: {\n highlight: [{\n type: 'fill',\n intensity: [0, 0, -20, 0]\n }],\n fade: [{\n type: 'fill',\n intensity: [0, 0, +20, 0]\n }],\n focus: [{\n type: 'fill',\n intensity: [0, 0, +20, 0]\n }\n ]\n },\n innerPadding: 0.1,\n nearestPointThreshold: 10,\n transform: {\n type: 'identity'\n },\n transition: {\n effect: 'cubic',\n duration: 1000\n },\n encoding: {\n size: {\n value: 30\n },\n color: { },\n shape: {\n value: 'circle'\n },\n x: {},\n y: {},\n strokeOpacity: {\n value: 0.5\n },\n fillOpacity: {\n value: 0.5\n }\n },\n shapes: ['circle', 'cross', 'diamond', 'square', 'star', 'wye', 'triangle'],\n sizes: [20, 30, 40, 50, 60, 70]\n};\n","import {\n Voronoi,\n selectElement,\n getQualifiedClassName,\n makeElement,\n FieldType,\n Scales\n} from 'muze-utils';\nimport { BaseLayer } from '../../base-layer';\nimport drawSymbols from './renderer';\nimport { defaultConfig } from './default-config';\nimport { ENCODING } from '../../enums/constants';\nimport {\n attachDataToVoronoi,\n positionPoints,\n getPlotMeasurement,\n getIndividualClassName,\n getMarkId,\n getColorMetaInf,\n resolveEncodingValues\n} from '../../helpers';\n\nimport './styles.scss';\n\n/**\n * This layer is used to create various symbols for each data point. This is commonly used in\n * scatterplot visualizations. The mark type of this layer is ```point```.\n *\n * @public\n *\n * @class\n * @module PointLayer\n * @extends BaseLayer\n */\nexport default class PointLayer extends BaseLayer {\n\n /**\n * Creates an instance of PointLayer.\n * @param {*} args\n * @memberof PointLayer\n */\n constructor (...args) {\n super(...args);\n this._voronoi = new Voronoi();\n this._bandScale = Scales.band();\n }\n\n elemType () {\n return 'g';\n }\n\n /**\n * Returns the default configuration of the point layer\n * @return {Object} Default configuration of the point layer\n */\n static defaultConfig () {\n return defaultConfig;\n }\n\n static defaultPolicy (conf, userConf) {\n const config = BaseLayer.defaultPolicy(conf, userConf);\n const encoding = config.encoding;\n const transform = config.transform;\n const colorField = encoding.color && encoding.color.field;\n\n if (colorField) {\n transform.groupBy = colorField;\n }\n return config;\n }\n\n static formalName () {\n return 'point';\n }\n\n static drawFn () {\n return drawSymbols;\n }\n\n /**\n * Generates an array of objects containing x, y, width and height of the points from the data\n * @param {Array.} data Data Array\n * @param {Object} encoding Config\n * @param {Object} axes Axes object\n * @return {Array.} Array of points\n */\n translatePoints (data, config = {}) {\n let points = [];\n const encoding = this.config().encoding;\n const axes = this.axes();\n const {\n x,\n y\n } = encoding;\n const xField = x.field;\n const yField = y.field;\n const { size: sizeAxis, shape: shapeAxis } = axes;\n const fieldsConfig = this.data().getFieldsConfig();\n const isXDim = fieldsConfig[xField] && fieldsConfig[xField].def.type === FieldType.DIMENSION;\n const isYDim = fieldsConfig[yField] && fieldsConfig[yField].def.type === FieldType.DIMENSION;\n const key = isXDim ? ENCODING.X : (isYDim ? ENCODING.Y : null);\n const measurement = this.measurement();\n const colorAxis = axes.color;\n const { x: offsetX, y: offsetY } = config.offset;\n\n for (let i = 0, len = data.length; i < len; i++) {\n const d = data[i];\n const size = sizeAxis.getSize(d.size);\n const shape = shapeAxis.getShape(d.shape);\n\n let [xPx, yPx] = [ENCODING.X, ENCODING.Y].map((type) => {\n const value = d[type] === null ? undefined : d[type];\n const measure = type === ENCODING.X ? measurement.width : measurement.height;\n return !encoding[type].field ? measure / 2 : axes[type].getScaleValue(value);\n });\n\n xPx += offsetX;\n yPx += offsetY;\n\n let color = colorAxis.getColor(d.color);\n\n const resolvedEncodings = resolveEncodingValues({\n values: {\n x: xPx,\n y: yPx,\n color,\n shape,\n size,\n data: d\n },\n data: d\n }, i, data, this);\n color = resolvedEncodings.color;\n const style = {\n fill: color,\n stroke: color\n };\n const pos = {\n x: resolvedEncodings.x,\n y: resolvedEncodings.y\n };\n\n if (!isNaN(xPx) && !isNaN(yPx)) {\n const point = {\n enter: pos,\n update: pos,\n shape: resolvedEncodings.shape,\n size: Math.abs(resolvedEncodings.size),\n meta: getColorMetaInf(color, colorAxis),\n style,\n source: d.source,\n rowId: d.rowId\n };\n point.className = getIndividualClassName(d, i, data, this);\n points.push(point);\n this.cachePoint(d[key], point);\n }\n }\n points = positionPoints(this, points);\n return points;\n }\n\n /**\n * Renders the plot in the given container.\n *\n * @param {SVGElement} container SVGElement which will hold the plot\n * @return {BarLayer} Instance of bar layer\n */\n render (container) {\n let maxSize = 0;\n let seriesClassName;\n const config = this.config();\n const keys = this._transformedData.map(d => d.key);\n const { transition, className, defClassName, classPrefix } = config;\n const normalizedData = this._normalizedData;\n const containerSelection = selectElement(container);\n const qualifiedClassName = getQualifiedClassName(defClassName, this.id(), classPrefix);\n this._points = [];\n this._pointMap = {};\n\n containerSelection.classed(qualifiedClassName.join(' '), true).classed(className, true);\n\n this._points = this.generateDataPoints(normalizedData, keys);\n const schema = this.data().getSchema();\n makeElement(container, 'g', this._points, null, {\n update: (group, points) => {\n maxSize = Math.max(maxSize, ...points.map(d => d.size));\n seriesClassName = `${qualifiedClassName[0]}`;\n this.constructor.drawFn()({\n layer: this,\n container: group.node(),\n points,\n interpolate: config.interpolate,\n className: seriesClassName,\n transition,\n keyFn: v => getMarkId(v.source, schema)\n });\n }\n }, data => data[0].rowId);\n this._maxSize = Math.sqrt(maxSize / Math.PI) * 2;\n attachDataToVoronoi(this._voronoi, this._points);\n return this;\n }\n\n generateDataPoints (normalizedData, keys) {\n const [widthMetrics, heightMetrics] = getPlotMeasurement(this, keys);\n const offsetXValues = widthMetrics.offsetValues || [];\n const offsetYValues = heightMetrics.offsetValues || [];\n return normalizedData.map((dataArr, i) => {\n const measurementConf = this.getMeasurementConfig(offsetXValues[i], offsetYValues[i], widthMetrics.span,\n heightMetrics.span);\n return this.translatePoints(dataArr, measurementConf);\n }).filter(d => d.length);\n }\n\n getMeasurementConfig (offsetX, offsetY, widthSpan, heightSpan) {\n return {\n offset: {\n x: (offsetX || 0) + widthSpan / 2,\n y: (offsetY || 0) + heightSpan / 2\n },\n span: {\n x: widthSpan,\n y: heightSpan\n }\n };\n }\n\n /**\n * Gets the nearest point from a position.\n * @param {number} x x position\n * @param {number} y y position\n * @return {Object} Point details\n */\n getNearestPoint (x, y) {\n const distanceLimit = Math.max(this._maxSize, this.config().nearestPointThreshold);\n\n if (!this.data()) {\n return null;\n }\n\n const point = this._voronoi.find(x, y, distanceLimit);\n const dimensions = point && point.data.data.update;\n const radius = point ? Math.sqrt(point.data.data.size / Math.PI) : 0;\n\n if (point) {\n const { source, rowId } = point.data.data;\n const identifiers = this.getIdentifiersFromData(source, rowId);\n return {\n id: identifiers,\n dimensions: [{\n x: dimensions.x,\n y: dimensions.y,\n width: radius,\n height: radius\n }],\n layerId: this.id()\n };\n }\n return null;\n }\n}\n","import { makeElement, easeFns } from 'muze-utils';\n\n/**\n *\n *\n * @param {*} elem\n * @param {*} datum\n * @param {*} index\n * @param {*} context\n */\nconst transitionBars = (layer, elem, datum, index, context) => {\n const { transition } = context;\n const { duration, disabled, effect } = transition;\n const selection = elem;\n\n const selTransition = disabled ? selection :\n selection.transition()\n .duration(duration)\n .ease(easeFns[effect])\n .on('end', layer.registerAnimationDoneHook());\n const update = datum.update || datum;\n const updateStyle = datum.style || {};\n datum.className && selection.classed(datum.className, true);\n Object.entries(update).forEach(attr => (!isNaN(attr[1]) && selTransition.attr(attr[0], attr[1])));\n Object.entries(updateStyle).forEach(styleObj => selection.style(styleObj[0], styleObj[1]));\n};\n\n/**\n *\n *\n * @param {*} elem\n * @param {*} d\n */\nconst barEnterFn = (elem, d) => {\n const selection = elem;\n const enter = d.enter || {};\n Object.entries(enter).forEach(attr => (!isNaN(attr[1]) && selection.attr(attr[0], attr[1])));\n};\n\n/**\n * Draws rectangles by using d3 selection\n * @param {Object} params Contains container element and points\n * @return {Selection} Bar Selection\n */\n/* istanbul ignore next */ export const drawRects = (params) => {\n const { layer, points, container, keyFn } = params;\n const updateFns = {\n enter (elem, d) { barEnterFn(elem, d); },\n update (elem, d, i) { transitionBars(layer, elem, d, i, params); }\n };\n return makeElement(container, 'rect', points, null, updateFns, keyFn);\n};\n","import { CLASSPREFIX } from '../../enums/constants';\n\nexport const defaultConfig = {\n classPrefix: CLASSPREFIX,\n defClassName: 'layer-bar',\n className: '',\n interaction: {\n highlight: [{\n type: 'fill',\n intensity: [0, 0, -15, 0]\n }],\n fade: [{\n type: 'fill',\n intensity: [0, 0, +15, 0]\n }],\n focus: [{\n type: 'fill',\n intensity: [0, 0, +15, 0]\n }]\n },\n transform: {\n type: 'stack'\n },\n transition: {\n effect: 'cubic',\n duration: 1000\n },\n innerPadding: 0.1,\n encoding: {\n color: {},\n x: {},\n y: {},\n x0: {},\n y0: {}\n },\n states: {\n highlight: {\n className: `${CLASSPREFIX}-layer-bar-highlight`\n },\n fadeout: {\n className: `${CLASSPREFIX}-layer-bar-fadeout`\n },\n selected: {\n className: `${CLASSPREFIX}-layer-bar-selected`\n }\n }\n};\n\n","import { MeasureSubtype, DimensionSubtype } from 'muze-utils';\nimport { STACK } from '../../enums/constants';\nimport { positionPoints, getIndividualClassName, getColorMetaInf, resolveEncodingValues } from '../../helpers';\n\nconst positionRetriever = {\n x: (xPx, isNegativeVal, barBasePos) => (isNegativeVal ? [xPx, barBasePos] : [barBasePos, xPx]),\n y: (yPx, isNegativeVal, barBasePos) => (isNegativeVal ? [barBasePos, yPx] : [yPx, barBasePos])\n};\n\n/**\n *\n *\n * @param {*} type\n * @param {*} fieldInfo\n * @param {*} config\n * @param {*} data\n *\n */\nconst resolveDimByField = (type, axesInfo, config, data) => {\n const spaceType = type === 'x' ? 'width' : 'height';\n const [fieldType, axis] = [config[`${type}FieldType`], axesInfo[`${type}Axis`]];\n const {\n transformType,\n sizeEncoding,\n sizeConfig,\n measurement\n } = config;\n\n const sizeValue = sizeEncoding.value;\n let enter = 0;\n let pos;\n let space = 0;\n let enterSpace = 0;\n if (fieldType !== undefined) {\n if (config[`${type}0Field`]) {\n const minVal = data[type];\n const maxVal = data[`${type}0`];\n let min;\n let max;\n if (minVal === null || maxVal === null) {\n return {\n enterSpace: undefined,\n enter: undefined,\n pos: undefined,\n space: undefined\n };\n } else if (fieldType === MeasureSubtype.CONTINUOUS || fieldType === DimensionSubtype.TEMPORAL) {\n min = Math.min(minVal, maxVal);\n max = Math.max(minVal, maxVal);\n } else {\n min = minVal;\n max = maxVal;\n }\n const scales = type === 'x' ? [min, max] : [max, min];\n pos = axis.getScaleValue(scales[0]) + axis.getUnitWidth() / 2;\n space = Math.abs(axis.getScaleValue(scales[1]) - pos) + axis.getUnitWidth() / 2;\n\n enter = pos;\n enterSpace = 0;\n } else if (fieldType === DimensionSubtype.CATEGORICAL || fieldType === DimensionSubtype.TEMPORAL) {\n pos = axis.getScaleValue(data[type]) +\n (sizeConfig[type === 'x' ? 'barWidthOffset' : 'barHeightOffset'] || 0);\n\n space = sizeConfig[type === 'x' ? 'barWidth' : 'barHeight'];\n if (sizeValue !== undefined) {\n const diffPx = sizeValue * space;\n space -= diffPx;\n pos += diffPx / 2;\n }\n enter = pos;\n enterSpace = space;\n } else {\n const minDomVal = axis.domain()[0];\n const barBasePos = minDomVal < 0 ? axis.getScaleValue(0) : axis.getScaleValue(minDomVal);\n pos = axis.getScaleValue(data[type]);\n let endPos = axis.getScaleValue(data[`${type}0`]);\n\n enterSpace = 0;\n const isNegativeVal = data[type] < 0;\n if (transformType !== STACK) {\n [pos, endPos] = positionRetriever[type](pos, isNegativeVal, barBasePos);\n }\n space = Math.abs(pos - endPos);\n enter = barBasePos;\n }\n } else {\n pos = 0;\n space = measurement[spaceType];\n }\n\n return {\n enterSpace,\n enter,\n pos,\n space\n };\n};\n\n/**\n *\n *\n * @param {*} data\n * @param {*} config\n * @param {*} axes\n *\n */\nconst resolveDimensions = (data, config, axes) => {\n const axesInfo = {\n xAxis: axes.x,\n yAxis: axes.y\n };\n const {\n enterSpace: enterWidth,\n enter: enterX,\n pos: xPos,\n space: width\n } = resolveDimByField('x', axesInfo, config, data);\n\n const {\n enterSpace: enterHeight,\n enter: enterY,\n pos: yPos,\n space: height\n } = resolveDimByField('y', axesInfo, config, data);\n return {\n enter: {\n x: enterX,\n y: enterY,\n width: enterWidth,\n height: enterHeight\n },\n update: {\n x: xPos,\n y: yPos,\n width,\n height\n }\n };\n};\n\n/**\n * Generates an array of objects containing x, y, width and height of the bars from the data\n * @param {Array.} data Data Array\n * @param {Object} encoding Config\n * @param {Object} axes Axes object\n * @param {Object} conf config object for point generation\n * @return {Array.} Array of points\n */\nexport const getTranslatedPoints = (context, data, sizeConfig) => {\n let points = [];\n const encoding = context.config().encoding;\n const axes = context.axes();\n const colorAxis = axes.color;\n const sizeEncoding = encoding.size || {};\n const {\n x0Field,\n y0Field,\n xFieldSubType,\n yFieldSubType\n } = context.encodingFieldsInf();\n const measurement = context.measurement();\n const isXDim = xFieldSubType === DimensionSubtype.CATEGORICAL || xFieldSubType === DimensionSubtype.TEMPORAL;\n const isYDim = yFieldSubType === DimensionSubtype.CATEGORICAL || yFieldSubType === DimensionSubtype.TEMPORAL;\n const key = isXDim ? 'x' : (isYDim ? 'y' : null);\n const transformType = context.transformType();\n\n for (let i = 0, len = data.length; i < len; i++) {\n const d = data[i];\n const dimensions = resolveDimensions(d, {\n xFieldType: xFieldSubType,\n yFieldType: yFieldSubType,\n x0Field,\n y0Field,\n transformType,\n measurement,\n sizeConfig,\n sizeEncoding\n }, axes);\n\n let color = colorAxis.getColor(d.color);\n\n const update = dimensions.update;\n const resolvedEncodings = resolveEncodingValues({\n values: {\n x: update.x,\n y: update.y,\n width: update.width,\n height: update.height,\n color\n },\n data: d\n }, i, data, context);\n color = resolvedEncodings.color;\n const { x, y, width, height } = resolvedEncodings;\n if (!isNaN(x) && !isNaN(y) && d.rowId !== undefined) {\n let point = null;\n point = {\n enter: dimensions.enter,\n update: {\n x,\n y,\n width,\n height\n },\n source: d.source,\n rowId: d.rowId,\n style: {\n fill: color\n },\n meta: getColorMetaInf(color, colorAxis)\n };\n point.className = getIndividualClassName(d, i, data, context);\n points.push(point);\n // Store each point in a hashmap with key as the dimensional or temporal field value\n context.cachePoint(d[key], point);\n }\n }\n\n points = positionPoints(context, points);\n return points;\n};\n","import {\n getQualifiedClassName,\n selectElement,\n createElements,\n clipElement,\n DimensionSubtype,\n FieldType,\n MeasureSubtype,\n Scales,\n getNearestValue\n} from 'muze-utils';\nimport { BaseLayer } from '../../base-layer';\nimport { drawRects } from './renderer';\nimport { defaultConfig } from './default-config';\nimport { getPlotMeasurement, getValidTransformForAggFn } from '../../helpers';\nimport './styles.scss';\nimport { getTranslatedPoints } from './bar-helper';\n\nconst MEASURE = FieldType.MEASURE;\nconst scaleBand = Scales.band;\n\n/**\n * Bar layer creates rectangle marks. The mark type of this layer is ```bar```. This layer can be used\n * to create stacked or grouped bars, range bars, heatmap plots and also reference bands by using\n * the encoding properties.\n *\n * @public\n *\n * @class\n * @module BarLayer\n * @extends BaseLayer\n */\nexport default class BarLayer extends BaseLayer {\n /**\n * Creates an instance of bar layer\n */\n constructor (...params) {\n super(...params);\n this._bandScale = scaleBand();\n this._plotPadding = {\n x: 0,\n y: 0\n };\n this._plotSpan = {\n x: 0,\n y: 0\n };\n this._pointMap = {};\n }\n\n /**\n *\n *\n *\n * @memberof BarLayer\n */\n elemType () {\n return 'rect';\n }\n\n /**\n *\n *\n * @static\n *\n * @memberof BarLayer\n */\n static formalName () {\n return 'bar';\n }\n\n /**\n * Returns the default configuration of the bar layer\n * @return {Object} Default configuration of the bar layer\n */\n static defaultConfig () {\n return defaultConfig;\n }\n\n /**\n *\n *\n * @static\n * @param {*} conf\n * @param {*} userConf\n *\n * @memberof BarLayer\n */\n static defaultPolicy (conf, userConf) {\n const config = BaseLayer.defaultPolicy(conf, userConf);\n const encoding = config.encoding;\n const colorField = encoding.color.field;\n const transform = config.transform;\n\n if (colorField) {\n transform.groupBy = colorField;\n }\n return config;\n }\n\n /**\n *\n *\n * @param {*} data\n * @param {*} fieldsConfig\n *\n * @memberof BarLayer\n */\n calculateDomainFromData (data, encodingFieldInf, fieldsConfig) {\n const domain = super.calculateDomainFromData(data, encodingFieldInf, fieldsConfig);\n ['x', 'y'].forEach((d) => {\n if (encodingFieldInf[`${d}FieldType`] === MEASURE && domain[d]) {\n if (encodingFieldInf[`${d}0Field`]) {\n domain[d] = domain[d].sort((a, b) => a - b);\n } else {\n domain[d][0] = Math.min(domain[d][0], 0);\n domain[d][1] = Math.max(0, domain[d][1]);\n }\n }\n });\n return domain;\n }\n\n /**\n * Generates an array of objects containing x, y, width and height of the bars from the data\n * @param {Array.} data Data Array\n * @param {Object} encoding Config\n * @param {Object} axes Axes object\n * @param {Object} conf config object for point generation\n * @return {Array.} Array of points\n */\n translatePoints (data, sizeConfig) {\n return getTranslatedPoints(this, data, sizeConfig);\n }\n\n /**\n * Renders the plot in the given container\n * @param {SVGGroup} container SVGGroup where plot will be rendered.\n * @return {BarLayer} Instance of bar layer.\n */\n render (container) {\n const config = this.config();\n const transition = config.transition;\n const normalizedDataArr = this._normalizedData;\n const transformedData = this._transformedData;\n const keys = transformedData.map(d => d.key);\n const fieldsConfig = this.data().getFieldsConfig();\n const axes = this.axes();\n const height = axes.y && axes.y.scale().range()[0];\n const width = axes.x && axes.x.scale().range()[1];\n const defClassName = config.defClassName;\n const qualifiedClassName = getQualifiedClassName(defClassName, this.id(), config.classPrefix);\n const className = config.className;\n const containerSelection = selectElement(container);\n const dimensions = Object.values(fieldsConfig).filter(e => e.def.type === FieldType.DIMENSION)\n .map(e => e.index);\n containerSelection.classed(qualifiedClassName.join(' '), true);\n containerSelection.classed(className, true);\n clipElement(container, {\n x: 0,\n y: 0,\n width,\n height\n }, `id-${this.id()}`);\n\n this._points = this.generateDataPoints(normalizedDataArr, keys);\n\n createElements({\n data: this._points,\n container,\n selector: 'g',\n append: 'g',\n each: (points, group, i) => {\n const seriesClassName = `${qualifiedClassName[0]}-${keys[i] || i}`.toLowerCase();\n group.style('display', 'block');\n drawRects({\n layer: this,\n container: group.node(),\n points,\n className: seriesClassName,\n transition,\n style: {},\n keyFn: d => dimensions.map(key => d.source[key]).join('-')\n });\n }\n });\n return this;\n }\n\n /**\n *\n *\n * @param {*} normalizedData\n * @param {*} keys\n *\n * @memberof BarLayer\n */\n generateDataPoints (normalizedData, keys) {\n const [barWidthMetrics, barHeightMetrics] = getPlotMeasurement(this, keys);\n const barWidthOffsets = barWidthMetrics.offsetValues || [];\n const barHeightOffsets = barHeightMetrics.offsetValues || [];\n this._plotSpan = {\n x: barWidthMetrics.groupSpan || 0,\n y: barHeightMetrics.groupSpan || 0\n };\n this._plotPadding = {\n x: barWidthMetrics.padding || 0,\n y: barHeightMetrics.padding || 0\n };\n\n this._pointMap = {};\n return normalizedData.map((data, i) => this.translatePoints(data,\n {\n barWidth: barWidthMetrics.span,\n barWidthOffset: barWidthOffsets[i] || 0,\n barHeight: barHeightMetrics.span,\n barHeightOffset: barHeightOffsets[i] || 0\n }));\n }\n\n getPlotPadding () {\n return this._plotPadding;\n }\n\n resolveTransformType () {\n this._transformType = getValidTransformForAggFn(this);\n }\n\n /**\n * Gets the nearest point of the position passed.\n * @param {number} x x position\n * @param {number} y y position\n * @return {Object} Nearest point.\n */\n getNearestPoint (x, y) {\n if (!this.data()) {\n return null;\n }\n let axis;\n let value;\n let points;\n let uniqueFieldType;\n let uniqueFieldIndex;\n let filterData;\n let identifiers;\n let pointFound = null;\n const dataModel = this.data();\n const dataObj = dataModel.getData();\n const fieldsConfig = dataModel.getFieldsConfig();\n const axes = this.axes();\n const data = dataObj.data;\n const pointMap = this._pointMap;\n const {\n xField,\n yField,\n xFieldSubType,\n yFieldSubType\n } = this.encodingFieldsInf();\n\n if (xFieldSubType === MeasureSubtype.CONTINUOUS) {\n axis = axes.y;\n value = axis.invert(y);\n uniqueFieldIndex = fieldsConfig[yField].index;\n uniqueFieldType = yFieldSubType;\n } else {\n axis = axes.x;\n value = axis.invert(x);\n uniqueFieldIndex = fieldsConfig[xField].index;\n uniqueFieldType = xFieldSubType;\n }\n\n if (uniqueFieldType === DimensionSubtype.CATEGORICAL) {\n points = pointMap[value];\n }\n\n if (uniqueFieldType === DimensionSubtype.TEMPORAL) {\n filterData = [...new Set(data.map(d => d[uniqueFieldIndex]))];\n value = getNearestValue(filterData, value);\n points = pointMap[value];\n }\n const len = points && points.length;\n points && points.sort((p1, p2) => p1.update.y - p2.update.y);\n for (let i = 0; i < len; i++) {\n const point = points[i];\n const update = point.update;\n if (x >= update.x && x <= (update.width + update.x) && y >= update.y && y <= (update.height + update.y)) {\n pointFound = point;\n break;\n }\n pointFound = null;\n }\n\n const values = pointFound && pointFound.source;\n if (values) {\n identifiers = this.getIdentifiersFromData(values, pointFound.rowId);\n }\n return pointFound ? {\n dimensions: [pointFound.update],\n id: identifiers,\n layerId: this.id()\n } : pointFound;\n }\n\n getPlotSpan () {\n return this._plotSpan;\n }\n\n hasPlotSpan () {\n return true;\n }\n}\n","import { CLASSPREFIX } from '../../enums/constants';\n\nexport const defaultConfig = {\n defClassName: 'layer-tick',\n className: '',\n classPrefix: CLASSPREFIX,\n interaction: {\n highlight: [{\n type: 'stroke',\n intensity: [0, 0, -15, 0]\n }],\n fade: [{\n type: 'stroke',\n intensity: [0, 0, 15, 0]\n }],\n focus: [{\n type: 'stroke',\n intensity: [0, 0, 15, 0]\n }]\n },\n innerPadding: 0.1,\n transform: {\n type: 'identity'\n },\n transition: {\n effect: 'cubic',\n duration: 1000\n },\n interpolate: 'linear',\n encoding: {\n color: { },\n x: {},\n y: {},\n x0: {},\n y0: {},\n radius: {},\n radius0: {},\n angle: {},\n angle0: {},\n strokeOpacity: {\n value: 0.5\n },\n fillOpacity: {\n value: 0.5\n }\n },\n states: {\n highlight: {\n className: `${CLASSPREFIX}-layer-tick-highlight`\n },\n fadeout: {\n className: `${CLASSPREFIX}-layer-tick-fadeout`\n },\n selected: {\n className: `${CLASSPREFIX}-layer-tick-selected`\n }\n }\n};\n","import { selectElement, Symbols, pathInterpolators } from 'muze-utils';\n\nconst line = Symbols.line;\n\n/**\n * Draws ticks by using d3 selection\n * @param {Object} params Contains container element and points\n * @return {Selection} Ticks Selection\n */\nexport default /* istanbul ignore next */ (params) => {\n const { points, container, keyFn, className, interpolate } = params;\n const mount = selectElement(container);\n const ticks = mount.selectAll('path').data(points, keyFn);\n const ticksEnter = ticks.enter().append('path');\n\n mount.attr('class', className || '');\n ticksEnter.each(function (d) {\n const selection = selectElement(this);\n const enter = d.enter || {};\n Object.entries(enter).forEach(attr => (!isNaN(attr[1]) && selection.attr(attr[0], attr[1])));\n });\n\n ticks.exit().remove();\n return ticks.merge(ticksEnter)\n .each(function (d) {\n const selection = selectElement(this);\n const update = d.update;\n const updateStyle = d.style || {};\n const x0 = update.x0 !== undefined ? update.x0 : update.x;\n const y0 = update.y0 !== undefined ? update.y0 : update.y;\n const curveInterpolatorFn = pathInterpolators[interpolate];\n const linepath = line()\n .curve(curveInterpolatorFn)\n .x(e => e[0])\n .y(e => e[1]);\n d.className && selection.classed(d.className, true);\n selection.attr('d', linepath([[update.x, update.y], [x0, y0]]));\n Object.entries(updateStyle).forEach(styleObj => selection.style(styleObj[0], styleObj[1]));\n });\n};\n\n","import { FieldType } from 'muze-utils';\nimport { PointLayer } from '../point';\nimport { defaultConfig } from './default-config';\nimport { ENCODING } from '../../enums/constants';\nimport drawTicks from './renderer';\nimport './styles.scss';\nimport { getAxesScales, positionPoints, getIndividualClassName,\n getColorMetaInf, resolveEncodingValues, toCartesianCoordinates } from '../../helpers';\n\nconst pointTranslators = {\n polar: (data, config = {}, layerInst) => {\n const axes = layerInst.axes();\n let points = [];\n const { radius: radiusAxis, angle: angleAxis, angle0: angle0Axis } = axes;\n const measurement = layerInst.measurement();\n\n const colorAxis = axes.color;\n const angleV = {};\n const angle0V = {};\n for (let i = 0, len = data.length; i < len; i++) {\n const d = data[i];\n const color = colorAxis.getColor(d.color);\n const angles = angleAxis.getScaleValue(d.angle);\n !angleV[d.angle] && (angleV[d.angle] = 0);\n const { startAngle, endAngle } = angles[angleV[d.angle]++];\n const angles0 = angle0Axis.getScaleValue(d.angle0);\n !angle0V[d.angle0] && (angle0V[d.angle0] = 0);\n const { startAngle: startAngle0, endAngle: endAngle0 } = angles0[angle0V[d.angle0]++];\n const radius = radiusAxis.getOuterRadius(d.radius);\n const angle = (startAngle + endAngle) / 2;\n const angle0 = (startAngle0 + endAngle0) / 2;\n const resolvedVal = resolveEncodingValues({\n values: {\n radius,\n radius0: radiusAxis.getInnerRadius(d.radius0),\n color,\n angle,\n angle0,\n startAngle,\n endAngle,\n startAngle0,\n endAngle0\n },\n data: d\n }, i, data, layerInst);\n const point = {\n enter: {},\n update: {\n radius: resolvedVal.radius,\n radius0: resolvedVal.radius0,\n angle: resolvedVal.angle,\n angle0: resolvedVal.angle0\n },\n style: {\n stroke: resolvedVal.color\n },\n source: d.source,\n rowId: d.rowId,\n meta: getColorMetaInf(resolvedVal.color, colorAxis)\n };\n point.className = getIndividualClassName(d, i, data, layerInst);\n points.push(point);\n }\n points = toCartesianCoordinates(positionPoints(layerInst, points), measurement, true);\n return points;\n },\n cartesian: (data, config = {}, layerInst) => {\n const axes = layerInst.axes();\n let points = [];\n const {\n xAxis,\n yAxis\n } = getAxesScales(axes);\n const {\n xField,\n yField,\n x0Field,\n y0Field,\n xFieldType,\n yFieldType\n } = layerInst.encodingFieldsInf();\n const isXDim = xFieldType === FieldType.DIMENSION;\n const isYDim = yFieldType === FieldType.DIMENSION;\n const key = isXDim ? ENCODING.X : (isYDim ? ENCODING.Y : null);\n const measurement = layerInst.measurement();\n const colorAxis = axes.color;\n const { x: offsetX, y: offsetY } = config.offset;\n const { x: xSpan, y: ySpan } = config.span;\n for (let i = 0, len = data.length; i < len; i++) {\n let xPx;\n let x0Px;\n let y0Px;\n let yPx;\n const d = data[i];\n const row = d.source;\n if (xField) {\n xPx = xAxis.getScaleValue(d.x) + offsetX;\n x0Px = xPx + xSpan;\n }\n\n if (yField) {\n yPx = yAxis.getScaleValue(d.y) + offsetY;\n y0Px = yPx !== null ? yPx + ySpan : null;\n }\n\n if (!xField) {\n xPx = 0;\n x0Px = measurement.width;\n if (!isNaN(yPx)) {\n yPx += ySpan / 2;\n y0Px = yPx;\n }\n }\n\n if (!yField) {\n yPx = 0;\n y0Px = measurement.height;\n x0Px = xPx += xSpan / 2;\n }\n\n if (x0Field) {\n x0Px = xAxis.getScaleValue(d.x0) + xSpan;\n yPx += ySpan / 2;\n y0Px -= ySpan / 2;\n }\n\n if (y0Field) {\n y0Px = yAxis.getScaleValue(d.y0) + ySpan;\n xPx += xSpan / 2;\n x0Px -= xSpan / 2;\n }\n const color = colorAxis.getColor(d.color);\n const resolvedEncodings = resolveEncodingValues({\n values: {\n x: xPx,\n y: yPx,\n x0: x0Px,\n y0: y0Px,\n color\n },\n data: d\n }, i, data, layerInst);\n\n if (!isNaN(xPx) && !isNaN(yPx)) {\n const point = {\n enter: {},\n update: {\n x: resolvedEncodings.x,\n y: resolvedEncodings.y,\n x0: resolvedEncodings.x0,\n y0: resolvedEncodings.y0\n },\n style: {\n stroke: resolvedEncodings.color\n },\n source: row,\n rowId: d.rowId,\n meta: getColorMetaInf(resolvedEncodings.color, colorAxis)\n };\n point.className = getIndividualClassName(d, i, data, layerInst);\n points.push(point);\n layerInst.cachePoint(d[key], point);\n }\n }\n points = positionPoints(layerInst, points);\n return points;\n }\n};\n\n/**\n * This layer is used to create small lines. The orientation of the line is determined by the positional\n * encoding properties x0 and y0. The mark type of the layer is ```tick```.\n *\n * @public\n *\n * @class\n * @module TickLayer\n * @extends BaseLayer\n */\nexport default class TickLayer extends PointLayer {\n\n /**\n *\n *\n * @staticg\n *\n * @memberof TickLayer\n */\n static defaultConfig () {\n return defaultConfig;\n }\n\n /**\n *\n *\n * @static\n *\n * @memberof TickLayer\n */\n static formalName () {\n return 'tick';\n }\n\n /**\n *\n *\n * @static\n *\n * @memberof TickLayer\n */\n static drawFn () {\n return drawTicks;\n }\n\n /**\n *\n *\n *\n * @memberof TickLayer\n */\n elemType () {\n return 'path';\n }\n\n /**\n * Generates an array of objects containing x, y, width and height of the points from the data\n * @param {Array.} data Data Array\n * @param {Object} encoding Config\n * @param {Object} axes Axes object\n * @return {Array.} Array of points\n */\n translatePoints (data, config) {\n return pointTranslators[this.coord()](data, config, this);\n }\n\n getMeasurementConfig (offsetX, offsetY, widthSpan, heightSpan) {\n return {\n offset: {\n x: (offsetX || 0),\n y: (offsetY || 0)\n },\n span: {\n x: widthSpan,\n y: heightSpan\n }\n };\n }\n}\n","export const AREA_LAYER = 'area';\nexport const ARC_LAYER = 'arc';\nexport const LINE_LAYER = 'line';\nexport const TEXT_LAYER = 'text';\nexport const POINT_LAYER = 'point';\nexport const BAR_LAYER = 'bar';\nexport const TICK_LAYER = 'tick';\nexport const SIMPLE_LAYER = 'simple';\nexport const BASE_LAYER = 'base';\n","import { isSimpleObject, mergeRecursive, getObjProp } from 'muze-utils';\n\nconst parseLayerDefinition = (sink, definition, layerDef, layerType) => {\n for (const key in definition) {\n if (Object.hasOwnProperty.call(definition, key)) {\n let strs;\n let propValue;\n const def = definition[key];\n if (isSimpleObject(def)) {\n sink[key] = {};\n parseLayerDefinition(sink[key], def, layerDef, layerType);\n } else if (typeof def === 'string' && (strs = def.split('.')) && strs[0] === layerType) {\n propValue = getObjProp(layerDef, ...strs.slice(1, strs.length));\n if (propValue !== undefined) {\n sink[key] = propValue;\n }\n } else {\n sink[key] = def;\n }\n }\n }\n};\n\nconst sanitizeEncoding = (encoding) => {\n // Create object for each encoding value if encoding value is a string\n for (const key in encoding) {\n if (typeof encoding[key] === 'string') {\n encoding[key] = {\n field: encoding[key]\n };\n }\n }\n};\n\n/**\n * Layer Factory creates layers based on the layer type. All types of layers needs to register in\n * the layer factory. For getting a layer instance, getLayer method needs to invoked with the\n * layerType and other arguments. It also registers the definition of composite layers.\n *\n * @public\n *\n * @module LayerFactory\n */\nconst layerFactory = (() => {\n const compositeLayers = {};\n const factoryObj = {\n setLayerRegistry: (reg) => {\n factoryObj._layerRegistry = reg;\n },\n getSerializedConf: (mark, layerDef) => {\n let serializedDefs;\n const defs = compositeLayers[mark];\n const newConf = mergeRecursive({}, layerDef);\n\n // If it is a composite layer then resolve all the definitions of each unit layer\n if (defs) {\n serializedDefs = defs.map((unitLayerDef) => {\n const sDef = {};\n parseLayerDefinition(sDef, unitLayerDef, newConf, mark);\n sanitizeEncoding(sDef.encoding);\n return sDef;\n });\n } else {\n const encoding = newConf.encoding;\n // Create object for each encoding value if encoding value is a string\n sanitizeEncoding(encoding);\n serializedDefs = newConf;\n }\n\n return serializedDefs;\n },\n getLayerInstance: (layerDef, ...params) => {\n const layerRegistry = factoryObj._layerRegistry;\n layerDef = !(layerDef instanceof Array) ? [layerDef] : layerDef;\n const instances = layerDef.map((layerObj) => {\n const layerConstructor = layerRegistry[layerObj.mark];\n return layerConstructor.create(...params);\n });\n return instances.length === 1 ? instances[0] : instances;\n },\n getLayerClass: mark => factoryObj._layerRegistry[mark],\n /**\n * Registers a new composite layer definition in the layer factory.\n *\n * @public\n *\n * @param {string} layerType Mark type of the new composite layer.\n * @param {Array} layerDefs Layer definitions of the composite layer.\n */\n composeLayers: (layerType, layerDefs) => {\n compositeLayers[layerType] = layerDefs;\n },\n sanitizeLayerConfig: (layerDef) => {\n const newConf = mergeRecursive({}, layerDef);\n sanitizeEncoding(newConf.encoding);\n return newConf;\n }\n };\n return factoryObj;\n})();\n\nexport default layerFactory;\n","import layerFactory from './layer-factory';\n\nexport default layerFactory;\n","import { AreaLayer } from './layers/area';\nimport { ArcLayer } from './layers/arc';\nimport { LineLayer } from './layers/line';\nimport { TextLayer } from './layers/text';\nimport { PointLayer } from './layers/point';\nimport { BarLayer } from './layers/bar';\nimport { BaseLayer } from './base-layer';\nimport * as LAYER_TYPES from './enums/layer-types';\nimport { TickLayer } from './layers/tick';\n\nexport const DEFAULT_LAYERS = {\n [LAYER_TYPES.AREA_LAYER]: AreaLayer,\n [LAYER_TYPES.ARC_LAYER]: ArcLayer,\n [LAYER_TYPES.LINE_LAYER]: LineLayer,\n [LAYER_TYPES.TEXT_LAYER]: TextLayer,\n [LAYER_TYPES.POINT_LAYER]: PointLayer,\n [LAYER_TYPES.TICK_LAYER]: TickLayer,\n [LAYER_TYPES.BAR_LAYER]: BarLayer,\n [LAYER_TYPES.BASE_LAYER]: BaseLayer\n};\n","import { ROWS, COLUMNS, COLOR, SHAPE, SIZE, DETAIL, LAYERS, TRANSFORM, CONFIG } from '../enums/constants';\n\n/**\n * This is the local options semantics based on which setters getters are created and reactivity is initiated.\n * This local object is only valid for Artboard.\n * Artboard merges global and local object both to the model\n *\n * Format\n * PROPERTRY_NAME: {\n * value: // default value of the property,\n * meta: {\n * typeCheck: // The setter value will be checked using this. If the value is function then the setter value\n * // is passed as args.\n * typeExpected: // The output of typecheck action will be tested against this. Truthy value will set the\n * // value to the setter\n * sanitizaiton: // Need for sanitization before type is checked\n * }\n * }\n *\n * @module\n */\n\nexport default {\n [CONFIG]: {},\n [ROWS]: {},\n [COLUMNS]: {},\n [COLOR]: {},\n [SHAPE]: {},\n [SIZE]: {},\n [DETAIL]: {},\n [LAYERS]: {},\n [TRANSFORM]: {}\n};\n","import { ERROR_MSG } from 'muze-utils';\n\n/**\n * Interfaces for VisualGroup. Any new VisualGroup has to implement this class.\n * @class SimpleGroup\n */\nclass SimpleGroup {\n\n /**\n * This method is used to set or get the DataModel instance.\n *\n * @param {DataModel | undefined} dataModel Instance of datamodel.\n\n * @memberof SimpleGroup\n */\n data () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * This method is used to set or get the group specific configuration\n * properties\n *\n * @param {Object | undefined} configObj The input configuration.\n * or instance of visual group.\n * @memberof SimpleGroup\n */\n config () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * This method is used to return a serialized representation of the\n * instance's properties.\n *\n * @memberof SimpleGroup\n */\n serialize () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * This method is used to get or set the measurement object which houses\n * layout properties like width and height.\n *\n * @param {Object | undefined} mObj The measurement properties.\n * @memberof SimpleGroup\n */\n measurement () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n}\n\nexport default SimpleGroup;\n","import { ERROR_MSG } from 'muze-utils';\n\n/**\n *\n *\n * @export\n * @class Variable\n */\nexport default class Variable {\n\n /**\n *\n *\n * @memberof Variable\n */\n type () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n *\n *\n * @memberof Variable\n */\n toString () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n}\n","import Variable from './variable';\n\n/**\n * This is a wrapper on top of multiple variables which are of same type but they are shown in the same axis.This is\n * required in case of range plots or ohlc plots where one plot is mapped to multiple measure fields. At that time,\n * we need to create a composed variable from multiple variables. This class just wraps them into one variable instance\n * and provides methods to get the type and other common functionalities which can be performed on a simple variable\n * instance.\n *\n * @public\n * @class ComposeVars\n */\nclass ComposedVars extends Variable {\n\n /**\n * Creates an instance of ComposeVars.\n *\n * @param {Array} vars Array of SimpleVars.\n */\n constructor (...vars) {\n super();\n this.vars(vars);\n }\n\n vars (...params) {\n if (params.length) {\n this._vars = params[0];\n return this;\n }\n return this._vars;\n }\n\n data (...dm) {\n if (dm.length) {\n this.vars().forEach(d => d.data(dm[0]));\n this._data = dm[0];\n return this;\n }\n return this._data;\n }\n\n /**\n * Get all the field names from composed variable instance.\n *\n * @public\n * @return {Array} Array of field names.\n */\n getMembers () {\n const vars = this.vars();\n return vars.map(member => member.getMembers()[0]);\n }\n\n /**\n * Type of field associated with this composed variable.\n *\n * @return {string} Type of variable (Measure/Dimension).\n */\n type () {\n return this.vars()[0].type();\n }\n\n toString () {\n return this.vars().map(d => d.toString()).join(',');\n }\n\n /**\n * Returns the number formatter function of the variable.\n *\n * @return {Function} Number formatter function of the variable.\n */\n numberFormat () {\n return this.vars()[0].numberFormat();\n }\n\n format (values) {\n return this.vars()[0].format(values);\n }\n\n /**\n * Returns the subtype of the fields associated with this variable instance.\n *\n * @public\n * @return {string} Subtype of the variable.\n */\n subtype () {\n return this.vars()[0].subtype();\n }\n\n /**\n * Returns the consecutive minimum difference of the field values.\n *\n * @public\n * @return {number} Minimum consecutive difference.\n */\n getMinDiff () {\n return this.vars()[0].getMinDiff();\n }\n\n /**\n * Returns the display name of the fields.\n *\n * @return {string} returns the display name.\n */\n displayName () {\n return this.vars().map(d => d.displayName()).join(',');\n }\n}\n\nexport default ComposedVars;\n","import { DateTimeFormatter, retrieveFieldDisplayName, DimensionSubtype } from 'muze-utils';\nimport Variable from './variable';\n\n/**\n * This is a wrapper on top of fields passed in rows or columns in canvas. This is used to get the type of field or\n * get min difference from the field values.\n *\n * @public\n * @class SimpleVariable\n */\nexport default class SimpleVariable extends Variable {\n\n /**\n * Creates an instance of simple variable instance.\n *\n * @param {string} name Field name.\n */\n constructor (name) {\n super();\n this.oneVar(name);\n }\n\n /**\n * Gets the field name associated with this variable instance.\n *\n * @public\n * @return {string} Name of the field.\n */\n oneVar (...oneV) {\n if (oneV.length) {\n this._oneVar = oneV[0];\n return this;\n }\n return this._oneVar;\n }\n\n data (...dm) {\n if (dm.length) {\n this._data = dm[0];\n return this;\n }\n return this._data;\n }\n\n toString () {\n return this.oneVar();\n }\n\n /**\n * Gets the number formatter function of this variable.\n *\n * @public\n * @return {Function} Number formatter function.\n */\n numberFormat () {\n if (this.type() === 'measure') {\n const formatter = this.data().getFieldspace().getMeasure()[this.oneVar()];\n return formatter.numberFormat();\n } return val => val;\n }\n\n format (values) {\n if (values && this.subtype() === 'temporal') {\n const formatter = this.data().getFieldspace().getDimension()[this.oneVar()].schema().format;\n const dtFormat = new DateTimeFormatter(formatter);\n values = values.map(e => dtFormat.getNativeDate(e));\n }\n return values;\n }\n\n /**\n * Returns a formatter function which transforms the input value to its original form.\n *\n * @public\n * @return {Function} Returns raw formatter function.\n */\n rawFormat () {\n if (this.subtype() === DimensionSubtype.TEMPORAL) {\n const dateFormat = this.data().getFieldspace().getDimension()[this.oneVar()].schema().format;\n return val => DateTimeFormatter.formatAs(val, dateFormat);\n }\n return val => val;\n }\n\n /**\n * Return the field names associated with this variable instance.\n *\n * @public\n * @return {Array} Array of fields.\n */\n getMembers () {\n return [this.oneVar()];\n }\n\n /**\n * Returns the type of the variable. Whether it is measure or dimension.\n *\n * @public\n * @return {string} Type of variable.\n */\n type () {\n const fieldDef = this.data().getFieldsConfig()[this.oneVar()].def;\n return fieldDef.type;\n }\n\n /**\n * Returns the subtype of the variable. Subtype can be categorical or temporal. If no subtype is found, then it\n * returns the type of the variable.\n *\n * @public\n * @return {string} Subtype of variable.\n */\n subtype () {\n const fieldDef = this.data().getFieldsConfig()[this.oneVar()].def;\n return fieldDef.subtype || fieldDef.type;\n }\n\n /**\n * Returns the minimum consecutive difference between the data values of this variable.\n *\n * @return {number} Minimum consecutive difference.\n */\n getMinDiff () {\n const fieldSpace = this.data().getFieldspace();\n return fieldSpace.fieldsObj()[this.oneVar()].minimumConsecutiveDifference();\n }\n\n /**\n * Returns true if two variable instances are same.If both variable has the same field names, they are equal.\n *\n * @return {Boolean} Whether two variable instances are same.\n */\n equals (varInst) {\n return this.oneVar() === varInst.oneVar();\n }\n\n /**\n * Returns the display name of the field.\n *\n * @return {string} returns the display name.\n */\n displayName () {\n return retrieveFieldDisplayName(this.data(), this.oneVar());\n }\n}\n","import { ComposedVars, SimpleVariable } from '../variable';\nimport { DIMENSION, COLUMNS, ROWS, TEMPORAL } from '../enums/constants';\n\n/**\n * Gets the list of fields in a sorted order by measurement and dimension\n *\n * @param {Array} fieldList List of fields in the view\n * @param {Object} fieldMap Mapping of fields in the datamodel\n * @return {Array} fields sorted by measurement and dimensions\n */\nconst orderFields = (fieldArray, type) => {\n const dimensionArr = [[], []];\n const measureArr = [[], []];\n const temporalArr = [[], []];\n const categoricalArr = [[], []];\n\n fieldArray.forEach((fieldList, index) => {\n fieldList.forEach((field) => {\n if (field.type() === DIMENSION) {\n dimensionArr[index].push(field);\n field.subtype() === TEMPORAL ? temporalArr[index].push(field) : categoricalArr[index].push(field);\n } else {\n measureArr[index].push(field);\n }\n });\n });\n\n const numOfMeasures = measureArr[0].length + (measureArr[1] ? measureArr[1].length : 0);\n\n // Single array of fields\n if (!fieldArray[1]) {\n // Push measures to bottom\n measureArr[1] = type === COLUMNS ? measureArr[0] : [];\n // Push measures to left\n measureArr[0] = type !== COLUMNS ? measureArr[0] : [];\n // Bottom and right dimensions empty\n dimensionArr[1] = [];\n // Left and top filled with dimensions\n dimensionArr[0] = dimensionArr[0];\n if (numOfMeasures === 0) {\n const allDimensions = [...dimensionArr[0], ...dimensionArr[1]];\n if (type === COLUMNS) {\n dimensionArr[1] = allDimensions[allDimensions.length - 1] ? [allDimensions[allDimensions.length - 1]]\n : [];\n allDimensions.splice(-1, 1);\n } else {\n dimensionArr[1] = [];\n }\n dimensionArr[0] = [...allDimensions];\n }\n }\n\n if (dimensionArr[0].length && dimensionArr[1].length && numOfMeasures > 0) {\n dimensionArr[0] = [...dimensionArr[0], ...dimensionArr[1]];\n dimensionArr[1] = [];\n }\n return {\n fields: dimensionArr.map((list, i) => (i === 1 ?\n measureArr[i].concat(dimensionArr[i]) : dimensionArr[i].concat(measureArr[i]))),\n dimensions: [...dimensionArr[0], ...dimensionArr[1]],\n measures: [...measureArr[0], ...measureArr[1]],\n temporal: [...temporalArr[0], ...temporalArr[1]],\n categorical: [...categoricalArr[0], ...categoricalArr[1]]\n };\n};\n\n/**\n * Gets the list of normalized fields\n *\n * @param {Array} fields List of fields in the view\n * @param {Object} fieldMap Mapping of fields in the datamodel\n * @return {Array} fields normalized by measurement and dimensions\n */\nconst normalizeFields = (config, type) => {\n const fieldsArr = [];\n const fields = config[type];\n\n if (!(fields[0] instanceof Array)) {\n fieldsArr[0] = fields;\n } else {\n fieldsArr[0] = fields[0] || [];\n fieldsArr[1] = fields[1] || [];\n }\n return fieldsArr;\n};\n\n/**\n *\n *\n * @param {*} fields\n * @param {*} datamodel\n *\n */\nconst convertToVar = (datamodel, fields) => {\n const vars = [];\n\n fields && fields.forEach((field) => {\n if (field instanceof ComposedVars) {\n vars.push(field);\n field.data(datamodel);\n } else {\n vars.push(new SimpleVariable(field).data(datamodel));\n }\n });\n return vars;\n};\n\n/**\n *\n *\n * @param {*} rows\n * @param {*} columns\n * @param {*} datamodel\n *\n */\nexport const transformFields = (datamodel, config) => {\n const [rowsInfo, columnsInfo] = [ROWS, COLUMNS].map((fields) => {\n const normalizedFields = normalizeFields(config, fields);\n const norFields = [convertToVar(datamodel, normalizedFields[0])];\n\n if (normalizedFields[1]) {\n norFields[1] = convertToVar(datamodel, normalizedFields[1]);\n }\n return orderFields(norFields, fields);\n });\n const {\n fields: rows,\n dimensions: rowDimensions,\n measures: rowMeasures,\n temporal: rowTemporalFields,\n categorical: rowCategoricalFields\n } = rowsInfo;\n const {\n fields: columns,\n dimensions: columnDimensions,\n measures: columnMeasures,\n temporal: columnTemporalFields,\n categorical: columnCategoricalFields\n } = columnsInfo;\n return {\n rows,\n rowDimensions,\n rowMeasures,\n rowTemporalFields,\n rowCategoricalFields,\n columns,\n columnTemporalFields,\n columnCategoricalFields,\n columnDimensions,\n columnMeasures\n };\n};\n","import { ERROR_MSG, mergeRecursive } from 'muze-utils';\nimport { transformFields } from './field-sanitizer';\nimport { getHeaderAxisFrom } from '../group-helper/group-utils';\nimport { ROW, COLUMN } from '../enums/constants';\n\n/**\n *\n *\n * @export\n * @class VisualEncoder\n */\nexport default class VisualEncoder {\n\n /**\n *\n *\n * @memberof VisualEncoder\n */\n createAxis () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n *\n *\n * @memberof VisualEncoder\n */\n setCommonDomain () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n *\n *\n * @memberof VisualEncoder\n */\n getLayerConfig () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n fieldInfo (...info) {\n if (info.length) {\n this._fieldInfo = mergeRecursive(this._fieldInfo || {}, info[0]);\n return this;\n }\n return this._fieldInfo;\n }\n\n /**\n *\n *\n * @param {*} datamodel\n * @param {*} config\n *\n * @memberof VisualEncoder\n */\n fieldSanitizer (datamodel, config) {\n this.fieldInfo(transformFields(datamodel, config));\n return this.fieldInfo();\n }\n\n /**\n *\n *\n * @param {*} params\n *\n * @memberof VisualEncoder\n */\n axisFrom (...params) {\n if (params.length) {\n this._axisFrom = params[0];\n return this;\n }\n return this._axisFrom;\n }\n\n /**\n *\n *\n * @param {*} params\n *\n * @memberof VisualEncoder\n */\n headerFrom (...params) {\n if (params.length) {\n this._headerFrom = params[0];\n return this;\n }\n return this.__headerFrom;\n }\n\n /**\n *\n *\n * @param {*} axisFrom\n *\n * @memberof CartesianEncoder\n */\n setAxisAndHeaders (axisFrom = {}, fields) {\n const [rowHeader, rowAxis] = getHeaderAxisFrom(ROW, fields.rows, axisFrom);\n const [colHeader, colAxis] = getHeaderAxisFrom(COLUMN, fields.columns, axisFrom);\n\n this.axisFrom({\n row: rowAxis,\n column: colAxis\n });\n this.headerFrom({\n row: rowHeader,\n column: colHeader\n });\n return this;\n }\n}\n","import { ContinousAxis, BandAxis, TimeAxis, ColorAxis, SizeAxis, ShapeAxis } from '@chartshq/muze-axis';\n\nexport const scaleMaps = {\n linear: ContinousAxis,\n band: BandAxis,\n temporal: TimeAxis,\n size: SizeAxis,\n color: ColorAxis,\n shape: ShapeAxis\n};\n","import { ScaleType } from '@chartshq/muze-axis';\n\n/**\n * Map of DataModel types to associated field types.\n */\nexport const dataTypeScaleMap = {\n dimension: ScaleType.BAND,\n categorical: ScaleType.BAND,\n temporal: ScaleType.TIME,\n measure: ScaleType.LINEAR,\n continuous: ScaleType.LINEAR\n};\n","import { mergeRecursive, getObjProp } from 'muze-utils';\nimport { AxisOrientation } from '@chartshq/muze-axis';\nimport { ENCODING } from '@chartshq/visual-layer';\nimport { scaleMaps } from '../enums/scale-maps';\nimport { getAxisType, getAxisKey } from '../group-helper';\nimport { dataTypeScaleMap } from '../data-type-scale-map';\nimport { CATEGORICAL, TEMPORAL, BAR, LINE, POINT, BOTH, Y, COLOR, SHAPE, SIZE, ANGLE0 } from '../enums/constants';\n\n/**\n *\n *\n * @param {*} axisInfo\n * @param {*} field\n * @param {*} axesCreators\n *\n */\nconst getAxisConfig = (axisInfo, field, axesCreators, indices, facetFields) => {\n let axisOrientation;\n const { index, axisIndex, axisType } = axisInfo;\n const { config, position } = axesCreators;\n const { rowIndex, columnIndex } = indices;\n const rawUserAxisConfig = config.axes ? (config.axes[axisType] || {}) : {};\n\n // Change config object to a function if not already one\n const userAxisConfigFn = typeof rawUserAxisConfig !== 'function' ?\n () => rawUserAxisConfig : rawUserAxisConfig;\n const userAxisConfig = userAxisConfigFn(rowIndex, columnIndex, {\n axisFields: field.getMembers(),\n facetFields\n });\n\n // If current config does not specifes config for an axis, retain old config\n if (!userAxisConfig) {\n return {};\n }\n\n const {\n LEFT,\n RIGHT,\n TOP,\n BOTTOM\n } = AxisOrientation;\n const allOrientations = axisType === Y ? [LEFT, RIGHT] : [TOP, BOTTOM];\n\n if (position === BOTH) {\n axisOrientation = allOrientations[axisIndex];\n } else {\n axisOrientation = position;\n }\n const axisConfig = {\n id: `${axisType}-${index}-${axisIndex}`,\n name: field.displayName(),\n field: field.toString(),\n numberFormat: field.numberFormat(),\n orientation: axisOrientation,\n showAxisName: true,\n show: true,\n type: dataTypeScaleMap[field.subtype()]\n };\n userAxisConfig.tickValues = field.format(userAxisConfig.tickValues);\n userAxisConfig.domain = field.format(userAxisConfig.domain);\n\n return mergeRecursive(axisConfig, userAxisConfig);\n};\n\n/**\n *\n *\n * @param {*} axisInfo\n * @param {*} field\n * @param {*} axesCreators\n *\n */\nconst createSimpleAxis = (axisConfig, field, axesCreators) => {\n const { labelManager } = axesCreators;\n const Cls = scaleMaps[dataTypeScaleMap[field.subtype()]];\n const simpleAxis = new Cls(axisConfig, { labelManager });\n return simpleAxis;\n};\n\nexport const getAdjustedDomain = (max, min) => {\n const y1ratio = max[0] / (max[0] - min[0]);\n const y2ratio = max[1] / (max[1] - min[1]);\n\n // adjust min/max values for positive negative values zero line etc\n let allSameSign = false;\n\n // if all numbers are positive set floor to zero\n if (min[0] > 0 && min[1] > 0 && min[1] > 0 && max[1] > 0) {\n allSameSign = true;\n min[0] = 0;\n min[1] = 0;\n }\n\n // if all numbers are negative set ceiling to zero\n if (min[0] < 0 && min[1] < 0 && min[1] < 0 && max[1] < 0) {\n allSameSign = true;\n max[0] = 0;\n max[1] = 0;\n }\n\n // align zero line if necessary\n if (!allSameSign && y1ratio !== y2ratio) {\n if (y1ratio < y2ratio) {\n // adjust min[1]\n min[1] = min[0] / max[0] * max[1];\n } else {\n // adjust min[0]\n min[0] = min[1] / max[1] * max[0];\n }\n }\n return [\n [min[0], max[0]],\n [min[1], max[1]]\n ];\n};\n\n/**\n *\n *\n * @param {*} axisType\n * @param {*} fieldInfo\n * @param {*} axesCreators\n * @param {*} groupAxes\n *\n */\nexport const generateAxisFromMap = (axisType, fieldInfo, axesCreators, axesInfo, indices, facetFields) => {\n let axisKey;\n const { groupAxes, valueParser } = axesInfo;\n const currentAxes = [];\n const { fields, index } = fieldInfo;\n const { cacheMaps } = axesCreators;\n const map = cacheMaps[`${axisType}AxesMap`];\n\n const commonAxisKey = getAxisKey(axisType, index);\n fields.forEach((field, axisIndex) => {\n axisKey = getAxisKey(axisType, index, axisIndex, dataTypeScaleMap[field.subtype()]);\n const axisConfig = getAxisConfig({ index, axisIndex, axisType }, field, axesCreators, indices, facetFields);\n\n let axis;\n if (!map.has(axisKey)) {\n axis = createSimpleAxis(axisConfig, field, axesCreators);\n } else {\n axis = map.get(axisKey);\n axis._rotationLock = false;\n axis.config(axisConfig);\n }\n axis.valueParser(valueParser);\n currentAxes.push(axis);\n map.set(axisKey, axis);\n });\n\n if (currentAxes.length) {\n map.set(commonAxisKey, currentAxes);\n groupAxes.add(commonAxisKey);\n }\n\n return currentAxes;\n};\n\nexport const sanitizeIndividualLayerConfig = (encodingConfigs, def) => {\n [COLOR, SHAPE, SIZE].forEach((axis) => {\n if (encodingConfigs[axis] && encodingConfigs[axis].field) {\n def.forEach((conf) => {\n conf.encoding = conf.encoding || {};\n !conf.encoding[axis] && (conf.encoding[axis] = {});\n conf.encoding[axis].field = encodingConfigs[axis].field;\n });\n }\n });\n};\n\n/**\n *\n *\n * @memberof MatrixResolver\n */\nexport const mutateAxesFromMap = (cacheMaps, axes) => {\n const {\n xAxesMap,\n yAxesMap\n } = cacheMaps;\n const {\n x: xAxisSet,\n y: yAxisSet\n } = axes;\n const xAxes = [];\n const yAxes = [];\n\n xAxisSet.forEach((axisId) => {\n const xAxis = xAxesMap.get(axisId);\n xAxes.push(xAxis);\n });\n yAxisSet.forEach((axisId) => {\n const yAxis = yAxesMap.get(axisId);\n yAxes.push(yAxis);\n });\n return {\n xAxes, yAxes\n };\n};\n\n/**\n * return a default mark based on predefined set of rules of type and subtype of the fields\n *\n * @param {string} colFieldType dimension/measure - temporal/ordinal/nominal\n * @param {string} rowFieldType dimension/measure - temporal/ordinal/nominal\n * @return {Object} return mark type\n */\nexport const getDefaultMark = (colFieldType, rowFieldType) => {\n let mark;\n\n if (colFieldType === CATEGORICAL || rowFieldType === CATEGORICAL) {\n mark = BAR;\n } else if (colFieldType === TEMPORAL || rowFieldType === TEMPORAL) {\n mark = LINE;\n } else {\n mark = POINT;\n }\n\n return mark;\n};\n\n/**\n *\n *\n * @param {*} axesCreators\n * @param {*} [fieldInfo=[]]\n *\n */\nexport const createRetinalAxis = (axesCreators, fieldProps = {}) => {\n const { axisType, fieldsConfig } = axesCreators;\n const field = fieldProps.field;\n const axis = [];\n const Cls = scaleMaps[axisType];\n\n fieldProps.type = fieldProps.type ? fieldProps.type : getAxisType(fieldsConfig, field || null);\n axis.push(new Cls(fieldProps));\n return axis;\n};\n\n/**\n *\n *\n * @param {*} arr\n * @param {*} val\n *\n */\nexport const getIndex = (arr, val) => {\n let i = 0;\n let arrIndex = -1;\n\n while (arrIndex === -1 && i < arr.length) {\n if (arr[i].toString() === val.toString()) {\n arrIndex = i;\n }\n i++;\n }\n return arrIndex;\n};\n\n/**\n *\n *\n * @param {*} colFields\n * @param {*} rowFields\n * @param {*} userLayerConfig\n *\n * @memberof CartesianEncoder\n */\nexport const getLayerConfFromFields = (colFields, rowFields, userLayerConfig) => userLayerConfig.filter((conf) => {\n const userConf = conf instanceof Array ? conf : [conf];\n const encodingArr = [].concat(...userConf.map(d => d.encoding).filter(d => d !== undefined));\n\n if (!encodingArr.length) {\n return true;\n }\n\n const xFields = [].concat(...encodingArr.map(d => [d.x && d.x.field, d.x0 && d.x0.field]))\n .filter(d => d !== undefined && d !== null);\n const yFields = [].concat(...encodingArr.map(d => [d.y && d.y.field, d.y0 && d.y0.field]))\n .filter(d => d !== undefined && d !== null);\n\n if (!xFields.length && !yFields.length) {\n return true;\n }\n\n const colFieldExist = xFields.length ? xFields.every(d => colFields.indexOf(d) !== -1) : false;\n const rowFieldExist = yFields.length ? yFields.every(d => rowFields.indexOf(d) !== -1) : false;\n if (xFields.length && yFields.length) {\n return colFieldExist && rowFieldExist;\n }\n return colFieldExist || rowFieldExist;\n});\n\nexport const resolveAxisConfig = (context, fieldInf, axisInfo) => {\n const { rowIndex, columnIndex, axesObj } = axisInfo;\n const { config, facetFields, resolver } = context;\n const resolverAxes = resolver.axes();\n const { RADIUS, ANGLE } = ENCODING;\n [RADIUS, ANGLE, ANGLE0].forEach((enc) => {\n const axesArr = resolverAxes[enc];\n if (!axesArr[rowIndex]) {\n axesArr[rowIndex] = [];\n }\n axesArr[rowIndex][columnIndex] = axesObj[enc];\n const axisConfig = getObjProp(config.axes, enc) || {};\n\n axesObj[enc].forEach((axis, i) => {\n let userConfig = axisConfig;\n if (axisConfig instanceof Function) {\n userConfig = axisConfig(rowIndex, columnIndex, {\n axisFields: [fieldInf[enc][i]],\n facetFields\n });\n }\n axis.config(userConfig);\n });\n });\n};\n","import { layerFactory } from '@chartshq/visual-layer';\nimport {\n mergeRecursive,\n STATE_NAMESPACES,\n unionDomain,\n COORD_TYPES,\n toArray\n} from 'muze-utils';\nimport { ScaleType } from '@chartshq/muze-axis';\nimport {\n generateAxisFromMap,\n getDefaultMark,\n getIndex,\n getLayerConfFromFields,\n getAdjustedDomain,\n sanitizeIndividualLayerConfig\n} from './encoder-helper';\nimport { retriveDomainFromData } from '../group-helper';\n\nimport { ROW, COLUMN, COL, LEFT, TOP, MEASURE, BOTH, X, Y, ASCENDING, DESCENDING } from '../enums/constants';\nimport VisualEncoder from './visual-encoder';\n\nconst CARTESIAN = COORD_TYPES.CARTESIAN;\n\n/**\n *\n *\n * @export\n * @class CartesianEncoder\n * @extends {VisualEncoder}\n */\nexport default class CartesianEncoder extends VisualEncoder {\n\n /**\n *\n *\n *\n * @memberof CartesianEncoder\n */\n static type () {\n return CARTESIAN;\n }\n\n /**\n *\n *\n * @param {*} axesCreators\n * @param {*} fieldInfo\n *\n * @memberof CartesianEncoder\n */\n createAxis (axesCreators, fieldInfo, context) {\n const geomCellAxes = {};\n const {\n axes\n } = axesCreators;\n const {\n projections,\n indices\n } = fieldInfo;\n const {\n rowFields,\n columnFields\n } = projections;\n const {\n rowIndex,\n columnIndex\n } = indices;\n const axisFields = [{\n fields: rowFields,\n index: rowIndex\n }, {\n fields: columnFields,\n index: columnIndex\n }];\n const { resolver, facetFields, geomCell } = context;\n const xAxes = axes.x || [];\n const yAxes = axes.y || [];\n\n [rowFields, columnFields].forEach((fields, i) => {\n const type = i === 0 ? ROW : COLUMN;\n const axis = i === 0 ? Y : X;\n\n if (fields.length > 1) {\n axesCreators.position = BOTH;\n } else {\n axesCreators.position = this.axisFrom()[type];\n }\n geomCellAxes[axis] = generateAxisFromMap(axis, axisFields[i], axesCreators, {\n groupAxes: axis === X ? xAxes : yAxes,\n valueParser: resolver.valueParser()\n }, indices, facetFields);\n });\n geomCell.axes(geomCellAxes);\n return geomCellAxes;\n }\n\n updateDomains (store, axes) {\n const xAxes = axes.x;\n const yAxes = axes.y;\n store.model.lock();\n for (let i = 0; i < xAxes.length; i++) {\n for (let j = 0; j < xAxes[i].length; j++) {\n store.commit(`${STATE_NAMESPACES.GROUP_GLOBAL_NAMESPACE}.domain.x.${0}${i}0`, xAxes[i][j].domain());\n }\n }\n for (let i = 0; i < yAxes.length; i++) {\n for (let j = 0; j < yAxes[i].length; j++) {\n store.commit(`${STATE_NAMESPACES.GROUP_GLOBAL_NAMESPACE}.domain.y.${i}${0}0`, yAxes[i][j].domain());\n yAxes[i][j]._domainLock = false;\n }\n }\n\n store.model.unlock();\n }\n\n unionUnitDomains (context) {\n const store = context.store();\n const resolver = context.resolver();\n const units = resolver.units();\n const domains = {\n 0: {},\n 1: {}\n };\n // const sortingDetails = nearestSortingDetails(context.getGroupByData());\n const config = context.config();\n const fieldsObj = {\n 0: {},\n 1: {}\n };\n\n for (let rIdx = 0, len = units.length; rIdx < len; rIdx++) {\n const unitsArr = units[rIdx];\n for (let cIdx = 0, len2 = unitsArr.length; cIdx < len2; cIdx++) {\n const unit = unitsArr[cIdx];\n const axisFields = unit.fields();\n const encodingDomains = unit.getDataDomain();\n ['x', 'y'].forEach((axisType, axisTypeIndex) => {\n const fieldArr = axisFields[axisType];\n fieldArr.forEach((field, axisIndex) => {\n const key = !axisTypeIndex ? `0${cIdx}${axisIndex}` : `${rIdx}0${axisIndex}`;\n const dom = encodingDomains[axisType];\n const typeOfField = field.subtype();\n fieldsObj[axisTypeIndex][key] = field;\n\n if (dom && Object.keys(dom).length !== 0) {\n domains[axisTypeIndex][key] = unionDomain([(domains[axisTypeIndex] &&\n domains[axisTypeIndex][key]) || [], dom[`${field}`]], typeOfField);\n }\n });\n });\n }\n }\n\n const { x: xAxes, y: yAxes } = resolver.axes();\n store.model.lock();\n [xAxes, yAxes].forEach((axesArr, axisType) => {\n axesArr.forEach((axes, idx) => {\n let key;\n let domain = [];\n let adjustedDomain = [];\n const min = [];\n const max = [];\n const typeOfAxis = axes[0].constructor.type();\n\n if (axes.length > 1 && typeOfAxis === ScaleType.LINEAR && axes[0].config().alignZeroLine) {\n axes.forEach((axis, i) => {\n key = !axisType ? `0${idx}${i}` : `${idx}0${i}`;\n domain = domains[axisType][key];\n min[i] = domain[0];\n max[i] = domain[1];\n });\n adjustedDomain = getAdjustedDomain(max, min);\n } else if (typeOfAxis === ScaleType.BAND) {\n /* Sort categorical fields to ensure consistency across all rows\n only if field is categorical and is not explicitily sorted by user */\n key = !axisType ? `0${idx}0` : `${idx}00`;\n const currentFieldName = fieldsObj[axisType][key].oneVar();\n const sortingOrder = config.sort[currentFieldName];\n const isSortingDisabled = config.sort.disabled;\n\n if (!isSortingDisabled && sortingOrder) {\n if (sortingOrder === ASCENDING) {\n domains[axisType][key].sort();\n } else if (sortingOrder === DESCENDING) {\n domains[axisType][key].sort().reverse();\n }\n }\n }\n\n axes.forEach((axis, index) => {\n key = !axisType ? `0${idx}${index}` : `${idx}0${index}`;\n domain = adjustedDomain[index] || domains[axisType][key];\n\n domain && axis.domain(domain);\n const type = !axisType ? 'x' : 'y';\n store.commit(`${STATE_NAMESPACES.GROUP_GLOBAL_NAMESPACE}.domain.${type}.${idx}${index}`, domain);\n });\n });\n });\n store.model.unlock();\n }\n\n /**\n *\n *\n * @param {*} fields\n *\n * @memberof CartesianEncoder\n */\n getFacetsAndProjections (fields, type) {\n let facets = [];\n let projections = [];\n let counter = 0;\n const primaryFacets = [];\n const secondaryFacets = [];\n const primaryFields = fields[0];\n const secondaryFields = fields[1];\n const primaryLen = primaryFields.length;\n const secondaryLen = secondaryFields.length;\n const axisFrom = this.axisFrom();\n\n for (let i = 0; i < primaryLen; i++) {\n let projArr = [primaryFields[i]];\n const primaryField = primaryFields[i];\n\n if (primaryField.type() === MEASURE) {\n const secondaryField = secondaryFields[counter];\n if (secondaryField && secondaryField.type() === MEASURE) {\n counter++;\n projArr = [primaryField, secondaryField];\n }\n projections.push(projArr);\n } else {\n facets.push(primaryField);\n primaryFacets.push(primaryField);\n }\n }\n if (secondaryLen > counter) {\n for (let i = counter; i < secondaryLen; i++) {\n const secondaryField = secondaryFields[i];\n const projArr = [secondaryField];\n if (secondaryField.type() === MEASURE) {\n projections.push(projArr);\n } else {\n facets.push(secondaryField);\n secondaryFacets.push(secondaryField);\n }\n }\n }\n if ((primaryFacets.length || secondaryFacets.length) && !projections.length) {\n type = type === COL ? COLUMN : type;\n if ((axisFrom[type] === LEFT || axisFrom[type] === TOP) && primaryFacets.length) {\n const axisFromIndex = primaryFacets.length - 1;\n const facet = primaryFacets[axisFromIndex];\n projections = [[facet]];\n const existIndex = getIndex(secondaryFacets, facet);\n if (existIndex > -1) {\n projections = [[facet, facet]];\n secondaryFacets.splice(existIndex, 1);\n }\n primaryFacets.splice(axisFromIndex, 1);\n } else {\n const axisFromIndex = 0;\n const facet = secondaryFacets[axisFromIndex];\n projections = [[facet]];\n const existIndex = getIndex(primaryFacets, facet);\n if (existIndex > -1) {\n projections = [[facet, facet]];\n primaryFacets.splice(existIndex, 1);\n }\n secondaryFacets.splice(axisFromIndex, 1);\n }\n }\n\n facets = [...primaryFacets, ...secondaryFacets];\n facets = facets.filter((el, index, self) => index === self.findIndex(t => (t.toString() === el.toString())));\n return {\n facets,\n projections\n };\n }\n\n /**\n *\n *\n * @param {*} datamodel\n * @param {*} config\n *\n * @memberof CartesianEncoder\n */\n fieldSanitizer (datamodel, config) {\n return super.fieldSanitizer(datamodel, config);\n }\n\n /**\n *\n *\n * @param {*} datamodel\n *\n * @memberof CartesianEncoder\n */\n getRetinalFieldsDomain (dataModels, encoding) {\n const groupedModel = dataModels.groupedModel;\n const domains = {};\n for (const key in encoding) {\n if ({}.hasOwnProperty.call(encoding, key)) {\n const encodingObj = encoding[key];\n const field = encodingObj.field;\n if (!encodingObj.domain && field) {\n const domain = retriveDomainFromData(groupedModel, field);\n domains[field] = domain;\n }\n }\n }\n return domains;\n }\n\n /**\n *\n *\n * @param {*} layerArray\n * @memberof CartesianEncoder\n */\n serializeLayerConfig (layerArray) {\n const serializedLayers = [];\n // let currentLayerIndex = 0;\n layerArray.length && layerArray.forEach((layer, i) => {\n const def = layerFactory.sanitizeLayerConfig(layer);\n def.order = i;\n serializedLayers.push(def);\n });\n return serializedLayers;\n }\n\n sanitizeLayerConfig (encodingConfigs, userLayerConfig) {\n const layerConfig = [];\n userLayerConfig.forEach((config) => {\n const def = toArray(config.def);\n sanitizeIndividualLayerConfig(encodingConfigs, def);\n layerConfig.push(config);\n });\n return layerConfig;\n }\n\n /**\n *\n *\n * @param {*} fields\n * @param {*} userLayerConfig\n *\n * @memberof CartesianEncoder\n */\n getLayerConfig (fields, userLayerConfig, retinalConfig) {\n const layerConfig = [];\n const {\n columnFields,\n rowFields\n } = fields;\n\n // let currentLayerIndex = 0;\n columnFields.forEach((colField) => {\n const colFieldName = colField.toString();\n rowFields.forEach((rowField) => {\n let configs = [];\n const rowFieldName = rowField.toString();\n const encoding = {\n x: {\n field: colFieldName\n },\n y: {\n field: rowFieldName\n }\n };\n const rowFieldType = rowField.subtype();\n const colFieldType = colField.subtype();\n const mark = getDefaultMark(colFieldType, rowFieldType);\n\n const defConfigs = [{\n mark,\n def: {\n mark,\n encoding\n }\n }];\n\n const layerConfigs = getLayerConfFromFields(colField.getMembers(),\n rowField.getMembers(), userLayerConfig || []);\n if (layerConfigs.length) {\n configs = layerConfigs.map((layerConf) => {\n const mergedLayerConf = mergeRecursive(mergeRecursive({}, defConfigs[0].def), layerConf);\n const serializedLayerConfig = layerFactory.getSerializedConf(mergedLayerConf.mark,\n mergedLayerConf);\n return {\n mark: mergedLayerConf.mark,\n order: mergedLayerConf.order,\n def: serializedLayerConfig\n };\n });\n } else {\n configs = defConfigs;\n }\n\n layerConfig.push(...configs);\n });\n });\n return this.sanitizeLayerConfig(retinalConfig, layerConfig);\n }\n}\n","import { AngleAxis, RadiusAxis } from '@chartshq/muze-axis';\nimport { layerFactory, ENCODING } from '@chartshq/visual-layer';\nimport {\n mergeRecursive,\n STATE_NAMESPACES,\n GROUP_BY_FUNCTIONS,\n COORD_TYPES,\n toArray,\n getObjProp,\n defaultValue\n} from 'muze-utils';\nimport VisualEncoder from './visual-encoder';\nimport { SIZE, MEASURE, ARC, COLOR } from '../enums/constants';\nimport { sanitizeIndividualLayerConfig, resolveAxisConfig } from './encoder-helper';\nimport { SimpleVariable } from '../variable';\n\nconst POLAR = COORD_TYPES.POLAR;\nconst { RADIUS, ANGLE, ANGLE0 } = ENCODING;\n\nconst axesCls = {\n [RADIUS]: RadiusAxis,\n [ANGLE]: AngleAxis,\n [ANGLE0]: AngleAxis\n};\n\nconst getSizeMultiplier = (sizeVal, sizeAxis) => {\n const sizeAxisDomain = sizeAxis.domain();\n const sizeMultiplier = sizeAxis.getSize(sizeVal) / (sizeAxisDomain ? sizeAxis.range()[1] : sizeAxis.config().value);\n return sizeMultiplier;\n};\n\nconst setRadiusFactor = (context) => {\n const data = context.data();\n const sizeField = context.retinalFields().size.field;\n const { radius, size } = context.axes();\n\n if (sizeField && radius && radius.length) {\n const sizeFieldIndex = data.getFieldsConfig()[sizeField].index;\n const sizeVal = data.getData().data.reduce((acc, val) => acc + val[sizeFieldIndex], 1);\n const sizeMultiplier = getSizeMultiplier(sizeVal, size[0]);\n radius.forEach(axis => axis.setRadiusFactor(sizeMultiplier));\n }\n};\n\n/**\n *\n *\n * @export\n * @class PolarEncoder\n * @extends {VisualEncoder}\n */\nexport default class PolarEncoder extends VisualEncoder {\n\n /**\n *\n *\n * @param {*} axesCreators\n * @param {*} fieldInfo\n *\n * @memberof PolarEncoder\n */\n createAxis (axesCreators, fieldInfo, context) {\n const {\n axes\n } = axesCreators;\n const geomCellAxes = axes;\n const {\n indices\n } = fieldInfo;\n const {\n rowIndex,\n columnIndex\n } = indices;\n // Dummy axes for polar, to create blank cells\n const pieAxes = geomCellAxes.pie || [];\n\n pieAxes[rowIndex] = pieAxes[rowIndex] || [];\n pieAxes[rowIndex][columnIndex] = [];\n\n const axesObj = {};\n const { geomCell, resolver } = context;\n const layers = resolver.matrixLayers();\n const resolverAxes = resolver.axes();\n const cellLayers = layers[rowIndex][columnIndex];\n const fields = {\n radius: {},\n angle: {},\n angle0: {}\n };\n\n cellLayers.forEach((layerConf) => {\n const def = layerConf.def;\n [ANGLE, ANGLE0, RADIUS].forEach((enc) => {\n const field = getObjProp(def.encoding, enc, 'field');\n field && (fields[enc][field] = 0);\n });\n });\n const fieldInf = {};\n const varInstances = {};\n\n for (const encType in fields) {\n fieldInf[encType] = Object.keys(fields[encType]);\n axesObj[encType] = [];\n varInstances[encType] = [];\n fieldInf[encType].forEach((field, i) => {\n varInstances[encType][i] = new SimpleVariable(field);\n axesObj[encType][i] = new axesCls[encType]();\n });\n axesObj[encType][axesObj[encType].length] = new axesCls[encType]();\n }\n resolveAxisConfig(context, fieldInf, {\n axesObj,\n rowIndex,\n columnIndex\n });\n geomCell.axes(axesObj)\n .fields(Object.assign({}, varInstances, geomCell.fields()));\n resolverAxes.pie = pieAxes;\n return geomCellAxes;\n }\n\n /**\n *\n *\n * @param {*} fields\n *\n * @memberof CartesianEncoder\n */\n getFacetsAndProjections (fields) {\n let counter = 0;\n const facets = [];\n const projections = [];\n const primaryFields = fields[0];\n const secondaryFields = fields[1];\n const primaryLen = primaryFields.length;\n const secondaryLen = secondaryFields.length;\n\n for (let i = 0; i < primaryLen; i++) {\n const primaryField = primaryFields[i];\n if (primaryField.type() === MEASURE) {\n const secondaryField = secondaryFields[counter++];\n const projArr = secondaryField ? [primaryField, secondaryField] : [primaryField];\n projections.push(projArr);\n } else {\n facets.push(primaryField);\n }\n }\n if (secondaryLen > counter) {\n for (let i = counter; i < secondaryLen; i++) {\n const secondaryField = secondaryFields[i];\n const projArr = [secondaryField];\n if (secondaryField.type() === MEASURE) {\n projections.push(projArr);\n } else {\n facets.push(secondaryField);\n }\n }\n }\n return {\n facets,\n projections\n };\n }\n\n unionUnitDomains (context) {\n const store = context.store();\n const domainProps = {\n radius: [],\n angle: [],\n angle0: []\n };\n const axes = context.resolver().axes();\n context.matrixInstance().value.each((cell, rIdx, cIdx) => {\n const unit = cell.valueOf();\n const unitDomains = unit.getDataDomain();\n const fields = unit.fields();\n setRadiusFactor(unit);\n [RADIUS, ANGLE, ANGLE0].forEach((encType) => {\n const encodingFields = fields[encType];\n const domains = unitDomains[encType] || {};\n encodingFields.forEach((field, i) => {\n !domainProps[encType][rIdx] && (domainProps[encType][rIdx] = []);\n !domainProps[encType][rIdx][cIdx] && (domainProps[encType][rIdx][cIdx] = []);\n domainProps[encType][rIdx][cIdx][i] = domains[`${field}`] || [];\n });\n });\n });\n\n for (const key in domainProps) {\n const specificAxes = axes[key];\n specificAxes.forEach((axesArr, rIdx) => {\n axesArr.forEach((axisArr, cIdx) => {\n axisArr.forEach((axis, i) => {\n axis.domain(defaultValue(getObjProp(domainProps[key], rIdx, cIdx, i), []));\n });\n });\n });\n store.commit(`${STATE_NAMESPACES.GROUP_GLOBAL_NAMESPACE}.domain.${key}`, domainProps[key]);\n }\n }\n\n /**\n *\n *\n *\n * @memberof PolarEncoder\n */\n setCommonDomain () {\n // No domain to be set\n return this;\n }\n\n /**\n *\n *\n *\n * @memberof PolarEncoder\n */\n static type () {\n return POLAR;\n }\n\n layers (...layers) {\n if (layers.length) {\n this._layers = layers[0];\n return this;\n }\n return this._layers;\n }\n\n /**\n *\n *\n * @param {*} datamodel\n * @param {*} config\n * @memberof PolarEncoder\n */\n fieldSanitizer (datamodel, config) {\n let sanitizedRows = [[], []];\n let sanitizedColumns = [[], []];\n const fields = super.fieldSanitizer(datamodel, config);\n const {\n layers\n } = config;\n const {\n rows,\n columns\n } = fields;\n const layer = layers[0];\n const encoding = layer.encoding;\n const radius = encoding && encoding.radius ? encoding.radius.field : null;\n const angle = encoding && encoding.angle ? encoding.angle.field : null;\n const sanitizedFields = [sanitizedRows, sanitizedColumns];\n\n [rows, columns].forEach((fieldType, typeIndex) => {\n fieldType.forEach((fieldSet, i) => fieldSet.forEach((field) => {\n if (field.toString() !== radius && field.toString() !== angle && field.type() !== MEASURE) {\n sanitizedFields[typeIndex][i].push(field);\n }\n }));\n });\n sanitizedColumns = [...new Set(sanitizedColumns)];\n sanitizedRows = [...new Set(sanitizedRows)];\n this.fieldInfo({ rows: sanitizedRows, columns: sanitizedColumns });\n return this.fieldInfo();\n }\n\n getRetinalFieldsDomain (dataModels, encoding, facetFields, groupBy) {\n let sizeField;\n let colorField;\n const fields = [];\n const layers = this.layers();\n const dataModel = dataModels.groupedModel;\n const fieldsConfig = dataModel.getFieldsConfig();\n const domains = {};\n if (layers && layers[0]) {\n const layer = layers[0];\n const layerEncoding = layer.def.encoding || {};\n\n [RADIUS, ANGLE, SIZE, COLOR].forEach((encType) => {\n const field = layerEncoding[encType] ? layerEncoding[encType].field : '';\n const measureField = fieldsConfig[field] && fieldsConfig[field].def.type === MEASURE;\n if (encType === SIZE && measureField) {\n sizeField = field;\n }\n if (encType === COLOR) {\n colorField = field;\n }\n fieldsConfig[field] && !measureField && fields.push(field);\n });\n }\n\n if (sizeField) {\n domains[sizeField] = dataModel.groupBy(facetFields, {\n [sizeField]: GROUP_BY_FUNCTIONS.SUM\n }).getFieldspace().fieldsObj()[sizeField].domain();\n }\n\n if (colorField) {\n const dm = dataModel.groupBy([...facetFields, ...fields], groupBy.measures);\n domains[colorField] = dm.getFieldspace().fieldsObj()[colorField].domain();\n }\n return domains;\n }\n\n /**\n *\n *\n * @param {*} fields\n * @param {*} userLayerConfig\n *\n * @memberof PolarEncoder\n */\n getLayerConfig (fields, userLayerConfig, retinalConfig) {\n let layerConfig = [];\n const {\n columnFields,\n rowFields\n } = fields;\n const allFields = [...columnFields, ...rowFields];\n\n allFields.forEach(() => {\n const encoding = {};\n let config = {\n mark: ARC,\n def: {\n encoding\n }\n };\n if (userLayerConfig && userLayerConfig.length > 0) {\n config = mergeRecursive(config, userLayerConfig[0]);\n }\n layerConfig.push(config);\n });\n if (layerConfig.length === 0) {\n layerConfig = userLayerConfig;\n }\n const sanitizedConfig = this.sanitizeLayerConfig(retinalConfig, layerConfig);\n this.layers(sanitizedConfig);\n return sanitizedConfig;\n }\n\n /**\n *\n *\n * @param {*} layerArray\n *\n * @memberof PolarEncoder\n */\n serializeLayerConfig (layerArray) {\n const serializedLayers = [];\n\n layerArray.length && layerArray.forEach((layer) => {\n const def = layerFactory.getSerializedConf(layer.mark, layer);\n serializedLayers.push({\n mark: layer.mark,\n def\n });\n });\n return serializedLayers;\n }\n\n sanitizeLayerConfig (encodingConfigs, userLayerConfig) {\n const layerConfig = [];\n\n userLayerConfig.forEach((config) => {\n const def = toArray(config.def);\n sanitizeIndividualLayerConfig(encodingConfigs, def);\n def.forEach((conf) => {\n const encoding = conf.encoding || (conf.encoding = {});\n !encoding.angle && (encoding.angle = {});\n const angleField = getObjProp(encoding.angle, 'field');\n const angle0Field = getObjProp(encoding.angle0, 'field');\n if (!angleField) {\n Object.assign(encoding.angle, {\n field: encodingConfigs.color && encodingConfigs.color.field\n });\n }\n if (!angle0Field) {\n !encoding.angle0 && (encoding.angle0 = {});\n Object.assign(encoding.angle0, {\n field: encoding.angle.field\n });\n }\n });\n\n layerConfig.push(config);\n });\n return layerConfig;\n }\n}\n","import { createRetinalAxis } from './encoder-helper';\nimport { COLOR, SHAPE, SIZE } from '../enums/constants';\nimport VisualEncoder from './visual-encoder';\n\n/**\n *\n *\n * @export\n * @class RetinalEncoder\n * @extends {VisualEncoder}\n */\nexport default class RetinalEncoder extends VisualEncoder {\n\n /**\n *\n *\n * @param {*} axesCreators\n *\n * @memberof RetinalEncoder\n */\n createAxis (axesCreators) {\n const { fieldsConfig, config } = axesCreators;\n const newAxes = {};\n\n [COLOR, SHAPE, SIZE].forEach((axisType) => {\n newAxes[`${axisType}`] = createRetinalAxis({ axisType, fieldsConfig }, config[axisType]);\n });\n return newAxes;\n }\n\n /**\n *\n *\n * @static\n *\n * @memberof RetinalEncoder\n */\n static type () {\n return 'retinal';\n }\n\n /**\n *\n *\n * @param {*} context\n *\n * @memberof RetinalEncoder\n */\n setCommonDomain (context) {\n const { domains, axes, encoding } = context;\n\n Object.entries(encoding).forEach((enc) => {\n if (enc[1] && enc[1].field) {\n const encType = enc[0];\n const field = enc[1].field;\n\n if (field) {\n axes[encType].forEach((axis) => {\n const domain = domains[field];\n !enc[1].domain && axis.updateDomain(domain);\n });\n }\n }\n });\n return axes;\n }\n}\n","import { Store, FieldType, COORD_TYPES, getObjProp } from 'muze-utils';\nimport { DATA_UPDATE_COUNTER } from '../enums/defaults';\nimport { Variable } from '../variable';\nimport { PolarEncoder, CartesianEncoder } from '../encoder';\nimport {\n DIMENSION,\n MEASURE,\n ORDINAL,\n LINEAR,\n ROW,\n COLUMN,\n COL,\n LEFT,\n RIGHT,\n TOP,\n BOTTOM,\n COLOR,\n SIZE,\n TEMPORAL,\n SHAPE,\n INTERACTION,\n GRID_LINES,\n GRID_BANDS,\n HEADER,\n FACET,\n X,\n Y,\n ARC,\n RADIUS,\n ANGLE\n} from '../enums/constants';\n\nconst POLAR = COORD_TYPES.POLAR;\n\n/**\n * Creates an instance of a store which contains the arguments to make the class reactive\n *\n * @return {Object} instance of store\n * @memberof VisualGroup\n */\nexport const initStore = () => new Store({\n [DATA_UPDATE_COUNTER]: DATA_UPDATE_COUNTER\n});\n\n/**\n *\n *\n * @param {*} arr\n */\nexport const isDistributionEqual = arr => [...arr[0], ...arr[1]].reduce((isEqual, row) => {\n const rowType = row.type();\n\n if (rowType === MEASURE || rowType === TEMPORAL) {\n isEqual = true;\n }\n return isEqual;\n}, false);\n\n/**\n *\n *\n */\nexport const initializeCacheMaps = () => ({\n cellMap: new Map(),\n xAxesMap: new Map(),\n yAxesMap: new Map(),\n entryCellMap: new Map(),\n exitCellMap: new Map()\n});\n\n/**\n *\n *\n * @param {*} axisName\n * @param {*} id\n */\nexport const getAxisKey = (axisName, ...params) => `${axisName}-axis-${params.join('-')}`;\n\n/**\n *\n *\n * @param {*} rowId\n * @param {*} columnId\n */\nexport const getCellKey = (rowId, columnId) => `cell-${rowId}-${columnId}`;\n\n/**\n *\n *\n * @param {*} config\n *\n */\nexport const extractUnitConfig = (config) => {\n const unitConfig = {};\n const attrNames = [INTERACTION, GRID_LINES, GRID_BANDS];\n\n attrNames.forEach((attr) => {\n if (config[attr] !== undefined) {\n unitConfig[attr] = config[attr];\n }\n });\n return unitConfig;\n};\n\n/**\n *\n *\n * @param {*} headers\n * @param {*} index\n * @param {*} rowLength\n *\n * @memberof MatrixResolver\n */\nexport const getHeaderText = (headers, index, rowLength) => {\n let header = '';\n\n if (index === rowLength - 1 && headers.length > rowLength) {\n for (let i = index; i < headers.length - 1; i++) {\n header += `${headers[i].toString()} / `;\n }\n header += headers[headers.length - 1].toString();\n return header;\n } else if (headers[index]) {\n return headers[index].toString();\n }\n return '';\n};\n\n/**\n *\n *\n * @param {*} fields\n * @param {*} fieldHeaders\n * @param {*} TextCell\n * @param {*} labelManager\n *\n */\nexport const headerCreator = (fields, fieldHeaders, TextCell, { classPrefix, labelManager }) => {\n const headers = fields.length > 0 ? fields[0].map((cell, i) => new TextCell({\n type: HEADER,\n className: `${classPrefix}-grid-headers`\n }, {\n labelManager\n }).source(getHeaderText(fieldHeaders, i, fields[0].length))\n .config({ show: cell.config().show })) : [];\n return headers;\n};\n\n/**\n *\n *\n * @param {*} variable\n * @param {*} allFields\n *\n */\nexport const findInGroup = (variable, allFields) => {\n let channel = null;\n\n [COLOR, SIZE, SHAPE].forEach((e) => {\n if (this.store.get(e) && variable === this.store.get(e)[0]) {\n channel = e;\n }\n });\n\n if (channel) {\n return { channel };\n }\n [ROW, COL].forEach((facetType) => {\n allFields[`${facetType}Facets`].forEach((e) => {\n if (e.toString() === variable) {\n channel = { channel: FACET, type: facetType === COL ? COLUMN : ROW };\n }\n });\n });\n\n if (channel) {\n return channel;\n }\n\n [ROW, COL].forEach((projType) => {\n allFields[`${projType}Projections`].forEach((e) => {\n e.forEach((m) => {\n if (m.toString() === variable) {\n channel = projType === COL ? X : Y;\n }\n });\n });\n });\n\n if (channel) {\n return { channel };\n }\n return null;\n};\n\n/**\n *\n *\n * @param {*} datamodel\n * @param {*} field\n */\nexport const getAxisType = (fieldsConfig, field) => {\n let fieldType = ORDINAL;\n\n if (field && fieldsConfig[field].def.type !== DIMENSION) {\n fieldType = LINEAR;\n }\n return fieldType;\n};\n\n/**\n *\n *\n * @param {*} datamodel\n * @param {*} fieldName\n *\n */\nexport const retriveDomainFromData = (datamodel, fieldName) => {\n const field = datamodel.getFieldspace().fields.find(d => d.name() === fieldName.toString());\n return field.domain();\n};\n\n/**\n *\n *\n * @memberof MatrixResolver\n */\nexport const mutateAxesFromMap = (cacheMaps, axes) => {\n let xAxes = null;\n let yAxes = null;\n const {\n xAxesMap,\n yAxesMap\n } = cacheMaps;\n const {\n x: xAxisSet,\n y: yAxisSet\n } = axes;\n\n xAxisSet && xAxisSet.forEach((axisId) => {\n const xAxis = xAxesMap.get(axisId);\n xAxes = xAxes || [];\n xAxes.push(xAxis);\n });\n\n yAxisSet && yAxisSet.forEach((axisId) => {\n const yAxis = yAxesMap.get(axisId);\n yAxes = yAxes || [];\n yAxes.push(yAxis);\n });\n\n return {\n xAxes, yAxes\n };\n};\n\nconst hasPolarEncodings = layerConf => layerConf.mark === ARC || [RADIUS, ANGLE].some(field =>\n getObjProp(layerConf.encoding, field));\n\n/**\n *\n *\n * @param {*} layers\n *\n */\nexport const getEncoder = (layers) => {\n let encoder = new CartesianEncoder();\n\n if (layers.length) {\n // Figuring out the kind of layers the group will have\n encoder = layers.some(layerConf => hasPolarEncodings(layerConf)) ? new PolarEncoder() : encoder;\n }\n return encoder;\n};\n\n/**\n *\n *\n * @param {*} type\n * @param {*} fields\n * @param {*} userAxisFromConfig\n *\n */\nexport const getHeaderAxisFrom = (type, fields, userAxisFromConfig) => {\n let axisFrom = userAxisFromConfig[type];\n let headerFrom = '';\n const options = type === ROW ? [LEFT, RIGHT] : [BOTTOM, TOP];\n const [firstField, secondField] = fields;\n const firstFieldType = i => (firstField.length ? firstField[i].type() : null);\n const secondFieldType = i => (secondField.length ? secondField[i].type() : null);\n\n if (firstFieldType(firstField.length - 1) === DIMENSION && secondFieldType(0) === DIMENSION) {\n headerFrom = axisFrom ? options[1 - options.indexOf(axisFrom)] : options[1];\n\n if (type === COLUMN && (firstField[firstField.length - 1].toString() === secondField[0].toString())) {\n axisFrom = TOP;\n } else {\n axisFrom = axisFrom || options[0];\n }\n } else if (secondFieldType(secondField.length - 1) === DIMENSION) {\n headerFrom = type === ROW ? RIGHT : BOTTOM;\n axisFrom = type === ROW ? RIGHT : BOTTOM;\n } else {\n headerFrom = type === ROW ? LEFT : TOP;\n axisFrom = type === ROW ? LEFT : TOP;\n }\n if (firstFieldType(firstField.length - 1) === MEASURE && secondFieldType(0) === MEASURE) {\n axisFrom = type === ROW ? LEFT : TOP;\n } else if (secondFieldType(0) === MEASURE) {\n axisFrom = type === ROW ? RIGHT : BOTTOM;\n } else if (firstFieldType(firstField.length - 1) === MEASURE) {\n axisFrom = type === ROW ? LEFT : TOP;\n }\n return [headerFrom, axisFrom];\n};\n\n/**\n *\n *\n * @param {*} type\n * @param {*} fields\n * @param {*} layers\n *\n * @memberof MatrixResolver\n */\nexport const setFacetsAndProjections = (context, fieldInfo, encoder) => {\n const {\n fields,\n type\n } = fieldInfo;\n const { facets, projections } = encoder.simpleEncoder.getFacetsAndProjections(fields, type);\n\n context.facets({ [`${type}Facets`]: facets });\n context.projections({ [`${type}Projections`]: projections });\n\n return { facets, projections, fields };\n};\n\nconst getRowBorders = (left, right) => {\n const borders = {};\n borders.top = false;\n borders.bottom = false;\n if (left.length > 1 || right.length > 1) {\n borders.top = true;\n borders.bottom = true;\n }\n return borders;\n};\n\nconst getColumnsBorders = (top, bottom) => {\n const borders = {};\n borders.left = false;\n borders.right = false;\n if (top.length || bottom.length) {\n if ((top[0] && top[0].length > 1) || (bottom[0] && bottom[0].length > 1)) {\n borders.left = true;\n borders.right = true;\n }\n }\n return borders;\n};\n\nconst getValueBorders = (rows, columns) => {\n const borders = { top: true, left: true, bottom: true, right: true };\n const borderTypeRow = [LEFT, RIGHT];\n const borderTypeCol = [TOP, BOTTOM];\n rows.forEach((e, i) => {\n if (e[0] && e[0].length) {\n borders[borderTypeRow[i]] = true;\n } else {\n borders[borderTypeRow[i]] = false;\n }\n });\n columns.forEach((e, i) => {\n if (e.length) {\n borders[borderTypeCol[i]] = true;\n } else {\n borders[borderTypeCol[i]] = false;\n }\n });\n\n return borders;\n};\n\nexport const getBorders = (matrices, encoder) => {\n let showRowBorders = { top: false, bottom: false };\n let showColBorders = { left: false, right: false };\n let showValueBorders = { top: false, bottom: false, left: false, right: false };\n const {\n rows,\n columns,\n values: valueMatrix\n } = matrices;\n const [leftRows, rightRows] = rows;\n const [topColumns, bottomColumns] = columns;\n const {\n rowDimensions,\n columnDimensions,\n rowTemporalFields,\n columnTemporalFields,\n columnMeasures,\n rowMeasures\n } = encoder.fieldInfo();\n const allDimensionLength = rowDimensions.length + columnDimensions.length;\n const allMeasuresLength = rowMeasures.length + columnMeasures.length;\n const allTemporalFieldsLength = rowTemporalFields.length + columnTemporalFields.length;\n\n if (encoder.constructor.type() === POLAR) {\n if (!allDimensionLength) {\n return { showRowBorders, showColBorders, showValueBorders };\n }\n } else if (!allMeasuresLength && !allTemporalFieldsLength && allDimensionLength <= 2) {\n return { showRowBorders, showColBorders, showValueBorders };\n }\n\n showRowBorders = getRowBorders(leftRows, rightRows);\n showColBorders = getColumnsBorders(topColumns, bottomColumns);\n showValueBorders = getValueBorders([leftRows, rightRows], [topColumns, bottomColumns]);\n\n if (valueMatrix.length > 1) {\n showValueBorders.top = true;\n showValueBorders.bottom = true;\n }\n if (valueMatrix.length && valueMatrix[0].length > 1) {\n showValueBorders.left = true;\n showValueBorders.right = true;\n }\n return { showRowBorders, showColBorders, showValueBorders };\n};\n\nexport const getFieldsFromSuppliedLayers = (suppliedLayerConfig, fieldsConfig) => {\n let fields = [];\n const encodingArr = suppliedLayerConfig.map(conf => (conf.encoding || {}));\n fields = [...fields, [].concat(...encodingArr.map(enc => Object.values(enc).map(d => d.field)))];\n fields = fields.filter(field => fieldsConfig[field] && fieldsConfig[field].def.type === FieldType.DIMENSION);\n return fields;\n};\n\nexport const extractFields = (facetsAndProjections, layerFields) => {\n const fields = Object.values(facetsAndProjections).map((arr) => {\n const flattenArray = [].concat(...arr);\n return [].concat(...flattenArray.map((field) => {\n if (field instanceof Variable) {\n return field.getMembers();\n }\n return field;\n }));\n });\n return [].concat(...fields, ...layerFields);\n};\n\n/**\n * This method sorts the facets fields inplace if field is of categorical type\n * @param {Object} facet\n * @param {Array} keys Array of the facet field values\n */\nexport const sortFacetFields = (facet, keys, config) => {\n const facetName = `${facet}`;\n const type = facet.type();\n\n if (type === DIMENSION && config.sort[facetName]) {\n if (config.sort[facetName] === 'asc') {\n keys.sort((a, b) => a - b);\n } else {\n keys.sort((a, b) => b - a);\n }\n }\n};\n","import { BEHAVIOURS, ACTIONS } from '@chartshq/muze-firebolt';\n\nexport const actionBehaviourMap = {\n [ACTIONS.DRAG]: {\n behaviours: [BEHAVIOURS.BRUSH],\n touch: false\n },\n [ACTIONS.HOVER]: {\n behaviours: [BEHAVIOURS.HIGHLIGHT]\n },\n [ACTIONS.LONGTOUCH]: {\n behaviours: [BEHAVIOURS.SELECT],\n touch: true\n },\n [ACTIONS.TOUCHDRAG]: {\n behaviours: [BEHAVIOURS.BRUSH],\n touch: true\n },\n [ACTIONS.CLICK]: {\n behaviours: [BEHAVIOURS.SELECT],\n touch: false\n }\n};\n","import {\n FieldType,\n getDependencyOrder,\n getObjProp,\n defaultValue,\n objectIterator,\n unionDomain,\n makeElement,\n DimensionSubtype,\n toArray,\n MeasureSubtype,\n getNearestValue\n} from 'muze-utils';\nimport { layerFactory, ENCODING } from '@chartshq/visual-layer';\n\nexport const getDimensionMeasureMap = (layers, fieldsConfig) => {\n const retinalEncodingsAndMeasures = {};\n\n layers.forEach((layer) => {\n const {\n colorField,\n sizeField,\n shapeField,\n xField,\n yField\n } = layer.encodingFieldsInf();\n const measures = [xField, yField].filter(field => fieldsConfig[field] && fieldsConfig[field].def.type ===\n FieldType.MEASURE);\n [colorField, sizeField, shapeField].forEach((field) => {\n if (fieldsConfig[field] && fieldsConfig[field].def.type === FieldType.DIMENSION) {\n !retinalEncodingsAndMeasures[field] && (retinalEncodingsAndMeasures[field] = []);\n retinalEncodingsAndMeasures[field].push(...measures);\n }\n });\n });\n\n for (const key in retinalEncodingsAndMeasures) {\n if ({}.hasOwnProperty.call(retinalEncodingsAndMeasures, key)) {\n retinalEncodingsAndMeasures[key] = [...new Set(retinalEncodingsAndMeasures[key])];\n }\n }\n return retinalEncodingsAndMeasures;\n};\n\nexport const transformDataModels = (transform, dataModel) => {\n const dataModels = {};\n for (const key in transform) {\n if ({}.hasOwnProperty.call(transform, key)) {\n const transformVal = transform[key];\n dataModels[key] = transformVal(dataModel);\n }\n }\n\n return dataModels;\n};\n\nexport const getLayerFromDef = (context, definition, existingLayer, namespaces) => {\n let instances = existingLayer;\n const dependencies = context._layerDeps;\n const metaInf = context.metaInf();\n if (!existingLayer) {\n instances = layerFactory.getLayerInstance(definition);\n toArray(instances).forEach((inst, i) => {\n inst.metaInf({\n unitRowIndex: metaInf.rowIndex,\n unitColIndex: metaInf.colIndex,\n namespace: namespaces[i]\n });\n inst.store(context.store());\n });\n }\n const layers = {};\n const instanceArr = toArray(instances);\n definition = toArray(definition);\n definition.reduce((acc, def, idx) => {\n const instance = instanceArr[idx];\n instance.coord(context.coord());\n instance.config(def);\n instance.valueParser(context.valueParser());\n instance.dependencies(dependencies);\n instance.dataProps({\n timeDiffs: context._timeDiffs\n });\n if (def.name) {\n instance.alias(def.name);\n }\n layers[instance.alias()] = instance;\n return acc;\n }, {});\n return layers;\n};\n\nexport const resolveEncodingTransform = (layerInst, store) => {\n const encodingTransform = layerInst.config().encodingTransform || {};\n const resolvable = encodingTransform.resolvable;\n let depArr = [];\n if (resolvable) {\n const resolved = resolvable(store);\n depArr = resolved.depArr;\n layerInst.encodingTransform(resolved.fn);\n } else if (encodingTransform instanceof Function) {\n layerInst.encodingTransform(encodingTransform);\n }\n return depArr;\n};\n\nexport const sanitizeLayerDef = (layerDefs) => {\n const sanitizedDefs = [];\n layerDefs.forEach((layerDef, i) => {\n const def = layerDef.def;\n const mark = layerDef.mark;\n if (!def) {\n const sConf = layerFactory.getSerializedConf(layerDef.mark, layerDef);\n if (!sConf.name) {\n sConf.name = `${mark}-${i}`;\n }\n sanitizedDefs.push({\n mark: layerDef.mark,\n def: sConf\n });\n } else {\n if (!def.name) {\n def.name = `${mark}-${i}`;\n }\n sanitizedDefs.push(layerDef);\n }\n });\n return sanitizedDefs;\n};\n\nexport const attachDataToLayers = (layers, dm, transformedDataModels) => {\n layers.forEach((layer) => {\n const dataSource = layer.config().source;\n const dataModel = dataSource instanceof Function ? dataSource(dm) :\n (transformedDataModels[dataSource] || dm);\n if (layer.data() !== dataModel) {\n layer.data(dataModel);\n }\n });\n};\n\nexport const attachAxisToLayers = (axes, layers, layerAxisIndex) => {\n layers.forEach((layer) => {\n const layerId = layer.id();\n const axesObj = {};\n\n objectIterator(axes, (key) => {\n const axisInf = layerAxisIndex[layerId];\n if (axisInf) {\n const axisArr = axes[key] || [];\n const axisIndex = axisInf[key] >= 0 ? axisInf[key] : axisArr.length - 1;\n axes[key] && (axesObj[key] = defaultValue(axes[key][axisIndex]));\n }\n });\n Object.keys(axesObj).length && layer.axes(axesObj);\n });\n};\n\nconst { X, Y, RADIUS, ANGLE, ANGLE0, RADIUS0 } = ENCODING;\n\nexport const getLayerAxisIndex = (layers, fields) => {\n const layerAxisIndex = {};\n layers.forEach((layer) => {\n const { axis, encoding } = layer.config();\n const id = layer.id();\n [X, Y, ANGLE, ANGLE0, RADIUS].forEach((type) => {\n let index;\n const specificField = getObjProp(encoding, type, 'field');\n const encodingField = type === RADIUS ? defaultValue(specificField, getObjProp(encoding, RADIUS0, 'field'))\n : getObjProp(encoding, type, 'field');\n const field = defaultValue(getObjProp(axis, type), encodingField);\n if (fields[type] && fields[type].length) {\n index = fields[type].findIndex(fieldInst => fieldInst.getMembers().indexOf(field) !== -1);\n } else {\n index = 0;\n }\n !layerAxisIndex[id] && (layerAxisIndex[id] = {});\n layerAxisIndex[id][type] = index;\n });\n });\n return layerAxisIndex;\n};\n\nconst getValidDomain = (domain, domain1, encodingType, fieldType) => {\n if (encodingType === ANGLE || encodingType === ANGLE0) {\n return domain.concat(domain1.filter(d => domain.indexOf(d) === -1));\n }\n return unionDomain([domain, domain1], fieldType);\n};\n\nexport const unionDomainFromLayers = (layers, axisFields, layerAxisIndex, fieldsConfig) => {\n let domains = {};\n layers = layers.filter(layer => layer.getDataDomain() !== null);\n layers.forEach((layer) => {\n let domainValues = {};\n const config = layer.config();\n // const encoding = config.encoding;\n const layerDomain = layer.getDataDomain();\n const layerId = layer.id();\n\n if (layerDomain !== null && config.calculateDomain !== false) {\n domainValues = Object.entries(layerDomain);\n domains = domainValues.reduce((fieldDomain, domain) => {\n const encodingType = domain[0];\n const axisIndex = layerAxisIndex[layerId][encodingType];\n const field = getObjProp(axisFields, encodingType, axisIndex);\n !fieldDomain[encodingType] && (fieldDomain[encodingType] = {});\n const encodingDomain = fieldDomain[encodingType];\n if (field) {\n const fieldStr = `${field}`;\n encodingDomain[fieldStr] = encodingDomain[fieldStr] || [];\n encodingDomain[fieldStr] = getValidDomain(encodingDomain[fieldStr],\n domain[1], encodingType, fieldsConfig[field.getMembers()[0]].def.subtype);\n }\n return fieldDomain;\n }, domains);\n }\n });\n return domains;\n};\n\nexport const renderLayers = (context, container, layers, measurement) => {\n context._lifeCycleManager.notify({ client: layers, action: 'beforedraw', formalName: 'layer' });\n const config = context.config();\n const classPrefix = config.classPrefix;\n const orderedLayers = context.layers().sort((a, b) => a.config().order - b.config().order);\n const layerParentGroup = makeElement(container, 'g', [1], `${classPrefix}-layer-group`);\n const layerDepOrder = getDependencyOrder(context._layerDepOrder);\n const groups = {};\n makeElement(layerParentGroup, 'g', orderedLayers, null, {\n update: (group, layer) => {\n groups[layer.alias()] = {\n group,\n layer\n };\n }\n });\n const layerSeq = layerDepOrder.map(name => groups[name]);\n layerSeq.forEach((o) => {\n const layer = o.layer;\n const group = o.group;\n layer.measurement(measurement);\n layer.dataProps({\n timeDiffs: context._timeDiffs\n });\n layer.config().render !== false && layer.mount(group.node());\n });\n return this;\n};\n\nexport const getNearestDimensionalValue = (context, position) => {\n const fields = context.fields();\n if (!fields.x.length || !fields.y.length) {\n return null;\n }\n const data = context.data();\n const axes = context.axes();\n const fieldsConfig = data.getFieldsConfig();\n const xField = getObjProp(fields, 'x', 0).getMembers()[0];\n const yField = getObjProp(fields, 'y', 0).getMembers()[0];\n const xFieldType = fieldsConfig[xField].def.subtype;\n const yFieldType = fieldsConfig[yField].def.subtype;\n\n const entryVal = [['x', xFieldType, xField], ['y', yFieldType, yField]].find(entry =>\n entry[1] === DimensionSubtype.CATEGORICAL || entry[1] === DimensionSubtype.TEMPORAL);\n\n if (!entryVal || (xFieldType !== MeasureSubtype.CONTINUOUS && yFieldType !== MeasureSubtype.CONTINUOUS)) {\n return null;\n }\n const field = entryVal[2];\n const index = fieldsConfig[field].index;\n let key = axes[entryVal[0]][0].invert(position[entryVal[0]]);\n if (entryVal[1] === DimensionSubtype.TEMPORAL) {\n const filterData = [...new Set(data.getData().data.map(d => d[index]))];\n key = getNearestValue(filterData, key);\n }\n\n return key !== undefined ? [[field], [key]] : null;\n};\n\nexport const getLayersBy = (layers, searchBy, value) => layers.filter((layer) => {\n const name = searchBy === 'type' ? layer.constructor.formalName() : layer.alias();\n return name === value;\n});\n\nexport const removeLayersBy = (layers, searchBy, value) => {\n layers.filter((inst) => {\n const name = searchBy === 'type' ? inst.config().mark : inst.alias();\n if (name === value) {\n inst.remove();\n return false;\n }\n return true;\n });\n};\n\nexport const createSideEffectGroup = (container, className) => makeElement(container, 'g', [1], className).node();\n\nexport const createRenderPromise = (unit) => {\n const renderedPromise = unit._renderedPromise;\n renderedPromise.then(() => {\n unit._renderedPromise = new Promise((resolve) => {\n unit._renderedResolve = resolve;\n });\n createRenderPromise(unit);\n });\n};\n\nexport const getRadiusRange = (width, height, config = {}) => {\n const {\n innerRadius,\n outerRadius\n } = config;\n\n return [innerRadius || 0, outerRadius || Math.min(height,\n width) / 2];\n};\n\nexport const setAxisRange = (context) => {\n const axes = context.axes();\n const { radius: radiusAxes } = axes;\n if (radiusAxes) {\n radiusAxes.forEach((axis) => {\n axis.range(getRadiusRange(context.width(), context.height()));\n });\n }\n};\n","export const CLASSPREFIX = 'muze';\nexport const IDFIELD = '__id__';\nexport const GRID_LINE_PARENT_GROUP_CLASS = 'grid-lines';\nexport const GRID_BAND_PARENT_GROUP_CLASS = 'grid-bands';\nexport const GRID_PARENT_GROUP = 'grid-parent-group';\nexport const BAND = 'band';\nexport const TICK = 'tick';\nexport const GRID_BAND = 'gridBands';\nexport const GRID_LINE = 'gridLines';\nexport const CONSOLIDATED = 'consolidated';\nexport const FRAGMENTED = 'fragmented';\nexport const FACET_BY_FIELDS = 'facetByFields';\nexport const RETINAL_FIELDS = 'retinalFields';\nexport const PARENT_ALIAS = 'parentAlias';\nexport const LAYERS = 'layers';\nexport const CACHED_DATA = 'cachedData';\nexport const STORE = 'store';\n","import { getObjProp, defaultValue, makeElement, DimensionSubtype, DataModel, createSelection } from 'muze-utils';\nimport { ScaleType } from '@chartshq/muze-axis';\nimport { layerFactory, LAYER_TYPES } from '@chartshq/visual-layer';\nimport {\n GRID_BAND,\n GRID_LINE,\n GRID_BAND_PARENT_GROUP_CLASS,\n GRID_LINE_PARENT_GROUP_CLASS,\n GRID_PARENT_GROUP\n} from '../enums/constants';\n\nconst { BAR_LAYER, TICK_LAYER } = LAYER_TYPES;\n\nconst LINEAR = ScaleType.LINEAR;\n\nconst getLayerDefinition = (context, axes, type, orientation) => {\n let encoding;\n const config = context.config();\n const { classPrefix, gridLines, gridBands } = config;\n const gridLineColor = gridLines.color;\n const zeroLineColor = gridLines.zeroLineColor;\n const defClassName = type === GRID_BAND ? gridBands.defClassName : gridLines.defClassName;\n const gridBandColor = gridBands[orientation].color;\n const axis = axes[orientation][0];\n const isLinearScale = axis.constructor.type() === LINEAR;\n\n if (type === GRID_BAND && isLinearScale) {\n encoding = {\n [orientation]: `${orientation}value`,\n [`${orientation}0`]: `${orientation}value0`\n };\n } else {\n encoding = {\n [orientation]: isLinearScale ? `${orientation}value` : `${orientation}dim`\n };\n }\n encoding.color = {\n value: (data, i) => {\n const isNegativeDomain = isLinearScale && axis.domain()[0] < 0;\n if (type === GRID_BAND) {\n return gridBandColor[i % 2];\n }\n return isNegativeDomain && data[orientation] === 0 ? zeroLineColor : gridLineColor;\n }\n };\n const { color, shape, size } = context.axes();\n return {\n definition: {\n defClassName: `${defClassName}-${orientation}`,\n className: config.className,\n name: orientation,\n individualClassName: (data, i) => {\n let className;\n const isNegativeDomain = isLinearScale && axis.domain()[0] < 0;\n if (isNegativeDomain && data.y === 0 && type !== GRID_BAND) {\n className = `${classPrefix}-axis-zero-line`;\n } else {\n className = `${classPrefix}-grid-${type}-${orientation}-${i % 2}`;\n }\n return className;\n },\n [`pad${orientation.toUpperCase()}`]: type === GRID_BAND ? 0 : undefined,\n encoding\n },\n axes: {\n [orientation]: axis,\n color: color[0],\n shape: shape[0],\n size: size[0]\n },\n interactive: false\n };\n};\n\nconst getDefaultVisibilty = (show, axis) => {\n if (axis.constructor.type() === LINEAR) {\n return show;\n }\n return false;\n};\n\nexport const getGridLayerDefinitions = (context, config, type) => ['x', 'y'].map((axisType) => {\n const axes = context.axes();\n if (!axes[axisType]) {\n return null;\n }\n const show = defaultValue(config[axisType] && config[axisType].show,\n getDefaultVisibilty(config.show, axes[axisType][0]));\n\n return show ? getLayerDefinition(context, axes, type, axisType) : null;\n}).filter(d => d !== null);\n\nconst dimensionSubTypes = Object.values(DimensionSubtype).reduce((acc, v) => {\n acc[v] = 1;\n return acc;\n}, {});\nconst getValidSubtype = subtype => (!dimensionSubTypes[subtype] ? DimensionSubtype.CATEGORICAL : subtype);\n\nexport const getGridLayerData = (axes, fields, fieldsConfig) => {\n const gridData = {};\n\n ['x', 'y'].forEach((type) => {\n let ticks = axes[type][0].getTickValues();\n const subtype = getObjProp(fieldsConfig, getObjProp(fields, type, 0).getMembers()[0], 'def', 'subtype');\n const jsonData = [];\n const schema = [\n {\n name: 'yvalue',\n type: 'measure'\n }, {\n name: 'xvalue',\n type: 'measure'\n },\n {\n name: 'yvalue0',\n type: 'measure'\n }, {\n name: 'xvalue0',\n type: 'measure'\n }, {\n name: 'xdim',\n type: 'dimension',\n subtype: getValidSubtype(subtype)\n }, {\n name: 'ydim',\n type: 'dimension',\n subtype: getValidSubtype(subtype)\n }\n ];\n const len = Math.max(ticks.length);\n ticks = subtype === DimensionSubtype.TEMPORAL ? ticks.map(d => d.getTime()) : ticks;\n for (let i = 0; i < len; i += 1) {\n jsonData.push({\n [`${type}value`]: ticks[i],\n [`${type}value0`]: ticks[i + 1],\n [`${type}dim`]: ticks[i],\n [`${type}dim`]: ticks[i]\n });\n }\n gridData[type] = new DataModel(jsonData, schema);\n });\n return gridData;\n};\n\nexport const createGridLineLayer = (context) => {\n const vuConf = context.config();\n const metaInf = context.metaInf();\n const store = context.store();\n const timeDiffs = context._timeDiffs;\n [GRID_BAND, GRID_LINE].forEach((type) => {\n let mark;\n let config;\n if (type === GRID_BAND) {\n mark = BAR_LAYER;\n config = vuConf.gridBands;\n } else {\n mark = TICK_LAYER;\n config = vuConf.gridLines;\n }\n const definitions = getGridLayerDefinitions(context, config, type);\n\n const sel = `_${type}Selection`;\n context[sel] = createSelection(context[sel], () => {\n const inst = layerFactory.getLayerInstance({ mark });\n inst.dependencies(context._layerDeps);\n return inst;\n }, definitions, atomicDef => atomicDef.definition.name);\n context[sel].each((layer, atomicDef) => {\n const definition = atomicDef.definition;\n const name = definition.name;\n const sConf = layerFactory.getSerializedConf(mark, definition);\n const axesObj = atomicDef.axes;\n layer.metaInf({\n unitRowIndex: metaInf.rowIndex,\n unitColIndex: metaInf.colIndex,\n namespace: `${metaInf.namespace}${type}${name}`\n })\n .store(store)\n .config(sConf)\n .dataProps({\n timeDiffs\n })\n .axes(axesObj);\n });\n context[`_${type}`] = context[sel].getObjects();\n });\n};\n\nexport const attachDataToGridLineLayers = (context) => {\n const axes = context.axes();\n const measurement = {\n width: context.width(),\n height: context.height()\n };\n const gridLines = context._gridLines;\n const gridBands = context._gridBands;\n const gridLayerData = getGridLayerData(axes, context.fields(), context.data().getFieldsConfig());\n [].concat(...gridBands, ...gridLines).forEach((inst) => {\n inst.data(inst.axes().x ? gridLayerData.x : gridLayerData.y).measurement(measurement);\n });\n};\n\nexport const renderGridLineLayers = (context, container) => {\n const config = context.config();\n const classPrefix = config.classPrefix;\n const gridLines = context._gridLines;\n const gridBands = context._gridBands;\n\n const gridLineParentGroup = makeElement(container, 'g', [1], `${classPrefix}-${GRID_PARENT_GROUP}`);\n [[gridLines, `${classPrefix}-${GRID_LINE_PARENT_GROUP_CLASS}`],\n [gridBands, `${classPrefix}-${GRID_BAND_PARENT_GROUP_CLASS}`]].forEach((entry) => {\n const [instances, parentGroupClass] = entry;\n const mountPoint = makeElement(gridLineParentGroup, 'g', [1], `.${parentGroupClass}`);\n const className = `${parentGroupClass}-group`;\n makeElement(mountPoint, 'g', instances, `.${className}`, {\n update: (group, instance) => {\n instance.dataProps({ timeDiffs: context._timeDiffs }).mount(group.node());\n }\n });\n });\n};\n","import { CLASSPREFIX, CONSOLIDATED } from './enums/constants';\n\n/**\n * Returns the default configuration of the visual unit\n * @return {Object} Default configuration of visual unit\n */\nexport const defaultConfig = {\n classPrefix: CLASSPREFIX,\n defClassName: 'visual-unit',\n className: '',\n trackerClassName: 'visual-unit-tracker',\n minOuterRadius: 10,\n gridLines: {\n defClassName: 'axis-grid-lines',\n className: '',\n show: true,\n color: '#efefef',\n zeroLineColor: '#b6b6b6'\n },\n gridBands: {\n defClassName: 'axis-grid-bands',\n className: '',\n show: false,\n y: {\n color: ['#fff', '#fbfbfb']\n },\n x: {\n color: ['#fff', '#f9f9f9']\n }\n },\n arcLayerClassName: 'layer-arc',\n interaction: {\n tooltip: {\n mode: CONSOLIDATED\n }\n },\n sideEffectClassName: 'side-effect-container'\n};\n","import { mergeRecursive, DataModel } from 'muze-utils';\nimport { defaultConfig } from './default-config';\nimport { CONFIG, LAYERDEFS, TRANSFORM, DATA, LAYERS, TRANSFORMEDDATA } from './enums/reactive-props';\nimport { sanitizeLayerDef } from './helper';\n\nexport default {\n [CONFIG]: {\n value: null,\n meta: {\n sanitization: (config, oldConfig) => (\n mergeRecursive(oldConfig || mergeRecursive({}, defaultConfig), config)\n )\n }\n },\n [LAYERDEFS]: {\n value: null,\n meta: {\n preset: layerDef => sanitizeLayerDef(layerDef)\n }\n },\n [TRANSFORM]: {\n value: null\n },\n [LAYERS]: {\n value: null\n },\n [DATA]: {\n value: null,\n meta: {\n typeCheck: d => d instanceof DataModel,\n preset: (data, context) => {\n if (context._cache) {\n const cachedData = context.cachedData();\n context.cachedData([...cachedData, data]);\n } else {\n const oldData = context.cachedData()[0];\n oldData && oldData.unsubscribe('propagation');\n context.cachedData([data]);\n }\n }\n }\n },\n [TRANSFORMEDDATA]: {\n value: null,\n meta: {\n addAsMethod: false\n }\n }\n};\n","export const CONFIG = 'config';\nexport const DATA = 'data';\nexport const AXES = 'axes';\nexport const LAYERDEFS = 'layerDef';\nexport const WIDTH = 'width';\nexport const HEIGHT = 'height';\nexport const MOUNT = 'mount';\nexport const TRANSFORM = 'transform';\nexport const TRANSFORMEDDATA = 'transformedData';\nexport const DATADOMAIN = 'dataDomain';\nexport const FIELDS = 'fields';\nexport const LAYERAXISINDEX = 'layerAxisIndex';\nexport const LAYERS = 'layers';\nexport const DOMAIN = 'domain';\n\n","import { STATE_NAMESPACES, temporalFields, getObjProp, defaultValue } from 'muze-utils';\nimport * as PROPS from './enums/reactive-props';\nimport {\n transformDataModels,\n getDimensionMeasureMap,\n attachDataToLayers,\n attachAxisToLayers,\n unionDomainFromLayers\n} from './helper';\n\nimport { createGridLineLayer, attachDataToGridLineLayers } from './helper/grid-lines';\n\nconst removeExitLayers = (layerDefs, context) => {\n const layersMap = context._layersMap;\n const markSet = {};\n layerDefs.forEach((layerDef, i) => {\n const id = defaultValue(layerDef.name, `${layerDef.mark}-${i}`);\n markSet[id] = true;\n });\n\n for (const key in layersMap) {\n if (!(key in markSet)) {\n layersMap[key].forEach(layer => layer.remove());\n delete layersMap[key];\n }\n }\n};\n\nexport const calculateDomainListener = (context, namespace) => () => {\n const domain = unionDomainFromLayers(context.layers(), context.fields(), context._layerAxisIndex,\n context.data().getFieldsConfig());\n context.store().commit(`${STATE_NAMESPACES.UNIT_GLOBAL_NAMESPACE}.${PROPS.DOMAIN}.${namespace}`, domain);\n};\n\nexport const listenerMap = (context, namespace, metaInf) => ([\n {\n type: 'registerImmediateListener',\n props: [`${namespace.local}.${PROPS.CONFIG}`],\n listener: ([, config]) => {\n config && context.firebolt().config(config.interaction);\n }\n },\n {\n type: 'registerImmediateListener',\n props: [`${namespace.local}.${PROPS.LAYERDEFS}`],\n listener: ([, layerDefs]) => {\n const fieldsVal = context.fields();\n if (layerDefs && fieldsVal) {\n removeExitLayers(layerDefs, context);\n const axes = context.axes();\n if (axes.x || axes.y) {\n const props = [`${STATE_NAMESPACES.GROUP_GLOBAL_NAMESPACE}.domain.y.${metaInf.rowIndex}0`,\n `${STATE_NAMESPACES.GROUP_GLOBAL_NAMESPACE}.domain.x.${metaInf.colIndex}0`];\n const store = context.store();\n const listenerInf = {\n namespace: namespace.local,\n key: 'gridLineListener'\n };\n store.unsubscribe(listenerInf);\n store.registerChangeListener(props, () => {\n attachDataToGridLineLayers(context);\n }, false, listenerInf);\n }\n\n context.addLayer(layerDefs);\n const adjustRange = context.layers().some(inst => inst.hasPlotSpan());\n ['x', 'y'].forEach((type) => {\n const axisArr = defaultValue(getObjProp(context.axes(), type), []);\n axisArr.forEach((axis) => {\n axis.config({\n adjustRange\n });\n });\n });\n context._lifeCycleManager.notify({\n client: context.layers(),\n action: 'initialized',\n formalName: 'layer'\n });\n }\n }\n },\n {\n type: 'registerImmediateListener',\n props: [`${namespace.local}.${PROPS.DATA}`],\n listener: ([, dataModel]) => {\n const axesObj = context.axes();\n const timeDiffs = {};\n const timeDiffsByField = {};\n\n Object.entries(temporalFields(dataModel)).forEach(([fieldName, fieldObj]) => {\n timeDiffsByField[fieldName] = fieldObj.minimumConsecutiveDifference();\n });\n\n Object.entries(context.fields()).forEach(([type, [field]]) => {\n if (field) {\n const timeDiff = timeDiffsByField[`${field}`];\n if (timeDiff) {\n timeDiffs[type] = timeDiff;\n axesObj[type].forEach(axis => axis.minDiff(timeDiff));\n }\n }\n });\n\n context._timeDiffsByField = timeDiffsByField;\n context._timeDiffs = timeDiffs;\n }\n },\n {\n type: 'registerImmediateListener',\n props: [`${namespace.local}.${PROPS.CONFIG}`],\n listener: () => {\n createGridLineLayer(context);\n }\n },\n {\n type: 'registerImmediateListener',\n props: [`${namespace.local}.${PROPS.DATA}`,\n `${namespace.local}.${PROPS.TRANSFORM}`],\n listener: ([, dataModel], [, transform]) => {\n if (dataModel) {\n const dataModels = transformDataModels(transform, dataModel);\n context.store().commit(`${namespace.local}.${PROPS.TRANSFORMEDDATA}`, dataModels);\n }\n }\n },\n {\n type: 'registerImmediateListener',\n props: [`${namespace.local}.${PROPS.TRANSFORMEDDATA}`,\n `${namespace.local}.${PROPS.LAYERS}`],\n listener: ([, transformedData], [, layers]) => {\n const layerAxisIndexVal = context._layerAxisIndex;\n const axesVal = context.axes();\n const dataModel = context.data();\n if (transformedData && layers && axesVal && layerAxisIndexVal) {\n context._lifeCycleManager.notify({ client: layers, action: 'beforeupdate', formalName: 'layer' });\n const model = context.store().model;\n layers.forEach(lyr => lyr.disableUpdate());\n attachDataToLayers(layers, dataModel, transformedData);\n model.lock();\n layers.forEach((lyr) => {\n lyr.enableUpdate().domain(lyr._domain);\n });\n model.unlock();\n context._dimensionMeasureMap = getDimensionMeasureMap(layers,\n dataModel.getFieldsConfig(), context.retinalFields());\n attachAxisToLayers(axesVal, layers, layerAxisIndexVal);\n context._lifeCycleManager.notify({ client: layers, action: 'updated', formalName: 'layer' });\n }\n }\n }\n]);\n","import { FACET_BY_FIELDS, RETINAL_FIELDS, PARENT_ALIAS, LAYERS, CACHED_DATA } from './enums/constants';\n\nexport const PROPS = {\n [FACET_BY_FIELDS]: {},\n [RETINAL_FIELDS]: {},\n [PARENT_ALIAS]: {},\n [LAYERS]: {},\n [CACHED_DATA]: {},\n detailFields: {},\n axes: {\n defaultValue: {\n x: [],\n y: []\n }\n },\n fields: {},\n metaInf: {},\n registry: {},\n width: {},\n height: {},\n parentContainerInf: {},\n valueParser: {\n defaultValue: val => val\n },\n coord: {}\n};\n","import { CommonProps } from 'muze-utils';\nimport { SpawnableSideEffect } from '@chartshq/muze-firebolt';\nimport { DATA } from '../enums/reactive-props';\n\nexport const initSideEffects = (sideEffects, firebolt) => {\n for (const key in sideEffects) {\n if ({}.hasOwnProperty.call(sideEffects, key)) {\n sideEffects[key] instanceof SpawnableSideEffect && sideEffects[key].drawingContext(() => {\n const context = firebolt.context;\n return context.getDrawingContext();\n });\n sideEffects[key].valueParser(firebolt.context.valueParser());\n }\n }\n};\n\nexport const clearActionHistory = (context) => {\n const actionHistory = context._actionHistory;\n for (const key in actionHistory) {\n if (actionHistory[key].isMutableAction) {\n delete context._actionHistory[key];\n }\n }\n};\n\nexport const dispatchQueuedSideEffects = (context) => {\n const queuedSideEffects = context._queuedSideEffects;\n Object.entries(queuedSideEffects).forEach((entry) => {\n const sideEffect = entry[1];\n context.dispatchSideEffect(sideEffect.name, ...sideEffect.params);\n });\n context._queuedSideEffects = {};\n};\n\nexport const registerListeners = (firebolt) => {\n const context = firebolt.context;\n const store = context.store();\n\n store.registerImmediateListener([`local.units.${context.metaInf().namespace}.${DATA}`], (dataModel) => {\n const dm = dataModel[1];\n\n if (dm) {\n firebolt.createSelectionSet(firebolt.context.data().getData().uids);\n firebolt.initializeSideEffects();\n const originalData = firebolt.context.cachedData()[0];\n firebolt.attachPropagationListener(originalData);\n }\n });\n\n store.registerChangeListener([`local.units.${context.metaInf().namespace}.${DATA}`], () => {\n if (!firebolt.context.mount()) {\n const originalData = firebolt.context.cachedData()[0];\n originalData.unsubscribe('propagation');\n }\n });\n\n context._layerDeps.throwback.registerChangeListener([CommonProps.ON_LAYER_DRAW],\n ([, onlayerdraw]) => {\n if (onlayerdraw) {\n dispatchQueuedSideEffects(firebolt);\n clearActionHistory(firebolt);\n }\n });\n};\n","import { DimensionSubtype } from 'muze-utils';\n\nconst getRangeFromData = (instance, selectionDataModel, propConfig) => {\n let criteria;\n const dataObj = selectionDataModel[0].getData();\n const propCriteria = propConfig.payload.criteria;\n const sourceIdentifiers = propConfig.sourceIdentifiers;\n const schema = dataObj.schema;\n const fieldMap = instance.data().getFieldsConfig();\n const data = dataObj.data;\n const isActionSourceSame = instance.id() === propConfig.sourceId;\n\n if (isActionSourceSame) {\n criteria = propCriteria;\n } else {\n criteria = (sourceIdentifiers !== null) ? schema.reduce((acc, obj, index) => {\n let range;\n const field = obj.name;\n const fieldObj = fieldMap[field];\n const type = fieldObj && (fieldObj.def.subtype ? fieldObj.def.subtype : fieldObj.def.type);\n const isDimension = type === DimensionSubtype.CATEGORICAL;\n\n if (!fieldObj) {\n return acc;\n }\n\n if (!isDimension) {\n range = [Math.min(...data.map(d => d[index])), Math.max(...data.map(d => d[index]))];\n } else {\n range = data.map(d => d[index]);\n }\n acc[field] = range;\n return acc;\n }, {}) : null;\n }\n return criteria;\n};\n\nexport const payloadGenerator = {\n brush: (instance, selectionDataModel, propConfig) => {\n const propPayload = propConfig.payload;\n const criteria = getRangeFromData(instance, selectionDataModel, propConfig);\n const payload = Object.assign({}, propPayload);\n payload.criteria = criteria;\n return payload;\n },\n\n __default: (instance, selectionDataModel, propConfig) => {\n const propPayload = propConfig.payload;\n const sourceIdentifiers = propConfig.sourceIdentifiers;\n const dataObj = selectionDataModel[0].getData();\n let schema = dataObj.schema;\n const payload = Object.assign({}, propPayload);\n schema = dataObj.schema;\n const data = dataObj.data;\n const sourceFields = schema.map(d => d.name);\n payload.criteria = !sourceIdentifiers && selectionDataModel[0].isEmpty() ? null :\n [sourceFields, ...data];\n payload.sourceFields = sourceIdentifiers ? sourceIdentifiers.getSchema().map(d => d.name) : [];\n return payload;\n }\n};\n\n","import { isSimpleObject, FieldType, DataModel } from 'muze-utils';\n\nconst getModelWithFacetData = (dm, data) => {\n const dataObj = dm.getData();\n const schema1 = dataObj.schema;\n const data1 = dataObj.data;\n const jsonData = [];\n const schema2 = data[0].map(d => ({\n name: `${d}`,\n type: FieldType.DIMENSION\n }));\n const data2 = data[1];\n\n data1.forEach((d) => {\n const tuple = {};\n schema1.forEach((obj, i) => {\n tuple[obj.name] = d[i];\n });\n schema2.forEach((obj, i) => {\n tuple[obj.name] = data2[i];\n });\n jsonData.push(tuple);\n });\n\n return new DataModel(jsonData, [...schema1, ...schema2]);\n};\n\nexport const propagateValues = (instance, action, config = {}) => {\n let propagationData;\n const payload = config.payload;\n const selectionSet = config.selectionSet;\n const propagationFieldInf = config.propagationFields[action] || {};\n const propagationFields = propagationFieldInf.fields || [];\n const append = propagationFieldInf.append;\n const criteria = payload.criteria;\n const context = instance.context;\n const dataModel = context.cachedData()[0];\n const sourceId = context.id();\n const sideEfffects = instance.sideEffects();\n const behaviourEffectMap = instance._behaviourEffectMap;\n const mergedModel = selectionSet.mergedEnter.model;\n const fieldsConfig = dataModel.getFieldsConfig();\n payload.sourceUnit = sourceId;\n payload.action = action;\n payload.sourceCanvas = context.parentAlias();\n const propagationBehaviourMap = instance._propagationBehaviourMap;\n const propagationBehaviour = propagationBehaviourMap[action] || action;\n\n let propFields = [];\n if (criteria === null) {\n propagationData = null;\n } else if (isSimpleObject(criteria)) {\n propFields = Object.keys(criteria || {});\n propagationData = mergedModel ? mergedModel.project(propFields) : null;\n } else {\n propFields = criteria[0];\n propagationData = mergedModel ? mergedModel.project(propFields) : null;\n }\n\n const facetByFields = context.facetByFields();\n if (propagationData !== null && propagationFields.length) {\n const fields = propagationData.getData().schema.map(d => d.name);\n propagationData = getModelWithFacetData(propagationData, facetByFields);\n propFields = append ? [...fields, ...propagationFields] : propagationFields;\n propagationData = propagationData.project(propFields);\n }\n\n let propagateInterpolatedValues = false;\n if (propFields.length && propFields.every(field => fieldsConfig[field] &&\n fieldsConfig[field].def.type === FieldType.MEASURE)) {\n propagateInterpolatedValues = true;\n }\n\n const groupId = context.parentAlias();\n payload.action = action;\n const behaviourInstance = instance._actions.behavioural[propagationBehaviour];\n const isMutableAction = behaviourInstance ? behaviourInstance.constructor.mutates() : false;\n\n const filterFn = (entry, propagationConf) => {\n const effects = behaviourEffectMap[entry.config.action];\n const mutates = entry.config.groupId ?\n effects.some(d => sideEfffects[d.name || d].constructor.mutates()) : true;\n return entry.config.groupId !== propagationConf.groupId && mutates;\n };\n\n const sourceBehaviour = instance._actions.behavioural[action];\n const mutates = sourceBehaviour ? sourceBehaviour.constructor.mutates() : false;\n let propConfig = {\n payload,\n action,\n criteria: propagationData,\n isMutableAction: mutates,\n propagateInterpolatedValues,\n groupId,\n sourceId: mutates ? groupId : sourceId,\n filterFn,\n enabled: (propConf, firebolt) => (action !== propagationBehaviour ?\n propConf.payload.sourceCanvas === firebolt.context.parentAlias() : true)\n };\n\n dataModel.propagate(propagationData, propConfig, true);\n\n if (action !== propagationBehaviour) {\n propConfig = {\n payload,\n sourceId: isMutableAction ? groupId : sourceId,\n criteria: propagationData,\n isMutableAction,\n propagateInterpolatedValues,\n action: propagationBehaviour,\n groupId,\n applyOnSource: action === propagationBehaviour,\n enabled: (propConf, firebolt) => propConf.payload.sourceCanvas !== firebolt.context.parentAlias(),\n filterFn\n };\n\n dataModel.propagate(propagationData, propConfig, true, {\n filterImmutableAction: (actionInf, propInf) => actionInf.groupId !== propInf.groupId\n });\n }\n};\n","import { FieldType } from 'muze-utils';\nimport { Firebolt } from '@chartshq/muze-firebolt';\nimport { registerListeners } from './helper';\nimport { payloadGenerator } from './payload-generator';\nimport { propagateValues } from './data-propagator';\n\n/**\n * This class manages the interactions of visual unit. It associates physical actions with\n * behavioural actions. It also propagates the behavioural actions to other datamodels.\n */\nexport default class UnitFireBolt extends Firebolt {\n constructor (...params) {\n super(...params);\n registerListeners(this);\n }\n\n propagate (behaviour, payload, selectionSet, sideEffects) {\n propagateValues(this, behaviour, {\n payload,\n selectionSet,\n sideEffects,\n propagationFields: this._propagationFields\n });\n }\n\n getApplicableSideEffects (sideEffects, payload, propagationInf) {\n const context = this.context;\n const unitId = context.id();\n const aliasName = context.parentAlias();\n const propagationSourceCanvas = propagationInf.propPayload && propagationInf.propPayload.sourceCanvas;\n const sourceUnitId = propagationInf.propPayload && propagationInf.propPayload.sourceUnit;\n const sourceSideEffects = this._sourceSideEffects;\n const sideEffectInstances = this.sideEffects();\n const actionOnSource = sourceUnitId ? sourceUnitId === unitId : true;\n\n const applicableSideEffects = payload.sideEffects ? [{\n effects: payload.sideEffects,\n behaviours: [payload.action]\n }] : sideEffects;\n applicableSideEffects.forEach((d) => {\n let mappedEffects = d.effects;\n mappedEffects = mappedEffects.filter((se) => {\n const mutates = sideEffectInstances[se.name || se].constructor.mutates();\n if (mutates && propagationInf.isMutableAction === false) {\n return false;\n }\n if (!actionOnSource && payload.criteria !== null) {\n const sideEffectChecker = sourceSideEffects[se.name || se];\n return sideEffectChecker ? sideEffectChecker(propagationInf.propPayload, context) : true;\n }\n if (propagationSourceCanvas === aliasName || actionOnSource) {\n return se.applyOnSource !== false;\n }\n\n return true;\n });\n d.effects = mappedEffects;\n });\n return applicableSideEffects;\n }\n\n shouldApplySideEffects (propagate) {\n return propagate === false;\n }\n\n onDataModelPropagation () {\n return (data, config) => {\n let isSourceFieldPresent = true;\n let isMutableAction = false;\n const propPayload = config.payload;\n const sourceIdentifiers = config.sourceIdentifiers;\n const enabledFn = config.enabled;\n const action = config.action;\n const payloadFn = payloadGenerator[action] || payloadGenerator.__default;\n\n if (sourceIdentifiers) {\n const fieldsConfig = sourceIdentifiers.getFieldsConfig();\n const sourceIdentifierFields = Object.keys(fieldsConfig);\n const propFields = Object.keys(data[0].getFieldsConfig());\n if (!Object.values(fieldsConfig).some(d => d.def.type === FieldType.MEASURE)) {\n isSourceFieldPresent = sourceIdentifierFields.some(d => propFields.indexOf(d) !== -1);\n }\n }\n\n const payload = payloadFn(this.context, data, config);\n const sourceBehaviours = this._sourceBehaviours;\n const filterFn = sourceBehaviours[action] || sourceBehaviours['*'];\n let enabled = true;\n\n if (filterFn) {\n enabled = filterFn(propPayload || {}, this.context);\n }\n\n if (enabledFn) {\n enabled = enabledFn(config, this) && enabled !== false;\n }\n\n if (enabled) {\n const effects = this._behaviourEffectMap[action];\n const sideEffectInstances = this.sideEffects();\n isMutableAction = config.groupId ?\n effects.some(d => sideEffectInstances[d.name || d].constructor.mutates()) : config.isMutableAction;\n\n const propagationInf = {\n propagate: false,\n data,\n propPayload,\n sourceIdentifiers,\n persistent: false,\n isSourceFieldPresent,\n sourceId: config.propagationSourceId,\n isMutableAction: config.isMutableAction\n };\n\n this._actionHistory[action] = {\n payload,\n propagationInf,\n isMutableAction\n };\n this.dispatchBehaviour(action, payload, propagationInf);\n }\n };\n }\n\n prepareSelectionSets (behaviours) {\n const data = this.context.data();\n if (data) {\n this.createSelectionSet(data.getData().uids, behaviours);\n }\n return this;\n }\n\n initializeSideEffects () {\n if (this.context.data()) {\n super.initializeSideEffects();\n }\n return this;\n }\n\n remove () {\n this.context.cachedData()[0].unsubscribe('propagation');\n return this;\n }\n}\n","import { layerFactory } from '@chartshq/visual-layer';\nimport {\n Store,\n setAttrs,\n getUniqueId,\n getQualifiedClassName,\n selectElement,\n transactor,\n makeElement,\n registerListeners,\n generateGetterSetters,\n getDataModelFromIdentifiers,\n isSimpleObject,\n transposeArray,\n CommonProps,\n toArray,\n STATE_NAMESPACES\n} from 'muze-utils';\nimport { physicalActions, sideEffects, behaviouralActions, behaviourEffectMap } from '@chartshq/muze-firebolt';\nimport { actionBehaviourMap } from './firebolt/action-behaviour-map';\nimport {\n renderLayers,\n getNearestDimensionalValue,\n removeLayersBy,\n getLayersBy,\n getLayerFromDef,\n getLayerAxisIndex,\n sanitizeLayerDef,\n createSideEffectGroup,\n resolveEncodingTransform,\n createRenderPromise,\n setAxisRange\n} from './helper';\nimport { renderGridLineLayers } from './helper/grid-lines';\nimport localOptions from './local-options';\nimport { listenerMap, calculateDomainListener } from './listener-map';\nimport {\n DOMAIN\n} from './enums/reactive-props';\nimport { PROPS } from './props';\nimport UnitFireBolt from './firebolt';\nimport { initSideEffects } from './firebolt/helper';\nimport './styles.scss';\n\nconst FORMAL_NAME = 'unit';\n\n/**\n * Visual Unit is hierarchical component created by {@link VisualGroup}. This component accepts layer definitions\n * and creates concrete layer instances from them, binds data and attaches axis to them. It also retreives the domain\n * from the layers and unions them and sets them on corresponding axis instances. This also creates the parent svg\n * groups for all the layers and delegates the rendering to all the layers.\n *\n * @public\n * @module VisualUnit\n * @class\n */\nexport default class VisualUnit {\n\n /**\n * Creates instance of visualization unit.\n *\n * @param {Object} registry Component registry\n * @param {Object} dependencies Dependencies required by visual unit.\n */\n constructor (registry, dependencies) {\n this._id = getUniqueId();\n this._dependencies = dependencies;\n this._layerDeps = {\n throwback: new Store({\n [CommonProps.ON_LAYER_DRAW]: false\n }),\n smartLabel: dependencies.smartLabel,\n lifeCycleManager: dependencies.lifeCycleManager\n };\n this._renderedResolve = null;\n this._renderedPromise = new Promise((resolve) => {\n this._renderedResolve = resolve;\n });\n createRenderPromise(this);\n this._layerDeps.throwback.registerChangeListener([CommonProps.ON_LAYER_DRAW], () => {\n this._renderedResolve();\n this._lifeCycleManager.notify({ client: this.layers(), action: 'drawn', formalName: 'layer' });\n });\n\n this._lifeCycleManager = dependencies.lifeCycleManager;\n this._layersMap = {};\n this._gridLinesSelection = null;\n this._gridBandsSelection = null;\n this._gridLines = [];\n this._gridBands = [];\n this._layerNamespaces = {};\n this._layerAxisIndex = {};\n this._transformedDataModels = {};\n layerFactory.setLayerRegistry(registry.layerRegistry);\n generateGetterSetters(this, PROPS);\n this.registry(registry);\n this.cachedData([]);\n }\n\n static formalName () {\n return FORMAL_NAME;\n }\n\n static getState () {\n return [\n {\n domain: {}\n },\n localOptions\n ];\n }\n\n store (...params) {\n if (params.length) {\n this._store = params[0];\n const metaInf = this.metaInf();\n this.store().append(`${STATE_NAMESPACES.UNIT_LOCAL_NAMESPACE}`, {\n [`${metaInf.namespace}`]: null\n });\n const localNs = `${STATE_NAMESPACES.UNIT_LOCAL_NAMESPACE}.${metaInf.namespace}`;\n transactor(this, localOptions, this.store().model, {\n namespace: localNs\n });\n registerListeners(this, listenerMap, {\n local: localNs,\n global: STATE_NAMESPACES.UNIT_GLOBAL_NAMESPACE\n }, {\n rowIndex: metaInf.rowIndex,\n colIndex: metaInf.colIndex\n });\n this.firebolt(new UnitFireBolt(this, {\n physical: physicalActions,\n behavioural: behaviouralActions,\n physicalBehaviouralMap: actionBehaviourMap\n }, sideEffects, behaviourEffectMap));\n return this;\n }\n return this._store;\n }\n\n /**\n * Static helper for creates a unit instance\n *\n * @param {Object} [id] optional unique identifier for a unit; , id is calculated internally\n * @param {DataModel} data instance of datamodel\n * @param {Array.} layers layer configuration\n * @param {Object} config configurtion for the visual unit\n * @return {VisualUnit} Instance of a unit\n */\n static create (...params) {\n return new this(...params);\n }\n\n /**\n * Returns the instance of firebolt associated with this visual unit. Firebolt dispatches the behavioural actions\n * when any physical action happens on the elements of visual unit.\n *\n * @public\n *\n * @return {Firebolt} Instance of firebolt.\n */\n firebolt (...firebolt) {\n if (firebolt.length) {\n this._firebolt = firebolt[0];\n return this;\n }\n return this._firebolt;\n }\n\n /**\n * Returns the unique id of this visual unit.\n *\n * @public\n * @return {string} Unique identifier.\n */\n id () {\n return this._id;\n }\n\n lockModel () {\n this._store.model.lock();\n return this;\n }\n\n unlockModel () {\n this._store.model.unlock();\n return this;\n }\n\n timeDiffsByField (...params) {\n if (params.length) {\n return this;\n }\n return this._timeDiffsByField;\n }\n\n /**\n * Renders the visual unit. It creates the layout and renders the axes and layers.\n *\n * @return {VisualUnit} Instance of visual unit.\n */\n render (container) {\n const config = this.config();\n const { className, defClassName, sideEffectClassName, classPrefix } = config;\n const qualifiedClassName = getQualifiedClassName(defClassName, this.id(), config.classPrefix);\n const width = this.width();\n const height = this.height();\n const containerSelection = selectElement(container).style('position', 'relative');\n\n this._rootSvg = makeElement(containerSelection, 'svg', [null], className)\n .style('width', `${width}px`).style('height', `${height}px`);\n\n const node = this._rootSvg.node();\n setAttrs(node, {\n width,\n height,\n class: qualifiedClassName.join(' ')\n });\n\n setAxisRange(this);\n renderGridLineLayers(this, node);\n renderLayers(this, node, this.layers(), {\n width,\n height\n });\n this._sideEffectGroup = createSideEffectGroup(node, `${classPrefix}-${sideEffectClassName}`);\n const firebolt = this.firebolt();\n initSideEffects(firebolt.sideEffects(), firebolt);\n return this;\n }\n\n done () {\n return this._renderedPromise;\n }\n\n /**\n * Caches all the datamodels in an array from the next `data()` call on visual unit until `clearCaching()` or\n * `resetData()` is called on it.\n *\n * @public\n * @return {VisualUnit} Instance of visual unit.\n */\n\n enableCaching () {\n this._cache = true;\n return this;\n }\n\n /**\n * Clears all the previous cached data.\n *\n * @public\n * @segment VisualUnit\n * @return {VisualUnit} Instance of visual unit.\n */\n clearCaching () {\n this._cache = false;\n this.cachedData([this.cachedData()[0]]);\n return this;\n }\n\n /**\n * Returns the drawing information from visual unit.Drawing context contains the dimensions of unit and the svg\n * container of the visual unit.\n *\n * @public\n *\n * @return {Object} Drawing information.\n * ```\n * {\n * htmlContainer: // Html container of svg container of the visual unit\n * svgContainer: // Root svg container\n * width: // Width of the visual unit\n * height: // Height of the visual unit\n * sideEffectGroup: // Svg group for drawing side effect elements.\n * parentContainer: // Parent html container of the visual unit.\n * xOffset: // x offset space from the starting x position of the container,\n * yOffset: // y offset space from the starting y position of the container\n * }\n * ```\n */\n getDrawingContext () {\n const rootSvg = this._rootSvg && this._rootSvg.node();\n const width = this.width();\n const height = this.height();\n const { el, dimensions } = this.parentContainerInf();\n return {\n htmlContainer: this.mount(),\n svgContainer: rootSvg,\n width,\n height,\n sideEffectGroup: this._sideEffectGroup,\n parentContainer: el,\n parentContainerDimensions: dimensions,\n xOffset: 0,\n yOffset: 0\n };\n }\n\n /**\n * Returns the serialized configuration of visual unit.\n *\n * @return {Object} serialized configuration\n */\n serialize () {\n return {\n layers: this.layers().map(layer => layer.serialize()),\n config: this.config(),\n axes: this.axes().map(axis => axis.serialize())\n };\n }\n\n mount (...mount) {\n if (mount.length) {\n this._mount = mount[0];\n this.render(mount[0]);\n this.firebolt().mapActionsAndBehaviour();\n return this;\n }\n return this._mount;\n }\n\n /**\n * Adds a new layer to the visual unit. It takes a layer definition and creates layer instances from them. It does\n * not render the layers. It returns the layer instances in an array. If the layer definition is a composite layer,\n * then multiple layer instances will be returned in the array.\n *\n * To add a layer in the unit,\n * ```\n * unit.addLayer({\n * name: 'bullet',\n * mark: 'bar',\n * encoding: {\n * x: 'Year',\n * y: 'Acceleration',\n * color: 'Origin'\n * }\n * });\n * ```\n * @public\n * @param {Object} layerDef Definition of new layer.\n *\n * @return {Array} Array of layer instances.\n */\n addLayer (layerDefinition) {\n const layerDefinitions = sanitizeLayerDef(toArray(layerDefinition));\n\n const layersMap = this._layersMap;\n const markSet = {};\n const store = {\n layers: {},\n components: {\n unit: this\n }\n };\n let layerIndex = 0;\n let startIndex = [].concat(...Object.values(this._layersMap)).length;\n const metaInf = this.metaInf();\n const props = this._layerNamespaces;\n const layers = layerDefinitions.sort((a, b) => a.order - b.order).reduce((layersArr, layerDef) => {\n const definition = layerDef.def;\n const markId = definition.name;\n const defArr = toArray(definition);\n const namespaces = [];\n defArr.forEach((def) => {\n def.order = layerDef.order + layerIndex;\n const namespace = `${metaInf.namespace}${startIndex}`;\n if (!layersMap[markId]) {\n startIndex++;\n if (definition.calculateDomain !== false) {\n props[`${STATE_NAMESPACES.LAYER_GLOBAL_NAMESPACE}.${DOMAIN}.${namespace}`] = true;\n }\n }\n namespaces.push(namespace);\n });\n layerIndex += defArr.length;\n const instances = getLayerFromDef(this, definition, layersMap[markId], namespaces);\n store.layers = Object.assign(store.layers, instances);\n const instanceValues = Object.values(instances);\n layersArr = layersArr.concat(...instanceValues);\n layersMap[markId] = instanceValues;\n markSet[markId] = markId;\n return layersArr;\n }, []);\n\n store.unit = this;\n const layerdeps = {};\n const layersArr = [].concat(...Object.values(this._layersMap));\n layersArr.forEach((layer) => {\n const alias = layer.alias();\n store.layers[alias] = layer;\n layerdeps[alias] = [];\n });\n layers.forEach((layer) => {\n const depArr = resolveEncodingTransform(layer, store);\n layerdeps[layer.alias()] = depArr;\n });\n\n this._layerDepOrder = layerdeps;\n this._layerAxisIndex = Object.assign(this._layerAxisIndex, getLayerAxisIndex(layers, this.fields()));\n const stateStore = this.store();\n\n stateStore.unsubscribe({\n key: 'calculateDomainListener',\n namespace: `${STATE_NAMESPACES.UNIT_LOCAL_NAMESPACE}.${metaInf.namespace}`\n });\n stateStore.registerImmediateListener(Object.keys(props), calculateDomainListener(this, metaInf.namespace),\n false, {\n key: 'calculateDomainListener',\n namespace: `${STATE_NAMESPACES.UNIT_LOCAL_NAMESPACE}.${metaInf.namespace}`\n });\n this.layers(layersArr);\n return layers;\n }\n\n /**\n *\n *\n *\n * @memberof VisualUnit\n */\n remove () {\n const lifeCycleManager = this._dependencies.lifeCycleManager;\n lifeCycleManager.notify({ client: this, action: 'beforeremove', formalName: 'unit' });\n this.store().unsubscribe({\n namespace: `${STATE_NAMESPACES.UNIT_LOCAL_NAMESPACE}.${this.metaInf().namespace}`\n });\n selectElement(this.mount()).remove();\n this.firebolt().remove();\n // Remove layers\n lifeCycleManager.notify({ client: this.layers(), action: 'beforeremove', formalName: 'layer' });\n this.layers().forEach(layer => layer.remove());\n lifeCycleManager.notify({ client: this.layers(), action: 'removed', formalName: 'layer' });\n lifeCycleManager.notify({ client: this, action: 'removed', formalName: 'unit' });\n return this;\n }\n\n /**\n *\n *\n * @param {*} identifiers\n *\n * @memberof VisualUnit\n */\n getDataModelFromIdentifiers (identifiers, mode, parentModel) {\n if (identifiers === null) {\n return null;\n }\n const dataModel = parentModel || this.data();\n return getDataModelFromIdentifiers(dataModel, identifiers, mode);\n }\n\n /**\n * Resets the data of visual unit to original data model. It also clears the cached data.\n *\n * @public\n * @segment VisualUnit\n * @return {VisualUnit} Instance of visual unit.\n */\n resetData () {\n this.data(this.cachedData()[0]);\n return this;\n }\n\n /**\n *\n *\n *\n * @memberof VisualUnit\n */\n getSourceInfo () {\n return {\n dimensionMeasureMap: this._dimensionMeasureMap,\n fields: this.fields(),\n data: this.data(),\n axes: this.axes()\n };\n }\n\n getDataDomain () {\n return this.store().get(`${STATE_NAMESPACES.UNIT_GLOBAL_NAMESPACE}.domain.${this.metaInf().namespace}`);\n }\n\n /**\n *\n *\n *\n * @memberof VisualUnit\n */\n getDefaultTargetContainer () {\n const { classPrefix, defClassName } = this.config();\n return [`.${classPrefix}-${defClassName}`];\n }\n\n /**\n * Returns an array of layer instances which matches the supplied mark type.\n *\n * @public\n *\n * @param {string} type Mark type of layer.\n *\n * @return {Array} Array of layer instances.\n */\n getLayersByType (type) {\n const layers = getLayersBy(this.layers(), 'type', type);\n return layers;\n }\n\n /**\n * Returns the layer instance which matches the supplied layer name. If no layer is found, then it returns\n * undefined.\n *\n * @public\n * @param {string} name Name of layer.\n *\n * @return {VisualUnit} Layer instance.\n */\n getLayerByName (name) {\n const layers = getLayersBy(this.layers(), 'name', name);\n return layers[0];\n }\n\n /**\n * Returns the point located nearest to the supplied x and y position. It returns the unique identifiers of the\n * point. This function also accepts an additional configuration `getAllPoints` inside `config` object in the third\n * argument which if set to true, then it returns the identifiers of all the points which falls on the nearest\n * x value or y value if any one of the field is a dimension. Additionally, a target property is also returned\n * which contains the identifier of the nearest point. If no nearest point is found, then it returns identifier\n * as null.\n *\n * @public\n *\n * @param {number} x X Position of the point from where nearest point is to be found.\n * @param {number} y Y Position of the point from where nearest point is to be found.\n * @param {Object} config Additional configuration options.\n * @param {boolean} config.getAllPoints If true, then returns all the points nearest to the x value or y value if\n * it is dimension.\n * @param {Object} config.data Data associated with the nearest point.\n * @return {Object} Nearest point information\n * ```\n * {\n * id: [['Origin'], ['USA'], ['Japan']], // Identifiers of all the points closest to the x value.\n * target: [['Origin'], ['Japan']] // Identifier of the nearest point.\n * }\n * ```\n */\n getNearestPoint (x, y, config) {\n let pointObj = {\n id: null\n };\n const dimValue = getNearestDimensionalValue(this, {\n x,\n y\n });\n\n if (dimValue !== null && config.getAllPoints) {\n pointObj.id = dimValue;\n const pointInf = this.getMarkInfFromLayers(x, y, config);\n pointObj.target = pointInf && pointInf.id ? pointInf.id : pointObj.id;\n return pointObj;\n }\n\n const markInf = this.getMarkInfFromLayers(x, y, config) || { id: null };\n pointObj = Object.assign({}, markInf);\n\n pointObj.target = markInf.id;\n return pointObj;\n }\n\n getMarkInfFromLayers (x, y, args) {\n const layers = this.layers();\n const len = layers.length;\n let point = null;\n // Iterate through the layers array and fetch the nearest point from each layer. If a valid\n // nearest point is found from any layer, then return that point.\n for (let i = 0; i < len; i++) {\n const layer = layers[i];\n const config = layer.config();\n if (config.interactive !== false) {\n point = layer.getNearestPoint(x, y, args);\n }\n if (point) {\n return point;\n }\n }\n return point;\n }\n\n /**\n * Get the information of all the marks such as x, y position and size from supplied identifiers. It\n * returns an array of points whose data matches the given identifiers.\n *\n * @public\n *\n * @param {Array|Object} identifiers Field names and their corresponding values.\n * ```\n * identifiers can be given in an array of array,\n * ['Origin', 'Name'], // Names of the fields supplied in first array\n * ['USA', 'ford'], // Data values of each field supplied in rest of the arrays.\n * ['Japan', 'ford']\n * or in an object,\n * {\n * Origin: ['USA']\n * }\n * ```\n * @param {Object} config Optional configurations which decides which information of the mark will\n * be retrieved.\n * @param {boolean} [config.getAllAttrs = false] If true, then returns all the information of each mark.\n * @param {boolean} [config.getBBox = false] If true, then returns the bounding box of each mark.\n *\n * @return {Array} Array of objects containing the information of each point.\n * ```\n * By default, the method returns the array of points in this structure,\n * [\n * {\n * x: 20,\n * y: 100,\n * width: 200,\n * height: 100\n * }\n * ]\n * If 'config.getAllAttrs' is true, then it returns all the information of each mark,\n * [\n * // Positions of mark on initial state of transition.\n * enter: {\n * x: 0,\n * y: 0\n * },\n * // Final positions of the mark\n * update: {\n * x: 20,\n * y: 10\n * },\n * style: // css styles of each mark\n * source: [200, 'USA'] // Row information of each mark\n * id: 20 // Row id of each mark\n * ]\n * ```\n */\n getPlotPointsFromIdentifiers (identifiers, config = {}) {\n let points = [];\n let parsedIdentifiers = identifiers;\n if (identifiers === null) {\n return [];\n }\n const layers = this.layers();\n const len = layers.length;\n if (isSimpleObject(identifiers)) {\n parsedIdentifiers = [Object.keys(identifiers)];\n parsedIdentifiers = [...parsedIdentifiers, ...transposeArray(Object.values(identifiers))];\n }\n for (let i = 0; i < len; i++) {\n const layer = layers[i];\n if (layer.config().interactive !== false) {\n points = [...points, ...layer.getPointsFromIdentifiers(parsedIdentifiers, config)];\n }\n }\n return points;\n }\n\n /**\n * Removes the layer instance which matches the supplied layer name.\n *\n * @public\n * @param {string} name Name of layer\n *\n * @return {VisualUnit} Instance of visual unit.\n */\n removeLayerByName (name) {\n removeLayersBy('name', name);\n return this;\n }\n\n /**\n * Removes all the layer instances which matches the supplied mark type.\n *\n * @public\n * @param {string} type Mark type of layer.\n *\n * @return {VisualUnit} Instance of visual unit.\n */\n removeLayersByType (type) {\n removeLayersBy('type', type);\n return this;\n }\n}\n","import { DataModel } from 'muze-utils';\nimport { retriveDomainFromData, sortFacetFields } from './group-utils';\n\n/**\n * Gets name of fields form the variables\n *\n * @param {*} fields1\n * @param {*} [fields2=[]]\n *\n */\nconst getFieldNames = (fields1, fields2 = []) => [fields1, fields2].map(fields => fields.reduce((acc, d) => {\n acc = [...acc, ...d.getMembers()];\n return acc;\n}, []));\n\n/**\n * Creates a selected datamodel from a parent datamodel and a set of field names\n *\n * @param {Object} datamodel provided as input\n * @param {Array} fieldNames schema names\n * @param {Array} fieldValues values of those schema names to be selected\n * @return {Object} creates a new selected datamodel\n */\nconst createSelectedDataModel = (datamodel, fieldNames, fieldValues) =>\n datamodel.select(fields => fieldNames.every((field, k) => fields[field].value === fieldValues[k]));\n\n/**\n *\n *\n * @param {*} facets\n * @param {*} keyArray\n *\n */\nconst uniqueKeyGenerator = (keyArray, context, depth = 0, val = []) => {\n const {\n facets,\n dataModel,\n uniqueValues\n } = context;\n\n // Get unique keys for the next depth recursively if required\n if (facets[depth + 1]) {\n const field = facets[depth];\n uniqueValues.forEach((value) => {\n const newDm = dataModel.select(fields => fields[field].value === value);\n const nextDepthUniqueValues = retriveDomainFromData(newDm, facets[depth + 1]);\n const newContext = {\n facets,\n dataModel: newDm,\n uniqueValues: nextDepthUniqueValues\n };\n\n uniqueKeyGenerator(keyArray, newContext, depth + 1, [...val, value]);\n });\n } else {\n uniqueValues.forEach((value) => {\n keyArray.push([...val, value]);\n });\n }\n};\n\n/**\n * projects row model based on the set of row and/or column and other projection fields\n *\n * @param {Object} datamodel provided as input\n * @return {Object} Projected datamodel\n */\nconst projectRows = (datamodel, projections) => {\n const {\n allColumnProjections,\n rowProjections,\n optionalProjections\n } = projections;\n\n if (rowProjections.length > 0) {\n return rowProjections.map((projectFields) => {\n const [projFieldNames, colProjFieldNames] = getFieldNames(projectFields, allColumnProjections);\n return datamodel.project([...projFieldNames, ...colProjFieldNames, ...optionalProjections]);\n });\n }\n return [datamodel];\n};\n\n/**\n * Adds the datamodels to current row index based on column fields\n *\n * @param {Array} context current context\n * @param {Array} valueCellCreator List of facets applied to the current datamodel\n */\nconst pushToMatrix = (context, valueCellCreator) => {\n let cells = [];\n const {\n matrix,\n datamodel,\n facetInfo,\n fieldInfo\n } = context;\n // Get projected fields for current row\n const {\n rowProjections,\n colProjections,\n optionalProjections\n } = fieldInfo;\n const {\n rowIndex,\n columnIndex\n } = facetInfo;\n const rowProj = rowProjections[(rowIndex) % rowProjections.length] || [];\n\n // Get the cells for the matrix from the return function of the callback on the datamodel.\n // callback function -> (datamodel, {projections, indices}, facets)\n if (colProjections.length > 0) {\n cells = colProjections.map((projectFields, projIdx) => {\n const [colProjFieldNames, rowProjFieldNames] = getFieldNames(projectFields, rowProj);\n const projectedDm = datamodel.project([...colProjFieldNames, ...rowProjFieldNames, ...optionalProjections]);\n const projections = { rowFields: rowProj, columnFields: projectFields };\n const indices = { rowIndex, columnIndex: columnIndex * colProjections.length + projIdx };\n\n return valueCellCreator(projectedDm, { projections, indices }, facetInfo);\n });\n } else {\n const projections = { rowFields: rowProj, columnFields: [] };\n const indices = { rowIndex, columnIndex };\n\n cells = [valueCellCreator(datamodel, { projections, indices }, facetInfo)];\n }\n\n matrix[rowIndex] = matrix[rowIndex] || [];\n matrix[rowIndex].push(...cells);\n};\n\n/**\n * Formats row or columns keys with the provided formatter.\n *\n * @param {Array} keys - The collection of row or column keys.\n * @param {Array} formatterList - The list of corresponding formatter.\n */\nconst formatKeys = (keys, formatterList) => {\n keys.forEach((rKeys) => {\n rKeys.forEach((key, idx) => {\n rKeys[idx] = formatterList[idx](key);\n });\n });\n};\n\n/**\n * Gets Matrixes for corresponding datamodel, facets and projections\n *\n * @param {Object} dataModel input datamodel\n * @param {Array} facetsAndProjections contains the set of facets and projections for the matrices\n * @param {Function} valueCellCreator Callback executed after datamodels are prepared after sel/proj\n * @param {Object} globalConfig global config\n *\n * @return {Object} set of matrices with the corresponding row and column keys\n */\nexport const getMatrixModel = (dataModel, facetsAndProjections, valueCellCreator, globalConfig) => {\n let rowDataModels = [];\n const rowKeys = [];\n const columnKeys = [];\n const allColumnProjections = [];\n const matrix = [];\n const facetInfo = [];\n\n const fieldInfo = Object.assign({}, facetsAndProjections);\n const {\n rowFacets,\n colFacets,\n colProjections\n } = fieldInfo;\n\n colProjections.forEach((colProj) => {\n allColumnProjections.push(...colProj);\n });\n fieldInfo.allColumnProjections = allColumnProjections;\n\n // Performing row selection and projection\n if (rowFacets.length > 0) {\n // Get unique values for the root level of facet\n const field = rowFacets[0].toString();\n const firstLevelRowKeys = retriveDomainFromData(dataModel, field);\n\n sortFacetFields(rowFacets[0], firstLevelRowKeys, globalConfig);\n\n // Get unique keys in the form of an array of arrays for each row\n uniqueKeyGenerator(rowKeys, { facets: rowFacets, dataModel, uniqueValues: firstLevelRowKeys });\n\n // Apply selection -> projection -> row datamodels\n rowKeys.forEach((val) => {\n // Create faceted datamodel\n const [rowFacetFieldNames] = getFieldNames(rowFacets);\n const selectedDataModel = createSelectedDataModel(dataModel, rowFacetFieldNames, val);\n\n // Project the datamodel based on the number of projections (based on last levels)\n const newProjectedDataModels = projectRows(selectedDataModel, fieldInfo);\n rowDataModels.push(...newProjectedDataModels);\n\n newProjectedDataModels.forEach(() => {\n facetInfo.push([rowFacets, val]);\n });\n });\n } else {\n // No row facets, hence only row projection\n rowDataModels.push(...projectRows(dataModel, fieldInfo));\n }\n\n // Maintaining set of row datamodels for column resolution\n rowDataModels = rowDataModels.length > 0 ? rowDataModels : [[]];\n\n // Performing column selection and projection\n if (colFacets.length > 0) {\n const colFacetNames = colFacets.map(d => `${d}`);\n // Get unique values for the root level of facet\n const field = colFacetNames[0];\n const firstLevelColumnKeys = retriveDomainFromData(dataModel, field);\n\n sortFacetFields(colFacets[0], firstLevelColumnKeys, globalConfig);\n\n // Get unique keys to create faceted datamodels: this time for columns\n uniqueKeyGenerator(columnKeys, {\n facets: colFacetNames,\n dataModel,\n uniqueValues: firstLevelColumnKeys\n });\n // For each row in the datamodel, apply selection -> projection -> push the projection to matri\n rowDataModels.forEach((dme, rIndex) => {\n facetInfo[rIndex] = facetInfo[rIndex] || [[], []];\n columnKeys.forEach((val, cIndex) => {\n matrix[rIndex] = matrix[rIndex] || [];\n\n // If datamodel is not present in current row, choose parent datamodel\n const datamodel = dme instanceof DataModel ? dme : dataModel;\n\n // Selection is made on the datamodel for the current row\n const selectedDataModel = createSelectedDataModel(datamodel, colFacetNames, val);\n const context = {\n matrix,\n datamodel: selectedDataModel,\n facetInfo: {\n rowFacets: facetInfo[rIndex],\n colFacets: [colFacets, val],\n rowIndex: rIndex,\n columnIndex: cIndex\n },\n fieldInfo\n };\n pushToMatrix(context, valueCellCreator);\n });\n });\n } else {\n // No column facets, hence only row projection\n rowDataModels.forEach((dme, rIndex) => {\n facetInfo[rIndex] = facetInfo[rIndex] || [[], []];\n const context = {\n matrix,\n datamodel: dme || dataModel,\n facetInfo: {\n rowFacets: facetInfo[rIndex],\n colFacets: [[], []],\n rowIndex: rIndex,\n columnIndex: 0\n },\n fieldInfo\n };\n\n pushToMatrix(context, valueCellCreator);\n });\n }\n\n formatKeys(columnKeys, colFacets.map(facetField => facetField.rawFormat()));\n formatKeys(rowKeys, rowFacets.map(facetField => facetField.rawFormat()));\n\n // Getting column keys\n const transposedColKeys = columnKeys.length > 0 ? columnKeys[0].map((col, i) =>\n columnKeys.map(row => row[i])) : columnKeys;\n\n return { matrix, rowKeys, columnKeys: transposedColKeys };\n};\n","import { AxisOrientation } from '@chartshq/muze-axis';\nimport {\n getObjProp,\n FieldType,\n STATE_NAMESPACES,\n retrieveNearestGroupByReducers,\n mergeRecursive,\n createSelection\n} from 'muze-utils';\nimport { getMatrixModel } from './matrix-model';\nimport {\n getCellKey,\n isDistributionEqual,\n mutateAxesFromMap,\n getFieldsFromSuppliedLayers,\n extractFields\n} from './group-utils';\nimport { ROW, ROWS, COLUMNS, COL, LEFT, RIGHT, TOP,\n BOTTOM, PRIMARY, SECONDARY, X, Y, TEMPORAL } from '../enums/constants';\nimport { SimpleVariable } from '../variable';\n\n/**\n * Updates row and column cells with the geom cell corresponding to the facet keys\n *\n * @param {*} resolver\n * @param {*} facets\n */\nconst updateCells = (resolver, facets, geomCell) => {\n [ROW, COL].forEach((field) => {\n const cells = resolver[`${field}Cells`]();\n const facetKey = facets[`${field}Facets`][1].join();\n\n !cells[facetKey] && (cells[facetKey] = []);\n cells[facetKey].push(geomCell);\n resolver[`${field}Cells`](cells);\n });\n};\n\n/**\n *\n *\n * @param {*} context\n * @param {*} datamodel\n * @param {*} fieldInfo\n * @param {*} facets\n *\n */\nexport const createValueCells = (context, datamodel, fieldInfo, facets) => {\n const {\n projections,\n indices\n } = fieldInfo;\n const {\n rowFields,\n columnFields\n } = projections;\n const {\n rowIndex,\n columnIndex\n } = indices;\n const {\n suppliedLayers,\n cell: GeomCell,\n resolver,\n config,\n encoder,\n detailFields\n } = context;\n const axes = resolver.axes();\n const cacheMaps = resolver.cacheMaps();\n const matrixLayers = resolver.matrixLayers();\n const labelManager = resolver.dependencies().smartlabel;\n const horizontalAxis = resolver.horizontalAxis();\n const verticalAxis = resolver.verticalAxis();\n const datamodelTransform = resolver.datamodelTransform();\n const {\n entryCellMap,\n exitCellMap\n } = cacheMaps;\n const layerConfigArr = encoder.getLayerConfig({ columnFields, rowFields }, suppliedLayers || [],\n context.retinalConfig);\n const axesCreators = { config, labelManager, axes, cacheMaps };\n\n fieldInfo.normalizedColumns = verticalAxis.fields;\n fieldInfo.normalizedRows = horizontalAxis.fields;\n\n const allFacets = [\n [...facets.rowFacets[0], ...facets.colFacets[0]],\n [...facets.rowFacets[1], ...facets.colFacets[1]]\n ];\n const facetFields = allFacets.slice();\n facetFields[0] = facetFields[0].map(facetField => facetField.oneVar());\n\n matrixLayers[rowIndex] = matrixLayers[rowIndex] ? matrixLayers[rowIndex] : [];\n matrixLayers[rowIndex][columnIndex] = layerConfigArr;\n\n // return from map if already there otherwise create and put in map\n const geomCellKey = getCellKey(rowIndex, columnIndex);\n const fields = {\n y: rowFields,\n x: columnFields\n };\n\n const geomCell = !exitCellMap.has(geomCellKey) ? new GeomCell() : exitCellMap.get(geomCellKey);\n\n geomCell.data(datamodel)\n .fields(fields)\n .transform(datamodelTransform)\n .detailFields(detailFields)\n .facetByFields(allFacets);\n\n encoder.createAxis(axesCreators, fieldInfo, Object.assign({}, context, { geomCell, facetFields }));\n entryCellMap.set(geomCellKey, geomCell);\n exitCellMap.delete(geomCellKey);\n\n updateCells(resolver, facets, geomCell);\n\n return entryCellMap.get(geomCellKey);\n};\n\n/**\n * Creates axis cells based on the set of axes\n *\n * @param {Selection} selection Contains a selection of the axis units\n * @param {Array} axes Actual axis units\n * @param {number} axisIndex 0-> primary axis, 1-> secondary axis(when dual axis is made)\n * @param {Object} cells Contains a collection of the cells\n * @return {Object} return either set of axis/blank cells depending on the config\n */\n\nconst createAxisCells = (selection, axes, axisIndex, cells) =>\n createSelection(selection, axis => axis, axes, (item, i) => i + item.reduce((e, n) => {\n const id = n.id + axisIndex;\n return e + id;\n }, '')).map((currObj, axis) => {\n if (axis && axis[axisIndex]) {\n const axisInst = axis[axisIndex];\n const { orientation, show } = axisInst.config();\n\n return new cells.AxisCell().source(axisInst).config({\n isOffset: orientation === AxisOrientation.LEFT || orientation === AxisOrientation.TOP,\n show\n });\n }\n return new cells.BlankCell().config({ show: false });\n });\n\n/**\n *\n *\n * @param {*} context\n * @param {*} selectionObj\n * @param {*} cells\n * @retur\n */\nconst axisPlaceholderGn = (context, selObj, cells) => {\n const {\n matrices\n } = context;\n const {\n axesMatrix\n } = matrices;\n\n return (type, axisFrom) => {\n const axes = axesMatrix[`${type}`];\n\n if (axes && axes.length) {\n if (type === X || type === Y) {\n const fieldNames = type === Y ? ROWS : COLUMNS;\n\n [PRIMARY, SECONDARY].forEach((fieldType, index) => {\n const selObjProp = `${fieldNames}${fieldType}`;\n let axisIndex = index;\n let axesForDraw = axes;\n if (axisFrom === RIGHT || axisFrom === BOTTOM) {\n axisIndex = 1 - axisIndex;\n }\n if (!getObjProp(axes, 0, axisIndex)) {\n axesForDraw = [];\n }\n selObj[selObjProp] = createAxisCells(selObj[selObjProp], axesForDraw, axisIndex, cells);\n });\n } else {\n selObj.rowsPrimary = createAxisCells(selObj.rowPrime, axes.map(() => []), 0, cells);\n selObj.rowsSecondary = createAxisCells(selObj.rowSec, axes.map(() => []), 0, cells);\n selObj.columnsPrimary = createAxisCells(selObj.colPrime, axes[0], 0, cells);\n selObj.columnsSecondary = createAxisCells(selObj.colSec, axes[0], 0, cells);\n }\n }\n return selObj;\n };\n};\n\n/**\n * Creates header cells based on the set of headers\n *\n * @param {Object} selection Contains a selection of the header units\n * @param {string} headers Contains a list of the headers\n * @param {Object} cells Contains a collection of the cells\n * @param {Object} labelManager smart label instance\n * @return {Object} return either set of header cells depending on the config\n */\nconst createTextCells = (selection, headers, cells, labelManager) => createSelection(selection,\n (label) => {\n const textCell = new cells.TextCell({}, { labelManager });\n textCell.source(label);\n return textCell;\n }, headers, (key, i) => key + i);\n\n/**\n *\n *\n * @param {*} context\n * @param {*} selectionObj\n * @param {*} cells\n * @param {*} labelManager\n *\n */\nconst headerPlaceholderGn = (context, selectionObj, cells, labelManager) => {\n const {\n axis,\n keys,\n type,\n facet\n } = context;\n const counter = axis.length / keys.length;\n const selectionKeys = keys.length ? axis.map((d, i) => keys[Math.floor(i / counter)]) : [];\n\n const selObjUpdater = createSelection(selectionObj[`${type}Headers`], keySet => keySet, selectionKeys,\n (keySet, i) => `${keySet.join(',')}-${i}`);\n\n return selObjUpdater.map((keySet, data) => {\n let textCells = createTextCells(null, data, cells, labelManager);\n textCells = textCells.map((cell, k) => cell.source(k).config(facet));\n return textCells;\n });\n};\n\n/**\n * Creates a set of placeholders as a part of selection object\n *\n * @param {Array} normalizedOptions contains normalized rows and columns\n * @param {Array} matrices contains axis and value matrices\n * @param {aArrayny} projections contains set of row and column projections\n * @param {Object} cells Contains a collection of the cells\n * @param {Object} labelManager smart label instance\n * @return {Object} Creates a set of placeholders as a part of selections\n */\nconst generatePlaceholders = (context, cells, labelManager) => {\n let selectionObj;\n const {\n matrices,\n fields,\n facetsAndProjections,\n selection,\n facet,\n encoders,\n resolver\n } = context;\n const {\n rows,\n columns\n } = fields;\n const {\n valuesMatrix\n } = matrices;\n const {\n rowProjections,\n colProjections\n } = facetsAndProjections;\n const {\n rowKeys,\n columnKeys\n } = valuesMatrix;\n const takeAxisFrom = encoders.simpleEncoder._axisFrom;\n const takeHeaderFrom = encoders.simpleEncoder._headerFrom;\n\n selectionObj = selection || {};\n\n ['pie', X, Y].forEach((axis) => {\n const axisFrom = axis === X ? takeAxisFrom.column : takeAxisFrom.row;\n selectionObj = axisPlaceholderGn(context, selectionObj, cells)(axis, axisFrom);\n });\n\n const {\n rowsPrimary,\n rowsSecondary,\n columnsPrimary,\n columnsSecondary\n } = selectionObj;\n\n const rowAxis = rowsPrimary && rowsPrimary.getObjects().length ? rowsPrimary.getObjects() :\n (rowsSecondary && rowsSecondary.getObjects().length ? rowsSecondary.getObjects() : []);\n const colAxis = columnsPrimary && columnsPrimary.getObjects().length ? columnsPrimary.getObjects() :\n (columnsSecondary && columnsSecondary.getObjects().length ? columnsSecondary.getObjects() : []);\n\n const headerConfig = [\n { type: LEFT, section: rows[0], axis: rowAxis, headerFrom: takeHeaderFrom.row },\n { type: RIGHT, section: rows[1], axis: rowAxis, headerFrom: takeHeaderFrom.row },\n { type: TOP, section: columns[0], axis: colAxis, headerFrom: takeHeaderFrom.column },\n { type: BOTTOM, section: columns[1], axis: colAxis, headerFrom: takeHeaderFrom.column }\n ];\n\n headerConfig.forEach((config, index) => {\n let keys;\n let length;\n const {\n type,\n section,\n axis,\n headerFrom\n } = config;\n\n if (index < 2) {\n keys = rowKeys;\n length = rowProjections.length > 0 ? rowProjections.length : 1;\n } else {\n keys = columnKeys;\n length = colProjections.length > 0 ? colProjections.length : 1;\n }\n keys = keys.map(arr => arr.map(val => resolver.valueParser()(val)));\n if (section.length && headerFrom === type && axis && keys.length) {\n const hContext = { axis, length, type };\n let headers = [];\n if (index < 2) {\n hContext.keys = keys;\n hContext.facet = facet.rows;\n headers = headerPlaceholderGn(hContext, selectionObj, cells, labelManager);\n } else {\n hContext.facet = facet.columns;\n hContext.keys = keys[0].map((key, i) => keys.map(e => e[i]));\n\n headers = headerPlaceholderGn(hContext, selectionObj, cells, labelManager);\n }\n selectionObj[`${type}Headers`] = headers;\n } else {\n selectionObj[`${type}Headers`] = null;\n }\n });\n return selectionObj;\n};\n\n/**\n * Generates matrices\n *\n * @param {Object} config Configuration to generate matrices\n * @param {Array} matrices Matrices containing the set of visual units and axes units\n * @param {Object} cells Contains a collection of the cells\n * @param {Object} labelManager smart label instance\n * @return {Object} contains a collection of matrices\n */\nexport const generateMatrices = (context, matrices, cells, labelManager) => {\n const {\n unitHeight,\n unitWidth,\n facetsAndProjections,\n normalizedRows,\n normalizedColumns,\n selection,\n axisFrom,\n facet,\n encoders,\n resolver\n } = context;\n const placeholderContext = {\n fields: {\n rows: normalizedRows,\n columns: normalizedColumns\n },\n matrices,\n facetsAndProjections,\n selection,\n axisFrom,\n facet,\n encoders,\n resolver\n };\n // Generate placeholders for all matrices\n const selectionObj = generatePlaceholders(placeholderContext, cells, labelManager);\n const {\n columnsPrimary,\n columnsSecondary,\n rowsPrimary,\n rowsSecondary,\n leftHeaders,\n topHeaders,\n bottomHeaders,\n rightHeaders\n } = selectionObj;\n const [rowPrime, rowSec, colPrime, colSec] = [rowsPrimary, rowsSecondary, columnsPrimary, columnsSecondary]\n .map(d => (d ? d.getObjects() : []));\n const [leftFacets, rightFacets] = [leftHeaders, rightHeaders]\n .map(e => (e ? e.getObjects()\n .map(f => f.getObjects()) : []));\n let rowPriority = rowSec.length ? 1 : -1;\n rowPrime.length && rowPriority++;\n let colPriority = colSec.length ? 1 : -1;\n colPrime.length && colPriority++;\n\n // Compute left matrix using left headers and the axes on the rows\n let leftMatrix = leftFacets.length ? leftFacets.map((d, i) => {\n rowPrime[i] = rowPrime[i] ? [rowPrime[i]] : [];\n return [...d, ...rowPrime[i]];\n }) : (rowPrime ? rowPrime.map(d => [d]) : []);\n\n // Compute right matrix using right headers and the axes on the rows\n const rightMatrix = rowSec.length ? rowSec.map((d, i) => [d, ...(rightFacets[i] || [])]) : (rightFacets.length ?\n rightFacets.map(d => [...d]) : []);\n\n const topMatrix = [];\n if (topHeaders) {\n const headers = topHeaders.getObjects();\n headers.forEach((e) => {\n const innerHeaders = e.getObjects();\n innerHeaders.forEach((x, i) => {\n topMatrix[i] = topMatrix[i] || [];\n topMatrix[i].push(x);\n });\n });\n }\n // Compute top matrix using the top headers and axes on the columns\n if (colPrime.length) {\n topMatrix.push(colPrime);\n }\n\n // Bottom and right matrices are prepared using the user config.\n let bottomMatrix = [];\n if (colSec.length) {\n bottomMatrix.push(colSec);\n }\n const currentBottomLength = bottomMatrix.length;\n if (bottomHeaders) {\n const headers = bottomHeaders.getObjects();\n headers.forEach((e) => {\n const innerHeaders = e.getObjects();\n innerHeaders.forEach((x, i) => {\n bottomMatrix[i + currentBottomLength] = bottomMatrix[i + currentBottomLength] || [];\n bottomMatrix[i + currentBottomLength].push(x);\n });\n });\n }\n\n if (!leftMatrix.length && !rightMatrix.length) {\n const cell = new cells.BlankCell();\n cell.setAvailableSpace(unitWidth, unitHeight);\n leftMatrix = [[cell]];\n }\n\n if (!topMatrix.length && (!bottomMatrix.length || !bottomMatrix[0].length)) {\n const cell = new cells.BlankCell();\n cell.setAvailableSpace(unitWidth, unitHeight);\n bottomMatrix = [[cell]];\n }\n\n return {\n rows: [leftMatrix, rightMatrix],\n columns: [topMatrix, bottomMatrix],\n selectionObj,\n colPriority,\n rowPriority\n };\n};\nconst getAxisFields = (projections, fieldHolder = []) =>\n projections.reduce((acc, item) =>\n [...acc, ...item.reduce((ac, field) =>\n (field instanceof SimpleVariable ? [...ac, field.oneVar()] : ac), [])], fieldHolder);\n\nconst sortDmTemporalFields = (resolver, datamodel) => {\n let axisFields = [];\n const projections = resolver.projections();\n axisFields = getAxisFields(projections.rowProjections, getAxisFields(projections.colProjections));\n\n const fieldConfig = datamodel.getFieldsConfig();\n const temporalFields = axisFields.reduce((acc, field) =>\n ((fieldConfig[field].def.subtype === TEMPORAL) ? [...acc, [field]] : acc), []);\n return temporalFields.length ? datamodel.sort(temporalFields, { saveChild: true }) : datamodel;\n};\n\n/**\n * Computes matrices for a group\n *\n * @param {Object} datamodel on which the matrices are to be computed\n * @param {Object} config configuration of the matrices\n * @param {Object} layerRegistry contains the registered layers\n * @return {Object} conputed matrices\n * @memberof MatrixResolver\n */\nexport const computeMatrices = (context, config) => {\n const {\n resolver,\n datamodel,\n componentRegistry,\n encoders\n } = context;\n const {\n globalConfig,\n selection,\n transform\n } = config;\n const groupBy = globalConfig.autoGroupBy;\n const { smartlabel: labelManager } = resolver.dependencies();\n const fieldMap = datamodel.getFieldsConfig();\n const layerConfig = resolver.layerConfig();\n const registry = resolver.registry();\n const { fields: normalizedRows } = resolver.horizontalAxis();\n const { fields: normalizedColumns } = resolver.verticalAxis();\n const otherEncodings = resolver.optionalProjections(config, layerConfig);\n const facetsAndProjections = resolver.getAllFields();\n const matrixGnContext = {\n // Configuration to be passed to generate the different matrices.\n // A common config is used for both value matrices and other matrices\n normalizedColumns,\n normalizedRows,\n facetsAndProjections,\n layers: layerConfig,\n fieldMap,\n otherEncodings,\n encoders,\n facet: globalConfig.facet || {},\n axisFrom: globalConfig.axisFrom || {},\n selection,\n resolver\n };\n const cells = {\n GeomCell: resolver.getCellDef(registry.GeomCell),\n AxisCell: resolver.getCellDef(registry.AxisCell),\n BlankCell: resolver.getCellDef(registry.BlankCell),\n TextCell: resolver.getCellDef(registry.TextCell)\n };\n const isRowSizeEqual = isDistributionEqual(normalizedRows);\n const isColumnSizeEqual = isDistributionEqual(normalizedColumns);\n\n resolver.colCells({});\n resolver.rowCells({});\n resolver.datamodelTransform(transform || {});\n\n // Cell creation begins here\n resolver.resetSimpleAxes();\n\n const {\n entryCellMap\n } = resolver.cacheMaps();\n const newCacheMap = {\n exitCellMap: entryCellMap,\n entryCellMap: new Map()\n };\n\n resolver.cacheMaps(newCacheMap);\n\n const valueCellContext = {\n config: globalConfig,\n suppliedLayers: encoders.simpleEncoder.serializeLayerConfig(resolver.layerConfig()),\n resolver,\n cell: cells.GeomCell,\n encoder: encoders.simpleEncoder,\n newCacheMap,\n detailFields: config.detail,\n retinalConfig: {\n color: config.color,\n size: config.size,\n shape: config.shape\n }\n };\n const fieldsConfig = datamodel.getFieldsConfig();\n let groupedModel = datamodel;\n if (!groupBy.disabled) {\n const fields = getFieldsFromSuppliedLayers(valueCellContext.suppliedLayers, datamodel.getFieldsConfig());\n const allFields = extractFields(facetsAndProjections, fields);\n\n const dimensions = allFields.filter(field =>\n fieldsConfig[field] && fieldsConfig[field].def.type === FieldType.DIMENSION);\n const aggregationFns = groupBy.measures;\n const measureNames = Object.keys(datamodel.getFieldspace().getMeasure());\n const nearestAggFns = retrieveNearestGroupByReducers(datamodel, ...measureNames);\n const resolvedAggFns = mergeRecursive(nearestAggFns, aggregationFns);\n groupedModel = datamodel.groupBy(dimensions.length ? dimensions : [''], resolvedAggFns).project(allFields);\n }\n\n // sort temporal fields if any in the given rows and columns\n groupedModel = sortDmTemporalFields(resolver, groupedModel);\n // return a callback function to create the cells from the matrix\n const cellCreator = resolver.valueCellsCreator(valueCellContext);\n // Creates value matrices from the datamodel and configs\n const valueMatrixInfo = getMatrixModel(groupedModel, facetsAndProjections, cellCreator, globalConfig);\n\n resolver.cacheMaps().exitCellMap.forEach((placeholder) => {\n placeholder.remove();\n });\n resolver.cacheMaps().exitCellMap.clear();\n resolver.valueMatrix(valueMatrixInfo.matrix);\n\n const { xAxes, yAxes } = mutateAxesFromMap(resolver.cacheMaps(), resolver.axes());\n\n resolver.axes({\n x: xAxes,\n y: yAxes\n });\n const store = resolver.store();\n\n [xAxes, yAxes].forEach((axesArr, type) => {\n const stateProps = {};\n axesArr = axesArr || [];\n axesArr.forEach((axes, idx) => {\n axes.forEach((axis, axisIndex) => {\n stateProps[`${idx}${axisIndex}`] = null;\n });\n });\n store.append(`${STATE_NAMESPACES.GROUP_GLOBAL_NAMESPACE}.domain.${type ? 'y' : 'x'}`, stateProps);\n });\n resolver.createUnits(componentRegistry, config);\n\n const matrices = {\n valuesMatrix: valueMatrixInfo,\n axesMatrix: resolver.axes()\n };\n // Create all matrices\n const {\n rows,\n columns,\n selectionObj,\n rowPriority,\n colPriority\n } = generateMatrices(matrixGnContext, matrices, cells, labelManager);\n\n resolver.rowMatrix(rows);\n resolver.columnMatrix(columns);\n\n return {\n rows: resolver.rowMatrix(),\n columns: resolver.columnMatrix(),\n values: resolver.valueMatrix(),\n isColumnSizeEqual,\n isRowSizeEqual,\n priority: {\n row: rowPriority,\n col: colPriority\n },\n selection: selectionObj,\n dataModels: {\n groupedModel,\n parentModel: datamodel\n }\n };\n};\n","export const RESOLVER_PROPS = {\n dependencies: {},\n units: {},\n datamodelTransform: {},\n layerConfig: {},\n matrixLayers: {},\n colCells: {},\n rowCells: {},\n rowMatrix: {},\n columnMatrix: {},\n valueMatrix: {},\n encoder: {},\n valueParser: {}\n};\n","import { VisualUnit } from '@chartshq/visual-unit';\nimport { generateGetterSetters, STATE_NAMESPACES } from 'muze-utils';\nimport {\n initializeCacheMaps,\n headerCreator,\n extractUnitConfig,\n setFacetsAndProjections\n} from './group-utils';\nimport {\n ROW, COL, LEFT, RIGHT, COLOR, SIZE, SHAPE, DETAIL, CELL, X_AXES, Y_AXES, ENTRY_CELLS, EXIT_CELLS, INITIALIZED,\n AXIS, UNIT, BEFORE_UPDATE, UPDATED, VALUE_MATRIX, FACET_HEADERS\n} from '../enums/constants';\nimport { createValueCells, computeMatrices } from './cell-creator';\nimport { RESOLVER_PROPS } from './resolver-props';\n\n/**\n * Resolves the matrices from configuration provided\n *\n * @export\n * @class MatrixResolver\n */\nexport default class MatrixResolver {\n\n /**\n * Creates an instance of MatrixResolver.\n * @param {Object} dependencies needed to run the resolver\n * @memberof MatrixResolver\n */\n constructor (dependencies) {\n this._registry = {};\n this._layerConfig = [];\n this._matrixLayers = [];\n this._dependencies = dependencies;\n this._rowMatrix = [];\n this._columnMatrix = [];\n this._valueMatrix = [];\n this._facets = { rowFacets: [], colFacets: [] };\n this._projections = { rowProjections: [], colProjections: [] };\n this._datamodelTransform = {};\n this._units = [];\n this._cacheMaps = {};\n this._axes = {\n x: {},\n y: {},\n color: [],\n size: [],\n shape: [],\n radius: [],\n angle: [],\n angle0: []\n };\n generateGetterSetters(this, RESOLVER_PROPS);\n this.cacheMaps(initializeCacheMaps());\n }\n\n /**\n * Set: Registers placeholders, Get: return {Object} those placeholders\n *\n * @param {Object} placeholders cells that will construct the group\n * @return {Object} Either current instance or the set of placeholders\n * @memberof MatrixResolver\n */\n registry (...placeholders) {\n if (placeholders.length) {\n Object.entries(placeholders[0]).forEach((val) => {\n this._registry[val[0]] = val[1];\n });\n return this;\n }\n return this._registry;\n }\n\n /**\n * Used to set the layer config from outside or get current layer info\n *\n * @param {Object} type configuration of layer provided externally\n * @return {Object} either the layer or current instance\n * @memberof MatrixResolver\n */\n cacheMaps (...maps) {\n if (maps.length) {\n [CELL, X_AXES, Y_AXES, ENTRY_CELLS, EXIT_CELLS].forEach((e) => {\n this._cacheMaps[`${e}Map`] = maps[0][`${e}Map`] || this._cacheMaps[`${e}Map`];\n });\n return this;\n }\n return this._cacheMaps;\n }\n\n /**\n * Used to set the layer config from outside or get current layer info\n *\n * @param {Object} type configuration of layer provided externally\n * @return {Object} either the layer or current instance\n * @memberof MatrixResolver\n */\n axes (...axes) {\n if (axes.length) {\n this._axes = Object.assign({}, this._axes, axes[0]);\n return this;\n }\n return this._axes;\n }\n\n /**\n *\n *\n * @param {*} facets\n *\n * @memberof MatrixResolver\n */\n facets (...facets) {\n if (facets.length) {\n Object.entries(facets[0]).forEach((e) => {\n this._facets[e[0]] = e[1];\n });\n return this;\n }\n return this._facets;\n }\n\n /**\n *\n *\n * @param {*} projections\n *\n * @memberof MatrixResolver\n */\n projections (...projections) {\n if (projections.length) {\n Object.entries(projections[0]).forEach((e) => {\n this._projections[e[0]] = e[1];\n });\n return this;\n }\n return this._projections;\n }\n\n /**\n *\n *\n * @param {*} config\n * @param {*} layerConfig\n *\n * @memberof MatrixResolver\n */\n optionalProjections (config, layerConfig) {\n const otherEncodings = {};\n const optionalProjections = [];\n const otherEncodingTypes = [SIZE, COLOR, SHAPE];\n\n otherEncodingTypes.forEach((type) => {\n if (config[type] && config[type].field) {\n const enc = config[type];\n otherEncodings[type] = enc.field;\n optionalProjections.push(enc.field);\n }\n });\n\n if (config[DETAIL]) {\n optionalProjections.push(...config.detail);\n }\n\n if (layerConfig.length) {\n layerConfig.forEach((layer) => {\n if (layer.encoding) {\n Object.values(layer.encoding).forEach((enc) => {\n if (enc && optionalProjections.indexOf(enc.field) === -1) {\n optionalProjections.push(enc.field ? enc.field : enc);\n }\n });\n }\n });\n }\n this.projections({ optionalProjections });\n return otherEncodings;\n }\n\n /**\n * return the normalized set of rows and facets and projections\n *\n * @param {Object} rows parameters needed to set horizontal axis consisiting of rows\n * @return {Object} facets, projections and normalized rows\n * @memberof MatrixResolver\n */\n horizontalAxis (rows, encoder) {\n if (rows) {\n this._horizontalAxis = setFacetsAndProjections(this, { type: ROW, fields: rows }, encoder);\n return this;\n }\n return this._horizontalAxis;\n }\n\n /**\n * return the normalized set of columns and facets and projections\n *\n * @param {Object} columns parameters needed to set vertical axis consisiting of columns\n * @return {Object} facets, projections and normalized columns\n * @memberof MatrixResolver\n */\n verticalAxis (columns, encoder) {\n if (columns) {\n this._verticalAxis = setFacetsAndProjections(this, { type: COL, fields: columns }, encoder);\n return this;\n }\n return this._verticalAxis;\n }\n\n /**\n * Gets the class definition of a particular cell type(if the particular type has been extended, that particular\n * definition is returned)\n *\n * @param {Object} cell cell whose class definition is to be retrieved\n * @return {Object} cell definition\n * @memberof MatrixResolver\n */\n getCellDef (cell) {\n const registry = this.registry();\n\n Object.values(registry).forEach((e) => {\n if (e.prototype instanceof cell) {\n cell = e;\n }\n });\n return cell;\n }\n\n /**\n * return a visual cell creator along with its axis information to be injected to the datamodel creation\n * function\n *\n * @param {Object} GeomCell Type of cell to be created\n * @return {Object} Created cell\n * @memberof MatrixResolver\n */\n valueCellsCreator (context) {\n // reset matrix layers\n this.matrixLayers([]);\n\n return (datamodel, fieldInfo, facets) => createValueCells(context, datamodel, fieldInfo, facets);\n }\n\n /**\n * Callback to be applied on each cell of a matrix of a particular type\n *\n * @param {string} matrixType type of matrix on which callback is to be applied\n * @param {Function} callback function to be applied to each cell\n * @memberof MatrixResolver\n */\n forEach (matrixType, callback) {\n this[matrixType]().forEach((row, rIndex) => {\n row.forEach((col, cIndex) => {\n callback(rIndex, cIndex, col);\n });\n });\n }\n\n /**\n *\n *\n *\n * @memberof MatrixResolver\n */\n getAllFields () {\n const retObj = this.projections();\n\n Object.entries(this.facets()).forEach((e) => {\n retObj[e[0]] = e[1];\n });\n return retObj;\n }\n\n /**\n *\n *\n * @memberof MatrixResolver\n */\n resetSimpleAxes () {\n return this.axes({\n x: new Set(),\n y: new Set()\n });\n }\n\n /**\n *\n *\n * @param {*} componentRegistry\n * @param {*} config\n * @memberof MatrixResolver\n */\n createUnits (componentRegistry, config) {\n const {\n globalConfig,\n alias,\n coord\n } = config;\n const {\n layerRegistry,\n sideEffectRegistry\n } = componentRegistry;\n const {\n smartlabel: smartLabel,\n lifeCycleManager\n } = this.dependencies();\n // Provide the source for the matrix\n const units = [[]];\n // Setting unit configuration\n const unitConfig = extractUnitConfig(globalConfig || {});\n const globalState = VisualUnit.getState()[0];\n const globalStates = {};\n const store = this.store();\n this.forEach(VALUE_MATRIX, (i, j, el) => {\n let unit = el.source();\n if (!unit) {\n const namespace = `${i}${j}`;\n\n unit = VisualUnit.create({\n layerRegistry,\n sideEffectRegistry\n }, {\n smartLabel,\n lifeCycleManager\n });\n globalStates[namespace] = null;\n unit.metaInf({\n rowIndex: i,\n colIndex: j,\n namespace\n });\n unit.store(store);\n unit.coord(coord);\n el.source(unit);\n }\n !units[i] && (units[i] = []);\n units[i][j] = unit;\n unit.parentAlias(alias)\n .valueParser(this.valueParser())\n .coord(coord);\n el.config(unitConfig);\n });\n\n for (const key in globalState) {\n store.append(`${STATE_NAMESPACES.UNIT_GLOBAL_NAMESPACE}.${key}`, globalStates);\n }\n\n lifeCycleManager.notify({ client: units, action: INITIALIZED, formalName: UNIT });\n return this.units(units);\n }\n\n /**\n *\n *\n * @param {*} config\n * @memberof MatrixResolver\n */\n setDomains (config, datamodel, encoders) {\n const {\n color,\n shape,\n size,\n globalConfig\n } = config;\n const groupBy = globalConfig.autoGroupBy;\n const {\n rowFacets,\n colFacets\n } = this.getAllFields();\n const encoding = {\n color,\n shape,\n size\n };\n const facetFields = [...rowFacets.map(e => e.toString()), ...colFacets.map(e => e.toString())];\n const retContext = {\n domains: encoders.simpleEncoder.getRetinalFieldsDomain(datamodel, encoding, facetFields, groupBy),\n axes: this.axes(),\n encoding\n };\n encoders.retinalEncoder.setCommonDomain(retContext);\n return this;\n }\n\n resetFacetsAndProjections () {\n this._facets = {};\n this._projections = {};\n return this;\n }\n\n /**\n *\n *\n *\n * @memberof MatrixResolver\n */\n getRetinalAxes () {\n const {\n color,\n shape,\n size\n } = this.axes();\n\n return {\n color: [...color],\n shape: [...shape],\n size: [...size]\n };\n }\n\n /**\n *\n *\n * @param {*} type\n *\n * @memberof MatrixResolver\n */\n getSimpleAxes (type) {\n return this.axes()[`${type}`];\n }\n\n /**\n *\n *\n * @param {*} datamodel\n * @param {*} config\n * @memberof MatrixResolver\n */\n createRetinalAxes (fieldsConfig, config, encoders) {\n const layerConfig = this.layerConfig();\n this.optionalProjections(config, layerConfig);\n const retinalAxes = encoders.retinalEncoder.createAxis({\n fieldsConfig,\n config,\n axes: this.axes()\n });\n const {\n lifeCycleManager\n } = this.dependencies();\n\n [COLOR, SHAPE, SIZE].forEach((e) => {\n this.axes()[e] = retinalAxes[e];\n });\n\n lifeCycleManager.notify({ client: this.axes(), action: INITIALIZED, formalName: AXIS });\n lifeCycleManager.notify({ client: this.units(), action: BEFORE_UPDATE, formalName: UNIT });\n\n const units = [];\n const matrixLayers = this.matrixLayers();\n\n this.forEach(VALUE_MATRIX, (i, j, el) => {\n el.axes(Object.assign(el.axes(), retinalAxes));\n el.source() && el.source().retinalFields(config);\n el.layerDef(matrixLayers[i][j]);\n el.updateModel();\n\n units.push(el.source());\n });\n\n lifeCycleManager.notify({ client: units, action: UPDATED, formalName: UNIT });\n return this;\n }\n\n /**\n *\n *\n * @param {*} placeholders\n * @param {*} fieldNames\n *\n * @memberof MatrixResolver\n */\n createHeaders (placeholders, fieldNames, config) {\n let bottomLeft = [];\n let bottomRight = [];\n const {\n rows,\n columns\n } = placeholders;\n const {\n smartlabel: labelManager,\n lifeCycleManager\n } = this.dependencies();\n const {\n showHeaders,\n classPrefix\n } = config;\n const TextCell = this.getCellDef(this.registry().TextCell);\n const BlankCell = this.getCellDef(this.registry().BlankCell);\n const [leftRows, rightRows] = rows;\n const [topCols, bottomCols] = columns;\n const rowHeaders = fieldNames.rows;\n const blankCellCreator = cell => new BlankCell().config({ show: cell.config().show });\n\n // Headers and footers are created based on the rows. Thereafter, using the column information\n // they are tabularized into the current structure\n const headers = {\n left: headerCreator(leftRows, rowHeaders[0], showHeaders ? TextCell : BlankCell,\n { classPrefix, labelManager }),\n right: headerCreator(rightRows, rowHeaders[1], showHeaders ? TextCell : BlankCell,\n { classPrefix, labelManager })\n };\n const footers = {\n left: leftRows.length > 0 ? leftRows[0].map(blankCellCreator) : [],\n right: rightRows.length > 0 ? rightRows[0].map(blankCellCreator) : []\n };\n const [topLeft, topRight] = [LEFT, RIGHT].map(type => topCols.map((col, i) => {\n if (i === topCols.length - 1) {\n return headers[type];\n }\n return footers[type];\n }));\n\n // Creating only bottom matrices if there is no information on the top\n if (topCols.length === 0) {\n [bottomLeft, bottomRight] = [LEFT, RIGHT].map(type => bottomCols.map((col, i) => {\n if (i === 0) {\n return headers[type];\n }\n return footers[type];\n }));\n } else {\n bottomLeft = bottomCols.map(() => (leftRows.length > 0 ? leftRows[0].map(blankCellCreator) : []));\n bottomRight = bottomCols.map(() => (rightRows.length > 0 ? rightRows[0].map(blankCellCreator) : []));\n }\n\n lifeCycleManager.notify({\n client: [topLeft, topRight, bottomLeft, bottomRight],\n action: INITIALIZED,\n formalName: FACET_HEADERS\n });\n\n return { topLeft, topRight, bottomLeft, bottomRight };\n }\n\n /**\n *\n *\n * @param {*} datamodel\n * @param {*} config\n * @param {*} componentRegistry\n * @param {*} encoders\n *\n * @memberof MatrixResolver\n */\n getMatrices (datamodel, config, componentRegistry, encoders) {\n const context = {\n datamodel,\n componentRegistry,\n encoders,\n resolver: this\n };\n\n return computeMatrices(context, config);\n }\n\n store (...params) {\n if (params.length) {\n this._store = params[0];\n return this;\n }\n return this._store;\n }\n}\n","/**\n * This is a wrapper class over the matrix of cells which gets created in visual group. Visual Group creates left,\n * right, bottom and top and center matrices and wraps them using this class.\n *\n * @public\n * @class ValueMatrix\n */\nclass ValueMatrix {\n\n /**\n * Creates an instance of ValueMatrix.\n *\n * @param {Array} matrixArr Matrix array.\n */\n constructor (matrixArr) {\n const instancesById = {};\n\n this.matrix(matrixArr || []);\n this.filter(() => true);\n\n this.each((el, rIdx, cIdx) => {\n const cellValue = el.valueOf();\n if (cellValue && cellValue.id) {\n const id = cellValue.id();\n instancesById[id] = {\n instance: cellValue,\n rowIndex: rIdx,\n colIndex: cIdx\n };\n }\n });\n\n this.instancesById(instancesById);\n }\n\n instancesById (...id) {\n if (id.length) {\n this._instancesById = id[0];\n return this;\n }\n return this._instancesById;\n }\n\n /**\n * Returns the array of matrices contained in this instance.\n *\n * @public\n * @return {Array} Array of matrices.\n */\n matrix (...matrix) {\n if (matrix.length) {\n this._matrix = matrix[0];\n return this;\n }\n return this._matrix;\n }\n\n /**\n * Sets a filter criteria. This filter criteria gets applied when each function is called.\n *\n * @public\n * @param {Function} fn Filter function.\n *\n * @return {ValueMatrix} Instance of value matrix.\n */\n filter (...fn) {\n if (fn.length) {\n this._filterFn = fn[0];\n return this;\n }\n return this._filterFn;\n }\n\n /**\n * Returns the total width occupied by all the cells of the matrix.\n *\n * @return {Number} Width of the matrix.\n */\n width () {\n let rowWidth = 0;\n\n this.matrix().forEach((row) => {\n let currentRowWidth = 0;\n row.forEach((cell) => {\n currentRowWidth += cell.getLogicalSpace().width;\n });\n rowWidth = Math.max(rowWidth, currentRowWidth);\n });\n return rowWidth;\n }\n\n /**\n * Returns the total width occupied by all the cells of the matrix.\n *\n * @return {Number} Width of the matrix.\n */\n height () {\n let rowHeight = 0;\n\n this.matrix().forEach((row) => {\n let currentRowHeight = 0;\n row.forEach((cell) => {\n currentRowHeight = Math.max(currentRowHeight, cell.getLogicalSpace().height);\n });\n rowHeight += currentRowHeight;\n });\n return rowHeight;\n }\n\n /**\n * Iterates through the two dimensional matrix array and calls the given callback function with the cell instance,\n * row index, column index and the matrix array.\n *\n * @param {Function} fn Callback function which will get called for every cell.\n * @return {ValueMatrix} Instance of the value matrix.\n */\n each (fn) {\n const matrix = this.matrix();\n const filterFn = this.filter();\n\n matrix.forEach((row, rIndex) => {\n row.forEach((col, cIndex) => {\n if (filterFn(col)) {\n fn(col, rIndex, cIndex, matrix);\n }\n });\n });\n return this;\n }\n\n findPlaceHolderById (id) {\n return this.instancesById()[id];\n }\n}\n\nexport default ValueMatrix;\n","import { VisualUnit } from '@chartshq/visual-unit';\nimport { STATE_NAMESPACES, CommonProps } from 'muze-utils';\nimport { BaseLayer } from '@chartshq/visual-layer';\nimport { getEncoder, getBorders } from '../group-helper';\nimport { RetinalEncoder } from '../encoder';\nimport { registerDomainChangeListener, unsubscribeChangeListeners } from './change-listener';\nimport ValueMatrix from './value-matrix';\n\nexport const createUnitState = (context) => {\n const [globalState] = VisualUnit.getState();\n const store = context.store();\n store.append(STATE_NAMESPACES.UNIT_GLOBAL_NAMESPACE, globalState);\n};\n\nexport const initializeGlobalState = (context) => {\n const globalState = context.constructor.getState()[0];\n const store = context.store();\n store.append(STATE_NAMESPACES.GROUP_GLOBAL_NAMESPACE, globalState);\n};\n\nexport const createLayerState = (context) => {\n const [globalState] = BaseLayer.getState();\n context.store().append(STATE_NAMESPACES.LAYER_GLOBAL_NAMESPACE, globalState);\n};\n\nconst sanitizeRetinalConfig = (retinalConf) => {\n const conf = {};\n for (const key in retinalConf) {\n const confValue = retinalConf[key];\n if (typeof confValue === 'string' || !confValue) {\n conf[key] = {\n field: retinalConf[key]\n };\n } else {\n conf[key] = confValue;\n }\n }\n return conf;\n};\n\nexport const setMatrixInstances = (context, placeholder) => {\n let {\n values,\n rows,\n columns\n } = placeholder;\n values = values || [];\n rows = rows || [];\n columns = columns || [];\n context._composition.matrices = {\n value: new ValueMatrix(values),\n left: new ValueMatrix(rows[0]),\n right: new ValueMatrix(rows[1]),\n top: new ValueMatrix(columns[0]),\n bottom: new ValueMatrix(columns[1])\n };\n\n context._dependencies.throwback.commit(CommonProps.MATRIX_CREATED, true);\n return context;\n};\n\nexport const createMatrices = (context) => {\n const rows = context.rows();\n const columns = context.columns();\n const color = context.color();\n const datamodel = context.data();\n const size = context.size();\n const detail = context.detail();\n const layers = context.layers();\n const transform = context.transform();\n const config = context.config();\n const shape = context.shape();\n\n // Get the resolver for the matrices\n const resolver = context.resolver();\n resolver.store(context.store());\n resolver.valueParser(context.valueParser());\n // Prepare configuration for matrix preparation\n let matrixConfig = {\n selection: context.selection(),\n alias: context.alias(),\n globalConfig: config || {},\n rows,\n columns,\n detail,\n layers,\n transform\n };\n\n unsubscribeChangeListeners(context);\n\n const retinalConfig = sanitizeRetinalConfig({\n color,\n shape,\n size\n });\n\n matrixConfig = Object.assign(matrixConfig, retinalConfig);\n // Create the encoders for the group\n const encoders = {};\n encoders.retinalEncoder = new RetinalEncoder();\n encoders.simpleEncoder = getEncoder(layers);\n matrixConfig.coord = encoders.simpleEncoder.constructor.type();\n resolver.encoder(encoders.simpleEncoder);\n\n // Set the group type\n context.groupType(encoders.simpleEncoder.constructor.type());\n\n // Get sanitized fields as instances of the Vars Class\n const fields = encoders.simpleEncoder.fieldSanitizer(datamodel, matrixConfig);\n encoders.simpleEncoder.setAxisAndHeaders(config ? config.axisFrom : {}, fields);\n // Setting layers for the code\n layers && resolver.layerConfig(layers);\n // Set the row and column axes\n resolver.horizontalAxis(fields.rows, encoders).verticalAxis(fields.columns, encoders);\n // Getting the placeholders\n const placeholderInfo = resolver.getMatrices(datamodel, matrixConfig, context.registry(), encoders);\n context._groupedDataModel = placeholderInfo.dataModels.groupedModel;\n // Set the selection object\n context.selection(placeholderInfo.selection);\n\n // Create retinal axes\n resolver.createRetinalAxes(placeholderInfo.dataModels.parentModel.getFieldsConfig(), retinalConfig,\n encoders);\n\n // Domains are evaluated for each of the axes for commonality\n resolver.setDomains(matrixConfig, placeholderInfo.dataModels, encoders);\n\n // Create matrix instances\n setMatrixInstances(context, placeholderInfo);\n\n // Prepare corner matrices\n context.cornerMatrices(resolver.createHeaders(placeholderInfo, fields, config));\n\n // Set placeholder information\n context.placeholderInfo(placeholderInfo);\n\n context._composition.axes = resolver.axes();\n context.metaData({\n border: getBorders(placeholderInfo, encoders.simpleEncoder)\n });\n\n resolver.encoder().unionUnitDomains(context);\n\n registerDomainChangeListener(context);\n return context;\n};\n","import { STATE_NAMESPACES } from 'muze-utils';\n\nexport const setupChangeListeners = (context) => {\n const store = context.store();\n\n store.registerChangeListener([`${STATE_NAMESPACES.GROUP_GLOBAL_NAMESPACE}.domain.x`], () => {\n const groupAxes = context.resolver().axes();\n groupAxes.x.forEach(axes => axes.forEach((axis) => {\n axis.render();\n }));\n });\n\n store.registerChangeListener([`${STATE_NAMESPACES.GROUP_GLOBAL_NAMESPACE}.domain.y`], () => {\n const groupAxes = context.resolver().axes();\n groupAxes.y.forEach(axes => axes.forEach((axis) => {\n axis.render();\n }));\n });\n};\n\nexport const registerDomainChangeListener = (context) => {\n const store = context.store();\n store.registerChangeListener([`${STATE_NAMESPACES.UNIT_GLOBAL_NAMESPACE}.domain`], () => {\n context.resolver().encoder().unionUnitDomains(context);\n }, false, {\n namespace: 'group',\n key: 'unionDomain'\n });\n};\n\nexport const unsubscribeChangeListeners = (context) => {\n context.store().unsubscribe({\n namespace: 'group',\n key: 'unionDomain'\n });\n};\n","import { ROWS, COLUMNS, COLOR, SHAPE, SIZE, DETAIL, LAYERS, TRANSFORM, CONFIG } from '../enums/constants';\n\nexport const PROPS = {\n alias: {},\n data: {},\n cornerMatrices: {\n defaultValue: {\n topLeft: [],\n topRight: [],\n bottomLeft: [],\n bottomRight: []\n }\n },\n groupType: {},\n\n metaData: {\n defaultValue: {\n border: {}\n }\n },\n placeholderInfo: {\n defaultValue: {}\n },\n resolver: {},\n valueParser: {\n defaultValue: val => val\n },\n registry: {\n sanitization: (context, value) => {\n if (context.resolver) {\n context.resolver().registry(value.cellRegistry);\n }\n return value;\n }\n },\n selection: {},\n [CONFIG]: {},\n [ROWS]: {},\n [COLUMNS]: {},\n [COLOR]: {},\n [SHAPE]: {},\n [SIZE]: {},\n [DETAIL]: {},\n [LAYERS]: {},\n [TRANSFORM]: {}\n};\n","import { generateGetterSetters } from 'muze-utils';\nimport localOptions from './local-options';\nimport { SimpleGroup } from '../simple-group';\nimport {\n MatrixResolver,\n findInGroup\n} from '../group-helper';\nimport { createUnitState, initializeGlobalState, setMatrixInstances, createMatrices, createLayerState } from './helper';\nimport { setupChangeListeners } from './change-listener';\nimport { PROPS } from './props';\nimport {\n CONFIG,\n MOUNT,\n RETINAL,\n Y\n} from '../enums/constants';\n\n/**\n * VisualGroup is instantiated by canvas for creating {@link VisualUnit} and axes instances.It creates the\n * the matrix of visual units and axes. It also creates the layout instance which manages the allocation\n * of space of matrices.\n *\n * To get instance of visual group,\n * ```\n * const visualGroup = canvas.composition().visualGroup;\n * ```\n * @public\n *\n * @class VisualGroup\n */\nclass VisualGroup extends SimpleGroup {\n\n /**\n * Creates an instance of VisualGroup. Requires dependencies and other registry options for placeholders\n * and layers that create individual units.\n *\n * @param {Object} registry Key value pair of compostions for the group\n * @param {Object} dependencies Dependencies needed to run the group\n * @memberof VisualGroup\n */\n constructor (registry, dependencies) {\n super();\n\n const {\n componentSubRegistry\n } = registry;\n\n this._dependencies = dependencies;\n // Generate getter/setter methods for all properties of the class\n // One can get each property by calling the method and can set it\n // by passing paramaters for the same. Thus, one can chain setter\n // getter methods.\n generateGetterSetters(this, PROPS);\n generateGetterSetters(this, localOptions);\n // Populate the store with default values\n // initialize group compositions\n this._composition = {};\n // store reference to data\n this._data = [];\n // store reference to mountpoint\n this._mount = null;\n // selection object that takes care of updating of components\n this._selection = {};\n // Create instance of matrix resolver\n this.resolver(new MatrixResolver(this._dependencies));\n // matrix instance store each of the matrices\n setMatrixInstances(this, {});\n // Getting indiviual registered items\n this.registry({\n layerRegistry: componentSubRegistry.layerRegistry.get(),\n cellRegistry: componentSubRegistry.cellRegistry.get()\n });\n }\n\n static getState () {\n return [{\n domain: {\n x: {},\n y: {},\n radius: {},\n angle: {},\n angle0: {}\n }\n }, {}];\n }\n\n store (...params) {\n if (params.length) {\n this._store = params[0];\n initializeGlobalState(this);\n createUnitState(this);\n createLayerState(this);\n // Register listeners\n setupChangeListeners(this);\n return this;\n }\n return this._store;\n }\n\n /**\n * Return the instances of matrices created by the visual group.\n *\n * @return {Object} Instance of matrices.\n */\n matrixInstance (...matrices) {\n if (matrices.length) {\n return this;\n }\n return this.composition().matrices;\n }\n\n /**\n * Returns the composition of visual group.\n *\n * @public\n *\n * @return {Object} Composition of visual group. It contains instance of matrices {@link ValueMatrix}\n * and instances of axis.\n * ```\n * {\n * matrices: {\n * value: // Instance of center value matrix.\n * left: // Instance of left value matrix\n * right: // Instance of right value matrix\n * bottom: // Instance of bottom value matrix\n * top: // Instance of top value matrix.\n * },\n * axes: {\n * x: // Array of x axis.\n * y: // Array of y axis\n * color: // Array of color axis\n * shape: // Array of shape axis\n * size: // Array of size axis.\n * }\n * }\n * ```\n */\n composition (...params) {\n if (params.length) {\n return this;\n }\n return this._composition;\n }\n\n /**\n * Locks the model to prevent change listeners to be triggered until unlocked\n *\n * @return {Object} Instance of class VisualGroup\n * @memberof VisualGroup\n */\n lockModel () {\n this.store().model.lock();\n return this;\n }\n\n /**\n * Unlocks the model so that all change listeners can be triggered\n *\n * @return {Object} Instance of class VisualGroup\n */\n unlockModel () {\n this.store().model.unlock();\n return this;\n }\n\n /**\n * Returns the channel name of the variable. Channels are rows, columns, color, shape and size.\n *\n * @public\n * @param {string} variable Name of the variable.\n *\n * @return {string} Name of the channel.\n */\n where (variable) {\n return findInGroup(variable, this.resolver().getAllFields());\n }\n\n /**\n * Gets the axis instances of the visual group based on the given axis type.\n *\n * @public\n * @param {string} type Type of axis. X,Y or retinal axes.\n *\n * @return {Array} Array of axis instances.\n */\n getAxes (type) {\n if (type === RETINAL) {\n return this.resolver().getRetinalAxes();\n }\n return this.resolver().getSimpleAxes(type);\n }\n\n /**\n * Returns the instances of cells based on the given type. Type can be given as `row' or `col`.\n *\n * @public\n * @return {Array} Two dimensional array of cells.\n */\n getCells (type) {\n return this.resolver()[`${type}Cells`]();\n }\n\n getFieldsFromChannel (channel) {\n const {\n rowProjections,\n colProjections\n } = this.resolver().getAllFields();\n return channel === Y ? rowProjections : colProjections;\n }\n\n getCellsByFacetKey (facetKey) {\n const resolver = this.resolver();\n const cells = resolver.rowCells()[facetKey] || resolver.colCells()[facetKey] || [];\n return cells;\n }\n\n getAxesByFacetKey (axisType, facetKey) {\n const resolver = this.resolver();\n const cells = resolver.rowCells()[facetKey] || resolver.colCells()[facetKey];\n const axes = cells[0].valueOf().axes()[axisType] || [];\n\n return axes;\n }\n\n /**\n * This method is used to return a serialized representation of the instance's properties.\n *\n * @return {Object} Object with config proprties.\n * @memberof VisualGroup\n */\n serialize () {\n const store = this.store();\n\n return {\n [CONFIG]: store.get(CONFIG),\n [MOUNT]: store.get(MOUNT)\n };\n }\n\n /**\n * Returns the grouped datamodel prepared by visual group. If there is no group by performed, then it returns the\n * original data model passed to visual group.\n *\n * @return {DataModel} Grouped data model.\n */\n getGroupByData () {\n return this._groupedDataModel;\n }\n\n createMatrices () {\n createMatrices(this);\n }\n}\n\nexport default VisualGroup;\n","import { PersistentBehaviour, SELECTION } from '@chartshq/muze-firebolt';\n\nexport default class SelectBehaviour extends PersistentBehaviour {\n static formalName () {\n return 'select';\n }\n\n setSelectionSet (addSet, selectionSet) {\n if (addSet === null) {\n selectionSet.reset();\n } else if (addSet.length) {\n // new add set\n const existingRemoveSet = addSet.filter(d => selectionSet._set[d] === SELECTION.SELECTION_OLD_EXIT\n || selectionSet._set[d] === SELECTION.SELECTION_NEW_EXIT);\n // existing add set\n if (existingRemoveSet.length) {\n selectionSet.updateEntry();\n selectionSet.add(existingRemoveSet);\n } else {\n selectionSet.updateExit();\n selectionSet.remove(addSet);\n }\n const { exitSet } = selectionSet.getSets();\n const mergedExitSet = [...new Set(exitSet[1]), ...new Set(exitSet[0])];\n const completeSetCount = selectionSet.getCompleteSet().length;\n if (exitSet[1].length !== completeSetCount && mergedExitSet.length === completeSetCount) {\n selectionSet.reset();\n }\n } else {\n selectionSet.remove(selectionSet.getCompleteSet());\n }\n return this;\n }\n}\n","import { BEHAVIOURS, ACTIONS } from '@chartshq/muze-firebolt';\n\nconst CLASSPREFIX = 'muze';\n\nexport const actionBehaviourMap = {\n [ACTIONS.DRAG]: {\n target: `.${CLASSPREFIX}-gradient-rect`,\n behaviours: [BEHAVIOURS.BRUSH]\n },\n [ACTIONS.HOVER]: {\n target: [`.${CLASSPREFIX}-legend-columns`],\n behaviours: [BEHAVIOURS.HIGHLIGHT]\n },\n [ACTIONS.CLICK]: {\n target: [`.${CLASSPREFIX}-legend-columns`],\n behaviours: [BEHAVIOURS.SELECT]\n }\n};\n\nexport const propagationBehaviourMap = {\n [BEHAVIOURS.SELECT]: BEHAVIOURS.FILTER,\n [BEHAVIOURS.BRUSH]: BEHAVIOURS.HIGHLIGHT\n};\n","import * as BEHAVIOURS from '../enums/behaviours';\nimport * as sideEffects from '../enums/side-effects';\n\nexport const behaviourEffectMap = {\n [BEHAVIOURS.BRUSH]: [sideEffects.SELECTIONBOX, {\n name: sideEffects.Highlighter,\n options: {\n strategy: 'fade'\n }\n }],\n [BEHAVIOURS.HIGHLIGHT]: [sideEffects.Highlighter],\n select: [{\n name: sideEffects.Highlighter,\n options: {\n strategy: 'fade'\n }\n }]\n};\n\nexport const propagationSideEffects = {\n [BEHAVIOURS.BRUSH]: [{\n name: sideEffects.Highlighter,\n options: {\n strategy: 'fade'\n }\n }],\n [BEHAVIOURS.HIGHLIGHT]: [{\n name: sideEffects.Highlighter,\n options: {\n strategy: 'fade'\n }\n }],\n [BEHAVIOURS.SELECT]: ['filter']\n};\n\n","export const BRUSH = 'brush';\nexport const HIGHLIGHT = 'highlight';\nexport const TOOLTIP = 'tooltip';\nexport const FILTER = 'filter';\nexport const SELECT = 'select';\n\n","export const SELECTIONBOX = 'selectionBox';\nexport const Highlighter = 'highlighter';\n\n","export const CLASSPREFIX = 'muze';\nexport const IDFIELD = '__id__';\nexport const CONFIG = 'config';\nexport const DATAMODEL = 'dataModel';\nexport const AXES = 'axes';\nexport const LAYERDEFS = 'layerDef';\nexport const WIDTH = 'width';\nexport const MAXWIDTH = 'max-width';\nexport const HEIGHT = 'height';\nexport const MOUNTPOINT = 'mountPoint';\nexport const GRIDLINEPARENTGROUPCLASS = 'grid-lines';\nexport const TRANSFORM = 'transform';\nexport const CONSOLIDATED = 'consolidated';\nexport const FRAGMENTED = 'fragmented';\nexport const DEFAULTCOLOR = '#F44336';\nexport const DEFAULTSIZE = 50;\nexport const DEFAULTSHAPE = 'circle';\nexport const STEP = 'step';\nexport const GRADIENT = 'gradient';\nexport const ORDINAL = 'ordinal';\nexport const SCALE_FUNCTIONS = {\n size: 'getSize',\n shape: 'getShape',\n color: 'getColor'\n};\nexport const TOP = 'top';\nexport const LEFT = 'left';\nexport const RIGHT = 'right';\nexport const BOTTOM = 'bottom';\nexport const HORIZONTAL = 'horizontal';\nexport const VERTICAL = 'vertical';\nexport const CENTER = 'center';\nexport const VALUE = 'value';\nexport const PATH = 'path';\nexport const SHAPE = 'shape';\nexport const ICON = 'icon';\nexport const RECT = 'rect';\nexport const START = 'start';\nexport const UPPER = 'upper';\nexport const LOWER = 'lower';\nexport const END = 'end';\nexport const SIZE = 'size';\nexport const DISCRETE = 'discrete';\nexport const MEASURE = 'measure';\n\n","import { assembleModelFromIdentifiers, getDataModelFromRange } from 'muze-utils';\nimport { propagationBehaviourMap } from './action-behaviour-map';\nimport { propagationSideEffects } from './behaviour-effect-map';\nimport { STEP, GRADIENT, DISCRETE, MEASURE } from '../enums/constants';\n\nexport const propagate = (firebolt, action, selectionSet, config = {}) => {\n let propagationData;\n const type = firebolt.context.constructor.type();\n const payload = config.payload;\n const data = firebolt.context.data();\n const metaData = firebolt.context.metaData();\n const fieldType = metaData.getData().schema[0].type;\n\n const propPayload = {};\n const sourceId = firebolt.context._id;\n propPayload.action = propagationBehaviourMap[action] || action;\n propPayload.sideEffects = propagationSideEffects[action];\n propPayload.sourceCanvas = firebolt.context.canvasAlias();\n const isMutableAction = firebolt._actions.behavioural[propPayload.action].constructor.mutates();\n if (payload.criteria === null) {\n propagationData = null;\n } else {\n const entrySet = selectionSet.mergedEnter;\n let values = data.filter(d => entrySet.uids.indexOf(d.id) !== -1).map(d => d.rawVal);\n if (type === STEP || (type === DISCRETE && fieldType === MEASURE)) {\n const field = Object.keys(payload.criteria || {})[0];\n values = data.filter(d => entrySet.uids.indexOf(d.id) !== -1).map(d => d.range);\n propagationData = values.length ? metaData.select((fields) => {\n let check = false;\n for (let i = 0; i < values.length; i++) {\n check = fields[field].value >= values[i][0] && fields[field].value <= values[i][1];\n if (check === true) {\n break;\n }\n }\n return check;\n }, {\n saveChild: false\n }) : null;\n } else if (type === GRADIENT) {\n propagationData = getDataModelFromRange(metaData, payload.criteria);\n } else if (values.length) {\n propagationData = assembleModelFromIdentifiers(metaData, [payload.criteria[0], ...values.map(d => [d])]);\n } else {\n propPayload.criteria = null;\n propagationData = metaData.select(() => true, {\n saveChild: false\n });\n }\n }\n\n let propagateInterpolatedValues = false;\n\n if (propagationData) {\n const schema = propagationData.getSchema();\n propagateInterpolatedValues = schema.every(d => d.type === MEASURE);\n }\n\n const propConfig = {\n sourceId: `legend-${sourceId}`,\n payload: propPayload,\n criteria: propPayload.criteria === null ? null : propagationData,\n isMutableAction,\n propagateInterpolatedValues,\n action: propPayload.action\n };\n\n metaData.propagate(propagationData, propConfig, true);\n};\n","import { Firebolt } from '@chartshq/muze-firebolt';\nimport { propagate } from './helper';\nimport { STEP, GRADIENT } from '../enums/constants';\n\n/**\n * This class manages the interactions of legend.\n * @export\n * @class LegendFireBolt\n * @extends {Firebolt}\n */\nexport class LegendFireBolt extends Firebolt {\n constructor (...params) {\n super(...params);\n this.initializeSideEffects();\n }\n\n getPropagationSelectionSet (selectionSet) {\n return selectionSet[0];\n }\n\n propagate (behaviourName, payload, selectionSet) {\n propagate(this, behaviourName, selectionSet, {\n payload\n });\n }\n\n getAddSetFromCriteria (criteria) {\n let values;\n let uniqueIds;\n const type = this.context.constructor.type();\n\n if (criteria === null) {\n uniqueIds = null;\n } else if (type === STEP) {\n values = Object.values(criteria);\n uniqueIds = this.context.data().filter(d => values.indexOf(d.range) !== -1).map(d => d.id);\n } else if (type === GRADIENT) {\n uniqueIds = [];\n } else {\n values = criteria[1];\n if (values) {\n uniqueIds = this.context.data().filter(d => values.indexOf(d.rawVal) !== -1).map(d => d.id);\n } else {\n values = Object.values(criteria);\n uniqueIds = this.context.data().filter(d => values.indexOf(d.range) !== -1).map(d => d.id);\n }\n }\n return {\n uids: uniqueIds,\n model: null\n };\n }\n\n getFullData () {\n return null;\n }\n}\n","import {\n getEvent,\n getD3Drag\n } from 'muze-utils';\n\n/**\n * Adds dragging action to the target element.\n * @param {firebolt} firebolt firebolt\n * @param {SVGElement} targetEl Element on which brushing action is needed.\n * @param {Array} behaviours Array of behaviours\n */\n/* istanbul ignore next */ const drag = firebolt => (targetEl, behaviours) => {\n let startPos = {};\n let endPos = {};\n let payload;\n const d3Drag = getD3Drag();\n const context = firebolt.context;\n const boundingBox = context.measurement().gradientDimensions;\n const axisType = context.config().align === 'horizontal' ? 'x' : 'y';\n const axisScale = context.axis().source().scale();\n const rangeShifter = axisScale.range()[axisType === 'x' ? 0 : 1];\n\n targetEl.call(d3Drag().on('start', () => {\n const event = getEvent();\n startPos = {\n x: event.x,\n y: event.y\n };\n }).on('drag', () => {\n const event = getEvent();\n\n endPos = {\n x: event.x,\n y: event.y\n };\n endPos.x = Math.max(0, Math.min(endPos.x, boundingBox.width));\n endPos.y = Math.max(0, Math.min(endPos.y, boundingBox.height));\n\n payload = {\n criteria: {\n [context.fieldName()]: [axisScale.invert(startPos[axisType] + rangeShifter * 2),\n axisScale.invert(endPos[axisType] + rangeShifter * 2)].sort((a, b) => a - b)\n }\n };\n behaviours.forEach(behaviour => firebolt.dispatchBehaviour(behaviour, payload));\n }).on('end', () => {\n const event = getEvent();\n\n endPos = {\n x: event.x,\n y: event.y\n };\n endPos.x = Math.max(0, Math.min(endPos.x, boundingBox.width));\n endPos.y = Math.max(0, Math.min(endPos.y, boundingBox.height));\n if (startPos[axisType] === endPos[axisType]) {\n payload = {\n criteria: {}\n };\n } else {\n payload = {\n criteria: {\n [context.fieldName()]: [axisScale.invert(startPos[axisType] + rangeShifter * 2),\n axisScale.invert(endPos[axisType] + rangeShifter * 2)].sort((a, b) => a - b)\n }\n };\n }\n behaviours.forEach(behaviour => firebolt.dispatchBehaviour(behaviour, payload));\n }));\n};\n\nexport default drag;\n","import { getEvent } from 'muze-utils';\n\n/**\n * Adds mouse interactions to target element.\n * @param {Firebolt} Firebolt instance of firebolt.\n * @param {SVGElement} targetEl Element on which the event listeners will be attached.\n * @param {Array} behaviours Array of behaviours\n */\n/* istanbul ignore next */ const hover = firebolt => (targetEl, behaviours) => {\n const dispatchBehaviour = function (args) {\n const event = getEvent();\n const payload = {\n criteria: firebolt.context.getCriteriaFromData(args)\n };\n behaviours.forEach(behaviour => firebolt.dispatchBehaviour(behaviour, payload));\n event.stopPropagation();\n };\n\n targetEl.on('mouseover', dispatchBehaviour)\n .on('mousemove', dispatchBehaviour)\n .on('mouseout', () => {\n const event = getEvent();\n behaviours.forEach(behaviour => firebolt.dispatchBehaviour(behaviour, {\n criteria: null\n }));\n event.stopPropagation();\n });\n};\n\nexport default hover;\n","/**\n * Adds mouse interactions to target element.\n * @param {VisualUnit} instance instance of visual unit.\n * @param {SVGElement} targetEl Element on which the event listeners will be attached.\n * @param {Array} behaviours Array of behaviours\n */\nconst click = firebolt => (targetEl, behaviours) => {\n const dispatchBehaviour = function (args) {\n const payload = {\n criteria: firebolt.context.getCriteriaFromData(args)\n };\n behaviours.forEach(behaviour => firebolt.dispatchBehaviour(behaviour, payload));\n };\n\n targetEl.on('click', dispatchBehaviour);\n};\n\nexport default click;\n","import drag from './drag';\nimport hover from './hover';\nimport click from './click';\nimport * as ACTIONNAMES from '../../enums/actions';\n\nexport const physicalActions = {\n [ACTIONNAMES.DRAG]: drag,\n [ACTIONNAMES.HOVER]: hover,\n [ACTIONNAMES.CLICK]: click\n};\n\n","export const DRAG = 'drag';\nexport const HOVER = 'hover';\nexport const SELECTIONDRAG = 'selectiondrag';\nexport const CLICK = 'click';\n","import {\n getMousePos,\n getEvent,\n getD3Drag\n } from 'muze-utils';\nimport { HEIGHT, WIDTH, HORIZONTAL } from '../../enums/constants';\n\nconst getSelectionCriteria = (subject, axis, measures) => {\n let criteria = [];\n const {\n axisScale,\n axisType\n } = axis;\n const {\n startPos,\n endPos,\n selectionBoxMeasure,\n drawingInfMeasure,\n offset\n } = measures;\n const subjectStartPoint = subject[axisType];\n\n if (startPos[axisType] === endPos[axisType]) {\n criteria = [];\n } else if (subjectStartPoint + selectionBoxMeasure >= drawingInfMeasure + offset) {\n criteria = [axisScale.invert(drawingInfMeasure + offset - selectionBoxMeasure),\n axisScale.invert(drawingInfMeasure + offset)];\n } else if (subjectStartPoint - offset < offset) {\n criteria = [axisScale.invert(offset * 2), axisScale.invert(selectionBoxMeasure + offset * 2)];\n } else {\n criteria = [axisScale.invert(subjectStartPoint), axisScale.invert(subjectStartPoint + selectionBoxMeasure)];\n }\n axisType === 'x' ? criteria : criteria.reverse();\n return criteria;\n};\n\nexport const selectionBoxDrag = firebolt => (targetEl, behaviours) => {\n let startPos = {};\n let payload;\n const endPos = {};\n const d3Drag = getD3Drag();\n const context = firebolt.context;\n const axisScale = context.axis().source().scale();\n const axisType = context.config().align === HORIZONTAL ? 'x' : 'y';\n const drawingInfMeasure = context.measurement().gradientDimensions[axisType === 'x' ?\n WIDTH : HEIGHT];\n const offset = axisScale.range()[axisType === 'x' ? 0 : 1];\n const measures = {\n drawingInfMeasure,\n offset\n };\n let subject = {};\n\n targetEl.call(d3Drag().on('start', function () {\n const event = getEvent();\n startPos = getMousePos(this, event.sourceEvent);\n subject = event.subject;\n }).on('drag', () => {\n const event = getEvent();\n const selectionBoxMeasure = subject[axisType === 'x' ? WIDTH : HEIGHT];\n\n subject.x += event.dx;\n subject.y += event.dy;\n\n measures.selectionBoxMeasure = selectionBoxMeasure;\n measures.startPos = startPos;\n measures.endPos = endPos;\n const criteria = getSelectionCriteria(subject, { axisScale, axisType }, measures);\n\n payload = {\n criteria: {\n [context.fieldName()]: criteria\n },\n fadeOut: true\n };\n firebolt.dispatchBehaviour(behaviours[0], payload);\n }).on('end', () => {\n const event = getEvent();\n const selectionBoxMeasure = subject[axisType === 'x' ? WIDTH : HEIGHT];\n measures.selectionBoxMeasure = selectionBoxMeasure;\n measures.startPos = startPos;\n measures.endPos = endPos;\n const criteria = getSelectionCriteria(event, { axisScale, axisType }, measures);\n payload = {\n criteria: {\n [context.fieldName()]: criteria\n },\n fadeOut: true,\n config: {\n transition: {\n duration: 200\n }\n }\n };\n firebolt.dispatchBehaviour(behaviours[0], payload);\n }));\n};\n\n","import { makeElement } from 'muze-utils';\nimport { SpawnableSideEffect } from '@chartshq/muze-firebolt';\nimport { CLASSPREFIX, HEIGHT, WIDTH, HORIZONTAL, RECT } from '../../../enums/constants';\nimport { SELECTIONBOX } from '../../../enums/side-effects';\nimport { selectionBoxDrag } from '../../physical/selection-box-drag';\nimport './styles.scss';\n\n/**\n * This class is used to create a selection box which is used by visual unit for brushing and\n * selection in the canvas.\n * @class SelectionBox\n */\n/* istanbul ignore next */ class SelectionBox extends SpawnableSideEffect {\n static formalName () {\n return SELECTIONBOX;\n }\n\n /**\n * It returns the default configuration needed by selectionbox.\n * @return {Object} Default configuration of the selection box.\n */\n static defaultConfig () {\n return {\n className: 'legend-selection-box',\n classPrefix: CLASSPREFIX\n };\n }\n\n /**\n * Draws the selectionbox with the specified dimensions.\n */\n /* istanbul ignore next */ apply (selectionSet, payload) {\n let x;\n let y;\n let width;\n let height;\n const firebolt = this.firebolt;\n const context = firebolt.context;\n const config = this.config();\n const axis = context.axis().source();\n const className = `${config.classPrefix}-${config.className}`;\n\n const domain = payload.criteria[firebolt.context.fieldName()];\n const axisScale = axis.scale();\n const range = domain ? [axis.getScaleValue(domain[0]), axis.getScaleValue(domain[1])] : [];\n\n const axisType = context.config().align === HORIZONTAL ? 'x' : 'y';\n\n const gradientDimension = firebolt.context.measurement().gradientDimensions[axisType === 'x' ?\n HEIGHT : WIDTH];\n\n const rangeShifter = axisScale.range()[axisType === 'x' ? 0 : 1];\n const legendGradContainer = context.getDrawingContext().svgContainer;\n const legendSelGroup = makeElement(legendGradContainer, 'g', [1], `${config.classPrefix}-selection-box-group`);\n\n if (firebolt.context.config().align === HORIZONTAL) {\n x = range[0] - rangeShifter || 0;\n y = 0;\n width = range[1] - range[0] || 0;\n height = gradientDimension;\n } else {\n x = 0;\n y = range[1] - rangeShifter || 0;\n height = range[0] - range[1] || 0;\n width = gradientDimension;\n }\n const enterFn = function (el) {\n selectionBoxDrag(firebolt)(el, ['brush']);\n };\n const selBox = makeElement(legendSelGroup, RECT, [{ domain, x, y, width, height }], className,\n { enter: enterFn });\n selBox.attr('y', y)\n .attr('x', x)\n .attr(WIDTH, width)\n .attr(HEIGHT, height);\n }\n}\n\nexport default SelectionBox;\n\n","import { selectElement } from 'muze-utils';\n\nexport const strategies = (firebolt) => {\n const context = firebolt.context;\n const classed = (set, className, change) => {\n const classPrefix = context.config().classPrefix;\n selectElement(context.mount())\n .selectAll(`.${classPrefix}-legend-columns`)\n .filter(d => set.uids.indexOf(d.id) !== -1)\n .selectAll('div')\n .classed(className, change);\n };\n\n return {\n fade: (set, config = {}) => {\n const classPrefix = context.config().classPrefix;\n if (!set.mergedEnter.length && !set.mergedExit.length) {\n classed(set.completeSet, config.className || `${classPrefix}-legend-fadeout`, false);\n } else {\n classed(set.mergedExit, config.className || `${classPrefix}-legend-brighten`, false);\n classed(set.mergedExit, config.className || `${classPrefix}-legend-fadeout`, true);\n classed(set.mergedEnter, config.className || `${classPrefix}-legend-fadeout`, false);\n }\n },\n brighten: (set, config = {}) => {\n const classPrefix = context.config().classPrefix;\n if (!set.mergedEnter.length && !set.mergedExit.length) {\n classed(set.completeSet, config.className || `${classPrefix}-legend-brighten`, false);\n } else {\n classed(set.mergedEnter, config.className || `${classPrefix}-legend-brighten`, true);\n classed(set.mergedExit, config.className || `${classPrefix}-legend-brighten`, false);\n }\n }\n };\n};\n","import { GenericSideEffect } from '@chartshq/muze-firebolt';\nimport { strategies } from './strategies';\nimport { Highlighter } from '../../../enums/side-effects';\n\nexport default class LegendHighlighter extends GenericSideEffect {\n constructor (...params) {\n super(...params);\n this._strategies = strategies(this.firebolt);\n this._strategy = 'brighten';\n }\n\n static formalName () {\n return Highlighter;\n }\n\n apply (selectionSet, payload, options = {}) {\n const strategy = this._strategies[options.strategy || this._strategy];\n\n strategy(selectionSet, this);\n }\n}\n","import { mergeRecursive } from 'muze-utils';\n\nexport const PROPS = {\n config: {\n sanitization: (context, value) => mergeRecursive(context._config || {}, value)\n },\n data: {},\n fieldName: {},\n legendContainer: {},\n measurement: {\n sanitization: (context, value) => {\n const measurement = mergeRecursive(context._measurement, value);\n ['padding', 'border', 'margin'].forEach((space) => {\n measurement[space] = Math.min(measurement[space] > 0 ? measurement[space] : 0,\n measurement.maxWidth * 0.1, measurement.maxHeight * 0.1);\n });\n return measurement;\n }\n },\n logicalSpace: {},\n metaData: {},\n range: {\n sanitization: (context, value) => {\n context.scale().range(value);\n context.resetLogicalSpace();\n context.store().commit('range', value);\n return value;\n }\n },\n scale: {},\n smartTicks: {},\n store: {},\n title: {\n sanitization: (context, value) => mergeRecursive(context._title || {}, value)\n },\n labelManager: {},\n minTickDistance: {},\n valueParser: {\n defaultValue: val => val\n }\n};\n","import { getSymbol } from 'muze-utils';\nimport {\n CENTER,\n LEFT,\n RIGHT\n} from '../enums/constants';\n\nexport const ALIGN = {\n HORIZONTAL: 'horizontal',\n VERTICAL: 'vertical'\n};\n\nexport const DEFAULT_MEASUREMENT = {\n height: 30,\n width: 30,\n maxWidth: Infinity,\n maxHeight: Infinity,\n padding: 2,\n margin: 2,\n border: 1\n};\n\nexport const LEGEND_TITLE = {\n text: '',\n orientation: (pos) => {\n if (pos === LEFT || pos === RIGHT) {\n return LEFT;\n } return CENTER;\n }\n};\n\nexport const DEFAULT_CONFIG = {\n classPrefix: 'muze',\n borderStyle: 'solid',\n borderColor: 'rgba(0,0,0,0)',\n formatter: {\n bounds: {\n lower: 'less than',\n upper: 'more than'\n }\n },\n item: {\n text: {\n orientation: 'right',\n width: 10,\n formatter: (val, i, data, context) => context.valueParser()(val)\n },\n icon: {\n className: 'legend-icon',\n height: 20,\n width: 20,\n color: 'rgba(0,0,0,.5)',\n type: 'square'\n }\n }\n};\n\n/**\n * Creates a map of pre defined icons\n *\n * @param {string} icon Accepts a icon name like 'square', 'cross', 'diamond' etc\n * @return {Object} icon object which can be used to draw the icons\n */\nexport const ICON_MAP = (icon) => {\n if (icon && typeof (icon) === 'string') {\n return getSymbol(icon);\n } return icon;\n};\n","import { makeElement, numberInterpolator } from 'muze-utils';\n\nimport {\n SCALE_FUNCTIONS,\n WIDTH,\n HEIGHT,\n LEFT,\n RIGHT,\n TOP,\n BOTTOM,\n MAXWIDTH\n} from '../enums/constants';\n\n/**\n *\n *\n * @param {*} scale\n *\n */\nexport const getScaleInfo = (scale) => {\n const scaleType = scale.constructor.type();\n const domain = scale.uniqueValues();\n const steps = scale.config().stops || 1;\n const scaleFn = SCALE_FUNCTIONS[scaleType];\n\n return { scaleType, domain, steps, scaleFn };\n};\n\n/**\n * Function to recompute the stops in array in case to left and right alignment of legend.\n *\n * @param {string} param - parameter to measure\n * @param {Object} requiredMeasure - required measure parameters\n * @param {Object} availableMeasure - available meassure parameters\n * @param {Array} domainForLegend - array\n * @param {Object} smartLabelCalc - smartLabel Manager\n * @return {Array} - Array\n */\nconst getcomputedArray = (computationhelper, requiredMeasure, availableMeasure, domainForLegend) => {\n // declaring Current and Next Tick Value variable\n let currentTickValue;\n let nextTickValue;\n const upperBound = domainForLegend[domainForLegend.length - 1];\n const param = computationhelper.measureParam;\n const smartLabelCalc = computationhelper.smartLabelCalc;\n\n // calculating pixel required per Tick Values\n const pixelPerTick = (availableMeasure[param] / upperBound);\n\n // checking if available max width is smaller than required width for legend.\n if (availableMeasure[param] >= requiredMeasure[param]) {\n return domainForLegend;\n }\n\n currentTickValue = (smartLabelCalc.getOriSize((domainForLegend[0]))[param]);\n for (let i = 1; i < domainForLegend.length - 1; i++) {\n nextTickValue = Math.floor((currentTickValue / pixelPerTick) + domainForLegend[i - 1]);\n if (domainForLegend[i] < nextTickValue) {\n domainForLegend.splice(i, 1);\n i -= 1;\n }\n currentTickValue = (smartLabelCalc.getOriSize((domainForLegend[i]))[param]);\n }\n return domainForLegend;\n};\n\n/**\n * function to recompute the Stops Array provided to prevent the Overlapping of values\n * @param {Array} domainForLegend - Stops Array\n * @param {Object} scaleParams - Scale Parameters\n * @return {Array} - modified Stops Array\n */\nexport const getInterpolatedArrayData = (domainForLegend, scaleParams) => {\n // defining param for height/width selector\n let measureParam;\n\n // declaring variable for required Width\n let requiredWidth;\n\n // declaring variable for required height\n let requiredHeight;\n\n // declaring the variable for upperbound\n let upperBound = domainForLegend[domainForLegend.length - 1];\n\n // Initializing Minimum Tick Difference Variable and checking if it's less than 1 or not\n let minTickDiff = Math.ceil(domainForLegend[1] - domainForLegend[0]);\n\n // calculating max tick difference\n const maxTickDiff = Math.ceil(upperBound - domainForLegend[0]);\n\n // gradient Alignment\n const { alignment } = scaleParams;\n\n // getting SmartLabel Manager to calculate tick Params\n const smartLabelCalc = scaleParams.smartLabel;\n\n // scale Measurements (i.e MaxWidth and MaxHeight available)\n const availableSpace = scaleParams.measures;\n\n // getting minimum Tick size (i.e height and width)\n const minimumTickSize = scaleParams.minTickDistance;\n\n // getting domain upperbound dimensions\n const { height: tickDimHeight, width: tickDimWidth } = smartLabelCalc.getOriSize((upperBound));\n\n /* Checking if UpperBound of Domain is Floating or Not.\n In case of floating constricting it to 2 decimals after point. */\n if (!Number.isInteger(upperBound)) {\n upperBound = ((upperBound).toFixed(2));\n }\n\n // Calculating minimum tick difference\n minTickDiff = minTickDiff < 1 ? 1 : minTickDiff;\n\n // required width to render legend\n requiredWidth = (Math.abs(maxTickDiff) / Math.abs(minTickDiff)) * (tickDimWidth + (minimumTickSize.width));\n\n requiredWidth -= Math.abs(maxTickDiff);\n\n // require height to render legend\n requiredHeight = (Math.abs(maxTickDiff) / Math.abs(minTickDiff)) * tickDimHeight;\n\n requiredHeight -= Math.abs(maxTickDiff);\n\n // checking the alignment of legend\n if (alignment === TOP || alignment === BOTTOM) {\n measureParam = WIDTH;\n } else {\n measureParam = HEIGHT;\n }\n\n // calculating computed array\n domainForLegend = getcomputedArray({\n smartLabelCalc,\n measureParam\n }, {\n height: requiredHeight,\n width: requiredWidth\n }, {\n height: availableSpace.maxHeight,\n width: availableSpace.maxWidth\n }, domainForLegend);\n\n return domainForLegend;\n};\n\n/**\n * function to recalculate steps on providing more number of stops than canvas can accomodate.\n * @param {Array} domain - Array\n * @param {Array} steps - Array\n * @param {Object} scaleParams - Scale Parameters\n * @return {Array} - recalculated Step Array\n */\nexport const getInterpolatedData = (domain, steps, scaleParams) => {\n // declaring recomputeSteps Variable\n let recomputeSteps = 0;\n\n const getTickMeasure = scaleParams.smartLabel;\n const { maxWidth, maxHeight } = scaleParams.measures;\n const { alignment } = scaleParams;\n const domainForLegend = [];\n const interpolatedFn = numberInterpolator()(domain[0], domain[1]);\n\n // getting tick measure(i.e height and width)\n const tickValue = getTickMeasure.getOriSize(domain[1].toFixed(2));\n\n // To round the floating values to Integer and checking if value is 1.\n steps = Math.round(steps);\n steps = steps < 1 ? (steps + 1) : steps;\n\n // checking alignment of the Axis\n if (alignment === TOP || alignment === BOTTOM) {\n recomputeSteps = Math.floor(maxWidth / (tickValue.width));\n } else {\n recomputeSteps = Math.floor(maxHeight / (tickValue.height));\n }\n steps = Math.min(steps, recomputeSteps);\n\n // scaling the axis based on steps provided\n for (let i = 0; i <= steps; i++) {\n domainForLegend[i] = interpolatedFn(i / steps);\n }\n return domainForLegend;\n};\n\n/**\n *\n *\n * @param {*} container\n * @param {*} text\n * @param {*} measurement\n * @param {*} classPrefix\n */\nexport const titleCreator = (container, title, measurement, config) => {\n const titleWidth = Math.min(measurement.maxWidth, measurement.width);\n\n const titleContainer = makeElement(container, 'table', [1], `${config.classPrefix}-legend-title`)\n .style(WIDTH, `${titleWidth}px`)\n .style(HEIGHT, `${measurement.height}px`)\n .style('border-bottom', `${measurement.border}px ${config.borderStyle} ${config.borderColor}`)\n .style('text-align', title.orientation instanceof Function ?\n title.orientation(config.position) : title.orientation);\n return makeElement(titleContainer, 'td', [1], `${config.classPrefix}-legend-title-text`)\n .style(WIDTH, `${titleWidth}px`)\n .style(MAXWIDTH, `${titleWidth}px`)\n .style(HEIGHT, '100%')\n .style('line-height', 1)\n .style('padding', `${measurement.padding}px`)\n .text(title.text)\n .style('overflow-x', 'scroll')\n .node();\n};\n\n/**\n *\n *\n * @param {*} data\n * @param {*} prop\n * @param {*} labelManager\n *\n */\nexport const getMaxMeasures = (data, prop, labelManager) => {\n let maxHeight = -Infinity;\n let maxWidth = -Infinity;\n\n data.forEach((item) => {\n const value = prop ? item[prop] : item;\n const space = labelManager.getOriSize(value);\n maxHeight = Math.max(space.height + 2, maxHeight);\n maxWidth = Math.max(space.width + 2, maxWidth);\n });\n\n return { height: maxHeight, width: maxWidth };\n};\n\n/**\n *\n *\n * @param {*} data\n * @param {*} prop\n * @param {*} labelManager\n *\n */\nexport const getItemMeasures = (context, prop, formatter) => {\n const space = [];\n const data = context.data();\n const labelManager = context._labelManager;\n\n data.forEach((item, index) => {\n const value = prop ? item[prop] : item;\n const { height, width } = labelManager.getOriSize(formatter(value, index, data, context));\n space[index] = { height: height + 1, width: width + 1 };\n });\n return space;\n};\n\n/**\n *\n *\n * @param {*} textOrientation\n * @param {*} effPadding\n * @param {*} titleSpace\n *\n * @memberof Legend\n */\nexport const computeItemSpaces = (config, measures, data) => {\n let totalHeight = 0;\n let totalWidth = 0;\n let maxItemSpaces = {\n width: 0, height: 0\n };\n const {\n effPadding,\n titleWidth,\n labelSpaces,\n titleHeight,\n maxWidth\n } = measures;\n const {\n item,\n align\n } = config;\n const {\n icon,\n text\n } = item;\n const textOrientation = text.orientation;\n const itemSpaces = [];\n const iconSpaces = [];\n let maxIconWidth = 0;\n labelSpaces.forEach((labelSpace, i) => {\n const itemSpace = { width: 0, height: 0 };\n const iconSpace = { width: 0, height: 0 };\n const datum = data[i] || {};\n // Compute each legend item height/width\n if (textOrientation === LEFT || textOrientation === RIGHT) {\n // Get label, icon and item widths\n labelSpace.width += effPadding;\n iconSpace.width = (datum.size ? 2 * Math.sqrt(datum.size / Math.PI) : icon.width) + effPadding;\n maxIconWidth = Math.max(iconSpace.width, maxIconWidth);\n itemSpace.width = labelSpace.width + maxIconWidth;\n\n // Get label, icon and item heights\n labelSpace.height = Math.max(labelSpace.height, icon.height) + effPadding;\n iconSpace.height = labelSpace.height;\n itemSpace.height = labelSpace.height;\n } else {\n // Get label, icon and item widths\n labelSpace.width = Math.max(labelSpace.width, datum.size ? 2 * Math.sqrt(datum.size / Math.PI)\n : icon.width) + effPadding;\n iconSpace.width = labelSpace.width;\n itemSpace.width = labelSpace.width;\n maxIconWidth = Math.max(iconSpace.width, maxIconWidth);\n\n // Get label, icon and item heights\n labelSpace.height += effPadding;\n iconSpace.height = icon.height + effPadding;\n itemSpace.height = labelSpace.height + iconSpace.height;\n }\n // Compute height and width of legend for each alignment\n if (align === 'horizontal') {\n totalHeight = Math.max(totalHeight, itemSpace.height);\n } else {\n totalHeight += itemSpace.height;\n totalWidth = Math.max(totalWidth, itemSpace.width, titleWidth);\n }\n maxItemSpaces = {\n width: Math.max(itemSpace.width, maxItemSpaces.width),\n height: Math.max(itemSpace.height, maxItemSpaces.height)\n };\n itemSpaces.push(itemSpace);\n iconSpaces.push(iconSpace);\n });\n itemSpaces.forEach((itemSpace, i) => {\n if (align === 'horizontal') {\n itemSpace.height = totalHeight;\n iconSpaces[i].width = maxIconWidth;\n if (textOrientation === LEFT || textOrientation === RIGHT) {\n labelSpaces[i].height = totalHeight;\n iconSpaces[i].height = totalHeight;\n itemSpaces[i].width = labelSpaces[i].width + maxIconWidth;\n } else {\n labelSpaces[i].width = maxIconWidth;\n itemSpaces[i].width = maxIconWidth;\n labelSpaces[i].width = maxIconWidth;\n }\n totalWidth = Math.max(totalWidth + itemSpaces[i].width);\n } else {\n itemSpace.width = Math.max(totalWidth, maxWidth);\n if (textOrientation === TOP || textOrientation === BOTTOM) {\n labelSpaces[i].width = totalWidth;\n iconSpaces[i].width = totalWidth;\n maxIconWidth = totalWidth;\n } else {\n const labelWidth = labelSpaces[i].width;\n const newLabelWidth = (maxItemSpaces.width - maxIconWidth);\n iconSpaces[i].width = maxIconWidth;\n itemSpaces[i].width = labelSpaces[i].width + maxIconWidth;\n labelSpaces[i].width = Math.max(labelWidth, newLabelWidth);\n totalWidth = Math.max(totalWidth, itemSpace.width);\n }\n }\n });\n totalWidth = Math.ceil(Math.max(totalWidth, titleWidth)) + effPadding;\n totalHeight += titleHeight + effPadding;\n totalHeight = Math.ceil(totalHeight);\n return { totalHeight, totalWidth, itemSpaces, iconSpaces, maxItemSpaces, maxIconWidth };\n};\n\n/**\n *\n *\n * @param {*} type\n * @param {*} scaleInfo\n * @param {*} domainInfo\n *\n */\nexport const getDomainBounds = (type, scaleInfo, domainInfo) => {\n const {\n scaleFn,\n scaleType,\n scale\n } = scaleInfo;\n const {\n domain,\n domainBounds,\n domainLeg,\n steps\n } = domainInfo;\n const ele = domain[type === 'lower' ? 0 : domain.length - 1];\n const step = steps[type === 'lower' ? 0 : steps.length - 1];\n\n return {\n [scaleType]: scaleType === 'size' ? scale[scaleFn](ele) * scale.getScaleFactor() : scale[scaleFn](ele),\n value: domainBounds[type],\n id: type === 'lower' ? 0 : domainLeg.length + 2,\n range: [ele, step]\n };\n};\n","import {\n makeElement,\n selectElement,\n getUniqueId,\n getSmartComputedStyle,\n generateGetterSetters,\n mergeRecursive\n} from 'muze-utils';\nimport { behaviouralActions } from '@chartshq/muze-firebolt';\nimport * as legendBehaviours from '../firebolt/behavioural';\n\nimport { LegendFireBolt } from '../firebolt/legend-firebolt';\nimport { actionBehaviourMap } from '../firebolt/action-behaviour-map';\nimport { physicalActions } from '../firebolt/physical';\nimport * as sideEffects from '../firebolt/side-effects';\nimport { behaviourEffectMap } from '../firebolt/behaviour-effect-map';\nimport { VALUE, PATH, RIGHT, LEFT, TOP, BOTTOM } from '../enums/constants';\nimport { PROPS } from './props';\nimport { DEFAULT_MEASUREMENT, DEFAULT_CONFIG, LEGEND_TITLE } from './defaults';\nimport { getItemMeasures, titleCreator, computeItemSpaces } from './legend-helper';\n\n/**\n * Creates a Legend from the axes of a canvas\n *\n * @param {Object} dependencies : legend data\n * @class SimpleLegend\n */\nexport default class SimpleLegend {\n\n /**\n * Creates an instance of Legend.\n * @param {Object} dependencies Set of dependencies required by the legend\n * @memberof Legend\n */\n constructor (dependencies) {\n this._data = [];\n this._metaData = [];\n this._mount = null;\n this._fieldName = null;\n this._title = Object.assign({}, LEGEND_TITLE);\n this._metaData = null;\n this._labelManager = dependencies.labelManager;\n this._cells = dependencies.cells;\n this._id = getUniqueId();\n this._measurement = Object.assign({}, this.constructor.defaultMeasurement());\n this._config = mergeRecursive({}, this.constructor.defaultConfig());\n\n const dist = dependencies.labelManager.getOriSize('w');\n this._minTickDistance = { width: dist.width * 3 / 4, height: dist.height / 2 };\n\n generateGetterSetters(this, PROPS);\n this._computedStyle = getSmartComputedStyle(selectElement('body'),\n `${this.config().classPrefix}-legend-item-info`);\n\n this._firebolt = new LegendFireBolt(this, {\n behavioural: Object.assign({}, behaviouralActions, legendBehaviours),\n physical: physicalActions,\n physicalBehaviouralMap: actionBehaviourMap\n }, sideEffects, behaviourEffectMap);\n }\n\n id () {\n return this._id;\n }\n /**\n * Initializes an instance of the class\n *\n * @static\n * @param {Object} dependencies Set of dependencies required by the legend\n * @return {Instance} returns a new instance of Legend\n * @memberof Legend\n */\n static create (dependencies) {\n return new SimpleLegend(dependencies);\n }\n\n /**\n *\n *\n * @static\n *\n * @memberof SimpleLegend\n */\n static defaultConfig () {\n return DEFAULT_CONFIG;\n }\n\n /**\n *\n *\n * @static\n *\n * @memberof SimpleLegend\n */\n static defaultMeasurement () {\n return DEFAULT_MEASUREMENT;\n }\n\n /**\n *\n *\n * @readonly\n * @memberof SimpleLegend\n */\n firebolt (...params) {\n if (params.length) {\n return this;\n }\n return this._firebolt;\n }\n\n /**\n *\n *\n *\n * @memberof Legend\n */\n elemType () {\n return PATH;\n }\n\n canvasAlias (...alias) {\n if (alias.length) {\n this._canvasAlias = alias[0];\n return this;\n }\n return this._canvasAlias;\n }\n\n /**\n *\n *\n *\n * @memberof Legend\n */\n mount (...params) {\n if (params.length) {\n this._mount = params[0];\n this.render();\n return this;\n }\n return this._mount;\n }\n\n /**\n *\n *\n * @param {*} effPadding\n * @param {*} align\n *\n * @memberof Legend\n */\n getLabelSpaces () {\n const {\n item,\n classPrefix\n } = this.config();\n this._labelManager.setStyle(getSmartComputedStyle(selectElement('body'),\n `${classPrefix}-legend-item-info`));\n return getItemMeasures(this, VALUE, item.text.formatter);\n }\n\n /**\n * Sets the height and width of a legend based on provided max\n * height and width and based on its contents\n *\n * @return {Instance} Current instance\n * @memberof Legend\n */\n setLegendMeasures () {\n const {\n width,\n height,\n maxWidth,\n maxHeight,\n padding,\n margin,\n border\n } = this.measurement();\n const {\n align\n } = this.config();\n\n // Effective padding, margin and padding\n const effPadding = padding * 2;\n const effBorder = border * 2;\n const effMargin = margin * 2;\n\n this.data(this.dataFromScale());\n // Get space occupied by title\n const titleSpace = this.getTitleSpace();\n const titleHeight = titleSpace.height > 0 ? titleSpace.height + effPadding : 0;\n const titleWidth = titleSpace.width + effPadding;\n\n // Get space occupied by labels\n const labelSpaces = this.getLabelSpaces(effPadding, align);\n const {\n totalHeight, totalWidth, itemSpaces, iconSpaces, maxItemSpaces, maxIconWidth\n } = computeItemSpaces(this.config(),\n { effPadding, titleWidth, labelSpaces, titleHeight, maxWidth, maxHeight }, this.data());\n\n this.measurement({\n width: Math.max(totalWidth, width) + effMargin + effBorder,\n height: Math.max(totalHeight, height) + effMargin + effBorder,\n labelSpaces,\n iconSpaces,\n itemSpaces,\n maxItemSpaces,\n maxIconWidth,\n titleSpaces: {\n width: Math.min(maxWidth, this.measurement().width) - effMargin - effBorder,\n height: titleHeight\n }\n });\n return this;\n }\n\n /**\n * Returns the space occupied by the legend title\n *\n * @return {Object} Space occupied by title\n * @memberof Legend\n */\n getTitleSpace () {\n this._labelManager.setStyle(getSmartComputedStyle(selectElement('body'),\n `${this.config().classPrefix}-legend-title`));\n return this._labelManager.getOriSize(this.title().text ? this.title().text : '');\n }\n\n /**\n * Creates the title for the legend\n *\n * @param {DOM} container Container made for the title\n * @return {Selection} Title and it's node\n * @memberof Legend\n */\n renderTitle (container) {\n const { titleSpaces, border, padding, width, maxWidth } = this.measurement();\n const { borderStyle, borderColor } = this.config();\n return titleCreator(container, this.title(), {\n height: titleSpaces.height,\n width,\n maxWidth,\n border,\n padding,\n borderStyle,\n borderColor\n }, this.config());\n }\n\n /**\n * Render the legend with its title\n *\n * @param {DOM} mountPoint Point where the legend and title are to be appended\n * @return {Instance} Current instance of legend\n * @memberof Legend\n */\n render () {\n const firebolt = this.firebolt();\n const {\n classPrefix,\n borderStyle,\n borderColor,\n position\n } = this.config();\n const {\n maxWidth,\n maxHeight,\n width,\n height,\n margin,\n border\n } = this.measurement();\n const legendContainer = makeElement(selectElement(this.mount()), 'div', [1], `${classPrefix}-legend-box`);\n let marginPosition;\n switch (position) {\n case TOP:\n marginPosition = `margin-${BOTTOM}`;\n break;\n case LEFT:\n marginPosition = `margin-${RIGHT}`;\n break;\n case BOTTOM:\n marginPosition = `margin-${TOP}`;\n break;\n default:\n marginPosition = `margin-${LEFT}`;\n }\n legendContainer.classed(`${classPrefix}-legend-box-${this._id}`, true);\n legendContainer.style('float', 'left');\n // set height and width\n legendContainer.style('width', `${Math.min(maxWidth, width) - margin * 2}px`)\n .style('height', `${Math.min(maxHeight, height) - margin * 2}px`)\n .style(`${marginPosition}`, `${margin}px`)\n .style('border', `${border}px ${borderStyle} ${borderColor}`);\n this.legendContainer(legendContainer.node());\n\n // create title\n this.renderTitle(legendContainer);\n firebolt.createSelectionSet(this.data().map(d => d.id));\n return legendContainer;\n }\n /**\n *\n *\n * @param {*} data\n *\n * @memberof StepLegend\n */\n getCriteriaFromData (data) {\n const fieldName = this.fieldName();\n const type = this.metaData().getData().schema[0].type;\n if (type === 'measure') {\n return {\n [fieldName]: data.range\n };\n }\n return [[fieldName], [data.rawVal]];\n }\n}\n","import {\n LEFT,\n RIGHT,\n START,\n END,\n TOP,\n BOTTOM,\n HORIZONTAL,\n VERTICAL,\n CENTER,\n SHAPE,\n VALUE\n} from '../enums/constants';\n\nconst legendOrientation = {\n [HORIZONTAL]: {\n datasets: data => ({\n row: [1],\n column: data\n }),\n itemContainerMeasures: (measurement) => {\n const {\n itemSpaces,\n width\n } = measurement;\n return {\n row: {\n width: `${width}px`,\n padding: `${0}px`\n },\n column: {\n width: (d, i) => `${itemSpaces[i].width}px`,\n padding: `${0}px`\n }\n };\n },\n getStepSpacesInfo: (measurement) => {\n const { maxItemSpaces, height } = measurement;\n return {\n iconHeight: height,\n iconWidth: maxItemSpaces.width,\n stepPadding: {\n horizontal: true,\n vertical: false\n }\n };\n }\n },\n [VERTICAL]: {\n datasets: data => ({\n row: data,\n column: d => [d]\n }),\n itemContainerMeasures: (measurement, config) => {\n const {\n width\n } = measurement;\n const { padding } = config;\n\n return {\n row: {\n width: `${width}px`,\n padding: `${padding}px`\n },\n column: {\n width: `${width}px`,\n padding: `${0}px`\n }\n };\n },\n getStepSpacesInfo: (measurement) => {\n const { maxItemSpaces, width } = measurement;\n return {\n iconHeight: maxItemSpaces.height,\n iconWidth: width,\n stepPadding: {\n horizontal: false,\n vertical: true\n }\n };\n }\n }\n};\n\nexport const positionConfig = {\n [LEFT]: legendOrientation[VERTICAL],\n [RIGHT]: legendOrientation[VERTICAL],\n [TOP]: legendOrientation[HORIZONTAL],\n [BOTTOM]: legendOrientation[HORIZONTAL]\n};\n\nexport const alignmentMap = {\n [LEFT]: END,\n [RIGHT]: START,\n [TOP]: CENTER,\n [BOTTOM]: CENTER\n};\n\n// Reverses data for step legend\nexport const stepData = data => ({\n [LEFT]: data.reverse(),\n [RIGHT]: data.reverse(),\n [TOP]: data,\n [BOTTOM]: data\n});\n\n// Changes the item layout based on the position of the text\nexport const itemStack = {\n [LEFT]: [VALUE, SHAPE],\n [RIGHT]: [SHAPE, VALUE],\n [TOP]: [VALUE, SHAPE],\n [BOTTOM]: [SHAPE, VALUE]\n};\n","import { makeElement, selectElement, applyStyle } from 'muze-utils';\nimport { ICON_MAP } from './defaults';\nimport { positionConfig, alignmentMap, itemStack } from './position-config';\nimport {\n WIDTH,\n HEIGHT,\n CENTER,\n VALUE,\n RECT,\n LEFT,\n RIGHT\n} from '../enums/constants';\n\n/**\n *\n *\n * @param {*} container\n * @param {*} data\n * @param {*} legendInstance\n * @param {*} align\n *\n */\nexport const getItemContainers = (container, data, legendInstance) => {\n const measurement = legendInstance.measurement();\n const config = legendInstance.config();\n const {\n itemSpaces\n } = measurement;\n const {\n classPrefix,\n position\n } = config;\n const positionObj = positionConfig[position];\n const datasets = positionObj.datasets(data);\n const measures = positionObj.itemContainerMeasures(measurement, config);\n\n const rows = makeElement(container, 'div', datasets.row, `${classPrefix}-legend-row`);\n rows.style(HEIGHT, (d, i) => `${itemSpaces[i].height}px`);\n rows.style(WIDTH, measures.row.width);\n rows.style('padding', measures.row.padding);\n\n const columns = makeElement(rows, 'div', datasets.column, `${classPrefix}-legend-columns`);\n columns.style(WIDTH, measures.column.width);\n columns.style('padding', measures.column.padding);\n\n return columns;\n};\n\n/**\n *\n *\n * @param {*} container\n * @param {*} classPrefix\n * @param {*} data\n *\n * @memberof DiscreteLegend\n */\nexport const createLegendSkeleton = (context, container, classPrefix, data) => {\n let gradWidth = 0;\n let gradHeight = 0;\n let maxGradHeight = 0;\n let maxGradWidth = 0;\n const measurement = context.measurement();\n const {\n margin,\n border,\n titleSpaces,\n width,\n height,\n maxWidth,\n maxHeight\n } = measurement;\n\n gradHeight = height - (titleSpaces.height + 2 * margin + 2 * border);\n gradWidth = width - (margin * 2 + border * 2);\n\n maxGradHeight = maxHeight - (titleSpaces.height + margin * 2 + border * 2);\n maxGradWidth = maxWidth - (margin * 2 + border * 2);\n\n let legendBody = makeElement(container, 'div', [1], `${classPrefix}-legend-body`);\n legendBody.select(`.${classPrefix}-legend-overflow`).remove();\n // Create a div with scroll when overflow\n if (maxGradWidth && maxGradWidth < gradWidth) {\n legendBody = legendBody.style(WIDTH, `${maxGradWidth}px`).style('overflow-x', 'scroll');\n }\n // Create a div with scroll when overflow\n if (maxGradHeight && maxGradHeight < gradHeight) {\n legendBody.style(HEIGHT, `${maxGradHeight}px`).style('overflow-y', 'scroll');\n }\n\n legendBody = makeElement(legendBody, 'div', [1], `${classPrefix}-legend-overflow`);\n\n legendBody.style(WIDTH, `${gradWidth}px`);\n legendBody.style(HEIGHT, `${gradHeight}px`);\n\n const legendItem = getItemContainers(legendBody, data, context);\n return { legendItem };\n};\n\n/**\n * Creates legend item based on alignment and text orientation\n *\n * @param {Selection} container Point where items are to be mounted\n * @return {Instance} Current instance\n * @memberof Legend\n */\nexport const createItemSkeleton = (context, container) => {\n const {\n classPrefix,\n item\n } = context.config();\n const textOrientation = item.text.orientation;\n\n const stack = itemStack[textOrientation];\n const itemSkeleton = makeElement(container, 'div', (d, i) => stack.map(e => [e, d[e], d.color, d.size,\n d.value, context.fieldName(), i]), `${classPrefix}-legend-item-info`);\n\n const alignClass = alignmentMap[textOrientation];\n\n itemSkeleton.classed(alignClass, true);\n return { itemSkeleton };\n};\n\n/**\n *\n *\n * @param {*} measureType\n * @param {*} stepColorCheck\n */\nexport const applyItemStyle = (item, measureType, stepColorCheck, context) => {\n const {\n padding,\n labelSpaces,\n iconSpaces,\n maxIconWidth\n } = context.measurement();\n const diff = stepColorCheck ? -padding * 2 : 0;\n\n if (item[0] === VALUE) {\n return `${labelSpaces[item[6]][measureType]}px`;\n }\n return `${measureType === 'width' && !stepColorCheck ? maxIconWidth : iconSpaces[item[6]][measureType] - diff}px`;\n};\n\n/**\n *\n *\n * @param {*} str\n *\n */\nconst checkPath = (str) => {\n if (/^[mzlhvcsqta]\\s*[-+.0-9][^mlhvzcsqta]+/i.test(str) && /[\\dz]$/i.test(str) && str.length > 4) {\n return true;\n }\n return false;\n};\n\n/**\n *\n *\n * @param {*} d\n * @param {*} elem\n */\nconst createShape = function (d, elem, defaultIcon, width, height) {\n const groupElement = elem;\n // const { shape, size, update } = d;\n const size = d[3] || Math.min(width, height) * Math.PI;\n const shape = d[1] || defaultIcon;\n\n if (shape instanceof Promise) {\n shape.then((res) => {\n d.shape = res;\n return createShape(d, elem);\n });\n } else if (shape instanceof Element) {\n let newShape = shape.cloneNode(true);\n\n if (newShape.nodeName.toLowerCase() === 'img') {\n const src = newShape.src || newShape.href;\n newShape = document.createElementNS('http://www.w3.org/2000/svg', 'image');\n newShape.setAttribute('href', src);\n }\n const shapeElement = selectElement(newShape);\n shapeElement.attr('transform', `scale(${size / 100})`);\n return selectElement(groupElement.node().appendChild(newShape));\n } else if (typeof shape === 'string') {\n let pathStr;\n if (checkPath(shape)) {\n pathStr = shape;\n } else {\n pathStr = ICON_MAP(shape).size(size)();\n }\n return makeElement(groupElement, 'path', data => [data]).attr('d', pathStr);\n }\n d[1] = 'circle';\n return createShape(d, elem, 'circle');\n};\n\n/**\n * Returns the icon of the legend item\n *\n * @param {Object} datum Data property attached to the item\n * @param {number} width width of the item\n * @param {number} height height of the item\n * @return {Object|string} returns the path string or the string name of the icon\n * @memberof Legend\n */\nexport const getLegendIcon = (datum, width, height, defaultIcon) => {\n const icon = ICON_MAP(datum[1]);\n\n if (icon) {\n return icon.size(datum[3] || Math.min(width, height) * Math.PI);\n }\n return ICON_MAP(datum[3] ? 'circle' : defaultIcon).size(datum[3] || Math.min(width, height) * Math.PI);\n};\n\n/**\n *\n *\n */\nexport const renderIcon = (icon, container, datum, context) => {\n const {\n classPrefix,\n iconHeight,\n iconWidth,\n maxIconWidth,\n padding,\n color\n } = context;\n const svg = makeElement(container, 'svg', f => [f], `${classPrefix}-legend-icon-svg`)\n .attr(WIDTH, maxIconWidth)\n .attr(HEIGHT, iconHeight)\n .style(WIDTH, `${maxIconWidth}px`)\n .style(HEIGHT, `${iconHeight}px`);\n\n if (icon !== RECT) {\n const group = makeElement(svg, 'g', [datum[1]], `${classPrefix}-legend-icon`);\n createShape(datum, group, datum[3] ? 'circle' : 'square', iconWidth, iconHeight)\n .attr('transform', `translate(${maxIconWidth / 2 - padding} ${iconHeight / 2})`)\n .attr('fill', datum[2] || color);\n } else {\n makeElement(svg, RECT, [datum[1]], `${classPrefix}-legend-icon`)\n .attr('x', 0)\n .attr('y', 0)\n .attr(WIDTH, maxIconWidth)\n .attr(HEIGHT, iconHeight)\n .attr('fill', datum[2] || color);\n }\n};\n\n/**\n * Renders the items in the legend i.e, icon and text\n *\n * @param {DOM} container Point where item is to be mounted\n * @memberof Legend\n */\nexport const renderDiscreteItem = (context, container) => {\n const labelManager = context._labelManager;\n const {\n item,\n classPrefix\n } = context.config();\n const {\n maxIconWidth,\n padding\n } = context.measurement();\n const {\n width: iconWidth,\n height: iconHeight,\n color,\n className\n } = item.icon;\n\n const textOrientation = item.text.orientation;\n const formatter = item.text.formatter;\n\n labelManager.useEllipsesOnOverflow(true);\n applyStyle(container, {\n width: d => applyItemStyle(d, WIDTH, false, context),\n height: d => applyItemStyle(d, HEIGHT, false, context),\n 'text-align': CENTER,\n padding: `${padding}px`\n });\n\n labelManager.setStyle(context._computedStyle);\n const dataArr = container.data();\n container.each(function (d, i) {\n if (d[0] === VALUE) {\n selectElement(this).text(formatter(d[1], i, dataArr, context))\n .style(`padding-${textOrientation === RIGHT ? LEFT : RIGHT}`, '0px');\n } else {\n // const icon = getLegendIcon(d, iconWidth, iconHeight, type);\n selectElement(this).classed(`${classPrefix}-${className}`, true);\n selectElement(this).classed(`${classPrefix}-${className}-${i}`, true);\n renderIcon('circle', selectElement(this), d, {\n classPrefix,\n iconWidth,\n // iconWidth: 2 * Math.sqrt(d[3] / Math.PI) || iconWidth,\n iconHeight,\n maxIconWidth,\n padding,\n color\n });\n }\n });\n};\n\n/**\n* Renders the items in the legend i.e, icon and text\n*\n* @param {DOM} container Point where item is to be mounted\n* @memberof Legend\n*/\nexport const renderStepItem = (context, container) => {\n const labelManager = context._labelManager;\n const {\n item,\n position,\n classPrefix\n } = context.config();\n const {\n maxItemSpaces,\n maxIconWidth,\n padding\n } = context.measurement();\n const {\n width,\n height,\n color\n } = item.icon;\n const {\n formatter\n } = item.text;\n\n labelManager.useEllipsesOnOverflow(true);\n const { iconHeight, iconWidth, stepPadding } = positionConfig[position].getStepSpacesInfo({\n maxItemSpaces, height, width\n });\n\n applyStyle(container, {\n width: d => applyItemStyle(d, WIDTH, stepPadding.horizontal, context),\n height: d => applyItemStyle(d, HEIGHT, stepPadding.vertical, context),\n 'text-align': 'center',\n padding: `${padding}px`\n });\n\n labelManager.setStyle(context._computedStyle);\n const dataArr = container.data();\n container.each(function (d, i) {\n if (d[0] === VALUE) {\n selectElement(this).text(formatter(d[1], i, dataArr, context));\n } else {\n renderIcon(RECT, selectElement(this), d, {\n classPrefix,\n iconWidth,\n iconHeight,\n maxIconWidth,\n color\n });\n }\n });\n};\n","import {\n FieldType,\n DimensionSubtype,\n formatTemporal\n} from 'muze-utils';\nimport SimpleLegend from './simple-legend';\nimport { DISCRETE, LEFT, SIZE } from '../enums/constants';\nimport { getScaleInfo } from './legend-helper';\nimport { createLegendSkeleton, createItemSkeleton, renderDiscreteItem } from './renderer';\nimport '../styles.scss';\n\n/**\n * Creates a Legend from the axes of a canvas\n *\n * @param {Object} dependencies : legend data\n * @class Legend\n */\nexport default class DiscreteLegend extends SimpleLegend {\n\n /**\n * Initializes an instance of the class\n *\n * @static\n * @param {Object} dependencies Set of dependencies required by the legend\n * @return {Instance} returns a new instance of Legend\n * @memberof Legend\n */\n static create (dependencies) {\n return new DiscreteLegend(dependencies);\n }\n\n /**\n *\n *\n * @static\n *\n * @memberof DiscreteLegend\n */\n static type () {\n return DISCRETE;\n }\n\n /**\n *\n *\n * @param {*} scale\n *\n * @memberof DiscreteLegend\n */\n dataFromScale () {\n const scale = this.scale();\n const { scaleType, domain, scaleFn } = getScaleInfo(scale);\n let domainForLegend = [...new Set(domain)];\n const field = this.metaData().getFieldspace().fields[0];\n const { type, subtype } = field.schema();\n\n domainForLegend = domainForLegend.map((ele, i) => {\n let value = 0;\n let range = 0;\n const rawVal = domainForLegend[i];\n if (type === FieldType.MEASURE) {\n value = (+domainForLegend[i]).toFixed(0);\n const nextVal = domainForLegend[i + 1] ? +domainForLegend[i + 1] : +value;\n range = [value, nextVal.toFixed(0)];\n } else {\n let domainVal = rawVal;\n if (subtype === DimensionSubtype.TEMPORAL) {\n domainVal = formatTemporal(domainForLegend[i], field.minimumConsecutiveDifference());\n }\n value = domainVal;\n range = [domainVal];\n }\n return {\n [scaleType]: scale[scaleFn](ele),\n value,\n id: i,\n range,\n rawVal\n };\n }).filter(d => d.value !== null);\n\n domainForLegend = scaleType === SIZE ? domainForLegend.sort((a, b) => a[scaleType] - b[scaleType])\n : domainForLegend;\n return domainForLegend;\n }\n\n /**\n * Render the legend with its title\n *\n * @param {DOM} mountPoint Point where the legend and title are to be appended\n * @return {Instance} Current instance of legend\n * @memberof Legend\n */\n render () {\n const firebolt = this.firebolt();\n const data = this.data();\n const { classPrefix } = this.config();\n const legendContainer = super.render(this.mount());\n // create Legend\n const { legendItem } = createLegendSkeleton(this, legendContainer, classPrefix, data);\n const { itemSkeleton } = createItemSkeleton(this, legendItem);\n renderDiscreteItem(this, itemSkeleton);\n legendContainer.selectAll('div').style('float', LEFT);\n firebolt.mapActionsAndBehaviour();\n firebolt.createSelectionSet(this.data().map(d => d.id));\n return legendContainer;\n }\n}\n","import { makeElement, applyStyle } from 'muze-utils';\nimport { ContinousAxis } from '@chartshq/muze-axis';\nimport { BOTTOM, RIGHT } from '../enums/constants';\nimport { ALIGN } from './defaults';\nimport '../styles.scss';\n\n/**\n *\n *\n * @param {*} data\n *\n */\nexport const getGradientDomain = (data) => {\n if (typeof data[0].value === 'number') {\n return data.reduce((accumulator, currentValue) =>\n [Math.min(currentValue.value, accumulator[0]), Math.max(currentValue.value, accumulator[1])],\n [Number.MAX_VALUE, Number.MIN_VALUE]);\n }\n return data.map(e => e.value);\n};\n\n/**\n *\n *\n * @param {*} container\n * @param {*} data\n * @param {*} domain\n *\n */\nexport const makeLinearGradient = (container, data, domain) => {\n const defs = makeElement(container, 'defs', [1]);\n const linearGradient = makeElement(defs, 'linearGradient', [1])\n .attr('id', 'linear-gradient')\n .attr('x1', '0%')\n .attr('y2', '0%');\n\n makeElement(linearGradient, 'stop', data, 'stop-gradient')\n .attr('offset', d => `${(d.value - domain[0]) * 100 / (domain[1] - domain[0]) || 1}%`)\n .attr('stop-color', d => d.color);\n return linearGradient;\n};\n\n/**\n * Creates an axis cell with a linear axis for computing space and\n * creating gradient legend\n *\n * @return {AxisCell} Instance of Axis Cell for the gradient axis\n * @memberof Legend\n */\nexport const createAxis = (context) => {\n const data = context.data();\n const { align } = context.config();\n const AxisCell = context._cells.AxisCell;\n const newAxis = new ContinousAxis({\n id: `legend-${context._id}`,\n orientation: align === ALIGN.VERTICAL ? RIGHT : BOTTOM,\n style: context._computedStyle,\n nice: false,\n showAxisName: false,\n tickValues: data.map(d => d.value),\n fixedBaseline: false,\n labels: {\n rotation: null\n }\n }, { labelManager: context._labelManager });\n\n newAxis.domain(getGradientDomain(data));\n newAxis.range([1, 1]);\n return new AxisCell().source(newAxis).config({\n margin: { left: 0, bottom: 0, top: 0, right: 0 }\n });\n};\n\n/**\n *\n *\n * @param {*} container\n * @param {*} data\n * @param {*} classPrefix\n *\n * @memberof GradientLegend\n */\nconst createLegendSkeleton = (container, classPrefix, data) => {\n const domain = getGradientDomain(data);\n const legendContainer = makeElement(container, 'div', [1], `${classPrefix}-legend-body`);\n const legendGradSvg = makeElement(legendContainer, 'svg', [1], `${classPrefix}-gradient`);\n const legendGradCont = makeElement(legendGradSvg, 'g', [1], `${classPrefix}-gradient-group`);\n const linearGradient = makeLinearGradient(legendGradSvg, data, domain);\n const legendRect = makeElement(legendGradCont, 'rect', [1], `${classPrefix}-gradient-rect`);\n\n return {\n legendContainer,\n legendGradCont,\n legendGradSvg,\n linearGradient,\n legendRect\n };\n};\n\n/**\n * Renders the axis for the gradient\n *\n * @param {Selection} container Point where axis is to be mounted\n * @param {number} height Height for axis\n * @param {number} width Width for axis\n * @memberof Legend\n */\nexport const renderAxis = (context, container, height, width) => {\n const axis = context.axis();\n\n axis.setAvailableSpace(width, height);\n axis.render(container.node());\n axis.source().render();\n};\n\n/**\n * Renders gradient legends\n *\n * @param {Selection} container Point where the legend is to be appended\n * @memberof GradientLegend\n */\nexport const renderGradient = (context, container) => {\n let gradHeight = 0;\n let gradWidth = 0;\n const {\n align,\n classPrefix,\n item\n } = context.config();\n const data = context.data();\n // Create the skeleton for the legend\n const {\n legendContainer,\n legendGradSvg,\n legendGradCont,\n linearGradient,\n legendRect\n } = createLegendSkeleton(container, classPrefix, data);\n const labelDim = context.axis().source().getAxisDimensions().tickDimensions;\n const {\n padding,\n margin,\n border,\n titleSpaces,\n maxItemSpaces,\n maxHeight,\n maxWidth,\n height,\n width\n } = context.measurement();\n const gradientDimensions = {};\n\n gradHeight = Math.floor(Math.min(height, maxHeight) - (titleSpaces.height + 2 * margin + 2 * border));\n gradWidth = Math.floor(Math.min(width, maxWidth) - (margin * 2 + border * 2));\n\n if (align === ALIGN.HORIZONTAL) {\n gradientDimensions.height = item.icon.height;\n gradientDimensions.width = gradWidth - 2 * padding - labelDim.width / 2;\n linearGradient.attr('x2', '100%').attr('y1', '0%');\n legendGradCont.attr('transform', `translate( ${labelDim.width / 2} 0)`);\n renderAxis(context, legendContainer, gradHeight - item.icon.height - padding, gradWidth - 2 * padding - 1);\n\n applyStyle(legendContainer, {\n height: `${maxItemSpaces.height + border + padding}px`,\n width: `${Math.min(width, maxWidth)}px`,\n padding: `${padding}px`\n });\n\n legendRect.attr('height', gradientDimensions.height);\n legendRect.attr('width', gradientDimensions.width - labelDim.width / 2);\n } else {\n gradientDimensions.height = gradHeight - 2 * padding - labelDim.height / 2;\n gradientDimensions.width = item.icon.width;\n linearGradient.attr('x2', '0%').attr('y1', '100%');\n legendGradCont.attr('transform', `translate(0 ${labelDim.height / 2})`);\n renderAxis(context, legendContainer, gradHeight - 2 * padding - 1, gradWidth - item.icon.width - padding * 2);\n\n applyStyle(legendContainer, {\n height: `${Math.min(height, maxHeight)}px`,\n width: `${maxWidth}px`,\n padding: `${padding}px`\n });\n legendRect.attr('height', gradientDimensions.height - labelDim.height / 2);\n legendRect.attr('width', gradientDimensions.width);\n }\n\n // Apply Styles to the legend plot area\n applyStyle(legendGradSvg, {\n height: `${gradientDimensions.height}px`,\n width: `${gradientDimensions.width}px`\n });\n\n // Apply styles to the legend rect\n applyStyle(legendRect, {\n fill: 'url(#linear-gradient)'\n });\n legendGradSvg.attr('height', gradientDimensions.height);\n legendGradSvg.attr('width', gradientDimensions.width);\n\n context.measurement({\n gradientDimensions\n });\n context._legendGradientSvg = legendGradSvg;\n return context;\n};\n","import SimpleLegend from './simple-legend';\nimport { getScaleInfo, getInterpolatedData, getInterpolatedArrayData } from './legend-helper';\nimport { GRADIENT, LEFT, SIZE } from '../enums/constants';\nimport { renderGradient, createAxis } from './gradient-helper';\nimport '../styles.scss';\n\n/**\n * Creates a Legend from the axes of a canvas\n *\n * @param {Object} dependencies : legend data\n * @class Legend\n */\nexport default class GradientLegend extends SimpleLegend {\n\n /**\n * Initializes an instance of the class\n *\n * @static\n * @param {Object} dependencies Set of dependencies required by the legend\n * @return {Instance} returns a new instance of Legend\n * @memberof Legend\n */\n static create (dependencies) {\n return new GradientLegend(dependencies);\n }\n\n /**\n *\n *\n * @static\n *\n * @memberof GradientLegend\n */\n static type () {\n return GRADIENT;\n }\n\n /**\n *\n *\n * @param {*} axis\n *\n * @memberof GradientLegend\n */\n axis (...axis) {\n if (axis.length) {\n this._axis = axis[0];\n return this;\n }\n return this._axis;\n }\n\n /**\n *\n *\n * @param {*} scale\n *\n * @memberof GradientLegend\n */\n dataFromScale () {\n let domainForLegend = [];\n const scale = this.scale();\n const { scaleType, domain, steps, scaleFn } = getScaleInfo(scale);\n\n // defining scaleParams\n const scaleParams = {\n smartLabel: this.labelManager(),\n measures: this.measurement(),\n alignment: this.config().position,\n minTickDistance: this.minTickDistance()\n };\n\n if (steps instanceof Array) {\n if (domain[0] < steps[0]) {\n domainForLegend[0] = domain[0];\n }\n domainForLegend = [...domainForLegend, ...steps];\n if (domain[domain.length - 1] > steps[steps.length - 1]) {\n domainForLegend.push(domain[1]);\n }\n // Sorting the domain Array\n domainForLegend = [...new Set(domainForLegend)].sort((a, b) => a - b);\n\n domainForLegend = getInterpolatedArrayData(domainForLegend, scaleParams);\n } else {\n domainForLegend = getInterpolatedData(domain, steps - 1, scaleParams);\n }\n domainForLegend = [...new Set(domainForLegend)].sort((a, b) => a - b);\n\n return domainForLegend.map((ele, i) => {\n const value = domainForLegend[i];\n return {\n [scaleType]: scaleType === SIZE ? scale[scaleFn](ele) * scale.getScaleFactor()\n : scale[scaleFn](Math.floor(ele)),\n value: +value.toFixed(2),\n id: i\n };\n }).filter(d => d.value !== null);\n }\n\n /**\n *\n *\n * @param {*} effPadding\n * @param {*} align\n *\n * @memberof Legend\n */\n getLabelSpaces (effPadding) {\n this.config({\n item: {\n text: {\n orientation: this.config().position\n }\n }\n });\n const axis = createAxis(this);\n const axisSpace = axis.getLogicalSpace();\n const space = { width: axisSpace.width - effPadding, height: axisSpace.height - effPadding };\n const axisDomainLength = axis.source().domain().length;\n const labelSpaces = new Array(axisDomainLength).fill(space);\n\n this.axis(axis);\n return labelSpaces;\n }\n\n /**\n *\n *\n *\n * @memberof GradientLegend\n */\n getDrawingContext () {\n return {\n svgContainer: this._legendGradientSvg\n };\n }\n\n /**\n * Render the legend with its title\n *\n * @param {DOM} mountPoint Point where the legend and title are to be appended\n * @return {Instance} Current instance of legend\n * @memberof Legend\n */\n render () {\n const firebolt = this.firebolt();\n const legendContainer = super.render(this.mount());\n // create Legend\n renderGradient(this, legendContainer);\n legendContainer.selectAll('div').style('float', LEFT);\n firebolt.mapActionsAndBehaviour();\n firebolt.createSelectionSet(this.data().map(d => d.id));\n return legendContainer;\n }\n /**\n *\n *\n * @param {*} data\n *\n * @memberof SimpleLegend\n */\n getCriteriaFromData (data) {\n return [[this.fieldName()], [data.value]];\n }\n}\n","import SimpleLegend from './simple-legend';\nimport {\n getScaleInfo,\n getInterpolatedData,\n getDomainBounds\n} from './legend-helper';\nimport {\n createLegendSkeleton,\n createItemSkeleton,\n renderStepItem\n} from './renderer';\nimport { STEP, RECT, LEFT, SIZE, UPPER, LOWER } from '../enums/constants';\nimport { stepData } from './position-config';\nimport '../styles.scss';\n\n/**\n * Creates a Legend from the axes of a canvas\n *\n * @param {Object} dependencies : legend data\n * @class Legend\n */\nexport default class StepLegend extends SimpleLegend {\n\n /**\n * Initializes an instance of the class\n *\n * @static\n * @param {Object} dependencies Set of dependencies required by the legend\n * @return {Instance} returns a new instance of Legend\n * @memberof Legend\n */\n static create (dependencies) {\n return new StepLegend(dependencies);\n }\n\n /**\n *\n *\n * @static\n *\n * @memberof StepLegend\n */\n static type () {\n return STEP;\n }\n\n /**\n *\n *\n * @param {*} scale\n *\n * @memberof StepLegend\n */\n dataFromScale () {\n let domainLeg = [];\n const scale = this.scale();\n const { scaleType, domain, steps, scaleFn } = getScaleInfo(scale);\n\n const { formatter } = this.config();\n const domainBounds = {\n lower: null, upper: null\n };\n\n // defining scaleParams\n const scaleParams = {\n smartLabel: this.labelManager(),\n measures: this.measurement(),\n alignment: this.config().position,\n minTickDistance: this.minTickDistance()\n };\n\n if (steps instanceof Array) {\n if (domain[0] < steps[0]) {\n domainBounds.lower = [`${formatter.bounds.lower} ${steps[0]}`];\n }\n domainLeg = [...domainLeg, ...steps];\n if (domain[domain.length - 1] > steps[steps.length - 1]) {\n domainBounds.upper = [`${formatter.bounds.upper} ${steps[steps.length - 1]}`];\n }\n } else {\n domainLeg = getInterpolatedData(domain, steps, scaleParams);\n }\n\n domainLeg = [...new Set(domainLeg)].sort((a, b) => a - b);\n domainLeg = domainLeg.map((ele, i) => {\n let value = null;\n if (i < domainLeg.length - 1) {\n value = `${(ele.toFixed(1))} - ${(+domainLeg[i + 1].toFixed(1))}`;\n } else if (domainLeg.length === 1) {\n value = ele.toFixed(1);\n }\n return {\n [scaleType]: scaleType === SIZE ? scale[scaleFn](ele) * scale.getScaleFactor() : scale[scaleFn](ele),\n value,\n id: i + 1,\n range: [ele, domainLeg[i + 1]]\n };\n }).filter(d => d.value !== null);\n\n if (domainBounds.lower) {\n const lowerBounds = getDomainBounds(LOWER, { scale, scaleFn, scaleType },\n { domain, steps, domainBounds });\n domainLeg = [lowerBounds, ...domainLeg];\n }\n if (domainBounds.upper) {\n const upperBounds = getDomainBounds(UPPER, { scale, scaleFn, scaleType },\n { domain, steps, domainBounds, domainLeg });\n domainLeg = [...domainLeg, upperBounds];\n }\n\n return domainLeg;\n }\n\n /**\n *\n *\n * @param {*} effPadding\n * @param {*} align\n *\n * @memberof Legend\n */\n getLabelSpaces (effPadding, align) {\n this.config({\n item: {\n text: {\n orientation: this.config().position\n }\n }\n });\n return super.getLabelSpaces(effPadding, align);\n }\n\n /**\n *\n *\n *\n * @memberof Legend\n */\n elemType () {\n return RECT;\n }\n\n /**\n * Render the legend with its title\n *\n * @param {DOM} mountPoint Point where the legend and title are to be appended\n * @return {Instance} Current instance of legend\n * @memberof Legend\n */\n render () {\n const firebolt = this.firebolt();\n const { classPrefix, position } = this.config();\n const data = stepData(this.data())[position];\n\n const legendContainer = super.render(this.mount());\n\n // create Legend\n const { legendItem } = createLegendSkeleton(this, legendContainer, classPrefix, data);\n const { itemSkeleton } = createItemSkeleton(this, legendItem);\n\n renderStepItem(this, itemSkeleton);\n legendContainer.selectAll('div').style('float', LEFT);\n firebolt.mapActionsAndBehaviour();\n firebolt.createSelectionSet(this.data().map(d => d.id));\n return legendContainer;\n }\n\n /**\n *\n *\n * @param {*} data\n *\n * @memberof StepLegend\n */\n getCriteriaFromData (data) {\n const fieldName = this.fieldName();\n return {\n [fieldName]: data.range\n };\n }\n}\n","import { GradientLegend, DiscreteLegend, StepLegend } from '@chartshq/muze-legend';\n\n/**\n * Contants to be used as attr\n */\nexport const ROWS = 'rows';\nexport const COLUMNS = 'columns';\nexport const DATA = 'data';\nexport const COLOR = 'color';\nexport const SHAPE = 'shape';\nexport const SIZE = 'size';\nexport const DETAIL = 'detail';\nexport const LAYERS = 'layers';\nexport const TRANSFORM = 'transform';\nexport const INITIALIZED = 'isInitialized';\nexport const SOURCE = 'source';\nexport const WIDTH = 'width';\nexport const HEIGHT = 'height';\nexport const PADDING = 'padding';\nexport const BORDER = 'border';\nexport const MARGIN = 'margin';\nexport const CONFIG = 'config';\nexport const MOUNT = 'mount';\nexport const CANVAS_UPDATED = 'canvasUpdated';\nexport const CLASSPREFIX = 'classPrefix';\nexport const POLICIES = '_policies';\nexport const LEGEND = 'legend';\nexport const TITLE = 'title';\nexport const SUB_TITLE = 'subtitle';\nexport const RESOLVE = 'resolve';\nexport const DISCRETE = 'discrete';\nexport const STEP_COLOR = 'step-color';\nexport const GRADIENT = 'gradient';\nexport const LINEAR = 'linear';\nexport const ORDINAL = 'ordinal';\nexport const MUZE_PREFIX = 'muze';\n\nexport const TITLE_TEMPLATE_NOT_ALLOWED_TAGS = [\n 'script',\n 'style'\n];\n\nexport const LEGEND_TYPE_MAP = {\n [`${ORDINAL}-${true}-${COLOR}`]: DiscreteLegend,\n [`${ORDINAL}-${true}-${SIZE}`]: DiscreteLegend,\n [`${ORDINAL}-${true}-${SHAPE}`]: DiscreteLegend,\n [`${ORDINAL}-${false}-${COLOR}`]: DiscreteLegend,\n [`${ORDINAL}-${false}-${SHAPE}`]: DiscreteLegend,\n [`${ORDINAL}-${false}-${SIZE}`]: DiscreteLegend,\n [`${LINEAR}-${false}-${SIZE}`]: DiscreteLegend,\n [`${LINEAR}-${true}-${SIZE}`]: DiscreteLegend,\n [`${LINEAR}-${false}-${SHAPE}`]: DiscreteLegend,\n [`${LINEAR}-${true}-${COLOR}`]: StepLegend,\n [`${LINEAR}-${false}-${COLOR}`]: GradientLegend\n};\n\nexport const LEFT = 'left';\nexport const RIGHT = 'right';\nexport const BOTTOM = 'bottom';\nexport const TOP = 'top';\nexport const GROUP = 'group';\nexport const LAYOUT = 'layout';\nexport const RETINAL = 'retinal';\nexport const DIMENSION = 'dimension';\nexport const MEASURE = 'measure';\nexport const VERTICAL = 'vertical';\nexport const HORIZONTAL = 'horizontal';\nexport const HORIZONTAL_CENTER = 'h-center';\nexport const VERTICAL_CENTER = 'v-center';\nexport const HIDDEN = 'hidden';\nexport const OVERFLOW = 'overflow';\nexport const OVERFLOW_X = 'overflow-x';\nexport const OVERFLOW_Y = 'overflow-y';\nexport const AUTO = 'auto';\nexport const VISIBLE = 'visible';\nexport const VERTICAL_SCROLL_BAR = 'verticalScrollBar';\nexport const HORIZONTAL_SCROLL_BAR = 'horizontalScrollBar';\nexport const GRID = 'grid';\n","import { ComposedVars, SimpleVariable } from '@chartshq/visual-group';\nimport { TITLE_TEMPLATE_NOT_ALLOWED_TAGS } from './constants';\n\n/**\n * This method creates a new composed variable instance from multiple variables. This is required when we have multiple\n * variables on a single axis and the union of domain of all the variables needs to be set on the axis.\n *\n * To create a new composed variable from multiple fields,\n * ```\n * const sharedVar = share('open', 'high', 'low', 'close');\n * canvas.rows([sharedVar])\n * .columns(['date']);\n * ```\n *\n * @module Operators\n * @public\n * @function share\n * @param {Array} vars Variable names.\n *\n * @return {ComposedVars} Instance of composed variable\n */\nexport const share = (...vars) => new ComposedVars(...vars.map(variable => new SimpleVariable(variable)));\n\n/**\n *\n *\n * @param {*} node\n *\n */\nfunction treeShakeNode (node) {\n if (node.nodeType !== Node.ELEMENT_NODE) { return; }\n\n if (TITLE_TEMPLATE_NOT_ALLOWED_TAGS.indexOf(node.tagName.toLowerCase()) !== -1) {\n node.parentNode.removeChild(node);\n } else {\n for (const childNode of node.childNodes) {\n treeShakeNode(childNode);\n }\n }\n}\n\n/**\n * A string template tagged function which sanitizes input html formatted string according to the allowed html tags.\n * This is used to render html in canvas components like title and tooltip.\n *\n * To render html in canvas components,\n * ```\n * canvas.title(html`TITLE`);\n * ```\n *\n * @public\n * @module Operators\n * @function html\n * @param {Array.} strings - The string parts of the template.\n * @param {Array} exps - The list of evaluated expression values.\n *\n * @return {Function} Returns a function which returns the sanitized html string.\n */\nexport function html (strings, ...exps) {\n let htmlCode = '';\n const expLn = exps.length;\n let i = 0;\n\n for (; i < expLn; ++i) {\n htmlCode += strings[i] + exps[i];\n }\n htmlCode += strings[i];\n\n const frag = document.createDocumentFragment();\n const wrapper = document.createElement('div');\n\n frag.appendChild(wrapper);\n wrapper.innerHTML = htmlCode;\n\n treeShakeNode(wrapper);\n const { innerHTML } = wrapper;\n\n return () => innerHTML;\n}\n","import { mergeRecursive, CommonProps } from 'muze-utils';\n\nconst defaultPolicy = (registrableComponents) => {\n const aliases = registrableComponents.map(comp => comp.alias());\n return {\n behaviours: {\n '*': (propagationPayload) => {\n const propagationCanvas = propagationPayload.sourceCanvas;\n return propagationCanvas ? aliases.indexOf(propagationCanvas) !== -1 : true;\n }\n }\n };\n};\n\nconst listenerFn = (canvas, fn) => () => {\n const valueMatrix = canvas.composition().visualGroup.matrixInstance().value;\n valueMatrix.each(cell => fn(cell.valueOf().firebolt()));\n};\n\nconst canvasIterator = (canvases, iteratorFn, cFn) => {\n canvases.forEach((canvas) => {\n const matrix = canvas.composition().visualGroup.matrixInstance().value;\n matrix.each(cell => iteratorFn(cell.valueOf().firebolt()));\n cFn && cFn(canvas);\n // Also register actions on canvas update\n const throwback = canvas._throwback;\n\n throwback.registerImmediateListener([CommonProps.MATRIX_CREATED],\n listenerFn(canvas, iteratorFn));\n });\n};\n\n/**\n * This class is initiated only once in lifecycle and is reponsible for regisration of physical and behavioural\n * actions and side effects and the mapping between them.\n *\n * To get the instance of action model\n * ```\n * const ActionModel = muze.ActionModel;\n * ```\n *\n * @public\n * @module ActionModel\n */\nclass ActionModel {\n constructor () {\n this._registrableComponents = [];\n }\n\n /**\n * Takes an array of canvases on which the physical and behavioural actions will get registered.\n *\n * @public\n * @param {Canvas} components Array of canvases\n *\n * @return {ActionModel} Instance of action model.\n */\n for (...components) {\n this._registrableComponents = components;\n return this;\n }\n\n /**\n * Registers physical actions on the canvases. It takes an object with key as the name of action and value having\n * the definition of the action.\n *\n * To register a {@link PhysicalAction},\n * ```\n * const ActionModel = muze.ActionModel;\n * ActionModel\n * // Physical actions will be registered on these canvases.\n * .for(canvas)\n * .registerPhysicalActions({\n * // Key is the name of physical action.\n * ctrlClick: (firebolt) => (targetEl, behaviours) => {\n * targetEl.on('click', function (data) {\n * const event = utils.getEvent();\n * const pos = utils.getClientPoint(event, this);\n * // Get the data point nearest to the mouse position.\n * const nearestPoint = firebolt.context.getNearestPoint(pos, {\n * data\n * });\n * // Prepare the payload\n * const payload = {\n * criteria: nearestPoint.id\n * };\n * behaviours.forEach((behaviour) => firebolt.dispatchBehaviour(behaviour, payload));\n * });\n * }\n * });\n * ```\n * @public\n *\n * @param {Object} action Names of physical actions and their definitions.\n *\n * @return {ActionModel} Instance of the action model.\n */\n registerPhysicalActions (action) {\n canvasIterator(this._registrableComponents, (firebolt) => {\n firebolt.registerPhysicalActions(action);\n }, (canvas) => {\n canvas.firebolt().registerPhysicalActions(action);\n });\n\n return this;\n }\n\n /**\n * Registers behavioural actions on the canvases. It takes definitions of the behavioural actions and registers\n * them on the canvases. Every behavioural action must inherit the {@link GenericBehaviour} class.\n *\n * To register a behavioural action\n * ```\n * // Define a new behavioural action\n * class SingleSelectBehaviour extends GenericBehaviour {\n * static formalName () {\n * return 'singleSelect';\n * }\n *\n * setSelectionSet (addSet, selectionSet) {\n * if (addSet === null) {\n * selectionSet.reset();\n * } else if (addSet.length) {\n * const existingAddSet = selectionSet.getExistingEntrySet(addSet);\n * if (existingAddSet.length){\n * selectionSet.reset();\n * } else {\n * selectionSet.add(addSet);\n * }\n * } else {\n * selectionSet.reset();\n * }\n * }\n * }\n * muze.ActionModel.registerBehaviouralActions(SingleSelectBehaviour);\n * ```\n *\n * @public\n *\n * @param {GenericBehaviour} actions Definition of behavioural actions.\n *\n * @return {ActionModel} Instance of action model.\n */\n registerBehaviouralActions (...actions) {\n canvasIterator(this._registrableComponents, (firebolt) => {\n firebolt.registerBehaviouralActions(actions);\n }, (canvas) => {\n canvas.firebolt().registerBehaviouralActions(actions);\n });\n\n return this;\n }\n\n /**\n * Registers the mapping of physical and behavioural actions. This mapping is used to establish which behavioural\n * actions should be dispatched on any triggering of physical actions.\n *\n * To map physical actions with behavioural actions,\n * ```\n * muze.ActionModel.registerPhysicalBehaviouralMap({\n * ctrlClick: {\n * behaviours: ['select'] // This array must be the formal names of the behavioural actions.\n * }\n * });\n * ```\n *\n * @public\n * @param {Object} map Contains the physical and behavioural action map.\n * ```\n * {\n * // Name of the physical action\n * click: {\n * // Target element selector. This is an optional field. If not passed, then by default takes the\n * // container element of visual unit.\n * target: '.muze-layers-area path',\n * // Behaviours which should be dispatched on triggering of the mapped physical action.\n * behaviours: ['select']\n * }\n * }\n * ```\n *\n * @return {ActionModel} Instance of action model.\n */\n registerPhysicalBehaviouralMap (map) {\n canvasIterator(this._registrableComponents, (firebolt) => {\n firebolt.registerPhysicalBehaviouralMap(map);\n }, (canvas) => {\n canvas.firebolt().registerPhysicalBehaviouralMap(map);\n });\n return this;\n }\n\n /**\n * Registers what behaviour to propagate on dispatch of a certain behavioural action. By default, when any\n * behavioural action is dispatched, then the same behavioural action gets propagated to all the other canvases.\n * This can be changed using this api.\n *\n * To register what behaviour should be propagated on dispatch of any behavioural action,\n * ```\n * ActionModel.for(canvas1, canvas2).registerPropagationBehaviourMap({\n * select: 'filter',\n * brush: 'filter'\n * });\n * ```\n *\n * @public\n * @param {Object} map Propagation behaviour map.\n *\n * @return {ActionModel} Instance of action model.\n */\n registerPropagationBehaviourMap (map) {\n canvasIterator(this._registrableComponents, (firebolt) => {\n firebolt.registerPropagationBehaviourMap(map);\n }, (canvas) => {\n canvas.firebolt().registerPropagationBehaviourMap(map);\n });\n\n return this;\n }\n\n /**\n * Registers the mapping of side effects and behavioural actions. It takes an object which contains key as the\n * name of behavioural action and the side effects which will be linked to it.\n *\n * To map side effects to select behaviour,\n * ```\n * muze.ActionModel.mapSideEffects({\n * select: ['infoBox'] // This array must be the formal names of the side effects\n * });\n * ```\n *\n * To map side effects to select behaviour, but disable all the default side effects attached with this behaviour,\n * ```\n * muze.ActionModel.mapSideEffects({\n * select: {\n * effects: ['infoBox'],\n * preventDefaultActions: true\n * }\n * });\n * @public\n * @param {Object} map Mapping of behavioural actions and side effects.\n * ```\n * {\n * select: ['infoBox']\n * }\n * ```\n * @return {ActionModel} Instance of action model.\n */\n mapSideEffects (map) {\n canvasIterator(this._registrableComponents, (firebolt) => {\n firebolt.mapSideEffects(map);\n }, (canvas) => {\n canvas.firebolt().mapSideEffects(map);\n });\n return this;\n }\n\n /**\n * Registers the side effects on the registered canvases. It takes definitions of side effects and registers them\n * on the canvases. Every side effect must inherit the base class {@link GenericSideEffect} or\n * {@link SpawnableSideEffect} or {@link SurrogateSideEffect} class.\n *\n * ```\n * // Define a custom side effect\n * class InfoBox extends SpawnableSideEffect {\n * static formalName () {\n * return 'infoBox';\n * }\n *\n * apply (selectionSet) {\n * }\n * }\n * muze.ActionModel.registerSideEffects(InfoBox);\n * ```\n * @public\n * @param {GenericSideEffect} sideEffects Definition of side effects.\n *\n * @return {ActionModel} Instance of action model.\n */\n registerSideEffects (...sideEffects) {\n canvasIterator(this._registrableComponents, (firebolt) => {\n firebolt.registerSideEffects(sideEffects);\n }, (canvas) => {\n canvas.firebolt().registerSideEffects(sideEffects);\n });\n return this;\n }\n\n /**\n * Breaks the link between behavioural actions and physical actions. It takes an array of behavioural action\n * and it's physical action.\n *\n * To dissociate behavioural actions from physical actions\n * ```\n * muze.ActionModel.dissociateBehaviour(['select', 'click'], ['highlight', 'hover']);\n * ```\n * @public\n * @param {Array} maps Array of behavioural action and physical action.\n *\n * @return {ActionModel} Instance of action model.\n */\n dissociateBehaviour (...maps) {\n canvasIterator(this._registrableComponents, (firebolt) => {\n maps.forEach(val => firebolt.dissociateBehaviour(val[0], val[1]));\n }, (canvas) => {\n maps.forEach(val => canvas.firebolt().dissociateBehaviour(val[0], val[1]));\n });\n return this;\n }\n\n /**\n * Breaks the link between side effects and behavioural actions. It takes an array of formal names of the side\n * effects and it's linked behavioural action.\n *\n * To dissociate side effects from behavioural actions\n * ```\n * muze.ActionModel.dissociateSideEffect(['crossline', 'highlight'], ['selectionBox', 'brush']);\n * ```\n * @public\n * @param {Array} maps Array of side effects and behavioural actions.\n *\n * @return {ActionModel} Instance of action model.\n */\n dissociateSideEffect (...maps) {\n canvasIterator(this._registrableComponents, (firebolt) => {\n maps.forEach(val => firebolt.dissociateSideEffect(val[0], val[1]));\n }, (canvas) => {\n maps.forEach(val => canvas.firebolt().dissociateSideEffect(val[0], val[1]));\n });\n return this;\n }\n\n /**\n * By default cross interactivity is disabled between canvases. This enables cross interaction between the canvases\n * so that any action happening in one canvas gets dispatched on other canvases as well. An optional policy can also\n * be passed in this method. The policy can be used to control on which canvases the behavioural actions and\n * side effects gets dispatched.\n *\n * To just enable cross interactivity between two canvases,\n * ```\n * ActionModel.for(canvas1, canvas2)\n * .enableCrossInteractivity();\n * ```\n *\n * To enable cross interactivity but enable any behavioural action only when it is triggered from canvas1.\n * ```\n * ActionModel.for(canvas1, canvas2)\n * .enableCrossInteractivity({\n * behaviours: {\n * // Here * stands for any behavioural action name. We can also give any name of behavioural action\n * // in place of this.\n * '*': (propPayload, context) => {\n * return propPayload.sourceCanvas === canvas1.alias();\n * }\n * }\n * });\n * ```\n *\n * To enable cross interactivity but enable tooltip effect if the action is propagated from canvas1,\n * ```\n * ActionModel.for(canvas1, canvas2)\n * .enableCrossInteractivity({\n * sideEffects: {\n * tooltip: (propPayload, context) => {\n * return propPayload.sourceCanvas === canvas1.alias();\n * }\n * }\n * });\n * ```\n * @public\n * @param {Object} policy Policy definition.\n *\n * @return {ActionModel} Instance of action model.\n */\n enableCrossInteractivity (policy = {}) {\n const registrableComponents = this._registrableComponents;\n const mergedPolicy = mergeRecursive(mergeRecursive({}, defaultPolicy(registrableComponents)), policy);\n\n registrableComponents.forEach((canvas) => {\n canvas.firebolt().crossInteractionPolicy(mergedPolicy);\n });\n\n return this;\n }\n}\n\nexport const actionModel = (() => new ActionModel())();\n","import { MUZE_PREFIX } from '../constants';\n\nexport const TITLE_CONFIG = {\n position: 'top',\n align: 'left',\n padding: 4,\n className: `${MUZE_PREFIX}-title-container`\n};\n\nexport const SUB_TITLE_CONFIG = {\n position: 'top',\n align: 'left',\n padding: 16,\n maxLines: 2,\n className: `${MUZE_PREFIX}-subtitle-container`\n};\n\nexport const GRID = 'grid';\n\nexport const CANVAS = 'canvas';\n\nexport const LAYOUT_ALIGN = {\n TOP: 'top',\n LEFT: 'left',\n RIGHT: 'right',\n BOTTOM: 'bottom'\n};\n","import { mergeRecursive, DataModel } from 'muze-utils';\nimport {\n ROWS,\n COLUMNS,\n COLOR,\n SHAPE,\n SIZE,\n DETAIL,\n LAYERS,\n TRANSFORM,\n TITLE,\n SUB_TITLE\n} from '../constants';\nimport { TITLE_CONFIG, SUB_TITLE_CONFIG } from './defaults';\n/**\n * This is the local options semantics based on which setters getters are created and reactivity is initiated.\n * This local object is only valid for Canvas.\n * Canvas merges global and local object both to the model\n *\n * Format\n * PROPERTRY_NAME: {\n * value: // default value of the property,\n * meta: {\n * typeCheck: // The setter value will be checked using this. If the value is function then the setter value\n * // is passed as args.\n * typeExpected: // The output of typecheck action will be tested against this. Truthy value will set the\n * // value to the setter\n * sanitizaiton: // Need for sanitization before type is checked\n * }\n * }\n *\n * @module LocalOptions\n */\n\nexport const localOptions = {\n [ROWS]: {\n value: null,\n meta: {\n typeCheck: 'constructor',\n typeExpected: 'Array'\n }\n },\n [COLUMNS]: {\n value: null,\n meta: {\n typeCheck: 'constructor',\n typeExpected: 'Array'\n }\n },\n data: {\n value: null,\n meta: {\n typeCheck: d => d instanceof DataModel,\n sanitization: (dm, prevDm) => {\n prevDm && prevDm.dispose();\n let sanitizedDm = dm;\n if (dm instanceof DataModel) {\n sanitizedDm = dm.project(dm.getSchema().map(d => d.name));\n }\n return sanitizedDm;\n }\n }\n },\n [COLOR]: {\n value: null,\n meta: {\n typeCheck: 'constructor',\n typeExpected: 'Object',\n sanitization: (config) => {\n if (typeof config === 'string' || !config) {\n return {\n field: config\n };\n }\n return config;\n }\n }\n },\n [SHAPE]: {\n value: null,\n meta: {\n typeCheck: 'constructor',\n typeExpected: 'Object',\n sanitization: (config) => {\n if (typeof config === 'string' || !config) {\n return {\n field: config\n };\n }\n return config;\n }\n }\n },\n [SIZE]: {\n value: null,\n meta: {\n typeCheck: 'constructor',\n typeExpected: 'Object',\n sanitization: (config) => {\n if (typeof config === 'string' || !config) {\n return {\n field: config\n };\n }\n return config;\n }\n }\n },\n [DETAIL]: {\n value: [],\n meta: {\n typeCheck: 'constructor',\n typeExpected: 'Array'\n }\n },\n\n [LAYERS]: {\n value: [],\n meta: {\n typeCheck: 'constructor',\n typeExpected: 'Array'\n }\n },\n [TRANSFORM]: {\n value: null,\n meta: {\n typeCheck: 'constructor',\n typeExpected: 'Object'\n }\n }\n};\n\nexport const canvasOptions = {\n [TITLE]: {\n value: [null, null],\n meta: {\n typeCheck: ['constructor', 'constructor'],\n typeExpected: ['Function', 'Object'],\n spreadParams: true,\n sanitization: [(title) => {\n if (typeof title === 'string' || !title) {\n const t = () => title;\n return t;\n }\n return title;\n }, (titleConfig) => {\n const defConfig = mergeRecursive({}, TITLE_CONFIG);\n return mergeRecursive(defConfig, titleConfig);\n }]\n }\n },\n [SUB_TITLE]: {\n value: [null, null],\n meta: {\n typeCheck: ['constructor', 'constructor'],\n typeExpected: ['Function', 'Object'],\n spreadParams: true,\n sanitization: [(subtitle) => {\n if (typeof subtitle === 'string' || !subtitle) {\n const sub = () => subtitle;\n return sub;\n }\n return subtitle;\n }, (subtitleConfig) => {\n const defConfig = mergeRecursive({}, SUB_TITLE_CONFIG);\n return mergeRecursive(defConfig, subtitleConfig);\n }]\n }\n }\n};\n","export default class LayoutComponent {\n constructor (name, dimensions, seed) {\n this._seed = seed;\n this._boundBox = {\n height: dimensions.height,\n width: dimensions.width,\n top: null,\n left: null\n };\n this._renderAt = null;\n this._alignWith = null;\n this._alignment = null;\n this._target = null;\n this._position = null;\n this._componentName = name;\n this._className = null;\n }\n\n getLogicalSpace () {\n throw new Error('getLogicalSpace is not defined');\n }\n\n setSpatialConfig () {\n throw new Error('setSpatialSpace is not defined');\n }\n\n name (param) {\n if (param) {\n this._componentName = param;\n }\n return this._componentName;\n }\n\n target (param) {\n if (param) {\n this._target = param;\n }\n return this._target;\n }\n\n position (param) {\n if (param) {\n this._position = param;\n }\n return this._position;\n }\n\n alignment (param) {\n if (param) {\n this._alignment = param;\n }\n return this._alignment;\n }\n\n alignWith (param) {\n if (param) {\n this._alignWith = param;\n }\n return this._alignWith;\n }\n\n renderAt (param) {\n if (param) {\n this._renderAt = param;\n }\n return this._renderAt;\n }\n\n boundBox (param) {\n if (param) {\n Object.assign(this._boundBox, param);\n }\n return this._boundBox;\n }\n\n className (param) {\n if (param) {\n this._className = param;\n }\n return this._className;\n }\n\n draw () {\n throw new Error('draw is not defined');\n }\n }\n\n","import LayoutComponent from './layoutComponent';\n\nclass DummyComponent extends LayoutComponent {\n getLogicalSpace () {\n return {\n width: this.boundBox().width,\n height: this.boundBox().height\n };\n }\n\n setSpatialConfig (conf) {\n this.boundBox({ top: conf.y, left: conf.x });\n this.newDimensions = {\n width: conf.width,\n height: conf.height\n };\n this.renderAt(conf.renderAt);\n return this;\n }\n\n draw () {\n if (!this.component) {\n throw new Error(`Component not set for ${this.componentName}`);\n }\n this.component.mount(document.getElementById(this.renderAt)); // Change the draw method to component draw\n return this;\n }\n}\n\nexport default DummyComponent;\n","export const DEFAULT_CONFIG = {\n classPrefix: 'muze',\n interaction: {\n sideEffect: 'individual'\n },\n pagination: 'scroll',\n scrollBar: {\n thickness: 10,\n speed: 2,\n vertical: {\n align: 'right'\n },\n horizontal: {\n align: 'bottom'\n }\n },\n legend: {\n position: 'right',\n color: {\n show: true,\n padding: 1,\n margin: 3,\n border: 1,\n height: 20,\n width: 20\n },\n shape: {\n show: true,\n padding: 1,\n margin: 3,\n border: 1,\n height: 20,\n width: 20\n },\n size: {\n show: true,\n padding: 1,\n margin: 3,\n border: 1,\n height: 20,\n width: 20\n }\n },\n sort: {\n disabled: false\n },\n showHeaders: false,\n minWidth: 100,\n minHeight: 100,\n facet: {\n rows: {\n minCharacters: 3\n },\n columns: {\n maxLines: 2,\n verticalAlign: 'middle',\n minCharacters: 1\n }\n },\n border: {\n style: 'solid',\n color: '#d6d6d6',\n width: 2,\n collapse: true,\n spacing: 0\n },\n autoGroupBy: {\n disabled: false\n },\n invalidValues: {}\n};\n","import { DEFAULT_CONFIG } from '../../../../muze/src/defaults';\n\nconst DEFAULT_WIDTH = 600;\nconst DEFAULT_HEIGHT = 400;\nconst DEFAULT_CLASS_NAME = `${DEFAULT_CONFIG.classPrefix}-layout-container-component`;\nconst NODE_PREFIX = `${DEFAULT_CONFIG.classPrefix}-layout-container`;\n\nexport {\n DEFAULT_WIDTH,\n DEFAULT_HEIGHT,\n DEFAULT_CLASS_NAME,\n NODE_PREFIX\n};\n","export default class DefinitionModel {\n constructor (config) {\n this._host = config.host || null;\n this._cut = config.cut || null;\n this._ratioWeight = config.ratioWeight === 0 ? 0 : config.ratioWeight || 1;\n this._preferred = config.preferred || false;\n this._lanes = config.lanes || [];\n this._remainingHeight = 0;\n this._remainingWidth = 0;\n }\n\n host (host) {\n if (host) {\n this._host = host;\n }\n return this._host;\n }\n\n preferred (preferred) {\n if (preferred) {\n this._preferred = preferred;\n }\n return this._preferred;\n }\n\n cut (cut) {\n if (cut) {\n this._cut = cut;\n }\n return this._cut;\n }\n\n ratioWeight (ratioWeight) {\n if (ratioWeight) {\n this._ratioWeight = ratioWeight;\n }\n return this._ratioWeight;\n }\n\n lanes (lanes) {\n if (lanes) {\n this._lanes = lanes;\n }\n return this._lanes;\n }\n\n remainingHeight (remainingHeight) {\n if (remainingHeight) {\n this._remainingHeight = remainingHeight;\n }\n return this._remainingHeight;\n }\n\n remainingWidth (remainingWidth) {\n if (remainingWidth) {\n this._remainingWidth = remainingWidth;\n }\n return this._remainingWidth;\n }\n}\n","import { NODE_PREFIX } from '../../constants/defaults';\nimport DefinitionModel from '../definition-manager/definitionModel';\nimport DummyComponent from '../../layout-component/dummy-component';\n/**\n * Compares two strings in lowercase\n *\n * @export\n * @param {string} value the value to be compared\n * @param {string} compareTo whom the value would be compared\n * @return {boolean} true if values are equal\n */\nexport function isEqual (value, compareTo) {\n if (typeof value !== 'string' || typeof compareTo !== 'string') {\n throw new TypeError('value and compareTo must be string');\n }\n return value.toLowerCase() === compareTo.toLowerCase();\n}\n\nexport const getNodeId = (() => {\n let _uid = 0;\n return () => `${NODE_PREFIX}-${++_uid}`;\n})();\n\nexport function yExtraSpace (node) {\n let smallestHeight = 0;\n if (node.getCutType() === 'v') {\n smallestHeight = smallestExtraHeightHorizontally(node); // eslint-disable-line no-use-before-define\n } else if (node.getCutType() === 'h') {\n node.children().forEach((child) => {\n smallestHeight += yExtraSpace(child);\n });\n } else if (node.model().host() && node.model().host().getLogicalSpace) {\n const containerHeight = node.boundBox().height;\n const hostHeight = node.model().host().getLogicalSpace().height;\n\n smallestHeight = containerHeight - hostHeight;\n if (smallestHeight < 0) {\n smallestHeight = 0;\n }\n } else {\n smallestHeight = 0;\n }\n return smallestHeight;\n}\n\nexport function smallestExtraHeightHorizontally (node) {\n let smallestHeight = Number.MAX_SAFE_INTEGER;\n node.children().forEach((child) => {\n const h = yExtraSpace(child);\n if (h < smallestHeight) {\n smallestHeight = h;\n }\n });\n return smallestHeight;\n}\n\nexport function xExtraSpace (node) {\n let smallestWidth = 0;\n if (node.getCutType() === 'h') {\n smallestWidth = smallestExtraWidthVertically(node); // eslint-disable-line no-use-before-define\n } else if (node.getCutType() === 'v') {\n node.children().forEach((child) => {\n smallestWidth += xExtraSpace(child);\n });\n } else if (node.model().host() && node.model().host().getLogicalSpace) {\n const containerWidth = node.boundBox().width;\n const hostWidth = node.model().host().getLogicalSpace().width;\n smallestWidth = containerWidth - hostWidth;\n if (smallestWidth < 0) {\n smallestWidth = 0;\n }\n } else {\n smallestWidth = 0;\n }\n return smallestWidth;\n}\n\nexport function smallestExtraWidthVertically (node) {\n let smallestWidth = Number.MAX_SAFE_INTEGER;\n node.children().forEach((child) => {\n const w = xExtraSpace(child);\n if (w < smallestWidth) {\n smallestWidth = w;\n }\n });\n return smallestWidth;\n}\n\nexport function determineBoundBox (bb, i, arr, instance) {\n if (i) {\n // if not first sibling, take boundbox from previous sibling\n const lastSibling = arr[i - 1];\n const { top: _top, left: _left, height: _height, width: _width } = lastSibling.boundBox();\n return {\n width: bb.width,\n height: bb.height,\n\n top: instance.parentCut() === 'h'\n ? _top + _height : _top,\n\n left: instance.parentCut() === 'h'\n ? _left : _left + _width\n };\n }\n // if first sibling, take boundbox from parent\n const { top: _top, left: _left } = instance.parent().boundBox();\n return {\n width: bb.width,\n height: bb.height,\n top: _top,\n left: _left\n };\n}\n\n// prepares the targetComponent Map for target Mapping ie. where a component should lie\nexport function prepareTargetComponentMap (context) {\n context.targetComponentMap(new Map());\n context.componentMap().forEach((value) => {\n if (context.targetComponentMap().has(value.target())) {\n context.targetComponentMap().get(value.target()).push(value);\n } else {\n const temp = [];\n temp.push(value);\n context.targetComponentMap().set(value.target(), temp);\n }\n });\n}\n\nexport function getComponent (canvasComponent, componentName) {\n const comp = canvasComponent.find(component => component.name() === componentName);\n return (comp && comp !== -1) ? comp : null;\n}\nexport function createPlaceHolderComponent (height, width, position) {\n const comp = new DummyComponent(0, { height, width });\n comp.name('placeHolder');\n comp.position(position);\n return comp;\n}\n\nexport function placeComponent (definitionModel, component, isPreferred = false, isGridComponent = false) {\n let cut = '';\n let componentRatioWidth = 1;\n let leftOvercomponentRationWidth = 1;\n let leftHeight = 0;\n let leftWidth = 0;\n\n if (!component) {\n return { first: definitionModel, second: definitionModel };\n }\n\n const { height: componentHeight, width: componentWidth } = component.getLogicalSpace();\n const position = component.position();\n if (position === 'top' || position === 'bottom') {\n cut = 'h';\n componentRatioWidth = componentHeight / definitionModel.remainingHeight();\n leftHeight = definitionModel.remainingHeight() - componentHeight;\n leftWidth = definitionModel.remainingWidth();\n } else {\n cut = 'v';\n componentRatioWidth = componentWidth / definitionModel.remainingWidth();\n leftWidth = definitionModel.remainingWidth() - componentWidth;\n leftHeight = definitionModel.remainingHeight();\n }\n leftOvercomponentRationWidth = 1 - componentRatioWidth;\n\n// update parentModel\n definitionModel.cut(cut);\n const firstLaneConfig = {\n host: component.name(),\n cut: null,\n ratioWeight: componentRatioWidth,\n preferred: isGridComponent ? false : isPreferred,\n lanes: []\n };\n const firstLane = new DefinitionModel(firstLaneConfig);\n firstLane.remainingHeight(componentHeight);\n firstLane.remainingWidth(componentWidth);\n\n const secondLaneConfig = {\n host: null,\n cut: null,\n ratioWeight: leftOvercomponentRationWidth,\n preferred: isGridComponent ? false : !isPreferred,\n lanes: []\n };\n const secondLane = new DefinitionModel(secondLaneConfig);\n secondLane.remainingHeight(leftHeight);\n secondLane.remainingWidth(leftWidth);\n if (isPreferred) {\n definitionModel.lanes([firstLane]);\n } else if (position === 'top' || position === 'left') {\n definitionModel.lanes([firstLane, secondLane]);\n } else {\n definitionModel.lanes([secondLane, firstLane]);\n }\n return { first: firstLane, second: secondLane };\n}\n\nexport function placeGridComponent (definitionModel, gridComponents) {\n let tempDefModel = definitionModel;\n const rows = gridComponents.length;\n const column = rows ? gridComponents[0].length : 0;\n const height = gridComponents.reduce((acc, val) => (acc + val[0].getLogicalSpace().height), 0);\n\n for (let i = 0; i < column; i++) {\n const iscolumnPreffered = i === column - 1;\n const columnPlaceHolderComponent = createPlaceHolderComponent(height,\n gridComponents[0][i].getLogicalSpace().width, 'left');\n const { first, second } = placeComponent(tempDefModel, columnPlaceHolderComponent, iscolumnPreffered);\n tempDefModel = first;\n for (let j = 0; j < rows; j++) {\n const rowpreffred = j === (rows - 1);\n tempDefModel = placeComponent(tempDefModel, gridComponents[j][i], rowpreffred, true).second;\n }\n tempDefModel = second;\n }\n return tempDefModel;\n}\n\nexport function negotiateDimension (node) {\n let preferred;\n let cumultiveExtraSpaceAmt = 0;\n let alteredDim;\n let nonAlteredDim;\n\n const childrenLength = node.children().length;\n\n for (let index = 0; index < childrenLength; index++) {\n let fn;\n let extraSpaceAmt;\n const child = node.children()[index];\n\n if (child.parentCut() === 'h') {\n fn = yExtraSpace;\n alteredDim = 'height';\n nonAlteredDim = 'width';\n } else {\n fn = xExtraSpace;\n alteredDim = 'width';\n nonAlteredDim = 'height';\n }\n // if vertical then get extra height from other node and push it to the preferred node.\n // for horizontal cut the same thing is to be done with width\n if (child.isPreferred()) {\n // push extra space in sink. Execute it when all non preferred space are computed.\n preferred = child;\n\n continue; // eslint-disable-line no-continue\n }\n // reduce own height and save it in a var\n cumultiveExtraSpaceAmt += (extraSpaceAmt = fn(child));\n child.boundBox()[alteredDim] -= extraSpaceAmt;\n // update nonaltered dim from parent for any change which happened during negotiation\n child.boundBox()[nonAlteredDim] = child.parent().boundBox()[nonAlteredDim];\n\n negotiateDimension(child);\n }\n\n if (preferred) {\n preferred.boundBox()[alteredDim] += cumultiveExtraSpaceAmt;\n preferred.boundBox()[nonAlteredDim] = preferred.parent().boundBox()[nonAlteredDim];\n negotiateDimension(preferred);\n }\n}\n\nexport function computePosition (node) {\n node.children().forEach((child, i, children) => {\n const boundBox = determineBoundBox(child.boundBox(), i, children, child);\n child.boundBox(boundBox);\n computePosition(child);\n });\n}\n\nexport function allocateBoundingBox (node) {\n const totalWeight = node.children()\n .map(child => child.model().ratioWeight())\n .reduce((carry, val) => carry + val, 0);\n\n node.children().forEach((child, i, children) => {\n const lastSibling = children[i - 1];\n const ratio = child.model().ratioWeight() / totalWeight;\n\n if (child.parentCut() === 'h') {\n child.boundBox({\n top: i ? lastSibling.boundBox().top + lastSibling.boundBox().height : 0,\n left: child.parent().boundBox().left,\n height: child.parent().boundBox().height * ratio,\n width: child.parent().boundBox().width\n });\n } else {\n child.boundBox({\n top: child.parent().boundBox().top,\n left: i ? lastSibling.boundBox().left + lastSibling.boundBox().width : 0,\n height: child.parent().boundBox().height,\n width: child.parent().boundBox().width * ratio\n });\n }\n allocateBoundingBox(child);\n });\n}\n\n","import { getNodeId } from '../helper';\nimport { LayoutComponent } from '../../layout-component';\n\nclass Node {\n constructor (data) {\n this._model = data;\n this._parent = null;\n this._children = [];\n this._parentCut = null;\n this._boundBox = {\n top: null,\n left: null,\n height: null,\n width: null\n };\n\n this._id = this._model.host() instanceof LayoutComponent && this._model.host().renderAt() ?\n this._model.host().renderAt() :\n getNodeId();\n }\n\n addChildren (entries) {\n this._children.push(...entries);\n entries.forEach((e) => { e.parent(this); });\n }\n\n isRoot () {\n return this._parent === null;\n }\n\n isLeaf () {\n return !this._children.length;\n }\n\n getCutType () {\n return this._model.cut();\n }\n\n isPreferred () {\n return !!this._model.preferred();\n }\n\n children (children) {\n if (children) {\n this._children = children;\n }\n return this._children;\n }\n\n parent (parent) {\n if (parent) {\n this._parent = parent;\n }\n return this._parent;\n }\n\n parentCut (parentCut) {\n if (parentCut) {\n this._parentCut = parentCut;\n }\n return this._parentCut;\n }\n\n id (id) {\n if (id) {\n this._id = id;\n }\n return this._id;\n }\n\n model (model) {\n if (model) {\n this._model = model;\n }\n return this._model;\n }\n\n boundBox (bound) {\n if (bound) {\n this._boundBox = {\n top: bound.top,\n left: bound.left,\n height: bound.height,\n width: bound.width\n };\n }\n return this._boundBox;\n }\n /**\n * function to search a node and update it with the config provided.\n * @param {Object} nodeconfig\n */\n updateNode (nodeconfig) {\n if (this._id === nodeconfig._id) {\n this._model.cut(nodeconfig.cut);\n this._model.ratioWeight(nodeconfig.ratioWeight);\n } else {\n this._children.forEach((node) => {\n if (node._id === nodeconfig._id) {\n node.model.cut(nodeconfig.cut);\n node.model.ratioWeight(nodeconfig.ratioWeight);\n return;\n }\n this.searchNode(node, nodeconfig);\n });\n }\n }\n\n // Recursive function to search a node\n searchNode (node, nodeconfig) {\n node.children().forEach((childNode) => {\n if (childNode.id() === nodeconfig._id) {\n childNode.model().cut(nodeconfig.cut);\n childNode.model().ratioWeight(nodeconfig.ratioWeight);\n } else {\n this.searchNode(childNode, nodeconfig);\n }\n });\n }\n\n /**\n * function to delete a node from tree Structure.\n * @param {String} nodeId - node Id of the Node\n */\n delete (nodeId) {\n this._children.forEach((node) => {\n if (node.id() === nodeId) {\n const index = this._children.indexOf(node);\n this._model.lanes().splice(index, 1);\n }\n this.deleteSearchNode(node, nodeId);\n });\n }\n\n // Recursive function to search a node\n deleteSearchNode (node, nodeId) {\n node.children().forEach((childNode) => {\n if (childNode.id() === nodeId) {\n const index = node.children().indexOf(childNode);\n node.model().lanes().splice(index, 1);\n } else {\n this.deleteSearchNode(childNode, nodeId);\n }\n });\n }\n}\n\nexport default Node;\n","import Node from '../tree';\nimport {\n allocateBoundingBox,\n negotiateDimension,\n computePosition\n} from '../helper';\n\nexport default class LayoutModel {\n constructor (measurements, config) {\n this._measurements = measurements;\n this._config = config;\n this._root = this.createTree(this._config, null);\n this.setBoundBox();\n }\n\n createTree (config, parent) {\n const node = new Node(config);\n if (parent) {\n node.parentCut(parent.getCutType());\n parent.addChildren([node]);\n } else {\n this._root = node;\n }\n for (const lane of config.lanes()) {\n this.createTree(lane, node);\n }\n\n return this._root;\n }\n\n setBoundBox () {\n this._root.boundBox({\n top: 0,\n left: 0,\n width: this._measurements.width,\n height: this._measurements.height\n });\n allocateBoundingBox(this._root);\n }\n\n setHostPosition (node) {\n node.children().forEach((child) => {\n LayoutModel.setHostSpatialConfig(child);\n this.setHostPosition(child);\n });\n }\n\n static setHostSpatialConfig (node) {\n const bb = node.boundBox();\n const host = node.model().host();\n if (host && host.setSpatialConfig) {\n const conf = {\n x: bb.left,\n y: bb.top,\n width: bb.width,\n height: bb.height,\n renderAt: node.id()\n };\n host.setSpatialConfig(conf);\n }\n }\n\n negotiate () {\n negotiateDimension(this._root);\n computePosition(this._root);\n return this;\n }\n\n broadcast () {\n this.setHostPosition(this._root);\n return this;\n }\n\n tree () {\n return this._root;\n }\n}\n","/* eslint no-undef: \"off\" */\n/* eslint default-case: \"off\" */\nexport class Utils {\n static isDOMElement (element) {\n return element instanceof Element;\n }\n\n static getID (element) {\n return element.id;\n }\n\n static getElement (id) {\n return document.getElementById(id);\n }\n\n static findContainer (data) {\n return data.filter(coordinate => coordinate.parent == null)[0];\n }\n /**\n * static method to remove the div\n * @param {} divId - div ID to be removed.\n */\n static removeDiv (divId) {\n if (document.getElementById(divId) !== null) { document.getElementById(divId).remove(); }\n }\n}\n","import { DEFAULT_CLASS_NAME } from '../constants/defaults';\nimport { LayoutComponent } from '../layout-component';\n\nexport default class DataPoint {\n constructor (node) {\n this._node = node;\n this._className = node.model().host() instanceof LayoutComponent ?\n node.model().host().className() : DEFAULT_CLASS_NAME;\n }\n\n node () {\n return this._node;\n }\n\n hasHost () {\n return this._node.model().host() instanceof LayoutComponent;\n }\n\n className () {\n return this._className || DEFAULT_CLASS_NAME;\n }\n}\n","import { getnodePoints } from './helper';\n\nexport class DataParser {\n constructor (data) {\n this._data = data;\n }\n\n defaultDataPointLogic () {\n const nodepoints = [];\n getnodePoints(this._data, nodepoints);\n return nodepoints;\n }\n\n}\n","import DataPoint from './data-point';\n\nexport const getnodePoints = (node, nodepoints) => {\n const datapoint = new DataPoint(node);\n nodepoints.push(datapoint);\n node.children().forEach((child) => {\n getnodePoints(child, nodepoints);\n });\n};\n","import { DataParser } from './data-parser';\n\nexport class HTMLDataAdapter extends DataParser {\n getCoordinates () {\n return super.defaultDataPointLogic();\n }\n}\n","export class Renderer {\n\n initRenderer (node, tree) {\n node.__logicalTree = tree;\n }\n}\n","import { HTMLDataAdapter } from '../data-adapters/html-data';\nimport { Utils } from '../utils';\nimport { Renderer } from './renderer';\n\nexport class HTMLRenderer extends Renderer {\n constructor (data) {\n super();\n this._data = data;\n this._coordinates = new HTMLDataAdapter(this._data).getCoordinates();\n }\n\n createhtml (mount, className) {\n const mainDiv = mount;\n super.initRenderer(mainDiv, this._data); // Initialise node with layout id\n this.parentDiv = this.createAndCustomiseParent(className);\n this._coordinates.forEach((node) => {\n if (node.hasHost()) {\n const host = node.node();\n this.parentDiv.appendChild(this.createAndPositionDiv({ ...host.boundBox(),\n id: host.id(),\n className: node.className() }));\n }\n });\n mainDiv.appendChild(this.parentDiv);\n }\n\n createAndPositionDiv (config) {\n const { top, left, height, width, className, id } = config;\n const existingDiv = document.getElementById(id);\n const div = existingDiv || document.createElement('div');\n div.style.position = 'absolute';\n div.style.left = `${left}px`;\n div.style.top = `${top}px`;\n div.style.height = `${height}px`;\n div.style.width = `${width}px`;\n div.id = id;\n div.className = className;\n return div;\n }\n\n createAndCustomiseParent (className) {\n const container = Utils.findContainer(this._coordinates);\n const host = container.node();\n const parentDiv = this.createAndPositionDiv({ ...host.boundBox(),\n id: host.id(),\n className: container.className() });\n parentDiv.className = className;\n parentDiv.style.position = 'relative';\n return parentDiv;\n }\n\n coordinates () {\n return this._coordinates;\n }\n}\n","import { selectElement } from 'muze-utils';\nimport { HTMLRenderer } from '../renderers/html-renderer';\nimport { LayoutComponent } from '../layout-component';\n\nexport const getChildNode = (context, config) =>\n context.renderer().createAndPositionDiv(config);\n\nexport const findNode = (context, nodeID) =>\n context.renderer().coordinates().find(point => point.node().id() === nodeID);\n\nexport const renderHTML = (context) => {\n context.renderer(new HTMLRenderer(context.data()));\n context.renderer().createhtml(context.mount(), context.className());\n};\n\nexport const drawLayout = (context) => {\n switch (context.renderer()) {\n case 'html' :\n renderHTML(context);\n break;\n default:\n renderHTML(context);\n }\n};\n\nexport const drawComponent = (componentData) => {\n componentData.children().forEach((node) => {\n const host = node.model().host();\n if (host instanceof LayoutComponent) {\n host.draw();\n }\n drawComponent(node);\n });\n};\n\nexport const removeElement = (elemID) => {\n if (elemID) {\n selectElement(`#${elemID}`).remove();\n }\n};\n\nexport const resolveAligment = (context, componentData) => {\n componentData.children().forEach((component) => {\n const host = component.model().host();\n if (host instanceof LayoutComponent && host.alignWith()) {\n let newNodeConfig = {};\n const point = findNode(context, component.id()).node();\n const node = point.boundBox();\n const refNode = findNode(context, context.componentMap().get(host.alignWith()).renderAt())\n .node()\n .boundBox();\n switch (host.alignment()) {\n case 'left':\n newNodeConfig = {\n top: node.top,\n left: refNode.left,\n height: node.height,\n width: Math.abs(node.width - Math.abs(refNode.left - node.left))\n };\n break;\n\n case 'right':\n newNodeConfig = {\n top: node.top,\n left: node.left,\n height: node.height,\n width: Math.abs(node.width - Math.abs(node.left + node.width - (refNode.left + refNode.width)))\n };\n break;\n\n case 'top':\n newNodeConfig = {\n top: refNode.top,\n left: node.left,\n height: Math.abs(node.height - Math.abs(refNode.top - node.top)),\n width: node.width\n };\n break;\n\n case 'bottom':\n newNodeConfig = {\n top: node.top,\n left: node.left,\n height: Math.abs(node.top - refNode.top + refNode.height),\n width: node.width\n };\n break;\n\n case 'h-center':\n newNodeConfig = {\n top: node.top,\n left: refNode.left,\n height: node.height,\n width: refNode.width\n };\n break;\n\n case 'v-center':\n newNodeConfig = {\n top: refNode.top,\n left: node.left,\n height: refNode.top,\n width: node.width\n };\n break;\n default:\n break;\n }\n // check if model in parent component\n Object.assign(newNodeConfig, { id: point.id(), className: host.className() });\n context.renderer().createAndPositionDiv(newNodeConfig);\n context.componentMap().get(host.name()).setSpatialConfig({\n x: newNodeConfig.left,\n y: newNodeConfig.top,\n height: newNodeConfig.height,\n width: newNodeConfig.width\n\n });\n }\n resolveAligment(context, component);\n });\n};\n","import { Utils } from '../utils';\nimport { drawLayout, resolveAligment, drawComponent } from './helper';\n\nexport class DrawingManager {\n constructor (data, renderer, container) {\n this._data = data.tree;\n this._componentMap = data.componentMap;\n this._layoutClassName = data.layoutClassName;\n this._renderer = renderer;\n this._mount = Utils.isDOMElement(container) ? container : Utils.getElement(container);\n }\n\n draw () {\n drawLayout(this);\n resolveAligment(this, this._data);\n drawComponent(this._data);\n return this;\n }\n\n data (data) {\n if (data) {\n this._data = data;\n }\n return this._data;\n }\n\n componentMap (param) {\n if (param) {\n this._componentMap = param;\n }\n return this._componentMap;\n }\n\n className (param) {\n if (param) {\n this._layoutClassName = param;\n }\n return this._layoutClassName;\n }\n\n renderer (param) {\n if (param) {\n this._renderer = param;\n }\n return this._renderer;\n }\n\n mount (param) {\n if (param) {\n this._mount = param;\n }\n return this._mount;\n }\n}\n","import DefinitionModel from './definitionModel';\nimport { prepareTargetComponentMap, getComponent, placeComponent, placeGridComponent } from '../helper';\n\nexport default class DefinitionManager {\n constructor (componentMap, sequence, totalHeight, totalWidth) {\n this._componentMap = componentMap;\n this._prioritySequence = sequence;\n this._totalHeight = totalHeight;\n this._totalWidth = totalWidth;\n this._targetComponentMap = null;\n }\n\n // create the config model\n generateConfigModel () {\n prepareTargetComponentMap(this);\n const canvasComponent = this._targetComponentMap.get('canvas');\n const definitionModel = new DefinitionModel({});\n let tempDefModel = definitionModel;\n definitionModel.remainingHeight(this._totalHeight);\n definitionModel.remainingWidth(this._totalWidth);\n\n let componentRef = null;\n\n this._prioritySequence.forEach((name) => {\n componentRef = getComponent(canvasComponent, name);\n if (name !== 'grid') {\n tempDefModel = placeComponent(tempDefModel, componentRef).second;\n } else {\n tempDefModel = placeGridComponent(tempDefModel, componentRef.component);\n }\n });\n return definitionModel;\n }\n\n componentMap (param) {\n if (param) {\n this._componentMap = param;\n }\n return this._componentMap;\n }\n\n targetComponentMap (param) {\n if (param) {\n this._targetComponentMap = param;\n }\n return this._targetComponentMap;\n }\n}\n","import { sanitizeConfig } from './helper';\n\nexport class LayoutDef {\n constructor () {\n this._componentMap = new Map();\n this._layoutDefinition = null;\n }\n\n addComponent (component) {\n this._componentMap.set(component.name(), component);\n }\n\n layoutDefinition (def) {\n if (def) {\n this._layoutDefinition = def;\n }\n return this._layoutDefinition;\n }\n\n addMultipleComponent (componentArray) {\n componentArray.forEach((comp) => {\n this.addComponent(comp);\n });\n }\n\n sanitizedDefinition () {\n sanitizeConfig(this, this._layoutDefinition);\n return this.layoutDefinition();\n }\n\n componentMap () {\n return this._componentMap;\n }\n resetComponentMap () {\n this._componentMap.clear();\n }\n}\n","import DefinitionManager from '../layout-definition/definition-manager';\n\nexport function sanitizeConfig (context, hostObj) {\n const hostID = hostObj.host();\n if (hostObj.lanes() && hostObj.lanes().length) {\n hostObj.lanes().forEach(childHost => sanitizeConfig(context, childHost));\n }\n if (hostID != null && typeof (hostID) === 'string') {\n if (context.componentMap().get(hostID) !== undefined) {\n hostObj.host(context.componentMap().get(hostID));\n }\n }\n}\n\nexport function calLayOutDef (context) {\n const { height, width } = context.dimension();\n const defManager = new DefinitionManager(context.layoutDef().componentMap(),\n context.prioritySequence(),\n height,\n width);\n const genLayoutdef = defManager.generateConfigModel();\n return genLayoutdef;\n}\n","import {\n LayoutModel\n} from '../layout-definition';\n\nimport {\n DEFAULT_WIDTH,\n DEFAULT_HEIGHT\n} from '../constants/defaults';\n\nimport { DrawingManager } from '../drawing-manager';\nimport { removeElement } from '../drawing-manager/helper';\nimport { Utils } from '../utils';\nimport { LayoutDef } from './layout-def';\nimport { calLayOutDef } from './helper';\n\nexport default class LayoutManager {\n constructor (conf) {\n this._renderAt = conf.renderAt;\n this._layoutClassName = conf.className;\n this._dimension = {\n width: conf.width || DEFAULT_WIDTH,\n height: conf.height || DEFAULT_HEIGHT\n };\n\n this._skeletonType = conf.skeletonType || 'html';\n this._layoutDefinition = null;\n this._layoutDef = new LayoutDef();\n this._drawingManager = null;\n this._prioritySequence = [];\n this.tree = null;\n this._rootNodeID = null;\n }\n\n layoutDef (param) {\n if (param) {\n this._layoutDef = param;\n }\n return this._layoutDef;\n }\n\n prioritySequence (param) {\n if (param) {\n this._prioritySequence = param;\n }\n return this._prioritySequence;\n }\n\n dimension (param) {\n if (param) {\n Object.assign(this._dimension, param);\n }\n return this._dimension;\n }\n\n addComponent (component) {\n this._layoutDef.addComponent(component);\n }\n\n addMultipleComponent (componentArray) {\n this._layoutDef.addMultipleComponent(componentArray);\n }\n\n resetNode (node) {\n if (this.con) {\n this.con.resetNode(node);\n }\n }\n\n /**\n * function to update the node and rerender the layout.\n * @param {} config - node configuration to change.\n */\n updateNode (config) {\n this.tree.updateNode(config);\n this._layoutDefinition = this.tree.model;\n this.compute();\n }\n\n compute () {\n //----\n if (Utils.isDOMElement(this._renderAt)) {\n this._renderAt._layout = this;\n } else {\n document.getElementById(this._renderAt)._layout = this;\n }\n //-----\n this._layoutDefinition = calLayOutDef(this);\n this._layoutDef.layoutDefinition(this._layoutDefinition);\n this._layoutDefinition = this._layoutDef.sanitizedDefinition();\n this._layout = new LayoutModel({\n width: this._dimension.width,\n height: this._dimension.height\n },\n this._layoutDefinition);\n this.tree = this._layout.negotiate().tree();\n this._layout.broadcast();\n this._drawingManager = new DrawingManager({\n tree: this.tree,\n componentMap: this._layoutDef.componentMap(),\n layoutClassName: this._layoutClassName\n }, this._skeletonType, this._renderAt);\n\n if (this._rootNodeID) {\n this.tree.id(this._rootNodeID);\n } else {\n this._rootNodeID = this.tree.id();\n }\n // this will draw all the components by calling their draw method\n this._drawingManager.draw();\n }\n\n getRootNodeId () {\n return this._rootNodeID;\n }\n\n /**\n * This function takes the LayoutComponents and Register them in component store\n * @param {Array} layoutComponents\n */\n registerComponents (layoutComponents) {\n this._prioritySequence.length = 0;\n this._layoutDef.resetComponentMap();\n layoutComponents.forEach((container) => {\n if (container) {\n this._prioritySequence.push(container.name());\n this.addComponent(container);\n if (container.name() === 'grid') {\n container.component.forEach((componentArr) => {\n componentArr.forEach((compo) => {\n this.addComponent(compo);\n });\n });\n }\n }\n });\n return this;\n }\n\n getComponent (componentName) {\n return this._layoutDef.componentMap().get(componentName);\n }\n\n removeComponent (id) {\n return removeElement(id);\n }\n\n renderAt (mount) {\n if (mount) {\n this._renderAt = mount;\n }\n return this._renderAt;\n }\n}\n","import { isEqual, STATE_NAMESPACES, selectElement, getValueParser } from 'muze-utils';\nimport { VisualGroup } from '@chartshq/visual-group';\nimport { ROWS, COLUMNS, COLOR, SHAPE, SIZE, DETAIL, DATA, CONFIG }\n from '../constants';\nimport { canvasOptions } from './local-options';\nimport { LayoutManager } from '../../../layout/src/tree-layout';\n\n/**\n * Instantiate high level components. Canvas knows what all high level component it has.\n * @nice-to-have dynamic high level components.\n * - Is it even required ?\n * - Reactive to source (canvas) streaming ?\n * @param {*} context Canvas instance\n * @return {Object.} Arrays of Title, visualGroup, Legend\n */\nexport const initCanvas = (context) => {\n const reg = context._registry.components;\n\n return [new reg.VisualGroup(context._registry, Object.assign({\n throwback: context._throwback\n }, context.dependencies()))];\n};\n\nexport const fixScrollBarConfig = (config) => {\n config.scrollBar.thickness = Math.min(50, Math.max(10, config.scrollBar.thickness));\n return config;\n};\n\nexport const setLayoutInfForUnits = (context) => {\n const layoutManager = context._layoutManager;\n const boundBox = layoutManager.getComponent('grid').getBoundBox();\n const valueMatrix = context.composition().visualGroup.matrixInstance().value;\n const parentContainer = selectElement(`#${layoutManager.getRootNodeId()}`).node();\n valueMatrix.each((cell) => {\n cell.valueOf().parentContainerInf({\n el: parentContainer,\n dimensions: boundBox\n });\n });\n};\n\n/**\n *\n *\n * @memberof Canvas\n */\nexport const dispatchProps = (context) => {\n const lifeCycleManager = context.dependencies().lifeCycleManager;\n lifeCycleManager.notify({ client: context, action: 'beforeupdate' });\n const visualGroup = context.composition().visualGroup;\n\n const allOptions = context._allOptions;\n for (const key in allOptions) {\n const value = context[key]();\n if (value !== null) {\n visualGroup[key] && visualGroup[key](value);\n }\n }\n const { invalidValues } = context.config();\n\n visualGroup.valueParser(getValueParser(invalidValues));\n visualGroup.createMatrices();\n context._cachedProps = {};\n lifeCycleManager.notify({ client: context, action: 'initialized' });\n lifeCycleManager.notify({ client: context, action: 'updated' });\n};\n\nconst equalityChecker = (props, params) => {\n let checker = () => false;\n return !props.every((option, i) => {\n switch (option) {\n case ROWS:\n case COLUMNS:\n case DETAIL:\n checker = isEqual('Array');\n break;\n\n case SHAPE:\n case SIZE:\n case COLOR:\n case DATA:\n case CONFIG:\n checker = isEqual('Object');\n break;\n default:\n checker = () => true;\n break;\n }\n const oldVal = params[i][0];\n const newVal = params[i][1];\n\n return checker(oldVal, newVal);\n });\n};\n\nconst updateChecker = (props, params) => props.every((option, i) => {\n const val = params[i][1];\n switch (option) {\n case ROWS:\n case COLUMNS:\n return val !== null;\n\n case DATA:\n return val && !val.isEmpty();\n\n default:\n return true;\n\n }\n});\n\nexport const notifyAnimationEnd = (context) => {\n const centerMatrix = context.layout().viewInfo().viewMatricesInfo.matrices.center[1] || [];\n const promises = [];\n centerMatrix.forEach((cellArr) => {\n cellArr.forEach((cell) => {\n promises.push(cell.valueOf().done());\n });\n });\n const lifeCycleManager = context.lifeCycle();\n if (promises.length) {\n Promise.all(promises).then(() => {\n // Update life cycle\n lifeCycleManager.notify({ client: context, action: 'drawn' });\n const animDonePromises = [];\n\n centerMatrix.forEach((cellArr) => {\n cellArr.forEach((cell) => {\n cell.valueOf().layers().forEach((layer) => {\n animDonePromises.push(layer.animationDone());\n });\n });\n });\n\n [context.xAxes(), context.yAxes()].forEach((axisArr) => {\n axisArr = axisArr || [];\n axisArr.forEach((axes) => {\n axes.forEach((axisInst) => {\n animDonePromises.push(axisInst.animationDone());\n });\n });\n });\n\n Promise.all(animDonePromises).then(() => {\n lifeCycleManager.notify({ client: context, action: 'animationend' });\n });\n });\n } else {\n lifeCycleManager.notify({ client: context, action: 'animationend' });\n }\n};\n\nexport const setupChangeListener = (context) => {\n const store = context._store;\n\n const allOptions = Object.keys(context._allOptions);\n const props = [...allOptions, ...Object.keys(canvasOptions)];\n const nameSpaceProps = [...allOptions, ...Object.keys(canvasOptions)].map(prop =>\n `${STATE_NAMESPACES.CANVAS_LOCAL_NAMESPACE}.${prop}`);\n store.registerChangeListener(nameSpaceProps, (...params) => {\n let updateProps = equalityChecker(props, params);\n updateProps = updateChecker(props, params);\n\n // inform attached board to rerender\n if (updateProps && context.mount()) {\n dispatchProps(context);\n context.render();\n }\n notifyAnimationEnd(context);\n }, true);\n};\n\nexport const applyInteractionPolicy = (firebolt) => {\n const canvas = firebolt.context;\n const visualGroup = canvas.composition().visualGroup;\n if (visualGroup) {\n const valueMatrix = visualGroup.matrixInstance().value;\n const interactionPolicy = firebolt._interactionPolicy;\n interactionPolicy(valueMatrix, firebolt);\n const crossInteractionPolicy = firebolt._crossInteractionPolicy;\n const behaviours = crossInteractionPolicy.behaviours;\n const sideEffects = crossInteractionPolicy.sideEffects;\n valueMatrix.each((cell) => {\n const unitFireBolt = cell.valueOf().firebolt();\n for (const key in behaviours) {\n unitFireBolt.changeBehaviourStateOnPropagation(key, behaviours[key]);\n }\n for (const key in sideEffects) {\n unitFireBolt.changeSideEffectStateOnPropagation(key, sideEffects[key]);\n }\n });\n }\n};\n\n/**\n * Sets the rotation for all x axes if any axis has the rotation config set in the\n * entire view\n *\n * @param {Array} columns Column cells that contain the axes cells\n */\nexport const setLabelRotationForAxes = (context) => {\n let rotation = 0;\n\n const xAxes = context.xAxes() || [];\n\n (() => {\n for (let i = 0; i < xAxes.length; i++) {\n for (let j = 0; j < xAxes[i].length; j++) {\n const rotationVal = xAxes[i][j].renderConfig().labels.rotation;\n if (rotationVal && rotationVal !== 0) {\n rotation = rotationVal;\n return;\n }\n }\n }\n })();\n\n if (rotation) {\n xAxes.forEach((axes) => {\n axes.forEach((axis) => {\n axis.renderConfig({ labels: { rotation } });\n axis.smartTicks(axis.setTickConfig());\n });\n });\n }\n};\n\nexport const createGroupState = (context) => {\n const [globalState, localState] = VisualGroup.getState();\n const store = context._store;\n store.append('app.group', globalState);\n store.append('local.group', localState);\n};\n\nexport const removeChild = (mount) => {\n while (mount.firstChild) {\n mount.removeChild(mount.firstChild);\n }\n};\n\nexport const createLayoutManager = () => {\n const layoutManager = new LayoutManager({\n className: 'muze-group-container'\n });\n return layoutManager;\n};\n","/**\n * This is the global options semantics based on which setters getters are created and reactivity is initiated.\n * Format\n * PROPERTRY_NAME: {\n * value: // default value of the property,\n * meta: {\n * typeCheck: // The setter value will be checked using this. If the value is function then the setter value\n * // is passed as args.\n * typeExpected: // The output of typecheck action will be tested against this. Truthy value will set the\n * // value to the setter\n * sanitizaiton: // Need for sanitization before type is checked\n * }\n * }\n * @module GlobalOptions\n */\n\nimport { intSanitizer, mergeRecursive, DataModel } from 'muze-utils';\nimport { fixScrollBarConfig } from './canvas/helper';\nimport { DEFAULT_CONFIG } from './defaults';\n\nexport default {\n data: {\n value: null,\n meta: {\n typeCheck: d => d instanceof DataModel\n }\n },\n width: {\n value: 0,\n meta: {\n sanitization: intSanitizer,\n typeCheck: Number.isInteger\n }\n },\n height: {\n value: 0,\n meta: {\n sanitization: intSanitizer,\n typeCheck: Number.isInteger\n }\n },\n minUnitWidth: {\n value: 50,\n meta: {\n sanitization: intSanitizer,\n typeCheck: Number.isInteger\n }\n },\n minUnitHeight: {\n value: 50,\n meta: {\n sanitization: intSanitizer,\n typeCheck: Number.isInteger\n }\n },\n config: {\n value: null,\n meta: {\n typeCheck: 'constructor',\n typeExpected: 'Object',\n sanitization: (config, oldConfig) => {\n // Reset the configuration when null is passed\n const oldConf = mergeRecursive({}, config === null ? {} : oldConfig);\n const defConfig = mergeRecursive(oldConf, DEFAULT_CONFIG);\n let newConf = mergeRecursive(defConfig, config);\n newConf = fixScrollBarConfig(newConf);\n\n return newConf;\n }\n\n }\n }\n};\n","/**\n * This file exports constants that will be used to\n * create the state store of the table layout.\n */\n/**\n * The index of top, bottom and center in the matrix\n */\nexport const VIEW_INDEX = {\n top: 0,\n center: 1,\n bottom: 2\n};\n\nexport const ROW_MATRIX_INDEX = {\n 0: 'top',\n 1: 'center',\n 2: 'bottom'\n};\n\nexport const COLUMN_MATRIX_INDEX = {\n 0: 'left',\n 1: 'middle',\n 2: 'right'\n};\n\n/**\n * The width of the grid suppied by the user.\n */\nexport const GRID_WIDTH = 'width';\n\n/**\n * The height of the grid supplied by the user.\n */\nexport const GRID_HEIGHT = 'height';\n\n/**\n * The border for the grid\n */\nexport const BORDER = 'border';\n\n /**\n * The index of the first visible row in view matrix.\n */\nexport const ROW_POINTER = 'rowPointer';\n\n/**\n * The index of the first visible column in the view matrix.\n */\nexport const COLUMN_POINTER = 'columnPointer';\n\n/**\n * Flag to specify whether row sizes should be equal.\n */\nexport const ROW_SIZE_IS_EQUAL = 'isRowSizeEqual';\n\n/**\n * Flag to specify whether column sizes are equal.\n */\nexport const COLUMN_SIZE_IS_EQUAL = 'isColumnSizeEqual';\n\n/**\n * Field to store an array an of the widths of visible columns.\n * @computed\n */\nexport const COLUMN_WIDTHS = 'visibleColumnWidths';\n\n/**\n * Field to store an array of heights of visible rows.\n * @computed\n */\nexport const ROW_HEIGHTS = 'visibleRowHeights';\n\n/**\n * Field to store the width of the left matrix.\n * @computed\n */\nexport const LEFT_MATRIX_WIDTH = 'leftMatrixWidth';\n\n/**\n * Field to store the width of the right matrix.\n * @computed\n */\nexport const RIGHT_MATRIX_WIDTH = 'rightMatrixWidth';\n\n/**\n * Field to store the height of the top matrix.\n * @computed\n */\nexport const TOP_MATRIX_HEIGHT = 'topMatrixHeight';\n\n/**\n * Field to store the height of the bottom matrix.\n * @computed\n */\nexport const BOTTOM_MATRIX_HEIGHT = 'bottomMatrixHeight';\n\n/**\n * The dom element to render the layout inside.\n */\nexport const MOUNT_POINT = 'mount';\n\n/**\n * The id attribute of the left table element.\n */\nexport const LEFT_TABLE_ID = 'grid-left';\n\n/**\n * The id attribute of the right table element.\n */\nexport const RIGHT_TABLE_ID = 'grid-right';\n\n/**\n * The id attribute of the top table.\n */\nexport const TOP_TABLE_ID = 'grid-top';\n\n/**\n * The id attribute of the bottom table.\n */\nexport const BOTTOM_TABLE_ID = 'grid-bottom';\n\n/**\n * The id attribute of the center table.\n */\nexport const CENTER_TABLE_ID = 'grid-center';\n\n/**\n * The id attribute of the top div.\n */\nexport const TOP_DIV_ID = 'muze-div-top';\n\n/**\n * The id attribute of the bottom div.\n */\nexport const BOTTOM_DIV_ID = 'muze-div-bottom';\n\n/**\n * The id attribute of the center div.\n */\nexport const CENTER_DIV_ID = 'muze-div-center';\n\n/**\n * Field that indicates if the row configuration has changed\n */\nexport const HAVE_ROWS_CHANGED = 'haveRowsChanged';\n\n/**\n * Field that indicates if the column configuration has changed\n */\nexport const HAVE_COLUMNS_CHANGED = 'haveColumnsChanged';\n\n/**\n * Field that indicates if the values configuration for the center matrix has changed\n */\nexport const HAVE_VALUES_CHANGED = 'haveValuesChanged';\n\n/**\n * Field that indicates the width of row matrix\n */\nexport const ROW_MATRIX_WIDTH = 'rowMatrixWidth';\n\n/**\n * Field that indicates the height of row matrix\n */\nexport const COLUMN_MATRIX_HEIGHT = 'columnMatrixHeight';\n\n/**\n * Field that indicates the unit width of layout\n */\nexport const UNIT_WIDTH = 'unitWidth';\n\n/**\n * Field that indicates the unit height of layout\n */\nexport const UNIT_HEIGHT = 'unitHeight';\n\n/**\n * Field that indicates the style object\n */\nexport const STYLE = 'style';\n\n/**\n * Field that indicates the color configuration\n */\nexport const COLOR = 'color';\n\n/**\n * Field that indicates width\n */\nexport const WIDTH = 'width';\n\n/**\n * Field that indicates collpase property for border\n */\nexport const COLLAPSE = 'collapse';\n\n/**\n * Field that indicates spacing property for border\n */\nexport const SPACING = 'spacing';\n\n/**\n * Field that indicates spacing property for border\n */\nexport const DISTRIBUTION = 'distribution';\n\n/**\n * Field that indicates spacing property for border\n */\nexport const GUTTERSPACE = 'gutterSpace';\n\n/**\n * Field that indicates spacing property for border\n */\nexport const BREAK_PAGE = 'breakPage';\n\n/**\n * Field that indicates spacing property for border\n */\nexport const SHOW_ROW_BORDERS = 'showRowBorders';\n\n/**\n * Field that indicates spacing property for border\n */\nexport const SHOW_COL_BORDERS = 'showColBorders';\n\n/**\n * Field that indicates spacing property for border\n */\nexport const SHOW_VALUE_BORDERS = 'showValueBorders';\n\nexport const HEIGHT = 'height';\nexport const COLUMN = 'column';\nexport const ROW = 'row';\nexport const TOP = 'top';\nexport const LEFT = 'left';\nexport const RIGHT = 'right';\nexport const BOTTOM = 'bottom';\nexport const CENTER = 'center';\nexport const CLICK = 'click';\nexport const ROW_LEFT = 'rowLeft';\nexport const ROW_RIGHT = 'rowRight';\nexport const COLUMN_BOTTOM = 'colBottom';\nexport const COLUMN_TOP = 'colTop';\nexport const AUTO = 'auto';\nexport const ROW_SPAN = 'rowSpan';\nexport const COL_SPAN = 'colSpan';\nexport const ROW_ROOT = 'rowRoot';\nexport const COLUMN_ROOT = 'columnRoot';\nexport const PRIMARY = 'primary';\nexport const SECONDARY = 'secondary';\nexport const VERTICAL = 'vertical';\nexport const HORIZONTAL = 'horizontal';\n\nexport const BLANK_BORDERS = 'rgba(0,0,0,0)';\n\nexport const PAGINATION = 'pagination';\nexport const BUFFER = 'buffer';\nexport const HOLISTIC = 'holistic';\nexport const SCROLL = 'scroll';\nexport const MIDDLE = 'middle';\nexport const NO_BORDERS = null;\n\nexport const MAX_WIDTH_AVAIL_FOR_COL_MATRIX = 'maxWidthAvailableForColumnMatrix';\nexport const COLUMN_MATRIX = 'columnMatrix';\nexport const MAX_HEIGHT_AVAIL_FOR_ROW_MATRIX = 'maxHeightAvailableForRowMatrix';\nexport const ROW_MATRIX = 'rowMatrix';\n","import { sanitizeIP, mergeRecursive } from 'muze-utils';\nimport { TOP, CENTER, BOTTOM } from '../enums/constants';\n\n/*\n * This is the abstract implementation of the root layout. This takes care of common work which all the layouts\n * has to handle. The common work includes sanitizaion of inputs, update, rerender, dispose etc. This class can't be\n * used directly (as ofcourse this is an abstract implementaiton), the class which is implementing it has to implement\n * the necessary methods and gives its on visual.\n */\n\n/**\n * This class is used to create a generic layout. It can be extended to create layouts\n * of different types\n * @class GenericLayout\n */\nexport default class GenericLayout {\n\n /**\n * Creates an instance of TableLayout.\n * @param {HTMLElement} mountPoint DOM element/d3 selection where the layout is to be mounted\n * @param {Object} measurement The dimensions of the layout\n * @param {Object} config configuration to be given for the layout\n * @param {Object} dependencies external dependencies.\n *\n * @memberof GenericLayout\n *\n */\n constructor (mountPoint, measurement, config, dependencies) {\n this._config = {};\n this._measurement = {};\n this._matrices = [];\n // External dependencies to be included for the layout. This includes the ext global dependencies like\n // smartlabel which has one single implementation of throughout the page or per isntance\n this._dependencies = dependencies;\n\n this.measurement(measurement);\n this.mountPoint(mountPoint);\n this.config(config);\n }\n\n /**\n * Returns an object which is used to recreate the layout.\n * @return {Object} the serialized components\n */\n serialize () {\n return {\n measurement: this.measurement(),\n config: this.config(),\n matrices: this.matrices()\n };\n }\n\n /**\n * Sets/Gets the config for the layout\n * @param {Object} config configuration for the layout\n * @return {Layout|Object} Gets the Config/ Returns this instance when set\n */\n config (config) {\n if (config) {\n this._config = mergeRecursive(this._config || {}, config);\n this._config.border.width = Math.max(0, this._config.border.width);\n return this;\n }\n return this._config;\n }\n\n /**\n * Sets/Gets the measurement for the layout\n * @param {Object} measurement measurement for the layout\n * @return {Layout|Object} Gets the measurement/ Returns this instance when set\n */\n measurement (measurement) {\n if (measurement) {\n this._measurement = mergeRecursive(this._measurement || {}, measurement);\n\n return this;\n }\n return this._measurement;\n }\n\n /**\n * Sets/Gets the matrices for the layout\n * @param {Object} matrices matrices for the layout\n * @return {Layout|Object} Gets the matrices/ Returns this instance when set\n */\n matrices (matrices) {\n if (matrices) {\n this._matrices = sanitizeIP.typeObj([TOP, CENTER, BOTTOM], matrices);\n\n return this;\n }\n return this._matrices;\n }\n\n /**\n * Sets/Gets the matrix for row\n * @param {Object} matrix matrices for the layout\n * @return {Layout|Object} Gets the matrix/ Returns this instance when set\n */\n rowMatrix (matrix) {\n if (matrix) {\n this._rowMatrix = matrix;\n return this;\n }\n return this._rowMatrix;\n }\n\n /**\n * Sets/Gets the matrix for columns\n * @param {Object} matrix matrices for the layout\n * @return {Layout|Object} Gets the matrix/ Returns this instance when set\n */\n columnMatrix (matrix) {\n if (matrix) {\n this._columnMatrix = matrix;\n return this;\n }\n return this._columnMatrix;\n }\n\n /**\n * Sets/Gets the matrix for value\n * @param {Object} matrix matrices for the layout\n * @return {Layout|Object} Gets the matrix/ Returns this instance when set\n */\n centerMatrix (matrix) {\n if (matrix) {\n this._centerMatrix = matrix;\n return this;\n }\n return this._centerMatrix;\n }\n\n /**\n * Sets/Gets the mountPoint for the layout\n * @param {Object} mountPoint mountPoint for the layout\n * @return {Layout|Object} Gets the mountPoint/ Returns this instance when set\n */\n mountPoint (mountPoint) {\n if (mountPoint) {\n this._mountPoint = mountPoint;\n\n return this;\n }\n return this._mountPoint;\n }\n}\n","import * as FieldNames from '../enums/constants';\n\n/**\n * Default configuration of the layout\n * @return {Object} returns the default configuration\n */\nexport const DEFAULT_CONFIGURATION = {\n [FieldNames.BORDER]: {\n [FieldNames.STYLE]: 'solid',\n [FieldNames.COLOR]: '#d6d6d6',\n [FieldNames.WIDTH]: 2,\n [FieldNames.COLLAPSE]: true,\n [FieldNames.SPACING]: 0\n },\n [FieldNames.PAGINATION]: 'scroll',\n [FieldNames.BUFFER]: 20,\n [FieldNames.GUTTERSPACE]: { rows: [], columns: [] },\n [FieldNames.DISTRIBUTION]: { rows: [], columns: [] },\n [FieldNames.BREAK_PAGE]: { rows: [], columns: [] },\n [FieldNames.ROW_SIZE_IS_EQUAL]: false,\n [FieldNames.COLUMN_SIZE_IS_EQUAL]: false,\n [FieldNames.COLUMN_POINTER]: 0,\n [FieldNames.ROW_POINTER]: 0\n};\n\n/**\n * Default measurements for the layout\n * @return {Object} returns the default measurements\n */\nexport const DEFAULT_MEASUREMENTS = {\n [FieldNames.GRID_WIDTH]: 100,\n [FieldNames.GRID_HEIGHT]: 100,\n [FieldNames.UNIT_WIDTH]: 100,\n [FieldNames.UNIT_HEIGHT]: 100\n};\n\nexport const BLANK_BORDERS = 'rgba(0,0,0,0)';\n","/**\n * This file exports utility functions that are used across the layout module\n */\nimport { Symbols } from 'muze-utils';\nimport { PRIMARY, SECONDARY, HEIGHT, WIDTH } from '../enums/constants';\n\nconst nest = Symbols.nest;\n/**\n *\n *\n * @param {*} isTransposed\n *\n */\nconst getMeasureInfo = (isTransposed) => {\n if (isTransposed) {\n return {\n firstMeasure: HEIGHT,\n secondMeasure: WIDTH\n };\n }\n return {\n firstMeasure: WIDTH,\n secondMeasure: HEIGHT\n };\n};\n\n/**\n *\n *\n * @param {*} i\n * @param {*} page\n *\n */\nconst findInPage = (i, page) => {\n let count = 0;\n for (const x in page) {\n if (i < page[x]) {\n count = x;\n break;\n }\n }\n return count;\n};\n\n/**\n * Creates a single matrix from two matrices\n *\n * @param {Array} matrix Input matrix\n * @return {Array} Joined matrix\n * @memberof VisualMatrix\n */\nexport const combineMatrices = (matrix, config) => {\n const { isTransposed } = config;\n let joinedMatrix = matrix[0].length > 0 ? matrix[0] : matrix[1];\n if (isTransposed) {\n joinedMatrix = matrix[0].length > 0 ? [...matrix[0]] : [];\n joinedMatrix = matrix[1].length > 0 ? [...joinedMatrix, ...matrix[1]] : joinedMatrix;\n } else {\n joinedMatrix = joinedMatrix.map((row, rowIndex) => {\n let rowData = [];\n if (matrix[0].length > 0) {\n rowData = [...matrix[0][rowIndex]];\n }\n if (matrix[1].length > 0) {\n rowData = [...rowData, ...matrix[1][rowIndex]];\n }\n return rowData;\n });\n }\n return joinedMatrix;\n};\n\n/**\n * Creates a hirachical tree from the context\n *\n * @param {Object} context context for creating tree\n * @return {Object} nested tree\n */\nexport const createTree = (context) => {\n let matrixTree = {};\n let lastLevelKey = 0;\n let facet = PRIMARY;\n const nestFn = nest();\n const keys = [];\n const layoutMatrix = context._layoutMatrix;\n const primaryMatrix = context.primaryMatrix();\n const secondaryMatrix = context.secondaryMatrix();\n const { isTransposed, breakPage } = context.config();\n\n if (!isTransposed) {\n if (primaryMatrix.length === 0) {\n facet = PRIMARY;\n } else if (secondaryMatrix.length === 0) {\n facet = SECONDARY;\n } else {\n facet = primaryMatrix.length >= secondaryMatrix.length ? PRIMARY : SECONDARY;\n }\n if (primaryMatrix.length > 0) {\n for (let i = 0; i < primaryMatrix[0].length - 1; i++) {\n keys.push(i);\n }\n keys.push(primaryMatrix[0].length - 1);\n if (facet === SECONDARY || secondaryMatrix.length === 0) {\n lastLevelKey = primaryMatrix[0].length - 1;\n }\n }\n if (secondaryMatrix.length > 0) {\n const keyLength = primaryMatrix.length > 0 ? primaryMatrix[0].length : 0;\n for (let i = secondaryMatrix[0].length - 1; i > 0; i--) {\n keys.push(i + keyLength);\n }\n keys.push(keyLength);\n\n if (facet === PRIMARY) {\n lastLevelKey = keyLength;\n }\n } else {\n lastLevelKey = primaryMatrix.length > 0 ? primaryMatrix[0].length - 1 : 0;\n }\n keys.forEach((key) => {\n let counter = -1;\n return nestFn.key((d) => {\n counter++;\n return `${d[key].valueOf()}-${findInPage(counter, breakPage)}`;\n });\n });\n matrixTree = nestFn.entries(layoutMatrix);\n } else {\n if (primaryMatrix.length === 0) {\n facet = PRIMARY;\n } else if (secondaryMatrix.length === 0) {\n facet = SECONDARY;\n } else {\n facet = primaryMatrix.length >= secondaryMatrix.length ? PRIMARY : SECONDARY;\n }\n if (primaryMatrix.length > 0) {\n for (let i = 0; i < primaryMatrix.length - 1; i++) {\n keys.push(i);\n }\n // if (facet === PRIMARY) {\n keys.push(primaryMatrix.length - 1);\n // } else {\n if (facet === SECONDARY) {\n lastLevelKey = primaryMatrix.length - 1;\n }\n }\n if (secondaryMatrix.length > 0) {\n const primaryMatrixLength = primaryMatrix.length;\n for (let i = secondaryMatrix.length - 1; i > 0; i--) {\n keys.push(i + primaryMatrixLength);\n }\n // if (facet === SECONDARY) {\n keys.push(primaryMatrixLength);\n // }\n if (facet === PRIMARY) {\n lastLevelKey = primaryMatrixLength;\n }\n }\n keys.forEach((key) => {\n let counter = -1;\n return nestFn.key((d) => {\n counter++;\n return `${d[key].valueOf()}-${findInPage(counter, breakPage)}`;\n });\n });\n let newMatrix = [];\n newMatrix = layoutMatrix[0].map((col, colIndex) => layoutMatrix.map(row => row[colIndex]));\n matrixTree = nestFn.entries(newMatrix);\n }\n return { tree: matrixTree, lastLevelKey };\n};\n\n/**\n * Gives the min measues\n *\n * @param {boolean} isTransposed is column matrix\n * @param {Object} unitMeasures min measures to be given to cells\n * @return {Object} dimension min cell\n */\nexport const getMinMeasures = (isTransposed, unitMeasures) => {\n if (!isTransposed) {\n return {\n height: unitMeasures.height,\n width: 0\n };\n }\n return {\n height: 0,\n width: unitMeasures.width\n };\n};\n\n/**\n * Get the logical space from the tree\n *\n * @param {Node} item tree to be calculated\n * @param {number} measures width and height\n * @param {Array} minMeasures min measures for a cell\n * @param {Array} maxMeasure max measures for a col/row\n * @return {Object} dimension\n */\nexport const getLogicalSpace = (item, measures, minMeasures, maxMeasure = []) => {\n const { firstMeasure, secondMeasure } = measures;\n let firstMeasureValue = 0;\n let secondMeasureValue = 0;\n item.values.forEach((valueArray) => {\n let fMeasure = 0;\n let sMeasure = 0;\n valueArray.forEach((placeholder, colIndex) => {\n placeholder.setAvailableSpace();\n const space = placeholder.getLogicalSpace();\n const minSecondMeasure = placeholder.getMinMeasures(minMeasures[secondMeasure]);\n\n sMeasure = Math.max(sMeasure, +space[secondMeasure], minSecondMeasure);\n maxMeasure[colIndex] = Math.max(maxMeasure[colIndex] || 0, space[firstMeasure]);\n fMeasure += +maxMeasure[colIndex];\n });\n secondMeasureValue += sMeasure;\n firstMeasureValue = Math.max(firstMeasureValue, fMeasure);\n item.space = {\n [secondMeasure]: Math.ceil(secondMeasureValue),\n [firstMeasure]: Math.ceil(firstMeasureValue)\n };\n });\n return {\n [secondMeasure]: secondMeasureValue,\n [firstMeasure]: firstMeasureValue\n };\n};\n\n/**\n * Computes the logical spcae taken by the matrix tree\n *\n * @param {*} [item={}] tree to be viewed\n * @param {boolean} [isTransposed=false] is column matrix\n * @param {*} unitMeasures min measues for a cell\n * @param {Array} maxMeasure max measures for a col/row\n * @return {Object} logical space taken\n */\nexport const computeLogicalSpace = (item = {}, config, maxMeasures) => {\n const { isTransposed = false, unitMeasures } = config;\n const { firstMeasure, secondMeasure } = getMeasureInfo(isTransposed);\n const { values } = item;\n const minMeasures = getMinMeasures(isTransposed, unitMeasures);\n\n if (values[0].key) {\n const logicalSpace = { [firstMeasure]: 0, [secondMeasure]: 0 };\n\n values.forEach((valueItem) => {\n // Compute logical space for lowest level\n const space = computeLogicalSpace(valueItem, config, maxMeasures);\n // Set logical space for first measure\n logicalSpace[firstMeasure] = Math.max(logicalSpace[firstMeasure], space[firstMeasure],\n minMeasures[firstMeasure]);\n\n // Set logical space for second measure\n logicalSpace[secondMeasure] += +space[secondMeasure];\n });\n item.space = logicalSpace;\n return logicalSpace;\n }\n\n return getLogicalSpace(item, { firstMeasure, secondMeasure }, minMeasures, maxMeasures);\n};\n\n/**\n * Gives the space taken by a row\n *\n * @param {Array} row matrix array of rows\n * @return {Object} dimension of the row\n */\nexport const spaceTakenByRow = (row) => {\n let height = 0;\n let width = 0;\n row.forEach((col) => {\n const spaces = col.getLogicalSpace();\n height = Math.max(height, spaces.height);\n width += spaces.width;\n });\n return {\n width,\n height\n };\n};\n\n/**\n * Gives the space taken by a column\n *\n * @param {Array} matrix column matrix\n * @param {number} colIndex column index\n * @return {Object} dimension of the column\n */\nexport const spaceTakenByColumn = (matrix, colIndex) => {\n let height = 0;\n let width = 0;\n matrix.forEach((row) => {\n const col = row[colIndex];\n const spaces = col.getLogicalSpace();\n width = Math.max(width, spaces.width);\n height += spaces.height;\n });\n return {\n width,\n height\n };\n};\n\n/**\n * Creates different level matrices\n *\n * @param {Object} item matrix tree\n * @param {boolean} isTransposed is column matrix\n * @return {Object} matrix of each level\n */\nexport const createMatrixEachLevel = (item, isTransposed) => {\n if (item.values[0].key) {\n const arr = [];\n item.values.forEach((child) => {\n if (!isTransposed) {\n arr.push(...createMatrixEachLevel(child, isTransposed));\n } else {\n const eachLevel = createMatrixEachLevel(child, isTransposed);\n eachLevel.forEach((e, i) => {\n arr[i] = arr[i] || [];\n arr[i].push(...e);\n });\n }\n });\n item.matrix = arr;\n return arr;\n }\n if (!isTransposed) {\n item.matrix = item.values;\n } else {\n item.matrix = item.values[0].map((col, colIndex) => item.values.map(row => row[colIndex]));\n }\n return item.matrix;\n};\n\n/**\n * Breaks the matrix into two part\n *\n * @param {Array} matrix input matrix\n * @param {boolean} isTransposed is column matrix\n * @param {number} breakPointer point in matrix where it is to be broken\n * @return {Array} two broken matrix\n */\nexport const breakMatrix = (matrix, isTransposed, breakPointer) => {\n const primaryMatrix = [];\n const secondaryMatrix = [];\n if (isTransposed) {\n matrix.forEach((row, rowIndex) => {\n if (rowIndex >= breakPointer) {\n secondaryMatrix.push(row);\n } else {\n primaryMatrix.push(row);\n }\n });\n } else {\n matrix.forEach((row, rowIndex) => {\n row.forEach((column, columnIndex) => {\n if (columnIndex >= breakPointer) {\n secondaryMatrix[rowIndex] = secondaryMatrix[rowIndex] || [];\n secondaryMatrix[rowIndex].push(column);\n } else {\n primaryMatrix[rowIndex] = primaryMatrix[rowIndex] || [];\n primaryMatrix[rowIndex].push(column);\n }\n });\n });\n }\n return [primaryMatrix, secondaryMatrix];\n};\n\n/**\n * Distributed width returned\n *\n * @param {Object} context context for the width distibution\n * @return {number} distributed widths\n */\nexport const getDistributedWidth = (context, layoutConfig) => {\n const {\n availableWidth,\n width,\n row\n } = context;\n const {\n isDistributionEqual,\n isTransposed,\n distribution\n } = layoutConfig;\n let distSum = 0;\n if (distribution && distribution[0]) {\n distSum = distribution.reduce((t, n) => {\n t += n;\n return t;\n });\n }\n return row.map((col, colIndex) => {\n const space = col.getLogicalSpace().width;\n let distWidth = (space + (availableWidth - width) * (space / width));\n if (isTransposed) {\n if (distribution.length > 0) {\n distWidth = (availableWidth * distribution[colIndex] / distSum);\n } else if (isDistributionEqual || width === 0) {\n const rowLen = row.length;\n distWidth = (availableWidth / rowLen);\n }\n }\n return Math.floor(distWidth);\n });\n};\n\n/**\n * Distributeed heights returned\n *\n * @param {Object} context input for the height distribution\n * @return {Object} distribured heights\n */\nexport const getDistributedHeight = (context) => {\n let distSum = 0;\n let gutterSum = 0;\n let heightWithoutGutter = 0;\n const {\n isTransposed,\n distribution,\n availableHeight,\n height,\n isDistributionEqual,\n gutter,\n matrix,\n cIdx\n } = context;\n\n if (distribution && distribution[0] !== undefined) {\n distSum = distribution.reduce((t, n) => {\n t += n;\n return t;\n });\n }\n if (gutter && gutter[0] !== undefined) {\n gutterSum = gutter.reduce((t, n) => {\n t += n;\n return t;\n });\n }\n heightWithoutGutter = availableHeight - Math.floor(availableHeight * gutterSum);\n\n const colLen = matrix.length;\n return matrix.map((row, rIdx) => {\n const col = row[cIdx];\n const space = col.getLogicalSpace().height;\n let distHeight = (space + (heightWithoutGutter - height) * (space / height));\n\n if (!isTransposed) {\n if (distribution.length > 0 && colLen === distribution.length) {\n distHeight = (heightWithoutGutter * distribution[rIdx] / distSum);\n } else if (isDistributionEqual || context.height === 0) {\n distHeight = (heightWithoutGutter / colLen);\n }\n }\n return Math.floor(distHeight);\n });\n};\n\n/**\n *\n *\n * @param {*} arr\n * @param {*} beg\n * @param {*} end\n */\nexport const extraCellsRemover = (arr, beg, end) => arr.slice(beg, -end);\n\n/**\n * Creates matrix instancess\n *\n * @param {Array} [arr=[]] mutated arry\n * @param {number} depth depth of the tree\n * @param {Array} matrixInfo Details about the matrix(tree, etc) to be inserted\n * @param {boolean} layout Instance of layout\n */\nexport const createMatrixInstances = (arr = [], depth, matrixInfo, layout) => {\n const breakPointer = layout._breakPointer;\n const config = layout.config();\n const {\n isTransposed\n } = config;\n const {\n tree,\n layoutMatrix\n } = matrixInfo;\n\n if (depth === 0) {\n const brokenMatrix = breakMatrix(tree.matrix, isTransposed, breakPointer);\n arr.push({\n matrix: tree.matrix,\n primaryMatrix: brokenMatrix[0],\n secondaryMatrix: brokenMatrix[1],\n space: tree.space\n });\n return arr;\n }\n const nextLevel = depth - 1;\n tree.values.forEach((e) => {\n createMatrixInstances(arr, nextLevel, {\n tree: e,\n layoutMatrix\n }, layout);\n });\n return arr;\n};\n","import { mergeRecursive } from 'muze-utils';\n\nexport const PROPS = {\n config: {\n sanitization: (context, value) => mergeRecursive(context._config || {}, value)\n },\n maxMeasures: {},\n availableSpace: {},\n logicalSpace: {}\n};\n","import { PRIMARY } from '../enums/constants';\n/**\n *\n *\n */\nexport const defaultConfig = {\n distribution: [],\n classPrefix: 'muze',\n isDistributionEqual: true,\n unitMeasures: {\n height: 100,\n width: 100,\n border: 1\n },\n isTransposed: false,\n facet: PRIMARY,\n extraCellLengths: []\n};\n","import { mergeRecursive, generateGetterSetters, ERROR_MSG } from 'muze-utils';\nimport {\n createTree,\n combineMatrices,\n createMatrixInstances\n } from '../utils';\nimport { PROPS } from './props';\nimport { HEIGHT, WIDTH } from '../enums/constants';\nimport { defaultConfig } from './default-config';\n\n/**\n * This class used to create column / row matrix for GridLayout\n *\n * @class VisualMatrix\n */\nexport default class VisualMatrix {\n\n /**\n *Creates an instance of VisualMatrix.\n * @param {any} matrix Two set of matrices\n * @param {any} [config={}] Configuration for VisualMatrix\n * @memberof VisualMatrix\n */\n constructor (matrix, config = {}) {\n // Prepare matrices\n this._lastLevelKey = 0;\n this._primaryMatrix = matrix[0] || [];\n this._secondaryMatrix = matrix[1] || [];\n this._maxMeasures = [];\n this._availableSpace = {};\n\n // Store the config\n generateGetterSetters(this, PROPS);\n const defCon = Object.assign({}, this.constructor.defaultConfig());\n this.config(mergeRecursive(defCon, config));\n\n this._layoutMatrix = combineMatrices([matrix[0] || [], matrix[1] || []], this.config());\n }\n\n /**\n * Computes the logical space taken by the entire matrixTree\n *\n * @return {Object} Logical space taken\n * @memberof VisualMatrix\n */\n computeLogicalSpace () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n computeViewableSpaces () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n *\n *\n * @return\n * @memberof VisualMatrix\n */\n removeExtraCells () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n getPriorityDistribution () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Calculates the depth of the tree that can be viewed\n *\n * @param {Array} widthMeasures array of widths\n * @param {Array} heightMeasures array of heights\n * @return {number} depth of the tree\n * @memberof VisualMatrix\n */\n calculateDepth () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Redistributes the provied space to all cells\n *\n * @param {*} viewableMatrix current viewport matrix\n * @param {*} width provied width\n * @param {*} height provied height\n * @return {Object} current viewports matrixes with measures\n * @memberof VisualMatrix\n */\n redistributeSpaces () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Distibutes the given space row wisely\n *\n * @param {Object} measures Redistribution information\n * @memberof VisualMatrix\n */\n redistributeViewSpaces () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Dispatch the calculated cell dimensions to all the cells\n *\n * @param {Object} measures cell dimension information\n * @return {Object} row and column heights / widths\n * @memberof VisualMatrix\n */\n getCellDimensions () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n *\n *\n * @param {*} params\n * @returns\n * @memberof VisualMatrix\n */\n primaryMatrix (...params) {\n if (params.length) {\n return this;\n }\n return this._primaryMatrix;\n }\n\n secondaryMatrix (...params) {\n if (params.length) {\n return this;\n }\n return this._secondaryMatrix;\n }\n\n tree (...params) {\n if (params.length) {\n return this;\n }\n return this._tree;\n }\n\n static defaultConfig () {\n return defaultConfig;\n }\n\n createTree () {\n const { tree, lastLevelKey } = createTree(this);\n this._lastLevelKey = lastLevelKey;\n return tree;\n }\n\n /**\n * Returns the space taken by visual matrix\n *\n * @return {Object} space taken by the matrix\n * @memberof VisualMatrix\n */\n getLogicalSpace () {\n return this.logicalSpace();\n }\n\n /**\n * Sets the provied space to the visual matrix\n *\n * @param {number} width width provided\n * @param {number} height height provided\n * @memberof VisualMatrix\n */\n setAvailableSpace (width, height) {\n this.availableSpace({ width, height });\n const tree = this.tree();\n const heightMeasures = this.populateMaxMeasures(HEIGHT, tree);\n const widthMeasures = this.populateMaxMeasures(WIDTH, tree);\n const depth = this.calculateDepth(widthMeasures, heightMeasures);\n\n this.viewableMatrix = this.createViewPortMatrix(depth);\n this.viewableMeasures = this.redistributeSpaces(width, height);\n return this;\n }\n\n /**\n * Populate the max measures in the array\n *\n * @param {Array} measures array to be filled with max measures\n * @param {Object} matrixTree matrix tree of visual matrix\n * @param {number} measure width or height\n * @param {number} [depth=0] depth of the tree that to be calculated\n * @memberof VisualMatrix\n */\n populateMaxMeasures (type, matrixTree, depth = 0, measures = []) {\n measures[depth] = Math.max(measures[depth] || 0, matrixTree.space[type]);\n if (matrixTree.values) {\n const childDepth = depth + 1;\n matrixTree.values.forEach((child) => {\n if (child.space) {\n measures = this.populateMaxMeasures(type, child, childDepth, measures);\n }\n });\n }\n return measures;\n }\n\n /**\n * Gets the viewable measures for the current viewable matrix\n *\n * @return {Object} Set of viewable measures\n * @memberof VisualMatrix\n */\n getViewableSpaces () {\n return this.viewableMeasures;\n }\n\n /**\n * Returns the matrix that can be viewed in the current viewport\n *\n * @return {Array} Set of matrices that can be viewed\n * @memberof VisualMatrix\n */\n getViewableMatrices () {\n return this.viewableMatrix;\n }\n\n /**\n * Creates the viewport that can be viewed together\n *\n * @param {number} depth maxDepth that can be viewed in the viewport\n * @return {Array} Set of matrices that can be viewed\n * @memberof VisualMatrix\n */\n createViewPortMatrix (depth) {\n const arr = [];\n createMatrixInstances(arr, depth, this.removeExtraCells(), this);\n return arr;\n }\n}\n\n","import { mergeRecursive } from 'muze-utils';\nimport {\n extraCellsRemover,\n combineMatrices,\n spaceTakenByColumn,\n getDistributedHeight,\n computeLogicalSpace,\n createMatrixEachLevel\n } from '../utils';\nimport { ROW_ROOT } from '../enums/constants';\nimport VisualMatrix from './visual-matrix';\n\n/**\n * This class used to create column / row matrix for GridLayout\n *\n * @class VisualMatrix\n */\nexport default class RowVisualMatrix extends VisualMatrix {\n\n /**\n *Creates an instance of VisualMatrix.\n * @param {any} matrix Two set of matrices\n * @param {any} [config={}] Configuration for VisualMatrix\n * @memberof VisualMatrix\n */\n constructor (matrix, config = {}) {\n super(matrix, config);\n\n this._breakPointer = (matrix[0].length > 0 ? matrix[0][0].length : 0);\n this._layoutMatrix = combineMatrices([matrix[0] || [], matrix[1] || []], this.config());\n\n // Create Tree\n this._tree = {\n key: ROW_ROOT,\n values: this.createTree()\n };\n this._logicalSpace = this.computeLogicalSpace();\n }\n\n /**\n * Computes the logical space taken by the entire matrixTree\n *\n * @return {Object} Logical space taken\n * @memberof VisualMatrix\n */\n computeLogicalSpace () {\n const matrixTree = this.tree();\n createMatrixEachLevel(matrixTree, false);\n return computeLogicalSpace(matrixTree, this.config(), this.maxMeasures());\n }\n\n computeViewableSpaces (measures) {\n const {\n maxHeights,\n maxWidths,\n height\n } = measures;\n return this.viewableMatrix.map((matrixInst, i) => {\n const cellDimOptions = { matrixInst, maxWidths, maxHeights, matrixIndex: i };\n const { widths, rowHeights, columnWidths } = this.getCellDimensions(cellDimOptions);\n const heightMeasures = [height, height];\n const columnMeasures = widths;\n\n return {\n rowHeights: {\n primary: rowHeights[0],\n secondary: rowHeights[1]\n },\n columnWidths: {\n primary: columnWidths[0],\n secondary: columnWidths[1]\n },\n height: {\n primary: heightMeasures[0],\n secondary: heightMeasures[1]\n },\n width: {\n primary: columnMeasures[0],\n secondary: columnMeasures[1]\n }\n };\n });\n }\n\n /**\n *\n *\n * @return\n * @memberof VisualMatrix\n */\n removeExtraCells () {\n const {\n isTransposed,\n extraCellLengths\n } = this.config();\n const matrix = this._layoutMatrix;\n const tree = mergeRecursive({}, this.tree());\n const begCellLen = extraCellLengths[0];\n const endCellLen = extraCellLengths[1] || Number.NEGATIVE_INFINITY;\n const layoutMatrix = !isTransposed ? extraCellsRemover(matrix, begCellLen, endCellLen) :\n matrix.slice(0).map(e => extraCellsRemover(e, begCellLen, endCellLen));\n\n tree.values = extraCellsRemover(tree.values, begCellLen, endCellLen);\n tree.matrix = extraCellsRemover(tree.matrix, begCellLen, endCellLen);\n\n return {\n tree,\n layoutMatrix\n };\n }\n\n getPriorityDistribution (measures) {\n let remainingAvailWidth;\n let remainingWidth;\n let cWidths = [];\n let conditions = [];\n let maxPrioritySpace = 0;\n const {\n matrix,\n width: availableWidth,\n maxMeasures: maxWidths,\n maxWidth: currentWidth,\n height\n } = measures;\n const priority = this.config().priority;\n const primaryMatrixLength = this.primaryMatrix().length ? this.primaryMatrix()[0].length : 0;\n\n const dist = [];\n\n remainingAvailWidth = availableWidth;\n remainingWidth = currentWidth;\n\n if (priority === 2) {\n conditions = [primaryMatrixLength - 1, primaryMatrixLength];\n // divider = Math.min(2, matrixLen);\n } else {\n conditions = priority === 0 ? [primaryMatrixLength - 1] : [primaryMatrixLength];\n // divider = Math.min(1, matrixLen);\n }\n conditions.forEach((i) => {\n dist[i] = maxWidths[i];\n maxPrioritySpace += maxWidths[i];\n remainingAvailWidth -= dist[i];\n remainingWidth -= dist[i];\n });\n matrix[0].forEach((e, i) => {\n if (conditions.indexOf(i) === -1) {\n dist[i] = remainingAvailWidth * (maxWidths[i] / remainingWidth);\n }\n });\n matrix.forEach(row => row.forEach((col, cIdx) => {\n if (conditions.indexOf(cIdx) === -1) {\n col.setAvailableSpace(dist[cIdx], height);\n\n cWidths[cIdx] = Math.max(cWidths[cIdx] || 0, Math.floor(col.getLogicalSpace().width));\n } else {\n cWidths[cIdx] = 0;\n }\n }));\n\n const prioritySpace = availableWidth - cWidths.reduce((t, n) => t + n);\n if (prioritySpace < 0) {\n cWidths = cWidths.map(() => 0);\n } else {\n conditions.forEach((i) => {\n cWidths[i] = Math.floor(prioritySpace * (dist[i] / maxPrioritySpace || 1));\n });\n }\n return cWidths;\n }\n\n /**\n * Calculates the depth of the tree that can be viewed\n *\n * @param {Array} widthMeasures array of widths\n * @param {Array} heightMeasures array of heights\n * @return {number} depth of the tree\n * @memberof VisualMatrix\n */\n calculateDepth (widthMeasures, heightMeasures) {\n let i;\n const { height } = this.availableSpace();\n\n for (i = 0; i < heightMeasures.length; i++) {\n if (heightMeasures[i] <= height) break;\n }\n\n return Math.min(widthMeasures.length - 1, i);\n }\n\n /**\n * Redistributes the provied space to all cells\n *\n * @param {*} viewableMatrix current viewport matrix\n * @param {*} width provied width\n * @param {*} height provied height\n * @return {Object} current viewports matrixes with measures\n * @memberof VisualMatrix\n */\n redistributeSpaces (width, height) {\n let maxHeights = [];\n let maxWidths = [];\n const maxMeasures = this.maxMeasures();\n\n const maxWidth = maxMeasures.reduce((t, n) => {\n t += n;\n return t;\n });\n const logicalWidths = this.getPriorityDistribution({\n matrix: this._layoutMatrix,\n maxWidth,\n maxMeasures,\n width,\n height\n });\n\n this.viewableMatrix.forEach((matrixInst) => {\n const matrix = matrixInst.matrix;\n const mWidth = 0;\n const mHeight = 0;\n const options = { mWidth, mHeight, matrix, width, height, maxHeights, maxWidths, logicalWidths };\n const measures = this.redistributeViewSpaces(options);\n maxWidths = measures.maxWidths;\n maxHeights = measures.maxHeights;\n });\n return this.computeViewableSpaces({ height, width, maxHeights, maxWidths });\n }\n\n /**\n * Distibutes the given space row wisely\n *\n * @param {Object} measures Redistribution information\n * @memberof VisualMatrix\n */\n redistributeViewSpaces (measures) {\n let cWidths = [];\n let rHeights = [];\n let mHeight = 0;\n const maxMeasures = this.maxMeasures();\n\n const {\n isDistributionEqual,\n distribution,\n isTransposed,\n gutter\n } = this.config();\n const { matrix, height, maxHeights, maxWidths, logicalWidths } = measures;\n mHeight = spaceTakenByColumn(matrix, this._lastLevelKey).height;\n\n const maxWidth = maxMeasures.reduce((t, n) => {\n t += n;\n return t;\n });\n measures.maxMeasures = maxMeasures;\n measures.maxWidth = maxWidth;\n if (maxWidth > 0) {\n cWidths = logicalWidths;\n } else {\n cWidths = maxMeasures.map(() => 0);\n }\n rHeights = getDistributedHeight({\n matrix,\n cIdx: this._lastLevelKey,\n height: mHeight,\n availableHeight: height,\n isDistributionEqual,\n distribution,\n isTransposed,\n gutter\n });\n if (maxWidths.length > 0) {\n cWidths = cWidths.map((e, i) => Math.max(e, maxWidths[0][i] || 0));\n }\n maxWidths.push(cWidths);\n for (let x = 0; x < maxWidths.length; x++) {\n maxWidths[x] = cWidths;\n }\n maxHeights.push(rHeights);\n return { maxWidths, maxHeights };\n }\n\n /**\n * Dispatch the calculated cell dimensions to all the cells\n *\n * @param {Object} measures cell dimension information\n * @return {Object} row and column heights / widths\n * @memberof VisualMatrix\n */\n getCellDimensions (measures) {\n const {\n unitMeasures\n } = this.config();\n const borderWidth = unitMeasures.border;\n const { matrixInst, maxWidths, maxHeights, matrixIndex } = measures;\n const matrix = matrixInst.matrix;\n const rowHeights = [[0], [0]];\n const columnWidths = [[0], [0]];\n const heights = [0, 0];\n const widths = [0, 0];\n const breakPointer = this._breakPointer;\n\n matrix.forEach((row, rIdx) => {\n row.forEach((cell, cIdx) => {\n const colHeight = maxHeights[matrixIndex][rIdx] || 0;\n const colWidth = maxWidths[matrixIndex][cIdx];\n\n cell.setAvailableSpace(colWidth, colHeight - borderWidth);\n\n if (rIdx === 0 && cIdx < breakPointer) {\n columnWidths[0][cIdx] = colWidth;\n widths[0] = (widths[0] || 0) + colWidth;\n } else if (rIdx === 0 && cIdx >= breakPointer) {\n columnWidths[1][cIdx - breakPointer] = colWidth;\n widths[1] = (widths[1] || 0) + colWidth;\n }\n if (cIdx === this._lastLevelKey) {\n rowHeights[0][rIdx] = colHeight;\n rowHeights[1][rIdx] = colHeight;\n }\n });\n });\n return {\n heights,\n widths,\n rowHeights,\n columnWidths\n };\n }\n}\n\n","import { mergeRecursive } from 'muze-utils';\nimport {\n extraCellsRemover,\n getDistributedWidth,\n spaceTakenByRow,\n createMatrixEachLevel,\n computeLogicalSpace\n } from '../utils';\nimport { COLUMN_ROOT } from '../enums/constants';\nimport VisualMatrix from './visual-matrix';\n\n/**\n * This class used to create column / row matrix for GridLayout\n *\n * @class VisualMatrix\n */\nexport default class ColumnVisualMatrix extends VisualMatrix {\n\n /**\n *Creates an instance of VisualMatrix.\n * @param {any} matrix Two set of matrices\n * @param {any} [config={}] Configuration for VisualMatrix\n * @memberof VisualMatrix\n */\n constructor (matrix, config = {}) {\n super(matrix, config);\n\n this._breakPointer = matrix[0].length;\n\n // Create Tree\n this._tree = {\n key: COLUMN_ROOT,\n values: this.createTree()\n };\n this._logicalSpace = this.computeLogicalSpace();\n }\n\n /**\n * Computes the logical space taken by the entire matrixTree\n *\n * @return {Object} Logical space taken\n * @memberof VisualMatrix\n */\n computeLogicalSpace () {\n const matrixTree = this.tree();\n createMatrixEachLevel(matrixTree, true);\n return computeLogicalSpace(matrixTree, this.config(), this.maxMeasures());\n }\n\n computeViewableSpaces (measures) {\n const {\n maxHeights,\n maxWidths,\n height,\n width\n } = measures;\n\n return this.viewableMatrix.map((matrixInst, i) => {\n const cellDimOptions = { matrixInst, maxWidths, maxHeights, matrixIndex: i, height };\n const {\n heights,\n rowHeights,\n columnWidths\n } = this.getCellDimensions(cellDimOptions);\n const heightMeasures = heights;\n const columnMeasures = [width, width];\n\n return {\n rowHeights: {\n primary: rowHeights[0],\n secondary: rowHeights[1]\n },\n columnWidths: {\n primary: columnWidths[0],\n secondary: columnWidths[1]\n },\n height: {\n primary: heightMeasures[0],\n secondary: heightMeasures[1]\n },\n width: {\n primary: columnMeasures[0],\n secondary: columnMeasures[1]\n }\n };\n });\n }\n\n /**\n *\n *\n * @return\n * @memberof VisualMatrix\n */\n removeExtraCells () {\n const {\n isTransposed,\n extraCellLengths\n } = this.config();\n const matrix = this._layoutMatrix;\n const tree = mergeRecursive({}, this.tree());\n const begCellLen = extraCellLengths[0];\n const endCellLen = extraCellLengths[1] || Number.NEGATIVE_INFINITY;\n const layoutMatrix = !isTransposed ? extraCellsRemover(matrix, begCellLen, endCellLen) :\n matrix.slice(0).map(e => extraCellsRemover(e, begCellLen, endCellLen));\n\n tree.values = extraCellsRemover(tree.values, begCellLen, endCellLen);\n\n tree.matrix = tree.matrix.map(e => extraCellsRemover(e, begCellLen, endCellLen));\n\n return {\n tree,\n layoutMatrix\n };\n }\n\n getPriorityDistribution (measures) {\n const {\n height,\n maxHeights\n } = measures;\n let remainingHeight = height;\n let heightDist = [];\n let conditions = [];\n let divider = 2;\n const priority = this.config().priority;\n const primaryMatrixLength = this.primaryMatrix().length;\n\n if (priority === 2) {\n conditions = [primaryMatrixLength - 1, primaryMatrixLength];\n divider = 2;\n } else {\n conditions = priority === 0 ? [primaryMatrixLength - 1] : [primaryMatrixLength];\n divider = 1;\n }\n maxHeights.forEach((heights, index) => {\n if (conditions.indexOf(index) === -1) {\n heightDist[index] = heights;\n remainingHeight -= heights;\n }\n });\n if (remainingHeight < 0) {\n heightDist = heightDist.map(() => 0);\n } else {\n conditions.forEach((condition) => {\n heightDist[condition] = Math.min(maxHeights[condition], (remainingHeight) / divider);\n });\n }\n return heightDist;\n }\n\n /**\n * Calculates the depth of the tree that can be viewed\n *\n * @param {Array} widthMeasures array of widths\n * @param {Array} heightMeasures array of heights\n * @return {number} depth of the tree\n * @memberof VisualMatrix\n */\n calculateDepth (widthMeasures) {\n let j;\n const { width } = this.availableSpace();\n\n for (j = 0; j < widthMeasures.length; j++) {\n if (widthMeasures[j] <= width) break;\n }\n return Math.min(widthMeasures.length - 1, j);\n }\n\n /**\n * Redistributes the provied space to all cells\n *\n * @param {*} viewableMatrix current viewport matrix\n * @param {*} width provied width\n * @param {*} height provied height\n * @return {Object} current viewports matrixes with measures\n * @memberof VisualMatrix\n */\n redistributeSpaces (width, height) {\n let maxHeights = [];\n let maxWidths = [];\n\n this.viewableMatrix.forEach((matrixInst) => {\n const matrix = matrixInst.matrix;\n const mWidth = 0;\n const mHeight = 0;\n const options = { mWidth, mHeight, matrix, width, height, maxHeights, maxWidths };\n const maxMeasures = this.redistributeViewSpaces(options);\n maxWidths = maxMeasures.maxWidths;\n maxHeights = maxMeasures.maxHeights;\n });\n\n return this.computeViewableSpaces({ height, width, maxHeights, maxWidths });\n }\n\n /**\n * Distibutes the given space column wisely\n *\n * @param {Object} measures Redistribution information\n * @memberof VisualMatrix\n */\n redistributeViewSpaces (measures) {\n let rHeights = [];\n const {\n matrix,\n width,\n maxHeights,\n maxWidths\n } = measures;\n const borderWidth = this.config().unitMeasures.border;\n\n const mWidth = spaceTakenByRow(matrix[this._lastLevelKey]).width;\n const cWidths = getDistributedWidth({\n row: matrix[this._lastLevelKey],\n width: mWidth,\n availableWidth: width\n }, this.config());\n\n matrix.forEach((row, rIdx) => row.forEach((col, cIdx) => {\n const oldLogicalSpace = col.getLogicalSpace();\n\n col.setAvailableSpace(cWidths[cIdx] - borderWidth, oldLogicalSpace.height);\n rHeights[rIdx] = Math.max(rHeights[rIdx] || 0, Math.floor(col.getLogicalSpace().height));\n }));\n if (maxHeights.length > 0) {\n rHeights = rHeights.map((e, i) => Math.max(e, maxHeights[0][i]));\n }\n maxHeights.push(rHeights);\n for (let x = 0; x < maxHeights.length; x++) {\n maxHeights[x] = rHeights;\n }\n maxWidths.push(cWidths);\n return { maxHeights, maxWidths };\n }\n\n /**\n * Dispatch the calculated cell dimensions to all the cells\n *\n * @param {Object} measures cell dimension information\n * @return {Object} row and column heights / widths\n * @memberof VisualMatrix\n */\n getCellDimensions (measures) {\n const {\n unitMeasures\n } = this.config();\n const borderWidth = unitMeasures.border;\n const { matrixInst, height, maxWidths, maxHeights, matrixIndex } = measures;\n const matrix = matrixInst.matrix;\n const rowHeights = [[0], [0]];\n const columnWidths = [[0], [0]];\n const heights = [0, 0];\n const widths = [0, 0];\n const breakPointer = this._breakPointer;\n\n const heightDistribution = this.getPriorityDistribution({ height, maxHeights: maxHeights[0] || [] });\n\n matrix.forEach((row, rIdx) => {\n row.forEach((cell, cIdx) => {\n const colHeight = heightDistribution[rIdx] || 0;\n const colWidth = maxWidths[matrixIndex][cIdx];\n\n cell.setAvailableSpace(colWidth - borderWidth, colHeight);\n\n if (cIdx === 0 && rIdx < breakPointer) {\n rowHeights[0][rIdx] = colHeight;\n heights[0] = (heights[0] || 0) + colHeight;\n } else if (cIdx === 0 && rIdx >= breakPointer) {\n rowHeights[1][rIdx - breakPointer] = colHeight;\n heights[1] = (heights[1] || 0) + colHeight;\n }\n if (rIdx === this._lastLevelKey) {\n columnWidths[0][cIdx] = colWidth;\n columnWidths[1][cIdx] = colWidth;\n }\n });\n });\n return {\n heights,\n widths,\n rowHeights,\n columnWidths\n };\n }\n}\n\n","import {\n HEIGHT, WIDTH, COLUMN, ROW, HORIZONTAL, VERTICAL, HOLISTIC,\n MAX_WIDTH_AVAIL_FOR_COL_MATRIX, COLUMN_MATRIX, MAX_HEIGHT_AVAIL_FOR_ROW_MATRIX, ROW_MATRIX, SCROLL\n} from '../enums/constants';\n\n/**\n * Gets measurement for an instance of visual matrix\n *\n * @param {Array} matrix instance of visual matrix\n * @param {string} type height/width\n * @return {Object} Logical height/width of the matrix\n */\nexport function getMatrixMeasurement (matrix, type) {\n if (matrix) {\n return matrix.getLogicalSpace()[type];\n }\n return 0;\n}\n\n/**\n * Sets available space for an instance of visual matrix\n *\n * @param {Array} matrix instance of visual matrix\n * @param {string} type height/width\n * @param {number} value Value of measurement\n */\nexport function setMatrixMeasurement (matrix, type, value) {\n if (matrix) {\n const spaces = matrix.getLogicalSpace();\n if (value && spaces[type] !== value) {\n type === HEIGHT ? matrix.setAvailableSpace(spaces.width, value) :\n matrix.setAvailableSpace(value, spaces.height);\n }\n }\n}\n\nconst setAvailableSpace = (matrix, widths, heights) => {\n matrix.forEach((row, rIdx) => {\n row.forEach((placeholder, cIdx) => {\n placeholder.setAvailableSpace(widths[cIdx], heights[rIdx]);\n });\n });\n};\n\nconst setViewSpaces = (layout, pointerType, viewSpaces) => {\n let pointer = layout.config()[`${pointerType}Pointer`];\n if (viewSpaces.length - 1 < pointer) {\n pointer = 0;\n layout.config({ [`${pointerType}Pointer`]: pointer });\n }\n return pointer;\n};\n\nconst paginationDetailsMap = {\n column: {\n maxMeasure: MAX_WIDTH_AVAIL_FOR_COL_MATRIX,\n matrix: COLUMN_MATRIX,\n measureType: WIDTH,\n scrollType: HORIZONTAL\n },\n row: {\n maxMeasure: MAX_HEIGHT_AVAIL_FOR_ROW_MATRIX,\n matrix: ROW_MATRIX,\n measureType: HEIGHT,\n scrollType: VERTICAL\n }\n};\n\n/**\n * This method provides the required width/height in the different pagination stages.\n * If the pagination is holistic, then only the max width/height will be provided for layouting\n * If scroll is enabled, then the entire width/height shall be provided for layouting\n * Note: width is required for scrolling the columns while height is required for scrolling rows\n *\n *\n * @param {Layout} layout Layout instance required for configuration details\n * @param {Object} measureDetails different measure details for row/column\n * @param {number} maxMeasure maximum width/height present for column/row respectively\n * @return {number} Provides the width/height based on which further calculation can occur\n */\nconst getMatrixMeasureForPagination = (layout, measureDetails, maxMeasure, buffer) => {\n const {\n pagination\n } = layout.config();\n const {\n matrix,\n measureType,\n scrollType\n } = measureDetails;\n\n switch (pagination) {\n case HOLISTIC:\n return maxMeasure;\n default: {\n const actualMeasure = getMatrixMeasurement(layout[matrix](), measureType) + buffer;\n\n if (actualMeasure > maxMeasure) {\n layout.scrollInfo({ [scrollType]: true });\n }\n return Math.max(maxMeasure, actualMeasure);\n }\n }\n};\n\n/**\n * This method uses the getMatrixMeasureForPagination function to calculate maximum measure\n * depending on the layouting algorithm used\n *\n *\n * @param {Layout} layout Layout instance required for configuration details\n * @param {string} matrixType row/column\n * @param {number} relatedMaxMeasure maximum width/height present for column/row respectively\n * @return {number} Provides the width/height based on which further calculation can occur\n */\nconst paginationMeasureGetter = (layout, matrixType, relatedMaxMeasure, buffer) =>\n getMatrixMeasureForPagination(layout, paginationDetailsMap[matrixType], relatedMaxMeasure, buffer);\n\nconst getMatrixWidthDetails = (layout) => {\n const rowMatrix = layout.rowMatrix();\n const {\n width\n } = layout.measurement();\n const {\n border,\n buffer\n } = layout.config();\n\n // Border adjustment for each cell in the central matrix\n const borderWidth = border.width;\n\n // Get width of row matrix\n const rowMatrixWidth = getMatrixMeasurement(rowMatrix, WIDTH);\n\n // Get maximum width allowed for the row matrix\n const maxRowMatrixWidth = Math.min(rowMatrixWidth + buffer, width / 2);\n\n // Get maximum width available for the column matrix\n const maxWidthAvailableForColumnMatrix = width - maxRowMatrixWidth - borderWidth;\n\n // Set width for column matrix\n const columnMatrixWidth = paginationMeasureGetter(layout, COLUMN, maxWidthAvailableForColumnMatrix, 0);\n\n return {\n rowMatrixWidth,\n maxRowMatrixWidth,\n columnMatrixWidth,\n maxWidthAvailableForColumnMatrix\n };\n};\n\nconst getHeightRequiredByColMatrix = (layout, columnMatrixWidth) => {\n const {\n height\n } = layout.measurement();\n const columnMatrix = layout.columnMatrix();\n\n // Get maximum allowed height for colum matrix\n const maxColumnMatrixHeight = Math.min(columnMatrix.getLogicalSpace().height, height / 2);\n\n // Set the computed width and max height to column matrix to determine the actual height\n // that will be taken by the column matrix\n columnMatrix.setAvailableSpace(columnMatrixWidth, maxColumnMatrixHeight);\n\n // Get the set of pages column view\n const columnViewPages = columnMatrix.getViewableSpaces();\n\n // Figuring out total space needed by current view space\n const columnViewSpace = columnViewPages[layout.config().columnPointer];\n\n // Getting height of column matrix\n const columnMatrixHeight = columnViewSpace.height.primary + columnViewSpace.height.secondary;\n\n return {\n columnMatrixHeight,\n maxColumnMatrixHeight\n };\n};\n\nconst getMatrixHeightDetails = (layout, columnMatrixWidth) => {\n const {\n height\n } = layout.measurement();\n const {\n buffer\n } = layout.config();\n\n // Get actual height required by column matrix\n const { columnMatrixHeight, maxColumnMatrixHeight } = getHeightRequiredByColMatrix(layout, columnMatrixWidth);\n\n // Based on column height, compute max height available for row matrix\n const maxHeightAvailableForRowMatrix = height - Math.min(maxColumnMatrixHeight, columnMatrixHeight);\n\n // Get height for row matrix\n const rowMatrixHeight = paginationMeasureGetter(layout, ROW, maxHeightAvailableForRowMatrix, buffer);\n\n return {\n columnMatrixHeight,\n maxColumnMatrixHeight,\n rowMatrixHeight,\n maxHeightAvailableForRowMatrix\n };\n};\n\nconst setValueMatrixMeasurements = (layout, rowViewableSpaces, columnViewableSpaces) => {\n const centerMatrix = layout.centerMatrix();\n\n const {\n border\n } = layout.config();\n const matrices = layout.matrices();\n const {\n top,\n bottom\n } = matrices;\n\n // Border adjustment for each cell in the central matrix\n const borderWidth = border.width;\n\n // Get the heights for each cell in the row matrix\n const rowHeights = [].concat(...rowViewableSpaces.map(e => e.rowHeights.primary));\n\n // Get the widths for each of the row matrix cells(primary and secondary)\n const rowWidthsPrimary = [].concat(...rowViewableSpaces.map(e => e.columnWidths.primary));\n const rowWidthsSecondary = [].concat(...rowViewableSpaces.map(e => e.columnWidths.secondary));\n\n // Get the widths for each cell in the column matrix\n const columnWidths = [].concat(...columnViewableSpaces.map(e => e.columnWidths.primary));\n\n // Get the widths for each of the column matrix cells(primary and secondary)\n const columnHeightsPrimary = columnViewableSpaces[0].rowHeights.primary;\n const columnHeightsSecondary = [].concat(...columnViewableSpaces.map(e => e.rowHeights.secondary));\n\n // Setting the available space for each cell in the centre matrix computed throught the row and\n // column matrices\n centerMatrix.forEach((matrix, rIdx) => {\n matrix.forEach((placeholder, cIdx) => {\n placeholder.setAvailableSpace(columnWidths[cIdx] - borderWidth, rowHeights[rIdx] - borderWidth);\n });\n });\n\n // Set the heights and widths for the corner matrices namely:\n // TOP_LEFT\n setAvailableSpace(top[0], rowWidthsPrimary, columnHeightsPrimary);\n // TOP_RIGHT\n setAvailableSpace(top[2], rowWidthsSecondary, columnHeightsPrimary);\n // BOTTOM_LEFT\n setAvailableSpace(bottom[0], rowWidthsPrimary, columnHeightsSecondary);\n // BOTTOM_RIGHT\n setAvailableSpace(bottom[2], rowWidthsSecondary, columnHeightsSecondary);\n};\n\nconst bufferCondition = {\n isScroll: true,\n pagination: SCROLL\n};\n\nconst getBufferFromCondition = (layout, type) => {\n const scrollInfo = layout.scrollInfo();\n const {\n pagination\n } = layout.config();\n\n const currentBufferType = {\n pagination,\n isScroll: scrollInfo[type]\n };\n\n return Object.keys(bufferCondition).every(e => bufferCondition[e] === currentBufferType[e]);\n};\n\nconst getActualBufferFromConfig = (layout) => {\n const {\n buffer\n } = layout.config();\n const [horizontalBuffer, verticalBuffer] = [HORIZONTAL, VERTICAL].map((type) => {\n if (getBufferFromCondition(layout, type)) {\n return buffer;\n }\n return 0;\n });\n\n return {\n horizontalBuffer,\n verticalBuffer\n };\n};\n/**\n * Computes the measurements of space for all matrices in the\n * layout\n *\n * @param {Object} layout Instance of grid layout\n * @return {Object} set of measurements for the layout\n */\nexport const computeLayoutMeasurements = (layout) => {\n const rowMatrix = layout.rowMatrix();\n const columnMatrix = layout.columnMatrix();\n\n // Compute the widths of the row and column matrices\n const {\n rowMatrixWidth,\n maxRowMatrixWidth,\n maxWidthAvailableForColumnMatrix,\n columnMatrixWidth\n } = getMatrixWidthDetails(layout);\n\n // Compute the heights of the row and column matrices\n const {\n columnMatrixHeight,\n rowMatrixHeight,\n maxHeightAvailableForRowMatrix\n } = getMatrixHeightDetails(layout, columnMatrixWidth);\n\n const {\n horizontalBuffer,\n verticalBuffer\n } = getActualBufferFromConfig(layout);\n rowMatrix.setAvailableSpace(maxRowMatrixWidth - verticalBuffer, rowMatrixHeight - horizontalBuffer);\n\n // Get row and columns viewable spaces\n const rowViewableSpaces = rowMatrix.getViewableSpaces();\n const columnViewableSpaces = columnMatrix.getViewableSpaces();\n\n // Set view spaces for row and columns\n setViewSpaces(layout, ROW, rowViewableSpaces);\n setViewSpaces(layout, COLUMN, columnViewableSpaces);\n\n // Set measures for each cell of the value matrix\n setValueMatrixMeasurements(layout, rowViewableSpaces, columnViewableSpaces);\n\n return {\n rowMatrixHeight: rowMatrixHeight - horizontalBuffer,\n rowMatrixWidth: rowMatrixWidth - verticalBuffer,\n maxHeightAvailableForRowMatrix: maxHeightAvailableForRowMatrix - horizontalBuffer,\n\n columnMatrixHeight,\n columnMatrixWidth,\n maxWidthAvailableForColumnMatrix\n };\n};\n","/**\n * Gets view matrices based on current pointers for row and column\n *\n * @param {Object} layout instance of layout\n * @param {number} rowPointer current row pointer\n * @param {number} columnPointer current column pointer\n * @return {Object} returns the view matrix and its relevant information\n */\nexport const getViewMatrices = (layout, rowPointer, columnPointer) => {\n const rowMatrix = layout.rowMatrix();\n const columnMatrix = layout.columnMatrix();\n const centerMatrix = layout.centerMatrix();\n const matrices = layout.matrices();\n const rowMatrices = rowMatrix.getViewableMatrices();\n const columnMatrices = columnMatrix.getViewableMatrices();\n const centralMatrixPointer = {\n row: 0,\n column: 0\n };\n\n for (let i = rowPointer - 1; i >= 0; i--) {\n const length = Math.max(rowMatrices[i].primaryMatrix.length,\n rowMatrices[i].secondaryMatrix.length);\n centralMatrixPointer.row += length;\n }\n /* istanbul ignore next */\n for (let i = columnPointer - 1; i >= 0; i--) {\n const matrix = columnMatrices[i];\n const { primaryMatrix, secondaryMatrix } = matrix;\n const length = Math.max(primaryMatrix[0] ? primaryMatrix[0].length : 0,\n secondaryMatrix[0] ? secondaryMatrix[0].length : 0);\n centralMatrixPointer.column += length;\n }\n\n matrices.top[1] = columnMatrices[columnPointer].primaryMatrix;\n matrices.bottom[1] = columnMatrices[columnPointer].secondaryMatrix;\n\n matrices.center[0] = rowMatrices[rowPointer].primaryMatrix;\n matrices.center[2] = rowMatrices[rowPointer].secondaryMatrix;\n\n const rowMatrixLen = Math.max(matrices.center[0].length, matrices.center[2].length);\n /* istanbul ignore next */\n const columnMatrixLen = Math.max(matrices.top[1][0] ? matrices.top[1][0].length : 0, matrices.bottom[1][0] ?\n matrices.bottom[1][0].length : 0);\n matrices.center[1] = centerMatrix.slice(centralMatrixPointer.row, centralMatrixPointer.row + rowMatrixLen)\n .map(matrix => matrix.slice(centralMatrixPointer.column, centralMatrixPointer.column + columnMatrixLen));\n\n return {\n matrices,\n rowPages: rowMatrices.length,\n columnPages: columnMatrices.length\n };\n};\n\nconst measureSum = measureArr => measureArr.reduce((total, measure) => total + measure, 0);\n/**\n * Returns measurements of the cells of the current matrix\n *\n * @param {Object} layout instance of layout\n * @return {Object} returns the measurements for current view matrix\n */\nexport const getViewMeasurements = (layout, maxRowHeight, maxColWidth) => {\n const rowMatrix = layout.rowMatrix();\n const columnMatrix = layout.columnMatrix();\n const {\n columnPointer,\n rowPointer\n } = layout.config();\n\n const rowSpaces = rowMatrix.getViewableSpaces()[rowPointer];\n const colSpaces = columnMatrix.getViewableSpaces()[columnPointer];\n\n const {\n rowHeights,\n width: rowMatrixWidth\n } = rowSpaces;\n const {\n columnWidths,\n height: columnMatrixHeight\n } = colSpaces;\n\n const { primary: leftWidth, secondary: rightWidth } = rowMatrixWidth;\n const { primary: topHeight, secondary: bottomHeight } = columnMatrixHeight;\n\n const centerHeight = measureSum(rowHeights.primary);\n const centerWidth = measureSum(columnWidths.primary);\n const viewWidth = [leftWidth, Math.min(centerWidth, maxColWidth), rightWidth];\n const viewHeight = [topHeight, Math.min(centerHeight, maxRowHeight), bottomHeight];\n\n return {\n viewWidth,\n viewHeight,\n actualCenterMeasures: {\n height: centerHeight,\n width: centerWidth\n },\n totalMeasures: {\n width: measureSum(viewWidth),\n height: measureSum(viewHeight)\n },\n unitHeights: rowHeights,\n unitWidths: columnWidths\n };\n};\n","/**\n * This file declares a table that can be extended to create a Datagrid, crosstab\n * and man other visualzations that require a tabular structure.\n */\n\nimport { getUniqueId, mergeRecursive } from 'muze-utils';\nimport GenericLayout from '../generic-layout';\nimport { DEFAULT_CONFIGURATION, DEFAULT_MEASUREMENTS } from './defaults';\nimport { generateVisualMatrices } from './layout-helper';\nimport { computeLayoutMeasurements } from './computations';\nimport { getViewMeasurements, getViewMatrices } from './view-info-getter';\n/**\n * This class is used to create a tabular structure that\n * can house charts and values.\n *\n * @class GridLayout\n */\nexport default class GridLayout extends GenericLayout {\n\n /**\n * Creates an instance of TableLayout.\n * @param {HTMLElement} matrices Set of upto 9 matrices containing the cells to be rendered\n * @param {HTMLElement} mountPoint DOM element/d3 selection where the layout is to be mounted\n * @param {Object} measurement The dimensions of the layout\n * @param {Object} config external configurations.\n * @memberof GenericLayout\n */\n constructor (matrices, mountPoint, measurement, config) {\n super(mountPoint, measurement, config);\n this.matrices(matrices);\n this.config(this.constructor.defaultConfig());\n this._layoutId = getUniqueId();\n this._viewInfo = this.constructor.defaultViewInfo();\n this._scrollInfo = { horizontal: false, vertical: false };\n }\n\n static defaultViewInfo () {\n return Object.assign({}, {\n layoutDimensions: {\n border: this.defaultConfig().border,\n viewHeight: [0, 0, 0],\n viewWidth: [0, 0, 0]\n },\n viewMatricesInfo: {\n columnPages: 0,\n rowPages: 0,\n matrices: { top: [], center: [], bottom: [] }\n }\n });\n }\n\n /**\n * Returns initial set of measurements for the grid layout\n *\n * @static\n * @return {Object} Returns initial set of measurements\n * @memberof GridLayout\n */\n static defaultMeasurement () {\n return DEFAULT_MEASUREMENTS;\n }\n\n /**\n * Returns initialconfiguration for grid layout\n *\n * @static\n * @return {Object} Returns initial configuration for grid layout\n * @memberof GridLayout\n */\n static defaultConfig () {\n return DEFAULT_CONFIGURATION;\n }\n\n /**\n * This function is used to return an instance of GridLayout\n *\n * @return {GridLayout} Instance of grid layout.\n * @static\n * @memberof GridLayout\n */\n static create () {\n return new GridLayout(null, null, this.defaultMeasurement(), this.defaultConfig());\n }\n\n /**\n * Sets/Gets the matrices for the layout\n *\n * @param {Array} matrices Set of matrices\n * @return {Object} Getter/Setter\n * @memberof GridLayout\n */\n matrices (matrices) {\n if (matrices) {\n this._matrices = generateVisualMatrices(this, matrices);\n return this;\n }\n return super.matrices(matrices);\n }\n\n /**\n * Triggers the computations for the layout based on the matrices available\n * This causes a reflow in the entire layout system.\n *\n * @return {Object} Layout instance\n * @memberof GridLayout\n */\n triggerReflow () {\n this.scrollInfo({ horizontal: false, vertical: false });\n const {\n maxHeightAvailableForRowMatrix,\n maxWidthAvailableForColumnMatrix\n } = computeLayoutMeasurements(this);\n\n this.setViewInformation(maxHeightAvailableForRowMatrix, maxWidthAvailableForColumnMatrix);\n return this;\n }\n\n gotoPage (type, pageNumber) {\n const pageType = type.toLowerCase();\n const { viewMatricesInfo } = this.viewInfo();\n const totalPages = viewMatricesInfo[`${pageType}Pages`];\n const pointer = Math.min(Math.max(1, pageNumber), totalPages);\n this.config({\n [`${pageType}Pointer`]: pointer - 1\n });\n this.setViewInformation();\n this.renderGrid();\n return this;\n }\n\n pages (type) {\n const { viewMatricesInfo } = this.viewInfo();\n const pageType = type.toLowerCase();\n return {\n totalPages: viewMatricesInfo[`${pageType}Pages`],\n currentPage: this.config()[`${pageType}Pointer`] + 1\n };\n }\n\n viewInfo (...viewInfo) {\n if (viewInfo.length) {\n this._viewInfo = viewInfo[0];\n return this;\n }\n return this._viewInfo;\n }\n\n scrollInfo (...scrollInfo) {\n if (scrollInfo.length) {\n this._scrollInfo = mergeRecursive(this._scrollInfo, scrollInfo[0]);\n return this;\n }\n return this._scrollInfo;\n }\n\n /**\n *\n *\n * @returns\n * @memberof GridLayout\n */\n setViewInformation (maxRowHeight, maxColWidth) {\n const {\n rowPointer,\n columnPointer,\n border\n } = this.config();\n const viewMatricesInfo = getViewMatrices(this, rowPointer, columnPointer);\n const layoutDimensions = getViewMeasurements(this, maxRowHeight, maxColWidth);\n layoutDimensions.border = border;\n this.viewInfo({\n viewMatricesInfo,\n layoutDimensions\n });\n return this;\n }\n}\n","import RowMatrix from '../visual-matrix/row-matrix';\nimport ColumnMatrix from '../visual-matrix/column-matrix';\n\nexport const generateVisualMatrices = (context, matrices) => {\n // Set of matrices for layout is generated starting with the left matrix\n let leftMatrix = [];\n let rightMatrix = [];\n let topMatrix = [];\n let bottomMatrix = [];\n let begColCells;\n let endColCells;\n const {\n isRowSizeEqual,\n isColumnSizeEqual,\n gutterSpace,\n distribution,\n border,\n breakPage,\n priority\n } = context.config();\n const {\n minUnitHeight,\n minUnitWidth\n } = context.measurement();\n const { top, center, bottom } = matrices;\n const [topLeft, topColumns, topRight] = top;\n const [leftRows, valueMatrix, rightRows] = center;\n const [bottomLeft, bottomColumns, bottomRight] = bottom;\n\n if (leftRows.length > 0) {\n // If no left matrix is present, context will be empty\n leftMatrix = [...topLeft, ...leftRows, ...bottomLeft];\n }\n if (rightRows.length > 0) {\n // If no right matrix is present, context will be empty\n rightMatrix = [...topRight, ...rightRows, ...bottomRight];\n }\n if (topColumns.length > 0 && topColumns[0].length > 0) {\n // If no top matrix is present, context will be empty\n topMatrix = topColumns.map((d, i) => [...topLeft[i], ...d, ...topRight[i]]);\n }\n if (bottomColumns.length > 0 && bottomColumns[0].length > 0) {\n // If no bottom matrix is present, context will be empty\n bottomMatrix = bottomColumns.map((d, i) => [...bottomLeft[i], ...d, ...bottomRight[i]]);\n }\n\n context.rowMatrix(new RowMatrix([leftMatrix, rightMatrix], {\n isDistributionEqual: isRowSizeEqual,\n distribution: distribution.rows,\n gutter: gutterSpace.rows,\n unitMeasures: {\n width: minUnitWidth,\n height: minUnitHeight,\n border: border.width\n },\n priority: priority.row,\n breakPage: breakPage.rows.map(e => e + Math.max(topLeft.length, topRight.length)),\n extraCellLengths: [topLeft.length, bottomLeft.length]\n }));\n\n if (topLeft.length > 0) {\n begColCells = topLeft[0].length;\n } else {\n begColCells = bottomLeft.length > 0 ? bottomLeft[0].length : 0;\n }\n\n if (topRight.length > 0) {\n endColCells = topRight[0].length;\n } else {\n endColCells = bottomRight.length > 0 ? bottomRight[0].length : 0;\n }\n\n context.columnMatrix(new ColumnMatrix([topMatrix, bottomMatrix], {\n isDistributionEqual: isColumnSizeEqual,\n distribution: distribution.columns,\n gutter: gutterSpace.columns,\n isTransposed: true,\n unitMeasures: {\n width: minUnitWidth,\n height: minUnitHeight,\n border: border.width\n },\n priority: priority.col,\n breakPage: breakPage.columns,\n extraCellLengths: [begColCells, endColCells]\n }));\n context.centerMatrix(valueMatrix);\n\n return matrices;\n};\n","import {\n TOP, BOTTOM, LEFT, RIGHT, CENTER, BLANK_BORDERS, COLUMN, ROW,\n VIEW_INDEX, ROW_MATRIX_INDEX, COLUMN_MATRIX_INDEX, MIDDLE, NO_BORDERS\n} from '../enums/constants';\n\nconst borderMap = {\n [`${TOP}-${LEFT}`]: NO_BORDERS,\n [`${TOP}-${MIDDLE}`]: COLUMN,\n [`${TOP}-${RIGHT}`]: NO_BORDERS,\n [`${CENTER}-${LEFT}`]: ROW,\n [`${CENTER}-${MIDDLE}`]: CENTER,\n [`${CENTER}-${RIGHT}`]: ROW,\n [`${BOTTOM}-${LEFT}`]: NO_BORDERS,\n [`${BOTTOM}-${MIDDLE}`]: COLUMN,\n [`${BOTTOM}-${RIGHT}`]: NO_BORDERS\n};\n\nconst applySpecificBorder = (cells, color, type, style) => {\n cells.style(`border-${type}`, `${style} ${color}`);\n};\n\nconst specificBorderApplier = (borderTypes, showBorders, cells, borderInfo) => {\n const {\n color,\n width,\n style\n } = borderInfo;\n const borderStyle = `${width}px ${style}`;\n\n borderTypes.forEach((borderType) => {\n applySpecificBorder(cells, showBorders[borderType] ? color : BLANK_BORDERS, borderType, borderStyle);\n });\n};\n\nconst borderApplier = (cells, borderInfo) => {\n const {\n showRowBorders,\n showColBorders,\n showValueBorders\n } = borderInfo;\n return {\n row: () => specificBorderApplier([TOP, BOTTOM], showRowBorders, cells, borderInfo),\n column: () => specificBorderApplier([LEFT, RIGHT], showColBorders, cells, borderInfo),\n center: () => specificBorderApplier([LEFT, RIGHT, TOP, BOTTOM], showValueBorders, cells, borderInfo)\n };\n};\n\nexport const applyBorders = (cells, border, row, column) => {\n const borderApplierFn = borderApplier(cells, border);\n const borderMapVal = borderMap[`${ROW_MATRIX_INDEX[VIEW_INDEX[row]]}-${COLUMN_MATRIX_INDEX[column]}`];\n if (borderMapVal) {\n borderApplierFn[borderMapVal]();\n }\n};\n","import { selectElement } from 'muze-utils';\nimport {\n TOP, BOTTOM, ROW_SPAN, COL_SPAN, CENTER, ROW, COLUMN\n} from '../enums/constants';\n\nconst orderMaker = arr => Array.from(Array(arr.length).keys());\n\nconst nestByStack = (stack, updateArr, optionalParams = {}) => {\n let {\n order,\n keyFn\n } = optionalParams;\n const arr = updateArr.slice();\n const currStack = stack.slice();\n const prevStack = currStack.slice();\n // Order in which element are to be checked for nesting, default normal looping\n // Order is always in the order of nest, i.e., left to right\n order = order || Array.from(Array(arr.length).keys());\n\n // Key function, if array of objects\n keyFn = keyFn || (v => v);\n\n // Return same array if stack is empty\n if (currStack.length === 0) {\n const newArr = [];\n order.forEach((e) => {\n newArr.push(arr[e]);\n });\n return { prevStack, currStack: arr, arr: newArr };\n }\n\n let arrVal = '';\n let stackVal = '';\n const newArr = [];\n\n // Loop in order\n for (let i = order.length - 1; i >= 0; i--) {\n // Get current element index from the order given\n const currElemIndex = order[i];\n\n // Crete a hashmap for the hierarchy by joining strings of the array for both stack and input array\n arrVal += keyFn(arr[currElemIndex]);\n stackVal += keyFn(currStack[currElemIndex]);\n\n // If the current value and value in stack is same, convert it to null\n if (arrVal === stackVal) {\n newArr[currElemIndex] = null;\n } else {\n stackVal = '';\n // Loop from the current index in order to the last element in order to change the\n // whole hierarchy\n for (let j = i; j < order.length; j++) {\n const newElem = order[j];\n const arrElem = arr[newElem];\n\n newArr[newElem] = arrElem;\n\n // Reset stack to new stack\n currStack[newElem] = arrElem;\n stackVal = arrVal;\n }\n }\n }\n const returnArr = [];\n order.forEach((e) => {\n returnArr.push(newArr[e]);\n });\n return { prevStack, currStack, arr: returnArr };\n};\n\nconst spanCalculator = (colData, colIdx, matrix, rIdx) => {\n // if data is not header cell then rowspan\n // has to be 1\n if (!colData) {\n return () => 1;\n }\n\n const conditions = {\n row: count => matrix[rIdx + count] && matrix[rIdx + count][colIdx],\n column: count => matrix[rIdx][colIdx + count]\n };\n\n return (type) => {\n let count = 1;\n let isNull = false;\n\n while (!isNull) {\n if (conditions[type](count) === null) {\n count += 1;\n } else {\n isNull = true;\n }\n }\n return count;\n };\n};\n\nconst maskCreator = (matrix, order) => ({\n row: () => {\n let stack = [];\n return matrix.map((e) => {\n const {\n currStack,\n arr\n } = nestByStack(stack, e, { keyFn: val => val.valueOf(), order });\n\n stack = currStack;\n return arr;\n });\n },\n column: () => {\n let stack = [];\n const viewMatrix = [];\n matrix.length && matrix[0].forEach((cell, colIndex) => {\n const hierarchy = [];\n matrix.forEach((row) => {\n hierarchy.push(row[colIndex]);\n });\n const {\n currStack,\n arr\n } = nestByStack(stack, hierarchy, { keyFn: val => val.valueOf(), order });\n stack = currStack;\n\n matrix.forEach((row, rowIndex) => {\n viewMatrix[rowIndex] = viewMatrix[rowIndex] || [];\n viewMatrix[rowIndex][colIndex] = arr[rowIndex];\n });\n });\n return viewMatrix;\n }\n});\n\nconst spanGenerator = viewMatrix => ({\n row: () => {\n const spans = [];\n viewMatrix.forEach((row, ridx) => {\n spans[ridx] = spans[ridx] || [];\n row.forEach((col, i) => {\n if (viewMatrix[ridx][i]) {\n const currSpan = spanCalculator(col, i, viewMatrix, ridx)('row');\n currSpan && spans[ridx].push(currSpan);\n }\n });\n });\n return spans;\n },\n column: () => viewMatrix.map((row, ridx) => row.map((col, i) => spanCalculator(col, i, viewMatrix, ridx)('column'))\n .filter(col => col !== 1))\n});\n\nconst getOrder = isReverse => ({\n row: (matrix) => {\n if (isReverse) {\n return orderMaker(matrix[0]).reverse();\n }\n return orderMaker(matrix[0]);\n },\n column: (matrix) => {\n if (isReverse) {\n return orderMaker(matrix).reverse();\n }\n return orderMaker(matrix);\n }\n});\n\nconst matrixSpanGeneratorMap = {\n [`${TOP}-1`]: {\n orderGetter: getOrder(false)[COLUMN],\n viewMatrixMaker: (...params) => maskCreator(...params)[COLUMN],\n spanMaker: (...params) => spanGenerator(...params)[COLUMN]\n },\n [`${BOTTOM}-1`]: {\n orderGetter: getOrder(true)[COLUMN],\n viewMatrixMaker: (...params) => maskCreator(...params)[COLUMN],\n spanMaker: (...params) => spanGenerator(...params)[COLUMN]\n },\n [`${CENTER}-0`]: {\n orderGetter: getOrder(false)[ROW],\n viewMatrixMaker: (...params) => maskCreator(...params)[ROW],\n spanMaker: (...params) => spanGenerator(...params)[ROW]\n },\n [`${CENTER}-2`]: {\n orderGetter: getOrder(true)[ROW],\n viewMatrixMaker: (...params) => maskCreator(...params)[ROW],\n spanMaker: (...params) => spanGenerator(...params)[ROW]\n }\n};\n\nconst matrixSpanGenerator = (type) => {\n const generator = matrixSpanGeneratorMap[type];\n if (generator) {\n return generator;\n }\n return {\n orderGetter: () => null,\n viewMatrixMaker: matrix => () => matrix,\n spanMaker: () => () => null\n };\n};\n\n/**\n * This function is used to set the col and row spans\n * for the matrices based on repeated/hierarchichal data\n *\n * @export\n * @param {Array} matrix The 2d array for which filtering is to be done\n * @param {string} type Type of array (center, top, bottom)\n * @param {number} index Index of array in the row\n * @return {Object} containing the view matrix and their spans\n */\nexport function cellSpanMaker (matrix, type, index) {\n let spans = null;\n let viewMatrix = matrix;\n const {\n orderGetter,\n viewMatrixMaker,\n spanMaker\n } = matrixSpanGenerator(`${type}-${index}`);\n\n if (matrix.length) {\n const order = orderGetter(matrix);\n viewMatrix = viewMatrixMaker(matrix, order)();\n spans = spanMaker(viewMatrix)();\n }\n return { viewMatrix, spans };\n}\n\nconst spaceAllocationDueToSpan = (span = 1, placeholder, config, index) => {\n const height = placeholder.availHeight();\n const width = placeholder.availWidth();\n const borderWidth = config.border.width;\n const { unitWidths } = config.dimensions;\n const { col } = index;\n\n return {\n [ROW_SPAN] () {\n placeholder.setAvailableSpace(width, height * span);\n },\n [COL_SPAN] () {\n if (span > 1) {\n let cumulativeWidth = 0;\n for (let i = col; i < col + span; i++) {\n cumulativeWidth += unitWidths.primary[i] - borderWidth;\n }\n placeholder.setAvailableSpace(cumulativeWidth + borderWidth, height);\n }\n selectElement(this).style('height', `${height}px`);\n }\n };\n};\n\nconst spanApplier = (cells, spans, config, type) => {\n let cellCounter = 0;\n cells.attr(type, function (cell, colIndex) {\n const span = spans[cell.rowIndex][colIndex];\n const placeholder = cell.placeholder;\n const index = {\n row: cell.rowIndex,\n col: cellCounter\n };\n\n spaceAllocationDueToSpan(span, placeholder, config, index)[type].bind(this)();\n cellCounter += span;\n return span;\n });\n};\n\nconst spanApplierMap = {\n [`${TOP}-0`]: null,\n [`${TOP}-1`]: (...params) => spanApplier(...params, COL_SPAN),\n [`${TOP}-2`]: null,\n [`${CENTER}-0`]: (...params) => spanApplier(...params, ROW_SPAN),\n [`${CENTER}-1`]: null,\n [`${CENTER}-2`]: (...params) => spanApplier(...params, ROW_SPAN),\n [`${BOTTOM}-0`]: null,\n [`${BOTTOM}-1`]: (...params) => spanApplier(...params, COL_SPAN),\n [`${BOTTOM}-2`]: null\n};\n\nexport const applySpans = (cells, spans, config, type) => {\n const applier = spanApplierMap[type];\n if (applier) {\n applier(cells, spans, config);\n }\n};\n","import { ERROR_MSG } from 'muze-utils';\n/**\n * An Interface to be implemented if the transaction support is necessary. This class ensures reactivity to\n * global properties.\n */\nexport default class TransactionSupport {\n /**\n * Property accessor for data member of the class. Data is passed to the system by calling this method.\n */\n data () {\n throw new Error(ERROR_MSG.INTERFACE_IMPl);\n }\n\n /**\n * Property accessor for width of the class. Width is passed as an integer.\n */\n width () {\n throw new Error(ERROR_MSG.INTERFACE_IMPl);\n }\n\n /**\n * Property accessor for height of the class. Height is passed as an integer.\n */\n height () {\n throw new Error(ERROR_MSG.INTERFACE_IMPl);\n }\n\n /**\n * Property accessor for config of the class. Config is passed as an object.\n */\n config () {\n throw new Error(ERROR_MSG.INTERFACE_IMPl);\n }\n}\n","import { TOP, BOTTOM, LEFT, TITLE, SUB_TITLE, GROUP, LAYOUT, LEGEND } from '../constants';\n\n/**\n *\n *\n * @param {*} context\n *\n */\nexport const arrangeComponents = (context) => {\n const legendConfig = context.config().legend;\n const titleConfig = context.title()[1];\n const subtitleConfig = context.subtitle()[1];\n const titleLayouts = {\n [`${TOP}-${TOP}`]: [TITLE, SUB_TITLE, GROUP],\n [`${BOTTOM}-${BOTTOM}`]: [GROUP, SUB_TITLE, TITLE],\n [`${TOP}-${BOTTOM}`]: [TITLE, GROUP, SUB_TITLE],\n [`${BOTTOM}-${TOP}`]: [SUB_TITLE, GROUP, TITLE]\n };\n const legendLayouts = [\n [LEGEND, LAYOUT],\n [LAYOUT, LEGEND]\n ];\n const titlePosition = titleConfig.position || TOP;\n const subtitlePosition = subtitleConfig.position || TOP;\n\n return {\n headers: titleLayouts[`${titlePosition}-${subtitlePosition}`],\n legends: legendConfig.position === LEFT || legendConfig.position === TOP ?\n legendLayouts[0] : legendLayouts[1]\n };\n};\n","/**\n * Flag to specify whether direction is vertical.\n */\nexport const MARGIN = 'margin';\nexport const LEFT = 'left';\nexport const RIGHT = 'right';\nexport const BOTTOM = 'bottom';\nexport const TOP = 'top';\nexport const SPACE_FIXER = 'spaceFixer';\nexport const CLASSPREFIX = 'muze';\nexport const VERTICAL_ALIGN = 'verticalAlign';\nexport const TEXT_ALIGN = 'textAlign';\nexport const IS_OFFSET = 'isOffset';\nexport const MIDDLE = 'middle';\nexport const BASELINE = 'baseline';\nexport const SHOW = 'show';\nexport const CENTER = 'center';\nexport const TEXT = 'text';\nexport const HEADER = 'header';\nexport const HEIGHT = 'height';\nexport const WIDTH = 'width';\nexport const DATA = 'data';\nexport const AXES = 'axes';\nexport const FACET_BY_FIELDS = 'facetByFields';\nexport const FIELDS = 'fields';\nexport const TRANSFORM = 'transform';\nexport const LAYER_DEF = 'layerDef';\nexport const CONFIG = 'config';\nexport const DETAIL_FIELDS = 'detailFields';\nexport const MAX_LINES = 'maxLines';\nexport const MIN_CHARS = 'minCharacters';\nexport const ROTATION = 'rotation';\n\nexport const TEXT_CELL = 'text-cell';\nexport const AXIS_CELL = 'axis-cell';\nexport const GEOM_CELL = 'geom-cell';\nexport const BLANK_CELL = 'blank-cell';\n","// eneum to refer to simple cell\nexport const SIMPLE = 'simple';\n// eneum to refer to header cell\nexport const TEXT = 'text';\n// enum to refer to axis cell\nexport const AXIS = 'axis';\n// enum to refer to visual cell\nexport const GEOM = 'geom';\n// enum to refer blank cell\nexport const BLANK = 'blank';\n","import {\n ERROR_MSG,\n getUniqueId,\n mergeRecursive\n} from 'muze-utils';\nimport { SIMPLE } from './enums/cell-type';\n\n/**\n * This file declares a class that is used as an interface to create new\n * SimpleCell elements.\n * @module SimpleCell\n */\n/**\n * Base class for all table cells.\n *\n * @interface\n * @class SimpleCell\n */\nclass SimpleCell {\n\n /**\n * Creates an instance of SimpleCell.\n *\n * @param {*} config The input configuration.\n * @memberof SimpleCell\n */\n constructor (config) {\n this._id = getUniqueId();\n\n const defConfig = mergeRecursive({}, this.constructor.defaultConfig());\n this._config = mergeRecursive(defConfig, config || {});\n\n this._mount = null;\n }\n\n /**\n * Returns the type of the placehlder.\n *\n * @readonly\n * @memberof SimpleCell\n */\n get type () {\n return SIMPLE;\n }\n\n /**\n * Returns the type of the placehlder.\n *\n * @readonly\n * @memberof SimpleCell\n * @return {Object} Default config for the placeholder\n */\n static defaultConfig () {\n return {};\n }\n\n /**\n * Returns the value contained by the SimpleCell.\n *\n * @memberof SimpleCell\n */\n valueOf () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Returns a unique identifier for the instance used\n * to control selective rendering.\n *\n * @memberof SimpleCell\n */\n id () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Returns a serialized representation of the instance.\n *\n * @memberof SimpleCell\n */\n serialize () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Returns an object with width and height fields\n * specifying the space taken up by this metod.\n *\n * @memberof SimpleCell\n */\n getLogicalSpace () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Method used to set the space available to render the SimpleCell\n *\n * @param {number} width The available width.\n * @param {number} height The available height.\n * @memberof SimpleCell\n */\n setAvailableSpace () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Render the SimpleCell inthe supplied mount point.\n *\n * @param {HTMLElement} mount The mount point to render in.\n * @memberof SimpleCell\n */\n render () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Render the SimpleCell inthe supplied mount point.\n *\n * @param {HTMLElement} mount The mount point to render in.\n * @memberof SimpleCell\n */\n remove () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n getMinMeasures (providedMinMeasure = 0) {\n return providedMinMeasure;\n }\n\n}\n\nexport default SimpleCell;\n","/**\n * This file exports variables that are used as defaults for\n * the placeholders\n */\nimport * as CONSTANTS from './constants';\n\n /**\n * Default Configuration for the cells\n * @return {Object} Default configuration\n */\nexport const DEFAULT_CONFIG = {\n [CONSTANTS.MARGIN]: {\n [CONSTANTS.LEFT]: 0,\n [CONSTANTS.RIGHT]: 0,\n [CONSTANTS.TOP]: 0,\n [CONSTANTS.BOTTOM]: 0\n },\n [CONSTANTS.SPACE_FIXER]: 2,\n [CONSTANTS.IS_OFFSET]: false,\n [CONSTANTS.VERTICAL_ALIGN]: null,\n [CONSTANTS.TEXT_ALIGN]: CONSTANTS.CENTER,\n [CONSTANTS.SHOW]: true,\n [CONSTANTS.MAX_LINES]: 0,\n [CONSTANTS.MIN_CHARS]: 0,\n [CONSTANTS.ROTATION]: null\n};\n","import { mergeRecursive } from 'muze-utils';\nimport { GEOM, TEXT, AXIS, BLANK } from './enums/cell-type';\n\nconst DEFAULT_PROPS = {\n mount: {},\n availHeight: {},\n availWidth: {},\n config: {\n sanitization: (context, value) => mergeRecursive(context._config, value)\n },\n logicalSpace: {},\n minSpacing: {},\n source: {}\n};\n\nconst geomProps = {\n data: {},\n caption: {},\n config: {},\n axes: {},\n facetByFields: {},\n fields: {},\n transform: {},\n layerDef: {},\n detailFields: {}\n};\n\nconst textProps = {\n smartText: {}\n};\nexport const PROPS = {\n [GEOM]: mergeRecursive(geomProps, DEFAULT_PROPS),\n [TEXT]: mergeRecursive(textProps, DEFAULT_PROPS),\n [AXIS]: DEFAULT_PROPS,\n [BLANK]: DEFAULT_PROPS\n};\n","/**\n * This file declares a class that represents a table cell\n * used to house an axis.\n * @module VisualCell\n */\nimport { selectElement, makeElement, generateGetterSetters } from 'muze-utils';\nimport { CLASSPREFIX, HEIGHT, WIDTH, AXIS_CELL, BOTTOM, TOP } from './enums/constants';\nimport SimpleCell from './simple-cell';\nimport { DEFAULT_CONFIG } from './enums/defaults';\nimport { AXIS } from './enums/cell-type';\nimport { PROPS } from './props';\n\n/**\n * Computes the logical space of the an axis instance within an axis cell\n *\n * @param {Object} context Required to get the needed parameters to compute axis space\n * @return {Object} Returns the logical space for axis\n */\nconst computeAxisSpace = (context) => {\n let logicalWidth;\n let logicalHeight;\n const axis = context.source();\n const {\n spaceFixer,\n margin\n } = context.config();\n const {\n width,\n height\n } = axis.getLogicalSpace();\n const {\n show\n } = axis.config();\n if (show === true) {\n logicalHeight = Math.floor(height + margin.top + margin.bottom + spaceFixer);\n logicalWidth = Math.floor(width + margin.left + margin.right + spaceFixer);\n } else {\n [logicalWidth, logicalHeight] = [width, height];\n }\n return {\n width: logicalWidth,\n height: logicalHeight\n };\n};\n\n/**\n * Represents an axis cell.\n *\n * @class Axis\n */\nclass AxisCell extends SimpleCell {\n\n /**\n * Creates an instance of AxisCell.\n *\n * @param {Object} config The input config.\n * @memberof AxisCell\n */\n constructor (config) {\n super(config);\n\n this._axis = null;\n this._availHeight = null;\n this._availWidth = null;\n this._logicalSpace = null;\n\n generateGetterSetters(this, PROPS[AXIS]);\n }\n\n /**\n * return the type pf SimpleCell cell.\n *\n * @readonly\n * @memberof AxisCell\n */\n get type () {\n return AXIS;\n }\n\n /**\n * This method return the value conatined by this SimpleCell.\n *\n * @return {SimpleAxis | ColorAxis} Instance of SimpleAxis or ColorAxis.\n * @memberof AxisCell\n */\n valueOf () {\n return this.source().id;\n }\n\n /**\n * This method return the unique identififer of the axis\n *\n * @return {string} Id of the axis.\n * @memberof AxisCell\n */\n get id () {\n return this._id;\n }\n\n /**\n * Retrns the serialized representation of this cell.\n *\n * @return {Object}Object with serializable props.\n * @memberof AxisCell\n */\n serialize () {\n return {\n type: AXIS,\n axis: this.source().serialize()\n };\n }\n\n /**\n * return the default configuration for the text cell\n *\n * @static\n * @return {Object} Default configuration of the cell\n * @memberof AxisCell\n */\n static defaultConfig () {\n return DEFAULT_CONFIG;\n }\n\n /**\n * return the space taken up by an axis element in the dom.\n *\n * @return {Object} Object with width and height fields.\n * @memberof AxisCell\n */\n getLogicalSpace () {\n if (!this.logicalSpace()) {\n this.logicalSpace(computeAxisSpace(this));\n }\n return this.logicalSpace();\n }\n\n /**\n * This method is used to set the space availiable to render\n * the SimpleCell.\n *\n * @param {number} width The width of SimpleCell.\n * @param {number} height The height of SimpleCell.\n * @return {Instance} Returns current Instance\n * @memberof AxisCell\n */\n setAvailableSpace (width, height) {\n this.availWidth(width);\n this.availHeight(height);\n const {\n margin,\n isOffset\n } = this.config();\n\n if (width || height) {\n this.source().setAvailableSpace(width, height, margin, isOffset);\n this.source().logicalSpace(null);\n } else {\n this.source().resetLogicalSpace();\n }\n this.logicalSpace(null);\n return this;\n }\n\n /**\n * This method is used to render the axis inside the axis cell.\n *\n * @param {HTMLElement} mount The mount point.\n * @return {Selection} node where axis mounted\n * @memberof AxisCell\n */\n /* istanbul ignore next */render (mount) {\n if (!mount) {\n return this;\n }\n let actualWidth = 0;\n let actualHeight = 0;\n const axis = this.source();\n const availHeight = this.availHeight();\n const availWidth = this.availWidth();\n const {\n margin\n } = this.config();\n const {\n top,\n bottom,\n left,\n right\n } = margin;\n const {\n show,\n orientation\n } = axis.config();\n const wrapperDiv = makeElement(selectElement(mount), 'div', [this], `${CLASSPREFIX}-${AXIS_CELL}`);\n const selection = makeElement(wrapperDiv, 'svg', [1], `${CLASSPREFIX}-axis-container`);\n selection.classed(`${CLASSPREFIX}-axis-container-${orientation}`, true);\n\n this.mount(mount);\n if (!availWidth) {\n selection.attr(WIDTH, `${0}px`);\n }\n if (!availHeight) {\n selection.attr(HEIGHT, `${0}px`);\n }\n actualWidth = availWidth;\n actualHeight = availHeight;\n if (!show) {\n actualWidth = (orientation === TOP || orientation === BOTTOM) ? availWidth : 0;\n actualHeight = (orientation === TOP || orientation === BOTTOM) ? 0 : availHeight;\n }\n wrapperDiv.style(WIDTH, `${actualWidth}px`)\n .style(HEIGHT, `${actualHeight}px`)\n .style('margin-top', top)\n .style('margin-bottom', bottom)\n .style('margin-left', left)\n .style('margin-right', right);\n\n axis.mount(selection.node());\n return selection;\n }\n\n /**\n * Disposes the cell\n *\n * @return {Instance} Current instance of AxisCell\n * @memberof AxisCell\n */\n remove () {\n this.source() && this.source().remove();\n this.mount() && this.mount().remove();\n return this;\n }\n}\n\nexport default AxisCell;\n\n","/**\n * This file declares a class that represents a BLANK element in a table.\n * @module VisualCell\n */\nimport {\n selectElement,\n makeElement,\n applyStyle,\n generateGetterSetters\n } from 'muze-utils';\nimport SimpleCell from './simple-cell';\nimport { CLASSPREFIX, BLANK_CELL } from './enums/constants';\nimport { BLANK } from './enums/cell-type';\nimport { DEFAULT_CONFIG } from './enums/defaults';\nimport { PROPS } from './props';\n\n/**\n * Represents a table haeder.\n *\n * @class BLANK\n */\nclass BlankCell extends SimpleCell {\n\n /**\n * Creates an instance of BLANK.\n * @param {Object} config The input configuration.\n * @memberof BLANK\n */\n constructor (config) {\n super(config);\n\n generateGetterSetters(this, PROPS[BLANK]);\n }\n\n /**\n * return the type pf SimpleCell cell.\n *\n * @readonly\n * @memberof BlankCell\n */\n get type () {\n return BLANK;\n }\n\n /**\n * This method return the value contained by this SimpleCell.\n *\n * @return {string} The text value contained by this cell.\n * @memberof BlankCell\n */\n valueOf () {\n return this.id;\n }\n\n /**\n * return the default configuration for the text cell\n *\n * @static\n * @return {Object} Default configuration of the cell\n * @memberof BlankCell\n */\n static defaultConfig () {\n return DEFAULT_CONFIG;\n }\n\n /**\n * This method is used to return a unique identifier for\n * the BLANK cell.\n *\n * @return {string} The unique identifier for the BLANK.\n * @memberof BlankCell\n */\n get id () {\n return this._id;\n }\n\n /**\n * This method is used to obtain a serialized representation of this instance.\n *\n * @return {Object} Object with serilizable props.\n * @memberof BLANK\n */\n serialize () {\n return {\n type: BLANK\n };\n }\n\n /**\n * This method return the space taken up\n * by the text with the style applied.\n *\n * @return {Object} width and height taken up by the text.\n * @memberof BLANK\n */\n getLogicalSpace () {\n if (!this.logicalSpace()) {\n return {\n width: this.width || 0,\n height: this.height || 0\n };\n }\n return this.logicalSpace();\n }\n\n /**\n * This method is used to set the available space.\n *\n * @param {number} width The available width.\n * @param {number} height The available height.\n * @return {Instance} Returns current Instance\n * @memberof BlankCell\n */\n setAvailableSpace (width, height) {\n this.availWidth(width);\n this.availHeight(height);\n this.logicalSpace(null);\n return this;\n }\n\n /**\n * This method is used to render the BLANK cell inside\n * the provided mount point.\n *\n * @param {HTMLElement} mount The mount point for this cell.\n * @return {Instance} Returns current Instance\n * @memberof BLANK\n */\n /* istanbul ignore next */render (mount) {\n if (mount) {\n const { style } = this.config();\n // append span element to mount point\n this.mount(mount);\n const container = selectElement(mount);\n const elem = makeElement(container, 'div', [this.id]);\n elem.classed(`${CLASSPREFIX}-${BLANK_CELL}`, true);\n elem.style('width', `${this.availWidth()}px`);\n elem.style('height', `${this.availHeight()}px`);\n elem.html('');\n // apply style on the returned element\n if (style) {\n applyStyle(elem, style);\n }\n } return this;\n }\n\n /**\n * Removes the cell(Disposal)\n *\n * @return {Instance} Returns current Instance\n * @memberof BlankCell\n */\n remove () {\n this.mount() && this.mount().remove();\n return this;\n }\n\n getMinMeasures () {\n return 0;\n }\n }\nexport default BlankCell;\n","/**\n * This file declares a class that represents a Text element in a table.\n * @module VisualCell\n */\n\nimport {\n selectElement,\n makeElement,\n getSmartComputedStyle,\n generateGetterSetters\n} from 'muze-utils';\nimport SimpleCell from './simple-cell';\nimport { TEXT } from './enums/cell-type';\nimport { PROPS } from './props';\nimport { DEFAULT_CONFIG } from './enums/defaults';\nimport { CLASSPREFIX, TOP, BOTTOM, LEFT, RIGHT, HEADER, WIDTH, TEXT_CELL } from './enums/constants';\nimport './text-cell.scss';\n\nconst setSmartText = (context) => {\n const source = context.source();\n const {\n height: minHeightSpace,\n width: minWidthSpace\n } = context.minSpacing();\n const {\n margin,\n rotation\n } = context.config();\n const {\n left,\n right,\n top,\n bottom\n } = margin;\n const paddedHeight = top + bottom + minHeightSpace;\n const paddedWidth = left + right + minWidthSpace;\n const availHeight = context.availHeight() - paddedHeight;\n const availWidth = context.availWidth() - paddedWidth;\n const labelManager = context.dependencies().labelManager;\n\n labelManager.setStyle(context._computedStyle);\n\n !rotation && context.smartText(labelManager.getSmartText(source, availWidth, availHeight, false));\n rotation && context.smartText(labelManager.getSmartText(source, availHeight, availWidth, true));\n\n return context;\n};\n\n/**\n* Computes the Logical Space for the text\n*\n* @param {Object} context Required to get the needed parameters to compute text space\n* @return {Object} Logical space taken up by text\n* @memberof TextCell\n*/\nconst computeTextSpace = (context) => {\n const { labelManager } = context.dependencies();\n const {\n height: minHeightSpace,\n width: minWidthSpace\n } = context.minSpacing();\n const {\n margin,\n show,\n maxLines,\n minCharacters\n } = context.config();\n const {\n left,\n right,\n top,\n bottom\n } = margin;\n const paddedHeight = top + bottom + minHeightSpace;\n const paddedWidth = left + right + minWidthSpace;\n const availHeight = context.availHeight() - paddedHeight;\n const availWidth = context.availWidth() - paddedWidth;\n const source = context.source();\n const space = context.smartText();\n const minText = new Array(minCharacters).fill('W').join('');\n const _minTextSpace = labelManager.getOriSize(minText);\n\n context.config({ rotation: false });\n if (space.width > (availWidth || 0) && maxLines) {\n space.height = space.oriTextHeight * maxLines;\n }\n if (availWidth && availWidth < space.width) {\n space.width = _minTextSpace.width;\n }\n if (availWidth && availWidth < Math.min(_minTextSpace.width, space.oriTextWidth)) {\n const smartSpace = labelManager.getSmartText(source, availHeight, _minTextSpace.height, true);\n space.width = smartSpace.height;\n space.height = smartSpace.width;\n context.config({ rotation: true });\n context.smartText(smartSpace);\n }\n\n if (show) {\n return {\n width: Math.ceil(space.width) + paddedWidth,\n height: Math.ceil(space.height) + paddedHeight\n };\n } return {\n width: 0,\n height: 0\n };\n};\n\n/**\n * Represents a table haeder.\n *\n * @class Text\n */\nclass TextCell extends SimpleCell {\n\n /**\n * Creates an instance of Text.\n * @param {Object} config The input configuration.\n * @param {string} dependencies Dependencies for the class(labelManager)\n * @memberof Text\n */\n constructor (config, dependencies) {\n super(config);\n\n this._dependencies = dependencies;\n this._className = this._config.className ||\n (this._config.type === HEADER ? `${CLASSPREFIX}-${HEADER}-cell` : `${CLASSPREFIX}-${TEXT}-cell`);\n this._computedStyle = getSmartComputedStyle(selectElement('body'), this._className);\n this._dependencies.labelManager.setStyle(this._computedStyle);\n generateGetterSetters(this, PROPS[TEXT]);\n const space = this._dependencies.labelManager.getOriSize('w');\n this.minSpacing({ width: Math.floor(space.width * 3 / 4), height: Math.floor(space.height / 2) });\n setSmartText(this);\n }\n\n /**\n * return the type pf SimpleCell cell.\n *\n * @readonly\n * @memberof TextCell\n */\n get type () {\n return TEXT;\n }\n\n /**\n * This method return the value contained by this SimpleCell.\n *\n * @return {string} The text value contained by this cell.\n * @memberof TextCell\n */\n valueOf () {\n return this.source();\n }\n\n /**\n * This method is used to return a unique identifier for\n * the Text cell.\n *\n * @return {string} The unique identifier for the Text.\n * @memberof TextCell\n */\n get id () {\n return this._id;\n }\n\n /**\n * Returns the dependencies of the instance\n *\n * @return {Object} Dependencies needed by the class\n * @memberof TextCell\n */\n dependencies () {\n return this._dependencies;\n }\n\n /**\n * This method is used to obtain a serialized representation of this instance.\n *\n * @return {Object} Object with serilizable props.\n * @memberof TextCell\n */\n serialize () {\n return {\n text: this.source(),\n type: TEXT\n };\n }\n\n /**\n * return the default configuration for the text cell\n *\n * @static\n * @return {Object} Default configuration of the cell\n * @memberof TextCell\n */\n static defaultConfig () {\n return DEFAULT_CONFIG;\n }\n\n /**\n * This method return the space taken up\n * by the text with the style applied.\n *\n * @return {Object} width and height taken up by the text.\n * @memberof Text\n */\n getLogicalSpace () {\n if (!this.logicalSpace()) {\n this.logicalSpace(computeTextSpace(this));\n }\n return this.logicalSpace();\n }\n\n /**\n * This method is used to set the available space.\n *\n * @param {number} width The available width.\n * @param {number} height The available height.\n * @return {Instance} Returns current Instance\n * @memberof TextCell\n */\n setAvailableSpace (width, height) {\n this.availWidth(width);\n this.availHeight(height);\n setSmartText(this);\n this.logicalSpace(null);\n return this;\n }\n\n /**\n * This method is used to render the Text cell inside\n * the provided mount point.\n *\n * @param {HTMLElement} mount The mount point for this cell.\n * @return {Instance} Returns current Instance\n * @memberof Text\n */\n render (mount) {\n const availWidth = this.availWidth();\n const availHeight = this.availHeight();\n const {\n margin,\n show,\n verticalAlign,\n textAlign,\n rotation\n } = this.config();\n\n this.mount(mount);\n if (show) {\n const container = selectElement(mount);\n const elem = makeElement(container, 'div', [this.id], `${CLASSPREFIX}-${TEXT_CELL}`);\n const vAlign = verticalAlign || rotation ? 'middle' : 'top';\n const {\n width,\n height\n } = this.smartText();\n const {\n height: minHeightSpace\n } = this.minSpacing();\n const translation = {\n top: width + minHeightSpace / 2,\n middle: width / 2 + minHeightSpace,\n bottom: minHeightSpace\n };\n\n container.style('vertical-align', vAlign);\n\n // Set class name\n elem.classed(this._className, true);\n\n // Apply styles\n elem.style('text-align', textAlign);\n elem.style('display', 'inline');\n elem.style('transform', rotation ? `translate(${height / 2}px,\n ${translation[vAlign]}px) rotate(-90deg)` : '');\n elem.style(WIDTH, availWidth ? `${availWidth}px` : '100%');\n [TOP, BOTTOM, LEFT, RIGHT].forEach((type) => {\n container.style(`margin-${type}`, `${margin[type]}px`);\n });\n elem.style('text-align', textAlign);\n elem.style('display', 'inline');\n // set the text as the innerHTML\n this._dependencies.labelManager.setStyle(this._computedStyle);\n elem.html(this._dependencies.labelManager.getSmartText(this.source(), availWidth, availHeight, true).text);\n }\n return this;\n }\n\n /**\n * Disposes the cell\n *\n * @return {Instance} Returns current Instance\n * @memberof TextCell\n */\n remove () {\n this.mount() && this.mount().remove();\n return this;\n }\n }\n\nexport default TextCell;\n","/**\n * This file declares a class that is used to represent a table cell\n * that houses a visual unit.\n * @module VisualCell\n */\n\nimport { selectElement, makeElement, generateGetterSetters } from 'muze-utils';\nimport SimpleCell from './simple-cell';\nimport { GEOM } from './enums/cell-type';\nimport { PROPS } from './props';\nimport {\n CLASSPREFIX, HEIGHT, WIDTH, DATA, AXES, FACET_BY_FIELDS, FIELDS, TRANSFORM, LAYER_DEF, CONFIG, GEOM_CELL,\n DETAIL_FIELDS\n} from './enums/constants';\nimport { DEFAULT_CONFIG } from './enums/defaults';\n\n/**\n * Calculates the logical space of the cell\n *\n * @param {Object} context Required to get the needed parameters to compute unit space\n * @return {Object} Logical space taken up by the unit\n * @memberof GeomCell\n */\nconst computeGeomSpace = (context) => {\n const config = context.source().config();\n const { width, height } = config;\n return {\n width: Math.ceil(width),\n height: Math.ceil(height + context.getCaptionSpace().height)\n };\n};\n\n /**\n * This class represents a SimpleCell for visual unit.\n *\n * @class GeomCell\n */\nclass GeomCell extends SimpleCell {\n\n /**\n * Creates an instance of GeomCell.\n * @param {Object} config The input configuration.\n * @memberof GeomCell\n */\n constructor (config) {\n super(config);\n\n this._unit = null;\n this._layers = null;\n this._axes = {};\n this._datamodel = {};\n this._facetByFields = {};\n this._fields = null;\n this._transform = null;\n this._caption = null;\n\n generateGetterSetters(this, PROPS[GEOM]);\n }\n\n /**\n * return the type pf SimpleCell cell.\n *\n * @readonly\n * @memberof GeomCell\n */\n get type () {\n return GEOM;\n }\n\n /**\n * This method return the value contained by this cell.\n *\n * @return {VisualUnit} Instance of visual unit contained by visual unit.\n * @memberof GeomCell\n */\n valueOf () {\n return this.source();\n }\n\n /**\n * This method is used to return the id of the\n * visual unit housed by this cell.\n *\n * @return {string} The unique id of the visual unit.\n * @memberof GeomCell\n */\n get id () {\n return this.source().id();\n }\n\n /**\n * This method return a serialized representation of\n * this instance.\n *\n * @return {Object} Object with serializable props.\n * @memberof GeomCell\n */\n serialize () {\n return {\n type: GEOM,\n unit: this.source().serialize(),\n caption: this.caption()\n };\n }\n\n /**\n * return the default configuration for the geom cell\n *\n * @static\n * @return {Object} Default configuration of the cell\n * @memberof GeomCell\n */\n static defaultConfig () {\n return DEFAULT_CONFIG;\n }\n\n /**\n * Updates the model based on the changed parameters\n *\n * @return {Instance} return instance\n * @memberof GeomCell\n */\n updateModel () {\n const unit = this.source();\n unit.lockModel();\n unit.clearCaching();\n [LAYER_DEF, TRANSFORM, AXES, FIELDS, CONFIG, DATA, AXES, FACET_BY_FIELDS, DETAIL_FIELDS].forEach((prop) => {\n this[prop]() && unit[prop](this[prop]());\n });\n unit.unlockModel();\n return this;\n }\n\n /**\n * It gives the space taken by the caption of the unit\n *\n * @return {Object} return the space taken by caption\n * @memberof GeomCell\n */\n getCaptionSpace () {\n const caption = this.caption();\n\n let captionSpace = { width: 0, height: 0 };\n if (caption) {\n captionSpace = caption.getLogicalSpace();\n }\n return captionSpace;\n }\n\n /**\n * return the space taken up by the element in the dom.\n *\n * @return {Object} Object with width and height fields.\n * @memberof GeomCell\n */\n getLogicalSpace () {\n if (!this.logicalSpace()) {\n this.logicalSpace(computeGeomSpace(this));\n }\n return this.logicalSpace();\n }\n\n /**\n * This method is used to set the space available to\n * render the SimpleCell.\n *\n * @param {number} width The available width.\n * @param {number} height The available height.\n * @return {Instance} Returns current Instance\n * @memberof GeomCell\n */\n setAvailableSpace (width, height) {\n const unit = this.source();\n\n this.availWidth(width);\n this.availHeight(height);\n unit.lockModel();\n unit.width(width).height(height - this.getCaptionSpace().height);\n unit.unlockModel();\n this.logicalSpace(null);\n return this;\n }\n\n /**\n * his method is used to render the visual unit inside the provided cell.\n *\n * @param {HTMLElement} mount The mountpoint in the table.\n * @return {Instance} Returns current Instance\n * @memberof GeomCell\n */\n render (mount) {\n if (mount) {\n this.mount(mount);\n const availHeight = this.availHeight();\n const availWidth = this.availWidth();\n const caption = this.caption();\n const wrapperDiv = makeElement(selectElement(mount), 'div', [1], `${CLASSPREFIX}-${GEOM_CELL}`);\n\n if (caption) {\n const captionDom = makeElement(wrapperDiv, 'div', [caption], `${CLASSPREFIX}-unit-caption`).node();\n caption.render(captionDom);\n }\n const selection = makeElement(wrapperDiv, 'div', [1], `${CLASSPREFIX}-unit`);\n wrapperDiv.style(WIDTH, `${availWidth}px`).style(HEIGHT, `${availHeight}px`);\n selection.style(WIDTH, `${availWidth}px`)\n .style(HEIGHT, `${availHeight - this.getCaptionSpace().height}px`);\n this.source().mount(selection.node());\n }\n return this;\n }\n\n /**\n * Disposes the cell\n *\n * @return {Object} Current instance\n * @memberof GeomCell\n */\n remove () {\n this.mount() && this.mount().remove();\n this.source().remove();\n return this;\n }\n}\n\nexport default GeomCell;\n","import AxisCell from './axis-cell';\nimport BlankCell from './blank-cell';\nimport TextCell from './text-cell';\nimport GeomCell from './geom-cell';\nimport SimpleCell from './simple-cell';\n\nimport * as CONSTANTS from './constants';\n\nexport const DEFAULT_PLACEHOLDERS = {\n [CONSTANTS.SIMPLE_CELL]: SimpleCell,\n [CONSTANTS.TEXT_CELL]: TextCell,\n [CONSTANTS.AXIS_CELL]: AxisCell,\n [CONSTANTS.GEOM_CELL]: GeomCell,\n [CONSTANTS.BLANK_CELL]: BlankCell\n};\n\n","export const SIMPLE_CELL = 'SimpleCell';\nexport const TEXT_CELL = 'TextCell';\nexport const AXIS_CELL = 'AxisCell';\nexport const BLANK_CELL = 'BlankCell';\nexport const GEOM_CELL = 'GeomCell';\n\n","import { DEFAULT_PLACEHOLDERS } from './defaults';\n\n/**\n * Creates a registry for the cells, which can be used for\n * setting a new cell or getting the registered cells\n *\n * @return {Object} Setters and getters for registered cells\n */\nconst cellRegistry = () => {\n const reg = DEFAULT_PLACEHOLDERS;\n return {\n set: (key, def) => {\n if (key in reg) {\n reg[key] = def;\n }\n return cellRegistry;\n },\n get: () => reg\n };\n};\nexport default cellRegistry;\n","import { TextCell } from '@chartshq/visual-cell';\nimport { escapeHTML } from 'muze-utils';\nimport { TOP } from '../constants';\n\n/**\n *\n *\n * @param {*} rawContent\n *\n */\nconst resolveTitleSubTitleContent = (rawContent) => {\n if (typeof rawContent === 'function' && !rawContent._sanitize) {\n return rawContent();\n }\n return escapeHTML(rawContent());\n};\n\n/**\n *\n *\n * @param {*} config\n * @param {*} cellType\n * @param {*} labelManager\n * @param {*} prevCell\n *\n */\nconst headerCreator = (config, cellType, labelManager, prevCell) => {\n let margin = {};\n const {\n content,\n classPrefix,\n maxLines\n } = config;\n const cell = prevCell || new TextCell(\n {\n type: cellType === 'title' ? 'header' : 'text',\n className: `${classPrefix}-${cellType}-cell`\n }, {\n labelManager\n })\n .config({ maxLines }).minSpacing({ width: 0, height: 0 });\n\n cell.source(content);\n cell._minTickDiff = { height: 0, width: 0 };\n\n if (config.position === TOP) {\n margin = { top: 0, bottom: config.padding };\n } else {\n margin = { top: config.padding, bottom: 0 };\n }\n cell.config({ margin });\n\n return {\n height: cell.getLogicalSpace().height,\n cell\n };\n};\n\n/**\n *\n *\n * @param {*} config\n * @param {*} type\n * @param {*} labelManager\n * @param {*} cell\n *\n */\nconst createHeading = (config, type, labelManager, prevCell) => {\n if (!config) { return ''; }\n\n return headerCreator(\n config,\n type,\n labelManager,\n prevCell\n );\n};\n\n/**\n *\n *\n * @param {*} context\n */\nexport const createHeaders = (context, canvasHeight, canvasWidth) => {\n let headerHeight = 0;\n const headers = {};\n const subtitle = context.subtitle();\n const isSubtitle = resolveTitleSubTitleContent(subtitle[0]);\n\n canvasHeight >= 200 && canvasWidth >= 200 && ['title', 'subtitle'].forEach((type) => {\n const headerOptions = context[type]();\n const content = resolveTitleSubTitleContent(headerOptions[0]);\n if (content) {\n const config = headerOptions[1];\n\n config.width = context.width();\n config.height = context.height();\n config.classPrefix = context.config().classPrefix;\n config.content = content;\n config.padding = (type === 'title' && !isSubtitle.length) ? subtitle[1].padding : config.padding;\n\n const { height, cell } = createHeading(config, type, context.dependencies().smartlabel,\n context[`${type}Cell`]);\n\n headers[`${type}Cell`] = cell;\n context._composition[type] = cell;\n headerHeight += height;\n }\n });\n return { headerHeight, headers };\n};\n\n","import { TextCell, AxisCell } from '@chartshq/visual-cell';\nimport { getValueParser, retrieveFieldDisplayName } from 'muze-utils';\nimport {\n VERTICAL, HORIZONTAL, LEFT, RIGHT, LEGEND_TYPE_MAP, PADDING, BORDER, MARGIN\n} from '../constants';\n\n/**\n *\n *\n * @param {*} legendConfig\n * @param {*} canvases\n *\n */\nexport const legendCreator = (canvas) => {\n let LegendCls;\n const dataset = [];\n const axes = canvas.getRetinalAxes();\n\n Object.entries(axes).forEach((axisInfo) => {\n const scale = axisInfo[1][0];\n const scaleType = axisInfo[0];\n const scaleProps = canvas[scaleType]();\n\n if (scaleProps.field && scale) {\n const {\n type,\n step\n } = scale.config();\n\n const stepMapper = typeof step === 'boolean' ? step : false;\n LegendCls = LEGEND_TYPE_MAP[`${type}-${stepMapper}-${scaleType}`];\n dataset.push({\n scale,\n canvas,\n fieldName: scaleProps.field,\n title: retrieveFieldDisplayName(canvas.data(), scaleProps.field),\n LegendCls,\n scaleType\n });\n }\n });\n\n return dataset;\n};\n\n/**\n *\n *\n * @param {*} legendConfig\n * @param {*} canvases\n * @param {*} measurement\n * @param {*} prevLegends\n *\n */\nexport const legendInitializer = (legendConfig, canvas, measurement, prevLegends) => {\n const legends = [];\n const {\n height,\n width,\n headerHeight\n } = measurement;\n const {\n position,\n align\n } = legendConfig;\n\n const legendInfo = legendCreator(canvas);\n const { invalidValues } = canvas.config();\n\n const parser = getValueParser(invalidValues);\n legendInfo.forEach((dataInfo, index) => {\n let legend = {};\n\n const legendMeasures = {};\n const {\n LegendCls,\n scale,\n fieldName,\n title: titleText,\n scaleType\n } = dataInfo;\n const config = legendConfig[scaleType] || {};\n const title = config.title || {};\n title.text = title.text || titleText;\n if (config.show) {\n config.position = position;\n config.align = align;\n\n if (prevLegends[index]) {\n legend = prevLegends[index].legend;\n } else {\n legend = LegendCls.create({\n labelManager: canvas._dependencies.smartlabel,\n cells: {\n AxisCell, TextCell\n }\n });\n }\n legendMeasures.maxHeight = align === VERTICAL ? (height - headerHeight) : height * 0.2;\n legendMeasures.maxWidth = align === HORIZONTAL ? width : width * 0.2;\n legendMeasures.width = Math.min(legendMeasures.maxWidth, config.width);\n legendMeasures.height = Math.min(legendMeasures.maxHeight, config.height);\n\n [PADDING, BORDER, MARGIN].forEach((e) => {\n legendMeasures[e] = config[e];\n });\n legend.scale(scale)\n .valueParser(parser)\n .title(title)\n .fieldName(fieldName)\n .config(config)\n .metaData(canvas.composition().visualGroup.getGroupByData().project([fieldName]))\n .measurement(legendMeasures)\n .canvasAlias(canvas.alias())\n .setLegendMeasures();\n\n legends.push({ canvas, legend, scaleType });\n }\n });\n return legends;\n};\n\n/**\n *\n *\n * @param {*} legends\n * @param {*} legendConfig\n * @param {*} availableHeight\n * @param {*} availableWidth\n *\n */\nexport const getLegendSpace = (legends, legendConfig, availableHeight, availableWidth) => {\n const legendMeasures = legends.map(legendInfo => legendInfo.legend.measurement());\n const legendSpace = { width: 0, height: 0 };\n\n legendMeasures.forEach((space) => {\n let height = 0;\n let width = 0;\n width = Math.min(space.width, space.maxWidth);\n height = Math.min(space.height, space.maxHeight);\n\n if (legendConfig.align === HORIZONTAL) {\n if (legendSpace.width + width > availableWidth) {\n legendSpace.width = availableWidth;\n legendSpace.height += height;\n } else {\n legendSpace.width += width;\n legendSpace.height = Math.max(legendSpace.height, height);\n }\n } else if (legendSpace.height + height > availableHeight) {\n legendSpace.height = height;\n legendSpace.width += width;\n } else {\n legendSpace.height += height;\n legendSpace.width = Math.max(legendSpace.width, width);\n }\n });\n if (legendConfig.align === HORIZONTAL) {\n legendSpace.width = availableWidth;\n }\n return legendSpace;\n};\n\n/**\n *\n *\n * @param {*} context\n * @param {*} headerHeight\n *\n */\nexport const createLegend = (context, headerHeight, height, width) => {\n const measurement = {\n height,\n width,\n headerHeight\n };\n const { legend } = context.config();\n const { show, position } = legend;\n\n legend.classPrefix = context.config().classPrefix;\n const align = (position === LEFT || position === RIGHT) ? VERTICAL : HORIZONTAL;\n\n legend.show = show ? ((align === VERTICAL && width > 200) || (align === HORIZONTAL && height > 200)) : show;\n legend.align = align;\n return legendInitializer(legend, context, measurement, context.legends || []);\n};\n","import { LayoutComponent } from '../../../../layout/src/tree-layout';\n\nexport default class MuzeComponent extends LayoutComponent {\n getLogicalSpace () {\n const { width, height } = this.boundBox();\n return { width, height };\n }\n\n setSpatialConfig (conf) {\n this.boundBox({ top: conf.y, left: conf.x });\n this.newDimensions = {\n width: conf.width,\n height: conf.height\n };\n this.renderAt(conf.renderAt);\n }\n\n getBoundBox () {\n return this.boundBox();\n }\n\n updateWrapper () {\n throw Error('Update is not implemented');\n }\n\n setParams () {\n throw Error('set params is not implemented');\n }\n}\n","import { selectElement } from 'muze-utils';\nimport MuzeComponent from './muze-chart-component';\nimport { LEFT } from '../../constants';\n\nexport default class HeaderComponent extends MuzeComponent {\n constructor (params) {\n super(params.name, params.component.getLogicalSpace(), 0);\n this.setParams(params);\n }\n\n renderHeader (container) {\n const layoutConfig = this.params.config;\n container = selectElement(container);\n const { align } = layoutConfig;\n const sel = container\n .selectAll(`.${layoutConfig.classPrefix}-inner-container`)\n .data([this.name]);\n sel.exit().remove();\n const selEnter = sel.enter().append('div');\n\n const cont = selEnter.merge(sel);\n cont.classed(`${layoutConfig.classPrefix}-inner-container`, true);\n const { height, width } = this.boundBox();\n this.component.setAvailableSpace(width, height);\n\n this.component && this.component.render(cont.node());\n\n cont.selectAll('div').classed(`${layoutConfig.classPrefix}-inner-content`, true);\n cont.style('width', `${100}%`);\n\n if (layoutConfig && this.component) {\n cont.style('float', LEFT)\n .style('text-align', align);\n // .style(`padding-${position === TOP ? BOTTOM : TOP}`, `${padding}px`);\n }\n }\n\n draw (container) {\n this.renderHeader(container || document.getElementById(this.renderAt()));\n }\n\n updateWrapper (params) {\n this.setParams(params);\n this.name(params.name);\n this.boundBox(params.component.getLogicalSpace());\n return this;\n }\n\n setParams (params) {\n this.component = params.component;\n this.params = params;\n this.target(params.config.target);\n this.position(params.config.position);\n this.className(params.config.className);\n this.alignWith(params.config.alignWith);\n this.alignment(params.config.alignment);\n }\n\n setSpatialConfig (conf) {\n this.boundBox({ top: conf.y,\n left: conf.x,\n width: conf.width,\n height: conf.height });\n this.renderAt(conf.renderAt);\n }\n}\n","import { makeElement, selectElement } from 'muze-utils';\nimport MuzeComponent from './muze-chart-component';\nimport {\n LEFT, RIGHT, VERTICAL, HORIZONTAL, TOP, BOTTOM, HORIZONTAL_CENTER, VERTICAL_CENTER\n} from '../../constants';\nimport { ROW_MATRIX_INDEX, COLUMN_MATRIX_INDEX } from '../../../../layout/src/enums/constants';\n\nfunction defaultAlignmentHelper (position) {\n let alignment = null;\n const alignWith = `${ROW_MATRIX_INDEX[1]}-${COLUMN_MATRIX_INDEX[1]}`;\n switch (position) {\n case TOP:\n case BOTTOM:\n alignment = HORIZONTAL_CENTER;\n break;\n case LEFT:\n case RIGHT:\n alignment = VERTICAL_CENTER;\n break;\n default:\n alignment = VERTICAL_CENTER;\n }\n return { alignment, alignWith };\n}\nexport default class LegendComponent extends MuzeComponent {\n constructor (params) {\n super(params.name, params.config.measurement.legendSpace, 0);\n this.setParams(params);\n }\n\n renderLegend (container) {\n container = selectElement(container);\n const sectionComponents = [];\n const { position, classPrefix } = this.params.config;\n const legendMount = makeElement(container, 'div', [this.components],\n `${classPrefix}-inner-content`, {}, d => d);\n legendMount.classed(`${classPrefix}-legend`, true);\n const align = (position === LEFT || position === RIGHT) ? VERTICAL : HORIZONTAL;\n const legWidth = this.newDimensions.width;\n const legHeight = this.newDimensions.height;\n\n [container, legendMount].forEach((elem) => {\n elem.style('width', `${Math.floor(legWidth)}px`)\n .style('height', `${legHeight}px`)\n .style('float', LEFT);\n });\n\n if (align === VERTICAL) {\n let sections = -1;\n let currHeight = legHeight;\n let currWidth = 0;\n\n this.components.forEach((legendInfo) => {\n const leg = legendInfo.legend;\n if (leg.measurement().height > currHeight) {\n sections++;\n currWidth = 0;\n currHeight = legHeight;\n } else {\n sections < 0 && sections++;\n }\n sectionComponents[sections] = sectionComponents[sections] || [];\n currHeight -= Math.min(leg.measurement().height, currHeight);\n currWidth = Math.max(Math.min(leg.measurement().width, leg.measurement().maxWidth), currWidth);\n sectionComponents[sections].push({\n legend: leg,\n legendHeight: legHeight,\n legendWidth: currWidth\n });\n });\n\n const mount = makeElement(legendMount, ['div'], sectionComponents, `${classPrefix}-legend-section`);\n // mount.each((d, i) => selectElement(this).classed(`${classPrefix}-legend-section-${i}`, true));\n mount.classed(`${classPrefix}-legend-vertical-section`, true)\n .style('width', d => `${d[0].legendWidth}px`);\n makeElement(mount, ['div'], d => d, `${classPrefix}-legend-components`, {}, d => d.legend.id())\n .each(function (d) {\n d.legend.mount(this);\n })\n .style('width', d => `${d.legendWidth}px`);\n } else {\n const mount = makeElement(legendMount, 'div', [1], `${classPrefix}-legend-section`);\n mount.classed(`${classPrefix}-legend-horizontal-section`, true);\n mount.classed(`${classPrefix}-legend-section-${0}`, true)\n .style('width', `${legWidth}px`);\n\n makeElement(mount, 'div', this.components, `${classPrefix}-legend-components`, {}, d => d.legend.id())\n .each(function (d) { d.legend.mount(this); })\n .style('width', d => `${d.legend.measurement().width}px`);\n }\n }\n\n draw (container) {\n this.renderLegend(container || document.getElementById(this.renderAt()));\n }\n\n updateWrapper (params) {\n this.name(params.name);\n this.boundBox(params.config.measurement.legendSpace);\n this.setParams(params);\n return this;\n }\n\n setParams (params) {\n this.components = params.component;\n this.params = params;\n this.target(params.config.target);\n this.position(params.config.position);\n const { alignWith, alignment } = defaultAlignmentHelper(params.config.position);\n this.className(params.config.className);\n this.alignWith(params.config.alignWith || alignWith);\n this.alignment(params.config.alignment || alignment);\n }\n\n}\n","import {\n selectElement,\n makeElement,\n getD3Drag,\n getEvent,\n getWindow,\n hasTouch\n} from 'muze-utils';\nimport './scroll-bar.scss';\nimport { WIDTH, HEIGHT } from '../../../constants';\n\nconst d3Drag = getD3Drag();\n\nconst arrowSizeMap = {\n left: WIDTH,\n right: WIDTH,\n top: HEIGHT,\n bottom: HEIGHT\n};\n\nexport const getUnitPositions = (unitMeasures, totalLength, viewLength) => {\n let currentLen = 0;\n const measures = unitMeasures.primary && unitMeasures.primary.length ?\n unitMeasures.primary : unitMeasures.secondary;\n\n return measures.map((e) => {\n const unitPosition = currentLen * 100 / (totalLength - viewLength);\n currentLen += e;\n return unitPosition;\n });\n};\n\nexport const createScrollBarArrow = (mount, type, config) => {\n const {\n classPrefix,\n thickness\n } = config;\n const arrow = makeElement(mount, 'div', [type], `${classPrefix}-scroll-arrow-${type}`);\n\n arrow.classed(`${classPrefix}-scroll-arrow`, true);\n arrow.style(arrowSizeMap[type], `${thickness}px`);\n\n const chevron = makeElement(arrow, 'div', [1], `${classPrefix}-scroll-arrow-chevron`);\n\n chevron.attr('id', `${classPrefix}-scroll-arrow-chevron-${type}`);\n\n return arrow;\n};\n\nexport const createScrollBarRect = (mount, config) => {\n const {\n classPrefix\n } = config;\n const rect = makeElement(mount, 'div', [1], `${classPrefix}-scroll-rect`);\n const mover = makeElement(rect, 'div', [1], `${classPrefix}-scroll-mover`);\n\n return { rect, mover };\n};\n\nexport const applyRectClick = (scrollMaker, moverRect) => {\n const {\n rect\n } = moverRect;\n\n rect.on('click', () => {\n const event = getEvent();\n scrollMaker.emptyScrollAreaClick(event);\n });\n};\n\nconst applyMoverDrag = (scrollMaker, moverRect) => {\n let startPos = {};\n let moverStartPos = 0;\n let rectStartPos = 0;\n let endPos = {};\n const {\n mover,\n rect\n } = moverRect;\n\n mover.call(d3Drag()\n .on('start', () => {\n const event = getEvent();\n\n moverStartPos = mover.node().getBoundingClientRect();\n rectStartPos = rect.node().getBoundingClientRect();\n startPos = {\n x: event.x,\n y: event.y\n };\n })\n .on('drag', () => {\n const event = getEvent();\n const window = getWindow();\n\n endPos = {\n x: event.x,\n y: event.y\n };\n const distanceMoved = {\n x: endPos.x - startPos.x,\n y: endPos.y - startPos.y\n };\n const actualPosition = {\n x: moverStartPos.x + distanceMoved.x - rectStartPos.x + window.pageXOffset,\n y: moverStartPos.y + distanceMoved.y - rectStartPos.y + window.pageYOffset\n };\n\n scrollMaker.changeMoverPosition(actualPosition);\n }));\n};\n\nconst applyScrollMouseDownAction = (moverRect, scrollMaker, speed) => {\n const {\n mover,\n rect\n } = moverRect;\n const { x, y } = mover.node().getBoundingClientRect();\n const { x: rectX, y: rectY } = rect.node().getBoundingClientRect();\n\n scrollMaker.changeMoverPosition({ x: x - rectX + speed, y: y - rectY + speed });\n};\n\nconst registerListenerOnArrow = (scrollMaker, moverRect, arrowType, speed) => {\n let timer = '';\n const arrow = scrollMaker._components[arrowType];\n const isTouchDevice = hasTouch();\n\n arrow.on(isTouchDevice ? 'touchstart' : 'mousedown', () => {\n const event = getEvent();\n\n event.preventDefault();\n\n timer = setInterval(() => {\n applyScrollMouseDownAction(moverRect, scrollMaker, speed);\n }, 100);\n }).on(isTouchDevice ? 'touchend' : 'mouseup', () => {\n const event = getEvent();\n\n event.preventDefault();\n\n clearInterval(timer);\n }).on('click', () => {\n applyScrollMouseDownAction(moverRect, scrollMaker, speed);\n });\n};\n\nexport const registerListeners = (scrollMaker) => {\n const {\n moverRect\n } = scrollMaker._components;\n\n const speed = scrollMaker.config().speed;\n\n registerListenerOnArrow(scrollMaker, moverRect, 'prevArrow', -speed);\n applyMoverDrag(scrollMaker, moverRect);\n applyRectClick(scrollMaker, moverRect);\n registerListenerOnArrow(scrollMaker, moverRect, 'nextArrow', speed);\n};\n\nexport const scrollContainerHelper = (mountPoint, config, dimensions, type) => {\n const {\n classPrefix\n } = config;\n const scrollBarContainer = makeElement(selectElement(mountPoint), 'div', [1], `#${classPrefix}-scroll-bar-${type}`);\n\n scrollBarContainer.classed(`${classPrefix}-scroll-bar`, true);\n scrollBarContainer.style(WIDTH, `${dimensions.width}px`);\n scrollBarContainer.style(HEIGHT, `${dimensions.height}px`);\n return scrollBarContainer;\n};\n\n","import { mergeRecursive } from 'muze-utils';\n\nexport const PROPS = {\n\n config: {\n sanitization: (context, value) => {\n value = mergeRecursive(context._config, value);\n return value;\n }\n },\n manager: {},\n unitPositions: {},\n logicalSpace: {}\n};\n\n","import { ERROR_MSG, generateGetterSetters } from 'muze-utils';\nimport {\n scrollContainerHelper,\n registerListeners\n} from './helper';\nimport { PROPS } from './props';\n\nexport class ScrollMaker {\n\n constructor () {\n this._components = {};\n this._logicalSpace = {};\n this._attachedScrollAction = () => {};\n this._config = {\n thickness: 10,\n speed: 2\n };\n this._unitPositions = null;\n\n generateGetterSetters(this, PROPS);\n }\n\n static type () {\n throw new ERROR_MSG('Method not implemented');\n }\n\n emptyScrollAreaClick () {\n throw new ERROR_MSG('Method not implemented');\n }\n\n changeMoverPosition () {\n throw new ERROR_MSG('Method not implemented');\n }\n\n scrollTo () {\n throw new ERROR_MSG('Method not implemented');\n }\n\n scrollDeltaTo () {\n throw new ERROR_MSG('Method not implemented');\n }\n\n createScroll (mountPoint) {\n const config = this.config();\n\n return {\n scrollBarContainer: scrollContainerHelper(mountPoint, config, this.logicalSpace(), this.constructor.type())\n };\n }\n\n attachScrollAction (externalScrollAction) {\n this._attachedScrollAction = externalScrollAction;\n return this;\n }\n\n detachScrollAction () {\n this._attachedScrollAction = () => {};\n return this;\n }\n\n getLogicalSpace () {\n return this.logicalSpace();\n }\n\n registerListeners () {\n registerListeners(this);\n return this;\n }\n\n remove () {\n this._components.scrollBarContainer.remove();\n return this;\n }\n}\n\n","import MuzeComponent from './muze-chart-component';\nimport { HorizontalScrollMaker } from './scroll-bar-maker/horizontal-scroll-maker';\nimport { VerticalScrollMaker } from './scroll-bar-maker/vertical-scroll-maker';\n\nconst scrollMakerMap = {\n horizontal: HorizontalScrollMaker,\n vertical: VerticalScrollMaker\n};\n\n/**\n * Scroll Component acts as a wrapper over the scoll bars created using the respective Scroll Makers\n * This provides a consistent API for layouting using the tree layout system.\n *\n *\n * @class\n * @public\n * @module ScrollComponent\n */\nexport default class ScrollComponent extends MuzeComponent {\n\n constructor (params) {\n const ScrollMaker = scrollMakerMap[params.config.type];\n\n params.component = new ScrollMaker();\n params.component.config(params.config.scrollBarComponentConfig);\n params.component.logicalSpace(params.dimensions);\n super(params.name, params.component.getLogicalSpace(), 0);\n this.setParams(params);\n }\n\n manager (...manager) {\n if (manager.length) {\n this.component.manager(manager[0]);\n return this;\n }\n return this.component.manager();\n }\n\n /**\n * Scrolls based on the actual pixel value provided. Since it's a delta change, the input will be\n * a delta between (-Infinity, Infinity), based on which the scroll will occur. Only a delta movement in\n * scroll occurs\n *\n * @public\n *\n * @param {number} delta Based on which the scroll will have a delta change in position\n * @return {ScrollComponent} Instance of the ScrollComponent\n */\n scrollDeltaTo (delta) {\n this.component.scrollDeltaTo(delta);\n return this;\n }\n\n /**\n * Scrolls to the specific point in the page. The input is provided as a percentage (0 - 100)\n *\n * @public\n *\n * @param {number} scrollPercentage Its the percentage based on which the scroll action will occur\n * @return {ScrollComponent} Instance of the ScrollComponent\n */\n scrollTo (scrollPercentage) {\n this.component.scrollTo(scrollPercentage);\n return this;\n }\n\n /**\n * Scrolls to the specific point in the page based on the unit index.\n * The input is provided as a number represting the index for the unit.\n * For vertical scroll, it's the row index that will be required.\n * For horizontal scroll, it's the column index that will be required\n *\n * @public\n *\n * @param {number} unitIndex Index of the unit appearing in the grid\n * @return {ScrollComponent} Instance of the ScrollComponent\n */\n scrollToUnitIndex (unitIndex) {\n const unitPositions = this.component.unitPositions();\n const sanitizedUnitIndex = Math.min(Math.max(0, unitIndex), unitPositions.length - 1);\n this.component.scrollTo(unitPositions[sanitizedUnitIndex]);\n return this;\n }\n\n /**\n * Provides the positions of the units(either horizontal or vertical based on the type\n * of scroll bar it wraps) relative to it's container. The position of the first unit starts at 0\n *\n *\n * @public\n *\n * @return {Array} Positions of units either horizontal or vertical\n */\n getScrollPositionsForUnits () {\n return this.component.unitPositions();\n }\n\n draw (container) {\n this.component.createScroll(container || document.getElementById(this.renderAt()));\n return this;\n }\n\n /**\n * Can be used to attach a scroll action whenever scrolling occurs in the canvas\n *\n * @public\n * @param {number} externalAction Action to be attached during scroll\n * @return {ScrollComponent} Instance of the ScrollComponent\n */\n attachScrollAction (externalAction) {\n this.component.attachScrollAction(externalAction);\n return this;\n }\n\n /**\n * Can be used to detach the scroll action already bound to the scroll bar\n *\n * @public\n * @return {ScrollComponent} Instance of the ScrollComponent\n */\n detachScrollAction () {\n this.component.detachScrollAction();\n return this;\n }\n\n updateWrapper (params) {\n this.name(params.name);\n this.component.config(params.config.scrollBarComponentConfig);\n this.component.logicalSpace(params.dimensions);\n this.boundBox(this.component.getLogicalSpace());\n this.setParams(params);\n return this;\n }\n\n setParams (params) {\n this.component = params.component || this.component;\n this.params = params;\n this.target(params.config.target);\n this.position(params.config.position);\n this.className(params.config.className);\n this.alignWith(params.config.alignWith);\n this.alignment(params.config.alignment);\n }\n\n remove () {\n this.component.remove();\n }\n}\n","import { ScrollMaker } from './scroll-maker';\nimport { createScrollBarRect, createScrollBarArrow, getUnitPositions } from './helper';\nimport { HORIZONTAL, HEIGHT, WIDTH, LEFT } from '../../../constants';\n\nexport class HorizontalScrollMaker extends ScrollMaker {\n\n /**\n * Describes the type of the ScrollMaker\n *\n * @public\n *\n * @return {String} Returns the type of scroll maker: horizontal\n */\n static type () {\n return HORIZONTAL;\n }\n\n createScroll (mountPoint, dimensions = this.logicalSpace()) {\n const config = this.config();\n const { scrollBarContainer } = super.createScroll(mountPoint, config, dimensions);\n const prevArrow = createScrollBarArrow(scrollBarContainer, 'left', config);\n const moverRect = createScrollBarRect(scrollBarContainer, config);\n const nextArrow = createScrollBarArrow(scrollBarContainer, 'right', config);\n const {\n mover,\n rect\n } = moverRect;\n\n const { height, width, totalLength, viewLength, unitWidths } = this.logicalSpace();\n const scrollBarWithouArrowLength = width - height * 2;\n\n rect.style(WIDTH, `${dimensions.width - height * 2}px`);\n rect.style(HEIGHT, `${100}%`);\n mover.style(WIDTH, `${(viewLength * scrollBarWithouArrowLength) / totalLength}px`);\n mover.style(HEIGHT, `${100}%`);\n mover.style(LEFT, `${0}px`);\n\n this._components = {\n prevArrow,\n nextArrow,\n moverRect,\n scrollBarContainer\n };\n this._scrollBarWithouArrowLength = scrollBarWithouArrowLength;\n this.unitPositions(getUnitPositions(unitWidths, totalLength, viewLength));\n this.registerListeners();\n }\n\n emptyScrollAreaClick (event) {\n const {\n mover,\n rect\n } = this._components.moverRect;\n const speed = this.config().speed;\n const { x, y } = mover.node().getBoundingClientRect();\n const { x: rectX, y: rectY } = rect.node().getBoundingClientRect();\n let positionAdjuster = speed * 10;\n if (event.x < x) {\n positionAdjuster = -speed * 10;\n }\n this.changeMoverPosition({ x: x - rectX + positionAdjuster, y: y - rectY + positionAdjuster });\n }\n\n changeMoverPosition (newPosition) {\n let currentPos;\n const {\n mover,\n rect\n } = this._components.moverRect;\n const rectStartPos = rect.node().getBoundingClientRect();\n const moverPos = mover.node().getBoundingClientRect();\n const {\n totalLength\n } = this.logicalSpace();\n\n if (newPosition.x < 0) {\n currentPos = 0;\n } else if (newPosition.x + moverPos.width > rectStartPos.width) {\n currentPos = rectStartPos.width - moverPos.width;\n } else {\n currentPos = newPosition.x;\n }\n\n mover.style(LEFT, `${currentPos}px`);\n const totalDistance = this._scrollBarWithouArrowLength;\n const movedViewLength = (currentPos * totalLength) / totalDistance;\n\n this.manager().performAttachedScrollFunction(this.constructor.type(), movedViewLength);\n }\n\n scrollDeltaTo (delta) {\n const {\n mover,\n rect\n } = this._components.moverRect;\n const moverPos = mover.node().getBoundingClientRect();\n const rectStartPos = rect.node().getBoundingClientRect();\n\n this.changeMoverPosition({ y: 0, x: moverPos.x - rectStartPos.x - delta });\n return this;\n }\n\n /**\n * Scrolls to the specific point in the page. The input is provided as a percentage (0 - 100)\n *\n * @public\n *\n * @param {number} scrollPercentage Its the percentage based on which the scroll action will occur\n * @return {HorizontalScrollMaker} Instance of the HorizontalScrollMaker\n */\n scrollTo (scrollPercentage) {\n const {\n mover\n } = this._components.moverRect;\n const moverPos = mover.node().getBoundingClientRect();\n const movement = (scrollPercentage * (this._scrollBarWithouArrowLength - moverPos.width)) / 100;\n\n this.changeMoverPosition({ y: 0, x: movement });\n return this;\n }\n\n}\n\n","import { ScrollMaker } from './scroll-maker';\nimport { createScrollBarRect, createScrollBarArrow, getUnitPositions } from './helper';\nimport { VERTICAL, TOP, HEIGHT, WIDTH } from '../../../constants';\n\nexport class VerticalScrollMaker extends ScrollMaker {\n\n /**\n * Describes the type of the ScrollMaker\n *\n * @public\n *\n * @return {String} Returns the type of scroll maker: vertical\n */\n static type () {\n return VERTICAL;\n }\n\n createScroll (mountPoint, dimensions = this.logicalSpace()) {\n const config = this.config();\n const { scrollBarContainer } = super.createScroll(mountPoint, dimensions);\n const prevArrow = createScrollBarArrow(scrollBarContainer, 'top', config);\n const moverRect = createScrollBarRect(scrollBarContainer, config);\n const nextArrow = createScrollBarArrow(scrollBarContainer, 'bottom', config);\n const {\n mover,\n rect\n } = moverRect;\n const { height, width, totalLength, viewLength, unitHeights } = this.logicalSpace();\n const scrollBarWithouArrowLength = height - width * 2;\n\n rect.style(HEIGHT, `${scrollBarWithouArrowLength}px`);\n rect.style(WIDTH, `${100}%`);\n mover.style(WIDTH, `${100}%`);\n mover.style(HEIGHT, `${(viewLength * scrollBarWithouArrowLength) / totalLength}px`);\n mover.style(TOP, `${0}px`);\n\n this._components = {\n prevArrow,\n nextArrow,\n moverRect,\n scrollBarContainer\n };\n this._scrollBarWithouArrowLength = scrollBarWithouArrowLength;\n\n this.unitPositions(getUnitPositions(unitHeights, totalLength, viewLength));\n this.registerListeners();\n }\n\n emptyScrollAreaClick (event) {\n const {\n mover,\n rect\n } = this._components.moverRect;\n const speed = this.config().speed;\n const { x, y } = mover.node().getBoundingClientRect();\n const { x: rectX, y: rectY } = rect.node().getBoundingClientRect();\n\n let positionAdjuster = speed * 10;\n if (event.y < y) {\n positionAdjuster = -speed * 10;\n }\n this.changeMoverPosition({ x: x - rectX + positionAdjuster, y: y - rectY + positionAdjuster });\n }\n\n changeMoverPosition (newPosition) {\n let currentPos;\n const {\n mover,\n rect\n } = this._components.moverRect;\n const {\n totalLength\n } = this.logicalSpace();\n const rectStartPos = rect.node().getBoundingClientRect();\n const moverPos = mover.node().getBoundingClientRect();\n\n if (newPosition.y < 0) {\n currentPos = 0;\n } else if (newPosition.y + moverPos.height > rectStartPos.height) {\n currentPos = rectStartPos.height - moverPos.height;\n } else {\n currentPos = newPosition.y;\n }\n mover.style(TOP, `${currentPos}px`);\n const totalDistance = this._scrollBarWithouArrowLength;\n const movedViewLength = (currentPos * totalLength) / totalDistance;\n\n this.manager().performAttachedScrollFunction(this.constructor.type(), movedViewLength);\n }\n\n /**\n * Scrolls based on the actual pixel value provided. Since it's a delta change, the input will be\n * a delta between (-Infinity, Infinity), based on which the scroll will occur. Only a delta movement in\n * scroll occurs\n *\n * @public\n *\n * @param {number} delta Based on which the scroll will have a delta change in position\n * @return {VerticalScrollMaker} Instance of the VerticalScrollMaker\n */\n scrollDeltaTo (delta) {\n const {\n mover,\n rect\n } = this._components.moverRect;\n const moverPos = mover.node().getBoundingClientRect();\n const rectStartPos = rect.node().getBoundingClientRect();\n\n this.changeMoverPosition({ y: moverPos.y - rectStartPos.y - delta, x: 0 });\n return this;\n }\n\n /**\n * Scrolls to the specific point in the page. The input is provided as a percentage (0 - 100)\n *\n * @public\n *\n * @param {number} scrollPercentage Its the percentage based on which the scroll action will occur\n * @return {VerticalScrollMaker} Instance of the VerticalScrollMaker\n */\n scrollTo (scrollPercentage) {\n const {\n mover\n } = this._components.moverRect;\n const moverPos = mover.node().getBoundingClientRect();\n const movement = (scrollPercentage * (this._scrollBarWithouArrowLength - moverPos.height)) / 100;\n\n this.changeMoverPosition({ x: 0, y: movement });\n return this;\n }\n\n}\n","import { makeElement } from 'muze-utils';\nimport { cellSpanMaker, applySpans } from '../../../../layout/src/grid-layout/span-maker';\nimport { applyBorders } from '../../../../layout/src/grid-layout/border-helper';\n\nimport {\n TOP, CENTER\n} from '../../../../layout/src/enums/constants';\nimport MuzeComponent from './muze-chart-component';\nimport { WIDTH, HEIGHT, HIDDEN, OVERFLOW, AUTO, VISIBLE } from '../../constants';\n\nconst renderPlaceholders = (cells) => {\n // Rendering content within placeholders\n cells.each(function (cell) {\n cell.placeholder.render(this);\n });\n};\n\nexport default class MatrixComponent extends MuzeComponent {\n\n constructor (params) {\n super(params.name, params.config.dimensions, 0);\n this.setParams(params);\n this.className(params.config.className);\n }\n\n applyScroll (container) {\n const row = this.params.config.row;\n const column = this.params.config.column;\n const { horizontal, vertical } = this.params.config.scrollInfo;\n container.style(OVERFLOW, VISIBLE);\n container.style(WIDTH, AUTO);\n container.style(HEIGHT, AUTO);\n\n if (horizontal && column === 1) {\n container.style(OVERFLOW, HIDDEN);\n container.style(WIDTH, '100%');\n }\n\n if (vertical && row === CENTER) {\n container.style(OVERFLOW, HIDDEN);\n container.style(HEIGHT, '100%');\n }\n }\n\n renderMatrix (mountPoint) {\n // Creating containers for each matrix individually\n const classPrefix = this.params.config.classPrefix;\n const row = this.params.config.row;\n const column = this.params.config.column;\n const dimensions = this.params.config.dimensions;\n const border = this.params.config.border;\n\n // Creating containers for each matrix individually\n const containerForMatrix = makeElement(mountPoint, 'div', [1], `${classPrefix}-grid-${row}-${column + 1}`)\n .classed(`${classPrefix}-grid-${row}`, true)\n .classed(`${classPrefix}-grid`, true);\n\n this.applyScroll(containerForMatrix);\n\n const {\n viewMatrix,\n spans\n } = cellSpanMaker(this.component, row, column);\n\n // Rendering the table components\n const { cells } = this.renderTable(containerForMatrix, `${classPrefix}-grid`, viewMatrix);\n\n applySpans(cells, spans, { dimensions, border }, `${row}-${column}`);\n renderPlaceholders(cells);\n\n cells.exit().each((cell) => {\n cell.placeholder.remove();\n });\n\n applyBorders(cells, border, row, column);\n }\n\n renderTable (mount, className, rowData) {\n const table = makeElement(mount, 'table', ['layout'], `${className}-table`);\n const body = makeElement(table, 'tbody', ['layout'], `${className}-body`);\n const rows = makeElement(body, 'tr', rowData, `${className}-tr`);\n const cells = makeElement(rows, 'td', (d, i) => d.filter(e => e !== null).map(e =>\n ({ placeholder: e, rowIndex: i })), `${className}-td`, {}, key => key.placeholder.id);\n\n return { table, body, rows, cells };\n }\n\n draw (container) {\n this.renderMatrix(container || document.getElementById(this.renderAt()));\n }\n\n updateWrapper (params) {\n this.name(params.name);\n this.boundBox(params.config.dimensions);\n this.setParams(params);\n return this;\n }\n\n setParams (params) {\n this.component = params.component;\n this.params = params;\n this.target(params.config.target);\n this.position(TOP);\n this.className(params.config.className);\n }\n}\n","import { selectElement, getEvent } from 'muze-utils';\nimport MuzeComponent from './muze-chart-component';\nimport MatrixComponent from './matrix-component';\nimport { ROW_MATRIX_INDEX, COLUMN_MATRIX_INDEX } from '../../../../layout/src/enums/constants';\nimport { WHEEL_DELTA_MODIFIER } from '../../enums/constants';\n\n/**\n * Based on the type of scroll, it changes the scrollLeft/scrollTop property of the specific\n * elements based on the scroll distance provided\n *\n *\n */\nconst applyScrollAction = (elem, classPrefix, scollDistance, type) => {\n selectElement(elem)\n .selectAll(`.${classPrefix}-grid`)\n .property(type, scollDistance);\n};\n\n/**\n * Applies the action of the scroll by actually scrolling the respective matrices based on the\n * type of scroll. It returns a function which has both the scroll methods available\n *\n * @return {Object} contains the horizontal and vertical scroll actions on the grid component\n */\nconst scrollActionApplier = (movement, context) => {\n const classPrefix = context.params.config.classPrefix;\n\n return {\n horizontal: () => {\n [0, 1, 2].forEach(e =>\n applyScrollAction(`#${context.component[e][1].renderAt()}`, classPrefix, movement, 'scrollLeft'));\n },\n vertical: () => {\n [0, 1, 2].forEach(e =>\n applyScrollAction(`#${context.component[1][e].renderAt()}`, classPrefix, movement, 'scrollTop'));\n }\n };\n};\n\nexport default class GridComponent extends MuzeComponent {\n\n constructor (params) {\n super(params.name, params.config.dimensions, 0);\n this.gridComponents = [];\n this.setParams(params);\n }\n\n sanitizeGrid () {\n let height = 0;\n let width = 0;\n const { viewMatricesInfo, layoutDimensions } = this.component.viewInfo();\n const scrollInfo = this.component.scrollInfo();\n const {\n viewHeight,\n viewWidth,\n unitHeights,\n unitWidths\n } = layoutDimensions;\n\n for (let i = 0; i < 3; i++) {\n if (!(this.gridComponents.length && this.gridComponents[i] instanceof Array)) {\n this.gridComponents[i] = [];\n }\n for (let j = 0; j < 3; j++) {\n const matrixDim = {\n height: viewHeight[i],\n width: viewWidth[j],\n unitHeights,\n unitWidths\n };\n const matrix = viewMatricesInfo.matrices[`${ROW_MATRIX_INDEX[i]}`][j];\n const matrixName = `${ROW_MATRIX_INDEX[i]}-${COLUMN_MATRIX_INDEX[j]}`;\n const matrixConfig = {\n dimensions: matrixDim,\n border: layoutDimensions.border,\n classPrefix: this.params.config.classPrefix,\n scrollInfo,\n row: ROW_MATRIX_INDEX[i],\n column: j\n };\n if (this.gridComponents[i][j] instanceof MuzeComponent) {\n this.gridComponents[i][j].updateWrapper({\n name: matrixName,\n component: matrix,\n config: matrixConfig\n });\n } else {\n const matrixWrapper = new MatrixComponent({\n name: matrixName,\n component: matrix,\n config: matrixConfig\n });\n this.gridComponents[i].push(matrixWrapper);\n }\n if (i === 0) {\n width += matrixDim.width;\n }\n if (j === 0) {\n height += matrixDim.height;\n }\n }\n }\n this.boundBox({ height, width });\n\n this.component = this.gridComponents;\n this.allComponents = this.gridComponents;\n }\n\n scrollBarManager (...manager) {\n if (manager.length) {\n this._scrollBarManager = manager[0];\n return this;\n }\n return this._scrollBarManager;\n }\n\n /**\n * Attaches a mousewheel listener to the center matrix, based on which the scrolling can occur.\n * It uses the scroll component to change the position of the scroller, which ultimately scrolls the center matrix\n *\n *\n * @return {GridComponent} Instance of the GridComponent\n */\n attachScrollListener () {\n selectElement(`#${this.component[1][1].renderAt()}`)\n .on('wheel', () => {\n const event = getEvent();\n const {\n wheelDeltaX,\n wheelDeltaY\n } = event;\n\n // Prevent default behaviour and stop propagating\n event.preventDefault();\n event.stopPropagation();\n\n // Scrolling horizontally\n if (wheelDeltaX !== 0 && Math.abs(wheelDeltaX) > Math.abs(wheelDeltaY)) {\n this.scrollBarManager()\n .triggerScrollBarAction('horizontal', wheelDeltaX / WHEEL_DELTA_MODIFIER);\n }\n\n // Scrolling Vertically\n if (wheelDeltaY !== 0 && Math.abs(wheelDeltaX) < Math.abs(wheelDeltaY)) {\n this.scrollBarManager()\n .triggerScrollBarAction('vertical', wheelDeltaY / WHEEL_DELTA_MODIFIER);\n }\n });\n return this;\n }\n\n performScrollAction (direction, movedView) {\n scrollActionApplier(movedView, this)[direction]();\n return this;\n }\n\n getBoundBox () {\n const { top, left } = this.component[0][0].boundBox();\n const { height, width } = this.boundBox();\n\n return {\n top,\n left,\n height,\n width\n };\n }\n\n updateWrapper (params) {\n this.name(params.name);\n this.boundBox(params.config.dimensions);\n this.setParams(params);\n return this;\n }\n\n setParams (params) {\n this.component = params.component;\n this.params = params;\n this.target(params.config.target);\n this.className(params.config.className);\n this.sanitizeGrid();\n return this;\n }\n}\n","export const SIDE_EFFECT_COMMON = 'common';\nexport const SIDE_EFFECT_INDIVIDUAL = 'individual';\nexport const TOOLTIP_CONSOLIDATED = 'consolidated';\nexport const TOOLTIP_FRAGMENTED = 'fragmented';\nexport const WHEEL_DELTA_MODIFIER = 30;\n","import { TITLE, SUB_TITLE, LEGEND, VERTICAL, HORIZONTAL, WIDTH, HEIGHT, TOP, LEFT, RIGHT } from '../constants';\nimport HeaderComponent from './components/headerComponent';\nimport LegendComponent from './components/legendComponent';\nimport ScrollComponent from './components/scroll-component';\nimport GridComponent from './components/grid-component';\nimport { TITLE_CONFIG, SUB_TITLE_CONFIG, GRID, CANVAS, LAYOUT_ALIGN } from './defaults';\nimport { ROW_MATRIX_INDEX, COLUMN_MATRIX_INDEX, CENTER } from '../../../layout/src/enums/constants';\n\n// Mapping between types of headers and their required configs for wrapper creation\nconst headerMap = {\n title: {\n headerCell: 'titleCell',\n configType: TITLE_CONFIG\n },\n subtitle: {\n headerCell: 'subtitleCell',\n configType: SUB_TITLE_CONFIG\n }\n};\n\n/**\n * Creates the wrapper for the header, i.e., title and subtitle to be used in the tree layout\n *\n *\n * @param {string} headerType type of header: title/subtite\n * @param {LayoutManager} layoutManager instance of Layout Manager which manages the layouting of the components\n * @param {Object} renderDetails Extra details required for rendering the headers\n * @return {Instance} Returns the respective wrappers\n */\nconst createHeaderWrapper = (headerType, layoutManager, renderDetails) => {\n let wrapper = null;\n\n const { components, layoutConfig } = renderDetails;\n const { headerCell, configType } = headerMap[headerType];\n const target = { target: CANVAS };\n\n if (components.headers && components.headers[headerCell]) {\n let headerConfig = layoutConfig[headerType];\n const header = components.headers[headerCell];\n\n headerConfig = Object.assign({}, headerConfig, {\n classPrefix: layoutConfig.classPrefix,\n ...target,\n alignWith: `${ROW_MATRIX_INDEX[0]}-${COLUMN_MATRIX_INDEX[1]}`,\n alignment: LAYOUT_ALIGN.LEFT,\n className: configType.className\n });\n\n if (headerConfig.align === CENTER) {\n headerConfig.alignment = null;\n headerConfig.alignWith = null;\n }\n if (headerConfig.align === RIGHT) {\n headerConfig.alignment = RIGHT;\n }\n\n const wrapperParams = {\n name: headerType,\n component: header,\n config: headerConfig\n };\n\n const existingComponent = layoutManager.getComponent(headerType);\n if (existingComponent) {\n wrapper = existingComponent\n .updateWrapper(wrapperParams);\n } else {\n wrapper = new HeaderComponent(wrapperParams);\n }\n }\n return wrapper;\n};\n\n// Mapping between types of scrollBars and their required configs for wrapper creation\nconst scrollBarMap = config => ({\n vertical: {\n componentName: 'verticalScrollBar',\n width: 'thickness',\n height: 'layoutBasedMeasure',\n layoutBasedMeasure: HEIGHT,\n viewMeasure: 'viewHeight',\n rowAlign: 1,\n colAlign: config.align === 'right' ? 2 : 0,\n position: config.align,\n alignment: TOP\n },\n horizontal: {\n componentName: 'horizontalScrollBar',\n width: 'layoutBasedMeasure',\n layoutBasedMeasure: WIDTH,\n viewMeasure: 'viewWidth',\n height: 'thickness',\n rowAlign: config.align === 'top' ? 0 : 2,\n colAlign: 1,\n position: config.align,\n alignment: LEFT\n }\n});\n\n/**\n * Creates the wrapper for the scroller, i.e., horizontal and vertical to be used in the tree layout\n *\n *\n * @param {string} scrollBarType type of scrollbar: horizontal/vertical\n * @param {LayoutManager} layoutManager instance of Layout Manager which manages the layouting of the components\n * @param {Object} renderDetails Extra details required for rendering the headers\n * @param {GridLayout} grid Instance of the grid layout\n * @return {Instance} Returns the respective wrappers\n */\nconst createScrollBarWrapper = (scrollBarType, layoutManager, renderDetails, grid) => {\n let scrollBarWrapper = null;\n const { layoutConfig } = renderDetails;\n const target = { target: CANVAS };\n const { scrollBar } = layoutConfig;\n const { layoutDimensions } = grid.viewInfo();\n const {\n actualCenterMeasures,\n unitHeights,\n unitWidths\n } = layoutDimensions;\n const {\n componentName, layoutBasedMeasure, width, height, rowAlign, colAlign,\n viewMeasure, position, alignment\n } = scrollBarMap(scrollBar[scrollBarType])[scrollBarType];\n const dimensions = {\n thickness: scrollBar.thickness,\n layoutBasedMeasure: layoutDimensions[viewMeasure][1]\n };\n const isScroll = grid.scrollInfo()[scrollBarType];\n const totalLength = actualCenterMeasures[layoutBasedMeasure];\n const viewLength = layoutDimensions[viewMeasure][1];\n\n const scrollConfig = Object.assign({}, {\n classPrefix: layoutConfig.classPrefix,\n ...target,\n scrollBarComponentConfig: {\n ...scrollBar,\n classPrefix: layoutConfig.classPrefix\n },\n\n type: scrollBarType,\n alignWith: `${ROW_MATRIX_INDEX[rowAlign]}-${COLUMN_MATRIX_INDEX[colAlign]}`,\n alignment,\n position\n });\n\n const wrapperParams = {\n name: componentName,\n config: scrollConfig,\n dimensions: {\n width: dimensions[width],\n height: dimensions[height],\n totalLength,\n viewLength,\n unitHeights,\n unitWidths\n }\n };\n\n const existingComponent = layoutManager.getComponent(componentName);\n\n if (!isScroll) {\n existingComponent && existingComponent.remove();\n return null;\n }\n\n if (existingComponent) {\n scrollBarWrapper = existingComponent\n .updateWrapper(wrapperParams);\n } else {\n scrollBarWrapper = new ScrollComponent(wrapperParams);\n }\n\n return scrollBarWrapper;\n};\n\n/**\n * Creates the wrapper for the legend to be used in the tree layout\n *\n *\n * @param {LayoutManager} layoutManager instance of Layout Manager which manages the layouting of the components\n * @param {Object} renderDetails Extra details required for rendering the headers\n * @return {Instance} Returns the respective wrappers\n */\nconst createLegendWrapper = (layoutManager, renderDetails) => {\n let legendWrapper = null;\n const { components, layoutConfig, measurement } = renderDetails;\n const target = { target: CANVAS };\n\n if (components.legends && components.legends.length) {\n const legendConfig = { ...layoutConfig.legend, ...target, measurement };\n const wrapperParams = {\n name: LEGEND,\n component: components.legends,\n config: legendConfig\n };\n\n const existingComponent = layoutManager.getComponent(LEGEND);\n\n if (existingComponent) {\n legendWrapper = existingComponent\n .updateWrapper(wrapperParams);\n } else {\n legendWrapper = new LegendComponent(wrapperParams);\n }\n }\n return legendWrapper;\n};\n\n/**\n * Creates the wrapper for the grid layout to be used in the tree layout\n *\n *\n * @param {LayoutManager} layoutManager instance of Layout Manager which manages the layouting of the components\n * @param {Object} renderDetails Extra details required for rendering the headers\n * @param {GridLayout} grid Instance of the grid layout\n * @return {Instance} Returns the respective wrappers\n */\nconst gridLayoutWrapper = (layoutManager, renderDetails, grid) => {\n let gridWrapper = null;\n const target = { target: CANVAS };\n const { layoutConfig } = renderDetails;\n\n const config = {\n ...target,\n pagination: layoutConfig.pagination,\n classPrefix: layoutConfig.classPrefix,\n dimensions: { height: 0, width: 0 }\n };\n const wrapperParams = {\n name: GRID,\n component: grid,\n config\n };\n const existingComponent = layoutManager.getComponent(GRID);\n if (existingComponent) {\n gridWrapper = existingComponent\n .updateWrapper(wrapperParams);\n } else {\n gridWrapper = new GridComponent(wrapperParams);\n }\n return gridWrapper;\n};\n\n/**\n * Responsible for providing the wrapper creators for every component in Muze.\n * This function, when called, returns the set of components and their respective wrappers.\n *\n *\n *\n * @param {LayoutManager} layoutManager instance of Layout Manager which manages the layouting of the components\n * @param {GridLayout} grid Instance of the grid layout\n * @param {Object} renderDetails Extra details required for rendering the headers\n * @return {Instance} Returns the respective wrappers for each component\n */\nexport const componentWrapperMaker = (layoutManager, grid, renderDetails) => ({\n title: createHeaderWrapper(TITLE, layoutManager, renderDetails),\n subtitle: createHeaderWrapper(SUB_TITLE, layoutManager, renderDetails),\n legend: createLegendWrapper(layoutManager, renderDetails),\n grid: gridLayoutWrapper(layoutManager, renderDetails, grid),\n verticalScrollBar: createScrollBarWrapper(VERTICAL, layoutManager, renderDetails, grid),\n horizontalScrollBar: createScrollBarWrapper(HORIZONTAL, layoutManager, renderDetails, grid)\n});\n","export class ScrollManager {\n\n constructor () {\n this._scrollBarComponents = {};\n this._attachedComponents = {};\n }\n\n scrollBarComponents (...sbc) {\n if (sbc.length) {\n this._scrollBarComponents = sbc[0];\n return this;\n }\n return this._scrollBarComponents;\n }\n\n attachedComponents (...abc) {\n if (abc.length) {\n this._attachedComponents = abc[0];\n return this;\n }\n return this._attachedComponents;\n }\n\n performAttachedScrollFunction (type, movedViewLength) {\n Object.values(this.attachedComponents()).forEach((e) => {\n e.performScrollAction(type, movedViewLength);\n });\n }\n\n triggerScrollBarAction (type, delta) {\n this.scrollBarComponents()[type] && this.scrollBarComponents()[type].scrollDeltaTo(delta);\n }\n}\n","import { mergeRecursive } from 'muze-utils';\nimport { arrangeComponents } from './component-resolver';\nimport { createHeaders } from './title-maker';\nimport { createLegend, getLegendSpace } from './legend-maker';\nimport { componentWrapperMaker } from './component-wrapper-maker';\nimport {\n TOP,\n BOTTOM,\n LEFT,\n RIGHT,\n TITLE,\n SUB_TITLE,\n LEGEND,\n VERTICAL_SCROLL_BAR,\n HORIZONTAL_SCROLL_BAR,\n GRID\n} from '../constants';\nimport { ScrollManager } from './scroll-manager';\n\n/**\n *\n *\n * @param {*} context\n *\n */\nexport const prepareLayout = (layout, renderDetails) => {\n const { components, layoutConfig, measurement } = renderDetails;\n const {\n rows,\n columns,\n values,\n cornerMatrices\n } = components;\n const {\n topLeft,\n topRight,\n bottomLeft,\n bottomRight\n } = cornerMatrices;\n if (rows && columns) {\n layout.measurement(measurement)\n .config(layoutConfig)\n .matrices({\n top: [topLeft, columns[0], topRight],\n center: [rows[0], values, rows[1]],\n bottom: [bottomLeft, columns[1], bottomRight]\n })\n .triggerReflow();\n }\n};\n\n/**\n *\n *\n * @param {*} context\n * @param {*} mount\n *\n */\nexport const getRenderDetails = (context, mount) => {\n let layoutConfig = mergeRecursive({}, context.config());\n // Get height width of the mount point\n let { height, width } = mount.getBoundingClientRect();\n const heightAttr = context.height();\n const widthAttr = context.width();\n const visGroup = context.composition().visualGroup;\n const {\n isColumnSizeEqual,\n isRowSizeEqual,\n priority,\n rows,\n columns,\n values\n } = visGroup.placeholderInfo();\n const {\n minWidth,\n minHeight,\n classPrefix,\n showHeaders,\n legend,\n pagination,\n scrollBar\n } = context.config();\n\n // Get title configuration\n const titleConfig = context.title()[1];\n // Get subtitle configuration\n const subtitleConfig = context.subtitle()[1];\n // Get legend position\n const legendPosition = legend.position;\n // Arrange components according to config\n const layoutArrangement = arrangeComponents(context);\n\n height = Math.floor(height);\n width = Math.floor(width);\n\n const availableHeightForCanvas = Math.max(heightAttr > 0 ? heightAttr : height, minHeight);\n const availableWidthForCanvas = Math.max(widthAttr > 0 ? widthAttr : width, minWidth);\n\n // Create headers and determine header height\n const { headers, headerHeight } = createHeaders(context, availableHeightForCanvas, availableWidthForCanvas);\n\n // Create legends and determine legend space\n const legends = createLegend(context, headerHeight, availableHeightForCanvas, availableWidthForCanvas);\n context._composition.legend = {};\n legends.forEach((e) => {\n context._composition.legend[e.scaleType] = e.legend;\n });\n\n const legendSpace = getLegendSpace(legends, legend, availableHeightForCanvas, availableWidthForCanvas);\n const legendWidth = (legendPosition === LEFT || legendPosition === RIGHT) ? legendSpace.width : 0;\n const legendHeight = (legendPosition === TOP || legendPosition === BOTTOM) ? legendSpace.height : 0;\n\n // Set components for layouting\n const components = {\n headers,\n legends,\n canvases: [context],\n rows,\n columns,\n values,\n cornerMatrices: visGroup.cornerMatrices()\n };\n\n const measurement = {\n mountSpace: {\n height,\n width\n },\n headerHeight,\n legendSpace,\n canvasWidth: availableWidthForCanvas,\n canvasHeight: availableHeightForCanvas,\n width: availableWidthForCanvas - legendWidth,\n height: availableHeightForCanvas - headerHeight - legendHeight,\n minUnitHeight: context.minUnitHeight(),\n minUnitWidth: context.minUnitWidth()\n };\n layoutConfig = mergeRecursive(layoutConfig, {\n classPrefix,\n showHeaders,\n border: mergeRecursive(visGroup.metaData().border, context.config().border),\n layoutArrangement,\n legend,\n buffer: scrollBar.thickness,\n pagination,\n title: titleConfig,\n subtitle: subtitleConfig,\n isColumnSizeEqual,\n isRowSizeEqual,\n mount,\n priority\n });\n return {\n layoutConfig,\n components,\n measurement\n };\n};\n\nconst componentIndexes = {\n title: 0,\n subtitle: 1,\n legend: 2,\n verticalScrollBar: 3,\n horizontalScrollBar: 4,\n grid: 5\n};\n\nconst componentNames = {\n 0: TITLE,\n 1: SUB_TITLE,\n 2: LEGEND,\n 3: VERTICAL_SCROLL_BAR,\n 4: HORIZONTAL_SCROLL_BAR,\n 5: GRID\n};\n\n/**\n * Responsible for creating a scroll manager that manages interactions between the grid\n * component and the scroll bar components\n *\n * @param {Array} componentWrappers Contains the wrappers for all the components\n * @param {Canvas} canvas Instance of the current canvas\n * @return {Array} Positions of units either horizontal or vertical\n */\nconst createScrollManager = (componentWrappers, canvas) => {\n const {\n horizontalScrollBar,\n verticalScrollBar,\n grid\n } = componentIndexes;\n\n const horizontalScrollWrapper = componentWrappers[horizontalScrollBar];\n const verticalScrollWrapper = componentWrappers[verticalScrollBar];\n const gridWrapper = componentWrappers[grid];\n const scrollBarManager = new ScrollManager();\n const scrollBarComponents = {};\n\n verticalScrollWrapper && (scrollBarComponents.vertical = verticalScrollWrapper);\n horizontalScrollWrapper && (scrollBarComponents.horizontal = horizontalScrollWrapper);\n\n scrollBarManager\n .scrollBarComponents(scrollBarComponents)\n .attachedComponents({\n grid: gridWrapper\n });\n canvas.composition().hScrollBar = horizontalScrollWrapper;\n canvas.composition().vScrollBar = verticalScrollWrapper;\n\n [horizontalScrollWrapper, verticalScrollWrapper].forEach((wrapper) => {\n wrapper && wrapper.manager(scrollBarManager);\n });\n\n gridWrapper.scrollBarManager(scrollBarManager);\n};\n\nexport const renderLayout = (canvas, renderDetails) => {\n const layoutManager = canvas._layoutManager;\n const gridLayout = canvas.layout();\n const {\n\n grid\n } = componentIndexes;\n\n // Get the component wrappers\n const compWrappers = componentWrapperMaker(layoutManager, gridLayout, renderDetails);\n const componentWrappers = Object.keys(componentIndexes).map(e => compWrappers[e]);\n const gridWrapper = componentWrappers[grid];\n createScrollManager(componentWrappers, canvas);\n\n componentWrappers.forEach((componentWrapper, index) => {\n if (componentWrapper === null) {\n const deleteElementName = componentNames[index];\n const component = layoutManager.getComponent(deleteElementName);\n const deleteElementId = component ? component.renderAt() : null;\n layoutManager.removeComponent(deleteElementId);\n }\n });\n layoutManager.registerComponents(componentWrappers).compute();\n gridWrapper.attachScrollListener();\n};\n\n","import {\n getDataModelFromIdentifiers,\n FieldType,\n mergeRecursive,\n isSimpleObject,\n CommonProps\n} from 'muze-utils';\nimport { Firebolt } from '@chartshq/muze-firebolt';\n\nimport { applyInteractionPolicy } from '../helper';\n\nconst defaultInteractionPolicy = (valueMatrix, firebolt) => {\n const isMeasure = field => field.type() === FieldType.MEASURE;\n const canvas = firebolt.context;\n const visualGroup = canvas.composition().visualGroup;\n const xFields = [].concat(...visualGroup.getFieldsFromChannel('x'));\n const yFields = [].concat(...visualGroup.getFieldsFromChannel('y'));\n const colDim = xFields.every(field => field.type() === FieldType.DIMENSION);\n const fieldInf = visualGroup.resolver().getAllFields();\n const rowFacets = fieldInf.rowFacets;\n const colFacets = fieldInf.colFacets;\n valueMatrix.each((cell) => {\n const unitFireBolt = cell.valueOf().firebolt();\n if (!(xFields.every(isMeasure) && yFields.every(isMeasure))) {\n const facetFields = cell.valueOf().facetByFields()[0];\n const unitColFacets = facetFields.filter(d => colFacets.findIndex(v => v.equals(d)) !== -1);\n const unitRowFacets = facetFields.filter(d => rowFacets.findIndex(v => v.equals(d)) !== -1);\n let propFields;\n if (colDim) {\n propFields = unitColFacets.map(d => `${d}`);\n } else {\n propFields = unitRowFacets.map(d => `${d}`);\n }\n\n unitFireBolt.propagateWith('*', propFields, true);\n }\n });\n};\n\nconst defaultCrossInteractionPolicy = {\n behaviours: {\n '*': (propagationPayload, context) => {\n const propagationCanvasAlias = propagationPayload.sourceCanvas;\n const canvasAlias = context.parentAlias();\n return propagationCanvasAlias ? canvasAlias === propagationCanvasAlias : true;\n }\n },\n sideEffects: {\n tooltip: (propagationPayload, context) => {\n const propagationUnit = propagationPayload.sourceUnit;\n const propagationCanvas = propagationPayload.sourceCanvas;\n const unitId = context.id();\n const canvasAlias = context.parentAlias();\n if (propagationCanvas) {\n return propagationCanvas !== canvasAlias ? true : unitId === propagationUnit;\n }\n return true;\n }\n }\n};\n\n/**\n * This class is responsible for dispatching any behavioural action to all the visual units housed by the canvas.\n * It is created by {@link Canvas}. This class does not handle any physical actions. Physical actions get triggered\n * in {@link VisualUnit} which is managed by it's own firebolt instance. The firebolt instance of canvas only\n * propagates the action to all the visual units in it's composition.\n *\n * To get the firebolt instance of {@link Canvas}\n * ```\n * const firebolt = canvas.firebolt();\n * ```\n *\n * @class GroupFireBolt\n * @public\n */\nexport default class GroupFireBolt extends Firebolt {\n constructor (...params) {\n super(...params);\n this._interactionPolicy = this.constructor.defaultInteractionPolicy();\n this.crossInteractionPolicy(this.constructor.defaultCrossInteractionPolicy());\n }\n\n static defaultInteractionPolicy () {\n return defaultInteractionPolicy;\n }\n\n static defaultCrossInteractionPolicy () {\n return defaultCrossInteractionPolicy;\n }\n\n interactionPolicy (...policy) {\n if (policy.length) {\n this._interactionPolicy = policy[0] || this.constructor.defaultInteractionPolicy();\n return this;\n }\n return this._interactionPolicy;\n }\n\n crossInteractionPolicy (...policy) {\n if (policy.length) {\n this._crossInteractionPolicy = mergeRecursive(mergeRecursive({},\n this.constructor.defaultCrossInteractionPolicy()), policy[0] || {});\n const context = this.context;\n applyInteractionPolicy(this);\n context._throwback.registerImmediateListener([CommonProps.MATRIX_CREATED], () => {\n applyInteractionPolicy(this);\n });\n return this;\n }\n return this._crossInteractionPolicy;\n }\n\n /**\n * Dispatches a behavioural action with a payload. It takes the name of the behavioural action and a payload\n * object which contains the criteria aend an array of side effects which determines what side effects are\n * going to be shown in each visual unit of the canvas. It prepares the datamodel from the given criteria\n * and initiates a propagation from the datamodel of canvas. Then all the visual units of canvas which listens\n * to the propagation gets informed on which rows got selected and dispatches the behavioural action sent during\n * propagation.\n *\n * To dispatch a behavioural action on the canvas\n * ```\n * // Get the firebolt instance of the canvas\n * const firebolt = canvas.firebolt();\n * // Dispatch a brush behaviour\n * firebolt.dispatchBehaviour('brush', {\n * // Selects all the rows with Horsepower having range between 100 and 200.\n * criteria: {\n * Horsepower: [100, 200]\n * }\n * });\n * // On dispatch of this behavioural action, a selection box gets created and plots gets faded out which are the\n * // default side effects mapped to this behavioural action.\n * ```\n *\n * ```\n * Additionally, it can also be passed an array of side effects in the payload.\n * // Dispatch a select behaviour with only crossline as side effect.\n * firebolt.dispatchBehaviour('select', {\n * criteria: {\n * Cylinders: ['8']\n * },\n * sideEffects: ['crossline']\n * });\n * ```\n *\n * @public\n *\n * @param {string} behaviour Name of the behavioural action\n * @param {Object} payload Object which contains the interaction information.\n * @param {Object | Array.} payload.criteria Identifiers by which the selection happens.\n * @param {Array.} payload.sideEffects Side effects which needs to be shown.\n *\n * @return {GroupFireBolt} Instance of firebolt.\n */\n dispatchBehaviour (behaviour, payload) {\n const propPayload = Object.assign(payload);\n const criteria = propPayload.criteria;\n const data = this.context.composition().visualGroup.getGroupByData();\n const fieldsConfig = data.getFieldsConfig();\n const model = getDataModelFromIdentifiers(data, criteria);\n const behaviouralAction = this._actions.behavioural[behaviour];\n\n if (behaviouralAction) {\n const fields = isSimpleObject(criteria) ? Object.keys(criteria) : (criteria ? criteria[0] : []);\n const validFields = fields.filter(field => field in fieldsConfig);\n const mutates = behaviouralAction.constructor.mutates();\n const propConfig = {\n payload: propPayload,\n action: behaviour,\n criteria: model,\n sourceId: this.context.alias(),\n isMutableAction: mutates,\n propagateInterpolatedValues: validFields.every(field => fieldsConfig[field].def.type ===\n FieldType.MEASURE)\n };\n data.propagate(model, propConfig, true);\n }\n return this;\n }\n\n registerSideEffects (sideEffects) {\n for (const key in sideEffects) {\n this._sideEffectDefinitions[sideEffects[key].formalName()] = sideEffects[key];\n }\n return this;\n }\n}\n","import GroupFireBolt from './group-firebolt';\n\nexport default GroupFireBolt;\n","export const APP_INITIAL_STATE = {\n app: {\n group: {},\n units: {},\n layers: {},\n canvas: {}\n },\n local: {\n canvas: {},\n group: {},\n units: {},\n layers: {}\n }\n};\n\n","import { GridLayout } from '@chartshq/layout';\nimport { transactor, Store, getUniqueId, selectElement, STATE_NAMESPACES, CommonProps } from 'muze-utils';\nimport { physicalActions, sideEffects, behaviouralActions, behaviourEffectMap } from '@chartshq/muze-firebolt';\nimport { RETINAL } from '../constants';\nimport TransactionSupport from '../transaction-support';\nimport { getRenderDetails, prepareLayout, renderLayout } from './layout-maker';\nimport { localOptions, canvasOptions } from './local-options';\nimport GroupFireBolt from './firebolt';\nimport options from '../options';\nimport { APP_INITIAL_STATE } from './app-state';\nimport { initCanvas,\n setupChangeListener,\n setLabelRotationForAxes,\n createGroupState,\n createLayoutManager,\n setLayoutInfForUnits\n} from './helper';\n/**\n * Canvas is a logical component which houses a visualization by taking multiple variable in different encoding channel.\n * Canvas manages lifecycle of many other logical component and exposes one consistent interface for creation of chart.\n * Canvas is intialized from environment with settings from environment and singleton dependencies.\n *\n * To create an instance of canvas\n * ```\n * const env = Muze();\n * const canvas = env.canvas()\n * ```\n *\n *\n * @class\n * @public\n * @module Canvas\n */\nexport default class Canvas extends TransactionSupport {\n\n /**\n * Creates reactive property accessors.\n * - data\n * - height\n * - width\n * - config\n * This configs are retrieved from options.\n */\n constructor (globalDependencies) {\n super();\n\n this._allOptions = Object.assign({}, options, localOptions);\n this._registry = {};\n this._composition = {};\n this._cachedProps = {};\n this._alias = null;\n this._renderedResolve = null;\n this._renderedPromise = new Promise((resolve) => {\n this._renderedResolve = resolve;\n });\n this._composition.layout = new GridLayout();\n this._store = new Store(APP_INITIAL_STATE);\n\n this._throwback = new Store({\n [CommonProps.MATRIX_CREATED]: false\n });\n\n // Setters and getters will be mounted on this. The object will be mutated.\n const namespace = STATE_NAMESPACES.CANVAS_LOCAL_NAMESPACE;\n const allOptions = Object.assign({}, options, localOptions, canvasOptions);\n\n transactor(this, allOptions, this._store.model, {\n namespace\n });\n\n this.dependencies(Object.assign({}, globalDependencies, this._dependencies));\n this.firebolt(new GroupFireBolt(this, {\n behavioural: behaviouralActions,\n physical: physicalActions,\n physicalBehaviouralMap: {}\n }, sideEffects, behaviourEffectMap));\n this.alias(`canvas-${getUniqueId()}`);\n this.title('', {});\n this.subtitle('', {});\n this.legend({});\n this.color({});\n this.shape({});\n this.size({});\n setupChangeListener(this);\n // init layoutManager\n this._layoutManager = createLayoutManager();\n }\n\n /**\n * Retrieves an instance of layout which is responsible for layouting. Layout is responsible for creating faceted\n * presentation using table layout.\n *\n * @public\n *\n * @return {GridLayout} Instance of layout attached to canvas.\n */\n layout (...params) {\n if (params.length) {\n return this;\n }\n return this.composition().layout;\n }\n\n /**\n * Retrieves the composition for a canvas\n *\n * @public\n *\n * @return {object} Instances of the components which canvas requires to draw the full visualization.\n * ```\n * {\n * layout: // Instance of {@link GridLayout}\n * legend: // Instance of {@link Legend}\n * subtitle: // Instance of {@link TextCell} using which the title is rendered\n * title: // Instance of {@link TextCell} using which the title is rendered\n * visualGroup: // Instance of {@link visualGroup}\n * }\n * ```\n */\n composition (...params) {\n if (params.length) {\n return this;\n }\n return this._composition;\n }\n\n done () {\n return this._renderedPromise;\n }\n\n /**\n * Sets or gets the alias of the canvas. Alias is a name by which the canvas can be referred.\n *\n * When setter\n * @param {string} alias Name of the alias.\n *\n * @return {Canvas} Instance of the canvas.\n *\n * When getter\n *\n * @return {string} Alias of canvas.\n *\n * @public\n */\n alias (...params) {\n if (params.length) {\n const visualGroup = this.composition().visualGroup;\n this._alias = params[0];\n visualGroup && visualGroup.alias(this.alias());\n return this;\n }\n return this._alias;\n }\n\n /**\n * Creates an instance initiated with given settings.\n *\n * @param {Object} initialSettings Initial settings to be populated in the model\n * @param {Object} regEntry newly created instance with the initial settings\n * @param {Object} globalDependencies dependencies which will be created only once in the page\n *\n * @return {Object} newly created instance with the initial settings\n */\n static withSettings (initialSettings, regEntry, globalDependencies) {\n const instance = new Canvas(globalDependencies);\n\n for (const key in initialSettings) {\n instance[key](initialSettings[key]);\n }\n // set registry for instance\n instance.registry(regEntry);\n return instance;\n }\n\n /**\n *\n *\n * @static\n *\n * @memberof Canvas\n */\n static formalName () {\n return 'canvas';\n }\n\n /**\n * Returns the instance of firebolt associated with this canvas. The firebolt instance can be used to dispatch a\n * behaviour dynamically on the canvas. This firebolt does not handle any physical actions. It is just used to\n * propagate the action to all the visual units in it's composition.\n *\n * @public\n *\n * @return {GroupFireBolt} Instance of firebolt associated with canvas.\n */\n firebolt (...firebolt) {\n if (firebolt.length) {\n this._firebolt = firebolt[0];\n return this;\n }\n return this._firebolt;\n }\n\n /**\n * Registry peoperty accessor\n *\n * @param {Object} reg plain old javascript object keyvalue pairs. Key containing module name and value contains\n * module definition class. The reg object has to be flat object of level 1.\n */\n registry (...params) {\n if (params.length) {\n const components = Object.assign({}, params[0].components);\n const componentSubRegistry = Object.assign({}, params[0].componentSubRegistry);\n\n this._registry = { components, componentSubRegistry };\n const initedComponents = initCanvas(this);\n // @todo is it okay to continue this tight behaviour? If not use a resolver to resolve diff component type.\n this._composition.visualGroup = initedComponents[0];\n createGroupState(this);\n this.composition().visualGroup.alias(this.alias()).store(this._store);\n return this;\n }\n return this._registry;\n }\n\n /*\n * Prepare dependencies for top level elements\n */\n dependencies (...param) {\n if (param.length) {\n this._dependencies = param[0];\n return this;\n }\n // @todo prepare dependencies here.\n return this._dependencies;\n }\n\n /**\n *\n *\n * @param {*} lifeCycles\n *\n * @memberof Canvas\n */\n lifeCycle (lifeCycles) {\n const lifeCycleManager = this.dependencies().lifeCycleManager;\n if (lifeCycles) {\n lifeCycleManager.register(lifeCycles);\n return this;\n }\n return lifeCycleManager;\n }\n\n /**\n *\n *\n * @readonly\n * @memberof Canvas\n */\n legend (...params) {\n if (params.length) {\n return this;\n }\n return this.composition().legend;\n }\n\n /**\n * Returns a promise for various {@link LifecycleEvents} of the various components of canvas. The promise gets\n * resolved once the particular event gets completed.\n *\n * To use this,\n * ```\n * canvas.once('layer.drawn').then(() => {\n * // Do any post drawing work here.\n * });\n * ```\n * @public\n *\n * @param {string} eventName Name of the lifecycle event.\n *\n * @return {Promise} A pending promise waiting for resolve to be called.\n */\n once (eventName) {\n const lifeCycleManager = this.dependencies().lifeCycleManager;\n return lifeCycleManager.retrieve(eventName);\n }\n\n /**\n * Internal function to trigger render, this method is cognizant of all the properties of the core modules and\n * establish a passive reactivity. Passive reactivity is not always a bad thing :)\n * @internal\n */\n render () {\n const mount = this.mount();\n // removeChild(mount);\n const lifeCycleManager = this.dependencies().lifeCycleManager;\n // Get render details including arrangement and measurement\n const renderDetails = getRenderDetails(this, mount);\n lifeCycleManager.notify({ client: this, action: 'beforedraw' });\n // Prepare the layout by triggering the matrix calculation\n prepareLayout(this.layout(), renderDetails);\n\n this._layoutManager.dimension({\n height: renderDetails.measurement.canvasHeight,\n width: renderDetails.measurement.canvasWidth\n });\n\n this._layoutManager.renderAt(mount);\n\n // Render each component\n renderLayout(this, renderDetails);\n\n setLayoutInfForUnits(this);\n\n // setLabelRotation\n setLabelRotationForAxes(this);\n }\n\n /**\n * Returns the instances of x axis of the canvas. It returns the instances in a two dimensional array form.\n *\n * ```\n * // The first element in the sub array represents the top axis and the second element represents the bottom\n * // axis.\n * [\n * [X1, X2],\n * [X3, X4]\n * ]\n * ```\n * @public\n *\n * @return {Array.} Instances of x axis.\n */\n xAxes () {\n return this.composition().visualGroup.getAxes('x');\n }\n\n /**\n * Returns the instances of y axis of the canvas. It returns the instances in a two dimensional array form.\n *\n * ```\n * // The first element in the sub array represents the left axis and the second element represents the right\n * // axis.\n * [\n * [Y1, Y2],\n * [Y3, Y4]\n * ]\n * ```\n * @public\n * @return {Array.} Instances of y axis.\n */\n yAxes () {\n return this.composition().visualGroup.getAxes('y');\n }\n\n /**\n * Returns all the retinal axis of the canvas. Color, shape and size axis are combinedly called retinal axis.\n *\n * @public\n * @return {Object} Instances of retinal axis.\n * ```\n * {\n * color: [ColorAxis], // Array of color axis.\n * shape: [ShapeAxis], // Array of shape axis.\n * size: [SizeAxis] // Array of size axis.\n * }\n * ```\n */\n getRetinalAxes () {\n const visualGroup = this.composition().visualGroup;\n return visualGroup.getAxes(RETINAL);\n }\n\n mount (...params) {\n if (params.length) {\n let value = params[0];\n if (typeof params[0] === 'string') {\n value = selectElement(params[0]).node();\n }\n this._mount = value;\n return this;\n }\n return this._mount;\n }\n}\n","import { cellRegistry, SimpleCell } from '@chartshq/visual-cell';\nimport { VisualUnit } from '@chartshq/visual-unit';\nimport { layerRegistry } from '@chartshq/visual-layer';\nimport { SimpleGroup, VisualGroup } from '@chartshq/visual-group';\n\nexport const COMPONENTS = {\n VisualGroup,\n VisualUnit\n};\nexport const SUBREGISTRIES = {\n cellRegistry,\n layerRegistry\n};\nexport const INTERFACES = {\n SimpleGroup,\n SimpleCell\n};\n\n","import { DEFAULT_LAYERS } from './defaults';\n\nexport default () => {\n const reg = DEFAULT_LAYERS;\n const regObj = {\n set: (key, def) => {\n reg[key] = def;\n return regObj;\n },\n get: () => reg\n };\n return regObj;\n};\n","import {\n transactor,\n Smartlabel,\n enableChainedTransaction,\n LifeCycleManager,\n DataModel,\n makeElement,\n getClientPoint,\n selectElement,\n getEvent,\n require,\n DateTimeFormatter\n} from 'muze-utils';\n\nimport {\n SurrogateSideEffect,\n SpawnableSideEffect,\n sideEffects,\n PersistentBehaviour,\n GenericBehaviour,\n VolatileBehaviour,\n behaviouralActions,\n GenericSideEffect\n} from '@chartshq/muze-firebolt';\nimport { layerFactory } from '@chartshq/visual-layer';\nimport pkg from '../package.json';\nimport * as operators from './operators';\nimport { actionModel as ActionModel } from './action-model';\nimport options from './options';\nimport { Canvas } from './canvas';\nimport { COMPONENTS, SUBREGISTRIES } from './default-registry';\nimport './muze.scss';\n\n// Cache singleton instances which should be included only once in a page\nconst globalCache = {};\nconst defaultRegistry = COMPONENTS;\n\nconst overrideRegistryDefinitions = (overrideRegistry, registry) => {\n for (const prop in overrideRegistry) {\n registry.set(prop, overrideRegistry[prop]);\n }\n};\n\n/**\n * Entry point to renderer. Initializes an environment with settings and registries for canvas. This is a simple wrapper\n * over {@link Canvas} which enables common configuration passing to multiple such canvases.\n *\n * Everytime `muze()` is called it creates an environment. These environment supports subset of APIs of Canvas. If\n * common configuration is used to render multiple canvases then it can be set directly in the env. Like if data is\n * common across all the visulization then its better to set the data in env. When a canvas is created it receives all\n * those configuration from env.\n *\n * ```\n * // Creates an environment\n * const env = muze()\n * // Set data property in environment, so that all the canvas created from the same environment gets this data\n * // automatically\n * env.data(dm);\n * // Creates canvas, by default env pushes data to canvas instance\n * const canvas = env.canvas();\n * ```\n *\n * If a property is set on both environment and canvas instance, property set on canvas instance gets more priority.\n *\n * @public\n * @module muze\n * @namespace Muze\n *\n * @return {Env} Instance of an environment\n */\nconst muze = () => {\n // Setters and getters will be mounted on this. Object will be mutated.\n const [env, globalStore] = transactor({}, options);\n const components = Object.assign({}, COMPONENTS);\n const componentSubRegistryDef = Object.assign(SUBREGISTRIES);\n const componentSubRegistry = {};\n\n for (const prop in componentSubRegistryDef) {\n componentSubRegistry[prop] = componentSubRegistryDef[prop]();\n }\n\n // Apart form the setter getter, an instance method is injected to create real renderer instances\n env.canvas = () => {\n // Create a canvas instance with this settings\n const settings = globalStore.serialize();\n const canvas = Canvas.withSettings(settings, { /* registry */\n components,\n componentSubRegistry\n }, env.globalDependencies());\n\n // Whenever settings is changed canvas is updated\n enableChainedTransaction(globalStore, canvas, Object.keys(settings));\n\n return canvas;\n };\n\n // Global dependencies for for compositions. Only one copy of the same should be in the page\n env.globalDependencies = () => {\n if (!globalCache.smartlabel) {\n globalCache.smartlabel = new Smartlabel(1, 'body');\n }\n return {\n smartlabel: globalCache.smartlabel,\n lifeCycleManager: new LifeCycleManager()\n };\n };\n\n // Retrieves global settings. This getter is readonly so that user can't change this as change should happen\n // only from setter to avoid unwanted sync issues.\n env.settings = () => globalStore.serialize();\n\n env.registry = (...overrideRegistry) => {\n // Selectively copy the properties from COMPONENTS\n if (overrideRegistry.length) {\n for (const prop in overrideRegistry) {\n if (prop in defaultRegistry) {\n components[prop] = overrideRegistry[prop];\n }\n }\n return env;\n }\n return components;\n };\n\n env.cellRegistry = (...overrideRegistry) => {\n const cellRegistry = componentSubRegistry.cellRegistry;\n if (overrideRegistry.length) {\n overrideRegistryDefinitions(overrideRegistry[0], cellRegistry);\n return env;\n }\n return cellRegistry.get();\n };\n\n env.layerRegistry = (...overrideRegistry) => {\n const layerRegistry = componentSubRegistry.layerRegistry;\n if (overrideRegistry.length) {\n overrideRegistryDefinitions(overrideRegistry[0], layerRegistry);\n return env;\n }\n return layerRegistry.get();\n };\n\n return env;\n};\n\nconst SideEffects = {\n sideEffects,\n standards: {\n SurrogateSideEffect,\n SpawnableSideEffect,\n GenericSideEffect\n }\n};\n\nconst Behaviours = {\n behaviouralActions,\n standards: {\n GenericBehaviour,\n PersistentBehaviour,\n VolatileBehaviour\n }\n};\n\nmuze.DataModel = DataModel;\nmuze.version = pkg.version;\nmuze.SideEffects = SideEffects;\nmuze.ActionModel = ActionModel;\nmuze.layerFactory = layerFactory;\nmuze.Operators = operators;\nmuze.Behaviours = Behaviours;\nmuze.utils = {\n getClientPoint,\n getEvent,\n makeElement,\n selectElement,\n DateTimeFormatter,\n require\n};\n\nexport default muze;\n"],"sourceRoot":""} \ No newline at end of file diff --git a/packages/muze/npm/package.json b/packages/muze/npm/package.json index 7e58b630..22a7d4a5 100644 --- a/packages/muze/npm/package.json +++ b/packages/muze/npm/package.json @@ -1,41 +1,39 @@ { "name": "muze", - "version": "1.1.0", + "version": "1.2.0", "description": "Composable visualisation library for web with a data-first approach", - "homepage": "https://www.charts.com/muze", + "homepage": "https://muzejs.org", "license": "MIT", - "author": "Charts.com ", + "author": "Muzejs.org (https://muzejs.org/)", "contributors": [ { "name": "Akash Ghoswami", - "email": "akash@charts.com" + "email": "akashgoswami90s@gmail.com" }, { "name": "Ranajit Banerjee", - "email": "ranajit.banerjee@charts.com", + "email": "ranajit.113124@gmail.com", "url": "https://github.com/ranajitbanerjee" }, { "name": "Mridul Meharia", - "email": "mridul@charts.com", + "email": "mehariamridul@gmail.com", "url": "https://github.com/mridulmeh" }, { - "name": "Subhash Haldar", - "email": "subhash@charts.com" + "name": "Subhash Haldar" }, { - "name": "Sandeep Acharya", - "email": "sandeep@charts.com" + "name": "Sandeep Acharya" }, { "name": "Rousan Ali", - "email": "rousan@charts.com", + "email": "rousanali786@gmail.com", "url": "https://rousan.io" }, { "name": "Ujjal Kumar Dutta", - "email": "ujjal@charts.com" + "email": "duttaujjalkumar@live.com" } ], "main": "dist/muze.js", diff --git a/packages/muze/package.json b/packages/muze/package.json index 11c789a8..44751c51 100644 --- a/packages/muze/package.json +++ b/packages/muze/package.json @@ -1,42 +1,40 @@ { "name": "muze", "private": true, - "version": "1.1.0", + "version": "1.2.0", "description": "Composable visualisation library for web with a data-first approach", - "homepage": "https://www.charts.com/muze", + "homepage": "https://muzejs.org", + "author": "Muzejs.org (https://muzejs.org/)", "license": "MIT", - "author": "Charts.com ", "contributors": [ { "name": "Akash Ghoswami", - "email": "akash@charts.com" + "email": "akashgoswami90s@gmail.com" }, { "name": "Ranajit Banerjee", - "email": "ranajit.banerjee@charts.com", + "email": "ranajit.113124@gmail.com", "url": "https://github.com/ranajitbanerjee" }, { "name": "Mridul Meharia", - "email": "mridul@charts.com", + "email": "mehariamridul@gmail.com", "url": "https://github.com/mridulmeh" }, { - "name": "Subhash Haldar", - "email": "subhash@charts.com" + "name": "Subhash Haldar" }, { - "name": "Sandeep Acharya", - "email": "sandeep@charts.com" + "name": "Sandeep Acharya" }, { "name": "Rousan Ali", - "email": "rousan@charts.com", + "email": "rousanali786@gmail.com", "url": "https://rousan.io" }, { "name": "Ujjal Kumar Dutta", - "email": "ujjal@charts.com" + "email": "duttaujjalkumar@live.com" } ], "main": "src/index.js", diff --git a/packages/muze/src/canvas/canvas.js b/packages/muze/src/canvas/canvas.js index 4f9d69d4..b9407991 100644 --- a/packages/muze/src/canvas/canvas.js +++ b/packages/muze/src/canvas/canvas.js @@ -62,13 +62,9 @@ export default class Canvas extends TransactionSupport { // Setters and getters will be mounted on this. The object will be mutated. const namespace = STATE_NAMESPACES.CANVAS_LOCAL_NAMESPACE; - const [, store] = transactor(this, options, this._store.model, { - namespace - }); - transactor(this, localOptions, store, { - namespace - }); - transactor(this, canvasOptions, store, { + const allOptions = Object.assign({}, options, localOptions, canvasOptions); + + transactor(this, allOptions, this._store.model, { namespace }); diff --git a/packages/muze/src/canvas/component-wrapper-maker.js b/packages/muze/src/canvas/component-wrapper-maker.js index 49e1d235..8a678093 100644 --- a/packages/muze/src/canvas/component-wrapper-maker.js +++ b/packages/muze/src/canvas/component-wrapper-maker.js @@ -63,7 +63,7 @@ const createHeaderWrapper = (headerType, layoutManager, renderDetails) => { const existingComponent = layoutManager.getComponent(headerType); if (existingComponent) { wrapper = existingComponent - .updateWrapper(wrapperParams); + .updateWrapper(wrapperParams); } else { wrapper = new HeaderComponent(wrapperParams); } diff --git a/packages/muze/src/canvas/components/grid-component.js b/packages/muze/src/canvas/components/grid-component.js index 07612957..169ae357 100644 --- a/packages/muze/src/canvas/components/grid-component.js +++ b/packages/muze/src/canvas/components/grid-component.js @@ -2,6 +2,7 @@ import { selectElement, getEvent } from 'muze-utils'; import MuzeComponent from './muze-chart-component'; import MatrixComponent from './matrix-component'; import { ROW_MATRIX_INDEX, COLUMN_MATRIX_INDEX } from '../../../../layout/src/enums/constants'; +import { WHEEL_DELTA_MODIFIER } from '../../enums/constants'; /** * Based on the type of scroll, it changes the scrollLeft/scrollTop property of the specific @@ -49,13 +50,24 @@ export default class GridComponent extends MuzeComponent { let width = 0; const { viewMatricesInfo, layoutDimensions } = this.component.viewInfo(); const scrollInfo = this.component.scrollInfo(); + const { + viewHeight, + viewWidth, + unitHeights, + unitWidths + } = layoutDimensions; for (let i = 0; i < 3; i++) { if (!(this.gridComponents.length && this.gridComponents[i] instanceof Array)) { this.gridComponents[i] = []; } for (let j = 0; j < 3; j++) { - const matrixDim = { height: layoutDimensions.viewHeight[i], width: layoutDimensions.viewWidth[j] }; + const matrixDim = { + height: viewHeight[i], + width: viewWidth[j], + unitHeights, + unitWidths + }; const matrix = viewMatricesInfo.matrices[`${ROW_MATRIX_INDEX[i]}`][j]; const matrixName = `${ROW_MATRIX_INDEX[i]}-${COLUMN_MATRIX_INDEX[j]}`; const matrixConfig = { @@ -124,12 +136,14 @@ export default class GridComponent extends MuzeComponent { // Scrolling horizontally if (wheelDeltaX !== 0 && Math.abs(wheelDeltaX) > Math.abs(wheelDeltaY)) { - this.scrollBarManager().triggerScrollBarAction('horizontal', wheelDeltaX); + this.scrollBarManager() + .triggerScrollBarAction('horizontal', wheelDeltaX / WHEEL_DELTA_MODIFIER); } // Scrolling Vertically if (wheelDeltaY !== 0 && Math.abs(wheelDeltaX) < Math.abs(wheelDeltaY)) { - this.scrollBarManager().triggerScrollBarAction('vertical', wheelDeltaY); + this.scrollBarManager() + .triggerScrollBarAction('vertical', wheelDeltaY / WHEEL_DELTA_MODIFIER); } }); return this; diff --git a/packages/muze/src/canvas/components/headerComponent.js b/packages/muze/src/canvas/components/headerComponent.js index 4f6e837f..7afc2f5d 100644 --- a/packages/muze/src/canvas/components/headerComponent.js +++ b/packages/muze/src/canvas/components/headerComponent.js @@ -40,6 +40,7 @@ export default class HeaderComponent extends MuzeComponent { } updateWrapper (params) { + this.setParams(params); this.name(params.name); this.boundBox(params.component.getLogicalSpace()); return this; diff --git a/packages/muze/src/canvas/components/scroll-bar-maker/helper.js b/packages/muze/src/canvas/components/scroll-bar-maker/helper.js index b15b43eb..763c337f 100644 --- a/packages/muze/src/canvas/components/scroll-bar-maker/helper.js +++ b/packages/muze/src/canvas/components/scroll-bar-maker/helper.js @@ -71,18 +71,19 @@ export const applyRectClick = (scrollMaker, moverRect) => { const applyMoverDrag = (scrollMaker, moverRect) => { let startPos = {}; let moverStartPos = 0; + let rectStartPos = 0; let endPos = {}; const { mover, rect } = moverRect; - const rectStartPos = rect.node().getBoundingClientRect(); mover.call(d3Drag() .on('start', () => { const event = getEvent(); moverStartPos = mover.node().getBoundingClientRect(); + rectStartPos = rect.node().getBoundingClientRect(); startPos = { x: event.x, y: event.y diff --git a/packages/muze/src/canvas/layout-maker.js b/packages/muze/src/canvas/layout-maker.js index 1fa2a512..a518b636 100644 --- a/packages/muze/src/canvas/layout-maker.js +++ b/packages/muze/src/canvas/layout-maker.js @@ -3,7 +3,18 @@ import { arrangeComponents } from './component-resolver'; import { createHeaders } from './title-maker'; import { createLegend, getLegendSpace } from './legend-maker'; import { componentWrapperMaker } from './component-wrapper-maker'; -import { TOP, BOTTOM, LEFT, RIGHT } from '../constants'; +import { + TOP, + BOTTOM, + LEFT, + RIGHT, + TITLE, + SUB_TITLE, + LEGEND, + VERTICAL_SCROLL_BAR, + HORIZONTAL_SCROLL_BAR, + GRID +} from '../constants'; import { ScrollManager } from './scroll-manager'; /** @@ -155,6 +166,15 @@ const componentIndexes = { grid: 5 }; +const componentNames = { + 0: TITLE, + 1: SUB_TITLE, + 2: LEGEND, + 3: VERTICAL_SCROLL_BAR, + 4: HORIZONTAL_SCROLL_BAR, + 5: GRID +}; + /** * Responsible for creating a scroll manager that manages interactions between the grid * component and the scroll bar components @@ -208,6 +228,14 @@ export const renderLayout = (canvas, renderDetails) => { const gridWrapper = componentWrappers[grid]; createScrollManager(componentWrappers, canvas); + componentWrappers.forEach((componentWrapper, index) => { + if (componentWrapper === null) { + const deleteElementName = componentNames[index]; + const component = layoutManager.getComponent(deleteElementName); + const deleteElementId = component ? component.renderAt() : null; + layoutManager.removeComponent(deleteElementId); + } + }); layoutManager.registerComponents(componentWrappers).compute(); gridWrapper.attachScrollListener(); }; diff --git a/packages/muze/src/canvas/legend-maker.js b/packages/muze/src/canvas/legend-maker.js index 5ed81b4c..8eaf7602 100644 --- a/packages/muze/src/canvas/legend-maker.js +++ b/packages/muze/src/canvas/legend-maker.js @@ -1,5 +1,5 @@ import { TextCell, AxisCell } from '@chartshq/visual-cell'; -import { getValueParser } from 'muze-utils'; +import { getValueParser, retrieveFieldDisplayName } from 'muze-utils'; import { VERTICAL, HORIZONTAL, LEFT, RIGHT, LEGEND_TYPE_MAP, PADDING, BORDER, MARGIN } from '../constants'; @@ -29,7 +29,14 @@ export const legendCreator = (canvas) => { const stepMapper = typeof step === 'boolean' ? step : false; LegendCls = LEGEND_TYPE_MAP[`${type}-${stepMapper}-${scaleType}`]; - dataset.push({ scale, canvas, fieldName: scaleProps.field, LegendCls, scaleType }); + dataset.push({ + scale, + canvas, + fieldName: scaleProps.field, + title: retrieveFieldDisplayName(canvas.data(), scaleProps.field), + LegendCls, + scaleType + }); } }); @@ -69,11 +76,12 @@ export const legendInitializer = (legendConfig, canvas, measurement, prevLegends LegendCls, scale, fieldName, + title: titleText, scaleType } = dataInfo; const config = legendConfig[scaleType] || {}; const title = config.title || {}; - title.text = title.text || fieldName; + title.text = title.text || titleText; if (config.show) { config.position = position; config.align = align; @@ -96,7 +104,6 @@ export const legendInitializer = (legendConfig, canvas, measurement, prevLegends [PADDING, BORDER, MARGIN].forEach((e) => { legendMeasures[e] = config[e]; }); - legend.scale(scale) .valueParser(parser) .title(title) diff --git a/packages/muze/src/canvas/local-options.js b/packages/muze/src/canvas/local-options.js index 5767cf09..457ac548 100644 --- a/packages/muze/src/canvas/local-options.js +++ b/packages/muze/src/canvas/local-options.js @@ -1,4 +1,4 @@ -import { mergeRecursive } from 'muze-utils'; +import { mergeRecursive, DataModel } from 'muze-utils'; import { ROWS, COLUMNS, @@ -47,13 +47,27 @@ export const localOptions = { typeExpected: 'Array' } }, + data: { + value: null, + meta: { + typeCheck: d => d instanceof DataModel, + sanitization: (dm, prevDm) => { + prevDm && prevDm.dispose(); + let sanitizedDm = dm; + if (dm instanceof DataModel) { + sanitizedDm = dm.project(dm.getSchema().map(d => d.name)); + } + return sanitizedDm; + } + } + }, [COLOR]: { value: null, meta: { typeCheck: 'constructor', typeExpected: 'Object', sanitization: (config) => { - if (typeof config === 'string' || config === null) { + if (typeof config === 'string' || !config) { return { field: config }; @@ -68,7 +82,7 @@ export const localOptions = { typeCheck: 'constructor', typeExpected: 'Object', sanitization: (config) => { - if (typeof config === 'string' || config === null) { + if (typeof config === 'string' || !config) { return { field: config }; @@ -83,7 +97,7 @@ export const localOptions = { typeCheck: 'constructor', typeExpected: 'Object', sanitization: (config) => { - if (typeof config === 'string' || config === null) { + if (typeof config === 'string' || !config) { return { field: config }; @@ -124,9 +138,8 @@ export const canvasOptions = { typeExpected: ['Function', 'Object'], spreadParams: true, sanitization: [(title) => { - if (typeof title === 'string') { + if (typeof title === 'string' || !title) { const t = () => title; - t._sanitized = true; return t; } return title; @@ -143,9 +156,8 @@ export const canvasOptions = { typeExpected: ['Function', 'Object'], spreadParams: true, sanitization: [(subtitle) => { - if (typeof subtitle === 'string') { + if (typeof subtitle === 'string' || !subtitle) { const sub = () => subtitle; - sub._sanitized = true; return sub; } return subtitle; diff --git a/packages/muze/src/canvas/title-maker.js b/packages/muze/src/canvas/title-maker.js index ffc43a41..9e7fb61a 100644 --- a/packages/muze/src/canvas/title-maker.js +++ b/packages/muze/src/canvas/title-maker.js @@ -90,7 +90,7 @@ export const createHeaders = (context, canvasHeight, canvasWidth) => { canvasHeight >= 200 && canvasWidth >= 200 && ['title', 'subtitle'].forEach((type) => { const headerOptions = context[type](); const content = resolveTitleSubTitleContent(headerOptions[0]); - if (content.length) { + if (content) { const config = headerOptions[1]; config.width = context.width(); diff --git a/packages/muze/src/constants.js b/packages/muze/src/constants.js index 865782ee..ae209078 100644 --- a/packages/muze/src/constants.js +++ b/packages/muze/src/constants.js @@ -73,3 +73,6 @@ export const OVERFLOW_X = 'overflow-x'; export const OVERFLOW_Y = 'overflow-y'; export const AUTO = 'auto'; export const VISIBLE = 'visible'; +export const VERTICAL_SCROLL_BAR = 'verticalScrollBar'; +export const HORIZONTAL_SCROLL_BAR = 'horizontalScrollBar'; +export const GRID = 'grid'; diff --git a/packages/muze/src/defaults.js b/packages/muze/src/defaults.js index bf48d048..46363026 100644 --- a/packages/muze/src/defaults.js +++ b/packages/muze/src/defaults.js @@ -41,6 +41,9 @@ export const DEFAULT_CONFIG = { width: 20 } }, + sort: { + disabled: false + }, showHeaders: false, minWidth: 100, minHeight: 100, diff --git a/packages/muze/src/enums/constants.js b/packages/muze/src/enums/constants.js index 0e3ee659..ba9c6265 100644 --- a/packages/muze/src/enums/constants.js +++ b/packages/muze/src/enums/constants.js @@ -2,3 +2,4 @@ export const SIDE_EFFECT_COMMON = 'common'; export const SIDE_EFFECT_INDIVIDUAL = 'individual'; export const TOOLTIP_CONSOLIDATED = 'consolidated'; export const TOOLTIP_FRAGMENTED = 'fragmented'; +export const WHEEL_DELTA_MODIFIER = 30; diff --git a/packages/transform/README.md b/packages/transform/README.md index 1cc2b771..6db33c6d 100644 --- a/packages/transform/README.md +++ b/packages/transform/README.md @@ -10,7 +10,7 @@ $ npm install --save @chartshq/transform ## Docs -Please refer to [this](https://www.charts.com/muze/docs) for detailed documentation. +Please refer to [this](https://muzejs.org/docs) for detailed documentation. ## Contributing diff --git a/packages/transform/package.json b/packages/transform/package.json index 2171254f..52ff66ea 100644 --- a/packages/transform/package.json +++ b/packages/transform/package.json @@ -2,40 +2,37 @@ "name": "@chartshq/transform", "version": "1.0.0", "description": "The transform module used in MuzeJS", - "homepage": "https://www.charts.com/muze", + "homepage": "https://muzejs.org", "license": "MIT", - "author": "Charts.com ", "contributors": [ { "name": "Akash Ghoswami", - "email": "akash@charts.com" + "email": "akashgoswami90s@gmail.com" }, { "name": "Ranajit Banerjee", - "email": "ranajit.banerjee@charts.com", + "email": "ranajit.113124@gmail.com", "url": "https://github.com/ranajitbanerjee" }, { "name": "Mridul Meharia", - "email": "mridul@charts.com", + "email": "mehariamridul@gmail.com", "url": "https://github.com/mridulmeh" }, { - "name": "Subhash Haldar", - "email": "subhash@charts.com" + "name": "Subhash Haldar" }, { - "name": "Sandeep Acharya", - "email": "sandeep@charts.com" + "name": "Sandeep Acharya" }, { "name": "Rousan Ali", - "email": "rousan@charts.com", + "email": "rousanali786@gmail.com", "url": "https://rousan.io" }, { "name": "Ujjal Kumar Dutta", - "email": "ujjal@charts.com" + "email": "duttaujjalkumar@live.com" } ], "main": "src/index.js", diff --git a/packages/visual-cell/README.md b/packages/visual-cell/README.md index d35f17ff..67eac5a1 100644 --- a/packages/visual-cell/README.md +++ b/packages/visual-cell/README.md @@ -10,7 +10,7 @@ $ npm install --save @chartshq/visual-cell ## Docs -Please refer to [this](https://www.charts.com/muze/docs) for detailed documentation. +Please refer to [this](https://muzejs.org/docs) for detailed documentation. ## Contributing diff --git a/packages/visual-cell/package.json b/packages/visual-cell/package.json index e4ef05c7..a3f3fb2f 100644 --- a/packages/visual-cell/package.json +++ b/packages/visual-cell/package.json @@ -2,40 +2,37 @@ "name": "@chartshq/visual-cell", "version": "1.0.0", "description": "Visual cell implementation for muzejs", - "homepage": "https://www.charts.com/muze", + "homepage": "https://muzejs.org", "license": "MIT", - "author": "Charts.com ", "contributors": [ { "name": "Akash Ghoswami", - "email": "akash@charts.com" + "email": "akashgoswami90s@gmail.com" }, { "name": "Ranajit Banerjee", - "email": "ranajit.banerjee@charts.com", + "email": "ranajit.113124@gmail.com", "url": "https://github.com/ranajitbanerjee" }, { "name": "Mridul Meharia", - "email": "mridul@charts.com", + "email": "mehariamridul@gmail.com", "url": "https://github.com/mridulmeh" }, { - "name": "Subhash Haldar", - "email": "subhash@charts.com" + "name": "Subhash Haldar" }, { - "name": "Sandeep Acharya", - "email": "sandeep@charts.com" + "name": "Sandeep Acharya" }, { "name": "Rousan Ali", - "email": "rousan@charts.com", + "email": "rousanali786@gmail.com", "url": "https://rousan.io" }, { "name": "Ujjal Kumar Dutta", - "email": "ujjal@charts.com" + "email": "duttaujjalkumar@live.com" } ], "main": "src/index.js", diff --git a/packages/visual-cell/src/axis-cell.js b/packages/visual-cell/src/axis-cell.js index 51dcf354..69320d2b 100644 --- a/packages/visual-cell/src/axis-cell.js +++ b/packages/visual-cell/src/axis-cell.js @@ -4,7 +4,7 @@ * @module VisualCell */ import { selectElement, makeElement, generateGetterSetters } from 'muze-utils'; -import { CLASSPREFIX, HEIGHT, WIDTH, AXIS_CELL } from './enums/constants'; +import { CLASSPREFIX, HEIGHT, WIDTH, AXIS_CELL, BOTTOM, TOP } from './enums/constants'; import SimpleCell from './simple-cell'; import { DEFAULT_CONFIG } from './enums/defaults'; import { AXIS } from './enums/cell-type'; @@ -172,6 +172,8 @@ class AxisCell extends SimpleCell { if (!mount) { return this; } + let actualWidth = 0; + let actualHeight = 0; const axis = this.source(); const availHeight = this.availHeight(); const availWidth = this.availWidth(); @@ -199,8 +201,14 @@ class AxisCell extends SimpleCell { if (!availHeight) { selection.attr(HEIGHT, `${0}px`); } - wrapperDiv.style(WIDTH, `${show ? Math.floor(availWidth) : 0}px`) - .style(HEIGHT, `${show ? Math.floor(availHeight) : 0}px`) + actualWidth = availWidth; + actualHeight = availHeight; + if (!show) { + actualWidth = (orientation === TOP || orientation === BOTTOM) ? availWidth : 0; + actualHeight = (orientation === TOP || orientation === BOTTOM) ? 0 : availHeight; + } + wrapperDiv.style(WIDTH, `${actualWidth}px`) + .style(HEIGHT, `${actualHeight}px`) .style('margin-top', top) .style('margin-bottom', bottom) .style('margin-left', left) diff --git a/packages/visual-cell/src/blank-cell.js b/packages/visual-cell/src/blank-cell.js index c578436c..16cd6d45 100644 --- a/packages/visual-cell/src/blank-cell.js +++ b/packages/visual-cell/src/blank-cell.js @@ -154,5 +154,9 @@ class BlankCell extends SimpleCell { this.mount() && this.mount().remove(); return this; } + + getMinMeasures () { + return 0; + } } export default BlankCell; diff --git a/packages/visual-cell/src/geom-cell.js b/packages/visual-cell/src/geom-cell.js index e75c76a6..16c7a147 100644 --- a/packages/visual-cell/src/geom-cell.js +++ b/packages/visual-cell/src/geom-cell.js @@ -123,6 +123,7 @@ class GeomCell extends SimpleCell { updateModel () { const unit = this.source(); unit.lockModel(); + unit.clearCaching(); [LAYER_DEF, TRANSFORM, AXES, FIELDS, CONFIG, DATA, AXES, FACET_BY_FIELDS, DETAIL_FIELDS].forEach((prop) => { this[prop]() && unit[prop](this[prop]()); }); diff --git a/packages/visual-cell/src/props.js b/packages/visual-cell/src/props.js index 9dacd337..e3da32b3 100644 --- a/packages/visual-cell/src/props.js +++ b/packages/visual-cell/src/props.js @@ -17,9 +17,7 @@ const geomProps = { data: {}, caption: {}, config: {}, - axes: { - sanitization: (context, value) => Object.assign(context._axes, value) - }, + axes: {}, facetByFields: {}, fields: {}, transform: {}, diff --git a/packages/visual-cell/src/simple-cell.js b/packages/visual-cell/src/simple-cell.js index 78ba3a76..59d72fb7 100644 --- a/packages/visual-cell/src/simple-cell.js +++ b/packages/visual-cell/src/simple-cell.js @@ -123,6 +123,10 @@ class SimpleCell { throw new Error(ERROR_MSG.INTERFACE_IMPL); } + getMinMeasures (providedMinMeasure = 0) { + return providedMinMeasure; + } + } export default SimpleCell; diff --git a/packages/visual-group/README.md b/packages/visual-group/README.md index 4d83052b..738d48c9 100644 --- a/packages/visual-group/README.md +++ b/packages/visual-group/README.md @@ -11,7 +11,7 @@ $ npm install --save @chartshq/visual-group ## Docs -Please refer to [this](https://www.charts.com/muze/docs) for detailed documentation. +Please refer to [this](https://muzejs.org/docs) for detailed documentation. ## Contributing diff --git a/packages/visual-group/package.json b/packages/visual-group/package.json index bf94b5a6..37f6388c 100644 --- a/packages/visual-group/package.json +++ b/packages/visual-group/package.json @@ -2,40 +2,37 @@ "name": "@chartshq/visual-group", "version": "1.0.0", "description": "Visual group for muzejs", - "homepage": "https://www.charts.com/muze", + "homepage": "https://muzejs.org", "license": "MIT", - "author": "Charts.com ", "contributors": [ { "name": "Akash Ghoswami", - "email": "akash@charts.com" + "email": "akashgoswami90s@gmail.com" }, { "name": "Ranajit Banerjee", - "email": "ranajit.banerjee@charts.com", + "email": "ranajit.113124@gmail.com", "url": "https://github.com/ranajitbanerjee" }, { "name": "Mridul Meharia", - "email": "mridul@charts.com", + "email": "mehariamridul@gmail.com", "url": "https://github.com/mridulmeh" }, { - "name": "Subhash Haldar", - "email": "subhash@charts.com" + "name": "Subhash Haldar" }, { - "name": "Sandeep Acharya", - "email": "sandeep@charts.com" + "name": "Sandeep Acharya" }, { "name": "Rousan Ali", - "email": "rousan@charts.com", + "email": "rousanali786@gmail.com", "url": "https://rousan.io" }, { "name": "Ujjal Kumar Dutta", - "email": "ujjal@charts.com" + "email": "duttaujjalkumar@live.com" } ], "main": "src/index.js", diff --git a/packages/visual-group/src/encoder/cartesian-encoder.js b/packages/visual-group/src/encoder/cartesian-encoder.js index 8760bd42..11aa4d76 100644 --- a/packages/visual-group/src/encoder/cartesian-encoder.js +++ b/packages/visual-group/src/encoder/cartesian-encoder.js @@ -1,17 +1,27 @@ import { layerFactory } from '@chartshq/visual-layer'; -import { mergeRecursive, STATE_NAMESPACES, unionDomain } from 'muze-utils'; +import { + mergeRecursive, + STATE_NAMESPACES, + unionDomain, + COORD_TYPES, + toArray +} from 'muze-utils'; +import { ScaleType } from '@chartshq/muze-axis'; import { generateAxisFromMap, getDefaultMark, getIndex, getLayerConfFromFields, - getAdjustedDomain + getAdjustedDomain, + sanitizeIndividualLayerConfig } from './encoder-helper'; import { retriveDomainFromData } from '../group-helper'; -import { ROW, COLUMN, COL, LEFT, TOP, CARTESIAN, MEASURE, BOTH, X, Y } from '../enums/constants'; +import { ROW, COLUMN, COL, LEFT, TOP, MEASURE, BOTH, X, Y, ASCENDING, DESCENDING } from '../enums/constants'; import VisualEncoder from './visual-encoder'; +const CARTESIAN = COORD_TYPES.CARTESIAN; + /** * * @@ -63,6 +73,7 @@ export default class CartesianEncoder extends VisualEncoder { fields: columnFields, index: columnIndex }]; + const { resolver, facetFields, geomCell } = context; const xAxes = axes.x || []; const yAxes = axes.y || []; @@ -77,9 +88,10 @@ export default class CartesianEncoder extends VisualEncoder { } geomCellAxes[axis] = generateAxisFromMap(axis, axisFields[i], axesCreators, { groupAxes: axis === X ? xAxes : yAxes, - valueParser: context.resolver.valueParser() - }); + valueParser: resolver.valueParser() + }, indices, facetFields); }); + geomCell.axes(geomCellAxes); return geomCellAxes; } @@ -104,26 +116,36 @@ export default class CartesianEncoder extends VisualEncoder { unionUnitDomains (context) { const store = context.store(); - const unitDomains = store.get(`${STATE_NAMESPACES.UNIT_GLOBAL_NAMESPACE}.domain`); const resolver = context.resolver(); const units = resolver.units(); const domains = { 0: {}, 1: {} }; + // const sortingDetails = nearestSortingDetails(context.getGroupByData()); + const config = context.config(); + const fieldsObj = { + 0: {}, + 1: {} + }; for (let rIdx = 0, len = units.length; rIdx < len; rIdx++) { const unitsArr = units[rIdx]; for (let cIdx = 0, len2 = unitsArr.length; cIdx < len2; cIdx++) { const unit = unitsArr[cIdx]; const axisFields = unit.fields(); - [axisFields.x, axisFields.y].forEach((fieldArr, axisType) => { + const encodingDomains = unit.getDataDomain(); + ['x', 'y'].forEach((axisType, axisTypeIndex) => { + const fieldArr = axisFields[axisType]; fieldArr.forEach((field, axisIndex) => { - const key = !axisType ? `0${cIdx}${axisIndex}` : `${rIdx}0${axisIndex}`; - const dom = unitDomains[`${rIdx}${cIdx}`]; + const key = !axisTypeIndex ? `0${cIdx}${axisIndex}` : `${rIdx}0${axisIndex}`; + const dom = encodingDomains[axisType]; + const typeOfField = field.subtype(); + fieldsObj[axisTypeIndex][key] = field; + if (dom && Object.keys(dom).length !== 0) { - domains[axisType][key] = unionDomain([(domains[axisType] && domains[axisType][key]) || [], - dom[`${field}`]], field.subtype()); + domains[axisTypeIndex][key] = unionDomain([(domains[axisTypeIndex] && + domains[axisTypeIndex][key]) || [], dom[`${field}`]], typeOfField); } }); }); @@ -134,24 +156,43 @@ export default class CartesianEncoder extends VisualEncoder { store.model.lock(); [xAxes, yAxes].forEach((axesArr, axisType) => { axesArr.forEach((axes, idx) => { - const min = []; - const max = []; + let key; let domain = []; let adjustedDomain = []; - if (axes.length > 1 && axes[0].constructor.type() === 'linear' && axes[0].config().alignZeroLine) { + const min = []; + const max = []; + const typeOfAxis = axes[0].constructor.type(); + + if (axes.length > 1 && typeOfAxis === ScaleType.LINEAR && axes[0].config().alignZeroLine) { axes.forEach((axis, i) => { - const key = !axisType ? `0${idx}${i}` : `${idx}0${i}`; + key = !axisType ? `0${idx}${i}` : `${idx}0${i}`; domain = domains[axisType][key]; min[i] = domain[0]; max[i] = domain[1]; }); adjustedDomain = getAdjustedDomain(max, min); + } else if (typeOfAxis === ScaleType.BAND) { + /* Sort categorical fields to ensure consistency across all rows + only if field is categorical and is not explicitily sorted by user */ + key = !axisType ? `0${idx}0` : `${idx}00`; + const currentFieldName = fieldsObj[axisType][key].oneVar(); + const sortingOrder = config.sort[currentFieldName]; + const isSortingDisabled = config.sort.disabled; + + if (!isSortingDisabled && sortingOrder) { + if (sortingOrder === ASCENDING) { + domains[axisType][key].sort(); + } else if (sortingOrder === DESCENDING) { + domains[axisType][key].sort().reverse(); + } + } } axes.forEach((axis, index) => { - const key = !axisType ? `0${idx}${index}` : `${idx}0${index}`; + key = !axisType ? `0${idx}${index}` : `${idx}0${index}`; domain = adjustedDomain[index] || domains[axisType][key]; - axis.domain(domain); + + domain && axis.domain(domain); const type = !axisType ? 'x' : 'y'; store.commit(`${STATE_NAMESPACES.GROUP_GLOBAL_NAMESPACE}.domain.${type}.${idx}${index}`, domain); }); @@ -292,6 +333,16 @@ export default class CartesianEncoder extends VisualEncoder { return serializedLayers; } + sanitizeLayerConfig (encodingConfigs, userLayerConfig) { + const layerConfig = []; + userLayerConfig.forEach((config) => { + const def = toArray(config.def); + sanitizeIndividualLayerConfig(encodingConfigs, def); + layerConfig.push(config); + }); + return layerConfig; + } + /** * * @@ -300,7 +351,7 @@ export default class CartesianEncoder extends VisualEncoder { * * @memberof CartesianEncoder */ - getLayerConfig (fields, userLayerConfig) { + getLayerConfig (fields, userLayerConfig, retinalConfig) { const layerConfig = []; const { columnFields, @@ -353,6 +404,6 @@ export default class CartesianEncoder extends VisualEncoder { layerConfig.push(...configs); }); }); - return layerConfig; + return this.sanitizeLayerConfig(retinalConfig, layerConfig); } } diff --git a/packages/visual-group/src/encoder/encoder-helper.js b/packages/visual-group/src/encoder/encoder-helper.js index 4c6cb869..1fb6900a 100644 --- a/packages/visual-group/src/encoder/encoder-helper.js +++ b/packages/visual-group/src/encoder/encoder-helper.js @@ -1,9 +1,10 @@ -import { mergeRecursive } from 'muze-utils'; +import { mergeRecursive, getObjProp } from 'muze-utils'; import { AxisOrientation } from '@chartshq/muze-axis'; +import { ENCODING } from '@chartshq/visual-layer'; import { scaleMaps } from '../enums/scale-maps'; import { getAxisType, getAxisKey } from '../group-helper'; import { dataTypeScaleMap } from '../data-type-scale-map'; -import { CATEGORICAL, TEMPORAL, BAR, LINE, POINT, BOTH, Y } from '../enums/constants'; +import { CATEGORICAL, TEMPORAL, BAR, LINE, POINT, BOTH, Y, COLOR, SHAPE, SIZE, ANGLE0 } from '../enums/constants'; /** * @@ -13,11 +14,26 @@ import { CATEGORICAL, TEMPORAL, BAR, LINE, POINT, BOTH, Y } from '../enums/const * @param {*} axesCreators * */ -const getAxisConfig = (axisInfo, field, axesCreators) => { +const getAxisConfig = (axisInfo, field, axesCreators, indices, facetFields) => { let axisOrientation; const { index, axisIndex, axisType } = axisInfo; const { config, position } = axesCreators; - const userAxisConfig = config.axes ? (config.axes[axisType] || {}) : {}; + const { rowIndex, columnIndex } = indices; + const rawUserAxisConfig = config.axes ? (config.axes[axisType] || {}) : {}; + + // Change config object to a function if not already one + const userAxisConfigFn = typeof rawUserAxisConfig !== 'function' ? + () => rawUserAxisConfig : rawUserAxisConfig; + const userAxisConfig = userAxisConfigFn(rowIndex, columnIndex, { + axisFields: field.getMembers(), + facetFields + }); + + // If current config does not specifes config for an axis, retain old config + if (!userAxisConfig) { + return {}; + } + const { LEFT, RIGHT, @@ -33,7 +49,7 @@ const getAxisConfig = (axisInfo, field, axesCreators) => { } const axisConfig = { id: `${axisType}-${index}-${axisIndex}`, - name: field.toString(), + name: field.displayName(), field: field.toString(), numberFormat: field.numberFormat(), orientation: axisOrientation, @@ -108,7 +124,7 @@ export const getAdjustedDomain = (max, min) => { * @param {*} groupAxes * */ -export const generateAxisFromMap = (axisType, fieldInfo, axesCreators, axesInfo) => { +export const generateAxisFromMap = (axisType, fieldInfo, axesCreators, axesInfo, indices, facetFields) => { let axisKey; const { groupAxes, valueParser } = axesInfo; const currentAxes = []; @@ -119,7 +135,7 @@ export const generateAxisFromMap = (axisType, fieldInfo, axesCreators, axesInfo) const commonAxisKey = getAxisKey(axisType, index); fields.forEach((field, axisIndex) => { axisKey = getAxisKey(axisType, index, axisIndex, dataTypeScaleMap[field.subtype()]); - const axisConfig = getAxisConfig({ index, axisIndex, axisType }, field, axesCreators); + const axisConfig = getAxisConfig({ index, axisIndex, axisType }, field, axesCreators, indices, facetFields); let axis; if (!map.has(axisKey)) { @@ -128,7 +144,6 @@ export const generateAxisFromMap = (axisType, fieldInfo, axesCreators, axesInfo) axis = map.get(axisKey); axis._rotationLock = false; axis.config(axisConfig); - axisConfig.domain ? axis.domain(axisConfig.domain) : axis.resetDomain(); } axis.valueParser(valueParser); currentAxes.push(axis); @@ -143,6 +158,18 @@ export const generateAxisFromMap = (axisType, fieldInfo, axesCreators, axesInfo) return currentAxes; }; +export const sanitizeIndividualLayerConfig = (encodingConfigs, def) => { + [COLOR, SHAPE, SIZE].forEach((axis) => { + if (encodingConfigs[axis] && encodingConfigs[axis].field) { + def.forEach((conf) => { + conf.encoding = conf.encoding || {}; + !conf.encoding[axis] && (conf.encoding[axis] = {}); + conf.encoding[axis].field = encodingConfigs[axis].field; + }); + } + }); +}; + /** * * @@ -265,3 +292,29 @@ export const getLayerConfFromFields = (colFields, rowFields, userLayerConfig) => } return colFieldExist || rowFieldExist; }); + +export const resolveAxisConfig = (context, fieldInf, axisInfo) => { + const { rowIndex, columnIndex, axesObj } = axisInfo; + const { config, facetFields, resolver } = context; + const resolverAxes = resolver.axes(); + const { RADIUS, ANGLE } = ENCODING; + [RADIUS, ANGLE, ANGLE0].forEach((enc) => { + const axesArr = resolverAxes[enc]; + if (!axesArr[rowIndex]) { + axesArr[rowIndex] = []; + } + axesArr[rowIndex][columnIndex] = axesObj[enc]; + const axisConfig = getObjProp(config.axes, enc) || {}; + + axesObj[enc].forEach((axis, i) => { + let userConfig = axisConfig; + if (axisConfig instanceof Function) { + userConfig = axisConfig(rowIndex, columnIndex, { + axisFields: [fieldInf[enc][i]], + facetFields + }); + } + axis.config(userConfig); + }); + }); +}; diff --git a/packages/visual-group/src/encoder/polar-encoder.js b/packages/visual-group/src/encoder/polar-encoder.js index 3593d39d..0699b174 100644 --- a/packages/visual-group/src/encoder/polar-encoder.js +++ b/packages/visual-group/src/encoder/polar-encoder.js @@ -1,7 +1,47 @@ -import { layerFactory } from '@chartshq/visual-layer'; -import { mergeRecursive, STATE_NAMESPACES } from 'muze-utils'; +import { AngleAxis, RadiusAxis } from '@chartshq/muze-axis'; +import { layerFactory, ENCODING } from '@chartshq/visual-layer'; +import { + mergeRecursive, + STATE_NAMESPACES, + GROUP_BY_FUNCTIONS, + COORD_TYPES, + toArray, + getObjProp, + defaultValue +} from 'muze-utils'; import VisualEncoder from './visual-encoder'; -import { RADIUS, ANGLE, SIZE, MEASURE, ARC, POLAR, COLOR } from '../enums/constants'; +import { SIZE, MEASURE, ARC, COLOR } from '../enums/constants'; +import { sanitizeIndividualLayerConfig, resolveAxisConfig } from './encoder-helper'; +import { SimpleVariable } from '../variable'; + +const POLAR = COORD_TYPES.POLAR; +const { RADIUS, ANGLE, ANGLE0 } = ENCODING; + +const axesCls = { + [RADIUS]: RadiusAxis, + [ANGLE]: AngleAxis, + [ANGLE0]: AngleAxis +}; + +const getSizeMultiplier = (sizeVal, sizeAxis) => { + const sizeAxisDomain = sizeAxis.domain(); + const sizeMultiplier = sizeAxis.getSize(sizeVal) / (sizeAxisDomain ? sizeAxis.range()[1] : sizeAxis.config().value); + return sizeMultiplier; +}; + +const setRadiusFactor = (context) => { + const data = context.data(); + const sizeField = context.retinalFields().size.field; + const { radius, size } = context.axes(); + + if (sizeField && radius && radius.length) { + const sizeFieldIndex = data.getFieldsConfig()[sizeField].index; + const sizeVal = data.getData().data.reduce((acc, val) => acc + val[sizeFieldIndex], 1); + const sizeMultiplier = getSizeMultiplier(sizeVal, size[0]); + radius.forEach(axis => axis.setRadiusFactor(sizeMultiplier)); + } +}; + /** * * @@ -19,7 +59,7 @@ export default class PolarEncoder extends VisualEncoder { * * @memberof PolarEncoder */ - createAxis (axesCreators, fieldInfo) { + createAxis (axesCreators, fieldInfo, context) { const { axes } = axesCreators; @@ -37,10 +77,45 @@ export default class PolarEncoder extends VisualEncoder { pieAxes[rowIndex] = pieAxes[rowIndex] || []; pieAxes[rowIndex][columnIndex] = []; - geomCellAxes.pie = pieAxes; - geomCellAxes.x = null; - geomCellAxes.y = null; + const axesObj = {}; + const { geomCell, resolver } = context; + const layers = resolver.matrixLayers(); + const resolverAxes = resolver.axes(); + const cellLayers = layers[rowIndex][columnIndex]; + const fields = { + radius: {}, + angle: {}, + angle0: {} + }; + cellLayers.forEach((layerConf) => { + const def = layerConf.def; + [ANGLE, ANGLE0, RADIUS].forEach((enc) => { + const field = getObjProp(def.encoding, enc, 'field'); + field && (fields[enc][field] = 0); + }); + }); + const fieldInf = {}; + const varInstances = {}; + + for (const encType in fields) { + fieldInf[encType] = Object.keys(fields[encType]); + axesObj[encType] = []; + varInstances[encType] = []; + fieldInf[encType].forEach((field, i) => { + varInstances[encType][i] = new SimpleVariable(field); + axesObj[encType][i] = new axesCls[encType](); + }); + axesObj[encType][axesObj[encType].length] = new axesCls[encType](); + } + resolveAxisConfig(context, fieldInf, { + axesObj, + rowIndex, + columnIndex + }); + geomCell.axes(axesObj) + .fields(Object.assign({}, varInstances, geomCell.fields())); + resolverAxes.pie = pieAxes; return geomCellAxes; } @@ -89,17 +164,39 @@ export default class PolarEncoder extends VisualEncoder { unionUnitDomains (context) { const store = context.store(); - const domains = store.get(`${STATE_NAMESPACES.UNIT_GLOBAL_NAMESPACE}.domain`); const domainProps = { - radius: [Infinity, -Infinity] + radius: [], + angle: [], + angle0: [] }; - Object.values(domains).forEach((domainVal) => { - for (const key in domainVal) { - domainProps[key] = [Math.min(domainVal[key][0], domainProps[key][0]), - Math.min(domainVal[key][1], domainProps[key][1])]; - } + const axes = context.resolver().axes(); + context.matrixInstance().value.each((cell, rIdx, cIdx) => { + const unit = cell.valueOf(); + const unitDomains = unit.getDataDomain(); + const fields = unit.fields(); + setRadiusFactor(unit); + [RADIUS, ANGLE, ANGLE0].forEach((encType) => { + const encodingFields = fields[encType]; + const domains = unitDomains[encType] || {}; + encodingFields.forEach((field, i) => { + !domainProps[encType][rIdx] && (domainProps[encType][rIdx] = []); + !domainProps[encType][rIdx][cIdx] && (domainProps[encType][rIdx][cIdx] = []); + domainProps[encType][rIdx][cIdx][i] = domains[`${field}`] || []; + }); + }); }); - store.commit(`${STATE_NAMESPACES.GROUP_GLOBAL_NAMESPACE}.domain.radius`, domainProps.radius); + + for (const key in domainProps) { + const specificAxes = axes[key]; + specificAxes.forEach((axesArr, rIdx) => { + axesArr.forEach((axisArr, cIdx) => { + axisArr.forEach((axis, i) => { + axis.domain(defaultValue(getObjProp(domainProps[key], rIdx, cIdx, i), [])); + }); + }); + }); + store.commit(`${STATE_NAMESPACES.GROUP_GLOBAL_NAMESPACE}.domain.${key}`, domainProps[key]); + } } /** @@ -195,7 +292,7 @@ export default class PolarEncoder extends VisualEncoder { if (sizeField) { domains[sizeField] = dataModel.groupBy(facetFields, { - [sizeField]: 'sum' + [sizeField]: GROUP_BY_FUNCTIONS.SUM }).getFieldspace().fieldsObj()[sizeField].domain(); } @@ -205,6 +302,7 @@ export default class PolarEncoder extends VisualEncoder { } return domains; } + /** * * @@ -213,7 +311,7 @@ export default class PolarEncoder extends VisualEncoder { * * @memberof PolarEncoder */ - getLayerConfig (fields, userLayerConfig) { + getLayerConfig (fields, userLayerConfig, retinalConfig) { let layerConfig = []; const { columnFields, @@ -237,9 +335,9 @@ export default class PolarEncoder extends VisualEncoder { if (layerConfig.length === 0) { layerConfig = userLayerConfig; } - - this.layers(layerConfig); - return layerConfig; + const sanitizedConfig = this.sanitizeLayerConfig(retinalConfig, layerConfig); + this.layers(sanitizedConfig); + return sanitizedConfig; } /** @@ -261,4 +359,33 @@ export default class PolarEncoder extends VisualEncoder { }); return serializedLayers; } + + sanitizeLayerConfig (encodingConfigs, userLayerConfig) { + const layerConfig = []; + + userLayerConfig.forEach((config) => { + const def = toArray(config.def); + sanitizeIndividualLayerConfig(encodingConfigs, def); + def.forEach((conf) => { + const encoding = conf.encoding || (conf.encoding = {}); + !encoding.angle && (encoding.angle = {}); + const angleField = getObjProp(encoding.angle, 'field'); + const angle0Field = getObjProp(encoding.angle0, 'field'); + if (!angleField) { + Object.assign(encoding.angle, { + field: encodingConfigs.color && encodingConfigs.color.field + }); + } + if (!angle0Field) { + !encoding.angle0 && (encoding.angle0 = {}); + Object.assign(encoding.angle0, { + field: encoding.angle.field + }); + } + }); + + layerConfig.push(config); + }); + return layerConfig; + } } diff --git a/packages/visual-group/src/encoder/retinal-encoder.js b/packages/visual-group/src/encoder/retinal-encoder.js index 83236122..c426f1ce 100644 --- a/packages/visual-group/src/encoder/retinal-encoder.js +++ b/packages/visual-group/src/encoder/retinal-encoder.js @@ -39,39 +39,6 @@ export default class RetinalEncoder extends VisualEncoder { return 'retinal'; } - /** - * - * - * @param {*} fields - * @param {*} userLayerConfig - * - * @memberof RetinalEncoder - */ - getLayerConfig (encodingConfigs, userLayerConfig) { - const layerConfig = []; - userLayerConfig.forEach((e) => { - const config = e; - [COLOR, SHAPE, SIZE].forEach((axis) => { - if (encodingConfigs[axis] && encodingConfigs[axis].field) { - const def = config.def; - if (config.def instanceof Array) { - def.forEach((conf) => { - conf.encoding = conf.encoding || {}; - !conf.encoding[axis] && (conf.encoding[axis] = {}); - conf.encoding[axis].field = encodingConfigs[axis].field; - }); - } else { - def.encoding = def.encoding || {}; - !def.encoding[axis] && (def.encoding[axis] = {}); - def.encoding[axis].field = encodingConfigs[axis].field; - } - } - }); - layerConfig.push(config); - }); - return layerConfig; - } - /** * * diff --git a/packages/visual-group/src/enums/constants.js b/packages/visual-group/src/enums/constants.js index 929db046..44b0f91b 100644 --- a/packages/visual-group/src/enums/constants.js +++ b/packages/visual-group/src/enums/constants.js @@ -221,18 +221,12 @@ export const RADIUS = 'radius'; * Field referring to object storing the transforms */ export const ANGLE = 'angle'; + +export const ANGLE0 = 'angle0'; /** * Field referring to object storing the transforms */ export const ARC = 'arc'; -/** - * Field referring to object storing the transforms - */ -export const CARTESIAN = 'cartesian'; -/** - * Field referring to object storing the transforms - */ -export const POLAR = 'polar'; /** * Field referring to object storing the transforms */ @@ -285,4 +279,11 @@ export const HEADER = 'header'; * Field referring to object storing the transforms */ export const FACET = 'facet'; - +/** + * Ordering type + */ +export const ASCENDING = 'asc'; +/** + * Ordering type + */ +export const DESCENDING = 'desc'; diff --git a/packages/visual-group/src/group-helper/cell-creator.js b/packages/visual-group/src/group-helper/cell-creator.js index 24f59ecf..8074b1cb 100644 --- a/packages/visual-group/src/group-helper/cell-creator.js +++ b/packages/visual-group/src/group-helper/cell-creator.js @@ -15,7 +15,9 @@ import { getFieldsFromSuppliedLayers, extractFields } from './group-utils'; -import { ROW, ROWS, COLUMNS, COL, LEFT, RIGHT, TOP, BOTTOM, PRIMARY, SECONDARY, X, Y } from '../enums/constants'; +import { ROW, ROWS, COLUMNS, COL, LEFT, RIGHT, TOP, + BOTTOM, PRIMARY, SECONDARY, X, Y, TEMPORAL } from '../enums/constants'; +import { SimpleVariable } from '../variable'; /** * Updates row and column cells with the geom cell corresponding to the facet keys @@ -75,13 +77,19 @@ export const createValueCells = (context, datamodel, fieldInfo, facets) => { entryCellMap, exitCellMap } = cacheMaps; - const layerConfigArr = encoder.getLayerConfig({ columnFields, rowFields }, suppliedLayers || []); + const layerConfigArr = encoder.getLayerConfig({ columnFields, rowFields }, suppliedLayers || [], + context.retinalConfig); const axesCreators = { config, labelManager, axes, cacheMaps }; fieldInfo.normalizedColumns = verticalAxis.fields; fieldInfo.normalizedRows = horizontalAxis.fields; - const groupAxes = encoder.createAxis(axesCreators, fieldInfo, context); + const allFacets = [ + [...facets.rowFacets[0], ...facets.colFacets[0]], + [...facets.rowFacets[1], ...facets.colFacets[1]] + ]; + const facetFields = allFacets.slice(); + facetFields[0] = facetFields[0].map(facetField => facetField.oneVar()); matrixLayers[rowIndex] = matrixLayers[rowIndex] ? matrixLayers[rowIndex] : []; matrixLayers[rowIndex][columnIndex] = layerConfigArr; @@ -93,18 +101,15 @@ export const createValueCells = (context, datamodel, fieldInfo, facets) => { x: columnFields }; - const allFacets = [ - [...facets.rowFacets[0], ...facets.colFacets[0]], - [...facets.rowFacets[1], ...facets.colFacets[1]] - ]; const geomCell = !exitCellMap.has(geomCellKey) ? new GeomCell() : exitCellMap.get(geomCellKey); geomCell.data(datamodel) - .axes(groupAxes) .fields(fields) .transform(datamodelTransform) .detailFields(detailFields) .facetByFields(allFacets); + + encoder.createAxis(axesCreators, fieldInfo, Object.assign({}, context, { geomCell, facetFields })); entryCellMap.set(geomCellKey, geomCell); exitCellMap.delete(geomCellKey); @@ -127,7 +132,7 @@ const createAxisCells = (selection, axes, axisIndex, cells) => createSelection(selection, axis => axis, axes, (item, i) => i + item.reduce((e, n) => { const id = n.id + axisIndex; return e + id; - }, '')).map((axis) => { + }, '')).map((currObj, axis) => { if (axis && axis[axisIndex]) { const axisInst = axis[axisIndex]; const { orientation, show } = axisInst.config(); @@ -177,7 +182,9 @@ const axisPlaceholderGn = (context, selObj, cells) => { }); } else { selObj.rowsPrimary = createAxisCells(selObj.rowPrime, axes.map(() => []), 0, cells); + selObj.rowsSecondary = createAxisCells(selObj.rowSec, axes.map(() => []), 0, cells); selObj.columnsPrimary = createAxisCells(selObj.colPrime, axes[0], 0, cells); + selObj.columnsSecondary = createAxisCells(selObj.colSec, axes[0], 0, cells); } } return selObj; @@ -194,7 +201,11 @@ const axisPlaceholderGn = (context, selObj, cells) => { * @return {Object} return either set of header cells depending on the config */ const createTextCells = (selection, headers, cells, labelManager) => createSelection(selection, - label => new cells.TextCell({}, { labelManager }).source(label), headers, (key, i) => key + i); + (label) => { + const textCell = new cells.TextCell({}, { labelManager }); + textCell.source(label); + return textCell; + }, headers, (key, i) => key + i); /** * @@ -215,10 +226,14 @@ const headerPlaceholderGn = (context, selectionObj, cells, labelManager) => { const counter = axis.length / keys.length; const selectionKeys = keys.length ? axis.map((d, i) => keys[Math.floor(i / counter)]) : []; - return createSelection(selectionObj[`${type}Headers`], keySet => keySet, selectionKeys, - (keySet, i) => `${keySet.join(',')}-${i}`) - .map(keySet => createTextCells(null, keySet, cells, labelManager) - .map((cell, k, i) => cell.source(keySet[i]).config(facet))); + const selObjUpdater = createSelection(selectionObj[`${type}Headers`], keySet => keySet, selectionKeys, + (keySet, i) => `${keySet.join(',')}-${i}`); + + return selObjUpdater.map((keySet, data) => { + let textCells = createTextCells(null, data, cells, labelManager); + textCells = textCells.map((cell, k) => cell.source(k).config(facet)); + return textCells; + }); }; /** @@ -445,6 +460,21 @@ export const generateMatrices = (context, matrices, cells, labelManager) => { rowPriority }; }; +const getAxisFields = (projections, fieldHolder = []) => + projections.reduce((acc, item) => + [...acc, ...item.reduce((ac, field) => + (field instanceof SimpleVariable ? [...ac, field.oneVar()] : ac), [])], fieldHolder); + +const sortDmTemporalFields = (resolver, datamodel) => { + let axisFields = []; + const projections = resolver.projections(); + axisFields = getAxisFields(projections.rowProjections, getAxisFields(projections.colProjections)); + + const fieldConfig = datamodel.getFieldsConfig(); + const temporalFields = axisFields.reduce((acc, field) => + ((fieldConfig[field].def.subtype === TEMPORAL) ? [...acc, [field]] : acc), []); + return temporalFields.length ? datamodel.sort(temporalFields, { saveChild: true }) : datamodel; +}; /** * Computes matrices for a group @@ -524,7 +554,12 @@ export const computeMatrices = (context, config) => { cell: cells.GeomCell, encoder: encoders.simpleEncoder, newCacheMap, - detailFields: config.detail + detailFields: config.detail, + retinalConfig: { + color: config.color, + size: config.size, + shape: config.shape + } }; const fieldsConfig = datamodel.getFieldsConfig(); let groupedModel = datamodel; @@ -538,14 +573,15 @@ export const computeMatrices = (context, config) => { const measureNames = Object.keys(datamodel.getFieldspace().getMeasure()); const nearestAggFns = retrieveNearestGroupByReducers(datamodel, ...measureNames); const resolvedAggFns = mergeRecursive(nearestAggFns, aggregationFns); - groupedModel = datamodel.groupBy(dimensions.length ? dimensions : [''], resolvedAggFns).project(allFields); } + // sort temporal fields if any in the given rows and columns + groupedModel = sortDmTemporalFields(resolver, groupedModel); // return a callback function to create the cells from the matrix const cellCreator = resolver.valueCellsCreator(valueCellContext); // Creates value matrices from the datamodel and configs - const valueMatrixInfo = getMatrixModel(groupedModel, facetsAndProjections, cellCreator); + const valueMatrixInfo = getMatrixModel(groupedModel, facetsAndProjections, cellCreator, globalConfig); resolver.cacheMaps().exitCellMap.forEach((placeholder) => { placeholder.remove(); diff --git a/packages/visual-group/src/group-helper/group-utils.js b/packages/visual-group/src/group-helper/group-utils.js index 23d3a3fe..fde7c99c 100644 --- a/packages/visual-group/src/group-helper/group-utils.js +++ b/packages/visual-group/src/group-helper/group-utils.js @@ -1,4 +1,4 @@ -import { Store, FieldType } from 'muze-utils'; +import { Store, FieldType, COORD_TYPES, getObjProp } from 'muze-utils'; import { DATA_UPDATE_COUNTER } from '../enums/defaults'; import { Variable } from '../variable'; import { PolarEncoder, CartesianEncoder } from '../encoder'; @@ -25,9 +25,13 @@ import { FACET, X, Y, - POLAR + ARC, + RADIUS, + ANGLE } from '../enums/constants'; +const POLAR = COORD_TYPES.POLAR; + /** * Creates an instance of a store which contains the arguments to make the class reactive * @@ -250,6 +254,9 @@ export const mutateAxesFromMap = (cacheMaps, axes) => { }; }; +const hasPolarEncodings = layerConf => layerConf.mark === ARC || [RADIUS, ANGLE].some(field => + getObjProp(layerConf.encoding, field)); + /** * * @@ -261,7 +268,7 @@ export const getEncoder = (layers) => { if (layers.length) { // Figuring out the kind of layers the group will have - encoder = layers.every(e => e.mark === 'arc') ? new PolarEncoder() : encoder; + encoder = layers.some(layerConf => hasPolarEncodings(layerConf)) ? new PolarEncoder() : encoder; } return encoder; }; @@ -441,3 +448,21 @@ export const extractFields = (facetsAndProjections, layerFields) => { }); return [].concat(...fields, ...layerFields); }; + +/** + * This method sorts the facets fields inplace if field is of categorical type + * @param {Object} facet + * @param {Array} keys Array of the facet field values + */ +export const sortFacetFields = (facet, keys, config) => { + const facetName = `${facet}`; + const type = facet.type(); + + if (type === DIMENSION && config.sort[facetName]) { + if (config.sort[facetName] === 'asc') { + keys.sort((a, b) => a - b); + } else { + keys.sort((a, b) => b - a); + } + } +}; diff --git a/packages/visual-group/src/group-helper/matrix-model.js b/packages/visual-group/src/group-helper/matrix-model.js index ea4137c3..77bdbd8a 100644 --- a/packages/visual-group/src/group-helper/matrix-model.js +++ b/packages/visual-group/src/group-helper/matrix-model.js @@ -1,6 +1,5 @@ import { DataModel } from 'muze-utils'; - -import { retriveDomainFromData } from './group-utils'; +import { retriveDomainFromData, sortFacetFields } from './group-utils'; /** * Gets name of fields form the variables @@ -130,16 +129,31 @@ const pushToMatrix = (context, valueCellCreator) => { matrix[rowIndex].push(...cells); }; +/** + * Formats row or columns keys with the provided formatter. + * + * @param {Array} keys - The collection of row or column keys. + * @param {Array} formatterList - The list of corresponding formatter. + */ +const formatKeys = (keys, formatterList) => { + keys.forEach((rKeys) => { + rKeys.forEach((key, idx) => { + rKeys[idx] = formatterList[idx](key); + }); + }); +}; + /** * Gets Matrixes for corresponding datamodel, facets and projections * * @param {Object} dataModel input datamodel - * @param {Object} fieldMap corresponding fieldmap * @param {Array} facetsAndProjections contains the set of facets and projections for the matrices * @param {Function} valueCellCreator Callback executed after datamodels are prepared after sel/proj + * @param {Object} globalConfig global config + * * @return {Object} set of matrices with the corresponding row and column keys */ -export const getMatrixModel = (dataModel, facetsAndProjections, valueCellCreator) => { +export const getMatrixModel = (dataModel, facetsAndProjections, valueCellCreator, globalConfig) => { let rowDataModels = []; const rowKeys = []; const columnKeys = []; @@ -165,6 +179,8 @@ export const getMatrixModel = (dataModel, facetsAndProjections, valueCellCreator const field = rowFacets[0].toString(); const firstLevelRowKeys = retriveDomainFromData(dataModel, field); + sortFacetFields(rowFacets[0], firstLevelRowKeys, globalConfig); + // Get unique keys in the form of an array of arrays for each row uniqueKeyGenerator(rowKeys, { facets: rowFacets, dataModel, uniqueValues: firstLevelRowKeys }); @@ -197,6 +213,8 @@ export const getMatrixModel = (dataModel, facetsAndProjections, valueCellCreator const field = colFacetNames[0]; const firstLevelColumnKeys = retriveDomainFromData(dataModel, field); + sortFacetFields(colFacets[0], firstLevelColumnKeys, globalConfig); + // Get unique keys to create faceted datamodels: this time for columns uniqueKeyGenerator(columnKeys, { facets: colFacetNames, @@ -248,6 +266,9 @@ export const getMatrixModel = (dataModel, facetsAndProjections, valueCellCreator }); } + formatKeys(columnKeys, colFacets.map(facetField => facetField.rawFormat())); + formatKeys(rowKeys, rowFacets.map(facetField => facetField.rawFormat())); + // Getting column keys const transposedColKeys = columnKeys.length > 0 ? columnKeys[0].map((col, i) => columnKeys.map(row => row[i])) : columnKeys; diff --git a/packages/visual-group/src/group-helper/matrix-resolver.js b/packages/visual-group/src/group-helper/matrix-resolver.js index 80107684..1e1346ce 100644 --- a/packages/visual-group/src/group-helper/matrix-resolver.js +++ b/packages/visual-group/src/group-helper/matrix-resolver.js @@ -44,7 +44,10 @@ export default class MatrixResolver { y: {}, color: [], size: [], - shape: [] + shape: [], + radius: [], + angle: [], + angle0: [] }; generateGetterSetters(this, RESOLVER_PROPS); this.cacheMaps(initializeCacheMaps()); @@ -289,7 +292,8 @@ export default class MatrixResolver { createUnits (componentRegistry, config) { const { globalConfig, - alias + alias, + coord } = config; const { layerRegistry, @@ -325,12 +329,14 @@ export default class MatrixResolver { namespace }); unit.store(store); + unit.coord(coord); el.source(unit); } !units[i] && (units[i] = []); units[i][j] = unit; - unit.parentAlias(alias); - unit.valueParser(this.valueParser()); + unit.parentAlias(alias) + .valueParser(this.valueParser()) + .coord(coord); el.config(unitConfig); }); @@ -442,9 +448,9 @@ export default class MatrixResolver { const matrixLayers = this.matrixLayers(); this.forEach(VALUE_MATRIX, (i, j, el) => { - el.axes(retinalAxes); + el.axes(Object.assign(el.axes(), retinalAxes)); el.source() && el.source().retinalFields(config); - el.layerDef(encoders.retinalEncoder.getLayerConfig(config, matrixLayers[i][j])); + el.layerDef(matrixLayers[i][j]); el.updateModel(); units.push(el.source()); diff --git a/packages/visual-group/src/variable/composed-vars.js b/packages/visual-group/src/variable/composed-vars.js index 1be27a2e..04661436 100644 --- a/packages/visual-group/src/variable/composed-vars.js +++ b/packages/visual-group/src/variable/composed-vars.js @@ -15,11 +15,11 @@ class ComposedVars extends Variable { /** * Creates an instance of ComposeVars. * - * @param {Array} texts Array of field names + * @param {Array} vars Array of SimpleVars. */ - constructor (...texts) { - super(...texts); - this.vars(texts); + constructor (...vars) { + super(); + this.vars(vars); } vars (...params) { @@ -33,6 +33,7 @@ class ComposedVars extends Variable { data (...dm) { if (dm.length) { this.vars().forEach(d => d.data(dm[0])); + this._data = dm[0]; return this; } return this._data; @@ -94,6 +95,15 @@ class ComposedVars extends Variable { getMinDiff () { return this.vars()[0].getMinDiff(); } + + /** + * Returns the display name of the fields. + * + * @return {string} returns the display name. + */ + displayName () { + return this.vars().map(d => d.displayName()).join(','); + } } export default ComposedVars; diff --git a/packages/visual-group/src/variable/simple-var.js b/packages/visual-group/src/variable/simple-var.js index 47e43de1..8d3a9e7f 100644 --- a/packages/visual-group/src/variable/simple-var.js +++ b/packages/visual-group/src/variable/simple-var.js @@ -1,4 +1,4 @@ -import { DateTimeFormatter } from 'muze-utils'; +import { DateTimeFormatter, retrieveFieldDisplayName, DimensionSubtype } from 'muze-utils'; import Variable from './variable'; /** @@ -13,11 +13,11 @@ export default class SimpleVariable extends Variable { /** * Creates an instance of simple variable instance. * - * @param {string} text Field name. + * @param {string} name Field name. */ - constructor (text) { + constructor (name) { super(); - this.oneVar(text); + this.oneVar(name); } /** @@ -68,6 +68,20 @@ export default class SimpleVariable extends Variable { return values; } + /** + * Returns a formatter function which transforms the input value to its original form. + * + * @public + * @return {Function} Returns raw formatter function. + */ + rawFormat () { + if (this.subtype() === DimensionSubtype.TEMPORAL) { + const dateFormat = this.data().getFieldspace().getDimension()[this.oneVar()].schema().format; + return val => DateTimeFormatter.formatAs(val, dateFormat); + } + return val => val; + } + /** * Return the field names associated with this variable instance. * @@ -119,4 +133,13 @@ export default class SimpleVariable extends Variable { equals (varInst) { return this.oneVar() === varInst.oneVar(); } + + /** + * Returns the display name of the field. + * + * @return {string} returns the display name. + */ + displayName () { + return retrieveFieldDisplayName(this.data(), this.oneVar()); + } } diff --git a/packages/visual-group/src/visual-group/helper.js b/packages/visual-group/src/visual-group/helper.js index 34f4f788..9200cc32 100644 --- a/packages/visual-group/src/visual-group/helper.js +++ b/packages/visual-group/src/visual-group/helper.js @@ -100,6 +100,7 @@ export const createMatrices = (context) => { const encoders = {}; encoders.retinalEncoder = new RetinalEncoder(); encoders.simpleEncoder = getEncoder(layers); + matrixConfig.coord = encoders.simpleEncoder.constructor.type(); resolver.encoder(encoders.simpleEncoder); // Set the group type diff --git a/packages/visual-group/src/visual-group/visual-group.js b/packages/visual-group/src/visual-group/visual-group.js index 0931bc68..def9c925 100644 --- a/packages/visual-group/src/visual-group/visual-group.js +++ b/packages/visual-group/src/visual-group/visual-group.js @@ -77,7 +77,9 @@ class VisualGroup extends SimpleGroup { domain: { x: {}, y: {}, - radius: {} + radius: {}, + angle: {}, + angle0: {} } }, {}]; } diff --git a/packages/visual-layer/README.md b/packages/visual-layer/README.md index 8401ac04..e1261d4d 100644 --- a/packages/visual-layer/README.md +++ b/packages/visual-layer/README.md @@ -10,7 +10,7 @@ $ npm install --save @chartshq/visual-layer ## Docs -Please refer to [this](https://www.charts.com/muze/docs) for detailed documentation. +Please refer to [this](https://muzejs.org/docs) for detailed documentation. ## Contributing diff --git a/packages/visual-layer/package.json b/packages/visual-layer/package.json index 4be1b47d..0e7dbaa7 100644 --- a/packages/visual-layer/package.json +++ b/packages/visual-layer/package.json @@ -2,40 +2,37 @@ "name": "@chartshq/visual-layer", "version": "1.0.0", "description": "Visual layer for muzejs", - "homepage": "https://www.charts.com/muze", + "homepage": "https://muzejs.org", "license": "MIT", - "author": "Charts.com ", "contributors": [ { "name": "Akash Ghoswami", - "email": "akash@charts.com" + "email": "akashgoswami90s@gmail.com" }, { "name": "Ranajit Banerjee", - "email": "ranajit.banerjee@charts.com", + "email": "ranajit.113124@gmail.com", "url": "https://github.com/ranajitbanerjee" }, { "name": "Mridul Meharia", - "email": "mridul@charts.com", + "email": "mehariamridul@gmail.com", "url": "https://github.com/mridulmeh" }, { - "name": "Subhash Haldar", - "email": "subhash@charts.com" + "name": "Subhash Haldar" }, { - "name": "Sandeep Acharya", - "email": "sandeep@charts.com" + "name": "Sandeep Acharya" }, { "name": "Rousan Ali", - "email": "rousan@charts.com", + "email": "rousanali786@gmail.com", "url": "https://rousan.io" }, { "name": "Ujjal Kumar Dutta", - "email": "ujjal@charts.com" + "email": "duttaujjalkumar@live.com" } ], "main": "src/index.js", diff --git a/packages/visual-layer/src/base-layer/base-layer.js b/packages/visual-layer/src/base-layer/base-layer.js index a65ac16f..39fd67a6 100644 --- a/packages/visual-layer/src/base-layer/base-layer.js +++ b/packages/visual-layer/src/base-layer/base-layer.js @@ -9,18 +9,19 @@ import { DataModel, clone, generateGetterSetters, - STATE_NAMESPACES + STATE_NAMESPACES, + COORD_TYPES } from 'muze-utils'; import { SimpleLayer } from '../simple-layer'; import * as PROPS from '../enums/props'; import { props } from './props'; import { transformData, - calculateDomainFromData, getNormalizedData, applyInteractionStyle, initializeGlobalState, - getValidTransform + getValidTransform, + domainCalculator } from '../helpers'; import { listenerMap } from './listener-map'; import { defaultOptions } from './default-options'; @@ -297,7 +298,7 @@ export default class BaseLayer extends SimpleLayer { const isEmpty = this.data().isEmpty(); if (!isEmpty) { - domains = calculateDomainFromData(data, this.encodingFieldsInf(), this.transformType()); + domains = domainCalculator[this.coord()](data, this); } return domains; } @@ -324,8 +325,8 @@ export default class BaseLayer extends SimpleLayer { * @param {string} encodingType type of encoding x, y, etc. * @return {Object} Axis domains */ - getNormalizedData (transformedData, fieldsConfig) { - return getNormalizedData(transformedData, fieldsConfig, this.encodingFieldsInf(), this.transformType()); + getNormalizedData (transformedData) { + return getNormalizedData(transformedData, this); } /** @@ -483,6 +484,10 @@ export default class BaseLayer extends SimpleLayer { return identifiers; } + hasPlotSpan () { + return false; + } + getPlotSpan () { return { x: 0, @@ -539,13 +544,13 @@ export default class BaseLayer extends SimpleLayer { const fieldsConfig = this.data().getFieldsConfig(); const filteredPoints = [].concat(...points).filter((point) => { - const { _data, _id } = point; + const { source, rowId } = point; return fieldNames.every((field, idx) => { if (field in fieldsConfig && fieldsConfig[field].def.type === FieldType.DIMENSION) { - return values.findIndex(d => d[idx] === _data[fieldsConfig[field].index]) !== -1; + return values.findIndex(d => d[idx] === source[fieldsConfig[field].index]) !== -1; } else if (field === ReservedFields.ROW_ID) { - return values.findIndex(d => d[idx] === _id) !== -1; + return values.findIndex(d => d[idx] === rowId) !== -1; } return true; }); }); @@ -596,12 +601,12 @@ export default class BaseLayer extends SimpleLayer { const transformedData = []; normalizedData.forEach((dataArr) => { dataArr.forEach((dataObj) => { - const tupleArr = dataObj._data; + const tupleArr = dataObj.source; const exist = identifierSchema.every((obj, i) => identifierData.findIndex(d => tupleArr[fieldsConfig[obj.name].index] === d[i]) !== -1); if (exist) { const transformedVal = dataObj[enc]; - const row = dataObj._data; + const row = dataObj.source; const tuple = {}; for (const key in fieldsConfig) { const index = fieldsConfig[key].index; @@ -630,7 +635,7 @@ export default class BaseLayer extends SimpleLayer { */ getPlotElementsFromSet (set) { return selectElement(this.mount()).selectAll(this.elemType()).filter(data => - (data ? set.indexOf(data._id) !== -1 : false)); + (data ? set.indexOf(data.rowId) !== -1 : false)); } /** @@ -657,6 +662,9 @@ export default class BaseLayer extends SimpleLayer { getRenderProps () { const metaInf = this.metaInf(); + if (this.coord() === COORD_TYPES.POLAR) { + return [`${STATE_NAMESPACES.GROUP_GLOBAL_NAMESPACE}.domain.radius`]; + } return [`${STATE_NAMESPACES.GROUP_GLOBAL_NAMESPACE}.domain.y.${metaInf.unitRowIndex}0`, `${STATE_NAMESPACES.GROUP_GLOBAL_NAMESPACE}.domain.x.${metaInf.unitColIndex}0`]; } diff --git a/packages/visual-layer/src/base-layer/default-options.js b/packages/visual-layer/src/base-layer/default-options.js index e78be901..2749f669 100644 --- a/packages/visual-layer/src/base-layer/default-options.js +++ b/packages/visual-layer/src/base-layer/default-options.js @@ -9,6 +9,7 @@ export const defaultOptions = { context._customConfig = config; const constructor = context.constructor; const newConf = mergeRecursive({}, constructor.defaultConfig()); + return constructor.defaultPolicy(newConf, config); } } @@ -25,13 +26,4 @@ export const defaultOptions = { } } } - // [PROPS.MOUNT]: { - // value: null - // }, - // [PROPS.AXES]: { - // value: null - // }, - // [PROPS.MEASUREMENT]: { - // value: null - // } }; diff --git a/packages/visual-layer/src/base-layer/listener-map.js b/packages/visual-layer/src/base-layer/listener-map.js index 86a231d7..b47c9bae 100644 --- a/packages/visual-layer/src/base-layer/listener-map.js +++ b/packages/visual-layer/src/base-layer/listener-map.js @@ -1,5 +1,5 @@ import { CommonProps, STATE_NAMESPACES } from 'muze-utils'; -import { getEncodingFieldInf } from '../helpers'; +import { encodingFieldInfRetriever } from '../helpers'; import * as PROPS from '../enums/props'; const renderLayer = (context) => { @@ -18,7 +18,7 @@ export const listenerMap = (context, ns) => [ const encodingValue = config.encoding; if (data && encodingValue) { const fieldsConfig = data.getFieldsConfig(); - const encodingFieldsInf = getEncodingFieldInf(encodingValue, fieldsConfig); + const encodingFieldsInf = encodingFieldInfRetriever[context.coord()](encodingValue, fieldsConfig); context.encodingFieldsInf(encodingFieldsInf); context.resolveTransformType(); context._transformedData = context.getTransformedData(data, config, diff --git a/packages/visual-layer/src/base-layer/props.js b/packages/visual-layer/src/base-layer/props.js index 58beacfe..e15b3525 100644 --- a/packages/visual-layer/src/base-layer/props.js +++ b/packages/visual-layer/src/base-layer/props.js @@ -1,3 +1,6 @@ +import { COORD_TYPES } from 'muze-utils'; + +const { CARTESIAN } = COORD_TYPES; export const props = { axes: {}, mount: {}, @@ -7,5 +10,8 @@ export const props = { config: {}, valueParser: { defaultValue: val => val + }, + coord: { + defaultValue: CARTESIAN } }; diff --git a/packages/visual-layer/src/enums/constants.js b/packages/visual-layer/src/enums/constants.js index 86f73f7b..5b59330d 100644 --- a/packages/visual-layer/src/enums/constants.js +++ b/packages/visual-layer/src/enums/constants.js @@ -7,13 +7,18 @@ export const RADIUS = 'radius'; export const SIZE = 'size'; export const COLOR = 'color'; export const SHAPE = 'shape'; +export const TEXT = 'text'; export const OUTER_RADIUS_VALUE = 'outerRadiusValue'; export const TEXT_ANCHOR_MIDDLE = 'middle'; export const ENCODING = { X: 'x', Y: 'y', X0: 'x0', - Y0: 'y0' + Y0: 'y0', + RADIUS: 'radius', + RADIUS0: 'radius0', + ANGLE: 'angle', + ANGLE0: 'angle0' }; export const ASCENDING = 'asc'; diff --git a/packages/visual-layer/src/helpers/index.js b/packages/visual-layer/src/helpers/index.js index cbd7250f..0a6268f6 100644 --- a/packages/visual-layer/src/helpers/index.js +++ b/packages/visual-layer/src/helpers/index.js @@ -7,26 +7,15 @@ import { DimensionSubtype, STATE_NAMESPACES, retrieveNearestGroupByReducers, - getObjProp + getObjProp, + COORD_TYPES } from 'muze-utils'; import { ScaleType } from '@chartshq/muze-axis'; import { transformFactory } from '@chartshq/transform'; -import { IDENTITY, STACK, GROUP, COLOR, SHAPE, SIZE, ENCODING, AGG_FN_SUM } from '../enums/constants'; +import { IDENTITY, STACK, GROUP, COLOR, SHAPE, SIZE, ENCODING, AGG_FN_SUM, ASCENDING, TEXT } from '../enums/constants'; const BAND = ScaleType.BAND; - -export const getLayerColor = ({ datum, index }, { colorEncoding, colorAxis, colorFieldIndex }) => { - let rawColor = ''; - let color = ''; - if (colorEncoding && colorEncoding.value instanceof Function) { - color = colorEncoding.value(datum, index); - rawColor = colorEncoding.value(datum, index); - } else { - rawColor = colorAxis.getRawColor(datum._data[colorFieldIndex]); - color = colorAxis.getHslString(rawColor); - } - return { color, rawColor }; -}; +const { POLAR, CARTESIAN } = COORD_TYPES; const transfromColor = (colorAxis, datum, styleType, intensity) => { datum.meta.stateColor[styleType] = datum.meta.stateColor[styleType] || datum.meta.originalColor; @@ -105,44 +94,29 @@ export const getAxesScales = (axes) => { }; }; -/** - * - * - * @param {*} encoding - * @param {*} fieldsConfig - * - */ -export const getEncodingFieldInf = (encoding, fieldsConfig) => { - const [xField, yField, x0Field, y0Field, colorField, shapeField, sizeField] = - [ENCODING.X, ENCODING.Y, ENCODING.X0, ENCODING.Y0, COLOR, SHAPE, SIZE].map(e => encoding[e] && - encoding[e].field); - - const [xFieldType, yFieldType] = [xField, yField, x0Field, y0Field].map(e => fieldsConfig[e] && - fieldsConfig[e].def.type); - - const [xFieldSubType, yFieldSubType] = [xField, yField].map(e => fieldsConfig[e] && (fieldsConfig[e].def.subtype || - fieldsConfig[e].def.type)); - - const [xFieldIndex, yFieldIndex, x0FieldIndex, y0FieldIndex] = [xField, yField, x0Field, y0Field] - .map(e => fieldsConfig[e] && fieldsConfig[e].index); +export const encodingFieldInfRetriever = { + [POLAR]: (encoding, fieldsConfig) => { + const encodingInf = {}; + [ENCODING.RADIUS, ENCODING.RADIUS0, ENCODING.ANGLE, ENCODING.ANGLE0, COLOR, SHAPE, SIZE, TEXT] + .forEach((e) => { + const field = getObjProp(encoding, e, 'field'); + encodingInf[`${e}Field`] = field; + encodingInf[`${e}FieldIndex`] = getObjProp(fieldsConfig, field, 'index'); + }); + return encodingInf; + }, + [CARTESIAN]: (encoding, fieldsConfig) => { + const encodingInf = {}; + [ENCODING.X, ENCODING.Y, ENCODING.X0, ENCODING.Y0, COLOR, SHAPE, SIZE, TEXT].forEach((e) => { + const field = getObjProp(encoding, e, 'field'); + encodingInf[`${e}Field`] = field; + encodingInf[`${e}FieldIndex`] = getObjProp(fieldsConfig, field, 'index'); + encodingInf[`${e}FieldType`] = getObjProp(fieldsConfig, field, 'def', 'type'); + encodingInf[`${e}FieldSubType`] = getObjProp(fieldsConfig, field, 'def', 'subtype'); + }); - return { - xField, - yField, - colorField, - shapeField, - sizeField, - x0Field, - y0Field, - xFieldType, - yFieldType, - xFieldSubType, - yFieldSubType, - xFieldIndex, - yFieldIndex, - x0FieldIndex, - y0FieldIndex - }; + return encodingInf; + } }; /** @@ -184,6 +158,101 @@ export const getIndividualClassName = (d, i, data, context) => { return classNameStr; }; +const dataNormalizers = { + [POLAR]: (transformedData, encodingFieldInf, fieldsConfig) => { + const { + radiusFieldIndex, + angleFieldIndex, + radius0FieldIndex, + angle0FieldIndex + } = encodingFieldInf; + const fieldsLen = Object.keys(fieldsConfig).length; + + /** + * Returns normalized data from transformed data. It recursively traverses through + * the transformed data if there it is nested. + */ + return transformedData.map(data => data.map((d) => { + const pointObj = { + radius: d[radiusFieldIndex], + angle: angleFieldIndex !== undefined ? d[angleFieldIndex] : 1, + radius0: d[radius0FieldIndex], + angle0: d[angle0FieldIndex] + }; + [COLOR, SHAPE, SIZE, TEXT].forEach((enc) => { + pointObj[enc] = d[encodingFieldInf[`${enc}FieldIndex`]]; + }); + pointObj.source = d; + pointObj.rowId = d[fieldsLen]; + return pointObj; + })).filter(d => d.length); + }, + [CARTESIAN]: (transformedData, encodingFieldInf, fieldsConfig, transformType) => { + const { + xFieldType, + xFieldIndex, + yFieldIndex, + x0FieldIndex, + y0FieldIndex + } = encodingFieldInf; + const fieldsLen = Object.keys(fieldsConfig).length; + /** + * Returns normalized data from transformed data. It recursively traverses through + * the transformed data if there it is nested. + */ + return transformedData.map((data) => { + const values = transformType === GROUP ? data.values : data; + return values.map((d) => { + let pointObj = {}; + let tuple; + if (transformType === STACK) { + tuple = d.data || []; + let y; + let y0; + let x; + let x0; + if (d[1] >= d[0]) { + y = x0 = d[1]; + x = y0 = d[0]; + } else { + y = x0 = d[0]; + x = y0 = d[1]; + } + + pointObj = xFieldType === FieldType.MEASURE ? { + x, + x0, + y: tuple[yFieldIndex], + y0: tuple[yFieldIndex] + } : { + x: tuple[xFieldIndex], + x0: tuple[xFieldIndex], + y, + y0 + }; + pointObj.source = tuple; + pointObj.rowId = tuple[fieldsLen]; + [COLOR, SHAPE, SIZE, TEXT].forEach((enc) => { + pointObj[enc] = tuple[encodingFieldInf[`${enc}FieldIndex`]]; + }); + } else { + pointObj = { + x: d[xFieldIndex], + y: d[yFieldIndex], + x0: d[x0FieldIndex], + y0: d[y0FieldIndex] + }; + pointObj.source = d; + pointObj.rowId = d[fieldsLen]; + [COLOR, SHAPE, SIZE, TEXT].forEach((enc) => { + pointObj[enc] = d[encodingFieldInf[`${enc}FieldIndex`]]; + }); + } + return pointObj; + }); + }).filter(d => d.length); + } +}; /* * This method resolves the x, y, x0 and y0 values from the transformed data. * It also checks the type of transformed data for example, if it is a stacked data @@ -193,93 +262,60 @@ export const getIndividualClassName = (d, i, data, context) => { * @param {string} transformType type of transformed data - stack, group or identity. * @return {Array.} Normalized data */ -export const getNormalizedData = (transformedData, fieldsConfig, encodingFieldInf, transformType) => { +export const getNormalizedData = (transformedData, context) => { + const transformType = context.transformType(); const transformedDataArr = transformType === IDENTITY ? [transformedData] : transformedData; - const { - xFieldType, - xFieldIndex, - yFieldIndex, - x0FieldIndex, - y0FieldIndex - } = encodingFieldInf; - const fieldsLen = Object.keys(fieldsConfig).length; - /** - * Returns normalized data from transformed data. It recursively traverses through - * the transformed data if there it is nested. - */ - return transformedDataArr.map((data) => { - const values = transformType === GROUP ? data.values : data; - return values.map((d) => { - let pointObj = {}; - let tuple; - if (transformType === STACK) { - tuple = d.data || []; - let y; - let y0; - let x; - let x0; - if (d[1] >= d[0]) { - y = x0 = d[1]; - x = y0 = d[0]; - } else { - y = x0 = d[0]; - x = y0 = d[1]; - } - - pointObj = xFieldType === FieldType.MEASURE ? { - x, - x0, - y: tuple[yFieldIndex], - y0: tuple[yFieldIndex] - } : { - x: tuple[xFieldIndex], - x0: tuple[xFieldIndex], - y, - y0 - }; - pointObj._data = tuple; - pointObj._id = tuple[fieldsLen]; - } else { - pointObj = { - x: d[xFieldIndex], - y: d[yFieldIndex], - x0: d[x0FieldIndex], - y0: d[y0FieldIndex] - }; - pointObj._data = d; - pointObj._id = d[fieldsLen]; - } - return pointObj; - }); - }).filter(d => d.length); + const encodingFieldInf = context.encodingFieldsInf(); + const fieldsConfig = context.data().getFieldsConfig(); + return dataNormalizers[context.coord()](transformedDataArr, encodingFieldInf, fieldsConfig, transformType); }; -export const calculateDomainFromData = (data, encodingFieldInf, transformType) => { - const { - xFieldSubType, - yFieldSubType, - xField, - yField, - x0Field, - y0Field - } = encodingFieldInf; - const domains = {}; - const yEnc = ENCODING.Y; - const xEnc = ENCODING.X; - if (xField) { - domains.x = getDomainFromData(data, x0Field || transformType === STACK ? [xEnc, ENCODING.X0] : [xEnc, xEnc], - xFieldSubType); - } - if (yField) { - domains.y = getDomainFromData(data, y0Field || transformType === STACK ? [ENCODING.Y0, ENCODING.Y] : - [yEnc, yEnc], yFieldSubType); - } +export const domainCalculator = { + [POLAR]: (data, layerInst) => { + const config = layerInst.config(); + const { sort } = config; + let angleValues = data[0]; + const radius0Field = getObjProp(config.encoding.radius0, 'field'); + if (sort) { + angleValues = angleValues.sort((a, b) => (sort === ASCENDING ? a.radius - b.radius : b.radius - a.radius)); + } + const radiusDomain = getDomainFromData(data, [ENCODING.RADIUS, radius0Field ? + ENCODING.RADIUS0 : ENCODING.RADIUS]); + return { + radius: radiusDomain, + angle: angleValues.map(d => d.angle), + angle0: angleValues.map(d => d.angle0) + }; + }, + [CARTESIAN]: (data, layerInst) => { + const transformType = layerInst.transformType(); + const encodingFieldInf = layerInst.encodingFieldsInf(); + const { + xFieldSubType, + yFieldSubType, + xField, + yField, + x0Field, + y0Field + } = encodingFieldInf; + const domains = {}; + const yEnc = ENCODING.Y; + const xEnc = ENCODING.X; + if (xField) { + domains.x = getDomainFromData(data, x0Field || transformType === STACK ? [xEnc, ENCODING.X0] : [xEnc, xEnc], + xFieldSubType); + } + if (yField) { + domains.y = getDomainFromData(data, y0Field || transformType === STACK ? [ENCODING.Y0, ENCODING.Y] : + [yEnc, yEnc], yFieldSubType); + } - return domains; + return domains; + } }; export const attachDataToVoronoi = (voronoi, points) => { - voronoi.data([].concat(...points).filter(d => d._id !== undefined).map((d) => { + voronoi.data([].concat(...points).filter(d => d.rowId !== undefined).map((d) => { const point = d.update; return { x: point.x, @@ -482,3 +518,65 @@ export const getValidTransformForAggFn = (context) => { export const getMarkId = (source, schema) => source.filter((val, i) => schema[i] && schema[i].type === FieldType.DIMENSION).join(); + +export const resolveEncodingValues = (data, i, dataArr, layerInst) => { + const transformedValues = {}; + const values = data.values; + const encoding = layerInst.config().encoding; + for (const key in values) { + const value = getObjProp(encoding[key], 'value'); + if (value instanceof Function) { + transformedValues[key] = value(values, i, dataArr, layerInst); + } else { + transformedValues[key] = values[key]; + } + } + return transformedValues; +}; + +export const getColorMetaInf = (color, colorAxis) => ({ + originalColor: colorAxis.getHslArray(color), + stateColor: {}, + colorTransform: {} +}); + +const getCoordValue = (radius, trig, angle, offset) => radius * Math[trig](angle) + offset; +const coordValueGetter = (radius, angle, xOffset, yOffset) => ({ + x: getCoordValue(radius, 'cos', angle, xOffset), + y: getCoordValue(radius, 'sin', angle, yOffset) +}); +export const toCartesianCoordinates = (points, measurement, rangePlot = false) => { + const xOffset = measurement.width / 2; + const yOffset = measurement.height / 2; + for (let i = 0, len = points.length; i < len; i++) { + const point = points[i]; + const { angle, radius, radius0, angle0 } = point.update; + point.update = coordValueGetter(radius, angle, xOffset, yOffset); + if (rangePlot) { + const update = point.update = coordValueGetter(radius0, angle0, xOffset, yOffset); + const { x: x0, y: y0 } = coordValueGetter(radius, angle, xOffset, yOffset); + update.x0 = x0; + update.y0 = y0; + } + } + return points; +}; + +export const sortData = (data, axes) => { + const { x: xAxis, y: yAxis } = axes; + const axisArr = [xAxis, yAxis]; + for (let i = 0, len = axisArr.length; i < len; i++) { + const axis = axisArr[i]; + if (axis.constructor.type() === BAND) { + const key = i ? 'y' : 'x'; + const dom = axis.domain(); + const indices = dom.reduce((acc, v, idx) => { + acc[v] = idx; + return acc; + }, {}); + data.sort((a, b) => indices[a[key]] - indices[b[key]]); + break; + } + } + return data; +}; diff --git a/packages/visual-layer/src/index.js b/packages/visual-layer/src/index.js index 7e01aff1..393a7070 100644 --- a/packages/visual-layer/src/index.js +++ b/packages/visual-layer/src/index.js @@ -1,17 +1,18 @@ - import { AreaLayer } from './layers/area'; - import { ArcLayer } from './layers/arc'; - import { LineLayer } from './layers/line'; - import { TextLayer } from './layers/text'; - import { PointLayer } from './layers/point'; - import { BarLayer } from './layers/bar'; - import { TickLayer } from './layers/tick'; - import { SimpleLayer } from './simple-layer'; - import { BaseLayer } from './base-layer'; - import * as LAYER_TYPES from './enums/layer-types'; - import layerFactory from './layer-factory'; - import layerRegistry from './layer-registry'; +import { AreaLayer } from './layers/area'; +import { ArcLayer } from './layers/arc'; +import { LineLayer } from './layers/line'; +import { TextLayer } from './layers/text'; +import { PointLayer } from './layers/point'; +import { BarLayer } from './layers/bar'; +import { TickLayer } from './layers/tick'; +import { SimpleLayer } from './simple-layer'; +import { BaseLayer } from './base-layer'; +import * as LAYER_TYPES from './enums/layer-types'; +import layerFactory from './layer-factory'; +import layerRegistry from './layer-registry'; +import { ENCODING } from './enums/constants'; - export { +export { BaseLayer, BarLayer, LineLayer, @@ -23,5 +24,6 @@ layerFactory, SimpleLayer, layerRegistry, - LAYER_TYPES + LAYER_TYPES, + ENCODING }; diff --git a/packages/visual-layer/src/layers/arc/arc-helper.js b/packages/visual-layer/src/layers/arc/arc-helper.js index ca3a79fa..d069ecaf 100644 --- a/packages/visual-layer/src/layers/arc/arc-helper.js +++ b/packages/visual-layer/src/layers/arc/arc-helper.js @@ -1,95 +1,45 @@ import { getObjProp, interpolator, FieldType, selectElement } from 'muze-utils'; import { ANGLE, RADIUS, SIZE, COLOR } from '../../enums/constants'; -/** - * Returns the range value from a value inside the domain - * - * @param {Object} domainValue Value whose range has to be returned - * @return {number} range value - * @memberof ArcLayer - */ -export const getRangeValue = (datum, range, domain, defaultRadius, sizeAxis) => { - let domainMultiplier = 1; - const { - outerRadiusValue, - sizeVal - } = datum; - const sizeAxisDomain = sizeAxis.domain(); - const sizeMultiplier = sizeAxis.getSize(sizeVal) / (sizeAxisDomain ? sizeAxis.range()[1] : sizeAxis.config().value); - - domainMultiplier *= (range[1] - range[0]) / (domain[1] - domain[0]); - const rangeVal = (range[0] + (outerRadiusValue - domain[0]) * domainMultiplier); - return (rangeVal || defaultRadius) * sizeMultiplier; -}; - -/** - * - * - * @memberof ArcLayer - */ -export const getRadiusRange = (width, height, config) => { - const { - minOuterRadius, - innerRadius, - outerRadius, - innerRadiusFixer - } = config; - - return [Math.max((innerRadius + innerRadiusFixer || 0), minOuterRadius), outerRadius || Math.min(height, - width) / 2]; -}; -export const getPreviousPoint = (prevData, currIndex, config) => { +export const getPreviousPoint = (prevData, currIndex, context) => { const prevArc = prevData[currIndex - 1]; const nextArc = prevData[currIndex]; - + const [startAngle, endAngle] = context.axes().angle.range(); if (prevArc && nextArc) { return { - startAngle: prevArc.endAngle, - endAngle: nextArc.startAngle + update: { + angle0: getObjProp(prevArc, 'update', 'angle'), + angle: getObjProp(nextArc, 'update', 'angle0') + } }; } else if (!nextArc) { return { - startAngle: config.endAngle * Math.PI * 2 / 360, - endAngle: config.endAngle * Math.PI * 2 / 360 + update: { + angle0: (endAngle - 90) * Math.PI * 2 / 360, + angle: (endAngle - 90) * Math.PI * 2 / 360 + } }; } return { - startAngle: config.startAngle * Math.PI * 2 / 360, - endAngle: config.startAngle * Math.PI * 2 / 360 + update: { + angle0: (startAngle - 90) * Math.PI * 2 / 360, + angle: (startAngle - 90) * Math.PI * 2 / 360 + } }; }; -/** - * - * - * @param {*} path - * @param {*} b - * - * @memberof ArcLayer - */ -export const tweenPie = (path, rangeValueGetter, b) => { - const { datum } = b[0]; - const outerRadius = rangeValueGetter(datum); - datum.outerRadius = outerRadius; - datum._previousInfo.outerRadius = datum._previousInfo.outerRadius || outerRadius; +export const tweenPie = (path, b) => { + const datum = b[0]; return function (t) { return path(interpolator()(datum._previousInfo, datum)(t)); }; }; -/** - * - * - * @param {*} path - * @param {*} b - * - * @memberof ArcLayer - */ -export const tweenExitPie = (consecutiveExits, transition, rangeValueGetter, path) => { +export const tweenExitPie = (consecutiveExits, transition, path) => { if (consecutiveExits.length > 0) { consecutiveExits.forEach((consecutiveExitArr) => { - const startAngle = consecutiveExitArr[0].datum.startAngle; - const endAngle = consecutiveExitArr[consecutiveExitArr.length - 1].datum.endAngle; + const startAngle = consecutiveExitArr[0].datum.update.angle0; + const endAngle = consecutiveExitArr[consecutiveExitArr.length - 1].datum.update.angle; const mid = (Math.PI * 2 * startAngle) / ((Math.PI * 2) + startAngle - endAngle); consecutiveExitArr.forEach((e) => { @@ -101,12 +51,13 @@ export const tweenExitPie = (consecutiveExits, transition, rangeValueGetter, pat .transition() .duration(transition.duration) .attrTween('d', () => function (t) { - const outerRadius = rangeValueGetter(datum); - datum.outerRadius = outerRadius; return path(interpolator()(datum, { - startAngle: mid, - endAngle: mid, - outerRadius + update: { + angle0: mid, + angle: mid, + radius: datum.radius, + radius0: datum.radius0 + } })(t)); }) .remove(); diff --git a/packages/visual-layer/src/layers/arc/arc.js b/packages/visual-layer/src/layers/arc/arc.js index 7508e483..cdb862f6 100644 --- a/packages/visual-layer/src/layers/arc/arc.js +++ b/packages/visual-layer/src/layers/arc/arc.js @@ -3,20 +3,16 @@ import { selectElement, getQualifiedClassName, isSimpleObject, - getDomainFromData, Symbols, FieldType, - ReservedFields, - STATE_NAMESPACES + ReservedFields } from 'muze-utils'; import { defaultConfig } from './default-config'; import { BaseLayer } from '../../base-layer'; -import { ASCENDING, OUTER_RADIUS_VALUE } from '../../enums/constants'; -import { getIndividualClassName } from '../../helpers'; -import { getRangeValue, getRadiusRange, tweenPie, tweenExitPie, getFieldIndices, getPreviousPoint } from './arc-helper'; +import { getIndividualClassName, resolveEncodingValues, getColorMetaInf } from '../../helpers'; +import { tweenPie, tweenExitPie, getPreviousPoint } from './arc-helper'; import './styles.scss'; -const pie = Symbols.pie; const arc = Symbols.arc; /** @@ -46,121 +42,14 @@ export default class ArcLayer extends BaseLayer { return defaultConfig; } - /** - * - * - * @static - * - * @memberof ArcLayer - */ static formalName () { return 'arc'; } - /** - * - * - * - * @memberof ArcLayer - */ elemType () { return 'path'; } - /** - * Transforms data in the appropriate data structure to be consumed by the layer for rendering - * - * @param {Object} data data model associated with the layer - * @param {Object} config configuration of the layer that contains encoding and other parameters - * @return {Object} Transformed pie data - * @memberof ArcLayer - */ - getTransformedData (dataModel, config) { - let pieData = []; - const pieIndex = {}; - const { - startAngle, - endAngle, - encoding, - sort, - minOuterRadius - } = config; - const prevData = this._transformedData || []; - const fieldsConfig = this.data().getFieldsConfig(); - const { - angleIndex, - sizeIndex, - radiusIndex, - colorIndex - } = getFieldIndices(encoding, fieldsConfig); - const dataVal = dataModel.getData(); - const data = dataVal.data; - const uids = dataVal.uids; - - this._prevPieData = {}; - - prevData.forEach((e, index) => { - this._prevPieData[e.uid] = [e, index]; - pieIndex[e.index] = e; - }); - // Creating pie data using angle field provided. If the angle field is a dimension, - // all the angles will be equal(360/number of dimensions) - - pieData = pie() - .startAngle((startAngle / 180) * Math.PI) - .endAngle(Math.PI * endAngle / 180) - .value(d => d[angleIndex] || 1) - .sortValues(null); - - sort.length && radiusIndex && pieData.sort((a, b) => { - if (sort === ASCENDING) { - return a[radiusIndex] - b[radiusIndex]; - } return b[radiusIndex] - a[radiusIndex]; - }); - const sizeVal = data.reduce((acc, d) => acc + (d[sizeIndex] || 0), 1); - - // Adding the radius field values to each data point in pie data - pieData = pieData(data).map((d, i) => { - d.outerRadiusValue = data[i][radiusIndex] || minOuterRadius; - d.innerRadius = config.innerRadius; - d.colorVal = data[i][colorIndex]; - d.angleVal = data[i][angleIndex]; - d.sizeVal = sizeVal; - d.uid = uids[i]; - d.rowId = d.uid; - d.source = data[i]; - d._previousInfo = this._prevPieData[d.uid] ? this._prevPieData[d.uid][0] : - getPreviousPoint(pieIndex, d.index, config); - return d; - }); - return pieData; - } - - /** - * Returns normalized data after transformation (it is the same in the case of pie layer) - * - * @param {Object} data transformed data - * @return {Object} normalized data - * @memberof ArcLayer - */ - getNormalizedData (data) { - return data; - } - - /** - * - * - * @param {Object} data - * @return {} - * @memberof ArcLayer - */ - calculateDomainFromData (data) { - const domainKey = OUTER_RADIUS_VALUE; - return { - radius: getDomainFromData([data], [domainKey, domainKey]) - }; - } - /** * * @@ -172,9 +61,9 @@ export default class ArcLayer extends BaseLayer { getNearestPoint (x, y, config = {}) { const dataPoint = selectElement(config.event.target).data()[0]; if (isSimpleObject(dataPoint)) { - const { data, uid } = dataPoint.datum; + const { source, rowId } = dataPoint; return { - id: this.getIdentifiersFromData(data, uid), + id: this.getIdentifiersFromData(source, rowId), layerId: this.id() }; } @@ -189,7 +78,59 @@ export default class ArcLayer extends BaseLayer { * @memberof ArcLayer */ getPlotElementsFromSet (set) { - return selectElement(this.mount()).selectAll(this.elemType()).filter(d => set.indexOf(d.datum.uid) !== -1); + return selectElement(this.mount()).selectAll(this.elemType()).filter(d => set.indexOf(d.rowId) !== -1); + } + + translatePoints (data) { + const { angle, color: colorAxis, radius: radiusAxis } = this.axes(); + const pieIndex = {}; + const prevData = this._points[0] || []; + const points = []; + const angleV = {}; + + this._prevPieData = {}; + prevData.forEach((e, index) => { + this._prevPieData[e.rowId] = [e, index]; + pieIndex[e.index] = e; + }); + data.forEach((d, i) => { + const angles = angle.getScaleValue(d.angle); + !angleV[d.angle] && (angleV[d.angle] = 0); + const { startAngle, endAngle } = angles[angleV[d.angle]++]; + const uid = d.rowId; + const resolvedEncodings = resolveEncodingValues({ + values: { + radius: radiusAxis.getOuterRadius(d.radius), + radius0: radiusAxis.getInnerRadius(d.radius0), + color: colorAxis.getColor(d.color), + angle0: startAngle, + angle: endAngle, + startAngle, + endAngle, + startAngle0: startAngle, + endAngle0: endAngle + }, + data: d + }, i, data, this); + const color = resolvedEncodings.color; + points.push({ + source: d.source, + index: i, + enter: {}, + update: { + angle0: resolvedEncodings.angle0, + angle: resolvedEncodings.angle, + radius0: resolvedEncodings.radius0, + radius: resolvedEncodings.radius + }, + color, + meta: getColorMetaInf(resolvedEncodings.color, colorAxis), + rowId: uid, + _previousInfo: this._prevPieData[uid] ? this._prevPieData[uid][0] : + getPreviousPoint(pieIndex, i, this) + }); + }); + return points; } /** @@ -200,70 +141,42 @@ export default class ArcLayer extends BaseLayer { * @memberof ArcLayer */ render (container) { - const { - height, - width - } = this.measurement(); + const measurement = this.measurement(); const { classPrefix, defClassName, - minOuterRadius, - innerRadius, - outerRadius, cornerRadius, padAngle, padRadius, - padding, - transition, - innerRadiusFixer + transition } = this.config(); - const sizeAxis = this.axes().size; - const transformedData = this._transformedData; - const chartHeight = height - padding.top - padding.bottom; - const chartWidth = width - padding.left - padding.right; const qualClassName = getQualifiedClassName(defClassName, this.id(), classPrefix); - // Sets range for radius - const range = getRadiusRange(chartWidth, chartHeight, { - minOuterRadius, - innerRadius, - outerRadius, - innerRadiusFixer - }); - const colorAxis = this.axes().color; - const defaultRadius = outerRadius || Math.min(chartHeight, chartWidth) / 2; - const radiusDomain = this.domain().radius; - const rangeValueGetter = d => getRangeValue(d, range, radiusDomain, defaultRadius, sizeAxis); // This returns a function that generates the arc path based on the datum provided - const path = arc() - // .outerRadius(d => rangeValueGetter(d)) - .innerRadius(innerRadius ? Math.min(chartHeight / 2, chartWidth / 2, innerRadius) : 0) + const path = this._arcFn = arc() .cornerRadius(cornerRadius) + .startAngle(d => d.update.angle0 + Math.PI / 2) + .endAngle(d => d.update.angle + Math.PI / 2) .padAngle(padAngle) - .padRadius(padRadius); - this._chartWidth = chartWidth; - this._chartHeight = chartHeight; + .padRadius(padRadius) + .outerRadius(d => d.update.radius) + .innerRadius(d => d.update.radius0); + + this._points = this._normalizedData.map(arr => this.translatePoints(arr)); + // Creating the group that holds all the arcs - const g = makeElement(selectElement(container), 'g', [1], `${qualClassName[0]}-group`) + const g = makeElement(selectElement(container), 'g', this._points, `${qualClassName[0]}-group`) .classed(`${qualClassName[1]}-group`, true) - .attr('transform', `translate(${chartWidth / 2},${chartHeight / 2})`); + .attr('transform', `translate(${measurement.width / 2}, + ${measurement.height / 2})`); const tween = (elem) => { - makeElement(elem, 'path', (d, i) => [{ - datum: d, - index: i, - arcFn: path, - meta: { - originalColor: colorAxis.getRawColor(d.colorVal), - stateColor: {}, - colorTransform: {} - } - }], `${qualClassName[0]}-path`) - .style('fill', d => colorAxis.getColor(d.datum.colorVal)) + makeElement(elem, 'path', d => [d], `${qualClassName[0]}-path`) + .style('fill', d => d.color) .transition() .duration(transition.duration) .on('end', this.registerAnimationDoneHook()) - .attrTween('d', (...params) => tweenPie(path, rangeValueGetter, params)) + .attrTween('d', (...params) => tweenPie(path, params)) .attr('class', (d, i) => { - const individualClass = getIndividualClassName(d, i, transformedData, this); + const individualClass = getIndividualClassName(d, i, this._points, this); return `${qualClassName[0]}-path ${qualClassName[1]}-path-${d.index} ${individualClass}`; }); @@ -283,23 +196,16 @@ export default class ArcLayer extends BaseLayer { consecutiveExits[oldExitCounter] = exitArr; }; // Creating groups for all the arcs present individually - makeElement(g, 'g', transformedData, `${qualClassName[0]}`, + makeElement(g, 'g', d => d, `${qualClassName[0]}`, { update: tween, exit: tweenExit }) .attr('class', (d, i) => `${qualClassName[0]} ${qualClassName[1]}-${i}`); - tweenExitPie(consecutiveExits, transition, rangeValueGetter, path); + tweenExitPie(consecutiveExits, transition, path); return this; } - /** - * - * - * @param {*} identifiers - * - * @memberof BaseLayer - */ getPointsFromIdentifiers (identifiers) { if (!this.data()) { return []; @@ -310,31 +216,27 @@ export default class ArcLayer extends BaseLayer { const fieldsConfig = this.data().getFieldsConfig(); const filteredPies = pieSlices.filter((tData) => { - const data = tData.datum.data; - const uid = tData.datum.uid; + const { source, rowId } = tData; return fieldNames.every((field, idx) => { if (field in fieldsConfig && fieldsConfig[field].def.type === FieldType.DIMENSION) { - return values.findIndex(d => d[idx] === data[fieldsConfig[field].index]) !== -1; + return values.findIndex(d => d[idx] === source[fieldsConfig[field].index]) !== -1; } else if (field === ReservedFields.ROW_ID) { - return values.findIndex(d => d[idx] === uid) !== -1; + return values.findIndex(d => d[idx] === rowId) !== -1; } return true; }); }); const pieSliceInf = filteredPies[0]; if (pieSliceInf) { - const centroid = pieSliceInf.arcFn.centroid(pieSliceInf.datum); + const measurement = this.measurement(); + const centroid = this._arcFn.centroid(pieSliceInf); return [{ - x: centroid[0] + this._chartWidth / 2, - y: centroid[1] + this._chartHeight / 2, + x: centroid[0] + measurement.width / 2, + y: centroid[1] + measurement.height / 2, width: 2, height: 2 }]; } return []; } - - getRenderProps () { - return [`${STATE_NAMESPACES.GROUP_GLOBAL_NAMESPACE}.domain.radius`]; - } } diff --git a/packages/visual-layer/src/layers/arc/default-config.js b/packages/visual-layer/src/layers/arc/default-config.js index 63c9582a..734e16db 100644 --- a/packages/visual-layer/src/layers/arc/default-config.js +++ b/packages/visual-layer/src/layers/arc/default-config.js @@ -5,7 +5,6 @@ export const defaultConfig = { defClassName: 'layer-arc', padding: { top: 1, bottom: 1, left: 1, right: 1 }, className: '', - minOuterRadius: 10, interaction: { highlight: [{ type: 'fill', @@ -23,11 +22,6 @@ export const defaultConfig = { height: 100, width: 100, sort: '', - cornerRadius: 0, - padAngle: 0, - padRadius: 0, - startAngle: 0, - endAngle: 360, colors: ['#F44336', 'blue', 'green', 'yellow', 'orange', 'purple'], transform: { type: 'identity' @@ -58,7 +52,6 @@ export const defaultConfig = { value: '1' } }, - innerRadiusFixer: 10, transition: { effect: 'cubic', duration: 500 diff --git a/packages/visual-layer/src/layers/area/area.js b/packages/visual-layer/src/layers/area/area.js index a62430de..755e8a98 100644 --- a/packages/visual-layer/src/layers/area/area.js +++ b/packages/visual-layer/src/layers/area/area.js @@ -7,9 +7,11 @@ import { STACK, ENCODING } from '../../enums/constants'; import { getAxesScales, positionPoints, - getLayerColor, getIndividualClassName, - getValidTransformForAggFn + getValidTransformForAggFn, + getColorMetaInf, + resolveEncodingValues, + sortData } from '../../helpers'; /** @@ -62,6 +64,7 @@ export default class AreaLayer extends LineLayer { const { [`${type}FieldType`]: fieldType } = encodingFieldsInf; if (fieldType === FieldType.MEASURE && domains[type] !== undefined) { domains[type][0] = Math.min(domains[type][0], 0); + domains[type][1] = Math.max(0, domains[type][1]); } }); return domains; @@ -82,17 +85,14 @@ export default class AreaLayer extends LineLayer { * @param {Object} axes Contains the axis * @return {Array} Array of points */ - translatePoints (data, encodingFieldsInf, axes) { + translatePoints (data) { let points = []; const transformType = this.transformType(); + const axes = this.axes(); const colorAxis = axes.color; const config = this.config(); - const encoding = config.encoding; - const colorEncoding = encoding.color; - const colorField = colorEncoding.field; const fieldsConfig = this.data().getFieldsConfig(); - const colorFieldIndex = colorField && fieldsConfig[colorField].index; - const { xField, yField, y0Field } = encodingFieldsInf; + const { xField, yField, y0Field } = this.encodingFieldsInf(); const { xAxis, yAxis @@ -101,45 +101,55 @@ export default class AreaLayer extends LineLayer { const isXDim = fieldsConfig[xField] && fieldsConfig[xField].def.type === FieldType.DIMENSION; const isYDim = fieldsConfig[yField] && fieldsConfig[yField].def.type === FieldType.DIMENSION; const key = isXDim ? 'x' : (isYDim ? 'y' : null); + const minYVal = yAxis.domain()[0]; + const basePos = minYVal < 0 ? yAxis.getScaleValue(0) : yAxis.getScaleValue(minYVal); + sortData(data, axes); points = data.map((d, i) => { + let color; const xPx = xAxis.getScaleValue(d.x) + xAxis.getUnitWidth() / 2; const yPx = yAxis.getScaleValue(d.y); - const y0Px = (y0Field || transformType === STACK) ? yAxis.getScaleValue(d.y0) : yAxis.getScaleValue(0); - const { color, rawColor } = getLayerColor({ datum: d, index: i }, { - colorEncoding, colorAxis, colorFieldIndex }); - const style = {}; - const meta = {}; - style.fill = color; - // style['fill-opacity'] = 0; - meta.stateColor = {}; - meta.originalColor = rawColor; - meta.colorTransform = {}; + const y0Px = (y0Field || transformType === STACK) ? yAxis.getScaleValue(d.y0) : basePos; + color = colorAxis.getColor(d.color); const invalidY = d.y instanceof InvalidAwareTypes; const invalidY0 = d.y0 instanceof InvalidAwareTypes; + const resolvedValues = resolveEncodingValues({ + values: { + x: xPx, + y: yPx, + y0: y0Px, + color + }, + data: d + }, i, data, this); + color = resolvedValues.color; const point = { enter: { x: xPx, - y: invalidY ? null : yAxis.getScaleValue(0), - y0: invalidY0 ? null : yAxis.getScaleValue(0) + y: invalidY ? null : basePos, + y0: invalidY0 ? null : basePos }, update: { x: xPx, - y: invalidY ? null : yPx, - y0: invalidY0 ? null : y0Px + y: invalidY ? null : resolvedValues.y, + y0: invalidY0 ? null : resolvedValues.y0 }, - _id: d._id, - _data: d._data, - source: d._data, - rowId: d._id, + source: d.source, + rowId: d.rowId, className: classNameFn ? classNameFn(d, i, data, this) : '', - style, - meta + style: { + fill: color + }, + meta: getColorMetaInf(color, colorAxis) }; point.className = getIndividualClassName(d, i, data, this); this.cachePoint(d[key], point); return point; }); points = positionPoints(this, points); + points = points.filter((point) => { + const update = point.update; + return !isNaN(update.x) && !isNaN(update.y); + }); return points; } diff --git a/packages/visual-layer/src/layers/area/renderer.js b/packages/visual-layer/src/layers/area/renderer.js index 337790fa..77d1d755 100644 --- a/packages/visual-layer/src/layers/area/renderer.js +++ b/packages/visual-layer/src/layers/area/renderer.js @@ -18,7 +18,7 @@ const /* istanbul ignore next */ drawArea = (params) => { const { effect: easeEffect, duration } = transition; const mount = selectElement(container); const curveInterpolatorFn = pathInterpolators[interpolate]; - const selection = mount.selectAll('path').data([params.points]); + const selection = mount.selectAll('path').data(points.length ? [points[0].className] : []); const [enterAreaPath, updateAreaPath] = ['enter', 'update'].map(e => area().curve(curveInterpolatorFn) .x(d => d[e].x) .y1(d => d[e].y) @@ -38,8 +38,7 @@ const /* istanbul ignore next */ drawArea = (params) => { .attr('d', updateAreaPath(filteredPoints)) .each(function (d) { const element = selectElement(this); - - element.classed(d[0].className, true); + element.attr('class', d); Object.keys(style).forEach(key => element.style(key, style[key])); }); }; diff --git a/packages/visual-layer/src/layers/bar/bar-helper.js b/packages/visual-layer/src/layers/bar/bar-helper.js index 8744704a..fe69a6e4 100644 --- a/packages/visual-layer/src/layers/bar/bar-helper.js +++ b/packages/visual-layer/src/layers/bar/bar-helper.js @@ -1,6 +1,11 @@ import { MeasureSubtype, DimensionSubtype } from 'muze-utils'; import { STACK } from '../../enums/constants'; -import { getLayerColor, positionPoints, getIndividualClassName } from '../../helpers'; +import { positionPoints, getIndividualClassName, getColorMetaInf, resolveEncodingValues } from '../../helpers'; + +const positionRetriever = { + x: (xPx, isNegativeVal, barBasePos) => (isNegativeVal ? [xPx, barBasePos] : [barBasePos, xPx]), + y: (yPx, isNegativeVal, barBasePos) => (isNegativeVal ? [barBasePos, yPx] : [yPx, barBasePos]) +}; /** * @@ -65,19 +70,18 @@ const resolveDimByField = (type, axesInfo, config, data) => { enter = pos; enterSpace = space; } else { - const zeroPos = axis.getScaleValue(0); - const axisType = axis.getScaleValue(data[type]); - const axisType0 = axis.getScaleValue(data[`${type}0`]); + const minDomVal = axis.domain()[0]; + const barBasePos = minDomVal < 0 ? axis.getScaleValue(0) : axis.getScaleValue(minDomVal); + pos = axis.getScaleValue(data[type]); + let endPos = axis.getScaleValue(data[`${type}0`]); enterSpace = 0; - if (type === 'x') { - pos = data[type] < 0 || transformType === STACK ? axisType : zeroPos; - space = Math.abs(pos - (transformType === STACK ? axisType0 : (data[type] >= 0 ? axisType : zeroPos))); - } else { - pos = transformType === STACK || data[type] >= 0 ? axisType : zeroPos; - space = Math.abs(pos - (transformType === STACK ? axisType0 : (data[type] >= 0 ? zeroPos : axisType))); + const isNegativeVal = data[type] < 0; + if (transformType !== STACK) { + [pos, endPos] = positionRetriever[type](pos, isNegativeVal, barBasePos); } - enter = zeroPos; + space = Math.abs(pos - endPos); + enter = barBasePos; } } else { pos = 0; @@ -147,9 +151,6 @@ export const getTranslatedPoints = (context, data, sizeConfig) => { const encoding = context.config().encoding; const axes = context.axes(); const colorAxis = axes.color; - const fieldsConfig = context.data().getFieldsConfig(); - const colorEncoding = encoding.color; - const colorField = colorEncoding.field; const sizeEncoding = encoding.size || {}; const { x0Field, @@ -162,12 +163,9 @@ export const getTranslatedPoints = (context, data, sizeConfig) => { const isYDim = yFieldSubType === DimensionSubtype.CATEGORICAL || yFieldSubType === DimensionSubtype.TEMPORAL; const key = isXDim ? 'x' : (isYDim ? 'y' : null); const transformType = context.transformType(); - const colorFieldIndex = colorField && fieldsConfig[colorField] && fieldsConfig[colorField].index; for (let i = 0, len = data.length; i < len; i++) { const d = data[i]; - const style = {}; - const meta = {}; const dimensions = resolveDimensions(d, { xFieldType: xFieldSubType, yFieldType: yFieldSubType, @@ -179,27 +177,37 @@ export const getTranslatedPoints = (context, data, sizeConfig) => { sizeEncoding }, axes); - const { color, rawColor } = getLayerColor({ datum: d, index: i }, - { colorEncoding, colorAxis, colorFieldIndex }); - - style.fill = color; - meta.stateColor = {}; - meta.originalColor = rawColor; - meta.colorTransform = {}; + let color = colorAxis.getColor(d.color); const update = dimensions.update; - - if (!isNaN(update.x) && !isNaN(update.y) && d._id !== undefined) { + const resolvedEncodings = resolveEncodingValues({ + values: { + x: update.x, + y: update.y, + width: update.width, + height: update.height, + color + }, + data: d + }, i, data, context); + color = resolvedEncodings.color; + const { x, y, width, height } = resolvedEncodings; + if (!isNaN(x) && !isNaN(y) && d.rowId !== undefined) { let point = null; point = { enter: dimensions.enter, - update, - style, - _data: d._data, - _id: d._id, - source: d._data, - rowId: d._id, - meta + update: { + x, + y, + width, + height + }, + source: d.source, + rowId: d.rowId, + style: { + fill: color + }, + meta: getColorMetaInf(color, colorAxis) }; point.className = getIndividualClassName(d, i, data, context); points.push(point); diff --git a/packages/visual-layer/src/layers/bar/bar.js b/packages/visual-layer/src/layers/bar/bar.js index c6e20efd..ab2a2759 100644 --- a/packages/visual-layer/src/layers/bar/bar.js +++ b/packages/visual-layer/src/layers/bar/bar.js @@ -110,8 +110,12 @@ export default class BarLayer extends BaseLayer { const domain = super.calculateDomainFromData(data, encodingFieldInf, fieldsConfig); ['x', 'y'].forEach((d) => { if (encodingFieldInf[`${d}FieldType`] === MEASURE && domain[d]) { - encodingFieldInf[`${d}0Field}`] ? domain[d] = domain[d].sort((a, b) => a - b) : - (domain[d][0] = Math.min(domain[d][0], 0)); + if (encodingFieldInf[`${d}0Field`]) { + domain[d] = domain[d].sort((a, b) => a - b); + } else { + domain[d][0] = Math.min(domain[d][0], 0); + domain[d][1] = Math.max(0, domain[d][1]); + } } }); return domain; @@ -176,7 +180,7 @@ export default class BarLayer extends BaseLayer { className: seriesClassName, transition, style: {}, - keyFn: d => dimensions.map(key => d._data[key]).join('-') + keyFn: d => dimensions.map(key => d.source[key]).join('-') }); } }); @@ -286,9 +290,9 @@ export default class BarLayer extends BaseLayer { pointFound = null; } - const values = pointFound && pointFound._data; + const values = pointFound && pointFound.source; if (values) { - identifiers = this.getIdentifiersFromData(values, pointFound._id); + identifiers = this.getIdentifiersFromData(values, pointFound.rowId); } return pointFound ? { dimensions: [pointFound.update], @@ -300,4 +304,8 @@ export default class BarLayer extends BaseLayer { getPlotSpan () { return this._plotSpan; } + + hasPlotSpan () { + return true; + } } diff --git a/packages/visual-layer/src/layers/line/line.js b/packages/visual-layer/src/layers/line/line.js index 74e7a706..222df15a 100644 --- a/packages/visual-layer/src/layers/line/line.js +++ b/packages/visual-layer/src/layers/line/line.js @@ -4,8 +4,8 @@ import { selectElement, makeElement, FieldType, - getObjProp, - InvalidAwareTypes + InvalidAwareTypes, + getObjProp } from 'muze-utils'; import { BaseLayer } from '../../base-layer'; import { drawLine } from './renderer'; @@ -14,9 +14,11 @@ import { ENCODING } from '../../enums/constants'; import { attachDataToVoronoi, animateGroup, - getLayerColor, positionPoints, - getIndividualClassName + getIndividualClassName, + getColorMetaInf, + resolveEncodingValues, + sortData } from '../../helpers'; import './styles.scss'; @@ -42,23 +44,10 @@ export default class LineLayer extends BaseLayer { this._voronoi = new Voronoi(); } - /** - * - * - * @static - * - * @memberof LineLayer - */ static formalName () { return 'line'; } - /** - * - * - * - * @memberof LineLayer - */ elemType () { return 'path'; } @@ -71,15 +60,6 @@ export default class LineLayer extends BaseLayer { return defaultConfig; } - /** - * - * - * @static - * @param {*} conf - * @param {*} userConf - * - * @memberof LineLayer - */ static defaultPolicy (conf, userConf) { const config = BaseLayer.defaultPolicy(conf, userConf); const encoding = config.encoding; @@ -112,53 +92,55 @@ export default class LineLayer extends BaseLayer { * @param {number} seriesIndex index of series * @return {Array} Array of points */ - translatePoints (data, encodingFieldsInf, axes) { + translatePoints (data) { let points = []; + const axes = this.axes(); const xAxis = axes.x; const yAxis = axes.y; const colorAxis = axes.color; - const encoding = this.config().encoding; - const { xFieldType, yFieldType } = encodingFieldsInf; + const { xFieldType, yFieldType } = this.encodingFieldsInf(); const isXDim = xFieldType === FieldType.DIMENSION; const isYDim = yFieldType === FieldType.DIMENSION; const key = isXDim ? ENCODING.X : (isYDim ? ENCODING.Y : null); - const colorEncoding = encoding.color; - const colorField = colorEncoding.field; - const fieldsConfig = this.data().getFieldsConfig(); - const colorFieldIndex = colorField && fieldsConfig[colorField].index; - const style = {}; - const meta = {}; - + sortData(data, axes); points = data.map((d, i) => { const xPx = xAxis.getScaleValue(d.x) + xAxis.getUnitWidth() / 2; const yPx = yAxis.getScaleValue(d.y) + yAxis.getUnitWidth() / 2; - const { color, rawColor } = getLayerColor({ datum: d, index: i }, { - colorEncoding, colorAxis, colorFieldIndex }); + const color = colorAxis.getColor(d.color); - style.stroke = color; - style['fill-opacity'] = 0; - meta.stateColor = {}; - meta.originalColor = rawColor; - meta.colorTransform = {}; + const resolvedEncodings = resolveEncodingValues({ + values: { + x: xPx, + y: yPx, + color + }, + data: d + }, i, data, this); const point = { enter: {}, update: { - x: d.x instanceof InvalidAwareTypes ? null : xPx, - y: d.y instanceof InvalidAwareTypes ? null : yPx + x: d.x instanceof InvalidAwareTypes ? null : resolvedEncodings.x, + y: d.y instanceof InvalidAwareTypes ? null : resolvedEncodings.y + }, + style: { + stroke: resolvedEncodings.color, + 'fill-opacity': 0 }, - style, - _data: d._data, - _id: d._id, - rowId: d._id, - source: d._data, - meta + rowId: d.rowId, + source: d.source, + meta: getColorMetaInf(resolvedEncodings.color, colorAxis) }; point.className = getIndividualClassName(d, i, data, this); this.cachePoint(d[key], point); return point; }); points = positionPoints(this, points); + + points = points.filter((point) => { + const { update } = point; + return !isNaN(update.x) && !isNaN(update.y); + }); return points; } @@ -210,19 +192,19 @@ export default class LineLayer extends BaseLayer { }); }, update: (group, dataArr, i) => { - points = this.translatePoints(dataArr, this.encodingFieldsInf(), axes, i); + points = this.translatePoints(dataArr); this._points.push(points); seriesClassName = `${qualifiedClassName[0]}-${keys[i] || i}`.toLowerCase(); let color; const colorValFn = encoding.color.value; - const colorVal = points.find(d => d._data[colorFieldIndex] !== null && - d._data[colorFieldIndex] !== undefined); + const colorVal = points.find(d => d.source[colorFieldIndex] !== null && + d.source[colorFieldIndex] !== undefined); if (colorValFn) { color = colorValFn(dataArr, i, normalizedData); } else { - color = axes.color.getColor(colorVal && colorVal._data[colorFieldIndex]); + color = axes.color.getColor(colorVal && colorVal.source[colorFieldIndex]); } style = this.getPathStyle(color); @@ -237,7 +219,7 @@ export default class LineLayer extends BaseLayer { connectNullData: config.connectNullData }); } - }, d => d[0]._data[colorFieldIndex] || d[0]._id); + }, d => d[0].source[colorFieldIndex] || d[0].rowId); attachDataToVoronoi(this._voronoi, this._points); return this; @@ -274,8 +256,8 @@ export default class LineLayer extends BaseLayer { const dimensions = getObjProp(point, 'data', 'data', 'update'); if (point) { - const { _data, _id } = point.data.data; - const identifiers = this.getIdentifiersFromData(_data, _id); + const { source, rowId } = point.data.data; + const identifiers = this.getIdentifiersFromData(source, rowId); return { id: identifiers, dimensions: [{ diff --git a/packages/visual-layer/src/layers/line/renderer.js b/packages/visual-layer/src/layers/line/renderer.js index ef1bc051..4e1b52f4 100644 --- a/packages/visual-layer/src/layers/line/renderer.js +++ b/packages/visual-layer/src/layers/line/renderer.js @@ -35,8 +35,8 @@ export const drawLine = (context) => { } updateStyle(mount, style); - let element = makeElement(mount, 'path', [1]); - element.classed(points[0].className, true); + let element = makeElement(mount, 'path', points.length ? [points[0].className] : []); + element.attr('class', d => d); if (!transition.disabled) { element = element.transition() .duration(transition.duration) diff --git a/packages/visual-layer/src/layers/point/point.js b/packages/visual-layer/src/layers/point/point.js index ea6ea14a..d0e006b1 100644 --- a/packages/visual-layer/src/layers/point/point.js +++ b/packages/visual-layer/src/layers/point/point.js @@ -12,11 +12,12 @@ import { defaultConfig } from './default-config'; import { ENCODING } from '../../enums/constants'; import { attachDataToVoronoi, - getLayerColor, positionPoints, getPlotMeasurement, getIndividualClassName, - getMarkId + getMarkId, + getColorMetaInf, + resolveEncodingValues } from '../../helpers'; import './styles.scss'; @@ -44,12 +45,6 @@ export default class PointLayer extends BaseLayer { this._bandScale = Scales.band(); } - /** - * - * - * - * @memberof PointLayer - */ elemType () { return 'g'; } @@ -74,24 +69,10 @@ export default class PointLayer extends BaseLayer { return config; } - /** - * - * - * @static - * - * @memberof PointLayer - */ static formalName () { return 'point'; } - /** - * - * - * @static - * - * @memberof PointLayer - */ static drawFn () { return drawSymbols; } @@ -103,18 +84,14 @@ export default class PointLayer extends BaseLayer { * @param {Object} axes Axes object * @return {Array.} Array of points */ - translatePoints (data, encoding, axes, config = {}) { + translatePoints (data, config = {}) { let points = []; + const encoding = this.config().encoding; + const axes = this.axes(); const { - size: sizeEncoding, - shape: shapeEncoding, - color: colorEncoding, x, y } = encoding; - const sizeField = sizeEncoding.field; - const sizeValue = sizeEncoding.value; - const shapeField = shapeEncoding.field; const xField = x.field; const yField = y.field; const { size: sizeAxis, shape: shapeAxis } = axes; @@ -122,19 +99,14 @@ export default class PointLayer extends BaseLayer { const isXDim = fieldsConfig[xField] && fieldsConfig[xField].def.type === FieldType.DIMENSION; const isYDim = fieldsConfig[yField] && fieldsConfig[yField].def.type === FieldType.DIMENSION; const key = isXDim ? ENCODING.X : (isYDim ? ENCODING.Y : null); - const colorField = colorEncoding && colorEncoding.field; - const colorFieldIndex = fieldsConfig[colorField] && fieldsConfig[colorField].index; const measurement = this.measurement(); - const shapeFieldIndex = fieldsConfig[shapeField] && fieldsConfig[shapeField].index; - const sizeFieldIndex = fieldsConfig[sizeField] && fieldsConfig[sizeField].index; const colorAxis = axes.color; const { x: offsetX, y: offsetY } = config.offset; for (let i = 0, len = data.length; i < len; i++) { const d = data[i]; - const row = d._data; - const size = sizeValue instanceof Function ? sizeValue(d, i) : sizeAxis.getSize(row[sizeFieldIndex]); - const shape = shapeAxis.getShape(row[shapeFieldIndex]); + const size = sizeAxis.getSize(d.size); + const shape = shapeAxis.getShape(d.shape); let [xPx, yPx] = [ENCODING.X, ENCODING.Y].map((type) => { const value = d[type] === null ? undefined : d[type]; @@ -145,36 +117,39 @@ export default class PointLayer extends BaseLayer { xPx += offsetX; yPx += offsetY; - const { color, rawColor } = getLayerColor({ datum: d, index: i }, - { colorEncoding, colorAxis, colorFieldIndex }); + let color = colorAxis.getColor(d.color); + const resolvedEncodings = resolveEncodingValues({ + values: { + x: xPx, + y: yPx, + color, + shape, + size, + data: d + }, + data: d + }, i, data, this); + color = resolvedEncodings.color; const style = { fill: color, stroke: color }; + const pos = { + x: resolvedEncodings.x, + y: resolvedEncodings.y + }; if (!isNaN(xPx) && !isNaN(yPx)) { const point = { - enter: { - x: xPx, - y: yPx - }, - update: { - x: xPx, - y: yPx - }, - shape, - size: Math.abs(size), - meta: { - stateColor: {}, - originalColor: rawColor, - colorTransform: {} - }, + enter: pos, + update: pos, + shape: resolvedEncodings.shape, + size: Math.abs(resolvedEncodings.size), + meta: getColorMetaInf(color, colorAxis), style, - _data: row, - _id: d._id, - source: d._data, - rowId: d._id + source: d.source, + rowId: d.rowId }; point.className = getIndividualClassName(d, i, data, this); points.push(point); @@ -215,27 +190,26 @@ export default class PointLayer extends BaseLayer { layer: this, container: group.node(), points, + interpolate: config.interpolate, className: seriesClassName, transition, keyFn: v => getMarkId(v.source, schema) }); } - }, data => data[0]._id); + }, data => data[0].rowId); this._maxSize = Math.sqrt(maxSize / Math.PI) * 2; attachDataToVoronoi(this._voronoi, this._points); return this; } generateDataPoints (normalizedData, keys) { - const encoding = this.config().encoding; - const axes = this.axes(); const [widthMetrics, heightMetrics] = getPlotMeasurement(this, keys); const offsetXValues = widthMetrics.offsetValues || []; const offsetYValues = heightMetrics.offsetValues || []; return normalizedData.map((dataArr, i) => { const measurementConf = this.getMeasurementConfig(offsetXValues[i], offsetYValues[i], widthMetrics.span, heightMetrics.span); - return this.translatePoints(dataArr, encoding, axes, measurementConf); + return this.translatePoints(dataArr, measurementConf); }).filter(d => d.length); } @@ -270,8 +244,8 @@ export default class PointLayer extends BaseLayer { const radius = point ? Math.sqrt(point.data.data.size / Math.PI) : 0; if (point) { - const { _data, _id } = point.data.data; - const identifiers = this.getIdentifiersFromData(_data, _id); + const { source, rowId } = point.data.data; + const identifiers = this.getIdentifiersFromData(source, rowId); return { id: identifiers, dimensions: [{ diff --git a/packages/visual-layer/src/layers/text/default-config.js b/packages/visual-layer/src/layers/text/default-config.js index c27d18b1..708722d2 100644 --- a/packages/visual-layer/src/layers/text/default-config.js +++ b/packages/visual-layer/src/layers/text/default-config.js @@ -27,6 +27,9 @@ export const defaultConfig = { }, encoding: { color: {}, + size: {}, + radius: {}, + angle: {}, text: { value: '', formatter: (val, i, data, context) => { @@ -36,6 +39,12 @@ export const defaultConfig = { background: { padding: 10 } + }, + rotation: { + value: 0 + }, + 'alignment-baseline': { + value: 'middle' } }, states: { diff --git a/packages/visual-layer/src/layers/text/renderer.js b/packages/visual-layer/src/layers/text/renderer.js index 1089eefd..cbe0e589 100644 --- a/packages/visual-layer/src/layers/text/renderer.js +++ b/packages/visual-layer/src/layers/text/renderer.js @@ -62,6 +62,8 @@ const drawText = (container, data, config, smartLabel) => { dataObj.className && textEl.classed(dataObj.className, true); setAttrs(textNode, update); textEl.attr('text-anchor', textanchor); + textEl.attr('alignment-baseline', dataObj['alignment-baseline']); + textEl.attr('transform', `rotate(${dataObj.rotation} ${update.x} ${update.y})`); }); selection.exit().remove(); return selection; diff --git a/packages/visual-layer/src/layers/text/text.js b/packages/visual-layer/src/layers/text/text.js index 82469a54..f81c967c 100644 --- a/packages/visual-layer/src/layers/text/text.js +++ b/packages/visual-layer/src/layers/text/text.js @@ -7,108 +7,195 @@ import { import { BaseLayer } from '../../base-layer'; import drawText from './renderer'; import { defaultConfig } from './default-config'; -import { getLayerColor, positionPoints, getIndividualClassName } from '../../helpers'; +import { positionPoints, getIndividualClassName, resolveEncodingValues, getColorMetaInf, toCartesianCoordinates } + from '../../helpers'; import { TEXT_ANCHOR_MIDDLE, ENCODING } from '../../enums/constants'; import './styles.scss'; -/** - * This layer is used to create labels for each data point. It has an encoding property ```text``` - * which determines from which field's data the value of the label will be taken. The text encoding - * property is necessary for the layer to render the text.The mark type of this layer is ```text```. - * - * @public - * - * @class - * @module TextLayer - * @extends BaseLayer - */ -export default class TextLayer extends BaseLayer { - /** - * Returns the default configuration of the text layer - * @return {Object} Default configuration of the text layer - */ - static defaultConfig () { - return defaultConfig; - } +const defaultEncoding = defaultConfig.encoding; +const alignmentBaseLine = defaultEncoding['alignment-baseline'].value; +const defRotation = defaultEncoding.rotation.value; - static formalName () { - return 'text'; - } +const pointTranslators = { + polar: (data, config, layerInst) => { + let points = []; + const axes = layerInst.axes(); + const encoding = layerInst.config().encoding; + const textEncoding = encoding.text; + const { radius: radiusAxis, color: colorAxis, angle: angleAxis } = axes; + const { formatter: textFormatter } = textEncoding; + const backgroundEncoding = encoding.text.background; + const backgroundPadding = backgroundEncoding.padding; + const backgroundValue = backgroundEncoding.value; + const angleV = {}; + for (let i = 0, len = data.length; i < len; i++) { + const d = data[i]; + const source = d.source; + const text = d.text; - elemType () { - return 'text'; - } + const color = colorAxis.getColor(d.color); + const radius = radiusAxis.getOuterRadius(d.radius); + const angles = angleAxis.getScaleValue(d.angle); + !angleV[d.angle] && (angleV[d.angle] = 0); + const { startAngle, endAngle } = angles[angleV[d.angle]++]; - /** - * Generates an array of objects containing x, y, width and height of the points from the data - * @param {Array.} data Data Array - * @param {Object} encoding Config - * @param {Object} axes Axes object - * @return {Array.} Array of points - */ - translatePoints (data, encoding, axes) { + const angle = (startAngle + endAngle) / 2; + const resolvedVal = resolveEncodingValues({ + values: { + angle, + radius, + color, + text, + startAngle, + endAngle, + rotation: defRotation, + 'alignment-baseline': alignmentBaseLine + }, + data: d + }, i, data, layerInst); + const point = { + enter: {}, + update: { + angle: resolvedVal.angle, + radius: resolvedVal.radius + }, + text: textFormatter ? textFormatter(text, i, data, layerInst) : resolvedVal.text, + color: resolvedVal.color, + rotation: resolvedVal.rotation, + background: { + value: backgroundValue instanceof Function ? backgroundValue(d, i, data, layerInst) : null, + padding: backgroundPadding + }, + 'alignment-baseline': resolvedVal['alignment-baseline'], + meta: getColorMetaInf(resolvedVal.color, colorAxis), + style: {}, + source, + rowId: d.rowId + }; + + point.className = getIndividualClassName(d, i, data, layerInst); + points.push(point); + } + + points = toCartesianCoordinates(positionPoints(layerInst, points), layerInst.measurement()); + + points = points.filter((d) => { + const update = d.update; + return !isNaN(update.x) && !isNaN(update.y); + }); + return points; + }, + cartesian: (data, config, layerInst) => { let points = []; + const axes = layerInst.axes(); const colorAxis = axes.color; + const encoding = layerInst.config().encoding; const textEncoding = encoding.text; const { field: textField, value, formatter: textFormatter } = textEncoding; - const colorEncoding = encoding.color; - const colorField = colorEncoding && colorEncoding.field; - const fieldsConfig = this.data().getFieldsConfig(); + const fieldsConfig = layerInst.data().getFieldsConfig(); const backgroundEncoding = encoding.text.background; const backgroundPadding = backgroundEncoding.padding; const backgroundValue = backgroundEncoding.value; - const colorFieldIndex = fieldsConfig[colorField] ? fieldsConfig[colorField].index : -1; const textFieldIndex = textField ? fieldsConfig[textField] && fieldsConfig[textField].index : -1; const xEnc = ENCODING.X; const yEnc = ENCODING.Y; for (let i = 0, len = data.length; i < len; i++) { const d = data[i]; - const row = d._data; + const row = d.source; const textValue = textField ? row[textFieldIndex] : value; const [xPx, yPx] = [xEnc, yEnc].map(type => (axes[type] ? axes[type].getScaleValue(d[type]) + axes[type].getUnitWidth() / 2 : 0)); - const { color, rawColor } = getLayerColor({ datum: d, index: i }, - { colorEncoding, colorAxis, colorFieldIndex }); - + const color = colorAxis.getColor(d.color, colorAxis); + const resolvedEncodings = resolveEncodingValues({ + values: { + x: xPx, + y: yPx, + text: textValue, + color, + rotation: defRotation, + 'alignment-baseline': alignmentBaseLine + }, + data: d + }, i, data, layerInst); const point = { enter: {}, update: { - x: xPx, - y: yPx + x: resolvedEncodings.x, + y: resolvedEncodings.y }, - text: textFormatter(textValue, i, data, this), - color, + text: textFormatter(resolvedEncodings.text, i, data, layerInst), + color: resolvedEncodings.color, background: { - value: backgroundValue instanceof Function ? backgroundValue(d, i, data, this) : null, + value: backgroundValue instanceof Function ? backgroundValue(d, i, data, layerInst) : null, padding: backgroundPadding }, - meta: { - stateColor: {}, - originalColor: rawColor, - colorTransform: {} - }, + 'alignment-baseline': resolvedEncodings['alignment-baseline'], + rotation: resolvedEncodings.rotation, + meta: getColorMetaInf(resolvedEncodings.color, colorAxis), style: {}, - _data: row, - _id: d._id, - source: d._data, - rowId: d._id + source: d.source, + rowId: d.rowId }; - point.className = getIndividualClassName(d, i, data, this); + point.className = getIndividualClassName(d, i, data, layerInst); points.push(point); } - points = positionPoints(this, points); + points = positionPoints(layerInst, points); points = points.filter((d) => { const update = d.update; return !isNaN(update.x) && !isNaN(update.y); }); return points; } +}; + +/** + * This layer is used to create labels for each data point. It has an encoding property ```text``` + * which determines from which field's data the value of the label will be taken. The text encoding + * property is necessary for the layer to render the text.The mark type of this layer is ```text```. + * + * @public + * + * @class + * @module TextLayer + * @extends BaseLayer + */ +export default class TextLayer extends BaseLayer { + /** + * Returns the default configuration of the text layer + * @return {Object} Default configuration of the text layer + */ + static defaultConfig () { + return defaultConfig; + } + + static formalName () { + return 'text'; + } + + elemType () { + return 'text'; + } + + getPointTranslator (val) { + return pointTranslators[val]; + } + + /** + * Generates an array of objects containing x, y, width and height of the points from the data + * @param {Array.} data Data Array + * @param {Object} encoding Config + * @param {Object} axes Axes object + * @return {Array.} Array of points + */ + translatePoints (data, config = {}) { + return pointTranslators[this.coord()](data, config, this); + } /** * Renders the plot in the given container @@ -116,13 +203,10 @@ export default class TextLayer extends BaseLayer { * @return {textLayer} Instance of text layer */ render (container) { - let points; const config = this.config(); - const encoding = config.encoding; const normalizedData = this._normalizedData; const className = config.className; const qualifiedClassName = getQualifiedClassName(config.defClassName, this.id(), config.classPrefix); - const axes = this.axes(); const containerSelection = selectElement(container); containerSelection.classed(`${qualifiedClassName.join(' ')} ${className}`, true); @@ -131,9 +215,9 @@ export default class TextLayer extends BaseLayer { append: 'g', selector: 'g', container, - each: (dataArr, group, i) => { + each: (dataArr, group) => { const node = group.node(); - points = this.translatePoints(dataArr, encoding, axes, i); + const points = this.translatePoints(dataArr, {}, this); setStyles(node, { 'text-anchor': TEXT_ANCHOR_MIDDLE }); diff --git a/packages/visual-layer/src/layers/tick/default-config.js b/packages/visual-layer/src/layers/tick/default-config.js index ea1b56cb..b9bf4736 100644 --- a/packages/visual-layer/src/layers/tick/default-config.js +++ b/packages/visual-layer/src/layers/tick/default-config.js @@ -26,12 +26,17 @@ export const defaultConfig = { effect: 'cubic', duration: 1000 }, + interpolate: 'linear', encoding: { color: { }, x: {}, y: {}, x0: {}, y0: {}, + radius: {}, + radius0: {}, + angle: {}, + angle0: {}, strokeOpacity: { value: 0.5 }, diff --git a/packages/visual-layer/src/layers/tick/renderer.js b/packages/visual-layer/src/layers/tick/renderer.js index 079bdbc9..2aa53f5d 100644 --- a/packages/visual-layer/src/layers/tick/renderer.js +++ b/packages/visual-layer/src/layers/tick/renderer.js @@ -1,4 +1,6 @@ -import { selectElement } from 'muze-utils'; +import { selectElement, Symbols, pathInterpolators } from 'muze-utils'; + +const line = Symbols.line; /** * Draws ticks by using d3 selection @@ -6,7 +8,7 @@ import { selectElement } from 'muze-utils'; * @return {Selection} Ticks Selection */ export default /* istanbul ignore next */ (params) => { - const { points, container, keyFn, className } = params; + const { points, container, keyFn, className, interpolate } = params; const mount = selectElement(container); const ticks = mount.selectAll('path').data(points, keyFn); const ticksEnter = ticks.enter().append('path'); @@ -26,9 +28,13 @@ export default /* istanbul ignore next */ (params) => { const updateStyle = d.style || {}; const x0 = update.x0 !== undefined ? update.x0 : update.x; const y0 = update.y0 !== undefined ? update.y0 : update.y; - const path = `M ${update.x} ${update.y} L ${x0} ${y0}`; + const curveInterpolatorFn = pathInterpolators[interpolate]; + const linepath = line() + .curve(curveInterpolatorFn) + .x(e => e[0]) + .y(e => e[1]); d.className && selection.classed(d.className, true); - selection.attr('d', path); + selection.attr('d', linepath([[update.x, update.y], [x0, y0]])); Object.entries(updateStyle).forEach(styleObj => selection.style(styleObj[0], styleObj[1])); }); }; diff --git a/packages/visual-layer/src/layers/tick/tick.js b/packages/visual-layer/src/layers/tick/tick.js index 922b03ba..c97ac807 100644 --- a/packages/visual-layer/src/layers/tick/tick.js +++ b/packages/visual-layer/src/layers/tick/tick.js @@ -4,77 +4,73 @@ import { defaultConfig } from './default-config'; import { ENCODING } from '../../enums/constants'; import drawTicks from './renderer'; import './styles.scss'; -import { getAxesScales, getLayerColor, positionPoints, getIndividualClassName } from '../../helpers'; +import { getAxesScales, positionPoints, getIndividualClassName, + getColorMetaInf, resolveEncodingValues, toCartesianCoordinates } from '../../helpers'; -/** - * This layer is used to create small lines. The orientation of the line is determined by the positional - * encoding properties x0 and y0. The mark type of the layer is ```tick```. - * - * @public - * - * @class - * @module TickLayer - * @extends BaseLayer - */ -export default class TickLayer extends PointLayer { - - /** - * - * - * @staticg - * - * @memberof TickLayer - */ - static defaultConfig () { - return defaultConfig; - } - - /** - * - * - * @static - * - * @memberof TickLayer - */ - static formalName () { - return 'tick'; - } - - /** - * - * - * @static - * - * @memberof TickLayer - */ - static drawFn () { - return drawTicks; - } - - /** - * - * - * - * @memberof TickLayer - */ - elemType () { - return 'path'; - } +const pointTranslators = { + polar: (data, config = {}, layerInst) => { + const axes = layerInst.axes(); + let points = []; + const { radius: radiusAxis, angle: angleAxis, angle0: angle0Axis } = axes; + const measurement = layerInst.measurement(); - /** - * Generates an array of objects containing x, y, width and height of the points from the data - * @param {Array.} data Data Array - * @param {Object} encoding Config - * @param {Object} axes Axes object - * @return {Array.} Array of points - */ - translatePoints (data, encoding, axes, config = {}) { + const colorAxis = axes.color; + const angleV = {}; + const angle0V = {}; + for (let i = 0, len = data.length; i < len; i++) { + const d = data[i]; + const color = colorAxis.getColor(d.color); + const angles = angleAxis.getScaleValue(d.angle); + !angleV[d.angle] && (angleV[d.angle] = 0); + const { startAngle, endAngle } = angles[angleV[d.angle]++]; + const angles0 = angle0Axis.getScaleValue(d.angle0); + !angle0V[d.angle0] && (angle0V[d.angle0] = 0); + const { startAngle: startAngle0, endAngle: endAngle0 } = angles0[angle0V[d.angle0]++]; + const radius = radiusAxis.getOuterRadius(d.radius); + const angle = (startAngle + endAngle) / 2; + const angle0 = (startAngle0 + endAngle0) / 2; + const resolvedVal = resolveEncodingValues({ + values: { + radius, + radius0: radiusAxis.getInnerRadius(d.radius0), + color, + angle, + angle0, + startAngle, + endAngle, + startAngle0, + endAngle0 + }, + data: d + }, i, data, layerInst); + const point = { + enter: {}, + update: { + radius: resolvedVal.radius, + radius0: resolvedVal.radius0, + angle: resolvedVal.angle, + angle0: resolvedVal.angle0 + }, + style: { + stroke: resolvedVal.color + }, + source: d.source, + rowId: d.rowId, + meta: getColorMetaInf(resolvedVal.color, colorAxis) + }; + point.className = getIndividualClassName(d, i, data, layerInst); + points.push(point); + } + points = toCartesianCoordinates(positionPoints(layerInst, points), measurement, true); + return points; + }, + cartesian: (data, config = {}, layerInst) => { + const axes = layerInst.axes(); let points = []; const { xAxis, yAxis } = getAxesScales(axes); - const fieldsConfig = this.data().getFieldsConfig(); const { xField, yField, @@ -82,14 +78,11 @@ export default class TickLayer extends PointLayer { y0Field, xFieldType, yFieldType - } = this.encodingFieldsInf(); + } = layerInst.encodingFieldsInf(); const isXDim = xFieldType === FieldType.DIMENSION; const isYDim = yFieldType === FieldType.DIMENSION; const key = isXDim ? ENCODING.X : (isYDim ? ENCODING.Y : null); - const colorEncoding = encoding.color; - const colorField = colorEncoding && colorEncoding.field; - const colorFieldIndex = fieldsConfig[colorField] && fieldsConfig[colorField].index; - const measurement = this.measurement(); + const measurement = layerInst.measurement(); const colorAxis = axes.color; const { x: offsetX, y: offsetY } = config.offset; const { x: xSpan, y: ySpan } = config.span; @@ -99,7 +92,7 @@ export default class TickLayer extends PointLayer { let y0Px; let yPx; const d = data[i]; - const row = d._data; + const row = d.source; if (xField) { xPx = xAxis.getScaleValue(d.x) + offsetX; x0Px = xPx + xSpan; @@ -136,39 +129,109 @@ export default class TickLayer extends PointLayer { xPx += xSpan / 2; x0Px -= xSpan / 2; } - const style = {}; - const meta = {}; - const { color, rawColor } = getLayerColor({ datum: d, index: i }, - { colorEncoding, colorAxis, colorFieldIndex }); + const color = colorAxis.getColor(d.color); + const resolvedEncodings = resolveEncodingValues({ + values: { + x: xPx, + y: yPx, + x0: x0Px, + y0: y0Px, + color + }, + data: d + }, i, data, layerInst); - style.stroke = color; - meta.stateColor = {}; - meta.originalColor = rawColor; - meta.colorTransform = {}; if (!isNaN(xPx) && !isNaN(yPx)) { const point = { enter: {}, update: { - x: xPx, - y: yPx, - x0: x0Px, - y0: y0Px + x: resolvedEncodings.x, + y: resolvedEncodings.y, + x0: resolvedEncodings.x0, + y0: resolvedEncodings.y0 + }, + style: { + stroke: resolvedEncodings.color }, - style, - _data: row, - _id: d._id, source: row, - rowId: d._id, - meta + rowId: d.rowId, + meta: getColorMetaInf(resolvedEncodings.color, colorAxis) }; - point.className = getIndividualClassName(d, i, data, this); + point.className = getIndividualClassName(d, i, data, layerInst); points.push(point); - this.cachePoint(d[key], point); + layerInst.cachePoint(d[key], point); } } - points = positionPoints(this, points); + points = positionPoints(layerInst, points); return points; } +}; + +/** + * This layer is used to create small lines. The orientation of the line is determined by the positional + * encoding properties x0 and y0. The mark type of the layer is ```tick```. + * + * @public + * + * @class + * @module TickLayer + * @extends BaseLayer + */ +export default class TickLayer extends PointLayer { + + /** + * + * + * @staticg + * + * @memberof TickLayer + */ + static defaultConfig () { + return defaultConfig; + } + + /** + * + * + * @static + * + * @memberof TickLayer + */ + static formalName () { + return 'tick'; + } + + /** + * + * + * @static + * + * @memberof TickLayer + */ + static drawFn () { + return drawTicks; + } + + /** + * + * + * + * @memberof TickLayer + */ + elemType () { + return 'path'; + } + + /** + * Generates an array of objects containing x, y, width and height of the points from the data + * @param {Array.} data Data Array + * @param {Object} encoding Config + * @param {Object} axes Axes object + * @return {Array.} Array of points + */ + translatePoints (data, config) { + return pointTranslators[this.coord()](data, config, this); + } getMeasurementConfig (offsetX, offsetY, widthSpan, heightSpan) { return { diff --git a/packages/visual-unit/README.md b/packages/visual-unit/README.md index 8d30774e..7b7a03ad 100644 --- a/packages/visual-unit/README.md +++ b/packages/visual-unit/README.md @@ -10,7 +10,7 @@ $ npm install --save @chartshq/visual-unit ## Docs -Please refer to [this](https://www.charts.com/muze/docs) for detailed documentation. +Please refer to [this](https://muzejs.org/docs) for detailed documentation. ## Contributing diff --git a/packages/visual-unit/package.json b/packages/visual-unit/package.json index f901d46d..992d02dd 100644 --- a/packages/visual-unit/package.json +++ b/packages/visual-unit/package.json @@ -2,40 +2,37 @@ "name": "@chartshq/visual-unit", "version": "1.0.0", "description": "Component which manages layers and interactions", - "homepage": "https://www.charts.com/muze", + "homepage": "https://muzejs.org", "license": "MIT", - "author": "Charts.com ", "contributors": [ { "name": "Akash Ghoswami", - "email": "akash@charts.com" + "email": "akashgoswami90s@gmail.com" }, { "name": "Ranajit Banerjee", - "email": "ranajit.banerjee@charts.com", + "email": "ranajit.113124@gmail.com", "url": "https://github.com/ranajitbanerjee" }, { "name": "Mridul Meharia", - "email": "mridul@charts.com", + "email": "mehariamridul@gmail.com", "url": "https://github.com/mridulmeh" }, { - "name": "Subhash Haldar", - "email": "subhash@charts.com" + "name": "Subhash Haldar" }, { - "name": "Sandeep Acharya", - "email": "sandeep@charts.com" + "name": "Sandeep Acharya" }, { "name": "Rousan Ali", - "email": "rousan@charts.com", + "email": "rousanali786@gmail.com", "url": "https://rousan.io" }, { "name": "Ujjal Kumar Dutta", - "email": "ujjal@charts.com" + "email": "duttaujjalkumar@live.com" } ], "main": "src/index.js", diff --git a/packages/visual-unit/src/default-config.js b/packages/visual-unit/src/default-config.js index 43dae6fa..6ab395c7 100644 --- a/packages/visual-unit/src/default-config.js +++ b/packages/visual-unit/src/default-config.js @@ -9,6 +9,7 @@ export const defaultConfig = { defClassName: 'visual-unit', className: '', trackerClassName: 'visual-unit-tracker', + minOuterRadius: 10, gridLines: { defClassName: 'axis-grid-lines', className: '', diff --git a/packages/visual-unit/src/helper/grid-lines.js b/packages/visual-unit/src/helper/grid-lines.js index 05ac295e..a9af999a 100644 --- a/packages/visual-unit/src/helper/grid-lines.js +++ b/packages/visual-unit/src/helper/grid-lines.js @@ -1,4 +1,4 @@ -import { getObjProp, defaultValue, makeElement, DimensionSubtype, DataModel } from 'muze-utils'; +import { getObjProp, defaultValue, makeElement, DimensionSubtype, DataModel, createSelection } from 'muze-utils'; import { ScaleType } from '@chartshq/muze-axis'; import { layerFactory, LAYER_TYPES } from '@chartshq/visual-layer'; import { @@ -43,7 +43,7 @@ const getLayerDefinition = (context, axes, type, orientation) => { return isNegativeDomain && data[orientation] === 0 ? zeroLineColor : gridLineColor; } }; - + const { color, shape, size } = context.axes(); return { definition: { defClassName: `${defClassName}-${orientation}`, @@ -63,7 +63,10 @@ const getLayerDefinition = (context, axes, type, orientation) => { encoding }, axes: { - [orientation]: axis + [orientation]: axis, + color: color[0], + shape: shape[0], + size: size[0] }, interactive: false }; @@ -87,8 +90,15 @@ export const getGridLayerDefinitions = (context, config, type) => ['x', 'y'].map return show ? getLayerDefinition(context, axes, type, axisType) : null; }).filter(d => d !== null); +const dimensionSubTypes = Object.values(DimensionSubtype).reduce((acc, v) => { + acc[v] = 1; + return acc; +}, {}); +const getValidSubtype = subtype => (!dimensionSubTypes[subtype] ? DimensionSubtype.CATEGORICAL : subtype); + export const getGridLayerData = (axes, fields, fieldsConfig) => { const gridData = {}; + ['x', 'y'].forEach((type) => { let ticks = axes[type][0].getTickValues(); const subtype = getObjProp(fieldsConfig, getObjProp(fields, type, 0).getMembers()[0], 'def', 'subtype'); @@ -110,11 +120,11 @@ export const getGridLayerData = (axes, fields, fieldsConfig) => { }, { name: 'xdim', type: 'dimension', - subtype + subtype: getValidSubtype(subtype) }, { name: 'ydim', type: 'dimension', - subtype + subtype: getValidSubtype(subtype) } ]; const len = Math.max(ticks.length); @@ -132,27 +142,6 @@ export const getGridLayerData = (axes, fields, fieldsConfig) => { return gridData; }; -// @todo Use dataSelect method to reuse instances when the method is fixed. #110 -export const createGridLines = (instances = {}, createFn, definitions, iteratorFn) => { - const map = {}; - definitions.forEach((def) => { - const name = def.definition.name; - let instance = instances[name]; - if (!instance) { - instances[name] = instance = createFn(def); - } - iteratorFn(instance, def, name); - map[name] = 1; - }); - for (const key in instances) { - if (!(key in map)) { - instances[key].remove(); - delete instances[key]; - } - } - return instances; -}; - export const createGridLineLayer = (context) => { const vuConf = context.config(); const metaInf = context.metaInf(); @@ -171,18 +160,20 @@ export const createGridLineLayer = (context) => { const definitions = getGridLayerDefinitions(context, config, type); const sel = `_${type}Selection`; - context[sel] = createGridLines(context[sel], () => { + context[sel] = createSelection(context[sel], () => { const inst = layerFactory.getLayerInstance({ mark }); inst.dependencies(context._layerDeps); return inst; - }, definitions, (layer, atomicDef, key) => { + }, definitions, atomicDef => atomicDef.definition.name); + context[sel].each((layer, atomicDef) => { const definition = atomicDef.definition; + const name = definition.name; const sConf = layerFactory.getSerializedConf(mark, definition); const axesObj = atomicDef.axes; layer.metaInf({ unitRowIndex: metaInf.rowIndex, unitColIndex: metaInf.colIndex, - namespace: `${metaInf.namespace}${type}${key}` + namespace: `${metaInf.namespace}${type}${name}` }) .store(store) .config(sConf) @@ -191,7 +182,7 @@ export const createGridLineLayer = (context) => { }) .axes(axesObj); }); - context[`_${type}`] = Object.values(context[sel]); + context[`_${type}`] = context[sel].getObjects(); }); }; diff --git a/packages/visual-unit/src/helper/index.js b/packages/visual-unit/src/helper/index.js index c523bbde..a446f0f0 100644 --- a/packages/visual-unit/src/helper/index.js +++ b/packages/visual-unit/src/helper/index.js @@ -11,7 +11,7 @@ import { MeasureSubtype, getNearestValue } from 'muze-utils'; -import { layerFactory } from '@chartshq/visual-layer'; +import { layerFactory, ENCODING } from '@chartshq/visual-layer'; export const getDimensionMeasureMap = (layers, fieldsConfig) => { const retinalEncodingsAndMeasures = {}; @@ -74,6 +74,7 @@ export const getLayerFromDef = (context, definition, existingLayer, namespaces) definition = toArray(definition); definition.reduce((acc, def, idx) => { const instance = instanceArr[idx]; + instance.coord(context.coord()); instance.config(def); instance.valueParser(context.valueParser()); instance.dependencies(dependencies); @@ -103,51 +104,6 @@ export const resolveEncodingTransform = (layerInst, store) => { return depArr; }; -export const createLayers = (context, layerDefinitions) => { - const layersMap = context._layersMap; - const markSet = {}; - const store = { - layers: {}, - components: { - unit: context - } - }; - let layerIndex = 0; - let layers = layerDefinitions.sort((a, b) => a.order - b.order).reduce((layersArr, layerDef, i) => { - const mark = layerDef.mark; - const definition = layerDef.def; - const markId = `${mark}-${i}`; - const defArr = toArray(definition); - defArr.forEach((def) => { - def.order = layerDef.order + layerIndex; - }); - layerIndex += defArr.length; - const instances = getLayerFromDef(context, definition, layersMap[markId], i); - store.layers = Object.assign(store.layers, instances); - const instanceValues = Object.values(instances); - layersArr = layersArr.concat(...instanceValues); - layersMap[markId] = instanceValues; - markSet[markId] = markId; - return layersArr; - }, []); - store.unit = context; - const layerdeps = {}; - layers.forEach((layer) => { - const depArr = resolveEncodingTransform(layer, store); - layerdeps[layer.alias()] = depArr; - }); - - const order = getDependencyOrder(layerdeps); - layers = order.map(name => store.layers[name]); - for (const key in layersMap) { - if (!(key in markSet)) { - layersMap[key].forEach(layer => layer.remove()); - delete layersMap[key]; - } - } - return layers; -}; - export const sanitizeLayerDef = (layerDefs) => { const sanitizedDefs = []; layerDefs.forEach((layerDef, i) => { @@ -191,22 +147,29 @@ export const attachAxisToLayers = (axes, layers, layerAxisIndex) => { objectIterator(axes, (key) => { const axisInf = layerAxisIndex[layerId]; if (axisInf) { - axes[key] && (axesObj[key] = axes[key][axisInf[key] || 0]); + const axisArr = axes[key] || []; + const axisIndex = axisInf[key] >= 0 ? axisInf[key] : axisArr.length - 1; + axes[key] && (axesObj[key] = defaultValue(axes[key][axisIndex])); } }); Object.keys(axesObj).length && layer.axes(axesObj); }); }; +const { X, Y, RADIUS, ANGLE, ANGLE0, RADIUS0 } = ENCODING; + export const getLayerAxisIndex = (layers, fields) => { const layerAxisIndex = {}; layers.forEach((layer) => { const { axis, encoding } = layer.config(); const id = layer.id(); - ['x', 'y'].forEach((type) => { + [X, Y, ANGLE, ANGLE0, RADIUS].forEach((type) => { let index; - const field = defaultValue(getObjProp(axis, type), encoding[type] && encoding[type].field); - if (fields[type]) { + const specificField = getObjProp(encoding, type, 'field'); + const encodingField = type === RADIUS ? defaultValue(specificField, getObjProp(encoding, RADIUS0, 'field')) + : getObjProp(encoding, type, 'field'); + const field = defaultValue(getObjProp(axis, type), encodingField); + if (fields[type] && fields[type].length) { index = fields[type].findIndex(fieldInst => fieldInst.getMembers().indexOf(field) !== -1); } else { index = 0; @@ -218,13 +181,20 @@ export const getLayerAxisIndex = (layers, fields) => { return layerAxisIndex; }; +const getValidDomain = (domain, domain1, encodingType, fieldType) => { + if (encodingType === ANGLE || encodingType === ANGLE0) { + return domain.concat(domain1.filter(d => domain.indexOf(d) === -1)); + } + return unionDomain([domain, domain1], fieldType); +}; + export const unionDomainFromLayers = (layers, axisFields, layerAxisIndex, fieldsConfig) => { let domains = {}; layers = layers.filter(layer => layer.getDataDomain() !== null); layers.forEach((layer) => { let domainValues = {}; const config = layer.config(); - const encoding = config.encoding; + // const encoding = config.encoding; const layerDomain = layer.getDataDomain(); const layerId = layer.id(); @@ -232,16 +202,15 @@ export const unionDomainFromLayers = (layers, axisFields, layerAxisIndex, fields domainValues = Object.entries(layerDomain); domains = domainValues.reduce((fieldDomain, domain) => { const encodingType = domain[0]; - const field = encoding[encodingType].field; const axisIndex = layerAxisIndex[layerId][encodingType]; - if (encodingType in axisFields) { - const fieldStr = `${axisFields[encodingType][axisIndex]}`; - fieldDomain[fieldStr] = fieldDomain[fieldStr] || []; - fieldDomain[fieldStr] = unionDomain(([fieldDomain[fieldStr], domain[1]]), - fieldsConfig[field].def.subtype ? fieldsConfig[field].def.subtype : - fieldsConfig[field].def.type); - } else { - fieldDomain[encodingType] = domain[1]; + const field = getObjProp(axisFields, encodingType, axisIndex); + !fieldDomain[encodingType] && (fieldDomain[encodingType] = {}); + const encodingDomain = fieldDomain[encodingType]; + if (field) { + const fieldStr = `${field}`; + encodingDomain[fieldStr] = encodingDomain[fieldStr] || []; + encodingDomain[fieldStr] = getValidDomain(encodingDomain[fieldStr], + domain[1], encodingType, fieldsConfig[field.getMembers()[0]].def.subtype); } return fieldDomain; }, domains); @@ -336,3 +305,23 @@ export const createRenderPromise = (unit) => { createRenderPromise(unit); }); }; + +export const getRadiusRange = (width, height, config = {}) => { + const { + innerRadius, + outerRadius + } = config; + + return [innerRadius || 0, outerRadius || Math.min(height, + width) / 2]; +}; + +export const setAxisRange = (context) => { + const axes = context.axes(); + const { radius: radiusAxes } = axes; + if (radiusAxes) { + radiusAxes.forEach((axis) => { + axis.range(getRadiusRange(context.width(), context.height())); + }); + } +}; diff --git a/packages/visual-unit/src/listener-map.js b/packages/visual-unit/src/listener-map.js index acfffad2..7a1b8218 100644 --- a/packages/visual-unit/src/listener-map.js +++ b/packages/visual-unit/src/listener-map.js @@ -1,4 +1,4 @@ -import { STATE_NAMESPACES, temporalFields } from 'muze-utils'; +import { STATE_NAMESPACES, temporalFields, getObjProp, defaultValue } from 'muze-utils'; import * as PROPS from './enums/reactive-props'; import { transformDataModels, @@ -14,7 +14,7 @@ const removeExitLayers = (layerDefs, context) => { const layersMap = context._layersMap; const markSet = {}; layerDefs.forEach((layerDef, i) => { - const id = `${layerDef.mark}-${i}`; + const id = defaultValue(layerDef.name, `${layerDef.mark}-${i}`); markSet[id] = true; }); @@ -63,6 +63,15 @@ export const listenerMap = (context, namespace, metaInf) => ([ } context.addLayer(layerDefs); + const adjustRange = context.layers().some(inst => inst.hasPlotSpan()); + ['x', 'y'].forEach((type) => { + const axisArr = defaultValue(getObjProp(context.axes(), type), []); + axisArr.forEach((axis) => { + axis.config({ + adjustRange + }); + }); + }); context._lifeCycleManager.notify({ client: context.layers(), action: 'initialized', diff --git a/packages/visual-unit/src/local-options.js b/packages/visual-unit/src/local-options.js index 991f1205..0270bdbb 100644 --- a/packages/visual-unit/src/local-options.js +++ b/packages/visual-unit/src/local-options.js @@ -33,7 +33,7 @@ export default { const cachedData = context.cachedData(); context.cachedData([...cachedData, data]); } else { - const oldData = context.data(); + const oldData = context.cachedData()[0]; oldData && oldData.unsubscribe('propagation'); context.cachedData([data]); } diff --git a/packages/visual-unit/src/props.js b/packages/visual-unit/src/props.js index 7d4149d3..50c09879 100644 --- a/packages/visual-unit/src/props.js +++ b/packages/visual-unit/src/props.js @@ -21,5 +21,6 @@ export const PROPS = { parentContainerInf: {}, valueParser: { defaultValue: val => val - } + }, + coord: {} }; diff --git a/packages/visual-unit/src/visual-unit.js b/packages/visual-unit/src/visual-unit.js index 778fe341..3777efb1 100644 --- a/packages/visual-unit/src/visual-unit.js +++ b/packages/visual-unit/src/visual-unit.js @@ -28,7 +28,8 @@ import { sanitizeLayerDef, createSideEffectGroup, resolveEncodingTransform, - createRenderPromise + createRenderPromise, + setAxisRange } from './helper'; import { renderGridLineLayers } from './helper/grid-lines'; import localOptions from './local-options'; @@ -83,8 +84,8 @@ export default class VisualUnit { this._lifeCycleManager = dependencies.lifeCycleManager; this._layersMap = {}; - this._gridLinesSelection = {}; - this._gridBandsSelection = {}; + this._gridLinesSelection = null; + this._gridBandsSelection = null; this._gridLines = []; this._gridBands = []; this._layerNamespaces = {}; @@ -215,6 +216,8 @@ export default class VisualUnit { height, class: qualifiedClassName.join(' ') }); + + setAxisRange(this); renderGridLineLayers(this, node); renderLayers(this, node, this.layers(), { width, @@ -383,7 +386,6 @@ export default class VisualUnit { store.unit = this; const layerdeps = {}; const layersArr = [].concat(...Object.values(this._layersMap)); - layersArr.forEach((layer) => { const alias = layer.alias(); store.layers[alias] = layer; @@ -475,6 +477,10 @@ export default class VisualUnit { }; } + getDataDomain () { + return this.store().get(`${STATE_NAMESPACES.UNIT_GLOBAL_NAMESPACE}.domain.${this.metaInf().namespace}`); + } + /** * * diff --git a/scripts/run-autotest.js b/scripts/run-autotest.js index 4bf1a09c..2714abfd 100644 --- a/scripts/run-autotest.js +++ b/scripts/run-autotest.js @@ -17,11 +17,10 @@ const mycroftProtocol = 'http'; const mycroftHost = 'sherlock.charts.com'; const mycroftPort = '3001'; const mollyProtocol = 'http'; -const mollyHost = '192.168.102.171'; -const mollyPort = '8084'; +const mollyHost = 'sherlock.charts.com'; +const mollyPort = '80'; const currentPrintStream = process.stdout; const initiateStatusInterval = 1000; -let autotestDone = false; let cursorRelYPos = 0; program @@ -78,31 +77,15 @@ const uploadBuild = async (tag) => { return uploadRes; }; -const makeAutoTestRequest = (reqId, tag, doneCallback) => { +const initiateAutoTest = async (tag) => { + const reqId = uuid(); const testcaseInitiateURL = `${mycroftProtocol}://${mycroftHost}:${mycroftPort}/api/v1/autotest/initiate`; const payload = { requestId: reqId, libVersion: tag, all: true }; - - axios.post(testcaseInitiateURL, payload) - .then((resp) => { - if (resp.status !== HttpStatus.OK) { - doneCallback(null, new Error(`${resp.status}, ${resp.statusText}`)); - return; - } - - doneCallback(resp.data, null); - }) - .catch((err) => { - doneCallback(null, err); - }); -}; - -const initiateAutoTest = async (tag, doneCallback) => { - const reqId = uuid(); - makeAutoTestRequest(reqId, tag, doneCallback); + await axios.post(testcaseInitiateURL, payload); return reqId; }; @@ -117,23 +100,16 @@ const fetchAndUpdateAutotestStatus = (reqId, onUpdateCallback) => new Promise((r const encReqId = encodeURIComponent(reqId); const testcaseInitiateStatusURL = `${mycroftProtocol}://${mycroftHost}:${mycroftPort}/api/v1/autotest/initiate/status?requestId=${encReqId}`; axios.get(testcaseInitiateStatusURL) - .then((resp) => { - if (autotestDone) { + .then(({ data }) => { + onUpdateCallback(data); + if (data.done) { + res(); return; } - onUpdateCallback(resp.data); setTimeout(fn, initiateStatusInterval); }) .catch((err) => { - if (autotestDone) { - return; - } - onUpdateCallback({ - total: 0, - passed: 0, - failed: 0 - }); - setTimeout(fn, initiateStatusInterval); + rej(err); }); }, initiateStatusInterval); }); @@ -238,18 +214,7 @@ const run = async () => { spinner = ora('Initiating autotest').start(); try { - reqId = await initiateAutoTest(tag, (finalStatus, err) => { - autotestDone = true; - if (err) { - log(err.message); - return; - } - printStatus(finalStatus); - printAutotestSummery(tag) - .catch((err2) => { - log(err2.message); - }); - }); + reqId = await initiateAutoTest(tag); spinner.succeed('Initiated autotest'); } catch (err) { spinner.fail(); @@ -258,9 +223,20 @@ const run = async () => { } out('\n'); - await fetchAndUpdateAutotestStatus(reqId, (newStatus) => { - printStatus(newStatus); - }); + try { + await fetchAndUpdateAutotestStatus(reqId, (newStatus) => { + printStatus(newStatus); + }); + } catch (err) { + out(`${chalk.red('Error')}: ${err.message || String(err)}`); + } + + out('\n'); + try { + await printAutotestSummery(tag); + } catch (err) { + out(`${chalk.red('Error')}: ${err.message || String(err)}`); + } }; run()